pax_global_header00006660000000000000000000000064142024710460014512gustar00rootroot0000000000000052 comment=acf8c48af9d166d76938d9feed91db097973ec17 PyBDSF-1.10.1/000077500000000000000000000000001420247104600126215ustar00rootroot00000000000000PyBDSF-1.10.1/.dockerignore000066400000000000000000000000601420247104600152710ustar00rootroot00000000000000.git/ build/ dist/ doc/build/ *.egg-info/ venv/ PyBDSF-1.10.1/.gitignore000066400000000000000000000020521420247104600146100ustar00rootroot00000000000000# Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # Distribution / packaging .Python env/ develop-eggs/ dist/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover .hypothesis/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # SageMath parsed files *.sage.py # dotenv .env # virtualenv .venv venv/ ENV/ # Spyder project settings .spyderproject # Rope project settings .ropeproject PyBDSF-1.10.1/.travis.yml000066400000000000000000000004601420247104600147320ustar00rootroot00000000000000language: python python: - 3.8 matrix: allow_failures: - python: 3.8 before_install: - sudo apt-get -qq update - sudo apt-get install -y libboost-python-dev gfortran - pip install setuptools numpy scipy astropy install: "pip install ." script: "cd test && python tbdsf_process_image.py" PyBDSF-1.10.1/LICENSE000066400000000000000000001045051420247104600136330ustar00rootroot00000000000000 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. {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 . 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: {project} Copyright (C) {year} {fullname} 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 . PyBDSF-1.10.1/MANIFEST.in000066400000000000000000000031751420247104600143650ustar00rootroot00000000000000# Required minpack sources include src/minpack/lmder.f include src/minpack/lmpar.f include src/minpack/qrfac.f include src/minpack/qrsolv.f include src/minpack/enorm.f include src/minpack/dpmpar.f # Required port3 sources include src/port3/dnsg.f include src/port3/dn2g.f include src/port3/drnsg.f include src/port3/drn2g.f include src/port3/d1mach.f include src/port3/da7sst.f include src/port3/dc7vfn.f include src/port3/dd7tpr.f include src/port3/dd7upd.f include src/port3/df7hes.f include src/port3/dg7lit.f include src/port3/dg7qts.f include src/port3/ditsum.f include src/port3/divset.f include src/port3/dl7itv.f include src/port3/dl7ivm.f include src/port3/dl7mst.f include src/port3/dl7nvr.f include src/port3/dl7sqr.f include src/port3/dl7srt.f include src/port3/dl7svn.f include src/port3/dl7svx.f include src/port3/dl7tsq.f include src/port3/dl7tvm.f include src/port3/dl7vml.f include src/port3/dn2cvp.f include src/port3/dn2lrd.f include src/port3/dn2rdp.f include src/port3/do7prd.f include src/port3/dparck.f include src/port3/dq7apl.f include src/port3/dq7rad.f include src/port3/dq7rfh.f include src/port3/dr7mdc.f include src/port3/drldst.f include src/port3/ds7cpr.f include src/port3/ds7lup.f include src/port3/ds7lvm.f include src/port3/dv2axy.f include src/port3/dv2nrm.f include src/port3/dv7cpy.f include src/port3/dv7dfl.f include src/port3/dv7prm.f include src/port3/dv7scl.f include src/port3/dv7scp.f include src/port3/dv7swp.f include src/port3/i1mach.f include src/port3/i7mdcn.f include src/port3/stopx.f # Other fortran include files include src/fortran/constants.inc # Header files for natgrid include natgrid/Include/*.h PyBDSF-1.10.1/README.rst000066400000000000000000000055411420247104600143150ustar00rootroot00000000000000PyBDSF ====== PyBDSF (the Python **B**\ lob **D**\ etection and **S**\ ource **F**\ inder, formerly PyBDSM) is a tool designed to decompose radio interferometry images into sources and make available their properties for further use. PyBDSF can decompose an image into a set of Gaussians, shapelets, or wavelets as well as calculate spectral indices and polarization properties of sources and measure the psf variation across an image. PyBDSF uses an interactive environment based on CASA that will be familiar to most radio astronomers. Additionally, PyBDSF may also be used in Python scripts. The documentation is currently hosted at http://www.astron.nl/citt/pybdsf Installation ------------ Installation can be done in a number of ways. In order of preference (read: easy of use): * Install the latest release from PyPI:: pip install bdsf * Install the ``master`` branch from the PyBDSF git repository:: pip install git+https://github.com/lofar-astron/PyBDSF.git Or install install a specific revision or release, for example ``v1.9.3``:: pip install git+https://github.com/lofar-astron/PyBDSF.git@v1.9.3 * Install from a local source tree, e.g. after you cloned the git repository:: pip install . .. note:: The interactive shell ``pybdsf`` is no longer installed by default. To install it you have to specify the extra ``[ishell]``. For example:: pip install bdsf[ishell] If you get the error:: RuntimeError: module compiled against API version 0xf but this version of numpy is 0xd then please update ``numpy`` with ``pip install -U numpy``. .. attention:: It is *not* recommend to use ``python setup.py install``. It is deprecated, and we do *not* support it. External requirements include the ubuntu packages (or similar packages in another Linux distribution): * ``gfortran`` * ``libboost-python-dev`` * ``libboost-numpy-dev`` (Only if boost > 1.63) * ``python-setuptools``. Also, a working ``numpy`` installation is required. At runtime, you will need ``scipy`` and either ``pyfits`` and ``pywcs`` or ``python-casacore`` or ``astropy``. If you install as a user not using conda, use ``pip install --user``. Make sure to use similar versions for gcc, g++ and gfortran (use update-alternatives if multiple versions of gcc/g++/gfortran are present on the system). In this case, the script ``pybdsf`` is installed in ``~/.local/bin``, so you might want to add that to your ``$PATH``. Installation on MacOS / OSX is more involved, you will need the packages mentioned above, for example installed with Homebrew. You will need to tell `setup.py` to use the same compiler for fortran as for C++. In case of problems, see https://github.com/lofar-astron/PyBDSF/issues/104#issuecomment-509267088 for some possible steps to try. .. image:: https://travis-ci.org/lofar-astron/PyBDSF.svg?branch=master :target: https://travis-ci.org/lofar-astron/PyBDSF PyBDSF-1.10.1/bdsf/000077500000000000000000000000001420247104600135375ustar00rootroot00000000000000PyBDSF-1.10.1/bdsf/__init__.py000066400000000000000000000222521420247104600156530ustar00rootroot00000000000000"""Initialize PyBDSF namespace. Import all standard operations, define default chain of operations and provide function 'execute', which can execute chain of operations properly. Also define the 'process_image' convienence function that can take options as arguments rather than as a dictionary (as required by 'execute'). """ from __future__ import print_function from __future__ import absolute_import try: import matplotlib.pyplot as pl has_pl = True except (RuntimeError, ImportError, AssertionError): import sys print("\033[31;1mWARNING\033[0m: Matplotlib pyplot could not be imported. Plotting is disabled.", file=sys.stderr) has_pl = False from .readimage import Op_readimage from .collapse import Op_collapse from .preprocess import Op_preprocess from .rmsimage import Op_rmsimage from .threshold import Op_threshold from .islands import Op_islands from .gausfit import Op_gausfit from .make_residimage import Op_make_residimage from .output import Op_outlist from .shapefit import Op_shapelets from .gaul2srl import Op_gaul2srl from .spectralindex import Op_spectralindex from .polarisation import Op_polarisation from .wavelet_atrous import Op_wavelet_atrous from .psf_vary import Op_psf_vary from .cleanup import Op_cleanup from ._version import __version__ import gc default_chain = [Op_readimage(), Op_collapse(), Op_preprocess(), Op_rmsimage(), Op_threshold(), Op_islands(), Op_gausfit(), Op_wavelet_atrous(), Op_shapelets(), Op_gaul2srl(), Op_spectralindex(), Op_polarisation(), Op_make_residimage(), Op_psf_vary(), Op_outlist(), Op_cleanup() ] fits_chain = default_chain # for legacy scripts def execute(chain, opts): """Execute chain. Create new Image with given options and apply chain of operations to it. The opts input must be a dictionary. """ from .image import Image from . import mylogger if 'quiet' in opts: quiet = opts['quiet'] else: quiet = False if 'debug' in opts: debug = opts['debug'] else: debug = False log_filename = opts["filename"] + '.pybdsf.log' mylogger.init_logger(log_filename, quiet=quiet, debug=debug) mylog = mylogger.logging.getLogger("PyBDSF.Init") mylog.info("Processing "+opts["filename"]) try: img = Image(opts) img.log = log_filename _run_op_list(img, chain) return img except RuntimeError as err: # Catch and log, then re-raise if needed (e.g., for AstroWise) mylog.error(str(err)) raise except KeyboardInterrupt: mylogger.userinfo(mylog, "\n\033[31;1mAborted\033[0m") raise def _run_op_list(img, chain): """Runs an Image object through chain of op's. This is separate from execute() to allow other modules (such as interface.py) to use it as well. """ from time import time from .interface import raw_input_no_history from .gausfit import Op_gausfit from . import mylogger import gc ops = [] stopat = img.opts.stop_at # Make sure all op's are instances for op in chain: if isinstance(op, type): ops.append(op()) else: ops.append(op) if stopat == 'read' and isinstance(op, Op_readimage): break if stopat == 'isl' and isinstance(op, Op_islands): break # Log all non-default parameters mylog = mylogger.logging.getLogger("PyBDSF.Init") mylog.info("PyBDSF version %s" % (__version__, )) par_msg = "Non-default input parameters:\n" user_opts = img.opts.to_list() for user_opt in user_opts: k, v = user_opt val = img.opts.__getattribute__(k) if val != v._default and v.group() != 'hidden': par_msg += ' %-20s = %s\n' % (k, repr(val)) mylog.info(par_msg[:-1]) # -1 is to trim final newline # Run all op's dc = '\033[34;1m' nc = '\033[0m' for op in ops: if isinstance(op, Op_gausfit) and img.opts.interactive: print(dc + '--> Displaying islands and rms image...' + nc) if max(img.ch0_arr.shape) > 4096: print(dc + '--> Image is large. Showing islands only.' + nc) img.show_fit(rms_image=False, mean_image=False, ch0_image=False, ch0_islands=True, gresid_image=False, sresid_image=False, gmodel_image=False, smodel_image=False, pyramid_srcs=False) else: img.show_fit(rms_image=True, mean_image=True, ch0_islands=True, gresid_image=False, sresid_image=False, gmodel_image=False, smodel_image=False, pyramid_srcs=False) prompt = dc + "Press enter to continue or 'q' to quit .. : " + nc answ = raw_input_no_history(prompt) while answ != '': if answ == 'q': return False answ = raw_input_no_history(prompt) op.__start_time = time() op(img) op.__stop_time = time() gc.collect() if img.opts.interactive and not img._pi: print(dc + 'Fitting complete. Displaying results...' + nc) if img.opts.shapelet_do: show_smod = True show_sres = True else: show_smod = False show_sres = False if img.opts.spectralindex_do: show_spec = True else: show_spec = False if max(img.ch0_arr.shape) > 4096: print(dc + '--> Image is large. Showing Gaussian residual image only.' + nc) img.show_fit(rms_image=False, mean_image=False, ch0_image=False, ch0_islands=False, gresid_image=True, sresid_image=False, gmodel_image=False, smodel_image=False, pyramid_srcs=False, source_seds=show_spec) else: img.show_fit(smodel_image=show_smod, sresid_image=show_sres, source_seds=show_spec) if img.opts.print_timing: print("="*36) print("%18s : %10s" % ("Module", "Time (sec)")) print("-"*36) for i, op in enumerate(chain): if hasattr(op, '__start_time'): print("%18s : %f" % (op.__class__.__name__, (op.__stop_time - op.__start_time))) indx_stop = i print("="*36) print("%18s : %f" % ("Total", (chain[indx_stop].__stop_time - chain[0].__start_time))) # Log all internally derived parameters mylog = mylogger.logging.getLogger("PyBDSF.Final") par_msg = "Internally derived parameters:\n" import inspect import types for attr in inspect.getmembers(img.opts): if attr[0][0] != '_': if isinstance(attr[1], (int, str, bool, float, type(None), tuple, list)): if hasattr(img, attr[0]): used = img.__getattribute__(attr[0]) if used != attr[1] and isinstance(used, (int, str, bool, float, type(None), tuple, list)): par_msg += ' %-20s : %s\n' % (attr[0], repr(used)) mylog.info(par_msg[:-1]) # -1 is to trim final newline return True def process_image(input, **kwargs): """Run a standard analysis and returns the associated Image object. The input can be a FITS or CASA image, a PyBDSF parameter save file, or a dictionary of options. Partial names are allowed for the parameters as long as they are unique. Parameters are set to default values if par = ''. Examples: > img = bdsf.process_image('example.fits', thresh_isl=4) --> process FITS image names 'example.fits' > img_3C196 = bdsf.process_image('3C196.image', mea='map') --> process CASA image, 'mean_map' parameter is abbreviated > img_VirA = bdsf.process_image('VirA_im.pybdsf.sav') --> load parameter save file and process """ from .interface import load_pars from .image import Image import os # Try to load input assuming it's a parameter save file or a dictionary. # load_pars returns None if this doesn't work. img, err = load_pars(input) # If load_pars fails (returns None), assume that input is an image file. If it's not a # valid image file (but is an existing file), an error will be raised # by img.process() during reading of the file. if img is None: if os.path.exists(input): img = Image({'filename': input}) else: raise RuntimeError("File '" + input + "' not found.") # Set logging options (must be done explicitly, as they are used before the # kwargs are parsed in img.process()) if 'quiet' in kwargs: img.opts.quiet = kwargs['quiet'] if 'debug' in kwargs: img.opts.debug = kwargs['debug'] # Now process it. Any kwargs specified by the user will # override those read in from the parameter save file or dictionary. img.process(**kwargs) return img PyBDSF-1.10.1/bdsf/_version.py000066400000000000000000000673521420247104600157520ustar00rootroot00000000000000"""Version module. This module simply stores the version number, as well as a changelog. """ # Version number __version__ = '1.10.1' # Changelog def changelog(): """ PyBDSF Changelog. ----------------------------------------------------------------------- 2022/02/14 - Version 1.10.1: Fix Numpy API incompatibility issue 2022/02/09 - Version 1.10.0 2022/02/09 - Update some functions as required by scipy versions >= 1.8.0 (PR #172) 2022/02/09 - Fix build issues with Python 3.8, end support for Python < 3.6, add support for Python 3.8 and 3.9, and make installation of the interactive pybdsf shell optional (PR #169) 2022/02/09 - Improve handling of the beam in the spectral index module (PR #165) 2021/05/05 - Improve handling of large, complex islands (PR #160) 2020/04/07 - Allow a file to be supplied for the ch0 image used in the spectral index module (PR #127) 2019/12/05 - Version 1.9.2 2019/12/04 - Fix exception behaviour if spline order change does not work 2019/09/27 - Add check for frequency info in header 2019/09/25 - Version 1.9.1 2019/09/25 - Fix various minor bugs 2019/06/06 - Fix blank_limit check_low error (#100) 2019/05/09 - Fix various shapelet decomposition issues 2019/05/08 - Fix crash in Gaussian fitting (#96) 2019/03/25 - Version 1.9.0 2018/10/18 - Add support for Python 3 2018/10/18 - Fix various minor bugs 2018/10/12 - Version 1.8.15 2018/10/09 - Fix segfault in Gaussian fitting (#63) 2018/10/04 - Fix math domain error (#76) 2018/06/21 - Fix setup.py for boost versions > 1.63 2018/05/18 - Version 1.8.14 2018/05/18 - Fix an error on total flux density (#50) 2018/05/18 - Add the possibility to provide an external noise and mean maps (#43) 2018/05/18 - Append the image FITS header into catalog FITS header (#53) 2018/05/18 - Make PyBDSF compatible with newer boost libraries, specifically those used in Ubuntu 18.04 (#55) 2017/11/17 - Version 1.8.13 2017/11/17 - Remove deprecated boolean operators 2017/09/01 - Version 1.8.12 2017/09/01 - Fix crash with tiny regions 2017/09/01 - Fix very low centroid peak fluxes 2017/09/01 - Fix compile error with numpy 1.13 2017/06/01 - Version 1.8.11 2017/06/01 - Fix for interactive shell problem 2017/05/31 - Version 1.8.10 2017/05/31 - Fixes for various installation and runtime issues on modern systems. 2017/03/23 - Version 1.8.9 2017/03/23 - Fix to bug that causes an error when grouping Gaussians into sources 2017/03/17 - Version 1.8.8 2017/03/17 - Rename to PyBDSF, move to github, add setup.py installer 2017/02/28 - Fix to issues related to numpy >= 1.12 and astropy >= 1.3 2016/06/10 - Version 1.8.7 2016/06/10 - Fix to bug that caused incorrect output images when input image was not square. 2016/01/20 - Version 1.8.6 2016/01/15 - Fix to bug that caused incorrect island mask when two islands are very close together. 2015/12/07 - Fix to bug that caused crash when image is masked and the src_ra_dec option is used. 2015/11/30 - Version 1.8.5 2015/11/25 - Fix to bug in export_image that resulted in incorrect output image when both trim_box and pad_image were used. 2015/11/20 - Fix to bug in wavelet module related to merging of islands. 2015/11/20 - Fix to bug in polarization module related to numbering of new islands. 2015/11/20 - Fix to bug in spectral index module related to rms map calculation. 2015/11/20 - Added option to use much faster (but also much more memory intensive) SciPy fftconvolve function instead of custom PyBDSM one. The option (use_scipy_fft) defaults to True. 2015/11/20 - Increased number of digits for values in output text catalogs 2015/08/06 - Version 1.8.4 2015/08/06 - Improved speed of wavelet module. 2015/08/06 - Added option to use PyFFTW in wavelet module if available. 2015/08/06 - Fix to IPython version check. 2015/08/06 - Fix to bug that caused a failure to write shapelet models in FITS format. 2014/11/07 - Fix to bug that caused a crash when both atrous_do = True and output_all = True. Fixed a bug that caused a crash on machines with only one core. 2014/09/26 - Version 1.8.3 2014/09/26 - Fix to bug that caused a crash when using the wavelet module and all Gaussians in an island were flagged. 2014/07/03 - Mask will now be expanded to match input image shape. Fix to bug that caused image read failure when image lacks a Stokes axis. 2014/05/14 - Version 1.8.2 2014/05/15 - Fix to bug in CASA masks generated with export_image() that caused cleaning to fail in CASA 4.2 and above. 2014/02/05 - Fix to bug that resulted in output file names being converted to lower case inappropriately. 2014/01/14 - Version 1.8.1 2014/01/13 - Added option (bbs_patches = 'mask') to allow patches in an output BBS sky model to be defined using a mask image. 2014/01/09 - Fix to bug that caused the incl_empty option to be ignored when format='fits' in the write_catalog task. 2013/12/05 - Enabled output of images in CASA format in the export_image task (img_format = 'casa'). Added an option to export_image task to export an island-mask image, with ones where there is emission and zeros elsewhere (image_type = 'island_mask'). Features in the island mask may be optionally dilated by specifying the number of dilation iterations with the mask_dilation parameter. Added an option to write a CASA region file to the write_catalog task (format = 'casabox'). Added an option to write a CSV catalog to the write_catalog task (format = 'csv'). 2013/11/04 - Added error message when the rms is zero in some part of the rms map. 2013/10/16 - Version 1.8.0 2013/10/16 - Improved wavelet fitting. Added option so that wavelet fitting can be done to the sum of images on the remaining wavelet scales, improving the signal for fitting (controlled with the atrous_sum option). Added option so that user can choose whether to include new islands found only in the wavelet images in the final fit or not (controlled with the atrous_orig_isl option). 2013/10/10 - Fixed a bug that could lead to incomplete fitting of some islands. Improved overall convergence of fits. 2013/10/10 - Version 1.7.7 2013/10/10 - Improved fitting of bright sources under certain circumstances. 2013/09/27 - Version 1.7.6 2013/09/27 - Changed caching behavior to ensure that temporary files are always deleted after they are no longer needed or on exit. 2013/09/05 - Renamed blank_zeros to blank_limit. The blank_limit option now specifies a limit below which pixels are blanked. 2013/09/05 - Enabled SAGECAL sky-model output. 2013/09/02 - Version 1.7.5 2013/09/02 - Fix to bug that caused a crash when images with 2 or 3 axes were used. Improved rms and mean calculation (following the implementation used in PySE, see http://dare.uva.nl/document/174052 for details). The threshold used to determine the clipped rms and mean values is now determined internally by default (kappa_clip = None). 2013/08/27 - Version 1.7.4 2013/08/29 - Fix to bug in show_fit() that caused error when 'i' is pressed in the plot window and shapelet decomposition had not been done. Tweak to 'pybdsm' startup shell script to avoid problems with the Mac OS X matplotlib backend on non- framework Python installations (such as Anaconda Python). 2013/08/28 - Fix to bug in process_image() that could result in wavelet Gaussians being excluded from model image under certain conditions. 2013/08/27 - Version 1.7.3 2013/08/27 - Fix to bug in image reading that caused images to be distorted. 2013/08/23 - Version 1.7.2 2013/08/23 - Improved handling of non-standard FITS CUNIT keywords. Improved loading of FITS images when trim_box is specified. 2013/08/22 - Version 1.7.1 2013/08/21 - Fix to bug that caused cached images to be deleted when rerunning an analysis. Fix to bug in show_fit() due to undefined images. Fix to bug in process_image() that would result in unneeded reprocessing. 2013/08/20 - Version 1.7.0 2013/08/19 - PyBDSM will now use Astropy if installed for FITS and WCS modules. 2013/08/11 - Fix to avoid excessive memory usage in the wavelet module (replaced scipy.signal.fftconvolve with a custom function). 2013/08/11 - Added option to use disk caching for internally derived images (do_cache). Caching can reduce memory usage and is therefore useful when processing large images. 2013/07/11 - Implemented a variable operation chain for process_image (and img.process()) that allows unneeded steps to be skipped if the image is being reprocessed. 2013/07/11 - Fixed a bug that could cause Gaussian fitting to hang during iterative fitting of large islands. 2013/06/24 - Added option (fix_to_beam) to fix the size and position angle of Gaussians to the restoring beam during fitting. Fix to bug that caused the position angle used to initialize fitting to be incorrect. 2013/03/22 - Version 1.6.1 2013/03/21 - Fix to bug in ds9 and kvis catalog files that resulted in incorrect position angles. Fix to bug in position-dependent WCS transformations that caused incorrect source parameters in output catalogs. Added option to output uncorrected source parameters to a BBS sky model file (correct_proj). 2013/03/14 - Removed sky transformations for flagged Gaussians, as these could sometimes give math domain errors. Disabled aperture flux measurement on wavelet images as it is not used/needed. 2013/02/25 - Version 1.6.0 2013/02/25 - Improved speed and accuracy of aperture flux calculation. 2013/02/20 - Added option to use the curvature map method of Hancock et al. (2012) for the initial estimation of Gaussian parameters (ini_method = 'curvature') and for grouping of Gaussians into sources (group_method = 'curvature'). 2013/02/18 - Fix to bug in spectral index module that caused sources with multiple Gaussians to be skipped. Minor adjustments to the wavelet module to improve performance. 2013/02/08 - Implemented position-dependent WCS transformations. 2013/02/08 - Added option to fit to any arbitrary location in the image within a given radius (src_ra_dec and src_radius_pix). 2013/02/04 - Fix to bug in wavelet module that caused crash when no Gaussians were fit to the main image. 2013/01/30 - Fix to bug that resulted in incorrect numbering of wavelet Gaussians. Added 'srl' output in ds9 format when using output_all = True. 2013/01/28 - Fix to bug in source grouping algorithm. Improved fitting when background mean is nonzero. Fix to allow images with GLAT and GLON WCS coordinates. Fix to bug when equinox is taken from the epoch keyword. 2012/12/19 - Version 1.5.1 2012/12/19 - Fix to bug in wavelet module that occurred when the center of the wavelet Gaussian lies outside of the image. Fix to re-enable srl output catalogs in ds9 region format. Fix to bug that resulted in the output directory not always being created. Added an option (aperture_posn), used when aperture fluxes are desired, to specify whether to center the aperture on the source centroid or the source peak. 2012/12/02 - Changes to reduce memory usage, particularly in the wavelet module. 2012/11/30 - Fix to bypass bug in matplotlib when display variable is not set. 2012/11/21 - Fixed bug that caused a crash when a detection image was used. Fixed a bug with incorrect save directory when plot_allgaus = True. 2012/10/29 - Version 1.5.0 2012/10/29 - Improved handling of WCS information so that a much greater variety of WCS systems may be used. Fixed a bug in logging that occurred when negative values were found in the rms map. Updated installation instructions. 2012/10/12 - Version 1.4.5 2012/10/12 - Added option (incl_empty) to include empty islands (that have no un-flagged Gaussians) in output catalogs. Any such empty islands are given negative source IDs and positions given by the location of the peak of the island. 2012/10/10 - Fixed a bug in Gaussian fitting that could cause a crash when fitting fails. Fixed a bug in parallelization that could cause a crash due to improper concatenation of result lists. 2012/10/09 - Version 1.4.4 2012/10/09 - Improved logging. Added a warning when one or more islands are not fit properly (i.e., no valid, unflagged Gaussians were fit). Fixed a bug in parallelization of Gaussian fitting that could cause a crash due to improper mapping of island lists to processes. 2012/10/05 - Added code to handle images with no unblanked pixels. Improved fitting robustness. 2012/10/04 - Version 1.4.3 2012/10/04 - Fixed a bug in the mean map calculation that caused mean maps with constant values (i.e., non-2D maps) to have values of 0.0 Jy/beam unless mean_map = 'const' was explicitly specified. Fixed a bug in Gaussian fitting that could cause an island to be skipped. 2012/10/02 - Fixed a bug in the PSF vary module that resulted in incorrect PSF generators being used. Added an option to smooth the resulting PSF images (psf_smooth). Parallelized the PSF interpolation and smoothing steps. Improved PSF vary documentation. 2012/09/25 - Version 1.4.2 2012/09/25 - Dramatically reduced the time required to identify valid wavelet islands. 2012/09/21 - Fixed bug that resulted in output FITS gaul tables being improperly sorted. Fixed cosmetic bug in the statusbar that could sometimes cause improper formatting. Added example of SAMP usage to the documentation. 2012/09/20 - Version 1.4.1 2012/09/20 - Fixed a bug in the wavelet module that caused a crash when no Gaussians were fit to the ch0 image. 2012/09/19 - Added option (broadcast) to show_fit task to send coordinates and row highlight request to a SAMP hub when a Gaussian is clicked. Fixed bug in aperture flux masking that sometimes caused the mask to be the wrong shape. 2012/09/18 - Added option to send images and catalogs to a SAMP hub (activated by setting outfile = 'SAMP' in the export_image and write_catalog tasks). 2012/09/13 - Improved speed of plotting when images are large and in mean/rms map generation. Fixed bug that caused residual image statistics to fail when NaNs are present. 2012/09/11 - Version 1.4.0 2012/09/11 - Parallelized Gaussian fitting, shapelet decomposition, validation of wavelet islands, and mean/rms map generation. The number of cores to be used can be specified with the ncores option (default is to use up to 8). Fixed bug in SED plotting in the show_fit task. 2012/08/29 - Fixed incorrect terminal size in parameter listing. Added logging of non-default input parameters and internally derived parameters. 2012/08/22 - Version 1.3.2 2012/08/22 - Fixed a bug that caused the user-specified rms_box to be ignored. Added an option to enable the Monte Carlo error estimation for 'M'-type sources (the do_mc_errors option), which is now disabled by default. 2012/07/11 - Version 1.3.1 2012/07/11 - Cleaned up unused options. 2012/07/10 - Fixed a bug that caused a segfault during Gaussian fitting. Fixed a bug that caused a crash when a detection image is used. 2012/07/05 - Fixed a bug that caused images written when output_all = True to be transposed. Added frequency information to all output images. Improved fitting robustness to prevent rare cases in which no valid Gaussians could be fit to an island. Modified the island-finding routine to handle NaNs properly. 2012/07/03 - Version 1.3 2012/07/03 - Fixed a bug in calculation of the positional errors of Gaussians. If interactive=True and image is large (> 4096 pixels), display is limited to 'ch0_islands' only; otherwise, show_fit() is very slow. Tweaked show_fit() to better display a single image. 2012/07/02 - Adjusted rms_box algorithm to check for negative rms values (due to interpolation with cubic spline). If negative values are found, either the box size is increased or the interpolation is done with order=1 (bilinear) instead. 2012/06/28 - Output now includes the residual image produced by using only wavelet Gaussians (if any) when atrous_do=True and output_all=True. Improved organization of files when output_all=True. Added logging of simple statistics (mean, std. dev, skew, and kurtosis) of the residual images. 2012/06/22 - Included image rotation (if any) in beam definition. Rotation angle can vary across the image (defined by image WCS). 2012/06/19 - Changed exception handling to raise exceptions when the interactive shell is not being used. Fixed bug that caused a crash when using show_fit() when no islands were found. 2012/06/15 - Added Sagecal output format for Gaussian catalogs. 2012/06/14 - Added check for newer versions of the PyBDSM software tar.gz file available on ftp.strw.leidenuniv.nl. 2012/06/13 - Added total island flux (from sum of pixels) to "gaul" and "srl" catalogs. 2012/06/06 - Version 1.2 2012/06/06 - Added option to calculate fluxes within a specified aperture radius in pixels (set with the "aperture" option). Aperture fluxes, if measured, are output in the 'srl' catalogs. Changed code that determines terminal width to be more robust. 2012/05/07 - Removed dependencies on matplotlib -- if matplotlib is not available, plotting is disabled. Corrected inconsistencies, spelling mistakes, etc. in help text and documentation. Cleaned up unneeded modules and files. 2012/05/02 - Added option to output flux densities for every channel found by the spectral index module. Added option to spectral index module to allow use of flux densities that do not meet the desired SNR. Changed flag_maxsnr criterion to also flag if the peak flux density per beam of the Gaussian exceeds the value at its center. Removed incl_wavelet option. 2012/04/20 - Promoted the adaptive_rms_box parameter to the main options listing and added the rms_box_bright option so that the user can specify either (or both) of the rms_boxes. Fixed bug in wavelet module so that invalid Gaussians (i.e., those that lie outside of islands in the ch0 image) are not used when making the residual images at each scale. Improved speed of Gaussian fitting to wavelet images. Fixed bug that resulted in pixels found to be outside the universe (check is enabled with the check_outsideuniv option) not being masked properly. 2012/04/17 - Fixed bug in psf_vary module that resulted in PSF major and minor axis maps in terms of sigma instead of FWHM. Added option (psf_stype_only) to allow PSF fitting to non- S-type sources (useful if sources are very distorted). 2012/04/12 - Fixed bug in adaptive scaling code that could cause incorrect small-scale rms_box size. Added a parameter (adaptive_thresh) that controls the minimum threshold for sources used to set the small-scale rms_box size. 2012/04/02 - Implemented an adaptive scaling scheme for the rms_box parameter that shrinks the box size near bright sources and expands it far from them (enabled with the adaptive_rms_box option when rms_box=None). This scheme generally results in improved rms and mean maps when both strong artifacts and extended sources are present. Fixed bug that prevented plotting of results during wavelet decomposition when interactive = True. 2012/03/29 - Fixed bug in wavelet module that could cause incorrect associations of Gaussians. Fixed bug in show_fit that displayed incorrect model and residual images when wavelets were used. 2012/03/28 - Version 1.1 2012/03/28 - Fixed bug that caused mask to be ignored when determining whether variations in rms and mean maps is significant. Fixed bug that caused internally derived rms_box value to be ignored. 2012/03/27 - Modified calculation of rms_box parameter (when rms_box option is None) to work better with fields composed mainly of point sources when strong artifacts are present. Tweaked flagging on FWHM to prevent over-flagging of Gaussians in small islands. Changed wavelet module to flag Gaussians whose centers fall outside of islands found in the original image and removed atrous_orig_isl option (as redundant). 2012/03/26 - Modified fitting of large islands to adopt an iterative fitting scheme that limits the number of Gaussians fit simultaneously per iteration to 10. This change speeds up fitting of large islands considerably. The options peak_fit and peak_maxsize control whether iterative fitting is done. Added new Gaussian flagging condition (flag_maxsize_fwhm) that flags Gaussians whose sigma contour times factor extends beyond the island boundary. This flag prevents fitting of Gaussians that extend far beyond the island boundary. 2012/03/23 - Tweaked settings that affect fitting of Gaussians to improve fitting in general. 2012/03/19 - Added output of shapelet parameters to FITS tables. Fixed issue with resizing of sources in spectral index module. 2012/03/16 - Fixed bugs in polarisation module that caused incorrect polarization fractions. 2012/03/13 - Improved plotting speed (by factor of ~ 4) in show_fit when there is a large number of islands. Simplified the spectral index module to make it more user friendly and stable. Added the option to use a "detection" image for island detection (the detection_image option); source properties are still measured from the main input image. 2012/03/01 - Fixed a bug in the polarisation module that could result in incorrect flux densities. Changed logging module to suppress output of ANSI color codes to the log file. 2012/02/27 - Implemented fitting of Gaussians in polarisation module, instead of simple summation of pixel values, to determine polarized flux densities. 2012/02/17 - In scripts, process_image() will now accept a dictionary of parameters as input. 2012/02/10 - Sources that appear only in Stokes Q or U (and hence not in Stokes I) are now identified and included in the polarisation module. This identification is done using the polarized intensity (PI) image. show_fit() and export_image() were updated to allow display and export of the PI image. 2012/02/06 - Fixed bug in island splitting code that could result in duplicate Gaussians. 2012/02/02 - Improved polarisation module. Polarization quantities are now calculated for Gaussians as well as sources. 2012/01/27 - Fixed bug in psf_vary module that affected tesselation. Fixed many small typos in parameter descriptions. 2012/01/18 - Fixed a bug that resulted in incorrect coordinates when the trim_box option was used with a CASA image. Added option (blank_zeros) to blank pixels in the input image that are exactly zero. 2012/01/13 - Fixed minor bugs in the interactive shell and updated pybdsm.py to support IPython 0.12. 2011/12/21 - Fixed bug in gaul2srl module due to rare cases in which an island has a negative rms value. Fixed a memory issue in which memory was not released after using show_fit. 2011/11/28 - Added option to have minpix_isl estimated automatically as 1/3 of the beam area. This estimate should help exclude false islands that are much smaller than the beam. This estimate is not let to fall below 6 pixels. 2011/11/11 - Fixed bugs in source generation that would lead to masking of all pixels for certain sources during moment analysis. Adjusted calculation of jmax in wavelet module to use island sizes (instead of image size) if opts.atrous_orig_isl is True. 2011/11/04 - Implemented new island fitting routine (enabled with the peak_fit option) that can speed up fitting of large islands. Changed plotting of Gaussians in show_fit to use Ellipse artists to improve plotting speed. 2011/11/03 - Altered reading of images to correctly handle 4D cubes. Fixed bug in readimage that affected filenames. 2011/10/26 - Extended psf_vary module to include fitting of stacked PSFs with Gaussians, interpolation of the resulting parameters across the image, and correction of the de- convolved source sizes using the interpolated PSFs. Changed plotting of Gaussians in show_fit() to use the FWHM instead of sigma. Modified error calculation of M sources to be more robust when sources are small. Fixed spelling of "gaussian" in bbs_patches option list. 2011/10/24 - Many small bug fixes to the psf_vary module. Fixed use of input directory so that input files not in the current directory are handled correctly. 2011/10/14 - Added residual rms and mean values to sources and source list catalogs. These values can be compared to background rms and mean values as a quick check of fit quality. 2011/10/13 - Modified deconvolution to allow 1-D Gaussians and sources. Added FREQ0, EQUINOX, INIMAGE keywords to output fits catalogs. Fixed bug in source position angles. Adjusted column names of output catalogs slightly to be more descriptive. 2011/10/12 - Added errors to source properties (using a Monte Carlo method for M sources). Fixed bug in output column names. 2011/10/11 - Tweaked autocomplete to support IPython shell commands (e.g., "!more file.txt"). Fixed bug in gaul2srl that resulted in some very nearby Gaussians being placed into different sources. Added group_tol option so that user can adjust the tolerance of how Gaussians are grouped into sources. 2011/10/05 - Added output of source lists. Changed name of write_gaul method to write_catalog (more general). 2011/10/04 - Added option to force source grouping by island (group_by_isl). Added saving of parameters to a PyBDSM save file to Op_output. 2011/09/21 - Fixed issue with shapelet centering failing: it now falls back to simple moment when this happens. Fixed issue with plotresults when shapelets are fit. 2011/09/14 - Placed output column names and units in TC properties of Gaussians. This allows easy standardization of the column names and units. 2011/09/13 - Fixes to trim_box and resetting of Image objects in interface.process(). Changed thr1 --> thr2 in fit_iter in guasfit.py, as bright sources are often "overfit" when using thr1, leading to large negative residuals. Restricted fitting of Gaussians to wavelet images to be only in islands found in the original image if opts.atrous_orig_isl is True. 2011/09/08 - Version 1.0 2011/09/08 - Versioning system changed to use _version.py. """ pass PyBDSF-1.10.1/bdsf/cleanup.py000066400000000000000000000032301420247104600155360ustar00rootroot00000000000000""" Does miscellaneous jobs at the end, which assumes all other tasks are run. """ from __future__ import absolute_import import numpy as N import os from .image import * from . import mylogger from . import has_pl if has_pl: import matplotlib.pyplot as pl import matplotlib.cm as cm from . import functions as func class Op_cleanup(Op): """ """ def __call__(self, img): mylog = mylogger.logging.getLogger("PyBDSM.Cleanup") ### plotresults for all gaussians together if img.opts.plot_allgaus and has_pl: pl.figure() pl.title('All gaussians including wavelet images') allgaus = img.gaussians if hasattr(img, 'atrous_gaussians'): for gg in img.atrous_gaussians: allgaus += gg for g in allgaus: ellx, elly = func.drawellipse(g) pl.plot(ellx, elly, 'r') from math import log10 bdir = img.basedir + '/misc/' if not os.path.isdir(bdir): os.makedirs(bdir) im_mean = img.clipped_mean im_rms = img.clipped_rms low = 1.1*abs(img.min_value) low1 = 1.1*abs(N.min(im_mean-im_rms*5.0)) if low1 > low: low = low1 vmin = log10(im_mean-im_rms*5.0 + low) vmax = log10(im_mean+im_rms*15.0 + low) im = N.log10(img.ch0_arr + low) pl.imshow(N.transpose(im), origin='lower', interpolation='nearest',vmin=vmin, vmax=vmax, \ cmap=cm.gray); pl.colorbar() pl.savefig(bdir+'allgaussians.png') pl.close() img.completed_Ops.append('cleanup') PyBDSF-1.10.1/bdsf/collapse.py000066400000000000000000000261631420247104600157230ustar00rootroot00000000000000"""Module collapse Defines operation Op_collapse which collapses 3D image. Calculates and stores mean and rms (normal and clipped) per channel anyway for further use, even if weights are unity. """ from __future__ import absolute_import import numpy as N from .image import * from . import _cbdsm #_cbdsm.init_numpy() from . import mylogger from . import functions as func class Op_collapse(Op): """Collapse 3D image""" def __call__(self, img): mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Collapse") if img.opts.polarisation_do: pols = ['I', 'Q', 'U', 'V'] # make sure I is done first else: pols = ['I'] # assume I is always present img.ch0_Q_arr = None img.ch0_U_arr = None img.ch0_V_arr = None if img.shape[1] > 1: c_mode = img.opts.collapse_mode chan0 = img.opts.collapse_ch0 c_list = img.opts.collapse_av c_wts = img.opts.collapse_wt if c_list == []: c_list = N.arange(img.shape[1]) if len(c_list) == 1 and c_mode=='average': c_mode = 'single' chan0 = c_list[0] img.collapse_ch0 = chan0 ch0sh = img.image_arr.shape[2:] if img.opts.polarisation_do: ch0images = ['ch0_arr', 'ch0_Q_arr', 'ch0_U_arr', 'ch0_V_arr'] else: ch0images = ['ch0_arr'] # assume all Stokes images have the same blank pixels as I: blank = N.isnan(img.image_arr[0]) hasblanks = blank.any() if img.opts.kappa_clip is None: kappa = -img.pixel_beamarea() else: kappa = img.opts.kappa_clip mean, rms, cmean, crms = chan_stats(img, kappa) img.channel_mean = mean; img.channel_rms = rms img.channel_clippedmean = cmean; img.channel_clippedrms = crms for ipol, pol in enumerate(pols): if c_mode == 'single': if pol == 'I': ch0 = img.image_arr[0, chan0] img.ch0_arr = ch0 mylogger.userinfo(mylog, 'Source extraction will be ' \ 'done on channel', '%i (%.3f MHz)' % \ (chan0, img.frequency/1e6)) else: ch0[:] = img.image_arr[ipol, chan0][:] img.__setattr__(ch0images[ipol][:], ch0) elif c_mode == 'average': if not hasblanks: if pol == 'I': ch0, wtarr = avspc_direct(c_list, img.image_arr[0], img.channel_clippedrms, c_wts) else: # use wtarr from the I image, which is always collapsed first ch0, wtarr = avspc_direct(c_list, img.image_arr[ipol], img.channel_clippedrms, c_wts, wtarr=wtarr) else: if pol == 'I': ch0, wtarr = avspc_blanks(c_list, img.image_arr[0], img.channel_clippedrms, c_wts) else: # use wtarr from the I image, which is always collapsed first ch0, wtarr = avspc_blanks(c_list, img.image_arr[ipol], img.channel_clippedrms, c_wts, wtarr=wtarr) img.__setattr__(ch0images[ipol][:], ch0) if pol == 'I': img.avspc_wtarr = wtarr init_freq_collapse(img, wtarr) if c_wts == 'unity': mylogger.userinfo(mylog, 'Channels averaged with '\ 'uniform weights') else: mylogger.userinfo(mylog, 'Channels averaged with '\ 'weights=(1/rms)^2') mylogger.userinfo(mylog, 'Source extraction will be '\ 'done on averaged ("ch0") image') mylogger.userinfo(mylog, 'Frequency of averaged '\ 'image', '%.3f MHz' % \ (img.frequency/1e6,)) str1 = " ".join(str(n) for n in c_list) mylog.debug('%s %s' % ('Channels averaged : ', str1)) str1 = " ".join(["%9.4e" % n for n in wtarr]) mylog.debug('%s %s %s' % ('Channel weights : ', str1, '; unity=zero if c_wts="rms"')) elif c_mode=='file': mylogger.userinfo(mylog, 'Reading ch0 image from file %s' % (img.opts.collapse_file)) image,hdr=func.read_image_from_file(img.opts.collapse_file, img, None, quiet=False) if pol == 'I': ch0 = image[0,0] img.ch0_arr = ch0 else: raise NotImplementedError('Polarization cubes not allowed in file mode') else: raise NotImplementedError('Mode supplied not implemented') # should never happen! if img.opts.output_all: func.write_image_to_file(img.use_io, img.imagename+'.ch0_'+pol+'.fits', ch0, img) mylog.debug('%s %s ' % ('Writing file ', img.imagename+'.ch0_'+pol+'.fits')) else: # Only one channel in image image = img.image_arr img.ch0_arr = image[0, 0] mylogger.userinfo(mylog, 'Frequency of image', '%.3f MHz' % (img.frequency/1e6,)) if img.opts.polarisation_do: for pol in pols[1:]: if pol == 'Q': img.ch0_Q_arr = image[1, 0][:] if pol == 'U': img.ch0_U_arr = image[2, 0][:] if pol == 'V': img.ch0_V_arr = image[3, 0][:] # create mask if needed (assume all pols have the same mask as I) image = img.ch0_arr mask = N.isnan(image) img.blankpix = N.sum(mask) frac_blank = round( float(img.blankpix) / float(image.shape[0] * image.shape[1]), 3) mylogger.userinfo(mylog, "Number of blank pixels", str(img.blankpix) + ' (' + str(frac_blank * 100.0) + '%)') if img.opts.blank_limit is not None: import scipy import sys threshold = img.opts.blank_limit mylogger.userinfo(mylog, "Blanking pixels with values " "below %.1e Jy/beam" % (threshold,)) bad = (abs(image) < threshold) original_stdout = sys.stdout # keep a reference to STDOUT sys.stdout = func.NullDevice() # redirect the real STDOUT count = scipy.signal.convolve2d(bad, N.ones((3, 3)), mode='same') sys.stdout = original_stdout # turn STDOUT back on mask_low = (count >= 5) image[N.where(mask_low)] = N.nan mask = N.isnan(image) img.blankpix = N.sum(mask) frac_blank = round( float(img.blankpix) / float(image.shape[0] * image.shape[1]), 3) mylogger.userinfo(mylog, "Total number of blanked pixels", str(img.blankpix) + ' (' + str(frac_blank * 100.0) + '%)') masked = mask.any() img.masked = masked if masked: img.mask_arr = mask else: img.mask_arr = None if img.blankpix == image.shape[0] * image.shape[1]: # ALL pixels are blanked! raise RuntimeError('All pixels in the image are blanked.') img.completed_Ops.append('collapse') ######################################################################################## def chan_stats(img, kappa): bstat = func.bstat #_cbdsm.bstat nchan = img.shape[1] mean = []; rms = []; cmean = []; crms = [] for ichan in range(nchan): if isinstance(img, Image): # check if img is an Image or just an ndarray im = img.image_arr[0, ichan] else: im = img[0, ichan] if N.any(im): immask = N.isnan(im) if immask.all(): m, r, cm, cr = 0, 0, 0, 0 else: if immask.any(): m, r, cm, cr, cnt = bstat(im, immask, kappa) else: m, r, cm, cr, cnt = bstat(im, None, kappa) else: m, r, cm, cr = 0, 0, 0, 0 mean.append(m); rms.append(r); cmean.append(cm); crms.append(cr) return N.array(mean), N.array(rms), N.array(cmean), N.array(crms) ######################################################################################## def avspc_direct(c_list, image, rmsarr, c_wts, wtarr=None): shape2 = image.shape[1:] ch0 = N.zeros(shape2, dtype=N.float32) sumwts = 0.0 if wtarr is None: wtarr = N.zeros(len(c_list)) for i, ch in enumerate(c_list): im = image[ch] r = rmsarr[ch] if c_wts == 'unity': wt = 1.0 if c_wts == 'rms': wt = r if r != 0: wt = 1.0/(wt*wt) else: wt = 0 sumwts += wt ch0 += im*wt wtarr[i] = wt else: for i, ch in enumerate(c_list): im = image[ch] sumwts += wtarr[i] ch0 += im*wtarr[i] ch0 = ch0/sumwts return ch0, wtarr ######################################################################################## def avspc_blanks(c_list, image, rmsarr, c_wts, wtarr=None): shape2 = image.shape[1:] ch0 = N.zeros(shape2, dtype=N.float32) sumwtim = N.zeros(shape2, dtype=N.float32) if wtarr is None: wtarr = N.zeros(len(c_list)) for i, ch in enumerate(c_list): im = image[ch] r = rmsarr[ch] if c_wts == 'unity': wt = 1.0 if c_wts == 'rms': wt = r if r != 0: wt = 1.0/(wt*wt) else: wt = 0 wtim = N.ones(shape2, dtype=N.float32)*wt*(~N.isnan(im)) sumwtim += wtim ch0 += N.nan_to_num(im)*wtim wtarr[i] = wt else: for i, ch in enumerate(c_list): im = image[ch] wtim = N.ones(shape2)*wtarr[i]*(~N.isnan(im)) sumwtim += wtim ch0 += N.nan_to_num(im)*wtim ch0 = ch0/sumwtim return ch0, wtarr ######################################################################################## def init_freq_collapse(img, wtarr): # Place appropriate, post-collapse frequency info in img # Calculate weighted average frequency if img.opts.frequency_sp is not None: c_list = img.opts.collapse_av if c_list == []: c_list = N.arange(img.image_arr.shape[1]) freqs = img.opts.frequency_sp if len(freqs) != len(c_list): raise RuntimeError("Number of channels and number of frequencies specified "\ "by user do not match") sumwts = 0.0 sumfrq = 0.0 for i, ch in enumerate(c_list): sumwts += wtarr[i] sumfrq += freqs[ch]*wtarr[i] img.frequency = sumfrq / sumwts img.freq_pars = (img.frequency, 0.0, 0.0) else: # Calculate from header info c_list = img.opts.collapse_av if c_list == []: c_list = N.arange(img.image_arr.shape[1]) sumwts = 0.0 sumfrq = 0.0 spec_indx = img.wcs_obj.wcs.spec if spec_indx == -1 and img.opts.frequency_sp is None: raise RuntimeError("Frequency information not found in header and frequencies "\ "not specified by user") else: for i, ch in enumerate(c_list): sumwts += wtarr[i] freq = img.wcs_obj.p2f(ch) sumfrq += freq*wtarr[i] img.frequency = sumfrq / sumwts PyBDSF-1.10.1/bdsf/const.py000066400000000000000000000002231420247104600152340ustar00rootroot00000000000000"""Constants Some universal constants """ import math pi=math.pi fwsig=2.35482 rad=180.0/pi c=2.99792458e8 bolt=1.3806505e-23 sq2=math.sqrt(2) PyBDSF-1.10.1/bdsf/functions.py000066400000000000000000002254531420247104600161340ustar00rootroot00000000000000# some functions from __future__ import print_function from __future__ import absolute_import try: # For Python 2 basestring = basestring except NameError: basestring = str def poly(c,x): """ y = Sum { c(i)*x^i }, i=0,len(c)""" import numpy as N y=N.zeros(len(x)) for i in range(len(c)): y += c[i]*(x**i) return y def sp_in(c, x): """ Spectral index in freq-flux space """ import numpy as N order = len(c)-1 if order == 1: y = c[0]*N.power(x, c[1]) else: if order == 2: y = c[0]*N.power(x, c[1])*N.power(x, c[2]*N.log(x)) else: print('Not yet implemented') return y def wenss_fit(c,x): """ sqrt(c0*c0 + c1^2/x^2)""" import numpy as N y = N.sqrt(c[0]*c[0]+c[1]*c[1]/(x*x)) return y def nanmean(x): """ Mean of array with NaN """ import numpy as N sum = N.nansum(x) n = N.sum(~N.isnan(x)) if n > 0: mean = sum/n else: mean = float("NaN") return mean def shapeletfit(cf, Bset, cfshape): """ The function """ import numpy as N ordermax = Bset.shape[0] y = (Bset[0,0,::]).flatten() y = N.zeros(y.shape) index = [(i,j) for i in range(ordermax) for j in range(ordermax-i)] # i=0->nmax, j=0-nmax-i for coord in index: linbasis = (Bset[coord[0], coord[1], ::]).flatten() y += cf.reshape(cfshape)[coord]*linbasis return y def func_poly2d(ord,p,x,y): """ 2d polynomial. ord=0 : z=p[0] ord=1 : z=p[0]+p[1]*x+p[2]*y ord=2 : z=p[0]+p[1]*x+p[2]*y+p[3]*x*x+p[4]*y*y+p[5]*x*y ord=3 : z=p[0]+p[1]*x+p[2]*y+p[3]*x*x+p[4]*y*y+p[5]*x*y+ p[6]*x*x*x+p[7]*x*x*y+p[8]*x*y*y+p[9]*y*y*y""" if ord == 0: z=p[0] if ord == 1: z=p[0]+p[1]*x+p[2]*y if ord == 2: z=p[0]+p[1]*x+p[2]*y+p[3]*x*x+p[4]*y*y+p[5]*x*y if ord == 3: z=p[0]+p[1]*x+p[2]*y+p[3]*x*x+p[4]*y*y+p[5]*x*y+\ p[6]*x*x*x+p[7]*x*x*y+p[8]*x*y*y+p[9]*y*y*y if ord > 3: print(" We do not trust polynomial fits > 3 ") z = None return z def func_poly2d_ini(ord, av): """ Initial guess -- assume flat plane. """ if ord == 0: p0 = N.asarray([av]) if ord == 1: p0 = N.asarray([av] + [0.0]*2) if ord == 2: p0 = N.asarray([av] + [0.0]*5) if ord == 3: p0 = N.asarray([av] + [0.0]*9) if ord > 3: p0 = None return p0 def ilist(x): """ integer part of a list of floats. """ fn = lambda x : [int(round(i)) for i in x] return fn(x) def cart2polar(cart, cen): """ convert cartesian coordinates to polar coordinates around cen. theta is zero for +ve xaxis and goes counter clockwise. cart is a numpy array [x,y] where x and y are numpy arrays of all the (>0) values of coordinates.""" import math polar = N.zeros(cart.shape) pi = math.pi rad = 180.0/pi cc = N.transpose(cart) cc = (cc-cen)*(cc-cen) polar[0] = N.sqrt(N.sum(cc,1)) th = N.arctan2(cart[1]-cen[1],cart[0]-cen[0])*rad polar[1] = N.where(th > 0, th, 360+th) return polar def polar2cart(polar, cen): """ convert polar coordinates around cen to cartesian coordinates. theta is zero for +ve xaxis and goes counter clockwise. polar is a numpy array of [r], [heta] and cart is a numpy array [x,y] where x and y are numpy arrays of all the (>0) values of coordinates.""" import math cart = N.zeros(polar.shape) pi = math.pi rad = 180.0/pi cart[0]=polar[0]*N.cos(polar[1]/rad)+cen[0] cart[1]=polar[0]*N.sin(polar[1]/rad)+cen[1] return cart def gaus_pixval(g, pix): """ Calculates the value at a pixel pix due to a gaussian object g. """ from .const import fwsig, pi from math import sin, cos, exp cen = g.centre_pix peak = g.peak_flux bmaj_p, bmin_p, bpa_p = g.size_pix a4 = bmaj_p/fwsig; a5 = bmin_p/fwsig a6 = (bpa_p+90.0)*pi/180.0 spa = sin(a6); cpa = cos(a6) dr1 = ((pix[0]-cen[0])*cpa + (pix[1]-cen[1])*spa)/a4 dr2 = ((pix[1]-cen[1])*cpa - (pix[0]-cen[0])*spa)/a5 pixval = peak*exp(-0.5*(dr1*dr1+dr2*dr2)) return pixval def atanproper(dumr, dx, dy): from math import pi ysign = (dy >= 0.0) xsign = (dx >= 0.0) if ysign and (not xsign): dumr = pi - dumr if (not ysign) and (not xsign): dumr = pi + dumr if (not ysign) and xsign: dumr = 2.0*pi - dumr return dumr def gdist_pa(pix1, pix2, gsize): """ Computes FWHM in degrees in the direction towards second source, of an elliptical gaussian. """ from math import atan, pi, sqrt, cos, sin, tan dx = pix2[0] - pix1[0] dy = pix2[1] - pix1[1] if dx == 0.0: val = pi/2.0 else: dumr = atan(abs(dy/dx)) val = atanproper(dumr, dx, dy) psi = val - (gsize[2]+90.0)/180.0*pi # convert angle to eccentric anomaly if approx_equal(gsize[1], 0.0): psi = pi/2.0 else: psi=atan(gsize[0]/gsize[1]*tan(psi)) dumr2 = gsize[0]*cos(psi) dumr3 = gsize[1]*sin(psi) fwhm = sqrt(dumr2*dumr2+dumr3*dumr3) return fwhm def gaus_2d(c, x, y): """ x and y are 2d arrays with the x and y positions. """ import math import numpy as N rad = 180.0/math.pi cs = math.cos(c[5]/rad) sn = math.sin(c[5]/rad) f1 = ((x-c[1])*cs+(y-c[2])*sn)/c[3] f2 = ((y-c[2])*cs-(x-c[1])*sn)/c[4] val = c[0]*N.exp(-0.5*(f1*f1+f2*f2)) return val def gaus_2d_itscomplicated(c, x, y, p_tofix, ind): """ x and y are 2d arrays with the x and y positions. c is a list (of lists) of gaussian parameters to fit, p_tofix are gaussian parameters to fix. ind is a list with 0, 1; 1 = fit; 0 = fix. """ import math import numpy as N val = N.zeros(x.shape) indx = N.array(ind) if len(indx) % 6 != 0: print(" Something wrong with the parameters passed - need multiples of 6 !") else: ngaus = int(len(indx)/6) params = N.zeros(6*ngaus) params[N.where(indx==1)[0]] = c params[N.where(indx==0)[0]] = p_tofix for i in range(ngaus): gau = params[i*6:i*6+6] val = val + gaus_2d(gau, x, y) return val def g2param(g, adj=False): """Convert gaussian object g to param list [amp, cenx, ceny, sigx, sigy, theta] """ from .const import fwsig from math import pi A = g.peak_flux if adj and hasattr(g, 'size_pix_adj'): sigx, sigy, th = g.size_pix_adj else: sigx, sigy, th = g.size_pix cenx, ceny = g.centre_pix sigx = sigx/fwsig; sigy = sigy/fwsig; th = th+90.0 params = [A, cenx, ceny, sigx, sigy, th] return params def g2param_err(g, adj=False): """Convert errors on gaussian object g to param list [Eamp, Ecenx, Eceny, Esigx, Esigy, Etheta] """ from .const import fwsig from math import pi A = g.peak_fluxE if adj and hasattr(g, 'size_pix_adj'): sigx, sigy, th = g.size_pix_adj else: sigx, sigy, th = g.size_pixE cenx, ceny = g.centre_pixE sigx = sigx/fwsig; sigy = sigy/fwsig params = [A, cenx, ceny, sigx, sigy, th] return params def corrected_size(size): """ convert major and minor axis from sigma to fwhm and angle from horizontal to P.A. """ from .const import fwsig csize = [0,0,0] csize[0] = size[0]*fwsig csize[1] = size[1]*fwsig bpa = size[2] pa = bpa-90.0 pa = pa % 360 if pa < 0.0: pa = pa + 360.0 if pa > 180.0: pa = pa - 180.0 csize[2] = pa return csize def drawellipse(g): import numpy as N from .gausfit import Gaussian rad = 180.0/N.pi if isinstance(g, Gaussian): param = g2param(g) else: if isinstance(g, list) and len(g)>=6: param = g else: raise RuntimeError("Input to drawellipse neither Gaussian nor list") size = [param[3], param[4], param[5]] size_fwhm = corrected_size(size) th=N.arange(0, 370, 10) x1=size_fwhm[0]*N.cos(th/rad) y1=size_fwhm[1]*N.sin(th/rad) x2=x1*N.cos(param[5]/rad)-y1*N.sin(param[5]/rad)+param[1] y2=x1*N.sin(param[5]/rad)+y1*N.cos(param[5]/rad)+param[2] return x2, y2 def drawsrc(src): import math import numpy as N import matplotlib.path as mpath Path = mpath.Path paths = [] xmin = [] xmax = [] ymin = [] ymax = [] ellx = [] elly = [] for indx, g in enumerate(src.gaussians): gellx, gelly = drawellipse(g) ellx += gellx.tolist() elly += gelly.tolist() yarr = N.array(elly) minyarr = N.min(yarr) maxyarr = N.max(yarr) xarr = N.array(ellx) for i in range(10): inblock = N.where(yarr > minyarr + float(i)*(maxyarr-minyarr)/10.0) yarr = yarr[inblock] xarr = xarr[inblock] inblock = N.where(yarr < minyarr + float(i+1)*(maxyarr-minyarr)/10.0) xmin.append(N.min(xarr[inblock])-1.0) xmax.append(N.max(xarr[inblock])+1.0) ymin.append(N.mean(yarr[inblock])) ymax.append(N.mean(yarr[inblock])) xmax.reverse() ymax.reverse() pathdata = [(Path.MOVETO, (xmin[0], ymin[0]))] for i in range(10): pathdata.append((Path.LINETO, (xmin[i], ymin[i]))) pathdata.append((Path.CURVE3, (xmin[i], ymin[i]))) pathdata.append((Path.LINETO, ((xmin[9]+xmax[0])/2.0, (ymin[9]+ymax[0])/2.0+1.0))) for i in range(10): pathdata.append((Path.LINETO, (xmax[i], ymax[i]))) pathdata.append((Path.CURVE3, (xmax[i], ymax[i]))) pathdata.append((Path.LINETO, ((xmin[0]+xmax[9])/2.0, (ymin[0]+ymax[9])/2.0-1.0))) pathdata.append((Path.CLOSEPOLY, (xmin[0], ymin[0]))) codes, verts = zip(*pathdata) path = Path(verts, codes) return path def mask_fwhm(g, fac1, fac2, delc, shap): """ take gaussian object g and make a mask (as True) for pixels which are outside (less flux) fac1*FWHM and inside (more flux) fac2*FWHM. Also returns the values as well.""" import math import numpy as N from .const import fwsig x, y = N.indices(shap) params = g2param(g) params[1] -= delc[0]; params[2] -= delc[1] gau = gaus_2d(params, x, y) dumr1 = 0.5*fac1*fwsig dumr2 = 0.5*fac2*fwsig flux1= params[0]*math.exp(-0.5*dumr1*dumr1) flux2 = params[0]*math.exp(-0.5*dumr2*dumr2) mask = (gau <= flux1) * (gau > flux2) gau = gau * mask return mask, gau def flatten(x): """flatten(sequence) -> list Taken from http://kogs-www.informatik.uni-hamburg.de/~meine/python_tricks Returns a single, flat list which contains all elements retrieved from the sequence and all recursively contained sub-sequences (iterables). Examples: >>> [1, 2, [3,4], (5,6)] [1, 2, [3, 4], (5, 6)] >>> flatten([[[1,2,3], (42,None)], [4,5], [6], 7, MyVector(8,9,10)]) [1, 2, 3, 42, None, 4, 5, 6, 7, 8, 9, 10]""" result = [] for el in x: #if isinstance(el, (list, tuple)): if hasattr(el, "__iter__") and not isinstance(el, basestring): result.extend(flatten(el)) else: result.append(el) return result def moment(x,mask=None): """ Calculates first 3 moments of numpy array x. Only those values of x for which mask is False are used, if mask is given. Works for any dimension of x. """ import numpy as N if mask is None: mask=N.zeros(x.shape, dtype=bool) m1=N.zeros(1) m2=N.zeros(x.ndim) m3=N.zeros(x.ndim) for i, val in N.ndenumerate(x): if not mask[i]: m1 += val m2 += val*N.array(i) m3 += val*N.array(i)*N.array(i) m2 /= m1 if N.all(m3/m1 > m2*m2): m3 = N.sqrt(m3/m1-m2*m2) return m1, m2, m3 def fit_mask_1d(x, y, sig, mask, funct, do_err, order=0, p0 = None): """ Calls scipy.optimise.leastsq for a 1d function with a mask. Takes values only where mask=False. """ from scipy.optimize import leastsq from math import sqrt, pow import numpy as N import sys ind=N.where(~N.array(mask))[0] if len(ind) > 1: n=sum(mask) if isinstance(x, list): x = N.array(x) if isinstance(y, list): y = N.array(y) if isinstance(sig, list): sig = N.array(sig) xfit=x[ind]; yfit=y[ind]; sigfit=sig[ind] if p0 is None: if funct == poly: p0=N.array([0]*(order+1)) p0[1]=(yfit[0]-yfit[-1])/(xfit[0]-xfit[-1]) p0[0]=yfit[0]-p0[1]*xfit[0] if funct == wenss_fit: p0=N.array([yfit[N.argmax(xfit)]] + [1.]) if funct == sp_in: ind1 = N.where(yfit > 0.)[0] if len(ind1) >= 2: low = ind1[0]; hi = ind1[-1] sp = N.log(yfit[low]/yfit[hi])/N.log(xfit[low]/xfit[hi]) p0=N.array([yfit[low]/pow(xfit[low], sp), sp] + [0.]*(order-1)) elif len(ind1) == 1: p0=N.array([ind1[0], -0.8] + [0.]*(order-1)) else: return [0, 0], [0, 0] res=lambda p, xfit, yfit, sigfit: (yfit-funct(p, xfit))/sigfit try: (p, cov, info, mesg, flag)=leastsq(res, p0, args=(xfit, yfit, sigfit), full_output=True, warning=False) except TypeError: # This error means no warning argument is available, so redirect stdout to a null device # to suppress printing of (unnecessary) warning messages original_stdout = sys.stdout # keep a reference to STDOUT sys.stdout = NullDevice() # redirect the real STDOUT (p, cov, info, mesg, flag)=leastsq(res, p0, args=(xfit, yfit, sigfit), full_output=True) sys.stdout = original_stdout # turn STDOUT back on if do_err: if cov is not None: if N.sum(sig != 1.) > 0: err = N.array([sqrt(abs(cov[i,i])) for i in range(len(p))]) else: chisq=sum(info["fvec"]*info["fvec"]) dof=len(info["fvec"])-len(p) err = N.array([sqrt(abs(cov[i,i])*chisq/dof) for i in range(len(p))]) else: p, err = [0, 0], [0, 0] else: err = [0] else: p, err = [0, 0], [0, 0] return p, err def dist_2pt(p1, p2): """ Calculated distance between two points given as tuples p1 and p2. """ from math import sqrt dx=p1[0]-p2[0] dy=p1[1]-p2[1] dist=sqrt(dx*dx + dy*dy) return dist def angsep(ra1, dec1, ra2, dec2): """Returns angular separation between two coordinates (all in degrees)""" import math const = math.pi/180. ra1 = ra1*const rb1 = dec1*const ra2 = ra2*const rb2 = dec2*const v1_1 = math.cos(ra1)*math.cos(rb1) v1_2 = math.sin(ra1)*math.cos(rb1) v1_3 = math.sin(rb1) v2_1 = math.cos(ra2)*math.cos(rb2) v2_2 = math.sin(ra2)*math.cos(rb2) v2_3 = math.sin(rb2) w = ( (v1_1-v2_1)**2 + (v1_2-v2_2)**2 + (v1_3-v2_3)**2 )/4.0 x = math.sqrt(w) y = math.sqrt(max(0.0, 1.0-w)) angle = 2.0*math.atan2(x, y)/const return angle def std(y): """ Returns unbiased standard deviation. """ from math import sqrt import numpy as N l=len(y) s=N.std(y) if l == 1: return s else: return s*sqrt(float(l)/(l-1)) def imageshift(image, shift): """ Shifts a 2d-image by the tuple (shift). Positive shift is to the right and upwards. This is done by fourier shifting. """ import scipy.fft from scipy import ndimage shape=image.shape f1=scipy.fft.fft(image, shape[0], axis=0) f2=scipy.fft.fft(f1, shape[1], axis=1) s=ndimage.fourier_shift(f2,shift, axis=0) y1=scipy.fft.ifft(s, shape[1], axis=1) y2=scipy.fft.ifft(y1, shape[0], axis=0) return y2.real def trans_gaul(q): " transposes a tuple " y=[] if len(q) > 0: for i in range(len(q[0])): elem=[] for j in range(len(q)): elem.append(q[j][i]) y.append(elem) return y def momanalmask_gaus(subim, mask, isrc, bmar_p, allpara=True): """ Compute 2d gaussian parameters from moment analysis, for an island with multiple gaussians. Compute only for gaussian with index (mask value) isrc. Returns normalised peak, centroid, fwhm and P.A. assuming North is top. """ from math import sqrt, atan, pi from .const import fwsig import numpy as N N.seterr(all='ignore') m1 = N.zeros(2); m2 = N.zeros(2); m11 = 0.0; tot = 0.0 mompara = N.zeros(6) n, m = subim.shape[0], subim.shape[1] index = [(i, j) for i in range(n) for j in range(m) if mask[i,j]==isrc] for coord in index: tot += subim[coord] m1 += N.array(coord)*subim[coord] mompara[0] = tot/bmar_p mompara[1:3] = m1/tot if allpara: for coord in index: co = N.array(coord) m2 += (co - mompara[1:3])*(co - mompara[1:3])*subim[coord] m11 += N.product(co - mompara[1:3])*subim[coord] mompara[3] = sqrt((m2[0]+m2[1]+sqrt((m2[0]-m2[1])*(m2[0]-m2[1])+4.0*m11*m11))/(2.0*tot))*fwsig mompara[4] = sqrt((m2[0]+m2[1]-sqrt((m2[0]-m2[1])*(m2[0]-m2[1])+4.0*m11*m11))/(2.0*tot))*fwsig dumr = atan(abs(2.0*m11/(m2[0]-m2[1]))) dumr = atanproper(dumr, m2[0]-m2[1], 2.0*m11) mompara[5] = 0.5*dumr*180.0/pi - 90.0 if mompara[5] < 0.0: mompara[5] += 180.0 return mompara def fit_gaus2d(data, p_ini, x, y, mask = None, err = None): """ Fit 2d gaussian to data with x and y also being 2d numpy arrays with x and y positions. Takes an optional error array and a mask array (True => pixel is masked). """ from scipy.optimize import leastsq import numpy as N import sys if mask is not None and mask.shape != data.shape: print('Data and mask array dont have the same shape, ignoring mask') mask = None if err is not None and err.shape != data.shape: print('Data and error array dont have the same shape, ignoring error') err = None if mask is None: mask = N.zeros(data.shape, bool) g_ind = N.where(~N.ravel(mask))[0] if err is None: errorfunction = lambda p: N.ravel(gaus_2d(p, x, y) - data)[g_ind] else: errorfunction = lambda p: N.ravel((gaus_2d(p, x, y) - data)/err)[g_ind] try: p, success = leastsq(errorfunction, p_ini, warning=False) except TypeError: # This error means no warning argument is available, so redirect stdout to a null device # to suppress printing of warning messages original_stdout = sys.stdout # keep a reference to STDOUT sys.stdout = NullDevice() # redirect the real STDOUT p, success = leastsq(errorfunction, p_ini) sys.stdout = original_stdout # turn STDOUT back on return p, success def deconv(gaus_bm, gaus_c): """ Deconvolves gaus_bm from gaus_c to give gaus_dc. Stolen shamelessly from aips DECONV.FOR. All PA is in degrees.""" from math import pi, cos, sin, atan, sqrt rad = 180.0/pi gaus_d = [0.0, 0.0, 0.0] phi_c = gaus_c[2]+900.0 % 180 phi_bm = gaus_bm[2]+900.0 % 180 maj2_bm = gaus_bm[0]*gaus_bm[0]; min2_bm = gaus_bm[1]*gaus_bm[1] maj2_c = gaus_c[0]*gaus_c[0]; min2_c = gaus_c[1]*gaus_c[1] theta=2.0*(phi_c-phi_bm)/rad cost = cos(theta) sint = sin(theta) rhoc = (maj2_c-min2_c)*cost-(maj2_bm-min2_bm) if rhoc == 0.0: sigic = 0.0 rhoa = 0.0 else: sigic = atan((maj2_c-min2_c)*sint/rhoc) # in radians rhoa = ((maj2_bm-min2_bm)-(maj2_c-min2_c)*cost)/(2.0*cos(sigic)) gaus_d[2] = sigic*rad/2.0+phi_bm dumr = ((maj2_c+min2_c)-(maj2_bm+min2_bm))/2.0 gaus_d[0] = dumr-rhoa gaus_d[1] = dumr+rhoa error = 0 if gaus_d[0] < 0.0: error += 1 if gaus_d[1] < 0.0: error += 1 gaus_d[0] = max(0.0,gaus_d[0]) gaus_d[1] = max(0.0,gaus_d[1]) gaus_d[0] = sqrt(abs(gaus_d[0])) gaus_d[1] = sqrt(abs(gaus_d[1])) if gaus_d[0] < gaus_d[1]: sint = gaus_d[0] gaus_d[0] = gaus_d[1] gaus_d[1] = sint gaus_d[2] = gaus_d[2]+90.0 gaus_d[2] = gaus_d[2]+900.0 % 180 if gaus_d[0] == 0.0: gaus_d[2] = 0.0 else: if gaus_d[1] == 0.0: if (abs(gaus_d[2]-phi_c) > 45.0) and (abs(gaus_d[2]-phi_c) < 135.0): gaus_d[2] = gaus_d[2]+450.0 % 180 # errors #if rhoc == 0.0: #if gaus_d[0] != 0.0: # ed_1 = gaus_c[0]/gaus_d[0]*e_1 #else: # ed_1 = sqrt(2.0*e_1*gaus_c[0]) #if gaus_d[1] != 0.0: # ed_2 = gaus_c[1]/gaus_d[1]*e_2 #else: # ed_2 = sqrt(2.0*e_2*gaus_c[1]) #ed_3 =e_3 #else: # pass return gaus_d def deconv2(gaus_bm, gaus_c): """ Deconvolves gaus_bm from gaus_c to give gaus_dc. Stolen shamelessly from Miriad gaupar.for. All PA is in degrees. Returns deconvolved gaussian parameters and flag: 0 All OK. 1 Result is pretty close to a point source. 2 Illegal result. """ from math import pi, cos, sin, atan2, sqrt rad = 180.0/pi phi_c = gaus_c[2]+900.0 % 180.0 phi_bm = gaus_bm[2]+900.0 % 180.0 theta1 = phi_c / rad theta2 = phi_bm / rad bmaj1 = gaus_c[0] bmaj2 = gaus_bm[0] bmin1 = gaus_c[1] bmin2 = gaus_bm[1] alpha = ( (bmaj1*cos(theta1))**2 + (bmin1*sin(theta1))**2 - (bmaj2*cos(theta2))**2 - (bmin2*sin(theta2))**2 ) beta = ( (bmaj1*sin(theta1))**2 + (bmin1*cos(theta1))**2 - (bmaj2*sin(theta2))**2 - (bmin2*cos(theta2))**2 ) gamma = 2.0 * ( (bmin1**2-bmaj1**2)*sin(theta1)*cos(theta1) - (bmin2**2-bmaj2**2)*sin(theta2)*cos(theta2) ) s = alpha + beta t = sqrt((alpha-beta)**2 + gamma**2) limit = min(bmaj1, bmin1, bmaj2, bmin2) limit = 0.1*limit*limit if alpha < 0.0 or beta < 0.0 or s < t: if alpha < 0.0 or beta < 0.0: bmaj = 0.0 bpa = 0.0 else: bmaj = sqrt(0.5*(s+t)) bpa = rad * 0.5 * atan2(-gamma, alpha-beta) bmin = 0.0 if 0.5*(s-t) < limit and alpha > -limit and beta > -limit: ifail = 1 else: ifail = 2 else: bmaj = sqrt(0.5*(s+t)) bmin = sqrt(0.5*(s-t)) if abs(gamma) + abs(alpha-beta) == 0.0: bpa = 0.0 else: bpa = rad * 0.5 * atan2(-gamma, alpha-beta) ifail = 0 return (bmaj, bmin, bpa), ifail def get_errors(img, p, stdav, bm_pix=None): """ Returns errors from Condon 1997 Returned list includes errors on: peak flux [Jy/beam] x_0 [pix] y_0 [pix] e_maj [pix] e_min [pix] e_pa [deg] e_tot [Jy] """ from .const import fwsig from math import sqrt, log, pow, pi from . import mylogger import numpy as N mylog = mylogger.logging.getLogger("PyBDSM.Compute") if len(p) % 7 > 0: mylog.error("Gaussian parameters passed have to have 7n numbers") ngaus = int(len(p)/7) errors = [] for i in range(ngaus): pp = p[i*7:i*7+7] ### Now do error analysis as in Condon (and fBDSM) size = pp[3:6] size = corrected_size(size) # angle is now degrees CCW from +y-axis if size[0] == 0.0 or size[1] == 0.0: errors = errors + [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] else: sq2 = sqrt(2.0) if bm_pix is None: bm_pix = N.array([img.pixel_beam()[0]*fwsig, img.pixel_beam()[1]*fwsig, img.pixel_beam()[2]]) dumr = sqrt(abs(size[0] * size[1] / (4.0 * bm_pix[0] * bm_pix[1]))) dumrr1 = 1.0 + bm_pix[0] * bm_pix[1] / (size[0] * size[0]) dumrr2 = 1.0 + bm_pix[0] * bm_pix[1] / (size[1] * size[1]) dumrr3 = dumr * pp[0] / stdav d1 = sqrt(8.0 * log(2.0)) d2 = (size[0] * size[0] - size[1] * size[1]) / (size[0] * size[0]) try: e_peak = pp[0] * sq2 / (dumrr3 * pow(dumrr1, 0.75) * pow(dumrr2, 0.75)) e_maj = size[0] * sq2 / (dumrr3 * pow(dumrr1, 1.25) * pow(dumrr2, 0.25)) e_min = size[1] * sq2 / (dumrr3 * pow(dumrr1, 0.25) * pow(dumrr2, 1.25)) # in fw pa_rad = size[2] * pi / 180.0 e_x0 = sqrt( (e_maj * N.sin(pa_rad))**2 + (e_min * N.cos(pa_rad))**2 ) / d1 e_y0 = sqrt( (e_maj * N.cos(pa_rad))**2 + (e_min * N.sin(pa_rad))**2 ) / d1 e_pa = 2.0 / (d2 * dumrr3 * pow(dumrr1, 0.25) * pow(dumrr2, 1.25)) e_pa = e_pa * 180.0/pi e_tot = pp[6] * sqrt(e_peak * e_peak / (pp[0] * pp[0]) + (0.25 / dumr / dumr) * (e_maj * e_maj / (size[0] * size[0]) + e_min * e_min / (size[1] * size[1]))) except: e_peak = 0.0 e_x0 = 0.0 e_y0 = 0.0 e_maj = 0.0 e_min = 0.0 e_pa = 0.0 e_tot = 0.0 if abs(e_pa) > 180.0: e_pa=180.0 # dont know why i did this errors = errors + [e_peak, e_x0, e_y0, e_maj, e_min, e_pa, e_tot] return errors def fit_chisq(x, p, ep, mask, funct, order): import numpy as N ind = N.where(N.array(mask)==False)[0] if order == 0: fit = [funct(p)]*len(p) else: fitpara, efit = fit_mask_1d(x, p, ep, mask, funct, True, order) fit = funct(fitpara, x) dev = (p-fit)*(p-fit)/(ep*ep) num = order+1 csq = N.sum(dev[ind])/(len(fit)-num-1) return csq def calc_chisq(x, y, ey, p, mask, funct, order): import numpy as N if order == 0: fit = [funct(y)]*len(y) else: fit = funct(p, x) dev = (y-fit)*(y-fit)/(ey*ey) ind = N.where(~N.array(mask)) num = order+1 csq = N.sum(dev[ind])/(len(mask)-num-1) return csq def get_windowsize_av(S_i, rms_i, chanmask, K, minchan): import numpy as N av_window = N.arange(2, int(len(S_i)/minchan)+1) win_size = 0 for window in av_window: fluxes, vars, mask = variance_of_wted_windowedmean(S_i, rms_i, chanmask, window) minsnr = N.min(fluxes[~mask]/vars[~mask]) if minsnr > K*1.1: ### K*1.1 since fitted peak can be less than wted peak win_size = window # is the size of averaging window break return win_size def variance_of_wted_windowedmean(S_i, rms_i, chanmask, window_size): from math import sqrt import numpy as N nchan = len(S_i) nwin = nchan/window_size wt = 1/rms_i/rms_i wt = wt/N.median(wt) fluxes = N.zeros(nwin); vars = N.zeros(nwin); mask = N.zeros(nwin, bool) for i in range(nwin): strt = i*window_size; stp = (i+1)*window_size if i == nwin-1: stp = nchan ind = N.arange(strt,stp) m = chanmask[ind] index = [arg for ii,arg in enumerate(ind) if not m[ii]] if len(index) > 0: s = S_i[index]; r = rms_i[index]; w = wt[index] fluxes[i] = N.sum(s*w)/N.sum(w) vars[i] = 1.0/sqrt(N.sum(1.0/r/r)) mask[i] = N.product(m) else: fluxes[i] = 0 vars[i] = 0 mask[i] = True return fluxes, vars, mask def fit_mulgaus2d(image, gaus, x, y, mask = None, fitfix = None, err = None, adj=False): """ fitcode : 0=fit all; 1=fit amp; 2=fit amp, posn; 3=fit amp, size """ from scipy.optimize import leastsq import numpy as N import sys if mask is not None and mask.shape != image.shape: print('Data and mask array dont have the same shape, ignoring mask') mask = None if err is not None and err.shape != image.shape: print('Data and error array dont have the same shape, ignoring error') err = None if mask is None: mask = N.zeros(image.shape, bool) g_ind = N.where(~N.ravel(mask))[0] ngaus = len(gaus) if ngaus > 0: p_ini = [] for g in gaus: p_ini = p_ini + g2param(g, adj) p_ini = N.array(p_ini) if fitfix is None: fitfix = [0]*ngaus ind = N.ones(6*ngaus) # 1 => fit ; 0 => fix for i in range(ngaus): if fitfix[i] == 1: ind[i*6+1:i*6+6] = 0 if fitfix[i] == 2: ind[i*6+3:i*6+6] = 0 if fitfix[i] == 3: ind[i*6+1:i*6+3] = 0 ind = N.array(ind) p_tofit = p_ini[N.where(ind==1)[0]] p_tofix = p_ini[N.where(ind==0)[0]] if err is None: err = N.ones(image.shape) errorfunction = lambda p, x, y, p_tofix, ind, image, err, g_ind: \ N.ravel((gaus_2d_itscomplicated(p, x, y, p_tofix, ind)-image)/err)[g_ind] try: p, success = leastsq(errorfunction, p_tofit, args=(x, y, p_tofix, ind, image, err, g_ind)) except TypeError: # This error means no warning argument is available, so redirect stdout to a null device # to suppress printing of warning messages original_stdout = sys.stdout # keep a reference to STDOUT sys.stdout = NullDevice() # redirect the real STDOUT p, success = leastsq(errorfunction, p_tofit, args=(x, y, p_tofix, ind, image, err, g_ind)) sys.stdout = original_stdout # turn STDOUT back on else: p, sucess = None, 1 para = N.zeros(6*ngaus) para[N.where(ind==1)[0]] = p para[N.where(ind==0)[0]] = p_tofix for igaus in range(ngaus): para[igaus*6+3] = abs(para[igaus*6+3]) para[igaus*6+4] = abs(para[igaus*6+4]) return para, success def gaussian_fcn(g, x1, x2): """Evaluate Gaussian on the given grid. Parameters: x1, x2: grid (as produced by numpy.mgrid f.e.) g: Gaussian object or list of Gaussian paramters """ from math import radians, sin, cos from .const import fwsig import numpy as N if isinstance(g, list): A, C1, C2, S1, S2, Th = g else: A = g.peak_flux C1, C2 = g.centre_pix S1, S2, Th = g.size_pix S1 = S1/fwsig; S2 = S2/fwsig; Th = Th + 90.0 # Define theta = 0 on x-axis th = radians(Th) cs = cos(th) sn = sin(th) f1 = ((x1-C1)*cs + (x2-C2)*sn)/S1 f2 = (-(x1-C1)*sn + (x2-C2)*cs)/S2 return A*N.exp(-(f1*f1 + f2*f2)/2) def mclean(im1, c, beam): """ Simple image plane clean of one gaussian at posn c and size=beam """ import numpy as N amp = im1[c] b1, b2, b3 = beam b3 += 90.0 para = [amp, c[0], c[1], b1, b2, b3] x, y = N.indices(im1.shape) im = gaus_2d(para, x, y) im1 = im1-im return im1 def arrstatmask(im, mask): """ Basic statistics for a masked array. dont wanna use numpy.ma """ import numpy as N ind = N.where(~mask) im1 = im[ind] av = N.mean(im1) std = N.std(im1) maxv = N.max(im1) x, y = N.where(im == maxv) xmax = x[0]; ymax = y[0] minv = N.min(im1) x, y = N.where(im == minv) xmin = x[0]; ymin = y[0] return (av, std, maxv, (xmax, ymax), minv, (xmin, ymin)) def get_maxima(im, mask, thr, shape, beam, im_pos=None): """ Gets the peaks in an image """ from copy import deepcopy as cp import numpy as N if im_pos is None: im_pos = im im1 = cp(im) ind = N.array(N.where(~mask)).transpose() ind = [tuple(coord) for coord in ind if im_pos[tuple(coord)] > thr] n, m = shape iniposn = [] inipeak = [] for c in ind: goodlist = [im_pos[i,j] for i in range(c[0]-1,c[0]+2) for j in range(c[1]-1,c[1]+2) \ if i>=0 and i=0 and j goodlist) == len(goodlist) if peak: iniposn.append(c) inipeak.append(im[c]) im1 = mclean(im1, c, beam) return inipeak, iniposn, im1 def watershed(image, mask=None, markers=None, beam=None, thr=None): import numpy as N from copy import deepcopy as cp import scipy.ndimage as nd #import matplotlib.pyplot as pl #import pylab as pl if thr is None: thr = -1e9 if mask is None: mask = N.zeros(image.shape, bool) if beam is None: beam = (2.0, 2.0, 0.0) if markers is None: inipeak, iniposn, im1 = get_maxima(image, mask, thr, image.shape, beam) ng = len(iniposn); markers = N.zeros(image.shape, int) for i in range(ng): markers[iniposn[i]] = i+2 markers[N.unravel_index(N.argmin(image), image.shape)] = 1 im1 = cp(image) if im1.min() < 0.: im1 = im1-im1.min() im1 = 255 - im1/im1.max()*255 opw = nd.watershed_ift(N.array(im1, N.uint16), markers) return opw, markers def get_kwargs(kwargs, key, typ, default): obj = True if key in kwargs: obj = kwargs[key] if not isinstance(obj, typ): obj = default return obj def read_image_from_file(filename, img, indir, quiet=False): """ Reads data and header from indir/filename. We can use either pyfits or python-casacore depending on the value of img.use_io = 'fits'/'rap' PyFITS is required, as it is used to standardize the header format. python-casacore is optional. """ from . import mylogger import os import numpy as N from copy import deepcopy as cp from distutils.version import StrictVersion import warnings mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Readfile") if indir is None or indir == './': prefix = '' else: prefix = indir + '/' image_file = prefix + filename # Check that file exists if not os.path.exists(image_file): img._reason = 'File does not exist' return None # If img.use_io is set, then use appropriate io module if img.use_io != '': if img.use_io == 'fits': try: from astropy.io import fits as pyfits old_pyfits = False use_sections = True except ImportError as err: import pyfits if StrictVersion(pyfits.__version__) < StrictVersion('2.2'): old_pyfits = True use_sections = False elif StrictVersion(pyfits.__version__) < StrictVersion('2.4'): old_pyfits = False use_sections = False else: old_pyfits = False try: if not old_pyfits: fits = pyfits.open(image_file, mode="readonly", ignore_missing_end=True) else: fits = pyfits.open(image_file, mode="readonly") except IOError as err: img._reason = 'Problem reading file.\nOriginal error: {0}'.format(str(err)) return None if img.use_io == 'rap': import casacore.images as pim try: inputimage = pim.image(image_file) except IOError as err: img._reason = 'Problem reading file.\nOriginal error: {0}'.format(str(err)) return None else: # Simple check of whether casacore and pyfits are available # We need pyfits version 2.2 or greater to use the # "ignore_missing_end" argument to pyfits.open(). try: try: from astropy.io import fits as pyfits old_pyfits = False use_sections = True except ImportError as err: import pyfits if StrictVersion(pyfits.__version__) < StrictVersion('2.2'): old_pyfits = True use_sections = False elif StrictVersion(pyfits.__version__) < StrictVersion('2.4'): old_pyfits = False use_sections = False else: old_pyfits = False use_sections = True has_pyfits = True except ImportError as err: raise RuntimeError("Astropy or PyFITS is required.") try: import casacore.images as pim has_casacore = True except ImportError as err: has_casacore = False e_casacore = str(err) # First assume image is a fits file, and use pyfits to open it (if # available). If that fails, try to use casacore if available. failed_read = False reason = 0 try: if not old_pyfits: fits = pyfits.open(image_file, mode="readonly", ignore_missing_end=True) else: fits = pyfits.open(image_file, mode="readonly") img.use_io = 'fits' except IOError as err: e_pyfits = str(err) if has_casacore: try: inputimage = pim.image(image_file) img.use_io = 'rap' except IOError as err: e_casacore = str(err) failed_read = True img._reason = 'File is not a valid FITS, CASA, or HDF5 image.' else: failed_read = True e_casacore = "Casacore unavailable" img._reason = 'Problem reading file.' if failed_read: img._reason += '\nOriginal error: {0}\n {1}'.format(e_pyfits, e_casacore) return None # Now that image has been read in successfully, get header (data is loaded # later to take advantage of sectioning if trim_box is specified). if not quiet: mylogger.userinfo(mylog, "Opened '"+image_file+"'") if img.use_io == 'rap': tmpdir = img.parentname+'_tmp' hdr = convert_casacore_header(inputimage, tmpdir) coords = inputimage.coordinates() img.coords_dict = coords.dict() if 'telescope' in img.coords_dict: img._telescope = img.coords_dict['telescope'] else: img._telescope = None if img.use_io == 'fits': hdr = fits[0].header img.coords_dict = None if 'TELESCOP' in hdr: img._telescope = hdr['TELESCOP'] else: img._telescope = None # Make sure data is in proper order. Final order is [pol, chan, x (RA), y (DEC)], # so we need to rearrange dimensions if they are not in this order. Use the # ctype FITS keywords to determine order of dimensions. Note that both PyFITS # and casacore reverse the order of the axes relative to NAXIS, so we must too. naxis = hdr['NAXIS'] data_shape = [] for i in range(naxis): data_shape.append(hdr['NAXIS'+str(i+1)]) data_shape.reverse() data_shape = tuple(data_shape) mylog.info("Original data shape of " + image_file +': ' +str(data_shape)) ctype_in = [] for i in range(naxis): key_val_raw = hdr['CTYPE' + str(i+1)] key_val = key_val_raw.split('-')[0] ctype_in.append(key_val.strip()) if 'RA' not in ctype_in or 'DEC' not in ctype_in: if 'GLON' not in ctype_in or 'GLAT' not in ctype_in: raise RuntimeError("Image data not found") else: lat_lon = True else: lat_lon = False # Check for incorrect spectral units. For example, "M/S" is not # recognized by PyWCS as velocity ("S" is actually Siemens, not # seconds). Note that we check CUNIT3 and CUNIT4 even if the # image has only 2 axes, as the header may still have these # entries. for i in range(4): key_val_raw = hdr.get('CUNIT' + str(i+1)) if key_val_raw is not None: if 'M/S' in key_val_raw or 'm/S' in key_val_raw or 'M/s' in key_val_raw: hdr['CUNIT' + str(i+1)] = 'm/s' if 'HZ' in key_val_raw or 'hZ' in key_val_raw or 'hz' in key_val_raw: hdr['CUNIT' + str(i+1)] = 'Hz' if 'DEG' in key_val_raw or 'Deg' in key_val_raw: hdr['CUNIT' + str(i+1)] = 'deg' # Make sure that the spectral axis has been identified properly if len(ctype_in) > 2 and 'FREQ' not in ctype_in: try: from astropy.wcs import FITSFixedWarning with warnings.catch_warnings(): warnings.filterwarnings("ignore",category=DeprecationWarning) warnings.filterwarnings("ignore",category=FITSFixedWarning) from astropy.wcs import WCS t = WCS(hdr) t.wcs.fix() except ImportError as err: with warnings.catch_warnings(): warnings.filterwarnings("ignore",category=DeprecationWarning) from pywcs import WCS t = WCS(hdr) t.wcs.fix() spec_indx = t.wcs.spec if spec_indx != -1: ctype_in[spec_indx] = 'FREQ' # Now reverse the axes order to match PyFITS/casacore order and define the # final desired order (cytpe_out) and shape (shape_out). ctype_in.reverse() if lat_lon: ctype_out = ['STOKES', 'FREQ', 'GLON', 'GLAT'] else: ctype_out = ['STOKES', 'FREQ', 'RA', 'DEC'] indx_out = [-1, -1, -1, -1] indx_in = range(naxis) for i in indx_in: for j in range(4): if ctype_in[i] == ctype_out[j]: indx_out[j] = i shape_out = [1, 1, data_shape[indx_out[2]], data_shape[indx_out[3]]] if indx_out[0] != -1: shape_out[0] = data_shape[indx_out[0]] if indx_out[1] != -1: shape_out[1] = data_shape[indx_out[1]] indx_out = [a for a in indx_out if a >= 0] # trim unused axes # Read in data. If only a subsection of the image is desired (as defined # by the trim_box option), we can try to use PyFITS to read only that section. img._original_naxis = data_shape img._original_shape = (shape_out[2], shape_out[3]) img._xy_hdr_shift = (0, 0) if img.opts.trim_box is not None: img.trim_box = [int(b) for b in img.opts.trim_box] xmin, xmax, ymin, ymax = img.trim_box if xmin < 0: xmin = 0 if ymin < 0: ymin = 0 if xmax > shape_out[2]: xmax = shape_out[2] if ymax > shape_out[3]: ymax = shape_out[3] if xmin >= xmax or ymin >= ymax: raise RuntimeError("The trim_box option does not specify a valid part of the image.") shape_out_untrimmed = shape_out[:] shape_out[2] = xmax-xmin shape_out[3] = ymax-ymin if img.use_io == 'fits': sx = slice(int(xmin),int(xmax)) sy = slice(int(ymin),int(ymax)) sn = slice(None) s_array = [sx, sy] for i in range(naxis-2): s_array.append(sn) s_array.reverse() # to match ordering of data array returned by PyFITS if not old_pyfits and use_sections: if naxis == 2: data = fits[0].section[s_array[0], s_array[1]] elif naxis == 3: data = fits[0].section[s_array[0], s_array[1], s_array[2]] elif naxis == 4: data = fits[0].section[s_array[0], s_array[1], s_array[2], s_array[3]] else: # If more than 4 axes, just read in the whole image and # do the trimming after reordering. data = fits[0].data else: data = fits[0].data fits.close() data = data.transpose(*indx_out) # transpose axes to final order data.shape = data.shape[0:4] # trim unused dimensions (if any) if naxis > 4 or not use_sections: data = data.reshape(shape_out_untrimmed) # Add axes if needed data = data[:, :, xmin:xmax, ymin:ymax] # trim to trim_box else: data = data.reshape(shape_out) # Add axes if needed else: # With casacore, just read in the whole image and then trim data = inputimage.getdata() data = data.transpose(*indx_out) # transpose axes to final order data.shape = data.shape[0:4] # trim unused dimensions (if any) data = data.reshape(shape_out_untrimmed) # Add axes if needed data = data[:, :, xmin:xmax, ymin:ymax] # trim to trim_box # Adjust WCS keywords for trim_box starting x and y. hdr['crpix1'] -= xmin hdr['crpix2'] -= ymin img._xy_hdr_shift = (xmin, ymin) else: if img.use_io == 'fits': data = fits[0].data fits.close() else: data = inputimage.getdata() data = data.transpose(*indx_out) # transpose axes to final order data.shape = data.shape[0:4] # trim unused dimensions (if any) data = data.reshape(shape_out) # Add axes if needed mylog.info("Final data shape (npol, nchan, x, y): " + str(data.shape)) return data, hdr def convert_casacore_header(casacore_image, tmpdir): """Converts a casacore header to a PyFITS header.""" import tempfile import os import atexit import shutil try: from astropy.io import fits as pyfits except ImportError as err: import pyfits if not os.path.exists(tmpdir): os.makedirs(tmpdir) tfile = tempfile.NamedTemporaryFile(delete=False, dir=tmpdir) casacore_image.tofits(tfile.name) hdr = pyfits.getheader(tfile.name) if os.path.isfile(tfile.name): os.remove(tfile.name) # Register deletion of temp directory at exit to be sure it is deleted atexit.register(shutil.rmtree, tmpdir, ignore_errors=True) return hdr def write_image_to_file(use, filename, image, img, outdir=None, pad_image=False, clobber=True, is_mask=False): """ Writes image array to outdir/filename""" import numpy as N import os from . import mylogger mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Writefile") wcs_obj = img.wcs_obj if pad_image and img.opts.trim_box is not None: # Pad image to original size xsize, ysize = img._original_shape xmin, ymin = img._xy_hdr_shift image_pad = N.zeros((xsize, ysize), dtype=N.float32) image_pad[xmin:xmin+image.shape[0], ymin:ymin+image.shape[1]] = image image = image_pad else: xmin = 0 ymin = 0 if not hasattr(img, '_telescope'): telescope = None else: telescope = img._telescope if filename == 'SAMP': import tempfile if not hasattr(img,'samp_client'): s, private_key = start_samp_proxy() img.samp_client = s img.samp_key = private_key # Broadcast image to SAMP Hub temp_im = make_fits_image(N.transpose(image), wcs_obj, img.beam, img.frequency, img.equinox, telescope, xmin=xmin, ymin=ymin, is_mask=is_mask) tfile = tempfile.NamedTemporaryFile(delete=False) try: temp_im.writeto(tfile.name, overwrite=clobber) except TypeError: # The "overwrite" argument was added in astropy v1.3, so fall back to "clobber" # if it doesn't work temp_im.writeto(tfile.name, clobber=clobber) send_fits_image(img.samp_client, img.samp_key, 'PyBDSM image', tfile.name) else: # Write image to FITS file if outdir is None: outdir = img.indir if not os.path.exists(outdir) and outdir != '': os.makedirs(outdir) if os.path.isfile(outdir+filename): if clobber: os.remove(outdir+filename) else: return if os.path.isdir(outdir+filename): if clobber: os.system("rm -rf "+outdir+filename) else: return temp_im = make_fits_image(N.transpose(image), wcs_obj, img.beam, img.frequency, img.equinox, telescope, xmin=xmin, ymin=ymin, is_mask=is_mask, shape=(img.shape[1], img.shape[0], image.shape[1], image.shape[0])) if use == 'rap': outfile = outdir + filename + '.fits' else: outfile = outdir + filename try: temp_im.writeto(outfile, overwrite=clobber) except TypeError: # The "overwrite" argument was added in astropy v1.3, so fall back to "clobber" # if it doesn't work temp_im.writeto(outfile, clobber=clobber) temp_im.close() if use == 'rap': # For CASA images, read in FITS image and convert try: import casacore.images as pim import casacore.tables as pt import os outimage = pim.image(outfile) outimage.saveas(outdir+filename, overwrite=clobber) # For masks, use the coordinates dictionary from the input # image, as this is needed in order for the # image to work as a clean mask in CASA. if is_mask: if img.coords_dict is None: mylog.warning('Mask header information may be incomplete.') else: outtable = pt.table(outdir+filename, readonly=False, ack=False) outtable.putkeywords({'coords': img.coords_dict}) outtable.done() except ImportError as err: import os os.remove(outfile) raise RuntimeError("Error importing python-casacore. CASA image could not " "be writen. Use img_format = 'fits' instead.") def make_fits_image(imagedata, wcsobj, beam, freq, equinox, telescope, xmin=0, ymin=0, is_mask=False, shape=None): """Makes a simple FITS hdulist appropriate for single-channel images""" from distutils.version import StrictVersion try: from astropy.io import fits as pyfits use_header_update = False except ImportError as err: import pyfits # Due to changes in the way pyfits handles headers from version 3.1 on, # we need to check for older versions and change the setting of header # keywords accordingly. if StrictVersion(pyfits.__version__) < StrictVersion('3.1'): use_header_update = True else: use_header_update = False import numpy as np # If mask, expand to all channels and Stokes for compatibility with casa if is_mask and shape is not None: shape_out = shape else: shape_out = [1, 1, imagedata.shape[0], imagedata.shape[1]] hdu = pyfits.PrimaryHDU(np.resize(imagedata, shape_out)) hdulist = pyfits.HDUList([hdu]) header = hdulist[0].header # Add WCS info if use_header_update: header.update('CRVAL1', wcsobj.wcs.crval[0]) header.update('CDELT1', wcsobj.wcs.cdelt[0]) header.update('CRPIX1', wcsobj.wcs.crpix[0] + xmin) header.update('CUNIT1', str(wcsobj.wcs.cunit[0]).strip().lower()) # needed due to bug in pywcs/astropy header.update('CTYPE1', wcsobj.wcs.ctype[0]) header.update('CRVAL2', wcsobj.wcs.crval[1]) header.update('CDELT2', wcsobj.wcs.cdelt[1]) header.update('CRPIX2', wcsobj.wcs.crpix[1] + ymin) header.update('CUNIT2', str(wcsobj.wcs.cunit[1]).strip().lower()) header.update('CTYPE2', wcsobj.wcs.ctype[1]) else: header['CRVAL1'] = wcsobj.wcs.crval[0] header['CDELT1'] = wcsobj.wcs.cdelt[0] header['CRPIX1'] = wcsobj.wcs.crpix[0] + xmin header['CUNIT1'] = str(wcsobj.wcs.cunit[0]).strip().lower() # needed due to bug in pywcs/astropy header['CTYPE1'] = wcsobj.wcs.ctype[0] header['CRVAL2'] = wcsobj.wcs.crval[1] header['CDELT2'] = wcsobj.wcs.cdelt[1] header['CRPIX2'] = wcsobj.wcs.crpix[1] + ymin header['CUNIT2'] = str(wcsobj.wcs.cunit[1]).strip().lower() header['CTYPE2'] = wcsobj.wcs.ctype[1] # Add STOKES info if use_header_update: header.update('CRVAL3', 1.0) header.update('CDELT3', 1.0) header.update('CRPIX3', 1.0) header.update('CUNIT3', ' ') header.update('CTYPE3', 'STOKES') else: header['CRVAL3'] = 1.0 header['CDELT3'] = 1.0 header['CRPIX3'] = 1.0 header['CUNIT3'] = '' header['CTYPE3'] = 'STOKES' # Add frequency info if use_header_update: header.update('RESTFRQ', freq) header.update('CRVAL4', freq) header.update('CDELT4', 3e8) header.update('CRPIX4', 1.0) header.update('CUNIT4', 'HZ') header.update('CTYPE4', 'FREQ') header.update('SPECSYS', 'TOPOCENT') else: header['RESTFRQ'] = freq header['CRVAL4'] = freq header['CDELT4'] = 3e8 header['CRPIX4'] = 1.0 header['CUNIT4'] = 'HZ' header['CTYPE4'] = 'FREQ' header['SPECSYS'] = 'TOPOCENT' # Add beam info if not is_mask: if use_header_update: header.update('BMAJ', beam[0]) header.update('BMIN', beam[1]) header.update('BPA', beam[2]) else: header['BMAJ'] = beam[0] header['BMIN'] = beam[1] header['BPA'] = beam[2] # Add equinox if use_header_update: header.update('EQUINOX', equinox) else: header['EQUINOX'] = equinox # Add telescope if telescope is not None: if use_header_update: header.update('TELESCOP', telescope) else: header['TELESCOP'] = telescope hdulist[0].header = header return hdulist def retrieve_map(img, map_name): """Returns a map cached on disk.""" import numpy as N import os filename = get_name(img, map_name) if not os.path.isfile(filename): return None infile = open(filename, 'rb') data = N.load(infile) infile.close() return data def store_map(img, map_name, map_data): """Caches a map to disk.""" import numpy as N filename = get_name(img, map_name) outfile = open(filename, 'wb') N.save(outfile, map_data) outfile.close() def del_map(img, map_name): """Deletes a cached map.""" import os filename = get_name(img, map_name) if os.path.isfile(filename): os.remove(filename) def get_name(img, map_name): """Returns name of cache file.""" import os if img._pi: pi_text = 'pi' else: pi_text = 'I' suffix = '/w%i_%s/' % (img.j, pi_text) dir = img.tempdir + suffix if not os.path.exists(dir): os.makedirs(dir) return dir + map_name + '.bin' def connect(mask): """ Find if a mask is singly or multiply connected """ import scipy.ndimage as nd connectivity = nd.generate_binary_structure(2,2) labels, count = nd.label(mask, connectivity) if count > 1 : connected = 'multiple' else: connected = 'single' return connected, count def area_polygon(points): """ Given an ANGLE ORDERED array points of [[x], [y]], find the total area by summing each successsive triangle with the centre """ import numpy as N x, y = points n_tri = len(x)-1 cenx, ceny = N.mean(x), N.mean(y) area = 0.0 for i in range(n_tri): p1, p2, p3 = N.array([cenx, ceny]), N.array([x[i], y[i]]), N.array([x[i+1], y[i+1]]) t_area= N.linalg.norm(N.cross((p2 - p1), (p3 - p1)))/2. area += t_area return area def convexhull_deficiency(isl): """ Finds the convex hull for the island and returns the deficiency. Code taken from http://code.google.com/p/milo-lab/source/browse/trunk/src/toolbox/convexhull.py?spec=svn140&r=140 """ import random import time import numpy as N import scipy.ndimage as nd def _angle_to_point(point, centre): """calculate angle in 2-D between points and x axis""" delta = point - centre if delta[0] == 0.0: res = N.pi/2.0 else: res = N.arctan(delta[1] / delta[0]) if delta[0] < 0: res += N.pi return res def area_of_triangle(p1, p2, p3): """calculate area of any triangle given co-ordinates of the corners""" return N.linalg.norm(N.cross((p2 - p1), (p3 - p1)))/2. def convex_hull(points): """Calculate subset of points that make a convex hull around points Recursively eliminates points that lie inside two neighbouring points until only convex hull is remaining. points : ndarray (2 x m) array of points for which to find hull Returns: hull_points : ndarray (2 x n), convex hull surrounding points """ n_pts = points.shape[1] #assert(n_pts > 5) centre = points.mean(1) angles = N.apply_along_axis(_angle_to_point, 0, points, centre) pts_ord = points[:,angles.argsort()] pts = [x[0] for x in zip(pts_ord.transpose())] prev_pts = len(pts) + 1 k = 0 while prev_pts > n_pts: prev_pts = n_pts n_pts = len(pts) i = -2 while i < (n_pts - 2): Aij = area_of_triangle(centre, pts[i], pts[(i + 1) % n_pts]) Ajk = area_of_triangle(centre, pts[(i + 1) % n_pts], \ pts[(i + 2) % n_pts]) Aik = area_of_triangle(centre, pts[i], pts[(i + 2) % n_pts]) if Aij + Ajk < Aik: del pts[i+1] i += 1 n_pts = len(pts) k += 1 return N.asarray(pts) mask = ~isl.mask_active points = N.asarray(N.where(mask ^ nd.binary_erosion(mask))) hull_pts = list(convex_hull(points)) # these are already in angle-sorted order hull_pts.append(hull_pts[0]) hull_pts = N.transpose(hull_pts) isl_area = isl.size_active hull_area = area_polygon(hull_pts) ratio1 = hull_area/(isl_area - 0.5*len(hull_pts[0])) return ratio1 def open_isl(mask, index): """ Do an opening on a mask, divide left over pixels among opened sub islands. Mask = True => masked pixel """ import scipy.ndimage as nd import numpy as N connectivity = nd.generate_binary_structure(2,2) ft = N.ones((index,index), int) open = nd.binary_opening(~mask, ft) open = check_1pixcontacts(open) # check if by removing one pixel from labels, you can split a sub-island labels, n_subisl = nd.label(open, connectivity) # get label/rank image for open. label = 0 for masked pixels labels, mask = assign_leftovers(mask, open, n_subisl, labels) # add the leftover pixels to some island if labels is not None: isl_pixs = [len(N.where(labels==i)[0]) for i in range(1,n_subisl+1)] isl_pixs = N.array(isl_pixs)/float(N.sum(isl_pixs)) else: isl_pixs = None return n_subisl, labels, isl_pixs def check_1pixcontacts(open): import scipy.ndimage as nd import numpy as N from copy import deepcopy as cp connectivity = nd.generate_binary_structure(2,2) ind = N.transpose(N.where(open[1:-1,1:-1] > 0)) + [1,1] # exclude boundary to make it easier for pixel in ind: x, y = pixel grid = cp(open[x-1:x+2, y-1:y+2]); grid[1,1] = 0 grid = N.where(grid == open[tuple(pixel)], 1, 0) ll, nn = nd.label(grid, connectivity) if nn > 1: open[tuple(pixel)] = 0 return open def assign_leftovers(mask, open, nisl, labels): """ Given isl and the image of the mask after opening (open) and the number of new independent islands n, connect up the left over pixels to the new islands if they connect to only one island and not more. Assign the remaining to an island. We need to assign the leftout pixels to either of many sub islands. Easiest is to assign to the sub island with least size. """ import scipy.ndimage as nd import numpy as N from copy import deepcopy as cp n, m = mask.shape leftout = ~mask ^ open connectivity = nd.generate_binary_structure(2,2) mlabels, count = nd.label(leftout, connectivity) npix = [len(N.where(labels==b)[0]) for b in range(1,nisl+1)] for i_subisl in range(count): c_list = [] # is list of all bordering pixels of the sub island ii = i_subisl+1 coords = N.transpose(N.where(mlabels==ii)) # the coordinates of island i of left-out pixels for co in coords: co8 = [[x,y] for x in range(co[0]-1,co[0]+2) for y in range(co[1]-1,co[1]+2) if x >=0 and y >=0 and x mask pixels for cc in coords: mask = (mlabels == ii) # mask[cc] = True return None, mask if len(belongs) == 1: for cc in coords: labels[tuple(cc)] = belongs[0] else: # get the border pixels of the islands nn = [npix[b-1] for b in belongs] addto = belongs[N.argmin(nn)] for cc in coords: labels[tuple(cc)] = addto return labels, mask def _float_approx_equal(x, y, tol=1e-18, rel=1e-7): if tol is rel is None: raise TypeError('cannot specify both absolute and relative errors are None') tests = [] if tol is not None: tests.append(tol) if rel is not None: tests.append(rel*abs(x)) assert tests return abs(x - y) <= max(tests) def approx_equal(x, y, *args, **kwargs): """approx_equal(float1, float2[, tol=1e-18, rel=1e-7]) -> True|False approx_equal(obj1, obj2[, *args, **kwargs]) -> True|False Return True if x and y are approximately equal, otherwise False. If x and y are floats, return True if y is within either absolute error tol or relative error rel of x. You can disable either the absolute or relative check by passing None as tol or rel (but not both). For any other objects, x and y are checked in that order for a method __approx_equal__, and the result of that is returned as a bool. Any optional arguments are passed to the __approx_equal__ method. __approx_equal__ can return NotImplemented to signal that it doesn't know how to perform that specific comparison, in which case the other object is checked instead. If neither object have the method, or both defer by returning NotImplemented, approx_equal falls back on the same numeric comparison used for floats. >>> almost_equal(1.2345678, 1.2345677) True >>> almost_equal(1.234, 1.235) False """ if not (type(x) is type(y) is float): # Skip checking for __approx_equal__ in the common case of two floats. methodname = '__approx_equal__' # Allow the objects to specify what they consider "approximately equal", # giving precedence to x. If either object has the appropriate method, we # pass on any optional arguments untouched. for a,b in ((x, y), (y, x)): try: method = getattr(a, methodname) except AttributeError: continue else: result = method(b, *args, **kwargs) if result is NotImplemented: continue return bool(result) # If we get here without returning, then neither x nor y knows how to do an # approximate equal comparison (or are both floats). Fall back to a numeric # comparison. return _float_approx_equal(x, y, *args, **kwargs) def isl_tosplit(isl, opts): """ Splits an island and sends back parameters """ import numpy as N size_extra5 = opts.splitisl_size_extra5 frac_bigisl3 = opts.splitisl_frac_bigisl3 connected, count = connect(isl.mask_active) index = 0 n_subisl3, labels3, isl_pixs3 = open_isl(isl.mask_active, 3) n_subisl5, labels5, isl_pixs5 = open_isl(isl.mask_active, 5) isl_pixs3, isl_pixs5 = N.array(isl_pixs3), N.array(isl_pixs5) # take open 3 or 5 open3, open5 = False, False if n_subisl3 > 0 and isl_pixs3 is not None: # open 3 breaks up island max_sub3 = N.max(isl_pixs3) if max_sub3 < frac_bigisl3 : open3 = True # if biggest sub island isnt too big if n_subisl5 > 0 and isl_pixs5 is not None: # open 5 breaks up island max_sub5 = N.max(isl_pixs5) # if biggest subisl isnt too big OR smallest extra islands add upto 10 % if (max_sub5 < 0.75*max_sub3) or (N.sum(N.sort(isl_pixs5)[:len(isl_pixs5)-n_subisl3]) > size_extra5): open5 = True # index=0 => dont split if open5: index = 5; n_subisl = n_subisl5; labels = labels5 else: if open3: index = 3; n_subisl = n_subisl3; labels = labels3 else: index = 0 convex_def = convexhull_deficiency(isl) #print 'CONVEX = ',convex_def if opts.plot_islands: try: import matplotlib.pyplot as pl pl.figure() pl.suptitle('Island '+str(isl.island_id)) pl.subplot(2,2,1); pl.imshow(N.transpose(isl.image*~isl.mask_active), origin='lower', interpolation='nearest'); pl.title('Image') pl.subplot(2,2,2); pl.imshow(N.transpose(labels3), origin='lower', interpolation='nearest'); pl.title('labels3') pl.subplot(2,2,3); pl.imshow(N.transpose(labels5), origin='lower', interpolation='nearest'); pl.title('labels5') except ImportError: print("\033[31;1mWARNING\033[0m: Matplotlib not found. Plotting disabled.") if index == 0: return [index, n_subisl5, labels5] else: return [index, n_subisl, labels] class NullDevice(): """Null device to suppress stdout, etc.""" def write(self, s): pass def ch0_aperture_flux(img, posn_pix, aperture_pix): """Measure ch0 flux inside radius aperture_pix pixels centered on posn_pix. Returns [flux, fluxE] """ import numpy as N if aperture_pix is None: return [0.0, 0.0] # Make ch0 and rms subimages ch0 = img.ch0_arr shape = ch0.shape xlo = int(posn_pix[0]) - int(aperture_pix) - 1 if xlo < 0: xlo = 0 xhi = int(posn_pix[0]) + int(aperture_pix) + 1 if xhi > shape[0]: xhi = shape[0] ylo = int(posn_pix[1]) - int(aperture_pix) - 1 if ylo < 0: ylo = 0 yhi = int(posn_pix[1]) + int(aperture_pix) + 1 if yhi > shape[1]: yhi = shape[1] mean = img.mean_arr rms = img.rms_arr aper_im = ch0[int(xlo):int(xhi), int(ylo):int(yhi)] - mean[int(xlo):int(xhi), int(ylo):int(yhi)] aper_rms = rms[int(xlo):int(xhi), int(ylo):int(yhi)] posn_pix_new = [int(posn_pix[0])-xlo, int(posn_pix[1])-ylo] pixel_beamarea = img.pixel_beamarea() aper_flux = aperture_flux(aperture_pix, posn_pix_new, aper_im, aper_rms, pixel_beamarea) return aper_flux def aperture_flux(aperture_pix, posn_pix, aper_im, aper_rms, beamarea): """Returns aperture flux and error""" import numpy as N dist_mask = generate_aperture(aper_im.shape[0], aper_im.shape[1], posn_pix[0], posn_pix[1], aperture_pix) aper_mask = N.where(dist_mask.astype(bool)) if N.size(aper_mask) == 0: return [0.0, 0.0] aper_flux = N.nansum(aper_im[aper_mask])/beamarea # Jy pixels_in_source = N.sum(~N.isnan(aper_im[aper_mask])) # number of unmasked pixels assigned to current source aper_fluxE = nanmean(aper_rms[aper_mask]) * N.sqrt(pixels_in_source/beamarea) # Jy return [aper_flux, aper_fluxE] def generate_aperture(xsize, ysize, xcenter, ycenter, radius): """Makes a mask (1 = inside aperture) for a circular aperture""" import numpy x, y = numpy.mgrid[0.5:xsize, 0.5:ysize] mask = ((x - xcenter)**2 + (y - ycenter)**2 <= radius**2) * 1 return mask def make_src_mask(mask_size, posn_pix, aperture_pix): """Makes an island mask (1 = inside aperture) for a given source position. """ import numpy as N xsize, ysize = mask_size if aperture_pix is None: return N.zeros((xsize, ysize), dtype=N.int) # Make subimages xlo = int(posn_pix[0]-int(aperture_pix)-1) if xlo < 0: xlo = 0 xhi = int(posn_pix[0]+int(aperture_pix)+1) if xhi > xsize: xhi = xsize ylo = int(posn_pix[1]-int(aperture_pix)-1) if ylo < 0: ylo = 0 yhi = int(posn_pix[1]+int(aperture_pix)+1) if yhi > ysize: yhi = ysize mask = N.zeros((xsize, ysize), dtype=N.int) posn_pix_new = [posn_pix[0]-xlo, posn_pix[1]-ylo] submask_xsize = xhi - xlo submask_ysize = yhi - ylo submask = generate_aperture(submask_xsize, submask_ysize, posn_pix_new[0], posn_pix_new[1], aperture_pix) submask_slice = [slice(int(xlo), int(xhi)), slice(int(ylo), int(yhi))] mask[tuple(submask_slice)] = submask return mask def getTerminalSize(): """ returns (lines:int, cols:int) """ import os, struct def ioctl_GWINSZ(fd): import fcntl, termios return struct.unpack("hh", fcntl.ioctl(fd, termios.TIOCGWINSZ, "1234")) # try stdin, stdout, stderr for fd in (0, 1, 2): try: return ioctl_GWINSZ(fd) except: pass # try os.ctermid() try: fd = os.open(os.ctermid(), os.O_RDONLY) try: return ioctl_GWINSZ(fd) finally: os.close(fd) except: pass # try `stty size` try: return tuple(int(x) for x in os.popen("stty size", "r").read().split()) except: pass # try environment variables try: return tuple(int(os.getenv(var)) for var in ("LINES", "COLUMNS")) except: pass # Give up. return 0. return (0, 0) def eval_func_tuple(f_args): """Takes a tuple of a function and args, evaluates and returns result This function (in addition to itertools) gets around limitation that multiple-argument sequences are not supported by multiprocessing. """ return f_args[0](*f_args[1:]) def start_samp_proxy(): """Starts (registers) and returns a SAMP proxy""" import os try: # Python 3 from xmlrpc.client import ServerProxy except ImportError: # Python 2 from xmlrpclib import ServerProxy lockfile = os.path.expanduser('~/.samp') if not os.path.exists(lockfile): raise RuntimeError("A running SAMP hub was not found.") else: HUB_PARAMS = {} for line in open(lockfile): if not line.startswith('#'): key, value = line.split('=', 1) HUB_PARAMS[key] = value.strip() # Set up proxy s = ServerProxy(HUB_PARAMS['samp.hub.xmlrpc.url']) # Register with Hub metadata = {"samp.name": 'PyBDSM', "samp.description.text": 'PyBDSM: the Python Blob Detection and Source Measurement software'} result = s.samp.hub.register(HUB_PARAMS['samp.secret']) private_key = result['samp.private-key'] s.samp.hub.declareMetadata(private_key, metadata) return s, private_key def stop_samp_proxy(img): """Stops (unregisters) a SAMP proxy""" import os if hasattr(img, 'samp_client'): lockfile = os.path.expanduser('~/.samp') if os.path.exists(lockfile): img.samp_client.samp.hub.unregister(img.samp_key) def send_fits_image(s, private_key, name, file_path): """Send a SAMP notification to load a fits image.""" import os message = {} message['samp.mtype'] = "image.load.fits" message['samp.params'] = {} message['samp.params']['url'] = 'file://' + os.path.abspath(file_path) message['samp.params']['name'] = name lockfile = os.path.expanduser('~/.samp') if not os.path.exists(lockfile): raise RuntimeError("A running SAMP hub was not found.") else: s.samp.hub.notifyAll(private_key, message) def send_fits_table(s, private_key, name, file_path): """Send a SAMP notification to load a fits table.""" import os message = {} message['samp.mtype'] = "table.load.fits" message['samp.params'] = {} message['samp.params']['url'] = 'file://' + os.path.abspath(file_path) message['samp.params']['name'] = name lockfile = os.path.expanduser('~/.samp') if not os.path.exists(lockfile): raise RuntimeError("A running SAMP hub was not found.") else: s.samp.hub.notifyAll(private_key, message) def send_highlight_row(s, private_key, url, row_id): """Send a SAMP notification to highlight a row in a table.""" import os message = {} message['samp.mtype'] = "table.highlight.row" message['samp.params'] = {} message['samp.params']['row'] = str(row_id) message['samp.params']['url'] = url lockfile = os.path.expanduser('~/.samp') if not os.path.exists(lockfile): raise RuntimeError("A running SAMP hub was not found.") else: s.samp.hub.notifyAll(private_key, message) def send_coords(s, private_key, coords): """Send a SAMP notification to point at given coordinates.""" import os message = {} message['samp.mtype'] = "coord.pointAt.sky" message['samp.params'] = {} message['samp.params']['ra'] = str(coords[0]) message['samp.params']['dec'] = str(coords[1]) lockfile = os.path.expanduser('~/.samp') if not os.path.exists(lockfile): raise RuntimeError("A running SAMP hub was not found.") else: s.samp.hub.notifyAll(private_key, message) def make_curvature_map(subim): """Makes a curvature map with the Aegean curvature algorithm (Hancock et al. 2012) The Aegean algorithm uses a curvature map to identify regions of negative curvature. These regions then define distinct sources. """ import scipy.signal as sg import numpy as N import sys # Make average curavature map: curv_kernal = N.array([[1, 1, 1],[1, -8, 1],[1, 1, 1]]) # The next step prints meaningless warnings, so suppress them original_stdout = sys.stdout # keep a reference to STDOUT sys.stdout = NullDevice() # redirect the real STDOUT curv_map = sg.convolve2d(subim, curv_kernal) sys.stdout = original_stdout # turn STDOUT back on return curv_map def bstat(indata, mask, kappa_npixbeam): """Numpy version of the c++ bstat routine Uses the PySE method for calculating the clipped mean and rms of an array. This method is superior to the c++ bstat routine (see section 2.7.3 of http://dare.uva.nl/document/174052 for details) and, since the Numpy functions used here are written in c, there should be no big computational penalty in using Python code. """ import numpy from scipy.special import erf, erfcinv # Flatten array skpix = indata.flatten() if mask is not None: msk_flat = mask.flatten() unmasked = numpy.where(~msk_flat) skpix = skpix[unmasked] ct = skpix.size iter = 0 c1 = 1.0 c2 = 0.0 maxiter = 200 converge_num = 1e-6 m_raw = numpy.mean(skpix) r_raw = numpy.std(skpix, ddof=1) while (c1 >= c2) and (iter < maxiter): npix = skpix.size if kappa_npixbeam > 0.0: kappa = kappa_npixbeam else: npixbeam = abs(kappa_npixbeam) kappa = numpy.sqrt(2.0)*erfcinv(1.0 / (2.0*npix/npixbeam)) if kappa < 3.0: kappa = 3.0 lastct = ct medval = numpy.median(skpix) sig = numpy.std(skpix) wsm = numpy.where(abs(skpix-medval) < kappa*sig) ct = len(wsm[0]) if ct > 0: skpix = skpix[wsm] c1 = abs(ct - lastct) c2 = converge_num * lastct iter += 1 mean = numpy.mean(skpix) median = numpy.median(skpix) sigma = numpy.std(skpix, ddof=1) mode = 2.5*median - 1.5*mean if sigma > 0.0: skew_par = abs(mean - median)/sigma else: raise RuntimeError("A region with an unphysical rms value has been found. " "Please check the input image.") if skew_par <= 0.3: m = mode else: m = median r1 = numpy.sqrt(2.0*numpy.pi)*erf(kappa/numpy.sqrt(2.0)) r = numpy.sqrt(sigma**2 * (r1 / (r1 - 2.0*kappa*numpy.exp(-kappa**2/2.0)))) return m_raw, r_raw, m, r, iter def centered(arr, newshape): """Return the center newshape portion of the array This function is a copy of the private _centered() function in scipy.signal.signaltools """ import numpy as np newshape = np.asarray(newshape) currshape = np.array(arr.shape) startind = (currshape - newshape) // 2 endind = startind + newshape myslice = [slice(startind[k], endind[k]) for k in range(len(endind))] return arr[tuple(myslice)] PyBDSF-1.10.1/bdsf/gaul2srl.py000066400000000000000000001042011420247104600156420ustar00rootroot00000000000000 """Module gaul2srl This will group gaussians in an island into sources. Will code callgaul2srl.f here, though it could probably be made more efficient. img.sources is a list of source objects, which are instances of the class Source (with attributes the same as in .srl of fbdsm). img.sources[n] is a source. source.gaussians is the list of component gaussian objects. source.island_id is the island id of that source. source.source_id is the source id of that source, the index of source in img.sources. Each gaussian object gaus has gaus.source_id, the source id. Also, each island object of img.islands list has the source object island.source """ from __future__ import absolute_import from .image import * from .islands import * from .interface import wrap from . import mylogger import numpy as N N.seterr(divide='raise') class Op_gaul2srl(Op): """ Slightly modified from fortran. """ def __call__(self, img): # for each island, get the gaussians into a list and then send them to process # src_index is source number, starting from 0 mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Gaul2Srl") mylogger.userinfo(mylog, 'Grouping Gaussians into sources') img.aperture = img.opts.aperture if img.aperture is not None and img.aperture <= 0.0: mylog.warn('Specified aperture is <= 0. Skipping aperture fluxes.') img.aperture = None src_index = -1 dsrc_index = 0 sources = [] dsources = [] no_gaus_islands = [] no_gaus_islands_flag_values = [] for iisl, isl in enumerate(img.islands): isl_sources = [] isl_dsources = [] g_list = [] for g in isl.gaul: if g.flag == 0: g_list.append(g) if len(g_list) > 0: if len(g_list) == 1: src_index, source = self.process_single_gaussian(img, g_list, src_index, code = 'S') sources.append(source) isl_sources.append(source) else: src_index, source = self.process_CM(img, g_list, isl, src_index) sources.extend(source) isl_sources.extend(source) else: if not img.waveletimage: dg = isl.dgaul[0] no_gaus_islands.append((isl.island_id, dg.centre_pix[0], dg.centre_pix[1])) flag_values = [] for fg in isl.fgaul: flag_values.append(fg.flag) no_gaus_islands_flag_values.append(flag_values) # Put in the dummy Source as the source and use negative IDs g_list = isl.dgaul dsrc_index, dsource = self.process_single_gaussian(img, g_list, dsrc_index, code = 'S') dsources.append(dsource) isl_dsources.append(dsource) isl.sources = isl_sources isl.dsources = isl_dsources img.sources = sources img.dsources = dsources img.nsrc = src_index + 1 mylogger.userinfo(mylog, "Number of sources formed from Gaussians", str(img.nsrc)) if not img.waveletimage and not img._pi and len(no_gaus_islands) > 0 and not img.opts.quiet: message = 'All Gaussians were flagged for the following island' if len(no_gaus_islands) == 1: message += ':\n' else: message += 's:\n' for isl_id, flag_list in zip(no_gaus_islands, no_gaus_islands_flag_values): message += ' Island #%i (x=%i, y=%i): ' % isl_id if len(flag_list) > 0: flags_str = '{}'.format(', '.join([str(f) for f in flag_list])) if len(flag_list) == 1: pl_str = '' else: pl_str = 's' message += 'fit with {0} Gaussian{1} with flag{1} = {2}\n'.format(len(flag_list), pl_str, flags_str) else: message += '\n' if len(no_gaus_islands) == 1: message += 'Please check this island. If it is a valid island and\n' else: message += 'Please check these islands. If they are valid islands and\n' if img.opts.atrous_do: message += 'should be fit, try adjusting the flagging options (use\n'\ 'show_fit with "ch0_flagged=True" to see the flagged Gaussians\n'\ 'and "help \'flagging_opts\'" to see the meaning of the flags).' else: message += 'should be fit, try adjusting the flagging options (use\n'\ 'show_fit with "ch0_flagged=True" to see the flagged Gaussians\n'\ 'and "help \'flagging_opts\'" to see the meaning of the flags)\n'\ 'or enabling the wavelet module (with "atrous_do=True").' message += '\nTo include empty islands in output source catalogs, set\n'\ 'incl_empty=True in the write_catalog task.' mylog.warning(message) img.completed_Ops.append('gaul2srl') ################################################################################################# def process_single_gaussian(self, img, g_list, src_index, code): """ Process single gaussian into a source, for both S and C type sources. g is just one Gaussian object (not a list).""" g = g_list[0] total_flux = [g.total_flux, g.total_fluxE] peak_flux_centroid = peak_flux_max = [g.peak_flux, g.peak_fluxE] posn_sky_centroid = posn_sky_max = [g.centre_sky, g.centre_skyE] size_sky = [g.size_sky, g.size_skyE] size_sky_uncorr = [g.size_sky_uncorr, g.size_skyE] deconv_size_sky = [g.deconv_size_sky, g.deconv_size_skyE] deconv_size_sky_uncorr = [g.deconv_size_sky_uncorr, g.deconv_size_skyE] bbox = img.islands[g.island_id].bbox ngaus = 1 island_id = g.island_id aper_flux = func.ch0_aperture_flux(img, g.centre_pix, img.aperture) if g.gaussian_idx == -1: src_index -= 1 else: src_index += 1 g.source_id = src_index g.code = code if g.gaus_num < 0: gaussians = [] else: gaussians = [g] source_prop = list([code, total_flux, peak_flux_centroid, peak_flux_max, aper_flux, posn_sky_centroid, posn_sky_max, size_sky, size_sky_uncorr, deconv_size_sky, deconv_size_sky_uncorr, bbox, ngaus, island_id, gaussians]) source = Source(img, source_prop) source.source_id = src_index return src_index, source ################################################################################################## def process_CM(self, img, g_list, isl, src_index): """ Bundle errors with the quantities. ngau = number of gaussians in island src_id = the source index array for every gaussian in island nsrc = final number of distinct sources in the island """ ngau = len(g_list) # same as cisl in callgaul2srl.f nsrc = ngau # same as islct; initially make each gaussian as a source src_id = N.arange(nsrc) # same as islnum in callgaul2srl.f boxx, boxy = isl.bbox subn = boxx.stop-boxx.start; subm = boxy.stop-boxy.start delc = [boxx.start, boxy.start] subim = self.make_subim(subn, subm, g_list, delc) index = [(i,j) for i in range(ngau) for j in range(ngau) if j > i] for pair in index: same_island = self.in_same_island(pair, img, g_list, isl, subim, subn, subm, delc) if same_island: nsrc -= 1 mmax, mmin = max(src_id[pair[0]],src_id[pair[1]]), min(src_id[pair[0]],src_id[pair[1]]) arr = N.where(src_id == mmax)[0]; src_id[arr] = mmin # now reorder src_id so that it is contiguous for i in range(ngau): ind1 = N.where(src_id==i)[0] if len(ind1) == 0: arr = N.where(src_id > i)[0] if len(arr) > 0: decr = N.min(src_id[arr])-i for j in arr: src_id[j] -= decr nsrc = N.max(src_id)+1 # now do whats in sub_calc_para_source source_list = [] for isrc in range(nsrc): posn = N.where(src_id == isrc)[0] g_sublist=[] for i in posn: g_sublist.append(g_list[i]) ngau_insrc = len(posn) # Do source type C if ngau_insrc == 1: src_index, source = self.process_single_gaussian(img, g_sublist, src_index, code = 'C') else: # make mask and subim. Invalid mask value is -1 since 0 is valid srcid mask = self.make_mask(isl, subn, subm, 1, isrc, g_sublist, delc) src_index, source = self.process_Multiple(img, g_sublist, mask, src_index, isrc, subim, \ isl, delc, subn, subm) source_list.append(source) return src_index, source_list ################################################################################################## def in_same_island(self, pair, img, g_list, isl, subim, subn, subm, delc): """ Whether two gaussians belong to the same source or not. """ from . import functions as func def same_island_min(pair, g_list, subim, delc, tol=0.5): """ If the difference between the lower peak and the minimum of the reconstructed fluxes along the line joining the peak positions is greater than thresh_isl times the rms_clip, they belong to different islands. """ g1 = g_list[pair[0]] g2 = g_list[pair[1]] pix1 = N.array(g1.centre_pix) pix2 = N.array(g2.centre_pix) x1, y1 = map(int, N.floor(pix1)-delc); x2, y2 = map(int, N.floor(pix2)-delc) pix1 = N.array(N.unravel_index(N.argmax(subim[x1:x1+2,y1:y1+2]), (2,2)))+[x1,y1] pix2 = N.array(N.unravel_index(N.argmax(subim[x2:x2+2,y2:y2+2]), (2,2)))+[x2,y2] if pix1[1] >= subn: pix1[1] = pix1[1]-1 if pix2[1] >= subm: pix2[1] = pix2[1]-1 pix1 = pix1.astype(float) #N.array(map(float, pix1)) pix2 = pix2.astype(float) #N.array(map(float, pix2)) maxline = int(round(N.max(N.abs(pix1-pix2)+1))) flux1 = g1.peak_flux flux2 = g2.peak_flux # get pix values of the line pixdif = pix2 - pix1 same_island_min = False same_island_cont = False if maxline == 1: same_island_min = True same_island_cont = True else: if abs(pixdif[0]) > abs(pixdif[1]): xline = N.round(min(pix1[0],pix2[0])+N.arange(maxline)) yline = N.round((pix1[1]-pix2[1])/(pix1[0]-pix2[0])* \ (min(pix1[0],pix2[0])+N.arange(maxline)-pix1[0])+pix1[1]) else: yline = N.round(min(pix1[1],pix2[1])+N.arange(maxline)) xline = N.round((pix1[0]-pix2[0])/(pix1[1]-pix2[1])* \ (min(pix1[1],pix2[1])+N.arange(maxline)-pix1[1])+pix1[0]) rpixval = N.zeros(maxline, dtype=N.float32) xbig = N.where(xline >= N.size(subim,0)) xline[xbig] = N.size(subim,0) - 1 ybig = N.where(yline >= N.size(subim,1)) yline[ybig] = N.size(subim,1) - 1 for i in range(maxline): pixval = subim[int(xline[i]), int(yline[i])] rpixval[i] = pixval min_pixval = N.min(rpixval) minind_p = N.argmin(rpixval) maxind_p = N.argmax(rpixval) if minind_p in (0, maxline-1) and maxind_p in (0, maxline-1): same_island_cont = True if min_pixval >= min(flux1, flux2): same_island_min = True elif abs(min_pixval-min(flux1,flux2)) <= tol*isl.rms*img.opts.thresh_isl: same_island_min = True return same_island_min, same_island_cont def same_island_dist(pair, g_list, tol=0.5): """ If the centres are seperated by a distance less than half the sum of their fwhms along the PA of the line joining them, they belong to the same island. """ from math import sqrt g1 = g_list[pair[0]] g2 = g_list[pair[1]] pix1 = N.array(g1.centre_pix) pix2 = N.array(g2.centre_pix) gsize1 = g1.size_pix gsize2 = g2.size_pix fwhm1 = func.gdist_pa(pix1, pix2, gsize1) fwhm2 = func.gdist_pa(pix1, pix2, gsize2) dx = pix2[0]-pix1[0]; dy = pix2[1]-pix1[1] dist = sqrt(dy*dy + dx*dx) if dist <= tol*(fwhm1+fwhm2): same_island = True else: same_island = False return same_island if img.opts.group_by_isl: same_isl1_min = True same_isl1_cont = True same_isl2 = True else: if img.opts.group_method == 'curvature': subim = -1.0 * func.make_curvature_map(subim) tol = img.opts.group_tol same_isl1_min, same_isl1_cont = same_island_min(pair, g_list, subim, delc, tol) same_isl2 = same_island_dist(pair, g_list, tol/2.0) g1 = g_list[pair[0]] same_island = (same_isl1_min and same_isl2) or same_isl1_cont return same_island ################################################################################################## def process_Multiple(self, img, g_sublist, mask, src_index, isrc, subim, isl, delc, subn, subm): """ Same as gaul_to_source.f. isrc is same as k in the fortran version. """ from math import pi, sqrt from .const import fwsig from scipy import ndimage from . import functions as func mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Gaul2Srl ") dum = img.beam[0]*img.beam[1] cdeltsq = img.wcs_obj.acdelt[0]*img.wcs_obj.acdelt[1] bmar_p = 2.0*pi*dum/(cdeltsq*fwsig*fwsig) # try subim_src = self.make_subim(subn, subm, g_sublist, delc) mompara = func.momanalmask_gaus(subim_src, mask, isrc, bmar_p, True) # initial peak posn and value maxv = N.max(subim_src) maxx, maxy = N.unravel_index(N.argmax(subim_src), subim_src.shape) # fit gaussian around this posn blc = N.zeros(2,dtype=N.int); trc = N.zeros(2,dtype=N.int) n, m = subim_src.shape[0:2] bm_pix = N.array([img.pixel_beam()[0]*fwsig, img.pixel_beam()[1]*fwsig, img.pixel_beam()[2]]) ssubimsize = max(N.int(N.round(N.max(bm_pix[0:2])*2))+1, 5) blc[0] = max(0, maxx-(ssubimsize-1)/2); blc[1] = max(0, maxy-(ssubimsize-1)/2) trc[0] = min(n, maxx+(ssubimsize-1)/2); trc[1] = min(m, maxy+(ssubimsize-1)/2) s_imsize = trc - blc + 1 p_ini = [maxv, (s_imsize[0]-1)/2.0*1.1, (s_imsize[1]-1)/2.0*1.1, bm_pix[0]/fwsig*1.3, \ bm_pix[1]/fwsig*1.1, bm_pix[2]*2] data = subim_src[blc[0]:blc[0]+s_imsize[0], blc[1]:blc[1]+s_imsize[1]] smask = mask[blc[0]:blc[0]+s_imsize[0], blc[1]:blc[1]+s_imsize[1]] rmask = N.where(smask==isrc, False, True) x_ax, y_ax = N.indices(data.shape) if N.sum(~rmask) >=6: para, ierr = func.fit_gaus2d(data, p_ini, x_ax, y_ax, rmask) if (0.0 2.0*mompara[1]: mompara1E = 2.0*mompara[1] # Don't let errors get too large mompara2E = N.std(mompara2_MC) if mompara2E > 2.0*mompara[2]: mompara2E = 2.0*mompara[2] # Don't let errors get too large mompara3E = N.std(mompara3_MC) if mompara3E > 2.0*mompara[3]: mompara3E = 2.0*mompara[3] # Don't let errors get too large mompara4E = N.std(mompara4_MC) if mompara4E > 2.0*mompara[4]: mompara4E = 2.0*mompara[4] # Don't let errors get too large mompara5E = N.std(mompara5_MC) if mompara5E > 2.0*mompara[5]: mompara5E = 2.0*mompara[5] # Don't let errors get too large else: mompara1E = 0.0 mompara2E = 0.0 mompara3E = 0.0 mompara4E = 0.0 mompara5E = 0.0 # Now add MC errors in quadrature with Condon (1997) errors size_skyE = [sqrt(mompara3E**2 + errors[3]**2) * sqrt(cdeltsq), sqrt(mompara4E**2 + errors[4]**2) * sqrt(cdeltsq), sqrt(mompara5E**2 + errors[5]**2)] sraE, sdecE = (sqrt(mompara1E**2 + errors[1]**2) * sqrt(cdeltsq), sqrt(mompara2E**2 + errors[2]**2) * sqrt(cdeltsq)) deconv_size_skyE = size_skyE # set deconvolved errors to non-deconvolved ones # Find aperture flux if img.opts.aperture_posn == 'centroid': aper_pos = [mompara[1]+delc[0], mompara[2]+delc[1]] else: aper_pos = posn aper_flux, aper_fluxE = func.ch0_aperture_flux(img, aper_pos, img.aperture) isl_id = isl.island_id source_prop = list(['M', [tot, totE], [s_peak, isl.rms], [maxpeak, isl.rms], [aper_flux, aper_fluxE], [[sra, sdec], [sraE, sdecE]], [[mra, mdec], [sraE, sdecE]], [size_sky, size_skyE], [size_sky_uncorr, size_skyE], [deconv_size_sky, deconv_size_skyE], [deconv_size_sky_uncorr, deconv_size_skyE], isl.bbox, len(g_sublist), isl_id, g_sublist]) source = Source(img, source_prop) src_index += 1 for g in g_sublist: g.source_id = src_index g.code = 'M' source.source_id = src_index return src_index, source ################################################################################################## def make_subim(self, subn, subm, g_list, delc, mc=False): from . import functions as func subim = N.zeros((subn, subm), dtype=N.float32) x, y = N.indices((subn, subm)) for g in g_list: params = func.g2param(g) params[1] -= delc[0]; params[2] -= delc[1] if mc: # draw random variables from distributions given by errors params_err = func.g2param_err(g) for i in range(len(params)): mc_param = N.random.normal(loc=params[i], scale=params_err[i]) params[i] = mc_param gau = func.gaus_2d(params, x, y) subim = subim + gau return subim ################################################################################################## def make_mask(self, isl, subn, subm, nsrc, src_id, g_list, delc): from . import functions as func # define stuff for calculating gaussian boxx, boxy = isl.bbox subn = boxx.stop-boxx.start; subm = boxy.stop-boxy.start x, y = N.indices((subn, subm)) # construct image of each source in the island src_image = N.zeros((subn, subm, nsrc), dtype=N.float32) nn = 1 for isrc in range(nsrc): if nsrc == 1: g_sublist = g_list else: posn = N.where(src_id == isrc)[0] g_sublist=[] for i in posn: g_sublist.append(g_list[i]) for g in g_sublist: params = func.g2param(g) params[1] -= delc[0]; params[2] -= delc[1] gau = func.gaus_2d(params, x, y) src_image[:,:,isrc] = src_image[:,:,isrc] + gau # mark each pixel as belonging to one source # just compare value, should compare with sigma later mask = N.argmax(src_image, axis=2) + src_id orig_mask = isl.mask_active mask[N.where(orig_mask)] = -1 return mask ################################################################################################## # Define class Source ################################################################################################## from .image import * class Source(object): """ Instances of this class store sources made from grouped gaussians. """ def __init__(self, img, sourceprop): # Add attribute definitions needed for output self.source_id_def = Int(doc="Source index", colname='Source_id') self.code_def = String(doc='Source code S, C, or M', colname='S_Code') self.total_flux_def = Float(doc="Total flux density (Jy)", colname='Total_flux', units='Jy') self.total_fluxE_def = Float(doc="Error in total flux density (Jy)", colname='E_Total_flux', units='Jy') self.peak_flux_centroid_def = Float(doc="Peak flux density per beam at centroid of emission (Jy/beam)", colname='Peak_flux_cen', units='Jy/beam') self.peak_flux_centroidE_def = Float(doc="Error in peak flux density per beam at centroid of emission (Jy/beam)", colname='E_Peak_flux_cen', units='Jy/beam') self.peak_flux_max_def = Float(doc="Peak flux density per beam at posn of maximum emission (Jy/beam)", colname='Peak_flux', units='Jy/beam') self.peak_flux_maxE_def = Float(doc="Error in peak flux density per beam at posn of max emission (Jy/beam)", colname='E_Peak_flux', units='Jy/beam') self.aperture_flux_def = Float(doc="Total aperture flux density (Jy)", colname='Aperture_flux', units='Jy') self.aperture_fluxE_def = Float(doc="Error in total aperture flux density (Jy)", colname='E_Aperture_flux', units='Jy') self.posn_sky_centroid_def = List(Float(), doc="Posn (RA, Dec in deg) of centroid of source", colname=['RA', 'DEC'], units=['deg', 'deg']) self.posn_sky_centroidE_def = List(Float(), doc="Error in posn (RA, Dec in deg) of centroid of source", colname=['E_RA', 'E_DEC'], units=['deg', 'deg']) self.posn_sky_max_def = List(Float(), doc="Posn (RA, Dec in deg) of maximum emission of source", colname=['RA_max', 'DEC_max'], units=['deg', 'deg']) self.posn_sky_maxE_def = List(Float(), doc="Error in posn (deg) of maximum emission of source", colname=['E_RA_max', 'E_DEC_max'], units=['deg', 'deg']) self.posn_pix_centroid_def = List(Float(), doc="Position (x, y in pixels) of centroid of source", colname=['Xposn', 'Yposn'], units=['pix', 'pix']) self.posn_pix_centroidE_def = List(Float(), doc="Error in position (x, y in pixels) of centroid of source", colname=['E_Xposn', 'E_Yposn'], units=['pix', 'pix']) self.posn_pix_max_def = List(Float(), doc="Position (x, y in pixels) of maximum emission of source", colname=['Xposn_max', 'Yposn_max'], units=['pix', 'pix']) self.posn_pix_maxE_def = List(Float(), doc="Error in position (pixels) of maximum emission of source", colname=['E_Xposn_max', 'E_Yposn_max'], units=['pix', 'pix']) self.size_sky_def = List(Float(), doc="Shape of the source FWHM, BPA, deg", colname=['Maj', 'Min', 'PA'], units=['deg', 'deg', 'deg']) self.size_skyE_def = List(Float(), doc="Error on shape of the source FWHM, BPA, deg", colname=['E_Maj', 'E_Min', 'E_PA'], units=['deg', 'deg', 'deg']) self.deconv_size_sky_def = List(Float(), doc="Deconvolved shape of the source FWHM, BPA, deg", colname=['DC_Maj', 'DC_Min', 'DC_PA'], units=['deg', 'deg', 'deg']) self.deconv_size_skyE_def = List(Float(), doc="Error on deconvolved shape of the source FWHM, BPA, deg", colname=['E_DC_Maj', 'E_DC_Min', 'E_DC_PA'], units=['deg', 'deg', 'deg']) self.size_sky_uncorr_def = List(Float(), doc="Shape in image plane of the gaussian FWHM, PA, deg", colname=['Maj_img_plane', 'Min_img_plane', 'PA_img_plane'], units=['deg', 'deg', 'deg']) self.size_skyE_uncorr_def = List(Float(), doc="Error on shape in image plane of the gaussian FWHM, PA, deg", colname=['E_Maj_img_plane', 'E_Min_img_plane', 'E_PA_img_plane'], units=['deg', 'deg', 'deg']) self.deconv_size_sky_uncorr_def = List(Float(), doc="Deconvolved shape in image plane of the gaussian FWHM, PA, deg", colname=['DC_Maj_img_plane', 'DC_Min_img_plane', 'DC_PA_img_plane'], units=['deg', 'deg', 'deg']) self.deconv_size_skyE_uncorr_def = List(Float(), doc="Error on deconvolved shape in image plane of the gaussian FWHM, PA, deg", colname=['E_DC_Maj_img_plane', 'E_DC_Min_img_plane', 'E_DC_PA_img_plane'], units=['deg', 'deg', 'deg']) self.rms_isl_def = Float(doc="Island rms Jy/beam", colname='Isl_rms', units='Jy/beam') self.mean_isl_def = Float(doc="Island mean Jy/beam", colname='Isl_mean', units='Jy/beam') self.total_flux_isl_def = Float(doc="Island total flux from sum of pixels", colname='Isl_Total_flux', units='Jy') self.total_flux_islE_def = Float(doc="Error on island total flux from sum of pixels", colname='E_Isl_Total_flux', units='Jy') self.gresid_rms_def = Float(doc="Island rms in Gaussian residual image Jy/beam", colname='Resid_Isl_rms', units='Jy/beam') self.gresid_mean_def = Float(doc="Island mean in Gaussian residual image Jy/beam", colname='Resid_Isl_mean', units='Jy/beam') self.sresid_rms_def = Float(doc="Island rms in Shapelet residual image Jy/beam", colname='Resid_Isl_rms', units='Jy/beam') self.sresid_mean_def = Float(doc="Island mean in Shapelet residual image Jy/beam", colname='Resid_Isl_mean', units='Jy/beam') self.ngaus_def = Int(doc='Number of gaussians in the source', colname='N_gaus') self.island_id_def = Int(doc="Serial number of the island", colname='Isl_id') self.bbox_def = List(Instance(slice(0), or_none=False), doc = "") self.spec_indx_def = Float(doc = "Spectral index", colname='Spec_Indx', units=None) self.e_spec_indx_def = Float(doc = "Error in spectral index", colname='E_Spec_Indx', units=None) self.specin_flux_def = List(Float(), doc = "Total flux density, Jy", colname=['Total_flux'], units=['Jy']) self.specin_fluxE_def = List(Float(), doc = "Error in total flux density per channel, Jy", colname=['E_Total_flux'], units=['Jy']) self.specin_freq_def = List(Float(), doc = "Frequency per channel, Hz", colname=['Freq'], units=['Hz']) code, total_flux, peak_flux_centroid, peak_flux_max, aper_flux, posn_sky_centroid, \ posn_sky_max, size_sky, size_sky_uncorr, deconv_size_sky, \ deconv_size_sky_uncorr, bbox, ngaus, island_id, gaussians = sourceprop self.code = code self.total_flux, self.total_fluxE = total_flux self.peak_flux_centroid, self.peak_flux_centroidE = peak_flux_centroid self.peak_flux_max, self.peak_flux_maxE = peak_flux_max self.posn_sky_centroid, self.posn_sky_centroidE = posn_sky_centroid self.posn_sky_max, self.posn_sky_maxE = posn_sky_max self.size_sky, self.size_skyE = size_sky self.size_sky_uncorr, self.size_skyE_uncorr = size_sky_uncorr self.deconv_size_sky, self.deconv_size_skyE = deconv_size_sky self.deconv_size_sky_uncorr, self.deconv_size_skyE_uncorr = deconv_size_sky_uncorr self.bbox = bbox self.ngaus = ngaus self.island_id = island_id self.gaussians = gaussians self.rms_isl = img.islands[island_id].rms self.mean_isl = img.islands[island_id].mean self.total_flux_isl = img.islands[island_id].total_flux self.total_flux_islE = img.islands[island_id].total_fluxE self.mean_isl = img.islands[island_id].mean self.jlevel = img.j self.aperture_flux, self.aperture_fluxE = aper_flux PyBDSF-1.10.1/bdsf/gausfit.py000066400000000000000000001354001420247104600155560ustar00rootroot00000000000000"""Module gausfit. This module does multi-gaussian fits for all detected islands. At the moment fitting algorithm is quite simple -- we just add gaussians one-by-one as long as there are pixels with emission in the image, and do post-fitting flagging of the extracted gaussians. The fitting itself is implemented by the means of MGFunction class and a number of fitter routines in _cbdsm module. MGFunction class implements multi-gaussian function and provides all functionality required by the specific fitters. """ from __future__ import print_function from __future__ import absolute_import from .image import * from copy import deepcopy as cp from . import mylogger import sys import time from . import statusbar from . import _cbdsm from . import has_pl if has_pl: import matplotlib.pyplot as pl import scipy.ndimage as nd from . import multi_proc as mp import itertools try: from itertools import izip as zip except ImportError: # will be 3.x series pass class Op_gausfit(Op): """Fit a number of 2D gaussians to each island. The results of the fitting are stored in the Island structure itself as a list of Gaussian objects (gaul) and a list of flagged gaussians (fgaul). Prerequisites: module islands should be run first. """ def __call__(self, img): from time import time from . import functions as func mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Gausfit") if len(img.islands) == 0: img.gaussians = [] img.ngaus = 0 img.total_flux_gaus = 0.0 img.completed_Ops.append('gausfit') return img bar = statusbar.StatusBar('Fitting islands with Gaussians .......... : ', 0, img.nisl) opts = img.opts if opts.quiet == False and opts.verbose_fitting == False: bar.start() iter_ngmax = 10 min_maxsize = 50.0 maxsize = opts.splitisl_maxsize min_peak_size = 30.0 peak_size = opts.peak_maxsize if maxsize < min_maxsize: maxsize = min_maxsize opts.splitisl_maxsize = min_maxsize if peak_size < min_peak_size: peak_size = min_peak_size opts.peak_maxsize = min_peak_size # Set up multiproccessing. First create a simple copy of the Image # object that contains the minimal data needed. opts_dict = opts.to_dict() img_simple = Image(opts_dict) img_simple.pixel_beamarea = img.pixel_beamarea img_simple.pixel_beam = img.pixel_beam img_simple.thresh_pix = img.thresh_pix img_simple.minpix_isl = img.minpix_isl img_simple.clipped_mean = img.clipped_mean img_simple.beam2pix = img.beam2pix img_simple.beam = img.beam # Next, define the weights to use when distributing islands among cores. # The weight should scale with the processing time. At the moment # we use the island area, but other parameters may be better. weights = [] for isl in img.islands: weights.append(isl.size_active) # Now call the parallel mapping function. Returns a list of # [gaul, fgaul] for each island. If ncores is 1, use the # standard Python map function -- this helps with debugging in # some circumstances if opts.ncores==1: gaus_list = map(func.eval_func_tuple, zip(itertools.repeat(self.process_island), img.islands, itertools.repeat(img_simple), itertools.repeat(opts))) else: gaus_list = mp.parallel_map(func.eval_func_tuple, zip(itertools.repeat(self.process_island), img.islands, itertools.repeat(img_simple), itertools.repeat(opts)), numcores=opts.ncores, bar=bar, weights=weights) gaus_list = list(gaus_list) for isl in img.islands: ### now convert gaussians into Gaussian objects and store idx = isl.island_id gaul = gaus_list[idx][0] fgaul = gaus_list[idx][1] dgaul = [] if len(gaul) > 0: gidx = gaul[-1][0] # save last index value for use with fgaul below else: gidx = 0 gaul = [Gaussian(img, par, idx, gidx) for (gidx, par) in enumerate(gaul)] if len(gaul) == 0: # No good Gaussians were fit. In this case, make a dummy # Gaussian located at the island center so # that the source may still be included in output catalogs. # These dummy Gaussians all have an ID of -1. They do not # appear in any of the source or island Gaussian lists except # the island dgaul list. if opts.src_ra_dec is not None: # Center the dummy Gaussian on the user-specified source position posn_isl = (int(isl.shape[0]/2.0), int(isl.shape[1]/2.0)) posn_img = (int(isl.shape[0]/2.0 + isl.origin[0]), int(isl.shape[1]/2.0 + isl.origin[1])) par = [isl.image[posn_isl], posn_img[0], posn_img[1], 0.0, 0.0, 0.0] else: # Center the dummy Gaussian on the maximum pixel posn = N.unravel_index(N.argmax(isl.image*~isl.mask_active), isl.shape) + N.array(isl.origin) par = [isl.max_value, posn[0], posn[1], 0.0, 0.0, 0.0] dgaul = [Gaussian(img, par, idx, -1)] # Now make the list of flagged Gaussians, if any fgaul= [Gaussian(img, par, idx, gidx + gidx2 + 1, flag) for (gidx2, (flag, par)) in enumerate(fgaul)] isl.gaul = gaul isl.fgaul= fgaul isl.dgaul = dgaul gaussian_list = [g for isl in img.islands for g in isl.gaul] img.gaussians = gaussian_list ### put in the serial number of the gaussians for the whole image n = 0 nn = 0 tot_flux = 0.0 if img.waveletimage: # store the wavelet scale for each Gaussian # (wavelet img's have a img.j attribute) j = img.j else: j = 0 for isl in img.islands: m = 0 for g in isl.gaul: n += 1; m += 1 g.gaus_num = n - 1 tot_flux += g.total_flux for dg in isl.dgaul: nn -= 1 dg.gaus_num = nn isl.ngaus = m img.ngaus = n img.total_flux_gaus = tot_flux mylogger.userinfo(mylog, "Total number of Gaussians fit to image", str(n)) if not img._pi and not img.waveletimage: mylogger.userinfo(mylog, "Total flux density in model", '%.3f Jy' % tot_flux) # Check if model flux is very different from sum of flux in image if img.ch0_sum_jy > 0 and not img._pi: if img.total_flux_gaus/img.ch0_sum_jy < 0.5 or \ img.total_flux_gaus/img.ch0_sum_jy > 2.0: mylog.warn('Total flux density in model is %0.2f times sum of pixels '\ 'in input image. Large residuals may remain.' % (img.total_flux_gaus/img.ch0_sum_jy,)) # Check if there are many Gaussians with deconvolved size of 0 in one # axis but not in the other. Don't bother to do this for wavelet images. fraction_1d = self.check_for_1d_gaussians(img) if fraction_1d > 0.5 and img.beam is not None and img.waveletimage == False: mylog.warn('After deconvolution, more than 50% of Gaussians are '\ "1-D. Unless you're fitting an extended source, "\ "beam may be incorrect.") img.completed_Ops.append('gausfit') return img def process_island(self, isl, img, opts=None): """Processes a single island. Returns a list of the best-fit Gaussians and flagged Gaussians. """ from . import functions as func if opts is None: opts = img.opts iter_ngmax = 10 maxsize = opts.splitisl_maxsize min_peak_size = 30.0 min_maxsize = 50.0 peak_size = opts.peak_maxsize if maxsize < min_maxsize: maxsize = min_maxsize opts.splitisl_maxsize = min_maxsize if peak_size < min_peak_size: peak_size = min_peak_size opts.peak_maxsize = min_peak_size size = isl.size_active/img.pixel_beamarea()*2.0 # 2.0 roughly corrects for thresh_isl if opts.verbose_fitting: print("Fitting isl #", isl.island_id, '; # pix = ',N.sum(~isl.mask_active),'; size = ',size) if size > maxsize: tosplit = func.isl_tosplit(isl, opts) if opts.split_isl and tosplit[0] > 0: n_subisl, sub_labels = tosplit[1], tosplit[2] gaul = []; fgaul = [] if opts.verbose_fitting: print('SPLITTING ISLAND INTO ',n_subisl,' PARTS FOR ISLAND ',isl.island_id) for i_sub in range(n_subisl): islcp = isl.copy(img.pixel_beamarea()) islcp.mask_active = N.where(sub_labels == i_sub+1, False, True) islcp.mask_noisy = N.where(sub_labels == i_sub+1, False, True) size_subisl = (~islcp.mask_active).sum()/img.pixel_beamarea()*2.0 if opts.peak_fit and size_subisl > peak_size: sgaul, sfgaul = self.fit_island_iteratively(img, islcp, iter_ngmax=iter_ngmax, opts=opts) else: sgaul, sfgaul = self.fit_island(islcp, opts, img) gaul = gaul + sgaul; fgaul = fgaul + sfgaul else: isl.islmean = 0.0 if opts.peak_fit and size > peak_size: gaul, fgaul = self.fit_island_iteratively(img, isl, iter_ngmax=iter_ngmax, opts=opts) else: gaul, fgaul = self.fit_island(isl, opts, img) else: if opts.peak_fit and size > peak_size: gaul, fgaul = self.fit_island_iteratively(img, isl, iter_ngmax=iter_ngmax, opts=opts) else: gaul, fgaul = self.fit_island(isl, opts, img) # Return list of Gaussians return [gaul, fgaul] def fit_island(self, isl, opts, img, ngmax=None, ffimg=None, ini_gausfit=None): """Fit island with a set of 2D gaussians. Parameters: isl: island opts: Opts structure of the image beam: beam parameters which are used as an initial guess for gaussian shape Returns: Function returns 2 lists with parameters of good and flagged gaussians. Gaussian parameters are updated to be image-relative. Note: "fitok" indicates whether fit converged and one or more flagged Gaussians indicate that significant residuals remain (peak > thr). """ from ._cbdsm import MGFunction from . import functions as func from .const import fwsig verbose = opts.verbose_fitting if verbose: print('Entering fit_island in verbose mode') if ffimg is None: fit_image = isl.image-isl.islmean else: fit_image = isl.image-isl.islmean-ffimg fcn = MGFunction(fit_image, isl.mask_active, 1) # For fitting, use img.beam instead of img.pixel_beam, as we want # to pick up the wavelet beam (img.pixel_beam is not changed for # wavelet images, but img.beam is) beam = N.array(img.beam2pix(img.beam)) beam = (beam[0]/fwsig, beam[1]/fwsig, beam[2]+90.0) # change angle from +y-axis to +x-axis and FWHM to sigma if abs(beam[0]/beam[1]) < 1.1: beam = (1.1*beam[0], beam[1], beam[2]) thr1 = isl.mean + opts.thresh_isl*isl.rms thr2 = isl.mean + img.thresh_pix*isl.rms thr0 = thr1 g3_only = opts.fix_to_beam peak = fcn.find_peak()[0] dof = isl.size_active shape = isl.shape isl_image = isl.image - isl.islmean size = isl.size_active/img.pixel_beamarea()*2.0 gaul = [] iter = 0 ng1 = 0 if ini_gausfit is None: ini_gausfit = opts.ini_gausfit if ini_gausfit not in ['default', 'simple', 'nobeam']: ini_gausfit = 'default' if ini_gausfit == 'simple' and ngmax is None: ngmax = 25 if ini_gausfit == 'default' or opts.fix_to_beam: gaul, ng1, ngmax = self.inigaus_fbdsm(isl, thr0, beam, img) if len(gaul)>25: ini_gausfit = 'simple' gaul=[] ng1=0 ngmax=25 if ini_gausfit == 'nobeam' and not opts.fix_to_beam: gaul = self.inigaus_nobeam(isl, thr0, beam, img) ng1 = len(gaul); ngmax = ng1+2 if verbose: print('Initializing, ini_gausfit is',ini_gausfit,'gaul =',gaul,'ngmax =',ngmax) while iter < 5: iter += 1 if verbose: print('In Gaussian flag loop, iter =',iter) fitok = self.fit_iter(gaul, ng1, fcn, dof, beam, thr0, iter, ini_gausfit, ngmax, verbose, g3_only) if verbose: print('Calling flag_gaussians') gaul, fgaul = self.flag_gaussians(fcn.parameters, opts, beam, thr0, peak, shape, isl.mask_active, isl.image, size) if verbose: print('Leaving flag_gaussians') ng1 = len(gaul) if fitok and len(fgaul) == 0: break if (not fitok or len(gaul) == 0) and ini_gausfit != 'simple': if verbose: print('Using simple method instead') # If fits using default or nobeam methods did not work, # try using simple instead gaul = [] iter = 0 ng1 = 0 ngmax = 25 while iter < 5: iter += 1 fitok = self.fit_iter(gaul, ng1, fcn, dof, beam, thr0, iter, 'simple', ngmax, verbose, g3_only) gaul, fgaul = self.flag_gaussians(fcn.parameters, opts, beam, thr0, peak, shape, isl.mask_active, isl.image, size) ng1 = len(gaul) if fitok and len(fgaul) == 0: break sm_isl = nd.binary_dilation(isl.mask_active) if (not fitok or len(gaul) == 0) and N.sum(~sm_isl) >= img.minpix_isl: if verbose: print('Fit still not OK, shrinking') # If fitting still fails, shrink the island a little and try again fcn = MGFunction(fit_image, nd.binary_dilation(isl.mask_active), 1) gaul = [] iter = 0 ng1 = 0 ngmax = 25 while iter < 5: iter += 1 fitok = self.fit_iter(gaul, ng1, fcn, dof, beam, thr0, iter, 'simple', ngmax, verbose, g3_only) gaul, fgaul = self.flag_gaussians(fcn.parameters, opts, beam, thr0, peak, shape, isl.mask_active, isl.image, size) ng1 = len(gaul) if fitok and len(fgaul) == 0: break lg_isl = nd.binary_erosion(isl.mask_active) if (not fitok or len(gaul) == 0) and N.sum(~lg_isl) >= img.minpix_isl: if verbose: print('Fit still not OK, expanding') # If fitting still fails, expand the island a little and try again fcn = MGFunction(fit_image, nd.binary_erosion(isl.mask_active), 1) gaul = [] iter = 0 ng1 = 0 ngmax = 25 while iter < 5: iter += 1 fitok = self.fit_iter(gaul, ng1, fcn, dof, beam, thr0, iter, 'simple', ngmax, verbose, g3_only) gaul, fgaul = self.flag_gaussians(fcn.parameters, opts, beam, thr0, peak, shape, isl.mask_active, isl.image, size) ng1 = len(gaul) if fitok and len(fgaul) == 0: break if not fitok or len(gaul) == 0: # If all else fails, try to use moment analysis if verbose: print('All else has failed') inisl = N.where(~isl.mask_active) mask_id = N.zeros(isl.image.shape, dtype=N.int32) - 1 mask_id[inisl] = isl.island_id try: pixel_beamarea = img.pixel_beamarea() mompara = func.momanalmask_gaus(fit_image, mask_id, isl.island_id, pixel_beamarea, True) mompara[5] += 90.0 if not N.isnan(mompara[1]) and not N.isnan(mompara[2]): x1 = N.int(N.floor(mompara[1])) y1 = N.int(N.floor(mompara[2])) xind = slice(x1, x1+2, 1); yind = slice(y1, y1+2, 1) t=(mompara[1]-x1)/(x1+1-x1) u=(mompara[2]-y1)/(y1+1-y1) s_peak=(1.0-t)*(1.0-u)*fit_image[x1,y1]+t*(1.0-u)*fit_image[x1+1,y1]+ \ t*u*fit_image[x1+1,y1+1]+(1.0-t)*u*fit_image[x1,y1+1] mompara[0] = s_peak par = [mompara.tolist()] par[3] /= fwsig par[4] /= fwsig gaul, fgaul = self.flag_gaussians(par, opts, beam, thr0, peak, shape, isl.mask_active, isl.image, size) except: pass ### return whatever we got if verbose: print('Preparing to return') isl.mg_fcn = fcn gaul = [self.fixup_gaussian(isl, g) for g in gaul] fgaul = [(flag, self.fixup_gaussian(isl, g)) for flag, g in fgaul] if verbose: print('Number of good Gaussians: %i' % (len(gaul),)) print('Number of flagged Gaussians: %i' % (len(fgaul),)) return gaul, fgaul def fit_island_iteratively(self, img, isl, iter_ngmax=5, opts=None): """Fits an island iteratively. For large islands, which can require many Gaussians to fit well, it is much faster to fit a small number of Gaussians simultaneously and iterate. However, this does usually result in larger residuals. """ from . import functions as func sgaul = []; sfgaul = [] gaul = []; fgaul = [] if opts is None: opts = img.opts thresh_isl = opts.thresh_isl thresh_pix = opts.thresh_pix thresh = opts.fittedimage_clip thr = isl.mean + thresh_isl * isl.rms rms = isl.rms if opts.verbose_fitting: print('Iteratively fitting island ', isl.island_id) gaul = []; fgaul = [] ffimg_tot = N.zeros(isl.shape, dtype=N.float32) peak_val = N.max(isl.image - isl.islmean) count = 0 while peak_val >= thr: count += 1 if opts.verbose_fitting: print('Iteration %i' % count) sgaul, sfgaul = self.fit_island(isl, opts, img, ffimg=ffimg_tot, ngmax=iter_ngmax, ini_gausfit='simple') gaul = gaul + sgaul; fgaul = fgaul + sfgaul # Calculate residual image if len(sgaul) > 0: for g in sgaul: gcopy = g[:] gcopy[1] -= isl.origin[0] gcopy[2] -= isl.origin[1] S1, S2, Th = func.corrected_size(gcopy[3:6]) gcopy[3] = S1 gcopy[4] = S2 gcopy[5] = Th A, C1, C2, S1, S2, Th = gcopy shape = isl.shape b = find_bbox(thresh*isl.rms, gcopy) bbox = N.s_[max(0, int(C1-b)):min(shape[0], int(C1+b+1)), max(0, int(C2-b)):min(shape[1], int(C2+b+1))] x_ax, y_ax = N.mgrid[bbox] ffimg = func.gaussian_fcn(gcopy, x_ax, y_ax) ffimg_tot[bbox] += ffimg peak_val_prev = peak_val peak_val = N.max(isl.image - isl.islmean - ffimg_tot) if func.approx_equal(peak_val, peak_val_prev): break else: break if len(gaul) == 0: if opts.verbose_fitting: # Fitting iteratively did not work -- try normal fit print('Iterative fitting failed for', isl.island_id) gaul, fgaul = self.fit_island(isl, opts, img, ini_gausfit='default') else: if opts.verbose_fitting: print('Iterative fitting succeeded for', isl.island_id) return gaul, fgaul def inigaus_fbdsm(self, isl, thr, beam, img): """ initial guess for gaussians like in fbdsm """ from math import sqrt from .const import fwsig from . import functions as func im = isl.image-isl.islmean if img.opts.ini_method == 'curvature': im_pos = -1.0 * func.make_curvature_map(isl.image-isl.islmean) thr_pos = 0.0 else: im_pos = im thr_pos = thr mask = isl.mask_active av = img.clipped_mean inipeak, iniposn, im1 = func.get_maxima(im, mask, thr_pos, isl.shape, beam, im_pos=im_pos) if len(inipeak) == 0: av, stdnew, maxv, maxp, minv, minp = func.arrstatmask(im, mask) inipeak = [maxv]; iniposn = [maxp] nmulsrc1 = len(iniposn) domore = True while domore: domore = False av, stdnew, maxv, maxp, minv, minp = func.arrstatmask(im1, mask) if stdnew > isl.rms and maxv >= thr and maxv >= isl.mean+2.0*isl.rms: domore = True x1, y1 = N.array(iniposn).transpose() dumr = N.sqrt((maxp[0]-x1)*(maxp[0]-x1)+(maxp[1]-y1)*(maxp[1]-y1)) distbm = dumr/sqrt(beam[0]*beam[1]*fwsig*fwsig) if N.any((distbm < 0.5) + (dumr < 2.2)): domore = False if domore: iniposn.append(N.array(maxp)); inipeak.append(maxv) im1 = func.mclean(im1, maxp, beam) inipeak = N.array(inipeak); iniposn = N.array(iniposn) ind = list(N.argsort(inipeak)); ind.reverse() inipeak = inipeak[ind] iniposn = iniposn[ind] gaul = [] for i in range(len(inipeak)): g = (float(inipeak[i]), int(iniposn[i][0]), int(iniposn[i][1])) + beam gaul.append(g) return gaul, nmulsrc1, len(inipeak) def inigaus_nobeam(self, isl, thr, beam, img): """ To get initial guesses when the source sizes are very different from the beam, and can also be elongated. Mainly in the context of a-trous transform images. Need to arrive at a good guess of the sizes and hence need to partition the image around the maxima first. Tried the IFT watershed algo but with markers, it segments the island only around the minima and not the whole island. Cant find a good weighting scheme for tesselation either. Hence will try this : Calculate number of maxima. If one, then take moment as initial guess. If more than one, then moment of whole island is one of the guesses if mom1 is within n pixels of one of the maxima. Else dont take whole island moment. Instead, find minima on lines connecting all maxima and use geometric mean of all minima of a peak as the size of that peak. """ from math import sqrt from .const import fwsig import scipy.ndimage as nd from . import functions as func im = isl.image-isl.islmean if img.opts.ini_method == 'curvature': im_pos = -1.0 * func.make_curvature_map(isl.image-isl.islmean) thr_pos = 0.0 else: im_pos = im thr_pos = -1e9 mask = isl.mask_active av = img.clipped_mean inipeak, iniposn, im1 = func.get_maxima(im, mask, thr_pos, isl.shape, beam, im_pos=im_pos) npeak = len(iniposn) gaul = [] av, stdnew, maxv, maxp, minv, minp = func.arrstatmask(im, mask) mom = func.momanalmask_gaus(isl.image-isl.islmean, isl.mask_active, 0, 1.0, True) if npeak <= 1: g = (float(maxv), int(round(mom[1])), int(round(mom[2])), mom[3]/fwsig, \ mom[4]/fwsig, mom[5]) gaul.append(g) if npeak > 1: # markers start from 1=background, watershed starts from 1=background watershed, markers = func.watershed(im, mask=isl.mask_active) nshed = N.max(markers)-1 # excluding background xm, ym = N.transpose([N.where(markers==i) for i in range(1,nshed+2)])[0] coords = [c for c in N.transpose([xm,ym])[1:]] alldists = [func.dist_2pt(c1, c2) for c1 in coords for c2 in coords if N.any(c1!=c2)] # has double meandist = N.mean(alldists) # mean dist between all pairs of markers # find at least some 'compact' sources cscale = 3.0 while True: compact = []; invmask = [] for ished in range(nshed): shedmask = N.where(watershed==ished+2, False, True) + isl.mask_active # good unmasked pixels = 0 imm = nd.binary_dilation(~shedmask, N.ones((3,3), int)) xbad, ybad = N.where((imm==1)*(im>im[xm[ished+1], ym[ished+1]])) imm[xbad, ybad] = 0 invmask.append(imm); x, y = N.where(imm); xcen, ycen = N.mean(x), N.mean(y) # good pixels are now = 1 dist = func.dist_2pt([xcen, ycen], [xm[ished+1], ym[ished+1]]) if dist < max(cscale, meandist/4.0): compact.append(True) # if not compact, break source + diffuse else: compact.append(False) if N.any(compact): break else: # rescale to search for more compact sources cscale*=1.5 if not N.all(compact): o_avsize = [] ind = N.where(compact)[0] for i in ind: o_avsize.append(N.sum(invmask[i])) avsize = sqrt(N.mean(N.array(o_avsize))) for i in range(len(compact)): if not compact[i]: # make them all compact newmask = N.zeros(imm.shape, bool) newmask[max(0,int(xm[i+1]-avsize/2)):min(im.shape[0],int(xm[i+1]+avsize/2)), \ max(0,int(ym[i+1]-avsize/2)):min(im.shape[1],int(ym[i+1]+avsize/2))] = True invmask[i] = invmask[i]*newmask resid = N.zeros(im.shape, dtype=N.float32) # approx fit all compact ones for i in range(nshed): mask1 = ~invmask[i] size = sqrt(N.sum(invmask))/fwsig xf, yf = coords[i][0], coords[i][1] p_ini = [im[xf, yf], xf, yf, size, size, 0.0] x, y = N.indices(im.shape) p, success = func.fit_gaus2d(im*invmask[i], p_ini, x, y) resid = resid + func.gaus_2d(p, x, y) gaul.append(p) resid = im - resid if not N.all(compact): # just add one gaussian to fit whole unmasked island maxv = N.max(resid) # assuming resid has only diffuse emission. can be false x, y = N.where(~isl.mask_active); xcen = N.mean(x); ycen = N.mean(y) invm = ~isl.mask_active #bound = invm - nd.grey_erosion(invm, footprint = N.ones((3,3), int)) # better to use bound for ellipse fitting mom = func.momanalmask_gaus(invm, N.zeros(invm.shape, dtype=N.int16), 0, 1.0, True) g = (maxv, xcen, ycen, mom[3]/fwsig, mom[4]/fwsig, mom[5]-90.) gaul.append(g) coords.append([xcen, ycen]) return gaul def fit_iter(self, gaul, ng1, fcn, dof, beam, thr, iter, inifit, ngmax, verbose=1, g3_only=False): """One round of fitting Parameters: gaul : list of initial gaussians fcn : MGFunction object dof : maximal number of fitted parameters beam : initial shape for newly added gaussians [bmaj, bmin, bpa] in pixels thr : peak threshold for adding more gaussians verbose: whether to print fitting progress information """ from ._cbdsm import lmder_fit, dn2g_fit, dnsg_fit if verbose: print('Greetings from fit_iter') fit = lmder_fit beam = list(beam) ### first drop-in initial gaussians ### no error-checking here, they MUST fit fcn.reset() for ig in range(ng1): g = gaul[ig] self.add_gaussian(fcn, g, dof, g3_only) ### do a round of fitting if any initials were provided if verbose: print('About to call C++ wrapper') fitok = True if len(gaul) != 0: fitok = fit(fcn, final=0, verbose=verbose) if verbose: print('Returned from the fit') ### iteratively add gaussians while there are high peaks ### in the image and fitting converges while fitok: peak, coords = fcn.find_peak() if peak < thr: ### no good peaks left break if len(fcn.parameters) < ngmax and iter == 1 and inifit == 'default' and len(gaul) >= ng1+1: ng1 = ng1 + 1 g = gaul[ng1-1] else: if len(fcn.parameters) < ngmax: g = [peak, coords[0], coords[1]] + beam else: break fitok &= self.add_gaussian(fcn, g, dof, g3_only) fitok &= fit(fcn, final=0, verbose=verbose) ### and one last fit with higher precision ### make sure we return False when fitok==False due to lack ### of free parameters fitok &= fit(fcn, final=1, verbose=verbose) return fitok def add_gaussian(self, fcn, parameters, dof, g3_only=False): """Try adding one more gaussian to fcn object. It's trying to reduce number of fitted parameters if there is not enough DoF left. Note: g1 fits amplitude only g3 fits amplitude and position g6 fits all parameters Parameters: fcn: MGFunction object parameters: initial values for gaussian parameters dof: total possible number of fitted parameters """ from ._cbdsm import Gtype if g3_only: gtype = (Gtype.g3 if fcn.fitted_parameters() + 3 <= dof else None) else: gtype = (Gtype.g3 if fcn.fitted_parameters() + 3 <= dof else None) gtype = (Gtype.g6 if fcn.fitted_parameters() + 6 <= dof else gtype) if gtype: fcn.add_gaussian(gtype, parameters) return True else: return False def flag_gaussians(self, gaul, opts, beam, thr, peak, shape, isl_mask, isl_image, size): """Flag gaussians according to some rules. Splits list of gaussian parameters in 2, where the first one is a list of parameters for accepted gaussians, and the second one is a list of pairs (flag, parameters) for flagged gaussians. Parameters: gaul: input list of gaussians opts: Opts object to extract flagging parameters from beam: beam shape thr: threshold for pixels with signal peak: peak data value in the current island shape: shape of the current island isl_mask: island mask """ good = [] bad = [] for g in gaul: flag = self._flag_gaussian(g, beam, thr, peak, shape, opts, isl_mask, isl_image, size) if flag: bad.append((flag, g)) else: good.append(g) return good, bad def _flag_gaussian(self, g, beam, thr, peak, shape, opts, mask, image, size_bms): """The actual flagging routine. See above for description. """ from math import sqrt, sin, cos, log, pi from .const import fwsig from . import functions as func import scipy.ndimage as nd A, x1, x2, s1, s2, th = g s1, s2 = map(abs, [s1, s2]) flag = 0 if N.any(N.isnan(g)) or s1 == 0.0 or s2 == 0.0: return -1 if s1 < s2: # s1 etc are sigma ss1 = s2 ss2 = s1 th1 = divmod(th+90.0, 180)[1] else: ss1 = s1 ss2 = s2 th1 = divmod(th, 180)[1] th1 = th1/180.0*pi if ss1 > 1e4 and ss2 > 1e4: xbox = 1e9; ybox = 1e9 else: xbox = 2.0*(abs(ss1*cos(th1)*cos(th1))+abs(ss2*ss2/ss1*sin(th1)*sin(th1)))/ \ sqrt(cos(th1)*cos(th1)+ss2*ss2/ss1/ss1*sin(th1)*sin(th1)) ybox = 2.0*(abs(ss1*sin(th1)*sin(th1))+abs(ss2*ss2/ss1*cos(th1)*cos(th1)))/ \ sqrt(sin(th1)*sin(th1)+ss2*ss2/ss1/ss1*cos(th1)*cos(th1)) ### now check all conditions border = opts.flag_bordersize x1ok = True x2ok = True flagmax = False if A < opts.flag_minsnr*thr: flag += 1 if A > opts.flag_maxsnr*peak: flag += 2 flagmax = True if x1 - border < 0 or x1 + border + 1 > shape[0]: flag += 4 x1ok = False if x2 - border < 0 or x2 + border + 1 > shape[1]: flag += 8 x2ok = False if x1ok and x2ok: if not flagmax: # Check image value at Gaussian center im_val_at_cen = nd.map_coordinates(image, [N.array([x1]), N.array([x2])]) if A > opts.flag_maxsnr*im_val_at_cen: flag += 2 borx1_1 = x1 - border if borx1_1 < 0: borx1_1 = 0 borx1_2 = x1 + border + 1 if borx1_2 > shape[0]: borx1_2 = shape[0] if N.any(mask[int(borx1_1):int(borx1_2), int(x2)]): flag += 4 borx2_1 = x2 - border if borx2_1 < 0: borx2_1 = 0 borx2_2 = x2 + border + 1 if borx2_2 > shape[1]: borx2_2 = shape[1] if N.any(mask[int(x1), int(borx2_1):int(borx2_2)]): flag += 8 if xbox > opts.flag_maxsize_isl*shape[0]: flag += 16 if ybox > opts.flag_maxsize_isl*shape[1]: flag += 32 if s1*s2 > opts.flag_maxsize_bm*beam[0]*beam[1]: flag += 64 if opts.flag_smallsrc: if s1*s2 < opts.flag_minsize_bm*beam[0]*beam[1]: flag += 128 if not opts.flag_smallsrc: if s1*s2 == 0.: flag += 128 if ss1/ss2 > 2.0: # Only check for fairly elliptical Gaussians, as this condition # is unreliable for more circular ones. ellx, elly = func.drawellipse([A, x1, x2, s1*opts.flag_maxsize_fwhm, s2*opts.flag_maxsize_fwhm, th]) pt1 = [N.min(ellx), elly[N.argmin(ellx)]] pt2 = [ellx[N.argmax(elly)], N.max(elly)] pt3 = [N.max(ellx), elly[N.argmax(ellx)]] pt4 = [ellx[N.argmin(elly)], N.min(elly)] extremes = [pt1, pt2, pt3, pt4] for pt in extremes: if N.any(N.isnan(pt)): flag += 256 break elif pt[0] < 0 or pt[0] >= shape[0] or pt[1] < 0 or pt[1] >= shape[1]: flag += 256 break elif mask[int(pt[0]),int(pt[1])]: flag += 256 break return flag def fixup_gaussian(self, isl, gaussian): """Normalize parameters by adjusting them to the proper image coordinates and ensuring that all of the implicit conventions (such as bmaj >= bmin) are met. """ np = list(gaussian) ### update to the image coordinates np[1] += isl.origin[0] np[2] += isl.origin[1] ### shape values should be positive np[3] = abs(np[3]) np[4] = abs(np[4]) ### first extent is major if np[3] < np[4]: np[3:5] = np[4:2:-1] np[5] += 90 ### clip position angle np[5] = divmod(np[5], 180)[1] return np def check_for_1d_gaussians(self, img): """Check for Gaussians with deconvolved sizes of 0 for one axis only.""" n1d = 0 ng = 0 for g in img.gaussians: ng += 1 dsize = g.deconv_size_sky if (dsize[0] == 0 and dsize[1] > 0) or (dsize[0] > 0 and dsize[1] == 0): n1d += 1 if ng > 0: return float(n1d)/float(ng) else: return 0.0 def find_bbox(thresh, g): """Calculate bounding box for gaussian. This function calculates size of the box for evaluating gaussian, so that value of gaussian is smaller than threshold outside of the box. Parameters: thres: threshold g: Gaussian object or list of paramters """ from math import ceil, sqrt, log if isinstance(g, list): A = g[0] S = g[3] else: A = g.peak_flux S = g.size_pix[0] if A == 0.0: return ceil(S*1.5) if thresh/A >= 1.0 or thresh/A <= 0.0: return ceil(S*1.5) return ceil(S*sqrt(-2*log(thresh/A))) from .image import * class Gaussian(object): """Instances of this class are used to store information about extracted gaussians in a structured way. """ def __init__(self, img, gaussian, isl_idx, g_idx, flg=0): """Initialize Gaussian object from fitting data Parameters: img: PyBDSM image object gaussian: 6-tuple of fitted numbers isl_idx: island serial number g_idx: gaussian serial number flg: flagging (if any) """ from . import functions as func from .const import fwsig import numpy as N # Add attribute definitions needed for output self.source_id_def = Int(doc="Source index", colname='Source_id') self.code_def = String(doc='Source code S, C, or M', colname='S_Code') self.gaus_num_def = Int(doc="Serial number of the gaussian for the image", colname='Gaus_id') self.island_id_def = Int(doc="Serial number of the island", colname='Isl_id') self.flag_def = Int(doc="Flag associated with gaussian", colname='Flag') self.total_flux_def = Float(doc="Total flux density, Jy", colname='Total_flux', units='Jy') self.total_fluxE_def = Float(doc="Total flux density error, Jy", colname='E_Total_flux', units='Jy') self.peak_flux_def = Float(doc="Peak flux density/beam, Jy/beam", colname='Peak_flux', units='Jy/beam') self.peak_fluxE_def = Float(doc="Peak flux density/beam error, Jy/beam", colname='E_Peak_flux', units='Jy/beam') self.centre_sky_def = List(Float(), doc="Sky coordinates of gaussian centre", colname=['RA', 'DEC'], units=['deg', 'deg']) self.centre_skyE_def = List(Float(), doc="Error on sky coordinates of gaussian centre", colname=['E_RA', 'E_DEC'], units=['deg', 'deg']) self.centre_pix_def = List(Float(), doc="Pixel coordinates of gaussian centre", colname=['Xposn', 'Yposn'], units=['pix', 'pix']) self.centre_pixE_def = List(Float(), doc="Error on pixel coordinates of gaussian centre", colname=['E_Xposn', 'E_Yposn'], units=['pix', 'pix']) self.size_sky_def = List(Float(), doc="Shape of the gaussian FWHM, PA, deg", colname=['Maj', 'Min', 'PA'], units=['deg', 'deg', 'deg']) self.size_skyE_def = List(Float(), doc="Error on shape of the gaussian FWHM, PA, deg", colname=['E_Maj', 'E_Min', 'E_PA'], units=['deg', 'deg', 'deg']) self.deconv_size_sky_def = List(Float(), doc="Deconvolved shape of the gaussian FWHM, PA, deg", colname=['DC_Maj', 'DC_Min', 'DC_PA'], units=['deg', 'deg', 'deg']) self.deconv_size_skyE_def = List(Float(), doc="Error on deconvolved shape of the gaussian FWHM, PA, deg", colname=['E_DC_Maj', 'E_DC_Min', 'E_DC_PA'], units=['deg', 'deg', 'deg']) self.size_sky_uncorr_def = List(Float(), doc="Shape in image plane of the gaussian FWHM, PA, deg", colname=['Maj_img_plane', 'Min_img_plane', 'PA_img_plane'], units=['deg', 'deg', 'deg']) self.size_skyE_uncorr_def = List(Float(), doc="Error on shape in image plane of the gaussian FWHM, PA, deg", colname=['E_Maj_img_plane', 'E_Min_img_plane', 'E_PA_img_plane'], units=['deg', 'deg', 'deg']) self.deconv_size_sky_uncorr_def = List(Float(), doc="Deconvolved shape in image plane of the gaussian FWHM, PA, deg", colname=['DC_Maj_img_plane', 'DC_Min_img_plane', 'DC_PA_img_plane'], units=['deg', 'deg', 'deg']) self.deconv_size_skyE_uncorr_def = List(Float(), doc="Error on deconvolved shape in image plane of the gaussian FWHM, PA, deg", colname=['E_DC_Maj_img_plane', 'E_DC_Min_img_plane', 'E_DC_PA_img_plane'], units=['deg', 'deg', 'deg']) self.rms_def = Float(doc="Island rms Jy/beam", colname='Isl_rms', units='Jy/beam') self.mean_def = Float(doc="Island mean Jy/beam", colname='Isl_mean', units='Jy/beam') self.total_flux_isl_def = Float(doc="Island total flux from sum of pixels", colname='Isl_Total_flux', units='Jy') self.total_flux_islE_def = Float(doc="Error on island total flux from sum of pixels", colname='E_Isl_Total_flux', units='Jy') self.gresid_rms_def = Float(doc="Island rms in Gaussian residual image", colname='Resid_Isl_rms', units='Jy/beam') self.gresid_mean_def= Float(doc="Island mean in Gaussian residual image", colname='Resid_Isl_mean', units='Jy/beam') self.sresid_rms_def = Float(doc="Island rms in Shapelet residual image", colname='Resid_Isl_rms', units='Jy/beam') self.sresid_mean_def= Float(doc="Island mean in Shapelet residual image", colname='Resid_Isl_mean', units='Jy/beam') self.jlevel_def = Int(doc="Wavelet number to which Gaussian belongs", colname='Wave_id') self.spec_indx_def = Float(doc = "Spectral index", colname='Spec_Indx', units=None) self.e_spec_indx_def = Float(doc = "Error in spectral index", colname='E_Spec_Indx', units=None) self.specin_flux_def = List(Float(), doc = "Total flux density per channel, Jy", colname=['Total_flux'], units=['Jy']) self.specin_fluxE_def = List(Float(), doc = "Error in total flux density per channel, Jy", colname=['E_Total_flux'], units=['Jy']) self.specin_freq_def = List(Float(), doc = "Frequency per channel, Hz", colname=['Freq'], units=['Hz']) use_wcs = True self.gaussian_idx = g_idx self.gaus_num = 0 # stored later self.island_id = isl_idx self.jlevel = img.j self.flag = flg self.parameters = gaussian p = gaussian self.peak_flux = p[0] self.centre_pix = p[1:3] size = p[3:6] if func.approx_equal(size[0], img.pixel_beam()[0]*1.1) and \ func.approx_equal(size[1], img.pixel_beam()[1]) and \ func.approx_equal(size[2], img.pixel_beam()[2]+90.0) or \ img.opts.fix_to_beam: # Check whether fitted Gaussian is just the distorted pixel beam # given as an initial guess or if size was fixed to the beam. If so, # reset the size to the undistorted beam. # Note: these are sigma sizes, not FWHM sizes. size = img.pixel_beam() size = (size[0], size[1], size[2]+90.0) # adjust angle so that corrected_size() works correctly size = func.corrected_size(size) # gives fwhm and P.A. self.size_pix = size # FWHM in pixels and P.A. CCW from +y axis # Use img.orig_beam for flux calculation and deconvolution on wavelet # images, as img.beam has been altered to match the wavelet scale. # Note: these are all FWHM sizes. if img.waveletimage: bm_pix = N.array(img.beam2pix(img.orig_beam)) else: bm_pix = N.array(img.beam2pix(img.beam)) # Calculate fluxes, sky sizes, etc. All sizes are FWHM. tot = p[0]*size[0]*size[1]/(bm_pix[0]*bm_pix[1]) if flg == 0: # These are good Gaussians errors = func.get_errors(img, p+[tot], img.islands[isl_idx].rms) self.centre_sky = img.pix2sky(p[1:3]) self.centre_skyE = img.pix2coord(errors[1:3], self.centre_pix, use_wcs=use_wcs) self.size_sky = img.pix2gaus(size, self.centre_pix, use_wcs=use_wcs) # FWHM in degrees and P.A. east from north self.size_sky_uncorr = img.pix2gaus(size, self.centre_pix, use_wcs=False) # FWHM in degrees and P.A. east from +y axis self.size_skyE = img.pix2gaus(errors[3:6], self.centre_pix, use_wcs=use_wcs) self.size_skyE_uncorr = img.pix2gaus(errors[3:6], self.centre_pix, use_wcs=False) gaus_dc, err = func.deconv2(bm_pix, size) self.deconv_size_sky = img.pix2gaus(gaus_dc, self.centre_pix, use_wcs=use_wcs) self.deconv_size_sky_uncorr = img.pix2gaus(gaus_dc, self.centre_pix, use_wcs=False) self.deconv_size_skyE = img.pix2gaus(errors[3:6], self.centre_pix, use_wcs=use_wcs) self.deconv_size_skyE_uncorr = img.pix2gaus(errors[3:6], self.centre_pix, use_wcs=False) else: # These are flagged Gaussians, so don't calculate sky values or errors errors = [0]*7 self.centre_sky = [0., 0.] self.centre_skyE = [0., 0.] self.size_sky = [0., 0., 0.] self.size_sky_uncorr = [0., 0., 0.] self.size_skyE = [0., 0.] self.size_skyE_uncorr = [0., 0., 0.] self.deconv_size_sky = [0., 0., 0.] self.deconv_size_sky_uncorr = [0., 0., 0.] self.deconv_size_skyE = [0., 0., 0.] self.deconv_size_skyE_uncorr = [0., 0., 0.] self.total_flux = tot self.total_fluxE = errors[6] self.peak_fluxE = errors[0] self.total_fluxE = errors[6] self.centre_pixE = errors[1:3] self.size_pixE = errors[3:6] self.rms = img.islands[isl_idx].rms self.mean = img.islands[isl_idx].mean self.total_flux_isl = img.islands[isl_idx].total_flux self.total_flux_islE = img.islands[isl_idx].total_fluxE PyBDSF-1.10.1/bdsf/image.py000066400000000000000000000165301420247104600152000ustar00rootroot00000000000000"""Module image. Instances of class Image are a primary data-holders for all PyBDSF operations. They store the image itself together with some meta-information (such as headers), options for processing modules and all data generated during processing. A few convenience methods are also defined here for interactive use: to allow viewing and output of the most important data, to allow listing and setting of options, and to allow re-processing of Images (these methods are used by the interactive IPython shell made by pybdsf). This module also defines class Op, which is used as a base class for all PyBDSF operations. """ from __future__ import print_function from __future__ import absolute_import import numpy as N from .opts import * class Image(object): """Image is a primary data container for PyBDSF. All the run-time data (such as image data, mask, etc.) is stored here. A number of type-checked properties are defined for the most basic image attributes, such as image data, mask, header, user options. To allow transparent caching of large image data to disk, the image data must be stored in attributes ending in "_arr". Additionally, setting subarrays does not work using the attributes directly (e.g., img.ch0_arr[0:100,0:100] = 0.0 will not work). Instead, set the subarray values then set the attribute (e.g., ch0[0:100,0:100] = 0.0; img.ch0_arr = ch0). There is little sense in declaring all possible attributes right here as it will introduce unneeded dependencies between modules, thus most other attributes (like island lists, gaussian lists, etc) are inserted at run-time by the specific PyBDSF modules. """ def __init__(self, opts): self._prev_opts = None self.extraparams = {} self.masked = False self.completed_Ops = [] self.waveletimage = False self._pi = False self.do_cache = False self.bbspatchnum = 0 self.blankpix = 0 self.use_io = '' self.j = 0 self.freq_pars = [0.0, 0.0, 0.0] self.filename = '' self.resid_gaus_arr = None self._is_interactive_shell = False self.opts = Opts(opts) def __setstate__(self, state): """Needed for multiprocessing""" self.thresh_pix = state['thresh_pix'] self.minpix_isl = state['minpix_isl'] self.clipped_mean = state['clipped_mean'] def __getstate__(self): """Needed for multiprocessing""" state = {} state['thresh_pix'] = self.thresh_pix state['minpix_isl'] = self.minpix_isl state['clipped_mean'] = self.clipped_mean return state def __getattribute__(self, name): from . import functions as func if name.endswith("_arr"): if self.do_cache: map_data = func.retrieve_map(self, name) if map_data is not None: return map_data else: return object.__getattribute__(self, name) else: return object.__getattribute__(self, name) else: return object.__getattribute__(self, name) def __setattr__(self, name, value): from . import functions as func if hasattr(self, 'do_cache'): if self.do_cache and name.endswith("_arr") and isinstance(value, N.ndarray): func.store_map(self, name, value) else: super(Image, self).__setattr__(name, value) else: super(Image, self).__setattr__(name, value) def __delattr__(self, name): from . import functions as func if self.do_cache and name.endswith("_arr"): func.del_map(self, name) else: super(Image, self).__delattr__(name) def get_map(self, map_name): """Returns requested map.""" from . import functions as func if self.do_cache: map_data = func.retrieve_map(self, map_name) else: map_data = getattr(self, map_name) return map_data def put_map(self, map_name, map_data): """Stores requested map.""" from . import functions as func if self.do_cache: func.store_map(self, map_name, map_data) else: setattr(self, map_name, map_data) def list_pars(self): """List parameter values.""" from . import interface interface.list_pars(self) def set_pars(self, **kwargs): """Set parameter values.""" from . import interface interface.set_pars(self, **kwargs) def process(self, **kwargs): """Process Image object""" from . import interface success = interface.process(self, **kwargs) return success def save_pars(self, savefile=None): """Save parameter values.""" from . import interface interface.save_pars(self, savefile) def load_pars(self, loadfile=None): """Load parameter values.""" from . import interface import os if loadfile is None or loadfile == '': loadfile = self.opts.filename + '.pybdsf.sav' if os.path.exists(loadfile): timg, err = interface.load_pars(loadfile) if timg is not None: orig_filename = self.opts.filename self.opts = timg.opts self.opts.filename = orig_filename # reset filename to original else: if self._is_interactive_shell: print("\n\033[31;1mERROR\033[0m: '"+\ loadfile+"' is not a valid parameter save file.") else: raise RuntimeError(str(err)) else: if self._is_interactive_shell: print("\n\033[31;1mERROR\033[0m: File '"+\ loadfile+"' not found.") else: raise RuntimeError('File not found') def show_fit(self, **kwargs): """Show results of the fit.""" from . import plotresults if not hasattr(self, 'nisl'): print('Image has not been processed. Please run process_image first.') return False plotresults.plotresults(self, **kwargs) return True def export_image(self, **kwargs): """Export an internal image to a file.""" from . import interface try: result = interface.export_image(self, **kwargs) return result except RuntimeError as err: if self._is_interactive_shell: print("\n\033[31;1mERROR\033[0m: " + str(err)) else: raise RuntimeError(str(err)) def write_catalog(self, **kwargs): """Write the Gaussian, source, or shapelet list to a file""" from . import interface try: result = interface.write_catalog(self, **kwargs) return result except RuntimeError as err: if self._is_interactive_shell: print("\n\033[31;1mERROR\033[0m: " + str(err)) else: raise RuntimeError(str(err)) class Op(object): """Common base class for all PyBDSF operations. At the moment this class is empty and only defines placeholder for method __call__, which should be redefined in all derived classes. """ def __call__(self, img): raise NotImplementedError("This method should be redefined") PyBDSF-1.10.1/bdsf/interface.py000066400000000000000000001342071420247104600160600ustar00rootroot00000000000000"""Interface module. The interface module handles all functions typically needed by the user in an interactive environment such as IPython. Many are also used by the custom IPython shell defined in pybdsf. """ from __future__ import print_function from __future__ import absolute_import try: # For Python 2, use raw_input() for input() input = raw_input except NameError: pass def process(img, **kwargs): """Find and measure sources in an image. This function is used by process_image in __init__.py and by process_image in pybdsf. It is also used as a method of the Image object in image.py to allow reprocessing of existing Image objects with the command img.process(). Any options given as keyword arguments will override existing ones stored in img.opts. """ from . import default_chain, _run_op_list from .image import Image from . import mylogger # Start up logger. We need to initialize it each time process() is # called, in case the quiet or debug options have changed log = img.opts.filename + '.pybdsf.log' img.log = '' mylogger.init_logger(log, quiet=img.opts.quiet, debug=img.opts.debug) add_break_to_logfile(log) mylog = mylogger.logging.getLogger("PyBDSF.Process") mylog.info("Processing "+img.opts.filename) try: # set options if given if len(kwargs) > 0: set_pars(img, **kwargs) except RuntimeError as err: # Catch and log error mylog.error(str(err)) # Re-throw error if the user is not in the interactive shell if img._is_interactive_shell: return False else: raise # Run all the op's try: # Run op's in chain img, op_chain = get_op_chain(img) if op_chain is not None: _run_op_list(img, op_chain) img._prev_opts = img.opts.to_dict() return True except RuntimeError as err: # Catch and log error mylog.error(str(err)) # Re-throw error if the user is not in the interactive shell if img._is_interactive_shell: return False else: raise except KeyboardInterrupt: mylogger.userinfo(mylog, "\n\033[31;1mAborted\033[0m") if img._is_interactive_shell: return False else: raise def get_op_chain(img): """Determines the optimal Op chain for an Image object. This is useful when reprocessing an Image object. For example, if Gaussians were already fit, but the user now wants to use shapelets, we do not need to re-run Op_gausfit, etc. Note that any new options added to opts.py should also be added here. If not, a full reprocessing will be done if the new option is changed. """ from . import default_chain Op_chain = default_chain[:] Op_names = ['readimage', 'collapse', 'preprocess', 'rmsimage', 'threshold', 'islands', 'gausfit', 'wavelet_atrous', 'shapelets', 'gaul2srl', 'spectralindex', 'polarisation', 'make_residimage', 'psf_vary', 'outlist', 'cleanup'] prev_opts = img._prev_opts if prev_opts is None: return img, default_chain new_opts = img.opts.to_dict() # Set the hidden options, which should include any option whose change # should not trigger a process_image action hidden_opts = img.opts.get_names(group='hidden') hidden_opts.append('advanced_opts') hidden_opts.append('flagging_opts') hidden_opts.append('multichan_opts') hidden_opts.append('output_opts') # Define lists of options for each Op. Some of these can be defined # using the "group" parameter of each option. # # Op_readimage() readimage_opts = ['filename', 'beam', 'trim_box', 'frequency', 'beam_spectrum', 'frequency_sp'] # Op_collapse() collapse_opts = img.opts.get_names(group='multichan_opts') collapse_opts.append('polarisation_do') collapse_opts += readimage_opts # Op_preprocess() preprocess_opts = ['kappa_clip', 'polarisation_do'] preprocess_opts += collapse_opts # Op_rmsimage() rmsimage_opts = ['rms_box', 'rms_box_bright', 'adaptive_rms_box', 'mean_map', 'rms_map', 'adaptive_thresh', 'rms_box_bright'] rmsimage_opts += preprocess_opts # Op_threshold() threshold_opts = ['thresh', 'thresh_pix', 'thresh_isl'] threshold_opts += rmsimage_opts # Op_islands() islands_opts = threshold_opts islands_opts.append('minpix_isl') # Op_gausfit() gausfit_opts = ['verbose_fitting'] gausfit_opts += islands_opts gausfit_opts += img.opts.get_names(group='flagging_opts') # Op_wavelet_atrous() wavelet_atrous_opts = img.opts.get_names(group='atrous_do') wavelet_atrous_opts.append('atrous_do') wavelet_atrous_opts += gausfit_opts # Op_shapelets() shapelets_opts = img.opts.get_names(group='shapelet_do') shapelets_opts.append('shapelet_do') shapelets_opts += islands_opts # Op_gaul2srl() gaul2srl_opts = ['group_tol', 'group_by_isl', 'group_method'] gaul2srl_opts += gausfit_opts gaul2srl_opts += wavelet_atrous_opts # Op_spectralindex() spectralindex_opts = img.opts.get_names(group='spectralindex_do') spectralindex_opts.append('spectralindex_do') spectralindex_opts += gaul2srl_opts # Op_polarisation() polarisation_opts = img.opts.get_names(group='polarisation_do') polarisation_opts.append('polarisation_do') polarisation_opts += gaul2srl_opts # Op_make_residimage() make_residimage_opts = ['fittedimage_clip'] make_residimage_opts += gausfit_opts make_residimage_opts += wavelet_atrous_opts make_residimage_opts += shapelets_opts # Op_psf_vary() psf_vary_opts = img.opts.get_names(group='psf_vary_do') psf_vary_opts.append('psf_vary_do') psf_vary_opts += gaul2srl_opts # Op_outlist() and Op_cleanup() are always done. # Find whether new opts differ from previous opts (and are not hidden # opts, which should not be checked). If so, found = True and we reset # the relevant image parameters and add the relevant Op to the Op_chain. re_run = False found = False for k, v in prev_opts.items(): if v != new_opts[k] and k not in hidden_opts: re_run = True if k in readimage_opts: if hasattr(img, 'use_io'): del img.use_io if hasattr(img, 'image_arr'): del img.image_arr while 'readimage' in img.completed_Ops: img.completed_Ops.remove('readimage') found = True if k in collapse_opts: if hasattr(img, 'mask_arr'): del img.mask_arr if hasattr(img, 'ch0_arr'): del img.ch0_arr while 'collapse' in img.completed_Ops: img.completed_Ops.remove('collapse') found = True if k in preprocess_opts: while 'preprocess' in img.completed_Ops: img.completed_Ops.remove('preprocess') found = True if k in rmsimage_opts: if hasattr(img, 'rms_arr'): del img.rms_arr if hasattr(img, 'mean_arr'): del img.mean_arr if hasattr(img, 'rms_Q_arr'): del img.rms_Q_arr if hasattr(img, 'mean_Q_arr'): del img.mean_Q_arr if hasattr(img, 'rms_U_arr'): del img.rms_U_arr if hasattr(img, 'mean_U_arr'): del img.mean_U_arr if hasattr(img, 'rms_V_arr'): del img.rms_V_arr if hasattr(img, 'mean_V_arr'): del img.mean_V_arr if hasattr(img, '_adapt_rms_isl_pos'): del img._adapt_rms_isl_pos while 'rmsimage' in img.completed_Ops: img.completed_Ops.remove('rmsimage') found = True if k in threshold_opts: while 'threshold' in img.completed_Ops: img.completed_Ops.remove('threshold') found = True if k in islands_opts: if hasattr(img, 'islands'): del img.islands while 'islands' in img.completed_Ops: img.completed_Ops.remove('islands') found = True if k in gausfit_opts: if hasattr(img, 'sources'): del img.sources if hasattr(img, 'dsources'): del img.dsources if hasattr(img, 'gaussians'): del img.gaussians while 'gausfit' in img.completed_Ops: img.completed_Ops.remove('gausfit') found = True if k in wavelet_atrous_opts: if hasattr(img, 'atrous_gaussians'): del img.atrous_gaussians if hasattr(img, 'islands'): del img.islands if hasattr(img, 'sources'): del img.sources if hasattr(img, 'dsources'): del img.dsources if hasattr(img, 'gaussians'): del img.gaussians while 'islands' in img.completed_Ops: img.completed_Ops.remove('islands') while 'gausfit' in img.completed_Ops: img.completed_Ops.remove('gausfit') while 'wavelet_atrous' in img.completed_Ops: img.completed_Ops.remove('wavelet_atrous') found = True if k in shapelets_opts: while 'shapelets' in img.completed_Ops: img.completed_Ops.remove('shapelets') found = True if k in gaul2srl_opts: while 'gaul2srl' in img.completed_Ops: img.completed_Ops.remove('gaul2srl') found = True if k in spectralindex_opts: while 'spectralindex' in img.completed_Ops: img.completed_Ops.remove('spectralindex') found = True if k in polarisation_opts: while 'polarisation' in img.completed_Ops: img.completed_Ops.remove('polarisation') found = True if k in make_residimage_opts: if hasattr(img, 'resid_gaus_arr'): del img.resid_gaus_arr img.resid_gaus_arr = None # set to init state if hasattr(img, 'model_gaus_arr'): del img.model_gaus_arr if hasattr(img, 'resid_shap_arr'): del img.resid_shap_arr if hasattr(img, 'model_shap_arr'): del img.model_shap_arr while 'make_residimage' in img.completed_Ops: img.completed_Ops.remove('make_residimage') found = True if k in psf_vary_opts: while 'psf_vary' in img.completed_Ops: img.completed_Ops.remove('psf_vary') found = True if not found: break # If nothing has changed, ask if user wants to re-run if not found and not re_run: prompt = "Analysis appears to be up-to-date. Force reprocessing (y/n)? " answ = raw_input_no_history(prompt) while answ.lower() not in ['y', 'n', 'yes', 'no']: answ = raw_input_no_history(prompt) if answ.lower() in ['y', 'yes']: re_run = True # Force re-run else: return img, None # If a changed option is not in any of the above lists, # force a re-run of all Ops. if not found: img.completed_Ops = [] if hasattr(img, 'use_io'): del img.use_io if hasattr(img, 'image_arr'): del img.image_arr if hasattr(img, 'mask_arr'): del img.mask_arr if hasattr(img, 'ch0_arr'): del img.ch0_arr if hasattr(img, 'rms_arr'): del img.rms_arr if hasattr(img, 'mean_arr'): del img.mean_arr if hasattr(img, 'rms_Q_arr'): del img.rms_Q_arr if hasattr(img, 'mean_Q_arr'): del img.mean_Q_arr if hasattr(img, 'rms_U_arr'): del img.rms_U_arr if hasattr(img, 'mean_U_arr'): del img.mean_U_arr if hasattr(img, 'rms_V_arr'): del img.rms_V_arr if hasattr(img, 'mean_V_arr'): del img.mean_V_arr if hasattr(img, 'islands'): del img.islands if hasattr(img, 'sources'): del img.sources if hasattr(img, 'dsources'): del img.dsources if hasattr(img, 'gaussians'): del img.gaussians if hasattr(img, 'atrous_gaussians'): del img.atrous_gaussians if hasattr(img, 'resid_gaus_arr'): del img.resid_gaus_arr if hasattr(img, 'model_gaus_arr'): del img.model_gaus_arr if hasattr(img, 'resid_shap_arr'): del img.resid_shap_arr if hasattr(img, 'model_shap_arr'): del img.model_shap_arr if hasattr(img, '_adapt_rms_isl_pos'): del img._adapt_rms_isl_pos return img, Op_chain while 'outlist' in img.completed_Ops: img.completed_Ops.remove('outlist') while 'cleanup' in img.completed_Ops: img.completed_Ops.remove('cleanup') for completed_Op in img.completed_Ops: if completed_Op in Op_names: Op_indx = Op_names.index(completed_Op) Op_names.pop(Op_indx) Op_chain.pop(Op_indx) return img, Op_chain def load_pars(filename): """Load parameters from a save file or dictionary. If a file is given, it must be a pickled opts dictionary. filename - name of options file to load or a dictionary of opts. Returns None (and original error) if no file can be loaded successfully. """ from .image import Image from . import mylogger try: import cPickle as pickle except ImportError: import pickle # First, check if input is a dictionary if isinstance(filename, dict): timg = Image(filename) return timg, None else: try: pkl_file = open(filename, 'rb') pars = pickle.load(pkl_file) pkl_file.close() timg = Image(pars) print("--> Loaded parameters from file '" + filename + "'.") return timg, None except Exception as err: return None, err def save_pars(img, savefile=None, quiet=False): """Save parameters to a file. The save file is a "pickled" opts dictionary. """ try: import cPickle as pickle except ImportError: import pickle from . import tc import sys if savefile is None or savefile == '': savefile = img.opts.filename + '.pybdsf.sav' # convert opts to dictionary pars = img.opts.to_dict() output = open(savefile, 'wb') pickle.dump(pars, output, protocol=0) output.close() if not quiet: print("--> Saved parameters to file '" + savefile + "'.") def list_pars(img, opts_list=None, banner=None, use_groups=True): """Lists all parameters for the Image object. opts_list - a list of the parameter names to list; if None, all parameters are used. banner - banner text to place at top of listing. use_groups - whether to use the group information for each parameter. """ from . import tc import sys # Get all options as a list sorted by name opts = img.opts.to_list() # Filter list if opts_list is not None: opts_temp = [] for o in opts: if o[0] in opts_list: opts_temp.append(o) opts = opts_temp # Move filename, infile, outfile to front of list for o in opts: if o[0] == 'filename' or o[0] == 'infile' or o[0] == 'outfile': opts.remove(o) opts.insert(0, o) # Now group options with the same "group" together. if use_groups: opts = group_opts(opts) # Finally, print options, values, and doc strings to screen print_opts(opts, img, banner=banner) def set_pars(img, **kwargs): """Set parameters using arguments instead of using a dictionary. Allows partial names for parameters as long as they are unique. Parameters are set to default values if par = ''. """ import re import sys from .image import Image # Enumerate all options opts = img.opts.get_names() # Check that parameters are valid options and are unique full_key = [] for i, key in enumerate(kwargs): chk_key = checkpars(opts, key) if chk_key == []: raise RuntimeError("Input parameter '" + key + "' not recognized.") if len(chk_key) > 1 and key not in opts: raise RuntimeError("Input parameter '" + key + "' matches to more than one "\ "possible parameter:\n " + "\n ".join(chk_key)) if key in opts: full_key.append(key) else: full_key.append(chk_key[0]) # Build options dictionary pars = {} for i, key in enumerate(kwargs): if kwargs[key] == '': temp_img = Image({'filename':''}) opt_names = temp_img.opts.get_names() for k in opt_names: if key == k: kwargs[key] = temp_img.opts.__getattribute__(k) pars.update({full_key[i]: kwargs[key]}) # Finally, set the options img.opts.set_opts(pars) def group_opts(opts): """Sorts options by group (as defined in opts.py). Returns a list of options, with suboptions arranged in a list inside the main list and directly following the main options. Options belonging to the "hidden" group are excluded from the returned list (as defined in opts.py). """ groups = [] gp = [] for i in range(len(opts)): grp = opts[i][1].group() if grp is not None and grp not in groups: groups.append(opts[i][1].group()) groups.sort() # Now, make a list for each group with its options. Don't include # "hidden" options, as they should never by seen by the user. for g in groups: g_list = [] for i in range(len(opts)): if isinstance(opts[i], tuple): if g == str(opts[i][1].group()): g_list.append(opts[i]) for gs in g_list: opts.remove(gs) for i in range(len(opts)): if g == str(opts[i][0]) and g != 'hidden': opts.insert(i+1, g_list) break return opts def print_opts(grouped_opts_list, img, banner=None): """Print options to screen. Options can be sorted by group (defined in opts.py) previously defined by group_opts. Output of grouped items is suppressed if parent option is False. The layout is as follows: [20 spaces par name with ...] = [at least 49 spaces for value] [at least 49 spaces for doc] When more than one line is required for the doc, the next line is: [25 blank spaces][at least 47 spaces for doc] As in casapy, print non-defaults in blue, options with suboptions in 47m and suboptions in green. Option Values are printed in bold, to help to distinguish them from the descriptions. NOTE: in iTerm, one needs to set the bold color in the profiles to white, as it defaults to red, which is a bit hard on the eyes in this case. """ from .image import Image import os from . import functions as func termy, termx = func.getTerminalSize() # note: returns row, col -> y, x minwidth = 28 # minimum width for parameter names and values # Define colors for output dc = '\033[1;34m' # Blue: non-default option text color ec = '\033[0;47m' # expandable option text color sc = '\033[0;32m' # Green: suboption text color nc = '\033[0m' # normal text color ncb = '\033[1m' # normal text color bold if banner is not None: print(banner) spcstr = ' ' * minwidth # spaces string for second or later lines infix = nc + ': ' + nc # infix character used to separate values from comments print('=' * termx) # division string for top of parameter listing for indx, o in enumerate(grouped_opts_list): if isinstance(o, tuple): # Print main options, which are always tuples, before printing # suboptions (if any). k = o[0] v = o[1] val = img.opts.__getattribute__(k) v1 = v2 = '' if val == v._default: # value is default v1 = ncb v2 = nc else: # value is non-default v1 = dc v2 = nc if isinstance(val, str): valstr = v1 + repr(val) + v2 if k == 'filename': # Since we can check whether filename is valid, # do so here and print in red if not. if not os.path.exists(val): valstr = '\033[31;1m' + repr(val) + nc width_par_val = max(minwidth, len(k) + len(str(val)) + 5) else: if isinstance(val, float): val = round_float(val) if isinstance(val, tuple): val = round_tuple(val) valstr = v1 + str(val) + v2 width_par_val = max(minwidth, len(k) + len(str(val)) + 4) width_desc = max(termx - width_par_val - 3, 44) # Get the option description text from the doc string, which # is defined in opts.py. By convention, print_opts will only # show the short description; help('option_name') will # print both the short and long description. The versions # are separated in the doc string by '\n', which is split # on here: desc_text = wrap(str(v.doc()).split('\n')[0], width_desc) fmt = '%' + str(minwidth) + 's' + infix + '%44s' # Now loop over lines of description if indx < len(grouped_opts_list)-1: # Here we check if next entry in options list is a tuple or a # list. If it is a list, then the current option has # suboptions and should be in the ec color. Since we check the # next option, we can't do this if we let indx go to the end. if isinstance(grouped_opts_list[indx+1], tuple): parvalstr = nc + k + nc + ' ..' else: parvalstr = ec + k + nc + ' ..' else: # Since this is the last entry in the options list and is a # tuple, it cannot be an expandable option, so make it nc color parvalstr = nc + k + nc + ' ..' if "'" in valstr: len_without_formatting = len(k) + len(str(val)) + 5 else: len_without_formatting = len(k) + len(str(val)) + 4 for i in range(len_without_formatting, minwidth): parvalstr += '.' parvalstr += ' ' + valstr if "'" not in valstr: parvalstr += ' ' for dt_indx, dt in enumerate(desc_text): if dt_indx == 0: print(fmt % (parvalstr.ljust(minwidth), dt.ljust(44))) else: print(nc + spcstr + ' %44s' % dt.ljust(44)) else: # Print suboptions, indented 2 spaces from main options in sc color parent_opt = grouped_opts_list[indx-1] parent_val = img.opts.__getattribute__(parent_opt[0]) if parent_val == True: for og in o: k = og[0] v = og[1] val = img.opts.__getattribute__(k) v1 = v2 = '' if val == v._default: # value is default v1 = ncb v2 = nc else: # value is non-default v1 = dc v2 = nc if isinstance(val, str): valstr = v1 + repr(val) + v2 width_par_val = max(minwidth, len(k) + len(str(val)) + 7) else: if isinstance(val, float): val = round_float(val) if k == 'beam_spectrum' and val is not None: val = round_list_of_tuples(val) if k == 'frequency_sp' and val is not None: val = round_list(val) valstr = v1 + str(val) + v2 width_par_val = max(minwidth, len(k) + len(str(val)) + 6) width_desc = max(termx - width_par_val - 3, 44) desc_text = wrap(str(v.doc()).split('\n')[0], width_desc) fmt = ' ' + '%' + str(minwidth) + 's' + infix + '%44s' parvalstr = sc + k + nc + ' ..' if "'" in valstr: len_without_formatting = len(k) + len(str(val)) + 7 else: len_without_formatting = len(k) + len(str(val)) + 6 for i in range(len_without_formatting, minwidth): parvalstr += '.' parvalstr += ' ' + valstr if "'" not in valstr: parvalstr += ' ' for dt_indx, dt in enumerate(desc_text): if dt_indx == 0: print(fmt % (parvalstr.ljust(minwidth-2), dt.ljust(44))) else: print(nc + spcstr + ' %44s' % dt.ljust(44)) def wrap(text, width=80): """Wraps text to given width and returns list of lines.""" lines = [] for paragraph in text.split('\n'): line = [] len_line = 0 for word in paragraph.split(' '): word.strip() len_word = len(word) if len_line + len_word <= width: line.append(word) len_line += len_word + 1 else: lines.append(' '.join(line)) line = [word] len_line = len_word + 1 lines.append(' '.join(line)) return lines def checkpars(lines, regex): """Checks that parameters are unique""" import re result = [] for l in lines: match = re.match(regex,l) if match: result += [l] return result def in_ipython(): """Checks if interpreter is IPython.""" try: __IPYTHON__ except NameError: return False else: return True def raw_input_no_history(prompt): """Removes user input from readline history.""" import readline userinput = input(prompt) if userinput != '': readline.remove_history_item(readline.get_current_history_length()-1) return userinput # The following functions just make the printing of # parameters look better def round_tuple(val): valstr_list = [] for v in val: vstr = '%s' % (round(v, 5)) if len(vstr) > 7: vstr = '%.5f' % (v,) valstr_list.append(vstr) valstr = '(' + ','.join(valstr_list) + ')' return valstr def round_float(val): vstr = '%s' % (round(val, 5)) if len(vstr) > 7 and val < 1e3: vstr = '%.5f' % (val,) elif len(vstr) > 7 and val >= 1e3: vstr = '%.2e' % (val,) return vstr def round_list(val): valstr_list = [] for v in val: valstr_list.append('%.2e' % (v,)) valstr = '[' + ','.join(valstr_list) + ']' return valstr def round_list_of_tuples(val): valstr_list = [] valstr_list_tot = [] for l in val: for v in l: vstr = '%s' % (round(v, 5)) if len(vstr) > 7: vstr = '%.5f' % (v,) valstr_list.append(vstr) valstr = '(' + ','.join(valstr_list) + ')' valstr_list_tot.append(valstr) valstr = '[' + ','.join(valstr_list_tot) + ']' return valstr # The following functions give convenient access to the output functions in # output.py def export_image(img, outfile=None, img_format='fits', pad_image = False, img_type='gaus_resid', mask_dilation=0, clobber=False): """Write an image to a file. Returns True if successful, False if not. outfile - name of resulting file; if None, file is named automatically. img_type - type of image to export; see below img_format - format of resulting file: 'fits' or 'casa' incl_wavelet - include wavelet Gaussians in model and residual images? clobber - overwrite existing file? The following images may be exported: 'ch0' - image used for source detection 'rms' - rms map image 'mean' - mean map image 'pi' - polarized intensity image 'gaus_resid' - Gaussian model residual image 'gaus_model' - Gaussian model image 'shap_resid' - Shapelet model residual image 'shap_model' - Shapelet model image 'psf_major' - PSF major axis FWHM image (FWHM in arcsec) 'psf_minor' - PSF minor axis FWHM image (FWHM in arcsec) 'psf_pa' - PSF position angle image (degrees east of north) 'psf_ratio' - PSF peak-to-total flux ratio (in units of 1/beam) 'psf_ratio_aper' - PSF peak-to-aperture flux ratio (in units of 1/beam) 'island_mask' - Island mask image (0 = outside island, 1 = inside island) """ import os from . import functions as func from .const import fwsig from . import mylogger mylog = mylogger.logging.getLogger("PyBDSF."+img.log+"ExportImage") # First some checking: if not 'gausfit' in img.completed_Ops and 'gaus' in img_type: print('\033[91mERROR\033[0m: Gaussians have not been fit. Please run process_image first.') return False elif not 'shapelets' in img.completed_Ops and 'shap' in img_type: print('\033[91mERROR\033[0m: Shapelets have not been fit. Please run process_image first.') return False elif not 'polarisation' in img.completed_Ops and 'pi' in img_type: print('\033[91mERROR\033[0m: Polarization properties have not been calculated. Please run process_image first.') return False elif not 'psf_vary' in img.completed_Ops and 'psf' in img_type: print('\033[91mERROR\033[0m: PSF variations have not been calculated. Please run process_image first.') return False elif not 'collapse' in img.completed_Ops and 'ch0' in img_type: print('\033[91mERROR\033[0m: ch0 image has not been calculated. Please run process_image first.') return False elif not 'rmsimage' in img.completed_Ops and ('rms' in img_type or 'mean' in img_type): print('\033[91mERROR\033[0m: Mean and rms maps have not been calculated. Please run process_image first.') return False elif not 'make_residimage' in img.completed_Ops and ('resid' in img_type or 'model' in img_type): print('\033[91mERROR\033[0m: Residual and model maps have not been calculated. Please run process_image first.') return False format = img_format.lower() if (format in ['fits', 'casa']) == False: print('\033[91mERROR\033[0m: img_format must be "fits" or "casa"') return False filename = outfile if filename is None or filename == '': filename = img.imagename + '_' + img_type + '.' + format if os.path.exists(filename) and clobber == False: print('\033[91mERROR\033[0m: File exists and clobber = False.') return False if format == 'fits': use_io = 'fits' if format == 'casa': use_io = 'rap' bdir = '' try: if img_type == 'ch0': func.write_image_to_file(use_io, filename, img.ch0_arr, img, bdir, pad_image, clobber=clobber) elif img_type == 'rms': func.write_image_to_file(use_io, filename, img.rms_arr, img, bdir, pad_image, clobber=clobber) elif img_type == 'mean': func.write_image_to_file(use_io, filename, img.mean_arr, img, bdir, pad_image, clobber=clobber) elif img_type == 'pi': func.write_image_to_file(use_io, filename, img.ch0_pi_arr, img, bdir, pad_image, clobber=clobber) elif img_type == 'psf_major': func.write_image_to_file(use_io, filename, img.psf_vary_maj_arr*fwsig, img, bdir, pad_image, clobber=clobber) elif img_type == 'psf_minor': func.write_image_to_file(use_io, filename, img.psf_vary_min_arr*fwsig, img, bdir, pad_image, clobber=clobber) elif img_type == 'psf_pa': func.write_image_to_file(use_io, filename, img.psf_vary_pa_arr, img, bdir, pad_image, clobber=clobber) elif img_type == 'psf_ratio': func.write_image_to_file(use_io, filename, img.psf_vary_ratio_arr, img, bdir, pad_image, clobber=clobber) elif img_type == 'psf_ratio_aper': func.write_image_to_file(use_io, filename, img.psf_vary_ratio_aper_arr, img, bdir, pad_image, clobber=clobber) elif img_type == 'gaus_resid': im = img.resid_gaus_arr func.write_image_to_file(use_io, filename, im, img, bdir, pad_image, clobber=clobber) elif img_type == 'gaus_model': im = img.model_gaus_arr func.write_image_to_file(use_io, filename, im, img, bdir, pad_image, clobber=clobber) elif img_type == 'shap_resid': func.write_image_to_file(use_io, filename, img.resid_shap_arr, img, bdir, pad_image, clobber=clobber) elif img_type == 'shap_model': func.write_image_to_file(use_io, filename, img.model_shap_arr, img, bdir, pad_image, clobber=clobber) elif img_type == 'island_mask': import numpy as N import scipy.ndimage as nd island_mask_bool = img.pyrank + 1 > 0 if mask_dilation > 0: # Dilate the mask by specified number of iterations island_mask_bool = nd.binary_dilation(island_mask_bool, iterations=mask_dilation) # Perform a binary closing to remove small holes/gaps. The # structure array is chosen to be about the size of the # beam (assuming a normally sampled psf), so that holes/gaps # smaller than the beam are removed. pbeam = int(round(img.beam2pix(img.beam)[0] * 1.5)) island_mask_bool = nd.binary_closing(island_mask_bool, structure=N.ones((pbeam, pbeam))) # Check for telescope, needed for CASA clean masks if img._telescope is None: print('\033[91mWARNING\033[0m: Telescope is unknown. Mask may not work correctly in CASA.') island_mask = N.array(island_mask_bool, dtype=N.float32) func.write_image_to_file(use_io, filename, island_mask, img, bdir, pad_image, clobber=clobber, is_mask=True) else: print("\n\033[91mERROR\033[0m: img_type not recognized.") return False if filename == 'SAMP': print('--> Image sent to SMAP hub') else: print('--> Wrote file ' + repr(filename)) if use_io == 'rap': # remove the temporary fits file used as a casacore template import os os.remove(filename+'.fits') return True except RuntimeError as err: # Catch and log error mylog.error(str(err)) # Re-throw error if the user is not in the interactive shell if img._is_interactive_shell: return False else: raise except KeyboardInterrupt: mylogger.userinfo(mylog, "\n\033[31;1mAborted\033[0m") if img._is_interactive_shell: return False else: raise def write_catalog(img, outfile=None, format='bbs', srcroot=None, catalog_type='gaul', bbs_patches=None, incl_chan=False, incl_empty=False, clobber=False, force_output=False, correct_proj=True, bbs_patches_mask=None): """Write the Gaussian, source, or shapelet list to a file. Returns True if successful, False if not. filename - name of resulting file; if None, file is named automatically. If 'SAMP', table is sent to a samp hub (must be running already). catalog_type - type of catalog "gaul" - Gaussian list "srl" - Source list "shap" - Shapelet list ("fits" format only) format - format of output list. Supported formats are: "fits" - FITS binary table "ascii" - ASCII text file "bbs" - BBS sky model (Gaussian list only) "ds9" - ds9 region file "star" - AIPS STAR file (Gaussian list only) "kvis" - kvis file (Gaussian list only) "sagecal" - SAGECAL file (Gaussian list only) srcroot - root for source and patch names (BBS/ds9 only); if None, the srcroot is chosen automatically bbs_patches - type of patches to use: None - no patches "gaussian" - each Gaussian gets its own patch "single" - all Gaussians are put into a single patch "source" - sources are grouped by source into patches "mask" - use a Boolean mask to define the patches bbs_patches_mask - file name of mask file if bbs_patches="mask" incl_chan - Include fluxes for each channel? incl_empty - Include islands without any valid Gaussians (source list only)? sort_by - Property to sort output list by: "flux" - sort by total integrated flux, largest first "indx" - sort by Gaussian and island or source index, smallest first force_output - Force the creation of a catalog, even if it is empty correct_proj - Correct source parameters for image projection effects (BBS only)? clobber - Overwrite existing file? """ from . import output # First some checking: if not 'gausfit' in img.completed_Ops: print('\033[91mERROR\033[0m: Image has not been fit. Please run process_image first.') return False if catalog_type == 'shap' and not 'shapelets' in img.completed_Ops: print('\033[91mERROR\033[0m: Image has not been decomposed into shapelets. Please run process_image first.') return False if catalog_type == 'srl' and not 'gaul2srl' in img.completed_Ops: print('\033[91mERROR\033[0m: Gaussians have not been grouped into sources. Please run process_image first.') return False format = format.lower() patch = bbs_patches filename = outfile if isinstance(patch, str): patch = patch.lower() if format not in ['fits', 'ascii', 'bbs', 'ds9', 'star', 'kvis', 'sagecal', 'csv', 'casabox']: print('\033[91mERROR\033[0m: format must be "fits", '\ '"ascii", "ds9", "star", "kvis", "csv", "casabox", or "bbs"') return False if patch not in [None, 'gaussian', 'single', 'source', 'mask']: print('\033[91mERROR\033[0m: patch must be None, '\ '"gaussian", "source", "single", or "mask"') return False if patch == 'mask': if bbs_patches_mask is None: print('\033[91mERROR\033[0m: if patch is "mask", bbs_patches_mask must be set to the file name of the mask file') return False if (catalog_type in ['gaul', 'srl', 'shap']) == False: print('\033[91mERROR\033[0m: catalog_type must be "gaul", '\ '"srl", or "shap"') return False if catalog_type == 'shap' and format != 'fits': print("\033[91mERROR\033[0m: Only format = 'fits' is supported with shapelet output.") return False if (len(img.sources) == 0 and not incl_empty) or (len(img.sources) == 0 and len(img.dsources) == 0 and incl_empty): if not force_output: print('No sources were found in the image. Output file not written.') return False if filename == '': filename = None # Now go format by format and call appropriate function if filename == 'samp' or filename == 'SAMP': import tempfile from . import functions as func import os if not hasattr(img,'samp_client'): s, private_key = func.start_samp_proxy() img.samp_client = s img.samp_key = private_key # Broadcast fits table to SAMP Hub tfile = tempfile.NamedTemporaryFile(delete=False) filename = output.write_fits_list(img, filename=tfile.name, incl_chan=incl_chan, incl_empty=incl_empty, clobber=True, objtype=catalog_type) table_name = 'PyBDSF '+ catalog_type + ' table' if catalog_type == 'srl': img.samp_srl_table_url = 'file://' + os.path.abspath(tfile.name) if catalog_type == 'gaul': img.samp_gaul_table_url = 'file://' + os.path.abspath(tfile.name) func.send_fits_table(img.samp_client, img.samp_key, table_name, tfile.name) print('--> Table sent to SMAP hub') return True if format == 'fits': filename = output.write_fits_list(img, filename=filename, incl_chan=incl_chan, incl_empty=incl_empty, clobber=clobber, objtype=catalog_type) if filename is None: print('\033[91mERROR\033[0m: File exists and clobber = False.') return False else: print('--> Wrote FITS file ' + repr(filename)) return True if format == 'ascii' or format == 'csv': filename = output.write_ascii_list(img, filename=filename, incl_chan=incl_chan, incl_empty=incl_empty, sort_by='index', format = format, clobber=clobber, objtype=catalog_type) if filename is None: print('\033[91mERROR\033[0m: File exists and clobber = False.') return False else: print('--> Wrote ASCII file ' + repr(filename)) return True if format == 'bbs': if catalog_type != 'gaul': print("\033[91mERROR\033[0m: Only catalog_type = 'gaul' is supported with BBS files.") return False filename = output.write_bbs_gaul(img, filename=filename, srcroot=srcroot, incl_empty=incl_empty, patch=patch, correct_proj=correct_proj, sort_by='flux', clobber=clobber) if filename is None: print('\033[91mERROR\033[0m: File exists and clobber = False.') return False else: print('--> Wrote BBS sky model ' + repr(filename)) return True if format == 'sagecal': if catalog_type != 'gaul': print("\033[91mERROR\033[0m: Only catalog_type = 'gaul' is supported with Sagecal files.") return False filename = output.write_lsm_gaul(img, filename=filename, srcroot=srcroot, incl_empty=incl_empty, patch=patch, sort_by='flux', clobber=clobber) if filename is None: print('\033[91mERROR\033[0m: File exists and clobber = False.') return False else: print('--> Wrote Sagecal lsm file ' + repr(filename)) return True if format == 'ds9': filename = output.write_ds9_list(img, filename=filename, srcroot=srcroot, incl_empty=incl_empty, clobber=clobber, objtype=catalog_type) if filename is None: print('\033[91mERROR\033[0m: File exists and clobber = False.') return False else: print('--> Wrote ds9 region file ' + repr(filename)) return True if format == 'star': if catalog_type != 'gaul': print("\033[91mERROR\033[0m: Only catalog_type = 'gaul' is supported with star files.") return False filename = output.write_star(img, filename=filename, clobber=clobber) if filename is None: print('\033[91mERROR\033[0m: File exists and clobber = False.') return False else: print('--> Wrote AIPS STAR file ' + repr(filename)) return True if format == 'kvis': if catalog_type != 'gaul': print("\033[91mERROR\033[0m: Only catalog_type = 'gaul' is supported with kvis files.") return False filename = output.write_kvis_ann(img, filename=filename, clobber=clobber) if filename is None: print('\033[91mERROR\033[0m: File exists and clobber=False.') return False else: print('--> Wrote kvis file ' + repr(filename)) return True if format == 'casabox': filename = output.write_casa_gaul(img, filename=filename, incl_empty=incl_empty, clobber=clobber) if filename is None: print('\033[91mERROR\033[0m: File exists and clobber=False.') else: print('--> Wrote CASA clean box file ' + filename) def add_break_to_logfile(logfile): f = open(logfile, 'a') f.write('\n' + '='*72 + '\n') f.close() PyBDSF-1.10.1/bdsf/islands.py000066400000000000000000000412761420247104600155600ustar00rootroot00000000000000"""Module islands. Defines operation Op_islands which does island detection. Current implementation uses scipy.ndimage operations for island detection. While it's implemented to work for images of arbitrary dimensionality, the bug in the current version of scipy (0.6) often causes crashes (or just wrong results) for 3D inputs. If this (scipy.ndimage.label) isn't fixed by the time we need 3D source extraction, one will have to adopt my old pixel-runs algorithm for 3D data. Check out islands.py rev. 1362 from repository for it. """ from __future__ import absolute_import from __future__ import division import numpy as N import scipy.ndimage as nd from .image import * from . import mylogger try: from astropy.io import fits as pyfits except ImportError as err: import pyfits from . import functions as func from .output import write_islands from .readimage import Op_readimage from .preprocess import Op_preprocess from .rmsimage import Op_rmsimage from .threshold import Op_threshold from .collapse import Op_collapse class Op_islands(Op): """Detect islands of emission in the image All detected islands are stored in the list img.islands, where each individual island is represented as an instance of class Island. The option to detect islands on a different "detection" image is also available. This option is useful for example when a primary beam correction is used -- it is generally better to detect sources on the uncorrected image, but to measure them on the corrected image. Prerequisites: module rmsimage should be run first. """ def __call__(self, img): mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Islands") opts = img.opts minsize = opts.minpix_isl if minsize is None: minsize = int(img.pixel_beamarea()/3.0) # 1/3 of beam area in pixels if minsize < 6: minsize = 6 # Need at least 6 pixels to obtain good fits mylogger.userinfo(mylog, "Minimum number of pixels per island", '%i' % minsize) img.minpix_isl = minsize maxsize = opts.maxpix_isl if maxsize is None: maxsize = N.inf img.maxpix_isl = maxsize if opts.detection_image != '': # Use a different image for island detection. The detection # image and the measurement image must have the same shape # and be registered. Otherwise, one could reproject the # detection image using, e.g., the Kapteyn package. # # First, set up up an Image object and run a limited # op_chain. from . import _run_op_list mylogger.userinfo(mylog, "\nDetermining islands from detection image") det_chain, det_opts = self.setpara_bdsm(img, opts.detection_image) det_img = Image(det_opts) det_img.log = 'Detection image' success = _run_op_list(det_img, det_chain) if not success: return # Check that the ch0 images are the same size ch0_map = img.ch0_arr det_ch0_map = det_img.ch0_arr det_shape = det_ch0_map.shape ch0_shape = ch0_map.shape if det_shape != ch0_shape: raise RuntimeError("Detection image shape does not match that of input image.") # Run through islands and correct the image and rms, mean and max values corr_islands = [] mean_map = img.mean_arr rms_map = img.rms_arr for i, isl in enumerate(det_img.islands): islcp = isl.copy(img.pixel_beamarea(), image=ch0_map[tuple(isl.bbox)], mean=mean_map[tuple(isl.bbox)], rms=rms_map[tuple(isl.bbox)]) islcp.island_id = i corr_islands.append(islcp) img.islands = corr_islands img.nisl = len(img.islands) img.pyrank = det_img.pyrank img.minpix_isl = det_img.minpix_isl mylogger.userinfo(mylog, "\nContinuing processing using primary image") else: if opts.src_ra_dec is not None: mylogger.userinfo(mylog, "Constructing islands at user-supplied source locations") img.islands = self.coords_to_isl(img, opts) else: img.islands = self.ndimage_alg(img, opts) img.nisl = len(img.islands) mylogger.userinfo(mylog, "Number of islands found", '%i' % len(img.islands)) ch0_map = img.ch0_arr ch0_shape = ch0_map.shape pyrank = N.zeros(ch0_shape, dtype=N.int32) for i, isl in enumerate(img.islands): isl.island_id = i pyrank[tuple(isl.bbox)] += N.invert(isl.mask_active) * (i + 1) pyrank -= 1 # align pyrank values with island ids and set regions outside of islands to -1 if opts.output_all: write_islands(img) if opts.savefits_rankim: func.write_image_to_file(img.use_io, img.imagename + '_pyrank.fits', pyrank, img) img.pyrank = pyrank img.completed_Ops.append('islands') return img def ndimage_alg(self, img, opts): """Island detection using scipy.ndimage Use scipy.ndimage.label to detect islands of emission in the image. Island is defined as group of tightly connected (8-connectivity for 2D images) pixels with emission. The following cuts are applied: - pixel is considered to have emission if it is 'thresh_isl' times higher than RMS. - Island should have at least 'minsize' active pixels - There should be at lease 1 pixel in the island which is 'thresh_pix' times higher than noise (peak clip). Parameters: image, mask: arrays with image data and mask mean, rms: arrays with mean & rms maps thresh_isl: threshold for 'active pixels' thresh_pix: threshold for peak minsize: minimal acceptable island size Function returns a list of Island objects. """ ### islands detection mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Islands") image = img.ch0_arr mask = img.mask_arr rms = img.rms_arr mean = img.mean_arr thresh_isl = opts.thresh_isl thresh_pix = img.thresh_pix clipped_mean = img.clipped_mean saverank = opts.savefits_rankim # act_pixels is true if significant emission if img.masked: act_pixels = ~(mask.copy()) act_pixels[~mask] = (image[~mask]-mean[~mask])/thresh_isl >= rms[~mask] else: act_pixels = (image-mean)/thresh_isl >= rms # dimension of image rank = len(image.shape) # generates matrix for connectivity, in this case, 8-conn connectivity = nd.generate_binary_structure(rank, rank) # labels = matrix with value = (initial) island number labels, count = nd.label(act_pixels, connectivity) # slices has limits of bounding box of each such island slices = nd.find_objects(labels) img.island_labels = labels ### apply cuts on island size and peak value pyrank = N.zeros(image.shape, dtype=N.int32) res = [] islid = 0 for idx, s in enumerate(slices): idx += 1 # nd.labels indices are counted from 1 # number of pixels inside bounding box which are in island isl_size = (labels[s] == idx).sum() isl_peak = nd.maximum(image[s], labels[s], idx) isl_maxposn = tuple(N.array(N.unravel_index(N.nanargmax(image[s]), image[s].shape))+\ N.array((s[0].start, s[1].start))) if (isl_size >= img.minpix_isl) and (isl_size <= img.maxpix_isl) and (isl_peak - mean[isl_maxposn])/thresh_pix > rms[isl_maxposn]: isl = Island(image, mask, mean, rms, labels, s, idx, img.pixel_beamarea()) res.append(isl) pyrank[tuple(isl.bbox)] += N.invert(isl.mask_active)*idx // idx return res def coords_to_isl(self, img, opts): """Construct islands around given coordinates with given size. Returns a list of island objects. """ mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Islands") coords = opts.src_ra_dec # list of RA and Dec tuples isl_radius_pix = opts.src_radius_pix if isl_radius_pix is None: isl_radius_pix = img.beam2pix(img.beam)[0] # twice beam major axis radius at half max (= FWHM) res = [] for idx, coord in enumerate(coords): idx += 1 # nd.labels indices are counted from 1 isl_posn_pix = img.sky2pix(coord) image = img.ch0_arr mask = img.mask_arr rms = img.rms_arr mean = img.mean_arr labels = func.make_src_mask(image.shape, isl_posn_pix, isl_radius_pix) if img.masked: aper_mask = N.where(labels.astype(bool) & ~mask) else: aper_mask = N.where(labels.astype(bool)) if N.size(aper_mask) >= img.minpix_isl and N.size(aper_mask) <= img.maxpix_isl: labels[aper_mask] = idx s = [slice(max(0, isl_posn_pix[0] - isl_radius_pix - 1), min(image.shape[0], isl_posn_pix[0] + isl_radius_pix + 1)), slice(max(0, isl_posn_pix[1] - isl_radius_pix - 1), min(image.shape[1], isl_posn_pix[1] + isl_radius_pix + 1))] isl = Island(image, mask, mean, rms, labels, s, idx, img.pixel_beamarea()) res.append(isl) return res def setpara_bdsm(self, img, det_file): chain=[Op_readimage(), Op_collapse(), Op_preprocess, Op_rmsimage(), Op_threshold(), Op_islands()] opts = img.opts.to_dict() opts['filename'] = det_file opts['detection_image'] = '' opts['polarisation_do'] = False ops = [] for op in chain: if isinstance(op, type): ops.append(op()) else: ops.append(op) return ops, opts from .image import * class Island(object): """Instances of this class represent islands of emission in the image. Its primary use is a container for all kinds of data describing island. """ def __init__(self, img, mask, mean, rms, labels, bbox, idx, beamarea, origin=None, noise_mask=None, copy=False): """Create Island instance. Parameters: img, mask, mean, rms: arrays describing image labels: labels array from scipy.ndimage bbox: slices """ # Add attribute definitions needed for output self.island_id_def = Int(doc="Island id, starting from 0", colname='Isl_id') self.shapelet_basis_def = String(doc="Coordinate system for shapelet decomposition (cartesian/polar)", colname='Basis', units=None) self.shapelet_beta_def = Float(doc="Value of shapelet scale beta", colname='Beta', units=None) self.shapelet_nmax_def = Int(doc="Maximum value of shapelet order", colname='NMax', units=None) self.shapelet_posn_sky_def = List(Float(), doc="Posn (RA, Dec in deg) of shapelet centre", colname=['RA', 'DEC'], units=['deg', 'deg']) self.shapelet_posn_skyE_def = List(Float(), doc="Error on sky coordinates of shapelet centre", colname=['E_RA', 'E_DEC'], units=['deg', 'deg']) self.shapelet_cf_def = NArray(doc="Coefficient matrix of the shapelet decomposition", colname='Coeff_matrix', units=None) if not copy: ### we make bbox slightly bigger self.oldbbox = bbox self.oldidx = idx bbox = self.__expand_bbox(bbox, img.shape) origin = [b.start for b in bbox] # easier in case ndim > 2 data = img[tuple(bbox)] bbox_rms_im = rms[tuple(bbox)] bbox_mean_im = mean[tuple(bbox)] ### create (inverted) masks # Note that mask_active is the island mask; mask_noisy marks only # the noisy pixels in the island image. If you want to mask the # noisy pixels, set the final mask to: # mask = mask_active + mask_noisy isl_mask = (labels[tuple(bbox)] == idx) noise_mask = (labels[tuple(bbox)] == 0) N.logical_or(noise_mask, isl_mask, noise_mask) ### invert masks N.logical_not(isl_mask, isl_mask) N.logical_not(noise_mask, noise_mask) if isinstance(mask, N.ndarray): noise_mask[mask[tuple(bbox)]] = True isl_mask[mask[tuple(bbox)]] = True else: if origin is None: origin = [b.start for b in bbox] isl_mask = mask if noise_mask is None: noise_mask = mask data = img bbox_rms_im = rms bbox_mean_im = mean self.oldbbox = bbox self.oldidx = idx ### finish initialization isl_size = N.sum(~isl_mask) self.island_id = idx self.bbox = bbox self.origin = origin self.image = data self.mask_active = isl_mask self.mask_noisy = noise_mask self.shape = data.shape self.size_active = isl_size self.max_value = N.max(self.image[~self.mask_active]) in_bbox_and_unmasked = N.where(~N.isnan(bbox_rms_im)) self.rms = bbox_rms_im[in_bbox_and_unmasked].mean() in_bbox_and_unmasked = N.where(~N.isnan(bbox_mean_im)) self.mean = bbox_mean_im[in_bbox_and_unmasked].mean() self.islmean = bbox_mean_im[in_bbox_and_unmasked].mean() self.total_flux = N.nansum(self.image[in_bbox_and_unmasked])/beamarea pixels_in_isl = N.sum(~N.isnan(self.image[self.mask_active])) # number of unmasked pixels assigned to current island self.total_fluxE = func.nanmean(bbox_rms_im[in_bbox_and_unmasked]) * N.sqrt(pixels_in_isl/beamarea) # Jy self.border = self.get_border() self.gaul = [] self.fgaul = [] self.sources = [] self.gresid_mean = 0.0 self.gresid_rms = 0.0 def __setstate__(self, state): """Needed for multiprocessing""" self.mean = state['mean'] self.rms = state['rms'] self.image = state['image'] self.islmean = state['islmean'] self.mask_active = state['mask_active'] self.mask_noisy = state['mask_noisy'] self.size_active = state['size_active'] self.shape = state['shape'] self.origin = state['origin'] self.island_id = state['island_id'] self.oldidx = state['oldidx'] self.bbox = state['bbox'] def __getstate__(self): """Needed for multiprocessing""" state = {} state['mean'] = self.mean state['rms'] = self.rms state['image'] = self.image state['islmean'] = self.islmean state['mask_active'] = self.mask_active state['mask_noisy'] = self.mask_noisy state['size_active'] = self.size_active state['shape'] = self.shape state['origin'] = self.origin state['island_id'] = self.island_id state['oldidx'] = self.oldidx state['bbox'] = self.bbox return state ### do map etc in case of ndim image def __expand_bbox(self, bbox, shape): """Expand bbox of the image by 1 pixel""" def __expand(bbox, shape): return slice(int(max(0, bbox.start - 1)), int(min(shape, bbox.stop + 1))) ebbox = [__expand(b, shape[i]) for i, b in enumerate(bbox)] return ebbox def copy(self, pixel_beamarea, image=None, mean=None, rms=None): mask = self.mask_active noise_mask = self.mask_noisy if image is None: image = self.image if mean is None: mean = N.zeros(mask.shape, dtype=N.float32) + self.mean if rms is None: rms = N.zeros(mask.shape, dtype=N.float32) + self.rms bbox = self.bbox idx = self.oldidx origin = self.origin return Island(image, mask, mean, rms, None, bbox, idx, pixel_beamarea, origin=origin, noise_mask=noise_mask, copy=True) def get_border(self): """ From all valid island pixels, generate the border.""" mask = ~self.mask_active border = N.transpose(N.asarray(N.where(mask ^ nd.binary_erosion(mask)))) + self.origin return N.transpose(N.array(border)) PyBDSF-1.10.1/bdsf/make_residimage.py000066400000000000000000000222701420247104600172220ustar00rootroot00000000000000"""Module make_residimage. It calculates residual image from the list of gaussians and shapelets """ from __future__ import absolute_import import numpy as N from scipy import stats # for skew and kurtosis from .image import * from .shapelets import * from . import mylogger class Op_make_residimage(Op): """Creates an image from the fitted gaussians or shapelets. The resulting model image is stored in the resid_gaus or resid_shap attribute. Prerequisites: module gausfit or shapelets should be run first. """ def __call__(self, img): from . import functions as func from copy import deepcopy as cp import os mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"ResidImage") mylog.info("Calculating residual image after subtracting reconstructed gaussians") shape = img.ch0_arr.shape thresh= img.opts.fittedimage_clip resid_gaus = cp(img.ch0_arr) model_gaus = N.zeros(shape, dtype=N.float32) for g in img.gaussians: C1, C2 = g.centre_pix if hasattr(g, 'wisland_id') and img.waveletimage: isl = img.islands[g.wisland_id] else: isl = img.islands[g.island_id] b = self.find_bbox(thresh*isl.rms, g) bbox = N.s_[max(0, int(C1-b)):min(shape[0], int(C1+b+1)), max(0, int(C2-b)):min(shape[1], int(C2+b+1))] x_ax, y_ax = N.mgrid[bbox] ffimg = func.gaussian_fcn(g, x_ax, y_ax) resid_gaus[bbox] = resid_gaus[bbox] - ffimg model_gaus[bbox] = model_gaus[bbox] + ffimg # Apply mask to model and resid images if hasattr(img, 'rms_mask'): mask = img.rms_mask else: mask = img.mask_arr if isinstance(img.mask_arr, N.ndarray): pix_masked = N.where(img.mask_arr == True) model_gaus[pix_masked] = N.nan resid_gaus[pix_masked] = N.nan img.model_gaus_arr = model_gaus img.resid_gaus_arr = resid_gaus if img.opts.output_all: if img.waveletimage: resdir = img.basedir + '/wavelet/residual/' moddir = img.basedir + '/wavelet/model/' else: resdir = img.basedir + '/residual/' moddir = img.basedir + '/model/' if not os.path.exists(resdir): os.makedirs(resdir) if not os.path.exists(moddir): os.makedirs(moddir) func.write_image_to_file(img.use_io, img.imagename + '.resid_gaus.fits', resid_gaus, img, resdir) mylog.info('%s %s' % ('Writing', resdir+img.imagename+'.resid_gaus.fits')) func.write_image_to_file(img.use_io, img.imagename + '.model.fits', (img.ch0_arr - resid_gaus), img, moddir) mylog.info('%s %s' % ('Writing', moddir+img.imagename+'.model_gaus.fits')) ### residual rms and mean per island for isl in img.islands: resid = resid_gaus[tuple(isl.bbox)] self.calc_resid_mean_rms(isl, resid, type='gaus') # Calculate some statistics for the Gaussian residual image non_masked = N.where(~N.isnan(img.ch0_arr)) mean = N.mean(resid_gaus[non_masked], axis=None) std_dev = N.std(resid_gaus[non_masked], axis=None) skew = stats.skew(resid_gaus[non_masked], axis=None) kurt = stats.kurtosis(resid_gaus[non_masked], axis=None) stat_msg = "Statistics of the Gaussian residual image:\n" stat_msg += " mean: %.3e (Jy/beam)\n" % mean stat_msg += " std. dev: %.3e (Jy/beam)\n" % std_dev stat_msg += " skew: %.3f\n" % skew stat_msg += " kurtosis: %.3f" % kurt mylog.info(stat_msg) # Now residual image for shapelets if img.opts.shapelet_do: mylog.info("Calculating residual image after subtracting reconstructed shapelets") shape = img.ch0_arr.shape fimg = N.zeros(shape, dtype=N.float32) for isl in img.islands: if hasattr(isl, 'shapelet_beta'): if isl.shapelet_beta > 0: # make sure shapelet has nonzero scale for this island mask=isl.mask_active cen=isl.shapelet_centre-N.array(isl.origin) basis, beta, nmax, cf = isl.shapelet_basis, isl.shapelet_beta, \ isl.shapelet_nmax, isl.shapelet_cf image_recons=reconstruct_shapelets(isl.shape, mask, basis, beta, cen, nmax, cf) fimg[tuple(isl.bbox)] += image_recons model_shap = fimg resid_shap = img.ch0_arr - fimg if img.opts.shapelet_gresid: # also subtract Gaussian model image shape = img.ch0_arr.shape thresh= img.opts.fittedimage_clip model_gaus = N.zeros(shape, dtype=N.float32) for isl in img.islands: for g in isl.gaul: C1, C2 = g.centre_pix b = self.find_bbox(thresh*isl.rms, g) bbox = N.s_[max(0, int(C1-b)):min(shape[0], int(C1+b+1)), max(0, int(C2-b)):min(shape[1], int(C2+b+1))] x_ax, y_ax = N.mgrid[bbox] ffimg = func.gaussian_fcn(g, x_ax, y_ax) model_gaus[bbox] = model_gaus[bbox] + ffimg resid_shap -= model_gaus # Apply mask to model and resid images if hasattr(img, 'rms_mask'): mask = img.rms_mask else: mask = img.mask_arr if isinstance(mask, N.ndarray): pix_masked = N.where(mask == True) model_shap[pix_masked] = N.nan resid_shap[pix_masked] = N.nan img.model_shap_arr = model_shap img.resid_shap_arr = resid_shap if img.opts.output_all: func.write_image_to_file(img.use_io, img.imagename + '.resid_shap.fits', resid_shap, img, resdir) mylog.info('%s %s' % ('Writing ', resdir+img.imagename+'.resid_shap.fits')) ### shapelet residual rms and mean per island for isl in img.islands: resid = resid_shap[tuple(isl.bbox)] self.calc_resid_mean_rms(isl, resid, type='shap') # Calculate some statistics for the Shapelet residual image non_masked = N.where(~N.isnan(img.ch0_arr)) mean = N.mean(resid_shap[non_masked], axis=None) std_dev = N.std(resid_shap[non_masked], axis=None) skew = stats.skew(resid_shap[non_masked], axis=None) kurt = stats.kurtosis(resid_shap[non_masked], axis=None) mylog.info("Statistics of the Shapelet residual image:") mylog.info(" mean: %.3e (Jy/beam)" % mean) mylog.info(" std. dev: %.3e (Jy/beam)" % std_dev) mylog.info(" skew: %.3f" % skew) mylog.info(" kurtosis: %.3f" % kurt) img.completed_Ops.append('make_residimage') return img def find_bbox(self, thresh, g): """Calculate bounding box for gaussian. This function calculates size of the box for evaluating gaussian, so that value of gaussian is smaller than threshold outside of the box. Parameters: thres: threshold g: Gaussian object """ from math import ceil, sqrt, log A = g.peak_flux S = g.size_pix[0] if A == 0.0: return ceil(S*1.5) if thresh/A >= 1.0 or thresh/A <= 0.0: return ceil(S*1.5) return ceil(S*sqrt(-2*log(thresh/A))) def calc_resid_mean_rms(self, isl, resid, type): """Inserts mean and rms of residual image into isl, src, and gaussians type - specifies 'gaus' or 'shap' """ if len(isl.gaul) == 0: resid = N.zeros(isl.shape, dtype=N.float32) ind = N.where(~isl.mask_active) resid = resid[ind] if type == 'gaus': isl.gresid_rms = N.std(resid) isl.gresid_mean = N.mean(resid) else: isl.sresid_rms = N.std(resid) isl.sresid_mean = N.mean(resid) if hasattr(isl, 'sources'): for src in isl.sources: if type == 'gaus': src.gresid_rms = N.std(resid) src.gresid_mean = N.mean(resid) else: src.sresid_rms = N.std(resid) src.sresid_mean = N.mean(resid) for g in src.gaussians: if type == 'gaus': g.gresid_rms = N.std(resid) g.gresid_mean = N.mean(resid) else: g.sresid_rms = N.std(resid) g.sresid_mean = N.mean(resid) if hasattr(isl, 'dsources'): for dsrc in isl.dsources: # Handle dummy sources (if any) if type == 'gaus': dsrc.gresid_rms = N.std(resid) dsrc.gresid_mean = N.mean(resid) else: dsrc.sresid_rms = N.std(resid) dsrc.sresid_mean = N.mean(resid) PyBDSF-1.10.1/bdsf/multi_proc.py000066400000000000000000000170561420247104600162770ustar00rootroot00000000000000"""Multiprocessing module to handle parallelization. This module can optionally update a statusbar and can divide tasks between cores using weights (so that each core gets a set of tasks with the same total weight). Adapted from a module by Brian Refsdal at SAO, available at AstroPython (http://www.astropython.org/snippet/2010/3/Parallel-map-using-multiprocessing). """ from __future__ import print_function import traceback import sys import numpy _multi = False _ncpus = 1 try: # May raise ImportError import multiprocessing # Set spawn method to "fork". This is needed for macOS on Python 3.8+ where the # default has been changed to "spawn", causing problems (see the discussion at # https://github.com/ipython/ipython/issues/12396) if sys.platform == 'darwin': if sys.version_info[0] == 3 and sys.version_info[1] >= 8: multiprocessing.set_start_method('fork') _multi = True # May raise NotImplementedError _ncpus = min(multiprocessing.cpu_count(), 8) except: pass __all__ = ('parallel_map',) def worker(f, ii, chunk, out_q, err_q, lock, bar, bar_state): """ A worker function that maps an input function over a slice of the input iterable. :param f : callable function that accepts argument from iterable :param ii : process ID :param chunk: slice of input iterable :param out_q: thread-safe output queue :param err_q: thread-safe queue to populate on exception :param lock : thread-safe lock to protect a resource ( useful in extending parallel_map() ) :param bar: statusbar to update during fit :param bar_state: statusbar state dictionary """ vals = [] # iterate over slice for val in chunk: try: result = f(val) except Exception as e: etype,val,tbk=sys.exc_info() print('Thread raised exception',e) print('Traceback of thread is:') print('-------------------------') traceback.print_tb(tbk) print('-------------------------') err_q.put(e) return vals.append(result) # update statusbar if bar is not None: if bar_state['started']: bar.pos = bar_state['pos'] bar.spin_pos = bar_state['spin_pos'] bar.started = bar_state['started'] increment = bar.increment() bar_state['started'] = bar.started bar_state['pos'] += increment bar_state['spin_pos'] += increment if bar_state['spin_pos'] >= 4: bar_state['spin_pos'] = 0 # output the result and task ID to output queue out_q.put( (ii, vals) ) def run_tasks(procs, err_q, out_q, num): """ A function that executes populated processes and processes the resultant array. Checks error queue for any exceptions. :param procs: list of Process objects :param out_q: thread-safe output queue :param err_q: thread-safe queue to populate on exception :param num : length of resultant array """ # function to terminate processes that are still running. die = (lambda vals : [val.terminate() for val in vals if val.exitcode is None]) try: for proc in procs: proc.start() for proc in procs: proc.join() except Exception as e: # kill all slave processes on ctrl-C die(procs) raise e if not err_q.empty(): # kill all on any exception from any one slave die(procs) raise err_q.get() # Processes finish in arbitrary order. Process IDs double # as index in the resultant array. results=[None]*num; for i in range(num): idx, result = out_q.get() results[idx] = result # Remove extra dimension added by array_split result_list = [] for result in results: result_list += result return result_list def parallel_map(function, sequence, numcores=None, bar=None, weights=None): """ A parallelized version of the native Python map function that utilizes the Python multiprocessing module to divide and conquer a sequence. parallel_map does not yet support multiple argument sequences. :param function: callable function that accepts argument from iterable :param sequence: iterable sequence :param numcores: number of cores to use (if None, all are used) :param bar: statusbar to update during fit :param weights: weights to use when splitting the sequence """ if not callable(function): raise TypeError("input function '%s' is not callable" % repr(function)) if not numpy.iterable(sequence): raise TypeError("input '%s' is not iterable" % repr(sequence)) sequence = list(sequence) size = len(sequence) if not _multi or size == 1: results = list(map(function, sequence)) if bar is not None: bar.stop() return results # Set default number of cores to use. Try to leave one core free for pyplot. if numcores is None: numcores = _ncpus - 1 if numcores > _ncpus - 1: numcores = _ncpus - 1 if numcores < 1: numcores = 1 # Returns a started SyncManager object which can be used for sharing # objects between processes. The returned manager object corresponds # to a spawned child process and has methods which will create shared # objects and return corresponding proxies. manager = multiprocessing.Manager() # Create FIFO queue and lock shared objects and return proxies to them. # The managers handles a server process that manages shared objects that # each slave process has access to. Bottom line -- thread-safe. out_q = manager.Queue() err_q = manager.Queue() lock = manager.Lock() bar_state = manager.dict() if bar is not None: bar_state['pos'] = bar.pos bar_state['spin_pos'] = bar.spin_pos bar_state['started'] = bar.started # if sequence is less than numcores, only use len sequence number of # processes if size < numcores: numcores = size # group sequence into numcores-worth of chunks if weights is None or numcores == size: # No grouping specified (or there are as many cores as # processes), so divide into equal chunks sequence = numpy.array_split(sequence, numcores) else: # Group so that each group has roughly an equal sum of weights weight_per_core = numpy.sum(weights)/float(numcores) cut_values = [] temp_sum = 0.0 for indx, weight in enumerate(weights): temp_sum += weight if temp_sum > weight_per_core: cut_values.append(indx+1) temp_sum = weight if len(cut_values) > numcores - 1: cut_values = cut_values[0:numcores-1] sequence = numpy.array_split(sequence, cut_values) # Make sure there are no empty chunks at the end of the sequence while len(sequence[-1]) == 0: sequence.pop() procs = [multiprocessing.Process(target=worker, args=(function, ii, chunk, out_q, err_q, lock, bar, bar_state)) for ii, chunk in enumerate(sequence)] try: results = run_tasks(procs, err_q, out_q, len(sequence)) if bar is not None: if bar.started: bar.stop() return results except KeyboardInterrupt: for proc in procs: if proc.exitcode is None: proc.terminate() proc.join() raise PyBDSF-1.10.1/bdsf/mylogger.py000066400000000000000000000103531420247104600157400ustar00rootroot00000000000000""" WARNING, ERROR, and CRITICAL are always output to screen and to log file. INFO and USERINFO always go to the log file. DEBUG goes to log file if debug is True. USERINFO goes to screen only if quiet is False. Use as follows: mylog = mylogger.logging.getLogger("name") mylog.info('info') --> print to logfile, but not to screen mylogger.userinfo(mylog, 'info') --> print to screen (if quiet==False) and to logfile """ import logging from socket import gethostname import copy def init_logger(logfilename, quiet=False, debug=False): logging.USERINFO = logging.INFO + 1 logging.addLevelName(logging.USERINFO, 'USERINFO') logger = logging.root logger.setLevel(logging.DEBUG) # First remove any existing handlers (in case PyBDSM has been run # before in this session but the quiet or debug options have changed while len(logger.handlers) > 0: logger.removeHandler(logger.handlers[0]) # File handlers fh = ColorStripperHandler(logfilename) if debug: # For log file and debug on, print name and levelname fh.setLevel(logging.DEBUG) fmt1 = MultiLineFormatter('%(asctime)s %(name)-20s:: %(levelname)-8s: '\ '%(message)s', datefmt='%a %d-%m-%Y %H:%M:%S') else: # For log file and debug off, don't print name and levelname as # they have no meaning to the user. fh.setLevel(logging.INFO) fmt1 = MultiLineFormatter('%(asctime)s:: %(levelname)-8s: %(message)s', datefmt='%a %d-%m-%Y %H:%M:%S') fh.setFormatter(fmt1) logger.addHandler(fh) # Console handler for warning, error, and critical: format includes levelname # ANSI colors are used ch = logging.StreamHandler() ch.setLevel(logging.WARNING) fmt2 = logging.Formatter('\033[31;1m%(levelname)s\033[0m: %(message)s') ch.setFormatter(fmt2) logger.addHandler(ch) # Console handler for USERINFO only: format does not include levelname # (the user does not need to see the levelname, as it has no meaning to them) # ANSI colors are allowed chi = logging.StreamHandler() chi.addFilter(InfoFilter()) if quiet: # prints nothing, since filter lets only USERINFO through chi.setLevel(logging.WARNING) else: # prints only USERINFO chi.setLevel(logging.USERINFO) fmt3 = logging.Formatter('%(message)s') chi.setFormatter(fmt3) logger.addHandler(chi) class InfoFilter(logging.Filter): # Lets only USERINFO through def filter(self, rec): return rec.levelno == logging.USERINFO class MultiLineFormatter(logging.Formatter): def format(self, record): str = logging.Formatter.format(self, record) header, footer = str.split(record.message) nocolor_header = strip_color(header) str = str.replace('\n', '\n' + ' '*len(nocolor_header)) return str def userinfo(mylog, desc_str, val_str=''): """Writes a nicely formatted string to the log file and console mylog = logger desc_str = description string / message val_str = value string Message is constructed as: 'desc_str .... : val_str' """ bc = '\033[1;34m' # Blue nc = '\033[0m' # Normal text color if val_str == '': sep = '' if desc_str[:1] == '\n': bc += '\n' desc_str = desc_str[1:] desc_str = bc + '--> ' + desc_str + nc else: sep = ' : ' if len(desc_str) < 40: desc_str += ' ' if len(desc_str) < 40: while len(desc_str) < 41: desc_str += '.' else: while len(desc_str) < 41: desc_str += ' ' mylog.log(logging.USERINFO, desc_str+sep+val_str) class ColorStripperHandler(logging.FileHandler): def emit(self, record): """Strips ANSI color codes from file stream""" myrecord = copy.copy(record) nocolor_msg = strip_color(myrecord.msg) myrecord.msg = nocolor_msg logging.FileHandler.emit(self, myrecord) def strip_color(msg): """Strips specific ANSI color codes from an input string The color codes are hard-coded to those used above in userinfo() and in WARNING, ERROR, and CRITICAL. """ nocolor_msg = '' a = msg.split('\033[1;34m') for b in a: c = b.split('\033[0m') for d in c: e = d.split('\033[31;1m') for f in e: nocolor_msg += f return nocolor_msg PyBDSF-1.10.1/bdsf/nat/000077500000000000000000000000001420247104600143215ustar00rootroot00000000000000PyBDSF-1.10.1/bdsf/nat/__init__.py000066400000000000000000002553071420247104600164460ustar00rootroot00000000000000# Adapted for numpy/ma/cdms2 by convertcdms.py """--------------------------------------------------------------------------------------------- INTRODUCTION TO NGMATH The ngmath library is a collection of interpolators and approximators for one-dimensional, two-dimensional and three-dimensional data. The packages, which were obtained from NCAR, are: natgrid -- a two-dimensional random data interpolation package based on Dave Watson's nngridr. dsgrid -- a three-dimensional random data interpolator based on a simple inverse distance weighting algorithm. fitgrid -- an interpolation package for one-dimensional and two-dimensional gridded data based on Alan Cline's Fitpack. Fitpack uses splines under tension to interpolate in one and two dimensions. csagrid -- an approximation package for one-dimensional, two-dimensional and three-dimensional random data based on David Fulker's Splpack. csagrid uses cubic splines to calculate its approximation function. cssgrid -- an interpolation package for random data on the surface of a sphere based on the work of Robert Renka. cssgrid uses cubic splines to calculate its interpolation function. shgrid -- an interpolation package for random data in 3-space based on the work of Robert Renka. shgrid uses a modified Shepard's algorithm to calculate its interpolation function. COMPARISION OF NGMATH PACKAGES Three-dimensional packages -- shgrid, csagrid and dsgrid. shgrid is probably the package of choice for interpolation. It uses a least squares fit of biquadratics to construct its interpolation function. The interpolation function will pass through the original data points. csagrid uses a least squares fit of cubic splines to calculate its approximation function: the calculated surface will not necesarily pass through the original data points. The algorithm can become unstable in data sparse regions. dsgrid uses a weighted average algorithm and is stable in all cases, but the resultant interpolation is not usually smooth and execution time is very slow. dsgrid is probably best used when csagrid and shgrid fail or for comparative purposes. Two-dimensional packages -- natgrid, fitgrid, csagrid and dsgrid. natgrid is the package of choice in most cases. It implements a very stable algorithm and has parameters for adjusting the smoothness of the output surface. fitgrid offers user-settable parameters for specifiying derivatives along the boundary of the output grid which are not available in natgrid. csagrid produces an approximate two-dimensional surface which may be smoother than that produced by fitgrid and natgrid. dsgrid is not recommended for two-dimensional surfaces. natgrid is superior in all respects. One-dimensional packages -- fitgrid and csagrid. fitgrid is definitely the package of choice. It has many features not available in csagrid, such as interpolating parametric curves, finding integrals, handling periodic functions, allowing smoothing that varies from linear to a full cubic spline interpolation and specifying slopes at the end points. Interpolation on a sphere -- cssgrid. cssgrid is designed specifically for interpolating on a sphere. It uses cubic splines to calculate an interpolation function. NATGRID PACKAGE natgrid implements a natural neighbor interpolation method. The input for the interpolation is a set of randomly spaced two-dimensional coordinates with functional values at those coordinates; the output is a set of interpolated values at coordinates in a user specified rectangular grid. The coordinates in the output grid must be monotonic in each coordinate direction, but need not be evenly spaced. It is also possible to interpolate at a single point. natgrid uses a weighted average method that is much more sophisticated than the inverse distance weighted average used by dsgrid. One distinguishing quality of natural neighbor interpolation is the way in which a set of neighboring points (the natural neighbor) is selected to use for interpolating at a point. The natural neighbor selection process avoids the problems common to methods based on choosing a fixed number of neighboring points, or all points within a fixed distance. Another distinguishing quality of natural neighbor interpolation is the way that the weights are calculated for the functional values at the natural neighbor coordinates. These weights are based on proportionate area, rather than distances. The method of finding the natural neighbors and calculating area-based weights to produce interpolated values is called natural neighbor linear interpolation. This produces an interpolation surface that has a continous slope at all points, except at the original input points. The result of natural neighbor linear interpolation can be visualized as producing a snugly fit sheet stretched over all of the input points. The interpolation method in natgrid also allows for natural neighbor linear interpolation augmented by blending in gradient estimates. This is called natural neighbor nonlinear interpolation. It produces an interpolation surface that has a continuous slope at all locations; two tautness parameters can be set by the user to control the apparent smoothness of the output surface. NATGRID CONTENTS Access through Python to the natgrid package from NCAR's ngmath distribution is provided directly through the module natgridmodule.so which was generated as a Python C language extension in order to export the natgrid functions from the original C language library to Python. REQUIRED FILE natgridmodule.so -- the Python interface to the ngmath natgrid package. USEFUL FILES nat.py -- the object oriented interface including a general help package. natgridtest.py -- the code to test nat.py and to write documentation. USAGE This module is designed to use in two ways. One is through the use of the object oriented interface to the underlying functions. This approach is recommended for users not already familiar with the original natgrid distribtution because it simplifies the calls to the routines. The other method uses the original functions calling them directly from Python. ------------------- OBJECT ORIENTED APPROACH ---------------- The nat module contains the Natgrid class and its single method, rgrd, which provides access to all the natgrid functions. The object oriented approach has been organized as a two step process. STEP 1. To make an instance, r, type: import nat r = nat.Natgrid(xi, yi, xo, yo) or r = nat.Natgrid(xi, yi, xo, yo, listOutput = 'yes') where xi, yi and xo, yo are the input and output grid coordinate arrays. The optional listOutput must set to anything except 'no' if xo, yo are in list format as explained below. It is the responsibility of the user to set listOutput if the output is in the list form. The input grid must be organized in a list format always. The size of the xi array and the yi array are necessarily equal. For example, if there are n randomly spaced input data points, there are n values in xi and n values in yi. There are two possible formats for the output grid. The output grid coordinate arrays may be a list like the input array or it may be a rectangular grid. The choice between the two posibilities is made according to requirements in subseqent calls to the method function. The first choice is required if the subsequent call is to the single point mode interpolation. The list can have one or more points. Of course, the list could describe a rectangular grid. For example, a rectangular grid with 10 x values and 20 y values can be rewrtten in list form with 200 x value and 200 y values. However, this form requires calling the slower single point interpolator. The second choice is most efficient for the basic interpolation to a rectangular output grid. The output grid must be monotonic but need not be equally spced. The grid coordinate arrays can be single precision (numpy.float32) or double precision (numpy.float64). The decision on whether to call for a single or a double precision computation subsequently is made by looking at the type of these arrays. To look at the default settings for the control parameters and a brief description of thier properties, type r.printDefaultParameterTable() To change a setting type the new value. For example, to set igr to 1, type r.igr = 1 To find a value without printing the table, type the name. For example, to exam the value of hor, type r.hor To check the settings type r.printInstanceParameterTable() -- prints in tabular form the parameters used in subsequent calls to the method function rgrd. or printStoredParameters() -- prints the parameters in memory which may differ from the above if the user has made more than one instance of the Natgrid class. STEP 2. natgrid is restricted to two dimensions . Consequently, it is the user's responsibility to reduce the processing of higher dimensional data to a sequence of calls using only two dimensional data. The computations are divided into two groups depending on whether the output arrays are in list form or in rectilinear grid form. If they are in list format the single point mode is called to interpolate to those individual points. This is the only process possible. On the other hand, if the output goes to a rectangular grid there are more choices. In addition to carrying out linear and nonlinear interpolations, it is possible to request aspects and slopes. The aspect at a point on the interpolated surface is the direction of steepest descend. The slope is the value of the partial derivative taken in the direction of the aspect. The slope is measured as an angle that is zero in a horizonal surface and positive below the horizontal. The following examples cover the basic computations. They start with a indication of the appropriate STEP 1. Example 1: the basic natural neighbor linear interpolation As STEP 1 make an instance, r, with: import nat r = nat.Natgrid(xi, yi, xo, yo) where the xo, yo grid is rectilinear as explained above in STEP 1. Then call the primary interpolation computation to regrid the input data, dataIn, on the grid (xi, yi) to the output data, dataOut, on the grid (xo, yo), with dataOut = r.rgrd( dataIn ) The computation is either single or double precision as determined by the precision submitted in the grid description in STEP 1. It is also possible to request a wrap in the input grid and the input data in the longitude direction, assumed to be the yi grid coordinate, by adding a keyword as dataOut = r.rgrd( dataIn, wrap = 'yes' ) Example 2: natural neighbor linear interpolation returning the aspect and the slope. As STEP 1 make an instance, r, with: import nat r = nat.Natgrid(xi, yi, xo, yo) where the xo, yo grid is rectilinear as explained above in STEP 1. Then call the primary interpolation computation to regrid the input data, dataIn, on the grid (xi, yi) to the output data, dataOut, on the grid (xo, yo), while asking for the aspect and the slope on this output grid, with dataOut, a, s = r.rgrd( dataIn, aspectSlope = 'yes' ) where a is the aspect, the direction of the steepest descent in degrees measured from 'north' and s is the slope in degrees measured from the horizontal. Necessarily, these are arrays aligned with the rectilinear output grid, xo, yo. The computation is either single or double precision as determined by the precision submitted in the grid description in STEP 1. It is also possible to request a wrap in the input grid and the input data in the longitude direction, assumed to be the yi grid coordinate, by adding a keyword as dataOut, a, s = r.rgrd( dataIn, aspectSlope = 'yes', wrap = 'yes' ) Example 3: the basic natural neighbor nonlinear interpolation The procedure for the nonlinear interpolation differs from the linear case in the need to set the control parameter igr. Follow Example 1 and insert the following statament after making the instance, r. r.igr = 1 Example 4: natural neighbor nonlinear interpolation returning the aspect and the slope. The procedure for the nonlinear interpolation differs from the linear case in the need to set the control parameter igr. Follow Example 2 and insert the following statament after making the instance, r. r.igr = 1 Example 5: single point mode natural neighbor linear interpolation As STEP 1 make an instance, r, with: import nat r = nat.Natgrid(xi, yi, xo, yo, listOutput = 'yes') where the xo, yo output grid is in the list form (not a rectangular output grid) as explained above in STEP 1. To call the single point mode interpolation computation to regrid the input data, dataIn, on the grid (xi, yi) to the output data, dataOut, on the grid (xo, yo), type dataOut = r.rgrd( dataIn ) The computation is either single or double precision as determined by the precision submitted in the grid description in STEP 1. In the single point mode it is not possible to request the aspect and the slope. Example 6: single point mode natural neighbor nonlinear interpolation The procedure for the nonlinear interpolation differs from the linear case in the need to set the control parameter igr. Follow Example 5 and insert the following statament after making the instance, r. r.igr = 1 ------------------- ORIGINAL FUNCTION APPROACH ----------------- The module natgridmodule.so exports the following functions to Python from the original ngmath C library: Single precision procedures: natgrids - primary function for gridding. seti - set int parameter values. geti - retrieve values for int parameters. setr - set float parameter values. getr - retrieve values for float parameters setc - set char parameter values. getc - retrieve values for char parameters. getaspects - get aspect values, if calculated by setting sdi = 1. getslopes - get slope values, if calculated by setting sdi = 1. pntinits - initiate single point mode. pnts - interpolate at a single point. pntend - terminate single point mode. Double precision procedures: natgridd - primary function for gridding. setrd - set float parameter values. getrd - retrieve values for float parameters getaspectd - get aspect values, if calculated by setting sdi = 1. getsloped - get slope values, if calculated by setting sdi = 1. pntinitd - initiate single point mode. pntd - interpolate at a single point. pntendd - terminate single point mode. Information on the use of the routines is available by importing natgridmodule and printing the docstring of interest. For example, documentation for the routine natgrids is obtained by typing import natgridmodule print natgridmodule.natgrids.__doc__ This same information is available in the help package. A description of the control parameters is not in the natgridmodule documentation. It can be found by typing import nat nat.printParameterTable() The documentation associated with the natgridmodule.so, such as the doctrings, describe the C code. DOCUMENTATION Documentation is provided through Python's docstrings, essentially Python style program comments. A help package provides instructions on the use of the natgrid module. A table of contents is printed to the screen by typing nat.help() after importing nat. A hard copy of all the pertinent 'docstring' documentation written to the file natgridmodule.doc can be produced by typing nat.document() As an alternate to using the help package, online documentation for the natgrids function, for example, is available directly from the natgrids doctring by typing import natgridmodule print natgridmodule.natgrids.__doc__ TESTING To run a test of the natgrid computations and to get a copy of this documentation, type cdat natgridtest.py --------------------------------------------------------------------------------------------------------------""" from __future__ import print_function # import string, math, sys, numpy, cdms2, natgridmodule import string, math, sys, numpy from . import natgridmodule # writeTestcase = 'yes' # try: # import cdms2 # except ImportError: # print 'Can not write test case results to netCDF files without module cdms' # writeTestcase = 'no' writeTestcase = 'no' usefilled = 'yes' try: import numpy.ma except ImportError: print('Can not convert from numpy.ma array to numpy array without module numpy.ma') usefilled = 'no' debug = 0 class Natgrid: #------------------------------------------------------------------------------------------------------------- # # Contents of Natgrid class # # # Natgrid class # __init__ -- initialization # rgrd -- the regridder called from Python # # rgrdPrimary -- called by rgrd if the output grid is montonically increasing # rgrdSinglePoint -- called by rgrd if the output grid is random or single point mode is selected # setInstanceParameters -- sets the C values to the instance values # #--------------------------------------------------------------------------------------------------------------- def __init__(self, xi, yi, xo, yo, listOutput = 'no'): """ -------------------------------------------------------------------------------------------------------- routine: __init__ for class Natgrid purpose: init makes an instance of the Natgrid class while performing the following: 1. checks the argument list for the correct types. 2. selects single or double precision computation. 3. assigns the coordinate grid arrays to self data. 4. assigns default control parameter values from the parameter dictionary. usage: r = nat.Natgrid(xi, yi, xo, yo) or r = nat.Natgrid(xi, yi, xo, yo, listOutput = 'yes') where xi, yi and xo, yo are the input and output grid coordinate arrays. The optional listOutput is set to anything except 'no' if xo, yo are in list format as explained below. The input grid must be organized in a list format always. The size of the xi array and the yi array are necessarily equal. For example, if there are n randomly spaced input data points, there are n values in xi and n values in yi. There are two possible formats for the output grid. The output grid coordinate arrays may be a list like the input array or it may be a rectangular grid. The choice between the two posibilities is made according to requirements in subseqent calls to the method function. The first choice is required if the subsequent call is to the single point mode interpolation. The list can have one or more points. Of course, the list could describe a rectangular grid. For example, a rectangular grid with 10 x values and 20 y values can be rewrtten in list form with 200 x value and 200 y values. However, this form requires calling the slower single point interpolator. The second choice is most efficient for the basic interpolation to a rectangular output grid. The output grid must be monotonic but need not be equally spced. Note: the index in the data associated with y varies the fastest. definition: __init__(self, xi, yi, xo, yo, listOutput = 'no'): --------------------------------------------------------------------------------------------------------""" # ---- check the input grid argument list try: size = len(xi) except: msg = 'CANNOT CREATE INSTANCE - The first argument must be an array' raise TypeError(msg) if size < 4: msg = 'CANNOT CREATE INSTANCE - The length of the input x coordindate grid must be greater than 3' raise ValueError(msg) try: size = len(yi) except: msg = 'CANNOT CREATE INSTANCE - The third argument must be an array' raise TypeError(msg) if size < 4: msg = 'CANNOT CREATE INSTANCE - The length of the input y coordindate grid must be greater than 3' raise ValueError(msg) # set the self data for the input grid self.nxi = len(xi) self.nyi = len(yi) if self.nxi != self.nyi: msg = 'CANNOT CREATE INSTANCE - The length of the input x and y coordindate grids must be equal' raise ValueError(msg) self.xi = xi self.yi = yi # ---- check the output grid argument list try: size = len(xo) except: msg = 'CANNOT CREATE INSTANCE - The second argument must be an array' raise TypeError(msg) try: size = len(yo) except: msg = 'CANNOT CREATE INSTANCE - The fourth argument must be an array' raise TypeError(msg) # set the self data for the output grid self.nxo = len(xo) self.nyo = len(yo) if listOutput == 'no': self.xo, self.yo, monotonic, self.xreverse, self.yreverse = checkdim(xo, yo) # monotonicity check if monotonic == 'no': msg = 'CANNOT CREATE INSTANCE - Rectangular output grid must be monotonic' raise ValueError(msg) self.listOutput = 'no' else: if self.nxo != self.nyo: msg = 'CANNOT CREATE INSTANCE - The list type output arrays must have the same length' raise ValueError(msg) else: self.xo = xo self.yo = yo self.xreverse = 'no' self.yreverse = 'no' self.listOutput = 'yes' # select the interpolation routines from the single or the double precision group - majority rules here numberSingles = 0 numberDoubles = 0 if xi.dtype.char == 'f': numberSingles = numberSingles + 1 else: numberDoubles = numberDoubles + 1 if xo.dtype.char == 'f': numberSingles = numberSingles + 1 else: numberDoubles = numberDoubles + 1 if yi.dtype.char == 'f': numberSingles = numberSingles + 1 else: numberDoubles = numberDoubles + 1 if yo.dtype.char == 'f': numberSingles = numberSingles + 1 else: numberDoubles = numberDoubles + 1 if debug == 1: print('number Singles and Doubles : ', numberSingles, numberDoubles) if numberSingles >= numberDoubles: self.group = 'single' if numberSingles < 4: sendmsg('Changing all the coordinate grid types to float32') xi = xi.astype(numpy.float32) xo = xo.astype(numpy.float32) yi = yi.astype(numpy.float32) yo = yo.astype(numpy.float32) else: self.group = 'double' if numberDoubles < 4: sendmsg('Changing all the coordinate grid types to float64') xi = xi.astype(numpy.float64) xo = xo.astype(numpy.float64) yi = yi.astype(numpy.float64) yo = yo.astype(numpy.float64) # set the parameter instance data to the default values defaultDict = Natgrid.makeDefaultParameterTable(self) self.adf = eval(defaultDict['adf'][2]) self.alg = eval(defaultDict['alg'][2]) self.asc = eval(defaultDict['asc'][2]) self.bI = eval(defaultDict['bI'][2]) self.bJ = eval(defaultDict['bJ'][2]) self.dup = eval(defaultDict['dup'][2]) self.ext = eval(defaultDict['ext'][2]) self.hor = eval(defaultDict['hor'][2]) self.igr = eval(defaultDict['igr'][2]) self.magx = eval(defaultDict['magx'][2]) self.magy = eval(defaultDict['magy'][2]) self.magz = eval(defaultDict['magz'][2]) self.non = eval(defaultDict['non'][2]) self.nul = eval(defaultDict['nul'][2]) self.rad = eval(defaultDict['rad'][2]) self.sdi = eval(defaultDict['sdi'][2]) self.upd = eval(defaultDict['upd'][2]) self.ver = eval(defaultDict['ver'][2]) def rgrd(self, dataIn, aspectSlope = 'no', wrap = 'no'): """ -------------------------------------------------------------------------------------------------------- routine: rgrd purpose: Perform one of the following: 1. natural neighbor linear interpolation to a rectilinear grid 2. natural neighbor linear interpolation to a rectilinear grid returning aspects and slopes 3. natural neighbor linear interpolation to a list of points in the single point mode 4. natural neighbor nonlinear interpolation to a rectilinear grid 5. natural neighbor nonlinear interpolation to a rectilinear grid returning aspects and slopes 6. natural neighbor nonlinear interpolation to a list of points in the single point mode Each of the computations can be single or double precison. The choice is made by examing the precision in the grid coordinate arrays. In addition, the choice of the single point mode is determined by the set of the listOuput parameter in creating an instance of the Natgrid class. Assuming that the instance, r, has been constructed, the choice between a linear or a nonlinear computation is made with the control parameter igr. The default calls for a linear calculation. To call for a nonlinear one, type r.igr = 1 usage: To interpolate the input data, dataIn, to the output data, dataOut, on the output grid, type dataOut = r.rgrd(dataIn) If the output grid is rectangular, it is possible to request the associated aspects and slopes with dataOut, aspect, slope = r.rgrd(dataIn, aspectSlope = 'yes') For global latitude-longitude grids, it is also possible to request a wrap in the input grid and the input data in the longitude direction, assumed to be the yi grid coordinate, (with or without associated aspects and slopes) with dataOut, aspect, slope = r.rgrd(dataIn, wrap = 'yes') or dataOut, aspect, slope = r.rgrd(dataIn, aspectSlope = 'yes', wrap = 'yes') definition: rgrd(self, dataIn, aspectSlope = 'no', wrap = 'no'): --------------------------------------------------------------------------------------------------------""" if self.nxi != len(dataIn): msg = 'CANNOT CREATE INSTANCE - The length of the input coordindate grids and the data must be equal' raise ValueError(msg) if usefilled == 'yes': dataIn = numpy.ma.filled(dataIn) # set the instance values of the parameters in the c code Natgrid.setInstanceParameters(self) if wrap == 'yes': self.xi, self.yi, dataIn = Natgrid.wrapAll(self, self.xi, self.yi, dataIn) self.nxi = len(self.xi) self.nyi = len(self.yi) if dataIn.dtype.char == 'f': # single precision if self.group == 'double': # change the grid type to match dataIn self.group = 'single' # change the grid type to match dataIn self.xi = self.xi.astype(numpy.float32) self.xo = self.xo.astype(numpy.float32) self.yi = self.yi.astype(numpy.float32) self.yo = self.yo.astype(numpy.float32) else: # double precision if self.group == 'single': # change the grid type to match dataIn self.group = 'double' # change the grid type to match dataIn self.xi = self.xi.astype(numpy.float64) self.xo = self.xo.astype(numpy.float64) self.yi = self.yi.astype(numpy.float64) self.yo = self.yo.astype(numpy.float64) if self.listOutput == 'no': # output grid is rectangular t = Natgrid.rgrdPrimary(self, dataIn, aspectSlope) else: # output grid is a list t = Natgrid.rgrdSinglePoint(self, dataIn) return t def rgrdPrimary(self, dataIn, aspectSlope): """ #------------------------------------------------------------------- # # #-------------------------------------------------------------------------""" if aspectSlope != 'no': self.sdi = 1 # calculate aspects and slopes # set the instance values of the parameters in the c code #Natgrid.setInstanceParameters(self) if dataIn.dtype.char == 'f': # single precision if debug == 1: print('In rgrdPrimary calling natgrids') dataOut, ier = natgridmodule.natgrids(self.nxi, self.xi, self.yi, dataIn, self.nxo, self.nyo, self.xo, self.yo) if ier != 0: msg = 'Error in return from natgrids call with -- ' + Natgrid.errorTable(self)[ier] raise ValueError(msg) if aspectSlope != 'no': nxo = self.nxo nyo = self.nyo a = numpy.zeros((nxo, nyo), numpy.float32) for i in range(nxo): for j in range(nyo): uvtemp, ier = natgridmodule.getaspects(i, j) if ier != 0: msg = 'Error in return from getaspects call with -- ' + Natgrid.errorTable(self)[ier] raise ValueError(msg) a[i,j] = uvtemp # return aspect in degrees s = numpy.zeros((nxo, nyo), numpy.float32) for i in range(nxo): for j in range(nyo): uvtemp, ier = natgridmodule.getslopes(i, j) if ier != 0: msg = 'Error in return from getslopes call with -- ' + Natgrid.errorTable(self)[ier] raise ValueError(msg) s[i,j] = uvtemp # return slope in degrees else: # double precision if debug == 1: print('In rgrdPrimary calling natgridd') dataOut, ier = natgridmodule.natgridd(self.nxi, self.xi, self.yi, dataIn, self.nxo, self.nyo, self.xo, self.yo) if ier != 0: msg = 'Error in return from natgridd call with -- ' + Natgrid.errorTable(self)[ier] raise ValueError(msg) if aspectSlope != 'no': nxo = self.nxo nyo = self.nyo a = numpy.zeros((nxo, nyo), numpy.float64) for i in range(nxo): for j in range(nyo): uvtemp, ier = natgridmodule.getsloped(i, j) if ier != 0: msg = 'Error in return from getaspectd call with -- ' + Natgrid.errorTable(self)[ier] raise ValueError(msg) a[i,j] = uvtemp # return aspect in degrees s = numpy.zeros((nxo, nyo), numpy.float64) for i in range(nxo): for j in range(nyo): s[i,j], ier = natgridmodule.getsloped(i, j) if ier != 0: msg = 'Error in return from getsloped call with -- ' + Natgrid.errorTable(self)[ier] raise ValueError(msg) s[i,j] = uvtemp # return slope in degrees # is a reverse the order in the returned arrays necessary if (self.xreverse == 'yes') or (self.yreverse == 'yes'): needReverse = 'yes' else: needReverse = 'no' # construct the tuple for the return of what was calculated if aspectSlope != 'no': if needReverse == 'yes': dataOut = Natgrid.reverseData(self, dataOut) a = Natgrid.reverseData(self, a) s = Natgrid.reverseData(self, s) returnList = [dataOut] returnList.append(a) returnList.append(s) return tuple(returnList) else: if needReverse == 'yes': dataOut = Natgrid.reverseData(self, dataOut) return dataOut def rgrdSinglePoint(self, dataIn): """ #------------------------------------------------------------------- # # #-------------------------------------------------------------------------""" self.sdi = 0 # turn off calculaton of aspect and slope if dataIn.dtype.char == 'f': # single precision if debug == 1: print('In rgrdSinglePoint using single precision computation') natgridmodule.pntinits(self.nxi, self.xi, self.yi, dataIn) dataOut = numpy.zeros((self.nxo), numpy.float32) for i in range(self.nxo): dataOut[i] = natgridmodule.pnts(self.xo[i], self.yo[i]) natgridmodule.pntend() else: # double precision if debug == 1: print('In rgrdSinglePoint using double precision computation') natgridmodule.pntinitd(self.nxi, self.xi, self.yi, dataIn) dataOut = numpy.zeros((self.nxo), numpy.float64) for i in range(self.nxo): dataOut[i] = natgridmodule.pntd(self.xo[i], self.yo[i]) natgridmodule.pntendd() return dataOut def reverseData(self, data): #------------------------------------------------------------------------------ # # purpose: reverse the order of th data if outgrid submitted was not increasing # # usage: # # returned: parameters # #------------------------------------------------------------------------------ if self.xreverse == 'yes': data = data[::-1,:] if self.yreverse == 'yes': data = data[:, ::-1] return data def wrapAll(self, lat, lon, data): #------------------------------------------------------------------------------ # # purpose: Adds much wrap in longitude to the linear form of the input data # # usage: # # passed: lat -- the latitude array # lon -- the longitude arraywhich requires a large wrap for natgrid # data -- the data at the associated linear set of points # # returned: lat, lon and data differing fom th input by the wrap # # #------------------------------------------------------------------------------ if debug == 1: print('entering wrapAll with array lengths: ', len(lat)) # Make a wrapped grid and wrapped data lonList = list(lon) # make Python lists as intermediate step latList = list(lat) dataList = list(data) maxlon = max(lonList) # set up the wrap ranges in longitude minlon = min(lonList) distance = (maxlon - minlon)/4. # wrap first and last quarter of points minlonLow = minlon minlonHigh = minlon + distance maxlonLow = maxlon - distance maxlonHigh = maxlon for i in range(len(lonList)): # wrap the Python lists value = lonList[i] if (value >= minlonLow) and (value < minlonHigh): lonList.append(value + 360.) latList.append(latList[i]) dataList.append(dataList[i]) elif (value > maxlonLow) and (value <= maxlonHigh): lonList.append(value - 360.) latList.append(latList[i]) dataList.append(dataList[i]) if self.group == 'single': # single precision lon = numpy.array(lonList, numpy.float32) # convert to numpy arrays lat = numpy.array(latList, numpy.float32) data = numpy.array(dataList, numpy.float32) else: # double precision lon = numpy.array(lonList, numpy.float64) # convert to numpy arrays lat = numpy.array(latList, numpy.float64) data = numpy.array(dataList, numpy.float64) if debug == 1: print('leaving wrapAll with array lengths: ', len(lat)) return lat, lon, data #--------------------------------------------------------------------------------- # **************** Control parameter manipulation functions ******************** #--------------------------------------------------------------------------------- def parameterNames(self): #------------------------------------------------------------------------------ # # purpose: produce a list of the natgrid parameters # # usage: parameters = parameterNames(self) # # passed: self # # returned: parameters # #------------------------------------------------------------------------------ parameters = ['name', '----', 'adf', 'alg', 'asc', 'bI', 'bJ', 'dup', 'ext', 'hor', 'igr', 'magx', 'magy', 'magz', 'non', 'nul', 'rad', 'sdi', 'upd', 'ver', 'xas', 'yas', 'zas' ] return parameters def parameterType(self): #-------------------------------------------------------------------------------- # # purpose: produce a dictionary connecting parameter names and their data types # # usage: typeDict = parameterType(self) # # passed: self # # returned: typeDict # #--------------------------------------------------------------------------------- typeDict = { 'adf':'int', 'alg':'char', 'asc':'int', 'bI':'float', 'bJ':'float', 'dup':'int', 'ext':'int', 'hor':'float', 'igr':'int', 'magx':'float', 'magy':'float', 'magz':'float', 'non':'int', 'nul':'float', 'rad':'int', 'sdi':'int', 'upd':'int', 'ver':'float', 'xas':'float', 'yas':'float', 'zas':'float' } return typeDict def makeDefaultParameterTable(self): #----------------------------------------------------------------------------------- # # purpose: construct the dictionary which is the default control parameters table # # usage: makeDefaultParameterTable() # # passed: self # # returned: parameterDict # #---------------------------------------------------------------------------------- parameterDict = { 'name':('type ', ' legal values ',' default values ',' description '), '----':('-----', '--------------------','-----------------','------------------------------------------------------------'), 'adf': ('int ','0 = no or 1 = yes ',' 0 ','produce data file of algoritmic info for display? (see alg) '), 'alg': ('char ','any file name ',' "nnalg.dat" ','file name for algoritmic display tool (see adf) '), 'asc': ('int ','0 = no or 1 = yes ',' 1 ','is automatic scaling is allowed? '), 'bI': ('float','>= 1. ',' 1.5 ','tautness increasing effect of the gradients by increasing bI'), 'bJ': ('float','>= 1. ',' 7.0 ','tautness decreasing breadth of region affected by gradients '), 'dup': ('int ','0 = yes or 1 = no ',' 1 ','are duplicate input coordinates are allowed? '), 'ext': ('int ','0 = no or 1 = yes ',' 1 ','is extrapolation allowed outside the convex hull? '), 'hor': ('float','>= 0. ',' -1.0 ','amount of horizontal overlap from outside current region '), 'igr': ('int ','0 = no or 1 = yes ',' 0 ','are gradients are to be computed? '), 'magx':('float','> 0. ',' 1.0 ','scale factor for x coordinate values '), 'magy':('float','> 0. ',' 1.0 ','scale factor for y coordinate values '), 'magz':('float','> 0. ',' 1.0 ','scale factor for z coordinate values '), 'non': ('int ','0 = yes or 1 = no ',' 0 ','are interpolated values are allowed to be negative? '), 'nul': ('float','any float ',' 0.0 ','value for points outside the convex hull if no extrapolation'), 'rad': ('int ','0 = rad or 1 = deg ',' 0 ','are slopes and aspects are returned in radians or degrees? '), 'sdi': ('int ','0 = no or 1 = yes ',' 0 ','are slopes and aspects to be computed? '), 'upd': ('int ','0=N to S or 1=S to N',' 1 ','does output array from giving N to S or S to N? '), 'ver': ('float','>= 0. ',' -1.0 ','amount of vertical overlap from outside current region '), 'xas': ('float','> 0. ',' 0.0 ','scale used by automatic scaling of x in last interpolation '), 'yas': ('float','> 0. ',' 0.0 ','scale used by automatic scaling of y in last interpolation '), 'zas': ('float','> 0. ',' 0.0 ','scale used by automatic scaling of z in last interpolation ') } return parameterDict def makeInstanceParameterTable(self): #---------------------------------------------------------------------------------- # # purpose: construct the dictionary which is the instance control parameters table # # usage: makeInstanceParameterTable(self) # # passed: self # # returned: parameterDict # #---------------------------------------------------------------------------------- parameterDict = { 'name':('type ', ' legal values ',' Values ',' description '), '----':('-----', '-------------------','----------------','------------------------------------------------------------'), 'adf': ('int ','0 = no or 1 = yes ', eval('self.adf') ,'produce data file of algoritmic info for display? (see alg) '), 'alg': ('char ','any file name ', eval('self.alg') ,'file name for algoritmic display tool (see adf) '), 'asc': ('int ','0 = no or 1 = yes ', eval('self.asc') ,'is automatic scaling is allowed? '), 'bI': ('float','>= 1. ', eval('self.bI') ,'tautness increasing effect of the gradients by increasing bI'), 'bJ': ('float','>= 1. ', eval('self.bJ') ,'tautness decreasing breadth of region affected by gradients '), 'dup': ('int ','0 = yes or 1 = no ', eval('self.dup') ,'are duplicate input coordinates are allowed? '), 'ext': ('int ','0 = no or 1 = yes ', eval('self.ext') ,'is extrapolation allowed outside the convex hull? '), 'hor': ('float','>= 0. ', eval('self.hor') ,'amount of horizontal overlap from outside current region '), 'igr': ('int ','0 = no or 1 = yes ', eval('self.igr') ,'are gradients are to be computed? '), 'magx':('float','> 0. ', eval('self.magx'),'scale factor for x coordinate values '), 'magy':('float','> 0. ', eval('self.magy'),'scale factor for y coordinate values '), 'magz':('float','> 0. ', eval('self.magz'),'scale factor for z coordinate values '), 'non': ('int ','0 = yes or 1 = no ', eval('self.non') ,'are interpolated values are allowed to be negative? '), 'nul': ('float','any float ', eval('self.nul') ,'value for points outside the convex hull if no extrapolation'), 'rad': ('int ','0 = rad or 1 = deg ', eval('self.rad') ,'are slopes and aspects are returned in radians or degrees? '), 'sdi': ('int ','0 = no or 1 = yes ', eval('self.sdi') ,'are slopes and aspects to be computed? '), 'upd': ('int ','0=N to S or 1=S to N', eval('self.upd') ,'does output array from giving N to S or S to N? '), 'ver': ('float','>= 0. ', eval('self.ver') ,'amount of vertical overlap from outside current region '), 'xas': ('float','> 0. ',' 0.0 ','scale used by automatic scaling of x in last interpolation'), 'yas': ('float','> 0. ',' 0.0 ','scale used by automatic scaling of y in last interpolation'), 'zas': ('float','> 0. ',' 0.0 ','scale used by automatic scaling of z in last interpolation') } return parameterDict def printDefaultParameterTable(self): """ -------------------------------------------------------------------------------------------------------- purpose: print the value of all the parameters usage: r.printDefaultParameterTable() where r is an instance of Natgrid passed: self returned: None --------------------------------------------------------------------------------------------------------""" names = Natgrid.parameterNames(self) names = names[2:] parameterDict = Natgrid.makeDefaultParameterTable(self) for item in names: items = (item, parameterDict[item][0], parameterDict[item][1], parameterDict[item][2], parameterDict[item][3]) print('%-7.7s %-6.6s %-12.12s %-15.15s %s' % items) return def printInstanceParameterTable(self): """ -------------------------------------------------------------------------------------------------------- purpose: print the value of all the parameters usage: r.printInstanceParameterTable() where r is an instance of Natgrid passed: self returned: None --------------------------------------------------------------------------------------------------------""" names = Natgrid.parameterNames(self) names = names[2:] parameterDict = Natgrid.makeInstanceParameterTable(self) for item in names: items = (item, parameterDict[item][0], parameterDict[item][1], parameterDict[item][2], parameterDict[item][3]) print('%-7.7s %-6.6s %-12.12s %-7.7s %s' % items) return def printInstanceParameters(self): """ -------------------------------------------------------------------------------------------------------- purpose: print the values of the current natgrid control parameters in c code usage: r. printInstanceParameters() where r is an instance of Natgrid passed: self returned: None --------------------------------------------------------------------------------------------------------""" names = Natgrid.parameterNames(self) names = names[2:] typeDict = Natgrid.parameterType(self) for name in names: if typeDict[name] == 'int': print('Currently, %s = %d' % (name, eval('self.' + name))) elif typeDict[name] == 'char': print('Currently, %s = %s' % (name, eval('self.' + name))) elif typeDict[name] == 'float': print('Currently, %s = %f' % (name, eval('self.' + name))) elif typeDict[name] == 'double': print('Currently, %s = %f' % (name, eval('self.' + name))) return None def setInstanceParameters(self): #--------------------------------------------------------------------------- # # purpose: set the instance values of the current natgrid control parameters in c code # # usage: r.setInstanceParameters() # # where r is an instance of Natgrid # # passed: self # # returned: None # #---------------------------------------------------------------------------- names = Natgrid.parameterNames(self) names = names[2:-3] # the -3 eliminates the nonsettable xas, yas and zas typeDict = Natgrid.parameterType(self) # set the current values for the natgrid control parameters for name in names: if typeDict[name] == 'int': natgridmodule.seti(name, eval('self.' + name)) elif typeDict[name] == 'char': natgridmodule.setc(name, eval('self.' + name)) elif typeDict[name] == 'float': natgridmodule.setr(name, eval('self.' + name)) elif typeDict[name] == 'double': natgridmodule.setrd(name, eval('self.' + name)) return None #--------------------------------------------------------------------------------- # ***************************** Error Table ************************************ #--------------------------------------------------------------------------------- def errorTable(self): """ -------------------------------------------------------------------------------------------------------- purpose: construct the dictionary which provides access to error messages usage: errorDict = r.errorTable() where r is an instance of Natgrid returned: errorDict --------------------------------------------------------------------------------------------------------""" errorDict = { 1: 'Insufficient data in gridded region to triangulate', 2: 'Dulpicate input data coordinates are not allowed', 3: 'Unable to open file for writing algorithmic', 4: 'WARNING: The ratio of vertical to horizontal scales too large for gradients. Rescale if gradients required', 5: 'WARNING: The ratio of vertical to horizontal scales too small for gradients. Rescale if gradients required', 6: 'WARNING: The ratio of x to y-axis breath too extreme. Change proportions or rescale. Gradients disabled', 7: 'Unable to allocate storage for ivector', 8: 'Unable to allocate storage for dvector', 9: 'Unable to allocate storage for **imatrix', 10: 'Unable to allocate storage for imatrix[]', 11: 'Unable to allocate storage for **fmatrix', 12: 'Unable to allocate storage for fmatrix[]', 13: 'Unable to allocate storage for **dmatrix', 14: 'Unable to allocate storage for dmatrix[]', 15: 'Unable to allocate storage for raw data', 16: 'Unable to allocate storage for a simplex', 17: 'Unable to allocate storage for temp', 18: 'Unable to allocate storage for neig', 19: 'Slopes have not been computed, set sdip', 20: 'Row argument out of range', 21: 'Column argument out of range', 22: 'Aspects have not been computed, set sdip', 23: 'Parameter name not known', 24: 'Can not open error file', 25: 'Automatic scaling done - distorted aspects not returned. Rescale data or set magx, magy and magz appropriately', 26: 'Automatic scaling done - distorted slopes not returned. Rescale data or set magx, magy and magz appropriately', 27: 'Coordinate is outside the gridded region for a single point interpolation', 28: 'Can not compute aspects and slopes in conjunction with single point interpolation mode', 29: 'Fortran DOUBLE PRECISION entries not supported on UNICOS', 30: 'Error number out of range' } return errorDict #--------------------------------------------------------------------------------- # *************************** magic functions ********************************* #--------------------------------------------------------------------------------- def __setattr__(self, name, value): #--------------------------------------------------------------------------------- # # purpose: '__setattr__' is called on every assignment to an instance attribute. # Consequently, it must put the value in through the __dict__ to avoid # calling itself and setting up an infinite recursion loop.It sets the # attribute called name to value in two steps. # One -- set the global C code control parameter # Two -- set the instance self data control parameter # # usage: x.name = value # # passed : name and value # # returned: None # #--------------------------------------------------------------------------------- typeDict = Natgrid.parameterType(self) if name in typeDict.keys(): if typeDict[name] == 'int': natgridmodule.seti(name, value) self.__dict__[name] = value elif typeDict[name] == 'char': natgridmodule.setc(name, value) self.__dict__[name] = value elif typeDict[name] == 'float': natgridmodule.setr(name, value) self.__dict__[name] = value elif typeDict[name] == 'double': natgridmodule.setrd(name, value) self.__dict__[name] = value else: self.__dict__[name] = value return None def __getattr__(self, name): #--------------------------------------------------------------------------------- # # purpose: '__getattr__' is called only if a referenced attribute can not be found # in the instance. It gets the attribute from natgridmodule if possible. # # usage: x.name -- name is the oject and not a string repr # # passed : name # # returned: x.name # #--------------------------------------------------------------------------------- typeDict = Natgrid.parameterType(self) if name in typeDict.keys(): if typeDict[name] == 'int': value = natgridmodule.geti(name) elif typeDict[name] == 'char': value = natgridmodule.getc(name) elif typeDict[name] == 'float': value = natgridmodule.getr(name) elif typeDict[name] == 'double': value = natgridmodule.getrd(name) else: raise AttributeError(name) return value #--------------------------------------------------------------------------------- # ******************************************************************* # **************** end of magic functions ************************** # ******************************************************************* #--------------------------------------------------------------------------------- def printParameterTable(): """ -------------------------------------------------------------------------------------------------------- routine: printParameterTable purpose: print the control parameter table using the default values from outside the Natgrid class usage: import nat nat.printParameterTable() passed: nothing returned: None definition: printParameterTable(): --------------------------------------------------------------------------------------------------------""" names = ['name', '----', 'adf', 'alg', 'asc', 'bI', 'bJ', 'dup', 'ext', 'hor', 'igr', 'magx', 'magy', 'magz', 'non', 'nul', 'rad', 'sdi', 'upd', 'ver', 'xas', 'yas', 'zas' ] parameterDict = { 'name':('type ', ' legal values ',' default values ',' description '), '----':('-----', '--------------------','-----------------','------------------------------------------------------------'), 'adf': ('int ','0 = no or 1 = yes ',' 0 ','produce data file of algoritmic info for display? (see alg) '), 'alg': ('char ','any file name ',' "nnalg.dat" ','file name for algoritmic display tool (see adf) '), 'asc': ('int ','0 = no or 1 = yes ',' 1 ','is automatic scaling is allowed? '), 'bI': ('float','>= 1. ',' 1.5 ','tautness increasing effect of the gradients by increasing bI'), 'bJ': ('float','>= 1. ',' 7.0 ','tautness decreasing breadth of region affected by gradients '), 'dup': ('int ','0 = yes or 1 = no ',' 1 ','are duplicate input coordinates are allowed? '), 'ext': ('int ','0 = no or 1 = yes ',' 1 ','is extrapolation allowed outside the convex hull? '), 'hor': ('float','>= 0. ',' -1.0 ','amount of horizontal overlap from outside current region '), 'igr': ('int ','0 = no or 1 = yes ',' 0 ','are gradients are to be computed? '), 'magx':('float','> 0. ',' 1.0 ','scale factor for x coordinate values '), 'magy':('float','> 0. ',' 1.0 ','scale factor for y coordinate values '), 'magz':('float','> 0. ',' 1.0 ','scale factor for z coordinate values '), 'non': ('int ','0 = yes or 1 = no ',' 0 ','are interpolated values are allowed to be negative? '), 'nul': ('float','any float ',' 0.0 ','value for points outside the convex hull if no extrapolation'), 'rad': ('int ','0 = rad or 1 = deg ',' 0 ','are slopes and aspects are returned in radians or degrees? '), 'sdi': ('int ','0 = no or 1 = yes ',' 0 ','are slopes and aspects to be computed? '), 'upd': ('int ','0=N to S or 1=S to N',' 1 ','does output array from giving N to S or S to N? '), 'ver': ('float','>= 0. ',' -1.0 ','amount of vertical overlap from outside current region '), 'xas': ('float','> 0. ',' 0.0 ','scale used by automatic scaling of x in last interpolation '), 'yas': ('float','> 0. ',' 0.0 ','scale used by automatic scaling of y in last interpolation '), 'zas': ('float','> 0. ',' 0.0 ','scale used by automatic scaling of z in last interpolation ') } for item in names: items = (item, parameterDict[item][0], parameterDict[item][1], parameterDict[item][2], parameterDict[item][3]) print('%-7.7s %-6.6s %-12.12s %-15.15s %s' % items) return def printStoredParameters(): """ -------------------------------------------------------------------------------------------------------- routine: printStoredParameters purpose: print the values of the current natgrid control parameters in c code. The call to the method function rgrd will change them to the instance values. usage: import nat nat.printStoredParameters() passed: nothing returned: None definition: printStoredParameters(): --------------------------------------------------------------------------------------------------------""" names = ['name', '----', 'adf', 'alg', 'asc', 'bI', 'bJ', 'dup', 'ext', 'hor', 'igr', 'magx', 'magy', 'magz', 'non', 'nul', 'rad', 'sdi', 'upd', 'ver', 'xas', 'yas', 'zas' ] names = names[2:] typeDict = { 'adf':'int', 'alg':'char', 'asc':'int', 'bI':'float', 'bJ':'float', 'dup':'int', 'ext':'int', 'hor':'float', 'igr':'int', 'magx':'float', 'magy':'float', 'magz':'float', 'non':'int', 'nul':'float', 'rad':'int', 'sdi':'int', 'upd':'int', 'ver':'float', 'xas':'float', 'yas':'float', 'zas':'float' } for item in names: if typeDict[item] == 'int': print(' %s = %d' % (item, natgridmodule.geti(item))) elif typeDict[item] == 'char': print(' %s = %s' % (item, natgridmodule.getc(item))) elif typeDict[item] == 'float': print(' %s = %f' % (item, natgridmodule.getr(item))) elif typeDict[item] == 'double': print(' %s = %f' % (item, natgridmodule.getrd(item))) return None def checkdim(x, y): #------------------------------------------------------------------------------------------ # # purpose: determine whether the coordinate grid is random or monotonically increasing # # usage: # # returned: x, y, monotonic, xreverse, yreverse # #------------------------------------------------------------------------------------------- xsize = len(x) if x[0] > x[xsize - 1]: x = x[::-1] xreverse = 'yes' else: xreverse = 'no' xmonotonic = 'yes' # monotonic and possibly reversed to make it montonically increasing for n in range(1, xsize): if x[n] < x[n - 1]: xmonotonic = 'no' # not monotonic so return the original grid ysize = len(y) if y[0] > y[ysize - 1]: y = y[::-1] yreverse = 'yes' else: yreverse = 'no' ymonotonic = 'yes' # monotonic and possibly reversed to make it montonically increasing for n in range(1, ysize): if y[n] < y[n - 1]: ymonotonic = 'no' # not monotonic so return the original grid if xmonotonic == 'yes' and ymonotonic == 'yes': # if both are monotonic the grid is monotonic monotonic = 'yes' else: monotonic = 'no' if xreverse == 'yes': # return vectors to thier original state x = x[::-1] xreverse = 'no' if yreverse == 'yes': y = y[::-1] yreverse = 'no' # note that x and y may be returned reversed as necessary only if monotonic is set to yes return x, y, monotonic, xreverse, yreverse #--------------------------------------------------------------------------------- # ******************************************************************************** # ******************************************************************************** #--------------------------------------------------------------------------------- def sendOutput(output, msg, value = None): """ #--------------------------------------------------------------------------------- # # purpose: send the same message to the screen and to a file # # passed : msg - the string # # returned: return # #---------------------------------------------------------------------------------""" if value is None: print(msg) output.write(msg + '\n') else: print(msg, repr(value)) output.write(msg + ' %15.11e\n' % (value,)) return None def document(): """ #------------------------------------------------------------------------- # # purpose: 'docstrings' writes the doc strings contained in the regrid module # to a file as documentation for the user # # usage: import regrid2 as regrid # regrid.document() # # passed : nothing # # returned: nothing # #-------------------------------------------------------------------------""" import nat std = sys.stdout # save sys.stout to allow reassigning later sys.stdout = open( 'natgrid.doc', 'w') print('**********************************************************************************************\n') print('**************************** Overview of the CDAT interface to natgrid ***********************\n') print('**********************************************************************************************\n') print(nat.__doc__) print() print() print(' ******************** Instructions for use of the natgrids function **************************') print(natgridmodule.natgrids.__doc__) print() print(' ******************** Instructions for use of the seti function **************************') print(natgridmodule.seti.__doc__) print() print(' ******************** Instructions for use of the geti function **************************') print(natgridmodule.geti.__doc__) print() print(' ******************** Instructions for use of the setr function **************************') print(natgridmodule.setr.__doc__) print() print(' ******************** Instructions for use of the getr function **************************') print(natgridmodule.getr.__doc__) print() print(' ******************** Instructions for use of the setc function **************************') print(natgridmodule.setc.__doc__) print() print(' ******************** Instructions for use of the getc function **************************') print(natgridmodule.getc.__doc__) print() print(' ******************** Instructions for use of the getaspects function **************************') print(natgridmodule.getaspects.__doc__) print() print(' ******************** Instructions for use of the getslopes function **************************') print(natgridmodule.getslopes.__doc__) print() print(' ******************** Instructions for use of the pntinits function **************************') print(natgridmodule.pntinits.__doc__) print() print(' ******************** Instructions for use of the pnts function **************************') print(natgridmodule.pnts.__doc__) print() print(' ******************** Instructions for use of the pntend function **************************') print(natgridmodule.pntend.__doc__) print() print(' ******************** Instructions for use of the natgridd function **************************') print(natgridmodule.natgridd.__doc__) print() print(' ******************** Instructions for use of the setrd function **************************') print(natgridmodule.setrd.__doc__) print() print(' ******************** Instructions for use of the getrd function **************************') print(natgridmodule.getrd.__doc__) print() print(' ******************** Instructions for use of the getaspectd function **************************') print(natgridmodule.getaspectd.__doc__) print() print(' ******************** Instructions for use of the getsloped function **************************') print(natgridmodule.getsloped.__doc__) print() print(' ******************** Instructions for use of the pntinitd function **************************') print(natgridmodule.pntinitd.__doc__) print() print(' ******************** Instructions for use of the pntd function **************************') print(natgridmodule.pntd.__doc__) print() print(' ******************** Instructions for use of the pntendd function **************************') print(natgridmodule.pntendd.__doc__) print() sys.stdout = std return None def sendmsg(msg, value1 = None, value2 = None): """ #--------------------------------------------------------------------------------- # # purpose: send the same message to the screen # # passed : msg - the string # value - the number associated with the string # # returned: return # #---------------------------------------------------------------------------------""" print('*******************************************************************') if value1 is None: print(msg) elif value2 is None: print(msg, value1) else: print(msg, value1, value2) print('*******************************************************************') return None def help(choice = None): import nat if choice is None: # get instructions for use of help print(""" ---------------------------------------------------------------------------------------- INSTRUCTIONS ON USE THE OBJECT ORIENTED INTERFACE TO THE NATGRID PACKAGE FROM NGMATH This module is built as one class, Natgrid, which sports a single method called rgrd. To get instructions on making an instance of Natgrid, type nat.help('Natgrid') To get instructions on using the control parameters, type nat.help('parameters') To print the table describing the control parameters, type nat.help('table') To get instructions on performing a regridding, type nat.help('regrid') To get instructions on calculating slopes and aspects, type nat.help('aspectSlope') To get instructions using the single point computational mode, type nat.help('singlePoint') INSTRUCTIONS ON USE OF ORIGINAL NATGRID PACKAGE FROM NGMATH This module is built as an interface to natgridmodule.so which exports the following functions: Single precision procedures: natgrids - primary function for gridding. seti - set int parameter values. geti - retrieve values for int parameters. setr - set float parameter values. getr - retrieve values for float parameters setc - set char parameter values. getc - retrieve values for char parameters. getaspects - get aspect values, if calculated. getslopes - get slope values, if calculated. pntinits - initiate single point mode. pnts - interpolate at a single point. pntend _ terminate single point mode. Double precision procedures: natgridd - primary function for gridding. setrd - set float parameter values. getrd - retrieve values for float parameters getaspectd - get aspect values, if calculated. getsloped - get slope values, if calculated. pntinitd - initiate single point mode. pntd - interpolate at a single point. pntendd _ terminate single point mode. It is feasible to use these functions directly without this module. Information is available through their docstrings. For example, to get the docstring for the routine natgrids, follow this procedure at the Python prompt: import natgridmodule print natgridmodule.natgrids.__doc__ or simply type nat.help('natgrids') ------------------------------------------------------------------------------------------------------""") elif choice == 'Natgrid': print(""" ---------------------------------------------------------------------------------------- To make an instance, r, type: import nat r = nat.Natgrid(xi, yi, xo, yo) or r = nat.Natgrid(xi, yi, xo, yo, listOutput = 'yes') where xi, yi and xo, yo are the input and output grid coordinate arrays. The optional listOutput is set to anything except 'no' if xo, yo are in list format as explained below. The input grid must be organized in a list format always. The size of the xi array and the yi array are necessarily equal. For example, if there are n randomly spaced input data points, there are n values in xi and n values in yi. There are two possible formats for the output grid. The output grid coordinate arrays may be a list like the input array or it may be a rectangular grid. The choice between the two posibilities is made according to requirements in subseqent calls to the method function. The first choice is required if the subsequent call is to the single point mode interpolation. The list can have one or more points. Of course, the list could describe a rectangular grid. For example, a rectangular grid with 10 x values and 20 y values can be rewrtten in list form with 200 x value and 200 y values. However, this form requires calling the slower single point interpolator. The second choice is most efficient for the basic interpolation to a rectangular output grid. The output grid must be monotonic but need not be equally spced. The grid coordinate arrays can be single precision (numpy.float32) or double precision (numpy.float64). The decision on whether to call for a single or a double precision computation subsequently is made by looking at the type of these arrays. --------------------------------------------------------------------------------------------------------------------""") elif choice == 'parameters': print(""" ---------------------------------------------------------------------------------------- In the absence of an instance of the class Natgrid, a description of the control parameters can be found by typing import nat nat.printParameterTable() The control parameters are easily available within the class. First make an instance, r, type: import nat r = nat.Natgrid(xi, yi, xo, yo) To change a setting type the new value. For example, to set igr to 1, type r.igr = 1 To find an individual value, type the name. For example, to exam the value of hor, type r.hor To check the settings type r.printInstanceParameterTable() -- prints the table with values and a description of the parameters used in subsequent calls to the method function rgrd or r.printInstanceParameters() -- prints a list of the parameters values used in subsequent calls to the the rgrd method nat. printStoredParameters() -- prints the parameters in memory which may differ from the above if the user has made more than one instance of the Natgrid class. --------------------------------------------------------------------------------------------------------------------""") elif choice == 'table': printParameterTable() #----------------------------------------------------------------------------------------------------- elif choice == 'regrid': print(""" ---------------------------------------------------------------------------------------- natgrid is restricted to two dimensions . Consequently, it is the user's responsibility to reduce the processing of higher dimensional data to a sequence of calls using only two dimensional data. A description of the basic natural neighbor linear interpolation and nonlinear interpolations follow. Make an instance, r, with: import nat r = nat.Natgrid(xi, yi, xo, yo) where the xo, yo grid is rectilinear as explained in the help choice 'Natgrid'. r.igr = 1 -- in order to set up the computation for nonlinear interpolation. The default value for igr calls for a linear interpolation. Then call the primary interpolation computation to regrid the input data, dataIn, on the grid (xi, yi) to the output data, dataOut, on the grid (xo, yo), with dataOut = r.rgrd( dataIn ) When dealing with global data described on a latitude-longitude grid, it is also possible to request a wrap in the input grid and the input data in the longitude direction, assumed to be the yi grid coordinate, with dataOut = r.rgrd(dataIn, wrap = 'yes') The computation is either single or double precision as determined by the precision submitted in making the instance. --------------------------------------------------------------------------------------------------------------------""") elif choice == 'aspectSlope': print(""" ---------------------------------------------------------------------------------------- natgrid is restricted to two dimensions . Consequently, it is the user's responsibility to reduce the processing of higher dimensional data to a sequence of calls using only two dimensional data. A description of the basic natural neighbor linear and nonlinear interpolations returning the aspect and the slope at the output grid points follows. First make an instance, r, with: import nat r = nat.Natgrid(xi, yi, xo, yo) where the xo, yo grid is rectilinear as explained in the help choice 'Natgrid'. r.igr = 1 -- in order to set up the computation for nonlinear interpolation. The default value for igr calls for a linear interpolation. Then call the primary interpolation computation to regrid the input data, dataIn, on the grid (xi, yi) to the output data, dataOut, on the grid (xo, yo), while asking for the aspect and the slope on this output grid, with dataOut, a, s = r.rgrd( dataIn, aspectSlope = 'yes' ) where a is the aspect, the direction of the steepest descent in degrees measured from 'north' and s is the slope in degrees measured from the horizontal. Necessarily, these are arrays aligned with the rectilinear output grid, xo, yo. It is also possible to request a wrap in the input grid and the input data in the longitude direction, assumed to be the yi grid coordinate, by adding a keyword as dataOut, a, s = r.rgrd( dataIn, aspectSlope = 'yes', wrap = 'yes' ) The computation is either single or double precision as determined by the precision submitted in making the instance. --------------------------------------------------------------------------------------------------------------------""") elif choice == 'singlePoint': print(""" ---------------------------------------------------------------------------------------- natgrid is restricted to two dimensions . Consequently, it is the user's responsibility to reduce the processing of higher dimensional data to a sequence of calls using only two dimensional data. A description of the single point natural neighbor linear and nonlinear interpolations follows. First make an instance, r, with: import nat r = nat.Natgrid(xi, yi, xo, yo, listOutput) where the xo, yo output grid is in the list form (not a rectangular output grid) as explained in the help choice 'Natgrid'. r.igr = 1 -- in order to set up the computation for nonlinear interpolation. The default value for igr calls for a linear interpolation. Then call the single point mode interpolation computation to regrid the input data, dataIn, on the grid (xi, yi) to the output data, dataOut, on the grid (xo, yo), type dataOut = r.rgrd( dataIn ) The single point mode is slow but it provides a choice where the interpolation is to one or more points rather than to a complete rectangular grid.. The computation is either single or double precision as determined by the precision submitted in making the instance. --------------------------------------------------------------------------------------------------------------------""") elif choice == 'natgrids': print(natgridmodule.natgrids.__doc__) elif choice == 'seti': print(natgridmodule.seti.__doc__) elif choice == 'geti': print(natgridmodule.geti.__doc__) elif choice == 'setr': print(natgridmodule.setr.__doc__) elif choice == 'getr': print(natgridmodule.getr.__doc__) elif choice == 'setc': print(natgridmodule.setc.__doc__) elif choice == 'getc': print(natgridmodule.getc.__doc__) elif choice == 'getaspects': print(natgridmodule.getaspects.__doc__) elif choice == 'getslopes': print(natgridmodule.getslopes.__doc__) elif choice == 'pntinits': print(natgridmodule.pntinits.__doc__) elif choice == 'pnts': print(natgridmodule.pnts.__doc__) elif choice == 'pntend': print(natgridmodule.pntend.__doc__) elif choice == 'natgridd': print(natgridmodule.natgridd.__doc__) elif choice == 'setrd': print(natgridmodule.setrd.__doc__) elif choice == 'getrd': print(natgridmodule.getrd.__doc__) elif choice == 'getaspectd': print(natgridmodule.getaspectd.__doc__) elif choice == 'getsloped': print(natgridmodule.getsloped.__doc__) elif choice == 'pntinitd': print(natgridmodule.pntinitd.__doc__) elif choice == 'pntd': print(natgridmodule.pntd.__doc__) elif choice == 'pntendd': print(natgridmodule.pntendd.__doc__) else: print('Your request is not in help. The help choices are: ') print('Natgrid, parameters, table, regrid, aspectSlope, singlePoint, natgrids, seti, geti, setr, getr, setc, getc, getaspects, getslopes, pntinits, pnts, pntend, natgridd, setrd, getrd, getaspectd, getsloped, pntinitd, pntd, pntendd') return None PyBDSF-1.10.1/bdsf/opts.py000066400000000000000000003050171420247104600151040ustar00rootroot00000000000000"""PyBDSF options Options are essentially user-controllable parameters passed into PyBDSF operations, and allow for end-users to control the exact details of how calculations are done. The doc string should give a short description of the option, followed by a line break ('\n') then a long, detailed description. The short description can then be split off using "str(v.doc()).split('\n')[0]". The group string can be used to group suboptions under a parent option. The group string should be the name of the parent option, which must be Bool (except for the "hidden" group, which will suppress listing of the option; the option can still be set as normal). In general it's better to specify newly added options directly in this file, so one can oversee them all. But it's also possible to extend it at run-time, and under some circumstances (e.g. pybdsf installed system-wide, and there is no way to modify this file) this might be the only option to do so. An example of such extension follows: ==== file newmodule.py ==== from image import Op class Op_new_op(Op): ## do something useful here ## we need to add option my_new_opt pass ## this will extend Opts class at runtime and ensure that ## type-checking works properly. Opts.my_new_opt = Float(33, doc="docstring") """ from __future__ import absolute_import import sys from .tc import Int, Float, Bool, String, Tuple, Enum, \ Option, NArray, Instance, tInstance, List, Any, TCInit, tcError try: # For Python 2 basestring = basestring except NameError: basestring = str class Opts(object): """Class Opts -- user-controllable parameters.""" advanced_opts = Bool(False, doc = "Show advanced options") atrous_do = Bool(False, doc = "Decompose Gaussian residual image "\ "into multiple scales\n"\ "If True, then the Gaussian-subtracted "\ "residual image is decomposed into multiple "\ "scales using an a-trous wavelet transform.\n"\ "This option is most useful when there is "\ "significant extended emission in the image. "\ "If the image contains only point sources, "\ "it is best to set this to Fasle.") beam = Option(None, Tuple(Float(), Float(), Float()), doc = "FWHM of restoring beam. Specify as (maj, "\ "min, pos ang E of N) in degrees. "\ "E.g., beam = (0.06, 0.02, 13.3). None => "\ "get from header\n"\ "For more than one channel, use the beam_spectrum "\ "parameter. "\ "If the beam is not given "\ "by the user, then it is looked for in the "\ "image header. If not found, then an error "\ "is raised. PyBDSF will not work without "\ "knowledge of the restoring beam.") filename = String(doc = "Input image file name\n"\ "The input image can be a FITS or CASA 2-, "\ "3-, or 4-D cube.") flagging_opts = Bool(False, doc = "Show options for Gaussian flagging\n"\ "Gaussians which are likely in error "\ "(e.g., very small or very large Gaussians) "\ "are flagged according to a number of criteria, "\ "which the user may control. "\ "Flags are cumulative (i.e., if multiple "\ "flagging criteria are met, the respective "\ "flag values are added to produce the final "\ "flag value). Flag values are defined as follows:\n"\ "If flag_minsnr: flag + 1\n"\ "If flag_maxsnr: flag + 2\n"\ "If flag_bordersize: flag + 4 (x) or 8 (y)\n"\ "If flag_maxsize_isl: flag + 16 (x) or 32 (y)\n"\ "If flag_maxsize_bm: flag + 64\n"\ "If flag_minsize_bm: flag + 128\n"\ "If flag_maxsize_fwhm: flag + 256") frequency = Option(None, Float(), doc = "Frequency in Hz of input image. "\ "E.g., frequency = 74e6. None => get from header.\n"\ "For more than one channel, use the frequency_sp "\ "parameter. If the frequency is not given "\ "by the user, then it is looked for in the "\ "image header. If not found, then an error "\ "is raised. PyBDSF will not work without "\ "knowledge of the frequency.") interactive = Bool(False, doc = "Use interactive mode\n"\ "In interactive mode, plots are displayed at "\ "various stages of the processing so that "\ "the user may check the progress of the fit.\n"\ "First, plots of the rms and mean background images are "\ "displayed along with the islands found, before "\ "fitting of Gaussians takes place. The user should "\ "verify that the islands and maps are reasonable "\ "before preceding.\n"\ "Next, if atrous_do is True, the fits to each "\ "wavelet scale are shown. The wavelet fitting "\ "may be truncated at the current scale if "\ "desired.\nLastly, the final results are shown.") mean_map = Enum('default', 'zero', 'const', 'map', doc = "Background mean map: 'default' => calc whether "\ "to use or not, 'zero' => 0, 'const' => "\ "clipped mean, 'map' => use 2-D map\n"\ "This parameter determines "\ "how the background mean map is computed "\ "and how it is used further.\nIf 'const', then "\ "the value of the clipped "\ "mean of the entire image (set by the kappa_clip "\ "option) is used as the "\ "background mean map.\nIf 'zero', then a value "\ "of zero is used.\nIf 'map', then "\ "the 2-dimensional mean map is computed and used. "\ "The resulting mean map is largely determined by "\ "the value of the rms_box parameter (see the "\ "rms_box parameter for more information).\nIf "\ "'default', then PyBDSF will attempt to "\ "determine automatically whether to use "\ "a 2-dimensional map or a constant one as "\ "follows. First, "\ "the image is assumed to be confused if "\ "bmpersrc_th < 25 or the ratio of the "\ "clipped mean to rms (clipped mean/clipped rms) "\ "is > 0.1, else the image is not confused. "\ "Next, the mean map is checked to "\ "see if its spatial variation is significant. If "\ "so, then a 2-D map is used and, if not, "\ "then the mean map is set to either 0.0 or a "\ "constant depending on whether the image is "\ "thought to be confused or not.\nGenerally, "\ "'default' works well. However, if there is "\ "significant extended emission in the image, "\ "it is often necessary to force the use of a "\ "constant mean map using either 'const' or "\ "'mean'.") multichan_opts = Bool(False, doc = "Show options for multi-channel "\ "images") output_opts = Bool(False, doc = "Show output options") polarisation_do = Bool(False, doc = "Find polarisation properties\n"\ "First, if pi_fit = True, source detection is done on the polarized intensity "\ "(PI) image and sources not detected in "\ "the Stokes I image are identified. The thresholds for island "\ "detection can be controlled using the pi_thresh_isl and "\ "pi_thresh_pix parameters.\n"\ "Next, for any such PI-only sources, "\ "plus all sources detected in the Stokes I image, "\ "the flux densities in each of the other Stokes images are found. "\ "Flux densities are calculated by fitting for the normalization of the Gaussians "\ "found from the Stokes I or PI images."\ "Lastly, the polarisation fraction and angle for each source "\ "are calculated.\n"\ "For linearly polarised emission, the signal and noise "\ "add vectorially, giving a Rice distribution "\ "(Vinokur 1965) instead of a Gaussian one. To correct "\ "for this, a bias is estimated and removed from the "\ "polarisation fraction using the same method used for the "\ "NVSS catalog (see ftp://ftp.cv.nrao.edu/pub/nvss/catalog.ps). "\ "Errors on the linear and total polarisation fractions "\ "and polarisation angle are estimated using the debiased "\ "polarised flux density and standard error propagation. See "\ "Sparks & Axon (1999) for a more detailed treatment.") psf_vary_do = Bool(False, doc = "Calculate PSF variation across image") rm_do = Bool(False, doc = "Find rotation measure properties", group = 'hidden') rms_box = Option(None, Tuple(Int(), Int()), doc = "Box size, step size for rms/mean map "\ "calculation. Specify as (box, step) in "\ "pixels. E.g., rms_box = (40, 10) => box "\ "of 40x40 pixels, step of 10 pixels. "\ "None => calculate inside program\n"\ "This is a tuple of two integers and is probably the "\ "most important input parameter for PyBDSF. The first "\ "integer, boxsize, is the size of the 2-D sliding box "\ "for calculating the rms and mean over the entire image. "\ "The second, stepsize, is the number of pixels by which "\ "this box is moved for the next measurement. If None, "\ "then suitable values are calculated internally.\n"\ "In general, it is best to choose a box size that "\ "corresponds to the typical scale of artifacts in the "\ "image, such as those that are common around bright "\ "sources. Too small of a box size will effectively "\ "raise the local rms near a source so much that a "\ "source may not be fit at all; too large a box size "\ "can result in underestimates of the rms due to "\ "oversmoothing. A step size of 1/3 "\ "to 1/4 of the box size usually works well.\n"\ "If adaptive_rms_box is True, the rms_box parameter "\ "sets the large-scale box size that is used far "\ "from bright sources.") rms_map = Enum(None, True, False, doc = "Background rms map: True => "\ "use 2-D rms map; False => use constant rms; " \ "None => calculate inside program\n"\ "If True, then the 2-D background rms image is "\ "computed and used. If False, then a constant value is "\ "assumed (use rms_value to force the rms to a specific "\ "value). If None, then the 2-D rms image is calculated, and "\ "if the variation is statistically significant then it "\ "is taken, else a constant value is assumed. The rms image "\ "used for each channel in computing the spectral index "\ "follows what was done for the channel-collapsed image.\n"\ "Generally, None works well. However, if there is "\ "significant extended emission in the image, "\ "it is often necessary to force the use of a "\ "constant rms map by setting rms_map = False.") shapelet_do = Bool(False, doc = "Decompose islands into shapelets\n"\ "If True, then each island is decomposed using shapelets, "\ "However, at the moment, output of the shapelet parameters "\ "is not supported.") spectralindex_do = Bool(False, doc = "Calculate spectral indices (for multi-channel image)\n"\ "If True, then for a multi-channel image, spectral indices "\ "are calculated for all Gaussians and sources which are "\ "detected in the channel-collapsed image.\nFrequencies "\ "can be specified manually using frequency_sp.") thresh = Enum(None, "hard", "fdr", doc = "Type of thresholding: " \ "None => calculate inside program, 'fdr' => use "\ "false detection rate algorithm, 'hard' => "\ "use sigma clipping\nIf thresh = 'hard', "\ "then a hard threshold is assumed, given by thresh_pix. "\ "If thresh = 'fdr', then the False Detection Rate algorithm of "\ "Hancock et al. (2002) is used to calculate the value of "\ "thresh_pix. If thresh is None, then the false detection "\ "probability is first calculated, and if the number of false "\ "source pixels is more than fdr_ratio times the estimated "\ "number of true source pixels, then the 'fdr' threshold "\ "option is chosen, else the 'hard' threshold option is "\ "chosen.") thresh_isl = Float(3, doc = "Threshold for the island boundary in number of sigma "\ "above the mean. Determines extent of island used for fitting\n"\ "This parameter determines the region to which fitting "\ "is done. A higher value will produce smaller islands, "\ "and hence smaller regions that are considered in the "\ "fits. A lower value will produce larger islands. "\ "Use the thresh_pix parameter to set the detection " "threshold for sources. Generally, thresh_isl should "\ "be lower than thresh_pix.\n" "Only regions "\ "above the absolute threshold will be used. "\ "The absolute threshold is calculated as abs_thr = "\ "mean + thresh_isl * rms. Use the mean_map "\ "and rms_map parameters to control the way "\ "the mean and rms are determined.") thresh_pix = Float(5, doc = "Source detection threshold: threshold for the "\ "island peak in number of sigma "\ "above the mean. If "\ "false detection rate thresholding is used, "\ "this value is ignored and thresh_pix is "\ "calculated inside the program\n"\ "This parameter sets the overall detection threshold "\ "for islands (i.e. thresh_pix = 5 will find all sources "\ "with peak flux densities per beam of 5-sigma or greater). Use the "\ "thresh_isl parameter to control how much of each island "\ "is used in fitting. Generally, thresh_pix should be larger "\ "than thresh_isl.\n" "Only islands "\ "with peaks above the absolute threshold will be used. "\ "The absolute threshold is calculated as abs_thr = "\ "mean + thresh_pix * rms. Use the mean_map "\ "and rms_map parameters to control the way "\ "the mean and rms are determined.") adaptive_rms_box = Bool(False, doc = "Use adaptive rms_box when determining rms and "\ "mean maps\n"\ "If True, the rms_box is reduced in size near "\ "bright sources and enlarged far from them. "\ "This scaling attempts to account for possible "\ "strong artifacts around bright sources while "\ "still acheiving accurate background rms and "\ "mean values when extended sources are present.\n"\ "This option is generally slower than non-"\ "adaptive scaling.\n"\ "Use the rms_box parameter to set the large-"\ "scale rms_box and the rms_box_bright parameter "\ "to set the small-scale rms_box. The threshold "\ "for bright sources can be set with the "\ "adaptive_thresh parameter.") #--------------------------------ADVANCED OPTIONS-------------------------------- split_isl = Bool(True, doc = "Split island if it is too large, has a large "\ "convex deficiency and it opens well.\n"\ "If it doesn't open well, then isl.mean = "\ "isl.clipped_mean, and is taken for fitting. "\ "Splitting, if needed, is always done for "\ "wavelet images", group = 'advanced_opts') splitisl_maxsize = Float(50.0, doc = "If island size in beam area is more than this, "\ "consider splitting island. Min value is 50", group = 'advanced_opts') splitisl_size_extra5 = Float(0.1, doc = "Fraction of island area for 5x5 opening to "\ "be used.\nWhen deciding to split an island, "\ "if the smallest extra sub islands while opening "\ "with a 5x5 footprint add up to at least this "\ "fraction of the island area, and if the largest "\ "sub island is less than 75% the size of the "\ "largest when opened with a 3x3 footprint, a "\ "5x5 opening is taken.", group = 'hidden') splitisl_frac_bigisl3 = Float(0.8, doc = "Fraction of island area for 3x3 opening to "\ "be used.\nWhen deciding to split an island, "\ "if the largest sub island when opened with a "\ "3x3 footprint is less than this fraction of the "\ "island area, then a 3x3 opening is considered.", group = 'hidden') peak_fit = Bool(True, doc = "Find and fit peaks of large islands iteratively\n"\ "When enabled, PyBDSF will identify and "\ "fit peaks of emission in "\ "large islands iteratively (the size of islands for which "\ "peak fitting is done is controlled with the "\ "peak_maxsize option), using a maximum of 10 "\ "Gaussians per iteration. Enabling this option will "\ "generally speed up fitting, but may result in "\ "somewhat higher residuals.", group = 'advanced_opts') peak_maxsize = Float(30.0, doc = "If island size in beam area is more than this, "\ "attempt to fit peaks iteratively (if "\ "peak_fit = True). Min value is 30", group = 'advanced_opts') fdr_alpha = Float(0.05, doc = "Alpha for FDR algorithm for thresholds\n"\ "If thresh is 'fdr', then the estimate of fdr_alpha "\ "(see Hancock et al. 2002 for details) is stored "\ "in this parameter.", group = "advanced_opts") fdr_ratio = Float(0.1, doc = "For thresh = None; " \ "if #false_pix / #source_pix < fdr_ratio, " \ "thresh = 'hard' else thresh = 'fdr'", group = "advanced_opts") kappa_clip = Option(None, Float(), doc = "Kappa for clipped mean and rms. None => calculate "\ "inside program\n"\ "The value of this is the factor used for Kappa-alpha "\ "clipping, as in AIPS. For an image with few source "\ "pixels added on to (Gaussian) noise pixels, the "\ "dispersion of the underlying noise will need to be "\ "determined. This is done iteratively, whereby the actual "\ "dispersion is first computed. Then, all pixels whose "\ "value exceeds kappa clip times this rms are excluded and "\ "the rms is computed again. This process is repeated until "\ "no more pixels are excluded. For well behaved noise "\ "statistics, this process will converge to the true noise "\ "rms with a value for this parameter ~3-5. A large "\ "fraction of source pixels, less number of pixels in total, "\ "or significant non-gaussianity of the underlying noise "\ "will all lead to non-convergence.", group = "advanced_opts") bmpersrc_th = Option(None, Float(), doc = "Theoretical estimate of number of beams " \ "per source. None => calculate inside program\n"\ "Its value is calculated inside the program if its "\ "value is given as None as N/[n*(alpha-1)], where N "\ "is the total number of pixels in the image, n is "\ "the number of pixels in the image whose value is "\ "greater than 5 times the clipped rms, and alpha is "\ "the slope of the differential source counts "\ "distribution, assumed to be 2.5. The value of "\ "bmpersrc_th is used to estimate the average separation "\ "in pixels between two sources, which in turn is used "\ "to estimate the boxsize for calculating the background "\ "rms and mean images. In addition, if the value is below "\ "25 (or the ratio of clipped mean to clipped rms of the "\ "image is greater than 0.1), the image is assumed to be "\ "confused and hence the background mean is put to zero.", group = "advanced_opts") spline_rank = Enum(3, 1, 2, 4, doc = "Rank of the interpolating function for rms/mean map\n"\ "This is an integer and is the order of the interpolating "\ "spline function to interpolate the background rms and "\ "mean map over the entire image.", group = "advanced_opts") minpix_isl = Option(None, Int(), doc = "Minimum number of pixels with emission per island "\ "(minimum is 6 pixels). "\ "None -> calculate inside program\n"\ "This is an integer and is the minimum number of pixels "\ "in an island for "\ "the island to be included. If None, the number of "\ "pixels is set to 1/3 of the area of an unresolved source "\ "using the beam and pixel size information in the "\ "image header. It is set to 6 pixels for all "\ "wavelet images.", group = "advanced_opts") maxpix_isl = Option(None, Int(), doc = "Maximum number of pixels with emission per island. "\ "None -> no limit\n"\ "This is an integer and is the maximum number of pixels "\ "in an island for the island to be included.", group = "advanced_opts") rms_value = Option(None, Float(), doc = "Value of constant rms in "\ "Jy/beam to use if rms_map = False. "\ "None => calculate inside program", group = "advanced_opts") aperture = Option(None, Float(), doc = "Radius of aperture in pixels inside which aperture fluxes are measured "\ "for each source. None => no aperture fluxes measured\n" \ "This is a float and sets the radius (in pixels) inside "\ "which the aperture flux is measured for each source. "\ "Depending on the value of aperture_posn, the aperture is centered either "\ "on the centroid or the peak of the source. Errors are calculated "\ "from the mean of the rms map inside the aperture.", group = "advanced_opts") aperture_posn = Enum('centroid', 'peak', doc = "Position the aperture (if aperture is not None) on: "\ "'centroid' or 'peak' of the source.\n"\ "This parameter determines how the aperture is "\ "positioned relative to the source. If 'centroid', "\ "the aperture is centered on the source centroid. If "\ "'peak', the aperture is centered on the source peak. "\ "If aperture=None (i.e., no aperture radius is specified), "\ "this parameter is ignored.", group = "advanced_opts") src_ra_dec = Option(None, List(Tuple(Float(), Float())), doc = "List of source positions at which fitting is done. "\ "E.g., src_ra_dec = [(197.1932, 47.9188), (196.5573, 42.4852)].\n"\ "This parameter defines the center positions at which "\ "fitting will be done. The size of the region used for "\ "the fit is given by the src_radius_pix parameter. "\ "Positions should be given as a list of RA and Dec, "\ "in degrees, one set per source. These positions will "\ "override the normal island finding module.", group = "advanced_opts") src_radius_pix = Option(None, Float(), doc = "Radius of the island (if src_ra_dec is not None) in pixels. "\ "None => radius is set to the FWHM of the beam major axis.\n"\ "This parameter determines the size of the region used "\ "to fit the source positions specified by the src_ra_dec "\ "parameter.", group = "advanced_opts") ini_gausfit = Enum('default', 'simple', 'nobeam', doc = "Initial guess for Gaussian "\ "parameters: 'default', 'simple', or 'nobeam'\n"\ "These are three different ways of estimating the initial "\ "guess for fitting of Gaussians to an island of emission.\n"\ "If 'default', the number of Gaussians is "\ "estimated from the number of peaks in the island. An initial "\ "guess is made for the parameters of these Gaussians before "\ "final fitting is done. This method should produce the best "\ "results when there are no large sources present.\n"\ "If 'simple', the maximum allowable number of Gaussians per island "\ "is set to 25, and no initial guess for the gaussian parameters "\ "is made.\nLastly, the 'nobeam' method is similar to the "\ "'default' method, but no information about the beam is "\ "used. This method is best used when source sizes are "\ "expected to be very different from the beam and is generally "\ "slower than the other methods.\n"\ "For wavelet images, the value used for the original "\ "image is used for wavelet order j <= 3 and 'nobeam' for "\ "higher orders.", group = "advanced_opts") ini_method = Enum('intensity', 'curvature', doc = "Method by which inital guess for fitting of Gaussians "\ "is chosen: 'intensity' or 'curvature'\n"\ "If 'intensity', the inital guess described in the help for "\ "the ini_gausfit parameter is calculated using the intensity "\ "(ch0) image. If 'curvature', it is done using the curvature "\ "map (see Hancock et al. 2012).", group = "advanced_opts") fix_to_beam = Bool(False, doc = "Fix major and minor axes and PA of Gaussians to beam?\n"\ "If True, then during fitting the major and minor axes "\ "and PA of the Gaussians are fixed to the beam. Only the "\ "amplitude and position are fit. If False, all parameters "\ "are fit.", group = "advanced_opts") fittedimage_clip = Float(0.1, doc = "Sigma for clipping Gaussians " \ "while creating fitted image\n"\ "When the residual image is being made after Gaussian "\ "decomposition, the model images for each fitted Gaussian "\ "are constructed up to a size 2b, such that the amplitude "\ "of the Gaussian falls to a value of fitted_image_clip times "\ "the local rms, b pixels from the peak.", group = "advanced_opts") check_outsideuniv = Bool(False, doc = "Check for pixels outside the "\ "universe\n"\ "If True, then the coordinate of each pixel is examined "\ "to check if it is outside the universe, which may "\ "happen when, e.g., an all sky image is made with SIN "\ "projection (commonly done at LOFAR earlier). When found, "\ "these pixels are blanked (since imaging software do not "\ "do this on their own). Note that this process takes a "\ "lot of time, as every pixel is checked in case weird "\ "geometries and projections are used", group = "advanced_opts") trim_box = Option(None, Tuple(Float(), Float(), Float(), Float()), doc = "Do source detection on only a part of the image. "\ "Specify as (xmin, xmax, ymin, ymax) in pixels. "\ "E.g., trim_box = (120, 840, 15, 895). None => "\ "use entire image", group = "advanced_opts") stop_at = Enum(None, 'isl', 'read', doc = "Stops after: 'isl' = island finding step or "\ "'read' = image reading step", group = "advanced_opts") group_by_isl = Bool(False, doc = "Group all Gaussians in each island into a single "\ "source\n"\ "If True, all Gaussians in the island belong to a "\ "single source. If False, grouping is controlled "\ "by the group_tol parameter.", group = "advanced_opts") group_method = Enum('intensity', 'curvature', doc = "Group Gaussians into sources using 'intensity' map "\ "or 'curvature' map\n"\ "Gaussians are deemed to be a part of "\ "the same source if: 1. no pixel on the line joining "\ "the centers of any pair of Gaussians has a (Gaussian-"\ "reconstructed) value less than the island threshold, and "\ "2. the centers are separated by a distance less than "\ "half the sum of their FWHMs along the line joining them.\n"\ "If 'curvature', the above comparisons are done on the "\ "curature map (see Hancock et al. 2012). If 'intensity', "\ "the comparisons are done on the intensity map.", group = "advanced_opts") group_tol = Float(1.0, doc = "Tolerance for grouping of Gaussians into sources: "\ "larger values will result in larger sources\n"\ "Sources are created by "\ "grouping nearby Gaussians as follows: (1) If the "\ "difference between the minimum value between two "\ "Gaussians and the lower of the peak flux densities of "\ "the Gaussians in an island is less than "\ "group_tol * thresh_isl * rms_clip, "\ "and (2) if the centres are seperated by a distance less "\ "than 0.5*group_tol of the sum of their fwhms along the "\ "PA of the line joining them, they belong to the "\ "same island.", group = "advanced_opts") blank_limit = Option(None, Float(), doc = "Limit in Jy/beam below which pixels are blanked. "\ "None => no such blanking is done\n"\ "All pixels in the ch0 image with a value less than the "\ "specified limit and with at least 4 neighboring pixels "\ "with values also less than this limit are blanked. "\ "If None, any such pixels are left unblanked. "\ "Pixels with a value of NaN are always blanked.", group = "advanced_opts") detection_image = String(doc = "Detection image file name used only for detecting "\ "islands of emission. Source measurement is still done "\ "on the main image\n"\ "The detection image can be a FITS or CASA 2-, "\ "3-, or 4-D cube. The detection image and the main"\ "image must have the same size and be registered.", group = "advanced_opts") rmsmean_map_filename = List(None, doc = "Filenames of FITS files to use as the mean and rms maps, "\ "given as a list [, ]. If "\ "supplied, the internally generated mean and rms maps "\ "are not used.", group = 'advanced_opts') do_mc_errors = Bool(False, doc = "Estimate uncertainties for 'M'-type sources using Monte "\ "Carlo method\n"\ "If True, uncertainties on the sizes and "\ "positions of 'M'-type sources "\ "due to uncertainties in the constituent Gaussians are "\ "estimated using a Monte Carlo technique. These "\ "uncertainties are added in quadrature with those "\ "calculated using Condon (1997). If False, "\ "these uncertainties are ignored, and errors are "\ "calculated using Condon (1997) only.\n"\ "Enabling this option will result in longer run "\ "times if many 'M'-type sources are present, but "\ "should give better estimates of the uncertainites, " "particularly for complex sources composed of many "\ "Gaussians.", group = "advanced_opts") ncores = Option(None, Int(), doc = "Number of cores to use during fitting, None => "\ "use all\n"\ "Sets the number of cores to use during fitting.", group = "advanced_opts") do_cache = Bool(False, doc = "Cache internally derived images to disk\n" \ "This option controls whether internally "\ "derived images are stored in memory or are "\ "cached to disk. Caching can reduce the amount "\ "of memory used, and is therefore useful when "\ "analyzing large images.", group = "advanced_opts") #--------------------------------ADAPTIVE RMS_BOX OPTIONS-------------------------------- rms_box_bright = Option(None, Tuple(Int(), Int()), doc = "Box size, step size for rms/mean map "\ "calculation near bright sources. Specify as (box, step) in "\ "pixels. None => calculate inside program\n"\ "This parameter sets the box and step sizes "\ "to use near bright sources (determined by the "\ "adaptive_thresh parameter). The large-scale "\ "box size is set with the rms_box parameter.", group = "adaptive_rms_box") adaptive_thresh = Option(None, Float(), doc = "Sources with pixels "\ "above adaptive_thresh*clipped_rms will be considered as "\ "bright sources (i.e., with potential artifacts). "\ "Minimum is 10.0. "\ "None => calculate inside program\n"\ "This parameter sets the SNR above which "\ "sources may be affected by strong artifacts "\ "Sources that meet the SNR threshold will use the "\ "small-scale rms_box (which helps to exclude artifacts) "\ "if their sizes at a threshold of 10.0 is less "\ "than 25 beam areas.\n" "If None, the threshold is varied from 500 "\ "to 50 to attempt to obtain at least 5 candidate "\ "bright sources.", group = "adaptive_rms_box") #--------------------------------A-TROUS OPTIONS-------------------------------- atrous_jmax = Int(0, doc = 'Max allowed wavelength order, 0 => calculate '\ 'inside program\n'\ 'This is an integer which is the maximum order of '\ 'the a-trous wavelet decomposition. If 0 (or <0 or '\ '>15), then the value is determined within the '\ 'program. The value of this parameter is then '\ 'estimated as the (lower) rounded off value of '\ 'ln[(nm-l)/(l-1) + 1]/ln2 + 1 where nm is the '\ 'minimum of the residual image size (n, m) in pixels '\ 'and l is the length of the filter a-trous lpf (see '\ 'the atrous_lpf parameter for more info).\nA sensible '\ 'value of jmax is such that the size of the kernel is '\ 'not more than 3-4 times smaller than the smallest image '\ 'dimension.', group = "atrous_do") atrous_lpf = Enum('b3', 'tr', doc = "Low pass filter, either 'b3' or "\ "'tr', for B3 spline or Triangle\n"\ "This is the low pass filter, which can be "\ "either the B3 spline or the Triangle function, which "\ "is used to generate the a-trous wavelets. The B3 "\ "spline is [1, 4, 6, 4, 1] and the triangle is "\ "[1, 2, 1], normalised so that the sum is unity. The "\ "lengths of the filters are hence 5 and 3 respectively.", group = "atrous_do") atrous_bdsm_do = Bool(True, doc = "Perform source extraction on each wavelet "\ "scale\n"\ "If True, fitting is done on each wavelet scale "\ "(or sum of scales if atrous_sum is True). If False, "\ "no fitting is done.", group = "atrous_do") atrous_orig_isl = Bool(False, doc = "Restrict wavelet Gaussians to islands found "\ "in original image\n"\ "If True, all wavelet Gaussians must lie within "\ "the boundaries of islands found in the original "\ "image. If False, new islands that are found only in "\ "the wavelet images are included in the final "\ "fit.", group = "atrous_do") atrous_sum = Bool(True, doc = "Fit to the sum of remaining wavelet scales\n"\ "If True, fitting is done on an image that is the sum "\ "of the remaining wavelet scales. Using the sum will "\ "generally result in improved signal. If False, "\ "fitting is done on only the wavelet scale under "\ "consideration.", group = "atrous_do") use_scipy_fft = Bool(True, doc = "Use fast SciPy FFT for convolution\n"\ "If True, the SciPy FFT function will be used instead "\ "of the custom version. The SciPy version is much "\ "faster but also uses much more memory.", group = "atrous_do") #--------------------------------FLAGGING OPTIONS-------------------------------- flag_smallsrc = Bool(False, doc = "Flag sources smaller than "\ "flag_minsize_bm times beam area\n"\ "If True, "\ "then fitted Gaussians whose size is less than "\ "flag_minsize_bm times the synthesized beam area are "\ "flagged. When "\ "combining Gaussians into sources, an "\ "error is raised if a 2x2 box with the peak of "\ "the Gaussian does not have all four pixels "\ "belonging to the source. Usually this means "\ "that the Gaussian is an artifact or has a very "\ "small size. \nIf False, then if either of the sizes "\ "of the fitted Gaussian is zero, then the "\ "Gaussian is flagged.\nIf the image is barely Nyquist "\ "sampled, this flag is best set to False. This "\ "flag is automatically set to False while "\ "decomposing wavelet images into Gaussians. ", group = "flagging_opts") flag_minsnr = Float(0.6, doc = "Flag Gaussian if peak is less than flag_minsnr "\ "times thresh_pix times local rms\n"\ "Any fitted Gaussian whose peak is less than "\ "flag_minsnr times thresh_pix times the local rms "\ "is flagged. The flag value is increased by 1.", group = "flagging_opts") flag_maxsnr = Float(1.5, doc = "Flag Gaussian if peak is greater than "\ "flag_maxsnr times image value at the peak\n"\ "Any fitted Gaussian whose peak is greater than "\ "flag_maxsnr times the image value at the peak "\ "is flagged. The flag value is increased by 2.", group = "flagging_opts") flag_maxsize_isl = Float(2.0, doc = "Flag Gaussian if x, y bounding box "\ "around sigma-contour is factor times island bbox\n"\ "Any fitted Gaussian whose maximum x-dimension is "\ "larger than flag_maxsize_isl times the x-dimension "\ "of the island (and likewise for the y-dimension) is "\ "flagged. The flag value is increased by 16 (for x) "\ "and 32 (for y).", group = "flagging_opts") flag_maxsize_fwhm = Float(0.5, doc = "Flag Gaussian if fwhm-contour times factor extends beyond island\n"\ "Any fitted Gaussian whose contour of flag_maxsize_fwhm times the fwhm "\ "falls outside the island is "\ "flagged. The flag value is increased by 256.", group = "flagging_opts") flag_bordersize = Int(0, doc = "Flag Gaussian if centre is outside border "\ "- flag_bordersize pixels\n"\ "Any fitted Gaussian whose centre is border pixels "\ "outside the island bounding box is flagged. The flag "\ "value is increased by 4 (for x) and 8 (for y).", group = "flagging_opts") flag_maxsize_bm = Float(25.0, doc = "Flag Gaussian if area greater than "\ "flag_maxsize_bm times beam area\n"\ "Any fitted "\ "Gaussian whose size is greater than flag_maxsize_"\ "bm times the synthesized beam is flagged. The "\ "flag value is increased by 64.", group = "flagging_opts") flag_minsize_bm = Float(0.7, doc = "Flag Gaussian if flag_smallsrc = True "\ "and area smaller than flag_minsize_bm times "\ "beam area\n"\ "If flag_smallsrc is "\ "True, then any fitted Gaussian whose size "\ "is less than flag_maxsize_bm times the "\ "synthesized beam is flagged. The Gaussian "\ "flag is increased by 128.", group = "flagging_opts") #-----------------------------MULTICHANNEL OPTIONS-------------------------------- beam_spectrum = Option(None, List(Tuple(Float(), Float(), Float())), doc = "FWHM of synthesized beam per channel. Specify as "\ "[(bmaj_ch1, bmin_ch1, bpa_ch1), (bmaj_ch2, "\ "bmin_ch2, bpa_ch2), etc.] in degrees. E.g., "\ "beam_spectrum = [(0.01, 0.01, 45.0), (0.02, "\ "0.01, 34.0)] for two channels. None => all "\ "equal to beam\n"\ "If None, then the channel-dependent "\ "restoring beam is either assumed to be a constant or "\ "to scale with frequency, depending on whether the "\ "parameter beam_sp_derive is False or True.", group = "multichan_opts") frequency_sp = Option(None, List(Float()), doc = "Frequency in Hz of channels in input image when "\ "more than one channel is present. "\ "E.g., frequency_sp = [74e6, 153e6]. "\ "None => get from header\n"\ "If the frequency is not given "\ "by the user, then it is looked for in the "\ "image header. If not found, then an error "\ "is raised. PyBDSF will not work without the "\ "knowledge of the frequency.", group = "multichan_opts") beam_sp_derive = Bool(True, doc = "If True and beam_spectrum is None, then "\ "assume header beam is for lowest frequency and scales "\ "with frequency for channels\n"\ "If True and the parameter beam_spectrum is None, then "\ "we assume that the beam in the header is for the lowest "\ "frequency of the image cube and scale accordingly to "\ "calculate the beam per channel. If False, then a "\ "constant value of the beam is taken instead.", group = "multichan_opts") collapse_mode = Enum('average', 'single', 'file', doc = "Collapse method: 'average', "\ "'single', or 'file'. If 'file', use a user-provided"\ "file, else either average channels or take single "\ "channel to perform source detection on\n"\ "This parameter determines whether, when multiple "\ "channels are present, the source extraction is "\ "done on a single channel or an average of many "\ "channels.", group = 'multichan_opts') collapse_file = String(None, doc = "If collapse_mode is 'file' then use this file"\ "as the ch0 image. The image supplied can be a FITS or CASA 2-, "\ "3-, or 4-D cube. The detection image and the main"\ "image must have the same size and be registered.", group = 'multichan_opts') collapse_ch0 = Int(0, doc = "Number of the channel for source extraction, "\ "if collapse_mode = 'single', starting from 0", group = 'multichan_opts') collapse_av = List(None, doc = "List of channels to average if collapse_mode "\ "= 'average', starting from 0. E.g., collapse_av "\ "= [0, 1, 5]. [] => all\n"\ "This parameter is a list of channels to be averaged "\ "to produce the continuum image for performing source "\ "extraction, if collapse_mode is 'average'. If the "\ "value is an empty list ([]), then all channels are used. Else, the "\ "value is a Python list of channel numbers, starting "\ "from 0 (i.e., the first channel has number 0, the "\ "second has number 1, etc.).", group = 'multichan_opts') collapse_wt = Enum('unity', 'rms', doc = "Weighting: 'unity' or 'rms'. "\ "Average channels with weights = 1 or 1/rms_clip^2 if " \ "collapse_mode = 'average'\n"\ "When collapse_mode is 'average', then if this value "\ "is 'unity', the channels given by collapse_av are "\ "averaged with unit weights and if 'rms', then they "\ "are averaged with weights which are inverse square "\ "of the clipped rms of each channel image.", group = 'multichan_opts') #-----------------------------OUTPUT OPTIONS-------------------------------- plot_islands = Bool(False, doc = 'Make separate plots of each island during '\ 'fitting (for large images, this may take '\ 'a long time and a lot of memory)', group = "output_opts") plot_allgaus = Bool(False, doc = 'Make a plot of all Gaussians at the end', group = "output_opts") output_all = Bool(False, doc = "Write out all files automatically to directory "\ "'filename_pybdsm'", group = "output_opts") opdir_overwrite = Enum('overwrite', 'append', doc = "'overwrite'/'append': If output_all=True, "\ "delete existing "\ "files or append a new directory", group = "output_opts") bbs_patches = Enum(None, 'single', 'gaussian', 'source', 'mask', doc = "For BBS format, type of patch to use: None "\ "=> no patches. "\ "'single' => all Gaussians in one patch. "\ "'gaussian' => each Gaussian gets its own "\ "patch. 'source' => all Gaussians belonging "\ "to a single source are grouped into one patch. "\ "'mask' => use mask file specified by bbs_patches_mask\n"\ "When the Gaussian catalogue is written as a "\ "BBS-readable sky file, this determines whether "\ "all Gaussians are in a single patch, there are "\ "no patches, all Gaussians for a given source "\ "are in a separate patch, each Gaussian gets "\ "its own patch, or a mask image is used to define "\ "the patches.\n"\ "If you wish to have patches defined by island, "\ "then set group_by_isl = True (under advanced_opts) "\ "before fitting to force all Gaussians in an "\ "island to be in a single source. Then set "\ "bbs_patches='source' when writing the catalog.", group = "output_opts") bbs_patches_mask = Option(None, String(), doc = "Name of the mask file (of same size as input "\ "image) that defines the patches if bbs_patches "\ "= 'mask'\nA mask file may be used to define the "\ "patches in the output BBS sky model. The mask "\ "image should be 1 inside the patches and 0 "\ "elsewhere and should be the same size as the "\ "input image (before any trim_box is applied). Any "\ "Gaussians that fall outside of the patches "\ "will be ignored and will not appear in the "\ "output sky model.", group = "output_opts") solnname = Option(None, String(), doc = "Name of the run, to be prepended "\ "to the name of the output directory. E.g., "\ "solname='Run_1'", group = "output_opts") indir = Option(None, String(), doc = "Directory of input FITS files. None => get "\ "from filename", group = "output_opts") savefits_residim = Bool(False, doc = "Save residual image as fits file", group = "output_opts") savefits_rmsim = Bool(False, doc = "Save background rms image as fits file", group = "output_opts") savefits_meanim = Bool(False, doc = "Save background mean image as fits file", group = "output_opts") savefits_rankim = Bool(False, doc = "Save island rank image as fits file", group = "output_opts") savefits_normim = Bool(False, doc = "Save norm image as fits file", group = "output_opts") print_timing = Bool(False, doc = "Print basic timing information", group = "output_opts") verbose_fitting = Bool(False, doc = "Print out extra information " \ "during fitting", group = "output_opts") quiet = Bool(False, doc = "Suppress text output to screen. Output is "\ "still sent to the log file as usual", group = "output_opts") #------------------------POLARISATION OPTIONS------------------------------ pi_fit = Bool(True, doc = "Check the polarized intesity (PI) image for "\ "sources not found in Stokes I\n"\ "If True, the polarized intensity image is "\ "searched for sources not present in the Stokes "\ "I image. If any such sources are found, they are "\ "added to the the Stokes I source lists. Use the "\ "pi_thresh_pix and pi_thresh_isl parameters to "\ "control island detection in the PI image.", group = "polarisation_do") pi_thresh_isl = Option(None, Float(), doc = "Threshold for PI island boundary in number of sigma "\ "above the mean. None => use thresh_isl\n"\ "This parameter determines the region to which fitting "\ "is done in the polarized intensity (PI) image. "\ "A higher value will produce smaller islands, "\ "and hence smaller regions that are considered in the "\ "fits. A lower value will produce larger islands. "\ "Use the pi_thresh_pix parameter to set the detection " "threshold for sources. Generally, pi_thresh_isl should "\ "be lower than pi_thresh_pix.", group = "polarisation_do") pi_thresh_pix = Option(None, Float(), doc = "Source detection threshold for PI image: threshold for the "\ "island peak in number of sigma "\ "above the mean. None => use thresh_pix\n"\ "This parameter sets the overall detection threshold "\ "for islands in the polarized intensity (PI) image "\ "(i.e. pi_thresh_pix = 5 will find all sources "\ "with peak flux densities per beam of 5-sigma or greater). Use the "\ "pi_thresh_isl parameter to control how much of each island "\ "is used in fitting. Generally, pi_thresh_pix should be larger "\ "than pi_thresh_isl.", group = "polarisation_do") #-----------------------------PSF VARY OPTIONS-------------------------------- psf_generators = Enum('calibrators', 'field', doc = "PSF generators: 'calibrators' or 'field'\n"\ " If 'calibrator', only one source is taken per "\ "facet, and sources between psf_snrtop and maximum "\ "SNR are primary Voronoi generators. If 'field', "\ "all sources between psf_snrbot and psf_snrtop are "\ "secondary generators to be used in tessellating. "\ "Currently, the 'field' option is not implemented.", group = "hidden") psf_nsig = Float(3.0, doc = "Kappa for clipping within each bin\n"\ "When constructing a set of 'unresolved' sources "\ "for psf estimation, the (clipped) median, rms and "\ "mean of major and minor axis sizes of Gaussians versus "\ "SNR within each bin is calculated using kappa = "\ "psf_nsig.", group = "psf_vary_do") psf_over = Int(2, doc = "Factor of nyquist sample for binning bmaj, "\ "etc. vs SNR", group = "psf_vary_do") psf_kappa2 = Float(2.0, doc = "Kappa for clipping for analytic fit\n"\ "When iteratively arriving at a statistically "\ "probable set of 'unresolved' sources, the fitted "\ "major and minor axis sizes versus SNR are binned "\ "and fitted with analytical functions. Those "\ "Gaussians which are within psf_kappa2 times "\ "the fitted rms from the fitted median are then "\ "considered 'unresolved' and are used further to "\ "estimate the PSFs.", group = "psf_vary_do") psf_smooth = Option(None, Float(), doc = "Size of Gaussian to use for smoothing of "\ "interpolated images in arcsec. None => no "\ "smoothing", group = "psf_vary_do") psf_snrcut = Float(10.0, doc = "Minimum SNR for statistics\n"\ "Only Gaussians with SNR greater than this are "\ "considered for processing. The minimum value is 5.0", group = "psf_vary_do") psf_snrtop = Float(0.15, doc = "Fraction of SNR > snrcut as primary generators\n"\ "If psf_generators is 'calibrator', then the peak "\ "pixels of Gaussians which are the psf_snrtop "\ "fraction of SNR are taken as Voronoi generators. If "\ "psf_generators is 'field', then peak pixels of "\ "Gaussians which are between psf_snrbot and psf_snrtop "\ "fraction of the highest SNR are taken.", group = "psf_vary_do") psf_snrbot = Float(0.20, doc = "Fraction of SNR > snrcut as all generators\n"\ "If psf_generators is 'field', then all sources which "\ "are between a fraction psf_snrbot and a fraction "\ "psf_snrtop of the highest SNR Gaussians are taken as "\ "Voronoi generators. That is, for a value of 0.2, the "\ "top 20% (in terms of SNR) of Gaussians are taken.", group = "hidden") psf_snrcutstack = Float(15.0, doc = "Unresolved sources with higher SNR "\ "taken for stacked psfs\n"\ "Only Gaussians with SNR greater than this are used for "\ "estimating psf images in each tile.", group = "psf_vary_do") psf_gencode = Enum('list', 'file', doc = "'list'/'file': Take primary "\ "gens from Gaussian list or file\n"\ "This is a string which can be either of 'list' or "\ "'file' (default is 'list'; 'file' not implemented "\ "yet). If psf_generators is 'calibrators', then the "\ "generators used for Voronoi tessellation of the "\ "image are either taken from a file if psf gencode is "\ "'file' or are determined from the data if psf gencode "\ "is 'list' (see psf_snrcut and psf_snrtop). The maximum "\ "pixel for each source is used as the generator. For "\ "'file' to be used, a list of good sources whose "\ "psfs are believed to close to theoretical (e.g. strong "\ "calibrators) need to be supplied with the metadata.", group = "hidden") psf_primarygen = String('', doc = "Filename for primary gens if psf_gencode='file'\n"\ "This is the filename with the generators if psf_gencode "\ "is 'file'. This is not yet implemented.", group = "hidden") psf_itess_method = Int(0, doc = "0 = normal, 1 = 0 + round, 2 = LogSNR, "\ "3 = SqrtLogSNR\n"\ "This is an integer which can be 0, 1, 2 or 3 "\ "(default is 0), which corresponds to a tessellation "\ "method. "\ "If 0, 2 or 3, then the weights used for Voronoi "\ "tessellation are unity, log(SNR) and sqrt[log(SNR)] where "\ "SNR is the signal to noise ratio of the generator "\ "in a tile. If 1, then the image is tessellated such "\ "that each tile has smooth boundaries instead of straight "\ "lines, using pixel-dependent weights.", group = "psf_vary_do") psf_tess_sc = Enum('s', 'c', doc = "('s')imple/('c')omplicated - normal "\ "or approximate (fuzzy)\n"\ "If 's', then each pixel can only belong to one Voronoi "\ "tile. If 'c', then we do a fuzzy tessellation where border "\ "pixels can belong to more than one tile. However, we do "\ "not yet process the result of fuzzy tessellation and hence "\ "it is advisable to use 's'.", group = "hidden") psf_tess_fuzzy = Float(0.05, doc = "Fraction of overlap for fuzzy tessellation\n"\ "If psf_tess_sc is 'c', then this determines the fraction "\ "of overlap between adjacent tiles for fuzzy tessellation.", group = "hidden") psf_use_shap = Bool(False, doc = "Use shapelets for PSF variation", group = "hidden") psf_high_snr = Option(None, Float(), doc = "SNR above which all sources are taken to be unresolved. "\ "E.g., psf_high_snr = 20.0. None => no such selection is made\n"\ "Gaussians with SNR greater than this are "\ "used to determine the PSF variation, even if they are deemed "\ "to be resolved. This corrects for the unreliability at high SNRs in the "\ "algorithm used to find unresolved sources. The minimum value is 20.0", group = "psf_vary_do") psf_stype_only = Bool(True, doc = "Restrict sources to "\ "be only of type 'S'", group = "psf_vary_do") psf_stype_only = Bool(True, doc = "Restrict sources to "\ "be only of type 'S'", group = "psf_vary_do") psf_fwhm = Option(None, Tuple(Float(), Float(), Float()), doc = "FWHM of the PSF. Specify as (maj, "\ "min, pos ang E of N) in degrees. "\ "E.g., psf_fwhm = (0.06, 0.02, 13.3). None => "\ "estimate from image\n"\ "If the size of the PSF is specified with this option, "\ "the PSF and its variation acrosss the image are "\ "assumed to be constant and are not estimated "\ "from the image. Instead, all sources "\ "are deconvolved with the specified PSF.", group = "psf_vary_do") #-----------------------------SHAPELET OPTIONS-------------------------------- shapelet_basis = Enum("cartesian", "polar", doc = "Basis set for shapelet decomposition: "\ "'cartesian' or 'polar'\n"\ "If shapelet decomposition is done, this determines "\ "the type of shapelet basis used. Currently however, "\ "only cartesian is supported.", group = "shapelet_do") shapelet_fitmode = Enum("fit", None, doc = "Calculate shapelet coeff's by fitting ('fit') "\ "or integrating (None)\n"\ "If shapelet do is True, then this determines the "\ "method of calculating shapelet coefficients. If None, "\ "then these are calculated by integrating (actually, "\ "by summing over pixels, which introduces errors due to "\ "discretisation). If 'fit', then the coefficients are "\ "found by least-squares fitting of the shapelet basis "\ "functions to the image.", group = "shapelet_do") shapelet_gresid = Bool(False, doc = "Use Gaussian residual image for shapelet "\ "decomposition?\n"\ "If True, then the shapelet decomposition is done "\ "on the Gaussian residual image rather that the "\ "ch0 image.", group = "shapelet_do") #-------------------------SPECTRAL INDEX OPTIONS-------------------------------- flagchan_rms = Bool(True, doc = "Flag channels before (averaging and) "\ "extracting spectral index, if their rms is "\ "more than 5 (clipped) sigma outside the median "\ "rms over all channels, but only if <= 10% of "\ "channels\n"\ "If True, then the clipped rms and median (r and m) "\ "of the clipped rms of each channel is calculated. "\ "Those channels whose clipped rms is greater than "\ "4r away from m are flagged prior to averaging and "\ "calculating spectral indices from the image cube. "\ "However, these channels are flagged only if the "\ "total number of these bad channels does not exceed "\ "10% of the total number of channels themselves.", group = "spectralindex_do") flagchan_snr = Bool(True, doc = "Flag channels that do not meet SNR criterion "\ "set by specind_snr\n"\ "If True, then channels (after averaging if needed) "\ "will be flagged and will not be used during fitting.", group = "spectralindex_do") specind_maxchan = Int(0, doc = "Maximum number of channels to average for "\ "a given source when when attempting to meet target SNR. "\ "1 => no averaging; 0 => no maximum\n"\ "If spectralindex_do is True, then for a given source, "\ "if the flux densities in each channel are below a threshold, "\ "then this determines the maximum number of channels to "\ "average.", group = "spectralindex_do") specind_snr = Float(3.0, doc = "Target SNR to use when fitting power law. If "\ "there is insufficient SNR, neighboring channels "\ "are averaged to attempt to obtain the target SNR. "\ "Channels with SNRs below this will be flagged if "\ "flagchan_snr = True\n"\ "The maximum allowable number of channels to average "\ "is determined by the specind_maxchan parameter.", group = "spectralindex_do") #-------------------------HIDDEN OPTIONS-------------------------------- debug = Bool(False, doc = "Print debug info to the logfile", group = "hidden") outfile = Option(None, String(), doc = "Output file name. None => file is named "\ "automatically; 'SAMP' => send to SAMP hub "\ "(e.g., to TOPCAT, ds9, or Aladin)", group = 'hidden') broadcast = Bool(False, doc = "Broadcast Gaussian and source IDs and "\ "coordinates to SAMP hub when a Gaussian is "\ "clicked?\nNote that for the "\ "IDs to be useful, a catalog must have been sent "\ "to the SAMP hub previously using the write_catalog "\ "task (with outfile = 'SAMP').", group = 'hidden') clobber = Bool(False, doc = "Overwrite existing file?", group = 'hidden') format = Enum('fits', 'ds9', 'ascii', 'bbs', 'star', 'kvis', 'sagecal', 'csv', 'casabox', doc = "Format of output catalog: 'bbs', "\ "'ds9', 'fits', 'star', 'kvis', 'ascii', 'csv', 'casabox', or 'sagecal'\n"\ "The following formats are supported:\n"\ "'bbs' - BlackBoard Selfcal sky model format "\ "(Gaussian list only)\n"\ "'ds9' - ds9 region format\n"\ "'fits' - FITS catalog format, readable by many "\ "software packages, including IDL, TOPCAT, Python, "\ "fv, Aladin, etc.\n"\ "'star' - AIPS STAR format (Gaussian list only)\n"\ "'kvis' - kvis format (Gaussian list only)\n"\ "'ascii' - simple text file\n"\ "'sagecal' - SAGECAL format (Gaussian list only)\n"\ "Catalogues with the 'fits' and 'ascii' formats "\ "include all available information (see headers "\ "of the output file for column definitions). The "\ "other formats include only a subset of the full "\ "information.", group = 'hidden') srcroot = Option(None, String(), doc = "Root name for entries in the output catalog "\ "(BBS format only). None => use image file name", group = 'hidden') incl_chan = Bool(False, doc = "Include flux densities from each channel "\ "(if any)?", group = 'hidden') incl_empty = Bool(False, doc = "Include islands without any valid Gaussians "\ "(source list only)?\n"\ "If True, islands for which Gaussian fitting "\ "failed will be included in the output catalog. "\ "In these cases, the source IDs "\ "are negative.", group = 'hidden') force_output = Bool(False, doc = "Force creation of output file, even if the "\ "catalog is empty?\n"\ "If True, the output catalog will be created, "\ "even if there are no sources. In this case, "\ "the catalog will have a header but no entries.", group = 'hidden') catalog_type = Enum('srl', 'gaul', 'shap', doc = "Type of catalog to write: 'gaul' - Gaussian "\ "list, 'srl' - source list (formed "\ "by grouping Gaussians), 'shap' - shapelet "\ "list (FITS format only)", group = 'hidden') correct_proj = Bool(True, doc = "Correct source parameters for image projection (BBS format only)?\n"\ "If True, the source parameters in the output catalog will be "\ "corrected for first-order projection effects. If False, "\ "no correction is done. In this case, the position angle "\ "is relative to the +y axis, NOT true north, and source sizes "\ "are calculated assuming a constant pixel scale (equal to the " "scale at the image center).\n "\ "If True, the position angle and source size "\ "are corrected using the average pixel size and " "angle offset (between the +y axis and north) at "\ "the location of the source center.", group = 'hidden') img_format = Enum('fits', 'casa', doc = "Format of output image: 'fits' or 'casa'", group = 'hidden') img_type = Enum('gaus_resid', 'shap_resid', 'rms', 'mean', 'gaus_model', 'shap_model', 'ch0', 'pi', 'psf_major', 'psf_minor', 'psf_pa', 'psf_ratio', 'psf_ratio_aper', 'island_mask', doc = "Type of image to export: 'gaus_resid', "\ "'shap_resid', 'rms', 'mean', 'gaus_model', "\ "'shap_model', 'ch0', 'pi', 'psf_major', "\ "'psf_minor', 'psf_pa', 'psf_ratio', 'psf_ratio_aper', "\ "'island_mask'\nThe following images "\ "can be exported:\n"\ "'ch0' - image used for source detection\n"\ "'rms' - rms map image\n"\ "'mean' - mean map image\n"\ "'pi' - polarized intensity image\n"\ "'gaus_resid' - Gaussian model residual image\n"\ "'gaus_model' - Gaussian model image\n"\ "'shap_resid' - Shapelet model residual image\n"\ "'shap_model' - Shapelet model image\n"\ "'psf_major' - PSF major axis FWHM image (FWHM in arcsec)\n"\ "'psf_minor' - PSF minor axis FWHM image (FWHM in arcsec)\n"\ "'psf_pa' - PSF position angle image (degrees east of north)\n"\ "'psf_ratio' - PSF peak-to-total flux ratio (in units of 1/beam)\n"\ "'psf_ratio_aper' - PSF peak-to-aperture flux ratio (in units of 1/beam)\n"\ "'island_mask' - Island mask image (0 = outside island, 1 = inside island)", group = 'hidden') mask_dilation = Int(0, doc = "Number of iterations to use for island-mask dilation. "\ "0 => no dilation\nThis option determines the number of "\ "dilation iterations to use when making the island mask. "\ "More iterations implies larger masked regions (one iteration "\ "expands the size of features in the mask by one pixel in all "\ "directions). After dilation, a closing operation is performed "\ "(using a structure array the size of the beam) to remove gaps "\ "and holes in the mask that are smaller than the beam.", group = "hidden") pad_image = Bool(False, doc = "Pad image (with zeros) to original size\nIf True, the output "\ "image is padded to be the same size as the original "\ "image (without any trimming defined by the trim_box "\ "parameter). If False, the output image will have the "\ "size specified by the trim_box parameter.", group = "hidden") ch0_image = Bool(True, doc = "Show the ch0 image. This is the image used for "\ "source detection", group = "hidden") rms_image = Bool(True, doc = "Show the background rms image", group = "hidden") mean_image = Bool(True, doc = "Show the background mean image", group = "hidden") ch0_islands = Bool(True, doc = "Show the ch0 image with islands and Gaussians "\ "(if any) overplotted", group = "hidden") ch0_flagged = Bool(False, doc = "Show the ch0 image with flagged Gaussians "\ "(if any) overplotted", group = "hidden") gresid_image = Bool(True, doc = "Show the Gaussian residual image", group = "hidden") sresid_image = Bool(False, doc = "Show the shapelet residual image", group = "hidden") gmodel_image = Bool(True, doc = "Show the Gaussian model image", group = "hidden") smodel_image = Bool(False, doc = "Show the shapelet model image", group = "hidden") pi_image = Bool(False, doc = "Show the polarized intensity image", group = "hidden") source_seds = Bool(False, doc = "Plot the source SEDs and best-fit spectral "\ "indices (if image was processed with "\ "spectralindex_do = True). "\ "Sources may be chosen by ID with the 'c' key "\ "or, if ch0_islands = True, by picking a source with "\ "the mouse", group = "hidden") psf_major = Bool(False, doc = "Show the PSF major axis variation (values are "\ "FWHM in arcsec)", group = "hidden") psf_minor = Bool(False, doc = "Show the FWHM of PSF minor axis variation (values are "\ "FWHM in arcsec)", group = "hidden") psf_pa = Bool(False, doc = "Show the PSF position angle variation (values are "\ "angle E from N in degrees)", group = "hidden") def __init__(self, values = None): """Build an instance of Opts and (possibly) initialize some variables. Parameters: values: dictionary of key->value for initialization of variables """ TCInit(self) if values is not None: self.set_opts(values) def _parse_string_as_bool(self, bool_string): """ 'private' function performing parse of a string containing a bool representation as defined in the parameter set/otdb implementation """ true_chars = ['t', 'T', 'y', 'Y', '1'] false_chars = ['f', 'F', 'n', 'N', '0'] if bool_string[0] in true_chars: return True if bool_string[0] in false_chars: return False raise tcError( "Supplied string cannot be parsed as a bool: {0}".format(bool_string)) def set_opts(self, opts): """Set multiple variables at once. opts should be dictionary of name->value """ opts = dict(opts) for k, v in opts.items(): try: # Fix for lofar parameter set integration: # If the attribute is a bool, test if it is a string. # and then try to parse it if hasattr(self, k): if isinstance(self.__getattribute__(k), bool): if isinstance(v, bool) or v is None: # just enter the bool into the parameter pass elif isinstance(v, basestring): # Try parse it as a parameter set bool string v = self._parse_string_as_bool(v) else: # raise error raise tcError("unknown type for bool variable") if v == "none": v = None self.__setattr__(k, v) except tcError as e: # Catch and re-raise as a RuntimeError raise RuntimeError( 'Parameter "{0}" is not defined properly. \n {1}'.format(k , str(e))) def set_default(self, opt_names = None): """Set one or more opts to default value. opt_names should be a list of opt names as strings, but can be a string of a single opt name. If None, set all opts to default values.""" if opt_names is None: TCInit(self) else: if isinstance(opt_names, str): opt_names = [opt_names] for k in opt_names: if isinstance(k, str): self.__delattr__(k) def info(self): """Pretty-print current values of options""" from . import tc ## enumerate all options opts = self.to_list() res = "" fmt = "%20s = %5s ## %s\n" for k, v in opts: res += fmt % (k, str(self.__getattribute__(k)), str(v.doc()).split('\n')[0]) return res def to_list(self, group=None): """Returns a sorted list of (name, TC object) tuples for all opts. If the group name is specified, only opts that belong to that group are returned. """ from . import tc opts_list = [] for k, v in self.__class__.__dict__.items(): if isinstance(v, tc.TC): if group is not None: if v.group() == group: opts_list.append((k, v)) else: opts_list.append((k, v)) opts_list = sorted(opts_list) return opts_list def to_dict(self): """Returns a dictionary of names and values for all opts.""" from . import tc opts_dict = {} for k, v in self.__class__.__dict__.items(): if isinstance(v, tc.TC): opts_dict.update({k: self.__getattribute__(k)}) return opts_dict def get_names(self, group=None): """Returns a sorted list of names for all opts. If the group name is specified, only opts that belong to that group are returned. """ from . import tc opts_list = [] for k, v in self.__class__.__dict__.items(): if isinstance(v, tc.TC): if group is not None: if v.group() == group: opts_list.append(k) else: opts_list.append(k) opts_list = sorted(opts_list) return opts_list def __setstate__(self, state): self.set_opts(state) def __getstate__(self): from . import tc state = {} for k, v in self.__class__.__dict__.items(): if isinstance(v, tc.TC): state.update({k: self.__getattribute__(k)}) return state PyBDSF-1.10.1/bdsf/output.py000066400000000000000000001402671420247104600154630ustar00rootroot00000000000000"""Module output. Defines functions that write the results of source detection in a variety of formats. These are then used as methods of Image objects and/or are called by the outlist operation if output_all is True. """ from __future__ import print_function from __future__ import absolute_import from .image import Op class Op_outlist(Op): """Write out list of Gaussians All available output lists are generated atm. """ def __call__(self, img): if img.opts.output_all: import os if len(img.gaussians) > 0: dir = img.basedir + '/catalogues/' if not os.path.exists(dir): os.makedirs(dir) self.write_bbs(img, dir) self.write_lsm(img, dir) self.write_gaul(img, dir) self.write_srl(img, dir) self.write_aips(img, dir) self.write_kvis(img, dir) self.write_ds9(img, dir, objtype='gaul') self.write_ds9(img, dir, objtype='srl') self.write_gaul_FITS(img, dir) self.write_srl_FITS(img, dir) if not os.path.exists(img.basedir + '/misc/'): os.makedirs(img.basedir + '/misc/') self.write_opts(img, img.basedir + '/misc/') self.save_opts(img, img.basedir + '/misc/') img.completed_Ops.append('outlist') def write_bbs(self, img, dir): """ Writes the gaussian list as a bbs-readable file""" if 'bbsname' in img.extraparams: name = img.extraparams['bbsname'] else: name = img.imagename fname = dir + name + '.sky_in' # Write Gaussian list write_bbs_gaul(img, filename=fname, srcroot=img.opts.srcroot, patch=img.opts.bbs_patches, sort_by='flux', clobber=True, incl_empty=img.opts.incl_empty, correct_proj=img.opts.correct_proj) def write_lsm(self, img, dir): """ Writes the gaussian list as an SAGECAL file""" fname = dir + img.imagename + '.lsm' write_lsm_gaul(img, filename=fname, sort_by='indx', clobber=True, incl_empty=img.opts.incl_empty) def write_gaul(self, img, dir): """ Writes the gaussian list as an ASCII file""" fname = dir + img.imagename + '.gaul' write_ascii_list(img, filename=fname, sort_by='indx', clobber=True, objtype='gaul', incl_empty=img.opts.incl_empty) def write_srl(self, img, dir): """ Writes the source list as an ASCII file""" fname = dir + img.imagename + '.srl' write_ascii_list(img, filename=fname, sort_by='indx', clobber=True, objtype='srl', incl_empty=img.opts.incl_empty) def write_aips(self, img, dir): """ Writes the gaussian list an AIPS STAR file""" fname = dir + img.imagename + '.star' write_star(img, filename=fname, sort_by='indx', clobber=True) def write_kvis(self, img, dir): """ Writes the gaussian list as a kvis file""" fname = dir + img.imagename + '.kvis.ann' write_kvis_ann(img, filename=fname, sort_by='indx', clobber=True) def write_ds9(self, img, dir, objtype='gaul'): """ Writes the gaussian list as a ds9 region file""" fname = dir + img.imagename + '.' + objtype + '.ds9.reg' write_ds9_list(img, filename=fname, srcroot=img.opts.srcroot, clobber=True, deconvolve=False, objtype=objtype, incl_empty=img.opts.incl_empty,) def write_gaul_FITS(self, img, dir): """ Writes the gaussian list as FITS binary table""" fname = dir + img.imagename+'.gaul.FITS' write_fits_list(img, filename=fname, sort_by='indx', clobber=True, objtype='gaul', incl_empty=img.opts.incl_empty,) def write_srl_FITS(self, img, dir): """ Writes the source list as FITS binary table""" fname = dir + img.imagename+'.srl.FITS' write_fits_list(img, filename=fname, sort_by='indx', clobber=True, objtype='srl', incl_empty=img.opts.incl_empty, incl_chan=img.opts.incl_chan) def write_shap_FITS(self, img, dir): """ Writes the shapelet list as a FITS file""" fname = dir + img.imagename + '.shap.FITS' write_fits_list(img, filename=fname, sort_by='indx', clobber=True, objtype='shap') def write_opts(self, img, dir): """ Writes input parameters to a text file.""" import inspect from . import mylogger mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Output") fname = 'parameters_used' f = open(dir+fname, 'w') mylog.info('Writing '+dir+fname) for attr in inspect.getmembers(img.opts): if attr[0][0] != '_': if isinstance(attr[1], (int, str, bool, float, type(None), tuple, list)): f.write('%-40s' % attr[0]) f.write(repr(attr[1])+'\n') # Also print the values derived internally. They are all stored # in img with the same name (e.g., img.opts.beam --> img.beam) if hasattr(img, attr[0]): used = img.__getattribute__(attr[0]) if used != attr[1] and isinstance(used, (int, str, bool, float, type(None), tuple, list)): f.write('%-40s' % ' Value used') f.write(repr(used)+'\n') f.close() def save_opts(self, img, dir): """ Saves input parameters to a PyBDSM save file.""" from . import interface from . import mylogger mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Output") fname = 'parameters.sav' mylog.info('Writing '+dir+fname) interface.save_pars(img, dir+fname, quiet=True) def ra2hhmmss(deg): """Convert RA coordinate (in degrees) to HH MM SS""" from math import modf if deg < 0: deg += 360.0 x, hh = modf(deg/15.) x, mm = modf(x*60) ss = x*60 return (int(hh), int(mm), ss) def dec2ddmmss(deg): """Convert DEC coordinate (in degrees) to DD MM SS""" from math import modf sign = (-1 if deg < 0 else 1) x, dd = modf(abs(deg)) x, ma = modf(x*60) sa = x*60 return (int(dd), int(ma), sa, sign) def B1950toJ2000(Bcoord): """ Precess using Aoki et al. 1983. Same results as NED to ~0.2asec """ from math import sin, cos, pi, sqrt, asin, acos import numpy as N rad = 180.0/pi ra, dec = Bcoord A = N.array([-1.62557e-6, -0.31919e-6, -0.13843e-6]) M = N.array([[0.9999256782, 0.0111820609, 0.00485794], [-0.0111820610, 0.9999374784, -0.0000271474], [-0.0048579477, -0.0000271765, 0.9999881997]]) r0 = N.zeros(3) r0[0] = cos(dec/rad) * cos(ra/rad) r0[1] = cos(dec/rad) * sin(ra/rad) r0[2] = sin(dec/rad) r0A = N.sum(r0*A) r1 = r0 - A + r0A*r0 r = N.sum(M.transpose()*r1, axis=1) rscal = sqrt(N.sum(r*r)) decj = asin(r[2]/rscal)*rad d1 = r[0] / rscal / cos(decj/rad) d2 = r[1] / rscal / cos(decj/rad) raj = acos(d1)*rad if d2 < 0.0: raj = 360.0 - raj Jcoord = [raj, decj] return Jcoord def write_bbs_gaul(img, filename=None, srcroot=None, patch=None, incl_primary=True, sort_by='flux', clobber=False, incl_empty=False, correct_proj=True): """Writes Gaussian list to a BBS sky model""" from . import mylogger import os mylog = mylogger.logging.getLogger("PyBDSM.write_gaul") if int(img.equinox) != 2000 and int(img.equinox) != 1950: mylog.warning('Equinox of input image is not J2000 or B1950. ' 'Sky model may not be appropriate for BBS.') if int(img.equinox) == 1950: mylog.warning('Equinox of input image is B1950. Coordinates ' 'will be precessed to J2000.') outl, outn, patl = list_and_sort_gaussians(img, patch=patch, root=srcroot, sort_by=sort_by) outstr_list = make_bbs_str(img, outl, outn, patl, incl_empty=incl_empty, correct_proj=correct_proj) if filename is None: filename = img.imagename + '.sky_in' if os.path.exists(filename) and not clobber: return None mylog.info('Writing ' + filename) f = open(filename, 'w') for s in outstr_list: f.write(s) f.close() return filename def write_lsm_gaul(img, filename=None, srcroot=None, patch=None, incl_primary=True, sort_by='flux', clobber=False, incl_empty=False): """Writes Gaussian list to a SAGECAL lsm sky model""" from . import mylogger import os mylog = mylogger.logging.getLogger("PyBDSM.write_gaul") if int(img.equinox) != 2000 and int(img.equinox) != 1950: mylog.warning('Equinox of input image is not J2000 or B1950. ' 'Sky model may not be appropriate for Sagecal.') if int(img.equinox) == 1950: mylog.warning('Equinox of input image is B1950. Coordinates ' 'will be precessed to J2000.') outl, outn, patl = list_and_sort_gaussians(img, patch=patch, root=srcroot, sort_by=sort_by) outstr_list = make_lsm_str(img, outl, outn, incl_empty=incl_empty) if filename is None: filename = img.imagename + '.lsm' if os.path.exists(filename) and not clobber: return None mylog.info('Writing ' + filename) f = open(filename, 'w') for s in outstr_list: f.write(s) f.close() return filename def write_ds9_list(img, filename=None, srcroot=None, deconvolve=False, clobber=False, incl_empty=False, objtype='gaul'): """Writes Gaussian list to a ds9 region file""" from . import mylogger import os mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Output") if objtype == 'gaul': outl, outn, patl = list_and_sort_gaussians(img, patch=None) elif objtype == 'srl': root = img.parentname outl = [img.sources] if incl_empty: # Append the dummy sources for islands without any unflagged Gaussians outl[0] += img.dsources outn = [] for src in img.sources: outn.append(root + '_i' + str(src.island_id) + '_s' + str(src.source_id)) if incl_empty: # Append the dummy sources for islands without any unflagged Gaussians for dsrc in img.dsources: outn.append(root + '_i' + str(dsrc.island_id) + '_s' + str(dsrc.source_id)) outn = [outn] outstr_list = make_ds9_str(img, outl, outn, deconvolve=deconvolve, objtype=objtype, incl_empty=incl_empty) if filename is None: filename = img.imagename + '.' + objtype + '.reg' if os.path.exists(filename) and not clobber: return None mylog.info('Writing ' + filename) f = open(filename, "w") for s in outstr_list: f.write(s) f.close() return filename def write_ascii_list(img, filename=None, sort_by='indx', format='ascii', incl_chan=False, incl_empty=False, clobber=False, objtype='gaul'): """Writes Gaussian list to an ASCII file""" from . import mylogger import os mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Output") if objtype == 'gaul': outl, outn, patl = list_and_sort_gaussians(img, patch=None, sort_by=sort_by) elif objtype == 'srl': outl = [img.sources] if incl_empty: # Append the dummy sources for islands without any unflagged Gaussians outl[0] += img.dsources outstr_list = make_ascii_str(img, outl, objtype=objtype, incl_chan=incl_chan, incl_empty=incl_empty, format=format) if filename is None: if objtype == 'gaul': filename = img.imagename + '.gaul' elif objtype == 'srl': filename = img.imagename + '.srl' if os.path.exists(filename) and not clobber: return None mylog.info('Writing ' + filename) f = open(filename, "w") for s in outstr_list: f.write(s) f.close() return filename def write_casa_gaul(img, filename=None, incl_empty=False, clobber=False): """Writes a clean box file for use in casapy""" from . import mylogger import os mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Output") outl, outn, patl = list_and_sort_gaussians(img, patch=None) outstr_list = make_casa_str(img, outl) if filename is None: filename = img.imagename + '.box' if os.path.exists(filename) and not clobber: return None mylog.info('Writing ' + filename) f = open(filename, "w") for s in outstr_list: f.write(s) f.close() return filename def write_fits_list(img, filename=None, sort_by='index', objtype='gaul', incl_chan=False, incl_empty=False, clobber=False): """ Write as FITS binary table. """ from . import mylogger from distutils.version import StrictVersion try: from astropy.io import fits as pyfits use_header_update = False use_from_columns = True except ImportError: import pyfits if StrictVersion(pyfits.__version__) < StrictVersion('3.1'): use_header_update = True use_from_columns = False else: use_header_update = False use_from_columns = True import os import numpy as N from ._version import __version__ mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Output") if objtype == 'gaul': outl, outn, patl = list_and_sort_gaussians(img, patch=None, sort_by=sort_by) elif objtype == 'srl': outl = [img.sources] if incl_empty: # Append the dummy sources for islands without any unflagged Gaussians outl[0] += img.dsources elif objtype == 'shap': outl = [[isl for isl in img.islands if hasattr(isl, 'shapelet_nmax')]] nmax = 0 if objtype == 'shap': # loop over shapelets and get maximum size of coefficient matrix for isl in outl[0]: if hasattr(isl, 'shapelet_nmax'): if isl.shapelet_nmax > nmax: nmax = isl.shapelet_nmax nmax += 1 if img.opts.aperture is not None: incl_aper = True else: incl_aper = False if len(outl[0]) > 0: cvals, cnames, cformats, cunits = make_output_columns(outl[0][0], fits=True, objtype=objtype, incl_spin=img.opts.spectralindex_do, incl_chan=incl_chan, incl_pol=img.opts.polarisation_do, incl_aper=incl_aper, incl_empty=incl_empty, nmax=nmax, nchan=img.nchan) out_list = make_fits_list(img, outl, objtype=objtype, nmax=nmax, incl_empty=incl_empty,incl_chan=incl_chan) col_list = [] for ind, col in enumerate(out_list): list1 = pyfits.Column(name=cnames[ind], format=cformats[ind], unit=cunits[ind], array=N.array(out_list[ind])) col_list.append(list1) if len(col_list) == 0: col_list = [pyfits.Column(name='Blank', format='1J')] if use_from_columns: tbhdu = pyfits.BinTableHDU.from_columns(col_list) else: tbhdu = pyfits.new_table(col_list) if objtype == 'gaul': tbhdu.header.add_comment('Gaussian list for '+img.filename) elif objtype == 'srl': tbhdu.header.add_comment('Source list for '+img.filename) elif objtype == 'shap': tbhdu.header.add_comment('Shapelet list for '+img.filename) tbhdu.header.add_comment('Generated by PyBDSM version %s' % (__version__, )) freq = "%.5e" % img.frequency tbhdu.header.add_comment('Reference frequency of the detection ("ch0") image: %s Hz' % freq) tbhdu.header.add_comment('Equinox : %s' % img.equinox) if use_header_update: tbhdu.header.update('INIMAGE', img.filename, 'Filename of image') tbhdu.header.update('FREQ0', float(freq), 'Reference frequency') tbhdu.header.update('EQUINOX', img.equinox, 'Equinox') else: tbhdu.header['INIMAGE'] = (img.filename, 'Filename of image') tbhdu.header['FREQ0'] = (float(freq), 'Reference frequency') tbhdu.header['EQUINOX'] = (img.equinox, 'Equinox') for key in img.header.keys(): if key in ['HISTORY', 'COMMENT', '']: continue tbhdu.header.add_comment('%s = %s' % (key, repr(img.header[key]))) if filename is None: filename = img.imagename + '.' + objtype + '.fits' if os.path.exists(filename) and not clobber: return None mylog.info('Writing ' + filename) try: tbhdu.writeto(filename, overwrite=True) except TypeError: # The "overwrite" argument was added in astropy v1.3, so fall back to "clobber" # if it doesn't work tbhdu.writeto(filename, clobber=True) return filename def write_kvis_ann(img, filename=None, sort_by='indx', clobber=False): from . import mylogger import os mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Output") if filename is None: filename = img.imagename + '.kvis.ann' if os.path.exists(filename) and not clobber: return None f = open(filename, 'w') mylog.info('Writing '+filename) f.write("### KVis annotation file\n\n") f.write("color green\n\n") outl, outn, patl = list_and_sort_gaussians(img, patch=None, sort_by=sort_by) for g in outl[0]: iidx = g.island_id # kvis does not correct for postion-dependent angle or pixel scale # for region files, so we must use the uncorrected values ra, dec = g.centre_sky shape = g.size_sky_uncorr str = 'text %10.5f %10.5f %d\n' % \ (ra, dec, iidx) f.write(str) str = 'ellipse %10.5f %10.5f %10.7f %10.7f %10.4f\n' % \ (ra, dec, shape[0], shape[1], shape[2]) f.write(str) f.close() return filename def write_star(img, filename=None, sort_by='indx', clobber=False): from .output import ra2hhmmss, dec2ddmmss from . import mylogger import os mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Output") if filename is None: filename = img.imagename + '.star' if os.path.exists(filename) and not clobber: return None f = open(filename, 'w') mylog.info('Writing '+filename) outl, outn, patl = list_and_sort_gaussians(img, patch=None, sort_by=sort_by) for g in outl[0]: A = g.peak_flux ra, dec = g.centre_sky shape = g.size_sky_uncorr # convert to canonical representation ra = ra2hhmmss(ra) dec = dec2ddmmss(dec) decsign = ('-' if dec[3] < 0 else '+') str = '%2i %2i %6.3f ' \ '%c%2i %2i %6.3f ' \ '%9.4f %9.4f %7.2f ' \ '%2i %13.7f %10s\n' % \ (ra[0], ra[1], ra[2], decsign, dec[0], dec[1], dec[2], shape[0]*3600, shape[1]*3600, shape[2], 4, A, '') f.write(str) f.close() return filename def make_bbs_str(img, glist, gnames, patchnames, objtype='gaul', incl_empty=False, correct_proj=True): """Makes a list of string entries for a BBS sky model.""" from .output import ra2hhmmss from .output import dec2ddmmss import numpy as N outstr_list = [] freq = "%.5e" % img.frequency if len(patchnames) == 0: # Handle empty list: just write default header outstr_list.append("format = Name, Type, Ra, Dec, I, Q, U, V, " "MajorAxis, MinorAxis, Orientation, " "ReferenceFrequency='"+freq+"', " "SpectralIndex='[]'\n\n") elif patchnames[0] is None: outstr_list.append("format = Name, Type, Ra, Dec, I, Q, U, V, " "MajorAxis, MinorAxis, Orientation, " "ReferenceFrequency='"+freq+"', " "SpectralIndex='[]'\n\n") else: outstr_list.append("format = Name, Type, Patch, Ra, Dec, I, Q, U, V, " "MajorAxis, MinorAxis, Orientation, " "ReferenceFrequency='"+freq+"', " "SpectralIndex='[]'\n\n") if objtype == 'shap': raise RuntimeError("Shapelets not yet supported in the BBS format.") else: patchname_last = '' for pindx, patch_name in enumerate(patchnames): # loop over patches if patch_name is not None and patch_name != patchname_last: outstr_list.append(', , ' + patch_name + ', 00:00:00, +00.00.00\n') patchname_last = patch_name gaussians_in_patch = glist[pindx] names_in_patch = gnames[pindx] for gindx, g in enumerate(gaussians_in_patch): if g.gaus_num >= 0 or (g.gaus_num < 0 and incl_empty): src_name = names_in_patch[gindx] ra, dec = g.centre_sky if img.equinox == 1950: ra, dec = B1950toJ2000([ra, dec]) ra = ra2hhmmss(ra) sra = str(ra[0]).zfill(2)+':'+str(ra[1]).zfill(2)+':'+str("%.6f" % (ra[2])).zfill(6) dec = dec2ddmmss(dec) decsign = ('-' if dec[3] < 0 else '+') sdec = decsign+str(dec[0]).zfill(2)+'.'+str(dec[1]).zfill(2)+'.'+str("%.6f" % (dec[2])).zfill(6) total = str("%.3e" % (g.total_flux)) if correct_proj: deconv = list(g.deconv_size_sky) else: deconv = list(g.deconv_size_sky_uncorr) if deconv[0] == 0.0 and deconv[1] == 0.0: stype = 'POINT' deconv[2] = 0.0 else: stype = 'GAUSSIAN' deconv1 = str("%.5e" % (deconv[0]*3600.0)) deconv2 = str("%.5e" % (deconv[1]*3600.0)) deconv3 = str("%.5e" % (deconv[2])) deconvstr = deconv1 + ', ' + deconv2 + ', ' + deconv3 specin = '-0.8' if 'spectralindex' in img.completed_Ops: if g.spec_indx is not None and N.isfinite(g.spec_indx): specin = str("%.3e" % (g.spec_indx)) sep = ', ' if img.opts.polarisation_do: Q_flux = str("%.3e" % (g.total_flux_Q)) U_flux = str("%.3e" % (g.total_flux_U)) V_flux = str("%.3e" % (g.total_flux_V)) else: Q_flux = '0.0' U_flux = '0.0' V_flux = '0.0' if patch_name is None: outstr_list.append(src_name + sep + stype + sep + sra + sep + sdec + sep + total + sep + Q_flux + sep + U_flux + sep + V_flux + sep + deconvstr + sep + freq + sep + '[' + specin + ']\n') else: outstr_list.append(src_name + sep + stype + sep + patch_name + sep + sra + sep + sdec + sep + total + sep + Q_flux + sep + U_flux + sep + V_flux + sep + deconvstr + sep + freq + sep + '[' + specin + ']\n') else: outstr_list.pop() return outstr_list def make_lsm_str(img, glist, gnames, incl_empty=False): """Makes a list of string entries for a SAGECAL sky model.""" from .output import ra2hhmmss from .output import dec2ddmmss import numpy as N from ._version import __version__ outstr_list = ["# SAGECAL sky model\n"] freq = "%.5e" % img.frequency outstr_list.append('# Generated by PyBDSM version %s\n' % (__version__, )) outstr_list.append("# Name | RA (hr,min,sec) | DEC (deg,min,sec) | I | Q | U | V | SI | RM | eX | eY | eP | freq0\n\n") for gindx, g in enumerate(glist[0]): if g.gaus_num >= 0 or (g.gaus_num < 0 and incl_empty): src_name = gnames[0][gindx] ra, dec = g.centre_sky if img.equinox == 1950: ra, dec = B1950toJ2000([ra, dec]) ra = ra2hhmmss(ra) sra = str(ra[0]).zfill(2)+' '+str(ra[1]).zfill(2)+' '+str("%.6f" % (ra[2])).zfill(6) dec = dec2ddmmss(dec) decsign = ('-' if dec[3] < 0 else '+') sdec = decsign+str(dec[0]).zfill(2)+' '+str(dec[1]).zfill(2)+' '+str("%.6f" % (dec[2])).zfill(6) total = str("%.3e" % (g.total_flux)) deconv = list(g.deconv_size_sky) if deconv[0] == 0.0 and deconv[1] == 0.0: sname = 'P' + src_name deconv[2] = 0.0 else: sname = 'G' + src_name # Make sure Gaussian is not 1-D, as SAGECAL cannot handle these if deconv[0] < 1e-5: deconv[0] = 1e-5 if deconv[1] < 1e-5: deconv[1] = 1e-5 # The following conversions taken from the SABECAL script "convert_skymodel.py" deconv1 = str("%.5e" % (deconv[0]*N.pi/180.0/2.0)) deconv2 = str("%.5e" % (deconv[1]*N.pi/180.0/2.0)) deconv3 = str("%.5e" % (N.pi/2-(N.pi-deconv[2]/180.0*N.pi))) deconvstr = deconv1 + ' ' + deconv2 + ' ' + deconv3 specin = '-0.8' if 'spectralindex' in img.completed_Ops: if g.spec_indx is not None and N.isfinite(g.spec_indx): specin = str("%.3e" % (g.spec_indx)) sep = ' ' if img.opts.polarisation_do: Q_flux = str("%.3e" % g.total_flux_Q) U_flux = str("%.3e" % g.total_flux_U) V_flux = str("%.3e" % g.total_flux_V) else: Q_flux = '0.0' U_flux = '0.0' V_flux = '0.0' outstr_list.append(sname + sep + sra + sep + sdec + sep + total + sep + Q_flux + sep + U_flux + sep + V_flux + sep + specin + sep + '0' + sep + deconvstr + sep + freq + sep + '\n') return outstr_list def make_ds9_str(img, glist, gnames, deconvolve=False, objtype='gaul', incl_empty=False): """Makes a list of string entries for a ds9 region file.""" from . import mylogger outstr_list = [] if img.equinox is None: equinox = 'fk5' else: if int(img.equinox) == 2000: equinox = 'fk5' elif int(img.equinox) == 1950: equinox = 'fk4' else: mylog = mylogger.logging.getLogger("PyBDSM.write_ds9") mylog.warning('Equinox of input image is not J2000 or B1950. ' 'Regions may not be correct.') equinox = 'fk5' outstr_list.append('# Region file format: DS9 version 4.0\nglobal color=green ' 'font="helvetica 10 normal" select=1 highlite=1 edit=1 ' 'move=1 delete=1 include=1 fixed=0 source\n'+equinox+'\n') for gindx, g in enumerate(glist[0]): if objtype == 'gaul': objid = g.gaus_num else: objid = g.source_id if objid >= 0 or (objid < 0 and incl_empty): src_name = gnames[0][gindx] if objtype == 'gaul': ra, dec = g.centre_sky else: ra, dec = g.posn_sky_centroid # ds9 does not correct for postion-dependent angle or pixel scale # for region files, so we must use the uncorrected values if deconvolve: deconv = g.deconv_size_sky_uncorr else: deconv = g.size_sky_uncorr if deconv[0] == 0.0 and deconv[1] == 0.0: deconv[2] = 0.0 region = 'point(' + str(ra) + ',' + str(dec) + \ ') # point=cross width=2 text={' + src_name + '}\n' else: # ds9 can't handle 1-D Gaussians, so make sure they are 2-D if deconv[0] < 1.0/3600.0: deconv[0] = 1.0/3600.0 if deconv[1] < 1.0/3600.0: deconv[1] = 1.0/3600.0 region = 'ellipse(' + str(ra) + ',' + str(dec) + ',' + \ str(deconv[0]*3600.0) + '",' + str(deconv[1]*3600.0) + \ '",' + str(deconv[2]+90.0) + ') # text={' + src_name + '}\n' outstr_list.append(region) return outstr_list def make_ascii_str(img, glist, objtype='gaul', format='ascii', incl_empty=False, incl_chan=False): """Makes a list of string entries for an ascii region file.""" from ._version import __version__ outstr_list = [] freq = "%.5e" % img.frequency if objtype == 'gaul': outstr_list.append('# Gaussian list for '+img.filename+'\n') elif objtype == 'srl': outstr_list.append('# Source list for '+img.filename+'\n') outstr_list.append('# Generated by PyBDSM version %s\n' % (__version__, )) outstr_list.append('# Reference frequency of the detection ("ch0") image: %s Hz\n' % freq) outstr_list.append('# Equinox : %s \n\n' % img.equinox) if img.opts.aperture is not None: incl_aper = True else: incl_aper = False for i, g in enumerate(glist[0]): cvals, cnames, cformats, cunits = make_output_columns(g, fits=False, objtype=objtype, incl_spin=img.opts.spectralindex_do, incl_chan=incl_chan, incl_pol=img.opts.polarisation_do, incl_aper=incl_aper, incl_empty=incl_empty, nchan=img.nchan) if cvals is not None: cformats[-1] += "\n" if format == 'ascii': if i == 0: outstr_list.append("# " + " ".join(cnames) + "\n") outstr_list.append(" ".join(cformats).format(*cvals)) else: if i == 0: outstr_list.append("# " + ", ".join(cnames) + "\n") outstr_list.append(", ".join(cformats).format(*cvals)) return outstr_list def make_fits_list(img, glist, objtype='gaul', nmax=30, incl_empty=False, incl_chan=False): from . import functions as func out_list = [] if img.opts.aperture is not None: incl_aper = True else: incl_aper = False for g in glist[0]: cvals, ext1, ext2, ext3 = make_output_columns(g, fits=True, objtype=objtype, incl_spin=img.opts.spectralindex_do, incl_chan=incl_chan, incl_pol=img.opts.polarisation_do, incl_aper=incl_aper, incl_empty=incl_empty, nmax=nmax, nchan=img.nchan) if cvals is not None: out_list.append(cvals) out_list = func.trans_gaul(out_list) return out_list def make_casa_str(img, glist): """Makes a list of string entries for a casa region file.""" from . import functions as func outstr_list = ['#CRTFv0 CASA Region Text Format version 0\n'] scale = 2.0 # scale box to 2 times FWHM of Gaussian for gindx, g in enumerate(glist[0]): x, y = g.centre_pix ellx, elly = func.drawellipse(g) blc = [min(ellx), min(elly)] trc = [max(ellx), max(elly)] blc[0] -= (x - blc[0]) * scale blc[1] -= (y - blc[1]) * scale trc[0] += (trc[0] - x) * scale trc[1] += (trc[1] - y) * scale blc_sky = img.pix2sky(blc) trc_sky = img.pix2sky(trc) blc_sky_str = convert_radec_str(blc_sky[0], blc_sky[1]) trc_sky_str = convert_radec_str(trc_sky[0], trc_sky[1]) # Format is: box [ [, ], [, ] ] # Note that we use gindx rather than g.gaus_num so that # all Gaussians will have a unique id, even if wavelet # Gaussians are included. outstr_list.append('box [[' + ', '.join(blc_sky_str) + '], [' + ', '.join(trc_sky_str) + ']] coord=J2000\n') return outstr_list def write_islands(img): import numpy as N import os # write out island properties for reference since achaar doesnt work. filename = img.basedir + '/misc/' if not os.path.exists(filename): os.makedirs(filename) filename = filename + 'island_file' if img.j == 0: f = open(filename, 'w') f.write('Wavelet# Island_id bbox origin shape mask_active mask_noisy size_active mean rms max_value ngaul gresid_mean ' + 'gresid_rms resid_rms resid_mean nsource \n') else: f = open(filename, 'a') for isl in img.islands: f.write('%5i %5i %5i %5i %5i %5i %5i %5i %5i %5i %10i %10i %10i %.3e %.3e %.3e %5i %.3e %.3e %5i \n' % (img.j, isl.island_id, isl.bbox[0].start, isl.bbox[0].stop, isl.bbox[1].start, isl.bbox[1].stop, isl.origin[0], isl.origin[1], isl.shape[0], isl.shape[1], N.sum(~isl.mask_active), N.sum(~isl.mask_noisy), isl.size_active, isl.mean, isl.rms, isl.max_value, len(isl.gaul), isl.gresid_mean, isl.gresid_rms, len(isl.sources))) f.close() def get_src(src_list, srcid): """Returns the source for srcid or None if not found""" for src in src_list: if src.source_id == srcid: return src return None def convert_radec_str(ra, dec): """Takes ra, dec in degrees and returns BBS/CASA strings""" ra = ra2hhmmss(ra) sra = str(ra[0]).zfill(2)+':'+str(ra[1]).zfill(2)+':'+str("%.3f" % (ra[2])).zfill(6) dec = dec2ddmmss(dec) decsign = ('-' if dec[3] < 0 else '+') sdec = decsign+str(dec[0]).zfill(2)+'.'+str(dec[1]).zfill(2)+'.'+str("%.3f" % (dec[2])).zfill(6) return sra, sdec def list_and_sort_gaussians(img, patch=None, root=None, sort_by='index'): """Returns sorted lists of Gaussians and their names and patch names. patch - can be "single", "gaussian", "source", or None Returns (outlist, outnames, patchnames) outlist is [[g1, g2, g3], [g4], ...] outnames is [['root_i2_s1_g1', 'root_i2_s1_g2', 'root_i2_s1_g3'], ...] patchnames is ['root_patch_s1', 'root_patch_s2', ...] The names are root_iXX_sXX_gXX (or wXX_iXX_sXX_gXX for wavelet Gaussians) """ import numpy as N from . import functions as func # Define lists if root is None: root = img.parentname gauslist = [] gausname = [] outlist = [] outnames = [] patchnames = [] patchnames_sorted = [] gausflux = [] # fluxes of Gaussians gausindx = [] # indices of Gaussians patchflux = [] # total flux of each patch patchindx = [] # indices of sources patchnums = [] # number of patch from mask # If a mask image is to be used to define patches, read it in and # make a rank image from it use_mask = False if patch not in ['single', 'gaussian', 'source', None]: mask_file = img.opts.bbs_patches_mask patches_mask, hdr = func.read_image_from_file(mask_file, img, img.indir) use_mask = True act_pixels = patches_mask[0, 0] rank = len(act_pixels.shape) import scipy.ndimage as nd connectivity = nd.generate_binary_structure(rank, rank) mask_labels, count = nd.label(act_pixels, connectivity) src_list = img.sources for src in src_list: for g in src.gaussians: gauslist.append(g) gausflux.append(g.total_flux) gausindx.append(g.gaus_num) jstr = '_w' + str(g.jlevel) gausname.append(root + jstr + '_i' + str(src.island_id) + '_s' + str(src.source_id) + '_g' + str(g.gaus_num)) if patch == 'gaussian': outlist.append(gauslist) outnames.append(gausname) patchnames.append(root + '_patch' + jstr + '_g' + str(g.gaus_num)) patchflux.append(N.sum(gausflux)) patchindx.append(g.gaus_num) gauslist = [] # reset for next Gaussian gausname = [] gausflux = [] gausindx = [] if use_mask: patchnums.append(mask_labels[g.centre_pix[0], g.centre_pix[1]]) if patch == 'source': sorted_gauslist = list(gauslist) sorted_gausname = list(gausname) if sort_by == 'flux': # Sort Gaussians by flux within each source indx = N.argsort(N.array(gausflux)).tolist() indx.reverse() elif sort_by == 'index': # Sort Gaussians by index within each source indx = N.argsort(N.array(gausindx)).tolist() else: # Unrecognized property --> Don't sort indx = range(len(gausindx)) for i, si in enumerate(indx): sorted_gauslist[i] = gauslist[si] sorted_gausname[i] = gausname[si] outlist.append(sorted_gauslist) outnames.append(sorted_gausname) patchnames.append(root + '_patch' + '_s' + str(src.source_id)) patchflux.append(N.sum(gausflux)) patchindx.append(src.source_id) gauslist = [] # reset for next source gausname = [] gausflux = [] if use_mask: unique_patch_ids = set(patchnums) # Check if there is a patch with id = 0. If so, this means there were # some Gaussians that fell outside of the regions in the patch # mask file. if 0 in unique_patch_ids: from . import mylogger mylog = mylogger.logging.getLogger("PyBDSM.write_gaul") mylog.warning('Some sources fall outside of the regions ' 'defined in the mask file. These sources are not ' 'included in the output sky model.') for p in unique_patch_ids: if p != 0: in_patch = N.where(patchnums == p) outlist.append(N.array(gauslist)[in_patch].tolist()) outnames.append(N.array(gausname)[in_patch].tolist()) patchnames.append('patch_'+str(p)) patchflux.append(N.sum(N.array(gausflux)[in_patch])) patchindx.append(p) # Sort if patch == 'single' or patch is None: outlist = [list(gauslist)] outlist_sorted = [list(gauslist)] outnames = [list(gausname)] outnames_sorted = [list(gausname)] if patch == 'single': patchnames = [root + '_patch'] else: patchnames = [None] if sort_by == 'flux': # Sort by Gaussian flux indx = N.argsort(N.array(gausflux)).tolist() indx.reverse() elif sort_by == 'index': # Sort by Gaussian index indx = N.argsort(N.array(gausindx)).tolist() else: # Unrecognized property --> Don't sort indx = list(range(len(gausindx))) for i, si in enumerate(indx): outlist_sorted[0][i] = outlist[0][si] outnames_sorted[0][i] = outnames[0][si] patchnames_sorted = list(patchnames) else: outlist_sorted = list(outlist) outnames_sorted = list(outnames) patchnames_sorted = list(patchnames) if sort_by == 'flux': # Sort by patch flux indx = N.argsort(N.array(patchflux)).tolist() indx.reverse() elif sort_by == 'index': # Sort by source index indx = N.argsort(N.array(patchindx)).tolist() else: # Unrecognized property --> Don't sort indx = list(range(len(gausindx))) for i, si in enumerate(indx): outlist_sorted[i] = outlist[si] outnames_sorted[i] = outnames[si] patchnames_sorted[i] = patchnames[si] return (outlist_sorted, outnames_sorted, patchnames_sorted) def make_output_columns(obj, fits=False, objtype='gaul', incl_spin=False, incl_chan=False, incl_pol=False, incl_aper=False, incl_empty=False, nmax=30, nchan=1): """Returns a list of column names, formats, and units for Gaussian, Source, or Shapelet""" import numpy as N # First, define a list of columns in order desired, using the names of # the attributes of the object if objtype == 'gaul': names = ['gaus_num', 'island_id', 'source_id', 'jlevel', 'centre_sky', 'centre_skyE', 'total_flux', 'total_fluxE', 'peak_flux', 'peak_fluxE', 'centre_pix', 'centre_pixE', 'size_sky', 'size_skyE', 'size_sky_uncorr', 'size_skyE_uncorr', 'deconv_size_sky', 'deconv_size_skyE', 'deconv_size_sky_uncorr', 'deconv_size_skyE_uncorr', 'total_flux_isl', 'total_flux_islE', 'rms', 'mean', 'gresid_rms', 'gresid_mean', 'code'] elif objtype == 'srl': if incl_aper: infix = ['aperture_flux', 'aperture_fluxE'] else: infix = [] names = ['source_id', 'island_id', 'posn_sky_centroid', 'posn_sky_centroidE', 'total_flux', 'total_fluxE', 'peak_flux_max', 'peak_flux_maxE'] + infix + \ ['posn_sky_max', 'posn_sky_maxE', 'posn_pix_centroid', 'posn_pix_centroidE', 'posn_pix_max', 'posn_pix_maxE', 'size_sky', 'size_skyE', 'size_sky_uncorr', 'size_skyE_uncorr', 'deconv_size_sky', 'deconv_size_skyE', 'deconv_size_sky_uncorr', 'deconv_size_skyE_uncorr', 'total_flux_isl', 'total_flux_islE', 'rms_isl', 'mean_isl', 'gresid_rms', 'gresid_mean', 'code'] elif objtype == 'shap': names = ['island_id', 'shapelet_posn_sky', 'shapelet_posn_skyE', 'shapelet_basis', 'shapelet_beta', 'shapelet_nmax', 'shapelet_cf'] else: print('Object type unrecongnized.') return (None, None, None, None) if incl_spin: names += ['spec_indx', 'e_spec_indx'] if incl_chan: names += ['specin_flux', 'specin_fluxE', 'specin_freq'] if incl_pol: names += ['total_flux_Q', 'total_fluxE_Q', 'total_flux_U', 'total_fluxE_U', 'total_flux_V', 'total_fluxE_V', 'lpol_fraction', 'lpol_fraction_loerr', 'lpol_fraction_hierr', 'cpol_fraction', 'cpol_fraction_loerr', 'cpol_fraction_hierr', 'tpol_fraction', 'tpol_fraction_loerr', 'tpol_fraction_hierr', 'lpol_angle', 'lpol_angle_err'] cnames = [] cformats = [] cunits = [] cvals = [] skip_next = False for n, name in enumerate(names): if hasattr(obj, name): if name in ['specin_flux', 'specin_fluxE', 'specin_freq']: # As these are variable length lists, they must # (unfortunately) be treated differently. val = obj.__getattribute__(name) colname = obj.__dict__[name+'_def']._colname units = obj.__dict__[name+'_def']._units for i in range(nchan): if i < len(val): cvals.append(val[i]) cnames.append(colname[0]+'_ch'+str(i+1)) cunits.append(units[0]) else: cvals.append(N.NaN) cnames.append(colname[0]+'_ch'+str(i+1)) cunits.append(units[0]) else: if not skip_next: val = obj.__getattribute__(name) colname = obj.__dict__[name+'_def']._colname units = obj.__dict__[name+'_def']._units if units is None: units = ' ' if isinstance(val, list) or isinstance(val, tuple): # This is a list, so handle it differently. We assume the next # entry will have the errors, and they are interleaved to be # in the order (val, error). next_name = names[n+1] val_next = obj.__getattribute__(next_name) colname_next = obj.__dict__[next_name+'_def']._colname units_next = obj.__dict__[next_name+'_def']._units if units_next is None: units_next = ' ' for i in range(len(val)): cvals.append(val[i]) cvals.append(val_next[i]) cnames.append(colname[i]) cnames.append(colname_next[i]) cunits.append(units[i]) cunits.append(units_next[i]) skip_next = True elif isinstance(val, N.ndarray): # This is a numpy array, so flatten it tarr = val.flatten() tarr2 = N.resize(tarr, nmax**2) tarr2[tarr.shape[0]:] = N.NaN cvals.append(tarr2) cnames.append(colname) cunits.append(units) else: cvals.append(val) cnames.append(colname) cunits.append(units) else: skip_next = False for i, v in enumerate(cvals): if fits: if isinstance(v, int): cformats.append('J') elif isinstance(v, float) or isinstance(v, N.float32) or isinstance(v, N.float64): cformats.append('D') elif isinstance(v, str): cformats.append('A') elif isinstance(v, N.ndarray): cformats.append('%iD' % (nmax**2,)) else: raise RuntimeError("Format not supported.") else: if isinstance(v, int): cformats.append('{'+str(i)+':4d}') elif isinstance(v, float) or isinstance(v, N.float32) or isinstance(v, N.float64): cformats.append('{'+str(i)+':.14f}') elif isinstance(v, str): cformats.append('{'+str(i)+':4s}') else: raise RuntimeError("Format not supported.") if objtype == 'gaul': if obj.gaus_num < 0 and not incl_empty: return (None, cnames, cformats, cunits) if objtype == 'srl': if obj.source_id < 0 and not incl_empty: return (None, cnames, cformats, cunits) return (cvals, cnames, cformats, cunits) PyBDSF-1.10.1/bdsf/plotresults.py000066400000000000000000000713141420247104600165170ustar00rootroot00000000000000"""Plotting module This module is used to display fits results. """ from __future__ import print_function from __future__ import absolute_import from .image import * from . import has_pl if has_pl: import matplotlib.pyplot as pl import matplotlib.cm as cm import matplotlib.patches as mpatches from matplotlib.widgets import Button from matplotlib.patches import Ellipse from matplotlib.lines import Line2D from matplotlib import collections from math import log10 from . import functions as func from .const import fwsig import os import warnings import numpy as N warnings.simplefilter(action='ignore', category=FutureWarning) def plotresults(img, ch0_image=True, rms_image=True, mean_image=True, ch0_islands=True, gresid_image=True, sresid_image=False, gmodel_image=True, smodel_image=False, pyramid_srcs=False, source_seds=False, ch0_flagged=False, pi_image=False, psf_major=False, psf_minor=False, psf_pa=False, broadcast=False): """Show the results of a fit.""" global img_ch0, img_rms, img_mean, img_gaus_mod, img_shap_mod global img_gaus_resid, img_shap_resid, pixels_per_beam, pix2sky global vmin, vmax, vmin_cur, vmax_cur, ch0min, ch0max, img_pi global low, fig, images, src_list, srcid_cur, sky2pix, markers global img_psf_maj, img_psf_min, img_psf_pa, do_broadcast, samp_client global samp_key, samp_gaul_table_url, samp_srl_table_url if not has_pl: print("\033[31;1mWARNING\033[0m: Matplotlib not found. Plotting is disabled.") return if hasattr(img, 'samp_client'): samp_client = img.samp_client samp_key = img.samp_key if hasattr(img, 'samp_srl_table_url'): samp_srl_table_url = img.samp_srl_table_url else: samp_srl_table_url = None if hasattr(img, 'samp_gaul_table_url'): samp_gaul_table_url = img.samp_gaul_table_url else: samp_gaul_table_url = None else: samp_clent = None samp_key = None samp_srl_table_url = None samp_gaul_table_url = None do_broadcast = broadcast # Define the images. The images are used both by imshow and by the # on_press() and coord_format event handlers pix2sky = img.pix2sky sky2pix = img.sky2pix gfactor = 2.0 * N.sqrt(2.0 * N.log(2.0)) pixels_per_beam = 2.0 * N.pi * (img.beam2pix(img.beam)[0] * img.beam2pix(img.beam)[1]) / gfactor**2 # Construct lists of images, titles, etc. images = [] titles = [] names = [] markers = [] img_gaus_mod = None # default needed for key press event img_shap_mod = None # default needed for key press event if ch0_image: img_ch0 = img.ch0_arr images.append(img_ch0) titles.append('Original (ch0) Image\n(arbitrary logarithmic scale)') names.append('ch0') if ch0_islands: img_ch0 = img.ch0_arr images.append(img_ch0) if hasattr(img, 'ngaus'): if hasattr(img, 'ch0_pi_arr'): ch0_str = 'Islands (hatched boundaries; red = PI only) and\nGaussians' else: ch0_str = 'Islands (hatched boundaries) and\nGaussians' if hasattr(img, 'atrous_gaussians'): ch0_str += ' (red = wavelet)' titles.append(ch0_str) else: titles.append('Islands (hatched boundaries)') names.append('ch0') if ch0_flagged: if not hasattr(img, 'ngaus'): print('Image was not fit with Gaussians. Skipping display of flagged Gaussians.') else: img_ch0 = img.ch0_arr images.append(img_ch0) titles.append('Flagged Gaussians') names.append('ch0') if pi_image: if not hasattr(img, 'ch0_pi_arr'): print('Polarization module not run. Skipping PI image.') else: img_pi = img.ch0_pi_arr images.append(img_pi) titles.append('Polarized Intensity Image') names.append('ch0_pi') if rms_image: img_rms = img.rms_arr images.append(img_rms) titles.append('Background rms Image') names.append('rms') if gresid_image: if not hasattr(img, 'ngaus'): print('Image was not fit with Gaussians. Skipping residual Gaussian image.') else: img_gaus_resid = img.resid_gaus_arr images.append(img_gaus_resid) titles.append('Gaussian Residual Image') names.append('gaus_resid') if gmodel_image: if not hasattr(img, 'ngaus'): print('Image was not fit with Gaussians. Skipping model Gaussian image.') else: img_gaus_mod = img.model_gaus_arr images.append(img_gaus_mod) titles.append('Gaussian Model Image') names.append('gaus_mod') if mean_image: img_mean = img.mean_arr images.append(img_mean) titles.append('Background mean Image') names.append('mean') if sresid_image: if img.opts.shapelet_do == False: print('Image was not decomposed into shapelets. Skipping residual shapelet image.') else: img_shap_resid = img.resid_shap_arr images.append(img_shap_resid) titles.append('Shapelet Residual Image') names.append('shap_resid') if smodel_image: if img.opts.shapelet_do == False: print('Image was not decomposed into shapelets. Skipping model shapelet image.') else: img_shap_mod = img.model_shap_arr images.append(img_shap_mod) titles.append('Shapelet Model Image') names.append('shap_mod') if source_seds: if img.opts.spectralindex_do == False: print('Source SEDs were not fit. Skipping source SED plots.') else: src_list = img.sources sed_src = get_src(src_list, 0) if sed_src is None: print('No sources found. Skipping source SED plots.') else: images.append('seds') titles.append('') names.append('seds') srcid_cur = 0 if pyramid_srcs: if img.opts.atrous_do == False: print('Image was not decomposed into wavelets. Skipping wavelet images.') else: # Get the unique j levels and store them. Only make subplots for # occupied j levels print('Pyramidal source plots not yet supported.') # j_list = [] # for p in img.pyrsrcs: # for l in p.jlevels: # j_list.append(l) # j_set = set(j_list) # j_with_gaus = list(j_set) # index_first_waveplot = len(images) # for i in range(len(j_with_gaus)): # images.append('wavelets') # names.append('pyrsrc'+str(i)) if psf_major or psf_minor or psf_pa: if img.opts.psf_vary_do == False: print('PSF variation not calculated. Skipping PSF variation images.') else: if psf_major: img_psf_maj = img.psf_vary_maj_arr*fwsig images.append(img_psf_maj) titles.append('PSF Major Axis FWHM (pixels)') names.append('psf_maj') if psf_minor: img_psf_min = img.psf_vary_min_arr*fwsig images.append(img_psf_min) titles.append('PSF Minor Axis FWHM (pixels)') names.append('psf_min') if psf_pa: img_psf_pa = img.psf_vary_pa_arr images.append(img_psf_pa) titles.append('PSF Pos. Angle FWhM (degrees)') names.append('psf_pa') if images == []: print('No images to display.') return im_mean = img.clipped_mean im_rms = img.clipped_rms if img.resid_gaus_arr is None: low = 1.1*abs(img.min_value) else: low = N.max([1.1*abs(img.min_value),1.1*abs(N.nanmin(img.resid_gaus_arr))]) if low <= 0.0: low = 1E-6 vmin_est = im_mean - im_rms*5.0 + low if vmin_est <= 0.0: vmin = N.log10(low) else: vmin = N.log10(vmin_est) vmax = N.log10(im_mean + im_rms*30.0 + low) ch0min = vmin ch0max = N.log10(img.max_value + low) vmin_cur = vmin vmax_cur = vmax origin = 'lower' colours = ['m', 'b', 'c', 'g', 'y', 'k'] # reserve red ('r') for wavelets styles = ['-', '-.', '--'] print('=' * 72) print('NOTE -- With the mouse pointer in plot window:') print(' Press "i" ........ : Get integrated flux densities and mean rms') print(' values for the visible portion of the image') print(' Press "m" ........ : Change min and max scaling values') print(' Press "n" ........ : Show / hide island IDs') print(' Press "0" ........ : Reset scaling to default') if 'seds' in images: print(' Press "c" ........ : Change source for SED plot') if ch0_islands and hasattr(img, 'ngaus'): print(' Click Gaussian ... : Print Gaussian and source IDs (zoom_rect mode, ') print(' toggled with the "zoom" button and indicated in ') print(' the lower right corner, must be off)') if 'seds' in images: print(' The SED plot will also show the chosen source.') print('_' * 72) if len(images) > 1: numx = 2 else: numx = 1 numy = int(N.ceil(float(len(images))/float(numx))) fig = pl.figure(figsize=(max(15, 10.0*float(numy)/float(numx)), 10.0)) fig.canvas.set_window_title('PyBDSM Fit Results for '+ img.filename) gray_palette = cm.gray gray_palette.set_bad('k') for i, image in enumerate(images): if image != 'wavelets' and image != 'seds': if i == 0: cmd = 'ax' + str(i+1) + ' = pl.subplot(' + str(numx) + \ ', ' + str(numy) + ', ' + str(i+1) + ')' else: cmd = 'ax' + str(i+1) + ' = pl.subplot(' + str(numx) + \ ', ' + str(numy) + ', ' + str(i+1) + ', sharex=ax1' + \ ', sharey=ax1)' exec(cmd) if 'PSF' in titles[i]: im = image else: im = N.log10(image + low) if 'Islands' in titles[i]: island_offsets_x = [] island_offsets_y = [] border_color = [] ax = pl.gca() for iisl, isl in enumerate(img.islands): xb, yb = isl.border if hasattr(isl, '_pi'): for c in range(len(xb)): border_color.append('r') else: for c in range(len(xb)): border_color.append('#afeeee') island_offsets_x += xb.tolist() island_offsets_y += yb.tolist() marker = ax.text(N.max(xb)+2, N.max(yb), str(isl.island_id), color='#afeeee', clip_on=True) marker.set_visible(not marker.get_visible()) markers.append(marker) # draw the gaussians with one colour per source or island # (if gaul2srl was not run) if hasattr(img, 'nsrc'): nsrc = len(isl.sources) for isrc in range(nsrc): col = colours[int(isrc % 6)] style = styles[int(isrc/6 % 3)] src = isl.sources[isrc] for g in src.gaussians: if hasattr(g, 'valid'): valid = g.valid else: valid = True if g.jlevel == 0 and valid and g.gaus_num >= 0: gidx = g.gaus_num e = Ellipse(xy=g.centre_pix, width=g.size_pix[0], height=g.size_pix[1], angle=g.size_pix[2]+90.0) ax.add_artist(e) e.set_picker(3) e.set_clip_box(ax.bbox) e.set_facecolor(col) e.set_alpha(0.5) e.gaus_id = gidx e.src_id = src.source_id e.jlevel = g.jlevel e.isl_id = g.island_id e.tflux = g.total_flux e.pflux = g.peak_flux e.centre_sky = g.centre_sky if len(img.islands) > 0: island_offsets = list(zip(N.array(island_offsets_x), N.array(island_offsets_y))) isl_borders = collections.AsteriskPolygonCollection(4, offsets=island_offsets, color=border_color, transOffset=ax.transData, sizes=(10.0,)) ax.add_collection(isl_borders) if hasattr(img, 'gaussians'): for atrg in img.gaussians: if atrg.jlevel > 0 and atrg.gaus_num >= 0: col = 'r' style = '-' gidx = atrg.gaus_num e = Ellipse(xy=atrg.centre_pix, width=atrg.size_pix[0], height=atrg.size_pix[1], angle=atrg.size_pix[2]+90.0) ax.add_artist(e) e.set_picker(3) e.set_clip_box(ax.bbox) e.set_edgecolor(col) e.set_facecolor('none') e.set_alpha(0.8) e.gaus_id = gidx e.src_id = atrg.source_id e.jlevel = atrg.jlevel e.isl_id = atrg.island_id e.tflux = atrg.total_flux e.pflux = atrg.peak_flux e.centre_sky = atrg.centre_sky if 'Flagged' in titles[i]: for iisl, isl in enumerate(img.islands): ax = pl.gca() style = '-' for ig, g in enumerate(isl.fgaul): col = colours[ig % 6] ellx, elly = func.drawellipse(g) gline, = ax.plot(ellx, elly, color = col, linestyle = style, picker=3) gline.flag = g.flag if 'PSF' in titles[i]: cmd = 'ax' + str(i+1) + ".imshow(N.transpose(im), origin=origin, "\ "interpolation='nearest', cmap=gray_palette)" else: cmd = 'ax' + str(i+1) + ".imshow(N.transpose(im), origin=origin, "\ "interpolation='nearest',vmin=vmin, vmax=vmax, cmap=gray_palette)" exec(cmd) cmd = 'ax' + str(i+1) + '.format_coord = format_coord_'+names[i] exec(cmd) pl.title(titles[i]) elif image == 'seds': cmd = 'ax' + str(i+1) + ' = pl.subplot(' + str(numx) + \ ', ' + str(numy) + ', ' + str(i+1) + ')' exec(cmd) ax = pl.gca() plot_sed(sed_src, ax) elif image == 'wavelets': if i == index_first_waveplot: for j in range(len(j_with_gaus)): cmd = 'ax' + str(j+i+1) + ' = pl.subplot(' + str(numx) + \ ', ' + str(numy) + ', ' + str(j+i+1) + ', sharex=ax1, '+\ 'sharey=ax1)' exec(cmd) pl.title('Pyramidal Sources for\nWavelet Scale J = ' + str(j_with_gaus[j])) for pyr in img.pyrsrcs: for iisl, isl in enumerate(pyr.islands): jj = pyr.jlevels[iisl] jindx = j_with_gaus.index(jj) col = colours[pyr.pyr_id % 6] ind = N.where(~isl.mask_active) cmd = "ax" + str(jindx + index_first_waveplot + 1) + \ ".plot(ind[0]+isl.origin[0], "\ "ind[1]+isl.origin[1], '.', color=col)" exec(cmd) fig.canvas.mpl_connect('key_press_event', on_press) fig.canvas.mpl_connect('pick_event', on_pick) pl.show() pl.close('all') def on_pick(event): global images, srcid_cur, samp_client, samp_key, do_broadcast, samp_gaul_table_url, samp_srl_table_url g = event.artist if hasattr(g, 'gaus_id'): gaus_id = g.gaus_id src_id = g.src_id isl_id = g.isl_id tflux = g.tflux pflux = g.pflux wav_j = g.jlevel if wav_j == 0: print('Gaussian #' + str(gaus_id) + ' (in src #' + str(src_id) + \ ', isl #' + str(isl_id) + '): F_tot = ' + str(round(tflux,4)) + \ ' Jy, F_peak = ' + str(round(pflux,4)) + ' Jy/beam') else: print('Gaussian #' + str(gaus_id) + ' (in src #' + str(src_id) + \ ', isl #' + str(isl_id) + ', wav #' + str(wav_j) + \ '): F_tot = ' + str(round(tflux,3)) + ' Jy, F_peak = ' + \ str(round(pflux,4)) + ' Jy/beam') # Transmit src_id, gaus_id, and coordinates to SAMP Hub (if we are connected) if do_broadcast and samp_key is not None: if samp_gaul_table_url is not None: func.send_highlight_row(samp_client, samp_key, samp_gaul_table_url, gaus_id) if samp_srl_table_url is not None: func.send_highlight_row(samp_client, samp_key, samp_srl_table_url, src_id) func.send_coords(samp_client, samp_key, g.centre_sky) # Change source SED # First check that SEDs are being plotted and that the selected Gaussian # is from the zeroth wavelet image has_sed = False if 'seds' in images and wav_j == 0: has_sed = True if not has_sed: return ax_indx = images.index('seds') sed_src = get_src(src_list, src_id) if srcid_cur == src_id: return srcid_cur = src_id axes_list = fig.get_axes() for axindx, ax in enumerate(axes_list): if images[axindx] == 'seds': plot_sed(sed_src, ax) else: print('Flagged Gaussian (flag = ' + str(g.flag) + '; use "' + \ "help 'flagging_opts'" + '" for flag meanings)') pl.draw() def on_press(event): """Handle keypresses""" from .interface import raw_input_no_history import numpy global img_ch0, img_rms, img_mean, img_gaus_mod, img_shap_mod global pixels_per_beam, vmin, vmax, vmin_cur, vmax_cur, img_pi global ch0min, ch0max, low, fig, images, src_list, srcid_cur global markers if event.key == '0': print('Resetting limits to defaults (%.4f -- %.4f Jy/beam)' \ % (pow(10, vmin)-low, pow(10, vmax)-low)) axes_list = fig.get_axes() for axindx, ax in enumerate(axes_list): if images[axindx] != 'wavelets' and images[axindx] != 'seds': im = ax.get_images()[0] im.set_clim(vmin, vmax) vmin_cur = vmin vmax_cur = vmax pl.draw() if event.key == 'm': # Modify scaling # First check that there are images to modify has_image = False for im in images: if isinstance(im, numpy.ndarray): has_image = True if not has_image: return minscl = 'a' while isinstance(minscl, str): try: if minscl == '': minscl = pow(10, vmin_cur) - low break minscl = float(minscl) except ValueError: prompt = "Enter min value (current = %.4f Jy/beam) : " % (pow(10, vmin_cur)-low,) try: minscl = raw_input_no_history(prompt) except RuntimeError: print('Sorry, unable to change scaling.') return minscl = N.log10(minscl + low) maxscl = 'a' while isinstance(maxscl, str): try: if maxscl == '': maxscl = pow(10, vmax_cur) - low break maxscl = float(maxscl) except ValueError: prompt = "Enter max value (current = %.4f Jy/beam) : " % (pow(10, vmax_cur)-low,) try: maxscl = raw_input_no_history(prompt) except RuntimeError: print('Sorry, unable to change scaling.') return maxscl = N.log10(maxscl + low) if maxscl <= minscl: print('Max value must be greater than min value!') return axes_list = fig.get_axes() for axindx, ax in enumerate(axes_list): if images[axindx] != 'wavelets' and images[axindx] != 'seds': im = ax.get_images()[0] im.set_clim(minscl, maxscl) vmin_cur = minscl vmax_cur = maxscl pl.draw() if event.key == 'c': # Change source SED # First check that SEDs are being plotted has_sed = False if 'seds' in images: has_sed = True if not has_sed: return srcid = 'a' while isinstance(srcid, str): try: if srcid == '': srcid = srcid_cur break srcid = int(srcid) except ValueError: prompt = "Enter source ID (current = %i) : " % (srcid_cur,) try: srcid = raw_input_no_history(prompt) except RuntimeError: print('Sorry, unable to change source.') return ax_indx = images.index('seds') sed_src = get_src(src_list, srcid) if sed_src is None: print('Source not found!') return srcid_cur = srcid axes_list = fig.get_axes() for axindx, ax in enumerate(axes_list): if images[axindx] == 'seds': plot_sed(sed_src, ax) pl.draw() if event.key == 'i': # Print info about visible region has_image = False axes_list = fig.get_axes() # Get limits of visible region for axindx, ax in enumerate(axes_list): if images[axindx] != 'wavelets' and images[axindx] != 'seds': xmin, xmax = ax.get_xlim() ymin, ymax = ax.get_ylim() has_image = True break if not has_image: return if xmin < 0: xmin = 0 if xmax > img_ch0.shape[0]: xmax = img_ch0.shape[0] if ymin < 0: ymin = 0 if ymax > img_ch0.shape[1]: ymax = img_ch0.shape[1] flux = N.nansum(img_ch0[xmin:xmax, ymin:ymax])/pixels_per_beam mask = N.isnan(img_ch0[xmin:xmax, ymin:ymax]) num_pix_unmasked = float(N.size(N.where(mask == False), 1)) mean_rms = N.nansum(img_rms[xmin:xmax, ymin:ymax])/num_pix_unmasked mean_map_flux = N.nansum(img_mean[xmin:xmax, ymin:ymax])/pixels_per_beam if img_gaus_mod is None: gaus_mod_flux = 0.0 else: gaus_mod_flux = N.nansum(img_gaus_mod[xmin:xmax, ymin:ymax])/pixels_per_beam print('Visible region (%i:%i, %i:%i) :' % (xmin, xmax, ymin, ymax)) print(' ch0 flux density from sum of pixels ... : %f Jy'\ % (flux,)) print(' Background mean map flux density ...... : %f Jy'\ % (mean_map_flux,)) print(' Gaussian model flux density ........... : %f Jy'\ % (gaus_mod_flux,)) if img_shap_mod is not None: shap_mod_flux = N.nansum(img_shap_mod[xmin:xmax, ymin:ymax])/pixels_per_beam print(' Shapelet model flux density ........... : %f Jy'\ % (shap_mod_flux,)) print(' Mean rms (from rms map) ............... : %f Jy/beam'\ % (mean_rms,)) if event.key == 'n': # Show/Hide island numbers if markers: for marker in markers: marker.set_visible(not marker.get_visible()) pl.draw() # The following functions add ra, dec and flux density to the # coordinates in the lower-right-hand corner of the figure window. # Since each axis needs its own function (to return its particular # flux), we need a separate function for each subplot. def format_coord_ch0(x, y): """Custom coordinate format for ch0 image""" global img_ch0 im = img_ch0 coord_str = make_coord_str(x, y, im) return coord_str def format_coord_ch0_pi(x, y): """Custom coordinate format for ch0 image""" global img_pi im = img_pi coord_str = make_coord_str(x, y, im) return coord_str def format_coord_rms(x, y): """Custom coordinate format for rms image""" global img_rms im = img_rms coord_str = make_coord_str(x, y, im) return coord_str def format_coord_mean(x, y): """Custom coordinate format for mean image""" global img_mean im = img_mean coord_str = make_coord_str(x, y, im) return coord_str def format_coord_gaus_mod(x, y): """Custom coordinate format for Gaussian model image""" global img_gaus_mod im = img_gaus_mod coord_str = make_coord_str(x, y, im) return coord_str def format_coord_shap_mod(x, y): """Custom coordinate format for shapelet model image""" global img_shap_mod im = img_shap_mod coord_str = make_coord_str(x, y, im) return coord_str def format_coord_gaus_resid(x, y): """Custom coordinate format for Gaussian residual image""" global img_gaus_resid im = img_gaus_resid coord_str = make_coord_str(x, y, im) return coord_str def format_coord_shap_resid(x, y): """Custom coordinate format for shapelet residual image""" global img_shap_resid im = img_shap_resid coord_str = make_coord_str(x, y, im) return coord_str def format_coord_psf_maj(x, y): """Custom coordinate format for PSF major image""" global img_psf_maj im = img_psf_maj coord_str = make_coord_str(x, y, im, unit='arcsec') return coord_str def format_coord_psf_min(x, y): """Custom coordinate format for PSF minor image""" global img_psf_min im = img_psf_min coord_str = make_coord_str(x, y, im, unit='arcsec') return coord_str def format_coord_psf_pa(x, y): """Custom coordinate format for PSF pos. ang. image""" global img_psf_pa im = img_psf_pa coord_str = make_coord_str(x, y, im, unit='degrees') return coord_str def xy_to_radec_str(x, y): """Converts x, y in image coords to a sexigesimal string""" from .output import ra2hhmmss, dec2ddmmss global pix2sky ra, dec = pix2sky([x, y]) ra = ra2hhmmss(ra) sra = str(ra[0]).zfill(2)+':'+str(ra[1]).zfill(2)+':'+str("%.1f" % (ra[2])).zfill(3) dec = dec2ddmmss(dec) decsign = ('-' if dec[3] < 0 else '+') sdec = decsign+str(dec[0]).zfill(2)+':'+str(dec[1]).zfill(2)+':'+str("%.1f" % (dec[2])).zfill(3) return sra, sdec def make_coord_str(x, y, im, unit='Jy/beam'): """Makes the x, y, ra, dec, flux string""" rastr, decstr = xy_to_radec_str(x, y) col = int(x + 0.5) row = int(y + 0.5) numcols, numrows = im.shape if col >= 0 and col < numcols\ and row >= 0 and row < numrows: z = im[col, row] return 'x=%1.1f, y=%1.1f, RA=%s, Dec=%s, F=%+1.4f %s' % (x, y, rastr, decstr, z, unit) else: return 'x=%1.1f, y=%1.1f' % (x, y) def plot_sed(src, ax): """Plots the SED for source 'src' to axis 'ax'""" global sky2pix global fig ax.cla() norm = src.spec_norm spin = src.spec_indx espin = src.e_spec_indx y = N.array(src.specin_flux) ey = N.array(src.specin_fluxE) x = N.array(src.specin_freq) ax.errorbar(N.log10(x/1e6), N.log10(y), yerr=ey/y, fmt='bo') ax.plot(N.log10(x/1e6), N.log10(norm)+N.log10(x/src.specin_freq0)*spin, '-g', label="alpha = %.2f" % (spin,)) pos = sky2pix(src.posn_sky_centroid) xpos = int(pos[0]) ypos = int(pos[1]) pl.title('SED of source #'+str(src.source_id)+'\n' +'(x = '+str(xpos)+', y = '+str(ypos)+')') pl.xlabel('log Frequency (MHz)') pl.ylabel('log Flux Density (Jy)') pl.legend() def get_src(src_list, srcid): """Returns the source for srcid or None if not found""" for src in src_list: if src.source_id == srcid: return src return None PyBDSF-1.10.1/bdsf/polarisation.py000066400000000000000000000737201420247104600166260ustar00rootroot00000000000000"""Module polarisation. This module finds the Q, U, and V fluxes, the total, linear, and circular polarisation fractions and the linear polarisation angle of each source identified by gaul2srl. The position angle is defined from North, with positive angles towards East. """ from __future__ import absolute_import from .image import * from .islands import * from .gaul2srl import * from .preprocess import Op_preprocess from .rmsimage import Op_rmsimage from .threshold import Op_threshold from .islands import Op_islands from .gausfit import Op_gausfit from .gaul2srl import Op_gaul2srl from .make_residimage import Op_make_residimage from .const import fwsig from . import mylogger import numpy as N from . import functions as func from . import statusbar class Op_polarisation(Op): """ Finds the flux in each Stokes and calculates the polarisation fraction and angle. Fluxes are calculated by summing all nonmasked pixels assigned to the Gaussian. If a pixel contains contributions from two or more Gaussians, its flux is divided between the Gaussians by the ratio of fluxes that they contribute to the pixel. Errors on the fluxes are derived by summing the same pixels in the rms maps in quadrature. The results are stored in the Gaussian and Source structures. Fits are also done to the polarized intensity (PI) image to determine if there are any islands of emission that lie outside those found in the I image. If there are, they are fit and the process above is done for them too. For linearly polarised emission, the signal and noise add vectorially, giving a Rice distribution (Vinokur 1965) instead of a Gaussian one. To correct for this, a bias is estimated and removed from the polarisation fraction using the same method used for the NVSS catalog (see ftp://ftp.cv.nrao.edu/pub/nvss/catalog.ps). Errors on the linear and total polarisation fractions and polarisation angle are estimated using the debiased polarised flux and standard error propagation. See Sparks & Axon (1999) for a more detailed treatment. Prerequisites: module gaul2srl should be run first.""" def __call__(self, img): mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Polarisatn") if img.opts.polarisation_do: mylog.info('Extracting polarisation properties for all sources') pols = ['I', 'Q', 'U', 'V'] # Run gausfit and gual2srl on PI image to look for polarized sources # undetected in I fit_PI = img.opts.pi_fit n_new = 0 ch0_pi = N.sqrt(img.ch0_Q_arr**2 + img.ch0_U_arr**2) img.ch0_pi_arr = ch0_pi if fit_PI: from . import _run_op_list mylogger.userinfo(mylog, "\nChecking PI image for new sources") mask = img.mask_arr # Set up image object for PI image. pi_chain, pi_opts = self.setpara_bdsm(img) pimg = Image(pi_opts) pimg.beam = img.beam pimg.pixel_beam = img.pixel_beam pimg.pixel_beamarea = img.pixel_beamarea pimg.log = 'PI.' pimg.pix2beam = img.pix2beam pimg.beam2pix = img.beam2pix pimg.pix2gaus = img.pix2gaus pimg.gaus2pix = img.gaus2pix pimg.pix2sky = img.pix2sky pimg.sky2pix = img.sky2pix pimg.pix2coord = img.pix2coord pimg.wcs_obj = img.wcs_obj pimg.mask_arr = mask pimg.masked = img.masked pimg.ch0_arr = ch0_pi pimg._pi = True success = _run_op_list(pimg, pi_chain) if not success: return img.pi_islands = pimg.islands img.pi_gaussians = pimg.gaussians img.pi_sources = pimg.sources # Now check for new sources in the PI image that are not # found in the Stokes I image. If any new sources are found, # adjust their IDs to follow after those found in I. new_isl = [] new_src = [] new_gaus = [] n_new_src = 0 if len(img.islands) == 0: isl_id = 0 src_id = 0 gaus_id = 0 else: isl_id = img.islands[-1].island_id src_id = img.sources[-1].source_id gaus_id = img.gaussians[-1].gaus_num for pi_isl in pimg.islands: new_sources = [] for pi_src in pi_isl.sources: if img.pyrank[int(img.sky2pix(pi_src.posn_sky_max)[0]), int(img.sky2pix(pi_src.posn_sky_max)[1])] == -1: src_id += 1 pi_src._pi = True pi_src.island_id = isl_id pi_src.source_id = src_id pi_src.spec_indx = N.NaN pi_src.e_spec_indx = N.NaN pi_src.spec_norm = N.NaN pi_src.specin_flux = [N.NaN] pi_src.specin_fluxE = [N.NaN] pi_src.specin_freq = [N.NaN] pi_src.specin_freq0 = N.NaN for gaus in pi_src.gaussians: gaus.island_id = isl_id gaus.source_id = src_id gaus.spec_indx = N.NaN gaus.e_spec_indx = N.NaN gaus.spec_norm = N.NaN gaus.specin_flux = [N.NaN] gaus.specin_fluxE = [N.NaN] gaus.specin_freq = [N.NaN] gaus.specin_freq0 = N.NaN new_sources.append(pi_src) new_src.append(pi_src) n_new_src += 1 for g in pi_src.gaussians: gaus_id += 1 new_gaus.append(g) g.gaus_num = gaus_id if len(new_sources) > 0: isl_id += 1 pi_isl.sources = new_sources pi_isl.island_id = isl_id pi_isl._pi = True new_isl.append(pi_isl) n_new = len(new_isl) mylogger.userinfo(mylog, "New sources found in PI image", '%i (%i total)' % (n_new, img.nsrc+n_new)) if n_new > 0: img.islands += new_isl img.sources += new_src img.gaussians += new_gaus img.nsrc += n_new_src renumber_islands(img) bar = statusbar.StatusBar('Calculating polarisation properties .... : ', 0, img.nsrc) if img.opts.quiet == False: bar.start() for isl in img.islands: isl_bbox = isl.bbox ch0_I = img.ch0_arr[tuple(isl_bbox)] ch0_Q = img.ch0_Q_arr[tuple(isl_bbox)] ch0_U = img.ch0_U_arr[tuple(isl_bbox)] ch0_V = img.ch0_V_arr[tuple(isl_bbox)] ch0_images = [ch0_I, ch0_Q, ch0_U, ch0_V] for i, src in enumerate(isl.sources): # For each source, assume the morphology does not change # across the Stokes cube. This assumption allows us to fit # the Gaussians of each source to each Stokes image by # simply fitting only the overall normalizations of the # individual Gaussians. # # First, fit all source Gaussians to each Stokes image: x, y = N.mgrid[isl_bbox] gg = src.gaussians fitfix = N.ones(len(gg)) # fit only normalization srcmask = isl.mask_active total_flux = N.zeros((4, len(fitfix)), dtype=N.float32) # array of fluxes: N_Stokes x N_Gaussians errors = N.zeros((4, len(fitfix)), dtype=N.float32) # array of fluxes: N_Stokes x N_Gaussians for sind, image in enumerate(ch0_images): if (sind==0 and hasattr(src, '_pi')) or sind > 0: # Fit I only for PI sources p, ep = func.fit_mulgaus2d(image, gg, x, y, srcmask, fitfix) for ig in range(len(fitfix)): bm_pix = N.array([img.pixel_beam()[0], img.pixel_beam()[1], img.pixel_beam()[2]]) total_flux[sind, ig] = p[ig*6]*p[ig*6+3]*p[ig*6+4]/(bm_pix[0]*bm_pix[1]) p = N.insert(p, N.arange(len(fitfix))*6+6, total_flux[sind]) if sind > 0: rms_img = img.__getattribute__('rms_'+pols[sind]+'_arr') else: rms_img = img.rms_arr if len(rms_img.shape) > 1: rms_isl = rms_img[tuple(isl.bbox)].mean() else: rms_isl = rms_img errors[sind] = func.get_errors(img, p, rms_isl)[6] # Now, assign fluxes to each Gaussian. src_flux_I = 0.0 src_flux_Q = 0.0 src_flux_U = 0.0 src_flux_V = 0.0 src_flux_I_err_sq = 0.0 src_flux_Q_err_sq = 0.0 src_flux_U_err_sq = 0.0 src_flux_V_err_sq = 0.0 for ig, gaussian in enumerate(src.gaussians): init_gaus_attr(gaussian) flux_I = total_flux[0, ig] flux_I_err = abs(errors[0, ig]) flux_Q = total_flux[1, ig] flux_Q_err = abs(errors[1, ig]) flux_U = total_flux[2, ig] flux_U_err = abs(errors[2, ig]) flux_V = total_flux[3, ig] flux_V_err = abs(errors[3, ig]) if hasattr(src, '_pi'): gaussian.total_flux = flux_I gaussian.total_fluxE = flux_I_err gaussian.total_flux_Q = flux_Q gaussian.total_flux_U = flux_U gaussian.total_flux_V = flux_V gaussian.total_fluxE_Q = flux_Q_err gaussian.total_fluxE_U = flux_U_err gaussian.total_fluxE_V = flux_V_err if hasattr(src, '_pi'): src_flux_I += flux_I src_flux_I_err_sq += flux_I_err**2 src_flux_Q += flux_Q src_flux_U += flux_U src_flux_V += flux_V src_flux_Q_err_sq += flux_Q_err**2 src_flux_U_err_sq += flux_U_err**2 src_flux_V_err_sq += flux_V_err**2 # Calculate and store polarisation fractions and angle for each Gaussian in the island # For this we need the I flux, which we can just take from g.total_flux and src.total_flux flux_I = gaussian.total_flux flux_I_err = gaussian.total_fluxE stokes = [flux_I, flux_Q, flux_U, flux_V] stokes_err = [flux_I_err, flux_Q_err, flux_U_err, flux_V_err] lpol_frac, lpol_frac_loerr, lpol_frac_hierr = self.calc_lpol_fraction(stokes, stokes_err) # linear pol fraction lpol_ang, lpol_ang_err = self.calc_lpol_angle(stokes, stokes_err) # linear pol angle cpol_frac, cpol_frac_loerr, cpol_frac_hierr = self.calc_cpol_fraction(stokes, stokes_err) # circular pol fraction tpol_frac, tpol_frac_loerr, tpol_frac_hierr = self.calc_tpol_fraction(stokes, stokes_err) # total pol fraction gaussian.lpol_fraction = lpol_frac gaussian.lpol_fraction_loerr = lpol_frac_loerr gaussian.lpol_fraction_hierr = lpol_frac_hierr gaussian.cpol_fraction = cpol_frac gaussian.cpol_fraction_loerr = cpol_frac_loerr gaussian.cpol_fraction_hierr = cpol_frac_hierr gaussian.tpol_fraction = tpol_frac gaussian.tpol_fraction_loerr = tpol_frac_loerr gaussian.tpol_fraction_hierr = tpol_frac_hierr gaussian.lpol_angle = lpol_ang gaussian.lpol_angle_err = lpol_ang_err # Store fluxes for each source in the island init_src_attr(src) if hasattr(src, '_pi'): src.total_flux = src_flux_I src.total_fluxE = N.sqrt(src_flux_I_err_sq) src.total_flux_Q = src_flux_Q src.total_flux_U = src_flux_U src.total_flux_V = src_flux_V src.total_fluxE_Q = N.sqrt(src_flux_Q_err_sq) src.total_fluxE_U = N.sqrt(src_flux_U_err_sq) src.total_fluxE_V = N.sqrt(src_flux_V_err_sq) # Calculate and store polarisation fractions and angle for each source in the island # For this we need the I flux, which we can just take from g.total_flux and src.total_flux src_flux_I = src.total_flux src_flux_I_err = src.total_fluxE stokes = [src_flux_I, src_flux_Q, src_flux_U, src_flux_V] stokes_err = [src_flux_I_err, N.sqrt(src_flux_Q_err_sq), N.sqrt(src_flux_U_err_sq), N.sqrt(src_flux_V_err_sq)] lpol_frac, lpol_frac_loerr, lpol_frac_hierr = self.calc_lpol_fraction(stokes, stokes_err) # linear pol fraction lpol_ang, lpol_ang_err = self.calc_lpol_angle(stokes, stokes_err) # linear pol angle cpol_frac, cpol_frac_loerr, cpol_frac_hierr = self.calc_cpol_fraction(stokes, stokes_err) # circular pol fraction tpol_frac, tpol_frac_loerr, tpol_frac_hierr = self.calc_tpol_fraction(stokes, stokes_err) # total pol fraction src.lpol_fraction = lpol_frac src.lpol_fraction_loerr = lpol_frac_loerr src.lpol_fraction_hierr = lpol_frac_hierr src.cpol_fraction = cpol_frac src.cpol_fraction_loerr = cpol_frac_loerr src.cpol_fraction_hierr = cpol_frac_hierr src.tpol_fraction = tpol_frac src.tpol_fraction_loerr = tpol_frac_loerr src.tpol_fraction_hierr = tpol_frac_hierr src.lpol_angle = lpol_ang src.lpol_angle_err = lpol_ang_err if bar.started: bar.increment() bar.stop() img.completed_Ops.append('polarisation') #################################################################################### def calc_lpol_fraction(self, stokes, err): """ Calculate linear polarisation fraction and error from: stokes = [I, Q, U, V] and err = [Ierr, Qerr, Uerr, Verr] """ I, Q, U, V = stokes Ierr, Qerr, Uerr, Verr = err QUerr = N.mean([Qerr, Uerr]) stokes_lpol = [I, Q, U, 0.0] err_lpol = [Ierr, Qerr, Uerr, 0.0] lfrac, loerr, uperr, Iup, Qup, Uup, Vup = self.estimate_err_frac_with_limits(stokes_lpol, err_lpol) # If all are detections, debias and use error propagation instead if not Iup and not Qup and not Uup: lpol = N.sqrt(Q**2 + U**2) lpol_debiased = self.debias(lpol, QUerr) # debias (to first order) if lpol_debiased > 0.0: lfrac = lpol_debiased / I dlfrac = lfrac * N.sqrt((Ierr/I)**2 + (Q*Qerr/lpol_debiased**2)**2 + (U*Uerr/lpol_debiased**2)**2) else: # if debiased fraction is consistent with zero, estimate a ballpark error with biased value lfrac = 0.0 lpolsq = Q**2 + U**2 dlfrac = N.sqrt(lpolsq) / I * N.sqrt((Ierr/I)**2 + (Q*Qerr/lpolsq)**2 + (U*Uerr/lpolsq)**2) loerr = dlfrac uperr = dlfrac lfrac, loerr, uperr = self.check_frac(lfrac, loerr, uperr) return lfrac, loerr, uperr #################################################################################### def calc_cpol_fraction(self, stokes, err): """ Calculate circular polarisation fraction and error from: stokes = [I, Q, U, V] and err = [Ierr, Qerr, Uerr, Verr] """ I, Q, U, V = stokes Ierr, Qerr, Uerr, Verr = err stokes_cpol = [I, 0.0, 0.0, V] err_cpol = [Ierr, 0.0, 0.0, Verr] cfrac, loerr, uperr, Iup, Qup, Uup, Vup = self.estimate_err_frac_with_limits(stokes_cpol, err_cpol) # If all are detections, debias and use error propagation instead if not Iup and not Vup: cfrac = abs(V) / I dcfrac = cfrac * N.sqrt((Ierr/I)**2 + (Verr/V)**2) loerr = dcfrac uperr = dcfrac cfrac, loerr, uperr = self.check_frac(cfrac, loerr, uperr) return cfrac, loerr, uperr #################################################################################### def calc_tpol_fraction(self, stokes, err): """ Calculate total polarisation fraction and error from: stokes = [I, Q, U, V] and err = [Ierr, Qerr, Uerr, Verr] """ I, Q, U, V = stokes Ierr, Qerr, Uerr, Verr = err QUerr = N.mean([Qerr, Uerr]) tfrac, loerr, uperr, Iup, Qup, Uup, Vup = self.estimate_err_frac_with_limits(stokes, err) # If all are detections, debias and use error propagation instead if not Iup and not Qup and not Uup and not Vup: lpol = N.sqrt(Q**2 + U**2) lpol_debiased = self.debias(lpol, QUerr) tpol_debiased = N.sqrt(Q**2 + U**2 + V**2) - (lpol - lpol_debiased) # debias (to first order) if tpol_debiased > 0.0: tfrac = tpol_debiased / I dtfrac = tfrac * N.sqrt((Ierr/I)**2 + (Q*Qerr/tpol_debiased**2)**2 + (U*Uerr/tpol_debiased**2)**2 + (V*Verr/tpol_debiased**2)**2) else: # if debiased fraction is consistent with zero, estimate a ballpark error with biased value tfrac = 0.0 tpolsq = Q**2 + U**2 + V**2 dtfrac = N.sqrt(tpolsq) / I * N.sqrt((Ierr/I)**2 + (Q*Qerr/tpolsq)**2 + (U*Uerr/tpolsq)**2 + (V*Verr/tpolsq)**2) loerr = dtfrac uperr = dtfrac tfrac, loerr, uperr = self.check_frac(tfrac, loerr, uperr) return tfrac, loerr, uperr #################################################################################### def calc_lpol_angle(self, stokes, err, sig=3.0): """ Calculate linear polarisation angle and error (in degrees) from: stokes = [I, Q, U, V] and err = [Ierr, Qerr, Uerr, Verr] """ I, Q, U, V = stokes Ierr, Qerr, Uerr, Verr = err if abs(Q) < sig*abs(Qerr) and abs(U) < sig*abs(Uerr): return 0.0, 0.0 ang = 0.5 * N.arctan2(U, Q) * 180.0 / N.pi dang = 0.5 / (1.0 + (U/Q)**2) * N.sqrt((Uerr/Q)**2 + (U*Qerr/Q**2)**2) * 180.0 / N.pi return ang, dang #################################################################################### def debias(self, pflux, QUerr): """ Debiases the linearly polarised flux using the same method used for the NVSS catalog (see ftp://ftp.cv.nrao.edu/pub/nvss/catalog.ps). """ data_table=N.array([[1.253,1.2530], [1.256,1.1560], [1.266,1.0660], [1.281,0.9814], [1.303,0.9030], [1.330,0.8304], [1.364,0.7636], [1.402,0.7023], [1.446,0.6462], [1.495,0.5951], [1.549,0.5486], [1.606,0.5064], [1.668,0.4683], [1.734,0.4339], [1.803,0.4028], [1.875,0.3749], [1.950,0.3498], [2.027,0.3273], [2.107,0.3070], [2.189,0.2888], [2.272,0.2724], [2.358,0.2576], [2.444,0.2442], [2.532,0.2321], [2.621,0.2212], [2.711,0.2112], [2.802,0.2021], [2.894,0.1938], [2.986,0.1861], [3.079,0.1791], [3.173,0.1726], [3.267,0.1666], [3.361,0.1610], [3.456,0.1557], [3.551,0.1509], [3.646,0.1463], [3.742,0.1420], [3.838,0.1380], [3.934,0.1342], [4.031,0.1306]]) pnorm = pflux / QUerr if pnorm <= data_table[0,0]: bias = data_table[0,1] else: if pnorm >= data_table[-1,0]: bias = 1.0 / (2.0 * pnorm) + 1.0 / (8.0 * pnorm**3) pnorm = pnorm - bias bias = 1.0 / (2.0 * pnorm) + 1.0 / (8.0 * pnorm**3) else: bias = N.interp(pnorm, data_table[:,0], data_table[:,1]) pflux_debiased = pflux - bias * QUerr return pflux_debiased def check_frac(self, frac, loerr, uperr): if frac < 0.0: frac = 0.0 if frac > 1.0: frac = 1.0 if loerr < 0.0: loerr = frac if frac + uperr > 1.0: uperr = 1.0 - frac return frac, loerr, uperr #################################################################################### def setpara_bdsm(self, img): chain = [Op_preprocess, Op_rmsimage(), Op_threshold(), Op_islands(), Op_gausfit(), Op_gaul2srl(), Op_make_residimage()] opts = img.opts.to_dict() if img.opts.pi_thresh_isl is not None: opts['thresh_isl'] = img.opts.pi_thresh_isl if img.opts.pi_thresh_pix is not None: opts['thresh_pix'] = img.opts.pi_thresh_pix opts['thresh'] = 'hard' opts['polarisation_do'] = False opts['filename'] = '' opts['detection_image'] = '' ops = [] for op in chain: if isinstance(op, type): ops.append(op()) else: ops.append(op) return ops, opts def estimate_err_frac_with_limits(self, stokes, err, sig=3.0): """Estimate reasonable errors on polarization fraction when upper limits are present. """ I, Q, U, V = stokes Ierr, Qerr, Uerr, Verr = err Iup = False Qup = False Uup = False Vup = False if abs(I) < sig * abs(Ierr): Iup = True if abs(Q) < sig * abs(Qerr): Q = 0.0 Qup = True if abs(U) < sig * abs(Uerr): U = 0.0 Uup = True if abs(V) < sig * abs(Verr): V = 0.0 Vup = True pol = N.sqrt(Q**2 + U**2 + V**2) frac = pol / I if frac < 0.0: frac = 0.0 if frac > 1.0: frac = 1.0 if Iup: if Qup and Uup and Vup: frac = 0.0 loerr = 0.0 uperr = 1.0 else: loerr = frac - N.sqrt((abs(Q) - Qerr)**2 + (abs(U) - Uerr)**2 + (abs(V) - Verr)**2) / abs(Ierr) uperr = 1.0 - frac else: loerr = frac - N.sqrt((abs(Q) - Qerr)**2 + (abs(U) - Uerr)**2 + (abs(V) - Verr)**2) / (I + Ierr) uperr = N.sqrt((abs(Q) + Qerr)**2 + (abs(U) + Uerr)**2 + (abs(V) + Verr)**2) / (I - Ierr) - frac if loerr < 0.0: loerr = frac if frac + uperr > 1.0: uperr = 1.0 - frac return frac, loerr, uperr, Iup, Qup, Uup, Vup def double_bbox(self, bbox, shape): """Expand bbox of the island by factor of 2 bbox is isl.bbox shape is img.shape """ def expand(bbox, shape): bbox_width = (bbox.stop - bbox.start)/2.0 return slice(max(0, bbox.start - bbox_width), min(shape, bbox.stop + bbox_width)) return map(expand, bbox, shape) def renumber_islands(img): """Renumbers island_ids (after, e.g., removing one) Also renumbers the pyrank image. """ for i, isl in enumerate(img.islands): isl.island_id = i for g in isl.gaul: g.island_id = i for dg in isl.dgaul: dg.island_id = i if i == 0: img.pyrank[tuple(isl.bbox)] = N.invert(isl.mask_active) - 1 else: img.pyrank[tuple(isl.bbox)] = N.invert(isl.mask_active) * isl.island_id - isl.mask_active gaussian_list = [g for isl in img.islands for g in isl.gaul] img.gaussians = gaussian_list def init_gaus_attr(gaussian): ### Insert polarization attributes gaussian.total_flux_Q_def = Float(doc="Total flux density (Jy), Stokes Q", colname='Total_Q', units='Jy') gaussian.total_fluxE_Q_def = Float(doc="Error in total flux density (Jy), Stokes Q", colname='E_Total_Q', units='Jy') gaussian.total_flux_U_def = Float(doc="Total flux density (Jy), Stokes U", colname='Total_U', units='Jy') gaussian.total_fluxE_U_def = Float(doc="Error in total flux density (Jy), Stokes U", colname='E_Total_U', units='Jy') gaussian.total_flux_V_def = Float(doc="Total flux density (Jy), Stokes V", colname='Total_V', units='Jy') gaussian.total_fluxE_V_def = Float(doc="Error in total flux density (Jy), Stokes V", colname='E_Total_V', units='Jy') gaussian.lpol_fraction_def = Float(doc="Linear polarisation fraction", colname='Linear_Pol_frac', units=None) gaussian.lpol_fraction_loerr_def = Float(doc="Linear polarisation fraction low error", colname='Elow_Linear_Pol_frac', units=None) gaussian.lpol_fraction_hierr_def = Float(doc="Linear polarisation fraction high error", colname='Ehigh_Linear_Pol_frac', units=None) gaussian.cpol_fraction_def = Float(doc="Circular polarisation fraction", colname='Circ_Pol_Frac', units=None) gaussian.cpol_fraction_loerr_def = Float(doc="Circular polarisation fraction low error", colname='Elow_Circ_Pol_Frac', units=None) gaussian.cpol_fraction_hierr_def = Float(doc="Circular polarisation fraction high error", colname='Ehigh_Circ_Pol_Frac', units=None) gaussian.tpol_fraction_def = Float(doc="Total polarisation fraction", colname='Total_Pol_Frac', units=None) gaussian.tpol_fraction_loerr_def = Float(doc="Total polarisation fraction low error", colname='Elow_Total_Pol_Frac', units=None) gaussian.tpol_fraction_hierr_def = Float(doc="Total polarisation fraction high error", colname='Ehigh_Total_Pol_Frac', units=None) gaussian.lpol_angle_def = Float(doc="Polarisation angle (deg from North towards East)", colname='Linear_Pol_Ang', units='deg') gaussian.lpol_angle_err_def = Float(doc="Polarisation angle error (deg)", colname='E_Linear_Pol_Ang', units='deg') def init_src_attr(source): ### Insert polarization attributes source.total_flux_Q_def = Float(doc="Total flux density (Jy), Stokes Q", colname='Total_Q', units='Jy') source.total_fluxE_Q_def = Float(doc="Error in total flux density (Jy), Stokes Q", colname='E_Total_Q', units='Jy') source.total_flux_U_def = Float(doc="Total flux density (Jy), Stokes U", colname='Total_U', units='Jy') source.total_fluxE_U_def = Float(doc="Error in total flux density (Jy), Stokes U", colname='E_Total_U', units='Jy') source.total_flux_V_def = Float(doc="Total flux density (Jy), Stokes V", colname='Total_V', units='Jy') source.total_fluxE_V_def = Float(doc="Error in total flux density (Jy), Stokes V", colname='E_Total_V', units='Jy') source.lpol_fraction_def = Float(doc="Linear polarisation fraction", colname='Linear_Pol_frac', units=None) source.lpol_fraction_loerr_def = Float(doc="Linear polarisation fraction low error", colname='Elow_Linear_Pol_frac', units=None) source.lpol_fraction_hierr_def = Float(doc="Linear polarisation fraction high error", colname='Ehigh_Linear_Pol_frac', units=None) source.cpol_fraction_def = Float(doc="Circular polarisation fraction", colname='Circ_Pol_Frac', units=None) source.cpol_fraction_loerr_def = Float(doc="Circular polarisation fraction low error", colname='Elow_Circ_Pol_Frac', units=None) source.cpol_fraction_hierr_def = Float(doc="Circular polarisation fraction high error", colname='Ehigh_Circ_Pol_Frac', units=None) source.tpol_fraction_def = Float(doc="Total polarisation fraction", colname='Total_Pol_Frac', units=None) source.tpol_fraction_loerr_def = Float(doc="Total polarisation fraction low error", colname='Elow_Total_Pol_Frac', units=None) source.tpol_fraction_hierr_def = Float(doc="Total polarisation fraction high error", colname='Ehigh_Total_Pol_Frac', units=None) source.lpol_angle_def = Float(doc="Polarisation angle (deg from North towards East)", colname='Linear_Pol_Ang', units='deg') source.lpol_angle_err_def = Float(doc="Polarisation angle error (deg)", colname='E_Linear_Pol_Ang', units='deg') PyBDSF-1.10.1/bdsf/preprocess.py000066400000000000000000000152171420247104600163040ustar00rootroot00000000000000"""Module preprocess Calculates some basic statistics of the image and sets up processing parameters for PyBDSM. """ from __future__ import absolute_import import numpy as N from . import _cbdsm from .image import * from math import pi, sqrt, log from . import const from . import functions as func from . import mylogger class Op_preprocess(Op): """Preprocessing -- calculate some basic statistics and set processing parameters. Should assume that pixels outside the universe are blanked in QC ? """ def __call__(self, img): mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Preprocess") bstat = func.bstat if img.opts.kappa_clip is None: kappa = -img.pixel_beamarea() else: kappa = img.opts.kappa_clip if img.opts.polarisation_do: pols = ['I', 'Q', 'U', 'V'] ch0images = [img.ch0_arr, img.ch0_Q_arr, img.ch0_U_arr, img.ch0_V_arr] img.clipped_mean_QUV = [] img.clipped_rms_QUV = [] else: pols = ['I'] # assume I is always present ch0images = [img.ch0_arr] if hasattr(img, 'rms_mask'): mask = img.rms_mask else: mask = img.mask_arr opts = img.opts for ipol, pol in enumerate(pols): image = ch0images[ipol] ### basic stats mean, rms, cmean, crms, cnt = bstat(image, mask, kappa) if cnt > 198: cmean = mean; crms = rms if pol == 'I': if func.approx_equal(crms, 0.0, rel=None): raise RuntimeError('Clipped rms appears to be zero. Check for regions '\ 'with values of 0 and\nblank them (with NaNs) '\ 'or use trim_box to exclude them.') img.raw_mean = mean img.raw_rms = rms img.clipped_mean= cmean img.clipped_rms = crms mylog.info('%s %.4f %s %.4f %s ' % ("Raw mean (Stokes I) = ", mean*1000.0, \ 'mJy and raw rms = ',rms*1000.0, 'mJy')) mylog.info('%s %.4f %s %s %.4f %s ' % ("sigma clipped mean (Stokes I) = ", cmean*1000.0, \ 'mJy and ','sigma clipped rms = ',crms*1000.0, 'mJy')) else: img.clipped_mean_QUV.append(cmean) img.clipped_rms_QUV.append(crms) mylog.info('%s %s %s %.4f %s %s %.4f %s ' % ("sigma clipped mean (Stokes ", pol, ") = ", cmean*1000.0, \ 'mJy and ','sigma clipped rms = ',crms*1000.0, 'mJy')) image = img.ch0_arr # Check if pixels are outside the universe if opts.check_outsideuniv: mylogger.userinfo(mylog, "Checking for pixels outside the universe") noutside_univ = self.outside_univ(img) img.noutside_univ = noutside_univ frac_blank = round(float(noutside_univ)/float(image.shape[0]*image.shape[1]),3) mylogger.userinfo(mylog, "Number of additional pixels blanked", str(noutside_univ) +' ('+str(frac_blank*100.0)+'%)') else: noutside_univ = 0 # If needed, (re)mask the image if noutside_univ > 0: mask = N.isnan(img.ch0_arr) masked = mask.any() img.masked = masked if masked: img.mask_arr = mask img.blankpix = N.sum(mask) ### max/min pixel value & coordinates shape = image.shape[0:2] if mask is not None: img.blankpix = N.sum(mask) if img.blankpix == 0: max_idx = image.argmax() min_idx = image.argmin() else: max_idx = N.nanargmax(image) min_idx = N.nanargmin(image) img.maxpix_coord = N.unravel_index(max_idx, shape) img.minpix_coord = N.unravel_index(min_idx, shape) img.max_value = image.flat[max_idx] img.min_value = image.flat[min_idx] ### Solid angle of the image cdelt = N.array(img.wcs_obj.acdelt[:2]) img.omega = N.product(shape)*abs(N.product(cdelt))/(180.*180./pi/pi) ### Total flux in ch0 image if 'atrous' in img.filename or img._pi or img.log == 'Detection image': # Don't do this estimate for atrous wavelet images # or polarized intensity image, # as it doesn't give the correct flux. Also, ignore # the flux in the detection image, as it's likely # wrong (e.g., not corrected for the primary beam). img.ch0_sum_jy = 0 else: im_flux = N.nansum(image)/img.pixel_beamarea() # Jy img.ch0_sum_jy = im_flux mylogger.userinfo(mylog, 'Flux from sum of (non-blank) pixels', '%.3f Jy' % (im_flux,)) ### if image seems confused, then take background mean as zero instead alpha_sourcecounts = 2.5 # approx diff src count slope. 2.2? if opts.bmpersrc_th is None: if mask is not None: unmasked = N.where(~img.mask_arr) n = (image[unmasked] >= 5.*crms).sum() else: n = (image >= 5.*crms).sum() if n <= 0: n = 1 mylog.info('No pixels in image > 5-sigma.') mylog.info('Taking number of pixels above 5-sigma as 1.') img.bmpersrc_th = N.product(shape)/((alpha_sourcecounts-1.)*n) mylog.info('%s %6.2f' % ('Estimated bmpersrc_th = ', img.bmpersrc_th)) else: img.bmpersrc_th = opts.bmpersrc_th mylog.info('%s %6.2f' % ('Taking default bmpersrc_th = ', img.bmpersrc_th)) confused = False if opts.mean_map == 'default': if img.bmpersrc_th <= 25. or cmean/crms >= 0.1: confused = True img.confused = confused mylog.info('Parameter confused is '+str(img.confused)) img.completed_Ops.append('preprocess') return img def outside_univ(self,img): """ Checks if a pixel is outside the universe and is not blanked, and blanks it. (fits files written by CASA dont do this). """ noutside = 0 n, m = img.ch0_arr.shape for i in range(n): for j in range(m): out = False err = '' pix1 = (i,j) try: skyc = img.pix2sky(pix1) pix2 = img.sky2pix(skyc) if abs(pix1[0]-pix2[0]) > 0.5 or abs(pix1[1]-pix2[1]) > 0.5: out=True except RuntimeError as err: pass if out or ("8" in str(err)): noutside += 1 ch0 = img.ch0_arr ch0[pix1] = float("NaN") img.ch0_arr = ch0 return noutside PyBDSF-1.10.1/bdsf/psf_vary.py000066400000000000000000001400731420247104600157470ustar00rootroot00000000000000from __future__ import print_function from __future__ import absolute_import import numpy as N from .image import * from . import mylogger from copy import deepcopy as cp from . import has_pl if has_pl: import matplotlib.pyplot as pl import scipy import scipy.signal as S from . import _cbdsm from . import functions as func from . import _pytesselate as _pytess from . import shapelets as sh from scipy.optimize import leastsq from . import nat from math import * from . import statusbar from .const import fwsig from . import multi_proc as mp import itertools try: from itertools import izip as zip except ImportError: # will be 3.x series pass class Op_psf_vary(Op): """Computes variation of psf across the image """ def __call__(self, img): if img.opts.psf_vary_do: mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Psf_Vary") mylogger.userinfo(mylog, '\nEstimating PSF variations') opts = img.opts dir = img.basedir + '/misc/' plot = False # debug figures image = img.ch0_arr try: from astropy.io import fits as pyfits old_pyfits = False except ImportError as err: from distutils.version import StrictVersion import pyfits if StrictVersion(pyfits.__version__) < StrictVersion('2.2'): old_pyfits = True else: old_pyfits = False if old_pyfits: mylog.warning('PyFITS version is too old: psf_vary module skipped') return if opts.psf_fwhm is not None: # User has specified a constant PSF to use, so skip PSF fitting/etc. psf_maj = opts.psf_fwhm[0] # FWHM in deg psf_min = opts.psf_fwhm[1] # FWHM in deg psf_pa = opts.psf_fwhm[2] # PA in deg mylogger.userinfo(mylog, 'Using constant PSF (major, minor, pos angle)', '(%.5e, %.5e, %s) degrees' % (psf_maj, psf_maj, round(psf_pa, 1))) else: # Use did not specify a constant PSF to use, so estimate it over = 2 generators = opts.psf_generators; nsig = opts.psf_nsig; kappa2 = opts.psf_kappa2 snrtop = opts.psf_snrtop; snrbot = opts.psf_snrbot; snrcutstack = opts.psf_snrcutstack gencode = opts.psf_gencode; primarygen = opts.psf_primarygen; itess_method = opts.psf_itess_method tess_sc = opts.psf_tess_sc; tess_fuzzy= opts.psf_tess_fuzzy bright_snr_cut = opts.psf_high_snr s_only = opts.psf_stype_only if opts.psf_snrcut < 5.0: mylogger.userinfo(mylog, "Value of psf_snrcut too low; increasing to 5") snrcut = 5.0 else: snrcut = opts.psf_snrcut img.psf_snrcut = snrcut if opts.psf_high_snr is not None: if opts.psf_high_snr < 10.0: mylogger.userinfo(mylog, "Value of psf_high_snr too low; increasing to 10") high_snrcut = 10.0 else: high_snrcut = opts.psf_high_snr else: high_snrcut = opts.psf_high_snr img.psf_high_snr = high_snrcut wtfns=['unity', 'roundness', 'log10', 'sqrtlog10'] if 0 <= itess_method < 4: tess_method=wtfns[itess_method] else: tess_method='unity' ### now put all relevant gaussian parameters into a list ngaus = img.ngaus nsrc = img.nsrc num = N.zeros(nsrc, dtype=N.int32) peak = N.zeros(nsrc) xc = N.zeros(nsrc) yc = N.zeros(nsrc) bmaj = N.zeros(nsrc) bmin = N.zeros(nsrc) bpa = N.zeros(nsrc) code = N.array(['']*nsrc); rms = N.zeros(nsrc) src_id_list = [] for i, src in enumerate(img.sources): src_max = 0.0 for gmax in src.gaussians: # Take only brightest Gaussian per source if gmax.peak_flux > src_max: src_max = gmax.peak_flux g = gmax num[i] = i peak[i] = g.peak_flux xc[i] = g.centre_pix[0] yc[i] = g.centre_pix[1] bmaj[i] = g.size_pix[0] bmin[i] = g.size_pix[1] bpa[i] = g.size_pix[2] code[i] = img.sources[g.source_id].code rms[i] = img.islands[g.island_id].rms gauls = (num, peak, xc, yc, bmaj, bmin, bpa, code, rms) tr_gauls = self.trans_gaul(gauls) # takes gaussians with code=S and snr > snrcut. if s_only: tr = [n for n in tr_gauls if n[1]/n[8]>snrcut and n[7] == 'S'] else: tr = [n for n in tr_gauls if n[1]/n[8]>snrcut] g_gauls = self.trans_gaul(tr) # computes statistics of fitted sizes. Same as psfvary_fullstat.f in fBDSM. bmaj_a, bmaj_r, bmaj_ca, bmaj_cr, ni = _cbdsm.bstat(bmaj, None, nsig) bmin_a, bmin_r, bmin_ca, bmin_cr, ni = _cbdsm.bstat(bmin, None, nsig) bpa_a, bpa_r, bpa_ca, bpa_cr, ni = _cbdsm.bstat(bpa, None, nsig) # get subset of sources deemed to be unresolved. Same as size_ksclip_wenss.f in fBDSM. flag_unresolved = self.get_unresolved(g_gauls, img.beam, nsig, kappa2, over, img.psf_high_snr, plot) if len(flag_unresolved) == 0: mylog.warning('Insufficient number of sources to determine PSF variation.\nTry changing the PSF options or specify a (constant) PSF with the "psf_fwhm" option') return # see how much the SNR-weighted sizes of unresolved sources differ from the synthesized beam. wtsize_beam_snr = self.av_psf(g_gauls, img.beam, flag_unresolved) # filter out resolved sources tr_gaul = self.trans_gaul(g_gauls) tr = [n for i, n in enumerate(tr_gaul) if flag_unresolved[i]] g_gauls = self.trans_gaul(tr) mylogger.userinfo(mylog, 'Number of unresolved sources', str(len(g_gauls[0]))) # get a list of voronoi generators. vorogenS has values (and not None) if generators='field'. vorogenP, vorogenS = self.get_voronoi_generators(g_gauls, generators, gencode, snrcut, snrtop, snrbot, snrcutstack) mylogger.userinfo(mylog, 'Number of generators for PSF variation', str(len(vorogenP[0]))) if len(vorogenP[0]) < 3: mylog.warning('Insufficient number of generators') return mylogger.userinfo(mylog, 'Tesselating image') # group generators into tiles tile_prop = self.edit_vorogenlist(vorogenP, frac=0.9) # tesselate the image volrank, vorowts = self.tesselate(vorogenP, vorogenS, tile_prop, tess_method, tess_sc, tess_fuzzy, \ generators, gencode, image.shape) if opts.output_all: func.write_image_to_file(img.use_io, img.imagename + '.volrank.fits', volrank, img, dir) tile_list, tile_coord, tile_snr = tile_prop ntile = len(tile_list) bar = statusbar.StatusBar('Determining PSF variation ............... : ', 0, ntile) mylogger.userinfo(mylog, 'Number of tiles for PSF variation', str(ntile)) # For each tile, calculate the weighted averaged psf image. Also for all the sources in the image. cdelt = list(img.wcs_obj.acdelt[0:2]) factor=3. psfimages, psfcoords, totpsfimage, psfratio, psfratio_aper = self.psf_in_tile(image, img.beam, g_gauls, \ cdelt, factor, snrcutstack, volrank, tile_prop, plot, img) npsf = len(psfimages) if opts.psf_use_shap: if opts.psf_fwhm is None: # use totpsfimage to get beta, centre and nmax for shapelet decomposition. Use nmax=5 or 6 mask=N.zeros(totpsfimage.shape, dtype=bool) (m1, m2, m3)=func.moment(totpsfimage, mask) betainit=sqrt(m3[0]*m3[1])*2.0 * 1.4 tshape = totpsfimage.shape cen = N.array(N.unravel_index(N.argmax(totpsfimage), tshape))+[1,1] cen = tuple(cen) nmax = 12 basis = 'cartesian' betarange = [0.5,sqrt(betainit*max(tshape))] beta, error = sh.shape_varybeta(totpsfimage, mask, basis, betainit, cen, nmax, betarange, plot) if error == 1: print(' Unable to find minimum in beta') # decompose all the psf images using the beta from above nmax=12; psf_cf=[] for i in range(npsf): psfim = psfimages[i] cf = sh.decompose_shapelets(psfim, mask, basis, beta, cen, nmax, mode='') psf_cf.append(cf) if img.opts.quiet == False: bar.increment() bar.stop() # transpose the psf image list xt, yt = N.transpose(tile_coord) tr_psf_cf = N.transpose(N.array(psf_cf)) # interpolate the coefficients across the image. Ok, interpolate in scipy for # irregular grids is crap. doesnt even pass through some of the points. # for now, fit polynomial. compress = 100.0 x, y = N.transpose(psfcoords) if len(x) < 3: mylog.warning('Insufficient number of tiles to do interpolation of PSF variation') return psf_coeff_interp, xgrid, ygrid = self.interp_shapcoefs(nmax, tr_psf_cf, psfcoords, image.shape, \ compress, plot) psfshape = psfimages[0].shape skip = 5 aa = self.create_psf_grid(psf_coeff_interp, image.shape, xgrid, ygrid, skip, nmax, psfshape, \ basis, beta, cen, totpsfimage, plot) img.psf_images = aa else: if opts.psf_fwhm is None: if ntile < 4: mylog.warning('Insufficient number of tiles to do interpolation of PSF variation') return else: # Fit stacked PSFs with Gaussians and measure aperture fluxes bm_pix = N.array([img.pixel_beam()[0]*fwsig, img.pixel_beam()[1]*fwsig, img.pixel_beam()[2]]) psf_maj = N.zeros(npsf) psf_min = N.zeros(npsf) psf_pa = N.zeros(npsf) if img.opts.quiet == False: bar.start() for i in range(ntile): psfim = psfimages[i] mask = N.zeros(psfim.shape, dtype=bool) x_ax, y_ax = N.indices(psfim.shape) maxv = N.max(psfim) p_ini = [maxv, (psfim.shape[0]-1)/2.0*1.1, (psfim.shape[1]-1)/2.0*1.1, bm_pix[0]/fwsig*1.3, bm_pix[1]/fwsig*1.1, bm_pix[2]*2] para, ierr = func.fit_gaus2d(psfim, p_ini, x_ax, y_ax, mask) ### first extent is major if para[3] < para[4]: para[3:5] = para[4:2:-1] para[5] += 90 ### clip position angle para[5] = divmod(para[5], 180)[1] psf_maj[i] = para[3] psf_min[i] = para[4] posang = para[5] while posang >= 180.0: posang -= 180.0 psf_pa[i] = posang if img.opts.quiet == False: bar.increment() bar.stop() # Interpolate Gaussian parameters if img.aperture is None: psf_maps = [psf_maj, psf_min, psf_pa, psfratio] else: psf_maps = [psf_maj, psf_min, psf_pa, psfratio, psfratio_aper] nimgs = len(psf_maps) bar = statusbar.StatusBar('Interpolating PSF images ................ : ', 0, nimgs) if img.opts.quiet == False: bar.start() map_list = mp.parallel_map(func.eval_func_tuple, zip(itertools.repeat(self.interp_prop), psf_maps, itertools.repeat(psfcoords), itertools.repeat(image.shape)), numcores=opts.ncores, bar=bar) if img.aperture is None: psf_maj_int, psf_min_int, psf_pa_int, psf_ratio_int = map_list else: psf_maj_int, psf_min_int, psf_pa_int, psf_ratio_int, psf_ratio_aper_int = map_list # Smooth if desired if img.opts.psf_smooth is not None: sm_scale = img.opts.psf_smooth / img.pix2beam([1.0, 1.0, 0.0])[0] / 3600.0 # pixels if img.opts.aperture is None: psf_maps = [psf_maj_int, psf_min_int, psf_pa_int, psf_ratio_int] else: psf_maps = [psf_maj_int, psf_min_int, psf_pa_int, psf_ratio_int, psf_ratio_aper_int] nimgs = len(psf_maps) bar = statusbar.StatusBar('Smoothing PSF images .................... : ', 0, nimgs) if img.opts.quiet == False: bar.start() map_list = mp.parallel_map(func.eval_func_tuple, zip(itertools.repeat(self.blur_image), psf_maps, itertools.repeat(sm_scale)), numcores=opts.ncores, bar=bar) if img.aperture is None: psf_maj_int, psf_min_int, psf_pa_int, psf_ratio_int = map_list else: psf_maj_int, psf_min_int, psf_pa_int, psf_ratio_int, psf_ratio_aper_int = map_list # Make sure all smoothed, interpolated images are ndarrays psf_maj_int = N.array(psf_maj_int) psf_min_int = N.array(psf_min_int) psf_pa_int = N.array(psf_pa_int) psf_ratio_int = N.array(psf_ratio_int) if img.aperture is None: psf_ratio_aper_int = N.zeros(psf_maj_int.shape, dtype=N.float32) else: psf_ratio_aper_int = N.array(psf_ratio_aper_int, dtype=N.float32) # Blank with NaNs if needed mask = img.mask_arr if isinstance(mask, N.ndarray): pix_masked = N.where(mask == True) psf_maj_int[pix_masked] = N.nan psf_min_int[pix_masked] = N.nan psf_pa_int[pix_masked] = N.nan psf_ratio_int[pix_masked] = N.nan psf_ratio_aper_int[pix_masked] = N.nan # Store interpolated images. The major and minor axis images are # the sigma in units of arcsec, the PA image in units of degrees east of # north, the ratio images in units of 1/beam. img.psf_vary_maj_arr = psf_maj_int * img.pix2beam([1.0, 1.0, 0.0])[0] * 3600.0 # sigma in arcsec img.psf_vary_min_arr = psf_min_int * img.pix2beam([1.0, 1.0, 0.0])[0] * 3600.0 # sigma in arcsec img.psf_vary_pa_arr = psf_pa_int img.psf_vary_ratio_arr = psf_ratio_int # in 1/beam img.psf_vary_ratio_aper_arr = psf_ratio_aper_int # in 1/beam if opts.output_all: func.write_image_to_file(img.use_io, img.imagename + '.psf_vary_maj.fits', img.psf_vary_maj_arr*fwsig, img, dir) func.write_image_to_file(img.use_io, img.imagename + '.psf_vary_min.fits', img.psf_vary_min_arr*fwsig, img, dir) func.write_image_to_file(img.use_io, img.imagename + '.psf_vary_pa.fits', img.psf_vary_pa_arr, img, dir) func.write_image_to_file(img.use_io, img.imagename + '.psf_vary_ratio.fits', img.psf_vary_ratio_arr, img, dir) func.write_image_to_file(img.use_io, img.imagename + '.psf_vary_ratio_aper.fits', img.psf_vary_ratio_aper_arr, img, dir) # Loop through source and Gaussian lists and deconvolve the sizes using appropriate beam bar2 = statusbar.StatusBar('Correcting deconvolved source sizes ..... : ', 0, img.nsrc) if img.opts.quiet == False: bar2.start() for src in img.sources: src_pos = img.sky2pix(src.posn_sky_centroid) src_pos_int = (int(src_pos[0]), int(src_pos[1])) gaus_c = img.gaus2pix(src.size_sky, src.posn_sky_centroid) if opts.psf_fwhm is None: gaus_bm = [psf_maj_int[src_pos_int]*fwsig, psf_min_int[src_pos_int]*fwsig, psf_pa_int[src_pos_int]] else: # Use user-specified constant PSF instead gaus_bm = img.beam2pix(opts.psf_fwhm) gaus_dc, err = func.deconv2(gaus_bm, gaus_c) src.deconv_size_sky = img.pix2gaus(gaus_dc, src_pos) src.deconv_size_skyE = [0.0, 0.0, 0.0] for g in src.gaussians: gaus_c = img.gaus2pix(g.size_sky, src.posn_sky_centroid) gaus_dc, err = func.deconv2(gaus_bm, gaus_c) g.deconv_size_sky = img.pix2gaus(gaus_dc, g.centre_pix) g.deconv_size_skyE = [0.0, 0.0, 0.0] if img.opts.quiet == False: bar2.spin() if img.opts.quiet == False: bar2.increment() bar2.stop() img.completed_Ops.append('psf_vary') ################################################################################################## def trans_gaul(self, q): " transposes a tuple of .gaul values " y=[] for i in range(len(q[0])): elem=[] for j in range(len(q)): elem.append(q[j][i]) y.append(elem) return y ################################################################################################## def bindata(self, over, num): #ptpbin,nbin,ptplastbin, same as get_bins in fBDSM. if num <= 100: ptpbin=num/5 if num > 100: ptpbin=num/10 if num > 1000: ptpbin=num/20 if ptpbin % 2 == 1: ptpbin=ptpbin+1 if num < 10: ptpbin=num ptpbin = float(ptpbin) # cast to float to avoid integer division errors nbin=int((num-ptpbin)/(ptpbin/over)+1) ptplastbin=int((num-1)-(nbin-1)*ptpbin/over) nbin=nbin+1 return ptpbin, nbin, ptplastbin ################################################################################################## def bin_and_stats_ny(self, x,y,over,ptpbin,nbin,ptplastbin,nsig): import math n1=N.array(range(nbin))+1 # bin number n2=N.array([ptpbin]*nbin); n2[nbin-2]=ptplastbin; n2[nbin-1]=ptpbin/over n3=N.array([ptpbin]*nbin, dtype=float); n3[nbin-1]=float(over)*(len(x)-ptpbin/2)/(nbin-1) xval=N.zeros(nbin) meany=N.zeros(nbin); stdy=N.zeros(nbin); mediany=N.zeros(nbin) for i in range(nbin): lb=int(round(1+(n1[i]-1)*n3[i]/over+(1-1))-1) # -1 for python indexing ub=int(round(1+(n1[i]-1)*n3[i]/over+(n2[i]-1))-1) # -1 for python indexing x1=x[lb:ub+1]; y1=y[lb:ub+1] # do calcmedianclip2vec.f for code=YYN if len(x1) > 0 and len(y1) > 0: nout=100; niter=0 while nout>0 and niter<6: med1=N.median(y1[:]) med2=10.**(N.median(N.log10(x1[:]))) medstd=0 # calcmedianstd.f for j in y1: medstd += (j-med1)*(j-med1) medstd=math.sqrt(medstd/len(y1)) # av1=N.mean(y1); std1=func.std(y1) av2=N.mean(x1); std2=func.std(x1) # get_medianclip_vec2 z=N.transpose([x1, y1]) z1=N.transpose([n for n in z if abs(n[1]-med1)<=nsig*medstd]) nout=len(x1)-len(z1[0]) x1=z1[0]; y1=z1[1]; niter+=1 xval[i]=med2; meany[i]=av1; stdy[i]=std1; mediany[i]=med1 if stdy[nbin-1]/mediany[nbin-1] > stdy[nbin-2]/mediany[nbin-2]: stdy[nbin-1]=stdy[nbin-2]/mediany[nbin-2]*mediany[nbin-1] return xval, meany, stdy, mediany ################################################################################################## def LM_fit(self, x, y, err, funct, order=0): if funct == func.poly: p0=N.array([y[N.argmax(x)]] + [0]*order) if funct == func.wenss_fit: p0=N.array([y[N.argmax(x)]] + [1.]) res=lambda p, x, y, err: (y-funct(p, x))/err (p, flag)=leastsq(res, p0, args=(x, y, err)) return p ################################################################################################## def fit_bins_func(self, x,y,over,ptpbin,nbin,ptplastbin,nsig): # sub_size_ksclip import math (xval,meany,stdy,medy)=self.bin_and_stats_ny(x,y,over,ptpbin,nbin,ptplastbin,nsig) yfit=stdy/medy err=N.array([1.]*nbin) if ptplastbin > 0: err[nbin-2]=err[0]*math.sqrt(1.0*ptpbin/ptplastbin) err[nbin-1]=err[0]*math.sqrt(1.0*ptpbin*over/ptplastbin) i=0 while i 0.25*nbin: sind=int(round(0.25*nbin))-1 s_c=self.LM_fit(xval[sind:],yfit[sind:],err[sind:], func.wenss_fit) err[:]=1. s_cm=self.LM_fit(N.log10(xval),medy,err,func.poly, order=1) if len(xval) >= 3: s_dm=self.LM_fit(N.log10(xval),medy,err,func.poly, order=2) else: s_dm = (N.array([s_cm[0], s_cm[1], 0.0]), 0) if ptpbin<75: s_dm=N.append(s_cm[:], [0.]) return s_c, s_dm ################################################################################################## def get_unresolved(self, g_gauls, beam, nsig, kappa2, over, bright_snr_cut=20.0, plot=False): """"Gets subset of unresolved sources Also flags as unresolved all sources with SNRs above bright_cut_snr, since fitting below is unreliable for bright sources. """ num=len(g_gauls[0]) if num < 10: # Too few sources to do fitting return [] b1=N.asarray(g_gauls[4])/(beam[0]*3600.) b2=N.asarray(g_gauls[5])/(beam[1]*3600.) s1=N.asarray(g_gauls[1])/N.array(g_gauls[8]) snr=N.array(s1) index=snr.argsort() snr=snr[index] nmaj=N.array(b1)[index] nmin=N.array(b2)[index] # if plot: pl.figure() f_sclip=N.zeros((2,num), dtype=bool) for idx, nbeam in enumerate([nmaj, nmin]): xarr=N.copy(snr) yarr=N.copy(nbeam) niter=0; nout=num; noutold=nout*2 while niter<10 and nout >0.75*num: (ptpbin, nbin, ptplastbin)=self.bindata(over,nout) # get_bins in fBDSM (s_c,s_dm) = self.fit_bins_func(xarr,yarr,over,ptpbin,nbin,ptplastbin,nsig) # size_ksclip_wenss in fBDSM noutold = len(xarr) z = N.transpose([xarr, yarr, s_dm[0]+s_dm[1]*N.log10(xarr)+s_dm[2]*(N.log10(xarr)**2.), \ N.sqrt(s_c[0]*s_c[0]+s_c[1]*s_c[1]/(xarr*xarr)) ]) z1 = N.transpose([n for n in z if abs(n[1]-n[2])/(n[2]*n[3]) unresolved logsnr=N.log10(snr) dumr = N.sqrt(s_c[0]*s_c[0]+s_c[1]*s_c[1]/(snr*snr)) med = s_dm[0]+s_dm[1]*logsnr+s_dm[2]*(logsnr*logsnr) f_sclip[idx] = N.abs((nbeam-med)/(med*dumr)) < N.array([kappa2]*num) f_s = f_sclip[0]*f_sclip[1] # Add bright sources if bright_snr_cut is not None: if bright_snr_cut < 20.0: bright_snr_cut = 20.0 bright_srcs = N.where(snr >= bright_snr_cut) if len(bright_srcs[0]) > 0: f_s[bright_srcs] = True # now make plots # if plot: # bb=[b1, b2] # pl.subplot(211+idx) # pl.semilogx(s1, bb[idx], 'og') # f0=f_sclip[idx][index.argsort()] # sf=[n for i, n in enumerate(s1) if f0[i]] # b1f=[n for i, n in enumerate(bb[idx]) if f0[i]] # pl.semilogx(sf, b1f, 'or') # pl.semilogx(snr,med,'-') # pl.semilogx(snr,med+med*dumr*(N.array([kappa2]*num)),'-') # pl.semilogx(snr,med-med*dumr*(N.array([kappa2]*num)),'-') # pl.title(' axis ' + str(idx)) # return f_s[index.argsort()] ################################################################################################## def av_psf(self, g_gauls, beam, flag): """ calculate how much the SNR-weighted sizes of unresolved sources differs from the synthesized beam. Same as av_psf.f in fBDSM.""" from math import sqrt bmaj = N.asarray(g_gauls[4]) bmin = N.asarray(g_gauls[5]) bpa = N.asarray(g_gauls[6]) wt = N.asarray(g_gauls[1])/N.asarray(g_gauls[8]) flagwt = wt*flag sumwt = N.sum(flagwt) w1 = N.sum(flagwt*flagwt) wtavbm = N.array([N.sum(bmaj*flagwt), N.sum(bmin*flagwt), N.sum(bpa*flagwt)])/sumwt dumrar = N.array([N.sum(bmaj*bmaj*flagwt), N.sum(bmin*bmin*flagwt), N.sum(bpa*bpa*flagwt)]) dd = sumwt*sumwt-w1 wtstdbm = N.sqrt((dumrar - wtavbm*wtavbm*sumwt)*sumwt/dd) avpa = N.sum(bpa*flagwt-180.0*flagwt*N.array(bpa >= 90))/sumwt stdpa = N.sum(bpa*flagwt+(180.0*180.0-360.0*bpa)*flagwt*N.array(bpa >= 90)) stdpa = sqrt(abs((stdpa-avpa*avpa*sumwt)*sumwt/dd)) if stdpa < wtstdbm[2]: wtstdbm[2] = stdpa wtavbm[2] = avpa return (wtavbm - N.array([beam[0]*3600.0, beam[1]*3600.0, beam[2]]))/wtstdbm ################################################################################################## def get_voronoi_generators(self, g_gauls, generators, gencode, snrcut, snrtop, snrbot, snrcutstack): """This gets the list of all voronoi generators. It is either the centres of the brightest sources, or is imported from metadata (in future).""" from math import sqrt num=len(g_gauls[0]) snr=N.asarray(g_gauls[1])/N.asarray(g_gauls[8]) index=snr.argsort() snr_incr = snr[index] snr = snr_incr[::-1] x = N.asarray(g_gauls[2])[index] y = N.asarray(g_gauls[3])[index] cutoff = 0 if generators == 'calibrators' or generators == 'field': if gencode != 'file': gencode = 'list' if gencode == 'list': cutoff = int(round(num*(snrtop))) if cutoff > len(snr): cutoff = len(snr) # Make sure we don't fall below snrcutstack (SNR cut for stacking of PSFs), since # it makes no sense to make tiles with generators that fall below this cut. if snr[cutoff-1] < snrcutstack: cutoff = num - snr_incr.searchsorted(snrcutstack) if generators == 'calibrators': if gencode == 'file': raise NotImplementedError("gencode=file not yet implemented.") x1 = x.tolist() y1 = y.tolist() x1.reverse() y1.reverse() snr1 = snr.tolist() vorogenP = N.asarray([x1[0:cutoff], y1[0:cutoff], snr1[0:cutoff]]) vorogenS = None return vorogenP, vorogenS ################################################################################################## def edit_vorogenlist(self, vorogenP, frac): """ Edit primary voronoi generator list. Each tile has a tile centre and can have more than one generator to be averaged. tile_list is a list of arrays, indexed by the tile number and each array is an array of numbers in the ngen list which are the generators in that tile. xtile, ytile and snrtile are arrays of length number_of_tiles and have x,y,snr of each tile. Group together generators if closer than a fraction of dist to third closest.""" xgen, ygen, snrgen = vorogenP flag = N.zeros(len(xgen)) coord = N.array([xgen,ygen]).transpose() tile_list = [] tile_coord = []; tile_snr = [] for i in range(len(xgen)): dist = N.array([func.dist_2pt(coord[i], t) for t in coord]) # dist = N.array(map(lambda t: func.dist_2pt(coord[i], t), coord)) indi = N.argsort(dist) sortdist = dist[indi] if sortdist[1] < frac * sortdist[2]: # first is the element itself if flag[indi[1]] + flag[i] == 0: # not already deleted from other pair tile_list.append([i, indi[1]]) tile_coord.append((coord[i]*snrgen[i]+coord[indi[1]]*snrgen[indi[1]])/(snrgen[i]+snrgen[indi[1]])) tile_snr.append(snrgen[i]+snrgen[indi[1]]) flag[i] = 1 flag[indi[1]] = 1 else: if len(dist) > 3: if sortdist[1]+sortdist[2] < 2.0*frac*sortdist[3]: # for 3 close-by sources in1=indi[1] in2=indi[2] if flag[in1]+flag[in2]+flag[i] == 0: # not already deleted from others tile_list.append([i, in1, in2]) tile_coord.append((coord[i]*snrgen[i]+coord[in1]*snrgen[in1]+coord[in2]*snrgen[in2]) \ /(snrgen[i]+snrgen[in1]+snrgen[in2])) tile_snr.append(snrgen[i]+snrgen[in1]+snrgen[in2]) flag[i] = 1 flag[in1] = 1 flag[in2] = 1 else: tile_list.append([i]) tile_coord.append(coord[i]) tile_snr.append(snrgen[i]) # Assign any leftover generators for i in range(len(xgen)): if flag[i] == 0: tile_list.append([i]) tile_coord.append(coord[i]) tile_snr.append(snrgen[i]) return tile_list, tile_coord, tile_snr ################################################################################################## def tess_simple(self, vorogenP, wts, tess_sc, tess_fuzzy, shape): """ Simple tesselation """ xgen, ygen, snrgen = vorogenP volrank = _pytess.pytess_simple(shape[0], shape[1], xgen, ygen, snrgen, \ wts, tess_fuzzy, tess_sc) return volrank ################################################################################################## def tess_roundness(self, vorogenP, tess_sc, tess_fuzzy, shape): """ Tesselation, modified to make the tiles more round. """ xgen, ygen, snrgen = vorogenP volrank = _pytess.pytess_roundness(shape[0], shape[1], xgen, ygen, snrgen, \ tess_fuzzy, tess_sc) return volrank ################################################################################################## def pixintile(self, tilecoord, pixel, tess_method, wts, tess_sc, tess_fuzzy): """ This has routines to find out which tile a given pixel belongs to. """ if tess_method == 'roundness': #tilenum = pytess_roundness(tilecoord, pixel, wts, tess_sc, tess_fuzzy) print(" Not yet implemented !!!! ") return 0 else: xgen, ygen = tilecoord xgen = N.asarray(xgen) ygen = N.asarray(ygen) ngen = len(xgen) i,j = pixel dist = N.sqrt((i-xgen)*(i-xgen)+(j-ygen)*(j-ygen))/wts minind = dist.argmin() if tess_sc == 's': tilenum=minind else: print(" Not yet implemented !!!! ") return tilenum ################################################################################################## def tesselate(self, vorogenP, vorogenS, tile_prop, tess_method, tess_sc, tess_fuzzy, generators, gencode, shape): """ Various ways of tesselating. If generators='calibrator', no need to tesselate, just get modified list based on very nearby sources. If generators='field' then tesselate. The image is tesselated based on tile_prop. """ wtfn={'unity' : lambda x : N.ones(len(x)), \ 'log10' : N.log10, \ 'sqrtlog10' : lambda x : N.sqrt(N.log10(x)), \ 'roundness' : N.array} tile_list, tile_coord, tile_snr = tile_prop xt = self.trans_gaul(tile_coord)[0] yt = self.trans_gaul(tile_coord)[1] vorogenT = xt, yt, tile_snr wt_fn = wtfn[tess_method] wts = wt_fn(tile_snr) if tess_method == 'roundness': volrank = self.tess_roundness(vorogenT, tess_sc, tess_fuzzy, shape) else: volrank = self.tess_simple(vorogenT, wts, tess_sc, tess_fuzzy, shape) return volrank, wts ################################################################################################## def edit_tile(self, ltnum, g_gauls, flag_unresolved, snrcutstack, volrank, tile_prop, tess_sc, \ tess_fuzzy, wts, tess_method, plot): """ Looks at tiles with no (or one) unresolved source inside it and deletes it and recomputes the tiling. For now, does not recompute since we wont use the rank for those pixels anyway.""" if ltnum > 1: raise NotImplementedError("NOT YET IMPLEMENTED FOR LTNUM>1") tile_list, tile_coord, tile_snr = tile_prop tr_gaul = self.trans_gaul(g_gauls) tr=[n for i, n in enumerate(tr_gaul) if flag_unresolved[i] and n[1]/n[8] >= snrcutstack] ntile = len(tile_list) ngenpertile=N.zeros(ntile) for itile in range(ntile): tile_gauls = [n for n in tr if volrank[int(round(n[2])),int(round(n[3]))]-1 \ == itile] ngenpertile[itile]=len(tile_gauls) new_n = N.sum(ngenpertile >= ltnum) # prepare list of good tiles to pass to pixintile goodtiles = N.array(N.where(ngenpertile >= ltnum)[0]) new_n = len(goodtiles) tile_coord_n = [n for i,n in enumerate(tile_coord) if i in goodtiles] wts_n = [n for i,n in enumerate(wts) if i in goodtiles] r2t = N.zeros(ntile, dtype=int) entry = -1 for itile in range(ntile): if ngenpertile[itile] >= ltnum: r2t[itile] = itile else: pixel = tile_coord[itile] tilenum = self.pixintile(self.trans_gaul(tile_coord_n), pixel, tess_method, wts_n, tess_sc, tess_fuzzy) r2t[itile] = tilenum for itile in range(new_n): num = N.sum(r2t == itile) if num == 0: minarr = -999 while minarr != itile: arr = N.where(r2t > itile)[0] minarr = r2t[arr].min()-1 for i in arr: r2t[i]=r2t[i]-1 n_tile_list = []; n_tile_coord = []; n_tile_snr = [] for itile in range(new_n): ind = N.where(r2t == itile)[0]; ind1 = [] for i in ind: ind1 = ind1 + tile_list[i] n_tile_list.append(ind1) snrs = N.array([tile_snr[i] for i in ind]) coords = N.array([tile_coord[i] for i in ind]) n_tile_snr.append(N.sum(snrs)) n_tile_coord.append(N.sum([snrs[i]*coords[i] for i in range(len(snrs))], 0)/N.sum(snrs)) ngenpertile=N.zeros(new_n) for itile in range(new_n): tile_gauls = [n for n in tr if r2t[volrank[int(round(n[2])),int(round(n[3]))]-1] \ == itile] ngenpertile[itile]=len(tile_gauls) tile_prop = n_tile_list, n_tile_coord, n_tile_snr return ngenpertile, tile_prop, r2t ################################################################################################## def stackpsf(self, image, beam, g_gauls, wts, cdelt, factor): """ Stacks all the images of sources in the gaussian list gauls from image, out to a factor times the beam size. Currently the mask is for the whole image but need to modify it for masks for each gaussian. These gaussians are supposed to be relatively isolated unresolved sources. Cut out an image a big bigger than facXbeam and imageshift to nearest half pixel and then add. Does not handle masks etc well at all. Masks for image for blanks, masks for \ islands, etc.""" gxcens_pix = g_gauls[2] gycens_pix = g_gauls[3] peak = g_gauls[1] psfimsize = int(round(max(beam[0], beam[1])/max(cdelt[0], cdelt[1]) * factor)) # fac X fwhm; fac ~ 2 psfimage = N.zeros((psfimsize, psfimsize), dtype=N.float32) cs2=cutoutsize2 = int(round(psfimsize*(1. + 2./factor)/2.)) # size/2. factor => to avoid edge effects etc cc = cutoutcen_ind=[cs2, cs2] cpsf=cen_psf_ind = N.array([int(int(round(psfimsize))/2)]*2) wt=0. num=len(gxcens_pix) for isrc in range(num): # MASK !!!!!!!!!!! wt += wts[isrc] gcp=N.array([gxcens_pix[isrc], gycens_pix[isrc]]) gcen_ind=gcp-1 rc=rcen_ind = N.asarray(N.round(gcen_ind), dtype=int) shift=cc-(gcen_ind-(rc-cs2)) cutimage = image[rc[0]-cs2:rc[0]+cs2,rc[1]-cs2:rc[1]+cs2] if len(cutimage.shape) == 3: cutimage=cutimage[:,:,0] if 0 not in cutimage.shape: if sum(sum(N.isnan(cutimage))) == 0: im_shift = func.imageshift(cutimage, shift) im_shift = im_shift/peak[isrc]*wts[isrc] subim_shift = im_shift[cc[0]-cpsf[0]:cc[0]-cpsf[0]+psfimsize,cc[1]-cpsf[1]:cc[1]-cpsf[1]+psfimsize] if subim_shift.shape == psfimage.shape: # Check shapes, as they can differ if source is near edge of image. # If they do differ, don't use that source (may be distorted). psfimage += subim_shift psfimage = psfimage/wt return psfimage ################################################################################################## def psf_in_tile(self, image, beam, g_gauls, cdelt, factor, snrcutstack, volrank, \ tile_prop, plot, img): """ For each tile given by tile_prop, make a list of all gaussians in the constituent tesselations and pass it to stackpsf with a weight for each gaussian, to calculate the average psf per tile. Should define weights inside a tile to include closure errors """ mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Psf_Vary") tile_list, tile_coord, tile_snr = tile_prop tr_gaul = self.trans_gaul(g_gauls) tr=[n for i, n in enumerate(tr_gaul)]# if n[1]/n[8] >= snrcutstack] ntile = len(tile_list) psfimages = [] psfcoords = [] psfratio = [] # ratio of peak flux to total flux psfratio_aper = [] # ratio of peak flux to aperture flux srcpertile = N.zeros(ntile) snrpertile = N.zeros(ntile) xt, yt = N.transpose(tile_coord) if plot: pl.figure(None) colours=['b','g','r','c','m','y','k']*(len(xt)/7+1) pl.axis([0.0, image.shape[0], 0.0, image.shape[1]]) pl.title('Tesselated image with tile centres and unresolved sources') for i in range(ntile): pl.plot([xt[i]], [yt[i]], 'D'+colours[i]) pl.text(xt[i], yt[i], str(i)) for itile in range(ntile): tile_gauls = [n for n in tr if volrank[int(round(n[2])),int(round(n[3]))]-1 \ == itile] t_gauls = self.trans_gaul(tile_gauls) srcpertile[itile] = len(tile_gauls) if plot: pl.plot(t_gauls[2], t_gauls[3], 'x'+'k', mew=1.3)#colours[itile]) for i, ig in enumerate(t_gauls[2]): xx=[xt[itile], ig] yy=[yt[itile], t_gauls[3][i]] pl.plot(xx,yy,'-'+colours[itile]) wts = N.asarray(t_gauls[1])/N.asarray(t_gauls[8]) # wt is SNR snrpertile[itile] = sum(wts) mylog.info('PSF tile #%i (center = %i, %i): %i unresolved sources, SNR = %.1f' % (itile, xt[itile], yt[itile], srcpertile[itile], snrpertile[itile])) a = self.stackpsf(image, beam, t_gauls, wts, cdelt, factor) psfimages.append(a) psfcoords.append([sum(N.asarray(t_gauls[2])*wts)/sum(wts), sum(N.asarray(t_gauls[3])*wts)/sum(wts)]) # Find peak/total flux ratio for sources in tile. If an aperture is given, # use the aperture flux as well. # t_gauls[0] is source_id src_ratio = [] src_wts = [] src_ratio_aper = [] src_wts_aper = [] for gt in tile_gauls: src = img.sources[gt[0]] if img.aperture is not None: src_ratio_aper.append(src.peak_flux_max / src.aperture_flux) src_wts_aper.append(src.total_flux / src.aperture_fluxE) src_ratio.append(src.peak_flux_max / src.total_flux) src_wts.append(src.total_flux / src.total_fluxE) if img.aperture is not None: psfratio_aper.append(sum(N.asarray(src_ratio_aper)*src_wts_aper)/sum(src_wts_aper)) else: psfratio_aper.append(0.0) psfratio.append(sum(N.asarray(src_ratio)*src_wts)/sum(src_wts)) totpsfimage = psfimages[0]*snrpertile[0] for itile in range(1,ntile): totpsfimage += psfimages[itile]*snrpertile[itile] totpsfimage = totpsfimage/sum(snrpertile) if plot: pl.imshow(N.transpose(volrank), origin='lower', interpolation='nearest'); pl.colorbar() if plot: pl.figure(None) pl.clf() ax = pl.subplot(1,1,1) pax = ax.get_position() start = N.array((pax.xmin, pax.ymin)) stop = N.array((pax.xmax, pax.ymax)) plaxis = pl.axis([0, image.shape[0], 0, image.shape[1]]) pl.title('Stacked psf for each tile') for itile in range(ntile): im=psfimages[itile] sz=0.07 spt = int(round(snrpertile[itile]*10))/10. titl='n='+str(int(round(srcpertile[itile])))+'; SNR='+str(spt) posn=[psfcoords[itile][0], psfcoords[itile][1]] normposn=N.array(stop-start, dtype=float)/N.array(image.shape[0:2])*posn+start a=pl.axes([normposn[0]-sz/2., normposn[1]-sz/2., sz, sz]) pl.contour(im,15) pl.title(titl, fontsize='small') pl.setp(a, xticks=[], yticks=[]) pl.show() return psfimages, psfcoords, totpsfimage, psfratio, psfratio_aper ################################################################################################## def interp_shapcoefs(self, nmax, tr_psf_cf, psfcoords, imshape, compress, plot): """Interpolate using natgrid. Check to see if variation is significant. """ x, y = N.transpose(psfcoords) index = [(i,j) for i in range(nmax+1) for j in range(nmax+1-i)] xi=x yi=y xo=N.arange(0.0,round(imshape[0]), round(compress)) yo=N.arange(0.0,round(imshape[1]), round(compress)) rgrid=nat.Natgrid(xi,yi,xo,yo) p={} for coord in index: z = N.array(tr_psf_cf[coord]) # else natgrid cant deal with noncontiguous memory p[coord] = rgrid.rgrd(z) # if plot: # for i,coord in enumerate(index): # if i % 36 == 0: # pl.figure(None) # pl.clf() # title = 'Interpolated shapelet coefficients' # if i>0: title = title+' (cont)' # pl.suptitle(title) # pl.subplot(6,6,(i%36)+1) # pl.title(str(coord)) # pl.plot(xi/compress, yi/compress, 'xk') # pl.imshow(p[coord], interpolation='nearest') # pl.colorbar() return p, xo, yo ################################################################################################## def interp_prop(self, prop, psfcoords, imshape, compress=1): """Interpolate using natgrid. Should check to see if variation is significant. """ x, y = N.transpose(psfcoords) xi=x yi=y xo=N.arange(0.0,round(imshape[0]), round(compress)) yo=N.arange(0.0,round(imshape[1]), round(compress)) rgrid=nat.Natgrid(xi,yi,xo,yo) prop_int = rgrid.rgrd(prop) return prop_int ################################################################################################## def create_psf_grid(self, psf_coeff_interp, imshape, xgrid, ygrid, skip, nmax, psfshape, basis, beta, cen, totpsfimage, plot): """ Creates a image with the gridded interpolated psfs. xgrid and ygrid are 1d numpy arrays with the x and y coordinates of the grids. """ # if plot: # plnum=N.zeros(2) # for i in range(2): # dum=pl.figure(None) # plnum[i]=dum.number # pl.clf() # if i == 0: pl.suptitle('Gridded psfs') # if i == 1: pl.suptitle('Gridded residual psfs') # ax = pl.subplot(1,1,1) # plaxis = pl.axis([0, imshape[0], 0, imshape[1]]) # pax = ax.get_position() # start = N.array((pax.xmin, pax.ymin)) # stop = N.array((pax.xmax, pax.ymax)) # sz=0.07 mask=N.zeros(psfshape, dtype=bool) # right now doesnt matter xg=xgrid[::skip+1] yg=ygrid[::skip+1] index = [(i,j) for i in range(0,len(xgrid),skip+1) for j in range(0,len(ygrid),skip+1)] xy = [(i,j) for i in xgrid[::skip+1] for j in ygrid[::skip+1]] blah=[] for i, coord in enumerate(index): maxpsfshape = [0, 0] for k in psf_coeff_interp: if k[0]+1 > maxpsfshape[0]: maxpsfshape[0] = k[0]+1 if k[1]+1 > maxpsfshape[1]: maxpsfshape[1] = k[1]+1 cf = N.zeros(maxpsfshape) for k in psf_coeff_interp: cf[k]=psf_coeff_interp[k][coord] cf = N.transpose(cf) psfgridim = sh.reconstruct_shapelets(psfshape, mask, basis, beta, cen, nmax, cf) blah.append(psfgridim) # if plot: # for j in range(2): # pl.figure(plnum[j]) # posn = [xy[i][0], xy[i][1]] # normposn =N.array(stop-start, dtype=float)/N.array(imshape[0:2])*posn+start # a=pl.axes([normposn[0]-sz/2., normposn[1]-sz/2., sz, sz]) # if j == 0: pl.contour(psfgridim,15) # if j == 1: pl.contour(psfgridim-totpsfimage,15) # pl.setp(a, xticks=[], yticks=[]) # pl.colorbar() # if plot: # pl.figure(plnum[0]) # pl.figure(plnum[1]) # return blah ################################################################################################## def blur_image(self, im, n, ny=None) : """ blurs the image by convolving with a gaussian kernel of typical size n. The optional keyword argument ny allows for a different size in the y direction. """ from scipy.ndimage import gaussian_filter sx = n if ny is not None: sy = ny else: sy = n improc = gaussian_filter(im, [sy, sx]) return improc PyBDSF-1.10.1/bdsf/pybdsf.py000077500000000000000000000716041420247104600154130ustar00rootroot00000000000000"""Interactive PyBDSF shell. This module initializes the interactive PyBDSF shell, which is a customized IPython enviroment. It should be called from the terminal prompt using the command "pybdsf". """ from __future__ import print_function import bdsf from bdsf.image import Image import pydoc import sys import inspect ############################################################################### # Functions needed only in the custom IPython shell are defined here. Other # functions used by both the custom shell and normal Python or IPython # environments are defined in interface.py. # # Before starting the IPython shell, we need to define all the functions and # variables that we want in the namespace. Note that we adopt the convention # for this UI of using lines of 72 characters max for doc strings and the # start-up banner. However, the parameter list will fill the entire available # terminal width to consume as few vertical lines as possible. global _img _img = Image({'filename':''}) _img._is_interactive_shell = True T = True F = False true = True false = False def inp(cur_cmd=None): """List inputs for current task. If a task is given as an argument, inp sets the current task to the given task. If no task is given, inp lists the parameters of the current task. """ global _img success = _set_pars_from_prompt() if not success: return if cur_cmd is not None: if not hasattr(cur_cmd, 'arg_list'): print('\033[31;1mERROR\033[0m: not a valid task') return _set_current_cmd(cur_cmd) else: if not hasattr(_img, '_current_cmd'): print('\033[31;1mERROR\033[0m: no task is set') return bdsf.interface.list_pars(_img, opts_list=_img._current_cmd_arg_list, banner=_img._current_cmd_desc, use_groups=_img._current_cmd_use_groups) def go(cur_cmd=None): """Executes the current task. If a task is given as an argument, go executes the given task, even if it is not the current task. The current task is not changed in this case. """ global _img success = _set_pars_from_prompt() if not success: return if cur_cmd is None: if not hasattr(_img, '_current_cmd'): print('\033[31;1mERROR\033[0m: no task is set') return cur_cmd = _img._current_cmd if not hasattr(cur_cmd, 'arg_list'): print('\033[31;1mERROR\033[0m: not a valid task') return cur_cmd() def default(cur_cmd=None): """Resets all parameters for a task to their default values. If a task name is given (e.g., "default show_fit"), the parameters for that task are reset. If no task name is given, the parameters of the current task are reset. """ global _img if cur_cmd is None: if not hasattr(_img, '_current_cmd'): print('\033[31;1mERROR\033[0m: no task is set') return cur_cmd = _img._current_cmd if hasattr(cur_cmd, 'arg_list'): opts_list = cur_cmd.arg_list else: print('\033[31;1mERROR\033[0m: not a valid task') return _img.opts.set_default(opts_list) _replace_vals_in_namespace(opt_names=opts_list) def tget(filename=None): """Load processing parameters from a parameter save file. A file name may be given (e.g., "tget 'savefile.sav'"), in which case the parameters are loaded from the file specified. If no file name is given, the parameters are loaded from the file 'pybdsf.last' if it exists. Normally, the save file is created by the tput command (try "help tput" for more info). The save file is a "pickled" python dictionary which can be loaded into python and edited by hand. See the pickle module for more information. Below is an example of how to edit a save file by hand: BDSF [1]: import pickle BDSF [2]: with open('savefile.sav', 'r') as savefile: BDSF [3]: pars = pickle.load(savefile) BDSF [4]: pars['rms_box'] = (80, 20) --> change rms_box parameter BDSF [5]: with open('savefile.sav', 'w') as savefile: BDSF [6]: pickle.dump(pars, savefile) --> save changes """ try: import cPickle as pickle except ImportError: import pickle import os global _img # Check whether user has given a task name as input (as done in casapy). # If so, reset filename to None. if hasattr(filename, 'arg_list'): filename = None if filename is None or filename == '': if os.path.isfile('pybdsf.last'): filename = 'pybdsf.last' else: print('\033[31;1mERROR\033[0m: No file name given and '\ '"pybdsf.last" not found.\nPlease specify a file to load.') return if os.path.isfile(filename): try: pkl_file = open(filename, 'rb') pars = pickle.load(pkl_file) pkl_file.close() _img.opts.set_opts(pars) _replace_vals_in_namespace() print("--> Loaded parameters from file '" + filename + "'.") except: print("\033[31;1mERROR\033[0m: Could not read file '" + \ filename + "'.") else: print("\033[31;1mERROR\033[0m: File '" + filename + "' not found.") def tput(filename=None, quiet=False): """Save processing parameters to a file. A file name may be given (e.g., "tput 'savefile.sav'"), in which case the parameters are saved to the file specified. If no file name is given, the parameters are saved to the file 'pybdsf.last'. The saved parameters can be loaded using the tget command (try "help tget" for more info). The save file is a "pickled" python dictionary which can be loaded into python and edited by hand. See the pickle module for more information. Below is an example of how to edit a save file by hand: BDSF [1]: import pickle BDSF [2]: with open('savefile.sav', 'r') as savefile: BDSF [3]: pars = pickle.load(savefile) BDSF [4]: pars['rms_box'] = (80, 20) --> change rms_box parameter BDSF [5]: with open('savefile.sav', 'w') as savefile: BDSF [6]: pickle.dump(pars, savefile) --> save changes """ try: import cPickle as pickle except ImportError: import pickle global _img success = _set_pars_from_prompt() if not success: return if filename is None or filename == '': filename = 'pybdsf.last' # convert opts to dictionary pars = _img.opts.to_dict() output = open(filename, 'wb') pickle.dump(pars, output, protocol=0) output.close() if not quiet: print("--> Saved parameters to file '" + filename + "'.") def _set_pars_from_prompt(): """Gets parameters and value and stores them in _img. To do this, we extract all the valid parameter names and values from the f_globals directory. Then, use set_pars() to set them all. Returns True if successful, False if not. """ global _img f = sys._getframe(len(inspect.stack())-2) f_dict = f.f_globals # Check through all possible options and # build options dictionary opts = _img.opts.to_dict() user_entered_opts = {} for k, v in opts.items(): if k in f_dict: if f_dict[k] == '': # Set option to default value in _img and namespace _img.opts.set_default(k) f_dict[k] = _img.opts.__getattribute__(k) user_entered_opts.update({k: f_dict[k]}) # Finally, set the options try: _img.opts.set_opts(user_entered_opts) return True except RuntimeError as err: # If an opt fails to set, replace its value in the namespace # with its current value in _img. Then print error so user knows. err_msg = str(err) err_msg_trim = err_msg.split('(')[0] indx1 = err_msg_trim.find('"') + 1 indx2 = err_msg_trim.find('"', indx1) k = err_msg_trim[indx1:indx2] orig_opt_val = opts[k] f_dict[k] = orig_opt_val print('\033[31;1mERROR\033[0m: ' + err_msg_trim + \ '\nResetting to previous value.') return False def _replace_vals_in_namespace(opt_names=None): """Replaces opt values in the namespace with the ones in _img. opt_names - list of option names to replace (can be string if only one) """ global _img f = sys._getframe(len(inspect.stack())-2) f_dict = f.f_globals if opt_names is None: opt_names = _img.opts.get_names() if isinstance(opt_names, str): opt_names = [opt_names] for opt_name in opt_names: if opt_name in f_dict: f_dict[opt_name] = _img.opts.__getattribute__(opt_name) def _set_current_cmd(cmd): """Sets information about current command in img. This function is used to emulate a casapy interface. """ global _img cmd_name = cmd.__name__ doc = cmd.__doc__ _img._current_cmd = cmd _img._current_cmd_name = cmd_name _img._current_cmd_desc = cmd_name.upper() + ': ' + doc.split('\n')[0] _img._current_cmd_arg_list = cmd.arg_list _img._current_cmd_use_groups = cmd.use_groups ############################################################################### # Next, we define the tasks such that they may be called directly by # the user if so desired. These functions simply pass on the user- # specified arguments to the appropriate Image method. Here we also # define the detailed doc strings used by help, and, after each task # definition, we define its list of arguments and whether it should # use the opts 'group' attribute, both needed when inp is called. If # a new parameter is added to a task, it needs to be added to opts.py # and to the list of arguments for the task below (the "arg_list") # attribute. def process_image(**kwargs): """Find and measure sources in an image. There are many possible parameters and options for process_image. Use "inp process_image" to list them. To get more information about a parameter, use help. E.g., > help 'rms_box' When process_image is executed, PyBDSF performs the following steps in order: 1. Reads in the image. 2. Calculates basic statistics of the image and stores them in the Image object. Calculates sensible values of processing parameters and stores them. First calculates mean and rms, with and without (3-sigma) clipping, min and max pixel and values, solid angle. Hereafter, rms indicates the 3-sigma clipped measure. Next, the number of beams per source is calculated (see help on algorithms for details), using a sensible estimate of boxsize and stepsize (which can be set using the rms_box parameter). Finally, the thresholds are set. They can either be hard-thresholded (by the user or set as 5-sigma for pixel threshold and 3-sigma for island boundaries internally) or can be calculated using the False Detection Rate (FDR) method using an user defined value for alpha. If the user does not specify whether hard thresholding or FDR should be applied, one or the other is chosen internally based on the ratio of expected false pixels and true pixels (the choice is written out in the log file). 3. Calculates rms image. 3-sigma clipped rms and mean are calculated inside boxes of size boxsize in steps of stepsize. Intermediate values are calculated using bilinear interpolation (it was seen that bicubic spline did not yield appreciably better results but is also available). Depending on the resulting statistics (see help on algorithms for details), we either adopt the rms image or a constant rms in the following analysis. 4. Identifies islands of contiguous emission. First all pixels greater than the pixel threshold are identified (and sorted by descending flux order). Next, starting from each of these pixels, all contiguous pixels (defined by 8-connectivity, i.e., the surrounding eight pixels) higher than the island boundary threshold are identified as belonging to one island, accounting properly for overlaps of islands. 5. Fit multiple gaussians and/or shapelets to each island. For each island, the subimages of emission and rms are cut out. The number of multiple gaussians to be fit can be determined by three different methods (see help on algorithms for details). With initial guesses corresponding to these peaks, gaussians are simultaneously fit to the island using the Levenberg-Marqhardt algorithm. Sensible criteria for bad solutions are defined. If multiple gaussians are fit and one of them is a bad solution then the number of gaussians is decreased by one and fit again, till all solutions in the island are good (or zero in number, in which case its flagged). After the final fit to the island, the deconvolved size is computed assuming the theoretical beam and the statistics in the source area and in the island are computed and stored. Errors on each of the fitted parameters are computed using the formulae in Condon (1997). Finally all good solutions are written into the gaussian catalog as an ascii and binary file. If shapelets are required, the program calculates optimal nmax, beta and the centre, and stores these and the shapelet coefficients in a file. """ global _img success = _set_pars_from_prompt() if not success: return # Save current command, as it might be overwritten when process # is called by the user directly and is not the current command. cur_cmd = _img._current_cmd # Run process. Note that process automatically picks up options # from the Image object, so we don't need to get_task_kwargs as # we do for the other tasks. success = _img.process(**kwargs) # Now restore parameters and save to pybdsf.last if success: _set_current_cmd(cur_cmd) tput(quiet=True) task_list = _img.opts.get_names() process_image.arg_list = task_list process_image.use_groups = True def show_fit(**kwargs): """Show results of fit. Selected plots are displayed to give the user a quick overview of the results of the fit. The plots may be zoomed, saved to a file, etc. using the controls at the bottom of the plot window. In addition, the following commands are available: Press "i" ........ : Get integrated flux densities and mean rms values for the visible portion of the image Press "m" ........ : Change min and max scaling values Press "n" ........ : Show / hide island IDs Press "0" ........ : Reset scaling to default Press "c" ........ : Change source for SED plot Click Gaussian ... : Print Gaussian and source IDs (zoom_rect mode, toggled with the "zoom" button and indicated in the lower right corner, must be off) The SED plot will also show the chosen source. Parameters: ch0_image, rms_image, mean_image, ch0_islands, gresid_image, sresid_image, gmodel_image, smodel_image, source_seds, ch0_flagged, pi_image, psf_major, psf_minor, psf_pa, broadcast For more information about a parameter, use help. E.g., > help 'ch0_image' """ global _img success = _set_pars_from_prompt() if not success: return img_kwargs = _get_task_kwargs(show_fit) for k in kwargs: # If user enters an argument, use it instead of # that in _img img_kwargs[k] = kwargs[k] try: success = _img.show_fit(**img_kwargs) if success: tput(quiet=True) except KeyboardInterrupt: print("\n\033[31;1mAborted\033[0m") show_fit.arg_list = ['ch0_image', 'rms_image', 'mean_image', 'ch0_islands', 'gresid_image', 'sresid_image', 'gmodel_image', 'smodel_image', 'source_seds', 'ch0_flagged', 'pi_image', 'psf_major', 'psf_minor', 'psf_pa', 'broadcast'] show_fit.use_groups = False def write_catalog(**kwargs): """Write the Gaussian, source, or shapelet list to a file. The lists can be written in a number of formats. The information included in the output file varies with the format used. Use "help 'format'" for more information. Parameters: outfile, format, srcroot, bbs_patches, incl_chan, clobber, catalog_type, incl_empty, correct_proj, bbs_patches_mask For more information about a parameter, use help. E.g., > help 'bbs_patches' """ global _img success = _set_pars_from_prompt() if not success: return img_kwargs = _get_task_kwargs(write_catalog) for k in kwargs: # If user enters an argument, use it instead of # that in _img img_kwargs[k] = kwargs[k] try: success = _img.write_catalog(**img_kwargs) if success: tput(quiet=True) except KeyboardInterrupt: print("\n\033[31;1mAborted\033[0m") write_catalog.arg_list = ['bbs_patches', 'format', 'outfile', 'srcroot', 'incl_chan', 'clobber', 'catalog_type', 'incl_empty', 'correct_proj', 'bbs_patches_mask'] write_catalog.use_groups = False def export_image(**kwargs): """Write an image to disk. Parameters: outfile, img_type, img_format, mask_dilation, pad_image, clobber For more information about a parameter, use help. E.g., > help 'img_type' """ global _img success = _set_pars_from_prompt() if not success: return img_kwargs = _get_task_kwargs(export_image) for k in kwargs: # If user enters an argument, use it instead of # that in _img img_kwargs[k] = kwargs[k] try: success = _img.export_image(**img_kwargs) if success: tput(quiet=True) except KeyboardInterrupt: print("\n\033[31;1mAborted\033[0m") export_image.arg_list = ['outfile', 'img_type', 'img_format', 'mask_dilation', 'pad_image', 'clobber'] export_image.use_groups = False def _get_task_kwargs(task): """Returns dictionary of keyword arguments from _img for the given task.""" global _img arg_list = task.arg_list kwargs = {} for a in arg_list: kwargs.update({a: _img.opts.__getattribute__(a)}) return kwargs ############################################################################### # Customize the help system for PyBDSF. The user can type "help task" to get # help on a task (it prints the doc string) or "help 'opt'" to get help on # a option (it prints the doc string defined in opts.py). class bdsmDocHelper(pydoc.Helper): def help(self, request): global _img topbar = '_' * 72 + '\n' # 72-character divider if hasattr(request, '__name__'): pydoc.pager(topbar + 'Help on ' + pydoc.text.bold(request.__name__) + ':\n\n' + pydoc.getdoc(request)) else: opts = _img.opts.__class__.__dict__ try: opt = opts[request] desc_list = str(opt.doc()).split('\n') desc = '\n\n'.join(desc_list) default_val = opt._default if isinstance(default_val, str): valstr = "'" + default_val + "'" else: valstr = str(default_val) default_val_text = 'Default value: ' + valstr if opt.group() is not None and opt.group() != 'hidden': group_text = '\nBelongs to group: ' + opt.group() else: group_text = '' desc_text = bdsf.interface.wrap(desc, 72) desc_text = '\n'.join(desc_text) pydoc.pager(topbar + 'Help on the ' + pydoc.text.bold(request) + ' parameter:\n\n' + default_val_text + group_text + '\n\n' + desc_text) except(KeyError): print("Parameter '" + request + "' not recognized.") pydoc.help = bdsmDocHelper(sys.stdin, sys.stdout) ############################################################################### # Now run the IPython shell with this namespace and a customized autocompleter. # The custom autocompleter is below. It adds task, command, and option names and # a few common values to ipython's autocompleter. It also adds files in the # local directory when they might be needed (but only if the user has started # to enter a string -- this behavior is to help avoid entering filenames as # non-strings; this is also done for the help autocomplete). def _opts_completer(self, event): """ Returns a list of strings with possible completions.""" import os import glob from bdsf.image import Image img = Image({'filename':''}) opts = img.opts.get_names() # Split the command entered by user when TAB was pressed # and check for up to three components (from e.g. "par = val", # which gives cmd1 = "par", cmd2 = "=", and cmd3 = "val") cmd1 = (event.line).rsplit(None)[0] if len((event.line).rsplit(None)) > 1: cmd2 = (event.line).rsplit(None)[1] else: cmd2 = '' if len((event.line).rsplit(None)) > 2: cmd3 = (event.line).rsplit(None)[2] else: cmd3 = '' # First, check to see if user has entered a parameter name # and an equals sign. If so, check parameter type. If Enum # or Option, match only to the allowable values. # Allowable values are available from v._type.values if v is # type Enum (v has no attribute _type.values if not). if "=" in cmd1 or "=" in cmd2: par_vals = [] if "=" in cmd1: cmd3 = cmd1.split('=')[1] cmd1 = cmd1.split('=')[0] if cmd1 in opts: from bdsf.tc import tcEnum, tcOption v = img.opts.__class__.__dict__[cmd1] partype = v._type if isinstance(partype, tcOption): par_vals = ['None'] elif isinstance(partype, tcEnum): if ('"' in cmd2 or "'" in cmd2 or '"' in cmd3 or "'" in cmd3): par_vals = v._type.values if not isinstance(par_vals, list): par_vals = list(par_vals) if None in par_vals: # Remove None from list pindx = par_vals.index(None) par_vals.pop(pindx) else: if None in v._type.values: par_vals.append('None') if True in v._type.values: par_vals.append('True') if False in v._type.values: par_vals.append('False') elif v._default == True or v._default == False: par_vals = ['True', 'False'] if cmd1 == 'filename' or cmd1 == 'outfile': if ('"' in cmd2 or "'" in cmd2 or '"' in cmd3 or "'" in cmd3): # Also add files in current directory found = [f.replace('\\','/') for f in glob.glob('*')] if len(found) > 0: for fnd in found: par_vals.append(fnd) return par_vals elif cmd1 == 'inp' or cmd1 == 'go': # Match task names only cmds = ['process_image', 'write_catalog', 'export_image', 'show_fit'] return cmds elif cmd1 == 'cd' or cmd1 == 'tput' or cmd1 == 'tget' or '!' in cmd1: # Match to files in current directory (force use of ' or " with # tput and tget, as filename must be a string). files = [] found = [f.replace('\\','/') for f in glob.glob('*')] if len(found) > 0: for fnd in found: files.append(fnd) if cmd1 == 'tput' or cmd1 == 'tget' and not ('"' in cmd2 or "'" in cmd2): # User has not (yet) started to enter a string, so don't # return filenames return [] return files elif cmd1 == 'help': if '"' in cmd2 or "'" in cmd2: # User has started to enter a string: # Match to parameter names, as they must be strings par_vals = opts return par_vals else: # User has not started to enter a string: # Match to commands + tasks only cmds = ['process_image', 'write_catalog', 'export_image', 'show_fit', 'go', 'inp', 'tget', 'tput', 'default', 'changelog'] return cmds else: # Match to parameter, task, and command names only # Add command names opts.append('inp') opts.append('go') opts.append('tget') opts.append('tput') opts.append('default') opts.append('help') # Add task names opts.append('process_image') opts.append('show_fit') opts.append('write_catalog') opts.append('export_image') return opts def main(): # Define the welcome banner to print on startup. Also check if there is a newer # version on the STRW ftp server. If there is, print a message to the user # asking them to update. from bdsf._version import __version__, changelog divider1 = '=' * 72 + '\n' divider2 = '_' * 72 + '\n' banner = '\nPyBDSF version ' + __version__ + '\n'\ + divider1 + 'PyBDSF commands\n'\ ' inp task ............ : Set current task and list parameters\n'\ " par = val ........... : Set a parameter (par = '' sets it to default)\n"\ ' Autocomplete (with TAB) works for par and val\n'\ ' go .................. : Run the current task\n'\ ' default ............. : Set current task parameters to default values\n'\ " tput ................ : Save parameter values\n"\ " tget ................ : Load parameter values\n"\ 'PyBDSF tasks\n'\ ' process_image ....... : Process an image: find sources, etc.\n'\ ' show_fit ............ : Show the results of a fit\n'\ ' write_catalog ....... : Write out list of sources to a file\n'\ ' export_image ........ : Write residual/model/rms/mean image to a file\n'\ 'PyBDSF help\n'\ ' help command/task ... : Get help on a command or task\n'\ ' (e.g., help process_image)\n'\ " help 'par' .......... : Get help on a parameter (e.g., help 'rms_box')\n"\ ' help changelog ...... : See list of recent changes\n'\ + divider2 # Go ahead and set the current task to process_image, so that the user does not # need to enter "inp process_image" as the first step (the first task needed # after startup will almost always be process_image). _set_current_cmd(process_image) # Now start the ipython shell. Due to (non-backward-compatible) changes in # ipython with version 0.11, we must support both versions until 0.11 or # greater is in common use. try: # IPython >= 0.11 from distutils.version import LooseVersion from IPython import __version__ as ipython_version if LooseVersion(ipython_version) < LooseVersion('1.0.0'): from IPython.frontend.terminal.embed import InteractiveShellEmbed else: from IPython.terminal.embed import InteractiveShellEmbed try: # Use the traitlets config from traitlets.config.loader import Config from IPython.terminal.prompts import Prompts, Token cfg = Config() class CustomPrompt(Prompts): def in_prompt_tokens(self, cli=None): return [ (Token.Prompt, 'BDSF ['), (Token.PromptNum, str(self.shell.execution_count)), (Token.Prompt, ']: '), ] def out_prompt_tokens(self): return [ (Token.OutPrompt, ''), ] cfg.TerminalInteractiveShell.prompts_class = CustomPrompt except ImportError: # fall back to old config from IPython.config.loader import Config cfg = Config() prompt_config = cfg.PromptManager if ipython_version == '0.11': cfg.InteractiveShellEmbed.prompt_in1 = "BDSF [\#]: " else: prompt_config.in_template = "BDSF [\#]: " cfg.InteractiveShellEmbed.autocall = 2 user_ns = globals() user_ns.update(locals()) ipshell = InteractiveShellEmbed(config=cfg, banner1=banner, user_ns=user_ns) ipshell.set_hook('complete_command', _opts_completer, re_key = '.*') except ImportError: # IPython < 0.11 from IPython.Shell import IPShellEmbed argv = ['-prompt_in1','BDSF [\#]: ','-autocall','2'] ipshell = IPShellEmbed(argv=argv, banner=banner, user_ns=user_ns) ipshell.IP.set_hook('complete_command', _opts_completer, re_key = '.*') ipshell() PyBDSF-1.10.1/bdsf/readimage.py000066400000000000000000000615061420247104600160370ustar00rootroot00000000000000"""Module readimage. Defines operation Op_readimage which initializes image and WCS The current implementation tries to reduce input file to 2D if possible, as this makes more sense atm. One more important thing to note -- in its default configuration pyfits will read data in non-native format, so we have to convert it before usage. See the read_image_from_file in functions.py for details. Lastly, wcs and spectal information are stored in the PyWCS object img.wcs_obj. """ from __future__ import absolute_import import numpy as N from .image import * from .functions import read_image_from_file from . import mylogger import sys import shutil import tempfile class Op_readimage(Op): """Image file loader Loads image and configures wcslib machinery for it. """ def __call__(self, img): import time, os mylog = mylogger.logging.getLogger("PyBDSM." + img.log + "Readimage") if img.opts.filename == '': raise RuntimeError('Image file name not specified.') # Check for trailing "/" in file name (since CASA images are directories). # Although the general rule is to not alter the values in opts (only the # user should be able to alter these), in this case there is no harm in # replacing the file name in opts with the '/' trimmed off. if img.opts.filename[-1] == '/': img.opts.filename = img.opts.filename[:-1] # Determine indir if not explicitly given by user (in img.opts.indir) if img.opts.indir is None: indir = os.path.dirname(img.opts.filename) if indir == '': indir = './' img.indir = indir else: img.indir = img.opts.indir # Try to trim common extensions from filename and store various # paths root, ext = os.path.splitext(img.opts.filename) if ext in ['.fits', '.FITS', '.image']: fname = root elif ext in ['.gz', '.GZ']: root2, ext2 = os.path.splitext(root) if ext2 in ['.fits', '.FITS', '.image']: fname = root2 else: fname = root else: fname = img.opts.filename img.filename = img.opts.filename img.parentname = fname img.imagename = fname + '.pybdsm' img.basedir = './' + fname + '_pybdsm/' # Read in data and header img.use_io = '' image_file = os.path.basename(img.opts.filename) result = read_image_from_file(image_file, img, img.indir) if result is None: raise RuntimeError("Cannot open file " + repr(image_file) + ". " + img._reason) else: data, hdr = result # Check whether caching is to be used. If it is, set up a # temporary directory. The temporary directory will be # removed automatically upon exit. if img.opts.do_cache: img.do_cache = True else: img.do_cache = False if img.do_cache: mylog.info('Using disk caching.') tmpdir = img.parentname+'_tmp' if not os.path.exists(tmpdir): os.makedirs(tmpdir) img._tempdir_parent = TempDir(tmpdir) img.tempdir = TempDir(tempfile.mkdtemp(dir=tmpdir)) import atexit, shutil atexit.register(shutil.rmtree, img._tempdir_parent, ignore_errors=True) else: img.tempdir = None # Store data and header in img. If polarisation_do = False, only store pol == 'I' img.nchan = data.shape[1] img.nstokes = data.shape[0] mylogger.userinfo(mylog, 'Image size', str(data.shape[-2:]) + ' pixels') mylogger.userinfo(mylog, 'Number of channels', '%i' % data.shape[1]) mylogger.userinfo(mylog, 'Number of Stokes parameters', '%i' % data.shape[0]) if img.opts.polarisation_do and data.shape[0] == 1: img.opts.polarisation_do = False mylog.warning('Image has Stokes I only. Polarisation module disabled.') if img.opts.polarisation_do or data.shape[0] == 1: img.image_arr = data else: img.image_arr = data[0, :].reshape(1, data.shape[1], data.shape[2], data.shape[3]) img.header = hdr img.shape = data.shape img.j = 0 ### initialize wcs conversion routines self.init_wcs(img) self.init_beam(img) self.init_freq(img) year, code = self.get_equinox(img) if year is None: mylog.info('Equinox not found in image header. Assuming J2000.') img.equinox = 2000.0 else: mylog.info('Equinox of image is %f.' % year) img.equinox = year if img.opts.output_all: # Set up directory to write output to opdir = img.opts.opdir_overwrite if opdir not in ['overwrite', 'append']: img.opts.opdir_overwrite = 'append' if opdir == 'append': mylog.info('Appending output files to directory ' + img.basedir) else: mylog.info('Overwriting output files (if any) in directory ' + img.basedir) if os.path.isdir(img.basedir): os.system("rm -fr " + img.basedir + '/*') if not os.path.isdir(img.basedir): os.makedirs(img.basedir) # Now add solname (if any) and time to basedir if img.opts.solnname is not None: img.basedir += img.opts.solnname + '_' img.basedir += time.strftime("%d%b%Y_%H.%M.%S") # Make the final output directory if not os.path.isdir(img.basedir): os.makedirs(img.basedir) del data img.completed_Ops.append('readimage') return img def init_wcs(self, img): """Initialize wcs pixel <=> sky conversion routines. """ from math import pi import warnings hdr = img.header try: from astropy.wcs import WCS from astropy.wcs import FITSFixedWarning with warnings.catch_warnings(): warnings.filterwarnings("ignore",category=DeprecationWarning) warnings.filterwarnings("ignore",category=FITSFixedWarning) t = WCS(hdr) t.wcs.fix() except ImportError as err: import warnings with warnings.catch_warnings(): warnings.filterwarnings("ignore",category=DeprecationWarning) from pywcs import WCS t = WCS(hdr) t.wcs.fix() acdelt = [abs(hdr['cdelt1']), abs(hdr['cdelt2'])] # Here we define p2s and s2p to allow celestial coordinate # transformations. Transformations for other axes (e.g., # spectral) are striped out. def p2s(self, xy): xy = list(xy) for i in range(self.naxis-2): xy.append(0) if hasattr(self, 'wcs_pix2world'): try: xy_arr = N.array([xy[0:2]]) sky = self.wcs_pix2world(xy_arr, 0) except: xy_arr = N.array([xy]) sky = self.wcs_pix2world(xy_arr, 0) else: xy_arr = N.array([xy]) sky = self.wcs_pix2sky(xy_arr, 0) return sky.tolist()[0][0:2] def s2p(self, rd): rd = list(rd) for i in range(self.naxis-2): rd.append(1) # For some reason, 0 gives nans with astropy in some situations if hasattr(self, 'wcs_world2pix'): try: rd_arr = N.array([rd[0:2]]) pix = self.wcs_world2pix(rd_arr, 0) except: rd_arr = N.array([rd]) pix = self.wcs_world2pix(rd_arr, 0) else: rd_arr = N.array([rd]) pix = self.wcs_sky2pix(rd_arr, 0) return pix.tolist()[0][0:2] # Here we define functions to transform Gaussian parameters (major axis, # minor axis, pos. angle) from the image plane to the celestial sphere. # These transforms are valid only at the Gaussian's center and ignore # any change across the extent of the Gaussian. def gaus2pix(x, location=None, use_wcs=True): """ Converts Gaussian parameters in deg to pixels. x - (maj [deg], min [deg], pa [deg]) location - specifies the location in pixels (x, y) for which transform is desired Input beam angle should be degrees CCW from North. The output beam angle is degrees CCW from the +y axis of the image. """ if use_wcs: bmaj, bmin, bpa = x brot = self.get_rot(img, location) # rotation delta CCW (in degrees) between N and +y axis of image s1 = self.angdist2pixdist(img, bmaj, bpa, location=location) s2 = self.angdist2pixdist(img, bmin, bpa + 90.0, location=location) th = bpa + brot if s1 < s2: s1, s2 = s2, s1 th += 90.0 th = divmod(th, 180)[1] ### th lies between 0 and 180 return (s1, s2, th) else: return img.beam2pix(x) def pix2gaus(x, location=None, use_wcs=True): """ Converts Gaussian parameters in pixels to deg. x - (maj [pix], min [pix], pa [deg]) location - specifies the location in pixels (x, y) for which transform is desired Input beam angle should be degrees CCW from the +y axis of the image. The output beam angle is degrees CCW from North. """ if use_wcs: s1, s2, th = x if s1 == 0.0 and s2 == 0.0: return (0.0, 0.0, 0.0) brot = self.get_rot(img, location) # rotation delta CCW (in degrees) between N and +y axis of image th_rad = th / 180.0 * N.pi bmaj = self.pixdist2angdist(img, s1, th, location=location) bmin = self.pixdist2angdist(img, s2, th + 90.0, location=location) bpa = th - brot if bmaj < bmin: bmaj, bmin = bmin, bmaj bpa += 90.0 bpa = divmod(bpa, 180)[1] ### bpa lies between 0 and 180 return (bmaj, bmin, bpa) else: return img.pix2beam(x) def pix2coord(pix, location=None, use_wcs=True): """Converts size along x and y (in pixels) to size in RA and Dec (in degrees) Currently, this function is only used to convert errors on x, y position to errors in RA and Dec. """ if use_wcs: # Account for projection effects x, y = pix brot = self.get_rot(img, location) # rotation delta CCW (in degrees) between N and +y axis of image ra_dist_pix = N.sqrt( (x * N.cos(brot * N.pi / 180.0))**2 + (y * N.sin(brot * N.pi / 180.0))**2 ) dec_dist_pix = N.sqrt( (x * N.sin(brot * N.pi / 180.0))**2 + (y * N.cos(brot * N.pi / 180.0))**2 ) s1 = self.pixdist2angdist(img, ra_dist_pix, 90.0 - brot, location=location) s2 = self.pixdist2angdist(img, dec_dist_pix, 0.0 - brot, location=location) else: x, y = pix s1 = abs(x * cdelt1) s2 = abs(y * cdelt2) return (s1, s2) if hasattr(t, 'wcs_pix2world'): instancemethod = type(t.wcs_pix2world) else: instancemethod = type(t.wcs_pix2sky) if sys.version_info[0] > 2: t.p2s = instancemethod(p2s, t) else: t.p2s = instancemethod(p2s, t, WCS) if hasattr(t, 'wcs_world2pix'): instancemethod = type(t.wcs_world2pix) else: instancemethod = type(t.wcs_sky2pix) if sys.version_info[0] > 2: t.s2p = instancemethod(s2p, t) else: t.s2p = instancemethod(s2p, t, WCS) img.wcs_obj = t img.wcs_obj.acdelt = acdelt img.pix2sky = t.p2s img.sky2pix = t.s2p img.gaus2pix = gaus2pix img.pix2gaus = pix2gaus img.pix2coord = pix2coord def init_beam(self, img): """Initialize beam parameters, and conversion routines to convert beam to/from pixel coordinates""" from .const import fwsig mylog = mylogger.logging.getLogger("PyBDSM.InitBeam") hdr = img.header cdelt1, cdelt2 = img.wcs_obj.acdelt[0:2] ### define beam conversion routines: def beam2pix(x): """ Converts beam in deg to pixels. Use when no dependence on position is appropriate. Input beam angle should be degrees CCW from North at image center. The output beam angle is degrees CCW from the +y axis of the image. """ bmaj, bmin, bpa = x s1 = abs(bmaj / cdelt1) s2 = abs(bmin / cdelt2) th = bpa return (s1, s2, th) def pix2beam(x): """ Converts beam in pixels to deg. Use when no dependence on position is appropriate. Input beam angle should be degrees CCW from the +y axis of the image. The output beam angle is degrees CCW from North at image center. """ s1, s2, th = x bmaj = abs(s1 * cdelt1) bmin = abs(s2 * cdelt2) bpa = th if bmaj < bmin: bmaj, bmin = bmin, bmaj bpa += 90.0 bpa = divmod(bpa, 180)[1] ### bpa lies between 0 and 180 return [bmaj, bmin, bpa] def pixel_beam(): """Returns the beam in sigma units in pixels""" pbeam = beam2pix(img.beam) return (pbeam[0]/fwsig, pbeam[1]/fwsig, pbeam[2]) def pixel_beamarea(): """Returns the beam area in pixels""" pbeam = beam2pix(img.beam) return 1.1331 * pbeam[0] * pbeam[1] ### Get the beam information from the header found = False if img.opts.beam is not None: beam = img.opts.beam else: try: beam = (hdr['BMAJ'], hdr['BMIN'], hdr['BPA']) found = True except: ### try see if AIPS as put the beam in HISTORY as usual for h in hdr['HISTORY']: # Check if h is a string or a FITS Card object (long headers are # split into Cards as of PyFITS 3.0.4) if not isinstance(h, str): hstr = h.value else: hstr = h if N.all(['BMAJ' in hstr, 'BMIN' in hstr, 'BPA' in hstr, 'CLEAN' in hstr]): try: dum, dum, dum, bmaj, dum, bmin, dum, bpa = hstr.split() except ValueError: try: dum, dum, bmaj, dum, bmin, dum, bpa, dum, dum = hstr.split() except ValueError: break beam = (float(bmaj), float(bmin), float(bpa)) found = True if not found: raise RuntimeError("No beam information found in image header.") ### convert beam into pixels (at image center) pbeam = beam2pix(beam) pbeam = (pbeam[0] / fwsig, pbeam[1] / fwsig, pbeam[2]) # IN SIGMA UNITS ### and store it img.pix2beam = pix2beam img.beam2pix = beam2pix img.beam = beam # FWHM size in degrees img.pixel_beam = pixel_beam # IN SIGMA UNITS in pixels img.pixel_beamarea = pixel_beamarea mylogger.userinfo(mylog, 'Beam shape (major, minor, pos angle)', '(%.5e, %.5e, %s) degrees' % (beam[0], beam[1], round(beam[2], 1))) def init_freq(self, img): """Initialize frequency parameters and store them. Basically, PyBDSM uses two frequency parameters: img.frequency - the reference frequency in Hz of the ch0 image img.freq_pars - the crval, crpix, and cdelt values for the frequency axis in Hz If the input frequency info (in the WCS) is not in Hz, it is converted. """ try: from astropy.wcs import WCS except ImportError as err: import warnings with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=DeprecationWarning) from pywcs import WCS mylog = mylogger.logging.getLogger("PyBDSM.InitFreq") if img.opts.frequency_sp is not None and img.image_arr.shape[1] > 1: # If user specifies multiple frequencies, then let # collapse.py do the initialization img.frequency = img.opts.frequency_sp[0] img.freq_pars = (0.0, 0.0, 0.0) mylog.info('Using user-specified frequencies.') elif img.opts.frequency is not None and img.image_arr.shape[1] == 1: img.frequency = img.opts.frequency img.freq_pars = (img.frequency, 0.0, 0.0) mylog.info('Using user-specified frequency.') else: spec_indx = img.wcs_obj.wcs.spec if spec_indx == -1: # No frequency axis; check header instead hdr = img.header if 'RESTFREQ' in hdr: img.frequency = hdr['RESTFREQ'] img.freq_pars = (img.frequency, 0.0, 0.0) elif 'FREQ' in hdr: img.frequency = hdr['FREQ'] img.freq_pars = (img.frequency, 0.0, 0.0) else: raise RuntimeError('No frequency information found in image header.') else: # Here we define p2f and f2p to allow pixel to frequency # transformations. Transformations for other axes (e.g., # celestial) are striped out. # # First, convert frequency to Hz if needed: img.wcs_obj.wcs.sptr('FREQ-???') def p2f(self, spec_pix): spec_list = [0] * self.naxis spec_list[spec_indx] = spec_pix spec_pix_arr = N.array([spec_list]) if hasattr(self, 'wcs_pix2world'): freq = self.wcs_pix2world(spec_pix_arr, 0) else: freq = self.wcs_pix2sky(spec_pix_arr, 0) return freq.tolist()[0][spec_indx] def f2p(self, freq): freq_list = [0] * self.naxis freq_list[spec_indx] = freq freq_arr = N.array([freq_list]) if hasattr(self, 'wcs_world2pix'): pix = self.wcs_world2pix(freq_arr, 0) else: pix = self.wcs_sky2pix(freq_arr, 0) return pix.tolist()[0][spec_indx] if hasattr(img.wcs_obj, 'wcs_pix2world'): instancemethod = type(img.wcs_obj.wcs_pix2world) else: instancemethod = type(img.wcs_obj.wcs_pix2sky) if sys.version_info[0] > 2: img.wcs_obj.p2f = instancemethod(p2f, img.wcs_obj) else: img.wcs_obj.p2f = instancemethod(p2f, img.wcs_obj, WCS) if hasattr(img.wcs_obj, 'wcs_world2pix'): instancemethod = type(img.wcs_obj.wcs_world2pix) else: instancemethod = type(img.wcs_obj.wcs_sky2pix) if sys.version_info[0] > 2: img.wcs_obj.f2p = instancemethod(f2p, img.wcs_obj) else: img.wcs_obj.f2p = instancemethod(f2p, img.wcs_obj, WCS) if img.opts.frequency is not None: img.frequency = img.opts.frequency else: img.frequency = img.wcs_obj.p2f(0) def get_equinox(self, img): """Gets the equinox from the header. Returns float year with code, where code is: 1 - EQUINOX, EPOCH or RADECSYS keyword not found in header 0 - EQUINOX found as a numeric value 1 - EPOCH keyword used for equinox (not recommended) 2 - EQUINOX found as 'B1950' 3 - EQUINOX found as 'J2000' 4 - EQUINOX derived from value of RADECSYS keyword 'ICRS', 'FK5' ==> 2000, 'FK4' ==> 1950 """ code = -1 year = None hdr = img.header if 'EQUINOX' in hdr: year = hdr['EQUINOX'] if isinstance(year, str): # Check for 'J2000' or 'B1950' values tst = year[:1] if (tst == 'J') or (tst == 'B'): year = float(year[1:]) if tst == 'J': code = 3 if tst == 'B': code = 2 else: code = 0 else: if 'EPOCH' in hdr: # Check EPOCH if EQUINOX not found year = float(hdr['EPOCH']) code = 1 else: if 'RADECSYS' in hdr: sys = hdr['RADECSYS'] code = 4 if sys[:3] == 'ICR': year = 2000.0 if sys[:3] == 'FK5': year = 2000.0 if sys[:3] == 'FK4': year = 1950.0 return year, code def get_rot(self, img, location=None): """Returns CCW rotation angle (in degrees) between N and +y axis of image location specifies the location in pixels (x, y) for which angle is desired """ if location is None: x1 = img.image_arr.shape[2] / 2.0 y1 = img.image_arr.shape[3] / 2.0 else: x1, y1 = location ra, dec = img.pix2sky([x1, y1]) delta_dec = self.pixdist2angdist(img, 1.0, 0.0, location=[x1, y1]) # approx. size in degrees of 1 pixel if dec + delta_dec > 90.0: # shift towards south instead delta_dec *= -1.0 x2, y2 = img.sky2pix([ra, dec + delta_dec]) try: rot_ang_rad = N.arctan2(y2-y1, x2-x1) - N.pi / 2.0 if delta_dec < 0.0: rot_ang_rad -= N.pi except: rot_ang_rad = 0.0 return rot_ang_rad * 180.0 / N.pi def angdist2pixdist(self, img, angdist, pa, location=None): """Returns the distance in pixels for a given angular distance in degrees pa - position angle in degrees east of north location - x and y location of center """ from . import functions as func if location is None: x1 = int(img.image_arr.shape[2] / 2.0) y1 = int(img.image_arr.shape[3] / 2.0) else: x1, y1 = location pa_pix = self.get_rot(img, location) x0 = x1 - 10.0 * N.sin( (pa + pa_pix) * N.pi / 180.0 ) y0 = y1 - 10.0 * N.cos( (pa + pa_pix) * N.pi / 180.0 ) ra0, dec0 = img.pix2sky([x0, y0]) x2 = x1 + 10.0 * N.sin( (pa + pa_pix) * N.pi / 180.0 ) y2 = y1 + 10.0 * N.cos( (pa + pa_pix) * N.pi / 180.0 ) ra2, dec2 = img.pix2sky([x2, y2]) angdist12 = func.angsep(ra0, dec0, ra2, dec2) # degrees pixdist12 = N.sqrt( (x0 - x2)**2 + (y0 - y2)**2 ) # pixels if angdist12 > 0.0: result = angdist * pixdist12 / angdist12 if N.isnan(result) or result <= 0.0: result = N.mean(img.wcs_obj.acdelt[0:2]) else: result = N.mean(img.wcs_obj.acdelt[0:2]) return result def pixdist2angdist(self, img, pixdist, pa, location=None): """Returns the angular distance in degrees for a given distance in pixels pa - position angle in degrees CCW from +y axis location - x and y location of center """ from . import functions as func if location is None: x1 = int(img.image_arr.shape[2] / 2.0) y1 = int(img.image_arr.shape[3] / 2.0) else: x1, y1 = location x0 = x1 - pixdist / 2.0 * N.sin(pa * N.pi / 180.0) y0 = y1 - pixdist / 2.0 * N.cos(pa * N.pi / 180.0) ra0, dec0 = img.pix2sky([x0, y0]) x2 = x1 + pixdist / 2.0 * N.sin(pa * N.pi / 180.0) y2 = y1 + pixdist / 2.0 * N.cos(pa * N.pi / 180.0) ra2, dec2 = img.pix2sky([x2, y2]) angdist12 = func.angsep(ra0, dec0, ra2, dec2) # degrees return angdist12 class TempDir(str): """Container for temporary directory for image caching. Directory is deleted when garbage collected/zero references """ def __del__(self): import os if os.path.exists(self.__str__()): shutil.rmtree(self.__str__()) PyBDSF-1.10.1/bdsf/rmsimage.py000066400000000000000000001340571420247104600157270ustar00rootroot00000000000000"""Module rmsimage. Defines operation Op_rmsimage which calculates mean and rms maps. The current implementation will handle both 2D and 3D images, where for 3D case it will calculate maps for each plane (= Stokes images). """ from __future__ import absolute_import import numpy as N import scipy.ndimage as nd from . import _cbdsm from .image import Op, Image, NArray, List from . import const from . import mylogger import os from . import functions as func import scipy.ndimage as nd from . import multi_proc as mp import itertools try: from itertools import izip as zip except ImportError: # will be 3.x series pass from .functions import read_image_from_file class Op_rmsimage(Op): """Calculate rms & noise maps Prerequisites: Module preprocess should be run first. """ def __call__(self, img): mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"RMSimage") mylogger.userinfo(mylog, "Calculating background rms and mean images") if img.opts.polarisation_do: pols = ['I', 'Q', 'U', 'V'] ch0_images = [img.ch0_arr, img.ch0_Q_arr, img.ch0_U_arr, img.ch0_V_arr] cmeans = [img.clipped_mean] + img.clipped_mean_QUV crmss = [img.clipped_rms] + img.clipped_rms_QUV else: pols = ['I'] # assume I is always present ch0_images = [img.ch0_arr] cmeans = [img.clipped_mean] crmss = [img.clipped_rms] mask = img.mask_arr opts = img.opts cdelt = N.array(img.wcs_obj.acdelt[:2]) # Determine box size for rms/mean map calculations. # If user specifies rms_box, use it. Otherwise, use either an # adaptive binning scheme that shrinks the box near # the brightest sources or estimate rms_box from bright sources. # # The adaptive scheme calculates the rms/mean map # at two different scales: # 1) using a large rms_box, set by size of largest source # 2) using a small rms_box, set by size of largest bright source # Then, the rms and mean values at a given point are determined # by a weighted average of the values in the maps at the two # scales. fwsig = const.fwsig min_adapt_threshold = 10.0 if opts.adaptive_thresh is None: adapt_thresh = 50.0 start_thresh = 500.0 else: adapt_thresh = opts.adaptive_thresh if adapt_thresh < min_adapt_threshold: adapt_thresh = min_adapt_threshold opts.adaptive_thresh = min_adapt_threshold start_thresh = adapt_thresh brightsize = None isl_pos = [] do_adapt = img.opts.adaptive_rms_box img.use_rms_map = None img.mean_map_type = None # 'size' of brightest source kappa1 = 3.0 try: brightsize = int(round(2.*img.beam[0]/cdelt[0]/fwsig* sqrt(2.*log(img.max_value/(kappa1*crms))))) except: brightsize = int(round(2.*img.beam[0]/cdelt[0]/fwsig)) mylog.info('Estimated size of brightest source (pixels) = '+str(brightsize)) # Using clipped mean and rms and a starting threshold of 500 sigma, # search for bright sources. If fewer than 5 are found, reduce # threshold until limit set by adapt_thresh is hit. cmean = cmeans[0] crms = crmss[0] image = ch0_images[0] shape = image.shape isl_size_bright = [] isl_area_highthresh = [] isl_peak = [] max_isl_brightsize = 0.0 threshold = start_thresh if do_adapt: mylogger.userinfo(mylog, "Using adaptive scaling of rms_box") while len(isl_size_bright) < 5 and threshold >= adapt_thresh: isl_size_bright=[] isl_maxposn = [] if img.masked: act_pixels = ~(mask.copy()) act_pixels[~mask] = (image[~mask]-cmean)/threshold >= crms else: act_pixels = (image-cmean)/threshold >= crms threshold *= 0.8 rank = len(image.shape) connectivity = nd.generate_binary_structure(rank, rank) labels, count = nd.label(act_pixels, connectivity) slices = nd.find_objects(labels) for idx, s in enumerate(slices): isl_size_bright.append(max([s[0].stop-s[0].start, s[1].stop-s[1].start])) size_area = (labels[s] == idx+1).sum()/img.pixel_beamarea()*2.0 isl_area_highthresh.append(size_area) isl_maxposn.append(tuple(N.array(N.unravel_index(N.argmax(image[s]), image[s].shape))+\ N.array((s[0].start, s[1].start)))) isl_peak.append(nd.maximum(image[s], labels[s], idx+1)) # Check islands found above at thresh_isl threshold to determine if # the bright source is embedded inside a large island or not. If it is, # exclude it from the bright-island list. Also find the size of the # largest island at this threshold to set the large-scale rms_box bright_threshold = threshold threshold = 10.0 if img.masked: act_pixels = ~(mask.copy()) act_pixels[~mask] = (image[~mask]-cmean)/threshold >= crms else: act_pixels = (image-cmean)/threshold >= crms rank = len(image.shape) connectivity = nd.generate_binary_structure(rank, rank) labels, count = nd.label(act_pixels, connectivity) slices = nd.find_objects(labels) isl_size = [] isl_size_highthresh = [] isl_size_lowthresh = [] isl_snr = [] thratio = threshold/bright_threshold for idx, s in enumerate(slices): isl_area_lowthresh = (labels[s] == idx+1).sum()/img.pixel_beamarea()*2.0 isl_maxposn_lowthresh = tuple(N.array(N.unravel_index(N.argmax(image[s]), image[s].shape))+ N.array((s[0].start, s[1].start))) isl_size += [s[0].stop-s[0].start, s[1].stop-s[1].start] if do_adapt and isl_maxposn_lowthresh in isl_maxposn: bright_indx = isl_maxposn.index(isl_maxposn_lowthresh) if isl_area_lowthresh < 25.0 or isl_area_lowthresh/isl_area_highthresh[bright_indx] < 8.0: isl_pos.append(isl_maxposn_lowthresh) isl_size_lowthresh.append(max([s[0].stop-s[0].start, s[1].stop-s[1].start])) isl_size_highthresh.append(isl_size_bright[bright_indx]) isl_snr.append(isl_peak[bright_indx]/crms) if len(isl_size) == 0: max_isl_size = 0.0 else: max_isl_size = max(isl_size) mylog.info('Maximum extent of largest 10-sigma island using clipped rms (pixels) = '+str(max_isl_size)) if len(isl_size_highthresh) == 0: max_isl_size_highthresh = 0.0 max_isl_size_lowthresh = 0.0 else: max_isl_size_highthresh = max(isl_size_highthresh) max_isl_size_lowthresh = max(isl_size_lowthresh) avg_max_isl_size = (max_isl_size_highthresh + max_isl_size_lowthresh) / 2.0 if hasattr(img, '_adapt_rms_isl_pos'): isl_pos = img._adapt_rms_isl_pos # set isl_pos to existing value (for wavelet analysis) if len(isl_pos) == 0: # No bright sources found do_adapt = False else: img._adapt_rms_isl_pos = isl_pos min_size_allowed = int(img.pixel_beam()[0]*9.0) if opts.rms_box is None or (opts.rms_box_bright is None and do_adapt): if do_adapt: bsize = int(max(brightsize, min_size_allowed, max_isl_size_highthresh*2.0)) else: bsize = int(max(brightsize, min_size_allowed, max_isl_size*2.0)) bsize2 = int(max(min(image.shape)/10.0, max_isl_size*5.0)) if bsize < min_size_allowed: bsize = min_size_allowed if bsize % 10 == 0: bsize += 1 if bsize2 < min_size_allowed: bsize2 = min_size_allowed if bsize2 % 10 == 0: bsize2 += 1 bstep = int(round(min(bsize/3., min(shape)/10.))) bstep2 = int(round(min(bsize2/3., min(shape)/10.))) if opts.rms_box_bright is None: img.rms_box_bright = (bsize, bstep) else: img.rms_box_bright = opts.rms_box_bright if opts.rms_box is None: img.rms_box = (bsize2, bstep2) else: img.rms_box = opts.rms_box else: if do_adapt: img.rms_box_bright = opts.rms_box_bright img.rms_box = opts.rms_box else: img.rms_box_bright = opts.rms_box img.rms_box = opts.rms_box if opts.kappa_clip is None: kappa = -img.pixel_beamarea() else: kappa = img.opts.kappa_clip if do_adapt: map_opts = (kappa, img.rms_box_bright, opts.spline_rank) else: map_opts = (kappa, img.rms_box, opts.spline_rank) for ipol, pol in enumerate(pols): data = ch0_images[ipol] mean = N.zeros(data.shape, dtype=N.float32) rms = N.zeros(data.shape, dtype=N.float32) if len(pols) > 1: pol_txt = ' (' + pol + ')' else: pol_txt = '' ## calculate rms/mean maps if needed if ((opts.rms_map is not False) or (opts.mean_map not in ['zero', 'const'])) and img.rms_box[0] > min(image.shape)/4.0: # rms box is too large - just use constant rms and mean self.output_rmsbox_size(img) mylogger.userinfo(mylog, 'Size of rms_box larger than 1/4 of image size') mylogger.userinfo(mylog, 'Using constant background rms and mean') img.use_rms_map = False img.mean_map_type = 'const' else: if opts.rmsmean_map_filename is not None and len(opts.rmsmean_map_filename)!=0: # from astropy.io import fits as pyfits def CheckShape(A): if len(A.shape)!=4: raise RuntimeError("Array shape should be len 4 (nch,npol,nx,ny)") if A.shape[0]!=1: raise RuntimeError("Array should be single channel") if A.shape[1]!=1: raise RuntimeError("Array should be single pol") mean_fits_name,rms_fits_name=opts.rmsmean_map_filename mylogger.userinfo(mylog, "Skipping mean and rms image computation as external images supplied") mylogger.userinfo(mylog, " Opening mean image: %s"%mean_fits_name) # mean = pyfits.open(mean_fits_name, mode="readonly")[0].data mean, hdr = read_image_from_file(mean_fits_name, img, img.indir) CheckShape(mean); mean = mean[0,0] mylogger.userinfo(mylog, " Opening rms image: %s"%rms_fits_name) # rms = pyfits.open(rms_fits_name, mode="readonly")[0].data rms, hdr = read_image_from_file(rms_fits_name, img, img.indir) CheckShape(rms); rms = rms[0,0] elif (opts.rms_map is not False) or (opts.mean_map not in ['zero', 'const']): if len(data.shape) == 2: ## 2d case mean, rms = self.calculate_maps(img, data, mean, rms, mask, map_opts, do_adapt=do_adapt, bright_pt_coords=isl_pos, rms_box2=img.rms_box, logname="PyBDSM."+img.log, ncores=img.opts.ncores) elif len(data.shape) == 3: ## 3d case if not isinstance(mask, N.ndarray): mask = N.zeros(data.shape[0], dtype=bool) for i in range(data.shape[0]): ## iterate each plane mean, rms = self.calculate_maps(img, data[i], mean[i], rms[i], mask[i], map_opts, do_adapt=do_adapt, bright_pt_coords=isl_pos, rms_box2=img.rms_box, logname="PyBDSM."+img.log, ncores=img.opts.ncores) else: mylog.critical('Image shape not handleable' + pol_txt) raise RuntimeError("Can't handle array of this shape" + pol_txt) self.output_rmsbox_size(img) if do_adapt: mylogger.userinfo(mylog, 'Number of sources using small scale', str(len(isl_pos))) mylog.info('Background rms and mean images computed' + pol_txt) ## check if variation of rms/mean maps is significant enough: # check_rmsmap() sets img.use_rms_map # check_meanmap() sets img.mean_map_type if pol == 'I': if opts.rms_map is None and img.use_rms_map is None: if do_adapt and len(isl_pos) > 0: # Always use 2d map if there is at least one bright # source and adaptive scaling is desired img.use_rms_map = True else: self.check_rmsmap(img, rms) elif opts.rms_map is not None: img.use_rms_map = opts.rms_map if img.use_rms_map is False: mylogger.userinfo(mylog, 'Using constant background rms') else: mylogger.userinfo(mylog, 'Using 2D map for background rms') if opts.mean_map == 'default' and img.mean_map_type is None: self.check_meanmap(img, rms) elif opts.mean_map != 'default': img.mean_map_type = opts.mean_map if img.mean_map_type != 'map': mylogger.userinfo(mylog, 'Using constant background mean') else: mylogger.userinfo(mylog, 'Using 2D map for background mean') ## if rms map is insignificant, or rms_map==False use const value if img.use_rms_map is False: if opts.rms_value is None: rms[:] = crmss[ipol] else: rms[:] = opts.rms_value mylogger.userinfo(mylog, 'Value of background rms' + pol_txt, '%.2e Jy/beam' % rms[0][0]) else: rms_min = N.nanmin(rms) rms_max = N.nanmax(rms) mylogger.userinfo(mylog, 'Min/max values of background rms map' + pol_txt, '(%.2e, %.2e) Jy/beam' % (rms_min, rms_max)) if img.mean_map_type != 'map': if opts.mean_map == 'zero': val = 0.0 else: val = img.clipped_mean mean[:] = val mylogger.userinfo(mylog, 'Value of background mean' + pol_txt, str(round(val,5))+' Jy/beam') else: mean_min = N.nanmin(mean) mean_max = N.nanmax(mean) mylogger.userinfo(mylog, 'Min/max values of background mean map' + pol_txt, '(%.2e, %.2e) Jy/beam' % (mean_min, mean_max)) if pol == 'I': # Apply mask to mean_map and rms_map by setting masked values to NaN if isinstance(mask, N.ndarray): pix_masked = N.where(mask == True) mean[pix_masked] = N.nan rms[pix_masked] = N.nan img.mean_arr = mean img.rms_arr = rms if opts.savefits_rmsim or opts.output_all: if img.waveletimage: resdir = img.basedir + '/wavelet/background/' else: resdir = img.basedir + '/background/' if not os.path.exists(resdir): os.makedirs(resdir) func.write_image_to_file(img.use_io, img.imagename + '.rmsd_I.fits', rms, img, resdir) mylog.info('%s %s' % ('Writing ', resdir+img.imagename+'.rmsd_I.fits')) if opts.savefits_meanim or opts.output_all: if img.waveletimage: resdir = img.basedir + '/wavelet/background/' else: resdir = img.basedir + '/background/' if not os.path.exists(resdir): os.makedirs(resdir) func.write_image_to_file(img.use_io, img.imagename + '.mean_I.fits', mean, img, resdir) mylog.info('%s %s' % ('Writing ', resdir+img.imagename+'.mean_I.fits')) if opts.savefits_normim or opts.output_all: if img.waveletimage: resdir = img.basedir + '/wavelet/background/' else: resdir = img.basedir + '/background/' if not os.path.exists(resdir): os.makedirs(resdir) zero_pixels = N.where(rms <= 0.0) rms_nonzero = rms.copy() rms_nonzero[zero_pixels] = N.NaN func.write_image_to_file(img.use_io, img.imagename + '.norm_I.fits', (image-mean)/rms_nonzero, img, resdir) mylog.info('%s %s' % ('Writing ', resdir+img.imagename+'.norm_I.fits')) else: img.__setattr__('mean_'+pol+'_arr', mean) img.__setattr__('rms_'+pol+'_arr', rms) img.completed_Ops.append('rmsimage') return img def check_rmsmap(self, img, rms): """Calculates the statistics of the rms map and decides, when rms_map=None, whether to take the map (if variance is significant) or a constant value """ from math import sqrt mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Rmsimage.Checkrms ") cdelt = img.wcs_obj.acdelt[:2] bm = (img.beam[0], img.beam[1]) fw_pix = sqrt(N.product(bm)/abs(N.product(cdelt))) if img.masked: unmasked = N.where(~img.mask_arr) stdsub = N.std(rms[unmasked]) maxrms = N.max(rms[unmasked]) else: stdsub = N.std(rms) maxrms = N.max(rms) rms_expect = img.clipped_rms/sqrt(2)/img.rms_box[0]*fw_pix mylog.debug('%s %10.6f %s' % ('Standard deviation of rms image = ', stdsub*1000.0, 'mJy')) mylog.debug('%s %10.6f %s' % ('Expected standard deviation = ', rms_expect*1000.0, 'mJy')) if stdsub > 1.1*rms_expect: img.use_rms_map = True mylogger.userinfo(mylog, 'Variation in rms image significant') else: img.use_rms_map = False mylogger.userinfo(mylog, 'Variation in rms image not significant') return img def check_meanmap(self, img, mean): """Calculates the statistics of the mean map and decides, when mean_map=None, whether to take the map (if variance is significant) or a constant value """ from math import sqrt mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Rmsimage.Checkmean ") cdelt = img.wcs_obj.acdelt[:2] bm = (img.beam[0], img.beam[1]) fw_pix = sqrt(N.product(bm)/abs(N.product(cdelt))) if img.masked: unmasked = N.where(~img.mask_arr) stdsub = N.std(mean[unmasked]) maxmean = N.max(mean[unmasked]) else: stdsub = N.std(mean) maxmean = N.max(mean) rms_expect = img.clipped_rms/img.rms_box[0]*fw_pix mylog.debug('%s %10.6f %s' % ('Standard deviation of mean image = ', stdsub*1000.0, 'mJy')) mylog.debug('%s %10.6f %s' % ('Expected standard deviation = ', rms_expect*1000.0, 'mJy')) # For mean map, use a higher threshold than for the rms map, as radio images # should rarely, if ever, have significant variations in the mean if stdsub > 5.0*rms_expect: img.mean_map_type = 'map' mylogger.userinfo(mylog, 'Variation in mean image significant') else: if img.confused: img.mean_map_type = 'zero' else: img.mean_map_type = 'const' mylogger.userinfo(mylog, 'Variation in mean image not significant') return img def calculate_maps(self, img, data, mean, rms, mask, map_opts, do_adapt, bright_pt_coords=[], rms_box2=None, logname=None, ncores=None): """Calls map_2d and checks for problems""" mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Rmsimage.Calcmaps ") rms_ok = False mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Rmsimage.Calcmaps ") opts = img.opts kappa = map_opts[0] spline_rank = opts.spline_rank while not rms_ok: self.map_2d(data, mean, rms, mask, *map_opts, do_adapt=do_adapt, bright_pt_coords=bright_pt_coords, rms_box2=rms_box2, logname=logname, ncores=ncores) if img.masked: test = N.any(rms[~img.mask_arr] < 0.0) else: test = N.any(rms < 0.0) if test: rms_ok = False if (opts.rms_box_bright is None and do_adapt) or (opts.rms_box is None and not do_adapt): # Increase box by 20% if do_adapt: new_width = int(img.rms_box_bright[0]*1.2) if new_width == img.rms_box_bright[0]: new_width = img.rms_box_bright[0] + 1 new_step = int(new_width/3.0) img.rms_box_bright = (new_width, new_step) if img.rms_box_bright[0] > min(img.ch0_arr.shape)/4.0: mylogger.userinfo(mylog, 'Size of rms_box_bright larger than 1/4 of image size') mylogger.userinfo(mylog, 'Using constant background rms and mean') img.use_rms_map = False img.rms_box = img.rms_box_bright img.mean_map_type = 'const' rms_ok = True else: map_opts = (kappa, img.rms_box_bright, spline_rank) else: new_width = int(img.rms_box[0]*1.2) if new_width == img.rms_box[0]: new_width = img.rms_box[0] + 1 new_step = int(new_width/3.0) img.rms_box = (new_width, new_step) if img.rms_box[0] > min(img.ch0_arr.shape)/4.0: mylogger.userinfo(mylog, 'Size of rms_box larger than 1/4 of image size') mylogger.userinfo(mylog, 'Using constant background rms and mean') img.use_rms_map = False img.mean_map_type = 'const' rms_ok = True else: map_opts = (kappa, img.rms_box, spline_rank) else: # User has specified box size, use order=1 to prevent negatives if spline_rank > 1: mylog.warning('Negative values found in rms map interpolated with spline_rank = %i' % spline_rank) mylog.warning('Using spline_rank = 1 (bilinear interpolation) instead') spline_rank = 1 if do_adapt: map_opts = (kappa, img.rms_box_bright, spline_rank) else: map_opts = (kappa, img.rms_box, spline_rank) else: raise RuntimeError('RMS map has negative values') else: rms_ok = True return mean, rms def map_2d(self, arr, out_mean, out_rms, mask=False, kappa=3, box=None, interp=1, do_adapt=False, bright_pt_coords=None, rms_box2=None, logname='', ncores=None): """Calculate mean&rms maps and store them into provided arrays Parameters: arr: 2D array with data out_mean, out_rms: 2D arrays where to store calculated maps mask: mask kappa: clipping value for rms/mean calculations box: tuple of (box_size, box_step) for calculating map rms_box2 = large-scale box size interp: order of interpolating spline used to interpolate calculated map do_adapt: use adaptive binning """ mask_small = mask axes, mean_map1, rms_map1 = self.rms_mean_map(arr, mask_small, kappa, box, ncores) ax = [self.remap_axis(ashp, axv) for (ashp, axv) in zip(arr.shape, axes)] ax = N.meshgrid(*ax[-1::-1]) pt_src_scale = box[0] if do_adapt: out_rms2 = N.zeros(rms_map1.shape, dtype=N.float32) out_mean2 = N.zeros(rms_map1.shape, dtype=N.float32) # Generate rms/mean maps on large scale box2 = rms_box2 axes2, mean_map2, rms_map2 = self.rms_mean_map(arr, mask, kappa, box2, ncores) # Interpolate to get maps on small scale grid axes2mod = axes2[:] axes2mod[0] = axes2[0]/arr.shape[0]*mean_map1.shape[0] axes2mod[1] = axes2[1]/arr.shape[1]*mean_map1.shape[1] ax2 = [self.remap_axis(ashp, axv) for (ashp, axv) in zip(out_rms2.shape, axes2mod)] ax2 = N.meshgrid(*ax2[-1::-1]) nd.map_coordinates(rms_map2, ax2[-1::-1], order=interp, output=out_rms2) nd.map_coordinates(mean_map2, ax2[-1::-1], order=interp, output=out_mean2) rms_map = out_rms2 mean_map = out_mean2 # For each bright source, find nearest points and weight them towards # the small scale maps. xscale = float(arr.shape[0])/float(out_rms2.shape[0]) yscale = float(arr.shape[1])/float(out_rms2.shape[1]) scale = [xscale, yscale] size = 15 for bright_pt in bright_pt_coords: bbox, src_center = self.make_bright_src_bbox(bright_pt, scale, size, out_rms2.shape) bbox_xsize = bbox[0].stop-bbox[0].start bbox_ysize = bbox[1].stop-bbox[1].start src_center[0] -= bbox[0].start src_center[1] -= bbox[1].start weights = N.ones((bbox_xsize, bbox_ysize)) # Taper weights to zero where small-scale value is within a factor of # 2 of large-scale value. Use distance to center of the box # to determine taper value. This tapering prevents the use of the # small-scale box beyond the range of artifacts. low_vals_ind = N.where(rms_map1[tuple(bbox)]/out_rms2[tuple(bbox)] < 2.0) if len(low_vals_ind[0]) > 0: dist_to_cen = [] for (x,y) in zip(low_vals_ind[0],low_vals_ind[1]): dist_to_cen.append(N.sqrt( (x-src_center[0])**2 + (y-src_center[1])**2 )) med_dist_to_cen = N.min(dist_to_cen) for x in range(bbox_xsize): for y in range(bbox_ysize): dist_to_cen = N.sqrt( (x-src_center[0])**2 + (y-src_center[1])**2 ) if dist_to_cen >= med_dist_to_cen: weights[x,y] = 1.0 - dist_to_cen/N.sqrt(bbox_xsize**2+bbox_ysize**2)*2.0 rms_map[tuple(bbox)] = rms_map1[tuple(bbox)]*weights + out_rms2[tuple(bbox)]*(1.0-weights) mean_map[tuple(bbox)] = mean_map1[tuple(bbox)]*weights + out_mean2[tuple(bbox)]*(1.0-weights) else: rms_map = rms_map1 mean_map = mean_map1 # Interpolate to image coords mylog = mylogger.logging.getLogger(logname+"Rmsimage") nd.map_coordinates(rms_map, ax[-1::-1], order=interp, output=out_rms) nd.map_coordinates(mean_map, ax[-1::-1], order=interp, output=out_mean) # Apply mask to mean_map and rms_map by setting masked values to NaN if isinstance(mask, N.ndarray): pix_masked = N.where(mask == True) out_mean[pix_masked] = N.nan out_rms[pix_masked] = N.nan def rms_mean_map(self, arr, mask=False, kappa=3, box=None, ncores=None): """Calculate map of the mean/rms values Parameters: arr: 2D array with data mask: mask kappa: clipping for calculating rms/mean within each box box: box parameters (box_size, box_step) Returns: axes: list of 2 arrays with coordinates of boxes alongside each axis mean_map: map of mean values rms_map: map of rms values Description: This function calculates clipped mean and rms maps for the array. The algorithm is a moving-window algorithm, where mean&rms are calculated within a window of a size (box_size * box_size), and the window is stepped withing the image by steps of box_steps. Special care is taken for the borders of the image -- outer borders (where box doesn't fit properly) are given one extra round with a box applied to the border of the image. Additionally outer values are extrapolated to cover whole image size, to simplify further processing. See also routine 'remap_axes' for 'inverting' axes array Example: for an input image of 100x100 pixels calling rms_mean_map with default box parameters (50, 25) will result in the following: axes = [array([ 0. , 24.5, 49.5, 74.5, 99. ]), array([ 0. , 24.5, 49.5, 74.5, 99. ])] mean_map = <5x5 array> rms_map = <5x5 array> rms_map[1,1] is calculated for arr[0:50, 0:50] rms_map[2,1] is calculated for arr[25:75, 0:50] ...etc... rms_map[0,0] is extrapolated as .5*(rms_map[0,1] + rms_map[1,0]) rms_map[0,1] is extrapolated as rms_map[1,1] """ mylog = mylogger.logging.getLogger("PyBDSM.RmsMean") if box is None: box = (50, 25) if box[0] < box[1]: raise RuntimeError('Box size is less than step size.') # Some math first: boxcount is number of boxes alongsize each axis, # bounds is non-zero for axes which have extra pixels beyond last box BS, SS = box imgshape = N.array(arr.shape) # If boxize is less than 10% of image, use simple extrapolation to # derive the edges of the mean and rms maps; otherwise, use padded # versions of arr and mask to derive the mean and rms maps if float(BS)/float(imgshape[0]) < 0.1 and \ float(BS)/float(imgshape[1]) < 0.1: use_extrapolation = True else: use_extrapolation = False if use_extrapolation: boxcount = 1 + (imgshape - BS)/SS bounds = N.asarray((boxcount-1)*SS + BS < imgshape, dtype=int) mapshape = 2 + boxcount + bounds else: boxcount = 1 + imgshape/SS bounds = N.asarray((boxcount-1)*SS < imgshape, dtype=int) mapshape = boxcount + bounds pad_border_size = int(BS/2.0) new_shape = (arr.shape[0] + 2*pad_border_size, arr.shape[1] + 2*pad_border_size) arr_pad = self.pad_array(arr, new_shape) if mask is None: mask_pad = None else: mask_pad = self.pad_array(mask, new_shape) # Make arrays for calculated data mapshape = [int(ms) for ms in mapshape] boxcount = [int(bc) for bc in boxcount] mean_map = N.zeros(mapshape, dtype=N.float32) rms_map = N.zeros(mapshape, dtype=N.float32) axes = [N.zeros(len, dtype=N.float32) for len in mapshape] # Step 1: internal area of the image # Make a list of coordinates to send to process_mean_rms_maps() coord_list = [] ind_list = [] for i in range(boxcount[0]): for j in range(boxcount[1]): if use_extrapolation: coord_list.append((i+1, j+1)) else: coord_list.append((i, j)) ind_list.append([i*SS, i*SS+BS, j*SS, j*SS+BS]) # Now call the parallel mapping function. Returns a list of [mean, rms] # for each coordinate. if use_extrapolation: cm_cr_list = mp.parallel_map(func.eval_func_tuple, zip(itertools.repeat(self.process_mean_rms_maps), ind_list, itertools.repeat(mask), itertools.repeat(arr), itertools.repeat(kappa)), numcores=ncores) else: cm_cr_list = mp.parallel_map(func.eval_func_tuple, zip(itertools.repeat(self.process_mean_rms_maps), ind_list, itertools.repeat(mask_pad), itertools.repeat(arr_pad), itertools.repeat(kappa)), numcores=ncores) for i, co in enumerate(coord_list): cm, cr = cm_cr_list[i] mean_map[co] = cm rms_map[co] = cr # Check if all regions have too few unmasked pixels if mask is not None and N.size(N.where(mean_map != N.inf)) == 0: raise RuntimeError("No unmasked regions from which to determine "\ "mean and rms maps") # Step 2: borders of the image if bounds[0]: coord_list = [] ind_list = [] for j in range(boxcount[1]): if use_extrapolation: coord_list.append((-2, j+1)) ind_list.append([-BS, arr.shape[0], j*SS,j*SS+BS]) else: coord_list.append((-1, j)) ind_list.append([-BS, arr_pad.shape[0], j*SS,j*SS+BS]) if use_extrapolation: cm_cr_list = mp.parallel_map(func.eval_func_tuple, zip(itertools.repeat(self.process_mean_rms_maps), ind_list, itertools.repeat(mask), itertools.repeat(arr), itertools.repeat(kappa)), numcores=ncores) else: cm_cr_list = mp.parallel_map(func.eval_func_tuple, zip(itertools.repeat(self.process_mean_rms_maps), ind_list, itertools.repeat(mask_pad), itertools.repeat(arr_pad), itertools.repeat(kappa)), numcores=ncores) for i, co in enumerate(coord_list): cm, cr = cm_cr_list[i] mean_map[co] = cm rms_map[co] = cr if bounds[1]: coord_list = [] ind_list = [] for i in range(boxcount[0]): if use_extrapolation: coord_list.append((i+1, -2)) ind_list.append([i*SS,i*SS+BS, -BS,arr.shape[1]]) else: coord_list.append((i, -1)) ind_list.append([i*SS,i*SS+BS, -BS,arr_pad.shape[1]]) if use_extrapolation: cm_cr_list = mp.parallel_map(func.eval_func_tuple, zip(itertools.repeat(self.process_mean_rms_maps), ind_list, itertools.repeat(mask), itertools.repeat(arr), itertools.repeat(kappa)), numcores=ncores) else: cm_cr_list = mp.parallel_map(func.eval_func_tuple, zip(itertools.repeat(self.process_mean_rms_maps), ind_list, itertools.repeat(mask_pad), itertools.repeat(arr_pad), itertools.repeat(kappa)), numcores=ncores) for i, co in enumerate(coord_list): cm, cr = cm_cr_list[i] mean_map[co] = cm rms_map[co] = cr if bounds.all(): if use_extrapolation: ind = [-BS,arr.shape[0], -BS,arr.shape[1]] self.for_masked(mean_map, rms_map, mask, arr, ind, kappa, [-2, -2]) else: ind = [-BS,arr_pad.shape[0], -BS,arr_pad.shape[1]] self.for_masked(mean_map, rms_map, mask_pad, arr_pad, ind, kappa, [-1, -1]) # Step 3: correct(extrapolate) borders of the image def correct_borders(map): map[0, :] = map[1, :] map[:, 0] = map[:, 1] map[-1, :] = map[-2, :] map[:, -1] = map[:, -2] map[0,0] = (map[1,0] + map[0, 1])/2. map[-1,0] = (map[-2, 0] + map[-1, 1])/2. map[0, -1] = (map[0, -2] + map[1, -1])/2. map[-1,-1] = (map[-2, -1] + map[-1, -2])/2. if use_extrapolation: correct_borders(mean_map) correct_borders(rms_map) # Step 4: fill in coordinate axes for i in range(2): if use_extrapolation: axes[i][1:boxcount[i]+1] = (N.arange(boxcount[i])*SS + BS/2. - .5) if bounds[i]: axes[i][-2] = imgshape[i] - BS/2. - .5 else: axes[i][0:boxcount[i]] = N.arange(boxcount[i])*SS - .5 if bounds[i]: axes[i][-2] = imgshape[i] - .5 axes[i][-1] = imgshape[i] - 1 # Step 5: fill in boxes with < 5 unmasked pixels (set to values of # N.inf) unmasked_boxes = N.where(mean_map != N.inf) if N.size(unmasked_boxes,1) < mapshape[0]*mapshape[1]: mean_map = self.fill_masked_regions(mean_map) rms_map = self.fill_masked_regions(rms_map) return axes, mean_map, rms_map def process_mean_rms_maps(self, ind, mask, arr, kappa): """Finds mean and rms for one region of an input arr""" cm, cr = self.for_masked_mp(mask, arr, ind, kappa) return cm, cr def fill_masked_regions(self, themap, magic=N.inf): """Fill masked regions (defined where values == magic) in themap. """ masked_boxes = N.where(themap == magic) # locations of masked regions for i in range(N.size(masked_boxes,1)): num_unmasked = 0 x, y = masked_boxes[0][i], masked_boxes[1][i] delx = dely = 1 while num_unmasked == 0: x1 = x - delx if x1 < 0: x1 = 0 x2 = x + 1 + delx if x2 > themap.shape[0]: x2 = themap.shape[0] y1 = y - dely if y1 < 0: y1 = 0 y2 = y + 1 + dely if y2 > themap.shape[1]: y2 = themap.shape[1] cutout = themap[x1:x2, y1:y2].ravel() goodcutout = cutout[cutout != magic] num_unmasked = N.alen(goodcutout) if num_unmasked > 0: themap[x, y] = N.nansum(goodcutout)/float(len(goodcutout)) delx += 1 dely += 1 themap[N.where(N.isnan(themap))] = 0.0 return themap def pad_array(self, arr, new_shape): """Returns a padded array by mirroring around the edges.""" # Assume that padding is the same for both axes and is equal # around all edges. half_size = int((new_shape[0] - arr.shape[0]) / 2) arr_pad = N.zeros( (new_shape), dtype=arr.dtype) # left band band = arr[:half_size, :] arr_pad[:half_size, half_size:-half_size] = N.flipud( band ) # right band band = arr[-half_size:, :] arr_pad[-half_size:, half_size:-half_size] = N.flipud( band ) # bottom band band = arr[:, :half_size] arr_pad[half_size:-half_size, :half_size] = N.fliplr( band ) # top band band = arr[:, -half_size:] arr_pad[half_size:-half_size, -half_size:] = N.fliplr( band ) # central band arr_pad[half_size:-half_size, half_size:-half_size] = arr # bottom left corner band = arr[:half_size,:half_size] arr_pad[:half_size,:half_size] = N.flipud(N.fliplr(band)) # top right corner band = arr[-half_size:,-half_size:] arr_pad[-half_size:,-half_size:] = N.flipud(N.fliplr(band)) # top left corner band = arr[:half_size,-half_size:] arr_pad[:half_size,-half_size:] = N.flipud(N.fliplr(band)) # bottom right corner band = arr[-half_size:,:half_size] arr_pad[-half_size:,:half_size] = N.flipud(N.fliplr(band)) return arr_pad def for_masked(self, mean_map, rms_map, mask, arr, ind, kappa, co): bstat = func.bstat#_cbdsm.bstat a, b, c, d = ind; i, j = co if mask is None: m, r, cm, cr, cnt = bstat(arr[a:b, c:d], mask, kappa) if cnt > 198: cm = m; cr = r mean_map[i, j], rms_map[i, j] = cm, cr else: pix_unmasked = N.where(mask[a:b, c:d] == False) npix_unmasked = N.size(pix_unmasked,1) if npix_unmasked > 20: # find clipped mean/rms m, r, cm, cr, cnt = bstat(arr[a:b, c:d], mask[a:b, c:d], kappa) if cnt > 198: cm = m; cr = r mean_map[i, j], rms_map[i, j] = cm, cr else: if npix_unmasked > 5: # just find simple mean/rms cm = N.mean(arr[pix_unmasked]) cr = N.std(arr[pix_unmasked]) mean_map[i, j], rms_map[i, j] = cm, cr else: # too few unmasked pixels --> set mean/rms to inf mean_map[i, j], rms_map[i, j] = N.inf, N.inf def for_masked_mp(self, mask, arr, ind, kappa): bstat = func.bstat #_cbdsm.bstat a, b, c, d = ind if mask is None: m, r, cm, cr, cnt = bstat(arr[a:b, c:d], mask, kappa) if cnt > 198: cm = m; cr = r else: pix_unmasked = N.where(mask[a:b, c:d] == False) npix_unmasked = N.size(pix_unmasked,1) if npix_unmasked > 20: # find clipped mean/rms m, r, cm, cr, cnt = bstat(arr[a:b, c:d], mask[a:b, c:d], kappa) if cnt > 198: cm = m; cr = r else: if npix_unmasked > 5: # just find simple mean/rms cm = N.mean(arr[pix_unmasked]) cr = N.std(arr[pix_unmasked]) else: # too few unmasked pixels --> set mean/rms to inf cm = N.inf cr = N.inf return cm, cr def remap_axis(self, size, arr): """Invert axis mapping done by rms_mean_map rms_mean_map 'compresses' axes by returning short arrays with coordinades of the boxes. This routine 'inverts' this compression by calculating coordinates of each pixel of the original array within compressed array. Parameters: size: size of the original (and resulting) array arr : 'compressed' axis array from rms_mean_map Example: the following 'compressed' axis (see example in rms_mean_map): ax = array([ 0. , 24.5, 49.5, 74.5, 99. ]) will be remapped as: print remap_axis(100, ax) [ 0. 0.04081633 0.08163265 0.12244898 .... ............................................... 3.91836735 3.95918367 4. ] which means that pixel 0 in the original image corresponds to pixels 0 in the rms/mean_map array (which is 5x5 array). pixel 1 of the original image has coordinate of 0.04081633 in the compressed image (e.g. it has no exact counterpart, and it's value should be obtained by interpolation) """ from math import floor, ceil res = N.zeros(size, dtype=N.float32) for i in range(len(arr) - 1): i1 = arr[i] i2 = arr[i+1] t = N.arange(ceil(i1), floor(i2)+1, dtype=float) res[int(ceil(i1)):int(floor(i2))+1] = i + (t-i1)/(i2-i1) return res def make_bright_src_bbox(self, coord, scale, size, shape): """Returns bbox given coordinates of center and scale""" xindx = int(coord[0]/scale[0]) yindx = int(coord[1]/scale[1]) xlow = xindx - int(size/2.0) if xlow < 0: xlow = 0 xhigh = xindx + int(size/2.0) + 1 if xhigh > shape[0]: xhigh = shape[0] ylow = yindx - int(size/2.0) if ylow < 0: ylow = 0 yhigh = yindx + int(size/2.0) + 1 if yhigh > shape[1]: yhigh = shape[1] src_center = [xindx, yindx] return [slice(xlow, xhigh, None), slice(ylow, yhigh, None)], src_center def output_rmsbox_size(self, img): """Prints rms/mean box size""" opts = img.opts do_adapt = opts.adaptive_rms_box mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"RMSimage") if (opts.rms_map is not False) or (opts.mean_map not in ['zero', 'const']): if do_adapt: if opts.rms_box_bright is None: mylogger.userinfo(mylog, 'Derived rms_box (box size, step size)', '(' + str(img.rms_box_bright[0]) + ', ' + str(img.rms_box_bright[1]) + ') pixels (small scale)') else: mylogger.userinfo(mylog, 'Using user-specified rms_box', '(' + str(img.rms_box_bright[0]) + ', ' + str(img.rms_box_bright[1]) + ') pixels (small scale)') if opts.rms_box is None: mylogger.userinfo(mylog, 'Derived rms_box (box size, step size)', '(' + str(img.rms_box[0]) + ', ' + str(img.rms_box[1]) + ') pixels (large scale)') else: mylogger.userinfo(mylog, 'Using user-specified rms_box', '(' + str(img.rms_box[0]) + ', ' + str(img.rms_box[1]) + ') pixels (large scale)') else: if opts.rms_box is None: mylogger.userinfo(mylog, 'Derived rms_box (box size, step size)', '(' + str(img.rms_box[0]) + ', ' + str(img.rms_box[1]) + ') pixels') else: mylogger.userinfo(mylog, 'Using user-specified rms_box', '(' + str(img.rms_box[0]) + ', ' + str(img.rms_box[1]) + ') pixels') PyBDSF-1.10.1/bdsf/shapefit.py000066400000000000000000000142661420247104600157250ustar00rootroot00000000000000"""Module shapelets This will do all the shapelet analysis of islands in an image """ from __future__ import absolute_import from .image import * from .islands import * from .shapelets import * from . import mylogger from . import statusbar from . import multi_proc as mp import itertools try: from itertools import izip as zip except ImportError: # will be 3.x series pass from . import functions as func from .gausfit import find_bbox class Op_shapelets(Op): """ Get the image and mask from each island and send it to shapelet programs which can then also be called seperately """ def __call__(self, img): mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Shapefit") bar = statusbar.StatusBar('Decomposing islands into shapelets ...... : ', 0, img.nisl) opts = img.opts if img.opts.shapelet_do: if not opts.quiet: bar.start() # Set up multiproccessing. First create a simple copy of the Image # object that contains the minimal data needed. opts_dict = opts.to_dict() img_simple = Image(opts_dict) img_simple.pixel_beamarea = img.pixel_beamarea img_simple.pixel_beam = img.pixel_beam img_simple.thresh_pix = img.thresh_pix img_simple.minpix_isl = img.minpix_isl img_simple.clipped_mean = img.clipped_mean img_simple.shape = img.ch0_arr.shape # Now call the parallel mapping function. Returns a list of # [beta, centre, nmax, basis, cf] for each island shap_list = mp.parallel_map(func.eval_func_tuple, zip(itertools.repeat(self.process_island), img.islands, itertools.repeat(img_simple), itertools.repeat(opts)), numcores=opts.ncores, bar=bar) for id, isl in enumerate(img.islands): beta, centre, nmax, basis, cf = shap_list[id] isl.shapelet_beta=beta isl.shapelet_centre=centre isl.shapelet_posn_sky=img.pix2sky(centre) isl.shapelet_posn_skyE=[0.0, 0.0, 0.0] isl.shapelet_nmax=nmax isl.shapelet_basis=basis isl.shapelet_cf=cf img.completed_Ops.append('shapelets') def process_island(self, isl, img, opts=None): """Processes a single island. Returns shapelet parameters. """ if opts is None: opts = img.opts if opts.shapelet_gresid: shape = img.shape thresh= opts.fittedimage_clip model_gaus = N.zeros(shape, dtype=N.float32) for g in isl.gaul: C1, C2 = g.centre_pix b = find_bbox(thresh*isl.rms, g) bbox = N.s_[max(0, int(C1-b)):min(shape[0], int(C1+b+1)), max(0, int(C2-b)):min(shape[1], int(C2+b+1))] x_ax, y_ax = N.mgrid[bbox] ffimg = func.gaussian_fcn(g, x_ax, y_ax) model_gaus[bbox] = model_gaus[bbox] + ffimg arr = isl.image - isl.islmean - model_gaus[tuple(isl.bbox)] else: arr = isl.image - isl.islmean mask = isl.mask_active basis = opts.shapelet_basis beam_pix = img.pixel_beam() mode = opts.shapelet_fitmode if mode != 'fit': mode = '' fixed = (0,0,0) (beta, centre, nmax) = self.get_shapelet_params(arr, mask, basis, beam_pix, fixed, N.array(isl.origin), mode) cf = decompose_shapelets(arr, mask, basis, beta, centre, nmax, mode) return [beta, tuple(N.array(centre) + N.array(isl.origin)), nmax, basis, cf] def get_shapelet_params(self, image, mask, basis, beam_pix, fixed, ori, mode, beta=None, cen=None, nmax=None): """ This takes as input an image, its mask (false=valid), basis="cartesian"/"polar", fixed=(i,j,k) where i,j,k =0/1 to calculate or take as fixed for (beta, centre, nmax), beam_pix has the beam in (pix_fwhm, pix_fwhm, deg), beta (the scale), cen (centre of basis expansion), nmax (max order). The output is an updated set of values of (beta, centre, nmax). If fixed is 1 and the value is not specified as an argument, then fixed is taken as 0.""" from math import sqrt, log, floor from . import functions as func import numpy as N if fixed[0]==1 and beta is None: fixed[0]=0 if fixed[1]==1 and cen is None: fixed[1]=0 if fixed[2]==1 and nmax is None: fixed[2]=0 if fixed[0]*fixed[1]==0: (m1, m2, m3)=func.moment(image, mask) if fixed[0]==0: try: beta = sqrt(m3[0]*m3[1])*2.0 except ValueError: beta = 0.5 if beta == 0.0: beta = 0.5 if fixed[1]==0: cen=m2 if fixed[2]==0: (n, m)=image.shape nmax=int(round(sqrt(1.0*n*n+m*m)/beam_pix[1]))-1 nmax=min(max(nmax*2+2,10),10) # totally ad hoc npix = N.product(image.shape)-N.sum(mask) if nmax*nmax >= n*m : nmax = int(floor(sqrt(npix-1))) # -1 is for when n*m is a perfect square if mode == 'fit': # make sure npara <= npix nmax_max = int(round(0.5*(-3+sqrt(1+8*npix)))) nmax=min(nmax, nmax_max) betarange=[0.5,sqrt(beta*max(n,m))] # min, max if fixed[1]==0: cen=shape_findcen(image, mask, basis, beta, nmax, beam_pix) # + check_cen_shapelet #print 'First Centre = ',cen,N.array(cen)+ori from time import time t1 = time() if fixed[0]==0: beta, err=shape_varybeta(image, mask, basis, beta, cen, nmax, betarange, plot=False) t2 = time() #print 'TIME ',t2-t1, '\n' #print 'Final Beta = ',beta, err if fixed[1]==0 and fixed[0]==0: cen=shape_findcen(image, mask, basis, beta, nmax, beam_pix) # + check_cen_shapelet #print 'Final Cen = ',N.array(cen)+ori return beta, cen, nmax PyBDSF-1.10.1/bdsf/shapelets.py000066400000000000000000000320731420247104600161060ustar00rootroot00000000000000"""Module shapelets. nmax => J = 0..nmax; hence nmax+1 orders calculated. ordermax = nmax+1; range(ordermax) has all the values of n Order n => J=n, where J=0 is the gaussian. """ from __future__ import print_function from __future__ import absolute_import import numpy as N try: from astropy.io import fits as pyfits except ImportError as err: import pyfits from scipy.optimize import leastsq def decompose_shapelets(image, mask, basis, beta, centre, nmax, mode): """ Decomposes image (with mask) and beta, centre (2-tuple) , nmax into basis shapelets and returns the coefficient matrix cf. Mode is 'fit' or 'integrate' for method finding coeffs. If fit then integrated values are taken as initial guess. """ # bad = False # if (beta < 0 or beta/max(image.shape) > 5 or \ # (max(N.abs(list(centre)))-max(image.shape)/2) > 10*max(image.shape)): bad = True hc = shapelet_coeff(nmax, basis) ordermax=nmax+1 Bset=N.zeros((ordermax, ordermax, image.shape[0], image.shape[1]), dtype=N.float32) cf = N.zeros((ordermax,ordermax)) # coefficient matrix, will fill up only lower triangular part. index = [(i,j) for i in range(ordermax) for j in range(ordermax-i)] # i=0->nmax, j=0-nmax-i for coord in index: B = shapelet_image(basis, beta, centre, hc, coord[0], coord[1], image.shape) if mode == 'fit': Bset[coord[0] , coord[1], ::] = B m = N.copy(mask) for i, v in N.ndenumerate(mask): m[i] = not v cf[coord] = N.sum(image*B*m) if mode == 'fit': npix = N.product(image.shape)-N.sum(mask) npara = (nmax+1)*(nmax+2)*0.5 cfnew = fit_shapeletbasis(image, mask, cf, Bset) recon1 = reconstruct_shapelets(image.shape, mask, basis, beta, centre, nmax, cf) recon2 = reconstruct_shapelets(image.shape, mask, basis, beta, centre, nmax, cfnew) if N.std(recon2) < 1.2*N.std(recon1): cf = cfnew return cf def fit_shapeletbasis(image, mask, cf0, Bset): """ Fits the image to the shapelet basis functions to estimate shapelet coefficients instead of integrating it out. This should avoid the problems of digitisation and hence non-orthonormality. """ from . import functions as func ma = N.where(~mask.flatten()) cfshape = cf0.shape res=lambda p, image, Bset, cfshape, mask_flat : (image.flatten()-func.shapeletfit(p, Bset, cfshape))[ma] if len(ma) <= 5: # Not enough degrees of freedom cf = cf0 else: (cf, flag)=leastsq(res, cf0.flatten(), args=(image, Bset, cfshape, ma)) cf = cf.reshape(cfshape) return cf def reconstruct_shapelets(size, mask, basis, beta, centre, nmax, cf): """ Reconstructs a shapelet image of size, for pixels which are unmasked, for a given beta, centre, nmax, basis and the shapelet coefficient matrix cf. """ rimage = N.zeros(size, dtype=N.float32) hc = [] hc = shapelet_coeff(nmax, basis) index = [(i,j) for i in range(nmax) for j in range(nmax-i)] for coord in index: B = shapelet_image(basis, beta, centre, hc, coord[0], coord[1], size) rimage += B*cf[coord] return rimage def shapelet_image(basis, beta, centre, hc, nx, ny, size): """ Takes basis, beta, centre (2-tuple), hc matrix, x, y, size and returns the image of the shapelet of order nx,ny on an image of size size. Does what getcartim.f does in fBDSM. nx,ny -> 0-nmax Centre is by Python convention, for retards who count from zero. """ from math import sqrt,pi try: from scipy import factorial except ImportError: try: from scipy.misc.common import factorial except ImportError: try: from scipy.misc import factorial except ImportError: from scipy.special import factorial hcx = hc[nx,:] hcy = hc[ny,:] ind = N.array([nx,ny]) fact = factorial(ind) dumr1 = N.sqrt((2.0**(ind))*sqrt(pi)*fact) x = (N.arange(size[0],dtype=float)-centre[0])/beta y = (N.arange(size[1],dtype=float)-centre[1])/beta dumr3 = N.zeros(size[0]) for i in range(size[0]): for j in range(ind[0]+1): dumr3[i] += hcx[j]*(x[i]**j) B_nx = N.exp(-0.50*x*x)*dumr3/dumr1[0]/sqrt(beta) dumr3 = N.zeros(size[1]) for i in range(size[1]): for j in range(ind[1]+1): dumr3[i] += hcy[j]*(y[i]**j) B_ny = N.exp(-0.50*y*y)*dumr3/dumr1[1]/sqrt(beta) return N.outer(B_nx,B_ny) def shape_findcen(image, mask, basis, beta, nmax, beam_pix): # + check_cen_shapelet """ Finds the optimal centre for shapelet decomposition. Minimising various combinations of c12 and c21, as in literature doesnt work for all cases. Hence, for the c1 image, we find the zero crossing for every vertical line and for the c2 image, the zero crossing for every horizontal line, and then we find intersection point of these two. This seems to work even for highly non-gaussian cases. """ from . import functions as func import sys hc = [] hc = shapelet_coeff(nmax, basis) msk=N.zeros(mask.shape, dtype=bool) for i, v in N.ndenumerate(mask): msk[i] = not v n,m = image.shape cf12 = N.zeros(image.shape, dtype=N.float32) cf21 = N.zeros(image.shape, dtype=N.float32) index = [(i,j) for i in range(n) for j in range(m)] for coord in index: if msk[coord]: B12 = shapelet_image(basis, beta, coord, hc, 0, 1, image.shape) cf12[coord] = N.sum(image*B12*msk) if coord==(27,51): dumpy = B12 B21 = shapelet_image(basis, beta, coord, hc, 1, 0, image.shape) cf21[coord] = N.sum(image*B21*msk) else: cf12[coord] = None cf21[coord] = None (xmax,ymax) = N.unravel_index(image.argmax(),image.shape) # FIX with mask if xmax in [1,n] or ymax in [1,m]: (m1, m2, m3) = func.moment(mask) xmax,ymax = N.round(m2) # in high snr area, get zero crossings for each horizontal and vertical line for c1, c2 resp tr_mask=mask.transpose() tr_cf21=cf21.transpose() try: (x1,y1) = getzeroes_matrix(mask, cf12, ymax, xmax) # y1 is array of zero crossings (y2,x2) = getzeroes_matrix(tr_mask, tr_cf21, xmax, ymax) # x2 is array of zero crossings # find nominal intersection pt as integers xind=N.where(x1==xmax) yind=N.where(y2==ymax) xind=xind[0][0] yind=yind[0][0] # now take 2 before and 2 after, fit straight lines, get proper intersection ninter=5 if xind<3 or yind<3 or xind>n-2 or yind>m-2: ninter = 3 xft1 = x1[xind-(ninter-1)/2:xind+(ninter-1)/2+1] yft1 = y1[xind-(ninter-1)/2:xind+(ninter-1)/2+1] xft2 = x2[yind-(ninter-1)/2:yind+(ninter-1)/2+1] yft2 = y2[yind-(ninter-1)/2:yind+(ninter-1)/2+1] sig = N.ones(ninter, dtype=float) smask1=N.array([r == 0 for r in yft1]) smask2=N.array([r == 0 for r in xft2]) cen=[0.]*2 if sum(smask1) 0: #print 'Error '+str(error)+' in finding centre, will take 1st moment instead.' (m1, m2, m3) = func.moment(image, mask) cen = m2 return cen def getzeroes_matrix(mask, cf, cen, cenx): """ For a matrix cf, and a mask, this returns two vectors; x is the x-coordinate and y is the interpolated y-coordinate where the matrix cf croses zero. If there is no zero-crossing, y is zero for that column x. """ x = N.arange(cf.shape[0], dtype=N.float32) y = N.zeros(cf.shape[0], dtype=N.float32) # import pylab as pl # pl.clf() # pl.imshow(cf, interpolation='nearest') # ii = N.random.randint(100); pl.title(' zeroes' + str(ii)) # print 'ZZ ',cen, cenx, ii for i in range(cf.shape[0]): l = [mask[i,j] for j in range(cf.shape[1])] npts = len(l)-sum(l) #print 'npts = ',npts if npts > 3 and not N.isnan(cf[i,cen]): mrow=mask[i,:] if sum(l) == 0: low=0 up=cf.shape[1]-1 else: low = mrow.nonzero()[0][mrow.nonzero()[0].searchsorted(cen)-1] #print 'mrow = ',i, mrow, low, try: up = mrow.nonzero()[0][mrow.nonzero()[0].searchsorted(cen)] #print 'up1= ', up except IndexError: if [mrow.nonzero()[0].searchsorted(cen)][0]==len(mrow.nonzero()): up = len(mrow) #print 'up2= ', up, else: raise #print low += 1; up -= 1 npoint = up-low+1 xfn = N.arange(npoint)+low yfn = cf[i,xfn] root, error = shapelet_getroot(xfn, yfn, x[i], cenx, cen) if error != 1: y[i] = root else: y[i] = 0.0 else: y[i] = 0.0 return x,y def shapelet_getroot(xfn, yfn, xco, xcen, ycen): """ This finds the root for finding the shapelet centre. If there are multiple roots, takes that which closest to the 'centre', taken as the intensity barycentre. This is the python version of getroot.f of anaamika.""" from . import functions as func root=None npoint=len(xfn) error=0 if npoint == 0: error = 1 elif yfn.max()*yfn.min() >= 0.: error=1 minint=0; minintold=0 for i in range(1,npoint): if yfn[i-1]*yfn[i] < 0.: if minintold == 0: # so take nearest to centre if abs(yfn[i-1]) < abs(yfn[i]): minint=i-1 else: minint=i else: dnew=func.dist_2pt([xco,xfn[i]], [xcen,ycen]) dold=func.dist_2pt([xco,xfn[minintold]], [xcen,ycen]) if dnew <= dold: minint=i else: minint=minintold minintold=minint if minint < 1 or minint > npoint: error=1 if error != 1: low=minint-min(2,minint)#-1) up=minint+min(2,npoint-1-minint) # python array indexing rubbish nfit=up-low+1 xfit=xfn[low:low+nfit] yfit=yfn[low:low+nfit] sig=N.ones(nfit) smask=N.zeros(nfit, dtype=bool) xx=[i for i in range(low,low+nfit)] [c, m], errors = func.fit_mask_1d(xfit, yfit, sig, smask, func.poly, do_err=False, order=1) root=-c/m if root < xfn[low] or root > xfn[up]: error=1 return root, error def shapelet_check_centre(image, mask, cen, beam_pix): "Checks if the calculated centre for shapelet decomposition is sensible. """ from math import pi error = 0 n, m = image.shape x, y = round(cen[0]), round(cen[1]) if x <= 0 or x >= n or y <= 0 or y >= m: error = 1 if error == 0: if not mask[int(round(x)),int(round(y))]: error == 2 if error > 0: if (N.product(mask.shape)-sum(sum(mask)))/(pi*0.25*beam_pix[0]*beam_pix[1]) < 2.5: error = error*10 # expected to fail since source is too small return error def shape_varybeta(image, mask, basis, betainit, cen, nmax, betarange, plot): """ Shapelet decomposes and then reconstructs an image with various values of beta and looks at the residual rms vs beta to estimate the optimal value of beta. """ from . import _cbdsm nbin = 30 delta = (2.0*betainit-betainit/2.0)/nbin beta_arr = betainit/4.0+N.arange(nbin)*delta beta_arr = N.arange(0.5, 6.05, 0.05) nbin = len(beta_arr) res_rms=N.zeros(nbin) for i in range(len(beta_arr)): cf = decompose_shapelets(image, mask, basis, beta_arr[i], cen, nmax, mode='') im_r = reconstruct_shapelets(image.shape, mask, basis, beta_arr[i], cen, nmax, cf) im_res = image - im_r ind = N.where(~mask) res_rms[i] = N.std(im_res[ind]) minind = N.argmin(res_rms) if minind > 1 and minind < nbin: beta = beta_arr[minind] error = 0 else: beta = betainit error = 1 # if plot: # pl.figure() # pl.plot(beta_arr,res_rms,'*-') # pl.xlabel('Beta') # pl.ylabel('Residual rms') return beta, error def shapelet_coeff(nmax=20,basis='cartesian'): """ Computes shapelet coefficient matrix for cartesian and polar hc=shapelet_coeff(nmax=10, basis='cartesian') or hc=shapelet_coeff(10) or hc=shapelet_coeff(). hc(nmax) will be a nmax+1 X nmax+1 matrix.""" import numpy as N order=nmax+1 if basis == 'polar': raise NotImplementedError("Polar shapelets not yet implemented.") hc=N.zeros([order,order]) hnm1=N.zeros(order); hn=N.zeros(order) hnm1[0]=1.0; hn[0]=0.0; hn[1]=2.0 hc[0]=hnm1 hc[1]=hn for ind in range(3,order+1): n=ind-2 hnp1=-2.0*n*hnm1 hnp1[1:] += 2.0*hn[:order-1] hc[ind-1]=hnp1 hnm1=hn hn=hnp1 return hc PyBDSF-1.10.1/bdsf/sourcecounts.py000066400000000000000000000304531420247104600166520ustar00rootroot00000000000000"""Sourcecounts s is flux in Jy and n is number > s per str """ import numpy as N s=N.array([ 9.9999997e-05, 0.00010328281, 0.00010667340, 0.00011017529, 0.00011379215, 0.00011752774, 0.00012138595, \ 0.00012537083, 0.00012948645, 0.00013373725, 0.00013812761, 0.00014266209, 0.00014734542, 0.00015218249, 0.00015717837, \ 0.00016233824, 0.00016766752, 0.00017317173, 0.00017885664, 0.00018472817, 0.00019079246, 0.00019705582, 0.00020352470, \ 0.00021020604, 0.00021710672, 0.00022423393, 0.00023159511, 0.00023919797, 0.00024705040, 0.00025516062, 0.00026353705, \ 0.00027218851, 0.00028112394, 0.00029035273, 0.00029988447, 0.00030972913, 0.00031989696, 0.00033039862, 0.00034124497, \ 0.00035244724, 0.00036401744, 0.00037596744, 0.00038830977, 0.00040105727, 0.00041422324, 0.00042782145, 0.00044186602, \ 0.00045637166, 0.00047135353, 0.00048682719, 0.00050280854, 0.00051931484, 0.00053636299, 0.00055397081, 0.00057215663, \ 0.00059093948, 0.00061033899, 0.00063037529, 0.00065106933, 0.00067244272, 0.00069451780, 0.00071731757, 0.00074086577, \ 0.00076518703, 0.00079030672, 0.00081625103, 0.00084304705, 0.00087072275, 0.00089930650, 0.00092882907, 0.00095932081, \ 0.00099081360, 0.0010233402, 0.0010569346, 0.0010916317, 0.0011274681, 0.0011644807, 0.0012027085, 0.0012421905, \ 0.0012829694, 0.0013250869, 0.0013685870, 0.0014135153, 0.0014599183, 0.0015078448, 0.0015573446, 0.0016084694, \ 0.0016612725, 0.0017158090, 0.0017721358, 0.0018303118, 0.0018903976, 0.0019524558, 0.0020165513, 0.0020827511, \ 0.0021511239, 0.0022217415, 0.0022946771, 0.0023700071, 0.0024478103, 0.0025281659, 0.0026111610, 0.0026968806, \ 0.0027854142, 0.0028768543, 0.0029712960, 0.0030688383, 0.0031695808, 0.0032736324, 0.0033810998, 0.0034920950, \ 0.0036067341, 0.0037251366, 0.0038474260, 0.0039737299, 0.0041041803, 0.0042389128, 0.0043780687, 0.0045217923, \ 0.0046702349, 0.0048235501, 0.0049818982, 0.0051454445, 0.0053143604, 0.0054888208, 0.0056690089, 0.0058551119, \ 0.0060473247, 0.0062458473, 0.0064508831, 0.0066626542, 0.0068813767, 0.0071072797, 0.0073405989, 0.0075815772, \ 0.0078304661, 0.0080875214, 0.0083530201, 0.0086272340, 0.0089104511, 0.0092029646, 0.0095050810, 0.0098171150, \ 0.010139393, 0.010472251, 0.010816036, 0.011171106, 0.011537833, 0.011916599, 0.012307799, 0.012711842, 0.013129148, \ 0.013560154, 0.014005309, 0.014465077, 0.014939931, 0.015430382, 0.015936933, 0.016460113, 0.017000468, 0.017558562, \ 0.018134978, 0.018730316, 0.019345198, 0.019980265, 0.020636180, 0.021313628, 0.022013316, 0.022735972, 0.023482339, \ 0.024253221, 0.025049411, 0.025871737, 0.026721058, 0.027598262, 0.028504262, 0.029440004, 0.030406466, 0.031404655, \ 0.032435611, 0.033500414, 0.034600168, 0.035736032, 0.036909178, 0.038120817, 0.039372254, 0.040664773, 0.041999724, \ 0.043378498, 0.044802535, 0.046273317, 0.047792386, 0.049361322, 0.050981764, 0.052655403, 0.054383982, 0.056169309, \ 0.058013245, 0.059917714, 0.061884668, 0.063916229, 0.066014484, 0.068181612, 0.070419893, 0.072731644, 0.075119294, \ 0.077585325, 0.080132306, 0.082762904, 0.085479856, 0.088286005, 0.091184273, 0.094177686, 0.097269312, 0.10046248, \ 0.10376048, 0.10716674, 0.11068483, 0.11431842, 0.11807128, 0.12194734, 0.12595065, 0.13008538, 0.13435584, 0.13876650, \ 0.14332195, 0.14802694, 0.15288639, 0.15790530, 0.16308904, 0.16844295, 0.17397262, 0.17968382, 0.18558250, 0.19167484, \ 0.19796717, 0.20446607, 0.21117832, 0.21811092, 0.22527111, 0.23266634, 0.24030435, 0.24819310, 0.25634068, 0.26475587, \ 0.27344733, 0.28242409, 0.29169556, 0.30127138, 0.31116158, 0.32137644, 0.33192664, 0.34282318, 0.35407743, 0.36570114, \ 0.37770644, 0.39010584, 0.40291208, 0.41613895, 0.42980003, 0.44390959, 0.45848233, 0.47353345, 0.48907870, 0.50513422, \ 0.52171689, 0.53884387, 0.55653316, 0.57480311, 0.59367281, 0.61316204, 0.63329101, 0.65408045, 0.67555267, 0.69772983, \ 0.72063506, 0.74429214, 0.76872587, 0.79396176, 0.82002604, 0.84694600, 0.87474972, 0.90346611, 0.93312526, 0.96375805, \ 0.99539644, 1.0280730, 1.0618227, 1.0966804, 1.1326823, 1.1698662, 1.2082708, 1.2479361, 1.2889036, 1.3312160, 1.3749173, \ 1.4200534, 1.4666711, 1.5148191, 1.5645479, 1.6159091, 1.6689565, 1.7237452, 1.7803327, 1.8387777, 1.8991414, 1.9614867, \ 2.0258787, 2.0923846, 2.1610713, 2.2320154, 2.3052883, 2.3809667, 2.4591296, 2.5398583, 2.6232371, 2.7093532, 2.7982962, \ 2.8901591, 2.9850378, 3.0830312, 3.1842413, 3.2887743, 3.3967385, 3.5082474, 3.6234167, 3.7423668, 3.8652217, 3.9921098, \ 4.1231637, 4.2585196, 4.3983188, 4.5427074, 4.6918364, 4.8458605, 5.0049415, 5.1692443, 5.3389411, 5.5142026, 5.6952238, \ 5.8821878, 6.0752892, 6.2747297, 6.4807177, 6.6934676, 6.9132018, 7.1401496, 7.3745475, 7.6166406, 7.8666806, 8.1249294, \ 8.3916559, 8.6671391, 8.9516649, 9.2455320, 9.5490456, 9.8625231, 10.186292, 10.520689, 10.866064, 11.222776, 11.591200, \ 11.971718, 12.364727, 12.770638, 13.189876, 13.622874, 14.070073, 14.531968, 15.009026, 15.501744, 16.010639, 16.536238, \ 17.079092, 17.639769, 18.218849, 18.816940, 19.434666, 20.072670, 20.731619, 21.412201, 22.115124, 22.841122, 23.590954, \ 24.365402, 25.165274, 25.991404, 26.844654, 27.725914, 28.636105, 29.576176, 30.547108, 31.549913, 32.585640, 33.655365, \ 34.760208, 35.901321, 37.079857, 38.297119, 39.554344, 40.852840, 42.193966, 43.579117, 45.009739, 46.487324, 48.013420, \ 49.589611, 51.217548, 52.898926, 54.635498, 56.429081, 58.281548, 60.194820, 62.170906, 64.211861, 66.319824, 68.496979, \ 70.745613, 73.068062, 75.466751, 77.944183, 80.502945, 83.145714, 85.875237, 88.694359, 91.606033, 94.613190, 97.719162, \ 100.92711, 104.24036, 107.66238, 111.19673, 114.84712, 118.61734, 122.51133, 126.53315, 130.68700, 134.97722, 139.40826, \ 143.98479, 148.71155, 153.59348, 158.63567, 163.84338, 169.22206, 174.77731, 180.51492, 186.44090, 192.56142, 198.88284, \ 205.41180, 212.15511, 219.11977, 226.31306, 233.74251, 241.41557, 249.34081, 257.52621, 265.98032, 274.71198, 283.73026, \ 293.04462, 302.66473, 312.60065, 322.86276, 333.46173, 344.40869, 355.71500, 367.39246, 379.45328, 391.91003, 404.77573, \ 418.06375, 431.78802, 445.96283, 460.60297, 475.72372, 491.34085, 507.47067, 524.13000, 541.33624, 559.10730, 577.46179, \ 596.41876, 615.99811, 636.21954, 657.10541, 678.67700, 700.95673, 723.96783, 747.73438, 772.28113, 797.63373, 823.81854, \ 850.86298, 878.79529, 907.64453, 937.44080, 968.21527, 1000.0000]) n=N.array([ 3.7709775e+10, 3.6065767e+10, 3.4493432e+10, 3.2989649e+10, 3.1551425e+10, 3.0175900e+10, \ 2.8860342e+10, 2.7602137e+10, \ 2.6398808e+10, 2.5247922e+10, 2.4147204e+10, 2.3094475e+10, 2.2087643e+10, 2.1124704e+10, 2.0203747e+10, 1.9322939e+10, \ 1.8480527e+10, 1.7674846e+10, 1.6904289e+10, 1.6167328e+10, 1.5462490e+10, 1.4788384e+10, 1.4143675e+10, 1.3527065e+10, \ 1.2937335e+10, 1.2373316e+10, 1.1833886e+10, 1.1317971e+10, 1.0824550e+10, 1.0352640e+10, 9.9013028e+09, 9.4696428e+09, \ 9.0568028e+09, 8.6619587e+09, 8.2843305e+09, 7.9231647e+09, 7.5777439e+09, 7.2473825e+09, 6.9314243e+09, 6.6292444e+09, \ 6.3402342e+09, 6.0638244e+09, 5.7994639e+09, 5.5466291e+09, 5.3048166e+09, 5.0735457e+09, 4.8523587e+09, 4.6408141e+09, \ 4.4384916e+09, 4.2449897e+09, 4.0599278e+09, 3.8829297e+09, 3.7136481e+09, 3.5517468e+09, 3.3969042e+09, 3.2488120e+09, \ 3.1071754e+09, 2.9717143e+09, 2.8421588e+09, 2.7182515e+09, 2.5997458e+09, 2.4864064e+09, 2.3780086e+09, 2.2743360e+09, \ 2.1751834e+09, 2.0803535e+09, 1.9896579e+09, 1.9029162e+09, 1.8199575e+09, 1.7406141e+09, 1.6647299e+09, 1.5921536e+09, \ 1.5227420e+09, 1.4563558e+09, 1.3928644e+09, 1.3321405e+09, 1.2740643e+09, 1.2185199e+09, 1.1653979e+09, 1.1145907e+09, \ 1.0659987e+09, 1.0195252e+09, 9.7507763e+08, 9.3256806e+08, 8.9191149e+08, 8.5302746e+08, 8.1583853e+08, 7.8027117e+08, \ 7.4625421e+08, 7.1372032e+08, 6.8260474e+08, 6.5284576e+08, 6.2438406e+08, 5.9716326e+08, 5.7112922e+08, 5.4623008e+08, \ 5.2241651e+08, 4.9964106e+08, 4.7785866e+08, 4.5702573e+08, 4.3710147e+08, 4.1804544e+08, 3.9982026e+08, 3.8238954e+08, \ 3.6571878e+08, 3.4977482e+08, 3.3452595e+08, 3.1994208e+08, 3.0599382e+08, 2.9265363e+08, 2.7989501e+08, 2.6769266e+08, \ 2.5602224e+08, 2.4486062e+08, 2.3418562e+08, 2.2397598e+08, 2.1421147e+08, 2.0487264e+08, 1.9594099e+08, 1.8739867e+08, \ 1.7922877e+08, 1.7141509e+08, 1.6394203e+08, 1.5679477e+08, 1.4995909e+08, 1.4342146e+08, 1.3716880e+08, 1.3118874e+08, \ 1.2546940e+08, 1.1999951e+08, 1.1476796e+08, 1.0976452e+08, 1.0497919e+08, 1.0040248e+08, 96025304., 91838968., \ 87835200., 84005912., 80343576., 76840880., 73490912., 70286984., 67222736., 64292076., 61489172., 58808476., \ 56244648., 53792588., 51447432., 49204512., 47059380., 45007768., 43045600., 41168972., 39374160., 37657620., \ 36015888., 34445724., 32944024., 31507790., 30134168., 28820430., 27563966., 26362278., 25212982., 24113790., \ 23062518., 22057078., 21095472., 20175804., 19296216., 18454972., 17650402., 16880912., 16144966., 15441105., \ 14767931., 14124105., 13508346., 12919433., 12356192., 11817510., 11302309., 10809571., 10338324., 9887611.0, \ 9456547.0, 9044277.0, 8649980.0, 8272873.0, 7912207.0, 7567264.5, 7237360.0, 6921837.5, 6620071.0, 6331461.0, \ 6055433.0, 5791438.5, 5538953.0, 5297479.5, 5066528.5, 4845647.0, 4634395.5, 4432353.0, 4239119.0, 4054309.2, \ 3877556.2, 3708509.5, 3546832.0, 3392203.5, 3244316.0, 3102876.0, 2967602.0, 2838228.0, 2729847.5, 2624870.5, \ 2524750.2, 2429229.0, 2338061.0, 2251017.0, 2167880.5, 2088448.4, 2012529.5, 1939942.6, 1870518.1, 1804095.8, \ 1740523.8, 1679660.2, 1621370.6, 1565526.9, 1512157.9, 1460823.1, 1411600.0, 1364385.6, 1319083.4, 1275602.0, \ 1233855.0, 1193760.2, 1155241.0, 1118223.9, 1082639.1, 1048421.7, 1015509.1, 983842.56, 953365.38, 924024.94, \ 895770.81, 868555.00, 842332.44, 817144.38, 792764.06, 769256.56, 746584.44, 724711.62, 703604.50, 683230.62, \ 663559.44, 644562.06, 626210.06, 608477.38, 591338.81, 574770.50, 558749.50, 543254.06, 528263.38, 513757.69, \ 499717.94, 486126.28, 473019.56, 460262.88, 447906.47, 435935.03, 424334.22, 413089.53, 402187.88, 391616.53, \ 381363.44, 371416.84, 361765.66, 352399.28, 343307.47, 334480.50, 325909.12, 317584.28, 309497.50, 301640.47, \ 294005.56, 286584.88, 279402.72, 272383.66, 265559.03, 258922.31, 252467.16, 246187.56, 240077.75, 234132.17, \ 228345.47, 222712.61, 217228.62, 211888.83, 206688.67, 201623.84, 196690.11, 191883.45, 187200.03, 182636.05, \ 178187.92, 173852.23, 169645.80, 165521.64, 161500.73, 157580.05, 153756.70, 150027.80, 146390.59, 142842.50, \ 139380.91, 136003.44, 132707.70, 129491.38, 126352.36, 123288.48, 120297.67, 117378.02, 114527.58, 111744.49, \ 109027.01, 106373.41, 103781.99, 101262.79, 98789.008, 96373.047, 94013.438, 91708.680, 89457.398, 87258.211, \ 85109.805, 83010.930, 80960.391, 78956.891, 76999.320, 75086.586, 73217.594, 71391.312, 69606.703, 67862.789, \ 66158.609, 64493.254, 62865.801, 61275.387, 59728.344, 58208.258, 56722.930, 55271.520, 53853.266, 52467.410, \ 51113.223, 49789.961, 48496.941, 47233.500, 45998.977, 44792.723, 43614.117, 42462.578, 41337.504, 40238.328, \ 39164.488, 38115.469, 37090.699, 36089.668, 35111.887, 34156.848, 33228.004, 32316.406, 31426.256, 30557.111, \ 29708.504, 28880.010, 28071.193, 27281.650, 26510.949, 25758.721, 25024.562, 24308.115, 23608.990, 22926.832, \ 22261.293, 21612.029, 20978.699, 20360.971, 19758.527, 19171.037, 18598.217, 18039.732, 17495.309, 16966.436, \ 16448.930, 15944.685, 15453.382, 14974.762, 14508.550, 14054.481, 13612.296, 13181.744, 12762.577, 12354.543, \ 11957.408, 11570.935, 11194.892, 10829.060, 10473.206, 10127.119, 9790.5850, 9463.3916, 9145.3301, 8836.2021, \ 8535.8027, 8243.9434, 7961.2437, 7685.7393, 7418.2314, 7158.5264, 6906.4458, 6661.8105, 6424.4482, 6194.1807, \ 5970.8477, 5754.2710, 5544.2944, 5340.7573, 5143.5054, 4952.3828, 4767.2373, 4587.9229, 4414.2944, 4246.2085, \ 4083.5212, 3926.0977, 3773.8032, 3626.5049, 3484.0715, 3346.3752, 3213.5771, 3084.9297, 2960.6602, 2840.6472, \ 2724.7744, 2612.9258, 2504.9900, 2400.8569, 2300.4167, 2203.5654, 2110.1995, 2020.2166, 1933.5188, 1850.0120, \ 1769.5944, 1692.1769, 1617.6688, 1545.9810, 1477.0260, 1410.7202, 1346.9801, 1285.7245, 1226.8739, 1170.3518, \ 1116.1688, 1064.0614, 1014.0633, 966.10516, 920.11682, 876.03217, 833.78497, 793.31201, 754.55164, 717.44275, \ 681.92755, 647.94806, 615.44952, 584.37762, 554.67981, 526.30505, 499.20432, 473.32895, 448.63220, 425.07007, \ 402.59656, 381.16980, 360.74893, 341.31854, 322.78470, 305.14084, 288.35059, 272.37881, 257.19098, 242.75432, \ 229.03673, 216.00752, 203.63695, 191.89633]) s=s/1000.0 PyBDSF-1.10.1/bdsf/spectralindex.py000066400000000000000000000715341420247104600167700ustar00rootroot00000000000000"""Module Spectral index. This module calculates spectral indices for Gaussians and sources for a multichannel cube. """ from __future__ import print_function from __future__ import absolute_import import numpy as N from .image import * from . import mylogger from copy import deepcopy as cp from . import _cbdsm from . import collapse import sys from . import functions as func import time from . import statusbar class Op_spectralindex(Op): """Computes spectral index of every gaussian and every source. First do a quick fit to all channels to determine whether averaging over frequency is needed to obtain desired SNR (set by img.opts.specind_snr). This averaging should be done separately for both Gaussians and sources. For S and C sources, averaging only needs to be done once (as the sources have only one Gaussian). For M sources, averaging is needed twice: once to obtain the desired SNR for the faintest Gaussian in the source, and once to obtain the desired SNR for the source as a whole. If averaging is needed for a given source, don't let the number of resulting channels fall below 2. If it is not possible to obtain the desired SNR in 2 or more channels, set spec_indx of Gaussian/source to NaN. """ def __call__(self, img): global bar1 mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"SpectIndex") img.mylog = mylog if img.opts.spectralindex_do: mylogger.userinfo(mylog, '\nExtracting spectral indices for all ch0 sources') shp = img.image_arr.shape if shp[1] > 1: # calc freq, beam_spectrum for nchan channels self.freq_beamsp_unav(img) sbeam = img.beam_spectrum freqin = img.freq # calc initial channel flags if needed iniflags = self.iniflag(img) img.specind_iniflags = iniflags good_chans = N.where(iniflags == False) unav_image = img.image_arr[0][good_chans] unav_freqs = freqin[good_chans] nmax_to_avg = img.opts.specind_maxchan nchan = unav_image.shape[0] mylog.info('After initial flagging of channels by rms, %i good channels remain' % (nchan,)) if nmax_to_avg == 0: nmax_to_avg = nchan # calculate the rms map of each unflagged channel bar1 = statusbar.StatusBar('Determing rms for channels in image ..... : ', 0, nchan) if img.opts.quiet == False: bar1.start() rms_spec = self.rms_spectrum(img, unav_image) # bar1 updated here bar2 = statusbar.StatusBar('Calculating spectral indices for sources : ', 0, img.nsrc) c_wts = img.opts.collapse_wt snr_desired = img.opts.specind_snr if img.opts.quiet == False and img.opts.verbose_fitting == False: bar2.start() for src in img.sources: isl = img.islands[src.island_id] isl_bbox = isl.bbox # Fit each channel with ch0 Gaussian(s) of the source, # allowing only the normalization to vary. chan_images = unav_image[:, isl_bbox[0], isl_bbox[1]] chan_rms = rms_spec[:, isl_bbox[0], isl_bbox[1]] beamlist = img.beam_spectrum unavg_total_flux, e_unavg_total_flux = self.fit_channels(img, chan_images, chan_rms, src, beamlist) # Check for upper limits and mask. gaus_mask is array of (N_channels x N_gaussians) # and is True if measured flux is upper limit. n_good_chan_per_gaus is array of N_gaussians # that gives number of unmasked channels for each Gaussian. gaus_mask, n_good_chan_per_gaus = self.mask_upper_limits(unavg_total_flux, e_unavg_total_flux, snr_desired) # Average if needed and fit again # First find flux of faintest Gaussian of source and use it to estimate rms_desired gflux = [] for g in src.gaussians: gflux.append(g.peak_flux) rms_desired = min(gflux)/snr_desired total_flux = unavg_total_flux e_total_flux = e_unavg_total_flux freq_av = unav_freqs nchan = chan_images.shape[0] nchan_prev = nchan while min(n_good_chan_per_gaus) < 2 and nchan > 2: avimages, beamlist, freq_av, crms_av = self.windowaverage_cube(chan_images, rms_desired, chan_rms, c_wts, sbeam, freqin, nmax_to_avg=nmax_to_avg) total_flux, e_total_flux = self.fit_channels(img, avimages, crms_av, src, beamlist) gaus_mask, n_good_chan_per_gaus = self.mask_upper_limits(total_flux, e_total_flux, snr_desired) nchan = avimages.shape[0] if nchan == nchan_prev: break nchan_prev = nchan rms_desired *= 0.8 # Now fit Gaussian fluxes to obtain spectral indices. # Only fit if there are detections (at specified sigma threshold) # in at least two bands. If not, don't fit and set spec_indx # and error to NaN. for ig, gaussian in enumerate(src.gaussians): npos = len(N.where(total_flux[:, ig] > 0.0)[0]) if img.opts.verbose_fitting: if img.opts.flagchan_snr: print('Gaussian #%i : averaged to %i channels, of which %i meet SNR criterion' % (gaussian.gaus_num, len(total_flux[:, ig]), n_good_chan_per_gaus[ig])) else: print('Gaussian #%i : averaged to %i channels, all of which will be used' % (gaussian.gaus_num, len(total_flux[:, ig]))) if (img.opts.flagchan_snr and n_good_chan_per_gaus[ig] < 2) or npos < 2: gaussian.spec_indx = N.NaN gaussian.e_spec_indx = N.NaN gaussian.spec_norm = N.NaN gaussian.specin_flux = [N.NaN] gaussian.specin_fluxE = [N.NaN] gaussian.specin_freq = [N.NaN] gaussian.specin_freq0 = N.NaN else: if img.opts.flagchan_snr: good_fluxes_ind = N.where(gaus_mask[:, ig] == False) else: good_fluxes_ind = range(len(freq_av)) fluxes_to_fit = total_flux[:, ig][good_fluxes_ind] e_fluxes_to_fit = e_total_flux[:, ig][good_fluxes_ind] freqs_to_fit = freq_av[good_fluxes_ind] fit_res = self.fit_specindex(freqs_to_fit, fluxes_to_fit, e_fluxes_to_fit) gaussian.spec_norm, gaussian.spec_indx, gaussian.e_spec_indx = fit_res gaussian.specin_flux = fluxes_to_fit.tolist() gaussian.specin_fluxE = e_fluxes_to_fit.tolist() gaussian.specin_freq = freqs_to_fit.tolist() gaussian.specin_freq0 = N.median(freqs_to_fit) # Next fit total source fluxes for spectral index. if len(src.gaussians) > 1: # First, check unaveraged SNRs for total source. src_total_flux = N.zeros((chan_images.shape[0], 1)) src_e_total_flux = N.zeros((chan_images.shape[0], 1)) src_total_flux[:,0] = N.sum(unavg_total_flux, 1) # sum over all Gaussians in source to obtain total fluxes in each channel src_e_total_flux[:,0] = N.sqrt(N.sum(N.power(e_unavg_total_flux, 2.0), 1)) src_mask, n_good_chan = self.mask_upper_limits(src_total_flux, src_e_total_flux, snr_desired) # Average if needed and fit again rms_desired = src.peak_flux_max/snr_desired total_flux = unavg_total_flux e_total_flux = e_unavg_total_flux freq_av = unav_freqs nchan = chan_images.shape[0] nchan_prev = nchan while n_good_chan < 2 and nchan > 2: avimages, beamlist, freq_av, crms_av = self.windowaverage_cube(chan_images, rms_desired, chan_rms, c_wts, sbeam, freqin, nmax_to_avg=nmax_to_avg) total_flux, e_total_flux = self.fit_channels(img, avimages, crms_av, src, beamlist) src_total_flux = N.sum(total_flux, 1) # sum over all Gaussians in source to obtain total fluxes in each channel src_e_total_flux = N.sqrt(N.sum(N.power(e_total_flux, 2.0), 1)) src_mask, n_good_chan = self.mask_upper_limits(src_total_flux, src_e_total_flux, snr_desired) nchan = avimages.shape[0] if nchan == nchan_prev: break nchan_prev = nchan rms_desired *= 0.8 # Now fit source for spectral index. src_total_flux = src_total_flux.reshape((src_total_flux.shape[0],)) src_e_total_flux = src_e_total_flux.reshape((src_e_total_flux.shape[0],)) src_mask = src_mask.reshape((src_mask.shape[0],)) if img.opts.verbose_fitting: if img.opts.flagchan_snr: print('Source #%i : averaged to %i channels, of which %i meet SNR criterion' % (src.source_id, len(src_total_flux), nchan)) else: print('Source #%i : averaged to %i channels, all of which will be used' % (src.source_id, len(src_total_flux))) npos = len(N.where(src_total_flux > 0.0)[0]) if isinstance(n_good_chan, int): n_good_chan = [n_good_chan] if (img.opts.flagchan_snr and n_good_chan[0] < 2) or npos < 2: src.spec_indx = N.NaN src.e_spec_indx = N.NaN src.spec_norm = N.NaN src.specin_flux = [N.NaN] src.specin_fluxE = [N.NaN] src.specin_freq = [N.NaN] src.specin_freq0 = N.NaN else: if img.opts.flagchan_snr: good_fluxes_ind = N.where(src_mask == False) else: good_fluxes_ind = range(len(freq_av)) fluxes_to_fit = src_total_flux[good_fluxes_ind] e_fluxes_to_fit = src_e_total_flux[good_fluxes_ind] freqs_to_fit = freq_av[good_fluxes_ind] # if len(freqs_to_fit.shape) == 2: # freqs_to_fit = freqs_to_fit.reshape((freqs_to_fit.shape[0],)) # if len(fluxes_to_fit.shape) == 2: # fluxes_to_fit = fluxes_to_fit.reshape((fluxes_to_fit.shape[0],)) # if len(e_fluxes_to_fit.shape) == 2: # e_fluxes_to_fit = e_fluxes_to_fit.reshape((e_fluxes_to_fit.shape[0],)) fit_res = self.fit_specindex(freqs_to_fit, fluxes_to_fit, e_fluxes_to_fit) src.spec_norm, src.spec_indx, src.e_spec_indx = fit_res src.specin_flux = fluxes_to_fit.tolist() src.specin_fluxE = e_fluxes_to_fit.tolist() src.specin_freq = freqs_to_fit.tolist() src.specin_freq0 = N.median(freqs_to_fit) else: src.spec_norm = src.gaussians[0].spec_norm src.spec_indx = src.gaussians[0].spec_indx src.e_spec_indx = src.gaussians[0].e_spec_indx src.specin_flux = src.gaussians[0].specin_flux src.specin_fluxE = src.gaussians[0].specin_fluxE src.specin_freq = src.gaussians[0].specin_freq src.specin_freq0 = src.gaussians[0].specin_freq0 if bar2.started: bar2.increment() if bar2.started: bar2.stop() img.completed_Ops.append('spectralindex') else: mylog.warning('Image has only one channel. Spectral index module disabled.') img.opts.spectralindex_do = False #################################################################################### def flagchans_rmschan(self, crms, zeroflags, iniflags, cutoff): """ Calculate clipped rms (r1) of the rms as fn of channel, crms, with zeroflags applied and kappa=cutoff. Then exclude crms=0 (for NaN mages etc) and get ch.s which are more than cutoff*r1 away from median of rms. If this is less than 10 % of all channels, flag them. """ # crms_rms and median dont include rms=0 channels nchan = len(crms) mean, rms, cmean, crms_rms, cnt = _cbdsm.bstat(crms, zeroflags, cutoff) zeroind = N.where(crms==0)[0] median = N.median(N.delete(crms, zeroind)) badind = N.where(N.abs(N.delete(crms, zeroind) - median)/crms_rms >=cutoff)[0] frac = len(badind)/(nchan - len(zeroind)) if frac <= 0.1: badind = N.where(N.abs(crms - median)/crms_rms >=cutoff)[0] iniflags[badind] = True return iniflags #################################################################################### def iniflag(self, img): """ Calculate clipped rms of every channel, and then median and clipped rms of this rms distribution. Exclude channels where rms=0 (all pixels 0 or blanked) and of the remaining, if outliers beyond 5 sigma are less then 10 % of number of channels, flag them. This is done only when flagchan_rms = True. If False, only rms=0 (meaning, entire channel image is zero or blanked) is flagged.""" image = img.image_arr nchan = image.shape[1] iniflags = N.zeros(nchan, bool) zeroflags = N.zeros(nchan, bool) crms = img.channel_clippedrms for ichan in range(nchan): if crms[ichan] == 0: zeroflags[ichan] = True iniflags = cp(zeroflags) if img.opts.flagchan_rms: iniflags = self.flagchans_rmschan(crms, zeroflags, iniflags, 4.0) return iniflags #################################################################################### def freq_beamsp_unav(self, img): """ Defines img.beam_spectrum and img.freq for the unaveraged cube. """ # Find the channel frequencies shp = img.image_arr.shape img.freq = N.zeros(shp[1]) crval, cdelt, crpix = img.freq_pars if img.wcs_obj.wcs.spec == -1 and \ img.opts.frequency_sp is None: raise RuntimeError("Frequency info not found in header "\ "and frequencies not specified by user") else: if img.opts.frequency_sp is None: for ichan in range(shp[1]): img.freq[ichan] = img.wcs_obj.p2f(ichan) else: if len(img.opts.frequency_sp) != shp[1]: raise RuntimeError("Number of channels does not match number "\ "of frequencies specified by user") for ichan in range(shp[1]): img.freq[ichan] = img.opts.frequency_sp[ichan] # Find the channel beam shapes sbeam = img.opts.beam_spectrum if sbeam is not None and len(sbeam) != shp[1]: sbeam = None # sanity check if sbeam is None: sbeam = [] hdr = img.header try: # search for channel beams in the image header for ichan in range(shp[1]): sbeam.append((hdr['BMAJ{}'.format(ichan+1)], hdr['BMIN{}'.format(ichan+1)], hdr['BPA{}'.format(ichan+1)])) except KeyError: # Channel beam info not found. Use constant beam or one scaled with # frequency if img.opts.beam_sp_derive: # Adjust channel beam sizes assuming that the beam scales as 1/nu # Note: beam is (major, minor, pos. angle) for ichan in range(shp[1]): sbeam.append((img.beam[0] * img.freq[0] / img.freq[ichan], img.beam[1] * img.freq[0] / img.freq[ichan], img.beam[2])) else: sbeam = [img.beam] * shp[1] img.beam_spectrum = sbeam #################################################################################### def rms_spectrum(self, img, image): from .rmsimage import Op_rmsimage global bar1 mylog = img.mylog nchan = image.shape[0] rms_map = img.use_rms_map if img.opts.kappa_clip is None: kappa = -img.pixel_beamarea() else: kappa = img.opts.kappa_clip map_opts = (kappa, img.rms_box, img.opts.spline_rank) if rms_map: rms_spec = N.zeros(image.shape, dtype=N.float32) mean = N.zeros(image.shape[1:], dtype=N.float32) rms = N.zeros(image.shape[1:], dtype=N.float32) median_rms = N.zeros(nchan) for ichan in range(nchan): if bar1.started: bar1.increment() dumi = Op_rmsimage() Op_rmsimage.map_2d(dumi, image[ichan], mean, rms, None, *map_opts) rms_spec[ichan,:,:] = rms median_rms[ichan] = N.median(rms) else: rms_spec = N.zeros(image.shape, dtype=N.float32) for ichan in range(nchan): if bar1.started: bar1.increment() rms_spec[ichan,:,:] = img.channel_clippedrms[ichan] median_rms = rms_spec if bar1.started: bar1.stop() str1 = " ".join(["%9.4e" % n for n in img.channel_clippedrms]) if rms_map: mylog.debug('%s %s ' % ('Median rms of channels : ', str1)) mylog.info('RMS image made for each channel') else: mylog.debug('%s %s ' % ('RMS of channels : ', str1)) mylog.info('Clipped rms calculated for each channel') return rms_spec #################################################################################### def fit_specindex(self, freqarr, fluxarr, efluxarr, do_log=False): """ Fits spectral index to data. do_log is True/False implies you fit spectral index in logFlux vs logFreq space or not.""" from . import functions as func import math from scipy.optimize import leastsq x = freqarr flux = fluxarr eflux = efluxarr f0 = N.median(x) mask = N.zeros(len(fluxarr), dtype=bool) if do_log: x = N.log10(x/f0); y = N.log10(flux); sig = N.abs(eflux/flux)/2.303 funct = func.poly else: x = x/f0; y = flux; sig = eflux funct = func.sp_in spin, espin = func.fit_mask_1d(x, y, sig, mask, funct, do_err=True, order=1) if do_log: spin[0] = math.pow(10.0, spin[0]) espin[0] = spin[0]*math.log(10.0)*espin[0] return spin[0], spin[1], espin[1] ######################################################################################## def windowaverage_cube(self, imagein, rms_desired, chanrms, c_wts, sbeam, freqin, n_min=2, nmax_to_avg=10): """Average neighboring channels of cube to obtain desired rms in at least n_min channels The clipped rms of each channel is compared to the desired rms. If the clipped rms is too high, the channel is averaged with as many neighboring channels as necessary to obtain at least the desired rms. This is done until the number of OK channels is 2. The averaging is done first at the frequency extremes, as the frequency range of the resulting averaged flux array will be maximized. For example, if the desired rms is 0.1 and the list of rms's is: [0.2, 0.2, 0.3, 0.2, 0.2] the resulting channels that will be averaged are: [[0, 1], [2], [3, 4]] """ from math import sqrt from .collapse import avspc_direct, avspc_blanks nchan = imagein.shape[0] # chan_list is a list of lists of channels to average. E.g., if we have # 5 channels and we want to average only the first 2: # chan_list = [[0,1], [2], [3], [4]] if len(chanrms.shape) ==3: crms = N.mean(N.mean(chanrms, axis=1), axis=1) else: crms = chanrms chan_list = self.get_avg_chan_list(rms_desired, crms, nmax_to_avg) n_new = len(chan_list) beamlist = [] crms_av = N.zeros(n_new) freq_av = N.zeros(n_new) imageout = N.zeros((n_new, imagein.shape[1], imagein.shape[2]), dtype=N.float32) blank = N.isnan(imagein[0]) hasblanks = blank.any() for ichan, avg_list in enumerate(chan_list): if len(avg_list) > 1: if not hasblanks: imageout[ichan], dum = avspc_direct(avg_list, imagein, crms, c_wts) else: imageout[ichan], dum = avspc_blanks(avg_list, imagein, crms, c_wts) chan_slice = slice(avg_list[0], avg_list[1]+1) beamlist.append(tuple(N.mean(sbeam[chan_slice], axis=0))) freq_av[ichan] = N.mean(freqin[chan_slice]) crms_av[ichan] = 1.0/sqrt(N.sum(1.0/crms[chan_slice]**2)) else: imageout[ichan] = imagein[avg_list[0]] beamlist.append(sbeam[avg_list[0]]) freq_av[ichan] = N.mean(freqin[avg_list[0]]) crms_av[ichan] = 1.0/sqrt(N.sum(1.0/crms[avg_list[0]]**2)) return imageout, beamlist, freq_av, crms_av def get_avg_chan_list(self, rms_desired, chanrms, nmax_to_avg): """Returns a list of channels to average to obtain given rms_desired in at least 2 channels""" end = 0 chan_list = [] nchan = len(chanrms) good_ind = N.where(N.array(chanrms)/rms_desired < 1.0)[0] num_good = len(good_ind) if num_good < 2: # Average channels at start of list rms_avg = chanrms[0] while rms_avg > rms_desired: end += 1 chan_slice = slice(0, end) rms_avg = 1.0/N.sqrt(N.sum(1.0/N.array(chanrms)[chan_slice]**2)) if end == nchan or end == nmax_to_avg: break if end == 0: end = 1 chan_list.append(range(end)) if end == nchan: # This means all channels are averaged into one. If this happens, # instead average first half and second half to get two channels # and return. chan_list = [range(0, int(float(nchan)/2.0)), range(int(float(nchan)/2.0), nchan)] return chan_list # Average channels at end of list rms_avg = chanrms[-1] end = nchan start = nchan while rms_avg > rms_desired: start -= 1 chan_slice = slice(start, end) rms_avg = 1.0/N.sqrt(N.sum(1.0/chanrms[chan_slice]/chanrms[chan_slice])) if end-start == nmax_to_avg: break if start <= max(chan_list[0]): # This means we cannot get two averaged channels with desired rms, # so just average remaining channels chan_list.append(range(max(chan_list[0]), nchan)) else: # First append any channels between those averaged at the start # and those at the end for i in range(max(chan_list[0])+1, start): chan_list.append([i]) if start < end: chan_list.append(range(start, end)) else: # No averaging needed for i in range(nchan): chan_list.append([i]) return chan_list def fit_channels(self, img, chan_images, clip_rms, src, beamlist): """Fits normalizations of Gaussians in source to multiple channels If unresolved, the size of the Gaussians are adjusted to match the channel's beam size (given by beamlist) before fitting. Returns array of total fluxes (N_channels x N_Gaussians) and array of errors (N_channels x N_Gaussians). """ from . import functions as func from .const import fwsig isl = img.islands[src.island_id] isl_bbox = isl.bbox nchan = chan_images.shape[0] x, y = N.mgrid[isl_bbox] gg = src.gaussians fitfix = N.ones(len(gg)) # fit only normalization srcmask = isl.mask_active total_flux = N.zeros((nchan, len(fitfix))) # array of fluxes: N_channels x N_Gaussians errors = N.zeros((nchan, len(fitfix))) # array of fluxes: N_channels x N_Gaussians for cind in range(nchan): image = chan_images[cind] gg_adj = self.adjust_size_by_freq(img.beam, beamlist[cind], gg) p, ep = func.fit_mulgaus2d(image, gg_adj, x, y, srcmask, fitfix, adj=True) pbeam = img.beam2pix(beamlist[cind]) bm_pix = (pbeam[0]/fwsig, pbeam[1]/fwsig, pbeam[2]) # IN SIGMA UNITS for ig in range(len(fitfix)): total_flux[cind, ig] = p[ig*6]*p[ig*6+3]*p[ig*6+4]/(bm_pix[0]*bm_pix[1]) p = N.insert(p, N.arange(len(fitfix))*6+6, total_flux[cind]) rms_isl = N.mean(clip_rms[cind]) errors[cind] = func.get_errors(img, p, rms_isl, bm_pix=(bm_pix[0]*fwsig, bm_pix[1]*fwsig, bm_pix[2]))[6] self.reset_size(gg) return total_flux, errors def adjust_size_by_freq(self, beam_ch0, beam, gg): """Adjust size of unresolved Gaussians to match the channel's beam size""" gg_adj = [] for g in gg: g.size_pix_adj = g.size_pix[:] if g.deconv_size_sky[0] == 0.0: g.size_pix_adj[0] *= beam[0] / beam_ch0[0] if g.deconv_size_sky[1] == 0.0: g.size_pix_adj[1] *= beam[1] / beam_ch0[1] gg_adj.append(g) return gg_adj def reset_size(self, gg): """Reset size of unresolved Gaussians to match the ch0 beam size""" for g in gg: if hasattr(g, 'size_pix_adj'): del g.size_pix_adj def mask_upper_limits(self, total_flux, e_total_flux, threshold): """Returns mask of upper limits""" mask = N.zeros(total_flux.shape, dtype=bool) if len(total_flux.shape) == 1: is_src = True ndet = 0 ncomp = 1 else: is_src = False ndet = N.zeros((total_flux.shape[1]), dtype=int) ncomp = len(ndet) for ig in range(ncomp): for ichan in range(total_flux.shape[0]): if is_src: meas_flux = total_flux[ichan] e_meas_flux = e_total_flux[ichan] else: meas_flux = total_flux[ichan, ig] e_meas_flux = e_total_flux[ichan, ig] if meas_flux < threshold * e_meas_flux: # Upper limit if is_src: mask[ichan] = True else: mask[ichan, ig] = True else: # Detection if is_src: ndet += 1 mask[ichan] = False else: ndet[ig] += 1 mask[ichan, ig] = False return mask, ndet PyBDSF-1.10.1/bdsf/statusbar.py000066400000000000000000000062711420247104600161270ustar00rootroot00000000000000"""Display an animated statusbar""" from __future__ import absolute_import import sys import os from . import functions as func class StatusBar(): # class variables: # max: number of total items to be completed # pos: number of completed items # spin_pos: current position in array of busy_chars # inc: amount of items to increment completed 'pos' by # (shared resource) # comp: amount of '=' to display in the progress bar # started: whether or not the statusbar has been started # color: color of text def __init__(self, text, pos=0, max=100, color='\033[0m'): self.text = text self.pos = pos self.max = max self.busy_char = '|' self.spin_pos = 0 self.inc = 0 self.started = 0 self.color = color self.__getsize() if max > 0: self.comp = int(float(self.pos) / self.max * self.columns) else: self.comp = 0 # find number of columns in terminal def __getsize(self): try: rows, columns = func.getTerminalSize() except ValueError: rows = columns = 0 if int(columns) > self.max + 2 + 44 + (len(str(self.max))*2 + 2): self.columns = self.max else: # note: -2 is for brackets, -44 for 'Fitting islands...' text, rest is for pos/max text self.columns = int(columns) - 2 - 44 - (len(str(self.max))*2 + 2) return # redraw progress bar def __print(self): self.__getsize() sys.stdout.write('\x1b[1G') if self.max == 0: sys.stdout.write(self.color + self.text + '[] 0/0\033[0m\n') else: sys.stdout.write(self.color + self.text + '[' + '=' * self.comp + self.busy_char + '-'*(self.columns - self.comp - 1) + '] ' + str(self.pos) + '/' + str(self.max) + '\033[0m') sys.stdout.write('\x1b[' + str(self.comp + 2 + 44) + 'G') sys.stdout.flush() return # spin the spinner by one increment def spin(self): busy_chars = ['|','/','-','\\'] self.spin_pos += 1 if self.spin_pos >= len(busy_chars): self.spin_pos = 0 # display the busy spinning icon self.busy_char = busy_chars[self.spin_pos] sys.stdout.write(self.color + busy_chars[self.spin_pos] + '\x1b[1D' + '\033[0m') sys.stdout.flush() # increment number of completed items def increment(self): self.inc = 1 if (self.pos + self.inc) >= self.max: self.pos = self.max self.comp = self.columns self.busy_char = '' self.__print() return 0 else: self.pos += self.inc self.inc = 0 self.spin() self.comp = int(float(self.pos) / self.max \ * self.columns) self.__print() return 1 def start(self): self.started = 1 self.__print() def stop(self): if self.started: self.pos = self.max self.comp = self.columns self.busy_char = '' self.__print() sys.stdout.write('\n') self.started = 0 return 0 PyBDSF-1.10.1/bdsf/tc.py000066400000000000000000000501461420247104600145250ustar00rootroot00000000000000"""Defines some basic facilities for handling typed values. It's quite basic and limited implementation tailored specifically for use in the PyBDSM user-options and derived properties. For a user option, one can define a group that is used when listing the options to the screen. For a property (e.g., flux density), one can define the column name to be used on output and the associated units. For a much more generic and capable implementation I can recommend to look at Enthought Traits package: http://code.enthought.com/projects/traits Defined are: - a number tc-handlers which allow to type-check and/or cast values to the specific type (tcCType, tcEnum, tcTuple, tcOption, tcInstance, tcList, tcAny). These aren't really inteded for use by end-user. - class TC, which implements a concept of type-checked property with default value. - a number of wrappers around TC to simplify it's usage (Int, Float, Bool, String, Tuple, Enum, Option, NArray, Instance, tInstance, List, Any) Usage: For the most needs it's enough to use wrapper-interface. One important remark -- class containing tc-variables should be new-style class, thus you should explicitly inherit from 'object' for Python < 2.6. Example: from tc import Int, Float, Bool, String, Tuple, Enum, \\ Option, NArray, Instance, Any, TCInit class tst(object): intval = Int(doc="Integer value") boolval = Bool(True, "Some boolean flag") op_type = Enum("op1", "op2", doc="Some enumerated value") def __init__(self): TCInit(self) ### this is optional v = tst() v.intval = 1 # OK v.intval = "33" # OK, casted to 33 v.intval = "failure" # FAILS v.op_type= "op2" # OK v.op_type= "op3" # FAILS """ try: import exceptions except ImportError: import builtins as exceptions import types _sequence_types = (list, tuple) _class_types = (type, type) _basic_types = (bool, int, int, float, complex, bytes, str) ############################################################ ## Wrappers around TC to simplify it's usage for end-users ############################################################ def Int(value=0, doc=None, group=None, colname=None, units=None): """Create tc-value of type int""" return TC(value, tcCType(int), doc, group, colname, units) def Float(value=0., doc=None, group=None, colname=None, units=None): """Create tc-value of type float""" return TC(value, tcCType(float), doc, group, colname, units) def Bool(value=False, doc=None, group=None): """Create tc-value of type bool""" return TC(value, tcCType(bool), doc, group) def String(value='', doc=None, group=None, colname=None, units=None): """Create tc-value of type string""" return TC(value, tcCType(str), doc, group, colname, units) def Tuple(*values, **kws): """Create tc-value of type tuple. Parameters: values: zero or more arguments kws: keyword arguments. Currently only 'doc' and 'group' are recognized If the first item of values is a tuple, it's used as the default value. The remaining arguments are used to build type constraints and should be TC values. Examples: Tuple((1,2,3)) # tuple of 3 integers, default = (1,2,3) Tuple(Int(3), Float(2)) # tuple of int&float, default = (3, 2.0) Tuple((1,2), Int(3), Float(2)) # tuple of int+float, default = (1, 2.0) """ doc = kws.pop('doc', None) group = kws.pop('group', None) if len(values) == 0: return TC((), tcTuple(), doc, group) default = None if isinstance(values[0], tuple): default, values = values[0], values[1:] if default is None: default = tuple([x._default for x in values]) if len(values) == 0: values = [tc_from(x) for x in default] return TC(default, tcTuple(*values), doc, group) def Enum(*values, **kws): """Create tc-value of type enum. Parameters: values: list or tuple of valid values kws: keyword arguments. Currently only 'doc' and 'group' are recognized Default value is taken to be values[0]. Examples: Enum(3, [1,2,3]) # enum of 1,2,3 with default of 3 Enum(1,2,3) # enum of 1,2,3 with default of 1 """ default = values[0] if (len(values) == 2) and (type(values[1]) in _sequence_types): values = values[1] doc = kws.pop('doc', None) group = kws.pop('group', None) return TC(default, tcEnum(*values), doc, group) def Option(value, type=None, doc=None, group=None): """Creates optional tc-value. Parameters: value, type: default value and type doc: doc-string for the value group: group designation for the value """ if type is None: type = tc_from(value) if isinstance(value, TC): value = value._default return TC(value, tcOption(type), doc, group) def NArray(value=None, or_none=True, doc=None, group=None, colname=None, units=None): """Creates tc-value which holds Numpy arrays Parameters: value: default value or_none: if 'None' is valid value group: group designation for the value colname: name of column if quantity is to be output units: units if quantity is to be output """ try: import numpy as N except: raise tcError("Can't create tc-value of type NArray " \ "without access to numpy module") return Instance(value, N.ndarray, or_none, doc, group, colname, units) def Instance(value, type=None, or_none=True, doc=None, group=None, colname=None, units=None): """Creates tc-value which holds instances of specific class. Parameters: value, type: default value and type or_none: flag if 'None' is valid value for this variable group: group designation for the value colname: name of column if quantity is to be output units: units if quantity is to be output Examples: Instance(instance, class) Instance(instance) Instance(class) """ if type is None: if isinstance(value, _class_types): value, type = None, value else: type = value.__class__ return TC(value, tcInstance(type, or_none), doc, group, colname, units) def tInstance(type, or_none=False): """Create tc-handler for values which are instances of the specific class. This function is useless on it's own, and should be used to create Instane-constrain for compound tc-values. It's especially usefull for classes which have non-trivial constructors. Parameters: type: target type/class or_none: flag if 'None' is valid value for this variable Example: we want to define tc-variable holding a list of objects List(Instance(slice, or_none=False) ## FAILS, no default value List(Instance(slice)) ## works, but list MAY contain None's List(tInstance(slice)) ## GOOD """ if not isinstance(type, _class_types): type = type.__class__ return tcInstance(type, or_none) def List(value, type=None, doc=None, group=None, colname=None, units=None): """Creates tc-value which represents a list, where each element obeys specific type-constrains. Parameters: doc: docstring for the object value, type: default value and type group: parameter group to which the option belongs colname: name of column if quantity is to be output units: units if quantity is to be output Examples: List(Int()) # list of integers, default value is [] List([1,2], Int()) # list of integers, default value is [1,2] Just one more warning -- List always has default value ([] in the simples case), and this default value is shared between the instances, so be carefull to not modify it. Counter-example for it: class tst(object): l = List(Int()) x1 = tst() x2 = tst() # both instances share default value x1.l.append(1) print x2.l # this will print [1] x1.l = [2] print x2.l # still [1], as x1 has it's own local value now """ if type is None: value, type = [], tc_from(value) return TC(value, tcList(type), doc, group, colname, units) def Any(value=None, doc=None, group=None): """Creates tc-value of arbitrary type (e.g. no type-checking is done) """ return TC(value, tcAny(), doc, group) def TCInit(obj): """Initialize tc-variables in the new instance""" TC.set_property_names(obj.__class__) obj._tc_values = {} ############################################################ ## Exception type ############################################################ class tcError(exceptions.Exception): """Custom exception type to simplify exception handling""" pass ############################################################ ## TC -- type-checked variable ############################################################ class TC(object): """TC is an implementation of the typed-checked value. The primary usage pattern is via class attributes: class Test(object): ### MUST be new-style object value1 = Int(3) value2 = Tuple(Int(5), Option(Any())) test = Test() print test.value1 test.value2 = (3, None) An important restriction -- it might only be used with new-style objects (e.g. objects derived from 'object' or 'type'. And the attribute should be defined in the class of the object. """ def __init__(self, value, _type=None, doc=None, group=None, colname=None, units=None): """Create typed-checked object. Parameters: value: default value _type: type specification (instance of tcHandler) or None doc: docstring for the object group: parameter group to which the option belongs colname: name of column if quantity is to be output units: units if quantity is to be output """ if _type is not None: self._type = _type else: self._type = tc_from(value) self._default = self._type.cast(value) self._name = None # name is unknown atm self._group = group self._doc = doc self._colname = colname self._units = units self.__doc__ = "default value is %s (%s)" % \ (str(self._default), self._type.info()) if doc is not None: self.__doc__ += "\n" + doc def __get__(self, instance, cls): """Get a value from instance (or return default value)""" if instance is None: return self try: return instance._tc_values[self] except: return self._default def __set__(self, instance, value): """Set a value""" try: values = instance._tc_values except: values = instance._tc_values = {} if not self._name: self.set_property_names(instance.__class__) values[self] = self._type.cast(value, self._name, instance.__class__.__name__) def __delete__(self, instance): """Revert value to default""" try: del instance._tc_values[self] except: pass def cast(self, value, *args): """See tcHandler.cast""" return self._type.cast(value, *args) def info(self): """Return description of tc-value""" return self.__doc__ def doc(self): """Return short description of tc-value""" return self._doc def group(self): """Return group designation of tc-value""" return self._group def colname(self): """Return column name designation of tc-value""" return self._colname def units(self): """Return units designation of tc-value""" return self._units @staticmethod def set_property_names(klass): """Scan class definition and update _name for all TC objects defined there""" for k,v in klass.__dict__.items(): if isinstance(v, TC): v._name = k ############################################################ ## tcHandler and derived handlers for the specific ## types/values ############################################################ class tcHandler(object): """Base class for all tc-handlers""" def cast(self, value, *args): """Check that provided value meets type requirements or cast it to the specific type. """ self.error(strx(value), *args) def is_valid(self, value): """Check if provided value can be safely casted to the proper type""" try: self.cast(value) return True except: return False def info(self): """A description of a valid values""" return "value of unknown type" def error(self, value, *args): if len(args) == 2 and args[0]: error = "Failed to set property %s of class %s " \ "to a value of %s; expected %s." % \ (args[0], args[1], value, self.info()) else: error = "A value of %s can't be casted to %s" % \ (value, self.info()) raise tcError(error, value, self.info(), *args) ############################################################ class tcAny(tcHandler): """Allows any values of any type""" def cast(self, value, *args): return value def info(self): return "any value" ############################################################ class tcCType(tcHandler): """Ensures that value has a specific python type This handler implements so-called casting-approach, where it will accept all values which can be converted to the required type by the means of casting operation. For example: v = tcCType(int) print v.cast(3) # casted to 3 print v.cast(3.3) # casted to 3 print v.cast("3") # casted to 3 """ def __init__(self, _type): """Creates tcType handler. Parameters: _type: Python type object or a value of a reqired type """ if not isinstance(_type, type): _type = type(_type) self.type = _type def cast(self, value, *args): if type(value) is self.type: return value try: return self.type(value) except: self.error("%s (%s)" % (str_type(value), reprx(value)), *args) def info(self): return "a value of %s" % str_type(self.type) ############################################################ class tcEnum(tcHandler): """Ensures that a value is a member of a specified list of values""" def __init__(self, *values): """Creates a tcEnum handler. Parameters: values: list or tuple of all legal values Description: The list of values can be provided as a list/tuple of values or just specified in-line. So that ''tcEnum([1,2,3])'' and ''tcEnum(1,2,3)'' are equivalent. """ if len(values) == 1 and type(values[0]) in _sequence_types: values = values[0] self.values = values def cast(self, value, *args): if value in self.values: return value self.error(repr(value), *args) def info(self): res = "a value of %s" % \ " or ".join([repr(x) for x in self.values]) return res ############################################################ class tcTuple(tcHandler): """Ensures that a value is a tuple of specified length, with elements that are of specified type """ def __init__(self, *args): """Creates a tcTuple handler. Parameters: args: list of tuple components Description: Each tuple component should be either a specific tc-handler or a value which can be converted to it (by the means of tc_from function) """ self.tcs = tuple([tc_from(x) for x in args]) def cast(self, value, *args): try: if type(value) in _sequence_types: if len(value) == len(self.tcs): res = [] for i, h in enumerate(self.tcs): res.append(h.cast(value[i])) return tuple(res) except: pass self.error(reprx(value), *args) def info(self): res = "a tuple of the form: (%s)" % \ ", ".join([x.info() for x in self.tcs]) return res ############################################################ class tcOption(tcHandler): """Implements an optional value: None or a value restricted by another tcHandler""" def __init__(self, _type): """Creates tcOption handler. Parameters: _type: tc-handle, Python type object or a value of a reqired type """ self.type = tc_from(_type) def cast(self, value, *args): try: if value is None: return value return self.type.cast(value) except: self.error("%s (%s)" % (str_type(value), reprx(value)), *args) def info(self): return self.type.info() + " or None" ############################################################ class tcInstance(tcHandler): """Ensures that a value belongs to a specified python class or type (or one of it's subclasses). """ def __init__(self, klass, or_none=True): """Creates tcInstance handler. Parameters: klass: Python class, type or an instance of python class or_none: whether we should accept None as a valid value (defaults to True) """ if not isinstance(klass, _class_types): klass = klass.__class__ self.klass = klass self.or_none = or_none def cast(self, value, *args): if (value is None) and self.or_none: return value if isinstance(value, self.klass): return value self.error(reprx(value), *args) def info(self): res = "an instance of " + str_type(self.klass) if self.or_none: res += " or None" return res ############################################################ class tcList(tcHandler): """Ensures that a value is a list containing elements of a specified kind. It also ensures that any change made to the list does't violate the list type constrains. """ def __init__(self, kind): """Creates tcList handler. Parameters: kind: tc-handler constraining elements of the list """ self.type = tc_from(kind) def cast(self, value, *args): if isinstance(value, _sequence_types): v = [self.type.cast(x, *args) for x in value] return list(v) self.error(reprx(value), *args) def info(self): return "a list where each element is " + self.type.info() ############################################################ def tc_from(v): """tc_from tries to guess an appropriate tc-handler for the provided object. The basic logic is a following: - TC object results in it's internal type constrain - for a instances and type-objects of the basic numerica types we use tcCType handler - a list of values results in tcEnum handler - a tuple of values results in tcTuple handler - a value of None results in tcAny handler """ if isinstance(v, TC): return v._type if isinstance(v, tcHandler): return v if v in _basic_types: return tcCType(v) if type(v) in _basic_types: return tcCType(v) if type(v) is list: return tcEnum(v) if type(v) is tuple: return tcTuple(*v) if v is None: return tcAny() error = "Can't create tc-handler for a value of %s (%s)" %\ (str_type(v), reprx(v)) raise tcError(error) ############################################################ def str_type(v): """Pretty-print type of v""" if isinstance(v, _class_types): return repr(v)[1:-1] else: return repr(type(v))[1:-1] ############################################################ def reprx(v): """Pretty-print value of v""" if type(v) is types.InstanceType: return v.__class__.__name__ else: return repr(v) PyBDSF-1.10.1/bdsf/threshold.py000066400000000000000000000107731420247104600161150ustar00rootroot00000000000000"""Module threshold. Defines operation Op_threshold. If the option 'thresh' is defined as 'fdr' then the value of thresh_pix is estimated using the False Detection Rate algorithm (using the user defined value of fdr_alpha). If thresh is None, then the false detection probability is first calculated, and if the number of false source pixels is more than fdr_ratio times the estimated number of true source pixels, then FDR is chosen, else the hard threshold option is chosen. Masked images aren't handled properly yet. """ from __future__ import absolute_import import numpy as N from .image import Op, Image, NArray from math import sqrt,pi,log from scipy.special import erfc from . import const from . import mylogger class Op_threshold(Op): """Calculates FDR threshold if necessary. Prerequisites: Module preprocess and rmsimage should be run first. """ def __call__(self, img): mylog = mylogger.logging.getLogger("PyBDSM."+img.log+"Threshold ") data = img.ch0_arr mask = img.mask_arr opts = img.opts size = N.product(img.ch0_arr.shape) sq2 = sqrt(2) if img.opts.thresh is None: source_p = self.get_srcp(img) cutoff = 5.0 false_p = 0.5*erfc(cutoff/sq2)*size if false_p < opts.fdr_ratio*source_p: img.thresh = 'hard' mylogger.userinfo(mylog, "Expected 5-sigma-clipped false detection rate < fdr_ratio") mylogger.userinfo(mylog, "Using sigma-clipping ('hard') thresholding") else: img.thresh = 'fdr' mylogger.userinfo(mylog, "Expected 5-sigma-clipped false detection rate > fdr_ratio") mylogger.userinfo(mylog, "Using FDR (False Detection Rate) thresholding") mylog.debug('%s %g' % ("Estimated number of source pixels (using sourcecounts.py) is ",source_p)) mylog.debug('%s %g' % ("Number of false positive pixels expected for 5-sigma is ",false_p)) mylog.debug("Threshold for pixels set to : "+str.swapcase(img.thresh)) else: img.thresh = img.opts.thresh if img.thresh=='fdr': cdelt = img.wcs_obj.acdelt[:2] bm = (img.beam[0], img.beam[1]) area_pix = int(round(N.product(bm)/(abs(N.product(cdelt))* \ pi/(4.0*log(2.0))))) s0 = 0 for i in range(area_pix): s0 += 1.0/(i+1) slope = opts.fdr_alpha/s0 # sort erf of normalised image as vector v = N.sort(0.5*erfc(N.ravel((data-img.mean_arr)/img.rms_arr)/sq2))[::-1] pcrit = None for i,x in enumerate(v): if x < slope*i/size: pcrit = x break if pcrit is None: raise RuntimeError("FDR thresholding failed. Please check the input image for problems.") dumr1 = 1.0-2.0*pcrit dumr = 8.0/3.0/pi*(pi-3.0)/(4.0-pi) # approx for inv(erfc) sigcrit = sqrt(-2.0/pi/dumr-log(1.0-dumr1*dumr1)/2.0+ \ sqrt((2.0/pi/dumr+log(1.0-dumr1*dumr1)/2.0)* \ (2.0/pi/dumr+log(1.0-dumr1*dumr1)/2.0)- \ log(1.0-dumr1*dumr1)/dumr))*sq2 if pcrit == 0.0: img.thresh = 'hard' else: img.thresh_pix = sigcrit mylogger.userinfo(mylog, "FDR threshold (replaces thresh_pix)", str(round(sigcrit, 4))) else: img.thresh_pix = opts.thresh_pix img.completed_Ops.append('threshold') return img def get_srcp(self, img): from . import sourcecounts as sc fwsig = const.fwsig cutoff = 5.0 spin = -0.80 freq = img.frequency bm = (img.beam[0], img.beam[1]) cdelt = img.wcs_obj.acdelt[:2] x = 2.0*pi*N.product(bm)/abs(N.product(cdelt))/(fwsig*fwsig)*img.omega smin_L = img.clipped_rms*cutoff*((1.4e9/freq)**spin) scflux = sc.s scnum = sc.n index = 0 for i,s in enumerate(scflux): if s < smin_L: index = i break n1 = scnum[index]; n2 = scnum[-1] s1 = scflux[index]; s2 = scflux[-1] alpha = 1.0-log(n1/n2)/log(s1/s2) A = (alpha-1.0)*n1/(s1**(1.0-alpha)) source_p = x*A*((cutoff*img.clipped_rms)**(1.0-alpha)) \ /((1.0-alpha)*(1.0-alpha)) return source_p PyBDSF-1.10.1/bdsf/wavelet_atrous.py000066400000000000000000000740031420247104600171610ustar00rootroot00000000000000"""Compute a-trous wavelet transform of the gaussian residual image. Do source extraction on this if asked. """ from __future__ import print_function from __future__ import absolute_import import numpy as N from .image import * from . import mylogger import os from . import has_pl if has_pl: import matplotlib.pyplot as pl from . import _cbdsm from math import log, floor, sqrt from .const import fwsig from copy import deepcopy as cp from . import functions as func import gc from numpy import array, product import scipy.signal from .readimage import Op_readimage from .preprocess import Op_preprocess from .rmsimage import Op_rmsimage from .threshold import Op_threshold from .islands import Op_islands from .gausfit import Op_gausfit, Gaussian from .gaul2srl import Op_gaul2srl from .make_residimage import Op_make_residimage from .output import Op_outlist from .interface import raw_input_no_history from . import multi_proc as mp import itertools from . import statusbar try: import pyfftw.interfaces pyfftw.interfaces.cache.enable() N.fft.fftn = pyfftw.interfaces.numpy_fft.fftn N.fft.ifftn = pyfftw.interfaces.numpy_fft.ifftn scipy.signal.signaltools.fftn = pyfftw.interfaces.scipy_fftpack.fftn scipy.signal.signaltools.ifftn = pyfftw.interfaces.scipy_fftpack.ifftn has_pyfftw = True except ImportError: has_pyfftw = False class Op_wavelet_atrous(Op): """Compute a-trous wavelet transform of the gaussian residual image.""" def __call__(self, img): mylog = mylogger.logging.getLogger("PyBDSM." + img.log + "Wavelet") if img.opts.atrous_do: if img.nisl == 0: mylog.warning("No islands found. Skipping wavelet decomposition.") img.completed_Ops.append('wavelet_atrous') return mylog.info("Decomposing gaussian residual image into a-trous wavelets") bdir = img.basedir + '/wavelet/' if img.opts.output_all: if not os.path.isdir(bdir): os.makedirs(bdir) if not os.path.isdir(bdir + '/residual/'): os.makedirs(bdir + '/residual/') if not os.path.isdir(bdir + '/model/'): os.makedirs(bdir + '/model/') dobdsm = img.opts.atrous_bdsm_do filter = {'tr':{'size':3, 'vec':[1. / 4, 1. / 2, 1. / 4], 'name':'Triangle'}, 'b3':{'size':5, 'vec':[1. / 16, 1. / 4, 3. / 8, 1. / 4, 1. / 16], 'name':'B3 spline'}} if dobdsm: wchain, wopts = self.setpara_bdsm(img) n, m = img.ch0_arr.shape # Calculate residual image that results from normal (non-wavelet) Gaussian fitting Op_make_residimage()(img) resid = img.resid_gaus_arr lpf = img.opts.atrous_lpf if lpf not in ['b3', 'tr']: lpf = 'b3' jmax = img.opts.atrous_jmax l = len(filter[lpf]['vec']) # 1st 3 is arbit and 2nd 3 is whats expected for a-trous if jmax < 1 or jmax > 15: # determine jmax # Check if largest island size is # smaller than 1/3 of image size. If so, use it to determine jmax. min_size = min(resid.shape) max_isl_shape = (0, 0) for isl in img.islands: if isl.image.shape[0] * isl.image.shape[1] > max_isl_shape[0] * max_isl_shape[1]: max_isl_shape = isl.image.shape if max_isl_shape != (0, 0) and min(max_isl_shape) < min(resid.shape) / 3.0: min_size = min(max_isl_shape) * 4.0 else: min_size = min(resid.shape) jmax = int(floor(log((min_size / 3.0 * 3.0 - l) / (l - 1) + 1) / log(2.0) + 1.0)) + 1 if min_size * 0.55 <= (l + (l - 1) * (2 ** (jmax) - 1)): jmax = jmax - 1 img.wavelet_lpf = lpf img.wavelet_jmax = jmax mylog.info("Using " + filter[lpf]['name'] + ' filter with J_max = ' + str(jmax)) img.atrous_islands = [] img.atrous_gaussians = [] img.atrous_sources = [] img.atrous_opts = [] img.resid_wavelets_arr = cp(img.resid_gaus_arr) im_old = img.resid_wavelets_arr total_flux = 0.0 ntot_wvgaus = 0 stop_wav = False pix_masked = N.where(N.isnan(resid) == True) jmin = 1 if img.opts.ncores is None: numcores = 1 else: numcores = img.opts.ncores for j in range(jmin, jmax + 1): # extra +1 is so we can do bdsm on cJ as well mylogger.userinfo(mylog, "\nWavelet scale #" + str(j)) im_new = self.atrous(im_old, filter[lpf]['vec'], lpf, j, numcores=numcores, use_scipy_fft=img.opts.use_scipy_fft) im_new[pix_masked] = N.nan # since fftconvolve wont work with blanked pixels if img.opts.atrous_sum: w = im_new else: w = im_old - im_new im_old = im_new suffix = 'w' + repr(j) filename = img.imagename + '.atrous.' + suffix + '.fits' if img.opts.output_all: func.write_image_to_file('fits', filename, w, img, bdir) mylog.info('%s %s' % ('Wrote ', img.imagename + '.atrous.' + suffix + '.fits')) # now do bdsm on each wavelet image. if dobdsm: wopts['filename'] = filename wopts['basedir'] = bdir box = img.rms_box[0] y1 = (l + (l - 1) * (2 ** (j - 1) - 1)) bs = max(5 * y1, box) # changed from 10 to 5 if bs > min(n, m) / 2: wopts['rms_map'] = False wopts['mean_map'] = 'const' wopts['rms_box'] = None else: wopts['rms_box'] = (bs, bs/3) if hasattr(img, '_adapt_rms_isl_pos'): bs_bright = max(5 * y1, img.rms_box_bright[0]) if bs_bright < bs/1.5: wopts['adaptive_rms_box'] = True wopts['rms_box_bright'] = (bs_bright, bs_bright/3) else: wopts['adaptive_rms_box'] = False if j <= 3: wopts['ini_gausfit'] = 'default' else: wopts['ini_gausfit'] = 'nobeam' wid = (l + (l - 1) * (2 ** (j - 1) - 1))# / 3.0 b1, b2 = img.pixel_beam()[0:2] b1 = b1 * fwsig b2 = b2 * fwsig cdelt = img.wcs_obj.acdelt[:2] wimg = Image(wopts) wimg.beam = (sqrt(wid * wid + b1 * b1) * cdelt[0] * 2.0, sqrt(wid * wid + b2 * b2) * cdelt[1] * 2.0, 0.0) wimg.orig_beam = img.beam wimg.pixel_beam = img.pixel_beam wimg.pixel_beamarea = img.pixel_beamarea wimg.log = 'Wavelet.' wimg.basedir = img.basedir wimg.extraparams['bbsprefix'] = suffix wimg.extraparams['bbsname'] = img.imagename + '.wavelet' wimg.extraparams['bbsappend'] = True wimg.bbspatchnum = img.bbspatchnum wimg.waveletimage = True wimg.j = j if hasattr(img, '_adapt_rms_isl_pos'): wimg._adapt_rms_isl_pos = img._adapt_rms_isl_pos self.init_image_simple(wimg, img, w, '.atrous.' + suffix) for op in wchain: op(wimg) gc.collect() if isinstance(op, Op_islands) and img.opts.atrous_orig_isl: if wimg.nisl > 0: # Find islands that do not share any pixels with # islands in original ch0 image. good_isl = [] # Make original rank image boolean; rank counts from 0, with -1 being # outside any island orig_rankim_bool = N.array(img.pyrank + 1, dtype = bool) # Multiply rank images old_islands = orig_rankim_bool * (wimg.pyrank + 1) - 1 # Exclude islands that don't overlap with a ch0 island. valid_ids = set(old_islands.flatten()) for idx, wvisl in enumerate(wimg.islands): if idx in valid_ids: wvisl.valid = True good_isl.append(wvisl) else: wvisl.valid = False wimg.islands = good_isl wimg.nisl = len(good_isl) mylogger.userinfo(mylog, "Number of islands found", '%i' % wimg.nisl) # Renumber islands: for wvindx, wvisl in enumerate(wimg.islands): wvisl.island_id = wvindx if isinstance(op, Op_gausfit): # If opts.atrous_orig_isl then exclude Gaussians outside of # the original ch0 islands nwvgaus = 0 if img.opts.atrous_orig_isl: gaul = wimg.gaussians tot_flux = 0.0 if img.ngaus == 0: gaus_id = -1 else: gaus_id = img.gaussians[-1].gaus_num wvgaul = [] for g in gaul: if not hasattr(g, 'valid'): g.valid = False if not g.valid: try: isl_id = img.pyrank[int(g.centre_pix[0] + 1), int(g.centre_pix[1] + 1)] except IndexError: isl_id = -1 if isl_id >= 0: isl = img.islands[isl_id] gcenter = (int(g.centre_pix[0] - isl.origin[0]), int(g.centre_pix[1] - isl.origin[1])) if not isl.mask_active[gcenter]: gaus_id += 1 gcp = Gaussian(img, g.parameters[:], isl.island_id, gaus_id) gcp.gaus_num = gaus_id gcp.wisland_id = g.island_id gcp.jlevel = j g.valid = True isl.gaul.append(gcp) isl.ngaus += 1 img.gaussians.append(gcp) nwvgaus += 1 tot_flux += gcp.total_flux else: g.valid = False g.jlevel = 0 else: g.valid = False g.jlevel = 0 vg = [] for g in wimg.gaussians: if g.valid: vg.append(g) wimg.gaussians = vg mylogger.userinfo(mylog, "Number of valid wavelet Gaussians", str(nwvgaus)) else: # Keep all Gaussians and merge islands that overlap tot_flux = check_islands_for_overlap(img, wimg) # Now renumber the islands and adjust the rank image before going to next wavelet image renumber_islands(img) total_flux += tot_flux if img.opts.interactive and has_pl: dc = '\033[34;1m' nc = '\033[0m' print(dc + '--> Displaying islands and rms image...' + nc) if max(wimg.ch0_arr.shape) > 4096: print(dc + '--> Image is large. Showing islands only.' + nc) wimg.show_fit(rms_image=False, mean_image=False, ch0_image=False, ch0_islands=True, gresid_image=False, sresid_image=False, gmodel_image=False, smodel_image=False, pyramid_srcs=False) else: wimg.show_fit() prompt = dc + "Press enter to continue or 'q' stop fitting wavelet images : " + nc answ = raw_input_no_history(prompt) while answ != '': if answ == 'q': img.wavelet_jmax = j stop_wav = True break answ = raw_input_no_history(prompt) if len(wimg.gaussians) > 0: img.resid_wavelets_arr = self.subtract_wvgaus(img.opts, img.resid_wavelets_arr, wimg.gaussians, wimg.islands) if img.opts.atrous_sum: im_old = self.subtract_wvgaus(img.opts, im_old, wimg.gaussians, wimg.islands) if stop_wav == True: break pyrank = N.zeros(img.pyrank.shape, dtype=N.int32) for i, isl in enumerate(img.islands): isl.island_id = i for g in isl.gaul: g.island_id = i for dg in isl.dgaul: dg.island_id = i pyrank[tuple(isl.bbox)] += N.invert(isl.mask_active) * (i + 1) pyrank -= 1 # align pyrank values with island ids and set regions outside of islands to -1 img.pyrank = pyrank pdir = img.basedir + '/misc/' img.ngaus += ntot_wvgaus img.total_flux_gaus += total_flux mylogger.userinfo(mylog, "Total flux density in model on all scales" , '%.3f Jy' % img.total_flux_gaus) if img.opts.output_all: func.write_image_to_file('fits', img.imagename + '.atrous.cJ.fits', im_new, img, bdir) mylog.info('%s %s' % ('Wrote ', img.imagename + '.atrous.cJ.fits')) func.write_image_to_file('fits', img.imagename + '.resid_wavelets.fits', (img.ch0_arr - img.resid_gaus_arr + img.resid_wavelets_arr), img, bdir + '/residual/') mylog.info('%s %s' % ('Wrote ', img.imagename + '.resid_wavelets.fits')) func.write_image_to_file('fits', img.imagename + '.model_wavelets.fits', (img.resid_gaus_arr - img.resid_wavelets_arr), img, bdir + '/model/') mylog.info('%s %s' % ('Wrote ', img.imagename + '.model_wavelets.fits')) img.completed_Ops.append('wavelet_atrous') ####################################################################################################### def atrous(self, image, filtvec, lpf, j, numcores=1, use_scipy_fft=True): ff = filtvec[:] for i in range(1, len(filtvec)): ii = 1 + (2 ** (j - 1)) * (i - 1) ff[ii:ii] = [0] * (2 ** (j - 1) - 1) kern = N.outer(ff, ff) unmasked = N.nan_to_num(image) if use_scipy_fft: im_new = scipy.signal.fftconvolve(unmasked, kern, mode = 'same') else: im_new = fftconvolve(unmasked, kern, mode = 'same', pad_to_power_of_two=False, numcores=numcores) if im_new.shape != image.shape: im_new = im_new[0:image.shape[0], 0:image.shape[1]] return im_new ####################################################################################################### def setpara_bdsm(self, img): chain = [Op_preprocess, Op_rmsimage(), Op_threshold(), Op_islands(), Op_gausfit(), Op_gaul2srl(), Op_make_residimage()] opts = {'thresh':'hard'} opts['thresh_pix'] = img.thresh_pix opts['kappa_clip'] = 3.0 opts['rms_map'] = img.opts.rms_map opts['mean_map'] = img.opts.mean_map opts['thresh_isl'] = img.opts.thresh_isl opts['minpix_isl'] = 6 opts['savefits_rmsim'] = False opts['savefits_meanim'] = False opts['savefits_rankim'] = False opts['savefits_normim'] = False opts['polarisation_do'] = False opts['aperture'] = None opts['group_by_isl'] = img.opts.group_by_isl opts['quiet'] = img.opts.quiet opts['ncores'] = img.opts.ncores opts['flag_smallsrc'] = False opts['flag_minsnr'] = 0.2 opts['flag_maxsnr'] = 1.2 opts['flag_maxsize_isl'] = 2.5 opts['flag_bordersize'] = 0 opts['flag_maxsize_bm'] = 50.0 opts['flag_minsize_bm'] = 0.2 opts['flag_maxsize_fwhm'] = 0.5 opts['bbs_patches'] = img.opts.bbs_patches opts['filename'] = '' opts['output_all'] = img.opts.output_all opts['verbose_fitting'] = img.opts.verbose_fitting opts['split_isl'] = False opts['peak_fit'] = True opts['peak_maxsize'] = 30.0 opts['detection_image'] = '' opts['verbose_fitting'] = img.opts.verbose_fitting ops = [] for op in chain: if isinstance(op, type): ops.append(op()) else: ops.append(op) return ops, opts ####################################################################################################### def init_image_simple(self, wimg, img, w, name): wimg.ch0_arr = w wimg.ch0_Q_arr = None wimg.ch0_U_arr = None wimg.ch0_V_arr = None wimg.wcs_obj = img.wcs_obj wimg.parentname = img.filename wimg.filename = img.filename + name wimg.imagename = img.imagename + name + '.pybdsm' wimg.pix2sky = img.pix2sky wimg.sky2pix = img.sky2pix wimg.pix2beam = img.pix2beam wimg.beam2pix = img.beam2pix wimg.pix2gaus = img.pix2gaus wimg.gaus2pix = img.gaus2pix wimg.pix2coord = img.pix2coord wimg.masked = img.masked wimg.mask_arr = img.mask_arr wimg.use_io = img.use_io wimg.do_cache = img.do_cache wimg.tempdir = img.tempdir wimg.shape = img.shape wimg.frequency = img.frequency wimg.equinox = img.equinox wimg.use_io = 'fits' ###################################################################################################### def subtract_wvgaus(self, opts, residim, gaussians, islands): from . import functions as func from .make_residimage import Op_make_residimage as opp dummy = opp() shape = residim.shape thresh = opts.fittedimage_clip for g in gaussians: if g.valid: C1, C2 = g.centre_pix if hasattr(g, 'wisland_id'): isl = islands[g.wisland_id] else: isl = islands[g.island_id] b = opp.find_bbox(dummy, thresh * isl.rms, g) bbox = N.s_[max(0, int(C1 - b)):min(shape[0], int(C1 + b + 1)), max(0, int(C2 - b)):min(shape[1], int(C2 + b + 1))] x_ax, y_ax = N.mgrid[bbox] ffimg = func.gaussian_fcn(g, x_ax, y_ax) residim[bbox] = residim[bbox] - ffimg return residim ####################################################################################################### def morphfilter_pyramid(self, img, bdir): from math import ceil, floor jmax = img.wavelet_jmax ind = [i for i, isl in enumerate(img.atrous_islands) if len(isl) > 0] ind.reverse() lpyr = [] img.npyrsrc = -1 if len(ind) > 0 : for i in ind: isls = img.atrous_islands[i] for isl in isls: if i != ind[0]: status = False; dumr = [] for pyrsrc in lpyr: belongs = pyrsrc.belongs(img, isl) if belongs: dumr.append(pyrsrc.pyr_id) #if len(dumr) > 1: # raise RuntimeError("Source in lower wavelet level belongs to more than one higher level.") if len(dumr) == 1: dumr = dumr[0] pyrsrc = lpyr[dumr] pyrsrc.add_level(img, i, isl) else: pyrsrc = Pyramid_source(img, isl, i) lpyr.append(pyrsrc) else: pyrsrc = Pyramid_source(img, isl, i) lpyr.append(pyrsrc) img.pyrsrcs = lpyr if img.opts.plot_pyramid and has_pl: pl.figure() a = ceil(sqrt(jmax)); b = floor(jmax / a) if a * b < jmax: b += 1 colours = ['r', 'g', 'b', 'c', 'm', 'y', 'k'] sh = img.ch0_arr.shape for pyr in img.pyrsrcs: for iisl, isl in enumerate(pyr.islands): jj = pyr.jlevels[iisl] col = colours[pyr.pyr_id % 7] pl.subplot(a, b, jj) ind = N.where(~isl.mask_active) pl.plot(ind[0] + isl.origin[0], ind[1] + isl.origin[1], '.', color = col) pl.axis([0.0, sh[0], 0.0, sh[1]]) pl.title('J = ' + str(jj)) pl.savefig(bdir + img.imagename + '.pybdsm.atrous.pyramidsrc.png') ####################################################################################################### class Pyramid_source(object): """ Pyramid_source is a source constructed out of multiple wavelet transform images. """ def __init__(self, img, island, level0): img.npyrsrc = img.npyrsrc + 1 self.pyr_id = img.npyrsrc self.islands = [island] self.jlevels = [level0] def belongs(self, img, isl): from . import functions as func # get centroid of island (as integer) mom = func.momanalmask_gaus(isl.image, isl.mask_active, 0, 1.0, False) cen = N.array(mom[1:3]) + isl.origin icen = (int(round(cen[0])), int(round(cen[1]))) belong = False # check if lies within any island of self for i, pyrisl in enumerate(self.islands): if N.sum([pyrisl.bbox[j].start <= cen[j] < pyrisl.bbox[j].stop for j in range(2)]) == 2: pix = tuple([cen[j] - pyrisl.origin[j] for j in range(2)]) if not pyrisl.mask_active[pix]: belong = True return belong def add_level(self, img, level, isl): self.islands.append(isl) self.jlevels.append(level + 1) Image.pyrsrcs = List(tInstance(Pyramid_source), doc = "List of Pyramidal sources") def fftconvolve(in1, in2, mode="full", pad_to_power_of_two=True, numcores=1): """Convolve two N-dimensional arrays using FFT. See convolve. """ s1 = array(in1.shape) s2 = array(in2.shape) complex_result = (N.issubdtype(in1.dtype, N.complex) or N.issubdtype(in2.dtype, N.complex)) size = s1 + s2 - 1 if pad_to_power_of_two: # Use 2**n-sized FFT; it might improve performance fsize = 2 ** N.ceil(N.log2(size)) else: # Padding to a power of two might degrade performance, too fsize = size if has_pyfftw: IN1 = N.fft.fftn(in1, fsize, threads=numcores) IN1 *= N.fft.fftn(in2, fsize, threads=numcores) fslice = tuple([slice(0, int(sz)) for sz in size]) ret = N.fft.ifftn(IN1, threads=numcores)[fslice].copy() else: IN1 = N.fft.fftn(in1, fsize) IN1 *= N.fft.fftn(in2, fsize) fslice = tuple([slice(0, int(sz)) for sz in size]) ret = N.fft.ifftn(IN1)[fslice].copy() del IN1 if not complex_result: ret = ret.real if mode == "full": return ret elif mode == "same": if product(s1, axis=0) > product(s2, axis=0): osize = s1 else: osize = s2 return func.centered(ret, osize) elif mode == "valid": return func.centered(ret, abs(s2 - s1) + 1) def rebase_bbox(box,minv): # return a new bounding box tuple where minv is subtracted from # all the co-ordinate values nbox=[] for i,sl in enumerate(box): nbox.append(slice(sl.start-minv[i],sl.stop-minv[i],None)) return tuple(nbox) def merge_bbox(box1,box2): # For two bounding box tuples find the minimal n-dimensional space # that encompasses both structures and make new bounding boxes in # this co-ordinate system minv=[] maxv=[] for sl1,sl2 in zip(box1,box2): minv.append(min(sl1.start,sl2.start)) maxv.append(max(sl1.stop,sl2.stop)) nbox1=rebase_bbox(box1,minv) nbox2=rebase_bbox(box2,minv) dims=[y-x for x,y in zip(minv,maxv)] fullbox=[slice(x,y,None) for x,y in zip(minv,maxv)] return dims,nbox1,nbox2,N.array(minv),fullbox def merge_islands(img, isl1, isl2): """Merge two islands into one Final island has island_id of isl1. The Gaussians from isl2 are appended those in the isl1 list, with numbering starting from the last number in img.gaussians (which is also updated with the isl2 Gaussians). The merged island replaces isl1 in img. """ from .islands import Island import scipy.ndimage as nd shape,nbox1,nbox2,origin,fullbox=merge_bbox(isl1.bbox,isl2.bbox) mask1 = N.zeros(shape, dtype=bool) mask1[nbox1] = ~isl1.mask_active mask2 = N.zeros(shape, dtype=bool) mask2[nbox2] = ~isl2.mask_active overlap_mask = N.logical_and(mask1, mask2) if N.any(overlap_mask): full_mask = N.logical_or(mask1, mask2) image = img.ch0_arr mask = img.mask_arr rms = img.rms_arr mean = img.mean_arr rank = len(image.shape) connectivity = nd.generate_binary_structure(rank, rank) labels, count = nd.label(full_mask, connectivity) slices = nd.find_objects(labels) bbox = slices[0] new_bbox = rebase_bbox(bbox,-origin) idx = isl1.island_id # labels array passed to Island must be capable of being # indexed by new bounding box, so convert. Do the subtraction # first to avoid an expensive operation over the whole array labels = labels-1+idx new_labels = N.zeros(image.shape) new_labels[tuple(fullbox)]=labels beamarea = img.pixel_beamarea() merged_isl = Island(image, mask, mean, rms, new_labels, new_bbox, idx, beamarea) # Add all the Gaussians to the merged island merged_isl.gaul = isl1.gaul merged_isl.dgaul = isl1.dgaul copy_gaussians(img, merged_isl, isl2) img.islands[idx] = merged_isl def copy_gaussians(img, isl1, isl2): """Copies Gaussians from isl2 to isl1 img.gaussians is also updated """ if img.ngaus == 0: gaus_id = -1 else: gaus_id = img.gaussians[-1].gaus_num for g in isl2.gaul: gaus_id += 1 gcp = Gaussian(img, g.parameters[:], isl1.island_id, gaus_id) gcp.gaus_num = gaus_id gcp.jlevel = g.jlevel isl1.gaul.append(gcp) img.ngaus += 1 img.gaussians.append(gcp) def renumber_islands(img): """Renumbers island_ids (after, e.g., removing one) Also renumbers the pyrank image. """ pyrank = N.zeros(img.pyrank.shape, dtype=N.int32) for i, isl in enumerate(img.islands): isl.island_id = i for g in isl.gaul: g.island_id = i for dg in isl.dgaul: dg.island_id = i pyrank[tuple(isl.bbox)] += N.invert(isl.mask_active) * (i + 1) pyrank -= 1 # align pyrank values with island ids and set regions outside of islands to -1 img.pyrank = pyrank gaussian_list = [g for isl in img.islands for g in isl.gaul] img.gaussians = gaussian_list def check_islands_for_overlap(img, wimg): """Checks for overlaps between img and wimg islands""" have_numexpr=True try: import numexpr as ne except: have_numexpr=False tot_flux = 0.0 bar = statusbar.StatusBar('Checking islands for overlap ............ : ', 0, len(wimg.islands)) # Make masks for regions that have islands wpp=wimg.pyrank+1 # does not change, store for later wav_rankim_bool = wpp>0 # boolean orig_rankim_bool = img.pyrank>-1 # Make "images" of island ids for overlaping regions orig_islands = wav_rankim_bool * (img.pyrank + 1) - 1 if not img.opts.quiet: bar.start() for idx, wvisl in enumerate(wimg.islands): if len(wvisl.gaul) > 0: # Get unique island IDs. If an island overlaps with one # in the original ch0 image, merge them together. If not, # add the island as a new one. wav_islands = orig_rankim_bool[tuple(wvisl.bbox)] * wpp[tuple(wvisl.bbox)] - 1 wav_ids = N.unique(wav_islands) # saves conversion to set and back for wvg in wvisl.gaul: tot_flux += wvg.total_flux wvg.valid = True if idx in wav_ids: orig_idx=N.unique(orig_islands[tuple(wvisl.bbox)][wav_islands == idx]) if len(orig_idx) == 1: merge_islands(img, img.islands[orig_idx[0]], wvisl) else: merge_islands(img, img.islands[orig_idx[0]], wvisl) for oidx in orig_idx[1:]: merge_islands(img, img.islands[orig_idx[0]], img.islands[oidx]) img.islands = [x for x in img.islands if x.island_id not in orig_idx[1:]] renumber_islands(img) # Now recalculate the overlap images, since the islands have changed ipp=img.pyrank+1 if have_numexpr: orig_islands = ne.evaluate('wav_rankim_bool * ipp - 1') else: orig_islands = wav_rankim_bool * ipp - 1 else: isl_id = img.islands[-1].island_id + 1 new_isl = wvisl.copy(img.pixel_beamarea(), image=img.ch0_arr[tuple(wvisl.bbox)], mean=img.mean_arr[tuple(wvisl.bbox)], rms=img.rms_arr[tuple(wvisl.bbox)]) new_isl.gaul = [] new_isl.dgaul = [] new_isl.island_id = isl_id img.islands.append(new_isl) copy_gaussians(img, new_isl, wvisl) bar.increment() bar.stop() return tot_flux PyBDSF-1.10.1/doc/000077500000000000000000000000001420247104600133665ustar00rootroot00000000000000PyBDSF-1.10.1/doc/Makefile000066400000000000000000000127051420247104600150330ustar00rootroot00000000000000# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source # the i18n builder cannot share the environment and doctrees with the others I18NSPHINXOPTS = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) source .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " text to make text files" @echo " man to make manual pages" @echo " texinfo to make Texinfo files" @echo " info to make Texinfo files and run them through makeinfo" @echo " gettext to make PO message catalogs" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" @echo " doctest to run all doctests embedded in the documentation (if enabled)" clean: -rm -rf $(BUILDDIR)/* html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/PyBDSM.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/PyBDSM.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/PyBDSM" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/PyBDSM" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." $(MAKE) -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." texinfo: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo @echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo." @echo "Run \`make' in that directory to run these through makeinfo" \ "(use \`make info' here to do that automatically)." info: $(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo @echo "Running Texinfo files through makeinfo..." make -C $(BUILDDIR)/texinfo info @echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo." gettext: $(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale @echo @echo "Build finished. The message catalogs are in $(BUILDDIR)/locale." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: $(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest @echo "Testing of doctests in the sources finished, look at the " \ "results in $(BUILDDIR)/doctest/output.txt." PyBDSF-1.10.1/doc/anaamika_overview.doc000066400000000000000000000040521420247104600175460ustar00rootroot00000000000000 //_______________________________________________________________________________ // Description of source code tree /*! \page Anaamika Anaamika \defgroup Anaamika Anaamika - Blob Detection and Source Measurement The current version of BDSM is the Python version PyBDSM. It is currently maintained and developed at Sterrewacht Leiden. \section anaamika_code_tree Organiation of the source code The diagram below show the basic organisation of the source code directories: \verbatim lofarsoft |-- data |-- doc |-- release |-- build |-- devel_common |-- external `-- src |-- contrib |-- CR-Tools |-- DAL `-- Anaamika <-- Project top-level directory |-- implement | |-- fBDSM | |-- fits | |-- shaplelets | `-- PyBDSM |-- apps |-- data |-- doc `-- scripts \endverbatim In this:
  • \c implement contains source code from which a library or a set of libraries is build. The generic substructure is \verbatim implement |-- Module1 |-- Module2 | `-- ModuleN \endverbatim which allows for the creation of multiple smaller library (one per module), as well as the creation of a single library based on the contents of the various modules.
  • \c apps contains application executables, typically C/C++ (or Fortran) sources which are compile into a stand-alone program; most of the types these source will link again the library created from the sources contained in \c implement.
  • \c scripts contains (shell) scripts. Depending one the point of view, this also might be considerated the location for Python scripts, when drawing the line between code being executed in a dynamic environment and code resulting in a static executable originating from a compiled source.
  • \c doc contains all sorts of documentation -- user manual, reference manuals -- but also additional sources (such as this file) processed by Doxygen.
*/ PyBDSF-1.10.1/doc/source/000077500000000000000000000000001420247104600146665ustar00rootroot00000000000000PyBDSF-1.10.1/doc/source/HydraA_74MHz_fit.png000066400000000000000000030056601420247104600203510ustar00rootroot00000000000000PNG  IHDR/iCCPICC Profilexc``2ptqre``+) rwRR` ``\\yy | 2 U +'300%@q9@HR6. r!+ v.z H}:b'A2 vIj^ʢ#ǔTbϼĒZ@! A!ahii "q(v!( cd2f` G1G)I/15C}}sïPo pHYsgR IDATx uSLߔ"B"i T2E!LS*(9C)e$$cJsL9 u{s=>yzg{ٟӉ H@$  H@$  H@$  H@$  g$  H@$  H@$  H@$  H@$h(@$  H@$  H@$  H@$  H@ ʌe$  H@$  H@$  H@$  H@8$  H@$  H@$  H@$  H@F2#q$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ H\f;) H@$  H@$  H@$  H@$c@$  H@$  H@$  H@$  H`$h(3NJ@$  H@$  H@$  H@$  h($  H@$  H@$  H@$  H@ ʌe$  H@$  H@$  H@$  H@8$  H@$  H@$  H@$  H@F2#q$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ H\f;) H@$  H@$  H@$  H@$c@$  H@$  H@$  H@$  H`$h(3NJ@$  H@$  H@$  H@$  h($  H@$  H@$  H@$  H@ ʌe$  H@$  H@$  H@$  H@8$  H@$  H@$  H@$  H@F2#q$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ H\f;) H@$  H@$  H@$  H@$c@$  H@$  H@$  H@$  H`$h(3NJ@$  H@$  H@$  H@$  h($  H@$  H@$  H@$  H@ ʌe$  H@$  H@$  H@$  H@8$  H@$  H@$  H@$  H@F2#q$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ H\f;) H@$  H@$  H@$  H@$c@$  H@$  H@$  H@$  H`$h(3NJ@$  H@$  H@$  H@$  h($  H@$  H@$  H@$  H@ ʌe$  H@$  H@$  H@$  H@8$  H@$  H@$  H@$  H@F2#q$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ H\f;) H@$  H@$  H@$  H@$c@$  H@$  H@$  H@$  H`$h(3NJ@$  H@$  H@$  H@$  h($  H@$  H@$  H@$  H@ ʌe$  H@$  H@$  H@$  H@8$  H@$  H@$  H@$  H@F2#q$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ H\f;) H@$  H@$  H@$  H@$c@$  H@$  H@$  H@$  H`$h(3NJ@$  H@$  H@$  H@$  h($  H@$  H@$  H@$  H@ ʌe$  H@$  H@$  H@$  H@8$  H@$  H@$  H@$  H@F2#q$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ H\f;) H@$  H@$  H@$  H@$c@$  H@$  H@$  H@$  H`$h(3NJ@$  H@$  H@$  H@$  h($  H@$  H@$  H@$  H@ ʌe$  H@$  H@$  H@$  H@8$  H@$  H@$  H@$  H@F2#q$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ H\f;) H@$  H@$  H@$  H@$c@$  H@$  H@$  H@$  H`$h(3NJ@$  H@$  H@$  H@$  h($  H@$  H@$  H@$  H@ ʌe$  H@$  H@$  H@$  H@8$  H@$  H@$  H@$  H@F2#q$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ H\f;) H@$  H@$  H@$  H@$c@$  H@$  H@$  H@$  H`$h(3NJ@$  H@$  H@$  H@$  h($  H@$  H@$  H@$  H@ ʌe$  H@$  H@$  H@$  H@8$  H@$  H@$  H@$  H@F2#q$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ H\f;) H@$  H@$  H@$  H@$c@$  H@$  H@$  H@$  H`$h(3NJ@$  H@$  H@$  H@$  / H@$ !'"cǿwX`‚ .8M1 GQ׿o-Xo( u@]t0~@n mm+<D G C9$z (J뮰K:h|S]+Bulp̌veI5oy睓*$  H@6<}7Synaz~7%BWsv3A~߇^:K_פnj>qG}WgyqE Kfm򕯄?O},'>qLxʛHމy_>l摀$  H@$ /N97>0+ {B4Ȏ;)׿5OSn;%  H@=  $  H@ nGM]y>H/})*/~pIGTsSsfӊȉceLa_YnF-N*ʫ~\eCY)$  H@@~o3/vɼWIgޗ&O};ay"BLm㦢ƳD9dB[&;n5Y7{>7Öd2&3rݔxl{ryyKs9liϰJH^x׼&UWa`ƽ Y:/ɭ$  Lb$  H@k&y(V|c\0|衇~SO=5) P ^ 7p0O0Omr'6xA1<&JJ#8/ajsʸ{S^Wv/?2ʃ7xc['_<< 1W\1] sOek_?K. na~뭷^kǴe܁g\#?cv`H{na 'K,ܴ_yu]a]wM?OceKr[v}WA/o}XjR۸whN;i7^K@$ /7{#7)|齖w[z_`sT7aiۤnsIOzRg<a_jhRx'e~񒗼$}msyeO~rxG?IS5@^B "?O4'`^@VXap4po~[ou)ǜ_zcs:4OS ]<ܞ{e`1bj~_bs0YgpE=[{Q-5X#0oF|ͫ5YkR_S% ϵ^;yo&kwWIB (cyۄ}Ԕ;rE.+cx·&mz/2a <@wrsxpO>r2^y`,g?۳SN9#z#N:v*mYQqЉ k_ڜu64Q0xUQyى5:Ф5o./*:Q:.>rӶmr6i4 :шۛ\JDc/ߘ6~D_m|Ӟ֘7ǖK?$6u`Z+،3)Ҹ`er_v~5 H@$ ʹZ!8t|3򗿌+#msꪫ* }a;jX6>`cyxݘFN4}|e&mq=9Tu|lvuUi9NЉ cmqhߘ,+w7qDcC7.DI-ܾ[n%]n)t1w4(曯*G(hL5jn,'tf͚Uh7c [VgM7~6Lߴtg~GOսV'a}W7V=&,=R_FyB LJ" H@Jw~Ej%VD6ebiu'lM CT QV[%o!<£e]<~<Qe%Rٲ+_JE䨣JVy\MtB;[s5S LKB`Ur3E>VJIo:mo{[x_-2-iqX٨mDYxa5+baJ80fYA?U]K/t8#k17**E9g=O 7g?#zUzUTj_8jՠwyg?iEՙ$  H@ rK+yfu_y!6!m-tx,#^VOx`~ Q[؏?w]ڊG <3l.7.HU=yOʏF1==o|$e!v?ywB<1J?WvxǷ- IDATiAŠ9s '܂H[FË '0+ i>I>R@7L'~#j*s\撔$W\qE+}ׂy>\Ac9&sz.w4J>`R_?~Cty͉t9IDÂtpXn }EwXr}+ృ&wߝt]ux X\CJ\ =Տ'U^4 ܷx ̵ghlh/=̗~e;ΪQVŰUḏBgW辺X`ď ԘmTBW:ǜ?[VI92X얨RUyVv$  H@Oyhgًhh0Nx" x]hQyGciQɣ ryf^gS'G =2e;Ż %3$!svؘs?OM^irڸ*/oo^$.ꊡjY *91vo<ɻs͖{N$ 9H@$ cUe +!zM+yrA<Ϋ"YEŪ:a +)1PZn-xZA26v5c~o5+k4&l+geQ^-jDFw'KctU7ǥ=/#H>Um;Az K5 ׁ1B)iu^ov3Q ޔ<0>, 2?xJ6Lʂw {&xmL Ԗ<̳4UupO}PPwݵiJ@G@C9b H@ W{TQT2_Vo0GY{$L̳Ҵ)͠)_{ަd=΂ڙ"0*w.8EoZg+k[\?gE.˻߱Brey\InA[J8on H@$ (?cحp Sdc:~(+= +&zI?Fm6x}E*HZk4` n-dY-~|]~2_3Yr([o6lS"baCV{Fǹν#to0zkBeNѓИd[=1>S7)B5Ic"/P+0DŽ`t:wuN#,iKbJ^.~!dtBU{dƙm2gi6 $\Y؉R8xN,Y͵$  H?^9&"elTʏ~Tϙ )-{kqҷЍ7PFef1!nL^+iYyNJ,rm|88=U@Rqc4; ϱsyK<,묳NmܖzPcOH@$  L`ׯoO wq4Ot؂";|6κwӲ-kVs~ۼGIs2 mb '8 !Xoo Kb(C-ws0Y-܂!2~pa,aALgsl7ߜCu-Ҡ-m{.1dFG60+##xjaͼIڞ s`c "m,AY]/ץ 6B:8层»Ca?LkS^\^$  H@>V[-` O|"b?1ca9B Қ*^_oue}<<ޗyOGǜ{g=И߄p:.g%q4 d3c2 +~S~]}u(W\qŞ֜m;1SeMJF\l=k쵵\?I ud@i&72M6iK?sN\BXxQ/57Uҋ鳡g?a} G}t,BH9(IN^iJ8ށ0)Cžw?I@"̺F$ !a&|ǥ0At˶f-ڶ&l93yUXK8m2iʗ_~a-L lY{0.J|3Iٲ<1;I>b%¬:C OH-|pV"t៶1UecC1Jq'=  H@$0)'|rrGV!/e?6tAOa&J+@{Fwɼ/C{yO9,B 04O90Om\y`ϵ/ G08o"w~9}6p0є3\9R'SoWO~P2My QyM {2_elͪ[ ě^<{|ϱ21Br(WQacu٢0A&VAM6M0<蠃*#>lz衕oEY$b LjJ6^J%c׊β2Ty} H@$ m?O 6{+Ҝ~V{#U|K_Jr/|2){MzI?i^p)7v W>eM0&Oh&j2!tq/0V_%  H`w7J@$ xVk~KBivh:t/| S^_uUrtw]5WmQVaZH8BZMmk *Kr:$  H@뭷^=/pf)?/hݴ5'l!W(#~d$-l]Oz l]mҋS[^I@#̻&H$ ! 1V̼MoP!->Vd?jԐMvvUE"iSO=J;wʘm EV^xᅳ0 _n e`=<ޚNgyf}fLsK۳_y>W$_Mz*$v𤄷Z$򽅑&"y\=ifp]|ō] H@{h(3\K{" H@@ V^yt+lA馛jRC\rIxS# oo}caǺ뮛S2v8'p?L̗S^>/3OSVe%\tAⲩ+yiq1*0gUk*Ӱ/#(}1ajMyܖs$  H@ VrmH> wC"{BP>Pzu~vk5ֶ}nb^*׿j*wCIEmu_ R{8g &;&c QfQ2UO[ne9'&aL]v})c➺[n-eӓ{q wePg1~'tr6.B!{aQy4& tyP7#8"y_pE^{5P}믿~ |+2xXuUt]gEGygƓNj^IP;1{oLxW+e쑣̦۰Ĉ`z! ,2HN]tQG#,)` mc^C:ԏ'o10ğJa kַc`;^:>'`PS3 0eǶm+xvg,N %pUhBOs_#[m'?dPQ 7q!-F%uR>Of'O#}]>-X ;CM^`/y&y9e᭕0\X\E# "KVXd*<0`½ /'Lx"c(%7ĸIy{aYSkXD#%\2e?a tGxMQtC]yߟBem5 VPå^ckl' H@@L)$  H`'=dt,l{cۉʧNTrNr5-'bJsNTTisC9-+*R'>磲*#*jo6R6*5:S{?*T:Qq\.y'Gem><,'NU]qnm|0*R<FZUfT4KW!u2J͈-\'*:ѝqJ[⪮Nn[]YQYډF9dYc*jm[YGTf$  H@@97)rG#N{5{Zj\wyZO܉S4b\Ye_9d UY串8Www*][o1syLY7pCk\|q2XTŏٍE]wuU:um¼03zhHTim40WRRWaLcYЇrj;k֬N4:i̓Ty$g u;1C:9m۶iHqAkzfD1 :msN4j.tuycqqK'z}m,Xh`҉4uzk MP1rr :}^F2o7QVn罤}IUew5my֥>= 3|ѐAf?ϥYyHr-i",p[sE$  H`bxGkw ^:Xg<򗿬B>Mwiw6/i`Ѡ$y4+*ϚFC@(Z>wnwC>sYMﹼӟxF@f&- ,X Oy% PB9S z7z=?rHe 6:+y<#~pNs6(oa$GuT|^E:D眞60j2GPwN4o. /;'tRx}8w!ѐ$͕dT[p'3^)0-6ձi*87G}Nph?,S&i-.boC[$x3E;;3㷯x~f>\Vݼv4 ku็V u1%뜟v9眓F"4coC Rsg,qN%g0BX Y?ϩHpoV _M2:}04J>Xrə1q# =kH@M`{.z H@$01=^an&V'mFx\QLd3) FTpܯJW$  H@ཌ+|㽬2G$|tE;3d &-oS>ی'SOS^zg{{C\/)+{P 0HA+s3ϡ'37Gg*egggm;zT״~ 0b]No:|1g󴎗$  H`4>SK$  H@SJ$+ʢd{6(;sZFY*-E$  H@.T6xn& H` ! 31t8S'iު$  H@SN%S $  H@`.EtwNVJ#tSߗ\rIrc܆lД$  H@$2 '0)(֬f gҙP|$  H`n#G H@hx2,6|k%X"Ot=>ÙXӬZTFWŌ+=)OI1ډo9!DH@$  H@SC{İۆWSSJ@Byc==3%/,Z$0{h(3{[$  H@% ejO"!kQuw`(ۋ/x8&lҚΓ$  H@$  H@$ Q (\e( H@E`֬Y+_}?gbUVY%:i#m&\p< 4yns9'saNk_ l5b7_~yz뭫q8eY$  H@{7\='Z*/~qXb%Phw+x≩,\ZO1>>O49묳®Zz׽us@mTXguwxTU3p\sMp [nXf`f$ $Gm]$0r=3Hf/+@UJ nIO~p饗SլJu<&A W\qE T̈ H@Hͼ~aK,}| [+8CSwso%0Y~x*OF,jWy΢<\rI[rI@f+ ef+~+$ ^~߄?aۻڿo=) .Y9H`&@q泟l efE V]uհf.,|fjL H@$0;dvs"2ˤ0?p Di:fV"N8!"9:of @֗l= e`Z}{%/yɐZb1$ wY$  H@drX.\e"|ק_|죝3 ^;MwlFM7tq̑ge y#;a%  H@+ 0~^V`@o1/֦x.lO'!駟Nno}JJ@&@(=3y #uî$  H@PfZ$  @SOM 4!/˴iEIIYՇ[a嗯VOHmIpw]ZFg/~?t#d2qJH?OLqӖw7gL)V_W5Q0k`G L{øe\< OTyfewߝ%\2ܳ5>05{o|3 .ã>Xb4YlJr >`OuW?tҘ7_q̶4G[>6<P:wuW5$  H@*^{m8sSxi3nsNBӏ s݅^8;>q'딥asJm|yܠµg 1w_jߠeTۚkL9Eg}4Usz/AYǽJ]}Bv}OmfL)qq5פd{~EebZmC /Nr,P6۬8cl1W/zaYk*O4@ɇ;_~y:U(z֥0r=Q+B3,w꠮EfgL!ڏ7|g'*rǤ-UcԸ0?g<cCb-90a:W^yem]8=/t'Ur^洫zg}Dcq?}-0cuϑa|:K^T9y)*uvb8q0;;ĸHߣQ*_jm}Lyheޠh@Tq5rUWuGt }g>keZenn&.l67eE|2O:e>5W :̹sOu]HÌyruYcҠoC_nNE6c>g~KQq_'zm?E[IvTוK6|άYZң;%K3ލ9nuejyŅ,̄mӵy+_;..I@f H@L#7.(`*o:9*m2eLbLWo֭@ys/'Pq  &zZkG.IWq5?r{a[Q7Qk@ˣN:))xJ,"߯~9O2Ύ8qVN˘18^r-4(ʲ`TiӞmi(s}ubr>_0-C BSN9e6[ PN ǚ䢋.mU\v6o*x\%n0o{6R&n)՛a0;{_CýmڢeGM*k5׬$  H@01yOP~ӻSq>6Ka(ǰ MH?}8.-s >>4mwq\ou^WgL|NQADo-i.42\>/}i9b<M6٤vE/0uEuvѳEkzd.eUgm(Â^ʛ޲ m.iKcsLT[C:AC:)o݋KXTѶ}NRqGצ)bi}cuӱ~ eX}]vo:ô矿g^P'vr]tu=& H@j H@L FI%IetћF'?~&׾2B_Jb?~n-SHZS$ )!*`_@"Ŕg[o }3zkIr ~ QIRJ%\Rމ+xBpgB-֛Qy0&y\5"|Nakr-$7cwJW&c2?+c\4Ge^@W9r`)͗tŦnk:O̓t^yS]PM>]E ad"Bȟ$erwqBpEmm݆DľB1&K=ٔ~h\X-zi^L'0GWĸd؛"œ[陓g/{5?8>1Im\]m(9ge^Q|MᕢCUn4ՍٖM9\66r ,ƔP'mGB^1J9ԧS(ʟ}j3,nL%"X]=cyVC>ꕧ^e;?'pOu}B($Um[ؖs$  H`ߙ3l!4M\Z,Ѩ$PhPseսuwǛd慇6].m/2xi{Gq I{*Q뤜_>?p_;4' )s6f֖\\Pmvehb|v['3}j\1. a2/t=uLh_L3oW5նTgR?=gU_#<uOd9tvY:^6t,y|7͡KH4+w §ìNwtLG6 #:ˣLHMᙣKS1N7CO$  4zS+$ a`u 18Y4+HĬk騐 0)iuU(+bN%6+𜁰B*M<YL=K*iXa]4QV´f'ɢaG&BcLw+y. kVMMo/%C2.D%J}UNuJsezVD-2q1u5Y}G^*W);覼|31搨M۶X=L,\/VYF|>TmyVİ`wTh@WwB+% n${iK}/VxRAQToLaV;3sw ^zÁ1׫'DiۏGq'xbcz$~` IDATJ+cH<)$  H`v(;7xhޏ^X3xJq=yl}o8Y^-x$TLy\+j \%ܼ}5xR7]̥ۤY[sxҏ^&ewGi2JANOqa@: T^nrZYQDŽkɹM%{ɿ $P}O;{,0oó ^rxH3LW ):\aƘ^Yh!+",= 4oX>$ϥH@0 h(3L% H@qИ.K{a" [m[֤rBM`cv)%He8OX:A )~RWc4꾦(H MBH\@>(_ T7"QO\@ؿddwn: uJLK(AK_RWS!Ί!B!*AW \ʫgF]_a>Dz6c2MD$  H@{}&? &*̛'ZGΗyG$T cl>l.dagӤA"9Cuz(mBA!S`@  @`=ͦc7[ՅFKɐcgBl`m(`7 \gm7m{"!Sوn}̗TVe`?G|z p9mN9Tg֖׹`WrK@ZI@F4-JBr8,K뛉 kq'xiQ+L1@$yEe,8qs-J+ ޻YGZ:Zx܌-bu]W?{pd[t+ *@9e 1S?q ^X=y6KSBtOA'Ȗ6\r%q %H1YW7t~fo=ui1|͵s؈~+$  H`: OASxqҔi󡕹6x @[Lݭ8c O0g>{!7Hs XPm/mm;3 23[Αˏ1?eIC` ;p9`;7%^g`F.nߍYѶ;/;m¼? <+Jv=[pff$bpuư麟[b04x]w Eb%mϿaqz{N;6.,9K}8Ϻt b}c׸!yIn)(ޛzյKTE ZWa'E_3΋B{X$06M2 H@I\!G| ĸIO)m)]y<)(>XJ`V:x2[(â2|P@ﳝrk鹚/e[އ_zZ2J@$ a p^AJcyi *{[cyi׼)_8m=1a×6(y;駟^&?Ц믿~2"055< e!4W_23 nQ,6={;=+2F2ӕO-?B']`d/1lO8ᄔc1WIO-mJ7=7XEm(p.R9n>_R~uV*'u*WK@2Ez$  H`d (|%+PP0G :<ı[_Gt-z( 'Y zάXɫ0ajW? R/2e8^!rykUrtͫ{ʕYVVMi8㌰n(JVxa1ɱ>9ϰ< R_ens||rQ}сmB}'^iL׻Tj ,/ Xr#9‰"ZEJWN$s/r%p]f"uG$  L\zyv>7|cf(P<y 80^7"y׼yL&z <Aީt!x=y]y,5^xa5%Dg?ƑG7|;YT8yfw';vefE㏯槃v>e;vqV_Acy~?˹;y&*+LfRK'.sL*O2̏0#r؄6 зaT㎀j$\t?+y9眔EKoy/ rܔe6Og]Mm9D,$ aPfD-OF@}s0eejV0o J%+4Փ?N:7)޺aɕ`! ^>Qc~xRAP ˛k""_^t(KO%xȂⴗq{Tsu2%[]y@6"dksUy|H pUW(XmɊ, nO;g?\ypnº2Pԕݟ$  H`hy!|O3oez嗧EuyRX}#2}/%މ n!t(xC*7x -xs 5A@0Ü:! t }{_̘0< 8}@/ç&4i&_O~rE5wO^=1XOOQ-A3̴Z+qCu2@{POuB8~i/zGxJE0̩3* F9ЇR~(ӂ~!M^,o^cy[<$  Ly"둀$  fJ6a\4j2īnʱ9}l}(LjUCP`̱Y,/}K+4^7<.1.+=yK:V);lpJ5v]w*UrfgVJa9!>{S_$N^(~{U_N2 =6ssو|yAZn[/W>_e/kC|-PNZ/KƣX65x[ .@u:PTki ݵe{#3{"we#MFa.psL9ugkTεQPo}[ϑRf>'}8{5-_nggk_9'>̢_&{.Yϸ._tNfƔs<"GuҋX> ecR]V8bvD+_&N|rA /=1 my;in1g_tNfsnvq0Bx2F -oygê=Jpr=N:80[?M:ς ]:=|35,v85Ձ@u:P xc.瘑 op䘏 >8~~3ur֡ܡc7.g8G ୲\?Y/^<u{i~2u5'ǣ̏cZΝq| ?8;dp #os~?ǹ wMd:+{y^׸!{1=\ҳ=2Ǯ{v{ZՋYF֚cg>sبG>r<uX?H^cV\)0w֬E+w=af >㿸sB 6jO>Xs:^w~狃aX?\To̎o&~0ĝG9#Ѹ`|a_ g}y>?8?ys 1\>v+w \ &"s=KZ99O/N@s9㏭Hjo@g'ХBy gd)P0gRE9ANoܛ={ivgv{;Ukήyd35GR*#좠- (Eu:PTՁ֗[>봺?m52*g<2B,g}f,<]evkcm]=siE[f m?Hex26 1w;X_.Hu!.:]%-()>.S9j0&ZlE'^gz/&^z w◻<_{!>sxȯ+y/ٲhݎofce_߼y;wiǃKKl5}_ʱQUq IDATK^U{m\̛S~ 2|K<_ KJ/z9KWTՁ@u5; 84s֗q<[<˱w= GzDŽ<E猏N5{q\V9bqkPzq(uqc9fmn1$Ǚop' : cvo3S 53jg鸳ZcYۻ<9-w@azež~84guww'2jk˪cp'˝hwdOՄ5dyrW9$zC882zwO}f{ͧ$Y4Xz6yzKn{>{6޳ ֜}fmȚ6OF:u=ka>?zo>3 NS9Ǭ!ì+ k_w/6if OHjw!A4E/t;-r+[u:PTՁ@u:PTՁ@u:PTՁsu9TՁ@u:P8ꨣww+=#3O8yW2}ƮہO~cQ[׸5n/},1usu7ů?1/5fOlsf Pjb諌.kAcm)[31|\`s[9m҈2t"|Jkc@e[ٷ7W֋N9K ԧ>|?1y}ww~w:^gc1꒚x-v?:t|SM]Jjřx_?~f_ /k&Tl6m/hpq֗Tc3G/7C {L4?ύθ59>mqʭhrԞLQ͛sd8?iO'·yUrY|]88Æ\: Y&wϾ~K_Mδ_p]o/SU`2zֳ??Vf_rE.2zӚ۷X۾E/o 7 Ǽgyf;5}rrb1vjE=!ßo2\<'c/x ]d>5ӇNp~4?O_鷆gz:{zv>P70nsی aGk1 1GaC}~e>sZ2\j`d~mI=rT6_jCA\Ne(^?^k;7+Ρ|?:.`ؽ:ptª}{e/{#hm~p򗿼t}QO;o||`\_s{&y`ߑ  QQvuws(z*Bm0;W<~z'.㓆KgO\pXs;.o )Í;Ùgy)6qem#?b~;odbá!,6=aةۼPlL?cKnebgVP,͉Mly}k[r[KO T6'ߛflmjiSGa baCkxl@禱Py䩋8Az?qcX&hnY`Y|Ʀ^xG?Axuu%c)5\t@~1Zj.Z:=_7?cˑ3'22_ vOGl1G#k7=G׷UwmȱWUՁfw.~u`?, e_u>|/pk]kx<:0I=V^ԽEG/EJtƶ~w1D!ÏE 2v#g5,-ҴG!hkH^9)`Ы1_pRooKo9{1=*2iqB }/)9KJn*c[|`{yz9qG;WMam0#yuIP'Voms"'Ϝ[_qQn)Vmƹ_!um4kjscs?տE}@uw]:#x _8\ W^׽u{.+_]c(YzQCG _p;q?aN.\lřZu8זoSX~ @Uz0O;k#8/cמ|e#s+{Rb+:C2SOml3?W;̯4cѧ n''ʽnk5G~֎=TvCv?Jn`8g#Übr{y} ~=k[p^;uY#1xIU'Vo)Kԡwk[G21b3@u:Pԅ2PXs/p7xk\2RwLԧ>5~ G.xWU]j]գ淽mSN9eJzԣƋb;|3:ꨁ[~8e;;>GЛ;}[[׺ͥ2>U @{C|:O(z7x7|k|bru~><3^?|>[[pmnp&.;||`xOY5ؘ@iQ %59!Tͩ_3#}ӆ-knl=#lcC>kTnokV޷7э;6{LߕЇ}m\~rLNiL]LCE2GsՃ>x|\,d.:Ycr!˰wv}B;W'H۰1mUA݌eߺAU_:xՆ.~G-m=<ݽӇn i6Gu^\DZu u8DqĴ:mI>oPM]˷șȜ yaHSomZ6%aݙK\}׷ǭ+'5IsGYq2#&ѱыF ʖAw~ _(zq;<M 6.5Y?4c/bsm6P]̑=;:6z (G6kgŦU6?8֫-6eyC;t?N~9Gl⨷Fu:P3 eΙW =qÃ᠃Ɨ{^wOmB]2< Oj"f'1?pxᇏ}u3pAsuVEy pB9~aC1WH}ƹsQ a9uCf*͛u-͕>bNӧ|:zu7dZ}{_FRi;%Prh*C? 2} ~Ձ3w|⵾,!}9 N=qHY韼꠭=4gҌ[S&tM~R1̕VglSϚGV'~;_6sуQ;ÇC=t~sg? oy[I$q'?E2i}^ᳵG=oxU_k=v wެ8ڠI{kn>o?Wylvد~6\wHNᤋ^b~N]ܿ23{x/3f6gNk5AY:'.zyҮGN=GXST} =s,z Z* [Y6sNn8Uq<#}L9rç_蛺I^Xg)+<ؓ^dGlWly(FnG pNhG/}R#3nO.q+etM~R12T_cSg#f3ZVMҷ~%WՁw.bu`;pm!=yxlw /Y4a ~_}?/xhg՘{OXxc߀d@txl#e{'8虃zޘqJ1Zyv_lbԨ ϖqѹ{w\*|}=:ŠyLts~谷Ø@MāN~`Sg$oxOSzyT ةr.'@}R}t8C%.1<яl|s6>%{ w>BώO]O#W'5o~6{{Up5^s}sŶӿi ̱ioҴm&}P7s;7F2qW8(mLO'uBNY=5$O,rkkVo/"`hzbw20!q/>3ǘv(3G--N^9h/ZTׁPfz[ՁMooʜ|oɭow9BN:iٿۿ+n.@0P.Z Pd]YŐRƥ\;hG@g/s&O;C2z?vƦ՞'nkym?-`fWL6.s`woX)%}V<8e.y̳Kj։Ϣa}hC?m^=4_cl}1d1~mIeN}Xe)~˜bKxsM4}ZRs/v&mHKڔ~a <N4153"g Sk,:cVoX2~_ Y;n<w e?D=s+^]l;V>MU׶{|=:cNjP2_< ^%OpvN7̹gqOw 8|" [fk6gr IDAT }IZ3?^Ze2.T08IԖǫOz9rS9{yËIM mRqM^Vg.֐Cj TY6ikN]rujmƤL`pX,ItI?Me=#P{՞9-cwӑ5$=OY?{λkL&>5Yl_Kg!5ڬկUrPO{,7RuXtǿ7c.'׼"tN}bHYu9gb,/5p~M7/5˧o:2͘l>МsP>`9Gt3Z[ ;4.vKð^9iS'rƠw~RFȸ}_{7Es]ru[ϳGK9t ~q,:>x[wx|4DΗdw|}s:pG׻6Pe/N8e/O`׶%JWRk>x8Cu kͼPG޼ o[T)co:JnM?|CG,<;2Zf'.9iv1s}qfVoN|f|yg!t/ԥQ<7S,Ǧᗲ9=sOh'6>?*6>8q`w}˛R5_ѫ_[/R $&K*n|=16We\Ϯ]ӳsιC[Ux']%.6Kѷ6kgqS~`dS׹u*/rw}s .瑭5Ձuzlp˻q6խx'>q>v8͍g1_WGCmMs?pK^r|W~3N.f-̵w+P `hyme%%>-O.60,fe<1 1;2]:Fnժuy2cs^|xk%~d1@s ['s"6ula'eӎVGZߔ\PI!GLSOH;y)wꄁ~S۳YO>et?i^J;};Gu9~6Xl p[Y::?x/r;ZƤlSv)\DT}H_ ^\;1w/^ԸVVVj]b-ß3%}KǠ:p+\aD{fN;u{8[|'3WU>K#wc>ʮmPr8t^R3ww3{<^Snrv;Am /Z&8nF،gUZ_rdwhWݵmR؉뫏۵5+>hԵ9g5ݓxx0ܯGlv-.6{ @Ưc1a|Rc_I^\|F/ŇO*k[c6Ҧ/:7uPFoGH1vCI+ٓoK≱o81K9ֿAZOj[ K/ qmM{ۑ:-}-|3N<}FQ^/eNnS榷S= e#˼z.φwspTvԅ2KSU;<`"~C28pj8\ 6qӞ1yv?GRx2?я\Jv=w@+\<p`oc%eA`-qZrAO\o!C^4/}qQ ֩oK- ~j,>'l⣜`<sVO,v3NXyJ{R|oՓ?}GO>1u?rʋ#5vym22yڡNJ=|b3.ٳ?|od2G/V8~9ǜѱl bK8c~3^X_ߛCO+t[ƴM:=|97cwS/O<k9/yqOY#^뿊5xL~I~_#3a$^ՁՁ=qO q駏')1M<Nwpo>ֲ%wm{~ Lz]81xq[-&CQ{O99k^ZK٦O̍=}p_d>+C2>9f3OKW^leX)k7NcL1-_ 2~'q`䦿ydV{o_7)&~8miy|ۭ͑xɋe^e)az:0xdsI[cP! Fu:PlNBkV6o}ω@nmG?c]&_B=}mUzv6z(sטECS~?]131ǎG8Rz˰^m&M[g6R}9e}Zsuģ>X,x)M9;֏|B//oesI~Y䑭͑mf2&yS'4L8P}9csFYExP3v3f >+^u-N㇍ы +!~Fc6vo}#؃.sYnm՛2vsθgщ~x+^1/E5pw<9X^N7xћG-G>2O /{ˆ+_ʣ U]-y-˿G{GUL=Y^YS72VG۳+֧M91;P5OTWP-x変<>>*?Ǖ;zsI }b&5Fj.dMY:/Owx) uþH ~sj#<(vĘ_? em38 qz2YeϸiyO^?(ˆ?skC(Oa=k xc_4R?}Szq`W"gs<ɞ'~W'U Eb:ƙVOc+6S~>/^Ձ9߁P xы^4MЬxt 5VMy'uTaQ>(/}"q[ };oJ?UOcw>ko ͣk u~_tCL=҉\U>(176}sF{7}h\kwqñ;kPNc&Z׶9o9't[As [ɷ1mԃrN \_+s$%bGnmPy)oTyb+xAہ9ꃽGG|I=~` CuCS? sVK}-~iꣿ d،ѦAijf/ؿы 6uZi\O{WN89d,vO>}7uxbg}!M5? )'^bK֞}d^6ķVdo XJa}\dS,~7w9<&qZ˴x ?&}c*kՍZrWmKNqY~I~aW:ؔqiKx7_WlĻK1!P7FT ٜ9!X-.zĴ'ލls|y{oehuԂN?UslW-Ȝ3mԓÑS_Rp5"k2?ebj}UP9 &vcXJ⬇D .pzyW*?1:FE\=}C=FMc ֠rl[4ycKLdc{72lƂ-GK{ub?5:v.C_ؚ֞NrWXYzOz׻6'9~sl\C=l=]gm։bE$Eڠ.`X'92wOLc)錅Yxm䇷SN>AA^a[ ^;ąf^eicAŗE5h Joe3Z5'C}R>Uzhܾe\b:'i+}Ox2gMVc>si'=H=#u?q#>Z@R:ѮfRrmd[&ze9J۹d|ڜKO1zdpQ 66bG=^?h@u`ѿ~_׎Y;RuM,ֶ ׮iK;(6^{ihJ?3w 2 ǁ0A^߱K<ŐVV 5|\'et)'-6큾I1е[GkV6F_M͘'m8l*_}?`1bqQ>aGP/~΁J661>PCP>mR}Đjok_FЩ\C?Vl i2ug Xso&%Fɹ%n/>mZ9qwK֕6e v?4)kG{BLtnTՁ@](y-tկ~xKjpx!98q\ex;9|_L6׿^zիnc+:Ag\?mtİk=8 lXVa&D[K{Jg7!Ƹ^㐩/t!NϿ[s->/s}GLd>2JF1Ɗ97Ž,68!_KeT Y"l}n9g}E[0mbo4:֋=ёw!mֵȧLyM٭O_!>a=jTn> G}mƏ: oxx8g7k['?8q?vmg/#~(C3.mi7NEԼP/ZAQab[WKQoV#>#uJzl[yϵW:PT6uPҁ׿ý}@ d&G?:.7a~~ox=|>g)}GњKK;ba---pW Qymj>N8bs172 kM<<<3<~cU:fMߤlמK[F9hW-Z]OW=ԚS8سެY  [7XRZ=)uTo_yƮJjC{-Cyڜ':OS1r /VOeρOAGЩc_K<Ѝo=ɣsh_[vnӚbNk 95v}?yTۿpf8ӆÛa}ِ–mIgw]n0P[;v~RmL⻔:Й2qĨX3c"mqښ]#d蘣U,>-.'Na9/1WbՋH[ \3?8Af+v+Kגߪ1Uo=tU_cjRsl琵S-qG8O_VՁw`Hl<~!Vxt}x_>?`Z@_=yaww:h_[ÁM| {g쀲T )JC. Mjn"l"fQ} [k[Uz3r6'y:xB&viqi=~A3|)ܯ'g/ԜP7}dNӦ]j>:$|okWic6[eӗڔσVv'^nu֠ M˃ꔡ;RC,{>."|lu|(w.aalOeso=êYn5 IDAT:PعB[é:&7 ?W*bg?'?yb]z_+^õuQ<>w_WnR^grK]{lߏ-fOYqY?w=>}< =h:+ț;XϪX۞MNגS cwd>=+e7Z)> g]T\m kqҴ÷wgӬ)k_P|Z:.6i~$ig7ggpNC]ƥ=-߫b;v~SXSz!3_kFik /6 =C8jWߣdLs ?1}?zVՁt(9}-u=ypm\q޳|d#'OyS[K.wx^?N9oG>r[ j{aszox0ɟ׼f_a{/8<`1'jT. >,[Eؖf Ƙ_?eѦ.i#;2Nݪ' ;A1.Ӊ/#R}XRbهF'4Xb0yitioýM}~EΡoK?yjf#m3H3OS:]̌5 Yl<ck7ydc̛6֎~SGcJ}j?׋)tYYC^7s#/o4rȼSK;< F#N@uq7>f(?xC:|,׽~x+w]HnxEGoz?Ć[7FXm Kc򭍘II[OO)/SnU~D#?ϖ mƉ-mL쏼uf~VF>O?ObN:ᶷ>׸5>|o7\D;Xxx |;: /~=Æo~#wCZ^ځNa?{\ Y^=SC?Qߑ#qS/:ش>yćFEE>jN3ͩz7=ǎc +}۸RzeeVxS80eM
_6V}oOR,M x־y;5xRqCClg*>sC]&1^[|ɟ=gUGVZ6NZV5'fWZُ2nֶԜyZ*my{!&7%WՁv.~Zu`C:pK]j@=#?'&!yxcZܫ^F7??x`l'GqDV^sqSU[XĴ:H /׎?C9cZ8[j̩in=Rpx땶xKI[['u&NH_bNQۈV≫~*sž rę?1?S-nĘ[,_TiG}Kmr[/F!J[۟2=EfPPuP3M8I[0Оv_JZ3z<ٯU_%ZTwoYE9Q9z:q5Ձ9,}$wHdž?ac%֤~u"lcg '.a.9cm/+yl z-ڲ65?y)bkK33vep6rƨKj/Yǽ-u:yNԉ_k//[VY) kǞOĘcwO<(#߿O::ǟ6OaUKq !B.v{0}bh X&/Y7둇[{%X&;e~iwGh,zhSJ[}Vkc{x "M߬9y}֎|ڋVՁt.ٜju`:>.dac~~58`M6NFG?o/jT:,8I[4dE& Z@s|G[},a'y?~:_RbЉ]Ň<bCWZ.sg==ܜv癲f6\ ?xb꣼J.ikoeszd"?}]5[ctkk}5sl]^ Wΰ6x}}@u`;:wCQ :1|wmmjI{Oz}I[<8ZXݝ|૿TV6ֶ鏯aM&OwxE# k6?r`SGuqmoՋ/U xk!|P^e_6.͡_ןz?xQbJշ,%NĤ,Şʥ]C'ޔ= ~g|IK]./}+c_eqSƉlԹk3f3TݩOWs\ex==>JSo~q ?cEv"PZt~ReD;c奭_ԵT<8_3?;O0Z)\|R:9Rַեf6tOƵU0̍YG/F,(04جSMӣ3<7vd|2˨1KyTj̡}O=|sdR|wU~b!K^z)87tc-ykGvd1TՁfu {ȡkE%nGѭZKۼ'/1^_}zi6&R2 t3[+s#E?MA ,|{RYUoOkG?tq-?~ sỪы ʾ1yfRm)=vli:Rc+UVj|zM^^0ىi&2"y^|5kY+O~6xc΃8t\ۢS{RSW|u:Pl^Bm!WՁȳec>P5H=u|&qRI{ڤbWjoij2G6x-ŏm`Nls~:xyD]XQ'qbsU&|֓8Ƥ\Z*^zmҬ<7P漨mW2xvֆ#NRֆ]LOLo?sǖ>K{qtZK}>Me 8n'ygn|z#~bŃR?M1 eVyk\޹CmϼyC~嶞E5O$>l5Ձ@u:X7;I(m|?MOm^fRgX-֯'xy 1keqbd^uSȗ:xqǵ-ڌMJlbm>x\Xd]ڡ؈iz "^4V*q0Do]D?O.u`VxH1ڭծYk[-k5̓2bJz[pR o>|s^=kcz>9xzG<ȍ|moP55H:Z[Ձ@u: e6VTW9_ktPQba 0.^ i#6q\(e|ڔCړUGmkUgr҉*<9 _6⨑M[ƪ3v8Gq3O8}S~Ùf/m{^j~RjTmbOуid森ˡ:q9RN(sa#Z#RnϘ7KJۼR:7dyd,gu W8Y*8'>a~eXiύM,kяX֯'[g_˺ю+fhu:PTv1t^3mk;޼Ж82׭)xF}^c#Zyz7=1WQ 1@fɖ$k|'wWr}XZmY4ؖlI 1AA(@}~QC['"zK9kEggII|.tu%g=g4F-t6y%G3<=]_K<~k^0u؋:#0WƜc<>{ߘRHc=]\ϽWߦ9zZJyU;U›8yʍd)g#ge|jWVKZobS~urGߴ^&^N5կ|`9++ͥxFv35&0&0&0&P7QiL`L`L=1?+=Aeyit92NKݸKyŧ4Ilb.ߚ?y%ŷt,S]|.uzȓC_/޹/&i.2ſZ8!W|6IrY57ggFbN1g_/%uYߜ*䙃;xwʌӏDW梳7w\wov=_]%L4|>3&g⫬jûڛqereĤn\i62|}kެƱ_ })򘏯gƐ92gcccc e~=sUS}d@''3<yr%<52:8mc #V8O1k\"6'DwɃL8'͆\O}.@ʩ4&/2sARw'=Z [_.}h9Ƀ dJ\Č#?k>S+1IIkI'1K~so&s=j8eW;k6Rз]Lʷ&7׃{'wS|C^;]ًrdL_JJb'vMϺ;̩3XW7{e]jRܐcccccj{RmY?[+͓S8#ُVSʏLG$>)u&J1s=ȣįe=^}~#,~$ybȝbHk:9ɱ%&5Y;=A';%}n<ȑ{H_=%8x YcvK\${5wM`aF_Z5f{q<Ξ+/v>쬥_Ʃopٟx|,#?s:gs|j/=OJ0P!+SFA\'􎋞k=6-0re?UO zƍm\V/{6\FקN+ŧDO^,ﭬ9>jrfk&rV{S>qk'Mk[9{}53uמQZ\\Y{J ƅ2;6&0&0&0&aaߓ )0<1iWO  \KnK}W۷x?O2+ g IDATU70fÿiO`>+yKÑg['c2|z9W Nbb>Oͳ.IC07cGO9s⪝#˙d|ƽ)wx`&9#8-/8mNBNp]8'Jcc>{%O-?U~Zk?'8%oFΏ NZ{>c݃\dwsuL"ߧ'|?T&5k7~{Қ^n[6K}kv Oy~.Gǟ>VCg$ώX`}|zkre/?}Z`F;s='Б2u,$->g^kԫq,j7;6;1111S3q̩`X'y2*'$to NԳ9VO)&_OVZ_k5='l>_~#GI >\z~s'dn|qlNJ?1s-zM=UmH{QU']+~yB.q\py[>ts0%6B~0!sSOM:ɱ O^z3"~_ySRiVV[IMk/Unv[ڦ/z;W}7wb~5i8k+Gr9N&{ Mbz=9r#]_֗7|r&R_rgfjDZẹ̇|ΰ=dn`!}/،cy;}gm'.,qU?{sߜSG+O֚!=gĠm*+6Oݙ$&uqHUOLO7 yO? xC=TYqSKIӮg/҂c W/Wm%9.mnkz~{|mЗ^ =҇^,%5X#|ל}L`L`L`L`&0.ٽY11116_yN,< QD{>{ fmKm\l92v }qO܊O?rsJ?98W'%~u|O~Q |.ٗ|8M-cn槯M~Ϛ>rn蓼-XSS <mMt<Y'=%EjI(|Egq/gߕ>$u3]yf-Xɾսmj3qɟ%zr(C%C>d3W{7d{Y%b5{}8 yr5&Fnlya-8!bGmC =h8x=MS{շVX/GbI۟gni点u9+xtm1yy*/ϗ:.c~,z֕7ק4;u"]:H8s1q9|3L'&B>$uxE-9qrŸ6zũ\_Kɘ{PqK\)/'I'k܋l_{W~$ Ǝy7\Lrf.צ9C eN|{fyyO ,oMd DRݵ䰔kXcȕ?u&}'bԤgOg \}OM6y'jmmԏԯn59/ujoy],ģS>k65Xٿ5?1C=}i1 -μ%%I\r,aoNu[3C̸#cUUf\ҵϘxd'uHlJ xEZģ{]׈p'5a)ɵ=p1IIX89 LhgQC :3Br07lH%?f,_U׆dV#+~C<*j_{.&{җ/aOik~dgzQG֔ט=%X曃g~c O7-ŭC|S3(\J_ek#01111S7q̩`xMnDT{[p\}Hu(qlrl9 6N8ݦNr0<ԏkܓ*/ˉm}$_1w̙.p~Cf߹K=1IS/C/+yL9+ҼTO%]NGiL;9eNb9?s\Lz:sK>e^kO@IdbzdZc15_ 2çܖNrɪc(rZV<ʌ|ƉyI1쿇8x>${`ol11111]3IP}Zo#+9K}=W'Ot˭>sg=L9XWgppiy҇m}B?K|mugmbrL'޹W'mdbq%>}ޙ{O>v!|rW.{ErXG߉L%=}N|)k,eF:'g]{=:3̚`3Vbk r֘9Yg Ü+30\XkjWΥ|5ײۛK_zpkbk榤w qu?8mp~]a?@="Yʪ;C]ҡ!Qgu+bRF܊M],y>ɇN1t{+7v]zJcH&1V9Vfc\>6I*쉋QGyָ>7K8z<-|jR ccccc;?=*KV[J{z 78{D'RNk(6͓7k92Ņ*^RfNթ+z6'{[r~Ft1y&Ɵ%{S[)F|=4yKه;zl'[3&S71}P7y?%%1|GY9Ǽv뜉8%{o1Qm5:ou+ c;fq{UĻ=F?:ӆǘ+1xo#ͫXoϯ=_aUs%f=9;Xfx8ex)+3G_mGO/_W┞lg%%I>'oS~OO2{K:Jpp|36o>~{Dcl⫯RIn{Ч$Xr'9Q}A^qaH__ưݓ/Ń,2<՞Ƶw[swOO>sv"9qu$tHuЕs<=Ɵd/i_^|6{֧6:Oԕl&Tc}GOX&'J|cK5?x ')nixS=`:>y2=05gS>ਜL_rt`c9s[cȵ5cg~?9K&ֱJ8cwɣ/1su0!6: xsobĵWf-swKqg?2!F6y7GYW=k^^g`؟x5WZc5kz}d3]eⳇlyKW;}:7&0&0&0&;˘{~~/ yT >SݸrG\.ypi6|0rnxKt$+FD$βQ/$Og Fqtx^='6Ī? _iCc_`~ٻ25{ǑxljCGf=bvJi%X2O̦W 2kI7s90/O|Jt8r6:%]0;7^'n?ș3G/.n%]=Ocէnz3-'b3_5 |^p򑛜HɁ˹Wio# 63&0&0&0&0&6S,{ryO^-@'qO2ȱ.zOfQD,E9UGN~,@<=js[] uщcKapYu{n(^vr=?tg6y9܍|jW1#6cNZy.X'W|KioM.(׶OSA\Zec>=$6uԵ)'\E.RS}k߂/r^}cbb_YSmqJ8Ŧ_ҙϋ}ʇ_NɁCTiNn+Ã!Nƅ2fuL`L`L=9>s!x$5Ƴ)#~SϾcslaKqJqM߉.+~f1#| hLRP&^>K:/'ً˹b5ΌZ'u {31lعI1$k</GO^կRn|k^G]Cѵ dqXccccc5>{%I%M~ 6~FJlEwnjg|FhW-k<pO[ҜK,/ޭ9gڞʥU\bZP뮟yuw5=M7SOOzzm#yn^~鍗^zf:3:]xՕ >:]}3ύ෾9ߜ%;ӛo}7LHƿaz9OqFJM6:=`+.kU y.qreL&) 2^5޴C_[W 9^.2?yzzj^ Vvf]9|7YkISӯ/&9I=:rN){7U[lJ{=]ۺW(k.Xcccc?qt0 '''a?'Wj[U&.s(1s =-\cCMOb'W++Nn5_/F=/}2]*+n69&8+cwnkɕʊF]k^|@,GX{0]*+n6ҷ։Z!.Ցyi+z` CW#f[i/3m޳Wtcڒ ~sigԉ{TF*% AK^W&/}ڇxcWmlyFrd򉩶-O =,-snOɲRMGy:9Kqcb >1^ys7<K|93b3zm}r"CncF^c`<يCC6\Ua |})6FJQ+0<1:Qr$ơ4nL^0ʥqh>WinM$vn/3mzIݽ^N\'m8S |'/i#YaSk[]^9ړ5x'ߚZbY][isyďWO71k\R>5b̾6kP^cHp/6\ډCϾ5&0&0&0&p'0.93m6ɁxmObFIPOjjnکӗu'Ő*xtqOr扛ClsՇ~ 1{Gw;O.+{H| 29TN\`&1:5GNꉩ`^t\b˹'d%yէ=!׫eL)ki=ȋyq X)\u=,|rWlqHkxK]LE:w{I~!VmeK|SO?H{?_#==ZZG[iNcLI8{XNSxb)}_|4_vއ=}UǶ.Oϸ,?GS`-}OncǗk)F}?Pzɟ:b˚t{_{S^)\\Iً7;ӏgƼLӡow{хk/8]ru*]yۇ i.hڼܳO϶gj?jn^i|.m"dק~?pw.疼̆\χڨ3LtcW1$yfEM_ bFuZ!qc2_=…M.K.Sѷ/^{1I ?}΁-}ۯ9ѷ%Ip5%NNA\R'nb'+yOi2I_ʑS :B\cY_WuwY_8Ҙ:\u̷ֶmOgo'л-Gr^˜NݜO'Oglu=6.D2y?eUVviwzy;2۟j?-|oۿgn\69p`:ztLe.v́iơ6]pŕk??].y]`s7gkw؝dھ<避ߚЇ k8sǙ;n,v6g,W]\ciߘ2vd|%1uM^SV'wk[Xƶy#q92O>1^oӖ5&f1111ݝPfw9X IJ]#Yqd.񊫶I_zkN<'1V}W5dfJ;s!3wWJ}xS,||'iL^=7y}gx9ai[7}3=˸oI_RR>_sacƫɫq֑'%1[bFFXbԓf ^a3+}Z3xA2kT_^xXCiZʊI:Úg=2O9H˃9bTcv2kz1R=|O=|V{ї8zpw8U:īڕCۚHrKX4or3GO K||%W_OL,kދ.n䧦ǿ郟]?t8qg2\,a.9~}sI\ۃ"=<8$ iy04[Z!/\b4fWeȕ'V;GDb8|I?}|}Va z&0.yT~|~~غЫml5Hsߍ iu8eRbM <;OݴL=G VyrV|b!.cKϵ8qt[`xD67|}5uޑYK|`\f㯇} fe=RRo ^^nֵNsoKq{{/}g:y}#̱=O~]e|1&AL])UyI &{ĆėVNxw&[cS㡎5^={=8%:ܿ>d.m>s%q|D-1zkL`L`L`L`Ld&{9{Fvo'{j/nM:As[qY7u?%:|r*.69Sϸ~yG]yJ<ˑ}˘z_gJ/䉗'SA{No:SOM~;2?ؿ![>xۅ/϶\2;r8dcmp˞&;̜."j}8_$s-hwov;v|}MOtYgOg{+L{Z/4dFK\l=%NYg_=;om0{/N^X;q9Ҷ1jOCi~οOrö6Y+c`|=<}HV9]+&!.eNxȵM|ɍnR_'&yQKy2p灬KG [~Ϫ1x ev{oL`L`L`L 𡾞@;Cp{++}'nɟ%>oƜ6^kø>MEW]5'17;<L7|3~No~c,k.3^stF 2^8vי3Ng7nw9hwKoqz[n2\|s]6/LO3L<@H3Θ0sЛO1m7%ڋ6u|SmB֕ԷcNŧ_ҧ~pk2sroK]LeobRk,m{u2f.>*Օ̭qz֗X ͸w@q%q$mXs>r)|׸3xI L^rsBLC |= [=לѭ{zb"fmtkT=ښ'V[WXms}眳F?ĨmT'9{X$ۃ=gx`:v[V;[oO]l>N<jvvQ1udoνW1:ՍbүN8∉]VWCc-N]{tf*ra,[݁UWkvI^ڽ3uyפ`R;Y3Ǟ+ǒܔ'Oc˒_;`b.[5X |Nƅ2nyL`L`L`L &@Q=PXÿx\Y:ydB-gɳ7ued61)Wkyşپ'_0/5ɲ%{w?kk?ڋ1ygi9kY3|ۗ`GONs2NٹmyO]|O{M]∻_tjoXKeo8`{'Vq-)tR=!߅L b%=J~31ɕW|ݷY 9&0&0&0&0&p*&{Է태{cϷݔc)Ő_~H5r).Ƴ ns[+N=k7${Utk({|}=̃7O?ַGO,ߜҗ'N5luh?M]v||b&s?sοٯMg;_$sz_.'>_yǝY{Ν{~8]uۇyxzd>wyio1^nԧ{kGۅ=_HPצws^1fsI1{cLlbYS~lmskAb5\~2f7&9׏d+1O|]7++K=г}/`ɹm=u9O9CҧɫOpm1Y^񥞘K|k10G}m:kjWָ6=r`oWo\$`6ɬ|G 'ߝW9y: [>\Ӈt֎9!';*1'xAS7ofhg>?6[6FͥCRJzH.Pcn_J| yϠ0]-@ީOܞ9錡W7m\ӹ&U.9 evwmL`L`L`L`ϱt'pr,rC''pn\ijI8eolqo}jWΌX{v>[HbWׇ͡Ɂ4FmC<ޑ}%S%ǚdx'ޚH1mI0ra|ŁA ־k+Yƹm .Wק-6%<2{ Z(ӿxkR'gNUEsg_;8ΒaܳӅ]?_:|4kiќ>]zÍ.7oL{ZCޘhw[>8]яN?niDԫ=7o}񹻧G>~b΋h'ϱtn 3[`=C|m_Qm'".gM`ᭅ_O[[ƕ<,C>YK`R.)~W5ŒWmU7:yDZG \1.Jj9h#Yk6}b>TOsv*Kpك{+9wq kjsɡ$ًZ)y,qS/^}w GVmLnd1KsٓufxjYOy[ٷ\gak11111)Jxԑ=[\}u\G0q޿ ߏ\pd<9Wvj'gJk3_I]2ۙCCG̜`6GwG~}|gnԧe>閻ۅ1p/9kϞ'^f_B;.s\;˜/<.y]\fxf%L||AY4-/v`?G??k?i;څ=gL?ὓ?KSɜ\b̎ }[zgMCb7+Xp$Oi~O>.g}^9$'Jj%nX>gJzo.z5ܙ^񩧴?$bօ7sDsӒ?rׇ~>́~_kL`L`L`LNNm>&0&0&0&=A:\TbNTZb2}|b˱\lҷz^R^$'guk~#O_0SY:vK~b#mƑ`aᷖbc˕xqJ0bm_8rɁRGGH_dؔNM7~Y_Xj]k,}K|bbNuWi^iO=\E⯱9=$N\6k|_{K&߱X?{t{a>H\N|O##)}Vg*;K/r Ym6sMM%^d=G~}HVkN`e\trM{E%e.H9.XN27;\~+asE 3|鶯|eXϰ\gX^r4ιB'^{C7|w"]axƋfZ.3_|]d~񋷧?w~.2o1{8j0$ƆW:}doɟL~gt~]hs=4̳Ϟ_˜?3?MWws!/_}什]<}OM?sd]ưիLlOw*e: 26:G+ș8s,mJk,}YC3:%ź*ťvdgNf,qʚkOsҿI7Gi.ܷq|-jΐccccD> IDAT3qGݙ`8>>{Bቀd#˼)zd ۸yH&Z'RϜ/nLY5^ki6~8&v;D\ƕƵS/&#μטxd.x#/qZ'],2癵Q\>E=>bK/1SF{ >m%>j'?myYc\p ~k>lƝ9SJb,9Э]K?:wSq"ꜘ3 ^īρ9 0=lDOs>3f.>d& 4t>6]{燧|ӝ_CMVHv.yǎo|.zGaLsٖ:}̸;ϋ<3hWLq[{~z]?鹇#.VbKmpUIV̓k e^[ y0ׂ'e?cmFGZ'vCc'|o fA.aqy+c,{<șs>3f.>s;%Ƃ}c5&0&0&0&pj'0.9ccc zO&}ppW=X:Y^Nā=˓=eqyUq1E?ܗ''LOy`=Å/*N[1Gl-NżXqS9x3kLi_R}-WO s2'?dϩ+7N|}<9+;߫}:p"2Vi/a˙z榞7Y.ט،Ho<|┹LNyp@C?<0k.C?>OO?LOs6=uߏ.~nen;r̫<;] saΚpi5_N2pĎiO^h\~ _{ wjwn9]V wilw疸 >xYeFx /lǴ;}fh5_ޞJ~@Ǿvs>2]u-e_2tK'noNvǜwSqgK?y^i?t^ϧ/t'~o~s:~gtnߚ_~tr;ƼOi{gNuvqu.7O>tmfM G_3\s9y {N=3#;1111ݟPfg:޳<)qJO^˫̸>ʥ[z抵>%쭧3+П NWګyI%9,mHsHzoن?1m+N OCynݣGwU~$fNTOԓoy˙wF[[Ҝ3=Al?|W9`kv2k33)5G[:1G8R3wIqH&?{6sưӗ_6<>W'6k-?/ч 85_i8ϵ Rh?Eg4=.seI?k#⏛[΅/{+\q"~Z ]nsg/0s1NGE(\C?Nkwcx.9ܳә20blޜ=qGןzj: p3/8i~鬽{g9g (8suiz`fo;ۼm?WN5}\p{'`v'7h1.V4_zk~.iq7۬>̏CO6qy~ioX=y/~k:˧\}s?t] ş<6ݝv ubvK +$׎ _S]A>^ض˞A [Ξgyև5ʙ.avS^? &}e\`cg o%ZY/uyz>cJ0m맷g> 0X=&0&0&0&{,Ә{zA.>/bNFZKYp5NLNP'zb)bϺea <>zO ]b`Xɡmr[:Cl棟\kubF+JZ4Z.}kr,M\bCܩ#CWέWG|]$Xqɇe_J0΁_2f-K)YXonU;s藸~{o`z}|~9~ʌޫSP_땘Z`zȫdR{˘~g I|y&/?̴wRZz]]Dr8=ow2yNlwey]r03s"r>0np?}yӅ\;^v|+oছ,g]t:JKOt6n+H˹]6 ed+.i>~v\w:0NcnTS͡קxtECv_>誫ho˼Rs^͆5f0KE2믟vwn\~ÍKO?5]~N;p}~HӸ/n j?;uE0/O6gۜPsOOj{峿=ߝWE2WNw+oe~IlɗȬ+ G߆wOC >z3ߎx|ɇ_.x8ssK_O19y]qJb z.յ;ZZ`{>92ß1uerkk,Έs XƗ8L`L`L`L'0.91111C<'>|$'yV+q԰NZ^\p"ou{xXG^ΚǓ>rz6u92,=)$+ۋZhӇs*۪G9r6k{E2tmu${ևE_t$9';l,>m{NnsßKN|֢+^;կ$ _ok[ 1yCߒ4wuYϼZ3Kg8t8O|~`zw(sĥ/uzy{WOzC?ss.88gF|11111ݚnw|o|ȑmusys-"8k= YʵbkuwzED&7{ڽ5'}=lrdY:wpIY#sxvW?;{zhw1ybr~zОv1mw~zakw!njwny}K9Οr=+gWXJ.owjyGWO].|wNRj?ytfOѦ.t92K"=74bv̡v!vZ3w{QM_ Zulj?etVvș{Bnw9g Pg i^lwwh.(y}N.\,sAesMqw#W뮛 꼋.jqG#>&0&0&0&pj&0.95sccc !>e+u}J֓^m0I/ɗzZծ]cDrʛ~%^z6>"=AN˃86xN=aM ~1ƕͅ~um:1𡧝y,qxө+'k/Isp/c/ڋ18Gy{O|z7^渿d>sY%޺`Lubя=ɃnNcW_l̞=,Ir^=Ǘz/?^&v]yzaH8)RdRmYrl'rǝt;iqNw])WJC;ْۖ)qg<.ns}M{]kas\.C}TS]V\o|}@@@@@ hdЈ3\i#>SM/+Qu~bSKr֗r:?9}*%#(+>؈Cza%㾒?^yaUud{ﱗ,Ataqf]}ݶ˱|Ǘ+)fQ8- y#F^z'h#(9? U,QF~/,|w#?VXɰEoMm.\qfU[úddt. _*P*P*P*py*Pe.O]RRRw\e^_uhět-zQNCkJlZJs~ \^XYߊ _9?ڊ0&E\pGTQN. rQ@@]UaJ,Rq]ғs+8%ӡxgMke9DYKS7LdEW>Oq4IKIcd"؀F_)z #}j9džk ȡ]̸T~bOTk< _*P*P*P*P*0 >O.~grS}b^qr6XSliΏrA+v [+qC[&Dh+3zO^ߗ蟫nvaAcblLS~5rTM2D=oq/ sP2urt&#_6~%Cz J96qY|27Gky!gQQr!/CK4U(ӼZoH?#]#|ʈz kS*xx!D`^4e.*?"ˇlrv+|;16e(OmgkS?G?P>#W/KyS>_94~7[tT9qC`-g <6qވWTK4+𙓡Kic1ʣ-H/~ {Kggmf{'n=O>iWqcvwYl?G,f5LzÈvUQSLH")wѣ??h-v 9vwHzj7ٸmVcgV&9FL:żIwLivk$߮zlwvM$K٤7t}w)5o>oQ V_=j9M8UTִlz[e/\C?lGM/=X 9G\ǵшחp#כdD|:7_{uT%7l]T}&~!.7U:̣_li6c6RGG6DqK߶4d|ËG?:3W/xjKǀoV \ FKSTTT_}P1OaAϖr3.b.ȡDfX%GOgæ2a9YSsm4⦶kQ3|G.J|(80FVxD90<щV4`\2 44GƼR$/usuHC,TG2xɹZY4[|faw{֌=q}>C&H IDAT|vl}e⥋X:6R[!}O?k@#.啡(dE%O8h#m4+vQHzɣ.D/>E9 -((((Ky!n6kfq1f~m3|yͅdu~srduG rX0:U7鵧eoy1m7۾g/< yk TDƒ~o#:d|\<&io9ҋ6x͵6:?q܆woo9lilQu63mG1ΝUيU\6o1ow1}e&)=m 'zS?2j{~jizKm=:L;)śTz}M#K"ߕƛhͷs7F>:l/ծ3?zt4s׷@7UªS;ۨUX*o6jus>B⨙;@5X乼RoSϝvn6IƏ|Ԏ7znGyfئu孃吽U0O岕,<W'8F'ƌ|y'4;:T/y:'F#&GѡP.Rz׭G9\)r!;j_ds>c~E~`͆[t%@m9V|4hAT/*E*?d'U;M-[m7sy#ts;+GYKF#K,Sy##xF !.Σ;!ʙGOlᅫ㣏}7 ;r2#E\ y>7%|i.Lxzjȇ{rtȖVFTTTTV4\ /H\ pCfFka"hd;R]V7''(An7 y3*|3ݨ!9:@y"FȰ<ڪ|F#Rxq^|oΏ(<̅`.d\h'XxQ07qSW<0KbԹe` *}RWNq9i"5 >ˆ[Tbw-6ur|͕*xP J1O9Rt.қIsu!\8QtzhX3W䳹Ĉ9>%W4YC1xW:?qbyh%q`e)zU7|WcCu?@NLVr 71%tsӧrIc1>ŧ&b,09f4I>)xK] UN:4GYH^7g7.L)Mb|"/(((( #?|@26!o5n8uzzA<6uxJjB+LŊJ:[G?SbGNˇN5wg=7n2Cg f̮Ɗ-;꫾IL{ƕ[ɸGiDcLxǤ=Hzv P:1gR=filn&i-Uv)Gb׈b3LﲱM2#}֯c&ˈ?s3ƛƞo?;LɔN׀ /.m޴J;tx#5`v/ ܥcS0N&5°MuMIfq6^}^ÿs޽_aUG;(/]qQO3M2sG9G1麻soO~ޠ3i՚ah󬻞T8Rs7+K>HV0цksojlV|p`vD?):O嗿Z/qѧxPRyg.T9Ѐge yMW55fK9xN}c]Bo(6(5^coQqDňra"Z"a"O,8@.\p.#()n~MS9˯I-4Wc.8Ds#+ Ayu֗\ V乚HiIrI)1m6OqS\zB8d'~6#ΩN7\R?\qHG4tQ1\N9%?4RRRRRs*6=sΕrZDēww#K/|Ff9(}bU>Cw%aq'v.#_yŞҗFoQ˄7\slǃߵ;wx7l ^&QF; ^نwfcUѺFѽvفEFe˫&.o,N0jyU ֤yȰn^O{ o6򼺽gN}iٺ-&1qk|6c+M&oxī5 oI^&xj W;MUi|w5k˛7 iٶ hSQx;ֶ%g#[׍ڔ?6GSfm۟ <]Ok}{<ݗmnͺ}zvY;\z҆u'>a_߳ao:J5.ԦFÎJ%>?܉WdO-ѷJO.*n<uj.da+XCK #[e'~D%< /#·h\+!ѷxts4G*^#g3yÞu"&~؜U訁C8dž(6אLcOs>*R*P*P*P*P*p*>>~7 ~̻sQӸ\ry,NqJ~`f^wNbLF\[Vx㯎c_C2 vW7˼l{e&h]w>Д7~h^El-ٻ|W[؄?rӛP6\ecڤNo4i;*W^im{Nosyt{*Oyɢ1e} 6OkzF:m\8绦 {L7 G|}G >o9;xM۔9V5o^P T5@]ަk4NҝQ< 6[{1./rMfloQ6_8'#^^_g'^{͎RU5׾fjYsV[{Ɔh?}̞lTxNJ|/BSSFCv{o+!?[3E\3 .!<%_&6⣟6#ťsOG*F*]&1gE ~?؈od%qeSF@@@[W(պD*((xGVoRZ)mrȄ@v9h/֦Mp1 M}2#(7ELqQ&>7GyS*|B Cl1䕑Z9TcGT/,1EL#/:I6"\kVCvkHN6ß(xdKRܢ Pň~\4'FbOđor(}彂[Tvs;NcIeq,/N2t5b|8y8E>TTTTTRVI?#Ay6[_XGsXdµf.k3F" gK^y#`ELv|#ӳwiMe/~1o,>!SӌidUTCICC3|Mfw#gz֬)n%nd6ux#DŽ?fe]$d:y*ǘ/ʼbο,Yr6M>j`9Lj77(1y9 7)'w4v+b \ﱼ@3rͥ=/FC'4n=UmjFk{_7_شvqǭshz;Kꦛy^M\[\zFN햏=oAV:s=/ؑUs~>oj/Cdž4{vF2*<:l,]?GrF ?b NII9L.G-"K'bK,=/DWYMWmc _*P*P*S(STTTF dr38trǸKK#']c+7bf|c\C.M*pH,'>CrFaHHNn10)S99"?q;g/;:]Gx6>2d}?H&=1%Oy:GG;iFm3l3=9p1kZ=sќ,S>͉KGlN} !/9$H )lz>Ru@FR %N9Hzց/ՏZJF=}TTTTTb+gT6>sZ Y|uifQlGu)ʱL=d1F3Yqŧ\ =v?oٍl-Vߩ.$/\^V;>UMQTQR=fHe}CwMv4M0vj)ߕDrio6Mgt">u=ܽrWNG˅`ט|7e#Ro9Z4'}> 6{Wyдyszd}7sKc&0tʩ>K&WVzyv5r\vD㹫V0)(C|sճju&5ԌxRCaoF#ծ=+ڮh=կvYl] DsW_:6QW?TWllG|rr4bY4Q ᢍ|CrW˧j}@@@@@ y$>s⼙3/P~|׈K|"oɐ3O1}3i@3k_xZ5ePdỨ;lc2'G;ڮb…3x$3; ,_Q5H6o:;o [o#V2#n^Em,uxL7m{gp 109%OѸ8%Kͻ\紽ۛaDl=I[5Лce]y KY7,tzcϺOz:N8煉ϡ!lw cM̛o8fWv*1kHiJuYe6$s^qMwM[ȺaqNmrhM*?oNY' MO.t`DF6ȠQ'^xSH-%Ra}`[Gq$S8\FgF Q:dq:4׈s=^1y~N(XL6o\?#+Am?ꢟTNNШ'\sKKȈmSY:_|^}Xs}h@/EO~q.9\3m:2W񝓡uys1=gÓtivPA"K)u}n]}ǝՎ2Wz~)oіyCv#ycܛ9cқ5Iv |Ѿ6zo}NG@ 1ȞU͆Θy~K1X[ӹj音 M:99nU uТk?wlN>g'mĘS?NȔ&orP@_nӖ,鶽ln;@o\3m#98vu:wwfIf??jptN[3tM7mq?g JS#O۠>`fkٔ"3~Yc~:iw\hW{?Jkv?Mz3μ%Kl]wۮG{TM27yS̉m?~Kڠ8>ùHiU¹'UNL*:8c ^toO]kkQ'f[y^|ķ>7M1ȱFdsUj6"Vzm49G5TTTTV4\ =7)U* q/%ftCT.%v:\2n!smr9/"*Aѧ=~)Nsx~$8dPpM4x͉1 ^glm=!LV - F2E /\|//yW22je9JL#Y*s@\9ETNC|1fD;Q&䬁G@FKE<񛓓aM[h.gls7#79Am}+ TTTTT W>s*Q/׈.WVK2t)mVf_:M2oV%f~1#O^PjSc^{I[v)tiN߱dQ/QoG&|5,[nh_Ulԛ,z|>G%,fN~Mcb+vۢ7]/yؘ=w?c غ;qA?wy=jt0 mGȋNәoȟ;GUy[r2߅FwmN[wv<1s7%)nǾk_ C68㏲vckszJo1z:ߤ?}N?c4aIߛl.B{zNycS7l{߮ao>x}ӟvZ h2\WHC䑶="tלɢN.#9y c.[S^z5F9@srb4GEpK\s\Frrd̚3M:@Ů_zhN.ѧtEmQ_(s5,JJJJ|G Ћꋾn0R^vu#D+VrEF=m*SN:Z]jֈ94ƃoe0<uJ9M9<3zrL<xQɘ ek3Ţ3d|#x ̡0_ Жԧ:O9dzHr~Czȷxa-u^]uduA\䊥91&]KFCX0P@j.|<ȿ/xV/TTTTT`s|^s'~*ɮͰoKAr9+')HFqh"Ciu8br-}|y?&L̑fV쳶lq Ɩno9swYjv7xsəB;Kc[ɴ?c~$ӻryE$3iq'^xBm?iSs_0ssgN ȡ_Ƈ1oe}3;luh7=M 5lڙJmmh̀[gҿ؛P{poiyp#*cgHsH3 >qS"ϒMm5mٵ l;FO_:z4ڹ?:rІY;c?e }癓3;t;l#1V^%˭˛aN?7ǏY+C*? MpQNn4J=Fj~F蠲Q311!夬q-HPsc>d4/`ϼ9:|!8y٠9?F9~# ;\4"N2J7WG\HJJJJJgOFB0#mm,~9!le-s19Y7Q'wP%d)ePc\J&RxaEum~lD̞gAܲmVp >G m![T:+qn%]̤7md$3oM=G ϼ<{m2cv_m~›bU5w=e{;Gm&o){/^d7LTvEecx<왹{òu.=w%,St9SL[lvב@[ FkלWŚiw|I'|F;5`/=0 8jxYs%טvOzņ(!xxN\7#mM/ɹhR oh.ȡk"oF_i]R> _i.`?ȘCTjuiŶRRRRRV@)|ˇ>k4$3 0a[p}M. (F#p9l\>t.ňuHW9KstțG9<>#٥sC.!TCQ P=%h^F@@@@i|-KJJQF/Z<7 9xRn$99>B#& 6Yt9래ĸ\x6GG>kR#o}E`[8'X9d9l$>s."廧좯#hE^:&'ɰ SF|5Gy߫z;sۖxCEBvYNIw9u`I&2=~lb?צFY6n];m̙6oicgɓǫd*{{cR<~N~vzN>&+[d6w>=/w/أ=6]mvŶE6t`I]Ckcbt~:;[k?|n+~l}?hC|Fߝg6o]O}uKt.|43m}'Wkd:zO{S?6#gGfu{3͎<`m~j-ړ|̠@s~^yQxͶo]OXwPIqV %Zm"*ozīFz&M`?uuVLՄآ`Ek:`1'sS(g+'.~Ei߸.GS ^BKJJJ.mJ̥gV*P*P*7<7P N[O]Nq='bMF](%{LT#|,I0`s4QFI}J}\xPɹE]JTcDF}P,k}P24ghmkDv _OiD<*"9G T6u|~k:2-FTv:u~ȣN_'_FbiX\O넺^AT'X|H|f6ROb >*fLKT(— \LHgKy:r2aN`!0ͨbŕ?s5S],щF_2(|D\#LjNiNr2t`ȣ_duTXaR%Kf=Z福|ԆKjX.e-dNYf7JIw*xjW[ؘM=끿uAvX;bW꿫Eu_Fύ5U_Zv ]lywtJp N3/e=7{{^g|욏\i=U|wy-tқdN{n? ϝ).{{mԡQs*?u:lԻp ^l:˯V]=mqzL-?CmÍ7ھ^~:}~=8t_ BGZZx4.u] K=Dr%oeT\lhf6r|)JT70ء'&sB<9PŒ\|Ȇkh\ch[dQԱx)((( K<7A@@/Q?"F4N<6AyIq&%$ݨiq Ȧ{jupJ&.G HO 5ou(6u?Ec~5m_j1ASX7$5!;1rbOX.{9C6?+c`:^6Q#SL~c=i1\33I QS\bõץ G@rb Utd)&w6سv欋uKK<.9GTtFe \LwH IDAT+h<ɑ~nQY҃{|$K?fVK0S8|DY ׮9n=foxxstk_mȐ7QVM2 b7JIF[RӌdƇa&>ӛ/1<þ̩_[v46ޥx3׹^{~_γ똿@&6[y o:${|?}-`MҵHo}K,ZOfP'鄏saV~/PoMmoMTTTTRZF|]!:?QN>)j#nvZgO#Y# q^NHΚD:Crn8̆|rvQ/"|jJyzs^oC:tE%]ca}6b˝ZuU%N3]m+|| .b(vaʩI#ʹ\ţ" 6嗒N'5A>emSh|/;| Q_{(֮ȁLO1z(k1Rڡc1C"W#\ԯ{X— \ e.KRRRwD|n$/`yRbt\N.r#<fT9ƣ“Tvx1W&/)6c ~_hj=iۨ/j'_3ƩaGY~cQN䩅(uv/(m*ى׏ % FKN0 ȡ#P9Y7ⱅM(jdy~s y+YG8_/?`EuviG<~s:Y[+NQ\kd.QF@@@@>c8>d\.~a%w>r7, WnfGw찥6ڸ7RL﨡bpo2kƋ;RR:C&:bC6ȷmzdNIt۽ֻ4 ?^^ gw?{nW5j#l훿^}nsk/dO]V>G|7EL<ƨ36Emy6?p6u7mwځ_+֎e{}v:y˿q[oMx,_sS(HiC>roc ΑQoJ{FEY  &K.Y?إ42Ċra.Cko!!^OGtFQ>_ăr`.򡁬RRRRV7~l!RRRRwZsCA=".i Tyugĥ?a"N:$ӍaݏVlybBy䉼ѺA4.#Yg.^]Nzj^2͡p/1st m_h#2G+ 1L8ר\V2x s#g^R|eb<@\JJ8}/4Gl)q[kPCs`Oފp._c. .F<>ID>"FzͰCcM$|TG b. &i K}c^O}F\×hl y1W>:|GU9E\4'fkT.>+C7Q&lgވ yh`=rcݪ{sΒPukj ^XvxSK/|ּv.tGvʑ< L; >ofo#1.>+ x09qavǚ!اX l*yA (+| pN>QF2)(2~Viя>ؠF>ċ2D.xbK:EH`/*6G++^_dz#bc:SbN yEpI:rP13d)C :=<&My@@@@l+ >fk|Iygc#9Xdf.~3[_S>lƜ.lbF,1Qu1_)<ǟ9zԎnmWbW]lO+v3ȔVcrڂUm5vf[n}xkGN%*:&z7Þn{/\oWl[=&SߴiݘInoӖ~6x{MƗar?8hS_7]asM^ׅc#V{̙6bmWffoyK_!-Zdm?kw_$KF(R %vY'#dɽ-8$gcã-mdMM`ΑG FyoG>_xtVQ4YO &no~yS}y7 GzH!]?|+T>[T#I7)2bE7uơnΑly ;tF+z0q CԍjW/}`"McEփ.+oΡxȡju\"uvґGȿB%Hu556ϖoLQyO#9KEB%Ctby#Jc_nhu:E;G֌[8'P#KE?#=h'ዮTTTTTrUϤ/C}ItA [KLs\:i^b/i\b7s@N,D>_ ZEQшZ7˗•+:l?d]}}vAЃU3[M2zܒ\**vY CﳳyVо}6:;+3_Y;sgv_<\j#>;}/'_c'uWM2nE-n3폫:oثgM-:[sݚRsB*3 Ahvxڶ곅FЇM?B@0 C! IT<㝧V>[hg<^NOMMvk_[~L֪N|GG|L,v|יх 1kwoM6fHfl{۰/(tmʗmIJYj?[ɼζ-勧Z<--])Q9@㘈=.b~"?Uzʷ Y\G:G?JkV4bA-7x> aa/9 mԅ'H n2[=W W W]8 xHeSK 0U,/eL^հ'/FOC4AǫJ<ç8x䅎 L.:$zHƅ J&ZCůƒ>kpEMo)pIwYrp|GVtCʰ ;Al/^qED^-< WԸ'A&#>~RY~aU2~|Rx_QKOƪe'j>1hxF+++++p1*H"^+twFmg`ѕoqt ; Ȣ>2H(G䥸+C73coH^0/ʟx"-zl.W؝wbC;^O~Ȱ~v~׊E2=nǾEc}͵v>}k1smP߿foσp3le[f_ƓF)[tߠWj?>X$TmR}ёWF+):\\\\L;c++++z/4%jK ]T&CLyĎ/-Džw}X20 *H}hQ.xR؍XF+s?XE/[vjv—pÿpl -@} ƖQ&K/aP2яc?ċG|?1&ɍ'ԢLF#v6!"Fc?BDMEG^Sr劗}gmAjq;>g;>:z_+5>#ݗ\bXiNЍ@adhόX(#+^ڻ=Efǭ;WM/Y鵰bv[b/-y~:zӵa5-Ïhl/F&Bbq{3{y|g׾x=`۞y_ದ}=BY令,]j;Pˢfgڨd6rLHFGqiי&/Y"'c/}ac>slx`8kfcSmޑ}Yt৲Bܟ3r%&*8OLTEc8O'63c| /\{) 舗e++++p*\ZHϘ t"F{^ }Uf[B|C&P>R=迌E@? yI>[+u^p;B+ؤLL4F.$FQ7wUՇx~QWX+++++p!#'<&ϬT_F݄GS`=[r%/t(>˺#ľ FOtRL@^j"^G(k)wꔵ'->b-Sس^ddtd΀tS{v[23|֏XA~t#6oe²~%f=eNTe:[lӋW;)^vW l;׾mZmc?V;y[γ5o{̛o>dF|Q{}K>f-[1)hw}u#}cYthnec6qJ Y{_"fO]ziQ!uG'v `V^s6 i/{;苦:|Aṵ돏_DsƏwEA ۨ,ѯ%\CS"`#U8آoB[ԍ~GȎc IDAT Tz9q\\\\ch䥞 t^6N§㟉c-ۘCģM`^-*tK|a_K^%kWīlT+A?ʱ< KtЋTYS=a FYN☨=\㖴C̀/}rk# W!?~d̜%eyWܾ6pzb Ww;_l/ūmՋl{ӛx6~lmyۏڧG=fۿzЏX$"Ͼў?&_dr/o|FNJc>/۶/e|;Ww=~͹wQߞ׎'&ܶV[;tqI-8l_|1Ŵ^S*4co]b\ |L\ǷؑmOZ/%/-]|\yeezjq3nUP?Xi ґ=G?  Y@?S>#wba&-+~ &Y"|*PrLcFv1le23y/ ^Ie4 S_)~j?|V)_i3#6rE?B2 乔D'<%eR?deeq rE(y[W k&GGoac"G7& B%YXF}E-bMk˙Çlevu.[nOulwi6mml(s ቯK ⢥?:0Ъ}vM蓧m׭/O[g]u൶٪C}o^d}Ml.[~"[hr[ډmϏng>nۿrv}/X4wiFM/ fsm|}Ѹ]eSsGGt=l!_/}gbn߱F} A~DƌlbqQ_(ubNߜ6=6 nHs\{Z$kDõQ`LP8~~֢N*Z ‘!Om g G,s#]sIseʋ+l:8~Z =tOgg1[8rKt$&yjū0rrrrfy̬7;xT 5UML寑&۲Vj?(_<Mk$_'d/ZϘzP~"'`3S˶g[&X7+3/xAc~n3[Ԙ es cXG-IW _yi Z&9lhco D.Z8BӧTNsʝ|(b^,Û.@ŭjOĶt)|&%j#u_' /'B\g5srrrr+3sL<7>x7#ǐEK=ţ/tJ3wFSm6bO`IsL/ڀKL7 2 <ҩ>r`*7'leϲ3kqKs-V'm\Ȝ{Ztf~ kz}ǘ+aS@cȏ^'6VlcsQaN"(yldb>Uu7߶ھGq?~lL3ǟgo۱;>iEcX-6ۑ؁/̵VcwY;q1%as{:m_~lvjcZ;&b1vbヾc͐3hg۱gL{t$\4ٺ۳߸6d=]u"[YY\VQuo{ki.כG7|ϏҌisml^kֹ:/'ǘ/\Zdurn_$aoI?Gu=_(ɬ|]dukʝ,>+3S9a^g-mj'/]]" E(+\\\\@^(35srrK&\ -&$m|կWӾ>>m=y"X蔇Qx!1+D~đ F~#dq" ce|z ɈK0$24D G_I&<^I&]hA?A/8/ѱE(ǷdiF9*H^Q.?BZAO0$h _U銟ʠ#zO\x*>F!>6czTZLTXPZj= Y7xDG`hBa"$F㡏Ш*3AFTtE; egF.^}kE0#싣.Yh~kc/-ag_y<~%_dW|{{[no>}NS΂pwGN}FZx+[ƈϜC|tቮהSڈ'|žK,bXFtZuw /2GZ~#y/BZ1^Fl Խdn; JW\}JG }g 腾L.Wc-f"/|0qNmx_H /Y/WKsYZA#2p |fB~Q4ƪⲑ%ߢYU//Dc#!=SrG= W etڈ- 94E}tKk~CAӈ^}*C zyAWW2>2Nx>Ϛ̉Ͽ҉6.ˆ L4H^SK@>MO~kVŋ9OZ1d~7`Go往awԮ ? ^:}>_xF;}-5gx_qL}*rvVXx#?{h5A+?ZHz}hʠ6pm,6oyZN ϱt--6϶[aMFzءPSTbdQ,tusmɥFYU \cڴ#PZ|זoz{ /~V8Cs%c [[혖8<2j#mlF=Έ5pc~Ӑձr =k fďYNDsS>V:|_&{ekm}٦l:ЏJ[t-6LĔ?Y!}dGW|Ljĕ jo?ŦrhD<=WgƸ֑LD pt=? p^0L9UJƢ`$eP:_˯6h Or w٤q<.å>yE]E_EdZ3v#y|Mt~D\9u=x*Ǟio\G1-X,s&;I[ezN4p]mwv|uO#G{d^h-mLpw=c' &w?* V lD[]`k7wjzþ3bwӇakQ-0z6ͳ-ͼe]?(#◽|%d'Ʌ2U[Zjþ 5f G̱Q_(ꋤ;kcZa=خ&j7?{}̖odF|6\{>Ǟ7ϊ Ȋ|Pr8MSev!)(Y&i+:J$'/i hK^ЉPH<\%r~KEWV/~={ɕ~?7B_P: ҃< \ 29J@@ >҉4&q'Ds!-;]?U9T:Pb×mģ_R46 tY_㪗v1)ZcY? #甎}:U6*@]eZKƏY"\r JG<QNxSK/6ǓO>$'ghd@bphCG/ţ~ c,"-\WK8zҫ ;*]bJ'6i<GP[2m,m/c(z/OMiՉ1-.ySϞ[|  gfN/,ӁWS7S[hAWLp"Mn S{d||'i ~ A^}m߸.{1^#És4_:"_,sr(;t2{X/B\#Tn)pܱDQf̏_[OM.QܴiAN_WlZ wuY֯vMfQ>}vbwoqS!{ؤ(su]Kl%s&e)cZ6*czܵ 5A=sŃΐb]gwiYb̠n_43_1iqtK_f}V\|۶m7ix=կ]; iDzxW<-; 5JFAbG)?eȩL/i[j]o%fN̈́/W&}&m ]U h |`y1fGDȯ/. N7VKa8܀iɣHD>2A|ZKkK9sww{JmsZ}Ů0c>7X:iT_};⊱k럷ݲAQGxKk]\L;~ƎOGuw'xdӽX4KlK}w.8&_V,B_PZsekj9ݫú}4lwK5 [F}_T;ɌۉHhqU/Z}ݳm;퉯en~]ЗT䣱BxxLto>ő~#s[^,F:х~%"3#rJƏ$W:MT_/|Mubu 6ȣ 2HQ^񐩆,d.ya@@@U /fϹϨ }M@L&Nl DA(qɆl$/ѩ(C N`Nn#/=?\HjQ<5(S*:TĔ_E,t ҫU\d±۲8IǢx_6҆^V@uqtϹ3K œ6O%s(_2)˭+b%>iؿz>ӼD_jySdIs@?sH_ yA?|"-2? KXH_K: .>MLt&[=es{GOv/ʮ_~=*Zoģn-<}ֲ q)o$&Lo/r~7l-N1oR}w򣆺me̷A?V]y;H/ybB?ă/_ WԴ m)xԺ.־?ٮOcΠ6 ;5鱹~QtUsU2WN>q'gVٴy|2[u/"iy}2uڊѡ1;I1q;r3`[kن篰HG;۬_,"_'[p7 [|GSj}=\[8_c6a?fcc͌]cnjN2vccNs sE3[}'þJdWClwZÐyI\a,볂mDOqC82/⥐Sww|DO‰#\ڑWԝ8?m}¿dEȡA48S5|d _6//ߩ} |Bi+++@h*NI'¹r+$RF>2(^zEGy~3UH2S5}Q[jѨ~^[V[QtT|af+@}nԸ=Ew_zDsI<'y#M9ű+ؐKWR{bWC=' IDATւ11yF=ъ-"^/K'6+Սv6lG}b<8F*Ĩi~qܧuE-W W W W W`+/ǬHOmw)@-Y~^qEa}ϑX'Z#?뻿\5D?exK{/c5g= g|̮{ 9xԖ_XԺd;l{>^[WN֟GG9ұQz mm>Z|L,&7QL:nM߁6ߙi\;ݹX$sm٩CU/x̯ }cG.=dJtGuӼ^ <#hMQOЗNM)9:h'^Y}]'F̡'4^DDZzSY Lv@w "F:G 23[-W W W]^lVP8`Lj ~"ȗRH+N'tZ>]_U+t}#ڋbE(z|qE#̟tZ.=>#/+ڂk|ײ^T_Ɔ{NC t$@> QY$4Ӳ&=.ƬGmETp$*_8+$H a -[@@@@LU ^ х-//y螖5G9CO'URU:ԏ2ྠ\0\\\\٫@^(3{͞srrФ@/˽B2&=G=& L((T" ># O0m/q (ۈ)'^-{8?rb/~lЍ JG:/r|aWѕ ?84 26-};Bk#ŭjϘ^0&'òpK& e\ /GWc?+O aJE>6)Z9^r٫E\R'~G#OEYsrrrr[zW|1HC<ۢns;6'G[|G(VXGĔNģ=z`̍8?r2ɪH^GOtO]}'_p1[zu ,Z 7&?:H 4A4qٰ& Zҥ~ΐQL6e)Fb>వ}bWQYeǻacEO46m͝fۢG7‘GO;\ƍyEZ(6KJi!ڛ-s͖/ze,ͷߴ,HͧL_1Ǯ{=6Ps{+NyݷmhK{lχ~Ƶۂ^LAq>Jr@FmPDGȟ8nKzqS2T%8}ڏX^؞cw"noc6o׼v>[K0n/Q^Gs 񹤏 sy-\:Q/7B[0V2_1-*ȗZV<@/"^V/\}Օ6cUt\j+? b= gu2++++0s efS@@3"8Q?tWcq9૊/ tF:үw 't!^>ՃI*_tœN{ɣ\( 3{-4'xC|'ZpЏxbƫU?Ə::U8}NS_)p OE:INeR["GC Ɯ"uU6EBWU#S Wֻޑg}Տcqk_n}ž2~\9⻢xKŮ7'ZWߺ 7ێb-Z{´ttipUsA3d:a_42hW+n[]._m[O˶~姯gN43պtUY[\G08鷠ZȢ~IBSHՈ>2ΠˠWLW~eqR>aW8h ~ms16s/)N?.^|s& jFvoB´gGm]q#(~l" OsSS W!:\\\\\ #Bɘk,,9>xՂUA&^C8`UNU0^e>jZL:@t#yإPKap+OyJ7gsw9rx%İXFctGG%MĮ]8f<4ֵzS !:K#ܩ;b}oVXylذ uR"-Me{4.} {ng|<3l_#x}L3OYf_jskfD||t8a8'Hob^clh#MF%|bLٵۮ\Sm_Z2~U12K.kM|` xD}ZAb -E~?KS2ZcsS2߽yrrrrT@$ NH&N8F`Mci2&zKǫ)bnҋI6Ę)z|. _/XUS6ʾ-6_e{MĠ;x@d/S8ބ3#~w6@ʆ =j{NaT641`Y\+2]K |̤*}_Ą|bRDx5+^x+ŋHG*<L3+++++p+ U3g63cZ e(,J*'[-~)%±E S?9(NmZrSiֲQҾE^pNG%KlWٞo::lL.]?aďmmÏ?f ׬)ޭ[;;mw#V^bMwwGL<)\c̡.). 4=S@ܛm ޽䤬 Kj;vp%%e㭾~Ǟˬvsꧾb}fֱr5櫜xF4Ⱦ؋lWz-gp|GDؼ޳NBM]k/ǍXBEl _d5xN2U_no2'Rq4qS,ix?l H/ C7ؤ|h¯ #YES V×dщ0@ GG^+`_`nj\\\\_\9b@@@ TMTVt*OO5 8D]YN|D>xj+F7O5)"9t mJOA,xL}_t1U@c2 0_pʃV>=CGY.H~_$'x-M׈Ot\ NHyЊQO7>}Ic=p?â U_,CkJ_s\\\\\*gZ wB1>"]'.&IbEyC:%IÀ(ޠ`䯾RBPxtI-CGS6n=Ź!hbltO]g;}1vЂc;-۰/@ѱKO[_$6wE4#p&6ǘe8dK>ӉcbpòyiG}q\#tb.b±^_@ Xj3;14d+7]f|l,]nUE:!QCW*y|rsOm1" ,,ЩWG,#gl?R]x:ٯcMqX%zl t턣G:3Gg*1ImW鉏2yxW/ӑ.ƒ)Ɏe)4~AW&׈tXl2XWŏϬlx-ZbK0O}x3[UKi)Opti蔇n to_ |,&v03Pµpce _\lKZ<2;xwYϥl:Ϸ^_еp Z/8qF]+#1'HC_z |F-hiXӶ=t|B qvQ=7_I[;vi>f[vn;x{a}'g%Z®|x">_Pw㑀&8Mh柮;cdM9m Z7*™1E2gXvʏZrCPzV5wE?1'H8 >^lQO J~-dWD~ģp#?6SƘAt5>xS<ŌֲE'e#q"$&9&S 1Nđ/^Q6\-<69:L.FpjuWCN gGmo,AT^Dž?eVqVTe}Ɩ"xĬ1=G_G| F:KE'J26t !?|$yo*Ǟ}R(#jOS?bU6\\\\\ vW| 9W~x?s[_:>э<<?ѯyD/>e^+t[T|wb/z G'ڡO3E=uWCN TGj=2;beȏQ8z/{{틿 뺋.O x%v {x"gU/E_)dvL;Ѵn(ͫ1c=nEΓNfijnk۱mg~; λlj/UF^i?=vSJt\Kܢa 0㾈j|t/cڊF~uuِcq_$sַx*}z)ŬjgȇGϩ]:%C (x́ϴU 6?|~v1x_'j';1tW3;Uȏ>EZlsW;[ W W W W_Q(e|gZ1VdF<~a∞ W}LܡM|l#Y#-Z:UcE^ģ*~ԙ*օNO#~TW-]x'yJ_x#JJS!y_:_~D%4N-_|֤Scg)6pr-Iϔы6eҧayLg<sIy)3+++++0 \L5|X}y.]$~2\=bN.{1#^Wԙ^O1VE<ƭGﲥvQg:;uu/Zd#~<"=v|/_ΜIhg㾳۴U';A5qn;28j_6<5l6tۭ?y;d*Vė؟InlK1̯gwx٨/Z6Chl#ڙCͤY@^^̱3vxE+->mj#gCL5Pg;ȉ2T;ImsDžq5 \#;} wXWZuxۓl¶}m~/OG< _Gz8v@Klzе|3F‘ Jiʏt=\U]%wtԧ8.^k  Zpm:6b>c~h!z6So?{xU8q*GIM4-1y%~EF&cb>7V#ѫҍ>av; IDAT#}|b#0Ɖ/>KNjlK[jʧCϦOne12) Ԫ@Ϭ*{Ŏ' A_d@s=<% ~I_eЙ LHm<49g{!y#ԟh%]Va~Io&c;zt'm7 7=;e۰|1o t6ؠ/dBkGF=(8#_pz z6{o\LÞ+]vl;-6ۊ7imoW?xĶ|n=׏uc_)ZKֹl\Ukޫg~;;̿ su#[O;7%-) 7_wzNں|W?sR$1;woϾ~qٛ>_16YWy |@zxcȥ/#~R:G3]gNmH۷:?k=߰˞\{{mw:JV8\:)i/_#c|WŬczusяIБ,HGWg-Ct@@KA5xbPGϳy+cCvSiG6x` ͝]:o ȩ;|oY-Hu/|Î>yھ':{=vv;ɘ/n2a9%_$s,No6nC̥yxA[͵CcC-%Ŧ |:xj%2  jx_E-qWzzIy'W/c^viN%CSG^ 2]d?zdؠ?rGysrrrf>fo++++ TA&\ԇ&bb!^щ~?6E(9tSxD b_;[CVm#Oa+YYGZ}GJ1oUAIGt(~$_0٩@|SĪS'K|YǷhȋ~țI\9}!wr?e:1LP^/K1pj@y~G_!:h7HLD c+6|C=Ѕeڳs1KZ$?;| 9t-_n+/Skg;mWmЎs$]ER!Hc o&!6\2Ԋ?#ezTt e>#O/|u>9F J/ƎĬ8Uǚ?2|⣣ N2S5W`F+p>?v͚55DL%!ҥKmObw;Ɋ+l=[@YxׄGF4ᴈKaitot ] FpU?D_GE3Q=:WŸG^ģzx=;Sh .V|W-. xi+!`F=A.G݈b>Ȥ @8_M#Z-zW m]cv=m&; ^7շ}^ng\R,N2~\S…6p_G=x;󹀖<kXKG]eQ6cĚh#v_um^ỗ4OZ޳v'l푿5ϗZe4t=?G ֶd ;ox;lςȟf{ɟˎo?cw;kg'M^bG[nC'V9fKﳁ}?f߷n~'ytd mM=GmO矵#Y hyi {̠~W|3Ȇ|GnkQQuB^&/^N:0ڼnf9>NS]|VҬs4cl'=g? L@'6ޓ_|Oz#g"xJerx}7 SP8 ^^@@@Ur srfO~~ؖ-[Vwu?{/}}o(ɟfh5\S>յ>۰aC#Wپc7hggVx^pMX/ꤓANUI? IOq<",4r"?`Y_R^'SqհE?&#G.nsLG^#O!WzģïЈǽ,\ұLċ8ƅ3΀{zЌG|Cs|E9:Ѝ /|6 syO?k$~me귌<勎u%>z6 s-oOj^zWBٛo>7栚ʇZhzN>яGh9sno7mu=|q/XX#h%c>BS>wnXcmNE 7^j$ޏ^>_Nݻ5=kM "=(wblVgmKn"77P[֮f ށ޽ݶ޹wg’?OM.irߗO翤<зlwXBWzt:-o'~=sM|q:6l-O6ls}=ghB\~-h VuZ}ǦvT1}桡☥_6vL)|Ye3Uez%mSČ>c2(O({x<9} syO??R;ѱeW/G:~7ӹ3_Ɨg|1W Wjo}['zN0}}}v'wygq]wz)򶷽>lo{do{裏ڏȏC=dy{R F'>QQ<v}٫_b^}6n7_^MHEZ/QNdyҽ*^YNW+Gj:ɆF8GUܨ_eSe,#=zGN#0ƨOcJ[BT hpL~f1CW78ȡ5IJ[s6]Wu4]3IlKEn @RHI-?A !y!$/y Hc16.ؖeKjIV*M\}K[ܹ3 Fg>gV_{u;=}Coˉbd ~dC}"Ki)U/,~lUwJ7٦&k[(3p3pw_?ޑ޳Cw0Ϗ DTLwwqC~7fq*pNj=}{}=xfO?tA<z!?ے>3,jϝ({3>>\bD^\ֶ#cOjG7=|\Ldw V箍 f䅶_G,.Eu^ša,/2񂆙Y;;~ڝssA% Dq-ޭv`>2͖\֞A|ֹM@pb{ i{n\{5˃߃}3Wm?`_O^Nj-qt?x l\7ag;o9 ldmg3S ;oѝ6]V| Ͷ9+fןdg|U!.o n鳓}͚:m\_LgJ|ҭA/jc|rە(WCt?U45m\Ufz|7 ޭ[H,6gRοkF+i$2y<yP>'k٥TtC/@}q䓁1 >YJOazdiXd{WSZ6N־/3Pf@gmK2ecZ}k__;򾯯/۞;P~SS׾(n"˾D{m/w7>f7|s>"Bo/pg~k@}J }ץL8<(J`{^'ʪG=QX ]oʋY/tSA80Oi~XhLxQKM$E\A!ͩ܊T6Qy~xO゗D^KrOcj+O.kiOSfN跼-ٮ]~̇=IW: T??igٚVkӧ~/2{?,_xm&X6ZS_EVh2G|QYV{j#?guLģ~?qł,RVӧͱ+N͏Hm}a[}/3GF7|ƻ=>e/<~x?Fm=^%4O٥ϼS+'7HfC4ifwnRڗٷ6~og sy>@d#;ѨA1Sk疊e{8ٗ_ndU(+ʊ|V3"vĒ>҆/A<7O!v'ȇ!"H? ϋ_V-i"(-q9,6>SXW,\NQ xu s>F~Ek}o"oظ̙HkNEZxWʗhA5餱 >8]^Q~EyQV>4U_C_NyE8y0k1cO y'/ڦx?^ |S2e~ڵEM i-yۚ5kbM?^"i*fC5ii>ٺ5;kii9kcOdCcċK'>%4>jq~ȣ|ľ#G WÏmEZwԖ8Jl1@GtS*GOPziNcN[km߲}[N/z/tu:-ˎ_O 3g۾ulgZ|/qz{R6OADžȘ}#KZ9^ʿ%PXmU1eq̛sZmd`n%Ϡ=yvr߮ _-w9}+3m;}6c]wagkAvI?yZ>퟾ėNэ"<mñ~XɓmSV8}{ƶex쎟/9==G<`K2S#ϖ%]ь7¨'>46Ex?O41Ke;z|'رf._1>O?/x)DALfg?[\R(eh:w4~-vlx;Wd%+WA6ݳӾ;g; k0R2^m?FW~ًdv|v_~Ԛ̳|EiWGOW~LGGK]G1}|TďU6N3lڎglwjei'l z N;i{V%sz1aQ&meAZKi_QI߃E>tdyy^L<+^g_(%Ψ?Y3mѥb&'U:ExWc/T"̣ȋt"|26N_+S{/>S;-HG. H_1d)Ǜ.ڤxj[+]?He)u31>qn;52e~8wc#\5֠imuEk[=4_җB&3AD##1<3 Ͻ҇T:cܩ1vI'BgI\qo֔8Nrj>jE4xǸ=`eO;?a~$δC2]YQd Al} +)n=7sٵ~tYCtbp̠ʟ[+۳lJ=nn./F:s0 ߲nÇ1;?)[w7Ÿln֪B!!sb+ͱi^/ˁ>[q ߵ'SMxMv*T G C@ԪzGJ xj.YPT^&8j[?/&VX?Ɛ#usԅGCxQ5"_f@2@䓳) Ȁ0T FV{()H V>o=Mo*R-'H҅sZ ~G_IE6֒ ~U2@&>&Z B Ϩ/~^kr4^iM-"]~.U;o12^,s+^G2MΧXI'g;d 9swvkbF5蟹gc{׮ncک٬3δ'6&'F*yΑGm3ww "c>My#hۢ:2;u6=za LŸk-m}~&: iCFt\Sm6x_דfw7,+y.i,v5ξWk~SImn-}$&xE}vSX$Oc'>xOGoL<䑟Nj/3Pf@cPVf9K~ǯP8Đ\2[ ضjKjMڞ閲3p [e;ؕ,ׂR~ȁEqRq wA/ Ƹc\S?d5\eЙП(kE"~xRYuG.5'#l.䕼G^E 8xp^ 1D( <|HOpN7T'kljmʋEGFؤN:Q@+:&^y xeo9 vŹ oe:vKB[2dgT׶gYjP@qĘCx^\$ϳ;`Y>OP湂=dXx%/¹Dc+\ Vڣ}w>ouzpďSL׶̲lG.fxÀ164d[HGV,d7ni^O9[}PWx Abß`Lt`x?> Ξ7O6٣kg:s9۞[A.۬s3C=NezM[c]<ö}uHоņx^DҔ4W`z?2kV}q;}f6Fm gvgں?;RNF~]2ɓMEA׭58\h̏TAȷpFLg8SsgpS5w^V$yGyMn2M^5;2枭O5kir.#_Iw)#}O&m{<uM7T'kljmʋEGFؤN:\v<"}FWx2e Uf|I&>d C_:h#>c4:@l+rUԇ^ X/.Mx [6=v1.GV+,SEz'2brɋ|c3ܤ1~veV t Vf?e9{}!j_~rm}K5~唫Lmk~F9"_Tkl 7,|:.$p_K%x<?뢖O5]҉⋆Tl,ecF?+X7ŠF,MK<ݿǨ}˃Oh tK8lŇ`+Փ~C_)J<_6 y OP2=BG5/?'!fs_-;b6I!G{_)8>#_xl苇M¡c\y}!E[XSZzMԗDM:Iw"ȁ/ϟ u]WWS+,ϫ aC;Hnc4 ֪!oMG9"hmu~P9v#q饗2iRt|6wsWx+׶?O5lŏ>b̒PƘя>8Z>1'1D^ 6ҍM2.Gp{o؅~RwwV$3ϩHFE0 ̨*-v5UبhGv?Zg}d.kz6nc(Ӓ(iF z΀]D:vSu$QPBln [_Ύ`^٭[ O?kHFt}S?wk~7wϞc{3 ٠@a?}7Aڲٜ~LA?K5j`s{Zje<卼:KyR[o _hO;m-f:ʯ.^1ol 0})/:龛Ѱ?5z{^c6W"1Ay"fZײO^k'J.×>8E?yC{ՠAֶM};+<ҩc\E}Hk-|xE% {ի^Y(,04' qA(g"G> _s_K/E| Di|يҥVL?*n5d-ģ!'ԂG[YRǸ#-\O}6B"<">%,΀r&/-`Eīum$TEFܢir3.ɔ hfd\b+(ZzQ 3/ȋx GgLCeG}yM}ڗ1RYK'N|%㑁+h . OTGP1ʛ&;w6l ymkS%j]Dk;ߤJ/z.,JqF\tģ\<ďЃ/(?ҁ3P|LxdSďx}GZ 9^k㍧N?l ':R":~N;벂F?g<#T2MEVӚ۳k༕ߏictzN{hfu{2Rc`oy V>׷>>t:ًIX߮A8^ϸ`s;l2Oof w9Ə۶sk fට}e´?xwiW}8]FFo5jWÊnƃ,@\0'+پjGz#y?>b?[+ ﭜp?}4|yoKYNYE2];v,/|o~P8xf@x JVmKO[WKx5O/Y|yM}ڗi_*f^A? \s5&8p`]/sJV28q2e&_d\wu/o l>_TkڙFëc^;TkElJُo`~|,Ѣ!b1dqA?}"OhbH(~RR[6`|v1䒚 - Gyxjuۑ[;^S9 :Fxx:.KRr[:SH/BqSlKi򚎯G#Y޳,}D3~yr+ю0*=t_?=|}ƙ֨ߍHsϿgxj|"`^V4s(u$bQ P{%KM&/ЂIеBѥV_'~K PH-cfl)O4-T'ȟ^[@/ S+XxCNx5[JGvAݲ/=6ZC@Vcd[K< IDATv]q) 3|^/x0=۶ZNJSmہ=un^,3ۿ3kj^L0=;։{戱4ά~ij2XȉHɜOOۼ4vv鶱 ^\O 2Y+ruԮ.)_ޕ6%kC/?h"9ͦлÏF:ԔY^Q:. _WmjŸo|(\{y.7\mSQ<^,+Ç.a~7g?(B֦cyLV.k׮͵ߺum۶-kExLV|VO|rAG@,=y&Gvon3ԗF_Sk@'[>O@r":y8"8<8hyWXu q*2ju^ e'ٰC4yL 3."Dz":^p6й/-D7=oSzO|v&oM;Hwe`urO/kUfy׷l~IfN+ymtnD, ;>*cevʋ*Ui7PU/Oרw e<5-Zb\37q9\7c]zeHF w :gwv跺JIfD:gund.yRcbߙhͩ4#yVc4 ?⑏ϩ#E_o|/ .ɶ"Z3^ S&o_E|=+yKgLh{ZYe (3P[BTjx33 _Ww]/ޟa_/|aMq&}62kyk^Ѫp zы^'xX V"C\D7WwQN\L}tNȏ~YH|#.~^Q_먇>j:N?J|! N1>ك3.ç‹.~SRdT<ӳɬ #F\Eqf3vKq s+E<[({IO-gLw=߸9^Y7Mo3 vE]VN]LH]a;8nc(|Z_i]uϯrhɷ>yX#5s:«Nj._n}wst@͝k'6m"/̍r1fll~Krd 9 Z =dy~do|ʫ6"1GE:ǘDv#WCU1G<)J@2eCf8tP,3Pf`/᷿mkE-b]w}}̴tleD_'O?t2֍7hy?m&׻5^}x27"m`-"'~!O&yuEKޅAcbуt#4>Q_Ǐ"6reܱ4Qg}Ԃ|/0B{/(ĦX# P9@S TOǽ2 ^Ë>ŃNq-% ݢ1q~eG|x)8"|qIN)}/s"LJckq؅zQ]ȏxԙ,<)/E_c.xבx2ь яf~\D eg!t]K7}\zOIٛBF?):<[NOCG4|boQ@ť`e>\8㆟){UDտ;؞͛ `m}Zx$44d.cx,F23;Шaw. ;wؠ"%/Qw홞'܏]j}یvihܦNӈQnbk]ss+?;L/L;mff}>ڟ,tXeֳ^[6ro_`- z՘IPih7SNQJͧis^OX6ӑ|ڬsn+oau2|6w*3l^|E3T ~T,3軵|[x9;_z|g#kmz!Gv-=^3!G_z@k[AL/ZEײZ\|gSo'<'j]bj#>M@F9yB~o*0om[^s1 JzFEg_-[2e 86'co@*?n~{1׫?dWɗ%0}~7"߱\am7}x'ۇ>h6򓟴۶lb/~-_z^;~mJ@- ʦJ?o?#;lĆت١#8FS=}@+^pO#_xz_tOS5-~iӗcғ]/OEbr<ĸt/ȩp.ЀJ7".z@tE뢡 ?BtEsp1ρjzo<~=d)Dh#6򕯴|nZ 6lȎ*?h67|s˳k:Xk=O%Ke+3PH~|~Z:d mje-Pv_hƖgdqNxx? |\-"|׬޸ؿ3U Mw7};v'iG32M~tvi_wEe'{mwӘߖf۳QzX,S ntr~SN:zΘϫ v GR-M{Piσ]h {L~G訨垿usfS clQƓ+CQaf"[ef%n'Zɛyou_?ʶ=K_cC[7e D66ڈvƓNz7]gZxj TP݇,<~շf9/}^;f=cY) <F[p8HM:_CGxyDm-_[<|ɑE?E:IMk\>d&V4Y*&'Xќ.ꈧ!c@O4:G^ (3Pf@Y(2chO֩5-fҦo؛f{'(hYrev|_䵳>;+y[bׯw%/1mQ_蕭@^/ȢUt _xl\>Xbu#] ' ~^<)ZqLeLtiE)O"ߔFWϓ:&9IL8l[0ҡE>}H&ۨGGM?qFy%\Дi/>ʱbUSQ'qG9KMUq모H9. ޻lKd!_`aLQG2ljyg2 J ig24yy''&-~%OjPWM},G:nxbIe&tZm]-"=[6gt[L߽ eiW\֢*n?Q/x98oϿwldvÙe'Yҥo6M;ϴS۠:b^0QkbEњfPu=9`/ j›6kikƗ>r3^SkCc̬WV5[c6#P۶پ 4^sUSMXW?|c#ۭf'5&P0~#o/7jvprTa/rzpnt Fȥeũ6P#>g[:ld+ѠۼKYhFGuaollgZzO5>FdžbWLJz=,6| 5^ Gj+yY[x%6L}j>Sg5Zm7.:}Ahta [w޸'+ye (3p3P uTr/\kkEH^ӎ/<}_|;/%UW]e??iM jM[f{:W|tfWu2,H3ذn< ;ЩOtD8zsE<젣pŧ+ŘŇN-m7H?m'x ;¹0/:/ًqž%KW+KqE~ _ħ8G4~ѧ'*Tȍp]BeF'B鉖_ +5tO×n:gG շxjcG45 1ƸDG\ @)‘Gg3"!NdqL~JO8Us@E|q ">ܡ.2e~2pWg.v=k˖-n_f#rj 5<ٱwy޽۴{W^{\泔P *x\ .8H_Q&<#>40]8sE<젣hE^S\i-z@D\:LC?A3?K< W?jإ6˿Y߻[AtQfċ}oiCä]gf]A:MG)54۶<@"v/*u_`_76YɧA/Ulwp~/:d&:`};}w-dw̽xG^Tqm˺Nj@l%/fd럴.3/a]wϟ>KƘ䟁HFfss\(@kUqyaZ-_1ZӋ+^u{ЋF%K 60O>a~RxfLE1ڕHGx2#xHѬ-ؾn_o ]tD PC4 +([9'PRM4EG\4} ȚGr%]5竚~?h ex ?3&Zb1Ozϼ#(Y (3Pfd,9>y-8 \xᅦX4}7)oƌַ5b_ڜ8C}dT`1<xK?\M<~EzC#H?^hWbyzE~M([O[O-\CtӋq1}!˃YN8eAPy\DC'AGr]c/Bc|( |@|xFḑ'q"FjWzEŷ؊t*}V[S[顛hW-"Y-4d;/-yxg곤 g4gc믿>O?y_]S/mN 2O4oy>qM<ɥK&^"=o!l]byzE~Mte_+ZuS"z9؞MlEvw˓3m]w^e74}عɫ ğ>zmڨSlwJ3gڬ3ϲ^"۴Θ}ЋlXSk5g2w~o|>AOYL~[tcz;2_Ȍl'zH&ٗ_mg{^du {A{WE.:jg{QS<MH<+A֝gC?e-x nO{%s٪8jT>(fPC {Ai6Gm5hԘ۽pjϩga^3gsv{.~ի|wy.7fc>$|J|x+%g+Z-9x >S";_ |~I<ѩ}xlnt%9KЂİY ?Fyt6@FgC^ (3PffQ^f@2dZfa Z -8Z_|DD=!ׯaG4}O`ԛh [m#nj -k7|>' "Ar_tlLvl*|IG|gG|% ҍӇ|DkPPZ0lO ORշ64=dS4<ڊ&'yx̑roW (3Pfs=x.l_9y銟O<#i_Dҗ.=빮g=}/tuadj+ZpS$_:.tZ0j0_z)g%/h8toߩS cT$}luj[Go>?gκe9R u"]Bݨُag<黋 qM-63mwicT,1wYpim~nw{v#=mBQFVc?o15ɑed1>`]gcf]vxcدc" ӛ/9_ْ4̙ɦBʴ/\3~Rs,=3m'^҃NmO^N0mFs0m[`*(/| OyEhAJűhq"+.4ӃDޔMfmA5Ob(a2e  2?ee (3Pc bgh!y,ϟtO<]&7~uE|B7%=l r`/ŋMhM}FW_OK5Ze1~/|G їM/B{10Vk!uG4#cNi:`I+w\ʅ䢋[=@(^Qd& V&qH'j_5xԉxI/wSȁxȎ$6AZ|c7n%}0)"_c?A#Lqe+3Pf@2? }Q_|D`+_v`k#;GE2 5kll}t\E2/dЮ*nPAcC#L6tdBŧcZ:fIu؋r]kvﲦ8\"1HvunWخ]#̽~4fm[\)eԴF|}G3F=fZE/3>IH[7~F>UeWa͋G-}W!^xKλe<|lm~i qŵ0ڽPRBђkq~F>m KYԻ~ mjʃ43MTgi[mّ\[LO=l;yLKbW؃|%3q V&I"ZGqB'c?`+/#G}xGCE8hSe (3p|3P (3Pf`C_h^XXHWzF" .Bd!4v`^R(mQOrK82D<1UZ8>]zk""_|\1WءQ캰b&i[~D@A&Ke|x_蓾ND<y Yu#K:A~O8Z`ol5?t}!hGc MOߑF/KM~R:ꂣ/:SH|(Oy6?>j=40!~LqJFE4vi%D^}+3Pf@2? |Icg z&}E<~ o5tPSyŢt4.] Ѓ>P'0fvw7t 3 ('WGO;`m9ڢ3dd;lya;墋lo~v8ꫭ ",V?*iwi—=6ټSNvoC,"1;|W=#_p zqDic^3C l{җϰ7ږo؂KڼHQ]zowMN>'ۺgd|}R?0WFv Z+&K/yXߪ"Sclxnk{bZkml΋jic^̡h}|W\*od, ]e6oN˭穧o6/dZk\y dd U*^,s_a}^tŋhya;p?kum|D<dp#Էh]E~"~á$t } ;G"u"AA ZPO?=vG)IQ8NԷh|#&DV2e 8~xvUr(=(3Pf 8б (-&B-=bpZ-~M!>5&%  /y/Ɩ)L?ȏ t"?tCBOy0M}c $XN!}!:v&E[Ni÷hı89{rާK&?g| @Q'fwdQ=~o{c3N=5uhUY|j.ȯdF8ϋkNb|y[} z!T,mf6N, xmIщ0xe]y:3}v\s/t5O#?>c(|Cs#/ktS7'Q|ᑦM}t2e heъ@2eZ!‹ <,"Qg2x<A,OZc,QS!wlsO>9+yʏW: ɻkY=*ٚ$sѵ}HC^VhUb. -6[9HA}舦+Ϸ/}N2{PO5.B_f ò*G;mVm볼O3qฌ8`,Bo'ލtwLw7tSNܿ:7Yck}q~l:Ywv7naol`(Eߗe1(سMЬ]G6z Wn״εa?&qsoc2e 8,yx)@ \܏7 KۨWՠ(61џ8^̣S~ԉxdiX_KNb<)/K:|ABG:\qG9 B:ԗ\Ήx5!4<&ˆ/ 鋧 ;`# |`eřpt._(3Pf@=&Ӣ>/D|2~̀ 5#<7"CWZ=ժF!8Lx h)DLd7bdG^3_%+yd~5IF-WZ6?BNjY,;1/p8m۟Xkxe~4S; 8Pߍ(e,а5zLxQV5¢wlYg7AeﵡgP.(`n 맸¿r6q?.mlTa׽f\Wگos?ɏ-p ZZ?j⭮./>B{gȞ~`–~Olmy۽бK[2Ҝ hGkrċ]7o `˥aaCTu+6#3W7jK9R/V6s9/=uu=ל 9s˨a+tttttfuGsOs'\λ.v2ZᘋSNjwcsx{<r=vV;9_s|Oݿ9tjQvHW \hQD`/R$0zKXXsx[ߌEWcp8z4e,."$UHwZ$3/.<s+>g$-绹?;/,cگL-Z2/V}JœW|8kԋc[Zs)8{~ű?&ߒG>3!?A';^3\Y-9cIغ>rFwډ`ݨѪ.j"7˦2vbvB}\yrHO=s=ל لeYN—ܘ4/1Jҁҁҁҁҁ:a]Єg8د_O:i_X`> V܆hSĨˆ\ (GVǓ_8/˗zw bY?6A9%s (ѷ'Ъ7lPz, 6`r=u*X>Cq؝rN'5!Fy /2N$3л.;&瑡c>W=nu2jWÖ`.K3_(vQߤC_G@@@@O`t^MeK XQ}d侹,tԉ_+{8Į˛c]n7J:;u(.8yd y*_Mϱu]|a8yZ´(qEUlls_Óe@"2dt]U\`]f#Gx)>腨;0sJ/dGb6AvxuǣU \>㚓 /*\v0uxm98E_PDWu?ܯ?i}{j~T'v}ׄmǗxlÿ%;}щ65 u*7%?ǻnqȏz:^dԡ̑#]Dx!2G !nP-9sgZT2n5|J &җI`f͙Sv/$3^Կv] W߸1ofsuŦ_LrV@& 33{ǿߺx[ h]W>.uҒ6N~Ѵ0dm̽ڽ?箱C士 7(VKigŌcwD-9F/IJUq9̿/ƙ}+yzzE& +,4M޲9FFS^}%zR: IDATZ$dfgfvL O͍{vK}OŏOgg<_}5N]x[y~B?Ο8`!y^9u9Au9:a݊RS+0#Z+atMu9\p9#2JJJJnlBtttt`aAC:v֨ >΃(ba&Sp9U jEx#`E6^V =xdaw1'C]3y_6Ѽ#;WbISCieiˡhbkHozHZ$1Z$g~zu@}Fdn4*,ߦzUr/:;<2/|\1zRlZtep,\ś~?T,0[:0._(3wz~קd<G˜{X6Ot~!>˦^8Yn^###g7z ,xu)-zGČ%K+cGDZ27^%[tm?y H `~ZHSHYإX}Oz@Z|dW2 Qgu:K>8u~H9N2SnS\G]ǟѡj_hAUq|ηMvu:V_Lψ(2d _Ŝ ~z']G넗=<{̅y|NM=uV[\#=@tPM[TqvtqlEMqwJ*;+.Dz[ǂ55 ǯX X ~m[ZE2WЋ*w!e:ҍ#+k$^FnB-ǒڭ[b0ɳ뷴Hff^q9-+*瞍#;ǚ 瞋?@fa;u*݉<d~}9Np:nֳ-5wT/Uzkb TM}Zd唹l+,v`]nCїLoʎ2tttt`:NPq![LnCvxtz0bC2&;8[aZوюRKg^>ŪĐiȱ`{tV607*RM:x|`S ]ssbv INѹ>e|cxV2ZzѼ4ܯUNlʣxD|ܹ^ԎcuR0<ĖLur0&9 뺦z\K8^Kٸ3&l?)=NG`^'Gp9V#ouw3!C?=IJ-uX{/}|Αiz#KGu‰O0Nߟ^t1=1xX-]V-=onzhUì9☞fhLz%ςJ[6퍑p5 =كSѳ;vq }l.{/^u6NsR /$l@;-Xn|˩ؗ?D^:|3}OMZ#:3j_8?O3/Fۢ{cч~:f/[QL4/zCzӟ¦cfs۽zuk]8?zߛv:^;ܱcџt"-M;Ljj8Qck:^zgk3v=l]xn<׏B~ ׋r&[xX]ڴt.Q/ky#ۮke$:]Tcx#9ɇ, /((((y( en^Kҁҁҁ}˽?,t:x VuM^'_qMq舃 =c&.s=^ԇǐ9z'هu_K :pMb's9oCU/ch! cuF^$:w ף,sB\o#^>^^5T׆Ωxdj4rMbutP?2I/8h+εtu5I5 ˦Y:P:P:P:P:p}-ϔ :d:9$t=r+&T$(zЉw&Kase$cc1ets/ 1E=[Gwr,I;lNdHbٲʡڥ f4(33-YiטsE2-v21#B 6{).&]o G+~8\UW>׃1vvbn/ ֦2+`WV_i{˚&^#ڝmz8~Ȍĺ.O“pAϝǙ}ڗWY65k.2gbfIl8Ue.[+f,I=KH~?KяƝ4^cSOUa]w'I~\ 䇟[]S[a\SzH ^zlP0%'~N`sYxa9ʧn'756tܔT(Bc M: a7mc6xbnUu1Z:P:P:P:p:p.}rȥ_6C(2:ʃ tЦ`sZWG;]&_ *}lj8mЍ,wgǸ~2bA&;߷VskY:,'xtp=餺VoKoux,?xjxNMp>Mu9?EWG3W(P>:\._y$S^g8y"LW~72$ouケxѵyNV1[ΖA/rLn<k=c\ "dF.DWO&K={b%->{6  ¨Gwe)sc㻦CNu崣ƌE?=]ѿ7V_F9so5'wMĬޮXzkl 8_{OȅXs?xפ0G/DZ~"tmr>:3{DWKoFZ5wg`׮4ׁj(F;TFxd][C2V~{4/|k}Lhq7bU{<դs\/r4MmF ˁM~pz:Mux9Evy,N&׎]qdl3Y#SeyPlKs&Z[Q+iZr/ǒC5 >'$sxȥ݃>|C䋞`N;U̺蝺_;s ˮ~MLNlo^K2vqwLU+yī7?-YC1?-AZ41#Ŝ1Z02cY̚7/FӢY*dr:v9*>}7S^ tba/C0cJ{9^tX~{okv ZyעڡS۾'~Fc݋t:v~Hk-}7cyv iK#q!"ӝ9;[w-5gN]||'t%thFW}XXuk%sqXG>y#VxKʐ}:;zKX\sSlOK`Ds;Ҽk:oGu'9`[Q`^Vxul+<מkUb+(((\Opzhw@3GDy@_‡zcב? 6s\.s{'2sG?U5ȗ9 O\󾃇QG28#p`Duu:m`^k;/!C?һepņoF]ӹu]N2uBA uɹmk[~9r;ss+;9?ίKJJJJndtU>{^xǑ,|.:Qu;\ש;q[zn\$^NeMymS=&d|6tR=- _8ӫF/^Ldz?Nv-"zӥQhьY\J4IGNXWtgł=qfŴh%+#qǗ]{^4rX c1h׿MrsڟB|d[=.;1߷gWZǬ9[$sբ]aҹVF9NxSEu.kƌё Zzk <3@Zs.ӹ@Z883hQccsƺ{j W|ӱh8y`5g` vpzrt!\NK8ȀW :d)GpVTan.{&cxDpy?rLng.~n>o'skWkX^:P:P:P:02WALC5t|:AmuZ\啟:=U>T:VxqrJ>(]oG嫣j]Vvr:m{?0Wye8/5aG[/ST?Xp`gnpxWb8!0MؠDe C.u xw)|u%X#vdtMfG6.ϩcy|t sM_oFtMAd$S[+pv e隆U M9&IV>ݘ(usS|yJ%hDAjBrr gTZP=ikJ;j̊8ƅx7o?2`Id|j'e7W eν-rkl+f=ñ y`NU{_o%|p|W_^5{fw̆V.?f/\WH|p}sPԠCF+ #?Ȋa'>r^)]6ۊʗX%z[#N}vI\j=2T)uCeWfЦy6~MGoKJJJn\BttttAIC?\[gkɇcx\n=YkŽM.qs{܏ouC"}) ΃{se-aϡ?rpN; :5LdFbV__Let*z+Ο:/vҹv3G-=}bӻosW^DN[<݃w"]n#/uH/F/xpI= {mҡ'd1 ;UJzbS_>¡';N?tGvUaz9oomzV=ګwW}@3UF[:}P,Ji1=D6jv.#U޴H9sb$-Ŝ=p Gz[;U kH\E9_sա1\Y(`8y`^.hgodZTr>'l^Gn(crrٔ~Q+HMΞ<6:}7V6<6;j̞瞍<<z(fgiɜPd0zǢ[ni7%Kb`jGY}ѷeK;H 6ͩʜ~!6|]ZLbWZc|z5+__Gz mEb™uJ]3bvBOӢ qPl?/~~|TgּkIlLlȪjlK+3?^n2k޽03kb7墷,bf,Y]+Vq>jgO;Ȝxi[?v4basа>͟ T̑#{o?Al~cխ2/OoWdYpנqg*'v#=?s{lϧy0 >SS14K*~f>Gs.T==wb(|{-^1Q1ibq6gaC,8 q<}q{/Ǫ-Ƴ>N _SρBth^:\n#te^&?>^϶:otEz]`\8=\-담p 16qir :e}{1'^@}Ol='"JMRZ䶴iSo3 zՌ(ҝ<gyys]>ivZz=իf^?ΫL~8co鲸#x;߉;;J}ϗjt ~;^܇'>3z9sJ7v"˧9JuFa{ڥ}uv=(X'6,Tvs]eQm+/((xkt}{kTY:P:P:P:p:Ѓ6=%:jjMb9 #}.T[0:w(=cWǁzLx;gN1vC^=bmEbAZsrX[̞7o\^s̙jɴcᆍ1Z,>Nf.]ff͙ᄻx`{Ѣ({bv?l?̦W> 1Z3qߊKi^=6Ėϣs 5ξ{j*O_yM]$sC"7h|';~vU:/%G;FkGINzRMiq2.kEz1]L}ꙿ 0Z$s6-|Zju/_'m_,~8{Oh}:Χ4Zd0'-ghLSm^Ӣjc&L11ǎo]#c[ZncAFcT_=w8 ^]&1yViapzE Y+Nz҂tᤅ1#13a,XXnIΥ6o8+}'F2|g>Gv+V}i=q0*NUt j]\$ڟ^adﴎW{^Ś5=?׉8A]'^C6q'>se~}I︼&)=5N9Oؐ-+tttttWR:P:P:P:pЗ~x<̺SjtNoηL\h\wLmu2:>W4 N;PO==~ĕy&d ˹?y;\V:󓂡?PSo Ω8 z=xr^>O\7\yM.i:Oϙ꤆U\0^36בr'~K|=ׄ.{$^gxrz]@@@@ d|=϶Wڥi{Ƃ+|Z2s֬+=7-8}PGLZs1-I_b]wPZL3{wU Sq.Gu^3Q%K 7/`99WO\ʡ_H+혢4N_sK#W^^c╅2=7?xyt!޿:)R:ky˅b^Z4;K7#?{뛺y~voo gzҫr,Kjncqx_:t(Ξ>5Q_=l MZ.9Nv]Sަ .:j #׃&z:6!wBt?R's9VXa.^ѕܜܜo{7g.%K@@@OHF*8ᛦSa%A\(vb_2=np/I﹈ՊV>6C?>D:<>6sZusGCtP+1Q)_SqEH%XؠUA.V#;i}+|􆞨Tp_ِxXKr'X`k4;d"& S Ae!;C>r! [pDoƠf<9_EJS:P:P:P:P:0p_~ElpNSa\vͿ?x >0юy[[()&}䶺`.&:a427Q@txVrjAڻciq+^]]ڷciQ[6ȅ%zEPYv8x0~Y~}q>NrfΪɌg0r۵pQ^6 EyUsj,9B/Zn홧;YǻxK߉`N3{2[6/NM5]sw( ><vVҦ^k\ӣ\^;7.Zs8gwc Wfms.K=C?z&Fj^.\/vNٲ8 ?~*6w|5kc VlTt8PϽI&fNSٖܢ t̿ebQ@Љ֝{,t+C:O~] O Qt'cnO͊ /JSYw9 cLO>=Jҁҁҁҁwhx,F`Vaxh+l^+(5:n*ui^[\5IϠ8u,_9Oܜ õ;X8l< #ss)u>y.a{nx]8?oKjTmBvQyu)S )d(׊|Qn^ z0ؘ'v`q[<1ڔ<.lkkcK׉_wy<RQC'`˯%dGK'uu—Lg)x4w`#U6~~ mGօTn6׃>]tqktY5r~SIybT5V烮 d:UӼxΝw^7[oe[O|;^NXǜM] N+7?'Ӣ^vJ[:%,I崨F .N)kw{7ΥcgE=̴m_F=}%FzgŌ+uDe4+ IDATƕF+\st;q$Nq6̌;nDsk\NblJ;hѴѿaCgW,H \._ q-X^s7+(sԩjYq<-䓱顇bSO=X,M~ZH{17pqM :t1V ޯuגt~Fv]—9( eޜoCln }+yݷI/ ⋎zT< 4Qpr7Q&9:w.T'FUrL^w;xرQs[=6Q:ɑ]=2(y|g|'21yLy:h^o]N0q(϶tҁҁҁfBy+U%:TH:x0A_NN7QONx8_V8WtǍsis^my{pXKֵcлO.0,vXă,K\/]/;y^wҁWtJXA '~Ee|p:d(qeQ\8/tM zxQQ^x?G[ωW'c'(rŴ?.xٽV v:)9L9/n];NX]WҁҁҁҁҁG}X'Bew{8~9=.o~)F~o$'4]&?ǗiK&T7"yM>V<>q\8]dG+q\/["z{,FGFbUZ:-ؖsi9iQƜq1-8s@UH/Θv9 U9i^-ٿ?2M[wxS]Љ2t|,#}9BwY E%+/N&ŜQF c~1^-ΜНzkqk_'p9:2O+1za,-l[?Notď"\LUI d?YF:+0-bӫҹh'j4o{Q'b0tFmx%-]J9~|蚨c;EϠM-Y/0y4kMxËj%uxωlW'c[jh5do:w;5\``zA9Cn—27%C@@;,t93Ch'C5=C׎z:,v1ͩc:'CD&8cw* 13xǢ_GmXK `u?b _Qr^;e0o{$}SOs-8Jl|n'&G&&<߄k?U=~Ny͓˯nOTg uqYT ~O5d.:k 81KҁҁҁҁҁN;+^:iqdN>!c~ns>ǹ,d@=^'dzHm)IvS97葱!cmu({bj-xk_vY޺5^xjǑ%K~(kxMSRI̟_-Yy3'=lsW7yŅbNL55*F>nTQF5v2韏YKWЋ{w׸]_23Șe.Aǎ2u?^(M?G_N;W.oܒ2]ΟmG-*衃q)-|N\L uwH cΥE1G]\k^#CCџI){cq>]-bx"n⥴&?̡iuzb0gdSp9tQT<ŧ_u|Zs<~s9}[A09]>z@[Gy!Jy=Z\cq]OFNy|y#ڔwu~yv<לS٨ \|l$}`G_WO.[sA7(2}AàÇc>sLN(\ FNXd7N\a)n©'|y xn/@'YrNqĖ^<=q\\`ɉ 灾SJo؛SWW{S,I|a<S=,MYH?UI;yW< >KmpSc_-9s`ozƞ'XV7=џ ݓvI_Jr.L\r*ЕTFώř&L~ԕK3f/~9ǁkK1vlg#{e bdUHǾ |욐q_NYB?s ]ۻƘgWvcG+Z򜞘΍\L}1BMfU,tKoɥG].;֭c;vĶG8]6cS\8v4*߃o+ǪڄPN%tSLM>n'\w׊E~MSi YzӢy}ѿfM,esڹ3oܘ8޽1v蔷]'x$ ;_TG? щrī6/zjG%p9EG&p^;TTU}NC~IƞSΫ5 p!;;1l`Q:.xŨuׄt\35}wqpゕ^lH;h̹3gbq#kiı3:>HN d^W*{wdfڍf!-`,rkH6ob .(z˱ BNmy4V_+VŌ=??~?E. ޻p|!_(n,k{ꩉr?//q'tt_Yf OOu^8Ӡ8{d(艇 <_9Y鼌E@cQFbZԕvYIL¥iiqXZӿbeZ,sZ$ }=W,ٰ!Fcc_%|NeĽ\k|Ge0v5"vN6w3qs,9׎z:+_'|ew ?Y}]L(&M>蕏JGMPpN&, W^ًtttt`z;=Jҁҁҁҁҁ!/X[=N_դzlymXĜ.ybz^Nޛu_wh I$EmىcG=WMٱkƱ%)I'#WJʩxgg۲"KdI(N+FsxG Аdo{|ux/{)tĂJ/:x`Wuǩqs&1%tjuP^!dQD5cQ5yAΣslB׭~xOdW/5A]X4]v\:Sl!o칟Ig*r`ˠ.Q@X 񒬡86ۀOsJ\/WX$kZ쒥?CsS(u=N?ӏ_}軷~b.VWwup,xT}Z1HG,t!dpLHȃ ſ[~BM]Ȋ1'n M;d≺]ʞK0fcmzMyomZvnߞ^}KoyK<^l|-s8y,]$s>~3gYnGSDc(:Q !>}S<7?+80%6:uIfP^rT?A=TcUځځځځ;P7ޫ n搥s}p=9ڸˮAL}L KkecvHnTq9bJ5m(9kâ~,_^rGck:.ҫ~C_$X鹅![T|MIvJ$ËkdئǏ#6< ^,Tu{-mNzw6a+QpPatkc𪁩czsˮ +_L|܍W/]Q&ܳ_h ot??jqlc7ƞO~_um/=,y*ԧ. ͽmFkbnJOcʫbdŊ8X*36.uK#˖ih:n~S<{アs'ұ|?]C~L9y=oyӦ#wSRlyǞJ)t-y]8/sh|Tvk܆bDQG%𥾼vXT|-£z6vkc\\x.w T6~<;qxb5zQy'gcxt4ƞAf{ WQ0 mѦ;)o)cOܿoWq8/[huLェځځځځ./%o}]w4 ߐx~A/onuz-D8:rKE#&>q"wtߊJ(-ՐJaW>wr3\(}.;c IDAT^|G z>J'zz>%^8b$נE z]8`*O.Q2bJΩsJs |䧞^Tl؋9aDs]c@hC\ꀶ'g'c6|D6>&#?|vvvvvww$ZCf|7J]iHDn 鏮 #tQ?8ױuߙź >:#qK,-8.kf/Ysmؠ{.qmHͫI&5=ҫ]ۿvW\xÍq~z"ɦ׽.^xX~}N3%Ip:7dž+Gbpd|ssxkOF鉙7VZ'왿>#_C_rÏm8^o7+iz˱>K>H<U' >:%=zIz,yS1\^yNtbmZ#6J|x%b2eCE׿>r|4wtz$t('tRxd0Rs^~P6 ch/]pC,tsJ=Fq%_8x+|=cdu(bY^ &T6xrTvw=r|xT6qL O<;N<6{ws; Y ڦ^i@@@@@ETnW|}o-x|7R6-Xën D5t촔S3ST/ɞ5#KT1`ރ ~5}K89ŏ|Pr6QbiC=vYo3E ձL<:\Sa)>u€S|rs^xw_l%J l~vxQٙȢ:7r.& O`*׫^+EY%*OǸ?8mdCQ zdQf+Xԍ2vvv;97PҒu:]zM$bRcJfs,kfݾ&X|?b@=F ,Shv_r78)>k1% pҕy_qJSXC1aѩ  u9/ȏDv`W\ E5d,vdj\\S9({L׋*_ǣcH ]'xxPX•tkU\$ GO6{$UNjNw ׍y<5{ο\8Q-۱N,f֗TulSLw=0EzBVNs_8`r*OM:l(زt_b`̦'k#ڵ c:szj:Vpx{Oߚ6˼q;z &jalDbJr8np)>/D/^s?6),\wmqq𧪧.%J:|N/%=wu|5f'|,NFcR;P;P;.\k@tfsJ]DIvT3v: aCC1STВk ^uk8(x!`vl%m9?Iv,y}u|9(kJ"k$7=s—8zu[kjjjjN|@@/0gX{T߱\_r';9绻um:DK]CsKT>p@,{>XDE_m;a:rY 1^:>.^yX9#{b֭gDJ .]O>{n"mַ5Y2:ڼi>IO9z̎rT>۞}f̎{2[%dd٩XubzϫOVjӭqbpvd Ź?1vٕMtP4}y|Ҹ+=yO*,ӉIkdM1UKXzΊ鴩e>mL]'{LOLbVlk7O&ImzIq\uu<߽wƶ*gmLz.zO}2#̧c+XXNsz$k:&3F~:ī9nF_6>N.7'a%nsyE%v*yKuW4/J=Sz靨1JkjjjNu̩zX=72ܾ,77yRnEU?pnla@^7UcGn'uxbO5c^QMs?[2odӔrqnCx|1_f׹9@l+c*+~̧CUL=N~ ~DA6T<6.0yBmw=2:uY8n,l~N" 1K.kZEɅO[>%0LN5fJ#\.0\yϓې2~PlmCuScWKG>h׫\O=y W6|UW;P;P;P;P;oEߪߛVur|^;kqKȮ鹈q+׷$ rb@Nr!_輮6M]uU=8내I&mِ6Ih]pAzɑX8X6d&)MOHK>r5G&vܽ'ff-SᵶW7K?cd#_\pא^t6`\?n=ދ1N޳ V]S֩uchޘKdfғ_30bhxzҚ^K^tp._)Pz6<6 %iyUYOxK_fʦkqyrxd֩c)6|ؑ>Ida׉Xr@辝ꐍI,g|<JkjjjuF.^ `~ɲS]dk>>=;~85f#ީxCcck'SL뜨ʥMEI2I2SS1z56,=?m@J_ǟx"LOY6%1cVsɟM2ڜcߎ|..{;kw}5qɛo7c8mh*ޜX7a/x(J:ߐOq ^!EqO[ 0qb\ϩ׀:I e^O%ru,u96KxjMx 5J'xKU_ikjjj@(_*vvvvf {~@U2# Ao:wm~;Lq-kx͓=c]V~9\æ>E/Ġ_\G.|E5pP4'_q%!-9uAOQاb0՛|a%E,mu+86cxA8(o|1zג汞VF,{d/8K1zy U >:.򂓝GzH4J[0RlNXȢ݆i OmJLǢF</}i\i@@@@v@)ng*|}#gb/|v:tNdcHVDqyOr0OXxQuW25QtI/9<6jXA6>.S:Sz(1w X׋cicW^^z)֧IO4YhcƹW^Gf2=d:mIktLftϪS#$o˸h_7mv߯~%ƶ^D}S_20΋XƅkžO},F6k?}d݆8T|?/|m_tf+ƫWo_g]"}i GX̤9x,i|y ̦ͥcpO_ic/cxAخWb,YXmѓ{c$_w]=硿m7O}xҷ5mp:7fEr#d/8{HBYCٴcdG|Rۥ#vKQ0PͩbJ&6\O1!CM/S;pqŃJ$ Uvvvv`q;P7,n?kځځځpqݠi'NėыzחxyS=%|NzDK~%[^k.(c;n#"`J~IN-|T[^\)GuO{Gd|Љr"?>uTt ZE5!k+d?e&8]C6|);Km^ٰKkNQ h#?!C28QzB6beOEX.xOux[O|+qM7ž_eV'<M2Od5@C#1lɴcJ: ľ:5<%S9[r(SAbo˥cViz'x|h/ף.0:yeiC̦[ڞ&=g_zY$s4s<.h$=EOY6hL#'I?6 U\ j֜޳+vOm&? ,VN>O/c1Vs*CdPQfvjT6z~ xX b~ZIُ3ӱ$mLO]*ӓef{;??t󪥩]4^7v/..jyR6L>WZͤ5zuKua$}E7ڰg㾴隴颛x$=YvGشFl蠲u96w=ǧ1Eg튋SN6[E;ۂ!SsHC~L<<~m;Mbt3u)v=9>u[=`s*^^6<8ջvvvvv.5qf]Mn$K>]8bSn;R :QGҹBg7 Ǘ^1/" IDAT:OLhhi ^EZʵ:_x=2T?M1b D5egDx؄6fHp nou:ا}u̿>nϋ׹utׯ`z%PXo2[Dֿ(-(~0=QFC^̺EAQ˽''̦>N5ݻbxz-U@31z06KZ}%1rem8$ 1: OYy@K3='l葡ydNj/.azG\^2v$;e/aۍkjjj2vvvvDtaK7to2J;锏 nNNk`ukOzvkR(<6hn0ʦm4585DA O]=#(}ODZg3~*~,Xͩ~tyM87Xmԕs8R }=u._|x:=«Wy&֟{nAz=c^6̦',Ia|gɹ[bbiI|pzƚgぁ{{\>u΍.s d{= -_&&ȌlzuΗcb0ziɊ1gOuqDzί=6]H}<:3|IF6ݿ黿_{m], 2[nw}׳ėO_sN.Qjֺ 3+FDžw0݆VWl+9yay)0&Y b";%׉6uj#f+ew-.q:1зkӫHLhO,N'VR;P;P;P;P;1`@{v75ԁ.K%G?4<4\܈Al^ѕ(8Qs,DeeЇNX<>Ā鱗(M)xci7yN#9~ crq8UYk3+^6 )?vء/]G=ħl^xǀu`v&n5[b{ ?ut}nSNjĀ鱗\0;u_IO,⹇M۶5cdm0#w7t(mib?~>'{ӗe']7s5t޻V5ʋ gc[gngg6 ~C3 zۅ %1s˖is ͽ矋Gcxժ8^Wʫ{Hz6htzbO#x?#c*%ٟҋq|鋱ӹtϥW@isd1 ̴r2eӣcz]^0m|~.> S]ׅǛ}9>pP\X,G#O-<9d֨, -W^Ul|d(qJǀ>3ԏ&#'߮s/Kq#晠Ԯ:}MZtl4 /JQQ?,1~G<ң5U0%zjP(rdI_5-E#Ww%k^ֈ (ߍ;=hCTC^q>g-'[. l聩^pȯ^>׉l!_z~uwcwjȿ{Pv|0"u츜'wãנkBe539<ңs$/]Iv=qm^%tMQ5(6 v#2E鳣8|/6P!}TqžSɉ*L/?Xy/Cax%m.|h{}K||[qNtמ|q*X6L'<[cfWbtxKwǎy d/|G%z_|鳈N4r}Lmm?\F.|D4’ ʿ_ol|n:ER]%t'u59>D.CЃ+Qryxvԍ2~lqtH7`7$ M/eCr[m) j ZK~/yI7JkeE>+ŷ[ZetJy-6;oк8_YWip>'>?^<8KkzN'~t v #FF Qӝ 1Ne >&v(ǎHzJ̱̤ƌM3 .ʛ2 3=,M2GSR"'tyKHޯg y[_h -_O=?14?b[_fM_/fm`ǪGR] ^{CRO)MGb~ۻ'+ m9#1n}߷7f]߼ni"mDҫ4ۿ؟^mǼ,s4m\Kevl66]w6<;b ;P#OCjSlŻ>#q?|r*>ny浡g}NKri6OKP\f:mƒ s9+ _q=N*\S68Q7zrTvjFfځځځځ@]G@@@@ttCȺ }& ǸɌ<7+V1%c3]H@h@䁢ϩ|5Yw+sLLrnu1UC< zoKy}<ؽESvmA 1%MmKlxXiX'b=E+͜g#wQd |?HfRLE:xWz% x䗯s{۹(d1Z p7U^v˯ύ֣!?eg]) PŦRNƩxY4Drٱ9x'>4KM|,Cz nځځځځځ퀾[4}/=ykGug\ dxX|ɚC׼ ݳp-יULd t?8dy,|DA=AKbyx֓Ebmy桇mp}3q;k2wgm}bt͚K1_)2zrزX6=fo'#~W'Kx_Yw"bjذ-X'mƉ q׃4Xl~O2fkk5DZ;Vǒy@]6s̚'66̧Fu1^4mlIOѦ==."&&bYzŒ^q5z?6 xzb~O|3}/}sqŻW*iݟq|o67ٴ)LjG8Q3e+|NܓFx:cϩcTqs^ň\G/u~mԍNc)vi/2qMF/cu5I@: Ļ,'>ځځځځ3ہW_3F;. }xpG o@\|x^C^/(~P ?r89'z+OC1oorR;%\^rT?GfQ\'~Z}G: l~?6|1}6P##^mCsIX;y<;6?l>{Kџ75.?O8CEC2vb:=Qf8xl녱$=-GO966]JK}N/M}ߕ6\5OK`syzz̺ʫckXn/Fp$=5Q'}bM^~Cz׵p /fW9_uKX:Q萡s׳ز1TKiR~ bcQ.V=ZcP-j{&AJkjjjݞ~QKhXdO Ð^2} Cȥ{,pɏ']jS%/,$֥K^0s*9zu8,-Do~-2b|c\/N9c1hNgaOejg$CKrcE5u@ 9_z0BG|؞-j;onŒ~tcmҋgb{?'X0 &N4ǹ-cKXŦ^)Q4ǝLtcVځځځځځRm̿fwQRN}ͿSPyymK!A 9X}1#^SvlM}<6i  Ʀ􊠭W^&cv=tuq0mX}91^4jU̧ f+Rsq8Ҷ<^tt|ꋳT;j,nr@Nl|՘~WZbm_Cbnޘ[=O!J\[^0:1OOՉh&mYrK1d4 IDATniY,36 SyMF^x!Roפ>ܾ=~/g7OOsqiXO|zƦN`P\o^:w8oKv0m=Rmm609)w[m\cPlS ş_z |z&>{ĠO+|n'f)V')zB.?<|o$* q=Fλ/0OzFlm6_Hc|ű;=dÅNvi6:h(=$;ғctߛ^1ӆ3vْX¤ti_dMct|{єjQ]_ӓdy[c?}GWL)Ƭt\t>3{Mb𾡃k҇%fegmԫ&==1^4I_Z{x'~wiͽ5}[oMez1&iJؽcu@]ZOSK8Pk;(|F|'[>JC\r)6^rx,x_נcALŞS{!(}s 1qr\/29I=%_֚׋o#' /\?MM[;P;P;P;p:ə^\p{Np9$yGs9=ח'`:E{ Fx#f)NsY<ؐsx9$kMP6̰QF2o2dzyǖ1=R l_ E'ڋ1$G'DžǯDsEw:qST6Lϒx 23QB^-o Vt1nhRNj _Z+S+1m1o͇W>rT}@@@@@?(}𝃭Dq|?Ip]'Iߙ\"(><|i_vT6dsp2Fr}I{P։]h>zqrˎy zdCƮ7',]9gV 2[.xr^N_K:$3^# !MzF̾ o_g2m/~kI?6H>`~sb(=Pfk jc 'ѽ<)45NvOOZ6S]!Ɨub**MiyO>lYjuأ_j6Ь?oKq|o,m_~"սGr\1س6u%_;8ydw/ܮ5Lm]4myƩOgSS|j_։6<1eotnf\Cx߱,ǹd(zQr(9s@+A呦/&"D}C<6gM%QfAܜb?]J\c9:KRrc-O 1 OaA3MY3=i+z8;Mv⡮w]H|ȗۈuR>g%?,+8ΙN~mgG FvǺr F<9s58/וI.Gf/9ƃu9c}h 1w:V&)&w":ɮGuA%gCv;ؠw3>E5F\C,x'Ze'N3S=kʦ;}rL(%I|o~s̥|۟qHaVӫVo<ܫ%+Xi_ڰ/mb"!k9Zks? ˿M ڜօ|my> ;_;;m uѦ/asvayx?JtCD~t.x EF;>{i@<~]7mYXaCڤ;֦Wݻ7]5W-M=ҫgb 3s, y-x8k@Ϗx ҫb*VdGO~V/6lkuzX/ >` &=Y:4=/Ȧ͓vgcisL43^Y5W^5vCKM35MUVi4F͋n)v w2G׉xɜCSl6^n!4σenw+y^䜖|K~r%$XQ10OÒ,~{NSځځځځځSgPa5`w7ߏ^S@n3\w@UWyds<2TA %cݷ9/>8[ni>;W3m8sk>{AM8}ȱurHs5ENz\}x9G6ۥcyNض|L09ލRk7\7{_0Vr~cxQw/9DG/4<7!WJ= @Ȫt;o=.OO1Ox/& mO ҫ$M3&鿤Tl:bo:k25߹$no{]8/(}>g▟~ẖ_{(v}bzqYcαwyrd s1m[#=ij2mYln^q4wѦyX¿ήw?aM VS5ى:5L''s^J؜7a1`sq=\ -(((zkҁҁҁҁ˼AƂv`%e~@/_牕S6/6աd(:QݡǨ5ɇx# ^בsv>Lym`]_7pP%^sazZjU:׏z/h# b/ *L۸zOd#+N)s\M&=D[I__Cn~sL;|S7a:ӏ1Saщxu{RgNlC/ꃚf ?!!ɉ,;<\zC&'y~9G|6O:j^ttttt`:F3m\9;t 6>Cуm5KTe-\ʫ5r-~*,<9$: c!&9r\/;zԕM};\/91U.xȏ=tvڸq^Wq/^qES<3PҝdSK7]_WN)(ŏeμww!TMSY/}ӡU//ݕe {Xp9mw6ɨލsϊۻ)f-;zmn2y.uۣ;6Г6QJ2;wE_Pp;OwI=6"8ظ /CO8!g.ZGj~Ni4]w>{x?qd|<(pR?/cuyLw1vydhS^TCyt:!O\Eᱹxdp]NZr[Lntttt`f;03[OV:P:P:P:3賈@ւudS2 d791_r{lЋj!>RcAO\]ڙq_8C;:ǐO%,};<ÏlGWc ^~#Ay+x89$:ie ttttt`&;ETy +~fDzŝ#;9t4Ğ8I!'/7lxW;77fJ oX?7?5ttރăNSJ͒2-fVY7m&IfhHaL1:<\m>p\*~8as`G׼kwת_cC&ZrrTv#㹏q8r9u(νSh |s,VlEy/ 8b@ecN3QbnT5;U<4Œ{e(BX%7dDފ呮@,zX|[cn>;njSGq#mYؾ~}hӇ·E{"mY6`~|+CX+^݋ly&=#Ҹ?dsƙ1[7ͭpW ,a;k[%37yTM1z.#^KkѨ{d=kf>;n A@u|_wu [/vbTs4C:WīySG PyA_&թZ9./ɲ5='Iv[GzA5vax—<2(ee YHh _D`)J-T;sa>xs_T c?ЉjZpvWzG, T6D't/(6׹\׊^s]ۢull 3\3sVߜ҉Ժt & u:5cE(vJP's=00"9:[ǃw[mbx׊gN~.?6a}/|nwMvT;x }#~";UA: |(Xpy| a~9'sFuwxC6Ǻ 9Kawuߒ6}Ӎ7zKw0Y IDATwq)KiS6pTwI#t'O:tNtwŝAinfŗ:oH#swrhxX}9}DO:8{A5=.}bd0kRtĆG;v|0~1 t:~x W;f,m:.aE3I<]c#ñci3:qO;Qu'ZNG)vxP,*:ۛxx5sl؝^u :t`?P!/;6|;5qZʑq[Nla]|D=Qp:0z\ҁҁҁҁҁ뀾kѐ/\i]M ||tS_/EƦŽ~PznC14'HqEnWm}:! h!Q8r_7e.|b0ClQOf;p~;?>SYO3rSǮ\q#)s<;>Ǣ:nSc:_u-2%?:%bQ먡Um`<:bzPē/#ބ(Mh)v1Ě;daT)u-=5۩b2\/}m+^yp]TC8Ņ}1)q]~u}h:|lٸUqO~g/G_N&|t }MaF1dInۆGO~y(_{٬>?n߶sύ~ly^NM1ZKx:b CѷK=d>x1Yb/((((w0>L#F'q3VTuOTkޡ9뻶`ׅ|jaeՁ>އ_zR⺜%YN|?Xl<0.i*0_Q#\کq:(=g'>w=1>`uŪoĆd=y{3HǝnJOfGo+t:_rF}? ]{ኋK#66ʌxZu821p?/5,^gp6 ni@zaߜ91{Jf%^iNe6}wqՕU|_=l\[l %dho¿24٘+zh<|{/O1t^@/u=n]k'J ^Tvu|/l]]MNO^ ]:7?[pS@(3ҁҁҁҁI:A N!VzVFN0T<yy\8G'^zJ~C7وɰLz9.uh?7:9cvGn8Ǻ<%l*xHxر9 2:/d͝ZCP:ON}rb\u8~֭1/mܵ+Yf{Иx3sHzpzLX1'mMzIf =(u7mٚ6r[V[Ʒ;qWW>7۷#_tgz]`'6UwI'7^wk|ֳbeC󦛢^cwTW?oAm7GwW1>՚b'ᆫ#vl|G>:iQ5Fv%+I˶/_s.t%KbƂCt j[ I3U?)?L5T AWh@@@@T;^gnS<}, kt F\_V&?vLPiWz>]reok'/[*d??77;Nvv &yll4F&=h,Ddb(] bapAvťWLdzٳb4my??WM[2&?ñykQu+-_ۯޓ$#Gw=+صqbqץ/KNyMlQ{_[ر'x߱}k6Ɍϝ#2C`xSݷG 4d.ٹ$B-#Ƙt>7MGm7l6lKwر~]NN=_8Sҝg&|}U-{4k4X:gl:.;Nv #+p:|m x5+% rٱʛnחu9nq"OS/((((x:P(d*((-޴bς縩Ȋɠ2cϏZNhx#<h by@g2ܹ\dFפUt“|N'?Jmy|dj`6Wy6%Q`1W\Mo:9]GhtrL6ڵ6rӄ#dU<=~ }AJ/_jBncr[TA!_l~T^C>?rl:l;:jhQv L;Vttttt@3ECZmT~H?˜wtxd0!A'݁X}ӹN>s_#LݐËjӇ屩u:٩V8+&98xa? /?jzWoqk_#CC`j&3c$ўf(eVL`+sS=;ұqx$VlsN9Kɋc;('?{ɘ?|qb/׭͑1icIw|8%1xS˺sJ8tngwŚs=cisK77v©{m{;{_,EK*tgC{ŕ t瘴A<$]h=r=i3͎%IfcWǎyf޲e]{,΃ݢC '*[>;ԯtS^S,aMrmF2"dk[[51dL] ´xVxلg2N=Wc2)FkȮފ6a'!;}i;jk´J ŧtttt`;ߏ"L"ςf:ǖ5vG7~ wMq;ѓKtsz$Ηv>xA?uztZ}NgT4yk͢!ka]v|*v{dݿn>y"ڙǀ'=.H{禝>vvbQ<sdlr.kttt`;ߏ"L|桤/9ek5܎O+LȥT2ϼkz)0U,ǩ̉8P'~4eqj8S|*6a5܇Hq%T CzlfQtzN<9PӦC0W 5VTi#c],&U&s&f$x09/wrCN<𓝹k#/]VX'\>u/-K!]N26v:O.(((((cKvʯp;>`㻞8$sVMtTsO{Ǣ-(s^>###-׶>dq|Tx ΉkY'd'džycô=۷Ŝ+;N>z]gF~atņX6Ԭ˯sƾ/1<2]i͢=+4R/Ve׏ƿ}}$]{pI#nے6 ctJ<'zņX|N iӊV^Ǝ>!#K+S!Z_]][7XOolP*=TkʟnMVs/En僭B%rNu/ϗ琮A8\+J.0S9 _:P:P:P:0(ef%b@@c|ԒqF !/s80_VG-'=Pg=\9/YvL@@@@dy&ŐއÞcC._yBkt_xn%+ߴqN2$S)Ҧmۢ+ݑ;ɽUsRSb塱bū8Y k֘hQ&7Xy'u&dns<~u4N:iGGau0n#u u1ZC{ CMă,<̤NjlmK<&=B5&4^s>Os`=^Km?hJJJJfeLv*((x wzY=,gUyOscUd& P[JOui,}KEoUXKc'S]j'M&|_bxvDZgWxzM=;w3/=IeG/}bѡb m6P[SKW~Xծs9ЀV4 Ruכ ۍǕ,_⸽Iq^<5;Iv*)^uBϟ1\>UϹS|P#;>=N=%;yPAWGi:((((8Od((((9 }(3 ;vn'j&Ns_#;NjR5[kluK9Y-^y;ܦeMqw|C8lZ*prñ(8QjDx_:yykG΃)yrdYgw8ώ.8Q晱}Ӧ6KwYw-գF]WM2iJW,ӝδcA,2>ؑ6hLSU_xf[gėvhoEO~^\̎&{]֭Ll{ciN҃bً^Y]\x񛯏xh^cNIOw3{Yb<]SWi͢8/aL8iLWӓlCqVCܣ 3fV#=^ip˖XtHwKgKn9\3|ǜ 3wK\[P6t2x_4ϰT} ѩ䴩O{̦9uq}^z?7lgNsXVsh Qh@@@;P(3ҁҁҁ|2gx3_  ,R _0WqcxtM0yTx;Nzd!ˮ!`#;s]8ʱE O RynĒ/>4DtȢ7w1zĒlnH:|NΧGT=/_s^?u*eaNp`umg<kk7?8e?o%i]|4<τWO ]k"xi;;䫺C5sxMsׁXvmMȅbœǥ+ttttt`:ֶ5gx>ᑅ?GݑGz v C}#}G|WÞקqٰr8\D9_W|OݢCvLLM??ȓcW| X(X∢S\bbN!G™qå)|Vt%tg m8cbPw4I6昮DKoMGbw.J퉁Y pKܼѯnysi)m1yO=rcxvV<w޾hCƋҝc/ܚ3fM/ΩΥ n2rzS*k|'Dߕ|6ƿ4xůuǜǥZhLϚcl1kW{O^=ms(xisҎ˖Ul뮍Տ;5XqqBz4֍_\T{;C^[AUs8ۘ/6P:׋c[E/7/ Z|c Sv(5@|9'-W\'3/^**>uўT_6<4?wǶO>;ƾ}+W&i͞q_ ~b,=qv,}sڥ[Ʀ 1vuDtrzu׭m96ɌJ<srgլGI5sc9Obq 9w}t5f׋u:lP?hI/ޛ'M}4bOf'ji5V>+'yt:OexږZ:P:P:t`V'_R:P:P:P:skVB_+.{"kaQ@qNyb7QCn~~PS,_ $oG)N)5fN1mD} 6j'xp6aӦtتiskHڽ3,Gu1<K?媆8$F7nԯѴ1fl۶}Q17myÍ/u8C2zrǜqF\{Eq.Ӟ'?Jwy§CZ {^!A/m c`r}q'Y׻nlK^s<xb9>.?@,ꀢ*kIp|XU=/u:yO-ҹ[ڭqy[GcF=V;SL ZltCzd9_9lب^)~ܿMN55M܎&dw[.;AO {œkw94Յ/dj@v ҁҁҁҁҁ>c4 N|> m+Pay,عuvtM1[|ya]Qxa<rmM؄Qxw)[;ߓE;8cʡ;uꩱh=Z?z$6h&uy>'bYf=xsOLe&vrLw?.^C%bo#N<7]?g,să%]/Vt;j0οxߺs"Yc$m'<7MK)F7RkOzzuGz&xֽxMИW5kNϒ1,ӷ|E ;Id&-W?/rHoLh;Ttǘ{o!җť~167}ϋ3^X65m50sjz:c^w_&p t#tGh;5c\'MvSԟtoeo_|FO<|y RD&dt`O9'=ҁҁҁҁҁN;;|[5xb[rg!uvQ,Ŧt,>{\t9I&>~Ԭs4686'4G ą*|]O<|9:2JJJJ|F㒡t`F:p5\;,^ǼyZƾ c۶m-1--1s=ܸ+xV 3ү[ЂcMzLjg#;/,z1лTy,u:M ,9.9:cs|{\=>7Q{j0ҁNr;e+L.8k8R6vK蠝tۍ:8ZFOyݧ)0`[h@7nGCUuYbŊE^|@zD~[Abpp0]q%ĦM{͖>h5;׋oBΑd)=u8b9th>/{\,ZB@ zGNrH ]e:ᡊ#,ҋ8)&|ɷg<3]M2oWw6Ƙ4FҺ.cOzLЕߏ8 fӪ5q'g|$Nω 4]?zksHkAn:핿j̜8o+{Fw:z~e,>OCF_^?ZmYy yx6,#{ֳ°TX[J'YLwO?Sߓ~;I}Iy-[Vzڶ5UC/nq3sgIo~3VG`K6C;.nO ?뵯b$mbB+ePլ.}ቁ /&>K[ ;u}hp`x_W#X~I:|!u }Z YXŐn2?@xy:=y1 1<u2e=?JB,ÏՏ{68>+xtx~fG|ŝtbՐǟ sC<($_9en<:P٠̱>lu z꓎>cx rNUC>\Ƨ.dsXu-  -(xtv .O~ޯo|n?8˅1 6\{׼&n\?gcيP:Pr,:Q}N;ZaґK9rU^Zlǟu}jbeHǁi] @w\NUU \V\bCeoݨӓS>)t;bǤ;i@Osf=~ICfÞ6gG}Bt_*&͝o?X8-.?رkWpքz/뉿zGo1pwvIfuǟ^43N3ңʃ]_5{wl*Nwݳ1dQLŋV=8s2icPb4="I^YKVc*ŋb1g؞0 Ӧ-y w.ӞdIO1VpB\Ww'yL|uuzC>Săz:U5ey||KGxu6×NZ:P:P:P:p;P6 S?N i1ԍ#8N]AGavEoy[bʕ o&ī^׿^-Fc, Duh4|i!$/VO"6ʦ,Ȏy0*W/9KA|:Vv#]g%{ Cu1e#8:C<VT9Z6HP#"?&ѩIVo3@e#ro!bq^qpV1/cc9V~M{=hW9u4tyx|U»wuum.6quu|nwl^uz9. z^pM:Ptt;ooqS]ۮY&=ؽqƽQrh_{GY\|ZN?cABt*>D`[QM?w$}RxVs6#=pOnK֡u|!"7Ѻܷs(.h>${ yx¡'XMvM2҆e춍iFz\PK6Ƥ16hx,ӕ6txtPhz#R%8;=*;w$>q5wΉ w='}뼓Շt׾?n`˿^0;fNL=q7}z~xnvmWbKc~=š'Zg&LSViIď̙3hK0;ңQfGZ>eK峺v_"vl /o!Vиkjï|9KbwS_Ҹ'g˵QEM<6\.{mmSv )8׵3 DK>O28ϱc6c˩c|#Ѽ\ƇMvpM?\M&=];m8cSzҴpg17XQ&ϺFqNDzzSEO==]w\qXR{xc5K{_N9˝2x^9 /jo 9zuw9?<8M},/RYKܣxBkQ ֺ9k=+M2a(}]oCkN̛;=")_sxzOމMΉ?#Nb 43V7xY<lEu*;/:9 (؊dׁzlt|FiX:0cx{߻_R˫Ul!9Sm_r?F:S Zq&^qM]Eux öy]l»sܟ9q,|>y ¹?Pm@C.]U| ;:4 sG&FςNԀgloja|Q) y<.zzD9r}l2\qS;u#J\?X{⨣b˺2b֞;ʌ ]3w^t|Z뽰toۯq]YUݱ|iW<2O8;~tF3Nw'SCwǧdNm{?6݉G:w׾Zqt%Vsҭư7:g<7=^6tk7=TOGʺFoA#kz5m>AEzMTx39ȗDO~ٽQ[qv&ẩr=D_>421A/wsyҁҁҁzvh͕vsz_\)Nla=!NTϠNgZN'Iڕ]95r\}yjA,Q>WMq+*u:r| )1el \[R?E`\<6sqqH$)=nqzЮtGYi66~G+;tѝRvaGDY/~M2(XOM24-S7!G2f,Ew8vMwݻӣ% G?xLb=Bv٣V?׶ZDz=U;ңoL4ֺ1Uݩ]{ڴ喴IFGoݟ6l[.X})qM7 N:1N=.25. ׵_sUޑ>9;d 9ߠ KKzx`<6&ҹ=9AcËus`_?Y܇<&Whjs{x4rA >-o:|ˡb6V:\f$XKA5ׁN.C^lDi}RK+((((eKR ѳf͊һnH{_Ǎ7ؘ7\ɖG6#Y Bnj{I "HnMD]SW  ,NtI=Ap3K'> $ВujS9us˺ɸх&?Ȥ $GGcy'xAEϽK]c8.|&)Foa |мR_ 1O^[Nl_pzCD t;v$SНl%W&N|Pϸ2o cG\p٣w"㡛%WC/$"&:ZX*P*G?jm{ƢE'fz5\8nֶXdI壬mKyk[xus]~jҕ~n@u<9_r~Ssy<绬?ɕ sCv!ik֮^~0f{-ܑg,~{&tkp0J{WYiSaM 4CC>8LH?jU=QI&f^my|2CkD,91Q]]7Z߅%SĊ?^ۗvE#[uzb߿I?ڶg5k۹̈ud{Ҧ[\uojUTG'Ϝ<6w^ծ;vi鲸7mRZxqWW{'ctn#ijқֶcC] >)1C7vU@/J>\温>uo꼷 wz_|R:uO>1^͝;ٻẀ={vP\ȳysςN|w|!!ńp5_$oujM*^~x\\G\AA;up)ǂa z]O8^܇uczȝ-Oˏ7rr>l] ^/DV~cK9'HO85vjMFI:H\PՓldn CJ~I.\VhA oXܿhՠуpO]km ǮNN.DO''SޤEVs.-هδCdԆF(2xL,wƣc7䴙cό[{rˈ|*^[El1{xm}㔏|:&2'S9=Ҧh׏*)~/]{Ll5׬+n}HKu?eqѓtӓsl}u1cmzK$ÎZ?oٿF}O:Ǚ\7M|.AKxma cu?utPd/zg[[~]_ku){Z3x+_Y++Wt~! }M#EG7xgQKNȜ?5>|AbṎMO9Ovw(}ubfLeP Ƒ76#cEq=xWG._xWluxZTӑ 2NMD2lvԩk2tCy ./~17ĊO׽u'\tE |<׶ _n!ⷿ>+uxޛLn&?n/?M纜- IDAT(;52M|vr.;~7r읖<.]jĦ2>d?ŗMa} 1N<Juws-Ō9sb m樞(~Eo034z@2=i c>M_G C1p„8~io\wPY?/`ZS,Sb-{>tD:= q/qFGǸ]<'G̘?MO&񴎝^ô$pbp*PZN6-9lᩧ8|rYf uu'6o(+ZNpMCedNQ qx:#ONM|XJEsv;tD ^]v29-y5wA5p|8!{'?"};_840ǧm]u|;q%@RR 2ǠdP**wksbxEP8y^"A9.ݟ|MՄ^(&`^r>tT{ႊ'}Aґ-MΦxl䊜޾¼yЫ!!Mv:)G4wcM8~% 4:􃔺vxzUIiFtRVM.k@]g [trМ9wOG_|r 6upt寉G.w=z=#J]^*#;of1J+\{E,N9sc'ĭ'GvFR}w2G=q~'~;Gq_>.ƂP$SNciMcE<M|'ʅy^98 ZuEL49\PP~|Dv]zEAiyHd.馛 CZ۪=:h][ֶ^k9 ynF9SP-<u&unsd#STnW=V `b9 99 Fo[zݴY3cG8yؙbF@6373m#D%~Ю굹۶k̄uJc'넛+YqR̚r\uJ}`]uf]G%6Uz]+|o+vJ]zo{Ezb{OyX =yyxcjLk֓e',^[AmV:dغiS o!x1?S!99]hA#\e?.- mxxu|tn|t+Dx\*M<u]r_x,ẲaqMONn~DsЂu1 yJpɴPWLA݌_)N]G5~m&Ib6n0Gu.4u%O 0Co1⺼ߗ4^AP~ӗ? F}Puꨚoćf5%%{Iw_My(y\`tQen92 3^@ύx&NJ)x5 CŁA7 GNLN^|x>9iQ\/_RRRR@(3,JTz Ogq 7^tK;+E/ةϯvEh|ɈPȫ]\/\< ]:|bCtA^҇'܇p:w>r&jN"G3o'_49TLk L6\} ^lT.RD Gfܪ)eU#d u<3V>IWq%_yc+֭>g|Њ!99.9vb.'d9FOьG_MzjnQi鑇Or2k#x49ßuuzχ |Wr.(8+oI'To=Yn]s=m|1_ 0z#Y#|28$u G~NJN.^.æ ?ЂWk_ G>%FNnظHQt@diimq< #9 <\X2WN8i-2r?ʯq mu[nmԖ-jm*{ca藻7Vt]ogU\ݟ}Gi;[sR(&c/yoL^0W.u_bXo|9Ү~VNx]1CiJR,X6lۮE#R[5=&#A4j/t=_ ;j 2V-J:S׸ fȐWJC|+y+'%&\~tAbql I}l/&Σyu>=Wr@eQn6#' os/(80+pt`K,Ņhm{饗qg&V yEqE(ᣯkU5V}W6rs ZP< >spN:.x4/97ƆN:\G4|'_rD/'ziMX@bOPNk^4I\Jp)1*^|hoǓ' 2I7t1frZ=ί xHU Z~vF_|]oT&w׼|M2r2{ѳ {WZ{E1+zˎ g=.c8mة_BS3b2Y^gjcּzғO!m\r .]zhQb\1Ո-+drCN[2D#NLtr\4}!|hĸ@%˻m󘊥_=89\.:d3%{17b27w;x1&gh)x@@@W~7qRR_ ,_<>WY1ռ4gV>أ^S:Pg?Pqp\:|ӈt>xXLЛM7MwݎeOy8݄{}]W5G]AM7cKBIKxZwo77r{:\>y ܏ d~\mwnN.yCNry'vC2 ,(8x*]M2`˂,9n7'pMegnL=N:ʧtjN^IqiHmkGF*^%LvsqsaWO昁[i29$ؒm$s^W}S9,:MvvK#zJ t?/~ֵq].<Ơ-2|-RGA&47tx A<^:u<'Wb9\]L)ՑU)F<:|^Ou0ય6h e6Pj:7u}K&xM }7|hTtə|M97X \-^^'HlAe=pt<8&@;}@ashtt$6:N5^Ks>W_j[G =nX`NZI\seH֮a:nt'g(f*&=iF2mT}\'yMEKGGC46[7lGN—^O:u9A,AR?GM'(Xq\4J6 y\Un#=ph@/c'GE\I<3;mݘJp[6o}'UJ&mّ6>NJw3'0cFYfgp1Z#u_9'~7> 7,1GŌSNCnعJe՗Ө' ۇbqg>7~Kgcp횸_̌GTlИqCbsKOZJj-ǭ?iY0c m9ߌF׷:^j:[OAY r`>kX/}JuKPc늧npq%?V_y\w yC,A:/P|ǡK&!8z½e9MLA3!_8+x@@@@(Z K#ʗnz [nE~OOySu{]~nW]uU\r%knPW#y睷M! p!y_r@Sg&RMKrYt<ȅ— H+/8o&8PTULuIqb3~3n7+MOZ6nリua==kJ3PA>*$3=vlfΊ7yb8ysÄw``Ҝ{8s{bMςq=158&xgn;_n1R38+U_:ol \7>Ozx)myh;bh?"=ß=c֟#֦Jv{R]NmJZ{X|C蠟y SC:|tr!|@"n6@M wZ9?bA7AL+<K7>-]|v(<64]W`@@@@(j[< sԘ1:`u_ڭ[gϞzo{^_e.Xre1؋-q U |]ks]bNdub|[{tsNؤ'(\T-qd#:9q{p >u:=q Y/6UcG}J7]IUIur:WQ&nr,ꨦRKɤN _oԱϡ 'y'j=v߮.qrZ3rqx#wZ>sv\8x9:U'o)lw?GrMKJ~}*Ї"){9P߆?pT=aN?V 4O_Wşw]U=R E쮯]2Ѯ+~Gc`t urx 8u'.1ܺ=C:=q2'6 WWή=sL]qg;rIlJgg~zzt_Pw0=z6vhMzuPǔ9sbg,ӗuה'lzzrrkWo_{vGU_7^bI\g7Pk~ p;ej ';YXbǼ sp~WF+#}bxAIJsC)EMSM' GkyziK|OJ?y^FA='4Gt|Y yqcAtrs3纊%Z2x"|q1t銧zut4+r <e4hAxU zn3$ phbIx@4_w7<ו>r4t2 536kfo!~)?|llU\M8|~/!}zdnsU>Wtl% r,ǕcC<>'>ēMޜ'h@ !rA6y k|7j Ǐ36{WC&y/@S|llUFFUuaX+IjOX.b c1-m+zStϭ[ZdҫIf m2ī5I2[QݬmyW|OoOxd&;w;`YW@y ߹m(_>4O{X ܽN}rQfzu`Cg׉N/z^{scCʭb):Xߜ6MJf$SMӦ9GS祧Kgk~P=Iw_j=ié X9<1?<1$Z2xD[=uO_7 JG ouE6ܷo}8Q<եWQF8uyCn-w='rv?;CN=峮!eo xr߅.((( 2[TTT࠯@Ӆ< Au-*r9l*p&;rv!'ȀЇ*Gt?o|Hn@$p<Dɞe%28%w{u`m~<$~I]d .:E&2A \CK׏vC8ŧCKr5V5PnuUX|Igc 1nJN#.tFN>>7]>8zn-2w$M2k/Ҧ]̛(5&OQ'K 2S=4׭)sdJ>wɭy5o;@r{?#w<}G4_;_#yĘ{螶XMD9n IOX}\L>B?"M[wx1j0l_~[E;bI0}FVKJc$3!{ ԴWÏ-uiai#6<կfqlW+sVuUMuU:F݁|OEl.N [PrU)f'ALtMǢ/ݺ/|KuԤm/ ›Z7:MdOˏw)^)~nḵ ]*P*P*P*0 t^=_.((((*E] Z X,D%㒱G?~6?>fE;uurplKsos]3/tZNW<`s>ל&:^uu܇s9\qx 6uzԼi u6a}O:oz2-Fiۦq~-]W3;, 14ժ'ʤW1MNYߘ(6H:+ӦjQf@zzɮj]U7r1ObzGwC퉓"C=xMΊ?)ϊЛMnpaIF[u]{'[]~.6m'hi&MLuIKOE1֮$sۭfS_wʴIfV:ֽ|eg|Y6kůӁ'8J<~M@M|@.6zum]^XZXju܀܌Xc~wSzjN`U7=AFOnq6#.s1y:Ny^M9 MQlJJJJJUs9󰮥z7hNsvebx 5<|8$n_{3ίm 65g,-ׯ961'[JG] ѿ2cFqqbEeݺ6g a@LJ7ǔYVptY&hxdFߜܢPsp=k ғhdj5!ӛ.ہxU,]o GS,-yN5siM͙|㒜@r1rXukz56qrMt=J98o%c$ vpltN8q\qK8ujwA壮yur?ǥ𰗼];msXq p?:9\xd:3hc(2$+y jNSiԔZݣ A,t>u=W<rb~@_ޡ|s#&9qt k蹎x|Oӡ!ׇ|%n_vpql<^pՓ:zmqsroǑX*P*P*P*P*e:qV,]+貱< ,s}|}t h쥧17Fi,h|0a+=s_MtƊ3ncxYs݌̏3nsרG{>Tpo1 0c#vͿA>4E+'r+=x?p lxCs;(VX;! };RRRRWQfնx.((8*y_j½w*/*XhaA">\_e7|+_x\M/~dGl 9b?d`K/?@3 eC=+m>:Xsyti4qqOn@dx/rv9y)'w(9TC{>pt%&|y@@@@@]t:.LM0u1qn\æh/hA_G /\d+gmz!:9{M 9ǖ9Tru\דF9@{Nnyغot'?=jF#r젻MrRׁCht>x;_`;]8TTTT`|*7>nRRRR\4Sׂ[P-OZ@5,0"C'=dEi7cL+3>X[#'/r˝'j@ux#N7ǘInw(9:]|A_|xWXD&yO|Ձ EUEO&=twKa(\fԥ~aԝuRoa'ȱcY~}NK1q>zciirroE/\.PT}F#rcǗ`Ot:ҡ>8B|oO bSϋO?ij?XW_+>S:wq0l91Bi҄ T;f1O:R}g6H5^ôeWb-]wĎ4?/,M3Ӛx0m\Rc5s_::6@x;f0SD2|h _'~]xn#uSɗ7|8OغphLmM~8C <rX-$ܟv:s9&y߉wE1:tAPmtK+((( RRRR,: 3u]#,C&.4P!u@G<Е u12&A_0f:.uGG>|=W-lYn<5,|A 5H+Z ~^<_;nۮ#bD'24YVs c9 IDATC/?;`N|΋s"ғ N_vmoaL;M4 yGb8td~+$Fݸ1ten.*A͇rFuvy4~G h5M8zc1e<@2V M'\O|O;AuzMG~BPa_7NO7,2z6Щj͡{~Pn_ riO;%܏ZӜ;rŇB}TE5+7rpt;:;liC 2V @lyWY5ηn#5΍ȰA,u5pvu@繉t6ǣ'=1F=QFxw%Z3bEeqsY㼳&GVg>q`,V{ 3t{zLzBKW\^Mwxl[/+=V=!.xw--iͯHcۚ'O} kӫzg>>8!ikċ;iGT|TScJO9VSmMצIOqjzhڴtO{_ocUԴ =/{VmٴY5-㾾e >Ug;M|#?r:w9%8|dON-::;li{vu8>"ьAx@8>C+ğCӔj軮қ|C8JcXnV*P*P*P*WZH|taύB c!2^$-&Ԁ›,4z[`cMB+gTuj'(#[G8@SzhvΗL/p M2jz̙3= Gu}tO747ds.9Μ8Ǐysp2i_בA_zٵˡNy1CK.&o wZ6й}Nu7'8rőoדV_S.tu>xKΓ>Ǔ1KvGΓw;|r!o Kt^Q5u8:ĩ;"PC-|t?wvJsq8vH?|6<&[5hC7]Om]ˏCzm+.շn1'?9rιq}?6sO^e;/?X6b]vtIzLiצW7}~#<&p綎Ѫ{d ?:~KLKcI2)}ZZcLWk >z`1n,wׯoȎWﺳl23cׯL#tDc'_=GNK7u;뾅kMr=rJ. &X&ɯ:f W#O6::u܇ܝq}:.8^nxleCw'7瓋dTTTT`|+[ d/uQ_+/,iM8rul=v~l XM#jFLbt4snyAPӂ^;ҡ:>'ApurKFǶ=+nik4hm\܏iNZ_ 2Se1sZ7%;͜sp:K }G95?#O H '&5%:@b%92ǻqVg, m 2Cׯ#^vEV*P*P*P*P*ЩWF]I ]vw~GV Y7uWs ^+x#k>15 |Ti?M c%(_$uڊNw׬nHdXO^C/:9f՚֚R>~3g֞ꦡ֦z zbѧ:'Lwjr$}~gM:-O` .=⸣ҦIfO/O|T_<cq˪o?xdW ^qpvx{$o`Ao(M2;Sӫ GjsؾaCp֣҆ Knժ$%o_ĸ=+VTNjF&͟ږ-rgm+(Z 9ndЗ/zr<;#Gs?uuX[4l?,Wc5Lx 5ƛ57u#n(&M;E^@}7s{trg;9 Nuiln/q4u_ƿ\~s!y:r &5'g>$DSO|s]ߵv6EV*P*P*P*P*M|M9y՝sӄsV.8#s+N:2A">z༬P\&[ׄgĠء֒LOAsbmٗG=a'o~r)y˖nb+nizzώMbmzz!&?:-J1tuUkm (<"c5߫/xF̝3cCEoNfWkM=sbEkz?eb׿NMZ^KcVr|yuHdr_Nhͷ/_ _qG~>}J핓㈴Yg1sFt7sXw՗bszu[o%[6][O&R=Mʕ/=qFM۟LdIk_W?>Q_7 ;}\fec \ֵZk[[OMsۆ&~Ы=p}], yLK*6J~ԀsWrue9n9({'n'~Nx@Hptc8%Wza/>SPgwK[l^y&()&}oVCF?hm&)6?RWɄ zh N2D{#/xA&O X Ʀc_G5 F.92nߔg'[cC堮1 qGoq}|!c.[`@@@@TkHws9G.3~!΅mbIǧ\tnq11r}J]t/pbx}qtݗįӃ dDqŵAzcsz:u_j<DŽ qﭷ}G?џ6xqIvq1P,> 5֦Ch~(O JO'csӫjzc`O?0rO4v `޶*bM,2=ޜsˮ8Lɛ 8&veˢG/^g66j[o`Κ}m6'2wp~\ս?ۤժ.˖-r/.1`b$ZB y9Ji5Ć8aiM%YeYuogV&^}zgsGwk3CBثln7lpK#ZSm'oGo–ӭmi=Y,iW[u'j[\k)P 8iz5PozuutحU=Jk|^=f-bnk0 ָs[1ʸx2CD:Ӂ> WvDpxԳ%!]xؑ|KꗚL0' ##ߑƮLc[UQ&Īѭʳm'WIP>#<&;5Wl Dh|!-79/\\\\Sm}d\\\\\bxu/G2KGze89JF.ezd6Sȋ6Hh˸$pz%Cxǚ/]u>%8@VCGR(yڈw,\\\\\~We?s[ޔHdje5}o_Weje)GuybKT4"zvQG8sJ"cQk1Jn=Cю:k'^G8hO>=z]6cw>"gԄ in?cl ;k:. 5N/zٕߵkojkc7 P~mcq'pфmm7_akmNK͢9wyiūuUriBrmlְQ{vܳ:WSp{-2?Љ vM67zh7^t ]f|Ɏ_mD{ 큿}x{NHO8ph{{{2:T[zo//]:z]Y/n9/N_PBޘEWcm) O;8z8>蒣htDt%x~^v:T7b>YO 9yцXUG[c 7qSMe':| L6U$Wy8ONڈ'GUL o++++ 7ԧD@x:q8QZԏxM'5/‘ +)Jүe~S'=-oqJZ>Ĉ~->@ FI2ܳjB- uNvBႲUC<@Hk>>|+]C6_t<"W9'.ˠxbT'S_NO Z%HT5E NqQO6YxQVsP&ǟdC_3񡕗ъ/94:1`'V=l (ȳ.^aZzݵ̳l9iAA b9z|nE2]kcfδk×Xʕnv_Pc]Cau3{2<;SǎK t[nk>zG؈=߈T.xqKPƴto?ԶyKc'><4} ?^|>{i͛`S'5ح|kC}09o=8 XG_g][$kƏf?3_Xl|.KsǎbH_4sOj#|s᯾G>b>}޹ }V\򥱣CŨ1S%Әw-u }lG v}D=tQ_gU#t#(tGQG8rphAZ7@lu#]S` FA(>tщp'0ڠ#^i!F 2[-W W W[ݼ릞}&?NTH3YL&VPc0X_7qT*{w`¨DGS_@S;5N=H1Y_հS t /j/Cˆ&~gX 0N⁠p}/0]dS|x,f/$W_:/j9t͖^|C&)/ҋ4P2٧#A,kI&xFZOM-]k[6l^"WۦիAݒǬbט.< ۱iSHf/iyUϓ[<4|'im6˂6UM>۬[}ycwX]{]O̵㑇 rpc}&ޒ6Bi{`u=*_z=ZKL궦e? G-1C}X$sFGٯ7&wߎ0lh3Q]^p}?p__\o}h?eƎN{c\ݭ!+ IDAT/]@6wQ0+}/mm1ev^m_6:\c/3/fjn1v`{O<51[ABĖp?2O1cHP@ߩȀڢ[W2"N,|BG$<ќ[Ōtv(q) $gGHltE O`/>8Uʃ\m-mcU2+++V`Sߧ7n++++Y|&uD .N0^xCN7._K M*'Q0h#\>ФHcM\bU Os``CT3|A|)he[eS!1V:Z, U\PHӃA΅rB< d顡\ >S r`_Ɠ^ĥW5$.t91O!z:Gy)'>DT?~(Vclr*%41IyK((-W[g~I^DO2pG HAC/oƎ?nGk}>U-ϰѓ&Yw7}u%Ə_6eJV5SM6._x8w~!WOm}<ﳎ]m WØޭ{BwYccr_/|0\qmO]/u|`yЬ~ ;C{OG}ݾeh~}wkb7g7ژ-;U,iaF1ZjuKa'-yw9dXxƨlٯ}9w?gWgW}?}mLު7e^m#\ܻ6Ɣ¹FR zpM~ V<|Fy%<ꉯ 5tդĦ` oԕOD ԢNS3oY_~CE}, oG@@@3L?"zEE7&2ezzGNSM#1|Pbe/SO|0'P2ՋQ&Ȉ!.I61wp q }AN)}rLilt"_e| kɌ3Cj(ߦZ f}g@BmAr&b(g1\x> rFM '~)^WsV&+㥱(' Q`>SH\t:>!_E?vؗ {+qn+s [OR7߻S`~Wnߡ%JGR#FYB?T5bN`/>X{hȭw(K_DμE<lD`ύ"jKo׭V;hwMGn=4Sj۶;i'-hnIqvyZ6>a-cY㆟2zU9Iɚ}_h}mIvw1bz/?wں'l뭿*-SYMhb]Ixsmi0\mAЀΏ fMvq߻퐾<~u->×t xX{ˏ~ζu'lÏ_ȚZ`;J,/M\??B+ks6:jS1lu5?ogv^7/l]wdN+vWl}5;v1|Ϧ:x\U;h |]Wiȡ_ yFy_G*>= D'Ur|E9wli(OeD7؈,~7J>@1Lj?` OP1Z/)^#srrrC_pbfOV@7DlrϤE8Ig$#Bd?rSL7ځcUP1M޾71'֏ϡ8K}tˣ|Tي/j`F|Ůפ_p vCF\%>y`"99`L0=ρ| _:U?A-|Qc |I<՛kdYE<܉e:j_/k%#\4#ݨe;L_azc-?Q,(8 / JQVgH9E*-[#*{pHGrM>srrrroO跒%_8_(|>JT*YUG.b`6Bcnҏ<_Pz%LW2| ?sۘO+j#-}5-Yp‰6fD{m7w_Q'>˖r]׽>ڲ;if?\v}_\s@ԁ*c'%^G/wA|T鈏>:؈Lw䣋XG>TR?0}m_đ dih_J7R24n?Aˏ ẻGcDz(0MUxVU,srrLjw++++ 7U0-& L""_Xg_񢬌NsJs'ҏ:P2ȋ8ċ-ꤸGG>x*-`ڢ.t |ӃzdK:?EdRP!9gX]RcD;ǰvQL|lu}48g:?n:+yEc1O)哚 S(xWEg] /ڊe ~=P8ygo! F;r7zWY/>㻞}mi >Gx8Z,;o?-<92?ٺvW0tnZg(}Zv<w_g}3kNR^w֎\Pۖ/7_0K_軨;⼂)OkR7z?v>bv7"1|A[h罠.ӫ+7iyֳuWjݫ6ž3/mW?n/x=۝vžlڔ/~ߖ,\THfٖ6~.E2MxqsWڎ8d;뮵'=t͜7>կ.Ծ/ZyG.JZcKc'=R>XpOP,Gi'2@t55S.eU|HS:.D~ %1H{sWFȫ J^l\G}3++++ws6wY;W W W W W`sC/UPvl MRHCc{+}J :N gKB+x ˎt/}E?_Z UŌv~xė,6 &?5tuT3-Kz2##I>cM8Eȹ~| B)Lb,\ɏȡy,6DʡS[O'$Au}i< Ş1pP/t S9t=(jW=gj u2+++++/7E}F~T/ҩP>kʗCzN=CS)QY5K.Y<$=҄GQ.nc?t7Ύ}ыm/p4OmVIeBcF_,_3ueW,[nwndg,lܿ}EA _͚Wv.ʡ_+*;~s;5t}"AG/:Ypօo >&].E+-񁼧ZsŻ\k3smb ?eV]G,hv^,3b;s̑Avr_'}N_៹{Mva6qH;Ӭfߡw"/pq.Z|Yzz/~֯ZU,hW~v/uwko|׻.jn˸b,qZꬄ+|ݚBAyqDSʡy M=z0, W/ \\\\P8!xPc'8Ѥ(do09/G~Sh~Ih2H-MıAOՏH+6|G2\O< zhScr#O¡At-'pTB9 ZKB `_^īTkvIݱc?k|顡vL22&'K`U!^&~gTTD2?=|٤2$ `Mv=GL .:= z$Loph|M&1.| F|Mņ\c@c!KZ8v@| =ht2 ߠGv'C4{?Fݨ/|-ᄡ#T.~(nĥ2_G(b ?؉&#OmzE%Jad8_ G<W%55ǵy-;2e s[lOq~75ڔ}G7םt]f#` ?=|T&)L7U!e7٠We_/V=Y/1&!OxA!vQ)BKX/?'t@a@@@ͨlN{@@@3D YQ"d2ɈgbRyO1j1Wr<]?怭F~J+ iuGx>4~s n:/zAeڊeu5LK>ja]2gr9xe~>|%GwT2Hiʓt9"DWP3O73SjDVQ #^f\<AGZ:)>rrrrrr~HOmwZyy :0vF*ZjWܭ;$ ^AU[ֺ`uN7ޚ&Z&NclNiƦufά\og|yw_[S8~ko~>I77jY  Cmg{VsX=/p_z|p{8T%h~î9$YN:ɦ͙c=nяlq_ضv?"04S\0m|@t-^S z纉yG\q!_|f?reSjT+^Wī/!ݔ_~U>l☗/S8 <=?AOO%W W W W W` 0bb#8!0!a7~ѐ ]%Uxm_<pZD4$+%^8y.Ďrl‡JW-<F:c iB! KT[hQ a2* qP6HwzV 1S:`j_EO|_Sٗ }V?W#px@ك 6訳7xٹ@T#0W W W W WJ݌r\~#u7sZt#_;K_9>!F: 7F.?<3uht/N%<i?~D+\12նw{1#Fٶ Ң23w\~6yA6szŎ2}hJ;hg_PS,my`M9bL._ffβSLwݫ;LY0[->FN.kݽAhw쉨ږ.DzFmZۦg͆;r]򧂱UϯowYsSEW^/Cmm }6uMy:lw_;fv}Z{Jhjڗ'UZf%niB![dl_3n ub'C1cEoz˛6?ǣ}'}v| '617AŌ? c4Gi݅^]C+16y x)YU+wnc¨/x\su\S< ?:{: $N> srrr 칗?GxT &ۑfB ʂN,Q/?rT,P<5t ?C_~>Fs&ἶIjJN.L%/T;|E>jZjW0G<"/p坞ӲܤzF`9ﯜX8yN?Xe[Y?W W W W W`ɖ3~6)!WCG΂ r:AՋE2]">Կb|l'])sO NN:3&bO/?}uE ]F[n{)|y9keVbN=_+wkn) ft|%3 IDAThNx?;6o5Ogm m>+oSQϱ+[Qˬ9Jh=ٿ`짿췷S჏ro=~7/`Y"S}G2OaI^n{Y-?in?YiӢ;>c&;#'oZnzeJwQ;cBSktvϊ>uW,-߲&i_c|{imLjbRGNAM38gc'N.kWpuw!{^Zkhu7{'vӡ,[ASw:S%Ș}b󥫘UMi#GE<:)c*19×N./!HG&LP rhlak~o}ҿ;kԉx9`B.H+!>,S~[R}"K^ְ672ď[Cl=<Nޑo_`#\R~=K.|ݟG=C{xO<8r ~|h.!]+/g6kb Y@B;43S_kW#~Y;l߰X$mɧ+ɨZ$dV^{M*έ[lʑGYϟ6mVF[Aתe"&k>幚?(`ӴGMvI5֥q{]ջw+RяOaOyɫxm Uȼ F}}_bW|z͛`﷯6q.k_z=,说{B|*]+{;6y,B`'Q7勎,VI%"P20!qx8#uch^&&d_j[((GT@չ_i^1$ULZ,<x`CX_ǵC6hAOLP<V3n#Ls^U}W1Wp}62w z9|7>{rIaܣ m"WeJ7srrrrUߔx_o(v҉U6C)X緹JWUniޢDa=_imN,VIЍQ#.TE>Ǝ:l4ghėƏ_Jk0Nxˋ]d}g֦qSبqE1n3s:Cz%gS=ZL&kx|apM=dohhFe|7/&Cllg̡Yϗw~k;|4O.uwlPy6tf?|LooݱlL et۾ݶulߛ&/%5{yZ|ךF۶ a-?za6{7مR־~ w9<&Oղ*F[nɆMO!>G"u˝ /'[ZӴֳQkMY簹ɺ|:=FclR~L=>Y*Q}.ѼUsdCkϊ/\2QƬ +YQwx:VA> :@-_rOZz:𲆭dt 'N`[*Y[?`=)#~ąP:S `3dY@@@T`Laxe/ fƤ5qӏ Ch&R~LfȠ1'L&z#T\5 '` żOBt|#hlD :d. >R~=[l[4MxG-vG-T h!Ɍa x-\ gˌvBq/$r)^__`n5UE|% r 2u c؂83-" :>Ħ -ţ81~NԄZߩ->X+oj?M^=MÑ>ċ`ڐE>eF w9I/̆ة.2Af#3Q%y# ͑c, ^{rrONN.؈яrSǞx+[q/tm-nawmY֖RZ<*~M%q#0WW_ srrrljw6F++++ 7LJc ]|0H'&!!rb~"?1pAZ ^shZ) b#ȹE`&9>؊,偣tԢ~yp}|S~F8J7G:_΁i &-bҋcKPZ$CCH !W4Y ;&=Le22 G*_O+g.`YKuSedQ6e>o >r(*̧xe~Eۈوꈦt-W W W W W`*𹯿=g0f =8QFy"?1pAZ ^!qx@|=!+I&~l5>'і9BalΒ%Ţ{}mK/i'M-TfmGcO+v iHtptL_w 22q\?z뻍V;c?hӮ2}_1Ê]Z|}TiOW0yvXV5vWYH=wx'd/ͧ~y/|o=y+5n( f/j({s#]n׭߾N[;T6`?hо~eX4.9?iOjQ.omOi bUToo2?9U"LuDj``Urrrre$ Pӄk" hn5tx餅 ȁG=bGy#C F=DD#Ox)}Sczؤ0x0B2xNT+>=؁.}ѱ Nuxs9/YUN+k2o*s06X#k#qPe[z!fkkV1t&|rImt  P54ď-%KF6aҡ! u zbO|t?]3i?$xJ[@@@@pW Fc)YM󈲈z)C~;)vlȁE]Fxa~ |4 Apd rPmR< rO,^IRHKOA񈣹cK_bc^-9,c_,=L=Y:5k N9$׮ 5;6m6+뙴̔[kėc8fqٺ.-f_Gm6ᰅ;k<~CO$>~훭떛}LmW裏/15w~gV|̞%LߴKcvhņ%]dhx]vļFwe,hhS'6XKsg7ksM#j2iu?_:x{ӞkOն?l4>FYUvnj|?G_]w|ϝUH37WhB+sӹxΘNӵ,6 :\ 2)覶UP/:RhxQVK*>x(wU8R8~|o&GxU@Aw*kG:3ʱ2++++p*]運= ^s&{{Ϥ%N(!-'hG-D(Yԯ  M %!p&^j6FLDhK#q'Z/b#Qآ GzȮ'< 6/UVW^ z&vWAґLP; \o[_hW\g߮Y/{U}+=V>RvWlGպ}͡K?ux-qnjy)Ͷ𗟵'_j˿\h{Ʌv-o vw6c^ow+4@㛓 fA e&B,ƍ+Pn٣klǩgiFC|ןQ:r_W+&׏}Ww-W{ݗ~z&O@ƭqj鵦qI ʏU,eOHj@@whC4y FDļ?]kIO鐇`/O+}"/#|2=d=IEی Ov߁ %W W W W^x#ύ} VM8tGu# g2I2dM+>|h$ѫ1. -AKqxA#BMKԋ8WHËv]ȀyzR2m2gxIZLz (B6|2Vu1: A:Bᲅ';Z /ʇQđ4CupbHhS?\U>_F*=͝/q獹-88cH`GNZe>mwL |`Ss|ǜLy':{:!GP2ӭ__?=<5vuqϩ}srrr/gC@@@3f^u_ĉtNP2@12\6:r Zܢ/Z `cǎ X0#ZcXΨ ꁙta" 19׬l)x ]C:jBaGQʅCBQPSI=TO| D*OSY"cGZzq%8qǘCaWtʋc,Ѻ_>A1sV^w]ҽ?z+zUFzmHH;`37l sF_2i|M8w//Mh;JÈ'o+|1lN2-ɾK&q}mqzve|G)ا؟T6OcmǞd۷s^rM;w+޳ƌ2n6mRFMM v̛m;Z;7Z/i_zg>h/͟Xch,*+m'.P߱biy{lƫP罠.X{>i\Zh4/"\ߥS4:e;rЩo~yQO]ZVײiK`ph|0ؕO:V‹zCurrrr~w.w[++++Pɀt%ze]HD~.;j z|`'x(7re ?ЃA|>S\P :K\Auċ:QG8S FWv<et e P;A- $;r0>  f?hǏ?pL&L8$-awvјXzG רG}-Sd|o|Vt5yin'G"!cG8yB F)^HH`=>U hq#* LxkMSi ';t -xykgFhaΌq㻕0A}l εF_- vߎcHf҇[ms'X1S%t֋HYm=٧P.Asu9o{"[k&_uc}Ψng??eWE9ϓN'l˽w,ܼ^S878|@}ڹϕλTgn_ڎ>ٶl1/Ҟ3uh~E]{DI5.$e\^5bn/`ZP9z%["]yE=xbGX/yj@KW# GKq#_ǃey@@@T` %W W W WZ$ ؟ҔM,ͤZnQrj@b *}HE~'1*t`Y~^7V|h *(=d Oh?!C@@@3z փeqCPrǸN1G{ͫiؓ訣 ޑةȡ_CozܿyNIbL6gM7ٌŇ۔cwnfΔG!w1SX(#N+m0cI}'Q|;39[Vi:v̱sm[m^ݴPkEv6]{\\)_@9mZ+jz}6;nW)нrޗ=}c(byvz6G 蝥G/lGm%wöl]O?;ɨeߚAv8yĪo>N89ڦɌ>+ngXzf}>'}t|GRGO\&3]mqkcُ.b.;e]+4yVs\o6nKBOMx?p.؈Ny 1ɑ䇜<%pz1'b-jKu]zExU[,;  J6@ *~++++P]S%C8Y-U9䁉'Rb:L6RqRx:ҿhQ }¨+-,>rx@6XT?BܛF ?~t#(OqbC|_xƒpte;`7c+ eSƌm#.YIF]ya S|Ck;h0D]po0.rrrrr~[o87WV*~O(-6)O+羒1A[f+ZţȡS(y}QWtlO4"'(8j@C1頉?XlO7Ϧ͟o\ias-< haڥ˔CC<}Kշwh%f/5qRN^Y_ԫ<|hfb&vm/GeM}wi/i5| GH.6gzzvs=95e=c' 8/1l/oo Kw(D/X`_?zmzUu<u/j>Yz7{>aO`ws)vs }}{#&5f?}kXdDS[[qpurnS_ߚ`OL?V!?>r }MϨ9*{fA\6Iz%pF<~BL/ڀs r Jw)rOeC]dVCh <,GURWA%WK㋗ڊ Wٖmt{bf\\\\E]V@ &DLďxԓ>t9IIpN|5ŋ9AxTz8 }/rKqt$W)?hn_FJC_,GmK89c uZO`z(}NXs^P([ߟ4w`\|>;쁛o._-CDkg&w<|ecL2_sEaFiVbǟ`֬N͒^4#meյ<|vRhU仒B˼A l g%Uny붆( B>b4ԗھuek6)]Qh5xmyx{#-x=9a7;Ž8>N[`]~Mϑ^jd 65Z5,s;شHgUWZ]O=}ŢY8wf|Lϙ/>_ső~j:[S۷x_LcuO;6yβ~łؖ'7sJ:@k(6|KV#9 יluVvU$ߒa#_O:x!;[A(SZԏy5ey<it#DygH{F/ڂipltxh'G++++X@@@@TlU5Y`ĄDLrE#\| }`Hߡd@`:)&C90OAs1*1,QtHĆN ѡϱ/hƁ&gxoDdžڥقSO)v9Sdd(FO}q/|E5Z4euL=׎1Ӯ2nkv>Fo=B[o:֭N_ 1"~MEK`S)Ǵ!szw㎱v=k;^Yt1mS }\+Y:0WXۡ Z-eȳh|QᅠzM/kkYsKyW7eSWzws̢qcmIeڬF #}.2拪Feh >v|y6C쁻N?ݾv_O}v缡ēL9м^||~|E驷yB/Lۉ>ѿT}p/f+U U U U (@@@@%82ɇ0󺸻>6:aۼyrb_Lߊ|{G^O @0T_|{yΧjG19Ϧ\z뤏#rŋ&dâ'?2ڞj0Z-i~N2h K'k>XӸc_Gx[-Vtp_džlj?}wOG*+1Uct;6N6G'~W/? ^y_0y))}~BV^})kr wP2]%<l| }ɯXq^&=O1{~?q/c8s[ZMԝ8>v'ɐ<8:e6XS)h1{‰Y$cZ֭~I;T5;/%a~ibxԓ.2x&~Yc5YWi<,ǴE:]k׆WlVuKzƌ<'su+YA k-<<(vʰJdz7^Cp܁3K.kkق^;VRY5@vn>Jdž%I-Mcs9v:Ʌelܘ; msƝyUֵfՏgdʂsscX3f捶bӶQZ]q[4asޚ--YvI'Ͽl̃v5W0*^݋(D׵2Qc^cظj~yرMv>I'ZϔxC5I}T_ӹz;6š=FHc/#;}Ny_bQt|W˵/URTTT=]=]?U U U/Gy0-=`&ٷXMU,@k$+kC?ޱ8>W1Nuu :i vmPq_# CjKc\3"p1D8`7@jġ~c/D6X >Klҡ+PG҈-߼|t]k> ?#ߞw7ɩYi?Q-\N&Yv(Xpg=K7r{_y'و%:GO_}c^oqNټG=I99W)&[кL +v,Ud:Ž1?\-i4", K ;yK˪0cmY4{҆KMW؍Ie♶Fez,,o?x~g s][x"N4 '< g ,k8;·V Xk?Fy,НhiUG{mʴ/]d>ecKj]gt7g4tF9n϶fg#=z텯qU]vewWٴ;jr˟?r9V6fVYY6iN.2*BA/aыvj6ͺ_u|o_v$j}>ιve[}qͽ&[5Ƽ2W}k i~u?i\'^8y.O.C?W}=*m0,P+W˾_'@~$,Ot.4]6`]=~:{>OSRRRv@Z(s=****2&BMy*鴰"6ёN~P.E%/z{GF,W_],2yB:lČ)}D<_oLJulJ;+Î󊁎x 2@2Q^cX? 5?=٥NT} *cFO|| e)ֈ}و @^X="t^q/÷Sr{ :E}<^蠅7;2{L.[1&>U U U U UŬ<=.Q~x6ZWȋ-ޮ,t^'yX'qB{לeaLyUU]-ꤽ/!Y#`He:4)[,E2-ags~m]7,Flul%,4E=a- Y[[3&ussPd1/t⋵^WT=mVUAv7k;sHiPOO[ΫxDuX;ÔEFuvYmaΆ;oaam(f}{mͽٵg?t G+) %ִ-ڽjj;+0Cw9tYWښZ[c3XM"a7qU%[[{L ZTvuvM;;Mcw'bAaG[T-|ZlQ/15N1vKr@@@'7EKHHHHrCe5M.aRm_*<}=/p'7޿㒇 ~q,eSO(y-?*^zons/9>b,> {J^BB IDAT|>C:m9/kzv/*,~ޖ Se^/ȴ]WnVS2:q3gf,eE2-kV[^ uC?0 s΍5L‡eFM ekw<6-xֺnO?ն%Ȋ^z̛ õ'zEՐe˳g"Kf֚e]Vռ47YvlQ& j^Wu,~C֩cpnli[CS;Ц8BiSWc 7۔%Wc7WD-OD _\ec^jOobyiaE[[lLMm1/)+}µ|3_"#4ԯd|){,{^F5{mI=xVpy[m&74ot1z/xƒ|щ^>0J!@BK?11o7 }ہ=𪱮MU;$[zXv']^NG蔏8Ȣ؇JH; ****0 oHHHHHإ MTvMh8(&:bqNC M? %&}S_=%ﷰ4ٱR'OoNzO+ST:Ck ʏbc`/+璬CxbBу>,k^ hx*O-맦q>< 2'I'q+Fl>c1Vx"3Xa'>P9Οx)c^Ԑ(6!帏#y+q|Q# c$ XWI}w22}ۡ`S~|>'>å|O~.]FEC>9y=vQPtaۇSk(u-F,1r~6aL6{A{"}Q;v"-ٺreƇ'*0Q a:#/ ,ѪF֕+3l6& ,an+ygne벅mbck5/X$C3'QvZ=E>S4oVg;ȟ:ܶ!^MG$țVN>Nln+!Kw"6 ߇nu5aء%ms_A==8ylMc1J{|1oX^.Lܜ~,qx1.qP7ō8`r^-8Oq|Q^/ >TTTT=S̞k****0 Ʌ<C%X C8k&9yXyᕻXv+9gMċƹ#?l>vQyp{xEBlCm!xhC.DR[~d‹*= ]1*|螭~$VAFb:Ժ$=]_ưtK #׈/yXd2qyHW8&:P|MHHHHx*w՗{gJ9ˊ#j@áǍ/q|o rΚc'zy H_g'٪g۔KEuMli^֖&'CJÂh$, bLL k6]bԺn2j\>7WH`:Թ-~yT+dtPkU]}C}pْVY]n斞f[~q[Ov(+-w^TigqJl\xѤq%vC=}\+_J*jg|6lrDċd]٘Wleۮr ^g?MX>Ve{O@^,>Xe[[~}O}vZm@ʹido-}ZQf[btÂ0džovtZÔ)R aKxh'\|-{f=r"W VSWoUGzj؁fW*tvisH} _o4xlE{/p|,N]9d9:^㤧PF.Q][<Q|y1) 9O,Q',(9=~evP&>:Qϳ{lSRRRvoB[-U U U/zD:BȷDOs]&}L/$//W8SxHE}CƎ }7D@<816Ιusx}1~9|\|!kBNLN< #q'g+Kzʴ{N'c[ g;:~6V+/8C},^c0ؐcƷF_ăJF)⏤1OlѼy$W(#%}=NLjW,i#{>Ir@@@@H+}ǨAK1)1+O`b S;c>J^W7oCqt.=b N>轿tyyo<ױ86鈳v}LxmRX,Svbʺ: n1Z$0R?u[g^ը:&dxx0WE/)ƏBjjɊp;Y6J{삕|zx^SnO/'볇aS&/7[a*-M[K=> Mdj;귭4hu?~mFܯ#2~W?~n <2;Te|fvK=׆E2uv5Wgq)vg/̛qO GT5 {A%0;xbgaAAdQb@ ?1-cآy=>Io)ytN9+˶ 2yE=^UDG^ zŒ/H{N::Wc HzI<_j㉾\ G a5!}e/jHtt4tP:O2GJ_$ ab>/:Q.E|}^ ^qwxd>*{:_w?kw\Wmc\k[wë̛-9s*̃o8;줓Wn~?rGy܏GkfcsB%⡓dG'9#=6(xdи^'j.3-YxbK1(8rI~`|k}#!81c4mёgh@@@}1STTTT >!^&/2Mb᱉5 g8OX.ۼ>zNzocbr}4 /yEue<*kT~XLUF䪪#05:S>A111tj(=<>!Yd ,[,{.:g70c*****0 dD<<16yMB/AW(4>dpPzQy>S[|=ۤsx<1HhU}" aL8^T^jƄE0Vvb- =BvF "㯿'\R%U6+Qj[g/E2Zֵvi]ɓ^lL&즏[m1{ʜ7 k܌ Om x7c>>,ٻ"njj-*+ɔl[,TUτ8V]pՆϳqv 'ڜϰywa'{=?.lNoSPay4/{{O1 &nUT|yPȯ+'=c㩡?wjx/_z(lg0Z]Xqe/w:'<DSRRRR[B+bgqN 1y9C!=bTXbxlyu%YyqB} 𪭗ūy  9ʝӵn:a6z۸z26\eckZ+FM-fz-b5n}M>MNz0>6zѸŸ.?,lxUֻzB'gօ3Zv+lLٚ~{^;ȁҨ,׽.>~;tˣ_wi>덶WWYOV[ZV8޴PfwekM'6;k۬},vl?ST3vǹ{yvaQVzݒIFdmS]fM3szw8̶]kv c)(B;>${ϱ][t5^tFY}:?j Q<cLby[8W\_,q^Nǹy<|!,yS)dcLJxң/v|DF׈H⩉ێ'v'^|]z hj{i̞qʐ***WǓX}H`_:d35a. x?{8: a//ޟ0 dxŕL|Q|ELN>b6|HUyxOzMM~| lhGC9<>/nt8HFU5Տ$d>{C`EO:ahq^/s^%*b'62xrWW_d {]1r#b`7lq-$81Ȟb1G}{_c=:ܟTTTTTYנŲ#^VLKVH9c>~Αc @\SHW[HO^:>)z0+;=WزcGŤG٨l̪Hf5/_nѰֲnՅ KUuu$uгWX8S^մe]V C~ҋ;dS6%aźelMXWnk6Em%(RZj:f9aԇO=?X]jh]xP]ൈd[^ymawv#׬|،2uʊ;r={/ᣴ|n:pUW?cܼ޴$V;||ʪCvs[q`N2ɔNag &:Bɷ3+ e@9G7-Q[V`̖0f۾a2aUZU]zӨILp}mp챶9c#d穕l_b=>>N_ԟuP&^}\?q ۮG\[M|C8GleZbm}$k_q| +.`y'?bqbz;9 `e+fh@@@@@Xw88y8c[1-`=UlzF6Jly4[F:]rö%jNb/qLeˬq4v3eJYfՆ1uY!z('a7B}'.?@ΣZǧk'ea!K37S }!&eMϵ_36}ӦŲCdsᬊlo}s:V,wjiSlaIhk_`ą#qgvGٶPTeFۡ\o~5i 7`S1kZ4l"Jlu͘9zpcaLSO$E2mٚ:洝aܬ ȔEhvOjVƉw=',QclA5S7yG׃8^J;>˱.V.TTTT]@Z(5LRRRRvC&y:bc9[~b$$`C^B;O?b?`q/ ?>b.>FZgbzJ_c%1^:7ɱ=+ c=/;&:ȃo/}tMH1]al-t~ ;[tOM< +_b͏ua'0y|^Z:Wps}MrܼN5@Aql-d^祘Ftx(6DtɅ,J>ۉu11cck˟wN张ċm^TTTTTwZ,7XGWV IDATb *N[/,_!zbd\mAX43&aTt>]_6N:ּzUN{*,}[pa64VSGդCcVqroz-0|[2(:| |, {⇒P̤q+ePFc4FtoFxTZP# cq)Yb=~`}];Yh/+a0;(ߒ@Յ?9M :6r>âB;hت!lO39'U^K՝:j7By܌aKv67۸p׽̛g8V]ﰢڄWئƽ$C1_xI*jsyyCīyِ-J>*p/^ ؑh쓇)Ssb#C z?25W8GPq?4>py>"'*****R^`b= byx ŕ>φœ>dzdXåz&M}Gv= ;dFoV^ql̦LCXl/hlk~{lЪ=ƚh[K>a_xƇlu3ֵzm_R?jfgufcO9>tbcmq h(,(+q{z2Aڒ4tv_ M;-m_$>uiSXSp-P_Ňc㌙ϏYƍ6jX;Gb/o1,X*W6v$[ۻ=7njcPzrbj><bA/jI)xQc9nH~X`(~ytqPl(~:Gqq=NJq^u,k, 9Ǻb *'[@@@@Z(k" LD亻'>6]cB'A:7ǹdmzI>+pz%ʹ{yk1yb*?tŨ?l1X,{"&ݽИde/Ѹ^Cv<9?IF3Y`W 5Xm`D? OE?Dx<%ύ=2!$_b_cl(>Y\G[^ytHTTTTT=Q3{(e|/>yۇ&/:8|y| #c=ӘLDZcZx kO8y- h)Sm0e`'QJmaWnoʚLn=a!G蕶V;(JvlS$pv) a?g[xOO=|yXRjO,,sr^ 4nbgHF)7)+2i}H&‡4ۘ{nlo_0u}6_5[kO|->/f|{d!:>va}ovڢ}v{«®1kֻe3iw-[Dzc/~`5Ͷ5wNӎ)8۪z6mP/5?e'_힣9B5wT51"KZLekike#Gd ci#:3}Oڴ?ow"3u6&lL ưK5_fl3j~{rPy`7x/T6:?ŌؽeN$>5bdj/ׅ輯t;z(vR*&*=ב#_#i>HO@@@O{.O***** IGlxB$Gl{xǓs|bg=xLژ::r)~(("ljW 8E)P|9e{='` kj=e]F:C#]sAؤX)XO':|%WB'&MuR.5'^TN_r F#}ߔ8q>|Su(֡W+`[!LF<Ԅ8d-P|t+^65daeFz@},US b3<Öh@@@SPũsʒ****0 0Td?`2C80b#؇C}x1sg0=>jH,Bz1;zQM,dņ} sЄUv_ o8O}s} L/ 0^eS?uӡk2:iь5 3DxgQn5cΜ$Oyt4r"Qj:O琏#/oTߤeCx/  9}Ntr̃ɣy*-}b s $sezk<~v99*=ViFعcf1nau=F^Cn-hhk`5D%z޶P揱>o +ZB;pz v́a2WI&:h\Eϛ:Ţ1͂Qa!̻.*Jmn]u]=d^fZd;㔆ٰn BwkxwQh2˖h0cO^yԾt}_x=;6ﳊ2Iu֙- )oy]sfǼÎAL_eo\mk=v;Ϸ1 `>*6ZY6'okkCk;W,2{R~rsL׾cmZg^v+$C,9|vG)$oCuKN,h+ 0]v g-abe&Κe/g>-9aPXꫭ7w=; E3Z\|1ؑNcX%qHyjb+ZtPoQ~ASo7bIW?*ZE2~Z4#C[8v쯯bJWq1*~y,cɏ7#+J|քӡ&>ϟt= 9dOى﩯QS1lPuyGyE_|ᅁWH䀢Jy-\gl~):m;\ *****;*;xޔT^?@8<СV(zYxޏŐ|K+WoG+''/zA_z߄PJâ*:D}+3X}SmJ,{ϰZ^}s_V?k&W632]ۣMi4+Mh{xSϷ?fa?E{ {_X@ve7kC~{n/ظ&[f3_MgWiǔ9 \]fy?裏><^[vѢ+i_~Wv' 0!>3X;px`5L*zYJZ>)mot"p=ִwd^*ҫ<(贮0 1ef̰QÏڰkf|q0~}j =U5)}{ c1(mN>|(ODǞ)!_bRBȟgFy>)8HG%^&n"7>>X36O>>`<=U U U U३@Z(=eMHHHpL>DɅ&-1:ybq%tȇ@e^Y:_[#5!IBW;Ǩi [ddWBMb>E.QƠx)مy/^ _J' bۈ/=}ѮiZEYR]t:k"BFw޽>{ۢUe<]p.v|*&qVf>wE{ꎷ[̜'ٚ?B+ 7@bL=ULdcO>][mԑǚ|@m)k \m_fO|uͷC* ` C:h]i믮/}6 2ki3Xbr{Y6sb9Kme?&^osNntЏ.{jӁٕuU:>{J ;l|#0g|Y2{*,0MnZf3j4}YY6nXUja:kmn*۱瀣#^*{Ϸ}ق-?JVlHXb<~ϸ"&qAaiG%4)[VbySc|%.U U U U U`WIA^"ag┇u#[,{pN|rJOṼ\b+ ^T@#^+їO4:%vɣC׌s(z?C2:tWIcK19K_HztR8n>ybG4/W|xt L> Po+`B}]R'ɩ{žwx;dt16Apg9}{^Pg\r^?ϣXty>ªY49Ux2.L_h}3Nfo=\~Z(_m}|uoX-) e6g1cRwZkX@t믭VXg4z IDAT#ﶮukl re]2);oةoxח X$sʜRmܘ[oW^m/u3wG;\w;lL_+qimY3 ]aLauR{͉evev|afԶΟV-^dc®3YÄ >zqikGqyvFOHS쉾*,C\`]fEd-g pFu EOJr*T1u#7RCQ~x _O1V6o/#7q S61d٤vW&F㼃=U U U U UT=6Xx}'1ofئ/FKV:_-#ʡE |8d[#q[wxM6fҤKZR5 Vb65Y]Xx 2k^(,6 37mQ&L.nߘ.8qmX :Wg|#P:߳n;ʮy=>wU͜mo9N?F{OP,Q^4Z/eO}&n}zZK E99=h5g_v-t,[bϼmVZ[&Nu+3iUMǺzgԎH[}8SI'RnB3,h#}vоeOj{gv۝쵛~ߓg_fP {~;rq6vRa}v{^;}mwW?SWoo}vhkT>T?]ymn׾~ԁ;vy_^U1\ߦ+fF櫋mlX0:;-Lpݎt'\hUa';3,Ybמy!vQc|e6(?ɣ~<s8s[l/p^| Ōs2}R˜y6o'F}c qdE/]#^rܼǕ]+d54Ἄ~0Jޑ?SRRRvi̮0EHHHHF$ '4ĐN<07{(P.yG/L\$Nj}xͳɟFŃ)Fv%fؖO6종&uG6+YM&/O~Pߏ< X)><}#rϝ+}<|+R8 KӼHGLy+Tq]|SRRRv;5l$TTTTTaUI1N2}}E6x<:h܆.8Q 񈏞1c3*B`w?#V*****+࿧{a)rҩy[:(yD:"{Lt 5 >fM dâʰCGu]}ꥮ6+ 4SwZ~̮]e6=4IFep`4otM}Svz-Vle=cUYsb5d^[_co;ٮr{9mt]oxO]{SS Pn[v.^PB勯u5%XKsCvz"*E;(cv[v= aE0{f;rDjy O#lڥw̞QfD]ravjӎ-cjb罿ZA;{zve}J3B`{}p׎E2'UjsPkU d)W__Që{nk+h=ylSWՅ90j-@hn`aj۸j;^KlqX{ﱪϳ/Ĵ(lݲe/W7tߨqhn}ې鷧%?v Or[H$1XކRΉsuW#qا\̇tOJ1RRRR+Ztީ/Y( IYG<΋yBZ\(&zOZYׄI8{1Jq1?tvdjB #Zx=6|,bG?&bqcx+?JBK[SAx2"d7S~,y=]xqe#/3R1/p9y,twӦٶ+mҥȃXCعAk Fpٝ-ؿ?ZL3agժlGQg؁A]ڽ|Y>QŶp={į;:2հ[F>UoPk;w|Vs%O4Wy7 gutL<02oՍIFoKY[i}]_WC QɧtԏzOœKL6?xd+qZk:%]0{3ñh^!5Ee1|&9>K:KG*Y5M>=QMKlrG'|!C}b*ɰTȑ-,h-cݽ_--[mTKjԿ]\i=]b}sZ g:yq`LrVxIQjk톻[7#kگҹvvt^55wҔ_׊7fTɾsm=mmeeu}6ublo~8%, 5O+[h,"sOd=-ھVmgj5jxGcȥnC9n}3ӽu W6)kP&{]w˖ږ5Ϟc-sg=pX+?,/[3~dK1x0iunyĺ®@fdd_@]^Yu>5YOAF=G[CؽE2[Gd v]Ot۾#2aPX~P];6Zk;#O~˳5a]./!|<{_yP5uЇfU|ȧшEG\K0FX.]l>83Ac=1VzCq$NMTXQ5Qg£^Nl$Wa_80}b]'l+Ƥ~@@@@Z(sjꚼ <*dAG\< V׏Z\<"OJPCAC5fԅl5alL}Xdq萵mm3gڎ+lEa̾l1MwXpp,nq6rt0au,[}]9Y* ZziH,=j;4k_yjDr?aLԾc9t}qu4G]m_b{hmM8̾}_g/'oKU92qHf}#?olvط?т:6N(^`W_}ZkfS{JӬ.S:6ΰ&}/\qsa}ᯛo:bk?Hu2,ɨw޼gmn;g0xEz{les~qv >ט^v5PB[ KY)B^hO1sV)/u|kaSxWW55ڡP6[Ft_5eYM"&O-+C ޷&͜e?gk׋u6+|cEu]F#^J|a \<2xET'E9$΃>t?}A%O1y}z>+7ϏG%<5IZ<>U U U U+ʜxe@@@P& L.Ru}Ƹtˏx-p'b;dM:(X(9JO}!ϣhlGMc˧35эIP,?N46K H̰ӌ:4^4$S_drB''Cr*£NJ8xM*< (O}`E<}^:ї.Ʒ">>|=܋1>SRRRR-_Ks>SeŠ cdyMrrC}(>9'IzNï{7rtϸ/UrO%m~v`(Y$v8c2W+M< v4u]Pmg=ꬷ:qL?.塙aAL+uV N_KW1YtVPv*tϿʉ\5F\oEL|_Z[ skk=o;{Vځ%]x#OF赳܅uvZ;gAi mu;걋-/V_XoX:O},[ Oٶ~[kb>NpM~ՙ?]3^pٛ/f;~xXBIow.Xlo ;,g}b.[[\vޱc;n Ma^V5SY5ϩ.*ٷ'Cv1`0~"۬#j^k&vGmXv: ;Ve muK=iBqBxүMku]OGݗ"1hG)$>C#Y|x|-Ls#EE9>Yx/s'TW,>=f88߼sp27/ ^tV@d@FyW 2&ԗ|>8qE9ȇt|hRLTr_vqï?<;1>Ƕ:CSuτU~F1&0P+}SDϹ bW?c4FzUil>ī1k͠1i& CEl(OLJ(xcK׷c5xSl .OSxo{h= IDATI޺.#yl(6q, \]a}h~?}eiE2=9v-ҽu&S8|a'*80/=s?JNPǒoAr?O_8|z2ޟɑy mO>,Qp,Ucd^/DSRRRNỉ.Y D&LqH&1Fr :x3V b>>doR|G}b:Qz!0z^&^rׂ0CxQ~,<J_y/V}K2u S|"py:ůMX'U ;>^_|GXRRTTTTTUX|11O_ r>1\y Ç9s| 1$^PZ;6Sb^}(nj϶& G={"kFW*زƄ/[mj_CHw%Kȁ#/L ȔE[ʳ7 ?퇅ja M祾v9rJM n7Q1¨?0X33-Mj>ѿX#:kXznf7of͟o*gRmX8S^T ;ڃa3m=3#(k{]G5ƦM*LYC9PHl_ƦV`_ukXjkaH(R?k5^4ٞ5Sf_ vc'қd۷>j à&{y`*Ν} x/X|GXRRTTTkBȧNHH#V 4NEr~dBW^:M$<䘾tL4_D(63)G'6Pf'~|=9T8ɱz祏cz}1t҉C}>y>W䃚@{:K|2ecCx8)?^4,T㩅2]jH t`,g DŶ(y:/7yv5,D1ӎ}}XvIi9~}۹ƌh>ec(V9;kG9B >h|#eifpՋ0M/~uwn+ RX $.قfNW>͗tl{`e_#;Ғe}v_wdNqꄒ͜RΔlVZ<3)2v۝ֱridÇveu]rfyr{?2#mMoj~/~7d|gM_c<~7wkG4бM3O3>jϯg , ZQ:./ik<϶ISH jkJöEXS$I|n!dz;H:1Mcd;'>nu ˯ÎI?ivKX<}zk ׭sWR\ ȼ_̓")<cI콜>v. D^}\{)<9suhVyuC(VS-KHHHiLJTTTT؍Q ^&lS^ ( C2&^Ϗ^ʟ>V(&^=KN+Q+*bxd&XW|£>xF;/E/{t{*cF ,׃l$Ök1}>cƂưxW5NMX׊0|s 9}O*|G1iĤ_(FX #{%geExb C΢>O % L]^ dF(m_&Λ-:h eBQaaɴNh;Wge#ܝ@3'ڶ(ooe?j趾;W,/6q KlTVs,'?:ZwXdR?mf/QiM]͍v*wպwCKׯxZ´ӌ{sl/b%kw1^|!JW+jm =F.=f}xQGd6iͶ%szXR^ueJAE2=dd.3RXq%c:[l-9W>n=4bh{k_k=d馁wQ@0g#΃sF(?ب. MtYW~k޿J78s@mC/Q.eD/jp\X6>7Pys[U OBc****PPxr X sb=}OH = =N2hܼYLXH.l>ɣCɋF}dE4Χ7Ty7SRRRR*}'VX^4S_M2m$+#=5pxuazvebce}>:hQN^_3O;E2ۗ-)Kfs#&L˴-xu57awF@_Zؒ9i/j/CM]Ͳ{,z%#RD1'NÏ2auvg-Q?kC-Dgn+^e>>uv$l(jKϩM}i{xж>۶v7l ϵ]D۹s`\w`9=k1, Â=־k|vOۿr@0<>X Ϻ;z#oQK6 l _-Fޮ~kؕ4V^y{ׇf}6 =`wMoia#[5Uwxml X͸QWՎm}[)ԇ˅]fz/a6n#)6Zeqqk}^W-눆<0^^E(e#9:{qȇOQ,`C_Ǒ|>Xt8bzYE68G9<.?yU|SPfx꘼ R&䪱 Yܗ\{S|˖Jx>dH׃ŇlNDl!O}ˋ9 F_d꣓L>djq%e>$eb@Nz嫆/)zx5|b&trl &ǶAt5%Su![ɸ81EEOSȽ2(:0ETxosW_o0ăJ}^\kθb{m vy_a[֬3fW\awO1zz"yZxeEWިCsw{< ^-Qr@ǜ y٣/V#?|1+TTTT+ ^HHHHB@|ܗ+с/S_M}+>ŏ5[<>{[q r:(j"?EGm㗾h 2O=^:50{J0?{Oؗx*|*& [F9/Xw?bb">Ǧ9;4rRӸtȥE3\3\S1IuD Wt=]LXG_qnOɉSt`NM5|+㩉a˟-;\}xТ8>7r.'ƫ 9Hp_4ce O<}hQC<}z`q<>fqh@@@Vؿ -U U U U U 0)8ө)xOSIxdP€@LLt8t9d^-2?<y=5!<oy}Տ ^ԧ? *-e^>.1}*kW?dq` )kDe'|5jiɢu e`E+5W$~œd=2yd3rF69z~89DSRRRR;V@]j1+w0^Sg*Y8}AJ3@L취xCpȅ;_).-(ؾbţL"իlڵ6a\-f1sphQHF~n~jocw[Ǿ}")瞛-i4`нVڿ'{~kCH {c̠2faaLdػo}ˋ[z;n &sʷxܮ~ǖM}i3g'7ߙQ}<Ϯ箁g?YV _ԫ._g6qK.E2n ܽ@}Z{#aWX4+lؒoq9oj6/zj57 ~O, T"V~U6=7lɹaU{d}k ;ɰH&N~Fxv/]6ڸ)S-Ԩ.|ֳrOZDՠ1&/` w/bJ>'B'3٤ ظ,~CzσUݨ0c6 '^xASbJ>8orb^5k.gMHHHH8g1㢗do #xatg< 2|B!/? K,])O0PW2臛G& O\1쳳.M?LN2"UaLy~5y"Z˸q6n, v窕vn [eME2o^}um6}u87}ú~W/WOROƌELkIyZEOL98t=C"k8^^o[c_|{Km_gp+ռj68?Rwo:_cFw{ K]К(w7?3#.GBõH+1#[Il'ضFMbŶ5\'MÇt#ZKNo4#ĩDop\CltB=r]Gu뼍{_˧dSINxb?цVylՙX=-cI****0|n<&O hr*H&}!x!nsG}MЋ;yt!N"SS*L,VTG(!q(~0^2<N8m<}<&L bwAeo}_>tH&uӵwHu;Xϕz:OCLp7r⟾hQ㼠=؝,_U!甇C 94f2s *****0X <6y߁NWd5P^s9ٹϿ(P>7o\2{ "vIdv*Z&[$3KLi۳Ǻ;:'jAe:Z5u^}vVL;;(d: ب" Y ;4_ލ풧XǍ˘glt\Y_X3vlX$S*3y:./7 Z#I0{N.{u4;;_ya}W~u؞wol}zSlc[ďC-Ʉa cc}'HpxSnH6&>Ǻ뜴LsX$0 .5c_O$>n+Ƞ=bmu/xnxhQL .\cGG<RjCL">b'W/Y  ANJQL:Ix&PE~^rE-Wsn)؉>nU U U U Ud*whw|UysGId|T 3(~$/Z͹ >yC}Kc#6ؾR<0:(3KE2S.:~.ޮ.[w6K6G dW4,s)fь6v̋.[XI"!mvYm3bz뜳:G?^>O{"ڷYjJ?rBtu.јJ62uogح%<56Y1s`]0mGͲ~{7؟$? V~oVk>f[&O {MUF5~o7Zc[ؿ^vYyӟc5Vן{_ᰋLmmZ`MXOd;+'L3BQh.5봟n^{ev?a=ys+>e8{We3[ˆ<}̚FE.#sty@G;Ĩ[?}[=fv'- Vh oygµ}w%f~‡~kO{NT2]V0W|>c8S/~s,qEȽ!>N5xyy''%[~~-y$KHHH jsHSRRRT@yz2CŕI%й0)[>gdrD[~x9t1D4Xl鱁zXKF{zbQ,a# qL?!=cbz٢/OV^;ˆC2d4~s^8;c>gﱊ`<%7Ι^v{//<8Cza$S驶_wj7;̣xv=.ߩ~Y6GE2.=~Pzw]iݻ6W۴?}jlxV}XS-Y>.,[y[sp}@I*ɞrщOrY/gZo$RT g]ͷ ]$֖uK}Z^vƅbg_q Vח\#1t0;t=W,x/ȇ‰xQ5Q^:դoҫ-%#7«8) >)P ( |{*^M"|pM>RRR8ky Zxb%JLPsd"؈1ۢ~~>XYO<ϓIOnއ*/?k# s%N2AzjJ1`QdķM|@@@@T |{!8|)61€l8_}/<'?p&?mC};Z?~A ^"z2O,$saEXg2rd̞yhëk~nl/]lyZ.+7,i5YFB-A|N s9ekM q\t(Œ碾|0W* [ֵc[& J rk:XvQ/^Gl#j]M{lX\v}o[iFk6>xQ8c\z5ȍοn{yd/ 'dJ~/_0e~56'*!iJv|kl[ǥW}uk/nyZ;|/?ioxibjG[ˈlLi*kM0zUŮ#Gq۽aCv~6 mmٙO~eƀ ~Pz*o 7.ƃJ_Mϛ Di>qv LT6bM=X0><aV`>o o7F****8yJ6W$">ϟ$$N2 ^4cS8#˱:σz{thh^1<֟{5>c1u\/y2y<?'_eM5}}l/-*,8豥>O1xl9JXtEؗrNyv^SVÐW#N,y~0OHHHH^V)˃y8I~`+rWML<}ت/ dC,c£ȡYnh̼.vYL[ؚâ1c3̜cLC6fT;gsS.׫mԴi־wO0A -Pz5z_šN^sd4~ԋu涥ʺ6>jEK enǞ꣏6+a7n e&; 3  'Ⱦ6wǛ쒳)O?}nov.;Z޶aPۙo&\" :ۻ{:{WZcٖmvنY߰;?eYݶyG}?~t-ryWyՅhW{ aUvB>,]a'Hfu6i޼Lkx]wڒp?vT^;{ryY%u]Ujz|%Ƈy|1/ʽ=G_}>;xxc*a(E1y*fϋeW mq,o9zxޟ****U }j" 9=Y?O-KvP;#~zkxR5l3fڶ˭۶b aojl͆k{-74|iL}odzÂ9r?r9Ф~o:/?Qvt ܴ>,JJwts?<\O#3?l,k2Z,cϱ\e|ݍd ֹܿxPA/:oA?旿WeZ^~‹d~URZ$hN]lϢ]^'׵U_m~~/m(3%<vݟ|_XBݯn{Hq h AfՆ[]glsȁ6y\۹a-x%"vi铞l{+=reS]3j\?E9b>|1bq$^Mz !-OGlS}OK2 mv,>'(G7Bɼ>kƏC^/R#?C<$9`J9UCeǹT@rz{x΅?'*9Z˿d#>_p,^Yq3c+-Tr&*%1>m( GR,)׵k]MT}vyT~>;lԧg (z޷LJ04QC ,~4rD8@NND{~ᙙЭ7j&۴ g{9df͏^,olGϪ\Y>Ə)\yǙ_ғ m4%Bwڒ?{uM]b=!W\vyǧ:C]^:%)| ݾng?]2>bu`Wopi ^VmnnX9;ѮzfEX?q)atqk;i>i5/,: [um'ڊ@F ɖ$|:9<ɥ(iQ'sL\P*'~XJFs0+Qrgb Fz&kмyż|!;G'ʁ'/?Vc uu2Ex}a|J8 2QِWƤa>h<;)X_DN]4yaaW [-2Cc[e/^>GJ\苨#j0 68#F?*ҏq*****0 ӡx$;4~S_ωj'BF 8>F⇯P}j}eNM%(C1W$G_Dw2עĪt>&yxm ]L}]c]ǯ#M8E;q|v01E}/;ESKHHHH r"ݥR}*?wuƈs_U?7dL~s 6(U 1zն67kخukmmU6y|7{vv߽P鰺ƦC`//;(>T2ţe8 盯!<[٠\j *}M IDATÇ!kfdKyKwXrk$gL.i̒mo/yWn2oun~.9vik?3s},WGCmߺ6m^!u;s)/F,XbښzۏX6%m67&q^gYSuYjp}ַo\faǘaqlw;QfM3Ƕ{نv\/}<,Uz@5 8++Ѣl{Oryيb{9<`V****8I+:??Q,n'}KWO>hyi"dJCxtͫϫC^lLj8-@^}Qxq^5\1K. V ׮kԗQ"DOMιƹ^_-)qƍqi{,\˽ڜdOP=_E,{'(c*yT2䋸}rˣއ/rE}z*\C;ځK4U U U U Ud*[bZ/|JЁxyK$rQTF\x&6ytL*<:oG>޷>7z誉UPog\vY̤le6ai}Juֶg{5sZ ѫ¡1۬ ’ce8ܖqK&?׶œ߉}=#9MvjG)E[:/{?!)G><_=o¾ŷ!#}h%^1EO^?y8&S$<>dG>Uq~[)&<4dC@dCi|8xQ+ѼT'M}=KA_(ʫ({?< ᅇ):QaSk5*{=6;춱me1}R;}ajϦc knTߺf37.jU3Ny:_7Q9v=9TQa5@-m;>`aQ:FU/}n.xaK!ܐi둰`mdK=8ڸ/{]TX7eϿbk`#ZC7V.:d\\^} }%o9 IN4n8E'ν&F焽U#ӏ|=1*,U U U U`x+PIlxc%o ۾}lĉV&Cmm  Iݳ< a^N&1ҤV"'ziఫc2V 5+'qK<}8Fly<>G}ܗ\]O #_ȁ(C{x;a)5`M9^:rc?|35TP1,o/CS@>bIE)6P./d:W}Z|^Tr 7oGE}r^ɔ=^.w5j0y%#O>yAOˋd+vmǏ!'^w9`2]C1|G'!yQCۼ>"\xc61+OLS2碋;m̦/=Ӻ @ Vv&0Gcl'C"GqmCڹfn ׸p80(اzAl|x~<;LQjue&̘Pf>E >jKW6ؿ<)Vsz>WMdna]Y|gGQHuFaevܙ5^4X1-ǯe_ܶ~=& 'bJvQ؍?o;굳T>qW>+,iܶZe_z[_pcU5Ғ]݁o 1c2cO۷ۄYpyn&4:ss͠ y`5<ïyH&'aTaGE2C|dPɱ#d҃)/wUU=d&Io$QB D@zKQ" ׋<}\b DA[ L2$3dz{OldB޿ߙ{}f}{F;eHmBɣ ||ȰQd)8'<'=% u CB4'"u{KcC=46":vm!"\<}2e)_ T=Oя~T͛ק~e ^" }o0Cac Qc%N i3.P:xHO8se8K'cS<1>6/:Vvyoٹ{ ,h@#ȣ\:`h6y# Kf<;wpy>e#$ǃo^o187'V8=%.מ͵3c޻>>A|1OHua^88/ mlzpŭzY s2+/\ver'm_|Ŕ}eΜ9њkٳg_הlqraEkZp ㏧B|󞟭ໟwƘ}q? x3z2 ,4M]ՃmmV}qYqژF]K.0hKzR q Z̶z ӱRaN3[sP<$M^yGb}g }!;}AVn}<𐁐}̾k20 83ct|+r7GEEER uXy'[nE=\)|'?)w_(--k/=u]Qь@  .|<,^ZχK6]x2.ڳ-X>2M=ЧʒBcv,:YxQ}B Iwey[2Vt-@Chx-ZʑȢ6p)~ho{ˈx'Gy !k/ k,!+>O>l6 iqV8y%A=BW|65K9}K'G>}BĽ$rlc߅>W&~_~8pqGz_22d/뮻|J,#QcԨQR:3ΐ~ ׿u~ 'zJn袋bcˀl獛-Eg KhԵ4&K&cypҬ 6~n"&qB΋>-8BF4Bƌ*.[׬O>!?Ae eֿ2lڨG+ȶU͑AE:O4ˬi9>EZѮE4ZаeɒrƼl88h}Z޻2:eP4~ݮ(?;m(YJ9s|`L, l̝RtyԞ~&Rr:ϐ|ݸJ<˪(MgI*O̳ I2y2\]`F#|2hU>GQzԦ;9# Y hK|z| Tb猝_655M9 :ϩCxHX:[>cc'եKg|!$kr-<8/ʒnc um}:L*}Ĵ71pA7d d d d yzg%l QѺe駟.(Oo~S$sWݖuٲeO}S~Ҽs_'(ˣBHb>;*d_"w c q"E~\>s}C2q|t׿k>eA}@\qvhq68B48 :i)K>!]>\ۜLяĭw3{A,ך}=w_'A+C}|2O_'l}t㠵 #kt4;8rk}[hvUkS} 'xOB>|zꩱ?ֈ?+"EֶXkoS$o}+ZbmY=k_ jor!eo'os!_X7>1@]^-gFH?\gZཾww#wLuR2ft)(AX ؉/WTF1i-Nl,#]xT;(JKEe#̼܈b=^ݎ8򎆾 I#(4h˕gǧ:yvM?@mA|L1 JS=6>x, Swٵxl{!ٵuB(cYS[MJQfk'^w:?1!zhAW׃ǔ3Ql-ɴ#_:f)9Jr4;9w?[4>x#}ݺ^c\e}!.q<_0N4#$/hm@gN ɧ>?v|,i>.R2/[|   Bg20>`{7*JIW_}u$O|Bh{j궘~L:5ZRڮO~t r=`.gh!2~Bt\0Y6/>.>bUo̓ϿQNY7N}m?.Xe-lP!V}8H>>RҀ]9)o}Y9oy!*%@C!#.ʑG{5གྷ8|O#sSKV}$|.GBW6]7&[yEBʦ >l}B t6f1>m2x? n6Xoe6#7鋐BB޹ d/”?{ȬYW #Gp_/rJwAzW]uUDBֹ8NX,oU% -d1g pq;!׬X| ؜EymҸJo^~DYkyJL,. Δ  Gzc9_ɷ#\ws"1(UroKꍝ{a7o ˮP~hYreK\zN_2\\w/?8.vOTժ0rR4ީGE}yz=G8. \yg\,]6{;OH')c!Zׅk8},BW6]7.H-ڧ]ZTpCOY4;46;Pk[ !񡏘q}Az@@@gg͐}ӧGGуHbke9_|qD9۷o%]~q6<<"w-^]" ^1;?[A.il㵀 x.dv1*2>`\qЕovG)C>+\kB"]í =% !XHt[:eIGo3`'qx$Sz.}_7-ݾI'仐~`cre>}رXwq8ԣ]__Q0طk|q4}N& wF&M$#Fأ`Ñ{.735:OewTʹr#Ue]ACq٤t-d?YKh?(Ceqv}ڠ}k4d6%2m|̏']iz\2ZMUҼk1Sj7n zDR29QLS}]T,3J ^Jǎ V>,3XL=McG&ٴ`M"[.etG. ^,'t7b2qX༟ˮizx_I[--lRIWsSfVY}^G97^ylؗEL3+kK"2J.~8Hf$uOGr KyS%9*t9 9`l?O,ٲOV_k]"#ɄQi҂6mRS{=@de}n\/hQtޣt-jެ:ܳLlon2Nɓ5;_Ҭn`!d dG}4fȐ!rkx h#<uG?_Z@MX[X>pEڱ:i.`H|+14e ceHۗLՇ+>sBH{O|B+Hn\{зsڥ -da h2]n;;NrtW~ ׶r1õ-ދ? @ftJ9Ҩӳ4~Yŭ]a4+tf@m L'eوN8()?`O9PFtP$~ҰKe =2ysUzY;ɌyL;僒Ze.iPgg?(Z\4Rʏ/#YZ~s AQLGvTuv%vA3$ w`.O|@nocKH92;G^uN|#YR'-㗮տeҴb4[-k~T8"*qS:QV\v}\24}NK"-$y5WriR_2( G/a.GPu2_]ܳ 8G\= |#d,ږ<9eLqR}ХYY [ۖ/b}" iFT qu|sq2222f ʼB޲ thؕ&Kָq㤰EzJ3f̈y̙='mY?qm,.N[n|[սK >-X?>{1:ه,!"X% !ۢ[rgS}ҫ'/h}Q)Ź kvgi־y qr[]k~cdRƅ trq0~4ʤb2vt`.頱ZũG1O-'d0Y</d dݑM+++D65:yMx_+//an4W'h_ƑT#(4ʓ{l,}&qw'K☬o%$1ٱY6Ƹ'>i/ȱї4Cfゅ2"ae=2^bYpXiO̖dҜ91ѱ4YZ$3#}WbĞZ-bkU2<0= *H)=yoB}^q+׶XBƮmwK:,iHYDd#C 1lK|-+I!kmzvѪоPr<$Z ;$OdgD;X-rMrڅMڒN)\^;~E2i2W&]371 !)(lj4?_ύxKԋeO)%vYۛKd`tcdά 97KW>\yԩyp1{ ..q:F-œƮJ9Zմsha*;oCNFwpq~YyDn>iĵ-ckօhnc@+J̷)pK,eOy Їy= Y>9ҬMK#H;3t't"/HebRv@= xek;ֶXΟ?MkTֶkjjޤhf=&g/!(vl? NoΛ{fnB{Zi⻭Wɐdl;WF:KetgR:nlY\&slT$ӨǞȠ;ɠHV*cN8R־bT,O.2^MjRӥs%"׎ ;qm9# hibɑ)36`fh.`-@}H&-'WCWeoHӪ/ѕdJ,&OԜ*ó-?)W_ݫHIwviZI2xVEj% # y>tL\|v\_VYSr~Fˈv0kqF_xYt[Z׮?4??-?ST[KVwU7K ;ܫȗI{4iq_MҮ7PoMz4w;Щ^ k1뎚-2Hun$z/_{.o=FRD8?#ߪ iQtGd |%Kڂ\ֶgl%Noi&lO><.Ar,%>m4ۧ?_<{Y}ልqZH^2\;^2222202`-dZcC )K+Ѱ=u(qUeɨQ|@{e_! J + {h4K6ms2qadZY `2y˳x_6ˇTsAN#$=*}u!@hc$ @6Ȃh36@ ++>=w ؠ8t- >҉!hv=^*0N-MֵkdsER"m[Zke6-\(^bCaZ@P%G( QS͊X٨"El™sXfjQUEڻb3q !>brT]8i_?>e!sۨ"zКo'SZ帎]Rў8êߏ .۲ A.G+GiMZzya[LݑtIHq#d2kjƛ K`,QӘK?rc|لB(Q㗾F|9&?]^.O!_>3K`&d=Š4,N|TʓknivVY/AN`yTlSf]ؙ2.C<9{fz?dr5mkSPV׮K_>{~[C3&Rr 8IwQfU1Lӏ?^^?a6Ǽigq9۾8B+qi߫ GcG:HAfuCգ}">uȷ~]yԥmy [I~' ];ܽ\Ndch8+wOjkkeZ4Z@۟P(߃A>+E3 YkF>Ek]wtM^g>ꪫ@|wf_ ^Fg@i M>,ne\v٬K'wa׷׏6Y_gFGwc=x˘y=6hg_c6Gn: YDh}6Kss.>hhssgu1icG[6N؂?? + tڡqe_Y]COZArVu#x^V6 |9 n6y|,9c[oݙ~~ u?8Rҩ97v Rngq+f}X:H|!O}5̿kz#nY:p~V<\6,\ #ϐMߐ e*VXRV-@:1fJMWCO4dE/K"ceWGoxuiBw ;رȷn,EN-,*;VZ)5Zvi!EWYydVpyeS<O]Jֽ Z+t5+E*;4$wX3^ $gxEof+:HIS$Q;Y U[e V]jy\6"!'"m-Mːo],뫻lգZ3pӥIm}e R凗Uȏ#Qxs$p<ٟJ־ggȗ(swF9ckUEAMsM X 8K Ǐm{;RΟ'cg$5ZT:D4"Z'25#+0iA{oKF]ȡd>,ю2Уmcd2o-3б|p! h_W};FeiBҩ{>>mA>g/lm[}>鄴!3K/ɥ^} z1d d-@(yK P0.>l<B>.$շr7|z꩖`0C&S."]}d|Y>5C2̏p'}[YE?֠ !Ckf|2kY=6cgܔ܄L>.cg<>l&h}3:dHZWط@}KcBҾ<we۷1Gmwf?|k , pk[s=kW^y\|q@dY0ɳ,N<߷# ^z֦O!' cߵG+t{oF-,/eY-źF -ѝe6-Z(|!t-:LG-ekQCon4zdM񈑲Cjj"%Y%QFb>e3OK[SĎ8mFN >4;;K,Z3Ҵ}h-hkLyPFfnp,SZ2$?StI8]rjK5sV}RRAy4dJn?d`q'M]AG#׵.9Ϟ!*_y]nUVo_.jj5˦mQЌZѤxyi`w>.MlLΛznt#CN.liٹCt'[HرiR;,-tQXf~4cc+O;e9ڵ,e{-ut,_k΂/^iŋ}1F HĎDhS>R7S~ط@}ͥOHY@hҁN/㡏 r)X'Z~rZ@[P(9x x3mѶA2.~Nvυx O\[4۷(Ӊm/_{ˇ/^\v]w,}v]{_*_Ӹ'B>TA8qP4bfwMܕ.^²ۋF`WוǼ],-;6l/2mu, uh4G#$$rУ<^_bxvo }O$->ctdi]t/xA}422@m]26#i|0~oZS1Ӧ%L BP,3X^*uW|}ζz 8nC 2srr몕Eyc}뼪1 YRceּڴ{'i7fėp_#!O!A4]cl">ې8 vA'ttIt/}P(s< -4i Vk8JxE;@A篯Yƒ{Ԯ~/2/bùxDbhEp4]Zӿڌŭ?XlOM\4.#6CG>y4A=O[x f<iWsm]ً>HCFĘ?ġ AHTeuH4!^ ;3)֧׮OChO3?{|8x ?,$7Y6GsqCHYi4\΋vIg>eg0N~丠x8rsbT^*uwS1}T/Y"e ti_tx3(Ȏ~7G jv1Dؙc0#dL'D6XٲgIԆ}yc!dlz.lɛ.9Rt7]vi$CZ0&4*8tlG?Ѓ~ "f5&Wx}M*׌9Klthn\9Kʱ㠬O:@ tnh6-4.keAom F[2Aŭ|~A^V.[g|. @oZ{g+h 2pAE,}lks΍ Zo5EC9h! }OebeHq Ekq-V⌃4]> qCG'1TA]ƀ>p. B_\)c!} Ƀ?c:#?_ @SؼQc}g\R@}ؿ O`q+C73aKY4B|W|a,>q& cܼ8V&kq~ilپK#+Vf Ts\kqA @6<@--|CBvǎDk555Z0Asצ\.[L|PuU:s&QqYz/طMoq-Vn6S4>qCG'1TA]ƀ>p|Gܡ7˖Jb 賷ߦC()9Zl7ښ?BU14PnaleFâ!7V t֑!=<ڵ; Mzӎ" q?Pơ'wPq+p܀vm@L%W}x~p4%ln:ѢXHDLF-ya;Z#RqȡKVS^H~_t.&y:Nѽ΅.ֺ;,Z٥? iÕ_|Y'qvKdȱ'P-z};ֶmc4ξH<6f3\H> hoi|g2222f[;x ؇Gyb׀C c9̇?ᨏQ ehqAd8 .\ bq}G'p縒XTp;tqd\Z_riyw}O;|,Y}X|{/'}N=Bư`t{`yOзski,Vr>hp{Q'c罫cit+OsrO?SxQhB;>v9N,I[=9.k5[1TlwoN:h஻{x:zɰa{ hB 'C?̀+g?*B81GH[a/hcm]ueH:}6nh'ciHqeŊXfbtټtLr@dhAȚ-@S^֭2D43.ZPR7W5Wo;ͼ],33 aܥk8<=iQGI2}GK3#Hc$],=l2cjtǗN-تG+/Q5@AH]BGWcxB ]r q@@'M%8I=f'KOZ__+9.+_cL'/ V<Ő1(\9N5m˗/__rt4ϙ3G"+9b2/yQ."9 KO&&Hnyٵ-`Գ8.z.SiiAڤӍa!/<4gq\ -?2q8dg >8C%!p{Yyd6r^а2Y9q1@<':е8mFh` QB+uq)~\?w;<ԉ!Zy" ccЙCvP/hLE>N!q}|x\d<—mm&}a#}@p}oY2zP53BD0=gK$(\,;lhw+ƍ_]Kt1:~xc,a',8b ˤB硇*( -dB bӶ O+ڲ~rq'M]AOK81&%vYߍ;Rc|F/[c!>bO56*BBX$`=f@B˯k/IX͛7G^};`d-R<~m\qv-q'A]kO>N&>:#mA>3fJޠ"=nZ-[8r4i"}n)|W()gv[,aLV9uZ˔{VݥfQZ')U(U^ﶦ)3gF%Kݺ2Ghv}OXK<ܱOn 428viиcj?[8f-\)q*ur٨s4A BMȪl-\2]nU:'Ii|kE{c:XIֹ?YyP{"MtFT%5}^#ڥȒC)԰%ڎ.?F]d҄'>.g_,C22MFW*v\ _l3$G˪23hG MzH_-ٹKFb6-l½j{V2uz?ƌz$%9鍯-yylm {'N<$.^o#1k[cq!YTb^*A&d d d dwfX!do2x^t<(t ef|uYtBe8o?_{99{͞=[^C B?ąai>x{JM@4Bctwadoeȷ4ڲrݵ>Ohu]  ċ|^6fri{чhe3irk#_YHw!tX(CߠAl w~y'9F4.hZ zAs: <`7Tub=9+h/iqv||p!F6|qI W[>u]W=:,Xi3oe22fĭm|^}s{S ~g!ŶeA|m6X/^8Z#[ɓ'GkR~|3&dೈt,w)~3&!u'$7nʀXlO{[m}>Qrk!e,)Cهƽc L}4XvJIB$$enj]a338Mw9P6D ̘cb+@ oҤzg >#ҁ!ZP;"R}(æNvd٢~tmpwqɃfoI֯cD27ސm[e/ܲl,q|zOv+R<ER=p䈙;Dvi! UKAGUdtB4W0cm4)W/ϔ>h d :8]Э G Y`?lY4@شZ^CBBB]B̾m25kx))//aG%KGym5yǶ9+d q yW#Psꩧ>h d2 -!i/[ڲ /X\LYp,L BW/ c`r>$8qtHi2O2x: Enly 0t!㖬-m=p_ǘa xh yNHȽ9+K:;eyOހf/أO&qCeu,N=f }kC&ѦasV6~KOqM{ 9|> x@;'8(յ-v?/?JJJc>[1O~2Gy晒 -d $ʓiRT`瞏s\=y>. 9B>9擾ا_;#Bv ehHR>Z٥kn%瞕HV[hQ8lnmX'ouSa^@}4Ohu2222o2 eM^ՐƵ qT=i(ס e\` vȣ} -kõ>/ʁgmYY9oqQ\[`} A۟ !2軍4B@>!|4 n2Mw>Bn8iTdšK_.J!oĈ1%Q^hmV.UA.d d R.½vX=skO !@IJ'λ+l/KZ[␳zIgv>Bחۇ~q-ȧ$6=R G)#Zwa աEyKi2^xXhx.)cz-ЩPFKcz\QRPR*@P(dpW5zLSS;+[.@b /̍ ];e5RPQ2dqR͘!4&y9w1lbBXȢ<?]J2Wk/1COz4U9ТҥE3ZX1,M:o|"y 9t:qv!GO%ydp,1IJ~a~$vHoUvn/3&?%K,M>,^zOGsl{LҖS1R~&CFASgJ,յjRH0{tN$ZZT$Stb K-Z-z/33z9G tq| 9"(w?H8.J:a]F9d,d2IE..}YشvoB@[k;Vo쐵rh~ !!!!g o !!!!!I3/hc d2֮O'74%X9^1F? )}XH^.}?HB lb߅糓yO(Ґo,{<{+N[ ߡkGl%!gߥnpX|k}6d>K6fi.#X>Ic?Hob×[cV!V<0ՃMs_ x@@@@@2`?>>9f?-; m}rݧ_B1>phw]}Oe]H6i? at@L֚Y[L@Nt,-Yk viRZ~P~cl?_*2NihLyF>paCT$]|Vu IDATZP$㙲PakiNHfK ףPjcl\]¡=y5nlB}J|ꔽI[&o.\vSΔæH-"/K5mjߖvY( NQz_ u~cՊy۳qASQbcQ#ŚwTJ(|Mu{sqom |nug_B-m}YZ>y.,Tl |f. 2b }٘ !'k|jg'BBBB>aGi222_f_/ ]4.(|{T_>?' lq.X4O=] V&vuO&gy~yd9H#پXZ=WqϼЧ ح-ڇ=xpOY,zp_l+oCY@>h=n/GSiEH H߀}˷:.NG6t$a12N,X@6|#(K]˳[Z'Gg<[ܕ'~qӧB7Ȇ a?c|@we[=}>a.#li?ѷ>᫯OƵƌv,qw g, O}QpLl(쮁%Q|T;l_J ZXcGԝVJ…#t}嗤^:fFyL9ZhZ$R;zlT>c$/U͍[*1B Kɖy;dkCvU=E)!77}};ʴ"8ITqqIC-?x|-&gڶ2֖Z[>>ha?Nt^ ui?,q˧&Y5ا}BAHdr.mYk/ϕ=eCWtdk}_32'DE)uu!(͕6-]NLfvv@lFKU.,SFw4^Tb/( |K6V˼Z<vtǘ͋IԒE2^y9ڽf"drDwALS͖Pd4•n$ƚJO%]A viT(IZToRdK((jkn\/#=]k1F=~*o1?ߩN1&:,33M;M)Y* ~ggb'b~Aok]_n+ˋΖܾmlypϤ]v?,]';gVduVu:etEEpmҲ~Md{'>#7MZ䰶"Z Қ/4%>)ۑ)I+EVsG.eheZ§z6fly6$*cGϠC!q#{>e|>u}thG9ktKrpMh}rmW>iqqaM6?q,m"&Zٽgolݐ@ߢ_2222~a݁CL}PbFXdi¢]L];8з磧3ΗKgl.d >苁464KƵi,Θ\q}<}Ǿe mP}Il`_y٢-+76W iDC)s<2whqnAςʒma<~|}ʓ~zCޞ|6祐22222`3B}&rmke\t,n-,q"$} g]gi;iO܅%zmi.ޗ >fV$Oڵ}{T-A1KGw! cE(iJ#*æL|X㏝##cl<Ď5(٥"YZ3lӢ.UVFE2Us_6-^WJuU+qK-ѝeڴ;r9K/owZ~o]bڛ%wiУxnj*C>`'7GcijHcug={9ޛe;].ؘBH '$|sCnB$7&$]R`bmp/,Y#޾<^z}f5{eͺyf%}lfh8e5F[q) k=38?<5`{ ٌ)5c׏~c~E\yG'`=_iwܘ[6u6mJ?g;쮇욡Y}6s=0h;CQ{T$yPTDѓ:)(LE<ǭ6m<;w_V,v֕Wev =li0}oMG)bHGX$ _jFԋEjlKuyv#MĐ26\B/C>~NLF{J6+F;e (3@Y({@2 hЏ\ iN "DM0t6٘ѱF 7y'âx+B|&ApE˳N %P!iz_+ٌ\ʋdq}D?"C.S_99T/ryJCNs`ޕg=KygLP\t41GЀy&Xi G<7Etɡ  z%mE\:xO)ᑇ'.2 ]zAMyEE-:O3v4?v4XTulܹYg،3̞ۊ_nm y:{f֢B":H]fIFGx1‘:/ؙqιvpz;k T,7n_8+I>i7C}QWeuץ<Тۻ75f_;pfz̛؛Mq(Z:^waQя|^$yAP? /$^ :S~NfqO׿Q]^ѹi=vQ㴙cl[yL෾aO|yTG\\ko%"Ơ?{-\a]aU`o~ԝ6C9޵G1zMj[[_=m'BgMȱg)o!V^+F|c ́,4HOq3?S(3Pfe , (3PfuGHJa+><78E2)=nmN #nR^<'c,g;b.zb. GOA4d#<ڂ&u3R>rOr/F︆<.=.8y ?xߧbmćhb)e (3Pff]sd<~-چiy8rGMwь<_"wHg+ҍx5F+}Ahy۸)SͻLv]uHX'bL^(Q-:vяC:mancѴRg)"?ƋHTL2cڀ𛼫Z3J֖uYqÍ6m wxf["3s<#vpl L';|Mӧ[ˌY!A?FJeꛛ;xt<:΃lXZk1G&NdGwR'zؔ}}E ZGO؏ q{82;5O[זMEefSq}J+)5 :OP42A=/bzdՋqW2/9(uAhAb]G}jב9| !߉8&t.r\!z%sqtDBd@hSā=橜FC4J+7ڪ$WD;s ^z~%&vS~:\:G;"ѣpU3ht[ʔ(3Pf@4I.>% }#BdF #= F~ċ|"?W rE{Q'g?ˆE^#wG>[Pxϋaf{qN/w9vp]]NDzHsV7og&X/.]i&{:H^G4y`}C{mxO?v>T$uqN-&1E^/V9AeT$ssI82 4RBOa+>ĖM}[5y28'YSZVe.\^V:Qo27/D<(W3ʰ^ApHGT\T)ye (3p2Pʜ\ (3Pf d@_˾8/QV8v$e*"'RБ=X͓ ObJ2Q?tg+|i9|`Sy9lb_25_E--<7tla#_ Udur)V]K_k`.;⋦9H;(yz =Cv mu?DhFP9d4%᥶ub!# _">ϓp %y#Ѥg "Fqɦ@dpd#d.K+σ)>y_!6`NJK`9 (3Pf3(zđ&>עJؐ r؋<@_Ȧ߅NV1 ll_{xyY93+P,cˊpdz_Q&̞m L#{"xk4/Zm/u7/wlwLر7gx:Oifwi/lרgɺNn/rϽd g9u1{t8`M^yǤn8^7ڟ~Ojy v /&zbbo&ކ܎3oْ#9l 87o:^#}Z=;?]ݠw[kmELgu(\cDu۷e0{ˮ6dֱҊ{{ 8v˖^unXg7u]W,gX{˦s_n?<5wG=yw3RW#mmY!v%o5ozwlXWFS,>{֥ =R4PKxEi6.ݑt$=(}//=hhXlTk'ڌ:)9AK.c'ڍ+Q['`SE"9}-~7$'E|?mB^$Oܕg"v#TbI8I^y4oߖuV/ ӘuPQaI^ncbyf?ǿ߾vmޛYBV!_mEe88nyI"f?HE2mk~/#-0] T>G:Ȟ;iw>vp͝gヵֶi1T^p\ttdt\V7-^5-û ܐ=ڠ#9K?[$S>ǜyO=fx'WT|ߝ=;/@^[ݶe6Y˰ [mwil0[?˙7ZߚR( IDAT4oaͶ}篡fz[޻ }\u=u2]:X䯃^,sۓuzarNyF rSF:J0dc%"+,?:⎼"\~ZT'A/UDGORZ:G (3Pf+I}ZFSf@2?Ц bzY&"Bٸ2# ?rzQF‰)͑w6$tuG\< hó؉~%vӸMY`F 786#96"'VA`ԕm |SZ&tv6F:| O/]j;uDۿicVw:vI]QyA2λt"?n){Gvt;5slm"7]fMﳣ-[KOn4lYGupݕo_C}PLwhG`ՋL&.YZ=X-5|dje<ڵx7/j9:juPBTlXmQo fm)ޕfMY[[:?>JySq: =h"Ɍ7H/Q'ƅ2(W޶ۏ5j?j96\"?q6fOB{oòߖ5$4<;G~NϘ{oŞ {mW3?y~^L 4y!Lmw|?:S EC]o|}tYlߒmvs~tV}ԯ"C^ҟ=[udƍ6u|زO>]zv W+8?#&##A$7Kiȇi)hv99 |Ĺ𼼈?2cy%Bt~!"̓A㕴2e 8}(^:}--(3Pfu6馃EÏ0cKt(4U~f.|Ρ a6ZHnV7aË(mmʉM[C|p|J7?/;6q@/Q>ťÈ84'>h#.@|% zGWN^ZxRzr-OŐ- ݛьHEtl\ 'ȺIb`'sxSHWN5ziƦ!;%}dDdSP"e (3PfTf@O|E|nyG%:x?xEr_>COЁ|o=/*YGl]b{_pm۷i*+V_c]~dP<#ˉx`V}ލcvď*]XaE7 "!Q m.g=+V_omzOͶ&jbXyFWE1v9眛lX ̲I^$駭hֵeݱ.7r\岶;xw>K6fBnkf]En0^E~5?} ƞ]PC]fv/ٽnXfɊȋ zxfim]~X/9I:zje}QgBG-:=﷉׿%{f{~ڿm鿷]ۏ˪`h̞^k6ڢ9Ory?ckg:O6]+*GC60f}sm;ٸ>j=7]l3xO Y@ߋ<'؀^|,H.>+.fɟ_lOsw>^*{4s^563Ȉ/ -At 21_ +Hn5~?m=}y[|r (¹Ry|¶p bOf>$͡ᕰ@2e^ TPz)3Pf@hTY&C?H!+~9epE?s#]64i$MAZSd'Qr,<e¨,0FGH#+yTE2(Njj|=/;:ًB"n4xBw-QL?1E2Gl߲ o38#0n2sVeS.˛n-m}kgۦǞ=E6&FuFu4amusQ/^xr=."1ɋ\ZpHɓlwzdE2^#Tj-&{Őkz/i!l$3g*/vԏpʊdmc\jx4ϙ] ]Ǻ|@Bh#m6go3gۘgU;_negct?7ޗ4sjʅ2F`MƻeGeַ6sudzٕ?N=JuAX$+|,q@_I?Q_I.eOdȱ?QNx\W'|#7\d4q㌫W[OGvYE͏axq3^1MmEd9cz޻6-;Ïduhۺ5;i]wZ~/}rY[oԶ~6Ǐi:oO.甆ۺ;]jmܹ6 v>wvd]Xfx#۽H hԥsw996b\-^wQ~a xטn?vyD/Ȏ_R7zZ>Zg]6yҠl#^Scvﲙ+ΰ{cԕGE2^y(dOG1MczR gvm۟5q@C'mH5{ ;|kϾ qΪA_cʛ~g ?x^..c=oʓ>tR/cǾ!?s]ܛO+O>Ommw~-m8bo3_oqVċκ}[{l?#/uyv޵qZ*\g+'u{4s_UN(zq/$,64'9V3e#-y@.@lI'ؐ!;ZM0N''~-]/O y$ếQmV (3*-3Pfm͇e#&"Bd1yCገCKa!]YIN((k/:1D(t.y94J6=9|Ox( ]PttO:y2ir# #\P:nㅽHC{G6ȑC蒕="9L >DCO0ˣk *c]ˌ$| {\0r8 2"M0VKO8W| }8(w \v #HNɍg ߷ 8| 0x νf1>c|E2r^f@2e@Jgþh \ '|Hs$T]t|CM)[Ug(8Ço[6+cӏ R'36u wm8QLI E*~ȶz͢7^esz/.S-frozl޹fvZwQV re^0޻L_ym{X(uoN*v^2Ə/R݃Z k~#xw^W^\9)tD{&g(FEtx\xȈ(#?1TdZ;~\0//` gD;T'7{[Yio+h\kozxNc̙?Tkh)LMOSsb,Im2e 85xYZ)3Pf@23M6ƍWr$4D^@Dbʣv%ܩ'Jx\K%q㊬yDh@bHOqF[ؓT>W'~F^œ߸GqiB(%/䰉_x-@֤ _8n (:9B7y/%8Pxѕk4sJ#ʁؤ<1FyvSo%1[G}ˋCj0C8{̐Mߧ#P1ȐR>{1~P}c=ö<-2;uj֡FGݨe6~t[//=}oYsӠ~#>~s:/E1[ NwO| ^$3n,"–/m~i ;Q/qN*Qg߻{wGZ#h@]rq}j,o:vJݾI xZ6>@fKDwT|i.f/`>*7g" | >d5_7Yrgg۲=[[u{m~ot͛3 R_Wc߽'gyNīxp!̗7ﶧ zf/$|[v>Tegۗ>mE6,^f.f{ڟΉ")dX=ym_˖>c-o ߹lK[lMK\0im3rY`Ꮮ r7*͓x4Sg?U3N59̳s yr*4tH#,Gc.=V2e x2Pʼz.=(3Pfum7)OQ_ͦEFdMNllGH.j!9$~qFyE~ je3O>ҋ.[]Ah;،4pHF4~aH:0DN05Ouŏy@4ϻ(Rz#FF8<`xBf\3rSmy֕~+z V k]d*Kli<̱WC #";%@2e s8kgWVͨdTdN棅yx'/T&ogymeIo"#YZ-Ybӗ/k_L `̖׋J#?F4v}Ԗ_~2Şs~LN1FE3tC]o'FWG:뽳sg2k)sڲzGupiN2?:ɯbpA TLKw?Jj>k}ෛGh߰ﲶeacʍo{%-gz{˕m˶|^WE2{|~}]vloY泙69'̼h㨵m`mSMOCNޱtҷ Ojl׾j{,^ãNŘ'#:#M2yP~*>RY.Sb2JvRJ.srt(hPxM2RȚ)?ڈxxďE<_ʆx(3Pf@ӛoUgi@2e^"IE4T#eFOޚSZ|u(|-%Sȋv+`~x k/.8rmt‰EktlCӼH;KshN`Otl <3fF;3X!RU C\~- r/ Ǎ#{ڲ+lؾ6=c2Sۻ ܕc߶wk!{FmMGXulNwaYtֶi3:Hyh^BGxY/{ bZ_d[zZl_}?.{;|_=G߼G: IDATxqp-۞_)fٮ5k qz fykOG[KdyMu7wcg~lbnƏҘx[ib/w\(o6ja|ʫfNb,]k7\ZYXy;ˇ[ⳇitWl)Xj=Sxf_T{EkO[ۚ?%f?V;P1Ht16ɏ:rojܴ&xA״ yY;1DCdEWmӘ6W;x_`^I?y6G :y0'gāpd44'<ɂ#-B E[#] "u]EЅ<2'\qʞrGl1@t ]<..  Ȉ/|6f$Ú 0FH%XydX' ySrȣ|qf&:yh#ٮяh#H)M @'..IWϰtc>v+ e." (3Pffϙ)<Ɩ>|^VҋcՀy}% v%uyod)sW^Ë:sxYsK6m,6u`QaMsLo{؊:bC>^[WyǏWLm|Ԓ`̨ /o8lf]zv{;HRE=Ӽȡm[IY7XLX{r[I+ϴֹgyPÂ@{dm>\`2mʠOY[l(A7nFh{ޙG/cLb636k6c2duvvUסCʺ:/#1UڔZw;mmԯXe;y[w/V3i -_iu^82#e SVgS~׎yy>>W-5?lIϼP l)_~mzy6 _K}}3ݻm1h>6`_VYCmjXhD9;񂭉V,'y54cf&$;lF֭Is `k|..J==ݶ}zƧ?eƧ]^3#< j;1y tאM^Gj91GhE"Y;'_d]t쥴t^dٮFh[tdMpA.> 1ϋz#~%#Aو:EC']eGK@2eNOBӓj2e^w $ݨilVE{#]x%^*7'A.A9Yb&+MBC2đD\:s?ʷt@b82dOu_sgI_F:sAb/qŋWWKmG;Dr!ZĉI< jHF3@4(&LCO4M99#LdhKvR>rS "ZT'oƔ'(.lD>4tObS0&|ُHv+9?d66/(Mۙ#:k#܉/C8spAti (3Pf@@y?ת+yz%<{а^!ŏZr˻yYgu EaM;}^m~њ6xUfdCoQ;߯6ز㛴ΦKW_ t/'>b~m}o\Qo[gu/Ov;﹥0'oۆٗ]Q|ڤ >y!:55Ms[^]3kl;2=^l\gl9;sr\.ұ]gR{{o}/f2_۱q_5bMakRzKk@O} Ky*Σl%wh-񨛇GZj3e3~F^581GỎ#W#"q`.u r{GHT5% {|/Ӷ h>-8|BVߣɟ w1ݶ_yW8k4D^䔹dx=מM/UiV]撩nkNYqj3/N$.]b0G;Md}.zOeDiobCPqqoх:ke (3p2d>2e xe@_"~/H>E/!/ĤMxl^FE}d3/C *Nu. _b!LcQLɽlc| j+Axi^c*jpoɱɀ".FYH:8H|bM퍖A(~C4#=ʋjC ]#y^X\8r=d} =EZzyP4y6JZ2e 8 م.s9yE<t#B}N }`ʣ0D80ʁŏP\ϋmG.t/LYpιl`d?Fh!/iE2{/Άﳥ^*GxBwi81[uuّKE' 1[ϱ"gL3+p-t|ey̮ÞξͶnCutړO_O d]55'uyDu^j̿لclJW}};wx͒HEGLxEE2힓6\ϙ3WyKM^ 3ϋhn?Zꀍ<\}m#ԙΏZgH*n?p*?,8>`#6{AtwYwO1?,6+i4ӓN4mj)NN/^JzكOWȤ?00<'SU+k&.TT0K(խڦϵ11ӱSC.[6C^"6JwRt{`Zxy^t"a&]!۵;mm{VfZkl[4׏"yt&gmǟ+f/x.߿<}cwy5z{HfwsfzxGKm|iE7`wrKV$(|W4#',hMW%=ly7OZ%(#S%35A\8Py#J|ɣWsT=Qq{[{ĵ_.gdeIAAٕ/^Kq\x9 (3Pfg,99.=(3Pfue^ ֆ@$n"D+e+Kq&#jlV#mA.|M<#MO`SE8vcUG}p6+<0>4JtfKSG֬J4bB6|ѵE ~ ?Z;cG4&ϙɬn48HxHv475ZcGy8?*i)־c c r['n 4X>?fc8{x6q";Z'Oζ6vƌ#"ޱE:7o:=v RTצ"uѱIs:|SE2mYQVHF(-JB=H߾?:yMzFEHgk#yAG9Mc8^ǻ4xWFIV;iչ\4};jt|k1dW7,zv$7{WQ$idnĘ ._m: ^ 9ҽq\onɞûmstC֩о;>)[ck>;.33)#^:‘ `#&jG[\mEPvYOZQR#dٻh c_<<`%=*c,1JI/XDWgMc$\1x+DG育3y䉞-—oG/\2=\r1Gk(qy9 (3Pff,9-(3Pfu}{6l06yIFC<Ґ!h4|2VIqَȏ.DbzU>|%@7I^4#q`/B5i`yb];Q>992}4qy%inėY>cCtrą6:ǤсBf'^C:ƨ&B)A^K9!/90]tK\ M,"DV0ޠ96+Q\;tsxn[?^e![xάLwm9M/ɨ*/"K?£˖Lo40R9e.zn9MLy5Dg?T/& J^zV=+K:a|+<^Qbue (3p2Pʜܖ (3̀kd!N*$F[Tl:Luy*24&ي?>PXEX%7Azmhd4]l@2e L|L31GLrʃ>"-|6(#4ߏ:^$/5^~ՍFE23/'g瞵kÌɨhi.=AAޭ ~{uQ:hM"yq:8;tܖ GgϱZ_@!ki?h=^X.}_lϻsл4EƆ[m_Ï<`]/m?.slKGmŗ!ힷ1WopkǵQ;kv^b:!+Q>t_:x'=^Э%o<}w˚jw}ssceE<\w\(_:@AOaЋW xoOs  rqg|~WEd8l!rHyAР' G8sјG%^f@2'E,(3Pfk0|d/̡98r1-l@؄ȋtd!#0OޫO^I'@ih.M|A!S 6yeKvj vJBc`"N\2ЄkeErK. M)ΜB*subG|c޺Nm-HE' an2ȡGO8/29WGW0rO$x=9_ 1"<ݔ^?G ^ѕø lh7_ W;L2e 3@3Gs?ȗF ixQ^xTh-:2Ad'⚧C^D(yEC&%Q&O6r6Rspagz"R^7EKYFE3*8*8@Mcy BZ8#{HY2-v͎]R቎AR'N^0iӃx'V%;xg=]_F0JPadTprug>ŐuYs7ߋBIfΙH9E2/woyLjg6ax GC9QL=~LЧh"[ϰ0o x͠j]qٻ|{ԏ,oZm6tt@J?{[~vSEf}ȗ [w-_+g=;ϋLs3A0(1HT4[n퇭کڪ[S;a=hdQdJr", $H=~Uzʼߓskו =mr|,Y8,Xkyc,a%KJ21*!z4eɣbѿuom9K,|vUv"N6˸ΣՏEsd^4Nw&w#_ÞX(:[+>L}E\GGF}&?d\|d07NjZZZZmG]lhhhHK<_yH@恅ՎCimy:::::?½ Oxc0jf 9|>?|M[W?t,P{GMu}S_,G,#[l(|ג|ϲ\ %z#9UEcgvP&OEOfN+bh-͈f6YRcȺ؅%^1gzn XfY݂Ccw<[ VNh\)/~,rUWw,a̛Ku;pN^zrF|,aqg-s+KI o+Pknpyu ȓN.cG-gī>Sh8/Q8fZ,wb fvz2eKˤ vux^6^4'vĉd;;+ǤmL+T'cB~}m5/t s,(Z)'s'ysj=~9^&r7mnJy#̈1;k`g얳#^4>OvuXv[۝˥ڥ{? <iot;"&^{u^y.C<1k\qqcm}Ϟ9ߜXW+t(g5W nk_1SsD߈\u7אVOΥj=R䵊M<(>.9o[ZZZNB׆:::_}cwPS94oPfAOzt^}5g]8ȌZ\v{MQR9FGjcᕥIbOzsC>om[ױdSKy)?`#/ CeE0K |/GK(槦ΝA.I.h^4_ɔńl|}\|=C1nLvĹ`Gڏ}@>Ս#,zcsz]|6ANć hgnc=<7:::::N:={8Sy(uJxsSZk ȣƨ|u{8֌ ^z'"g~j[Ɨ21cKmAM~ ~f25!*^k˗8;gΚYny/ H|xjώ1g,/4m/|)ম7n?Z(8^4-^EuB<7E,kEbeJq}Sb1qNjXhD/yXPo*/?d옳q^>ϔ;oN?_.t{y$~۷oL{~8Yɼ)AjSC_uAdc'^|d1>xy`=϶~{ZĘC8l',1eX::::pP;xP4ցցցց@{Pl u> >jLl>i]л|ÃA3ݲȣOCq/2?Qs(޸>Jn'c1ڇXPj#G5T[ӦNY_se::]b`VSԳ%"/ T϶̛qRdϡ/`{F9Slݹk}P2wy!eyp$/U7*1WC\)O;o'h):dw=G?4Fr}֮X97*WƑ]F[ZZZZ@}zgQ wpfԶcZGu0yg\rc:o\Ce~a lAX|>_\Cn_X1aKNloցցցցցt{|>*~^]=1x1Ͼ\'q`s 3)kW:YA^ mNǨy>QcuCؐV:3ߵ95`'`0׼ J%]|s 'y_RVѲgQZފE!{OsהC5CoX^9-9"^;|8&cna;̈ucXȳzu}nb,d=;L-mlG kϮYbǗc-ܼ'jqj,y쁎vI?+٩ֿ,=cFc"XslrE,y52#Ӄn5OQĘ˖8/-fqR=ϝdߦxְ-rF?r,]{^:8W[c k;םystбx|ׅ2:C\)>}!b糪4k}pz2;Jo|%ևushSlVzkry<|PI.sBI0uuuuw-y=l{:z>leÈ68Ijm>db/Ws6k2z>}CI:k닌#:Ş>_sLgz::|a rC>Czcj[ϧ嚴q~9@+r·k^=V/g{ߑ}r7:::::p ;:S׸ߩEf_)2.›='><,FSX \|_@O ^jlCxxr􍬗T~P8ʞc-"bz|簈#vdP%,CNE2c{_YrL]]fVrH줲3|"^GtZ,l9S$- ms dQW IDATƢ7xev,(y%3G^;ճʂصdǎXef̝[ֿF׿zNɑsOsa"{,&6^{n#+bǔ=[ʅxrQbAc,n,qx;̈sX|4ȣfW,2kBxn2ʜkٶh_WĤUO{&3^}sb˺*>XW9iAgG]kcח zB7ʔ 1^3n'+ʒG.g^rc_YXϸ>c{mfi:|3ɱk3fG}#9ɋ燍9U>x2d`4'4ǃMP̾ʋG\#A׸\QgpL2#3 #d ,~٧Eӧ#׭CK:-gy}buϲXOGv,8?* 1V;X珉 E2^^2"t!sBvQj]5I[>\댅R,}χziƃʍ6OZ8jj(8bIɸ|v^Ṏ9N<8X㏗.,rYgcK^^PL!v(("5K#O;ykjއE3Vecy^T7,)+zXsUWﺳ[ m<3I=CgyaƉ1fL$Ʋ{lE$,#7Y{_]V<|jͱ{δƎ1E^:.:<yf,!WwBG&ƫvNRv~x mvս9^iƙq.6Y|4!;,.,[ {uי\^{uE95i?﬊df}h?wLNbcήfWb+ G'E=N2K =yg?^[uKqeDnw/tk+?_ZL>O,#enڡn, ^Ʈukcu9I7G~#ߜߧR蕭E/C>Xü}4䳽j;y9OMyBʃGG!\ʙjb;C̜u^}^4=σ氦a+V&F=}}#rL7&ז3O53o(>y : ^짿Te uHY(C ԘGs{ɵr'g? v'jz_ʿ>Fs_9u}zm}5ey19|ek,;ȵNP.3C w<˺tax5%&juڇ_6#&ohhhh{:z z:꾔mֳ-5Xs8P4RO^tYkȱ99ԍ+FNFo)e{Ϋ5x Ol۲I?d+b̲ɰK̪X7Gl]d,a1 ėgwR,\nz,w]/.%bw9׽g0x ҌXHyڲ0^3u{28~ 鑱 d}W9Ӻd6Ǝ9G8\яgbqY< l^&wK>XFY. 6G a"xLy+Ѧqfe2d·k >^4})J5g-^믿P6EwƱ3s8fvZiZ!v5jv=Z,}~jvY bNe1zsj験OCWtк raphGn\p̵= <Ѿ>+=c);*"#\Cn5T[4=s(Y//շkk@<)x}~C9:}P ?d Dz 6|^}_ρ=r_4 >pl/ֈ|:{Ɠ8\bk_k_Q4cK8pIAV'6xN'}gӞ9W?drM|%F)q dy;3?Anuuuuu@v cwO&I˼f }2yG:ǞqG祯Tb ^XPW{@}֊Dό]Lq=W ղƎ"tGtr9=,yrJ,dYs++}[$39`nWU-:YˤX3|tbڟ)W6◀/˟zs񪥗˜xI\R^X椋/.|ym2˟~еovyGꛯs6㠯N6.^}'_vaw?T,9Q+) z;L.qvʭ|#̩ͱMa|ְ@hb<͎9;tgb7mzP&ūhԄ㷝qN@f盱(+Jyn*﹭'.e{)^2OzSWVk"{9dC)2m>t[[ͮX#رfb'N?BXT39Ŏ8.@Qˏ>ZֿVRz .bqԊE/[l׷Gno~GϾxU3z&sH?uY2OϠق![|m']amI\xPk냟GgLy8l^YjFֳ-5'ux}>Y_k*=!灯9 Od][ZZZ~~lZZZZv/>H0T?uԔpᡮۜ֘;GoNp͕>>_f}smrL(:8jkPGe/M>ۇ\S8uLm7Oz=O\ I+g?D=;@"EmS <?4Edj3>SsC $Ve,51!=<+RF yX,g>vePu>S%^yy5kkH깾IsxaM9g!Pqiuuuuu@v3ib{?v} US}o(Gճ5&Q둱]a:a|ȵț+lNdyjԞU2#겯v|~8EgJ,奇E2u;ʜpeay$ӯ`  3fMkvټvm l @e$;3kagU#bA[+Ws攓/Ȼ>v*Z 1=s~y˂X,DԞ 3K V Z.'?Q9ʫ꧗cE23|Fpy9훺yM:mZ^lgIlE),ή<%wH.3{Ӯ5;]`ut'*N;)>"f aI= X:vE'MLeGÜwFX$ù̈́+g+&N4o,_^. )kxq~/wtS4a .bHV_S1lojSSбƐϐp2<Çld5>}Z'N9rtrN3(lA-|GpvA:|]=>E?vC^.Q]1զ}ߠv4y^9:aď2@FacCu|6\aoxhhhhhx7:=}{qC5<<ƊϾs7>`pxβW70s޺ξX|gg'?(߷ݟ͑ΖXsPyǻ+YXV<0v\κI&b!3gE;ˌxm i]l]G{ ;ư;/.*ǞYlz\ _xұ//v9KLn;ؼPXT&h霩 f}/[G?/Ů0:%ؑݲ!$w}$*gry+ ykpE}tvjQrZ*uKcvaWmcJ)M;[2)C?9;X;7l,frRzLx侲ˮϊy^^鰹ežW/KvH-;f(;xSywdٳ2&M,pBYΏWPV/[V,} vi籣΍Om9u+.sƩeW'뻎j>a>_sנrme*CѩgCקϹ9Q'T^QqM߱'Plscu|yֱsPm֩m_{ḿiClhhxOwG7V>Ë=S eje};'6V<50|'k_=W<7|]KNt9Y|T3&xk>qZ#dlE<u9VX|FuEOPz?/ dѳtaKHɅ8vR0=vdBh^B~}л8^i0GM Q{^7/0c}r<<~-CћK \ڔSZ<ug-ұbk}@?V>KT,yf_95˾C<0':(O㑽!\97,bԣ6ZZZZZF{Lz?"ktVL9r|<: ~325:~,j YemYE}5Y+1{3WɼrX("cc3OE2xU!cgsLa{ʙ`YkeZ,8S]a:cAJ̭,|,ruח>XNkXhsT,,9‹ʒxӎX$d2P{칎Q } pD=łl[5J>{eͪbXnv `ιrڅeSio,.Xd3m]vXpBѣV,D'wȬY3, ZvEY_Ze"i)Vv}/Ļn)'X$ϔ]7|VD.pXQH;Qǔ3]&8"צX3ˆygSb^k.̿(ww%K5K7cטpXH/Ul=xϋM]M_}Ͳ5xx|<;zqŒy'y,;זcah7PzxRuY6&;99|2ƟRm<ےH;=>1X7ӏFd8:jjuuuu@[(elhhhБѧQ8O9rmamYn27>xCKo_mڠسO{~A4Ǚ*.|3btjScf܌UY#=샲Ը3UqP03g K#u/'Jx(2Aޅ2 A-yXxb# 6zxt}z}'e~S>דyjӖi8o֩7F: kקS=If @3ncьoig|3r9جm\>tޜև󭎼C};șvq3Lgz.ܿ{[/O} [mCa ] ^9yGœ_n!6XCdYZ6r] ?}s|]Y˖X~X6B eSBW\XN2cUܓO.Oe[‚<ӟt53EAo.]Z9㌲PI|<*vSy+v I9s^ WGtRy>Ur(?@YĂvfuT3IXT.<3^O\_pWʘWvFÝ?ɷl36]re(/l1㻅F"7'ƶw|-ɰ E2˞z]~y.tGYs1Q'(W^bckse啘d)׫6eh泯׼1ҡϾւ%;cl֍l5̉k0gi#.Hl˞X2 uuu= ea ū1rMk{_˹:n_;g<|̟>[_m<226v GK„ٿ~iMYZ9OۇN0ŖiY\3A^Sym»8&d?d[V)D'r㯏T=`"-r22Y'SS,Eo/bׇ8A!!F:EYÐZס }_O4<~A&vr#+Th1Cs96c|83kPƦ qҬ_[Ї@9ցցցցց?|!; :~,>Q0W ߇oX9rv#7^$ 6ϙSzr)';-[cvTq< ,NeGcQ1gY^h% IDATyr 79ӘӘ=:|8<cU,eM:(:X՝|ޕW闿\6"cO9\ۿSxE{-/Ǣ墏爐7ʴX5۔)"njO^+X4mN4,rs~h_Z\>Dy'yH9+=[Sw^ξrgŏ?V?,?믔Uz[?rƯ/Y3SxG}Nq i2uBa>C-Ȟ_p !_y[-?Dʐ|gCy[+I3|_~uGuxU+ue12 s 2[Ыz=8?uFĨ㐭WAlα[?j33ցցցցӁPg;PAk탇-u~<)}Bμv8cC29{gM^,5JW]!2szbuʜsΣ24y<kRv0ȕ󈍏|%:Щf{qsNxGsϭGSە)|8B#zS/o<~9.נq`s3+NڔNwKu9x5o5A>Tysrx2k#,BN$9eEÎ?u_cVv;l38L'_=c^9W/{ >Z6—cvVy[ʅ^[βGʴرOlx{<-|:cF9*vsO8aWł^i"$|b̄xet,pϬ]bye}uV,3bͦXp3-=o^iXë|ȿjѢ2wމNAbwGb>rn_Hkx'c_ZP\ >A<WY۸\>y`GQ׍OցցցցہPg;zhؑk]9VYΑ}̭43:>xuu<mұ0?oܐX32T)z%`oH5Sr6ce?mR|̡7fuZ+>eއ}i,xb@!.TMy(=#V>/ApL$N,Ú2͵f^.#SJ[5kNJu7gC#˿ϮjϦN摹 0su`3kQq$ZFP[݂ns l?ZZZZZ:={Q=+se]^e;}Ͳ tQW_^XrCrOZ.xw3:^Sq'Sc̯5H_tQhgʼ)+_xwxx;Lbx=dxuLa6/x 'u{t4ڬ23NiV,RbA$^vfb/.z;vɥمXso|\pÇ˃Zrq04e{_BYzG {eW^?2וד+_>s9ߜR5n,Jrd:h֛/ڔ->ȹ' VM];! Ks3_֍Z<`+OπAůc3϶[3~m2 uuu=,yXZz]͜_5; Y{C?k9  l=}G=8O:xy}x>. L̵sAOs%:dQ蕍枣s~pa䖗#2zyPk>Na#GL4cS#v}#:|, a\{k=DW߇Wr ٣~Pam:wtsKK{Xyᭋkuuuuu@u ߣ2_s/^+d: }!3M3^>AחWOg3~62Fmy;T[c%?nf,z\Gm}rC3o2o+[OG_|e]h۶eSO)!L8ͿeS9K^VrNi=HK˺7,UU,$:<Cfv!X%vm9$vYdI;lٱfW;eN^]6}ĽvJ6,\b^FkX]΍c^rwWyʕJK>r~PO=AzCڇEЩW~Y_Y6kw vϫ15!>Zζw.ֈL|q@_|ƵN1įG3(eω굡*c}yY[s[9rmǐƶ2 uuu;w*Éԇ 8|ӇBSo F.}峟PmǃVy,G b_kjC0Nj2y?Ck&3 e#Sas2ġȜk+XhqYSjs";/0d1uuhC>mYsA}׾@Qy>ˣC,˿fTcg. l\G)}G}u-9m=޺jeLe~x犍I1Ocϸ谣3#덑f,ўku 5ob4:::::N;}Fi9F>{q{&W}W<9:2gS㫿}kc__֏ob99;'㕥`8/)6=06!^]i}=ڡԂ Q?jׇM1e/.ի?X$ T&L,YnW\κr>нk+wF2{2s+O?WsXBm[vvE-:i7ˑXfVYꦷX,hX\3u=ZѱHfM@W>|95^+n6J|ea2k?}']w~|SQ]fE>u>7^1`^Cs^{^249F\RZ˘<)U/Gc2}|Ue.ڝ zQ:DqCZqr=r:8@yhd?{1w=|O=9˸AW"/qHc g\ekS=϶m߶-C@@{|<_}jQ#>,[>W}rCQzm5%.#x^mCgXC>båt(z=ǹ[oﳩY딩nARM{-na|˺y;Sk+κ\z<v(p`#[yPGƩerQx0j1뚔J}5Y,uCF#;eLAǓG8Eꙣ:}X|G }jNxFa5[@@@@x:-w3j`ק>a26}k9,ױPK։WPproF_cʡ s?Pl's: SsoK>|9 {%bNg} bh^E0̟il(xP㔡e]n-z~rov|gֳc󮺺_oqj e뀒]Oqٶmۯ' AX}Fz_8{2=PS`3|֚Ρs`d9u#TY|,7Z֦ΕqbS^Y\:įiʙZK@fP϶oUn_>_.2\mK?r׿V^{2ˇccg> ˬW)m۳#̌9s/MjeaYV,MH3X,eGwq,'&[vUwXxsGn,L-b mV.ZT.OwcC?q,Oq{9kbgYc~sݗN? C{'7 s~X|Q>\ԗƀC}ɔɃ]G]GZV?D\:o畱̙u- W dC&Nb}SONm# a5}@@@@[(s`PZZZZ>|ԇQ C ~ԃ6ׇpG^_dЃ gK )1 d|؏9nH?*P1> *״2}@.x{Zש,s 9W͋}·>Ykeu^cьy#C峜uS<9;t`XwX?ic,19enἆ>Y<,n֚}mrM=<9/ G=̉A<03jo>cm5nzu8ڳoӇC^<ϼp`g~މ?Ƌ'K<}~bH36k4ցցցցցw=4=ca| ^_s9}@;Dő}l s>Z3W1~doث!zszچ/k;ѨaR&}P?0nTl˵׼X ^q_ǢOJ~h6mPGm~5^wƅ5'_ʜ#,ϗgʫKGQnZnU^yrMח{? bÎ96֬*scSM+bٳˮdoZ&'X^/Xu#?!˼P>;}ߕWr7,0Sa/6ϝ_{$ZV/c߼[qQy,J|Ƴ̏~}@3}gO!_FǺ-םs'>]Czծ,-^#z}>z2%Cͥ/8 m31y::::pp:6ցցց\|ȼ:h>ozcyts?jC#xIVdݜY'-Ǚs&c}'攪[?dsw`aX?h=ĕ!#ZKo6Lk|A?ÞkG ⨓C\d뺵iϱf{qRcOZ>],F7ՖxlGZc=c(}}Y]敭jGc)\9W]>Ԛ=q^9644G1Z5vtoHOCցցցցց}|_e/AκG}lyY1rM9w#˶܏\[G },:L/>D?12rC<~>SsK9k#_)?+qR U?,UoL/EgbGg=|}v aX83#J.9,{aQ/(֮-ǟ~z/ΚeŢcVvs%va6tSwYλ0rͿn/>HXO}L.SZ˜pbYsl3ǼeU,ޡ[_ZG|yjj<ٿOb*C|C< c}\F+r9dubBS#לy7柚:zQׇO1R7}AasWLٖ`]@G{i|@@@[(s{2':z,|3&rSKz;!6·(6V'U1R)6sHO9ca'(7ߧGg>{F?:ڠP_}22V_:}/uc9!쏏;rȲz>bKst_`e?,gp>}qjJ}Ejdu*kT8ʙjbyqekɸ5r&bscaRxu'&6Y≫k?ry5}cցցցց:kWqMusʃc.(٧Wx(6pԫfgo\\O0 w_}#׆>RPtQ{V4cYGΙ㙻<_l-SG_,:6s<5>cfY⢲29kvy5/L| f fчeS,v!ݎ1r҂cQejk+G4 IDAT?tmYx=e/m팝e-ʥ*%bn6,| k/ͯG=GbW(%/N]MɅ:}.Ё8lCùꋬl˼~Pqtڤ{o-Cڤy]{EoNc(~f*?9_ so>vúC_1/ўmPNBw-K@@?ރ_g]=2>h??ܨ'sV3D3.<]kGu}Y!>+[wQcve@YLZ5/6|WU18l ߰n|s}vt>{-_̚C^7Suq15lyzrY74?9^{?c=F&nUu}֡^jh<9W6}נT،)GѩT5[:d1zc̉:9Oᯍyk^tbJ3?2Ls^GιhhhhhpO0}>M{q8ebVz_I}ΥMj ~R}hƖRT+c\Yj|ЙWusc<0b#8O}ş\܌aLƁG_#~gח0;y/z{&HTt}u/{GO^|r\Z,_w]YCg7V,?ˤ6k)]w}y_>=ǸZzm5͹k}aS_`˾9>cK1?͡1C3.Gs+O'fTٖ1l c/<3G^~_h5s{K4>>c9=r󎿿E+ oZF5fۻ<ۚWoNYynJ|s|CY'P;DO.i'Wې]ʑkMڌW5f^᧭m55!6} s"fT\h|@@@@p?wG5~/%}rQOPg>r#f}/ƌ3gNo8̡1C$^Y>cckMwT&R&{Y{]mxWSq?\W]-sY:)x9jгxViXX?oT.CXr1ǖז-+?n)S:3w]v1rw,?Snַʵ\#^toNYcke2۬]_s}]w:=uQ6|;j9z}֔u}<~\cb Ͷc`[5ߡjS9AC'udƷ2 uuu=(}81}*^:04e贈8GLC>Lj u49M>:CQ>xkz~3r6)k9IbHz sU+q}TsyM]k%[+QXACLG]6K}~u2XeΌ%/%>ןyK־CssI<ٖξء+%=C<^p *gj~M02/x?xrgh;r1'f[o|@@@@;0~>Y;=?WzC]e}| (xF_\`z}B'FsC9ɲ9˘bZ'A9zjY~]_m8}NuldN]x(y%(grs`YW_\ƀaN+CnZݿWe-m!?rϯ;ul &A,|n/c͎RGۨxn6K~I,x8Q )Ruߙ7sϑ>ڇN=t,\9Isk9k:Cʯݒ [0.SR~4cf:FÜ֒cjzMLq[PF@@@@[(s{[ZZޓ;_}?</>w[sd26|7?tq)zc>f_}2?C7|=q.3O,#S,a徘c3o> 5zm:l#mܾPW?E^Egkq֛PsguH8><9.GE7scwa=35|PgobJ4V`RsAs>jz}sRfu59j|m<ߵtղz(|p~{=e:m#k7zΡAPFKbX9xϺ0s9OH? (C:::::_} -d_>z,&'>޻ǜKQc,4C}G~O]ز>.9AcYPbgg}^o`+(FRf(22 #%C_`@%I)15CH)bb~~쵏uo>z]kzZu}˵?1gm='wwFs]i0Fg^k.z_sU&zӷuX?+cf>xgDw)}ߞO{;m+;Syu cN|X OgN}W>k;u3KaLXޓ9[;y]-˜j:x4w˧:n7ol>+}oPWgggg/_ ^O( |7xr!/ZWD!e{j:G*'vũ<0}4W[i=vE3S]oVV}c-9ms¹ך+O;k| uN׈aW#>5'{ãZbf E_p<}sF?ޞԒw{ٝQ =F F~/-gW8Z̵ڟUnkf\9Z=ɩ%=i5r末YVۜ~U3눭?- u'>8888w|9m?iVqkC19ū-ÓC~w-bp9挱~ZuWZ9ZK~/ ^k|gt>mk-g{O/ݟ>??G挽'BΦ:l 39kci>f>|'8pv^q,fZާѺScLn_+zf^&6wؼZϵ0̱fqfk[YgHG\[ zmsH>j˻z񝖽7{rgggg/C( |ek~랥`>,{߲jxW7:Sv7rYc5W:=/ԜrΧzOތ8h8[z_6?9 oj[ͫg1\p3c|eW|JϚUnMU\ג)sr=8888x~?3׭>ɗkLg|Zp/WZ-\|c,3s`]ߚ'?!\ş:/W\>s87rwskwzja˹|֙u<֩ҙWF>S9$y4P} g78c/o;ϴ|>=98Šy'欰z:KX'#/\_[l_5񼨓]ii521yтͫ9_Y L h:fv1z=ɑ9Z%Is>gggg/CT /|%Z}9Z0!>(_Y}Y͹o]]Omb+>JztWӿV6UνX[{w&DZ޸:|5tvFbwv}k؅|GXgЙ3ac,7ĩ4=MlN9Ӈ&"|VkkMgiWN{QcN̘ܜ`.SK\^pkb]|/{o+[v˞͡ Gu÷7~{?z:jYlllll3. rUϩZ}9Zs]0?q׸k,絛gkzZ֨?tޭ{Ye&ү=0{q?u9Ŵ{<#1|. c֋Zbݳ}|mbg`S?q|ã)g$М~u.sX]<}n˳+[\s+|g:k ~؟Z^+:s˼Eo' ȏK8T|ߏ9޷7ƪmA豞N>Ĝޗ=<888x ?ymyXxWfq5p%>Wuո3mο ^+9Xj+q΢]Z0Ђ_xjZ{5\Yo\kyaWZw9tك6KMmk|>6}!Fb5^jzl G_h*ګ펻ߚ׶G|Z^wϽxMXČo{p͹f^|gwsC }˷F֊_Y5'Z3GXllllu7pPuy><>܃߼!Co#KEhEZ_ɇ 'w9G5/=k0> ҇;o:23ÕxXί{;*|+Uzӗ^z59p=R9[zm̺'{c|U4[7{濣kbk=wr3&Ggggg2ϣv6p6p6_\ >c}hۼy8Y9Z{=^=,&Zs1OsS{uyڳ?N,Χ ({>VGTΌjntwŪG] OU#?^G||/B_~{'O]MXrZ|=}ܧ[\8/>/vEY5W:lgŽ}~g}Q_Kz{#̸9uea%-Zǚ$,38sO#Ǭk8h͡o}^V1֮8ٷ<1tLl5[539O:3؞%=pWML>~txYuNzUW>=9Zտ'{b7~k k<κJkV~or_K޾S+ߺ]}^ʙW '5z!wùqggggg/ـk>ע[?g?ǚN3fg3uNqr=f.'>-Ɲ{,}nժ1KV A] NlZko\-|Ns5&|zll?dAS?Z/ fsFc,<9=ռ/5≵_W|k{J GZzuv9vw'>5ԟv~WJ :O|>u[WCQ?88m.` Wb.ԇ upVۺ{|hL}[5%ZyZw[=rd1?U5=^s/_-}aoʹrjx+\ZV</ VV,1Z=r]Z= 7=[wjpNc ɱ3ly3f{ދeF߫uxOg-{,R_Ny;뷞sLkf |X>r+:?'Z%_b9c<\bl_W՛oOfQL0kzg_us1d}|l3#ΜCA! IDAT~ޫVݙG'lޏ}܉wC<˿S3hs3Njw'N<15jWp,35_}k'qUrދ;[^-1%kf |8(t?88@}ae5>spoeۗ"k?㕥֋<5\bؕ8{9X_o,2Kա#gV=39f\ G-^V=.r_[E 1Zb\#9ڧc8q}Xya*y1'4jszpٽ+ܻsb93_ w:wC\92y|oka{f-Ն=jW=OҴr'^֬8v:lllll9g\3/Uo?<汳pb97zScql˼٧g5^3w_aޗk{wU^ޣ]/jƶ%'wSgMkSK|c_/ɱ:mѧƹ}a z7yqN9晍LNc|ЃCZyU 9hp2P3~:G ԶyXLZ5j_mjXcc-xkwvlllle8(곁aÁX}r3߇j܌Y̷^5mz3K{3kZ_90}~_^ɛq{u՟z:r^[ծ19o.N}^z b"95ȕ _S3~P jOYp932;ibZsZr96ϊf1=;}1{Use\c_5t.i\Zr\Mv+ k+ũ:;#v3P537c~va7܌Y̷^5mz3K{3kaGqy:skSWLzӇ#͸N}c1[:n٩1ѽśu.#.]0#8϶SÜX6RKϞq4֬|t5՚Ӫi|_k/w϶[{e[X/t݋8YT~/|:[s[SOZ-<׷ 3wˮꥎZllll8(ݝʳ6zH5*_S1 돒W sջ9_aW-{U؜A=qbRy|X铳'\1yʝvvN_55ʙ9bfW5W;vnރ}W^w.|oL `[uT /k+{/PRO^ZXO}19-8~cX{0sZ93*g]j_#Z1]W;;U<w{O=#6g-5W-oZ,5kߚboN>y9bǞ |:6pP:),7ЇՃXRQWO^\+.݃~QܞWy,gV\ܭÃu}3{} KyUoι'nMb/^jKq^o~ikYԛ+ /ӂO]硿y՜{jA3pŬ/9ΩE~w]Suw|njȫuξrΜއ3W}{?X4'W=p >Fy9m|8'w6p6p6p6p6 8~U,϶rq+WNgn-~oSmԂO-g֮bj|?=xOԢO ZKYK^bDBϜѰ`"gj^yrV%9kngn85k3ojpz&z\VOxYsu}kϺ͡~߲9ԝݼuŎ6p6p6p6v8(v=ggggl f;}@_s{3Ƙ|}SL]1Y{OXV<rWw̭\my/9ɝVnV/sK2bXp3/jrOVqW3,ؼԪ]u-֯jof"{ ]|{sHQ>N<%KyhN 7r@jX\gǞ |gs0X>z`8W9@#Xel]y`ͣgNm,G7;xVqWVl^jծc'u&b/)OZ1k+ny>O~{VYPK+ejǶ?j1?Wfr7Wl2.y,8^bZyNjsU]S<}9]bZbﹹ}c7.ͼZ7Ƃy+~k33ǯECLs{^z/?(ǚ6^jc$7WsbV t|\U9Z{ç~^{[a6ouӖKw@,G\u|gkl+.f lˌ\Y֝i9,X-~ FlZkuG|y_T-uv_ރ !2OLMrWy_0zQ|+pz{䒟~]ʹı>ۢQ}V};xǟ3_7+)Rm0b,h{o/m5)}_S`gggg2ӣx6p6p6p6a2!B~]rPo^V|eƬ!?9x[ևjb},srѭv}9X攻[=o̓.K^mmkwV-spw.r>cȑ>י/䂩w61yֈ3>`'>ߺjR/'/կ.}{Uי佯}`O/yZs|c/=wuv*wlrkgN֙6yoS93>\pA뽑{LGjEY[sG3lcV3ú[OǞ ^~/ϯjMnrV~9jjg9kvM}=jjѩxǗCWyVGw׺Օc9,.1^9u'{ow\\g V;qssʗ>pU y~G{<.\8bwJ϶]Pcjzޛ1||p%wG _ }tkծɿպϫ=\sΌ4WU+ {|Ekru/_=%WVցgw:1yO;kN|6p6p6p68(a-ց͸u˙yre-:s/^]byV^Zi6_-_le{o_s+=rܗާ#&g~j'VkԳ_q1jy7cc-yOErW%_J M{)Fξo٩ۓbiu_3ofjn55W\u-o^ky/kofYW9t I:s1yp#>{~ |ϻ?ցx&_c/slis4/O_w>-}9`ouZi[[Rxr򵭩{l\ZbW<9Wﭾb zr}o}<3-nlskc%;V{ov1$(t&׸;{{Za;>}7131?u?EsbFVzhSLU?.׺>Yhɛ;U ʼ>gv|_}a91E%6mM_hPW-uY+_٩ G<5v_b<8{Ļ^;>fn{|XZ39N}ckɹ+^rZӝ6OY }}`}{)Nyf~rPLXfGq`N5'ĉO%?Ogq>uZAզJ*On7^zSʁ\iw.|c_b}W\rwFu2={]\h>հ{>﹟rЬWc8^nޞ?8888w|>[<4'6ش'75&:ƭ+V}t&Gm9;+OcXy+ {'_l(VG=WZhSg֋1w~Ŧ+gw~f!W Ol }DXuVs戽6+WL[ɣ sfyk8pݻu|8;9ӟsh'_zcxj1bx^ۻʧ^k{˝׊W7cNNgzXX{ {XswgggggـOq/,k-f~a6XK[ӧsc;;RW=3v}+WXX߇[?w&9xC?gsa%;/1|q/SYc3_jcsN':|pw>PZ8U߸_-zڿ~gX`ת\grV8nb6WMrjkɵur|գ {a>cb^ۮ,r:#sX?kf^zc8{6p6p6p6 ?yN37{@n= /T|־BSOnN]n=<7#VS=kꪧ'q=[/vqo{!׼3cxsâ?O=w.r=k~{akO^{OK+'ޣy;}SJnk71bV>so?}h35O)<[Y՛u+܊W`EXL,{6p6p6p6p6[rϹڻG[ƭ} Յ67s[[_bR͝=i72k^uvj>]L|ޛ:/~`s&fJn~P㵡|GpW\Yw >}6?_Կr;wtNsf?cm#'?\Y31X;gkSn:15,^+|5kn^jW> ?v}: ,6}m`<\Ƈ^÷ϕVX{U3{w}{͇mއswxܝ;C>O~{YvWZ^<{rr|}eeN;9&C.1yb歓;{S[:ZZqi^},y/ͭ미Ř}biŵ?kuo;[΃{B=yi0~w^נ=)T˼1֮twQ[my3~}Č?~rȵn6x |甾9ϼ\OO9QsƯah$w<N̚ZjW.wֺ[4izO<ۺ3jo@_w|Տy_u|ȳ-eĩnp住}^ t9G_K]}bӚB-jroy~{Vz)&wνz u[:+ pvykݩ NͫX߇Ej=+[]TJ^Ųk__9hɽ=llll8( ߇ ).xL>W1\S^^ɁZ[߾ {YK]Np?썥y1汿ZaR:5fq5X]qr+X֢Qx5G7~fŝ}_E ^zs@gw˙3}ԓs-ypWjVS =䝁:}`=rgkY b㋵r~>9~ϩ5jNY(g/,ؼ΅&ɳ:Zv::cW9;/'KG\.O|~ZuW:;\:޴w''W/1+)?97&˜Σ}}6gwn:ߚ^s|әЫO>֋a7Y:RgNz|c^`=}][}ݼ:~{sZ[}Oﷺwrcwx96k}S1ܙ7ZQo8llllCgϧgj>KnoqSݝYq|\;7,'[bZ{Zc[ڳԧF^}8SZkxغ`͋: ;O֙ku>jj1:#= \Ӈ|pQϾE 8?uVqgj^X}zv+{c=h5o+kݽ5V=}7Ws9WWZQ x&>kZK^sl\ IDATu,[5};9[}]k;ŭ;lllll56gO?v;Cؙv+5>ݲ>ub+_Lk/kWUӗ#:jwp5>k[;-y|/[OU:g,m=>ɋ>Azcl+9W3/><1^\{iqNi)N5&cՔ{e^ު';Zj1gтWcl/sbh'8uS*(F5}OQQ{;}|Ԗc|e۬,o]W6pPe;ggggn/._崶{RZ/0Cui֗_b;OlYwc8u`Sg5pvk^k=q9pzykY5 gGj5.祾swgXs[.[[҇+u++Ϟ+=8+z~(+9Ks v՜5Z:8̫{Ò5uNqW~3Zp}|9槖<}7$u!Ǯ |kYրcۏXL\+t"a/Gx<9ܩXUZbyx+Kՙi!9c])4WM4nnb6pч+zs䙍S2^3a|/w[a*mN{Qojk=++}cyM<fx-^ ͙/srg=5nrc{VKŷv؉c4P9s+f5Ĉ'wYUo\%oցK G[W5l^ͭaf_9u&F쿷U__{{6p6p6p6p6gu`P{}vşSf'?꽶?Yٝ_}?%?)LY;[6=zp_5^Y1XkBFz^c8w%_]{Rۜ3azLL;gg8(>3:G:=rw=5kw΂ŵ8֙^csѱ~^?'g?=}ruposX-yWb75g+qmw>܀_W {$5.[[wk͸s5;4ۙ|Vǹ:[f-Ȝ{ğ=|ԒGO9{u6^}$vn|Y7q*uO }{S|9m<.131p^+^51CXiNbmփPU~;jYc=llll7pPw|: |f6x~xP|R%FlU 6:ժ،w&cxb{Z%+W]y_-Ou{ז+vgy+f͌}|W4މljc›μ|SD ~i/rG1=h9-ɭz^Wy{g8q{{5'ǜz3t60c!^M0y_Պ5kgl?g<7VNs L&7G:<4^ZsK7 3sǜ\#6*Gj_Ll;}3ùfK_]5VsoU<%nޚi[׮n3,yNnlWyrWZ뉝 lV}k_xANj|w?'Obw&-jɭz^< Soo|/j_iݲjv60c.\yWs;K];KzptVYK<yš\-O=B1V |q^e^Glll3E/V宰9s'=}u/mos+ S.!_hM>u=}ܪYG/9}OuXE`΍塛ע\pZsZ1r.~0W~9 |r{@*;g7ۓ:a(< #3h^YkpĞ,kgisuZ7EBsO}ľ#g 5=vƹ9Y^lllll9+~65x{q/mos++9vgrUK׵br?i W5Q_0{4U:bj4ggiգ ?{72WO<1{m^k=)}V:G}mX8b`{N{|0z^bSYmfZo|U;sWCNcf%5=%5{ٿst[-lw-z&}Ny q56p6p6p68(OwW9xuZqshPX]_Orpk*سl`tg1]=5W3⴯5Ů_-|.昸fu~G[Z|Ps/{>ﰉ[s˶nљq Ʈ+:WK[g[CO^ίr'&a>NW7~~s2<>ۊ]}k|6Wh~õq/0V[{z9|ߓ:;ު/~uOo9X5yӿ׺7|ړ~vƫKN:kVXwžسmw>_b }h^OgO\9>PC/r)1gu`^;Sq~tw5 $tfQ6ZVXkÛu1oO;$o\S_n2=S/לZX3H.ʳ٧|ޗZ}{NK:fkj':l9'׼L_|Zy+9Vfhc f\z,ٹW=\yjH\jGG-:^܀)XP_``qoD~|f.a0sr5Yȣ3sj3ׇsO[XcZ՞w4#VnS}V<_ۙ^p[=՜}˅ý+_ڝ/߼RK]_ r|&gW߫l]}[z'sW:Kӧ&_sXϪO^jW}dΦmjCwv*.6yXO\fN{|m֐ڜ|sm] 0[5/Fk5X4ayVV=Yy/h8Ljk0gmr gޫzi]ݭP{v}۷Ouӟ t|phK.~vcWxu֪XuSLz?xγ΋OY{r]hrù51}oo,@?9u{Q{UV϶9W7?k~qy<#gZ3_k3}jpkŬ)^.Y[_}՚{|5Av2݇:Y7_~p^oe^oGllll E,4x(AWyuW8 S%V, ߇u|ŌËC yuq敮J{i+ļi?w@Z5c mٻ9ٰ^jaw݅ ib|ŸG{rOuBu8Z|ߘ=jbh7^:ӴsN jLZQ[uq}ǝn9wGqb,G++D|=llllls%-~㕦er̫9SǞ݃Ms٧ ={aWc5ഗ1Vn9X}^җ+M9zƫZ1>ۢmZoej/w@|+9L>7=GzvX܅5r; 3#6{sOEYW Ƿ?gړ35߸!g1ZP.&ONkUc3.^{_h{X]O9ǎw\Y,W]kpӜǞ ʼNb7n?}[ggݿow??ܪ`gR6SWZ+}o+Xa5'Hx`cW_<(_ӶԽM=q_;|qԧ7fx-_詩-:<\a}14֟=lNKso͕ZreǑ:|]O;yL[797[һ΢R3;jNKMuP[5\~g'1ɝjޫy++_ll??ܼ}_՗zO_u_{{w“o5nQ8cjhw\p8WgӮ;cSwGNW^S*7}mv|zx3SZguj>zjj˩*?{kWr,;.#Z{14ߙ|^L䉭Yo[S˼Ss֭⩵|\~{`\}覧`Y|(jW{z:swO=XiخN|9=x"U+V{?W||g[:pc7_V˾b L 0GΒsXa:UCG%t&v&kX]-r2]V+KX0xk|6[[~ _oo_?OO?/۷}ۻ~I7L?k,s;y75g.VkՋ iW-^ϩCwWW}ӳ sLWVWܫ:Wy׫uߚA.jkcr=SpnԣN롾1ؕ69/VVmZjhV|bg?k:z3mS-9`ͣao18sÝ3N\$?rѶ؞W{p.WlP/?hK IDAT7NzWmvkz_b;K?{b9Xz?9A~rC\;m( |*6_y;>7|׼wS//}~V$>K~>Ã>95>t4oNx5#O|/~OYANۙosY~|vU\;]k; k?u&֘v{5^n59kͭjδjsYӘ̌uԀ9}-R>{b~qH8Y2֩c=\v.OܚZyӽ Zfu_q]ĘC 'W5j?0/1Ny*fm1i徕u>^݉]iBCLu|Ʒ,SVɟ k1-߲z_?GGWR+fݿ˿_wտ˿|v6>/ ٢}z˫g[7}W5r/|{䚸;ὢ\YЮ8lWu5[[}U^L1ZM_{+֜V|vւsYؾb^5E[2_qX4k|Yw|W\|9Xu΁ pz5[S{/ Z睼YlYm9ƾV:E.bxbpsY/S^VcjyO5_sS/}ϊağ{A{iSw>TK^kk_1̙ĵV֙vZk',;iDY^Zʟ}`Gl_]֔;u徖E_kƣs6p6 |w}׻??zX77Hw??OOf_Ͻr9sf~5nMqkɋcwZ_WsX_+w:8KgC~<+=j`hqoGCxyjۯrV_rS{lNȫ9l޳ι޻>ے#RcG rD#W>VdO.1Xެ1&~aw9G+-}j:QsN%~W>ӿύ=z^}GNm[;}5&Gm>tS6p6m؏ 7~7_<DOOOq6w=G~vQ??'ki/:br^;Nq{YN k{mG\<ǪZ-w?2ã}g]4;n^f쵳'j\{|}7k'ur|Js*f;9޹޺W^&< C"#Y]ZF;)iQHG*"",R/PPҴLLMMS/3,55x311s?۽֐{򽥏UJ׎cmrel]a>+fnΥS}8^o}uFEn_dQ|պGm}ui+^֧FKook|60 .r6pn5ys^Ç>ë_÷~v m[< fqiaIjĴɕ9xri_OsШ^p8ٗpc~PXWV|gT-9ԫ9̓~F_~SsĩvWC|jSNϿkK{=n3a {F#O ՇCMbZʯs_ΐv-Wg`]YK^bryS3sj_޹? ܿ6:mo{qճs>ß^ܿnr 9gON~ɩ5aYO*<]L jÇ'7ԪwqjSVs~sX{ hxrvŵ)\mji3>ezw4 '{{7f>VW,cnb|'ĘyJ9A 6gBg@|uكqbzҷVcjٛe.)E/k-d/go/WupW$gnM/䒟:+Ω~;C:N_qĶl+^[DNǣOݿ37!v5=~wGc8l`6p /\nS=lAzwr7 G#|<)G=Q>e5Q _+p/sr2N=fV]psY+/NԔ}α:1Vm׼=X+^-yObZ{W^|lju˜jypXJ_=15y-5[ּ1Ղ΅oMY yrg=^=+j8wŻ殻|wo՞¶t-}ֻ/UOs3:Vij9~=?y>BЇ>ԧ>7lے6琗7g? g'k:‚C]mKZ25b5K [G @. ɳ|=G>|G>1:>bV?uCyž>:xi;jakx6wZkٖzza^=XgxJ,=jZT|!J9j{밮}l铷P:z' G"G p& fwgG>9yc pɗ|I;[#'<Ɨ̎'>2[zsfO>$Y9|\?wi=qSwWN:+Sxzֳ??z|jGw#'=2l\39?*nIYy 3Zc,:gD{Zڵ/ձ^ OĎA0/12F]ۗX,y.gWM5EwaޯXry/UN=w|pyVm55N.>yf5& ~ꨗZS[3*|E ui]i%_5Wu[U˹;U\j娓ykp}q,EΡZW[yfo`~Qw<f!_̈WKK_?BiVS7 }{M7?1W>$?Ï|1ye_^Z4eIbjcW"bVnO9}cjǪ]}6gGvL,\<䈽3]M!ecggOO׏ȏ~~^l<>w~$ï9>Sb>x '9W9W&z{5d5s˯zNyuVZqRSnW'f}W9ZlY+&\^U9}H\/v,3zZMNE 9ՀI_y՜|;5x`j-Wy2_9ΐ{{Ȝ,ON?mm7}? ~5uS߻ 3o| 7=`[ְYoNy6ͳKY#x#pZĬђ3yZZsu9?-j^5,ckyu\\\rOYj'5^ϣF8/ _b;XLmjX[cw4|k3g_p36s+_u&895X~S'w_Yglz]g5|j5ժZO~U'y+QMxnq{__xxv6}k^sٟÛoo>3>?7aCcݩg=M= l}ы^d86܀Qyfl[ְʩU^2Ӓ{+W{Y5pٖXnrXx֊'fkҊ_Ԟw~yZb֑̑7񖥖yRY܉yq7ZuNI,gͱF Cys89>yXzjXoo99U0&7g5y}siS?usr;1ZO9yM_|p 㽄|!p|~q9|@Yݕ|8H./nRSH?&Gɦ,3_8ube2vj O.^Uþڪ]5.{//QRgfFIXʺW{Fzbc>?lhDK Ձy/US>Vrg ^c1ZUCNͧu&3Xj#׸VNj~Ε~Ek龜iy+MħN[nF1,:U\%{SL||3ʯ'u??g?]z//܀{^7G={xƁ,_w9l/|}7Ϻ)SY}6a]^|ή6GU>m5_Yuȧw̡s<{Ϝؖ䁡WWUhg-; mZrQgO|g#3z,gR+y|j=j\u&{y3'zٓGqg`XsӢybu%I Zұ&V}S'uaͭl7S϶gL3̙q[=Uzqs賁z|@|;?T|ӞvC7ΓqY}!X ~{m~xA5| WnD`/иU? v}ٗ9sgٖMYVJ=WԪNœ ^~v'oOgyvzc뭗n>֙sfY*/[5}.۽Xss Y/7qu"sz[6ws1}sԃgoՇ{g[;seϼ/9?>\rY.K>lYKͪ9Oya}|-7uJ=;֜jjk͞guO:Xs5׋ׁ|jW.0lq8.5 ^)cOy?gL>M60(sss7g=Fɿ˿e=8Ÿ٥ ܴ~H`r`>XL7`R'lomh=eO=ۇ]E/ZPg>`^hc3g|1/y5p{ԋyY G<OOo5O]͉U[ՑxΐD'gn+6g&jWY5~jUY (xZgS|EcL05֥FX}{mΰUsJ_[V:krj|7ּY% f<,p͋[XE3Og^?ybg5hIL]91i:|q9d919uO b֤FZWu~α[5WUbN>uƼ72uW9Nî? IDATfWE(WxxcC?w܃\~7~cgڀE{A>Jd?1lO34; -ES]mr'trI';ysZ5:lr2A挭SK}bG/5;[˽uS+]udNĪ?X/f6}_Pᅪ'/}8Ϙܙu3OGO,}tQ{[W偝:Ye~N|c|__󖷼ϳm@~$v?9VT}b8%}gZkZYjS+?qbN-'uĪ̛Ӓt1sa9G 0Ԫ#VkӢ~7^s5=uS5ܧyeʡ~ϭLgŚK~E-1:y4ĪqΡ>|w:8y`uO}ɫe=nS'oYS{gρ_{cG܋'yYyjL<S}9 <_brgΗK}}9ݩ{϶歭18ǚO5sC-mj{2O䍝 ftg p生].%|S-ޯ~/<Ԡo%y>NYk᥮8=~YW!Fǝ۷r!/:}aa{U'pY͜K_nasUb+?qԁoMO.\ˋZSV^ɯ'zs^0_n*nN/};@xٖ>sA SkkMث1x՚}E.r{Gx/ fmVәl~~~??Y?G773u 3 0A_k+XO;ǪCM4r_p̝c{K3W1ck:=2>u'y+_)oY5&k~`]/phTTM*mΙ_9}lqp͡W-Ǟj뎌uܞ,{٫5Wӻ޳,;ܜ\bKy$'סyyv60⟏__{pyc I|ˇo-ϵx:>v#O J66OWN{|[=zs=OY;rZcxee_{W=sjMb.v<|7$n^l`6pn̝n o׽=> o8~'~^i%%/9_W~&~GGG U~f>P8E^c9=] T͞|&_;ԙ1lŒVؓ9VS5{v'vc[g0/r3fWazYqVx9\įzƾO8s_93t=z3eM{@N~]&V:/3f׻>o|oo>??>Ϲ@>?7~_c͏؏Gܫ~um ? m#?|kA.듋4*vyrg]Y >}IrpTۿFw}w^W~`;;{o}[xCβgt< >|!G0N)z&U?cM}R8yuE`~Bka6qҪ+N kK ?}sNjWWӺ=:w^henKڬHq}\s7Wr_y1=2'G 뱯q̡?X\?[l08]_'6IܚS&F}:k?e}-woO[6g>RiNKUԬz[ʝx60}7[[a{ Ox!yo3qy3yI^~W =r䫾/}Kju~~Dr~~w3NMV%?sr%/㜅<5#f^ljޗwnbo]ZkVnUjem-}9{mjc߫Ϻ=5u\gS;}dO/G V_>۪=~gCu2V- ߝs1[>75kU:mN^˽pQt|_ζU9j3ӿa[:D~>Qg.<Ɵ fwe|}˿ww~i×F~(~ԧ>W𖷼xA/| 6CWxjo=X>,YUzu>sH*bgZ[9u81ڿڃku]\'u'{u=$@ޫW,W?t2W5SK +~jvb G#ǹ3:)F{"]Y{O?+W'g[qY^8o9g3c+^jqwfO>Y:?|sb'#f[ZvykUN'r>eoUelι;W}mrO\~y|]K.es#Wʯ3zZyF[\}gw6rE|Aγ☯ZmgvrK1u䉥>+Q2~ǯtu^Uoů<~Έo+|g:mcg;g<{= /G[W}sN[r3'F=֚ʼ~vũ1omGgrb>yb֝cը?8V\H]gɚ8,fZZ9}s{69[-}WGNqԖk 5WO϶`>#d'+9CǩJ3^ĴX=UyX[#N./LX}sXtVxƟ fO /|63l߈߰ῳK͜E6*:}G,nCN@C<[q&ݪO&'2RZ5Es.WZ٫V[~j\ё=GX< 9Xw[oi nw=ܛwJ땘>|rW>uIO]ΨƝ%7{s9363>S'=Lg0 tenhk~OL!NA{,C.Ձ+rķ8~0C}&k9$9'9IKԫX.u*O-/Yל]ck&gO3q⵮ q^7W}y~ZWِ[G\;dv._}lrrI9cWgZ's.c{iw:.ƖuIOe}b+?QկsG ֜:cgl}l@}xP\|]=XzjT j4׹A-c3\?zY#|7_gwj+j^4v ~%u:tQuWsikō/jNS7~2,e^ =X_;>"_]5~^[ųv 3ǼFcV<fneM^b^pZ1xg]Y·trw~:lks[Z]#1ך7; f@~IUϚK~<ۢZY8ΝؼGe.'O^K]7;}/ͨZ.,Xi jy7֗{J[Usl޳RG8uyOlZs\U}ղ_W|>:iWOe~֋aV+7G ~7%:&/1_[1~3sbϺvolRVt<̡Gbp[5ogS|n%W~%GJ X/2flZ5u5GlN݌S[捵.jSUS.VrΉs?jsN>f˷}CNygZWqE=^KqŬ7>Z#?gyN+O k y\Q/ڝƊ͑ԩUFދ8qܑ\HmRE\1ڥ>9}85F_=b_C>K_o=:\NՒcV=30o=[q~OrI,ښrXvrOskw\`5ݼZ#Vco0>|b?T</`t M]Gkt3M\&[u9{h}m/>rbgCn+/ol`60 n ?;~}3hz|uwQ!vfRW_vQ3k'髓P `yR<#.TO{߼Z7q}}}UsVKYyM0b\> 31:-xޓeᩏX#\yjNYb<:'an9϶{SMmGcz?ĝX[=+hbpӯOU=pc/_sOq߼gCn+/ol`60 \~2(fEj7dn< Pփh#a؇&Fnu⒫o9+ֈ|We~^uj ډ}PF~΂^Y|o\$&oeT֮Ǘ^g+v9Y'N+uȩzMO q=c&u&&k?O%o26:|c}M9uϚ]нF>5:RG|N}9l`60 ܚ /ܚ=Ol`6pGm qcѹ'W}|Ȁcg~r:Ϊe:j3sʅSźSVSsj2?d.>lLlU]7[~S u,W V5oϊzX߮o9԰ޚpnK8th=zQl=Vj7z97y5'ND'<ís:}8[{.Y.-[wEg=UWY9{8kU7l`60 .>sKb~ׇ95ZUm9ij/jMjWe̤uL潬8jԙ=׸s6tja'瘸p4図gԡ:OԪ֞[Zׯ0v>{БSwol^J'gu=#ˑcb%طQOܺjsN_ WkbZs5_Y{kW:+ZaӮ4WJwߋd|YO{zѮTUುl`6pu_]l`60 x!cyA7gycl>8&o:x>xe|b|hG2-8QM5 IDATz5c5_W38s)բ˅zxc!^s>OL'=֝ӗzc9{SQC^yt| .GGʋcq^˝c_sU7{{pp/˹^Eӯ8k~z9l`60 w6>s,~͜x~eZsS\׾Y'VƝu~G8+L]5p9S23Sn\9꫗Y y+a-cYUp~RX3z?^G]{A18=uΣ󒓧9?|39zcsay'Vpg`{l]'x˜cM>86q[m2/57^YuV^jzjOܫ pfn`~Qz;곁l@~$G><$_OX}ybj`<]b.y> o/7Eb[99i!W'q1O=8\ͺ~ζka_5C2'}?;|^`;'5٧cֽp{_i sVo-^bs=0iYuɯ<=erNmbaL^ Wx<^b{};ên^˜jn,G]庞կNcl`60 \dYc-os+b[ug8V_^r#NE-3>՗:kOq3.I 9~wԃ#Oͺm4shSn◱M]&7_ɿ/m_"qNt>|Z`hfL\|ySww7>=>W733f]WSk2N9V^!Ov YsϪ+5ښltX%VxM< fWEfb< x%%_=Xy!˺IJ5juZrj_~h8ku̧otdS>lj«\1tЭyEy/Sq_6fz'c0=suj?g3ȭ: V|ŗU1^pգ|.r\\4nuUXRb[y֟ڮ.{x{s+jnЕg"ٛ˞֦%6Ó+=+fl23 ?vٕ_.1tŭq.VKV  gMrs3gs|9=v9yAӹjQie{u.cm_6Yɾ-5N{|\=9Z{ȕcWӚ}̃8C?y&%o5aď]Pg\^ꊥu{Anًe߭ɩ[89/t&{$Ī_oSKX%sNl`60 /\.Gi60 _r!bi3ׯYv=S[zrWΧ8^rK^Ħ?@|ks 8>5'/-%0Y>pȟsUcwn1kM %:Zs_z9x[1_ wR (8u5#>6}wf58jSk8bX8_T?9䌱qK}$}|=7ʵN\ޭ5=8'Yg{O7 fw $o[WS{I z-z'5_K_^b܋ԡ}wCBzϙnn$fot쏿ss5)77^㽫m\_ъ[g|6LmcNl<:qj%he!G=pO8bX.c'a=Vxyֽ+˾ggu=#=+?=}j2Gs60 70(f C UbW XkYf]&Ϛ_k]+uFCܕoޞ^AlNr^~r/sTw[ N$qUg;։j4fW,grelsO]{j;)^':x`f}Efu60 ܶ?7~wë &:+]r=W"5U1qYwoi?@zV6s'n-1p2֮f;G۫9[ b~W֚GC\ףך?e^~#65rK?pij;n쉭.*7g/{hkUǵꢷjWsqopkd׸85gOjj=.Q?9^ӯQ:rjk}+[gl`6p E}*DlB{[ENgO4.c.{٣{|֤>6}^WߜcS_0^ZÚ\61XbZqJ9۲+Oؚj=eS|5b'w6{U|5NM9Җ ߻XYמɚX%-d^,jI.i݉|{gJrO 5bجׯx&{4^tuܙUq>֋RCEjg60 E{dl`60 sCA|(A{A9Y_='^mjv5=T[̃<{h;k=|r2 =}Wg=1=VkI~gkk|wW֩+ f|NHjXՉc-w~z?Ѹl 3'c}gH̹;0oъc&{G|Zo=I_ 0qzQ=UmpNryu֞71=.}N| K\=fl:7שϷ:C~vms-kΑSsfWLT?uRۼ=M~jW>yW朩Qk~~ժy49>99q_1kU,|;C >r\Iĝc_9Wť qՇ'y 1FYK=s{lգF xڬ}M1||{Yo>c3h5vve>/kW\y%oUpESFyzyCl`60 ܺ /ܺ]Ol`60رpć>$'}{s.jkouR?9I[ppV![u̡CNjﱯfrN^YҗʧW#gI> T+[5^ݳzsu]{dMbZF+]0.i&?{嵁o~hxrj堡zO,{ռ\TswN;`1c~Omj|WWy1''֮,ԒX՜x60 f v\?{&eラ'/*nNuItxbN_tqWY.7V[Zs~G'|·'FNTƧUV{w7Ffjώ|;|d&W5rS2fi$FM֣I^X.Os\rS?{g$|S ̓sU+ y^jW­9ۿuz`حGk?:#z򪸱yUZڼjL< f_~}fl`6p[m|&oi&W_ >>WV|ne]ΗwF-MpZ4se5֜&naZxAL/sSWeS{5grV׮j}[v3vZhdؿk_rp='sxr{*Vulrҗ҂kVe^7^9l`60d@cs~?3)G\}-xY#sUkM[ٲfÒ_rŒ+ڬ[u읚]o{mu.I kKVcmoYFk=szd}j4'G_2GݪBgƬY;krYy|f ?9|j-qSH? la_ުC~܌{i'ԓ)nz\k^E^}8O[䏝 f[E[2  P.#OKV5>5Zj;WO 泦r>}Z1f_9cJ=x^hYXva?txQc{lXpX5:992Jn',^h}R{sɣ.Ccl 7ʧ ~E+kYzԨi:ޫ捱'զ.\P)Y٣rk:O׸&_5pyoN ;'Vy:}Z}oiȥvl`60 {~V]YԦaY%58-u眽ʣWY5Vn'/ryQ5{SW6>Z\~'?Y휃Q_8\j&;992g}:ڗxk}'M-b#Xcs6bߗmS{oZ_{V9Wj;:Z5o_mo:4Rfvߪr\jok6ct'ǧvkNýS7g60 nenݮl`60c6ÄENƩ)5ikQxjԜ5jW{*J3=uZ֤&mWNWWa7qlٳpO9C}q:5\5| YʮZg~[v+'V7`c_͞=T'sj%\[Ѱ'fcW-0I씕^F>9g.}yڪ95]_o;>Ƽv[8+˥Nw]) ͫ:kl`60mj[?2NM:}pQZp86jVT^:j `ڪ]9ikVo`|L'_sk5zKX{7omūuWsfooZkk 'w;oaњ7zz:/9/Z^OXsy*G\MH/rpYgZ|/^X[ī˫u笉WkOio.ywɵ~*VZmՃ9f {p |bz]Xj~֘ӊc;,{1/>e}ߣGm^|<uu2'&\1m?9hЩ/j;qvs[2~O:U|w;s;Ok-1y5'߲qQ{9|+k&.̓qǞwg>x{{229:nzC='9 ygZ' -tΌђ'gL.'>y83۲yGޙ+]5oVNŵ늓{HV>`EJkkq~S7 fs7gKԮ>*V_8kMbYʱ6^w]oOӯrrSw!G\1-9/=;'W8BS9~'?%7gO:/k>sP9u$-8[uo>;'sr+#u9sΠ59V-k>1rj,.>OhJgks{ȧWscgl}: n ?َ[!Fkk-v|xf^Wr㇋E>ujQrD!7n#=G,`;9J\Nò{җV^Z2ޚVݭޗA}Bk4fl`6p w^ǭX'؞WMڻˁNL?cŹwrNYG[qcldNߙO٪3@>o#{Um1uO?9氞g^Ug_ՃZZoƾ>ÙV ?q>1|KX!#Z}jы?b=ڬɼ||!P=WN#ʣkx/5^7vX~Ηܴ2ZWg'eʛx60 w2׻Q fw}8-75V#֝KW9C\Uٮwա_%NožFzqZuAsM>\{YWm g\5k]O|cq,|-{1swqbG]5V85'Zk3c`^۫'QޗuԈ-Jo1[+BlVLNGp8Ή%fEUܜc?r: IDATҚvĪ}V-NW,ԥ71kS?}جѻ..sz]Wѝ f}ö6\5{Wc2'uK4;^ؼ؉9{N g[5| 왺U4կu5N5Zy\s.g2_y'Κ9ݱVNǹ϶h~<{kͭ,5mZsoj~K4YWg"v7ĨV}~nqnl*8g56>e۷Ԋa=+_$&W߹j};azf;m2w+>; n|ȇ[#|pO/,iO]||լxrVJ?&no!GzѢI/tܽ><0Z9p9ݙT#-\gJ~Π.wK/b1yZ{*X1joyCDybX쑘zM^jpw`,y9u_їֹQ%=bpugbNjݍLwS{ĝܛ{V~G~v91ljgxY .;oW#}'qާefl:6gzvu#9 wj&q6qXgy;XjV^>uћco|0gHǺU .땸<{_CmS+brfӫw8C`$Gݐ&9ziWZ֊aɺV^ק֘Zc,3tV}΃%cp.NiZM4oN+y>5[1b1kK^;Kͩi^-XYgNxeiW}V+<穾5ׂwfrW8|YVUNþKwRWշ3Wk& fUmCګ?c>sDZrj N~Ǿnf?p27rCr҇<>x#x8scN/uey^fOF+-k-9#Ϋr2jޝbZk>ۺo񕅧{Ƽ{^ Uujh~`לk\p/&=.bOշ6'ٓ|j0s[uWjoXV[{ r̾N>yK?ӇC|>Ɵ fo`~Q;l`6;%G[?xMW^%\PD2buϝ4pppMfM7Ӈ&PB~"=^3n4|(?ijڏ@KnY[ߺ1f fOh^a.9ş}{q8sךwruɵfZ/Cb9Ĩ&梷g= h{Aİ[j't9Zkagu3ɛNs7'^ g9~g?87W{ךYoNܻ[=8888OwQv!^[x+?k텎Ny]a Xw_\<׳V֜uK -#yna}uɣNǏgZ9ݛ}{rW|?lEmwNf3/^:39Lh:'y43Srrq5uU(\+rK1v58gja93\kjW:#~s#%'._ msllll8P>JwמŌ?9#Qz)UOֈ%xYͣf gN.՗׳b̠q/bRkOаz%G mf\]jCL3Z=SM|gXJCgONk5ZfrϮ x8\r[^ـj9˽ɹk۳jQc9Mt^}-3^ĵZ0{vr1888x?yNf~zٔ~ /"Π57Z8 γ5a}rj/GL+ knΨv-N+bի:ĴV<}-]j2g'uA>g0&Onuu֮b_򩵾;\ً} 7kμN|9bWn]K;kIgŷ~>|oq5\ԯjǪ;í=lllllgoϪ9l_߉Nۣu Gk!Z9)Ozǃ[#Ӓ>;oJ5©y1- /k֞ؾϜ#V2>g{ ^{^?<)n yg/c3Wۻx};ԴZxf9WU]3Z؞A}siT;`'hyWWlJf;z>^*ծco|ncOzW̸sҚc5b3=>9Clکup=C=v'͑w.|2-AP:|7ez}_M@͛f{vq% KEsj| o ߖB_(⋓S九Uzʱ}W94z<zy~vΞk? 9o垍O(gb3}{媍mn{Wǜ1s #W CjA,_++Ol; 5Gu%66ړr:9W7\PJU_0Ԗ,۳9򭕣rWߙU#^Xouh*O3g_uK͞"lk?lٙ九5/Gz5/riWz~O;s:Sko ZXn |QZ{ݍ=?rrˢ;{^Oyukq2߿llll ~>PC.f|\{3[gh~ycy7ʙlӺ m#cM<35\bӢ%Xv.:j_݌ׯ3Z߰F=bXkg8vuo]ڣG3O<5u;JjROh{i]{x{yw2ejjjW+:9[krrjD9c{v?[Yx+~C?WvC*_ޱ>~g5<`}ǹw"o bbZ|`1lZ8+Kދ*71X]&Q\{G٨$vԃ'Wv>N^c0ʋiϜ#=k^? ԘvN:nuk9s~ٶԤ=;95j┯o*v^-\֪]q[j_i~ϜWU~O|6p6p6p6?y}wllll |-!{}e?s}LZ{5Tsgggg2Q9888x|8M@W\V!MYjE[_&p'>V\R\39fx֡?r3Wugꖯ/~VV>yi:w}g6Fg(ŰNQ|k**;KtGk'g[߿Z|˙3|7ꊿbw}ԟykfwBΣVk:L.N9ŏ6p6p6p6p637{L;}?_r=XrWs"\4~ݞ\Ľgyn9jgsMܚns`y5+|{lvUu`S1zO=*3Sk"^n>RW̳7;K9{g[=7<9V~yUWL1ubjX5ƯnVn̼x7njq3:Liܻg|^ @΃7{7O!!b`UX-\ӷ17]9k*t;k:aWy5M_=9S׏=;<-G\s.;{^wٛs]ٝhVgskLe se;?9's4h?>{G Z?Z=Z{holOs7_WzUgggg߻ewGllll@2r3onyyyf~_[x1yZZxwϬsN[~{RXq}X:>H_U=E]U~귧3Q/ïO^ZkYhy]iWV;gnWkθRϟe?ֈonY[+'W_ϴ=ݝ׾_΁o=8~;sΦUg@Uwgbssr7Zͼi<3?j Sn/xl`NZZթ~r]7Fyl{WxwꪷmO&^)>ŜOkO53LC#k]y+l?Yf7e/G[\mw|jWx^vVGֿ3kv]Φ~ϳ:lll7pt8886;CB IDAT|yjs/Ni!GL+~e̓]%C8zւ1ךc #kWֈa[_\r9w1XisGۺY^}`>_36QO{N̸˙mC՗~>puʼn*vujo_e3;gn}fm[3UFűW3Ǟ c~h4L^fj29拓~V~{Cc3}_V=~':`"掵fՓzqszr_rbo5oo]ko>G{˿ .5vS~p=oܴj;ycb˫/Xga/OƕupX{Gj>g蹯w̳߱Lv[ufQcVz9?s`:888 (}=ggg">_-1(w䭭OZg;b~^=uXjo}93 Z,N=WglkMͼ̵fr9\uO+{ջ95T[gәWg-rWy8;Uޫ1zn_ֿ:lޓGl5+ـ/F|~QpW:s^~{'o?0v'yuؚߵӯbdnGo>SQZw|fڧZ+^l7ojc^Z-2m_+zygP]kldnZxbiůX+9f(scr==+GU1F1bu1W:0sS<|u,{ Zg >b k2gZ;{5?c΂}'xQ~UC/GV0i}TzƵ'W\vbpW϶kNO[>vԉO;1gEz;+ kť^=gVԇkY|Yq5ѐӺ҇{cW,VuweU_G mf#K /wY“Xy+\rvZޭׯ.~r&n8:0vkUg٘3z˯:|i}Gr_=ô#7gq;捵í3GL^+#Ōkq1s43΁{~?33f>=6gշG3s43΁{x{yOϳ_mj97m`%__ik=:<~\=t4f?;9VzCG:\#^NOƽ}Zgͮy#Դv/V-~ѣ'o-;ʯٴ`YמWZ}wVv؜Z{WAcuwS_3ZZj\ՙ,}a9sγј_᫜/g柵=[33yw4=w\ܳ6p6p6p6p6V)]<~F9[ߺ~'Wܻrg=?mwq|{9WX9ja;yj?9+X?9~{ępWŪó: b+Ns]p?oiԘ߁5?9}>s1;?>vu;/ݹї{wVW*מ˙x{?Lxͳ{z ͇m+twps ՗yլ5V1oU8_`շy1]+8ھ<rf,:3ymUÿԶ3G|u:|Xn~/9bOkgwNrb=Gu噈Z+mgߙ挓7o^brWՄQOW`<{Wޞ]=ـ;|xbVήf)4s)Vgwr=/VN5Wlm\7뿪+j^uxyw6z9Z3gg_8 ^r`~m3oM5jקXk?χk߳e;wINs95X1ms?gy{U;sX}C+n_3o15{fO98;(31W~賺;?\8`g÷<⢎3~@5j}_{ntcNs-&wgᕻŴj8W->_vZLڻ;=䴟}r~?Y}6\+71bո= s+: ~OM9jq~'<5ko?Gil0.nsת3)kQ+=cXQr\5[|ŝ yK {VZF[9կUg@,yL3iɵ];c-x/Cӳ~! m u^}}Ss#s]QcZu7O3vgǒZLʹv6WS>wgggg829ٳ'7_>7ppRA z(ݞbExp{tUgHش֫G<՚oi];qg}9W3ᨥ>=yXŃ0kw|}5=Zw~=g\`3'&[ŦYђYWs{ffkuwgycw/=cSS[؋]NN펋sֱggggg wh 9_=oNλ}ԫ5^bXŎ6p6p6p6p6^Le;g.;ޮWwtgg⻸|><}-4gw`rksn[;Z1͉ՖW|gM~fС/!~0ʇl{r[|kE}p|.q|<'1ggFKn]XKQ/O|u;*(SxsFcZ8bW}|iyۏ_p'w 8j-u!y5vnp`5{{ÝY#bf,\S瞗5Zk]7w^uQ[|X'6ōO\ZYqf^~ȅ{n\$G^lZ͙<5l%WzfW.b+~`eZr]_L(מp;N4Xn.臵=N\\qir6r7{yWr=8888xB?U>*cgdO3ԋ>W~M0kGw1sZ%o-1V-j7u饞39qyJ35zϝ1{-9g2}>\?NmŚocx^+lrےlr1;7Enu썩7oymծ?VV^mNvrG?,8=jǚ]w. \o0ݚu6p6p6p6c6p̏r6p6p6p6VbsA;z@]N>O `W|>`՗y|zPlneŬV=,7ߺi\~+[+vkzxր5j'מXΜe/5Ca':y^~+gsZ+eυ}ͷ>bYٕ\/~ =Ŭ/nb\uoݕe>p{5眭+?_|5ibk=888x?yN/e46}eYl,6[Q<~WݗĻj&ƭγ/^zϼVLkmzԀw'3g;[߳¡ooWPv?focg;m\9VYV9-?j{ן37N{xk6p6p6p6p6 >g)sjX~4/6ci~"f.}nV ouͳk_ 4ϼv\w~#N|@k_W9i|5gn;g[5]~ x1jĭ*_[C/ncq~sC;_i_jګ͗N{[ Za{ԟgıc7Ky|z͋ŝwyVys݃Ъ29oo{QgU+ϞZ͋aCeOkb۫JVu`=կNkR޹9ۘ'b-}gYU+ ?k\ϴݏkbNZ؞q7?Z{=uWsrv}jk}T~gN3Kz휵1:XgLJ#ܜڻYܱس:K=Cu=V݃s0pyUU3_ٟ5Im3U*=س?d^K=}((v^3VsXŦҞu?k_~>|Q?fܞ>_LbbL^ }WWuV_qVb~U?9kYm}}Zc1{qsbbіFΈ9=|0oӚcsmjukn=WgWbҲz9^_A]Z5jW5mQ:/uwGybծwu?8888VO|MQOxk7s~p?u_Xy&l;>텯yY#X;o IDATruպ+'xbsfƵܝ_~`5z:oc}lw柵gjcwu>v j#ymUU3Um|9;'Id ~sjh69ls\|{nrș_Y/2OsľFe=;g|^/9|  ^3/5uV3Y1z>ßg&`_qgXy+c[a2G̯|5srjxϚ&Y_jO䈫?j>?TCw9ks Vzb5ݱSCfhr~6휍; 3wR?5ĵc̳7S|b?߿179vܵ2^]VQ}Z7kď=8888x9= :O~cVZ]_r+&ayd_at-_=r[ʭN5wJoǝs˝x-\3Z}5֢-6mOM5bƫ4^f+GV,gefϣ|g>z*^kDM9qu^oV}cs8`_|w'gꛯuúbڞ K=bլ}ĭ:z}_vGS[=qc~?;?7| @0c,zaafUêi}>;1zw1y5ms\pzv惼S䍵O&n_ٕ|񕦘k\5W>5޼cg9m}˟buW98誽ʫgN Z5lkOZv{Ay]ZU~9@ܞׯ)YXQV#8K9l]qՕ35huW |π={9WɡNqrZ^ǷF ;|=s?;}{"{6wYsWZOx^$Wjv4>̩}з܉1ֻ3)=5X/yՁgܾk}~{Q9v LkƟG~Zg߽ū{5ZU9Ss`iO2?ͫx}AM[g,VMjg^(G+GxryWڼ{N9J]y槽h 6cw_~ُbz}?y{>0Nxur;-p*jв0KA:v6p6p6p6p6]&m2?Lu;jSghhWN9b^akmm}pwe|~aU_c~??6aq ڝ֜EδlW7ɛ0=RӞԉO^ENYU:{6uZ9~Ƶ>c2G{v˄k/ ʓ#iru}y&4xϯF`_-0jzޞA˜37ꁑo\^;w>:N]mv3lpWʷN{֟v9Z_v%^ϼ1ŭaZsw,5ws6p6p6p6p6pg~&iW5|fsZMxj,?Z8~mOpt'|͘zuMbQq}kԧ1^&Ɂ˵?,os8j^YtVZۻ=WVJ9ԯfcg[qiكv:'x?V٩ŷ7g[t6̗oo Ncy̚U?_PW,[YyioS~\`?ѯO{=Nh7 7bM~?7F>Gllll_ypGD^C|>޸bjz>XPׇ5vvP11PԘ8v6žW+Mfp}Y>uٿԃT~,Q\{|S+oTyX ӗc=bsNr5/W9V?qϲWs>u̫\rVov&34ka^yը/v]ǻg|^/\Y~'><0ZjO*֮0s{=c{-NkGO9\[^o~j{1^[lˬw>}sxw>w{fvŞ97C9}b-\͑Rrjw괗~q|c,gh\~}B7+Q_ާ^μK.V^Cau6p6p6p6c6p̏r6p6p6_Azxx>|ԗ|o4r_;״>W9Ko1#VP՗G5X5e,}4Wq|Y w|.a4?G._.upq&xK]s>0t}O-zqw}Z{9_QX_čՐ_]zԉaًK9wwbukWz 9V\߼3s9}jUYıgv嫥Ɯg^UN/ >[N絟_sT9Nʭb|>{=~{r>9'zF޾枱Ч}ᯮrOznqb<{kMΌ{Fonwoj[S{i[U^POxA3g>yXg-=Lk 3)%szy<#:Ԃ97z>㕕|WC.yVW1>;]pgK-sreN;9r׹G>礦uSߺ:iFcw5jj+݉7>s;ւ>y[;-r'j69ň߹Qc ϽʣQw\ǜľzpZL>9zYߘz5j e|+ڳo<5ΥrW979yGk:b~'$Xčkoˬ`=͋j?ckZ ^/5kC].϶QǏrFhꋭN_nu-.wZ8ԇSC:+ĮjfϾoiMW\M,͙nUwf5/^k\r`Zp|obOkKz_:79y3B KkU_}w_MkL=1E_Fl~6N}꫅G3zNZ'۾p}%5yΙ :jUbyU-ܜ瞾3}̶ӶxZ#_ +瑝/M9w:w58ṱτV|lllll [pX0e>VVXzڷW}4mvwSߙu΀ Wji }d{ӣfߵT~{w |?ճ_n|!./>pͷ++}Xioʬ =~"_]]o5e]g'_ԗS~}yX9yb3HwFGo7fFS\{^3/{kɗߜ{RՇCVfټYr8J,f&?Uj.oG99жi0~d[`+y CuVvV5|팟=ıYL?ς9<]\lllll ⽪N?:.?V` 4~6ٝ3ygϫoq,3ot7s#6kwVm9R_h5cľ߾COM%r6o ˾[ZoN Z|s6op.9.Ȼ3&PWM2&xw|]i-]ΎSMbs={a݁ |?ճ_n|yP+Gkxggx9Е'N9ʩ5uZ&fX{:ys69g>w69_^ /bm/9CsAlp)O~EgZ+7xuOwc: (xGq6p6p6p6ps|aXqYļZz|Nlrgsk-ZwG1ޝvJ[nW:j}wuSg_v1۷z;gg2{pϞXkm5ŬW+r-<._a‚;|(0.r.sG.ЗugRzsXzg>wg}Qms`ӗ;gx}w_wUo5ɝJV1uWWkx<+{k_wj\|dzkMԷob֘1i?kz;5ÊߙC?ʷ\1,%z{O,KZҹo_Vʇϭ>s;φuW;Fc{Y++^]}$Ӝqfr:uXnH15^r:L=}gYu<+*wy8̯j`Lz< IDAT gWXW/5g}ޝ֯zINkk ?YUo~.Yo/|?gbu:쳁W6p+[;5gggg B߇;y@'>TPXåVKLkUۇ4<o5s_i2kǙ rNYi~aO;9λڧ9br+˜y!nl^X}t7/˕vboj9S!K-,j`fjՀmΎfCWmrի>WNk֢=sN2V=?)gZW .fnj{SkZ榅9k0v^~+΍޻^Z 3w+!6* իfn]r9j=+YWW3Q'Ҹ:8s>n-@MhԀ@2Ba@BĀ9!F<%0c@xIP@@IJH <ıMן_{sϹNU}Wj{^Ƕڭz9ܣߪ='L/'{R>x5gMNW\}was\ĩ=e|,x싹<>#7_{f?ҩ/p o zC̡W>]q+˿Gԗcfg/́ޣ3RK 7yf;挵ڜY {ǵ87ӊW-Bgl60(sul`6po XFp_!/> q_e{3W=Wj??sS+InZUk2~^ȹ^_P!;NqV ˇr參:GZs3>UK+_6y3W-<1|pL[=3gHn8l`608DG1x}<|8C9p* Ń!7oSw̥Nog=֙s.|/4o|⧅c\y֨N˃j{Nʞpԡ9 B{3VLKmpҟuݽQZjBgPP+NL-kY/x!NKRۼ{ǯhcG>NbւsX o»o]̒=%'3 f׿Et f؀>0`'W KzRE>''lwsn_ʙ-AZurucj撧M''./eE+|1fq1mW&F?c,1`9%}SMsyZs>Nc8su '_ޣzZ^_{m5W={_?֜kgufqj8i=<9b:g5^Y|%v>WZزyn؛CkUZyy`<>r2_{5v60 fױw|R{/J^w5uvoN2X|C;qnb}5liZuK ^r[kgNk.SǦq;9ȸ{O>&z#wsT}એxN{'噎\Sc,a9yUv7cy7O7jiYh_!MlE{c}C~ը1<.5b:re!q}W^vis^bj9kSSGY)MӪi媯yK\gF k1v60 g2׳Q f؀CPAy!պRSƝ\%~rȇjˬ_'A[͕ZpMA:O<9^78+3|/5OcE"C.sF&|1<Π}9|kS{¢1`ڕ_k%>6g6sp9{pPG\sB˽g#x>/ٷ֢#ǼkN\p|p.q1c듏n>PI~L?əּ5gyi4u|.Տ}e:}bf2sޓZZ8sfl`6p|OOo՜=SwU =}L~b''}?;CrYj,k .O ;j~d}Oj;#V?>s1|y ߘ}r뺸x;3}gX_A3⦆~}SϙhdL=\5Zucs34ͥ rs?΍&{wz }Yi_=lq%k~rG,y5G"?"n=L<{/9G_~̶:rڎy~݁>;{*ee:~%ol`60 \ea60 b>v.M_[=3~Hn;՞[a7=hfqZ%3#b顽~A}}!/'s_΃MjW;-9OQ͑T:c־'O -9~8s1>}Q;sj'?p=B}b،ϚKm7c}46uK{Ԟ]mT?W^:bZyښbgv=z[j\s.W+ol`60 jҔ\=Smiޛ60y:|AAj&~ ۗ!'S]xД nbXyc0j+铳fDr2GS϶#wiaSXNΤ9bx?by{C>|5G 'J.<|u} NrCM֦Uc."5isY÷תjSOj Yu#^k,O+VĪU/W䂉,:Dz19Z񱳁l`6p_Ol`6pWltV8 y9_>גc/U҆5n/Ε>Z;F%kM9bľԈMCLeXz?`O.éqŲYN?`93M}|=jɫGӋ̙gg8C;<{};^ǧfl`60 .W=gKGv{\Γ=zo{ͥ:!3T8շ6ybuUr!TGί\Ԩ/{%YZ=y?+yƙe>ۊG\KN_||z==&_ 5E//7^2hbk |O`pk|,8W=r&m7\x+hZ&nolh1kV3RᆳMMu=9Wjw%6sY OCg`Ճs!{rst=*lhSWl˺_m99m9:Qr.k̮lu19S^˾OlMh>ֈ39\gS_|;A!sػڬ÷ٻ%VkV,pzɭ>8jß5yպQ?4T?@w~C'}0 c_9X05vt}3oXz'ɮq_U[eׂ՚#=U+©uWajU{_ߚ^fl`6wUKi|7Ƨ*޻V9~^$yWmS~yaX|~vh9K.Wbb=; g)υ9SS_Mm婇=|uaj3Zr:rr0r4_q ftgl =Goߪ1zxYs+sceS;gǂkyVNu\թ[q_nGb'8?JT\ ^|;܊gLb\j۲>55YA/Y^^תg~rR8`Ĺ#5~~ Ǔܧ+=R7}kC\j]jzZw0/,Q{$Z0̡Sc;| #ջ=U[qq%=厝 ful2A>%˝]f>Wlڬ]ù챲h[+ϞZ:rF:Θs+K +ge}mɝ:u;egXdjs|^תgw&-Lo Rjw?h泭:J6:#uW]9ͥUsa=Vm՚yk95tx!{ԿP4?g6:n"xJ/wl`60 \ea60 @C)y|He.c|69`Z:33Glelγ✃,?=]+{=rٚ m =V=WyuVV*XVPfW.kOXglz=rٚ }vt3Nko{# ϋc}M\MGGݜE_NbeL\8y-\.]p?X+/ݗ=nj>sOoi}$9gxZ|1VWV}b1+S8=훾uCmΙ3֊c;,{Syop'~5֧V>~/ ff2Oާl`60xm^ꁀ||><8j| 7U;}0;:7,ԙj=W=bXqc|si>G\[k,k/'p%Ng9gl^Zk{YN5Y~ Oڋ8/U_ SugjK8}byy9s6{ ԚCC{y9>G9Գ^ q~ؙ}pjc\mKbo6N+{$VeuW1<҆[2vޣX/wVn燣/O]9l`60 ^{|=2Wߗ2GjVSCz*qk!'ܙ3K:'ubypclǷ6ybi咗9]䫑yCVk߲5W_NZ|D ֊cý O;w'uկp[պ3ps&&sZgA\K1:9|{ȱ>jKkܛ>3:R_eعr_:ҖՂmd|X/wgj f۳;?]fl0rY|2|0x{F+_Pjʯsd?3<~W^*y^מ^+gfʡQG?dO|/v ߼:XjZ`+_KZu\W\Zzsl!Ǟ@>W#9br^[|SGl}YYjN,_֥~9;_f\_=O_ګqmWC~X3g==R:[y9CM< fn|+~SQ3g}''}OjfbX}8['mj}kOy琛yӯ.VˉUNQiٲߋI=9srfO\b$u6|Ozs ? f׳Efr E|cYVN2Gm^S79~i؋k8N/quIqΜ<}mSԩ=h2<Үj+N{_䥮xbWymDZGgA9+F.1w<1^Xb>+N_Ĭf3ZM~Z8OlĬ˞[:3oµN ,s곕sft-19Aՠ..V;m;r~Skŭxq֒xZ8K_؜l`60 |_{?=gY\wk̃y''}k2S^5==:v5{5Sk:jgN 6k\Tz4WugU}V\:yՒFnZΟk3V|EC:rt'OZOų-}`)mRH*_ܵ}3-~uκojSct'~Ǹcmb[O]s/1~⩙>z5^ĜVޜZ[W9hO]vuւwq`EbO |l`60 \eo<  ԇ_?[`<:Sk|fn˷6s>9gN:[nNL=v=Êkjr֚ӂQ˹{zĒg.Պ$8gtsح`:c{B#5Ua=$O8ggW9}G\=VS>q@6yEAC_F3Ա/l1k2skŴ!5r`}>9Y.3WgI*N=t%#_97wlEfl 7Xj|ޙkk>xRculX7gOjގ8~b[=khA 9:M&s\J{K3iW:PsįOY9cW~ʽu6-5K}++Oiiy/1:qrWr+gC8gZy]!p2aScj>;X_/I=ݹ<[& Iw^,uq7ce]+?gL?́%˱\ɭ9k+'--YqWr:Xg_scgl`6p+=+=5i,?7gΪpV3;SMMo9_Vxr.맶tZΟ|1*n~j>5oG7O8#~`=?x"εwϯ})9bpay]r&8΃њw5>}fFl+EWrrq췚=uO=99uFr٣'ީ/_nˇYxIN[~"Vfl`6p{}~ &N{ ૳SkVb0Şz~vT[}W9USS:w쟺$V3zc?W^4N:3%F欗N#1җke__SfԷ<5a͉gInMb=g[0wYwg6_7'4<ExΙ{Oo"j!6QZ򌱉9/~ڕoUCq&ٱꉩ#Zujr8ĉ7sYa].yfo`~Qw<f]>sՇɭ?@8|0ҬS=*m>ӂ׫{7̚_rKA$SodZypclrwk~Y}y. ?Hʼz{aեNU<{9ýoǞXթ˳&-752|5g]z|x]szp~=~H ɩ:ýA?԰7s|xW$ns8B}jNgWaU O֦o>1r5*ْy̏? f؀1Gޓ>[Yb\f-Xac7̓{3^-9sSrSܓ[/O[>Cg/?d΀1ٶr탥&uj {Kԫ>7瑋կz&֨CL \c~#q,eŏR.w^pՑJN˷z& WkГs;9,Ľ'nώc3F'}]Zs)wˮV!kӗ[-^K_Ú'G nB0p4y͙ fۻEۻ6  l=l-{PuؖeUBZg!_}u̙e-:j4s88ubU ;6:q{[Ѱ3g֚[!<H.zN+l`60 @GeM~u*VWaw^rO?}Xk<\m_郛Z=N'5؊soč/+n햼Yw6r\sN|omr%/1_ ǕoN>TLzXGn9W|k,=Ōk[Ѱ{1Ey|cuUǼV|3v60 f2WQ fwxb<{>|Y[y1;wq7|&L6Wf;C+kKĬ%fX[s+\ԢwΚ>g\juɓצZ[Mމ>1Z{"spΗvҘl`60 6{޷Gއ^l3jOW3Uxmn+]뽐s~1gʜ`YC8&%~.g[xsaY'n]{t*z֒soOgwFLFmI]9wxGc_=v+OuZqx[':NNL[g%UOUijl`6pu_]l`60 ؀G2|Y|=9]uU\b{;H/r2N] 9W΍~uy/nO̖sWNk=Zjٶ`l̝Dlif|VxmXj=5y.Ҋ>V?tWb zU<}/U7-j'\}{>:އhW}um{\7W?$ܚQj;/Nq_{f-0jwf}t+y̆Y{K}|.4ط<-|z=9|yU &3czz֪rozh{wʞ]<9ê[?+jpk+npXz[Z^&5<\]pm駵Obkk.Eu.9ާqޙ[03i+YGg[2Ƨ3ǹO.ıRc϶ΜK}|c}gr?i3>8+gc9' UߊES]}#cO ^=wc-:99_ꍝ f_ٿaf}d냁5j_qmk9k+ÓA+1|151skŴܲڻhqL,~tWkզQe.YXS畹쥟y}r]^ X7+zo-k%}|Fs'ijl`608w>m'f65j_qm^i3W}{cK-ux\bOWm?Ͼ+ķtٟ6/j;1V߽)gY w}'l:8:r~Q}cis>5~g2QɩEgR5ez녾϶րq8}k8cp >1Z_&rk?w+M棖qڿ谬#/Gk>g>̥%Űԫ|[>'#}Vrծ1S䎝 fsfl`c>@AZzf>65Sps`+fxʇ }8ar̒ٲ?V.W,cg-F~֝69ڙ?w{DguG]WμV^KSyYrf0cjjtuMk׆$Y },jo6.?`{ܑ9W[S5c)iQ#{;x}]t8ݜs&pܝ tWj>ًd.X eZVV2OVlߴ]'yqY93l`60 r{X|N:Z!NŴjsz~_Nj9lEm=x]YjULؕz:3V_V|u-~7YrfrjΚ-]scs3oNs}0g:byZvkwYރe94^PCf~rɷ)}sp8]scSyjwNpC0|UG=p/A5'?ډWpVdnAo<dwקz>|˯fy_9o_Þ f+@}Xʃ&W-=r>Z+!ӇcC7!ga~N]{z8sΘyt=']]kᬎ=.:jAȞy]&ncMsYoz[ܟ5ܟܼ{^G˩8|5ozs1tz9OqZiQ:Z/F=[9+TL)=wVs:}V{]ZiSuO~>nL< f[@miY>=|ԤΆsy7s$'{g^޹6uO?lZs7W~e.x1zTٍ,} ';ge}ZC.5:5ժφ1}n:|c3|5ً3XC=3+|ZiQ:_M9o[9y3WjkҪ=9Gn+Gzsɯ}ZQUZ:f /0gwPᄏzs`C\x@]W^Ղ~ց{%s!f\&|Zu9䜵>UWn$eC<վ/uyYuWW[]+yyPwf6z1bUj+wNemVcZ.ߧ>pRús[Փ5`ٰrr9gmĵcSWN+^`{OS>sfe6Cg_tj {#4V#cSsԼZ]opiu6 i[{]9'ZG. [ܓkQ5;IVúcj;~r9ZScrhLY~lkWŌGGZ9WwkS[Gދ||_|&.Ր1:M1NG zrb֪w${?7_"/ ?wo쾵Oǂb϶%g9%ْΞJ~^pO^,U^Uwoi9WrS,c}qb}Wؾ[fo`~Qw:g~3?3׿_O|~YYϨ{ @p&zaXF=qmU{uNe3zj`9zo.X$'-Zz ;fΞ`O<3Ν.a_95`8}3{EV,!d wuj+D5]~B흱M>G}ԧ\lqw y/ԉW_MjnbB?9`yn|ys嘈/ȋS9Y~msq 3c3偓= K_sy3'V<>9t5*G{`wGW#f;  yk++??px d|á-~Ny>\~&ogN{K`yQ300sF5O9u>y՚עѢ5Է'^{;wغS^SKM8Vr%>s:+1V9g}Հq5#^RO95=7Vl =S zM9O|4yBZsrgY=p/|kc 5e1ze7K--ԣ^ōɣk-wgu;?l`60 \e~8xFl|x_~{))}__8ox%/y3~&o<t;.ՃDI\1= z[ٜ:*N G+X΃+7vεw5O)L·k۹jcaxӃ\&.vv}fJz~u.gX'~D<4䁫|7~ĴkQ=rVk1b%Ϲχ$N>1Ϧ{]/u?jL IDAT[p˼xM<^wCnű<ésJ'zoՇwJZkl`6{?ǐ@ qïA@{KYW<}{ZrjO⊥VR=IJ9Ou3u6|5m|'{}gT[ͩM̩<\3}C}mgu~~Ck?,G{ ~O^Ϊ%1ة3Tq#5s96gHL_<|3kÚ7p]gl|lZG{]j1Oű1e'~ª Q=Q,w3w+~K=1N<'\Ų^?|ͩgO5εԺӯkk˾L[ƛF+E^p}Үj}ԧǹjZNC߲كv:_Zu??KZG̿3a&|rp;53+uszY֤^{MYa_o&'h;/Vy\siuW[ݗ3a9Z|ILG\O|jsZe-}:fyS?S}NO,reNQ<'^G[wZq{K-}xˢW^:å]wY֘K׾=o?|W~--7g*OGٟ}꩸]gv}l!,ZUm0˵zsYZ>r{:ɸVcӺc;G|}jz.sV?ւKn/nn`9Z|'G~Grg=YOșOZªg__>|C!N[cPSLvrڇ"sYnQ7<V?ϘڷmW՝0r-FK.&Gclifo쬳u6SCw/~a~w}M=s۳??>|7}i6]f;f_c^d6pl~7/e^<0xu+G>}wS-ykn}8}Ԣ塄zG`>? 𠿺T͸r{'J'gN>9f1=7|G|Uy5ѷ_;uԵV=}=΋7^rGZr7)Z8z&fZ{YmUoVsx fO&Vz,>^䒛`b:E?SX2'ZTO>$ cA\)Ւq9 <Ç7Kc/1@^;^^ |as3gb|Z{LY9yoz쥯jű||p?%v|j\g9;uZ_Շɟ9^oo ַC?C__:{.Y^)F=xO:h>zɫ>܉ꪵًڌT GVV\䓃O<3<9#Oy9ZY8c[Ցqqbk}7N]Õ/GfogHy>g*1#}Xfs>%#|ɾjB]gI;̜"3Z\y^"wc1zɕ}3rPu☓[Q#I1>3UZ[ݴn|5N~b?X}tʱ=#gX8X5/|jlis{?Y=&O1q ycL,#s{6wݷt  /1/ 2s6z">}|ϓOOH_җ$6}0]>\>+^cyX!>zZ'2N:xu꫁]76q=`!Ƚrjm~2|Q̥U Ĝ}95܉A~#Zbqs9'~O:6;<}sc97'<z W˿iWPHμZKsZn}hշ&uɝ:5^^R̘:0uҺ/8挱a/sRW?4ꝳ%T9u1٭΂Ξc]3wc-}ԣnky֯t3v=Κ=NN<  0O8ysy_O'p& [Tx=8)y㕕Wm壿֙2N9 ?[&9<UpsiW9kf8uܱ5]9MqZ| \ܿWry_ pbq,#Oas&|:&N|q&iufql^>8wŞܑX0jCzX0K2p:^b5_Ȼp9Z}5?O|=J/%-Z4ݡ}2o8h{Q--p;ΦCl9,V>98WS~j ػr}m:ksxoI_=1⊙f<֞ܿKnl`60 /\li??j`iwy0x!7=yG'Icl 90ܡq|qO0ꂓxcGjS\8s{Q i;|95_YuS .fб5r1O{rǦ_2FG3y!w.}kaS<\bG_\p1K-s\q465~wVl!Ge-yԶ'6/5萯zֈs/>*xoYq|WWt'o=Ɵ  l{^򒗴ٖ_vWu_u-o@n ߷|OX֤o^K_]mT?9$Vp|\cԡ]W7I>i<kLIbuƕK,&7?_úy2{nZ?;׋:OCXf[]SoGsS#}w38{܏|M9ޣnIL|2?>OO|;/{ï:Xg|gH/5Kj$WG,ZX.Z|䉋zrW6*gK=Ҭzפ{3l`60 \ev6xFlMoz>x|ɗ|Eÿ!"csy>(T̸>8@z̫j>ZR]rOYk6z>G9H|{I 7zzךS;9R1\yI.~^nvȮ:O2Vך#o囧jS[{Z0.~qs{Xb\o.:Ĝ:bs>l=K_-{R+c5r7sK>Kg:3V?h T:fJ|>3c&~G >U݃9}1Һom檟=ᨯsX_zrFsf@m+uw>>Y:EnKw/{WV2 }K .2G;/Tn?mZc\5܁?GgV^cgW\|~r}w~!gŶlrM^5Wյ&c0_|^K]Paݧ|u=+{]=§odr9?9}B}'}18^bO8V+0vSx\ ?`p1%G][9C//9Y N챩XƩ'^{{߾&51:r?cl~{fnp6 <7𶷽8&C/xG| tC̃&Py<4@MN>%7;|gFS :%v/Z΍;~"W4gX{?zg_P{EsN\su\jw*99SMS+Gnar;jcWYg_Wj禖=x#9ku.m 5Fӣ1VIjOK^i̩r.w%.C}~rʷ|8Z|4{ac](>֧}sOM|f0,f6kX,y{jǞҪS-n>/j?5ձ78l`ϳ-[zы^tyo|Or?y<94x/:rz#|5%e9oa}Z[5 ^e|uxV yԦ.T{p/΋oM\W\jg{r1_:NY?o\~ý7~7Gp'ܨ1q|yCۍ=nK)7G?YGг;<>8sybZ0gNZ=sw`9+~Os3/'kG~YlsXj1'uĪY9b%{\/3COt׽WKKgjޱɳGbhA|1+:p7!>Li\ ;5k煆Zgb+ܜ|ל?H$7k+{`<2?P:3G WgF=$& 37bF-G,KcNn[#Z`jEZy;9Xg1Wkr0b/pYq~uZ:G֘XƧ|f񂻚8`ٓWN}עvZn?֑؛i9{ gS'7'İkɫFob3{%zQe5أfNL?5d1,8=Ƀ1%?癹}C|ͽhg lII+7}?7L㰧N}:79V{9C`!1Zt]fpyia b7LEC;hɣ;~5WUO+fZf϶:zZrWqgC}Ty-8S[K.kȿ?mo8| UrxŋqrΒ6g;O{!g^,j3W.fWm93\q~eoLO$V<9j3^YgkU}NN=KKlZ{[ kϿ?9~8j^DOʋcW!{[ 'k&v =3L͌syG %g^+g3o>=yO{c,fOe`& Q{ws{nz]:zߑ>?_]&~oosm_k8`>\> ~^?ʇY~><۲sH8_r51|sy=g'vbO0j%o=;\Z|zlc|k^Wk׽/`_=s67__7U~-܀Ϫ>`^~o=B/}K?c?V3?3__7?#{lg[.?|?~js|_}V2jI{g5sY=>'J?g7G`w$*??5qn=rW|ɧ^yQڡxNYü^[϶oձC??:/Ǽ9U>y7>\<+\57֊k7~^p%_ k ~wߓpVIp$bY\ <_Wyj?RV[>6}S{/>tz{՝jIrC`U8syR_|ի^urhWsff2Oާl?$5/p~ᄟk=xv7ik(wNcf8~1?<={2鱁ο}w[n泪Ϯ1/ ɫd/ p9??6;` mF h=x?o?s껏7zO:> j|1l`6p_On۸foi__7qxJ fl`60 n׾79{wngխg[?_7:|~/|aMO< fl`60 vo"ޟɟfOeO9߾7,_ʒv~:xl`60 fl`60 \x˿ֳ-KwYV϶/{ˮ}i0 fl`60 fN``8sx`E|60 fl`60 fO|}߸_ ; kꏏ7QQTAJBBniFKAANQ0A1gwv}{yݙ3y\Nif#ש^Ru6+,R:_|#d.ǧf0$d)>?e\z8K3<4:(" " " " " " "0HQfxէFzB`M4Q,k]v EQ7/8x[#" " " " " " @`i s9g+h^{-{%^;" " " " " " " Ó'LP5ݕ'?&ppE>O詔OD@D@D@D@D@D@Fe:o[n%kf~z IDAT&`p}s:T@yhu?צ+:ꨰ;뵧F " " " " " " J뭷^vO ѣ83\okdߏu4R }_"jM5_7#/| 6TxW/˱>qf[W^ c ׿⻏w /~c͹7x#.G/})|;ȿ5}jXu?OoxVoge,]H` xꩧ_ׁoYd:넱W_}57ҏG?YL}?OB55 .x#Pny2y8nscNGJi|_2ҼNyψ?~ ~Tz[ 3hޝAW2Z?/4r Ku~vHy!RbxQ~&`:&L6yb饗.ӏ'g'?IaƼL.z-'|⤓NY)zBvF5&M6٤0aFY&(Xb'l̫ȏؤcqW{gRKL2I|;%e8e7-uAyO?tE5r 6Yꪅ ;T=f֜wyneo7ŹfxN:ߘo"m⯸{ &}{ű[#;{}ce9_ є;7Oz~2/`BO0'0+]t-_eU'x.74%l 2[lEa5f{1Dxr-WBsujo:xNj[?l q;y晧Mu.61H]G)PΏ~„e5~SVuAn(fu֒-8S-&(AIF߇N}_4tK]5\Bǻ8Xq~nL,u|@z?)Я?P3{߾`KDw} odL$%\yrNY|r fSN]Sc{);lg˷w'[{:}GZhmjhDj*o)حژwP"魾Qgyq 'e#O5c(_TrZy'dwD@@Kӕ Jӯ-UirN13V}Y.o 6" 0A1sāx㍛ PlO8_[uB/Ϗ,Rw֕=hS/TL6de] D rl( @8@cX72H'FP)l馵Ӳ/=-?waYr 8MEP f@Ӕ#,χy(!@FYg8W-iR3ARN^zi-T(o. }駜r8dʿ[wܱdD=<7~lYnRRSM5UaVuً.&Fz.|j+BV=|y2Y^|r„-3+c) 'PN7K'&\,ȑL}1N]@1pXc|Q+W)n}l}1F_P0l_N z@Uwyx;iywuWmY浭|Ay^`Pg|Q^=1m(K?YQNbX.+')TȾy;@Ga_8'B# B:6JJyʂ .X^}ڔq38.?KF./B9U]@ģ0Ȗww_WDpoϚ%E\Q뮫VC}&7݆UY50wL)@*p KE KDI|wo\(q\Qo_2+0rPwa:m&@LZK<ߓ\t+ʜr)CӢ %x4Q&2Qxw!Dvk:_X;O0&Qw^n|Fݽa0ţ+6EQ߈}PɍP!%&#r%cNrgIp}~,E<Nr~~' jjb<Ke詡/K6}c\pE&O&|xx(AS'@ۍr߉s=l39'yӞN޸ y&mh#qk " "0 !ޟMtnWt07Kx'`nMel זa )@ ⅘AVE 1SQY-gf%%;s1i0 x=sfUؒgf5^Y|`ebL3y2rM! q[Փ"Mv&ٟ $FC@A %3-҂yy)ovc~{.TjYvme[ΥӱVf[N4ս00s1OiϿ=()x;1V,R̃E޼.wOwy H06ivm&]Q!x}TONY~:[f "}PƱ%bgw򛇦RY@clk^iJŧUxF!I=k9M~ޥxpy;܀,yOaD]WU20'> ^MLzoiݦ 6W_=Np ^5sRju|jONk  (=O\QhbFc^QW\ѢL9Mmti50)P΀)4<(m WU%˯GH[oNi[r$LxH /'^z饀_uM](=~{C v78uŻ0t.MRPj.PBc6F_ƽuY&: Cgu3۴ 6 *_L$&Ҹ4cIz54 ogÈ\ew0Nó19}8>*c9zjC6ޗ.¬Ǘ[;6 sii Վ# E1^'I4 䫚38cx̭Ӻ>_<.U 0`{sJ|pV3#.,r^/, <i4եډu=qiii=y<^`"cmK+ ikF 48z"ǧFZΠn@WI}>4;g.=OjxO_}<ʡЄks瞵8uUWS4)wIҸ4O.4wxD=8ִ+Hy;iI:֞?&ertlT{˓ȹP}q Mek3 s1kr~o?l74.C>zΪFnKT;%OȽ?)=mLm~L]ǧ*\<:VO5ƇUEfYz j96KX8{]v%*rxb jHsOv_~O]t +& 1uUnKwB{wK1^WML+OR,rѳ{Kh%fi|曷PI5vdNiN_E`̘] +>`ћ:oܒxud&gah}rYgw߽LvY.qi:!g˱Bsitl T^"=0GSN9EQ&#i:>t)צvƥy4MJҸ4O5 Ե9rFG Lz1SLQӺ(# O-XDr|8$q. 3‘tB~UOZX/ :k@aIUצPDŽ֬'|rg6z%qi\A9Dcz8rWǾIRn{ ?d!>]0! uG/td/JҐzFln4ocSp)F &WZiX}r\$^W- Ʃ.sFXj]\i0j목*k%jO?hDEZ F*HӰ]YT%>aw@ܴ7 ;*U底VSz6:w2QWXW'SnMҷkZ* Z]~<&2Ft\K>j`a w]6V=yJOM6r8{[=Ʈ,wA`>}9ϽǪo/=~7ud/Ew`Ti{w* x%vOg]R=}Dg&Bʭ[4c^O蛖hxc>sqt-DW믿R[Z- l'GO_M3|G0a)Gm, )6Ceism4? " c<ʌ:"ڛtFw`{,.q;[,btWH(<nĀu7᪋Vgq\zzi}N\𶐻GT9B# (ךּSZX `2MS-'Kߓt9(a;Hu!pmiiW'tRޠ,VM96{\[K!i9F$"PÍ7Xˮ5g)EM#l>•MikUZoPOSRަ_뵧驫:ojS)Mm)(-\;İ{ghzywc y~qrz\Xm% x~K]1eJ۰?" _Bb\i~AҸ4.8s~ FC:TO;wkKM9, [v:%AS+շ~;`·%M#|lK9F]kzw\ށԦk/2sO`%Tuos+PmSx ^6}v˧c" <ʌ:(&3\X~_^DZfB?nY^!21J|sF1o'XgW.qY̡AX?ΕqdMV&'Kx#b\P͑}zFM矏QzV[;. 2N<Ėwr8=fyɥRFxj~t3 n馲/6 MJ2^z8~{pa$L>hqUi|q_]W;7U^@X-#^>$~Ýa +<@kcU^)T1\/@ޜW^{=?\r쪫6:h9&wqG?m 7AU%`[M^ VGkan sז, SilOz3 ¬#Zә6lLaS-l :i|yz뭅y桞vavml: QKUx*Ny0^?OӨm>qNxb}S8@,lOdUW[ sT?Gk/KX+`v5֫hIf~r~S#(57f8z4Y{N 7pCLnq=&ֱ[g? $.b>1VAj:^sl=`%[,mjs"mq҇6(. 'U6``myukM Sӂ[mc?яX l{V6uAP/`@[$,&xܫ{c\9u+\/1;k-(u5 )[Dr,&X.jT Z3!cEQo?y//~n;<z~J-iL80ŊȔjc_:ci+`qOۧB?,Ē3xkLq'<;^0xn5`I;Ei"8B{1eP]dzN]w J?xW‹[ՀVZ)#3SRF,XM3ZxYfwnñBg^(lR=؄U>;6ёe'L)39(ޣ盓cE5,egY59m:.kqۿկV?&7*w|{nZk= ^|&qxFw! 3`,50'|2GF9QCg:x仂{;gY/qxToA_N]"|5>ŨT+\^<^O3+1pZ˴xyg馛VXw_CȋUaY9Ƙxʌb߁HS׌ 25Gd<&WhL_"5Ü86ɘ1.f#[{Zcc$|_ㅈ16#u\9FBiyu{qƉ8#Gey8y_&G߀`J| PrjM6٤ϮQvHI)OwGW$" 5uYjx,9묳>ʔ٢dlL.ꖀu ,zm[xǺ-JFVU^W4؀c^X)l-4[6^}L8-)g&˲z)#3`,,{yYXu]cy* fVyo>G[Jc~@FO'&p*68/wݮS\+L8`5];@”ϳߔmX5ϙb &dsm2:7%S ;뮵^#^C֓MPyU^Q6e<7e6Jʠ_(=mak,{`RSrImA&cSLk3HVڴ_hgryu0w3.7T׾1_3Myށr]| vL =Ǚ/Ͷc#*п|\jS@>=A@G{c)7`0ehm˒uѢƂ:Qs@K/HXbEk.ZtSҴNaƊke4l/ hyQm0`툅 kv I,\x)Cu]iV8Xt o'i/ ^6=O>"?"'>f0lVZ),c x7_/"eRjC?υ|+a -X&Ã?zgqF ?93<#]*w]`u8"~N;5\a}bGD@D@D@D@Fw^kdғ?ag}H݁\_z(kt I'T^>pEqG_LE뱯ᨣ*_xw ~yK?.䒰*_2\vek_֯D+Rg;y/~~#ȣXTYT%C+"g??0v !ϩRE?3)`!HzW>Lje}7e;,t=/\ׅ~:u]ᩧ =d:_K]^xp\x;ĥ˖[n{niM7];3V2d.0CނܥS@e`Ĺh(,4jsL?wr9 ;_}\sl, t.ŋXO: " " " }N`uA%m=]v٥0Gy?Wk)4{)e)@=\0!daލL.{qUWҘ߄F _yeO<-#3/J1d|y.`/LW2Ey,/^~e:¿\krRsOcZhmQa e~5Oa 0pm~/gVh+{[-PXq˴_SD*L^0asLcfk¯o -s;ӚL.tIgJr 29昺dPgkO:™5YW6!-ez\ sn]ٙo S6xwkuŔM!zꩳe08 X[ouaB\6P_&fվ Du碟L& SV(sSN=5}rC)bF&γIo<^\s5mmBXvesx/\0wiEfDR0f̼623 M{_3O]8C {y*<̺"g-"0Cs,5,nEYGy' 2KP~'pM7k۽ڠ|,MVSt7Xr1kN,t+Qʭ؛{wX+z,Z} Xae,3MzW^9/mx4Dy]`'ny(Z#kF?&Zk=ܘX}y3o|9M\teXs:'@q5ǣxoG16=7Q9B)n\xaKq(E14_0}^ѹ'5/xz`3ΈQe~ C5I>L౅1cdui ^/\8V[mUF/$ɇqS{ d_6x x<0s)ʘ| 2VA'q*1\zҗ_`s7%.D2`3e&j6j֞7u 3[<]nYK^h ;c馛FE1ag.ziBeKuqS(qk7{Ͳ8<ڄdٲq"9i4-K.τk{m&[rp-q%O3xwѰƬv5[yh/[.ܔq,۳XspM=. ~dzP8ٗ+C0/19Ѥmݦc#2eKXbej)ƨuq2$.KX~) ϒ,wM`k9&o.PFUei͘\̐l0>L (&a,Zve8e!02cpO,At>c[YBxDK] ;ww%eY y/;l3\p6DyɊq,;'g3 c[aAI] JS1u⤓oGe`gL,;kcwo.5\;$0 ?*C3U/x:@ً5]%wbfsׁϥa-n>'%+ͬaA.3)y8C8꘵MXk2~ /peL>eϺuA[+Efy!䣍Jh{նP k gok2P1%jaiy( [@$icFEH~Ɍ gKtǼw /<g&i_ݖ crF4nI'FJqN?Ùg̻DS}1$Jcd=7{<-{ Nxwl92y)sw8<U\+K!esEc<730C0O4>l|(S{ (v APa8E6eV/&W_}uOuTr@e{=Q%sJf%@/C" " " "0'{nTs,c CBٔvq7`K,PXtEXrS_o{g` JN@ɀ_~P c \,U$4o'fC#׍ uG.&t/:5]IoC,W}|%RI(t MkgwC MJ8C)GiE@D@D@D`d<@g{J$xPfq6ƔlI]Q==N?e3e,Ͻ{.|O4D-glu] bmƁ2`J+J21YSI'4Pi[o(oF<х{J(ykiҼvZҤ\p8zR\.=fQݳG Wi9u K&!Mj Pǚ?iT7nS(IЊր圯yC.Vx '=*ZX5"1g /\,5~):uHQy">m({ jKzT$&NCNk/ʺQ'?"K^bP a^6~'PN}lǛQFiC=M7Q` GXO,OLl}L:ue'#(%0vi[2F@r\9rMb.=nP|QI&O30C{)saWtO@2ݳRJcFO>d\6W:+ΝK7PIJbIq>[tW%&pբ e6lqQ-\ó[jNM%#Ȭ Xf6Hq}75N5E]4FSogqFmRŦ.b-VFJAD@D@D@D``97߼<^L:l;l4YbIX)\uUMo%HȸmJxeX.۾::rcdg0*j@\_|$f1'ƢOحH@rP&,[TσR{Bd"qP.QKrܻb.vdCk4\#̺_=0/ ⊥$ .emQcUW]5Cʗ kId;ȋvq}_g &t.2o3KyCmxZiq[;C[jTik 9a7?~E@D@D`8p]ݛ">HfPPdI4{l%pSX|c4B1 .CZ7_T~Xc<[R.Zhvy$4)E_7RGu] 蚚LxD g(!oUȀ0fl(iN^e(`%\xa',BKeԣr-fZ<EYMA8xʫmB[I+mgvw.v?(mjQTI&|hs5WT|⻓w{L$a>9ꨣ&ov8?"u\D@D@D@D g_X@_n)c mYi{o֖a2|׏NNqo,>aVg؇rto SM5UwiTFcchwv.쯻aer*pB Yc4 6F?-O# /='esDD7ck6Nc93&XtE$Uw}el^fG]{彲j-M9wX* YE'Ë0sGo2nTW~N;-,]iwygTwFi[D@D@upD@D@D@"fyTؠK˟MfRؤmv5~i-̲N_y\MR؀0%b'.zܷIr[o]*ty<8cěeg-m2'>x^S)L0Qp&,]v\іyMhXQ  .LT??W^yeYM <40 6^YftܟhYr,j62Mw{` &R9&+%s碋.j;YR&x-`q)L@RW/%KZYqvE0řȔgk8Ҙ*̭qKHO0syܔyC,gDQiƫ~nSL) g(M~[.Rw&x)lƐ\ws1GȉǘG0zK5t#3{9oK2z7csלLA@ hǼw%~8z` Ŕ}/y93xe]ed&&L0l!cV0-`A 0Q8/iy(]~fι2̃C"V4)0PsWCiBC|NQƬg0?GPz_/PqP'z#h(Cb[TIeff2ϐ'T9)ި N:iu%pagy@zMVx (ʐϖ*l3P7)ʘ¬3[Q㥺bUNQfWPra^~Nș*x[0i9(mp_,wgL NsS<+PB'U9Ie$sKS,0EtMy׮hqy,0 (0fɍk) Q7oIkHTT0oe(b MFy#ӖͰez 3AR.tRbƄy!iQjDE2n)W(`1bp 78yyΛ1-T'7sP(k]mdb9CndF~_/s ˵NƨȨu(CyaA/"@D@QQ\j 8 ^E1LAD@D@D(>H*:-.1zٸpfI#'1 nYtugt r+yM £j%X_f_\%M7bvLit^\ N8alf`7SԈMA&3<qC ),C IaKoQfZsq:6-1,ʵk3D ؄7C*-K|Qg].,½?x5p.ݰ pEfq,Ypwzܜ7Byx6xFqkJ^*GY[n%ಜssޙ@[ۏNo7eBZT K( JTQ%Z $edx3$c1~\><9uk^>g';|=mDZNyQY|5ֱ7 ?;8vQG@o_Y; @wr}[:/ղ8Gٳ_p;{`:Gs.? 'M9<9OySN|۱7}0>tj'bߩthfhf` ps[r~9=x?{c,V<O|WqW<>fzsȺ׾v>9+1sh{g}Dq\ȵ۝9kT+z 1׀^_}0_3~y,1x^]ݶٸVskf׷o׶ofhFv~fhfhf`6\7qW3 4@3 4@3 4@3pa2?_ꤹq{܅ٮk7@3 4Gfhfhf3^{o9Ul3䖷eIfYkfhfhfXԳiǾ> fhf2cWifhfh3> jzc3E[iwO~iG<gzfhfhfhwx~6?Ϝ2bwn~zhfhcziJ@3 4@3 4@3p0(]<1%.q鲗x8i"?Ӄ ]-fhfhfh]3_6]:&:k%/yII ]{fhfhfh:s 97Ƽ}xUr~ꧦ˿7kf8cO9cohfhfh_7y⫘>MA Wtxԥ. 4@3 4@3 4@3 ?8MoL'&Wtk]kog3 4@3 F+5@3 4@3 4@3 4@3 4@3 4@3 4@3 4@3 `ӣ5@3 4@3 4@3 4@3 4@3 4@3 4@3 4@3 g_ 4 |7}5__0ѶfhfhfXG>镯|hys'6#??8}kOWUXӛfhfhf(3??K_ҙ?%.qLG8m W/6q3pԥ.5hhfhfhNE&.,jNW9UO3 4@3 4@3  Nٟ}46ۻl2q.w2sąݮ~snKt)`~|O KiOO#e=UNO]Pru:i/YW稶k[Gi=%sH^}_?F7Kz<.XG%nN{kdro/[m]?F2}{+/@us#)W;3ą>eSW%yYOʬz/q#y8:묳Nmz\f8*ݾ wBprӟoii0p+]i~̭nuOL~צooZw19N9}~4Uo--ڙwt78g赞ͪ>m%%j^0tՕ$.͸x0]ל.~KhiaЇ_ꧥ7]??MW\s[y狫կ~tm nO~r[n ~qa1u}dyFZN@x^vU{.(뻾k2]PWWݖSo~E_EE .sqE .c^HNlnK_$>ul{+u~QG&&&~LƐd/\SS m/R]F'r!Gye}˽!QSO+ X#c#]1kV\^nvH~J퀎CB +u6xׇvӗ6jӹr)f=%Ojyoo=j$9-RB>1o+ޮ9k֦WM K2릞sg>meΨl@Y3hWqd!c.\?>r.1ýkO;ebA}Spbo:qDzrAZ֧0b.gVÞozӛ[%/yɓz \пon?ӫ^Sv΋Qҗ)]0]z6׾`=m曑7˹;{tc IDATF__72uz\xc;oN4=SuvoSJ>ob㜡fK/bىEeM_s8 }ʼe~֩xo9f<yƩz:ĿۿM__ͷ7Mgmo{>_< ^Osۏ~FSxvf`~3oN#\<{ gN/~Op^mns7/7|ߌB'{__򖷜w _+̀M }J6x/bӇb^d>ZkOuGX㷧/B,:sa;6Ib]Zȥ]eb{tf|,_\y~bzr=Xu$kEx#k|.zGՙٛ1I?m{wWޒWcǟYJb}vm$.o/b*Gm6y68kKAƭr[\,P_x ǔ~$}8#mCckq9Wf.3 R⬇# aJ]_̫~bƖJdEvt>&3D*=gmbr92{;#1gVϜnQ5gkg6E/zַ>/{'U/ύ׾_~~o\| QWfH1bFy)"fמ_}>cī#kρc?jFRۘ2轚fhfh7Df1'=ipc|d#OON?c?v ?mZʯ!>*Wtw__՞m>F@6rͅ 0jρ1}2GU!} broکNF}7:sX ?zƍ/&C' s`#.kaw?ʜ)Gu^e Ɯ#,>X9=ܟx~^gH'fډ7sBR'2ocԛ<0S>tb)^؃ZW[62Uj~_E|ֱƬgv271Ua9ckmޯ͐`mgf0d+@<~ E>aOio?*mm!&Sk!߼@3 4@3 4_-E 4K\ӷ|˷̟(Ûc8c/ntͳ=HM[[W/|b*$d~~axWxoލHX.^pB֯=\بvbRmZi;;UҋB[çؔr O<5m\^PDsG38y?g6on|WJ$8-sRZ˚ox GrebpsnM2{;[SGn]H|9CҗҚ!Gu~DJs@4W;eƬq}k%JΘ3=enukdtԑ;[*YkUnVI~qTSo[o[ݎ73 1ys嫏 ׽uO|uKm/}odUŧ>ؿ΀|a79%̙QyԶ%#z#G86'֛fhfh0П(:o=}WҕNēCwϧ_>S]6}W%d}G)|5Ozի&>築2޲/dp|A//x%Đ w^>y#ī'>9>q?뛃21;ѳy#=o5k= x2 YH매W9|zG3P<}ثCDz_[Gŏj2;}},p39G|$gYS>%~uh+_!i~-yG~.wr>~̚Mb?,ȭ{xsmDԑY+uzCzgfqq9@ק>;07}Mamd38+1~,΅TŗuQι4Ruֺm7a׽ħ\׾P7Mn2oNy>um0oK^VGbĨSKimm#gѕ|3Vyf7#1Y7wm1i/_š4w c ߚenb!|c^JtuRڻXcM}yxŧX c$}㱢qծ!wF=Y[\Ʋ/:1UVgۋƕۜ`eo֟8j*->qsұ.vMEu$MiM{rD\uҘ[G;%1>ҘJ1'릞qF2siOPA5b}brbC \`Yol$jCnzsS:u1t|2rGzTT{k#=r/X#kL;%3a{@b;X:ZHo+bYGl`GƉ9#K}2 )sLJ-O )0t}n//fxoyы^47שׂ]j2!(,RwХ!g|}jz~ R}~󤬍n^ԥ.՟ܸӊzyuZ7wȚ? ߨox8S@3W2{eK_ҹYSaw'׹u;N~ 䣱Y7э.qk\cя~tzޠB׺ֵeJ. ߠ|ʑ$bG1xaSG Y>EFߴma6gb 2յgJgK*eQ TsI9RZ'}jƐEk\gA͑X~j>}.b7fƐ~jȭ:1rnJüt ΖybBH33oNH9˜I=uOBu;otfm,-{8t_Ϙ9υ5Ń*zKNl)G~oOHfe/OJ#ygl&FO1ٛw3rٯ#vI5_5s o;V{<}Vc ܖ窜.-!ye~#5='8zs[G7Qқ[;` wp+L: s>2ltbQ.2Ϻk}{^^3sۃ?ў6ѫhFu{n 0<wg=|;O91u]Wk$|m]@1b \֥/eU}}ȷ/yQx$t.}u>uhERg,O!ҾHuQ%V{$x|tk_}#!V~}YRY[ԘH%ΣnWRR\lgЗҘ8be#N̒4ڹ̭=9g}G';g}u03'V]lK̒N+×6qqK3Yjyΰ NԳF ;}ۉ, 6{jGS{^7_ug?{vsۿ˿8r=nq[Lۿ=%c;ynemefh3zdUJP}NA5߲hfhf~L3;;[O;5.=ϝ˾lrI5>6 iF>7{D^`p\{3Ɯg[_c_[)\kynW7ųY5v6Q/S6ZQߒ l.}n#U79{Cf?lW.E_ՕUWKݾք+>1ΩDO~~Vէ=`XHo 5ܧ5A7җnC{(Gk|r#Ӟc?|I#JL֦3s˜n\Lx7y8<(0}h=_߽k_']x:s-oyx.U}ԍX_= 4@3 TN񵯽f3o9AO fI0^ԧ.??N{æ=q'>OYgmaIx^W^Ƒ>umJzC}@ZbfpAM W|ƕC/˚[8: =lad.ur=c6 ǚbďҟ>cJbw'gGaݑa>dyT8 :+gO}96<2߸{~~ƕ9GƕN>1)+}{x9b'@Ñ5oy1𒗼dz0}u8?>I/}KOO⑏|yyOOLOzғ&>]5=? mL7sR >~4[6@3ph-MGr9\خgq$珮e3 4@3_ ?#?2,a@3p*)56o~:쳧EӕtŴM $_W͟*[[//N|뒗n{Wq*9Twۇ.@x @O 2I3'kmҭ]1oL92/CwO\g<ކQ(Зr]c*Z:3_|%~58'~"ШuS:>9նH٫|ݾI;͡fr6϶Nr[y4C/s}GF\mrUݺ>6w-q-8q;F̜Y>޼r{cz_<9^PM2bO|cfwN|jk~Oofh-s4⩋WWX܊khfOnw͟~9?l{]m׾f_>՚f`?<w^WN|N|4^h7 'M ۱f /t̤~^dmYwˣ,ZJ7Ɩ}Rm,=rrT/tyK]_޶e(s_iI1}bu vW精.J`;39R5oި1C:RGj`e\+Gr+'JC)8#Θyg5(W:ۖ{܆ۏx򗳥NG9s齶_ά^% .k!G=i>|̌jh^d]bӳ鶷힆-Eꧽ\Nnf`fs*s:쑮K]\ɜc̚xfhfh2G6a F;;O/{N'/Ee'r\g~-'dwϮ]zj2X 52lbm?/ E'nQ-cC _ĝE/r;|`8r/΄zzd|ԫϾ`̯xlWoޘ{{Vf3(uf}Ovo_sH1S+n\u푷W͡XV۞hXJ8CI}mz3 E=Qy˕qc픙.\bmnfhfhf2}?h0|ڝte/{t\fz _87ݗDހ&7ԧ>uz_?1Ws=ċ5Sod^NwgQ K2N/Y|sQ <;O~YY9(ҟ<<|.kh+ӯyg]|[֩r a~܃~bIvIJ6 _񢡶oѮjzģ~kZ/FX})3ۋtovq._A>e)OZ\п$ݗ[{ ~Y+S5ӏLs/bd榞xbO=O U:_݃6xF86X|XwưwԳVw;k$f̜mܙ>Qooj+VR'b]OyY~tG/87#_khN/]N-Wxg ' w'0ЇN_M1OR3/Tb S8,]@9Gk 31$ix70[ݙG٣/"3?{qJ^%qXMRlθ7]svߖoYRW$'?9fzIimsuY>ǧO|os.9WH:S^{z_Mܜn6rC_fqc<ȹg[N1-j˸=Hw͢hۜ܇5;J1_)7 a g9(_2轚f`2xԯE% 5ycnwjWIϜ[e/78?ӳ>t_x@3 4uf_G>qHbkpV 4@3 4@3p^:ڷ2s?sӋ^y>{ٟXxk/%%[w)?=*NƩA#Rom5qx5Cw-cM#)N F}M> Ybk_SǶIgC: R}ygY/cgߚg~obSnm˽&wT5wӓMyHh&#-ɚc?Ηl>}ħx{7%f8 )2OzғAx &ñO׸5N_O>5K^K'< 'Ry6?nu~thzӛ4wҕ4=̴֛fh9:4nz+{sUcUI}5gMkfhf8\ eٻ9$ |=Ǧ xR/Nw~~m8u`z7}|۾Ng>Bh3_]0 A #5G80.n>xM5c>~/Y𥞘Գ.9U %g_~i4fOb'VHnc_m]FzQo9T2=URSX셴ibq#B9,=;򑖘RfGQq03%ߞY#kGH~$K:4n~R 1p˾.r#fd&gS`M΅9<2}N̽d]_'NbgL'X!^}Xe3 ,78q6/Ǎ[z׻(<}|`=1 o?{\םd+_v6@3pk-=2󼌡?Q.=ַ6|ǛfhfhFs[N|5v]b; G[_ƽ?c=yY{kgݍ#!.8}#IK}G>{3.s3V\8ܯbkT&>} G'snsӶ_}ϸ@3pmo;Izի?}+\2_짨40x'>9ϙ>E We_ev>uޮfh<ydGan\9yuK}2~}kklfhf8 em;<Mn2qvUDZuK_z7{/D(Ŋ%Pp3(&b2O=1鳷qb7?cΕ>e~Ҹ3m5ky@e })IIeଇ>䫹ؽfhfh'Fyf8 pya"u#E%|Sg=tiWzZ9fm)狕(3Kڕy/|&+%mok.?UmtЯ&93bRm) ej~=(+#񥜍CLGzI=ɴN:%~7=>nH#$qK}}kǟξ&Ӽmu[[='~>kW#7c)n]fli>=!vM=p"?scԗ^@3 4@3 4_)ğ:xuFyuT>A9ۨ6Xg#lX͵ƒL|֡^:gPG CG'. c!OI8sRZѵKy#9HgNk](ȘQ?kQκw#}ҺJjf_2_eƖ=msl!wϭKl1%f6{\|0qM}{cRvfhfhO1åsOUklX`|1=ODsOIJ//M1sd59Y =z G̜MHR}E,J/ >g Gj><;1AA~N]-~`i {T[Nd%CYμن33裆>_g6)kfhfh2sc[<{o%~?{Y'uߴNߺLl@3 4@3 4~{@3  /4 ż5zQl^~j=/O=s>8l1d `Ys̥户6~%jr_e3 4@3 4@Q̾zfhKEO-.P(k/ 0z^\vΕo'\$ɑ/S~TϼW*دʊ&'EW$v#s8!YH=yẀZ1ve2'T7^W&I(x]]cL<= M zX;cЏ^cXb2O?w֬5x-\0RR Gkhfhf`=yޕzVX!f\=m1Ys:s2=a*߄M\ؔ֗Ytͼf4@3 4@3p7ʜ*O3 4GpQ| M:䤭.N{$fΕ6X^k(Ϛk1.D&'Ρ_=kd6k>@Ese̜b':G2inn {@Wmka%ZM 𙏤}2FF6Z鑱ԩ[crSm1k(eSXqHsџk'n[[ &ClS3lbfs6|`/6qsG[b_kحo,Y߽\X椞oRMsAoU_|J΢c>?|3e 4@3 4@3s8ؖ'@3 4΀O^Qra5XRs90lR&^GrYĉy$7h#ʱ9G6`ő_S%8X$~V AgoOmkkg/;;ߨeؚ|93x媶Q1ɑɁxdxnS̭Z3m×t덤s*gQ}l3T/#ZUf.~d9+n'v~vFs{\sRmmM$mkĤ/̒}-F XJ)Sw*qsӫhfhfdvr 빗8;~9cKL>< cldC}-f{'ug휝 4@3 4@Qdk7@3pF #~p{[sdMjY3'k|cAr.Ki>R?)Ŏ|̅[_Fy>JR>,AE~GXr݋#^σS--1Tqg.~ Kk0;گ>eSxr'OUr|Uqηbd QZw76}F~YGG֭>K2gi.5o7y챶8okzN"qubYf ]̭fhfh.<yΩWA;#k󗌙W}{L[K3{[iyfhf)F2fh}az: OS3g7cS NG0GJ|,g|eO47%9G^cSfC3uRgho ovg܋uKz[;8PYT93:[9%C\Gb͑o:Ǯu)ӫhfhf`9Vla%nfSs>esi%9%ޞO|)XK3A[ 4@3 42kXjL3 4Vx]IOȕރ9Б(ϛ,o\N83/po~_1`F\TB¡ug~l{)xeg,s9=S+mI6u9^{Z=>y.jF11)6<| xO,&W3ΐ>HI[ޭW+ִ3*Q3z.r9굷3wk99}1Y>tmҗ1:!Yd}#/\(= F\,kg ^fZ>^nɃ6`$L^>vF@3 4@3 e|P9[co7~J繣99y ϗ%Q+=.k`W]=S;kioε~mЫhfh@Q޲fhNo{6_ߞ9vGfA;kusks+nALJf1k>2=83{'9Uٌ[:i&OiOm+ל5M9RĩEr½5Gn}ff9#=^4@3 4@3 윁%0CzWǡsW|sVlb\UL?׼f/s{kfh@QƽfhN)>ik'i G=.䅔Msۯ9CM$shkimqrԍuڵp/bbYJta7b61$/:}us^sGUӟq58'G>AG3h4zFׇ?Z`FƑM_jd팧u\$ c oyq_`%>u9[w"s&kK}T/R';kXkTjXکykWk,#O(oڗzٳƫoAm@hϹًZN巯hfhf`j_7xGnpޗ~u)y#@!vƥ=?Pafhf!:O IDATFfh1\pE*H{џmu:Hm.h=28 O}SZOi="zlù=/gAo2`~Vhρ1J`xv5JsWv֛Nl٬-g8{ʗq*3_֯68|R쥝q}@rVtsF+V·._!FЮ3wQ_brI\đ=3'un'/죤sc965+6kd%?.byׇͬ=NJ1rGRG[ofhf̀WNƴ=7빡/;sN$蛃G;kx>v\0m{0 4@3 4G~Ѿ{@3 ;U}nGfMywyrqz^hR]K9a;63!"8J_ulpY7d`Bcͯ9YKY}MJo7f}|iƷFkL=>LHgԨx2_YkUgM}$T:Ɣ2TGĢVG}RϺΕq}zZY/{ӓbSxfhfhy^D-)7)^YY#YFyXy8jv8_:nۋs&/vn3 4@3 4@Qf?Z@3 ax'WQ\@A}vWtkzG=ZڵWe:9-[Js,kegaS7|jmtfW{!fIyUQU1H37?]Zd"I`ҟNN`(G_U'^%?{cS}2cU8g*^:b#QlS}\ [z"w_u_[ϼԳFwRߙGw1{_9U\fhfh#j/IQ[s191d9=̺YkACƵfk0S3 4@3 >265@3pZؐe}{r7d|2ϋ{zH2g~g\56/ڏCܕ=RWYדּΚ1~ km|˹|kg|Ç~K=sN bjzN7ҳ V3#l{2G~zS#69r,_Ѳo9a/8rO ՗>QZ xŦL9Ɨr{U߄f܋\K~҇-VݽbgJpYfةS&i-%X9!ͯyr<ⰳ61a.}֮fhf8 x~m=o렋ѿblz`jT?v58Cez!G{mMq9[A>Z5>D ;遯r \Z.}ohfhNϏԗL G%v焞ryϗU'Z'k.1Z"_umfhf`?7']hfċRq/:'XaO;}DZʊïs6|K^bYNRߚ)}Cx/GweԳ~(_H#k^Uk19:η#7)߾SxK6=rMU;s7fQ/k }?ZcZ5_l֬Y]R+];y2<8\Wf װ>kkgz5cbT'~3*Jw~|yp.ԱK I\#C|ҏZg=7`}Е}9_gYg$c+ <+Z6@3 4@3p󴺿`<ግÌ!;+s;TUA`3K<5R<+pg^M~CԘ#|jfhfLb(s&Z=k3 4,>v+Rs8k!Œ?Գ7X/ޠ?ubo$F LY=\p5 M}G1{ NN,Tl~ť9sfڙ;[K|e b\SGr>d/^_xx$9'ƚbOiďj5\wM#Ǘsr֬'SOLu#9*o^֩M3$oQcu/fکg"z=YO9i{_M__m}ųx@3 4@3 vvsSs]9#uek\Pߜ*0Z|p'F|_ `<*gбYZbj|SNŞJ{ic >&ܩsjfhf`FMthf`5QNLo]dbGԿ椝zֱ֦xW\d1k{͋jڛ03?[w)N5ܓjWzYKXT0)V>qd^Gyr<2fhfh#y.4ߦبȗ5RZ>))F;xx;FsD9įyNI!jd͜mA97M\bm=|@3 4@3pt7ۺw 4)c`ۓcHo;6p;<=VM̨qrlj\ɋ8ܚ?oq)+>/Bm 'g┉57}tNr4#53sIK_CZgɗ׸uʥ~/1Jk+cXvʜ\}zF̹mHZg`IL;˘usS ?8ØX|cɜǯls<iMz99ԑGgĜ9X?>t%osZ6@3 4@3p&0o9nhC@>v;>YEb$I}^SORoӳS{K_nI\j߉\?3#ۄ39wo6x$\{d\)&frS=bШǨNܻcۤ[c?̾\1~ktzWLNb8)kW?'b6qma}kiT|HcT{g*e}*`Ħ$\qlgξ!Ez7LR:UZWi myJ8I_#@3 4@3 <~FyCNyp]#_?s =s>|#Ͼ9NbYG#kbЗ2sǶ9M5u7=C3 4@3 m2G7@3p!{`sc/ GNō+&,aObBb]e֘:b L^Jl̳ Clw&bu1n6=[N6}EY|cQ|~y^T6u-g-ΙkL~\aULB4u6\09oZ{RRN{Ki>>jß`spe bu!Jv˸ĨlX[czSnJKXG_W턞`́ 4@3 4!b+6m8|>ot8O9u*Pźs<#cG}!ՉyuWR֭9grfmarM4@3 4@3p7ʜ.o3 4G/2pB] %^/z|nMODz/p9P\{p/e֯5FOYyc;XklsQ.Hܹy>EbHn.jڻJ0Wm뤬c$=jlg@UO=xO[ݹT7>wRk}|̉Wb;]K3w^{agB}h-b+65<>b?ߺIz8$MO'f΅_] HaW3 4@3 4g2oCӧğve~aoOY$ Hzǹ:熜:suRs2W2b!ʵf]hO!^S 4@3 4n7솵if@>QN K;ۭO%?s5F>bFǸîVgk hQL>HK3/#۾8B]i+Ī_?گ9bGr)?d<}r+m0KA/m5ppZ\SbCYit;˅d9:~_i/@Mug '}Ky119810rRg#9nf/,/6Wq391C9re5sgɵΠ1ӆsyw1ppQ}5wGƒ6Ϟ:N:Nw[^aĥOZGbL_qr᥎zn3qaMX|$>?#y]䔣ԇOG߫5{ގ3q{!ͽ;e@' t@' 2?j to6. B‹r\O^q#mt;i?kVgXw7eoYkwӓ__ĔSGb{gaۻ9s7W%s'g\?7Zn0tԏ<[7~xc32sNnČ?K3vJ=Oi>jȳ2?,ܙS<׿q|]b؞O})ӇN}圹gig]l2/d0&y!~e' t@' tyֹ˽O.z38|C3 g}.4ϋƈa=b#KL_Ƌ#3.'/ɛ%qgJ7:N:N 29:NMrTw4bJ饞Ӷ6vY[)پ1/GM_̞3ה֟Yx+=!O}ֵ&c)=qw\+|+W472gobO䐇~w&?'%핟8gON{sSf.obizN:΃>eNu%\=o.fܝ˳Ǽ#f<=F\;#w5"YCwFs٧5;{O\^21V_N N ݼN"";+;N:N&3ѳ}N,|GybeAē#8~#ͯ\##={Y?[#5L93n}@' t@' | 2sڭ tk://*}]Q偳[Ϟ̓~c&uξ[.>İW3wu~m˺; ,9bwWߍYm>m$8bG>Xr%sQNܘ%_ZS?wǝ36q`WӞ&jYSes#_E ܾSן?O;C;uNjw>-ϐ&>sFw3~bstRaS] )ѻ:N:NU&#r=A9H0qdciFA8%7,x~GcpO/>WzJqdo߻xW͙ tO:.\^83U6,?=b}wn>)}q蟽#=幈ܾ⅗zM=ςN2_/増LK:lΖqpR>vij'kL,mcj˙cu>1\s͟zrOKɜ 3|rp"'{Nw0|x,a|s`>o^m$stvkd~G~}e~p@' t@' Le~Ot@' O˱;!ćJ]/ƚחH}3l2.9U>g>%g1pל-=h9S7ƗaГC~6\vꉉ[_+|'ƬypRrce~tcࣧ-f\攧ԧm<7uMꓧܩҏZ,~c٣s&{]p+')c>d1с-2qrGLJ'm.l걘s\:N:NgϙqvkNxѭ>1W5s'/Rc#9TF ~ s7kbjZ˙"o-0bƙSN ]|by8 IDAT,sWv@' t@'#'/v' t0s rQ_^*={VbYaΤ98S's՟3^SR3cg93}OvbH{֯mnq;2'ztFY'g)ӗgO=9 ̝y\LNZ;8ӪvY+*^lߑ_Yr_Z8_ne' t@' t?ΞyfWܝ|)J\bH.9o]sk Cz>SOuFgai+O{ǚwy#9,7YWw+rw@' t@'+L_> t/2.\}B`W3>s{OL}׷i;\vu#Xswps%_3~e '/]Ök^$~6owXL,G|ߕ9[YwyɟyV&٣3͉T7,'zy;o>d.l8B'?!9:93<=#|eN$/'uVҼ!]͸ι?sZn|JWs&O|f2kg4oL?a^{(q;N:N&{.Ύ9K:+1|ipcceÈ<<KM3ȣz>'V=.OӍw&GۏO8[Lq'1#.s>3v' t@' t?j̏|v@'M{u4/y UG1/e}ORުO1%Uns:Ж4.v13^ߙL.9θSOۛ8%<||N>(GwW˧쇺t/s+?quH{kxj/?i'oqWV9v'Mߴ,cxyp6<散 Xl 7؛Jc34?WbX}Su_97`;s6~gZ7sQcrگ13N=<9{Tw6|ֆ[b~<x.㓟3O~1Z'1y m+o~f'zOsIgGustW>g֞"wgn\e' t@' t9o]g1Ӭ!O_]67dEs8zr''Ej3ps"ύ|/|ƥ/1ja+UӇN̟䘗G2gm%y6r(X' t@' t@(I6O' t1.mWuiCıWkrm]q㕾o.!rm AVwƩ-isY،;˓>m1"3Cwg ~y派ό6nŔ%W)Fj/rSkxm̘U1)36񕞹W:a9[{P:͵y՟uW9V|3N_/G {bfo>'䤾u#yaJdsN:N~~gYJ,0 4x_b#~3ρ>J~8}h+>쩓;y"#Vqĉ>͉gwkM`ɕ3clU\@' t@' |EϞpw@'E&Kw^s=_2F]9^WyMI\+ 9=ƀSw;=lͅdz]a)ݩ /1bJ'_8w}A$߽ <9Hu8#o._G\pɁ2?:ݚ>meƓ3wnb;؜<3w`rԑ,Cg~;07}`H?ANpkOg?)wrv;8g`#Yi.H[\3N7Ic;'v ޞ̍ 8ԱҏdK\>ɱ<{DΕXyL韱o/Ibrĝ1ք?uu@' t@'#'n,3ĴKs"yV'gD|2gbmmeROܜY>y9'BX,NJyUv@' t@'#&/f' t~Er.g||WN?ۗsUY/,_KXL곯3.}|%z`R7_*ȅ粮g̙YΗ8vMH1O̞*np)1kkoƥCg))I<3 ~VgW=.gorm߉%~܉O':kO~\e?; \w,rY@9oSN:N>kw}*f>}i_ɳ_T9V\2uJ9|9_X|nNs"sgN;NbW?/sE,;.ֻͳ,~c8zI,w83ߙIJ}#<262zyG=wg_[ n<Xa^J8pc_swٟ/鴉OݚS8%a)K{.cs scYh#q1s3 i|\WX\Ί><*6{6Ҙi+^!9MipcANx'nxʕ:RWWe;Ef)6kMnz3:ҽ0Ϻd9t0yWƨhsy!nΙn]@' t@' |Ξ}|FVN.уpyg{rőpБ<BlϿc!X,9qF>#M'9ulrSA[ɽ[~yč-b[(e3?93Fi=>b6|l :N:Ng@(3}:_|rkgguۇr\Z8xȢ{6/}QeNyt07pKJ"Oq+5׎;y;KKg 8npu_N~̧u-\ҝŦ˷k'fH>۳cnq<1p}Mf;/SwbJX:W ?oCyg,CeӇvc#V t@' t#\ŜaY lbHOlӇ/`GN=x,1kgͬ l/$Nkgr7HJ0>uZO'|.cr[brQ7R.vb][qjf3ު6g8WkINc/k뗃7H /g<󛧲:N:1avĭ8`tL=yc3GeȎ,Xٷ})cMXtִ?a \^W̩<苦K\l6py1K>5&͂K5d֡.u싸|IiY ^`C];\]YY/Đpi&9g3qMuΥߺ;c 3sanY7gg9yC72Ge11_;cgo8bsGnSrrW9^g K[?wijf?:N:NNj|JĴrR'gČIctRtr#n NȥO$yU˒<ŏ30M69`V>Gy.G)],<}[ޘ8\t6$e?<~~N憛9Do?VN:N~E1:N7^/?wq/n;U\Ǯ3zج!ggvr'._LN nC&,#\" /ԍW ;7/k1Jbυ.n\#w|_ /ګYrы[jՓeOy]#68V1W?Z.ܻr|?㵳18}Z[ ٕuFM[[RI {r̕rg1o]|֨ t@' t&p\8v9g+}|AB;IL䁓+ԍ%κrБ,ZS\[>??sܙ~|bU8<}Hjo#3s8ԑpK,́x%XfJ%'1}@' t@' | 2{ to:.^xY~ҏΙ%7wwY^{!/Y|bMYāF&v3ߊ?1(͚;ߟW~Kެy7?re̯φ_8r2i+7%̋M~#]rvxE)iǔ΋E`3d>cK=c?qO9cUgngO$1>]gqW9]ݞWVՕĉC,m3swnW' t@' t5|^Yո%Ӎן2%ss֯ _lp:v%.vW[kJ0C̓fqOt%]:⌺2-/h#~Й_Сv1,8yE'75\F_ɩ t@' t@(#ޚ@' \Yyeg=/Yg;;f>_.`orez;{"?+XW!3d\ƀ̓:qBʗETf:Ҙaٰ}ѕ/26ȗ|39}է| YpB ܗu8Y >~/ß1>[!'"-#Vi c_GٗySK][p~> Cکsf %n</LNf>sd=sM|zƋ/s˷x>_l$u?nɻ'Zy1Oiwnb;K5s:N:N{Ng91m\l(qm\΂<ç4hƩ'\Q>z3\#yd\1gO|.M>I̛X;9{OE|yН;=GMt=: 9;o0~m$9ƀg޴357N:N>sgN;Nb XΣ2}71nܳ/ԟ噔wnM> fͩ?}MղWl{ }L=kM65"Jbع)_[ IMrDgґ8[iĶRߙsO j'/Sf.9g2gCW<1ԉ_8lm>O?,p?c1?'?aI[w>r$3iYygĢgoԐgN:N>cCӯVrϴ>&/xǹIs7>$cy`q>г6}ɑζq6I\i㓟yw@' t@'e>{ t\iW[c)8䖳3sjgd3;;pvϿXÞf~_ۚuS/9'ucrw|.9H/\ON&?kX3%9]Iy1W:?Tg` =9o?a=72x^avv1|f٫Ӟy'oİr.pg_SC7sdN<&/uc)^Sc~`'8xblO\?>c3Ny<Nn=ykw@' t@' <2s=ʙ|lSO^ZW̽p7ŌMqJbs9fyV܊M>]_/K1jNc+C,[*B'8Ά8<:1އ)#+6Wv@' t@'=&/|)F' t_d\p {1OLJ}byw+،G{g,yI?HzEYgU$y6NwP0ǟya^G>kq'\~Ģa]~Cytu@' t@'e>s t]<6^cs&<͕ʟ9%j#q杼T곧aϺ&H/"3~Nrpc]xe5FޭocY\@܉g25/>tΌڜO>ueF%OX6Bcg='?Zߚ3מI]H8O>nJh*wb#WVK>gHbW m- w>sŘ;9bS7ynq>jw@' t@' r'׊ȵí_NJ=yk cah3Jf[lHWJ~>rϮ 8򌃟 &󠻱c]_ "^3ZkosH=3O,uI]ĨřnC璗Xƀgq0sΞ3wu9~(ͧR;x"snS?[L5Đ|Y\:N:N=g,}ŹOBl."əG\4&YᠳyC[L?qqa$q#N\ZSK˼x wQƁAμ)u7E\e^y+ _EZ?:+G'ߥ\ֱFRrE)z~ЧU.ߜSoǬ3y1ON/[_րNn^n/3~%a;]pŰ}Y}G8Yonk#7Z`,rا}wm}$pgbޔyfzSeܣ:9XJ''L8x̃XLO;3 d-'Wi3y4.1u|,u1\in0]˟!;N:NX=}iӛIJ#],cWy=3ga|#Y/8C)r wyx0gԭgh'_x!ObiO]X+N:N@( t@'?E8/vTx֔nkgrQ1%SV5^U;sgU/:;Ĭe?֘8!wOk{fsn􋉛CZ>aG[O8lL_7FqZN:N~|n[{FObyɸ|v"^[8G&'OۺgN.s*9D9n 1~!zO%y"s_Nre{gp\#)hJ|a]yҟz:Wg تp}9㽳9k;"3/>Wh7K|~} w$gPS])7{ć/!../?VSۜv^Y߾<@K29g'6~FV1?ȁcXH:1"+هŕ᳗?y=L x KUҗy[?;ܸ)ɑs7<Ӈ~\mz-u9S87i/yY5Ϝsg ڜ5pV=gg@' t@' <32vܱŒчT?%oǧ/yJr|O^xFӗک'fb2ReẂYys1wtf^X/sĪ#6>y{=8: 0za9o6y]LN:N^=~QmN:LKꢫIe[;V1bWz&?/j9krO+J99c럽M[>D|K?yWǦ́K 9͇C~W؇~ɛ9/Nw"؞̼̑\l_QL~VKOy=26=Џ1κ#Ҽ'3#~8ipV+Ҷ=_~l?Ӟ=gɱ71yg.tg4ywN:N~ 直Օsyd'>5iig@' t@' |pN: paRpvgNk[L,C0_$X6/  0N=u3F:G$u9sƙ#LNw9go/^y8rx5a{^t_[\rRA~aNϊ Q\[ҟ] &\)O|Δ<8#9Lka?:˞StN'egM1A/aLg;_rڟ|p8 6SwH7~tW3d֘Y2^1s'fH;$ݜ/)G^'>{sMxJs&\'xv믿:{p| qcɁ o,dN,QC%>b>VO N t@' te\:Ng\b\`<֎xgyɳ?;G$Y>?89;yq1%b$$lNO]3s8}.fI;_>5lΔPwUJko= 'fNf,6|gs՟pF򐃗_.KNb";sQ朸9yŲcȓ+9#~WegΓ\7`$fi[C9+{q33^in#:g1Y댗pՑ:N:Ng@> ;cy6>%/c`Oi_7G@<5g{!:HE9>W#o?Ó$_Hț>gL o^N:N@( t@'E`+?5P+rREZ%\kw|ΚW>fiN]ɻ}sLެ=M~iϼi9g{7`Gw8~r%,l888\-# UNgƂy3Gd{n82ͦ>__Eg +,+ޮGqB}7G;4x_.G׶x!=qra̡&j8Δv%ް9OK8^w/{fY~|Y8:C“ QNnrzkۏ}IJ} l'댯0s һL7ΜHM:dcYZ-{Iߎ>c,9g]8qƤ_)GnL?ācN:NV!+n?WW̌d%.f̔pUI)=3]19<3s2yF.X`J`S]Uw2~VŬanH#79SS>:N:N 2LN:&kӇ *.'yKV=Xqq_Y7ckb+ۼyŔlsW1c_u̓$n}0wbg,N-1~/r/Ef>br>e xw6| Y^G?,ɋC&6a{>?'b)`A9|oSf7Y~bH|GfΌC|.>ܫ<1cKNM o:N:N_@' t&Ŕ%KXї#^g |0/ ng1elgPr2ܮ;#OiG%Q{o1AGAw}3ƞӗ:Y3q΄kbYfܪGFne c_ppVCրmwAcH-8L:uŐnca%!7 x曺6W͜v&~7V]yWz7y9]n{G\Uc+w5w@' t@'dzy2rwצ18chQz~yLɝil8HNƛ+7Ցd'~s7$e]@' t@''/|G:N3&\ϋRi R['Zc{qmӶH0qJ磹fm{(M3nKUnQƙɹwGϗc8V.^I?Rj,JYO[~S?ȱPSı%>7Ǡ7,#Ǭn,1bJj0K =#36qb=8ً9$,%s䝕'$U.!#`[ U+kC涧\3J6ҳ%O?*ɳʕ8:؉6Tv@' t@'30 {wV2vuG!8ܩk+O5bؓM:g>C>fo\.1f2>Ĕd͜+;N:NXM_YMX' tR0~3x^3*޸o\5W\1m8Sc^mU<:;Ǚ|r<;>UGM7z^:\~7AJ9XK_Շ_\ެ8$qG6]đbHΊ//izr)7>k'_Qdž˗p}i^{ E.9<~q`Y洎1&L:wUm3Z_ 3 ks˗di||sW?H?lg[L)׎3|̣Xt#K6r?ɩ:N:N 2N:NeReWyUKG9r?/6VLxW/ݕ29nĞԻ'#WQ>2[n"H $"\xpt7 \3*Org7sI6ge~ILu$ks~P/e|&^g,щON7\r;ĭяT_՞ʞ朒XwX1pXȜ?[A|aگgope܏?҇s9v瓯3F2gqrLN:N>s>||1驛1W㑫|ӟyg6N.gά<3gN:N~ \L>Gy:!pGLb!'={,{vr17k>|Օӿ3=uBt@' t@'@(JN:'%uKRrS7K.>Q5Wz\W1\q{4_Sػs߹yIC맮o*>wrc-lɛ2{7c69]2zn̕X!C7ggoO] n g{V:|t6swq!.π,t}I6v撓R.|Bజ+psn=zFjd^_g0uVr=ɕcaègΝnl?|!%V:N:6Wπ2F^b3W+upSY{D9z]r4fއ̗;o⻼əͳb Ɗ˻#'G|iM[i],}aDNȜM3\|.yӞ;i)gҿ]\r?X^2NLü8)~+:88~l1lYGkB׶|)?l񃙏~XA<[eN3羳f sd9\g_ /KjgGtΔ\H;OK\\Hxo'X2/y[[mv@' t@''/|Ͽ:Ne쿨_V/P";/W41bl"͒'.Lŧ={orbf/N#gvJnN:N~ =/;_lr+6o||ԏ4gTxVsH)%.}.i.惇}rGq+z,juu@' t@'0'/̉:NzJR/gxxԷ;ɷ/q஖ySr$o~u9?#v:yWŧ;I1%nCg g|I&E771J͇ҏ$Zs 8691nIXd@~vbrcOiM$sc[<~>̾>eַ_βz0iܔQo\{GSVn2\|'ZgfXK\{S&&_讝pC 3*V+A. 8; 'A*%~ȑ=ϼ3GN:N~n }Xp9*3|'Y>S'wb>ϛ`NJčKi?pYxpN3N:Nzegw@')2r΂`^t2Mq <.8i-o'n.ٻ%z_a韺'M.Ip^ܙk3+{HUrK):R'aɋAg,q֕*9үO.5Zaͭc}N_[|̱/ƊaO͜'fxe.]{ПNrś>Zq{ FK>`3۬g|+;N:N&sK> ==҃+^wC>.!w e,1`HujqYTsFعħFR>c"%n={<=wuI/E=<p̉\cˑf)ч)ٸJ>L~=йs;]pV+{П?sdϾW};_J$%nM0u\g c;xƠ/޹3.kb)ߍOثEK?gukW;z,*^ӖCy^m=sR9A|tqbg.1%+rfNQwrYS;w, s-979h[=}֜yϤ'<͓UNbmU:N:eeBg?ϖ?so}!?Պ'&3M,mx,G=Y0ts.9G.:Ő#:N:/1~QK|=d' to\fh>>/^VX+|gVz`|Ur$fOSv71+yR_q? ~]䎿˙Unİ J|'JÜH7k_nbJ|p,B n.f-n1y5fnlΓs;2kMۇ|+A2M<6Қ9DKy,}C\;`Ĵsi__vf9O]NO?2nJě?TGl~'wǏ+mzʉ/4NJw%czN:N~xN5 se[Rw{~G&[> SkUXGn$>J|uOUX' t@' ~e~ϴ':NL Nu.\BmY^jN;{3m'flCͿ5{[_%#]qώԲ خēJ3{#6ql}J\<+!^ެ-_YZ]+.'g76+5Yc2V>9se<`^~v`Ĺ` 1sYߜ:N:6~Q}=o' t8/SZ2/rQ3I*?1{\=M\Qb~G,#ww팷;/?VʙxʙwurM}`HFd7e{E>^ferǾYPy"/v&&neO_rǵ}}&$8R:wJl1`R_]I^t_.qsgSr 2:N:u\@' d2S]8ؼk1?t_Nͧ%~Y3nj+>xrv䘋؝.)'7v3|FdzgYm >0bn|\hS3ګ)Ɂ{ݲ2 a&@ LNa(QA A CD&QPDTfx^{xp;YHu-kW%j^vV6b_zw;t݁oϺsq&.q~:l-6gΡ?>Λ\_)~捤$:"Wrψxw2:m݁@w;8<eϵt݁3yMϢ=$Wu9ǧusxP$_cc@O#1bk11Hyӧ^cu85G_ɽΚuG &? ?mtGMqrĸΈq$9L}K9%L݁@w;ls%WoޣyNG~y#gIA<=N_>^/ύs! C i\>3O lX:1tjXb#H⑌˙ֻ݁@w;8eu݁X-y`9Hu⩃}]+%!ϱ:8n 8xL~UZ~_;}*Α~jd?% 09r?A=ʱ:~WG#>c^M\] tNcH3ARJڰWʚew;t݁O~(rx8ƴR}5YkKNWv^[t|\_O<~9&9H&eL~%^EwRnӲ;t݁Ӂ~Q\Iw;;aӹV QN`AA^^u$r!čt]xfԼT?NܩK_+rYZړZ65g}ꮏ}p)N ra5;8U{I8> |I708Ɂ3ٳM|WI{VcKı8t׮2sF:f1gX%ٟkxRrGߊm;t݁@w{Կ8YK vϽƔrh<YɵleE`2fM=q\2uM}1ħh&hu݁@w;pp;/kוw݁30ZSr^`s2c< 0F>$O^% ?U3`u iC7Ya;۴Lzȱ{è~.1r> )Fg.[ >xN#)\'<|:S̀MN8R R?kd -8W|K#c"f'r\ ` {k~Ɂ#1\bm Swz{#fr;58cU/^!{T$vUN[1J__]oSt݁@w;p;}m{qy%V5#]U}7<-=^򵾷xu۞cZ0yqf'4gssM xsdTXt栳`t݁@wpv_9׵wt.p0M'WhՑL3 ;o\N#/#~V]9'_r_r)'Ӿz Fk2O>m{̩̾zw)ǵX7֩Sq:Hy\W9_983c+7wO^{ɵWk`${u|e ɿg~ֵ ɣ!SAwjLJ+y\}HO\@w;tGy߆ѣ$1Е39R1בig>= ) #='yis=ϳ}޿ybqȻ$S7#_c٣;t݁ف~Qp^Uw;:ao:Sf%9:ӯ >Ac Fvb/a1ysa~.a kjW~jM}Cnb+5&Wi|6XlvQWԍk6quc~SCug&=*܌Xc^bkL6\'᳥M>{v](ŤoUø2kSG[kL[:U_b6Oy,3FXKm;t݁ASK7{fbs_Y Ŏq'q_ptƉCz=5)V\_{$ͫ16^5t݁݁~Q̾>]]w;8P̟PɃK4rjhe8S<<6s`YC9YP[>tgKkJ[_rWrSma|؁/w}3/I|ZW)&%-qV[[rVL~>都87%~8lp˩$fma<6:xkgOԧ-^j|?%9 벆ZGʁ^1Ƭ Lp62śǺҺrWT^N5z3:[b g IDATG$|?k`ɽٺrg=NևtT<~yF1󔹾*n2!ڕoɆ/9R7t3&nw;t݁3=~`õGy➬b ~ӌDžﯽ.&^1T:zMT #Hso-b p9ONy؎3G8$F@w;t_EwM{GǦ׿;铟t]lկ>}td[zz0}ӟ.wMm;'Fկ~uz+_9˿|fҕ4ַ>qHZ@<>XsC̃1d8%s꯸M-'Nތ.n3v:dt-m6 0` $?~F#pĐ2.:9ۑX}JbL#\sp>$YW֓k'tNi挤M5GʵuF5ƖjYکS%k$.Dw 1ʓ65n'_H[c#_ֆkwum9[Z ?5K{s݁gQζ>{󟕼U:Mou[m9׾>O~p>+o"73|e/;q8׳)݁@wLCW]W.kr쁟<|nN޴%?2:*w|?OH>0/Lcbf {Fe5/2n31"Ob},scqb'x|O5sO}E\?5Ә2[3pY9pl;FXj %~ ^MrKX?ulrɕ>0qF_z R6T_cC9з@wg<K2Tyc37hu|t{k~%O{Ӧk\K^'cSg㷾鞞ԧN7эubmt݁Ё{6b9's8yI\˝yzMMfhqWw0Y_!g׏^czt݁@w;p:/ٻ9$|IZnq[Lݗ5y7iI8~3̿ۿMԥηO}S4G&~R~闦\:ӻoᥜ\2>0~Ur9Ϟxw7q;8P7=\ pӯM#A)6 u-u%vb.Uz}yb79L.qy!Ʊ]xsCH>pL7qb 8\] vn ^}UssdB xk'7>dP~|td=_=y$n;msܛmv>{j|`o;ܧG[8~s-#_[t~xAu{ݼ]zop9kq~; [^^7p6=ؙ~]r {K\b_?8r6fg?;mg_׿}o|6lo`tΤ辏228ޟ<̾SuT&k}V맷^djgׁkQq^{:я&7 8S}t݁@wt_9<ײwr:pYgM??;=O=я~ww_}'?yzy<8%/9Xsk^w`Stuj0?Xb5)k!K)79[05ЙݑdS他RjIP0W>ׅ]<# F.WcbK=1UWlos֫]%2n-ʚvw;pvRΗx# ?oN巖g?{>{Lpy?яҗ5}퉳//$~7sb݁@w0t`tυ/8l]D,2ytsIk>u58SPCiL_U>? pc}ȗM'mdָ 1݁@w;wH:wMxC2-vWO/~~C:K28}kOp0N_Wf/<$|^6{N$c;;ɟM~;^<5uP;%#u}H?WH&MԕO=7[=s$aJHb.m:8up֤W9379ѝb,3ƬHY9qc DQ &)VY_T^R׀T֔F1j-L$enMu{^/gX~s˟2V_3pig1q#^011qrL̚.fWʡ_e֥)7{uY[G̒Q#ײ;8:pcOO'_W )>'$p6~sK289mqПgt݁ҁJʚ#^<sϸ{.QԿ\}ILsw:X9݁@w;:ͧܚRw;o>|?k_k_ah_җN*lq|+goa>}G^>CKJʝ~c[CX\ߴ^OM6j_7Solp)~я7Jcɱ&]S$:s}urORL2qpzč:)&gϚE)bLġÛ+̌t_!V?ksH`g`ЍSC?uvw -?8rś$>̳~fjkuהA7gyы^$xm\)5챽I`ߑO5֪>׳ggb!ϣo[5WR\?fTXgigH:SO?1֚/ujMrlpWj8g=o;8l _IEmoS*Υ-2Aƽ}Y/mOOAtv`9wI;[V>a{nLqmqB<2zS}f4OLs+v?珥R-݁@w;2ZNX=yǣxg\vb׹uώΟVa>?mǟn ~-#Hx(U&Nf/ b#^{RxН^K>uc]5ZӲ;8l{]|OϦ3h'nxΡz65s npQt]mҕ4x@w;pw R_+/1)W>s=x7_\S}W9үkxy)Os #u}-݁@w;݂@wu3Wz.w6gsH g'bnaphwԖGFoz$N%)k#93#15&SӶlu0@_q95.[u')=LXerK#\5Ӂ]p >#?S[|jHu&inħuO^beb^t1ΚĠ+-rY<`S΋u5UG-6:Mõ+.԰4ܻ=Y}k뙓R2cgu-c?Z_1s46`楬S'ieW4{VMԥ7s_}Mlٖa[A>/;tNSQ.-C!v$ŬI\Ks-u$8Lr5҅HnHN. Y?S.z@w;tμ2g5銺;?xŧ)Ҹ[ɤ⍉3S kCE >a>ھ4g^}Q"k5Ii.>kP\5&aR:\G?L7ɰc[_X:>l0f rA'pM%k+m--f-a3ZUi\l;k0:U!Rl}Wb\ku r]ֈiUZrMȼ#g?%zk2#d~և6\Zɟ䔃5A@wtO|~pȣm̳-/ʬ Ϯlm|ø%\݁[JH}U?+9Fro^&L|ǡ3]0=/ $u&Yn\)6io?mk9eԷY({t݁@(s_W;gv.a{O+yV카S=ۚlg?owf7Ww݁@w`c>HM$O#1*VQm%uqp?$gO3]M'Gw:+{x]yy(M\`BwʅT|<85H%% ~'⨕SH2Ymp~q]kڴ{J{f!-_W|ťaؔ\?cUxud7}-q=C^dN؛>5G^oz2'H=1t :}c35ˇn,9?hsǾȋ48rmX&Vi P|0R+_ˆ%qymW&^_rCWfl[ŏpɑW}f>jלu3/Nv0g\)O˃߁F>Oozӛv?t{s]rgt;yl4q@w;Kxrgr3;{_sGd[_=x690yX\s2FqwO:{{rx@?R7Fq1`rzlz_'_^0bѯx9߼b+Sbf/|FI93M^[tt۾w:tށ~QfցWӽusgzzPYUrp]$5+T>3gEF%=čtk}?sW%/#/9jLmk=>e?5\9%y{to~~Nugs=wuM i=={^޻O>5_l;g\\:`/שgglX1Cg9N]LF>%yӲ;tׁ݁~Q]__N=o|~6{~̯Ї>4wu3?$G懛j~Z?z-.>q K֑XF#y+NnD\,5S#暣ڵÆ>&/OLe3]zė: IDATdˀu=tp ?Љ1Ato#F>%ˠ\.pMrɣ=/d=N2щQÇ.~Vd~B34&vU\i5Z[2stW1տԟ3'kv75*u%S\'MSG'ew;pfvo}t;a??'8^X-ֳWՉҟZϦmG7p~{;j/݁@o&Quܧ8y^8#~b*猦ߵ[}LπĤn _'O3!յ7'1>~JKznt݁@w29xk^3nw??< M%6!$OO}/ Amo{ۓ?O|8Myw[:CwNto`7 P?<8óTGkSw]@g(gcKV|G`=OM3q'$k^rc/ qϞIr>k=˼C^tjb r\ ׏A<6;}^I|)#'.?~ 'Wg/H8$<u;#H/c" :} 9䰶q{Ilrzt݁@w;X'kuJovr;izK^r7tl:sf/n~Žef(˳9K2W3#fpŇj[[1i/zrD5.6o̡_O.zq]86an妜Q^% 1y]G1x~eR7ggDI}?Y#:Q ėݥ[Nɧn /!uC欜5oAuYo=/>^A742?J:VRץJr\U~$^io}k3~)3K>pC2WG[*=S?]Һ+?>řW*Ǡ/{4#>d?toA_ vb@w;v~vMn2K]R[y]nAgkgK_o np?1:ۂ5Ϟn~gz݁@w`^e?FOr'f[?QLJ}&{O{7}ZOle_lѧclz)~q:a\)[v݁@w;X7/!\įE<1{Bf9WU OxWsz7¯~>`z"O/ecVMmosxv=xaȭuhsSnS7m0K?]#̗/}/I^;5f\ovuZ{q?ʼ5_G,}Ibjܾu) 9J|/(K1$305]s-FKrtfOkMܵKtb~>y\{3~pܿ>'tGK{5?#&c}G~ָ 'H#,m05d_c3Q'\W^3')tΜ' 7]򗟞ԧitζ7x=hb^M|3g3x7o<ٟٜ:_݁>wtޫ=kQ=՗&xy5&.KĴ~d?S L_Չ#3ԱyF,I~bR/>% HL7I߄xw;t5~׶/~|{Noxӣ9ytk^s}vOw݇}C7 5??==IOvMz׻O|s閷0݁@o]=7-NiZ..}FS3_֊7!kl]ͺb=J :cxm\!)_ƓK~da [|pF,bGp}ǽF&ɺG/uk0F9$fT5eCWyqӺXqu213hц}4ܷ1q&9Y}{"xSkvtR^bcB:+o )?CeU7<)==ooM>=ϝ^Mε{f,Ra{Iy9>oE/|tk_{O6}a?S?5O)-݁t{z/$qm0!O^R>6 {׵][+>9}хg_b؞qup$9Gz7='rzחיOx1Hq]݁@w;2u凸+_[ЃgMx7j<)Ӈ>׸G6C>[Jmw;@:H{/Qܛ6nn{;}&k~?g>b1JUWfܗ]a;|lNsy3t=v׼%ŵt݁@(sxeu|<_MOv'Uzխf&jI}sptnP}ϴї7'}_jq#W_$11e/Xq>$'7uk3b'8d8:~gO\g.xgK3KCVڹ<0w66|*GiKA-!'J΃|G68o4nnbSry~NΑufMFŦtf, .#qcŧ4 o.xs*mx f۴wۥxpRZ.z@w}߆m2f|1f}_] H̥obxCutk\_ɥt]rɩC/Skgd-9`/37u9/qr֞=Yx}H7jKq䘋H}U`upJ.k$rUNmq)ѵO2r"ճ&̫j8mZzuƳԍ#ӟzbL߄c!r!ўA7.}݁El#{]݁[ާ,'Gk{ͼOK{}_p}kNe` |kkk>qϒbui_kNzi?;mG ,8H~r&:yG~bnWɅN%=s\\%vQ:)3&\cmN21=}c_cg $8+qlVy1O] >9AfLnQ׮#]G:\yѺ*y#%Y'X}Gp-s%ɓXv-|Ɂ?e(oɟ9&nI'_%LG{\ʱLO\?ݑ݁@w;tNcxs|䳶N{Yt 0GV{cՐ kK~3hKa/{_?Tnw~%|]{$Cȟ>J`Ƹ%F}$w4#,]K<t݁@w@(sf\;ԇȵC(̊q %|bN׫~[S^U?Im箘v.6IW;}5gZ:ԯ̇6^SAaր~xuS) k&b]_[6GbIAƵEg O9sN9k]!xlxRLl|GVG6_fqZ:6yb돑NE/:Ę ֐#hOx1l8?qkG"0`EN11K)&ם:XL_ԩ ݱ]\u-w߬ZRaN]ɚa=~;1g 52?Xcēص93g$>Y%uU.st{J5@w;t܃Kg>˽k ?ؙ7/z}\`ѝyߘ5PYy#wT3ARI?Oę(<]r ޚR:2Ș>d,'^=@w;t~E {݁@wt12v:6s]}X;&^pL{sGɭ#8WȖ#!ӟb7O^_bsYd@D>qqY\[Ã(P> ,kKY/b9̵Fbr&ʑzoخ9^qX@)?QN1eƶs}~.^61GЫ-n$oӾ0@M䘧̵g>8Ď|ėkZďb#x$eڣp1&>g8qsҧ4dϘ>%Xv/;t݁3̙wM@w;p;C&ͥ 拯iË4?#m0_G>"|pŃ>e~y+?8Rlo޶2$'yS_zM*6m-\fLJK|kO̜Wɚ>R`-G~eX/[ :KZhgn֗80?=Ɂnz.`O|ƗWc`)ͫ2yеsKŮIE2;޸=ï/uj,m9j:m\i6ԉ{}ʙRWs]C)Xu\}bՏ=Vxvuȧwا{5Gw;t݁3rK.X̣/׮J ˜*693?9?O˗=GsMt{ ct JɃ)V [.DCbbfuRSǦx◰Km;t݁ف~Q`^;ÊQ>xm+R}iKJU$]'Se>XC~S1t{||ƔXk8:q-rW{d)ͺ̚AO-KX~\/UX\c $H>{ "tr'7lkdb;UIYf \Nig^ݯCן%S.|Krө[5f\ߘ6R 9'6㧪~>ko$1>s~ɫx@w;tgbT[Hk(fr4{~sԁ4^-q33?W98C]ZQB^|?'`ҏ\X!?r?bήQ:t݁@wpt_9ױwtt|8!4)>PYۤп5?3'zG D=y+O}u=S#L8h\mִqnK>s68>@M聣8A[)6wT)|d֍M-I=c2[I.:Lfr_bb''>Oy=Gko]SNJ9·|tR~֡4'9m#c(kΒkMYWfΚ3''ssG)Nnsc53ew;t݁WNwމ{\=c%F_<7_UH9a3<Ʊ/W>%i^c؎yBc 7xb3#Y}K̸\%I_շ9mw݁@w;p;/w݁ہ|ȑH:]`37e<5-a8m05+ ^ߒ~|)Wƭüŏ|vy$M>ʇPr`෯@O{(ˁd3WI>h[ÉO8CMɵ>]}pu#üɸ:ZH- IDAT<:~}!L{WeXkKX~$Scćlw):*k|{>:R}}0Gi6 9Wmw݁@w;دp=GZG梻~kýUJHuؙ_q2_jHhKSv}5ėʏ]}Mf#^w5Z,9m` RR>d^S9č= C?>tqcbf݊;9]If:k8C3ɰ$ ja|HSC}&?_Zr}r!k/1#>́c_7OI\<ݧ:8b9'2~y2{Gw׮5ncW5>&u3q+^%>Iݵe> L'J@:Jq0_Ϟ//a6Zψ˚G  a>W~!s7mXbİFr6O.m%~u%|}H6:92V,ֻ݁@w;8Zev݁P8ٴf<.a6Wԭyi|$|R \a2c_ӧ-~~q%?q}JqJ4&6e1%cGc O}G>xD=H(_=$k(B7G.{P3k\쬃Xƫ-^l/d;cG1󐙃]rwZ': ];%.C<ϡCO}K}Z8Nli%>yF11CORN|FM~$cT#cw݁@w;0:=M7>G6Uv.gb3gb_f|I|޻7W] }1L?8}rWY=Rf>ٯ󌩋Mۗ^41Rŧ5O)V{$1,_)EsW"Q݁@w;8ee뢻݁aUrS|ȑY%|KujSmrF>*كUONt_#?r=~EL$\"'ǺH5XP X\r?KXakě:?̨\՘Ƒ5IKCY)ӷfb@Wɑ8K&%\ƭb^%oSq\X9Ό./95)Ƒ m-݁@w;\e/ke ܊a_u{}z޷asH0OQ7zW%>5f3<] a>1ȜF!3>;}1G[iHabpmk_w;tṖ@w;p:aH@*n4r1W%[hmΚt $}eWmFrSG'VNy(-\ c@ ~l!>{vJҟ9ޛÉL^us cR&~\y#_sjK=݁@w;Ё~Q?݁@w;o%E|!6\FxZō WTZG8ҙqt1տ=/>pgS߆|r6rY$W6$Y+crsPS~Nٯ\c<ڑu7vkg@ d?/':8s>ޑS?2kٯr򧯮K\ds3X GeZ!68?}\#9X rXQ[&3Src݁@w;tNw9{Y71Kk#\bfK9)+?S?c<^HՓC~W?~tNJ?9O6ҸG?K~0k[st݁@wpv_9׵wtd>1_o;a]JKfNӟc|[Y{׵bu*8Rggqxqb!E灠6zG|j*$qć/w=8%>82r'F'un}9 #u[ԒC|Nb[ޔFamo˵>ڋ>M96IUwmΪW7w]Xw,qʼn9GG/qՑKrm rF3WƵ[v݁@w;88C}N0ߐ<9~]%1F5>=+ϤGK[7N{xlFF:ɡEcS׿[ײ;tׁ݁~Q]qw;:Pиp=V[ܚ\$6y3gĩO>߄F2C=gHQ ~E1r-WEmQ|RCdGCάH8cr*$$PrX'~վ0~2ɀˁON%a17qB~_?R.v鬳:G=/>ZYd}FF1ɭu[Oզnsp s'VԘ*Y;\]^w6 qr3-}ۑ9\jpJc#) }|Z'>s#ye,+ӆ5$/WYp\KP/qfZW/Pc_ˏ];e{RĪ]r?b$m%M9ƕ:jZS]cu]=#ϒ{gkֺ3V}Jƿ>2/uyj.&~њC_zw;t݁3m^QR^LpNs g5s3r]lp#C 9r|Փ<8Q3w'*k^3˧O1ӗKr-]Xw;tἮ@w;p:ër g׼gmW{Tkj u?/k>khijÇ:)}8>9XM;uc>L>9!GC\]hw?HP/\r>Љ!"޸VʣL.txAk_$ӁnQSR:r- _aۻxpĦϘ|{^ZqcJɇ?sj*1;Y+vK^ Ϲiw݁@w;;=^}jyo.џz֐q9Ց`<_tNF3 OLZat%T>3׵3g'>1#ymG붯;t݁с~Qh\ew;8:A5Fma `~[}ܽbxHU+y~lE/5-[L)^Yy#{bހF2#П1_ͤ XzK&d9!8kHIC. / QK_2 9 2p0HDWFϑ}:}W:ԑԕ6:Q%:M,:\^5Y5/FskyXe}Ydukɉ:a;w]GN\W{XŽ\jgY}c݁@w;tp}YԪ ebPS{EӸ2=xNI<нgO<18sKw%{b {11L]a=g~&ù/R}g[v݁@w;X@(ԙw݁.Cm^޹-7It4S0y4>1UdlOD<<"hmUmMgHʹ$obѵxvqy(;3|zɵ_|sO\Y:\y}lSϸCs2?}bx/L/Y|lbam.0Ĭ'%LM]G.:\-䫃xcӟfWm}%WbfRU߯u3g}ËmJXiOY#}8\U,}\]NV^ŏ|q6 t@' tkcfɚy$~1rϵ3]ӯN:xuk.G^#?}K̋Ǟ}w̘؜׹ӏ8#.X#wZ`Xf绚sS' t@' \2?v@'n=oLM;9Zgqrw{~#JH=/1<cCtr`]|ǯ=s%އ~'>:XX7ypS'ҧ7C /7LyH6߯Gr.gߣ7+ufK=Sk!:N:gMky_SL>dg{?k귦~s wەr5#f֧V|g ?*'m+w~ Jn֪ t@' t?@' |F͹7|84Ȓnb!3Cک'Nc'歺}gk>Է3%VʹzXuV ܓ?fL7uy=7”>?0<ĆGXl̈x12M|K̿[O,_It6w }| ~wW ޹E=pn\9Wfd~mġ%}hO39[wiS;Q怑N6)+rߞT&N sϹxƙYÛ).N-sf<ϲ̜ڝ@' t@' ]x5]x'_֚K_ׇx~sVRʁ/sSOƦN Rfݕ/+65N3E9|@/>e^z_o/n3$K=GԧO>luÜ,X2mN#yZsן9ϐY#{x <.g~^ګ'WbO6_M=V\G9q.Jcϒ}>8Si>{:N:N#&=3'o8&ƚ>4?K yt_2^>V\u@' t@'p̽+:NM-= {)w{V7@' t@' svk~sK[2{~^g~O <鷖lKYg~b9+7}\.%nl>"t@' t@'0'eDjw@' Ɛy#~%Q l3,i-w=K;]X]GKϼ=k3YxV5:N:NL [7cOv^88?:W.rZ|tvߚCf^ѿ8#~l_A7=y3GlyÇo!1Ʀ6:N:Nx[N:& uN1\-p/:k۴$gI̊7yx3.|lΒʟ|<&8|~wNilɛ}L,vŧ[5_nlkq4ۙ͋.x酗_f ο5e|A/ɀc/7.fVLO.s7}xqH IDAT̘I_bѭOΞfδ^}T{(ϽymAe9֘RoZ׸ɉV;ww@' t@'&B;=ϙO;&KH6~V{1|HO>yկM;/\ܞ?mt]򽲌%_`/c+[rww@' t5(s}=m' t>ݍ*~67nm\t2}#~{' 7xQwڃy)>l}]9cfb>L~׆Kݾg +G+oi2z' t@' tL/3b;N7HoxSC:oŧOuӇu]ִ+9`ʵ)W9;Eǟ1})Klae\n%L̑%\񁋶HO=1Y 'oűe97mTbRs&{3%\~K.HЗԭcx)%G3?\}J;Й/#:|E0ɃJ^H9W;uY&RϞWr<`WzrY-% e*~Em닟isϘ\k:Ns3L7IOʙߘrb۶鳏~,0y~s:N:N+L$>)uk-]^ScקTOΜ-}مK=$Z[3NER:N:gM/Aw_Is+tK[?R?Ra?C#k}rOXgrӇtsGgJkwMN -:yb ?EJAzNp+.kk+Ϻưѝg|C*qN_羁~cSNyJz5陑+=y9sg>97~ {āO\拕+cC|89ߩ9MI[|"nbʅBO7erWoY-Is聝uSR 2C1ɇ?*4?niS/fN;sUoN:N~V'0^>mbvE䝶~y͟~ 13?9̥/3Xl[V|m ĬdbЩ>Y;1+^|Y[lEz޷rgUW¯si?Ly9`<{>m_G289 t@' tg)^zs'>0_b{`/w6`K uv<6K];}7ܾ좏YīmNJG'V +%w2s' f_' t@' t ET:Nx47*)z>0U3GLS7>%uLWqrg-s;$*/:ֿ=uk5/ncnJ|bc!+(Ӗ8v٣uʚf'Rrֳ&7}F̔`VK3ltzE߾#GM#rYSĬG19*W9tc ?keϩ?Ÿ?{~k-+;N:N p L$k&j~̓[xo-b2?36Þ>p}|Y}NB #_Rʗ)Ve39Vf[ t@' t E*:NQwyFڛihS>~wܕ~6gJjɃ|_0<ڷ\YK#>/أ=+'c\!}b%Ci?e:g2H';k˩b!;ot6kO[N}{L=fYlwuO]y67H9D_-W1}W0`GYVQZ'5f;.g u|Ǘg~/ߌGSbѓX t@' tg4^iK"o^KO̘xb<3ns_=gS;u˙06|RW[ձL<Ο ]9uqT[W7ms+;N:Nx̳'ZN~ p3>z`!KF$:{U{_4ʛx0Wi#{ʐcN>S£orfMtqHcc<}O\JrvWQ;uӯ߇\YO]G$WybwߊgѶGz{F[Ϲwїj/pv|́]|O+/m;oϬ'Xch?Sңx3N/>S:N:9W 9?yOXЉ37kQ|Ni-r[Y=w%VΌy/F\JΚY '%&u7@|@' t@' | E/N>./{*r$#iQ>1ybLه9xoGYSm_ډQ7v&kX=}g}[i/aQNl.3@]#x|oL֔rOreL<ҕ:>k*M >] d?퟼Q&\y39)N9gM=kf\_bϪ5SZXn?&$d,9γ%G`I3tٛyg/m3f^J;U:N:NMkG[^ONcyM:81;N1\Ws32=9ӏ}e,σ\mqWxf|)圐66er3~|.߸XqSמ>y*;N:Nl2i?@' | pSinؽY6~`}8r$Gpތ/|)ɻPF]o;Ee{b-nW9=uvk_֒]R%y윑̾SuÎV7f/?χmL8{bQO}&=@/7؃H{WuNI~3Gf=zf{N=;s& 1g6H 1p0se pic{'7rɏdQW6%13!Y*oa_wsŖ K y.j[lJbUNGkkK>(.v'7N:N~VZ4{Z(}SOLYy׺w~dqs33V&Moi[xn7j[3ɜ'}a{龜|r.Y%sK5_Ieg߂9fHOo]@' t@' {L@' 7olӧ79&nV}CDgr|H|ɛgqq;i;yQLIN`ӟdžM}W5MiMة_IqH|g δq͸= ::²_?9gL۳#*c:+qNS'kZE,elhfrhϘ9+^k'ѯ-ߪĂ7G 6`!yN 0gi";Z}Mj^xmtT;cMnbaק-vSkOsh[C33~|_̓_N+WI0syb)~ G]:N:@_qX' t?ޛu7ʷN$L];뛗} ^~Q?1wW1|5no}ԋHptk(}6-شOG cL:Ӝ|rfxG 9@CWRޝ$DžnY۞|39]3eren7s'F J;y^I0x}f<=rǗZS,[QAߊ>SlknG5r>Ni{M]LtўG{:o:N:.\s1yɑԉF6&sbg+wM|˼#t̜\Y\ԯ4m51zCL=cʙ:N:0( t7|{s5C6<@և~L={ ͣ7\Ǘv]g39Vzz&WN:N~z4{:f^'H:1sg~tq$ϸ9OG)ǔƼ>_r R>1YsH:~|疐7n|3L|Cu<`k m*f5wUUpw-')E7i&o9gNJӗ:[5Mgք/O}egY:N:2yu1mN߬py/&~vb1/NLl T׏ 2˗dC5gVxskˑ/%̟9G}j˝9b"%Ľ~ηN:N2{:NaFyl-g?H>u$x肤tZ ̜3>G>Gxbg)'#<k+o=.C>z.1{D֦Ng݌e~yi'xJHBfω+!.,3_yJ)'p=I=kꙿ嘱g/֚+v3^{A_+ZEO v`xJx􌡳V>7Gҿ'v⩯:N:G&eZs:N4oڹ9[ͮ"|OOg`GeOH4f =K)o'o=Cw'vb2fTڜ噐er9W7嬑6ii_giq$6{N_ /r£N?_}#_zk<ĨeO~S  3&/Imʙqs3'H)O[ʃ?c'&uy_8c[zrΕrO?,wfam#)c۫%'~rI=sook}WamJrb8~6߅[{=냸U:N:6k5:gf&L"טX|c{uS Ƒlx%F晩齋u 1#Y JscgsN Ɛ|rCRC7Hc?۫-)>2.5ވS++C=ҟ{>k-fKӆC/N&|Ա_dɱ:>-.YAL7ZmR.uk~F]8+/rp̵~6:N:>zyHolK^{L=_/~?\;t~.xҍ)E׶'n}ȩc^?_wsX' t@' to@_y t@'p7ܘEG`p.AOBړ1-|e;O IDAT'-?v~13=𫛟2<x{Dw?]0Gg%q.#v7^GMtVrCr οQ1Ju%-%ˇχW{&])F;g/1ч{e>~rI{Փ7 on榴>>0''Jsԯԏd!o~>)SogJM?ߍ|@' t@' NuN^cчt1?xșy57:|_~? 9~{ menj#{VM-~u%x'эO|jύ6Kc7$=vu@' t@'21:N'7ހs7ߛts}gtŅϥ.9ĤlJb3OniM]<̐'poOߴgmlaQyzb{Ϙu_1rK]>|{F|ɫ4O3e&y ξྲ|G_tSOQd-}ʣeb5Ov<ݏ[w7IYN&7gyխ)~Fn/yӯmrqGk6:N:gN zg|E|yE/p]&K3#/x-=gIO-xp彪1q>{ꉥa%ƾ..V\|_::N:Nx`}Q恡5:N^5Q>d6 >~+ F?.yf?cY3M[}0*{F7N2{N^.8rr~saĞIypW4V3n3x>K]2Ūim?_|g-)gJKkR-ir'ʿ%=ﰏW_Ko׏MNVnqXJ;9IS)Ŵ{>ΤGKri##^=\;N:N:fw 5.y`HQ̗2Opc9O_b.^֓sG.%O~GG<oKiOIjEMKw<5d,}[)?[|^>L=ƐsQ|θ}ə+s{9[`<Gd^߲dg=l9_똃ܭ<?L"$FOɹӞ-!6}[sg9ϝ9T$=ٗ W_' t@' t_e^cq Z\p͔kN=sЉ5Xډ_?kF6'o?${u}%>m0+&%qq%"?l%m1X`MN%Wif\U^}@' t@' {L@' tM-%?)i>[8M>vs>qH"l1o5F=X &{S̾ɟ5HǗzb2Lډ&o39!G\<be.uQpȇon&?9ao[uyvlϊn.\753vr'JyO={<\=ҳf9֣ߡx)w /7[vgm|՗'>cA]t%]Nr:uyl}+q{X]־-:N:<.Z~WqG9%אn#}9{Nc`~^yf:1t3}>+Hi <,}ଥo'XM]^H>p{#z㇜oiz' t@' tM/<4&u@' &ͳr#v塇[Ve|xK)6%qrV Q,Mi|rM}p>!5_>Yf$Ǧ{ًߓvy Ξ~fC7Yr0e7h*a͢;m(#GO:uݹYOnd!<핤7x9}iϳ_];yf@G7o8$w7s#&Gn2'#qګ`%1VqŦWr:N:NO뱣+1G!|u/p͞?6gN {M73Nky"V&ROimb)oqw?sw@' t@'^25v@'N\7]Ó`#.jZ՝`}8~Rb!g.zn򤤞XH۸楤79ea)oclr#ă]̎_nskmm6sy<?ś#?dlȃJN3?rѯ1\p8g }3 \=2Gl(/cI{Oe;ul}! bZ6:usYգǷ.gClq>}$ ?:21`]=/~8 }n1N<Ʀo*;N:N2?hN؇,>ta<;=GGX93'{6M8Δf16)ƒO*8ʌ˅NLg,.3so.cw3{vg'dYC]?6]8rK͋2>#F+7uslO>yns/yO\gצG7U_N/;uWxW̪ɛ =CsFn\Z5%񝟘=b,HKdi=٧1]R[ᘹ;N:N*Z랳<vv亹g/ؼ?_Quϔg`ĥ){_|llx)}~}ּNy,ŧ$&޴36s9N:N@_gZv@' \7ԗ=#u˕|17c{sS!<͕ZR7Ce>s͛2fw gxJy167 pP)<71s|eGyJ`&۳ه_-X$>c:q9b!'zč#c)Ϯ~b>*f?J:!뭾Y;3LsЧM=|g8gȏX-NiL:#ܽG\u@' t@'Y'uk]7ו;>3'&sSwٛ5%ݥډ1<]\ᐫ:N:@_y:|<OŬ5%_i~xuleo<`ɕ ߗ Ҁ徑Aqkc%8ѭ2{pÞ\흤=U.Jf <2OsbgoZ\7XcXul'ycmI18sCXtg¿I~)<(ZWg߷rQm>ҞQc$뀛+3m_z٫6ZϞ]qߡ8b'L{)yuaqlt7tɅ+\&nsi=sGNv֊Xл:N:N<(.fu{HKA'c*O/mxgLo߉zEGڿyƬe<%\VRGGC!\><VKwouf_M.qĝ򘫽;Fϔ36wm /yS|gc3{ywS~8vty3}#wۑdnW t@' tw@^+ymv\G9y =#k>> /Ơ({qܣYI17e[+g,u肋/5팩0;ySދ;N:Nx3YN:Kȇ*$L{APYmbt{"6yCr3rx8<~gRO936Ϣ,탽YS;9HִW9G>y#}SV91+lҿHdo+~{U5 {$O}GRlJ|7?}O3˝{ýϚ#R<0Y =m9,s6/~v@' t@'&D)1xN 'GbWaHŸoDhm6tG]q.QS`Y[f>'z;K.~|,rg`͡s`Xi#FߔĜ[:N:@_y :dDܬΘ#2ԿrSkU.:>`o :p.|`y(§G`=2~if#8{ޜ>)3օsn0>s9b.Cy~m9eу};@g^tTM9,mb^b {>|+a%uq3 .Wƭ!.c⧤wXuk#ՙ6 |-rҟ]җ9鿪 Wr\=)ͷ&󒹉ĿN}شWX.'?ogj:rVv@' t@'U&%?Qy _ߴW\qS{E/Ǥ䅘4C bgKϘy$ggL(sk=CHGV$ُ~z_~s>k<%:N:Nl2i?@' | $%G>{LrO\/܀]R̔`&?ѧٍ~ceoYNıwx{Xwr᜺>[,mgKؽK~N82H6gU<L`ν^g-ϐ[{ɗr1}WyUQl?;⣆{3S?{uMy~s81i3kf<.X}JgN:N:?Ny5fzkSd4K0x9F \Kz.M?/d >L V~rWL>Mupfi+_5ƧZ; ^N:N=(쉖:x<@7,l>[ා|b<1G~1y7O)N[ihG.L!$|b[2w\J]J+2qWy2G]nyvU󉡋1Oz)ŤO]^v1t'rlJf9mqxI zj[;ȁ̕#zY[N?ulҞyni~ē}&8d>yg>+M-+yɺV\pG8ًٟXԍO 8ϝ~tcON:N~ W0z5*/(y18?_G} WG/y>m,}L{'~yqG-Y[~SaTv@' t@'2=:NNo7<Ƨχ">\>O\،;˞[R>FCre0l.36^g.jɥ\a@+#c6^rH3s0_ _w |/\#p<ֲɇɹNޕ_.S{.rflB~>0Mz?}7&gjɅe.~\KL~yM[>HsŦ|g2ϵ/&Oq9Sڃ>QR<63W[ߑRz$'u936mqSدk˓6= t@' twP"m弆¿OuXJ9t!畴'5gdNMb#~~~|GxbY|s)F_r?DL\Jk+fi+_/7WW' t@' ty}Q3;:/6&ena<̙=ѧ'?Y^lP'9ќ Y;[ාev)%+r2v8Wˣ$yd;7g2y'֘rƵW\Ϙ)9S.`Kl&JrQ^AiJs#X$<ٙ1t~D>rdmX{r'̱RLGSg^Iav2ʜ99ýc*oO.1┞E>Hn*;N:N'G8^p{?=6:f!үakH%읭 >\#]џ}1ӗ/ֈ#9gn3z' t@' t5(QnN~ b%GYݎF[3i=ɑ,j<%CYzrk;;bGg@]Z J|̐əȡzpK~|igM3O.L3=>͚m+iؙ^gŹaVW8) j7fv' t@' t?]kqoNϿM{?_Gdtw)%V)N 6K9Jqit}J+bSY^?WIY(N:N>j}Q&:@' | %ܐ@%ތPĘl0Mbd?Jr={Wguڞ [+51J_O)> M IDAT@nl6K>k#W-!uՉ+5T!/>Œg +ωm \<bV:}n+vx G|*LR'b^#>{||魯ƧyK3Y {$y?:{6)1S7>rd%O+bx>ξEgeY'GK[[aYG\e' t@' t}}QC:/6nsgFR?Y_:[WI.a[~q>HЏ ~tcʬ%>1Hs`]7q| .xYrU-MuO؊}ԧ6=:1C>:58x`|H o5SfL.$}̘9el繧=϶/jMl+չ)-2c)əGe>oqEE~_X`K;}书?y(MQ`ϖ9f⧴?D;h:N:Nڋ{:6u޻bcoGrVR_&g~+qG6U/ؗgwGq3v' t@' t?z}QG t7O87\t7M|$3As#FGg)̑rL~5''3̥>I>O-%F/) ,5;u[׏<ԵꈹLy6uֹ9C .1yFbKlW0e4v$wrAN||wϒ{_Hcƕ3U +9! 5k7<{2͸Xb3n )w1;ƟwU3?ΚW t@' t@' p5HX`}A<\7z-^8R6 s-s5{^sc&fH\rs :WU؝S' t@' te}Q|:/>eL9f>  oZp1syA'VuGlNkFZ|YGGwɃ>:;'yPaMni9CNWCn{O.3&'5|蛹16y5{Ϛ 35[-eYkʛGւ#Lǿ%>՜U>>K^ٝYi}SMV\~8ϞǪ =ۓO_橋 3z4/ިI-9Yˁ7kϘVGRNԓz' t@' tnݰF.e~{?,VkK/+ql%x}`]նlt+顫:N::(U t'@>PIj}|g8s>x.΄i9;yb;-HyƩavRܑ$_q޳9=\+,$_7uls%A=O,n3Wnygtmj#wxk 9<=˞YqI9O[+.|;03=}ɵW~mN}~}36}؏ɋ=Nuo%8VSN?vƎz%f\)ߙ-n%*^_' t@' t瘀|H5u0%cr|toV8YoW'` IBړ21Cg*r:N:N3M/|ot@'M' |@ƒK;{nYJ> O[8z<a1'tdVO[=meӗK8>s['sխEdoGkL左ڷu$$69x87~7\𚫎6ַu9C:$N>.(5@/عM?9:c؉In8kG^񁹊ܫ]̵g9+ĭxҧn2k5m9aee-lt~H~c.++q_ɳ6̃[29ӗzb{ꙻ'j!a뛜w t@' t@'SKymO޻1uz-},Ɛ.cډ12sS's4x.lD>2>% k{gV:N:NO/|v@'e'Co=xhA Snďr2_=yž>撏[Íc|‚UΚ=3f$梶#?఍y3?d`,porȍtD3Fmt"~{#^n}xI.[N`z㿲ۚzm=gQeLbŷZ;b)}S'7yV3؎>L-!R9n1ߎ F[d5weJb5ynsw꞉skObkaiĬ3^>{'97?qp&7ɝ, ?l1 e>TGm-_mޭ=g?&_?&V;%PϖkI85gͳS_IWɣ=br{Dׯw=cYz֦Qt|^Я`r'_pӏZW3߮_F@' t@' t'6aJqJrV^H{אػ};qtqv͚~Hrv'^İe냇h3:io86r.c#O/>VI{Ou3Hwb̗owr`f<~Ik!/˭=:N<Ők-jHÂla r"i>sbv#ɟJ?7 OW3$Ob;}!^2է|}GrrcΊqQu% ګ9CgrW_' t@' tzy- Ç+~յ?kMtzU=|.cS29x&1%yG(~;l:N::(Y t7aVG Џn39=y}xe59;G68{@GYC_aQ&s>{じ~)ə+ԁYK3'g?̙3v]어s6SR=K<Ios$_y6b? |xA][I Nj͞>ȡq\恟\ӆ3ȇ->~0,2kN-{?ciã:rO?߷7~k,V)FLϞ񥭮[|L[Cg[G9s>ʶzW0Gg1Y9 }~$>K t@' t@'p}^M59b=gJW~\Gz-ޟrҖ/Y!zSv}'zJbl|Z:N:N.29:N$|t7"qxebb YG)R?i[jGZU+\:8 N y;~4'E S7\ <TL=1̚CBud/ +_ss6kȕGb =i-kYĽNߚߚȚ˜֛fhf8) 2'lfE|"ԛ59]y;Hn(iÅQ۹Ob᫱-uo00zMpF,5]C::NK5>gMs[ qNEj]b#>%8uNY_ۊJX#c[urE}rc8K2a 4@3 4@3p]lOװH$瘻03xn_ Z=_cO]\m튯vhfhK~PR~zfh.2HG cfN8E{:>8{H~$N}鸜f&k,չS[m67X<k3o=]ǂTs*WkTb2uAuXoQNigZl}vcmssQ]fv^0չ/qY?1Kz:KxvanJ2qUғ95_|qdol5W{e3$fhfhNqV$>C1^cRPq~X {my sN3֕Գ5k$>yΫXs/׷d㷷@3 4@3 gA5@3p ld.mzxO|I58ʬ,`YO7zص5F-gdnfav|%wO[~gOcN\WƉ-fd|E-_3 v@fU?*VzJx5nޮ>|'yѼ6VmʘܬiY实~O:WYu5?UO|l[[!N<{d[3[CX[wK-fhfh>=y>6ׯb4tGLy%s*=y'>7N"ktLٓM6>#ȗymhfh@?(s\^>fh.0\Ts'M0>o ĥ%k]5#ÍsGfpؒ-pĖ5?ǂ_;zҶR ybY'7a6gx1HcJ1K>c'g֚$y]eYجS1ԩ{e~U#[t9ۂcN>1H$?s_n0L1~eOڻ`U\9^XƗW%vXɜs-j.#~d|W7@3 4@3p89Xz/m)=T쌜7nYνt<}jznk._JVW{-c@3 4@3 AJq4@3pJ/Y>7&VLۅŷ\zn`s/qr f<Wվ'l: VB,"#Ĝ˘2kCK/r#Ef/W֯v51وgOlj98˜>'+k'ǧgln5ۺig2g +f?pU7w~ۜK3XcQN2R~'6g,{'4K@r'[Շ+IcP:}+3Z?SY~׵?Sghfhx[bJrٞ'"s1lsIZ[8_3r>1y^̕y58un}NI̍?UXe sM^@3 4@3 dA7@3pbliE9@Bp>co81<≩qj\ZwI27U _/oҘq}H~w+Qe1N7G7E5o-of3*ymK~bP΍⋹H}́7Z_Gy>VS)7f)X=k=HDcK.}k>\j,1]3LOLc|֨[kN@3 4@3 GWq/`y-_k?:Kf1)fRO\gNDz\|G5lfhf0ʜWh#f w/i=oN7um]kΛ0΍aaֿEZ-`Cw$l&B<"~:3foqK37OL7bv/IkQT'zlo!oAִ};frS7e^SeXѭe39,!Ok5Fʊ&~#g|ujgN@߅昧.yI] zK-}Hk+!šY*rWbƑ3ZTk@3 4@3 oqCOF[l]3ܜ;z^[x59b<& 1>/bGjXgT__ne3 4@3 4'~P椽}@3 \d{Ady K7z~}GclM{eL 6\yԇX ws>9%srI?Ädžy9H],usznec3X)ʼnzʪWzfhfhN1;hf0z^tsSŘ[ra ?Czc\be,dHϼQÜm>x>TV_><vGLLW1^%ѱgo_k^`O}-wW̹~8:Wm7yp"dE >oZ>̾ĭUmc鯹:s|RlՑq}8k}&2GY[#;g1uS7$ןoU'~,yΐ5RymvĚ?f 4@3 4@cuӦ:N9SmckU'a屧 &y3xY:zb65-}# IDATF>1k11-fhf8I 2'cmf;/iM|0X AG˺YK}Оky[cƺmdfҸ:ʬn0Z|=fJyع[˾gg Oj|_RMS1=y<0>סֵgƝ\87A}踜 L?:[ %!]UCŮ271Ӯ5b31C:7q5I/Ƒ=cF_[Ǻ=.m=mqc#)n v߾fhfh3q~uؚf x^[y ͅ|cHrA-cĴ6^eֶ?RxA =7>֒T쯵[y&qY'un0ys[i1Ʋ.-}k}o>Adk= =|f%dk{|ֱnJKŮX7{?yؾ.6]X)`rFr%vGqkԘU?3i`=\g|,LLI?=:Ka|kWG96ocRON!|˜}I.vҦ'x6Zc5 9ZӲhfhK7wͼvUͨ>ߐ!|n{xk gN'_Cui}lwYųzFx}bSf-}}r쿆UgW|Z^a=%rO=ġ ۜ-:=c0+g.ĩ+<3/sszGkQQ,q'^gEbԝQ{Moϓ:kfhfbf`R;qlXu:αp݋ty$^s̱Κ:znOd.Kk-fhfhN Iy8sW_=}Snzӛd8F xyaˡF7=kjoi qH7ysGJRl-NN177}ꊳ>v/9Tr8r[/R7ܔ#<|@GKkgM|/gϾg!^'1Y2αa)g|9GFzbGF9ʗj:xl^+89H::K ,k7~}`r&s΅K;'(ZOil~YÞۧ&yrT8R]~K|mī#6m@3 b _tUWM__:whiVla^eRZߥx>Nzc<绹.㸴ŋӶ~eqLEpgG9 %ҲR<_gos)e g7ty'f_:d`;vq5[_,9(>{ 퉔Ե&i[ox#k=5&/o 4\r}|k{^?я7b8UK^Oַu}=q\M`3 4s&ǪSdsֶ.~qƐK\Nx9Fѹ~s y)wOʬkK)ѫhfhf`~Pf6ty_>П9]?^ǧ+݇>镯|K_~)-o$K] >^W[Rb}̩|K}jNͳ}je}8w}4>.y[~ʜU#W[jp|8[gN\R/`dJ3.g3{hE9sԝ{N:%{戵ǖ_>𳵭x}Ȭ "T/qwXJz<İsz96j#{lw~`ו+nd;(6- 85]3YfWo<)zbs~1)>“θ>kff8xc;=iOO~rO{!U苪,1yg>s7nq[L׾_~?g 4b`9h܌٣\#Oq8Տ5;QENb6JX%ycײhfhfL?ַt{s7e/{G>ӃaW\1|S2?Å:^M}Cwmo{:8 asA\MMu1k,:7Zb1<M;Gss.kunśAkxc9K*_cص6uSe|P\j;9ȭk˜%:>j9O^](_k??[CبnM?+=;YO 4^g|-o9={~~l(ȧ N++痸} _8{7~7Jh#e`h-6j޸2ӗqs5c:̱q"@Ͽq^O{Z Xtv 4@3 4@3pReN+}I0˿L7y_WAu̟'>s#t_M:[9 xsɍ:1W\{-J'/y5oO~j=˘rv|k]GR[}^75f}- \:qQL_ֱwJkz+^[0loQG?Z,lC"-$7'G']}s\8ώ01g@iG΢ 9f5_jr]p΀O}W>QČ+w,ըׇ>}O65]L%q|oc|1#izo0>{g}}M}N} g>ב;9[bՑ̢x{X7c7O?S?5v=(s;ak[~nXx<0}xOc}>^ 439Z65!֟F>u<6oND03,LJqcSѩra 1trd&1JDjfhfrl6h3w<$s[Og6\uF7:?^sD1{-PB/Iy sn䳆si#)Gqg5_VGeQU:iW9o ~rcYdȶ(/YĿRM+%Os7eynm<}>5+Yc>Ȝ=)X ;964'e=>cտd;qmֵ3e78qebӗxrQ=k\PkhsԷ;>lHm%>|5)JsN@3pt .w9uW~<˿O@C<0Az5@3p1zk>S_k19B1$ ~qE—׬|?6:G-Uy˥slyO~G 4@3 4@3p]ArҞfs~ȉRU-obyr`я4/+47[jٖ/ӟuSO zT"X})1bm_c6fβ/\ħs%V}+NHZ#c5-^iS/5X:7Еyu֔Σէc% .W O>XƘٳauԵ!h+i;~mȯJs|o&⭫ԏt/Ʒʬ9K~0kq=kw[r|mR:?cR7n.ӟ3RLͭ8)c|,=*s4@3 xm˟ZkUmZkf09-&)yn<-s.EcO 7<gkEgɟ%_'FZK-fhfh@rҞf1//3+z׻N]5VZ9H|)g#|Fו>q&~~ksS}43u/v'_O$ &f9|>NԨ8~ƞɍ?{8kJS#%\.x'}M}>țڏ|v}}[,̘ج%_1em# n [cUq髱|qͱAl{|`s ?rQ5ˀ?_uzғ4}C_t; w!V[Mozğa 4Q2pYWqWv3ΜΚfL?'Ag1k)s8VQ=vΏרY [NsWGʧ< 4@3 4@3p0AY%oo_g^~ ߉_.No}+rb'kyƈqʼ1EJzOMn,k]y3_HcK{Ic]טv^!6?wqHqȼѓtf&\[0W}51c2/|M1ndf1fG}/չ6dC=zQυq3TI}i/d]Ƙ#X}s7vbP:ҟ\%]>H;Z 3d=k]mSmC.^kxc#|OүO)~c=G{Cϝ7~l۲hy+^1s{C2=ϝnrdhֽV]xv~PFu hC0ϱ}K-F~}Hufs43w?n~[x`sɵ216;y'o[q%F_fhfh 2۹jd3p1ӗO}fOO|#ӳOy_=z@?hqԧ>6ڻmn3 dp|w<з$E>חXY˷2$|1U8`sm_J)b :1W ƛ7ÿ%ߜ5,:&gS:RL̒$/Y4&6Xuy0e>|TIMqa}< C>eh|[Γǚz Z;muj?%?gky2 }?nq[Lm6w_}??m/wLo|//9}mI\ҵ-wYhf@8WٵvavųhQ ˔yMnY꜃ɇ\_&#W3 4?p@>}W3 \xA 1g?; ^u{g=kzcs 9uk8"di=)O~7s Ox0K~fMo"䑍.شGx1;Q{Mf:CyY~0aX7}8bI7pW%I/a>ʙ!҇n_$up`kM|V!!A~zÑ]X#DC1}PO6XfbSXM]r|YGw}}cL,x@B(31p~}Xw6|ԕկgqm>rrbm\?8} Gk-XFҟ̩X9:5ť$1!]d)g#d]tǗjFZ|+?I׮9 <6 <Ϝ?#?~z<'~~a :k˸#|{klf gי@(y:j*ޞ;}UzI$ |K : |xHʀ'>1vm@~˺a;=\wx0 .f>R}慿:rz-sCҟc blƲ֚n)>{S&uCs'a%sʜw4a3S));#'ɣ:ln}|͉υ%71>tf:߿yZOo67sh+v6+_n0J<+cgqEӇ.s{-ɌSC'F؃1(j%~ 5=q=1Sc#iߜm<>b~oe_K:GYKRHRZ#|.OC~B; .w!?IO?)Uză,x3^z:,t8KrG. 43tPPkn-8$_kD(8):7J[5z5@3 \ < ?{2h ༴&@3p0ُ\7эf󪫮JY:f||~Y6Nb_$rKV^#!3<%koKٖ[ιu5TI]}k=KčkΉ4_i^Į㫲Ҷi_+ZOqĊb|cx(e Gdߪs ~DrcΛuܰ.'N+yٙɹ_SS=롻үo|gN}o<ԍoV^85G{$b곆<*Ir\=ߠ IDAT702g:~Y$nU&ƴKOjg^ί..<#>O] 9Zo yإi-׶$ckLCis=.k.Iϙ29suW?; y588^\9o 4@3 4@3p0e[g5ǂgfglۿ(91__QmDt/.>S#?c5Hg5^R'N;%yZ5'5yn/|k!pwEϙZ`\t{k<%K>@,7}P_RC_.f-9>o! |HLΌm-0+32ٝ ,[+f`Fo>ri{\JK'>ktݣeOugK [)vh>}Uf cՇMbQ5Z,k%wΨFbՕK=2b^zm7f-u\w&߳X\3e-mee8bA,yɾghcp3ȵm.m_ׯ^_V_&{7A\eSf%_kTŚy#?3ݞsz \gZ"97e#\1?A I#ޫhfhf-Gף+7E@~Qkvzk_;ou譜Lws$0ɵfc{E[uB9/Iqڵ&N5~K3X1sFҟkG]mj<ѧ\GR3l3ҒQ?cz ͍3ܒ7θ_[QOImpqc8/spχy nrSRʟ|z:u N  snqUU^G\ƘET3ΆtÆ'bػkmb.k$؜#Z'msgn!5՚ډ1|gg>/cYcƬWqi鵞 ~?kX3 Ov]r}{OD}b;Ή?gLCi2PWٕ32˸v^7T|ک{܋%u~es\s‡*!ܹru;I|6@3 4@3p.f3җtO-oy<~g#WWg4^*noƋmy"ޛ-\{\&йJҍZ҇O\Η.LOYJ))3J>eԍU)Ǿo+ۚk<0.kVI\*Wo/}p! PJR7.cSAJem=fat粶/;~n|ΥOcw282O;u"]G:ͯ:sV0sP}k=q~ CU13/}^~_OO27_Wݾu֑?}cïOiN:WȚ6UӫhN6/yKfy5_5g-?^/wn 4 x |qi ^Cx/K+YZמHcTx0?}2y=^^[_3 4@3 4狁~P|1}?ݱԧNyk_>_s~OZ|ϮG<j2E<7K }npB7TVUuo6_H:Ǔ.f΍d?YC~c[*35uG5c KJ;_/cMem+u}Uz;`}OFJ~~ Y;0&z˃>򙅙YO7t_==nͣ%r<-62%o/qCkWD,ǂ-/AV\}QweRkc~.Άdo|ԯ0J>Ʋ:XdrOxSR|/c5 n -f0|X<En|n7=A}O|OIrYzz67p@3 S@TR\0=xaΗy69'yq}2ma//nx:6~zw9cofhf?tTvf07iz}҇>3+8c?iO;SaLzի&n~7|t[bz?ov`ǝooL7{c; ~'~´'|ln3Ǜ1Ui6LJo:6wLfrC=r&&h-RǛ>ăf7x/j/!gTɏǤ3tDbSc 1j*snq$"g벾2{Z˘vQ 1G涆qm_}i{鳖r-&䨷*A7Ϙ؊~p+FbBǹlV_~lq@3p~x7_CR'O?3?s֟?z+_9cNM4x?կ~e_e33uRz~ӷ|˷L;N; Oxmnsqih56C0{hNç7 6y{kz+^1_西@^sq/ז7Mbazs~T/K,_l9?acdVj'g_;WF}KPܔ\%7#ŠCkgnXo|Yڻ~ɇei{D_{3:5$KǐuX\?Ƀ2<~j-f18RyַnΓkU# ؜?gWWgMI/msi#kɧsT|Q?vuY 9uΚ_ڢ[.kh5yb7Veαկ5쬽⧎Ǵ8uF}&^;}5ckӥk׽ug ?g=(C3ğWO,pq{s?wc ]z׉n'<= w;ya^@3 s[˸2 _nc#,1Աݜ7943$g0׬pם[3 4@3 42gGoWo=qS]o~קIo~E,Cl磧kMGӧ>V޾E sc z.禉Hnx#ŘxW8Ҳ?qp rbSZ"K?3#k13GNE^=&k.2wT8u%xC̨ƚZﱓoꜙk>Ͼ"YC_}ݫm/pYc_ƙg(7э&Eyoz=/7N1F5y^;~t\sGϺ'iq\;痸fiĽ%F;ϏՉjfhf8fHA9#e:0Po|M)Їzyqs}nrԍg]195iZ5c2O;9΋]ħIO5{ɮXg_g:3g \նģCkSs.8tYI\}qo +LJgun1KKyk~rqĤ^ 4r:sz[sTc/gY~_7m޾yPq߻Շd]~A6 >7YkC2W_} 7Xq6籞RRA'67`/$~;˗j5&װvZ}wk {R3.s#}}c|$㨶\%csפ5ſy,_@3 4@3 \(\\PkW~y~tK8󷺽vҏ55ٜ':u*aPlmy`kdL}me3 4@3 4eaWhfhf =7Ie6caȵ&snXSiy"Ɨ#x36Nmͭ=S][ѯ_'Vili p,.gbNJ>qOyמ87˸y1SZ6l I0nM7r5?7̣8k?p'P;pjyГg],k9x xq3[|y͗ 戩=Q7OiHҧnyLY!gbXͽO jோk`akYci/͞-W 8vf2gǁm.Q:Or fhfh {~/!ύO]k7獞!Ck59Y8_<~e]6g?eyc@fhf82A# 7@3 @LQ&6X\ʌ$K^Տeպl^ Hxf7u/1xcN61fr.QJ|Hs)H8k(oFUݺH}ěƐ ZZfTI)ȷ7xXOAdy[51G]L RZ,$[>$y.)7:yȪ!b~ucKc蹭oi9S,uoKe՗3+ō&3G@I/}&ƔYZQC/<,8y<&!ϞD5xPdKWKM䉧 ۇl>(C<.rc1z|&uZSۅ^)˟ !HR1˺yGe#nKM3keQb3r7_G=DƉ2v:hĠqg,}Kua g[{k+Osb[zG,,klt/%G.W3 4@3 4e]g6@3 y# ^cBߛII Zc.96Z9ԹxjJ>xres,L6O|+ڙE7_>@^,շq{`gL$nԀKb΂9ej=G~{*rGWs+=ػxȜ}\$xdjcK9%,~a^kЛ J|=9U~b*{*k/}9Au^3 4@3 4jx^s)3k8Grf$ۚ'1q#nI9(H>z罗_~|1]q\oÝ|/> 4@3 4@3p8A@3 4\#SR}KkbbfeeA2Vƴ5&JqpdKbs]W{j.<NR'?H6Sm~JTeU[v 0>`#dHl9Sss҇H#o.屣 :sSÞ6qs.tzx)ŦԳ.>lvC|ֳ?1lcַbHF#0jIׅ[WŶFb)#ݙ髶~uoCvY\qc"/q^ƹdVܑ?}ؽfhf8 ,{Ԩsh#S&禬iW sٌo]s0}J;[Wsɟ^#SQcfhfh3î 4@3p Ar֧/^ $inYM;u25 &e}S_p F] *ڙ3_b[QWcO} #-:q66⩧&!Oi}y@edg#d'X1)s Q>$<֧<֫YK;i]}x}A߹jMZך0BJ]XoqGխm\[ʬUvŏ]$6qA:[3}XyLb>6x쬩MѢwV%eW}FTgn;b\S ,iQOgWfhfh2d 3|5K5ot> &˜Ģ0ɚfgQ Zӟ| g\z,3O}@3 4@3 ~P v~3 4Y p΅;"HlwJ.uC-ar7ǵey?:8Cto,5c~ձU=֦^Y_#zrG l0-;go)O~|On 9>Pb\xhAbA_|67x &20y3/"}RM}jDz>,ułXYs5_ò>ka#_<}d|Hp,bۍOďj[KyK}F~}Բ [§5E_%1mt}J}OI4KbխyG_|J9mȑ/bo-1GOۚbSn'7@3 4@3@=XU>yML{ `sO4KW6ku\C@ l8\s+fhf|1ʜ/O3 4'.1>>ocR_O?JUf|*K۾k+ \'f1HưevbW륽}86<1Uq71j[_C];#~ŃI?z)|j da ꩓٬<"=AwlSeyb?f>%N2Բ6yę\l"yXO!f=仉 kǘsf5|ƪ,潭OZcn8#gH|lo3z3 4@3 42vN[+o->s׾k^9uUoyK9Q#ϼnRڣki>(g\weм6@3 4@3 lcSfhv0;,esΟIΛ'Ke膌.⬭&"!˾X0Ώߕ:Y<뤬so4g_cJsSO[?PC_Э;zYX.r#խo/l}>A>jHW|@ay挤#9sFx$}l-0,΋ds>$cMQR`=rYHlЃE1v.|u'ιMYY|1o˵ϨXc]Xxp^y椽eZTLP_UsM}tmq͘qqo.͹5 nc|nft]fܺKWO3g_q-fhfŀ!p##]ris]cZbSC,>Wrx Ƈbxh3|=5/ r/l~hfh%A%f 4@3\e_bQt=/,Cw;q֎i4WkS][I/5|2]=W[HZؖ\0⪴NfL3jbJpü,hpԵF'ߘx|zC2A} 9ǂMo~sNr%E%5}I1Hcs9+~ M )im$nO Cz΄n Y=֌U飶EM0?,;;O!kӇT'G]^.eDŽ=t&ԡ&Wp>yY-ưӇl~_k 4@3 4Vܣ*6eΚ1zb;<17@3 4@3/̾5hf`\Kgl.ґn/ڱ]\{Q$4b> 9cL}O.Zf[Ӹu[Ƭ_[s$aL[Wƈ%YOR՝9_m}KUg)857nqny͏novI>`g~B/̒X93ϕsq{d$88Ybcfl>˱ӟޠdnk;>r}~ŋmwr):91JBhrG]̨6>n.g o?~f-՜Bi۶d${Uଡ_9-o`j\[i{,i 4@3 4a$[Ŗ|GV~k~a>+[LJձݣ:w=WyĝT)٥3 W^ytWד\r _l}갔ί(a"d:==R'̘z>qZϛv̷rf8rn80>MOv$ݹG\jpIn !>B?1~Oc׍L܌uGuVjzxc}+b-}3yW2>ҭ{RJj$ƚK3_9+uSK[ vI:5nbgoPզڮfhf8 x޲TsW<(/}JI7Tbsamks^T\_Lt עp_ؼ'>8fhf8JAdk7@3pb<d)RMޠQOKܹз7k}7eԩ5:ެ$׭mU|}mέw\0G10#>9үOi }R.(4n drf~63pӌ͍$cHg٬ %ڼsߞEmtSnX<$YH69'YHn0-|ۃGns=/Uw]kE]fx0nb΂Ngo]ʌAw-#͆ uxŊɘ.\akScq utzෞ80+SyC|ofhf`+y.+gV.VGmR,v‹FYo9fk.exp]uqN׫hfhf`7n 4@3~Y/ԵhW7U^?Ytdqj_zG^}1Vg_oJ]Ҿm#+ӏoi9YKyƑr k`v}N!JnqC͍6כp@5՝fu$1s<kK?l}HyA|&"x 6mbԪ cgMgN.Xq)'ONזX%Z>\emRHEʞkھ̳YkǺ箸35q1}7|rZ:>kc6>A0V@3 4@3 ȀBȵs]]ӧs^:3LW\q|(~ 9ڗOsnܫhfhf`~Pf6@3 nR S;l_{I/ϨRaGC>&#? ī+YnrĮ̫Rް[땱1$FxJtmqKrK Yk#N ~ 7𹹩)FkG'~Ws6t{(GGDl|YHqF#73GVioڂ1^+i[gIIf>A v4q#l:q1Jc#)wnu#Dz=oVݲ_&gWX5FʌT`AʚYs#6~bvzyfĩayXgة;포qU+뤞m?R2P@(e1puc,g>07`)Oܼ59|9X|X3F{ ?/0]9 zqZ^E2P@(e0e>ϵN@(p'@z6=>+'հo\ڔwǔWŋCb~f?"}ps< s=Y|ӦC?mSwi_?f3J9ɑ9kHؔf)䁜<Ե)i!fH~y=w,"W5a_Ց7c_2@]?Rz}+Pk>gػ$UGj&nsc)w\Hj*gƧ?u?Kқ!^Y}N(e 2k2}j^ů-ur͵69=$^=ky^kb/Uc-{\_a_ *)s,A{Ջ*e 2Pb/|ݖ2P^P?RVl.Lk+>* >yx sGߝ{!s\}̞zS[IO_{" _)̑'_ra8֏7z3~=siN>8K|I_^g_3/vS34g%ƚtӸ䤖5CgH~ 1S/ gLj:Yw6MԍɼY3Oډ̩u̺g=lpޱyͣ1u1weq76y:!KV:8?mԞӷxӟ8|bvܫ[ſ+lme 2Pf{ >+v:Ú!&56ɉ91֙hrRK5+2q΂gαg7f@z]W- 2P@((ww[@x Cth=L=k^Z{z%Q)?֙}HBMmʌ1P8u_OϾĤo`@:Ńs+#W%4%vc5}~#zXm@G #sԴӏ\Y;%ẏ>X/uɽ8l4>Ɠw>Iڥ˾*{rry&'&%|Aik^gc{23i?H㬧<{%U.tS߽ۇ5:coVM\7ʖU~Ӈ|ճ>sėnM׎zW}+Yn}ُ6d'ǯXlXO0rL.R |J?)e 2P>>_vzG3uƧ.VNK 6'o\'VϵrJkf Սq8^0xaƿcf/F^][uG(e 2P2Z(e D8Iymյl9~bW]Ge_?'wګ2P@(G w!S]<6.&Y;o]);W?1cv< ,_~K _A%>?k2P@(e Z E_z2P`ù}5Ow~wG<0FC#Zl_;g.b_&ӾXϞ >ʣ ʃY_kҏ'm`)ʑ~0N9'6}] oagKNxXKŋ2%^Ag /.kXGìw$AϫiM}Ƙ~iG!_wgC~_/ư1Ȭ ,2a=&g-|Fw4y:qzbikĮdb]b?ZQuV~V=ŷyU|(e 23pvopsw0`sWr.c[Þ␌\[#ZYXmk%ǵ^?y${h0<~H֏2P@(e |0N(ez ]_=8Yi1S־b8lď}5+̕1;i?Y[,Ƭw#k(g_سܙO;6 \Yk5;^Ab'nO^B:_Ds0g 1zW IDATXj/ 67'x`LbLb^="W5 @r}{Y&i7>%~֫{m1k`No{Sbmmz3N<{s֗5.FYckceK:9VSe(e 2ݟybd>Ѧ]yfȼ=Oe=q38k͙̏xbLw_gs3'ʜyIU9A+FuLs^2P@(e |lǾ](eM _b7ǘM\:sbkMϤ`ipAKƦ>cY MpF.ħ0n2k0͵:xa|䀫\&Mf'sYc}9ܓ5B'X0Џn/9Kb'j5/˸FbH`&Gϑ؝̜`gFC)w3cź#q76u}/%ʗOr*w^ΫvĸF; zM9'V9`76c[ 2P@ <N3slO)ơrQbYjGkvs+[C2cwg8wr./0< zrX[~2P@(e1e>v@(̀o|%>c)}ϚgfcgGu8=ˉɃ*~:njZucf3mćnw ?Xɇ͑))bI,|QF],9EXkfM_^y聇oYZ)"s_)Sý#sDܝ.c>ۓY羰V7~1{;m#ZPġ#}ڦLN'f/ĊA`r=}8'?c~3Ɯw* 2P@(2)%6urWf )/&iCKU?V5#*g1?gWنL(e 2P'e/| m2P^0az>dqo[pg :=A>>s%Frr}A|͚޽&`g0Ff6sb{tϰa=mHd) \&oюM\3Vkmd^h@}^J2z!{dMk$5MЍA>kZڙ#v&H'yBy8%q_XP|1I67<'tmDڗ{rܒˁ._Y/ڑH[r*FXpV봥N<51ѝ;C>"U~OAO.Z9Zws猛U>0{ *6sXe 2Pf>pu/1mN}o_m͟vt=3 xmW^E2P@(e1e>5@(oʀCՈ{$u뫇xxRўx%v5V9Ų_u{qm.-ԛ5an$cť̾Oemb^a71ms-nJgOAeE Ow9}S'7yy)C8_am]9C/֌1{&'|%3VNkx}^0oaӦ]yڽY~|L;q'V<Ά`v1|6%~l0Zw%q9'm`'vG~ͥ-{5~cMb9mUow$fW}cwȹk.?172P@(ec3ϱM GpZ9ڔ Lĥ81Īw}GI<øYG~>x`ˑhκycW 2P@((YtY@I a;u0͙-ga029rh؜3})gȑz҉c>2#kNӟ}i3FA~rooŐGqOsK}qSRV~vx16{eN_a?p Xt1I-t{)H8!k/6s9X;3fֿdo^Oj2.38kZg'+C;KKdY_5G֛x{g];{0r'y3F#/m/G̗2@(e ǀDww3f.úĈö9#cY~t9B>Ɵ~ߌe>?1g9Τ<7`3s6gɣNU@(e _(k_v_@x7 ć ZcӺ< @2 _#29q >:|d_gaަ1/}XGk..%̗;}O5}ye.|ٛ>v%=GNn^!/u%0̅n>$>1g>%uԉqXuSӁ/'~z`O,Gl sdL)Cؙ` b{}Ǫ's*ɾ̡GS9:iWwg™JU̻9ۻsogΕ}eqw}?.nuY@(e B qiWwO)=oLi5uĩ[1~{it~ن:qρe@(e 22v?e w.nw0N,cчߩ>0aAEpf ͍1!k1}9vW9ě8lSǖ/%v^7/t.͚\xC2vj3^i%us]Aܻw/^xc=qُgiG5Xa#l;1X׏df~s(G3ׄg>7@rep5bBv2P@(e2e>@((fk=kGC66֩y.ÃknWG?{"VɃu0};uq屟)Æt:է>~m:yH>cIiC#\1yaƗh4J|W!Fo!ӷٳ9{By>Uk[\yMO-Κ:9̗9ӯW^rɓ9`wb:}3{o_0|Y*sJ{9sg~f*e 2P^ǹ[isF^=v*x}bڑkGspb\#gm1J6}SsNkgνE/.e 2Pս#Yț>f͸f]'a}y?}'=ySra Q/&8s$aU>r5Ϲ_YsYjc{O5 2P@((Q;,e ݃ڃ8vu]asZ{:[y2;{$zbQa3Im־5P؃wޡz#37kX1?̝zVGfvl'?`G-&{ton긟C9̍aqֆt;qG>ğ6 ؈e)~[N!:r$,ro#{3ԜS@Hs5}^=⟜<}=#} y5kٍOE׮<˙ѝĨk:̵ ַ_1+@(e gYҗشêRk+=qiG'yX3N5sm~$g+^oܪ.ek_Jߏk??aB<3a(e 2Pg`/|=2P~"wH%.&vϭ8%vg<c!DW:ӯ柸WdɝM}ON|3\W<٫>m؍5a}Jp:O)/Ȝٿ2ѝrZMnXktr2]q#5d2ǜ[u ?Ľ3sɵRG(e 2P>(}Q^n 20\վz8B,\?\vm#ُ|+<\+>xX\4RiϘN &l'JHy3{ʗ%Ƶ6U'_;ϩOHr_Ę )G`+gLڕtZ:کcNr0XI>q(H|ZgēSɥ΃> 6j* R.g/i~A9Ǵ:Cc?c=ȥ~Wg?6Y;cIJ'Nl ׫4}ڍGb8O3?km;li.pwW]xIk5 2P@xw4G]ظoCr߂Ox$C,:>eN9ėhdž4>qv4ݏWap/cK3_~=^ϼOIcBG(e 22voe _>Te~X}u0?oebჅ=% >\f>`+Y9qb2'1}X#ft=_ pK:nجjǗ.Z7kAZ,:|'p <w>f/YQɚ<&u苞W 5;|:qĹ'bSHlXz`XcsăQ|sه͌|IJl];9qO}쫾 ։]}̘;*>9;u`6*q_l/%~ ̗v]'v%gXmħvv1vlJe 2Pc_Sʤ]Sش9۳kmg(%ce1Ę[k09#_Hf3<`O0g)+wZ{ ;{G(e 2P>*}Q^ 2 0C9 j+Y$gifw<`Ϙ1}`8gM/'ƵuW>A'ֵqHl)=>sX .שϺOJ<kXb3YYĒ;k,e 2PK2}tBi#}*͟#GbROH&8uӮ_):1Hq?R c|Qg +9gmsĎ 2P@((ѮhS@xC88;FƉ:[+%q#u/-yCs֧{ڌçYw/uҮtv$Xztܤq̑=sO)H{^3y \+N}HIo HL;v-gH;6Ɓwols}(ar~~ 5t-:yyXg/)y$a/,Sf=Ϟh3~Jh^A_+^"wΪğ0n>ˁorȚ\J1#1NGWõgnLe(e 2P^Y2/Rog&m3\+f\Jpb9++Ӈ>P %m΀׏c8r/c9yZte 2P@H Et52P2࡙!4*8[#m.F[JuoWj>PY3ոu69yhŠ=cw }ZG> H؃ѾEL^[|ē's=́O^뚇5X$gM~Й󬤹Rf~/9G6^?lü S$v;zC|g< pb)їi"&s&6m ncncVy!őuu^HEoa3z(e 2P^dޫc{O3bZĩS<̧]5C쌔,=zxZgNt|ӟW܃k%v'c>cr+F̘kv6ir`o{0^8&eM)emk :rX{E2Ҍ9sϞŰ^W\IsF:ӿŦ_}gDwO3~xiϸ\OXʟɧ>\XRk<1:!>sgF⬕6tj3g{lG?U_(e 2Pa{sYн.:iSn>¦ҞbVbIkp?0 687,{kɉdh?(e 2P/@_/^[/e G^<֦&ε~vڕgv|;3>{1&Hԍ':?Gk$9xP6g q^xuc {6;s '>ISf {S/c$?_ҧ48WgH#W$o>\b?;aĐ͚#ݱ4#6sxsrEN{O|a"uȑ ̞Vk{ :ұC҃S1;;9jj'^]iI>ÚJ+u8df~s!IrØ)=cY*[^\`3G+gwFiy.e 2P>.xd̼k`3{+3ؔ]SjWzNCjK,6=QZK҆ZR 3.U{f>SY/pkHڏ2P@(e E_2P{b3.xW:H(m1+kVvaqʉ^ )q!fn4N;1`š::ro9og!>\~\/ 1~qۇk0d&1O<3c kci-X+qԵ aP=(A'l䂷Qu#l`z8}+G| ٓ|U~ȃ.pj 㭕hbc&F\Hз_5*feF̙vu8,e 2PS*dP]}>g\G<ǶyK@j p |r< ^H~Ou=e 2P@x E}}](ee`+wƌ5#umȝ=1zV)^rvO0+-ngxبԞ2}%y:0ǾvHmʌGϽAǃ#$haAM:KkoH'eKX|`kෞXiЗ9ѱju/g10/ғ~J{On0 ~s+^Ծ3uU6k:u_}' ~Uޕo>ש0U!=$nНs-b]?q7mWCL4ܙ~~9\#S+VR1#2P@(e ܧxKЯɽjCù}%͉)v'^̕\<Ǜ15lZ%2 $s 'u){m%60 2P@(e E_ʵ2P;f Ѷa:)3\3'u<ȧnN}6\[~X$= qyo;9̅`WC<7ZbS7}!αoތI]FzI ;=9In\+ػke-PϚg|e(e 29K16)7e}|L>1յSÁD^U9}d>;Su%?)mԊEz-g.lA=i.$5eΝn~g3u`|Yc>|/ܬq va??`W0~~/6ⳆɱqH~s7׉RV$.g3=s|Ե68i; 2P@(wtXk#Ob}g=k*W9=2sqgm)Gގe ,aH%;mZ~2P@(e3eike _<$UC泟;ndΌɽt9ҟa2Sןv*.mzʧ>ԞnMmp fŭ~c3g]PW}!yAƿ{4Ni/|qa9̋2!/xbo19?rg 1?>;#s;5(+Wuɡ^ͩgɉNrac|;ީ0=iwMԳʾeS5OSU} vxe3V?ko1-jf(e 2qsu礇M{JtG`˵gא3.U 3 εp滌da)=U/e 2P{e/ʼ+Ӿ@(<\?`qoyX4k=XQ'H3?->؟ة WRsj7샚%}7I/]˺c=|>GǾ >ws=bG}_~~Ƀ]쑺,Boam?g}{.e<5sk˚+NLx*siK=n.v[env٫{g=f`\]Ę9ػKYz/y@(e ɀ-lhCkO=!9V2gd΋ gMyeٗ/_.X`7's78bK5ٳ}+yP>yq@g:ɜ7>cHda^iC.n^rjGX|H¹ַ9cFx]qt$N<>uS=!iK;9X+cq~d莫`MYǼʌ#bA;&7k'ӧ qs4}O5nN!ɕחz';~f\2P@(e <ʀ<޻澓K,r֛v֙NUͺWk xn/`_/Wg|IL=S`gxƷΉQ@(e @_y/W}2P1!{w>1id> X3%֙}U-UĠg}Hqg2sL[CܮNƀy\GL?S}y!̋] >acZØ)o>1s[ɣN/ R6qJ1\Gkk%GXS9؟ gN{'͇ȥ=ƙsi{Ѷ3/kY;D'Ƥ=mvd!ob "eLL5OV1\a9wq;Ì8?O]ܕ{Ƌ1q-y1g蜣s$\'٨^@(e { 2PzA[9A $|iW:̧rb!YD`|S(ʼK3ǴĽxLb3ޘ3^f^ܿ=Nk)K<§=XWSqw{C4񀍉]_7IatyMеӛ-amm{uG/y Xgc>`7`Ƀ|`XtHGѝg]ؔOxoeMr[W<9!!/̃v6̍ts>mO"!/8C7Gr)`~kJ\gߎ~;LuƚĆ_˼⵹~r(e 2POc;ypH/O=z0=a>Cg9Gkڐܧ%>uk1|O1Wv p]8?sms 2P@(o@_y+e 2:n|s8sb/9xVygxĦn3v̛>NMwԎ6ۭy $ܣ~)ٿ$^6ؘfě_ .so<7&<[Y<$.qo8uԥ>sC==KI/\bl?gr;k|Husbɣn3(ܳUd?c}+sgn;|K[5v'ό 2P@(/{z+شag`s{̑q7ֺ`y_uO5]`N71~c,sI3krg쮧 2P@((B{(e |b88{x46ൡC_t9Vu'2!׮.8Xb܋81)8k"kc`Xkԕ݉_NW3;J=`wO`?uԵi>|b%`%1uִ nα/ࣖbg k28DXa!/$GI<B.nc k&u9>>E}:5kpsPa=|cm|{t/Hj17<8 ~۟J{X _SϺ;g9n.k/!{}Ս\+'no-l^Gbnd!/kTS@(e ybƕMkIAf?)\ƤE~&qNv1=5b9W f^rjG7kx_ xNgm SǢe 2P@xc?xZ 2P>&|w1=h{aдwZmϬC;|9ΜڬgƤԧԗ6q+8^3GbSg :{nΉ2όu֓;xB%>9k } ks k/cE2g?7ʥgLÃ5|ŕ ,=2][,#a~%q>\_49XCɇ<^>+Se+;96̓SiK|JcӆN#+gGsĂ5~ƹrg^ӦQy苵e}3Ƨ8iF^[ُzD_{nG[@(e }tt݅,>׫ `?*7 & Ƙs9H>v/Ǻ[C לn 3:/р;X udrQ@(e `/ʼY@(cCՃ`8{x3owP[}j˵6sֶo<1\Wֳr˓tSo-Ȉ>1)c99gSXCKiy;!=ٟ>c2M)xig`ؘχh<`OȬk +i/ gO֤>oz׿uگ19ƔGƚXB:ܻ1D'OJsL#x|Ph ~t=eb1f`MxYߔ]8*9ȟMhWnS%fOSk=- 2P@$VmOy"mҎΙصWXD l[ę5S1ڈc u91ȍ3aǻa<ϵڽ(#)~n`gj/5M IDAT~ 2P@(o@_y#[ 2 8c<>a3>e 6`g-82ΜهLi scf.dVyȕshCRS9q16V۴oǾ3fНals 55~0'1iWNC]i\kG_ 2y!vg!siOGo=еS6at&qՑg~H|Ċ1XҩC\6CCD7GƝG.^ĻVK9p.i1ģ3ҵx55#Y5H=0W'&mL{2P@(e b-~z؟k{|y{1mޯq>"Fr罡8g 9/'\0u%/sN08s{w ̼X&2P@(e 6}Qn2P@dk8>w=uN~d71Nn.mʳُ9sulӗqbr-~ڰ3gk:3^vzbSf~><ҞXu{&v8Ǟa ,:,q&c5Xqi? 2ްc5z}oZw _]ki?aw-cԑ0.>䮶bx%:w^gIFf,u>g\~rzƨg_\K qL3Yk/~%îraˬ5:]2P@(e@DkH[v;!xyGV ǚi-saN纴o` ̎׌aD癆:us~' |e 2P@xK[e ĀeyƧKgaL2:21Wk@1H|ġ#sb?1ȃD}d(ͧIq>7qƛ{ve8c]ߴ3@ϼz8_X֩'SO^r%k(.vu/>"7?>&bo-{C_棆ިncmg귎vw?聉}֚cS}kgH{#iODgd~H_GҸY՗R=S'S3dM}`ŧԮS'm;=ß3(þ}e>0L^@(e ƀ廾7R{#<f \o9{3q,EN try8>Ƶʷck/2Z믴3 'vL)U2P@(eg0e~˭Q@D pC#[q3vcM}'6q1g\Ckވ4ؓy3g-Op:) emϦn̞?UꫜNxVy ϵ9;y0ŵF:XS.X^#Jt]vkXYϘ>|qxug\ۛR{Jz^ᖑ3VHR35u9ү]LJu1J5bX7U/ >(uW:gi<5R?2m'F=r{\F/(e 2P>ރ(θϡ~q_hYC~&O=115X @6sމg=2kN0G89\af+3Z4'~B߼ʙkjO\ Қ9r^Q[.:<|b?6t{d}5*HO\}c˞smm6j`Ӟyr |lIOi~d^c#ac#glN>$ϚCī09յxm+aߍ\.kwgn͔k);k97>tGӮL߮9*eNVckIebOY>u]@(e |A~7.wwpnOvH1\s?mA?3sO}AkxdMO)O+0s~zs'vBfҦwWe 2P@ Erk2P`p&i7:viÞCbǖ9d|3 X7㭉 =15Rf}>b<ÜWUߌ׬#zgRlUݕ|g/4ޘ>g,>|g|Ȉ](wI<Y>2NIr*̓]<bI>{v?ڴȴ˺#:]|ִVc'pǮiS3[kKImqr\2X]̟y/\n;9f|;qȌAuR7oyM3xlĽ~VsvucVY@(e f`ϼE?yߤqsU6=G}> :| Z;^ \/_x xt vmH0ŻN\2P@(e `5@(e9{hfz=PGbSNu!Ɩv9e'#sw`F1Gw̝9w1;ވ[vvئ55Օڹ#+վrV!yU2P@(e00]ke{~'BgiG?Gۗ:kc8Grv>[>ewrguNzy?7~vAlն۫/RcmpM ]r*0CI#=&'~'o>`St{A_ZQf`ӻ->6Yr d/3 ~$~ʚ򙇝z$ט5}w'=c?'M&[ɹgۃU}2y#>Hk?/vП]}$v}T++3֗H+GzK~v.|{=@O'8v:n[gl SkW\wi_JY;1v6<ɑ<[=p>_τOfǶw~F9_l·s9^sd_ 8{8ީy k9gyJ/C r[S;s&py@C{6N/rlpHf"G}v1Uɞa&y>/I9jN/IK恫5Gi_8C==@O' a~cʭڂ_௱joc k%U'V k gM 8(Rx@O' zG5~Q&<=@O'p xkfmħN9ןK82NL,xm}6oIZ3@mol_\Wnl YcWGҮ5ŇnQ%wFZD3nǀߜxJc))3/p,!18:cA~V[twr$FOLߢSڞsqhWd~ճ̭j'iæ'~t=זc}uyM{_-FO{-`WH{<չ=@O' 䯸\㥷}ۅ5\ }#^/ǽU^[' :Hs[G&y}W^y'o! 1z~Y֎&sp z=@O'p 2`z= xSN nG+sc{L<>6u|Г\Y|l^]l{R&?>1b} :lV=5,18-v÷k9V'f?g]|eZ z=@O'p6&/ʜ)w@O'pN]Rb_q[lqd>[̨y#y;9%Y'9k?J]rx/wJ֓}HtYLݣ(fM뉵VJc%2]c>:xr yȅ5މFw{񹬍YK􏸲3`#|#D|)yJ]ad>1c$F[Iy\}Hf|':}ɩއO,\[_k˳o-bF6zJ5vO' z=-X^X[xb%qf-y-1\k{J xMC /GV7_3Ϲ:xwKpU.F z=@O'pes . xdi/BR ~9܀+<}\#ǼĬ]kT}H<`GA13x{J M\p<؁t7ۏXhW Fxd]ɹ#^bN`r!Y9F9v'9Hq'y#\NNuB95ǿ<䐿.>%qKπ11OѱS.2+R=Y ݚ25'};J>kʃOi YkYbsYd)ŧL=@O' ^CԻ/u1F~K~s"[θH^ Ζ r{:1Frȇup>&l9>|8OKJb\u@O' zegӑ@O'c0sfxf 7K%ģ&e~ŕ؟䙣M޺pSO=9ě-a\푬xYkr|c<\sٯƕ㬈&Zr{HqpQ<Ru#yl0Jux-J>%ۇXȱ?$YSR?~s.Z,TwZg9_^k]rPYO ->usͩI9+.},E#9ou"yAO9;jrg1ΎS?-O!!_أeQ,}o]r.IxUߧnrUK<=hvO' z:r^:1_skWV=k$8U';_]y|EؽvG;{du%\2Ω=H%8?KGuz=@O'8Eͯ{=@OL MȿQ$ϒw/n`sãKGڟY'K5ҳ=¯!Fl52W2/q89?rC_֕rtz7<~0V(h<lۯ?Z_ \.|bј8vEml$;j$f?)Iݚ|Ns9CfT\ؒmNO=Irw3I$:|r!sUۘ=cn|͟ԗzHLBgs\H_acgq]nb.yWGү]7G1'İML.t郺Hy˅o]1G—6mc5֘I3cC IDATLK2|̩}aLi$>WR˘#;=F}}rzL]uGq|#~#bxcL>1#(O2{7Yxk!OW^k[Wqi^n9ޚvO' z=uo [\\k!G<_?5Jǵ(kx܇ w73{-$8Ϗ>{w@O' z@(sufO' z3_qH>7AHB.O6<,`;sc^y,R}Ny g/gy:9Rjb/m}lUvY8\[ڛXqrim_?}]i+m5&'g2O6grG>9?|3Ǡ̜?t;#{-s z=@O$O_9g{ z yԶ;F%9p]ƿ#qSZS~֞յuFX`̘se>:K|٢/b.qKYkl9 ukL\Ƴz[ѬOs$dn1˵NlɅn;}沏e#?>kY=՗3Ƨ?yC:O\c墳ᘈ1R%R&nm*+Amsr,LK1sJRk^#Y6oC Դ5Cw%-jklQf z=@O'p.'0:Sfoʼn%^S}zm cJ3O.cv#e9G=GHHA?휞@O' zL_gZ z=xnt3<򙏴9E~|n}wqJn|ӿk}@!9ֿKZ_ r))GvR&Db|XcA 8rָiN*$}Hn@_+$.n\;#$VɳOĀЍc]K1)UiOiF:r*fR>sҸ9RǗzb J9[Y9@ߩRn{=@O' AK_Y1K; k#'kĹFO: k; ǡ&sFw{$F|#>9,08ec`F+Ϲi˭\C=9C[" /r#_"ɟ1n]jj ;sԕPʙ:Ҹ}g aKO'b`y1cO,J~tp >8W1~UU?qدX1H9=.z/Xtpi+ys[Ǻ`[l!U-ɚ[26b&N~?˞9g̙xsԯ}[rY;Gʡk l75.1VbUlu*_3Xg\8~36q11\-{=@O'&pɹqk5~1?z5&,\C҅xpb9'\rI<9yM3z=@O'X@(<z=&7ȣ`q5\يxb$Ĭ#X9*x|ʫrX ?jW|əzb/a;~}U6K5y0mg<$'Ex:AӗU5M-V!Ҿѯ6u6o\gl|;C;ʟYlnfYѕԣ+k=r/gE,=ׇu2wcn? %N9vIKRKC (Nr鉇C[>ssO #sK*KrWbZF?= z=@O8{룃O}=zlkN{Iê|? >ȫ:yluُsS1׾i:΋+kg8?3{/x"ynEC-krix+*G:?9?=+r"|p^lXc&c¶왺,ffL|b҇nr__ÒG<1˛=Cw{Kvz=@O'pNk^X+^Srּjo+ײ~6˵ǃ2_oG ~{\gcq: 0g6sNjƴSӫ' z=I@(sPzwӧ>s{cK7͇W_tx˧;}+^1-o>OL7M>ӭnuM x&7<-J0y;>}Yk7҇:=V%F2NҗZčt׶Pyzr,_n$>3>韥\E'/}~}'ObuWv9x}ҶeMLH\JbkL-إIn~dmM,2{2GC9an~oGmKvZ{ .(=E -VcpCRGb~lcQp'@JrrqcK~7;N|rݞn[J0,숿rq~3NLi8kC|YF8΃c^䤞8#xjIq$y ͷ'.ÂqkW[ZM6Ĺ+nXrfO9֨k(33%|f(N~bSfi#UmeGtjX;~U 5Ot땯|tOsQ~Oww =yϙf75b:_z7=M_e_{=4\CWkkVyccL>lt>bq&u6qt䙓ǑOp](w-6·' z=QL_9)6GO&|b,}rI0ћkcω͸:$SK>jZ5gs!:zn0M~Z_Μxo#L}І6}2z!q?$.;yG%' _Aڣ7fC_𛇏}HFG_b=uĖۘ/|>Ϝ#߶Wts,| uEZScF'^ 5)xcm#Y"ggķeekeѿ=ٟzֳ\oV?//~pmo;^ޕ{ѷ2N__:|~5oͭ>N Λ 5zڀ̷5qq˲O[T8r_fu:[<՘3}gιb/}=@O' jQMyz0}5woyc%??O-N>$XO >^5|5_Kzԣ5ꦇ>__N1}w|i-/ p\o~!_%#3ϛm0#0nX'^g層=c~҆?mynrC'6kU?1J0j>˃q)[up<'i|s4|U?9A/F}Hh]Ef-1JqYXR7nn ˇ|0 gپ"/8;rX}/R eNd{^F0.td9Gn\qڵnW[|aKn2)󜛓rĨɆϓ523sm nI{||ɕR/=hw]_ck}".uVk {S~_u=)O_|vөx#{O|?tLK2׻&^_#ӽ}7eO'4^T􄁖8{ ǽX^k^rq\pp>\[YW\=@O' k|:z\'{O}S>/ws[L'2ß' >}qůj+'~IF/'?ɺ[^F7"}4FXe:-rT{c>je;v}PPmA93t/}9UnC\[ri1f\<[% [~ύǸ~etaڷgGX|pudoώy#I'/W^yiY,3=YϘ/(p.q~lpJtJ9+Ik~`/m9VFI9×՝Rxja=%X3JvoG<#|^Ӊ屨#GKNdsCriT_>+K~ђ7u⌧@OdN_`zc3K)_%_Qg?rR-*+N[,9ϝߔ2t".y'uI{It''ǃ䘝/UzΕ 1t$/ >u>k%sy>qHr=gdv梻ko\ޜ/md9`ʊOXk?#? ox=@OX&Kv>B FRr5j^1?ȵvh~nίk/_!> ׇJ+ӯ$>ʧLB].)^ &T)7_ϻ.ُ}*k>~o?fڇZky)379/֯2sn?SjCc/GXg?GiԐ;.7ltGc6K>eN9߲'p&)/AmyI櫾f꾷]p{=㚀Dʵ:`pk5ތY(8vd;ǖ xу]/q' z=٘;EFO'p'x._otͿ6m! npC$ 6z1|QoK/VG>NsXӟ裚sp^*|;C}ρlj._=gagrW3O岷7ulrqɹ&L8Ѻ=B[{KNmY7WV6I>pHw-{@yYH̯nS_mKn +1ы12GܒJz`i/뷮R=;52ےǽez=cI^x\*N9-{]GobM)|ktl 0ܙsϸOZ z=@O'p6'/ʜiwY'?ɹڥ^ZfO}jV/~뷦?:_~#v+ Qb5#RK15}k_xk-cJ͘*kv]}5g;I^eH,7yn,*9cXJusu/ڷ9.Sǟ:C?ObW_J~|HXe]o\ߚ̚py8DcK>`ɝ|#2cy0n q"wrϺUC;RK~2\G1Ѯm{أ㱏Q5ԉ'5ҲjgŶ}~M%/y`>Wuoj\S9{>_zϐ>g zu\xeLRqJj/֔g-on^]WH<89`Xgs~sGCf]82W]@O'p!Lo|?}x(9Woe]6~6_as,qⴍҸǾխn5Na=@O,Lk#<:nTZQξZ~nq>lcDgp+G9[z=y|cҽW^9/8eNi&zG?^3?Ur_:י>LWΫox@Z'p|`?1=}HxK+{7K_ӖW4')gMxlՍ\|ςrb籈SȮfˋt۳r#[էVr&cJx9.7/|?=,g#F8k"o sE}s371y!de-tr?1jIſ&g'nOskcۛLJo蕍ͶW0RH~ xԸx qo2-wݧG>5@O",yrpuZ?0&O>d^ެ"C5Tt=:/Oz>f{..|GLsŷ zn~/;po?z'~̉?E`O`Mn2o>__y|~Z>/|AFOL o>;%zڥӦS79}c|M&l%ym1ɣ9KɏNJ>xa >Ùh+<.?JuJݾr%r 2=^vɧƶ/tO?,lsYlj|7%reS/kx|[5F1{cWg#8yf^`OWʉJ[\KQ6q=p#ג:#tKq@O{Sk'WO' &^$wߩۣ|t36N8cȌU0ۓ6ksܛq_}ĉ=œ?5Sn掭DgceO' z=2~Q検'pWE~_tmnsַĿ\^='7# ݇#)p#LnS֧JN}W:~O{>ְYw %\kc1|.ˮ~?K>l#oUʃ3A _J1A8NzF-^`K)%=ck+=_!:l^TACf t|_.,9j낓ͥf.eoĤM KK,\/%vM7Lͫis'OJ 5LSW;F2F%ϙH{AׯoY-a_qa*w=ɟ_ŷ 19/{3F/zыwg&?~ms2z^{TFx}kym/poQXwIﭸd+:å,\ǻ8.Ըzܹ#]Kz˞@O' zz̹>]'pLoxx`u_uרW^iϦ4׿ψc%LwݮoGO 'Pop<`ZJs".{RQ F}37yR|zѯ}?}.X|` _&.Tn^b/c͔rC/e5op㯾G$/Vnl_QbB]t ?[ 6s𹨙?XjX퍗d'βe 9_ʾؒcYmml0gt1s{0>6]WW&~ϥ\ c6.7yOɅ.1t|bٵG?[ g 1O3/sVǮ<3(3@Oš׼f|[2} "77|#wCgOu{vzz$R^+[i=}Gꕇ>喜̣kc\yZulYk/mod揎įDw{N9GugUc z=@O'p.'8]t@O'pO׻fg>Cߛw]>=h&Yz1 ~gk$㢘7UփA{㡆q;]6}>_u{@#\Kat}-0uFse}`owN#i/vY?ms)fk mOlr/. Ys\|dKɃF/(+#u5LWs?tS6rg}T+EZp<*UwW]o: \8o?}~|@;3<ߝ7> np|owMխ2@O'0_-kbZ׿mN͕S|*G|'+{O}%ӧ``9G 1d.mk' z=\w{=kL3K?#K\|CܜSMo:=򑏜__;18)]z#Mk4k/t Λqo媶5ikQlK<|K}.<<]R|ʥGg#2ޜmҗ_e̺h+cag.1Hg_W1\THs#.|a=_^E+4{G_ Қr[ɓY9c/2@&{6ǩnM\+kz69~s[c3]ɻ'o[¥Ǖ:yꯜ hc z h׸~=.md%ly c[r,9N{=n1=ٟW~ C~N'< җtzSzڏ=oK4uc? IOzk1Fg z@)i4Oϥ^qG||y= }SA}>gt6LiWhO' z=s;Kv]':%C!~^Zwx7Hw~t;y˦'?w=1/7M_5s;ђ-/ xC\宑]fJr8-|RG9uKs5ZNML<: <<^MlYn.8?oୟ>y#}$>[ ΅?yڛ892_zngmiMu0}!u|#$K/7΋/s&b3ɩyꓟoo[}VA?局AWړmMu[1yǗ J%Ly?] __O|=a^WNG4=1x mmӏ؏}^/?|zӞ6򖷜wNW\q ۿMi \:Zlc:kC9YyT=lc)\_e]j'zokbC7{-9p?4/Jb뷟`n̜Y{@{ύnpn9 b`zz=@O'8 eNYz /K.҅no_e/w77M0zԣ2 ׾M׽uy|| =xi{ bGO@MtqÑ8y⬛3? 栋\]GI\kp|CNܥ8[9;cpW,q1dSO?)Gq[~R?zr2嵯'8ӝ4 g~g{[~e oxޖo صI7G>2F7 \Xz!!HŐʅybծӯZitkT<~cʊѶ6gq=~KﷴgS?5|!كf'6 z=@O'p&/ʜ3i0fu;tE3h,p-^/nfxQF׮#N|QmG)}p~Xx?'[h j.9aY'=G277/ǰ#9BOԗgJVXWi,窯bc%rvSf?_IRf֐3yIS5s/m}lq]}Ɛk1qA^xrge9zNnwKxz8 x]q-[ʓ'ԷxS'^!IN{>lc<ħ?5RL?2uyi##cEg.l~g0Kr'tVU2Svڜuf\i+{=@O' NEzf@O'pM 쥵3K|ނlͩvbQ앺]r$or-G_gMLL=g7ǘ[a|֯|+rCϴy :ԕ=l@O' z'` 8 BO''C8q}-Θ3~U[?Z<[-\[0x\h/ʟvBVSFrO.fIZc)淆R,[ְ=f~<Yi -H_!cgS??.1W}Psa[eorfn?u0(<6bϘR]8I].}/ͳ/vIʛKXh+ӿgoSz[_%.+5c<˹vz=@O'p&S^Sy}[q}'W>ćּǸZⱫXU|%qDw`>P9| 7_!?:_̚(<W>gH̭WO' z=2~Q検' \,sn]]>ȸt%wX[ok֭Ι(l'ǒ>?r/ek/{hۯ9A8r ;l85@,ulS,ǂ%Nug jG uSGws?~9.l/ɥ^#X9yN?jɌ:rmѷe\]Yqֱq$9<>c$sz=@O'8'4GqȷiQ15nc\zm"WǴ,%[Wͧ|#bI><=ԹkC:;@>b]̄Li3cu$10r)/֙qz=@O'p'/ʜsz=r> [[~|rF2&JsW1i'&u1T_#5ZL܌Sk~G&.HbiWV\<~1cx!=c,#fWsO9e%q$8Ú%+.o/Ց?FR%?cS}#naKX`j}+#n1Wly_nq)m0μZ>|ig SPt9ԏƵw~*nd톃e=Qm^r~prgab^y+31ԕ]C.zO' z=5~QlMz=p>@b4Ha)GE%_m-7̼:nbvJ\ՇX?ə:\Ֆ_2|汃WusMKoC˶릭O)_#ϺlGe}rĒ+y2#]29G+bq n^acwr£-ǜ 'ms#䱔B(UO>lrŮ>*w=>4>-2'g5&Oi'0$ax#6{JG-w&G]z=@O' M둊YWY^kkEw̭،..}Wc\c98K̅ FXuٮ /:ao {ˏ%1dbK L.s`i+͵/m;D%ԱV[Ӟg7Wn_Zך7=WʓsxN,:\!qRnȑxq$٧%>KukO%%^69z3C̍.xrY}i囓U]ǰ 9[ z=@O x=u{%\^INp^e.8bǵ#;}nr=,c䜈"˘>ϟs^_K .Yk&H~0C6sa& \rb:wd(0{=@O'8&/ʜG'[ zx86^;>8X;ogMsOyJqȑ/ɧ/ZU;O]c_fk̥bWnݔ[r+d<aٮG¶vS_lJycW7?11ul7M%GO>tμS#oή<.>Gh~ >{Z`Gkgŗ85>U_JcW1k!mYأҭe߇Mg!_s-kؙ~tsiK a}Wm8S&g=@O' z#9k؊335 O.ͫ>㙗ueO]ŧxձs پ}%H񈱈s62bXΖy!3?w۹c{nԱ{z=@O'8eNz=y>8 m%ڡv2gmrѷK>Z\[Ys||闧y`O̾Z^}`c C>,# bQ.#^ډXcpd3cJq3a2]k#fdx2Fn޲nmqEj#GxcM.O]}r/#_٣ȭ\a<%X7=䱤 VL6N>zk~׸re??ZKߒzL[˱Vz=@O'8&5zaH.ي--H:~>孺S^֭ȫʘ<,|ĸNSul FpoK26R/az=@O'pO_9O^ N|p.)kd"O{+<I{!wrf]!Ϲm]_.{BZW^Sa-}#?qك= K._@gt s^2B^y啳-!1#v} I{׹6eO' z=9~QlNkz=l ?o2f>mr]y!_Tk\7:&ǨFrɁ,Y;9ҟ</7q}>(>5/c O1I=k>\DN} YSON)8G>/eb)l?^b.&B1͑7}gnE5M[ռ]k0K>r`9e.}cy Jqֿ$7g IZkYs7??1F)Vʍ|{66bwI#561lCV|Z z=@O'63xO{WN.bpONrM?9ɥE.Ti:IJ?Hg$7%8/tp"Mq'לxșҋ0tz=@O'@&/\ ''  >2c\-槾ScWqSn_QFz,ӏ|FL xTuG~}K5̭aA*з,8]k9rajI˹ӟ b皞پ"\Hݨq9SI {FE61Kn$pl~ne+o'}`qȵo)F;}KӇvFK+?XO;%%YG8-9%Ƀ|# <̕otm7}K z=@O^;\=)z8 ~l\dMp*agxk(OSq6Cֳwll9$~?y6m\8:B^oanf7ʠK=@O' Es}~O''Ph+9tnh{sm\zaA?wk(kɑ1z{ c̾|yPqbr[U_bGXTÚ#Š7+W8>!k`җ5ݞ0pfΏl릞|!])bgiˑ%X7'q+r&N~_ם}cnkg+u}HA<7cKe?ڳs9@x/eGzN]>y#ϥ_($ZK~cUy|ʽV'ciu;1Z!g8?ن:s[#ɑ>ǮMcFSG5s!7b.ͮz{?YW.؆]<`A 9{f<076Gbs͞\qqN͟\,Ky%fpF,xe' t@' ti}P=:O0 \yCħ3I>~S2?ӼzN:N2u:N0 83q9\S>5.i+)ůjs7mμJIOnAחɣo[ 8G=C/7d>̃J] )٧\|"zԧqS1gy3Pqg-Mf5~cz &gYc1n|gOİ'_M(sCW~+y\lu''}O˔柸zԙ 9u{\Sz憓xI=k>y[Бވ$AV'{ry\P֓b>m$̙66u"\Oٓ~%uy#S fcK]X9 9\DfqN]79z#5/ZϺԵ⺝^g&|elr]^i/3O''u8y^Nl͛xّkV0.{Pc˞|Rs2K?}]:wm3#:N:N=NʼW=u@'I' <?>S_g|3n ~ρO9nm'G\b)f;N:NcMo/$3L};cr8pэa߭̕Gߔƛ˳_[Yн6og@NE}Z%¬8gtcЙp":/ t@' t@կ@w@' N ?\_ݘ7.l=z;uۃ nRRf_~G8Ũx'S-{w75̯L3e1ثvJ26qWGssM9 3c7r6C䚛p\Hj; DG|OsC;o7p=kSkHS]syS.y'mR/=ONt^ou1bY09|_^0ug|r2'y9O~ ;y;N:NM{ N-=3g>eȎNrKۜ菮-&1tv6YK~b]?C3?\ry-}t8lp!-gș< 1 g-y@' t@' AN>7]]Ir03ٿV[<;}OA:Ffʍ'ueS:?b}S™+ 7MR\ެcO|w˺A;6,*w÷&>uH}+xP>dG._nsf%f^l{68~O1z]Wg47:)Ok>&oֳԱY5ܩgϼXZrp9+l8Ainmrk]IJ̏5#I/nU:N~ pvbruC%N&Sws=t<>l8#=1}o!2odYJi+;sO62cp}"L?\l$з?%qWv@' t=1ydĜ^wę5M4WMS}EԏL<u*q0a0<\b$ Iױr_Y2|ک;_y\6~N:N~̯zkv@' '`ƃ:' |4fJ@\޳ryĶMȑ̙H#ýM@g^Б=R㎓6}ͰSn}{}io̩Mmsa|1~'JɸgtrzJzgrA3eCڇ/7MRt2g2.m I_ 6uӧ7u21wXѷ+|ƧmT/y1':\9euyJdyWJsR̺􆎤|`y/Oj!ġ@' t@' M-wk\&pc IDATLfGON^SmY믉vC`O=m6ld ס,ڕ}< ׫^'py>ǦGYd\$[9*97ەXe' t@' tm}P潽":>o$p:y(-O-yɹ`otVk ,g(Xt{'&T t@' tk'u3OLARO+"Ч&|rOr'|P4Wbɕ'<}H#I|ׄMat>C7%0qDL{ ۷gBr#%z5g'wy} ӖӞR&oZiF?c=qSr>)'?mjX™g9<ضĕW3>x&ɓ9mS+qW7+W9{>|}GfdM8|/a5S7&sG?\?/ t@' t_\8y=|Ӈ5z!'Z27br68N|^r朡q^z *#@":|^6:q9;Bb8 sמ~r/~:N:NOʼu@'&g> MΓ=m{#͉m R={X)gNtz5μ+ͧgψtͳjl_Ւ\۾ȍA0B8c٨6Ww˷G$5.gOX0'|e_;=qVn\|<{S&=Zb?BuW#=&gmBզ_B|gp#3XC?\@Imr RGgswu@' t]:a.;yu6{9^䵏>$XZXMiE\K,uϔ͓}򈕣ҥ޹u%q y2ᷩ? I tg8s<%6atĆ35@nXw@' t@''eҞ:N1Yt޸xx'.ya!^)G]俕~s=}>+̼Lnu3G꛺kn#ܙ:J&?u0lK][ 7ucWͦWXJ}SGWr1R-ǘ?n)oO'{#Л\gN}WҸ)F9=a sj璛:Lo1+;s{Gwwid)^{L9O9AbE3)~0wrOz@{;:N:sy\y_n[NHX3rXO˓˜W˘+Cמ|bFo<0撳׼x\<B~px~641Gxs g) o9#:xbu@' t@'&e~[:O:oL>0_08}>lkIIৼ=2CvکƅK?Dyrĵ9L3vE9_Zħn&'RWԉ}3Ї42c-?{)I6nrr>7 +u}g,=]-{9}ug0;+9)|~"/pE~֢7 }p`gP~8F]SO[Ne' t@' tu}P潾2:6>@ loq{!Z6F[iEsӍ/kLSZ3^{<53i%Vɛ{y&Xml ge%5L&31,Y9|=̟7猶~Vk{9ߙ3e$7[jsf8M|WKcf|{<ʙN:N'5,LXbSf>6x^x hGk6ltlVk痼6{Tfc`SfKn4's_q^< ?N:1^g??0cɓ^RR3 _O,gyp ri#"u[:N:N2?r to4>!$`DpCϵD;mc8s!;?7̓}Q~䜋\̭cYboE_62u K?vW=٧e3y}Kw"\wcc RΔ2>ü<N:N&5מbW$'G+np󟥏SG9O\e;iN:N,1N+9'=cNlMK[''fNsɳN5NS.q!zOi<#$mN)鍚ngz.:N:8>(_ t `|fyqѵ^~10<`T'FZk0yG߬d;mGb&s erL3y\)3G&7p5UAioXMׂe=̑|c?9frlaMIb/CK_<|YgN{[a7 -ܓ ?X'OL\|SoH|,_B}'Zd?Rx' t@' xּGȺ,H*s>|s眈1v33qه*xGgԝ3.7P'ly(m1oL{f!.&n\K76Xc82?۫~}WǞ5<"3|H^2㴑u [G^zk-z5>剙 ߾Nߖ{m=%ԧ}5NM&WYyޣ28  <,zG>9d?t'?v.#?0 :eyŇ]|YyN:X' t@' ti}P=:O0?D=o6BBʽIkA^I3%}wO9cI\?kƟja?u4*Vmyܧ3.7rK>fr-Gg}QVpWs!?G=_$7^bF&e~ۏ\bJo-*煣y3\l5^\iMS3͑R2}Wu;9S4|YgįypS>$ gi{ =ol;ɱ?;N:NM5'8_#3I'/>}%cA1k-er!;?Gyg' t|~8C4Ppa@|͡ėqGCb~y`sy)'Z,$\!ݳw<ŐLߝNOi+bS:\r$y̛:/:S.±>:jÚHэ-neo-lr̕uyo:ɗg'_7\|oMqd pk#sS'}YW\yM{ yB(_ t;PvJr\vc9 ߸',:qj1>q97ۇ >Ӟ{n K޹QJl֛VgMcس:}=g-Y :IxٻJo%}*73ҚUه1N#k.wM[xǐ $o&7~Yߜ?Ϫi˷&LX]Uv@' t@^7|)#z^{oS&oc>ke˜Ó+;cR'F̃OM߉?y3HRzEX`ar!`R=akn|HEIo!vA$'EMnj-]@' t@' | AʵNmM9u)闇'y|d{ӂɷB暶>Gc߼-W.sËr#wϸYc].A'fJr=S-lOS7m _~dM>O}Kzh9Y[X`L˾Rx+bHKlƘbSnrg߸[{'G9qǴa;9cgMp6,to8Ƀy1v<Մ?s:N:;O'?c="S]B` Ȯc}&s (in˺HWb@' t@' AʴN>k?s 0Ű٧9#ag9> |SG95XG,mS\aM '\{A»z: \=P'fO"&ܙ#9o[sb{F0ޑG;9/mkYW +_.y6|?9L2Ym /qm0uq3#0+kӞ9O5߾'JMfo?̸MI՗6[?R}j^ő'?m\̓tqW+~oIW '>z!gg?s.V t@' t'g͍L5'|bW=}i>%fISi7%0hIGRgle 6~bx0Z`pr-3C0!c^ͫG*;N:N2kߝ@' C7gKJ'{^^=8,W>rnc>CbWu7s>{;̊u}lS\w9^2s榗ܜ۝8:+G9+H"tCxԏ$[~쬯QHl"/:!1u̙q2F3֧VR$'{7U^M9\ކFy.xnlqWSگ'79q=꧖:M?i+ t@' tE IDAT6fxty8k$#ɟ8ض2x}uR\4G7lFqɵNX6vbwygǵ<\k17ֲ{B^|P`ȳW$/}׆Uv@' t@''e>֞;N Cv_.yyrrz~ŦMf"[ W59'il7,aCz# ]i;1mĬ;ZXU|\Y'>b?z>@CN?#2\,ψBx&AO9bƚ Kѯ_ԕ╝@' t@' | AʵN->H{s?½ؖ ˛ C;>k!=tGry~us;<δNh_9v8aN1W|r$6|n*y㌜YCNJrj'u̟O 4sn8Hy(g6~̍ms)}O ݺ,cX_>M=mc{x>Ϝg=ocfG<== ~u;Oo%ؼHfcouZ(z:~/g٧ÿ֌Ѧx U t@' tyİȕzՉK!V8vri{MĖdS>voߜJp[n~fxySf/'I}}ً{!%}` vI'ҟNwg|gj,6קacsd0 ).C30 }Y >U669F&G=ci^zikM t@' tg@Lf t/o+~C9ֽ\cĺ\֦On ̕K;k_Zg6i 9S'vOb?cyI_1o}3ς- ټ[̟1-ޞfp~37҈g9=3RL>cR:C0y@r7#oJz>$Jsgm1yO,orrM>77SR_$6i ̡M]o!<-NvogmR'+fJq8rM-ertu]r֜sR#ϑSgO$2F[):N:= xZY7urk'ϼoN9csˌ̉,ȼO|M1^#.̍&g^c לx0y \,mdž/o%.V t@' tG@ȯ^{:NM@ rn@s3e'ԂoyS@^0s&-tύap_~g2vĉEO*ɗy2Fi )|ւ3}777z 繁gIe67=;qı,;x,{web$n.$>Z–t.ԗ3>r$y枼㛵kmc9Su6~+/m08ԑ{1⋵%Gƚ;9{&9',`ɑ|}𹽹ǼmC<ڃg>noH8:N:?^x^ȝ+:$^(7y'yękb99)mҺ7C䀃%vrr]qf kl<<7YC^W' t@' ty}P3=[' t`|ө_)3Fs~ ǛHc)hOi_4'{6==g={CnX犇׳Gw9͚5߃:왕fbSfvx3%o>nً933n-8lgĐ%).9/7>m|9>}ܜ:=OQk&W1W=8+m{梎~ɡnĒkܹL-mSY!uӇ&yU>SK}*gm|w@' t@'p7-9'i%?mN6\oƤM#9S|SΜrqy&.<{bO:כH>{u$AI~ョׇdq φ%ԍ0}SEn ?kѩÓC>__OVE^Kk8b]PzJ8'&mx>K{e)+ZWS}]ebH,1+u}SGrv6>C]t~<27Ǹd~lpMϚVW{JH|-ggb/|d^H~c^u1>l_Ĭzʬ >m0dOJw7cx\.sr1Oԁ>GffS'3c=fn0 aM}9`]@' t@'L낷#y$m0ə1lp-k?kg}bl|3ۗ~e''i3Vװu)1yɾ|W:y[30s:N:NM|W:NO`#mA]i +unN\/1>%x%įO'[\{t^xNxŦ_\?7gN%nƀڼ2Ʃg5kor!oY#kOim9?Y3oLkJ\ė+N>͗.?saoyl9x-nmW+sK[K<1ClO{f}nB?${9Ԟ5yo~?yv\dǶ\5)6T:N:{^\]7~7sh$%F,:g}e{N~ÿп}Z4nB7{r#~ҧX蹒gMpo$Gx!7,O=c3?6^?WaNcO3F|67cNm9"埰+?WRZQoH19H%b)X_w1Y~KNb~-.JCօ;팿O? \7}i,uKNsQR&*&pőw9U t@' tz5/%ԡl'G8g){Nnou#)3V29WU[N|zsy )Ɓ[Q69S|k t@' tg@l tO?P ᛛ~h>qb)9ysuɱ ǥ~3y3;i䉙Ϛf.ҏngGs3nEҼ?9|s'eك<ƧD=`X̅$E 9?qkZGsZY3u矱文3c/Ɵ_8nS±E/l^;6r_ 7' +9tMIO2nyV932g} /sFb̛R2L=m /m|J})yO3f]Y)ϕՂcϯbf_ؾW\i{x9{'tbCܙC|lؼgڝ@' t@'y'0y<\?̅/&&9اp"ks)g3v&>)O O =+wiT7I›\ljr1ؼFG>ʬ=WG8g 4N:N>g~u{N~T,dw-eai|[(O <جĒ/_Dz^>iO9jn4~r7rƤ}i̋zn:9|9o|}No6wkoL(y >Ψ|d.ع7,æ7ځԍ!8;9W|{翊GfteޜCrڹ뻓nƧ/-g?ԧ4^[Rw~aJJTo5ĐͣQfo:b Y{u!o0'~+eLN:N&5+3&0߼[3&mjϼw2sqIOۜ8`'|ˑowNϛHy;N:Nl2y:NE?9g7n8tpɟ}i#ٷ<}i?mK\SXp)ͣ9ŔISÕk7s̚`bH^X‡*Ҟİb#qd-W2*&}ěVr;}Ɗ?_{a`iMi,zj>Eqr{f7&gr$ԍϬyRӧ!Gv]zԧW{JS ϞiϳmoHOΌ5IRgS٧#F-sg]^g\N:N}'5xz3ԩm~!.ݖ1=MqR.̘ ?ig?}g~{wv[%3{6G≥@' t@' | A |@' ?HCؑVr F>o.%wr3uz6:qȀ/Ā)_-_aL쬛)e΂z`5oơ׶&(Lň7w`nkh?ҭuSSZخňwK\_ t@' tgk ')Nw)(倩ߤo{r7ioErI8kb'׻x?9kJ18[_/A˗V'DT՟*;N:N&e~W:NNC6a7h [Nf~GfaW52VGz[/Y89ȴ31'iyYmX3j8{/G;c½H^8`ƫ'9ts˙682ߔK])wHk.&G (=g' t?x|wS Tk>c+_m,|0od̍- Y'w'gM\>}VCIfyo<3NSM3Oɷ&w<?K?X3qe8>BL'="͝ޫ,!?esB_fo=@>E# ճ?硏:Cx81S?Ɍ~b3m1y+_=tp+5~=ng[N- c1سgJ|W[b@' t@'&ukSSS4Vg'%Or%=q?_qNukm-W'k*G9y|ɅrnN:N~ AU;N ??]JK6 `bo7D|:?̃bG7A--9b嬈5wrN97~a۰=ko>oa[[ilrKin8O<+%y3V2SV&wS'I\,lؼWY//y&?A^:{LIJ8c$_W1=('+Օrm+rOy&y`c7y%:JԧQ t@' t@'_e.:Nx p+' IDAT6׼)p鿳8>arN9&>f>A&֛ؔ͜rl?M9Kiܴ89!K3>{L|hO6R+'pR˼wr|~1l&|mŐ,[+37}5A9z&<'9˾l(;={' t?hoր+Z͉̜WGj{|4.cRM燛Js~INKNXk'f-}%]NbH׬ɿ#6S50JJp6bb>3Tww=LWY9OƓ7ySgm-OI>fOvr t@' t@'p?>(s?2:N7A?8&MQ7'/w?$3}i+]6Yy1~Y|x$7cOgY'5i6uL~cbHl}A0g,X5c9`''{{c>:v.H 17}^ɇn=[ ydb/p ϞU.~{~2Nq_wJ8s1%8 g spr-{P9[oqfL琛ob3NXf,K'~ȡd>Hqd.k~V:N:N`N m|bCgK~{"ƾ#L {.k*.#vkN|Ħ-lq攗ės痧5y=i[t}:N:N2GN:WN󦉶>@>J7V'G);G6I-牛=+9f/')g,6=oMn3'1'obӶ9vOͼ1Y{'_[I^s:`8XR~A}%\k  M3sg3fintQ<1ϬZzY$GIS9N=ϜޔvڙgsA}tӜrFJp5̑s;ՠf2mL۞cW t@' t^+5J|OKNQ}(Q&wү~ǻ 7Rˁ.WE?kw@' t@'O:7Aabn2{*&g~̚='ԗ3JL}JDO W =bNyI:\7ܕHwm1zrC[ nҘ|!{N?ćo߼`!PI,{=e/%9j9GsOW}JiΞgAg)[W?=WY{l˜ډ]lQGrI‘2{y1m #Δp͸ڝ@' t@'9';]#9s2^cnFrOXdrrz>i$_s1@' t@' N2ӫݳv@'&v#C[47~3G G8[#l߉_r9ka;w}ȹ+2RCNܼ3:-)O^rჷ4 =ϗcoa#EEf}YǘHXk13t} FݙǧyfΞbF>s&379'>#<عfi'N!NԱi/7:\u䶲/=!Oxrtz$5=wymɿs>\Hk!'769~_n>czI.ԑ*:N:N xץǵF^D6~1tsqg̝NUͻ_=}W'G9yӖ=\?J}7o' t@' t;Nܳ?,&rroxM}߃YR7'#=15rˑ(1gg|W% 5sr,-#lgl#>0g?K?kk/ӗuC37Fa_G O+=O{1~f!ɧnOLicd\:N:N5Zk;^^(WϾ+=11B~>lZ:N:@yI6O' t_ H6G>v~K<>XigR4 }'E yY+=7KR7xJcYŖ|}s :N:Nx Act@' ,7j0bSNlI--flsK?ՒSo!>峏Gn"7'MM~ל#kp7+|ތA b|? 6:׬i~k5`\`\ӏ8K]f!79==n2sOLݼ=}p&.4&X}AiKi?H[sN;uF׮sm?J*RA V b%5j DAk%1~"K&ʇDcclPr")h6F@$AQ%)`IoNyϹzߵٗO~n3Z{wswW*P@V Zeo&Gr|{=Xy.'Wb/wO5R}wQ T*P@USy^nT@x*5 83^ xrͯ83'_wt'+{i{n^x}{VVְ3OCZrA4Y!'^}q/ܼGSۉE.4aj>x~p1 \ʙVVp/e?>8XaO91W&}{9kI?15Ԃ_sXbsȚ9=iSKM_xa'{{Zxr5}1i-|wY>3glϖ|U T*+_7̯O{1[uqka\{odj8죸KZU T*P@xeףT*P: XX}#ƺ7>1}sb^PY k++~֎ϾcpfϪ6/0pWrۋ~&=OXy˓xY䐇5OŕWlMk} w:{5܅xF?8s_,8},<fz8ֱsGy&7y0ubO.3e=鋽ܴӺV9qR{0\bOΙoeWXvp{;kN̴qOʷϚ'gO,^1X/kXӗKK?x#wky{孭U T*P} &I.-|^gK5V*P@U <= 2Ok;U < 7~2Mj`W'ǪՌ?1}5>{bM7x$g&^|UOS{ y4Q/gͺq̭;Of=k[y7{M+."Nك͚(k f^eurC)~Gq˛>g'󹇼YO9j7bGjWsؽk?w {\&֝gΘ8EbΞ%L/ [ʽ=54?gؿ^[@U TG@~]5$5=r>Nvuw}婭U T*P@xeקU*PCͺvoTIr˻>3O'?{uu/rXfђt&OML{.^a'6kGfz{iOŸO;徾73h?88.;(/|9xs!6'u1Z*P@U B&kKw7{ʳKG?}yM5GgU*P@U N~PvZ T*L+7VLBY3`y8<_=L#;ٛAˇaNKMɉI9%/~g癳O|bXl^8S _ Wŗs_gXڙ@4}O/=~`yş<5g=rΊ g1ӓ=ӊuW}v5b93(&[ٛ6gqCǘb,s#5.}g|{=YvniwG| _mU T*P(¯Af?_{fWߪ3{x禅Oomo֥w yG0BrԯU T*P@xe״wT@x,߬ol}#*o$|#{ӷW>c9qb'~س+<غsw=xśuU,g9}={&ZgƉ=Ov̜1Cmw9y-Ŧuyo^=ӟbVusbه+?b-mޣ>]]j'wOo?sGv?qs?cmXJ (}kح{ʽ{n,PCO1|s߾eGwIѧ?9su6=U T*P@8_o|bZ.'<*e S@U T*(<>E7U 3=8-.޿^1?mΕ*O;/O_댼7w1|ÜeMZd.&v|; C.:vr/^cs3̱ԍ>c^..䒋fg4޺77ۼ:nᚯU T*PkRk/ޥ<.z}RnW*P@U < 2O@OMތ=|SChoⶾ)CK'1>][{u.ox=6֒2V0'&}Jr9)ӷUb}lbpye~͕>ϞL4 ~j >5+>s&u̟x!sMVڋLi /8bgPWC|u;=Vxg[;'~Ϫ?j@=}7wMꨝX-XQs_sĝ"wZ|cpgy}w^āݰ\yg\Ǚb^˙hN,q޿̉U T*PP kuZe31³z4#{aj:U T*P@xve׾w^@x@\ozpٳ' wN˷~7q?{c=y1+}p`{9cԅޙwM~_ۓ{ִypG{^wj>Ƿ'g٣էc}A2P=O_n06{֓5s[ֹRcΘɉ_uF1WO/G8U.]oO|r;<>xcENĮj{3QaɎ^foE{n<ƵU T*P@_g|wwο xXλO}_ T*P@UQyr^nZ@x"7|3Bu#76fό&}&>\k޼q'N|؛- X$ݲ>sYg'}{ɱsڬS,R1NbǚV{36'V4G.}CΜ#/=:q^3;YKA>g`8\˜i33>eONuWYOa駥+ykG,<;M#}rNXƗ Nk/V*P@U~֯Qd943Ou5<`ݣ*P@U T'K~PzmUUo}@,ޑ:?{H_|g] ^ȼ+e%ky9]l fd8bmꑽV9+U;z{ Y#?#21g<91{kYK e=͜-K-g~6O=g˝'g[|޿5}ְyɭO ~[3ryQ#Ʀ/~5~wO>]"y8'OxKv4ЍNGxs7 {0_@U T*|%kcĭ%ƾ=7oڵ^{{ƵU T*P@U{ T*Pc|* IDAT^P߰orl}sٿuC[ߊɻ37MܪZЏKkڭM*=?c3#{3&%Vg+f<0潰S~s/Բ_<|&?'gp?VfMZ<Νz:=ygb9`fz1x& %'{csЛy.gO<='U T*Pa}ssχ5a>L-]@U T*eƝP@7R5;-뜙`pܕ }`'q2yX!en˺ Ru=2&Ǒ˞}]j^I>gD}ɳ3C5g!f_k^<>s2X}úIgOߙA}E>,Ęs[ӂ;Yw="\\ދyq[K ^cXkM+ Z F6\֏78'G.|nyΓss_@U T**׀|i]U@U T**wpQ"E~cbG{弭>57q;kۓU.`W{':`XΩAr| p\fuw #tkĂwy?(csݗxj;}yo}swmŃHq29 uw쳶3{g,GaJ-1gqofݺw1畹|UΚ`yxrKkIi'}rDza n~:KK.'9W֩,^G'2O+5՗Z|_s;>x-%%#o2ĺ#vo3k=Kb7ع͉]Ygcf+@U T*p :$!9|^uOzU*P@U 9V#bڗ\w$/G'Q9yҷ~u猭Ĥ:}g.qxŗu~㽋K{4Sk^Υe흚2g,!sg=g罿kZ1ֱ| ׃ɝ5Mɜ>3X7ɳI==\#^[3O@U T*P̣Ӻ@τmr7?{l_w%r!swpf'>U{`G>z{@U T*0#{v,rڿêQkU*P@U Te>U TL!>əvYys6}svy-亶ʝ&>x|U3n/{]:.y?k< 3}L>=MعXcydNd7)e=}bn|o|r^po>9s߭{$sƺ'cw>YO_Mfrg^s9śQ>vwQ݊'9݁Y#b_v@U T*pKQ|]HvҎW*P@U TJ~PRs@O</y:{5X{kgX]ӷ&~őGv4-:3.}+NgQ秚`|]3&`ŭjɵM>pٛ!$<9Ppjy%<1}Mdf$Gbؼ>-y|[{󾈽视٫/6^ ?q?-y,=bwFrc'ޥ9f>Q^[<W[@U TG_\g-=.zU T*P@}koU <ax CIA͏c} foi' w3əԛ3}9SX|w39c'G/u>g9{9њv֝C\s^+19qb&~X_K.ִ։xrY7>89Agcۃrߋ|[ňK+9[Oi^g'9%1lZz{:/u'1Y;n{b|q>sm,{gNj/s{쟾%֫@U T*T>} u--pݧV{}vioU T*P@P~PF%j@U& o%'6#s;qΞyKuq[V^\~#.Kwq융7Q#<̼?9Y:Y?ybHogWw戹-f׺|ZjY7{vb&;i#V$|ƫC=Y3’WlsGc}36u0swp[Lͺ#Vu_WkiőK>Ig7}>w }م=SLU T*PkfNuEW*P@U T}A}}ZU Ӌ^ԭk@G[R'&}yY/j=N?|.JZ~bO̱At_gn6>;g+‘K_>x_ę8~8RC|/ki9S]2w%>aY+g%޺iiu5s-K8O;ZKGknE.q!ﵪK+.3={51|{3{݅>CxbȉsVmU`KvK@~]#}N>񨭻e}z2=U T*P@ϖ̳zn!_Kooxo==-o9]:}ȇ|Uz鋾N)rgG*^o`fTʺXr>؞Y9{R}{~rL\\r&?Q˙ZZGg4sU T*P@UqSy^Snӛl[h|^w/~؇}G~GN7~7_kϽ8*p. 7N2'.kKW70|=8:=X+X'vϟN%>X{֎}:>f.Ů{U91Pdx_Κi{'692u&~~Ӝx^s_8pu\ϟmUygϜ㾉3mbwV>sX'vɧκ9gX۳b3N;k3[7k6oewɧo&12k T'S9wۼoo8}g'~'Θ= ןlS@x ˜,ԨqU T*P@-,Wx x{tsJ_܇d~]_ Ox;__~& Ϧ4~#eUgV^Wc:[;=y=L@8c\mqųŵI}s0Ob泟gۋ_=\jgKʜ,X{3}瓛c'0~H^f{|#ñŝ5[ߟ8|f1693~}+5/=6o'⧟;E}c\{Hܪw53 NԽrGgN۸ Tg[OO:}ɗ|ɦ1A{C2N_ _矢mK&@R}&Zh/[_wU T*P@tkWxb=}xo|>曍~?SRTtc8NZ~Vnm77-}KMxV379>)rw;cjyqbn֌ǽy<=͌m.+N ƝyM?{p}gbf fr$O졏Cx-=Zk3~3#38N=经}Xy>~^ف?: fE~wa$7K'wH,?H٫@ :v:vx{U T*P@O~*PnȏC2Ay_*P.^d>ړ/7Y|gxr:ke*?9ŭj{j{9qK{~g}s]9'Ofm/o C}u-|sߊWxZcV^[yC?3uًAʺ\ڬ`U_VL+U]~h#w咛03׼Zs:G'^+\a:|O7_SyyCNmr}ݩU < >}y{C23Ooy[T T*Pn_݀U T*P@Uf 27DUQo~fx(Wzyc7Rozӛ&=|8g*3Y[}3\b /==bgxl_ZO Y[k4{3w8b&ViWGsɕ=3g'_kO&n/11ڇ!g/eͺ53|m1CY^'x/{3k@{ Oi2_+OTNn{T*Pn@~%U T*P@n$di;W~W{K/=}ڧ}>6Wsc?cOc_'OKLϖχ`@<`Xk;s$6s`5q>n|W.<_`V/F;sr;kU.N!N;y}-hWXr^nq:X];WLo!Է/sSk!ƚ\C8/q>b}.å%o]ɣeZpcGq}fyΠ.>Y=WIGljyye^Os,97s{zpk_C'ڬ_'V#%|FÓ=̙ǺgX̪_o4_菞7g|ǜ^W>?~;\Ϲ囸OO>?ﶛP _k=îaP*P@U T*p5j[@ĕK_uA>ToLA* CX>)m巎A;O+=Xkr[8 >fvۛeZxE,Ǿk-|Y;v&ל!=Y͜a᜼c.9g}>1Y7[O*VSZҗKN쀏͋5`9Z9#zas͙s_ӟG>_~/~ug쟝)3ӷ>>yq>?ySe8gO{󒗼g_{_|#bΙ&u5w?%\>a25I ErN9cr^O|]gR+~ޏym+|N8Y娑wWļϰֱOqi <倡v99?-q7kӊ\՟#J+z)*9bsډ=b3N_N,y_c-e9^K}VJ8yU@.ZsO<o@,sygmajyhA~sgi²&S̼;wW{hL5wȝvy~e IDAT{n[sdgkVz~|ywv";p;n\`}.^<=}`k.sʧ#񞕋ǝkk}˯/.ɉ;ӓתnn\ĉq%}&/ˊ:멥y}w=pzɛsis/rۧOM|cpz6}kNSp+w9}~r=|Ow)=s9?t_>O z۾=u{ O{?q5_5U T*P@U < ?|R~Oc)KU+Xէ[s35sĽm]»%1%ԼuĬ|p^_죴=."{~13ce~ϷV_i}#9ߑ|XkM>-<3=ǝ2ִM?9WaVrg#ZXk>5<5CVgλjU[zɋ{ԟ~%X-!.69]8+;qӯbUj)V>铖wǟ]?w[5y S@U T*P@X)XNsdN/nf'U*(-2y^җíy.ϮxU`K-@lPl+/Uf]e^9Ĭ|rL˟cϾrٛ&7u`9kw/ ]q^əU|N_ĊPݰ,&Ѫ̜/eo]3n|W{~kJnOw׽V}[5UT>8]}, @U T*P@U < 'VY 7h&n=vN\%{z?/yf>>ƧF8cg`9{{o~r::zc0>Cݓo sOk?1=eޑ^g3vOu&owndU56 z'{Ϟ P?q։@.k[+N TgG>S3[};y6 3Sv*Ҹ T*P@U T*Pӭ@?(t*=W{K^3?G}G=N@q珶& `>H==4{/Κ؜!fµꓓ:1},VK~bbf{㵶9Śfmϗwsv주jka:gU|nެpS83-sȹg,= W9b{laVbNks?spLJ}`˜#\;eM_5]Ͻ3yO*kkg<_+>ZXsڬ]E6~ aU36gӟ?%/e/1xbq:5srkk?_̯|9Z j=U TG7|7<7f|?~˷|GGϘ~s\u@U T*P@U TW~P}m{gϰ{n*𶷽_5?dG|G~ow˾\V|pǃ^||+yˢMf<g<gjӓx9g峏ny{Êur7}o/ܕ뻦{ߙΤ:hWrsba$yyY?"_r>xza+˾V>|+##`g쟗&95yʓ:mz_:%ܬ3c/K,V~ 9kK-GO{޻3U 8}SO$~99==ϫgٟs{+^qտW?ޠ T*P@U T*P@x:?tg\oo:}ɗ|3?3Oz؏?7_է>N{j59o>KxjOO\c]59A.5fǼXG8}w"?k洹}'/O'XOqbߛ19W>^M̴̾;g*g-mr[3wpދ=>'N~ͺZa@];wqo&6Ϲ6䈭aZ=ə='.גneފҜU*śy81\rNoߘLkkOz @>Dχlִ81=y=XK?? Y^>$%c̃w̯8r/ff,nډ8}Y;oq։Y3<ywӼ>bs`'ޚKq~K3>O_^+ S@U T*P@U < 2ܻ|9oo;?O/}-7hWpy[?'> ÏW\ڕš@>6F$ֺ15sę[M+NkmMqZu_wւY+䚽֧5s _sut檯*P'?1o}黾Nwݧ>e/;ݔx/?O77y+_#̵ZU T*P@U T*t)<]g xK^rwJ‡a|ݗϦBg7[}[;&<-6+YR2wڳ u-9ʜ> lzǖ/v;ON9/s0\yֱbLe}GuNY61O|cm~HGO9enŇTnr͛'ּ;=ynwxEv5U^k+fH~j#呏Xrʕq[s:=Y٣U%{OL*P9?W|W \U T*P@U T*PlA'U T'Jk'eV'}dPN+vK3;qcϚssF[dNǼS3M=s;X&>>9vrR־/9{8rm̾ԽxysYO ؓ~c!~ ?MV|êN.;'ߟ yz3oZ.3g~՗9w%~5ٳ[,ywM:\^1حy/2s^V*P@U T*P@U T*PUV@U*_}8&I>67m>86C̃}r{O =δO{GCelg'f,Z8K o~~@ylY{{f3k\|b'M<`OșszyC-XO&ҧ%Ctb<٧u~+^EI>|9sbK ZML>ij#ꗎZ}riܭj*77_=ܑZN]g>b.s7q@U T*P@U T*P@(}P@7U bY|8088C>\y9/1V6qc߉37 gnrcQl򧿪KlbCɵтɇԝ1stG?9qXqXߘ#o񽲞9}G='G>ojbU7X>,2g!Ĺ{,pN;o] ϡϲh؁ =Ҧo:¬rGx{ ;e3~IM^yT*P@U T*P@U T*P@?(sS@W+Oi!Xre͜}Z{Y{UҚ^I 2'wq?}c㹶^[>kvP89>-8|ay^ \7qY#>z&=ck:}Wq<wEvp}V5%<3u}8XKxb!|} pcr93g;+_ve~5=Vxk;K}W}֧͝fR|K|=g6^8j.[3.^@U T*P@U T*P@P~PF%j@U _Z10}\bٟ1d8s;kZ09b{xM{ؖ\nWc>Xs[69G'pvb^nw’#9Kw3y7uN^߽Yת:cťuf׻ℏ+_3qLY_Y#>sޣ99I{|zٛ{e~V{$a`r{:}%?V?W*P@U T*P@U T*P@?(s[@ kК|`$ed}`Į|{p9}''\3E3?]wκĕ3ɘ3&'usq~ OniY?gm`wP~+cKgl}0ɜ=N̋'.'xbNZ}~)j]g?ze^>ޓS.5׼=O>ydL=߯[3{q3deNI O̻f;x5f8N^kMsF}X^s =+C7u#1cM >qYbę:x:W;q̱3M<5m>{}\ηދc֚3o\[@U T*P@U T*P@SS*P@>9}.w>4w;sa9:c[w 7UobL;{d~#k{I.1!7=Vn-[87qM=u 0{#ϕgOkiʼn1N h.q9jj˕9}_qX#N y&߬*?_jɓ3VL}'W=C~Uu㣳눿7GW8G1U T*P@U T*P@U T~P*P@[{1p wiXyWgmƳGޙ?_} {dwS?uni=8> \Zyrs؜-Ɯs&Wo[=g͜v<8vo|wD޹WruK}sǴsK1}~brˉ]~`~MǦ⭋?=$5̇ee|vkxrf-g'.>1+˜uOmW*P@U T*P@U T*PV 2+UU T!|CIX}2{5窇y-=1{b'F1NN>q3/w^p^r>C-_LZfX}p@r8eo#=Y髳8qqZf[aY7ͩK=em+,xkNvr3;\b+1}ps{0YWw93>6~qw@ga%~őu}З kZ:3n߾Լ Q{웾<͡'}|#?cQ[@U T*P@U T*P@SS*P@<|͘Cc6sGO-}ib)9EsW++c1ybj~\̹0W=gM=n#]g|ĺ[by]9iKk&Y* IDATؼǾSSGO-}oqS̥ώ{z?+ɛfLÊuY[Y{GΉ1+5|}V[|2*P@U T*P@U T*PJ~PfJsU T*psòKxe-yg.kkpwj&YY-b/}0rOG^眣cð^iʭ8!_.9Ēi'85>b'ԽfRV؜-֝;gj`^+'*SEO|sV˿}&v'}oN6q:1;O{rN-bf9ͯjo?fڳrafY҂GbnV*P@U T*P@U T*P(Q*P@>#!|6Uadɗ;'3[#笛ZҟXk~|k<7oZ879rj'sq9wr:krn'5}1fޜ/.{%vb[?}޳6kf[x+}-?g;Xnb82}wf{:rdnb;xl^Xf1O2}maɃχ8}ϓ3g-c?D.k#+Kn3[%\1z*P@U T*P@U T*Penh@UN N I[b|0g\3sK*}eeݚ1fXϞyyӚO~:7q<&+||H+GLuWŵ=92 'G1q0[sӇ8s[O|Y-oV^'mųW>{7w- >8K~w;%gckᵟqfkR^90qy\ٗ#[89g~戹sKo_aU T*P@U T*P@U @?(U T*pS|僺0 1_7kL^|Pi_8q\e]ɽo&׊*`2;k7s'k[ʺsov.nˮvșsW5cou3C Ug#69;_16_ 0jA>wOb3Op[j漟9}GHpӺ^++Y[5{k|zU T*P@U T*P@UZAk+ T*P.*zPJq3G~Lr"Hӳum3 bwM?{˘^g'=^1]:#<9<'Lc0|=s'7~2΀_X=[|{K~NYӧ+^x?9{fΟ!X893g-mA7jֱ93jk<`<֌N.jZ|j^yr|y9x/jr9҇.ރ9{bc{R.9c{pˆ]Yݥ\U T*P@U T*P@U`@?(R*P@X X=(9[-&\e^{ׇ9#g;s3M nU{_Iܜ1yI|8:.a}He>{58?8.[0g9X15r-v}]{^͛3̹J#%Nxex-<.֩qQKLpY9A9}yvv6~k˹5/f_'}[ߪbsS̹38r﷾U*P@U T*P@U T**p9<[NߊcGֱ߽ɼvx yM^ia|xe]>p}ح-+fg-ys2y<'_`f}+kV~#E.U.V~KaϾ˾U T*P@U T*P@UTy<_nU@x!|wCb`ӟq> gΘss1ǜE~boiܴbnaNݜu+gXc/|.͉1/ߴr=a7V9<1\+l}bbE/'AfWy#.>'F=}r+Gc9Rs.r69{q^֦3O>1œL.~[լk'fM4[[}]Y륽vVU T*P@U T*P@U <{ 2k;U <2C+KZ683Ӈ[ skww?br1U.9aH ]3zɚĺ|$ܼ_̛3;Q_?1e|nNlZi?Nυ>ľ/OmF=Xrgo;ԸL|]gnq`r'..Q]G|._|'ɓ=glnZ1u]VW;u{Ůb9ҟ-3Հ~. sb<13g~x6?!Da+^p{`i%lY ~Ze ,n`9{V޳&_֝kN=dϞOΑoR-9Vb=+[g3#L[r-bs=Gb `ϣ+;ғG-J\U T*P@U T*P@U`*LEW*PMW>؇^7z,gνu9"_}l=QC]zg5x 7tǬe;&>On0w`x>-=s?3}G?15ƜXrkijipgƮbJ &>:IkY÷>G)-}'9wm^Gn_g>s0|g'>wXv=8[U T*P@U T*P@UTy6_uUPa?.秏x[G^@X{;q>hfm?e[,GfʥM>}kZuG~gclk '6}ɑ=_Kpf k>C1x{:Ǻ`ݟ7&V,mk9<[}GpL^Ϻhh+{R?*7WR<9קwe8 132o67~V|~{SswڬMU T*P@U T*P@U TN@UVK3/,:/ՌC>vwwf-fyr` ډqg'}sXXsf֧Y^p?w?v1\c?gNcy'Ċ!׊Y٣/{Ĥou,y'%қ5G̚Zs:ZsΪw>|'bsvb̥:XNkXspe^(׸}{s#0O]sks|6}|mU T*P@U T*P@U`@(R*P@xr"KP#oM{var_O'sKvLrZ~wϙqW-}p<5n欭O,yk%gl~Zpʙ=;,}3μ<=8 <1|?pZ0gΤ/#ƒ~Yyg}a9{Olϊoڊc!so<6՞gvy{3.;Noasֿ5f>2U T*P@U T*P@U @(ӟ*P@x pue-%\?ɼ19 q掖ݜV<3߉}x.9YYpsOLw1y\|Z#.ɚX_ĉ1ZxxbnYl&_\'|榟G}Yw5sw/c~G<;cՁީ[o3i/1ߵ=q^_hΜX9ɯj歉kg;q@U T*P@U T*P@L@U(ꂋܼKܬ=f+~sZfcycWnbX7$/jsXیwV6ykWO0S{͉ӒC.qn6/aݑ:!..ZXs~ü̺;WY#/橬%GVZ[|9.{Jݾ35מ%K?[ֵv:{Л+>M\b"3bŧOܻ߽.ƫ<9Y{#Ưrꉝ1덫@U T*P@U T*P@@(jԯU T-y{aw-%cKs9N֌MKoFL';;L| 7Nl;ֳ*}cZk}'cj,'un՗ɼ\9ܭ~SɵBԋ-bvr~{Qh?j{J.p_hYqc K_F05]y[yw5cb{dC=kwv^Xpw/L:%i~qf;Z8Y˾gOy/؟Uớ6q̾]VyL_Ds^ZȻ'646>&6yOݘ^;;€?ҾzilY`G>Kߓus`b/519PLιKrM-OL_aهܪ(3k9Nβ+>qƑ}vZMd~8kчcyb܉>bg}gg5Μn3 7韙>gOǓkSoZY}Y'Z|f9V3î䝷 v!oMxΙjϜ*P@U T*P@U T*P@*/ʤ@UnE%W^x$u{WkO]>1v|;wnǗsOg5O>u]ovm=Ȝk6{<60ɽexrbwkswK:/Ve?y7.9-ys؉'voYq$>ܺՋۙ}2gg-1gvn=ÿgfS@U T*P@U T*P@ 2SU T*(^jiB1YϚ؜<3ﳪeSsn;/9gl܉cΪ]vY^GYcIMsK W;XsoN.Yc')rB̑7NnuOLɧ/'ƬM+:9^ro-#v֙։}a6eC\cxY_u>]QhX IDAT1{>?[|׊#68{}sZ͉KU T*P@U T*P@U`@(*P@O/{%ǵko+ܪf>?{3s3V3W99VVNO{]y\r#N+CxN`؉ jw/qqd}˙|v×]/jΩU T*P@U T*P@Uݭ@(}US /Ew<<ÿ7cq+ u}gu /ƫ2ß|&^.rs"v6\YWnC/783'&3`3s|959`elkv~Dc>c]Yof~+1cr>n[]qy|9,3~A(g$̻Zaw3B&ǜ!.A.{ɑ[.vg>=.hwy蕼l k;?v˼fmNm%=ri'&;?y=}bfl~gsv 'س?'Ӌ^`v'EU T*P@U T*P@U eݟ_U T xIeh˹]-9&U>ܪܜYO5c9cl8Jߚ=aG,16sī#ת3.dws˅69gj4cϙ!Ǘ@r%wr_5<]OcqXjX>xӮr܏ϼ% Cx7Yqا:{mX~ְęZ1yrsqV[']Z>ɷwck]8iV*P@U T*P@U T*Pv 2;eU Tf♳v]]ey̦~wm], 㥺ž6q }7}wWsΞU,V|Ɂ5Zg;'gVϿ!X!ɡϜ >x}cS+rK;6ѳ:~wֺsƟys;~x/f;z2;e~5gmWOk/yfjOݜXx^ś_.?8_ӊO_^Y+w_灓}j&?gOqVȱ?cXqbd5YOȹ(GW9r3srĬzV9{f_kZpk T*P@U T*P@U T* 2F*P@xR{̥i.\bs3"\gw173r<^]qns/ ػ^qI<\XNXx#Y{{cΉOYX9s???W3+8cygx>si|SsG|C+&3gww[uI=QGǺvbiarkɼ$ĥo={Ź#{mu3r~ʝu|ڬrnŐԯU T*P@U T*P@U Q_9R1U T*p^yBLѰx΀g2vNro]qg\iW=:CK]c++ڳXRϞg=q&S;qs3<>)gN_q]޺X\s<5!O.73sEWc÷k|qެk]wJ;d,wZ'y37=2"v[ķ9+W~[O>s/}ZXru]i9;A\9|<7U T*P@U T*P@U ܣ@(sjU Ty&1bZkb<ڪ?w>o:xy;:9}q6X'Ƽį@<{:[p%;O;yݟ:srwO#n?kwhOL=9?g>0ms'` cӺ+$sx?8pg.u!݈s׬g]|Ǭ#uӛxgewf.w|mU T*P@U T*P@U`*/LEW*PNc.6Gquܜ'EL}m|j3fV99409K3rޑ{nz\Sޕw3c9j\.9Қ8ݙ;'~NbM\bͧUr٫AN f^:Ȯf윱qVy7wxכ}7`}W|kNܪo#7M֜cٗ\|bÂϿ]yj<{jv[yc{ǒ:S|Z{ϙYrb<|;ce^&/g?XvžEi'OnNbs;zkd|gc?_p3gI 19qK ~hẻ9L >e^bvE!f5|V@U T*P@U T*P@(/ܢVU T*U ]͋I,31ƏBϙ>RyY~^LY?9Ob]}9r_؜Nmg,._Vܫ^`2C.4??%<\bV<Ε7g}j6&>ey;g?cK8ˬtB&=Z^LΧ\w>+NV˩u܇?w֧C <')y}7igg}?A+{'4_[@U T*P@U T*P@8@(sV@U^ta=yE 2`bgV..k=|I^]B&:9 ƫW7.ra/<9gM[|80⴫Q'oo@{)c}"?s~ʁO^GYykG>,G+gy57OņOaF>g1^w wfgpy?ٟ܏d>gVú矩r88:>cyoΔع׸ok=ݕ,zU T*P@U T*P@UU TS x5/saR,/qNae>9OsO+O%3>g'6:Kk>-;qpz2sf,9-U1l9wvC9+ܙ (O>UԝKXqP?f-1ִY81։Ɯ9.'Nrɹ%9#&-~2G?_n-0sGNs+w j'1Oas9{şӇa3rnr`{@U T*P@U T*P@e)zU RK*ho#\\"zau.̾[-</-'M<>fk9g^jy/}ss֌̹;KNO{_ cLM ~d8yf_iW&nZLXYlNc,\>.5?sv}$>1ϜysBXݛ^8>ɏOsD.sY;)<硦'F+13'{wx|?/rgMܙ{g{0C;|Xc8#qOKC72~=<]hGNgk5*P@U T*P@U T*P3EgZԫU T'P*K/. 0řb8ֵܴj|u=J2xbѧ{ؾcgx=s+k_V9w_4;j9SK?{`O\ M.G#b+~eəG~ӧ'str~ZIٓ[q|~sk~?U.'r<؉x7S]m켌ay֭_+&9GVrC,~T*P@U T*P@U T*P(/ʜQ*P@8W<^H&/x˼Ħ//r47gOxw'ɼ<|5g}N;{'ثS#bs=3o،_Igf<5wť6֒8m<{Y<6y ՟Nˌy3Vxy'wK9蛼֦]aM.6yͥ:;γً'OΝɥk.w}sȣ.6k紾_31/63&YOlz@U T*P@U T*P@G 2GV@'/j '/xsX2l^HxV=7s9<9?Y}x3JG>|$.}!yg-vof 'gc}bu;}܁|=3%NLΝceJ,q>369?2w׊%ꈳk>j#*P@U T*P@U T*P̑:U*PM xayϣfPg⹃+f1=;GK.~j`fn|zgmU->q>'?s9}jy^zVg9ZfY}Aƺ=9ڵ\sG氓3k&qq2]LroGX;|/汜i9ْ'r•wZmpgh"6g֞U=s+?\ɹcbz5ЛwI^rg}]g19e2yW*P@U T*P@U T*PTqU ܥT\Vi!ټS-*g-܅\gΧ_^}-=֦?gC޳j9/Pe߹_}{ZgO Zr>͝ξKN|clr?9g91Z'~ڣoO+z 礟|GκGyAI>wJwƦ䁏#\B]yObrYk˞5;9׸7qĩǽ{'3ִJ kgiqQ'V|Ǽ^ ][@U T*P@U T*P{S~Q@OV!^jy!m.cܷpQcsO֨sq}#^=l>ϣ` ߓuO:7E'pkrO Vsߘ'GK~KIY[?+xP3og8U:6ǟYV9}rǴo%|2^||ȃ󨉿fqU T*P@U T*P@U`*/LEW*P] Eye48.bcXrZ坹ħA/~ֲ oz]L˧S[a3}쨡X,Gsg=gvM ;8-_eZus+nAXON̖<98ϭ[͜sC-ⰹ3}bȅYX 8gM59~q黛fM܌'^c,k3ol}Ξ}obta54gL?G=U T*P@U T*P@U T*P@'2 yQV, 7/Lygw?-\ę/~؜3v9s2{bwr,?51=/7;{LaCp's~r>K]r8 zP8/9.ڴ _yv{—{w _q}bag~\[̻}망3gX?#iL.Z1+*gaW9~$ IDAT1'~W=fܪﱹ|wg] f=vW*P@U T*P@U T*P_yo|}*PK[^b+/狈fM>i#]cgN?1OXf_Kcߪ6sbsj!&g2c\=f6ĸV-/>-:{98s=֌[^b;?XKj}{Qחwe#7χ^Nsug%7uϴ՚3ʣ9bAn$l{|-;[_V*P@U T*P@U T*PTqU yî>\˟/%6m˼sM'/|_;ޙ`s'vK-}{iw4֊x:~b!|UܴwÁS|1-Ja9qѪ]Xfp/6kqO8`ٗa­νڗ\|wkwf*g5捩nD|k^Ngi-fe،Sor~=9x9X|V<{'SyaկU T*P@U T*P@U LQ T*P^pqŅR,VV⌹q٫=iobgڴނ <||9y&qYZ{fl^ˮ<c0>ksO9گϹK>|KwOΙsǜnw n{ˡeOĺ6ߕY`q~^X36/_5mbaÀGu8y1GYbfbY?{ӧ ?=Z]YrG\֟w9f.iU T*P@U T*P@U U_9TqU T* x3MCw n8sk=ܮwbfL99w<3w N,6s+g+./Y =~!AkNNw O۳ٛ~X6s|pLm߼//G>r%NRe-ew&\o?q:+-}8,4p/8=g3u˼`ؾޜvb&x:e8siYf=}Zw1NfN+9;90+c9vζKsU T*P@U T*P@U \Q_"PU T*pN֑X.$[x噽$YX9NNg}wqp%ċzqÓ͘Η~s rY}BBXgۯugYZ8,i}O_qwuON?-InNṂ/;猴헃9|Ow+NK,,G &>h^yag}c<#+99fUkoǙ3.7f}˧\b!w{kyމǙ351ErU T*P@U T*P@U U_9TqU T*p^li%0k>Kk|>}'c̭y~1wd}zW5x읜M:sV]Xrɜ=ΟN,K~uxfwNMUĩ &{I.v?ɝcPs?ɾ|9+M$Oܝb=.M؛rp/cq36ك/fW5gz\+{ss7=pǼNK~g$!N~>33z䭭U T*P@U T*P@U LEH*P@x \ʋ/?/͞r?$ܴ^hw_ŚLݎ0G5߃u܏kؼlΝgb=n\Ԝa'6y5ceԖǝ/m!Ǽ%Oݓ8sG왱gE 9?sht5K_b9c>`?Y՘G~E]V{9kTkjG Y#>/iYey!c1͙r73>sZ3~gVϗ7u矤=~ɍ؜̽br!>kϺ6rٳY?3_81coVߙ쒹`W'֚vzrKtjg5_{r3>uǾkw !v<_DIL)nǝ0{Y岮'{kxi's> ymsկU T*P@U T*P@U ܣ@(sjU TȋeY/גϜ37 ~qw{㻊͚ZiՏ#k=w?L}51wK5sx'.=`wo6w֙#ZOȥ.֧/LXs;O.ot|78F|ifṊ,qɝ3f>gəKL$~%99g8qӗ;+gO-ܳgq̚q;{X.rǂ5ӂr'2߇÷{33yIO7ʑ3Y'/Ɯ=C=}bq#?+c|O#{vK.~v=r.59ek9wͽY6~S f|bcn^ob&c{h;U T*P@U T*P@U 2g7U pREfLlX!FZgӷ`|V0=;c}z~:srUrxϝ2O_L WxiM+F>c-3'u}Ngq.8%u2cgbkr8Ϟ#rM +pO}ȱˍN/3gc^s̯8f8y.KjNrfO.3?k:Ѫ1V_|˽ϡy,Ϭou\G\Xr|wspCłc_|,<}/x_3@gÕmҟubsZvQzɓ{z//g>5?uufg5bXg^`5=zg/3yrd.{cۿjG>VXrYړ~s3abR33vU>Nd.U?9'o6U*P@U T*P@U T*PP_AU <g.yi,Ǒ=}M;ܜe̜3Eksvw\c_;>38&y3u3pOO&֙yk=Yӂw;؛^iljڌxG~aW=}||?_&9Owg5,+|;gMܵsG¢9羉u3=3¦lrrrΊ#3V3w:?_~Ľ9y{̮U T*P@U T*P@UV_y?nW@x(Vg͋//W&ڌN7wo;S,{bٹ95擃nvbvU!cM,~<ǚ;aѷWʯrw֝WjxbGk=җ3+X&'kbBڗ\ɡXy9g 8?w,9~ϗ8-\]rMϗPV3G{mu#rz!N.vGL}8"g=w̭l9/cyȝ9+|Zկ҃>~g=&&}U T*P@U T*P@U TN@U& :saG7-wK_zra3+58 N&j/y&}k'׊1yޅ<և9}/挵^pSsVK}rMg9)k8g 9|m/7Z2gWP3O,~ڬ瞓oӊo~9] +r >Lsoo'}ɟU޽&{]_G.5"=`cqObbV6^/FBfr}nn]c>O's#m 4qe̬3V9ञsZ?g\ڬg\[@U T*P@U T*P@)/i T*PR֋*/%~֭ݵM9{NgU7rrI86![8gN֏|?rC^Į|w"1/܊(e|ĵ=8O3Gmxs>8sįrR/e`rT/bYY3gأu.=P7/cw2đ܍b}z'$7y7Cbbg8W|as/g}ǗY.gyYS[@U T*P@U T*P@8@(sV@UP.|o#i^EuyqָfC.Q<93N_>r"\ʺ  5{2i噜.nZw31`'IsӢ+~u6rgjՌx+w+=P{LΝU,Wv/.6/w5>WpЯɑ>;w<+>pɋS<2^-"Z%F?hқZK:|>~{P3Q3>sYwVrQ+5}⌵sՊ7~]9`;f̎U T*P@U T*P@U TT_I5W*PsW /:s e~ś/]^.miGi^җ=Cnsf|yӋN_}Ͻҗ<~I޹'{bn>1J?wʼsGۉe/N9I ϟщ]%{ ='J}e9I|[ΖK.`dN+)/bhYL>wf\m=yVoN#ε=rk̋O o &uzcΔ-xn.Oߪ9#'~ޕYO*'mbӟF-s粗y+;թoU9wYYw ЛsYnߴbEʋy9_;b'_FX|>F_`o%]o7sȩ|y^rCO''{v{y=3^Xbgg-+ђK<|?_zz?w\U T*P@U T*P@̫@\X]Zͭ.y59^zAH819G /:7/gwu^|$/c=f5Go>3O:eOn>+ȱ'}sXvqWbvu?}#t==5<ĭ+LQwK=6?5܍HZrh=O/X炙GC/<&N.r>|?܇ě/;/w|&yĦ.Fw'cr<<ћM,ܴR`_|Z#LR#s˝g=qG6~gV@U T*P@U T*P@e3P\8||?9_Z|o*%UکdYB!^ռ\z&.o_bG-xeN˓!N?97{w513c8g//37}yV˼ƉOi; ~5&ki81򉱖y}Ҫ 6s~r'/5b/AI,yKb҇/gʁUg|x|-8}8伣g1[̳g^beorxW+/g֌u5+>^U*P@U T*P@@(I4Q ?|6uw}w=' =`g_>y7/f lK:9kU|<^N;9~bvXEw><'.kUk~SAY'vf>ȉnmcS>v{%'V;qsGsG-?r!2WO{̟p+>ʂ5Cҷk✃%3̓o:gϗ]8Gn?G,=ٛu{ԭMΌ$'~rQ3i؃>!&mO^[ZӺv5ؕ]Yϣ8.V=U*P~~mb77?T*P@U T*P@NWfU ܡ>|ٗ}K2?C?U_U'~ۿ`??~vP?}K1/f ?/eu{P3/.wNݬU'~qqG#iG?zN19M<;f=}wR狄Es`WLJ^/9dsgys9i/Ń_| L,2ۇ>DN_~l훼Sgi݅>{?7sƗP;3Ob?2/g{yXjG~Чoo{O~sbؓ>O l=cys<9,{n_Zy7N;3 (??ybV___<IU˿/_y--??u_u釯tM-y ?Soj,+77v C' c{vK.!˗2kƫ:c/wL$fgغ5sggXcKKOz9K_ˁkuv&sK ~#1~Zɇfwvg&mֹ$ ZŬ~'\ΘXuugo#__}> kwy|N??uBx{S>S.OO>|w=/?~W~gg1\+__Bsnv oͿD E>*\/ ?|I_Xw|ܳ;}no^ޣ 2]߸@Rgg _E_tȏj @*%V2B'3%>83f.g~axvx^Nziɩƪ:^{r`iy|s֭{@ ε:TH'Diw:wO>ioyəX~O:+gXβg~.~/zg{'|uH~ɽgEIߜg}ɍSIg`8jr׮~ٛ>}+ֹU TTg~g.{/,?|W+$m&M*P@U T*P@oחU.Op"w >V[ pi\Ҕ yj8"7:zĹk~bry'Z<k4R{)K=Zkc8O 3gӗyg!6E3Oe هN9,|q9<9Zs뿀Kg fZgAl~Cs_c埖Zr'Ǻ/|bvC mz@G (O|7}??>җiMMV*P@U T*P@jEwQb_ŗ}`5KK/{o* y6c{~+.ki%6Sw*\zJ1ǝdmg,yaxgjٿy'Ĥ/6'F3G{G'c.Z1ZR1z\gopXyrX}03c쪇\>r;zkk.u2<%쵓\=7'>gY?qy&K<13NKy9.ceo*P m 3?3|ɗ|[}Ce*5Y@U T*P@UR_y>ϾMx>я^x>?˗|#VfK-^?/̫֙?g+ g[q9c׬xf3pkKmb_3~Å%)tU{aϺC=ua0r`Tt ^?Wr0#1I= iC1;75yQCosZɓu31vu6qi΢Ο'Xvd=yW~­rgxiWZO'KKnKnns@g~>|x>U T*P@U T*P^}EW3Vq?}_ ~mW^e$8.Px.Ƽ˚m^a37c~pr[ܗN ~sϙW[*X yevvֲY.ۜJ5-ڞz_Sz~akZ}g^_1}+ǝohX0ﻒ_|s-S^ٿaLS7;,Z0z?^>gyͿJy= S廆1j_5;=+|06z6'4μKu{f< [g|4O-7||*|:5}?+T֫k~yIüg˥ʢVV5i;f3#>z:N]<|W>5/Ӈkmpz_Y/l}Sw_+j[sϙ:L^DZ?ۘoZ'Uu|ש|*,W&ߗiIW}O}w֝VfJaݞ22]Vy}wfٔߘ5gK]D}9Gydwᇏ ?O&@:v$mtm{_n޵m=s\>;|:CԙF9I-sBKYv98:[j, 낳,?[[ob0\:yev/ڧVO m{ymO{K^2G;.l"K8N;H݊1\ D8)'}{ Oxº2L5Li @vA 7*paV8Y}nwu}sź:;׿;};Y7 @@F̽6c^`mWc}#+&FM\M@D @VIU7*  @~n NuS~[~w՘xSztз'8 Ԍ.h" @6Ȁ>aU?- ~^j޵o?=2i @C:Mf;4A`욛:׹@|+s<},d'l @vI'>.g)k#<^J?~ӟ]۞'O"@ @vԓ#/y kkn"W |:j>tggL @@]~;onK]f~7 @ @% Pf*O m88ݯ~CY/~q?D#2 @??LWn~.pg=2& @ @{@<5E S_:}s;L>ݗ>Azt7 @ @`U]r~sԧanq-o9  @XE_ݽu/y~';ɺzAA4 @ @{@xqG?a_O"Hۓ&r__6\`w}r }o|;םg۽t_Uw\ծ[o%vW5y͆Ydԥ.p_m6c;yϻp=3 $_j/~Н$'8 Ιѽ,rS'S9vm&};6d[r糙w2O}?~E/S׿!5y'8r|׻սR9~կ~~T+_|;f?}{_?'=i9ǰE)uRe~Ǿ/| o~g׽3 }Yd4ͤ 昗G-g:ә}oo7Z&|3]I>fu6J-׫?.~vcK꺌tԃ3{ڊNySǥN6g4Ɲ6>Oto~󛻴ܖzG[? ۿ[ΝO~?jiuϢ6\]*WYH.y,NwWjwK_zz;ifڈ>9W7O) m9}m}٧ofSN'S9$VX ^ !_{?]tL~OsD':Ѥ =w]36h _lSn2:i7a6-5.%vV1>LnxN ڨk|g+[֤ݤͧ5hNZuwŒ0inl3-U{4B֠4o,֐8iX oL_FI YNy!LQǝLnOZ\P6w*(8wx+_9i9ÅyCF}8eu;anBcʳ?E OqSL͕EGX+G}(S['ZE@-wZ9g=YG`_Uߥ7\ާ^x__uf[I?|M} E)yG&2-n1i1 mE'?k?|?$uOZ' co^uZ'QXua-dH\v-J-` I ]:2MZ'Qnf&3K-Hb\:׼349h>-sf/rk*ǧE)cNiWMꢔwJD ($kM7ʼtܧk4vSK@i>6MnHw'mM ӛ?=ӻGUO}ShJe#lvW )7}zjdi7.g>}og=YcY6xӟcjR{ ^S.ǥEFIӞ~^^RwY?or#ngDktЇ#=Q;9ס:%j9Պ鱵^zJ/ 9~fͨg9~7J?kh' ` .v1s7?l~r,K籒_s\K FњٗX UJS^)lOztG_퍲od# IDATN/>}\\қq^OvSlx8{fĦݵXhn;aF~驚42Ki17><5Xjg浛2}O܋?f7Y_Ⱦ5RNye_fK3uTHMpQ6Ed^Eg<] WK=7i/X| wzЃƲ6m@z_Z2BF9?u$s~zys$_5fmA #ad4ἔz~]z~ve_y+[1 ,#WT5SЏGz.wG~xQ3FF+SH.uv}#Ǿ~ S)uTJ+fJhq2Ȩ[@9iy+׼Jo4bڼ>OOyTCk'ǸN^)5:uxE2P]/$\G7]r] "g e\?e2mʤu ǩ҆cUFwahshfcF*?ݏcFItٶ9f;RV9,wj9/-uG͵nFkNjSV*1ӷ0ǩ\ؙ}2׬i_q-mvc)wF5qM8t3:D ^"@J Gi[~ӈhfDJey܆߰˚}:/="fG>hCN{J!% jF_K]xM'yu#Ǵo7or< IkX{n3#ʤwOn OxB?/=chaeGl=ٯ.&GwrjN2Dy?i vC;ʈ2+/h5YyK7_3o'}h zo(X!vկ~\~~~^u(wz߃,#ʤ6d͊{0sdՂrs^oZʰNfˇnz31f,s]SC< IDG)eTik[ ֳXX{,ۨ6`,*Zc2PS@NDUcciyDK9uR5i瑷c, fK,36M?/c)o#n-bZ5PXbNciweQmϱi{k#ae#ͦjOJ[c3}vN^領AhSuz)'gm' yzyE 'zZG*}֭W[Ŵpt!@=#-mt5Dd{#cdԤK\]kX"CƑ5TY] X3/2i 똷nwyt]RfKuLq^w؟ M4Ϲ5lCg}\)/Z?C,n~z<>LgNuc=wkrlϯj636Ly,ISfSQAݧ2{{4ol=ÓϮ?]>iU#Z??<,g<1Lw|pyERU'@'-HVV݌ 9i/P-ձT@O=uạzئTeق9vߩ6iv'=.l7 @`@* y>7i؛^hTQi/m.7Rh>,cB˙Qim=M7U/zL'SڣAw.E5ovg>3ͻcC͛]lYHh]Ap,s:d?I@t}[en8tfڇ_-(OvMlO+rԧ>拆믙1Pe\J/8.0Wf8,*ٕQ:GLM[xw:'"e4fWTj3׶z>3|1,WVbY&V4{m~ޢ}td8Y֯yʩ(rEbX$pӜ;iOۥj61ܞ:­=Bf]lNyl6`}[0֓`wX5 $ ޝgҋ.= ok@2z-WyrLhm.6["ͮ,w2:EIG^?W#8bn37]糴ugIJ#~jGC8CfV(7prM*0c[>ofH Gu6rxJ,׷I]>aG{Xio~/<^UY/*%AY He 0ԻktZ0mNZd]ǮaC>Q*-K@([A&ĒUiJϟw ?d9|"c^J%RF6'PVlSR*wn֐]{nqüꙷ, n1k= yòWj>镒 4*aY-XȆe;N֞e?y}2ټT0\y+y2}wk\:Ww^w 9%, Ii}ӟޏ^6/=wcPfЅ4ڦa0 |#W2}"36ccc=f.;2δT԰2iM&ɬSn?QG)ޭÿLfk& UnM%NPˏ-c d?)tnz_'Gf~PjL-:n-*ΘGt& "X)T]a3I8ca_Rc3EW=2L:ݼ]ZO Y:UN2ܚ 'I}MRL/}c]F[H"nyMnr>[쯌_.RnUSӼ "۬Y=eq{gXJϑ~#񈾗A.V9jl3OY ͖żcfW_V!{RO7?~ij,sjy?LUVòί5^.r7zKqv~}}* [?}k~}_fCۀ~ӛ޴{֟r. {>яiJWUUN\eQUΙ6\gN{yEF$_Ҩ9547k=\:U r3,FkGkF(|ի^}zXW[{-Eɱm[&KoF ׭oxR/HLgF걳<3/j8o+ˡO=e=/:n~?, o<=#;׽.*aY[M+vɯNz8oNS:.JkEyyCk鸓k_.@>vWiCJK,sQG[܇en6>V%m๶MpLkc]ۖsrYd=7Om~S~g>Kym 24c]T/w˭Y?Ô錎-QLOx4T>bBTU/|S TEY㹙/zыe83/|~OǓr3X޳;f eyufw- eeu,e&Z~l8 _Bƥ<}(Cqt6q>UcyT}cir/G,篛z.g(MQ={31]),3o8\gȎ{@ 7a17@^җv}x-C+}pS Աfm֬xn@ٔ 4M??w > TY |e9Tپ K/Ae=/:n Y5larLhsӮs[0ep^{{ӏ:Ŀ._e5,_f=JWR0\162]cpyCz?ǖiӞ8w'8ܫM I~]b>f}͢-:6k2ف^Hq1 Lzc۽o> lڕ}j}~57\g?J YbQyQw5c6Pf0 2J/aL=z&y,w5\vm >XmX5oZUjἝ>ߎezc1iT.ؖg(k6QbWbwto}[0Pf^e9=yuƖ)ysN'/ǭ_ݻ|fw}p_g !>]Oo*%@'7Rčzoȹcwm3(vvGҗ놁2$G3iG muG.p t-@KgFkL[YȞyML"3TY ?0:c˚k>zғwb \%Rˢ _]5>WQ0|SlS<>e° $̿ UN{tP)qW={vm+Ǹzg>cgwu8J:hy/}~%żpڕL_E=|}*ӆ =' Pff{@"߇#Ulԥ.Ua3ZFztӝn1g?٧o2R.Ns gy@ $߼Ek~-?o9ӗ+w ON~d(ےQRy4^}_qsԬ5r#KCwm׮~= IY]xPo(aݧ>E[}*Sej})iO Fߞ}frcmx>:)Z2TiSfÔsFSUYϹfSiXye?/\_Y.gZ]ΞfwydX-eii(yd6:g/yK2>Xgi^Mmo۟kx;#oqFO~ }?kb= NK zVD71d5*Ɩ5c^`|c~;|#vY =s?i؋(Sh3I6ҨaK]ڼ@=&+g,UJO i uQBdjk,}~x'_rZe}jgJtvZuUyx5v {=iԭ4{~k47' |Zo;=qwܬ]}N ✷O$3PI4t>2oo|^;bG?c1,sܧy,^Ǿ#ƾ0g:ә1O{1 S Xy }*ky맧r?S=v@facݼ'Լ\2kne4_ V+.cc1;>k?I}T:՚/3Lf>TgyAc뙍  IDAT5*Ե3XcVFcUO;ERv g8"m@F2=?]GTy~eF>Oϟg}L;[O0EuWNi#HN/ G#o}=6W籴7vc_42X@F45NV׶^6^ms9Sf5yk>N K]L#@`U"@Z wCC=t'<P&7~tvcz| _X.xܠ.'2&._CФVˢ  ?MC9dvQ1iQ2muMX,Z~Ӳx_nֻ.e u_Lo7o1v1/x<LLE2%. 3i7~9 n~{r?5LZP;e·I[-m~\1iÁ[wXO5|+OZ=q~~k$-u+umK[C5")Ԃy9־/=i@/<`|h_byz=eǫn^֭zdۍI)OyJ?|[ߚ3Zu{ti׿- m6ƴ`| \}Sgon?r|uOuM8fҮ\K[`]O,ov[߄m.ה|;c`II ҟA8:y6 ggOt;vӟuWQu4!quyӛt[۴Sv-8nXs2NY?\7?u6:I??4_ \g(Nl#Nll_{,~^Mozӛ뷠>  lM @\ܐ ܸo-^\{!p \xޯ}ENhR)7Ur,[nAVr]7sO~t^{rVn|OrciRFgOr7Ԛ]iT& 64efEX i׽u{m:-Zьt+˧"ALXMU[ZZ}F嘴[:]`( >k͞zMr*A1Ô 6ZO&ye}{O~ٞ<}x{j8$'o\S.i૛%׸57) <].*x66]pFՔկ~/y-nqIn6Ȧ=/mdwñdxˤqՆ6$7ۖnc 9",N_UJy&zFna?˴ދY$82ZO~^kwcFX-s5פr*uS$X#GOHuzTX v o|꼞0q1Ǿ=AK8.}S~k_;ᕎ Fqz׻eM,*}z׻^?/կ~fy#}{޳Kpzޏ~7OIG NK9k5ٯ఼S 쓙NO3,kah6\ iҞPαq,%Pq?'u=vA#FJ@\fߧ-n6z&?+&1*WJM^󚶪Ma޻;<&CUF~g?uiO;?56T9J֭ 瑲ȹj؉.Fl.8^>q}lXo|b-N#q2?ѳ}e6Ӛr.K, t4`Ϻ'5Sy%@` ٳ RYIEߞ:m鹉6:_ ߤ iHuBqM3{ Pc6Dҟic={ QUCngA$.rmo{oˍ!#K&#^wps7h4*Ty,zȱ@Ⱥ9N%/ՠh1Wn"')&1T~rSz,*g>kYx+)Fs3S" ԍg 8˾i5c@Y4M췹Q4=^<Ү SF9 O{ ]Z5bs5jUN=onU,9T]=  Qbڊr9^hf3Iwdt%)uqgٛ?6z˼הlk\vxK;3U3jLud )EiF{uQ;9_ĻU3/tʙWKWmi_Y'y}vlL0fvN(g}+\S5GnDo < 2bT'\6 d4ST p?M^LV^Xy$B#Z{)m^?7RKS9~O.6JyLzrUJ##.74{nlCzz{]jW$ \0OLʨ$ 4gFle\iP0s||&pl`5irc2uE7oME'GqF4X8tJK h3ԳSVc/iӞ;jL`Dh]kQ]Z]doy_tӵ]L0WEHwO۵˚aK]0Oa06$k6I$I`X9f-cgʲ\t-kj[Z ޮ/? WY$ԵQns[kqٮ- O}Y^B[:ej.1Zi!Rz4Ǿv/Vࢮ5vk7.Omn^S[=OΑ:D`oH.׶rj#7e~$m@ksmk͏\N }+u֜޵yfm 9ߥ (mIiHB3UhRYؙl7}R;cꅹ%w !9~UrLw{RO{ϮSiU=|{)pٟr9c[mCȺ9O{v#n^[sMorhWZXO$T$eY! Pf5V @ @ @ @,Y@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @IDAT @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5ʬF9  @ @ @ @% Y2  @ @ @ @VC@j @ @ @ @X@%˞ @ @ @ @`5?L8>]IENDB`PyBDSF-1.10.1/doc/source/_templates/000077500000000000000000000000001420247104600170235ustar00rootroot00000000000000PyBDSF-1.10.1/doc/source/_templates/searchbox.html000066400000000000000000000015051420247104600216700ustar00rootroot00000000000000{# basic/searchbox.html ~~~~~~~~~~~~~~~~~~~~ Sphinx sidebar template: quick search box. :copyright: Copyright 2007-2011 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. #} {%- if pagename != "search" %} {%- endif %} PyBDSF-1.10.1/doc/source/algorithms.rst000066400000000000000000000125761420247104600176040ustar00rootroot00000000000000.. _algorithms: Determining whether an image is confused ---------------------------------------- The number of beams per source (if not set with the :term:`bmpersrc_th` parameter) is calculated by assuming the number of sources in the image, :math:`N_s`, as: .. math:: N_s = (\text{No. pixels} > 5\sigma)/(<\text{pix/src}>), where the average number of pixels per source, :math:``, is given by: .. math:: 2\pi \sigma_{\text{major}} \sigma_{\text{minor}} \times (\ln(S_{\text{min}}/5\sigma) - 1/(\alpha - 1)), where :math:`\alpha` is the slope of the differential source counts taken from Katgert et al. (1988) [#f1]_. Assuming a minimum of one pixel to define a source and ignoring the effect of noise for sources close to the threshold, we can ignore the logarithmic term and hence :math:`\text{bmpersrc\_th} = (n\times m)/(\text{No. pixels} > 5\sigma)/(\alpha-1))`. The value of :term:`bmpersrc_th` is used to decide whether the image is expected to be confused (and if so, the mean image is taken to be zero) and also to estimate the box size for calculating the rms image (see below). Calculation of mean and rms maps -------------------------------- The box size and step size for calculating the rms image are estimated as follows (if not set by the :term:`rms_box` parameter). Typical intersource seperation, :math:`s_1`, is :math:`2\sqrt{\text{bmpersrc\_th}} \times B_{\text{major}}`. The size of brightest source, :math:`s_{\text{max}}`, is :math:`2 B_{\text{major}} \times \sqrt{[2\ln(Max_{\text{flux}}/threshold)]}`. Lastly, the maximum dimension of the largest island, :math:`s_{\text{isl}}`, defined at 10--20 sigma above the clipped rms is also found. The box size is estimated as the larger of the quantities :math:`s_1`, :math:`s_{\text{max}}`, and :math:`s_{\text{isl}}`. The step size is then calculated as the minimum of a third of the box size and a tenth of the smallest image dimension. These prescriptions yield reasonable numbers for the images tested. Either the calculated rms image or a constant rms is used for subsequent analysis based on whether the dispersion in the rms image is consistent with, or is higher than, the expected statistics. Hence if the dispersion of the rms image is higher than 1.1 times the (clipped) rms of the image times the inverse of :math:`\sqrt{2} \times Boxsize_{\text{pixels}}` then the rms image is taken. Otherwise, the constant value of the clipped rms is used. Gaussian fitting ---------------- The current procedure for calculating the number of Gaussians to be fit simultaneously to an island is as follows. First, the number of Gaussians is identified with the number of distinct peaks (higher than the pixel threshold) of emission inside the island (negative gradient in all 8 directions). These peaks are CLEANed from the subimage assuming the theoretical beam. If the (unclipped) rms of the residual subimage is greater than the (clipped) rms in the region, the maximum pixel in the residue is greater than the threshold for this former rms, and is located at least 0.5 beams (and :math:`\sqrt{5}` pixels) away from all previous peaks, then this residual peak is identified as a new one. .. _grouping: Grouping of Gaussians into sources ---------------------------------- Inside each island, groups of Gaussians are deemed to be a part of the same source if: 1. the difference between the minimum value along the line joining the centers of any pair of Gaussians and the peak value of the lower Gaussian is less than the product of the island threshold and the island rms, and 2. the centers are separated by a distance less than half the sum of their FWHMs along the line joining them. Once the Gaussians that belong to a source are identified, fluxes for the grouped Gaussians are summed to obtain the total flux of the source. The uncertainty on the total flux is calculated by summing the uncertainties on the total fluxes of the individual Gaussians in quadrature. The source RA and Dec position is set to the source centroid determined from moment analysis (the position of the maximum of the source is also calculated). The total source size is also measured using moment analysis (see http://en.wikipedia.org/wiki/Image_moment for an overview of moment analysis). .. _colorcorrections: Effect of neglecting color corrections -------------------------------------- No color correction is performed when averaging channels. However, as is shown below, errors in the derived parameters are generally small unless the averaged bandwidth is large. .. figure:: colourcorr_full.png :scale: 80 % :figwidth: 75 % :align: center :alt: color correction errors The correction in frequency in kHz as a function of the frequency resulting from averaging *n* channels each of bandwidth *bw*, for sources with various spectral indices :math:`-1.3 < \alpha < -0.3`. .. figure:: colourcorr_order1-2.png :scale: 80 % :figwidth: 75 % :align: center :alt: color correction errors The error induced in the frequency by not including the 2nd order term, due to the colour correction of an individual channel, in Hz. .. figure:: colourcorr_delta_spin.png :scale: 80 % :figwidth: 75 % :align: center :alt: color correction errors The fractional error made in the spectral index while calculating with the incorrect frequency, with a second frequency which is 10 MHz different. .. [#f1] Katgert, P., Oort, M. J. A., & Windhorst, R. A. 1988, A&A, 195, 21 PyBDSF-1.10.1/doc/source/art_fit_alt.png000066400000000000000000033256061420247104600177030ustar00rootroot00000000000000PNG  IHDRrF/iCCPICC Profilexc``2ptqre``+) rwRR` ``\\yy | 2 U +'300%@q9@HR6. r!+ v.z H}:b'A2 vIj^ʢ#ǔTbϼĒZ@! A!ahii "q(v!( cd2f` G1G)I/15C}}sïPo pHYsgR IDATx=GUl4!AВФ J E!A HB1N"I@Ez R (|G:o{_wwݝ̙3gfӆ4$  H@$  H@$ w H@$  H@$  H@> $  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2 }F_ro}kWRG]7=O:rOQ4Nۿ-߽uM$w]HsvVՎ# #fNN_t+]w<9]Xp`9pݨp}sMᶷmPyt/{:/yK>K۫_=~b}k?2ycNoz_;)_s/Nwjng5xWkFq<C9yݝ#[S, H@ >vuf@Kq{\]]&71\h:}f* ,__/78s??ٛ8߮͛I@K7yGMof7k~h׼|27:{M bl$(;-W՚ _ͥ.uK@$ <яn wXyAFh,!2[kObXs\t~sL1|͛=^<}˳2vWbc n0O|b1=!i { ^\"iԧn7d=ݒWu+# H@V"`lL+{y$X XVouXJstg +ҤWrÔ!Cuz<ͫ^N55$T$  )wǚlI@.MY[6z5cSs_җ3ZYĺ kĢ .wZW Lx__v܏6Ozғʵ4k7\r^|/?S?Uօa:0 i~ǚpd!}Vo~Z׺huĆ%ͷo|cîWy?KMgf* ײqN#12mB:ԁOnw{ر574pT,0]F(x沗ll;X@E)/F1k0=Hza3L'CLbZ*ylgHZ)Gyds?sdX?%  U,P4x}_oiF=K} ?]vggR!S͏ȏI;D ]6j*O5p#四& dL.6(*aЗr\eTĊggr/~WzyVN}!}!xGS, ϛtY!~}AַUtCA\F?eY,,C~vkK_R.6x]X&% ,gBAyeJtʱV3u(1ug zgz\{ݮ<x_gN^t?-n}9y_!9A9!0gVe>?Ŀ|#%CZ)ܗ>mȔ+_z}ߗQo%{d4Q)aS2TZr?xuk(ԭ,E=V H`xЃVT1\)UQ?Hp//ubk~ʽ;ƽCQ[v7ިk^|e-knsLwXecyO>CamAƽ66w1)ha7eR`ȧ=i]^CIov2| Ũk x#ZS{(s__^('xx~ӆ!v!n.dd')MMZvC'Ԇ1x* I@1;O6:]CXtԆNolNO-Řy]*F̵s7 `F]f7^Ɠ/x 18aYor0tg cWK>&崛W_ h83x6?y}A_b"K0k(_H,7S̼_I{8`ƀhZFe ð2Cŀo ϩ﷾0,ݍ,q Ow_N |~v?,*՟R :n8 miJ"ۍ=3Uz6lI |z~jꬔew/L}Lie7oSR$ %ww{}/xDZ N\亨Xo@(#D"x 0ZdXs4\÷%8jF ccOP2#ЗC~3 %h[ 8餓'd柑UFf !S<2 H&C<ϟzxF? 2j#z(ޛ` ^xg#śݥ]cvZ=xrZF prܦ =) H`O# dd/uo6Tk}7#7S.EWv0voNC'mm^x%!;o3!h!.p;%'xb' ,1G[7foٲqݭ 6} oy[,w OPhh;(PvC),K>Z__B'ċ*=oS6|U߳rr''IJ5x}1,SӿguVE?7^x;D:y׻޵x]nZ({c݂ Bo%F=tt`3fP+%Wt=9D]٠7>lG! ЧAD$PWAg< 'RMy~˕2̬00o۹8ٽSN)xpUyQOf:^SIL$<'k ߡ_Ч6~ 0#)kcfKvlhG^>&sպ>;hoKߐr[ IDATN?% KQxY?}+0)u3@(mT],xsucuv`[5„ %ܐқ%mLE_SaD)/x.$ $P{ ya0([Hm^. 9d]8K|a(0CDyt]kP@R R+]~~;W=«Sá̶m~K;ھtߙ >NYI݂yF!<^CoJA_|;VxI ̵<[$:mfL{(Ƃt#|0v eg&=hClF|>1nΓ* '300zw\z ߙe{U0eRV Nw?D/3މ#8 t=1B/}ۅ^}ݜjrʳuyF e;ϛ>IvajðӅCtz Ϝ:z~>c}an>nK}O'?ɝΉGgLe|'&lVt U{&3@s2cy|gF}ˆBH#-ɭ\ЦO1m.Sv_oHi+|r6\`T$ =@4+cxSOœrs>0R~*z Qlc +!2OcQR?vA+yAH7x1HuZ^υO&0$L Ȱ}%c(ر?c_xV!ek0rӍ},C -^Ww/v@m 2W܌d:f[&X[>! XN}tr x̎Ix۵-ho ck*5_[wPy>R~LVċ^ xtM]GG8Lv{* f5sCW A3! a1./[d vƖ=ORn“iC0`tc:p֗2q^߮͠p }/nxw>fOw72>nj}_)1sh0dSy2}1#K?F0O3$`_tt +G8qY vlg]Z;Lј~672H@{@=2IcȔ0bj1k\(L]aʝtЖ3ʞ2]v$U>Cnb\O|,;*SW ^B!̔3lVrJ83/u.@NMavZ#eL TéPbA=$ H` 0 H ܊a,-m,АkcpLӬw-9ߟ'47&L? S>W'Kd0nHN0S>Y hi}Lf:vNha>O>Et_$X'|td& ?bM&<2C)qHƏP'N-p` +´ֱw0 5MKYdSzSSu>a옰 BCS y.?)Y^تLNa0zυG=Qm8m)3[6r $2ܷRRWlӮ~K?zmVbZ H`Sr] .fmH}]P\*.kHdt6SnHƗr ;hq0^1&CCX"%]ck$qʲB0W6٭,%@T$X%׭ H@H^e=.ݩdpZx:O$ua m 'at֞cm1۰*:{̱J}8YjN脳W}C\ya(`Ve!5gi1W3}tڠі3N2.l\e\K;O-|naJmEpwzl; ڊ+A>fUc:x]*,%3R Yi~g JL VmFmh{`lqkiPݬ CN!*[KSD9X[TW7ӏLj*uu|CS:1*mvŒmH<]FY5vk:CxYtx^Sg1z11NOac)e9\YAIH[)Oҝ”$pP8tBbd@ @Lr0W z05%l~0&sm0 ۖs>;vi{ X)lNƀ*:eJlϪ-vx*|dӔ DYfG?}?v?6ma,5m\g36.8W+#UJ'a#NVfOq(Ne da\rʃ1>^ $8`~%ݽ!ԁ1 ̸>_лdcg28uصA0sܧ͔z`(=ƾLAAI`4Uީ[?TǗM긖 S^{1=X2b4ZXH' 8Wd.)Ca8ApOU8(TR)(T!Pcs =! H` 5BaT7uo@X-%aTutӨ5V=ڠlߟZVw13sNGlPG~Le5-np:7@?[EŠwl0rՂv8=\#Cp}z)"' 2_|{Nv.{=\n2% ƾˤiƷw& b]R:jL@ ` z3=800΀;Sc~˺eXSp!?q7WokYp~މE{]V$ܘ> c3GBbte*:9cxLIVSaՊ\x 3u>4s1e/- vć7_*L a-\ԝ&:ug,/˔ZǕFf OOf-E^"'_lbTcH嬳jX*v -FU. }tXwkwZY;-ul{;mk 7AUxbx'xNM7Uop eYkSf5xM+kv3}A?oQdY5_;UKyUNW}^sa]a4Z%itǷciS:RjNݒ8,~ެ78%u7uMFib3NZ"c}؍Ŷ ܡ5X ~PYbG}h 6kIu8v!!Db׷9g=4f?O/ct:Isurh1o)WL?UF1 H@MCǚNtO9yreɂGTGo_~˄=ǮvױiCn܀no?X?yͲql&˥LgfI1o|~rcaճ GCi\ ];v2_py]!\{w9276~>ox3a+Ǧ2{lX핉3L4ayr6נ a3$zDa`ʸXHfb>O?l7v[cv{sK1-8 ĶeYVJi7hpid=tsS=c)I←0zgkKcl<ljN ~ڏsen.P$ Inqxv*ۻj zm=z2|/1\0ԵMV±lz9f˰[B=*讜ۮv8s7}Oc__&mĕSC9V???w;uCewkx;x6Ma]ԩYۮt\/xcE;׆9ti^lw増 ?ֆ{ƾ=LE.wKb +SJNaNM:m'SFf4&x`^\?!L :XeYNaԔdY! );_DY7Żlꕞ-o{&=jXV k"scJAAvX8^s0ar9' ŸGၔj1\r+Yy=eC6Z<RkwJ# \^SXoh-oyKOrmRfLyb̛JWYΌcL66I,PmvrgT rSV nm'o'V$-99sLMa]uwvCX7%K=S:oavwLɣMw O7'F>ɬ|r',!a}T6M׊us#SzNN0't&go ӻun ct ~(NȴNٲz2M[fSfsL T;SҔMn]tLY./7э}sjmҜ3:0Nma}V9ϴ1!ȹG!k_e3bٲc ׸FwoSXO5EwK(>&SS@ywgz-뼡2KNTtnQw~g3 ^-a3K7!,.c"I!s[0{p2^7T,JF˶9rPB̆0H;<#Gz׻ʂ6 7FH[0(w'xbY.GH赮ueN!QfSQ8VJ 'tRvcSu{5xay(>ye_ oޙ!O yx$ &I}J;4dԢ-%s=0|#p9^nlXn=nO|g>݄{=x_^ ?C{0=ӺvQ=}q,g`%[>s z/x 6-Lc`uwᇗ4gwNj9e@ ґgM AvRÎCcka4z_ sK\g=̢I)3oI*{%M eH07vF'FZY1t!):$LGqD b v_AbZqwU].)L1|X7Ajx8#Z9. }r&}SQoy[^rqmL;xoReϺ鐒eꭼnYǠGR;Tj:vȠ" AahBb WB{K] Jw0XqJdN(]ƹɰQ.|4MyNo~6.Lt8㊩=% yP8a  % ;Tu i;ص1FG 550^v¸w1:ԝ_xB<^@Ƀܕ1]% ~ƴ.P„!  um(/xLGO50 p iC#rMt0oxOb8<  H`' POe=[QOy`iR'S=pzDǿhiB]I.\x-ܫKL{[8_.0է1yE6/qڄ|&?9Tyoowەv {|U}UC0u T6ݻ\tL w2Uz e2>$P)NOT@K|Ɔ]f嶷mOˡ{,ctǑN=.>&7iØROxrN|]5<0B]*A7gPy{t4ݜ;3Lx1Ƭrn3ν:3F=4fyaV7XFk\.'*ϑtQd:e6ܞ6#ϣN%4ό\QhƄH\=[0td.&қ +} I,v;R"+^ݟ῔sv~pXr!]LEأ0ޡ {Y)I%F#fsƾi,NJFL)nct(ycCƾkctwC3oc$CLJH> nqH|cݘ<)cƞb6F,O5ֹ%#2Kvvs(0\ H@D6 kuNHԐd7d#<1g_YmxowavGbݴұ1}5t}mjP<<4GV٥ejm; D^xN3W <򺾱_1dG8֟fvhnPg#v'!ceZ~U^-<]>(`{mLo9ݫ6Xqw>;Vz~SNbvE1G?.vj?z=1t='Q>cR;e0UA rA;0a#_FL'?<ۘ1ԥk?IdN0c`J,;CŬ%RTqϵ.fۨxio˩$c9t^Yd2R^71Y~2shܼq]TNqpfQo r4O}S! CYφiUď+`rC-aF S:l\2MBކ L+/qpñSY؛#eD4%X.JE#y'晆p,L[i\O~Gre$6[a2i@ Nח#ryxWO }#V{אWY`}AKE0wl1`;s Lg)yv, IDAT'W1o֧=%OmezOsWw9ݟv'ma=5c$Fq{4lb(R$0DrrJ& ֡`$  :vg*: (o( H`0l1!5Ny6nбGɐ~%HS¨i 0i蛢fհ47^L 9 H@`]ϐ9uW$  l# |*}1Ձ&@?/}Ng=3Klm w4rEˎLUĸe*2v`]ާb%  H`YL_5Jp%ɥn^n~cg椓Nj&H@$  H@4+$ Le'(vpbi.x2; D5%w`0v[f5b$  H@$  l }ۂH$  H@$  H@$p Aǁ@$  H@$  H@B@c߶`4 H@$  H@$  x30$  H@$  H@zE͍o|&7I}nOew{sG4GuԖG=E|l. 8%/ٙY+R7ߖ=A*7ݖv;׼5]>۷_yӏ;onwҦoܱ$ M_zC˿˥C9yNI屳>@'|6|k_iۯ_9ܯؕts1]y󞷣;Ӻg// ˿X_6M s{{z,7,~b ]ɾ!.x??j~~=??o0]2rPOCtTyϫmh_W;ηMA(wʹ \yspy0<> kv2E!)ٟ1yLف۩$E7 _5qwCs\e0^;X;ӱ<}9!hY g kj^7??\0qC=.wi(?^W|4/zыn5 F!??s3tPmOO6Zq zizrbA}O& ^͌]+8ӻg+ *'p>7~7v?QX??6 mCMozSOOac'|rs)_~J:{.}*w~+qȋ~~s0H``>餓Jt}K^!K}FA}>ͫ|OG?%}j`_gW* qS^!z=1kBO'?SԆic^SxN]׽:=;'ۿ[O~$/~;V^q[ݪʏ޿2 -=qMf!=mK\ uo;CG>򑆥o){3*}<FE茭O&g>$kmLwޣƺQ`c 4xr*Giz~vI.u9ǞO $ }Ae,B"&R$p׻޵yܝ{[}?ؾ|+_| ^W^u/c w _Z7эKEbK(WU;ew ٷݨtsS1pO?ܰ^- ^"it+5O´)a1TDX׼f!~ܼo|0-bLXcUzU23algga??ΠͻQx;nZpYf1c}^0˂LdTv>#hQ__(n5f"Lq-nQf!NQvĄ{r9kS ޞZ]:)w'};F)S?S?Ue}c 3γy^FB.CB9g}"D9gT2L̅.{]je 4X6ZG&v cqn]Ly;PfkE//b}h;װ 2ӇԢC(߬qIYw޲2}iWAS#F??eg{(2S lᙑ9xgy59[PsEYgjpk_)˼\KY%{vʟٟ2Ki^,LyƔeNwS'Eؿnx6x!,>'Lfz(mGuTiWΥԿcԿăt+^]DoDΆ#Sm}8%׽0ӝsWrھ`%OL[gve=@<Wѷr qͥ/}2H3u :Sǣ˲\m%so &f:tiW_Wv hGgG8t^@/vo[3T^t.w6F2356q)/Ed fe-80gYVXOCav]&z^;CLb˳ Gwc"yP_WEgf M{:Gyd }RO:0w"&_sA劺E.t Fs]ܪ>z#O,"6ܩَ6I$vm ?j?όWGhThc_Lƹq ѩ]ׅr:*ݵ/u׆; dw<$ ]ZӄP ccwI(umg(<z/] >?cͳ66r.*桨Evǚ](ْLg3L<6 DFcR>G( iya3O/6vuqگZ\bw, o.0Tv gE7\\3ӆ;m4ԃqE'7\_NB9ϴ~6 %͆8Cp6MPy];ח2FsxCjS:'˅8ЇM^ O) $1?݆A ԟa`ly'is=/ uG:%ap飏>z*h6z})|0.3PI)OyJGfs=R!祄KKlp':e^3 f1H4wJѧ94CPGl8yXm0l @a|e2;~}@lc].L^Wn8p}@kP׆!;3Γe 3Ï}lV0z(S}l51;_u}CU}^?mcT?#s0׺ֵ4= ?lcxbPyRMiygXҤ=)M5"XO x7aǣ@˨-'XDĈ"ˈdԦWV?=oFUc਄ܟMd$cQ4~(#y>Bl5<`ĖF3~FRoBHf4' #YぅWC!.^gaT 1ň(#P#c$YԦ-#8{1ZDyYP&H#Z<[2jI9 ލ'"e2JJ ? f<`F3rwi9&rƻC+9xQV/&xv ^Ř8ZKaF~fgnԑqfD>a(,e2z܋t衇qo@<W<`:+R x\BY.9Oa3Nbx#ʥ7i ~aGCM$~m7QO)uzY< qㅂ / O B_e"ޡݤC=>p 'u>bu=bWxE[@>#Iz kn>ˎFlҾ3N2;)Mؠns3+CkjJc)XJF(-/ i z\2 =oI 5WHq(O_ćNn[[ IF 1q= `7l!‘/t9]}Ǔn'xQ(ཚu?[Pge}2 س8<^}8ҏI_-#҈P>+B~\<#mc~C]"R9 JE30'@6}: Ш 8SX܆$DeNOh˵`.nӳ/92"_-y0Ru£rJyYƳDdTvi(]Z`=$Ox0xE!LXSd ! cm(a\idH>x IxEø!x>yot gh|-cjx}}Ϣ\KPt%#1ݤ/J]^b ǜgd(d(yO<+ز?B!+],uxK8ؗ0&jSz%exj&F?o2a^Ʀ.<:w_'- Hgeo~^p ud2 s;$3$3f Qsp F݅~A8*u|~f 2;OXw@xu/3Chk VT 餓Num`*r#mx~);iSS;g3ZMuT6FYF+g:1z3n>y|W7&kA\tR &\GY< 41c_F1Z\^kciv,v>:`WZ 4jh_..ž~yj'3\p.zAS82U>c4\|uCgn>$sƾ`zM/d]w;Y] H@@23? ni g0)F[/^ᨷs:(i]c0{29X},3EJ04:Cv0\p1#Aˆ3-g` >KaLN9._f}e_wإcXkrP g9>,LކOfL/Z|n;ݹdu61a#0CB+S2 z=N S:c S[xN p)c "q c>e):?:}.ʬW7& ͭMi hS(};%f` m-6%uuۭapwf n͌5S?"tDu,~\Sj?%1ʹF/ҭ zexN)GG\K]ûx 2B}<"bgp=u:w5D:kW[b/vc]!)7h*#*4?l,׈8>j|\32`^uЇ7j;찅%FRePaĨы^ :0M,d]$M6YUƞip 5(NLƋr|03M!9)n+YEQ|tM _i4I7X3љe% xnv*K]NcWґ|}:6υ @0vl#S꺄e'SB;̀ b-ti9Oݥ45yCztz_<zZ/xBt>L E#b_0RPVқi]OQ#V-̸ MʚߴLLeA=tgaskq~Sc\e1?U(,wKx~0}0c WH6#Jsͺ4,ĹLŝaxr 3(wѨ,9s/w=^W7zի#G}̀ U_M z/坥sr`2 .zo׿otvƾcobG@k/ PѤt \$ű[9NtxrJ2G[0Q5Lv?JY*qzcFjj#E^]3g8 > z!2m1z30poY:3k cpcqX!/y0C`!^x&"syDκ;x6۩dZv>MpֿT>b.gFg3ʵ)ULōiaH=/,x 瘨}?`E*DOIDT&/9IEƘi c׊XGAH2F 0ܺrC,{Tp5v i`\ˇ2\\Iwc|f2E65H?s0>Aɱ\:eq/$7.^xP /;6z-B;Ń<[sf"-36##qm2εgsMP/ W@̒ xҥ`%Cӛ>x"2sN떱!~:Ӳlq{uVgvWPyt yNn@H8VWtCQ^U!eGGq;V1\ 2gLYvÏo3o?ߏ/!9efMN7a43=ce Ϫ^}~,owlu(5SN/ >usn2S[6MY. ޓL,w5X;qP}\׉)Ck%M]9 H`o@_5HY^阦.N'S/֞:6Arva# gndD\SQ ݛgs;ۉp3*]3c>:@XY̦Q{wRq}UisfZC_1^S^$0%gtT]m)/+ /׋ݻ,G9"ܿ?^7k0in§qN'TϬw H`@W@65sVxP1̚}de_uutԆO?Ä@NHɴrlJ}u쀙hteM_&)8YSײyc;QNYnH`;eszGz;:Y}Yg,ity^9 $dy" Q yNrDVy̲YO*)rtl^b#0^6媂3tNuM2ip?6ɩ Ӑwn-0;;F׿{^_:/:5L =|Xkyۜ:>K@{Eԥ;M=)>c!=k/󼞥<0ⰱ[e:;P9gQWIQ-x-#e d@q/Hc.Ltέ}7t΋pd}16w{L+h_8ھet% ڸzc/m,i.Q, 6%1 !]f.=qeiCxכ/6s[E['653&7aʽ` ]C̨ @s mFw]'oCq)|ꩧSsϔiG>_Pc srgRwqec!u}ɮ2ȂH&%֖Lc[ދMIOzRYZǗӟo2 :(HԻNQKN@!'jC!$/} GXRiCkCGCنNB1=;܇{F]3u P4Xхx0\?LC}Q(]|1T]a MC6:]!+.aBIx%6Qp zWwiWP[]C[҃RYKԡu K!{\=K34L/i1څ!l8<;y=a`qó#|KIYX7܋|.zX_Vk{ו#UX@!P-‹e 5o]𝊃]ж4fy~'}$0F"(3kbtLe|hֲk+ELNDcH2F0a1\m2>nJN'Urc(4JtCIkt\괠t}^wMcI6FRX̓ؗύ~^wcq_0փ*@_rmN^mx, Nd\| gLd;}>hc _O 顎 `iZ%1/ScC[w:ab r@6;m+O!Nt:jc`ǵ H@`@ nH{x̋ԜՃPcs 8c'ơzc~ *1c@ o.l^CzxnAޝh_c2(?iCj![ aD=ף/Owg, } c}wC·؇wfg@}۱Tt2R,BuĻm# Ni;e!Cio66\0bPo4%+`[wݘ҆ކЧ<ȅ:"d[ctyp.pxhyTe=S4vJH۲k}X Ma2 F㺁2E/qDT[s]44F6n\甐6EH9;WN6בIdq0)sQrB8yD4PtKZXKa;]kfwo$<.ꬻ`LGds\ !<\C(e>:edֲ sц]/"LYӱ9w5,c62̀glóX}~.!L_x^Lgstq63Yu֍co䍴3ecXn0h(蜼1D׌őyy?yJ& ݴ $ߤzim6,K.YzO.$/Y"}L#FY˚ uWqκ R(@1 /ibܙ$  H@{@YSn˘ok+.,be}@ew lt{{=H]b9'@ל8L ,0*ƂĊ$;xK*_N4DI$3̠SF#:`QG9 u$I Co}kVsݷ^^NݺU\O7wGx~] t*U[HF֛}fΜ;q;iQgfyVž|tzn_jH1:g~|䄷Ƌ1GɚHijw՚4s>oQ fx\. {.HG] t*Us bp?P?\ @l~x u*32*U@W] t*U@WZ. Ix#G q'ڸGwn1D'.Q0ݕ܁QWG侮xԠEW] t*U@W] bG܁+`O;f ^\jNVB)CO;#mp#~Sqͥ&ǣ LU3媫*=PYvefmVVZо*qw49<w_wuˆn8d{キ/mv}aXgU@W] =s91/x<>tM+ܯL#?eyFm4d [{nv+c[YgU`8X/(;23tbgMGxw|e.~{qߋߝ]t6iٮ“>}w{` 6m8rHO 7p@\9b(r_뮻nlmդI5Эn tk`50mڴ!fW^9g`ԩRk(W[oq:<Iv_[neX99u~WFpɗ^6p p:ԁou༿9/e`RKw`;∦gt׽;7~[3f[Mta 7ή;&<wK;{{\9%^ZcrI'8 lX2~4Vfm^{bz^ kGb<8\>}y R.f/{x/6іos[>YVS}7oƨ)^Wο x&s_\#<21P}?slw86b,H]έW^e??::ls~mz~?Zx#!w}oBUZ\裏.?Oq7wE#6OM|,{Hy]wU&LPgRK5͹ 'P^Ɵ8ql[nYw^5K? :.=yNc9g_|}?ћ;2<>{َ|xs̾uq6۫\ze/kd48NLxmoU;:QSsǿ\xgr<7Vfp\]y{[q!_aٗ1fEg86~asnW/S6wÉՆ9aSmaĜ#qg?&& F1WmxEYn_}Yg#z7]k''^lկ~Un98[zwi>kmoJw?o:ʩZ_~`A7,׋4_ϭ/Zof5D+Ͷ/:}z"mm6KWcc˭P\~wq2O|/qz=?lcy0s jGZW呹~1ǏٶƟq7/s|^f]Ӝ'՝w9)`\b˵e<2O|_<9[) ^7O>'?Y>&j۶8䣝\;`^~|>#pk8WX?^޴P98utMy<[~7|ssy:}XO>hoeɢ}̣kF9ӊϋOձ;^gYݨ1'+-W~x1[iەfM?u]6Cq.Iexq/[%Mk3 ^sF|ؽ;em>i-F^Y}#_ux뿚k_gڮ-@ٹȇk3z;'1K_ʿ<7qpaa?;݄o'J'|3|4BUrz]/˳/1k<X)̉8#iK7x0piv%,T6R7\6 bl^rc47n]ƹ&bu.v-(Xa,LYŒ=T]7rCuCBK:(~|m>mD.y}9g>^Qv1\>1Gw(,>ss״rq/ţ{BvC;\>x\]sxM?R}hZs.X[bBy^\Rex݃2pyM7Wxk7\y!.rl^y9V~.r¯q 5<U~qͭm;˼⪛y%keʔ)xLm@z%1aho}`8s_Y&`yIl'[?_t{(yՏ$#o$`lW د$k>]3#ׯ> Bgn^^A=+FmS{=x'O?yѱ>9ײelz]W.Wlɜ[wzP_vl'^y M>Of4j 10..E5"qNZ\{e qߝYC_?H4v\y8/1m ݄cSn *r.5Z..-w>GHi}{cƬ ]>[tdo,ugd`f[}5ğvd2>ǟ́jWN~ѫ}A K sc+LmIкmyf={t?TGgro8AݙBQaE/zQTq/~Dyߛx,*^(2ǎ y`\4yce^Yxl\ͷ؊iW'fvVuҮ!f^y>5pk#c]3nmphFRv2}kĪVN-IfxNC7F7ٍ̘0sΩ61soϾU?%Ѭ Xymky gg}"ݗmz]b]׷flum}\;cg67ch{mͣ<^ ,8peۜ繈QYņ8ctYf26~im7RyUV-=XnTuȣ_īcq0N2ʘqwR<Oog:e|z$.e~um6%dce؃Xpׯ&5l>cq~Jk#9e]wq+Tz23g +qle #ũjOм[Nm󼈳W 3.zrb8'V;9xh3e,υ>~m]>7}~։S*'O^v/\_|"|F;1l++.N"mM1S\<_lʑcCk]\ԟFܰq<06rp˹ %Ϻ:6r1yj?-WsysX{*'l+~b/'3iRc:F-77VYOn6slO^qrFSc\~ҜP9/||#inVa4s<0tǹWy<7~έUH9s[puBNg,i'?Sǹ *'d?}O,grC8϶uz,P6ڨLFE^s5e+?ou˴n+Nهmu~=er\E^.>&Jy2N^:U~e͐Sd޾~Omɵ#>gI6..qQolk-,OĹƘ8'ne ԸN5۾,']W^1ˌF,rZ!b\bqoz3?^ȂnӞ'V? }G|16z7$׷X;ZWK67G?c:u&6m'evxΧݼF;y_WkC;9׼(i\;#9tPֿǏ,}_뇙 DYAYǝ{F`c 7.}Qw._Wfn໠|l,r@ly rn~pg+ `}=@}}'~1]u6pd}>Kډw}7 {['艅X6 [@<uX/il+a4_VӷN\R3\̿蕁cs13v$=?55ܷ?sϱ|_Cq''.^~E_?6K[㢢Nmm֊1Ԩ03p8aݹn\5<~_~|aps`λ/d|SY3~[\r%*Kŏ_wƚeFçǛo{YcefcRgy?yzL3nIJnlIնަqcXR#cྈ~p:í'r_C3,ӟ&y;3c~$e7>@sGm8g\#0>jaab2}InStkXy> [s%1+QU'tRn{2y/o]s5sW~?a96T~Df[&|}l_b#ݘ+B!EΎ̝\f~"=11Bsj c1G 8,~B;89d!s hN♟n9iT5zs+!}+pOT1"0)S9k9e-5E6%o~p|љrim.[+8`b~3W70> /79C`Yk>m#xbs1WLp8;GcGnl/lO&x bAzO>f(F7vE.'.߭ps4rNrdy}Cy7Xp(s_8>gўc4a~\ߗMۮnN; O?tizx5]T68o]5=ΝyؽpϽZ^ƅؗrHsgazd>[n lM|?|B}v3Gf oԔB:ą[{Tv0'0\{ps8+_)o:~O>|(G|37Psأ*O=D+ޚq#SnF\=.-ܲQ1extz͸| Qሏܼ7o|l?Z?Z"!5Ӡ̳< zva~Î\K,cX7⋋|!/8E"?bX5n{pNJ/#m@\ b97d:[/G).Z#emkZZӰC7l!cG]ӲM=nc/24M'>熜wc!}0O߼C=d] .vp 9_3&6c0J􁓃ģik!髇#b;n:e (skv#O3Vc\}ֆe p;Guy{d^o~˜9ɑaO>eȵw#>rN,89~=?;w5S>ʡ:} 뗆q[3⭻8y}g+S'O2e۱M62 |ı">Fr$'iʱk o nNY 0>6s9,.qqWv{]䒲al }Æciq^Z8BᾯyM .n]~r*wž~wKN*k트hR6q:_8v4j\[9rq\3ԍ>6Cbg_8~'}g;r85ur7 ڳ<:IFC?|V2_]n;Xwr}a%&5o?qDüEgk f6l IDATݔ6.k2{b<ĂPQ3k G,SAbiWOl|8DS59;/CN"2V^s_=>bssvY7GߵMyi._󄬑}9Kb,8\|`&2p9kGenb|,}/kO_Wۋ(H}O[T/5nw9.zV̳ni~,0lT=8ADq^h'So.69h8 Ar< b@\]ϜD| <Ǧg#'\g푁A|ùopD_ dr`c䈌}ȴglr(c=Bij1?rpiY ۑ|̙;'rخ4`m5o9 G5>M;ry= s}\m؁Gy4,>~SK[>Ns\kvùOpaN >A֏e~!Bs> yXo)9iGd\d\ccflϑebem>ʘ#}x##cgñm1\2piWOpyBEdF|ǐYO]i@lD`r)x_r4CrG?Fy`7@.JCnMޮ=s;lo1o-c9 e9"ǥ^ya1p\Wp0:seAp=q|ȃ;pp >?7?t쉕mx`?r93RrWVnEy .mnG_?M߿7%6ۺPͳۇ><5ue=+E.meޫؐ+\|Y?89\|W~ Eskrk@kr_]l|#ؐB$l'dž&i[YOCYwc[G}Z4zc׸n'*fWN ;09HÝ:69Yl9u䀎:Ƭ dA,0 >:DO, LX$2-LJ؉)\LyN`[1儅+:ܝ1K6{9?f4`LnٖA[}ˑA@F#>dp9 >FcQmw>r&~pX\!|n^G\ɕa\5Z뀵BCV}^!c[ֻ`'Gd6'W8l>@<8`Shz~>r {r916&죯\=Aldb)x56"lӇ> {qQoŖ56Ixw\6tLֈGF 5;ʘO];f+F^\ (yF4^xO.M $MK "3xQX[k7Wr×1:3.^ܺfy,fކ l?4xkW_rqާ)ĝz׫,gUmR]e#ʝ2u2-.M%BBvرlփh&6?=˯Ǝ\9;WjB"y-5זqGF'A61lcO,LJ=捿@a#Z[` : c26$dmkOl4k6z!9nMC062f|s` x!fmn}83wc<e`7796ep}laGb'xرsZvCZ `&2]n*"؋~ ErE {rqˇXTrڸbG|x6m-cxạS_Mp,7G郌pܸ6U jL9uc8G؊n6Ȭ}uk̡K\!cd~57֎y#?1N{GRfcd{di+5̵G_SFdFAXlLpGB}++MLys.599ʰ743qFs1jǾX_\#k/Gp91_Y%.;ߞέaā%fLqP/8mO?er"īc2ΘYC6u}Ʀ={stFCO.6s.{\%Ok;d~6$vڴ٫|vg4z/$ÛaF sy ?ùwn2ދԭo7>zrerw،Ƅ&/6 Ay0}5&y(Ulpr1X?X\Ȱ6Jwbw6A. ;$왫s*scXX[5V=F _|Be{c GB1H-w py?0oks 1āF}HA\B&}7ʰE!y(ozl#xڨ-rq\+˘Pkt?}ڹm [pj-eLs78>؃OӉdąe8O5XiSx;?碀vk:a\ in/l'c=5t#c rbcN9߹?4d{ȩ+̍Z$/fiO}t sG,8 c9fO_{s8W}ώ?Zo {wVͶ?e=}as6wk׆rY::5/@9m3#wi҇0_G澚s};Cac>+kGlO3~GM;H|Zz=F:^?^w? 7}Anue-7q]|G},κXeSlWRxz\61O%f!w^~@0;~STތ3R$]'bΎ0X?8%8䁎#ic^N|]%w'>゛=.7.2૬qJg9X4Sn,1g̋>51O>+<0ȗxc/@Clukݦi}81i}~@o?ɾȭ6ž|{N8a#u;181 ޚxTx\pAm{Püj,,`6.͍b` L.u` c91h.03c1E9cw|XELl?˜+a?v"K2>$ăk,q4|GJrҡwȱ.G_2x&rkos02=D cP ns.ۇkB@#ѓR'w.!Ϙ;ym=nP pX\,!q r CE&pמE5ЗTϜы냽ΆM 1|9[ 52(<}3}h8TOBȜ[CyMkrdԃ:eLmɃ>d,dړ~ёws[[4}4:É$c>c2si}탙qŝƝ|f^N:ٿ5s燯9σ9‹76|9B6xá Y':dG~Ab5ܵǖ<9vrs}8g}b=-|)1L虗C'?bJ؋_X_\L\t x592H?s&vR|L|9d`k#&b 7 fg|lߑLOWnyqĘnn剸 51~#s&n;.y 9Ⳃͪ%/ѧ~9]ܰSYsc6%2îeL|85G|s{\T\cbn4dr~fE1k ;7kB>1OܰEq>|hڛ3͹C./1Oc8\A|1Āĥ=ve:F/)+g@O1Fg\ 98h'gҘvyNkz1C[Cd&/v%m_=c>ξ\<>JGz[~}_/w-m81{(~z6ATZkF[Yh>[oY@ߡxn@6Xnj9:> 0?Ǣm\?Yh6|9G_m2ub:d}erqܹC^q|`gCf_q/n|M96掬n(cFmU1f䵤rdoצ-mՑ5r95Ovrc/g^s5~஻ŅCylyp`?z90fq!ԖzjN{q ?aGlwer'7/sܿo4om￿Q)S4zܛ_ƁCP馛qDPP\ s˵gON,ݷKg}mzAԆ<ыa ۸6C3YY:HXlo#AGƱ_~Tɵx!q.)c \~IYbx}2cݩeUW-xSY5.) /s#'YccC﶐ >9+ڲs>烎DN]ѱx.WwnY悳Ӂw<¸71~o4OMwpenr`ߓ:͸&D~.7?r#<`ɛAyQ^;bHn E>ܦ_Q\;c0q'Y^C}m9/YOƮXy8u3'/H6흯c}/ #; Ql=x㎛C[7M wZ0P]m e[K;08rl;6.|h96v96ønƒO{⹣e@9W1u8;;6e|r1 ,vq5#gAM6NLjCaO0tи;*WF~y/̙>~\+s?ΌQ:'Ӳ G jyYs28Bo]x [ڻkg~\7`5=2|Eߋ_b2' r#6j?9:'kjЧ1~{cc Ap6y x1'0'ols{sza+>v`99#pj Ul18 ;c6t;?rQ^yO[h??o|@~vUW58n9k+_Jg<7_eM7׫s{jǺMs5:׫8k} kØc2#ہC5F".sq!}L`Ұo#06ʺ1Gƃc#3~YΜ$~ Zuc5}MăS2{}k@Pu'Su{Uwc2pe}k!ƺKύp=iԁ'}5FsȜG>\[R.ezs-kg^]?9a FN bn ~rFa=Wn~3Wa/&2c=U.ڑcl5>v49esFGDͭ;4rתc|7'W^ye9#gXuQe:l$Fnr\0!BhC =< 6 = ۼ3# 8αb.16b yQA=c$nbd|y^9w,:ĕg-xʘ>_uSNC/% [>" IDATp<ꇏsݠܹ4&vW|DnCG×rc3zK+>&9v[p)(3c ^nqHo|LsNa1ic,sE.M oM\S6qvzc%''XL|ϿO7|jʘܵreﲸ[mwO /zQrv:5nxaQo}$evꩧkKQ#@fm٦o(c(7[/@ؙ2eJsq p a 'W.pIYc۱ڧG{8]0om{8>~6tOF=Lm?P&\oy?ce:2X3Glu9:lu&k=D|G_?403=L٧cWg~}?2 6LeKÎZ5u1%RibB=-oom9ϼfqM`  y se㙗U/~5!sk<&1ܾzmG&CO=sW6?Cie˄ﮍ88i i.A/<@˓!]F 5gڲkGkBvm͜|hrnY/kA,7>\tʚN|r8d}xp{1ń+#5}t12^mEal/r)'ǣr>{,[> 2L|?q,O,lYb۝ʽWVGxswnov-K{^^Ms }so#s{'H[8<灮;sG,)N^ۈ9&}lae ʱ}0} CJ̼Ku_3s ιԺgxT.m= 7ܰ旸U!N` w46 BpQbp8/$.3&i윇rq/cɃ܃W=a@}1ڏ9gg7wcj ùre 鏭%p'6!6K2d<`Rtg*M. cύXCF_ bRcpr>c>\;c伐d+.τ]/2Gkug9#>́F0Ir''>crV]b~ssg>pБ6y|b"71m|7wliu,jcb=r'd>ve[epЖ4s`&^<0ŅC%Y cC=x1\>vu>cǺS =؎s7#ˍX}noޜ_:uj/8+V.cm֬/k}+o6֩k_ב~4ܴ/7?2r.9ߜ1҇<~b^el惽6䀏pd`{Lŗ85yp 7_xȈ9|`ϼ ʍ |;=r9lc1\ 4lݞMv\!nX=.όrśx/!OP]/BGK[y2.@鴸Ic;//DZߞ^uۓN, (~ovdmʅ^b.GnyX9!3o\}W5N#[dDco^~7xD:?Ea\&p\jq!ه[6m1}~Fsb'z|L>By!9}@ Xy> yGW8Ŧ>bQ/yxs@an8:sFfr^廘Q1m96wmŃ 1r&\;2e99'\aQҨ\[X٠l0 `v#s\Q/!js6Ġ\6>/\l:6ruptq"9K֮5܃2':8sĞNuV#>Yڶq%NɹaǺc`ϼ51d@O׋aKgu5g|㈕w2 fnO_rLsck?c5CK<+9;Wy3&A{:Ĕg5ƃk}q>;ۑmMsm!;@f1^lY[ ^[+c\L9Ǐ?_sr,qE [2o{s/r26^U|s9<>̅1v6`8#aۋmc˜rNu`ن\xS./~Isa銛o.k~9?m̻svH.|6o}"w/1/Y7.d?U~ů~M\N6wb5ļ :!Go!!_^c;}5wdѶ^K!=u#j\cB}QeL<:}kZVxe=w.W?²[K9lwIu֏}|1.='ckNy~嵚ugY=?1u]U {Svp[ƣS5cCqc`g ژoRW<+3G}Z`eŤec8Yo?7o1C}/1gI;x&Lc;c#vX]_\jH8m76{ғ}Y_s抯1s=naL?g[E }_^6bXSۊgGXcc[ʴWrFsN2Fׯǂd6aNptLf@NjloOYlG?0jȌRz|G mAxȜ}C-gFߴ/kŅ+\=;ޮS~S?mɶśo,le$^@cDS;'̪'yhb֧6vzq0i+2SYmیgqEcsfػ[ǎs@w^,b,H}~29kĖ89o.ue+nݝ}-f9`7}\}dd'>CN߆W}wt耍\I 1LJYޱyp8 bN|Ӱe;\,8>A4n)Ƈl ɟE.VNo6ڗy֕<5OtB&iX >n{dyۈ l?lgqÏNi`O<ɱHǍp#cf}k\Q=}}SO;9ԁ 5mg2g0>Ŏ}8z,L"Cg~e=2H :9_/v69wr?c>p|sxm{.Lx,>k}S;d cyB譣9ʴ#g\˰/SMm}3lO :v~#}S!2p\{cz l/G.~ a,IC޺ K{Ɛ6q<2>>4sV;eY ~蛹9FhcinyѷAso}.gtRW<.m 7.pzu]܁/clgY^~{OK^spm!s򅐱}hnrf a#8I뛹Yf_|%^r+T6M7]we[1녾oC[Eݐoh.O_yeV[89urc|wcD}X+o]gBMk\Gnc;8kN]}慌6ƽ:!lݿkG_x^_8Kc&r`j7< iwʱoQqЗ>9dܑlsG'9:||9ž aɺ6f_rđZ'd9.}Z޶Ė36|!쑫36yn5g 9X愭 ΜSx׆6d:&g7>6q?1籾[ ?A`ױϞ .ckξGα5y 1XrasB_iO%)r%/m@fCF,B/=猍u|cL8XrM<{kNh<Zol>cb4s_?q#wܛ>}s`,.|">e`}<#\uܙ+? 'P~/ط|?).`mYlIꢋg~_`Lw81P D4"O, FS0z`ZL PBnC1j&bBZJŽ[˃튩k}\975g|Ƹ9y?K?~=׿~W}m/3s69q^-V.lD|~LC3GҿO_}ֈo<:/—=K?CO}~럾?g.IZowmtky>[v{{@L_ri~=9SD=";j C;ƥLxt9lC >=b0DD\W~-'_\qCn:\';)mϬ}kVCOp0XN\=K/'}<Ղ}']?'t{ۼ2߳J||l-û=,_'|3e\/H:?_roȣÝ96yNr[sA皼g9g$wUߝH Zj_|:hr_,%l9qFI'g-׼{Ř qo"/ޱ8]OS|gu[/ nR< 80+玳b]lu8xiyD=^Y\qza6]_RMϿ+ퟸmO7z/>~E:?;~~ӏ~׿Ÿ}5l:XHYQ\[r{@Z_[\l9xw'o?}O}oڧ/ui֩#_~m;7?_| Kቿ[߭Ym)pa֖+NN?X<)}~(fbrEܲ+zl^޾ZWbՏN克^ʗ^|v<lkk058.#"Zs'0hFgo]J6}jo/?F<%?yAe$b!`v{F>Kx]rHAY_6<X=1o46nZ=F_Ll洺u~vb8mM刵Xzj_":>>\;~©Cэs9o9M:~Wm OcF}IԒK[grWo-ZÕ]ݏՉ[YΈy$Y{لWŖ^)7_89,ۺ8{_ߊ IDATȆ'痯sU~eoq^}&ٚ|x/vuyba0bzݳ7| _޹_=덯zOrrr7Vo~|g%~y8Moޏ:^=ǓdoM֐;=jY[ܜٳ8?gǟmo?3V_x˙kkFWwpG]z]|c~U^9g^_ֵqɯjV'<,_ws?_~`O>O?|/?tw^O.N{t?\?;p|}Oϛw^5ut9ߩ;k39 ,\ۣ7a+?./~?|oD~9~=w>?~~ㇰ|O??ڨ_C)V>|!jc^aw >c.կO}p+}>Co#Zq5F/zX\qӝvqqī}P g;hrw1]"sv4?^/.KekO-jְ/G6_I#!/+aԳyyay8?1$lsz#W|0;os?ˡOŵV0O移zrgWn؝T=qoezǏ .)|9nz~ ;ZiqV#[0b_ γ7Q|8dk bmQ?[ng^bhÝ..;.9:֣g0?n~ 8ˣ3>$m`:Kl >>.:wm0b[Z^x<@ǽ݁/F܅bxH}!0llڼ+{&zxɩn XN;]}8CL4bUsκ[ j}5W >R׾/n/>=QWy\|S<~(cOߍ#?{~_};k_OO~xpऍ~{p۾o5?SO_ѿ lɩ_4l(oƝYd;cc\i&t3?_ytODN?,<QW~?o?O% >>vo‰%r[t)Wͽ3cjjlՈ[b5'^:ƣޝv~g= ^OI=U+w‰ƫ#Rtk]\n|ڽ7K<0UvuvqwԺzˆw6ǓlN~)~rÆñ<ŪE]ظkMkbg b;=4Ig?a_—/OTߎ#k_>_?sO]{<~H 3v8>÷U+_b5h";ˉ+ [nOOUg{{t?#~hj54_Ωԋ;YCZz./yi~9I>?߼C[Guamqq]_.7>lj^7|ޭ}3&Nol9p'x[ #xR?upy}|l>mwz>E?^ws.`R!7gm 1:ۏ qm7Q%_=eò_O8 ;:w8987ikją=wr+0uΜTį_9~綹kr͍Ӿ ?mOA{Ɨ)w{bU㏻y5:X,m/맻8Û[z']X<+a],Xߞ'Xv?Z]l(^˦ =gG縼F}ޘ|ۃ#bSjj0bjðga~_4a?|0/G״j/opa'֩N?|r[s>bW|_Z/Oű55Й9Wr6ygܺ!:#5gx:+e'rxxzk_+Eo|kڟrjZ|9쾾'VgEi qhM04|w#k8k;?ZWYW%To/=e2 9x.U\qy]оrY/k#BËk/9;bb8$FiL8Ɓg~z|xi.y9[yˎws^w 򋳓8W5w傭~ S|otv܄mrK:WO?o/· Dpcy~QR>@WZ|9Mw|=>G9| __l\SL||3W7prwocoMxskh.ދl`[+[Oo|jOc_?qIq}j/Q&ejƱ]ouZKztR bޝqG0ݯ+a=Kg<{.DIt=+.k~it4\BgƧqrɛM3͏:?{~ q)[/Փ[xF|˝/]cwF=]OqJ1 xj'ׯ%=5O1[Zt].#5y|xr6W0=+cՏy=m|ȁqb:kugsIh^nyՁիTgz9帛a^ܐlgֺ'LѺ˱6y=ka;cf~0N8w,]oӼs-F˵Y#k-8ԿKi(K䋯ا\l\qaգ]r%> o>$eWsۜ?Ig_N9ª_?*]WW3'4spAp>3ns~yakw~6os7M'j+..r_v{t356^>w :; s!yNj_9if}s^l>E?Ix>ؙmښWZNli׷{ٟf=/t]ܻj6o̖.uN>ëjr|.gu.J||<Ϳ[#[O}I}?/g cؓ/:nݹ=c?_c W)O{md^4_rb./a^~-?9̿[m_;ZU^=Ct|ᗣ}Io͏?.63gt<+Ͽ|p奋cT:绺ptZfǻ8 ]v+;dsxs#.Nx jtήŚ֋<~5z.MmuM`ن\௟pxՉ~bZysJOy=zKí?en9(7ZaiӝǮ`HyCKuNf95_ ;/ίޤ '%MZo|a?Ia˫͓O;0{7"n?iah=ˡrhҼxzz :δ^A^kGW~/g9ŌO Wᯯj9zG͗G[L\ノˏ=O=wO~k :cvLXݐk>Hl?%^NGW^ϚZ_w{Gy^Xq6ڧptċü>|eIA'>6am||?ny\gNXlWmsv9a0+g=|En# S~:si~7Qհus8ޜ+q>b'տ>=/0r<8ٯU[ &QCx WW~Z!%ą'>.Ǜqx@ g\n4Wg}k;criwQX<ւhoku5Ŏ<{ Vr ,7N#)Ώ/ۼ^A,_[֑[cǁ<R~ =!j O_ٗ/珇^DN$qza/޼}Z|C۳ԭyk^u?sv-bՒ_N}inCgg'61ػ.ooXNCxjѭٞqߝ+:wX䴗'b|b)>n]|X5M^o }&hMah~mήreko,ѺE'0 >~\?9a/_Ks"O5Ik7~r^}u]N:>ݝ`t\^)"aazs֫wN}=`jULvq~Yi8V=l?0:`Z_4lMˮt뫧+qMhgOr1ȩVq>|dʩ޷!'ϝ&\Zq?>™^½Mܭ 6y#?6MZgԫ<=\G+85Ui ׼to<bk=O ۳%+\|բ㺳u5^j^U`Ig_[y:>D5.cy+k:kɯNߧf7|5 !K]N.SyW]^L..{V]j\z#=| k+{s:~d|W%w^N\05;OxfOn'YH ǟl|y˅/Vl:Ŀ\ҭX5_X6=w>ֹGHs!G.W, |T 3&;؟=~=-y^? >[ǰ{)tyx+z{x`_`&Qs+/螙0|ĜV:la}K=?㿏z?;n;9sxM[r/. sƿϜg?2lmuHxSλ5l\MXҺ녿_^8ݫg?at!-~b®޼坺8yv:8٭Ϝl}}QzlCn=œV\έ+\ #>u[zT<ݾÏcS"~OiΗM˅˗K3Ϸ:N갿ٯ޳ ű֓=&0+|gx_cÕK:;\s멧b #iNzVK_ߝFqw^~S,.֪04y(w}lN찃=9ݥHļKBKq9|%y67~/^lø]]>8uMzfwP V6POj j}p?4)ǿ}[ Sʡ˦q藽OV?x-_6\u7{Juqv&lD>;5ؼ唃~␳s9r9ZD;n}`q&v.>9_җ}coM&^Zo[ Jԭ^msi$<~[؞ϻ$y߰g[ŖSڃ5"-vش;n8حy9Փ|vpҽwwoYMxo>z&46\bo?Q~ع\>IugZ{kI=\R]_勷u7:W+9} ~;^e~'+8-|1%Nj9=_pL󱻯qЍW~֧^#z7\5 jh]i1"'֢_k%yx#?~w/w5gi̧fVGfn W9k:zk`[{׫sc)Ƈ.ɯֵ}%-'bt}Cugߙ5F Zv=d8,m:sl[b"W='uOC6s9\xUL\mճ퉞ݰjj޺W/Xq×G"w4͎:rֆo}ÑӼXO݀/":>M?gV_h𴛧F=` ߋl犼d/0q[4,}:L5ލ9͇>ENټ_^xpcinWK:\}-u~M0Sۜ1~Zj[w6}mOY/+>XgtJg٭I=*|_L;N| 9z6gx={ק;W5m_儩_"ίǰ$\jxgV6fgǑ\Qx|͞#V>ĝ]=8=+q܍7;bWtpq\|keW>'x-ƇM\X7?sp=xYi.G;3{K\5`l]eڛr7SBWW,[9 6 copxS{5 Oܳ>˻%^|| []\˼}~:a Rˑ8(y''FmǛ:ovm5/΃3ݹ{Ļ_lz o? =Kq^CN:,II >+rȱgw53_5zʇ~hs_[L$ _&q;juONzǍؾ^}7&E42W^򇉇>/HՅ!/x|tx.bCNpƻt ;veO};8_|W__ƛrM- ;L9˛^44LҼtUoZnawq~G<'t8/!ٗc>v=>r_l]>1./̫b@wbt ~s%/Yc%ޓ짜O;?<Ύot Sq6_~AWΝ|[5ȩ^/ټb<}7Yp$Lr5mruAq~lˍrXrhF1鰫ZhØo~6mQo>pAZ5G6;&k.[kwr3xf8p:bk׏w1B!Vkc0'w9cS|l~縫/gmX|!gbtq G#H'W~x:Y~ņ3iyaͮ{Di0N@}%wɂ.@ߠ\ۋ0ח}7N<0/᫖00S8~B^?SW}գpMF"'XL5ҭgટ}֜X·qv:{!=# +yFYݲ\SІx:?.SVt#$I1TM+F38-' OCn{w%^:L9D}#> w>? aK}+ZX]zqIu->r[;,K׻+'\E0VhoC,gkGyp(o+.g믿ki8(+Lݍ8Ղ 3X/0훼j76|v;= sn1_K{#'Wscc{f'Lڇ4}ƕԟ9W*Iqgl}q [j:Q?ő|Xuqe?kI<~gWA a>XR/{ŪX|UOtfx{㿓pZ&]}7Btbaן/1&nu^C'B]s_OrZC:E^sD xuW 57}:WϮ<dtXD/rU/j$}{h= ucIW↹Yߐ&gƽǮ;F>Nxeo,_5S uI4l=gs6|rV<ЛWNO[Nvs9ֽtVq-'^Naa˿lp^メIx9jTlGGq ӝb%k×W/p|keÒ'.O>'q]LJ!\4?}W]񫑰*_s+O sﭞK,qdw 6vpal^,xu~O,,Fݍ#zW~>-G_ SSr6oh8OZHo{.^N5O}z^䗛z4ٳՏ&W3+f/.FhlS<)݈&.^}W8z#al=qUNxi5]?[+ôtXs_|yMy͉yۼ|+8= PU%lX= {cCϋ;~8<0vNP` p0缳NI/>6 C.}L|;#u8[ -79yןz[5⬧֮68 Sz]]VpjTxXRMs,{Ww6&߼ӆgZ[//3?}U{fW߁UA%w/<󾮉Rnϒxb/uW'OW3}`X~^NxLJxnc,o,wåO/h-rVʣ7V.-}kn]-yxމzg4[^_ՇQQ,Y<_ܩ;şyzs;pYWr'%^kM|{|qW7]jY{8항~sJ}vwU'\Ry=^7C|g~ WׯXC_+aWbƞwWpoya;C݋BҖ'7-`{ø]8qR.wq +^ݸa+xZ}Z /[ׇbvgzg?å[O^h\az7x1&U?G冹78z=|E4]k}WM\g$^4qOU㥋U>.qεXt=ì/;O=%ۓ|^r+9aY͍;Wpl5So0[7yQ/>lk{C{"trq$4Lzk˅wDoS\-Sx٤6W6|@盶w;^|iJt1≿^zF= y$.vj%Ws>qCL8q;_=4WF6ٺWtֿ{ >_>g?]܉=Ƶ^N/TCnhZ~.pqgӍůφ۵+{zzx6[ƲqmN:iMgUtWo_yg<ֳ!nXk~r_3^ɎCgqיij5ʅ>M`Hȭ~0˻n{5mZ-= s'x~~giu#_ w'Nb"V <\Wy9ۃALuh v/6v":z0'yw1km>zm;ˋGloͭߍ7w(ƚWk8̉ݓTe>=ջ\yI~<-W8~SN|9mpx}4o֫F>5k/<8rm.wgaNNh}%y=TY3x7㣽y忻g?WCA`6y]}%Ʌmlu S^.\˽97][/{zo$}i?̍k^Uqv{yp?E%N?|/qk~qws^nSظM-ʧՎ˾)ȃ}a8{75,<_T7\uzg5zk/ż87om_޿0t>ſv$6_[_;twn'"_9'.FVI۞ 懹]uPǞ_3o'v_S\_Q<OLx]Z] vft̍8{rWgKVx:ФǹW›Ԯ~5`77[Y68CD>G0Oya[v쐛Kb98]N KYbY#.O|tqr'K=y@aW^}'/~KZSahO/W 9wy/3_8[:'׾dʼ:/F5yxի% ߺOW\zIya=7+n6}'V疯:l"ndzg]{8GG| X|Vw>[>^sQ9 ۜSW 0+n8KOv}k>֋XuO<>9?Y|N n8ޑ:Yq]>73'0 <=T#lyfxwxqxG_;P{[ܳX xW0~&bI9`ˏ?˷_Wx|rab:5b9qל>ʡVx|'*=AnןŲ <)qz4•y0aHzcWMlW%}6o7lԃ:͋k y[wrm$bGvw+k8ObO4x*_;y=m_ح'OČ-N:?|\ϟ|8`FxDۃH|˭r;sr̷Gc,-_z^ 0.A⊇IU^cx:Y&oTC/}싏=|7)`RՕwH~3WXK_qk'A\h^+ _GpI|zȦw& aayõw cnrN#z\~88N]/a'Ͻgg޺ۺ̋cEmr,ܴXlyOꆥмw~/[]Νt޸}Agכz26]ޱꖏxmqyq]w[q3@|9l]k>xa;-/N9;oo庤u%l86&?sw~'.&wSq<=hN8)1~ɟ]͵7{6ˁ#uT=ۏjȭoTGm{0lpgҰj}]|u@ a7/ &{A`'.^a:z[/N>=5Fri^'DR2̗5ۣ=%6Nq_; >1l8ىXpdO|0q8 _"ίt Eu z[}"n/n~J8Zܭ%z9?\<ġz^F8<~B/y/>ˋsਗq 795h<|671|feqVڟ{g߼iU {cV|秼+׼!2g/a㼂I7_  ÷GSO_ձG{[=uzW0)>h_/Q~x̳q4O_Эˑo=`{O?S=~qyi,>"\=Bn=0{9Յ'5,~raC| ^rrN\=O:b;Q[7ɱWSrrG{ ‰o\S[O9._n޼֗._=jqO^<;n8%a`NY_8?^ep{wi{oQK/]#!(WoWz%<:6lZ qkΎ;|EF\Fm<85:N{)/`Az>]^:%x58_~fܧqSxV/CKɭg|IlZ~bnėi(^;l>3Ǔ>{ETݡ$ߞ_{cw-.iyO+_kMG[~+קV)/?r>˟O[}M^?;НqΆݙuG-X:~]^g3Sg=gk^θWk*/89uڻ_{߶oֵpv1onϷgb;i WN?^5q?H-XVon}9 Kg[5n hsaʅ3\}3ʫfZpb#Nc~1e/.^Ibt`WۼjkIIZ^bUy\N//svF~:ia>;^ IDAT8ٞaŷ/1w÷fžWr#)|=U7,v+?a@Zϖg^E뿺|/'^ZF]gk=X=ڐ:)yao~8a9Mo݈+歫X拯goya 'ХE!J erDZ.,OX;|:NbW=PV7r ok8;a_Z0=0?]^aZygF~pZ[tWtΔ6HKC1>Fg7s<>P717:#><=&laKGW׻ [Mn\snuie^͍?aqnKgo?w/G]x^$lgpy ^qybrH8Zkި+argyqna{/Hc縭:_P^a~8yGբO[lxxc{], G{0|/MPF=!}1Wߺ3yj8 :I6ۋܳS^u;CܝSىOsGp7IhG~:!~E:u؍Zux+7w9\-.<[||aO)gwEbW'82z6CC?1ƋCҨ ~rT9jz# Sܜ,ξp8v'F1g|8 )~~⏛Y>ΰ}Jsݭ]};u{Ik$DZpt|ᛋѝd0k;_j,6\Օ^_ _qa91G=ć[Z975WYl_eėOeξaqҚWڈW^o[~a/f 5gaFt"q[Cx$9ށn칷]^?lqѰa _/m9qaY#F5/GVh=ևytǕw${1{?:޿xOU7O[',gCJbwi³75/a {ͩ?iOi|6]nƋq(|l&'FՖ#?uv$^uHj6XyUIoNomŔ19IWZ7l:S('_'ݹ$x&cw[7^ǿWX61'|)?}vߐutn/]Ŋ拗_z:˿8a7Fyl}b'nﴜs\491ȹbs_?)Z>3v=o]~sT\bvSk~o;-ޟgO]s6o>?53*kj]ZW8oΖz,ǿRtgNLéF>lz3ߞ^vb'.Mk-':ph>gV.^7ϮbwR] xN\?Y6- /ߟ8^jdܞ ' }MI`'[{7[= L _-F/i÷OM q͗-Xv}v^;7V7]0qG/7_ںAV/ua5x`\raNiaœ|9 OS~= z/޵Gp[{7ઑ:Y3ݗym]h5w WBQ-=OZˣߧf;(ut \k^b/{wk}wݱclŃd`$)RD y@ & B 0dQB 3 Q$HAV j;Bc؟sUWtwEgI^o׺ֺ߽>uqA㮧X҅^';N\q--_Znb0靭jjj \Dt6L5g$׾ꑆ'0t-F—1[w"|~ C01NutY~Z=΄}! öܩՅ?^q_-tegXհfK6=of4U?AժQ+~;^wo I㨞]}|i};G}YlwKo<ίl==pV_׷>$<]̦`~<o.fVuq_{zUσfSzmyĽ}af_-:1xRZG#}y,8/YLgwJN,>ϡԷ8ZՅuGÊ |{OG3ȅ̶"\ח'boWOuŽ43سSjz Ͱq+k8K5DW?t{^Iw0|kn]34|uiSNz+#g/NW{8St=䜟s7Lg*w".߳mOinx\] c>)79;K;lfo6ugX╷蝡Wôu'S@ūS[0bwON6ƶ6^Ymv|0۹T^7-J>WW[\xØ~Tn'A:px9er|.ϱLNbOK͟VɗZM=G8;R|=ʷ'|;yZm.6<]< wk^K0Vr7L)q7?Lʩm6ZͿ\oރ8zقz8cfZBlj'Qz㷟@6?/}bQC+NZnofp4K8c1-\ƍ7a o.KiQ}kի}u_Iu"/VO|{yا>-lk|V7ݼ?3չٝ܊%G}ݬ#n5j+soը}ak9 ^_? ']>3;߳}'Gfw_⩗ifIݷtjK7z3&iu}mV{zl/s9;nS]003|}a©6a7?ZK:c?Pgǝg*̺'}V°U/]U:Lj~GϐREY8HԞۛ88l|tW/GNχk]bD*gj;u+Ƕz6OL'ۣhw=?\|^XϞ6Z_-?Q+G?VŬ-Yb4ZDEzՇ;u`ȉ"^ذVmWߌS(0Ͷާo8NweI@{H l4$ԋ&?x3Ojbp̻o>\__%;s_r6v/L|vld9c'8;x^q9rrav덻`''&ob#I_ߏn!zx΃yvw/\-.NªIzN+/GkN:ޗ]_3"^X8q~5ad6~ӋmrO˩5XZ]_~5ov8{Z8oG L8=~ο^t{ :\aYvyWXy8㉚c> 8wϷ}0qwgΆ +5?(=3=6O^_g߽Z|{VKR{ʆ{S Ol_p=oX6ы9\^i^.y\GZb/Nԇ?5ܼ㬮9#ל9ϿsO}Z~ۿ9:}3oVvj>>a8DN?c˷SηX}M{.Z03)~;ׇ0/Wm{ڪ޾,J{Ź7w یpCo9ʩ3#\Y+pjw>^WȭW(N[/kRcr3C:b^"˾qy]bV#=ޡש?bK>D޼A,XIIqYb{6a;sa,ކ[>ujɯ7\~Ϥ\V\n촗q,3s/V</8s=e:ǝ7|1x 6Rힶª ;>6LPn5b/>dm3_Mqsg99w^O=c<ղñ$zj՗w=, hj8q4 g/Nmsoqaw.[_tz5ͳlzwΙ&ֿW&87ώG.7Cp&6_UHo}<<[x/s{=zߓ{ rCqᷗq^ /SM1q怭SkټOKe㈯9=q:y~lڒ&θVC';ov:LxZ_ڏ~0ΗgX[mvqfHyFͮf'qq/=7[́',/ߞesYVWA+XuA=i};|rŖS.pD_+|smᷯ8bta:9I5>K~†oxcY-nyx|7l| ?Uxۿrw)+Nhx\tXjW^N Otu͖o}͹6W>ngå|K ?g@1w/ښx}7o.Mw,=pq fe8i3o0|nj.R?ԧs< <;gpst~0#N {f鞳 ϯLmx렸 IDAT[7 g1K5xc'0;xƲ;+6onZlym_uVגoO8zp-lGY4C'#=vws-wRwXwU=d1k{>4^¨mOltgr_vnjwU[Ga/Z5qYjVԵ3G`ݏO=5sZMIWa뉃4x@Tcj_1l14k7Sy-ǻŗӌ _u>8.];/|Uf+V~p̻pˆW_U<\jV35[v5[W=l=ҋkztW:uq-~ϧU_ UMuśW-πfj?oʯOX:^wf\^fUxD?y./w6vyxKܼߝUx[=5' jN~V>̛=3n_ݜtzvevc~-Gw;N ^pvͣ.7J3+/1vgE;zm|9O{7_},ʥa~h!)޹S7_giì߽O_ۤ;_M7'k4[a_zb>^tל no8xR<}/ ;=׌۫$Wޜq \Ҝg&ՋLYi7ƛClݍΊ]~3[n Wo=\8_gū7CWE l6Ssɝ~k+wOg̿'3ش~}3rVwk{aO)vۼ0t}J~͝3k;s輜Ui>.gd^v< a͋K5Kή\ n;rg/\ /n+ucJkNXq~ιw>j1pzS:4)bUx9Z]:~~3VS?i7|g8+I<#nϺŖ̽,޽hJg\9N.3˦;znMvxZmȱ }+s%_%g^hQz+NK|kXսi/eon[] Kd%Xk/Xo8ߥbòI3^Ņeuշpx`?o^1-nxu{ͧ>[ڴ},vlؤ^45Xq1{iWb˝a-/z9EDۂ;ox}Wtfx׏yGWI?\||3W^Cs!͞.gӝa3f͙zmNܾVg^5 ' 9W1Uש`paI|vqur ۳i="|~ic'kN;a+}]38=ޝvoxi{g&qXbfӻ<9>=Cn==+ݯupu7R|_L|i9ở7Æcsr4h_ԅ-ŊˆGU/N9÷GLݛkΧ9/ w׫}C95Zap_1|a  0^fozOÒ4b <79Z3 ٗ` =\KO H4g\Eℱᛱv4l~hlgOñ3˓\E'S KƂQ.Enzڛ&p#zׇ [0jK"&m~X_Ռ}`WYvq>=%zr➣;.΄^&f'M;aD?Y۫8L{퇇p~3.Ν.wͯ{2K{o/_q6<>W_;so}r߬lS5KLיYΛ/|buͱԷSx}glqd6NGtw&t=K8j;1#&#{[èLZղ3\|xIt?7WC'j]_lz0=kq[o>xپgURgjf%φo'fg8h!#a;|3\{o/ݫz|v~V1ϘJKꢞ=ž^b|cW[=ͳ9{#/\s蕨<0#^ݾFM׊|߾0Cm=ٞ4::y>uura§p} ָ nMϧŊWs_H:49{j8=7jJ0Yηif `Y`C)'~ǻp$)8/Ei9=#q>S;/iRr/ tߕ0{qK?5X#0˷p?,\̝.fr/ |0w>0|9=kKT\wf{O9[ &[U>:'=gr վɼ~jbWisA6Ozw7\n{qTzs{k`: l).'qe#8Hz9/s9Sz;>s OBgf5݇怑o靏xw6˓z-Gד Exi'F¤aG n6i/izv6ͪ.>o:9jֆGg-n3ϯ6޻^S9VO<_aζ^Nyj o>hgp/r[r/|?ߴű3\ڃXs׏*vrƫg\aSmJ8L[xarkNK]Xq8wG/9.RP{QlKӥ*_}x7K.[.MJV}_~8L|Yxku֛gsvy\jz!r76j^VrpbdÕ/ۙ!᤮~skrl>nks@/8ZEm6{a_Myvv'G{ʧ+^7 ~g+w5q<ٰ:g=fanͳO_9^ ϣ6cwF]37/܉͏'JGs-DԉiUY>9f(NZXzX};/Wlj˩_\g9Y98;tܯG<˞gw{br9c8Z&W% gÖwl &Vtg;ir7WI~NXi㬇\񈑰Iv\0oS}¼Mٝҫl_a'rzɇ;Ա/,X{g^nmq:<;-Ζcn=qἷpu[^⥓UیV_bs_uAnxW+{+G}8bCO#B&x%_i0]X;:#lspaw[Ļx/Fhg> q[gS/u[m6l .Ώ+-nP|`:o_9$zYĈ9ç& g|:睇wy+-G8պ+q6Ά!ꗧW8XĄ-Oȷ»wV#g:8j[GOF -DL ^_[;<\9Lb4ʳxGw.[;}魯`ïn ;NŶ&l)Ll3>5g}q[LգZܧfK'wCt'pp-z^7yVφsVta܄i&.ZO3Qomْȉc4̝8 Og818ٱ[LQMl,0Kye@=_|ja] 88^Sۊ7y[l筏Xv5[wW+Ϧ]r5[Okʟlbbι}T pY>L3Œ+0ΈVSgIWO|>Is-fg_fgk쉭'K}{=̐^ VY'Sc5eM#-{kD'krl,<+/wg 'Rmnvt+9N%jȖ_\՝9s[|W9ϰi"9̝CݷS/G]|o;uIXZI|0姫˯>na4\ʙM4V.󒨷H]paOoxS.Nbt g?̻qÞRng?98|W%/Nl˳xvl~5ҳ{7I{f뽪ws%^;:{ң~6;ѰF<޶af쬶M¤~gCsķڧOfj/3Fu֝IL Rtn=NV]gT,f Oy_GO-sſ[}7'_O><45,@r{9r8i˛҂BvzѭF?~xZݗcasUUA8+xˉ?kODʫɦS;"KuWjäřgۿU{HϊܝtFrդ^,Oח9׋ޅ/c^puV|p륿buk {x=o1V],,mqoMv|6M`gSOʩslS8zVsxŝaH'j{<78ϣQsV/#>~>^wgg}z?8\SO±4'?^Ұ4[>~~{j?I%9|,~KG=[]1}\, \y9ik)c}Y+ tbƽf1;vêVS<~0ΠYzjZP"rq"Fnᾗ˾ݺt9\cM.Tu]63WG. s=48IJ복νi_qb6ty|K7'}qS/# |^ W,3Wkb_m3#^]|llybf3GϭXsrMlbe޷qO˾Kx/VXl0=qg_rM%\W/i8&~a%,pf;_g\v:ۛV|Ǔy4ҽ+VH<͞^szub}9zgWaZ5[ӊ.St:1klvjG5x0>qvӝJқ&|U<^l$_lq+OZoR|uɧvֆ?dֆ,gcqqwv}a^/RKo:b8 Os3Yl#y;/&zY<qeaO}>LX)rOY\8f6}קwͰexSA-yWΟ:tF|w/93~gpUs9QK? IDATM=;O}4S~]Z1ZlhRO{ȳzVt|<ͦlOjyė=T_.-/蹗8I6Kq,6[^.1f;c]*vagZ>v?kGhOKq8뻱ͳv/;rզ؋+_0j6'ou,{m].+r]p>kjD?,?8Xl9j0o$G(G7[}{& )ŗ<Ν>uNp뻽:xVo8b V׈W3WmY|-n7Ku4Z?D?5G~ MM) M_ gQgyu x^1f&;g#.:50<#?[^b|:fp%ݝ}򓟼jt´G9Ո|~8g>l8[7clrS}J3^LF.mW^;OO_{O{;?Oǟ~q0F~q.o?ys&x=_}9^w=09?IN sq%ߛ*gRc9h{<_:{8rl{kޝ^qc|a3Y>6,Qmutp;Èi+پI5of>w/V{c${2܏}tm~ڜq7>y5b4Ko5gWM{>+PMqSp0ś#jϚjlNu݉Űe}ZG|?ȔSoeӄ6 iqQYV'.E7GNfӷϜWϽ|3Wn-6,<ڧ<ɧw.9?k`V`aN~O{gR yK{Noޕp[.<+;ji }aTQW+bۏaglY? ó{yD3_Ĭxr?;Vg?] ^^j>j{;^XMu|3nհqن3o>x̏.MΦL&97&.V-:Q/lx<~?/_^yշw}?٧Og{1׾G|c}O?Iث 'L>Lbwr/@]rw ץ㢓Vofusr7읹7{{Գ&0sb䫆nt ~i;ݣ 49Ig!=ar.9ṘI{}aYpt>VxQ/u\ 6Ɇj]teEx50rɞ|+\b/>^1rbz s[Nwz JěU|yߙ$n榭blkc}׭kFS/nJ'Qw.~B?'OgG޺ç㏫Cv8ޗ{N̪L$,qToZ|դ>,~{o?wt>w\Kcm0q0b=s6;Ƃ͆[zƷ8X"h+{Ry՞VXYmkF6;}'\u=9l8åYzɱ=v{'g7K6a8lk˳ɉi5L}r_;y)_Y.=D Ԃ]|XpbtvlO< O?W뷞~=xO/m̧\g~;W_zy?g>O<ַo~kώ_yȏ7~Kܿ\m>[_xOz7~Q^ws4ؖKO#.B_܃ol].I5t,a%n鵱yo {)U9?'cכ&a6zĪ^_ŧOۼVqvcpaOopa Jgj6Ogo: xKN|E>0ӟfʇQWp7`WZq֗<Ӊ|WnXsĿ=K/>lޝ9Фnt.xػAmvYW]WWG o5}- nCs~lk8v.7S牫XZ1G߾^L^_{ȯ\[|#Lx΁]rc՞:gFK:gڸW蝀yzu};n=QKЫ`⓯E6ϕx~Yl5Rl΃&{W`^Aba규Y'Lz_SNsT[]}7{YaIqc\`ּy՘%oҝ|>.?NzNKg.Kzlo jN=s^ު~_,Ngf~{;L1쾪[ ĚMls_bNLp=ׅ3 ;~ZM150f#Dg*nq­}r- o9 8;vY/ް{{pwꪕO`,}:+8"Vyn\?}~y?=Odm/~osk_{oo|M/U׿ʕL`/^1l9xgR-/<z/=}S|}_ӷן~}潽e|㱟/>|~S=6O-E^{اx^*T0lZ)j-uԧ.[śɅ5 z7LZ9qOՔ|ySho~Op˫%s@H.|8CZ<> W^=|U>$ kfI8xg' ~LN-1:Z۾T۪o&ZCfkO^fȇof355YYomVdžxtc??WO_Nj~l8g<LoZ,q8UYLM`kbgza7>-2/p04?C|~ԳmNP>7tp>be7_3QGųfS}CM7N푍=giΠP3ʝwyٰ;sc`GPUvz ʙl'aSYjLpe.|  _kbiu}WO'xw:W+rItFBq_ ǯ13bIw,L7C85#"dsfVg WL8Nx[b.q4{0q\- ͟x~H/8pK%VqbھۋV볮ӟf^},0Jӧ}k=:_il!OW?fnoJ7\ٲm;]_yj[N:+y|ICrxN\NjO;O?~eן~GS}=|{?ӯ=wg?cO̿/?ٕ|ڿ~f= 箯՝ a?o\66Ə~ƻO_߻eկ=9wwcK˾!Io>Tx+\t,a1u\iX8btϧwgͶ~clxb3lBΊY_4b ay7siWbA]N&;8^WJQӂi]$#nv= y\=/Sm8|=1=Dd?pZ{Ӄ祚pU@ h/֗ncmqԈ:y|rˇYp'`=s?[ [_Yos'[-wI5Z|˝ޯs==SIϞ.gNP/'`4LՋYWX:Z$sn~ }6Γ;}c|-}7O팭bfk']4peם 7p[|u\Wg!}.ݹklդծnr;C1˯}G}-kko&Ɇ! #?> ͦzžq1wqbUqlys9މj|w5`NԱq㯇)bųaӷsf{Q۾I_[/?_}o_ğxc_8 N}W'gBpݾ"W~z/uKo=c;/9~8<$vgí~j,EnꮂNjwtܫNΗ/itլ9Wl?=m<^M`ڃl8v:{7b^ KgU ܞxxr^Uf䛿d{fK}%_ jc9M̧nVu=/ɑ%fʼnvփmb8w^\t6<>/ʧD}w_ͣ>URǞ9O3j7S8}Ԋ׏^Lg=)8&3Wۼ37gö5YîVϏ&jvNf-W|zEpH`ԓ}UR_~|훏;1/_m>3UuaVY{/z_ڇp{lԃ /Y9rͽf^g 1}i[o>կ@~fﳋn&$NĬb.F[Α's<>$N4l3 aĻWfG>_]L`3n-g}șG,Exrxw8n]g^O_| y+_=/O\닿+ O?s?+_{w_O6|5tYqϤ=Wq"s))_]?W{m˾NbtكbfvqbR/\xp;mgN-; ҇Fo~Kgf '\<'j כI6xʋ' |~T/oF]< .O7|cu- ahy-9磮r7rpf3S{VC`Hs>8o?\ÆQg΍6ӞUtT{q~;<$fHէ^qvf5W)C|N=莯m'ogF%Ͻ{TxuXi} 3T[ }{ nu-Ov:5#[m3#y~o?6|+V?g|~^qሧϙck33aztN{Fq-΂ڸ녣/F/aK߉rzW^}9QߞN{Ū5ڞ}ݏ|xI7:s&zK[v}a#ٳؘ8˛X1+('[ӗ?Szv^;G›U>'YKO\wuif.+>~~p3byu{{uo}s='{zC{¦fL_j^dM\6\y/l}1jO=Og~χiIg 3_|7n1+ֿt-^pIw]>j׮^|zk׿w~<׏=ֿ/bp5e>؍yo#ГXy$J0ā%0}W< zCrP 3k.Na)8cxXǎ+,]tfˏ3egg$։_lw0cy ٝΑyo^Nbts|S4zaW&r3ݳC3].~v$^iyrW ˧I]X􅑿o>'|zMLF15[@I˙xϳtYa汓60ӇC(jva|08IW;ͯy~z$su3nCwCs٤=O[tuy6h~Yp$۽G? I8&H{|#X᧜z ~w^,^{|[]yطut\<|n^s`V<`tspɮ^W󽖗L{L{{މNZkK7bg>|b"?`mð@#b_+?nrg#l5qk?Uw8HÒU}50b~L-pA|oRTC8O:|$+N[#;v9ٮ゙̝ײM=r׹1WΆ˞#=ϟO7 ŜC%{7̴ͧ#_l:y$3-nLC98ɞrY|JKg-'s$lף;hOk].]9o~rMk3_ :C㵮[k_=o_q.[V=y~h9^wQ]+}j%iWZ^w/kx9?웻qvplƚdnvN?{dWoO7k~H9y(6}n*>73gfa|]R=˝|njvOs擃=x$xy'7^ֺv3ɿ=՝>}'"_S>7{jaI[m?fg'o}Ws֭~zbOOrUo2԰Ir]rqלyf^yΆZM]bL6|JC~98s]`>{I'$OfM9|s;bַߣ078;;?ېӵҳ]K; 69ֹ)a7gdFSOt ^<)Xtqc4 {i}`z9^K{f>9pUnb 5uj8|Lz/o3?T7l5f_q1CgQ~|)3'y79f_ xǾ0pugT/Qw,]ZP;|s}GO0|8q1CN}Zrma˿雗SO;myú޿*iܞsur}?~r_ѣ;>ˋezV@׸o[?Xt{.Om? sy/n]9ŒkrrcM~/|S~3ub7w Cas1A@ 0n?Ֆ\CI g&L $5/| W1|Րu=\K_M5A5)?NxX~:ZIu#WX.f^5at~ʁ/ǺiCևˁs };zke=Q#<{bpmmI'yNµӏ1UV号^yS`L.O.,GR :_װx<L~!8 [ތŕ\N/[|]nG5L՝8V]bsvfՏ1/:j\ly!xgs~zg~[O=|<ҷԹ3oi|tC> =y /;lN l8LyjU7\S7'%Yw쏱tշ=Oܞ;&Of 7 c$jꁆa%|K6=kO 7?$Kl;jG#nzʟ>]Nܽ7V_-To4<Ϻen!i98uzKÐ0t90zg뇿岉Zqp_|?奏T=klkKī7{vZO?{?ڏ3W|sݵc'_|>z/W~b̧m^a}׼ηu5Xoi>Xzuk_{Pgw7Yk͆׸nys?wy_6ۺN]uw)WX_J+HO=u˝tǓZb>y^;a܍v7Py8.xt(7?LժD4F7]5Qh.^N:IknnqӇ$?|iMS7M|BGި[kSqMZ՝[oԛv8^Pwlqa^Ofyʋĵ!uy`>a8||׺(_~=TZCf^cۈgT=1O<8eή=N>=~ uY7wgjoۃ֟VGoL5ɬǮnfr'5|tODNkk=?8s9OzǶgI<,Q5m!|׽}{1^Nj6`܇l9^K<OoKtMu3ue:L{qIZ궞z'o 9poW#m>F>1cj+>e|g~|t/'LƲVkSOnxgkkx?zk`q/7NW̧L?{;i<}ZK{?nNp1qykn|$l\| '׸¥g._xYC,]ygnv3/7߼|qgO|Gwч|fʝ5OSך5q_~U]ok}_|ϹrѿK~Y~.Xڷ]~aZniW;D_z0|{/^y'x9_%3NkNw^DcsW[}n;|ɗ./}γ7/\7-yw(~O5o܋S/t:gޅWwz9vt̃޼mrrO z ?k_c|r݌iijڎYXR<]btש8Xv=cfqR}*/->9=x1!q7/FsH/J/zNsX'3wE~]a9*/c~]5ϹD^O1|xy&-FWSaM>fn [/ԮSm]c뇾$R4~Kz>Ͼŷ|կ9=f,kk.:#7h\sL-åj:7S;$ >E-t8:;__jՙ$9g̜yc_HKi7Z^k?lדq,nbirKW&Sl:b'1nS$S/1] '6!Z\Zoxf7(x^#>#~=MG#yFZW\t)F'y+>{` O.7ۭh~-y^p3Kf?,X?>{#oy7W/Zك>}?_ڽ?[wo\.}~S5~oȹsN9'?n^kˬ=)ˋ/^vnvY^o]`}˟7 ESW<|÷]y\k۟~Sh;$ǿw`W4BtCxqr{s/>PϋAN^:MkIW]/~3 8ɼóes\ˋ/{K<~Ϛ>?&ߺiPӮzD|ZK=-!s}a3Y!^9jO>i8}7k6c}u' mxQ+|}/ֳi\I1spj.wr'𱭍?7TCa7O/|)]X9l1u{/k5]\g㞯9ffi{>_M~֔:Z~sM={Տp3'gpO~ᦳ[Gr/m^zD:r͉׏rՄ7~̨য়}\.};йpΎ3L|vy)Fg\߬mW3]5}@/O!1>!O f6` {u76x<F\ϠîiN>kn[`}h3\@Dnkkȫx~ \#˔fobo/ptr>~u>5_gƼ} ktgpW_|8x;m6Y03Ojg} ×g5ի8w\OxU3} .g-yIcc\sq7ZgxkK[sn1}K߾e˯؏._]߽NwZ~`y֟5{|/ZhQw=oyң}w=x{_gRg\~8\n|n or{>!˟o,/}3}g<}/?o|7yr{cx)7hs+^qͽwoxr<`[뇜pI25.ޏn|\?/N_ߛ7]>/.?OVxpXɩ{?]3E⭥zc^O{[?rx='$?z~# ^}`8q6ܸp)nԗ~ZA[P /6_֋?4|:NlqIA:g}1Bŗ-Yg:<8N[߼~v/m\<|=qO*/NskQlW+;vы~ՀwϽ߸?uی wNs&H8~(o7SϗbKJϚpK}d{~[ji^~zIs>5=ox [Ɇ/uN=F|⭥tj>94/i'' \>i9`c=9?j.7ցIƏ#4H8WQOgV}o]bjp$R-qa z־+Ϩgڞ՛/8[ZߗZe^zi-F2S_Am.x{O>><$\:>x屿+˗}7-?\~o=o߃{rO]?TG/> `yM=]ѿ++~Óo n`OP֫ցWsk_Vy~}__Xnuٯ|m5x-oۿ]x׿Uo'~W~c.{*h~ IDATy;>޿)~r8$?;+Q7 ݍ&)Ok9t=ȟXx2}M<ɼz"<>>‹fNq1}qctqy}Ê3 拓-DI\a=n̬Qx*!~on_6-& Oa8a %^v7c7ɭpO<4OOS\ؽ?a {^ CiM]K~rh;kf0qɭF<.>K=c^cq5G^Nk?p/\k[ۑ {W+GxU_.ؚūfx<L$xՒSOXe_.]^ϧR;:?=y>8e}cjOiNåf\{׽S㮱Й8N秝ΝNr콳8}rn]:f-87%<\6ift!}鞃7gy{_]w8̅7&W6,bd[WW|_ΐ{ڝ:9=V{ ^ p]+69O5yH`mks'ݰk^nmOO\;{S=6!9lxӳG{~`ғwə!b:'ryo gˋ6WWglo-bdlOU8cC~}/{A?o^˛_~槗>{w-Uu嫾a˯W-gfSGdh9Wuy^=a?G^oEw]Ɖˋo=nЍԫ?^['.XXʁ}-^ߗo5W~&~zC/^G,?_wGy_җ.7Ik?׾э8y9q{s-/_3o|g~xq@n{.k?8eۂ}s߹syZxc Nnn<?{wvonTn927xkq>2w wk>m˭7 ꏽ# ?98ǫ!|Cafݛ$C諒O5冩Vc}f|˱2{3V1|0Nozb6\g$OnG?_`k#v7~hJ ~x=Wnrkaz0|gaI8pW#o̽'/3lzoSru=z4!<-г\Zғ^m/Vz#2 ?.ϼ0G*~z6=i ̀w][+\:w Esy)vHەΗsչǡGxOȯy#a0qw_C: ={_/#4%~~gs?që\a|yo0$l8R.<Lgߋ~|MMև0ՊQySk39Ϟ5f0& և$  Sv_䁯&?{qrhO.େ~1psK/M3g7GrO}o'~[ۗl?_s?a]׽ro~-NH~l}Ox?O^gy9XX?Ҽ~k7\]?<oy[nK`\mkq>g}o!U#?\lv,`=ymvN8XO݌{q3'֡fج-gg|֎nb'[KO tZ+:0xvL.o=l/#{t\470}0g=!k]0)'/>fK'l:'-6Q|AvsG\oV|Zbx;V?\}q,,͜Nݚ׸537n}Wk:}}cG`qi=8?x$=qOg:7:bw.]ܙ-?KҮ?<}vig|rQs; bv:V.jzmZ/ O+wKX g^}gwre^O3<^XsF/1E[=mOˡ'G5G1Iqs< zQ~⁵F6,[.- 9_/?q.L,ⴑo8ӟ;ޞ}[3YMsz %OvSͽssE=Ml^ST6zXW_joO`Iē<]W޵?7~Ƕ-߼1tc/Zxu|Sqv}!g7&ޞ9sQ=CN~µjO3K1kO|/ {h=qO!;j1X4r7?Xu{A=d4;i]{޸s,=$՝:CyO9pۏ#盵q96|pIޚOKLf֬nXoBwK1>z$>yw☘8oK&g=L} 'V[tji93{Jk)G oopMi\4ѧ7f擳|s>Ǜ3򕯼}[{~g'~q]o}wq}Yv];s:SVt8[~;3m=u5&ϱ?睸Y_n9q&w|ؼF{f׬MnOJo/ {_}M7`:gz K7i.xꇥg<\ɕ/L\v'yoW^njOvkM{=ᨾuz|[CpFpb㜘iWش[O}KI:=4R3O{xuܷqxi׿}[߲|\wmGz_^5Z5//[1>>?|ro崫_}ȟz97n_vwr~x;[jywZ?ß 4SNO?R;SwC9L?M{9Y c7X|x8f+ z&~azbǮjo.Fh i|hkl}Igz ^癬?zҋ^dzsëSN}|mr \4eM뇞#l|ɯoX>Nb|dZcوaW1yJO3W vf-91p/|3O~1_8i~p?``Q_ itup5{k‘xi>D%|^{p0vRP`[_do^4H:F~+]iao}#]0NM]\\z4WC̦5>ܻg|gMg瞻}#nmթV}ח͵m Jz9!8r{S$[)3).}>/܌O7ofN{(\|qaփݞ/s|pKxcv==cKY+N5`ՠ6b/k1:NZm|sk1{.оOތ۾eD|b#ֺxlq굮a$pY̕繆J~z{.|z,ēڙFcqZV!4cyv=eq+?pq/]o߇oþg-oуXU#ga]q|[/y񳞹_ё_w~tCbC#^|.7]x/7X?|h>[~'OYey£?#^z~mz)G_C[?7.- ot:+p |0ݸ3gKAw×fn~؍z?z>$x'`OKD*gq䄳>q <G3o\9. K4i{Mקr?6[Z̀IWL=ˉj}YgzՏ#/*z97RN:,}o}j&gXr#Ϙ~q*zGُy}Uoʃ%-ڵFHڿ4ON-ws__W5ɴ:fՂ1w3w߼fwgꅳ$R73o|idg nÇdWYLO8`'֩թGO9bٍUl zQл7>Eҷw~=VН9@Y׼~ꡊ/L9!V|^T+͏G/@`͋+9DK!.W^ghB7`'^'>Gq1_=p𭃶'p09v<3&Wls}C`s1?JuTZLTk:^̫ 7cÙtt֛ٯK>\3GӸ›qlO㉫=SMZsۚw)j틜WoKÇϮ?Y?L #8[8Ys6uS~gC.\LWkG6<-kbr~vom?.;|-qyZwc9 ?C {+} =eX^Mns張Z>~Pu>g|OOo~6pqyp{g뇘Z:?q׶~?jA'9_5ˉwr= /_H}~o[?Xc}#z9c깟S.xk0\4#uu{k5fkӳ7sRGfb>D1%>9a7cC\xTkѼ4Dt<էi{ݞKOlBC^g?Ŋ׾ź{f87 g!;yf'Wtg-I멷=N\6L䧾?,\wk_gZu/?]>\N?}dp_c߿\^;b>l#j']?ֿ L?['wҿ&Ǐ/~G_Cu]^{f/~S֟y;߹[[Y)ǿw`$S桘J|9w?|8.Jf[iXv5drM;\}U^?\o.'<Lsf-FvC||>ΕX\ c.n z5{(/ Q=YZx+7>tm24>|q}>?z0Xݾc>_œp|x5a<͜N7 q残hm8ļ\۴p7hg}-'[~{\.;|֝y5ywq+6yӇp4zM{b^ewoi1|nOUO.ypI˭̕_/᧎Y?bI.)ƎCA٭)'N?lZ0co|m5`č^zG8r~嫵zqGX`g^tCG8k/9EߐO߬n]{9ib0Òt}.sg!1_}k| /t1 ZK=_u>4_uae|?_}^{ IDATO~߾R}.}R, ;4BC|8j|'9avQk׾1;L\tkbru𵾸 >}v_N2ۜng^dm3G=$qgjg֛=R{j?I~g޾=.8ds?~7^8{lbӸIcԇ/#Gň7Ha⧍!c#[ۜ|5jrg/lX0r7_"i~+'Y'|co[O l8|SG}rlW6zj)6ȝu']K>|u:9^>7mbjZ[~sW帾t@p ikvF+l|vf 'Ż̋6|<7pxH9憚Iz .7oV!W=0̍MV`}{V,=|ꪣ>>~yFu5J5'>>y{~:ވəgeT<\^o->ū#I~SGu>29DonY->}Sk6~Y>fMk5.ߜMW iy^=m7w~;cw?7>ָ /X/W^~x9Ɵ,yr |7-?twYja5İqf?ohk|c|Aw)믤9XNo^fS4O<}:wUo]v,_*7qya,}Y!C]vt:t|7CGfXUO՗ZgW?|Z\}\.[\ָzr,_Eg},xjnLfr=\lqZؓ{bTVl!nȡgDl]&ܐW,>^qt_={39#8Ws-;rY1W,87Y^v_{-Kz;gn]hUθ/|m>d˼lRpȑG7%}XS |`Szy99O_NX k]wYg+ћ~rҗ{/W5SO?}9wJM~w~.b;$ 8S:PsS՘=~ubr!xnRQrgO+\_$ySp>Ӌ'/F\r[syO/a5`\̯WZ뉟':CxFׇa>CugrB瀮I>W-Xf37K wR֛|~x|]z׶>x|hN=ƻ׻ g"7av9tt_1|aL(^h?ˆw晶&ybZ9-6oZ+.IJ]8Hlfp/n\C̎C.|y]vk5ai5Xox"Ƿ⌰U/;>nI>w[<:3o/QX'8v?k~Kپsgfyv׹)Ot~a_l_6Q߬QܽMsOdoGw?GaʡϾ+fsmՈ'-x.iKըΌaNOSǥuabY_5^΀Zko3׷>g-X^Oy ٵb":5r /oN|_KOaϱ1W%vyjWO,޽MW1G=cފ*W0G7kaS9qWuӣ<~55čs7\#<1ڞyܲÉۯzq=;kO7ȵp'\nկ#߷ws!|:5o=hy!Ƽ&jZiOb#Gښ Bo|us_ۏ>[^re儷i9t˖_~rݛ~}G:s?^rks1nOhlWyHMd{͹ >5yux:r _l8s8M꩚5)^=č W:jlCϞ`h>5Pq0m~>8YWC~';&q#.TZD_%kΖS~=4'Z0դЭ:bcЇ3"7ԃÅ" 7g;q<]0psOUg7r`۾:/J?Us8wjAN5<)W~+kn+13Ggˇ#0ja^}͜|{)qXgds;7΃B3ѽCO獎3ϖKe7s_ʅ ?=~k,G\NuwZ3hO`ۯVz#^bU[m̞ݟ\Xv9t%}I5|~|t$G/募ݚ`[6L{H}1z!^Nkl ^,yNx^ҰLYkŕXύY}p|=az'O\r>矢f ,ͱ>]b\wp8\5'/ eykj5az*=yU=YN^+9Ğ{h~('\zOs\]-p('Pa}w[ryl?m[,}ݫqeݟ;c;[%/[vY#~,[~3{[Ƕom멺=[/ۿ/yzoU{|,xk+/xAUu5xr~ro\7|7XNX_?Nk_S?6ۇ7i9m}OG-w罖t3?z;0@ntf3CIhü9x~vy2k`^=1jjo:aU䙘9)9]-ޞ3~(?{af~9Tӟ/:nJXbvatZ\s}/I|rfG5NyCyaW|:nҳrgUwtg:Ls/Y;h]I=l03?oJz}\\80yWo-̼>6V57Xa:|űӬ1q'7c󺰽d>.ם Zts:C(;|Z)s]Z[ʟ}Op=]jgrه0rfsa̞WcbƦ=/ǩٍ܇c˯r11WY}ML踫7xkak-f}Ny4ZuH|3Ww5m-i}չ}'=q-n<я^/m4a ;zyuow'Ef߁mwPŤwsnx,nCyq+pߓaÅo` 0 pOчt};Cm8ɾaak6jOڈbsp[/qkW_7o?p5m=\gQެ}Q6/|S)Fa?/^M,z >b{;_닏oԳk'’r3 MRl{>gէaלw͈x׎O37-V|}Z^hRq[7'劷7~DG!g'Dכ:xh$;s޽e{C75?.pV]Ϯ_sF5yX8I_a꣼yőo^gwo;~q_~O;L3~Ȇ/fbMxg:C懄,x!59aد}_qW9}ϸԢ=(.mj8O{M=Gq=^oO Az'r7/fa0blAfY_գ-.Q?kFރsu:}Cklz,=ShS Oy{jWCz?fրƋk^wW-w[o{sݟ~rw?l]No=_~syeI yz&?.?w|rvey|?Hn('uЊ:lcO}lqlZSqf| ^|3W>L5#rQofק^sKza 3#Tla4zq}ٻݶ{vPPA\@2Ƞq$-mb{q0PZidDE@Q $Kt>{n??ųv8}HjuܾqO\K{?DaJ9k;c_bd?{/\9vyxʋ+Gϳ4}Ϯu=_hϫCdyuխFq_'>E3cN6~Ejആr t4÷?:i\xj: n= _}#-_{O~xaÑܞ [mzO8C}|>n~>Zޘ3clS`&q4p8DϓOp]yVzΐ7v6Kk~=ϝrϷ/pqC>^ Q.,?D\]ot|p0 gٴϳi֫o9I}>i⚐kovYOxշ=h yߗv_ }X?.\[?Gwwgyk^~/C~??~}+nr兿N N'^A)=ۡۏ,qՉ[<<\qygC̼1q ơ^Kypay|Pk7uk)Wk-K[Ok;?[_:=) _5?{_kΫ;!9I԰6utiMN&ܛRÉWSkش'g=%d>r[{hrFG9>W<_a=M\uz´>k0<pTɑ=]bkbILM bHʥ[G/9az_]_gs—;sbg^f13w3msa>?wpIfjyQξO)K'yGbNųϜ]/OQ5s729q·8+G .FnL{r?ƼcCkxkMu`@6|0&sr^ov)a}|/{n?z卯~A~]q?r\RZ^g.O~ȃ~۷-UXb?~׾]uxvl=m}g?$ h]/~'/ri9+wﴫ\eyK_\e~ c}{~nwx>1>?^}\{.ZCi 88F~ϜN'ǼY CtcWtaH5͎~Ok Ӎ-.jZcnlqĴ^=i{.FOM﯋מ\ oյ/]=k.Fgl1Q_zg IDAT'ؒv/򜣮>l۟]]|Y=W'1s6>qY'FUIkEǓv}I0bzi1_R=rԔC8{܀?/Z˼} 'Moת-*͇ѫ=*.WOU߾#NK֣g9$^OC 7s=EhrNϞȳFa.?Cܳyp팽tVŝ79s8?Fq97'_T?5޽Tgo^9{|擷>'=s՚)kÅ==Ws3\33wk_9i9F[7khZd9j̵T{#;K;Tg mn5 c䋓Ǯv\35]Cs|aNlO1yqS/&\co\lG=}1ՓCz3WooCȼ~f uʍG?4 u{4&3g8`sȩf8۳}xIkMuY \rowݽ7c}r-MoZ7X|~!> u}#[޹ы|#˓;~߷/o_k?7<n->Xs;W^>.ڈw2}YZ7 o{_|so_ٟ9˟-E}|x}|qnQA-v׏Zޯ.=y[`N?\x׾˝{/,o떧!xM~þ<̳]ﹷf-zu5}CL.Gwݩ}.A 3xayS\nz"\f\q}wdyϛ߼\w_|C~둏X^~XdYw'ztdbRQdȡ^յnSŌa[Cl7%꺹O=W/_R<~C~)V|gmՍܩf^99R?{=cykk@P1kG3PZ~mbIv1{~X4:xf>Os{|qн,F¦#tXէaj"~H&Wq KW}OL䉻s*fuI:q'&?sR֑g!ACۣjͦx9so`haG>L}/sSGmF:7y|j@xH3ajÿ?o++_}|&=hϪOo}{8-CXzƧ:xZ$ֈT#Nzzo$K89'w_/qӇraՀk=^$ܿ_5Ըs7콴i.?z_794 3p4UkcޟxRnͧ]'_ŋ+o֍} QН羷Hkoܹ5yMw0qYcn\"}_^3,\J׼7~Zav ֿܻ-^q.}6C6CC7CG!k?mt꣘y[#^M|k,W=ߜgxQ\Wҵ`懮Oz㪆}&zs7yyKדO`ͧ૟!z=fbJK0~5jc:e[l׋]q+W^~{O 3%˖OXP]Xk+~c3f~}|0 enV.jNL>,zj.>9O>̢}K=#N{>׸ywip0aU]ꔇ Nlquw '>߱h/aA埢H2SMp'F\_7{Z}#ě{t\3ϳ%Gg6❩`z8>#85W>[˔Y>'&岉{{Y{!fs﷤RpZ^Z{t=ߎz{ ?ۏcKO|^sMqj6 #g7k㣓C#&n E.~ȦIo^ttt.~kJ+Lͧ.zl䯗8jO{ַՅp!Ιߞ ?i:#&ٟ}xgϰa{_\ q187g8/i?ȫguVezaax_;l _xy~㫗w{y{v>}o _.x^<~[wmf\8ap o>1-~nOU{~OYƝg?ז.Kw6;?DY-{׻s;︼Xox^r~׽aܔ>; v8H'!  O6p6SIuM6ѣzz(g )urg;qz'QTd㷗|&9m̟5ԙab5/ޚa/!-/8&jIjWo/\[]0SZı];2<]y6|I0lc~.6}ɷS aGrIu]z˞ɏ/;׽=cZn&a|8~uԝ{}^[[}̓lX4eq}'?j5¶kY}䋃;ӮĈM/Lz3bZ'V~S サ>0q W1Rc[!|>/nkO~g8|댧}&X򦮯Sf3]+9n]T2{6|V.xW<9 ^ X=c9{ Cc7P*Ag_d߻w]|Z~9pK^_u>Xn}e//~/??]RA|]o*'_댃>ar/w-|s-y㗯/G/7mA+ƏkY{I[qX׼&8gi|}//?8vr}癷圪C;>So/0#_ v;&]C<ա/uqo aߌ݋=|x|ropX_;rÕ[ 4s~HfspjQ2'ܽ35[ E^'z;vu?3/>y'N3w}^[N9F֕??=9*.=Si0r {J4`ʛxf]w2kN/lZ\W}LUl?Nu~-69W mWnN_͋i>1!=yg扝Ƕ?xn&[k-֚7(ǜOs`U|K.o?6|>zo_9uq/.oxvdO ߭-/e{M G}+艹[S'?{k\cy+_-o~5j&W[N8}kCz?~g>k9οa=?JwmfwڗtE.я.^B˟?/??^e(q[>e.\xO$.etHcq]0IqðIu9%$ݜvӭOqozKzÐ~m4?q#1uqX[Z6R\6d<\qo<.|'8F ܩ۟NKl9k1uZo ǹ/oT8_\^Ӟa4:wPn!?U>ՠW \iW/N|=Wy/(\tm'uq> >ɬV~,T /jG^zh79S[%`ť&^7;l>.1"~a qXWt빵µg+jr>fǟO6o0}YZ3?JFF~yqM ?9 g`ǣ76iM|O?^W].#9RԂ=nJ{2sp'lkzw;YA3Խ], sȎo>G<ف~zqE{> O(0h!ylҺ6܀e |GĚ㡉[cS_]R].m+}9dٸɟO~gKē#mSկ&|rhșÉc'U)s^35\5Haa7RfbZ/Dw=˭'=3P}6>鯷0߼kGzT_o4=VަE^{ߡzp3lFLݮO9X z|ķ_0_[˷^gWbxb]Knkjjk$; g~t[GY>\p.׸݇,{ 5}7}ˣ'{.yዖٗmbg's s\2ӟM_d駟OrL޷nww/OySCEV~w}g>s`l?W2Hs s...ǡ?G:Ir~NSutzFƩo$l|wSWdj:!3\=z>LoE ֢'>~>7woL޸pzxr͉է[[=~n/8ly8hzㄩyf]kMp[&4Fk&;O+7Xkl9ik?{/FWQʹ8k/m̓P)'~x덮֬'7>9Wy5qyOaa/s8up|0C>۫ᇭn|4km-{kaކᇡ뗝ߵoOf?jY?=&]ⰸH\Z!Gg։^nnMe탵G=Q˯/o\zrp{ԃΞ='rg>w7ϙ֧~g;]S!.W ^0ayo[X=#5:X?NhgȺ3y+Wnm|/{0y{۞!f^oĺ>~_2Wҭι ?=m[_n9e_}-x;>WW/nꃾ^l֍o|_4yы^=8\G/߼C&w-w`)ZntS}`{.nX'[͹8\w8pCZ.xZ/݈7+qbc޳zoN)<.f~j't{Wx㫿᫑γS6݈Z_a0I˛{>$+69X˿דc7:ʙ[<_4!.5ͽ22'-gqvOϽt5H:|:9׋MX S WOn9CxXҳ1 IDATqOOl†^=u\=l%FqV)Ε>zacp8澕9c*V3]Mz#an_g8] p%ՇӷO-Ooj.xo)A~G~dy_˟ٟmu|9-9_~!/~7m_?| Gϑ'g79_{󟿼f§>ϡs͉?9ݵ,͜0s}<̱9:9;>5qc}y:. _R>?{añf˹km3<|df߳mŞyl83ƿyuʥ1,88Ucbd7ߘoɻ8`MQ? tīv:|8ܓ({֛v}Ξg v֢F=u˧j٫#vtρxYn{8mT{볜=6nOO=[̜<:35[nz,ǜMĹQK+GٓOgpxoΆc3)^~81bs#] Iy}:YxECw.Q98ZO}7[yưܔOȇ}p\g_&kzw_޽œoo>%/y"qg{ ߳?a|3~ /߾}hwimуxssGwn}xy]DAٜ_:x>И51Fo0Wz0tq$';yzbF?F'_ S}ě3^KfsGg.kԧubբ݌%|jS^:%lÓ3oTʥ;uרGZ.]^sZ|w>{ce=K,SZI^աẞ|n/or ۵/aEwf[;<-6O'-F&͖W\ 6P#L}=ly=. s"& ^|˅1䅏Om83t7waQ.G|bՁc$jß¶5Z8ڗu93|| ^|7|ws{ߥ/} ϐza{;ֿxo& <+w+]i0w\Z޳F5ɯq״@gƍ<;hWɜa;c|ʟ5)˜{*y#Nz3{kF2M0|ɴՙb^m=T?=sLñZь^s\G8k?|{ w(j]Cz׷:sMsXv|luɴmz!Ln᪱?Z#AO<< 5g@[ < cOﳰ= l90s`πn>s׬0 80:x儋:'0Ժ"a5+[9_6|媙L7OC9.8a^n>z7FdanyR=bޜ|7'}7# COzb CԀnu[l-ou{ &}=ɿᗟ:9꫶g<cOLc}gϜu};]/V|sן |3bgOρ~ϯ?^sOHgk YbO3r*o8'rig@bΚ"'߀lV+=>.O}b0ׯOa)əK^Xur_=5˟D.I+cu#ٴ)߾\0kxMW/xO.?~:IwC~uqǗ_l/?!jW=GǛ[-9؉x׻}æW?^\%+PsUbj'jϼ!ۿg8^wF浨gĉ3-8ˉvrΚѧx(l~{@k[1Rj讱z;o,] G&3`:^`'o F'ZU^O>FeKd*N; n/> $AWl M3~WuMkЍC>!N ތKvcgp:T{l5&&)ߩpOӮs79_5gըvz z= ? sYi^l_g=ukSuM_|r[y5hoxgǛ|qyL1sb^n|a3<9cy?? SNuk@o:|䧓|rOְlsT=fio_*-vH$v0u{2kn=aOm͵o Ⲟg6L4+'|픗A}T^w^'̿e}@?@u[[-agpJρۭnulw;iρ݋{l8tNS;4 3qrh9q/nqȗ07{.opzz{4|/՟y6 yg~-82חݿUL^_ޟ!]'M%;-_{ [19-N/|kOߞK+!'C9gzJzs]J\эrE;3{b?qoN]S>7Lio^S6C=+uw&`ñ:qC5pq'o׈8';I] 4s/ npD3V|W_׾v˖O?\?1/%Qaݜ#M׃ F721oʗ;1#Vi=9͓39|-`N=꥚jBN@g?]_$WbKb3?׶#^yRNp|8Ty=nbϳgì+M~쑚4 hNO)sۛjuOkNK}FG>6Ox018㇙H}^ o^]R}v8a\ZmWS}2r#?<_gbF{N$#9o/9kWk;ο}{rfKoWY^<|mt&.{/^h;l>[p})73V|8 5vNpκpk9gs<3@3\k_hF59]^A\-6 N|߯Ę~2u| flxY=NNz=>7#z=$xotUkd֊o /7l,sg_W>9ǓNjE֡&0/2<RnWMg^nԒS0O㊇Ά/KG'Vn>~npAHg5[kr\_|V\I6W9z2N\oJ|pbOOg5vr5w %I`!bj1[t c3Oܰ40zDn9ldrm6>~ rfz*v2Z(lg^u׺%Z遢C}'̻nF5ZgƏ:OWZ1y-nu6'~GuQ*ŇXjp w6`}#k+/O.i/\_ }{eN0lb^"&`4_6_qOwֳ?9p>y>MozӶ:W8]Ϯ3QsY4'N yXK|jㅯ4ٽ p83MhyW4)'?g}L<Rn)֗zh9߾'0zW=ߗapuT:ua^|@q'iGW/,ΌX4L8uq> K3p/k_~m|2=_ 5\[#ξgepު߼r3|뢉os/2_^ "Gߤ|M?7 vC?C]rJ63|'{/~"_MQ6]0>"'?FSc̓ 38~m]ű ֐朳ᬩ=9=nqRޱYՙyʯV}3t2-z{Ùk[q=!69 ݛ\Ջ|_yH,f3'?|vw*6Z#LSNiC狏s[y0?$a]TK>;|lzˉ0O'#OSrl}-9懫xk 1X}Ñjk8ñ{K8 FLW]9 sr7`pgO|{ᆉsx|ܳjC2Cyq5nğ/?vcvwڑ=}}v@?i?9rKܽƼ;v}y۹+\h`!G0SWgLz)We~Hj-9S}hK㼏%w_N{^:↙~s1챺ZaiKiˋ'-nkŒx؋}qL]x v6|xI=% {L暐ɱ9Ĺvxҟ~r/ٟs[?L9ҎL_z0r'tw> #/Ww&~[w;='xŘgծ9W4a~` ]8[=OCGNc艙#DZSU#ߺM-F;A>y8g /O{Ӷ=\o MS;>U)Ld36smo{6u"yAqCʙ"Cu򅉛 M[ Q6ÞS^6cLNncNpG'37M88źyBGzC NBzn^lG}&D[Ѝi>S8>};|4g/=qalqe>{+7u0o1|N<\:Ý8 9D9[:Հc"|0w^[o5պg08f^/\px:_}X{A_7?򑏜8 ǝH9~~bZyF:+'Q>qN&F*_c#'S,nSI&6kmޝ*XCgW.x̭{5c1ʡ=Cu8~$Mv/n|z^C{8i2(' ~=W¥a_x)3.6Ӗa?^.}+.e_2}Z?#_>)8yծJ׸rN;[m9Y~߉|XWt>|tv&6Y_&=18g][ _)!16Y2'ظpO%k}8Tx?lπ#xH_> Z?rfl~Iς`z0VN3^jo y3<\X8R lZod+IsSE?K{n}.یƞLw`]̜|S 5#"FՂi v`sr$LjLm?ՍjΆ)bЭ5̞&FY]a7CI\b>{cJ`^8\a6c9HOp֯y|l2Ħ Wnkg7o㏃&q(S '5&^${=9GѬ/4%Z0hRߵooWO,m\3^5 ?.W-/b:ny4)~lvּI)^y4nx8=QWıgRț&6AOoG7=惇+#@6Z1 DzFׂcrW^1Yg-^xg( _x3&?ڸ3rixu=׽+gVf 5 q5?)gyo/a0׏qVKՊ?IgkS8s(Z_6yՁ#SW|հi |osQ2coXzL8wN[& IDAT|6]>η!"^|]=+uF{S/4imXyC^{<}3/݋Ĝاz旗fbqp _{ 4?'_R?pT__ϰD-v՛sU\5cgK}c #ʧmkg&>pIxgvq-O[ٚㅋWs0fGW!QӀN7OԀu]._F2mx{_Nܙzgޔ;;HQ2sg^-λQvsg\_ϳ>\$Hx{ g$.ǃ^t&%s&9w/AҸ?}4ŞYW3ic?^|;o_k'{ܳ|;ϑ{u:˝g}ҽ#)6\5M]o|;IbaʍWOĒlf׃{Ērz_\<V_{]quKs5c#mr%nf29]u׃qڭ)-Ǘ5S?N>{D/ C&Ck~O,e3\x;]}胷e;| wտ>QŧS^:zӎ/rp7〩&?{J0O![.#{p;Q-^l rSz>9㎳q>o|=&Ώ\~C:<^Xx?>'6o_.E%(1//m3ۦ.BIv 7ڼrOy>U 981xOp&3';xgn4x=8K&'_sڐ7;ዓޙӚhb8Ϙ|v:ȟbrb$&?~b>0l[jг>;~6#eCuls? RqyC݌/1p٭f?u^V祥08HzmO%84c7WGDr7x_![vrT9Yo{ \&x—>m^qշfʖ7y8` Xv ||ɏ:q矯V$6Y_xg.?E׏ڽן>𔋫Z|zH7 g+&j#ާAjo{~u䈅'&NJqzثjq=ݺsa ۙ 64{ysvmnsq{ܶW5|w|Vc]32v|VOǙwjj5`:ixk+4/ -q}mZ't羼Z-y}/.lZ/b^6Ikh=PX]5`g[5͍j^pfDe~lOٰW3I5W'=k/x[x{^7÷GM7aG\CΞoJScOa\jW?zըY3+'׺޾G?|\zoY;V'&K&/^lFlJ> aV?_b)>=ltkA8u(>\8M= gb \0r'7j„?1C}\z4a< '<=ud”+u|\1Wbz:j0]w\u-{{VZow^W\^Km7|E/o}[n%`XaF^C'C 9^~ԑ8\`KjS\Fg |a1oafz)M/.+Uoj!ϰoձY~·lx<޿9E\-ٶn\dCod1}V>GqΜkt;i>xyIri5{ݏ :FO w?Ioe9;/ 9gjt&^þ]qieo]R;3[z'jK1:㽾峉a߀uڟ8֞qാ3VℭkW~pg:q)b sH懙'n:?z87=8б_0#L߸\*WY.IsxqwNZ_j;0W# _vz$g8B7o6j˛yī]^Cusg^\sO~Tm\o}ހ;G^p'l|`q3MQpFaq+syVs<vv&'&>?D֋'^_z+,7[],?|=Fo=irƭw?9ժj 9xo=f7~!{*ֵ}A(y _//=׾a_Oʧv! _c5\.Xf^.%raR yޯfXAMfY~9\</0c|餺칺{,!~*9kٳT8)ne>9Q2Wli"Vp5p /c歹cGS1I|4\ՊS|a]ǎIoE<x)K#nN7Cē4?oP~i1B_gYo|GI|aዧg|v{Z=F|qUnWG#5/zm-AW!=AE'7ki{V|mfׇxyhϱٱ8gx8&oOӍ-xN5[[YMo<)Oq xh^mFœ-x|s/w޽@UţxV%~iGC;2FA`mPPضFFcA; :" UūP~lV)4b9:s97Z{9泯Ά$qgY) ls˹#LfJ5w_ {83zGlySÎ'꛳m_ūe+Vsյg}Hfpiqa&Gk懭xB'l#g47pՋ_tqqKXژ/s}Y쑏jϼͼO's^>lp~܉鋋6Q^Ά0aXsW_tʛ=勧XpL_vZMoG`08./<s޲q$`3`'/O:;t+g={U[MѺi27Ƽj^R~>8`\98"[ϫ%/'?4xyC'FqysX~~kyЃ)i/x 6Yo,Ӂa[Om_:CL°*suz1L>0tҰ:0xxaEÒ6Y]lrNL6-gʞXzs k˩Gz$Wo˧g:$O/-{G. yN:LJ[8n~Z0)/C{^枙__sbT>W>fjNo㟣/ߛ<3OopiG7%׷0S>uI8dzk,綎dgh׌')_\g_~Kð:|W|Pjv<ê!=C}0|4C9|&-n!֘ xح- _0DnH lj&|qڷ'Պ|>k_}%/~ ڬss]O/>(܋_ Cn9gS/\^-\pr{ks:tVN%5q)ݹ/s52\ُ/-yj!rkM>fd-W=ZvK:Ku'\ awñb>$Ү cNֽ9/r̵b:`:c0L<4^8k%ޚ[;w:[(']×[}\ /O,u=w-luѸ[[//NSko/<kN><[4ܔNޮ91׶糆|fKsY+<{tu7m[s{N08Zy?\khoaSp،_glg&},M<8Rkӧ9?_qɝGښ8۷08i>]rӬWjy=}~⯯yȿЇ>ti7 w/~{Sh!~;;__g<[xS){ׅp &t"&aށ\vScc'åN>fݘ|E<1H=7s\{6ꓙnCl=`MoqΏlbnKW|&3#?^8^xι|0|j~k/ah&kW哰sFq„3&/0kj-{k䏏v΍|a|raՃ`KS/jV+]i9I6ΝQ/rZhX5`[ ?_ϘbtˏL=iNo1~yz>{&zD>[;^plj˞ޚ̜z+>y]i[M_x':dWt>=lٯnڮ~e_ek_O~~u3?3k^mԧ>5 17? W&[5&<8ʳ$?ꗿ|?%nz,9y88Ig ̝7ؽǗ(9~Q+>gF8bSSᇃ Oݰ\a֗c>aXZ|rHp]s~s]w1kqcÏG}ˏgA^)߼!n=8Wyl91o-p#i!paj'q7y6U}U뻾k{CAlb^ ?˃o|mm/l~<&?0/+=n{_e/{ٖC{Owi1? /AI7.">yC<ա0D^.'z{n8fNgO܋R덓^xT`g=g:?=}l5{r +gW|aOwMh()6{kܴx#nSq;;f>SʩGu]]<7G=S.^8ʉG/1/?-NrSagL>̊B<~/[+| }W5a w%/¥zbU= s/ժ7sODa&w&?'m}G۾ϗo.۞ÎZ˿˟gZ|ӛ޴~[oos]?!ًty>(9 Ym_q}·oƢ>vXz)o7Ѽf~y1k^^ӽN?ltC{[<۹ S`Ξz5It4|g|Zo9]]]}o|7lt/ы='O5yo/s> //?{Kșs>sC>{O`Iy C/COqLzP Gw>|)aKٳ&&Чݗj>ay>3G8qvai$m2ԧ_ϼVokG'I9+j_njm;[>#YxJ?Z^җ.}c_?'p6wb~oo%/Z_<ۿ}{PD?YN8OatX;S$D ܰxbyzLgR9:3-7߼vO!#}Qx͹"zv #^Nq =swm^5za˼3\wx_$+TѰs}/G<ڧ K&KqڨtnG ;eðŭYcO<&ji.뵠5‰(6  ߜ:[\nbCۺZoǪ*?|zՏ ;P_qr|qVÜWuD\_'7' >+ om8?@1ͽw#>|.=d=W6,u89NY#;{{ٺ8W5[nwq:<#?u{f>;̟؛8`1y~>IOZ~<קhK^| {|2-O]W!љ3D9XsJw`΂X394˃'Cg˓:ʝfD)\/uq:Zkxk3?|_!O vrMϽk/gfgi8Ug{w~Z?|rф/?bllA/Nw#5箉:eD]o}brzY$r5OONv7ON!7 ~V8 ;Lxqoo ޜ/8z &ti jЭCFaQKkGAyz/F5In#OK}^ʏ#?{c7ħ<)Afr|{jy߷7,\rɉ@sأI7}}ǟτt]s6 ng"\;l_ӹ%͋U>èY->u1z&sqk×V3[}=uaI¼˧V3?Ր;<N _ƛ',>q5kLå˱ 'N68fI2Eoa˻o][Aߣ˻xo-UW|:oèQswˍn|m_o?' ܃9jv=voln:l8µLlvܰ;3Y8i=;uHxOZskۜǿM7yM}a> =̋XM +Yk5ڇSzGPzN9P|:~K| >;ǣÆO cnuؒ/F50l}jO;Ήgg7&&϶|طh"Úߕ[>q:D.!'f戇Ϧ6qt0̧g=ns/GD͸ㄹ&^n'ӇkU#OsOn*6{ˇ}Txxv{6z!clEd/N|?ߩ$ |⡓|ÙO.W0/T?[=7v=OtR̼ފ}޴'~ocCɛ=\o{ͼl5ҵ:(MʣC'bz&\6d*N'Ӥ{yW >;ιن'aS5۱6^ɳa枚7;)|O;糾}[s_z|#NQ9]; GsdfeiMxI0r鉏#],]n5Z̉o皊F9gť WpSRO{y5a-᪻ ]-}>_y]/z0Zs^ǝœTߥo~x{vuuf瞷<;s}\L쫯ҺF?uwyr \~ןLaD9VcVXMB| 쾄gnkո6穰6cf|3ƶOZ[}ឃ,ps?O|qupyk7`xx[Xς$6xs8Zi<'bqOj7;h!V0i{i}\ݼ?oNֺ7qLC?aWXv,{'bL+V~'9$!6;y7qa;?|[0| Z7 Cfˆ/#!6Y 0Şkv2}lyhpaJ=B{mq߬>4=O8t8>g8/ahҽ#)_m>}ϼQ 1琿qÚ#9q0s#4<.Rz?އw+=KQLzSg/h]o6m1bڜt6hc-v׻w3[n G!!p0d|8f}o>59Z'^aib歑 7}'\F.|kgmI-fnL.yx1oZ>X_"Y{m|On%V~SO"˓t}/'빳}msM1{V~vg.ܹmr/աcNcnķ.9H|ӏ7\/5gw陃 otHx:Hz1]?X?Wz<=zL~>mKQuN>et^4;.tkY0䎧gPB67'L Þ)g[dX.!Ao9n lEi- SQ\N`#[ro MO5Un՟7cz]‡a_LLJ[^5g/|glC;rzb?W=Y Lŏ'W>>6{>|p}W`ܗW]u7٣sw[zG&^˖_~O-W\ޟكo_5ט:>f>{3O\5zta};QaqS>?kދ|+nӈzD85 cx1秽ї8oxw<X|p0z7/r&#{9tċ?%em.~8[{݁[G+<}/3õx|z8rþŦԅBgᢇc)V-x RZWsbtt$|XsW(M飰|r=3O@7\ϔLjͭT5 O?]֭N6]nxZNpfon9b-^|g7ɋkj7^KʛX~|$ɯp#jh>9&q9̏ro^9jY] t_Ntxٸg9~myV:{Wbps>~5|x;{܀3Wlɋ?XbFkcW-L;ߧũVmZp?s6ӆ5䷧l߻'_9 -ݾg@w}K~w^W˺S}.>N˛_nw߶$޶'Ӄ}ρGzh'>i}~nx)kٰ܏j 3dz[G8mi_Oπ=w&uP=sqO_|M+>O)7r+bgzB^5iJū[NyrN>a߁]wa.t K4ĝmU#-r(<XO}jrOɿqnn}^x>hxfl.%L}sf,|9}G3˼Z$5|Vܰ4Q]ϓоOqC0ZIJe$ͧt5q[x#װ7x <W+rm~Hp´0qΚ_o_qƋUGv}/O} [ɬnro&˫]/W4 gOtFq.{8pg?fjn3-WugIǙg>ǟJtokOrC5 1z>a3ռ z.^}=;:w]kBu[vv`_f)ǩ33OguŪI[?g燉ߺnSnrI|N?_Rn9bYZ@5C⏻Z5K1~f3/Y3מaZyC]g[{~$׫:x-,>kOX86~e/wwr;ޱw~=w?qkYE~bC=xF?xzu탾^/t'&O5~E/x{g/[Sg 둮\86_[[\g)|>5/FUayuL\!fMV՛5kELAvρ3?bպ k,V},߿KMfWM>v||4)'>ȩ{X|ľzκQ\=o F|#\Ğt{O3.|8t\D*|7<@-A2\y;_ui~9KLq0bjt͉c3 CӞ5DNsI Û~3o$[ 1s:N8ۇj&x"x}U;ɱ4[n}. gѣ!a־/pn}P=s^gfvx|{x癨cWZN_Mmiq~u϶~~o/Z/7cXcyYna_9sۋ|C,9'z#<:}׎v͍v8oZl碳'WNU#|Zz/l:WbMW+05˧*=S?ԛqw?Tokn:g5j!ί_#x ޓ׆m_`q?lxCqx}3sC%a'K~˷|,Ǿ1/߾ /O]G<1oX?w}l}G-/ɟf!X{OW=9v>mE6ME_m?yCǼuyT|.#_V= 61❹LsdW|끑CSⴁýMFdto:@Gz~T35Px'qS5ٗζxx|qr{] 'g1FMq{c[qHW0_Aē|S{b|6wfZ.Jcbp8=/b~9vûSIXow!g>{șWrO]lİq6;^9 Gw1qh0Hiy$oZ Wn5&g|$qҳs=狻^ "9lբ?\쓯yz1vqgޜI\sg5hmQ/',:>\c٤zfSg֭=%W{g8oI9S'/̱̓_A%6uz@kM='f\+agC7뉆%lk F܇`cɬ\\m}zՐg50q:OK|[3g87)u\{6>׹ J.-_lϯFvoMlO}Hf?rL._o{ 9qnsÉZD< ab`fo_zg]v3hyZ۬?q[Ax|(<RĿ^󏟶\=Wcaoy6K^ tX9_p[|~Nn_ϵ;c+/l))ޜٴ&3-{>;wL_{}םk?{k}nٽY={;N;ρIuo}ʫ8`dx=Xx=3_+,>7pVЭ˞tqM~6@G=3W^s^rҰrFv/g>+^1I~'.ni&>#Kg ۼ`}R;\׌X?0o]4L{:Ŗzy$]NW/?3aW׺ʗż7'7uSv͙{&?ET g׽z}Оl~x=RG IDATO+u/<:zK3Nb S #Wv3y}=:U=X9yGË1ٟy㭟p`V{Nܸz-[[Bpٸnk/=i[ס0xu^ZfjO?üw{/;6^L~k _ՊU~86m~/M{ ^՛5ջ={9|-jN_ݫ׽3>XCX~>L,Nf.geb5F/zkҰH`KK`b^oK[0z?r.:]|"-eb=ۼn)3g ©E&<:|71ŋO7U܍o9݌^Mg!-^<DꘇWx|ŕm̜Ka]W]>rHKq lOHyly椞ٰ'X^FzFw]7sr&6d^׀z6 y&?;گ F~ky%8&1kb.>Guͺ^V}x6o3~Wںc^0=Kqx3_l$|ׁ?_bSeӭ\_(w. Gpcpzcw-אayZ#jՓzOè\b$^gnk՜uY||' {*2kuHLחzF;9 mgљՇ5c0 js>P;||ߒ/Θ)b^ȁD.?t}ׯ!}HZ?Cqa7[ÞZF38š6{Z.֭!\sM.ti-3/4\WoVOSOls93z'_i7rg}r/[x~q,g+}rǯ_\zх[Լx{M:@o$k/b0ƨog-_>=8'x:oVmq^8a]KkMo΅9'w)aOb41zȷWn93n}ɧn \π~u=~/O-M~VC}ƒvmrwrmnq|ɿj"^N8뵵͵5*wHgY.O=i46^/?5a ns/'߉OSeXCy5i>yaR >^*;-Wo^dZWu5d 7딿)'Nx=Ɠə=kwY݀E:i9jO[ǜo9:lqX=&{_nq8K8~8x9?Uw_>.gYa޿~wV\Pꚷ줵 9Sኵ{~1jGkNOlӞ뭽=?>^Ӧڛv93?[6*6pIנy9t8XSo߼^J屮q//㬟snqk~g%9Wלym>tiu>–Ke<˜'1ީ g>컖;E E7w.!d总1 W%g$ ;2r-NZ~Ը9\yO<;SóӼ $N/_St>zMw67\:1߼DoW?zrI\kO\PMko/1sz7\IQ'?<9B?N6p՘ 3?k/{jaWi^gn^ WWq}6wXW\iyR4\\m ^pUgxf?qtmձSSz238˕^yqQ5 ?li0 >;^~cO*|񉛯~/^.y>:j5_Mnm\9d.&6c‡u륽2S-;{k W]\M|jq88 i8Z^Fvp3V/ߚf?Č՟Q_=xrpȳ{6kޱj}oo}r{._>o+rᅵ/xԣ_Wj{MAW^?H\;Oʞ~u$zh?!i vπ{%|\̰7btb05,jˎy˦U϶>a5x(  >?EC\]R-CJסdO 39g^.9f0˫az1S:D_c~Hԫoj̧}o\$>|I>f6 hR\|0G`،#hOquf-zS?p}߰Տ6jkz"/KSo=?n n=5s{6q}PZf i]_+n_~949#>^Wz8{io}աjf3W!к7EMD:4:-OoFlg亽]Vz'ٝ-X?iNO7Αyy`U6lSʛ>v=Tckxp%2g5GO{Y pK:j_^U&p ϯpG_&.a6/[70{;U⽄Ә}q>W+1'tk40X .gW 7~F7w-7[__.ER_TWFbstD3&q=%IQ_Fi/qX 9`|g XB!2XF,+Wq`K֞{Z/L㴟4mzՋnwVӭGU_KX|NeO.~_g7yrkhI?E,> +~ȳπM1g5w٤^4op8\$&zN×3te;{y4b/F⌿gycY'-W$ꤵzn78e 8xq:YS)Nr"=żO^FoC5nb$|я5 {ᓿ\׬15}2}㯗=UOb T:{})?x2HqHNkˡaq͜p񩳏nZrfF|;;s3omj|ЛhcC5aSZ֬z^x2yn@g#*Bw湁=|9> K}0ӏ9IE{2I֥>j0fwĉ>䋿[mq_1yՀ7p|~3G-8ZN7ץ0ՋϼrZ/aOȯ~ 5zS54iٳwCCxv?]>c~}|o\k/Z~ݫ׿s妗e9k7_.^v.o}uݳK^znի=C2<*[?7obըd|jŊㄣ{f`!OOOc792yk?h|񳭱q7kn8>#Y! )_La[hq[K=;o1sCf7[r2{dznOɞs9'J\OoiAjiuq1g!iK¡_uӰoNWú$OCt'A.^\.?]xC(?Vǜ<3wr릝5;<_9~"#ȭV~jW+T7jðëӘ8pqŕ_r%oJO9c՟>4VCK3{k졵w&Rn=K8z [_N5bǞ3qY{P`_Zo1Opyc3Ϧ= =GKSZyU,?l2+^_8KN=;g$1C WyH3<|>3zgȧ &O^iqˆY\ q?{)YH&0Fmp%5Hyi0;#'=Vjèe>tC&/<1]=1\r #0Ō~Ź_g8>a iz'_NޚO¦oIHkOU& kھ`fA{+޽uٖǿo.oʇ,.˻Ev{kf|䣖_˛5'VK J~zͼ٭MbsίׁLdt"br>`F>ox:W\ތ#,f +';0W5<ͼ|zp>;oz '֛8>wu[X5ˡէðqOnNCJ.R0'\6)'}{k=svx2ܽt:f~9'fe-ðeW'XgN=fR,rF7~m9{8TTܳ'9k3f_Gǧ]mgOwSm3uJ;y4tc;r:Ձ+'|ⰉGQYW-9?7k罉'zaϟps+/_|q3ǡzퟚ3\ߡx}|?,}Xr.gaO|v\<ߴ ozι臗A!ˇ?,p?qyr|r;mݚ /HN_ֿ]o{[}}æub רƩ'y|Zyρ{>s{_$sKNlR#~^NNx~}qȜ`ػCGͰ󛻮=żh~xR69>'nbyqZl5^I6V:_{+Q? c8_^zS?o麱px>~vj\4tcyv䑴ǞU6qq1ou6a[-|?z=.g >& k,/TSZ{ة㗟8CS&6_}^uK>է5{^[h/:bX\p%YD/ խn}2W`>c݀Q˾G85Ix$ٝ=YS=꿾,/Qy l8†7npT`3rށk{ y|uy%ٸUoSw/\S]>ܾ'x_x=G}בx =oEppwa{3Xuq} >sH{G0(_f瞻nyaKzӯ5˺Ac6XSk䛵O5ړ` s+39ˍtɼ.W?NX~-0_?UR|剫MޜD_ ۙ߳2J.w~ 9ͧf\ig~ꢋu<ݵ.Fr͸Zs-Ys9#sOZsy\%t'.OXfl4k|k<ͯuOs=o^cR8øfﰸ8 ~䣖O$i-j_{7aur_yCo7w6}h}7g?7grfyթ^mԔ߾_?/6b`Iv{5qb\Ց}rkk8j;7a1 iٚCpt嫾e׬QsO:SAz^<密ˁg'11jvcru>i;RϱXZđ_hk:|ދ_.~ٵYYҾJWuFt?ív/lzYg/7ֹ獠]sqY/b^q[3|S#6ljS_1+}3 GgI欐/rVd2iCIzٴpd/_sp?\q|SĈ&ti͸>4%aٟ6Gbg]l7x|gA03t0Kx:4R~뗯\0׾Zg>qo\0^>` ,f歎j'>-kh7o8ڱnI54jqa)4?>c_ {X=;13oW!#<%ߌZ9{Ɖ5IgVcjihO_y]oҞ\uzx&'S5]m[uCOdfo/؛jת^+/;>ĉ>;q5/GuNp7O1?j՟R~29ϼqX??{@]s?~;7<ű\ųv}C:g>Fb6}v嘒/[5+_~zO[y߀/ϴ9H``ƖZ+/g p!)g}.sOg#.80|lo. yOxsg'εio±I55~s{ N OELp8ϼj#U~65|000MSߡ)ox&8xKЍ-bZj䉃yWLZ.|qs<3okO<\iOWA/ċ-ѳ#}T3n7ԑ>|u'Ćثmƨ4iu j[s #Z5GOtim/fל/bZSs!ƭoҭO&oT']=q[: Y۬ ^Ո? ~s'ΚM〱vt*_s/ָxָKn\=u\`_:_ה֨Lsh9ZL«3_!&{tgOl^_W?J<TGWTOX98:k0Wu8hy:T-zz^}ޕ?OY/bՐT{@斍}Y\0eS|}rSaIg쇃[5?-&TxrO^qpG30k#ƞZxb]k5a;~r}'˟|ByӖ//yֳԻ:~_7[ns{--w<ϖozЃ_,?n};r65{׸P94xCg:\bw٨وՋC}8;[4^xM#aU,_6qƱ1ӛsWr''bu[|d_Aug 'U䪶icG}<10mƇI5k䫶a•4`W7[<ŲU[X:.v\3fq—U=,86{tОذfV^uvO'!88ye?Ӝ[p͹.\OcI.}lpDغ/?)ΖX~`Ov2|8Sph}gSS3rg5ԺqLV3|8 ~ 2͘aH_\N|DL, GrOb[3?_qηZꯖj{ǛWo|qVi|xxcؓj§˸ܙST_sD-xڔ|lf.>?#k _h򵯽ovƏ?|Q\@y=9/q-Y=?|zμhg?gᄐtLx}UsYO#bwO[n}o^^Zn|;.x_-׹-^叞g{O_bs }?ߵ9yع藷Ɲ7 Z֥غ_ k}6>[ͽğ%̹ǟO-lown5뢵ﮩ֦\gΪ L4$=M盱05l0d囼03˗>' M^RaToprftq#rWWb}.gaRZ5;eS_i=R8ؚs&H\lbdw:l▷c#N66l{^e+Wmr7!]+O?Dık5[|q|ώ=q>\}y\$3w>9= -I{>hW8=#+ujO@a ~~|NIXui6G#\pk(>c~߯iD5kmiZT19mbqN>gv/](54W\||EgWuO9qs$k)'<[^-ûg&c<>z?Y~[?|=/.G7˽}߽۟9~=I?1Ad mZll8&am–qdKKn ) frVzEϓzRٚ;n\ ;us)z-^33>[ﳼ-o^D~y"M˫wȷg7r]{O^nt;-W7~W<ًW=y˵ov}/9Bw-Ŗˣ~闗yyw~IRpV{ѯ95u3-i5CıxyrWZL18a7W@k7ng|J sw@6T,1L:(;(:W1Tf džah VLE#%{sYɯֈ< O>}E>᛼WG.r`}(:;P%\yQ3K8?~\8)f\x]_,f,V#ӎӚǓf'ی-'~/Xz'W}gkҞ[oYdmo‏C89?7XZmũje Kg+?n}HZ3s{Γ:uwғCj0p||s⢝SN9e9m0r-ks(33 [V> vZ SL\5\ƽoO<>װ| 9تV:}SllbwLΞ+>:SL< \Z cבq}'ΑXY1a±8({U1ZգU_ :-= [4[zMmbo.Vgcqĸ9qj:3ɇsߊOu6HC_a&ͱX= g@9w uN$mp03[-'}hy'->-Ŕcl}?] Y^VlbC}֣kĚ96s!3Nk']8e7M- rϹ K#]iYH77x\ְzc f\ 6kLk9s?_8nk _hf ^;_|r՛bEoXߑw;߱/Znx/'1Ր}7/N:m=KXmMӼnzqkc/R06m 6 ",}P-8$OCFOY3Haf8A4܉qbag5?3i{'{}nrYk2a?g:6NH|)?Z6m։t*~7W0Uc&6V41G_ZÓӳ} 8\rcjn̷uM>8DoVo|s=8`41i>߬WN?aF3~xki{Dn1{q g+FN$l^דGO6|:<ٜ/EɃ?gom|W~-6}9G:'b Rka]p9ת)cr[3e6Lghyq&6nT3?.t/Z?+^a9ef.>ri˟=I[9S>#mlj.O})|fmzW\7vR|t osNϺ޽<\G..qmpzւ:أL^o.c<0\k§s IDAT_4Vc?gs ?qQ\u'_k[_ cF뜆)&~ړ~S{x?|XR}> ~V+ۙIx^t=csoɬ8O+|7;n1=í[v][5V/twaNZ?gҵO|߸nyl\n3O|ͧW}t߷pw[r9Xq,o{5aW^|GM>4Ô#ی }mOqo<9u'y϶q;G58 ~ 3dI9!Fd/fb{<|ɞt-\l4Rncn~a֓"jk)0[SO'pl~F{1z\ƏXg6I列_2ra+-_0c_gg<3_ZO_5q]|}̱Cx!G=wySfZVWkH{YA|Z˗.1ܰ|'V?ɞb#{S&|=?:Ŧu60ì:Yj{> .Zf~}yM1q/,~k`ε>{rɫ\u:y}w5wa}w[.,Gs| }\_W՗ww^/|}炷=w[&ߛwži}7]?ȑ ^b[_zͽY_r{߷%/>[5zg=HZ6p|S>Ͻ*o㉋&/~k|V/tVd2ٓʳ6ߦ'm~`m„O8-.I{̥69-6Z[}]ƚ8N=ןmeËs6XOG1Ds2a}T>crnꂭˇy]|xWƑT+ssW&g =ٶ~΃9|&jCŵyM̖ms~prdgyboкӾK׼7q]w_m.R^E89/?F-Y ~ы^twK]jx1ϋ|\"Hnw5Q^ܒ~grWC]ͥz '8rc=*k,^cS7]88m/':gU r%3G~4R55~MߞyAc^ss{8[@gI:s&Xg'n::.Gu5z6VcgB>xrrK_fvňEh¦9䫟j "\3F~C5]7;pهmMZiI|t>6YXMvuYy{+g?uBg|{q.{k,Sn-9֏s5׽:n3Z}o}Q4~W}Y?;rn{#淭4|9s[?ښf X֓N\gWƧřG-GlAdVl>k&s@8ϫ͙`k1m}žV6M6vJ!'Pѡķ)f|t'0/yρb6X>duՇWV9k᫱1]b NboN$ߜ{r36xoڈ=yg|kz*lIls}+0ՑVg9>/O1㭆iK;ѝ78W|qhzSq/], ?8^gs,tIO;H5<:iu)_qk'E/yqkrlm>4tjlaq|˜iߘg@0eK4y|.&]}v ܭI'FF|M~lZј_.ώ? NL~\f]N6;1?l|mk[[s5CYqqh_,&ou 6~Zv|$|yjÛ/|gvsk/{|4{98|_}s~g'Ykij1n yVp7N{ q ,ZOr]|'sWr_ ͡s\<f/S$;к>eWkui1{>0\tj&y&5y9 {uVh Y)^;`s7ŽT&@)pdOg~zcf\lӃ_z_ xO!UmlH9ߌCﵽO`c`~a ]m\_ة)֚կOL9xsz|—OŤìU_spv|)la5N!OaIJ9L]Li6bo᛹Lq;eo9᩵qIoqgCn{Ckl|Oᚋ:lsߘ_zz=iqDl/6~|aSW1ir 79}x oWwzY9Ӡo[>pwU]>sы-ǯǭ>-]ߩ^nXsJ5戇t z.cK'TOt|77v5&8ˡ_0quA[7ŜržVٜP8<lyElo- P҅u5뀆 XmD.}d Fb_r4R [qo\mY1M{qY[y5xxKŴp~yoE>Zw]Blbm";ə¨ѵ/^v>kWG`}xuoSD=fXIT}b/q‡j(oMah 7>_ylV#^B/|g|gD:G`kuI+j~-?hjzqk FjTsjgڐBg+&=Olfjj6>.><lKk@Ñ0ikE'.<_İ3&ig}T:?b5y̥حsax3z:SlR~s3xIbZ7Z10aa/8>skZOq(f= O%jI_MiXs7WxՍ3$=,\mK 081G-|u؞Lj+z㡛?t>iO/kݖ,o_ǧ,lߤ{͛d9g,o{ͫw pG})oOďLg/wckO||9z9q[˩{<ڨMMsִ9p l{o0\@qxh49ï'qZRm5]g/jfW^`4YC 1 'awV~ڟՕ|H%٨6ͅAi;P8q<9`uU^.LZ7 W=傋Ф|30^ |qњ70-x}n||n$ي)X,|1_3v.Zk,bH&V}g@G%bk[pƸHd/fC𨇯Z5Y>6{gSx>b0#y ~(<]/61 ^b$1 nG.ü9OWK6ך7jS%.)Sj(.~_\y,bl%'^If|f=bsRN}r lM<9pX?/Ig.n1<˥_ZKǑWjh0Yf~ =FkbwxjVxjَYluN|[v=osTSgk3ahR86xt4֑&ո ևEuq0lp9uٚWOg\~cj7]>:9Z Wɽ_rpF<O7qa8 ~԰$=ŵ3y#K+[lScO~6N)rO>51oߍ뗳\xFUONZ JM59b48qryeO&iO*pc1zOHf}@&T3[XbZi 7g L|1li1ؽToY +6c&=^MggkVޙp tY߹c:r35ǯ`fag}3Ǿ_6yȯ_'{:|֤Wb1ɥYQ7џ1|3mқIqIG5گ8Tw5U|3^Sw8|\Ė7m_[ %R>jx\җl/y`ws=vy^\m>9?帟ezVNrr_|rʅ/v*nYq?}yIsQ_빖1_sh<8g>!51lQ_a{O5+/\gc`u{؋},qqslmi-5Ǵq5\}r`>:ǡ.nf8¸d'af.v Qfβo4KĶՔ`U ~s KMy!Z+˦ptS9": S&[\}mmbam*̙_̏g'o1`}0n;X7uWWkZ[ΘFd#2oO;}mŷv?sM뷀p#q粻+yz}qxhAX1DlZ/?]b:?oL npU{χ%$w}CikM1~y5sW6Һ2'~ oaiR6XOO[gXu:b/#ե_n/|u1_+>ts}ę0&8y_9` ιiզO%O0P}1P-P~R}= ~sg' 6g~Vkqѧg??]^ڽQx>'l s|K_\qop{SE) IDAT}~rݛ|إ/|ź79孯4>>/\c[}=\kyorғx}-~~>tywo^N\?Wg~)_:{ǝvrc,>}Yo{rk_9glYr{o/X_'Ε9YΛ9wf~6YD yvtkOK5L-&flMgy6 zi-~3q9+؋} jXfwAwxQ?ǰ%r08\a+vo/6 >MGV.~7,O(.*7<|f҇5۬~1hB3|O߷8[;I +ɕ->T]4~nod/648d/o=aKNp;}ֵ֭qb9/qՔWmT\ꖯ_tsgxc\aqT _|c:[u+ql0k^u'V^3v-pR .<6Ҟ苏 lq'rӭE5y^^Os:ygO_N=~+?{WխF|^'m [>V,-WO§ԣܷc\b!ħlp7|g'po} ?<JgG#^}Vp~=7ϮXX9\O 1x$ܖW1v?hb`wb.ƚ{Oluo{7/v&u?C_m 6udS_|{|kӜ`?.4fb&?nLa᧍gmY0a# j-WaKxc>$z߇r`S.u/\_ƓOz/N89sΗXbgcG⌧X&0|yuřV8Zc0NXWMS!֎Y S QGc5ˎ}%o}^R|x ~)ڵLeε/?\%.{*wZ؟^Wz<b/{~ayȣG'./w[<~זZ-~#ݛ:EX텾_ q~r3},wiG|^;`mN{<}Gdk<̃—-͆cx~ _ߘ& L} 0HTKrx1Z|ջ~bZq$3~)9HѳOGٛ7'A%&>l\a<03n7{04{gLdA+OVg̯Zū?4©W &OҚ&.W>\֟z/? _E.r~í0b\S'^Ӽ'm[%~OSQsOsi_QKb.rt1gGpS{6546jÝ}r;Hq-+{\g{H^ Lzβ36m;?.x?`կ}g {O6{)ǜCu 3agl58H MyTى㋋f>2g~_\^O]-g?kp/wa>Q/]>3~59gL%bklՙ-~b*o:)^b[;i?uygɞ#qd#!|pϖV[}8g 9gƞ'y\䒗xgHy0&s3&gj5g'UxAgÿ_w!|78pe+jӸx\{Xӳfy56o]WqZx7tgJd/Owocو5b_t8qkዡ>ZaL4G:'giGs^[ \t`֭:k/VxaK˓wǽs;uᚵG/-{˖xa-?'o߽Cof˻–phﲬ_ծ-{!߿vnwng<,\6\nq;-Y{&Q֤g}̛5۞k~vq7f4#]3ah$IJk57ܖpYGyٵZq/Y|ٍ[ .MV#B`}Ӿ/mrc8Ds?&oH15oCܬ85iO55x_A\-lx$́äٛ ӆgOMFgυFY+xWo !Ր?T|]xWh^ jcw_ͦ/k)L/Yvg]p1oVU%B7b^}&8q')dzXz78boj!qV1l79%޸~~>D0t6D_اT:ȗg.؉/o'_\Vc3:a<{Dcgt:^|>GyoykOi.w[?Oze5_J]~ԻO>i{7K,~=\GgYkQ:s#V3npĴntjgߋgqǮ'6S1힙/le/ws3mgx"bxgO?o\1,63/.hxt{Z7f>]N^lfbzE7[l󦷿?|q}m70'Lqܵ${K9.[5'ŤI\875_iդf[ajNGkluruӋk~ꗝlxj?h}>>>5 O/o_?ߞ1V>Fw^B'F2^Ϋ>gO^Pc_B_y=^#h~.9w~m9|_,yr^,|w]{?|9LxOiؿySoeyz{~>bYak?cKafX>tg~"lg8_t|{gH_ÖGdE?џ\LZlqkr??uX5V98 ^E1Xo닛2sfaeo_떎c͚)Mk KĉoNyc~p7Ϛ^²kqي7K; sϜiϧsOY#|ՙMǛ?W>fb65v5∛5m機O;l5u>&~_ך>y[jlaj,j S:>?.dּև8#͓Zϸ\U37ٓtZ1܈<|ޅOw/slO '>8_8&lh^T@O:{+^\.W8&iN.SgOMiWu5Uηg#V^fL9c/5иs5˙,; t<ŋ\n}?<~{-No}/t <ПoO]f|,|ˉy}o{rO/F|ԛ^Y+4T#Pfgf}Rl5.],, ućy¯UgyPaiG&y5}ͣ{^Kr.٪ V|2u1[]~ݗe4[9ϗj^.#wl8[޲a/}#kȯMK{ߋ?(>;^:6t6)jw4S^spٌ5n׈$>59dw>;TYz9~6.gy<+\~oa~EĻ7դ^5_>`?I_9o-Z?: W-n=|c][wy죗op<[G^"?sg;h}7M˛^*gB_F78yhl\\_}Ym{~g1n}l7̑mtf;S6eL[9_/0t3X73/wH"_1q:.nD#S0{NrџхM ';1;|4&թ_8oƍ_k}ab餵:=8 WˮVN?_ܭ ز?sJph]֭G˝"aԨf>6+_j6aNjMs;b >1NSc;uvVWky뺙5/N+|թa;g0rbt]\מ{@>'kMM4Y{^׽ukrgw]_OTqyoZ{?7.uKٓ^ԋZi}wzwt{\>pbWl}ks]&!m`;G^:'0ͽgg2֯f5U̓n^bG9`ÅzSOic]#q.'ߙhsUعnp}ʷ|Ögߴ_^O?۷Lo\,Y~䝿A{O>iQo]u@|x{-'\ZZ^lʹ:խgؚGu}==q奻k5Kp;۳_ߘ+/~6>n-ZOeW#[zlI8xab \NZ{qZYs־+/!:㓛V5fJ.}+.H˸<)Gq髻|d:V_x[m|0ZOa8\j.WSpdw%y#a\/>^֙'}bkC7Ypžcq8$~yqiOĄ<.HϹ#t6E5&OךCkq2x͋M|&.n<)f/j~ȨldjW, 3.xx̾|4_NbkYtÅ#~sɆޘm'x&>B狻|Y[8s3R+1^ͼ& ė~53gOiD\ףYok)n6d6 O>6^ؓpP_9ő/}<$` ,QD""VZցZ *Ƞ <'fH dN Ca.k={>{˱} O/F7 {džjǶ NPP~lNsI\1ب 7)!8m-˳5Nj7Cl%(ol&>ʷɾzy_y7ފf{xՅCjt[KёmӶk'6n=6oϯ5f$W{\z?ry츀']Ng<~v\FK'9ip|v3vwhݫjzGZ~xV>W[~d§;s\_ c/^ds[َfͮ:]ZQy]@`eospTWEa"v3'ٗU_ 1q+ƫb|bf_t|"-7ߗ7y3q\w%v5T}ogOWΛ}M⛽Lap4~6aĞ.ګN-/^Ӈm\(us'x+Oւx+#`8n|>]}6vΡo>чSg/ysoFb8s7m]r){߲}}ͷw38;^?uw^w-|[2񯟿\|y[_?|v_unS3t\y5m6&˖0n[86?y86i֫$e( IDATՏg+>ڔdzk)'6tfbطGo^޷v]3oو5 ـ ڢm㧋@⳼E pcMlŨ,&[Dug{9>|~IS<*IO:2~al3L,|Ƴ_>xEsla׎?3~񫓧r޴'/f#\5o%3fl; Mߴt_qO]Vl7LcdlǍYf%㫯ɳ]Vˌxo9FǨp*vl[sZmMb E51k2 [|'eWpuܔjAN543~|==wHv`k?9>yqg.C0ë޸-vs.o vk;kz3k8[Q7Y=~{Osz/';^>8-~g~Rvl}@^w!]{,Nj?˻_?br8_}}>} v[8.5>{'$CxuM sM~;>/dŚN4"9höXϦO6r-FMͦ.,T>\q˝}sz' gpˍƅhpq@?,; swGzOb<׼lZ8U{_e.b^Y/}7as>p9裖#DZ/ %˗w0tUyn6я>j՟ug8tq&fyvdĝ0i>C^?@6nv_K%w8@6^_1b7|A36i4l'lY,]'&ʡq'Lci*+aG>,cM sk\.?63~:|MUSч5dž+.m$nv|Q3ʯ_#C|OG_ u7jG|೫>cm涂ĭu?El.[_K뛏7"w.;qS|}A^"}wbl/U槸Bθyl3Os1G?ѫjtyp54?b]-Z7|o>ɐڛc:sߜG㶅>M[>c[xMfܜ% mZx>m{:d4;1xs'O~ʲ=c׌7>j<(瞻̓^t]n󶍋|7XA//o<s9RyUro|K^r՚V-ϵ'fn65q cv 17"5Q?arNq;:8-9 "moՕosFr9fGd#lb3s݌SՋnx_tl#r苍5F>Qql[kœ$k~_t'V>8bC1bWq1V}uV>GͻZj}Fuo{dŏ 8nهA??OF'igTNXq+̎ZX YKɊ-~Ev`#XT{yxfgyn.fqӧwg?N9qwxKa/i-Z,h/GYSr(7N|`՚#aQ6 gˮȐQ~W\rfSLXjE%7ǂG賉aQ"ؔ/xV?q\:~[>|;+ݎx.N?;^w>.x ]l/G-? >v9[SƳ\0{^?~1_~vhM};_?5֦TZqq-~;g7 67y2Q6WdV|kXqMϾZِ{cpplbj㴱"ي[?ZLEl2&+pPO_hnߊcj]~m2/[~x~sl661$`;~vEίŵp#rU5>nj,pyq5%c?o_>G63~&(}`%Fr`eGٰd|OKZN5(byI;[q%b 2q5}u8?c_tBŦ2L6{ l i]Lj)vqf{Lߗ}'Qſrr'|6"Z7Ԥf)?x|҇_П-1 ^nl<ӳxmn?x`_MMh >>cԗs O?_y>ȃƅ?Omsxa-?4;rƳ{Ÿ[ɋe]_>4'Es윏[ {:rKeaøɌQ3~dO|k_lb/U0>3ά'/.պx~闖W_--oz˖=Qwk׌ߎYۑs)9 xsM?qI˃Ƙb<:`5Go}c> ԢDž7!>:'S@9t\_q1qYr}^θ!,_bs:GmοpmBZB _ǽa㍻?.ֿ儷}}͝x/?oMI߹ԮɓPdޚ3uϤv6cgmg=_,^p|'١ v~dk6怜&M7{<_lo%uonΪYւ$ka"ihamچvGn'CZvygAԘn&bcUly=~2T)6 _0‰(_J[G OWꄓy 89 vs^hQ.a6fvǾ?ϟ-/ǭ?jl>ɚ"c}>8]\&t5c-GpG63/bŀMiLVH??k-9>`?_tlFlkli]$MD^>R.[Od^Mq+I3WF&zx&MN;9^8a_d .N̾q9d ds^d-nZgU&;6vܭw>t㎍8}-q^[[͗Z}ӫ+O>qh}هun ~$O!{dcW|P=4vdv/r1N<=_6OV>;{<9.[(fG^Ax]]hw|#Guy㹑{c|S\>qY΢77Fx׏?vUkBޚ8ku\ľ߸'=iy_ric-7:zlovYc_cuݝsn<74OkAg\钅c F^Owh`vt9q9s)Zg[_>{x }g~+7.p|ۖCv-3.3pڻ޹:>?u~vnň!6uy_kŭg>[:1qOn޵b#}68TgKf*6[vlyVbxi#Q5lٵZ*MϧE1b'yqm5ʍF)6>ZAp/<(N8bUVlp?+NHVͩ[2}LjxlaL_n8=NUKF \xϰQu釁˩\fL?^ r\c!].hkٜDgK78q6Gْc9v?y.<:Bh5wgG\K@ Ug] 5E㏸}pq^lr3r4?55;еn|}lC;л}ʝ~޸Z}5+|:*Fטߦos~o+_1#_U>ھ7i ۱yMjgcpSNUl`#<o5Ǎ.bsijŽCsqcWjG,6Y.[:wG/wO.VyO\,~w/獋.x?.`wD!I\ .;2S5WښװȢdi`̍XxɹZȋ'ߚֶ6[1'&*/kgCl;p9Ւ'凗?_!^cyQ^[u}{߻KZT N9*domk>4Ex©:n9f\vvC<^q^{KjZ#u.㢥T/O?=]uԸ ԣZ6."y=Ƕiqz9v$&y~5q7״1M=^,}P-rcˎlq[㣜!cm6$76xĶv:ߎ,1m~t;r8Pb6dZ;{loQZ@5 Mm?\}hlϹG}2g0fY~ճٮecZ`GX˿m[g/ٌ}n7= 8`_-՝/P6a4ل=CgZFПsHdrm֊1nȋ_<3Ѹ5/b·FڌZ"/l[#3fjdlblJ7tx95ȕ};:|aWef> dQ8d}hGofMGghL݌KGm-~؍%fڴm<&W֠qk }o%ҌF_oXɓo%˞|\.3gO׸J&~1t5ŋ mM᭧^s~/cySxyx`;y} ~>/*x݇9XpHfݦ}.8( IDAT漚/y1p?x]2֦gq<^>c*2j~븸m6.LpJXt.}qeq!}xI/ٸSq{c3flm Gn3\~v_/o}oGkhL0E۹~6Hm#;1@;z?6~6~p! F9gGV0\3u<ʅ>3޼s#;¦W ;26M/^_湹׊Gyۇ'r+|# >"n}fy&Y5qÜW[M~jGxFl0oڰ3?g><mHVNggr {,LƆ<_k-'8qim)'s=~F'9@r2`GMqˍ;x^#s[yVeِ~F*E0Px⩷T7t;a}8;d'~w%'O, |v0a4DV >dT{1W'?y҇(nlΊ&#~c~I9.8:yib9wOg/njQ?s59~g,zkַ/{C].Ϝw\,;d|!X;gy2E瞳b5Oaw62~F?ȹ綝g6g{]wzxH`i5L3?yyx=oO\}q=|ĸ&1,~~wQ32oW<[2;?=_2>ow._9.>W|q9wƼ|eUm,G?zٷmG4]ҵa6 X?Zktav9X|򇫱% _8?,H|=3os"פ6`jaˆ Y- cr|,*1MbNnI 88Qn1ӅUc4sv8Yᲅ˾ |jvg ;v,xa8+ WuƈV|{?{~WGq񙿀ڦa4j7g\+0ȣ0e7۔Z46& 'Y'r.Y /p9wN~Û1k<-_2$NV#97N><}\ƿY>If>|;oy[ggEi_rh}X3|ZCz3N_oKq\K?n/]t7+;Oo!\py1A@q].swEb#b:>v wư4'ܸ|QlsXMȋ 2;"b/.}ϱCY~ΡX0)/<wˏ-w`y\—n{ϋS?wbC[Ma*u;׽H#tlK.pܕz6>Vs3~|SEtrX}p|%7zj5nnٛqzozȋ g׸ ??*ܐϺf_}9[oþ9i^5Z8|[||ſߖ1-^mQ3[O?q6}[v op,yQid}~dZ$xoGa89塡rʥ|)fh|dk/shU 3~j1gʼn6˵٬}xUsc㳺qC&җ[}}NV ^9ӓ#\⍋)|֦-y sD}6۬\+OuS:l͋_sg5Sk97q^~ϼN_B в^lk<{_9w./<~ ~\{ԏ ~{޺ᷟ5[qGm_>x>xǡlW->ka5wapk(8վmm'+,?svxg͸!-}sOO=]5~ܟZ/0F:c\p/x)qǑ\^<.Jt{6㧖 t.c!RE;6lEh22O^'v|;e91aidqd땷1;CWnhfѧ+7ᑙtlQ_#,u>0(rg}^qWΏ ӌK'>Yr"~m_?D5|ɐꀟM2ջ_G6\͵s3lrai]:? Ac^_tk͵K>|_>ٳWXטl秱3Cf^jmt0~ R><\XV͉>?>j)9o^O\ um\>b|`c'yW~Bo[xä x掍Z5N~a[>Ӹuo!cvWSq9ᕿ\ᰍύn`gK_+.3s~ޖTb{cAkz!k}AY'zg{8l/r+oJ{,' ( qּʵ:ʿˑ-aG!3,q'pX䖭c~X#aŎWpN\bdS(?r44bK/w1j 7FÞa/ y+nzai+cx9Wy// m'qޝ {nO6~rxʸqX{h ~z]e3gzY0x<P=_w~g; !wxy{Xԧdz_7,94cիہ\Zu% F@&;ft^;lT=Rdёg}}\ˏmNfU1aZGxޟ-?k|^e۶^q|{̸?yrc mEC>3J-7/8m\ޱ&0~&|/W|/>x}ݨ:qԠ?/0Mݤ ']3gsz֊ L>txNãDž91z\c9S;;E4?_ߣZsxsj |)lSnl;XH<\W>svΧt8\7 .[6sۜq~mC|f~oOfW/yD1smrc?߱:|H ^8Ŧ>|}6AVbo̗^mͳ1|Anꛎ7<.2/y~.528h%;m򋧓|hЧ۔m%n)nťkϼ̾l[+o.ΛmZ;3'o tad*v~$ˎu7cy7q4$Z{{Vg={q7%ѻcƳw.Ǐ7?oָ֋{?/<Yuէ~ʭzٔzŅ ,g `Ւeؚ/#~_ʞM Vs`;BA_nj^\ܬqp71\˝=g{ⓖdz:."Hnj xqĨ'o`c'y?sv 3sÿ_~r uqAߡwܙw;8·Vw-.<پ-m?xx[3np q.?=}l!-.]r޹{lI>iux8Ξ:~^٦ͻ~5`Ø q?}ɸW?po>\/Vw?r#\q ?ǎ7.?gx W/񼾛uqqˁ%'-9 b9x|'83SV/|uvjsu.H6 59᭎;}͍vk(N<֧#l+9;9.M_8tu٧ňZ;'o[!.m!ZmͨEn>0b!kn:-w/lO;NĞN޳-%;}X5v_txM|k8Cs't[=9i33[s߸atl\|K<>|Em?VbB ×> T޸Z#$‹UW|N~t儛3~sǜ9m߼}eCVKGOh&YN&IWoWf]8ٰ<9vB7^m GtQyXьŦK9;r-۰wa'sw^7axeȱم>̓ˍ o!E_?c ],篩X?Y~Tnleߨ/}-j.y.Λ۵}϶57Fҵg]3qk,~꧖ź;wY= ƅw#/2?m{x N#s>7^sgbw.JziG\< ?|֥On3Ǝ5O>SsT~tad铭ʝ=^|l$rL/ȋ|뫽oL}9s-Fitdl_Y~W~erE;}c?rxB>5dǾt>;";oֵ"~.ɣKmr#k|IYck91n'>ۙM:Z9nٗ/xXMxŶ [雛oطŬm.6 ngB-a҇i1, <³C_9'/|kˮrC:hr;t!ӟyw2S_w)7rZQ8?\~yΟ]Q)60o@\)f,n 7Z}8VՓ <dptܭsѵGp>A.5{#_4a&_H/714qqk~Vt4fyTWf#7WΗm<[m~l7W`W7bט9w3qe۸9"O_c6m W{CGa$ǭ}E[} .s{ǿzvrUpa!ugLNY A$ʺ#lykr,y鋫O wɞ|>a߁{9Dg V'ݶ|yե^>^P IDAT\ŮrkޚVt0[aRKs$va~":De/r>ٰ +\2MM5{yem-hdK[qڎb0?Us/g]Ϭ?gxi7YKqA?e^vx G{0 ~Zfj֩q|޹ ՙqgI~SyяĪ5d(v~9+ϺlM}/V9͸0a6ͱ1jk˯HΧpti{]|N?|o_'ߑ;閷͸`.Y]N7mAt{\x:OtGsW+~۾9/_2o\l9~r;W68g㹐o}KS3[T=[mf Fmy<׿~y)ow=q[7zxq&QS=&W?gmGN7.oĸ;Iֹ98}զoMڞm/[C0-vWt5j~ 0>1 '|j?`T L&n5#ԉm9yQ՟k_ G~7Ǟs}VG;)ό]YrSzr C<+r˓9l[qїW6VgO۹7>ٔ.ai.lW.̨:>{rџmmmo1XUf-u<9?>rjnoe/{zrFಙcȉ3Ǭ`{_[:]~O\c[݂o?ذe%#} Z 8-lxW=0Kx9ld?ەcv)W/9 ۤfSk|͝k~ej[Oۏ;شp,/cx`{qc{rNw{[xԣOzo7~׏g=Q˛Oܞ0qϋZØK9!uoQgk怏:n͵2|h)<ҟcl;<;ʳZ6cI϶oEөU8D33S#~3ǜa'˷pqOɽFx*|u-Zc-}etO_,'|¾㭢8o={QO.|>k}ε:W-j]8lPuӷMm3{6~^cFdq~5X8=bdKQ^1[}܋]|Oic[tձ̓mKz6ʱnA/ˁ/_D?ǹ`{ҧ.GoQGرym-׈ۗmkƭMuێG˥o^^~z -xIܐ|+@9^q񓛸l56bG"2d"2T=W>=ٷeǯ| G Įx/r x7퓗co5Fѯ46X 4md~;e G-}EE`bhw,A8f'n!˿@egFٮ'?'_C_Mh!U1>Ea>a'dAK\ v~Gkb5֎獷9vuIyyɱu%lxͱZs'[8rїOq8,63`#6bG߱v?w#rЬy f<cY.O<ĪwLsc˱}Tj@̖^g >sD؅^^jKN,_}mH6So6#/\b>kM=Lc}Kl>͹4k??^`v1]Z}ˍ;O/_z.׾ek_>^0s;/^vŲמ]~O,O?ᄫzY.ԠjIYq/sB>9.>m?L&1S.CxZĝc:7 R{}jyxl%C8,/rGmyn^W":w;eyV9>q֙;si3',oYXU>̡fkuQLMc,2|/0N[mkqa9G<Eߺc9`x%6 sA9 <v y[V/0'& OHFM~_~s| }XŢ'KW՟}W>|&kDk{5"kF-E_k5nUbjϋ h '>=[<}9!;3vٮl+ ߨ|o!yv8&:nEeďĚ)6drΆ_vjtW\'MsvSƇk|8\x?&~4}IMGK/T~P9.1<\coqofL>埾µƊ~In68yGl?V7q0[Ƴqyh|y˸uC~s'1-"og3cAĦ\0g\rWx'g]5j>42x3Y֜H:Y97C|NgC/vX|kҟq=GآYW>s7+μ\I[6mvy3`ߘkkl#ZиNj=,Wc7~ϲϟ6Xiw,ɷW!VT5g⫶bl/njBկ/f?/|I'q#fuy]ѥg]q+Fsc-ә|=݌g\+Ozrz%fU0}:1N,f5ifstrJx>>=Ǎ׻л]p/nݎyl/(␻-{ȑx][w/o=hݥwy_X0v6XsI:GDz'x՟\}bϜP=Q7Oa.a _\^=\0ǖ?}(ԇ}vw/Cfp(݈Dݐ}g [_qd'aOrpg4\׾4QW'k3KigƳ'?%p/}љ 1YgΧvНk9'}@/Ec׻rK\S7_ggr/m߁z/ǀ߼ַ^^.w#~}s~5i=z%aح!G8qpa6;/ 9{p|lcZ=O5w_[ka;qY{ f3s9ߩ|tǧ_J']r׿zֿ޼~-\/_YnUg.;//?~_j7n]z殯u=Ww?.kJWޯe$7|={oǯ7W:׮~ԁ!8Ѱmy͋S2[5ag{cW[ #W^kOCXȿ(ԇ}.Ca;&ÑO^ 8$>6N&?|8o[=s뭇Z9eՍO~=wSgO[pK^}6Ik&֘=^Mf[#K5i}uZ7><FMK'r~'cح•_`G%NZ=yra:] &ɁxibL55[y{[/ KW9ͷ|zcR> D䳝[a8u[~"]7T9ץqW[[iÇ'L O{?|2bթo`h5pu?sxՋ_~{U=x{^xoanQ אzP;|s֝#/;_a;w=j=4yZ/!͌ο^f=.tg'?Wiܭ\M]o{]o˧|7:Cʜݼ4w}֒g9|8~[nt?{onvw^]wΫ\T_q~P돖x_c^~׽_>{yS|#|=g['qf?["^^!Ar IDAT7^Tx<'=1}Vcg^4S<_,]l^wO;$rqQxag<3u_~W[>߹\oiZ? ww[]8aկS~xo$;zKԷ&g7# 8UhI83|xCS]]u˾A:`TC6kߍ;oW|/B /F[Ksn-襚4T?{sCr'f^kvX|Y#_t(kVcu-IXXwR^~'gm-t+gb:r9Oʣ=%νy75Ѹls?ijUr/ >=}=;_5Ӈ/|9 x@X9p#>=L.|z~ѣU+M =hO>[n;{~qxR^9͋a޵ v:3/ӾNlC㑫gi19bΌ9Os>IݙgVg:lt5a].לMfgkbwLI\źg͉ &Pj58Z_s}Y'l|S~qGrۏOCZ v>~wBdyV>yџG3_-׼w _vU|8>w-W/\0_X/,Y?voz'u/R+>쳆)Ukt-=OuO ^Q>|/;\?ܩ˟i-3voaϚzp}_qoZWXUroky]eO[ڏ~_-c?8˖_^_ing8Ҝ29 u2G4#.W6ju͵W[/$q8pՌ[^G\#21xً<4XdxP6)>{xخIg{Kgw=?-_jTϨqn.FĉMԣUր)>W49|?s`t{Pi/Ϟ[P'nnX{O48[+ܣD.ok'Φ;+ζyzgs zӏVG}ca0g}8XtxO]4qr<[i\t9pxq̹|t<u~dD Owgy}+\a{>;덛Mp-#V?z?Għk\'vKv^lč3HݾfΉLCOn::z7s]׷N;+= Ĝw"f?uêϹ ›'兡K"9gӭǽYrဧS8af1}Wՠ_,c_ }ktuߨN!,rz_W`Ա=G=_Ѿ Dj9חzZp{.O{u#x%ڸ n[ߺp@Suz/X!hJ_[˯Ŀ^E׽GxAwwm] 54ںy}r}7z^3TNM㉳Nx~~AÉ3zs1G6o/wM˷Z胾O_?{r#s/y̫^uY%RP|rUt._~UQZ𛿹[e~[:z`{sx{gm$b귿~4#t='\?.œ3),Qʩ.ՅbO< φw`:Kfsx9rI5*puq /n7?`/fˬe.yKd}ióY>1 .9FRg="]7upȃc?{~\>`Isbx+z,MW}돞`I]޾xy-ͳu]hצ&OL_DQ-pR=%|qL=|#z1?CÉk8s{ag/٠U箥7$7\ʅ&VM=W|Glb/y`i5=-'pi6oaf^5qORO㴏\}^Џu4qʟIp<)㏯hI;'SMg}yr&V? 繒_~3Ʊg߇\9x^>>Z^!~|{G+~)p6z|͆=Tsa~w~iYnۘνn|8a'>3 { %~ڿNKT?__v]~k{O;=kg] o\o\~_R!Swk~|>Y?Y[+_#D ]kc[5f~{˗G/b|#<6DO՞Lx󽏿|61oY4]Xl\Ջz߷+w}.Ͽ浖yr|{vƙ[^F\z_ްo^?خ?Vwry޺ v_o b]k^ה z Kz aH?rZó`Ir8%=+>j$Ś-V|OgINo㨮%&}(NA4߹'[A?0 t$_; ˞C9j9d2N7I{0r8=cgNNTCC=܂G/hόa읇bRՌ^5O=G:tbo]׍3q Ύ?kÅ~ޫ5{qFʣ{(ӚfOFאþҺ&5v΋ۭO WԛXuϜi׃K|=cn8Oa]ag~'xi-8{He__d7]K >C:Ç A~>O'F릏'a>܃ ۇ;1! 7љL7?$M=?1{luWμz<3枱9Κ֟.|ON}gx밗lr受nf=~\s׋5s.ܽzVS?~;`}?Zn~>gZ}Io:7c>=}g{P~O]yԵsHڛYܗ쮉9;? 3{r/C6_Oo^V.;Osß~+/CbyS~wp™glT]}я,W__ A}:,WzYv3'J7 /N̔[`&|Cgp4_^agF-xg>ELOglb˩ǰi=3ߑtʷ؆Xۣ$gzyԛ ,Nmψ+8Z8ؤZp3/__5k!r3囹nJy'8Ί,0څIqꇮ~ukCbywO1wG勮sw]c%g߿g1׽n9gYɷݖO߽wUw L~Ap\V\g_/zaGÑ\>QWL歧Ǯ|冣{U^>: ]sdz'`_bm]8:zxd~1 *p'av!KӸ)C:jnntu׃Zzug#CU˟?b"g;ana֌=PLJkL;>{#N07'i=Y:[_ugWح=?u gWıZ<:6Hyq^jțcs/zn`ԑ[/'n\Uo#գ|12~Th?ˋ3gҾxG<W8y7l0Gg5ԧs(vW+?osjKkN{K_7#Os淮0|ļugC|իO:vbɴ[z]ՙk' 87}Le{FeSatZmz<}ҷ1Wj퍜WׯhBퟜ'\x&ŬeYbՙ) CʯN~ssa|ۊ/՚vqdgo_ߵ?|X:ﵗ_`~ymyZ~gmc|^>?KEO2^]PEt ;ޠu;XnCNlxf?lҁ˦P;\u3~.Vlq#_טkSops}VIX~v^`ip=Cptytuno_T>}f7_\Ypw-yGZ?_wGoe^/?<_u|ͧl >~ v2muS͉5Oz^pc#zǓp"bs^j/yJ'7]XjI8:Wt{=>x5^]Lg>7?U/F.XrzP]X74x>4oã\sv<>|D_OFa55u:p]rz'3W, |R%j?qO. F~\bM,ۺi5juŊJS>>lG/Lqv}2OYן@|՘{X:NDSWՑ9i4'5e涖7thj æqq|֛OpIpլVqZˀIF8sg LY_=vF ?O؆X^sqpd؍՜ y_ܞ1Ѿ.Qwy)oeﻦJ&\R}yz'>$qq^ℋTpi]βc֝u+u g}QG;8'^R;nv}`50T{⩟ًrrw ?av|~1:f9ny̯Vݢ?̈́%ͳ˼zIq})|K^>v<ռrJt|`+!։y\=j?h'R 0~}k?vΚ IDAT~_hr׼ɞo_/fmSO̴3W)r9AQ'ͳ5 S>;|rUO&S/g? OX=/ל{^nzy߹~x=nf}qy?z~ X{sk{=7=|4?ޗGaWiڳiO_yĽ gv!}F{c~:9$m}e98F~Ճ+W=9ۿr;Uy3:rogRnˡ>;: ś)b5Š;6q .v7Too^?5$wkV<8bރx{rwMʏ V&86`eM~2km9۹WzVc:ǫ?1٭Zt밧xMNҚhys|>`wmI4't/zi֑ZÑ]/ b~ ?+v"]>}[o?NqxGι?`jo޽_-(o0,?8]/38tu ԛV«I(3qa W-8od'i}%KSQ>yٓ+'>w}^sysO/^;L:g;[ݗ pa&Wz4/W]ZsLjN爇/z'=Z|S/_ۀ!V{ %^iMz^aA̔r/[ _^ pm^_}U?/~}I5S5_?Ld>Q33˹W=qVXWZz%#߬|}r3u S=<洺W܈=A)w:{|r7lřkԐGq|;?s7.O]z~#'=i]~>z6s&>*8_-v{Pd1f,+fLLCj0Gz#DUSlWO8qMhpV#sZ[^X>WͧC済_4"nd-?/q^hv/ xظy9b;}-N'b{bXϜtxr$Y3?ߞOnN~7^|ywu6/|>Y|ԫ<ocoǐaM_t'Oz/̬9̞ ^)[hGdkõ壍rf~oEɦē.ǙG9i 7!Lg;jm&{.^9Zf\y479čNu:'K-N~b8vؔ4IO̾ut曺Ϟ깼ir3: ש܋v\mmo[ofy/=܏`={~ig7ӣ,_x6.CgMg;$g{\V/ya˜n?|a.#}A}ɾS.PeI7/P=0{8UcwsuJ՞lw<\L?[ouգq#ݚ_a&}U/V=Uy0b[<[n[`};ahm8 L*:0$5~o;!ΫG~{k |E>9.{f@iu}e_J~ `6뽵tGw9ۼԪ9mmѼ_BO~~ܿ|jM47ܘg 7V۾5/W?|p}YL_x[ܣss3w PWh|:'| n jcaeyS`y>{F.N=ԇ~5LqM/pI}7p{yz;?ikJèg?Igyuv߳F?Sp& or~{BzK`:8S~v}=WZKhuġ6iݭ~֛`ñIz/&+\} I]rs로4,y{Q˩\.P.j6 3W55O<ٮ:ܽau;h v/=pm8zxs >"Wj0ڰr~5[/tC904fs8>61 ~k3\O_`i2:Srʃ)ʷ֗jğ1orSS?7{׿o{ANi un{EW,UFǡozlHpk{Nr{?Pnڭ'(Ws{U _A5?\C讟9gLlo-qS򪑍8!\n9>Y>ovu>#p=`ؿ~9\i\cksWxwz9{}ɋ}c.:i76Lj>X L9lW5ͧ}~&if哸C.joOϼApȊKy$]<_=M=1xyvuʝ{ڳ'2s٤;K^_qĞ_>yO=Cnc]KG/T>Õ_yL|v5whn羙H9{/'o{ibgNL|הD2Ӟ97ga3wG.Z_6~VL [p"3iIÓt5FNueǨ\sZ,c>؉gsl% =\sgb='Guf~^\ׂ:aonq%?}Nt\?ןdwMp8hgF<s.q߀G/뇙}L8>ԫNHcï3ޕ>M|4LlR<gZ_Gbp]g8qkyRԡ.#CZbi}] ӗF݄?;1rrOn?*>|}גӛHX7 nk#]aI}wLbcs"޺̫gwŽ7?>W6nu20:b/򫫾z>=Xg6_is{"bo>Ek?,ꚗ_@)I>ΝpOLi\\r:OjLpfD{H_\ѡ7/\x >[zi`ـ+6fz56cT ~jYM7g{$ׯ砸~<iz >׿ਸ਼|#Na데޶QmMZ.߼~>p#_}cZgZS9^뱸)qcg m-Omy._ϮOqlvuN?:lC:a{)nRFsͦ|7sۣaAC57^`\yx1=|Wz3W+zcT˼~ZԭpqSWm5ӭ!\>W:'kUmI4OW|Mmð\dg[7'=yf.qF18߅rv4 =FN ]<]~~nr;Yy>͹oƝL {/=i֭?z+OdraZe^寇7S^g/.rq&GU?cc{s#r[o3Tc;3^.k;zk-N &uɟyp&~xo:Ώg„QZrH{ڜG/3*>~q#O+FwONC=FX W={5/xyb\!.u]Ϯyں;.0iƜ؞'|{"tݣo#X_g.&iR/͹Jś'neF֛X=kwj>9f!jMۜ+2Ook/+.~˗C|Qr>3.K/|{16>;]y@X.Ҥʃ1q8V<ai+s/ړl3'_+Ga&|8cIV 'w~@u/Zա凡qY?pb\θB'H905m8o&'In?IjՄiWM/+j۫BK{Vݩ :襾O} R{yD?&ܷ[~Y5:?'޼:j^s֖ēn[_5|P=6ʥˇ5c(gү>+Xs~ LQ.,Z귵09_q?W8CDÈէ5?7 q|qII.n9ʝ}ӧyoL>B8%LFIĭG/d֘0L~R=$_s1|7vzJ'~<=e;u/5`[y?t_;r9p‘겫Eyqg N}սzs}6^~R0+fޚñۇcL޳zy=3:l|b_pxW8kԟxR6QC=|zoVZ^~ݗ?x//{׻higA?<)OYnt[,o|+>o-ηeyK^{ }]ku55`}M$|sk7ȳ&F7i_ҭ%-ԏ9o#fTwK>zix;9‡mU߉ -?noڟރE4!ϰ|q^j^֗^W1pCܜkv0q$_ˆ7VS}A#Ϩ~✹]^|qCpx[=O`}T} Cj\!W/am-]oy~ʃOZ3Mh޽˩p1{R/IkxMF'xRϝ˫W[o |t٪ԌW=ٴz66G׋8îs 1g~Z_uWYu*uγW]ތc5WkbpO)Vo_Wp|{OMW;%p ]gs`][v{t` ivJ 埵ˆuh=>կNjϾoܻG#vU~O.C-܋ ϾI=q'CҰ8KO=w9JWZnv/˓~˻+yW_ϧ_9}U/zr[ry߽-;Gzƕ\˾lO[KkHh/[7<_xg3ÎTC vtv5䫍۞Tk/g t}W瓟m+!^~9}/Z⤚UwXO5'jzމ뭵v=;{s{L9^F4.{ooӾɉSAeLJ Ej,}th 8[#S!)/a;tfF/wZ51̇1fjdN9̓=d˫Z9\ܡF9\[OSiiǣ[i`Wnai筜x!qv:O1~Rr7xFò|r}kvk2 \4\d󟨦Xk{Vxy}:^!pz ?59)Zzs!=jC&GuB.gz07<'`f.#r#r7j]['F|܇EoIJTKm5=‘t][ה̳b5g'|י).vwOQ]ܰl=3ƻO'_~:<_5:8)OlvuIOl_9M|E/ b/ˁon_=gc'?i7򆗿lw~^O{&y-^^/׼]۷-_pk-x p-?l̳ q?p$|DNms=ƈ'b~Wru^?XR,/{s}λ93\K^2W6_K]Wby\c[':^{^{rŧ4ypؓ9xѺ䳓z:L8\|p=Geާzl!csY[ny՟>8i13dzt.}ԛFySOnz(!?nuZ3${u=M=WigD99j0V1k5/4&&Ha~/DZM5WS.J9a߁uI8{s/pr)9%^7Mn4nu<:X$nv=f?oby~{.Fk-8Ę؆\\s_sxV5+IGO󉇙9zJ ӏ5 >׌]^g뇑G̫K&f Lva/OCYw9LM| lS~TZ[tT>56cl.w֖c>{ [>MXoaWgK/I5«M#6Ξ`]{Olsj]lbm݃UgÅŁ u%?}HԃzX{GֈO/i|_:pI= Tvs3ӗ~=>1)}g%̰; s'y`%<82Ir=3`ʋtV3O-u܋47Z3sjVϸHϲ[\#g˕CS o 岋ͧf~0=a?{{yߓ--oyի;Y+q?,z~rk,o\N;w/Kk׼;jVg{G}k_ckbpC}W-7YU5Oy'þ|t~.Y?,#S|Q>wm폾<}Ŧxխ~I}볜^ mj7o/!wQzۃjg󷏴ggo/\5p[p fmSÀ6Mʛ^6 ή)-N`iWLXsx:|F}'ծ<2cADŽnjaC$c]z8* Шy!] >oKp(NoݰbՉW1iXcݔf>ꗣguv;rVY3~x5h6=/4>nޚS0+ۼ/M37{ǓL{bap~s6zb6 ? "~#X>v2$=L!·w/sq&SYwFyoKm>1ӸǓ71U3aT<6|k=y&a7j΁Ӑ[|8pw&dVKWKԃ7~璹ѺL13Z/]WݽF0?ZĈpGu[s}brٍrBkLq\l5htnj3cß3g_3_Ԫ&]ü쉩W1-%q7^ö96e֕߯=n}?[^{^|Gro眳}B5Mx;kyor;]`>wK:Ww dIsnhd$FGpQF1DŽ $,$49& H>{֙^wU[vg~VG?#>p\:/zm~񤉿k?U{q\d&dS+1^e]/1p_k"5\z0q\f'>1{qo\b~o<뱏E.qqk?͟-o\ՠ|wnos5S7i;Yqa63yXvPLqWY/X[v:|8rWtk~Vȡ3/,godsahMцYǰ,_isq=-_c#u1:տֵ֕#㣳usc /le%~_ŭ'[<V 0=gr6wu]a'~-}L_qyZ[ב8yN㻮E 5xO{<Ó+nק믜"_}u&'^[.u-#͞\|^_ְq S 2ڋr)sll.:ՒOZ\ZrWk>X=$}5&ڇimݒد1-[x:8q5N:>[m{—'uqX9n.ͥϖ+t.6+>{"qMhLVt]wy}ʷڲZVg\cġvmc+Gt`;.k?N4dçu=UdѸ|=y~7&8.}+U׼ͷw}8Ǽ?~a|OzC13׾x|G}O?w{ЃƃyĜ2?kjjT?ɮ_ieѬV.\b7*|:獿1\'~}?ӟV;Wr8.0n;3xA\ ?Eke_}܊1dzq&1>0Oo 0ʽɷǎ~E[Z0rItMu|aO+?[uW {TU^:ߚS]{_1&yhqyՕ-L|:~4r_]zc1XGՠo?Bξw&Fu0}m6ަl,v/mGqK6Z'%/^[%[\8WLuY7ʯUĴ/*i8 18vsIF->st'=N։#klk5Gw$c +.Xox9]j_Gش:=mWdǣ-pԇm/F?^ƾ <֥cZʋc֋vdͥf©#]-_9H∺>Ikc5:x5gX51Cpt_\A_rIU=ūE# 9ś ۺ5K;Npg˿pk뜡X3Di|k,L9qϦu^j T{8v9S]kn}X8}U/YNժ?Lvk4cKzg뚈eZSkn9ՆKkAI.׻mNj tg7eI~=sEOz8fr^޻MntYn>Qg+c=?q{[2yl/z=qgmgo;#Z7O[;3^º}^<;߸C'>q995|7<yfo8Vqj=f+ןx͇nn8\kba^v/|k [z؀A~~xr>jW\5W+<;1_M|{~ֱ97|:n7V>k*854.yWLxa#+̣Y)g;w:1ttX<_O5~4NFZON1fl0^7jfc~8_S]0$mpx^NIy6ɦ=g4>s Նi|5>8k̑r#ҎGG/֯LV_wO<˵Ű>.z??|:H__1+.:/6/skkbL 1؜Clȷ֚C78&ljG_5a7;6fj6cX*֋c5B7ګbrVC8~9,-hܰWos\ՀZ.S|ҭO9\Zq|l{xYulu4_# 'ņ^i~q[s8rVv|;o5bC>{ paٵkJ{ kH'|W9_j9Y,[1ں^aV$ۡ9%]aZWͮh-Z3U`_s')/}ɸs0nvIۻ𲗎~>>viW _-;8fӯ|uFye5d_% .?[VO~źjޤXk:Z>P >Sˎ/~-J⫎f;xHO;{qmlk3LiS֍[O|+/[>z7_؃bʳc?~x c+0pcR|ȾjYFګVcyvjbC_+q<3$s*oNJ|aWf]\[}蕧~k||qkĜm^UYy6#<;wqrU\]V.x:Vպl+?}8<㣍$+60a*y]Ɩ=N<1ZY%˶bd_^ ϙ+O8v^'+VLMĹW0^Ŀ7]qevi;jG|o}o/}S?|S>GOz7=ׯ򒗌tw}vrWxS:~?qN~XG$>{!k'^oe_<ߙ \ش_%;CΞ[Z39~K_;g7޷mjO~| $[ګmcVLurŝ|3< 6b렵ڪkpx=RbF`^4{F\\*grٓ[E[jF5I>̪>]Ldpx>_i.p${l՚q5Jξww` ;i؄elͤ-? U0ʍV>_5=aG^-$a/է/9ӭw+w}?xVWsWsS."v/?.dJ>{g{Yb`5[C IDAT͡њpkl$?U/t\koW>~bߘ]rk[۾-g}\k+/ZkN"\`׹W7y`ŷqa]G`㍧q՗9=N4l5Z6݃#@bķn5*tyQq~Wshnͱ51/s$oXҚ]bmlqT O?-~6<&FZ?rЮւ8Yci+Zi|8/~s~%kN1穮b_Fz}b4\g˿X߾ߞs0Y;_ۛxv1ƫ>.qIxI~xVL6]V~5N,QKs[ךz]8ïVkxm_\↍ƭ&R}bu xϏl~ܸ]6G[#Omm{q?Nvf'w]okun}'=qCwqu' [m֠Zյcn~7uW>bW: .M0_m> |g|qgy&TG{:rű9}g<8_4_c\4ߘ~/G|(oc&#M\߹ K{-iOb9zպ;>XwUkaz (Vx0l8IqC%׀ kj‡;sg8CG1ļ5=pj&`\ּ67\OI1,z8f ߁D4Iíb,Ʀ&K9]<Yì/AsM痗͉ۼhR|gs·rӫM_BgˡW0 9&:..d' . kٲ5F<ps qbUp֑n8Vr7wtuUCOilr~u/VnibW\X N%xxjNG}xhOM탴xv#>ѯSZ5/?0@[s8>9WV g+ {R[ 㪖t9utVy_ɷָ֜+Aj;w ?õe'1/vkc6M|y:qT<\S<#:Q_5AW{ph,?8953~@bopcɚC_bK6t9V>&qz< :>lx]}Ց[-_[q}O'^ixļYwunj-&޵r7>7c=8m7>;c׺xk_3nq=u:>;_@zia^նuC>~qa^^ |XZWx1q\:N|ŽgX?A}c7z!p:lM`ŋc/'Sr_@5d px8\>5lt ou^1zW+>=ď5/5~r:k+'.Wq텴|knuom1nּbQΥS_ȅ.M+F?&<~M8&ZNUŗU8d7jDܚ韛Zaxkτ~x|[8.s|UuP餃eGa0{ kfl i9wS\*_nsO:D/K&l|.2IO/cf7ƃ;.bYaۯ[8bbG/.[qK3bnxkl+ߊiZu&կx*~R͍W5gVk\|lD C䋣q=qo./nD+o"5yuxoyu/u[1Ņg; '{9q7חC6։VtDLbdٜZ m=&Zs܊ZV9jbA=9؊IMA\ly{ׁpqUŵO/l_tũG{sͱi/Iڏx[sunXUGX'lGuu]7z]~W^s?o~իΏ~lD"~/٪a՝b\7]V)WLKOVLxk۸X>?qُ{};3?{w7ܼQw玣QFq2Ng>q]}rw >/b~|W h kHmVSۏ',\yb'\ͿbyC7>CL/w[7q5_gT6rׇ%0ͱ9ÕU듵\xF0>ìxh5n g/:.){ckg?-zp/u5q+րOgvX͜hIW tXq=˯N{Vݭ!L[O_s_8YgUkz%"^җne{붃f)rs|yΟUr?~׎{_?~~h<9nvۿ远PӸ fbsfm(6d}U_l&϶7.NwršNXw5~4sTcXLcb+XXFxk_5@#[C>6Vͽt`>ZC]|dS 0M>7ܻ_8y'kXE,N:6W e\^<<ճV֍]9Kq|J_T[_=e;(:[-kaMkxGk$Nx`Ӛ>.%f88;V\+q؈OD}k.iy<6{m,HaׯNvnK§ *׻uiS]Sލv| fntq\gz?.co9W>xN~焎'|/{_ΝUntp}s:_=TGq㴟׼~_}_>ns{>xNx Z:Q*okWtj?*W~|.1o7>}˷2Wx_mޗ7|\b1sOaBqym}?ZϵPS#ڣ9\n5o}8t.05\cjحu}Z7| Nk^8Є?iMl[[]{)<+ŧïcrJS1+s FqGv o ݱSWxu^ h4r##xRb}#[558B\XZqgk,%B36~]\[|``^jU1-nqmiqgWb^$wӛt<^yqQ=6 8>q:|D69zʳ%:P {~2ukpy5rYNˎwcco%|_61⧎bs1p1ʡ}uˇ\:.X0.>_m.ZqmN`5}/+gs-Z}k1>\pr%,]^1+Dx! ך/Yxz娾'=3ǙdKg1/q՘ڌ͇x4XSzͽ|Ikq[+<>l/،VkNxyQ*Vbj'.y[ko5EZSc,_9qWk͵9-_u߷xh15M+W{?ΰ/2ŋmGCx3p 'lMiw\+կ~o>>9o4y~|h<{{ы^|ꙉctz>\Vu;95/r$q+OXkfjjn͡Z1]?kϏcX|W~&yqC9i~w8_kK͸RIjnaqg׭!aĖ{C:7G 7|hǵ5)r׸޸Ko7;oy˸XP~=Qz1}i;8/G?~>q]ooT}L˽Pi9*zl7zNx?4qO?qg_psqWuGw~|verqw w9n7㫎]]7|rO:6%||3q8 xuXr G_O{F?>fr?bcoY<FI5g o^Z|oNadoŨ-f L-j/{lb]ν^CV_|8G|GS շJlp'j'-Ojm ]=bM ]lcZbVuk.^,>yLJׁųk$^n6Ҽ+_1pg|XU:?ʯ=OOVCHw_)=m\ܠ'ooxs7M=&\A1{a竱㸪]Lq_ _j!z^味'fͻYs5sUf家qYl7xէ׸վ_t6 5O޺kb[{|c8b=}͡Hk?ꪟ>V?۪h\a79vջ<\ձbʓƑ46$L]:¦|.Gc\/;|if[a5kGWHye7?{{z KyTC9iWX4A'8HU9k_8lջrgs[qZwO*?tcIOzW /| /d$u867ҕ4B>29tI'm7V.#;[ǝn{oYO?0{Qmkjf_@O.vqu/yώ{o̕}*F>族O._j_ocV>_id?f6U|18 ?>Kͽo(95˱_c<w>?zԏq}8Ǽq~JKMg^^YG8R_мq`;nt;n7nv;}O7ӷ7Z\<;/ n=QF=K11ߕyB|m/7 y8u/ ~` T {J$~ȃxrЎ%S~TG:<ܚZp}fxŝ~œ^֊1sڸ47lk={ lbM`|a֪aXO['ٺe̶bu,A55IޯS5mK7b#^kXpOgJմ`[5};+_ӛ}cXSBи W;3nٟm/@5GGp>YAr;N0p%|B/,fkowzѱ4wŧ* 8h$ZQFCW|q1i]aq{;~ko|^G6+Oք4ܸ>">ar eY^P_4{qu?8u<07gx筸t@c9pW3&bS.6VOsN\|qVӇ}1i5$/?W˯ց:/䭶֢):V{rwqhrij P.ڱ!4LM+x}|6P}4,{Qu[)⇩ׁ9o=}|Ər(}a͞u'41{r5In_r9_ n~ygSc8:_<0rC:Sy3jP-O꥽NLz`K3.6l65'yEWZ5?~֐]?oNm?vϏѷѺ=cygp;G]Zc㴷y}l7@gdi\d~$?ik}:ƫus[qw~Ѓ8346ϩ;> +^{FK-nw_7Q87oD^? W#$_m7^kΏٻMnp~ӟ9_m wy5?nj\d\^gc׼3 ^Hw|t`\39y]ZF2}+.I]~5k:Wt9iqM<)KWW-C2[nq̈Qq99[1/iY>804_n1 ·}څTZq$ڴ#r6k߾ 0:.꒏T\|壓bl.j3\uXvX|SKkr%b^[v':/vhk\]P]:j kzo}ˣ_ȍ瓤(ŗ3~5޻ G>̄͠O// FbqS~5T]ܺi qh_,-N]͝^f_9mU >&gu7<椯s⃕S_>NAVLcZ['ͦN\.ƭg"ӻn1=ik<]+8oOzq7u$^OOP%~!CaW3&8W[濎Ykb|pj4-6>5=.~hM]kLu[ӎ]}j1O IDAT5_4'7 ߼z`]]l 6WZoY\'{9irU|XWkŤ9_ki}[wきO=Ɔ2nt936r"g0lcZt|kNrhLbԺϹw쟕#^z-?~NwOxׁgv}:_8gv\א^M!_9u{g9TW-|y/׼+^mOɧLTk69ȯfKZU4O Oz#68cC5֥za/>oxL1_c>ynJS;&L$d'U@1n0? P.4&I<>ZxyuΰLv>9j]E|Xa'b4x<-îZMtSfߏq[s'ӵN|zχ<G$x宱?jũ%k{a[ŷvqîC͇<͓oU.biqaטma[͏/okґ6z{Hn ` fv)O{Pp69৳/>q:W.Ɔ[[yWK|֋Ul0kgs5# bckܺ>:?;W>׊_[9غVծNon-}w`w[)5vu\^t>s'"&pe?hMpn񒕟˵x8V6Gʿ ?o.۪ee[ϯ 9=.|k-ն~>k9Rl|8\X>s|w6a⨞j϶6qbղqug|+G6zZ>^{&W0kl}_ xۼPb~焏`~ q]ߵwI|qS 86I7 5|דtŻ &dus꯭pŬ\qUMĸhT7[xu/h氞8/Y睍ΞfmpҤٌ^Xc"zb_O8|j 2nb~R}j#]~ۺM߼՗^#k^WK; OqŹc[גOn~[4) c\aqgSáhqS/]+&luU=gHU/Vp4_z$35'^Mշ}9;*zG[X}߸u+//wuw}w|ǸƼpN>ɑ^:1/GkY}qmt^ It} ׾īwZm#kM0u9 FTuծ}[n&|tέ Ϗh8M |5'pHjnqtk+6o>獾n:}󝔇?qO~8'U;ngs{7o]m{_x:gߍ#'w]73M&7_yW;1‡>M8E߇58׸e/7sSmPJcY׾f|rO?ξ;w!>} Ǣq>cߋh>p60߱UŸԧ[/{֬)t_̴ZKf>4ܤ|h.T68d2v>__^|ŋširkk\75Q&]_l6t~s^;G _=ƸP^|ah[h\ 8jj7/U/[&4>}Rl>-o\rR6Nqg+.:֝IE_dOWG#l^T#7>+<+!C/__??0~}~wk߿\|8\8%H/4]߆tNB6|mb>4c\m7nyM4?Ukz升ƍ\ Gs(8}>Bօ=N} /]~-VK 0^0-fb εpդ7ㆩ~s 83Lp.;Gyq%TKL1sC:qiyscVl l} \bv}8H~,<^_,ZC\W;q\a8\^{#ܚ/|uik c7[k-n;6Kk !a]83ڈqfi]w'pۿɺ+W<ī/9q1u&l=xM#0yģ|z%Gn^l _eW|;X9#GXb\S|;Ww+u//Kw&kl#Gg_yqOk {OgÇ}kB8˳g^ \⪱j&zfGmxvׁuސyݔ OwNwmHéG+:aH)6?LuÑXkI9­~t5! ZfékY8y ;9κFۍc|C㨗Oy|e/~qڿizaS{&.wN;<\[͘]+}GNj;'ͯJzų=o]h|ˌΛ׼խf]9-oG}hhQs\ 9v͏~ra"{5 |4=~rggSN9VWw>1'^O8asǻ ׼f㵷qqK ҭFUfݺg#xW)Ovp V6|1y!&k6o|ky<>y-tM;a>F0ͽ ?͵:'u]K&Gcˏ^墓0b\kaWLui4`LW>_rŭuڦÇmn}[{ܭ\gsUּk>k#{cy5VUÉ>][5Y}_?}nnw۾kE߻^W??{">o?.ɑ~._{$6 uA\j#t_Ć*>>>}" =IkӮ1pmbV]i\MtWδp/5W>cmg§jl:uPKklsFmX/#;X; df?HN?"Gls.޹`V_ .Ĵpa˜̍T9kjI|qʝ/>mU."XP=ڬskgᄑtc9w)=x,{y5hG5ͱe!xZ'?i,^Kĵa|1jquzd#qN¨SwWr7>][7.wk??8~5yӍj!?OZ;ήAռjxqWG"i_qu{uo{Щ5?k8'8/GEc_*[Ds{k_;5RKqб_~Nhszٸߏ>ul~e.37߭~dqӞ0Πqcrqk\r>{  9`{5nzi'`џ7N%{ҟq]6.}+nt2o=w8^ q6g6@^5ZR%ll-;?-aLL18ĭ8{Pa~-nԢwW^¨.|a[Zo\͕8^1M]|?MXuk|ξbEiⵆOVcS?UkYstv]}̽׽0+Zfu|;a]''wWכww;ο$"Z#[cx7;X{}v{Om OaڈfD/'`Œ S8.Xㄭjv%qWٳlnްmj/MvJMkl| &tCۋ|͓֒,':N7ĊD:Gĺ?u~ƞ`sϻpp<\mx˕[9G#=?݋!Omj:w6n~8k|w՗ǘzW'LmχИQ~D.cqִ%a7՗g+W656D9[:͹:q?3Œ|+ǚ'?:ŵЎs׷0b &f.[;A¨7÷QqtIgxիoY1g:sΏu^070LXcҾ|imC5ȃOu5xyc['1|''V~}|E>=ǩ\t+ͽxq?V|>so\و;zi%?y"}~\t6o^f7uW:Mɿ{nx]۷\O~b\os?9"LNT̘/lQy8q6pcNG}_~yA5noQ{8^񆗿|[s9+5s\_ qO`>M8umŖKζڛ>}jh 㸫U\c|Dɯ485!֗f+F-x`5('[zzoKORw' ӸcYxIiǗ8׽g^ֿ9Obs˗W}k; |È[mqWׁHHQi|9"Ia{8㷿7w.ċ#ɵ[( (́^[gm 0>9+-'\zkjWTrɱb;?MoOشVhc(~c w}:Y1{[> +Y?~~8TC/Oƞ9z✁ɾ%Րf/ִcֹP09RlaI]VՀclu[_4~BOknNZkюőDZuS|a[4\}H:5|ŮsknşF~݊W#OÄ[9aWk_bqk֭>A—k3eohM{L\:]LoL`5Hd[ujC,}/|4VOo~iec 煺8`4c_+,uǍ/lsʻ/=~8Gk<=?*ƪׁ;5ݙ\}k>5篗@бukGX+|g~°ԯ-9׵<x׻IUy~ߏWVΟ=nxԷp;+]:{ǼiwS<6onꝾA~\W'?8vxCx[zU} ʿ0Auz8&&_/Z|Vz]9/Zwv^Ϛ7Roǭqc˯$#x)p0߭vNJ?3o]r}sc:e_ׂ߹ysqC|ƵO{MxsG}qu;w}:ǣ:z쟍_[nWجK 쫮߱kxgk~Gz=nSlŰg/O5k+N>98̥kXj"k8j\7xԪuj$6 .cR>m/rvw&94Y%vYBWOnq6^u_̶Ƭ}͙Ӂ gF51ť'keChdmk^ً+x0MlIߓas/Zk1_urONrbr[k38H7zDű׆Dž7-_FkÕg6 V;qäV'+L~/w1tU_+V=ּ5&uLp IDATl.p-mͻu+nW:u ԞTJ0q^k|#}quqkkNxpe[sgWO}:<;roʊFDZ֣Uu-.L5ʥ&{5!klV}L暿V-?K̭~~x}>vVp;lAׁÕ|^Ʒl鎯F_c{=z\+W4{1-.?%ߝ)K\[Ro??E>eGl\WKu}=߻N;Oݼx߽|AS-V2$$p+5)gu`q+{GZu[C/>Eˡ^kryy?6 #nvY/nn~Svx_>jhrKq?2cx5FvJ?>sc|'p9Ѽ~|q՛t9޾GoGwKGϏTk͉ζj1w>^7u.ripy`/_2GʞYmIt㬏C?N&k_Wk֯TK0km᪯9z߷q墓bZ \5\qfk|v}+ ]x~1U[e{7ؾ;A9Wߏfq{ mLl'"ݦ`/N̺p$-'t N10I6aScj) t7]km{06/ >9Џ8ZlxՕZ:apr'a'hM e~¾'\ƯFiȱe>[7#/ھ7-.~$N/_ր{!D\{ʸ8;m=귟o~͇5,7u׼ZljnOp ǶE60Z|i1I6XGa˛mn`$rg΅5/-Z5?\gJxK^r^fσH@#H[{DZ}A؝l}G=ߞO#]} N+-/b1|x#_͍[{~h Op׼o7G#}7}[Ml?" >>}6k|V7ao}8']گ9˵xz505Bߊ&s1Q.Z`n9?}7p5㩏|ĸsιowPp{wRF3c!^I {8;8GN/8#߅G9Q[̳1 ks|q>p:o]җڠ]?4y/:ZњwGƛk0oNk㳟x3q9R= X"c>w[ih>-$|js7ת)mOt~u[l_ry XMᛓiyPmjZ†O-ƭ~VRivvW.:Mۊ_ca5}#!bKrla9Zw}> WRNIYUThfh*BQ`=Ǩ`ǔr%5a M( t}a@@Ăʜ>w(%u]Y{[v>Sӧ0r?L^{E},o~v:w~RشHc>vMesP.RŎc3(W\,>ͫ>F?/Ĵy^.v6\SQuƭ3)g<O-)^-a>݈g>/bgjm]'3>~x}gȺg|줚[kLG͇\4uKad 1.ZwxŖu?lu%q䋟XuӚ̵Q\yhjMS}$O9jp۵?{~rVG|lI5zk^ۻy~;>)_cHZF.Znmu_%s8<~X= 0GņKn^~?a>w׻zwR֧=i7ݲ'a؜\/k3ε6xήCvV/~^]#85~y~x֯߿{ϯ}wn>7^/,=c}/⽾۶wmwX?nZ~)ۻ/3.}c>bnUt뗐dwzpQ+i~8y88ҞkaZ7[}0ڗ8X{W 5v0{^v}wqɿdxŻ/^/=qzۻe{ o70ް~q/+_yWh?_Yڮo'|95jVf6X7W^x+{vϼ^sogOۥk^w{e]^g\]Y\Ӝ^%i/f=kpD_8W\r&r5o`İos&G7>Ӽ5}!Ge֣xou\d`.ǬւnS M-b790Da⊝u>|͋f߁cdf Ggk>5^O/@ʯ>z[/]|8֗W;S')<-&w>P?7C7(>{A}4ŗҳϖԧ/4bʖ.fv:zua:'|痭=orT[k_ _0|ڬq4qlf7?<8|ՐSҟf'9m/yۮ{{I~/ ߓߦxxnzQ墤yhػ:|\8Zc.0p[u”_|ꀽ}=1>v^o7[CU~QWX<0pնC0'x{v[^=q8vZS,X\Sf~qb4y8xֽ=-\ǽ>v3_o]_-v?|7NX|Լ=h+-]x /7~7n߿[[_kY;%۾q'u6yl"Mfc&qb >/yxIgSü`qglx>ͫBqhvz.ژ4/\/њx<#?6b\3bo8z3\8䳦#;9YC/{{4'ǜ|30a[\}|rR .}:#.gO_#4lL)tk s!i5b{GU~1:W3C-ōU؉ԃ/zƅ ol]⤉Xҹ17caEܬ_/ޓbծ{k/+zl7}v}۟?Jۙw~7^?sޱR7ڮtn7]/4Byaiέ^kgťM>mszZ1]=u02g/}׏XMsn.S9NwκխWjվ黶3mZ >nt{g]WY0}BS;ٟ+VūV WK׼:ؙ6'64}pI~r%,MY䃫ƚ7nΓ-;-489}t{򓟼]j۬ fl36҅1oVpx⚇dF;h֊OZӳFzח|s$n\iMrn-X.hpx7x)r&ðx!,_&x`ͯZ͋ಞ{xqqV I6SLZzgfrG0t 1|us/f69:,6\5FK_<1~n֠4'冫}b,F}WqrWo.vJ6^}I녦)??y=r>߿ٿe!ݾz{zַw zO|!\8_s,e׺f.*9gϯ/YO_}tzg~vmo]ʏ#~l}|O=w;^כ^XXYֽ>y}-p}O~olz=k6N9Dn?+K֚MqQLk.og..x}|g\fbp7_?^roȟ _[/q}G﯏h?a.O}?aOsž?~} Vwr ~w?&+f9k9룷gk{}ޫ׿׮>7yO~um'k3_^m{cw~}_- sp}WCu~shvS~fg=跖%|:qbgIײg;Ip1y'Ն#nh66a܁@"鐲]Sa ?g+v!yl؉ꊛ1ɟM&ggLqi8qN[k`SS/lgχ[1u Wȉ~b'쇓;_6:j/O99bͯ?‰z^-ȴSO?1r)fy -15#ldgwlΖ.qbk396j33']YLyGuOĐ;Lf SgLqu(QεiT9=5x&U&~1Uf;ꉩt9٭F:>@|x ky>)Oq ^;O^g;~}QKX?6?IgJ|4|\N{19f3>Ip/}e{Z|?^oyٮrkm.'w`+oΣ3|<|;ۯ.=roVqC;WY/|ʙW.{/{}Gۛ֋;/{sw{Nk!\1灰-E[_0Gu6x=6O]9z3'hkM}e> ־^'/w=w>7'گm^|zW[k65U{̘1vlg/fՔ=.'gKadKO_|.Jib5G IDATN7E뀟#^昿:9oq׏#L)yǝ]Ly5drg8>IלZ3c/_s6s;QO1~7? +lEŜa*SEo]qq$_ꦍ:K_~+6<'osHObaov{#)9'Iu~pGqaɣV{Hb{>\pU[cN#Ǭc[9&aZ1Lּy2V#_ݓ/c~x5mKvsq78\"OvꣳVl'Zݴ&g#qɕ'\:>qyu>ͧ'c,W_ 'n)#=#N{QEp>7l}zךv^P<ܫI5wЮidrG}~wi{󟷝Ɨb;Wl~/m,߶=Kϭ{/ƒ n[o?'&ꐿsh]a[}ܭ9Wn$2=^g>{Iq-,lٛڼ`~>ɿN=$aͱs r5Gvړo.>6ܣY/ >}}-o_^?WX{u{޺7|[ď>߽w.Usǯ97syqo$u>xq~崷P>:W5Ή~#ŋmI8Zlaŧ=Twu3'lkVN\hՙƉ\,}(֮\/N5Ygnsᔿw7شXGGQ/~/nicuP:].48Cx:TW^+ƟM'lN,M]a,޸XxNrxG'Nl8ĸ:Ij g;wqW\kqOWC}/8p?LrvFZW~M,n '1[}I6ho5T{k-WbW?2rZK\pǙl?s5uTj KӜI96sUcbd3֧I/[s';TS 3P-9ᡚq~CWӬ:~W78;>) |-%zq%l=~v97g<|k|1@T}׏m3qQusyqu(u^ʍ?) ~^%ƧiY؟ouz팟=og_ǭ{wd]fK=)/>*s ڗd5t;z'Oͩd~ݿZDklk&V>1z'=_aqUG0]5 n xuA;ӷV7goO~÷ۭw=uw;_]ƽodq3݊8r}gﭏ/y[u>aoG|oW~|z!ޗ_!5Mho>֔z478f?=IY3OחSɁrWq60|96uWIkI\a3qu7^>Tn> Nxgs}$|t{Waj+)/ /,ɫWNjJ_L-gV'>ڽ ?.~ÏUXjo0IW>iL<1Vbf]%J7lޙS^Z.r:;O=z$ϒ?U|Z%kӧGt41>壳859Vb݄񬷺9|)q4o ] l MX_9fb\$W٫CMqvrř.>КsbOZ_ȋq'V^'ܿ֏-<[2kg _{f[췖S;.n,nq̇qg3\y#aZqc:sqׯ{V aCsk קOjxfݧͧ_}t8(Ql%>8|';0 #qllŗ7I:,;O&/)mK>&V8io/Mg3gαV|'&; 8Qk^Cp[lN }K2^`zozً SX|雷kF'MNٛ]aZW:[ؒti{c<2?=w {7Vl͉Zfr[ѭqn_\ƯoZ/=o}ް^Ȼz{ۧ\*'7^ؿ?׋yξ_k?)Wew޷}Y?۹]l}J߯_͹5:V߬n_r~f.nqcGUcjN7mnM̷'_x墝qW,iIsn:˭O~xv<% +L1Og:nqӍ9Q=9t:{\i5$ZZܲeOIxx:EI4WPb>'Nwξ"?ܼ.)<m [74.&>nOؼMÕW^~>qi.|)Q1ӓXyzQ+]~8|4b/7? Wlr$'^'aO┳LnDro-[۰m hn'u{~Gj5c[8goIX?Nt9Wcs78֤5ى|3G53 , ˧/_͸:}xx|08ICϵ-/aKqtio>Ļ/뛫1<^$s.lՙ/>~}~Z3._|N3Ǯv?Iq?V:W|ЄfO5Iv綳\s,ZcO?̋{zqͶ_ { /g]iO5^۷[gx=o=7jaĉ9L]M߮lG{~_6_|O^? r }XxGX.uƥO]>R^E=1m;~7l[zGCӏ56_%NujCs|3|{מݧCgm}͎ϵ#>\S, ).FgM W!z0#1xh3׶Dm1}Rv,3˚90kk sXgxNW4\Q}k=㘚(q3.nه9+}ı753WƏ<}Da)t8H6K;5~.zT8l\c=Γ\x\<'c7j)N]μL^y|E={5p~0&026+? nIsϦ :^n}F&yeo0G=o\.Kl٬8ʼnމ7Y5ŧW mMi..6tuϵoӟc6g-1IO%pj#s g\uhbߋӇ5@Wc[=r6#l,[1n>1>X0Op÷V\]Z].x# q?ݶpoRgl/7ۮ>+/ٞ[߾l}ߣ~Moc0spO>$.ӗ6'gߴip.:S<{2cǚ)3&y֟|wOdy_|O:~}Gߵ=!_>io^{+l_|uֺNc-\]Μ؏'a[3nE'9|4\KE_\51tqߺ7O.;=r)?E Dg?ɖá/yUvl6q$=~ҁi6?k|Rb˛u38&g\4}w `71rO&ۃC\t9a쭙SmՐFgzN?5\;lSq⧭\3k69a™8-&41NI'qOCnJizoi &38q'Ղ爋;]I:[ul[qs &bom]شrOg({r>+NlGkU1l⫉ykBW\ɯ˟o\YW181/vwz(z1xy+G\'fZO#Z9L`lZQ93'\/QtqW㧯Fb}n7\/ pe׺Mo?n>?{7nSu{sǩMU_8bi k5q/nl3OW8_VL{bl^8̹cg>J~7~zA6}zv߻>E׀?n=dp_Ly򺗿|zW|۷o3?}=n~vGt5(ϱŗغ7xε5ӼϳbL >L|V N0r>l5O_1$l8u+qa/8}._]OS7֬8:llo O/[91 c=eM|i|8ĔGc#+R=0$_ݹycS3\Z||'i5M_bN|QǗ%$ͦ;,9m^TljS{5p> 7px8}Z=_' XB8698v4q_lk7mPҟO9N'x̱pDPC]5Vީj>ԃ8>f}1i \KOkNy&`HA~cXF _|ӳ8wݸppc)[5j|ozMhM; Nӊ+V f$8먩Ż?_kR EbʥVyH5_o4vo1q5g:SD\OHyA|0bC߻O4\>;Uqj̓]5.]}|CWgJ!Ϟql$ Gxd/{3/D\/͜.p;kƼ4y:|eZu뺐#u 7w)N;}Wo| ϸխuۙ-{3߹>nҟq텯?o/ o>qc~/9瞻}7}|SƉ{a~q]gN7_1L}񱑉 !F94&>yuu5kjO'g-~>0jךKC?lO{wk;c۶{S~5;0o_ |>??qV~x[x XҜŅ#ͻbhQRngK^>0٘sF,\pSWsv}蓙?䩟'qM~gLkļxseVC9_<ln~aqV]bg”Py|McZ\uG\\lw{9}=xuw<ٛwu?R[3;as=IaWs /on~ Fl-N~Zv<|N>|;`=ʡϟmƋ$)~/w[9NW<|[jzoUg˯5?1/^ WgX6<0 o=1rq5晍&h//\qu: IDAT8?կs׿͒}y}T&rqc/}r 73!?&qZׅ:q.3䭯~#b[ckv}|1?^ 6/n|WNn~{+%%|?{}R- 7]X¯A⟘9Kp[c |iO?:>|#/y"V}n,ءy1۱EwOV|\tܴ+ues8]0y8qP''ag Otagcx}~LTmg?-&N-\sՔXll 3ͿO=L\-a,7,ox|M|uߚγŸo﬇xN1o1p'֗7N|&WvLn>rckL1k+ͥͱ}øu S]o\Ls`V5I7|lbO_㯏{s3gbaLnv~n\4|f><g?_zo̖]NmcrYhi9 t6ć+=ߘGg}fxwoZ<_Ի/ļ~}K='﷽yۮ{m7Z5=u{c(xV_tS?SY?ר=ZroڲIٛK4sk~iV_n霕/[ybh>8.:m?k5>x/_y&wZkOq1q ;fM+OO 8-o5y\OܴOp OiœWY{v{^m/6Uܮso]s>שĭ~Ia'~֬}'ɮ6ųͼfW8S͸HBl&|t>|հ;e/'ј_qظ`TWt1q8EžV&0qhg^ll|g$Ux\lka]MmOR-ߜ13&3|#.F6QvZ],q\/?NK\ܭ͜B+>vk#WuL|tx8§1k/6 <8q43柝]/F\x|qyr ݂>1N"Fzq:~x1w6DqRwޘSư{qYdټ"ְN 9UלK6TOҳ7{Wɦ&6K 1g>m}L4Sv4?%Β\ݿ:xml|i76/ܮ>*bg_|,_wl=z}?Y/ p֍o-nkn{'nc=پa{^z!P.5ǔ??֚0ӻĚ#MokȮ}1U>1_){_{!W>'9 5ѝUw̯.~ F y#h^W}͍=zkI [V^f=h-ro]CpG^W|ru\LX#F׬cܼc+fjv-:wۋ퍯~׼z}w8N0^k0~O[쟹՚Uy=_%8Z\'kO7nq5O/>T 'Atcx | vMMx`St}S}53..|80542Ubǁ_\uu5jU{g?,qzߋ_ ߺ;끿t84zj4/q aӉ+VïWqMي9/-7)W\q&쳎||ζ;ᎺUq\n֐.}ݘT ԧ^o݋f;zZyzS,_";+|uOV}zJgny]C3lg\_~aa+ծssOl7?]߽n>{ޫ^ ׽__f}\A;Vxć=l{\?šY5G?i֌SZ挻}Ӛ_ǬOY |1ը1-Φŵ|=wAI',Gsc/?]LL_K{bjjC}t}lqZW}6zٍg!)|vSj8_홸)r'ͳg̱3IMD sdbc N_ͭC[{_}>Z׿gF%[=ki.rr;l;c?Od/q{7-;T lkuGpoO|otWU=`=.oWa_n2s4i?5|1s{:Y x᧨%<{w&F<Ϊqd=4/c Ӻ/̡_ ЗwªBV kclI}y a Si+=1(f#޸K-x$9r7EɜC$}j>s*ox|ű/1o@fmW,\x>- KϽ_7.v1pt-nѸyg\ #&jr?7rLL9pgӗkʬ}Ƹf[3Lsf\}u1)3״'3zNi-&6_? 7.*o3lSy/_g=ǚ=~6[%c{й\ژtV;ڼvz(|aaK\lio^crOswB߻/nĿn; U z\/zw=?a_q52#[p{zfǎecgLsr[bb$_sKf=I|'aO=XqN1?aᔇOċ׼Zưj[ќ <&QXjl9UCӳc<k+|p9ۼZlsMK|.vؚyטb39gqkn|r'‰u}sCa'Oso!%0˓sB7w1'?+ywѧi`Үw`ي+_:zư'I'ObDX cߙ\s5a||!,NWt>:sgtdWۿ+ۛ_2;떷?W~G<_xmnw{ns?}绶>QY眳]zWЎW[Wo<ڎs=Э'LϽWyK\0~8p9j`+j?xiIu90{z8hN-t:>q0/Z&PΩaH4 \Tw>Z K&qUnyϞ1q=/FnGzrɃ7j)#^SSg];׸[#z ϡꡋgu7ǰy WкxלO؊pg?bOxَ/_vgJ_3Wo1͡h1g8[4XD__~CťS|Vp&OA_b E~ hiƋbw09xllC`t0_^9yv*-{9ROĄh{bֺa,1[n)ƯOTw7g~爟_aUWۼFx]/f<4xUNzwɕW19 {ĩv1x܄SS3WGӄ˟O|Zs:|Sŕ.ϧ[7}1mJ4䇈?r@«3[}U#fo&DW/8\h 5h\ {xhNLV:9&6<t2 kZ/}l N-NcxdOy>e? !'O'9[[8}{%I"<]{/;C<7]Ob:Sc8ΜbCsx޶^ۍ׋tK?y_?޲~3~;z}3I/fŕk^t^L|0~9[{8j=,G\gp|_&? iWcqKwũ MՋ+Mؼ8;|~acr V?.4/V}q>~<ؚ7g:;/kk}ܸ^iqqWo>3Mӿƃןz~_u!lt?R|066,|ǔ&>݋xa:lt8nXj3a9^nڬ1^c#]sN0و~9h1$_ p ~7b'8k|p͖KG-ٍ9-[8n\Oc1:_4?-Lah+>`>|6#E:z̕&5M/Ϝ ~bƝbpipW/rW>{b3e,1]8??Nq减O%|G <{[1a|4?k]j{G5#zRڋ''Qʕ=S ;qӧ(?Y3o qo:̜t Typw6g\wW~ue/=_km~P#~rmoz9p4_9-o_/lxci݊/.٧q拧95?>YjN~>~æj3tS8ij4+^qçg-jo>kTO7VNn} lў-{13[ bf>ߴMG̥yC5.#/ytCѦNn̴w. _ѡF'g<]yUb+??zIOrXcH9Z\Wu[Ok}sA&5n]1kWOls=`I{C]|D4o.h q}p ֚sۜhYOkoaf'6:xxu'9UsVXg*1L'co=&ݸ\0j~[^\p37.‡L|lN`I~>5jq'V=:>X?zyʑ`oǧn8~xid׬q 7p匛m5c`XrowzC#e=O4[Cu oΣNsbIvޙxƏ\1xqrX30|>cz7q{[>׉u9z# ~$'u=LsJgI\j߽XW-fhlaE|k;אxoĪ&?/6Szhp> lgcM .mƙ6_ΤvY1N9EXkĔ9g^.zIvrX|aդO?T7ߔ9=?k]Frw1Gǯ5%zoW^{_=c_Ygm_ٮp+m_/c_[Enz1#y6g>?9 =,-iŸ["V~Y5]~6x9N|tn6框O=5}Nj'jUs{>ՇHE,w!]y~ afMw843Xӡp.jOLl]\|W[օ=7_͓Y<ל9kq/vWkV}yŋ<olAؼCcTʧ.}8pjaqT`}v3Oy|j V7'>Dtshė7~ēZfn99Ѱ*~\R,~ 笻c#Qj5̸BgsΡA͙,;a5~9'10< Vί]jcןs[|p+Sc=W 1>3uLijٻO0|٬^XW#,i`=pxWޝ$qkލz1pgM٪!_q菍pW33᝝oEt/GR8)Wpµ6i9ęI_aG1#Ϳ3.oضwt IDAT\j1JScΣ;:ϟ0IHBcd,Tֶ Av(*WYjjYU]Um7څ X2H aLFI LaL:ovߛVBzݽ?{?y}9 cٝ}=c 3k©=58x1jc~55]0b _9[`}i`Aak˝\W|d$/gqycǧF=7>ľi_Gg`M;X_X>gG.W9ZcϯsꩋUKh/ɐ_o5?'~?k~fc喷uy?{ɱ ՠԙ78 G=!&[^_Zy{AS9X/3nj}.b_i]K˴ EE3Gh85&^|r&qL]đ={[Au3-z(nϪAO'=#]trgj1ztz5}/̔9x6G؍j5Ib;GDnynN7VNk2g1xi},wƯ)b[7nsC>ؤ=Os89bh3}rejOr <]O|SyF'O/a}N\iϬ+o_.?W\|:zk3]~zWxc}|:m})ǔ{6_= g7W|{.xN[\4V,.ɣe>+ZG|x3>1:&Gg35ε9ʷ/bI[< #F O-p5/An{ԃ +_ b).=}3`¯oOqyԷ/w\^ۖ?y_~쓞<󩿺o N>'W{?뗋.89_<@5Z~k1[frwinr>l-o;w3{缴MWP>nbĚ뷽+yFՂmT+t}7/%^žxIDŽ Bå7OH<]~hMYzzr]ʉf],z@;q6|ɉ/`_=êxSs9zM]>X<>|"O'=`[\[͹:C4 ,>7g; >{@?\ke;?? a^OlbMOgŽs˧7uL)Ζ9_Mkb/IUԷ^>ר}'5N8:Shn0iBO>{d1|p/ =wjg V/lõ2U\tgxqvq:)Wm$8q|w]_|v1ԯS_zOW[wZϭ|15܇GʥEΕ^kcL>XONZO'fOͮIg`bNןpuyr^][g{otϕv:sq=`s ~q0=LxI+=\l'8hC̩x#o$hF/^Q/1_zfi~"ekȳz/d}3ª;Ժ÷olYimx:XAL]8O|CSZGYCm=j#\R__̵[q#A_0_X$9s  sYb˅~]??{>˳׎}WSN?}y{޸|3>-խSO?c {<տ:W\1+?Ƨ|#&}EWٟ)wk~ilvYj]x_y8t=²[#mwb㵷s 8Zjo V~f=-֞uO}ĻM8R^7bʍtg/rZLݾCywm'>;.fg^}tx`>ꋾ)_A 'Ĉo#t+t\Gvq؈..7!_jpO`O°ir{Hē_O.;7b5N~{h&z8N;/G>~1~1>qZ]{F=6ltN` ||Zr덮&m-o$xlq=q472y x״>z+=Iˉ\ Oy_{i.a~]-8kĪ|)W\o2Nsk.G],_ ䷆xՒ5x CzvLp1#,/ N8]kg{Ǟ|j6L+>(G<<>z:#ʝēz4w]̻>|Y|Ñٕyz sB_vsg=sZ[}5ҽO{&#|>9<_G<.'nO>Yvs$=%tyxԱwzZ?B{&ή>zZ+^,Nڼu<Ղ#OG{ZsS~krIFX^1|5qW'txR/uO =\omz/Z^?X+awZ7/{×^wsw?-xS~gk~w3nXy9g7cfٛ_~=~{~'4L{6ړN_p]ӮY!}:N<^}ڗg}W|ØI4?`+˭xc=:d7RPx^-_UkuҵkD2/( CZ.=a>OO?\a7@7q}ɯ.|K^bznz|Umjʇg^8D̾K&Ztϝ6Drfn41=HI=vB_ԥIt4~|xnT/~/S6c}ы=1~/?>Fx5;{(3t{RULگֳzugY~ G1 S ."a?G#i}21!&,.bah]ԛX6qHpZl&F̼3=jS8䟐tӭȼ3u׾|=R_\NOH}If-Y|7?{UZq]c4̛=N N 5[k,~>99Fr`|8x#C"޵<V0FǬf0퟽3W_ۋt~|q7z=ˋo9l).^aGxZ|qC=ԫygo,_]?>>(|#[[ְvU[ͮZcX7\| c[r}+}l/k>v[{Wi[G{ WI[y`ՍwbM?[Nvj5u6Sz%>(ߞ\,5fޞo߳W'>;ޜtX;`\<hz?BriPC\1o4ONd^.\m5_~iorqsȭnË'm>p+X1q6^M_<yg8ۜ k]_lwԆQc5Ǎ.Wh8ðqNK`Rlj}MlIWzh qMKg凗Î!V= -w7.׀ň]}bk/_g'"?~o-kTS}x[߰^/L!lW^,-F$qXX~{"0fz) W6>y o^?x /| O>ݜ+bh<3M֗r'}}yt}:杛Jzt^̮|WK^8ۇM|$?x=_qQ:srS~zVGZwTC.OꙇK7hӛ=5wrQKs#tޛi_C-cI>24|]C>ka_3b&zpӵDžz5Wil:nW_0>2qu/3wÞc'1/T]]'?_^g.?gˏyFe~˭p~r-oYws?y#7^zϯӏ>{]~w߱o}?zt}kMl>b>:pf p2{@6Nq8[3|X5ɧ ^']x8;aIyV[G~O_Iup.6}`˛{QnxyWn}C=oY)/$|aXs/.7)釋WM hS/#gMm9ip ={uV^¼͸yxR #6m OU׾ǦI ޞ%NaM\dhk^wgk,tY3VM.qNԝsBpT9f;|v/jˏ?7}Xǭ+I[G`>.FӾO|Õpð!5a orI{!^oPdn`l[_M`p [V_ξ&c>j`>ՏCOϿ_\yFki |ԇ9R.ՑWtxH*'Z>9/r!o/.?s?a^.է.GO\NY?_nyy#n47\}O.7X秬A=gyЊ{I1x/)Vs·̞s\{E6{b_)gz`~:l\|aIz.ć}v߅t0O›/Fx7b@ալ,;-8Ŋ{i&0<7g{W~;L1:)nڗ7D^{#7iކY7\a6ݐKʛxrTc?C|{uʝ=xuܭ}s/ כYu.\!;$pyx&8݈on>L0K} :Gh|)sFlqo谸ɬ\-Y/ռ8=cՙiwh#zAO?[Npc!SR]s~8Lq>irMg.!OIW?lyOt]uښw򅟫xgּ9?u =ҽ<|Q/toϬjMgk;=`Au*~:tv\h.Qo&_/^,jl9VCx2cū M/?[_YKճYCpol_(9ۻKkMIJg7/x[ _?u,?~wk^<я^޸uG?'\e/wW~+&|}a&7rw]>'>qLגnlcXל}Hʧ^txqt|r`Yz%LkgW/=y|՘v3&޴=9~ou'=񭏏4&^_SOR]W>Ʃ.8ޯJ~8߇Tbj37<$Oaotz?ˁ'lR/2\X_|{CF'02/5 _z8_pծK~hp͖;ʅуGޭ˕//~x\FuI#+yO=kk'`WlLn?8}0$8K앝C\oE݄s m!fϳWq9Ks}g{מs=ޝ{qta9j >vlPGlR,?\Xvsq#CUuê_-^KaZ̃~9ݳ?g8+~7Nܷ>YKj9.^O+-11\\z>ŸnzTzO5aZOk>a߁vغ8`uфwwa=.mNxˎ]n_fpF@|˙7=ԐgiۍClkd} †k[?Fntq냨"Sn2mx>c e$n-[0{=;O}gN6 W8s an5-\?iO5Oホk>rp?[? Yt ?k_>W"{Ny>;l)5C`MG>5 iM)&9p#Lkm|t5a췡~=[}w]zg_'cU/״SvJϰ⒛]4啛w"n_='|{`a?1\gyJ:;Cg{n; qCTo${Ouǝև{H97~܋zl_D.~8woO?ygo={V=GgFzSs Lkoݭ/;\lQ\6_"Ody t9sOׇҋ/zˣ5#~}i>K{XW|ŧzw-\3<=qjX9ǨyT'|s\n'iF_OWc\_N?b՝lqܴg#Əcjvx1C|zo_] uqOz1nJsQ\r#4L%>q4o㘚?3yzceb^_{-FY~q} >R?Cg?>XhMo>pp@弗|[+_k?Y_.^?P^N(yq>1_5;׿{oy{{o۫mǏУy2m˿h02 %9ݚ<ܡzկV|:|9Z3\Ȧ1{܏r~.]b3>r(3W^G<[^8)Wg̻6mof`]X ꐘw)G 9|4LuF>2 7m}!=$ ~\>n.G Û0D-&UCyj>|gÞrgZOajTӇ)SǃC/\z7uk<6ʋ<|Z/67.99ge3bKf^+O=L&=0rC2cѺ&GsN.1^L>sg=k璍Ӝ;~<=!ix7s:qap3'֔/N<6A`p> uhq澕#.&nnE}vՕcȉ7|락h WnG.ZG}ް,oʾp͗[j5z+Ź{˩O?{fn};->?az7=~hO`xX*=Ogt59)~;gbzNXՈC3Sspb;4<œ{ț5z[K}oG_pSx|i1iOah#Q>dW')]=uz$\7lx]@ ."хmQpn(?H׍K>W ׺tsm $8Z{x5`ϸ\u o#|08F~}Ԩ>1|#.V~4_u#?$[5]o9՗k>B\W8I&g{Vmk O ~]8^&._5#kWM,Si]twW>U_ly&NCFuúڸsWm$]\/lҞ0g0^fH9O׮5jzFY~׹k5˼𝋰VzGW-ڽAl?ʥr_b.Fj gȃKw#c314ݜȧ^xj6`\}m>t)Nu0Ƭzkn_O1y?\a鬱Ehj-tbh㏛=E~?ɦj'$WQKN{nU>6|=ó}S{ozի냾{e}weynvyI-7zݫ|㖓[˫_/{ٱZ/u zimռ^}q*FϮ& ~1o^ð^b?>x[n8q. %/0?L5z4ؿzoKq'GS\G<>FK-\Ç3/~={6ć}v 8/4ؼp. c'T GRk|25i<C{|P7c;2Cи~=|r~6_=8\˴hFy >o_<,J(i.\? |.vX lua3ŅsfP|3OD_SX6mxu8ړ'gv]_LΈysF?\u{6:{5=pqU/_Ϙ> s>Їlթ4Ago勇 .'+Goa|qqʣq%|оvVSo&ԝocEO߾63t&‡1{gkW 77@Eތ3)&>f''xaI=~m?Ge_\ruxC~|Ϗܞ>]~|a7o~sȧֿ{Z~y˽p>zլ?Oxh}1l>BOx5f|KX_uf٭x5qsk6\x:<5W;3TtÉgzty8&7[Npa%rꭚT;_v {~į 9a߁]&rq;h|}1eŻй0.xDGvq?7FHL~:qOp~)?o֭.m_Wޤ{fw.Su7K}KԔ?5[:ۚzczG9r!-&x>daxFļ!.@'k//x>{?|{%?)0/7xZg5g}#.9mO N-<]c#|5qpݚO_=OtDoz ?>oCkA!_naח}'i3v+5ri`pɃq tڏpx6/Ŋ׋5k3ʕ?s5z4\ΛkQ:~O-Pk5ӆF>vͫOg 'ϐsB;uڛAskߙhuYsgly_l5M>>^N5}Jzf|z~wqCk_9 OĶX#Oa}srzh-8 bIp_N1gӛ'=Vy}gqbzuՃqfruGqؿpϘx5de9TE7r{.w;kzot[o?W}^-t=|v7N>ed}w^X?O|k{׿5=zqZm18cY#^>=)5[>ܭųX=Q.jYKy}/7kkk-ݏlzi0Z/7]/mz×CoԳN =sm]nw@t.x8$a'\1M'&GwC^=e(6a!47Fua{Cg jxS% {jM?어eQ}pwW~Һpv %z{Փr\ 5>Ó-=6uQ!5|{IWG^6 O[ 5v44czjZ _ga+| K$#l֤Dzmq}!27EzU_D4gW{%aab⇙xs*ܽ gOA"}G;z[+?߸qщ=2Z,6D;-7yYO=Qˇ-u+Zȟs0Z|bV>sAxgX늓V?|q[/uZԖK׼>$mTFgWlϟS8{)6:OsN\W>v}9$ub+S~'<0Kr8S s~cکj؉%qX14 LQ>F>zoo:|۽1^+Z lg:w-x|aG|ֆK]ksX5 D.NF9&l1>2\uxᆴYK wyp©>8V/8ғ?\Q ?§?}9eQ{?{F/|b_/7,' 7G|rK?q˻;W~xy[ֿЛ̵uH52Ĉ}0z`1k}<a.nt ӳ9/XŞ<_>|xZ7'6gˣ__D]jQ]]~̚GnOa >aբg1RGfG^ēxi>^Y] ެ麔+{]veX En:$.^E零CH<Z6꫞a5Cu&W7JㄭDZI˩rʛ9jWY-_$f[xiՒޗ7ukKD]/$↞a RtkkO]F{Z$_wrcK:g^=z oyMZ/mC)nmO!}9ח/uM8o=YIZUgLCʛ|~=g / ̟|IǙO㜼0M냰5uKOYVgtor'b0kYn\_s9s?%q.rar5iM'tgky}W{|rԸ<'/W$ݽDc>/y.=3{9bn-jzg|W泷₩|Si G^j|o!Fa[y|tuƲc?{LV/0//Lbn ]u ofguq3_F?9äxqфM ;}]x7{w| ^W|a]ϬgO,78˧o6Mn|XpY˻o[rC`yhMs|F{nv6aiXՍ0id#_}Sf511^;cWuެipl _Z|gכ~n?,ѬԒ⢳)~K9a߁bv.^ؼ0k2!6A-otbHz`WuŒQ_|O0ISojf_N+.^os?7:Ո5NkMl8Ǘ2Ew'+R t²zS-Lk5+\8y>w}*W|ӆ'z2㋰ՁQӇ~|' U?aӝ~zܽ>[}f IDATpx]rg,̞3䭖|&+ufٰ\,.ӽçv"x>ys̭hUr g#r?= i*MWaSx~2yͷuMW⭁OzB~īgˡgW?|8|gV# >o_K=`Gk6/{ϭzǣaN^ClIU^9{^OL_br4gtx`pL񨛟j0|ľy};&+ow ?3'3O]~./7w-wmw夳|]w.]rg;-/{s~׿h:E?zo; \綨K[Grl^W/5k?FqqN|15~l0W6)|qxut>i~pbPCNyq^\SM1o3\{KٛhlW>  v\<e/ )ށ7/8;L8-C~U+7#&ob=Fw8aoōM _ > _=Wa֐#rJ9//]lj9Օ'<$ڤ~w]8\×7:m]4N[~X9Luqd9yA]|T?>w)v3w`qު]]yVt|910pļk]]~4K&?{r7z ^bca8A{ߑN;ݚ`:;h r>ϴAvysZ3?[NXN6'w<՚a⋫3]|γ 7ul'n̞{Z#>5;~L?)]iߚqW1=#}ucm-r7/q| a>9\q:=~#/[}W-O|]ܾﲏ|޳|r߾,o?.g-ϯWo_W׼f*[ۆ9ݚ5o5o-lxnԃx~9#f]WX|䪶XlzC? ]ϓ[ \<\'k >=gbވϳA?_ŽsA|x=߼u䟼z9$ws'wsbM߉"NH _<74ii{vMzSgAE86\5zfI˜ǕyCŋ܋ZO;^}Όٓ%[~=UwtGkN>녟9֗zIl<|r̋H<ج~w޽332ycg,<՘gs7>o°'=ߜWqۜ#~"Vn֗ހx{)־O&GqP\x G_bdb[o~1C،W/蝔W=GӎCKxjͮVMNG9t"_=x4O=_C:NXdOX=.:7_~.Z?}_ 鷼xrOf-{JO&6=1<;hbǬSc77/l| S7¶a{3 ~&?tZO =V6'f㘶i-b20r&g6(VvƍG R^UӾM~ O~9.?:Iޕ7/M9?\5+!C/qO>v>SX_Lq~lu7anX{&1Ȏ+}#W]CbpQ멖88Cq~ӮmDL^2Kŧt&xɅ0 eOz/WV5d6 W68ɑ OawӰ=owʋ:tO<յ~y\57_]CO$U :x9Żf^ҭή^fSO u׽Z3Zq;o#>ss#?.gm1z_~.3Æ3D Uݰ|#{@6ta9jФ&憹jöָY<{OSp~omOAKg7I' 2mr7oʙ='ٌ 3}pիWO>ًׅw\_\#)޹kݾhův}|2m|qҳv1yͧG_)yלַAG+.bg/<7?_G8Vu/;wy{}swOy壗\|O-mnm-zwLbsemaG][|pawس.(ϟy!8Z'9)N[Q_38gma9򜉫=zZa:=q5t硵$ͶzR'7`suR0j̽.W߰]ɉ|_cd^=%A%r8݀j|s#8΋hg?I0)^qzp%pAn6M1׷Gg5[ÌM|~.d\rߺH}<^zW{o:ax_mxY]p򷆰[`}o~xa7{k/ {յw'zgrKrڨ'0Wʇ3?}x:CpD^2{/ 3׿4ÚgV7{3'gN&/D=ʙ94s{&v04iM?l5:;?ލ8㉃&so` =sRO(?/5gsB_?v`^ۮo;37s &V"zHo-a&s gkoG_uYobs䯟}7Wo_^C:b71,g^Ʌ)Nail|0 1kvybR,=jѭ [m_f]L |屫îqy4m2^g?Ջ^5s=k-}r;yG/]Swmn%/YG-o~3돥{Wz7g=kyw~7U3+~ǖ^U8VEw}c/{W@׺}jO|yS^{&>ς'q'd'К^0 ؔ3.M +ZtYG=Յ7oMl#zVZ|8z|q2mMA+lvkS<9zć}ǹ].nbr5OktAӤڜG_NP7IJ'ہX}6fTsI?af?+M{b$z@iW~з~G/3.`X^}7˃u瞳A{hξG.?Xl-1O~%?zL!)rZ۞ wvXs{Y{;嫍c/b|)8=}jX<^OX\_O6OzO낫^\$-fC`&y21&v7o4g6]k[{hx1Fg?n$ -']Cofr֚[ꑴl1'>qlz#8u3d=d6x 9͝39ģ0j↹_K?7{zQvLspQ 4nCIA "A/)oxA7H4*9ԾhSC$6ЂQZs~R搮gkq]u^\ko}Xc6s𗷸t54OOO<\?y밯z;c/܍G`˳z'3ා5̗#^X=P^C,e~x86.߾|Ǘ~߽||??-ry;yytG#'Ǐ/O_]~>ğ?|&|xr0=hsȍ/kṴ/UrU/^sn=Ձ7k4mOaĽmt~ 8 9lÝ6#)a SNXs)O ]jAbu7~aᏫ9_7c:N8@ b$zg'q/q1~>_\?GN/g"?\k%~8"ހ7=i}yQ)|?`'N/]僓CF/~Gy%ձWn>8b0/][ܵJ⌯5-_hOv/piH 5t5֔Z~|rc.9l'6;_/Ns0im85S/0l<.>N|> r78X<6odǷ6> g1O0]< .{ZX lp'.y|}Oy_lR W }H1_fŮXGi~zzKZzb"^/t{~ #Gn1s"{aN/@׏rwĩ޽vb y=[\XӇySu=K?,;mݭE/px/&p%7X^0gS|;o=׋ ,}_nw (:La]sz:87_-z凍pf%㣳+yy6DnG|gٿ<@fA_}To[={)O3::ޗJߜgK5KǻxkYz`'aml^Lok-ښ/],_c2p565/5H:ܾMjŷ+\p=G{Z)7Mko[{UᇵJ9돿z=_>6 l"ˮ)n_xg"CyLoGفv=חuGp>uve7>^>.-_ͫjrOs6zW^jk=S߸=ɹy!+ .C=P JI'y=nV[35//LjSA⹛}m~_?c1tmʋ7]|qS#ao^t{x΃mq|+ۿ;//?F_gow\˻G;bGſxrF|[9Oo}\~Im>G>r|=>uKQ߻w|7f19|jt=#]ώj/ [#;W+Wn-8ØO=T#;sl-[NcynaS50 q}ek/nr7^dw#tìܺrIj/M}﬷ZY~L5i|~뗟?9[3!njo|=[ IDAT׋?b ~oU?խ'6\z!N\hR~8WI/տ:#gLe-jѧT~i=^:O.U{GH_#pcp_{?_K^;y!Icr}6[j[K\rۜ>w>R8Wpﺛi>knz~9ļzZ}8`sNkp볟 l=jY~y g[=ZTr˧9x,/86QZ/oiiÞK꯺?6e}ԗxyü^?|Q5؞µŻȓC<~4OOwն ^Ouqʡ[ _>p}__/W/o?|~xi~_{~O~7ӟW}S?]dlMDޮ=cw[n]+r\уy^h$^ז/ٶ?Fr}pZx¿CY6>=[yk8s=+*>u\~uq;..zd1>eWCA^t$~Rpxa7k'zQox_'7^aZ't}JL녋'/Woz:,2_CױGŭ5ߜz5y yd{W {j;Wx~Wڜ OoND /0r`޲ͫ&j+mowaöo?oVWF{x{uVZ0Fi [^bՐ[>լށ'*ԩrwZ6G~=]V_^&1ǭ7}Y?lf˯'9渶v{j9xO]=rժ?x\ ^j.=-& [_S=U<8yOXd_|<^:zѻֽy|F{Ň7|tע~ao=܋AQ8a⎫$3o>ZKG~m)rv{kGc>=?JC0srwq:iF?_5vr?,kP8Z]>]nv[4˓M/;K:}艄].qWʡW¯/ڮvx//_;u]c׾9k.3b8 Kb8›޹,'l,޻/^Ws8=[ }=-~ن/oVuʑFR?r coaV}8>L>]>kln> =w@}_)_G.q3^ƗMprO磳g]r|4C xmTG('y0?|ژzx\C '\|FN:yVfǫ)qÇ_XV%|MˍK^lY &|Xx>Zl{@g{[g[\ /̛Y/n촛k/˷~KaQN.[.|~Oբ?z7@E΋}ٗ}a-o9{^wGcӟ>zi}V-s6ϰkn p0ezKmO$ CVo ƲY_k?R[ ueŷg1QbYŘ n[io%jkb#jȫjs=Äot])>>u\̫+F퉹3l=lעk^7ꫵG}b5ézoUM8|-~_nt|õO9=;k%:{v^juOu,s{ 5;]{_Mo o8pB|3O}L70г?^}w)ݯƊxcsq~=#-Nm~‘xi}yHV?\'|14zG")8'նWjuxoȧպ6Q+^5<]+ZՀ%)0/zM/oj&]\-Zp[??\W0q\ OŌg]S@=/^Mں.7[?'杁pot}G[s5km<93 sUz 5uhMYV&t״<<`&t=N9q.?kOu򳉜l=y:#exƻ]47B찣_Lfpxq1NI"F%b=7틾c{`VïnvSѾx(#6"ptq1}W?8)>KY-zMZP~z. ZivسgԪvӇqj=>&׏Wݵ=Rq=r_=6_<ʯ:g'j&o~_g ?$I6yiGqRm5ǿAp!)uh?5ުO4oWCm&1|Ǐ/S'p]5ǣoz(|s'pN$^räŻ&|rPM7Yǣ~XS=Mc GVg}΋9~7ә謊+.?jٵ~z../R;,؞l몿^O[5Y/MMMz&7ZE~~jď+ݞĶtzR>a \vrյo ҆~GݺI8{baqwkwKظs-}h^]g15|a=a˾rM݃i֫9}8AiO‹t9Ր'F]<:4p5]北&j>=Wᎄ]-^_V|} Gs-'bq֔u1}0ʃ+ޚ:[arWXT<=TܗC?~wc׻{]t^ -ߡI[:(dz'G}~4Nqy=ijjp~UȜ~kM!ns݃>mrMaԨOl^k9V.?9=Kꉈ5i;@׏r.sL~Bl!]IiV'|OK*ƮP,?l\s]⧫u67/;=|1 'L.p<[6O?]_6piktx:cWW [CVZp=;|w]uw.Z^nc?468bE=Úwm/M'{9m%l={67sӽ)Sm./7n\>F?'C8q~pt5A~ؼW1< y8k-\\/ #L}ɟ]ot̍8c'A_lgL8[qC g|kko_j-x #7;,vÜ86W]?su _/n?ws+ >;/ǿ1vts}gc}RRjVg޵hbp?xy#lκ^̷V^3NMֱ8v=ѷ%||]¾˾E@=Lnn~;l8Lbh^BƵy+F]>ڪ{8>V 'xl/0^uu/m>Ӿл6uo8L6"呛էZ#ZI1E&O9aU'6zf<ȋ`:t|u=՜N6w艤uƖCC'S葈q'wjNn}ݯH=~`'? O``j/|`Eyކk#+7OrVVS.H'p^?ssWjnKlEXkdZ|dyD g-ѣWn-.\)Fo[5l܀36czw !^«/kaSN$}LN7':gЙ3W~kvx9r9q8}ѻ_ iiXa+qvҺ̭,q>6crg ^liC^4Gy1ɳ{7]^>87u˓G?Kk7=LG>\nx۹p3[85ׇXk O _Z,gϕ<#7'8_N􊾜]jC`qi~/Pq'7>z|9/wb 6|4n7_?E,W=Ϙ]`17={#!?|:';N<\Gx1|Ϛ u!nՀ_ KzeH\lq4\=:KTn .O;, %p8Ӝ޼˧V_}ɞCn=~Rojǚo_y#~ޭ.{К;3%xV]u圹˱5!gXF>>&˱xحN>#NI5wvRWWJgndވ_~=",W{"n]Qp&:z}klu=CذYy8׏b:^?eaz=_/^Bn~:Zʃ/革^ף}^E?`+ǟͯc7jYW/PjŎ4XKaZ?xz^lU!Zd1|?Zz5wM{޼ob9{.ZU317%hqJZƱuIt5ݗW+؝]-C컱.t8t.*m|rudaDM~? /Z^N&yޞ0[O:>|s 8W\K;on6v^YÐ7/s5fGRk6Ηʩ.M^vw~c6Nk]?N܋q{g싃kbُ3%{w뇼ypN%.gLՋ;?~}5{ߓw@_yONI{~iVCzgoʗW:gfVp\]MXqsWm\|4vdn<h-p/&aԿkoCNirϘz$_j7t͚v]jW|Ti9q3'QYaχypVٚUJ9dêhC/yx?ȯ]j9ܴx/|:yޞs;믿Cĝ\k4=cw8kWv)ֈןM/9}HMQKIi<\_,lO|j%r6'gAlM<sk;n9i=l IDATq]tp|l?mԋ޺wȻOYNg3憷yd=zC{ } Fr`i_n||O -,nm4?4c|aΩh KϚV,\-/dw>cx$?ַw_s?>ݻ[?@!zWke!x5jŪ>>` D0D/>ӗ3ڶo(\"8ij ^niyd8֎c3|}9;ǹx?_17! =?ͰFU\>6/ڭ O0P-s94~pVp$`љb zZyvt5_k8'_|aɹFkOU/pџ7γ㬎< .حW85y=V Iślpu~G| (ye-Tnv Nz K}ׯX5™a6~mN[YOg]9p_?΍EV~[n^8n1az׋>7km[M©g-־f7=O1>È'־7K3_ZjxY3F9<\bɮOlIqb׾;'rd˅F9AË7X笿 OGObg[F {/}KxxݷlPpgmz`ANqO>^`U8SSk#%k:Ng=JG|צrؤmW{[Md,'< VQ>}wM"՟+yKDPK>k{fkMqwaw7vU#|y1gK/Y-kOw&[O5HuǛ?_Gki7oU'Ϳv8wfw Wq:>{c=kf, 1,wnqƽmΣځ5sQlϾ;O3UNQV/KٽO?㖯s:|E<,?_u[<֑x{hB|XZ0r_}֚ΜIy)gOڞxzk_WW'/}bI5‹Sÿ"ǨglYV6][HǺ ZTgCk_s}صVh^~~N|m{%gs°7ݡvÓz|YrjN/|q}Gӳg~Fuk޴n90I|q,F¥zϦa;]o淕eߍ ys vawh%?ˏ\~0cxox7om[xyNK|u?Z3ˍx?p!SsoMbԖ/|Y*߰x0Z.qgRm\sXxZO˕GU[x7o/D9Gzixq}_,Z``뵜j]}oY`ݏ >xկf=O[>Z>W3}9NB:pbi^5iagpϊ#g[nʇZ?ˁ[GaƖ/q< +:I?s`~v3{x?{'׿/}=ehg=Rp8\?/g po/_xy~.x{.?~eطj1%֣Ũi%QOK5xikopzgqbO=V\qx8HyɫygNY\:Lu[;$ͮ'ZDz_b`3`]{qhmb_}o˿yv'??lYojMo[ﻼm_{ʯ}wݻOȏ\>Oj޲֑O bFYxѰ/օ\go?aK]"[ϴjU`웹Z+\g{8 oȅ>0\ V|=G׏aؾifן\Rr|Za7_Ezi#_}G<=ۛ0q/٭/t4iv\rO+"4w)-!_|qu7, N/vP8C jg8 8=<,|6܊9?<|5iM8t/Aazђ/\n\q} =+kذ8?TK}Z≳U~u7n:5a.atQriun ]k=I=֯÷?0Zjn/ձ.1OCODM|xcsköbrIO|Z+8 gFa{} ɦU^qIC1u:x|5\=7/-+.3泷\}ʳx&sKh}Ztɉ nz9,^m=7]-W<_.W.י3P!O\ <نiCK}YR7w__k~_NT[z #B\y'{y~xԻW:~T=k FWzr`5yn;'[]ayn/4Ԣ>ںa3.?[ ۺQ>iYo~ x}q\o| U|R&?o/z䄯<9{0]+:rX,i8]rŶwvזMyXzdPȯoB){p0bW}|9=yš',} ݡ@5O]<pa= ;w<n>Owzwˁӡ#Ϩ\Coty/n9b=hm맞HlV/5J_M8#x~j]o}/KSC^>K>: x?NxHWoV j֫X|lrꅸ0{Ɣ[t4{=YL8ռz7ߙ+̑p(3ىqtmÈW;] $9_NVmzA`6s}ŕWxx1>Cb6't{G'rz:-]l{>Qj=ōfks֭ޞš֮%,baOy|pM t❗G>rؙcd Gx8 ?':_~kL6O#06%_r2Z}yO]>s?'?q]ox/s_W.?HZl{`N"pg]W~p]7{; C3H}?弔,lJW[} 5ʉU_YIˏz7쭯:ǫ7{@-^_a~ǵ//>t׿JeM[w>_/<fs㠋ˍ6-3'kx{o[ xw=kG0j0o6 wKZuؤ㡋߭ߪ|/CUWx)w^Z7 # 7Β0C18/z~x ^dzy}bb憛N5?֍tgj01CNj8ۜl}˽Μ7a֤5zd[3N1>aļu3o?;r6_?쳔WxXsax^w+겋/pll1{/?<!oկ?)s \p=pfQJ GL^6 [-܉u{~/=Ll9_0~[xqָ6.N= ; _ϗ_<<|߻uG>rK_;wr_ ֈ=kr,47Ĭi ؟=//?cQ0+8ojezNZOxZkn #߼{K:ymף|iȣ#O_oy˓/vj'._~^OL`E`淗qWvήדyy s};LxTZ&?3S []#a.zخ:$)V=q}o.?:\lzԯϣGG^,><"Vnj´[|˗#Ϳ6I1\0~i)75mXv#>?NZܤD0tl-q`tEN/??}×.-QŬZm/ˏ:Z8 ˯{\,;̙ZI6U\]?pr$Z;_Nդ[K\GkfpaĒ|x⋏o׶r\Z_뗟[nh]o :Ys~}aW ,[G~ǟ]ք|8p6>q{Ƴq0?=ʷ_>VC,>S8vzgy-=$/r뼏x. ^ s{o\|t?ɡxO/0r>=X~|s_Og{ /rDզi6 K'Z'ko s\-ͮ'֏[03OY8V=sG~ܛr~77;:Lzm]G>9I88;ٛ_΋ixѺlKgC/9k}MjĽ_ݽî{@w{hMt1_=W|rZG$/nuzC.DϺ|$+;w0̻=Tucæ Ɯ^ /b^hpwZW֓MO{@sjLO9ƩF9[7[MscEFzl^բ_{:h^iZ/YS^]zSjLcknYqlb<3zKW#t^[kںrĖy%^l5_cs.}$Gkv.]܀i?It>:%O,?ۺ1h_po⭝Wx:V3~并nV< yFş{S;ka $G8뱵/|ͦwoػwhԭkcuسn{93ytb-?΢q~+=;` 6j=>6NX_=ڨOs4crQ?&r7ߺh8|C/sF̨oqqS:|xZ^íXZ,֛7v?:í>/ӻe(J-B9D^P/@."/IXj50n.]\nl_5yrxIӏg>K ~}Sz2&x|!xT&^^=|p0[/h;ٛOr]<1XQOh8!N<~҉~^]3z h}Os?-o}|N|* 9!= l5` X> [ ,v{?W8=Ky uw& {vwjVW?cgH~Z(ojKkQMѮy.NVkg:^č=3Ae/yj_ Q;={bI^cG1hݳ '|];=3{\AԂ)./H3_g7MmSyݽ_smqΗ bi`rh;|;kyȆgLmT+ 9LYl]`6W~ӗnQmvu}GG̓[={VOgU9( &+gt^q!sż|CL 7_×z\m~@}In^3HZx{Q}ɨnP߃JcWu-O[K? jE(rh`e]nrX{1g꿵kwz듶O0G|I끇1W<փeKw#zI\/eOW7r k7W>or`ܧlB8@Q\xSэUp|9WkOu ؃Υ[p8_糵8Wwm/G7ʯbrՈ'L9yֵ/yܮl7LG\,9>.n<'??+e;{>d; ;`r7Kn>8>pT^AS>/-qU0~[L[}PܕWʫg}xMdzV5W779G6(W{%7_u/|zrHuxW>q֢Ntiyfߌ/|Qzw/\O=뭣~F0|mk<\[xxyj˦|ix{$~16DN{y*uigu?]νw2{d1KྌKуޫ~'8rqΉ|W~G/^>_: Q={y}|}9}*IX{uk=/;?MkokC}⋫ޫ?|<4/ʣq7?Q's}{+V=zK=o3yv~=Ojo\k\y-]d[0_]^XO=>lr}Ŗ/G/<=ػ۲"Q`1"J"(AAۀ[m ^ D%HRA% >[ o[Psy;7~c̹Z{N[g-[sNlԧng-Ll^'Ϝ_l9'6|񥳗?po szդ_~ZɝmrZL;J?sufN<;bm FKq mhdoǕ7|03!7F${9Dnptr!lNNu\6{HÜjbGK]n~3QFuO7'|R[78&`4s[M3goלڪ8.5?un+W6jinٛ'~8x97?z 86?:^<_<]L}Zn~\Y<_֦= ƭIyE|Sakb♶x&pQg脿-.{Zlvlw,=6}c?ͯ~|0>>0򕓽\b״o/8j|qI8O]ScoC7~6`_KK3 }Xy,U8>Мo~O+lĹ;)Mf~6W~y>zW ^l8>o݃7~r\x`uO5qμ,㓖O\VSmxqc݇}vu?o-pk0a\X.8h{()U~'bVߺY08qZ5WK:֙O_jGLy6UIaMЯb ͆=4k.VL68//cVlwجxⱏ?dGğgdq{}b<%k]%v| ?cO~:Z[ؚ9fb;~rL\9˿+6 /ߘ9'5_ V|2wʇnq[׺)=_׼aSN:[RqׇI=mY8y⁃^c>34|^,ӦΙ<)Gptu"0t}φxw ;hK;sa >`Ը6q06{Njhé'.btzчsrXMuS%1{Ưjl^%<殦5CE㓯&F3OO?tcM5N'bŗ3kb5"^f}bsvk>5_?yϬM} N3ljG'_ i>K9S S7qզ] ;jHS'bf[޴=<Ц5bĶs([9phnMhMq-ǒ.CwqӟcvcyYa X'YXM ~b'ց=~jCæ坹Bp‡ Wɍn{Hx/ko/~3ۓσ[{n?=59}־O'?yuڃ[mx{|ݦ~m%jPjF8k|8.ks9J:IygjocUWc/<\1t2m\W ovZm⪿bxg^}vWGg5n/kvLNXu\K}%M΃|8̗M|ي+ީa&u._SVrxӳO>5|;/CTY>82q4Kw+m8[zƲ!s#ӆ77qK |^LBBԝ|nD|luc9xB&'>?EnnƤKqu 1#|>X"G\i8y\l#:c}kd_;[8_3_d'la٘8C۟xI/LpuN_i46k1r8ת&ooL,~&t9Zf2a,yO.?ۻ1q5aW_zbָ|N|jsLJӯZ֡Ɠ>xjv$}TPZ=X߹K}Տ3,oڲɹa+m);lUÞ'Y{f?Woz/I(}-lUzϽ[y;λ>u[r{K^]Wm?ەKƒ_<|v[j{?r{A_37D}}e.}=o{̮'ͩu1Q뷏C∯ W|ܴ5bqq,z1w9jŮ2kЏO8>=wq0| clڱa7ua'O~gڮ}n{+~Z{?t/V׾=z]'N]_go7l9ͧy3_3޺~5/{thr5Z"\'̣/xғ~q{_u~2v5efsV0s/~fXq ;my@>>>>c1ź)_1jq`}Y{󞃮xIS_8=TotK7q$ޭ;ͿyLMr&fM_B:p gomqΦ.m֧6".;5f#͗dw|ŷͱ:׋/Ư8pퟰUo><]Og-Z|Qkӧ?ת><Þ--ƻ[Cuw9q8zX5c\i|~/\ꨖb쓉O0lI|C0ƎOѹC[|WqsBuVx:߻;8꛹=ѵOi/O{{.K|_u|.u Niοf`h\=ŽT_5-8uOY}[r'\ՌyT^O8~v}5c{>[8 N¨\9_^_ikԘq3}jLOg>gkm|b'֤=0Հko'᫟O劧99uqD[zWse%ɖ6G͚Z8)ޔSkpAb3zwnsv 9΃ kՙoVWyg1_uȼH>P<ޮOWKu:68ðo~6pZu]| ) ?4>P͸3ٙl.m6Sk*Lx'AX `)^ĉdrq:h89lq\x<>BѦtB0O6M_ _/\n8IXo |kʟ#?ו-lt$OfٍǯfX=Lb娵8g,NqɥI`YL&1zج9q͉X{A&͞oeWCǂs.s~`Қ\D_|pώ\8Çk .`֗t,`p'sw4Yss#r5ԚuO? ^79vc+']n֜Zs)?n}>?<{{wy0'zx}C}n/x[}mw5/]뮳x#k哞x3S}tΪujiM;.bئtٵ֋7_zrM>M=M'^1Pl՗%|?8g ,{ꝵő]98OLq_l/_z?ΣD-X1gGn>Wv!bZl>LyتMLs71qQ'y÷WkGySxŬ/{Y4{ >_&b5R?Q9/>Vlb4)f٬s0wށw'6?d o,Wq_ⳙ.:qq;Pσ5+/N av%s^A'F-lz髭\0DlM ]Xħ,\ %qV!OR >}\xܭ9c?w?$~88015t/*U6zKז]9/HMrXds?suW2 IDAT]LzϿ05dٟFq8\mxwZ G/a뿶]"=<K| :eծᔿ=Rމ)gd9U'aNO>)O[\י?]\|It'>^zLI0Ǿ&&N|͸dܳ_ܙODv=Jwcaӵf8_6'p~m4m|>E![+p8}ֻzJa7Mb|Wvo)< |xp w m oSkT4mJ*?,\݌xZ~36LxqWW\7pk[꠵/ ֗iM Z#k#{5O.:|pZͽr狃NfMl|jRO"wuwU9bp W\}JlmܞeSC>]#iEwg^pNCx{%g}ه8:\}c8WM~Gvk^5MM5rY;9wc tzꇛOqrY=͡ZflvZ>qqyNv4}1ŕt4z%aԮ}SݓCF` <_kppq[f]퓎mǾG`i )FbϭT5;|W=߽Ƕ;On}Gw}fWU'~wq=gs~۝~Ƕ{}]s}!;-NۻG}<}v{3=~m_G?^{Wc\kq?v]<>Zw_h뭏?qݮko>ʻyv19Tߚk_OqB:S ߱d/N=棋8c_x{gui,:/؈X"&Ӯ[-ť/Ҿ}`HZGr8kgqO0aJ\5{طyɭfT[5Iu[Ö?paf31ݱ`xi8Xo>þ#V;7l0m`3tQvqsC}|æ m ]xn ǍvjN ͅ u{u/~n&r2ZsgdVw6>9O5b1ؼV~rM Ls~7a\^~}4}ƅO|e}Z/Z4_q!5YpZ5W+=tw 5qϹdjWM~q/ߓ83;XK>>Mѧ>>LkV>\85w~U~\lr}<$?.}>cKl O; Vm5b. k-qg'eofKyf섎3qkuRq3xaV|gM3cۿlI֙}E̹YKpYf&}^o0^m4>z}rt/kOu-5H}=5r]7.Ekz>#^z̃uw_v{ɕ◼vGpW%֗?%/Nys+wh!o~vկ%zwlOZ_qە;ȻC+wMeuփs8.ӧ־K:RW+/y_v}?a-npJ^`/s5{|o]_ul܋Ϸ3DsK_f-o.'t-!o>ՊC:}͵5MOVoԚY$[,, 9Qak1> ?/;7ĕwֹÐ/oSj~R=t~v{]x.W❯rgKx8|;[eWyurzr\m%^ZϜgqUL˧Y?CBp.n[Ws0lʉ}G9MJ;pgt̓/X#md06N;)Fٗ)^Mئ4:$m7?7b9]b۾苾h/kէfoN@vYaե&~M_=M[qp1~0Ta~X$lr9|5ח~c6 Wf<|嘵UorIⲮ$o/ts9≳|Z{Hbkgwpѷ~!Ek]{_VGcXy7thLOdM=Se9K:Ӛu5nNSZ'F?Lqq&xvcb}39 ~39v|6]cr采!b6ƿ5zFߓp\$o`g%ņɾϕ.Sglg[ eK&n:g<\{Bc}k޵Kp;vio]\ZuV7,;~;eՇ/5zgԷln߽ۏz߸>>`>nퟻOZ/vKm_=o|(iYnZF]/d}<=1پNw޽_r3/ySN_ֲ95_+.O:a4kCty\:^:7|>)Zgo^p3{qnt}>f1ﱟًMO~sUSb瞮f9x|nҧ~}5ߗ?^<~\c}~{ؗ/I>{ZY~&w|lb5V]bx< 0s3}Olj:Ӈ塀ν KO͗#MOc3W1!qU[Ɍ׸5oa2kl[4_j2NeKǟ?<]46??Gs/: ;줓Ħ`IF.M.$a=PCBv7F7&lrx8g[oczjN]!7w~+-D<'ZYvZ\gZ nZ8y5|x4֕àe3֪CZ:;Fa7Rj [S]rLpgb/w8aZ8U3-=xhmp/Sn|swk'8;7mpƳfhF.5itjX5smD..+[lGl(~Zr[1p`fg?i%{l6uk~ǿ~Ƿ'=~~i?s{m~~~W_>xAG;γ\NU˚}_>p#:׼ct[mYÌ_S^> B֪a\~cZkssF֠ics<<0&"Qpr+WskruaӇ[z֮uaHX֊[ccVcXו94KcMo&~փ~xz1!\|w5ַ>R7npʣ/?o}[}}_ȡ.*Zq`P~k Kܭl.,=%P&rG[]ծNZM\-|&..܌!􋁍CWXW[xb L;̣#;l=fgaޚ}2`Y?07oJ^Ŷ!?jC_LuΗfob;FۼH5razO'[ahhM\6\/&\Xc]7✟:/< &^q ϦM)_~m-i{R=Mqjs_~saf|lt81KZOmIr&rTccXy{F شcBz+V܇tF`u.Z);8|lpM\ewmX_q߿>۝xn_%_/X 9γ>q5SWs9|l񛙝}K]?w^+={}C ׽׃[. ߾311i.Z6jέs sN?_ǢuV| gOԯz ^3w1ᚇq18 <o֜ȡVخ0L͜?cg1yɩ&=n6=;.ޙw[rko|on}lY_凿 'mg[N/o%x뛨j -}voûP& 1OkbHZua߷Of>K!0栵୫\smص_<i =1s=;.x _?rl8ʟ?8}R==)ͩPɌSC{sT+>5:/,VL5t\o%;,>9v.L:=5V XZSx,os̹諭93o8K5do<\b`&0-ԝg^hͶ0GMh V<-ƅ2O#ɤ7yί^w =4wkr7Ō#NǸ_^?;.lf/9>՚/>MmbqZ=b`L]< llS`gxo/m\&iԭE:²7/}y'm}aINjc)>'2r|b2ښ>~I'v3fY Dlɟ?.s/|t1l^FOLX#ɦO$|:㣳]fc0︴5&]MiݶG};8~w~~NY{k}a7<;zZD::g>9h05'o/}3=h{za>w{Vl)ͣy7w%8غ'lgkvrcx0gv\7Ny}7u)1~ǽ3ϱ7=s|j"'.㲟o\gþ#V׋uaP'70m4~74 2 FG~&f/jͻ*xy!w'WZ/tK跮N@XI O9唃GaU 4Gc͘˰xPԅiK&>mqUd_x7 o-# hrf7Gô؍mmo,Twq́KljFxh}lo~K?"߫5W~6}qNc &Ql5k~X~5S.ža;F|՞OnS\Ia䛵V _ bg+Qh6fs#o婎/VM0XM??W΋lauu,ZWi)ׯQhŴ>{\u8LpW[y`̃7eY3>&rӳ)98]q" IDATi턜Vkz`/ksO>9ެJXzW^wzhm/^h׼V͢7[O{Oo]\Ul׽l[_Fp.n/bgGWeК<ٷk|Vun|nK7z7A.> !ʇ'{cn֤5f͢<5[`Yy>qѝ*8Z X/Nq񵇪E k]5ɋp6_Wm__|{ì-pugg3{5?>{kخxo?%'}~◶mxvO~v߲}Wl5.?ѣַD9䫦y`knSh5yiRO.88Y}4q5/|⊭|s5}0$n9G)a~F\}[Ƥ9ثժ̯@~oL64?8}/Tn/>woxlqYˁDžON\r:Iu>7i]Eo}c ֜#~L|bg܅qϯ x_=~Jn"èQLVNp3F״S'lbr|:^գ$XT_lkk\x}gӯgٗߔMpLE w(;Vp9՜/v8 ׸iuPKkWj ۜa:^u31يi`fEꔷulટFG_խ/WR.~ve3Nq]k̃6kx P?Wl~4nyeFXν9UekXxg?>"}"4~&HkƮOYwy_f187_^a_]kɩϦFZ6{+-o)On}nݶ'|]sW^9/~sn&e5zf{ᓟk^rK^}Oڡnk>LyH651.b[/5ꃗ'Vu)6>VR=RMȌ%b 8Z[ _zpck䄁%Ձcl?l?w lW>>o?T{E=Pv;oۗ_mze;ǩ;|| f>\ W>/;}-̃uXMW|X?QiӇWόշnb<9|6k[MĸSg}HǗ g<|>aoj4.W>ltj Cas@;5Ra~mOkj#a7. +>>ajIGO[X} Q=/8V0Kk cz+&'q3Wrke&}Q5lX6WMdlC$S:6LMnsbԳ6rF>6|;'oyLqF5&z4":`\?L{cU|͉3W:i-)jKsɯ_|zνaUzZ ]&9MKO﹋orw@k^ wPX3.|SNwVl~}_ 9å5NI6qψ᪙'n ܾ}l~ ߬S;}_>6-ti\^ص}̉ 81?Ƴ<85no חs?Տ7|ƚ~?>]aƷG=j;A}ͷv~_^9Wq>{]=z 1씿>nl-s^Ϊ̻sw{wu׃[P%׼q=\/[/s&zi 78i(8`b5k=`{:&juㄙ5Xxx}$>bWp^cVCr5#q~ ;I_d}Jܟw~ϗrlob_tL[7|/vS/}vkiOn=߳}Z C\ֺ4_ֺpqb5ɴS0S°W=I7nb_Z<5 7@ a9y_k >7뇳NA]h]ȷ9<ه{os4z~DZ9XqN;af煓>a^Xc2NpˡUφ>UM\ŬHg9i#0ͅllxv 7= k7 />vIJ)䄓-2,^5{'A67CQIÊ_k~b;يD3:Y ]+0lK=4}/GuC`I8DB7j1Ԩ%roRTqxk`{,& 'Wk'vWI3פ9ᫎM{9o0ا5~H>G{' \8̓3g|{R<:FIkI1SN|l#_8u:qxa'&)~x 8[Λ=F-0~'15`SsCg<k/Ӫfé_ bp7y|㈧frjk%ƶa\qx5O~4iMph⦞Cpry<ͅkֲ=F+ }Xy-|8Gkr3{5C N9s_u/kpXa {_c?o+}қ|>A-z\a[V w{w7vov72.o{擷Sw_w懹ȇֽwZկy99Y®fڼޜ~޹ٚkscc圸CQ=բj# OӲQ=l{KL/9M.ssN$>FQx]⫎$-Okuk{3?{x|O,}]Nz'Y|ٍWd;Gvo=חМ}zë^]{} ߙǿ7էqWНeZ%ra3X:kH掠cˑ3NC[És[rW6zl,Nyyd/'ͧ7L>}j'Zcۗr/z{A?R񳅛1~VpsM`0 _k͘5w}o.pxKkφԓFќcmn<`pϏ̇pvC Pۍ6`|撫MK.šLrh/wnpBOΦNy9mY}{{ɨN"'J .58aXy&"ꬵ~Kdy$zZ RxH8>kVbV? +_똳kV͙˦g.x'qteo=hx=ώK]_\'C5ħΎwagÍkr[m0%b|'L5kd6X18521lo MmQ,m\u6󗋯Xs i> ?"rY~'8֩5wޗ\;5њx5{'❍-bh Bױkp 'nJd)W=U.nƳϙmrg00aL uh]WhG&apYf*Wo/^}Tk~ѽ#N|"S<ĖgzX7~`} Znv;nO\2z7^o%woЯ};CNem=篿?޶i;q>q=}\#z;GVn]s@s5йn}Zu2GqO[#oM;&g/=~ 7^8<.Dm3c' ]rg8Sƴ8(:gZCZxpZ{Uٌg7.  |ܱ}k}r?GrOZSo9wI|#=_w;|=O~v|Mo=Od߼~SIQDLxv#F5o𗿵/zXCRMȴ}8y֏ɩ<.F??kαº#>xӂ5 [t Xg'lؚ~yO8/ii:<|ƚخaԢśU)..w<:zX<ᩆbOZÞ[}y[_Wc4Q4gk%^=r7纚TO3[xwĊ;X9lFh#Mfed6y\rhsCᴙtr ;6"X>}/Wc7u1X+{k5YoA՜F?qǣF|"_a{a+W;g CZS[8Dll7><5\[r'bͯ3G~)&[WEP9Ϲ͹r!lrh$L>)w,vb،シ募9$}J4QsiaG:ߜ#jT -g_}cͼ`&^,v򇡧:? \0ԧHn\Onras~Wll59 \CR^儜V7{c\r=do?kܻ)zfk/‹>t}r[w?yv|gp7Mk`wl_t= s\K~Gm)/_OlCK_n;7vͯ>ُ|5|"Z}/vʋ^}-np]w;h-j4N~ð:~Z7|&tZ`Hk=aʓۏ ?Zl~ӫ\ۥp풗E챏e/>a}yK\b_>Jx}C3O[G|YŮyNgo.89pY~mrͼKs4<."WSW|ͯc'8GfaCʯgGlCbG9fsw/(Zwaߙ?*uff=rMm6`6<$~!=bfi|"oX7o]_]y֦6sS&k \/֜fm][krQib콳L' XtcZrJjCZ}do uWs>~5Wcps~.9Uk/g?$X?f-pkAg{wieo~j3ۜnkPl)/&kORu>O\LD\XqpAb50__8v|Z0{8sS'p'\5\ixݯ7.{(؎7~RjI>ck6_ᏲH?*瞋f!]^11|b'f%k;c%~rIq)<{ 9<o=Dጵy.l>{]o'^~>}(+^+vK^r{R;́8<|Ӯw8yA9Vޏ=염1}?yO|v|—]y{_w~{8A=Ikvk Z;^xZ4X7C?k9ëߵM lty̮kZ?끩&1j#.<G枝b`k>tsߋ5_`s6?#O9egGzx{l>v~sk}Qwl8nF{5'}_oӝeJ}򈇯syK=@OyXCa}5g>Y|Kr|3 ]m _|sԘ|ajq5I'?yV;Auo:]M al76O"v؋g{9: 8D g<퇸×'g.{9O4ř;/] rnaXi=Ϭu'|8Fӎoiϫ֟~쟣os;DYk#Dh{!coR nú }6/^x7i>>s1Osш&.lvZwkzgOzQoNMI'5<hq/fmr+~Ӈ>JfM0~N>zJu_32#k ܚ+ro'ƱcV^\W?N#:8jƍw L|p)q4jzj)?Ӧ4ƯֈVoa \Z-v??;)v8֏8pNi_ϞVh-|e:OwٚOk_ցyMS|8}y};_559gn^3nPӶq84.Wc5Wj=˽ǝ5V=D 1OôGvo]sEø۾\{48[\^{aC?֣]x=9J^ub|? ]dfuv_v _Oʯ'уmn_{l;훾6Sӯ?R;5#&wZW>7~>'u8%V؉YBV=>q ts.7pQ_foϫi%.x]m0_amȋw?#Oy>]gzgK֗m|n&.]jW;gwm}%N>y{^}7~?{׻Rm}{k=͙ͣ p|s?ǬI>uޠc]x.^;]=G䉗~߻޵Moqozv.N泦a{?O_ΟC?yퟫ]G/J51 IDAT/?cM(aux_Y99l |q΍10I4)sb˧&4&kj0b⤏9Y9lt['d֚_-g]=ܙO<;bx\fwP;3vbfq6Ɇ_|l3>76}/XxuA.}Jvsc~aj-@Klɜ\bNhq\Yqk$#zktZ&}mlg\\S5oGqN\5eb7k3N\knqi o;;i G1u9d^v0Ӷ .laL}wUu?!RCBM ԡ& Mf@gFR ҋK^0(lk1^~k}󜻅ιds|hCZ{K>bfnir9Sl۵G[w-l<0{o3roԗK/_t\8Nyw‹-yw96 ͮ՚؉t 8Ix;εp^a?m/cЮۺ6Q8}k̸;]rg}y~z9cOX6~W|ݳ 7mog/׾- }G;Χzjh[0ͭ5\.;aÑ"q[ p:gqKuׂ6gsW}ű5xv;䬉ְj>iTO1q/v,r+2~Aq>y_aMos7X7.907.wu].y+5/x?~awc<XoUs5UKaNIϮ'N㤼s-6bO8haV5jN77,?yG4w3_ /_6:]caYƻ<\8T{1AEXG4~l9?߯=X!r!>?^A}_jʭyW{EM3kq=<ǖiDb{^.6"NC|ő֗[D0ۺ+<".|xj~$NZx㯾8i,>ZKO=8i Μ;>y X|R 4?Nb\cyoMԺ9Zi ιֳZk}xZqio [ Vg^ }򇅃 gv>v5xtӰIk;yK77\cI5.]}?mjfk}5'r&q+Mm>ΎI103Ov6Iű\h؝t<0Ŕ+;fvyj[Gdg[0m _u[?7;Ͽ'.{o<⯖n~-a?!o;f7{._\kz|w [%ދ^;=!>fz4}s3N[g'ao lIkS<<۱W^v?qVݼ:Em=90_1}By}h;lcNkӱn^rF]öjm–`fnxhmV<_~u䧉9\W)VO[!8\W];?~֓/`·?Qq㈏Oٍc<4':cZ6ljh>q.u\ͽ8kn9ϯ6;-FYMpk0͓?܋ɟ+O||Օ3g~N"G37"Vk]FGA<OmDMbHzL3d^8Vy󷿐FښXtcV [g~y[xЉms=]߳~ ;g+;⢍:7:7}&k.n\v\Xq-G>o{|<@?Yy;c9F^* UR0j}u8޸!ɏ|%/'m}刧?}o.]㻸^'uh]{m~Ao"{?<\_C1Y{/QO&jiIk @׀5c`5V)NZ/c\M\8=u5_V'yqJϞm|a|;;pQ}z[/oxɋ+>wH-ǍIl̑[jèw^Iuhg}9G ˫&+w61,qRLb뫷jvQ0\9_oH~s-ryƯ{8?鋝18Z;fM냓9NO'!q g|ىuΓ]rӳ/|Ըzhē_>.2}5al6L'c4xAms+>ݦ&ojmB' ?m ܤs3EFTCy.G?qwqk>8OजrTl iLך~5`z$ό?õ֬Qk[Lgb [v%œӈ|qoiTsmu.W4f'aԧ7]lys?-u1O]\S<\5ldos8t5q®;<G9re`a_'./,/xSN˫_*㝅=#uNfskڄ|=MZ?<|[ eׂ4=/s]x|t럯|Ƥt9f,|']>ko[?8V^T5vk\s}G }\ ny׽nξ/|3{k돛}zc5wu#{澿x|>{$jz4bݜZ%~:rkw΅vg͚f.k%Nӯj57qz_^ģ=9^ 0 <ĕVcuo{_ccohZ 93=ϸj9s؝lsƱSh.cU jK>}\x[8뾍{|;VAn:AyE6/+v.°nq|6z>ZES.8]y+;x}W8^ska_"_~s }wZk|H4}梩\eoBlǠy׬q'\b⋋]-T5%jks|ؓ93^?a¥Y㡹Г\lt\ux}.fD]Zոyȗ6m_ysxa\}nOµI}Z~I50εj')gt|aӸ vWCN~ӝso 9W+|r5< {6DV\,k]Abuڷx[yCW>lkM^y`4Nk0aMc~97[v8>zj#Fu`G%ޘAG6cUGy_{?g~˳;>2~=p]Cu:Ĝqgnͬaknt 'V>fu\?-oc:)n^x&9],-u4|pi̻_m3̃>8smeor/>bxȻuWr}>?ٻ//_oV1G_ܽ~vy};qy_~\n9v ^lԦqkf>It5&{?{jǻ:q|$FcWO.[Z\#rR-;ROKn!ǏaEp÷͑Oͳ&lU |Ķ>s.\/>nl- b*&,L$lDN+lA`˛M{Ņm?Ӿ寵;僟_rb_#洐 :-}CZh]|\bwr|z]b/vf8`MN1O¶|ZO8nmTX7fOF9K߅ ;G?RjkQ׾vt1^z)'ƅN>7|LwwǮ7n9ĹI"F=ēPj:qaZ¨0'SuO5|,lԥVB;.l('}qalq6noV<'0VxP[uix=1R9:.ۜi18fι_<\؞xؒƸp3O\vm3793-F?{񋌮]]|\^b|#9=:p}=΋;9<ۯ$ϧl+Ʀu`~=k$>袏|xa7z:ַ,9Jg?|r _d9o8b:ڙ? //7Z|\.7 z>|OZ~}|xyrpeƍ??,s_~׿~kͯVtjsK2cĥ;#/?=d_;^ ǎ_|:n͡8XgwLcZ8&\Zq9LyWI=y̎3ezx1l:?Ά jՊ7N(ߍ|#녜w_ ^1rzb5&}\b7nŪ ׌o^0ZGFLܺIs7xR աV>1_~MY7gM]Fxnq?Oyek^cN6NXq[_z7O,5qV9%aŷ?k(f2SF򛿹_GrNu^bͅ&jϯoonѭ)m\3=5h] /7gu~rN\e.|G*Gg ۏ^~Z\5=QWuկpXk]T6q2'9_Ƒ1ƏZK7W/u!9f?6Q;:ϼB:8hq^>04u}ܺ.Ou:%<ɩndlU|Ox?1>ZS6Z{ 1fmhx82Y8\kqje/F.u2'IVy#~N\;_)&k\?FIJivlX ᪧ5gI'/FAbU생ys9Wv<8N0e_g[a9̭<ѻ9ðb4vm~p[Okz^wqs=yz]h(NS^vucqex۫GZ )q8vۓ7xYglKy49z`3 tmbǻ>Y^?_?>޷SF?Oh1Ol\\0^=Ͻup|u)_B˧?B2nz]=Ν'%˫/|5=Q˳4}}GM/w>>jyS͑:j10ֆEk;_cCv{c9㓇Z[jPeocqrés/XZr㹱+^K=GWl}qpZu2ٍANطU뚗:sqK9˯^vKW=}_9U\yI>}xng]櫦sn6^P8/屮z'/?cw,AkwzЯ._;A˅'G|z|/ Skю<O~N~&jܡ'QKɟ/9Z^M~Ҝɼ8% ?~us|:g,&-oi$V_A{_[M/ͼqkEɡOSl&1s pPV_-aNK7gB?5~;wz|QGyw;yw _xyx>X7yn5[;t;-ǖs Y,Ǘ^rQG!7*nwNē`u0gL7fhxg)tR.qZӞ_diX}\805>X^k~嵆.;&;a<ğU ᯱ;شƴxnk 'N-֓nV+\k[jm2O50C)6NZ=0FkƵ1ӚMiܞm o cy7|aAli0 .Z-b!5C->gprkVc^-V=P򔣚||e'V䂓n³Ӽ`pks~g oycWKHw<4b?5G894cV8zN0VG./\_yC /Q;pS~^k7׀]˽||֩[o]\c]os۬ו?;4uY;뵏k/r_=r+o}[ׁe>cxؾ/\Ӌu{oI'W//xو`p5վ\byOyrqqm|OcS :d7wW-`ձ?<^XFlzWO?:޵;kǚ0sӆ xgyx\}[Nta ;۫C|ǩ嶎[qm1DmݚgFKK|9co5&ŧ󾒫̵O85sh'Hu|o=`` ^{<Ѻ1CZqVroPj>F;_ߓwG}Z7/Ǘ .~xz<9w?{᳞xӞ4]M@;`{9i8d#xlBq|m g/ jyr#.p:09uq_XCn¨9]@xm%{'ZmL5IŜWM> Gk8>utLZˍzVߌXqscco5n)~حyaaUWcIo[cit}n =^}:))Rxo߄}lϘ^o/MJwƵbG8=}8 ΣnCk k~'ݍ#_ ;;׸_㝖 .'e9^2O{o7nf{;{kx ^l9ts:XOۿOϼZ;q5 -gj&1|j${rR=tsI yz- i>y‘=8ilŖg ۼi-=^Oϱa#ac1:g9u?oΫOv?{ÆK+εO~,s?l;x[_~x!׹\b#8:Fq#60Ւ?{ud`Nf]TƗ{–{;.~#knjkq)zL…ŕ407l f?vZU }w}uᦒWusܭ{)?_|]o5?ݬG砱Ͼf0n|;j8s4ȣEd7\tmcr#k$z`ݐsay>FytAsq]]׺y r3O6#E5׫yV^zc &j叇|gq\)If]ܶᛃ5,ojki1̡_=gl1K9[6߱iY7ʱZVwp:%6G¨qꬆ֓MZv=ಥգ_L9wimfɳfwkCWr]so=ˋ^ԍ-˗xwǻ|_vZMs7|K_l'}ػO\~;M7˭}"S2nOYd||Wu|x{yro@siֺ8n]ZŚŘ_#֤uk:t\;Ofˏj۶Zbjs.s۩V_Ǟ.V~0֣~aO&z.3yqjt,iǗZK-s7;@cnTqs_m볏o(q+]y9vsgx3ij#a&/Bpll^n_kwLÊK䭕9M|5U|5n/8N9qQz8aVx甍Smscs^]1\aʼnuuu H}8wZIϒe{rjWmQ}k/OoAav>Z8hj?.mN AkgK`/7mpx6_yͥ ^.񚓛qbڄ.ĸKwQj.6k>G#y𛿱Aʻ[/\b g1/8I+w95GwDlN<>Q8 w9>6o1uX\; W~5?l51npd ,x/c1֊Sk2peMֶsxké?l`CgR<,|-T5Uc1[~cs-7É8bZOuLjoI8܈k_}aw>:v'3MM^28sױUK2c?nؗiqе-\yW>iᗿ<| }{ԣ̧q/w?q57^wZ^6i=1>ǿ^|q6;ֵO=ǡ3)]ﶼ9^n|{r_e.?_>57j]Zoׁ8̧?󄵙׫X8}u~y49ԫ.tk?ŋׯ[1szk\UoK}:)6La؉mOC^0Fp&kNo8Nq]nca.Uq뫁f~cV?9s|֬NoM| µf|QX,>O[,#3N_Ñ9Ӝpb=ޙGW1<^~^W|qs-ıK?ůF Bj`䴠JMf_xfޙFf̖~G^ݰVMHw7o,d6|[mB. ߼ߍ? .ʈh1N'fM{5ƉЅ1H4'5y6"F#sllap71 g SlzC8ҜvnMQדN)'_85%5֫WS‰k;c±#3=Z\r%6m~;R iHց6y SL5.qǃs慇rǟo팇r+N98׸63Ny[yb[}+Zķ5Ώ^e_5װҳ q1Y]6t4l5).;έ'_:\rS,bS+[59~٪4m{Nig|/L?]{:v6:N |ɩwlȝD=-iw}1NSqg[<_Lq8W{=G>r5AZtjow_^8~<7~MvcuǍ/kX/7.3~]}rn9~w{G?z'xW~epaî5k y}Isjͳ6q|aq鋇ߘ>ɗfoACqL0Kk[_zVqawܳ+n*N~:WxPcgg:akჍ53Kxkl񇩾rKvG8yfۉ;L1U ?gm|l4k,k|7K;MGy?uq˅w\_/\b 7w_wXǞ]~#=#Xu4>i9vq|sn/yVCkēqyw|4Ϯ$sL8k8HذC4޹ ~w]6#Nj,fcڨqO['_ VM r \`;=w$s? B?>QAzQ]4?t|6cX$?nmęVcs1z䶶mT:?cP=~ 돻xN-[?ѻūW;[C$xQZs1jd1;z:Wv5Okb={1p17&ҟkk1Nط:XaWfl6?[ܼOύqMⶏ˧f{ZՇGo[9*lmS0|IkM_ Fm=/ qKէ;'g qi\]x4b97lGvc Q~6}[}vo'.W=rX;%}ucw.=rQk<ͧƚ:<Oجw Xo-GS8:8ėyHo/I.j:کQ8ss>|1W}Uo?R<]ĸzɃўӛ̱k-',D;Bu=j,OnzyܚdS[^ _< pCx1Sx~_7x#@7r8>s9MObZ~,ߺK\W߲zD3}D|UMG@/:$>>|zD̷u xML85ڮ/g{oz?^on4yTtǜ3V=3kL>֭%<8ńӞ3\-~kxW1s9I,o5?7×鴛xNOIz 9 B_uOb͗nӦu"7{| W ^\ M'[M.yd'@k螺G_+G]rÉ%OoH{T War&l/|Қ瘹?6OZKv^xX[ JY0 -\CÐ9GgkdwqkjѪ N> OOunk伀i,L88SrhqM5Ws-^}$^pWxk_+`8s[cfyx?g{[_7Ϗ_ߣ_*׿[4~yo>jQy'-:<[p[M-ƚԇUN`٭cNIimak1>w-gߟ}w,'O-}CY/wLή|nڱNiX׸XlEOk:3=sÄ+ ^iqldymCw7ɗ:c<D>j1a7qs cJ57Cjĩ~F= a^m)o3oqޱց`! |6͖7_~;qï{x6k99iM r_\\>6siLZkjߤNZlw4b²x'ͣ>>6x/n팇lb-K+o1q΄sHsms Wn$8\tqo팇0LgOb֑/v[`6OI$´{?ԧZ\| x'\9Ⓕzͼl\^Sn7}sG`S~>>ҾOIfܸ5=.5YÇw]q_-?>qCA}ï0nzoܨg-=-?r[4پpq?>=~=W.6^Wm0r9) k;Wic+N߹AE5g 7aʷ46_Xܰx̙WjPևR#zG=|qg=[/>h9yr=k9G>\ͯZ/!\+-o/(i|?C:<㤜~턯\c7 s^t6dz>-w2O'Vgn>a<;Ifn:qLa'1+.#xjܟ9ꡫA0O2F/GwY 8 1>یzKy}p68"f5c ƤڪWlRggO ~s]5uWul5.Oa֔_,`7W4ՂGf,ƼkgY\Z v'a}}͹ma3/FMxB󋑏Mc3_?/Kz`)@$Pt7昹?cYgxqtMk|sO7vY1;ҹ^7:gpk_7PcЮw;痾uo,]Q<5csn֑&65`ZP~v]#'k8aIyn- o :n; +je7\?{͸ܳf'`n];n1Ukeyz-x7x:{nR \j8ioɯm:f0WsNĸ6Ml6W ]=sEGjxxÅ^m+ S~lbkiNpIdOg^OQ_s=[yASca ,us\)K+y}sln7˗W2}n[QzRa'mb&h/1Mej6fnC5v#?FI٦돻z#CNs߅{61Ysafs&1>~5ׇ&jrѧ-?U}co=֚MTsvwJ_L8y]oľ:Y#ÜOsɾMglukLSx-{-o㙓~ߚwyi&KZc#cmq˅ġ/G N<~9% goF뵭y_6n J_tfqǁO|#sj5.ޚ㦕&Ƅuxp0;Xw^q\ǹL5Ŧ_{ͱ+ǼĐ=j7.<-7_†|ju`1neQ3ĻWޤ9wՀGu>9ǯkf]rw7|wuVį^)o3^_KSj§awR)lV 4[C6q/Odλ<˛i❵:R?.~z+ˮK`Ok'LhΥ_3O!/[uV˦ZqkTM>湭]3~5 nk[3X@57{->o7n ί}??8nޟR]}s-g/-twUkjͣs|Ŷi=_\8bl͹:籘D_[k|§uq3F1W֬}#Bh=D86ߌ_ y;p9j<j<=諭OzsPs\h?iqXriXE.(G&oq^ł?3f˓ρ:6;qJb#Š'|&"|6 CaQz49'/y1oN$ǰWg˅[_Nn.:h8]lo>5f#VnncWW5Y [)ΏՐUl:{ZVuǑsӚi? ?W=l/7/nXvXsm>KԶsNwNg3bpؙq!5XA<$;Οo՘/]msyk㊻F.R|ibSmL5;6~Ϋ_}3cf\y[|3VnMR-T3OdgsNZ4[LfƊ Ffp+yx}]>m7pqu_C8vx^xV~>g x{^\k|ʫ>oךxkbbin9Aû욤yu`+vIV0x+b7sop[S.c:xc5?֢2n;qywٿ9ʯFnjQvy 暲[wx91m4-'_ 'V3;+.bOV3|6u8U眳O}sa?se/?|q9WOXNn}ul_;YǍ>_>> O~޵QgƟs鳷ꫝǼǹ؎qbkqЧ$9~}kL&n'SM⬇9Wiqϼ>fߛǗ&~|ffsԥ.^LNS_zX~/Vsn.va͛4nP&;'.ڌ4}M-D^F`lordV0Nr5[8ͭW`D-;y4O\'&jU?=s=ƙychs_3V_5TO8}sIjxfck4;fxar0xgM_ꬆ5X8x9VR- Ǯ/Nv6<Ճ[<|$ly}+>{xG9\x;~|,5YWZ.&q_ls+kWjp|GL GSN}a#Bmuy,zggE97q1Ֆnԩ>1_jh:X1OqkG|8Oc&Bɮ5p+S\CQ׵N|ɷ8V#_?=^9~ar}W2o\Z{c=L9{{k {+^>v ( ۾g^8ǦZg`LrO}|#=|^~x7z9sto|eX^'5W{%jjm.Ɲl =i}*~}boMQkӸ#n8˙VO13Y_jIQ=bk[io56ov-(:ٌsAZsogkc+x#b5`3/\@~R~`n7_^.oۗ/Լ5Y,st;Q _wGnq[|o;plO^a@ˁOv'.`4ř?ۜpnl3VӼ>cNK d@ QQXH!C"&i{@"F;1uiZbBA ,E" }>oծWU(-ﵞg CH:8i}t>֠S8Ok^7~o4se.9ĈDž{ 8yQSf.pl}XaԗwJQױ$RncM8W90bYi1$~ՏCyS[#f|/fs=Ajt&knugZӾr<U|}7iǧ<)'xo/\>.kD|37w}y5n;'Z;hgיya!b̳s5J@Gζ|V\}3>ZM!_ޙ]>yӇ+afm5uIݿ_4(Gԯe7n8B{6 \nCܰq,`Z3j'bQVYW٬.<3Wqa(>x6kxI^}<|6 gq|sv%f-ઙW0#Gn`'}*&yn!N||F~2Z綾^n`ˣ|¿}rkY,Wbr/~;s?~^o=WeqʙMͤ$k kZU#|g[r4835h'j\0aVlC/>Һkѧȴ;?[VIz9v;q|~~q=7b .!3__3{.ry Ahv}~U^G?ۓp/?>{7][Qz'<X% ?`kS IDAT }ki>/5Is=۔逩_M?qT aUϬwi/NF1eԠ#E6?4Qt!T75.kzlneZקg| k;g}3&5tAEs#lz =U—9C&jyqY鼴g'>o > _=U/מkNi5Zֻc!ӯχ;^=Ƥ};{}ȗm#YnLu6iӏ[/t|auK/v#>cϟf׌U,Ntҝ0Vu&:[A|WN@OVjf#퓳=^zFk֧g9xຶck1|=Fߕ֯~dY{9XxMR{._ww?IO:WKK#m>a3]z]AMҷē"r:@`"cafA ?7/ ?#޺: ,`A/U9󙻘j?_Okă SNR?>v0av}D8dO؉9pj{:?]ɯ/'io [x{"֊M7qagߙtx5;.xlqʓ ;o&IypaqO9U뀯6~S9#5u8i-n4_Ϯ/?vibf0l=Xpx}]1Mdž;- ZaJyHw8L<׬W1*^62 /uRoco:͘_/f;[ݮ~/}8˽um}-}[[㳟 '>qnvX~򓟼Lu*\qǛoθؚk3>?sm+>ǴW|V_?\8ʻ'^Z.Z⬩z4\_6g5t5 gwI3o5'N1{1jvY~"k SC6x֟vcX7n}`?]ms.=?%OFߣ3+#xu'hy/u[,C¯VÈ#I6calpM9O*o ^,{>$=X޲^υП^w,y-ȏ,O Z?~/lH֡o3L_Xh>ĺD/ ̋0t\0IĝO^wվ@@^C,yݤ$clA|NyT'~ZեQ}_X-qSjV}YǞ`C͍/X|Hc}z㉛&S:bI |nʓ>'s quO<9kv/+g+ntЭ-hϟO\~jO`>{έioH5~M8-_a .}'W1i 'Om>:xF|d꙯uQߜ˥$_ˣ!p㈗Vlumr//P75^[Z߉e,\!M>>w~a[ Ox¹8{?7=5:?۟a?>xD>{?=;@ϗtg+G)N|0aa˧$ 9ݽ8>g7<[<е`>ovc~sNݷs̝tN~X'>qkcs4ONX}XuxINrozAôtX9[vx~ěu/~r;iyhGm[^[k_^{F߻ouMyr;y;߱|ySTZjnsp0^ۺc1e7>|Ŗ|:9S/oq0konT~:q势a1j&__ W>ϟٌ9}ou͎Z[Jϻk2d>7h&} ӻ}ύN:iw&{{_38c;߸}b;.6i/VF>6[sE!F-b烉Xb_mx\6[Ol|hMN)۬{Ɔ䄫vZc3'OZld7Mgc}֓+fɴ~H=p C9֟9?1/Ov?i\ť9=O/jbZ`fS4ևoSZ4|+V}{WOW֤<Ūa? ܜ2DNt4ڋgb]_Lq;>yDkB=7J&$]]gῚOŅcox]|/~x}uׯ{]ů}oGE{w0zVqtn ;|bIዑ⪵Z3G5rǕO\>:; S؞g\[C1I_r'bO|t[>bS>;k>}(~nƉ815.oXkߣ7]xr듗/[^}󗛮o k}+S]?լcOL{[_ܣx 36sS hOg\aW[uƮ_9z(pƆ)θso>`Ͱ>ͱ~imi{/~p̹o\y6Oy=7O|oA^?yIᦾ_8_9MߗM5O=G}Km r5`zR`liSM|8>Ĺ և8 ﺋ O'ۅWfq; ؍qxGwi<:~ /W;WY>7S1]g>x}Qu7&Ifa}&-z#|CcvbXxXg.&r&70g 8צy1G֧O~\kViͫ]&f 3qj_<]lZug/^,r0xš=>95l rlpqxHZn?qb$~}#֬S=Y;uw yţH:h2V&?17`7'ry+m||M[g}ZjOLx'[|>a\'V>쮡j5=c}:6hnb}uhrZ}̌\1[FY^ 8[S6|nr'<=1u(7SsÑ6G0M~X( WXT52u!N%g獯91_ָf^j#њhui\wםrƂ9r&ɱ<_ ۋ-]x\O޹ob޿~[owUN SO_^瀟`}o!YNݗ]O}K7WMv$;]cO9sM't͜[}m纴8gϗη00of_}7l͑=.}lqib?kf987 zӯk{"].\_>_^o_Ǘ\2 7ru;O'Zqyuv6+{%^2GՇޱ:PlƓ%I,_qG-V<И-xyՆCn8X?{^S\/j\`n\X.TpIC lo/Cُ퐝_|8_>XxY}R_u@̅c_}p73g1Ԛ.:1㛓).s}H˗ڦn̡^Gfm5}=Lye˯flo]'&>wײ0?<6ڪW=l񈭟oU]p3'|ò Ϗ~)6]`'j0i=i9fm {ml-Lͭ)w-X.&qWIm̷ltmbek-뗷呓}8'gø~u䭶b`p|\{|G=r)ϯ/o^ţUOȿmf- ?-yݤuXݨ;_-|7~k^oɧﷹ~>}>%r7wpjkx6Қn| 'Wڧ%&v}8k qekͶ9 \8`=’|auUltةo}`Q79i>YC{g}q'7V~S8;.Gp^G93u4j5&ؼ1?I_X^g8<޼/=k3D^ӝ{^=&y}Zg8\g/q;l|%xdã9t=9ګn94 On6c<5v\i 5kj=0V IDATם@mi_=#)scޚq<c賫O{)6Ë/k8p:qz=kڂׇ۞/7_S?~Xj㨖|$4aۇg--a}mm!.|S{*S|lg\hb!?xrӄgͽBxa?|b;'>ͧK}Ւ;|\w6XaO=8<؞Ý?|}`,gr/1n=o/{;ף#:zmS7wlsiٵ5-rW~٣^br;+8`0MGҘ>?޸cD|V7.ny AsbWk~p]Pզߋ W>c:&Sq]\KLka^\OqcKF9иجyOژ&>QK~rW+TcϼGa\jx10맳qJ>y O76\]/!V~g\\Lij~٭-1C"ys/?[j'_{:Opd'X6uZO1pbhosk\:3&0V?Lc"h-6&;팰Wqb/=O_ũ?9OuV_u`'i".CN.uyٟ\V]@N{%gΤt^tM{M6:qM}^3|W#g7yNĉ 35O~Zr𫋈qMS7;ګ^xD )̼s]ljbI~7_yhRm6a$\Z{XLjXrϚ>{gbH_O6|>6'~dg}xV堧FçVVkLR]31VU/F-֛:yp5]iكOڍ?T#Mԥ.<1?<_>q/h}Gp$l٫+nq5˻;4y~PoUl)GsjΘ}29硞3!⃯sK uNZ~CN֍]Wz5ϖ>_5^XlbZOk/t3뵗C_􌝘쭭}#LWnj˖_LC915[f/c~ͺ=Zfao\84NafSߺf?*mLWOzgZD|ɗ oqkVPlahX5P? w|Df\8|5?3.}{o7oXUu@EXs>9kD'O}1sIxʱ9:g+|8|i W.}||1lι>?]Cu7hð+u/ʫ˭{q$;gxsSB('R;(47wX #V|%wN`!h;d[aM4;M?l +9y.Oq5>-[8|a 5a̿X&R֤sjb _|L|%0 _|<{ف)Z{6:4ro?j,&÷0и/rPɣf>o=ԭuronFg_KL!]R4n^Δr5O>gQ n_/!$l58'L ?߼h@_ by>$aqY2^gaMeq5Oqv]ç_'olިO D0 K~XkU)r[\Vy皽|;?v5Zs Γs׹c q/5:y:gF_Kʥ'> ;霴>lٛ]s|<Z^}.|[Q< lχ'Y _kos.&aT')kܚiMk.0'{_d&Nxn>\ƞևt}>qj6քVVʼn5>W11^ٶdGvG??_\x7(L:n8}9[r;j}76;.x5r8{0j`apS se#igS=lD^Grwj(x~\_Mnyˍm3)u;sx?8,_e D@ܦwz"c h!w9:ŲXɦYZʡx:榮O5?;uQw#VM˥NkUFԢY˦hvZ7'-gqx7[ӌzgafvćaS^Szŗ VLPܡX (u7+] ԋ^><~Up=3Tmeclkt:E>b5"wu aN/Ne>?{j-wa_Lˍ?/xnolމaN N_[1ǧ5w8qZs;M刳qj,Ws&Dh<[ObjqYZÅYC1lϖOw<8r^]d0ZaʫvcwSC4\s59%s<:>:||}yvcV8\:pϳ{2bL1_xƴY\8؜wc_^}׌a1f'r99zN7 _~}\O`/LG{Y|508C_,{uX)Gj` 1Vn6qŶ͑?aKpkx >_uӭLq4.MZIW2M{Ǜr>,yu [cmA|ߘ.)OMC;p. \]WXp74î?׫8̍Y[6sY.RXky6^i͞Ӽ}ߏkLX2.T~.'-O\x;8[lĵe3_54W<\X,tފ_S'_tKw<6.y7iOݞ˅6z:ϭ|5rd}ZMzK[|8f߁lShYHa pbmjbiX-{5kj?j ??USpf^O>뉭uu1$-^ &Ǭϗ=')Rg O/,>O|q5ZGj?dkNbq8bog>[mࣇYc~qqvِ5GY>Uzf=oȡOL1`p'됰7GOex˾0ce#Kwe1(FpP-I}Pk:rė{b՟xSSoV_?|83^6h|SË's]Ga;ca߉5gmM:w\.Y+`F>MdogM<7[gIaWx^Ւ ?ǭ7̌\Sמfn\$nyM/ՒW3Ow-۾m=?ִZ,я^7/+/(/?|z}/N9 sq7  GSDo^ocyի~[oU߼rZr͚.͍l[KyV~~9i6#iW~fm9lqOaꭦ4.5{^ji<귖{{qx'j!9ƿċ3'Vb;χ܈ǃ8T]͸Ѱ0 &k[] ָ3Fv0~vy:gïq86Gp6rދ[|ZǷo|8Ŷs5G绠\s5'KW-Zut/Z:9u=7a=t +ະ29+_9rɟfI 8_?Qخjc'q6SַOP.]ˇǔs\pUk4qʕ;[|\Dz_^:j`̜֢}?ׇW7]ӄ#f#<ʆ^f;o|{rM4s8]sӗ[}m׿˝wzr/8Ն-}7u|ӛk^zYj׸wƛ|yë^X^,wߵ9w_N=Uk׬kˮ?_\\_?ރ~c/w/. Cn;4K֓k?X.290I6/vAţd;/RXZ\s'/'x¤SM8/Nl#fiL7 X95y:.PZWZl0VI87Mi?kcC^eo ֊Slu `%KL5狯Xc^.XըDOi-Wxou5$,{1l8'F?i^8[s|ӝlq %85iv)H'quċ{x1T;!1?.%{>bigs=UV|6\z'{<_ꢻ⓷7x0Gqp_zUÔ;ߌ=޿d쥽gO`|ٝ/ ,~s_E|b񔓭{-r㕧'| >j9Dǟj:v=%|qӗ߸9ij8\p86Vg- ^nkn.a'o3=Tk_-cЏk/8|ؚ5eM:.x5 V 8֮Ԙ__,X~5j'coܸZ#xjQ0/jIgnG4.<0okkMm>W~U>A 3k>eO~{(xy;T#b::k]_?ưaʝ֦.._?]wک_Z^/g|UNwZy,'opҍe[>iko^q}S훿k6/Y?}w<`y3XN{ GZ/| GveyroWfE^ۛ}Z{˝f.J0; ad6yd^$ty;b/G~^r ':=ImDÜOrux{I'b&;[vˋvO09'q#/օOX1gˎke:`Nk/OiY]+Nml<K|:`Հ4b1sU~5^?ױ0YOqQLbԘf/cznZ̩o[5jsSy یg׊UOx8sߏ6W)Z 'LuЇ$|aS/l-~óџIf~t+13󖇆 ?{tR>k^#c7>Ek ?DZ az==Fps|ПRgdlbxkx#tQ~I86\ْ8]?pƙ7vth>ZSץ*cg'G.wG1%l|)|/Ȧi%0^xgSkmc~r}$s?LO^XC9qJI;q5V>Mk]ſ<4OV8i2q&O[|}ij(%ߗKw`%}f:ڸq1(m8 'l]^0?nRqA(|lZq7ɧ6Me IDAT7'Hi3'ykW\h~1co~#o`Q4^sAWlarī=8zPyc[x'I}kO[GaVmT¯.#K?tНpՀZć~#i+njS;g986|M)[{}C<|ۘ}j$_]L'j/nsU,\|Gqv4=?cٴm.]|xH5 OIHqxZ[(gp^0j|e1En?.y4k<֝8ͧ#aHZsk \mN25\Vy[bAvjk=0ݹ9*K8on__~G_}`w-T >z^0ڜOjkUݰ~vD_ҺΚ91jՆkZI\Ƴygr[568;8)/x cs'6n਱ c<[5˖pcQz֥xY˽%Y*Ovc>BU ]b'}l=έ8-fc"=.^gb>>Q~nҚlK>5$rańڪhZ>akI|0]Ivͣ'e/5@⦵X00nñׇђpֵUs8k0NԪMo\_mo޴{+ׯۮ{),w\^g.]{+^}zzr㣿Oj_Uo3};k}ϯ7|ի.~#yt}mo!s7NVle7Zա=!ڜ.X&] mnBla:፳7Nu砙OX<?1\XxbaO`Ë!b}'>O\QT/l] 7zėCy&./9MgOMu /_/&ιGZr5+sWV\?pՍ Jprʡ: Ӿop®eǎˍ YllY;͘o5.f {#:]il_M>r[׾w}n7yt",)F6>g[X>D7ık_ox t5cufqe/F׼lՕlFsK/|LO1}:a7`g88kgG 3V}07>$O3[ mb˓8l6:n0/^W[u4<_M,+9fY hxCjOpa#|| ۵c+_?wu'|-n,q,/~֯U>ezxWz?^K_2ϧ>rnw_NZtoo~:yrl?׾q;]oyF:`}Y[cygcO؎w!6C! צ3)F?tŖ#&ss;l87Lz򄙹f+_}x68қqgǝg񭇾[kX[{Zaɑ=]-s\?zpq-=ԙ?4p]bz+n1k]ñ[#8zKf=<-߾O`ks}G¤s̽Öoݼ>)& 9VlCx\s?熿4a_)~#]'.{x'Dc\Lkk c/3ob_P Rzcyk;X_8jM!&%o[sowi#ٝ/tFӰεӳUCg3-s-n΃-ŕǴ5-ZTC9ԏ[ҺOOtuoiXy+68"4OO9b5P$>?l|8gr/<֟8vc]о\78bnqa#pK4P|H9O뵭xzPŃ\֪HoCO]ld&_axַ->&&\ksm/$p'\2|bIof?4ƑkũxɩoqO1[O;X^w} t7q]@w>A~^~j'd~*x?{߳a[^.{F7o}=Yzk7rG?|ǽqڋ^<~iM.]˧>z_|z'W?$:`}:m4~;҅ə6&W^I"l_/ʇJWsioO E]]px;&+o5ct+s7ξu0.>o^pc?腏m7887FflR}aՓ%SìsxVOz'>17{IX3bNqϧkNĐ8wZc /u#gN.cˆ߼]iO'ꃙxyN,uS.9ilt?m}UOy~=9O:S<[?WlaG&qvDuܝ/:aIcOҙklm__1l8pok>z5*WV1.b#}\5g>jJzh\傣%o>%y^3aj\3^`DZ5t!V|摿8~.:3_9ƶθ[tVe9ϒ넽"ΖM>ذbbCkbē8qqIg5zث/N3"1w'{go;M,[5>Ly>cqgOк3q'A53̎'L:i\==و~du>•+ WTˏʿևr/{g\j}ˋ{y;孯{r|/_?wM@+z7^~z}Z>}W >wՊ󯿰[K]CSImr_--W_-[6Z}3{Gr+]|k}N_yz_:W]-``a$aq7<ή7]RՀ' y ӅS˅WK^(a߬AC_S'Q^n>iHf,j㯵<|6%\ u X"X)nƖ'dθq93_>{q>E\|Ұ'Fb!x7xtgO,.1WWZ ϗTS|ű;_\s}B>kй~k& ;}3҉5 \:pY!b]:wˑzp^߇)8Zv|o5Kb=' lsv#_Fz=e/Ny:fQ39΄o[Mo\ݜΖgeL[rq9|}oaikv궯Z}*O,Q˞<9eˇI';1G_]#͋~kn/|5=-Arq9dX{nr/)ᦏ?_~ϙb=‹WKnG=>|{\ _dVæz{go5Ǜ%q8 >Gߣky9k%O=O^a[n%_W/w^?\{x;|\f}胾֠ߓ+)7k|y{o~cA"ý/\#ЇA}SZ?l}+|cs\ފ\& nZAvP:|b=:8 38\mw9գ(sSthr'>- =IzaW;|"=?&nyPc^]rIrt-y?g›7\iԳӞ)n9 C\Xhj?A1疍qչܭ]w귇?M7;gǯ/kj[9m>|1mn{ ~W<-i=q͜iw=ؓGOl91#Qwk 7.3 ]k}qM֧gM 7kI둭aFo귤!Sn(|駟~ه!7XC>쓫甾ԩN.v[cWu"lv> '<{㘱b>+y4\&-oZy]y}=`kþ^};kۧ/X\=~Gk}5a Vܐgn۞MzTGOqfo09{31NW_՝riЭ>$q?l6S{4|3M~qM 7}rf:S!s?l<\,n:8qR_]W}>N8r~95^Y?@'ޓuخH+}>?x9~߳׿w-o}KVA 'Gt?kٿ]k>`Ϲru}ć}vԯY8=?tp\x7ty.ټ8Ր.>L!VWمGhjD1\=t#3?WaxpV'>ל{A+:Џ/\}/~r*ȁ~ի߰;ӭ;^8&Frgkbxp̞x5=%'˟ȕz~io|:ol>{s>su%G}Wy MC iv=vp4!Sֳkk={bq$1ԩW=9[oISNʯ^ǥϹwwVv㓃.1W[^$mS}Ǚ[?Vk?ߺ[jS-b҇u6kvmx=R)Fnx_y7k휰B]7 14bM{tNWbIsA-<3V/?9&_u[SO>[o zՓ}!b?[[֎vtun5 F.kMOG<g,/xSgo^_y]wݵ5y򣳽+ksOꋿxyg+?=OZ{ZK Ƹ\__QgKN|w`],b9X.`wЍyFktD<; ?\u эuF+>`z#p^yúԠ "^''>GZ8cJx>F=..N58+N{!FhFbշWG{9j'FsHlZLqS^c>q3}Cʦ˝|q㐓,3Z3b6s{N5:p|F}3|yK|F=~qanJseaړՆi㳮xq<߾rH0l㈓a'mS]sĄΌX\1]_v[(nmDm#}cnmhbh|jO'_s/M<˙F+{,X{#;>>NWljɜUzb'/~t6/lp;YN~cfXXΆxfشrZShdgά6]V&{\. 3,듟.Y gޔ17!g>_zsmrjڋ;#q|ñ'=e?1vgYm7TGbahRrGiaf̟8za׏Xk w7/&s.>z&&_{/my/_Ndk\||ֿ>\N,qVs{7-y=>A˧6ص6O=θ罖/yy_>PF>ͭ_|yϮuþI]D_(}s! Ouy#'۾h |8پ;_S+7j}<F:t=F"W=}ƥW统w{^LZM|8]Ocgoto7 |tIIz0[>Rqxva(MzBe_qȯ3k#rnZ/6 :j3'3nO [|z|g҆zUmk$Wܯˋ~~!OGZ,C>苾hWhqzOzwhFrmK^柉o˦Ost:w=憳z'Hxq\Yhg|&N/z vK=遯^fIqژw/U[l>AOZ^^9q[[Z?P '|s٣^mģ\[/7yA?OуʝN>t/)zvgaY7>Gt}^aqtxZ ӐOóiuf-OHڸ gZ5h; rc{bcI*ט-c=^=z&|p3Ξ=^I3Otgz]=\w.[O^G-/{{|`mn'{}r7}w~ߺ\z-_?Z|;e\%k/~ .{->8a{ʔ}v`m7+.('p4_Otӓ_;Gyʃ I/jQy$>v8'xp[;z0rG=V_=yazBy='x-9Mԏ^WF57sD.iM?}]?ɗ&prbaqYgMlh=vQS轾h-f/ZoQp{)/7O ʛhlGkō-G>_.KGm!3_u gk c[{Eh{5/~58{/'I&ͳU'W||xLIt{vVY'㞧?7qW5ᵵtF槝v+=BzqU%//[T7gje[;>rہygzv]S̼ctN%ig.2ι\sN?yS#xaNqu L^~}'l=A&l) +zԋc~}'>xvgu7sL[k`iWw5Cx!z6=z>qNtaӰ#}W\0paꅯ^A{e>y[S-|$,[l$?{᛹#W_8c:qMdM^ƌm>9|= CxrIkGU_׽WsWr=AGob>O,7_K?Ӕ^3,ﲜ7vi7] xUlw󏺏[~uƷ}ЋYOg~kg+P}]9a \?醆5 .^Or'5.}o[N5u[աkS3q?1ՑӾ铞{_xu3va_/=I\)']{Yw> φ[ـìgޞFio9ܓkbq˛콯<9>?g;_t}(ր1/7,}=$q̝9iIKÔ~bt9WbW_zl>9O-cޙmp7\0b$_h='I|Iv/zj͝o/_ Ƽzt{R y6]&?Н'3Ց7kGpތCu)qmCOsñ>9Nןz. o8>m!>:-4Iw/:φo9L\iqO_|{-/z'̟vy利oSׇòaxI:^AZCl!x[|Tw%k9<8ug7{Oiy+7F|4awgaĪ.~՘$l#a/zi/ngi/gRyS#O&x|հއs|]o]go^oP~ޱκrik=^|z_m7 y:}w_?oySc?V{@}@1>=ܜg;pzs?U !mQjiA~djQ}`3spOZ`MgW!џ`W 7՞ˣU vY3qM='8sծFz[y~|}iOígz_^xgq\aO⺪T? 690sFp0}wjƭ7->$gsSxoxsDWo9OC_Oko4.efo:)nm'Ϯ\X.'-[=O.][?o//ئblk׻sF[O z@g̙ͦ]<{^><>|ȕ#?r:cp'wzg<~i58/Wy1YzlA7Rd#[\8郇LK0q]1==~?f/8bqjM?9^żp$0Qi$^vtż}kh׵dWS~iɳ?c拙˛׿WϺӎQvu\5raͧ/.s\9=_5NN/Ɨ_M\~E7|9C?ȏ̸=suN^|>=}0IuOg/S}'Z=Fy|ҷ!ֻ,' Oe_u'|з|S}Zmn/Ǐ,/^s˿5q'o^CklN|w`]B.fv>qb >9\FEI-ba}|_=fG>9ho}ͫV_D÷bk ևȵOCjnjV|y'=A/0\|\~˴&>`H\fkN{(' 7X;G한C5O9f>zlC/I=wtf/uY ?L\}zÒx׹S>CX78|ŮoZN5~q+?<3WaJY k{3Ly5vR|j^]rp9|PCvoz^`x͠=~SOo1~jz|[޲ /Ώ}cSNϽ<>꓿Fsrف-M[̐}Ҝ8W\vgyp.{S^LW8uW|q$0ݗ՘'5ox 2unV{/Y^.o=o:̯oows6|rbFkll5 "tW?냸zT)}35?Xk?sGUnlŜ9}7m_A߇?rx}wײ<˥ox,'KyIo\礿'.^sroYn%_wokz{?9O}7l֧}:Vxþ`](ٜ&.nRl04|4fU7`|a,8S^N 5:nf7zS^9D'zCH0աa~a]ON6MΎb~Gi.w:_k)4LW!'Cة`?9c?XB0ff= fWξU八N~t6`7q(Cu2?|ܓ/L1tZcrͼi/N75GPr(g8uK<=q;ukp-M)\bpFg"xgxgிYΚ>%OwylЗ':_+=!Gs& _= lùr樂{+$ZS^ykяFg}=6s_ݤ~¼}5QK˯IO|-F/ۚ\x?Ozo>s¦{÷lērwsn ->9Ƽ7ʕgƧ.__g-g{.`wSno\;/?eY~uwoyNΧן뮿q៿mWjy oxw/˭Kמs=zUAN|w*t\yS6w!yz&wrh20Ixsk;9&±q[jC|bl_g|mGbt>#p]oGlIo}b`>1j}vS#pr`|Kq5 Wj lRNW>~70'ulvQ^!|.ަoe柩<*>F˽(oÇfyznS,b߯Dzo{^ aO>@=YY []zVVֿ׫}i :X z@{Ut]_uս?Ge}iezQo ^u~nM4"{bN~{9F55–O_ͫQ/8hdծ_X\թfkMY 勹.q3쥽·}fa/?o:V/^々K+Wk_٤1a {|&MΧZcooV|a—a=y5Ɂrp ۜNɴa˓nIm>L\ŚϺ 1֎^ŻՆ,l o+궿՗C;6\1!?bZk'l9l2sSlϯ sN)^N Mpiԃxɣu/;Pؼ IDAT׸r ]LQFM@F<}ɮש-y:3zmK9ċϞ!_]'y/19$>cJ#qZcuE=ӧ9Lzriz+? ׭%˗'q:?mؓ|]#kJ`Kbp0xigHۯ}2{'fL>kK= ||ܣy5gnS?|՚zőfϑț\[\e ]wb6,|f/|__]pr#g~/Yy|w<7=~?{k{eUdݫk|ӱך ЄOO'p9ww򚳟<䱏]}w.',Y_uޟ_=ͱWv]شu}ԗ?K~6^Mjuv9b]P'>k!I0:<6?s:t8pqI˱.ۍC&Gs|bEʼOl_U5?m%޴ĶsM0?{XR|Yy|1\z%qчDn28ӉcWjǟy<箍sq}czƎgMScJ}T \?dG˵ʜ]M_X֚\3X~5ͼK0C8tcg.4߼:ه/6yƃэ`r'[wѰ;Ls!q˟M^O,֘y󾊋V7fƟ\!LJ~j.3| Hfs 7c<B;ԽZvM]۪g3t˯rl_y/h8'9r7}_/?=ȏ]fz sIuهdQ{Z˯̝/ǔ 9&~'~saoMwU G-gg.gs}:^n=L]gëSg=Sߚqɗ.]lb탚\>g#|:5a?}qusqMϋ>$|;IWXx'9/7t~q"Vz猗o ܗT: F;~>{]~~mז<ֿw[j&?nԵ\l5׵r8wꍗ ^U+uOr?ly}o?O]vS[?a~U_U: 0ysw iv§?)A ,"kgm L9<5GsXbՎ_?Wd~bnsEu:4iMbz듆#)Ξn9Zx.\K.17u+'tԑZ‹7UZ4!uwf:4Kq5ԓO.<wX)f.f.a=ԃyǗxμjlpϞO5ʇ1ҭ|?ߘxēCkzCx{T}US7'Waslolۉ[qGCuɇy bIkP9G\]WxB*OZը^TW3g!oϯ?=HǦ'o=~/3'qZk{2{wnaٸqəX9sWm==sqKs9dru<W|jrh<O896ŜL~skDWSopwg0ls|u ?N#i_Hid󛇓g]L ]|sv4?m<_r<+n'Wyw'GԿ8qFW~=coE=Ӈx`;kpoyn9g=חpg`<kE-|_Lqm{ 6w~瓋3kٚcIs5:W6xr^S=!֜CC-X߹To>n8>8+h|/\IO\auݧ=_xCIO׿Ws}zׁo/,~wmo[_;z֧o:;~{5\r3Q*ZӍu8pXfK y>z汍)ہ ړw懣[qdᔇ_pF0r6ܽzgz;7.~T%]k\#|[GxaO[opa{NVMg<Pcʩz/VOsks7˴-/ny$] ClMp Gf7m<x_kzS0#L|kgO{W<z|9%{\zQ1gqj-rϦq=zE^՚qbSql8= [/8Ͼhe{cl_К{}#0W\<9 q\:z.<'n]^Kuu΢yng( <)|#\E$ 'tؙ/ּaۈ>\s~͹>ȯ\x~9gK?u].x[սiv >i͇tio^jt}a5!߰kyؚ9z~nOph^_Nwɞ+Μonsy%{?_=_]Uz:,Yi~ok3 SSOxgOΟIfw(&>KO޼aG-rsuqˆڳf ~)?iv.Ft꫚a7?_99#wvBzƺ_3߹<\?%?婿K[/ok8޵~wd{]h=~W^ 5?x|ىzcM4sgSn(.0t]06HXC =MԒ L!r;맆4?o]LLjC{Eœȇ;]>!oNMWM˯fu`Ly5˝>yh^q1HN~\[|؄g?.:FΌkC 9Ztgz|xˮO9!9 O>}vOML7=%,_cȝ\[L|ܮ~^Yobf7apΆIi{07;lw>"׼(n.ި!铧qÞy}dz|&s<&ΥSN9e둟noaOo\Ι΍et>g&\Z>/v7|uθ!YtvS-Aʁ%_MԿX녮F௖ O?GY`??; /j=r8 :;^>=G=?q達|spzqM`kG7eqfak֘O}5rt$>ڮ^LCs`Trp})w樕s1ްs=y^f~9{LaIz4-PL}^[{}8v:l9s?Cuaq#iON>hz: SnW0Sl5z`T?3gr GMC1m{X[Wl1Z_۫?/}m?{떯gw[޳-nw;ely9/[︜7ni~r"u^\~Px5׾^+ϟ_3gO[ҕpJ(|U.ADD/ dwPvp!'Nh9jDNo Wlrqjj Gy0bx-Nf\ՐGK.{ 'nNZ_͹>%jSozZ/5go/pblo~:('\8r SI=I3|rNGx‵}쑮6YʁiVpLh=ܮU'?\{&qUyk|!.k&xX3:7*.5YclRn7+]5*7筥<vʙw9qj 8Jüu7aw_~vZ]|t<6]q?gOY4t?N~>pxn:z<ѧ/@/'X_gaK:p9蚻ބvm^:;aκ򑋿Ooh뚒K.z@m 0Ξ]ɯ/l:|!zs&t98z`7䨅|8z+nm$ﵸ$|Ղ/^XIvq5W>'Wm4;^IWO37|`w:xӋqw؏-OwO{ҖV{oz˗;;oÙg.oz˖/k=7-w?]^,?mo|SZ>/~?#|x׮k-w._lO's_[%0Jz8a߁r >Cާ7 _>yL {sՃ'&s;WsZ=X{f O'.{ #suɖڭ̵OsF8s4W3Ñf)6Ov=5&~L:a5] svܧ0ޜoyp{6pt>wMgl|MW&4gY| 8|:;|l<7{\XO +,!}^̽}dgy>kUw_«WO3?{e~ss~oauMpFҾ*GLn_}>sMxE6w}¥;O34[q{bMLv[y?`y̷|.\A+~wWy֗ɶ^umW}uٟ]g{?˟mOLiφZ=d^6ztM\;q#{̚G77MObN`|峻+N¥7xP׹l?=qt=ço䣳$ẟ`zfWg79F L=?K q]-v|W.dr;cϹT<_\:MN< ߺu+õ Cr\pSNFj&f91w˟ ߨt)ꉖ=ɞ|pNOڃz=潜;~O7POn=<_r//_?}k_}ٳpy^rþAuM ^.jv7,#^,l`Dȯ~&ۡ37l yqWkwq'bx;yש^~<l~u4NSZ8KĉrQnOOq[Z3N=j}Hmj#8 1_ p?xˡca%qIZ }؁y.]Fgqh{sr g;¹| <ˣ~Ǘ[^ܻ>kk,_X>h7mo[?(<{^}?-3W-'zr+υZK텟H-&L{DYM6mOZwv{TjXCk\sX#I o_^='dZ6CqWXy4W'_?G-?} ~%!wJ4'-O?W IDATsZ\ >k-n4{+5ªaNkmsŠlR4_~1||k<:ޞs#m㾿jׇ|qN,>հr7szd>Q#,xR=r&~䔇Lކ-u!lvrُٳ{Oq|OyVfv;]rˆ\3uzü_z|>vA_=k[{-/'.z_Z޺.yO9yg]_\?|ٳqm뇁\v~do]y/gX{7 n?~t/zz }Q*ZC ;`]hn~$,LT&O`W|קw\+N<Y=:\xn[Px{#k \y3e֘v|9sR|rժO:ɧ#Xcv\MOW\f{g><M5_?dzgƏǐK`g`}p`NZk9tYs M<:Wu7w|pz ڜ jzך`qO%qm79scW9=cvRȇ;+l'n[# @gut]Πy8Klcʜ #|w3Uru㭎<8ӗg///?^M>=! U?tyv׽E~x{.~g'-Xe}uC+L?=WQ߱kۧ3|7z߳'{мZ}!StdݿtT ;=W=Q Ggz . Ӝ \ \aH>ZA|61K`S֌ܹ-q}z}˵?lC >n}˦l^z{^yb~Z㫇 J{9ZpWOsɎ˜ ]?ˋGNg|Qopw'%F̋u6It tW֔)/=9kİ[\Wv5az6LnsVNN{gVSOh_kAfa?^rP{K>}wğ~cfy|Փn|M{ıe[͞ZG8{?Jz8alCy;8Fy=\́88{͓Gh'X~6wrOϼfT0xmCCpν8r&n>O>86 1%L°ꄋs4+9ia"pI{-&<͚PC>fO~ ~Z_l?]sgm /y7ySw\OJ_< ! F!PPRp*XmTZUVY]enmي(ʠ(( $a ulκO/dg{{',vtzTrox˗n}ns-קܹӶN—Li|va3ןqY.~gdgHDsR(-59)^M:zW32<}$Vozø7{Q.-7^li‡m^!|L>8W>V~G2{jf7M; ݈Vs F\3 #}®YwMeg/&C|15,{Nz̭0F@{Tw|d6-x<=.h}zS~|_f7_߰"j:;ן{aO/Wo_+9_˻?9s}rz>:{瞴gcF>'>;S's/6.\tu ;nrmC|4I㛾069>=?LkD~>io4ʥw~ M>ˏ]xZ/]X8gj8tOZ ՞| ׷|X>ZqMۭ)OlbӾ?^aOz:&[.8mF8sXu xk'prOYmIaU#_8:'a, +|ܝzl)8'4Ogbg>VS8ӭ|ڛcUx=6Ox1y7P,>T5ؽ0Άk3gs89)gbݛ7Z^i9ޅQ Vܺqey^=8f9t¾th\8[+ |ޘ^glOC~ҙʓ?|I _S[/Xn:_so=Xի;u/~~u쯼o!~ ;o9s9g|-ͫto\-?rdW>锛~-[k݋>OzC֢߹'bO.kj+Ge95)&n O}x^ZWQGsarˡ'>xhM_>Ͻ111$7`Yw uI<^g¦55JO\u"4Gw;?/ .)?{݀AN{GN♜ ϋx:0x:{rF\?k?rn>u9`{fcx§Øuy˿\'.[+ˇ/tpmox'Z{)崏r擪<<Ѳ 3_}1g&\y‡1/X>EԪ>m_3O%?բ "tqprWv9 ۺ3vXu|j;/S<~t2ynW5ӓQƬ[/Sx W#>lIMw853=Gzh%ΚZۛ:$U-HO<\cvΝw׵x:l3l'tC ܰbaӝ;syFwi}<+rq4N{{/W-oykⷿ}O} ~y-?V^>:N?mo|P[j' O_?þ7uO-u߻u$H:!ݺ|ӏX6~}[GQbr/W1xq2a~-gn=yW\?<,QKzSCܨ^X8<8S`a>m9qNz27wP=bW%V͞O~#د0f-|w5o?;לs&W|0&_[Wyq&nvg&_buOXu8uvkN'F/0 5n8<3qoz+SqϹ^_{N9%7n3*85z}~A5}p">(!.>M\jVEsa狑 ӆ7/K*g|l&_<4yh^t7_ߡmgApu򦔛aU|؞sC|3xXsBzewM'G{1|y8'بƓxף/Gz:W'Ȗc/ϵㅕk]'lXQ]zJX}ea</.k֊'L J>9~gj4,9]\-y]a}5P3z4f]mheAnROi5K{Z4%.W]k`&qM~lϬ c˗T9#~x[GxB OW{$+nxkgllvnC"] y/8pONʧg56~=5Hq)gk97v!sտ|l9?=6pl>y ^<|q}},oU{By;]?5vވ(ȟ9ևr8s_S\/rpY~t{jGt}0z\Vg^l{NZه>Wvu6gـד:ҝ ~|b4alzdˑKh#^A[a'Gn>>z˯\~Z*'<;l|0S;<[R雜g-Ou>' s:a?6CX}U?Nwj\g/`cIx`qeN5äqe굖-?%M~41i-p}~im>sv}o=Oq`}X)xhsCy5F|yr9 _4㦨'7]7T7=S~H뢭m/x8D^|t+ޓqg-.?^Ú=s[[{(\=kO05\_O~5m}|q?Τ'KyNZ=+5lggOը`eֲ3??>=ު1c1Ehy7է7\|=wyC#Nͺz41pcH~8}y<9Cg8Y[޼[ =+T; }uL\Og6'΋j99)tFG9Co^p~O4>u{z7~[,[}ԗ=Y ?m_xʩe?|7`]ә>sy}y?\iOP׽.}䫷?7Okh=t [^y)ܽۀksxw j'1ϧ?dr[yix|k'lz-Wpq͵ڣF5I K6}_n!I݋HOv5˧&z0L/>|<Nf>hɃ77`g8~U O} }!բԼa/wٍ:[AČ%NҸ\#ܤ}&ʯ$CkI =uuF*MZ)KN fb/L=s/~9rPjKs67[8._†K[Z>iήF9[tisk6qiG?GU Wy7S=6|j=>KW=8c|lyljWa4?<ܴRU}5OʡO G׏o_'0KɑnrK71?$?~=/ =O;<Wc1!0Mܬ%W,tG̼#cIaUߨ:Nwz^'sv~9gg\rʋ^kk|ϏhNw>'K˗=w˯w} .'}ɿ?rڷ}rX>ލnrU][|~w;ޱ}`}?>kg>s]DO /kuäoL~˯kcO'QLs%/_\͹^fapgG>8|upT IDAT4}'] |!_xnC?,^Z[?1GO.Lx̵M\<Mapt7qv-AkIuߋ:䝸 ;46y/{[C>gZر-M+]ً~C|{-6qp֯} .f[Üe>뇧=Wӟ}nC>oo Nz꩛ؤ׋P/D>U1On.O` ?} ' J—ˮq4qu뇯iR8nvůGWkl$C{{#? Wo8|6lvD|!v]no7587pej [>]M$n:7~}'OtnaGC֤| ד\W3%ӎW}wIu4,~j̉X>\L νgRd<ǧ.b>cG;EmuZSl>s6>q13}"bSk׈/|{%3DNyi-7n67o{wz._L^5ÊgK;rI3ɆM |F1޳/'޸w_}wIc~h9qOY\ɿ\O|!Xuʍ^,w}_~ݛEˣ'>yr+^SzEiZwkj paC{@̓i'Wi9wZk%5zFsZȡaѤտ_z_X:fW?=bD~jK >'o4޾HZоʏo ꍎݻqq޶.9 [|WOy1>sܽ]qk]_/rntm^~x1g,.|:q lqא/fX#ͯN״3 ;>.9W]z_X՜uÞҽ'_Z,ѓWo޾%=sgYp_8/!}ˉ=~x{n _/Pϗć}vگ’qC"pl# ޅa@ K17M5:p0 _ w`݈lOz__]Ϭ'g-C~zֹtq|q=gkc˧ =k5'HP8LQO0 80lukl>LʡxIK WO-2qڳbӰqs= u׮4\{ $J..=MM.x87{?rHAwyhOۋ['̚U"_7k5-,zh w~szC^h|jƙ.f@o蝅Gg-mE]g3.ka'3Gu^ lg뉜$v^/7_?-'=aGarE^7-\wy/G~o߷Y=׿˟n=UO[!~o]#1 0p$V״V8L.9qY ׇn͆R|߇}(O,zvn|CyxI}wUӺ&zϗ?n)>瓇D8IyWC +?녞\tθT9z5rFǎ.>&[|0?yr\uM?Ͻx4׏5td x=pxp)z.NW=żZ^o3r6qx?ů%{30a뢹.[X1r̜̃_YX4 }s~/գ~)oKZ3ٴx3oM7>q{?N{yHf0㷯tO"lފɉ[ӗx}~[u>gyS]zJk-OLjV7 WUȅ!ؓF4[No\Z|j6NzgO0Cx{G-:yϞ󹆙z/ŧm^Ք8Xuq0˩Vob`n?ZCR}ySsfP>^G̚Wc'Fp&R0kxp.Yy;K<;b΄Ap·1\g Vp3y:pÞ5:׿~{?į.9g/^׽/u#z`ZcGj^?烾)>4/wƞ1H˫p=9!vlNprw'L _.|=Gyߞ+^&qKǒxC^ʥ昱l5眱4#)/<е>=cӟSP3퉝\afb틹h}~&_y&/{[`}ȏMÝW+߱tҤcvklO}HwfգqIOyxjgۣ|j {tSouÉlF\n.?8 ~Rʧt`|POC??@KS:C99aWGҏ‹kWAmS *ToqV|n~"_ ?5+\r-x=U 8õ:c:hrw}7xڨ\ZGrcr#~I.[_YWSN~埐kKgj΁3}~֥|cګ8',9׾xu}'~g@=z|bpR4!Oo11OV?wogQ5k3aoӾ }[_{4 od(6sUs&˙sT7rժwk&a{gmI!3 x|iq{̌PkgEN7F^\O(7n1|io^]q3ʣ{NVX"'aoO#\oer˭8`h]J/8z{<3r=\ k0ujx'q@Xy"Gh^C2aȧ?|rȗsyKbf_/NчYO՝V&x[{ԓ_\O&^#9PKN~^[L/}k?pk\0!XϜݛ?>Z?8휐,־]0OvGˁ -/xFBIĪ/NsuxnNhuao=#qu{qbg}A}/;C|r| {N~XJzc\^='0D|pzhm2n9ʡyV7jwM^ՃnJgiȫWvż֧ܰq4/_kinoxczk+c]zGڶ/s@5</aCɈcX'l#qK`7 Z'6~&L_={o쳺4'װ|b^W=y3uG9u˭15!^v4U,sV+ƙ#?~Z84F׷uk6A޾y2mu)n.~hSA9#In[#57mAg\՚nocMqW-8egXu?KaGos};>7{h}>.3]h<.ۘjC{;LA,WVݜ?m}̓xd7p4\zbI5.^}x'n/R>5Vr⩮zqWzV,H>(V/qUg#YʑW)r_;qbZfǗo?\+j su ۨ|3|S"Nw3 =zOS>^<=tijXω=d׏zǼޟ|/5Ϛs^]G.<oyz|݃qVSl/qΚ0IͲ;3u|N<3iגdw;?ŧ=%G4#<6za=oz/_-w[?{y-k??;k=)˵bO}eyr_/I?C[l4mm|#s9aى! ?qz=?E~=U1=8g݉Q?>v5#0z;3XM8ql_߂Gab5=3qs⭇_|jaZMckc˕îW~Cn+7V¦&ggrXOn~[[\Mob_&oHwrD7ѩ|CZ.|?SOn^W[n׏]^ZNNlx8̉x׽^23_8/w'qwH|{.9yYɿTP>U!YsXaa'79;F? O13C"Cnٗ~-ir7)F]8ckل軜z~Wk-> qه5o~f׃0E;z[nVO'_6]aʱ/]_`oΰAԘ!G1vs9CbN&>g}ux٧C ouVzAp7׉VӼ:CC:tg}~՛|q#;ݽcNΘS|jI=W/bՃx/G~"aZտ> 3\q?!ˇ]M|$볹8[Soh%Vo1W׶}vk$빚V1x9ϼ5czo3Ğ??;pRsw yc8q;GIz4p~=}?r=xyk_z,v,~9r?}:_ G.tWO;P\uן\|?s7?l}]7lׄgB%[{(\YOy_W=ZWeqbjw ˁgZF^}a'/@qD/D=2V98cm%_Ln3LW=pg7gc=Ѱxh0 ke6N3^w-p\^KQ'W>uI>~|Ky8L[l-ֽ-/q{7~j_z=3JY>.?߰#_qhywr;i|K//_b30뺈wKbcnࠓzm_Ϯ15Hm>Sq.6q+ 8q]jX;>p<.˗lp&ty=F<ңޭxʕdzYm 耘/qA! ;>rÐ 3[%GoYylO1[֥yՅW}ݼ鐞|3^A1~9tO`G^תT} +(f]k W|C5#|l~'~~2EDNע|19g3٭8&V~=˛V>.q}Q-l)wOswޙq #PO՝Znk7{P3O6Xż\k`+W}~a<.vyg#qWnJ9a9';qO=i\}jWhyS}o=5Iz7?cIZ^{7y_{?wfNi咮G5˼|83brqk{~jN;Z~zgnUۼuUikꒉXv83ßԛD| ~.3n>h8ӸH]->Ӽp9;=g{ӹbD~]u=> IX]c; B>E? _~aͧo58kb$ޚyҭ5Zh5ssm8jV0ovUzz'åӇrnMkO믳Rnm-.??L|Չ/^䇧)Fyt몇+Xyaٷ0sYcX0ԙ+77y:O&~f\Μ&ZZ=Vǰgٳ'XU{aPK IDATLs>g͸'vbԜȬ)8!:Jkn޽=qF|6pq৯xc~'?~,ߵOxW?I_?~ Ǐٯ}Xn|ӛ?o]7\n?~N^?`_5Osۖ^rr;ޱ`nS]A55Zk3.;1?oa_ys^gwF9sL}g=eş=y$>ms29x>QΤ;4ϕ7g_W%?>9cgi1!KSϜpyϺ+c Dn׀r/7_sO~v2r9ć}v}^hธ /X}fpɃWx4`|W2^'Wߛ /bFG/a➽C>.-f5M,ُkjN&nBg7:ʫZo~y}gB7 78|lopk875p%Lň5h䓴\='88g&>sOˉ&_yHtHY~kej &8䆣Y&tb8F7oIgrKWˡZX3aOk?k[/&IaũV?C=\zl͝=G}MXSŭ%)w}kG.ʉ#<3n\/)F}%#MWn_qa3K8p؁uswZ΢yijyHry=N{~_}g>c~rk^œv=1Y5Snr}y޶/_ OY^.|.Z*nw^޼߸XȽw=Ia6Ql~:uz͝;lWk^)C d7` {q5j@5z/Vu6\|&^Z#,)XZox Sz[/_6O1}l0uynGώϚ]r ׵ݵ3Y=kou7%+[^9˼ueS?|ˍ~?_o%O-n{MC.3+/YI|[ &.v{&b_~=M{rɝ\`?o",YɅ'aiÇL>ËA#bt t5ZC)xHMMϞ=O>X j}>>v]0 A@ׁ[N%  CAG梁 8ɦ28$|ði]rwrU_-cXOt~"Fp&\o<v_uYNخG<4~2GX{s6\{;,Pǯky!>8rꉆqKu;'g8֎7jɝ ^E.զiz7d&\b4>+|S,:|dWߝ紸XҞʼnm}%:vxZW5f>8帮xW+/_sa,[|'K凝0]fo1 #j9ҳƬ7sY^z#ޜ)s߼NmG{gqEg<FnYKM=EΆG}W7^+'gw`ԇ0~O5o:Ep=iu|=\tǙvNzVVO:w klX^gk7s~3/V7z>{ٳ~[~kyأ [?hsY^-_|^_Q}>yhWZʱڼ57ogx)jSns8]k vmiS╧f\aϽ.&'_jIW6vfy{u O+Ws V};;S_juӭG<.rhꄛZ^wzlO#)>jo GsOYkz=?ֿpMO|U9[ć}6#]EI ז0:H4r9bR )wC<.@&p:+y1$Ns}Akzr+/ -gc85ȭW5R_|iPzcO~EsԚy5ioqwB0#xW/ͯ=!րQGrrK&._z'{)w{ӭ6.\[wmW|8#GW>WɫN"o pox؝foq 7{^x'>~Q]qw,gX{*b6c{c=f]Os8^8ExD3}jvW_/7=N9%뇁^.^S[qnr>}7xyϾW.˗<_]W5Ѥ~-ޚ1 qHٸz1rQ;~ӍNs잻ZStӷ6oOGkgD=_g*zų0/΍} ooMfGM7^bGG˙ݺwpsaۏ +VՓZ| SGR$.b} ˍլ>'l$|x>t}m DSOd⫳^0&<]#_|b 䄫}Mt{͏%bU}rl} W|K\Ϟ08 8o᧟/dG\w{S}z S Vl b=''{a^/N6A~R4\=^>Nz9O^fV@\Og%3l4gwF;3 gntI`9]?4ǭ_T#w?x+}ʓ{}A^ny/-oXߟ=}9㋿xo{Ӏ夵΃Vߟoo-?˙˝§?} V XmFi0#ĬSsk8ku6/ZաwދO~Yl.|5qg FτӸkǣx;79#>rٽ6:Ոa;j-?]x60qL~칵5jԫ~9z"bF݂rzӃzﺴ(]~fqMgk?+ڣzAz/˹sor7>k/z3ˎ5@f/zӚp%s|8Ywɼ8mt=oxg$Ľz>2x[7gGtqq0|^#i{}MA3bu"{+?I:N \v֧A`w hXMCF>3u0$\vZ~|?8&x Q<}0c R QO[cl29MLhX7e1ۧx\q[9ۘxi<'^eOoլAO\~_:mxdoa聎?>?qG!`|;u0t{ k|='/oi0I0q㟱ɵ&]3c7b3C,9>dϘ9Q6Z ;'| #|I=Ucxcs'4?g~a̍#'&\]k`'qpHl]v!&kRfkܙ-yXj5烩C];ȞWIOmky.zr\q>Z^&V.륜k^>Xo\/<vwku:sfYG2+A}KW>닆?y}qfe>)~p4,\5 ώ\N'F<?{s{ ΧVZɇ)>O>[kc.ob=ć}v ?7M m#XveÇ-u`gf?s7!^O_!X"F#fa?qq櫗pI+y:X7u\ah5\܏ʫ^a_c39ln&3o)iNSzN<\W%fqW?͗%n^ozOLs»ʟ[K Wq5veQ'ɴ0{ 1W5o{rT{Ոsߧ|׋jqfz%},4q+ԭv{=kO|2klY|;;u\{t:W„?dw~ /\dW/#~}߲Z_ݽn}_?ˇ__/\~?ܸW,z?WlwG|cg[ݟ4߹eG>{/a^Mڗ\,,oi0ħ?̽ͦoU8}&t~PtHmP_zkMqݨr٤8?p)6<\7a/3Os=zHfl8q9/LsޚR<]ܼ.V^0uN٫Wq=]{u9{0[ׯ#]?|kc<_?8T9z>&>L\Q/ܸ%O-VrbzOř߼3o{F9b |CyOS|0lu3˗v>n0m d~뇮ffNt<7q1f|O9=r=]麷z/y8v5?_sv\H֕;}Gl?&qRo[}cuw&7ºfqm';kk9v g8g awk-wx)D*q4glF7_ccm }L>+3e?w]pի40|9׷E}B P>_!zނu= y՛5٤y?_0k?#lj7?5xzrY^ו^hjMح/t2טly핺 8<칫Gs8gi7=K錪i̽Tg:f?wGw-e"]]w~K#o^_ʗ 5+&>ٓbg!8=oy^IXcs=̞}3̏/L:Ğs1=[NF c."Bv8bȤ9-:|z Cw?=>uUi1|.'>ԬNF~<HGk[ޝ_Q{ Ddb@GIQL!-Ift ͠ ɫo^-pyt/7OfStoʫȾ\_BpWm L`{k-LG153wωrggK'sg|u`;н7s˿k/)^lc0ZǛ۽u6 g^ L]πmqljX}O C,ق&z IDATWXxGO㷿IbFw8 #O99^NIgIqb_>_ݘ9/.ڸI}HW׈cbu$_`flbr̭'t69ʣ f^aS.=_Cίb$l1%)WOtkχ1;5 'M?n?`ɞbx#''6|Z51,_x7y{ ?}3?xf'll=- M}gzV7s񆙸NzvW˛<Ӱ_럱|[kv{=1b c'wt0t\t~g wq_kk{oWJ'^a3>ZS,C8˥gxM x#> '1RwR;й׹&Lyd4Mx>6}KO=&g1kdӞ=W홳=8XS6̗3lp07rܽTcg+ZC}Tcg~kui[X?0$<]_p󅋃ߺ..ܓjOͧoK8s_4ygf=}̵^_=M컞kc|%r8O{:{-oϯ~:z{k[[n˯??Ou}~ ]"w×}[븳^:oͯ|'Mjg,^&G<>[o=|0^;홸AZ_(To /q1e=v)uI]BˀFEq!']x\>L l` 7{M}R-NjЉ53Zn'.rδQ<-ֺhՂ3ԚX8qs cMǥ&_#& 5^Zx듎G-> ݥj嬦Z`?)T?]~iqchMjzfG#;xs6>Rի݈{ő}@7pW N& ^RoӖ?%nz7CV?{Gp#.U:q<0~˧f 3'h[KO6f̽?֗=gMp|6kٿy_{P/H;W>:Շ1fmq?U!-x3Dx[> q8x:;88)pvsއY;;7^wG)'\Z|/ 8.t1|l8q_GsՂ>8I}g>XZgx'/.:/TKE09t1ץ2L~gO~~/}{xMNyހFSܽ\[g>a丹ֲG9?{'Z@㎳׷xo0l\l94anq4p >bZf/'5Nz'x|lCF0Ų׷Kq],y5p Gv.6+7_9{ݾ'W'0]k_?ʎ'_QWcbj'pt놟0nN>Zo2sS3M/ME]|Zw;{oC˚3OvYv_aJFwLw?p OoOlcJskr7fz~1&G/prƙciyi-ՠwяZ}rg=k՝w?NxO8{[z\_ヾ7EwO]w?>.|ss)%~uv~n }l}(x9$Qe|$͎O)xS}c憑 #Vt|tϔ5a'q|4z>;boyD]~\ݫf8걹ZgΕ=A1i瘗ab'{֛19ɝ> =/9rLlh{f>uGM&~5q>{/.uۇ lũޫlD8l5gT4c+g5=^{34_pq$=GCZ^-Sw]jrp͏琿,6~դ?liu.4= 7]i\oѼsO'qӸ.<9>yv[NIY,ơu3~;Þ5uzetyz ߔj=.gc޺lN;vb5̳*;Y3-0~j>=.?pOW1}aÛǕ:6{_q_Gr~Eן7i?sw._Y]~uUrW?/{֟޻|烾W< //|3;7^җ^ϭ~ryF.Ͻc8=~fp_ls-׸uM>ng6M<3^_%}n&xkwf=Z^`qʭ={7ǁ֨gvyjozS`ׯ<4Otzzi|9>6m-o8̧m^zs?[ȵ$14gio`qgJrW|dޫ?կ|=7c<#'=~>s~=9vk \k4?.^n}=kl<6 f'oq9q|lD|z~&z[C9rG9);vsv1ݑa4uk=kO30pCUC8ŲS':4m%<]zsc^ʩ^}x ۰_M|Z4ϷxD=?|\qV,=2otj'L0'z>Fn둇O8d6rǗ -t5W.0[|bgglVþ&F0F=9 /wy_CO򮷾ey#Zԧ.ݖ߿ߵ|xWC=ˏ<_ozro|r;a>5}]Ro>(|or\fo'~ZR뇎p~ׯ?%O^^noׯ{gӵ??9Em?g GX_̟dsnHw~b}h?3rˡ G{zxg>\5U߈x1OpXf/;;8?R :\_X;dԥrٰs[t"[> F FS>Mo< ;m<Ց?1o]Pz>d@ѭ';_3o&kϜG\nkx6L5؇Pob_E@ۓQ9ը_}3Q MF8^u!/s-OngҺZ{wzBφՕk7p)6s=xm.)V\cyxz洿 Wy5SjWra3߅o>ӶuGx ^=ֹ8u =U#x~a198SiZ6I}'O_~sγhmα寧j\kvr0y^ϼbzbc_|ֽoScoƉ\~;m<Έ_!muO9s>Ouà}q]fwZsli#} xu?={ ]κըOSW_`pW+Z=Hl){x{T5^<=':1sd~$O=9+C{Ϫ>_ufz3HW>>Ow5ƛ'_|ףS|_V^*F|ݾg]b{n!n8CԎO-0gX">ѝ+|[d{{CM7ry˭.˛^[֟;}s =~7o-Om~O,+~=^#Y~?J_u['>t~a>S:יִ? zfiwG;gOwqW'>ڹ3-FꣻL|pX~+7{';̫mOz_#js}x:#qOl謔/}VV=rP.s%=".~^|?4N7.d #K<|v9oNZ3:">{.Vi\ɝM3<_|,xkk޺r0U 8o}/\"S?_s.ȗuūip7J/ZFF=Q^Ն59lp yZ,ILlqz>N}Awr3>{5v3o{#Noʟ.NO|r҇0'|sjmsq/琔#־.n^;4B97ޱ{ _>^I޷=9MϷɗs8Gwȝtw&Zu/pe^'1e=F/3OQ~_$k3`gNΜMmOsronTu~qm<+OGjkh]埙#O!?_~8&Eykq3A{\$Qԭ.g{i7' Nx5L?szςjxmrþe҅ˆb%.벸0]1¹hǜNnʡފʩ?~\}sf]ypq"oMޤYmS0l1'aI!W.L9zdԛygpqT? ~5ox>ڛw_F2̗GIqÑMۏ Kj>e澴&j͝iK<óیD>\S[ǕހG9qԇyeӭ}r[OLW#~ [Dm~gNp%oϓ/MͫK:|泿} 9z|h~vJi1QSG츼x^n5\ >ҙޟőFxR<ٺ[L;y>sk+ȳ~L? >N8ʛk`{-&j/L(nnt%&|=%c/ԛpկ<鮚߯1>9Kˆ!38f]Wv:Ƿװj⟼a㉟Μ6:}~co~Mxr,]I[|Oͯ|`p'|0w~~Z7.yC=?>^g=YcXziAZkԧlW%LG_"r869VL8lZ{>ӺM~UU^&yOeU׺t\K}'zΖCouKWW͟čkb[`ۃm/\;{!)Iͽݏ.vŻݟi,L3b={s˅%mO` RObgL^ټ}>Lϧy%0jɬaYaa,pNo֒S]Xt_=&Z`{Wo>?_n{\'^\gǡ8[amTpbpjy6j/Ǩv"G-y&9;K7|8!n䇉Nꁶ}pCg=V'Lun2ʁm G'b]O~jX>w ,> \җ7>vˮӧj7|ܖcE͝W3a}G>=S>YFR\8xmbQ0:#a7Wp3zbő{~s{Q/bj>ymӻ3B}KO~Sui= ?k,zaj󙟘>a߁v\t9a'$3i6a0Ö;)x}\m[n5?~z#-61xvn՝8vOʗ3Xxvloɷ 7xlM`c>OY+?UK>عƙ7dv|x;G5qWyIu&!\XqR'"'_Nq8RӾ͵n]'}7Uc=5W7K1ڙt?.oJكiy~>fާZgO1W8${o{(a'9?߰vr¶7u/g¥g}~η<ٴ8;,{?jƯ||jU35{n8f=1--ֳse gnTo֎c`ǿiN:gbr|yٗbዃ'g9tCL/3"Ոs`f=<妷p>t/~yro咗٧>q9s93^0~q=/>3r_G>|ϴƕoGg?ٓÚpӺ=Kĩodð&_[>^-Ǩr#5y>:g{sYeڇrw}ex:c;h ^~)\SLtvqS׿QŕOX>k_z+lgIїxƐZ+tn݀.4iPwzOH+6g\땆\SӾ>z- ^~= sHʅ/uUڍr:_=[x1#zC2.?i/o!^ŷLtk3|SԒ3os^nʵ[ ?;+s>Z]|ŷ{'pO|[\Ͽ\s=W#z.0<ޖ՜tK1갓ͫ?kg3gF7:ˉ[OqS~:N3g1BwՅ3 , _ rہ-GLC?쟯OIki☣8]}vmgh} {7Vŧm8OIr:k<"ˇK|><>"W^ CO[椞٭/>q!O`c}V;L~}OɁ)^_wg\'.7շ/xXrͻe>^-_e/\>k9?],\/S_ߞG_>[G}G{ʞ_#?=i_M~>cbΜy~t^5+{>[걹X\.3'M/Z/|Xų~T;y{ʇLr~iR'Igesp.]7`{fy$]F ;pwQmCC %&]:vt>Y~5köOVt|bSm}b_8m q| u Ύ~Yy{;G<Ox8ĚaZ?Z>h njNݺ#stvtx~ӋA58m̚{rí/VOt칆xr`tĚA_$n9.-fLjgM|3OY_NGi6ۼ?v8[v5>c7̓ƹGzV-'s{y8#-g.͗\{YqIv5[w|t_ÕYx~Nʹo܉v_C>ē{d埼SKٮUz >v߳] ?1bjW}FY>lz ժ3\O~L.R}1\[\/k \h~q5#eo/]#yo3aOl)/>+gbkDύ|U}'9^:&?:b3j䋳#h>=_ay^~xǻ,U}~yy^՚iꑿu.̜Ǘvr?_<.?k„LymaI >gyꅏki}!KXc޵Pz)tt~ZKx&w/qM7N2k W^Y;ٳ9 ?٪bsp"N4_zs6-f[uOwpv{r~؁ɡ;"F4|~w)>7yze!/b tՙqWFў{G=Mߔ;KX u/xa>gǙ5g>f04^yΞ3^t|ʉ7LzoU|؟|zڝ}HexX6ݳ5*\\՚gWuqi7~?<O |_wϯ?vt7^{9孿,e╗AwkoϬ?U;F~e@ יi={p_%Z=g'?k-39ꉇ7罓W?W|3b0:3oo%}}vt́.XAF2s]@rW~1`Ex:n}ZW9j=43_b#qGкz\ΚѤ3g:K9N|KxM _vk$onEgW~:7H^qq6C}=rfQOW:97 00}xNoG/H̆.]/6<:aǧO^پVgzE9tg/{~zս/|}t~ZN6$6c5Ik)w a~xqa7OkG&wѽ/U#Zl;_5/6H 23fΞu/_N6]&89xw"eSo{@̄-0>׽ΞOzes_dOQ?|S{kJkaW/n=ӏ6)6i}S{}\M3 _\py%>„5h5èV%W%rK=?i歛jk:Z0(w6r0l\tgTO=r;>/xòb.w#>>c:/8̅\ώ3=&c^+ǞOo U'{ibeW+9s9Oo9_/|8#K}}Np5՞kf:jŧ;#?vz>vnxK>-fy=4o/[V9Shq575f{6 g{W=ke~-nNج͎}Vkx='&xV-&.w/?<[$m{3$͞T pspj5PosFmy_71KOΔ5{>w{8Wy;~⮗ϦKyWs{hUC3)g|է[+y|bJӞgXYZ嫃CgǕZ#c̴fb}o^{󙧧zϿ߫ާh=& \Mw5 _ڀKFg}㋃M 3^NkkkN1s.wmΣ ?ͫ+!N!ל&Wծt3?ϖk\;j׼]rq_|WYjB/|rʻ`EjqO~Uwq=f罳6[OX=ÕLܙ[:Ni_Sj/'D^~z9>y|FZ6ץNCÞn+L"_.ߚ K?rHO|y|-^z}.wm%2p*e%|j˛9}&]F6хsVf>̳F[7._z/FxZcO>y.b>'?bTl:g.Fah}ClwI܀m?ꭵ‡{ G±ٓw |[μ2=sGf8[^Z_3y>ll{[x|@0Lč+}(7IĞLM!eNȖǗή7b Cs FIW^Ey<ٷzyaqoxA#i㴏嚳ɖ7"'qpq=]AoCg{ww7;]_׹r|rg9M[.\\XN9/g.|/yr[3~&޻׸}y,>F":=ݳSC_3|]0YV5aGxdbFRN[ ]~jv\<O x;^K#x`.ټՅ!t&K\|x> ׏ix}39 ']N'ozzKZW9r~8 >zwr n}ՖW?z^s̡5a~Z .)VS-W}=W<݇j䧓|Sjz|y oKl(;:Ǿ+onGh};kR 6Z#gӸx'\|nƉ=S5~鿏~]~Ɇm?[#'sڗ×]zp"V_qkbD.}kS5⬆[9Xgq–.97Ϻ{$|Z\C~x>R-=c=iZy5k8>f>6ɗs?9w_zo0+xܭxa"m|ó+__6g >"Gz:ٰbꁮkn֨/\xhο9֗z S071X./ [?q~NWSx] VCz՟an8'gs㢝i=Gw<$pn1<ӝǓtu'FtU{& SoήC '?O/g{H|IuVahI~z$jP/?NB^^v[?{r7}7-oz˖6)?/< O=o9DN[;^׻g>s︼o-,~Ocڋ襾 &\[qizI9ðg M<[`}q'=c7ʏ~tg*~\ۡ+5[?[=gn)-Qū|rƞ씓.м$aeG"A By>46 B5B;?`gW냭.aZz Ϯ8~I-"Z}Q> k>#4 /FS|7j;&nZϝc)lgkl}8[WgoQLMb IDATah~xy}ia Q >&%je;ĒčbMVSN֥6.S#_o{9|=3'\L8m[{FzH?[gQ{Қq/c}//i]^rsqr4Żt*VSWG4 4ip=8z8$gn5۳xj7w=av/{_ES5SOq->wr~܁wÙtgnȟ.;$Z,܆>%fNpđ~[{ﱓ=SzQ=%ivèU Wˮ?sx΅n=aG98&- ^V;;3qw"Dӓ3 ]Oi0pۃ#oȩbzW>q8cJس>dj탸;Gg>=į\|rPxڗփS>joVXb{=Cnq&g?{ӯzK__>myr<`9?|YXNYB}rO#|k_\}'^'?=w[W[u ξ;jGڏ&'i`{Oa1{X˩ylj?{J||t5aMÊzc=`N<\=xW-:〩&|>lP׬/Mpomsv/)~bgޅ`/6LwSs7}[cLOy/>1okN?=\1~4Zgu/|a['^~GGtnꊙuW"qh=af:=ÄF{&GkFv19,af,θĦ=So2Qn#<[su I7mToj ֆ#{aI|$777\o0Es'}nNK8m9 ԻՏ6LÈ N?[)vkk^|wr؁R/zީ&[a-;GkNwI Mq雿?>~vh/faj>qbľuZ~Qnsll}?Ws+ֺ[:r^Xb{qDq_pI=ևWH\üxӼ^?spg7ExwX|U3-{Y^kO_n}wYKu].x X'w˳򔭧,=ý/W?}{Y~vy[޼/=iO婏xr=ho WrfyszվGI'q Gw&쯾h~egYn^=Wowf.jmcdO<{Juꆉ0 2op[W<7&f 'zanĽM^fԫn_hZG4k58os|qgOq63}gp̝IkkAfc}paq5_k/ܡ,n?%jG0;jw\հn'xzWw&<~s}q9R?Lu79φROT7Lyahxً}i54q__[tx2O]L.[r3#|vtϮ%}Jßsttv/Խr;9;|q0`H{WbahE-_Ŧ '<_9FXwFxaFu#:O~|b4x&F g5xOS#Y~y>}o}k >_3|Oq/q.|r+^qy˫^~?<яZ-r˯ǯeͿ^~`{߰/i}ش;'k8ge0ϸ)<=&?[ɑ-O|%—_}L>x~8~묿=; Ok<¸TSj'^*_\>н471\xI.Sg;`څҘ;T}g7,qt&~r˦R89=yát9&՜5Cb{l$oPSrvܽqֽ9yG@׏z>6:GZ6Y_ͺ/0Hs_ȫ܇"=Y/wltYqO=gjMQoOl0=\}?[|Z^rZoٟɃg͸?uG9{|)^s ̔z#JHŮ&>s"]._yah%qsg7?#v8èuRv{5Gxwk޻y/y?)gwU컚OC˵V痝ToZ^<̋O7ԡyCN1uȥ-&?^1ȉ'Ǖa'\_Ē]Qh>rs֙?3zlO:Xˁk-3Cf֕L?Xmu5/zs?󇝹ZY\Sɾ}g'/o[ED3mz-_s+/[?HA߯dox'Z7pO}#~_]O~c~ikɶkm&'_{3uSZ?$0p+f qȇi=c1{)_r˷l[yv;4?|j'ܴ!'?;=BC#dxQ.񸴤zq3 Kh8d|X5q׃0 %Ӯ7Dn5Zc)9~D:j m̜Ź/Փ\{7j&^Xٳ) >XB<^#oy8"V Vot6?M?yvWn˝-W//Z?rw%/^boq׻.Yoz,Dznkι5mi|ijO[?{k^vN`k:=op1  3uuS\yknr'$L1l'㌏Wlܽ\aغg7rŖ팤u꺠lm6΁o3u8')y:(ir'uŮuq^sgc'l =Mz>[=p?5 mgsfWjc7mn4{c=W|¦&pRtu#\sՋKpxW_38)f?c<5dφ#aqįoı֩dt~3qq|Ū r}\bg]l-bzx?G-lxsIgKc^W[5)޸5hfjb'$f<_ګi0u>bL|-`}02}[l|Xhq<ٸzap4qTg|ۗlrYcX6g04,>Z48O:X4gkޛs}]ktk,oc\~38gR\c<sRŤ喳KbiwmY|ڌWg\jkߚϚⓣۼ3!]]|SߛPR\`{|ۋ|gʼnɇƮgO5V>~j/n >_b[x~ 7xgIkS11_j7C|}|i~Xf89TWchx1_i$Myy~wyepWĺcӽr7|'?yݏ}sw_卯|SxIҸo= Ob&ޘx%7a׺dy|gLҰu*G` .մw]-^`[+q5'bԲ7e?TG7LkW|3qrѭSra/͸c.|caaCZhib) yZg)w.&iiÍz<[tu0~1ҝ[\5Ԝd S}=|xHa#ɏZeZ昭xȡ|7Y-[5ߴƙfۯ%[2ܪ_rǟ5_{Z'gv`kó-?/;ٟ+2/>zƳ=gc?~uV<8֍=*os:bS<V6֯u/O ņ5zWn:~qKLOMqv046 3s Ϟd r6ķSo(g70a;q{][L{{>m3a^g|dy?zyfvbc/XzoZs4@shlC-w=~+ۏzTp2͍8[|[j!=5Z^fpagii6uε[ )67V˜<[16ORe: I%qoaq$ٍg_loO\'jiG ;7T]/Ωg֌r~kh1߿tݭS=w_5%ŤU:XGyW=3>ј:ޕ{#[xh󠉚qZ؍awɾ6jHu6.<嬾j-_u4'\o-5w1v]Q pǧ&y=.a:;k`c2s50'يJ 9Y{qi>qs33{ᯎ{ƲYl{t\[/R>{c 4WZ8Ok{8gɧg޻~ ׁ_/Q!ή c97baןg08G=/$z/OzY楞᝱ُٓ#>2Y8[W,G8D ×}aq5׺+^o_k/쯁ڗGF  9 Stsf,_\MS>c)mnQmʼnizϿgéyΉQ}W0|y/S3a+Z x!!LyC߶E/y?ʧ{cy swXUwl!S.{%[o^˃w [-[.VD[流/?f/fL|t͇gњٶկ^,LZʉ|*~vw,~{LV IDATz.} mf_58.x-3p;h~|`-׷Y:ӟNw _xyz!8\X(ey#q/~闖_G~ m<0HG9${XE., *rGSǾxZՕosGqWGs[0'qxΥKO֧ɝA\`5tRtO˭uNf\f|-k[61W{P]bI_}6[t|ÐbN[W9$N)q>5LΣ(>./'}$|G|1=_ʡꎇ]\9f՟^?3lr}ߟ>W^~r֋{կ=lks76|}0峾S+ͯq|pakm٦/f]Q?͸Nvowyaf̕jϧ4<}ɴO|S?ĕeߌC7bl-~4fB ό%3W/?_qƑlq53ۯ.5yiͰ>L/fru[p2}WU|Wr \`yW?};NGџng;@Yi|}:5&nY|>OG I3nsF>}|qc՗m?G.xgOgl8h5xO;fmƟ1__c}}0tåeK1gk_a COIqq5km?5.|}lv:֢p85_p!QL5Oa_?}̖/o߷^ll975L6媦xdK1LyTc tQ uv_[ltñ%ޕG޸Oy#)o_?u.͵O].~bw+:S5ׄ=7 Nו??Fy{屏}uxomo<]|;/׼5K]RGl6Ŧ;x 8_6vEKl3ÔC;8?lą4ȝ4bh1ֲaœ6XķFٌDwћ5]&j[04i ߿d_N׸<ԣ/]}ik kO>~}ooߺV?<9ˣY$̊3m_Ű7p윯Z$%t6:)Vr4촘ӿ 914s{ּK7OyhyxP#6 w^{'l3&8%Ϳ v\lpIs/^ml$׼7.>\kqzيKg 3f5?5{q8_<~="O示UL2Q>^r4x~;m57iћ׀a޺??;Ͻt㏸||>pZ׾~'{9|8j5֧K|xa'ʿׇfo, _Cxz-.T6ͻi|٘&p5x9!^M|/><WtnMgƾ%xh0S^q<0eOs(W1q7O~yna ?[G<_ñ6gMcD.XҚU[61N)Akǣ/#z֊8'r.G gޙ># 8L>c>qY[6X}?i /1/b5,3'ĚF"qIc<3䭆?Ld?n_"=]s?s'n0og697WtlHjq̗u\|jiopNNa4{(fm Ϟ̾}#l5d9y^uW/| 9Q{x֞ 6U!Z5>¦Γ}.yc/bk^XMu$ k/9y~;bŨ>M ձ z8y{QOm>~_~>^j,ͿUd΁%} #1\_E 8jtklAC5GpK{zY>q|i$=֤o.|nWcqXp4h&0`-jkڣon@ `xWٻ>WcqֳY~gbX׹ͩ\tِ<|W}^O~q3Gk9Kp͹nm'L_?x&x|srd'FkM51R^9ph͗_PxPKlW\{;uz~x-]m?ݕ_#-u61vZ||x563q &wѤ|OT>6?~qE|V8[WkO5ʟ95~ѯY[}jnOpsƤ:xK,OzgզoX}SWCim:Nx>0Ւ럝dqi((8O}Zqg\5b&֘M!K՜ͅ·dK%sγ? w9TkvOK|lƳ+]=gZ:+6یű;O\:hB[S[wm'Lco4r6|y򮷞g;{sG'تWO'4INОg?qOξOdO{Ӷ0}./^"_/bӦM&{M_,[O 0{Gz /M#|a4/F s&Z'O*_{)&gq|lx1n.G>'^|_?~{_iG4~rqFwC1xⲞ`}?\SN8b \{Q=qN|9Iuf3L;i4\c#t6:ָg ֶ_ޮ Spdj<Ӭ1=}Wׁ Cr^//\|+m6gcp3o͂x`59].;ll{#6>Ο>ƏüHYWu1.NWp4aH5un&VI?7/j~Z'X>:䫞agVc؉q1f\>8v#aA&7⫁e 80y8?hgbSnXx59f[xr|{|&tV^jFZSΞkƇ8eS]k9뻙g߹'硺7鶾?{}.kׁo{Z5QC5~|ϚI6jQlIgg~t}7'<q_P5y߻޵헼N,1] \"/[$Fyobj|=*_yz#p@ϸ}Y>π(W|W,7M?q/.wd 0_?pmpf#h6M'C*C6cȬO;|ja0rq,_|D8`É3Ǜmjsh(=箯 g\\a6}{O(^HMWK<8'j׏.c,N#jM7..^b4+ܴZMi+Wfg|~5iaQMs}GlYgc[ Oq͹}(WG|'-^D.SÄ S]npa8G|IcjcJŅ.6͚?\wunְƕor']l믏+ ;>6/Ě{ϋ4G8HR[cޚLR531&˱ѱ|S V̭@?|ym}u\>J#'{8}/{Nzs{L}aGqo-<,<<Űr;鹧OyZo/qVUK8ncZ9mLg vt1reHyazyZ0zC>lbyiX;L<|biK-x\G}B&xKﹷ|.Ƴi\]rU_ɡ.v֥Xã4Iij_jbI9Z=ԜO6W$l 7ۯ)~;x?oqnp>'2ǚV3ݜ|WhS.8㽰q{1_7k]?k)?_)LUx4c GvZ]UqjOؾj}#Imp| ȫSA>-o~ͫO%R0c ]Tl.?a5hagIWB^FϭxdO [ 4QO3U~knj>ng:͵}C8Ƴ65kDmb04"& {HOPojC Sx/]Lsp}7?7on9ǹν{+y'~C6 v7'w|[n. m WlኍƓZH ̡?aO3ms}ɓ<C痫>]iò5e/|5f?95͕/;gm+nʌgd惝6}\M)~֠_ xϸ81g;su{֟s>S5~=_y{ֳu⋏}>g3||//;m|//\|71ѽOtznqOX{?k>L5${um\mqŏ O\΋)j|֓ǔ3ډZ{b5%gn]|=hy'< 7}7-~s'H=绖'׉~|^o[~_/p lc?ŧ~ߺIx[~aC5Jɑx77Ksޭy5 >}Z#5H9=@9&9jo\ lf jlb'_i3k[.:f7[sorzPFʹ vOyoвpj1q0į^Rޡzg{mtZӪ/,oqjC=:7S-pa܄npd)M=n$:ghs|?}5xz橏~jSjb_-/^LLli~}tN=ZG0$G6L8<ҳV)|⣋S?cn ^r,wݷ_˿]~ƉMMg3p9{FOp ~v6Ôؘ@u+ëEM.gOXV_78rLJy'FӦ+g3orM4z_dΧ:`Ē'm_us1l[<>2lk7XߜԳOr₭FZ_ 0V~v«O֚[N5\c~16.&ϋ;0ҋr6s:7&8֕?_9T'-Fl<39Frgvp˓/|j soXM^8{ X4~qWsn[gX:q}͘hm~~9|eGm6\[ZL\s+f6qvZΧK`IϦ|-ۿ|˭nl~k_umDgg1iݜlı%8Hkؘ>a`L8f?~;tyv&xFz|29SNp%D:lmIsFci\0?tA.!saɣO ޘ_pl{<'^9j| .<.]qo]شM=gcq{9L{t__8'ӮerVsg?m֠y+ͱ+מ8gpo\x+.l_:Pr9$_}uV?-Nuns36y[>-{:3;?o54C,9#<ͽ~<{|qbn}$x:7s)<^y7ۼW~Vj1/^w?Okk\jsh-.5x☜h}(68^+9g}㣤ٛn]| sE⎷#9)8)|iau0n_Cا֟|dY߾磽>23oyv{;ydcgu$saOOYzיO:o9*9q٫W\a+fj>ߜSZjy͎k5FOb#X57z?s/<=>Z ][K~◣3Ƶ-`}+kW1&oᲅ9f SL9ikn&Vԇfky [kͬG}IAf-+,_8j׼?Tu㛵 Is CYG4϶~Y?cxOo!,omڳkS֫:7= W=go-؋ϗΎWI7=>`ycz?k_y׾M'?oB)z-/동߻ +*k^험?/um߶}T]'n~~ryzO=$nd9C[X'??ƫ0Sǁ?֧qkN[ð=s?|Nb}V\7읡b?> 3 n]v>˫_jÃW}" ؼXꐤQ6}G.-y<8`/']p1$ gF'rc}aϯaOZlՆM&S z5'՟u焋77>"n<:X&|bg3G\3f)g5ă#Ϟ~o릏 FFb=ǝyco[jz֥?Bњ`>1Ͱ>1Z*]7mrUK/ N[w럍>=㐖;[̑MlkZgle.9w 9Ԍaqh ?%8OW%egS71 8W9wj?3WgO|2:p:;Z/lzul?=:m;#8'_?5{ XCq]6x?ׁ\ί8#e6k¸Ә+f3t5i}*V_u5Ŧw/ :h$.rǶ߼`L|p5ckDžX-˥5bÅe#S/ĖϜä紳ͺ f#OGYON茈ӷ y',z_1QǜuƗ>,ml$[ pp{{OJ{C;~}5W>kj7٪K1QW5wi[8͹F{(o|=NjG3yYXz3Qc7?~ nyy=j[+\wn_u˫_.z/0^g}s^߼?/o}}}?g{^Z3MG,m=4Ƈ4L{=yԧs5'=W[LO3a#S|+o7LЙh_W:W7h̦li>{ۨ~mo-ンqΥx]k%{SiT|2媾L/{>zJ_(k|}s<ۻdؽƻdpWtYxpkƵY[lao$\VҤua+W(w8\\(~Ofy߻޵E.|}rz~wnD^ge#/{1y:H̽Zu߯ͱv&5x'֏~Z޷~zP- N>"z>r/<>U7 _c#^йLoگ7iy$zPR{}Lˍ"œW>{Zt |Zs0p`2w8kN&勯xo9^뜆Ǚ8_8czDMD.Jߚ)Nqs7>1g\>돻8K†i~s쏜/3<p z`T{-Nc^QuT?Npꪶld/u ۼQ=O犟~˝uxW6a &ךy q哧\{(Ynwqֶiqi<+xkq8iSflj&3KIӞ[ 3y[)Ι7M?o S+FD1w[m\[3WF>4XOLǡ49SqJ\5xpk~iO =y*qlbJvFɥϦ_xAkb鞣;^5aqCׯ.~R s@.~j֚'?_62% ߢgq7rX?;֨\pY;U[JIOzѸ(3X'r8c `&O88JyGuφ#AӸ#N8cz֩cZyqjs>n_x㡉M 1嚹a _.:)rN _g/; Ͻތrѿ[_;_6]덞h9m\xmh}s5oOWi hx_b}k/Y%~uS7o7iO۾N3b&/|u/Z1)s9D}d&׸ፖgu]ozSw疧s˞g˕q%v\K.\˿|q7o߽_;>,=@OܞGG9y認5{x-rWO57yR~4}+OrTǡ~xnzrͧ7&/?9dfh 3 g_7gizj8\Óȑ[05kCrM.^Kzc~z.[YscAy[C: 2k6⪮jOq'܍ ~g0XlaHi3|iֽu!ts3.Ƹkȯ!6` G?/')X뇝5mڷ8 _>Zy{Tq-z Sw/Һu Ҟ"uk-5fܚ \ت3,-oIa5].sl-9K|/>qmo{#߻,׼5x~h⛟}鏻n7tn3=?t&OycF,w9: W ut46M8kx:ř?̬_u 'ggLy`Q^< Άv>~Mq};ُYf[/X;n _$>"ww}jzsy:xi-̵޼_'>ܝ+l xk/OF|aS|kGnbP^N>o ,8u]rαc-?-Y믯O j$l~y}>ys gyʉ:ĉ)>;c֩jX/]V`qo?}g[^^Ju5W=Ӭ@ IDATWC55.:k}z{1 pإ ˣ~׷Wr_,_V}&s.x.}s5uL[?;|/G7ns]cw_﹏{JYվ[oWWjW_mgu.kw~͵V_ۻ=,/a~^Xn}[o`sl/j=>~O}f"<# 7O|5|mzv[>:1_dS6qvzT~:>w5g7&s_ |xakxrvUScUKL,՘.6]..|ha87&/ظxbhOLp{k\Z֢_lP]Nٷ}R}8㚺fjgF[#s\OUY[6y>_6~I3&^9[08Oָ\t}Ɲc6/f5fJZK/6PL}Z ޸d#/c3{L) ^9K^=aw}wxx:} rd{- v\}}_w{/^g!oGuk}<`gs'{tgmpՔ_M8b3f/u`0ՙ {f~mɟΖn.հד+0';>M?^x95?o7xxzs*tO n֜[?we֣!ΜbH\q7.._Z\x =yʱ9?۲vä'򳩱wgf|c_S\ǗT7筿z؇n~\7o>l}s׏~~oyk]K\"Ya}&~H+~7,Oz-ߺދkuL^'/O~Ok: F' _}}ࡵPk-'xSϘ0ldoڗixfCqi?ٙNt-__bly_ .@?q{.wY~dI% 5f6EC1\l☺>1rV`'bV'6;Ai/N#f5OO;fyk$>8T`4.'lEz84>ǯ6_Fls/9aoqd֦m.ٛ'3=>⦞5qb>j*z8XÄwH^ՁK|4\#W{/yƴO0|pGpklcgSCk='`ՂKoLo68ɜk5C0(ȉ?4sA|sV.Κu'i;[`'~Y΍t}_k儙xMo񤋝8dӬ u)FM~v 8//i^Ck ziϵ/xvOgߵY`/N95C˿9?yL\m0Kn!'GDl2jyn֩stώC,4je׏??I9qq9'}}_ؿ[su\Zƭbs*kYcodVլ}؃sc ߫ ?u~ۭwy]n>^RZqg?z9ucp9w]X.Pdz׿z[.\߁{޸#uO |=z`W%5ȿ)liYx>cM^\dz?8ϮMN$Lu[ƟNw׽`._}!>(}Z{'S|$y@YT{Nh [H(!*%QzADJ*MDv4Eқ{I @h!!Г~'l~'r)kegͷgv=}Lbb3lj XcCqs]\I6q:`8.~Gny /z1G;4_Q'丙Ő;^9yx1sAֱFcO<ģ8~m ;U?α`q̊i? :L:Q}A1 oCAʱVO|G,lWf[|.3F1clw\@Ö߁mz~?ʾQqU%q;88'oc몝wTg  x:I;ֳm+oĤzŖ7 ǃ98s!/l;LlsYOAFo9ؑ mr[GoC)y>`$b#ksd&8ƛ6kz:nuS`Q x.܈ab xx>:z`@\7L`>vb#k9}2ulj^9[̟3v7f| 29|hWTzJy# ^L\%Ӹ,ٜygwU\- >r)\< wر\WVÛYnjzȏm]Y565n\vgĦV2+\WUw{e c_7vw[uSw~Dn浑>ǒs "grf&'8 8:8\=ڐ8`ʳ;4sX኶81xY鎫k7+/ ex8|O{9rxQ,}{ָnx_F&;GeWl9Le~_2B77ܪ 'c]W0^y2<Ն`}*NdX Iɖ#2`[Y.\m|-YW- \x.fm`_3f ; XQ^=YF%p(NM9w! YsA[{l:m D̍a1_<rH|+FOmq'c ]!YiC)[;XG/uh+we\p)QjgIupP Xa NKmg?u_۷6y@G,21o_q˾_9:n }Go[,@=w"_1Cn{wvm<03.~e#v'?e]N_/92H;ʪ#PCRG>֍I;67Oy T();pxH9?!9ȶs:)V^#mAmmۖgepO8}|+t[uUƇXPK0_sij^\%G1Op)ˬ0Gf|o1].fd!S {]x;(vvȭ# 9/5f'߾flCAoN\y2yWJ1^,z~C.'s}s?#G//갃[p(j%ٵr&`cX1'0!C=#Xp gS<8Džk>і[|Dl:PϾjqlm>g*}F5蹄8Ωk.l p@-r۬+l$שv:T\p>`|r}[{=ms:s2qEg.ᐾԱa  Np9~扭urYcs12!6rd`.`<]^\[x@>zkޤ?~w뭓n__ q}[q<oY6y76S;Yrs6pWLP5^Sw WчaӅg |nt킸%\S //qq޶ܵrí#'1OuHN2l z%|== bd[GԱ 7O8lkG&!^7Ctp!1Ɓ[-'ƂKccs۱"GqҖ`"Ϥ2|t9m9pZ"yg q4 }e!0,ڀgăC%2OtJkONu/~&c_Ӊ^ xCt1q:}8T=>̩OX fL2&usO G1kzdeb0ϬD<-m9FpIUc" _FuHY˳X yzpxGx2t+6_c?Ir֑KRszo\p5or!<~#3{~.?^#11ܻ֩{,>\ˮ%x>X )l]K;*mťm0!r NȵAqVdA _udg~#utdǐ:9[M?͑9sGϸēG6prCo|sgO՗1lg%-;?O3G9+k=vAɠb~_(ccGhi#dmK(BѦ><‹ժѦ_,7⍷o*sȱ0x+f+7[ ʉ!{{xy9+TW}xd4 +YvڳL352C#Jk݊50Mü8?8PS :l+I*V|5Vҏq262}Q}So J7 FU!L0  gիc!#ϋF,-eVG[=X!b:zr>mH\i6%֔4%]al-訓u:d|8F,tm9u[9b#ieZwRK:>;a7V'&-usȜzv^x3f˥3l弨 -cj,lɃ` H֔?"ܱC;O\Ѻzu3>kr 0^Ĕ.Y-zi?I |:-!7,GN38k2M.2elsP&7^A|6Ll;H;9#F/e\W?%b'X?;Mx !ߵ9s׵dP^޸sLd̅I=-;7~wE_cG;!s#WܾbG֖7e-.N:e>FyGڠ/ -rK+Wsn\T5^fÆb.ߠn2u1c1/ױ"ϟf}'Yݜڶq;3:R#orYy_9uYGڧ1%g mFׅwi߁`CصrdOfx9hʭc\_*F|W~2n-c(__Zlz&#nWD0 IDATy9"|tĈE"ț]%71yȕ[(Gȋ*N˄ c1e )uXػqm+xu'>Mf T6bogNe}U|ƛ(Sx^#yqeg#:qJs™xx\MW&y僖Y[c™Wm9ښ{{ܸ>> N^?¡)rbreS" 2p$rm}\zA}FrNjL6zvYL8;|Qp+ks. bRVL',# _Zp#r1GO9.tpӶnpȜ#탶Q^2L@='bR2վs+<$}̍~I]\4>us'GI{\ g</crUX谣W~cKA^7;&ps.\(XcWiWraD.ߜuoeOΙxc^r|(}:߂/uurQo}ЁuwHt_ڡ3gZ-Eo'USz0a䵅g%p(b6sqtv[f k}26q6o|6֙XȴSPWτxN`8L'y;.Bx`x#(^1L^=1GLϹŽv;:}`v3K;r[\}Vu!ka}FB$vYt,xtpڱ8\xvr1S7XF\'@lXx$b+mm`'sƶFLp섁=9KYnN?ߺ}cG\NƔ) 1񑁧sN!.%F{1m3o$t:~9aub!B9ym`mWL o<] epr1B1kj? 9D9cuɫq|`>*p&ot=u X90'8pH[X7g쵓c6FoPrNx p0[ =u<me[N=9FћuDO_ 0hC9aΏ_C{Qн819Y':zq 1~ 8)}:m3@i߽ڛ3yoך.s6zdH\_{s@-(Ȉ'84_m i͓֍rn!cEOn|2붱QLJ茉=zb~0F 9Écly5qReʍ_\ñ3GBe\Û5ύ[qfrcE޸ Om~ O>9n\q5׌|N|#<'ЦO|?w| q[ݱ8 7}CƜGXYpd`jc6y]D7 {GΚWQly@7#︽y}-_[w~8s1=TI3-%6ʳϔiﻻ,֛UWZs:.c[X[ɓ.ƌ>yWqMu?Wi'1dćkCx`8˳7ixKe/MQl(`'Rd exVUSs؃[1䞌iS_8 C(~k;*,p 8z9:cv#CG9\jeulw*9 'ˌǶ"ϹN<$SĠ11k^,[a/`:lc׉ lx/.@rSOvmNZގk>ckȭ˵퍷vͅ~O>ښ >@z~κۘpL)mu Y>벯reO~g9 n|*@\o{Cou}\w5/u׵ 1g6$N[㛳pu|-ca 9+2^c߶nW!υĖ#n.-]ZvwE'T6n{/>jOnfA#Ph aH<,x;x[΁:^Ǝ- P8ȇxmhw*+P|(w"[s6荑">!oIY',ɾ(; 2tɳ?d'k}Sm`)6G'yjʗ@gT4vLJܴӏqC4:s|n_S|QNNq?p3!Y=vҶ~ek>ڐ6&E[|m 1؋9E<C.ߏo/L]%&WByK.:x9SlSgCYo,x[.ϛ :rGc9ux) =dep\Fq\'dZǼ >Y ˘!ï5\{82ŗv:>)uϗXm,+H?lGn YN=v0#>8B 㣽z1ǯ6 ;_,q˺3_X0o/[#kyVa @;\km{bVmQV81$lm9V^嚸*)_Ͼ]76eײX<=_3ŭu{Ϧ׷1>ruc縈e 1h}NDZCQxK,k<?W[%0dvbSxk7fJl^b2 _Fi҂J'/]W[l@τB6$wl;?rPŁCr|łC [\9S3 |Ka?/'qDy&^Ig}q 1Oۥv }s?[cMп[e=?k[nٸ"g9oo ?,io{}3m<%6cT'Y.FSadlpͼc6|?t]57bC97궫2>yʝ;tk?zࣷwdcg;Fo'r`Q^W/+Vcf_I΅'g˜E/^p#.u yń3&󁟘+Eġ=m<rlBƸ^L Gul,䱠m ꐶډ'~Cc:e†ޘƀ9?O ` /&k@,9qlᎿy`X`8wv`x<6.u  O\tp!r˕g11=M_sqdMx;c[[֤2%!_vֱc {vC,wgcC>O(S=tǔu6mxP$7|iS-qđkliC?Ѿ布.?@99K<[曆/ UZgu7\s3u<؟+9R4af,JkKegIfp ȑzP|}wL?ƌ1p cKl|%Dǘ!w̩#7.qhs8ʪQ| 'oc/~%u}Y l#?q/6Л3ޔJ\؁?tlھjiZбCl߀]6cj4r #wY_eRyn5b3ew,>@ !w m0)<.թcN_ą;Oŋ&6y^ 傿nm>ex oE#nu>GqsآV,6c /~ώS^r~W7#y8 >3 S..T-V[|%n͆zcrlXs?xeyy}VSsW6,<<yn{&Zޜf2Üs۬>p e"aBs)g[,nke"7c_sn!ֳ3sGyWwFxP'ǣc{Lְ8~_cmiK\S 0!WѝIa\`.8tYl-N.BD),l_>ŅCVn<1?ucȰa'X ?FA"^*X-v֑28@='( uH 'Xƣ`gqc|Z˱?z̃6~UrSNL犺12pZx6D<>d dXZ험Sc| 9rsZ=bM~}\כu5S2ilb:ӱ#˾F;C\6o8bL4n'6rgXlČ+:v _fYV7T@>睯|Пw~j7n츥͎@CV\ط/,Py*Қ=z&%Wq˱3w\1s=cڋИZ%bcƭZfqE'cnYeذ#Py_ ͳ:[凮Uu%\ ʧA-]<}]N}[GkiM{qܸ7s1.oz1^U[?/N[rW>T^e/Zy7M7tbo~fk:A'vo\ }gL1ʶmr-!'ADz v8kƉŔ' &6Sҁ:}M^iK#r"Öܲ\8rprL,|io`frScH=睱Kk=c2/כ}3L|xt@ATh;&@5Af< ֆƵ\=LUeBl>1ۓmru<~<.!o 9y)`:mW_'li1Qn McxCS:oyCftx<o`+Q=lq+fش8+oGل(Ⱦ06n~ʲV7^|xȵuC߀l:neޅxPƇskǎƹ~c _NkO~؉'XWB ͹57ޤ2Ų;+6+xن;\^Wbڱ/;Kt+Rq#!C7ߢ<5[}MbLoڬcy]%^3Sl~L}Xl]b7D+ ߚw˒+\'BnÆбQݗR=X;JS/gk{/.W1>6)ՠ ^prJ\]YQܦ7Ƌs)fyNt.z} MOrGl)`1`iSFi\co2Jּ&sm2GOw"l9ÑCpsqLE[l()Ñצ僘.ϹϮH9_c$pwiLrGn 8g_iSwLubt~ėc,8rhLMh7, yX;F=Q]m.ig6זgbabQPiWR~eD< eZ1,Z<^F y]\r8#U[/!U$r˵^P6erfe0g޲:ԗ7p%6ŗ_ 8?c$֗19`\9XrbA̅~:8Đ/skl W67x]T։4y#'n\6jqk')OǼs]IFUg]6ًO>{ƄjlEm=Akik4 Rf+G=۩Vo,ob'6]ct}l/]\rs󧙥 \1n<9jTY*^pǕ~lHxqG79|(/ SL?9_>g~pr9>ϦO/W-_Fմonq]cMlT)mKJre+3s8?=^p!? _ڌg="||rEn;y/6OAߊ eW_gØQz1ofA#o,آu3 %o~0n34쪳ϪlBg;x.̋sļeNNSp0!Δ1cc*d+&2]cYb#ײ?c!}}S?9uʅ@#s'>r]/g.0 k".Dn2$v'YY7o-G/ܜNy#_Sd.YFݜ/LmpQOivN;>l۩ríg\7멋%OW۝6MЁ8E[,1ټ+t;O ]bb ry k\~ھж=#6X#=<7;g?[nm:Ɔ-W\^7>okd xSWcm;ɜ:Xڷϼ6zpS,e3ĕk&ަݭF?+[~)zl=oX]}ݱq-zP[GWc>䘲xk.Cm76ixէuU0z-rNe^=aBl@cxb+ :^Fl0/.}/9󿧖~O+`l:ZAۗ5oꙴǣ"^HNهƛL͗^RurZ;ӗǿ-y ES|W[9S,m[>FIqɅB"wŁ`V?#qm&#p}܌/"S6^ʶȰvtS3'D_/zepkA9>ԳXd?G99{|a_̉7lxp m΅2&b ̣'?ƟB,0k4cm>wMӶhC\ł=mϭANRq]99܌\bئnߍ X"v< oCxZ̀yisf^?ڷ*\=?"}\}uY9W x\ٰaeu 7+6vrC}_󵎌gqޒqls܆ xy1;^ؐ88)N6:9@/+g]C WЖ\6b"cx/Q$^pI\lymˮfG6$^L.&t \;n eSwNM1qu`'17cKCǎۇzw\vmFzE/Ɔ 5kƕX\[`gѲ Ky?/g7ey犫MGJk#e1#96dN^^[:lÑAĀ8訓+Wp/nG9 borOl[yRv7_/՗0Mv]}|?V0L[]y>6!Wt/Yy_nҿzj_6xƥMr<)7ĕ\i&6ѧŹ+FN;7Ola\@}w^o(^.nggpkʐ혫gL(oYg?<ȹcP'eǾQupǜEx`AQ%Gg\s x CbC9r "Πf&r 7'A01&z^$L& 'uJs0dr s*Gzq``%m砶N@}`-[{|3IK^FfݜEFGON8}̾Y:c c34urfWrixMB,cA97͙ϐ#13b_rs d?o.͓ܵ-@q<ƏqO 9 l 8X cćS2"qW偻zn;pJ'G=Z<#eczxsO}g,} >xeJ+F3DNcC 87M Ϗ,jX88^:9Ç: 'O1QχcI< 6_Oq$'/)3/=f>nm}-6|xWc [po<m\Feeg^WJ\E ۀw窧Go+S<{#XwtCa9op;= @۾DXbjf;%|wZGL1+І\pQI|?&,& v" L ׮9p}ֶm+Wع䃟cG:g@KKV\3ʄ팇R[RB/NΑ6O= F~XK;ڌYlm6utش6__m2'.E9uRhoXԑQ~i_{>O>\y]7p。 ηm:Զݟ/xOCڵg\~\rlaЦn2On^_bP }3S]Ld!Z,kC^R{\rjx~ʘyZ+칸jg-]~yo 4BWXc3iA'/kHĕ+oml,B8!τ BG]h9?/ikӸbؤsZ[mU=n3_">*5ǐ_dembʳ\_d1hC[uCQ{/~sL>r蛰Рdvmext`zUjʍ#wlw835|z[.=9bor=cxm;S.}GjѺH5CٙF18@B?= V(>z;-dh['fnS7w6r}AP=̱0if_EM93,L|>/">|()Fr2is?f &uN1&uȸr`X'jq9!3/yنpdA)S_`~=z2ϸIbFrw=rɺ#zd>Ce{¶}!O㲎ћrqj%>֎6pǚ9rL/z-_<8Ŝ!p(ԕKb] LGk |๴19i .L؀3&O[v9;:bM];lSÞ1Gyd|gΡrʉ%o> maO_Ny>kFq<96vEA`a6561%l +_ak2forcx'F9FԱkX!uL̻Κs-hל2y.džYKC[:%֮k5l[82Pxb7rƄB 6rv>N)#w. 7&~Hsq1TWE Yu0ޮ˳[l=txN+JOrJqelEcS'ǔ,kx^yǾɱ0g9o:Hc>3nW8qou8y0Y5-\/P{r ')lnW8}Om^vZoESƗ1wp,Ͷʞ[x8<{vU]owmi،᭹o-HK98/F}u޺縢/d#qxq;.+~I3qc,Nn96x'\Y֖Ng̑ 3sx8H%ۣg w>=x9rbz@qK~}n q{.Kt֍+9mR~XncebN8זǻ4dcH\u9c&k[[8cm;p9G.oXjϫ:36/W{NY/x$40<>nLxv#~<7 ?Wq{;r̅umnQw&1ُ:x8'zl!lˑ[a'bd3>&M{wqYyQ ʅrr8D%d,fqA\ñ9{48zRΘi;p=z`@Ч62u)72-Æ:)62c `cQg>,uzN, x7 C IDAT?.G@Ŏ2q8z$;en =Lm}Cu/^Ñ!l;c냌r~+Fٗ6%t\ >6pkK`pK\f`t[ D3ܳ^ n!bY2:lAG{1gs^b`=H[vRi|O|  ƕ±/~ktɋ9IƎbv̲=>B3ن[r6:m 9>Ӷ8spD;:6Ήb,mrVF;5\_ rd5~ieY'p 3S=̡n% DS:Hu+hC-m֥kкvp /O`s.K<61>-q(T:)|i'1>1 82ujC]|r{";6_ڻ޲-q<ߪ_XuoFWa>7J_F?Z&ח&A\E`lZ'c9ޜS'kHhc/m}w^cGAX`=sr9uMȸȱ᭺-[q|Q~ ]UgQΉ[w[^yS/|h.ޫ>n Mq1H1mu#Dl9^1Aޘ:1yu{o/6)w9[犮=ty m|{MC/}`㆗slϧ?n۝gL.l`R}]< F`Aۮ^>5l6r8-cM\iMa&,~ҬqcH, q!5u>\/r팭=DžAkO,m\QzrlL+ üظ;%-H&k ?O~9cf{q`}<1Li ƂB=Duť.!kmlclO;sp\ʱslq؊'>1?,a:.is "#6iyH;d{A}&uY?[m8671G[Bnpѓ28 -i^hiC`o[ ?f/b6R qɹIlG]?l!}MU+yiMB!ι#ASOlk}{# 6(Y#M>t7Ob1smqu0>Aљ[@n~3!o _bɾ+W`tdĿ72GK{tdc : LPک~sxYNOif{[Y΍1ˤMi}!OK} \2>?mrG~-"geOu؂"m38AvT'ڲΰx6졌oL-&[cxNi%l\EN=wm(&6jccؠSF3.odž_Y+6&-Lb@lV+%6=R[ay _8(?&1qˡ7j92z7{2l̓c>DZc뇯Xfg?ep -ǝu}ϲ Mƿtbv}}o=%6پd06Ѹb Ls&l]n824ot^n8#Hz虃\LJgyъ}6B'F=ot^uTXX9ԕiy*/Y(^A|⸥sήkkG<߁慝uc+ܢF ma\n~lrErU9xN쫬Y6 cǔ/8BN\bz='K8$r\BF 7WN?}&PM漴؟x.u/c|x/x ռ8Fr/~Qb^96:_8vwgVx{@?m{߱A)B%""R R*F=)\S((ƨ`"RP*R"T@鿱ֆ>jg뽵>\c9Gy7m(ģM|ٌGGC^;a;,fĆmӞtm1~!:h“ܭeܦS 9u"%.fMP#vNXX+N QP5To_[xK˛n4k>p[o]b.𹣏O?׏H'8h͇}9FS#M|pԢ//#j`-[baɉOLoX}Z4iNj\=sㅯ')u׭}we;OᴣO'M:iO0ŷG\Wv{:?NҺٟހ-fwD?\C0Z57>~qҚç.cOYb7?Ӿ&5U6}^7>jjO_[358m96ujƯV.XBB[1󴿾/6/:^1'uiޭti/G{V.~+`C1+yńh^ qo߫U/73M}hHy Y+ '_ƾ0QF> 7'|3?{Ζu5D\֜~z"uo..](/{a1Xp^S]}7.8t~{빯y6/O#ծo^:p;ݺW6'rj쓓8:><իڕg$oso__ow+_V+S\|'~vw_ozcs^snz{v+7;jul[j?5uOmjvk8jwY!#XNzR5LxX~s*>|/43*^iĊYo3lx1v@3R}ب.1'\6Ҟ5\$-GXbO<|1s,V.}"FM\l4{R_m?L'qլߛ/>Xs1ݝ|}d2Xsط'sa }· 5qH5T؎ܷqţo]gi ['0I>q5A[c6!kn|ŲZsNŷ/f/$6xfao:^Dѱ2aL0f|ʏK >ُ^/^#̬4[ȇSb08{GZ|W/ñ 8Pkqd~r_![|}] #&F;J4plrG԰K*%Vu1-.9 MW5$cNMorUXCbY]Lnk}ؿ^x:4vu~뷽u$Q9匛u>J懓\|84>9Z3x89 9sOizV9GlwlOyԣ".y8.~~zj^OZ_}v}\K]<܁a4cMIv9.^ZًYsG޺];ߚ+)o_}~kw~a!=;5ԂyǛ#jk~?fqWLƯ]օ;WlZ_K[z{=qy+_}lc~+;/v:frZT- v y0j ~kc˙fמOߣtS}cw\¿؟oֺ<'KWNb[?87g~W_/V#gb`lּ NX6Dvϐ|b°yQGG;jO?1-bZ_<{5ǣ mJs97v\kTZsv>}lwj\sMwJoæ n˖6CK_lv/Ioʞm֯~61qC9kkٴQvN1VM|id֑M;5WNѼ،u1+O5G-l:qSsu\ت.qd＀c⍧Z8r9UvXwc~<$qdi$ 3yY&\1aav|34髟?-5aӟyWL\l Ok֝Mcˏ5º'RQWbujk^{^ܶy][̧lw|w^{˟> >/ru1W e9/&/-G Q ?im”7m{?m|3#!~'Ro~qMɗ?ݦ F n!8!$xӸ>pyWb S i6߉\Ӹ3Q$Y'x4'O" {7l>T-Ƕ5)o94"}^؋Fq׏#}ͅ?lzO۬1LvTc6~uXm |}gY:\k# 8ժA.}>.bLđëUwYoɸ=O5[rj|[͙Ƚ~Ç;V +f>|54~Ѵ 3WDp636OGm䋣أgkǃor~̱\^,_q [?O>HƝ_5R=դQ05yG3_I}pb]S_ӷ:&5}o_;j8+_9a–G=U3\>8 GrAj{X~Ǐ3^~2߰]G99\N~{o=s|Gl7[)yyZMkOaf;tlkeah<9s&uVg_aɯ ۱.'ڋb;yc}zjօ}gpe{jn~U%/myzro7 hs}5EmZUZ>߰oI7u<5vZ5Kkm-(ʁQ gz ]ך~{opzrN8I\'IAk?8$_&sa#/8]:g`u៱si8ԣ?嘣WqZ;YI>rk>51a1VgYً}g;ƄQ PG< ưl$>c ЇxbudKpΘrdYqi1ɨ/Js3L}4z9\X8}(bphj&O0n>l ͽ\q7 ;V0lxg6HCWwZ q-[Z'>o3FVבzf\N&p#lU9]uּZ'xSg9gN1,6&8KzLXT\#bhZlKkCW?.}TG:?-nbي_ ]QHZTւGl߁_f}VN߬~1噼|fW{ O>^z;/+,9Ν|G3/p)b!]^PL{=0aÅc+F߼$ZxSl85ʁa)|9oy38 /~+S\߽.E/\.ܮIK_n}m/zvs\壶w?|ii7^wJy7#[.5#~\\Xsv5kٛSj gǴK;mə'ǰ7mv܈PmK?#ۗۿ/;.}sˮ}-wlIo[lٟ|Od庛k=lT|Iuc-[>ݱ g 4EIjKQs.p|pU,W8'qա{ 97ؾ_|va?~)]nC?n=uw_w|7o/_q{~%o?}kqޞ}'{;Q[YKY~|tųctGL߃/Kfg=\0N~u.1_=yc4Qh9gLs<3 g/]*wAw^;z9 ?7 [|dax/&x`3ַQA?l/N\`Cfb7[b$a\9q̗-]=%o"o`֯c5[=mʜozV-ϬC=LptX$/[y>L3IygLC-W;Ʀ5|tGpő}ƴNnOuq}f+/W|G.#ϙ0u'?Uϸ&'g}Maxl'sO90c{_rr=ܜǜ3׌tXcꉋt'_>ܚ\T-'Z IDATzZUg^gc+0cnOthυ7_WN'c1??N+ǏGqqSX;J<_M>cqj:8&w߷}/vuyBo;.~WǗ?z[P1O4Ե.]r]zC~}Kwnpӛn7Y~p?i r\gX!tگۮɟ=r!՝7zgZ;Z5Olc|?۔cL㸋㍻1lq?՛]L-[[u46u5bW NL54&m~^pǩ|]x^>8"z^ /W®%_?n!]PVMZ:v%`0_mjȗ?_zHKTMY_`_ ߟf[=tZm.[=x6_ZLu6q+>t0ѧ1qo^  'V]wcH~jg {\jƎO[q_d;lbr4dѸZpa[t8vwgN1@\_X~;<8;9ؼ'mZY&GM3LUl8~V_lq8 %v}KKLtx0&H{s{c8|0gk0N5xm8l5+kɌc˟nbs!qu~~uzYwugG}mo^boz. ~}uWEM'&_{_%۵]Hn8;tl}{ ~k3uXpĕ}ô8'}@k},8R,YjWwy;X\Os+o8Mߝw>oĺG.yKooWXѓp-z~v{_G7'T[7G#N>} Fq{#/o_֭x{u=~%οK jGZ댁Mq|4_t:~qfq|i>ͅu W~=˾ fro&{_c&<^?b{_o'wžV5v286Oɡ?(a;iĴ'Nx1'6+['\4k/Mҳ?Ŷ68o`W5u} Z_.5r…-ޛNӤwݹ^q5Ya+qLlsưkx>>|n.X>g.b45w?p9`4c>}x`qᆇO|tOs#O:G>&0ա-Y/bj_KX6%~bbgan$[1eH;s>; /f'Å6~"n_\qp:wLF:'9O8gmj G[ڳ'<'L/[9ʙ+c}0$[zQ}3󶽣{z6I.;~^\嫮&n'Y/>8^k,fK|*n|+e~zolFq{w|{O7̺soxA?msl[j{պcׅ:w]n}uLoYOr5R(my~aCsIwmz/4ڃK =35;16ܘokeUָvz1W;s]Ɵ a_WmW߷]߾ljv;.ݶϻ?o]sKvylOnrlۿo1sPK#|;hFQ9ε5棵b1V4\"Q+c\,쇕]ÆKgZO}~}ݿ[ֱ'W~kKMVr_ߴ=}:W゙OQ>cŤ[IxkںoZ8]M0 /^Ƙ/9uIbۛW)ڪoMxV{Yi7kFgm|Ӹ}`gGj3gPс>[I.nlHlcuȕĝ~\:5k81ICjf3Zfu/>n͸|193XqM>5y`ȴO)x2㦏Ʈ?>ߴe'2|jiE5pu49@G:T[OL' #7ũUGtG٧.E?3X|{!΋{/G3a)59?sgsH1qMO9'Oc\GIlj$V|'IKO9kx@砪q=B-}'Lu#crSU;- ?zr\s=#i kNͳqqt1[0xFs߾s ~q'?}wqqɥ\?#ۇw]wP^=scs$ַ]{})~q{qy~v{&|O=яnq׻mX.Z=i??Q:&e'{_(ߑ8vj1_Y'@8~8g<}?'n=Be/u/w~Dž6uAq2=s όo^q6sX;7kJ{$[yOkä[3){8͚7Ր87p@';S>}'zup(K$]Hyr̻lq7; U s٦^Qsx'6<9_j+ϑ:ȡz|W]}~/NrL14츝+D96q6VK{68»ۮs~W{Q_^lC|E-ߺ1դ6TO1Ӈ5Oלib'gM֟]+_B0juW]0kDO-fχgp5q)>|W_F&G=e8Օ5&spZحUqs#DUNR>v᫝č?Ӽ t8ΤN1><[K夏)8)Nv ;8kc1>=o~8;{xπpIz8;G,QOR\riW551嵞=kr>}<{k_=~m/멻ov]m⺸wus3zҗ. =s=e顟%_b/ۮvko5~?k{1_79z=?۫ŕ|Vkb~\|?;V֋8>:OZQΎ8g}b;`.[ũMlK[\O箯|Nw~s֝w_PqbxЎw__ZOen_uۍ|_~s}nv[O>v>v=@9sfRn_j&~/u(ɦOkSW<;z/FʿKajY]{[_}OZ4n;now{nZ/y_nxmZ6K%9[;8܉uN>l{NIॼ)}f9v"^ǥM;,a/^s4>ڄekֳ5d_^.h-qCrb M5amqour4/orK[q4.M<].7nsYml",ںz6~rim8sɞ`>,XD oۥ׬_gn]k{v[?3Ǭ|ݝ_ZySA O|__獶{mn='O܍I55B] l}I֠p[8Őɡ/L~ݱC_.$<ͣ88k>Y_w5Ӹ%u=z+q@<a;Zf^c}q<VM-66~5[]ON^<)>nvZ:fZZ'3/c0l3^l\Ŧalٳ>mNc/F =~6/+CT=qc4>Ӽl6j&ډ0~>I|?us6dh(8+1_qi_n_Ȍ}6y l5Տ|Þb{\凜'so|O~o3rYL秵{樎|lmn|.C~pųwI"Õn]|y:.!{ua7f.X 狟SnyуS ~_g'+_sZqssi˞K\cBw^NmVO:]ƅsqw?8ccƭ ی|amrf {~Ϟb7qus]ߔAxLNxQWR?~s8Pwª;06` A ƚ7z~4N27utQ=;zo^bh\,58Rm փMQS־,_5axÈi='n {1gj?'i=Fw4[9O1_^sqѯc' 7: : KWxԀC086IqЎ_mH{R?)'rhE}XueQ^,y(ugl/xpM]@W}zF/zsw>MԱ_.ެW\5OT[sw'_/rG~"g@ Rs1's]L//s`[MZ+~pixԧOĺt[}nwߝ"U>]b}pccޱX'rmbm׃P۳C96ۏwOھ[ukwuaϾ~oMx{źzvkז񇶯/>}u}WOa~ ׿yf棯n_?onpn_~=9}G1i^ŦOyzzyէ||cwzr{G|Lߞ/NluTRbrN|:\po4cN8ސDM;J!{v"5=~F#>oۘo$[|O4 T[QmNR^>5krW NvuŁ'>\qƎ\ʫ ֭Fu6qXxS_5S~<8~{wk k,8w]9#7vI}h\.Xk"ipajqV[_ɭ_`qul5ÁD}6aIk7[rlpA_ IDATuV' _| lm䒟zG5+6cןxuqpZ+gk3#5E~/|^_owyUS7/45$&p+N!~ƶ&l<>EfoNb`ޱS-|ξ\lVN:ލkB;5{@Lۧ;ks~ͯg> C.w΁}oe/rV8~|_VZqf+aUs gG֦86S_=G4?'y~>Wo=gm_;?Sz}Eԓ{__n*o~u!-r7;{aw]wh@_O}vo9INg5q!?.#*-QUS2s'5|؊t]c>fFU~{g{zkm߳#}>wuggC?ߵkvuދ__%ד_gnC?}w}9_|nwX~o=iO`Ska^+9jԪny~AÑ4lG>y]yfvKߘ&r̹/x[+1WyVc S=xsgUÌ;"&1;L7_'\/z\apnRqg#9ٛ4yv)&rsL,Ny;F7낟\Ŋю_ncW~|(ً}g ֆv6 o|''>=Lv5L؜ 4kor#w< ŦN|ʎO?^[1Նu 7s!|09VK1aq'8<B˭eӇlwI˴OxBtՅLls>$kP-UW9Zb`Hs#6N+cf_7}X\cW}4xq֧ö?_=DZc8q0mrjla5dqO7G\ ./ Ki9jp†?I>j[֩XpӦobU<]ťؓs-3u1GjL)Ggc:G}h8/o/c+yv|ҷ۟<[ |rjL~/״-nvչ쳾zuM?{cgu_٭C4suvo_C p푿 笧^wS֓Yo~;my[|WWF/.y oYo.w`Ϲu WA|O]WniؚwzixsΗLi^ד;}]OX.={zcyuݷ_Y!ɟ_6}nٻ>\_ ~_C߯{־:NUTg6ҜZXB3)95|Z'V?^q}^ZG?{uՏ_tx:'n$qim=,쇭^c}&Er&6|'0G~?Cn ۙʝ&C.h'qd;)_v\7lqg}l]8nOkC;N.f) IwaO V.X\ó'lxN8zÂWgvqغS;şG/!?)GiKZɟz/ZpvvNn|8s+]iǰ[;ȑ4օ}^}hXx5''9;s/>dOOQ^uwLgm"=1>6k+f4bI8v-NZY.xvW_mć\GɆy|CRMԲx]]G3 ~ s6͸bK6EqߺKY$kw<<7<Ԭv>eMc[okIXO θcHv=?|7n,߹׿ﻷ?7^wTzXGϕ~K~˺{OXx{{{ //+9e O\z㇭~<'.`jp5e'F"uq#WokY,l9踧6~jӟkkHϵpq'&㊃u#/3W?|:;A{zlKjj0>e7WO֨:G;5оwXgdgo3kIiGgouC/[OIFWIZaOO<Z㉝b%ũNZ`ZK}yͱ/-ޜ|0Id?cӒyU_?I|?i|q&Ϻ`[zj|a;W|jIWǟYÑpl' N9g Otk>gIv#ܛ$=9Fӿ;Z|EF2ug'=!0ՙ: ;Mu*x5r"?Ğ$< _9g>:>^n6bU#qq:M3vO8ßWO1u۫鎵I>]:/{w?|vu睷_;Ӫ S=^l7XBvzsjV勃VGn8mӇx@6)hHˏ>?hh7_ͽ ~7̛mo{ͫ+mQBߵN?5/y׏Ov qyΓ~{w[};⇯;-<_/ZkcvܟQΩ|pG|G';4Ǔ5vZs5;EpZ 3-n%&x'vW513w~W\Rknɇ'lSjHuҭKZž@dn  8?t$[ʸx69H.dyAm<#–m+8hAW}b[+c1VItͱ oӜ [54b-,\|s|R,pctqX{|?- y[+7M-/f-.pS/587s'caTKK [;1!ps^磫?qG6P=f~I1GW[V>n{03:NG9Ʃq6] փ/ߌ=ۿxcO+,>m?3WZ_$[w!?}aϯo'X/r^0s&~&^=sIW?Ly;gC|!f,w8q卣>v>ŁOncpk98{3x->5Kvu7o/?=`7K^ ?9}vw׹vwu;/^]5O񍷧'>я?#Rk.NE&_1}o7n Wk{ř[{~L}:ɥ>XV0u&v;9xupӦ9>.v_xz8ǟ;3ߴ|wVwzc|/no~_^P.ub\CS\xԑMc]|q}5`'h.<nĆ])^lǭz9Kno٘I7'l|g 䄕/%caq7j']=NNYZq+4xԢۇfJw5s_~ ֵOx/;wPq3xk<FkGxO8lͫ81֠sV 3>žpL\6=ԝ G)8؜pbH9.trË5/8A\M}6~J: E| y]~5{(%lծ/?_T6zq~ke/{ٝu b}5'~Ϙ_^T>8mV5ScIka z?=ًOK.Zcrv'i1=9ħ?7чM//{()Z;wp;1#.֣5 ϘaYFg|iXu<͍r&pg?s_~\Ӯ)\8_ܬe?r;'hoOI㢭⛜k٪iyɜ5HqR~5'b⩮4V_4^O +qp LضiOCWWoa笽ԅ%G٪MLTWt.mkD޴>ZkX9a)l_ׅׅͅ?\w]7ܮ3;uj78o;/>Ŷr}E0 a 7Q'ͥ1]=n5g-X4ۺ ;E=gV i,gƗ ^ ^{u.lG; ^=o5͘|9 U-O'\_|Zѿkbԍ7Nc\|ɬ%>cw~).Lʃ㸧`HkS.|xcu5ӱ+F'솃-S{V?v>dbpv闸 'GtrRvLU}ٌ6sO[żɭo}ǟ[9jg&Xmt6G\oV VF`ͣ8l~6;y!gEol\OSonيlt1eKϯ6c<X8SsmAL~vQ[qa\R-49qJw Q;i݋+X-1L]q~047~DU#lV9[>.V_6kq'0&\lDϜs-rU;[}v1t5ggO͹5cjd:_#?gǝ.b1G{txAIlj8Ӧt63zq66?8j'q_-iأ/ '0Y]hz.v\/X9{n14l?y9 ڒ_>:|6_9ۿx|qeı^K'笯%پ~-غw KDKh=7~"̇)9/Gszv]m1[gX'xs0 æVbgYkv]B_rW]+g n\_=ד|_wcW~5̹TK6 I>ƭ .5Wc;%c6I~ZCR=04?cؒ6sէQ.>g~Ŗ'֪W[?kC\vػΪ;P:$:B,T((vEuTtǙ)b⌀ "z'}ʞs':Z׵Ϲ}Js'r>8⊧0apGo=ӸpO[Nv`l[ 3lۚk3v ŷb:I8gQ=7)w'\917o0V1fOހ%{c?Df78pjw=ݏ#\~}S?i}lֺk^K_q|=׷:14y/ /;=+m8po3wÄk6A nya+|6]'Vfm|8You}sm\b40#ljo|K͞K..(ւAZc+O{|֓o5μx婮{aZ GOMَq[=ŅUK6:,_Z_5Wf\M |/oV,Ύ1}y)x±Ϲ_\4[vy咣g=qmפ:ps\l$5W!=+jobEy6Zh) :j+697g|qI}8ڌ}15.F}->k0٫1?~49? |Zsa;"/~ыz>ޘq]vܻAor~Z7Y~_+{_GkI'iߞɪ'F??|6ϵ0ZZ˯ Ӝ!z3W'Owjħ=pck9덽cO߱w^?wcxGuWgK_{|\[~GG?;7Q=k"~Rlk.<:Ӈ}ċG pSQ [3k+|s}WQΗMKʽ}#Gs k+1PqO\{'bN'qͣ\x|eZ?xucaaMSZjk<1W-;c0iz'&;l4UG?Ejɞ-]/8>&Y:L~:_Czouq]Wܹ:g=ߴmMn-sa1&rO&ޜ֯^wR۾q6',p|.^q Ö/ީs'o:qW0[AL'ӿ3akLQHه0H GkGl[|4<k%ͷ?0wP<\v̾φڹIG7Nǵw~݇3u+}}6yмm<gZ;V7mb~pfo.̛ }A# x1\~<,ǟp<8^Gt•9[߻[Iq'vOB]p]%M3zQ^}ׯ]3:qUcvۺgrl6o0[).^yYY<꓇?}/[w,\y/>r9#^ιuzc/Y@ח8Gυ~5ͺmuuol̳3a:V`I|>flح뵠Zo {2pWlןy||j!&c̳~uq!KUVy96/,ιg߇WW< [9fdfq6qu|!)mnsϬ<ϭzGu1#⇫_Qg~:H.~gjY0ΉK̥Wq?g/v5|mh}^j.ٌ͐_$}/.h)mgiZqU'ی^ 51Z/uS#Э9˜18[ќucaM>яņǘ DD}bԁG~R-jOW#]^>)V-08{9>էtZp&NM58:c[{bA47uiA֧y7ysuֱ^Ή #/O/HV/12<|Um;q8r4ɧ:ЯUK4\bٟ{,2OǓΗ1Mg?ZOεx`Z10t8j!svg< &ql <~6X_10 |3]>>_*u7._ܻXrx}ZX o|KwE~կ3=ҥOܹ|ԓS܏^:Aư]oڷk>Qx{|a_1gg^Siׇ_ntm6e^.'qO ^=߳ؽI'b>Q]j9[?Y>O/ǽQZ?|/^o37fޯ=vܾwƃ4Vu:ϗW~:^}so\f=`q+_ȣegogm89֭c'nK^>a:Ջci`p%5Ls)/\0۵g#h ݁ևl֠u/Tnp3}ƄnvգF66}k_k=w\4^V4l3_[rҽ8Q+G.'-iͧ ,~.$Ish.+^qıWXwc}xqNH6:%qZ os}ij0SoJ$?ԇr)ՠ1j4פQ.t\rOp6jb·^':ٛgV=̓ĝ9Lj./gk;9)~DL9!'w5jUOyi[ g>#xCp%UCxU[瘸W]w3ϡΓj<_\]ˮC{"X9ǿ 8Z{u |מw]X.yq?Iȟ}=cQ/]Zo|[ouN^^~'-|%yrKXN∸m?c,Gnh5oẂgĘcʅum=o]5㪆J9f]Lufë6c"yhj}M,Y'8񈉷x~%חЎ-{qss|x CU]GoWߊڳ7c9r54&G58q4\1П5V8Vl0Y_adߑc\+;866kL z-}lyO=unz?E>>O>9ٮHkw1Y>,q⣛~cX/qCR۳6un}m)ڔomE : g̗=[vs%qtb%4Bׯֹ~;rYqo\ҭ1)n>m]pϢq^(U>$Z6t>i0SI9j<Oo 1k._1yäqqsC`IϚ:/O&:ѤXZSjbme?d7\h䕇կ><=n?ms/۔ql}]_hO$MzނŁkϾ8[ZrFqOfc<>JW\.~$̍Sr;)r]{9o_^s},x{rۯ{rc\7^nߗ8뭻9p+-w{WO&q>?⋣[#0tÐ/=_<ܬo6k ]Ǧ㣓xI87dV]F%MepG*G|aI7C?nsfxi 8d69ϵ+>;]ƕ!b8.oLز珇=gN|Ik/nq라38w=hg__q6>w9)OvQ#?h΁mb+~ql㊍K{WKUŅ,3nkriذ/-t7&)ƜFSF՟1cx}!Q/aLk6]aqLԯFvb/>н>kGxXX5;"#=ռpXe8Z#f:z_aѸf]Xpltۿ0|IS=qbٓ-6sIx^N||[7Wk8olZ"'ssT㘯=GH~u]?Z۸џ7O}rz[>~|^o9_|v+__>q՗.v~z~'?=?.~yz}G{gGߜպa5biCl*f/G}jm=aęcq\m/'s\!qưIz78vc睸4^򡊧=Oi70|A+z+j'qMnGp4hs~"vxqM_,{2W߱&O8zϿd^մ/~֪om5:qV4] Cq?V|-usvuTα>=ioxKW?{175kFՃi)&l_L}fߞ#6m6E/flXK:x;IGHos}X6sŲp1.nMNp04ֆOLOvtC1ZX:#7[w1l:W>1>ۜlb뗳:qNUȿy`Yb4NO_|ivn~r_+Xxcڱ78m\%:k7e7>xP Ƴ6^rgvmȿň{|ps3..] iOf_zİGNiL?9#r0`VitĄLmNɇ/⍵Dl|b`{a/>ri~:^ GX6)|5b)꘸;ҿwco}ߏ~4>3*׸7-w{꧜e/[n{}~=s.w{wC]˟{]~r]Mx%zC>G۳Ⱥ&k*ys~err4Oը_=4pו`ɧx7G|']w踿gwwH⣖|֏xw];כ۽.,߼~ߣ3˳3Gwszso|OcgZ?FԲy<c.֜aoso&f+9nbbWӯ߱Z-n1qԏ'8SölS&VL=ּ/waƳYXKeKW?˹oWzɼ&b [zځ60Z;,wR\_ib-i W>cmS~s <0Y|k>^}j=c%s_-ỎK_z <_my}o_}l֧cvc_qū\?uy֯V{4|c}0nvn&ٿw=/9l#9`@leA.Ho㊧Ѳo\_]hnbm}hLn5s~cX\tin!85jƔ]'w1ah5tш;Ӽ⟜&~R%"U IDAT_l3bOOuHx.|q՜-</?kϦ9-&n:Ls ѓŨ7ڋs^Ϛa`&f|i8M{}>5٪yALCyzb}X\˿h5TtaŘ䩟vOOf>I3f-q.dOV?mٓvD_Wos݀1]DN8ݱNJl{i{w=/zS.w^>+W?p=]DŽ[C=7t6f?l0ӝC[[tk^f;6~lur’ڲ:&򩉍3.Z5~{3;5}Wrq'o-ߵqO?xX<^+W'v;_.2cuo!A˅w/g}:uoٌq>t1d+]+."3^|թ$Lcp.beM߿͇yMl5#i}g'aӇ9yE1Z{Mm9Uǃco|Co[u$5>9&V?u֯~wCT=nGCC~.o_yXo]?l7\?L曾iU(/WZo}l%=v4}M6g_ػ{_;}cY_߲_w\'}O?هGnY˯o!%$?lZF n>I7m_n#FѰx-֜h=[ʇSĐֱyI|dă~)2ƣɥO5>9քxN`',L|͡a`glӌj/X`n;P|g=paq-7sx}5oS[Vy>|lZ[; ̚aڴ7Q+lwC=j`#˟.Kf 1).rfo9H%vȓ-9}OuÐĉ=60)G}lj׼w_sYߩ&޵opoXySO]zk'?5/G׏~#Hnb<٦֟IYsscW,mhy'~[jã_Oq![1ǯj84OOb3ˆ4j֠_ bZ'r?us7&_⦞WZ<OvkX93kv}@_iֶtm!|k5׷}\G߃~\?j;{p\v.˖;^ ֯@w}`5n=dO|ͫ=3vof=о2's=#7I7ۯn#8;d/._!Ķl}-#l6cn'81N`_qL&|}GJ._-TO9'G6넋K,/LO8'_}:}1yCX׾h WljB5I&5_L5UNxu[K9.O\ä[x:ܮ>OvW/G1.b]wcj576)q/,׼H| }\bb㆕|ƄǼvոˁ+{Cvz_aN3mb[La[g>Xf71Nk֧wAO\ǎ#~FNOKcpV$]SC4|n}?\k+#O)ӯχ|EoYr'?^y5Q'~rWkYyǒ~^FFO>ey}Aמ'/ggZk/m ,Ob#sO_c}5X:4||clx4;;6Gl'qkdxSS?^ˎw}kqZͿo\o؝~7o.ˏʯO/_Y~ly<>|y\Z]A4'㰴9c]xa5gmOwwX|$wv}Ys1|g<ͣ~cEĴnVr㚘7+WښZk0d4m.57n 3EĐ/yc'61輏pO|2԰όaOֹrw&q1lI ̫7mqqb.|_.w\u[zG'?Z\a;r-ׯ:xӞv/˿.tz ?Iҹz=|/EZS{Z045kr]{qx[ͱy/ۮs!?0:c/:6'~.|ZE1ئhF߶p[kSҧa5.Vt'aˁ+I9j{ćkXzƟƉ$-.7=~luM_5|![y,spç͉caOWwsig3F?m0n zțk\b[M~drZ~PlԵ~~TO\So/z+G'`9y;-g_uw-G?Q?o}gw`׭vFWj_?Ua'a=O;|L i}/wSӝg囹g|lu&̬~1bZt']NYo덾z׻vR'-~??:P꿬uSou}wvIpy/m?c˥׏V9t Rl%zL۾u65rO#?AZO\q⠳a/H3E]֜}-n~l5lb՛>\\郰ŊIZ|_s8̬1:6&7[W? \q/.sڹkۍ>b͋^j~= 7NT\5ׇx`&k1O޸3ߧ'0́7j Fl0Ǝim+Ex8fc|KOa'pllV<`f=.; -1X6fSe' ZN&Ox2jar%br4E=gK7?wS]Wqdkx(٪g˯N/[&/f-6ckMOk}i;[?[r}WK18A7ԻUu]~}ʆr#]\ҭw}[/3g.„KW>)z0IXւoS]+}9.r6|uؤ4Y~=)Ly،Ilu6;b{7Zo>)ҿ'a{rg?g~ ڭKF ;?%{r寰|?b93֯re.{YgwN{S~Wc>7ɻo|;^;NZ4oⷶ|_lW_|6<{7fC8I:iꀷ `ųǣϞm܅^.!auZN.Z3ǡ?ibuGk ‹O[j^HϚIIׯ36.V;ly9oÆ䡛x6 >2k\a_6lx̫1VS|ph8RnZkO&6ܭ8^[TK/xvP xfum9H69s0gm+|ɜ[փm>1gEQQl|lLk,'|Zu'G}vc}1L'Әf5Q5bNgh0)NiLǩp~uN;́ce!q؋x膾/|ĵo˃K _QvCqE`ܨYoUzC|}gzX~97Y7zܛ_,Wr.z.ιBoi+{P}+fQƗfrۻla_jS׀/CwΎ iNZ\56|O-OG/|7/_?cjOњ^}yq_JY{?W~[0WMi>HulmV+?n5%b䙸|ilkSpit,3.>ټ7Ɂ?\|[}gm[K7{[j >]\//$mI<'x95]_8-ͧOէ=#xf\Z#|qEtx NǨrO[_ ?wG|rGur;a7m֯xoZ~Lbs֏i3v7~߻n~[ݏ~PÍ>]製oy˹T;ݚQ_W[ W]/Ňk|$>];O?Ƣk\5v&Xf\xrm#E$܁vЁE GH̍RމuTCUa^q$[}b˸b5 Gwǫ?qqUOꞶr5ing.s-—+.^檑Zf j(A10Dnqtt[ZOQquȦ81kqO6|x˱Vb:fc߹_L=IsUlS'r<:{RZ|§1?H}ɽc}Lt5}j.fғ7[ױY>{\͋]|ls8 ܜ\~?mO?ky޸TWQ߫^Z;:7GYr5/}Ŗ 3yDlG㘜.XdvK3wfzrL.qjh=7m_S#͎Әϗ~MV3W|'vpI5#1{0t5O3m8k<+b<=kbǙ y~XRF[}sbgwx c ~vc 'ٻ?q9n;IC?[my~_ot.xVW~ux4}oWXo}zn~;nwdߪNԷyK_w[Z9/FOX>zZ|ͣu0K0SX#7_n ׼@Gy+86&N| X;6{Iqᏻx1pVkliIcrcD&&L9_Z1N&8Od\?lj$0g+w[Lǟ19y nXcZUk>ɮrҽ Ї%`}q'FqZlꛣZijX}sd'bg|X۶ X`֦<.aZϸ7 ?Q֚5 .?.Wq}h?Աb\'f6}Rɶsqj~͡\a$:z⃙9׊oLZ`&auo.f-y,:Fbp5.Q%_H|yUxmq?ܮsʕzb&_G/HXwfԕ\4|Qs1ID.9]3Ky~ d\&^K%[vpI`9{-G?skcq3^}wۗ:k-̉WY>o?_ǡ{B/5{LwX)^=]B_1I#F}ZfGuGqhtJoXσjT>G~;P]4ƿ/Wr8>e<vVCx9ò7յL,k٬zk[ /a z ߜ:4U?Lvzx}n]~C@kN jOOR.czqwqь[3_|͗Qx:hn5֒ԯ04phslkN/>ɋ1擓?3dKgymL̃m+Ֆח/[Ǚ\ҏh3q5si8v ||d13|d?h}݃כu|C-/Yo]S֯8e9g7'?8޽~+}=nk IDAT-^o]-}Ö׬7ox~h+:|䘣]Wa%g+ս굮k3[.gsƵl5oX88?Z+0|1dߎi;rovpU' *m3;r4&Ign*4OFMCo%4?> |냷 iȾx}\|g_ ;|I[ ٪}{:TS9 CϚ\Imd}P[9Smͱ9TL69^K#f^ +8Z{ßMu8`TSsښ{~qlbH٫mc"k~w7nv_;h?]o{m]gV9[mkq&;[~1-?[<\x7\;7ypx/ff:̚g>)oSu_j/Oj/ 79f4IZ$Gquٌ{R?q+L?;vd7M3bçtk+嵶N<)]#:O(n싣s8.mMg]Cszbav69&ό1b3u1GEo޺{׽ޯ}r՛.G}蟗/=3s̱˧g/r.X;NY?Gz>_j'٬~߾\aFÊ/1_f.vRM3xƕ7܋0y9}!_j{]Sǵ)Ǭ-n_,=| x5(mXBφs)f?;mxXvm}( H3.G}c뾭]+n=Þe/oʹylɯ_\:X}$Ų1x~ l%So↟10Iq[}5lsN7[8WǗ}f?rNnK0M_W}_7N{Gz/8-z+SWG6'?nY^srY[ⸯWrOO˛|rN[>-'=G̹߷'RjO{'w/3·VıǛqҭe.~)}{Vh0\{nu،>uaƠX~n8 |pƸfզ39'nTƷ8]~cq~>PwlA؊fNk6kb#rTLb&wpF拳1]=a'O*yWk\c۔r㚾Akqg| 5j>NlpljL#n"F8lkYxyiSfN~[l\|bhc]b;S3NpV [Ö;>{V_|^]orwÞp l=w5ojU1>g,l/O`hz-M.7ְc1s6ܳh2kGx:l9|Ug.{Ϯ/?i '.߿UI/XN婻/?W[xՓ]lgOOgL1IvA6ba\OrX\ZZy͸zfݹHתF,Dl_=0bʝر_Շqִذ$U,qx>-f[a^Sw/NYp5<<<0SC8v͎SWkgUF`k;V|WkG|ykrygkb39wLAS|;c6M _yh VkM⎋3'R<<ű_?֘'߱myqt'=roys;-o^߹~/YGv=wo^'vfw]v7ӝwh~!>+?c}x#VԨc'>[s_nsׂxZOok7~_*}fߞw# @9.x6e6>oCf`K ئ#s#k!Nrܸ>|R/Nbգf9jb;Yb`j4r!=U]>g,'+ncBώ36c1[D qDZE3[yڊ֮ͮPO5X'id;0j ٚg &XZuWz~>1S=?7 ?tb\mW sL_ya5W?5ȄTc->\`VS1N/^ .>%|#_-nL:gLlᘒN&?=c`7ڶ(Z4L8/mϥؔϹ'Za+m| EO;Xj#a0yHǘrۜ_Kos%/u׏'~ zMoE/}{~55/xnkM͂/[&-xc6>MXk7oyĒΟU^u5lqVXx׀iT1\֚7|l9el]^߮G4~ `zN~6_!z5#{<'XQ4/GK;|;Y|-ٲ[oSVmعqO߾lSfN~D*׼r{{}}ݗ>~%zr;v9߿O._ayԵ-ׁV {kZ{SMO$$]?b:!8`k+]=b'>^ 5#8 [9/g_b-=3\i8~M_陣i;?ߌ7Ξ?Hk5W_;PK՟˹1&ŤY=KwC9yg?ևmڷ/fk'kuP,{?ǝϾ/_69I +<gpq1٦?-[:؋V,lRnO8[ax`ek^0&MOO7fʹM#Wf"_}[bۗWL|[rg֎w!u>1zwQg4.XZ 듸f mr!~y}(ObԥL5,.:Kgʑ '؃tI& Y:{xq''ζbK5x?䂇%q=>K??gƶ] D4Q#,ɶ~f[.X21ť ?"'roy=u}ny_\Swp(3~C涫i˭|ǯ{¿x[}wο|?wܙlػUҦ}opGӰ]6)xSVrQNLl0谭kIyqgc5b䧵ɭsbpϚv iw5t#٧qxr쀛ŵemꇅJ1Sa#~S`kXοrģ}l΋ ke9׀To<3,}z$nHW}u!v {8Ipjf>\ҜJirf<0u-cj?1{kqX;L|M6[ysvϭ[rk_So\Yoy~.;׏\__?6Y^>N~9;~1ZT70q[:{㞹}{VG6$1ӝd0mxN =qqjIڈaS-ḃ]q/?NyZ XMp!V;'y g>ٍa+'~~\/Z1x{g:b~6zfwKS ٗ򇡷5vr:s1yZ ٍ5beٶk?;iקICCbg-\ z 7}a1x1~cv5;8#^ύrr̵0ʡ/'Zݠ$|;9ipzlqEm=fy>lyg,׽wmz_n<{o5_? O}<-zQk-;}w{h{޵w˝CS{=Ƿ傫sw6}qhb眛u藃.>]l}O'5IX}xV1Cxjɍ;_9duևr6v)~~ӺQ,_y`͓-{cyה&|gëMlx6deWOxշ _ tǒ=|\b{-O;C5X3}m_aI/\lԯo}y?r)O:q9ŵw^?qlxyij`Vw0Ky='<倵ls݊#$_.Ʒ[u>'wcp?,ǟt 7r?f휓޳׽rZ:m__~Vj+]-'hqٟ/{wt{}`Hm4H!*M‖`? &RP#vrflʈ 8044nZє$>~N&YU^^ZZ>LNg[z8*vK7)O컳ެ:dl v"e||rD.|T_>9ͦW/iqz8_.}+껵n_a86TyzqѻsŽ9Ig{[ HQc&%l\c}o^put憑[ޚ˗].}oN &;Oyq'خA6|#?Y^^rʿ {7>>- />S>_a|5zs.\ߗt_^w~ɷiT4r'ˡ뭼j5Kٽ> ecy֓z ?.Qm3asԩV1sꛏi̭0-v8gba|bzzgmmG}5`6ߜ,b0b~Na.ּ9ELNzB7?.w&nƉ7sWõ_^}o,z c7?m9k+ޓ|]잾Wskȹo'~8q,9O) \^\#/\K.{^O_vM|G\]W7^aGwވ7ZCb?cl?WJFϱ_9.a;pvaz3-;/?ED~< _|~|Hozz ' /d؇OZ\ZC gs"N 2Nys8 ol.Q=`I< Ld?ήInթOz#{q}Ei#|1Dx򚇩3jx|qVC,^}'?ʼb儑Ka7ף3/p)xyy{g c.ktgo )gu I&R\[|׋qO/ѻ'!\rWF?ѿw]ϵ|\C_w!˻w]}孾;_O߿7^G˟?7|^۟y^u~뱟׍p^&ZK=Kb=~VN~"8]lOs]=\xh]"kȫ '7zyt=iU>~kHqµƇr;/?z_{w~7̞gܟ{헾_>7ۿS鿽;Fm7;=NLoh$j'WuT/^v~z=_P/3덧5ФzqgGoypkz0k6j#'{[,?m1gCLŮ7xaX[C1$_8S| =^qWY>]4ǿqv0o k0$ɩ0t{H^+P\Z8[ė?)'y\jXI{ߓP-]C|Ձ.O@#?:ǷIapk?Ÿ燭_;۽;\^}h>\~O~ݿ.}'=~C~{]3>.s_}Ui_t'2>Rm])nqs ^1$8z߃{A<%yeNc/Av tiwq]s/& Ség7=%9{B%ՎGռ\ZFW˯Vg!y˳kIp K󗳘j> o DlG9ny9Š5?;Og} W|D8yoW,'^{}S߸`{ظ9kZg^ja󃕄 _547|yۻî|xc(.s<!-G/õzL|Un|tk3؍ΡPWu`z{Œ{Ŗ+Ctcr q=~;c=_x_^l8;&oJwq׃~߂劥a[wϓ&<^dñ>=;ol}FݺƕP5[l}qjՓW|[KN|;IzNk'c?yx{5t9k'l䊧:-NI럖c'L4r][{Qaa}w?[9jtni7^[R?ne?] }@aаFK9|O,y}c/Gœl Nw/f\_N˗;]i?b^6SMzd/wv5Ov{_#U늓Ջ+\s)f\$xb7Fi9N9_nחoUM \\>:̙g/]4N1<3%#Iǿ7o;gqNRVw wrOׇyX3Wc{WNk}D~X+ǽ񯔗[eسG~oM/^u{\ƛM:|e.|n].b윉u֨ge?,{s? M~i~5'oա='|Qr~*;>t{`'Vplz)[&l<tk)GO>Ƈ{k᯷wI9p>cq(զԾ/7b;{B<[yg cNι~΅oyp7`řxsohoח0 ~q%f]$>::/Olws۞{NT#_ l^t1:[m_>o-q'+}Gu/w9rOuKYWNvWz̷6[_!gnS~s86o˗?yW˧]l^ˏg?g5y/_nvy?O_WJ>K .#/f?[ul}^IHhigWܾPCN"\_9{EK@vp]&>[~3l?ը.KdtIoKsᏇF?]^X5˫Wh]pg;;y~hFzHoKlZ`yyWq| o_.lqj3gV?s>G8F ~9in>`H}'q+ a,oApKUw1a~iסjD;VW`s$r[W<¦0 \Ϥ~sέ3_OjO 9p dOFuq{hSNzOx6|q@_ʍ) }3,ŲګZzz=EϛzN/.9OD1j'0F 8]se>\K`=W0tmv+~]to]av~#jZW9z2pVsg=^Eau{S0꘷|DrĊ;cx؞k˕ӿ 'ywOp~=׏8_SN<47<Wo;r0åolrg^^Wߢ~_-rQΗ+}]^A$E?_E}e.j_{yw{K j~W|^~K?v?r5~_W޽9|˕%\?/>Ht@ρ 9Գ݂u h0;l-K2evqjon}vɇ(N7j0ð <^:';oظ#{:|<'ŝbۛ=YWpƿ K+0g7߻"O_ri0[|cGo[[9]>a֮%?tq 5a9gZO8gb3]]?ig댫abpzmq8J4 x8ĿW[Oba;smX?7Hbcs>rt6p˅W}aOX6aj&N~j 1uOVr{Ü\J[XQG[~z&{q[,(O ?=ݗy\3?a?;~[/cW|O6~/.x_e_vyϟs/_y^o|Я5o^߻_^z?ߗ|֟ލ.|ѷxw|γ[.s·/ݹ <6?49_t8~̡;8?Ļ]DMc\k4U(m,rg7I:N4īS^{a^W3_V_CUV[ LRq7/mėo=Ǎ4?{u9}+G/&>~5 ?K瓓ĭ GbU.:pq惫C>߉g ޚl$+6 uQgW[i,GMc֗\~Ҝ_-Һ蕝W{es­/~1ߍv[7!gSO%׹>nEθg;NtX4;wy<={T?ah|6r߽goy[OXZo/C76_^Ė|oljֱ5^̈C.t/ zqݓ6z4ĥwNI8|a÷{Q}#zmqyo1i-lr]?ox=F[0ߺj?Gz0Vqg~GH:.:k~O?S/?c_}c. >_;#.?}U}g%K.~G]^_}yo_}/K's럪$%Ŧw׷Ŝ5&^8{cN]!k.osHv֡;.NZ.5zH&.G%ȃU.fq7Wzً͡9s櫋c=/?l=7}4Z[s_-uT|bFz+8rvU/9iz|5nշx4)ƗηjVxrS .NvGz|$/>ya_xk`Y~X>v믻S?_}.Lk~izf196Z_>>8Ig-Z8;,xRrW =֧:OkSm67R\y4_O4nXuݗ/rq/L\G4>ڵ/\$yWS]vsd;~ϕ.~ً+9\v9)\Ww}W&,]?\`pߺD|9ӭKq%Uo =,/,4qז#TsòOs}PaIn;/[X󨟓 攸ԝSl"f./:c0;Y.r }޹ދWCn4 G"f8.k|[\FXWo_Wk~:|xᝅz_xW#z9ZrE?k3'c_o||oo;]_}%_tv+>].<"=_~/boO}K>//?'._tS[Fmj[oNrƣ+Vx1's#'|_~wg;\:jc}t0M@|yS,oL~j'ۓOy˹5w'fx>,v{#[+J6vZ;%8H/n%X[~72:lh2|)ï^^3_O'Z'Cs0Ol-tumXX{rt{O=g9=^x6 W^9t5Nŭ&yvx}HWg9lG+\l:bZ#_pu6+xx>%asgχW&=F'?iߚ./..yϼR8Vc6C|QHKƳsj,F');{8{?Un9ˑMW7{ϸ|+_{}t}}|_~~/}E?9$bˮm$i9z`W|'-ǽ} _'wWח|i|w1sGqqKqcd{yx~lZaIO9bF<_ {ݥ<nOko.:TZu;r'Yap>4'&lq5g`zE\OFk;{ϟv5+=O)_{uS~Z<44l|-/.l#3 G-y}ܳ.Ͽm2xvŸ"ֳ \j]P^rlzfWᛧ֓%tŪ?)N}htV]~y pGX]~/`۸/W߀YwEӟ[N58\|Ϩݸ:֒ Gcqqo썳 -Wo{Xj,8pݱtհ^c w)/μN;:}Twϯ|M.ukX /^pN6_s]ͻS1O>"ü<_/pٷzꋾ _Q?\._t5o~yO׿~EYq}g//zKU.k>']{EO/zKW}C?F3{{V_>Ca+/nsvb4t:hea.D,j&VRq5^챚Μn޵S$G$\kZ1xW+tVNx:cՏ{!y{G]mbgGC=S~XO[G<9U<tq}[0ǁ/o:Lgxšj‰j%mgrr>pSĊgOoNa|+Z |pʁ >᥽ ޔ|iWt3n9} >CWy5w_Ū_N=[xi^n¾ǿu%ĉV漾ugw}hg?g/o-bW?,T{!g~~s9;9cݑ]iŸ<tO|kNǷ}dWs (g GN}s?L93'lO寷ry# ltap6_~洆7\@7ʋ3Xo_SszG#Qauy{!tceFp}S UN5a':0Oҋۺb_9|Ʊ0曟1sy{|FG|KaUKY/_n\j{gS'o{ßwk]pۙCNCv덳04_ul,;n~sTg⸇U?rD!c$=)^͗K޼>dk\Oǣur+,|^NS'l5ǽ>/گi?G殟 V׿Wy§i$N+. ٭|<\~w B=yqqs^_dI{e7]~Cwi̟>} <>Ml?{(p7]_5W~ӏckK0J?Yyt5୙nkyV_jIl\\x5VĪsro~GéY.m]D^vS<͕X^WIg>k'b j/<_|+IW-δ3Dž੎ygW T3_#a[5Gx>'/'F3ְɗmͫ3WlqQ”gO 臞8Ꝗ[˶~AkOp_\&_VtX:;_ Iw<}y^@w"9θ7*/8%+ta˃go|F%ʼnIR8IQ+='zki=koߺ#Z||đ5/y|g/a&|qV1lp\W-'|=ysvr9g߈/ͫ7cXXҭƼCC-&k~jC/:3oY|?gWy0Qy93!Ϧ_ nOۏG֛Y4lCMW?‡㾑]_Z }~y_՗-Wqz3}n#Ddi !yojäqTsm8Հ Os :,{ot;ptV xr^8`"tPa'>μ/0ϟΏ+O:YC_^w_/g,?@aϻ7Oopugc膵&' 'fmz)0cΆ'`W?Ly| \|0'N\oclvx|Z#^O{W^2oMZ_?)o+^?b_Xƈ?m;ھ5.,x|jss!(ΗF}_\}mHˮt8 [_ M?܉O;Pg\=ҭ^)NɉZT?v;Xwj`7sM'j\v{kgπj.ߘ`)u=)G{¿?k]l[z?]<Ś&_-S;[3p9%p _[,9Ƿ81sº}gy]L1}nb3a?l+^>xsR_lk|DNy52O-wuVqjubǽXu[]|UÜ,}“)<.ϼ{(7߉>8xvwȽ'rĚ_Հ%^<{x͗7q6;'X#NĥFa+,l@/l Ё;;tt.Ή ۅR\-yqx]. Wg&>F_^|^vn-V^q,ʥ(y ~m>yT+la<>Dw/v%?.rܼ~i>=˱݃])pWޜW tI$~^~F4>=ϧfvyp!x|DZ1zn[_Op~NN>wψةa$Cg=W_=)ֿj+Fg}fMq8bHiz=/~aqVSg7\jfgjԃ9jyH.lZǟ~rk,']?0Fyz(0{v>GaS57:[>Ճ ss Z`FkKM#aw#0>߼>̷Fo$;/}S̓r5O{_9vuxąpt"֜>i&|۫!7.>V|ڨM jl?{||sڋw w}TSqy'&zSzz/_=Ù'5_<ڷ͕c'#ڝaWG>NGGxⲶ8ewgy0oމٹr޼M_ZWwtꯚ+}8]_g-𥷟 'VW\w;.W8yzW[Mv_riwjgW3y‡7i7t|v ՅrAi^{ΰs_>ڐ[^vn/b  WtS{epx[u۷058i-g"N8ۮaG37w{N~iOWaw[=ٔސ~fmzu['AӞFxP?8ò$~«-a^p3_=64WY>O3B˾/{N\p2an 0X޺گR~{qkS랄KÄV}/]m1 y愑&xkk)FlxIgJ ^Sy~@wnuζύ +?3x/#'bcjV}zTW̋W=W=M${PtG1u[o9|D##=+^L>.{Rawb<5ԿxkHՋW}.v',n1Hv>S~Lg'&G g< moz rLgӾ@_W7M:=P~vq>ÇלG5ĈXF}Ⴟ'ql+7; _؆v=0}Vcqֿ^ם}䵶rG;\uΆs.ݣ~vȅ!ajvz{uE0K-}VqkzH¥刕sˡՆm7w~{^NF,·/yKo|}KW~sІj2^.[$CEHpR.=b.~opڛW'3oq-C^l=|ك__˷<7Ƿorm0ƴ{vru潞Z#.މoN8 kWqۧN,IWC\Fkpw]=/O <笲7]~79O_lz2<~{,|snySЃWVW~r%N-&\oJ/>;5ޚzNkhaiþg~)Fo_^\ΐOZlρ֕8nkߘ|k79/럽w=c/&bq^{EicEǓW%O[~֊}q7_>̫aMڈ3-vs֢Qt 7}s?!%3<ˮF{ _y0 CcôO&n>Z⨖<fg'tÜ0y|8z ki=Tsi1;|n1OEMbW;LlZP\$,g|`Q=W}5'լ`tjOݝ+mݷ?%+?kuI.9Lo\t"iOyu$ݙZtx;a<$)7,-7}wvIk-)nvorká_ IDAT{ROq$`*h-M#_^D8MgÉgϐ۹˻gK_R|8:S9 {xٟV݀kt_ʈW#,?F |.k,Qޠx=\|Ƴi,V<ŖCoo|zKἝ{?o˃O|~|__ň9 ]MsuVڧl._ttn >t|o΃?>Ϗp43}.9{&0L$7<+z]wF] a3.yբ =w \_֟]ΉQ6~z^^^{ ~΂Ws箍#LӞO^sr|w}GzmTXkS˧>Yr GK_ˇ|5⍧i]Qwr)xhF^|"o䴫Qt#>yq -yX^ pc{7/֓\̟c۽s{3N\1ϐF|mNQL<{1zy_܋o u zOj݈⾗_[OkˡFnoOIs}ŕ'_<?|WծOX='ks'釰]잎9 ^g .0l}GkÖTX>s'4m%=xZ|>Cg06rE_΢su89_~WyvO\i=`7mSCNdA>!r:gߖpzG O\Շg)63?rio*PQz^=?:X)?g!X{h\c`zz?L{f.=K^0&QFu˟[&]o>qOI啳xo >Iz]?7i~#9ݞz‹i{[]%:Tr¥ÞCKO,5=j§f,^~} =iZ#ii'~"W'_VS ^ͅŵ'կn\ͷO?pbΟ;:O3,]{.pw?r99/7\l=yUCԧ9)|0ՠq^W]kpF5^Ӝ=\&{|=_}7䭿SíM?nĊs}+pug T<{[S|uoq΋M̓pxҙ gn^vp{rw7:_3s˯ngWo|'v}V慧':\-aoIsF}n>|=bjI~Pi]Q,\eg>bIz:\DO|00|},^lRw~VxR_2N<_Φz3rpt~tP[gk^©w)/{x܇Du4] t\vk0z:m8<vO+g1pqs{FWô^|1uݳt݁?s?o\םe돫ڽ.V>W<,Roͷ{-<åjZR7O7gԦbxxv^?ZWs$^/oy >.=7c?s6'0q'V|pH57%}/XtVolD\mUZtfc ?NjlsV~nCkϿ˫.歧^i.ƾ'r\~# Cnrw/kWMx̳q ugk}Y҇\8qk%)o_y _xywy=R逑vy67bw㬧Xr4'I[p^]zq`[?lŞǓ0r{kYUI/=UMvd[?prNjcs8 Ϸ8b3׿6jr5.{֯x+_=]8Ϙx\bdcza{H6%W[]<s6wO _ϴ3$իv: 8/q{34o\^ EEwag=kwZ+.CDZ t'?_'7{C܋NK;/MaxTn=bO=Y;z_͗ofdo{-~+tx'xuS'r=+-ocg츫0n0W+rWObwSR}׾QQWK^ry_~yxgO2^.o y.T]r5]]jW6xpĭ]Jy/LNy}C4nǾ^n/=}z}ח}+y}jִ[ly׼30'٣=oB_]xVVϴKŪn:C} %n.gŜ}AhyP[דo/.o?l9;~wm8=F}-oƕzʦ}#5ò[g=0ɹxzU?8?-'\ }y $"J(1s3DDfe,!;fFI1c]I_бdDG"oz𔛳>(G:n51SַfĻnW׿g~1Fɾ9ƌ3Ĺ:瓪Tȧt?fw(!hK.G_X^oeߖWiG_9V-cgG׼=6ёg/-vưD\!}kg=9֔Ń>>|"zċr!sK`iC=-韶msX;k y|Ee\|JbUYm֨c JbPF}<ɳ4GJx } =6guU>%>{vk\6}G}t]Ի []17}kݎ;uQvm7'μkcď¯R6<:@Гs2au6B2ٱ x6RK]2GJ}%}u+։և)ѷ㛍X'}AW}=|E2%oKF=mI}JG}A1wI_oNҷC/Q?1еNi.[ ׷F}C=K';lܔǜ:1BF"/>\zD2}&I٦F^1})ׇv 6u||Շ4<91)O}6!7똊 |G".yF*('mm=Gn!t EO<>63"wz!E9cU?/ڷ%1u|["E:772թdnR ןƱWuImKW9#Ƅ\m5YpMF]űJ=co/voqriuw]:>=ޗ ;Ā6%ɯ=ώ;q-s(\ 뇺4[_ O 2uH]}3|t uhKݶD2>e1!ˈ</QØE6WkCɦ%siK>|cDu(c$ 蛶6ث F9x~8@VR~YG&-CN7Mo&[\:N[?e=he>eKD _ncI[[±hKen^'h^G*wݨ7d3Ψ@`_rbP_6Wy m̹c?Oq?5|6{)i>%gЎYAEV^K}yaF~nءknV7ɇ'B?>}(Gyze^}dԋTja}ӶQϺĖmJu+3zяuk#d[}hg>ᣏ?I_vq_XRa8~c)qRy_Iѷ_'ȋ>/q(-eȟ[;J>>~Oեa{D9q9*:hѓtyA](,S_A֑Y>ntR96!/1憮 ux#jzg5f󤎮Wc=H'DԅG~Q[]J %zi :b?@QjOhu*>ƖXb-:cI]0@i<(k t&+-c  oU~PڶٸuajG9C} >ǗD;n)ur>> >6D{Ohmo3ʱ#tذ?xƧ딐|JB 12ԑmV䦮q,EΆ~!COe ͓z_t?QꓺNB b>1Aǿ̟8֣jV ~xw'}{_B~w" sF{L̃1tQX/#uԃN~ц'%2/E?}6뇶vJ?/1_mxѶ?NܔS::}U ҟ#e=:|I_ѱ/a Q7tI/udqGO' Eu6zRAF} g1'2AaC{yUEuqM#C /uJ,ᩣ>r!c:FoW?яrJ'|[g/-Y7g-zY~om4<kOfCN7:8ÿu2%2;чt,>Wvu׮},.w}Csϓu bxus0)C8)ؑa]g6* :0}u k9 ,vU?@1G ?KKX >m#:s6"2|‹ЧML7LmE¯8mG"CPOMۨ ֧<<9|J6e;@SO\c8XÇ'>8}PkJħ}?4~hk)Q~/K>+ xo1)A1.AbG O.zcQ;iGc{%怞:l'aO}nohkn(:V{&H;?Hc[_ :1OG^5?灷m^dmjs-1v_cXzc/ؠ.G9 =?cx,` 77PȌPFmx[jcS6r03ax>=/wH?IJT9 :ȏk>>u}CݘcKbDD|HĒ?ua=}#u"'g.ȣ][G.~}%vl1'#q~k@|!g6_jx~E~z=D4!) IDAT)OnJ'Ol1ją@Nc$fvۧlc3Z+_uOG%> 3^r|M |> t"6b?z(7Ɇ u|22Gbԗ:SgV"QxKou<􉾹a6hb1wA|c#˻["si OfC 6Vc\mO>ȋ|볅2/ut_xؘc,Œ:d^f5g xb0}D;DMlɺ=FmЃhcdvYRy[NOxJZU2}ʳ.m68c]luCɦ>=DF.G(%egl~_.?>MVN͸)_/u-OJ7eB-8TG:D~זzWԧD%uhC%&E_H['$*;*CXGX7/+:?E}Il-?q[Wm}%912'>OW-9v-}}l8Csydѱ7ƃ-;vpٶO yp| ;cJ=5Oi?5rI(3N\hG[C6F'/F}|hm,}F]am#}?xQNX-.~Z跼eN[%1̋zч(TO]ѣ V[UiqnCy$d槾3gxl#BM!lyыmx9XzD-],э,R'dQyV}Wtnɘbd=}6TQةO=bMhA܍ѱMb ?k}G\2OԵ:.*Z}rwZb_omчG,O8-sӅӢ%|kL@:lGלգDN>r $NbuhGjd}:_%>"<-sC>BKmlWJ6/l_%Jx1  |$mǓvO-oCqEufPxܐS8 WMݶuJ<<ީ?zQB/|B?A>쓔Ti^Q' F,sAOx!>l%_uac _}W2͗ ,sG8Sǿʘk^S>B3 %6'KhGڢK5B~ F=d ;7/7:6zMǼy(oc6a 63WG]%2BҦd|!C#Z}9m1GGEu~ Rzk7Ԏk1pMm' aKl}C;Ǘ<6{S_y+ׇmm!>ԃ/Ryl1n9S@%AѡV?x*BcU=Q /ؙ ugNOxP]>6|}BeXo?z֑G{ڐ/l_MkeS/ԗ+:QoMK~Oc(hǤ>`'GCN9; ;l:D7ll[3;\,i#XŒze>@Ꮨu:>f8P2'>2sPx/~/VZ2fj҅oI:Q)m}#OL:1O9gҘg7a|Oڗ3~isdV79F;b7oڒ(6RO,E[sg: >ճ=q xF_>u7{6]6> ?9bfWW?:~|G_m mt+WԵÒǷkI>y:QGO9%gԩg!Ns=yqއͤ>-I[BcaqǾĦ2}qݗ=l6ڹoƶ9zL&vznLJutv شa/=JH]sTn uͳ?1/xGBOG tc馟X*o <"3&idi_}KbPMSvpG}: ΗKm\(IlEǒc̷׷:}e\}-xr⌽y:< ?60&" KEoٔ'msO~_Jbg,G=}'_m)(̏{Zz>yhKmG]}O=W5].žc.ˏme͘*'txpFY6:n.=Ѫci!CW#c3.}>Komr[͸oC/mk5Jt|"aik;懭|uWa^|KE#+kᱠ Nc?Gmݼזo.栭)H{e)~|t'$’q[=}F<|C[]b͘G\+({|z}/OښKh$}0Fڒm|6ƄE+lg]+1b>S'x6 <}/@}y9iK=[QMi.bC=Gч7쐣wQ:1:'F[᳏tVaǜ _lܯ ڈ bFmE>?cq0(uJWR}i=uws;6>"iģ#1AN%~$uiS'%[W>z\/œo,?x>nԯ~(>/y+W<ȧDfb.u6mO46>y2.l!cK,Cl7޸KQ66BLo>b8q)!s7gtC^P=dEElc ><~_-[^'}<8oָ ?ї~K]t!>jo^ʐS _ijD~ц%|_픣".ba,ʘ b.C=;3Xq R‹ /WE:n>ǾPK}G Yյzď:[3.E+I>ΣEyn(͟:1̗~G[K)ʐO"segU=|scceH>ٵt?7m#` rĥƾH)EPG|mI 6_6aqU ^AӺ8묳|y7ƲM/|/b  y\|l#.s@cZm5BCcG\UA=HgУtϱb- $·3>##:*,E~7)!e%ψ yhS۔uձmut!"ž] k̕5wEw1(6}wݺ=y3D fi0qи~)Ndܸ:r}RֿXN{|ZƒpPra?o{w9tysd(9C)4b1?'ֵfHSo|rRW,ƃwcXKCۖm|F-b>z_ۨ-cLyo7䑴U?&1q?{s;gԷޖӶOԥ/4PI1Ƣ\G]]7cSkۖ"ac?_+mOz} 髋Q /R?/Kc6 9Sy(7?Klvj@E9w8ێeEcNwSpıVszM6l1եDGue,Gy$ynDlQ[l%ܐQyգw]iDSy[ƘQ+#~kC<.nn/$l qb==pXz> )޶%XG1>(oG}Mu,I[VN[Qc~w{ ^0(ǺOji2_}pqox7iu4lP[l2V7э=oC5y_jW%>jCyhק!''^\h,qƜ@7 clt:ľ7j9ۅGV/٤8דg\+_?UU|}ǼMsLj3_}[pgy ~\)p~ȹ;Ɩx ݮ>}6bst#|#:~Y%6Ƌ|e/!C>4g|LÏ8R7%>"}ȋvGg?ċ1mc]?16_l>fƳ$F'NC>_ŸlOƳlWFi>Tm[|mcێ<)WKmUÐqE[䎓rOm}Qz_ߢ>um_ȝ:֧G}>>I?[mUw.@e8O`ǘ9 c>1<-bMˏ~zʿ¿F4uqm]V%|seܗZe2ƪ:|r1Xo=:)%C6).}+Ƣ>_?9_enmw^wS;ÌGٙVdձ%2L6ưTF<ȝ4D/X_vpmN$-CmV~⃭3zVyg/=wZ<ϥ}r?L}0*Kr&sF>ط'C/C9G>v}9/ulqnFyȏNbF]4/8Cc1ɧ2KOB{!_+oZC} ƴ>`Ai~w:q^Ԑ}}Sg ~yƷ8*ki\^|x7PX+O_SBJ1+ϧ:@We)$]'}C'Dy;Xn>u񴜏l#CQ߲/^kP9[kRLƖ|NB=8}mlZE}vrHO]ύ168F~u"N6fK,tb=K=Gn} :ilG]yi6!g(xY˶{ST?iV6|%_ cN4lbrփqݺXƜcZuBNC'=Bk#?iRLwI\zI7eL&a2I6˅sz;> ~-~=Y)wy2hUYWsׇͭ:c։g-Wg.KݷKs忔'QOVfi1Xf+.CKzCzKú'wtPNj{8*:wbf'> }m,zź;֑OjhM,XYjWgxW梨Wf;M;#c?v)7S%b4;6m1|$>s@G/}QuޚC?mNC6Q]:V]}/1仵qIONe?_(l}c5ސMLJ߶(>Ƽ$[cE'-e"/pub֣uO`mBJZ*k瓏1n>qȆs~9 6^}rǸ|(S|Oя"f}Y,>X o⋜#E:S|+6]!uՙF_+<Ꝝ+qh]=Hr]j<Ɗ;+'åB{WթCLwjgKT 0]]]TCc%ƍ}_&o^-,!K_t{go=A?^wmQo0Bȗ(͗}0G'瀓>;>2<Ž8l/3y\Oi+_ $\WG;z\z);Xu^NBSO`V'嘲D HD X:p KZ>DzN?n.祲TND HD HD HD Hkh<+@"$@"$@"$@"$žC@"$@"$@"$@"$@.[$@"$@"$@"$@"$ F  ]&@"$@"$@"$@"$طnGf$@"$@"$@"$@",\[0ti$@"$@"$@"$@"[\rJgf?s\wiuWwܱs=~&B{89{'>?wwo{ۺOݩڭz;aw|.W~vsL.׽򕯜<9ꨣOӎb-{_C=/~Qon=.qKWq/9c̿n}7iG`[]9s9ݕt{'?эn3rGxovyo|u}s7:ԧ>՝r)/1dx[b.`n,9|1V!j6Roy~w]lI.jن g\h]Ͳs%~Ϩ7%Nkw~ٜtI^~.~^ڦ`&e"6* 8SqB9yb,kʏܠuA=1žLGsΠJ Uh1' \p {C:L0sѹPp駏6xXFox&zZ9'?h6Ro})L#eatk^`׽n9v{a;'?ߌf^?G^ ڦ`&z =y;芹EYKvi?q~% gX9a`c}r}cU0VWଳEAyA4Şʢxћwo|'OAOwx}crgG?ш9<&jubߕ|:cBַwqhQcFQ:?VDOjS}2g"+i򖷌1gѮ\wtի^Uѿ/j1N6g~_ʝPrhׯ;񎽶+94V]{{1acUX u'Vx?FַFw_\#qsqsaaĈErm[{7J_^K2厾ѵuo馣~ux?1?LZoWO^7AȘ]*W~u9=G}2g"<(wW ]g4F3/_ÐG[%/?iO; <lAv3]q<Ǧ.1Ngm|`ח{cUmo{+~VR#.@\yŞX0ΤuITzK:@.aDƉ]Dt;߹ʷzQym咔}`-#Dyd Nȹ]qg2c裏⑏|ds/,y2f"F3< 򑏴E*>s磋\x[]9΋Cw]XG-9_ *J;uy7_(ɋ+_JN2W ] ĭ}?>R:Tm)ƂGO>^igc4;W{W:Å5Wjαk{& Ɲ-W:Ü;#kfl|/e"?dQ㲼oW'.3ױb~GGr_bOp܀;gyʣ%eĞEGuo}[Wož׾u.s >{ܦ갘4O/{M--ǺғԺQ޿ث̥oywQG([*~Wvyg{A`>OoVtm|3:\5۔ǣj˙!>TPk_x@i_KtȱZuqa=ǵWly[޲+wbxy6)D>MnҕG(> ^k+^dƒsdeU!\:~ʼn}Y6p(׵׾@|o׿^d֏C;\9x #Yc!j>Y.=VbC _"e$IN^S26^aR5)rXx—jzlM3w?KQYyYWSI<`ѕX=% Lsc7iXMF)C1O<ܺE{swwrC }}Tj`^B@$XIS6e5ɛ"5z1dIO<yU{sȹb_vC}[X*/I*膮DPޟTc?NlPy̢nf)wx#xgX9w̰ˈ;ӌYplNw tZ}yı䟅#w<ەGu;8w<]Ud!RkW>T4C)Ls\D}yLGcs$㔔,w<.c\jWnЬ DZyW\ށ;rxiƂh7;>|#O|{(Bo~:,ؘ%_ڱ@gc:i&坰]y2c'-= v{ʠg_[Ic+cX˽d9G5M|E\(K֞v`">ꤼǭ"$c"vxGC;^Wr$ =i?"U<&g%%_;@qEw)WnQ"OL/qz ͱp#ʵM:xckZ{mmb%&wUV|+w=V ]Q Ox¬dh#EYiVje<}u\Eo}|c {mb=E>tp?wr8xGvy`:hs|p^ SzЃ`|ΑpE#qr<ĺ>(6}F#y 7W/֋]e}>z:ԣ,ڴz+k\{W/vXBq 7^G+~|ᩎw! Iw &z[Y|]v~͝F7J7߱Xh"s=wlMk- GEw`9G?ѽWƲ|o:83J#ʢM۟'>{G?q‰6Ǣ/hۧD`9 ~~?'%qpїs@;߿}_̱923 \e ;CΕDZ^[|GXG>!x ~,^DyFJe9V3]ُzԣ*W^Tqsq,)qCgiVbBnaW[y zֳI_c0!ǚl :IDqpg#,J{A{E="űxUr3Pa|;%'9NI.1ȾlBkg>sdz½7O?1XypQ#X~j7>^$ 6qAI9-W<.xGGsCz_07p~4Ȩz^=V&w߽Q^o!&>lQIڷȾn#npG'?ɸV~W'V5Vd#oV1kxx%ǩfi}GLfVUJ}tXO3VLbr.Nk#ߵuq7 bc.YO y\,tűt~;ϟO7y G>Oq,Qd{ <(fs.dn݇>yFqhqLc}n#vqn 7T}tvo%=93Ψ l3umV|fW=X)y~`/xǦzcC%<}>#*WR_ם.wKRu kkƊwpd''x;y{)1t~{(ϑsHʗ+x6]<׿uw'Vv-:kXxGK{]+׻jBCcygv?5ۃ͹ ]81wCwk.xWY:H 8V5G_^CC\މя~tz>-7ͺ/~7M ?%@Պ>|kTnAGf<7dQ9(gɓjrucPPǢ5:餓fVyotϒU^~dFs,y2&#P^]+OV,2E>/Q*_zիz.AyH˨Ӣ;Y+XEwD7gΓ|+g20K~GX]JeT+ws\^].rc>UfʻO[qeQm+ݳG>7xQ1KUI@Ik ~sy/˫ů~Y=Ϩ8|yt<7\̱^{R?FUθ>/{Z|eTY(_0瘋|cߖŐX/mţ>Y8ꨣEѼS{sݣ\]xCZ:=^gWk\՞b%-{ތ1=Qaǰoʝq<܍9*O׌GT? ʻFK} A4+s8/:.ƒ%K1WcŞX/9u~,[f;.#<^efG:% PI"CuNZHW;uz{<CGWԏ.KC;,2iO兿C+TPw7ʗ' +}xc>~y͋({#d7f<& tbd_5 g^t|!wKf]Y\ʂCb]_~2x7_\xGYnzӛΙYgՕf:KŻ]xGXzѕ bќR"W>OΉF_R?ؕ;8~{^]z?~g-rWmW~_/Ί]kſM3V yO}t9:^̗vyX+sWnX/,J+9[v*}ss-w*wQtwB&/X0_`P 6ؠ򔧌IAXUzh8_2wX^-P灏ycϋ1tNO_e.< OxBMYF>a$e+w nڷuȘ2ekL"lO,v|or&uݴcUW_#f~XS)~_W^1{+gcϜ}ǔ"̝wy^Ş8/{׮{{6{'sI!}Kj2D HD HD HD HD`5ahR$@"$@"$@"$@",-roiWf$@"$@"$@"$@" "}Ф HD HD HD HD XZb6HD HD HD HD D IA"$@"$@"$@"$@"ž5^m"$@"$@"$@"$@"0@. BD HD HD HD HD`i!}Kk2Dq8 IDAT HD HD HD HD`\&@"$@"$@"$@"$B xe@"$@"$@"$@"$ 7M D HD HD HD H@.-lD HD HD HD HAro$@"$@"$@"$@"$K \[Z&@"$@"$@"$@"$b 4)HD HD HD HD Hط+MD HD HD HD HžAhR$@"$@"$@"$@",-roiWf$@"$@"$@"$@" "}Ф HD HD HD HD XZb6HD HD HD HD D IA"$@"$@"$@"$@"ž5^m"$@"$@"$@"$@"0@. BD HD HD HD HD`i!}Kk2D HD HD HD HD`\&@"$@"$@"$@"$B xe@"$@"$@"$@"$ 7M D HD HD HD H@.-lD HD HD HD HAro$@"$@"$@"$@"$K \[Z&@"$@"$@"$@"$b 4)HD HD HD HD Hط+MD HD HD HD HžAhR$@"$@"$@"$@",-roiWf$@"$@"$@"$@" "}Ф HD HD HD HD XZb6HD HD HD HD D IA"$@"$@"$@"$@"ž5^m"$@"$@"$@"$@"0@. BD HD HD HD HD`i!}Kk2D HD HD HD HD`\&@"$@"$@"$@"$B xe@"$@"$@"$@"$  Hu_?Ϛ.w_}(.?Ow]/>SHD HD`!:ocZoۗԥK_ҋ mD 7y@"P׿vzm>8{|WЭu~ZcqrE9묳xX$@"$@|ǝ}㋝Rh_z׫s[Nwvv-ךr9s=SO?}~0HVط<{ 8ú-bvGO?5yTԏ=y1/$@"$+<1B;ca2LV[u}c}{+y7W* D Xط$X zSI_9$@"$DओNwu!>,dʉ@"$k|g@=c&ދ{R>t^r&*0HD HD`#w;/sN8;#:Fu^fu|3zj堃xg݆ny%@"že=ٹ}s?u'?0g?~Wv)HD HD X-.ݝ|Yv~Uk#!u(L%H@>ƻ<{~Wz׻p+t}̪ſg:y|2OC~x>06V<8 UIKuV%+HD`e#pK^{[ҭz;w;oPz1cr`>*$Cη{UM;WNͣō1\>N5ro]'X~~w{ú|ys;w,`Ǔn~WkjyC_nM7yN;TҌ9ַ}<"?>qg?xRT?G}\hE;yK^muɅH?ON<Ěʛq_/Iuog?u )q iJJD HVinv=< XoF|>?~ UN9YzV]7W\|+yľ} _5C:^̿݋_׿x.qk_iV՘LE5IjUW>=cW]z׎Ǧ'&^v|mw]}sIӟt͟9" 6ؠ}ݻ'3I ?3t}op[1΅p\ Ϲ#cϓUzՊO?%%rLJ%@YPaTWU2.}|¸'=[o=5n,\L Fw]ը,(ʏX|n>QYx|#җ4L}YԙF?eg??Oı,xE>wYgAQ :}m'>q܎9Sg\,M˕ra/dE81AGEP5>*Ƀnx~ߍ_6͠/Ҡ/s>B7)X;ў,7jU&>zU*W{^-oyˮLnj{ҟ38QV&U;sz׻^}G>zy<)OW˄%,*5Q0UkDJ7涷m}drw#x W_v[&t{nx+p%F7Q/W^qh;;2owիz?-o}^5e|.vn21x;vo7q\ǎ>19/wdUs–}w\^/ w]$@"~_ʝOCT꼎TozP[x,!{rq3<0?`r@[QO@k9Yp;tzjq뜒<|O5n`\"O?0 s]G?y]!ϟ'kNY+,f)p[o|aVc?iOsS3ֹ7*Gq3Vܱ>׿>*Y`mo*:LD HWƿܙUz,Nu7qusnem^W2DCwug_9γ<:b.RY,G;;Nʌ{q^G5yg817kelTƘ3,dطZb2aYqs: Q\妁q^og%秔Cwǿzr/ c=,G&)H8qRƏ!o\ȸ?k_'xs-ئ2-W C)H>b3G%^Z˓=}zsx1Y<[&H_/ox윗;O"Ǐq/TS$@",)xl\Lo~W'2U829WפlVU!G9W5Qxx_S|kx,yM3“9g!oG_J}߼G%>6IhМ'|Gx!> cIrC`O"ૼ.;xYj4įiO4Ϗe-~@]!D|5 }A _ c;h ԸMo:s|7p}L̙ރ3x v{y^|}--Hq"(/,eA݌|UYZW|LD Hn.î|cb:#[l1Q!QYs"TIjς~fɗ|W"5df/4j&Jƻ&' 7_R˹, ?x-Oԋ\lF\o6}89d:^v/t^I|y.e"Tž2Rg"?,q7ꉅ!^,<-i^Dl];!V^9 w,@\#es>Xؗw6|Ќ"b[yHDzx-3d"[ST[gXkڹzWr|fLJg>WrxD4O (r]v\x9d} }e$ܽbߗ#8j04W碨m\?p/^id6-ź@>z;M.?Gk?oFu_?wd5V;ym%ߤ;Z;喼D HD`0_ktPWW(Ѫn)8B|U\,}2 2,ﭏH}L*炓,Dg!8pBV_O]GN| rsVow5_/o~1GK^ZrIu"]u|џx ڠP+V.roT,ޫU7?\^BDž9~dc/59y~ѓykV޻c=*v. gυ>NM7ݴkž>j>]xqՉc׽n^Oxh3ۉ@"$rA|{GFW/~T;x: 4X*y2w~xT,(wX|~W\b_b}.wP^Dxw^w: .+.Q b_<+u9%wNcL?'% \[n#I| =dymvyFsrjWXGJzt+Ru>0E?{m/*#^*Ea(qQ oi%xI*%JJE x,PD TJCRBzs?3Z9{9gzy3;k=?IE+`,)_]LW?aW~ۙۏnmmxU`U`U`U`U`{3ę:iY_4+ĻRT7_K&'|٣yiO{L\ ZS^[ vUҾ|,?*~1;̍ntMŧ?'7蘑uʯ~G~;=uz?ۻyK*ppMpU`U`}r|!টB&n~ 8OG>}=~?m//ukvqލ>O~kydQv}Ű΋tw xSSg܇y}AF74O]͵K_s]}hطRNO7|o5TS[ #s7suu֊k]yGػd;+Yͅ*pVW|vKn}؇}L΄Co_In6^?yz|ȇ\,l}5u |לmKgvσ]fwSK*****pg=?ûY>>Le_egy|ϳmc6a_r=_ n"k-a+ǧ軾vrJ?}ԇ,eܯz-|ǜ=zj_pbXnB;~r˳DVgURu!4VΫaCh{?b7x'oMc\osZœ}g~A))lggo7tߔ9,ky7|u Щ-~_|W1{r{?>? 'Wcmmg.-Y=O=X]+>o綘k****p#m1~n9y3X71ߤ]t358q0q?oYzyP"˿臖ChZxx\G4 _³?p ޔv/3_ÿN{Bs?qs#t3o9@+۸_T`컣l5U۠>]6c؝'^|>E.}F\8O}|Sby89g_х}z\>>h=pCW?~["]]y:Sȟ>񲗽lyzͼww(wS'*}=C IDAT|ap'8ǜa[ _d=0Wn"zb/w' O ܙ*g|#?#4[j>=^αC{~ݐoS~׾tȺA^K>' 4_on)>н؟'XX!JO/8:fo[/֐} }9k%_')úD| u;c}X[{6>yҶ~9ӴX[SZ[ vc|[hUYVVnx3ya:[4 cS$qf[-/NbP?IIt.~xaOOu~q{fg;?x3?|3s\b广v3cSu7oa9wx.ݙQpu ޙ///*.?=e#?)zapo;u4 \ 7.Ε'{anC?7d$߷|˷`uO07{];kS/<<$f΅}۷=E/zхLbo^:VdȫaYO/U0q}W~Y%Ld_lsɎuC忿z3M wl~߅G '&r'^Z<߾G=½X^o +{;%F}r ʅ ~L.xDڧm>QI'|JS,2p,/}@l~~&_e '}Zpuk(}9|ZIϾOw'>dOC}2__~>yVwi;Oײ \0>1"'|'Hoo4ݧ<{K:^h𔚯(zZ!OO']ο?<~x.r8V55yj3btDIt'Ω=u\x՚'N[Ӈo5O[z__ͭ?>&:|b̾S??pF$\'}qeP=b[q c}YCZV^uw !w(YsXX6;pN&[=o;oQp|ڿY^laxK,~~nsd.?_׵,: \~(r^snMs|އ ~? u9݀WXn W>qM,7WDCλ){Ҥ~[ay17|Ѫɾ;^[hn-Y<^r> wWnmnwD7Ϯ 4@@PIUUUUUU[W7n w5n\ܻfy{grI:8k-rI:-KeVZG\o希Wn8VW~ؓW|d?O.2}?*?sG~VVίz, ?$~gCχ \ʼ=#K********p'|~WS~ϿG?y۽8T֠VV.^}ѲXXXXTq{ۿ7қ}mbwK/禈k********pG瑯?=yvK**pC;' \v^9u_W~?=O=?cm/UUUUUUUU;T^җ^^^WL7D݇|ȇ>>i6o6wyɬ \ }W {U`U`U`U`U`U`U`U`U`U`U`U`U`U`U`U`U6۰+Ԫլw5WVVVVVVVVVVVVVVVVn }aWUUUUUUUUUUUUUUUUUYujVwa ܆X7nbPWfլ^XXXXXXXXXXXXXXXX +n݆^VVVVVVVVVVVVVVVVVf;Y݅*****************pV-dWջɟܽ?{/q{ ۽/>ONN|lxwK_{>?|w{}? ?PWVVVVVV.ݯگ^z׻^65ya˿g@6{;w*/zыS?' 77]<uw{`ցj)WVVVVV.s~vw/ \ ~뷾_ޣ~[;/ x3xԧ>¾ؙތ7_weekX>p>0fk;;;/{u&avj9;ڹ% 7#\/sׁ}o7cϪ>}>ۿa<__S?yٽۿ'/v?3>p}wN>c?v~{d/|no_L7B۾ܓq6^}swݧ_ dnzնz_{_myAv};e{iѾ+ p~w~gWy] ?v}cpooy`;Mgwxw8|rXY~}ݹ{mmڜfӔ&Oza=O?=מycvYuf1Lpc~z#/$w.F~!'=I79q}}cd\mnޒ|fN95OYi==gjfS~k Xǧnӟo.>1\cԟ|6pδR/2-n.w[5x86)cK91}luL.0+`j wWfcp3>nug<ȏYz>v{rbߺ{{c E|pXD=Y.w9O~phwq3g{^:Y>H^l)'OElOԝr[;eQkx5Wf^z_ חg~g_ ].3?ilցցr߼{CzRLg[]>a;jQm۹'}!~GOyJ~ :eg;ξgfM߬a?VrGp*\k=?lc_zms~xbmw)q)e/>t/G=Q70b&fN|?=Ì?lwj{'1ĜcWV͗nxr^ o/%sl1ZxΧӷ|NJ^È7*Ʒ[[[Ί|ssN_v?FiO{!O?}7|CFuuy9M4~Jλظ0.ics>&;_v.Uc>ɲ'jNqG8|.W]naxW"b9o3W=/?qO'} ,#o>ȷϥȶ6ar~caٱI58.eoynwWfߩɕT~w{w)w3?c>f?>|'mD7%` Y\4mummu0P->\-mWmoI;Zb?a}'_:?lSYl_} ^pIq^ηc`熛jCN*9՜ƿ*sdWm+ƚ4mڟ6sdo[ݞ_|籾96b;_I^>nMmPk>"7.1|~W-W_|=x~Jsgg>)N[}?~ՕNޫٟQ.vBm[YDTC?k\\`5&ܿo/}+W#7񍷧tj~]_y8:g\:WQk`7_^߬}WPX̶>tv\׏b\OiaVxa/~S7菑cjn~5MYo̶1>1c>_/Oyf敼X}q[Un;_naonM7}<Mv傫ɬ'Nmm^OѴ?6]}ի^uWٜ#y~@?mTX=qsAm6WwĶywkcf}m7f]Or_ ޒU]Wrwsnw]pZmyA|6ŕl !2cg[dζ'[ԧ볟c:JpqζDnk__-n_zcwwј-?.覞>]QKcϾ6?.p7wؒ'.e/IxM={"Ⱦo7sm^^gmc19wx[La_&rS>뇓mQۃ\gcS\'{_9n ntmIj>,~5X%_fam9nXlʇ1=ߙ{6m'6*ց|O^h~L?e&rhz9~Ӷ<%/&5gvm||ͷq=7O,uP'"۞ :wlqJSK[D:Y$0Ync;[-V,1-ry$+c;g_:Zr'[ݔ{8·>'?/X:9; 7/jƛjκ!8jzu'[Zso{j3OO\cحehkoLWzns6xO6f^jl/d_>ޞvcōӾ?36(^9Ej1n.M0"Mܛ?nm7v1pgo_:M/V^|#9WRC#8m?xP~ɍ o~_&ĂQKomok'ƴGdV>u DAO3N6S楟?Kz)lf$k7 ?>l&5|gmX™Ρnk~Uo)'~'~~mvtUۇgqѿ,mSnʅĢ[_x!`qR3o=PƟ[[)S>vsG##>#@_=y8/ο><LJ~X}6͗ye3Sξq50W<&pyCP"/?g>`OX_9UۙX8.nX&^8nmE1Aosidÿ%|_{Ko-ϱ& -ܫ|/j"/Mf5l/fo}F7`e&oň FyL]sOf8+VT׬a^8Il9|-}29kQX3Ʃ~Nr15)_59>n`agM> dzz})ׄ雾iGmOjl=An?gl_"oHO 1Σ{'7Ro?~Yte+}yzyxa砏y? ='ğ8GNU=o\m}vjNTJqtEVWém=o]?wq8sѩ9|}Mtl{O7//9k:S4u瘽8qc_pxZczh68d_L_cg{ϥW^ͧa4r]rML8|Ⱥ sz ʧ3b!b>97ϹMyy#tͣ5Ƿ%7׬o2>Qq3>vcδk̘'gs)'H>mڦdƶ>%qώMqgMN_Qqsùrv򑇛}~e;;n:xoTݤ?;zcgtw ̃T'9W656n{j u޺;K'.ԱN",\\=Vt̛iO{˿=O[#qX'w_<ySTkzۋ\3g19O8ŋ-půb0p15>:,k0kƯ_\:8_MWXNɋ[~ 56b7t7(jB>cOLZ2ָxۺ:ПGk<ž |兌:1UjďOsQ؇/b׾oL?ёy@MzO᚜6f^r燊EǶy6rk-~qag4oEV>d5 l"9k.?cX99poGlnʩ:UJeS=9w\eXirn{19OKg{_D7g+˾hx3v%16ɆO9H;ES̖|UN]v0pޗZwbn&_=qfp%) \wpO}!?gvkm8?oG!\kŸ]oyNdq9uN`y"|6CpP9_[6ynkVkFGgsP8_.a5?iƳ8LaE1? cl2s˦8>M,Ƿg>|f˗lglgg˿C^˟l۷]Y?o\wRc6AraexVwm>8;1X G(\>a'd<1FaGao`g?>]qsKoG+F1>g~դ}$Ʒz(9sl/Ͷ&}qPxIŖr#Û iO9o~׊;so\)z_~Ma{FOOL%/9 -?M_3WfA.ɪk:6wvTkɌ)& mi]~[|qX,ͿyOӰMr8>p9bVG8fObl@OV/ v8EřzN{q貋!6ʙL_Cdՠ>]Lj |7[>xuI6DʏlUb[6k[׊?acJ~8NW9_ho\Lc NXvbe;9{9|q[-?s[Ȯ;8['?W,e=}p??z Wջ=яE쇟UU@Ѹfcat ZTu֌}|lrVVV n7 `<劥s?s:=QG}Gg ^_&6;Rցiۯ8:'F}qn;_m ) 0/a&<\:͑-L|ΧZ릝X{:'㗽d"zOt NjQcKʇ-6'c_~1W~%+n Zx<Ɠ> fڗY٣OVgXl[} 7ƫ9}:2s}i!~urfbV[m"o &G-6W15aF7r_?NSGܼ׏`yˁ]||k|8[b&M,rU9nnɊOj+GٗMXxg7mGOx NNE|%a'N+.lŅ` ЗW<1{k8a嗮5qZӛʷ"w= |?wqѿd;O=1wO|(gOzғO'ywc OxE/z?sP+q{>>+WV6[f><ѶŹrsdNv٪gRN`ɷ/***p*F[볏؏=Vu7/I7ׁ){X[Co6G<;OwqZo_}px997 :N_u̮cvLu,a,qĞB s|Ԟmq?}ЍXd/]>?1abK_Ǩ҅]99miQ|ɏ,w69ԧ.1yU~Ƨ(]u1V1#,1ϜfK7_œ ^l&>g.[mmreo^Ggnl복-"%9m}qӗͬ/_}|ڋYNbG&x~'&[nH!)WONF)jbLcxڐ'G0՛~ɾrؒEq>ݼ#K/jR|/,v9wS?tT_5c'=_8aL>ngyw|N;E}Cw??yOl雾P>;a ox֍~o<9{۽=<,3ʿv~VV.f58.Md!Ba˯R F68ce;{|4>tμI^qL]6bK1ɇXs['õg}VX6Fs./6y4}m <'lOȧng,p??yLٶϯy~r /3qXHLD1tmd춺1^>dc-e;wL6~M_ZKۈ8ꦍ>WdsۤٔC/av<͞Ffx2X٤ai)~ȺǧXg1>^U8 k ?vK]zכڭد>;z&}sГ{/| w/~> _A|!u@$:N0,Zs$bvՋؓbL;F,VVnu -}~O59kX7Zu`O륛O?ٟggV3?uCrmmxO-4V_Cn܅SL2֢'gN_~thPؿ7;XA/?VpS&8qC~Xgk;G쪁~8x}rbniQi?*`K؊Fie>>qgpgalv|a\Myl&S~[>_5_;~SdOa|oSK[6w 8 u2Xdtl90;1TS&WOQ?g's$[|U`U`UZUgo =Oin? /w;|oX>^:c<;N[vqŽ,: F~cGq})|tٖ;|sʖ,RgNṠ 7;~3wH[?9>ϙ)p'5'9̇-q1yXSY=偺 OcCٗ?MO qECmʛO/>̹8#ҟc6:N'5$م]It|7)Zϼ`Nc1fk?ecx-?u/v>q9nm勻CgXqfb#[(gC~XGV2)~m.ƗUe/gǪn!VÊ['5IlϭO_?FSv# kIWfߕ۽[K0},UU+KA @.U>jnȝ(]'G:q%]XX}WO\[qkցkU1v籚];upQ| ;,H.\=Fb5bMm^3wr.\& |be7è?Jf&ƸExRɲI7kr7tqWqc mmlلy?2l'\Ցl)/]6i7aG[~>٩lȢ< nG3d8y mMrvϰg$+v91u~8c%?V YvK[&#/O=/e>bm93ּ馬cpym[5y>2XId3W}L

>ob-hU_1W tSyNHfaӬZ'O8s|gk= bwgO=N;_&' +]_+M[^?pl]8e_Edn^#G}&["x[r6(xQ6o3;wbbf;d>Ώm<+P2m\~θS9b9/dsfbT'Iٜ`_X[c4 xRqӮ̳X/b6m'>K3쫷19lrgW&϶~gG͍Mї3Ywr~ӶOiNؾ^ʟ,>ّ716g1wY1%/NI?ڜ/Og+[c[[/2cxI7$e-b N+=NqݦY *bݴ[w6֦ qI#]w8x)'.%[N?6"ӊ'ӅٴTxDx1aǼ@OpMOq}v϶M~۹qSdwJG&6e1FZ7DGˣ<{iܾ-hbq>}dz-:xRŘS⟧M9mxljpp ?݊ԕ_ƭv lbo[1Ӷ&^x Vs xb9~ʲ#kʶv&/'{ɛOcXKvpV~xb/Wn]nŖ槦@B@9Dy9-=W:-žt***p[T`gqO (.`Ḏzs]~wYc9V>G~?#/ ygɾÎ'3?FpЇYهӅvi^ţCl߆>Or7,g1g'^ aO57d?5rbd\6m#01O`X_O8+np6lO}xѵ_?uřsャKu,?چK9'y˅mm_qołG#r Gor(w9T'(Ö'^}RobEOnjgCka(^.T]L?.fy2@]hN[#67f#W21yy#6wZgʅc|#9d/ȟLk^u IDATK~΍rҎ`1h7Ql+<KNּͮןNy+O>](xYsfƦ+0.7zTpp6s0q~8"+qpM8]7h 3-g[́ Y5cʲ!Cv+ o95xY7AWUUUUUUUU%!n'u"`lpϱ:;m7m&W>8"/AxO< fUr!~&caos.lk0P7Hf#"d1FgKW~q.LrmvMx}vm/6qxqvlu`tȳ]31]sʞMxs~ѴA暥ӟ翵30e컍 ­ \B~.Hfņ>lpvZqh0L>lOf6S5N.dqpqMr~t1;wa|_9:ۯQM#y7ޖfg|gb$W'Ϟ~-GՑ.5> ngGV,5Xt|ͦxJn{ n_klT{b#̭}N>Dgxv8?æΘ#vq`Ri~}q8Y ܉8jhv=?|c\mp Ƥ9N_^]d_ma8|çןcXO)CyN@oy 0!o<%%?NMvΣcn-.,^Ϝ.aAg=ؔ/NvhV_qWVVVVVVV l/Jp^Ym/'g]]l>u@ξ\|f>.J"ڼoxyӡ?l:9҉~^zk$~Ŀ9Mꉛ -_xd06/ؒݶ%ř1q\X?{|۪ˌ=YQٔ~5lF&7 7m#~x>öF?1Ͼ<'.}mD?N͇Ax&[X8~6|`ߜq,OKVx/'dssڇɖ< 3}qrXү>d-{9F7^j]LL|m#)yZ}fFsĎ/p"-cqNU0 ϸ-_n`gkS~_+^~0ӇGڒg_lawƮV|}Zҵ~-gb \fZso?m8baf^&fG4')+Ϝmn3nad//z2 ~ml'cRx|/}97Ƌ{K[xtrS)?_NpO9O_36~1.9fyXe?Y1|>F]xqk%cܚ;ֆe 8ذR>UȏoI 08':e ]썽p~'8ló?eCwfi#' ~}9~Η]˽}OxǨ<\7ł]M }Сw8fǏ.'o%l#1^l#$72bͩ|Na)sfծ_XXXXXXXV n/.J,ٯ0pjEcؒZyS&}ubڜ\lM..jUp&7_Þ7[϶x$|QbfWnO6ɶ<_xbQbE>#ݴoo# rcbaWd1m6i;ҕg(j>o>Ǔpu.QqAq.Mvr͜C|s,<\xr6ꐏ<1^h3`uëx˿11>E|̫8ןsO'a$8l|=MxS/bS]Cч_.MY۫A8ٷOaId~<+Ft;8qðo@sX"2Ğ_8[cǦAy̵~zcײÛVg|a4j>?x07T-˯$cϯї}\C>~&^%xcܜ4ľf\ qsк)'̓Myr͆\TÎGdZ#'}rd;'X1TŞ%aR>@_#/|ݰ6'C3)ϵuZV^XXXXXXX.+?^V7ӎ yQF^ ϟ,~i<|.M.5v|mãt01&>em(y`q+|Y_^I>sL]uԯe~;)6~o!r1k͍meg\ȶu~NYtw O?1Iyo'8OϹGr@^?:&K9e3s>mepjn7LǏa~F8q?eǦl\%-VS<ԕ_r ~Td|vr?[8Ë!fqH83yvdwhqr2?F%w/״ujTua .+vnޅvo>fdg׾65mM$7-v3UkX슕<7 /poہ}x3-V18s͓-f) 12\n{vt56ْ_ n]e\t1BD['7Bf}GB$k  G|+Ͼ|O'G=JP ||[mg?^?dM.?UeCh4x8{V>!GȻZEjF_]oL#?/V+dv.a‡CG61Uȫ[6xqm!Qb \ >S[Od;yt[p'/&"ą ^qu31.('g7/ٓy7ξ/3_rv(ap/ 5C)t0í&tp9o)Ov~ɋ7vC<Oׇ[?;|y}瘭\f>s(ζ}ԼGɲO>uLb6/>͋O=S;q1}g.Yw|kӖ>هœMO_\}QfnOSI⑧?t/fV_]3c'LWoOOo<[yɾ8vZuZT}\XXXXXXX.+f^l-PDt.6<)`LׅCc1(x#VFWn0x[Ɇ}CƗdG|ÎM*^D >{9gkLgyF.rϭdٳ<mOm7/Ɩ0^f Ƭ}F~ToaflqxןrXW,S$N6xqpvp˻!9g׼؉;m_0 Ղ֘^ ,m>U-luW/2Ww+?GsEp`DO~\xt|6Kg҉S,y 0ɛ?yD۾j/0{8zzC7Sd`W+M͑Iy}g^SN/l3}<4ߵփo-|>h+?^Mn齨ۤxvFteGT7X:q/o[x~ r w9N߶kӶXos?e?\ZҺw-b \Wo`% .Kظ -6{r]а)!l7[wM!Ѝ/'f\5D&~/S'lq)ٓcdsLf<<߭}8|&'q4c«" pi;7NߘwKgmi ^7gS[|A1*MJ'3>fM_>vSWMqzs)qmט/NovsNl&<ocM[}xִn]- \7FA%f^Kŷ}d]@tEW_|I|s..?(ow6'ſX`??=򞮺Ay|{ʌƳ ,< fny6rqs >U<'ׇ5VO[xa?3p؛ň?;sWL}7C^>ʿ}lv\ilPg\ǫxǟf~|CӢbaW}25>( }.n\N-b Y=9*?O#>lk| Mr-9|kIfߵ********p]W--yFB.=`B\`Nx)-…i}1 "+wykӖ?"7Ύx>g[/ʎ̃|%89_ra-doQlCIŞ2}Et_ q9Ϛ臟]<9.?T 8rL)>; }xXAѥ_l8aaiָ8anX C0ؿ ݌SS&_fW ыk\˛~@r*Vr~ȱM9 !0J|dtеkf }9/[=N7/b\d'(siQyV.jndܖ|-b \h^-1v`a?Ϧ t3}\ŽOob^Nl Ӹ) /]xϜ-b;`n}X~0|m~r6#9賟]X31>3^}|Gsi;g^+~|O']B6|g 󘮚d?%?9S}lg-W<;O+&K%oFyۘ>{2}g1߈Ĥ+pųMV7nc>?˯\71eW?dSΗ<t/Y1䔟~~,ZҺw-b \wh߅l7w1{/>bu!bL]EM/H̨~yLƼ+H|v=Ifz~(-o<g_gnz,;rk ߙZR۰a4Oꕖ'̬  rqQ>.&c'/VRm1K~gYˆaח{(wek?;{qz9nW5g]iO )▸&aLlתS Wr'NȮgz`'KOQ"'YmH?C8Y+թ\ܝYȅso_q[-r>87GH .ZunXa:ד5[9]}}'~S]LՃcg&fuG}9W㩏LO4=7>aiI;s1)˾}'p'p'p'p'p'p'p''/4z腃;\/ql\ng/u%>Za0BS/5=^/|W/]L[aO홼m]5P~uHg%ON]oq*מ%p9 îsg}gͼxͤ8v=EvH׹}-^/xvb|iy8Z^~gGꉆ޺8ēٚrX炏Ϝ-{;ꈅ]'U_tR-c_9zgWǺuωÎ~y/n1g߰ԋzx&,W?[x{bkDp׾W f5פj9X|f? >,/gg_=ZixrϤbıJֆ'4ų[86M#= IDATgg>G}Wc{]|^bxl-k}>nϷ\: J}z%t<]>n~v ל}Q*vG}Ox%q[+fqkyK?߲u'p'p'p'p'p'p'p'p'&ॣ^pAvltӞ[$RgM;3lW~S˷}KgCDԌӾ3{DɗӋs oRaWAlNt³-c3.$r㷜䣫Cm7G8~h!7)nj4t˿{V~5Hpn珻:8_rk!4L'?\^fմ;s~a898|8Yn΁#n,sju-#w=r\/%ga#ͷ~6.=UY³W9A'xS̟ gg@w97 YamYؖevz/==~k | rH o9D?Xz Ƴ^_/U8(lp6tFٳ{kWifYa:;m=؄+gu0bz=;bzVGĊoo8v7!~3ٺYgg?_δ^rhqp/L_~„KW7'{ޜrl/b)uK='OvҝQ_Lת3t56+'zqij# oojHv.}6|aV^l~ok[ zwm\ñGc> gϦԇtC{bp8YU{ッ'p'p'p'p'p'p'p'a&%`dh<;Hr? l3~q{N~yt/6EM ةaŠ)Ǿz\를$0ϳ~k_+\gg6?,}ogyr6Mު.y8S⮮]w9V?s_jw8ΰ9~vt.<x5å.mwO)g9`g%g|铃_N~}×O[:٭|6-3 bijv|'g|,|7ƆqG=j#ٓ/東-Yn˾s'p'p'p'p'p'p'p''_U졾 /)}pO~Ɗy|}QZև#RXuzou^q\ˍOͤ4 p|N^u7_zo,zH/ujoꏨdža_L4_}qtV=qKy?z359z7i~8_> j4S^p8OO/nuŇ\7S{k Wj&}5:7]MO-\qf;CjX[|j>I}ƣ{ s'֟ &xH9]^ Fe/y|ou+^Հufœ\Ż8捳Ɖ}QSיNj{֏8nxؼUcr6W_{Yg6Q[n{>%Vo[)~_o;;;;;;;;95KKA/}g6L6ڗZIvy7V^zijO' ':o`[NؾSߜ_Np^K<^|l_XZngs}c0+a=]x[ylw珷slp;ox$Nv}ZV?got6$:ۃ<8VXah/6/QWۇgzkϗ 0jIzx8_>)>ۂ||?Nu=T 8v=qTi1ҹ[Y-b_t 3-.; nsg6)//}g)T#].Nang'4<B4 ~\0峫 Ͽ9 erOד<+.j7V]~ | 2/ l/ F8z!3XzGOf~Ǫj_z"U%/fW>e] y򗏰zx8˅ɗݞZrCޒ_u^S&]nrĞm&qV_~)胳/^} GgC]H ?[>_;l1xy;x5rOLu볺TS^v,v7Cqŝ_tk^_ipq`ԵɳsYnua _{udwirκY~~Wz&gor%W<&XZ,Q0ʫ7~ybqyIŪ Ve[Mֹ!_{[C|EzHj.Zl.79i5뱸4lr~Kz_sϙW؍ 3}[S?Yžv/]3=Zbl>4m_ߜŋ~E/ |(5/F㫿K[Ͷ=-M=-^4ygN,]}9<~ gc_[|r>j埜oq_;Xڧs/Noxvٜgi9CXο8߬pX܉&qw4ԊMUksſ$k{K}{iZwwwwwwwwzhC뽀rSCpm=W_ ITcğaZQ7}%N'#bth|mIry-W^t.sxhVը7]||Q_]O{k~><yq/I/'|B\mq#|yKF|q/Vγ~aH'"˳|y襭}{엏߾>Zb:65nx;m^?冉o_TF6z_.L}?-^]0d??_\pKšGi㢓8X37ڬ֟=?ͥܵa:7· =.99afZ;9'ǷZ{~x0mgulVWwZN[_ٞ4ӝG'K SԿάĥٹ3Lpwn+.ϾYm9'{jV_{=k | °gpz1A_JsWŝiB÷W/C|#_4Y}=%)3NN5^˃~o/z?0-g*9Դڋۓ|}_>-as0qvi99ϸ/z0,:pj~_^S,|Yʉ[?|gž̳ym旳u}b=ocs|ݺ- _n>r/[ENog<Ѯoq*nτؙY>$ѭ9c g4k}/wykՉ&} | ^m9|{AᾗtK%/\Kس1q{P!=ş䷯_:^Ow;=Lٰ \]pڳ[ ߖY^͉}Loc3^9lgOwE']'Wև[>n Ñ^^+aSW3?~Z8ї^Qgx_>EG/~u嘭%N`apcnÕ_ٸNZ㬖ν\`?A#ăsgW+{fë]y?f>&~y|k}6sfZ0V;δb/viⱏk>0j^RoFΒsf"Zrʥɕ:_^ܺwwwwwwwwwd^zHA_p% ^·K&ž/jOO܋x1*F;/%<_1^>%'qD/jÝKX\fE=c>o}Wo{>Go۫\ҫg8xDs敏hf,ϗ^qG_3.u,/,(VD}8cjW,'[~=uO_z [حjV=~ :|+S}w߽WJ|5:3odzy'%.g3ѻs68Ϯ|<gm8,5|bl1!F[58{xv~V\~0{}{ߚwwwwwwwwzx?ϗso>/~//F/b$̞X|˿w淧a[?KW{Ǔ۾,hBW>q1K]YNjۇ##?t|%^ߞ; }֮/{l>pan_}o_DO}g:X燭bٞO p|?`7xձϦb|򱷗cyte[os/y`&\i8;_3⋑_I=~p:{MOY{M~W]/9;[U^c}5 'V8Տ/,b럏;w=fW_V\Gꉰʇ}Fu8 kqK^Y\/b!S^ZCh/*0^^:+p,mٰq[+$gvL#jW8<;l|'Lv=:m=kY~ ko} ﬩go_դo;;;;;;;;ov=}/K8sfh]ԸyY쵽x볜ݗ/t\;g|>/u_m&;/[/_^隴lvz', {OoƚI?9-F|yqKO>z˯~q#^vӾ8Mm~XG`wz}8Q}W5_.}c9~3[>""jU/|4t3on6Cߴ9d/kv}+|䖓-jX{˵.'L>}4[NNNNNNNNMR/mV/=^E׳^̮8`!&{3cw6ōMI#-.oa;_ҾWoN WratZ/%m%ܹ +|gx>Ű>ӋzH],V^gh.j^xgO9 NBUmZL yߪv\0Sݵ(oq|O+>vmkbȯ|q?v?,3.?y8Ѹ뵿:/j卻bw8ٗO:˾͇7\>1z'QN0n[e[Mֹ .^zY{CD/[b0kF~Keq IDAT$0-F;h8+'rb{8F܄Zǎ ۲'z8/l狳+ؽô/lbgLGtű >oj&jgyY%Vկw|YTݬʅ/w'٫pۛXuhYnñYՆ6_}5nܬpݪWoۥs&>ήX=#|jZG`Q?,&.__[͖גc%b^}WmxӮQO ׂQז.\z[[˾u'p'p'p'p'p'p'p''!"=|r˂ xeN~?u/ a|_urV6vg=鼋_>}Y3˫}) &G6gﻮMj>?H^>Ɨ&>çaI}|N{ah|q{8-_t5ۋm:_wm᷶}rW;K'rO/?]'?_oβx맞N/5 ]SƓZ{-X?W=O~v]ܭj=~V;u=~kbjȉ6[C{O_o;;;;;;;;7_jA増B,ٜ׊/.ȶz>lDnG`>L06?N+?]A)z}ѻ} e=m+>g|Oz8,o5g-ˮ}Ubdy5}|(og9¹V]']+Zz4|RICA'V/rcwm0susjV|w_ųv\._[gT<^;t/ y,TS^z{/~ t>Z#;'o6}m.0ظ!).xuO9ٟ\_qItU_a][gܞMng׻t=G}"UMY%ra:csbۋs;/|IDؼ|wzC}W˾>H嫇0pν||ԁjv+ϗ?8O`vo6w0;j]_qy|6Z43瞀߹fÜ=-^<8G8:W|rˡw\w?g>/y\;>\qgOwkWn^|Ϡ>_C`V?r!][tXt~/s@ʦ{?{/V|bdže&s/+|Vafĵ/`ˎtb_XxY/ʍ{ya;S.F{ crWZW6سNsjjK/bp^ؽx/`RkwϩQOb`I~; .5MLO/ G μ`Ŋ1gK5 Oq\$\}~,|O_xX}vGT={[bi~/?^~3ɳ>M50$θ`ַ9zQkWrgu=_sYW7˾y'p'p'p'p'p'p'p'a'a| `oKSzsB_᪑|/Oy%F_d؋+,GX{5~ asOݕr-O-_Y7ʸ?-6>ag ~__]aʇkzO =;`=?oS/~bm*d=~7fWՋsԍJpu6^_F9qS_5j</bΊ/3?L:gሷ Kt6|G•k8]ȋÿR~R]3%pǩo}aˡ[?D/-aPT?}=aw!޸;(3|\iG:/|>Lfb-=!j(jѮAN˾w-{'p'p'p'p'p'p'p'&x`'C| ],_î}Y‘gzϳ{ň<=5l/glSs ;O7/g}wno|;}G5B^_aʧSou |kyv/&  pai¶T}.xҰ|qכ}g/ 懯|[~8{&_T/]9^~GYgxʯlf7z ._~%a:[o94JG9rgͰ0ҟrN`͍K;cqfaaQzGXj姫;||ә7/⮇r;f==~k | x`=6Kd_Õ,E=}V^/I|􉭦pԩ6p7ZC/iv}rll_msp]^ńaNM/VݵN=(_nRO_. a9Gwm_.a6T ^yd1qW3Rj܋gW3 _N|4|V0귏# ē)No8waVg1>+W<ͅ}S;yۧ\|pa>LGp: uvƗ/N`o_>z>Ͻw+AN{w'"_E5?Rt'?NpG'ՑKY@g>j~A Z<ƛ'NԔ{!'?ΆyLk/O4аc6>iup6K|NyP'gW=-/N90U>_bQ}5I/bnVt\uNouQ/izeX,L}S.O[<|g0x-1}.F|`.֞N⥓peeGxK773o^z/.7onx}o?PT3%~R<޳mG;Cv|[ˍSmm~k~MlvH\;Gz}$~qcb`ozS/0bmVUO{6lyˉϞ?]֗aٸIefH|QNR|ɯ6ʼn6|lח\xͦ{Z|VeWW~b'p|z[{=k |s؇w t}i/]S Nr/74^T,O6ݒIm]8iפ^z{sxx!ۗ4{|8'gsS^rg_?ΰrp./_?U>6\>sX~6}rȁgӭrQ&^L%ח t_:-ʹr4ҝ+_~V8b-rOy;1/q3ʶ`j'} Oyķp0a+Xu䑸wM'ա-=ɳ/'/OqZ~|ΛTtخ/gm .)?vZVmOgM>69˷eۣ?GS}9[NNNNNNCN}Aq'ncp=e AixI^0`{يSx Wn/5xVW>]raO/]~cu`Wul:7^bk⥫xqwYN~.\Z[+0WW3Y[\0W}6_ߔ9974\z9t=,7ɾD+~읩0ͅKlg%N ˯'km}5[yprT>ѭ$Zˇ3;zijjy^Օ[MlY_b)' |zs_"u^z~okx5ՠax|{;}aG6?\vrM??-L}V^ |SZ㜕b"^o}o=[NNNNNNOكiZԻؿ^v{酀sݽ_''YlU~_Y=3)'|zċlo'>_[Հ/W>_s {jX8$+iqRXuG8Z^/vk[.mNXuVNL'^Kїlۧ'naW~|ƶV[_vӸN W }_>Ċ:ߩ×_j?aw= (]sm;6S<<|gns]X~}-_Zi+?>%LwcՇc70''|>kS;+=S}9[NNNNNNCNgy;e}ǝ@_׮zびccdqyV۞پXٞqEH} _߽0 s7/{1{+{vd 5Zū]x('ˉ~$,8[0ՋkQ~~5`ņp'6Vrl|M/>rεm/s>1[~g1l1\`>E]G1{']>N?յ>ɷb8r=LϴMw`Ϙ{~VX$pW'^D \¸7/[=sy }6{1T/˾x|SÕc_n(.ȷ9>zϴT/.5ףh7&~*lmնZcrg ϖzX\ړb'pXz|'Ki6xWʇW¹|#ؼ|WXi#`;kag\W~qtm.V}ѽd˹ua-?/ڇn^Η.7;8gg}V_ROǭ^sG6\k{bU|/K.N}ZeE+7grnw&Os8j."wqZga/V㝭{7^3%W-~oq4w{"./a|gG3־xxav~}y&rVN\=}-ܒjUcQsv >LVx/r{)wwwwwwzh=oz+os絷׵v /!atjrؤ^HX8:C?'^GgB%oGgnpx(V>_xw޸9qyA[9^`8r~%>l::|3D}<p+.Y3lŨW0N 3/v}շ^> Я.^jq_yq.&_b~__ls~_NרϷ6~\Cڞ틾/R<ϳPxt.<vSV{8_zþ_+.):o0ا?G/aQ~S}9[NNNNNNM|Hzp0}{`mx"h_6ɋ@0v{?Ž˧[}^_N:'9;c!1b|lI}a+/oR6p :8+Gm|xsώ/Li~_ZDi#0vr·;3jڳ];I˱&yh䇓KVxs S_[~i맟~ي|z>ziէgpw_>_gi.q')]_/W_9sʫ0tzꡑ݃"0ڃ(p? t5C}E}'?[~/ |=fOtRKs}o:Q\#{ޓ8K|_ƽ"Av/o7N]K<38k1ytv˷vfm#[?_'N؝=N}*gyʧa7ΉOoVr~4>>z͗Hg*p~vzӸq{U_|{=U|yDώW#b<닕p _N|CͰ ]\54w8:pɮz`2<…]m?(?x^]G swfl4.[/8y_jOTyxHy8~ÿ {y&`a*߳鵇ar2{huL{{V)Vu/<^D9x c}i-NA|+ IDATg.}1gヌ+p4jagӭO_>zto{cX/ՑGJ)Ꮓ\__X~V'_g?O73x:ݙ˫穗7|ܫˋnSOlrk/?)ǽyaub9櫾\vg-.5aN_8OgqjIЮsoð8_\ gvɣDx[&팤u/˶'',:|W:KWmnx_>[g-7v^{Σ>`h{˕>˾y'p'p'p'p' M#8a%I<ߔ? }z8{H[ibY??>&b᯷fS?-vV8ɷ$P~lxgbq׾;?i=$:X;Mqf&oA8#/=zް'|\/ٛiץa9{hNblΎ?W=Sq4<$Nq5YbO'0ΆYްOg+FSȕz[}9\u9]?\t{ޞ?1toy{ku[NNNNNN@8=dy"tz0zx߉ zKh&Ӊ?G:Gs?4:MLkjt}|u9|y|螃@N9z(f w_-gq$Son?cLgRk˟|_-$6\:?zηl)WlWysֱ돏[|XS>/Z:aCދW'N~rb-|V7GLnx|!a`yJ ~jg%'oa룚#~sG \:$~}uWٷ| 39V쮗}gbgxQ\r?saoF0k .U?8y[}Xl}_h6O\ՒCvL#k"7Ƴ_fvN?zi&4~<`ZB/?o_V&ࡦKZ_=-Yz[~kxg^k=w͝n/f٘{f CO8Ӷ_r~g^^-w䧽3+?M|ϳ/2qU# RG/qk?۽[~MOe[%l3޼N׏Wq3W.Wql|v!=D*LUKDN##LiOPm_-=_ΙO劗"SK8ü3[Z'~kg,3^}wm78ζ|q0O9[_z/O\wߣ+'N=OxuOჩeyo_Ŕo;;;;;o|Ï!ǃ/o/[Qqo/Ý:'qx׏˿ryoׯ^_l/;׭kq$ٻ?{x?CbqWͰ5z'xgaw_^-~9{qlaqn?DL_ǏWo3yqa˱:#_4^ &]L<@'>>} Ké';OV\|~{a#k)z/V}rwq\haq¯>]_rYs.?btj|V?G^.x GRQ/fJ] 3o/T'|_Ç.-yմφe{|mobIu'*9W8\9awxg:&IrΗg&fљ$Gz#НQN5{sw}< zO_o;;;;;odjH;=[p7Za{1A??K8z,-D= Y,f|,6/U]>s{г|)\v&}cױ?~^'i z E1xI~Xo9q] ޾q}Gk՗R86}bt(Gt7O^=y7b魱/^l3Kfn˓=÷r^z.C?0kV;o,Muz[;3_`'O fWy\lzS0+<8ye/ wwwww|=A /f߈/3셨Cm>?vy{Ib%Oz顸\+{5'{o"'l|/pEp):l^)~EtN}O^b*^%%'rg5㤳;]]Gg\.rYjgɖg={EN<퍟J\ "Vn/8:uw"G~\g8OywZ3pcMO3uŵa).8#>_T+,~gq3Òpbkɳ8s! OcśBaNKpV޺GiyS {׉k.7.Zq#j!tG8{v'g_lG?rc7z³>QZH/~:?_?G|쮍'JǞ?_94_땽yb_?#&9Urτ0{Vϓwwwwwwk=V>K/rzx܇K/ε-]\(×zRt޽}OkStp̡HQ*$EL!dTRL)90(3ERRr%F*s_kͽkgͼ^^ks}^MG:\_`Y`uj?tՑ}CWgq:SK'!pi{xzFSq'|q{6q&$4 nXbf-ޱkYW';36>? X/_uzg\wⱎϼ}3}WL5rrlp\&/y0g9{rQWäX'갞!l[o3Γ)sCot;qqk6:~w}$:u`ցX\ภ颧.4.n\XsC7İv7^8/"Cʣ~\]tEK}]U^>>/xs`_/:綾v9RΩl.;F+z_B|2cI!>~_qְ`-򆷞{?岯=шGtxnmcWq}??ӆ8_q0xOicDZrsxb7gŇ1թ3/>c 5{d.W{/; \$[5L;|x'O{n9^IǬc#_q&N=v=XI5>m?U<]>b9qdP|Ւk"ߕ\3pqq|٪IL=Q]b&9$e{wro:u`ց ].bl.rEfZbؼ老ZlܹHk~^쓪{t;:_#o.& Nu.'aWy'|e#k[~H:^}j1Hߚ=Mε/[|3؉/BwKɇWfϪ'lk퓭M';<]]8!~O{]z,zpUbg5tm =Z :k8Qo1U[v@98=aؗ꣛]vszb<ñ嵇[NFա.ǏGe/̺ξ|<')þ{ց[\ r[fѼ tC>bXIj{Ї>tУ괟.'YxOw eHĚ6>^i}}|Ju0ƦucMn`CT;lFooj9{(NqӞkVza}w}9Dl͟O>s[8hļ4spK g9\zm~xk~cJ5Ҹm:7>/Z9&9?8:.0Ch%ݺXb%^ت/v:ii/?[1E|§'Oqj4OuQg?mr8wNٜ杷utgIϗgm? :{U?qSnkw6GּbKk9< |#Ly&yye;O>sqpbóW+\s5OX6b|bY뙇>; FrSV=k=;_l:u`ց 󢥹 u=EyͻJWؓ}՝Y˴o n<\wܝ c>o |8 _LrY3_b5Ռܾa? q0FOǗX2ȯ4[Oi3^\%?i?a5d^N麟}ͫKlN9,/L=Nܤͭv-x_^M+ IDAT`çg̋r5o9#_ʛ!tuYPSCόD j57gǍ8\l8]vW>1[T ;L~ߌ*wVW7%?fq޺o(F>7볞z4gY[>oFf_x5w~C[b׷Z >q #\F^CrF?wD].$r0_bw5ۯzr$$:u`ցX\$.h$ߴ]85&QZ]?}L>Ύ>Yl 873ٚmֳ38ks|:oZ_!0+/Q.xcN]l0biv8$L9q"SbaIv˽u`ց[.!h'6'nΗWҗ꯼웾jt`9?00LL֓Ұtٻ _#oĚ7 ׺nc~6'e˿˱1͋:bZܘv=ə-7m|>]LZ.5?qܝ;ٿ;35G=m85ߔa˯npsO{>mxR[+/u?NչŤ O03uS?7bO3>{i]+\Pcg/_7|uO[85fVF|4|1rd11N.{m DS٪=ûg//[lŭ;=;rm:u`ց .\!]tBXK=]ò˯YI׼?w@9}f̛ >ÚN_|272:̫t2s}6{G?c -xcc>19g5HyO\ ̌Oϖ.%~i}.F=x9ɿ,^Cix1,x9_5eo \5>z<{`o|zp%sO'~;#Bv29;0| ]zW&x 1aX3 }"c^yC}[ޯyyd^coFqɬO-08~|;O𳟰'[7>3>gpꑿ׸5y |%pjǚwsq-$/j4e7UߌuGyT.6~|w|˷u`ց[.t"tӜυO¿,ܕE;5`{oMx;Ƥcm|p.tNw^!ݴuqqW\>q漋/w-|D d+/ՌRK1;9;wSTn>z.v~6/n/a9'uC\m%`tgjscb勯Ik>q>ٌ򵆩T-ldrdZ383Xu}OrՐ/~0헭rk!~< .989WMj+-/oOL:g5s|!٭ D98%`u:m_n|k-g\to?suЉ[}1{WqƑVc{3gX!LS˾czEڭӧ^ٌX7޵W<f=Yy13k|kfC|))GLRribQ}qાU8>7zƶx{ϓSKh/szɾZ'3G^gbSo i,N咳 n:u`ցWtR5]xu1?w\XoO3$թj޾N- xwc6{x~6Фs}j}Oi8\=0sUx9_y:ǭcu}|6.͞։+>Y롘ƚn]fI1q,?vrN_x*y_yRif{|CWkǭCz0ׯB.ƃ密4{Iǣ'q;O&~x7Sw'Ykx3I,4&89n0s3ubkiggyvqivtM.u^]k8~5[361±u~fycu8٪y> ?'|i89g:WD.|bfMg>ښ`óO؍αa-qTs8Z.uWSi}>A+Dyg7< lN[ڭ[l:p!uK2/ahq]u5Wyjx~=Աm8yM.ٓlnyy3ϵ>4{ռ*btSdu2͓6j4_x453)=XKLŧFt_lN'g|S3_EO01af2㦽JϪՏc~(&~d/zuaq 03<6\F6ڨSbd #Ql5y`Υ}5Q갞顕㨶*WƧr6WLFëOq7W Mk1^&W|ՙɜ]ΎiVi]ޙ'|&¨};]K9}ws7aOO|#;6wZ׺Y)~é7w߾MozV"C=y@[l:u`;Eϙ.ZwCO[ɾ6'5ZIg_X:ַrxk_{_el`:f7e Gw/wo{ۖ:7>mz0sD &-4 R7;0dƜ\z.rO%-l^]qjߪy8XW$ߩՙ_xXwfH:nD;?&[1MgȷXjFwqguW/pgKO;TC֚?.1}Y\<)9]lhaΖWzƘbf<|>k-l19nᎇ0piyg][ ٪g'/n#^-$eq^$m>1m>9O/pt??>1ϟGpɌV}tx8M#䯶pOjΖU[aߋ^S??çGG]m ~ի^E]t)#Ӟ^ p݃݇>K~l=n?Rmu`ց[님.N_/T_~Sm~/yKv?3?-qG>r>ׁ}kww~/:}x/r^>n:1yO|rr)瞅/> G݈Ay8$s7rL.qg0lQ@:q wkqt\/ [j{u/Wc։Z,i/,r^WĘ߾^٫{=`sW|H1c?h |j?#;jGx`/xM~s8fb q6|+q\~1?%\?70FB$뼳WmmR;eTGը?')aK_A v]:Yrwgݷ~.?w|wsxg>s___뻾k9M}};'+^=IOl:u`ց[.c}]׽uw\}[M׻ooY.}C;ג{v\?z˿{hwgP/ծv+_~\x?)O6v&7!$ڀ3\M _75f, Z<)ϲ8xuZZO *[nܜrufmOZ}tR>k걞g|x|b_n[bֹ`AA|Ch礚֜Ŋ7>i$9xz(gs:_mk/oOYOfxLÙ'7MOm.<-Z'ltǣi&?9}GDžPȜ s~f{3&[5 bIu[ë~3|iO<}lqb\PzYo.88u۷.OU?.#8 v:\l渊UwKޕ>J{wwh?xwR,~^կ~b)ᶷ__{_ pg=Y7].wɵh'_]s %U_@>խnHW`䛿N#6:u`ց[\Q?%µ |s?swyCG^Q7꫾jB ίٟ׼9yG~Gɯ;-nkw\5>O~ p%Xr3i.Fœ=~/n pvs/7ln330|7F͋_`T\|W?xfrH_g=jq3wA6xǬ:㋣ʋgmZ<Nx¯&c3M9x߼=' |H3ǁJQKw|5|s+?]_-h]8㓋u[=I{V1z]\{Sf'swz̎ÈS_{:/R.s֓rQG:h^|[W[!\tjc4xqM8񉧽_Lz<^qi?]۽71ro>{pVg?/z7jxCMm>yNoYV~yqvT3?,N=Z~Zf{n2s\t37V7>'x@G|9yg#mj_~-W~h7~7.}8˿|o_hg ^s[r]zw=T˶ց[l:IvEny.\^LׁwO/Ն׼5_lK oot9~o}71|;ov|}]׺b_|0b4DuSMXX ϲ8xqC3s"ggs-{nu\RluUO7\t7AMkK,|{&˗f#s~h50k{żxt3Yn*s`4;Fp᫳~WNYY3sC#9 3gMj%%qsXR0d~^ϔy5/v8>ó|{IsltCEuSOĄ;5,/]՗.g۱[_ijnሸy]T0ft6O7.:r=W8s1 IDATMnl/[l:u`ցW\gk@)>^?þnPO.ibtmp6|7aO7q75nnpsV||pSSkbi".%bWx";co_,W*Mmi"òa ~="n"f޾}./8WWS[N:ӾWӚ0j#`'5n@ñt.>'y#{s[N6V>}YX(>5Yܚcvs4ڼKnw<¶X|ahGwVyC |2?gƫ}?Wki⯎ \z0cמ}AƩV#^6 s21ŰW3nhx85[xx|`U^='5g3³\|?Kimg}gMץ_ek&OL_!If|Mo:u`ց[x=l!/=qK%p o].]8]̟.\vC&]wBXwO Ofߘ03n'on$+=L<߬żNMM O|H:'M>^(mWNxc+{ظAh6vY|df{2񫁞{< nJ{o=xq>5Ŕ]̛O1Չ+%?;bq0Νp4LnF5_+N؆5WW|b۟'>l/^Og妉U',l> o2ՖZ=nj_W+=OR.Cz4o$=Am=&k،{̘lSo>:!7 ־mu`ց[|ju?:?~'.>|W\,t=ohtA}81\899]|?WK7%6 8_7ͭxaI|k? k>S[90ı58|狇p⨦nꅩty>%=ֈ~ڊ3.-,Mbkg|Z={pu3viü&;u3f_&Ɉ1uc؅;7o.X緆 7ׯM|TOjkF×c>kZ͎ylpk|C?qcO'8|KBl|&طG!Cnak/r/ETui>k atWKඏbC͘0NW8&O>\ n3iǍk\xq2^ ZU}z\^ò}Y⋭q t6:{=(Wٺ\^*f;{/8?٬ָ䠧bg 3Hع1|x~UN1|dw~U33y\ qUzz_#p09'73?l*_c8/~areS+WNk8W^Yaaf^la|~Z׺2~{p'-o{ۦSf=n?}ﳞ{̅yhqWՎGcyyJüpcL7ix7, M $, .6?!o˗L{0ଖ%Kuأ\IlXv&tG0`̉V/c(08 L/1 ~P[/WZ|sl+KK |6W؋^K}aNfSs:9K>i?5;9aťN"g5[/3< _A7wV>~޺x9x`T]l0KW$L9>u89ghƞ}cgp0%Geͼc]-$[qsϧk_pg><}Έ1p3]V^K,r<{{Slw~ݖ}|/]tѱ_G^KXH6:u`ց[l;'=i? 3Cr^z[.Oww]H@R t]G+ MH7]uoM# c^8'?=%4_be 3}޸æ8X}2sN?$Li= +fT-I=sqy)G3 kvCIw6$~5g9Ŵf|ݏq˷FDoVS03,̔MŰq3O|9/}_ZN.oMĐ[ %l&1 >l,RrWӬ1,O<_q[8ӯƾ{ŭϛ~y^>-gN3՞_߳OWg{%[qÐϞ{fne-[ ۼ.adr58{sA㖧'{:\}.'/{ٟݏ菞q?խ}wωOdz[.ޛܡ7ވ{co}6̦l:u`{S{ܟt9|~o^cucַu717#OnF6\}%}r؃b@>Éߒ'}nvCZ ;|fS=);lxZLRoLꡍjWuVx֣z?)Ǵ A1 '7^5&FO Wcd.^}+E\|4 q-n85^W_ONx9pY 9 [K`)0M\ub\}:o5̽tؿx򄫶߱`YOvqV|ѱK~q4g5uYa6#N0pi3-٭ ?qO{b/U>xC=Iw(7 ?./O,lgtp0~yVo紼b c?1BÈ7;)C>|O 8s"j_t{/~:~YK님xW>'Dmpo|8Q}RrN <.??h'Z^,&[_ﵯ}NQo[.ٷ o6u`ց;y,NIqzիvozӛpxx7K${׽=MӉ>|~O׍ {7Il扛:lpAa y_a-.bZMO ;mb >`O$\Ǣ<|Ti^Ή$l뵞{Tlv1Sbk/GsFl.<~~Cnb \bf bƛ"g)6Z⥓a5͘^#]|bslx&z´_shn8\{^=هPtOubo|:iĴMlsmd˺Z8a'=7 灒9u9\g;-c!|{m?)\81/ //>C~z =W T3b{vۿ;ȾMl79.OԺal:p#%OO'u] ^\&7~Wuԍ cׁ{_>oo.Bں)fnw:gsҘ7 ỉu=,s}s]}b͏͞=\^3^tXI&guc1˶>%]>\wc÷ڊɾƗCΰV]x0o(fO铫_y{C>sso2|v$.z~<4j7^qI}.|AϘ#f-]ǾDVx''~=Aw]{}kr66^w~wo ēla_vt;7~~h[K y`xk_~xֶͷlp:Mu|mA4%ߴm[l8}Gl}{Ccz<ůz`灜mw__@\>ܽ^~Eя~ ]w]w׿~?û[~εk\?ᗉ_\y 4ˍyEYi~pڍ\u5ՍQ\xI//Y'>vNO³w <|,^k]bmjc._\ڜfZN''[ '΋i+8u‰7̝bf9hۃ3ޜԔ:8`昱:|gǺW~M:8YmgqlSIl{gXñ6ֿ-fƉiZ;a-ww^_4y{ޮ!mMo'~~rE :v[o:p@ov5ۜϝgmu`ց|_3Z<0|߼p]/^:ٹs׊7֡7]8@~̀@g.}^.ػhsM [ysQgn]KDt#Q1S\zk$.W &[;\v{3).'&gŘ'|Fﳇ/).8W.Θ0agm0r+xht7nMClu_bg!v\?>K9ue^kp|ήx_u;^ ͭaqk)luu`g٪wi轋^a3$m^o kNڋaً)7͖V=j?b-Ws.s%3 69o]}lS³|z@塗"= ׺}ڿ!,]Oc݀7냚H9C˓ops%C`g>y9 9'mlS}_//}Kַ .ozӛof+^}p;.7:uف}olv=9.oo[\;py=>=C@|K^|K^{ˮ~g]UWGvu9YwgD,g3/~=;ۼ`6^K1k\Zحz_[jg+>_/!3κ=gKe j5i7np7~:9˶Of9j{47ON=cC~ZoZ[Jk,/=7?4m>4NTO:{ZzS]&μ|vn?}ٷl:uTg]77?+hMorn|Uـ\7 3F4_~xchݴ754ҍ |'Ց놸L<_nf}|Ʈ䵇ō={5'̜zgϾ_NYu=Nm]c㷆!eq/>IۜW霊?pd޺8[>x@apI?qx gbZ-,.s}=+ǚ7qdWI;5f_<[.6:8Cϟo̘0bؓkgzüx)/7=kxF6'v̌ߜ Xvz6s"->If߯KFZu_QOjY :x݌ۍЬ~w~ÊX3Ǟ<#?]8&Wmgg^αWwL>C=,WiR8| ˥>Ÿ< ׼5oW}kx {.|S/{(Wj)=Xa}~8'[mx8NRN![[.7`6o|ߔc[l:p2s"q煹ω1}YeްsF4sLnˑO5dgsM\&P IDATkxK!\]3^\{Hm-.lᦍ=_vۼ-o~z-Hz?n^̳cf~7(N[x&?[5aZ/?5^ci\֧r39\9WTSvZlRijXeFwc0sNϹEU뙣i^z9z/KyҸ{lᣇ"yWL+8ü}wuWc]/ln0(b<|G/f|kLy}-?W>2ßcd {|w|˷u`y@otCbswkoKu`ց7>X焋p>Slsxnݰ~툽p&Ov7+l8?X}z㈇ߺ:&:Ϝ77+&.,|F8w,& s|-zً]'6{9Ī/_?0X[LimoϹjp!a9θ&6a¥aaWŴ|j?Ü=>19G3cӜT+08͋ŷ㊅]K{17M7xٍjecφcA^vܔOzbgbE<)o> n Wڮ~/5 F< q|};>|\|0r+ROʧ^qaG&F-1Mz>ڷuVksqr3| ^l:uS}Vp>>Cϋ51obpdN&)%`شH>#KkM۔t>zf_7]uL;a⥫aaI71a·^ {}OO`>/1qᯗb{xUOê?[2+WĚM&q6x˺\=0_oV \5Wg:ubh#<_{CNO:.~_/S;m'Fbs1k}P\3{7I=:ڏG+jOõuq[=3h>a7tl╓o.oƬqI6kpϏGhCW\뭇0(gO␳~]'>eNoyl8o 7ٍ7o7u`ցz>#n?/|='sfpbʼn.lzֶ}sٚ|J}l⋱3mkmWkzn쓰 v0ok·~xƍO.&?=m%_LLaZ?\zs%<]LǢ=V36)O0xag|%➸lahz8q3Lx&W3y?r'0k:.>͋b愽1׋s+?M$'^lqqOlz`+ܐî3OYڪZa9u/ux6$.fy=Zܬ+fnqϐaIv˽u`Yu`F9s7{v̛u >tp+7nCbo x{:u`ցTژϚ>oh}Yso4?>Qv7U+M>?aԌqk^NZk?j6'0I39zm^o̍u]CNjO\5VS6 -Gu3pC1IWki䅱ZT 70b^IeOWˏ3~\'9qK=/re4_&/a&~ѻ>Xh?1*־<>um0\ g6LaSOV.:'/ғn$)ݜ ݸsZTnBe_ų7aCk#n5uv]u"=Lb]|5gԛg|n:t2{^o' Go^~1`Ĥͻc95>A^Nj7%n=ЛcN.8gX6vqj'i:$]\/=1j'v8:,,f<75N՝oͣWӆG{蘉3s: K¥%8~֬;pO<k_T̬= n~9ςyPfY2H=䑣POq, 8{dpwkZ '̉XM}sFAFkqs鋳a?ZZ;٫s1dGj_i~;x75Ȳ[Wk7V٭ó&61ٻ&I㳕& g`Ɇ6H@_LGGAV?F=]f7^zFDFFUu[58k0FuW/ lŸ8l5{/W+\+Fw[9Z|;⛷Fyl 5yruZ{={q:帨^yUd٪_|hy`ayGšn/:ZHoFW\gM3?s L>6`;N[ q9^5ڇ9F96Q10/F62<(g|ڷt}|HO:88:Cŵ>oNWTڡ=888-ϊTr7w M~i13 F\_VZӤWcw.$_s-].7)+:\Ljg7'!psZΎ\ruͰn0a=4\h7g~_ IۛUzkY>zTkO#Dn|އ~O 5 h~M^p{qz|h//8:RrTOӁӁށ.>$b":o/>r:p:p:p:uz O8sύ8_ŪϘa|qq>i2a}8zG4/{N>z"9L[}lg9YV9w_N6-GuZî0ex5$tuozy\ܾj tr2OUjwL~!C*؊ղxn?o | |믾wkQ.Bkd[>#_|^[Oq{^x[ڼ\k0bX%jjN S,{uټq^Xk<0Fﭹ /_u^^ksju?ybI~9Kf.o5;nމo4|x%nk O>|7c뉇q˯_^ttt}v 4..>07;r:mkmcttq<Q|Xu.6`zqgW>R\8&pYN%sb×8ZAZ>>tOӁӁ..>4\Ŷ)t?Q﹋b ?ħ:7tגc8;| I\!xr>hg" Jq'/eg?glUcyt9k^ʵfO1t5Ç0pj/0Dʮ5.7,)(oYWGWb4E&<~ﯜ?ٺ8{lin^rfj7_N;›WWt§xnGoem|sZ{ޭaj9ѰWM`:c!?-8bEï}^X\ļ}UO{d/ç>Bw<6 ߤ s^΃3ŋ;/޼/=k-k=pZX0o}>k S [akfuq-yՒ^>v}q_8h^Rþ}:p:^;vq!ŷ>xPzӁӁӁӁ}9M~5.[ϩµZų#=g䯎tqװ5j㭗I$A슺 r窞HC$aGuzZl}G"bʓ/XZsy)G7Kk^ήt{U{-b͋ +8㉣b=yquw)>ڪ9foxg]Cp>ou|w検 Wz#a]4'0qi{]|jGǎ:5ao w[ r4CF+5<ʛ:]<}3Ol_G}}ߕS;w؇6>vA#..ޯs'tttt෦}&> <ع/@L lϛt MZ]LhGIᄁ7Ɔ_:xq[}_kϼTCs_\qȵN⩧lk.5LX\+6b·i[8ˁ;3™I֞t|4jٱ>1aCZVCz9^'@8]]pI][w~ӁӁӁӁoz _ }cܥϣ|y&ϣ/r|}&|t_n`ŗ}UjvI˱0r65磓z \L:bY.wvG~'z#)o5Lxz}{,pd+x=V;|9qtJb+}t>zV0텶t0hv=8g\O/[[5z% M_ b7ks#bMæ {Rt| {"thg6Wg7Jw1nA?uܙ?O?)smr*׹ooPWWkx4_SN=zDO/5( ˮ6u=ۺRS|<: ӁӁց...{Ӂw@Ǧ[sGc6zbtt;礨οtL|L}1 \O/Fo- sa^0p4բt_\ػO:j18͹x5+||R_<4?kO _BKc]L~՗cdeMbʳ57}&oN7Qb._ZLx:rMxʥN6Ϸl8  D ] -Ϟt<۷XO:^N7ꪞ|bH4 x=2<3wsR|齦=SM`\4˖=Qa67_8/-aK';pXK)J]7.t];2On u2'n馃-߹omĔۚ?9s8tpO:͝Kλ>k"d+&FBxyq} 2g 嚂֜56ïf+Dr/l^jN*'͚O6v D5~Mvn-+48]a x"6ioloOh8pw ķuWO=xXc5K80qs1 b ?k~I&kqՃW$8#gX\_"lq.cyj ;~EmawZ#|rza#;s6"ƸۇxsujTwsI6`I= wsمSZ WBW7ң߿b?~ӱn98o%{p}'yꆇWxh_MO8]jJ}'G7>(?W IDATCSv&ƍU70:9gm/ZlaIڼڋ߸…)v{^-aM.6ظ}{/; / Hv⬉]el$vxZ7Zw:,#u80^xB[߸5?aN69{w,WN,rƸq5lm {!׺j[8vqnLj-9`SA`ڀ'5\=0-ZaŘIqeKDZqٵy^]7,cc}"ٜ7q-oxN̗Mη;j:uN!\zo/lyZ?Sc}3Y]4zmslQxykq};/fO9L>-|yZ^'G7npFݍD7]9?`D~zj7nPGNNoչKs{>;7d@׵/`tsl켜auvI4`Y '\5W9{ kX6szw-^ >50uqw\ۻbۧl}oŅo}߾W />_dk.5l9m4,#}م?#txz$vxZiFhX–Z>ô~QV8Z S—S'sVO˜ݗ|/!aKt<888:p߰{/[_wqqFܨ8r:p:~:3k7w9즿s9L_h2>q_fhՑ _`ZW/3Q(+?.s/hհ|'\,?ο s瑜/.p/辯Řw4^دH=cwܑzh:_aݹ¨cYZ_L{fS=xĮr:p:~:su~wwݾY'_~cזtXŦb_I/~km]ѵpa|rqoϭo}jzΎCzԼ<Ǿb|8ۜde 'V5~d|i úy8kygob{[tyҍn6?~<[1HA!;!axaůTO;_ {8jfK~-fmr_Ԇ7}R<{ΟMApcƍf0O]7eOE骟eiW؁S7{.s0}]g^2գ%]SD[;$-O7n5۝.[mg ޘE,ICo ڗaq\&h5l ']Mc]rCUX7%NOX0|~r+ lDz#._,.< !>Nsy ` ;|ן[ÛW[!7}˖DZ<|fǬ^5I^þjI{:p:p:p:ẗ́7n=0'gv@_uO5|?>7MճӁn?Ȉ a^ϭ{/0f6p~S }X󾔚^%]t|F=gAVxȮcl/o:>kn|lx{#~bp^dxڼ=yT?iNZ~vۜ]1/f'OqU5e_Ys=zjU[;̍bu X3B=~ut<(R#h[\=]ũ ukwie\oi.WVU֧7Pn4 G7)USfO_R:)§÷^иjHonoyʓ.pôm~.Wӽ ~֜o_oyNk^~j:^;<9-9Q8uqUrx#[{ku,\q#o/* Ae.o6b]u }d #]უuz݃H|⽏+>~8U\b'<#P񩭚lCjyZYo->n7\i(-ڪpֆ=pv|}'nXnПj'~'|qC57n:tїb$y׀l5q9E/-_6Sިb?0}a^lƝ[,l\qOu/x뻍=_x6fcˏۼb6VZhRiX;V5s.'\l[u\dui|5@n?Y#8[6|Ip٪jqg'^cx_/a4L ƁNA8?B~ޫa5qyF~A=( VKn>v5ʩ)m7\F<Փ?.gbav1p ۞c͇>F{RrTOӁӁӁӁ>t#d~(~=O*'0n4fllG8_qؼ/ ,!l5{"_L_&h6܏KZM7pF?>Z]^5:ϝ o66wM6r񙳙bkpá6~{K4{Ӻ/lg͸ؚ#/ N2zӸ۷}9q&7[Tw%W#\u .W1 O/ ֜&jH|bpU9{C-堋Uۯ)Or%RM%y/9>e/W~k`K\}ۻ?pk-65Wkq|$jbr'D\~k>6bqWOv<憽 _5Ob_J*8y_Zo>ӁӁӁӁ;u!77Fػaq6c%;ӁӁہGd |k3.oa}_N< zCZCO_-,LyóŲz5mj\>{_/w_8 _l,/t>b׶ﱰ0|ͯɫR/[u0l}}ex7rk߸0&lI<ٚgvWN{y]_,\#jȯ>y~0$MZ^֏bh6}?{w*[<0co.8~=0v/x~+~֐gm@Gsrݺ=8ރDb'~hmy|zVb ۿEm]sw\|iaQ0oOZw>8Pu;q`; ;Xq}:p:p:p:tMQ$ 㧟ln8O ꥞1w9;PFW%Nq/~ +.U+?w\O{K\Dj wW;bWnWT/-O"Wjel[lԁ֟yc,[w~Ar5ֺ>ك&P_ngüWw0F=ཏ4vs1nt_ƧlՐ/. }/I zށE:ބ?ӁӁӁӁfs7n'0hqZ۫ZHXYo-I9g?}/˫8CbOz@u=aMM9qiࢿo]w^gg 0<`@n}:p:p:p:r:Fo_\~́܌pCFap~ӟ^M#7K Lw_$7Zk< c8]Ch~5TXoYu|ǟҮ+A{4v\ۏ~OP?U8%!'r?>~W7u=>aK1|zVc\[7p6 ?nc^ĆO<|tk_cx*Nއ蠢e%{P"m7n@IS7alv`7nWy98xop5yMFat`:Gų_.^Zk5k_, _ۗw)Ob5 x`]O-OpޗŗwW?GbTpcOqy2^r퍘K;z" pDL9W1i~dž+] G2>khijk͆ӾhR[z|W;9>{֗nGۓT{U8]ۗExbxڷ~VC?ؠ=gTW{΀sOw=s?Nqr{(=zWOkcO/ (VU_* IDATG=!Y{;wx!b-Mo헽4/o{d3H@o]}dKV[\>>>t1_Kad^̙\\t݌騺λIItS Gvn˄Vѹ[v8tmbO7ŚKo9].'F؍/=YW#; #z`͏<{=:ds5/f{Pඦj_:/Ջy9v}}=ɦFkX{b&[7̷>^ ,>dVS#6xb6/y uqc^x/[>0ኣaC} R\l͋cK۫4^᳎N68CW/~^91aa'A~TW!(דʍI;c+nr.=b募bqN')ֺui;km'G}oqޥ< 2؜ s퀛?um\^Oo׵5빵~j4__OrON~r$Kk_۳[_y7ظ:r!y(|ݼ\k+/[ߥsckc[KacNP}> /n qf5gCس'r6uOfno鯇fozZT{xMoy=o =Wڽ^nQ/韮x]qsہ ρ{xHS7-CkKzpĖKnG 6no]^v{i/'^d~XFҁ~?`åᏜ|gVr'k 7nn]l/r}nܤuLJv:ܛ;ǜyֽ슸4`\#pD 7/wmQ ]0Fs5K <1g#ٚ[fOPZ<rĵ1#fk/_[<}ۃu=rZ*>v%^Khu'b r݈;; |{,g]jZ<$mC + cGvF{G:{dcWk}W|+? .kT[>M -h.ٵ)'Mpmp\55/ƚ5_^yhV=:~rGOp=bwl>R{=V?_Xv[{W]OO-BzȈqd〗{GI齥 >¶ O6oWм׼){>>t|XlӁӁӁӁkt7 nV܀S]?솬rtWWt{$݃w~?O_6TO|t_PMGԌ:n_Z&ƖHTW,r/WkR^ڀ}?־]n6ir>//yˣwtCMIݯu{QMX{=ǿI<\?É-}w697#?9^LvQ=5ǩ8hkf˿x\K'q]lO,zX7ýouܫ-3SltǾνz硞{dAڷaC= ̟Vk'Q+᫗j WzHivj0IK4?]řY.xy8b #:ʙk3% ' ɂ]`︳>888xp n\ y7gg|n(^r:p:;y9/݇YwFhWy0a;`'.KCK)ڜk1]Ib8> ؃u?$_|g wIsWٸrS(Uy=?-a߇;s9X@¼]ׅ`ONNNO\s(~&MsM78'?g?'xwj~]-Sa9x;|ڛ9"@s[_lw\n\z +_6q]h/g?99mT \_i&>rj7pU<0ޜ G8p:a'q&nƕ<5'$.=!Ѻ3=>|rT77̓^{⭛S񘳯\uulT\9ɞ7~\W<,3g#7[{8'o/Zտ쁟89=+S|bٌp]8.6 a]xPEwt:#_tR7:5 .bk8?ӟz~qa[y98ړfsuFΟfGǚ׶vqՑf+y{e[;_8]Cwovͻb'́z}gur:kȇcywO9_|؜g?>PC58w-϶KH ûW?Lz\j,>c{cKM{^r/6[q|Q[=Z_5eﻲz gT/b ||ִekÐretAUGyvn[9'Ӄ*}zמ-֍lw2/ՙ -ɏװ±÷?|v$z6a7=q0ܥ-qRzG{駟~asB@$ϻ t q0$۵8/ЁнYi>]:_hqOʮw ˾ɵuG|+War}Qs??\?n??|~OlJ|ڍfON޽ε?rv2wL;G[s9t͞gsyUkj4'53 -v{!>{ TY~AF< GkWoz)W}/ڷF'5V>7kŖ_^ ibi"cROZZ]|uִX9o97lf}SNҾu-\ٲW+>h{/zK:x=Pf5b0_d^N/iaWO]۪^g.{;u~S\Ig}v~C^jC)ՀӨ?|P.}5c탽ji\=H>B9\01'Zlk֤uW>Kߚs6>c!}}h9>t!pubwu*e;r:v __s~ vܜ7}@3;:gt/|ps͍N.?esCލy:M~FY֧{,8af}µ~8 _J:w'xӺ/Z\p1r?;lրm/e/_`ՀgmO09';l5^l8a7|~Ն3{GIza4`{O=*>ZPFnB|̍W7n=u7zHM_ۑӁӁ߼y뜃iWw %|nG¦Cđmy-Gk1V {櫯Ku9ƻ1x֟8W[1i]1qճ|d+w1iV km_=p=tCa{DžR5Y-.㮷z^ovc7r&^\tbqf?]xC_Z\~/)aKv-rwtv8p'0v9^'s|oh5]li~v#x4膶c랛=lqT/nލ6bOyװ`s yU%yr|:kkPa|k_kV/q+wŷ Szr+3WK"~IcWu?v٪=~XQOy-?~F%#~S6{K: xu5u}g/.8ũXuo^‰Wwyޚ㧫a\V;OOuFeoqU5k݋܉]Qz-V^bz#qT{kr{hղ|Guz[17?Fp3;2^vVμoY\Gkqǽ$?~F˚ȉkߺȡk=n\Z.=N'T?%q Ow\z)^46%<{!ŁDjJ'17ĝtRu餃9r:8G{\uvBFcı~;;L{nphYN~8gEߤR9WH}i{jutsʞ{Msp!p>{9k[:.>4^jbgM 0 c gwv0u9x']u.ZpX_8k9XkN7i\3{Q/ظ;5Ɨe~ZS[>yH#{Q-WK}J ^XW3fq'ć1'Tk5e[x lś-c\rC^~{\+KkGX0'W:k.uS<ͿRӋ:)9Q i| cZW%_|^ɿǼӃՋ?^O}aĨÍs_d }^,8hq|j6.W/bmēJŗfS]:6Dq|_K:yl{:H"'|Lq`_{1k삗M.]x;Èsl\@3 9c6[{\4?|^yjsvܛ~܎{"|nh|efg~:p:;ѹHo?;IֺK>] sw⋍K>xtL9\}> iC"?6w7n:feQ~H;nkd[_Ư~l?jLW׍4n`Ӂ{כ6յ#(jx?墝6SX4I/?BѰ7ʷ~f1\۲W,-3;jJ6T{_uݵ|lު6)aqƹr8㊇~Dfr:>:gTy16c#k?|[5).%r<}nUV_&S< {=mxv?:['pO}uku.c/?v.VhyԴ9o~M^?+nψGx;ZS0[.WGntQCOM,au +VNZIƺݺ\|Ϟ`9m$%:zCl[j[;\6o>rD1gE'tGWl><ָ|8~\K$>` °;ݱH8:x!nj>=r<9V90kpl_7Q]߫מꉽ'o:^>x?pqn'{epޅas>5*k[Xbe'0l3Fls0^O/oU7[{xڵ/f7`AWuBl)/LѼr uWxz!=a޲C_)VgxR|jHĨ_ug-^FZ_z9^op8 sAV;Ӂwc1f0 c1x~7wn6'+1Msl{ܡ=s9ӁӁwgE6ud0ql kNs|O>XZ\bIi}'WG{-9^8g|ݓyb˙fgހYMj{$aяpjʾkpa䓣#|:b_7a2{Ɲyͷ.fnllw)V_ۿyg~Ytyo\pC9Hu]WrW,qluX:_}fɞڿҹAO0=^U|`vO;pmo-Nxb=7k8wq[)r1eOoc~B,ۮ:ߩKI :TpfPGȁ w 8D?$j_p& N'L&y>_th}Nշ{{󺫪 ]{[:sϭr]e]uMtFܛn7%vyszy{9~ZE`wغ0܅sڞp  wX;]:g?#3}su}bGcO=rlxzM;j޷}j*ݵA|p }@9Wg"F-$_4[j /wDMC}:N8q0tqˆC\}4`_b Ѱ?{_qPu9f K؈Xy>< ]]s[ɹs ,Nۼ'y^-z֠Ƭ~]{uwy=0#6\C:^lșgm>cO ׬|!.qȣnc?m+Vg%"Z.57fsm_8>P~k5W:-^qN_e_vuˍg5p95Aug-'<y= oug㮆]n+n~c!=jSiN[/\#qMÛO0|f'3vnKl}}Xlaxix; :5ϞTSu7x~sXa[,9WZ$7/ d_OdSS_4=Om]H=~۫/l* ^י_ypS4Lǩc717ʗotL+rwT \Xثq.ue㪾b[nQ /aİ6)˾rw2xOs{BxpXعz(0s҅ y:/_c؉ŹJ<a͝C7w]\]-j7z[1^=?d=xF7~=׵(=q|O#WU[lL֫.N.ןYs/0p=< {}Rck~F%{~+.RJ6OXI9 ߱g3z9¤-?}lW0S`H6Coz:|A~2m8igÍM= . .‹i03_3uS|swײÎ\N47:{6.ֻ_H%7 睵 _Ұ9 s?t~8\ǷkQ7u-Toi.n.뺞Nf=as۵) z݁݁7﫮74!{ֺܽyϴXwqqd+NF6>}oM΄;hꞜ_^k9G`ŲF)0l"{~!ZQ>cP"C*>f89^qT9;MĒp첵jw\٭Xy#x`t}o𴘎fT_ z`#zF`)^S٫w'Ϻp3}O^/wiV{m_:[0<wkuɮ&ϬQO xq:wj.jNI-x6z'vks0AzJO:hq =?~qS:Ya|(W>9pg뚣6zR?۴/UL8K~uU9é%Q l9gpnkv+SI6Þ]^Ug.CÈGpe2Guw &8\mF18˫qAOƛ8iqg9_{Y}bS{w`w g1:dnl}Qngt1:.y4wt3>lvz?ϕcO AĔ6Բ:_y̍[ʇ|WSt_䙋!R]b`}1תg3'F{f?`1ݜ'/'l}(>}[<7K1_Egov~׎@==77~zfucbqa%i0a˳w`X/y>87؜SaӟqegMdk<{;bw`w`w3%X\p.ֵڽσyZ.bO~sr4w_ ̽x~U-a\i}y`fpGjhŰ%x =7g K"\ T7t76YUx=P_\zð;^pՃao%~X9|9L{{Ƿ},vNQ}zdUm7`1|?n[~M[1FLMz^pŅ|qtRMlVlbpahY_ 0k+yC6v2F7 x:p~qF~=M˗VS _o_]L[!3[vfέqk/pq7WYm3I˾Ϳ;퀋\i7eH7nd]d]׋fh޲r:v61N;g:g`؝#/?<Æx˳@)<19]zha[t "tEWሇ:52<&͖af 5-OQe%z'_Ų%EYL}\~i:cZ7)7ܦ}YQaOO\7yeno47s9#䯟辔0篷_/.[pipqLlxu5'\MI5;F:)괞>sfxۗzުo[oՂ/8_)/>.7mivCN_iRo5>p}]dx܄ [\]Mwvv`ÚSkOןymv޼u-fWśfSKgńWi_ً7kĘg/׌g޸4>z^8u׺eNTK1bՀVg5wurrk||qwo̘p4 n<.ki?7Xb5۔ ~1o K]X‡MO9[\?[w OÄg[G~Xs>#{xs`\xyƳG_ɗTm_>Zb;⅝5WyGbӜ_|W8[[,*j!0 $? 3|I|x:^rOf[lu2epv.n]iR]@(AtHY F:Gya|p8>`}XWݐڲ;;;:5%ռka>˟n$!޵/n׈Z{Pu.s1zV<{uW9u4kx>wM&w5ǎC' c<3.^TCx%YU­YYǜ\k3&l ۵ &i\b̳ÕWD/'uh_.:8Ñju9PӜ\lF8s"׻bT)!~w8 >9z[qa瀹Jv+saű5ۚѽ݁݁ЁcjZ5h{W^Ml1+o .լ3;Tu-IiOb\fc/7j;/x󛫭s>Wi+ rL oqUa9['9[qt57>8ۄȡq+<63W~<9[U'u*N }u8ht{gk7/=K/fBQgK5a|Os6Wؕ}5;.U#< [<7laIw[~5t΋K53 6p` K%w,:#jcnqI}eڨUnSgb7 1}]׊W߄O4rM&c7諸|GԟxV'>Ly}Og?!]Ks~[q1Ķ7/ř>U1X;g!6O GEy5㳕/-yew`w`wt5Ѽ^wCC=9]&8jZI{)zN\ش|jNæ'7\C8c?ͧfk]l=Co^gLs/ęDfq6bzn|r!r10}gUo81z q[]?36?:O,\7P]K.Os # sI۳p<:9ίnW^<tI=s?͗˲l4^zY$l 7W=sǴufKOՑ c_]g r}+7 .G:5N–=hbs2у+G9>L_j<&'z㞶)Gu| 'q]7?[ǚo=Fp_;ql9b~nkN[ǜyCII\MXvs"X-az_~: 渲ĵjN'ɬvTj+|t˾λ;w8'3PŒo^4]|pH[푟=ñ5s6>ӟX5aVhyz1r7ĊcGv5'psѼp: ,Cca1} S aoXx|ĜmWb838&ǿ1WN_ ܫzwaԫΡxpDl>l87,s,g;g<|acqxhtLCNO^mO\{cN׏Nw-?K)gzx>XGKos/|kLגi#z߾4e]w|x):aÇu9o=HxpBރbz ~KlF>sSm3_yʝoSb1$'3oua˛7xpV\/9'<>aiZ|S|~>u0i\T>k뼚8L~sqڣbOW{q+_^1v;fr'zr). m`bI'a;ruNo_I/1U5T[~v>įN{wtR{xkZy bĥFG gS<{ݗG/ίn1a>X~uθ1^gkj ;c˞ /ZM "/kMG?IΧ|)1yi}zwvvvvvvvv|އuiatgC68BaG|jH.Tb⯎8I7 یw%{|8m,/ /njl-uԃU`L8h-Yi{6fli|yˍrK(|^ؕVΰS>'"ջư'괟4Ic=ų }bG2y暽!cp^8WW+:%]nN䨾pl}ƵqHǵL<0c/xR.鋷Xx|c'<8z៘?uZfN9VlyV\CrMkTk +KX< gjg\O_=M6fw`w`w`w`w`w`w`wmӁ|PC{zރJ+=IKX<=xd>W/rz[]bryŕF=<~C'>$s}ŗ-^~s19S bgqT)F?'򩳺ra/XZ\5}7S}lsKI~ۤZS 9?_/&nOGkZf=D/∧UKsMVLp_V埵ct5'䑃S l1:9 /O|~nĭ7s?1d'7{8}+]y-qvX~È|}èN\'`'qp޼Cϼم|qge#Ok\{'.uX5d5l/_ {mm7s"nz/?\Rn~c{aK/;@߼4[K$hiC gv0ld>[=X)g4anÆσ9{X5׼Zag~'~kRMl+8W/L_ [v65񕋮V싆r߼0xgXdSha-nJq0j/;_wz#`Ւǜ/Wv_9\b IR 9\t'KiYU-s_ӼɬuίjcSSt|8a{6T[|#/G311_Gw֧݁݁݁݁݁݁݁݁пYۃ;X2=/֜LNN_ÛPfn+d95Q-1gOpWyKՕ/̅gxO<y?/o)lc3'n2cٳjoߨ?ܼL[.}LpQ̌یU'Xx:og=źʋӜtN5򴎣Uy8z n'_TY{/3|8ݜ|8 [t4WsPlD7/a^5?+RQ?_yeruյov7㮭c+x aƃB^CJ_ËCA|hkvC-p\}#oM5bž4ۺ9c85lhW>cAWs,n^ڣ{DƬ'΍|ĵ'oWK\:.k@ǎfv}V lO?p^uNd+8Ixu*}zHuvw)XIQtjF7Z篿j'f!t~lW4D]ֱ-Fo0xi5;X9[f'ߌwػ/;s6H=H`CI lzH 7C>9hkaϏJ;4 >R<[19ԅsDW/!x撄_WOgzs>$)^\KÒũ00'r,^#;rar>L}.|t՗%Γ_FL(>]-}j/L}ھ樟c.<$ֳn8s7/laYi?84O7x܄/8W'|I8o~-}'~_~Zlkg>zZ U;|R-xUٌė5~i/1mO{Smϭè%C{8V]j.s<oH~`z4.<6/ͫmNhᡤy9qUugkZk>埵hoOW2oI)ÈnjkM77{>{do1S.{>1ָm [:Oˊb8gM4/1yˈ-/•K]g <Օs\H6^TCj|80SK;'&[]d]ƛ0`٦}򧳉5:ˠ/}IÜ}N&V^+fslkN0٬;G \iq3glě5̺wr<[ts` \[r|S3U_Ų%ŝ[jK[uqWe]uzx=`7?_zH 7&z\ɴWo´b MǙ݈W}F=_ꀃzﳓj4V9-_1i8=ferx~08K`_&Î3G O.cGvIVpr]1Wc؇?g=Xs)G&qZ_>rw]η;;;;;;;;;:zC|+{>  V S^1t?|"CHxo9·ivFXk\t׺=+z Q<%/4ubë<sKx׏5{A؋9 W/ꪶ4?_'|FYwIbK{+/1 nct5:6ƾȀ'/jV/%})~YZ~'s=kc~:k]SO0tM.<*s1i4p gpOrt;frIjL'O7HfDžzNmNSϯ9`K Dy>q˕'}ՏYqp.ZW3M>K5=)G/NX_S0lz+9Lk\S꫖XoNpL},nV9qSMkVl8H{a^GŮskHC᪍fˎۀ}.6uygba:F'tpR]|j/ K0쓻8im-=©jX9 Z9[7~sb̼a'Rni|q&s}^s12a[%\Tyzw<崞1j K'3O1lF<oGX_U5Xi׬/>Gz#F<޾G+/5%!q9L>&?K39ɴOe5We]uzX:Ea^ٍd^4.a]hX<}'Ǻ/7 LwO~O\iă a#/Lopx<Z>3D\[q&xeG*X\Z.sueo#Kb㚼W#WI Q9aVHur~='۸a7#ᇷ7^|V5<-̩c#vOxo+s6؎9Τ=Mܜ5~O})뇁GDZls 'F~Op:GΎ:peWMح[ΙotUSXyW97IㆧwިŨVu{G^#0Ba [~G8u͜|ըf6{I-F|x߹zO=x;_|8_s#{ F)~y 91CZ뛹A ,mxɪZ_~s|҆8>컇u`^t!9"hM7-OSdއ?z(q/f~=-1|a̻{bOzg/g#女_|X¦s>lb:T7L1pբ.>1;^lq=~z~;g0Ϟ-7^֍jenEH⣋ 9wqco7]^14klD|io+gi'oyi!Wqi_u傩47NVmbk|t̼XM[+]\0>{4ܼ_^(&> l=?|&&^yMxUG\)F.#<.?xX8)W:=Uq(.s9I~I|֫=9]܌9;gSCKMsnG韞I՜fC]&#ߌ-ga?[E3n=5ʧw {}Xc_]5[>Y[1OJF1SO<$۪<|zK&fi]L}>tixROrO|x[{O\ kT ?Y_{ ~)&&5-/s)}[SuM>[9>[xvw}wow`t @OࠛMi݁݁݁݁݁݁'t{/ݽ =Űmz{xuxs0 W_'bHks1MW3\&}ןFMLtqU[6_M>Rg/wo 36M^co_w>⪦_ >?=z^z4$bf]l_>9գzJftsǾlxpϣYt;Ol/qDSz'qp_E_tޟsbű4—}0ĮC9[t\"GUmĕfo+8c~Pm|!˾ι;0:Ѕ F.2ݐpøytsrbx=xi:ۇZ' IDAT>Fs܏rkTCk:~bFvCa\aSn.l!5M=={1G{lŧ{C9ΆX~@1>ՋF63k^n)y:jh#| cgSkr8̵}%k9 ژRml86ۓy{08։0l3Ęϸqa3?am>9+z&>9/LJ 6otq>{VyVO<|8}߿Gk1:ķ/54ڣ^ɇOL~凷i/aOOp]p5zß .kś}Yř%z"~k5Ɩp\Oܿ5#Lql+V?sS-Yν;;yB"betQEƅМby۰;;;;;;A@l 6e:g].̧ks9g~L/~g7?'I13{c'Af~Y89yىƵs<|0?͆oŗ|rg`|FA\2󰕋cL7Ǒ֪cڭC]1W9ZΞ_~6kyqt1L=c4`]o9[YWxYcItwN9?t_'h\ <(EKR3/Mdv<n<1/ŧOf/o60s4T9<}nD{{5aib-_9i⡫g7<6S}{w]4f8lg`>c9ua߇iwvvvvzx}{4kn-~haC^sj?C-}^Mp\, gSj5~p51Sl~ۚ_b$aiFxgZc1k~SEvN'%n+|tNŔ{o8 _c־H1eB{IfNxH^s/}Ʃo'|>`}m>3:+O}^k|qigMba·f>xЏЗ/^k89~l\̽6f$ri^t=0-]/Q3WOW]tl-~9y6T_ZO/Kbk.l8{hosSyónd/aUDlZrW[_F= /~1 |F\2[}l$;\>sdK?d1`U5OO: vL*v݁azw-pqwAvspqv3/q[t?݁݁݁݁݁݁'wݫE'g/yа&qgcI9{F>@W/lO>sOg @sOL\1mqfMaa|jr qLrڷyp^os{Kw|s~.ϼ9Ջ=5M-^?%5܇y9~?[̜zr|a's> l0:V1>b;64i|xW}έ>*'ch]m׃F6=K|4鸔fJa7w&98:WLsZ>'FU )۹cJa g9YMGyak0zֳbͧfG+>?MS}mMo}8=/ .,ovF>?Oiw>A=z&=Nq$ O vZ>'d'|%l֘({Jyd꫆(ŕ[V ֞3᳉c#q.O}ɜy?j7}#O5)yQo5:&l&Txrz1[ĕ 'V3L>5ӳbboekO|{zD|SV.wޗhyIqx9{}#amvR }q#IʝokJ~Z?rνLy9gݜ^h̺fM0~GuZ70|%aGbexyf+S{~>Q+z!gC^г/|/EN:.o?|9MLfLu=ZgohW~ą/nkv9{؞EY'z: oo5Fۿ[1__}گ[q_u??? [sw>:0/]l)xm>___zz{s\/] Em}tӟ9o۷}ۭex[1_U_u[qg}t/s|ɗ7C6{ݫ j6OO'=Lx0r믿OO>~~ x(Bv2\] jM0.8~JM}頋:K_ñ_vvvv^/NρO/r?>kk~?ǃKKɟ'{@Hπyòŕ?>mKL=p[O-y\Ŭ5Qq 7K$]]qV[y>(a:s5_\;-GuOܜKO6w^?p<_g=.f;n7⪞4|ceN|x8Vxf]5Sc~N>Q;[F5_k/zZg:x9 :aë#_ysvUI~1Dn>Յ'ag#Oʹ㮎b㙾>^a'j}Shē撷}U9Քf4.̟l˛LlS>91w9|>?s?wdR}7|98g>lN?C?t̿[N}|vu';]?ݶpW~G|<_b};k>? v%aHwNX؏Nۛ:}y~7Foo>q_?__? |~CAoq4GÓ˺ø \6ޘ_ j_7g3‡i s8$\eG_᫇!'U:ܣ5xT/<0`gK`> ju.Jx1ꉫvb89τ|ĺ9s ?;!z:]lϞ0!~2dmX㟭: ^k[dsZt5ЗFu1 OF_㖝ΎzW0~uNKw9:_W=)uq'n!^0 {9[5)zF¤9iը. Sj\aCW+Vܐ:|5ҽh /IĹrz)y ?@W|&ּRl<=u+^ a̳3| _boΟ֙<4_~XbxHu㫆aP?q>~秦Sj?A [[\.WWOxo~ro}'.>o%7A]f̻PHv1sMltl{_|^u?;ۥ/`{{ǿ僶/}Ȟ~ÿqO\~e5/u~v{Ũs>l g%f><9æ8YCC{eOqOiqpOG1'ŗ=[Ks>89Q _qlVt䅟\񫑤sa|7XFqONˉʼnc: ^C|ǭgY4_9=aOÈILO8k׺<{͜36_:n=K(5~Oir+U\lO\lb_,9Z†wqŬy٫]X03r+#ꥺgWGk`oV;aO_13 cTGkqf|'|u^<`7sߵ]g`/]_yӇ>?m_^;1Iz pğ=tAuoud7^{\?5S̋g}qߜO 8/!|Rչ 9 9xXWy&. w/4l磹ڬubOs=aڣx|Nn=c9nN3,z(ZaOp'a͋ZY.uo7Ӝ=.vBW\TArg=tեvv03s>wo6RŲw;Eu?\{#l]#V/1Uz8S<\K |Ɨ? ?-\ִ_, k$bv'u9m\O\ z>yfðj7-DI` rNg <'%p.^j|nZ9.tt?{~?{@🂐ze4yJ܇VKY%uk0^ }՚6mLFxR-4a/ _+bϦVQpfA:~CDxo^Mt}=ˏ^b&Ք>u4p;ngL4_if;8M۸3~Z$W?|p>c͋7>vCÕ}:<۹б(sŶ/śWk.~l\`o7zAI;ZKanb|)pO>5t^y7_?xVy̮~c2m]L\^T:Mf,,Q7_#;KUGZ|q0bi/*lJMf>6a  ۔p>٣^p&㬦0WurUXL_q|jno>.sW~&7~7OO9}ٗ]m_SyyvP^>K9<ΖC8\.]`\ 7&_:L5oZb1ؗFڍѼ :<>ϋ݁݁݁WZ79}c?cǿsvz[z|pBρC=$ @\= {^ X{i_>lpVxwYϞ_ŖӴs|3su%~TěW5z# uo] 4A8asq'i1sƋ/GՖ\nزOέ'_~u:|^kꕗ/^s2{~ ;}ȹ8:K3Wy']\ +y݊f5Ŵ6?3kols웹~{*nUOMađoap5'U. 7G0g|YWw]g-}/=y}(wÿ?x^w7WOOk<=}3yW \aNq9詞u.̾oΤٍo#kW޽͗|>;7)jvs?>k|wck~qNB) IDATd{w`w`w`w~v`>=~.~_L7ݽ56|oR澕d}+ }L Gp&lF,?Nj3:su4qZ;>5k{ya7!F|ͫۻqWqug.v׏pqg_k}5󔏟}$f['ٝzvqZ:'cڊt_gj9T/M:>lwQO)&;^aιտ3s/Q_,> Yԃb| \oӼ:S\0g~~Ts]{I S>vs _{{ʙSdՁZT4HOϓڟ k$)Iܼ%WL߁. Eg?.&s |MDM߅S-.tj3>?ߊQ%.]xܾ X[vvv{>]};Yږ_s{__;񎋿xӛt=/L1}>DGͻ["`=j Ss}rOyP Os]\W[˃Zܓqy z~`?,Q⪍W-Hu[q3ou|ΆOQc9ʟ17 .N\Fu[:7V ',$ܩ5 8sEc ;G"af}}t^ɍc?kx2yZ Tiba:o~IlŜs]K >X1w0;s4Ϻbq+:a '>lI; _-z҈Cqkp3GxXykgM#w\],lٚ!lomYzz}.ăSl&p|p\[u%. ?kmbp;NN1'LY?{ek_ڋwƒėo|ŏȏޞv1DW*AZ}V^d[֝֏tvqA]~7mR>74qbGWc\jsWωo5UWָwvvnu~?.[w?3?^|v /k=1}3jOD&U؁qo#i6#[?{8a+>Z\5=z΋+GN_x'6s~/njǡV;ت5.,,qja ۾9g0W5Q vIS-;<xè[^\o/):|wjt_zщgU"ho탯5eU? ɣ؉nA0~L|Cfb֫Sp嚘loxO49~ޡX'3g]}qӍxiD`ypnt\.4;;Yy8>Gxy1OaVuIyslkLx )Wyu:\ ?s6ρa؋oݕ:?'.{uLN'1-EW?\{Ck]L9Wgvsg>5^5se8<[{٘ϨqL?j'Ts^歋=W?VLkq宾𳦰tXs>1'l4z렚Sxڣ8T#W cM0ʟ}x╧kl1k`WǀmfdrO?k.7xpU'|XV 1aI\T:ĕ5_53qOqUOkuv\3kߺ~Nz_ZB ˾|(_Mۿ]&NZ} Є|;P؅X^.&~_G>r v_jtl jsU /#{x51Q.E֍ 8\ۖ݁݁݁݁ρX矮gSuo3mvov@o >^?k#Acݏa|jQy{L|x9Q9`Ϻ>e+Μ9/y=ӗrS 5 ~)(_f1qs +vJ5Ng]=r|∗oV<IJ:j7w璚 ZçٓZ/[ß]-s\<>Xrwtu+_#= &fֱփ~㒟gb7OaSl=ވCykZ^GR]W6gpaXǛ #jx8hf^cG]etʧF/B{.$o39nw;yb;1>a:q;i[UO{nzT?]@/bu5B'r79>_\i'I|q5w݁݁݁݁߁sρ^??{n' 0|`4K>5NG5f*gHgOON{< uXr'v߼SYKu6Lyh68 ^#Z`g/Ş^8Ɨ{ 3c 6~s^>?:nbh1x*~ƅg>sR LRngGy?g٬Ǽ7qbFqb̫L3x^ G\gp\ =!;L1 #Y_Cטr&.1'̧3[xiG613ދfsUU[Sbs֭7՞q9=\s'5'> 3̟گ<ϗ!W}W=t}};?.$]~=K掗AzE+j2iO~ Alg<ʮVxq0Z|w`w`w`wفG=~~//^ʯ㷆FOy/u2ܯܓIk1}P?7Z}s? 3zan~#ߔb㓃Lni_>x\ꉚ>kSG_7}o˃}e30Fv) ^hy1WQ-8gA "=sZmnώyyi|'`3_~[,m$j1C sLx5*/! ZWpOM~.V݆ye 8$xW#xc{;?]^O?8yq6:-NZ=0λ5/|QnZ<jPSF>w=bW)8.<\l8Sp_ql%|>4u9vqSo4??bCE[}X*qg3㗷Cts>f®^ 鼹Kybw]Gy=o˾???//}|aoև|ԅ jCB:a;Ps\ow1v]vCfAw~p'rP~_? ooztY'-|>{V"lbLs g6qa/8ٲN{mv\xݏq{uxX5}U=3-0\POtyj\圶u_6s}m_7sƇ`}9EL9ߺ7s+ysqGg G+:a.6*<11w\\lsSMְlrp^!<3ˁü-D9|9Y)YyZqf+^=|s.]hF>p[ƎUf.s}[], i=kT7_Ǐ#9ewWJ>]?'\S__:-Yu۾qlaۿ w~w^˿Kuo=N"ww_^w u16۹a9] :\\(}z ՙ݁݁݁Wfs*y>wo(ש_sFO/3e噾ٜd_7ptW=cN).Oοb|m]\?{Ǧc)':LiQ)}ΘbsXļ-&5瞧_?OV>>SRS~f:]'S5Zk/.gi+]\yvk۞?eC?Cx;OS?s>׽}{.~g8^_W| @sگʯ\|~CNko|}a?Wg$Z~7zO zئ}tuW;}fK~=y~R|Gxr:ڵb_@_??w=Ox:/[ͫxfj=zG?qG{g#=QzKz~O~\Y >5$L-8R@\s.we52l򔳿(Lc1 f\bO&i.G}o_zٳR=i>M}j[ co=d*O^g>j!CA? _'}2x{^W}3I|Ɣb 𤋩iW[3_p=Y a]C`7\==3m>{o4\>خO >Nr7S6xqw]5g_6;W?&ʧzEO~80[tR叇/?Mpe]LDnG5#o?y8sb=1Ϋbܶ~YsBI|7E>Z~wŏ^|~t=4/~]D[.??qE_EżN@jѿҗ}= _v1?}:_ɽ}߹8nn=tu(~>ķՁy|| ;sωg<߽k0s '=ϤǚðApiX/ j݈݈OKu؊Ώ3.j_jw_׽~701SMxV'<*ኅKznÔÚoú>9Co^E ՚qD\gY^|lx0>{Q ݗ&:pl?xfLφyk^`&y{8~:ڱg?͓/^[{zbd OOx i>bfmb2~k^L[O3f<}{ okߩ7M'd{ɨy2[ p_y~_}S B.}V\[: 1ȚgwEY7΁0Ωֹgo݁݁݁>Jpힻ9g ˮ{CA~5/5̚#X!1ptͫ(OvKKGI1M[|#5gy%]vx>|I{ot#34'9̫_?+|ڜu,.d-f>X~T4go)_;Yqf/yy$u ' a5 IX;RzRKEys~A7.砑?_#hxt+BHӺԳ0/5g975^|G{颧Tc*xK™Ǜ??a"Z-G`]xFO}UqƧ'lϧaLNϗ# ¨W>Uf}q6W 夛ɮj[-4Skē>@?O}UL8Z 5 Ö䳎kU;]|8':gTlpZ=F{Z>8qUWh>}Ρb6O¯55?aW/KLy# {s˞Ņo]8T?>bcvC7ܳĮ><8bqꕰۏ/|~sgpaM'7n; Wli~|kl#08YEM|8ًգb|j/f]臟:A'w'g5 IDAT>?7d_?ӿOOs@]y]6؆zw`w`w`w`w:YhއݫܧWݿ*%yWz?xyuf|>喯m8#'MC7|a虫*Dl0'w=g&i?@?p\N} ż\Wxorq'j&8Z%>k6[Y):w1Ͻ\W\|Zlb6#_ WaQOևg7_}6KVo渒O`·6Ӽ~Ŗ]=0[sypaiǥk'DfޚhxCx>uqfzf-8-]C:N95NO5aW)F}ƛÔ+_f6U; T\9mNOYgM^߾sorvWLA2~GmϛV\y7czOM}7'߉Ui'YEbj<]oϟ8E9A08gSm;;;;;pSz~em{U_{joXK|7k8?|뙌6s+|:ho1Q8ُ ? 69=/5nY▓/~\t6K'r5~AܬE<[|jm= w\0Ie_<%3v;n'V-O6ͫcT.>z:MLxٓ8!=k65}67:𳭱bpj܉= _7.x9Agoou/U`)gz:8ַb&Ƽ}Zc=zdGfr/vs8/N[YZͰQn}6vmOq?jfxNQnXVꋟ]N jG=p扗.ewݿN>_'6ىC/ {'w'xl[86j8G_IZzmus|~}}/qO3z2'^&{gKmWl8!U,;/hlxG0tf>y6V5A77|$NUwz4`hAqG>ǽX5#u[iÆO5HS^Hy}2cOWp^|t"ڲ͚e6q \L8>y3g=31nㇷoy%է8K2~͍]\c\-f>/k8'\jѓ:<48+&_|CUnZ O\p ba/˼zKW=qݻW{jm/?mU ޼"Gc-o|rfƙvz6memuqb:;ļu >js`^$9q;}YvvvvW,ӗO}1\Uza2S陧9_㱎E(?cyKf:cok_Nu.fkYrfO?b)X t1|qױ5\x1/ll1sO61S==sJgΰ٧}5,'eUc|+iOOnp9yy.fq;'.o9Z/mǏ@qx +[|4:\ŵjlZzw1.WP/sds$bK\×+twQxG.ty¬4նzwߎTϩT n?A'v;9}wX=[zw`w`w`w`wg]}Mxxx뫜z-<^ <4<;u9|b`u8/d18 ۜsq0Z٫8 [e医> @+7c_kx?Oo;cn{YzÓblprX64w{ ]=Aw?=;~9}xyB6<ֻOc<yIAߋB/(zV"<ִY|DW VOW )ΈCb˛?r͗R_*˒\JQ}owJW#N N?luk~{yͯWVxboG8ËW o9k"gu֚aڭ:#8öoOs^]o'=꯮[iŅ<WgyD*vNj!\^95n|g+>?_yf]j3[\1ዧo>e~9ć|GZzOs=%x\x†x|3s.y&|1cޞ%F|_ɋ_lϪۧ=ԣY/ATsi&faWKyث o6ώss+oN>krNUؽx;eċ{~GF/{ Srz˞ϵZ77 ]8Qɑ_/%/gx9zi7/-m'b~\ݽۈixO]כb{+F~c_S-EarWuy`g.<f0cڀ>:kĊIMqdm4,#|s=R]X=掕1}ޚ&_9׼k8Vzȗ:GMbU<0ruMY[W$},7Z.'^r5uM]bn_\2}#Θr؋XXzXM+=;mfˡ]!'ēG[cB %+_f-ٳa <\q~qgApXWW01w+k_} {欗_0>ɣk2YGk>|SXu_ x/kγY5syqƌXᗛn'9 Y:=Q0id{yyV[}\#lypώ[}<„j6}aޚrylm%lɏɓ6J>$^CcZkbpTm߄Ŭv}0py9-6il?`\gX6}&3u"ӚN|Z?Tl8V{˾>wBr_O{wvvvvvv>pa>M/ ּX/d%.l^v.6 O3h澽t~E=5笫RX^a>s^vW)}rZ|rT5N5fcM36;^$L:_>v/$pq6vslNWyWlsbo]b.n3|Ŵlť~zjO3O|tpy.fQO͉Ϻ.Wu}|3۬jo]>:9zb ~|}~&.̋u^swٻW=_/a'یpIuN?ܺ~TbيI9yu닽bOR}w{,kڜw}|w`w`w`w`w`w`w~h?=ѽ7zoMR`_/ab|Ǐ-yv8"Ol275Zpib>D u5[sah-7Fg W8O 6<†7vRZF/wMV~9c֌:N ;|1ɖ#8`1>|D[8"c/Uco9e >?\SLÉI䛸rV=~:_}Cy׀S=yeO|jSsMYKđ0T y+7[ZK|I{<?#ɗ=LJG>q>q##.ڰ·|;V|WuY9)Gz;g^w*|w}P+qN[<Bᅯi>+B!ڽyh6g8kދWL& L/N|j +X ?Zٚr3WN_rs~8~xA5/g8u'sO8G~1|nG{N_68l<|sQuy`yE9SU/gn$qѰuO5Ox:•kFzQ]9)^?03[_а8'i6IΗ#Cl fa.O1a{XubGL_qt,a_uϜrg05 sq嗛ujuw崎CF|x6֜/7 ;._Oo;,>b[U8Q.\>X=' SfMp9Xè5u>IMs~V\>ɩ'87O\~S}Yw{' ˽(~;;;;;;;pEu4Ԟ೦oǶpʦ^h\X0Vb׋<6"Q"^ Mr5|t`r: ]Xt|ϚZ<;N|9}ku)OZc}8uW5N1tds&p8DXY5)xi;)iqeoN׋pk|vNlٛrWq!4_ #~s<S=ƴU㴛Wt45n>/޺:agEdN|k _|s=GĔh/űT\drX>U̴=1}wWzwWgy;);:W^kW5YPW~T'_OYg$Poκ&^UމÙ\s?83c =Xu LǾUCϴf#̪T.qKjIҳ0{5yfL n[.FWֆT[=#IX 3S{.fݗVҽ>vV-)?}_Ly&789 /9{ WyR5Rt8-Ĵ?6cM_yOO~ѵKzO8yai݋X1mcrÐp,. #w'|)n 흶)b8YG?i_9;'_ 8I6珓Y/\a?S~dޜ~YXFN 0 OUK|b!:&ysL/=%?{gj;N6xfs\ڇ54oX!_~6bMڣ /^;~exۿ֍q|SW|wG`;qS}8iQ w)Ot|O}a uƳ=M|iuDVB59&yrXO9^jhv*m303 ^h{#o_t; J{g[cobsn/N 'Tg1兙s~0zWbV''|1}ZFl5X\׋q>e_qǑT\t )~q M:>i_pϜ8o5/.~Z.㜺W'{".:ߪ󯹬Iu21 GO=~bت%?)鼢aӰՒ=_y'_6(n>ezzfLꡍ0ic;ZWjo]-y=.pw}wP󦴖_ze ȍ1zIcxqqf_qqZOnG;;;v`>$׹0y]Wº&Ϳ^W^zY%k2~jxh~T]ޮQ|^W;,Lp0U !o+xC&W=8/IOg>gm] IDAT.g9ĭV~>^W]o=Eëo_Ps+\:|{T>>zgx0Q\Fq n1: >b mT9gE Og\oy޶_vw݁݁݁;@7t7nx,7/0`ċߌ݁݁݁'=ī뜹a/]<(fR1^LO,R8Gp\ݤXgoί|{R־hq5=q°5 EW,Tww\7/<9~ҋ+,8|}qP`ըgY9>su#%ibP] xH}ˇ}4_s1g޾8 >u5?^(vrg|UOs~U>Yŗ/2k/wڼ^_>15M[_Wa/O|cdΎ_l8I6\020pm^`÷?/bՄX=Q?_baxQ]aqsjmmM).zJv8uM%/nv\t}*W {ďj7k<q[ܿt27'7{lnp8l;;;wkީ}t-ya 8̸0*f4Ͼ"{X5w^rW3{/`qR^ g^奫ͳ[Ϻ7Y~K/'L/սX׏34 Md[k$,i`|v,.T;3&>rg=SbbЍz]Rly1q۾glS;|e㞶z?Q|oMW׺ftWkx}M:4Z.g_/b87oN Q0gך] ]ʑoj 8 .W:L9˄}L͟o[w>-tO`NqLۘ/n;w ÅhbpC&nNdG؍\p#7zw`w`wq;Zٵn^\#z/'{qMM{8 z;S.xخ08jCî{7X:>_a&ָĵU+/M>bQ8ez꛼Y k1dgW 傃/Fm?ibHظ[]4ɏ7.vxCl وx9_ O*hWAt#xbIxױ 'o7gp: g^r{.Fsۀl v~~+#f[xixyؚ>=c6N|oq+ww̲->t x:H{h-=/W=aeϨn6s#ᷖxa`MlNJ>m>y`CR- ޚk6ۓ#WfIu6{Z}FZm?GXD ?y{=.Ob˾ι;;;ppMfJ|nl ×m"6[7[<@ˀkaMҽ<7zd1l]z z?ڋxqUoy^$nqqW-;~_F.9ܻX4XîTYlZ 3^n<&ap qz[mY-N /7kZW:{g+/'7=_1Vs?|.oؙW⦟Z} c&=QSg#xV]M+&-y̫:eo^/ڇq6:NjS\Ǡz`kv<>pa\/ a/qqaՏcx xD^I5=wN\}U׹A'՘CjY.xdk)W9pN^qdô뻔e]vt3FFow2՗}h/Vw݁݁݁[\=_L3k95W=#Nxv60pXbZQ#zzMW\6yߪ9 Q s<0k?Krp Fe/ml lGÓWu<ڼx{ 9 +ěÇ;{C|`'0ٍ.uxal:ԓ}wLc7Uk_v|kJuL.s`ͧQ>q|q䋫u_ ͹ڍrU gBnP`g-xkv1.gj̆Ūy55U ۴=3knN7JǙ..sb܀h%mx?~knT~ ʹߞ%M=vnnٲ;;;tFe׻B/kleOՈ5X9NWcinȅO<7˼LtbӽC\Rote{8|zpM>jk²۟^䧛k_ g?_ȭ㇇M~3zo-nO:qos1qNn6\ՃWMl}¶_\r!A[S?#Wy-\tÙ'te3ybM+G\iv|W_P>せ.|IxdA ]bLՓ+_HLC^ 1źĚW\&Lu1ӼGbI/jG !wxp0|}V᫁.gY;Fl="F]4^7䌃ޔ~Uゟ/[bX>Eaɩ:f\(=s< wSeMuvܳnxnVn&}=`É-uӴ6'0OXḊzs׵.ukÄ%x>S׮l򙓮?Zp R<3{~LOw_1'4 ~u$K=xus_W} kp򆇩lr=U.9S-t9|qy >fkqV:֞ᇕ%Q].8"aUV_ńy5KV4YsN UfNySUK\ixƌ?7/O0Mc'Suą>a 5g3g}u|M/>v8miWCęYE||ú|Ո#70qOK蘉V5|ױ+\9<;.E3X' fSGrlGFkÖlaWrNƙo|-&qyt#\XW|wWywvvntnnk{X Gz80few`w`wiΙ7ֽ;e~bV3ק^`N`[Y/1FsǗŧ\1t1p8μ쭋)jW#StS/5)Q#~%pٜL ,'q8~)GgO,'qkM쌍 X~۾n9O]aЄOgjg-cOmnTy9r)Փ/ǩ<嬦)OrÉ+vb4_uڟUe_\mIyyZc˼&nbgjG[;Ŋ#Jt|ŴN?1X1sv7soM̜qzwvvvnP_-~͟^,a ޲;;;u t9ڵ'vMotM#}ba)q'ag+|ꪖ)8x#؍jIqۛ9g/*_5fuۿo_FbG|aͧįqҤ gG=lŋ3!xØo~lgÆsȖz*=.p9F9kGL<.y;_ M%՞gaG{7lw^XMUoC'0[QI5 x9Wתx/юCN|r'\|8y>OFǹx.Z8ksm.I_ގn?Q'ujc3qYf#7c& >sL`]⊝se]t}tw7ypn=u7[N;;;pcp-t}#u]+y1iQ֚N^aNخ|˼|a޾h{->SApf ~G_AP">դF|0K,b>sb}MG5=k]-TËV=KujCpiNJ|üǼZdSOr?c?q>]{QgrU?I853k9XE\36yg|>Z'ߔ7cճZ^W]šʫ/kNh/9\\hicze*c !| {rg8\;=wժU{sqıމ-cc!N:okgvbMpKɣ}U9|Zo,naݱSq4i&|d7|5~͸缯ðQ;/|k]IOL}27^Sþ}:p:p:stۋ1~gc/j/tttw>IB1_u7C}~a -NʇKA"Ŕ2KqpڣFyU7Onx UsxgFXo̮È#{y \y{ǰ/wv<;§ߚتƱǗ-μGHT_4[Ǿszcn5k_ W` LRm)?{ Ztܫ޹XD.]sՓ:a[0 [u7aW9u}lί~m&; .>uЛ'ՎZҋ}qVܿoyvğ|:ʯ(pw'\\yU/ ӁӁӁ@7I9gž Gnf|vV<{l>7~9ʃG<XV Vx䅯[rK4s:nDm7~Ӽu8Qk1O67^RNI9^QOF,G#kOx|ļcIk^ťxSͫ' WL5O >Gw7,a/3i>p.*8x{2x${\ڿzxZl!{/8q;~bWV|%ru^<_9#\[Sz'ObO7zz;]-|:y{-/}W嶮5U;ߜͳ&xs)YVOdן761z*? xa'8qo,|gy"OZ˵yٞ^Sþ}:p:p:BpqrAµ@xY8Hufwq dӁӁӁs2o}0>ŰlM`l>W6պin*PqWC9‹n>.9_b&G76UMWa :՟f_Nxk~SEA® qwS+@v,_uG3~s+bs%|8k5חba]#ϼў75yc딋o~٬;arSXq UY\8-%_y˷uyԇ䯎s7-F{9Æ-7.{m^6}/q|cS/Lv6Ws C~&.诹e}vnw\MT\fӗ F8O_2ś^sr7aKw;88xtqrH<䣻w}m]g~:p:p:]vϺ8}&Qw=&p}=`2wMPX[g0>ݔgJy5lFpt~nq$ߵxzn^.뻔?^sՓ=аQD-|Ɯt1a-`wg}j7[t3uxGbpWśWCK_~9rr}?[^p !X>kN;~œg]~^۷cþﺣttt= ?)!.F(8d] Y\|E=)ttt[uϾ mn8l3/>e'0O]a>v\=| _z>{L~W^{Wk\z_nnr7v-VkwUS1{ ³%xaڋOm_s<~\<8 ߟj~< \IvbW<[}/ |asW |,b:|Gٱ__H.9Ӛ}ZjV^ǥOq%϶uVO\l3˅uJY yamȣ689:x_l_las>Stŕ_.KDŽ}_b2n6Ꭹ&~ ޤV|nr|}4>݃ 8_\q7sꡭ=+Òn9]>∺Ŕö,?_{ࣗx65u.w/aX`~ᕯS8ժEng¾>|zNѻwuщbvoTZ: u_ jSx`h)lsܛ}.8|㻒^,9xts13 -s5}w\mpߨvXkURn.> sҼ,ex~RF\VvE˅y׍9ӁӁӁ?ܿ[{cM{1D_}\|bH:q IDATow[]7k5N5tW{{c']|ŰY=~.?֤z9e&9-nf',rX֕Cv k EpWg{e_V678oMֺ3bW5}_c'4`˞|qZq6Giڼl኏olp$:٘R?=^d[=bثgǟ^{cq\Lgc%3\/ ]Hu%(lŊ>NNN^2F["{XT_67@q$ji=zkֻ/kj7b<{鎟|ԁ.w!3\vtso~]G:_>+7.d.vo$LN\|b{me zp?k8~= A lg^t\Ųwe&|y].$COY|8`ۣy8{/߱5 31\;[~{q&qV^0$y?NNNޓJ ONN~ l n̄ ö75l^^͌n>.8x{>ʷ|/vq^;oѧ2Oo~s~ܼ@o_YQ[=^7\Y.z0$~\o>v|__:]ao9`p흿<8>x7Z>`+NDck+G_-a"t+~Ye?q'ǰzTn1ʼn5/ZNqapo77XCjr[շ{߉piM5 o啷ubXZLq?x<8rg3'q7/R}_mox"F<1Plۇu4a5/W1|$N׀1Ċ3]a^q{>ُ0G4Q>Ŏ#5e[M#6Cg~pG](n6Lt1la;Wq*5y]?9ONN^.@{SN|.dIa[}:p:p:C~B7>aɱՇ~эx3FpWnq؋nnh'.FR.|pîja];{#]_$zMڪ=jr<Vb7x9z@GtՂð ]r}9:1a:,|dxٛ[q̞^ ~vx=.lƘ?ɿi.Gy=gs'Ɯ^I"Z]a{ߕ-ڍgc/=qïq~tUs o֍nNF%=ԇlg#|uϼ!.q9^66#'_m\nᶯqfGtXQ\y꧵Ipq.yU`5ݼq8/1#٫bx}Qt/6\ö#nv*s.ߞyb]LuGl[9ֶ|bܹ8k>_.W|%ٟ_˽\lpizGח47/6]=org|fs/~R;~R\\Ȉ/w"v.dwu|v:p:p:}~>0*{}&f_ 2nxO_ϯđ~ g'~6GU Έ_M`/qĴsR0bZ{ y?ϹlIԙ|^'VihǴ"ڪX/7jQ|#,i]7+HǺ5\Z#mj/'-o \7+\;_p;N9Gw/xm=SG1}hﴞeydyiw|;Vxl0MLRՐC_O\p4ز9\\ ?]3ZňW/[\bWšQÑun^xLձ}4Kqs>5<{ܧUnEL7Rn 7p@&2>楛tZn^ƍ<4O~|7n>X]%/\w*F]40t}h8 "6Np/u5b`g]ʫzIi }S#QOY/ovRltx˛}{%T1<\?qG8{fgf˶_a7_GvtCLAoݾ_rU?'Յq9^%nk|tb?q_] }{Y)u=iͶ͜K?/>Z04.*۽K䪖\/s6Jg-=i<;FwA>oiNC%LVZ_M Wtb/?Mqtos\\{7w>o|xW^swο9(םϚ? OɷyWµr<ƶ_y~z|]Kא[5kFrROӁӁӁӁӁӁӁӁ{H拻jpSUM_zuS!nF쐿/b{0gy/d]?g}=O_u_mڃ5)|e >aՌ}@'r4lDGZv^84gO`Q7-jS,xF>kbmlc";exz)C3ru|8ZeoY5|"Q\[wWqe7''soc^|W g8;7wˋ ~sxř~9%㣞zDaտ~ c0jؚċݱNj}e㧍#bԲu~$M5^=qY7alUj{!:.?i/0-Xy oT^/3lzzM'kVrrr˺ݴtsэI7Rbpc5b"wc#s%Z<i[9t^U: }}/qV#<[?ްo6p lƺ:˰'}io8%FH5uӍIk"6_|tjaZ'NY^Ͱ7s^f^aPF6iDMDʛfs-lן{W}]vp|/;Mntl/m*\72}ɧIp(I]Mu4~I7`s.o\h#\W'j rA/n}f٪1N">a˾r0=p 峆inõ8H)|Wô;~~ݭ9'ݞoZy(7}&z8]>G-޼sILLj=?;Q,Ƽa d۽ks׏|r/^OmI8I1b^((6&r޺cw obl{t:X$];ΝGxwᛋ[~Djt1}[MO/W󻎧akt<8888888xo;E~(q3@igt$p\Ƨ l=RX>Ѹ syI{w-WvN˾l\yn]I̶Ǫz6Cq4l!y=ؽ}?H^cko)'Z\}~W,\wf`6?7b^ʟin_4~c9p%/WOӁӁӁӁӁӁӁӁӁ9ps w3AAM ?5'X)s<=sozA?f| =cO9J?wU:Z{elA}sr#bcqrzZy`9gNi?~8<[mbi<>{pX\6_l5n.sj3pbg'UlZ_.1_1.F/WrYťN OWXgb(<~kg5_|=k5,>Z5Y|4BQ8ڃ{ۏs\,|.r_n=}ƅbŽ}ŋk훭y>6q+;'7MsmwNf+Fq?/5run\R1=$)7jெkk8Op',\&x.3Ыִ}Ow\~~vq酿xdqݫu#l6wG?µte3}=Luωs_Rbċf7vV7bew[/f? y[/>g9 fGNxњoaUR?i?K;~av7,=dnލC7n\>PǏ/Y_SnuCF1~aN_axZjxۻ8yqKa֋[<JuÏ$Tc{#y0*>~B)&l}6v_wW6dEu:`W'\+0O߹KUOiXž5x OX} 6cyp[סl G`˷y6_kͨ_ħ<&,yuKÉWv珯g]'qY ި0zCUGy̫zC%׸/ۗ[70np=$A,nT(?,.Ⱥ MoY?O=N9=S okdN5>,M #G"ng'xaSkT`idQ$o_jG-yl\j'nb;/_ O|W5z;cZW6ೱ%_kMedu!Ҟh/⻂y)woCpEf81b +u7bq8߻z IDAT֌l–/\d18 x٫;'{w~ {y M?)ONNNNNNNe/n$"&!y<'9™Y(7!n2pcxdTjt%|4nChaٌKiMw bV*[;q b El˝<ꡋ奍oH4_aWg<|lzGz-un|v0'X$ltfk/j椼wX5.fbi]lb~`Npb,Qg嘗iw9N8iOgai#4߽"/*˹=bWs{XQ޻k6W4GOW6K [0d֋cI$|[c㻒98888888w7_ֻYKCF3x QpAypt4|^v9V֍z/;Voz&z)o: %^ |l&__<|{U?ۣu{nW<i0~0מin S~.|_8IGc:#nWW'pZNu80#)|Tmg>3'8~v_qw&6`Gx}[ 񄑃x R}Ʌ=K_E_!Iy:p:p:p:p:p:p:p:p:>u/j/n,|i;qZMބp#'7? xqƒ lwb_t7v6nUGwWO/qQcqs{bNũ-ޝǟ(>| O>Cm =ۃ+յxptfFsxy6Wy↫&ڀ[s!n|1nskvyZ78bZ-Ɗo\E|hnQl흝zqa+rVj+f[x(X _ěrecamoTGc<^o6x'>H~zBY|y¥aIu';q[+Ťշ_>tRoU/]æn/l7_>MQ}/w>^'{ف́BoF`7F rKp3M 7$<,1{km,8ps'8Uqm kNf{S|}/Zwϭ7N5лXBWCGx>8Olr6"h?x.GqaԳghvUtns5/^0l+lg} ΋t5Y/Wji0lq_}H;iޚ׼tcq+aي]ͫw_\>k86y;uxY`-ܮw.9[iᲫӀ5Z[P _UG~ls:__Zߔ[}нV~y?NNNNNNNNo`1ž/~]/_v79vS7B~yE^k^|tΟyyJ "_Oe~B҉>kOꖇtoNўMMb?«GIpbͷ̦vz.ßI&85#_"WI9a[ȇ|irpk3Ƿ5t"';/~qsbLv1jhb]`77Ia?ͮlşMx/^J6=?zv=$?SQ[Ҟٶ&8y>;X_/od%N^sck|}2/5ܷV[v !NVʙ|Jv_ۻuq0a<^ٲkGp?edx68^}!^ÿM;zs$k [G8y©W}Zׇb =ZÔ环jQ}k gKl)&\qηٖc;+M7z'~Tދ+̷FlM1qn18ԧVO9Sbo:[),dhpqf%|f{i}tOӁӁwցu?YQtttt{ՁG76׌env ڃnDŸ~=ۇn_wtW7bxeg0p ^ߟzWmqWn{?롟ByC{ 6uɉY2:|Aw퇏,V|WsK^'<闘ʥĺ\8 _]NjX|6pg'5Ig8\v_倥gm:wث8!;~6yoZL6pq9k'ʻxߺzvq7׳b`kM7ʧ?ul+le3S$y;ִ-6[iq{}ÇOťV#)g{EŊakףնcXA{Qn\(W>Cl|֤Op4of-|=_sI>Tg~뵙Wcmw^˙y?NNY$yoRl|wqp#<נ0nnZ;1v"<-ū1>FM?Wxꐫ9[i^9z0E'|0Eǧ9UW ^N9G 6_=վpїcךzͰ9xhbpDcXi.Gd/u>1SuӞ[_H_dO/wm\;_~n.v>U\|g5٫|u Z[WÞ:<ݜ5<{mO7ۗw6їz_1o , Id.r9lna:qqex W7Vˣ8ag_Av_M 7!p|5圗jk^|sk^寮roǼzcs~<l櫯{ܙ>dYGuVm?mvlics9< ]:>kǼ~Od7r?4Ʒcޞwr}#is89cNۓz~%aPq\Oz/az߾ Yy 6{4pՋድ6WXo8>˝=~k=ꮷr5쏭~eq"xhn,o7T=H{ h7%Ky\?Ԁ]\`?'y8^O/rА !Oǔ_t啳6Zoqg9\aݜۓy!@g׷lxŕEmD:KNn0o;`F{s3Kwԃp3o_/hXTmT۰xew|[Wk6,ktjdoN<ըnc+[aa5zG(gk>9bUlxŒ8ŧ_yUC:H{g=kPsk}2.yͼ'aNbpYc;r:m:p? =Oڼu}:p:p:p:@n( N5uw6sv>X5VgxF/wTw89qlb;~-9~{Ư~|aԃimNoWy[G5880C-qWy~E}[LnNq/I|'t\CW}^ls{z8n0D^8ck[6'\0oT_7}%>z7[Zka>arl>vͱxolf#7?fmk({}Q7,ݜ=e't{2;_YlmVW}tþ;s)}0rF;|Ya7K]oо'|rUoFi?>ؑӁoӁ.4a7_9υ'?MfEϯ o u;͏t 1lkN7?ukAb <]1qVyZlT96R XcKpmҹjZ۟~X6g9:8q儏bH#.|!0dklM+b;mo"lΖ=O,X#<>|1 "ws\Ou^tg|wwyWQ=\ѷI{gdZ_Cvxć7H{ 7QKy?X9 [ރ.^Skvv6;V ҉$5$7k'rzN{ޫr:v`ϱSsՇtb:ẐsK=Tߣ=Mc6_ט{εglD0ks 9?zX0wЎsϗV>0\ ,^uN-VW.;]M|oݾqsUNێ|8waժ0F{iG+MFq&PwQMpc]_nkER]7mڽ~p[u#{}-.V%'wځN% 6so.<;Ii_d|C`>WUyG|pk .{\ttttف]/|qZrct ac]{Q1tb.w1xvjG|nE9Wga m 0m4 VOM8M7㈗߼|~vh3?~R N spltNjoSG:uQwqi_ޯl&շ{F߸ت%]%Ɨ}a}_![W|\4<3l!ScuXLtJG\W2S+^#a sgrJq6o5g㋫FN i2>U>b¬Wa {=\lzP[nkaKvr9:Isuυ֟bdt_7?ϯ//|ۿ5W`6oC~qC9W G__5: лqy xT7u@{Mp;zZ/k14Nuq}#S xr^8]<3/5Я~|`__W %>=P$0xkzb +֞!{ ^p+yV<4n[Xs~x5Z-.P?<S~sˆ T?;)6j%ۃj`llp` ߜ IDATunU8Z>񸊡WxY~s6k[<)G87\ kVxO;iб{W ;Oz/d?9>C>"(?lms:/] <\++\vCpκܰ vzzYyk1\>4,/o}Zo/~9^/Ήۛ$חD_}J|N/EN~NDa䋘eOL;=OyDaw;GIac#|;ӁӁӁӁ\#\SȺ/{=p}.κѵ JKl)|lc>??>/߾q:z >~HʱK^>4U'lWx8ĕ.֙n!iDžU3巾cOۏ5oN2o\I8:.AGXDN>m-oS|9̓zFճ5g/ 'N>W_wxOY7\3՗^yÔӜĹ|0D-daKc/૥~ǵVl~9q'G,?f egx xxu_6GdW}sW>nk.xz u|NOXvsה/׬N;'V'tO6'.&&/ \_<(aS ,;/{ăח{ t^N~ty(<_sy\u1Ӿغr=l?nzB߅MLkZ\1i#Dk?tm0qSE%+ϵUnN\K9qvne{gq{)[ƕx\t{Vtqx˹1µ{skr->Lwf;/h+uZdx7usUK--cZ ^w6{Z,.k﫸lIul0kðoٖ_=c[j>[.5g) F>:we5y5 ^&hڒ}nml,i<0ٿ<G5ķ1b/{r.Ή؇N^L|? ׃;/.,__???})wӁ0ft^?Sys27,z>r:p:p:p:Ձn&2uFSfK<\⚃ ˃=N~Qps?ZѺX+n~y_^X՞? =[~-:krSxp&Q<>)WG[_6'4}^`Usǔ&q泿bg(.7?Ɏ.;³Iy`􌨳=S_ sgzqƿcīZiX^pria:ICت3~fŨY|WF[W{=6̫A/7aӼzyëtGw;l|wL.{z /&C<-nGS Fbx N{cSy=ꇋ~z/O[8&ͫm0x8z ưOC8< ,;Iymbx_'Lq/p}yJWi{῟| ׿=??|يD~J} g!!?e8/cCIsp^;=v_uc /.XbVf}/ONNN~ek1ر0]|5as݁]n}8\|bMMXO/a]z;s8Iu?Yr ޸Mq͵<ҋ톖(V;n9S}LJ~Hؼb+>~z)u5fqzL9NlbQ^8n6xH^i?夝D,{1$^\p4∯i0l;_.WG=e{k+,L\ze{Ssjr [5g_{;{k\[L5/?O:ڞ6#=q>iӱoxcxT |w1\wr^i4ڭں5Rcxb;e] yN鯟՘'m79+Z;a6Z7妏߸g)3?}-.|k,F|ߜ>xէ5tے>gU89g䚈V|Lm^#zcܽ7!^1g\v ?"cͺ_ 5?f|lG-\z°Ks$L۵ɇQ쎁q4bX.ˍ..dȇk~[sŦks~r>. ^Z>W}0-4Lpn89`|]ydtNh\]n켉s毨] E>pIv{ \ tvP$T0k}־'|2^ٿ~F[****p@-K7r*Awchl &6W4[Z{qCℇu#8XX.9ʉs&7HL:f#iD8ˑ7qMcpӮS{9^j=wUIi#'Lmk|[Z1m+?tuџ1o})NcW78a1]mC#Ս306گ[*N95÷n旍{sIF!/}~̌gT~3~;y୮8g_.7r٫1<ŠQ?K"tkî_8`4N_x^k{!3N_|̿MNorK&lՀMa̵^?@9799-=M)fcqS={O?bKd=+l7|Ljv;]'"A{S#ox Y"WnOڷ~j컚>۾9;Ytyrl 8/8y>r:Ǽ9 y9J,|\Oucֵo %\w?)|"`Ac|Œ8<|z9?`ŐG5)V C\058۶2/nxbgS,RmMF{)_4=q1Zg>0cօg<^Z4|j˦پqmSo*fs{͇MۂͼA}c\ai6dbj/S>8qi$|DjoM۸/ş>g4Or0d7q+NV'[}O8s?s>39xcΗ-+okʥ6/vuӟ>[yɿ}N7jI6z=~;gZ NHlS& Fa9iͱ˪сy7nR4c-,~\tۊWVVV؟.r^ ?9s<τ漥?luSBùWW&IFc[/; o[Nt2o.榞k ;ˌoƩ_>q67ƚi|q31N&q0&>u/Ә:f Sb<Ln\O&saf0qG6Uj>}~k/bSq{dU`U`U`U[pA灚wծ;mn]}Ӝ_ cչo sOiɷ.8cf8`՗/y[k<1b4qZ'>>N[z+g9Z|d9?L6\񛗇Alj^f`zA 1 6 8զ)g>Ǥӟc\-GnrQ1s֡o^M 5eӯVl5k=ոyslZFM_̋x۔yu?.9UCqk(.^89g'.ş >K`:k}|aq>l>7K/<[Sx9 F?i~dk㏚+厧myX/&K6>,?^pG˧3ױ}ƘE,\|h_k.c} O5+:9O˓^n7?/qxՊ7gȷ{Fr튧)ayV*Ƕzogy.@sM`N;K9:# 7|馛-U+@9~jUvfԊy9_zU`U`U`U_.VA7[<<]316&!p]C96]7݄z@}l;y&>;Ʈ=>&[7p~7krƙMKnA׌:o?=lqVxV'Zf<}3/ ]36g]4OVxSNlb-|{8%~l$X]7K끇&~|38A34S.^yfb_ s#ĴfaevڰAyjlb-Y*0S}'^M߾׾ݾjo?͗u *йbk1:L\Ot_|zX۹n\k΃|Z{*9anq! _(}٪9}m9m;󹔔w!:&K|$\c:.c21Įہ~_:4\W|_ -WZk}Z\9޶iޯ|mKb_297f-IGR4=xY^o.7򓋱V^+챘`\ヿ#yw%JvCّq9!Ĵ6v.4oN\ \DdUTAU6Z#]uR}6>}mb +y9a>4p^p~ 4k"G7}81G;?95ל?Zu.u]r=C㟝ua׍|Ha>q8l>8~lr5\#J[m 5Oil8³km/Lk!eq—fӌFx"Ū6qpijָ:̵4)gv1?eu _e`mMt6|Zz`ONc_ |ɽ3gX/.B mp:ߚqZSxW{|OĸXq9q'{cX~S7G7mvMxbonadȷmÆv'=s,[߾Ɩ~6ӦR<ܓƶ[l3_X7K4V뜼uOe\~sš=ת]J_8a΅WM1/p$o0|K?|-)WnO:X^~G."ľ: OǤcs˶****pϪnR7cy%y߹g88d-=pk/\A~uˍ1p8ú:G>!K`e??s<׀γrLK5h&u#4?uj5)Λ@m'\l̳+ { ^35V?vr:c9v:j1M5Wk4WXҚ/rNkϬm۶U|ba;qk?{|⇓׬8ļ>?O6Z@kӷ5ϧg r7}X}SG&^.r5&mccض{9yM|`pnb3{dqLˑnZ>?|Ǥ8Ŷ^2m,V9b.Mˆvi/F{x9v6GyU3}/^p'ܘ |)r[܎!|sgQۅ4'b'a7C=.Z5KVe>j?-9_^ӦdU`U`U`U`Uź"L3wu=1A<&.>+VOׅլӧ~piv++?&=y.|5<;'C 1OOL9<5򉋞6&w5 KqXl2֯boI҄nm߃=o97;:'1_`Itkgsn߅ZyXln9' O'MG-r(x̗O䅍I, G#}̷afӧ~Lsb=L|{_YO'1||{♼g ӦϞͼc\x7t‡Qٵ{Xնy0_qZZWxvJ'D'\uȐn;j;1.mo{>-j IDATۅOo rN^a`i2ٿ|vWVVV9uþ7׍FV=קY{zÊ34ظ?py_>݆yP :ݵʙ?G>3&(/9Yk?Mi+mN\Nh6xqs|!]mqekF)oZOs!|[Ԁ]>&,y#x3 GWCquZ|3nN(> \Xq9ö [ ōAm/80·d|V_#iX.ኧoXa3/?` ·oŤ:7CQk^nՓ}bʋV3>tbWs6x9X3=kYqL6s$,xĘ85mjl_%`Y~5a/`HjT\oy-}=#yzwտʱَ cG&tAH:yӰ,SNB>>篽.TQprլ}G牂sZǹ'X%84}9u zHO\  r1WQњq8чRk#|I|qS31O̿V}MbbGn.,mLW|jVGj7Ŝ?^SɩVfl|[v[xIYrN'V}Z\I6z(86>}m_|$mMZ_63_1gi9<þi9&H!3|޽Tj:ޠq喆_Wgi|e_my%lhqۇ#ĜzUtk>\lt(1;£ſ9}ai4OiGF.f-x2y7G|I9 ń'>.o~o^͕[~cS뇍6KWC9k;9ėm=|f$p6g <1cXy3Zﴇ}7t=yve___e_xS 8}6#Sq[c8NUz׻{ۣ×o{_x?skz}mqn.t|%~WuQWV}}|'=,y(NzZUUUU[*p7woׁ>5_5]]:}eqqw;7trvNy#`l9<ݜ69}μ:ySD>UD|p#\ZM~<?gǼk8ծ]8jpgx}לxOru)9׷>c.osbiW=4봏]ဥ56rNfK<9CSbVU_-ӳϏ}j3>mӚ`kytHU`Y ;y_k~wc_WK??;<>q6q?S? >E=y__9<9ϙ{\_mN#i慗>я~;og ]{#Tgz0vl~Plo%עw=Q7zYXXX˿|x[zx;y[Oh~%_n''??{X=%/9s2~闶ki?w|ysݍsq:L:یatS0za8&Gav\ϘG\׆~Os!tkA65GV灕`ޙ_Nךz8y w\Z X.)~ra˕.v|0jkml8" vf#Bg˘O/|pe#<2889ԟFzk1ߚbჇkqaMo\u$^}T ZZkHMgS?yf_aI _M-^>Jk.:ɿ Vٚ F~x4b^W-Ot boO8Ô>1]J{_9֪ϟXGS̟-n[WSnk;`lZþ=s@Ry_xӞm//>$O#h;/muQC:vRo,ԁ9 vpd eUU~?ȶ_TN_yG6hgd_**pϫ\خ}~ް}k\>&/߿M=q;|wvo~??ypx)qz'f8賹&vrqb_c\5$7ߵnr`ʃn5:ׁݐXo /OA|8ƋG?N$s?&O_M(&-0lx+O͛8sadڍP<3O̺卯g?lsrϷ2˅gkn>⪋9ƽo8i{jc [ >.ۋ{p^ʓ.g9g7N7lͱO֪?f7&FXn~_l%)wo>=s9;1խxicx}Z ۼq\8&k6}/Ix铰7KJx|M'pɆo9qr/4l[mS8l SkxW9FqywUocW|Wl~>iw9sAkă ;/V>-($~/>O6E5XXXVjwtQ_j]0t '~ oUC'<"s\ޓ图零3ׁoE/zv}v[S+׋OxozӛOU/qh]~~OO/ܨ\\[%'|2<ϸp#Z7#S2'\;Qūӆ։ 97gp뺖M؊c584jCkh.8i85647.0o5^|ԣ}y~ڲ?|jӾG#S [y_aگ6rol>&_’IZWq φʷ`cszN<2N9?S gOcHq846ĬYWbCogݍ5>0 x'L1r5^XMX׶[_Md/&O^e&qnQb_9rHW۶[= /YO}>gE{Zʭ QtJp򕯼߹A;e/۾߽/~ƴco_.Ek****pمG'Fv .:v r}5^XkU)+}Aq&tOO^җ>\濏a^@n({w,x)88.׷6׫8cLz̕CsnbIbs,rwUk͵شe75*}8HuMrQ#>%1ay[;Lڮ様5笕Z|o3^OǓ5ӳ-&=}a :Ug󏛍VㄏFCg6#暧{G~ t|LLn3[O~>L5WhKZKP>qMWͼ>g&^)g+׉g'_o &[|V.ⷯZk .|7O֊ {L.3~3f_9k>pdŀ_b<[>Iv}1w>qfί?6-1E|[yfq'Ԟlԧ?[~F7^779=yo_O-êW`؜(f3?ǝqU`Un]˾>ga>qG\/'n6gm7}֋.֍^M5u8yږ ØKv_g<埏=s ;|ڔ֛M5Ӛ宕{yf'{ Ȗ[aokn΋w9R,ٟyΉϯy:}Z9HO_Z[8$ÆojZv}kna7sMo-E%L66-߰tÒ|><}[Zf9a1CKz[v)+gxf(Nۣ~ۧ5'q9'a8]I.Owrkk?G<1hg _~}Bq~WVVV.N9'}ͥjsꄽdU`UUskV%t}js8@cqLrl;95ı,7.>>uO݃i;8sߺ<@*P_>g.P\"뺤5S^fNζEvZAҍ: /?iMզ:԰7瓗]'f<})7q^ͧ8p0հ5o~v ?`;4w <^61{_Ք8U!J|a5<|1Nz r-~q0o M#X>ՏZv/nx\ooN#7Ώ6\k1fm lp? Vjjo-8`g.>s6.sŠIz9N0|fMqŦl2`I~8M?/^%`>}6-[ˁjo|qLpȉSi 8k3sKV3k_>!=}{}c \i::idhL;;p%dښ[zU`U_K.:u#~+΃,r{3 zǮxAU];;8铸;ü)3[r6߾Fwy֊G,}U`̉kM"W×./U4qzcٌ˸l$-O\~sNN旬 *O}^}P+t:N9Vi5XǬn`;E\>#0{rkf7iho7C}FX>OkNc'W8͓ɧ2_qanrN99\?sfW x >Xqmq9g\VYpa`֟686'nD̷sřpZ'K<ɡ/fWl62u~r57'0jA0x)&l3s)bO |/GQ}S׎ךgS9:C/1̋c^-1Gm~;y~q#^3.L~:[ţaH&sD$?[swlO?<]aWΒc?öQvc쿵_UUU{c Lg7x҉ɺu?}oZݣ`,xk+\=}Y?vr1KKzPЅ=mOg~q/*i?rԌ_,N)&\W˗Kř-,1Ҏj1ߘOx\xc^lLB>r†bӃ9,O6c4[7|˙̺$tӗCRY=S=er"/7'm ykm<Ŝ|U'_)S[~S]Io_W沗[~pI VpD;I9A54u-|1ͷtkiz–cq*\/[>Nbm4)66[/V|5'7}؛K]l.tv:?1 gSa5E:p?}:[+\si-?x\u>m̭wGkyijKdMٟ8sn4W6xnɪ+0Ohyp'Î$<]̷ IDATni47x]!ͻtl#Iwa>}fRsn~ܜxf̧c֞f/xkLF3&&{b!Ml|qɯ߭=V[s4.<<0'wIpǘT? _67q|yk] wzs>y1GC?:d#|o]?.DXrf˃kHgk{k>bxZxᳩ-VI]lŶb6g58'n]`[\ubKfO欳O<r6zb[`ͫpR>q5zafpriUs [kg%lZb6/f//2çgsǸq+8wcR.a[8|`'ξJ\7J~8ɘ0X8ֺ߼IՎ&Ո֪KW͵?|t4csb \sm| ߶Ygdk;CՏ' ]M\EkZ٧gpZ۾*Fq$/r4LcN3~ onb5+|WwΙ3^${ÅXvo/3io lrm_6>l'/}rc 1|s|~l#1䜾'7_u5Gs g>/Iqòl=s7wũ`K5#iq$>ygQpE#z׻xK<$N~'}qL\sqǮ_WĚystP4<|(VM~ _.Slƽԕo\-.#F n1w[+>;o-1.z7w"^6>Řv6"ߎ'{|o=kɋb_"_ՓO+j_r.Ɂs/˜>߸+l'sV~$v7O04u7uNkQ3t\nn ~pƓݸZ˱|iv}-18~r܌g}p9T<~Sv>D|C>D b\< N+4iq0Gfh 9┧Ʈśqja>W[+[ܾ̍Հ\0c8[?xN l7 苾h{7<M@'?'َ]tC:$ݮO|/:?K{CzZA׈__ݤdsq7Ow| oq,ƥc%[>s I7.';a QrNss/h> 䨵0O-p=:JZ\̣~kIcs||kO_؎|8s~ʣ|-[^Wkra~O&mu$GWk%q+{zoMsx,%x"\4x֡~y8_qO_'t:u8[.1Ժ_J}ֺ.oltl:30泅iҸ>CgqfeTrnl96w_aeÿϡs,;rHa#50 '໾/zы>v{-rQ]Uzf{ӞvќWՇmw=qa7mc`U`U`U`UB' E7N.ٓN}e+.c+;|'8^XU;;/| G빧<)-OO6۱8wַ<Л}7Lu |_5ulr,&7/'Ƨ| qoU#bˍq]k}\ymlO9[G\c,Om9S7y3C>7)&0pW?_~~#iqqᣳϿjζ|2/W1ڎ؋7Z<|>j֜~\ɏk5\Շ}<5[bw؟'|7p//__y3]=<Ϗ~ӟ~x ^pxwggo'x3??pouVVVVN:9%Nz#~3/**pSO߈ۺ<-oy9y5۾{{B~~6aó:s>s67gOK\w߱ccZ70sf> ޱPxƲ|"c|ԧmyc3#^= .RHuCFK'@Onm#:41ʙbYMūm14+p/OW{}bWWLxOl^5kݍq?Lbգ©'*N\կMʍ8ߜq|f,{Xaүg#m~Pjno=Пž>>\X#ʋ]3m^nmoƖr͇-csOqFvZrUS;[1.csH\< _<9κk47uߴ  Ĺ`:Iư􃟾8Q|Oa͕1NSmrU%/yɧ-_S=dK>| /1y뷋ۿ=x/~e/x+__^b7'_ B|+ \y:uAgl89-Z08Κ W'~'/~?-|#] |꫾}~vu= roׁ ߰]zc8Vt=x)q̙aAiv8c!sZ?ow]>GֱV^q |qa¶n\Yݜsyf 7sB."fjg\4117t O8R1\}TyKL7\ ͥ.î>E (+8 so_}wxk_{k||-77 ÷Wux_ozKVVVVn̜0;9a::Nvay -*pׁS,?#?rxk^}#coolk<}s7߮1ukے1֎=sr4\D?^79^cfq1X+|B)hSMW3c#s"v91NZ_wo>.ipOɇYͷ4[kϜkmZۡiG2'VYU~>tvmq7ov6:cM۾bYˇ&l69袄溠  ܕ+o|㖢IK.|BO>s?[!Gn:r}3>3O}Sm @-ٍ| رyy7׍~㎕ G\sZu W.G|l'~'W=ko>Sn/68Ohqqˋ}$UWNjfWMh-|;+^*Ǹt}>1\BϦ~k#&L)܏9^sN ޓSre/?RꫯQ k)W}W3qzv%]wݧ+Y> ߷K1;a/YXwVOăv%¾n8~xFwqgCp-29f2_nba>vWWyύo)E>? V7Wn 2W~qZf.g>a:߰·±O C{cmw_>uL~񣳷/%05\WÕ=|+?zo qӾO1|cw9ԟ:Imbڜ3cϚ}Cێ|`8|3-N9>31E=Yb[y]aye^XXX}6:v65$[UUUkU 鵎IlnMn(`P͇D\npXp&),?nLic"748>miÉ|54&TxP4#_Τ954/j\<7tA xԵm_KpڿV?}k)?b ?#<IJ-Z6qO5^?[QI~|4,)'Z='[ߜc=cM_O`MMkyBkm#6Xhy~|T$/X 7k'Ol9O8aCWnsb'%pIq'ό7.qv Ͼ:ns}jm |Շ=)q9 lbspϧ}<id:n.f>c'MMSþ***p@'ɶ1 S۟Ϛ7dU`U`UjUtǨWn̓yli]>y#ۃ<_ L͆>?r  nlfg>(g>r%|ο5qP%nůOZW/]\/ѯeM윯zWoDL-M{}?_>(yK\Sak<g^|zbjG#;MX6}f\◃ 01>ŝq?)V|,9O˸>Oqj)q93-]n3O-G7cM>99/XS؊Eg/^p\_Kou\|Q?>'a؋C7x\l3PxںOXkdɱkj _s?cnڿFDZ}ؤq9rcjvb=v 鶩hks$|M5ᑛխo]yD_1WVVVpK:5ξyT ǭn:hy,+1 6?s'쇇wu#GyݰuSgwRsszx M݌m>zhGnq>is#e̹M^&z\{LaC<;KO\l8[-q۾٪ lyaf.6tyMi?1aěo{ wX~#ְo0i-'rL7gf|hR}=NLkNB&O^=l>˞[fN&|iONqaٚO$>$_:mIӟcɩV7m͑09bn|R,>dr{̭Pc$|qf^nG[}xRN+!ayT}\XXV^z.It"e_***p+ࢾQ];.FnH;w<&Zμf=` lh<ݰ˧X{xq7|f IDAT xޚo$t{awkև-vd'S닩%)nm]{Z8>7n{eէl|-/ӰD_Z:Ċ8|gxO`kOe*z?!WMگ4W~s-38ł%apjn;\ڼ>75`h‡M>:& W_]2gc|[w*=nvo/nƤ`аˋͩVX\7͵ f/&Xj6;&W~|m;~r0ugjI<D燏VVۜO_Zg9җ ?9c_^iKWboxS9pާˏgib1֟R\s ֧͑ϮdN_7}\a18;i//8c8\ī'><)mp{McuZa3ޏqҽNj]]i:UW}7ܾk,'-^kIkbW; ̥s|{Ыw 8ɝ%:_ ϲ T>~?o_bmq{ftJw@'ڇЇ&ϴ'Yas1`p͓+^#>gOsz"=X|=@Cn&UqOn4]sbq}w7=> ol^Oxk+ ˔,{s/ytQ=á(Ȋ̈'"fU[Mkd04ar=?8>sūl/KXy3AUգrwy5{^aV?陁9gUOuq篮jӋ>^l:6]-?h?8]zY=trc_Z֩q|s^=՞Ogij-vujƹ5+^MXhJ-vGU'ƅ>]\t|f_Y |0qSge3~r|臽| ?,3~ 7RnΜ7{݄uade/¾#?bK?0'k r5ygWg Gי A/ ',]]x~>C3\>~cHPqt]S~spW'>{c-wpn)|W{f䓣kz ?\+]kA6}fy ᛋIpT=3s7<4ϮR=\zpZ [h}??o.OxsC\gKؗ{..ˋˉ-yKsXcS,ݗbGF|@n3'3^dst3|Xnywqgw6GiS=::\jkޚƧqٯ، //|@E{-c[D Wii? ai%HϮa yi{}9Kn_ņ3z/G%L9_='wV7ui,&b 57|7^|?8 ge9{ 04q kYg[AHb C D#LO%_{o{o?tCLKSsY 0F>T[Rmr8]irGlFk&\E"Ɇk%j1w_C qϱu#[Xf^x$R^u#OYvj3rX?a3p,ڷ|v߃uҵٰ_a{Zb!U,>x8̓ʕeQA9[/F9,׼xְoNսtxl4j[8x.#[H'k?';?>3~m_ٟ!<#y:p:p:p:p:p:p:: GvXMrGwsȮloa0`ܥYimqU{<wCҰ4!V>4}W6x{7(]M˗/Xz1p+qVNvvcmrfKUN|`/_w5wa .O0Űg Cw_n5>q_ظm7Bmc`Z?8CG9kncn}oNX{1;/'N.mQo#=}۵ʽpoXlnfoO(o^G~xY.S0l$,_csĜlN Fj[ [;<^Η}OhIy:p:p:p:p:p:;橛3,ncMWX_kݐ~|,a&.q耛~gµwzow+9 X:sJc7LqjikZzSr[ .Cř#O2l3/3f,7i]ݚi1㎗Z&8E"OɅZ૵z//?T+ SS~c].Œ8a3'aߙQ:r'x5 Z~jiș?_w4LYN]|r%f~sxR}_cs/?ݾqn rO!\}é9h<텮6z%'<;7xu’|y_:|vF=fϢ٫^+LwqexyY=Kg{/6jf}">a+W5Y=q1k8 ~xyÆg*;6N8_Wk?:C,1#[ nYϚ=C Ox't V7ppucf,7Lg3'r^?`;+ݴwGtgzx0ċ 9_Ű#o6ŘՅP&#gq=7O5|Ňcku-\-+wopb.C> ;屏U);7Y]^~Q'[O{<7߽F䭆rW[%q컗¤/|A=cI~F:wi\|mH;u_]t1MgKcoVL5ø񙷟9/'Sޭ?~۵+<#_=-Տ'\u yza/L>.ƺOjxr[D|r{fOӁӁӁӁӁӁ7R+|/l=/g?ÿ0 n$|0wׁ~wh͙}+޹/!',O:K綇ÎZ-vX6cs~6Ah>yP Ny?b"a{[.ֈ5\S\7F$~ubv.q^^ÝϼbWZ t6?m_i]l{iļutX{akn9׳7t >.z7t:' bgn-?zb^:~N\gͿ5j_o؛Gͫc^;QkKŪMѼ=V7|r{5ZڶsmqZj~\ŧ}Ov>UZjnrc7sY5?ytyH:K?;+dG2AK!š8x0l<űGxQ[j-<ϜOMAޚ.z$7o:/7z+.{5q=xCήW|i=æ S{ubW{^lqx_4<{:wK⡓xh65o4_qZ(_䣗 V?Ds:+{Hvػm}'&5mk-#7W[m5Nuؼ.+{X;{XzŘ ??g|M`exyGpt.k|[/>vOӁӁӁӁӁӁ߻{לvn_+_ _ެuXֿ&'_{pMsN耛/7^qM?Ο^_?7y0n+-ϻbÀzgt/`Πs,93F9ʷvqsvbvSbw6Zڜ=~ua)'~j2[<nllk{u ->NCV}"Z^1|^V]pqV[6::I/;G//ŵ,o:<[+^s1x;&]O|u! ˁg7VSb7/5^_ `⋟7:0~ixغ0 l'+9ONNNNNNg!t3unܘ^_n< u_ap#]џwnqnðgN;kp;ǸmMW`Ϧ^h#Ӟ͍0Ě5e޼zue~dIֿ&v㯎tqtxTWܚ N[t{}b6~qmWagk)u~:Yl{oaeQʱ;{opqcc؊<{dߑ[O;&US9Vo߼X]zut=w}ϸ-\W "p3.=Hoִ\ox7Ϭ>888888΍-7~|o oz9r壉dWj^96>6ҚW,Ӻxy'E'_w|qѽO ޗ#;;JbM[l0H_^o]הCtz>c;լq9|{6> p9S^5+rk8`3Kl=kN=|l[Η}'7bn ݼ{E/7b[}7ۿKMxX'΍>o܍:|pƒ>dήM]:g{f}F~׽_8KLeol0φYr{VOӁӁӁӁӁӁ߫nvt#͟fݔn"7a 67r]>bot\w ~sx|0ÆRLu^qDY==`xI |r[ }%j0H{f^If7ʟf^˓Zpq^6tG|4_x.+&[t= o!\\Ikm/[q/fwģ\{ۏ|D.#{8gNz3q|kߨ^\joH57Vq..75z\9y\+GgKg"5[u:fZج?d.o3']Rl{Im]\N~ۚ]qY|]G xs<0|F4-e* /ߝ'$?)ONNNNNN>n~^7knd/n k↭@7anqCǿ᳆#w9׺;vf9OF`bsmrvq:-Bpȕfn"ZĒjXW|zU^xpqa˯5TL1`}>lq횼?P^_sGe^^59y /G>65Y7oS,?]5j!곏۞`bi>U{p]]~Hؽc^ޛ%/!U_ٞc#Yi1joj a‡k:[˛7ͼ Sp~櫞/>_gZ,L8qiX|!(ut{t j}v/|4-ǼB`/?NxCl|g}Þ 8seG~?"ϽL?,}{VOӁӁӁӁӁӁ7ln9pߍ&wGܰ!믯<_ 'D½%:pF` =}wx7\=.ze+65F@dU˝CLjǵq!ɗ=~c_^`=t<=?΋xRͭ] G[]=b_ֺp#^,WϋǵfWwygV '{1r6?bI=w]s8.Y|o^ WMW[q6Fظgv6ݼ;c3Yl1"//5}#‡ci7 Mė|%#_[89f&p }Z];"O9/]]Ł[a#╟s//^ /_]qه83|ܧ7S4͙+[݈bй47n?޷@׽3v6:W;֤H OXqv<mG7=O{{Ppn❇vo~P{t板+L=n.D|7'Q 8K-N?9䬷z6ipxũfcb^l14_zgljWRn6z}1SxlU_]rQګ=[<˙c= ]]'ֶxx[1b ŸuLW~o;/EǕI~ϟ盛{G;wKN1/}NӁӁӁӁӁӁ(7qnz8_7_~ܹs#&ϼJ_u#hoos# kk|Pwuw΁.s+ Vic ?rZr9l_!G<~q]}ˎnkq٫W|#0qgM#O׿.ųo_،_ pOk B`q.1˦o,ļZ4C!au!80J g]㯾jOpŹ7n"zhR.l0ټ|+0|۟q6:~8=!-huԶ5Ěd3'8K1Űo-_J?q=@]7`] C;Odn5}KpAxg=ٹ8p-济j4g}ƿ}DZ/z%06gs]T}o횽ja/Kص:x {Q]˵o^k>>b<<ڸ \i<[9iy%VbW7&I5-];٘8Y^8^s|/w<CL4wI8zl-Gߺi{7r~ &}8jco7[[b7G{e_oi)L FO!_1 6_@O<}/0㍯qϧ.^Η}OhIy:p:p:p:p:p:;̟`7aֿ7/뺡'w`:x s/^1vMz ΃x0|8cp= IHXgcX7/Oǯ6Zjr;qvoz!.XՉߞu2/Z]i`r-LрOAuO8ԩuu^חjCZ G\(5ZR_ͫk:w>]#b5NڨIqA؋/& _/w7v노9&Ogޚu{oa刣|j&=?WKNWsY'xu_5 Roqquj޺k\x6⊿x~=1Xk;xoO}04WQ/κqn.}VLK|iS0"/߽ >rttttttt/+7E /x˿u3 M/??'/2ǿ7i渏qw`π3 tnz (޼xzs9N4hX1և]rc'ָ 1[{8J_nq/gn٣Xjo^|9Cg bs^`]6rxu |=̮[um|qաrW-iy$xЮN]|xrݾ3tv69 _L=.0xIhWZ=b { odW[g9$%s%˟['wNIu5U8k{絎kwxuQ^v">~k4-N|Tk>x6n-g9G#gn+O_ gl[LY]rWWx{'‡?OtmL ܾ⡫[bmߨxxFph{s܋yށw-6ONNNNO|iwM,_i$n ݘw3/I D7{G8;tnNzphߒ|÷=XwoGokߘ(-[JyسŕNnӼ:wkt4iq/ּ0ϖKzXl c]5M3]/7bYưca8ě3Ő5>IlG=F}F*ዕc897=uN5jyQ|5mll4o_0::xy)Ϯk Gõ\$]l#wOΕg)pUy8~rab̓᭓e7'pmOl+#5|i~:4L'F[Wgmecaw5},רr[4ycϗ}۟X.a$lxG"?lz}:p:p:p:p:vM/Kmv__n"Ń7yD/YYϽ~n>=iw7Z;g|_cw΋s3CO~+xڙPL6xk ~CoXu'jh |HA@{?gƩo=ū= g^zµ>G\| on$?skb'.r g/jO<_{%e-(gPjv&#bkc΃ꄩ}/&~r؋`>ik/^.u֫ꖃZ6ZՀ#?ubo[]۫~6\΂}z_ G5Ok}YǑdnO^Y&&~&ų<[-%K;^ [|ѝ;Ax헴osy-;NCĐ֮N bŵVgrtvg|-g/<3:|3?lx\{~9IWؤ7E:t}:p:p:p:p:p:p:cy'y vÄB((>?*k㗯+4|4F-lC'WLyMi{c-?;^{Y|/^y1%}/GÉ5ꃚZ.g7ŵ~<gֵIIOnXoӗjO,G`3U}b>x+ )ŨfSkk¾٫ɺy^nb͗4/ז8z/UG>8i9{gOXΖk^d c1;{7[:z;srŷko=0go- e|yY [tDlv{L8p6m^^+itAl[WмZFj0YF 1gNbi _E5#'\u9G|-˾g_'&1H:D _h~ {ꀟO3c=y~pVܿ}[!ts;tփ#0;tvqo`$r}\WחWś=,yv] -.⊅QKkO2'C[82\ r6ĕӈ}e'k1jܞno~#לasua~S]i2O/>_}4#Yn|˶bᒵm^;-pb׼yb[V#_{X]La}7xsds/aIb܄1厏?W^Η}Oj֡@Cl [wwp~ko#@7eߧ~}|~pߟ]_v0=gs_;['a݃Cq8rWs1o߸Kvqۺ¼"GG|i\b)/x>R/K<\Zll=R>p[s]5?sT|y _}|% {&G/_Nhu%joGg~ L[` '^qꌿظ;[5-:kș޺^c'찛w0wi՘mxw`j{10O,~ǽwqm6OGx q3|{c'q6Ϟ~dc8S+<77^wX4/ a,qv݊M#k%МF!Pu[|0lkODib[9--&ꫯd<[Η}ϾOvHW{CJ/7L[#yONNNNف!g  J`qýLte~Ha/}z=dDK5WS8nMz_&h^oq[8rq5\\ꀧ&􎸪7>5=[M?1GxĒ~n}!5叫u5k~8p':~/'^.Ƨ&vRK,aaۇ{9̎#dl5تd.OG|b\o_7{Hqp^b b|tkkηq:qW~Zo[8eXlIs5oq>=.gßv^ o3{k?{XXOwH[AQs5G=?c˾IlixM.;8888CuX=AW5ēapd{\ NSKq +>z5\UoL_! ~$]j>k>{!iH_W΋c3O;Ynd!Nof'8:֝%|咛RZua[qny  gud^tٖ_^BTS5VZG.$l뻾cዳyχ+vٗ+4?JkFkl7;y>:l;k9X2'ιy1;,{/aՆ֜nW,[2cH`t^˗]=m>gi=RwU_|m^^<ϔe3ܽAHbݛ1{7uoXs<Y5?8+PrH7಻_uQ40('G[\j|[n;.\=0tyݾV}۷\pzpjN`'=t}F'.־گkxFt6%<_<#l_p5ZiyW_5y}#;,}qmuԛ<qt|g}̈õpo6yu߹$ay.?>ì> gvwbd]_}}y%ި^ںFc>rl/K~g.3Y=0=ħN×p7"uxB8}ߵ,Z | MR: u9Ի~T+?qнI1ށgWoFn.}=#y<%Bt>ïͺQk3/X=FגxU\#^|qb}k;Ok:|rW1gΟ6Nhxw9xY='[Y_>_=koÛ7ņmOFge߳:uXc8z;ԾoWr:p:p:p:p:Y!r~~}H>?lJ |B=1{"Ln;gl!=In~C\8hx9Ć1m]4/ų{.}ck_wN1=Dm 9 kq.'0';׾yXxqHʝ_l8l֛xXig?89U[8<=8Ow}p}zYmbgu~?KLpG|Isڟݪ\>/N/\t=g߭a s~r>ytqP777Ioʰ&q‹~-bEL5cgjmPgްn4|AKS7K›W/)_kl|9퇏i_.t͉  _1b(FkCx8tbOJ׵`V-E]]+%e&x6cN쬧̀QwR5䐗67փ/{7եZ$->['ðKG1q~0m1x4 w^^~⌰Ǖ8nl`k-\}Y#nI|fnZMQ}Q0/?bI=IX!՜ { y=_L{3/7cc76A'rkOΎ9;l|^Bqo4?z<7꫋Jo\0{?|wr>vݛuཁh wӟNQ߳tNw_Խ}l{&&t8{j1/>lZJ d-GoLH6f{/]`#,Q[m;bms#[k\n[_lL7y>²1ք-KXkt4|u5O<|Y[8%ݾ1z95|sre͞/xz/Or~ (vc̗kplN7o~% [|ocqcqjɞz-]wmŔw0~?lgc/p5-~gr/~ӟο*A~}S+ ='o?8888:Ѝi逛ܼ6ɍ$ae?ߗk6;~x<7ź"bhV'.VW5d' |}!mZlx%;?A4ߜa NL;>NtwڨkD.ڵvJM/ [ gg^ՃbmH^ypImj fqq]{1ۨ' .vR/xyޭ _O6ƼmzͧLgݨW屎Wzc;˰75|9㢛/[R_#?k?l|4~6Qi{-ė#r&Ϗk1x Cgc9I|_o&Xg&;|M^?_o é^s}Tx.z%zpl$zH>`Uui_jV|]:)˾gvɹ{QE{9p1~OI:p:p:p:p:p:p:;<҃{!cr/dF >80= d//,^9zaͳ><=pSp&|~x'35yyZ|γǝ;>O>]|]3\}*Wx8ߵo-.MnH1K/&$bOkpB;x'{/8|,<Qć5oO8œ`3a.K\T?5_x5Cktu_W_ay'Ko_v&nmi?NLqw}U{Gxs}4{\RL$q^m)(K]5{ą+?/f3>tDzUc ~N93bÈgl۳wLWw$Ր N-K⥟)˾gv:{[f6nc9l)O`{ӁӁӁӁӁӁӁ{2ݬvNͿ{+uσ93YFD Z8a⥗9A{G3 d+Wqͼ}ķ\ފab}ԓ͡guGz'[o[L~8i}+osJ;0Zam]Lѓ=lI<竿0,?r/:y6Z˞\ƭ\fO]A^ąi~7[8oqEҝx ^|t6ؕbI糎6bO:mOIy55aznnzg|./feűe_]qЋ?w;[{ǷW_0aϣe0ǭrT[?ǻ?`/yZ\|L}r9oo}9~ӽ!: 7QsGNNNNNNN~l,q>л"=@c o , ^^+/Mlq!/5V@f~q$b[t}mʟw;soqԣ8/޸ðȾ!GثClgN\µ+F|쭛-u5G,Sg.WcXk89{ՠ~1oGvjgumj3a c4糮|s,gpzcwk}Ū-ζ9n.QqO$Nzo{F:kuOs#uU zÐG$s6g=˦Aô!0zټWb:l>s^>ԦFVG5g6/V=qn1j*o9L9_=@`oʖ΁3$7',))tttttttpO˸qC2:vM=>I\= G7pwVxt?[=q Xlz+/_X8r'j}$K\_㑿}+a.Wk7i>4i>Slkklu:HV cX76?{ǡ^#VK{)Q[u]] X|u:tRx#Lϖ-fmj֐^gy3[9v_vX5lCMcr1m^?9\ZHg__[0k3WzLד|w-H͞+ϗ3:Ֆj ְͭ`{}{Vo{ [-.ο5Wjhvj3;p{38CN+ŭONNNNNN>=nI_\NqPBv:X<,=Y:t\F>j NѾ۷5gOyp[u|qW n^Oz}v%\>]7K_\}m^ʙSFXܝ/jľ?TجNދnLbHaOT~ֿaow4/NDrH/GZ9(gUa͜'k8۴[^ny.ڊoyu̼{_9{i '&rI<_ao^;a3غfR^1ϔe3aj!vX>jyc` aހ7CݴqӃݸ_{q>?t?ԟ,~CS`qwe.GϗWM4-T |U=?5y}R=k{q*~G^Y5orK=uy%TO ^uӅㄩ>93؞lbWփ$'~r3p7gO[zWqb 5)o{som#o^l-<^>ؚW[u,5Lzs+~$𤼸:~kkpxilE7_ru"}yLUo6/$L4^5']^ tvو5ٽz[YÆl}X{Ė;|u[kbZwz |}ټqs|#nukts8}/O z3_+8qp;p_~7To8/?r|9+{$>"vk} }ubݗ=LW9^k>[#NÒڪƽ6KK69ų{-^^VpHw5n_%}kG\ g~=0zđ[z$?uff=K C.p,i }s 6bǻ4<k,w7/_]ǯ̧L!AH"`` T>V8|@t G J"maA)ٰu{/}{w]qy^6uϗ}oXNPe9IްN=y bMכ||mOG3{f}Y\)Lpq5_.x&0[9_l}V+gu./=I{ufp+W}|c6/>S㮦<_~k/5*v5OuJ珷WOoO|ݛ ݷ0lϛU~Ovo#F>Mqp_>b>>'IqsT8aR|ÊKzQσcGë('A`iy _ynDw^^] 4%-_guLm|P6.q|6'?Z }i1̍ cT\ 5~s7n~RmjN).7{sT[eM^dWu0X {:7wq#0_:ყIq݋ S9x+ڰz'|m%|w/z*v![9pbˋTwqi8v^.sx;/ ;)Gs:K\_qrmM,<q~xlwj?߂_pt0'+𮛴 s!f돇<ٜ'9ŧ%=<ZǮum|a#%_ն"^85b#Ϫf/5}_d'ÞxR한LT4W__ZCۣ9)OjK3>rm"vއKs- IDATN~>j?u]ꐷQgm[yh}*F{V9lu$րS:qy)/yźWrm յ[?ߎ83FOb_t5XKĴ+֚[PG1٬aՓkxl]0w=qs>CǞb+&^z Sڟ| esu ۉILٔjN߉<-輜|D:g>׹uuņy_so?kڇ4.#͋Y.랪5^</5GW_mJÄ/u`;_/+_|| >\9^X}͞rcN`rŹيæ|c%N;s'k~5 {"kU>Z=8mb![1a峾'ŭAvnjsryap6W(5|~W8ÊrǷ{\do-5ݱ뽿7Vc\ OŅn᩿ͧ9]GbasQ{2w1o'.+>tx:޵=g9^|;sBz_锖|*|o+Yw=xnϵU9ӁӁ@߯t\|QOu q}+s>obLX?E!έR /g,>F,gsgDBEM,rN1$>s1gbNۀ&i8xuKoA/_ ci/;IoW>y'Ɵ;/ptp\y>;V8|Ǩ~j7'_ G'j$ժd [-7ZbٜTg0q˅?ç /Os}r-0i0 =?nm^Y$񴮆mlz"D\0oܜ/;%:uu5jNw.د+'?|\4X6o傹 y>T#^KU ~68Bc?an/jgNY_H{$Kxثgu3:X'Yyq?ꏏ\!j+b؛5-jo[< :;,[kԱ˚kXޜ,ֺ5o1V9{֚ІnN|WOc`^=x)y}feCr_`ͼ]DzÓ?Ƽl_}W٫՚ߨWl/.^sbe^^syI5/g_6sl_^aX;0}x)G#뮍b*<򊉻H!Rkq{KR!˾y:p:p:p:p:p:p:p:Fv4|x7A衠!~}Iܰ_d~>w/&[؍~GXqG"o~6}^~`x|a~x>0Zr[!sy~=haA Z`a~G2bk). qp^-G|Z<bd]n~V~Õ7] qG'95j9Q^X}V#y UZĔW=wϮoXݳ6:`'F_ek1u=.Wa\zOOR=XwO'L|Ф<~c/^Η}tttOz1^qMkm <|jSw `= G+7ίxb/;o_tN+W\:|(vي'[\k^igMS5^:#}CvS}W'XzkyыOꫦ+>,\W\q%cOܨ^{XCb̍z!dθw 9|]r:y߯|<ӁӁ֍\>HttSe?o_Tt]# z8`/V~Ϻ_Tb Dxy&1K/(ęV_^|z_hR틶^b٫ɯ&{x8ͥr9&K'Ejn~׭[>bV3WU]Zro{s<_1x {5\m_\í;W&RHsyWp67ذwyX|1H׎G\=ŷ'V/KT9>4]=W)yMPR ݱ_ljIzz}lI`&b_ݺ؎Lu]m{^7b7o99^ fZ 5tޑy|:}|R?t3 1{:p:p:v=ae=}0``b7㋜×d]|KĮx ׿ᤇ<8M}1W'Zor],,q7ꡭ!ϼ^ĉ4z'jr H; W._j+zX(띗+kZ݋'?>6qU˞Wl0qS GLz|Lv NN>؛G{'ӁӁӁkFg' y!6: W _s: έW!WkŃboʻuR- |9! //lw'5V{\ oMo(vq֗-ߕjǓ\}{=V7Kuí# }-_:,L#u89K^Jk8ozr7ؒ|l$U\];76Xrlżsவz71.q;>㼮.ze٫úy:˽{b_^nA/ך==4ܚ/-w\l{?`H9&l`Z{xq;Vesu=8888888x:z}7؈ć> L\qyǼxq2g86FүZ˱vsx_(%r=%ŵگ0+ln~ÔUmo=lp_/GoٳUS5+9=I /=kպuen.W}l+wR%l<̯b->,yU!CC/&^vJoq8 Ljlq_"r{1x}Ћ8>R?&B׆r֐ߊՖ?+O[g$]bu3;^}q{A~plٺtmWƵr6FG݌,ƜW%]?I:!ؽn@Ŕ9.qiyUku_~-<=nbKW u:~8%{g/Œ֓b$f+L9'v8o˦n55>?˝*O5\OXl8٪baȖfJ=km>9Njnc+jCn>]w0ky5b5F5=Gquかf_Lq΁ur 'tv퇭ղPN9/9|]?9ONNuSλ oa{ΖNN>"}:fauWykEܭsdٶxٯdzH-w:?mj4[\-9[.6R/aڧ'u9xxu^&KOęwΙWbܼk^Չ>x%L4|GFk.wBjiGBygVlQ)-l=v/;~u17\yҰg'57V8o qhk ԋW[sEa~RXSC􀄗9pq꛹}x>5Zol._=%t}U^ZpO؍ְf^4y~նq츌bhwؓ8ő49 G"yˣG㩦p@Wl8y)ͻsK <.:P]_ZX{U+tv~Rnn}A"lMvolƑӁӁӁ]K\|wr-3H*!XauZ{R< <+qv5gk8DĚӉzګwOTbku_.ˋ#9{t9[_c{Q $$b9|{#o\島';]`ْ8k}|b^%pIXjW=3yύxٺmMle_aPnIgqN*1+gz.]_]]b]Oռy+Qڳ=\\1}'qjG:^s׸ױ>_.:Ivc`Fno/qONN>ereg3T3灡•UVl.uy={(aM%l<9ټ}]^0Ӛ?>|[OG׷|=(ꎿܜR|˼{qu\ G/ck}bp'ksJGt9u|qYV4{ql኷^Khd[]\z}?||]?9ONN޲yts5?-g Voo~y& ߲pς\GL*\|p^7auv$$ŧ'xԹ|[_{s16OwpTG)94$yJs<.10mcuŻY#뭘8[WnǗꄩ^>_|oi8 _Yc}gyyLdP~`p{ltt;潮9]\ĸV] ]\s`R]ڮtWg3c9aX9q|7}'IuG'tbs1Ϟ4/gABW IDATW˼{R[]倯?KE^/)T{}/:qlm0\qV:IrV lǡrㄥ :\셔6Um܍8C\>4R>qˑnw6SOyi5S]F0k+Xf.^ nǗ͙.Wֶ\呣ŹW~g/l8x8xcs}ӻwzoq|F=/_P+~eMW+]]?"E]mz.>/'[ԁn |}s3%<܍ƺ7nqltt >{Ӽ姛=_Ns1a7=|>ku!SzWbʹb:׺!\V O 'z,Y _\iI\7Ks[yX懏c(vyv.&l}u]7-uϗ}'[7]3~!Ηxmpg-jltt kt-ײ~ q|b] [wCPaNҷk]cG=[[r^vqW7sI}{AQqFIoo/p#8İ9,O/xs\I`a3kXÆ 1la16` }2bXy`WqtRM8ąP;P Wĺz>xכTnf.fY[|Ų'۟rmnK5ߵ {]̾_²),Gj^vw]l:4y:6חb9 9P;׫x|{\Glq֏bol CEw7Oq0Kn/ Ҝ^iMkb^|:}rg{vC=ݼv7#M>si&עt~5oxTW.1Wn89p4هsxpPd-?z[_'.~xMg/ kҿgBu<:j_|qTNgOW=U[ʺ{͞UaSt瞘p嫎Ŵa.s)^*\}c^`ǣvEl9zTCOvl0]=ðG-,{{k/0ljWj,:?Nsleaź9>~qO:.Ű?+f;7©ձL#FZaoW/G|t{Z|yN'utTƛolշ8䦽iR~s1Aso'17{c^mb[\=sɻgsUppS\7Gf!7+s6q:p:@k{(ſs~׸5'vͣ+Oc!J5[\:t#_:5?áڮ>Tn}I|K$\kW[>OM0jʏZf|W]Nq7}\u?],ze+vx ^K:sX|86\-Tk5UKǜ8fdywOwL#w3_{̯ųK^5Y.&g^4 )&G_Yшw-OaԖ:џ<766q.ǎ;[5@{L=Oؓm cwዧeW _sʾ|>,6[˾Sm咣f6%ժb/Rn/rJe-^lŕgc5l9ë)_yۧ9ۧ咃y+bcѺacn_>;+m/TO18C3vx\hoņc7fmyo>3ÆcKj'^upd9W0/ߨNx~rY!;z?Wq z|S>zT-Z.9Aⷧ0w{Gg^x;9Ji}WYz^)˾}:p:p:t -ɺ؍ͯ6?[#o"ލlONN>&>fo]N@.ײ kxggNjY1'zli84U?q.F5jc3p&bmħN;Ƹ:VyWDk=aF%e{ُ/>b\=izolw<ռ{4.'^p޹9ELV4Yy­Ʒ1ͳ]?57`;r(&z9\8[-`U͋S7{k&ns9KL|I>~‡٘|iO،ۯܛĶoak.fb^.6CU򳯈yN9_=gOӁӁӁк}wv_*lݐt7y988:zCF"A\/ g)qyYxz ِ߼+Vոk\''7*ņ8痃Kh| kxk:Nakל኉/vr%ስ^TK:_M7Xׇ|!|kK.zR>Kǵ9˳qd1lqyuVʵ=5ߺ¬̗-r W(.{_|t kՑӹR|'ۮٶ땰itbphu|aV϶o9|ٟbe߇:p:p:'nfnzcbχssså`M/Q 8|g,!ү\<$_Pu5е!pyf"Ǖaw]:]q氉ʉ'ih89"t7aap᫇w57qSӟTW' .{q擣yˇCo;5f83F> +^t|&t5Ӹ^8f [\k|c}tz`KG6VyKol=-~Ss1t˗0zRͰF86I|$Lkx؊UAz?/_|r+ޜ )=3{ R>؁O*Obv+Xt6qFq+6#bU |w;w:p:p:p:VufMs1pnF ||胻}Hs{>|nGOObAEoy _sy;-'| l/W\aO#-X.Oq;F#cW͕ V?X1|b mٗzeԄ7)ɗ-{})Οs׼kCnǗx_\|*f.yqWW5l=0H[y\٭նx ޏpr Z=b [mr )vּ_dz kWWj$գϵ_š.PָǤ؊ckN['|[<~Rp<iqq-Ǚ|C;յz6w Ƕ׵x=`~sA|Gq+{:*7C^ _:&bwqZˏHgmX8Ykޛeq4Or7vꯦb6"5{8W]b.OW:Xb}la jb3:ްX[zoN;.~Z—,??axw)ڲ0ovk~zwsL|8\K_F/,ߓ枾ܳo޺}y~c =aˮwGzj\9̟M$[9Vlbw;ƙƼ¥/uv-w95u1s:enzt6N̻av3G7/ӁӁӁ9g]hõÃ5C5*pe^ q_0ňcOcE lS(~eW=M8[ g 1r-~Ú'8XÚ?-TF4/0p0︅/? G%\TSu_?pyyhvصኗݚ#-ęW1?(FuoT[u{laH_1[xZ I\7j1Wl;⡋%j?k1Fỷ8 c] [y5O10r5~ߘ'0iO|GW9u|0lW`56H kx=A?HźYk~͇gؖc^smχjeaM#־^SΗ}ttt-逛=ƸnZ׹n>880:{Q@\ì-eyk[00>lv=ʍ˚tއռZxqk0>TC1M_]wS q_^Fq/Aiq񈫞(b˯VKsa6cf^qfnqM'aɿ6s_xŗ֍[/0H\k/ϼz̳r'jWuo˩r5Op3ˑljS;a['@`eXrC98wUOIZ#O7\{K3xywFZ^|dcv+>io<-{< ]ʹsm姭bnV<ľϺEԻIk8}gcyثuϗ}'[܁WԮ>a⶝a؇OUb|fwk~c?{h1x?]l\q|}٫޹+Oq}fͳ9}}}xݜ=0gKgm__ Avף|i+5pf[0ુf/n1pXޓ$bI׹'tR9;O95nZ l8yl߹Ů=]|blzCK+n}8[z7'w9vni{}u,>5'zqqfuxjQts8q-|_-Wȳ.ϗ}ttt <ݎ݀ypW[ONN;W<]st}᫘x6h݃BrikW Iڼ|4?C!ޯ)l|ꤳ>co}<Cq_sbQ }_ػz֟g:)',QOO,τ۷\x>8|Å7bpn݊||i_ö+w/HVlU}ktuZ,[y 6xk }xx;/=$O9T~#Le5?.Hwe|^[s_r6m;_^8'cu܂^/U/`?!._i>65\^.~#m[ދ3ڋ;!ܺ˅Ͼ㍋tNj^>"^Z{s^/ޯrԈkk~Ijĵ5/^sOӁӁӁ[7nz0i7LR,(.|ONN>a]=hfy3kC1@@i=ǐQ}VO\[/ [O⫝&u c}O`콜0pXxFƽ$DI0cWM2gQj[\gg]Cg$K0˱} -V.R 刻bF".b+.\z[:v]+W5^k~ǭ61Xi5oň3~$^Ӟ⪶t <1_o|~W~W>]~~KK۾˾^wwCs#WuIgO_ُ>8w{{}N>?᫾^}s?//}/Wƭ5i= l~5o oCB]bZgs^[/8nl6Gp1q-|apK>b̳-q\tq}+\u?(o\F;[樎|!ν+\֋j) W58}ɥu]ͻ\|񭯚k^ٮy{^5z9sڋkW>{lݳ!k9 ۑmϏq |ľ`Ζ^.s+Ӥz!+_bvݓbYǟΗu:tvM}8励6ywn5laWWSqOpݫsm͋7^7˾ooWvտWOb~~|w'tttt"r3د7;ᮘxُ>8x{:7x_rC_5_K_~O||?z'9X^<$0쁶HwMW$+هx/sRqjcX!ꖛlF=1ϟKoǗ/Ns1t{eg+=9޺ ?\-k(/l[1/uXIuT!6/g^5+/{\kO]L9kw IDAT]wWr Ͽyˎ#|1qs7mݹdޱ,|I#y>X'x:ilLF{c7a |%~}u ~qf: x#lbd+5N~Y/\y|45KU[{5OՑ-LZ\8w g5+G9A: 7skT1_//}_n_ f?<|~>|ywrgg? >qZbw]Ŋbnvsف"s>sρ--Yg̟y<=O]k\$[q͋bk0l'lrz0^):*N]ˠ؍'nE\{ˮ8éGV~y>zwuq5É'x<7x_}|8=\>1'iO{p8ŧa-0%{0#|vjQGWxřWWo|'-W)™yX~}U 8:aѺszg.6{>bVu惗ySWWN5ULݣ9MKSl˿ŘI'Օh1͋)n^ՆCF<֟xUk1krou<_y3oܗ}ꃃ߿}_$?~[__tttt; olHޜo%^̙<rЧnz'y?_|_ a!OO~MMV|@!C0we#؛EL_ƶ.%/.z3rqĝ/L:ç 1y{/fߡb6<^Z6g/6|.?{\%՞Ξج!}g3/[SOW^Kr'F_FL_y?Q$;\-ŬVN<ݜ|u/[ڜ;n<8|\ b޼ثä;OSˑ-'7õWxaa;&qzmiҞ])W.]ϼ}gkn/q-Gy;0F/L~oǗhMg|0 C)}4Ɵo~}qn%ׯ|x3Gt =}prşAC}к#>G~ݿ?|_?^_;_PTU9(~ޏl ˃I^c=PO[Gũ]^5uZ`']7obwm_pz+yŕrXèuZ$QmrG>uf=.1$.sq)sO|5\q=T=r2Qzy.>Qث[{%ĩEq7uܞ8>3>[?\bSJSC HŁW,=$lxX~[ Nt>ᓳs#/ [ t|<Dž[=o]n_'ljisa~s෮ns]Y)||Wcsl{YbWO'l#z-^GtA)-:q5p֫oX8>ۯXgzƧ疷˾/ŭ__ w{pe߿>3?.ONNNN>b:>\q;Ӂb~~V᛿n@_ '>+G= Xg9CNC_<{aS4U{^+& 7;k>T7&,qńŅ`ӣlrZ#/w5ͼz`e^I8$Ա/rKINjϼuW-տF6i0^cN9|k KWc^/ꙸW]˧8_5[0^Xص]E _D Ӑk7l/78.,gG|yt<|;oQzo]vs>`: :?q`쑘岏F$.:1/a?[]q5W_\W]WNaingxyN ɟJ>ueߦH4q!O?e>ttttt⎷zgs?ρ__@ _k}\ڨ}PKǶ#ys.:~/?i_W<88{OWeyk\zJ]]\Zlu]TCbzu,oTْ3sbê66t9㋓Vg|19mytX >,}k5_2R{xO׿;t_nOWOro}o5{o_lWU՗'+#jnXqa]?#~[{S9\Af<79S/]moiNWCWh_ӁӁӁӁӁz|X!> /_­Oޔ|}w|wƹo//[9U0}6uoX W ᢇ;1 )z|×_]_MĮ)pb O,<,MZ׵Ra.5򥫗7΁$ 'g:V|TW5X _#5"7bnya__9XE*-$v OC-D??u>ũ(/U.g5fkqj^ h]+_"(6swϑN__ǪI?ᇟ6(K/z{&ִuk~K<7u|yԷqїp8֫_Y۾󭿜.BG zԹ5_|[5椽/ D~w\[?syl{aa@.QgΎW z:@U+5% 8/8kSC~xZ׾Ǯ^kUCq7y#;_qX1)/&r8i<-n9lRN[̳!ޞ+0zoELrXWkaFx~xkprgFqcgZɾgzg1{՗~oΊ_}~zg=۾'__N5e?~'-Wv>r׃ٟ}ul>\'?~oM{ ?'uQ%$?1N_'ՁWI0AF!Z^Z<7._K~/y9zwL߯O--?^zwM~ / vɭ?{V~!Xv"5}9oᴗ>{ 3Xͳ.z/.znjzdmTyq aMo=⫥z8k;Wj^厓.r8)r\$_qq'ŦŚu:nkOϜ|b]/\~u̪5aOY aϯ_җ<7fs$|||ݿ/B{{*[ωu/8\C]+]; ǯqpD)9 ]dzlTo̳on{#N19]'^_^[߬yT6+&[~lt˟O}}jnW=g_\8/>?>__tN ,u} uo Oŗ_ų-9czlCc_gO˃sXz7NzTo>^;[aN:7v#&p?o/alՕƥV{"N]i₏'(aUO8=}ðZG3-K Wowh>desjkth= Q{,'{{8k0jM/? jW/%]/SR??MO;?gu]W\:Vwt/i'Fof);sF̟3o=3`H΋>XW+긧qz?,r/U WOqř?.iyolY'8g_/[zct1iu޽YLwr~XkM{˺Tlji,o_ξfo%;z+g/.O07u^^f6'''Q/Wb>ʙ{|f[ {+=Y{56]>o[}6OR}cj>_vsՁWK˃RHϺ >K=voM%}iszw?s?8Ck˵eպ醸b|@޸NOӇ1_^빺D׿}C`qWOV'|YOFD>Tq NpѾ)otqӈZ"{X;nݗ'x:تֻ*Vns6N큽66mX~YCy5:Nxh{M<_6R;v8h>uܓk=+;MŸsŞs~R h_ {ks0tZ[QC؍8wêTy\vn}Op,h89s)lyq8aѹŧxh"> 3q?~g7?gv=|?_N:puՁomzH Xd6şpbP7ru @ρ>FÿOxV<|+]u?^DiϕlF pHט|֮7_A \Z`̻FasONr˼jS>$P⃒?om=~+g8_|7d+I5bNO=d{|;nqwu¿[i4X՛wq#16 ZF~t=?qjӃGNް={E_W*-LE-;mm΁˻{غʑk~O+u}ȶ}Mǿ/ݗ}<__NW}p+ť9lk5{k[q+[Ě9LN$͛OQ[O!_:vq%_ BBbub#]=J:̉6^hi?bη3w=ښ6;cvkRm}gubƶs.:k/nRI@%_ C?ը}\(яT1<ݿwC_+n8~~vC#|$2\:pu;ЛNo鳮p{Lg/>jMҷK sX4^fU~Yw IDAT+k_[[os6S?$|q\;?g1ٹx9_{}o_O?9⿷p-8]{r]ƽqz7Gk4QGyʻ5?oE\|}ཇuCgmz=ȇF`/!~oW|iM̫Q 4[n?^Ml'~lrXW_voǒ}ew#=]nZ7b n~Ù'WxsHګ$p J-'H\5c ug}7>ޟ0s}o[!f?~ͯ5_O'b<O{o7<_ k}uՁ77EAY>onmyqes;=>{xGL9{u^ƾ*{;o}O~6ۖ?#?r;Gܟs /<~_w~wſ|1q⋭ ׀/]/>vMIsu${0L]ts;z|>`}\_j&k#n.NMp^[WzSqc3)/>6-OiYlW⻧1uz'ݯ7G9/7;?>sM^q­ߺ!f}_|s{O 59W\i8|@˿}0g gqU7_5əxofn޾glM۾Ệ̓r>e^nsuoN&q9^,k0lk]n⛷ O+"t]7'[ g= '[s ހ/F|O2Ϳ7?l$N[~c[oO?yn>|~kruՁr!7s{?8ca->y|@8`ϧo_ݿK=s{fi?~9oO?}/~3<޷n҇>+SuF70pƄ_x..*zg =lŚ1O)ٌjn {`{"&7m pqͫa㽧^<-6agmf+ޮz[^:C߬뽹QmռǓx:n] goEb´8갆#p ,uv8IuJQ|+6u{*]l#4,|[lCW⪋.&=9O؏doo"qr>R._:put=MޞwJ?e+~'_K{l;~[Aai l׃ooC?pxAӟ$rN(;Ceo^菾|@_\q^y'}'7urk{M5[al k~*6XIXSOKo⁁TOɵN_(qWŬ67VUty3mdu!ro_9q;N8􁍮~sp<5)~ôO/>vN_lbH/ZqTlu^t |Fmrk`f{_] 9VW7zn$/ba=_=նǚQ=:Λ΋oNm#5Z{T1BOƖ>{,ÐjG^}[K~&\+m;᫡g9^7^xꓳsM %<[apT\O;GuҸIʅw\ wRW4?üSϿx?977ڛ)v}aW_iB.ՁW^ž#)\ظb[{: oG:8"tl=Ĵ+ΩΓt~<W|IݟΟ_+a{mu^{ & k>Nä$wđ{yń->\QuXb~! sUc{|tՇͭqbW}/ K0i6v߳5>G5㳗ȗN.^iz/S`j<,:֨8'Ⳮ.n ޹T`#f|˱ݱ婎|VC;3򳳉->=Ɠ-o_Su|ibo\3>={N>~O7WH;u~z[g+nje竆al:{Q#/^W\ 7ހnOڤ!6Ⱦf tp m O csC>l:uٸN'][}P衿?q8t|{VlϭTbo_uoh 2}úؽȧ0rì?aav|j'x㩟q>yH}Řw.m8o1qߒzw|O'lV4{/Z c/{P_/:&'g5p&v1O#1x]=TyapW9/`k拵Nuj&{V+M]_7)\fx|!rVOt~c]>sgk5at{wYm.}%׃>kt}m<{iZ_ >x!$/m3lqaڨzdDlxkؤ85ͭs$̳gK8հ-5f~DGT[_6☉÷k5/9_8ʁŗ8x/xpo^h|q=ybŨosV{1調v.y,l#Ƙ:9O )r1qo\Ŷظ__=g\W\xsx7INF?M>ћk|o^k#oNlOBWה {Yܗ!oǗb76?l2p[{A\+O˿k6jzźq.?3~[yblz`m?t8>F\Wk;&|rma޺NʭVcAO=@37~[CYIg, 8~>!g=y{(s|hy]io? ;)5vU܍E/G>5'մǏ_s{T=A\+;F Ľy^Owt1p劗_ m'GuVN|d/VckzB!8`OQ_qV>B~e|R~ci|ki[R諾1hOwsoVڣP|zH?s #>-\tǀ&͍{szQ7b/oROuNqƏ3I'b†IgOg_} Ŵ?^~['MNZ~3jNa؛tX C~G,ۚn#omX#?[gձ뺎ss7Αb qYͷ'7o?ƷZrc|_t|8[_G6f֝j#|V[6N"aMuq!0bnxpe{ ߺxw-{Hov8{gld3Fj ݞϵ{N_y޹t#87M# <=ۉ@ǺųGlԾtyt'~Ng_lIwLi  {=0faiWWtO8a${Ukה5Ѯw"q^NM@b~/^qG_-tŚ/c+\/\l ߽:;ɹk8ϓ|s_=-NLq!L10 k]Kߒʻ6]wtq7ĝ<}+s ǟН q'F`Sp?l9Ozyq֧žN9"smlּuloKs/kkNF|!k^3F ZhR_c~/㡍Ϳ7 Q;`z޼OyGg՞.$KI//^W޷]̴ Nnti70nU \qw@:FDO=1grX>ƪHs{ ƟsMݟ+LmKkJ[ד$S@ؓn~ioOQͧvN;T Ař'^NMI5]݁הZp8ל/{S5ƞ`~Xvѵkޟ}WGbc.mb7߽^qR1]jjt$Τķ 'w9h_շ9֎{+րI+;q__`Rߖ7|5'F}<ݼq;o‰3S^VIx6Xu+g98:ÿuGkI'_x~t{[l+L5K$/|qW?a`W^vln6t58wxî޽=rv'a;/{|obؓU.'guggr}ݿrU؛ tQ l7n &7܁zcC;7 ű8xWcH;vK>kZ/ɻԗ'i{5]='}],^>ѵB|F'u&9\_qreZa1VMb{o`k.|8ͼuZEKG=Kw#z|a1X{ޭ߇?xBrVbֶ9_=〇o ?ٺzزh/p j/8ؕl;?1|lWu'a:pw]=F}Ϯ#VrUczk'E#\\>?X.ׄgC9{!^ڪA=qf+\6\Olaİ86:~ų7;3Ox:KZ/뫦ű\|dxyi#x`٬|ָ̇/[dlx`_E\k^'|ɹa:.y?{n_ީܻv#}on{\Tްc7(Ӝ \ s7|%kg=={69i=9/=:_ޅ^{:Ev5zr]{ ݇a3 D)]4Z_W|FgXsuotOXdמwopkNظ͉}TlFlvOꃺpU??j|RO~Ϻn._;s{R`k-&,.WI'գbwqw9{Je;ovyy1͋f lɫ>\:&la>㨮yS-a9%|>)iW[kaiz<9,7r 1;_O;滟ܯlom>^Z 7?og|{f_I+ _7ސѺ __aFҷKyQhYJCsk=wct1><ߞʈ IDATV=y9DE}x7G/~_3'ҵz3/{}kbW|׋Zu\5xڬU͆[~+Ai_=XVY.65|jfo^MiIMa߰WCxx6 VM^\R폆Q<|EUv."98,n8bjǵ[3r_lrkʮ'9 C3${sV; )yqrWΰ_ìęM_ ֻ8h{.ncv:x>fSh&&^jS9[qx}Q_SQC,N\Rg/e#S5ˣotu8٪:yRoO$k?qQ\k_[qkSՑO^7g4nS䃻ߛRUՁ7{rBFB ٟqS+;j8H7nl8g'@=v:qͣ콹Olj֧۴=6v6\K9~]/xӾV%W{=v}gO`zOC7ühѵ&w]~9򩫸/Zg&ťgk_I#Z㨎]w<|ko5^~AǛ?<r'1?xH[Av{7l65ViȽznr7ؗ3z^suT|l`ح o]Nbxv8;Ǚaq\ŘT+i]m<>xٽzow>Q}5]S-Ŷ.Oo~1˾[Ы֞ WÚl^7nͭ?~q{Я qIy]_w:Iϻ7G5H{؁#zqNm]Ձ:еA߽= O6fx|}Ჯ/δ(ޖ]Ev¾R,mt0OWb8;>ſ<a<Tg-ۋ8`\ cqlTIuŴ_Zm)u~ŋcku{,+>%xe]np|Wg!>/>qⷎɯ$b:6tsbñuL՗Wza<~sFqiֶsC [mtҜ>ZOO_Tonاi87\yX6xew XΫ?AN]jfކvnM[<#8ooer 2]ąf}z|/enn_կ$E7/qlkt1#|:.WKiǦ7}s 5w?ox)ӛ7'Xמ׻6qdsK_:A>ʛu=Ĝ1Iv1ݓ6uxiQ|=/'wXAOZMU675VX}/?<5&4{[WWHyնRWX5V5D,L~WGdt}ù+X>u+u|8 v.G'zڼEgd6rz ]M8p#yՐFM )V~x7Ǻ=e/ֺ8\=Ujr9%,_n^zHq]c>vv.y\5t\s,H9nǗî-\5>u,ܽ`WzpTGɷ|ўA el;C-ND=7p7K >lƽ=_xd+a_5k{Q^'Ylث_n}nx[ br3/Tmė/;nǗj _N9i|tnN8C^_l-W|a_fzGbMS8^C]lⅯnvs9k_y}9&r托d9+N$q'}6!&Hj.WMͻ'8$L{X>X^ g5u~lPiq|u}FuJ/h|tꔧ" ׵gqV`PgZΎi{5g p/!|}WΫoQ\ .~77nn^ ž%xyވ ḏ8 *Hu;ּzoo<=1xWwy|p?ӽ4?ud>}aVMxm\}M7b^Mյjn  &./6o~>o8f9%^4YliloqTӞMF\Ox_|[Uz?ݼ0W-.5W;[l|c{6zmqTss՘>DzW?InO/NlŤ$Ts&)믶{rՏ=v;w|yȓj}ȩ7g]tK~˱:̽|7竗S=˷#|t{ :5{W{I{_h.x676k_9w~w>|۷}mS~O]Pɥ?%ҏ|~ MD3¾yK 츥pvF$?⸽t^8wvoayMmݷs}Z;~0xm{j/tsKoՁu`gt,C$ Z){]]~h\^ӭa?xT[uߨfgklx}YǚWg1|q9u&\e^|i8{=}#pL`̷ Qo1 wXc-M„ v|s'0".%iNO3]j|Feu#/?]-~lǀ |*g|dk^'o0av?#l'ӧzWoyO\]w_gy—sZ8W%aK'vk۰ק(v{W'r'_>üq ~R/K14[:Нu1G5{Þ_~:M] /<{v즾߁Fw??|K_=7ǗD?#?=8aF;'! n؟5Ջl]{nmo|{=էmWW}X3}m']oݗ^Ѽ+F_5AZĺxw$oǗjJǫ?ZL-rWvlukyh_o8k>Xz֨O0ڪArt>[xQרNૹlQ>j-~0ٶ~nZY~ޛÈ5٪%p9q.?v>0 NR-;6 y–[#WXg$z'.ѾWt{WX=kS嫷gpD}={Mج=Nçճ~&N]I:֧.'0e/bǼaӻ3?uqi1IN^.uylX(.[{܌O|1N1l^\ls\3Z֎Iif?|٭?şVyzA{l}~)W'>p~ƚyn_8=ƶoyv,|9:fWgӭ#9e?vU?{5?9Ÿ7wc}8o}bw Sz:FoOpqñ?rhbſ{_9ߚHH,m.j7?G,[`x>?jzo\{Syk̅UǬN[뻾 /[ݪow};}3ʶ'=ξ,%;&WƵ:!85g}㸑/V=W;нսs's _xl g->X%ZDI担1c|ߜ.% 竟jOb{/^/|zOg,?.~s0|뮖ta;n͓c_ap%|ٳ齱| 痞c1lxqܓ_i?b;7?-aoy7#l ߹P8曯ZT[hX_a8A1y)ݞ:7OǶ ǎ͵}ƚ?Zt~ عj/weQqjQo6ZWotjF)>yX9ml,j}S텿[+zTZ^^gz><:VCL) bag'p8wK̍p9kÓ܀SWuV+`ĉ5`'~ A^"ށ.{e 7mfݛ;mt#e]\7rM^CH!;i,h~!s`澰c`VqY{Ǭy\]o|֫]Ձg/{h뽇@ŗ>a7`<,É8grfm_|{*WO1'Ū7㋜q߸bW6X\Ǽ`×38yvZ 5nW-i\%NSaj'K7ǟ[W\=|gq0Jgf=ڜڇwcߩq?NK_=rUx`ŗ g61\-~%jq$}o1eK-u9,K4|R뵷fɷy`=ݯd㊧I9l0:*nOWa] T{%K|'5o{@U[W/^\ms \ 7-7R_6.ցy.9;t\}ȶok\ױype:6v{)`zo)f1=SckXp-oҤ7g6~\}O'a/%]4_{෦G#bʾzcw_1{}|a蝟]%:kWzY9l|`5G再zɟߞaTK~[5U'K˾>W7.Y܍voy~ޛ<߂׿J7a:)o79{p,VZRnԎxbLnsOeޱS>]o y:+X8Vokkq|J,Wmpءֽwɿ{{ ~t޻⤻Wyo^z_cc:zaOGl0p cva7G:0},WtYWΐOޖ =Ũ_%bw_M;9{SUف. psM/<7[ƎX78pg>b7s61ݱ񧺾oXo.M_lkAO8fI|%W\3gwp1 +r>և0;{ iq/{#^>7 L9wrTuN֤=l~R%8>ܲyEߨ/M̋ݜbH|l޷nC)ENek| ^|&~:bG{?\XWLҗO; nqK*=|xx-~T<]]!xN0bOzhdXl8>\4͝ 'ͼűǝo _  akZf1I5߰\+pd1F|,ϼXd˛?]uӷE´Np[;.G*/:q<Տ=ՙ籟gO͟+ՁoSo4Oynx&ȟm}=W^T||wr,SQqZi%Iwau9[!TͫfgװNⵎ_s5I_ ۓ0[? ?ۼo_-x#sqa¯yªƚT<_bG6z1é/oǗ=ޚ}%|6Of-{\xO>7²/] /k*ϸ gNjot$'^luîմ=ckFյ蓃M!&4\b#;ᬳ-{Q~xA{3DZs_l^SڶWWsl};_ε?9}z:px{xoވ/L2n4?u3zƐ^5}/5'×{Sbsױ'~oXǧM˱ǎ:^:<1eoN7,W+pO{}vL"63ƿ߰{!R]irxk߫?{ش-Shw IDATzb]dk/bqlv~[Gs8TWagb$n_hNƈ/N$g7q4W}lZQ'{znۛ8|OսŒyq{ {_9ߊtw3:/sP q!N}{>@ǂe ܌cЇ&>_s.YMtyׁ]kt.ՁK?kGKE>0w<ӽU|+^~3'rm>6jY47غ /~OlOV9`ޚoǗv\7|guY}[zٚarGo=p96GI|'>6WO9[ϖo [5l-PNlb;fG$ _ͫ\p헟Ty>S|h/iW?d{pՌȏkk%cz__еƙͰbkx…e+O|mNzq8SyujK⇩&~DuiGq}ؽ.j^{m`~ؕ[[c/ΕgsW_uø.uyn}}U"M9w`o;wlܸ/7i7fk_Mo%;v=_ɕՁw/_[}y\թq L0rc s"~o_j>Exn~bM7μOǗ;_LO(6-W~z~j7?-,>mì}n/¶ŶN={<28sWn5Ӏʁ<<4u]ك [qob^k +@-՛;.:͓KxvpťqӸʟ-lp+bw"1t{d q:|U^gu9ů5ؗͫ7zo/޸z}Q˾/;7r ?>qtkyv Pկ~"7QqL}'_~-#ΎK9?\ɵzt,r,:_sW^-}"^bX7LJ75.?is8pV?HĐ8=5O/f/?k~ C0[o6Yx6F&Xqbhq70oXDžݚ4#sIts1GW6::Zv,#vfx|ۜ+g>3o^LuҮ˜׺54\x{RŚ^4W4WgcYx`qxqf^xހ^Faiǒ߱dg{\$rm;{x#y|ټ˟M;pp4l:{6z0ѽP{J;l<޵;[ҁ.b>mm){78a{ޘ.߇;q裡čK_V77yˇ'l֗|l syzX-'nr 33\[Lۗzi\X)/\zޗxP50$o{/2q#||ogmxOՆ:܋iŇ/[|VMkN?Lqָ?+{(sھ RYO{ qX-W~/C/yv^gFpt cԇtΈMpʛ'ji?aC7ONWr5WNJ8ޞ3;E-_Oi|b=ɗyVLzG{+{̏zFa6cPM|۳ΣOMSϢY4S`,n1홾__=g\omۀu7 ]r_L:&{3 tҗ<N:nWIw\ԁG|ͻP偟ヲ{Rk[=lΦz+q5oޞ1Iʕ<swbpCi<;y}v xgo⏛&p|-q_}^F}%lF{lcLg+/Mv ڼ}Ӱ+ksN,v68=䴎6p5_{5x9>\oW/k;?XJvo<鵭Okpd{94kMvF&^gZO[i{?:pj]Jk7?R\uZ{4_k^,={cjN77;=\:K˾>W7{v3waù10 O!`vCkb:QnZZzOI1YS?H:a柭c!S1O?[WՁJ'}}ν_~{g_89`pײW?Q.3)8~q%oJ%쉽+_5~mŰբNj#əcT^Xv}C}odo)lʍmGyi oS<=WK|49yb8{wr[kY[ ٺ?GȒ/t3[V""U]$g~󨉽/gyⴗjëv__lcgXM9ӟU8R qb4t<0 ֢a2`9D.CT|Zɺ8\6²3k-Vvk_rأFnՁ# or=lp٭{a٩Ô\@Q s ,W~k17y9NL |LNs"w4Nǵ\.<ųq8ڃy4\ydj~g}X^^zkڜ}y<ηyhMj/έ <,LJ兿fޞk\My4_4)qTk.1Huw?ul8㫎8d:+&?!gɛGU7' 9ݛ77h܌b t#r;p;p;p;p;p;;zo{`7=¬w_oypOL bO#Nqn6zX_l[Cuq∇K/p8͜Gц\llꩦ4| #\kR _Vέ"oEN.>t\޳igR\FMrsS)mρU>ba uxjCTCחyf-':0q.j^Xα -.>+,zUkncw.9czb;^j[?_%?*~Et`F=~?lf7eި$Z7E4nvvvvvwv7t> kÜs F_<S4qaksfIdNQzPe' G{?kS7NlY|Gy<ڧo-5{W<: |ivuۅyO_kol=ZpG>\[Sq6:㤫q}٫AM)'7Ɨ=:O'꫎ݓc!~gQma_`sY' ѱ+.Xqb;[teg#_ pHkzc|$m9}ҰQalFqkVKp.[Ǩc 6o<__l?tz?ư|4>mJw!.|ɗ{ċ37#esO7l>xqk9`;:[^>D׺^_>3>b} WxX j G.'\x#i/~4_TGyɎ܍=\s_ {ŪVCb. w%^o|尗|x8[gk]9\xvմ8;]=ŋ[:za[Ql{}&|+9nۏ/^Ų[i+]L솚;-LrC{aW^/a&axL?xB#كLh-μjzl˾v ?v&Lw3 @AipİlF1Cə[g5[Cs1'S'yѺߔ_W~> LݯY&k !NXaOl1Ҿ,GX+dkOt|k}϶:?[քĻ__t}=T۽mˑ4Ylfq|"|8ҏ/[yIOv+a~g_<[a⩎aqbOuC9&O%{ -)g:.Ŭ=zMlkI .Ϙ]_ 'dwo?]g^ٞ/wn D9dxዣXs#\onnnn~`އmJĎv ^>#^1NÜ?-ݛ=J6qr:̒os_Ė?n\0VzË^1a)ݷ/:s0TyIϋ$7~!'Wji.vqߜ\+»ŮbMSN`}ގ/)\rZokqd{kec}`mG{8F 'Xo.ޞ6a¶T= Q^6㡋7n|W [b⊱&5\Oa';t\͋cN'Z{;hO=~ްNps͟ԶRNG4.89lG}?7ǧ@jღ?ۥ7o|ֆ5Ao"Aہہہہہ_`|V?|ܧ{F>ƒJypO+޻XɁQ/ j9V_yi_.k_h57p?iaxyۿON~aQ?V|Ճ='X.7|⾯X=έC\uFl0Փs>ڳ9S ę] Qy\8b`H{S#|lt؛;>EXh'Řc/8Ӟl>zyOrqw! sL|EBsG֜=llŝuk^Z,_5;_ euuL~K{=YwtuDU|ixݳ85+bOpHx[Ôgyn剣:lr|KN^ņׄՑ#eG:ׁ.{s2|oLֽa +>~w|l[wgZ.SK?#o~fm;}`X)r"x[o9W!;3-[^ [)5[ pjj|ղ|ŰْxǑ?}[u'^_&a?3&<7->9_Ǻ'~ksp=4p W<ں7N܉>m~\LZanX?`9Rw]~6Rt4kmd6 W-Ƕ؍ec}yr[rz~Z Q[LJ@7B{3ڀi>`Dڇ-vvvvvvс>gB77=fPN;`=Ll f ?x_$pa legrC6_qrUZ0lF NsԧbƗ86"N^m0qxy=l~ .ջs?Yx~фMq+z1+nݿXmnO֛j N,==/AWkiͿy9O #.y-Fzt֔5[ b$4?.'=”Gl}3_z[>勓~6['qw]sj7=={{85\=a%ϝWwqpbz)a1~/~toO7^6E7nL?> _ ӕہہہہہہD}7K>^;ao~Xw/0!a'/ŦN5e_?l܇ss=_K/l`čխgӟ=W>C=j6|4!?X˗GWwz^>~I9NM ټoŭ[8z|qagb8;l|X㯖/a^~\g0xh#?s:|g>zfkX,f|ß}+iM'J-ó>kRnZ;\so= 1O5?z/a],~QqQ嫖3>{迼 Gs=տl\ 7n<9qm}gGw;vL7=Xgw=Xw!_7|>t'6`?8`Oo!8?!DL= ۉkͷA'te{8^^YgOxwk93кq5ZDҧ?ꓷ#[zy5ߚ9s # IDAT֌=nq'F,>bpF;.gGl|Y~X:ym?}#nkVчΟ=;ً7o? __cVoTګͻϹw/grW|a;.fyIwW6ϸŮO޷ո~qyԧ=}r%s?ˤ>d}w&py{-5,]Cp6c[o{\gٿۿ=l0uڪA8ϐ!#xXsjxy-匧X|,VP<ֆh LWkmUvYYqf ߥ߳J9R%a/tFڅܛѹ:ہہہenzO}-o>zW>qg?s}q]clɮ:c+ gc!.pqT-8qlxl6Lvt].sxX뵏m^}ů_l9|a}}r%|b |I!yt1K;a7ǡFDž3WC/t5O>Ù'g˼/epmŖ#S}qu|b+;|-ڋco-'M LdXoT owLWu><$lg{b]r] c};ژZo~Fشicykb:=6]?oۇ9o'aٽ7a~+8⡓e;j*V5_ ?*'ɣN-zO@ǎvi60owx+x{{rہou{=;>W)X1'oG/ -g1˕mUy#ˋᾨ{߼{oxlkuf_Pw\ٜ<VWC{~}Ln37kb=˝-֫9㣍:{;_ut}o}=w};Q:~O:iJa_{knlrZ{G'޳Aڧ9 ӗ|1`_oߞ;.g!F.ѸbÀ#$<.szE .gDf?GůGW/Z|sqj3}%_k#ȵF{+7|8g+[5?r sb[N'0sc'<:L5cw~369׏GǹU+>ɗf7yV񰷏RoXbwz_=i7<4:п"ܿiMI ҉$5}t<+v컨gޛKW|xY׾7,W|8o wO}gt~/0b[8__Eqd^no.Wu+ [/{b_s&0MߟQ1gj?k-̻IOg[ų#٫GcO$ݼˁ\շpx1I^yМ]NdOJ×|% 98knl+[G9iń/w'|6<<+ޜ_pr_=Z=Fz>8s_8o-lo}Ngz_g`^ʼnnO%[[뭗}cW7gZ_Zý_\sz{X6&%=lLij7ʵ)~;%8rđf4q,:],l0a;.Ņ67TKطk8Mw yR7Iq>ʖ[.Rr%l[k>r'-X/t>+Ro9/kX'ݷP9|>`:~J3Aubvvv3v`zϳ>vw?oޣmavΦy WL\_(|lkoºZl·s{ܤ&*PGuֻ{ǯrG>ut}xmBoIuKeToFg69q;{xkRn8y'{⬓pYjMMY%0[s_$,p,oy`Gмq:_!'b+b3Z~1/QO 6v^iœh|N>^8~C%6reKm=^j2w^|t0/X#,Zlj&>±Xs']b6N~o~rΰzIe^~]w{gNJx<qذ׻zJ>PnD%__;НԶҁnu㖏x4/G|ELO_a=_snᓝbHzPqPUxӼuz`h^:YCv1I1r'1=rSO#<3A= Cw,͓6G>= Vw7OIW5ٵ8\l凩/i\,a˞io(.aWذ|6p-99u:vdkڪ!偩y`A?ٜ''TH#ik.&'^Nɼ!μ|ws:Cĩeu[K L-7K_^I*u[[J.wbs}?o;ϝ'cpIjXa ܷ-ʗ>Yl3fS|breKg^OON z|qtcu-5%/c\_~x_p9q{>-LkS򽦫8l so㛧a-gŵqk1w{KXnG;7׃b^}I/Mlc ϷX~l)qo [GI}9)zؓ|@ѹp^*gY߾19w)gϱ4Mzo뽳ߜO>+hq^zseuw; uuwfyh'H00ݻ/8/{=i5/#1|G(&9\tYSɩַdzyƖ]]prW}a'ofg3ld8|CK/q?lQaNÊ3_ټղ9>$gjfóʍ/qmlbjG}UuV~D Qg`" {lϗ71gi/>sfk}皍,gr-fk}bۚq6T6o>y!lT3-5>Ga荫p|^gqֳ'.ڵ⟧Oӟ{]%]r;s7eߓ; qћ`wyvOx8fbǜ,c- +ޫ<8i~Qnzosc??{Ϻla8'_~}a X8tuzj\{/=#=(r)ރ ^MC,1'w^6-gjKb+G|S< ȝt|Ξ=X)L{S97Sgm?$X|}k;پ B7[q!pv6/0ofgk~pl-D|\-kk.GOuܫwWlݽNzxۏy@(招Ʒk8Ν3_|Cv 'ոu{ѷ͝W3 0aިq&s_G}O:8y'V-\[礹[t};ͤn=|t#g%u}-9Oyl;aιcW ~9^/aBpx\wj,^0x~έ6_G냹r켸4|+K{g2&ſ9(6-lf/kgclh~~ZBn0h&q$}cpvbtpN010W>OϤc^aO43MU}yߗہws9o`7Ϯ *_\ҽ ,x q#{8Ij~ 6җxŶW׼PX814l>q7|{T}Us=o%g [Wݜ}姟~z,LWoNX-Lb=_^,g=Ş:qb-q.LGL7޺&8[5ѹju%l10g.8i_Qr_ {Y!bpNYOU|6W-?>5[<ՠfW9e?և~;}+yA 8zhCpzpƊĔSe.=[>;SIۻ0wAs`zcw8dO߀{#1N,9|n=loag_7>;a~p_ƽsskӹmng!?$ó}$~38U./^Ӥ^յa5LBaXChrQ\4?_v(Q=|bKw,`-<VrSrח핆!JW∵$򚗷\t\S_9ZcoE,yOX0hs5 D[:=ښ^4[5C  km386/}$q%k [mt} {S LszfNPNvj?-nF1q}KW.FXopl+k->Lt'Ƽc/c0՗3ɧn|9XI28 f?+%&@ew;{a#<3{ׇxںѵԃ)q >a6~ˑZ 1/u}Ig6VO^a%C IDAT8ՋߺU-#[5=@__O6rf򩓘$bl $}[[L_t+6gqk}6g{&qƳ]v熽f;Y'dg$|$,W}!9z޹gXs/}'_ElRjez[gq3hzՓ8_aolX n1˳՞o~bAS W+? t!iNNϷռg_>~[iprm멎4lu7o/Ր}}z7t/|4jM:vkj~{ ;XN^~>'5 5|l3tSY؍~>6?P+өw>{n6gs\DbĜS||7`{'=ܛԧ[/?72hg995 |~+ųrs-W癘j_x4UOY:9 Khܤ>߼uyYlu,\a^T0θ ~!/o.^M$nz֕^wmBs F/R]:_ZԚ+-?Z|NV뀦a:̯|L`e__г'x=Kgc=`{fV7K_t@>s~>=b8w/>͞o9އ/!쩱5/& /꥓|>Q/6c3l(_uZ{Pâ}Z'0 k7~H=Rz_ S^ysu'76_Z )<`mTK0[q/ʓu9ܼܾ&.LٷWF>ͫmuJo|q4Q=潟k/8W;Lܴu1Ųw:7u\Iu^ Om<o$ۮKėvWӖgxүg97Eĺɞo]Қnċ#Z6Z!|b^ |b?~H$[mLm>XͽnG8[{po}.~3.>}a:]'{{`zaG\-E||嫦rظuN&u衩'1a5uu|m3Aqlr9$\=iˇ+ɳ9u:mTk|Aʟ-jak>.}8^^k3Wʹ^Ϋemņ}Ko'N٭#{Y.|d9X4V7Ͷ{23[$4ګm[a58aÙ/}[<RO)3o-5kO/~1>R7Vȶ򅱆]m^,:[_Do[?"Řx%}OڼAO{vvvvv3ug獤/0ɩ5/rY+<8 syC4quz1t?6I~Z>bl6/gɹf;l~r׭}tl-(o_PeWŻ6j4?oG|O-Wy6}O0<|[GqҸO)nG̊<['&V'y&O5ԟhzb 6Ր;~-FtG^m̍aۿXXbdվk&˾'G}t27nnnnn>zFg-|s{tC˞Ԗ/y6/ް{0ëk1js0p'_l :$h-|lA.NxrzW`&q'Zb|-ڛVW3WWpg㣳ǿl87/۞+q9zHn=0> ^;r-VlajM/;X&y6oY|-~nZroyԹ=ݘ3u:j4|8_z7xO{鮓3X9{G≫3\k\`)]m˳\/tAvӴWnnnnn>BϮnXO9֫=\g'o~d~_Wz-9ۮOZ:;:Ê36Oy/ݜϿƮ=.`Nj xpqaO7U| Å-pKv1=c퉟OuLŨKk.Ś^{n]aŬW`Ѓ]U7S>5጗gn§'DN9Hxj7o?SW섭cGu6l0/.6xQ\3Фklm]>818KϺcQtb+!96K7TzUoeoﱈG ֎.u՗uK{ą_"ހ K/͆pO1c.uIǑ&g8 vy;.y{yp8WWjr}\Gl{v.k84pMfOX~,/W;qS|xP\q}$zySp|Ir_#bo⬉ ۹-&אg%0t{͡G_:b` g^6gÈX']|q˙^l{^Bc"/̷E5M'~apw^]5IGx0eOm!]XI\b?)?bہہہہہہw@7DZM~;:o z(qs߃S*ɵs 8{km㚋).7c o y{b¦Z&~Z|Akc!>{$R\jk~1laiaO S||j\bz`/ =r(V)9b>~ּ}_u6:ıZ\>2.6Xn,jWc14\)o働q֫"߷m܏/~DoہہہہہOށngf{jہ:|=nPǃVkDs_h[Z9 K'G^qrÒZlMl+|/787ŘW\>üx:]_>+&]=å_64j $Nvy{e_^qOmVaNVO-$s~=,h؍ 'rxD__6ȆQ=|ms^4Y^x§oc0zdklMw_kcc9/??9\0erg8WjOOTW>%O ՅK}8T3]S^iM]܎}uL8`qެ#_U[Ϲq9[?}{ݼ;y0ohVcGalty_ aʕO=dHYèOR.k} f}Xˆiju阊7+raY|2\q)8q/.7_"ԧRX_|9˕N|s%_sDl~-k|OO~{1inmSuSorܺZʹx*ǫ+H}5 nXbw1s<=~Dw_#>6s/bWju|W'`[luН||ߚ?';$wtvYGņe oήGay/牱rnnnnn>YΛOV-vgu`oA{`0<$o]S uqeS{mp$]<4ڛ9W'/g޺9qlZO \[{TN3w(NL\H l$ sR)tIjW#٬"{|awnqx_9!Kٜa{͛--o^\57x^ > OÔ/yݺ]5Fa1oio⭗S^\k{6k8O#laO/Vv7sպzNߜ/=bԁa`V;)6`['J5Ǖ/orU ;r-gqq56_zU/?v9 ޚTcK[}ϳGWR'adsSbyoj]F;S08j8z{#}L :Hz:4$&\ZتN`jXũ_¼˓|qކWl49?|ǻ5w~_onnnn>C otCxyi^ Oldϼ[M &j#0>/&n:pj+5]tT.]8=wj\%4l{PS_{~'Q}?&O^‡z):$&q81[^F~=8om8 obH`[oLs6g/]7UO4[ Z QNo?^|%xqek.yy`i gdO秳yKj C7Wkթòy$zy3Hxyi[-Ųvٷ7H啫\0[>-ۚ 7'j Co|p1'l|{+&o;p;p;p;p;p;p;p;!; s^nV0+aO{꒛zæY7o/xͷksRv>kDž^o=XqZg'g-ji}bon؍[3_xIgF/Wsyȿ5k9)oz]5ǓfwQ<-vXgr0ľ/'k 6o׺vo#ūF\.ي V_{o6ϿYL0\;W\X㙨sEN"lv7,iq&xڭ ButL;d̋G7}qho^-8*߾pY[ 3gگ卯uy:Ç;1 뺀5԰skb}{A<xy짨X?=_Nf3xƵsȕ՞k-8` -˾>7'@75[|o|xp@zq>M0ppG`o]K=LCC0 . ՜O̿W,oY'kkNW;ey;&Wmb R͐7057/Ƽz$8? gt sY7}cط/D-|~mZhqkXoojz n6s{v`/-po:l:[=< 9^VW~Mʗ)RA|ݺcyaQqbլ^T_/᫩ޚoυ|.& ot|ƙۇ\Ii{3\Sqհ6C<.ve<}:̍Ň-[\k|{ IDATlaͷo_>sGeG<*ہہہہہہہہw@7=t37@fOϜCN8#ΰ6p+޽}E_4TCqͷ]7\jl_Ӹ0U^YL5Єosg"WxD91lG7_^!Zxw^l|b o$ C7WC־ [wbIl틷l],]>sGyc.6;oΞl<ò5>sryt·>u~'_|ֆus)?߾.G[5dMhsr}yȖ\:/g9m]զsa\\e;.5dW~~pqXK~;~|ٛOV-vgu_7=X<(yˆOv7yyod 4_1?c0'xU? ֟]lp~k8r/u|'^8aLrIn?l 7߾j//8rz8^^vZwNz0^ Opu*Z XYӤ>qߜ/gy;7q?O;~qIuӞ؈Wzkw`_ ?-g{&QqMI1&$"06DL06䜅 2"a`l[gk静E_Oh~ C~ai?nA@;g::lIĀ=9[-:qR)Ubɖ}Y'o| 0a>|Ŏz2|?č, GN8<,b'SnOn$  H@DSD}NSaSO}NRrRU''JOY_/)DȪyr;>rbON,N'l_Ёy+G<_eɩ_ɱ~_-z%m}_U[r-e1!K#f8Sڑ^ՙWF66ęv䉭~ͫ >E^:eNI/2R$O_{SNN)qGZ`.[:}~FGSF}V/gQ,Bnfrʤb<ы<9~v+n#{ ^cC-, pVEklU3}DN|KI[=mCWNt]O$  H`S`Ҟ{&L9 ħOHDF9u)qT1bSdi'yړ?A{m~z-/ 'LuW%"rmǖϫSD?m/ulyoa=~iy':58O6_?c9zC˦覟E=m g<#eS اNN_Ę KJLC1#qNŜ~Wr#:5*`u]ه<$  H@&A Հ'tr+A3G]>uaNέF$l|$~9dD?~(WAWL$ڲ>: _c:%Gni.cGN𡞘SFOyƑk|bG}6u6RSNɉ?}Wb#^HbK<~-[b}ԳE-cC ymf;I{kFaZ}-u=}j99l$:j{?5~/p2&F(ONإH|.FݔKdӆ,)SOvr:u\=>(gK%O;y$ڒjT}]#b~l<>h6ȩGtꖶI>OX'Dj(] 䱉]#ԱMU/}v6Rli6 ^ R|&Oɫ^l9-zekN5ؒyd/8?eD}AOgL^RC;@~)';5a>m?)إož8*$ H@$Gpe@NrB@=2ѯ8N ژ->IG!'pF6bO/ceWY_ ;tj9}CyMwW;cudl9e"oLlEY-_N=Ɇ6[D'S|嚪2"إ2C{~c97z5e?MLɫ^ٗng|GF{J Xp[r~Ћ,#c_2ԫUA|vKW(|Q1 DZE-6|'W'2I^C|fK9 H?ɆM-2~B7juЩWkLۤ3:emg'?A?bK=1>Dg?-elIɳ?dN~IߑEƒ[iOu Ҿ;-w7oy[}k^mny[6g>w'W$  H@~ӟv~]8uOstsH&@q2?'V8>:3礂\ #2mI`d"R/Gʱ'Fv$ddKJkq–}&O[b&[7Yɫ?t—NJ'ybDrR_S-9ٟ0<[Oj'K~%N'<<>lِgC7>/mu?Ro1ra3]H##RF/Ĕ2ɉnb}d,s+H[MOݯc1}C9|X@/qPFngr|OIiOȱ_&*5^lj!:yRO;>)ц-yRՋ,:WNx=9rRㇼnS)d{*ﳞ~p_z3 Gnw[%" H@$5R⌏V~_#NNȳIޏ!zϳ/<ȱ#wt <~#KSNVYu@y gl,eޛX }a ScOdI;5zt#O51#y/e?#`0N~Iؑhя6rH;yw H@$ @~s޷Wjs;ܡ+m>7=kӟ:d#},1礂+usB |g0'TȰba=>~r2r')l᳖# E)oK8(+^}-WZ+6Yg|dA#mӞ}3>T.cflot>)#m/ +c}=}=uN>>>I?آ_ Cw%v5Ie)s|D'ytSbA/ǖ~%%qll 'RNcC9~3_Ԅ}y:bʝMvʉ)7r-nqlg;=v>gc}Eo}]thO7:aJl*&MrI/zbErTO3ϢGgNE/g|L/GlSG7~؏3rt:9yeC{Oܑ;/ӡ g|w7u3el?yt;p!!K}y:}W#1/ E[ęq}gSNySϞOً=N9yN_Xn׭CUg?Yp' H@$ =Mw_6=iҟy] 'vK^Ǭ~f^9EHo|#$d(,_}Ըmlj}<Ϋv!1V)_ut>Y6>;9z=~ji)i'On.2##ϱ~$EyãRN̩'CIѫm<}[˩}Om*K6pM}_Ӗ<|'rdU^+Nynk{%9HZ;G{ݨyܼMo]8xm^r H@$]O @8Y:;:nzӛ6뻹NpJ^'&$n'վ0=2|irwNOtӖ\yC-'-,1j$|7zMsRC=GeC8ul]Rti'ӖFN;PG~cseܦYvān0މ%K_Z+;t~ }-Ju;}Q&cUĖG0kz8"0&SN13 BI~>rtQOGOߐcrRI?} %[luѥo$>+y?6X|TI<>)O:E/)c-:裓~5}3}6 ~t6a>2⏜ ]E3}?|$wE8}yP-rwb@Fm?!'^R⧌?o$|$rm⤜ziolcl62vI_tFe}PG}tjW\tO}{4f1e$  H`6N:٢y sf3LwҶ$Nz撜D Nޒ ٪ᇓ t0K?91ɉ /B="˖ůO8#G[#H;> Nn}`q6pbש}%N"Oh1g,*o|/Kjߑ3ٗĕF}Dl\\OLw_71G'lٗugU#.3B9^#}&~>r\Ը('#wyG<}F'}b:}_C<6t??T캆cîǚ y>X8(g(SI"bM]"GzKcƎ?l>ņ/q$㿶wK+{jڱ"m9:زa}Yݝi}_;@/8݅.t/o|ͅ/|Ṻ6H@$  l~sl2<7sNj_sw.~A&s" ~L}a.<['(/tg9m⧟8Q'tSL>OWe)'f>UWuj)_l5?7G^D/_iCrR,mkj>$md1*cRs=yW/e3nk9'Z{ک=y/i#To_uYc'jWڥd٪ݢrl㻯0&^8#}2 ?c)!GV7`/Oo8=e]r}?d?Q;}-y-8##~y,%^}#B>H_O~2vscVk_W H@$u3UA9]Ңy`ms֜rW"~tsu 27Li6ȕ%qR <WM?䫾J[%ƞzNTO]d(6WD?A[|_bWbNU_k/dG8H!O<<$t2y@SOI_F7:뱩~Q‰ļC9`E1ԶK!φl7mfU99`K?r yzяϴ''~F@F995ObrK{Ձ u'Fy?GSQfc]=]la6 IDAT@=bOѯj_AV#c|&+$͖ؒ̕F"Gx(gb!G/?~ylOI>#}'Tu?Yb!֌%ho9T3ɣGآcedƆ8}ޓi}'xzK8/JWY.W=X$  H`{`;>Ӯ%Pt< o^Z<`7qxwe.sgI='9 θynUI }~/-}G<~j?.'r<}d"D!G'UIJ?-K=Ծjx?y)W?HecG}=)q.kS`XXײ. 25{<1xZ6e1%I/#K_5E{?vl,,>𛾈GrH;ْjjUxH5Z-7 UN;چmPG6O9q^mjS'O|GO;ey& eR%E:[s| O$|$0ϱw,H-q'آKzM:[OdA :0>cjF|/yթ5ا=>SNJ{|^}E&gVcݕ/ "Zg?91[U8Pgfnx3)ܽ/uAe/{;up֍l8V{ ;v֍l,Z`Dc%$uNWz}>3w}L3?9ٜLgž9'9l$l!g3r-km}AyG,"elH:ݔ_9:?O†8.m?#O c,}+_i~_5X4'}DF^dMb&O\о)-k+˖՟g}- à:X]җaˆ^?hyY6c@^闼E=UbLek2zV%sGrR/usz3G+]J1J{M\677)͋?6-9_e}1RtX_'Ն|-;8O-!O6I~# KIOzRg>s { '0[ڳl뜎[iot5~rNr;gČDRdXi[ϾW4w#@%<ǪؤEv9ݢy`\:8Ȃ'$seIV??5;}e,>k{n/髯Wcvb_O? ~=O}|yv՟gyqCm>kywq'&7/UZƓSZiL˾߈-}?Z[좓<5"O9qMlUbSU3ut6WYYR潑ω]^kk}cL&~߿2y>hG?DߪEwϢ>v$t _ܨ-9y  H@$0 ;ӝt]4/ yjg;O^OlDo$؎8&cgĜfOu?CaSݏcG_~7|;zzԣF;~b[e{rڶ^կ}'y%zԣ?~ͫmQm-}q]~_-rtdiyH"۴bOGxY|R>>~ROZ-m9i_+jCSrbg>&X={ڈOM\~_5&_˶o꓿PrHs;(x;vmߙd|u1vk_LqƉ'~7#g]rk{)<>я6 n+C=NDXm1JUHlmK괧= v}ouk5#/|y@xckk2Ls`LM&"}/~\zDQϟfeccP5mwaE9әδ[2}P;ꨣ~?DVșy䑃{gJmciw*, H@v %1Ҵ|y /qK{^w\$  H@Gų;hcf[j/J;&x,i͍o|㮝?$ H@v,>wԕv pv@Lp +pT$  H`YIz{ۜtۭbn%hg$  H@$  H@$tl! H@$  H@$ =Jž=%  H@$  H@$طXI$  H@$  H@{}{K@$  H@$  H`poԓ$  H@$  H@(F׿no6H)o|[j;)%c]YYƁ`\֛|;i~߭\HZo~_W6ﻟ=V%} p8@dbs6:G?Qoyƥzvԝq^<O\Ψ8z@Xž2^p`sЅ.va ']Oo|csK\b`:7i7ګ9yfWj5G79yq`g3{ ɭnd wg+\ y恜k7o>/<ws;}Hm:W/5 0Xf=h@j>e/{n 6 _¥asc||=M-+O~+9iV.uK_H]٭nu.&h󶷿s#ԧ>ug{Sj咗ʹuk]Z+5sm8w:g:әNQZPjVZU280 8?s_3vX%vdvj7VaM u|x;X}ӟk9Ӟ+B*y{.Eϸ%+sn{}7 [^<菺y`{:;.څ٪i/}"ܘm1Dolxk\ce h!Fǣ%83<0t|\_\yaq>OεN *3E~ӝnM Vyvs}1V?Ƕ?Vu>O̵ U3>46o\uqk{pmnr'?Gzի}k^HUG+^r}Zv~_ R]/{ 1nca1{K_kkYi(3V2fX7wc9ļB`mo{LC۹}m=VY5wgcַ8rV W:cݣ~=ϝ}߹QOb_;v݁ŗ/~h>Yp>hWd/I,ā.ڙׅk;|s[#ٱϟ&~ғ4Po2?aK-l|!_VBe߼j}GͮU{U{+Р}b_<'6cWm3Hv=@ 0:}80P -@nw[窣y̎K^1:Y3jGR{g7V| >Nj¶_aLrёl]l.vumz׻FuyC{[ȼ<=%r׎t:4YƉVk[Ǧ-aU[*x3 ~*„Y_8>8!;.+ yEaSie{GrcqWҕRƩۦio]BpU[*o TކHc݃?#c->Ol}bb_byfH{<&_?vhK9q/DûL˛:YX~ _ˆxXzli}xߤ~-OVtW起t6OԴuXx Xձm:zHjo eX?_lpQۧ\[@ iGb3 ?L/=y`*gd>t3um@#Ǽqn=s |W-G<}R>icϺ3Zb)zT9DNvM`rN}D_8UH]GPR}FΪ'vMΗSyY}6cWF ;cgqƂzl-/Es˚' tÈxDު=V{Wr^Eǃ[g֎|<ζ?G[@ w:q{=A?\IO3kHƞJ}7F h8q@˝Wkm,h ,d{u=pe&cIZeb,2~"e߆i}xN,%U\ųE Njr*/s X>},s N~1|2:\yYzn>Ծᖲo}[o| 3cÏRvc‚RꫜYwi_|1aSˋk[i}r5ϔVN\ Ƴ9nAe/{*YEXcRͱi:KZ8D{in$˚oq[trH{rج5|ºF;Œ:ȾU~''PL״}s6MsdV)\mզ]<4LHbnڎM>k>I`7c(8F\QO7w{7'{dv3Tvn^Vc0ad,_d3=uXり}g`<wCmo{|,c*o_gWWO9.qFIW)=OO/qn-󼧽N**qsZNL^4~v'>cmT26ТD'6m[?WXVc2^u,jy}m6c(OB\U?+sy{^rXU?/ne"U3+ڞrm m)/'b}d& lUy{\lkV[$ IDAT|ͳ[]JJ>f83u,-V|Z-A[>Ȥ]}qBb?ߛzG?rfGLG4lž;._?zQkR.>j36\%%*VvO}d}ѿ.GȾqɻi`<8y:%qGoڷkγ;nt"ܸfG>bh;c15o$o% 6?`q㨶Y}nu[u{QR>z[HM;?"2&X/|j:~>%X_vcy[ߺs?֔PdU%\$qݟͳe>㸀~ŞEGFb:mؗa_ o~]E/zy*w.+>9t-R.rSQd<{e+zue/?`"X?<)3B9PZ:mc"NܷZV qz\Qg,JRyW;d Zf,7j,cYȨ>,<25c"RĆG6c~W훓_.6;|k^3:J l~"L{;*?J+_]p3Ls1t:eamҗsh?{:9c_*U,W8]y Ozx~U:YjK% 1\ hX;h~'5zԣ:Nyc>~q_~pɺG3?>KZinh]XXţ=]iW+^ڬ\Dz哟\_WKh?V؁_lܼ}&ʵ}[nZG>5 ۉwN׽X AJ{fsWuys;i%c&_`#>㝱~ի^YXPYh'x3DoMF?ګkOVoo]i5گrj"L#E+}{Wj+\ ];w*e+"ޖ^m2GHJ؍կ~uoNuS ^}{Uw_ioy[vJ:-/Y+Ɩ?pNe"WWӸ3_? yQGp+ |S}@g>+ۉ^5&.J4'Gӟ^ʕc[ڹ}k܏9q v!a63 t; "eg+W0f RCow {?7+XMxEOr_WS%gA|w]hiqx{pU܂~%wl[g<|p~n+_\)>oe oxCԺy7U@y෿Ncc9C:1s>mn:Wd Ϫ}/~qObX|=94/L'оaL-Dg}Va_L@0c^rP[.殴_m+򐇌rcB*Vǯ}DqepA. Tw]V/'4ۅvж]]y¯RX4w|;o x, }Ƶ5?څ]]iOFU(L=Yi)1z\Xiʻ)]_??Zi*˝m"!shF91wGolZعcu;qۏU{Bj/tŽϸE\M(I =_Xlh/]~#\QO~e՝_vݯUwb~Qʿa*]ZE!8ecMղ\k'Kw\q\ǃGUtw<$H2n?Ol;ݸB _B_o\•y[=2ݱ?S>Ϯ\镫Ɣ9rU9@Ɠ+Ǽd;(#}y ϟenldxVo+wU1|qssK[փ+ԖrŔ^&F>=}շAž1$  H@$  H@ B$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$ DIDAT H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H`\$  H@$  H@\2Q" H@$  H@$ Ipof$  H@$  H@poD$  H@$  H@&IžIAK@$  H@$  H`Hž!%$  H@$  H@$&9l- H@$  H@$ !LH@$  H@$  H` MIENDB`PyBDSF-1.10.1/doc/source/art_fit_def.png000066400000000000000000033576111420247104600176620ustar00rootroot00000000000000PNG  IHDRrF/iCCPICC Profilexc``2ptqre``+) rwRR` ``\\yy | 2 U +'300%@q9@HR6. r!+ v.z H}:b'A2 vIj^ʢ#ǔTbϼĒZ@! A!ahii "q(v!( cd2f` G1G)I/15C}}sïPo pHYsgR IDATx=GUl4!AВФ J E!A HB1N"I@Ez R (|G:o{_wwݝ̙3gfӆ4$  H@$  H@$ w H@$  H@$  H@> $  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2  H@$  H@$ 5!oMِ$  H@$  H@>ˀ$  H@$  H@քƾ5yfC$  H@$  H@,$  H@$  H@XA H@$  H@$  h H@$  H@$  H`Mh[i6$  H@$  H@$2 }F_ro}kWRG]7=O:rOQ4Nۿ-߽uM$w]HsvVՎ# #fNN_t+]w<9]Xp`9pݨp}sMᶷmPyt/{:/yK>K۫_=~b}k?2ycNoz_;)_s/Nwjng5xWkFq<C9yݝ#[S, H@ >vuf@Kq{\]]&71\h:}f* ,__/78s??ٛ8߮͛I@K7yGMof7k~h׼|27:{M bl$(;-W՚ _ͥ.uK@$ <яn wXyAFh,!2[kObXs\t~sL1|͛=^<}˳2vWbc n0O|b1=!i { ^\"iԧn7d=ݒWu+# H@V"`lL+{y$X XVouXJstg +ҤWrÔ!Cuz<ͫ^N55$T$  )wǚlI@.MY[6z5cSs_җ3ZYĺ kĢ .wZW Lx__v܏6Ozғʵ4k7\r^|/?S?Uօa:0 i~ǚpd!}Vo~Z׺huĆ%ͷo|cîWy?KMgf* ײqN#12mB:ԁOnw{ر574pT,0]F(x沗ll;X@E)/F1k0=Hza3L'CLbZ*ylgHZ)Gyds?sdX?%  U,P4x}_oiF=K} ?]vggR!S͏ȏI;D ]6j*O5p#四& dL.6(*aЗr\eTĊggr/~WzyVN}!}!xGS, ϛtY!~}AַUtCA\F?eY,,C~vkK_R.6x]X&% ,gBAyeJtʱV3u(1ug zgz\{ݮ<x_gN^t?-n}9y_!9A9!0gVe>?Ŀ|#%CZ)ܗ>mȔ+_z}ߗQo%{d4Q)aS2TZr?xuk(ԭ,E=V H`xЃVT1\)UQ?Hp//ubk~ʽ;ƽCQ[v7ިk^|e-knsLwXecyO>CamAƽ66w1)ha7eR`ȧ=i]^CIov2| Ũk x#ZS{(s__^('xx~ӆ!v!n.dd')MMZvC'Ԇ1x* I@1;O6:]CXtԆNolNO-Řy]*F̵s7 `F]f7^Ɠ/x 18aYor0tg cWK>&崛W_ h83x6?y}A_b"K0k(_H,7S̼_I{8`ƀhZFe ð2Cŀo ϩ﷾0,ݍ,q Ow_N |~v?,*՟R :n8 miJ"ۍ=3Uz6lI |z~jꬔew/L}Lie7oSR$ %ww{}/xDZ N\亨Xo@(#D"x 0ZdXs4\÷%8jF ccOP2#ЗC~3 %h[ 8餓'd柑UFf !S<2 H&C<ϟzxF? 2j#z(ޛ` ^xg#śݥ]cvZ=xrZF prܦ =) H`O# dd/uo6Tk}7#7S.EWv0voNC'mm^x%!;o3!h!.p;%'xb' ,1G[7foٲqݭ 6} oy[,w OPhh;(PvC),K>Z__B'ċ*=oS6|U߳rr''IJ5x}1,SӿguVE?7^x;D:y׻޵x]nZ({c݂ Bo%F=tt`3fP+%Wt=9D]٠7>lG! ЧAD$PWAg< 'RMy~˕2̬00o۹8ٽSN)xpUyQOf:^SIL$<'k ߡ_Ч6~ 0#)kcfKvlhG^>&sպ>;hoKߐr[ IDATN?% KQxY?}+0)u3@(mT],xsucuv`[5„ %ܐқ%mLE_SaD)/x.$ $P{ ya0([Hm^. 9d]8K|a(0CDyt]kP@R R+]~~;W=«Sá̶m~K;ھtߙ >NYI݂yF!<^CoJA_|;VxI ̵<[$:mfL{(Ƃt#|0v eg&=hClF|>1nΓ* '300zw\z ߙe{U0eRV Nw?D/3މ#8 t=1B/}ۅ^}ݜjrʳuyF e;ϛ>IvajðӅCtz Ϝ:z~>c}an>nK}O'?ɝΉGgLe|'&lVt U{&3@s2cy|gF}ˆBH#-ɭ\ЦO1m.Sv_oHi+|r6\`T$ =@4+cxSOœrs>0R~*z Qlc +!2OcQR?vA+yAH7x1HuZ^υO&0$L Ȱ}%c(ر?c_xV!ek0rӍ},C -^Ww/v@m 2W܌d:f[&X[>! XN}tr x̎Ix۵-ho ck*5_[wPy>R~LVċ^ xtM]GG8Lv{* f5sCW A3! a1./[d vƖ=ORn“iC0`tc:p֗2q^߮͠p }/nxw>fOw72>nj}_)1sh0dSy2}1#K?F0O3$`_tt +G8qY vlg]Z;Lј~672H@{@=2IcȔ0bj1k\(L]aʝtЖ3ʞ2]v$U>Cnb\O|,;*SW ^B!̔3lVrJ83/u.@NMavZ#eL TéPbA=$ H` 0 H ܊a,-m,АkcpLӬw-9ߟ'47&L? S>W'Kd0nHN0S>Y hi}Lf:vNha>O>Et_$X'|td& ?bM&<2C)qHƏP'N-p` +´ֱw0 5MKYdSzSSu>a옰 BCS y.?)Y^تLNa0zυG=Qm8m)3[6r $2ܷRRWlӮ~K?zmVbZ H`Sr] .fmH}]P\*.kHdt6SnHƗr ;hq0^1&CCX"%]ck$qʲB0W6٭,%@T$X%׭ H@H^e=.ݩdpZx:O$ua m 'at֞cm1۰*:{̱J}8YjN脳W}C\ya(`Ve!5gi1W3}tڠі3N2.l\e\K;O-|naJmEpwzl; ڊ+A>fUc:x]*,%3R Yi~g JL VmFmh{`lqkiPݬ CN!*[KSD9X[TW7ӏLj*uu|CS:1*mvŒmH<]FY5vk:CxYtx^Sg1z11NOac)e9\YAIH[)Oҝ”$pP8tBbd@ @Lr0W z05%l~0&sm0 ۖs>;vi{ X)lNƀ*:eJlϪ-vx*|dӔ DYfG?}?v?6ma,5m\g36.8W+#UJ'a#NVfOq(Ne da\rʃ1>^ $8`~%ݽ!ԁ1 ̸>_лdcg28uصA0sܧ͔z`(=ƾLAAI`4Uީ[?TǗM긖 S^{1=X2b4ZXH' 8Wd.)Ca8ApOU8(TR)(T!Pcs =! H` 5BaT7uo@X-%aTutӨ5V=ڠlߟZVw13sNGlPG~Le5-np:7@?[EŠwl0rՂv8=\#Cp}z)"' 2_|{Nv.{=\n2% ƾˤiƷw& b]R:jL@ ` z3=800΀;Sc~˺eXSp!?q7WokYp~މE{]V$ܘ> c3GBbte*:9cxLIVSaՊ\x 3u>4s1e/- vć7_*L a-\ԝ&:ug,/˔ZǕFf OOf-E^"'_lbTcH嬳jX*v -FU. }tXwkwZY;-ul{;mk 7AUxbx'xNM7Uop eYkSf5xM+kv3}A?oQdY5_;UKyUNW}^sa]a4Z%itǷciS:RjNݒ8,~ެ78%u7uMFib3NZ"c}؍Ŷ ܡ5X ~PYbG}h 6kIu8v!!Db׷9g=4f?O/ct:Isurh1o)WL?UF1 H@MCǚNtO9yreɂGTGo_~˄=ǮvױiCn܀no?X?yͲql&˥LgfI1o|~rcaճ GCi\ ];v2_py]!\{w9276~>ox3a+Ǧ2{lX핉3L4ayr6נ a3$zDa`ʸXHfb>O?l7v[cv{sK1-8 ĶeYVJi7hpid=tsS=c)I←0zgkKcl<ljN ~ڏsen.P$ Inqxv*ۻj zm=z2|/1\0ԵMV±lz9f˰[B=*讜ۮv8s7}Oc__&mĕSC9V???w;uCewkx;x6Ma]ԩYۮt\/xcE;׆9ti^lw増 ?ֆ{ƾ=LE.wKb +SJNaNM:m'SFf4&x`^\?!L :XeYNaԔdY! );_DY7Żlꕞ-o{&=jXV k"scJAAvX8^s0ar9' ŸGၔj1\r+Yy=eC6Z<RkwJ# \^SXoh-oyKOrmRfLyb̛JWYΌcL66I,PmvrgT rSV nm'o'V$-99sLMa]uwvCX7%K=S:oavwLɣMw O7'F>ɬ|r',!a}T6M׊us#SzNN0't&go ӻun ct ~(NȴNٲz2M[fSfsL T;SҔMn]tLY./7э}sjmҜ3:0Nma}V9ϴ1!ȹG!k_e3bٲc ׸FwoSXO5EwK(>&SS@ywgz-뼡2KNTtnQw~g3 ^-a3K7!,.c"I!s[0{p2^7T,JF˶9rPB̆0H;<#Gz׻ʂ6 7FH[0(w'xbY.GH赮ueN!QfSQ8VJ 'tRvcSu{5xay(>ye_ oޙ!O yx$ &I}J;4dԢ-%s=0|#p9^nlXn=nO|g>݄{=x_^ ?C{0=ӺvQ=}q,g`%[>s z/x 6-Lc`uwᇗ4gwNj9e@ ґgM AvRÎCcka4z_ sK\g=̢I)3oI*{%M eH07vF'FZY1t!):$LGqD b v_AbZqwU].)L1|X7Ajx8#Z9. }r&}SQoy[^rqmL;xoReϺ鐒eꭼnYǠGR;Tj:vȠ" AahBb WB{K] Jw0XqJdN(]ƹɰQ.|4MyNo~6.Lt8㊩=% yP8a  % ;Tu i;ص1FG 550^v¸w1:ԝ_xB<^@Ƀܕ1]% ~ƴ.P„!  um(/xLGO50 p iC#rMt0oxOb8<  H`' POe=[QOy`iR'S=pzDǿhiB]I.\x-ܫKL{[8_.0է1yE6/qڄ|&?9Tyoowەv {|U}UC0u T6ݻ\tL w2Uz e2>$P)NOT@K|Ɔ]f嶷mOˡ{,ctǑN=.>&7iØROxrN|]5<0B]*A7gPy{t4ݜ;3Lx1Ƭrn3ν:3F=4fyaV7XFk\.'*ϑtQd:e6ܞ6#ϣN%4ό\QhƄH\=[0td.&қ +} I,v;R"+^ݟ῔sv~pXr!]LEأ0ޡ {Y)I%F#fsƾi,NJFL)nct(ycCƾkctwC3oc$CLJH> nqH|cݘ<)cƞb6F,O5ֹ%#2Kvvs(0\ H@D6 kuNHԐd7d#<1g_YmxowavGbݴұ1}5t}mjP<<4GV٥ejm; D^xN3W <򺾱_1dG8֟fvhnPg#v'!ceZ~U^-<]>(`{mLo9ݫ6Xqw>;Vz~SNbvE1G?.vj?z=1t='Q>cR;e0UA rA;0a#_FL'?<ۘ1ԥk?IdN0c`J,;CŬ%RTqϵ.fۨxio˩$c9t^Yd2R^71Y~2shܼq]TNqpfQo r4O}S! CYφiUď+`rC-aF S:l\2MBކ L+/qpñSY؛#eD4%X.JE#y'晆p,L[i\O~Gre$6[a2i@ Nח#ryxWO }#V{אWY`}AKE0wl1`;s Lg)yv, IDAT'W1o֧=%OmezOsWw9ݟv'ma=5c$Fq{4lb(R$0DrrJ& ֡`$  :vg*: (o( H`0l1!5Ny6nбGɐ~%HS¨i 0i蛢fհ47^L 9 H@`]ϐ9uW$  l# |*}1Ձ&@?/}Ng=3Klm w4rEˎLUĸe*2v`]ާb%  H`YL_5Jp%ɥn^n~cg椓Nj&H@$  H@4+$ Le'(vpbi.x2; D5%w`0v[f5b$  H@$  l }ۂH$  H@$  H@$p Aǁ@$  H@$  H@B@c߶`4 H@$  H@$  x30$  H@$  H@zE͍o|&7I}nOew{sG4GuԖG=E|l. 8%/ٙY+R7ߖ=A*7ݖv;׼5]>۷_yӏ;onwҦoܱ$ M_zC˿˥C9yNI屳>@'|6|k_iۯ_9ܯؕts1]y󞷣;Ӻg// ˿X_6M s{{z,7,~b ]ɾ!.x??j~~=??o0]2rPOCtTyϫmh_W;ηMA(wʹ \yspy0<> kv2E!)ٟ1yLف۩$E7 _5qwCs\e0^;X;ӱ<}9!hY g kj^7??\0qC=.wi(?^W|4/zыn5 F!??s3tPmOO6Zq zizrbA}O& ^͌]+8ӻg+ *'p>7~7v?QX??6 mCMozSOOac'|rs)_~J:{.}*w~+qȋ~~s0H``>餓Jt}K^!K}FA}>ͫ|OG?%}j`_gW* qS^!z=1kBO'?SԆic^SxN]׽:=;'ۿ[O~$/~;V^q[ݪʏ޿2 -=qMf!=mK\ uo;CG>򑆥o){3*}<FE茭O&g>$kmLwޣƺQ`c 4xr*Giz~vI.u9ǞO $ }Ae,B"&R$p׻޵yܝ{[}?ؾ|+_| ^W^u/c w _Z7эKEbK(WU;ew ٷݨtsS1pO?ܰ^- ^"it+5O´)a1TDX׼f!~ܼo|0-bLXcUzU23algga??ΠͻQx;nZpYf1c}^0˂LdTv>#hQ__(n5f"Lq-nQf!NQvĄ{r9kS ޞZ]:)w'};F)S?S?Ue}c 3γy^FB.CB9g}"D9gT2L̅.{]je 4X6ZG&v cqn]Ly;PfkE//b}h;װ 2ӇԢC(߬qIYw޲2}iWAS#F??eg{(2S lᙑ9xgy59[PsEYgjpk_)˼\KY%{vʟٟ2Ki^,LyƔeNwS'Eؿnx6x!,>'Lfz(mGuTiWΥԿcԿăt+^]DoDΆ#Sm}8%׽0ӝsWrھ`%OL[gve=@<Wѷr qͥ/}2H3u :Sǣ˲\m%so &f:tiW_Wv hGgG8t^@/vo[3T^t.w6F2356q)/Ed fe-80gYVXOCav]&z^;CLb˳ Gwc"yP_WEgf M{:Gyd }RO:0w"&_sA劺E.t Fs]ܪ>z#O,"6ܩَ6I$vm ?j?όWGhThc_Lƹq ѩ]ׅr:*ݵ/u׆; dw<$ ]ZӄP ccwI(umg(<z/] >?cͳ66r.*桨Evǚ](ْLg3L<6 DFcR>G( iya3O/6vuqگZ\bw, o.0Tv gE7\\3ӆ;m4ԃqE'7\_NB9ϴ~6 %͆8Cp6MPy];ח2FsxCjS:'˅8ЇM^ O) $1?݆A ԟa`ly'is=/ uG:%ap飏>z*h6z})|0.3PI)OyJGfs=R!祄KKlp':e^3 f1H4wJѧ94CPGl8yXm0l @a|e2;~}@lc].L^Wn8p}@kP׆!;3Γe 3Ï}lV0z(S}l51;_u}CU}^?mcT?#s0׺ֵ4= ?lcxbPyRMiygXҤ=)M5"XO x7aǣ@˨-'XDĈ"ˈdԦWV?=oFUc਄ܟMd$cQ4~(#y>Bl5<`ĖF3~FRoBHf4' #YぅWC!.^gaT 1ň(#P#c$YԦ-#8{1ZDyYP&H#Z<[2jI9 ލ'"e2JJ ? f<`F3rwi9&rƻC+9xQV/&xv ^Ř8ZKaF~fgnԑqfD>a(,e2z܋t衇qo@<W<`:+R x\BY.9Oa3Nbx#ʥ7i ~aGCM$~m7QO)uzY< qㅂ / O B_e"ޡݤC=>p 'u>bu=bWxE[@>#Iz kn>ˎFlҾ3N2;)Mؠns3+CkjJc)XJF(-/ i z\2 =oI 5WHq(O_ćNn[[ IF 1q= `7l!‘/t9]}Ǔn'xQ(ཚu?[Pge}2 س8<^}8ҏI_-#҈P>+B~\<#mc~C]"R9 JE30'@6}: Ш 8SX܆$DeNOh˵`.nӳ/92"_-y0Ru£rJyYƳDdTvi(]Z`=$Ox0xE!LXSd ! cm(a\idH>x IxEø!x>yot gh|-cjx}}Ϣ\KPt%#1ݤ/J]^b ǜgd(d(yO<+ز?B!+],uxK8ؗ0&jSz%exj&F?o2a^Ʀ.<:w_'- Hgeo~^p ud2 s;$3$3f Qsp F݅~A8*u|~f 2;OXw@xu/3Chk VT 餓Num`*r#mx~);iSS;g3ZMuT6FYF+g:1z3n>y|W7&kA\tR &\GY< 41c_F1Z\^kciv,v>:`WZ 4jh_..ž~yj'3\p.zAS82U>c4\|uCgn>$sƾ`zM/d]w;Y] H@@23? ni g0)F[/^ᨷs:(i]c0{29X},3EJ04:Cv0\p1#Aˆ3-g` >KaLN9._f}e_wإcXkrP g9>,LކOfL/Z|n;ݹdu61a#0CB+S2 z=N S:c S[xN p)c "q c>e):?:}.ʬW7& ͭMi hS(};%f` m-6%uuۭapwf n͌5S?"tDu,~\Sj?%1ʹF/ҭ zexN)GG\K]ûx 2B}<"bgp=u:w5D:kW[b/vc]!)7h*#*4?l,׈8>j|\32`^uЇ7j;찅%FRePaĨы^ :0M,d]$M6YUƞip 5(NLƋr|03M!9)n+YEQ|tM _i4I7X3љe% xnv*K]NcWґ|}:6υ @0vl#S꺄e'SB;̀ b-ti9Oݥ45yCztz_<zZ/xBt>L E#b_0RPVқi]OQ#V-̸ MʚߴLLeA=tgaskq~Sc\e1?U(,wKx~0}0c WH6#Jsͺ4,ĹLŝaxr 3(wѨ,9s/w=^W7zի#G}̀ U_M z/坥sr`2 .zo׿otvƾcobG@k/ PѤt \$ű[9NtxrJ2G[0Q5Lv?JY*qzcFjj#E^]3g8 > z!2m1z30poY:3k cpcqX!/y0C`!^x&"syDκ;x6۩dZv>MpֿT>b.gFg3ʵ)ULōiaH=/,x 瘨}?`E*DOIDT&/9IEƘi c׊XGAH2F 0ܺrC,{Tp5v i`\ˇ2\\Iwc|f2E65H?s0>Aɱ\:eq/$7.^xP /;6z-B;Ń<[sf"-36##qm2εgsMP/ W@̒ xҥ`%Cӛ>x"2sN떱!~:Ӳlq{uVgvWPyt yNn@H8VWtCQ^U!eGGq;V1\ 2gLYvÏo3o?ߏ/!9efMN7a43=ce Ϫ^}~,owlu(5SN/ >usn2S[6MY. ޓL,w5X;qP}\׉)Ck%M]9 H`o@_5HY^阦.N'S/֞:6Arva# gndD\SQ ݛgs;ۉp3*]3c>:@XY̦Q{wRq}UisfZC_1^S^$0%gtT]m)/+ /׋ݻ,G9"ܿ?^7k0in§qN'TϬw H`@W@65sVxP1̚}de_uutԆO?Ä@NHɴrlJ}u쀙hteM_&)8YSײyc;QNYnH`;eszGz;:Y}Yg,ity^9 $dy" Q yNrDVy̲YO*)rtl^b#0^6媂3tNuM2ip?6ɩ Ӑwn-0;;F׿{^_:/:5L =|Xkyۜ:>K@{Eԥ;M=)>c!=k/󼞥<0ⰱ[e:;P9gQWIQ-x-#e d@q/Hc.Ltέ}7t΋pd}16w{L+h_8ھet% ڸzc/m,i.Q, 6%1 !]f.=qeiCxכ/6s[E['653&7aʽ` ]C̨ @s mFw]'oCq)|ꩧSsϔiG>_Pc srgRwqec!u}ɮ2ȂH&%֖Lc[ދMIOzRYZǗӟo2 :(HԻNQKN@!'jC!$/} GXRiCkCGCنNB1=;܇{F]3u P4Xхx0\?LC}Q(]|1T]a MC6:]!+.aBIx%6Qp zWwiWP[]C[҃RYKԡu K!{\=K34L/i1څ!l8<;y=a`qó#|KIYX7܋|.zX_Vk{ו#UX@!P-‹e 5o]𝊃]ж4fy~'}$0F"(3kbtLe|hֲk+ELNDcH2F0a1\m2>nJN'Urc(4JtCIkt\괠t}^wMcI6FRX̓ؗύ~^wcq_0փ*@_rmN^mx, Nd\| gLd;}>hc _O 顎 `iZ%1/ScC[w:ab r@6;m+O!Nt:jc`ǵ H@`@ nH{x̋ԜՃPcs 8c'ơzc~ *1c@ o.l^CzxnAޝh_c2(?iCj![ aD=ף/Owg, } c}wC·؇wfg@}۱Tt2R,BuĻm# Ni;e!Cio66\0bPo4%+`[wݘ҆ކЧ<ȅ:"d[ctyp.pxhyTe=S4vJH۲k}X Ma2 F㺁2E/qDT[s]44F6n\甐6EH9;WN6בIdq0)sQrB8yD4PtKZXKa;]kfwo$<.ꬻ`LGds\ !<\C(e>:edֲ sц]/"LYӱ9w5,c62̀glóX}~.!L_x^Lgstq63Yu֍co䍴3ecXn0h(蜼1D׌őyy?yJ& ݴ $ߤzim6,K.YzO.$/Y"}L#FY˚ uWqκ R(@1 /ibܙ$  H@{@YSn˘ok+.,be}@ew lt{{=H]b9'@ל8L ,0*ƂĊ${h۪\wPjPAA,@"  hD`kċ^k&&*hFQB hKJRBg9} `c}1\s=Z+#<_?Xc +HA[_~Vt9?č>E_=|g5{/|~>6_~9Ict!$k~Dܟ~Zkm{mGyt!~}"?k}{ 7Hc +0V`|~r᣹9>]q8׽@Zq.cX38U'~M_{ 2? Nˡן9j4+0V`Xc +0V``뮻>E訸_U`wZ1ٱc +0V`Xc +0V`X?;\Q3V`Xc +0V`Xc +0V~UWَɎ+0V`Xc +0V`r{Q8Ƞm6ިgq4+0V`Xc TfgqF=V,Q{;-bN}u;8k|[:n+kOZ`T`7u? /fx9Wu>|_W]5/xX+{o9ӻprJ٠V*qoy_exn.ͳgy`k)>:jOzޮye]O_Qڎ5k2q{`}zC /po}3ah_^M,W\RׁϋED߫zN99Fj IDATXFϾa]f\7=0!+B w|_u*BMi^xSO= |y䑝ݲ ]~iO{ZxݝSb{(|뭷ތ|=(zֳftbeCKick?k3 ;S֐rCC!>ۅos_>)kg)}gEo}sZ]C]5Wο)Ͼ߾9P$9a;I1V.s34!呷eZo}-4BͧۅRO;m?}VRz/.Nrķg#ii__tk|aG`f &}}l\Ʀ6k/1_Yƛokon94/9\Xl6r^$seƁ|2-s~籖xi;'v˿?Ok|k̽k7gVuًN8im}|Tz뭷.'|r/}i}_/Zy׿|cMf@ba&^О]׀ⷘ#9K8/ÃA ŞXQyr\9NA1;975ƺyO}b*wZ ^C~[#u^qwc_M{ޯo鰶hòy

̷3GILCK%PCoY /l4nZ/D{O/v;|U[_=Cgn17<XWx+"7̧-Do!aܹگnv% '*cW}3W͊_.qdU̳ͥWWӌ5~ʔ9سܰu쾑+ o/_G}7@w} OAk[ʱ^&]{pnDny 8y5SlěT37\c`~Pfb6xO|'y&/)ظ眲~owOѧkI0^Ӈ,lYWwٮz~?rdB@q;D}ZcѢ6v.\p~Y\@}6A}I;V=xa#];t͙6WqxzA\Yڈ\y\P>>A&/Gګ;ĩZObPc=06rp\ŅSO.5Oqn,9rk%ׁnqmU1y7Ry~l|_L:emb!o3k)q[@ĒS٤g~g~b>eȭPfmv,lwܱЇ Mr%֧rolmg?+'eo>v/wxC`-JuUooPHzI>>OʭK-A;6E{;>n Ys?>Y}VGg'opsC5 } +撱ɵCߗz1扜8G@A+uG[@z}[]7}r^9oo쌣1[<ƿ/r?Zʴ3Iv˪cdyglZI{F5JZ)7ws 8∉mӏ/Y;'>3T7JOM".µ K\l}9Oӯ+{|WὠEn虃 =_g$sbܐp  OhI')cN훻z9#6pڤ~Rl%Āɛ={ؾ*7x#+Fn34drbenڻwr QӨXȽ 1>:0>;Ysڒ'906|8dNN ct4H v;xGLOBF,r966-O>zm"}ZF5l!>}:˕+ehg-G |޿Ý\?=Ob}1'v$=_wv5ݑG9sױ|򓟜kxًI7sȏxx1krW _9~?[-Dc\975 v8'~}sA'GnBws 7Թ$? ͭ}F3;y!ξX=c=i;?sw/iwzSʮo.lN唯|<˷>#*O=>弳ͼܳ{~zlPN?>{\9^VS,klQ>qQ~?9Y]x˕D)6ԣʫާ3:#Nx}W6;0~[lc #'G88Ic`ͭ֒l5y*g0glXԕ?h]S ׹)9/W;<Վ>&!_觜9ryvX ȁ5em-rԶo)>\;0i ^8Gu-7LĂ|Pxp x4rᩀM_nP_!=84rTO#k ڶB؃?Wʺ#':(Ϝss}bf_vm]׷pS`8WnQ6 \?~׆?yם6Mv.pj+捝s录cnӖX`@I,̋qĂC9ξ:qn_;|5}Ϟ@t9_o^ezʺw7~=[zg<\r9e*Oת߭Uw׺?-SꍼO:ԗaĤHɑs C 'jȼ=8PL4_v4Ldӹwsxq3q}rΑ ''3r9IׁJZ7?o7+gpx''}ԧ>]jdBD,0/""Zn.!`O,䌵!/'!D`<'٪쫃;_tg,c|$@$~71"nrI  2Z+ XưnB/e}Dy1Fn,=}8?%ػ%pެ;sC189ǖ F}{Z^ӰC7l!cG]Ҧw}\S_gCx뭷c9!?}s//zȺI\r޸s>8Ӿ>@/('/sNb>}t SLa6pS?3n^Ma~c.#q'\~˜9ɑaO>ڥXpڻ!<.K'J}2o~s7׼5裏>ׁ폆qu8>կ~ N3wFԥOtY;֔@0bcJO.xq:71s _]=uֺiO11}BDC{Ivʰ:5B Qr2s>syi/99;/CN"2Vf:n9z|Āgkvw%SC_.1ui`χ2;tvk,sD>|rrMn*xYa7W]_;Dѧ-oǺ}W]uUL=;OwlMMM"MՓ Jn&s+B>\lrжs<e< bAuBg`y?>ԅBhcڳ-=20hyr<GoN@9#2b_Wc 'Hd28؏l̏\;m;yX;kwǜyr"hǺx҂c<kF:s@꫁51Wk '6z |v)'4d= 3>G6~A6l%Z;֝f <}C9zܢ;1[_w. Y?#50'0$!qO!˜O?s!>eM3+qKE\ iP_}566mVY'(cGF.?cgñ+w4O'iGq;3_j/c1d֓>OzT9?ַOb /}i?>>+א<Ǘs7zMYivۭ}C9}g(cl[/~ s9 ?sЗ1D9KCyaǜ1p^Wp0eù ֞`k>s) IDATAF}8z |qy>{bG718]39 x雳fi@>k6dӲeV=[.!^ơ.>p֚""koP{8>b#x}9Aye kϼ\w82`1\bbѧkp}9ƾZexOn0O`჎]-[27d6/:|G)R_|q [e2rO9Xk4.c[X_X3djy蓏#O5u:З/clB+esam?P=>pm#ϓgSGcO븯ݻ6c)겄avaޏv!T-ѿf\ϕXHtn*7zqñ 7LnNQ_^_x6mYjޒ2wqcs }Ol| v;_c'Om'v!upI]d\lȯ|؁ GRՙOdSl9u䀎Dco2 AyA`I%uYd`"1o'a+a'xp1o䥎-?[.Xȃn-b<Ok?Af c/y!cݐI'$l[_i |p=}ݹwNps4s=N#] "2!#Ϝ:6z}w=o61 #7Fú6G\ɕa\7';v0nkc0]?\snzku@xE>'>ؘGW:gCX#O?}ik2ޥR;tpłY8>؂1Ry+LJ=y7v4L[r0g8rkrlɃ_t4z !|ؿ)ru] c#r.@_B.[ 1$2]*؋~ Anr&Q=}Hft\}g">n06UR樍 vć|2cmrs4Odh}}rmU ZL9uc9՗\lU^d֎:qg-l%.yYk_ˍ>c9'Fkȱgp96}Vak^ɵGRbVp[/AXQ^\o#!O#S~♓s 0{~O>q+6:e{hm>jcZy`Gߜvڤ:g'f`ܔWyF#]NOw1\?nloqNtI;<݋kop|)Kn_ѷq~`O1XsPq<`j9'|sU;/!\ eGxik^`8Scʷ_KE*kްqӍe>rN;qeo_{΋#?>nO*g}oC?AN9rn{&}@]3n@ %/IؙK'9Hrl!O[d9_6 n_CxĝLaXʰ _1G 8GM4믾/X\='_ӏ56.sG͜r߂]60!\c2bCWBgSH~raͺGNu]3G\쵓#"ӒɵW|v鳐ٗxrH0 qDŽ/{/fߙ!RQ~ǐ-7*]v+M ^cmX|1UߒBn^#E2rGmC/>MJ]'/΅ї1c rlwx1zxPbF!dN9F;bũ"ǽؼZSy+ε[\[G,swp|GS_— +G 27~hȒI,O_{s8W}@~C~%Bׁ}xr}zz}vbn>{uxȽ}6t 8}{s=fGq9ŋ0_#XO9%mʍe`9O}ɹ(#×Їܴ59$I`*|KLeş>v-dž|$`q|_9,WԛlqԍG<,?R_Kw]z~l7k7W?\!횘rʬGrț>O}>vן ~mu߽MRc_;~%>*B_nk|!:EhY\fd $7:0aL G  r㸝r0\#A-Ň1X,!q r oCO_ 8kOXjg`o|aGxF X4|\ #gkF\7Gƹ&S=} !snL0W1?zqɻ1:Ȩu˘ڒ}Xȴ'7e#?@G]9'`ibw 2xi:É$c>c2siLNhI>u/wb-k@xG?Q9~g.DH4xpu=z7!kn}1z(r [g a8SSأ籅17~ay98?}#pŁeuEGIIA63:d#?2gFL8|ѧ w/ fʇqm_?]_RXgWMA=mrOwO\m:~cm[d>rʼ`SCҟ%/cKv憝:>Fk VYg^Ģ~욒s4ҏ8 qi.:'G[ArƧϜŤaK#&M{s6x\<^ 1kzďs6ǼՁctS.:),ȹoJ H\cg^i3298 G,@{sC:׀CqCo=!Is>} ;cWϘĢo~"ߝ%#:ko+_WuO~\[ u6.nN7q)#8<я/-]zWk =`&9:RN -7g,I})gٔ'n|96[XCf+ v6doq㣷'GOlʱ1wdmD>u9'NY;X1Ot3o%v |&.ʱ}1@m닍ϘbWXJd,:3?dI}y7sR>JS@}}n#o9s|?Oug!ׁ7tS@fN/q |]n?o&{!9:\=c|Ld,I2ub\`_}2>:ǩϾڦ.GQqm[)͔>>vI9;u~be|w86wKD\_𨷼ͶآtzoPo/vC+,] I̗sO}s+л>d6\}ʼyͧ? 9Wg]!b['kc<δV˭\7|?g,-z`.ȹs+Vɳ!a?Dkn/Tw:9~b8&~NCا12iz|hwyNI|%'H>=c} -G7M|bwD#wz~e pSzCܨ;>5O+o|Gi;"s݅'Xot.sL0bkmsӰhE_H(m'v8rMA_~L|Pb81ણO}RG6gA76ep޺x [/ڻ3?tsc s sB "7bS?Hn0s6}3uswW;mr ertw,:ĕg/F]/#'?YKWLIfٵ#mN, V6 ݠ+ziO;1^i)GQo]Wq!'LJv_#o,')&ׁԏ'i-my|zc>yk5{7}rgO@8{}il%1&6:Ar>zIN\`.20v wxA?}cskϱ%v X\Z >\y%e=Ǻ-*lزmw)z_Y_㭍Y޷e7\eDygYvg|f{S_y"Ϲwϐ/{2wuP'VrNI+)c9CN4̽97m >ȱϹic 1ܘZ5J}Ϙc,c~ɍ7wkyRQ&ϱܘkS&\83xPGk|(7t9y^i$tI _fq7w?{G٧|;|.O6l=E}}C.<]`xnV7DSne_?8>b;Vhfǃ _||91CgCg[a{ll}3Nb 6dlCxĶȜ~٦3ni#A[0/u2Hyf,qZ1 qZ2ņ|A 9g_7|S +qʐKb9N1rdm>idݨ 6G׏> L$>m>}'JdAldI%O~ҰmM/m>r=Nc6.>y se㙗U/~-!s }k̔W ȤxȔg3^"X_o.OqxW"|48R~' |2d6']Ж{}鷄 <ԧm籮?:mrp IDAT YƞM>_7/N[0{{G1W^;măCp؋L.&\Y$$c:qm6lc*\MAywjF;S}տǮw,wn}YCǖߞ֭.lIYwϽˍU٢~z~OYgyʳՅ>s ۡs.˵9з9m\3\;9Gg>֚*۵av`DlAn.i\xbc|y\?}ӇDIG!slC ⊣_3z9:rd~k+~6p#}{:4 CL;yk#/gLؠJ cB96I3^wx'-'e.)_ rov[yē/yK `anJln}FBĤN l2bi G)ԫ''{`[NѧYk16N\9`K|1'!x(7_zRG!onC.G!MI^Aƣ&5@'~8Woui5G86`~6bI}}1 g 6Rcpr>c>\;cd^ȈLNʕc>"sI=2[;qa4͇1MO|d]rr1?\_:&Ǟ[g,&rsCΩ-E,CsCA_bHNy/mC[́5M^<0ŅC%,A?qi1܇Mf agqB7A8^Rn̋rck߾Жw~xז+ػk>`}ٻ[}6S*#{iiܴ/7?22 ofL!ϟأy` 9#&؞S#q͟>v^+>\;s32:6`Zn\dCݹ8{n?cY 4l].z3aGu/>Yi !rlouƦ?lW?ݟ_\;rǖܣ;)\ȏ5yX9!3o\>U} _"ch ~{,oKb"Nܴ%yF?2>߰nI ;ۼ~!剭 nx`Ro匩1!^;uGFc}}<'q}s6_89X|3ddo1-65cu2MSg1.F{xbW8$~ڛ1fL3vplb>`؇c>$܇1^?Gu <+ٰ7`eLsc՟򖋡OR&u;g*O9sя5Ag1&>O]j|Y֑u F -o-p}+1W.|l9@KN/#9c .ސk[⓳C(wgG}^_̅1v6`8#ʰ"u=D2̩ 10_\zR?qUWGm]9+_gGrOzmuk]PHg'1&7g3m'x?e9!S[ڥ:dӈ Ǟдr8_L9:q!u v8ȭz/'r-4o!~flNrlɇ7[Ck1OB&N_l Ɛksо1R\I\J_|C-T[f_OsQY P&u*s͘Kc3WrbϜܘCs.Goʇ֮/VX9oQsF.6:q@[ZkǺdCO'XAXOBlkb<'5E:0e,&7f_f㮕qĤo۹ROL0R|yCRr+OLɝ2CrїMcM\!~>Cʱ5Ģv}bKznXk?rl4>:0n݋R[o㩗13lqx?q-b٫֚ygLx/vk]/sէ ;vӾ<أ}\gk 㶙|_/v"ϼK!zv@;io؜5uO|Gz|!G>]%rq+sE}iαv`<~\zMF#O=rzuse/?8#~e}[Oh':E'^eL!? q|8B/y;k|LrY:g,&C0/I|r\Z@k]9CqveǛ}=UvcX+6.}x cKP;e!oßNqђx1tOBEc$&X0#MX[!}#`14liix"#@ON\bq$杶[_bȕiښ':sOa_=uǵGk#.\_l~86 9M쉧99N$f7_㚏z[茍P֞vr| =6-c%Ɛ9ag=8I_d̏1#Āۨkbgs'g{mCc.Șk8GK&.O1n'x/gAಷXE}v-_\}k}S;dY{Bi5 Ou4#V6pd[%ڴv3W >bik}S!2p{sӆzoK,K{9qK`Ґ.Ҟ1vLJfj,W091{l\r: [H9:h.e> "o±9W8͸r|3.>i7˅?ayS?<l_ou7??q;Y.;]vn]|'w)g|/C^qdG? m!9BX@Ό4l$9~r}k23O,Z_m;dձO'ermr u8)G=}ǝbE[98)=>}'ʭ\9 !B}I?^_W%i d^a'.:Lk c:K :`OXI=2}'4ϴAkd=Mi2[͕u5fu!IՍv,En7r@?NLld7snFy' !SؒcA;h ȰG}lhY{sϼĵ>pd:^M{`13vдAo\ȝ2o=C| v|$56>`ٴfiSmX'ό+urɉ1w;AE,1}#Df_/.tOd`j7 > i799N6s@-9>_rty~9ű ad];e}&/9H`K[?KkkLl?cs:csCϘc409c|mطd2'lv$r/6İ!19u`=+o|%l 882bϱ ?A`ױ{ x옱.Ύ\ބs줝9$}>1KN<0 l2'di'^_|=}ޗ<ȕ 22`1} _36%Fǘpxu 4l֜>98x2؀}bb48`Aؑ; r`sKl1]">rmvO#?W^ה}[;*wmcwy{S.?l_}v*c}>/,ߩ7^?,|ϻ$_㓓/z{[__\c2X$|Ĥ*>3}{8לVDf<0CFeLu1&sc˝z8xIj9μy@BNN)x`/6C{Zʺ1'-jdQ;`~4 ?>8ȕ[Lcao$pty;Ə5z  dLc>R_4|ڙȡDg uS{φ1O=CaoS/.m7?m#\rI#O_)wNr#[֊1\;>쫡:gK,Yod= x\92q,IOé_ur-aӞ-6jG 7vrgmGOJ![}FzWugXKsO"wX/cI^1mߌ/WO2Wϱ\=ܜRFEN6W,lH8sa`ӧS7u[]r퐉 Bo l;x&;Lgi:RGpos>6ߢnӾr^V~qyGUN?{AwO :>׿{}7jr]ݧ~OĔpOs$gXɝb>׀p≙'}|};WA57tbC nC/:bvǼZ: Nkyk,ǭpl!kg\uop$ƿgeХIJmK䭞8qlc99nJp>;vpF<2/)uX c Grƛ}=gP@܍ 6@.)˩Ws\mL}WnpmRf{kK09^[9$7So=}lÉ?#:^{PjfN);baGٻVM{ d Ʃ3A؉X࿘נ SEIL:c{OSUU^p=k]ko}?vnoq|~ioElwj˭Ox6#QK.m]Q#{(7?_k)Wvcw?ӿJW'nqgI:#vf9f^[N8z|qLGl뮎^ȇ#ޞW_UMs}zTgk1NO%NˆuF'|I{/~p7ns>CmIXYgŧO4}xu49{ 'ޚb!M;=jY[ܜٳ8?gǟmo?3V_x˙kQ]>D/b9g;z^釮&jWNYGҺ6:Z1ߞ+/_kϿ7O?xwO?/ⴷl'~ʯ<Oӟ~/䗃__}?pk DsSw&Z?grXvwϹ-FGolk5'4_y/%:OjwvÇw: /W9ߎ+pSNa\?b|aO['.1 =rz~Etm4[|CE+\LC10λnoz ڏ'>_8>E!7_y_i#O=VN[,.΃ xUo9/nv}]^4.9 G/Whc25Wv֖_\kuˮ]CH+^?i{d9^%Ѿ?v{N=/IyXkI67=ky6^㊻O\\+a y~{'wfqv_I5F>?Z`\_q$qՃ}>nk͗+~|;n}ÈcoH~18n?D4:UO4̊yX~Fo=v1~uğwj<ֻ;w̦[[6zô6.N~d+ju6\|0Iljgk0zKy6~b[ZÒ g8ŝy1<wZ6m=[C=VKT\q'yW!Ns?v}媹\gbF^~ ߚW`k/ǟc7#r835os7O7?~{O>~O~/>g~_x_+g|ҰwFx;@^'{=p/Ls6˕#?no&|b7~dz9aKIglji}pbtEox?1__81RM._o[;"'!q'܅nq֣X}<^뾖u3?Ir›7~'0Ն9J_԰>cvS~}U񫛮F98x4^5v~.NHo~vxo}_珯~{\^_X8÷U+_b5h";ˉ+ [nOonV<)皼#|:ThƓ>ƖL>Y#]^> G5rzn/'O4!𭣺0/_y5/|e>8wk߾|A8[N=5 {߈/-m9m^>,OO}}揷_@u: إ9l~ E Y[nC nB&=(|GmO!6!FAGbٰi[l#F߿?q/>ߚk'0q=w4i'ojTp36wmisC> ?mHͭ??a_8w{bU#~wjy5/n{bNlJ'z o^l9svsewa񬄩v&}(-噸Z=Gθ7nW]_?{ĮzoWOwan.z`Ɏ֜lo|kvιgV,l{O{H5ϷZ?+^/t?!G9| __l\SL|| ˾W7prwocoMxskh.ދl`[+[Oo|jOc_?qIq}j/Q&ejƱ]ouZKzoOtR bޝqG0ݯ+a=Kg<{.DIt=+.; 4~:^}ϟSS^8I#|aLϞ=e8H\zJK'|5rKWgꝵéQOl5zpR6^gziO~ ֨]zwcHtM? w\9pr+[műǼ6|փ}$rwXZl}{*7>svo:|m^uzv)Ն^N9fq798n} =0krè76_ZGΘC. S/o<4e[z}a4\rC=GbȿZ8ro'^oDy].'_|ž b㪎 ۨR@<.o^\xA'aWo,{uX$|Ȯ8'MMxrVzX8tkNo^^_t3ns~yakw~6os7M'j||,..r_v{t356^> :; s!yNj_9if}s^l>E'g\<(vָu-gYO9oف{fsOl9S./s:;WKt<3ŗX+#i}'zW#ݺïVIxO)lbOx8tjgWsS{ƨx:_56ya;x('k-=w˓^l=W?͗X~K/#̣:g۹gzZFNλU_#L??M~9ڗ[ns18-_|6Oc<W^h9ƣzwo}t=Ň}j˾⤃tb:ᯄ͍x8]b&Fx:^`k^~Z/6q\A7er«~µV'ok )>qnW,]n_Xk`'[Sētk55/mNwz7! W/ ::l (W|%lZ׿8^Won{./ܞ|4iG{LgOÖW'.OwhanD~SqzHC'ФynuXk1iqԃ֘{5%l_rd__*7|s8'D'[;-?Y;/.6}#z\1q{ҿz,7i{/k :cvLXݐk>Hl?%^NGW?YϚZ_w{Gy^Xq6ڧptċü>|eIA'>6am|tΜrš7`VzbZxGj׫uӼotaIqĽ9W|ņO1}z^ayqcųU[ &QCx WW~Z!}_C\,^51C/u^lx+> \꬏c-tg,^.M}.3 5ZpuUuqo=qUN5ai$%qk=vk:r|l85C?CmO>[zᏇͿ{}7;T}Bbt 4{]rHՐCOG>ĕ/Lwal.vՆS>ˁ;q.WSt`}e#I1$N1R/śoۚ|[/ah{#oy냝\gήEZ˩8͍zw8R_7{s?sȩzo\-5#T<ÝaURDO5WSF+C<;$5) ^nlpW]ܼ<7ZW ǏZ[^''L+wuycN&;i ]ΛݓN 0IOg޽×݋>^>,L7gjz=)V{X~d#aׇQ ¥a|oZ^v5嘧[_=]IT&qd_(^j#NMoj}r`U?}G8s؋][iu?Z}7aӤuzI#x(z?yj6mBᚗH>} (fcɞaԟ8΀=k_۾W-:;;_Yţí8tnpӚN ?#嘏0\Vt6嘧3O\rh8׹Fs/nvzAO^;,b2W|ueaۅ~T[ϸ5n][ݛ㊿~œ_Gza<a k(v;jdͮ7;ܞO9ΑS?z݁ _ncot>3[Gjcl~9{.$^1}EstC\X?g\Mvw?{zZ.>1d}d=:qaq{ (GbNZ+_r0>%^fG߼~t7ҝݜo9yZs|t=C+[|ħn}K^jw?7|rqY_&~? W :ǝKÝRۇy;Xl~+o{ 'e%p[wca뱽WyTgg†MP[N98'99(EϽcWkbjx}=8NTaTO6'|F+5ُKK` {־[l9Q=ȟ?^qz%vWW5/gzn\X=1Ρ> /]C/0jo90lbOaÅ+Ju?NӼ<{[K:&_8gg\u'<{ Xח8m}|cw_[OxGn 2k8ѺbDNE+Nԯr|㭏–޽dϓǞm3 XS213Y[ڋΐ^;L1>D-wI~+5>ϻ֭S.!/g>@K'8#Xko g~[cxαoE=`ۯֽ{$Nv-A){l|s$kA뫘~ح <iHگz6}V֝M烷}a+S/qR8Y}vkR ߗrlj52'RlgsǺ?j0UC֜d#Vo`,<*ߜo83p5?Oꫯsw`;jևg%n1F}ǟ>Z,J4n9X3nqb|8۴ʅI5?y<3rAS;׸UvhOa>V)7~s=/t5zŲzkY0>W\${Iaij=곞ZǗպ-o;֡' cj6_|0Y G<91z6o=޼ W~{ķk3OT/|tް5߳%b%K ?.M1~X:,5raHZNn]cG=kW yqS>Cx%p0bj'a7ܹV{rr?6ճ8n|ל&0r~_l^7N^Ѽ^y}^r C_;]؝w8k3wx.xWczIǷWW׭gm'z2{V/՝3^ޞ#<-w/)/Y5[㬇]W90/#ϫ/Qi})gyۋ#IWX_S-?,.OV_䏓#yX0wjt}ȷZzXxٟ.FËg~S Ǯ!vxsMn>-b86s{3v9}ZrJ櫋˧b x)Fp48[ty|凧[l;;[ 琷_캇Ks  ]"9.ܿ,E:]. )}g̼qē Cjc>90Չ#:ǎ<利K>[z_=G{`7+r®^T#~[ gap/|g׫r>o r`䜵q,.ߦ*kyRFqgWF{Eqg^`7yIn.^m67v;= sn1_K=rޑ>xV}nLy|l]3W3\'SؓF=i_S?7ԧ7_>Ӹ3珇n6O[=a唿u;e<ߞ#lo;0q\v p\򛋑 rusz#z@)O/%bomūkoQ}/~00@/ٽZ~v æ%zI_5V|q86m7>O]8r7 ='_jJgq6Cl?~ \A8Ղ7V`Ay|.N5%Ұ\^eˉ[m8.r./-~ ,r˱!@go9ʯgv"'_gèk MQ:F>ظ`˷.8׸M7Lw _^5Os{=?]/aygם^|95lz:].=>wFqeZnr?{jYO]mvqxŭը~tp'|:Yrm\OM6y ϴ<\^=b_g~ǫo3f,6;Kb^y0}Rnϒxbr:דyr] q90,? Go/'wWxnc,o,wåO/h-rVʣ7V.-}kn|]-yxމzg4[^( {(,/ χWnMgƓ^>wjrg^}\\֕9c|I9xZߞ/?_\MWyi~v|^l|{e_R_ݝ8| 'o>lz/ԏp-y9*5}^ ۽ug7Ns.ǿs/>^<9~h‰w>^XƝ 7_9ū}^b=L|受>ߴ=k#>.zBC0NY<>.7o.5лN,j߽XSjpo<[%, }3¯p-./]A7pw¥!f}xiM,ߞ5/_S]G ^jn,ݹXcQzaߺͫU:|g[\ Ֆ ˝$q`+ϽogX`ļkr 9F"^_[xm'n'jѿ[k _.l{&zWՠ j֝&=/A_5oB܉w{Iܽ8bj{H]UK|> pz36wz''{hF=#,mu믾鰭~18l},o} $]{k{,7<6^6# m]6Ϧ_ ߷۵+{zzx6[ƲqmN:iMgUtWo_yg<ֳ!nXk~r_3^ɎCgqיij5ʅ>M`H?ȭ~0˻n{5mZ-= s?⏏?NvyNcի>W1upX iCOA'-G$Lk_˾~prh2.F..Nj%E.xF1:l|㋧s8=X/Ѿ^lx[;E .! lu`Nb c.<<,.v}ۀe)w#~8ފћ[gonoQ,?5,qy5'_/[鉍K)o#tr3iw3v?ɋ_l"Fg/s_]#p[#{{ ykqWg}W^WgwHf7zX}=n|KR\ )\qa7';]<:=|aq>^[>^sQ9 ۜSW 0+n8KOv}k>֋XuO<>9?Y|N no8ޑ:Yq]>73'0 <=T#lyaxwxqf=ԇ<,'^<,?_XR<__j`7O.LCx\]L<'b'W9zxߝ~_bs)~Oorî/mqoN5ף͋Y C+^˫ټ sl;s}S7/Z!mNѷ ٵg 0ks>yR?iU,w%zھ[O[t/^_>pl뉶[op[tsr̷;~aC=/\v _Z@uqäCe/1< 7!kf_}߃Xwp._kMԩ.lux~x'7z.Z )yZ1VrҼW^97p`MC8Lun[wk_煓6W73_8r8u3ckφşF=1[W.n O8~߳.Gxmny "n^ oR"zĬ_M ~st1xDY n :lվƙy-\O[xSK^cߥ=x zo[?ݿov[+N`a\k[:.v=W=WL8/9o@+q TzckÖX -xvxqtg> ow>CWS~=+.q<zQﭫ.ɼ>/^Fx/|M&a_fnXڞl{^ L獛tv'jصnG'߽E0p,~hq=8CD fʭXlc.]myqٹ/%3.Xt=gDZ1q0Ɲۏ> ]M v1߾㱇0Asu±Oپ6_gt+Njo ߳_, ~TCn=x:j{(aůŇ;7/7 DȗU-S뀴;@Ao^N$M,N\ òu6^_|{k䣍oO>e/gkG {Kkm; >1l8ىXpdO|0q8 _"ίt Eu z[}"n/n~J8Zܭ%z9?\<ġz^F8<~B/y/>ˋsਗq 795haOWgsٳo鎴*1_bqT+>Sk MҰq^I7_  ÷GSO_ձG{<ʭ:+p?Z_ p|;l<$>s\rɧA[7='ȩ_o <ϫWxh[^Nuk ߵim\~`-'_Wn{g룹x=W/;}So嫎؎|a*./&prUc_wxȅp=7r9DN}˗7/neW|Zzxy%]TΓ_λ}ks`j 'o<9ZC[s^^gk7furq~j˾wt9[_;g>G?4,|tv90P3|vxq=Êo_bdsaǍ͇oÄ=57၅z V07v-#)|=U7,v+^z k-g3A_]qv`/qmT7gc;W[MZ5y[ίav& RQlu 9Dn{g$WƁgG3$q9դxheo~?5 ?[篇_?“jy2؝kې{|+m9?'>=a-4oF=}SXy]lR5y/j5ઃS|'ef9xMpo q{W?ʽCww.nw-|slZϺ ' }Rz=^^6L~zY-=.[T73 j-V[ܰ8W9{^k\_n6q9I٭%>w'L:svyph CظX?p zr'_ӿtR0x uO+L}E ,-bq!sųޝ9__}[kzD έnqQOqzQN[tkwNʭ=''=W7Ɗy*뙶[~Խ:D{ya b]|t86օpkOǩvz]jW׃S>] ׊كRN5m=@bg'V?j.ދS0Ǽ3?P-^ҭ?tX:ի|:[\ 1)m֗bxZ\s1cﯼxmX#|8l˟|nZ#\?̝]zӫ',>$|0~p<|vW֙KϦW=GgY>n3;9[N5.Íә LMU=R_uaw果k0kY> /Wky|I{Pqz剳?&Fgć҄6~ ~czWa׹mkNԭ֠. St̫qǟ?,|ջyv{^>:s~w|9UozCrv'e=˓^[l>Cj^F_ ?ˋs{ͯGZ;mż|qƏCzI"!nnT>nя^wX\4-Xƣ6;GC}CVc&)ug"q.suy.SK~T8kIk15C Ü۳\}2pݚkoo[St_,?~}S|#t2;NxXEf"݌W~ow×K vygiGtlyzk᭿= 0U3ݹիg9ŜXt?=|w/.xqTK?-zÜԛ,ŲWw2gߍ8w?i}lkiMJ+m+/-?܎YW^u膚ҳ[#}o8v g-!<\Ϝ]̍7wE' IDAT{{Afgw4lqg+/FXvK''7{[NiqzQy'8Zxu6&|8R入=X:\5ROa]q<^Oθ/u{U>;>y8Io?)~OpEgِu_^L \xƶ号9a9'!vu}U#汋3>xq6.׏r g&aqj[m9bH[lgOU퍭fk ^<_i$_L-dz%0x~sɦ0ršpqҝMYaoJ~>v!uűy;pesR˾whaXOw:1O^_Vխ6_tbC _|#>z6{cdžg/xRaNY=E{-f?qa za>a۵O7'#Fs;Zu7Dxi9$,<{*꘳Imѯo}5W׏u5 :Ivpqgߜ-yz9;~nC2?s?ֺ6^Ns/sa-w6b iYrNᳯi[/oY k<{SgC~8W_]{\3morGn πijYj_$oWg{/oa ;G{M|.Χ~R/WBL i85¨G9;]o٫NLE=sW.?gjcqի8\XZNX3_=‰ן3/kFGՋClW 6%g_<0͗Cޝ1j??ʫ]{oz:}w٭Cլ=}ypg8m?aUV N~/4Q#?aXgq/׏04 _J5OǙ˵v/R|^0lZ^~~BZƹU[ۨGd}=>GգW>[ѹ[Kծ$iqˏ: DQ|۝!/xWN]q8/[\k Lrfz0y<o.z1gߍy>:^T?_;-դ5O񄵾+G|ϕaüd㕟}{5Wα9>ww{̻?X/δ)ķ<[x>ʧ]] $OzٺW#'?{짜jAǩN6f?޺xW_<Tžx^>9jvs&5Qx,(/g>Ϝ6dkԃXIo+o}I7μvz pLOYgKq+l[S~uTGp7Iw0|Wݼz7|WaeGZrǝ.qاj?\mT\_mM˩ox\] csR\^sqX~s/nvr`;o(pl ~.OΜqOdw9I<+]lsw9/}†>u,?9wG;lz˯7ug^_7ꗷe8'T/^˓0|wON6_>Y}v|0I{vm_wSWT^7w_?U+͏O,k׼aJqv?K0'!#޸aᲆt1sοz'~1٧Qn}5ga-scwO\ _~>7vtg5l?Ww4;Syt`oSjASayyF8䊣4l9~${|}}_W_w³x}<.X=[,_kLYNp''C7ʎ'/O|4I;bw=/xbGk SytwlΝ]^=4N6.>P;it|rp6y_.uj7vA= ?Οzo%txͭ7>~i4l3Ό]<|ۧ?.5<.Vnƭ O3&츛yM_{|i5׳v?Oaz8^)o;5rէŚZ}-"㦛WqFp_x:A83[ⲛuyӭfUWyaݾz͂< p- w3w{ݡ/f?K<;\>, .ZMuiaWOvfzZ]_wa6=l/s9;nS]003|}a©6a7?ZK:c?Pgy;].~UܙuOa˗.^lurۙ՘ݡaF8=CtKEY8HԞۛ88l|tW/GNχk]bD*gj;u+Ƕz6OL'ۣhW=?\|^XϞ6Z_-?Q+G?VŬ-Yb4ZDEzՇ;u`ȉ"^ذVmWߌS(0Ͷާo8NaI@{H l4&ԋ&?x3Ojbp̻o>\__%;s_r6v/L|vld9c'8;x^q9rrav덻`''&ob#I_ߏW7E]=<{<ӻ` '_xa$='蕧#5'7ͮI{V,~80SgTW6KէԚY,-ή/~ov8{Z8oGL8=~ο^t{ :\aYvyWXy8㉚c> 8w'y|O{ܳ}ow`H֝ ;RnRWjrQ<{ngZ;zlǹbgϾjY+.}H}) _E[{p$qgu͹t x=q{1~Z>O>8Ly3dW< $rO,<_[%">v[owԊiI1]8>ņ|jۻ8L /gV\gWg=+E,Ӯof+VZ~QN{Z͚_S#_%Dn0Gq~]>p43s.#vx?%TS-C{Ke"/ُo܋ʮYN\rbƽ\rq=W+Y6l|5џ0l|mOI6n?rJr縵f:C8~rrf3Ӈ\7s${L䪩 GyQpE+qۺfX [2Y?SK޴xÆ/b[?A3+愩 1LuxEդf}=cUr>wy#=s3fm}\Yώs|7]O0q>N;Kz/;~ZQ-&;ݽ䓝Ek}4؋5-gZ<6p˧N \0K 3Ê::ލ9>rfpŊWS=}pbז{,W/o[VXqdžʭf7U\)чlt)nSvz<'GYQgZv8_R>՟қo}/ٞhjG~s~q >_||9׏߬޿S,]<ϩۻ:v.bMJ?x t.}fӻa[.Xo1Gr04ٟ˛oj7giXo8ꅫ|{ͮOuV Ox~דGY'tj|6|qO3~o O7K1g/L-.;gќXg@-Wh=#~q:lw-L|T߽#si86%Mjg[st4iN :6yvGzy_'ٺ/ij|JA'lf(Η{-7 RxD-jg7lZKT6*3Y.Φ-jqoٺ0tfÄZՙZ |x}Նakyajy'ipۣft9ۓlyb.+|\t"j_Z9~3'osgO}6rkoSVfe8i3o0k}dۧ:_쁋ԏ&kr39:?qf鞳 ϯLmx[7 g1j nߋO`vewV0lqxsb+/k W|3Vk%fk8WY|Q=sfmb;0ջ\Şqvc.z={.x[vǕ,ftwևƵ}K-LǗk|ű]-օ~؋i/VMbuǻ8X|G#'x~͜Vs;|Şvl96_KJ<񧯰vp՟yڳ?uۻQ\QH{>}3q/mfj.S:Oz-?pbN0)Lg+z܏}wF.wmO#l1)®b.ϗ[}srts8Mǵ\lrng|!yqs3f}X^՗7ԝv[7b֞K=r+}n]jV>s.򝏳Z |+C_'&~gg:=_VߌO|1u},G &?l/Nǧ?gĈ۷n{9s{EC4}l3'[eӝE=&S<\>Պk'_%g^hQz+NK|kX=i/Ke'7__}%7Rt1a٤vyŅeuշpx`{W盗M i/fˆ[3^ݞCϖ6-o~_ qkuO6lR/5V\ix{$}aZUrg1A˅{yY"~h"w^$~:{U|z<$ݹGov5+杯voxi{g&qXbfӻ<9>=Cn==+ݯupu7R|_L|i9ở7Æcsr4h_ԅ-ŊˆGU/N9÷GL7ޝOsVO_6-WЇsj8h153hb&L}a͖JW%i<\=Cfk@h98lifpw"Cy褙`ٴ|v/|觞\;X IDAT)aaԏ}[5`Q (O劫_[[pGwA,tN$o-˽}s_2w+v?aZ6{]Z JW8TK|quaymzlzuap ']_|:O߳}7<0A%&oV8'jԙ k?[8;]? uf_v.vƝ3gSjikXSi9`pWد=xgTmffݹM0;$rgz&p][fOͣ.SgݾI>&)o{NLȳIuÞ䖣0;hVl-"_>^g'MЉ8B7^1{HĈh_ l_j;K+k3ҥ)Gg'al|oOWlEHq /z%7Ϯ.L׮}/5Q)w/|P[t}g6 䭎TOocr\i8WH5.gbs} OBgf5݇怑o靏xw6˓z-Gד ҾO|sI6,/yؤqtb8y7ʿ⬊![Nή~j=fg;{9;OJૉ+l~xɞ=p{Ֆ[~,,iĚ~V3^= v]jh˞VagrS, 댖C_sZŠv{þrx@].X4]՗Ϗ'dqRxJr9ޤm՛݇o#ć]ŋ6\gyv9gǥ~K7i1"wxaЫVNe/'F[^<\byrlNW\=*'6;GkW6?f/)?nhWtxOl&Ν'^b}Sg•l8,5­y)++ay8yJ^ըk;[bhN5?e߰:eyaZyַ慇u ֜_Q׳Q KSoc_O~Y]~9՞l<><=g_w~g,=Ӟ`R[lݓx^_0g G$js<%ra:lwزs=Y#*/%Un>y#5? S>]~ٯ>IstV>[kV5͠6|31= ÎÞ+ -33_aWwfvj/Wm}&i|zs^Nx9ut9:o0˱=:ן[[Nj˅cϩmmmf8m9Dֶxdq6cWWŧqk棛;l_|85β_9a |{d\hD>/x-:LmVl_ %1biq+ GY7_myajuJ>N>|_=ٰ#X|W\0T Tr΄b[eWcyVvꚳ8ĭ}Q-S`m!K:x8wNqw^Jz/#4? Wfٺpf/'X La>?Evs,?>egy@c~ϝv7VweI'7ίG޳q6iF{YLk'sDf!̤yaا<8z&ΰi9r|I}`o\MbS5g:#ZowjĹ?[׀fp;x]l^DzU~4[>Ök*s7cn9㵿 r4$mXώ0WH@Էèk\y|qhFyVφsVta܄i&.ZO3Qomْȉc4̝8 Og818ٱ[LQMl,0_Nya@=_|ja] 88Sۊ7y[l筏Xv5[wW+Ϧ]r5[Okʟlbbι}T pY>L3Œ+0ΈVSgIWO|>wZ"/[mO0rz!;N¥+j~'bEYlʥ;󬜾9}؃8Sͻ}O?&wK|8|v<ȫ=W/78Io?oF5|_Kǖk=%zT_-<~O֎[lUݙ9/]NU̇{ {/-\;};q$pݥjʗ^]S7xݯċś S]~JÅ-ϏHpa_M?^ͱ1xzoƭ}ʶ΁Ǟߩb4{{:wc3vVoa&a[3^n졹f[pSʧI3tw#Fu֝IYƟ$8ԆՏV3TW?q φ]QY竩..~N6L:\iq[ų_,-7i}v©o~SIK㜉٫ޝOsͬF~{|q.n~݁EY3j< ~q 6nVqaLʱn=Ͱ 0Nlϋ/>L:j'p Y')3HϿ{D[F{DqZKwz{O[b_Ljwk;C>!dka]Ig$WMZLhy}ٞs]^.~smMYw82ǯ&#7_7oU>m6&N⅗ۺll޷x|nk: :SlwׇYaē-YK?%0S b#GҭW38qttxa'LvqFlbs~^0O+_}vb؉lO}Wn6sƳ<ֻMϹ;'f8)^,L=p=x{s{Ӥ}gE}OLqZ]|iߓ/[-exwN[=oŧ.}F|~}Cl+~,G`|*# |/OfY,{g,14fGt}x&Yl쏷o8BE/ s8|.g){9ٽrkaˋ39}n}ƊWmzgk/ߵ Z_}!?0p x?p÷7s?yg߽}_^z5?;Od|t_ x0v ]ޔ g+o3z/r8M=L\.,/0-fony{NYaD7t1O眻^j꫶Xg_ޙÕoG_%E*N/6;[5ۣ<0>qvӝJқ&|U<^l$_lq+OZoR|uɧvֆ?įdֆ,gcqqwv}}a^/RKo:b8 Os3YlٯG#v ̉_ZMߍÞ|ݙ|Smu7Xޟqs;lOu}˛a?~;Z4?u8N]Lr4g଑fs rzw֟~hpkjk΢9K= #NYs/O=^4β="t_P}\rFIեVodpr%w5lŗw6W+ ;O}Y=:G|!^ߍm'm{X^x6-^\zOQ18xլ,fػl}~w>^{~j޸ͧn󫷿i_J~_?8?qۙ8'>woyZFzՋeۼj=|zo&Z|N pFϊ_})Gg|}:gZ.3ܳ?N3,I{U܎z-s{_ =./RՈ^\v}a7ibmU_9qwtqU mϷYey˱87S3\ >|aiw5Ͷz6+;lsSf39-x-۽ Sgk_x)Kv΅V<;-ioL//w|f=z>˫[,o[66<qy\7֩Q"kh5ˇl N-TW_irl_q6 L}pﯟ7clrS}J3^LF.mKQ-~ew۳#+O}cv_mO|߹~>t;S~3}}~}no>^C_{8I\jҤxa<}{yXTCO/N/5VojǸꭳMNk/wN9G==cVG WN?8 To^1=<0lso%7fN"w/&՞ѷ/ A}6g\jO^X5Rmq@Tso5gWM{>+PMqSp0ś#jϚjlNu݉Űe}ZGwq)'˦ m%l> Ƴ>o?Zi_"o9U7{wヷذh$޹nY:=0_L$f-@t{ת~Il϶-YÉZuVxH>O?RI}&/G\z0cv |krt8qöpxLyğ_Q*s\ ӞӸՊf7l|YUS݈o%lkr\o0\}ñ3G{qpy1y8v}ʅUoqᨖ-oϮ|wl_X=Ex|^3ެpt{JuI={!n>O>_P{n?[7޸;?7~8n𧻓z|o~&o?"u9N|*^L]dx7KIE'խxڛ䄁o_;soHkgoMa*!W >ӬZ/vjz&l$NNѻHyvgT3&Kߞ΢̀n)Rƃ/z;m5WͶS6|=d[,}yĬn}Gŷ_MZⷷ}GS~{g˵Z[k8;Y&FLxۜyXpUK䜿m%}kt'='q+Fc{AWY5#ϕ'\u=9l8åYzɱ=v{'g7K6a8lk˳ɉi5L}r_;xRΡ{]{_{ bzo' g> p}gn?w~~ǽ~7~˷ϼï/<[oYk3wq̕[+=W7~^̝w}}{>Ƕ\Btz`+=.J5t,a%n5G{j'[m^8YݱlMopa Jgj6Ogo: xKN|E>0 ?fʇQWpP+p8Nxp{D>rg7 S9ߞ6]ΜgW}jh O`:Gy<vk`T\YW]WWG o5}- nCs~lk8v.7S牫XZ1G߾^L^_{ȯ\Q^ɋS>&\.^]jK3}ť 3_mz߳Ns<=:>t7 alqRSb0W[^"x|Yl5Rl΃&{E<yωo9㓳-O8^5樶o>7` ~*׹yyZ1WK,; |\⭳~o֝ #泹/<,M걽qwؖPs걟0KV}bqymv귧8?px[Nv>,4ǺpfaO),rZ`wWYs/~|[=どopk\{e[Ω΁}֋7?4ݷjK ofGa?/Cz%Of[O<|NsB;rfz&73;8}+_=gSxߕlļ]UOc=#_Kv )0lZ)j-u^w^D*L.\q ӜR-ճ;xho~f'rgjZr8 H#n\ Iv{Sk-p>ՆW ߯]7ss⁵هda-Rf'r'NK0I>29julSmH_4[{Z|z4CF>|3V͊j~xk%86LxX}çFX\=Mh{Ȧ^#gxgY>Ї{]T֩%'#jqY !v̯]6^qbY&_1[>98^mrf5I9xDxyXjfV9ħ-=g|a{mE{}Z5s> 犜{G5|瀻jܗj_x̦4X7 n3NMȶHh616ٜ6N3S.<ޖX=K|$^,Lf1WKmgF-1C{䬤9ii_bꚃnΩ9wZ=gu3uzժϯ[*.qlöꝮ<q5-~%F~$bfIl<{'ۋ}__y{N|yk??/_<_ۏ_?Ç?GȝK??Ow|÷?|?K4Cv~/g3!Ν?AVշo} o}42OCʕOsYes^/F_ ]joWϨ}ɩroK>잇qx"pu/2ofAֿ祚pU@ h/֗ncmqԈ:y|rˇYp'`=s?[ [_Yos'[-גj뽵0;Wz=k{ȓ=];wѝ3<_>O~j>jı;SufHzܺ=.Nl'i/w>(g?=I>|KUw'_X3WtӸ} \wF.f3 g|?xoq} _E&rfӇ4C;r.|v&YWV= p, #_q*sNWě'4c',4:zk {ʼnW^7Yoͱ x%U]1;QƱgΏfӧ·O΍wxZU Fm'q__Y ok_}j y_KG{z{Ip\Gߞk;S:%tW?rM+ۿo|x|vF?~퇘/?'ueb4 rH6.).r׿.^^J,_|bkyVbȎ+^yxgԟvó;y´0,A ;~|błSKwi1\aIX{ٳnFf⴯[o>կn/}g?L㥛IY+­]#iOl&y}>bI9hf=òkw|8:[kgY9Z=`g3oX;E,zށCXu] p=k^O?ku-?_W?/~۾{Gn?g_y{YO[=γxqϤ=bY !Gz.ŋW_ ms_g~峟/';9a8I!{Pl.w9\}T\j.X6m YKՒ8/0+.Xo~K/g#KS.j58qf*XzfwwK}r?apah|a'tua t;W⊧apUx댭D3oytnEKuzͱw9-Oi4\}goVs5lߌ>܃vvn^ܻGժWGV;Cgo9}l-ڹV,dOSj86:91;/퇝oŊcÑG̿'_Wy\8sf 0pI=:= gWm\OW0Do9Nc;QߞN{Ū5ڞ}ݏ|xI7:s&zK[v}}~a#ٳؘ8~o|woS>fO Vطqa_U|/^>OS^D]jcRzkpׯg|fjHutv'8^w6<gxWs[>H/i)ξ_W:{nf5ٰtrx&W}쉹ZL_T_>Gޗ7.+t^W1rK|{b^sn~u5]>0;oƧи95U}f>/7Lv}YR0^[NYS^~{N-Izv^;G›Yޟ'YKO\wuif.+>п7+}+ #^yo_[n_̋~>.NCl=.՛Dp-q7EJvޘDž#;}+6.op匃 N[r ,cn6aYxYYͯx˗}7 bͯ:6L|"o/'?Կ=Ngo i߃/bU,'wzxI?+$;-ζX?e33ɦ׌jaOjtb#U}4$ޒf+..NWCg[zvV_Ĝ9ǫ6ᓍWO.=⎏S=l &N#O?%/L_p1wyή7m%j{6a{~9ơ?93XR۫}/}%_Xl{fg.̳~ϐݝlq~vN.:qgqVl4~aE53g;g>8S.~vIvfꪥVG5AM3WOfZ[[;G"k69Z˷/+ipղsO [NNW'~m\a!gUww&]ﴸO} N>1_スνq{ixw?af8{VO t}O߬M?ZrWi1b{/a~ ?_~OTlWsקY:X|rߝǗ/mɧgAtrיO8{Պz|?GA?v/[/>?? /xn| ?ޯt6oxǟwn?G1>-9a-\!OniWJqf7.=-^ ށ6{ge(u@iP@Qk'*zG1XDI<TP4RGzfy ߙ{y)q8-c ``սĕ'-v5{y[t>3ui\9[8s+xP>t^p:x㆙})V}ϬirU)ߵ;>z/LkԟbJK[Lk$lǣ;8>uE_75ѭ=۬+glSq儋o0i5Woܝ1 IDATX}4'ݱƸ5(`p4nGͷ-/qqIƛe\A,G^177>0{j-N=D<~x=O]_uxŶLvk|nu+_e]7+]}G}W؎9[MЇO;jiI˞O[SMym/QzGp3On'+60s\qيglnj.@sƓCdk=5t1fHsDGf|s=8v3#ޣN[S:n"q\s&O4Zjs>fϸO/[Ć0{-njc5׀䰷k gSgGpNae1'ӟxcL`>c&^;qTQuׁk86 O1?~ܸ{ρ|r&i|T_EU~vZÕD8Qq&GCC6zraÙ/i|'6w}vz[m7l͏v$wX_x{C׭|uCMo:{>ww_?Wsw}yiWzӫ_sC!_ [?ZwnFO_= Í>b˿|9{o7\}1;SwODrO‡;ξVbh6a E~#aӝ rb'јtBUW9 ӉDw(oL~y†Kqi5؉(Gx2ݘ>1u'.߾-ZSYbԏO/Pc%nęz%|SW  ߌ+'NTO1Ř{:aHC܍9}dCZ7LW|&rןdb;l:k&Vm0uS3_hH8Z\xCvgxz liǥ}HAgnx`o֓{^ NjGԟw/lŲϘp|z'~M㨶tꂉqrm1|4[:lyZC'af>ּ\Vׁ*'z:m?çaOΥbªK_L{L?koN l8Lqr7\S7&%νw⬏u:[r%k1ꣳGChjau>~5kM4g7>J vi,9~yWSQ] uSwkjS>&Ŵhe- CŤè}Ϟ__=(Vw8} 76s\\Xy"qΚ%5|;t]Z=Wlsc=lWSu'f{K_fv]g>{oϮ75 /?~>-i΍!n(3/>ijNlyAF^W[sOqegv;zoq=]8q';[S\<0դOi [| 6?&}5[q⫡BR0xfL[㤺3L\յlj'9!0}|R ó|rAO#fq d/ofr'5|tOE-Osk=?l8Ws1Oz֧o :ēq6X"os:֕#خ|Z5/Gx1aˉ[!s\ )yf?/+0=c?`{[^䧋#ljTC|alg!]OUs_xqk(^l|?e63;>v>g9Ic1SgS5yWg3nx gsk5x=jk`_lׁˋ/'bObik?{;44z:ͥ5s7&8N`g8Ŧىqs*o|$l\l>N_qKX3_3s;sq͸ذ|l8ǡ/~k^ ĉH|t8-]bgSi.G_ bkN| _8u.6xbuU-p^`=},.ڣ~כ:ܮt5{߽^ps|ny5_e_.w֍oy?wn=Qo\^묗|`wzvzK_s9{.}4\j޼ 7Ǘ_%e\GwӅ[ӑ~o{G?v/.ɷ>qtQ6ls)6f#ϓg}rr~͹88}9NJw2O􌝹&^pDڜN${l1GwMΉUKOf͙7~KOb1fl ]}9JOϧjx/HfE~^aO>*.v֯9ϾT꛶ͱLgse/chsM>]NqS6{v_Lj)Dv:nӮq )q3s0N`9 cræ'=kxSM-sE?Wmlt5Hĵ^xd_sI9Ԕڛ-?Is~T:[YX~a춷[_ 4kͬ/~mo~P{9>_^S}snu֯?߽G_%~wү\u{W!>tڕtw3nu|?_W[ۺ~zn@ݽ>r]{Sg?{=O\^>ۿc]jhuFӷ7嗏Zo~޽ym흊a]wb[gɷpF'6]'''ʸmʰsS%l.t$ON.nSe3'4vѕדw!x|dK.&}\(iwlПoϜ(>so޴V >\~kͱZˏ8Z\sbR \{0n;lx:TK<=G]ϱx2?8NNno5l0//>9ɯZq+|u/V i\I>c,&],Nl5a77'i~t085bO7ұH=&^\5s9Yոk ;׫/~ۜG_lcgq~Ucyn֩_sq#~1|o\|DfTmӮR.z+оp=jLu=ѷ~/Ӯop'OE]yfn$8!?4 bk|)`\pq1w;fp>].5::Æiğ#YN-N>qӭk@kwnx'[<: Wg.qIYcUcXc`qךgxsK57e~O>/zݿֵot?OⷾZ9qu{c=m=;szwzvC1}w|K>FG]jvsy[zquޱ7͵}}ߕ׋{ouﭮӶ{_=w=p{wޓm'˾Ǭv?{}[%%;6/b+ޙwmN~N[s{w{NNs?7ne|hzm6\6ñ'en2~cզI?k‹WÇ3nCϬ~b𤫃ή/79*]YCj5VjŊ'k][M(^_,~z֯ CYs,58Y?JH柰`O( /,k|×z`9V_Qy9`y>7O{Ua*'r.fmq"v6niOTOk[=b"/5'zO>R Mn+.zj=7.qk%s5=o+ >84$Lum3?/,xsk\W i[ֳz}su 1of7U\"'^5UrEr;|yw|H@{l_t{0}2=AьouM{eOrg{~pn΁h MџUZW,)w:I\|Ձ֊ 7y\3nqj4.)4.>= Zi1=ǮV-ԇ/y'N>ͥtrX614/i'' X< Zɡ?ŗ8 _}]∿8gS-oL:k;e?8bfS_,B"^-bi.̑{Q:|t<{": wa=[} xF-jӘ70:T؎pGkVCXz [lo'_~qSǧ&){KO?y/ 9u,ዩF-ޙ> rCO'qɧc/Gs‹u'8nktv,5˕#ix+X6x99'=q řX$xS}UOXتe^,]\ϦR~y?n\f{qjMi^Nɇ 8{{c=9q0.M?gwr<ŧ<ⴉ6yM򈛹Tߔ{|bIsm|m?d~kfsܗǼNXxmrէ>\L|ibOB׷zԟ{k ^Z#p+$apC<0.QOVO>1>q5 {T\b/uѷ&t_'dڋM)>Q2cKMSǗO g>q"g 0v x}qqʟ|ٵ”L\|퉿駯|7n/zη?~Gr7-ף#n<z7y{ܺW|zv6wz^ycx!Z]O믟;hgFzwBGo}׻~ErzSz{غwgޑp=})}n}N[n޾mo[Wֵݾ'~6qG?׭ru}" ƒw]9O!lw>ehmv8laO=c&K㐇[ 5{b&?ɑ/g#3z0k`n\OZ}b $_/l IJO~cVpaA㎊g{;=gtk8{c͸bÔyŸr6?]BfmƓ_:́l_O _NwOPbq/i X9C?\u4jF b_pxp K>ńMcਆa?c w3 N͉q9ҭQ>)\l8Ư5>\j W,G]n23nb=sCVzrT LG?VoYnykԚ4Wu3>ĸ'X>'墹i/;{L>UiW{rhl44r$:L\{=ՐCW<][b[l'N|x+6;̔/.|v&D _Q_=qY> 0劣QqSk[39^?sa_u IDAT Lh{qO=jMiϰ2y`'&|9g'Geo.xaʟmrL<n\I|9[\bw"0x!c|'[\SۏzX{_^uF m}|vRm~u;eu<`=s{}sOC݅^u?z̺Z8B>߾so~mwǺMn>sm.;}{l||ϻ>H˿3)}&{,}27T'>;'Q8X6<8'&ܓ:mx掓}b\g36. t}yjlgotqsFWS{/)f_\u =x0nS.uVCb4e\FJ5OY{1 G.6qͫz‹XLBoڏ!?j>XfLױ4֧Ik=8Hh攻MfNgQ[u1`䣵Tssڌɹ~_ьw ۗ3Xx9j8@FE {1gROgۃ=>،I(΃q9 |uX{psf۟cv{bq;׾;y{i]>vgo7}Ycw~#zkۿY~|Q[ꗜ^𴧭o:|'<~a{5_>۾uɿ.;o;Vfr֫_WsǾG%w]aA7l7?;l7?ol|nQƧmxf cw :Aji1'['%qN~y:JϘa(Qz5r$3`8n0bpE;1y|أmǮO-ƾa[lSϺꨮ'YC}Zyg=kwS[X/} |7)Xz\%alpbj3r Sֳq\ӞgM8o^ڪ#yZi8-[jHO1_qN엻M77qUNtjg7O?>5OsI㩅;ٗo7?|G>rK_}ºg[{~nco|+bM3w߳o-~֯nE( >yG{JFs ޻}}]{,bo?sq^s{xvsGmbZG__g}]_Lɛ}G<tb܉4u'@/NڹQ_'8뢝S 7L_lxf;*V0ųuqV, |&~_-(ޘ] >Z_8)9-^ܚ?Z瞬>GCեξ/?L1Aꏷypx7Ƀ6_=laNvuò/Ǧ>_ߘXs>S=8kq7<;'Θroj>cM%F6t>1ՅOogO}'{4?.7>XN?nud58>XkUrj5]=/l6\r͚Z+5\8/FTG'&{p9"{cFњkihqYn|}{{[8[7w~rAbXqrS>]Kw?nwtκ]:on)Wuͱ9g J|>!8um9fSSoI5{"}\韜G'ao͘Ρdr G8}Omn |g=nʆ~sfO`堵~k_lFŘ8iiE\pٍg%x/oC總~um}2G?1k^b<68h\0x8,fƊsa]35>5jKIw5X1xqkkwN_Lq`.bm~+^MNRZy޼[>qև?>QC;Z75Vm>s1Lsԁ7x{ީ7{_νC_~n!/svnZ/l}>w_c~먆m^\c/'?`ǥo;Ïf?~\痄ȋuC׽_ؽ:w@}CZ]a#߳Ny+>)ys֩??Jۧ?>wmw^O~׻'}xU8M?ll6M 7[1a/HWGVMObGx1'fbi.y7g.N?tsO5qrido/cjIޓh:g+lȬ}J OVL>vb?Qygl{R&uTˌ:j#ŤG]dbԬUSlyiSZ#.6_E71V֝V[q3HkIWƸީ|΋ꋻ4'8-li9q6OY#`^<79>2/"qqV#][xtxH"Sw$|&px;N橶FSOs0՗խ_똘Z}LWM;W-kjb؍(69ň?){O?vǸc|nta%|.Ck|gRDzb8_|!j\j4~⺞e ]x~ZqA>>تo5էOٯXgI;?!0s1?NuTܚ s< 7cÙ4tt4曆Y %is 8O㉫5G4jFѪ9oϱkS[1Z#{ŗWv3A# ^lg6YO^_ƟL~ba&|_?^u5ja`Cؚ;bz'1{ϬuQ7q}9'lغvu:嵯:8yۻޮ ߵ/_7no_{۬szÿ}?ܪ53&Wl՟s|YtÈ?Z;~Lj}gm5q[S5G^~xW[q W:R^ OzmڵWozkI9yշG?t"4q'܌K?< ư{b-=&kfsk>q>'=qrOVQq~Gg Cm]HxT m3]`8⡜8iz|'?leU 3ul-aWSz2eO3?wauu|:ΉV|>z;~sm&5jb6tqɌŵ__c S*9|)wi2mN:4٪Ok@5ţjHKIWKxy3F57p0!gjNl{90iQLq`Plt8aǢFy抟o͑/[|Sڋ^slMlOL>k>?̶5r79ٍ)<:4N9Ŵ'-=g?u{v2k֯>{Ͽ0 {;箵׭o>+9N]1&j?5_Gsu n87Sٟ 3#__Nj׍oum.׽Mׇ_~; WZxˎwޏ:峎} m㷽O.slo?hrp}TyϠw;i 47+1٬$|tVCVXQ>֓12 /9 :pqWM=_v8-\FGH[7|o񧫯ZeΟ 76cZ8~׌k?JkbjLomZ5oLT5o>]~{R.+`:91~~i7yGx7#w~>͇<[Sp8L8~$Li-_-᧎Y=|I,ɧWNo.H1%Np'a{ l]+kbw#ñ7}- }ց7xEg]"V|qE]{ ś{?/^%Gq }K.oudNk?9'?)FWxfܱӜ&?,IWlu2UWؽW3?MyOTC';^ \skLFX>zۏ`\mzx짯KOn|}~Z^Gs7S_u/Cotq9>ƥ~ujlDkfm5g6ݥ/q+6yU=m#46BMlDa:Al"yr'6*>Q|4igq<0%_x'Yt9SXZ6xuژiُfot8ǎuSc0q́{ŝ-;ற~fbɭt >I_uӰ{×=.}Y~j53͚q=5lqy&qu {b{a2qs=Շzõnɽ:M:hlq8G@ ?u\gjViS.v֢+Of8\$7{}Z^c扳87X擽qk5O 9w>{\Eq+oS ;N~u/oiijưrx.}|o|>9N\?W夾h@p icxӵf2׵xfO9>I5wnkn7y;obkr&a5LH-clئys?w~>ݏ٫[yf=qN>փnò8ܤ:==OG\>1s|r$n?⋃l縈qM~pu67,=ua[k}XuC 䛼/Vc]>]n}썽(.Hk_Opp&}߻?}xGk_www! ;>nkkٷuʖ7~ׇ߱wYra9Tد~Z=OY׸u?5_vp֜uꖓgvZ}Z3ݾd]7]kw>}ɺUwӶ}vS?q=9}>q?͉>yHZ; PmHx' GDOUZig/4_'X7|>۴w2_O^lk}saXX]EןXL4KAh93u)f_lr?k!6>m~"7}c\]o,^О,7;Zן雵59Xjߟ{b;gb4>w4`8 a>ktj*o/'piyT\I9=Zկ8Kޚ\fDLs)>8^ċӾN|<4~i;4Ngq˘č֚Ou ʮAL؈|樆{XG{g?̂']_=`ϰ8G7/O _jb Sl־i/ov+O۾sK1~7mgJZg@wuw~}99/c u>9Ȟv&7q]~㷾b_s'پn.N9W^CWe..y^~F s}&:'oϪI@ͦ᧴ڀ65|Vg.vM:I' Ou15w7piH'nqS Yl-qĸUOO'kco9_7?N85 / ]1Ux͗\|Y΄6.>I[mk8탳'kVgyI?ws.3sٜcuj_lt98O{58ZOohNnlj2XZo'VՇϮOkx6Lw1q/nW;, #z'b+N \qܵjq}~'#dªȁ|ƵNX먞m{}bܾǵa.'|i0ބ#$ OCF+mܭOsN?tv49ڸI=S m _0s+Gx4<] 7ZZt5Qׯ_WO|잗ƃs^5U3N}|p?a?7_~M-Q)Ԋ蚘pc~Nꀙ4}WqHId{ky |k4^yĖ7r&qtՐ72X~z3@=T fuj_fg.Ƹj;Qs⢍SaڧbZƓ7lSOi>bZjɜLkR=ŹOHb"j.;b_s9a>?N8:1&g>q,qx '?6פ[k~M~Rgɭ14GXĜ4_gNjx~sןOS >s}\xp\tf\_,V1el+&YLZ[+1Ě{hzC˯&\jNc\D\<7[1qU φZ֍>{ _ny>̻k_NyZ75z[}[}릷1\7-w#~[j*/mͦuVrl;c7~d{.Qޏvޑ?X+Guxlc[^~׺Z;Kl47~urWzK^2]y>i~'lè :)mI6%68'ߴW-_\ꯟ<#֦&\y<S><5[zp8?03ji]nJXbbê3iO590 __=8a^Ic&9S[zRlϯΚřӘr5> vr4/6{_|db/Jzֽ_ܜpad/O1>)v\汙quX`qm<^fM3e<{E-H#TI@W퇽no|fy>O?O5e+;[sVN)s.=}:UnzbLQb-gcƝbɌ!S{p| u~xsưuA0oprK?tuf; pD=b}]Kk}2|sp[-qcV]:7o=p75=Xeתx)悴j_3.hsOouW 6_X~98˛4V_kfPkֹߚU^ǃO6ϗ/g0 3\Y[U_]Lu'G5Q;9&UքM>Xy#SWO>l6杝;֙~xy_׽w-kZ{K}z\_Y篋vc[Nv]lۓc_r}cn._ǿ[3fK el6Z>=_-=qw=npA3>)Ƹ@~65ߌc-bH껸kˉogg/ID?۾:70^6RMO'aYx䧏vs^0nM|XZ>?׳G=gGbpS\simǑ86|KfZ/XW6ŭּ<8QN}B䃃1n}yA<֋85RV_?=cLՉG_#j)Ɂa'맳/9WgI㜵^ >UW56k8Z9\W-8 ɏOS&q~cks>bO_I+u'ϧ~xr[{cj6fip^l{#x{hM?nUC}c'Ϭ86;nyqϽ.^|10DO[#W֗~l8 g k mߟ8gDnR+FrGֱ#/?,1Ovl[5ӭ5M`I`p֊eǑü&`Y>v}OkA7in1Iu:i☐N_%~}'vcExwsYvk^swr\o~GYO׹ָOZw3uw}7|_C4Wڔͼsa'_׽z}un9eutvg>sz{şu[޸.\}#m}n8`g]kX+_u{c= OXwX???Q6J'Rzn"}n4۰ttq'n6pŹ睱|ƵЗ UKx1{)>.QkX\99M\Ugz'<Ǽ\f{;U [=❵kSqsqy5d/5Iڦ.>ݓ_1'hBϵ)6_kUs.՗=g5%=m7nn]PLd/wx7u EĕgR 傛X[~|6W}S?y0y躉M3ƕ4,g4qN9G:zCxͳ˗۵:fYgڰs^C85=9{{P.}A$7ڏiņys=sl}g9{^ߣjner,nqRzW~9g秏\$z79$y}mKn}Z=80iך=3`ρpm֟raHiM7y)Mos噿˳c}>{wן0߼˷//[.g3z뇇/W5[hCϵ'}l9w >OZ*_|OS֟۷eO_^~X>r⏖.c}x{뷿O>cyǛYN¿Xk_UD΅a Қ MۡjM'G'b%ls"}կ}3'lg9zulK\lޞMOF\t<[nT #F)+GM9pa:ꭾ x?bպp⸜Ѥ^vaz|+ʓϬ㫸Wsc?"‰.}Xu_:d=iqNҚ|Cv0U{Wq?={c`n+'-H֗ôq{ mQK:GjodxY{g5|޳P?Mۣdb`|q]8ՎkWsh8Im>0Fs=U5/PxꅖCd}kL_M'9&zrWOy->9z/[~ьN'}$|}{,{9լg{/i =B.kK^?7|m_\{,\~sW}[מ}|r\fy޴|Q?˛^wv˙_5vK^rb?7<n-j{w}׻͖OӮv}i3ާ }~$by£{xopYo]>5_,_Er\J7Z>}c$W8jK^?Xe7 Eþ;(DFp.vnbhҍj[:C~S7X_f~&OZm,)>i8ڷrn x[pYP5Ʌmm ߜ-X~:>f./Z^_c}+Ü< S^Fxo]3'a[z"޸g;xZ{WgNQ1 ,\&Vl^M'oq{ ?{7l8G! 4^8 >ŮQE߽'~lu 1!3Ag4~u鮅>I^&_N2׍o5}؅' C{za\Aڛ|06Lt{p&氄v[bWkOu/{L]*9 _ ηy>< <ŏ˝>Q?V~wpל=}[`}gr=17簸^鉙s5#Xx ۇ{l6Z}u,X^kgÔN8\:%i^주 [MdƏm3Z:٭#9WoCÄ?ʏ{o+{+it<Wi؉x2l80G鸏Ϗ.n\Z _-Ǽ|&O'Ba?nwS՛wu~9}nMxa֜V:aw,__n߼[~raY޻u=ٿ?lK~:-] IDATrK_z?n׿Uo!xo^b~臖{[k?:>̡G?Nwy_roۏS|7oY?;}=~>{bϽe[.C~j?<-#1'}o\?{]}ZşSK/;B(d7Ed}1[㨼C|Qhȡ^յnSŌa[Cl7%꺹O=W/_R<~C~)V|gmՍܩf^9R?{=c55dk(ޘ5ˣI(Zk6$;Qz=?^rOZ|^#aO:05 ?$8뫾z`o]s93:a8O9OֳxcǶ~n9 G~Q͋fDb0^0#V&9©hwuځt}g|:sWđ3V>z|&=hϪOo}{8-CXzƧ:xZ$ֈT#Nzzo$K89'w_/qӇraՀk=^$ܿ_5Ըs7콴i.?z_794 3p4UkcޟxRnͧ]'_ŋ+o֍} QН羷Hkoܹ5yMw0qYcn/u탾uμ]7}ѵ\ˏ/j8#G~x|?n=_e]~~<7>o_>WZ>pcbY~g׾˥uWn5xk.o?6zw ux C:06N>ǽ8?{^ry}_xyŻ)] o~ğ:js=wyyg}?t=YV| ~b |o'(c&V [c9zi}q{v=樹:ߡު^&vr\Oj0S☾l$~𛋥Յg8f>m`W۷^6IjUObt硆i⃛#|_,ڇY$3s8>,0]N{Ǐ \KߵNy7Zw{o^l>}+Ĉ>}\)zpԁi-/<L|aAug57KN[/v"׼?9/r;lͻ7xg*>NaNu땭32e֨ω#~l%^^Y-i;\'ex鹗^m9]8B^cz>|ӆ%{|Mș=#ۂx2iRouW1/ćߚ ˅i=^>;%NӞqua7qs'yvZj~zIg^3g@WWvuC}@bpxo֛#7%~;q_n"'WV[HÊ5C5s)yηrK^r.ׯ]?ܺs޼c~w߫^'pO|w`;g7pSNC>.76almSꄛsڨϙ?k3åa$k^5_CZ^pM4⫯4^9R=n>5aƉcvdy\luœaƔ\lo-‹{|=4ʣ"=yk _>v{1{ʙ+M8+§qvhߩ;;j't%i~`&O~km-y©6ŮĪ! Ʌo4'i6^h!.W G!FzbkTM^1"uwvOgut.\_v3ĜSpr٤OwғK\F{)NxY˼#_v&F< ?n2}a3Ʈj>Z^0}M_ꈑj߂=Vռ=yq]|;[g<[5Ċ7u} 7sa|֐^؂_l zi01r~lWoz3x9i&'6)>]sK?luIZɱNvbt٣᫷r4īzɑOj깘C\:>:W|8vC;ws2|o?Gd{ܒחA{/w߶\JW^??/ď/o;M[>\QFr8C>S/Wu?yMnsW~~}Z?#gy?{w(^,׿W,X9u/~w]~WՕzڡ сJKO8sO%:qT<3.]?ĪQ36sOߴ5Wgvz!qwO~1x7jlI_W.=y'6;lsz6궧z;GLzC'8z9dú59ktMC}gO|q]y'ıÔ>ϼ(Ty&{oijY0 })|xk_f^gӜS=Ƕ?Gx Wn8}ap3&=G7V#_z-a>yܽ&g 㾡ʍ?ɑyq:0'fy='̵<uvoZS^s}l|>Cy|ɴMްg>Æo_[kt5?nbϮ )%x]^?^{=3bk*vOמ~X=V6 zwH`1^Jˋ3.vկxo^s,w\H.׸эŽ}r{޳׮?ѻ勯{+兿>uo}U_?[.)-gu^b[~~|;߹s['o}[|*|+^qU!`84!0wX76kK#FʁƧ?xk,Wx) #8F ܩ۟NKl9kOCuZFNßJ3GKu+wړ\=N=&}zG&o5h/{fKf߹qOUk 8W?]_zgl܄<§O2կ %Ղ+ƋZڇ08 FV XvqIp[>KȫsC.VzznplƳʫZbmr_uL_yV̏08_^\SO1MZ;EρXQ%ׯ(2//8>ë_xի^CI?=]®{l uoK㯇xFv%ly^\jgӤ55C?Z?c/>72yٸt='6xh'qWW>TkdK"|z}:t6x_a>=HkC 9pzm=rfpbXjU#-wWL W~b/FXv͹٣{Kk<]Or EOL~=T o-<7Zl?'{%|_y9jg)z^w\F 5SSN 6^=_3LWŖҭnѧG>Weߏ-5?]txg~Aׯ٠;ۚs/_?W--]lǻlq>)O^nr,Xw_^-7m}:^o:|烹GOO&3\/_~>)Oyv3>pͺq'ׯߊm,u֍~CdHa4gM:n9r8FwzpSuW_q}MU^5Òa'' 7=z>LoE ֢'>~>7Z\oL mƅwHkN7 3^ly8hzㄩyf]kMp[&4Fk&;O+7Xkl9ik?{/FWQʹ8k/m̓P)'~x덮֬'7>9Wy5qyOaa/s8up|0C>۫ᇭn|4km--^]: 00tV-k']]^Kpvq8߇ΰ>϶Nr[w{\oR?G/O[rj{9TaXww/O~Og苾h|7s3֯ZyqADN\Α=5tg$L2f x {tl֗D^ο;0~ønT?9ۈ'Lc{> ۓهz'o놟kSk#rS~5kŭ;9מl|jl+L\A1='r} wq=+Fփwm-K\nZ|{/3O\/>1"渀/lmzu|iN1L:Q:sUL67/z!ro|…)YCٳGD93l}63>uksֳ\7>?cn3ybF^#r:c}8ݣ!䍯X\κDq l{/6ye.^Z^\Z޾9G'v˟<QI}r[ \[OYs'o`r&~( w>0p |şj˙q=Gӟos0{u >oaborpT#->rIJӭ[Nր'v\<|jOWbI1sQ.>UcsׁnLEV:bt"GX}ԝ}jyzSuu3}Oy?˓ms?7W=yAoo<%<ǝ}yO%/Yz<\sWsI-o|g~py˲=os`8]sb-yhNw; |3'\_;s9gNDƟgΎOiX>n{aoK~—Ϟsprk0Z|764뽽,}}g64h^zriz /-x%ν||՘l:7f[erG#FbSaO`9/]3f<ʞ]Y]QOgiZ8s l<}[/+(NՃ+ƞ,g /ǀ?S9l@37ϧfNL͖1g6q;mk3>$꛳'qN'z~HWCol>q)n^_c!~/_?sCӯwyɏD_;=[kw]K/2yYK_޳>G|اwx~)h?@~.w'}{|zֳ/Y<3)7}7-oo>;Ӷ|Aя{<99ޝ|~ևȋT񂈋Ĝ.X_:x>b0Wkb߼a^^1֟y$tNL8Z=oS-vv+V\-x>`bj[tugF=rq/Ns|!G{},^W^b1zdUNnjǗt#yXخ͜|qgS-3#]iyImxR?qo 7=m-0gnj ))Fi{OK͉Z9V/ǧ_́Owt{{g6zϯGnN׳uWNiKZ>v| z פk'Fh_~,38c{5_-_u_iw|wz/!=x`8C=q\g}胾^3駟AJ.3F5.ȯq״@gƍ<;hWɜa;c|ʟ5)sϻeg>˻ן.x \}xa` GG>\oƲ_kK^ځ7Džx#u~Wk~ &}c8W\}__پ*+??<:!>_G<}~╮t=/V|؏БbЅ%;(rp&\A0ʉ8Ln_.r`O&pauMA-2{YZśei|Wo{Sx4ī_)_cY|@Z7xx\#q207RnܼX{1MoE}Ͼ]I!'{=1?yq<0|ɟ.9ImpGg>Soe诺7s&`ӓ\G{;u'pFҼF; ?/CN5`uv`&kwGng^OCaMr/[.|Qi.Onٷ}zNv{#7 ~@&/?S?us3}A1y'B13g~gN|:>x9,jOy$xF>sA9~5y&%;#xs"<|/9 .2q f׽!nS}ߺċU7-w#<_?Jt8=V'=M{"-k #-{7-$j'x'zIT;Ctn?Qw|2}sOvx{yՒwۇ9l:|%l~ZڋX2r 5Z;'Jz&LLONyq̛q}{sO{gd^qƽM8_ˈ8`'笩}7ؽh#&WsfbՐ[o|drM_=K386q}>W=z<q9~Wg{èwLXiA<ŇWs}^<-uA_@ً%U]'luIitn[kXx6ʁ9pq'/δo;kś_x yƴ掯a};$}=XzPN50'a6o7V~]qYO3{|Ї|vK>*;icY9Ok99~]=c>׽m)=n[^|'~n9{qsRCLi>5O},0WlQ؉)/wWc>qrL| z׸+Oɇ:{,?_gܰwׂc/s}[[4u Ϟyq^r*՟c؞Ctt}R'z2Ԙ~ߨt=ו/t(^ L^9/zo-cWd]?p䘶5eyi9޳_wg6>3gЭ!L=T7~v#>c;1.sg݀_vN|W=F{ſ ,Xڵ5ZM#}Wf%7O|h~׊˛b *~rRg냴__/%Qaݜ#M׃ F721oʗ;1#Vi=9͓39|-`N=꥚jBN@g?]_$WbKb3?׶#^yRNp|8Ty=nbϳgì+M~쑚4 hNO)sۛjuOkNK}Fɧa׏y3IguOFt=_rி8W<>\\a?ɞ!]縟ɟ\wmzIsO=~R f|vgs^i缨kdy/=Iϳֺf rH630 N>KxKL=y}^W;߾s{r-l ='p9-~ƒ?̬G"Npϗ /S-:'n/0Ͻ:y=[=%873s'oqy{Q,~6YZ{|=vk67ko\z#t=? ]}aGþW~\YgM]8jW ۇ}?A>|?^|8\D&5iMn: vxeh8'ySKNW?+:f/#Xaq5{#9_l˩Zs{|Zq'ٴ^8y|p)É?>qՐOq˕#׼1X'|ShnL.7yR˙tk{y^ޗh9Ytz*Ɵ3ﺉhi?P>]=k1'巶4YjIÆ÷յ>0GZS;b5ۀA|<$>HO/s}3A&Ζy8}\v=Digќt:;+t c-ݓaaFg n |6%3/_|xtІ 1fOq_=|9OS;L}E\3{J׬+u nHۧZ_M^ C_g{<^^=\|_aQ}oymđpk~s%4OTէK2̉g׽u_K]R']PCK. )g&n~7bӤu=9=[l36o}l<w}Tr0oypބok3](i/q8a 8!Ox$4 x6~mqԧlKɉM?< (_m=3ÇL!p&VZ泷r]0÷}O=3UCs'<W 69xv0l5yᭋ=/grK'=Wow>4\=7f5ί3 Ghx` _rՆ5μ8G嫓=ʯÚېCԝ_=~ѵ%0Cą烛k&Tظ[w{.p_r]~؞Gz3ڰ$NXefgpj+O{Oʙ'= փ}knz[m8qZ']TW!} G!M-ÅW1+`I SE?K[߷6#']0i?&3'ԾbxQ`s=:.>19Ɯ0 ?3:~ۏtuanxy7tl 'ɻ/jV&~bfW^t1>7Nzd.g xXN5sk?,L>>)z1Za>bIܴ7JkIw<^OQ4K: syIV6L1Tgwm㛱 G9'|njWuϾcˋx[M7oqjw~WN|q7?'1ql#?;88T:fk*f", yxH!5q t{.ѵ']lymm-qGҺe}<ӟ{{-}9WG3'9ĉXg!ggz'9ūV ;OzAV7{:[n6 OpN7q|ުc !Ѿ'7Jf,5np_D?񓎯>ؙV>˱߮?vlK:vsccMlykP=]cϻM.SIxP/{qc/ʭg8'XܸY>`O&qۏcw=<'Vx=JfN̫Ey0nu<|yÇ˚ioa_xpnӽdN¤7X:H^r›"3񲗽l>ng=Yvmz׻.x#P<\t|qMoZ޷~[믍ϻrwp͞z憷 ]Y?S׾N'Ǵ㋋нL5S†i&([.#{p9Q-^l rSz=.wÝ|1y7 %]b/YWrK\_=1oOxf 0\ׅ2Au *'ǧ$#o |D~̭>oGbkN`f'|q3;sZW G.T6_LnCcO'Ɯ C}+s@\ zgWv䶿l{-w'A?.1o|x谛q\9=Lㇳ U~|] &b蕨U/ ;{ˎCN܃j3?@8M{#7k2{=  IDATOrڧ 4^+x8^&O6.O[|~2qY'.uꏄ&KՃwt=VrqUOi{U-#G[7{=A`;3apz&g/ys;NY5yg{{K/3{o |6Hɴf?+~sMc3}%.'RZT_m+b>a牂 'c/Hm[l[g礞!/ؔU}~'g=TS|q{r>ߓۃqX+KQ|/'5g}~pD?ݛ{H'`䪅On>Մ Wb ht=xT'Ny{WɆ)WN*F5Ibiudׁ<a\=_X}竳?Ɲl__/=a+nb/.wsY>CC .<.C.!oÆ8Haav3uxAu'WnF-#5.:Y_u'b|DnX^1{Eo/Ëʅ=i|՛gke3[uq֭>Ͼco<4bk'?#0g Հo>d֪]YWTSՁo/[C7kCNO\dы5wj gg5] s2x[9 C'i?aړô>yqħ>=P y¸AW3ܟQ} ?] 9|%0>,>!u)}C>{b=}r/pɴ _ 1wM#o^'[_buk ?_/>t'>ۙ;Vx|K^zsVp+,~|כǙ;s}6,!sG'g}s jt?&pF|| >qޭ$M֗[p$~v{S08M }/N{QFwMƅ!MkG{_uUKln1gU~%/޳&~fi,3Z{āϼZJc]a8 >6#՞fzKwuqsm\X .oU8㭏R~m;󼛇] -[ڍ^d|XĄ;lЇ9^\S =c`!v=Uh7`{:uՀ7?a3K-׎_9\0oɇ3zϏ 7?^1ӏϳ93>6q' ^ĭ?ys\` zbI0z0}AO3nɩVU}aav_/dvqO%gqask_|ۇ}a<>)+vi '|]s`]Tya˗% ;,I-|k{9` 7gs10[`姓ҳ0P'NgϚS⤸}NZGӏߛ_zX!7t6j r/Mǘ'dreW+N}4w[;/'xrWG,N~pԏ9݈WOT:|:ygC]ag%I/^~ڹ͚~kyT]k#\uė_s群뵵1_%[L'WiS[烏z1כ]I^xo> r;qyo\-gy=|խO'@z;:w9Ðv6ǁt8C0l\L;$?; 4 ^#<^qxjѰ$M֗MΉɦLs;]os71a rQ~93]\\~u`L`]$\S~}/H5C0;I\p˙OU>&9כX|sh/K˜73kW{'Lw(G,xs5K<3OopiG7%0S>uN% xi5ps[Gkw3{Fj/~〥aQd+zw5naՈKߞơCD>\P|>_ nshk̆]n|֖o"n _m?If<u>qov-O{Ӷ kl?xy; W[E/z? OX^W,\<_ܵ9w:+'wv¸l׹C.Gt5h\9^&f3sM׫I\s-z%RgNv:oP!$HD (@Q[EPzgqvDm;Ҋ# 1! 2 (pwK{\Bd=U_ϻwvX_4fLwA/9nݛc}i旣f=VY~Iㅓ;m_⭹尓zIڋr<|9rZ}=p5|:l{i^9k^qςνY>_Zvkn?tGk0;Ղk 9?zq%|ͦq6k2qs /V1}I')|d9}kn+J> _r{k{k/ؾ[3X-ex?駟}7|C ߾}w׬Dx<`>b#;\.TM`$0I7.p<44Gw(:hs;./v1ooBG깼#:p}U\ub{yzVG]v~gs#\zu7yҭMҽvwȇ3WX[Co d!\aOfyz :oߛO3Y챮ac?>97YiWۃ / C+OYt=$SK<;wFi-sˣaՀm-l|g>c5.?>09׏OkM5iX׃ Kx!sZowؤk|h?9S菜=)O~w_|_<X_xOp>1}@[u گ]]]矿]G=Qp}p&΄k8WذFgyΙ8:g+/{ꭼ,Wl ,)6Oiʹ4-_'_VunrL.Oo_[dj#s:/ͳo=iozīÕ߼=UOc&{Ĩ×$\0ު11|w;H׽pucۯs^G+Oγ_3 4OwiAF딫3wrsT_~KWǜ ?}(3HW#|)|1|nXC0?OqX"Vg7\ל\]y'03Z,{>q><87ĭ_x>*-'|9.^|ԶGDNCW;ck50ɛ/Yտox(uyӟSN٧߼OHDa]VxJ:9pyȭ݀!r/p>뫚pO;_ugypWêÞj՛'^k"0Z6>Zm?oֿf9HGp'O؞k#Zns,~7乮lyOty>(9 Y|˷|}ߞ5%dw.fI3/ٝgi~=׹7o5kT#^H=y4۳I|8K>7cQN;xblyh^b3K5//ާ6n:A׶xs:=6WeIt4|g|Zo9Uw?)O^^w Snw^rЇ.o~ל-^i~quϞ0ܐo3c |K˟KLp!b85p|c78n9=ko }p)<}6 vjC'wx浚x[;8N1 ^U[,rWKl#6|ةսa'~N80|;ayӞ<~A}۷]Q%/ IOz!b].7 ~E/78mށ橞g|aM7ĄF7}L>`(G\ܽȱ$|ÈS\.ü~iϜaE]|asͳ^2pOdW|4\߬'wOGcÒxx)N_Maglu>k,_9\p\8uF8q†#abZgkKMѶn~V9Foơ/{^i/N=Wܴ\=)={? {Dl]4/DNSN^~5NkUx]'ψgݞY.MwM|0w9.]xrGmIr^˫9{yr֩_qr3BC:/7.Z^~&ǧ<2yzW\5٧ }/uq>Z{3xk3?|/ǧ Zw9Ȧ޵óKρ{n3W3`{VJhhm ;?>h—n1\ `fsDWz".>l9I,[)Yȱ5I&o|o_ܽ,9Ŀs9>餓 w/xWl^.j9:;`F Nމ#zN-praӜ}5&\>=9Tn:R>M#;86qwp+9w/q?'L\xz9qX?#3͑<~8כY H9t2_ _qu3{I X9|rO.z,7bl=&3h=btk1T/>vkWL[`੏rZ^ N1<}3L^gT?xLkPԇn=0 [b^Z8zo׳x1_?/LX|tC\zR~Mt!>iL<ͧ0.oo&}|W@sأ/K0>uρ@B:î9t\yW3pqX/\kŪ_aԬ=r[5uKO-xEnx?{_O]XR0/i/mȝRS iadMњ5&wS~Mh]\ GtgzᏤI2OZ|C/.PIマ| _G]j﬿K^y%֋^W g>s}^}p]j'lg_ͮ5Ƿ⮖8Æ4rx&6;nX[Sʝ:[y<'m/bǍg^Ss{rCl{)_`'|'_OQa'~1 7:lKxQs'< [ӎsbřٍロ? *ڿgÚo*w{ąXI7=13G<|+mI^fkGm IDAT:\5d^O}̼>g,/b|G9yonϦ\orMCvq\)^aʼn4 ߰x$_p|/L=ЇKşv=OtR̼ފ}޴'~oĹ؇p7{;s˹,ߌE1yjw?k+udQN=8= oG%O<_Ml8ɬUNʧIr'|vs Oгj3ڷCYۼz&ކ{j^c['m}lx:_va_^ S_S-X~7]53j\)Ұ6^ _'ߌ'9zy-:|qupyk7`xj&IWM,_a5`0hv:Xg}b8\n$wC`&6L{y =uo8~dYY7U[O㇙"WZ?Osԇ\ែ7ąoZYO{,'|6k\. /־ІxʋCXؼfa6x)=Wd zÔzE5)Oy酤?{_ gıx C\|]pͮ0Lje_sZΪWQsXS{$'nvfbVCE_}я[mzu?,3|ծVh}lj#/)'.s|z \ﻭ?޹l> z^рl۰7cb+t6hc-v׻w3[n G!!p0dp͞=߀m}jlsN:gx[#}>o˵YO]"^?qڰa|[ܘ7\XYc\b֯_5v㇧Io ٰ>iX˧|֝_W:׽Kxӗ{W-O{_ũr?k.o} ~|__s#Fկu.?#m+u6G8tE #M.%Z:ƜO|S78|Ryv眞9L@ᬃĽMQ'ue7N=z+_?N19!|_找_,Z_L'pKNcLxz-n/hsC~ɴ'0Y~L|E;$1h@w\- lpn .u`!ʆˆϦF51[/>air$jqq-^t7獆H'ߚAC7v\ϛ1~y=zbð/K&&93O巾bso9]/h}cߪo&Z]{5'h#A'_y3Ǚߞ;W $l}ć'qå_gMCaÕu]u_?Z{_I9zɶ?(ޫ'fzգݏ@lgZ.~<ξ✾qrM /%aãwyvk[L g=Wg!-u݊/ zhIm _x rhzW8|/V\v]׳~iV\><8[D"8mO?,g.;|9\I3q{H|{|a C~[NXp^0bg.7/އ\Su/Mf|̇޳9s7;X_ag>: =m^ޒG˫lWu׾N?]np,}ԣ'ɟ,ǭ1wS=\rþvM'. مN ]L.ߜZy/8Һ'O$|XsW(MG«S<o0n>1m tC ^k[m{_ھt OץuM/ٛ/Ҽ^3sū1yqM%,Wx&|' hv+#\s:2c1O= <{#I7_,:/'ߑtg9~myV<)CL2Ѓ>䇩:lQ=1<sQ@KbLUQtC/pF#07 ja1\XvUv89Gʳ]Bg,f5tf:Cw:|b%;=G19So><{܀3Wlɋ?XbFkcW-L;߿GS-Bڴ~l9 koO|w5oOrA /nZG,k}x^|s;^_Ǐ>Weyr߱}CCog/_Z~ОO}ρGK}@nyaUpG|߼/IqzbnU>0yrǧ$}ykKóL?Ȇ~TKNY'53:olMѻ3`σɸ`=4ziz[bǟ\[qvׯxr󟿼3cxںGn򉟸x-]e.٣xKպ+|5[;¨ǕW7[[w.buEG9 >q'gF<[/Qy9>lբ喟Ɠm0 {9I}ų`p]7{5q);0ϙ7u`Ⲯ΢g\շ.jkm\sȿ&Cq?δ\uԍ*'g:&.F~K+s>kt.`蹮HTzW轺xArk7χܵw leNXفq<&}y2>C6/VMO?;?Lm|Fv{PrMcWwrkϺZQ J/9^5y) Ӻ{:grh<6_D8z]Gx<ؿOgtMIz~5 lw\z:f}{=ֿr{_)wr{syΫ2qׇ5kZNWoֈ_=1=|p{я溞U7ܓZƳ$g{W/i~~;ޱ[_O{Ѓ;zLy?׶{F탞F4}N0m0|cT6/N{'p=atEQpс Xnqi o݁V8_;_ui~98ra L6găkgq\rWG;N Zt<-^g3xĪM<xp{7Zm"ќ't^WSgESs-ly| _ٳ/`W?F/þhQ/T;W\-9O Ϯ|6\91'_pUŖS }jUg={8[SD~끱$-߸[z| {VC̜S,t c8˩Gj99ēgˍ3ui8pE zo_}z8ȃs1-Vrb+3Q\zѣ>>wv|jl^s=_N5o+lU0>9sۋ|C,9'z#Xuf-g6\b鉫VXx}Uoj~X/zN ?AZZXqͭ ~P 85kRݼuS|ӗA$8aXPG Ŭ'^0sP7|{zl؉{Z~,y:c~gѫ\>3︜~GK'{/^}y9~=~7/{Õ}?c>\x~~r{}>YZǵ"?j[bzғ9g|y=mw}gh{QW~w}|!c6mzwDwZV=H-o~[ߺꬳ?snv=Z} ?匿-a}_{_~߲ۛa?ᄕuOk:oU5 #nyɦ[Gx 6)G=) c._H9zE3Q}g5΁9[sڳ;s3׹ Jl"FvMlO3$GL._o{ŌwfrZ j`fo_zg]v3hyZ۬?q[Ax|Hx>_߲\ N)~˧ g-O\3|n}w/6Y~c/ۏVWu6w=5lM:;}֑k?׽y\X_CZ|KolZ|^=~TN/Zs]k}םk?{k}nٽY={;N;ρIuo}ʫ8`dx=Xx=3_+,Ù|we?뷭SO_4?#!eOϤ?'- ?or;a̻}yoCϞmRTK+/,{g\m/ivƯ(}ʝ'Uz>Jt`Lp p6}H݀|k[Cug7&Wu?ǬŖzy$=za_9 _*_7֒<<'pt}G="Ͽ U g׽zK:Dm85ZO=9O-8g^$' ޸p꽔nm Me 9ty0ξN;a 8h{Ζ#'=p1LڧZ/9Q}ށ\{LNq:F\X<8NjGNx/aC<-Vir WY7K1ު& y]OJ[wx٢gp|l3f̗?[}# uWؔpt5W29 IDAT ]˅cl;]K|?5ytxĈZ$:|F0<l"fZ:F5g]p"_ C!̾ZR8a+n¥I׶3@sL[g}X5avF{i~ ߒ֗g?k^1/K"ݟxkWn>HZ?Cqa7[ÞZF38š6{Z.֭Ap՛\=麕Zf._i{k'\3`|r¥g-oxC{?qݏ^>jw=uy o|^\Z',~-S'ϭuwV5axkgǚqEې[jlS=ڜ֟>-y}i8^tID̜]nr-JXyij띎#߾^tkgC{PO s$MMëKԗ xkfOl_,7-5 O{E%_.>kwfk 낧u@E|J5:0x8R޲쭫:âuה'_̞gnQijcηlzW}^slqX=&{_nq8K8~8xGCp7۽ڪ+mnrq'~/<~=r/៶y&WŚMšaf&G8a叏&gmɯ'!|YWɗ·luAMٻz]}?߲|p.WAߵ;xhݗU9czyߴx-zNs15k~֦/6^&/ W=󫕈U=>Z_szb]o0q6}He]i3h#A\&<4/g?kMh )O>._^ߩrNuo~mr_3m8iq#^Obarͧz[x'uko49"rj/x ׀kNxo^A{qoW?zrI\kOڰ9N8kxaKՙ᯾Mb _wO˶~LX#ic<֣.^-s Սo#[_O?;4۵u.ش<9$6^t3R/oD,3綆zc ͏>i^gn WWq}6wX_+~rC\Z˻矿|WI8U~?|l4-\#;NoMpbFπϨ/|yrI98ك=sXӷ7}-5<:պޅZ~MwÄ/ۧ˗~͟ԧ.jY?-az أz7{Zn/jU~w;Jw]`.<ꅶ$~`j+/"Fbq$OgO_z@ӏ>Z\B7.Wi$zV3O4)w>Z룇yql^p~N={h8oGq5 =|%귞u7[jܞM|JL 6닷[8ý_N=k76{ťo6^o[_u)c+hp}Q=< 16=my퟼iˇӛ'[Qr@׻UIvg OS g{sd^^>j g7[m]՘3^-\Ik+s5='bpVcR/\ĪC{`8}c#Ly[郉Kغz˖g/̞94{UZBʃi8:W+1'tk40X_~ZOo }8U˱gŮٟ9Y.y֗:zѯ~+ќދu}_551._iX"D=Ei뙠Zz` ~)/?|>ڀ%갋UanIX^ik烍G,уg@X{kp0Ž~mW8ZxՁ@=ʯ܆S7oz-Π˟o_A$~^_#cֿk?o]/~SI˳πM{5>sZsבMENkq_ixn _l Wte PprM3jΞue]x\KPXpS S݁!/K>ʼnC.>\5i)g!~1Ŭ Gor71sG̚=?5k>`|tɾg^ZOb Zu4S~d_ ;'=.9k愋O}/6`%gkܾi_g^Ms{)S04xg|ΒzM^gr{/긦oo \zi=׼xե(3C''|{\7.󞽼wwyX/W;n|wr{cy=s=+8~zpP?j/ߘ1#՛QL~g~n؆X7cag-z]MsI1p3?|n?e/?,O}o q6;[b0jrj! i]0},_GmWϞZ_fNxbgJwg:֣-Zp=GjऻV4#oĩWb~E%CvK{Bu]y(g^L7Z\t86|HRujáݛJ7?)u_kbY߼<~ڵ 9>Q֩f}yՄNj[xA._{eNaGʹtpݙ~^Ώ4,ML?xw&sF?Gx>d&K}Հ#raGk'|S$gtM>~^=co-Cp[q3ܾPص>h'}qQ^;?'r9fٿxo=`z'~)wZn~|XCC]֓Wߝz].{|M65:SI6 3){]|vu‹w<0Bi:ᘹN29H79b8V+y^IOaiL\88ʯFՒ7%r÷YS,'go˥qXͭ՜|Sʥ Fq=PUN}:wd{㋋{ 5gAii5< +6(laY<:\b]baY^za]r?b0<ڵfx` |@ggȧj¹/ʹ|}Y\ 9lcڷ=HKZ=9-oy>d ??a iOt5O+Ms:#?~M|- mk]}Z}ԩ-ƿ]\ux[}cn}7mW˧.g]KWwŵ԰맇/N٤-6jyhAfNLw-(&ja O'ճvkޛq߬xd珇nq'j[z/ /?|W~{On_Eˋ7W,q=;e}OԆ[jż}yZ7rK^|xͿr߇>lG>ryAa-/z }9(/,9|iٻ n\t/~.&D>_{Gva/Zpy{g._Ї.{DN<ӧ?,^a㩿ao-tlx XC]}: O |rlzQJsf?:/MI^ZOyr㨶ù?x9uǮ.]<_N0SI7.kv/61g攛^YW ki-/M\xg0ZgxeϹk@vagaʁ-7mXo|i)ˮ=.? y/? >sy赞h"4ހz (Wot3OM_]O3H_~:js[W_åVCN}ۛ9\#z˃Zyqg#y.}|ɫV teʙl8a"qW|6cU|t|z?9fO|~g?Ն=*;ZwZx37Ϙ{Qy{{GN:pO6s~~>HrجY_ޜod{O@c?s&w=ŷcW^*g^jx|s}{a?.OgǵqaMkk5}ׯ=o;|@q?lym?{9wk_gI'/7\s?&wV/~wNwZrb'SWߩU}}æub רƥgOHx|jͯrO|Ij$ F_rfgG#䄋w긊G\[^~(}W_|.OO\>|?_NUwmoyM?˯<ǖ7//;w{w/wX9Oyrwy/r=|_3_n>8c^;quwG_|Gaς'\о 탾/}_lH -Vjž/9ˍNɟ}#qʭWm/5tiٳ:]6W,F!rþ˸9IoLyP!)>u 7]-uU~1ڛ< Pf\z{Jxu /ֿmrO-?[,j9J(XK\MagLs?Q5ʫ7^n[}plq_mÆ<ͯ1^;HcުotFӸ䘷g:oz&ao&zsi]$?V 8|?L5I~vgipT/8=-57ʗ??>OU G ,vT;py!8/R>>6a'8NN' 'f$ٸ~0Ն1zygfOՁo]rqNs`yDL/=<;l[qƥ IDAT>|Xxc.nx=giovK>^lQWurmo\޲~W? ߴ\sď)l'QOZE|r{ [=_M`/1F~8bMoNx{R9l2:f G*^Jx=SG-w__=x9쳖O;/~cOiOݞϾ汏]\/X>m`Ϟk?gn_~_~ =w[нsuyLbw0^c?v._]޶~pnz$iþcgjuHӺN4O99m9|9%l~F]{1vC.͓z| sEK>:ۅEЉQ.~_^9D0Aë~78?bq _bOL!ϡWn K0K \<ٴbOmڴ!zNOt-ţf<<줼r=u^ʭW5/>9z5^_{C6=դ'f0Wl¾480vr'syIqYs{ w65u| !_/a?NQ_+Np#6sx3^K_= S[Ǭ=Z .~o=m] N:͋,Vriէb|ack݀y`YغVoLSk ~c-[5.}8fd&MSՁպ.i#]q8^GO}|뫷~C/Y7h}{crݨs 3O]w3O+^]U 7} yvt{ӟ= O^~0J룴_ڮpիl 駯_|lOz#\O>۾b}L~:/\Zc{@^׀8v:m߾'z?+`͓7]7wͣvz ob[w5[Iu?S#6Ιtdd1L[aGZ/ HK󲊏ŧy-d"7\ fg߆~~űM#6L'(r4EES:؊Ɇbg]tw+ Θq1L̰4aX:Ň[b_rIV_>ke_3&;!T}dj[N!>ž:2̼Q K5w M׏O?rNu '֤ODCS<~~j_s_qًW>3oW|#8%:̿+4a#s?R`\hݲ]vtc>\\5'=iLb\QZ76ծU;|0a%3r9sOl vëV헉@]ճOko{yjdvt8ڧ_ASqgc>Xru#!_:2=rLʖ+_v|Nk~p)kg}p-tan䝤jm]"s@f@F3iolp_M|;73N6ÖmAc;y8ύ7G΁Z57G8]8pWXsmNÙO~W~w^gmw='w]O=O}ֺч=bd~vuO޽5۟׽MzcZ| lzKgֵg~W/n>'<~||v}O^7ٞ?ȷnOlz1_]mo9ؿGS?M׬5bj 1nwrsqni{LkCntjZK5vgIL`&ϼjaCc~>57\|з|P8rAk 6m2q|bpz/t6b5a[.851[sAGNGc=ǫ4[.<9/wOQ~7&ftT<۔SGD֚G?&:ؽWیQc8jԐo5>1"~6|g:5&vrY_Lsjb| P^ěMCY?Nz#ַ_3~qjAU.N 8|WSS<;YbgG~NI1߸ͧ1'kl.&WgCLlO?R>}9S/9TG'_10guk|Z94[P]Zjj w/޺~;VO;mo[?멤':ˏփ~huc>mU}z2>{濝*CWc O1+2>-j~&_}#2rS)p}!ahY<5Yd=q30 |1X8]sX~A|7mwϽr~w|vf}]Kg>n[8g ^`/>Ncxc[.gDz[=~ӪߵnnFi;m}&gO[wޝK<ϷO?^K=}\Ivpe+:kwNG!?q1>1b5d.לO}TZo:~HH߼oˏӥk|38֓Md<Ɣ.iөu˦o~}Lib;0N f=/=AO_ba^kGx`D:_ӾؑrYl˥?ҋI6G3Ö~يzCCfX0¤K.ޔOY >Ǵ5V>)9Mjc'~n6) v5>O䜹ԩݮm]i_c{ՇÄ;~%SܯY_룘V#>NWMϱ@o\)|c}ձ5 }u05Ü|`Ӻˮf[LO54]q%<1Z~f}O1x+<;Yofyh~?oھ~q7_=_7r{ޓn庁܅{[N}mon 5sqQSM;Wշˬ=&٧}ڞG7g?ߞol߸>~޼jha㕦߆%wXr->k7MC6f/vr7Y7MOC[ SClFy+bsP?GOW-5)lb'M[IWt~vF]c#{$,:1z;jv#^–[G;9'my_b`&65&"rdC0 ;=0f7uGj5ΘSw(5`x;f):bc]yo}'>._֪Gdcqol7PD/_K'?(W]q G!7wlœcW=25aC_.b?'{_$Gz2jΚ[g.urv3`m[x{}2t0'{w/~b~?d5W\lbf?Ln/bwa|pTdZk~8ᲑCv>;[(J^o?rGbWKg ̏D|'vc/F.-xOxk}noz/._}[?SMe_Cߨ?tx>桹./N<cWܶ.|p8fo%8?\ūsuR* >boݿKSonf}k׏a|}Yzvvk^]-#\7\ r+\yo]覷nnbn gKw-%׍>u'kJ{KfS?KOY7IOڟ~x{1^ 1/j\!9=SyvxOyOi׭qDn(<)G?c|ОPi3&rWpîO>/G_19g-&^8#L|2?𦍮ܸ䩵np[qd6qY\北;=z)<'Ocϯ/_tƁkxʵ+K5ϱX ѥoç9%ӇG[N>nz'VykҚw 7Ydn[oIJG?:7=_3>cyp/LuV+]8}Ao /?13p>i>R=٧NsO yEw]͏ _N#k _X}u1w駟s s[>__G"~=߼?ʗ7?{6{XLf<8jd8lO [8 V&^k7Ռ~ gƩyCăyooC|%4bqTV{t|ʙ_O 9ob)wbf+ {x+_},d1n<*d=KCXMlcHl>:F̉:c}#Y7rSu<(^~~tj9uG"rQ?>>6>0⍍?xsX1^/s9F#s4?߲=~~/k۱Pqm goxlg]ۛ^r?.{_]?bW{} bI晛r7n~0F?Y=woۛ}.w+mԧ_}~̅1?k_ӺmnW3\eKU,D.Be]~䉧h;'d6Z">E^!!FW\>Ot̘WC76 S)7 6uS(GZN&GF,m2|b͚aNܐFO g;OW,)Oj:Œ)o-I̿?\y8S7̨yYlᓦ}\6Ɨn u*ЇXiŧasE>M!QK|"}z(Y YY,ξ-Wx9񣫆jv=x#2۴Vo8x~p{ִ=$8 &&.y#`ώ#smop\À6a}.#Xonׅw_J7g!q͍^Mj67 b覭pjsLbPD,+ֻZ>/Ϝgd¡;Axۃsi{=tn~;pkSaܵotޮ&9u£}޼zX3wNs[P >NI&nF6?pA?%=>.}b4TGtT=y 5tq{n8S?}^cS\썥y Գ5^Zs|(:?k\7 ת?<>i+}O1xmȆEnLQCfГr}$'ܣ|a/x=}coѬC?7+ozbP9[~'K>YuWcNZc}[޼Z IDAT'N.ns{kc?C^/ O뻋"c=iwwN^~]7m Kf}}7 k~*|o^Gz1>ck2%gsљ8?5Ϲ6W~tp}g^vkY^1SGoЉO/N_Irrq7e[HYhO+?+Gjcsۈ^q6"8vz&~3&ߩ5g58vi2b k=ώ9'Os#~rlwn~Ӈ?;#0H7 am?_b7}̷Z[81la3O9;ϭO?tkGٳ}$~N:71t&}1ӧ;#[\p۝aŇ=v{m^U鏪u,# YEn'_7!?:n4ϚGFuϖx-2v~g\~3f|ÄC>uOE?s; SN['k'9'>P;'ʓ<}Ufh9pk[κF𯰞,|$! |}4rVG>?7ꊋE>Cr|$6p~ڪ1Ο8j৏f]1^/.9G ?s C3[7.vyʝ~쾳1鋭uL!ֲ:^eÅc-[Kf>}Qx[ r䇧C/_sϿGgYlƞxeUkr[䰋,!&/xg~WoZu&II3|,7XSb7~vݙ >OμM3.z&I-۩|.{MO\dZׁWl_yn{v+_y{k^waoޜ9@ K|ĿeMbqT/>jmӿ5uӟơ_]K,'LDžN #=<|Н󰈏]WEp=:\8_ fmpt04|}MtM:Q ;|&Dj3;|M?s03ڴƐoye:j̯%֥z[st?tpaC6(Ƙuf=tA_r2,6j*pR]|l\|oİ 6} %?(㜮K>@VƮ&M,:ۃ 9v:lb֮\/bL.-n<HO7'}lмӺK¯qOo<ʷ9 SKyap8cL.?Z=#ǧ?\s]e}q2f|\r_M5 =88.|o=XzщmVqU\}iqk?}pvQX ']4s1HPjjZ?LԾ?9=i;aaO0j [{^\y/~vG o}v%S"o~߹ t 9ClTsrn6fSkNGs:j'gp~cG/MݚxDA=}Sst|KEg|ilЙu1Q/goػ:g`]uMvʺ{z:S{}.~vy{lg=1۱w]BǶֵޅ߱>{w\}O\lajȺ\ kv_u<钗؞gn˧oЇn7m=trG5ˮܘAױ/7|O)= +9=͚Ħ_E㣩l ]cma|}Gx ѢNW:Njc8N0hnj}6%Cbfncl$#㒧l6)6~rc׎bԠ+b>^yٍiͱ'sWZ'z&O^ KD@,үO׋\aSquFd$':K&FkmąS _V7~aȯyZ؍3jOF'+'YS>> % &]X/agS nuW?3rO~\!ͼl|+N5o愾a sjxw)a? W\_|׼~_8jwQ}.|U87qjwV lٝKӺ0᫉p:17|xcl>t[|Fdx| +.F w_0Xzq|qfipi a:(NǦE56uqu)[ 1~wsMg_|޸}7|~wWN:v>9p$6]>^:yʫ?@Gae⥋4y\k|͇{x8‘鳓ħص0G}vz5Whk?2srҡpQW^O|(s95X̞Ϭ?~/m{_7κz]'mezغλк޻y+{݈[u}^~13w/xSWۭ>ۋ1|}}}umxp@ckF+Wٛ7α{$FCrџ~/Z~-X|#2.k>\b>'>/;#f.0s}?"UjYdh3v1q͟?1mS.Y\>OoQD;~kbG?9>1f.2 3Q-ǿ|ҥדWu wG sMqlSw8yprɣ|\lɻr4;/jLjrNx10\|D_Nbb҇iN:zv> srYz$|6'zX=}uAƃթ3ƎÎ `9a5%pdq#~aX'hr/N n'Y0Q?}>a UCEW\Wb̉C̭jG{9m}O1pvcyQ\4ܠƂ+&>Otjj}vB?˛_xǬ~y1H͕:ȍM_ zEa4o%Z1|O}@űiט>%5 bpsfZqH-Qث)·oc̷Xc%7V>Б 3$>_~,|`c.Rk]LjW9 G/۷ϸe.jxߺv>k{5]__+_;G{޳w5K^jnt}鿋3duk///wE=Oz܎\}3ovkz굯n~akK?n\'cό^躶 ov}Us~  [k:5ulqZ#.EꓫkbQ1Z?1j9bɳŕggOġKv^Ӈו|M,TF@c[x>m⊱)lH?Q`?AãͯG?O~dw`zS+̜\k~pt8bU]W[X&$^Izb-\'yVl 8jtN /ʖ.| 5_AbN|Uk7kك |o/?U<Pu#qtt<8Ęp_t|ԀȥH~#N+'_>|P~B;?]󁫙9tb`eTK9 8|5Dz5J'}&&G_|5]M@E޺xKNij_cSG5ȘW_sgM8[4"EWl Coԉ?mp`gS9nPӞ9:A5m-|j1q}VNLPr!yA]GsUGveS"__h]il |k *9\2{愾K\~b'UrTCqK#gq泺t 8J_mOYIپ*g |+K:cFjQXّz+6N2{KZxae\?hG֌!jï~ZfdyA9mtňNW^m:اߴUSs˙{tNls'\S7p>6(0'S.NMuT`g:GtM:O=k&ڼH'N.7X"82M<.*` }1.Td'O 61ե?|Ӌi჊çOsX~6|cM{HEhokʡ͘KЏ` Yy{1_{m78v8&c'RK>?3?SyX?GG~r?>6rIc? \E_K$F݈|T=쳦oƱcX' s #/G.80Ɇ:kO.F?e}եC8IŤ'!3YW3O+Yܨ<< >Y>&ql`:X>Zt)y}t_wŷ~իkFfGg{?r~vE.]ZouuONYP|\u^u?ܶ?=9κϷn-/lǞҩ'|15q`t)Xr5glӟ[\67e|n*̙]>פ:)fw^/q59Al)gy5qO.OX|_s˖/=!9wuh'=XDݔg.ip~qPι'ʟ 8==,n>p4cW R;\^7\O//i~ ^L[eօ{l,(jenL|}#rCro ]:ە֏V]gC IDATߜ8 n\w}G/~bQe{Ջ^=nSpT-kԑnWƅJcY eG!r\x]u-yO =3oj烳5Z6~×;_d {?:ϏzKaCdvT=aiovUorŧdX7q Y ͦӵY& I>ŰmKCtꋍ7GpjrW[ߤ686/:\5;fӅpops@wf}Ũd W~qqQc/[8|.~[͝N^ N>6taґ_IL \ qŤ/o>`w7Y7Nk0js\k8Į8jT|嘵Uj;ׇFO*?]'r8O'2~oO_s܆㦙xe1_Vrs/2,rOC Y|XnGtƛj&^9]V?k|ׅsN{C>qb"}{붗 ط[cy}|{n5sۼb]\_vV4^?N=ÖzUl9Ģԗ_}Q8ƙM :̀Mskc{E\D#^vp.Xǧ?.s:߻bC 1M=d?/TI19o䯑{s^'7.zrT>yuT:AV:ҩ/COc[a y93a9>2YuV;c!ſ zaKx}ϻWo7[7 ܘ8'÷ls\eLƯrk-f/^_/x!9g>O{]C:;a뭛÷XO]n]z?=Qn_j<՝8t#xv;y y7 |Gۗ|mZת]y:.sSpc']bwkP۶>=w~Eۙ_E{|x󶳞ct;c3Xn$~OԮsW/~S_oּxO~闶VܥMN-Y f:fKu?p'sڒ99~\$ONLJ:zMl(8i{yrfnqZs-IWƋ-]aj: w`8hhK<0rjɿ|f-\A?1nt8r˅;_*ˮ}ᨩ=;X98QW=n}qS/֙ŋ9z ?,tjCX._'|&^Z04|tGkN֓Q/k~|ggb!B٦|Oz:],]PO;_.y^4S>}n|o=aNڐr0֥"c_/rGM `lG=L4ӥq87=!>t}/O|=oi/~ `޺>>vxWmBw}'v}\?s?:'}g~lOcߓ_]߽3?lڹqOƍA#kxFO[R磥|h~g:“{(ןtbs ՞o>\}uuN?c7Q T=t|7.ħ5%wN^Xx59>}]s ?xO?l~K'zz.~/'q(3]|w>:+ʗ_TLL>]P&_0ě8l(xud;ljӞ.d~ \]';~u\g3/zۻuʵķ}u,Y_=o[U nq൶<'gl?p߯^OI=7<0Xgn=z^S>?^Zm_^:__9jZO{#.α]s׻)ySI?y=ѿ.K?mop[l_H|/c^N;g12Wk!Ώ+?* ol.:{:o7ySGN߸ՠ{gkZ>;bۤmD} ׂb T"8mz:N\Miث~oŪsϼrz3jscX/|f~#||G6^|4ƋsBFj$C_^xʑ7[d|bk-]cL/VI|7{ȇ.|Q'o@ol~j^t#Oc+Lrϛ0Vm^/OWpmWlNYz 5^fw#u"8nF|' p64E`kBMOV+/}8t\V-von>sSLc5kCW^7W/Pm|9k_vY;(Il'c޶8=R\ywCn^&^qk^:w3zeWc;1tȜUKx/x~˦O:/gC1R<DcT묃~bX=?U>/YK|su/|{rV<۳ _S췼/;'_$_25>Ob=}Oiw㰷qZuo+r{cuWzg?{ZR{^d:7t|Nn~J׸_k?H{o_gooܟs".oY7.+՞|.sxOm/~7ZW?vng=/{?7nz2l>˶npu_}h+z7v%5Y{vuXcú9yuiomZxvO{ϯ|>?c5ki [46jco &ѳ׊'<0&N@BW}6(~wĬ;`m.d!6pعiJcAz2cҌmFuՌ&528bgCgsKM7,P:˟^k>7|a= g%.[zN0 jai]aS71>?؈M~R#l;˛/+ ~=8k?X{D}{h:\s~^='֍_u=hEg?U._n>qn~e_)?_;>i='_ɏ+M˯=ƥ1ZI?qp5|l3W8yW7eS> .µt/wc <{x$dzH=FEp?yWÅE O/_c;'~?[C5?rTS? q}K)wLJC|_9>n3墫9b$TꛜZjR  ̗?=韨IcyzRz7MOYO=w~{S?1߹unR<>_֏q}]~J'_~j7ًMڞn<^iu}g=i}W߳}º9(2;;~w_߳}~Wrg?KzO}_m_O%s}oY߷zƼ򵯽5.z%F'~?=W~y ڞԧl׼'l/|3׏l-qf#Ⓦ!=X\3>13pXQ/>8&VG}٫v>Z$!TM #/:4']m3o~&͜ן<[|ּ֕Øq d&tGCߘGtM}s k/}!xCC}'ۃs3$f곩>iȿj\l0f_5Y #l|(~'96|16O(]>G^x5WK5S<2;,hּ+KlZC~flx5'O=jc7.cCxnݫ 5~{z9θzڄNME747krx`:zQuٛ&V'ǧߔb^ftg;CC1<9KWs|$y>OGm_;t=EF˞Sg?5 qu?_{^:7_ǰ.>|w(׭r#lWX \7}qWgdTl1.x|;wG2[,C94 `qӿq5GkO%OtĿVl2y1G&&w^UKFyqrjN_5\>3qŠbڤ4~0~į3f6 Ϥͯ9ֵsW+\ͼ/?꬏GA/*v)YN:u~sMDG9eWk{ul5?,!ٟFI@WL~#̻+q\?>߯۶^Y{z혏vn]}aO[7^n*=F畯uF˞7v~{k7۟{xx׼e\ Zx#%"'߳>#f6gtb6jCd+&Le <صbUᨇMk8RS8g|9qO:)g>V#?daNӧ gfnķ:i[qaך_z>&M]_,5gço5N8WKV~/.?2||#7 ҇?s`Qz̆BQltXxY.l:Ϲb+ڋ6&g߅¦8G>[X:۫m:nf-_uf3>rsLыsȦQTbI&2k޾W-\_Uȅ) 1N/6|\kv}*)֤za 8͏9d['V}HOӸMb ܚm5oK7:լdX8%|o~Q='U ?q }kboO?j_%W7oOz#˷n_޴DƗmoXOieRO{ޏ׿{qCTZTut|{?~oWX [+7qϭNuޯ.ơfr9979|3ʋwb//ŚwzͼE0jٍ[_>V^t~Zi? F6ztQ~lOFBϮv\܋k|ͥRl`DtƍzZa#.2ovsu {pNEVwHWnh92ՠ/Wl(o{HR{{T\wp$_j^|js\0;hb{<zBqvq9e]GѹRm%W_;l۫~BB %48:;Hk(^CՁy| ;;8d_kU~kru,[a0<0_G}Q Gϵǧs/9J 2؟I?rՇW8{_R=sTz s=쳁h#w7zsR>r^-q|O_9\zڮXoZXO}>ax#z}I6:=b@x斝>S5w8VvpZ⮱DœggNq_#5ƒZE>ft!6.6ېw5 );b=mX}!acPmcTou6dcsJF?6VW C<8m-˳Jo>5֖KħQ8J|•o}'Fұ IDATv~]{/&Z/ˮ/Nvk)<:3;o̹9m^ҿqYymu~1 ٺpػ|P xOyƇ糙6~?`6U5'ڮȼ#/>NoLW]l{Ցx C/=FFo*o9˳u+!S/epr;/\ljV1a.^_ ކev0ಷ~5vV9'%b])t/gzFʏmqKG=yEQO',|φ[$z_җޞe4ҹ^x1wklF;l}Я~⇳IlVbOUÂ]?jS/>V>lWGoS*6o|ɷLcțp2Moܸ\`|m,9v,kð?\׼f/{g9 NƾwNgO+V]z8>;_8qo;\􈋌w}- o̹8n?:>~Ǖ9f[,Gx67ɲm1ƫ_ O8viUgd<p*)'6tl'/qn='~ Fބu; ȄhtH|( [dO\jOVU8b’Gc,.>kSLxj~agK;]WVYOE_~Kp}䏇v~+.6n!)(o*lw}~Z~evخۦK.8o;U"Jk>tag[_V/ڻ|׾1rtZ>ҹOcS>?8X9[ъ}@r#xXMɋڬp_C;ƍ:o<9}G`_h ( d{:?8gywrL;'Ou/8.qBx^0[}7A}^ɊՏErPͣX]lZt]]]Xx֓c ^!6<lx&JeSO%5ϵK[ #U/:.ѯcpd{Sc^XS_>mKqm)FLno f\z :PyEe'Nȡn}S^1|qs8}Oxߵ76Nм{) sN]:kݸư|Ο<]u.UYwqWj= 4!Z W];=kN,b$X3?I?<8H};V؊z)O ]fpv}1Vr.qZoG)|W;2z›m}ʍ lvi|k7>dJqWLjo< {=lDG[c70k˧v`~|دkY1Mr7hu8Ay:BdHң&f_ .eG:jL>6dhu:]Ei;G˞?nn)٠`"a|6|uX6W`jHU}=6O[9܊;.c+??<0|k{vj]-+־\nwk|ĒҺK~INѦ3 |n.[/A|:d\;~j_v)9+ڍ[27МVquZҺp5%ʼ-wq|wܲwu[7xǡy[ƙ&K5~돓>;cҏs>amznty;rZykcԹױk_ؓ32^k1>qå|3o0Q7,\Sο;g O_n-Ƅ ʫWҭ& mlqvU+q2z9jWm#oX-l= c^cVToCW&1ZXe|#m?5);-l7W{w !{u%b'|Z/[]x|%UƦ1Owʭuȟ Wfz; g=,/#lkиEw\`#<| g9O]㫟X489b׼s\cN_< bo3aiŋŶ8q;^uurEop:Y |rcDmxWYƓ|1Ft+Nu#^/_e[|1ұ%ᇣ.6^0Dʼnvxl cWUs>߰:T+v}.0?ᅕOFQ->>g ~VoqcG 8nهAt<[?OW\1@ptks7:|>|mnxw^wK.r1z㜍lǗ-/p"%okM$?6;v{09W5(pFYsZi󥇃ԕ֦~+OvVZ1VzMη>+K&f!+OkR/3;o 1nOyn ծGdZ\Fg?1IG΍w oCwzܣE^=㻞q~crą{|{糘<߶>*8J6W8yl?tul4nd;Ը!]r9s>Nꟶ8œ^م#f} c)} ;Y/`3H}mW9V+=/b܎/Y7-bD+zc~+\a|zm0k4_mS෷M0xsk~aސ\nNof1-#1 zMԮȖN,[a|5xC5]cu̱ݮ>gg^7x^/[qϟWy2[z9Wgy?Co;Լ?D;qF}dq%2N(_޸S<(+r2Լ|+Jqqwil`B1[ٜtf59&d5k"ً[Z|E]6bi[Cm8|/Fyf֋E1n.6Η-?<56?$`;~v٨,<_+Gxյ+|Ó6ok|YX98QG<]:|%mWr/6LQbJ.ʎ^ųa6Yd~%Ǖ^?ŭb)f|Vk|\/f WQ׏h9:q,BŦ2L6{:` )]Svn[y;?}܎F_t|͗OE?1F/lz2x8 %_s&9tn}c#v _RW[L)vm ]E{͍\<797˿]eu?П{g/fO^UN#/J֡ w#kMT/kVŃwlj9q}8/Ny[}w?n\;O?``b̈#ĺE/6~gߓ>l/&rky4FQuxk'::=w@_rnd{|4opeHowvWKSl6<}g'?񁓬q 89ּ'5/x](0km^}ձouŭOjۺɵ'|:?DVxέrtb\Xl돍8m66LXy~)>]2zWV}+71aôy(G%` }k?&wqX)ĕ'nճgU/iъS˗LP4kCN%q%ӎ`htgoh׵"uVdG#SV;g͍[n-`G]o8O6N?zqs.xO~g>wx޼un v񫞍z$O!{;`C<2lS; `~)|ة 'l5_8*_ڐ[Q|5vxr\qO_蟝jl[Vq&uXNq8|~n^eT?w)q.'u3[';yW>Yf#<^RգL ]pMl,j>%13օ:  6Е׊XV=%_,QS,]{ƣ~鏚~/W_sҔ_q>f.wx3 owh||qQhCs^v{7s?|ƿg.rVیN:?{CX8=9^<9yk#}tt\w6r|q^E}@}Ksc~sM977_h7;be7Ƽ|nw;7)Ź\S}/=P1Q:W}쳥kdϧ:7+NpɛrCu68&;ݷٷLj;p$Ţ+ٲ Q[t|6b'uqie3ʍFbLrAp/:(N8bǽ|ٰ\}WˑƟ-ξy>[.r/7\,ƙ4new ;?/0pr9K}hӯru~+rXl9Yyn ;>Ώl76}_mٖ -u8>lF']<&_([2q8zn%'[_P_;x#v/_6 ;Fݹ[nv;$VG]r+VG?6;68|bp]J_|6~ 9J嵋wF{:X?w|t|)ylкh 5E{|̷~|vǍ}_?;Ӽn:ٖ}}bWλ:/p^*FW߮ocq+_1GtW_ߥ5.lF~5Qq8c˭w@+:/mx>v.w6`o|ܞxY}?#ۆo7&dUgο'2Ǎ^ xŸȼ yv˻~~inc p1,s%my{£Y2Wot1.v}?8_gsϷ~BGǾkKlm=2^[㡿yHc}TaHn6+eIG[}d͞?b ز#OV┏r*&2>&t#]=hY|49--h lWφ~-CAĞn/va(- ŭXxl*xtnQޢ_¨_sVd89;]mXe՟]Dv]6ƫ5N+[k3_?m'/nzbnrk i IDATqʇOM8:e(-\cܹ?ox-:GC+Ӝ_c^ݸ]gˋ_Շ..Y>Edx+v{Յ]NUQyM9?˶qDvvQv+uv?֟]ګm2xo j&٠~ ?nc5-'gz;qK͌yޭuqwÃ_[}mMo6^fymφk_/f8[ڻ",>+4ɴ5F "kl[e|>?|/jo.RWh+9CF+QYZԮ88;83.f3O{+^]Ans Vۿy^1z %5y~޺{?=oowOϝWyO}W{[gs3oOh}`__6lW|;㿍׽۱g=s<w_|?+khߵ_Gz8ūrګwd٭xOz8٭k[>ӓvYŷYl?Le@pΆ@Mh;Ѷ@;?=%秞.rHƂQّ }Wl6#y |]Wl-\Aqldz|)qذW ƭ=zF'79@rҶ:` Ϧ]卍gU_p _xnZoeCnx>an0n /n+Qdq`sىb{LX8;bq|{1jO~?Q<\ۘMxG&xpp#\}9YÐ:u9$;猀@k9m] .9Zwbk Yܚj{͔/̫L|iyI_C;>|aPv8a%r/rق͏;ue W;Y:fa+79+pK{ϏN-/aGƁu7^wqp[?Ů|VZkrֆ]Nq~tRrn Ϧ}[6ʫ̍퓇͗-ﳟܤ]Ɵzot;:ƛ9?<4}[UI_kO||c:3ށ8ͭXhNU6Џ[1l0́_8p҅#6UxN&N;aGt7֊R8_:]%={W5sjA~;o+qlW|²qЧ>1ccs<'&||nj3O|l'_y_Yyo?;w?1Nv o&†-2dQ0ɵ :wqȊM5BuK 8N8Qn1ӅUmr8Yᲅ˾ e_cULp_Lv2vX$_qW,yї#\vϮmDCr^1a{68(ae'~?xJcL[=~ /~l1.H_PcLp[707`/0qw)xz'~(.;>4Y<ӮsQ[mU_6& '6}dɎN\_\[1嫽-_2$NjV!1N: :j,S[ˁ,$Vd g>3;oyk:YwQk:?|:skOkbm\,3=;|#7oτ?9t>w+fǿ.5gmyʻECƈ·8Ώl6lƻOv0y< 意 m:[`GAd_nlċK__XšW¬NP,N~eѣ~ƽ~kXW06_`g}dn\p^ye1sSLk|uy+^iesOzҸ-o584>񑏎'9?c{ޭOxkoԷ7˿l/;HyMrCn/veuQO_>3}G9#9~a{_q n0>^rmjWzx˧ 'm}:q\M|p_3~OA%oy[pk ٠HCcu ]hsmE!d|cogͷWxqu7}g |A3mon}W|g\2c|xKO?0wĶwsk6?6O}ƕq>s^<_t#x6|s~΅ب7go1>7"ؕum7JoQj3[Nv6Ië[0({< ¤̂Ϗ,[$y_J:p21`XV*Varuy(qr)/"_jggÊ_>טZNg#{v cve}xMxJ{7oijó'ؒ[Wdb|Ӌԋ6 ]~kNoG; /oԣUXӯq%Ϧk_(ֲ;~8Z'(p]EO׸GǶc}}7ܵtc@gS)u>ܪm07UWaG_ŔKu97w>?<6'<~\F7ޮd?732,敬G]jq/ͻ:-x{;1k<Ջ=,{Kƙq1+k_^jbЋ<&GWW^7/}-32B}|~͗c7p||>N]grsE_ˑ:}ÎX^!Ǔd AGao/^bG;p;=F/T&IvA|.(rO;QT_\|kAAU~#})l#vr~SLx4& O_S|e91a5qǧdZ/pnCWn^l2t?<2㑎-?7K,rU&[.x㬎+&<#?M~҉O\P/?:/fOo~]}XÈΦInƧ l94Vk߹z9ᴮV{Sd / 5־Kw~g6R]]jWd:?1pe2R]ѦM_M[%ǘk+*1QTgS_EnQa50׺6\Cvs.Q>0?t~y(rp\oᵉ .\^^3vlqZ+O>lyG!6bjj;ͮ&r.8:ЭC l˓?bOYXwoyT6 /poS.Z?ʟ^)Úwu9CfUN9N-f+[Fʻ|zAb+bkĥ+F6G֘-V6V* JِOoz~~h^-?/Wk׽v^w_mCyU fub\p^ye߅f37|c^>W}bn ^j^jO#:jecNk߽ϝI^W;&Kz[N}%}RcU/HNڭ)9)d}#&}yES;K;;wAv*M5/f/~ssk>' -^6qUz7MmUrsxky&K\ ojңƟ{Wz#m̮u-q٬7:r9yޚ{I4/;_1߾?=}ys2zưɇȁM9Gg%M6s lW3߀y/_o/x=>o=vJ;mFdezܘ[EusM\cڊ1ēo~ <ٙXIl#wѯN'^~zmr`FmN] M`^Eb%dz*Gp" t [DעX=/=MZOVLatd&/:?\Φq/^9Oqk+|pqE>z:5n4}q݂W앫+VysO͗z}GN^rGЭyf[a4^HNn wG(w Y.o-?b{ 'l~?`Eg|ʽym 8쾠+O\ {rF<8ⱑ:&֎q!oRGUJ3oE~o~zvǓy5Y%YCAaɳc:?WVp>pD^,5?Bobt~'NW!K.;%^Ƈ>չ>wR0]sTF}W7 Nz<y7l8-o7㝶 /D]Gy6f1 ͉6;y+/w/}>-c(T GkWdli]e϶k,9ݸ6G0NK^p˫|ĭ/Cs>bk=am#{:L&.߻ώ ƛ9ʆGq5Wֵ >?k^9^y֛ca2ַK Ϋ.3{ͼyn9in}esV߾oOYg=ہ W>y4sd#}󙪰}}~7c|sgs]nivyξy?[qٜgL2zxw~W|ﭯgmg]Y~ ef q˻uO;jn:Cl]&CWXO9 /"o׾Wm8suƩq_jɌtzUJW|N~t7qƊO+^{|=fV?lPq*ɾRvoҏ`c_ᆃѫ7'pD_:+Z;?p:?gGd7,d|}3 XDȗ%/nR SV򆫞Uo No~btd|pTn|ʾQV>SnAy#`^;̭6;IלF 2YO7{UW(wsmn* \G]f.oec?#J޺=&W]=J/ʵOo䇯t|*yvp Wjʍ IDATxc| ?w+Y.6rL/'2<ʎx'ƤkJ}9s-FN>{w_g?{E%BO|6j=cۛB;툇~O||nӳgn>R}Z~w W=wv+z껨q A:?{lX|F?n1_Ps{;g>16~h䗿}_^1~Lsg08nxۍ溍wk^r^mx̗?9Fx=~ac^ME5_?dqGcO͵1?:DأՓoaI#v׎7#v|b)澶76[=ʾS|NwӶMZ|]M Z~ݢɆM't'~vGx˥`+6|a/%pcOЉU&x&3}"6c|F)nlњvsULmD/m;6]rHnӋo=NxW , Džظ]fMu5UWYG6@;L`+rfg_J1q5,:Ϻw|9ƶv=7rsdM#}s\_rN^k^k2cr_ox17AE_F߃?}Bg;gcB"G'ޗc6x~m|~^'=oXfýec?{zE N̞mci~mkQ\6)rj>'yןW_m{Gզ[No)^JrPqleʞ<_rz㦯}r:d~oeoX&H1N į Ik(<ͺ[@l-E T\6[^8J]_O]46N׼"q`Q2u>H5ݪW' [ėSlE+مOƦ'㋲ųn|n/kX/M)9!7#[t}Z묘li7ްξ\l}p_JlkBΠ0֔V['ͩʚCdڭMs><_fpU"_so>m;*W+Z)zߍ[& a0S?}?=?rߔ|ɹjuro<{%ƚ|ço\+,u}dkVZe8n</<\&71וMk;y=z7.;c wG/{9.'8¡87׹q_7lm\mMq b9lWZn|F6}1(n0dOֺ}zgf[xS$S*-Rdk"TXzk=lhY1Ջ;brG~Jm}HW^h6+N>GyOq +nl*?r.Fxv|՟YVl<[W\uR?¯7G?SPlV-r&h/r.t}9_V]]6XN }6Wtٮruu[}k&;}|Z`7n)^΍ZUձ#GK+?U>rN=ydG*?Ѯn/j}]ζ8x0w}5d+/fcvkw?._qΨg9:O5a_{[v7z !χye_ϷzFU:{-m:y7^cNjms6.4_MOm[й^k:ζdoC%jL"6kumbkra}3ʗr+n׸bׇCl'mlO+Ɗg=9h/=]3_W;u$~g*̷~t^wg4_;p̆1/n}pK#ZǴq>9YXu>hO7Wqvٮ|e|{ٯ*85+/^k0v7qw6OW2o|~Ƹm[pOmvֳ\Ȓz8v^vb0g&aZ^iÃɦ}|1~Fߥհwo6'>a5/yɶIJWW>)OW>u8 W+/|.>Э??<`z#v;nmMO|#O _aHߺmxbȩq)_kI> ;\f!O6rb>q *?T'"W xY}o\ [6 _H;RW(#†W}3ٳ øW_N]9f+(a|3 ? ]Zmvug}G_KiDZzN:\厅vk {oxVڵyuƭ-9Yj[0 OssZr,gkƀzޢGatjƁe/vvu}`+Mz/JN_|qo,ъïvpw?yDhYc[N8'̫>:_"e_S}^U~ؒ::3moM|˗oD+6\)F_1fK^ᣎW{g7>|~j{z 畞U=veyWSwЫ^zK_nrԕ}'~\v?݇_p>Nj禖xE>Q[;mWw,kڭM^U6x󹪞ehmFޡ㸹)w{s{͡M_Ȇ|#_0_N";:_g=s:{?U?z[zS8_f!v~{>[9MZ릱%S7|#A[}]W+p8Ҏ6/0AVn+FqW>=|v"0a-R6]u낡G-uܢ [ۢka`ip+Rq,Tma(NTf֘|Q_28d 9)(l\n-|؉Ɖ:Y`~У<07S>g#^V7 [mbyvl/NJ웛u{Ik*p|$bÓM뱾kۤQCxkl#^ NXrGũ l9Wr>Ƹ9_ĖyGlWYvl.?U?MvXǤ}Ww%aՖoZvl{ˬs'Y\} !//9Ă 1Wid \.)N} L;;ڈذ9QwV0"|A)8"q_Cs`<`F8v]*l"]rglE/1$w]#j ?Gͩ96֨[5Wk[ٿ__]w|qKy}#_Ǘo_5!U׺_v+<3qU"z?vmfseC!}'~f?']t{.\ S:|K>0n2{3<oC 3|elAKza+mrq NsaEtq%L\Flm8ũ⮱W{ {n[Z~ $ IT(EPؘ@_*ڶ% (I ؒAЄ $"* po^(n19<묽Xs:>xK^7~ϟ yȏ]s%ZMwgz'e_Gik|4=v#WX7kYc@8q#?~56\I̴f>{0^/߸\eߋ'ח˟?9~?v-/[e ˵oxгˍֿ 9^:<<~kn_ |Z7{HJ'"הb`4?{0ɫo<5İU~M3rx<ʼn-&N~dv5P?P렜3/1>Z>ksj\rO~9c'F?d7. ;͚C|ڊMb\gZUc OCX`ٝ]|.a'ዛ'Z8'/;NΫqƤa5\>cq7yeܜ n̓թsVL͸գw4 l[%h?'qg}L_ynOWZԿC=[ 5[&l8hgqg?brt_%^!&%߲r׽{I\I6֘"W՗ts"__} 3n~uvyaͧZ3Hؚk{yˡ_ظ-b\:Շ OzrW=m\qXg-[[^c>`5K&z W^ޱ~wzF>c}#N9笋x—eO_y+Gk,Yboת_^|d3odb6x>9״ـGlb4c5h~oSXno]YO|eeOZ_n˧Voy~)< L!~mw7˃7-Xݚ^oզVWXDŽ?aZOxbria䍳sҰXcOrVù 3q⧭\J9f߁i&:.< u): .07 O7R];xfM<5o>a3'-1_1iaN3}i|Oyy IDATUGO18uF+W7{}X/9fcg5G^XqxnNl0jQCi~q'gl5O~–S +oǣMa'qį}a$FӍR| c}]j/fUKxlCfg?)qʯ>m}ZΎ=*:>0 |p4[W7\SħӈA=8.?! nΫXG_WC]_iy̼P55ޛۍ ] 8|w߷K4~–M+/c?鯟.8QI[B,շ]3΅hu~+|:/igݹ}}vvC:m67|qk_n\~_,k.lbaҸOţϚ3f :ziK?-xVz{|ĥق5Ç3͟=~rU]}ts&|W}w.7-oNo~k/ Ч YWy.Yn|m^} gNŷOzW-g,][j%td^u|lisMZIf#xI8H8k臇+~ 8^q:^cñk3>{{iL{n͕;o07kؚ`}ľ5^NY?N^a8^|w}ru^#KO=?ySʯ\l\\ݭowNq9KX>g'πqi);/>o,7mw/._yoZ{+?[ljVϿ,7~cu*/o}]ﲼxw/X@s0qytkvy`:F}oSֲ>Z>~}m/|˽Z7gيknl9竞 8^>ݓo}%>AA@;ƚ>O:u`5't(rûOW'|ڪƸں//Ss~ ޜ\⪳1M9YڬY.P4aך?gx})'ylj 6[5h.͟OlZ\io4cSK>Z>qfs:$68/ɭͺ=h]ӝrkƳ<;}$-_|idKWMgfԩY'"^YQ׭Z.hՀ.T<x}K5e7F㬮r7GٶDKux3 O"~85d\8CI =3il+ϸs_5{V.?\CZ%2nLnec2N-~ׇ?6/Uw|̹uӯ󇏷G<^U!Oke߸4wu撎Yg1l787^O$C_B[R/s,w +!_$~S\ >> x,oZؗndc2Ov}yka|ɜ~˙?֓'GƪN08ʩϞ/<ɗ>}晸Y{NrVZ Y^~z7ҾX{ӛ_8WPs{-zңP.[ "v?7\ĺկ_t۳-ֿ-Z2oxg^$F?ay< sij^tl7屿+s y9~IϽ-?y7cr,zpx^o$ˌq=DLu{orVs+}biypKscg';+kc0?gA:`]TC6s OC0C]mЅ^IZM7 ܾr;17 [˖9M-=M0, wC׾#>zb w8f񡹲D{soo\coN4nzf>I9muͫŞ|Yjwr_]}{ /=p8|Htq{-GeO&_MZ6uѧQ7cp{Ŕ8x}ծ_YÓi?-).qt6: G<ӷ<9 <'] VgsZ匟qvXc}2c[ /۬cOu?sNeګf?czWL:<] _s=/6lc){M׿!vݛdyI[&5nk^׾r޴\S/a 9 oGxr7y ׿eo)}+pzV^${N6}< S-xlx^å;u6bD ;7ߌwϜ[?w{{yru͹WZI8>XqO4]L5M^ya5q3n6kEa#d[|~MY5vu^jԧGk 1gsk}_qtg6VRx!~:ꬫk?kˏxZj JrݦScdkƉC+#j.Ox%/p_bO]|'IJC 5#S-GI\|p;rnZui$ߺ֧oS>tɋLu umOOpNڻJ;+ w"fuʇϹ 'Ņ]K>gǵYbγဧTSsӇ6!\V1Z~㫉'ay͖ߚvZ[8xĊ:Y>.^Zy O0}__\Q7vng-aEgLpY'E̡/偋g\50 g5F?/OWUٟuԧ]Ӗ^OoY>׽|2nt.~rڵ69?5otyWoOl_p ][|6گV{퓺pø7-:h?FBW M[|l_ ם<ӹO hHy_孮g>q:Y8l?`2s?mzom6X_Z?,F{KT1{kbZ&qpZ׾Xo#eX-𝅸nt3vu1Z97Kq1L˧uF58<; WqZ)AVI< ba=ʩrFkW 9\um5GW,Zvs%u3ꛣDqxֱNEKGc:~:ik C8^a\s2EܔxN?W3}]G_lu:f-s<N؉ogǡ3zIW=_?jNʟf֟^y{{yƣv}}7Wo]/_ןYr=R/c"SͧWnK_G>r#oԬo]qMu6MZ>X|r`&^>1Y5]X ʧ/?퍾<'y1nS7^~K;Kڞ7/\˝}Ǭo>oZۃd]ρCnyͲBۼԱq{`7>4tUXk.x@Ƒf/Wćׇq&ŋw^q74l^FxOxv|un!?Ls5U's+kcs_̾?|+43 {\y5)vu#E?8{W!8k}Ʀ?`<@kԼY'+o@g6uך7}< cݦ:Ķu/pn|RYD3!)nqǖk5̻L=fv\YsE9c᪟fܽ|d=+?37~=.7[{ te?'|c~/_üʵnw>=ly߻޵}KUO]UԼu3UbcZV!kmiboO=:OvhoXbim2砶bsǬ7|so|||W]Wl{bqX׮zz]my_r ,l_|Ǐr^lyro ?97s%VFC"֕y|PƖUkx~u3|'κh٧ތeM~9>N>agy”tbw6!%@򐒍ߌzxǕp]ItE|1b\,I'q¨Kc#o5%yzq׏W\9_< 7Q<\"aͯ61WZ֏%aWlg'^Li]AlՈC157lūy;f.<=_Lk?zfR 8gy蚙g pq-|&j^}5x%='fYO'LkS^o|͡<oW 7K_ݽo̷/_t?h1{Ʉmo|_oW_>v/'odُ{5>wZP5 عT^fW>c-foik&dƷV6|Xva69=.;ޅIT]TI۟繎gqҕ{'oy[uWUox[-o_f7N7оz;]mZҗro)x.?~>jX~3k_o請d<ƱcOjÖ%05g {fXy4c}[ <_I3qfG_cD^>17j/~klN_l8.Ve8>Y ={N>E5].E\k-êuqc9l0b;lpqcjCKӸ)M#C𕏮򋟿b"fV;flaٴ挳5Ǜk~s~֦5oFdO?Øݘddnط承\oKYc\qoa̳~yLG'pC~u)..6>%)w]Lqme7~~>^Mqӭ 'n+̡:k@1D~1k5~u9)Vkba+̜ose'ql08:6jZr;\Vmx&G5_k ÷NdWWmnj/WD$N~uJQ+z0~Ӟƽ5ΓrbzK\b+v s͞rf4t;A(Ov>vPx^g~q3.Wv|Y-ͽ<-=;܌X<α>ya#:kes/,_u'~sYm⾫/Gy,l٫M]S=p#[_2o~ukYr7-0Fpm]kO]#~ZA>r5X{\_w/>я޾\au6bگZ'Z2OL.<`t|,LsqOO~C/Ovssag|ے//=ֿ 6$|[iZm 6y!`I8\}/,.Õ:óf۸5֥x/.:VKuzlي+_|qgakqgnmOÖG_kd+G5{İkApI]~gqW~\bW.xٌå54~q4|CH\}iO= zH}t~髯>F|q|p|q:tN[g/Wôǩ_d/˞#4W>|֠E䴏|t {i޸p_kaL]LW|81g'b-1ٯ3!L|"sb Wc39O=7 gW3>94f/SZIg~ںV88ht9̋`Z}m3T0sW}dj}xf|RAɡoM=~x3?ѯᵙ:11b앮~YmϾUo|~^g#q_]!g/Z/.g͛KrO/?py ^?_7m3Wd릺˿S=քt>lƣ<3|կϯeks-T.>f\_ո5 ˮj}ٍ&i.]ް8lߙȾ^빯K7^ '^~<Z[>߸+u[myq-w.?~G?4F统uh5c~2ck8; _8c#zǓp"|sZrW/qJ'7] _rیI8:Wtk=kvگL'j~2~jmXqݨ608 7w(XCbn6pq{GݻZa59³u}9KZkk|R>W},;?93M:5.Nsr%ǭz,grO^<3kSsgk®4wl/>:/bݜ]>ݢ> Kgϯo^h^sHW>= [Cbeq}-u]}hRmgG~,׹m;"r/ 9.|<q^g{}Ϭ7/&:HT~zQ\+5i&:3au^S۔j97p{lrqIF,gxaUgg.F\\`4<ݺK7}~|r :,o|+7j|k~_}k'z._߷ K\Rg}5ҹ5YTthk^s\-_x\=Ӱf?m&<ۇh)}sH\bp/rǗ?|bj=[b;!>+>[\iO[I~ ^-PVv7aIT҆y3aQ ,,XQlMI5j፫6.}rG1wᯞj_]V[<8U\`hRg}v~56r&\EL-vΫ113OLQ.yXS7^y))͉7ڊg?N67v{N:=94KfE|8W ?{'~kDž|;']:}[m?N~xGι>`roܵ_.(n0?8]-͍85ty^_MŖI93qa W.8{{siu%KWSƭQ6q'[kWL|p{/fszk2\tv]꺤NuN9Fw:gťN:Ձ[~rlFb5,GmMZ<}xfxP6k0r7{i[%椆FĺL)vś'/{3/e Zߐ |gN?ǟ_~}7O-]AS^.ye;_k?Lzez_}]Nz=[k_Gv}˗fǕZ7֥u63c$g|VW|xiy!#g#ޗ]ﺾ|'8W/~ko}w§=uO_~O}h=9^Ż_.֠Ik_xӦ !o w>̴l(6Ѹ8r8?Ɖk ZbU]qqX>s{e#qxE{eC1ws>u"Fw';7_V^t·GOI7-F?sfg󉭹"/qIkg3N]^ ߍ .,&~)&*oꉷZldo7޷ccWM]~jT\}fVX̚osx)o:s\s> X}֊eK2^&O}zJ<|{p^”~}Bauͥ[08̣/VMM~zS޸ń)O׉blqXrOġ&w})i}N>$|I6uq;^bga5bx+\'c?+`g%t\߮C@?,&&lײZ\nʖɓ֟yyꨆvW\l-L8f\YْٛqZfx>:fJO.=~?.?Km}{rs`g2'+OYysE];GlMor+,o[6x6n̯uέh;C${px}Y-Ac)M/<۵V;8cvg]j{7_җloК#Y{k'q\tSo}oM3_|iظ:;pS [:l$q+vrő?>cŸ=s2[:{g G"úD1oX6̰}l6 ۡyغ> V+wt݈+oeǃ?^ieˁg?mtgñU-V>N+aʥo7;;oahUI`L">zkTG9.Goښ[cx;s0>'ߚ/(7-1ܭ^}fZɉ81ncڛK{Ƿ8"^w F36>5jLkZ9󆧺KZgf5ӞWO5snlxʥ{bHv8Tq'0tqS/D_<{"V0O;av?ѷslD-Isu66~yI}ON}_'+_mG/ǝ/n65 c--KpZ8gGL&ٳb5_{⯀}c'~_ Y>u.=_ܓstH&X9Zg'}#򊅧='F>OM aת-;.ogc]nπFeKClWcֺ,^[scm柵3ܬ[nZ|{^{&T36<~=y}Y𒧜\*Wٸt}گљu/]>7ox[,z۷x%^کU'#2o-óOiMS/.^C _=&p.Fno7_5tNSF>o wmgC6Rc} ߻sD;][?!ڽ|3/9 S_,'My'ÈpՋ?LEHkC1˱iKhyĨȝkP=lWm?cť~R~Wsj1?PLVqo؁6DƦam@M ;9œ'~a  \9jon+_\loN<%֋&ȡ_.:rcXkփ~sZ$^drد.``o'zSMrnUN:9&n1~|ָ~|?=g z[a~}v֭~̾X1pd_ƆG3_Э_9]3V>ݼҮ!9A`qóFͅ4?/V̼&85,U?9뻾G7w6:_M71{͚Ip֗ ~d֚m8~+G-\qs#h'|aˇXӏGWI^,:?]صu;h v/ݫpZ_s.0%ri]lD ~ۯWψ~MoZzk/W浶y[+2G}|;KjZ/0r$qi[k;`oӇ gWl\fyd_Ŋ!zYKּzs0ퟱ>aY%Nz>{''qN[5aӟ5'խ_^1y{ [/g+>lb42}^ðjn{X#j9k̶w/Zw/Ƙyn lh~rbXrOxL'O'p.dc!Qn)k$Ӹ3t6GIVMSO ڡCޡ}b'_Yu~:Okڍ6v0+{/_r(ߍCn#xhbknq{LŪ3\o\ӭ\7srڋ[7o̧b7_0_b瞲LϘYۯoYU/|v|n=C&Fs=iIÓt9}˵ANyQ4_Iv`'^1X_г9O>v͗sVMqgbk/&{1_2Ӗ=Xΐ~{:5gyV⠝xϹŖ}f18!_y&`?G~1]#dFġO7jl0gxX>Y~8OP~qL15؞Lk$(ڳ ˯K|r/]`Xۛ}]7iͭiC lSo%>xƴK_]j}~54|\a|Igw<8`zc{?j=WX}z9aSj[7mX56y(g?q'5o傩ol4GN6n6Ǒoߟ\3~Sc.~xyH1jɟk o񇧧X_}ۏZZE{o'|vCMqbO Glða5<|/N  &h88$c}~< 䭟q!PWXi%z{J ̬\z8o^U\"skÿWtufSKj.HX{9đfl:Z;c8c6Oاq6 CS'_,yv8uƙƥ>s e\W~H-fGO-o}TZ>g֜UvyW5^Zm֠VnSG]#͕Gjcx6Bkx5kߚm9틘)gZ_5ȗgpSpOk\K`*l/s Y{9ks:7r_g>0bvxq&8 }Nߜ|`{Á]K>(8[o^b;k 3<8&H=8z}O U{'FS7klLΥd+[kQgld&Xbq^*\g|03hSg j1_}h3n~J&>j7Ǟ`;gmf0q;'慗NXcvgOΊkK e',nWc2qpDNc \9֜maˇfX^8Ӷ9ndsH̷9854 Sc~}Ǔs/}Vf^a7!B(Wq{< #X|DZMn,~w.ժ~_Nq᲋ϧ?痏MԔ?y^N~sTf_W+\b4:29Kif: xpճ%9z9GqğNU98xyj]?9pFb˖p4jI~aϗ.=8|+ 56'IaG/9kpڬA-sz̚\aZo_Z~2)8XF׬~o^uWOG#[-Z|go r'0$1\}py7OWNo\<1wg[0^f-N.cbM¤ٛ$~'~><>oo/Is/w{9P~;|w[LbI;uͳ^;ltoqȥ?[8<ɆZgOFXa[xܜ#!>hXj8Lk^fS3ɮ_-&yoW+q&S IDATK ހPpv l싯:²z7ٚ>'Gm3c~SƺUkb:'V?l_0\`x5'~M )DZѱW7.W|ܛgq{,{qS͛򙋱֧|7s[aAYC97z`썸yN2^x56y+\unts.'&on}GR-2s~|oWw0̯opZ䙱Ekp~*}Y6!hsizS6}:$tt9Ⱥsg`g]\5n%|4db2mWn3L&yO_x[Pp&t1/ց`WKRӇiu뇋XgП=aScmks#b9'&<-&9RnZu܃Oj7$};%>K7񳿑&OQl_p5K g/&/nZa0dv/Đ='[~̵dLGx2_|\tFYYَWCu[!|t?mbj9O[Yqq3p|q0F'_?]Wo?y7\odc>v?a#}غGw6`})1rKOjIoW/{=q3.s/9i;6k/ [?pŲ_p7y}C"w}r]ny;q\|Qb>~əg|_}rwKc;&C/]Gv X̱5?sቋTK\K!<7&%_M3f'=)/|Սg8h^?llZg-a'{^*.}5_&>_y 3p0)quu9`N‡Ik,Wcl.ÄĿ5YCqS P= N\YK|8WY.s87KW䈋/e?oX6k6tt& LTlj?#L:qS}qN{]{Ҹ~WQ˯FɏOm%np}GuELro^tyU048ÕOƵj}v"c1͸ߘg6Y{U5)խ'I.8~9aqjji<]uUxkUܖh}i;᳕g3To\A}+wumO ?׭~mO>7.\kܒxͽq+ꚲZ4<\qCBu&5f'q3V5%z;Scws9qC^~Z=I? _u=tap[Ə/NcOO]KlZ3u ?+;tX3N^8R^r{^\:~vSs]um5s|xfć/ 7gp1Y>Xup?PyMf}||R_pxjW8sTR}#|~\^?Yn},xԣ[_iqUE?볖{-/xS~׾fĥ/xs'7\>rtOWwգv^ח|.~lnް$^$3`s?qs2iA3m~msȩ\/\Y_Wryw^=[sI[R=| ç5ύ`})qayZsk'1Қc//~uc=E4&N3lrTZ̵.[|rP1 qIlz-EjiNȏa#擶@~>ʇZqSl0ᓿu>v~gH6rijy{)KLf8z_fx`ԀuK\\0q:𻾚]0b'6O>f9'7nv'Fv@:d:q7`f0Vq5]Bwׯ9nn8QL4S_6VSuF#Nz✱k]-~!8܌}J'`uuy#CrVߜ&V-чUZg4gk9S]ms.c<פZb 8̍N; r%g/z'_un/9qZ g7k3NZ8קT5jS}JOn1͡]7į!gēݞ₫rQ=`Mx41]xG?<L\-D~|H'f<:oA]6g~O>W g޴g8_s`o\?XZ.Һva\ñ?7~]|z=J [I ,hb]+q[3Ė} Y=nZˇ{_ 8>_upp5 Vi=j0:Zj8q+8|s-zS>1}<ԟ<.IZjx>s'h]Wt^nv;,x/=>][o/KϪOje/ۿcy͋^ؾ$㒧\vw~GdGھ7>h2sil<%5)7ZS';q׹:ӗ+^r뗃=h9-o揳+vr;qovl'U<)cGgsZCuksp|8Ɇaw&p:4Kxيu֒ W[ZI)޸\_xu+Qbz 4{u뺬jgj/6<΄/0l8H_kƧm=Yĺ5g.ŗR7s ;_mέ0QKyȞÅs/5bZ71qZ{l/5^f{|Xvj;QƉR PGE۬6pGwxZcXIqTCW l].]C+G?k>ar/x68debUKyõWșOO Mza,&cS}i7GɯzԊj[1C2t>I݌%jW?V3 \7 ƚΰI6~H͹;`pi.y곟SNZ8Rtki5[tqųC~jSp5jCGsB,fj0'`纊01G9-eoCh w-{_)+О[{JY1n;tN\Q^ܰ]53wϝN} 3uxryN{~Z]Sts3-'=ejifI4<,Us.v;y>яZSgMo[nv;,/yӗ;7/zc<wO/|?pyFuWvw .#?}"_~ tg[5gCѣulg֭~SO]s晹Κ7&ru6f_'_xmmsO Ӯw}WxO]"^}].~K-_ex{oG/x㖯;kBјaM&WG8U ~1lpDe^j!j&8O{4ZK~:W).uTZqSOn=ǍK<R־çOWiE?ΞD11r01s5.&&Haz/r7ꡧ}*}V kI\3/pbFX %^M.4ny܈:X$n}㯾wqƋ ®.z;-`+Wx|cL`kbquW˞ }[Ue_UX$H JT٫j@A 9(9 J(ԝ}b<_ 3Ϙswc̰g{O `S∘|9xNc?}q>#Zcg$8?8ϸ4ob?&nva͡OCw1LMl ֧0^՛tlrfӶmX-xx|=IF<=)GxIkk|>X{o񤯕pΜVV&|roAy3?s^Ւ>Jm3_kG O} ]?S'liy%Wj._zbf?՗Wo{E3YcX6΃^C.͹$58A>zIt6xfsme;c> 8M-׌q5U3.ҵ,g,d5zŊ!)qp+5k8HS~q?j̻=X7lµx|g?{nx%˖M=]xw|7q;gnc؍{x}_ |?[6uk9}zW5g\{9ߩ]?W݇rZ~\o}ٛ߼Mo\o=vou>r땑Y{ۛt;eݽ]z߮pkn=m~U 8{>͞/oSM,&?1NIw=~;Q6z=uo goiר\+NyᎷS ~N Vܬzgm۬ g{JrSlxv4G6󉟹3sCahk?ɗ3u>rs|էO:6:~~lξe5uT蹑^͆Px8q'z|W1iXm>{P_١ﰋ3gr811՜f׺{qs*O&ƵQ\?6lv+N5x3%krckZگWcf~8in'bS0}5կU!xlxZGc ġ^ͳzZbhR'D|&l3G/3`ϑ{+`kKڬ|xaaa#tt8K_Z#[}9♾aOwNig]3]*']͸S /cN<mM_k :v \?f^}y5|=i{_w[rk]k{]7:F_}Q wnݷwC}׻ہ?tX{u/Í>!}wl?]ym OY_ɮVbL>~7/ܮ_Vڞ'nW!oxKpn=X/zaÞv+ m-֗23_.{l_syۋO\ՠd欟(-'\R ͇֬Oq{/z\)Qq0r[ ^^E%G0ڬ_[ ބߚO )8;Lץ3^ox8=\]Us|j og^=W&'R_oÃo>ORđroh⦎#͗ʎ'k_j/vr%eg?j[SC>v?;ن2lZPt`6o9g=.13NןSlo5c.t?Ugjh_qz{[c2k.On\uêl\>R1IdOO9柺Zfͼ]~s-@ ?ⓣy5$M{}: k\3g4gm.ǑfW.>|Ze/GkX]r\z1l.:ՒOZ\ZrWk>X=$}nag$ܲs8}B[o/OsOo7VjˎkMg眱qPʶa򱕣x8}tM; ߜO6͡8|Z7ț}{-/^7~}}+-ԫnWn57%u[rW}}ϴ;oOm]5^q{C~cʻuȡ o%zMvK\P8*ݿn^|fFM#/|S"Ŝ@ֵS\f\}C>-{vu^>kbŅ_4ψ~o.|9ω:&>k`OX>ҤśX?eg|pbp֏3bo\4q?n%6|]+!_uVp4c/|=&>c1n\3GWKW\W|#&jNg6g<ɎG?[᭗:_~t} <֥k;?՞-gMa.Nj6a'G-6qfNZq\@շj!ΰj b; OǍd'֯:㭃81PSfg 7FWGZ>cs7 { ۺ5K;NycB5خx['Ƀ4:~vuvmrʭUX|V6qw/pk=]g3L+\;Gm}K1CkI^;3Di|3;gz\j T{8v9S]3> ,>̔!p҉ZdָOc8l=F&j.aٴ֔.-pw-:6{׽պyjzzcWWn{>|{c{(RvF^Mg;z|Kϣo;e\np[s.w?n]f9Jn߸i3sW+׼f?on}oyv ^pu>ϗX ke5͸}Vœ|򱳎;>zJ9a쥱wSӇ˫%I[NXɬ |C-Ƶ͉_ӧ?kӯ>ιyuN " IDAT#-3N`\j_7>k6xT#?NL~Ї>tug>ts\751:灸ݺw uǬA_#|q׉pp6=olm%^q\|5)q7 yk}Q-t딽zq%w_,04TųW'? rZ3zڋSιwoz`tx'6mL&w_M|px8qDž&=٫%dzNrO!]lcljos9J3_m8G1'Kۏ4~cz|뭨^7?W*k/zc[w}]7.xыn8lYkUmZg)KBw#bĞϸ"ɎKi{OЅ7^(9[{4g(|=~6uۚM\q6~m[fNb/^q3 Go_=])l-nz7_أb1s wT7֏ϼ0=qЇɆØG>X} 4QGkW?N -}gvaI<1\y9GI&60a*zᫍ-{xH1۬Mr/-GbIMLSk9yJ&VSj86qGኝ/}[-,=הּlfKo۳_ŋگX|7ۮulOG^}?W_b۾f{SGuKNP[sRߋ#Ks/ul^‡o}fIkfؚɟ=lq|g%pabzEKZazy̙g0 X\6d_\i4qSڦOi+W`ͷ9ϼfnkqGUΐVMg9nHyK,zќ/c/?M͞L:&_:0S>iF(ZOߌm-Hu#`'քo]r;#V9JnmF:!q0cyAaRƖF .r㩆+Ӆ9‰ԣS-ad_rV^|s[~'W}o?2a<{u5w5'8"bg<~q${V<_b:S FyI9pfLy1m^35|ߘU9Kuӹ-g}\v}ʋwbZxI^dv΅iu/}O7/osT{ti3߬0g߇ߺ5kTyRckb^H#F9!5ӫf:{|g^5vR>|iAnX g%'Zi|8/~JfNTWчO> >1s wyy1k}&-]'%.):>gR?ҵd?uh8D-mrϚ;8ïVkxm HlGE4aqTt]/^=؞߾6_=ujKoU^o}ƒ{wb>mz~&nZ{O߮ۅ֍g=1M5~_=?߷>]:z5Vuo{z!q4GZSa{ecm>9\盯1&^?߮5{ؙǣ/'^_isypęzo~г0|siWkn'1GW&.zX=t'ŴF|7GuZoZwy 9`1\]GGʯ? >VS#<;)>b}H:/~&|yLW8gߏ$4g,{>5Lñ |yOmnOI1㜛}G,|ƥ;D4IM1PO;l.0>¹4t~y<aMO98׏rӦ/3rhtxu 9gIEӅLd1+/-qxZãyF9] \gpbN]u3G4$ƟX~>\~۟(Wcq88> W )V?i_ʝhkU7i{04uϛ;ixG|_7j3/?1@[s8>9WV g+ {R[Wx%]ak-Քjɗ NY͜~;{:p΄sBy3s*>ymM|yzܥ㨆xM#s jN8phئ5_^S]J9$q0jj[;}Ց[-ozߓ;MM'>fgԝoN˷ytS<_o'/wsw%/zw_~{޴]ַYoz.޺~>uov5/~[gM{F0j;t֏|~^[w-xI֥b\>m=5$pW<&}Yk^׻ŗm='.|s1+9}l-~n?T:ii"V1._.|a;ꎟUsy CWqNL4{9qXDL~q/Mc\dl{76bۯHq >1n<*?Y~C.8~q:O/yJ&9⭱Mi߬:Wcr}9ͯu9GO&o{k|]<)/c7O;瑟/;.b\'h).,{VGs' S MY T18?z^~ټ g|O)bq>1ZX-[\tO婞}n)]sGk. o5qd⫿zvTlu[L9aMk=#8Ŷԧ57]J^vS>9aU9zn_q8_9oM::<ΚǁdC1Gi6ja'XG=bol2o1˞O:%Qg{.2pðCc^B/lkX|seQ.bIev\O1L{W3.κtˬw_yVg[E?? ߷|˷l?^t"yzeO{<__E_txxk^Dg9[cLq|9+5=oc1'O w}uǦ+|Z\&9mq纱^'c%yG<ŊIOcjG]eL{̻tgixā7'>aWa{&[7| Zg?MM]32k9Fxgۚ8W޿>/ys;}Gm7;o/]µϗ7gekf]{[n/ݞm7^~e/η}\o}vuMx!~8TƽX}w=zt3}^0r6e#s}Z+fc>Κ0Z _2פzWO$ .%~˭+ǻ =+>}Gv o/R?h4r##xRb}#[598B\XZs_5eSX\|Ư ~k0 M,ZbOfè]>媖r5p|ppln/l5xM|m_fn7-g!7 O^\n|6ݳ׽tpT>}f؃9s=ŇcQ {~2ukpy|LMe;mul~᭙&5\qWQs.F.ƴ_9ԡ)|˥-N>}#[1j-"'֪Z _'O^V_\{C^c_rZŇ6&?^_qq+^ړoaOɏ'{qoRpRgƶ֓+8>8#l}ItvW|HGǚ^{ְ}[+<>lO،VkNxyR*Vbj'.y[ko5E~1qrY85s}|W]8-ZLMj'riVuL$S>>^.|D=|~7zw8>sj^?J'OXfjjn͡Z1]?r07X(;|[4ߧZb5Nks^uˆ-C &őBqhǵx}_9 ZE/ntmo~^jo|]l:;Pqlz5ߩIxvv׍_lWY=xv7+mo|vxsiusuSN9v㗯>f7{ lҕ?Bۋ֫ Ŷ^x|h}ɣێ_;wol_rw;cu}lquFOڣk}k>~g//Nuۯr)/{".].}<}Kk -W.V<{|3glpa'Tz/?'W9&'{k/FlI5/p0q{nWCxxe#n8zY}haoMoJlp'j'-Ojm ]=bM ]lcZbզֺT9`u/<|sp0ϖyӍuh.8|_ˎ?_G&81ް| ~7qki,71<^yw='ͣI7x5x9i$N~qpS|Ƶ8l;8 IDAT9D\23iں\qn=~v^8`%NwF}K]uVᆟ^ex"t :>|x&Gg-fjf_? çXj?WNK okw]W=մ.(l=ffxc?;am?]amo|v+}v?eI\oݽE.Yk{}voOۇ䷾iȥN.>7 gq sW>*gb/^}kO>[˿Y7~*}ï=u otx;5XO /ȗ+&.|_^m]7*߹ o.Y?UGڎÞ;j y{?\g.s_Lݏs5ŕcաd_g1=jOlZkޘ:||qe; XX>_*_1l be+ঔkƙmbu+Q5L_ma~zNtX.$[`<HW nG<{u5)Vn3}Ɲ֛}Z/6[j)rCe?y3ȃ3o{ oou,˷}{s)6tnfv憁Mϗ ϳYyq4Zp=+OGm)^w<<&aq{9~k5⊥Qs\T>]=<WpܦiӔ8k|lSOSx}T8m/j 3A.-{\jÔe C'SCq0ظ蹆j8ޜk=njDl]^͘/O[=9Gp9{ZY=O>v>ŤՐ跾Z~5Bjk-ZrJc#&NǡϧTCh{Ch˛f/W:Ny6P}4,{V< bOy=}~~o۷_Y7[Hq 3m6g ~O:sib\z-F^$}?s9wb`pCM3?⁑a^+w -W[CDŽPqc>^I3Ҍ x0z\ [k1HZCv}c;y}h_9?$?s>gSʹ֧}725q_q׻n:mۣcw)`ryy_tZ7p\s/xK:7*/oÍXޯ?{Xȱ=?]sjʟ=^m_X_zN;.#Ĺ:;Hs+. N}z/`̹̑ʙnqOVV,]]&Wb[|u|tu&FWM0=]]ň/,9~x1HgqxO|l~9&~k>~kSjEWj+>}ѾK>RMrKN-p՝柱b槖W1%K=[v'ǜ;\|5j.qZCf|/=oU"__x>g&*6gƞo?blY Av+^^ȧVjvuAOxXZ;=a*F]ֺ~sfm`siOZkkb?HylbZ};3vەl1Ҝo8oOzq7u$^/~A7c~_^͘K✶|YؙNm4FƧ^b7<5`#GߚwŪ Ox{ɻk"i6X1uOn6yW?_h zBWm#r ˯YoY\'{9irU|XWkŤ9__zƧjcI҇7S9ç'L֪ۘ#_1_}i08O~1jg@7Wz.N;m/я~yYS{?=xw溆_n"/ )~q=&yֹ,5GwH~q/kt]+bzesͯyv~1KYꟂW&w~}5mJ||IW[6\|iIHķ4I9uݾU/g}FT]~7| IAut|]\N^&Xuvu#W\g/9ct?Sݾ[S7?eMuv"GwOgE]N_7{[j{<+?y}[zWoo_htfn^.zKl^oĿ\|sN^7?f$畯}훿?ničϻ^'_{O[zuf1nk+[eZ58q!4[ثshL`xCÇ .}lY{yΰ0aw2=~ŧS>Æn_8x;Z  ;.Nħc?DsԚ\哻>j̯e' -[)0|h1<[,-.; A~io~g;&!o_q'ua=Jao?{{.l,=gưpy7/W6ŕ3/̔_D$Nyo;}|lt⪉!jbcok3Lzo>]p]h5\4;E""ifK^F8\Znm){p+g7.cn]&0{\vdu5.!|] ⡻Mśٟkkv׊ɟ})uL!p;4V\cxMl8rS?~kA1-ĞV]iGxf\5'-.6}|rI0`~O$z~2똶W灞H6a7G^O6Ŕ8lD~װ˞8lZy)0,L}l{'/_pGiXykwՖUN'1l9h^a;i=;mo>?N(vm{+4}KlwͲ}x5[7˿tҏrsqsګ qyg?k[/xʺyv׽=g׾Mׯ5˭/J|zE/q<ϿfߴyEGY7>}{o>dmGw8}lo:EFeG;}}sW?ڴli{z:>|l86եW߾O#=uGŲ8_Ο1ߚGk>lSGsL'0mԡM&>O[1Ɍ-w9͗t|O?n|j?t18l3_6ӏ#֮9ևoG?sN}5a0w~G~d{| yKunRG;׷{=|V̉g7E|^ˉm֞nVt@9!,.$jWWm53f/frU'[« yG7>ğK漳ڬ NTW1?fē>"5OK:q&:qToc<^f=hZO͙?XʏxkK.~G[c<0j^%`|6Di'Əϫ 6/:'g_8bkֵ|lL_6zGI_K; OqvyO7גOnyhAnx<1M`A7UyʩOo=鰸Y`8ũڷcu|ֈdZ~~rҳ{g|3'^Ms5ggb٪|ն|e'9oz@گ*Wʑ>sArv|=>D|A1S:7kǵ4NwN;p|K[>qss@1=~V ߾׏Y̼.aWWHg}u[k?hYW\8j㈟Kߺ8c?Q_Wtkl\gxmraa ŝgnm=>"2wSëNvƗv;Nݶٶv۞_g;|{_z>oxvZ7n?W [ͳ&gN~"o{>l}ͯ؏nߴ^=w;i{ozC/x _]c}˞:n[oonйj7?߿u}Tҋ7/o>*Wnwo+_m"ymW]_r٧5\j 6.>W+~p4o?q{عЬuOv{i!ϙ;#vNM^|x5"f]mmv<)_\Æ/f>.Od0xs%[[&>yr'v&y[kb\S|K75|Iuy ?>>4iE'a9kaWLu5_|}>㙻:km6N>=.\ի5O1ƚqmԇ=SÉYM~M_ؿTƳFW~W>kE߫^җnkvxw6zg`wHb/jt& ?ā*>>>}"DLXq$-] VYDK1rՄ[}齯1=OwX?{6-|Ɩ}[9cc0j+׾/ƚx>^^t3/3EWjӮ癛5+`?s綷ys=|zg)9h'qp=@l8sS9'k7̞/>F\-.<`9熍ltF0&=u n~C ??FwfN\ɓnU4Iqv 3W~ļHxZ=j +\a{ͮ۟^jW_~xova/d}Gf/~tx5 3os~z9vsWV~9U#m雷Co~˷]nL~]3/߿m/y}RG}#svz O?vDM5Z̵?w?`}ƭyih\oywz/Q5i{q{<{aJL1M9}u/Xa׾<Ƥk8aj0oO2&jgMKX w5ַy׷~>|!cVՙd,iO=}3fbyߵ{|ts_Ngu83cM1|M6P wtM,^җnPPo^_vk톷yUfo|+άEj ׼v/e9מw\_ps񇷐k5V 86jN55.V~6O8U3>{R>}>mN+>\>{wۭϬ{wy++9{v{W坼޲mS޽ޭm/]I~=q{izsgw~_f6QS:l{܃v||z-.۫׷>qn۾0K픇vY9θ9ߩۧgo'=귷3XFjnhyhxv54j1pC~ 96Q?֨1 l4\8H5:4l9]jWQN8[zz|KORw9끉i^V+,^cwyKc7Xb _+6|ik|Gk͑>ֺӳŴNFߴuIJ]m'!)GY/cWtD⿴zЃN;]yobWAe#ON$W[iQ6[X6=[`s&/{Oe ;qvROq\>^ʣߜ].9&_QNܾMkF?kD5dcޓ{ ؅GOs6'XO^;g??#OÄWXu'g9p:VF/r7~X} qsa?Q=V;mo-a '@qX4_ўy.>Xz9:|?>7ګ9Fs~Di&Λ}9Y={~7=^<b9=U~Ml1!Xy[ߺz>Ue7o=߻xe{oweuC <̝V-|]pw{}mX>v篛~_ir{Va'\e/->{+b=u{\y]/&__`?C[Y_l}f֫|?x#k{ _]rcxlֵ?yS;|m^1cs>ׂM&0fmG[o{s=~3o>nBmm'߶s/|)wk61lSɧ5>t0{<s'Vc+?H'}~T]bZ0Fߴapis~TX_L_<4\a:['nz0Ǹ'.Cgǣjt纊nr燏ꋉ?1=|$ͱ=\6:aDzszOKw~ _c{>]r;lgWE'B7]K뛝XܤÛfySiwh-a5[tY7;ѯ҃rc;n{l{{4\8Iܬ{8E5qN7$[:;L1N?q&Lgu6k 9a:?:iը3y6l⛏urM#qL߾칚Q:ss+o]+\zUsU5kγ\pƚ\e;+,[6RhM|q=]ma7&毮;OCwPU* (8(Ar.@-r Iegյ "6uI*Q2d(AX(( _6M讽s~vs}{=bcf}3#=>93n;۟?~90<{߸Ӻ8u]CAWʓX޻={%Y-yXjξC3ˑ?=9:PCX'q$dz㍽|\|G nMx^~q$N]ѡ֟Fטg/f{ćM4"56[SǷX>GQP_ s~5k7gxkh~=ʧ:x\x Il}69;c֞OOYsD]<̗)Npl_M,5c|"j熵[dc!l:xbgϧ1.?P!9J_ScjtwUw;)Ϥx RpN.߬]d>6/W|=7>䰊+;` ZaTW:s͚&Nϟ|Ơ89?2_ZYAqow<*BزWS~5>:v95N+j+ė7o拏0joxx( jթ凣0(ku"x[qx>0<*o>btVc,9lA+f埶l0"2l6/gI‹o|([f|xAN/(>s,̼0Dρ_~/η<mQُb[{ؾKa:kѺkOa6Dkhr-lqpa w.]<\앯|׮ɾݿ~{ƺsGZOEںto<np{]#!ŷǣ[wh^w]B0j!21鼘̇Xz\5_l Ņ7}` Wo~|n}/\S.K?Nn?ۍo\Oueyvu{]o=nq;w]?}߹ݽ>!/~+^Fe~92޿^x M]7`n Wo˅]?sNvz@qN۾b]p=}]pkQMj>#*_kZ.M ;~_59ٵjWW|:H]dK.)Ƥ/xzͱ;M-dM9:xjIo7S|A#Σ|ŕ :ol֌_c-X6$1ᛝ\1[z5gu'ir%ˇGϷ>~<ʇ]g'>o^V̜O8:.ұ3xpQsINtgž7z.:D^ݞ]uQja"Fot6*AJ %'.zM,\;F:ů۸ڌONdOLsO֌C| 墧5I._A4j,|aF ンEū%_~VND>UOm^{=@X~Kjʺg|gQ57?8W\}5oo|0kbkr򡓗<4.2f O,5 _͆Gr6]~l境Ul0I3[T (\_^5k7I+nQ1kͥfb4X؁X~S|Q9ӇF'U3]zd뚾lOō:J}Tr8\8Zy/jӷtsO秡|-6_v>}f oxl p{3yg⯱.0ȾiZ}m9'|[0;[Y<;FԠ3vG.1~7U'=~5*׾κnE=`{ɺtmny]|l>ۉ7Wr[|phc|'n.xp߼.$g~q\ZP\s̷ykιͯu 6sOOWp`Ko==w}vu^[z=3ߺ/g ] OV:s~i[޴E^rKo\_=y;\~G7\Oz߮߃,w\Zf>Ϸ5o|ŋOo؛G6:Ժ/o$Wf aNz獹O_ݳyq#7>!:}zȑڋk]`갚s9ЬA^+qidNөE RcrcS ;;+v5.aEXѬM Lx9kG\kE/.@ʯ>>?7.6.l0&'˫;v_}c0>.![{v'Qϴ +:?YsjfmObޓ냋ЙEߗ{^Ƴmɟ AFm6MsG+~μVᖏ^;Hө~uk|ًnQrhbģO[rq|ӷs+n/W/};OH\3>b=yaⳳ5gOcFq·MlaMߛtahqn?>9!XO8N~8ŗS0 /ή#ŋ0f?=9O-k G\k#6kc+_=f[g7;~\=٪!;.&x>b'cK/7} oaţ0p9ο~MolՓ_|W>"aӣlsNÜsfO~G}~q~'у&G?=1Ml?9;ls_񱏵|ON>g:۞o[hN[N~ź u*Bkںɝy] o}=H*I ]./?s{?YAy_p֝[kh,oM_Ӹ{c?(K6?pŖ;FaUSvQj}5u{K`G~xUۯ]ܥw˵|)փ ?{+^CsWs5k<\˺q+wW{[Ŵ ~~A|ŷy3QuΗoO߮npϿzj?駷K}BͶ8;ma_|ֲz%/Μ=yr?,10=V:گρWmR8q{kM[7}A7j.b٫gš4s׏Xr4h'goٍe?pص|{kȯoگeyfӓbKϘ}~>ݕ&.|sq|Osw~wn??{= d~h{;%w`cq44=Y7 W(XO6"_'qȳa0rT+U |?!⑸rTZ%p}_>([Q,!>If IbO~bOmoA0ْ(y?1houK9E#r}f8²֨>l{cRyധy H#aﮏ'׾_{?|pa7^|aërȱyMX5TG56L sgl47~q{ {ߊ ONXdD.|哿y GbQF?ی哞'q~{׽uo*?jw}h߱qvOuE?#?rEO}$o-큹/?~gi5 c,5οŤ'ٟmwXOuE= Cq]sw֗r=aJ;^Xw?+n酗ܾn߰.k=wêA?ۇ|΃GGcwF_~dG؋p~4k1xq= xy32:륹i̍e|nbB{E/Z']NX.f\m׻v-}ᕯ.v;~G?j{뺡MΗZV^um۫5LǷ1qGWXbґŰ'76j5_'kb_ESMp^89Ü2ٟ3G5p q9#Ǹ4[쎝雧IX|pv\18y4jKQlF_yG ZA|{P̜\ IDAT=5?.=Úc/'^^n˜Y^Iik凇9}?>}OĹ57q;qݾmyl7_Ov4lv@i{%.1o]ϭ~z'|!ˬ'ŚtFCdF;8f$S+nmZՈi`@oNuK\\ƛ 8a`K:gg8$9xgW82 <8ո,ٛ faS%.)O,G\xi,|ct^R8 f|Olunv?lhbLMLx򨕬d}r Gӟ_㱗0lEq㫮0䓬UMMT>~&7pu,D|&[ywܰN|ٜ˪Nr;_5x6}޸A j _-9OZczmm|@dkz>qWOYS/rdGSNS?S6>e] }BӤ__8\<zꩇom3?3nd_}}7Cu}8@-]=1s^a ǧ69}vޖ|u%NǯYjw^mZ^.?>ޫyv'vuW9_$[wk-R?sE'~w}ouWaG8#wѓ9cO/~',vi^c_,,>jZ=2Yg9Y~_~s.w|*Kj o{ۅ9w[otWvoWz?u'}]WxȍQmjܘCtul}կv)xoz++\{}vu;9Nxϻ퓫\c;Y#7u[n۟mycWQ^㍡Z1ܸ瞢෧%./_j?~d3_tʉҋ/yẈ0Ï F>Ϸ>#6}Ux|fmdcpӦ?=jч) yfwk湧?*R\uαKlYlîE33fè3<ՇEώaó>b}Ož3^nߓkS?}{r38\/vucWmŚ~6:屗Zjg꘼X|V| SSOl}CSwP{x1ŗ}#V3H^v-tً϶MƝn叧S?b?汗)fb1nj;$]/YLyL<#1(>tΧz3|C/AGksZb՗ul=¿Jx8f6xb 7 rtZ}{f/XhЅ/ɺ<~owZ_~z;Pu>}pNyk7_xY{?3ۭeбW2^~޹5ru-Û Ov0~oC»Ⱥ=|A.ox+? X1ͷZ_ֺ+<֭9VC7uj|5h$7xKW.2}q1>~㣩#jJE:eƤO[x΋ib&O7˅Y#?yƘ@<6t@m-`O#TL'^Ly,Ϝqa}U15gtW [X}Wߘᨘ0|ڧoϼӅ]-%<|噭97~'o[|aӢf+]lsSq=U7ϯ}= Ȩ8rqjɯ'~~6D֛oM<Uc~TS_c!EE9tV!c 1͉l'0m.Ԍٵ漺鬏qW#ĂuOb[{<fya&HtՇ7fGZݸL'Ca'xx֑~O3gMڷU}kcnFd^9C;{_B>>=Y~?lo۟[_9A+{úqՁjwձ>Q8[ris~6ř/Y~sO>'2JG/qGrIOπ.qw|4/gA8L:f^{Y=Cއr50\f^j13 [~xWK11Qko|qc7xP>5j:՟eIWEj,wyGM̽O5!~{i<4'>b_~*zgڿLj䫨OfonKek:(hB8;g >^!bTWrGa:x9cCr#z8aVjןswٽG'Lt0H:ʉjg|҇] ok>^ S.01{>=Ҽkb<5P֧KCo^m|*~)+' ?{j|?OpU[Yo>bpb}1}M7sUcbĤ'u>i~ydS ÷ሗj=r Yyv |bהZ+N㍁LY")=|z97ʦ?~lsUא9z2?Jay-'+~v//#Zܰأr|8"ut\N_w`=!~O~v׭̹d;~zw9+W{?g/gl|+8/YwZz*jr4vzg߱T|c2_l86N_9gs^A'wm\[[uGouם`N WAz<:~նg^>O=[mmZO};_}wogXI'g :7vmnߺ~y o}߷|9íNys|Xu!vrqd>Хz8ѯVxbf]Eb}.}{NyqxEIԋ}΁|2s[HEsgӵQk-|MFhӡt8L$=U/W#^o&l>+_1eCqW36'{b"c_C89rK?8r͵s%gPC?/9z6cgr74kGguX8eC8'.C_KfW,7zscث;,3wcfƔ|f6UC&^v|O?+&_悭Fǧ\bMyz{'WZj;9,(~>0oa1y6:2rMLr5NNj8\]0?Vwqz^TMxx;^|y|{s ҩ~ =8Ʀ8Y/p^{h|'N_==/fSL~ ߰=q}}؅>=`{^]cqy؆vrz ]{'p¿3"_E۽W]{_=q}!%.u=wέYq1^f#qOk~1?πa/|ϟW"OFŒq^/Lr1fT:>tbyC>^n<9;3\/͙ 't|\8rE{}x{;i͎ÇO\kNOoK>a=klQqُGNjSQ> e$mZt `“a/F Glmh׆1kpeXjN6ȱI7yrŋuG֚y<ƭjgo 3a.obkljg^9#(_6|5n?<>0‰g?8.>bSxpz̝/iU 7'%׷ ~uf ̮+|e /pQh?Վ'O8~}5|sμ'cc6]M7.q}ƅC^:?g?`=3߶Nwڞmo{kEry5l>hya_=psy6oyvqڱGlsnne&0y5e]?9"F2 ݷu[O~TXO4akWv;~^6\l|sM7lYֹϺO~?'?~wnv׻nO?8Qj& u?*Ƙƿyڰft[Os~׺ؑ/)).J8b5 tgG;W/\aC^9!61ՆO}Ǡx).M yl:VC̡/Fz}d.ϜrP}(ǣr~coT?IS O_hcXd^-v4[ܼGzQR.μdL\yx W{j wC)~xtl56i//A9;jtdXNX"wY54h+_6X>LF~_ Ng^:Ddw ¬~ul.{bvzË N+7^s.7#>^sIq~jCsO&/ҟLҗ1Wc[=r4tGG_cUG0u˥G|Y(gugGl/{s,]>py]CU[}oOtS[Gbf^.Qzj#?ƞ`O}3@}^ܞhONwl|kMvL8">w7eE.zP?>o^u~/Ꭾ8/XO1 ~7r1{>s`O#(,#WL6$Nƃz þ6 &xhdS9EfLz㠇Mt}h}w{ }^_77/ynx%n~뫿[O;q<m?;hoyZZɾvcc \gϯ竅~s=L~d^b'q5.Ds?3_ GgdM/^]ū_?KW 3N[;68đ.'u̽ژ1:MFOYN4&rqߍˆx]l_&/~b7?z)?"O.ۧY,6Ba,*go6XG)qucbO# |,&L>~O3FҳɃěr~^a81_LSm!\3'~9O?u1ӏ,瓟1ńC0(ziaM6uaO֑k|ɭ}v̀?qklFs_Y:}ӞWߞzxxۈ׽7׿/|v\wξzw^mW5ׯ8VxS}_l9ĩMU_~?bqoVsv;[XZU]ߵ=~o_uqAW[\پrNl\C=n-ǭ-z ~}ۏ'?ezpO8f /y=C5i\^G?O>yFW;eu򬭰rOo5O[>?XGQWtps|3'E51ykΊL7f+>4q5q'=Z`~Sr9w{§\5SφW`\/sѩq֙_\|lGq577u/w}䏿Ǐ%[$ۤ͢>,-^P,'w5fs 6mN`K5#]ry}` Ղ?G㍧|Ƌkb hyT-vJ_nc^GK3/Z_1O}3`yi4se\ku븐#=Q{3.'985'axwo>.unr8c}_}vdNQK9iSZe^sʋ_)\Q7{S{avq\K7^1ƌ?[ScCX/a|q7}9wKYSkV69k]'ϬZصx o9.~Kno{뎼n;M9m ~+R/ N}s ۧd==Pu!ktsxؽM?}x}|®33d7~u|<;LTL܆6-9NV(G2ٛ9^z}8a#/%/s .ze߶w|w}u<;ھjW._}}o7q{8uiUG\U<`[֍ ~3f5?.Nzկ>ѣ朝<~Xb[c`Oshj3kq>ˁkf<v1Wbpvz:q_aӇأ3?9=~j;w?v"Nmކky m.2Y  Z}-|1G 9}/wxu7Lt/.> l|(ə?[hjwiY\nr6W'}~N6jYdzdܝ|K_ŢD>Cj[n}1N%*7O7Y}@G,r8! ~rk Qnzv5!>'9~p:wM\6}\CmSokH72gONT)O8_ 28&UGyąEW.~{OLqKuw?}N7oK*5>>rgCtg$n痯^g&/?:>bka՜Æd^Af (*~ӟybC}Tn.1ї_?[f1`m{/3Ir|?>=:'Cn__8[|.a]{ _]67m~oW`{c5svkb݅墠;p|jyvX(oa3mdT#y}Ww׬.>Gèu~gzx9woqVZ֭35>jٓgQChω寱Wg>?Q=Drq٦,1ZyrsΓV q5}xOܮsoʕ^筿͢O~Qo.3 t~v;y^:.?ώ.mկчW|!z2t-W͇٪?܉n aױ͜§O/b|kWcu54ao2(yI_>.nF'6[#Gp懭t/Ǭυf#i,޾Oo'e+>,VKgs:w`aӦ.{sFGerCO˅#x[Lce+⍥Íu Cy˧_x@?_rsBGMjEK'Þ~3bNA^?y|pޟ=li#_.M!{ۧq{!>߰wŇQަ~3G;xN[.xqmo~\@wuѳA%ە}k\y[޲G<|{߼3ۣSR֠?T5'h.&ԥ7|ҌO^EO#_v28>+7[(Cgχc]k_!.xxjm\`>/?y(Lyj\}\!O;ʷZ>V~1afw͚W|-CΎO˧~\j o1,cI~S? n.I4mQkqs7]{bv-o]C\EbOw>19s\/wOwl7g\H8lqd/[lz>.fX|asW:'}|x6|p0OsǞ/}9u/.b /&\\dt/1ɂ9L^,ll|wh?*N鋝9q$SF7n^!_ .DX_C.'7j'ө-{c22.>PÛcG?b3~̿H˧!b 8kϧzMXÎM?A˧lGjE̟,Q2EX'gWԷNʷ㣜˘mmvs3$ !6r˜8GMzF890krkȱ &'VC-XӧuĈU/~|Q0~8;|$8c)Ɲ7Թ1CqYηդٸBvPEZW]s,@%+ŧ'l{'YM,MmlS/b矝3`;dkޞ'wԇ>%\ڗxnb~I }ڻWtʝ}rG٫G=][Cl]{^]ZN{񋷫 =gw[ڞ;ߵ}w|i:Cj0I<֜4|9#osHO<^תE8vCρ9 u9{5Uw̮.vs\/b 8 ?.iěrywjs>?"vp8G3a[Czceoj$Ĵa5|φIJ__Cb7H~ n%ӣP j08ꈋcN}׹ oxr@Wb^Ѻ3q,׷> ߾w[O:'u'!hDbМ'1筱m^6T_C|`Y }>{<^]Svo_ Y߼g;녽x^?8zj'G?s10=Է'hnfNzT>9ɼk%WC55nb'}v|&Wja^5N>՜_kў56.z>E8u;^󇗏8j 4^|?:sʟrC?׋~|#2#[o;q}-v+^pE/XOX}z"g>Ż=wna=irUz8{޽~m;gmpQ^ua_!Gל!yJKט[}8y}5aTǬ1ը1r!=Zgo-̧s$L'O>f9=|xb5f\Z]ؽ_LM-a'å ӼwοPz>K?skr>YszsǗ<1家C՚$Lv8˟}e>0̎Ob#y~͋~9P\~ž#fEڴmӷq@ұG|7 }>Gr8̶R h; C܉mwOb9&~8䘘^9;M_v(Lvьilމ>|2LS~o0;qmIJ5x_ȟ_2>'g3jO8m?ϵ^oXbvtbzO"3<3oz5|ĄUWnÆ3mS.)lrMO^_oѵ?i.&>i\Nd4c;u1͖~5'{Wn7[L縒˗_z}rYϾbk.{оn_>j$ۏ<류(ΧuO{+\a;O_uq]ۻw;p~$׼zvo픧?mWpO=+w{{om{+^q*!s19989{XsOijp-_58zƆ|/=֜С0}V)̗==.5Vh֡oE{|O>R<0^`F<ޓx68UL9[3qp˶7⍓Ot4QpWkk8i9}_߳3Q8U<]{r:}hd9'4>Y|ӤbU}Ka6&mަ.,l>`:vUk'3}9~OGsfk7>]}G̼ cShZ8 olmdA_dCQs6zWT,}:v6`E_CF֟|Woq|rMmZ.KQ=sngmY3Mr <5-.;e]-~Ӈ==/\0 +No/^j~e&K[јɇ8&QrU#D'V ՎVC|;F/=bAsHW_Ή~k %D?b+ĬF0åO&Gyu|TGk=bgabO9 t(鳓˓}'Z8P9T.zDÇ;VK>]{+lC goj=O>q+ XW{u6{[TbCr> Oɿͬ\҇.1Y}`<ۍc.zK~{Oӯn'+suoz׬ϝm׽ͷ>? |{nY'o[ꉎ[K wwHt%9s^|s7|.ыA5 |x9Zj+j߷pqQuī9|e:a'^pøp͜$K9'~+tr|ʝ]?\xAugY|-OϘr/YCQ<F|b7|b.{!s xdwyo|r?.}ìK]r,kilPLx:ui-?֘%Gtő̻>? 'x˖ޞ֗=rqG#,r=‹j;/fk |eŐ wlɿ~grո`ы_3(=g;8yF9aUb:،Qp^| 7;rdfgg>"g Ctv~os?VLX|fjQ_zxņyW`ceS_;m|ݙo]?pv\o?~%dg>s;z~6U/6sn;׹x'Vk {«A,9,8/{~>䣈p9ox6xo[NF~aϵ$gWo6rGi?tƋǣ`'O~^&9"g^1Sܧ/OWy -:˿cH?"^>mx:į6_j3e|m?t}o?}krj }Ͽ w1sƓDCrbP< V~AONT~s`07[:<_\>\mLrkxcK_x'.Ga1cNOOtG xl˞_ [cXPuk:^iʇ=?X<)߿oi֧8Iן8_Ӄx=Ovxh=ZCo̼79d8[OX2G_L> nܴZ^q/>y&KyaӸU_qVG>napܗ 'V}b' P}@?dy]~wg,w}hy £N~™']oz-'ls6|~؉՞xv8gKki`S?cOn | {ϗW_ɑ~4ZZg<4_rnJ}þ躈puq^6 w\Xq!NyŧWɇ|豓r j!گtO6޹ CϮ5ac,0ճ]]s9F|K6GOIsvk6c&\ٰkĽ/z:;=&_5Ճ)'}|@ma:4InL21Wo/ѣa?u ~gs/w7;ii^s::#=Waz։y~PzzZ{֝GgOk]kX_;\=ֆSS}sz=/_x7aOdOi]|s?C=Z0W5 =4#g-q5mϞpf'jTWVm}ՒSM<֜/'1seh/|o)s { ׾:J8g?{tX#3^{ 矿s{}Q_5ȳ86,/Ng5)pogQlpH|oE/r 'bޛՃycSqtסZ|kzuS˝\36pώ{U]_6M)fVÐ? C= aEw843ӡpnz'~}y6E..끯pFŸ[ͬZtՙך5qe;ai}Azسδͭ9hj[u|1WCņ ̭ZG|M֗ݬS]=Ԃ5f ɏ.?,08 Ս&竗Y[ d%b4kUl ?ym?g7Tp}w|>[/bZp5T>r9%~yW3<ȁimwqC?{rεOm#nzobDP s ߞՅ5КM|qzH xg1܄V-0r5`OLNnxR.M+zV̏w޳̸j S[Ob7Dڗx{N׳sWx\3p/=_>]'\]sr&m>U&C~ŧ{s?|}r5zvr>`yУ~7? Z\7cWVAnƞ-7SmPaǣV^T-Oy{-?X.'-fԻZ$.:bsmlBkWA?3O ްiX\vx$SX37}ݟwc_/i=X.z&g)qpjL-M☺##9zS#9{N>q5f4[}oP<ݞUNzVGuI=$>2'b|s"ރkc#]_ )s>0bm^qՠCӳv{vݜnȭd=bt94/6ӞX__Ķ.o0j}Iy{pꑙs:1'}1 7yg&՞A\s/?8Np{_\SÚǓߟYsaW!'ވ]~|ug: IO;!pm5t]5nu|S=:S.<)ZmzAn>)8\Ɲh|K[?X\G|VT5g|1WcJuMz'Ϛ㇉gj6IÅk/so#X_Ēb7ˇxF&[:^O֟ݚT>\=Wٿ0S,]]zq=$8gƅ_$t{M'ؽ)#zԣ[~x\I&bAp#֜ Sb<3&jŗ>55k[7$^µ?b.'}n=Lk[Sl> <7^4L=)RZ妔]X?vmхm-ޡ_~-C{U_rK|x }DON{B.<3s}uf_هti X}2'zI9<o"w|;v~pG@W1üĚΆ{}iL[/\OoS-o/s׿N^x۫o|QbOZkpu >u`f/]#6\~1|^cw#X_0{8^؆keԫxs}ȩn?!|l19tR| Hqﺾ0Fc_-5ʡLJV=믵T[}bj%.׏Kg׋+Ͻ>Z <|׵78'/s/qOxO̴ퟚ]Ĝo9;u伺nLם+' uf'<+{8az W<{ gOpІ>y 'z>k/>x})Fڃj;s`'q9IrGֳdK.|/sy;cC?vg=^Nke]7s4R벏Z盶X{B3֩?i6Y_Hsz@y+7rq6ȝk 3uWM܍myၕG`/⧭ 9 \rl\GGt3`W=1c,M`''[/Xgv|8_)?zI[K ^1yx5[oaO!t8GL5iOr1Óms^&r߾eW `i8ģ'"_j[߹ӜzAsC:KC=!|+^tM^j9'6ޫ5C6D7 (NWG~yޱ' =E2k'rg=]_y?ߨ!pdvMޡ^œз謥YqO:/!sp=<3W?&ggV[=#oz'r{OǜV/itS' ׵M^OSO]+9yr ]u]֮ОO}^p!}-6o]=,OH^%xi`paƿz _MzՀ5‰5{/K5q%bS`©c;W[w/^e=kwi/3 ӞWg5\״kVsk,3&{_tǤ@0r<6 \aa'.~xW O:Ƨ>r/.F{ͱ{8:^7_7f՛y.Rv]tׁHeawH˥'8'K:l&/ՅOq+_CCπ50z#aʡa?E8zH{:^&2ԄeaU8,+ܜz˦p615 |4N봗ĈWg]rʛ|{r߁wfwಝOXgB|SkˉӼitiA/|ج?kbtyP[+\=ε'I{zP_gz“yslj;zqfkm/G"z|#_LGO{sHĻhᘵ`ZìW||\+{//N[gyqq--7=얰Ñ0xO1["ngz5gu}|{8}Wo}~W.>(?~y[[ְvU[ͮZH$uqrUbncggM}A R>Iu"/L׷NLbgn]W󸦮6ƗTWupT/?18%6C]s{ć}vݛk, -\ovAw!_]C7 jA+F u˅F˯> ^}UCN#swխVqxDԓ{%}+75;n}4¦+I˖?\"7 Gs}JG;AşOgqQ t&_n4_Ú[v/:|/XҼsY^OtVpˑ5jGx>6__;0Vg]uO]^뮟jeW=pI=f<|zN9jQwpd{X5kw,Ƀg^ƛuȇq-O#pF15^VappVjаR8 ~W>:|6B&Nݹžwz~سu$Ójkg>OyFr=x/__߷X>py}uy7O_ŏz~}[>O~<޻~yx/_7%/_m߾[?͑oГ!1߿-w^8yY$WMC{-ugoO\#8S<}|@\ IDATS7_RA8~7Ev/._<[ _$<+-hapjݔr;Y\$;:, :yCf桙uDs\|P~=9ol{#Ak}͋zSC/~>|s13cy4;n:nקyRo^[,^~yz3պ[PG[aʋ/9_b(9\˵ M .zU3H1șC9reNZ\gG+~{^3snw0x'O>dzp[Sozjaz; VO>3| 8gq-/ p?FrC::v>ĝo;t-;7p};?|rת%NԩSzNj;py/"Vm'?| =wSz嶾8i~heq`78iypXnv5&6M=i/īʗxz= xadм~}T-Sէqick+h 0Q0'Sw=T:rʗ.i_d[k{Zƿ%op1۟YO0?g/-w~9s޲{_|Պ{ ^>}7< o=݈;Wv0WxvZp+yΧH~ޜu\ql0|tC.+o S|?uze)wcjOpͱzl3h^orfn麴s90D쐔?kt#33´.ar7PPբzryuŽ1&Vsf WUgƧy4Չ;ッOI/=l9ODOI}vo>0b4՟$?']:;ls|Gw.zk|.oZjZ?ךO]o{۱|/#׿|<`I3Nʯ?AGЮ%ݚ7"5g(`0|3}nxy'f-i} ӚioKOC6_5]?,7ih2fgߛ}݉eO|#ͷɁӁԿr5Or[.?/δꀇAC,!X  S/r ԋxv1q57P ? j#,?׃%\?~dk/=9\7yqΩra`ôzwrˋQ~R~,},grtSOښ /X21m^}z#]'{FZ<[p}3/9-\Hk{UoiW ϼ0mI{kԜ[Z_|,%,mѩdYb!\C;|65'cOfm>"N!M[8ytŻ³9R8wds8ah=DV(>`S>0> KC^k֋~R\ VWK5PxsLؽGh#?Wۺذު C's grySǨ/{`^.5ۧi0|x}ʩCXוF9iqsg=#7A-/%/cW.-n ?uҋ/Z'-/噿 e];'~bn\>Arc=Zz{/{Wjο-uW>1˅/x7ξ}OˇwNwZ!gc{퇹OXZ!?)'y/{WgxŝXqٯ`Ɖ#z}4k_m"p"ե95X_f.[4Ĵq~Tx{W7ץrԃ'| = [|ܘ& Eix틝V|y9S 9]rzm/=X0r yxGzݍnރ1Nq~}5\DqM gpa<-֗`Fto·qW7/ɦ5Wg|aػ8 sþ%W8rv|pst]gtu_6ÿ7׃v=NagM~Ç8Jdv)zW_>e&ul7ȧ9=4zib\n ~[6ԯzμP/u׺vzNi|6\\r]r^ĭCGo/|L='l8OIg'},wsy!w(8dϝ.p9/{Ym?ÁGaI' g#|ժ'xYyjNiMenewz&EղKpSጉQG9 M|zw K7o0x /7k-G0Čݘ9|u}<ū.ڨV%zai~k8>g~y].XOwe}K.Y^җ.{c 9睷|^r{,_,zq}[μ+]wx9Rk?{G?޸~Zcή~y~K?]{Ý<u;-;?zۚ[oyt{f{o/gziK6Bk<'NK<5'}=?\pӮn>sc !6qƳ:o\kšnq|7q#awC3ksck%}cVwPrƻ!aeÅui:8s>13VOO~n0L\qUy=աrgU,~ןȇ Q1/nN-\?z!zkvxW{Z ~9x[4~̵&gJ|jW{>lܳj_<-GL[Nsl3ї/ewj[|=9q(gUM{6pvzjWySe'zI:gL],]?ኗx1~SËӛ|Z5ÐՈxx}ԋu&pSӍj[ `. y| )3V/n^k1bkI:pF8n~cė?%z_-ߺ\xZ^-|#?y񋗇_\~ܽrҏjW?k/᧯w˿|yכ޴,篿 ^o?>C˴3ė_v1 %9ݚ<ܡz솜Y3`L9Z3\Ȧ1{O{>4ߜ[fϥKg|6cQg5[xqSbwc'>;̸.!17StzsB7h갍\}nenoICzH@z `|\7az1[L.=}ի? GU7C ,V}+&φ=}ϴըSʣ;_xoy mȕy^mo>\ns|s6gv&Y ̼WZ{\1L,{ad⍣uM!|i]bAGϙ Ùb}z%9/vlyF{CZoz'|uLÈ7gN٭)[ _08Hyl84̋ᴿ!|j}+G\Lp\z+ǐn>;{50x IO?>~u„Kq.uImxgN8jӮ_89g7/e0\kjnEyO{v$qoE.7|綺ZSu|Q^s>ônޫk>py<ܬ__k{NkZa7ceN){\TS]%5cwg>C\O{lokn]9_g=ծ?g`s<7孯yߟ?vՏ/qw\fϟvƲsR^vPt5\1+fŻZwhx΃9a7k7<}UL}BgO3_~=M8Fapד}_ XGvGrg_G7둓pԾVu4A\D~ ۢPd:|R=yy|ru IpjXq F`rq'cQ|b&F\8iGzH\=k#=s/ |?>|qL@4pSL\jG!לly^w6\0O/χSop핡!o>).F WzՆOqۙ`Gҙ_H:m8Ox܋AK>IQݞaq-N\'{wv='Y)~nXL\tw.NW:zͫg/6ż}`W^:a]rayCm\9wHʫ6N.Bx6iOZ _3mR/3~$kךH =U#̬Nj~B߲vܵe^EXg+{Y_ޣ ȎG6]orD\p݋۬_#ι}u)3fvo_X@X_[fN},GY'iob]F>oh1X28 ő:ũNƘqSKYkSok׺䶶鋓ދ~̳8 Gj4o]rp%[>JG׼}./zj;<~>ŻC\=ͯ~t}w;{YOo]7aYiI;y_)oG?._k}5R 'Z Nk4jO05 %ョV'!8 {P2;[CT7?LCz!7Y/޽Ǚ-r=e5q/ks[LkU;|8sڳ'9m|w`ǻB B=vZp7:LP0qt(ո.]/SKzPY V˃1_9ȇ =yü<6#k?O+]=דy9a'g~^g5ڣ#U-L^}Q*V+j_K8CxSn~rHxbG_iUVy>s{_\8'nj7sK[ ?eցךn[4ןh08Cq՝5t}# N͆ia1v`z+7]O(_최z ;u||jQOS=i~Brvk9?=D+댘w:/1gdU'l0Oyg>#kPMOynwo/]gWgL }/\}#'n D|4Dzg8iM |?x^Otk8Ëu}9oZp O՛}m"oyRlsjzr_g杴~]o߽g[{s,?ۇ~>?}Vzov搿\rYgyyDž._%mU쇹a/a?d݌#qWcƷE/[>oa:ˏwO=׊{jÅϳZ pjN?k>1r S-yחWo,i[\#~cȉr7A)(E΅q;p'?q!7Bbf։{+OKI=xŶnuiH5h}ͽ&3C|u`O\G?c<5c>9D֧GXQ\hq 9z5F4^9Q,,?1ozmo૩~.5 K&^8?^Op%zk?`'^i֙nY~Fw߈cwNSo0zS O|._M;>B4>|Wk<s:ћs{gOwa=Zs~kg[meI3Liͤ\Z>\`8_<#)Mo6󋯭'~bo "U 0 IDAT"gZst}Ōrܰo  b.ZԿǮξSg3Ԛb .᭑]}ٸ3䜐[tݻ{w&wu0[|WON]u ޶=w?;s|ý zq>^?֯F5իn8=fGkI;\C&}j׵爟+<]z`8?)N[Wki_Ym_꡵0=g$9?|85ǜNozb[d՞5AmW9=^oS9|aõ>c΋+ЫPM?|3[|]v9瞷|nΧ\VeoAUyʋNϬFݩ-^gߗ|Ӟ1W+ ZOī^xs"f-]3 |rԚ"ԋZ+8HO>vrF1xIK~}Wrzϝ\Goξ>)Iopmo|q߼O|#>{y[ߺ<qy^~_[޷dG7'!F;ܮ}cY}nU sqkI}.QGӺi>N9[-_'W+ꊷF'gc'V5?rxc=눑>2;򊏨%ěOZfM7\/ޛa.x됸x$Βobl# p@;htzzK:ӆ~Pՙ\(Տ}Xk'-~)oQ_}zf|n5WK>{_ԭ- ouq<zdž1Hqҭuǟz?uupQjt~y^!'[/Ivy S,yr5iy0 '>-O\_f8oϯ)J𖛏7u{C辁 d'Kki.V}o0*o~z+7g'3.'g:?s´7ǯ–< /=}l"FfzZѽmnȉhoxϞ&gqW̵3xIx hdžIݏbקq_qߴ;е]t=7u_ˡ;Sw>{K#\}t]OւKB53{9bn聮Z[q8gnq%l>{?Y/.g=k0x䅭6gFbTK& Ok_g,[_8fd.\ ?.@)UWٰNkmpqVx8sHo$K9:3LZ.zώWMؤ 0q9Ǘ}Agv^M^_߻ey˖ϯ<ͯ_N>}r|jf˟睷\~U~_?њ:mÖӰ.aҰG u7̚3kcbs/ڃwƪ/N[Y5 |fm97܌Xxnxߌ"^WZG|]Y%EgW'R~ܔrþ].Zyad:Cl$8Z.߼|"%paM<ᅡxS|G[nZCuÈ 30pև/:QCoj~?_GG^)a}W]~o|Iu_}kךظqT/?.1e8,oO&W<>Ie*&[ѹ׈k;Wzq5̹}U> #NduaN~¦;I5k w{]Y+|>X=g[-MW>aX]{OD<<_|\_ϙ[K:ګ8~FFyNvZ!S-ؽT?NqP7\}Ή:k:ug³y:trk~g{&|׫0)n‡ŏǬ#.g^\}\/֏8;5۰= چ9OSOx =ʣ/'^|{zr;'#nZp&pf1XHڃtx~ȳN:<|8LxNp{^>b_ȼqǝMw}y~/\z[Nw-;{{S~p9鼯X>~G'/W?{9,|>/-Ư~t>Z~z]wmQ򷞏^ش+^ԍkքh5⢳bjGc19գa~;#lR~||1Oyl5T_5bg ٛhl< onu; .@ɛ! Gz~\કޛb7L1|Ոw#Z_y;7&/rm0kG9|֏Ϝ.6 mRl.kKV\.x-?8ɜϼx}>; ;kv8oծyYu:pqȇ7fafk$';j?kn~H;c8՚#Xu¾@Νuc{~R.f >5ㄯ~5hc 뼱gq1>pö.{%]Fv%nSvcO>q6>+NõoEq/i'^K=w9?w,;.eyUϖ[_w]vEzw].S_}A ~>[ޓݾw]&⭅ӟ O uzS?xĬu\ m^{]oqyr복|saڇ' Cy6KqN='7xZ/dw4nN};aqvw^ ɟoJC r;?-y}W- -ff`%]}oj5hNO._dx7OSc!Ĭ= ma&okͺxövsy|z&9n929IZ&N~zvuܩ-x6,)']|lˎqæa‡g&6&7mOٮIo57Hhކ]0I7wx{TX8rkϙ1{Ҿ2O\gjVucSNppGsy7RO4iG/]yq>4зp;λ7`yF&~Ӟe=qGP݃W^p+&kt7>'z p}?]}69:8䵆S_8 '7?#zf<^zG<8v\%_bKWuMOlvnTw8ʡx=œyq%3O~bq'שg?]~;>痳x+l?{h|Z/߃%_G}7.˧Nrǻmy/=˛.x׾;g۟?߭ޏ^U݇"Z!bk977vI9.C귮}O!IHh^m'\z Sm^?aϖ_mZ M 3/\|`'G6<)ݵO{߹*/ b>WisCu =W1T+~9hc`Z/Vݰ钳om :n\27HCa><fc~ 1 ".#I!VӜKsS}S'\SOsc\čڔ:t[72o~r_~|)^~q%ṕ&o}cn͏i~l7V=S5|hkPv3G!ǺZ;xcߓ mWe^Zl59ۋx-ˉ~|ưҵ~n,X^k+[uV p4R,{biRLBkXp ؓڲ#>;l59;M5[3&g"NayTsoq MZU]?;ڵ8㉃&sm` =RM>A?[N_?ұso*ߞ;I`gl ε3Ͻ8SZQC"GgLs #7i3_uO[3>uȅW=8[j3sn'x|ǘ 6QWYNs+-wq|/=C|G_n?f֝OsX6ˣ_-hR=`zrk_?^[{nI'NozF߹眳U ;to-^W}uok^My^oo_]|^6x3^N5?1ŵf,X~>ēL#s x8jcMu9 5|Ŕ>0I_,&>Nڲ)̾a 6~sS81jt7ΰmrs (&_4I\GxIaq4vE/a'hb'E9͘)眓zzf7_7(.Zy{3>5? Փ-?mq8vڌ=MMs74'{M5]}x7- Oi-'z7qs5?11&ŔqjƓ_O]_Y\woquk_g<]׮jtyaQS?f11p5s|s908֟yai-?,.IXSϑx8 /j G`ƻq{ Vk,;V ;9? ja#pF4V 僙dأߘh/X~7NXq7wb;:Kq\vE$+vMLIff>x>~V>]vUv6>>c{c#uU3 8.~⊝>91\8cqT-b /Oxi|| oMjf-˯ᇇDž')_P ^~. kE<{^1+_9ÈiL<7{c''䔛ի948N3 \a%.:6Z#)alҳ}G|>{L6se 9.]=Wo\'{=_yUsy[rXSk,F߷|w ٺc~rZ;i=ocgb7+^{M= yj.~s bonZ8W6m$>c|婞|irXL~U1M g^77_mRt"˩k}c>mrA5oZoX1iO}ss:wyK\|Ze)8՚gh#Wq5S[>'>vku_~ֺ7o ߸^ԧ/]3uk޺ٗvD'o_߼ w_?}=x^{=9諭/[K,1- ҭa\ &[5&aN.yy){y|Z'9loMĦa=ғ' Fpjbw†38W?;7Vfo3";\s'JpϯU3M)v7{һb S=qz"ן|pbQ }pKqw7XWl68b\3.^_ s^* 7g|͑o3G 55gzKÊuS\aKge;J81ڼ;3F|qs8ڜf<[hMZ ǣv-'LfקA7l5ZISey6o:\g|r'S& &'T >b'>N|6 M)q >|&T880E(b̖XL\Ɖ [5'͸8K t^|u=Ǔy(3ﺡI_\fݶ߻=}jŽ6_od;j~>d=?7h>f]__Yr[v]׬m_ջowZ7<6/vbgaWk9P}br7VO\7,6ⲗ:I>\ փ=hM&OaWQk.ڒ0__s>9SϾXę6E)l>1p=IkO7aGY/\,^/>>~y6.v!3.J7=xkG)>y톬U|ՙƣ.R.'$_b;y)6~uMcrj틝5?cʗMc U)[:މ770/0f>gsN;oln'F?Q˙?mH`u Vlv> ~PQfY{i"]~ .{ǽZN- geoܛkU}a5}J1w֜Zѯ/)| oyc"f3qO7ֽlҳsUm?~L;IߵX~cӮը:3YW~g}73Kۛ{g~֛_ulߺyw.7e[_uvm߹^g_|VzgS~tv}L\:_}NZ /f Wnk\ Zs w/ q0UM:Ϋt7{KW-5SO{S\sq'>p|sNs|7F5xO~ۛw^?xy&s|tOk=5sl6S|bbӟg̘eqw>2s㙭\KuÜ_[W~_D\ʛ=~\$[9N3q18L9>qlplGwR_LmVM~eۗO}'rdNػXabI9{'Qfp] 0Rq_g/fkզNI313^"ޘIv~͕W+g_-ajDũ&Ňk dbzk$'#N>R}Δ\Em>ԒT/c>Ӧo'w\֪5b#XkCܻ"~kW-O9ɞR57GC\gGI}px)u*>}כ=ibiͥu.Wm?.lqN5%nOkA|vXyU/_CkqN]MS8`dgsNĹ_fCW>sӞK/烘OfVM_8Lg-`\\-w>^x9n\Y}Yw^ntgL?<XrjNw~ Oa_`gWxykDKO|?~ݶOq{ oru{غ՟o]:/~wǺC-{ўc=ci3o1hQkkռ[~&{kӤAWQO W K&L~}֬sml/ӧsZ'X9qLNvZ>ՌoƕO\µxo.ΠUK'-Z5g$Zo^7˷{Uys׏~#q?u_?Wqj{O{Ov.x^ 9qs)~|Ut2"8_a`9Z=I0ޱ0VtLŃC#bғL~|+73W}qqH܃)?^{ط>Zb)mpX}61Gq̽7#קj|~2^ L൹XޛS621>ťs _]t{H9faG=Mq887=s'jmŋ#_8jiX< M\J ~:pWŪM^B^Z>?>wn/H\Ӕn3z8q82kZqkJmwZYh{ژ Oî'‡a7.>KR?)gx6eӺ5fG,{_oWZk;pWrw{eZߘODž_Ձ+dwZpWkX+%O;Ehm&Ulw‹^`ڻ-wGNb[mc2[_|515sYwK$;„ZK"|7&g.x}8:p'Y@g[o{9i;o·֙ u;''a8{_0s+/]5I?3?oG?Xݖyiמ}%ex5Y_wGnz;~ݺzs%7֩ >. yg=k{k5~t74WsDߺy>n{iܺY/Mj_#.{ρjxG5GXZC/gα=aS'lX}Vj+?ٰշ;#^,۹Kl:pjguE`{yMgM1$_Xz:]/e&s{a&xQ[|8^:jQ=،֊ OM>bmZzao>\FQ~w\p$q[M٪+jdןq3_z93wk!nTG|sgTK?U/yN:$604crbZ4^^8~|0c<C|x7{b0r°|H9f|'0]3^qM\kF.+fwl/a?ؒbͻq~i$/\9(.p~0uV;_tõq+{>,ޤgn}C\=U1!L? sq4x7n^7WCsPH^b)-;\<՗p??W`sbc{X=/3b֭d_~}ٚO9USx90k <9Ç7[m$Σf{g2n-I`±KUL'0|󼟉_.J҄T^`´Ss7 _#_n-{ϴNIJ9զ-_5/zi^/:bO͛yz69éjcoUNq-ot8kņO'ӗa%g5zN hD\u]1M/9຦:,}s5?ף??}§=m}{_;W؞5߶xjjtϗmiMWnw]{SMԇ.X^c#nnw{}+szίon߰^roїfD`L_f}j?7{Eץqs:D0)ʮMX}d:D bԧ>=ۘK3`U⋓\9lcҳ&~7s_U~~Rnk5nN ƛx./x\?c`Ż⥛+^UXR~5ƸVt_I \W<Lqig"z“xh>ke)@5_Nڼ.6[='9S ;pxuw6-=kn89ڪ3 7W1Op`\_8̩exhϮhyhB ۞Ք<9ql8<]84Nǿ^ξw6͆Bv m;J;lG‰0I]h<.?>c7k\W1ި8y0oJ::`]NyGF7[~x&IF~):K̬\86i>8H8<k^l'G}_>yObZ_qș џz%r0rl8Jml]0gk}^G;E/≘⧎_y4O-,>q97mkLࢗDZ)[ՑN{/9x#_㙻O^V1S_sNIoOIJ!>]3'Z\G:bNդf}2m00q'Þ՗΋sޜM?ws LtV4v{pGZlzus}z8~/o~ge7lc?;߱xzϯ?Sۜ.?]q/~l㪯|nߤ|=֓}>77 ܮ?s;mv }?f|KշN /Milkޚҭ)]M~StR~b峷 {#5|aӭU|'[GS:͙/p0`iƭEρjo(x5~=Wac٦]֥qv֜L~^Wk̅K(pąF rg}j"3?6%lpd'g~`u5_u.N|8#3[kcMo1a[ԏc噹Ű5t &k?qO-x_=~}y>vx<|q6s&0I3j>rwg*5uy8ik籎j8ja3'e;dk_MIk>%|x=aSX!qV:zХJOV8^IʡO>\ f=Z

97yͧ'q֚3Ïמ"#6Nu5G6>|͋nNK=d!jlarƣNk15'&1_=Oq5φ;ĨuCWߙN5dOQ#cf4rWcvg}zӰ6)'m~— q\9S]0b5Rn Kp.lo9qaD?^68,vK7b;)>I9ͧ6^a\#osb GFӊpЯxo\Ow'ϯo_}Sm}yғ?}J ?t=j>b{ꜧS?oO}^_x/]kĠ5b"a6h;ߦŵ;a[*űߚ^WY{uyHƸAy#c}q=⯮o\W t>Ֆy+Q79/\G8}5T6.nW/ykpZa59Xx®sa<牧xIz^o/N>׷Йc3W|sv}5Qx9ba 7}f>1 fr͘OyɟMT>E5<5qlMf]M9XO3{9oq(|GiN3&#yw`gxc;˭Qgq⫅e".<{O2g1\ [~cө/Ogam9.\JG6vXÅ'lbëCnw|| 6|4nE_` gzο|kjۃklDl7֐>aO1'|-?{hxK” _:fS6䗗Ho.Ocz5_6KcoUMD+ĉ[NM\Ƴܝ%z} N5å&\֠9wfUK4?Iya`[Ŧ/V3G5>{q4s6Fࢗ1ן>F'٭wM ?OkI9 gO]^*]K;k0'Z⫑4u>s]#7_偙jM5I{Q>5K 8S = ]gr}X,t%_g7~mt=IE=Qm}_\}y+9ga{[-WOz]ujZw:C<'3p{mw+_eeߋp"4cWg&Ms5:kp%VKp[s${}v<׺ϙWς7P[ŗS.xAo޼i֦[8mg'g} Y CN7>V,_뗋_ϵ7k19w̯`+gbh\0Sg=eLh|:ӛ}j3G8ԓ.K{?`7]-_s{#~@G[}R6rN|9=j~t-̴us6r+6%{kԇoњ<~-17N4ZcLi[t59v6=%3x98֬=W\OT'_-j/Fg>1br֤4A,xs&]&.}*䇾!F2/ }`p!b[n=`_qGO7070P,q`ۃ\ltq>NkN_~F [FX-e#YP<8aդf ^d"&Mg __~: jj> W^v<[+z!I|͕W,i.ٳy9TW!ri/Nbيu{5˅.ژ_?gg`N16Wmҏ[xzp߽:ͯjQ[nNٌRtoq;#Xys2/(>s)_am]QtXڸN4^&;ntMn1I5款s,j݇ҽ~CtYgfz&*x~m?ٟ [v|ɺM>wnD}3.7 9k­S[خ=ש_% şsuۯzc~{/Mo_|/~nQ烞shD #5b/|x:tMb4#|_yW]rK-N1օZqKN~;a{MMᬏuӬ1~1욱־[-Wnj_Ovb,&^_=aYM8q0֙4ql “cSj+_|̣wŴ6gy`.Np|Ձka?NLq'~8cOg}+G8c-crMMr+oO>f'Xs#I4_`gIhx]_υe!:.ZqǓ'xĻi V ZԁϸV\sy<6R ݚTo:\o6d/!3i?@ЙpJc3فg1[jUg<>گoz/эu 덯~mo^wyz^~֗u}G~ltYwwK鮏>}u;qigl׷~z)›闭/U=לx9?ϋbjSQk:кN.Xq&8v7}6\@0iLpFh6c9sSS1pNֶ055S'rՊOۓHƭ.5k<եO4㺆&U\5/G\c>[i\ZkX}8/r''u5KD)Fl᦯9gJrˮ['$mVn{#_Ǖڊђpts_q'qfLg;alM%;D~Xz; /~ C?сO\)NlݴWy/_in7V53~26Q쓧tܬ=K'|oMS5-OG<\h2k  'OK_o}n7Ͽ[_u[zi{n;߱nSo|JW^{ONwwouG/n}Ew^u{g~뙏{Owf={g='7?Tge_׿ծuYs> i-$=k FN.}SW8,XC3&$Is88w˱cH9gNښ5xjkاOi8Q%ϯ٧}|6<gsNv>] ˑyAzyfS48{碗̹f/ָ4[/ln='>^ɛ&wÓ|wx391=mWq: p5=Juf)M_k_g6[ sRbLKklqLqKW{<&}~zv_e@W =f Ar3ϡ4ڡޡa_.N~qwa85]<_}58̯[xx?ӸaՒt14yW\l׬ ?p!saߜp3k1r u>o?9怋_Ù3V<-?+i∸r 7b)K/N"G;dWmx cml|sʼn|ډ=eˑߘ8IԮ¦5_5/G_-t̸ּ擇oHU/XD1Gjix~uT_,\``rT]u+ AwY`\56x/g5OU[6ZDrxêOGl}tU<{{Lt5V< CoՇM8+lIG{u&́uVo{AMWk{~d|y7|u76^_~w]|_n_oz_Z7mo,`w^._(S_=o{#f#~﹡53/ c[?oݺf&᷷C? 7ZGBh֟ =1rjj{FC>(isopjÁ+nx8g@/|2X𨿵 _AW+O\yK6cք?ě׼uu7?>gIe~z_v&Qf>͗]7?7;7_g\Vg'i?ny5co>}b׌~86ޞY _i刋OVucSWsг &\juItkW|'8^ڄև>6X|qȯLMƳSӡ/:t8l@c! fuA_\,v jW5tiyqh~tT3|pÉ\C%=\7.\~uj ҕt{Ӧ IDATXq._kK٬M^>O0nfq k.pVLgZଙPbiyN>ck5ѭI5V÷>0\kzp51/>Y:5>':q91͝ۼ%O.yGW/xlլsϵ.Oև&|??N%֚ϼ.-ǖ_,fvk]ևkqU8s; m=h"F'r8D&g)]-|b]]'wwk;޾ݓ׾]n|[xu\ny<g#BѸg`Ѿ٫g={3yRqݯʅ5\$>R,]=j Ԝܷ=Wl_Ku֢NM]xR~ڼ|K-/>_v󒓟.Gu‰S0:V.}/u$۾7|hq_w{svwŔ~94>ε\ދ\7-^yp!mM)| F]k=T3kj$(|;p{i\i~g\ͅy_|{ x%|yҳuƕ/XZv+Xγx19Ka/mwrfa>1jWaaQ_}~ZGvu:NO)+56lלQ~".^Xd}*7ΰ6CہjԷ6k01Cuil-N ŸCX % i.lZdjj~~yџ~v9[y;&~6Z՗G.9uJg_N~k8g-Rt吻ڬq̟/OOqq+>~d__+OS4?1zF`5.gŧ_qqw0{[t4{k5YL88c'n 3W=`{)'ކ/.t9Ēxb|-l8僥5#q+t>?cQ'nēnDVMqgSmMVj> Wڬf,樛=k \s.a&qz͜g -͸3v&hgfӷW7oo_z}uwlO]G}§<~]7.gt 5I̩Z?~lw^thsn=i~ox?|=gv-GxZFcaeߝKq1x?}3`D4&䛱J[~,FNs9`+:JYl]hcSIŗ34;9MNw8rͬ?x۷OվmS|7^򿃧7p ^rk^fx-Z§/?-;-\jI&ߌnmr|GN/a9z7gךFp50ĸy3n=Z;bդzR\ϵœSֆ۾Xs"VGc8q%lj]+~RN4\Sq)ۘXu/{0W뭸֊'pzkI5qS]bi5= )oV5co/f̧WF?|cagTS<KOc?Lg|x#mrG#fҭLGk}֗|W>Y8oj]?_q{=Nz[ߺ[ss;Ņֺ}ϻׅX7c!wp\_Aw]uy/s7>g}z?O]׺u>><ݛuLt{3?ZuDwX>Iu+ӷo/bZמѭuEӽP>rV\ꈷs8{C `$՞fXvX6u7'}h(44{nFquU/|_yh۬_`#q]gۧQ Or{x_koh;77;c):ř`>lq8On)&~WWqq5cuW;Lx\&;3S쇋oAۋخ5G6j/M`_5{^gs=G\׽~ZYCkHϾHNawp)6ޞk3iz9f F6Ykib:K>c .~>XFp;_З  .hx}7-~n`G 损]k8ԠNzزv|ր4_8%0F~>s18̣9vjavK8]1~rN,ۘ?VoZb>r%⪣9X0|Ii7򧫣y?sc_"㫋/~yaҸeοK/os}l8p6~kΦg¸w(z77#|)}vu_ Z! RDy caF"MHP C!BɳOX><^zu_k]{]}~{[AYimg_n;gw )a1Yƫ1Xs}9q|G'sCrqd_Q|0P5t *?gW+*S)~|ÏPkR}u=fg wu;.4_z|To7-[^qcnnwoy+u8=<]5Ξ!'>o'qYT.r? ڼ1sᤗlַ0GN4_3ymq~>vįxxۼ 3I\zwȆ~+|` $G;:ƊL; d~]'n "+{5z8.~x G=l9: WіKOuxk [Mv%՛l#ʫ#_1ȿ88q>+N#|׆*c..1׺8Ǐ>>g\uNO~tn^|ã1 Sv7>_++fx:>aVKwi M׀bsr:}6v  \__~ؐ7lCc++j~76J:इMiWV_Ch_σ}{uZMzeH~mahw k; 7[m'ʺh#ܦB  2Q_]3Vz=Nd . H{0#m>)J>k~$ށJvX;ʫ[,<\k,6V|{oFGV|vy8ܜ+y6+F91W?]6Yq—gĿO/FX&nߊWpi[kgS>lvWb8V;uvvu]|sZ>Qu}i+lr. ~a蒫Wz8K]D'g7n_}_X[[,55/V8~J6nnbGa^TMkS=;566X_N|mE]mب}ʾG_:rٮD. \yGծ_&7 [F߿\gn~Sǥ_q?:ξ•q37o_!s=y f;^cgOq%/1~~i<~qQg_霸K9dC7|ڈV}pUv97NOYǣ5Ώ:+qF:PN^SvXt]:c'_>؈.N!p:< z'9d"E6k[?/R>Ǎae[QcG;bЩG!R;Nx|挮Zl`?HFߺgky ?2&2cVf:A%`'U yMWp7KSd񰲃+O_kI1[qS}X8_cȷس]:*檃c=0f7B.~u}…Aܧ>.woMR]t6gc<З<"ޅ.wNqGM ~k^9R_Atb#upsxQk[2s.MG!SU^q-V7c'Ѷ8p+pײ͜n?_sc֗5վc_TN쌕,q/޸cLQ!#?sOtJD޼+H,6e-y&kMcc\%/pͶm|a+pN|SXr`kfl-UP]Xcb#XƠXaj)Va'/:klVȲ_xq8 ;\<C7+y QZP& WG]><E"³[dZX8;ߵM|})rhP|o2`K,2~ W_l6o}$wԋQ͏ZjSQ)6^0VY yخ}#6V: q^coKqU6kM'"gGW:W#[aUGZkD%߽j#k}9 ׾xdx%bodcus÷nڍ-d L֜S/bб˗_c^9Gi|wڜ>Cb[r}eu:[טl/98^o Sbguq;ʯ~i.r0 ݚ 5V8[ENٓfhG]Y`">J\)G+Fz\\aW[o1_/z'9Yso^e&9Yr6JN|PQx_05PXd0I^>~yW >kk>u5̦emǙag~W/{Ɲ Y~dc=8韺]k.d‘\VE]1,Fc]8zliEWz:qYٰG5h'z}i,@z ZZ]dzkqKوQ=|<:.Ǯ.^tԋ]u<v Y.dn{|-*6O{ +mR;i _|ӭX_dRdοuF68ZqG6aW֊GO.0lʫyY}VŮ])]ZeeN} e%o ?]Ydx![O?㭯{47Θ}CqF;|_w؛#xW_{Ɏn-680qf+r/ʫg÷qMv ƙ=ӌM1 ?#cϱc+ׇk y$^1e/[|V>DF;l]|iҭ]|*W{Tmg%Yr]g'NcT -g,+]*N}_q7fI3]x X0,_9gNbn/ͮk޲}{d-H;M0iA&y }:zXpLfbȅJ^ <-|S=K_|t0I)'2~pQEG 8m6r9y揓'xŒ|p`QڰO;5.ϊӋHn\v|}Z>+=y9Է>;N9?}Ípt¡_Kv󩎋G<+ش&لvcRr_6W>ᬲpo,5nxxD_<ηɊӅq)7ud]ٌǮMqz0&<9Yg\7Q |cbu g ^F/V1yT*_>ԯUV ]Q OT^q"9/0)'r2~8dlI?bR_>y6V? uSD ?o:26ր8Jurl)L'oo}:6Dž67<{9tƗᲗ^қ}Q6?:_EϻSƕMr g=:7G?8Moھ?}1?s#u9vXmμ+w>d^h^#?s<_,2dU6-2n|;kG_87?9hl܊ C~Vjg۱ʿ":vna5G|Pꮱ-ˑEpR])7k񇇳)7~bC.okh8Ɯ/ܴkhlYEiaw1sMy1ۜ5sY0k 3M,K37oqmq۝pyQ1׽n q`6Gch3]̵f]<=/8{c֘++S+n>ʁ=XqSߋVL~bY`zvqS!ʽwu68ḃ|z//;6Mg|<)/*ۍ]-d峫]?_;06$X?aȗ1./WAbҚ_b>6v:1_9]P䏓?knCd}\mZ/8>ȳSW"GN*CѡrSkG|ؑ6l7l$V1zC_|kܓ{^vawh\6Zmd]vJ_z<1a& eÏv%uN؅(<|-(.0ʗ,;X|뷶ϗ.^ߒ7dJbΊY?%ɕAVAW/VٮOwG#sqXm &w{c<?>[#{߸ܼ#c}M[5.8.}+]s7y{?h6'Ϟر+&sez%cKl ;w?#7x)5Ç&wkg|(bw3->q '˯l⮱{mdկk;}]s5nw=I?sc?>g:3_vS'|ۮo5~җ9t>jq̵=<_sx&/֔W9#xmg?s98G>fcLQq'jm#37KξXGl&`/768L|#prWN wN.~(_r1|[dƋJpl|9oy[`EVM..9 %} +ܕY|yWr[Pn|oLʅ<] PGGzvzEcnҕxħ'.鋕u!j6/ w> Bc~oOw&Wk|WEbWUw+W;ur-^N".^S: .;ο6Pd+e[WkZ־[hWrLWkk{R_<9W .KKut+nŪ}ַ]U^<+n]ڨO^xsj_~WuxksS)hw\׷6݁ũW55ymX\C}%/x9]k )vŨA~?qjuZ/8 ?Ȳ;ssW8^F91W,t<|'>9ǧn<<%.}q31?8w6bzGO/97ga|!!}]uBׁk#fƝ]%w6ԧl}}K]qڇ>8^lcwlfrs z|猕Ql=}w[^8ܾ.}ɊSW@хi6taqk@0]+^ߝaeS^-})q|q/Gܔ>r7oow{w\G//9an}kn^toKϵw#OzӸ}cß?ys~9ؿs+'na[7x}cltrueu| _qk+ZRr\]ckorCb|k]5tFQr^a'/:?u9Xy>k>k兗îm9ڮ>kv}W{-HQ_ WV>f>b^e橾7 |>0wq]5R?7?vtnf 51}rE؄v\OO"&_;J1g]@ݭbetGytN]?-a/ݐ'z W*}qS>k.66Lc)`+>0)l8ґۍqySʣ5`SǶXƋ[pNX]^qar/^ċS#?d ĉgxpZ7[.=чW;?ro^}zq̿O#?u}oV\M^ϯ&|\Al,օzT>f1V[(n;VV:9 %[◜1&C%7[3+l̥:Od+tp:+G8x$FzT_Ǫ:;q]7:ߝ znMtF_?ހ{|O!_ׇ+nq1Ca3:k]ko{=uF|wό< ?%o;qx['x\F7>_q|# <ㆷx|C?qy' Fk^r n8>?Gn[; [9øK;OF?2C8]:*D1_1ڻ=9^<_Fsgx缻;qļc gy_qt4qo6_?}䩧]J;>:EN6U#9fۃ8ni4>7xt?inӰoScȳ.kD^Nl-m(FgmϨ>ȋwܑ_|V}%onƒL,rk[k'W3:6˹1c< |-psKݱ( d/t^].٫U\W=rĵ{8szRf6٩?ud Cv\Y9 mt 9?,a6v׻#YZ<-VL*-<ҹA|$+f ]' #U~3o=Oӛ tyr-K]R;[ņe+G Qߜ7<$?u\ɲ.ޜӉ#,V!ϦsbTA^i~6KQ"M,c%6sOdvN}o'CsA/kg&[\ǎRKܳk%XkcY5l`['ɱ[_k`׊%|OkފIk_1V{W}WVsgS,qV6bGy*7K-E.Xɣ%ϗ_cU9v9 ]:{TFWaC˹6[?K:SYd#kޫqY㏽J슣.]쵳_†awc 7G4cj]S_5ȟ kyFݧsq{c_w}hޕq\f[V֬w\h`/6.2'>6{^4r{'mknGd {ͻ^';>{>让ǫ{:.5g^QW'5/q}0.5~É'O͛#9g~/vɱe7ǛbSs/恋14d5z[wͭV/5zpג]zb(썡kƙ/kGl:~rA|db~;:␕fACb7{|'[.&9pɑKn,bQP# 'la*l?>?"+^2>y97foL5Mpή];} <p>I>8Lr3»km|aW_E~)O<5&lU!: CVM< *25갋}xv|So|6%׽Ɖzngq͉'ڎ<'ƱN3& o~-8qnQn?G][|x0Nfq~3>bvګ\fߦ!E8W~RpW^8+N]ڮ}cW 3kKw  0/~}zfwNk^6O4\utq<mym^=n;{ø3~/󒗽|*׺xk^=47jR,r.Wv_~jҗ}]~xexծ6կOǥwߋҷΊӇv>ʼn'ciٯ|!O|/n2>3@+nz5Eɇ=*UJ,nn=xG&=H^Oyu:m^}o5U.?z';|eG']}vQx6Mh'z}{EnLH]gcXp`טzd  |$Wc e_?6GoU.<~~7|<+Hb#f#H^0݁66yGd/7>`V6 CYǪ[}!S-.71+,V7V+\êN/&ƍM/] >4FrWP닍8@b<бC;]xDF('DbS<:^Mx:KWk]6QxǶ6g Dk.]qWlʃL`)e_^{ŕJvkLaQP:yy#.;ڇWpZ{}KյfGy@#zG6Ƽ髇]29U`(qruc1; :F|gr8U+fԇre&;#+>ɯ0(d/\ܕn|{ nk1ؔ?s#Tu6:ĖW(Kl}]:7Ь3Cz.=w!]cOC>{7j8.pony̹?xǓ!gqļS{菶M77~>^{ߟww^:{S::0y;1ow9!棼0=3=q\ccOq=rqxcmyȸ]m4Fh \w7ngccS7pb`Ex}A>[s";Vݼ-'t[@OOLmSxمIOGx+- t?Gr6qX \Sk IDATS~i{ߴ=m~]o9v{u7̷T_7~ ?G榶;\_7IMo6_)7VJ+l?Ϥn]g1}߿_1?V^<5?l[m:|-V';al[m28Wjlf ]?@lK3~]bn<~lcoqyMyǠ>wxܯ8dnuqyGMG.m~^W͑q:l#['Q6[Xh!ӮyTQgm҇clr>rb҇Snd_lwk]{oo~իƿ;G?*8X#_}]WNKdxڍScf[dֿ\[1OǗ-JɁbcdo8t0?æ_]p>>-*:6Zk'."Xw,*n핇/S+KWGY._OkaOË'5-CB>lև%ams3ι7Tl\m&@>uh+̾: u9cR<^ֿ2Ӂl+/ky| ~;ad(l#9um_g''"Flo2yrc史^ 9g_xq٫Q6ufsxXscVn+.x+&(,ӭ;klY :JkH}U_5l}Wvuq6-lũ]6Gk=T_1ԍKT8qծO+5aѯ6V<vن&;ϊد>rx5>dx+zlDkf WV{+^d٨-_ [cgEf|7Vr<<_}[k.Ֆ,ZVYs~gW.޵O㏀9ŹSϨy\wn+0n%V/>5G=Fmlzk^1.z[ٮ~㋳~1^qжsOƿͺk׎ϗݓ4Ik?0~znʱ}lsFtG? }ӼZ7wgǵoo>k~soGsS^3ߤY;̘4qg'ȏ|_o.x۠{?=﶐4_F\:1Oǖ|a=VLpwm}\0N'«oVx|㫍z}]ck|)yww>{|SGzםx;m} g ύbzZ~vGqFo͗v0_q;i6a?q]G}7 %:mbeo߫>z8eX# TXٮXd|ZOk~7'bpvrn+KV/[لW_[ :cwOn/^][XǯqU]d7&}}6].9նqI;.Y<Ӈ6ʕ4!r"N'G$u"ٌGMg"nՉ餬8 u 5mqʏ^MG}x|\>&;G?.('beS=ybgu<Ł%~uvicA&fq|ɴ'W$>M? /-jIΦaZ?Z!Ofm6V]66zu[y7tqܲ%kNP6q6w} /cR[qkmÖh7bgNMy/lƔ+vvFهϖ13rg?\Y`_z 6 Lӱ4nvۏ׾2~?7o$}ͳ7d|{o___e]x)gO>=8߹e8q1o/k;=7Ow?c7=` 3~hl9!Jg75ٸ&jq1ȧFn(|u1'[+VV|2DVp>bƠO=\X8Q7yk@6H0l~ۃ4^9_.R[79elmεzg |gΟ8n=Z~^mkߧ_.=757~lo'l~gퟶ9n{/bQ97?dy|V50'+z8h'' :I7Bc!ɣφЁnFRO.Ȫw[nm\ #&|^lxxc};4oqwS.n?6?oWh;bȋru67lqb7fOؓi#v+e# H/_zcU_$:BWd[ ~ .?r.0#8C5͕J46+Á_)'a)|os[3.[:3l#X͗p 0#}>dOvj켩.ۚ\[^lb!W;̞LYxճ[mvum,qkR>M~rd~ y9#óؗzT+W[:'oe8drg{>߸9V?Hher` uܪ+9!:L /8<_~]w}ņ?_qq8[7N8җ+-w͹+7wҽi>{ۆ߳q?Y[>zns37kyЎK C9)wϜ6s;ob||ƛYQ?_Ʃm6?<mx!u7͍=Fi<-m<1o;86L/{r}W%ɯ}vޱ s^m^N>nN˛ {5->a!C]zm:\[^q;aбSPF?×'rR&^ubc#gM87%|Ƹ\'>oyUMte5n?qȉNLd4ϾB?k8:77}΍7㎿8cwۜ}Q\ݘѡOvE0^dž\lZNN6xҼ8HN_{à+}d!Cڨ|[{li'/m:9+kG偓Y:.̗;y#KruW|]9_!sR9eKd[[5ΚCŭ|Dk_ioUI_aԗrbZf͹E_R>2k\bh.WW?vd|x,d;?6ܹw6r1(lloӄF [}}/p 8XlWh7k.6ݼ[ 1-Zǧ\ӅF_]_z>l<6tk![ZV]dn/[[:79Y+o,a-yRw)fq_(<sa~'lm#q| K?q{]p烎oXڰ[}cN&~ ;jͪ.f9#9)(}[!=⩋ӜeFdj|W%sw$xyj'/6,;16Пվyi +8J6rO핧ۋgGWyjR_.+Yx|WVU R+n?7&|wn}wl67ly1mow+}gCOw[g8d +y8|n*^lnY?/'?c.~Cǧ]xۆbv>r}/|DҾ63j/s5/~x}/kJ㵎qȻZӸfC_ۚ_uX^.oӺnM|YzzcGkrdHŷpֱOWWWb+.?̻H=q[j镯~'l~y|wȇC-z1]}1~Wyunq0Η|n>}>`͙BN{QXQaqKV+N׵+f 35W*W|C:˖,aiG}6y8{q2}6>]0c&g T- gM1v/y֦?ܯ~aV}կm]v]\wsWaǷ.%?g_?bO;=FחQ|f&]~>[bacAwA@]ն9/]EeKr;EWIJ 4OrWI_$Gu;يO,y!Ia6\ꣶ'l!oqa qg_YؚG7͟<[! ˡ6 ~kt8{cQdl+z<rOn=9|/9vO>p0#9[W:/?8j> [}_僋[W:16ؖ3l_x/} aauzc'6L2$l\o/Z'Gua+r.<+Nue?0ȇ^qj`wUk|?䜎 sV_}7_+(SAeNp͕:CWL=Ybnͷz|͹:ݘtC?N>n?u#pʾ,tv.FZ/W0_ez5~Ⱦ6*K7$,UgCuڨ8o|S8a}~%cRxqY|#+UNpզ&{Q6Q_`Fzn1&lѶW7тht+|LM__/x1,,\|}Qwe޸{ 'lmY{m{|v']|9E0_+|cWgɅ/g#G>ͭl[}ap_;o4V]U>򀉲ޘmlj_>*{Gguߔhv6?9e~z|GɔrgW[\}YB"|{k?W6Jydly8k}S'~xEH,qqx;\A-~λ#` sң\ynmYg)%0}w9N?5K=|O\ذ IDATC;Oj|c>/~tWU&gaxWڗdW>Â{ֵ^Qų'l@˝]9ȏ@:~+i7n͡a'w6J6k{7L #~:Ka`w52֧y[r([F{t)M幮?#y^9in}}/{=sv8曯9Μwgtlj|^?{8웻m>m3/z8t>Jr_}bW:jnwg#;y_?7o><}s=xwyb!tn;.e忌qLηadS_:I植"d{Q8O`{}n&t6y^ps֑Wub׍[̹i>bRngKxTk__ɲrx|&!/$.߰èo}VbfWبeODfOgxA`.Oëgg;ɱѸү7ߍ.م+Ũ|uӭ_u{a:0n4]<w}DzhW_d]b(ta7hZ̚D<ŹR6-6Ӝmd$+6'\.Xmx84 _28Y1ىܥ E1&V'c8|Pzl<*鯲;pqǷL\\6`L_ 13Or͆~6ň6p[cHקr`FĒBQSNaί~b&0(;0q#v_=8;q1|ʣi-A^=?}봱owN@r`N~N]iԣƤ'|jɧȊ+tF} qJ^={0ώ]a_^lZoFRu V0꧹ >a _kB 2BGXŪJՖR-ZY%{A#cG~7?v;95θ9kd)3Ƀ^l#?ry1MB0 fs.W|Tgz~qԘ𡰛\_ k=[~c#ڊld { \.WxxÖ._aFjzY֍3|˱eo|gX}o|ه2 ,y\xlX{s_Yv8_cZ~l7/;,_i:z{./tˮ_o].wě'n<'Pߊg2xߤƺ~s΁(h~/F:6Ҏ8ōጅ)s׷%_9gmvݜGNB-ɹ<F<_d = {0]c6<_^_> RK&A0Yh^6l08M 8ć `A(N0va($:;S -2w/\է|;rgGDN&Oq_,/@>cN<A@7K/~xyl|a:ɒ78qϧ5.x_5OΗ`ͣNNAl3Q~Zg<{km5s>aY[AsYˆO׆M&7Gvq =9XtS`Oe,gEa}4NŒ'۹_W㈭vX~Blplp nrI-_c',^weܵlL6POwuEaaPC y(W娟ZCk2#T­F濵kAQ;녏mylw!YwVS\Zvpgc~xɳSڸ|Qq}O>BV]ʇɴ_?/ﳎ2OtƶX#;/g>.?xe;*#;} /=E.}ozk8Nx#Qu:_<4xO0l=Ƣ:;zُ1D^YB/S=_ |w6կq=r3:pqNp}86g9LJgeqlurwOkvy0\8l%棼gbf`U)l/o㍇/yc8Ɗ|:6(jT>;-Fdͥao."NZ-t\M"ϗʼ [Di1ş?W\w 2&[:u.Vd8c_1󟞿 (m79@W}ʞmf&9•ћr(ra_G`;ɗ{8~cȊJଝӆ-]>\+~SOcM7܍?Y1# )&Yoy_k2,?enOhl)|'CAe֧#)x;vƐi j/x!3Վ:a)v|Ɛ<H_Z#rW)=JOk+3>gomal.s:66=>6akG]ʳ6?q|c\kBz#`6^k9&w,9t~6Zе>Zp|Hc;`ܕ6C_ i />dⵯ/[7_5]W,7Gm?nsfq<{;~}S?/+7_?eϑ>̃qAG#W?yGG:>5>W| IƦq2sq9:GH[Ý>vgeuy9?rha+Q}-μTZin+blyڔ'c.G.n燍`7gﴼng?3^>\rC,/~}9a}ve+\u+Ӝ_{;y|˛c7ӝ#?c{9P;*om<_d\6]/s:`f}6䈜/G]䗌~>~} ,7\wl$Ocl3نMo\{|f&ˋu/]}6n0 lRs+\g]S|EԆE_gss7ߔѡ9*~AW{ƌ">f?b'S/\eS}6ckAƊǟIl蛼h!oqn=bh ܆ ׂͅ3ɤdذ:}lƻQmO{)_-e˿; ^El+.ʟ?yO_Ga=jlCtA| FF]"u4։/ yƟ?Ӆ/.yw}'+xm\bJr5 -mgz9s9f 7oK yUZǜK2uP'/Nճ?Kxt16)N&ߵ٫W8l|)}4&0Ǫ?ϰdvU0~>a G<ЅÍE*̦>?gUמi-^ ^;͗5m?*z(1L_᷒NOƏ⃊~& c=_x|njf{%xO\}GSSrq6eЯs|!¼~G'x=rz>˵LJ-vmnjQX7wqw/ D_)MoY{ul-Xҗ-׿խ׏v<8_luLx,}z")㇟׬6;c娑w} $ > '{84~GHȫyr}Gog;{t-󷖃Q{˿=!׏9zǻ bt\y!Qszuys:7s "B-Ƽ6)'6 mb~+ΕIǮ0V[/N>Y;;渑!Y.5>7w=+_gZF:zxo}r;e<,=7Nv_.[-%/@x<2.dӘo>lj{sc9x1gw{~4VᲿ~m}g(u[5T>{,W+r>Q$I\lf!6]Ǿ1/\<7~Sؠpڳݔ>lb~9N4S}aױx6p'tŠo˧6;xc~\)Wo9ٸ4˽u^>?o3KĠ&S W7MIVZPQ8"#oŒ [N2$oB|g;g<ņ7SfG?Ia`rGArRw!^qarE|7wrHf>-W 6꠆8368;gfmbW>Ο:8V43etL)~E?ˌ.p,VX)ؘ sJp%?.`gCŘq8rߙ`ךb˯2-_(\蔙j/o3|Ql'G|#|Tx^=y\Σ򗮱]_4fK8կ>R{+wr`?xs>9,̥v>vj˹gzMXz7q5Fǥ5ko0@~6?.n;-8zaoq g_0$ ;;ն/}\z <ˁq fo3\?b06+g>ܻ~[oq Bk_ٖOwC>hrÑǺ7as٣rב}/}Q'<>xr{ky!/Yq[-s##nӎa!}wy ^el /nCv}NWz7vƛo| '=FFI1MxKr6kQ,}+,x+F6W{?{Ӟwj ',7=7˛] 7!F~W#?9>#kA@hGu>a[ci{NNhmୱ]M9y!xWώ/8$N~7,_֍=]0ƴuMӎR=#o''6J_s9aO|+:dx'h5\yp?oK'[qi70ĜnaaXh\ϱ p[ɴ]INggJ dc@d/~ΘYVo yfM/\Ϻq]:g, >ϖL7o~z|WO_/VpUI_[|ųFOgkc0p<:yOnN@qV IDATZ[q5Ayt=I6ŞX뿾m|RWqǑs9Ǐb+Çw^jxE.w/zѺw3|81;O9|8rXsrq>LXݲϼ>< Xl-㱺?/e|'gR]8D9xڞ|Go$`Ϳe׳}{yН}}ۗk#sыx6w6{7#ЗXm|\¨Cs4GSklT7 &\yl^fSˡ#}bVmXnLu*|1}󟿜lg`_>}x_z!O|r{߳n<=3w~ly~$z76A^}X_/w;,Ї|<^s.L=>5k6(,?ɋn7iWn5[~xOX7Ofaǟ]SmǑtGOx_j>ne Rc/|+JOWo<6'h}ylJmg+~/l,Rx ;F{m2:~~;w 7yLM&Ķ;Isv C'SNAxG2+0lńG>qq+9WxջcofҗڸKo_TS/KS̼>AUOe1>_Oݝɷ1˞ +';vX7w6n O.|WQ>#+QGOƝ?q N}T8=.O]JV7&9oo<%'N+_h787ɍ'_ͅ:}gv; l˙6够|3ʧvlPy6'~m?<6;r vg/9g>f9b%'CL#NeSo!6`/LqkkyOǙzeSS/zZX37}2}Ȗk֚Qq;C/Ypk-wǗ>ܻ9ro|u0i巼k*?O;X.x.osG;&Ł1ͯ|z{ld]׮_[#/g/xG>y9KcwcB_N5>F_w{~0ng?q㎩ǻvc׸&>nˋ䵯W_[>6ޗvkˡ/iGdr~o|r͛02qe#>t鱩l.wx,ѵ2׺rwl?Y2r^ޫ_50GxD|ͫgMNky~w5?MW_Kb.?2&˞.qp?ʿi\99/ˮc|";-F߆E`:((q: e~LvB$iw7=y W|++|qؘo>cddCbacZe6=.|Ub}w56dHbCSφ~+.6ԛȻm믱g_Nbmsb[xv?*̏GPOr['_ˇ]}e ߘˏNr7ぎHɵ1?8RG:c2lr?䏍b=v4ǀ=|zWq6 r~G{6p]yg3=V$Fij7Vi\ZGA/a+?6Grbkc1ksco'fn-x##76l9FSYewy=N=nwg>Q-'>eϽ56CGz-_4jss|=^75q/>8rvNtػ޵~q1959rw<96 Ց:'h˱[1qS\\滜:/OXmA>T{N?ʍl/]X:Lc ώw]|XoAC#a1o+Hq9㍩|q87-쫹#|ݬ^jv>"&G7~e_|ig]T|pMOr*d|97?a~QYl+&IfzfY!:Xps܆;H!Sp 2pQh3w ];'?||#cvxw \[|uR,}֮uxcxTofg@fy3y>ho)'~˷KF&1n\+Kdqc3r.썿P,'u3&řs ?cˣ>lo=g+>9V/[\fY_4X<f\"+ ޝC^;iYǣ׳/}cи7?yj>pqѮaLݱOr\7S~yF;_s;۶c՟6y㚼bxvqK_㚋;ȇw.?Ꟗύe׳pc-/X_0>$x+\a[޼f| >tzxOE6b=oͯ}}l#cZx9d[39M̪8G|+2xku.h|jW*}xY/uT׎՟o d|y|{֯m?o{Հ<glx#89՟^Nؘb'?3B|dO [.3_[sנR[_wM9I&q /z}4l]N,6\\qcBWV6=V!f;:Xx f onA;xԍ)C:9ê#y)WƏtq S>m߭ X֗5C8):u?Əvѣ8_).W:{c :uc=x-嫾Itb![? dz9[zqָ%D)z]˕8.:}w8]zl]`.WQhtQ96g86>_ԇ׾FהŨ߁ƽ9sܚ:9ng|vNgXY7sa|'W絙/!}p=W>;Wof~a|Ћ96iS__RGӼX~k׻<Z>;֏$'χaS#l I/&U+/Z[J`?bnb{x 0퉳Ý>i;H^:oƢ>2L ;Sq铯c1,:65ƥʧ6N8\ĀM>ǥC. =^\uz$S}Un>sf}qd8}m1Xke[>$[CLyjsQqh^7c1Å\^1,*nws='_71 f.b8f]p7(a铗 84_6]w\^??6<}`g}N=;1<[(NX;k+;|hcytG<|y\O\Xr,Gp۳\>kG~nն~mw|awoƣ=s)o:`鏯1xȟ.=ߗC]V֋ƆƆ9q\as+_e9r%_dܵ3uո468Ge9 xw!zP7wW^WW\+kzsgsO:6w{?=my߸\a|Dj7yNGΎq5`2~+჌.tSCv0˞ܜsZ|f'6pqńC0] 5#uFӎczy8'F 7ѡr*g|4FaU¯Ǐ0l`˹X]˶&Gm[|6^];b?H]x1򯎴ȏveE†w d8?m¨A}%|xGᇍ?'>;nシ|\ 4.=. ,W;)K~gn?%/yYeT6Y"Ea[tdo:dމG|OZ|Ӟm`+0:j'嗀=w|ɗؕN츂nMWލ9[5ɷz1o]\W}oxCli|mڴ66qg ^vXe_1ȝie,e Oqo%_d-OD׎f[v|3~|T; \|3w9F>[[E=?䳞^F<ⰛWnlyMdţU#~9|DO´gfs k f]zyn2S9βɱ׏Tcb7VbЕw<\|SoƉl4ؕ3#0d|]:#Z~_wl世89G}&^җ1я~rvR"3s^WE^f|"sq?omio6rX75w;ecȱayt:o]x,׿wm\:Y8!˙4wu}]N_}Ǹ|cLle|cqK<{q}[ wcnǏcǵ#_*{|3{G ˾6N5nj16wYycAAq{GwrqWk^n? \R^w|iscܲE.|}l5qa}6l&xm=_Puysy+qNU>]u-cMϮCM~q󚁫UOͦ|6:c;0,命" xxE{ڛ7<ucϣ;;[ IDAToy+ˎSq׎>fyxo}{?k}w5Owfzwq)9|7Yr 70dʌ5jM%\~'p$S6f#ym|;ޅ5Sb{Wy~p9Bc޻6/:Q9 n|hݞ}?vθ']\~r0a:"co\$\stE7f s_}ӵAmlewe%MzBwFU<Ņqr#6Բ/bׂ#v7ޮ$'<ݡ&N!ozrN<9`ǿ >mwG~%su@h+@O!%G=N.vq3_*/o`,Ns#?1F&NVdɘ_~?6"Oe5os\|W>x8 VagQĚXو?JT>oTkc !ܡod∫cWk<#|jW!dJ@Li!\40scGqW_:sE+Y;3+F;#y!/6_֥~IdO6s)P9.._+x.]$7Dءl奄QTnN/n5Ia҅-&,88-9 ]7_kaU>VGFTӋSΏ~/r C>c&I󷩯Iׁ07i>^xf7Y&?=®;\C4oׁow]*WY^;6;!<6 \zvL32:~sͪ==_enw_ws寰m=x };]_(m{lp>o9g,W'lǮ76W닸VqF/wc(QN=gQrrcs#ޮg;r1׽#Gܹoy/O'>iwX>2qyW[|#@xlcg?[;G4˝Ns,;vsFi:cVѱe鲭Nё4胘(=:NcmnU}G|Cmqc}xx=g+Xxu/xrL4Y\5w:~ѡWO5ub?+;⒣ttry9p3-7=7eeƗm5Fu2>do.䁌?X76/;~mϽs%Ƣ'|Nx]V'1iq?{b;|P}ou4~և᫱w/V`˃_y:8(&O(_=Ml9z~Q~j7V8hY6[IYؘrwΣxa8GC9dt[΍0H_ӡ g/7W \ӝnkW5yrq+?s[ry9O_gݛɀ] |8󃼗 6mn>e/ȤmMV9cژEޢ0& b8w ϧG*|#+Ow۱~/|6 "ŴLr8X؈Q_$?>vtqQȆOr>m>j##Tga9hϮQ7_,惍oy>Cb4> PU˼_FB+P9w;n5#Gx7Fre+d.;26^t=ynj1c'㉷1izO930C6|`qW+F;LcN&7O l},g8zk ,lW}T>O6:=  [~i >S㖌?gpb+▯Ng-Sf+kzqQε[tM'&'68'OU]cУ88dWx̸rR#Φu%f9͇:''i` 'VmydwŅW:o‹!')> ~_n] {ɥ.F9ƣl]!o=Vs]yH@/3ۍG\faDB^=rhyr@w{~QΜΉK.{ i΍b}Xխ/zTsƣk!]J;2ư&79zyٿ=e=Rlsq'Wx5\w^Z6?U3kͻO-OykzC?wzqӸ9yTFbl<(_gp]v9{3rq2;3ƻ1wL+쵣ysڑC/ܲ(F@8<7ur;[~fb#1$F/bߜ;偣M8-\VyU|ױXo~KǦcCt룹k䥎Ē{ο~<ʳ{g| g{1i4ܐBOĊg;]cOYJ9d_q/3?{98[:|q>xӞw]5lq97~s'`q ;놞sΙz}96 }xV.N$>?8}ds쵞Ӿ.G3q\1 uBT웧곞2Mux$7Tiur8Enxx-tۜ;F'sO\~ 鋵%;`#Ndx"~.(NѸ/rE?9B21ڃT~~gzO;<N~6W|q/ef!3qF ƒ>xPx ?~Χ9iO^l~gyx6gv.dMM7ʇ [SbE| jM<{m8grm,6},WϚ0<6婟1|^b]&9\}+Knl|#xrvJg1cOϮ%[ew֛h֓'==R͵|ϙϘ'1:V~[+|t9n:h?լ O6X/G}wgsH^>ap֫7,<*,KgU޳:wO.׸#Y豏}}6^B/40ߤoyl=O?qO?gGO'Ts?T/_?'LC ɦ<ɲ-Φ-L2oي(bq{y㋟paC9|8|ts1<D:#%tq]ߛC[|~gߡ>wy^3@t^9g:j4n9^y=YL?QyheO%<|ͼ>}]xCboysdk1j7/Е>paKśq5m OQWf=򋤟-7fM6W=w?7yzQYUcgg]>!-_8avG3d6,@$zmœ}w#ă;]>6\#crWLõ[rYEO=\{d{;.gc=7Ib̋qg߼wқif,Ņṟs[~gF=\Q=0&xi~@Xx?t ld89|-nUnM?KT7rBg4ٓUȍ]8y$/tId0[J쏮g36<=,߱g=s8 __({;4w>.?n5> Xfk~8Oz+.>igdzGW| qǟ\7M}1/66H{٧2C:iXq"~**_댌}9+r滵[[S '݌#Ofs>\Āz>ӛ~+@7|Ѹqc7}I>/N8K"3zbiVawJEl;M49/'…QoR";h=03l'dz>6T0OɟСuرߺ_6y7>0V;?srx'ض؊Щ#yS.:RGlFAOeqAgj2rGg׸i9lonB`fEsl:X!vr^|f=|MN+972|z8l䛹d'θE~ʍ1M-|7[ zXHi<0aƺ'3俱/;t;qOz ;9ዲ26QxV.]˨77֪sv8+w?or{,/}>zq:j}y<2[dlyc'ctqWޣV{w]/o7ÁK{׸j7P;vG6No yr_Ʒy3?]cV;_d><y guqlW FLWڼo{4#ο"ıVͶ/ ;_t3?٥ϟ6_g}68}Y^f[{}oLQgW7s(IN^㟾Tʶa^1dSVz} >gphtke(V.p٩tb9WƏVq?9'ߤr`_}3<˺a' M}zr-0%#s.vL"+Y9};>aEbyqqrv9fxeǟ5ҩӗ{X~am/S迏qxmڌ8um;\ conŻxV$sZ]ߨ7dݺ:vx/_ G[Ɏo9+_[;h3]sWLt~O|CV#}>)m{^5]|lܡxڣƵ{}${N3 w=v(Y!ؘdf3S??L#h{'|>ik&wl~Z?lp2WHU IDATnp%K]띺~[ι!'xqZw&u}O+yЗdn|tOumx9x;^#o'ʙ"r]ϼ>%oӍ;/<7w{W;_ʟskK>ƣipO|SΚՆhI0 (V|a|Υc@9G>w }Dggu|̔M>c~_>)#/ls%?I]m24xDMIWlriö0 1 _$ْ)Ң˭8UlOm ׆YcUˏoZf)F3շ7a+6_r'S8ȭvl^1=S>|salgy8e{yQjykI;2tx89u!o// WP:lsUyʏ-GWP8wE^I׊ε6͟8\uDkMkF=Αy=nvg'7֫/>w>ܺu;ˏ^|˿Ö{=oo=c|K=09wkVN70:_J~xٛG_.rӎ딳̀w ˹ǝ>ޛu7ǔ?9> _᳖{Ñ/sW9梗D9z \b(o~'<61W:әz&p>1_^K?8~w'S/%*yjci&I)"CDhkxkXp+zfΫeߚ/V=l'@}WNu8Y[LLqW7LXd8M =G?L1i˙_-|dxg^ׇUL^n jGb"9[G>E.:`AGÉ~$Z$ jm~1H-b gl.Ӧu Q}x W:55|`4>'j0>|sIWKrhN7V~_1|g=җXTd07@p|P-gD_KW O38q-:^-Ʀrk~\q>l7r9c~|̑vKzkM[SVmT7}>m|OqaOIGe/fEt_ckCϯ?\}d,\oanl7&|'}t勷ai|dcQ!&bSO5[_}uEKߘwc/%>~S.[Gkm4|Q9>}8x9c+Nm3~L<ۤjxȰW[y|VnX/~>UUk0q-pQϡ>mLyhgy5DC?Gddk}0aw)W(0_Ls| ~ݾo{l}=^f|y{v=m7b#F{뉻|ܾw6А|}.퍯yz慶w+9>;I}=럗o|k֓5/~suOFG.{@ַ߶ }vd~̛9Io^[cZ(]8nw:98ܟ/qN_6lGm,":ď\AۅN\~wҕ}ek^lOmµ?ӯw!XF~^?p1>>赯xЖK<0xO>i9˘z?gufo,f/>cŠC9!jĩ?>*.Ix816c<}>C?Xk[6΋giqu0rnxn{x(Sgn4V>\S\/68mpVkՅ7fodNrI >fʰ_L8!>LX'tWW:Xǣw7֙7ozd.};ezk؍\bGZs<վS-x59?ʧ1/͑G2Кx8a! %b5~lŕ00|٬jbC<[l&Gf [ŋ5vaS?x7x-{Xřt3g2O?Ӿ.6$j-.W(r%w>t9ggswTԴ͘)OCi1~2ךZobj_gGӏ,7lr9:ggF}w}w^ ǯyn98F?iօq:Oh]Hwx/{] ?򅧭'Z~vuZ_=n=E_qW]nIO]zh/~v]ZcpvgpܞGn7^_$3AT3'y;xdZ#igֈ\gF|ㇾ􍇬.trig|q}Cx9X2WmF ;:4kNY_u=lhmőxX8ڬ/ddj1;ob`EɇuƜv屗7?x:.z/v{~~?ۧ }_|կ}{_N{}vWtl[SȟMaX?~pYr+sgWm/侟~>4뙌sG!'~}D_pˆkG/Y?|tM~Jϧ|ӱl#ެg%ɧ1?*.͋grl({6~p o?Zyb嗻bUͧѡ?zcu0;_r5 D-E\_t:c5lͅ>\=O+X+,Ʒ>k.]8|Ssu!.X1!^Lxz㱆q(L\3Hpz1'يÈ1G\=0Q3vԜ7I sOϟL77R>6qaEU[_|té 7pUӬذBQ5Ҝv>0cU'^jC1..{E&.i#7*<=nMBg]Zg#F:68ZG$}ăΡIxyܴ͘)Oì6cqbǛ8968&+'\ijP:?:>u}cYc<]L{67A;|mmr ^h{v?}{i%w/{4G=Aw<7~c멾n}oO^?ioץ.{uqIk^ʅsºܸ羀/]޻./NƩ?^ܿ.uWo]=]1E_M߼{_\o-n=ʷZ&z#Cg_Q~xjЧe}5Y:a뗗^rA&6ul(9rś/[W~#2WOG?n= Ӟퟮp^][a~맺Ov{|ug#xUGR7;̽N>oLjl)_}&q닏WϬ#p\!~ų]aW[k1AxmW5:r tN%}p5r9m|aqHf׬wqsS ␜bEvz yȺ[.| l}x͗/~VM=GNj?(m#ul68dSلZolېx?ӇQfpWoY0.4~ɝ(ЧӘ/^>ln5& lķчǮ&Stv);U}j }QݸX3.<0©8;bƑg_Xq""\d c>>ǒ~/ouVɧZ|qOL:~kOƥ!>\j{< ? ,GxWlǔ< ~>a_~};zsǿ8ņmt|5FXՙ\>YSK_c?X>s\!Lv U&y/>b:F馽\Iglo:% |n{Y:q˞7NbמBdYKbĎ0^d{3.\nFb5=5ÑKsp l_gO6<;e=5?-tyW[΍o=o= 6wu_/oٞl_u^m7mMlzE׬'{z7fy`Gs!WX|++Ƶ9'm~Ͼͷw7>GnOϜYG=^{ xx'ogL_mՀ#!C:a$g\lji;~H[K8+|Ni_ی:[iOC GZ#.J.nA7g'0ڣőamK_ vsŮ_R=;<sjk.“X;Gy`|V#gUˬ\7>M|eÜs\W>4?jf7r6X`3idtmpmpa59mdmL9f+:ņ炇5_ yt|`w`u57}T]s^ՙƏ]5V vvaUZԖ/<͹i\,QWK`ꊅUlž{\>`ǁxTqwk;*9`Kg7xrqbY۴7G{zfyf\tWC9*wlO}y?;D=jh1ՋEr4Yw8H?߬0|'<|*OMݬ3}67p:-*O6 p{;r;j9>|'38_G8y詼;Їkמ%ku.]{{{f OCvg{>w>q];%/sY.G;K~һPwMt׭{e]_v]лh=ozdzɚwu=?0 }2l/zӷ+_3g>Q۵K|?94z>WܞmYO>.?rĜ$l榹{?qZ&7{5`ڛ=2猭rd9xzq}nwzV\֩㱽6aQ){_pߋvX0/'}߆Yu$]l=c'|M9 #)rIQ~,PoϢio#ӵQl^fڷlN"77eN->ĐQo>ی|aidM-HND'7r'DW|,>ƫFyWsN7pa tʫ Vxb‰#5FՏOKqaf!kƤeqd4}Z#KT!g'tGCzXQ_HzXD0P>xFf#:!,}/?ɠS˷`j)O~E1aZ.&:/O֕o54xCtPc/5 &XL 2=,\}6f,Hdb-S}b:įp:Kl#}ؚQbõ?86D/LkQrk1Zpps&grm|Muvt+]i5´yYgLk}>΁ՎێpŲ#s$oɷ}_zՅعo}׏럶ujkN_лn]Mo}}ԥYO6׽Our}j [aNgoo^O¼=?u>w;ܞv'=qʺx ;qE.=!N[O}7XOm]_wc7 ֞ap&f:єWLˇ-8a<;/v۝Kx؎挍, IDATn眲O#[OɎ)b5Vpaw9O ghplpM=5|&qܟ2Wm߾'O~S}҃~mݩosыo{?l__ѯjoWMENМ񡏚 TkPo~>rfKq[839]b&UՂz?k͏4}vuu|7vsNt֜_Ǡfp}v6w0 <9tƅ5}5_?>j.p}?g=%>W]' L}Amև\:NldMozvK\,sЇ?{v ܷl h, |XGz7Ѧ){W~ [inj6V9ÒX6!`Vyqc fk,Za:̭z8i]է-`OR8qU  ցo2?IwR⣮Qեa^Ln-Vl3gAɍOϦ7GkP_n<"ʆў@5ӳkeEs9~F4y}kirm~s5C`9v#~Qqi0}vT<}5R8tsdSp巶'[/ᛷX #WMz:~͏:ɑ8x87L2jX1;}C<b:år4o+gur۱B},YGr5'Ӆɝ}y8YLh귦ꋕZ> /DV_|ǟq󞿾5psI|1I}}cZ<5ws>)gGcZOvf'ǁ}as_ggΏmX6~g,lC>?~ֹg5^.]}]|KI'mwov^gm_p{8_5ҕׯo]klX ?F7ڿwϾڗlUͻַ{ο~}N5=O }~n7;o>źxx|ׯzXxSl/^{ɺ_˽G81ޞWk|acGa%kwg+N4keb~Xn— ٛ3s<o-ܫM 8c l0nX/)V5tz%f-_ǣU3ꓻA8[=:iƫ֩ ~S ota>Q=|o)WXU-yyޯ/?}}ߺ} җ^y>m=}o\k^+~Ô3R9n͚cieǛr9G4zj\|M[|7x>xr,ukCSgtϸy^.gnc# gGZ<-̎`]]5l598vS]*W.iewo]{\Op9^z _U߻ 3 =V]#A5^G?To 7Lw~w>|?߯oo~'7m߶?7}7w&6/jSmv\M1x>bõşf՟N$W{w:R>vXAc+g1_;SXÞ-Vx5UGA|O?{(|ʛ,Zkv8Tdb7N?.^>ʷ㉞l3^\so~ZGbfO\&&~055t短N`Ͷ^“_,<:{_>b)<| >I{5Ð+l![5//9> ;n:fNu>D֪}bVة?8լ)4qXñG)z'._q|k0[щk+<;LLoU_]g7|'M)OsgKSUO<կ~ c?EW'-jHwgk߱~/@9Zˣy 3`s߱@&iE/aOX䫯NDV2y_~i|ڮskK?x}܉ּ)wowuY׹M|~ ſK] ۛ^2ۓ~{kCB[+!a|ms[o}l_<`u_?]zosB^19f+:vMv !&ÿȓ)٪gP,_vѡ0Ǔwc>Q9ߘڧ|9?<*#GΗlb{Oxb3aCZ#q|Iӟ7?Ŏ='19O\uQ-n0K/mo>/3/vϿ+\m;3?ī\e{vpo >-yMkO^U^'FNq\1AbK]z˽}w/]i,ٷ\ºzߪX-?aO=a>{g{vV=yĉF?77} s{\Gnx#v + ?ٟw _۝|}c:^?ۥO>@6E"{sG>&6Hk^bcC9q Oɦ!È Fe_]b!8{צ~j]3&&lql.aַu.+pG`rjoAl/&|lIq֏``K7cc~YC|߸˯չ׷95ɼʯ_vsOxw}z3t}c緻.m׻//r sGGN8aw}c}Z=xg?[l6xȽ?r.NCc1ί䖓_lr#օ> [~ٗmOYOƼ=r{ḘzǾ۷3ֽ߰}/x4iWs/w?/y7s\+^i{[v:|+'oxT_r7ד}wگ_7_ η.44w1^sPOf\2bg+WrL}5jUoz#xyDlrf(Bwo^W^p+xo)W8y{z/9y ᫮oj=r.mg~^|/|*ts.b٧-*@g~g|}zOFChLrjO;{^L8sP\}df>Gj7&4˷}ݼEXd4gaM@j_~}>u[O?it]>9W{KN?븵oZW~f]Xo׷u8}. !ĩw2rOv}xZWP# }ǣ[[g7-򄲟ۛx imDZM_p6ͼ6[P>yaF10Q>{gdWmD ŪZC,y߱~AP?_k :Ʊ'Z/aj=;{Q&GyU=˧yWK$y>̣u@|Cي'8Tr8a(=1ekZQv8lkaPlثyWgceWg!'r{ xo󆗏=Un?ٳΧZZ9 1'VOXr5DQ{X_ZƦ?n|=h_sr1^<ď^|S‡C7>?:qYݪz<#H;6?9s!lеzV?_Vx1Qy\'ߙo,WNL_a~~ɍ/o>ZB-ӳG@"7uϽZ=*Wݞm^~?9盟?sSwo~{uخe_ޓ<ԧ|{s<թn~lA7Vs֢ F)>,}ͼቝr[Ml64ǘz5n}wñYSW[z-f4Z[o1l3~6uv g_vb_{y`|߷p^ԧRgsK*}sowuA%g!__ݿ&~Z_O]slχ+EqQ;n~sb~> `DOA/W\'1xu#Zh后Xm$ 5ؚl68F-bdg>1E'ظ-tQUQs"vRyf36~MN~ՎktƄ5N&~}x٧g=qZiO6cΘgǛ# ;_>gɓ5ëOU\qW1;㋚]-|ӧO_?GW~|'{9<ǯģx1,V~58N}pȿ9Fmb'57qɇq1 ǿV$6bG??3;`dx|5yW<O.yK/,'_u9{+֯7\}=񍓣R~@|ڷpQ=={ݏ{~}ֹ[7WO?Sv_߻_wyOyv?Qu׹ 5Ͼquw /nLXY~xiEks'o'_E~n~''ݶ_Gozɯ9?\Lxxzܼ~0.~Plb%]X |G>'<6;kcӏĉUwy˃ײOO1p-l=X/akOПd}{]o]_h{OZu .^g}VYSx>Y5~ϏvsB?Py')E.r}wŶ@6'`m0d4{qBaM_XR _6^ 8Yg6Ƈ]>?9`rW‹ IsOf4W?eݟTr'0qGt_9f o^_ewj#~qƓR1ת+.&c)z`a7/Zr6._<t@yK~'>bWkkjROOG=KFjk>P-SۇC! >p?ݰ^̖YZxz5ǝ㌌ۚ82cW_6}]W1Ԑv擽Ok|bCH-qc %'אָ7DƮ82pP]_<}>,2jUXx:fÃeOgAyĄcmgOMZy`o8^㡛$1>9v3$uxs#WVH.G i[+k}۫cWʁC8o_Nv>ȷiq|:^.tnY WX?'>aMn/ö[ Mɯn~η׸p߻0ϳ Qg-Ώ_kou7;׶O[D=goqح9148[\}ǣ0Zs޼i-0<>Zrˍr طa:ܰiUsl |IY3q֪9bqy\t5s9~oӉ7 YKl|تu68<-=9 \>Hp9}6[3cԊꐿXXebf?ᤓk׭nկN]\օkۓ7n :N^']{p^c=ۍ?i.]~]�<'Px|7$z85XQc_<˗=[:pvc~j!u<5~z"f-Vbd g=n'xf7Zj_z>HUg7zS:溆.vLx7vu 9~Z T IDATRE}4ꚋ&os'),87Íۆ 3N> ]mlZNjml>C *f~8I3ot _;N/_`_L'?j'u[`Cq2;ltZ??x#ezX|m57.\TP1> ˩6}\C;yw6p(Q+N]~dlt5po^r5ox9`ںź׾g=n!7/YO}v[zzdߵ }>T} [=?>}=2G[uY '=qz*c} onߠݟͱ}1!9ˇv:9;31S֒/O{ ,q)ƾ?H|K__ =p5T莑Y' Ys,:W+W$1pu N\9gsˍQ_㐚+ #}x/_e/c^~z~ Go7խօoO?~\;7[޺MKǮkuЅj*C}~d:ԞO.6.5cnڴl跇gp!xxOrqzէ_}SO"#A>rًMW3'ķo|`|]|KvkHԓ}{VV }" rl],O7C{&tm츃̆AszV^j+tp|˫6>t:񃣮>Dx\->v8&@ͯ1T3z9'^ rtGΖ<|U1iK_~3<`h %38[xz`L{9ٓ[jЏVxS9ax1Qߘ5NqLN|m9kЬ:fN^8i˯ftx0wi|o|0pZŠӇ.&?ܗ u)_|O-=W3Q1Pos{V<fm'^54$3h|rz!l}gW9;ŧܞcc^k:i/7^1h芷P炸s@]7/3خٟny/姻jc>.yK9g'#nEmv>wWܞo}κwp;Y=a< '՟F~xO.v\5zkV ,O>zkɎ,)v^?n\/M!F9g/N|~uM1~9ĘOI&eÛ=Vlv6˜OO]?u}.?y1d\Y;pz~?#۝σ<Ɓ[oTdlj3[}q;ޱ/b׏يW;j)^>5nyħOYO\|p:˜V (9RC|G];'4V}n⒫'k WYEg eq\#^Ϲw X:(ZLΦ5 >&"4Px'k'b+PȑUk6ywclw'W_è~s^#{KGfSK^N\Ms&5{gT=2Lv1x.~jD5ѓa| ܋?kIƧOcP|9'&ӢY{9? F|ku'1y^$g}{'N5Vqj 58;$+{՗#yXM~cWOЏ՟f21纓QdxaJǯy*7!1_`| C([xQ|:<%7?|QSob<2^ 륵a3#U+|){xOasN|8aq#gk]HRy>0 9c]|i͜|\C|s^>&fn5o <^ϯ= s:6"8>t<ثn94狎 Mα('Mγ0nݳϼu3믧&i jroߨZq'mW_?{Ɵ=zvv݇v>^'^i=w=S.ۥ.s~Ӟx[cEfwᘍ>_$c91qjE_lp̼ sȯkmNvpMO^n]َxn:>GHW*ŵ4s@-hZ (~~pÊhɑAY8pqa^^[m>lvX5'.'j\.Ԍkb.~ȇ._sdp>A*|X|ȍEg~Szl5ZӕZ骵_p8={%*Z?1||fÓ4w+Xӏ;*x{Jcқ[ C~c/?YՒM4` H/&Lvt*&/0;*PW oUgr~(%SG:]qe'=nW~d-=N[^f'O SKg]9Q}'|fmONW]@L}h ۓ~O41M8mz/n՞/;cQ:vȷCy&]8'1;}`u'>Jϵ"77YOxC=a}wݛ$>7~}=r{c+=e4[1V5EdԜ;>Պ7J_^yFaMa-Q8N&_ +̧aǮ!5Cl=Xvr97ՋUc^ ń_Qs@fwL{u5W'S+]u'jmU=y9ت6bQKtsv &;Rօ;'>nn8rdzs}%}AEѥ6_q'qgmL_øbCr^`*1Oe8`c83VGG'ւGѲ~Y/|Q9;z6tq\kl#k]@\C8͜\o|ַ>޲.XAxy{<-'#8"ͪ6mc[T =7ݤ6ݴӆ!4<7Ĝ6dx6'\bp f>z.#5͟fQ'm9^zo5L{8٪WLG'r-{x=@_-됎%rgIZ7oxu̸tŤ;*'{$o˧˟>fС6ce?/xׯF8JìgC̘adgNyM7+.FQ[)OzgZH|nqW/}:yt~C9} ̀u~//ړ{\<N:\_`^7Ώ=7^C{ۍ'^rlYc»ׯ9< ۛFgc._Mֽ[x'oܻr̚lٛx>ќaM~(Fb%_CFzZsr06k/rWWqOt;cGiS(^nQD'x9^6ž1Vޛ9WZ淚5q .Wq~nYuӞkQwc/o]{u߂ιwĬ:9B>\B6;`iQq k3fnw+_m"xms6t8Z8b:8+?˻w֋ #@W ObةUF8<ٞ\;ADٚg}vXpg[p#l?Q~FŷM<k |irk|Uj;IN>&C{3`?XsZO{ko5v{ !{Oɾkߋq.1:qʍ!^~ 9d'< =׾SNU _1_q׾f=sd&IgCSc&fmtj)i3W? =}6{jaDK]d$gMZ:y X=?lűk3/lbn6hKo֩qCWЉ)o{5t$9%PQqǫ +^ ԇZOŰx؇3s,e5ECӟ\l^ff,}T7|qm\r8աN Fq*y2F8|bnaK7v_߸#CW3jS?xu!bp9شOVَGS9¬՘ RG:Nz6>X0 ^-ab<ë\<]62p`h./uis̆GGk!/~>U1⣱wʡɡ_c5"Cg xuG7|+]{>]rq4u Ͻϯ FdË-=-?[lp+olZ7?\?[9>~c\g~vOݛl82_u#_5|靶'=unz·l7G ~~ zujltju o,h|6>\30)Y,}BWl:v~`>B^')G>@ރU[kM}:pėVݸz]˱8}I6b˥?u\e [N:lla L߼5wqmkM)OMo=5W7'FowX/WyԀCOxQr3sr|9,V<q{hbqqZ`5n8y?óɰostd>S'KCEŲղsVB}f?rlW N5#Wv8ibtVSփ1< &H'|vzWvzzorfwퟎ]>sʷrۉWO.rmo\QW5o ^ n=|ݓR=r{('F~緕dY{c1y;{ycky+:b3؆mBl6]~6)݂6v8_$gK_ a?lUX;)l굱]d7_\olͫ!jlqj&:9f|g_~q8Q>c`pMG`V}l@seVSvX\tI,LYC˯|YcvqpyCÂ^lo#լ |CT=t3ff _7 #15>Rn~,W|K W?_r6r6=SWL^?x;pT^[٪ŦV:2_sckߐ$[~^7Mz^N{.cƦ>mPY~p}맵yK+~gl8 'l]Rγi`^:۞~䏱;7;ZP% y""$Ɖ!YD(:N:teLbHG" A@(2PaBQ}^.vudբ~}ޟ Ͻ{wxSst/^huv'lw[]?wk{|@Ԯ6u%33NlɗW5H1 IDATON75N5Z1Ց}j)*ڪkspj|bvԗ;2c:chq?낙c8jyó7m ՐM>I3E֯6~yE#tgWO=ejoޓT|t5q8Iv:u埭 VZS\UOđZ+=܉ҸŴ ;ILO0ռŲWGq 3g>T_xY u_o~vӷ_?>Gt{pv{~u{w}z_D_}߬~mfWyGxous?/XKd3$DkF!6d6 bG}y;k(nءϮ>*۸^ueJ-XKUl[Ky~ѭg#`/G>/}1 C׏̹diҘ\Wo5qrTKWڎ⚳+O2Bs '^95/>gy>UNtw[лu)ƻ@8n?1,i/hDf76%io>9lu>?]g?&W![c[mj}{+:drTWr?Aq>~X]OuSǺַwP.]ˇǔs\pUk4qʕ;[|\Wet][L9EXů?n: [q3Gj>"&GxYŕ 7\-.z'ke?=Wf{N_^}z_omY/Ͷ?]]_7_O^zRK퉏~b:'WUQg+Zo[fWzh;z⏖Z!w:4cgwk# t 63&4c.x68bigwUV|6\'G<_{'oo0Gqp_UÔ;ߌ=߿v쥽gO`|ٝ/ ,~|)'[ϵˍW˞~;޸8wݭ苶-E7"}$MwZJxoy={zߝyO}z߃qg|Wo垵Vj0=1g>1?|55\m߉c#imlpS/6x 5j4xvS}O/\Ojp5ccm>lA}&>WXplՀ>m=Sc~֏_=˯^/F±ţ9q*LW&.[ 0j+$̬vqIc/-놽[5w-NYk})C9$h3'ߩH֙ \_~q7 Sl6sm?=Q޻hY;`x]K|zo}.xx}Y&7^>{o]a?cO^T`|]uSZg7c//Y?DlZyCAﰧ iy],x_jaNͳ8VZ3y>JuLi<֏c`NjU+&Σ~caҳ⪣0G)&{Ũ1)gA3_Wꉻ1ojy:3}o>Mb%l3]+nV=8\Lj60A)N>˧8UF'&՚| '[&|qIY{-O{5xw58Ak1c0z7ڎ;k =C^KG +>\G'=ҟN±F뻾K_zE돤|e|o[. ﶸz7|ב}>v{{Oom_ ^ {R]!G_z<М瞰!6ZM`xfgSG>竏'n)^ ?ZkG|8/{>6 ;+WypG2/ڏlܔg\tڻ71 \c=&5Z;MOl勓&Mmb;Ǵg?8 _ʣ*oV c8JaMf<c0ivg+9ՇOz[0f޸h|e/^~!}O~_y+|[^ޙ߰:tGpr# =׋\/}os֋{Z?}Sǂw|C@o_*q5q}d [xq`Sοwbu}֝ 7C\ J\N%[x̓Vqc#+?\.V~vS4y™x5~u[+|4_1/ A8S<|jN&~ui]Z>\5a_|텾Ffm{ڊ绵:ԏhέÆO>)akto?4yhxz^ 4>5 WD mkOh>ή#]g,V>ˑFqi04I>T_k_XnګF l0~۾hڍ%&z`Ǻ睰yW__ŽFm޵5=*T-s^9_jJa˵oξ%d O: ӝ{1S%؜~}C_o߲^yO~|DǹUKkns.Ԑȅ&jjS~gĜc5\t}>ֳ:0֮yxŰ<#nZkQ\᪡}^VN-./g][[Ѥ\S)w585/[Pt^oi׻߸yпwֻo+zcp0Mj=oxU>.Z|7%賵p-.[۾O]Ugg#oY"u6dz\X?qI>V=s', ÅU;60-;8I~<^3zqfKfb.h&͕'lb$:q͞ZG:;YbkPp+Wr#gza8k[`k=tHl 'Ә,08 oW-Zp̱ܸ{Rb^5+ 9kzg>xrMg7O;׀\Xbf 7Гsb699aYɸk6NnSlG z4Y~9&ϔ9x#7Ff-Ვ{*N,{Y:c]}!c?~vxWk4_v8Gu^}+`c/;#px:ΝY%y` g3sB8vY|0or[lO_WW?o^> oμ;_7\?q+z _}oũ?yc>*ǮBG.𫓯y&(͛yfª6ƧWx)u1ya²MlyqFǭ;_a4F?xGˣ7Cp=aa:˝!3zG5i''>p?˷k]ržYf:tR0Ivbt]D)F?4VlaO<%cp GO۸|HkP=Z7ӆ;)xWwrKOp6b񭇾[kX[{Zaɑ=]-s\?zpq-=ԙ4p]bz+n1k]ñ['8Kf=<-߱O`ks}G5⦼s̽ÖHټ>)& s<'V iñ8Ssk;ZlWtiq1mcs3+=ru5XKeky' ߺ々Ϭa9߿v@{Kum>=|$hֹq$~z6~ؙ׹3ݾ~|"c{3ygK]X{߷}#{;X^tloeO^C~+u׾zJ}ԧT.s$>Ι(ҵ)Fo| ÆcbfSjdc>p0iS`HZ؏10 1>};abAq#6ǧj9NŇ;zGlx'~rԧmbDž;6vI}rU-s'ƞ:lSc_皈vWt3?5ߚu> ~woXO\;S?~}~gMvK7\Dǥǯw=h}/.忲>_^_߾~'bٻmVר=E{͘xG_9ϿJ -頵qH2_XFÒ/""{l/!1;rcMǕԩv \(Eڅ ͑ߜ8?V>s%s;]Lx;1O5K_>q ~pW\glR}aŪ'K+[Y7L0O\}9jٍcnJx5gĜ?w5!B!qV_Gό凝\3 y^XN3I(X~$\0sO'_sc+Gu旍ki竞6[GN1;sdX}uZx7n]u8WlaG&qvDuܝ/:aIcwҙklm__1l8pokz1#qin` pל)7Qqs5 >/׾y`.9f ;'Γ,)ZxgrC#^#Υ;ju&hruNYM.Z\tx?}#Ї5GՃ;,^~c]_A{O]+?[ud>&vMMaN4|l4NZW(WcuGi?8W:uKW>c ~^:럪3_9vθ[~_}+u^Op׀M,Dlj11ک$Nh&fxw` zҁ 'y6V;48$lD^tT#U\WK(aś߬ypi8U[uuz['x$'> X:\b⯮8IP IDATN/c/w6c|֠s/.^L\k5yZ18Krhu~~b|jf?~yaq_n1mM9p7;]Ӗ<4wr46v}qttgF9gug8zڌ;KayG"Ox ߞw#4~ \>׾p=ɻz&^>rM bckmo_/l={߸su?|sWWs.Ό=1k0 ѹt&ሳB:t}5^.FsyNr O*Wx~}^LѼs?_'=_{͋_?Ov3^O?o<}^O_؟gW~32`{&&uNnxj>R>rO3͟߼sbpљ4#41Ş󞻍еss6cmaisv^ƞu*/yMUlsnq-Χ/&ĸծ^8̼O`>ݘ/GcF5>Y_L_ɬA0p6\d韵o:nq?>gm{kG}oqwG?w_IA]ZJ?]o]W{oCv=yϯ~o 6X.I3kϰVсpش_w֦选gc\>)B0~>9b[|w b7j$ީwǺךs'W%3uykN/NO~i߃7ꃫvOW[xcf+j}gj[L!by>u[ꨅrv> sqչ͝wU?Mwh;Ǯ$;޸՟-~imagĈwgq͘o?\bcVO~|ͿlŰͺ=i| CWcz_\sUSk3M 7sIQ_N9A&1NۋVD{1ByzOvu47>QW0xk951pZ䭆8Iyg0n&0x W^坾bӳNB7o])Lf|]k=a1$_'ߔpV_y}J9tO>_k7=?ux݆_?򿬏Ut/yw=d}x_{-|׻ 0o[dkq۞u>;yݏ5>lzGz1OlSQ[zO/Xxp1ɓ|ѭ.l;<8h~˥w:Hl.\Dl +fLÕ^X.֘ 1V\KǃQ/Gvay'3f,Ovwvh6>?w6pu#uyi$_ xq8Σ_6a5՜ >޸u/oX!_?XK41=է6SW>1jT-á5AvĨm#Ż^hqÔW ~ znv[b5sm9˫֛n}ؠl5 n5xO>y߰ށd.;1O+y{zN,8Bv0O׍ΈlV3 9Wλ3øs)N^rɑ䩖rtf7x'n1mͻG6|z5x>S|R?gjq)Gqۣ(G^36[k'GMjUL;֜İ7<x\kg5ac'w@|uaO\j.||qL.o6`Ҹܫ?KOzv>t{obܛ^q/~'~b[ZbX{:])ض}%/tK~w~ign[z;ۥy?ju7yV'd/Xl8x~X6D.ŅCFxpĸs!S0i|8a]prXq#-L—ΆFOxkrk棞E{c OL/vT~k~ט~u8Ԡ=>WZ<#Gl-θp>ٍkՕk^Iĸ g\ex⪁?:zSŊKZ|ՓN )fٴ)kl_ǝ櫉9qVWւƵorQIgg9#ղMc.I?챏ySv9Fmċa?v "}քb&um5=^sh|lWN}/ %Ok(oxZNiN~Jd'!x8;;p\;><8yZW6_sCK\ǽuæ&|ZsWX:6cm)^?Oq<cZ ï͚|g80 7120Irôc3xq8۱ŐxGl5>iNl<_o|qVݙKZˇՏ'6}~y77"Wχvø1׬1onh峾է<:׭q1G'߬5fS%>6kk1wڞ'l|~}=uw틿꫶RZ[D^oW\m]p/փv_oZ_9_ڶ.uKp׼zs-O3Ss(&}Ek^$sלO{R3x}'Қz/Ωk );#qxӟ8)wV;4~5lFrb;/ CWL,J̌/19%SµF3q]d”/dkMײc~ӓ ?mŰ'r5ةp|?T[h^9k,g>~:Ygr<ڝM [Ӳ{7?])>R~va0SN Gˁ~X:Y7>q|pS󕣜buSL1f_OU82]ZɼOmq}ws~4ʯ~_5nyn~; 킟e7g7i=-C;DŽog=k9ilqL'?b߉Im?ʆHBdy"+h8|7aq > Wl*yօt 򻃧D|jޭK.ZlՓͿ~cܭUx>q|rţ/nǩo? V=хǣyZ瞀kHyD>Nj0{QN8hꓻza(Vtusǥ."3̍!ֻu3kWW\ti0呃=1~k$9X_-|VZokmػ8  uē 2s04<|аժY7>gwᯎ07_u;몎3mUe:e[{"_$h^jJrxWt5`p75ExxK[ՇMaޯh>_~r_~)j0_SF<5t?eUQخ64x Cٟ ݜq~øz\+v}X􋃱uK`eOE૱qgn):g0Z[?^É\֧q:bpg`kg. .S2sO?;d6}Ɲ5W\8q3s>͚'9|ܯv-u_]}myS{?!c'ak ?::үخoǮ|m׽~ξ[]+u\}?s|,:8桩Ǿ5)_;<9\l0up{amCaٺʙyp861j:ٲ_8ͥ8}q [mMjh-'~ڙRGMoꖣGhF¡8.3(n;a˯5Snb5\08ctuTX7q7NϚg8-]]701V4۬m>m%/ge?cWc88Iqj}='W|lxLItkjIs3Oܝ#O3n/os汵t{x[/?> 4 y[W9X;ޱskV8M\y3o?vqc~sfy:bc3C}L\,b9Zv߼VgcI0S>/ۜˮ֤f' .j)G;էϵůeS܏К՝yg×XW|so&W<E`̱ܻcײۧqkdr60aG?fWq} ۇj3kl<̓~ڪٝD};53DMZNy/i1$yi摍>e/_?}–_֠2VoΧ>ka#W];?c<5ⷿ_;{M] ;v}d=o&7>m7\ '/_뵞_~3 s/_5 _nA37F۟ ?=I]y]֨nN״|㚮3(çuX6-m3gS1,']p3GT461%~ma)G9O_|yh-⌏xOLyĴnl_^D?|կ$gW=; ׇkT[?فfd3nMuj4lַܝk|qG[qbc|OGCwaG;}xԧ=e#ۘ`|J$qf;%bᱮ$韱3&;3)W|iO.3\=򋕯'gqjI Wqq G_;p>uX$nע'mQ/W5nMq^_{V`a{ٙgv6 yb!災@i?F\ukoοw ށo3mMq6wu!A$<)]Hp>6=!խQri΁zZixM_^m 7ݺ_.26c|tN[~Ϯ9$]-.\Μ=IxHϹoraY֥5a/5qusmu>})^_OI nn臙ԯg7Yak߼qw^UθՆG|uҭT~{aX>Xbq6fS =׵lxڊ5?ܱl[|rl87YMtX}J5U/\tI6NX}߬M>X<$%bb~qm{>v;\ >船ǖ{aOE]gHu̹Dk tƜ=,si߻&i!FCq3:7߸@Ӱå_̃GsT/-g%8kي3.^=Z6/;C}P`c ps.QF:q>y6xr48i$ \=m_ЍH%;}~lqq IDATd֌k>,V pǏG_3ku^ GS偝}ī-ݾpm_[~9Ǚ?8ٓ8f<)q{k~M;⯪U]l6c~1M9|k.Ujx'c.'.?Eg?k7|9C=ȎL5cqN\|:[=uNIywO}3c}/on_w}M֯onzm[/{oهs/+uG|/&y t\Wm__sqt}/zAsR\O}{k}'Z`m,:1qxt.yf%Ol~wz0h Çdkl0pD|n8Gkxo<.^##ȜKݱn#Z w?ows/GrUی}9]sTu}="WcY;{^Ig.EJ#FJ̩q ]l3fX}M-I5Waڳcg=5auN7<,ɯ~u.`ꇏm 9|qW7-_ܧO&OٌgU~0qgC֚ggũ=vRlj\^Z|Jlr?(״ò~OúZ`x̠};}į/^vMEjw߫!x4uT'{~9|ڳ-M\[ZsfH{߹4&)V3<8wM=渚b{.&O&θzGv ;]uR^8k>aGKs9O~ښz<̮n"f?l+>_//FG)sT 7nVr'Ϭyj}gg2j(_uV_=sƉ%o7u嚡b7-\)ouƓ4/zrﱮb;cpS.>hƗ:⣓`\0viMu~~kM;ş bҸ{b 'ƖM˙9G3%n` Ϳ13?I38sj8:byX>^`;yon%_o_w=!/snwc/OkNwٮ~d"g~oy~Wlo}_޷`{|=nٵhkvMQ6lLc}AcVyj|3ցq0],8S\N<ʿrˇN/Lw>9<.n7jS\1D'jَz藇6&8Ց>aC/q |t5pӤ:Q[80Ngk_p;lW&&&|qѭ,qh3N?9//&<\_n8Vr8)\{g\?]|0[W1f/N7ՍkbQq}ϗ>[^Lֹ"DXjq]#0ťxV߷y;iJp{|Yx~XNS:_]+=!Fs& _;'5YCU^B?ο*Ok'.Lg?bjuM>lbNţuvkO[|SiO6M+6 ąMO)'faj%|MX7Y枳o.?؊ 7k,VC5O'p>KՆUL98nr~]MrYMO7qG9v~>[<6G 9ߪuO 9F9w纱bym P?Mۋ֏v|7~vzq6o7-˿vm9?o{vz,zemK ~W\تWXT9~&NBF͋$4XwF代pú"xZ|H"=bsz]|z^l]L7Cyf9Ob1 97o b׌qSZptg#겦 ^i_bgsmn'7θC9IGjIs;9&(6?jbi䙵ˆ㌟M"䫆#Nư.َ6\<΂ȣuv⫓e#pbK>_ ts~\Sb☶'^=+Fqa/'[}vR]Foka⪝MP۔5ӕ'Zef\>>uص0l8[_cY*~wtv$r9ֿ>sׯY^e]=9|_vﶷ^Wui}Z *k t6Egµ|Dt.z|q:܂a׏<{^r3UyjjIw ,[b;%;{07XזѯלgR|Z-7_=S7'=g\vkM~kE )>lf?pU}Q-8hd]SNæ,KLw=kii ]mWZe൏ˮq¥Iٌ1aw#`֦qY-1`+0M=y֠9kaKIWq}u2p'l F44:^쳵ǘcޟg//g[K8i=d'|9:H\CT>yۮ^~?`gm_wlp%oF K~wbpvm+6U;.\}ov|}Sw烾-}v[f׿E{MmyЭm{~ |*31m҆F>_bT,Nn:<.0=y+VbIsd>®{p)QxtAgs*:fFp[ΙW]Ko<ݡW\/Jp4uqqZtĴO)/-W5L9jEáqkͅXg> ۘNÊ?'F5Ξ&5yYbl_w &NS='_喷͖.bg.C_;%bG#\smd\_>lwc֬\4I744.q8场>x{ke}|io}3A:Mj%{/>kFwv> nqW~ O6׺ǕG4 ׾䭖(6b&5f %#lI8z秳Ӛ5S2ZxuO;C$q.Y#\?>m?1'6qX#m׊ןkT0.G'T[&=Zqg\M=]skI!?9w+mX壳ZZD꧝G|}K;]?緧¿߷߾wۿg+%>`'ξ]oa!|7\W︽_>{e~K_b`GAKm_i0cx-V gP'>k!I:<]vк1.8Ř|'0M[\{2.~rƇs5?Z\4꧵ě{4Nz=[qf1[ZI\)ۺL?{.tu9qt،O*98>1=}W'ǔ>)9_-\[+cwu6}u|q7kcꝱ,vZöiZ 5dKf=l/Nc0ٍST0&[;ٸᓻ8Tl6?x;yi>'|ӳu:fܼM!),[|]O|qN>c'bsj,~r\ӿbK˯J|p֦\lG08˥6sN>Woߍ&͵^֮x~rXSԬO܋]kƳOf7gǸxoob[99cZts<Õ} r+'uH&vaՓ3.WN>s\l8MՌ? _r]|_5' R򖇽&Pk;-߲=y{=я#=۾~;/ֽ.^wkp+ʳ\\]^/Z7~ʻuhO햷WWrxS~3E>3π:&278v ݅Q~  wh6|6>6 %Nxv6s^0p'ljN rx`qYq;pj?il4b;a;?i\Njї;]F+TW9{TbO}pt].~Q?γ8X_?mWUL^-qTzWm3" [ ^w(8W5f7޻w|猽{Hzn>? #ONu6_zr`꣛'yc:fz隷EZ3CksFvu9u}8O)9I:j>? vJo} 2#ފwos$Z__ٴSx{-^Pze]'y劑+g>qlEu:4iM-6{>i8RϭQ.[]o놛uպsXWr ]OIxU.x\EZyg/nT+[/P?SO#8x0ld={V7ym53/=0yy=9&=Okـ=_kc[Cbs61}'a&+>T~8gHyoNI8c7Zm{>t '?u?<)˃?ZkMm tN|w`㽡bHh}qC\n.'0]'!87PvCOԫnC\->9nN@C]z^kU?[/5Vv<ooHE}A`S_b|k`p_^'}hն.0<:D_uU?i j: Z\YыjJ}yl98i}WǯEbF\8Y|5A䨟'6rHʯgb'uŅY߽߭wk%&XK{ GP kzvV9t1Ù^Q8C~uVae9pN~5C^b8a9#/Xsɗ|iqC\3+]˅`.-]?P'ip s6ͭ1g<;kO\z#sd\z50}hWFG]1e^rԇwV\3~\^/ա!ήOS qv<֛>xx]SblbDsR$t5g<^ZNo8Wy'k"w`YKMf^>n:h诽?:ӳ19ĵ5SO.dMogkbO&$^=s?ˍKv{UL-z0[s:lZ bZ綺S=5F:X=7lyO>~yۿ{?ç-{#ًۮs޶u~Ƕw~'y+O]cЇ9cpWlwb)|`pgSMggo&!<#њnTu;0\7\Z\p3mLL8Ԟ3?=●&k_qUyܰ|ty?z/Z}G:qQĉ&6[o _IW+5zw~8b4zO>+Nn^x㛽LG0DWpmmFyƳa 9Jy):7.zq1yX7ql=Nq_խWQsv8g?b^-}l:Wٳ!k_Y7/657φk≃OV7V0} 7~qYOC'G!PW}׭ksc3Y4 '/>sKwh$ߙ;Śף9b ֽ`Nڏֳ98,?.7.}?^t:p;-~t}a5!߰ky/a>rUy}GW;u6'{8;sD!V5W|Z'uqW9`;xgzaOGa~H+L=O==;r%ޡC[,?mx},.f۷xmN}I.C)/k~÷6!|sԧRgT6M IDATv8KǯzjZ4p|׏a m >໾kyACoY?ﱼ,ַZO:'|Gpy~AO-\?'?} ozU7eۯh?wֻLYSoÉl :Csl/ahte;D-y8a >_ ~jMK^31|}}hxz7I/Vj=2'|լ\_RrSHEZm= uW. :`0g5FΌk?\8#~|sy~Y _gE]C\q;S{jb>8ܤ&\Ɛ;jrv|8zmgqqs|]l$F\rbD k^n}7ocS'mb*Nf^89A.FZ@>f5svt]_0]T7`gǬfq7G6 70l"^?8?\sxR|{]_=z3aH7 5!|CWƙџsD‡U31 k^|;I}_ϵ][^;աZ|z>R^9alQ+W1ްlzc'_S}Xv9e,o߻vpkz^i'--g_!0x=7''_qW/|]aʍwĒYF={W[o gy]wl\Qor46߸W?x<_ ;-YӞ 7M\<8z~?!W^mxz7r__뇊/^?OnM<=Ϝ>9rþ;pغy @;'y Z7Ԅ^y9q<[? F o)w쓫H}eѺIk9D O|rM1[ч֋}h  ۛqN%'׼7N0F\5qÔ+XRr|451Q<8`}tmO諿kCʁiVLh=ܮU'?\{&qUyk|!.k&xX3:7*.5YclRn7+]5*7筥<vʙw9qj 8Jüu7>70ba뵺`xhm^z~w>i>^[ sF}uH?>yOo/'X_gaK:p9蚻ބvm^:;aκ>s"'=' s_jNo_k}Or?Zzwo?ݷֿZFumyrڍo~W{oz[6^b9cv/~z⤵!{u,{~٭u~sakFI\,tqZ<-~#nsպ4-G<'<;2 q Z_{3kO!yܽg-}eyҚ]4=Hڳtp_N/>Ϟz'\Z<ŧ\g5?bW"MNpǜ{ՖG%prbA:C[S=Ǭǥ ,>:o>M^q6&;~18&.>jp|qË`go 9{O4?8Z='-O״h`qgǚ:8r:9>7sYSU=r)fBW39n} wpd5Зp ]SntŜ)^t5>s äa&;Ϯ|XM:nOt?xpy?eHg>k+q?ˋ~Zhc~g[뻗 _?uz>CKxgk}N8klh=iنZWۯS\g/4v.e'dZ6чѯ:hïN6~ZZQ~%!wJ4'-O?sZ\ >k-n4{+5ªaNkmsŠlR4_~1||k<:ޞs#m㾿jׇ|qN,>հr7szd>Q#,XR=r&~䔇Lކ-u!lvrُٳ{Oq|OyVfv;]rˆ?r,\3[~O-7ZjM:kk~hyo_ _r Sq8^dpú&7&޸?7¸f@W0Sfi~0''[I'ZF1nzU7ۛuqvѤ>]I'}kx &nzևzH VmVK3Aw:?hKm|Sq b| g4^6Y|<\,17&aC>6a'fY4^fMj''GA)ΧgnJyz&|82f8zrs넋'?~v׳Ս=/ &l=Gt6z5'yq>7x5s0|5z5'~o0o^ϯm|j}Ȯ>n[# @gut]Πy8Klcʜ #|w3Uru㭎Y~oc7e~zo~%_m:k9sxOwrno[{kaC+G>bl_?q3=nSTzU| iN~tg\0$ [w V>%)wkW\疸>y>b{h!VeI}6/W^=ӽV<1?~䄃i}qSx~znkdeN`녮#'_3>ڨ7FbaĻS#:$]N::W֔)/=9kİ[\Wv5az6LnsVNN{gVSOh_kAfz?k_wp&_AsקG,?s?|S>+]gu_ٿþ\%n|Z?[_>.Yߝ~wbdA_=o}ͳ qN|w)PGv(-N:cnu8&nڰL{yq7c}P~a'wiG{AgAyQyGh'X~61'޷>Twb5:S /Vmx_ڻ97c<ș?j;۰^>/8Ɣ0š ΗO.3|zdG;U%ŚxlZ_ 6kkCW=1ǒzSo/5ykz|}nt8_Z\l//=?uI|pt\aGyppWn:}Fj0XkF̈'NuW~oً>}i 'o\kv>32]Lĝ#:l&ԓ<:4u|jɺk\Zˣ~꧖}'|j?wޛ_.-[/~D^ܻ~˃/~A#֟|A}_4v,n֟ntۿk7[u^g/oi[ч8Z ŸLiC<:ly33si2k =u {N8&uWΟ@NL#1^0U8riyf;NuǝO|~k>:S|ocp4~̞ڻc8qzC78՜׌gÈwc֝rs9{cٯC=ċ)P>sLw Æ=s=-%՝8M{ x(O(ޏ(sGWOG>r '/߻?eOkYOyr?|y_vW~e'IۇY9|.w,c~b9uS~_?|;=i_X?ć}q9pm|br!_20LL~{c?[k+ #ϻ"j[?,k}4|gV8~|>NؗpM guoLiO:ӝQy/ _bS_ZZU=?Ο/t^ 9߸ӌx<;wu}3_ݽ]ﶼu[Hw>e7~\-;׿Wv[=c?N:v?e6"ge1#i1}7[xjđibBqu1_8oE~OCKO|Dzkњ[|89{iccbIZ o$7=x7΄MWkjū0E뉖'' *&IyqM],4>t o{W<}Ȯ<6G}8]{נ/xzZRi.gԓXOzJ9Oj6#xBye[ :/ll٭!n/o!T'bprViBJWIhȫ~'xs/p¥rgsΟœ˟M'^p|y5Z>=7Qj̺2`|5Ttzc{]9sL֫\|_\jѽFzrGu;/Yg%8g;ᇧbp冥 ܙ3:s?{uyu?mW+n˻/vnQw׿r>E~}g>ߴoggןGO=3U7Jx)s@'qҭ{7x8e|GYCqfHaҸ\W(Wܼ5+&rz^oy0Ik7/sqaGr{-/փzw?}q%Ԩ٬ IDATg>5čᅅÃ=Ӗ'?(zc{Y3o/f~il[߼1yL!z~~{7iyklJ?~׽x?R׷׿ӯ\푞+Y{З|"~9t\b 8ҋ?ۡIf-6,?'f:Gwh Mԩj˛RnZ yTF:\b{NTbi~ ݺ.5ażf|plzcvO6^rS\#[~?׎Vuś̳aFu)afoˆk4!>녟t9aT{OO{rϝSsM[~O;klc<ėYuH.r'>\<F$>iO>?rϜ$yo 4_cMy!lyzhՆW7, @o]{ l;wF•ϦWwa Y ˹O,Wv߹JipBNw>{s߿|Ϭ*?~O>zЇz֢cKMxo9{ {.׼#1Tl5#s?*WL 3߬W~uz8ֿxfN!,_23LgbQ޽W9//}kŬ=.Y[?,fiT#l¶S1k:۷8svq;̙X6qZKwC.ǜ}(^z݇0zÓ_\xfsih}`oqWK_UrPw]uzs]\&L7ԡ0x{v:|r-C?{MJXf/0=ּ\G/;jzC=,8֠kfgOeјqv}vʷ^mI=Մ/iӞ[\\}&ztuϮ9O!6qŋ=6\Z!/_R4na /<] {OO᭩aawrIؽ'uv7)~xHG>9+='ؼWNx#Y}ͻVjkxtp8ñܧ1xMԯ|| ?om8T~znքs~\^>8N?'5.Yv-\v?^qͻ~΁k׿Q?{stu{:pzԖb3,oS,X^~o띺~O3>kosS8};߾\{}zg{u.Z{駭=^>_1>_^?>f7q^4ixc->t}0z[1_y=9ufr \sPٜ+>=yP[\.ݹ<'Fv=&]|A66k45vz䶮8Ӻ07kr³Ɨo>ó )ՙ_.{b[yx0l#0W[/oxgmEz˩{ ;Tw1\ћ1To_3LWv^kSi~HMSֲy֚q3gwqsEC}ɕgke6ͦ[wy8 4v}q#7V8:..9WsD\|#^~}N^ueO94?qy{M82lufC4)&y93Zkq5˯&LsT ^]vkn-ps7T}9!8┫ެHsx<ӗQ͞˓c=t{u񫑰ݳ8HÜЗp-]4ߟyf:; |xә ^9ASAg{4C=q?o[ծuG~ >`ȇ{'ԧ,W^U>us_ճ=cS|[ꚰy)\fbs|5&4{U՟y={[zG3|^imUWp\S܉8l&7_؋8:ps\K<د}Mss= uZ/3[?m9(/|N<:b:AO/դX6_Għo5O:xhXz^r OV-^Ex`Y>m7׃ygbVqmA~pU5ψ5@K>_tX\ZxSK /N'X~)hn3)ߺ "f.q&69|%y_VK8]쩻|.5ZW9lO\r:d0;xaꁞ|yPɖT X :7чp<6\Isv5|dzM[q?Lk=0o'w8:>ZX׎!'r)IvSaQ._+NgG|kη=Nl}VW?/ [?0-zMWxR]>bX=:~|:ao_,NOpS._:9!iUl̝ufa9&~ظWn&v?)~hOlf-=b7ÕF?b 4iNK]F5'ĝ/;еiv3@< )88cGrS^|t\?7s_w}mo}5t%_|q ܧo-|q"op9O-WzϮ_L] oZ_5^?ˇ=H޺bon=zmOi]i8[>3.ۿz1槓|(&߹/\/n08ų# CoSK |Bv֮>/<7!V/-~ˣTgx&.&bl8:8pՠ5פ:SEuNOvoϼɗ=sg!~ɳEXOW{ϮE? _y!|s^X8s{`8>Ia2y]s>T!ӷjO|w`}konb^|\\/BT'ǰ>uл>12L7;( _/~xխI=S׻{4h X?SF>Wj'0pV>gqf?lmN8=1bzq}SC|K} 8i~x5fNj%qaը/)՘xƏ;!~js S=&5kW6͝D,vK }aWeNfgmpu=z&N>>Fx|8ps<86)jӚʯg󙻷a 95:^F|ۣ-y} &rKopynfޛsbV<_SOqiZFb-T=՗ߐNǗp~v]rO96ҸtS]dח>$ P5xw0чz]vw׼͹5gδ0\Λ:439;k#L{}SQLZ'.|㷟-oy1ߵ/Xoϫ?GGn?wgrr?zr\aA_ז9vۗS}ts k=T'GOr앹=絆kJk ݵCÈˣI51ŧtX&'Y'{^39`ň8Ԯ|h}Oh.}1둴&=}'6~}O=wa㮟҃m]r:ZKg˥'bj׏}瘹{P׺^vD77?zۼbX\x -ubㅃ!_̰F_i5gv |\r 5˯^9ͻ39/={ONC?X'ެ}KKzܳ0q^Y?C2{$^&_-߉_% .rEtF6 煣߁&bnjth af?8C؞,7"8<YOa[чp6s'75zքOv{" kNϡp…裞`Z-9qaF }C;K}?dgه9ιaz0]/*if/I,|\\z&zz\qoo䐰bО3aO5˛Dzok[^kYޥxg)WNNNqskwUq֜?nx2gM>561y'x9ٚ{#a/|jʽy>-.֞Z8>}k3] }ځ; Zڊ0-~g.](9=N\g Pgƽ@΢9IXguo/w,77l=_/@ﳜ^~Uվ򋟷+7_ּݽ<}PZR}'ͭL ?}p}~75Ӱ]֔;)? OkqMaz y?1&zG'8нl5T'q_}Ta&8,CrfN)>'=MzSk7[><9Q唷%alZcaæaԋ8ُ<$vx~saW'^fo-N_N<>R?W:KpDLٳ<.='n5Oua^ZbɎW xIH-'7pvR.-h>5T'[N=ѳ'!¥<氆۱;y{ܝg0g/| MF {xj_/FK)n^q{)cƲ tsz˗\CbسMvN C&ϴ'vr_/Fzxv|兛7o!?~6-{w"^|KWڭ=1K!qz=W'=}qxgUmIgj6lӭO=-o#8N'>;.qpl0In(ЁAY?q{:%/OzSOԮ_ӋK? /cN1^9ӷO-\tCd?RYMY?^|1tPp˩^ GT6 ײ먎Ciizpj˩X\ob'l}cg] q9ba̫-'z oqs-̉{dgۇ*7nq+gĮ^O'vZ^)gq|9 ڧjć. Cw}u\WITs/#tvsG]ig{׹cYayzq-qI'yj3&xK'lXGtq?NO_g/Gp:O:B._;ZvFV:/^a;| 'l 9IusKΪX:Մ%_SO=Ӛss޼|9At9i_Go&s|/|'hoES>~֥|cګ8',9zIa庾|X~3 ^z?_2{76\T+hmLLSk}a]s/apzlŗ.g}kʹL|o|l_5:›'j6͜|j՟IrJ0ՍFݚIX~^ٳp[x_8{>uv v#C:_xZ~3cl=Zzk?|9<ׇ9ʍ[_sZ?rG'>kb螓8IS$H=6۾zr5<pתK=#/ү\G."@]Z-޼E8F/VpဗLl`qSxug.<Հ#^!.ė.ד .c>k6ԒS?|߰W c9L|x?&3'|gO:};'5/$|}igr`gˋ3^?;nu\$tZ~[aHqyXg>9-FYzPN/ߡ\&yqsÞl{k8"־^=W ;%?_v:\gZ[o̫[:rdՍ|F]SsWi`p{RGxH_ IDAT]i1i.7fZۇ~'^؆O{\Ϯc׷4uMw79gb /3DOn8<(&|~R A^~xy˫^Z{oYO;e9,'O_h{W\/w8ͯ|r?dxk_>ҫ='|\[9{-z%L5xhx=q}|C~?.r l5873!_f==_=g>qx ט}VFS~O 6a;/r.H=n/F=Cގ7cj8{DgvۯC=TkGbCbF>4On5z~=ț՟>֓=|5ɭkF t6l⓫ZsMq~i9jᵾô 8`I9lmrr`ߔz}þEr|ӿ %r6]rh3wo ?5^7חŁ6S^Oy6ΜKO !>ūo=o^ʧ[f=6_Nk{g&[Ԟε{>3+]?Y+Wo XMMN=${߱xO;۷lքmC||s!aG_tMϽ<]?l'Nloa{egSq6_qyOT\rf~c~y_?޽=?a߁4qdOq}C0ŽO nrw0~,cf?Dهt /9[0^=3oWS;2q-֞ !w97ɳ%%VZ\|>k>5ͮaZw,D+FWN5'l”c_0ׇna1%?,CRbrť<QM>| >q똹Oxޮ^`o/)y#uꇞ=\uj87yfGv{ǜ%15ݧ՞ۓzij^_D=dô9|A^gι~C IgsqW8٭%sKcT:m`jH/W=s5ˡ!Nyscjr&OkOy'g=~v9'7,~9pVwxih7}/=r;a? rZ]NUvO|bg.Xnr[/z[˛^.|̇>dG?sk3-=|/پኳekd}'hpqKz)=yuv{gϮ&C=Uwjber[C<[`}r\{r7B:Mna#_ ))Ǟ$P_7m,[,g/_?{Yg-/yӗv~V[̧?\u5{r'?\3醴hýシ9Yv?{3s֡o=5#9D_3&iy!akzޙ9 냗K^x.؋kdO9n9a;OFk~n뉞Vm֡V}oK&:bGlؓ Roj7z`xS0rSޝzWu5N@ b+ CAKQJQlm-Z Xʠ- b(l4b B*~?=d־WsZ~>Ll9-g 9=a8ab>tD>~}n~ O>:'!Ku}]^ytn\\^~G߳z)VںF^&xL~8 7>63Ka?x6PO8ܝ^3}ӽb?{}`'lu= {+t9<|w1&:c ]B>:pר}mXyiCAh`b$ޚz;[ckjЭ3GqՈ'aHGv|M~g={N R_i9 Ib嵧])N6v O&fӍNn,{?s=[j{iǞPL5'効{鮤;s g"^\Ln+gLnXG(?}}̯~{_%kJzoY>aGi-]կyz{w7򺗝6Y^-һ/g?w~W.~ۗw[Q:R9Zqvq؉7ɌU ˝r'?;{^sMpSXٓ]O6'zN;_>x'O.W'C6~wxb8†iM7-n˧}lo\;qt{3X/O'۞&sٛG<ėgc=qrȏSgOO|s}mL-7|sFy&餺{=g&57kg5WC,~v/>1';󠅻P0@`?45&^u Ӏz]yR_?)X@_0bq^rc!mz KsftFwLId}M[GyB|3Pqo`>E}bq7_{қ8zbDqIZ_ptyx vyNˉ&_yHtf$|Y~kej &8䆣Y&tb8F7oIgrKWˡ,ML5حV0ST+lz՟ء[.\=>&~^,֒O;>µz#]sMrF熳/=׋cJ}Qx~p$gՅ,>y񉅡'_Лm= o|/O_ZG^1#{^׹O]y}ӂI噗^nGs?qr7 ?|j%x;tw9ȅe V;Ytx18hv>x2{,F@yW5U7)7={ 9O>X j]}n;@P;@` ׅ/J$.I%jTG/\ .uɵ ЛW}c=эo7zk qe]rvks=l2vX8ר?+|S,:|dW紸XҞʼnm}%:vxZW5f>88WͫG^qco\rxi%xN~%>ٛzLi-Z|d1575p7\oNmG{gqEg<FnYKM){t\e;n|=4\9s{}xZM0~OoEgk8OygZ'݋\8IUVOw -{7.w[^<]Z'g>q{yrs~bywf7[_<'=v|rO~ޝ<Hݾ꫖M|엾f/m ~y^oF~m 7\2NϴAhgȱ֖kxQF>̾«#1ooz3kZ3ـ%L69r|?~xxfAW:퇹3_yx՚O\XjuhN$sm٧|hxmTW 6iNOliS╣f\aϽ.6ԯX5վC/E1W5]w}[~ǖ\xjg>7޵~*~g7 +f=m׃;-^?w+_hq}vmݫy\0<X 7z~|މCܾa|z'pqρ[QNɇZ}ڡGg77#{}0g5pT<_r;H;Dڜns? 0Č.ry."TC*w!roab8zzŭ0x~6Q_^m_ ^3|J}~"qh){򛟨qQk>lm/B0#xW/ͯ=!րQGrrK&._z'{)w{ӭ6.\[w6ՇC> a}cKūCU'a䷆iC7|5KUOI퀳t3l>8;?<>wb77'0r|z3^~*OzE}׾es~75aS}]˟oz _{._ֿ{%&k˗=!M>Z\~J=~%Ϲٟ5֖kވ_8Cs8O+ٸn՜&pr|85A?}{_mtj}vAug8xfŹ=L٧0Ƽ~d|s <'qrxa(o`f_8]D~fx+NygZ߀dQX='h.gO1o7 bq>MOzRC{/gjvޙ 5DQVQ'vw%ͧI\z5-GY}:NI}|m D?zb_r{!zQW^4pd럏] טp)nDLRyzoCٓ]g-?ݐG6pgRSO{y9Ü~lMzKʅsӳ}Oլ.Zg kl}R|4{SFZl cF>Oꛆ֋ W&ɫW̯;?w;|9iewp™> ,gr맜뾒jNYQ׬?q#N~~O'H׬zū^jgo>NO"{]Nt95X 6Z6h']2-p .˒ri#O4☜z7F|17H1G=SoGq6dr㛘3oߗ9G|znzqőn=lccz}?)Mx~KthO KM-61̬/FrON8=cwl$G<mvOXu #s?uq1F<1|-_.O<scbH쉉#kz Wg|V_?51/[xgN5w&O+8Tvu7(fJߘp`wg8>⤉~ 8qs~r<'5O(_w]~#l˻8W{ˋ'h5>pWgKZf\ WbN׬;ge5k^m`ggCSo:D/=8m=FVW3M?~6^93nz}%{+\yf7 ?׾Gy+rg{Nߚ9 6`5[g}nx8Θefu[8Sœ=1ps=SԀ)XC~n?[k}6]{yo2/ĺ8](.G8lq>,_ua]雱jOl9وև9v'O!Lah3GC|:I1k/֓:0aaN!=Dyի>l[~~3O<>jV+i2ߞ>9խu"i-0ӎiV.vz5fN?1quě j+ro-'\}6wW|=Fdg$5^ֳǜhZT{Ոsߧ|3;➛aI|KxRi1}÷O~Us-g}./m<\/_~aY~-˗C?q=?p`n/|lҾbaxxO1?'>fm6]|3NO-SfKo.oQnȧOg~&'V־q(n?&Z'-gs(? -/gAǛcj{=˟y?>ƙx=~ak<1}Hlkx+m^K֡>5N?}{=L>=k ɵ)ۛ}鹶:j6&/S˷)/} wtu±>;9:}Ze[#~cf?0SO?+l7!Z|X=q;Ldo&t~.PtImP_zcMq=QIqxR,lx.o6=%>=4^{gl9l'8z>prZ_r 5xy.V^0uOݫWq=saݫGZ_:6x~p\s81g}L|7Z^XqKʟZZ-3ykgވ ~r'a)n>~6'}[;GG2^CW3 h 3'n:vyO[9OgQ\C<{k'ș›cW:qzkΎ˺~-|#uX _687>˱fq~:ͻ7:6Wkg#>!@y]ww-5;<̔z},לM+_G?|zǝ-o{}Iď/~OZ?y'o N#Nf]~؍h}73(;\*w?7+ ߬7qOqq9azQгz5Ԫunu= y՛5٤y䟟ׯ/7_fM'Q=¶[fqsS7 uˣa7a^\cv\W&FA~?k#XtG4̍w}u|=s}Z@'1A?Qu=~ɕݗ6}6YxV'L>9妧}HUjog/rc`ꕍ7?]0b1hO\s VB՜CU^N.k =/rC/tmsWqܑ[<;Ӱ3s'0k xpV.W Lin$S&.*ONVwb' L;ȟn}na# י\Mrdn>`^9_yڜ냚s_s|^Zo-=}ZDI퀳v%|3v9l5ٗg/=Y~~~?鬳 so/Z/'?QM0n]ٴ4a LfʯF:CZ~gkʬ+^?t)>uu6 gNlbb9G|q<gLTXoxGOo8Č^0ěݜAĞt>7.v%ݍϞsr˞W{YtM8&Q]O)9uʕWn\L|n{_CG}a=wwľ>t'o21OZGkOxf{}r,R=G&oҾOo8pɗr؁Νv5g<~#l=o|a.|ꉭ7q=Y##p՞9[(ΞӞkc5rq-<[w՘٧׊P՘~{>vcdC/:! O\|෮)!䀋=qwG&ov~йVk<3}ޞ~dbg{V|]O51> \t7>v=.1yѶCO]idE^_ݷ/W_jl-՚~<3^>xO<~&id}_8_'^lzȶX=Q-:Zlq'z}uXMx&G}=`9zxavim3qP\2Wc{Yog;(%u ].1Ņvqy3-.r埾. 6N8IA'p8horM:FXq7W Skgb796|`~:4 b[tWuh}usuNu8_@G8X"/tC|I=7Zoc$D~=0s>eOY_x}go^/K>ΕNaYFܧ:䵅rO=ܰ8ԃ~^>!o3[g'W<'効yй:kyܕA#!^V zag4q9=?j 9ևj̆e.ǯ0Z_=X}q`W|xɕ~oÉρzlҭ^:O^S{)և7Ah_,Vn҄_`#+7_}鉽ǷhjۧMY-7;?NΉ9;֐Gp͓l^?aUܾ~H=gcj|oޠv_7.zWff\m 7խ_+ͷ.OyY~گr>pgr/rޫz@3\Zxޓ֦?7xū~ںh?x=ZqښݗօC: Q-OO3|uϏn}}=0|;g'E]SC/Ncp]1><.1p'ǼǾgO$.'Sp Huݜ1֘kc'#ls{'=QsOf/z쉽gZ?Hq~qOq ˜-&-G[X/ 990пQ.Lmv\`Ke^}=hs6]:±˥ W^/ ;L;q*sϾIG;$՘G5H[]8uOP\W7YTi7X6F8 m(7z>>Zo2sS3M/ME]|Zw;{oC˚3O\vYv_aJFwLw?p OoOlcJskr7fzNuOXcx ?yaO|{S-?C{@nxN>0f=\=>þg8/=gOf5¶$vx}dY\ |ꆇc)/>̾!?ʃl_f{"/I=öWA^=G}{9c+zewvOʛ\j4gϚrʍ_j _)Jsf_nj3 u_աL |t;.CC# yq&Sz6o~u唟ů+v{vGDG>^cʅA,y)g֞jyռ8[Gy.˯>^T_{=Ԭ~x[yxv{0Z?eٸ ؾZqtu':aQLh87w~Q|9ݾ_-/]x{/}rϿFկu퍾л=ݽ7ɟ>뛃Kr=wT3Xu^v/';I{H|$އ+CŪxr5cƲӝsuS;/V $^wN94sp/K}n;Dfbw&m.܁3Ӆ$8_19ivurq CϚ_l˯6.#?}0պm!^uq՜q>K'bhl=#]^Z}; %<>J,~GtЫ>~9]?nzfFߨG1 vS'ND>I:ʧc_;|z,`7ΨN(o\I⑫MwF~ꮄ?-G{GjM._zKy3_s=rS>>dz'nkNjF} t5~6L{ Ss_8GpwX"^]qF>r?os9գ圔@\;ct##wib?k=kO39Qa/qdevCzpӷMևt5==yx+5E+ho5u+{$~`%/X{~ IDATd:OabkOh=ć 6>=C<G^?;noo`'ʝR_6L/jq/\^l񉭟}['[ qG<$\oy?~G_z#7'O/_߳<7~cz Ͽ]׿-pz77iy*lۻ|W.gFOFծy}F߽-˙/} o&:wW^鳽cEm~‘o3؉i3>>ٝ۝x<01q)kL-rxѤ|^/5QgNV}#b⭧y\<հj6,֗>/C,B;7!Aw)q..V4iMFgiQǐo=oOZSl/}Ȇ m)lM kg~r&'ԫ<5F陋KzDo䔧~O[~VO9ʁ7㰖;jj/<5'viq:j3lFD^4n~ }>qC/4?zc7ZĈ>5i¶z3?9٭#ٛ9=sa>?5Z_;g܄_^+s6رckԗkw?X9Ԇg%Nozr؝7"{=|oiC޺+ZqnG}Oק;EvZ\8n~xĪE9 ,^m$s_Š#tSj՛lzӃ^/Է^}y3뇇Sg*ƟϜM`?o-z~Oh:ӾgSO=uXq 7`;/q#nzn˯_G;Z[/ݺWS?qdžF<:Q;9įso _˷O,G.>?|w,}ғ/]?<O3?sc]xr}xFO~7au~o0E[w/rw{^mzқs#lgdzwO^,[\z[n7_ׯܾ|}5瞳ijٿT#g=eZΡ9 t1Z]t?~fÕcN^:WNx|zGp4L;XOŜ55qk>裞`tqe~y7켃r=@\ CL"E'vA\:{ =̼|IvKi8%p@gS5ӭ?Lus4OOjNlVOr+ /C˯^o7{8%~9=|y{ _g{Q֟}O{$8!i8o^Oaj[mY#\jÖڛD8gIS/~NCq77ڇzF}/o{#No/&8z;R>^^on=-bpb{=nr:{͋a'83 B9Ysؽ΄/^vCq&q[n;u;w-vb{ǘ2˞j~gw(qԯ\?f3'z g&o'p977:z=و6jyj'~uOSor׺Ip3+fG\4}o ?k3u˙^~Z?)b Ӻx6y'O3'Ztm8«envR}qCs=^ro޽/]#\_^~ɏz;|bN?st;u:ԫ\t˫7>ַ^7,~t.]g,Yl#z{şOy%~ČL^OY?Uz->'sWYSC=}sڇ\1/FgI%~vC5~$ baѝ᛽f95s&Տyϋx%n>LO9f=8Ϝ^`&y4|q9>|;yt!IJa| <,.L/vrp.p>Z1rrÏg6ߜgom8ryOq o4Prg][>j` |~C!W.L9zdԛygpqT? ~5ox>ڛw_F2̗Gm8^ps>{S'<=æO/ Z4sg%t}mуx"p쩭Jo8ü޲>9ح}'Zqc~{6qਿ\ z勣|᧎ooW/L90^'?)qF9<:bˋwVS# iJXIk~/œjᛜ/ϴ|O+8Cg'7;(G>Lw]Vz eqr޶`kk_歃nϫrԘߗ׏P ^oH5z]şM9)o>צQx"D~|q7Z>MꙞ4FwK_brZG+:-{^?B77/_y>S#|I`a0$^tGZKNUTC___7l<ÙFgW_̽oOt_~g-_ߵ/>97yn|`';qy]N5ݽnoy3𦷸%mo|V˓׿ lF7~_`W[?"| M]cα}n{T |6!=ktx&\n=Mͮ_|ͻGxZ/[=a$2$9*\=LlC7{s)g/9tsYOw`wq]].C鰕GwOи'N~?. ͏.3ˣ'iNXzVхNWwa_L/!ɮ4?Qmp^PôClrIjԋ!|y>bنXg5{kko%a3Z9kߪwZUpFQ6?o?OÊçËH8s#g^t>w!qL~z _~z?/\}~uv&^Gzj}_눻;:z<3y $;YOŬuo5S^T]bqmDGe*9[^iM֙/]篿rh$n\v?lkx hO^o 8O=ToO;܋ݍbQ;im„;#|o~D{{r AI0z6ozӼuuuah5td0Ӭet87kɩ.,LWb]oq=Y/7=c_Z[x찶Wa G|8pN18<[ʗc?;==.ч4[ku=OW/?-9?1};;e].g&lI;/ɡxމ=dC(0|gYO>'msˣ?sz|2yMw-y}(gmV]q:)!'[8||ryM%?~Oxd:9Oh|ՠvq:ٰQM9Fo^?i~RV3ȱS\xbpiZn]'u?H'{j&|Ûob3\4(7c&)nMӞt}O ϞbqH&.P^5N:sjYG{!~ abm5o_KI~8߆dlRU:;hNqlvlWxԜaH\zXϝWpF5f86|4|6{(&7?H}L\|07}/^8hzrC7>aF՝{3T;}iުN5'b},œj= cO-߀/9ؽțRNbq+za|4bS㍯F>zM9|?3^_ o|#s9ro|w~c|YOZ>^[.=}߻GjOYM{X~gfyF)kc^i}PLo7wo𩟺+zGdBE=K=aOM<޻7' Þz 5񒸷x[_J{[QoĹ/GkZ|0b 5ù۾xfs9$ϗiw;;Nl:XX8a]>uvа/b}S7t~aZph>/xYճ=^a>kNʕprW7_uŒέՅӜ&NIua^ \ւ+|pkޞrه|'9׃0\Z<_5(I#9ʉW8E-y8<֫\Pr:~*W惿{DV=p_\6zFF1\|ay-5A9ۥ1갓ͫ?kg3gF7krடrCu/|]~яYw[7.^^/_w,_gkm+j㖏y߅'.s{wloܝ~ w/>Wx#׿RkVhO}mo|ϸ毑j}tvt<0Wb=i_gL^ݙv^=1_5^9}igxa'̼lZ1;|,ʩp)1bޞ_N|e?˺Gi.\7`ۥ$].ſb.X:_U_N'~)||j^OlJO GB_Cx㯟zyk%{^4NO70Do&tXϮ7Z1babmMB/p7].,{:6v5$,]/t~}=Fk[nˁa_ZYۛ џ}no<| ̵+dWu=OL8\7Q.u{N7yg\v9?Kw޽wbއx5w5L|J1+gbkDύ|U}'9^:&?:b3j䋳#h>=_wu7T|rmzk.:)chg>`3n?o=q]^՚iꑿu.̜Ǘvr?_<.?k„LymaǓjѝl}+/ -=PCɗW=8Ƽk5zR^8ilMndX[Zwuz.fs͹݋8|]yش=_j9g~L [=z-Ƌ~]= \Q^`ސ#J5¤a=sf|SOl6n=5bټ^ajvwr-L1qtvP~'58[ksM)݀Vۏ0tqÿ5꽼mC8zoM̛XG_t`g_3'[O'OpiuW,]=\ki}ˉpbazR=T/̬+6ܙ^~F5zN&_ֹ0I~h뙱O 9g'sqι^W_sO?:v{r莈0|?ݳCuO͹fyvH ;X?Z:{DՁk'%QO7eN3Vot7Guzmz '7^qa <ęY+ Ms=gDv݋O\/_9Ij3"}OO3Ico?˦{n}~ W<3qU]\rZgqq e_맍߿mBŷ[n7OEw[.~_lY^e_a՝hy9,~vY\ׁ%i={%p_%Z=g'k-39ꉇ7罓W?W|3b0:3oo$}7iwjP'>f9 IDATO-AipեeֆG'lɫv5jCLϽ(l~OYS6Oi&7}Lô6i-=?1/;Lt= xop>8%j7s`Tc6fU];AkF8\^ٳvɦS]|٤'e|@w~u3ap {Mg~^?Oze f.>':ɞX= ~ʭҧkJkaW/n=ӏ6)6i}Sۏڽ{e}j /\r|I0_ Z aT|wC~9%՞? OZy/:V1955='MWG,Qxi#Q9],m$YS=Bbi~yO?ꮇ=+߫]ilz[;;5{aJ#=ҩ( *$ zAiDD&b}ʍtS`hD((zFz!}gf}}p(Ud9ƻ||3۬Y{/{}?>'>|ƱC~.q.w'?~sk9ɏdgGY&us9ߐa;rgN~衽kt=~y#t3q n Sz!y[n36NvsN<;0y:~_6CC}ϏК8wah!]^]a{#'A| ~#9zG'⓿xy1 7+^y>=&c^+ǞO/ U'{ibeW+9s9Oo9_/|8#K}}Np5՞kf:jŧ;#?vz>vnxK>-fy=4o/[V9Shq575f{j=7 χͫC5g?7yZlf>5ywNM G94OS]8CcgF[b \$zۜG~rWW_C|C9M>]-g<˧7~]էx^o^r򉗾h\}[ް?[n_~U{;lwf)xrޞ;ssk1vs_')틼9`[9{oo_=/|DNAzs?#|zzR!FaO^_7&/oMşTC9'<QC>ԇ}C_yL:\yutI'mN.&G!iv kt!'xR9uØkb6!Ô3s6_'g A#P}d8^S׽U'^gw[ Ow//Gͱʅ!SJ}a> GkS3NXO!>{k'{L}yc1}5P|Xya7?N+Hf6o;q3<ϊ—ԇy67uk>C~>BIK'bmz[|= ;4F}ӝ3^Z7?WrbrWlC~z]|6w~7/~no_.s+.W\?~~G}گ8ta֞ٻLc }8vu'_~}=&{]~sx7ij$s{6a~} f>h ir^<֧>;p.Fp]*πS.Hw'ыui]6s %S0d^^u >ѧQ;? O/x&;|u5ߜo.쇍!W=N|g!GOЉ R^myWyꅑ?zlo[\foq駥b?ur7s?p}F~:χ<ʯV98O?5Uum]pt'0>R_b o~gMWz|$l|?䒫ϛCqmo͆!n?b0~vGaH7I}'%n0re+ঽ%=՗zFrZ cC~#>|8!V)V'li.)+TmDld^M>v8q3zܟ9w_zy5a3V|9[D.=cч|}Ξq9[iφc'Vt=XsמȵF}Cvͱ>Kj>ri}/^zvbūWbz?V憹A{&оy䏋vd^wۺLwOj՝Wc9IpΟ~xsv5 bϼg8lEm>Ԛrf]/]5* ;/V3VD-}I ns-_{.| /ֵW˅g=Q?~g}Dޥ.,r[-?ZbI?Mnw]_ܕ%Ӗw~O^l$GUo0ڊK+GK g.=sŜl;!wQ~|;;Tykjԗ7Xt<9pfW':ō'p0֖n3yrNu[[z'I]o)8O9a߁B Kb&]h>_$H_л<]y\9ЇF{IĚ|!?km|WaaV]-v=gWK]?֤W( O_[̅5ka#|֩wV\Na 7αZZ5>L(QMܰ|4?0W|WNuF˝|bI|F1MVSN֥6.S#_o{9|=3'\L8m[{FzH?[=iMl _.ko9yxxm:ioq)p|^ͫ#ON}DžW^q鞃8z8$gn5۳xj7w=av/{_ES5SOq->wj~܁wÙr3_a{aKdIo5 ާ 8ok5vr|zj^Oz jg$ͮ*zg۹խT{_7?L(G٤ajsg&6<1t_>Ayzr)7{FZy{y'r곘OΘR=>O.Zs Yr/o=0崇z=?Z3)V^EP/7r=Y~s\W\^-׹-}˙/9}x/tY ] =i˅:˛bys~ح:نlixg5#Gk=Oa1{X˩ylj?{J||t5aMÊzc=`N<\=xW-:〩&|:lP׬/Mpoms~s~TtHvH3Bӓ/6LwSs7}ELOy/>1okN?=\1~4Zgu/|a['^~G=;~|? /^ט9fUǜ,׺ፖK]rrڗ8Ƈ wc<㑏X/~h+^ %}9Z{S5q[NV|s1uI\d<͞9s*oyW>/l~yTX^:}x8;tt-i};s&;p:$Kp y`/|^`Es'}nNK8|7œ S^|Gt&˟6̔Cqk '\fJGk'mtFZ;9.ޛj ͜3H}.q~'4s:o[!_r[`}6<~؟}?^1{6wbĝ/n^aƆ9Uξ=1O^>>_$laT?>qO)^~Y?{E[+?W˧mo='q/g_n=zfV_}o嶎>={7ȯy}>|Sgo3&ovj'^qqN<9~^՛}/|b@ #OVc8luOحy=Ogt~Ns5p{Mu|m!9Z~_s4gOy]ig狏b&'FQ6'0FI[`}^O_ԑko.ע5':itz3?9\>k2ګ!?<{ҹa[(ήOsj\Gl/>M>UjG۟ݧ#88)bXò iyݻ8.~pwO}rozr^|E.a,z㷞c?\X?{r/ws{kyW1#-|yVޓ uc}cOW7LՄi՗ykݺ)10n/8q+ u$|$mr7^uB:ʧa^!O ߔx;{ϞqC=[`LZ\ 2CksZK|Հ5`q)T W<_=Q㪆u{=)߼#ֻ~6a3o/ˑ?a1'g~ȩ6ܔz|a3C;^7՜Ҝ)?_8~5oqyUbrǼh唧Gc1/ޝ$vL.9S|@IlK+wóå'{zG9`=WD? 뛿{,gxMĒk0rZp00:rbLІu Nf>k뭜Zs8Z/&<{?R=e[g9[N'gg/nX iOW\^C, m4ش}+WX/1Xڨ\{{DWɏOĈ={_._[?Ak^swZ,O_?{B+{/i{r}//~r~3\~WrSzyr%}|hM{sƦ93^9+oYLQLn0jNly/g~[gMixR}^5#{YN5թqUNső9?~~S.DܡwSO82ÑֲMև{:t>y.2{?Ls89\yy՞ZĻ8%]Α-zlszHOv9~ʧ+Oș<֌;\S}LJ;筝_Lkn=9jGZ-v59r Cˍ'?,+/>LθM]5&ϴ>FSWsn{7b<':pݿrҸʟ}WXspte'՛=ğO8⓫ 1uh9ahސSmriɏ\6}HWLn[ N}UCx{\9xvroA,婻ꏆI9-:g_x}Mc{_'^\kq2mNtgGM.o yֳO?ͶzmOX_~ϻEDo=~>YtӖ^?HAod'˛^嫮{?;? SCey/seڭkɶ_kob IDAT[|Y Wħ/bp(P"Wg>f/ðIn֘ k1b4Oz|pO\Ĕ;?ԇ}v'3޼7 a4?T/p]8aI Gz##dF™ȭFkI 3{9o/mԟIDܨ~y8} SSW?|5NxڛBúYr0ԃ i89W^hc-/έxFWOrIoLf|gS|nyjGwy)~5pEAl~xǦݡ<$nZde㫟O׳Zxf^X87n k]p~ùͳ Y\z y[8|rFRO|/{q57[>;,Lz3Wz콈ɉ4xȾ<$L1jg+NP ?.1mM_δVP~7:>?TC~o.?.Z?7\uJ˛0C,.qjx}IpO~>?-X}1/,/SvKw;X}>c'r0b \㭷a喟^诳8z[O1|:qwKx qو+Շir`0Oϼj[ŕ;s§[}Fw{y/r]ldyk_Dߣ}+_j'6=h'v!?˽꧗k+׿o~G?3^P_siMK[Wg*-Ffnv:'.u'z"r9fTgZnj'$L9|qG+7S-0{l_W]Z~5r-wnROzAwƼ,A !ϋfptORBñ|]4n5Og]~7&ѳ\t}>y.O:3ki/^O8`Řqٚa[߾yѱ` ~]ȩ\oR#5OٯOFDሻ|X<>>\;/37 .=8l^L~O-{ s<8ЋGI&{ nžҟ;(ٟw=s/奻;C'Ձk.']tH־+m|}%->{O#|u6.?_%f;:}i!^|0zدgbYԇ=S1}'?;08=W=qv%W'^;CYmpF㤍)^}0N;/I!?ۨ^x 䟾bQjoY[~yO}[~k/_o?rot~#~'|_syo3 g;9o.Ngoc`I9l&Fw=y|OzbqX']\-a߁?t:.QN %W&WW-v1ĝ>y(qƳ%=7朝F}\{0)/|7 S4,i9Czڒևz}o0mӼ9zKvux<| տm^Zta3/\vs1հ0{0||zJ9tꭼ|򫥿~Zlyp!&㡼=O9]4qr'5˫ӒZ|a?xOi=k5ګ˜ߜ=z* `j񅍯XI=cMli^%3?^VjT>kmbdw-F<?iϯ{}5߿Ϟ|l.?\9ï9'־wFmmtS_nxqcN`ٍ:˶c:o$Gq 3{>t1vyKNOMpi ;uk9`'"ytGw=3JF~Y~M&l#XKw7뗯fux'?|ӗ׼%}WU?_?cN?E_˫_rr?7zԷi|z87OFS[C=Ln9'zo9FWnaʡ'%kY3.S< ܻ}͸r{|sn>?W3Zdk\R_h] Zm8T8/.C͆'u1/.O}w|*f@h~]4:ⰾ̾JK.u/UO\b}͟M-1[~ #o>m3 p՟}h՚. j?9~Cuj}qN=kg:aħgqS=wZ_=c'կ>녏Guù=3>\>l~}쪽I1;{^]uYZhMs^Xר~bߺW}|zRwRQ ~f,g?_qcoH9ldǗ/\{'h|0qM͝=!)9vC/>cE_E5yOw:Cyvܛrg;XLG!=/$)~C,5~CO~z?\ɴ㈻2Y8a C|"Gn?mX\kog{_[k9>Υua7!aTo[0M5g 3gO)}lkz+OLx?NsN㓫X\j/NUmz8&Nτz1L7CqSὗ!)/ s6^骧-}˗CGw^r!ӾO,OXwloZ\}nZZԚG9Mhؒևz2/]?\)p zWTǥ/˾k^^w}9,Ӭn ~`_W\F7^<3{b{NS#fu37٭e3:Y8}~þ+\ Mnr=N]ԧ_e_<\O;WM;LRt16Сba]/6bT:Py|a&.O<<>i`W-p0b򇩏|>բ=8'n}x1'ŷP]Q>N_=R>℟<:mkT'y{6s9N!}Z}?5ϓUi9toq8) ~z CS|4_{wElo kj׫'g?|qS޾̕G⌋=c Yd}YOSܻt2 nbn{qعWa|[Otk̗?<=98<;3ljyk]#'/﹇xxov/,G4խC"V_iqvo!"6qz4ng| [ѼO_kVSs[.z g=q߮_[FL0,_&Qׇ}\sv}n3uac'8äM]mpa(6Ŏ`)0'x 'S/@NAwo~v1|0x\fy]7 mo{я~r|t(! W>_|wAñ8{QNKA jN^nq=+~y䱋O”#M_Lþ惉#;YϼNvo{03o*~^uS~u}16C2]lC\_s猋}Ưz~ą~ᛒv9ddIz=uVx=$Ɵg>9̍cbag͉כ>Xo\qo^≟>7\ybŲOGzb|{ϫ]_t{L/gru} :dq]9e/{'D޸ۯ|^:~g>9GuHwQjrMܼ|1AN I3osF>ˍj=8˷__;wqē>͎?'{ {_`.^>bߴu>_*j>,c.6Qc<>GæU?JC{2|yk^txEqjxy&OCZ/!Qz85L^iE󬭎[.mjOH0\}ι-ZֿMMMϡ}w8g}wK^ry\w3ďw]~7~c7]vG;^l^?sLi<ļN1P#^|AD/}Ҽ>ʡ˾VO'm>oEow`ouФ9,dT_M׼:Î=K5ǧ8ۏǁz|o_FkC њWQxo_k מ*'i-I9|zbpU9mԏ'؞[p3}YV/g,ԃG2}>x뿳ϐOfN\q~e`ǙLYGO_^vo/tO+_]D/zl/h=vꟊ--g5_{3o>k=q OxnvOL]nt?՜M'噳K|x'_ׇfo _^^B,\m2Zwuٜ&p x9!ŧ_Mz*.?ɫ/9̅ \N{ ?^wu.8ַ._[yKuow|=9z wxyՋ^6v[aڰ{<KיoosϬ=ya>>.qK,_^OE^muW//A__[^,|;__XG+Ylqp.S+́H^|H x:77 ] sKF7yQO`jq?n~G^x:K⪞=澴OdEX딹W{5ǥVu?Yx4ǡFl|tuW|Y4 ޽꧳u/ˆ['j9v>|I]OrHx' \ vDzK繄U+<vu!l5ǃtyiE_8_X`Ç [|jo98GrqN'hX/׍j饳>>KY9<2mFsS0/$^Nﭭ{ y=gmnY:WCn5čz)F|O'\-^!x{>'S˟sv&H ֺ^\s]wog6M MN=Oy'|S~d}pΏ|#}?1)|P{8E]_kxMtVu5RG/g%.Op%4׫/yG9gy[0ዥۓ[G8Ӿpˣ6uō73tn[gM99FO#'Ώzs=gn?뭸}3Ǿ=ejIwC_a7G"ֿ5z=aMCwD /Q5.p0v4Z ^. apswZ#_r?Bݧ&rnwy''W0ww.X% C2ǁ%Iʋn}nqxvymۜù[RuWt1;\g']ll=I8\9Ήىc;ai*g'ǖOE_sY/^I 71񵶰ta5ZTSm^lY'=;zc֕=I«K̫5q{|zrLpeC׵ǵF>&|sM>]R8&bJCg> i37b巖U'=z8[?k{2 Lj ۞׺͓5ȼzK IDATV\#<ȝ]OS:OO'wJoomExg:q~Gc1l2}=Uo-)N$xGiǗ+>YijwfޏzXr'FzI/vb4?(V'V{ܿ|gYX}d=$b {?YIZzM~9X2<|^ӭ}}_M3Zj9u2Xf.;^_|U|ZסXF>xfOoIG|x{r}΅OɬU:7%__d[$= vNkoeÌg凓GӤuoߙӤ9;n!l-o??.zի=Ouqhӧ=f,_͋ e2'a:>^=Gh3_ʧ>.Xs#4^_ˡe Wck[v|֐M o>z|G}&L/"qx&zGySL}bήeƑ8.c9909>gϡ8{w5.׾$\So C:׼gQ\^`S'pdj<[31=c;@~_=K\:9|uƜ{ük\wCwwitwaۋwS{?"g6Lc^=DhozTP<>z'WI?[|=?mS\iqO氳GrZļx6j擇>naW?|8H&U~=l GmAͮ9ܰzH5f_xjb{z&tW]zGSΙ8eFywыn}_Х}ZM`yaV܅oxU'EjI5X:5fo83%_s!⣍F .[G':4=Y__|}w_U_|7n'/5qd5yV쵯}I?sYdvt\w{Be>2{r.fmf^M5իZ/>e"]Ǚo75pjTkgaÙ׋0^i~o$զ~fk}|fγqw3^K׻svuWV 4;ԛjaf|,޲h?zb8LӤlZ-<)[sPҝ&-^D.SÄ S_08%է[/\xX=/>z>yRyu]jL?5[^k]i[~Gf{l\i֬&XUG;5} s7A4F~uݟ,<:j?.&{VK!>q{x\Qr¦/]Zj9R]vS4Lyڜ kT|jgǖkKl"O0Oa֗[9lBW&xﹷz/visZ=9%>ξԳg˥I9xҜ_n{inkFp>=*p>5/bLys<^~y\r~'xMzItwL`˛>s4qw!h'TEW?jWgƦo0=źCR?{Nk쥺6l~#zRa[뚺zIjZfL\[aūEa'ssµ0j˛}6Ň;]9꣼pSϘODN<}Qq/],R~㴜='ίzړm ovt+}R,;ׇw|dkLYv݁K{_ЄTciLn{Cs=I3_|_ӎGlY6|i9FiÓ0zvW{}ۏڪXZ,Otܰ@;Z^=s{oٸݝ7">zp&⭩yn9 .z9O&4v:旺ԥ hN^nޥ ^ꏮg9GO쇹=_o6Dž'z(~Ϟ_/~j;koBZ3ZZzOQg65cߒwK7_KwV!Vf|]:NZ~KܾWrȧs5}/wI=1#vkSή\8g<#x}磧T c#~,watFℯ:(Gu.ojl?zcqƍANC^XaY Sϴ9IaO #>˙3 xZ }nX8{ _.Lϕ0469Qt CUļAϚEݏ~Fm唜>wr]*WMoz'>qyK_r[zyы^\tf|%Ab{}?qn/b;os/w0{O=OGݩy̻prpj[=$G_a{Q=K7c~u`1_NH:#\$kl׻ׂ8oZ$b}0=ub4NKkg{S#xW3n)8oNbkqx6mkž} Dn=_C|_)=pz_[޲-o^.~3m'j詚s<g%zÃϽ_߱~>O9cE?z߮yzjᜢ|iq\'{r٧ s/;#$!0^^/>|`xӱ~r ˮaن' Q;><91\u9Fq1Ҝs<\O}5%'\":2s[>12l{7mMۓ`6~T]<{Xxiu%D^5|;krҸ);`g/=_zRf}ЇgҾ0;>ˣg\Қ{q:m%v\Cυi8{V=>g^y]q7bK{)̴4~US]C4?.90p]o"pO㔜83GG߻w.?vd9;ۓɡӸ/qgl16_w_0dOt"^+U] jg3-m<\\ꓖ #7z#t5;_)V}s~==S.NfÕcy}G 9[nܒׇWO]q9p|3;,󅧍!8_[^A|9rg6BѺZ S0eG^>~ܔ=W,AyKN^ߴ:9kTߘcNX_W/W7na?K-q}Ћ>ˆz1n똾R?fx/g._lWT/>᫡_û[}睖?ay7wOyo{ۆ׼^.~mkoͭ6w7Þ}QW>O}?I'yq9Qq>6>a`Nčz;?^`>;A_?'mUKk#;8'N;,NąG.[onttGåasz/0s-=yD0ǷsȞOd<'5KpprOƏ}[>~g?s6[OW{I3~Y9'Jrۃ]ƞ#Z{~4};yreW^3'tPj9$X>}e~˓c\M^d֖ȟO0j%qףgdzǗwHO,9nο_̋WoWj+v(ꫧ=?ǻH7˙^eqjxSr;p?3?<}}Ƕ o{Wl~PN?=Ww\U'#:ޅt7]A\Uzm`A@zSiH ]ZIsdg{KyZ{Z3g(v羅oؗY-xQ4aG0krO1qzT~u$qՓ;omsC>q#\Yo<P[\kn>߱mנɩ?,]Tg澘m|p1m<9_ALv>󕾜kņ_nc'dGMᇹ?!sllRa~}15Wԧ/G'8ߠ<'&*߬S>a7..Rc8d-J\g7c~gܑwkx_;>׽ ru\+G\dկZ2.~_nu-rj\SYyx,u]F͗l9><>J5WК G̜ygM3GՈX髳zk!79.Ǯv99×/y;) q3ng&97WQ9[#9*jΚ78Oi#Ϝ 9 Ya,O%znmaW?9+W5 9昕?c[Zxaki.,5p^Gnmy7Fjfjlv|l}Y#9ЌS|TŅ磟 W}w8t|3lkdmo{>?K{#w3{߮q{caޟퟚ=Io9UXs+O_ :wʷbfΆ7fxmlLj qV&\;#G ;yK/1a}Ñ|3V*^~p5Tw5o.5jb _ր1Ǧ}a_mtHO^ ?K1]>Ŕ7n%7d~lگj\3ףz@s-+_|īm[`\ >QQ}f{|෇7 ]ifozf g^uoKmCί8x[b?-ncʷ:l>0yr[//yS7%úr͛t9tື=w=ﱜ_}hy/c8.xU|,<7ss?ǝyGo=j\c}xW0qkd.};-u5gy~:nz{c߷a0S󂚟qsc>cϿzgb\a-h|`vLZD?b_غvȷ-FG7QNB` WG-E)mvCϛfxj 6?q{{ W20##~KA@OFʩO5c@QidaќiȰ'<;,įaWyaCf93\Gdӗ#OMZO7ǐgrVC80couȃXǸ=On|đ=pY3"nی/F9i|d6}4o/O9x\sɗEw󟎾 6>j>N\(lyvstbƂ'ϱgt#~琰qo 5}f0fzyI'& 1`#}-etF? ]aCpg.~G5wʑ}A8_=ž^vRex븾}8mEn IDAT x{br'N9P *L}U1>Ij*ه=>_XtZWآ|<&9do\|Ä?>_7"}rXp95riC3/'.mD͘"Wn+,~6sֿqd+րG5QQcy/ntaC­=BԺ <>ԣg^ShNWqH]DygonmWGmef|҇6x|f|o}~V{>tyhv_{޸w-x37[ EWYB޸*׻w{#5^6nzңgҸ:l [:moį <=v7֒?}ǝ=0ig;L|nlr^lK|d1jQOžO|۷X{SwmƵ#Ɇmcfy<ן7X寏kggthg[ k˫!,x\rX jK6/{m1_r #XgΦm@Ncf|:P6bCŔ#g/.v51|bY3V |= ި:fw;~XGwG}:ϸ17] m>KK`εⶔ?yR? .7P). Y =Jf+/>cW .fšߌV__|Tg #.no|pvդuY}TG95SΙg9ğL@;fҕ oX ސp9dp>:7ѥg3NX̼\qY}m3bu7L1c&cC#q_1[bY_ +Xåφ>aٗ}4㹵gd +ǜ/9^ryUcQ|xa蓭h#s.;V8]s]̖Onu=UoOk>}ŇO!Uhg]Ğco7|c{qNi.O7|t|S{57x󾝛oPpG>$zi'Gto}:>g>mgCyxwlް\&7~2׸rm{߳eB߸|syƟBB7e?a?}|׿?\SWm'Ȧy:.xK^~+?i' -O7DSfp6mo]8|d-o0xI`[˟/gWzcnC9d9әδ5X_RytiCD_kqƀ6 Klsĝ/a#G4/{s?̨3~ԄWZ|e O CFsl;|Ÿ1`O8'b5?~_Sm0zqDQ0SW+'}1kK^䰯Qoy:(чN:4sXk]!||a]\<,-\\9`?_\lZrLsljǭ&=q9qv?Ը ]y sxȍGj#G|jϯf$V;f䭶aoq\2Nk`>4f< uǑWa\w^lN1avd_L5t~x8k&qtbÊ9QsC.N𳜧=i+/oٌ{ 㮆ٟͫ>x}9L uԝ=5|6Y{:n"ӑkb(rXctƪ03dW<_Ŏ=bS05'ɎEs7>v-/Gm:ȥr ;W9nhys>H_è(=hZSk-ό}2.ιZ¨NO<\'qjW3oyԼe/` Gb":5hd_>S97pob /GҗsbO.zك֗9ᇯw?mh_|l,գ 560dgIJyνԙμ2VqgՉof/|K/eֻ0J'.{/yOMƢE0oɵo~4=z7}yyzS,?s/xۖˏoZ~}v}ޑrw,?[3!@.7/ِ۳?k/58?M9ib{x0q#}kKU}{/qhĉiE}[d5tkg|GI'Տg>ծv կ.wݖO쾳~qϗ?o}踭3,zo_z"'sZhMD6~ ̗~[y" G6o9(/ßq&lbIgo |Q>Î/LŇNxbu,j_})8.~m -\"y{Tq.|~Fo-`4E\w>8'>Y}3}bkޚ˰`oNvX3_\ް3'Ղ緓ofeE<'g?ً_i\>ǯ~=?}}>׹ux~y]|@'*ڷsޚ'yI;Z{}x,';˝gU;::Ic6Ns#58jƞ\/뜕cˏ~5 |g=~>='a呂0ѶKVg aﷺ8O.<.q,_,7t.^p湚g}ⷝ'69Wrѩv>rmx2[mtk&go`Z} wmTS5W{m}i Nj.\soszWg<1j,>.uSy~y8jk.xyFk`Ǎ;"!\yj?˫]jW]ݿ>~-:\]z[8?45#_9Nx@l c^3|w׍>屏Y_]cyƸ-/gƍo<2W}teO=Gus7Mr +]˫snssr\tל.cj^_s˟ H1ƚwZZrsa'[|}ǖ=߰+1φfyIo˷v}͚K\4[٩bgYmua5O|fpH[~Tmx9|aԟy8br귏|z>39`x ?DZ;뷲⚓ms}6:9^Slco9<zֳ;{s-yΞ_[VwP',?3?q+}{s^/g"!wo1bZ|+:?{=о >9gco9)`EO_8ɞn!湟cKx5l^>&=9y).?>,Ӝt>ox>E|} -Ww gXn>#3^aa\u\z7:]r!J슿/>hyX~'lhqe gtU}{f^;~kܥ^n?Wx&گ;tk-~󗛌k1\]ww5k=s7_k g3VfKjUW|7km'۬k]fΜnoݙNtM;mzyg?GBwzQoo1WF. hjnAW߼YIM1㱅9cg cmG1葘NxN6zܗzِ~8{~#dvyjb T#4N!#>r>x_CcڏfGlZ7}sL&6r$o;x#'67koyd 1[Y2MJw, :>{9rc'xr8b~laiμ#_cN'v6d:w'_ږZa *_e/_ G<"ӺNzЃ=q{t'&8~:vyb{8}$.?d{͜-jAoo|I5UWco6|>3goHl4ë :Nr>= xث~~xc$ig|GǛF<+_WQwbϣOX~o};^ZbЗsU\pA48(p^|~ٶ9تWuXӇ:4cr\d~MLch^48jL/֥'k(>l6njQ83ϟ,omg0g]2|5t.1w1VlQҏžoo/x;_WÑ_v<{^e_Ǖy?<ηtIĻNݲIEm !Vn3gcѵyȨOmMs?:!hCڄ^]C)j$sFnlNa(.> MJ_N=qœk.#xlќw͍\smWG:ےa4/+Nm7S0ɏ zőÛ<7o}#Z}zÈl?=V]r('|.6s/cKGS$a On&\`m)ly/ң9f!i~W|[3^95>]:8/,?=ys;w}˟njllx"p+?<;ٝ`~ ^pa\{r¸s ZUvܕvynoY}~yƭ]]`1?5f^qcO=b<tkdG}{ΝrGs wkg[kNgͭyB8}n$k-22|j]Syqri[¸Pˏu;`<UOOfm|_yqW5l,Z.QZ<~j9b9ow|}9y/|Xp/G^\g\YF<[}1x_r|mjhٜ0k0g?L3_.~Ao׏13ѢlsL|g^my[0Yf,O[Ֆ!c6IagÜk9Gǧlx8M?lЕgƠk#]>dukkdb7obP7f?2\9ͯ>(ybƂ+0 IDATs2?/hU=!~k>Sy'׏>pz7szWlx۾^#q15qGrmb9V{`~ÍW˖ugV}7㉝-H~as}#?=u5O؊k+ƚ- fλ@^qPV>^ =5qPs]w]CGh$ S]JW㼖s}C~_{/??I^ヿ#}mI/_k܍y76hCE:naV,܉o36qts|1ɸO_`js<Kά[#^ڝz{q#Wlqy(Ap%.=j\C G˶ V?L(W+jIbg~7œmapX\pG5 ]cWr開/%G{8;. 3Q5{;[5^>ww[}~ 6~1o=l~;]/]띞708)?) o?ٽ-n]v͛txxi=/Aw"q#s0q|3GZZ]sͷsxtar<8[ q~ŒW{rsG~d;(Qd1yFmfµmB "5~0P!yU'և&{ؓۄ쨱80y,01:&6pzmg9t~^~A.|B2Vpk0yn#o.?>(_r0;ät/|61\u\rTrf9\h@<"|yVm[xձ-<GrU'[ ?597Uqړx8ec1;hdg?雓\ Ņ࣡bo^Q>ݐ+ S:g{cTƧ:>Uڙ>|& ?lzqИ3;玱Ñ|{Kѱ7l\l9ɩdp(۬?]QkV:+S\qƀ.#{1'p 9}{ܱh/S|K7+S&jї|;N`mBA&CWȏ}914=LzVS״'ϜEgW{Ow?yλ>?u]wZ#W}yhk3~aϼX4cf0ۏ[~[ӪaQM\oZ1ֽq^9g??^\q\\;c׽٘Oc##>ݞ?Z>OG|l\xpԃysCqg]2]_*q_}x! &:mo]|;1^q}h9p<+5ssg/i0ʻ#<WxV\ Gj=V񱫎]|LJ?\u}WsX[l}8}%h}G⬊%ҕV##[̳y8!>_~}ܽ돗~r\eZz޿ߎX;iQ1Gg㽖S]>G~l9߷,]wM{‘}m[xcpiZQ﴾l>^+ warOf|9V<؃|w^c#11ӓQqOX36ش|;s2̫mֵul[}낷W#F9wն ~t0slo]6g qs.r_͘|59iCs~;OXr qgvuo|"բ቙m3V1[qz)89Jx`휋Cl[ C<ڛ߬^<鵨5M5̜`L3v5o!>nm'0ts1<3,ߩOw2@ǐ{Ghot|bo.ύg8c+~s]c%cLAo}ʏ޸ͺdKW)o>Ű?և-#yz|L}wq1ne]oǭ׼?w͵wG1q~v:c3GsS|zrkwAwϾVRSЫMd㨣[|v\;x6~GwK_z>\ŶuZwrx{r\6ϔ/>eGguW'7''<7Ɲiz͓据!z硯]si"9kٳ5*W/3|f\8x_nrtm[q=ƵKʱo$؝}ѾG~t=pkNUꊋyc׫}& jFlm wT [1c!nyN~*zDٟyha>ۜ3\s0]k[p- mnlhƨvuQ +'O FϦ98vnϏ}@m;-rCVMnd6q#5 W|nǿG~2dX̮k29w|Qig.x7H`koLݩto[}/}i[~{Fz[;r~^Ku)橱W?XmƥI?;}c_,\f}N7V|Ȩ!ϿSFot󤾫]+>ַ56,| 緗_o`p>5>>Zq#ůx]3Nsӎ;]\S~zE5ppQyMۯ'Ÿ=4906]scKsU8ǫs-j +3qxIbk /øxS<[Z;{Fgk_,˜OW1?njxn\=w¾7!|/C#DίcDC095f% *f?]޻ٷ4c3ٯ1+ƸgY<*? ~žfbH[xΆg (-.>vGmfr`eOϞ< -0VvΤ& ?^^6>p5Ϙ^kX֐5b}ٳU_|ucn<6obp5XkPMxK'zW?=}У5G3/񸀇|/5-<<505kC7Wq.Ջkbcmx0 廵ϷWOO kz:v+lv:{ml[]6ܱk Naw~9ԳůN˿!` eK'4v1(]b-_N:k2AnO~bI5S?Ӽ/֘- cwc<\ۏt+'?y.]3~|fO.qA3ݷg>e]}vݸo.[--Lc[v\4žo{c]t}DcUv׾G?[55{'Ld?r6?b31f{fz6o6lu|6~<<(렛k1sc(x䧿Nhywn9%/Y.~ܯx3ws1=o~rr׼dn<o9v\p GyF>jF{{c3V㷱vlrĞpw//7?h}I}~֟; Y͹]$/=u#Ӹn2Wr_ŵoFIRv.7ϯ_O/\綹gȗ\d7=_rn999e}/{.xӡ)G˙N5..q"ys^UwxΣUo?6܌j.NMnk;.V:>ecwAxuzbM|o/3kayt ur7ݶm7N)Ø3HNm6NǮ%Ә?g5?j˯8y8[yCt&>ƞoZU-7cƣ~Y??̯q8n~ #N6h & [mr2־c/_8. cGyHkOj@Wx{Sݫb| Ffmc ;xo/]?r2a13B͟>gYOC?ዪn0W7jg?87om+o֋<Ɩd=ڒ[G{:GԺ͍>|O~|go>:>\xcx瑾x.oόOOW m5|:QMVt(jtɰԑ*l>ʗZ< ǛP_,7w\n|旿l{9x?W#=dx;N=~^ AcW }=Agn.Ͼ9Ɲ\Uu\\x'5v;Mi.:!}-};|ipvp'z.~ي+f Gw~K8Cm[2[%؞vqA]hͣ孰gӿo\7vq17~zqEcM3 IDATKYk<_^'7L<ܙ:~}cu}^ڜW,7ыe.<|xNַ,'/E>Y廧w\3^2˾~rOo9d_7[݈_]kmrokSGaoS<1fx>{|e)goz;Ѭ'#t쨱%|ow$Ƌ[0 :/t B#Qyk3tl1`dyA?;вi}/l&#N.g'6NXH_II5S~X%&MsZ\/54lta3aj6#o;](o/ w/Bm\5/Q>y 7F9ϩ|GL_KMHN2_ڒ?gïTXfN"5hpT\SɫOu` S}0eodKP>ՅC\2^(2}q8ZC-,:{ΙP#̧&f rQEo͇X,9- ;L\\[큰cM[Â5~/G5cˆFCqqxzqI#t'O ַ=dm?'#wlE|Ɏ:l/}K_L>_(fַsQOfqd1X#}$B3>|,>0ԫWpW[ƗƝEWэCwøoW>w ~wG=jy;~]oU=z^`x5w^m/]cu|orq]u_|/Pf?j·s9~dR:lZʣxi~ӭN]WwW\ǧ'[aCX _6bAb®kbsǏ[>,9]{{/o.OzX_/\ˎ\߽%ӌǹSTg^;nʍn|k]{ݞzW0aRSM?my^ ~FgOo0^q ~?ȸǟ.?{͛lb$M]w/~?\0ǝ\˝5ݷ'c>\:/ ]xFǟqK_ \g<7O߽u}lb|Ɵ/ߺۧ8ro,~{eO}Y9.tk/w^?^P?&T\[{x:9ٺoboNw+y1^53..~QȘEa暓a]U( G_cφl׆pt2|m6w?>ӗ/b_c= O833&l͗7b,NZumǠ?ԜN_ _=lNPު!n9|8*qa3G7N3n)w/|)n[?ƈ~dڼ?sys!~O_bڧQO\Ϙ}W욵o/Est;S.5TG\?!{bK(o}~po{\c׍_oHa|Ocnl۸1whΝn'F3̰f_bgyl;ξffP[0OE'm((;otNt&XK/rj68ƣs3vccsF^s.,5T/ropp>DWmpȨ`]<[F?wּ狚;6D4fsEU uū*/tHW,=sAm}7bgų{;|o'VBlXs}or4g0Ku?Up?jl]]xr6SrF9Clb &ᅙoʆ7>0īJǎ#:_vC_..ZƤ65Wkg u1('1pmn='1ױU1j%j6mþo,d/Wοf)9zuDdtz4z.{qxqa\O}:sP>|cnOW޹>3mm'?3~pY_lodk\z-Fmf[&w oq [\u9ghtj)Z 7,yWw .Y-s7?7FӪ_L3W+_rs5cC?yUn>¦-YcQ[~5{oXb}o.h dmm }/?l{߻e[_񊱆wZfθ66CЃ B? Lܫi{ݞ6" no"o/#)~w㢍[ x|>4~Jyȁ{ዬw<^r#Ũr߯~土;߼o_uw\>ϩς/|w.oE9)fn 'wnye}D#lŠpuL~q 3.7^׎ve~~}yxɍ׸M+e$.Ծs\)r8}f>;(Nw*{ $T1Zx{]!ͅF澘8}{Ƌ}N{luѷNxWO|W"~ؙ`J@m}B 6AFGbI?4}SN9yÊaCLZ }yȿy'#2|q||WjjBdz}X3>' ? 'AakY?'/6p1PKK574prrOW q(ڜ<ג̷6>H<'ՁUL/>Jl{H?[c&/f o9yN^j;=?r:? [=__sM\Gc] D蛫-FXq~,Ío'RŘ>Z2:9bUΦ.ƞ|M;ߌK+~{|h~-ެU\s[0?|gbL?y3`?X;{̱^ck%[{CmGǷ:tbQ-p9C?{9MwrONj`S<}}1I'ChO}|&T4.{Tj(w01(s-o^^;vq'res,ˡB!r+rnoYu>tw~;/o|{n0^qK^jiN{|%F~Χ~{8jч{劷qaG?s5^ʱ|[rڵo\b\v޷\Z7lM)y`\-KϮx C~!1gw|;^@q8uE;_cs㹈?:6?[A[c<}o}7o@h_7̕e]{?|ߜj%8{n6x6-{.R``*ƌٯ׸M+yn늾ۏ{؜8g\e<ʣ*>r;\E|x)]ˑWxGۗ..wa}sq0*_]蓩%|;G3õsRLw'"5շl;`$'Kgg|ȑ:}+M֗7/b#xCb_r.Gc+c9YӕCy6\n ϱ˳XPH|orʦ8d8 #N;?lx_M~o}byx}./v?}r1;u^qE~[b< c=l7n8ϊW}~}%.yƦwr_ʳ\WƸMߎ{@W}36466?ǹ˧?J׽0^rCY:LۆUJ[_;NVOLjŏn69y\;&eˏ:;99fݞ*xT>_nOWOح9Ny4,]~ɵͧ~+yL؅,;<,cn P!`|Ԇ>҆cpgEg8ocf[|_y{X:NO^lӳ kn½̲0oVGPk>/a,kWĂ.Wgv>oMkG2mE.zlڝ[!h\snh!W8%=ȿ|Nm?646<`\iq[!8d|`3닍-ocϳl<wqխqaWy@_3^^Mvѷqt}rɹWh Ƌbp/N/OoBϘی1{x!sśk n†+n3^L0:aF;t^qM\46us=m:qv˜q$~6sWrޗǕTrKqޥm|\r1JWo vA/h/2ƭ&O[ȅ ^q>66|]_?-tgE>any+&:ܜZJqȲ\kOpش\7q֖6Np~/F6[~΁_*xg17g5oo9R8y^\ϿeMp3\8b-JN}?\ܹm)9|0pXwn{x]{B_ll4_\~lGn{.oMxg|+[y7WaNcޘGc ya5[(/9|eg&'1# ~7ns}r/X|x+x:rWwne/[ob׾f}+aG KXx69 kST95IkFZo%:K|*̧<{/o+~rg#e;^v]׿r9߷-/_Ϣ;Q {WJj.Sh5_W4+s}+s5k_x⊾ێuxq3ǭ_o$>W}^q[y=$n1F=5o7*mlqmpcXsmy6&U>zro.朲1sIg'7'~[p*~/oUijIt[L[n@fmk~ƞbkPNoZf̹/bͶGb5flC=ٿ{E{.?N6Sa/Jr66~'u2fbO!kqxcXq_Ul;6a_yUrhMkeKtcaOV; ܲ6>֞ǿX/̷qon)bnmXYbnv_m +YY^=>NÉ1t33tOmS}'g[),fn1y58ymvN!bo|!C;lⳌYQ>lɚCmv$$gڎ#ϾӅS~;{k:GI~>jD3٬&mmxޮlZ֯R*36~g 4^/=_1-5 w||l3q&c7-w[^/Wu=a~[1|2 }Sˮ 9~9姖]eׇ޿:6_ Ÿ -6{56.3Ɨ|ycC*Q_ylvo6xcM7-$Wޏdnwt;dVg_,wyЃ+yrߎ[;]uؤ ?/n8!}p;]߶K/]j;dzծ?^zrzE>ob;au~n15[Ao4|񢄛NF}O_$2Dx o 6·q D$ςqM뎗t:}/z<\F{xyF#x+W"ˋ\O6dE 7Ͷkrmg: kUyۆR?:fNK]~;.ƣ]9Nм9a{8]Pl?n۳7S?(|:nu^\oѵwܛ޸.Nm:$ML=\0rV s06j3Dł]پf[>-\p3.V+R \Ս鼹G_ߏy 8lUg߸EaզqxQMT=F˧8[}^E"Z@ZagoQc*_z/qÕr#V8?E=9_R=> upƦ|lcԇrV ϶xɍ ҞkϺ2wbgdž\aޘӳṢߜ9z~`$.\(l/@W&Džo9צWy#g3a7Sds?Ň&;6[̈ c[f}ɋ)?x1HM}OgCukG{&zŭBvKm٨Z/m}ұ֢5\5N&z=S0˛ܘ-ć޹6:1( /N\O6Qryvwc_gwƳ~wo}cN9eq\nMO~gO9|<8l!c',/-OϕYj~+>P\U'M%W|vi,9.& Gu&9w >Qq˧ql*0.ްq1‘[7{-|yk{LC>50_1H̸=orsE |b\iW {Gy'\a.g[x%ޘf1:j!+- vNp"F̴5~U7>Nڿ~#nq̋bНoQMO[DN$,p%kuݜs'öIgO@g?y|c,upF<&+vn>wbQ7'eg|\֏f;A^r/zDN;_uD__f_̳Dp21v·L=ys_D1jà+ٗ:}'ãѼȳ7 0B0zt۵ ~5d>o|dx#*32T~ämʝ}6bmeO/ʶ8[;;O;ߺaWآ38|7tqycDN)nf{>lLqlWGVVO< >WQé=ǁI{C =ޜ4/fi}NoW!'+ng+ue+39~:{9lydk-X+Hȕ92]*;m䜥;,m5X=;\[۹7&g[>lQYA>tSIjËO}d:LTp2:=lÇ5ۑj 9p/xK_FYh<.}ql]?tYeX .7G#RZntu7nWƺ>u |7%^cCrf\gF<ͩrrc/83՞_w=36Ϟ;^p_m|X_ov,WDw]ys֍6NsPZ͖wi?3KB9WB=޲jUO9yZcU^{Ÿ75ʽ7^#6K,{ O[k5^x!8tϣOr؍o0b{{qکcvգ.nvq*ఝ3v~gkokcƦgR%ۺv3pM>kƆcWzG-bDzI{=xK/hpÞuGd[9ΏxٕC7npm/淋o06-Eބn!EE}Vd-,y!Z;5@M?-W/2m\{[8;yG則M/72;_8[4k>眵6V|y<7Ϧ/u<\"˧qs S[l*gC^J{c+rTGCu+`Ct6cL[+G.RO 0vv KWt2Qnk}:d[Y.l;ٜ1)Y6V߸gZ057W-\f|9mev%.eOgh ylgqB6f8S{kk6q=Ixbst%+Klʩ\%W[|giٮv;aM/N9s؞ņc-|w^eר~旖:XqC:7Z=cY>UևX6z{ 7ކ9 .qM1;qs&[{0ElrFy~So4ɏoXk_2\LfwqܭN^prlg'jy_߾{w ^hϯ|y5/un:ۭ6J;;+>~3i-[uUWذu+ yQ /xظ7 ,.L܆zx?x#LnU>t߁Qb& ۉ q/1Ʒ^n96c]vkcO_v}7Xn36^/w76A]i#K!Sj׷nClftG^\/*.^3-6^KgNWy}_Gxr7;JcG>S|ptg#nxfdpaQofi89cE8Iǎ\EPs_dtl1-Vqpl6ր10s`[]9mpGכaa xr[^ڛW&'Gqm>WWloy\ɭ0N0Qf}*Fkm>r|Eً%61F)G&cV=|q6JtU朳"?l$uQNrDa|=ۯÕx-6˯>3a#"]DW|a+|-ry,UW_]L/<\>e6Ŋ/Gm߳3?6H7;cO,'K޸՗HX \Ϲhmmp?eׅ/cMsy@^3ޡ-bs6;rS횞K ǭރ3}_|婠rWvƬs(ܸ)9n2?bϘtgNy[ZK_1è~}Ɔ3?\\͓Ǧ xK1[S^d~1SGcy>!J8v?W?m }zoָ:m·~rO|d9ǸmwSK_Xvy9ϵ|7_.4^nq?a{ //^~rfjGb6nyl2~xfߛ Yc;q$_87I? N~+}T.ado8lȵӓ+|~}SloCGV|v򅋲K^>W#?}ιGlO07J MzH9LpN[0ꑅAoѰsBQH؈7ce'S.d'oD__aG?fdbz1y/?:lS?`Mt0W^C佯)G+}2plKk:V`5ON\b0Dy:$˧,S3_9E&ɣrS`5l b,6;3NJ=rW]BZ0na/c O?_lx60{#qa_٥/_bgG>#`.[ P<[C k2c9Z_ !ټ yhn>+Φ~dG&|Tqo9Q߹ o;~an\osNIy;ak7i_rQwcE.x[]c#fr}s+^冷`wU/>r9~<3̋^Rgī"gyke<0[j) NƌzcdCǶc?c;qg%fLU/xr׎[Xmk<\9Rbˮo/xKgunyë夏.q9'i_wB{xez 7cϊ\r3/ZXY款[_<7N_zۓ#u#6*9U~T_~0ZȐqѿǜc-_>ۏ^[mwӛ.onj+:9bz/~볧X_ĥ깗O>1}7llܖQ7'sΉ],_Ml}6+6ok^q2~n\jWMk IDAT<2t}>*|?#ko$ƺ8c}kMhח.}q`m؅}}!˾:9>/YWA ~-};hfނhpU{vI'C>M>_gVRd(ꀪN~Qn lKϟ#ɖ]0i{6@n܊ OdػrorEr'$R˝NT3cGrAv+9[qj6Xr:W7cC /Y].M|Ͷ܉ٰJl_=^g3:2c<<>?8_4瑮M=:[DVr1({_djuIΦy+ʧN쿍2-m G:fYW=}OcB>S:]>aU'{\1Ltdab.zľ\=yr6LM}#]O|ܲO/T,n3wUo4^Ͱ?/zK,Wj_>|E*_90Y/OCne? ^wǹxzq7w;a<Ʀu|cor/g>,xزď,26we1m1ŭ Kmlf}tA=j|YXe_{tQ {qWgg>g]zsAnU/7^ls~h9ϧOY>]z˭3mz>῵<_.25|~_XocKC^}WM϶߬o ӭR6v3>[Wߧ4Ug+vnˏYa9ڳoz\ -F94xǕY+Yk[;8N~&Y N\3KoQ m ϗmvl6b 3ο1x'lʡ6N;4շcVyf=A+}$/m_(wΓ>pj'Nwp"gc̏Jenf#&@6y(=awgegٜ{m6Sʛ6miG+#v֛1*˦_}$Rb+a!m\s;[ornMSN7={Q9̲t|;[m%-g/@O1+o`46}O9ʌΞN]f0rzmz8X97},V~KzD\?C:ѡ;+|I(}Wā[L<^8}y'GٮghOuEkuj:IMkNuݖCl+fk?{6G>3daf͞ٷ\Ģ/-Ç.=mgqP! 8d3E*>Wc]o6wq O,O{o]~~/x8c/]/ P6<*ֹ浲5%JcUlk\}Cdo9bp|KcmkgK\ɫm-g/6;-[hp_ ƛ_^_|x[c}xroҗ=~[ *-r~~>S1'yDs_' x3\gÇ {7s|g_y쫏0>6F8l,WCꕭlW9?&36-Em6̋-v^lמmu$8hd-ppXJ_a0:mԇ 8s|TO}g]9g-;ueK|`(rSf~&{6_L9he ǾfCU#2=g2w6"Jx0g6>ڨlb)/;v|֪ݲ*8+?yS}ɷ>c G찵 v%>lշT>W%NVؠUK5Om ^mڱ;5FrWG.51G_n3+Ou+KÖ]XSꍑvg^oTa&NCT5qVw›Oxqf\:t&{|fNkc݌]1lӹ ?6,8Yl+TN1HSS Vvl>g(3l +Q)gc{߸Um/'/_s~崯~e9\q9&Z}%Oj7vԣƭǯ/ w[jyx[E6|6nQ]xxΘ1_;d\?4y}_Aل1a;ȣ}ɛ'c7n6oH<b]G[yrniJϕL짗] ɻz9Y7ɟy#;`_u\vן/=s_%,w/} {د-]|}Gr+?cI6odH>O$WGsI,?8Lx/·lɳ Mas^\[V^|jѓl춴;}h6sl9~7+o߿wd3nyO^ zcq`›n-r#,8c V26rg8䯝m!e[\™%O8rkR_s1[>Ls|Òo?|%__ÙP'ڗmvxٗdŕY_R}6Eŝ}1g[ɛO~pBԧs>F2٧q?f#=?}vlMV\(X[}ِ|Vb?տl}TJ~Ɨ[˟>YnsSqόqe[ T g7cٷjOXxijK_ۜeOm9U[9W?\uȭN?\ccLGm>?:W%ʧpʿ~?m}Iv r)0fs뿱|i<3qNZh5\7XQKlxqk꿏+Ҷ~yʽr߇m˖<ƵNz7;k|'=q@oc/[>V?q_UCc<7yYC ;6>yV6fb+^zⓖ;/^:gc\?Dz{<Qz򬱱w>'WrB?7r,WWʙ~͆<ƃlO 636Yl?ٖor>do[9f9!oMr|UˋmL.6m3'Yo߿ٷèv-F綞-X>f2ۨ[p =l%^|˶pCi/H*vϮ>9,1)d?I4㨼҉hNV^l Ҹɾ1"?;>S~WF_NNv:Cȷx吟vubEJ4㫇% 5رSKsUfU/79KNViCc󽤥9I'g_Oy66a+:;>5Gg-~jLرAW_C[<^qDl'Xr}l>VRWGs%6_8( gmcW օ~sL>D[\| ;}80ȋ;c9'lmJs3>}Q:|.ٓ`fxym&#`M7ۺceS[F϶cM;; %ruᄋOxl;GZl:dž^Lw6툽—=$bk+?jg[7>J4GՋ9eʋ|F'sl6z{!rq{g> nM6~?<n\f7[<7f? 99msW(w}7{ y`svᄕ|gS>0g|u9+̏]~t](>[Psa5ǭW|=߳~a̲~k-ܲkU}k=p9u:~dl$}ծ-o_^/,/-oEx3YGCx ~xڭ0&l٠t3>~ŧ~7篎W}ʦz0KvrL>}o%~_}l'#<eG?] ~פl#l[_o nf.9:=g{VDMW[Y?^]pathyzٝa x1:>-_ <>Zgg␕_q C܋\'j:lKlBV93j.B;ł]aSLI+Oy ;vj¤/9_u9,NacL~>䨱=^FCbח̶tN_)r OB66~Hzq/vqbOϞҡ{Zg~Xj#6!%Z|mƫu]|%k^ł7I-NyurmeK;ɲo}/w9ֶӜN척mћz~gZ}ysBmdH[clpXaι5>);ܘ՚=g'Y.n9KVb}Vcc`דdyZlBmwNOƦ:lԺKNޱq$x+n}곽}qk$g.Nx᧟1bm;5o嘼Nxߌ$wb:j_vAY]o8JF浨>cc0pĶ{f?Sv'q>ٟ>#,8qn1_Oxly?x\wύsܽ?Z7jW[nu{,zk׍C 78!]RZ>-ŗNy6<F+\ѱ1xܸuCħ+i.\c?^Wj寰핯\㹉obE.~ӗgwOY~ۮW>~_Z>=6ya˻^^vr#9N'Gk,'Pgy4^x`Y;!+߶3;/x8./s\kl>W~>iwcyt;9fxΝ{ cQ_a֞uNv/.e_zx+/L8mi A磽ͯ8ad'Llg*vW|Wnԯ+H>ol¬-|>drØv#< cMjխ_q|nrrrϏm09$2)r9Sg;dH".O>s<d|[lz} 6h] |}>?wlٸ>gq;K3޴^\`21|>^bן̹Mm;ؑq)?dع & o⣸Ʌu'/䈿سN2"2bkv>joeܒG/.z_h,voA7yDfn2xXr$kw +Hsa)bE_`XdX|+F%Ոo'rLξ|١9Ɗ| lmq6q2AHOޘ7&yc '.dlƢ lcίa?[6OXapp>af'lCԺ[lkòg=mo~NLq/.>2~x֒?Q}\ G[G7L2,g6H[ƈ}j8>RL^V,`[dQ̆Lvta+f[M7Q~]U$/^:٨b Wflv>ϥ8>le֑+aT}Eɴz'&m6o??{5k9ΎJ:+Ft07gqf|Sq>đCE=7FO籁'd;/ů]\ cOX}[,7-&nc ϝil9t9?ofl;9B],>m_/]KJه՚eCП[=޲7y앯y\=y~+7wMC\Eʯߊ;m|wju>=/'g:y+/ǽM5nsNl$ G9Bmwg :cmuqƻ.Colq΁6?H]iLps ٽO=#rž6=Ntsa/,_qʖ`Wm6~qbOfNmĶW{tճ݃v8ggY.16}mvQgݾ ?S~*W<=̱呞mf&@?+2}4sPa%.\}_ܝf,24㯂?ؔ?Ϫg[/6Oů^j' 7b|taM3މ*J3hcё|8d} c,Ϝ|VƋҕ+lq+,}^`{8j k y$ώo?vR -|Ȟȿتv9E@[=y6+1뉛0VCOs0+l粕 oWI.}o{֍?X_;ԃ׼=N;:ls!7%[U~ǮQo_fnnק/~xk~Kq:ķq9wl[||6g;|{=JrƅlR3Y[Y>o18_3[زC^QxrUX}S/ߙomW0&X1Yٌ lM>/Hv[N|׎D󢮞\t0gC嫞Kap*<+biWtdƝ/"8kN{۟0? 0}~LПa!x }}k]lRWpxvSltHs8 kC;g_\}\Ӊkp_ノo٩<.y-\]' HuM_?| v<+NTntKU1>KOzM7y|w ˍq_?c(FyjgO/-F8f_>+l7:S=;83K y-W8;ŘIK)>יѧ9gd7ߞh-nm6[:5}wn=G\nuK]zY\˩x.ۛ֗5Ћձ5 |ڛ-o/F+6v>1W ] 9S_`94&yؖ]&7]}#9Æ_9gG:>bWЫ#6S87a%onk(NY 9u}ɉguón9nC/oB7i onz`J@T_ַ^-os{輪Ϸ ”şW.o^vZ7v5n8i,tt Nlm9 G./ Y}l˥mb썍9_=asmڨ~ߣ=su̸UEtꊹ;>co3+3zkB=?eFŜ0J}>dlXf=w a&MISBH"HI|I\=_qk Oꈝ"|u@GVrBbe/5c Lry':Xasϖg/dVhsnV'g3#ʜc1ŗ).S#Wonlj IF ?g3>qR9ɯ1KŷkLl>r(7Xͳܺy[E՘UBWafmnk+C|6ϙ.5 n|=Ǎ[>;vֽu -F6t}oeGϯel}Mfqk }Cnh\ɏ}OQq'g_\qg9y?xm?<?mYU](9 $IDAEm69-`whj E$%'9g ɹ{dV7FCw\kg>ssכl~?/myv8u>=/X~0G{\m}Z冷'}j{'֯fse?u}pOx}ĕ{m*/}3O$m|?sLgn&5/}~P$?ߞq[rۃ ]o]iy|o_1OXz~闗g>uׯYbݽW>}: yȯ}ы֯R|y_>dٝ<[e%>p{{+~̫}E;GZխ5ooHOׇ#i|̞':1 ;}ͅM3p}5*rպnlbH5VGDž/ndo>+˵18I#U߬ ~Zp+Fגyg\yb nʪ& 5l6x) OL}zav5L؜ 4kq|r9Iiϻ< ŦN|ʎO?^[1Նu 7s!|.bָ ֲM_~p;qle'_goy络|CǮ_ rm;O}z3_{95b߿C;G5|x5qu.w5gZ?fqV97@:Oɡ0W7w~RW8a77|zϧzO =ѷ>ᆷg>s=o ',^z5J_u AX5Y_uI8Nj4seovdrmb|aqJ>1qO>89L{޴Hy|3[1ͩ\0y,&>L$sD wՏW)~/㽟IF:[Uo/.rg> )!@Y`ĸF7vBݘ… '>wlɬ9b/."7.X.[.N:|6KOQ~qp'c˥<ݰۼx4Ngf->qG. GêM=ͅƫ8>8ޙ3||$_|zNCc?kyY[59sMuu"|`8ꫳ[p+~/p+<ʙM_,N>Gf/Kru1y*M3&ߌbݹ!\mZ'<^}rW 07WC'afmp`lŕݾ>5]bֺpաO gW+)y5鸎 >S1cNh׫=}s{zC<㱏]>{}?NXzIxniirDn>Mq^.xܝ]܈c~8Ư{b bq[-aޯ8qmq=9OYZ?%vj׿'._\t_[޻>᡿wlv\o2]2>}X|r}Op}p o{~v]/u+.>-uy̟}ᆽenW7//Yog?{Okb6s3O\ iog'Ns7|NX)`囍oWxs.|K.]OvWwoQ멺7o^|2 W=1e/=$VuN? W덾;o7n~Xvzr{s{cCԬoͯ9;y,:9&>{6 r>lˌSccs!m9tX~:tUXڬ؃#k|բ_'νοa%>}Mb`o~LZlo\>1ث7V=,ǭ\+׾{/^{z&G> ~on7w\iѸ~z[~YֲO_'Ҩ5eƭ7L[f[emΣvZ׺#bh~a}͗T6X_&fg堍ɴ7Vmp󺆷|rk[|u_׏+)Nx8\"Z}2ٚ9ag'nj鯞QuՓ="wd}=v?h#9^'ɤf0֒Ӗކ._87). ēSpzx6X9;ĈKS+ɗ8cU? 4^Z|]1IdcӒyU_?A|?h|q&Ϻ`[dzj|aW|jIWǟYÞpl N9g Otk>gAv=ܛ$=9Fӿ9Ne->M IDAT{SQ#R~nqij}gn†k:P?C9dbY Luφt|bמmsm©6{NrO:M3vO8ӧyLjcmw_|vo\o}r-N{z;K7'vFS`=!r\Wq6⎧go\|Z͍&3l4LŅ4=L|N#/olzŶͽ?I=o4̏rv7]otz4>ՊUmǭ9Nf~'#/o}}f y4=W32Wx/&8q̣q9cXa6ߞ9d/fa5r%{}!~-:q'Yx\9&Ϝ{~~^a89HǓO٦դ[+TcuJ˱}v.܈oN8?t$[ʸx69Hi'͚sG-M:ls;x\1us+O\jqA󩯵&F nV3,?n덾|W'v77՜WyVymW|$|]to=GYzi6K7w=l_sn[ Ś^8HyFv5X8+|3Xa>1vk^گ0C_lGlXɯ[߲a<<;c s9:gk«gje O9  {}D\y=ZH6fخ԰?W^rxoXq|/xʓOx}|Om]?1v}yS}_|*\[n{ܫ_|7ھ黗_ͯ|=EZ6Ӽ/c~q6WccONrZÐ򱉝N:hvi̱cT~};M>ÃN^h{޳o}ʇ!*ߞw t\~OYp؇>o~o~]I{Q_Ÿ٬qk&F :wܲ7]4r4)z³0Vs/rǓ/ 76&<2: Ch~|5uUK1&'l%caq8RZ Lt}8;Hf]jUW\o>T}hna.>\iLy?yϻ\rrtuYן5zL`giyΕ8G~l{zv ǭ|9yE?[ڀGcA8;/qLT6=ԝ {)8؜pbH9ISixrË5/8A\M6t'z:gWNm0~B_,av}z90ՋS[~o8M9[~\.#[yO]Z&yOX_գ^L~8}\r= ?I!o'>)>l:|y[G4nNڹYg,uI|D0 CϚ4>Kmn3+>$?i딽bv5Mi8Z_f/[_=qWG~s?|~߯Nm ^V-HK漬Fo3/W}b,& /~JcOdr>1}^m>pn=Dg;>n ^G>AMl#_~|{(&xbŭu8%; Xq !}0q\f׌i}iáְ}TVS7.s+-z˛?~5|hu'=qMo[}Wr̳]_,?u-ZR'&X~zٲKSOqܰS#..z֭qNkՠrAn|ՀkJw>wn|{^4M_ڇOx;޳i}s}).Lʃc`HkS.|xcu5q+F'l-S{V?v>dbp6ї 㓣x:9;[{&>sltj\ogɵorw3k+ׇynrxMOV<ڞ5[_jnsf{f>v>gCa\b/8Wq4?vb_ biy[roDG_qA(X E6RGyW~lM\6ԲqW?x ,֩6py#U?](_vzOU0Iׇ o{Ϝwuθrcl ;񨁝c[&t95':o|7_,=scqeӯsqnAKcؽC'gK_ُ[ >_Lؙw3'[|gՁ{g]H1'Ū[kfW#֥xc{.Sec9.ߴ7uq18ͤ=о6}0g9Y6Ixs{p?6iߦDK?g=ƹ|w9>6Z?}8qǯ$>܄#a줘i/9F]߫=_zy^\~}ʹ[3=1qo|s{O{9宰|Xα~d}$VgW3w?D_7c,~065{qb3?防ЍO-Z\b;?A~NOcKծ͗!|_|?џv0S˕fÛsN?N4laI/cM8|d_qX?W͍'>O؃ĜZ_3a:ծOx ?hg3yX>w/op咗Q?tCmޟ f֯5;1?vg$mf FIgCb&mbqxstJkGz #Os7Nԩ^5V/X1n`l}s[_s/FU8L؈yzg͕ϛ}ՀW=Xǭf]oOZSS/jc}ŊWgG5\S`᪟>6:ΰxI>[l{=s; 3[}1%d_9~ԼuϜkq 곋9;[}nĨS#8y#/Y?;tçëo/0}H beNWsQ6cOq4V`aR|4/ETgu/>9]0 L^b}4甶y ڒ_>:|6N-v>Vq>踲w-q]k'_5Nɜ}yw6אv%ח"奉ܸ۟ioDSV?޴'壉xpЭ3 ,L<6'6knF8a4?=]߼~Wr=s?R;ȍ8O?o|Xx lWO} _|/g:yaZ[H1n]IjbpbpIǘ k_>TO14 MdƱ\isKށg剣Ϛ71paob#< ~87+rˆ7wŕгzdq78<%A˳o5X\k6|=Ij9\I4ޤw?ptqi/V?V9\b͞ހ%4x|cO<=NwH7o_icƑ'g'Vfm|8You}smi%F C:ɦv͇ h/o"Rrcc+O#-O7h?8╧cܾzUW8z ~m~).$~Za7⬹Z5jj_#~y['bpv,CO}ΥagL+p=k&ՙӟbU$} õ9_pTA+Z.pa8f<{ ̡}ic~czޚԇo|P{J?yP3LkO..fkV\؎s>1ey׺׾s{5 gY>/ԥuvU/xoOƍotGzg91/g\ߗ$9u{/ݞyO¦'FG<%t?x \sW ^tkuvyM?i=oQg\]>7ο|o\ۨ'ΰ|#^}_{{{Z ] \>I5VlhG_W঎f^](ߜ/{G擣L[LV҇_xw*鐷`[N'ƁO%mbO&~ةQb:?N\` ߴùZ͵`#͡vGO~cR~i Gkr4/dbeR-<.ޤ5/ {] +/w9^OM̋wƖ70Ɠz=ovLsn֠MWc/O9-曽yOVo~&f/n^IW\øo'/o~5f3f;:K 9LJ+̳)f ^&>>yΖk?^}øVnx[/x}=?^o%m噏~r|]hx߻߽\^κ~"r~-'C̑#^=s.mbfϮϗw蚑|vM>g3~9tٲT#/߯]Gz/_'>yF^~k9#Z>-MMK^rU9ҳU[2ߣULsoΉ\]=8ag{ZTOqSjp3R0=959a!q{Ot(nŽe/ni|yϷ:kwo#/ZdؚU{tv:o>w4boC?(`:! f]m4"md#'jLac2ܛs_b֦/W_:f\j?Vkf5xĺw7լ9˜!͗:଎͆o̯kя~d.6\l`NMIԧ/Fx'V\-`}&OkWa:vO8}&͚XcxW1=1נ}N:c|trФiqM_ykqOKcVqX}8ti>k9_'9qڹKs=so V.}'}2κ֚Wˑq8Hl>~ҵE;zO&κhD ٍ[}bN\?Wy=QLG ^d9|Od̚/xr_zq;MnwM~r+}ÙVy'/oXe'UWVu: ˗W~:^}so\f=`q+_ȣegogm89֭c'nK^>a:Ջci`p%5Ls)/\0g#h @K6k:K{K0L1a:b[s_Mn_ZuׯNO``5v!ICcuiD]vsF|!9<}6֗7O4?_i㹮s]WP?G<;jh c.8tL3O}=WR FsMquO%w}'lZ+&|5q⫓yaOh,ػ>1?}\xx9yR 8kk\b|hz\Ĝq+G"1n5dYys7r'?v9ZU|?w /O|×;Ŀ}rok&1qo~7;ojksVcsڳmuܭ1N>i/Kֵ`+?nqUC{%_Ր]\XZ}xfL7/]mՠ1'1Opc}r{vZl5MΝѯFj/ -WuWY L"_r/j<(cK`˗p/1pc OCX-H8ZTg}y}}#[_:>Ƹ53Wv|qmm^:?~[N0zZ˭C"K %/\"^Jmy3\NZmOYW?tsׯa?xJʱ}M9A?{_}goE : g̗=[j?g'/?~zqĨ\Ƥn͌IR. nh\7JՃ7f5klSW_O35ָ>M5,v/\cI,&lS$ 5;u_[nM̷uIqŵ/>٧8 4xn>L.S?UKoғsߏ]_L5e ^-3KNܰM #.{ܓg4'4si>3F,?&A 0)~٦|0٧>̞>;z~[K^ W.}_K]֧Ğ}>F'xroqyrK]j+L= B׿~9i}2o_D8N:m?M -7lt\Z`q& v8?֤\`8mۜ l]ק箌˫^Uߐzy4^a9X>.u'.s?,7ӝCK_ʽg?L[ry5qs~~T]byx|'F8 ?\H?LԔ'~ln٬ 6x"G8' ƏN']<^gLl}\cXuUͦ6᳖U7q'a:޸ρW>sM}j/KVۼ>X7%|4 {PҟƄ-;L~xؓY{6:ǯ/>d KOιfl ׸6|ks={ .Z\o>_^6^h]hs`?8q_|W+Ui,3WNFk<]ow&_5Ln}8o4P䤫ӸrvlݸS\"N.vcNN[e#Kƴ Vzqc_^oISufԤ~5c}9a͇X#8?ko|U̱/џqVúu.9B5)l׻5ƚ}|5g;L0,;/={‰il3Wtygٟ˷q|~6˦%r=7Au;ڳq44W,=E7}x3}5q?n՟_E/sWX?ox߽>㫗׮_뽎}ym˓o~Z?u[z ]|k؞؋ͣ;=|{3ϡsڣI%ܛf/j:Y:Xv_--d\|J<0S[<ś#>q; _5[{}vo1^w[uy_؇>\7]'.ŗG>w-,^~yҵ\b[>~]6Njyf50W,{}ktob"Z&V9.}5MZ+&d[LC}3=%c7\ gu:t|Ų%W?<[77?a:vv|3Ak>6|ٿ w=O9Mfu =iyl7߄6j<ư'\phSC8qj[})6Ob0jOy?9ML~R="_l3bOIOuH ]N99[x=9(A0|yYK~60qa{|_<=F Ͻ^*~ ;75sKOg?Lin Wx5 w'f߇U{YCOWo]Oi[.A:<=ی'x&~լ%b;tׅ֪dzװM?{2َ \Anzk aB^?^.߻֯]^VZ67S-/x򓖛y章n~`=~Z3ۧƇo~wkG 7aiܢX0uޱgÔT11ՕOMlןqԪYׯ5\v듛[w 57xz}erv֔'6r߶s/,~'`} > S"8V^A ?\x~9Xw4k_,q>x;Ǝ![&K />[WK1L8X~cs'8=,{m=rc(޿͇yMl5#i}g'aӇ9yD|k_lhpkϱg?e?%}J狧z¨#1971|XiWXJׯ7=׿eXL-}˿d -'~lyk_|]μ>l5S/]G>A]~ǖ.Gw?=[־K3Oq>a\=r_WV⤉8ukx7&G_c7X!%$ٴ6 n>I7m_n#FѰ/AXs梭|j1g:kx}Zx1!c\_g-SމeGK+j#|rҭ {;10I5jfr֗O3֪{!]b1r7qf+>LΣ8M۬Q\{W_msKyLؙ b;O/ ]=z7g|)?S g|{Cy~)O>/W;zSv߲y?=߾|d%.=[-^8؞iu0^f\w~OGGDaa嬿qcR8q^#)zQ'ZNkx% VS|]',7X^'-7oپiw~EM]swx~?'c}k[_wכ?>/yVw5XvsVgs49o,X+?"s݋W71lSO}ǮZɬf?mgѯ~'u![1g~񫽽y N=͓Skn،ò&ͣ5¨XI_>\OM)W/'㕻Oyp8FD߃Ό՟xf3FdLmmaOf'%.u Wb=SOX~zi_ޘSZκ{Ϳpsu}`/z;~y ^6߼я.>=ojj9O1'6nuq ^hهkjk=lh{}׬Eۿc7Xmtϧ:6=Om BlЇ8fvw3, 𕻛)p_~؄HV޸š^)(fpq_e>WNf_{ސ1/U;ZC!kaO/*':%{}l.ax_<n/8?牫|#?kw1͋G≻1_5dk^ƿgn$>>W.1iq[~c>c‡c^;7~iq5rʞ->?H }W;}PaN3mb{La[g>Xf71Nk֧ڷ_'c^}rᧈK%~r}\Y>?\k+#O)ӯχ|o7cw+}.g~Ӗ֧O_Rro]tm_˽ ntˋAo[ovy3skh>f#3;?)o->=XZ|>z1)'M=' `}_5`g>㈓_c's^_ýrny`ݖ?/W}-wWW뿮_Ͻrkd/^#]Vr{ǿ~foZS49m$8hXq͙mr$;Y,j;>̬{3VQ1^Mb q[xxJqM9:Wֵ5Q[`in\UKkng!-_yc?Ol>cߑY>~Xg>3}k<~rsŔ˸U4iawNaf^}i#Knp 9\Oxv{z6'瞷T֟8 -{}߿,O]p@k7,\}<X;\?03>Nl'iqi)ѺT+\$AMbg\|vj?\xo\|SzLibqdb[ɵ{l|fb~ܭ<9On8͉nZj՘>~?&=%]ͥ1_?^F9OIԟ5!oRqm-w79O%jgL>Cߦ]zL=}zul|[>~>?)n}lg_>/_z;߶r}v9g:Wj=֯!/iO;|L i}/wSӝg囹g|lu&̬~1bZt']~͍'w׻-yC[7t~~|TY=^ٯ&^'~7s\K~w_^ε~S{c(je.cZlSo!/;AZmαqOM3Em<{܌ps]kĪ7}6҇akڹf?qqgoptn=c7,[8O..f9^>6E>5_.]mX5S}J3w9_G/r'-X—Wb*O#w]|em[ٝcֿZwAh#{89m!qD)9(ܼm}"W`KODPS57ŗ#_4 lsպ>qU''{͸Kǣ櫟<ɴu,)^Y_csldN-_i>)⦈ꇣ&R>0Ne[-X8Ri IDAT|#K[hLĆ5\1W|!77Iq實i#__≃ïկxoiIVl0bÇ1vLQ-3~s)&Ni{.zIWo5+_} ArM}=Պ̬ec%+q3׬x1s^KI?}Һjb ؤ'O髖/1}^3?˙֛zsf W]?L{rt95/_giW`pCۼVVĞ9=~ -yPNuU{\}3R9jAUϤ)_]_÷M^68q`^,-YgO=~' ~Ao;ηŗ7P_z_C~AsQiq576Rt80b>8M'ү&} Oy.G;6s_o-|֟ .]|G$aZ YOuۯ8I.&N'1I9`fLg11{]YL2|xIp_ g|G":ׯ>|Z[_ީ7~& ONq^@}hyz#ax8zrh 'o?a=ooF߰|=ot}nO^[ޱmc5|n$%o|+7޾m'vNuMO&~o_x|g`l'I'T6xxٓpt"·aې0ͺX-_'K-m§goIǧ5/>o ZS7Wz#=k':&_zظhs [@Oqk>n.Tɬ%rq4۔r%3~XM9KkQ<ӚڴkrLC{ooS-ipaC-a"ֵe`#ι/W'%s^lZQM$/G8sm.M,M]bfc_;b9:f0Ӫ3?=9곋%lloL a">4[gW'yy4w=CۇIqtRLc:NԇKsm3/; ^?#}^\Irwʷw/džsG*.շ' ~j!I7rOX{<=?e)hmιBsW۷bU`|i=/{j懳Qs#~O-64qNޙ;;ä9Wkqw^mz˝֯=Odݿs:Win'.?Gnq/|Fq_X>msm=\5uZT~kfM?Uwy&FՔ苑gCiSjχKsͦg&qqLJ}7OO?kZ٫?ؚVxp5{Y+N>~ē-~R p!/Yr67li>X|>虧tq3g3.e 83oXu:F切}ް>ozK*i;rO~bߥ zoZ׽~p}pՅ}l\o7ȿ>O_i'w׿znԨދ]K,z =isf]s} ~۶k͙O5vڵ6s}6uؽ9;/gxNYfA; Ʌcc$xF)ĴTCUa^q&[}b˸b5 Gwǫ?qqnPuO[՚4jc3\/sHifSj(a10Dnqtt{ۗZOQquȦ81kqO6|xq<ŰůǞs/q->jzrE栏6}٦O6y,?u>qOWci n=&AlpttL'_s9vX8[zf:6gO–ycmg|CWwϚ\3vˆiϦ?eʛi10cwoq9Mo|j*YyWt^Nإqx;qY֛}~n?Sׯi~#9ܶ'cΣ˫Ο*PI AP RP "5NǸ2SL+Q쨉D"jPPy((bFIP7lAo{DgsҼb&/)NO>_jUG4^O57u9/.1p3NƉ?vo}Ǜߴc?zǥD_z*Wwc n})^cVb[g>vW| 7yll3\ԟ?5C?L5)x[O:C揻:bųp|8z'~zF~saz3fpqV-n˴˥ggGɰ=ؾZ!{l{0c xg9{MpOR_75/uoΞe _-7\^җn_R?~ro=[_oqe{:.\brhW}3oMx+/X 7W\?%7K .^ƹԟy^o?Zs_ۣbf،?};;U{71PYWy}*'%C>5`X?B$l\._2?Dg'zܰS71a-vkO&s|/ߘsGQb׋Iכz;Y~UҼm>C_ūEzg=cN·'j9ӹTO98acs[ijۻ4_NKxsӟk/Y!㍾U^oą׼rzn߸}wTP΀tW73=b{l+O u~$]>u؆X=M^z3>zl}F#81;JoX?|4s}/Z};pV/_~snڞ[1ɵgŷ;-o⾡x5 Osܮ\O?򍽈)nl\> ?L~z >A/q8{뒞khi5g'XRp:lr __q'8Z{FVz C 6m cO^=≜7&_:?mW/nsb|{8[|]g>kU_~UgZk>|5p>f/xwJ>>bO7Vk˭; kƟ?[ws ldK/ݷuynR>\ϫ0Ⓞ׿yz3w{/Szu=ϝg{u׮}/So.〸 =J7BN\8d8CŗA)_5WręǕf㊟M=!^ag#|<dŧA֎ f˕7ęO?{j-8y<0 rI/wǜ1tO~knz kh?5=͎?\pz ~]G%sS~8X0nWdl냹qē.Vu3k\>0|hWʛ.\Uo[ԅS ˯o1|#?ᇋ/`g9I:O0ΜenF~|qM|9H!0eő{&>|˃)غʛ<0EW|6E5ASqO{Uꄯ܇cQnnTO^zn. K̍ħn'>AĈ76\bg.탟 :S5 CϞܳIo+>a7&o$l֑3 㣫+8{#]^}:PN0jC`ꩵ/>}fpR|Dmz+ǜkƪ}N|7|r盫\j|o$O}t{X|[߲g.o9?]xT|'Õo=su_ˇq97 t̞Zg1nSqt :N+V{W'}5Ww+~ׇN6Mh^E~Wϼ*q_:jiu3^n|TWvk^| l;ϙ>g s?3_NsZ3|U7ދ0y5}>_z{]S'הc7/CC x=(o ,yHs'6woև7=$pX8{(sp$W#ܾ7ʥ'q9 3c^[dKsO\~"u:k}}dbSY3&)oo~}?GOܴKXO~}wv_ _m;{^YϾ}]˭x bwrړ~e>7˧e|/?cow.<r[r;?}o{*GH_=+{oiJg:{qSow?u׏zJa. 񿵞{cP ?I18gs\q5ș}͉/7*یo./a}m^=5_9s]b ͞ӺX]=lhbq6',i_劵z6p|Rm\3@F37[Y,۹QnǧǤ>!rv=Wy 1eoo/f.67~+k: g5:lOǓmwJ{(nZovݯX9[޷9`$í7zͿvɭnr~_<'Γ39?oN}|XZ.,Wxvu'¨S|3{GEQ0rIO?~`T;k[qˆ5yܰ$U.yx1#g[a_aC}; CW 'inapszj +V~)C8~͏SNW{g.UA`cNf߿z59:=֙ߚ໦zƔX>5 ǞmӰIqpD׽oϋƞ/X;^K ?7iO]Iۧ>˾yR<ݿs\7\w-׿Wo'}7g>Ezmbq vZO}/ҧ;@P.'<܋2 ';Jtv(7r޼|GׇumNh}x;3'z:m/3Vn~ۻB? syfOw3ȴˡl=jeǣ~}'Ygu‡kQp;+x:8~c?:tiz~qFdX\# y>RoXk[OT#?|6\J0q=GFqysݜu Ϝ1%?L ץxzoqQ8$ip̯} u_g)lø6Շk_Z_/Uvy Eɦ]y-G׃yui=0tioSxᓟ1o_},=3]ܾtO)o/_q,o~ի}南HW`5aCН-ڐY^wHX^>69n%ͳNp4f{PlfWq 9{0qׁr?-nv^).sqq#5?Jekz?kl+uT/|5 &k c-_qs&-ހZW9y o$՞u՝>?[ $զ =֤^^ڊŁoK_1K;ba#wuşp{)w{ܰ3v(?_ױyǴɗh\_ |zM'|:盛?~;E_~gmwk/zKӟ'=j⯻_rŷʿ}n]jw~Yli}wZk/3fxטoOwhy3]W̴\\3]^\\( IDAT=bSwhr4^t:{-Vq᫗~v=Lss:LjO=3/L})7M{#9?G;5F׈?XӤ~&FkL|Iil8;ScDZ1{ɿ2?Y ';=❾j']]8:3)qX&>ps^O=k{Jiu`20ɑ+gbՍ9=ח֭^5pst[^S;pۻekF__k?r?EY]w.]_🖯:_ U~ozw~kedv S _:a'rn:S;ׇ8CsٺYNO=;NMʣդcoj"7{=Ѝ㟹M:ˋ˼kZK?_r&nz8x߄%vx뙏T3|u̾gz3?\=N.v]tL#zuٳ0ՙO;,Qq\a羹Cy=E]Ow׼%׿G/k^s9x⍾|rm_[.ݷ/z3˭!|z_\v96unjz9GnyxOM˙zKjtt fa{s`昇A]/ {aEl+V_l5ODNxHeפn}y9y<|bDl01AxsEl8ʝbw{ݧh䶿xB) ꆥlΉMOxٓ_0F1xz_NpCWnZ<61wyc:bs/I62\X\pl|Mz1.&E3c?p4%rG#g-FU8 }s>ՠKW#n۟x`IiC}]z6'9<7'.".4 ۅ5HiJ'Q\M̧tw'ͦT7_lpLr˫: 1q^pC4OO\uh'fTIMK37~@L5@xq=8õ|4>k]3bsm|(weaO=('?l|nc-V3>_u<7gGW]G=?N]Nk8Ns;'={vJf,}P\w:׿i|-ɾW/_ܞ> 6˫_Ϳ>q˽G77,_^^~)ۆ깊ݘg'51FW4ߔɝ?4j6/\.1gW0aƊOs'>\b>3}Lj3ׯHZ-m˩ɟ&YX4_2C1=z'3]N~>b-6X~cx1?'?ްi{ܜALNz6?.g&no'g?ʟ}T?ao z c7r_[pC5g 90ulxFw?[߰[sote9ϖ~חٿ].u|}i ^\_\t] /z^Mܻ~6y/KVv8;0=yX/Ou,,)]⟂c7 koLɱ뷵˵Gb]_am-Gk.^\<X d^x3^/8qYO?[L^R^_ gCCN~W6V~'F睛={yrg^yJ~fOa ~Qjz>]bry^q׿x~|q_D|4}ipOs& uyagQm=l9H}K |/y{7|=v÷zcs xi=˯wvs CQތ;/;C?3,~Ѓ7[8O\'O4\_,m\ۿyWz?J+۷^9w{$?۹S<: ;әO8Ӹ'u C>/d3Fnf߁+Aq1/.LBwЊ;(3Gv7c[s6]Ozl~;q#c\[wT s&X =  0񪑿| Al`O,a9|IZcCzgz,/6{Id7GLnͳ7{=:oǮɳ땎xq;suM-h9̚ Ipͽ-6u3OCLŮ7xaX[C1$_8]C/sɡ|%8k\gt5|3?g m >NC!8z Cg!o^^t|0U ^g՛O c/+0֟ѤP-칆[]TG~vu&N„g#z>eR+'rny{g7^|Z8yy}ko|;ro|dҪsg<}׻M_G-tX[m])nqs ^1$8zރ;A<$9fI<.`3:`|aMnsS:<IGR>+Ϲ|2yobDl?{{Cfrww9M|Lv}W:ZYg㚾iW[0vm >?XIXy8OSS>Tqɷ_GL\8|u,GUiɕq=xs,|cOwu\[vS}gZ~yzcd?u7kIy9|ӭcl֔>9y-֨7/=π} 5v?~U㝾}2}0F<Ǧsv~rcq7O{X d×=KwvjK\{=qv|Ze_)O^nq;,/x7/=xݷ|r\kv>e+/<}G3𺗼x-n|_/xcg.=˷./x{|_>я| }zY6< c{yg/G[|i||igD?7< >PL bs;$4R 9ׇ8^.?>'N;CipOya9GήFɜϽ֯yV_늓Ջ+\s)fI0z-Nrm>}?8j򳉺&'>'.fg/]4N1&8ɏKbǼCgv#_RgM/^uuFo6LM.s9˭7>v#KNk,ĺ`nkTϽ2?,{]043Lk\sb=|_}MNv5٧ҽSβs3~p_-o}k_-4sAyiyyKoӭ%>=:ܳz1.?(6ypjKb5wk|8l)~Ѯ ݀ G/;{ nqF3/<ΩqYNLMW6iՂK̉3>OmOp=LT#_Г&yl~b|7_O .Lgy rp'yy\r'GqZ:Kf|^גzt"}TfYk&/}nS~s8{[.w+,/?]n~yO|rGoܽ\^g/7X7.[__]y'n|m׼˵oxz#/Rkn{{ md_o~b칒nўm8&]r{B 9Ok],N1\49f߁+rFC@\[uغ4Bϋϖ evF{`za28}Woիo.lo֏5HU˼6o-084\Cï޾&b ֕m1X?&?zD\8Cqkmt'396ޙϮRI\hC.F8˛qzʥɌUw1a~iC?ՠ|g>s=4#}“dm] Gn IX3/:FsP~=#>55y5~0qф8tN_$l\@GW>IJS>k-q?o3߾觺~'>P;!0bb+s^ʕ_3Ƽ8{95t7|kYqwV:/ۿ[߿i~g%xsΞ{I9^ %=䣳⩎q?_zyyVXԐϞ/ֽnÉU7o{ 7.1s[S{oᗓLp1/] 4OϜLqM;1aH9nZGF?^qv}ȫ?>0rpGo]aD IDAT܀GpDM*\OjN;c8:aj~^ND?{0u{S0꘷|DrĊ^+ 'yk%zq>dxinx"?q79r0åϺ0ﲾ9w_)>ct~oo}׹r%OrsΑ}xs}헗|˳Z^unxrӯOjtrsn뛊~l/X9|޻˜t}˕%\?/>HtmK| hnu:hbvntxz:Xqn`C,6̟>Zeti5a؁ևQ~k~:;=k埵SVlV_[c)ΰf4l`7`5'gb=_᧮t9t%dO|vsq5 R No9{8vrK4 0p=˟z u0fs?nz$V>>6N=o:{&vwrtmK  ?pGKGo33k*5cuN{5V=TnQkV^}4ד:6[g.ܛt~zJ /- ,\ˬѺZSK:rz/ޚh7Sڣ|pqu{ַXL}lr}?9b/vu&Gtspk 3?q\ͳ'?b:aim'NpW?=x`لMMC8aM7p K9W>WZi˧ˆ.6>I%Ӟ҇#VjTgϣY~_M>G`'2Ndz?w.7/|co]7-o}k]z~sۯo[Wն_}K_bRo]pyoXOG'bx8f߁M :.L"McG9zr hQ>y ۘ|8ʥ&8ՓNyyʟZ|1jl\ fTQC͋Ol냙mėo=Ǎvi?[~WXrQ"`W8t>9Io r V_g>}ö?YdϚl$Ζ|Z.z#&JKQQiNF7&F>.zʜW{ 7}txi9|7lX{*V\w=[kܽ}q&:C,Ιgy<{T?ah|ٓ7lt{+'ήkϫz%Mn8{:|"6yI!]m:&F8†3ˮNJgW/jUc>.f_l5S],o];c֯.}5TWaW/NC2볍/8 |s;\C'$X0{Q}#z}ĥ}(.hɾ/GW{ꍶ'a>axfx'>˯cJ4̼}ϑqWEcan.wYG.|_ٟ]{rk^s%|rַky{޳|U.o~7,˭/1_Wb΍nԇve*Iג]bs:O(Ys9aⅳ7țu6/ S~I҃p9&Ǜ88">Vu;=u}L-~|Y=9TW>{b[S󩋩c=/?l=g>[/hp9Q]XB _|MzIkW>\y-_r8漚Ճ ՙv9fx'^/upUNs1?[NcsUy{_.?;okWvG×3'\$y7 ZcwYw^øON=^vy~6{~^W0tt^̳2_ .>>= _Ǵ‹OT|ᒓg$3?ݺy|գ[i-bjq?l8k#Te7Ǘ;[CyrF[G=Òjmtף~\0{}iO8&bzlf꺗ˇ9I}s㯆iZ/+.ߋr3o5Y<6O3yW<-ޫA5T?]|x] 1FN-&osjɭaD^͜T|I]pG O^cgL~j>$'}^=79g͹=fT3߼'Jfl_krdϼ=Y<y9|I4?>-V?s4e4?}s^OgUՙy.qΚӎ֯{!.>5!ͧsyPoɻ8n^|sZ_8_8a悔-cc닮FzKs՛Ow3~2;|O"󝬿۴Vkw\~88[ hxgXUg+b>o/t@zys1s"?OLC?[Q3{Xb}H`/p=fmW9g!Xdp3}l#=?iߚO]]\.s/'{g^;/cJ9|lý?y_zᨿ˥asj/7<|aN{}{>f=֟UnǚOlqſk9`bqq/FCOF߿//zSo:F>]?\tϣkkͽO\Z7뛇y?ߗ׽+n|[~?}{[AhiijuZLk>/Z]ԛ}Bi^4>7n(nN ,o.nS_=1{ [M>)ɮz3#1s~ O7 FbDn1=yR9[)7v11e^f?b0DzbIsZծ'x4_z'-w{4NRY_sq5=!br Q㠭'3M1 8 3St'=؝<=M{Si~r6|FX>Euf`qќ-y^a=Ov5xdڳSjOij|8|շx~{?qa %zTk}ߙ7̳ KÏssO|sq/F.?~}]{ކtNP^rlzfWᛧ֓%tċU? R6f}+O[u&k]î7^兯>3eǙ'& \|^jTw1l8>Rotvd= M?{݋XjL>xq:c0ūa&ܾNypÊk@u+g}ӭ ~Ӯuk^6E\yͭ^ಷzqF[^K}_:{y[޲i;~?~rQ}ce]r{.oY޾?:7yVz~1UOkm5=QlrاzY9pi~# Sr\??>f߁b9hĜ݁뇹XvH:]h'LX#Z_5ˣK7ߌ!n1$y0k.=W{+/?^z+77xxދX)i>:lzYAf<\roCWy5+>y&Vr!r&z}M؇gjaOh5mO6י Ge[K)Սyy?,}/ᝩBSk\;C3<НV}@w>[Ot|jNކiӽ#{9?L9='lO_o4s#j%ᦿ|Cp(/t~#勫l$qIXaˏ'X8zqQ=lOՆm=&-ƞ\[1krh=6fxzR-Έ389kwcNl5:#柼jfM^<9ybxu]ykp}!S|Rl=䔗懫6lpxzknFk IZ`u_}~^ֿ'k;k.Y̻~c{,{o/}S7Wo|jL<8k:~vl1[׼~b~8f1E"]n;bD<_c;u{y=ZNiaqWykⳖ!ly@5?*kv\tCobWxL\M~>Lr'¦ahܳs4:|ᚇS5>ͷx T_~pt/\s<$]1~{i.z뭇roΧ{֋c4v)abğ/;u#ĝ0uys!tc{ `}S jq9YÞc[lzj9|1qa8o˛ךHvuOl9Cx{U笗_n=՞]8x=h49v:.QNz59٭7ե+gƲ᧟ՙybq9z"˷c$=R^'y5[}so8qŦ?;t${,^ġbr ݚ6rK};W MI!3/0t06!%nϜ6Hߓ ,11^#xy֧g|.Ӏz7닶&j•f1kK0J?Yyt5୙n׼9zgV_jII&zp-1E:{ٟѬpjK[]gʙX^f!{_=oɫXrǼ`⋛o nRUKo? 7S ^1xR|Ճg&=k7f >'p)',=ſlj<=5zI¶5Wl…)'t8Ꝗ[˶~AמR?$L4]}9l?tvS|bpOڿmrR-p;O9?Lgƙ FH ?mq‰_ OW/}O5Mlb0ޠ\9e[Nz?9)6s-&g?{#ZWOoưnj[9y}Ņ[LW48fx묧{yzu[_|$?:c^&0ds\g_ nOۏO<֛Y4lCMW?‡ևB_vڏ^ܷ^OWqg?ӯݾzq6N^"_}2i8Ce޾Q?3&ӆS }}\ԛ}X.х.IhjO9s!xz!Tm1ꉏ3 L9pFʦ=zsW/>G| yIq睁7g,~Z?=WoΧ]NZb5ptZr‰K׈ 3mz)0cΆ'`W?Ly| \|0{o6xsIc>ZS3fC=#r85חW|O{\㫗ް}Oʛ+^?b488t}&/(fW<…/]znN7ٝèWtA%?sW5ynO3x\ZCz`[6WSXZJ_v3:ӝ!TռnNP=s |Y77u %񷮓wHg~8=̟q~6{M=>t\s)֜7$jE19stq˙1sy x8zb%6Y&N\oY^ZΔӞwbsO[tM['l冗ޜZgm>"|j&wuf+zTZ]ָ=%>zb'/W^5Ox2{ O5oI`Qn= G`z$2s|D187cqۯjdO{x'/nڄ:q'.5_}\`IdONw`. 7.r::Fg ہP̹Zp;h6p:[77{o>Rkyeҭ+N!=Żgyޝ˺^uo &$! )8q@-KTE*- IDAT"ZR *AR * B$0sܷ;{ﻪ^Y~k=Cw4sUqXz gXꉧ0v>;+'AnxٍaeK/NOj.z"+|\p˸X1w 皼+t>a]>'~k6a'|ܤ 3us}慫Wѷ[iimfnq1vTuFOŲg,5Ej>cxWoi;Ɩ^ɩVxTq9Dw.&1촫q'g*ߺ}XAg5sS.g:%j{Mp]MZM=OO.ΞS3 <vKGǻ'>㫷O4_s '/^ r77|x8+pS8%LSrag.:`˛q8x|/- _d=ˆ㪏i[M9f>wÕ.fI=˫vsy`rg~s\啛ʛ9r*Oo~{@(,ʖfǯNW9s \`ٮ8].-7-TTq}ĕ"0qL<{oT':|طaaDO:yڧX9[FSOz oC}ZMÉ7~|E gތT;\\ֻqs/%QL>jӉXcl?Lfb.IuZzӮ9NUc#/.s崾3/|@ 58;j=.5pbr7qjTuT~pag8㤺3c̕c'Gv;3]:noq+a:WW++>WCcى\baÙK}x{xZg O=G˙qc}ɝ| ڕ4rw 3Ib_/aAasI?}^n=v~:f۹;=V3vmX'y]\cxq=R}>\'.FK~X8|ͦgorqK'0ro%z_ ں]rU8?lsyӖo+vԿ⊷5 oaw/z,w& 'O~g{rp闿\/aX5򉫙8y՛ki7t|ՅrAӮ-p=l_;ŗv-~;?=b 7 WtSkepx⦛ nahs&^q\hω8Ų#<VqT =a#N][,ƖgSxYrǫgop']6'WV-88a[7j̿ucMkojOLcqsj~EsfkviX"mM 懅s̫j|[>>y#O~R>]+7 \qDOz)ǹ!}f}mzu'T5o֡~pei“a &_<#>`8OcuA=G}^ƹտ N)Ziظ́KޛW\oM5=ҏ%0U_勫EW[L-_seXZ>k$V|b^֮>´9ΡśCZ^׷[gaj!xSasNܤ=c?,N+l{w/?O?|xi|\kU_$sᕛzlv=0+yc9qֿ^יSc|[9#OgٗQraHX:\?E0K-}4WqkzH¥刕?qzC :jͣ:j1sjWڇ]^FlTW-Ca됄zsTC_aOY7U{":>Iw\~ʡgOl=|Y'2}MY8,3 6l4 ˽\|͑.ε9a2CL&WX7'5*zim:S1M{OîR?Ӟ7C)W71~WkFOԨv3]D|֩SϿiWoQ\٘.of>)j`[p'?={KkVXش}q֜x\x3 l> V&'_g-rzh__i$cI_^.#vsζs\>g+>`v~fnՏsV 2csv72o<4KO/˸o{*v|r:q^O,g ]-%gWsp8Xq9[MмgLLu_zWO\Tt|Y+Ckz]zl\./L[yþ3+C:7AuyT:=T^= qQ>î8XΌ%6I'o=a]nt'n:[{q3c_>ip|a tr\jw񇏗/)'nSn|p{ߔja8p&-^# IQNz:L٫8^~3,1/3Q㟗xXqn僟W7%ͽX_ȭ&k$Qfq"|VLXZi>.Vn5]>Ë.'Lso[WyjJN^k?|Uǘ=goY7\x7y<xbG ;=\8 Vg̸xwn:KL݇MɑߴLJ^Ϟw=cOK`z4ֲ <^+w'N0$__tV<-iW}5&լ=yXkqf]uX۬Pڷ׼8S9 k1έ_sխ }(#^|^pQ{8{-/Zo՝>9Sׯ71V.I㙽3{3Ll9OOz08}F4t|S=xG ^:3i='0LI>"|(߯gE<30w>W-Н|aY1jVV?O9'Z^{ ~+^z+ m=\||aZk _Wb6xQ1}Sĺk$w';>[✼X4<?/\weOXsSO}X{18{+7]p'o_xFyrĨz7ߍȽ{ߘYcʞ/-Wd]9[? {?x0ɤw]0llgӢ%D OI󫋻^{$4s.oWkzgW$ܬ[ߜc_ =5؛l.Z{Οm]Wݼms]/;~͉܃;;U?jq'[<|2]]׸&۵iÇbзju'36}[+~͙81oZ;vjxb.~ՀIk_sN{6Yj+8 -qXzs8c\Oc׬':/3呱mk_s؝r gˡD|gO ^z>/?'0[YC]_=ħ^5p[DwŵÌŽ_Ϻ|_sj$ֻI<Ә\_qgO[S>sg>v=L6~8gŶt+:"W|-{y$,=mrg $V&; yGO\]5>'0$.yèLPbvUiS¤M=<i%a" r./teg ɓo퍓8z]?7i~W9+wKL.8<յ=VGWNtصzy)<\}Dz]#3XU쵾ngpx'1\sUiqIaqz'r1&:T+b"sjI3'kTq7dǿJ7p\Os YxgMO!<>tpuPoy/W Rl`A(T-: Cå\ՐV#{!tحqVs5_~>C՟=b}IzuSp"z3G=x9jq׋zSw[N4SJ. dWe5'FG e}X|qۛ5aPSx?2{ VQԧo p%rωX`*w56br~i:+4eO^=㢳'kQljo `y4'z9ip|(n,ݰ»p5j[?v8WǤeL->5Ls[5kيw z|w&*[y:_.]Mq9|Y6~ӸZ|8ۘ=|SͼoCs0?s'ך7zIX{K&v'/<0d֍_n|y [D\8;'i\]~G5ˍ\Z/}zN8qz(G}zի/Ox)Oy^< m06s '635YOidiLpk/x(o6ͫfr8]^`?l98|nL]=-WH:?Ω{̷Qt\֕ xvu'+f7f#܉{ֈWMl1jxONunggǸZؘ.N܉ 7qgm\181^fjg8?~4c0Gܯ;\c]'2{U̘^9?uñbMmi|뙶zՎØÖCǗ>Ck|˿bަox_}x^v*>O}.:ύ/.:ٝc.a'ʥqLڈO2}^=ܺk^a׊xnnzbW5b5{n}q4|,M9[jO6o5ɻ-~\qN1ckN-U3V.uT|NG_03' b'fP]\g Efq=jî)W v®36b|.\nlZdW^_x"'r9s˛1yxuqxv՞0ӗ:aV|N_S_-Ko-L[?>o7~7\W~o:|g]]n/3ǝO]~䷛/^U7;}?[5nwܷ=d ݛJLZ=bD.)Ol^#>8yNϟ.UԨo[}iJ]zʦu#9òg=0:βxzU?8+~ZNq/FOٷϬ[qV3,-?jM<7K IDAT5U~%xuEw܃kt~6k^vYɛ5&|$j8)=c0{  |w~>n=tnn M:7cGcLVd;7^ONC~s>PnMjN7Ξ\97y.+Փk3Wt~y(?ݵ[=7a2NGW# Ww/\=k:0Slz?NuM>rؓ8߸3r㍳ds 6j<3_jӏa-K8<)48>t(n%w18;Ή'[K잏ڮ~Y'GŎtWy~|--~~?㍝Ë_^җ=oyn7~ ۏF''O.D܋COO"|de'HQ?i-O\V7|4|3oIp'.>(&q<[փQ#]OጉHcr\7ya?3:sF^8\I].~9r\ȎksNչJ/a4yGwZӸ9ϖ3y&72q{ [o/#|9cݺ]q8sMpt=ɛ Cgiz&j7]aq_Sx׹7צzͫU1_u OҧCaqrI.u/w;i-k͎^󉓹nd |~y{׿ߴe%}ysNuV6%Ϟgcރ8C{K-|qҝksMpZ]8\Sf8_՝og0͏] \s.bd oݓh_O{N/|¶~[ l^('-{q[lrU#\y"t=ÆI+-6} 0pKk +kvkW8c1ziYޞ7=ŧCbj#Oa eKmMϘϙs m=s/,]xĻ Ly1yx>s/e÷ZqH`7ƴFz[_;H6WN!G1x9N8q;V|mVXqz˜saq9EvհZr9,ըfDrON5ЮiX=&8՘>v~bqc\'q9W+lq{gzK7O=mUqq:eu[8my^f~εlÄʞflpqZ/f Z/zz{Zgo[9_9ž.F[gafs.j_<{>r./v}5s~W}g=toB}kO~}wwaV7>И^:W=#yN"iW:;_iljM>aL|qXU__䜵aYΖ7U; +crY֣5,qZ^q>>߫5<LzƧ=1 " W__z>vov//>{{{/zыK WMPb úf-6%de%@ƛW-6qZ5\N;,mNlW94\ZX/$|9w~뇄ˍϦI~q@Xw_:GIÊD 5U doՁu>qwRԚHTs7 ,UdOS ^+^y/C)6o6=g{B„㇙Θxpb')?:OʭSp)j=հfCeʟ}4Z X5q8iR<={~rɁwU?z5x՘VKSuWqzlqWfu9ZSsvalI\aKyr `d5_gpqqc㋳1\x+\NAlPj= %j 3yL'g-sgrPGŇ}__~Z?l=??}X6ס"6ίuЮ6ׁhu($81>9iL`&0[v+OZ_ϑ$S!V=^}qgs egoO{iNͣz,Nѫtn;_qmpÓgs3>`]ߪO'&.޻XOjtb|tϷz۟z`zΖGW#7|qŷrqb']'Hyl1sEyFsŗ7Or[oh>C[~}yz5W8|$4 F/0Oc;% t~~"|3b}g/^^9,`q= CTk>x>gxo.1>v0ŭ쏯>z=ox4C䫕nËׯaG}*r|ǡU55޹593O^NÆoNr[r^pS^trW}YX^1ա]qoҋN9adqf;7SָqWuk6]8b?VC:LJ'&3jS7_}8l5sث/gM.v~৔7$Ŷ^%ʌOz?EnRnZw&儑[?ygrpf,bZ5'y]yֿo1䴗9|#95I_=~;]Q4?KN1<;qɫ6({KO7/Iy3Vyő>7#/.|q\8"e _8'zrc|O9;8Zk ~9#MOfӖZaMY$61|W |0qxU5{͉?]\n'NysǸ5X3nfdOٟz~`ʛW^MpfK&65_B 뻾'~g~?<)g3`ڬ9vwl4|`(OUjg~:t8V-r/ޡU ox ws[OV/8y/ xg!0q].}s8ZgWC0.䪢n%jޮ#Sk!?[x:nݻvظdxGtM>UU9nm>D7|՛ߌ対gOqiy37[>vlZ8ʣkQqvQk~IZ9%i$p]jՋX|lNhg7 4xYbvY뼆+W{e/OӯTl=H޾Bv^tN%9.F0xqωr'Nl*^p{[N76'2WsoS|?sBs1&gk}wZq5/w]Gh\_8ր/5rdǓvͺ3 9fL֎ahyZ|b.I`T>=DNGg?}vqũ6|ozN\3?̝625sO4WnŨ\>GZo] 8~*qN?-}N~'8pxV=]2}>s~ޓث{nw^a:Ý_>gXoONy9Ǟvٰ'OkCڛD}8tjSa?E<ӧNqvϮx.ܚ]fR]?|Z vc۪/vYb{XJ_ |]/zt֗֞Uyzw-~xY~}Lyyakrf1izdfq^w~՘ZW5螧lq|k2&Β1z/W~vz[+7XMCA _$6'as'N_)r`q-{ߊL^{ ['m:R\k7m};\_ͧkṟ}uMM:gwvpx'7u|_.3Gt7Y|ҳGz.wr񹽎 3~d+i+ZjgwO_'~I簱SDZS}:sG띎;>r#Lvw~aozSXk؍zi6?&G77yS'WObt1kלa#)[c8KnOsO7\әPs.`E;c3g l'=G~O.9'0~TVTcJ5xl6o~8OS^͏/N3x=qO{[Rp+{7ǭ,%V?}$꧳v>Uez=Z ~?ؓWD̈́jMZOEW&^0͟4 'nK57뿛9\?[ʹmugrS_aaa\`grcULM+KxϘ]b'0^x+y}i]kQ-zk"·#\|~W E<=bh9sa' p4Io ]+*oxOc.I~+|k^0C+3^$H=KA?[ WG9)JÄ ӸOL6 Ÿa%>t~}*͟s}NfllOO%ߧ" IDAT<l<[:P?1C4m񸶰qìΖ3GFF}|~'~' =z}~ܳ3ri9bw'US?tpŗ>魚sN^;1.5re|'~'|9٫oܜ9׿xz X2_VZtug&lW-"{?ɻ&ϴWV?aqL̴'nMJOۘ>->Sx> w sglLLo_y^{=uZNˡ]Vaid'oOi>F8XnyWK=={WW=kǛTc&~'vӋδ N_ oUu˾Ƴr7u<6ޒ~s3LXU_ë_''\v\|W|ճs6sWK>)g̮Z/|zW_1\]>gOO=<&ϴW9| gb=1pdw#r+U}k+^n_8w| r}WBy[[$9Q2sMowywݞc=9׋h^}չ\S==*j?Dg=ݾkg=* f,?V߿͒j>Q֜gZܫ맜r3.qsuQma~/O=ToM7|bבs<8?s\Gv8n7Ro͚4sg~>/s?c[U[}®՘vs6ĉ_W"wr^3:iSZ<|Z˩z,~;]}ԩ&L\x|Ջca㢧5Oyloxo]0tUcU\>u8rxw|Y9>OwLn 9s{3:Fg$*kou\^ [?ǘg;͇ٜ7}7ysnծ-ô\6M8L܁9Wb#*ғ->Yk^N|xO#Z7Ys2>695su;\/|g<y✿r~ռ]\rͳ7c[9g9*geՃ]w֛\3~闷C|rp|^g[3>q'L9{6s&v˾3ۋ8_wb|޿Lo*9qUj+|<|۷}}mtg?7"Kt֯war`&s3}OS85K_7>ߜC~X0u%e?k?o-0k[\]G{˰f+b'a5̻zܹ(>Uo sN_u\մYs΅=cknnS.l5w>N31VobՂ9Ws'=k+:^9'&xbۣWknj]\/w/m Ü+?>eNx׃'ۓe񜿼QϞ|VqwCOs/z^y8zf=}Vw'r7˭+pٚ\ \iػ}<{z$}W~W~'>-OA<} >u&XoY?zf9[U?<ҹ8^}#}4_&snƪsU ϣ-u97 wN{$9 }?">?|؏؃?kO??}G|*6s#|/Da˟- ;_V~.ˇNyI˙+Y0 ֊^k[N::Ʒ].uա皜[?bjeOi_wk']9p1r3=c.>-~x2'+_ūS-P-m=l՛>v2񓟿Xz{>a 1{Xs}~Zyt6򉟓'>;{+u凿nro's-W'\u>Ǒ |G}>N= ^EO?uTO|y:]rVGn~Z};_qѷ{ݺ#s9e˛\3s_0atkV-8ǽ:Neu8gZ[9Us o7szb޹Տ5{ی_g_8˿,ag^;/U[9&.<.nls%aɟΞyWΩ5;" ]tu:TS.q_jM[g_>ku]j[6ޭ_7u-fz/+^6E/z:,g|gr $|+_5_<G\&NJ~_~IU뺵FwtG^Ɋگk_ ikzywK\dP58֔= +bGTlw;Uz3q|ғtia?!?/]= +WX?ek^E@y-ȣþk~+ + + + +(ZG}>}W`_}W`_}W`_}W`_} W`_}W`_}W`_}W`_}V`ڏ}W`_}W`_}W`_}W`_} W`_}W`_}W`_}W`_}V`ڏ}W`_}W`_}W`_}W`_} W`_}W`_}W`_}W`_}V]>7y79us/oTW_q>C? /e_kҕ?>?R{{#;;{5V%/yD??'Nk6R6;}ɟݓó͚s_G <_N^h]1oo=|ɗ|m{qgqoxN__qx+_yxwg}WEq%>S?3oo:ݗٟӞ~>#>J}뻾}};_9۲߽8?g9=eba߫;~mm{x5ncYGxv9_x.|&rw!X}kO+l7Λ<=p o.g-V%OOx7zpMl ?+x~?gKs{um~ή|?ro0::7yk.'_/.>3>R;}/\?׸g~g^Z>rV'ɏyvqɾ79O<7>^>{7͘{{7['N{o_;E/j8m[W`~>~'Wݿ{s}hw.i?Nw /߷gd^||'.?{'<-l>֜}؇}s^|eO{uW+}}5r87|7\|7Ȗxőyxu|?! /?m{~w7T} O<Şm>|ͺW><[^W_W{sss~o>|R}6?;F2k=s}CeyWaq[ya[?D~o;şg\GKS} +qUPxa5_#O|wܺYuU_UEz\þ㏇n6V9WpOu'ztM?}۵qխ}>xq^=oi_39k'~'}~oͧ]x,:~y;<ݛca9a/Fd{[[CG=}u{}?ot?ç@ϕ|g}J|&uq0F?>n _l)&Ǻ||-{믽}k/Ա>]{s?'k13N/ŋRٜ|C[x`N_=>>W[s>?$:ӡ>m /|lbvwa'?ʾ%WJ/Vއ}#e/+^'>ߙ;{3:k~ͯ9a~];`~۽+þWL['\:qǿzK5%o?mܻWQdrs>yy{~w̧r%GS\oa߮/{6 ~c(߇~U7poͿyڇ7~7>~w0i+෗zMk=|>Vx~qY=?8? W9ۼۜ_mZ.Y&ͮg>ؿWj;nns>?*8~p_8[RCzO?y}[߯kupIS5GG9qԖ_+_a< Oz}j^Oyr ;;mv1gJoo1C7_Â]{u&ګگ=M]+h[y;[s,6󀳦,4+M4i*JUD B/ &l AOD+U@P@Ezٙٻ|>ssrdL&d0~ |ŵzF-6<j]g!U[/וa[$^j!mVVm .O<#v_Uqj'1ᶌh\\K[~š`ǢIGM_^R*Nm'HqW2V[m?TG(z_Dy ?vf1k$d2/c6l`z_+Oy Xޤ\#-LJڣxbF3ha83p-iW\1J+Fe~čG2<}勡f?U#-. wJ_R+3ȋ-%|*EQ*to䍲Zk򇉺G;Ҫ> MJ[E~'0#ﳘ`˧:mkkS|s #0y ^8UO+ɘ7|pb[hH"ży)\% H{6ڒ>~644~#TS:ąb?Nm M_mY'm<?dW?0gZ}/!y۪Ȥ; UVw|_gHXO5Nm) *'9cƘ@`⋥xFʗ|WY$ IDAT&Qanވ7]wuea$ygj+qz+D6U?W1_:MOWu,=W}b;4e~=tx_+˩ك/cG~vQ-)EDM\+Z[*?tbD.o;kf/(ۖ(K!'@uٓu^Qg`ѷ[׾=_K 2:}r"EDL_|im-Ur->S p?xlu3:|7ə?4xˇ@1y}-r-ꫯSf0H@8l i2KQ,`~ftE)a?#}=Ds[Ejdkc[|S:c7XFUvSmFM{|5Ƀ2@iNtMW!57l4qF+QN7F+c^ԩ+˼IG%뮻n1PEߪ+)U:KgP͌O桶 i` jo>obM_mYMl.hҞM;r[ <o\^euŤ^N|1ol 0oRm%"ɏ^ǀ6$}'T0MDG߉E`y-{i c2,I= #O>d2b[:GD̋m]';Qxt6pNaqQOH=Yy/X&5LMr, Կǃ^Q~d_'yaYfmm٤_WyCCȳ>(ۣZZ̋m]H髮*e>R^M!^Ey)GU=_GdF`-b;jo/,]NO>"w&e)Q{SHlWߌ2UEY0"}>>V[VtbV)&:m gx`]_ U?/1ZR(u﨓5oP{:K,LՆ2N֭`$||pN{:ZWP?N/d]Yn&`߲.fiJ,G)Y|4뮻SO=Ux;Ǒ\0-wS-Ȅvm+u?ؔ<|H^#TF&~V /B Xs5 MVR[V9 >4]+bp%%TmŬ:R[퉾E/7xt'N^z?\T|c% O;3)ȝD'K~f `n4#/3: MK~y.%?d:>l|3țcv;ԝ暫>f;m%ܣqo˃[B_Ã~ פV[~\_{?_rNh|3=@kv'v%v?蠃ٝN%V~':#`Cc x[v_tk_Z5ػm/"1"h^4_֎{l馥=1>J>[?>-R<`Mjv^N: H$t|_>u[3|C6k<3?93<Wt6|bAk4:#m3ڊklѯ%}V +0dw^{bkfeSub0չON+#0`ksx"p)}oN3Oݽګ'] #v{5F#`&4lMP171-imM7tӄjV~΍[nz#0 xo@ |=yg7=UBF#`O'tRb>k`0F`J =. >)g}vַ7KUؙF#`0Îwuҗ{YgX%tJnJ{GWnF<Ğu34hu~#`5MD_l//N'a;^( #`0FA`WLЇWzt駗:(Neo?QxG7v#02މ8G`h)foNl$#3\3>)_uGِҗ{^˪=4Vo81-#`OsLvi ?| ܫB?4ٟT> 5e^)j_|pUhY-i#0`hkcڪXꪫZ8㌒&iVɍ{^Zm 3̐77̋,HmC=T֏ǍIfS>v6,Mʗw}_>1='/i}I|n4_S'?Yg>4s}o}N;-/ucn|SJFۏ~.oy[TSMx`#|#ePv,9;&;C~W\9裻u}饗KYgQ6>k)裏/| =a^ץg#sVهu/ /8 -ݾϟO1>m>OC9n捲wuW׿>'MOM~kџ.?}DSO?}>>n?ϲ_|l5CO~b-Vp fr-U5Q@+:?P+)/,⾛_<1??}9-3XI>bV D AeWO=X\veK?ۜwye LΏ|huY@/]WJ̾,/C4[⹃aV^`vN^OYxsnYDvxk*9º}};1W;{.NhFG!;[|ʃo# IDATk]^ɝ>sx]Y#qLC 4#{Wf 7%1i+ͺ}?;]1ʃ2f#`K:/|uuդwk! 9f>r_I_f4/vT)u#&̾UMi6 yQc28$!b)pPKigⳬbYlޟyr;`9lkӄ'}oc&bJ ~%KE|୍ [;,Mo3c⣀,k7@Sxc& |7+{u{@jo/įi͍[Uؗ؏/kqՠ{7j A _H{b^BGyy{Z-ǽ4W@ǜ{ȰN v>@9R%QCヨhqh0F`(ݻ黰]HGk]w]K4VY2楖DJπ{?ӇKA  ^4Joro`Dԯd=b?&O$WlF\M:u8_u|?J| ٗXA}c7}ؘGG-R,10½RA1 Ƞ'x[(w5Ԙdž$h 66n#x M&z+*G9MJ^qDu8_ j$V#W\#sQ^ܯ8>^`xiI4 =:H2i4w(D84M2+/i+b4`d q,9?:\}fd5{{t嫑~m3zGKf0F"@rm+<Ȕ+$G 4UTg q_U. ˬa0O/K$d`?meg_Icf3='/hߪIwRɘ? TtrMv8|!f_.re:#:KX<`/Ab`۠A˲cF``_5޺֖=j0Kx):q:t&OGQf(Oaگi]vI[ne7=P$$;@Kf 9sVy쫣Wc‹U7|B3E66F#0^*{d4 ыXxOe߱3@AR>{-3O,*ars_ξ > "źx,3(>V?ލ3.sE驁>o{_,^l{vLz%xC}E]#PAK-&ˋ,HZ~+f+nWuc4 DNU6'†T3#@tg&Ul*eA{W#sUr#`@J~xbteYĆe̦bpxuOe9(P,! p0c_>@{)HzYJug?.g}m+O<z5ɞrHc6@uB+ᄇ m<7ȵ, ;{^;k #3NŏC pC:R2(v>yCF}mYve_O:7mǼ|ThcgW^A|M蔵uFj+yF#`3~bhS2O/rBn$ena1o07pC*/ *IP׶"A*6Q\ ,d 7>F]`ݯg0xo8Ѵ-#0J` o`w}rL`kݭ 'ˤ 1?yskfQcTS=Z2оw[ۖX/<&j{ӋRK-klo0F`""wg=G?JrK?6h.G"wm-+ Ēȵ;L/A_%Mt9甏4G~۲R^fSj]~ |;0m&|f6 dAh0=/8b ' j6P֣:|jo%LZa3{WEJ/ioUviO,9 ZeKv[F:)Ftjo bXc6_}խK1gEe6 o1_=S.UC6:tZ[O<ѳ8`:m0#ŭHO ?$mqig8+1؇/y睗:LQ#h` 6("_:cL<"|/-YK6QG|u2sfS^veT|vP:|ן|ul8ڒBkOkKKF`2 U}lzY oEoC'~;}+bbc=Vnl]rn# ĬW_=me@swE$/Ů6%LD|_a)7ߜ>'fo2 K6dPU3*YKN;yqb-1suڨ 8`ADfl~eۮ| y0FL$vaow?_4e/5}ٔ+R}! zqe +^z~2'tRϞK?^'Ӈ ߀_%^@ #h,e7}de /txwJf^zeKVKbd+,]*p| zg9v~<}yf=&'8Ǵ/iKzVDd=))Ө9@_?ط>%}KBVpD Ϧ0#08;U<5IɝƮv [OSM5UWF.__'5:ÝUW]6ʃ9駟W]uU'1Z[y C'6lҧzj?[s6iyݲ:.//.;oWyൟH䗻]pYg~vȃm(;vg}6[d6>wJ1[lQnj}PD3+2X6Kߣ(9f!-1΃|:gy/RoU{cd!4oaƠgCtL3 &vTK{f;q^ 5#00޳o`,a06|tW},bCl&u2F#`oB<169#2`0F._c_6K,W^|n `+#`0F+nteo9=Ccc-XZs56lnqUoW$Itm#`0F#`0FLF2F#`0F#`0#F]6F#`0F#`0MF]0F#`0F#`I<7ڶ0F#`0F#`xo20F#`0F#`H"D׶0F#`0F#`dD}le0F#`0F#`F$m0F#`0F#`&#βztצ{7Mo~K,>gꫯnWϞ_|q%kÿo/Nw}w׿o9眳V^{,-B%I׼FY0F#0h|=iꩧ~=o8L3V媫j'mo{[W ~K/5\mj駟N3Oq?*g#`0= 8|edxauY%\9K?Q7W[! :yP׽u~ҷ^,>|9|<3}}~뮻RLe]6-2igN^^tE)W,NVzꩧGρfZxӴN[+,&'>ip*A(]ve)ܙLyбO3pvy/K~GcЫ|ppy;:=1iwګ.g}vӟvi.ϑхzj0zҝwޙ^v2Kc/Z2ꦛnZ~W\``b6% zҟ%߿t!ڎ}u]7.]QGW>*^"5?Q&{ԱۋF}Ο(eF;Nфg'N'9?ѧViJԍ*0?m󢿑?x;re0ڊqKXS2xU_tW¨gx M_]Loe+}qǗO\imz)Z^\2;lp(G;xS ~̛O`[2}r?_z9袋3guys=wZ}ջiGF'7tSHv[ OpƢ#]śJMؽVM 27\e S-Rj%,45]#?Cmk˷rYoq+qW{{'VZ1.m[0|N5/xKbJ1~`ԡ'T\zU[7ـOu:k>5_g oxC?~ҔGÞd GnK jAQ6aM-+_#OqխjҔ/9QZJ_P(FY:C|h*K1ˋȯǤugwqGR}Ez$hj؋QgxFU~&iԕ?o PK_Qzrp N: f N;-1I~U{Is9Cic=;'8|7ڐFljZ3j'?)xr.r?w}K?om#ݳdԦ d11٦uu'9Õu:IFBtvt˗^G܉ueQf,1 ?qrm>Fh)m7,]lٯIgJM>(ln]~O1a/c#ƣͺxl9&;CFjY_WVW'F[uvb~5^g5דji>Jɍ4^U` IDAT_Ǔ|S؄@87. 5UNN .X>p3  J\7dtGYnkD%T8=m5U0۪QĞ(}6[韱Hww:lK/ R gVƊe"#m0ÁG,OOj|^o֫fc!?02b[fݗa19Wb//,oin֒Xy|mײoYvlCU݄c<2 |V越(8msϹFgbE2/gJ:@_E6YWN;ī<]}Յૹ.҃Uyș:{I\TS^]HWxw|Ui:y*C\P~,j/ȓ]j4:_FWu:ӹ}P_!y ~K|E=zSpVHb~%U<|E{1^Չl\_`1?j )Wrhox[?18~@*[Ǐ￿쳪:%DAS]WIr ɯ+OaF5|-%-cB:UYH|ِl]#!2UiQڊfed;ʊG((;\quP=rدW>|oU?2 ԧ>U 0+ Y\%:@矿M/ޛkc0}L.pVNƅU]>Z]dϪ#4ŏ۪͆@2h+nQLŹ/j{Rk#X4%j>@>7U?yL?m{|M cٺ?*ԃ^b>21>JWI^<= 2,|2~.|$}B<٠LVW9ǐ>\;ʉO>}pYu} +] q6{xղbXwUmsy,,Q_YuQ>HO||_t C>s2+U[D9T9S]!./[q(u'^ ɋ~V5DGږ? jyQ'Ob۩ M8@&Q: 5K6  E_ex4%_erȩMCf?WvBe3 "OI>w}RG:֗Е`.Hj:묊 YB"n 'hq(@|4 BAHs 'rA$f9tu[ OM+tH ڊΣCr,LNHk0v9GwmbuJdo~8/ꔷc@@%8>,P q?Gѕ>aQq򇰭>7jf2%4؃72?ϗA*'})}ʌ#-N Я6 .AZxED%ϐD߂k`$P!G][d|S~E~ OQ*{iHSl*e% *K%K>6$l^t]nN=d2CDZG:&N;m9x0 ]d47fB:H+NN34n+;CFyV)eI3˪n [Oӥƽu聳Z 6ؠYn;s=ܓ:G]>Zk%f8]Fq?7VC_4_6t>+{ц%3B|ɒGyy$L> "bd+ <怐i* nҷ|#WAQզKP(-0nVYO$?H Kz"GOFȡz", s?xD5' 7k%/r~SᤴBʕd #<ˮEc^\L"I]h >v |Q\k+6U!のdǦ`_j_98`;]UA ]p.|oB77Ё#6G+Hi1J})K8!@^*/gْ%_.ܔ &I{o}[bCo|exzx4#?#|=݇wtMvЇO( #9!'M>ec#>&cG} 6lhGǼg:H)ԅ.(qB 5?]8<#0OԯLHO:#Kտ&rJ!Kp zM%GG{~{i Wx!Ͻꢯ#!+u|WGYPr<ȞBٕ. G| ꓨʎQY _y)٩!]Bd$'>}c7!w!9U\TZd.BlQWuK_ʒL_|VF Ӳ)dʃW%Ɉ/&T׋MU'*w$T:(G$H#/\I<; %cʬ y*[J ~[*<Ճ"8N\&<#0C.P)ź"HA'Bd(Lk>GuTq䫬J //XO1Dk4B t_~{tϔ)8Qم'z8c8,P<*BxP7ʐ/ꢇIeIH~uLȓՁ-aKk5@B ՉȧS$ K(C境lR&Aġ2ቤG.!6#~WWQ?W?LO\!E}@lv'Hr~,teϊE*jɃ',by=8z"Oz7W *đGԛ<O5aBBBq(CyXd%O_EzqyY|M)W8Ȗ%=Hu#.!DκG)[KHy`}P%["GI_)zWtA^6c@4Z$/ &y.hF`B# ĸ.V\tqO%.(Nh0]y#`DA߿C~mP}&#˛skLJB(5;7 cO}{"!MlT'=ȖJGeHY|C"M:!8S(R|A.=;䡇劧?`›8>vHKdH^>Wl+[đŸxq@ dT||񈶈||نOalWgⲭ$SEq(7(|Wʢ @>+|}lgr_G䤃HUt뿄ą-$xʏqDM £n@]d lN}ǶUړx<ѧNȈ(W(CeF}*a+LtcE_!q ;ԏk!\䀤_G|Bl |G 'IGiBГG<iU?Su/vcoke@^@V*k)I:xlQq#0D<rSO7+]XuCd0 Vu|?pu3V^y2_b~B -f}Va#vG{#i,a<%}KDNu/y)jZr#TBvCF|Q?rjXg˗x)Geb IjKO0ڕUGGQ٪橼ȏX6>Xb/1-I UpĆHV2$+/OeD)\ HHFQqʈlٓ-ȢCU!:HCȉG#_(.}:#HV6L C1m'BNzgmGJQ{*CǸlJt|Fx̏'V&"-#ŁlB؇/WSEո*4vdKK6ڒl '+Ya `a{W\Q}gw7N|z衇ҏ:aSDmMF# ruBАfz4!vMׅɞC#`\W{_W~7l_^쭱nFcI|K/MOJw^V]򣎼 sϑ_"GA}{N˶*~$|#.h e0և(K4*O|)IW}"]uU'T.qA$q-T/vʐlO 6zN$Oe.rš2KG2fu/'=C#!.Ȣ< qيv딦WC/}K_*6lۦG}"3}Gg]w4 3];\K'{G7_:~+bvmꪴ"l>O~|>|gL첋#PA@0u⦋.\̸C3GaQr#`E6>O$ɦ|T#+BGWeB99Je6E?H%HI6,r).]uqٔȈG\|D'_6'}lpCxG'b)]lLCS^ 3 _GңNPE_ yQUFLCXN՞$}lOZyUŧ2^sWaKeb#|lsHFdOUˮcU:0|D(e-DVS(=%dyр2$@ž|ٍ]"Oq鐦O2ez iM~?<|y,<萯;xG,}'|r38#q4J+>ټ~Pwyݠx /Y:4UNK/|zK,Q:}|K=\9ygd@op1 M4ą.t1T(C#`?~g8hK7xc;3<~ > @K竣SO=5aq,R%2_ݥϖgy:><WґG^F.lM4vR@r,6$C~B3)~UO2 e[K0E&|ŕ?1O2(F|x*xl r٬ ѣ&%rHXaO>zzPnxGrGWPGԑT'%RM#_ǃ_GMzQWiB>P툧Py 2ď!2StW &4ve/ȑ<#HApuLA?tTV GNJ+T\+@NBlI*.q|ARY2ϰ 16Tݩn=#e).qE^o_l=pK 2s.KW_}u7 MF#Pqq$<<]s"ed3^5#`G`0@dZk%\yᇻd7,~f)/oӭޚvut%tjFfe-VX!4ƙ}{8tof-`js%BzpRC24HcL} xSBDȠ/Ȯ/2Is4a0Bm'_ICYixq5sG ?|oҗ/Pid;GAs>S`V^_"G}}҄(OiGeNaA$G{Qd% 1 ?{/xDž^X6/Η>ы=$].Xȋf0* nA<'0F`#١81ϗ`|eauy7=܃rO5Bz8AN "=[M%+!yz`!o1Z!RH]قź`{6!vdK#Yx/UO=8= pzw⢪ݘ}x|IezERU*@|Wtt`SxHq O($+y/,dБ>!BF9HvSX^@G|FGq:ᓎeChxL## ?ؑb˦| 6䡫|zȏv;:iwxurؖ Uu'KX#Wg<ʆIm!ؐQ-O fa?B-d-ll_d&)G\G=tm} =YV|G$G_9b}yx\4G%߱%BV6lFWHg5EW"yl'64,}Uf)q wfo+81BX)O#```nCN;ʏ!@ %_A=xU>|Ɉ'[vos [G@NuQYQW2ثӑtIGt4qVu"CS`B*E1O*&F Peɐ|]rC(v#=+_a!.[ B QGd:JVv%fo$F`HVԶhG@( ybEoqxcE.~MF#`xC ǽ#>pDGHeĕ/;z} )t,W2<"™_eK|AZF>y|PeGsU4$4D| v(>!|:)MXd4Ph1|dv 1S|dGAJrPIX u ⲍL$F~!YaBrFQ9…0ؔτ؈$d/ Iq٤'ȊmB,iِRydSXǗU;WERa:aGp=DWmtX/مG~+GGUyCr#G a'JK>dGP6{WUV5D8T/⋧ki YlŐ|xf|uQZH/qd_đUE/BSǃ}StiF+p']x! b&虌0FvoGǾz?0Kyī?ax<-+Ö(WyHlIϣGL|ID؅yOv'zB^#qʒDW%ҐtG >|>U&UB^eJ6ɷڈ4FAry WEi룲 Hf!]#?䪡Rpqx:T!ĥ'[U'h|Ҕ%$B#ٖwxexH Cٲ|E:ȯm7Е>y*Grʋ:%puAF';| '_>Ó}i/1D/j8aM:RIR\r+-[\cU3eRtcq |_G(+|>yu2'XNSY% ՁBGiSMd#rď3`r게ST/tcy;k0F`:2)_!Hȋ]]\ z8C@9&2 yrU+H mx<!>!<,ʒI+T^,ˆ86!BmœzGٻ5ְRÎOdLi1 c \A$xoii~w] i_&0:7wkcՃI#+LOFV_OIG9xi{'rqw򊕳/Lʳ{v'0K;%/L+Y:mb+UOpu{|cO8{?4x:S=VK¥OU߉+Ɗ{y ^srw}ݜ;xQAzRI>c~gnw]w]=7]p[Vߍw<Yv`;ƪxrpZc_u뿌,ٝ8~~Ij[fyW=,vvvhOg'rpb[ՏWEx`'|=ǝgof9Y{tzow=Gg5~<W3ǥV#h߹lbt[{3~ӿ>tv>]T]6O5iؽlQu˗> 'F|t|'_uٝIN3.Q8kWY]h}?/)>1ؖ~?)w}kgUo_官)}gՋScr`~$z(\襼CO_ }?Λ8LÚW|4BMT'=NZMe?޳r”O=_^/.N [q/ i~[e>#~|rJoQ>O;\g,`WIlx^Ox_}o;;;;;;;;=}O-_tf+]\v p]Vy1zwܼcҫA\~9l~t~z̎5zv:4φm K>5aoF~VS/X6.viVꤛC.m/}t"\G_'_e_x;_ronˁ'qpo~}rK3+m+/GYWx ǭFhV틗CW_I㌟9q#`ʧ=/ Gx_﬛W/wpaS3oϗO,K(/re/-w'p'p'p'p'p'p'p'u'EPދH>;Q 6lN"7Z4ɋOd0qk_pNoKH~žm^=UC Lä;w l4LrWzOnY>~3lbФk}Zf\brWݳ[}Oދt VO{Om·}loTOCbIU֬/ RŖ#N‡Ov>_>fhsgoi-+/^_^ȯ^zHٻKz?T>qڿ=Gvy:l{q+nK˷_3|q9>Yrފzc=ۋ#^BC<`um|%˾Ϛ{'p'p'p'p'p'p'p'&p^jp/|>󝗇0⏟]']o\=%~9?^rO|߫)W|^˫B9vNLK>+]8LJV=3~m>^`╛M[K)[3O~k ~G}_L.OzO\%ou_vtOZΞGt}Yدc%>W}]|y'73]_9O==lN=f,v֯F|;gf|r\Յ _- ־ԛ8;\|ilO?IXՁJ9Ռg}=x^9;,.8,'\ZlW0wwu' gqOz{~Wz=,'ZW|r'r`#'VM 0/ʹt}&V'W-3;zx:n~_;>;yahOo`b,?mGv~ˤH7ekuX9UW,˖6AA$^ꍟ TC/$W+/'6o;-}ծ8Ot=}sLzb9곙/}o J<{Ω'[X&[Stv98wŧgj/NŽ;7ԷW;-M뿽ؿ9Um?|˧q[|p`%x zOq ENՇ|u/ֹ tRxyDm +e{.n/7^~V81L6_]=3<0%&X_}rڷ֝@t!^lSBоK}5HXqK|9IGY,.ouS|{t{ ^qq‘wqjW}DZg)~r'N炕C6/|SlkYqĝF/n8|獣ZYN?$>_g]O}L>Ѥ/&?#7Gkv33p%lXr믳䃗[?reŗm>4LZ/r3Ye igRNS̞}w{j[xigo'glw!KA]6b^Ÿ~~.Cj•nɱ_lI1ĞI]'ş WyB_Yɿ='٭pwk׮vZ _{= )_`Ygl-qx+ gιś.6z ^Oq+-OW=[׮쁿8;ylSc5x¤} 'g﫳宽\=s~`I-}l/aO۳VȷoOO\ΉSo+jVNO+gu8j9|Kܛ}wLr @û] {)u7r#9>yY_Ex,LR,,^qǷ[z|؝sNb9^c^LxKar|_yI{|'po5f ZˑorVߗ|zě|{O0[jˍS;:{)Nz .0ٝZR+'aG _5Gf__LOIa䧛_g KV=X &+gegLּp2}~.2kQ౺_ /^Zۇ|/gHC辜_v}e[.C]⡉,]]ߘ^Q L7fӾ ~5O"Ϫk'x/R/_qL+-G|1x nX=3pa[q?I9bk۫s\g%n1 CSt4?èT+xs9Eng7|:;|ןyk83tX\N˦pw{|p~ݬ3&ԍ7ۋ%(O>f%]}X棭CďGo9Œ՜[w+ꯨxk | tHo>'b>o^0X|j.!..}uYbtա1 %n/pǟ]]^jopk/T'3C] gD,ۋ)o_N'WB}+7ƛ^=\;wz~v$ {Թsl/|Yl5;%~^[۾{w{vuOXɗ3m]]6lRts-~sOVxÅ==xˋ/}WӛwƋ>Y ~S5\jrV>C^lZqM{.Q |+]"(f .[ #O^Lbçǟtv׬z8Zgp{J͇w\^NTwc̏+_.a6ތYnsLq8#[=q|=fDu IDATUw{U,Rf~rsv$cZK}/>s]*4nw٠}srE A=|<|]6#g_/.5$[{˻5K秝cW{1]ʈ8/ ˩zF0{&{'7j S_ 0җs{_Kyؾ|!cg_,ͺ^-sggWqaLp/8[ T}}Ӟv_ z7ዛ&qK|wbT|,aW'_9bo_WCNX~6'{p<4.Ksr[I%],ԑ"ۂgRM:\>DT-n_^t,]ߐ^o~ϟ/-ޓsbG:b'n+~#?^3~ӿ|~Z}h|Mobq%]|/q.'7qRNnqپe}S'fP|鸪A[+X]>K~kW-yټ͕r6 nqZYZρq3^.{.^n=J18y?k-O_-˾~@_t1[hiuѥW\zIr,{EW{JgO%Oj/WvU" #o?.XVH 3a%l:isfZi+bN߹_,8߽O>xȇsvs!O tC~9?.|r;=7^zm.|o~<`ͮqWx>/gq\!^x\zi_f93-oۣ{BzVl ~ʹ~\xh=+wxKO|z0q߾5-|, T+{ҹ8bj ̋xZݴ:[j; ~0Y]疃UotR0qxٟ)˾Ϝ}'p'p'p'p'p'p'p''C;I}A @{Al/'/<幰tJ9ul5ԋ[Lw}ʵʑ"G;͉O,{^vo5g4ߞC͕jm^xi_;vim^o>;C0]V.*Ŷx\XUq尋۟?;Q^|0ie%מ{.Xy8ϜzxxRnWèOX\e$#y¥܋:GZ[ܒcH\g˦GstXӋg|)^?3܇k&ٞ㨞3eYx{G]u8a⨏xۋcos`+b ros@j0_S.}?/H%ttV>\{p ?Q3ɮ0U-<~coY\)-o9ⓃŮ>{g%}]MN_aͥbβ˗ g9˧î/P.=wr<=~˩gjӞS-qM؞U9原Ođ]N+.6DN\~qVS [;c 9&߾㦗[+}bqnj>]]unXa:ϓ5[9]}}Nx\~S]LՃcg&fsG}9Sǟ iF={Gpq$s~/>s얋^huOFIN]B#|(x C/_*]L]j=^Ljvեi+<=KU3/WGt.|r}zӗVD-9$_vWp^-_f3\ Z[ΝM67S/ﳀŵ Ez-nz 3KъgR;;x8RO4|օA6'x֔:||lyTG,<9\,7׿ujT˾WNa3'c~ G;g_b-ϾaOy'~qyyˮwgw.x:կ,ó69iW'n=ly\rfUn\(__}zޝ@W}w˻6k狛 KwY w !갫~_o^@2MfgcäY\X> v=+Koe9ç_ORO1 4b.+]g^zN_5h0?ry,fc5g]aqHx9;CzHË~rU>+5Z,±w]|>^^s,^sq z~ ؛6?xK=r,0+A,vm7\sJE\/'鳟p/3K(W+?I++Zwwwwwwwww_l.]r]o߇ß`äG4o˒wfrWD˗o..^i뉨}gv\"yk[7qբq8]tlK>)-n>jGp[x+No>kMͨ/]aeuǮjęqʯ7<0Z.ޭq~׿Zr xt5,xa{ V?^8Yn΁#n,sj,#?Gz)/9 hqz)/R-?=ӜzfL8sw3L}ϰF/_ܖ[Ϟm\i;r>C/>c@ 8E]0!ı>Ƴ.vlk{RK3JC';Nb_˚= ^:Tն/g=$ g=4+W0` {vŊ$ɭNg+.p5#Z{8Ou볳Km|;ʋ |C 9'Ltu-oyW,"fo?c}dg/9=m\MҰinՅO惏3aԋOmmv=T?>>M~8 |l߽Ùa5i9!}bp8)vG~Oֿ2p kk]4&}bOww/n/o.Jh¿g ~loN VO9Ճrɯ7SÓvϯa~3ڳ[}ogyl9&gogt)qWW=w9V?s_jw8ΰ9~W;\zkgo_W;q0~ճ3/'?KO[:٭|6-3 brY;3rw}l >^c8_h5ʑIq\헏oXqpx[We߯s'p'p'p'p'p'p'p''|؇..)}==gB.#Vw9gM{QZև#RXuzou^q\ˍOͤ4 r~N.9/f7txI=^~_XuGcð/&O[DtDNg/|wn8^w69s)_}oǙ|ꋍꉈ[#/^̅ z?(Mڧ_Ώ5`\j+N'|[ka=?G3kv޳ճo_MWS WܞY0yҤ>Q{ s'֟ &xH9]^ Fe/y|ou+^Հufœ\{8捳Ɖ~}QSיNj{֏8nxOaɉ[w9Mb~oE|t,hy]l$L!xqˍSP{$>>|p|`7?sIw),z>%]/JɆz'^^Iu֙gK{P4s$hil8|/#vc93מ+__m6 >B˖C_7/rpqI:|OBq/V͆KokyqS ⋏薘զo9pDgN\a}5:ܤW|huVzqqUYzNO!qZF\z[gsvx/ +x{ܾ#;z%}_}o;;;;;;;;Qчt)S U׎oqx:>q/Gv9% )v#$\Zě'NvVx5V3g})vm$|?Ä=[~97t\gͿr\kSzu-|c#Nҧ $|还[7Yg~\/ yիjyl7o6gqz_gٷl0'w3c73G7=G>|ٰg^Md[\o<~FipjNgO=ȃk՛|+7 #%W]v0pLom16pF-6 W/Nj3g~[Og7xÉ}.8{U]lթZt.V}ơwW={ݙ 9z3Η>3$H'8m'\f/~ |v5=c~CI^+.?u[NNNNNNNNN M^.AF8[,]'9?rL`],XW4;,y7i~9~v[V6L?^Š{a,&_v{zkӓm>/Ë8%73L]S&]nrĞm&qV_~-苳/^} GgC]H ?[>_;l1xy;x5rOLu볺z^})/;Lqop|p!WN34_|0oq[]X:/|{|Ig]_mr p=Yo[feφ 'f68V8:K}C:7wx?? a{_X儇q'XupwUuQĭC|tHrR~pg[-usq79i5뱸4lrHz?sϙW؍ >-쩟x}SGjw'Fݾ/oOùhrT/^,}ɐMpC1U>1_//^oi/gpamկ 9,w&=}o%Y\.xF>;\SrcC~wn$O=n8fs8r5x3qq>߬pX܉;[ԊMUks^LI+WNֺIDܗ JΏk]F^ɗus?aZQ7}%N'#bt~:] _.1ׅ$%F.T_~aH'"˳|_y>=S|o_\^-1g>{'Kl%Ngç׏waۋjh/a㭧hyԗzS|KE~WZXz~9|$]ƛ?.:Ӿ/joOon{?Cxy:l\]s'|ۛ,^ߜ0p%9'?LLugr7$;~Vuo&\Y㬎X\T|Y S~:_|K^<ۓ]~$||aϙ5:;Wz<|oV{՗rwwwwwwww_j]^Xz?磻/_.hO w l#_4Y}=#)3NN5?a;'߾ۋ^}|4 n˙w5$_x_{ e IDATwŜ6̮j݇;-6kq{1u֋t>ij%8X޿gr+'n}˗_=#g֎ϛ?l3KQ~K_%֭hqv_%rٗ~-rxs&?{瑏|ôpVqbgn<>}H[s/>iw}/wgWMֹ<]m9wA}>\.t'[>?^,$})z=\[fʆHxvb?zӞOhN3G`zx_/W/l}a=+?Y__Yn-G~{yKOsO?_Ό ?_g|D_ziFix]˾x—c<:I돭bC WŠg6;QgZ~>>{rWG^G`7Vdë]>W3jVT?<^`l\YǸ8~1Φ3-ŋ|Ī]~ZnxY7zo)7#gI9g3W-9ʏ ZCgV @}xwxZ}6V{ AawRGҸحt.?q/bTw^B;Jxb4|9۹Ž|쭋KN<8_;ko>kחŽ6l0koާ%'% _=z1u>Sz[:=;]zmqg/&x)+_8|ncM/1çco/=0gˆǿ_,7LxpxHv._{zO1~ziپ!~q6"/l lo[NL//{>Gzχ}9?^g}V=e۟''^ΏsWe߯u'p'p'p'p'p''ЇW>/ﯝ r ].\8tar2o iqϐxwA(]>h8VN⶗lgD-<& )%[|1r~I|px,f|8vf9%g5#:jՓzb[+GgC3p7)>>zL~GxpC7l=Wy-<.\=q%pV[l|jVxw=fW_V\}a53WPlX[AMnR.fcקz?l j4s|tzT\=Q_|q7y8?99a<<z./LctN g֪vVXyzS¡gW 6^B|q'g5Zp gʕ_->g-Zt3g0헽_L3$B`ׯӥ$|x䊵KXqzrӥeq0vQuy!uQadWIzcOv촗Ǧ^ijfDlis^ɱwv}+|䖓~G_+0oZ3~S5\[>|'|]|?%_Nr6_r\6\q%r~۸Ųì}USL#_yzICYY|=;[ִW=p3cw6čMQ_}˱#xΗlj+7YNi0Vgc{~X+{o/M`=q΍_]8\aOǷn^-l@?j@/ѝ;7}ƚM4$t\զ/jSN<=η,R-ߌ=ٲXg&=xaaon)K,Ou|:?,>:?y4zퟎKǻZly.؝/pιqlՋfJ=k$nXfhrwwwwwwww_j}僻R%p}ZtKl]kRA]FÏwyūO>s4 zEsxkw|U.giVO9|[=O>ҹ3xxr~m՞rŖ[g7?vpE`{6acV3gzؾvű >oj&jWy8}?ʣ;wa?Ir{r[Α? U&[<嫶}p'wfV=r]ZL^8g"[왊؋Փ>g%|6>_YM\-/n9V"9շO9}Ն7\tY_\9avl XvrӾM,llzby3_>}v=ivՃܾőM]&L5/vwOvO'wƷqbOW-ֶON^j׻}g>Qn始?'gYOqө{尷}>ᖣgʗ]>xſ~{Oz)L|3tbn0W#5ܩ\Ss ٸ5쟖g3k | A>tAp C\eA 7yy}qmu>lZOv1:AhdSc9‡W)7È'\Y^{!rEgiqZJS^G.kiM|mzz{㔳Ք,{ٞjw4,9s_v&pUωoWՍ:<>Rǫ'q7R ZH-{R._=y;S~|a?b쬳 lʳavդ{Sϳm.wh~g {F| szyyp$pubhyC빾-g>/y<;>GpaӯA}.'/oONkWL_}o;;;;;;;;/5>k*<Ŋ_X/}L3ᳪ~c/w쓝d;%/;.z.ts;{m˭fvp˙].=O/7Z_)?܇ýZ˿v.gK/ٝsjrg.X;B3eL`8ӋC,33X|g9hR S Wo߼^-)_O<> '{G9U*f.=^S~4/?_^obOZ'3.m^FY\JwI>=We߯u'p'p'p'p'p'p'p'':C{k]қ A|巇Fb]s%F_d؋+,GX{5~ asOݕrrĖ~|a/nHׅ2rO˥{~z,.|x pk4LLϺ 1uヷ\cϬQN8.ԯW "/NjK Ͼf7Yp8r-y8-p嚇%N׳x9_TLI1\q[tXr>>K-&l47#ՠ;Ǿ};oܝQ^gq[?}}ꏟ,冧q$|08:bIξuQ= jў?˾Ϙy'p'p'p'p'p'p'p'%'%EOv ^*`9a^VA&G~ ݅'y{j.glSs<;O<¤+g}a;7^7 |;}K5B^_0ӋSNSou }kT{/&  pai¶T$\'a7^E_oUpՏ?Ltͩ^:-r+^_fݟ5+ZL`-L|St}on\:3 c~yDo/V~Z{ >< j~'~ | :g}ϟRo'%c#xp<=.4g/鳺qHOl5.vV íޜj碵>' 9Yc.F/b0&O8TWΏrIYÞ}䗛׆ înwN= }#aëWƾUq_s}}w>䵞>KWsֿ7a{{g!~?^`["nohl}%ӷz/ƿ=p4Ҿry[YIc?b?gj7SvC>>:\R=OGp|zb`~ Յ,5q8>71}IOl^ g[ij =o8Xqb>b˩n5z.{ND~Xn&ԥY^g φ/9pYzak|OzbwCA^֩8,/WY7NKϖf't6\|͋vf=~<~{@.C.`,;Eqz^8Vuk4_+Wߟjv~X\[[n}nnpll>uퟚIi H=B./8ԀwiPR.]v}NKoSsOl}sr=Eչ..Yz2,ég 'oo?>#{\qkO'I8yβ#[z⥛7tXy@/_ȷW7ZU>z(gqŻ)/~=|3xgȎoWW~q {'>cӞ ۲sr'}.cKϰlܤ||d L3WGz%>/&_}Mhqb)O~6K.\f{8z]?_<[3XY^/zL_}o;;;;;;/?|{ y+{&|.^= N&s/74.a'n~'ap[>NZtD+gsCxڟK|6.yO.?W |qMsyxr|fkcuƲO9II맾WMϽ\K/t[&9q;ˁo-G[ݹWc||q//'߉kgm'ՠ)f_|oy&0O>1ya}nnUG?}Ğl|~R:,ғ .{ɧ>$>7ښs:=sJ!̌#qw݁݁݁݁݁݁XU([Ū7omt`}(pgsw=LA!vak3{ q1:ęOi].lp>9aSO] 1u`rՃ5[aMĚӮ䏗?AÉŐen_F̕M FS=3w IDATlaԃ'.k[)r@TOjp AL+ob0b7A~~=ه1u=_9f 8adZpk]V?8^M}t8IqgpF _q^j\N뮝8R⳵_ϏjX9ú68/^g0S؉-vo-ְGl{À-׬y\ŇNգ|<֮D7_}[{Í?P}?w0RuUܻWԁw@8.g\t`|gĐzH^|'_ aL('劏j9ڬd9ZsqapT<obÚO 9OaV.v;s'1&{ȇ+֜k׼z`?9'y8z^s\k$4X^>{ 83%l<>#}G^6}Ś/͞U1Ӝ[|vW) Wc.NdiŲW9>񅥻I}0/OLl8$3l?Z=Yl헽fSe^N9hM~|~o5[jA&]tx͉XN < &ՠ?k|'RU*s<,:An> [m.?&Ϟ?;v=g{q v3/?;aߜn_\O̚5sRLYes1?e|g 3mF9V®&Nsc+i~}p=ؙt~5OYߌ +ϔ,KчbagrO},nԟņ=_꛹ݴ5/WkתW/:|[O [>8B']tֳq?]p/g眿Sbõ^gm]b_Z:W|k~K4lmg^4>1MLsIgݘ ÖKg*?컪[W1ҁlM\;vHaa=θ=vB׮ńMgLyo R9_#nx뤚έ󥋛5e׃q_q|᫻faVk>1bOO\X>[K7/6m_#QoNo_ڜϒb|%7F{ـ)_|]_.sX7|;xfls_3g|h_3},.u<c·y5X#5.ZpZedfmp&le{ti5Ǜn?{z1HXvhaݸ/zp/s~̧C|g_Y+Tϱx/deg'}I~z|%lŗG׏:ߌ1.z>46'_ x):KևOv|kgۼx\~ŜTb/hט5T[U`vr%ֽ__Bpb7ئT?cM5?&/ͫgòUG:x5ncֳ0؆v̽['[]rWkp3rNt/->E_Sq8_;v j!8up.m@׷5FW0tf|6qxi*㞵n9{83q`W<[xe_s>,-'_g ''æ6kKZ3sYk1 }og=bꃙ>kCp9<1Ꮰۼދ8]qO:6ЗNIzc~sb˗-ϺyzrO[|Y+Q˟m>|Sg^pȟXZ[)/<1_ XVHNf/._ X~qLb ܮ3-{dox|0̫7,7K?컗޹vvvvvvpvN;(#my\ػZ3Gx&7hlr8*!h_'{1xgS?ks֌e)._:W`g |x~^kJ<M}o_8rM|1_iF`'k|r3row/T+=9fI5kF,Nay℩[W/m-ouMlWu5:ds| xb/6|.ԗho^ ]-WZW axm-N>sX\'_?߲'ǖ?,^).[{l=O;݊bi|ܯO~XǕd7_Msgʯfx>#V~;ȦrZw<'{«];òrb{0؁/[ح_\tݯ;CCExP lӞmA{1]{țj[k.Vʟw_i {7!f.V^?=Xs>qt8[~'ߜ"tבM;['N{XkU)&j7P'p+_yV5|zƱr1-/WKqT[|0՚-g50|)wzӸq+Gy;5?[8"7WdeWq| _ 0dUֳjIO}7?g:-_9̧a32:{{?oưַG땿t=NGnűs0$\8꩷'C|RL66=k~;|y|kLk~7/[.d>lg'riezφ߀e#sźsip7ag<|⃫ޏއ8i#KqAZ#O=VoWp ~5k(Xs_ϳn.lO!֞qM\6g({xaĵrǃz=WYouU^6>9\sje>g/w5#0D9+~׹ث[}[|J9 _j17fLjg\h\|i8g?h"3qSqSGU7 6 zu~}֝g>_13o{ǟ+߬5QSq<$N~5bYbM'0a=($V%Zl_p八oTU,[ڪ}W0ywܰ47bj٧Ы;5@Er:ekkY+.z궧7G:V[ۓ= yOvSwڅyk>+ve?a'Gq>F8ɟ}j תg s2W\b.ޛW\1Sgl8Ic1^†Kgc S9)ܨ&Ag⫏3gӦ䯎iccLy8‡3L/O0dX>:s Ɵs0j+>)F8qFf1('n򈱞1l#k|in'}.F,n]ީُ͗y&S 0/9]^j}om^yqŔ\|W) {w`w`w`w`w`waFN_8x̜}9͚CLy\y[o}=;%eknw֫m>L|x)>=y'=έ'dr]fèVxGⳭ1 ޼P|{$tq#}}봛Cy_M8'\ebs?UW\M{XuSc[=u|=jv̳qي~{F {#9VG1ևKLiMP̹uԨ+1k;_E'}͗kqLsj\=nro8MB]m^}֮)V紭86QܹO1M{xOI˱ >>3 sU)ya߽α;;;;;p;0=E|f}=8Yf_pQ}`դѾ'?<娏O}я~qt/{ r˻ֱkT%>ҽd>{z>F^>:_h6Q|7\zۣZ;%%#aCM;;;;;!A5 Ox1`7׿AC8*@wHV|pÿ>{xCχ}G>xf\W9 '椚[qq~4'tuq;@ L6j堻g&lՊ?q4}XC1(#끉^ɬϡpS7wp[_5w:%!?\sZ?랼ӗzZ||OWM~Uqze?Nkz憟y'xHu+[4 1[GWK>ob$/qNm=an$sOs^]xw=G?=sLO6&|~(Y/vϰM _|I57/sz`W?;5k<$^ð!1lSOyzFqIuőԾ7…kuՆ\aÇIyņ?@<9[`Wb6byqi[8ñ%դoŧW)þν;;;;;p :!K 67kٚ@}>:ٍy~eoK?Azמ(^\tUށݜ lLڇn7¯5||җnGKvSǭ~^T;_zxۧu1yZO]W87̧:V'Lu=󋅝\6?K{ȬrX7gm9Un8~Rc1^ֽڊœ&|q{5C/7.WIgpWLyiƟiYt ?2`:̫H|<卷7ܬ͡jd7ߧzלu@C QonNO,<}p[ &ӎgSbۣus{JIuagBzbg;}|a/xs3zqxl-y?pd0taʝ]fs~} [Y13Ap/W|~hH Xv'*DmM::9}@gMijwk__Yq{yq։9N5gX/z q'|IʟLj7o>}eW,ݘygŦq#N>X:]'z^cb6n^.v<0\6ͽOs6~y&뛉 {sp-ׯݛ]o;^p; a"e<<<戳bZ3c'G尶W/|}|lS­6lb˕qHO>u|a/+s͖us^}<6<^$y4͖\kϬaG1߼5g؇ԇpl>0}o|}͇b~w~Db}N*rtKO{xk^s:Z>kzիxs{o<0[_\;:v_s [828wq8'^\k~qf/3Õu.N!]pi{xzF3:Nh_s]omM.Ii\8> W-تk_=]ͺ>ϽO8 Q y/kX|=H9êY̼8 ӳf< z_㐧=ӫc޺[M+_q\Wmő&p3wbֵ?+w}^>9qMeϨ#{1]}x3ol_SM܆b=oq4\9͗|5>׳=9abauXO\y-7OGWD>95po$pozӛnj?"_5_;5zpӡȁQza{k_{o;LWu*kf{0함8yyhC\Yׇ)7oS[i㛵Qkufw-M>0#pI5a]#sC{5dɴ[ˇw1cwzbg}Wyۓ'0|ݿƉCl\wBvqІQ׏oSݚGj\B'Gs6pg޾:asv:b'~z8g^X"'lܾ``!0Zqv8=jO뿽[xu=/No{-þ{ow`w`w`w`wuVTmúÏO;̓yJ}\|=zv^6{{ŵnfU^I¦l.ƙi]f p12bH4>i8RgA:G CRlo.7>׸ZW)?P,C0=79V>7q\Lq᫯3̘V7"?[7_ww=*u-Lx0b/vHטbM\¦a%af̸ǎ}>9٦F]r#\r[쭫^ w|)f|T'Gk:7ˮ|j6¬EX:\|װ/=u0ȇz{c[0ӷ*еesñcݨ1g6ǜg>-_>qwk?[~nϴzG a~mp gCsץ=%-&՜fSi^}nx/݋;?la0|_0:k|_8hy'|e#+xuol\ttŋzB^u{1/ 5_{57ɹ7㊝"tp|)?}8/Ω㠫ټ4s_?9=m~Fć4<]crS|Q{(Ἧɖnr#>l./YU,?|;jSXZw?Y?&/r΂id:9x, Gy`>sxhG+~]wvvvv`֙MphV}0u9V'Zζb/oG\lpaeåYgoߎ惐5w6k-&F >cみL`aoml w?5zgO9Ϙz'ÆWy7j)9 K۾VVoƩ5R2s5O5ݹ&}NOL#?OUk~CgWuaOaWWlŮ쫼GXjk=,<[zr!T|Gsm/#g.Nlr&\sNX6b1b/>.~5Mnݵˆbf;5@"%7wqtI9sסphZdOfe ߡo=o~pҽ7\cC`יڽC{l\1\l~Mk65}ìg8bioVGOeO䷟٭g/|ث0I֐]|ώy:6~fA~e`:SyŘ_ڈx&l4y|[0'q͗a]tp0 jj7~5šͳ#b+'\ÔǾD|DL|+V ;L~#~Vyؒ6X}(\MlݼOb3ڟ|>髷jNxŋ_.~`k;Ff_x5wC[b׷Z >q ? #nixy=QW?z# l0 {8).6fͰ/7)'y{YC9W}f|b]^؆67MglOj䃯oyZ#܏ >.ށׇYK_;5@4K7鉛uj5:99ۏ:;ow玺{NXCҰt<{ˑZ||ok?WKpW\r=շx.[Il9c3:bZ¶_1zgq3[o' 7ek}7\Fk3˸wz(&䙹3k-6{<ܜ²OUʓ=|ky ڏkzŤO0eKξǞg:L\s6{ \{th~r\xwO[8QXyXI̓vN3L>v85ZNZ7O9m|2_`?컗޹vvvvviZ:uC7ۜ0鉽s5y3O:s[py1#{ƽ3}=C@/wl/>I8zc޺AuWmTʁX7<[|o|~cr|% k4>WS˟-]|1Gŋ5\z/sX\da6>̽qkXEsj&j0 zx<8J \f/Oܽ>d7_&efZ<ޞ3/&p0|)8ĘG^}{guV+O5Xt5c͏߈⨯HÔ9{5 ]\5/*dw]9wvvvva:$O6])Ck嶧Z]b;2H0qnpPEռ{y;~~p'U~IK5f̉CQŞqۏXfLckxM\V?Kתz67&Z懛3Hq}(>}k S̫Z3Ȍg>qw="4!_a/[Qه'ě Ŷ#evֳba|!.kb=6]|CL-=ÒzbufkOWs6vs;ai80ZWx}sz+?nZ<"ͺ>bg\><3#V6=zroR]4x-?[x1<)ov1g\i5'd/0fS~s>z`ڛ?b=Gþι;;;;;pM; dCԹtʷ߉'܃g3w|Zg^}a&Ӂau`b:~ =9e[x"$03w/"a!mLjߜ^%i_s:>|=ơӟ\|8KSU\wOls~2?eX9׼=Wo1jg^]gsu>03ۛ9Ś3bgo u9j9#j`O߰xe38coW<fO̬߼5g^_gl;ĩ_}&i4b稾8lbpU_q?hS}ƶJ<̓?'˗5ث ^&sN\}~؍y65Կ0|m}z}wͼvvvvvvf: t( fcN;ub7ǻ7-gȦnsuVozuC?htڜÉI=Oi>\=#ӽm)V|6͞։+>Y롘ƚn]fI1q,?vrN_x*y_y8=^kXg}[C`_cW35=/E_ iK 4GOCwL$}nΧBrKO1ֳ|wzY^iRMqs>ag꾵ZxGݺ_:e.5\K}yMLplݟff-F~<Ƭ9NjgO./ 'GLc}U5Oa =:lߺjG˥.j*>͞8IklF-'\Z߮KR}W{w`w`w`w`wt'q9w C;ą;pYjl;}#^m~xwuF v!Cd07Cer2 _jiMW`5zǾ37O&&ܓZ|J 2i>kgR {qxOϽ[s9՟O|n=bs~3?1Vw-Sq];~ꠛO>4oW|=Y}bL>eM{UKqQLص~d/zuaq 03<6\F6ڨ7bd #Ql5*\^&Kjb75Nj__:_ۻs>sNqWoxN pz_~2}~*~vvvvvv߁4^o1mq@\^|9>胎sJ++˿u|3yz|ϻx_wwyw4st:=GAm6_Hed[u'{z4z>ߺy8ok>k硷 }ܭųͱrwfk\Y |:>l [yblVی5Vn|qwZ~{(ϖvTCV~, ֜.Ws0[gK+=cI1l3|>6ĘON7|5 fgKeV= >dkz8I|b63>}1{XSyC<_!pɌV}tx8M#y{CόSsON*aOO77gG?--?k ӗ|ɗ^W=>ǧsϞ꫾??z:}/xۿgߋ݁݁݁݁݁݁;we}~9Omvsg_~<΁_u_wo;}W|9[[Oy\9,yW1Egq/LVO9[x/^!-W! 6'ًf`+z~* }W9ib8z?UxM.7k<5c+y^{<8կ3#y.1u IDATrW ͎ze8H5mꨆ8*Ag~gl#?#Ox3NOzғ~կ~OONYu\~>=99=O<9e/;E/:[//<.o~ٗ}˿˧8n:kw#EV9:xrs|k^sҗl[ط|h,:Ώ>\ѳ~/g?٧<1__;{{Ưr y#g#h> CF9\M 5f, ׺˳rN;'=UO(\߃=ɝ^V)\[=֓üOCr|k/fSZB'մr+^N[ŗ로7=|k/ooXofxLÙ'7MOm.<bG6QrM|b[n\MQ#Yg]31g=g[7O7c:ON67GׅK 2g=>9;cUz|g)>h&^}7k{l։Xsx77׉_nyMe㲖٪nȭbgeed>AN7qņ]//==iO;}W]]y?>ۿۇOO'H z|ȇ0/~oY;}'|BCk_'.ogŷ~ء|g|ƭ0݁݁݁݁݁݁GL:Եaki3G*s__:o_姧<)9΃sy?oa?|Lѷ8_ɯna^򒗜kX;O~'}->ɯ˷!݇rZN q σ>[9_#78{#|ljog#\z0j^⪉.5ȏ+&1WG-ZՃl0Yu G5jZAPĈ'jq=Ě{뎽ۃyҵ׃t=;|x?]׷^79ỗ >?>ql1?bn3>H<1Q lcwkuS'{ŵ1g8x2qŋ ݵ88qyr-g}ݜ˜}ŗ8R'GߺغኧU{qƋkbđO<-b׻ǏƵ twoQa<+7'zW nu~q}VlOqIghyYV~yqvT3?,N=Z~Zf{n2s\tkή 9Mw䳟߳<>՗{)ʇ}q_oi_+S?S?00?ÏCggC;Gļty-+_W~W};pw#pg.;9aߝ΁/~m''6K o}|ۿۓoM`/_W;auuazkN{ꡢG"x9px9gsWCX8ꪞo{kN|{EZ/Ff==jaV{żx8sä}C%\?#;k8 /8gzk ?Gͻ}ص#|r=w)b┯z{>Gb}6`4W{&Y OzUGF:~:-za5wFLúk::8|唋5`z[j.(,ܟ5I>պ/qşÒr)'_̫?~6Q>7?|xV|/~6ĔGXC?ў~ <~fl> B'x?_m04߻_S?XqC [{!oqSՌxB~b_Khݺql;;;;;;;P:Yw@l~푨t|wz|惸۝'>S@fo ۿVw}@_E_tesCj!=0}!:À( ^3oWy`&'O3}C [2'GkRB10V=k1Z/]7ώkǗg7<q3,]4y(_~{'Ӎ|+=^qk ߰.䄇!zÖO7_M"|J=3l`itcrI4zZja~#nZlzM .>Vn}81M)G/N>18`us>L,8aI1omN?=yߴ=ϷS>Sjxe^^\~U>@1ew`w`w`w`w`w`w`z@s#ט[94V`H69P>!k-~vxF;g>1ʗoj8l=tdpH7V7j5D\ai9[~LYx";c_)Fl=SZ35`xYXyZj]^q0?򇯦t=tOumy5U);'/jb_&Ձ7\6}N9_y#{s[N6v߇'Q}72kc]=Fm~͟K/l/=c xo?{- ŕ{Op_g̻g/>^{_j-W}6PpSZ/h8 cf؛aN&jƭz z O_~ Yo[o"“R|=_rOkS\M'Ooe^MiBl[@ ?$[3m_o[gv88ô<lj0rDM u{!{P{NzO; w_yp̸ >y&&^$af-Ր5.;7[7Ŗ+< 鞘uHb{:wϼ0foWtY#_qܚՀ9~n0xKhkOĩ&=X΋Z Mf c.?ZOxZMqe\ͫ ϔN{K6+u_1hՕ=l\ 4 {,.^Š]1h>||@ϽO7TC\ŷZ8bʿ< :q7W=#&5 MtڨF_B+>aMeU?''l[-Ëәyi"| ?[zAO[}ieCb]pᲯ6a^7Տ؏;:q2D~Ϙ9]|1ba[݁݁݁݁݁݁߁xo#Bω#]òsQow, 7qqvcp_En/>i/xp=x4..4iXR9*':a'>zx#ksM_͗sxz -jx્^j OZғlx৭8$},K=qxwuaT>2>gƛY-i\qY8O??CتQuqXȌY3aİ[O[l8׾ǿG<1x`*便{?y;e/;#?#{,nDCn'5k(s~bϘspyj݁݁݁݁݁݁8uPg\05V=^Wgzoo:Oѯg<oՃy&9N`3*Ɉ1簮g5|"55\P~~~-hqzʕV[ý!/-|o5G8HuU~V+OpCoC<8Vo[k/rE\Tui>k 0%[y|z^pGv1fLr'Ap+'b.7ΙC _F5gluLVLg2{/~>Zd.aa׾,gփq:+l]lqq/jo]zg=:o->]5|q >ص/؊{×M\G&o~W5~3 a_4TO?ouOM[~jFX5ǣ\Jfc/FX)ל!lhovfg>fJAE/zg=l_'MeQ5's~1L=amwvvvvvvtccwn?>/x/|ŧg?g-uyV[o7g|S0*{؀Q랆wt]&{&,-;|~憼stH^.dg]-z"WcnaŲ'4顳*X>kY_= c/bi෿r7kfb;[{tg_.|?{1GR,m_bqߨN61a[WJ[_ݜ#Da9=mz ; 4K8~]N`+pB"n] NFEEEED "q'q+J R`S̪ʺ7D?mo{̗hOvvvvvvvtS ˓|o}G}Gڃdb+~c⯻_lwagp37IJŖ-um޹ X:pq=Ξ61\u9V-_0;LLߚ֏e8ooy^>?xGN9!杻})l;;u'yBnĝ- ?źҏyNzkC?CW{l?0Oe߼[c}c7('&z}d=tÈyMV8pwaKa⊁gEov9'n ?Yk1qW,?ibO\i1IaW369N\ez[}[r˃6|9 NEZZlRl7J}^rVuC焭%p0x}W.bhǤťb\kj{c~,C'\:'l;8%Տ+x8s\~Kų:̬]0S'|UOքO{b/*$>w(7 ށ]^X؄78a|>ϴb c ozufE}>u.}qWKjgD"Nem//b-^=8j8Ǫ \OL{:ބ7x^ZE>>h*x&z&ދ??:YSmͻ׻}U{=n݁݁݁݁C:^']E__JHȮeߟɟ\{/ދAI q5AL{Hb3O<$'fCb c5b kqNV7=%5_}go/%\Ǣ<|Ti^.,̽t|L{}*~My){ub>#_08bi].x"ؙ .;ݞ$c7ESl4i8/᭳y:]]e^=eW[PC~—Slkqfc_N_^|Ň矟#7_g9= b gxQtn4q[qgǏ!޻+Q˿3A7 PÀ{=7u\S1Q-k==[[\5ѫ5L5Fa&=k>1m3~|a sS,=}:k~~l噱Ӈ^&Q4coϜoC7OuӰq= 2s똮ߙxa29cYsU-XOOָ+:ڊɾ!gagsm.oyV7o3q'Ջjs{K>/ssow_Y;[=?jx5כi/^ [_i:gR]:3yĬR~}_FV}۷ _5_su_uWz?K~뷎'~{uﰈ=S//쫿On CKʣ·qw`wymu!o|w`w`w`wu꫾s[S\/켐S?S>3?گګ;w~wc_W~OO雾??{Sozӛ[|X\3hӼ.]6qix~pڃ\u5u(.k<Ťld٬j;S#3ƻg});8fW؄g>cW6'٧ksgoi+8u‰7}_r)٫: g9{1Ԕuop0s'n._o~C|ai'>68)$=`/pl0ꢍEqbG䎓X⸰oIX|7Ń{ncy?_+:??{}{g}g]}~r//O~g~!m%o'^~@ʯkp5ۜϝg=xp}^׉x*^??~o}@9qw{ =~#}|< 0q-pCzaa尿넇Xk=$KIC3azh\r^lOS:鯇^|+a5;~䋃IxY7`7iR[UiE{Yb0>3$m^o kNڋk┛fv5 yŖ9; pl̥~MN9[W۔a_^Py|/k>'ڱn&Rvs8sNmX[lS*~7jQ۬[^*cm Kfg<'o0!e[?(w8ݕpIts/L/z׻oͽ=~/g|g\_nxmvd:O֏bccvvv^x1gx %_o}gzpii}(y  ̋_rgqÆ֫zn-gql|i8-Cz-=:j5yhnk]8?ue;cNZMlǓSϘ4{ᐟְ֛־kc:ssqHSK4O/lpI70Օm˗=^Oiǃd3k͗!8>adΧ-;VOSAhظ& (97~9Vᯎ{`Llx^Nl.'0k:XD\acOzaL\0gp0Ě3I5g'C׳t|r]]p|0Du0C>ˏ|,[>}~ꧮ_ew\kN>ﺼd߲;;zBd|'~bͻ\w:>~'}~^=y$9f}}]|Got > Ǘޘ8FŰrOMx̓uC*Y_uzk=y|qjO^ l<3Y糯qnm8fOr[ØaHX\~䋏&q6/.l8`L~j82{ o]r[>x@ap?L?qx gb*9|Ǿc=M>YUR.vyCϖ}M74N;g3&d^0/zJMO.{+M=I3c77Hq|~k,;_`9BIf_ig/a0jU<瓯Z.?>{q&O #aT'\.pwtOw+Ё۾ڑyhXqz0v1O\JWGk%]æOy#+6=m 4kOy#LVMpg] ؤZWz.w٭l4~TCX>}g<x/ _l㉧5q|6!6]m{ {SB[ &1E>@O>sXx`&8ǐug-lgl}zЃF/C{,˥>Ÿ< ׌7?%__㟰K?k8VO5xgWNq7%79_Zr5fb1uX8-קǁSu2Ն׼6|w ٹwv^'`6'a'_trul;;;;p;pmpHw0w׎9Zӵ4|`A4sLnˑO5dg׹&5[ht#.\]3^\{Hm-.lᦍ=_v|-o~z|$[\g0<8nw[Xä=[<19&Nm]rN5gUC8-3໚m g֧r39\9WTSvZlRijX2{#gy;1k9'~"yz\z%}Ťὼ3ۇ}W7{5k]y61Cƻ?ዡ&ߊ)zC7wْ1C-aoZ}7ow`wF:InHlN:qvhЏcw`w`w`wuс ͺkC 7\Sª}) !zpX&^zئ3'n6$xz芏cR,/] f`?Ç'afĘ H{=[#Y7+Y%>YCq-ߌ&.WZ՞kkq[߽v VYF: D=[xśۋ1D\+\3=c`H%z Z{a cr \gkz*tg7e/n;u n'sv#aw&݁݁݁݁_u5bz6uړt*?\<`'otqbcYÅMOj;5>5Mּ̜5\SLm_IJ5/:~z ̴<̕=IXz;s?L@勷5l~xƍO.&?=m|q31Æi]p3{1tt1w:glSa5j_%➸lahz8qK&W<+<gp [߼M-iNs}8O~LlrŻx)J:.-!]gˑzgÜ== Xudi3yp߼'?خή3r]xٜ'- 0y17F/{<^|⪱z՟jUgorT7>w=ct{l{5lj&8M^{O~/ g],_5ث9iliwqƏω~NܑG\r͏G:~^0z '=9FW}ǧؚ!}7aÔ8tlW^bao18|bc>iK]xąp~,.?5|x|z}cgX&0G\uk~))mȃ5[>K?s-??~s]4c[ߣjc6qW}۟p묉Mq_a<W+L8qDlGx5O wz|7'.]D:4Mmo9;@׋$!|7źvװ߃u(׹jS @za u9 mz k))WSxOONIyΗM#I'zpDc FLڼ8f[qA<~酙YG@o^:n4;W8{ОaIڼũLFu1H.>_zbNFpq:,,f<7ηմ4U3q|FqW>^aI4wͺσXcbͷOuZh^³73nO}jV=9H|!&L6uțϚhn׹ J)b9gӋl:f|{+/_!S0U _qGzzwb^~JvwsX:9wOhwRVԃN7VN;;;;G7]W6RAӼ;x5=Ȳ[Wyb!5>v9 71]waCۙ\ǰc=󩥺g=]l4{}m/L6Ux85;\sgܨ.j@&I{Vc7mp,.[/,˕_bW~6Llt9?O=歛S 1p֎CcrS\kXת8|.1o^jL>3ZXrX'xHXr#.Nofߵro8_^|x⍛.&[z'է__ :_19tb7񗣚Y|ǴI1 sU&\P\]\t Zs`kż?H7&ߵ(I0CuR|+|MkrUߤh8D0b/|遐ǧ00րn!➜0VW8';axr‰!smlV܏\g|Byy=mbz،o8a'\Oj#c&\}/GyąO&y8|36ǗΎߜE엽],_Ӟ fȣ#αﯔN9Q9RtQƺ9 pՐ?fp4⛋3_%ɯb2c/_Z|e6sq6߬9q ;j:֎K,)i]R{ c]m8ws/ڀo/ o{k}0i uVyv8:Nݶ}}v݁݁ցNi'i8;A:iς[vvvv^Zׇ0?Iy׃Uטa<8H/?7LlrG/HWw/g>źiSxxLqְfN9/'yfoGuZ\0Uk'{4!;՘1cS86{>qd >'`1}tPCq6pyN 89 &}˛8Lrs/?ڏxOz8nnzw`w`wqv4NN.]`֓5̖݁un??7sxvkFk13Rl =D:u:!o+ai>uC;٧qo0&z.:דjr @3[ tٌpf +F?8+xkqt(G州}⡍W Qm4c3%fĆ9Cx9no(>, ׺}ƭ|ꀝz|p4Mળ|&G>b R:f]LM9`Ŧ͋iN,OҬqQ a7:>k0p>Ixj q}Ӟ:QC{vC3̙ vͥ{pi1fg$lFܭ g6\q3lzcf IDAT1/M;bpuvpPNN]hDu'ovx į̋9}®]3ך;=4χQGA4p8W.&ًq`?q'O[m|X]jVl5o}渦x/&,v$Q/<0;rdֵb}VObuGqfj7Rb #W=7ON55b`kn T)G_M4O> i9X.~WEWGbh1|#t'0q{7Sk췿̇; \=y=7o/~\,|`ԏ^j笺Umq˕u=ũd|8[xIǣo?_xɵb)_Tw݁݁WN.NN.tN΍igWXI~:s$>IGcj@ׁt{F7`<tN0'\ סIotqLpSjq☜xf=p3udob4?js,:8:CϚ8W3,ng酅IixX|nj竾i>[_f~n!r͚WZ~#05%j.lӜxk#_zFۼظ+|k~1xWp&?FZOPWw/ \vX/h/7͇?a&崆k{Lmk>1x=(?|yn)gO/䣳kx8uvDF'y/|axukZ`=04 7: MZ]LhGIᄁ7ߌ S WY_k?8嘹Ak ;U0 bq8 ^Z^ O2A7G V 8lΘ0l!,.?`ho_{p::f#9W9{ ɬ L¯6y=kt'w1Wvz>q76'W9% sgWi1e'qO7uiL^}88TXYk֏j-&b?mjST|4~_m>Kۭvm nn~fN+5tanw9k8NļS!_\G-/n;@NNv[w~m݁݁݁݁zχ g*cGL OQ>Yė}U8crÐfלNXs1鸋)gbgap9@\>:^&gr>  o?[!>cF/+g_tbg}Jb7[5´>ҽ'@7/O9.?fl>i|s/ahŰMLfmn[\?pz=F:=ۀthgx6Wg7ܔrnOQ.X.9{sF/^u{gzpX^O?-];&rq^yAh>Ĩsf#]No4|JW9y}d\w|r²h]f]~`/kxl$=Oޒ4[M@+#>g|3[=ymw`wwX}DZlr+Z/?dI;0gu;C;,$pMѣJN3.ߴk'n98ۯ!/9Rx]u٢W\?7qx;Ѝ2 w7٭ϤxX7)u3BsC͙޲;;x;k˭| }g"§u|pS+Wj+AzpAy_e'gy }&s⬉*2f$v6ontXZ=Y7SG8|qZa 6l}+Np9ٳ^3_9i2'gjW3̬:a/wȹ&;Lk=f3u'VLq03h6[`{Yf>I5φC.a'{;(/L^޽sz3XjoWr:'W0rI6⯮xى8n>l!&_yeŜcqK?˾[jN;;;;dw ݔt=Lxks#Yo<ϵ8TL.I75'f(lxuwq}}g}wgl Ǒ9'n)ܐuf:t|4? w,.?ʝ[ m?Pͫez[Xcڼusw9x9W5{Xk:g񨝘OnAJf-:k>m}XZxcĐ]{trW:3gy[ZqiaIyߋyGZ-a_T_NYmlūX+\7SՖj=H`瘵eg#|Gq(?܌g( ;9+wuܧI|iCcx_ 91rIkŲM#3ʚqk\֎>8_8Y`ϱxi.pkj}t| 1^+V`':aN` [v [{`._Wqh5ۃ0ϰk>:UOې6s<p_x;ks7C]DП 7 nh7 .% Cs#Apa?vv^vz.%eXwsB3bQ=|aĄ9|H3knr~5V 08c^mI\pPyş}(YQ|soMa4Vl1l#<,σu5nAe?$'ĺ8{_} _1 [Ǖfj6qY ŖfWm꯾u\8kqO'jw;<^ s\~X7M=Uޘg0cMy~s 0j)_u\,_TyiEbFs$;.5}7X9Hl]Wɴ'aæIǡg='|eGy 4`^hX;^cJ|3NJi Wa3>a<<1>c?Mz|r|*^f]tbdzS]7]]&^޵t3L 'bX?ic_+gs5Uoz~[z컭[̋ϋMZw1o8nVi͚rf͍V7pl꛹7;tw,*=0<~}r8?:̝?gx|^bXO҆M j^qHƜm<$m&Iϼðzo.wfOiv_ ']Mc;戇^UXtF~X>5'_j:}>aŒG Kl77̧U7ӼYw(p3 &tJg?ĬZ[m|LNVm̽7c s4^qfpgZ4~od#NꏏR#.k1yy珽ZIhSͰ3i.k؇h>[6[>b'k^S=l \-Z >jGb _Fw݁݁݁݁']]Q4n  'h7)<[7MwGPyw#g.G7ieuN`]~!ͺnx=D|19b{C|bcV~x\n:1/Ws咗?-)jb\k6sTm [f]mXO5X7c{(5RĪTS?kc79;x GxFgM7#;٫N;?vFˉޱ7رc5Nf^Ϸ^ibWs=mIN`#L> #Sl\k7nOu>Xl:?M7xp5N)oZ}x sw~j9|᭓bp0>3_=q%ՐfqrS)< u[unu{3vV|œV/uzvq'Ϭݜ8xqfc&Q\gxׇ=$C qw=Q=u9_ZVzqU?,NsR4jVWs\9h|8pY~|V]Ň6왆k?kp?˾nN;;;;dv ӆ.pܟ7StyW~|n 7cbSW7oc~駟>np[vv^~Qv^`a>w;{? ;7ŧq4ʋC~5̼L=o5ўa㊣}c^\l|kY^mu3cfYuLXqO׏jIq'ՔOgQc1+u9e6kL19o}H;WW<^sl|l3g_b 9Nbh55+czauygxp>|>a ]9Y`WoGcpqVz̓#1%ws̪=7o-oݕ^!cq灯,W}Rm[-/'<lra1[ueRN1n?.8gbavb^¶fopg`m~w[ywvvvdfÍ1o \I.n ĹrCFzlFy8E{o/zw`wuu,w^Hn=C'~˗ECwM>g=RC]<.MÙk/_4)WuY.R7 IDAT-W.>s6zXLqY,[G|ZઃݼbycMZ#/ Co /O{9XVNj V-0ݾaIW]4|}*&]5^29?i51뚏] 2goy9bpUWO'{&1i^p+5q8'_x-Q"Wu{5{^fOgZp]=}^>,ny|1g)6{‡}X5AaH/nhM?B* o W0jbӟr'D\~k>6bqWOv< _5OboK߿BV;;ևA>}α|\ۺ z7nƺ pSF  qEtS՟S^rS(#9RqOB||.ߕd޴%#vWl1+=p0_6⋻|M䞣Yx |=züzf8֤X|a]Oj:ygN:W,bQOpFɗjȶƲÈm~L{ l5Yu]W7kf>|ٲI3r>㊧70gO]Xgk>,>;7xd}//=sZ ׈}J5Wc9}L؉5{[٧-g.}/ȊIOM\4/0\~Xy}SWQ` x/+i/Ĉ]YlrTuo_qŅְj9?.?f,[7˾B|PQaM;`K|Ώ#zй8s?uẏˋ?V k7uS2iRrVzg}|g׌هS݁rB}ߛ} 8 ް[^cr>u1Ƽ{^\,x9ixC}!}I+]mq/Frj4G\aW_1}3N&'=-}+wgl4=\+ymSNs LRq,5 6?aCc]lr愯xsQw{=~q 1e/x4?zL<6b_l>q*P1rɃS~F*U+?]gfji"bP\PG/]ZO._Fz>t1fq2CNf8X5!P}yVzჭ|qZ|dba;Y?MꝹ|h>yˑ.X"&[zW{|jp cC1`G4pd;c컥?JZ>PP!w&}(|۶;;;;8`oy^v}{s`<7Gkȸ<3ǿgnErw->CD̺l=.̛{%pK8eǜ^}l8Ds l\X8$mO+^nxKz [$q.}g7H{27SכOU3|q&0qdqtGyϬy>^ _ú:O3bHh; [krŮG˜OyYjcC~{h |Sp̫T;`k4 뉟b}Qm7qyqxa04Nu#7|Ixp;uU`Ag^VU.v14{?\yϼ{嵗}>?::Ǘ[}=3h+^n8{2{O4a#kxYc^̋QS9{>"Qxq寞b듵᯿fU89nS>f%;i|PE|| I>ԏ±1n2DZli1?2?7:x^qJbh]KV-;{w9{01H߳䌻u1<{Lr5}bqN0#bھkO-|sk)=yƓi+.kyq;%_:\1|ljf7vŇ^°7Ay.??\{_shZK{Mf=jHv^\}|wѸ}#ƽ5n~Ũ^TOۏ]ËGjaqDLx:ðq4ߖ݁݁݁݁nĊvn:mqr^o3=[dϾk}iR챸77\}g!:/u.oq)gw^ ty j~2qT_}SSz64ܽe|A_ Ag-RL s_xԃE?u=O/1o}[^%?Nlx^>gW7ڹ>kx۟=ZZ.qg޺xa-X9ּhχc)fWj+7^s6d컍?b>T4%S;q{;;;;pKy:'9vCMps n&_2olWL7np0ׂYOxu1ELCrK5RmgXs~.a?ʓX- Ӈq!7~ވ9?|tg;AF5lu7G񅡫>H9ˏl8&y9@wL⫝ɚ`[}f:j%c{ҟj6>l=ؗоx q6Ml.U7>>277y#nL5Ś땹C-{sǥyqœ0\dlɴWeMwERXpg0[vvvv^\6m݀8?M [j1k\s% D|i7OF79lXO9ߖ݁݁}}Z=5ci~_liwuyqUS50՚&MbKk9]sNt/jsvɇszgƇCMI96{P8fMlgW 4tbq}? sqkvrǵ˒q3׵u1q p2.m(%ԗn˗{x^vFC R݋q`T{|cOsb[W #D˱=e+wG&\q4l}yAyql |{5w\Hs뎕| utj켆 CW;sܖ ho0A>aL%Z(^\w+_ue&1kEAV׮Hݹ/>K|?|swww`IIv2XwDk褼9ӁӁӁӁ;їE{Wo|wO_#t{9%=;￿W=Ct݀O |֤0GNP:CGנkµZ6_]w⺆ǻ㋓] ro=0AfGC,c/l> W.~s&7O:l|lt)= <ݰ6w?jdS Nv, GӰS'taMǙjW!6.px<Ǻlbl^|Ǡ/kbe~tml slcki_8ab]Í}7_9;q5lpb{6DƯ~dn菮{?D7h\v1|t]]D³zjɯ>xڞS ʮUsx{S .x}㯟8Ü~ DxUoCWu1Gp4̗dzMr2?yOls#DޓkO:q8tttt:"܇ivrb]<< ?e_Ca rrlÌ|}&csώj;t[>GdN\g隹O?Ĺ~ ^V]+y9&[6< v·jPް07—fF_qO{]N9\LzWݱ.>/vyYxrZ*>LNR Xkü&ja7/'jrɗa!a^t{~8f64,ް /'bis riz`ה=s97o|Uz:a L{3' -vזekwwIIF[;Ztَ<Ϻ{N$vޟq'G/V|`%7vtt5ˏk-tݰwkrGۼ&éqǰwķ1fcKۯ{ SV\\ӏluL׾!l]pz}堓G|?EG3;PS8nu1٪ɺkcgw=ڼg8srգ5x&y#YX֋N?ʿ²8mml+\qibWKōלk`+ǿf/|탭b ra1o!~r~{8a\n ..\݈:rul}tttt:"ܯ~л| |~=y9q|y#jl|T^vHծv5=蚡 קװaG4r&ϾNlzqP{\O {:¶^\nqԧjaq>+a9]^x954_{gyeSql= ]7\u&^/Qnj*Ts5d_xز'Ŷkq<9:e_ٺiu8\1 \{߹ SLHƱqְfnou0?ҽs Vv{+bOcpa\o@IU惥+Z9QՃ[Qm~{4`ݟKIJ&|ˋ;GŸ4Aʝ~u+7]_>A~abaٍe[v3lNn,tIotQ yOU~֧_ց6} C/kbbzx`ߥߗ~x}'T}VІ3>5=lyy$>bסkǼvV^ZOA`\K/aF ڋr8ËiZ}>YbS#).-hxHrSOه(3?G/{W^z6gQ=ly[j|쫛Wq?0q'ҰĚĥ'nyYwhՇOck~s<>/޺y<_qk+>4k_ +>V m 1\+~\ [Oدڱ6!6{χѳ NFuÆSK dsf/dx2K9Xy 7_WMI>zOX蝿ѿ\8OL\4?QQ:؊\1,w{^=xck8{q6<x(ֆaEK>~>#vq}:p:=ȵ|Gsu ]siřT\).|t/9Vg[_{]gحFk7_ݧ<8h_|s$agT {d %blwY>́z}gur:kȇcywO9>61oy;ϖ^gz%qÆ]+&Gbp.G5Kս1%妋܋V}Gn>1ރ~h]M 3mn_I^y`HWwi_"{7'wljSml1g1|g{hX|xu#mo wqI黿5}gK5[~;7_sv6&['-݅{7/gPߖ;H]F's/Z>)|J؛5sNC']#__Pwq`|ҺyvΫ- )/~_^gV ?5fۿ{m}>'h g_5o9|=XׅfKŻ][1?|02v\r_M^:gIJO?ުv3ڧx<+P| "' /7[=96ՠύn_}ˉ;ŕ6.=~PWf5b0_d?NM43> IDATz{!9<__3t׿x;'q?__.gGxթbŏ3{Mⲵk1=|׃*=x`k=hx9Z>5׵ :=мu_NӁ]Gjuuz[k޽___ÚN.BS-p{m/4X0O>{NzǥζR}Ո)νR] 1f^^ Vْ8a7?86u$ivkӰK'oO/YIGA2yy4<[5Y4Lqyo^|x)罶0ū11_0icp79_XqqnyW38k}&O?\ "޳`w%8bڈG-?l> ._lx9Ez~\ԾD}B8:|_Yg6ۋW [ګ<0ኣ}#{Iqu9p7cwaWȶ<ٖ#[ǚ~'k::fA1Og`+9M's~,Opŭ~l ,/|9HUٓǞ./.vlpa=g\p:\u+&~uTpxvG.?n |zֺ!ΜV\r>WOowye#%"Ps=UC/[-@8n&N 7/|FbdWߏ=ogy:puyy`мތ/ߨ7>V; s5-L>-_];2Ws)\~\pÙh^|qq#O"s&ZN9l[aVwpHų|zVWLqb[IZ]Aؼ8ũX\o}p]꠷j+|tC)Wհ>u}ak|G4Q+i|g\dMmb-w?q#z/^X8yl?baGu&buT-ZVW~1zBo=qC^ń^/aw$b՜}۟0検j5o-uBX9~YmNIp yV bXw_ӿp[uy7:#|F5YgIj)_G b{;8=^_AO?`˻~3ޥtWG=TyZρؿX r'47xw~cM\QQ y| {lΏgW_Ou㬷|F"^~8/O}NNNB'U'dۓE8=u`of͝I|&4qwx~|s8ӎٝ>DiùLÇ,)luĺڃ=H=#ogknw Kzsmy{Z^6_Xpy&\X\=l 'yҵnOs85㋃zmv5/.߆#x}qޭ tv52K`_\4꾜O?&.! jFG z;[;#⫙_OI5,W/*y+5ılmfCE -~،k{^w?[|VTp\-j>|tse[uGubnP{u!w:{_8r:t9ff؍ևp" sߥ;}׃D_^;?-{6s}CL/lbh#{ۀov}.{o$^{ON>vt]?v]W㺅_8,ƳYk~$t/eŜ6~aW l{k{Pmqv?ƿ=3i)=uY')yr9Z1xbeو|N^_C_x1ꡓ|\g_|vqpGs~V;_{1pV$6ϿZux56{..ֱ?:aqn0oNgpikv\m-/>qlPnl+kzn8qڟ9C [b ':<8W\xai6<}1i.Ͼi{jaըpU9\hWo)N8aOZMPc7R=ld.8_Al="K/fse\ߙ8I ~7H7[7>D!zNՁsH5}ڕe?~|@QS{͸ourdvӁo]+Onij9xl .:;ܹv\b{.aۑGr{*uu_&L񕳸֋%an Od_LY)Å˓O[>:|m_2zJcO}e|1[a[<S }Gk376Wk<|3{yo\p\_i'w~|kk Dk9{6k؛Ɛok¯r|xbŒ+x~,ϣ@/flw Η=9|EZ|Zy:8ItS@2;1w}u ͇0*zgß^E`? s:ms{΃t:gzq~$xv>hl?`sC/ kuۼ#NM~Zضo}Fѧbbues>}r>`z>u\^9j(Wv_!ݏ{ T+wser_g5/:hh8}Ka/د-_\|Ūg%} O˥~n6&۟EvpgjMu)_v>s>Ϸtk[g[!:Vnҽ+!Iq9`U5~!0/GlaaΎ=Ǘ▗-i쎽|[[|t'kf=NNNN%quR:pr޹A_M|rcta"`4m}ux0/~qF}n{eZ}uӃz{hA~}.5'. _̓d;t>|V.V^7U\{m[5yˆ8GߞQKܭ3 aĐ>^cɿ˟ƳEz8œ|ra{b?{&\3n:^9||OW>irʳ50pyroMva~V{.[y}tah<;ݜ=a o^ t}_{ޥzaXs9 oOֆyrI[~QN`VX8vl}^wťK|g^>^,/}u}^xz9/7Xo/QWǗ {__X]wɎ+K7y<'B4?p D]x ^]IQӫ'?mx6䑯ϰV^5Ӟޑ\X:GEMs62p8_bo)o?$ @öҋ[{/Tk9}ӄ߼xZ  ca6߽[Q 4Kejw\٭TG<:>0euo𴘎fT_ z`#zF`-/܀iOJc]x̋O?Dwbkoz{'Ɏ"k{ b;Kן8aٺ:F ⭮Böl Uo"g[ks"?5.:|qg0Ϛ뗽L}h 'tM o}O?`Ϧ8Һ_ƧbHq_,ގ3|&f3M=$l%# pEΗ}H:NfCɇMhӍ+;܎cxsWYCM <|P.|AӁӁӁug)to(ˁ{]{Rxl|~O6wO$bKG0Ê?aш_yy̍ǡx{igTCEab.<~ o^콰E'5ӻgET ǾkroixKn1<Ζ.6'Ox֘_Lv5ozboI†{IWrLJ:;';[|hrzg/;x+=COiaxOqǰ?1x$sCI7χCk;}>\=#V@_Wp|Q;O|KxZÈ ktU\8?Vc'-UUܧ_e8ѹ!Acmꃕ!dtU6CG|xS=l<cl#[z-t=vto{4w/jtͺGue{\pl|٘]^f->zW/{eimjǪ9}>ܵrJli펵~O}YӾ6Ώ c;՗|qxv1ir'wo9R['+r9 wŗuyW/|\tx:ًXíO=㳮l;Iyz|͛ǟaڀn+\4,k IDATcZeS鏼\_=k^O "C fnMt8Sqt,zΗFGKm l]g \߸폼a>8%_ [O*NK1?Ÿ#<8&;FڇAџ&7= >3kC ƍƨ#?1l`sN9?;8Y8?Q?2>r:p:Lהѽʰ e/5bs/{հ^|/}U./Wxu!bM7ӳ_y%[.o~|ajz'z媯C5ՀvK`I`8¿Ƿ}A\ٯ8՗xv%koO? >ZzʯfvڏSLQ7_k+&>ÈIѸ ]՜/.C=.fN`/v +޺LxyC6v 8û )yGqk 69W׾/^«U^.6]~ه/N;F3:˓פtZ冯7]t=X'k>h30kߗÆgx-z%{1/;Ӂ?919ݳziaT,g?Ћ1?|eۗC8Z>8kgKփf3ķ~r[cwp 8sGbeKb/6{oOr[eK6f{gr,W[L}ϗ~iިilWo&Z۹Mr\^\˷pmw|c+.{?隡^?`WmQ'V G}0lbT;6{bzFc]l+pzj qz|xZOgo_xVƓtt@7n6 MV>I7eq#^>4nž7پv}`ք8z5~t{l\`_a7ͦ|gńҾųokb̳dl˵l^ϒGoeqSLy;^ZH.Z xhuVSqW--W,푽7{ǝdMÔŔۜom 5/\VK74·_X:u<IJ>lzl8 g]``YWCǰ4LxS봜;3w.'|ݞqx;j!Z_BGW zW/^ح's[Ê-_n8C`bIk`Oóv~xivf,k˾(Oad}pts=vSfH{,ȷсΑ=/̝ѹ>j0 +>VQ?^}U>w͹wZW7,[~?v^& ŊkY(/OTLxu^t1͖O 8 67.?]\z_ϒ>WD._M|)B\6p%'~T9~azÜ,O{0{$wyū֯qT=b+]L[gKv7Cq/xOrQ_#{X0tb[T}l?ʳqS wqmMxnߺwo;\4ǐ[5,>׆l ۽ &i\b̳ÕWD_N<Ѿ]LsO,֡Vzv~|lZc/'lQ 1'P~q+6<V\q`S|||d~= 8|躱5»nqyv:*w\}X>*/_<|y>1FyֹkջuӁ:{Yץ=t _/:໗}SN?;ڬB&^pa{urx~lmj3<8/wN\\jV8Žj SÕƼ-LceU\|7=53'⫣|j0onm^^W {l{>mt~\;G0eǹb8w|z+mly?%=%r˛t푯or|Wƕs,Ouѷ0χÜx8yoͫ.Sȡ8zʏ'ydwnݹzB͗nlGtxz'w}|fO+lֽ1/;/6o'Z=\:bùnyno⫉'L'\k%u!|-G{'|_=qw/WKu?kxO/a&y:]8ݚ^kd)_0ŷ^914'<[&.lwϹ>_=ܧpܼ܀}Pwl{ F*诣>4s܃Ws}س>6\q9CBykKk<Ӂq!w_ۏ׺غRl{3gWCS9b*.?@߆Μ˝='1Vq49>)N=!\-I∧}iaڟ{ 5/&;f-ךV_՜ݰSmwN/ޞI򇗋7d!?]}e{8 Ӂnlnf7Ķ/X {7gQ|T]ǰcݱof GE .Ƹi{Ң_Ǘowuȼ}6$etz-&HpTCJ LuV[/R ˡ^b?LayuO3/; J}Ox\|kvƻ=dkdWAôj.&<ְP{_tjSMA\?I<돋yqtsI{狋Ϻ:-شzqa^1/ml;"V_Ƨr{+6|a8k5TlI}}&ns_w܈=v9msW}0ppnb NM8Sbc4zS@jKc5.j㓋3_>8R4[#,6^SW7n_r #=&:ǜkqz|,[e i_d^⏷\wl^7yG´?9],wu+fӋ`'/vsma gxz1\aqS %?|8k u1#Ys8zQ޸ro.އrYǿ>~p&fK掻{aϼ9my<0tyv1qfϙG _s~ٝ7N.nm).לnK+G}k(mpŐdžqM1[lj_{0|zq7WZb/I61ՙm:cϞV|V?yOa~ ,ұø]7!痿9Ku,{KyﵞN_l{[q~Ӥ,a'`3zQVF>c'Խ3?^8b^ l #j?ILO^x"^jn#?f>_gM|ì^xU%.]6ĊcP~ɳN/L=ki}m/p|}KkCxۧ.L|{i4/'kg~=$kkcXg7g>0IX^k>bF6+{1U[aM\Ow<cž,XX&o]qu;|KoxչF?Η}otttttttt}wzW}/нH6׋H/6h%ָ /\je3]LOm;ߝ{#c$'^o[bc7M-^'\:~~bjⓋ_^q06~)y%ͷ3II㲧YXpȳ~sqJb|AQ'⫽;_^1%Wf O\|d9ŅU,ęq2oc/W4\Zota{9}=OgO+nC괷;rkM?K]G gS<{ݗG/I/ίn1al` :7rl|Qma>iI$ b,|״=27qUOr~bqyi|?NNNNNNNN}za>m^&za1enMi}g<⼌_†IՐTS\Xg#Y]7Đv_Χ-Օ=ʟ.{7'rT_8.j:. ֓] s>1'2__Ǜ#;?WTg[[lN9#~k5;8ZkTW:;Tߵ~T{K˾/t3=ィ KilyӋMܗ0[cKQNW\ai3|7>'q.4l1#jh6( EsjRyn~^ 5&6sA7.\jɝ_ [v65񕋮V싆r߼0x7^e((.>mX[)\rUWc >n[/pZ.E%Fxٜ[-՞=V5W j37"U|SN ʓ/;]]_=pxM\vl8˩vz.v#y5j_aoSv\.k:^J򋳎Zv_Ӽbldk)o>G+ =Ub˝cü;xq8=ż|]?9ONNNNNNNu1ջ\ak]b6滷U'k tuT]uu9tN5򴎣;>n[]o <Us-`|FՃWS #;N<]#rWGl ouNspb/<_~qٯr\ovqo|Tp:p:p:p:p:p:p:p:N:ˌ^/D(y/(K}Iۋ }_Zv חGL[NxOQ5V[ŐpC[<;0„o [c>I!/j.W|=‰[}7\d!a17-:r{9s׏K\ ۯzv] j&o1 ~m;8{X}Ɔ)Zym\{ž|>NNNNNNNN}<6H^$z쥤/H%^zƐOgjem7ͥaldS΍~q$ z>:}IS^˗%Sa 7=aNZ<ʑZC IDAT0)-wj/K'}ٷ_F,^L_X_ξlurtݴ8V׎su'q޺,߼DždE5w0řY/1X.#}}˶Ogkt[!͗A/чH+F/Q<|{3'ny ~X&u6-nsv?Xak٪zsoo}..]}d'w>cg^wO|˖hg-zﮋK>_VOӁӁӁӁӁӁӁӁw߁}8ދ>ܿEn_&h'< L/bI,'#T6ﯯų_./g5qE!^ح>b'l$s|ųcnY^Oڋy\lŁqamԣlo/EWsۗ*|I{&>Xqpq~/?hM7U0jٹ5a#r5pt3κc gNs~WMӰ=6OW=_fk X}i.yhf¿$0/2oZ[<.tuGLn?]_a$b÷7\xU\1bi4p gpOrt;f9$r5' >sikv\7jsz!>xa~Or -~l|lc93X6eyy5ӄ}yēf6N^<<k1IGvsy%`߸ cm;|>N>Ӂn&_zc+f_/ONNNNN~=z"<"Enoso )&K_l/TZ[O9|qz9zak[1a<\V_/oǪxscxΎ\j*_\Rmo&bskHCp4ز"6Cmeᅼ3L0˼|v~TK}c[b#wTÝ۹5_a־dTKֶޝږUGA bD6&Q)#`>}0jbW,cHOAD&(J>qgsUuνuHc7k5gsQN>\ׇC.O<0'7aSN|h)pG]ׇi_ Fy5 ~Clb犑ޠCMnNˆ+/s6 u7|da=q&1?}gMs~V̌?/y:;t I8.K,0\TȊaKb\|Zhcgށ{گĂp,@b?nm1ta#|vK㡭\ $7¤3 Nn~ ņ*7Y,X\.2y2a7Wϖ%\s1aMW#WR9Av}WPu\xk__^|j7΁^Z`w>cyȈl \bLy /|oxr9`_ؒaF[٫3YQr_ӏu)cgQsltN8[F~el#;&WxtefukKOb[=77pδ6=cWW@Ξ!y3^~yZaXgy0.1+eΗoyح5SpԬkZ.Fl? .o`odG >j-o=7OOJ/W5cY1jodA,mp7Z_v2bqCo x?컀)zpZ ’/.k|ށ{@<ڹw=k~Locb{pE@ŏ8zpyt/,V!|H.[1_ T7bUĴpK6}t|чOc<}:E٦5Q1jZɍU7 }[7s /.?esʏ/vXr5Lb7ԃt|آzOg#1gaՓ[^\=sNXtƩgi.y][zQ,n휨baDz٪% ǼN?k {\,>\Sk>Ű#s1|p$Wk^ZZwpQ~z˳9GgFm6?1xds~|*ox6u o_įyM9{2`x\|1>}pzUYŜ7?;\:j~v;w`ށ{>۟!k#E|0 N[rG6CO:1'fS\F6!_y| |%x٫pK[u:.r1,' #;+ML>FasOnu汼bҟUC>?FM8y]G>X8 _x1@Y|/#ޕ?F5Scqt٫y9+WryꓹrV|o3Ƀҭ89qΦh8͋.ׇ#էS&?yS dIVC6y;&Žo^?m)&koWy)'b|kiφz+ާ˟(&yþoteN](s @]loZv;w`ށ{ݬǫ=;\|^ 6Fz}=?-jl#19YLyqrwf]|_8qUdyM B?~Ɛa7}#Zد7zu>9Ū^ QXrɆK2>b'~kl~8ڌ0v~ȈuW }ds)ZÄ;մ3LtlM?CWmlVT9"yF31:;'b/65sW]#Ö[\nDk>=O/CXqp0.~q:80\ zx*F=/=~N0[koK?)[=ΟjM}}ЖM<}Κ#ZWXjG\-|[M:ӅEȥ9p(8}r<_tƴkE,NC]]D{FŤ s..r6l]]T\F];w`ށ{nۇ;a컆ڧcR9רxpĄY a\dz$Sn_:hO7yQǀeC }/z(g߳[pcc1Etls$vQ|"~4uApOq00Zgb+j^yS; c;y6y5q&rk:`G͜Ӈ_㫎F>x|ᐭ 5'̖\o;V0`E|0,NDu,F GS<^=<|q^ W=0毞p7)z{t&^Kb[WkĴ^6aV>%|8Q(/ pAX;|X'}IoTc@O^¯''E0Q#ot7ɋ'nK 0)nՏyΖbϽw`fEąc<B*ּ{;w:@7ǢQӷO_E.<8ՅO@39[qJS'$Y$TǨU̝N\|bǓ|ޑgqWdtQq?1ʃbq9;'9šy}`?" y|P/RGp|`uLY.=Ώ<}ᓊjMV6|yéctV6c8 9CM9F![8x6z37}xEaEvϽw]45·FM/O\l<.>6*.n8o^wϷw`ށ{Uu{)nOkl"+x0euU[߮!\\5am|p Sj5k=0s>sLSl~ۜ^bDKO~X؋7E.׭ԓfC W\}ϗ+~msZ,^!3_ɟ.}5!#L繺OygAƫE0'cMlG\A븈*{nt|r bw{nrfW6[k&x;w`ށ+{HfCgr\pʋýBr󩎰Pu}^==Dɟ,*V}0{&\~ fb?\b=S<UbaܽEܽ}Tk͜0%=,Bbؔ'/p5[SvlZ sQħ:Wy븮8Х!E&q`'O*:e%\K8dH.7]⢉%_GF6P8]ٳ\|MbgtG67O8v z̧X<]~<4}'US #83}|R5r aLrtQ]#eƬ~r>êj3IS,:W;_Šg勗3;ٻ㛝 φOd6{>XLvlp|%8:*'[zq{4c~QryK9LROzOuw&&ժ_m|q}Vߨ!_z;`L*ߺa|#vV{Fy|3^~kPg[/Ř'G+>;/.{F1rp1C?oR]c ǣ[o<~ aLu7¯Lq5+U?lW|e>ua~#>Q䂃׼%{v8L9-@mv8s*vPl36 䕲㭿\$L=Zp̼fM|}99 =Gp+bGx_-z6D_N{}C0(?d Ly4Ӝk4O0aˇ-n壻3ĿZL{]݉zw[c}+O~U3P菮G=QQW+_??l _=AWۍ{λ.]XtavQk>sط\ڀ\lB0l(+Нwށ{!@70>S?gpUF?zUnm~7|0/ kc {yz+aΘ0Z~1tk;K~v:<>]1&@Swŝ1#n롎f6}}s{ЮwNy'<ŕ3x5 _#њC8dc34; Wهp\`чIFzgΧ_?&㭭|$Ɏk~gMQ5vn;yЩ!*/Y3{!{I1֓Hg-oy~yf+f&F|=k*o9Zdm5٭ń.l'}Q'W;LO}ᰓ7ŷ0تQ|0j3_ւϷw?}OggmpS惷ԧ^e}~~÷|˷ oo:9y}w";0/ц'ุ$E ;5Μ]NOg;;w`ׁ8u; o>#?#|]ﺦ@q?c?v&֭zxs=O'o橾C >GV|b&cr>z76,:: :rXŬ5QaoCػB0Q¬T|P̿9s~qO&'/jbW6-W6|$}(g=wk4/O\ܬg+>UF IDATXv6d-MgwX>\|aO1N|V\zf?FΏ=>خ5Z_sigL9O3nw Ox!1?ԛ_u_OzғrFxK_zxk_i31nVz"Oىt/{|wݥMM_]ĥ}"fO{&? 7/Hhϰmx:܇j!|v:mrށ{\c>cNQ?XUEIt/m_z_~xk^0>kAg_n|9ħ/pt >yW|{51|O0{@ᓽö=CZ ?ba𛔯ZԉÒ+j7n>AOkǝ-l{;7P5Z¨ӷ)r¯cξ꫖/l>]N60ڊ!9Bu^?5cZO}(hq8?|nr|Řcް6Ćǧ>~S}ӇxŲ!zOBձCt0xd>sjW=b`tjMLSo˃#1ȱn]Wp^m|[cy`ʥ,DÎ ׃91kaS?sM}g;yi j4{63.}?c_b…Q ӓ/'>>a?wz]kvȓUn޾ x;p0qP-{}C Mۛn.=Eqo n̋K2.&ޅ<']H.8PұY:Σ=ށ{}'[ );U}{C]g<eW~ >|w|ዾW>j2Q+eٷ0S {D6 L o¡w@1s aWGl5LT 9{kS8,;Yxxa =>vz<ɞ}xȯȧٟ>_:~L69yӠ#ǫ7rW3ka/?~֨9F>q'ŊSL1\5MpW{62gM7~)WXvܜ 0Jp`lِ(WbZ;}ꑋ NLqً'WKg bּ.NTy> 3r+-䥺§WGsZOQ _\ZaOj|Qu4WnrLOu^X2u7s^8+7ݚUzՆ99t?/G]ONwE!=uo_ܯ.ɻPPPOf>['Y|.xwg;w`ށ@Yu7 /|xU?u~؊zE7\Ĵ?G> 戏=ӷB?:a//oбd3`&u'E] Lq,z$טćOnC]UCp3[:>lÁ)gɃM|2b>trԻj'>\ԫɼ!5UŵŕSlR9ǀ]?׷؜=XW~~EQy<,>IxuM^Ea"}(Rg:WAu^,uˇU'b;v:񭏝_k6gCtrT[(\GW/¬N_?5P[akc˞?$LXF2.\Xᵞ|qsdѫ'bGm=a¨O8 >_Q C.nEWw/I]4?AWool>C>W)m$_e'|i)v7.Z/s{+{&h 63ǍsiS$g9m(nl]M]Kj|ôo{:pgu?Awt>4o>3&[ xd$|ؼo%]Ԡ9+9UlkQŦ'8݇v.Ts1:Wjxrۄ/ F5S_0 U %O?I쉧+/ͨa'rLZ ZCv1-u͋ \_10cEOWqzD8Hlϗ/񡛔_9<{[ ({ՔYzlC<{,@V;jO~]ETp$~no<OÏ菞~ȱo>cO{6A|t/zܕ%ћ`],(6&~)r1iBօMN;76u)|Kt;ށ{\xӟ}}}?ӿsVoo}j}cOC>>1~ L>o/ʼ}pJ+n-oO:jk|$/\tn᭤htZKQӟ\cSwkګqb&/v&wn|lh# 5e_esNĩ6v_~y9'v~t'_e]eH̾#cqz_l<؍|,{k'Nn?F<5_Nj<ͺU[bPLߺ^+N?sѣ8~6~qֵkaˏ\̯̑5M_l+KzQo[wIq5䴦'Ll՜NOpFsGa>3k -z_2|ɏ/nS^~}j_9/?_dC~r(MS2asn v:7&&:kM|YXZQqzI ~m/AP{雀``杓pT۬y%/aSU\^&秆HL[=hO^Q8u9'Z۵<&Fǃo85[zޙ|3̃oo!e~ׇ;oT>Yw#"|[}T_X}oyk?9[']d;Ѕwq響bbB~{߻]D?l@lo۷MDL=]lb&ه}؇mP3: .X;pw`-lk뀽[nS|ʧlڭzӞ__l{^j6c‰>[d-@~ķع;1=b|ꄯol+yUבּ<,=]/[|S 6{V-bYC733oulN`3C6 ^!A0TWuN aV99Qlav^VK;h=D,\GGrFtͫ:[; knTvc3_uŜūg2k+8s>dr3Grx'Qgɧ{vܢç_x|#jѓF$ŋ #>| 99/aYc8xӥK8˗^V7p` /['Ys>avs2ts%,̗/99_?Ig0q~ώ` Z<{o|T XI͇}{/zы'=Ixpzr_5tf)eO;HauNNUoމޚ;u@?]|\P#]g 1+s}=~wGwhxv >?9nk;pctofaNwߺ_+q~؏dzSESm M|isKVX䅏 ׻w'|10+#rsqՄ;)W1qS ;L\mddϗcƋU+=yڒņGWa5{Isu+ ߙ+.͞om*0'O}rk' \Y-;)g~`lrW=XXQ;?(9;;>}T_zi$P/.&FsuMZm_qONlr5zyԛpU#^M{r~Jڪ97`y.2dp+]<6wN?s!4η [9 'N:P#8oo/:GZӟNֿ4!_1*O4xĎ}{bS#E].k?3?3o |:7YG>@soϓҚ曠j'7F't'/絎'~BfrNǼ)ܷ)|7!_܅η 5mYk?I>4{u?w۾۶<򕯼þyOwi ϢG<i>h[ۧۧV\1o >p|Ӄ*Ԟ/n:?W,j8jTUdX~YrlQ?ь>rk+v;շp`Q1~.>f.|1}uqΓ:ɧ)M`L2?gLr;?Qqd0X2LV?80ɓœ}&9zP̗y"'[՗)_<_S>[兽仸lv윑:Fq|S8LC\5>\ٳNt::1f Æ1Y?M,^=al|r~aҵv/9+˜s|IRI5Sռ`]V4Wgŷ݇?ϝ߶{;PC??}韮+]v7 wdݛG佯wZ]]b<6AU wӍ g@Oc9&&SSo4 L{ O{f{$;?s>ɯ!.۬EbEx>>W#j[,5g>2=,DFj?K5g ?#b3OGb##)YbIN1ԇj,OoTr>'1zĔ2LlzèOH`-S<^ޜs[BϿّb;\N/]Q銇!Xz9_kwTkqzxyĦWc~a<؅{y15ԅluϬcGl%?b'G|[St7KkHo!Wj#+:f:/l9ªO;u5V]8b.n4Ǜ9>?|ay{2mS^;7$v"&;1tv6׷0nkm\|P@ljfOĹN#Yn5ԥ&.tfͰ`;w`Yk_~;߹Y+^?,} ?6z{%󱧵oᓛU^sZ +oLSxkOy_6ac“?yR1Z crxOg|fumd^ţaT}925?%ɋsby [}*w|p ǻ@mʱr#OU.'zfZߌ-Guj W;'Zę1khK\\O<ǚPF1gՓ8f}ـ65,+1^kMtw[=]Uz~ngK)Oy'pϓw-I'n&_ig;BE޳>z=7"!kth_ ':\PK7Ή vWշW^ZnT;w?3>җ׼e{|?X|~8Rab`^hf7y/loi3eC~07?96hkm?k'jqM zn8ĿAoZX:#u8o=Ъ#\qS>d5S<|:ʟ_3'\j+o=ZH9rNAg-[o+[GQݸ|c\* IDATaէ?jc0=gO^Quj/A"G>>(hn2RuЗFvsc/HW]Lr5CQW[dūS nQaGlrrV,ʏf}8dxx[X< ѫWlD`:o.n~7~׿~gg߮g__}''7 OOǯ|կt_%_rf8;9]0do ݛ"{>[K>ot*f93/zέb.|]Žw`ށ{{??ަO}SSg>ۇ}o|{$777ss$ӊ<=xK_,=Fo_Xh⳥zĘP4ϟއYPVlqzz[_W/*ԭrk.vq=,sdM]>FֆKj+ ZĔ͋|3NY`dkaǎG罤jᗮzgFyY:IN '/1\W~|Û2{8j2K'9o/g,8o,_r5ZK>!]-a87ÚlO>9+wu_Q>T}S-VNuiÝ59F+Ns.Yg]~mo{.Og=𲗽lf,F⿮}~`˾M+_[?S.7bxoz֛,u bYb}9w+;w`Ne7r7W|W^򒗜~sO7-3X̊'v- ׹oՊȓlMƳϸg}1_Y8a41m2bv Ot̷kl|p~QwL:O·t呣:[0P;c|#r#]<=[%sS7rAt7 ['x'v wkǴc|El 7%{O9w qbI?.uOvw`ށ7Fo?]A߼,??>>?<_ܳZ@4}W^o8krto?=y_66=Q=pĢpp.y^ze?mȼۯ\B S.x5ey L~b┳_`Fc1~f\rb#Mt'Y޺(w=IDGms U{2jݿ̧jN$\s-G3X p'f8yIV Pu2Eū\3lƤb8{¿MyL}=g:ʼn1Z[Su SՓc6ٛj Y V6V9Ϸ>N_xqot9n]Wt󃗎mn>b˷9^~>d8+>9o*{8lq+]bgь!Gr0yWO7KW8w/aFwD>HZxAnim:|G|4]!ys{H-"f8D?F_v1:oSkk;zaI.wt^ƚ_MEy;w]|ӟw'>~ |\`O| ?ۓ-3'9?!eo5oOoG!μs]tO3,r55kougb .oɟJ.AּAϧlsaͩ$~ruf#LOtF<;Ÿ'$]<8ߎCTZjG1+\ˊ_ ꟸ\h![ypToUɷ\ՃVzŞNTNp:dxumЯᰑ'Ӈl}XXZf0߯lA]`ΥlN{:ۿ[n;]x;۽[zwv?5O>ajb<=%{ybKިn}BM U щr o>XӇ>jsNo[~Б'&K5O5|~KZ71|~#ޯf;}wټ77uo '7 aXu3ڛg {s;;pgzzg|׊||xH_<;|#l c{;pstyJwCCӞ?)Dn3hxP> O Ğ6Wx=tᓪ1p *pՋ#>;_9M׃hT~:|kXz'&6<=}>V? cbZ/p|8RR||V[\_5OOzuTjQknv8|q{ qu#NAiN󫗸v?mr^^q |WCXTKXIW]Ճ=3 *QxqrF|gU?^5=x&6QN<{;p^p/4!r{\{U]5sO(9t=D ^dbl3/{>a*&"1zeax>r∽:8{Ö>s@E_<-~O 3GߜN^`?YN}@B.WŰ! `3ѫ td_zq#vk vN_٢|͏tb֓ +Jv`k}a}~:rοx5W]l93'{¡KKFk :rsӅk܀U[cՖzf-p.^ԃ:aDaᴆ;qKOSljSSDǾR1x?Nti;Oy<}'7Mt^3roi+^rO |^.~Ӗotj7kOZ烇ܯP;zoW-sFZ[ma+vJg(\(O\k:5NW17; + VkΝpSr_N|a6Tspvd*Wk0w )dz:0ַbuZc ޹֚g=pOtCn9=GGlh1W3ޛg#=lvVʮjoi:͗7誹dbO2R#cpyˆO䝘ߌgɯr\$]d/8{#;霸nz}\X;;{IGсSǾsy_ؚOiށ{g颹Oώ=t; r{&<jY \`E}x{X8ZXN>x@g>y7Vkԃ0_߬ߨ$qQG0ʁu(==,>qs }VZ>k1kr}"cM#7ҋ͚ep0gg1.ޠwT?;9l<떧Ͼwē[ 3_x]#Z\aҋkѷ0̗k0>WDQǑxY:.mǎ_=/OX娮`CtCy~>}Ɇ%ÂZ掋5j/rk!v7ZUYW10Z;}r}[Iƴ!\'G>|Iz~|?;N_yNNl'${Swϟ|]'Y;q;FoMy>w`ށ{"{joM[zM?>b#,fIfa=z9g8-4C4 y'^L?9c.[a?flZzac֛ =ՀGE;puÇcίZa\ wȎ]>qj83.LnMi8g|Oj^ GѥƕcMl+:6 6~8Ǒߌ'WGk;q'6=*ǥ٥OrpzgR|ţc<|x.ή5ᅵrZzvc^i^֡~C_H<aG9_x[:d]奺bgU#r7s'U~lƴ n?FG7]jVVZ?:6΅5p8P|ށ{Wir^Ŷ>p}8Nȼo҅5uuEϧanGco}oq k|36߉o5Ng;a ^obQjH?c'Gql/ /~gm}S?|8[8da8#qI\K#͵\/&3e~\g1"O)5;$>L=okWߨʧi]aů^lK05/uX>gⓝJ0+o:Tꁯ% ?<[N^7lGyA6^IzŔ6.UO~I|٪s=_̑/=]s/&j7W(q:8ϔo5c1bǖ]'CXDr-{zPX<[~">͝SFf~y:x9lrDt.'70a ӟ#;NkG^v%Usq:^-塯.)+EW?8{:YW{;w`F<樂yD6z@H! |=[5ci^:3]}OgMCez>/_uVF IDATMqhm$XwrAls>jdzxÚ ceL|x+W:b JWIl \bl('o3^Mx= \NoDt3gwz-0YG~x#{zsGu-쎃ZS9PǬsNlǻzM|SWik]lao'/ӦI|T_3&Y-"/¥u}j robtQ%!s\tъnz~p0瓜_q;ڒȭ5|.mHe3ΒG_ WKMJll PY"Ww*r:ο o% <<(c7nW'aBݺуYoeGhlpmLt8ǷC \ǛG\,6۩<"'0r8@}lm}L>4=에I #d3Y>[Kk>ޫgXs_ Ɵzbo~jG5sy}4bk6j gwkcSs{-^t}ޜw/8rXVpGp޷i{q g?l[-s'5'8Dm?q7y-?n#K|EN\0$:Zh&Ŷ.Uؤ#kjq$}lL7u"ӚN|Z1/qf*u={?)߻;-W܏;p;p;p;p;p;p;>-yOּXdys6_;;xM{eT/?.fS`[Mi8oΎrGi WbW-cMٗzcK¤:q|8ٜnbWl>1;sŝzcw/d+.;s1ղ'\>y8ky;Y]]02ou'奛o] #>Lh/6Ql.ll^L\aO9vf? 158zWov?z.?^TOpIu\ZbيIǹڼ^h1D})˾fZS؍_ϵ3cqޟtCb5?< !Z/qE6G^8MV \u&xAWo$\l/.bD}aC<[QW8뤎!kƃ_~M:C.8&7Ǽc'[֏ {xDuh5TO5񔗶?pǝSU\NL|eOOmj_ N S10Wl jcSbi/9;iKb pH's14zݹgz~yhqцw<[Z_m+"9kR;f^,b>~;wVa?V/<;9?&bnnnnnnn~xHQ{7kA9/xI#&N`nӿ Ӄ&bacoMuy4 \aqo=Oն{/rwt\| ^L6<Uw/zNxGﵞ%X攫>iix=UO_8(|T;$k^~N\>ɩ'87O\o~ˬ7{|"nnnnnnn>Cz@ ~i+9Yj5(|`Y3p>{raqk0T/[y-\وҾ̳^#[ct>:l0h : zKGgMSLJ<;}wm'>9#bW_5pf_^Ֆ_18˓ͱ} W[X3qeoN׋pg|vNlMVo{fq!4? #~s<S= _cpոv2_m^QLAxvjΗxꄩVQ9M1|<{$kSn6Fn\d9?O}q#˾,=$i ?bۺC=lLwoEG'z:z~mā:j ׎Vjyj~K};Q}zFk9E8y`G<|= ^Û8_M~>.g;54{>5[q4$>Ux".x{ zN ױW[.|+7+\bs#Tk>;_vƿ+[eytɢ_&nQCy0H?zH=9İm>vV-3ɿ/< +NCN=Wxk9W/͚-GxǦq5_|bZ=׿]k|z$>Qd݃X1u0><//#wÿ?9ŭ7lﴽoJ|/8I=1UC<'c[nkIW˾08>5kK' Uoaai77w5fgNo.;Mxt\Ѱ8ʻtpTUG_8kFogcpVO0i0$X|xFf ˾jo]-׼Y_l˾gPez!nO.6l;|sn0AN)\YWOZO]#|؛Or} ;\XD~5o#^lK߯\]VC5C[]Wr&jG\?6`uÐ/Dĺ9y>qU&Fʭg09$OW%_=9V`G}o~z_yojGk||/ Cso*qoU?o?ı"ai6|[QџОU/5 31:꯸jE-rKn= Cvh9.l君·}G?/5v[\9脿} vkzϧ99O/54GaԇFᘴ6xya_j7W 8Oԫ^,'N.9B|0xkn$j_]oZǍ/yCGo^hק<oZ#.FSyI~Ju*wN_n8Owt>Mq震o{ ܁nao]{0z&4&.XsZ1L⎯:=`ry^m/uuw0 ߃?o~e>y3]Fǃn{'pa{_1/vyCzpuŵ;Xs5:>6Yϣ/,qOoçya>X|>ŝ$8h_~ըabOo-x65哗МzR.gF~^pl}AizNO| zL3G^,eW9;r1/_{;5,pl` >e%<,\76R ΰb魧/Y…&ɞ.|g,nk^]Nkcźb͗/{m>?[ēޚfzu5f8|5WؤM-ֺt9=T7)|q8#5lZ=@pȷ<~c<4Ns5k˕SNe>V;`K5]g3{-NۆSx'][\};p;>p>:@Q2G<<]Gvvvwke׺F~EDF_NkjGiۍ?La6[˷jC {2U_xx6_NUWkvsu~9F\TG4~zs٣%+L_oW'ٜb$宮rN"aw&O`hٺ_</Ǿi\T gah1$\ 'qW'ynu_srm[~E,l1i+oΗj'&]|oq'w>W|;ETw{j- u/N) /s|Fu5<QFw [mb{{רj1olnO6G'm$պmO:W^8l$;ݼ5u=R=<{PpMo [vebq^{ڇXU0}6ogHs5Ë6:Vsg(X)XX8vީ}Ͼ{b+/\lxٷ17p]|ڪZ[!pE8b-W\4|9|85?|'Ny {u9'z}Q"&<]Wf[{&ŨԋSןrI-~jNkqٛsֳ|EU;.FSU5)z`kv<>pa\g}jcK#6".eaoa{zqxsW=sA'՘CjlƽkD\zpanOp>g76f?ybͶuˋuH듏uߨWav}Ju,5o0 +q;[#GZw̓۹ڍߒrU +x`HoubpIy+|kKwbN]ΰJwΆŪy5< ^NkU wlF\i8_g| ( ́ ]1W_:Wi7%mx?~k_aK>58Kp{.̷_{\纗ƞ\\ ic}ěÆgI–= S35 +Gb<~?n6:=8I3WC/ԯ1JgP9hB *Z=ׯW3>׼a/.9꠷~<Gˋ<|W.yLzc ]=aٌzkjb} >?͎ Y޸gu~X)pBp{^•ہہ?r:k4شwc9>cˆ_}8>2 IDAT{_[cn||gbړ8x91o>~Vz'"rY˖=;׋[S-=>ʉ_[׺8q1ahBcyů67<|9Jq!g,O9mb򭮟<˾Wo tawA]]0+i-vM:<5]_eDc,Tа磯:=t{"DFDXҗ,ahF_~6L~gjYL1|pk[_~e>Z|=#ϝ~e'Ϙg/>hC}Jj;:#>x1VOu:~}&G|p9#'| OFsKupUptX۵rV'~D"=ۜ'$[y1Fp:N6DqŗQapa>W\;y=ߜ_\:8hsz'muuwZ/nہ?Q};o[[n˴n:COʻہہ?x\ ]m!ާkb1iQ}@kMw$/|'k6x">a^իWi9=X||Έ '|¯F^G/_{b[9!.g0rP /I]q9ϨaވZdSsaӾNu8ǹ}Vlu.lvՓpj? \¸_=æm_awlGմw|6o%M-|O&'g a3š8K}1P׀[:^'86VĖ{c? ;5!dױTb8 _0+/+6hOG <OsV}\/gMlIog/]oO^N [Z's=~Brwv@w::;a:Im\gvvm;ڹ9Jaփ^,mwr|t]1tTuL]?zjsXB/?N8.(yqt4.ó=sg$ O }>c-tkqU\l>4_bnd'z1tXkPwGW:|>V=0[_"fqONujq;#jj,_|O^#~&؎E\7{m`}V;lN}b䱎{k]+s4g/_X9~,$S~}~3g9h#?s|!\>xI'u¶a0oolî.-^svd؜_&; .>uЛ'ޟ __7Oe߿/, يgqk+*]Y^7YgM%Z}.OYO^+ʍG>6VNx{0gbqi uח~]( x׊츫9rگ890g㐷Z:{Ck^ťxxiXm.~δYK3|$xǔ 5 w|za8.QKVpddI0덵&v!{/8ǿqb+^b_m|D^xy:`^ۯ婶rZD<=_>R/[qמڃj-|:ǫy{-/=W&6v9{{5&͝S곆5M$t!k.Wa <%p፛|caG<qx՜Zͫr{Qw0ٛӝ gη\5o wvv};ݛpH粵'R}Xw?;Oާ}w$6yV=T2⮆rXzha3Wx#> ӃMi]il< C5bvT/-~{yg{8^^|{0O\^Y?q)no|8k5rC5A™? y=Eo<\k~)8ߜY Zz +\+˭6wQqd[>Ko C_{r7-ǂFr [n\ڼms/l)&z;_&ko/gss:udO0/xI5EhϵD՟~8htُ8>L\y;sp<l0X'j'U/dہہW:Їs9HkD1KٵK0ۺvvv@׺8]3I{#{/6)Lݓņ6o]kWX6 =Ė| qAgZ|E pkΗkbktW-Q )6_91g/&]L~X8c_R/gr?<-7]mŞ>ދ0|;-|G\b t1iwswe7-cD<,mf6kN{'gt_}g=+)usMVtk vr9lAvv;/<^uIK=@H9⇳ݏ:gvؾpR}mom_ Cs<(޶I8 *;'}Jx>^ < gu.GwyUC|”?.} +Y~zg{.?^.ިI\ݟu0<]aOkC{e&>N:_v1~bʕڼKZ>}=aK l磍j81ֻ8q#ec]8#L9~~=5N\Yo7뀃5q:py!֍\=: kn\:o탊Ebk3ǕہہہmyB]O+Kzq'k1Nsh|9ݗ;4r\j[~}~_Lh|}:h> DvHwyM|7xvbG/Ol)t_ї}(n^a_#1xi 9gz}5\>zNnloTiO uŗAզbr1ǽڗ|\t|p5/9|ts13 -狹b^r_0`*n\UzR]`W7⩖xןp٪ݺ9劃޼+\ZIöIo]|Y<qՀ[w5 Um578u?[ p};ƞ.[#֚ׄ?Lo_6'pd9wx_C?WN!4t$'[r+m+Cˍ@>\7onnLpO5ͻҋl/e{bŊs݋`k<|ˎ̗}tdՄQ]em<^vb97/a[Gh=I>~hqŚWuXx+gpb~1'*H7ÿRlox^~gu,_X\*` 5]\Xwy8ea[Z{=a6[{LqZtI6/[[<o=v6lj/ًaGLY{''&;͗4/[k>wN~CW$gfbU<-/?92Y:Ё<:D.}AC@. r,sB.k9ysuׁ7vvv+^6*?{9]#wk|a鮩i^*a߇.>~L,$?b':/G~acZpg>n߰bxŗ?]ՊgZbL\rn =˳j/5r|{rk|ZaOqŲ-_{[N7ĕ^.ͧrz/Wڿyzs>fKS_}mbWy8&󧹸?xPߜ3_Nu7 ۯqxřYZM5[[y˝o_V? _/`?&d&ŷGsAl-_`q;6{?//8\q:#^zOl18ix[/ƗZs`Kj 8a4֞?5ÿvXݗzhSOxk}{|g{'j_p`_ p"w]\9;?.؁Ѹ.tphy3v9_};p;p;GG}>U8rtMN\|b2hlby0qo_ouMs_HF'=Ԩ_8rP[Z]=>wiYRG x\!b[M0uL[;5ňp/__k3Pƨv:_1ٲ_ZC[) |o~7ߛwڗzTNƾ3`PJwWnn|9?JonuNvVĵGLp0lb^ᓗ1/6=M}Q辮/+éC{í{Ih Úrk^6~>Ŕ6KoN|4z%2ÜG/sמv<[t[`_Ao?R+߾9&7_ދcbҋ^0Fǒ|/:)[x^9wߙ7ƕ3]Mr[ʦg⨟ޏ{'.ZlotbńMGԫθ)oqipiu4k:^Kjtvm|DLu=+V+SII4j]vrF=[Oyo𭋥X؍狿{4}k}{뎿q_}ڍAM ÷?AnK{0wvv};tv-gjkہہہwk^r^<~^7{X2`se/F-:Uxmf뺽~E_!{5G1pl?8W}Ɯu_l}/H0tu7;{zN⊛ g{a3H]{xߨ4\q?R>u,O['[~xٛXȱ|Ջ??'O'Å gv6wC1(/{¾3lĘ,y2ڃ C !T/[xpkW[lt<~K+~Qcn(.͝\_OgSw\omXn{x别m|9^{akGu>ÖcWө_9l4[m}#nd;˷b~'a~\.ZV^mk[>r}m9w.ڀϗu˕5_/|gjǗ.ԧUwt}Ixb^3&'>vgͽK9_n[}oOsT{`:|ޟuSY7kc|O?.xtǚ<.PnrqvvssM)]K]G8vvvk^wudlܛa37¨/ ܟq~oA~yaDU?z#v׽&.9h_7Wfxԁxzb%^~8%_kaH<1!Իp_//c~ت_Rhya>ԙ?.NL[Z=[WS{V} <~}K& IDAT-8Iq^ZXy;>s^^ rϸYj9/#ч\;_iWK_[OTy{CNN L,U>ye{kjeQ]gK^~Nׇ+o0ڞ׼ՙ>T[w}(>NDkZi5bfƇۼ/_}wο9iuOÓr,{'{Xs{_62}m5Yqjt<<0}4`'},W6:l|YVI<//l$LON/w*eAt"Țo{ܤSɸ5_Spɗ.շ'"̽_VW2gS?ۃ@#,N_Дs[\Ypù =A/?~q_{/tFړpnj/8}vvpΦnqF-F9}µs~ٓrmVuU-begM xy}acGoq+Gy[?_^%qn/Vg@9\F9gWkun=x;v/.>BnNON )Ƽ:&<7wǿ9Z>g :h#,naFIiԷ:ثQMlaؼ}Q_r_{iz^,[^eǣG?Ʒޞ4/R:ƙ7{\bH|k+j u;~:[Ba$K] ekdOԔOMi8_&8{ٽ7z^˱9_}w ԁBB:V}QKoہہہہہہ?y+"מp=tO݋- kbTjasGo^Mp=`{%|EluW,)-~z1燏gy'"6a˾q=|.^>ޏ|}';˿[\4[{=.zŝ]?>bh=^xFQan#V޼cIL{~v.X:yɶ{+<|r/^qxϧ$~󼘰?Ǿܭ.y}N/=~^xΟoNg!ƚ&Űqy?|sq]Ց.:ӷ5.n?яpx0XbW/{e.ꕹ3 ֟&ՠխu\;(V|1`/}bv ȑv~}{:Ӹ>Ѹ syI{w-WvN˾lŜrIv{fz6Cq4l!y=ؽq[>ֿ: :rl/ڬabʿs66Km^d6p%_Vo0u;h=7'Nf_uv:n:őNjvvvvvvvD}72w7&hH{޿}VXxsv||T:٪>T|z _޾s؞ViBlgӽdP8PuC<܎\],>#yS/VZ58_ʔ Ʃ._xZiSlu[hXo^aĔfb>CVO~>s/OǯwmcN5Uc}ώc|ոr&jN e-TW?T#cWlŻohH>hžY0.7'{|ljNwا84_εي^Chpۃ5y{ 'OLW5XXC]퇿^^l4XZ̟ l,.[{OW4˿q-t8eN<>~+Oq:o|.} _@  ͛5O閹/: "ܟΊ%.Zn8 ?vvvvvvvOЁ=>̼{liNFz0u^+.|}q7\j`w?OF...n/zi^-c7^n1 >㔋axp؛ .t CϺrU>|SLX{ "vskWfl~z^`_qmp<>XdW%q~Ok[m|g7f,nk0qwN35^ʓZԂGM|=ÇT'- u/7'?)\nk|E3ͭ>.ya:81w9Z{6?.8aF'|x/\uϼ:AnD,߽E~xYeߗ<Ё l8:p drBYeBA/fOWnnnnnnnroފl{38`o^-΋7a=6H1Wmۚl^ Ck˝{z.qU|6v\lbMKwZbS|Ǻs'ZK9' f+{9N8y;>SlaN/^,ǻxƉ 6aKC.kt?zr{<8 ?Y}岏|g]gZ/޽@Sm6k#zub]=0jmco_=5+j\L _=ӯk #0_| |&HUD0|z[=zlc^!k:~!H{`,.'ǡu[g< .|&O xn 5OE䑓(ouUrmU83\=)'xrUgk931xZ\FֆG}e?,-:?8gMԇ ^77ͨ6v8>g]]]]]]]a;;ur'w~lG%Z~*awe/K _`^\7/9|Ou_+Ok,?cL"dĥI⯟_ُ9c-_k.P p8\|r3~9xn l״˱x84Ve7\9-C A6^`b56W='b[>r`oMSˏ=&g9]n^lSO~(6_^\+w}.VXy- ?(~qX?^o6j|:Ś}soⳇKW^x^nc7_XO;/y:6ƭg+_vsp3?9'F_js.{rm6~6ܐmiϜFliv+++++++PW`;)H|]ؼsYg3 ιG/n`#ql  |x 6n}\řycyxXv—Arx5tx1j5g1%sxsptuk,N||?So:GL[9IgU/V1Z{iGS.-[C8$LtsA:&NJX|3+16'^(s/V:l:|lggqps\?|ՊOը_%w_/װhfr66/{XrWOXþ nCh;`Od~˛?ɰٴyHsXVs׸{+++++++0W_`YJZ:$lo`i󙳝?%8usy|H4ģ3dΈQ7V># Gy+uəFs;Zah1ח_"&W}g^=)X83ju/@ؙ,6~8j8HhM^+Ft5Iɶb'ox8Kԯ|䔝ok |R\k7N6:S>֨5?q7 3?M+nzx)qgNl[h IDAT\Ӿx͝1\ow?w1]lY|Ykq1% ϖٗ7|Ŧo>#Lkk }n.ꉟēuilq~iL-Vqt=Ę#[y|k.Ÿ+lxHZi6"99cb5JñMi~osZSk)Ί+7ma7?[\re'L0f'_>omгS&(֞o\7gczy'Ov{/)`ʵXlp͙ׯn o\}ǜ~b>l7þ& 6Ed?@y~ϛfy:pߨzsib%3Vw^ x^ kkx~*Y}gtfc\_Y8{i03/"9;M 3U6΋r_|6usVTM'x8:s ᒗ{ldZ']j_fM˥l$>h9w`ԡfRx򲗽X~rOk^p \uO3uNhcַp³u_ 7sw̕_~!;~^nbK]åϮ.:xpO5>/an |pS3wuW|)txxu7Siv2oM_L1lŇZӮ7lOۺqm^Xy W8%lmthcRصjgNpoօXok端>.c/ɟGԩ+O}1%{qϮ>O`f5ɗFiMMm>.^fi~Oss&}M~4)j\]}8u9Gi$} 1?c̾1|h^p7G!OwIc1 Vɷ|OZ\1Q~Gg0Wm~wU? Llysk} q.ǙtiW`W`W`W`W`W`W࡭Sg(sg] 8؜ܽ&W_͓/V39H._G^x&-ks0sWÞVѯ^0b\skͅOO~跦|hpܜ/U:lװƮf5~k8C|1iOZlI{k|qsi~Eg;7ʆN\1W9}7Q31зDK )T C[s7c7 8rW%R`nFkhٍ^s=1Gz&9ɧJgbw||ߨOA0]-L_'7Ot[9k#K<.q:XTx$֭_/11WuiMNp 38[~ƭAuWͱk/ja^{~ ?ol>=yZ [ܚHyW[jV2?_1r9/|f0$\놯ˆ!ߩᴙq5隔g1h>'>ĖC ^VW>Iaث9}9t]G'tXm-磯e'>8qhS뻶'b4'1 oIg}>fG.0\G9ˇkl {xY5[ŦIq5>ne?컅 ٛ4}hyd67B<7v~b;mx*|Vҹl lg12yMwߜzËPMŧyŁƿK8|ˏ˧3Xbjά+7=H{ ؇~=cZ _9kfpowmzC1 >6ܚ8 8i<5|bx~kي%dY#,tk2/<969խ1>kqx[u[ _{pl5y~c:l׽p|AYqhf/%]ʃ%_$~"Vv6~[?1k'6=\9קTrzյLxz[C3?Ь;l1GϵQ-{Ka8%qO? kT 1NM~WB=&9g6Mn0w8]Oqmqosa߲+p?8gywS36߭wvvv^?@} Y!s|۴p$h }Ga/ܾD:ŇK }Dm\4qkѯgjza/ߚu%7˹‰OWg>l>~kz\X%@qzNqq\q3o3wy7Osb}ubyO>Y5OzoXAk6> |x39)3}o8amg3퓣X~sga ,;[XbCs웟2_ek./?+?~aTq}f!ŖB}}qmMBM47^> ͟8:סhqi1Mn[v}=PӾH%}6Gxf/+As~ܴm-O}}½JtOħߘs"pę 'ዕ͘ݙ gg9>p~669<@3C/vgA|4GCcqOrӌ4ӈ&xcsN81W}ػ6XW "ƌuǥiħ꫗Z"?"ͅkk/|xkyixg'= ׍_xV}=9R!uY\G(b%0?"|;!=`eֹ}?~䋇n!WuJyg~OqӰ+-\8h9UkZ[}9o Opd 6rÉ;,.ru`;Gקʿ)W]_NEA[Kˁt/^̇Qs8.$~kG~p\1 [>ŘDS&yeק*0^d/W͗CղWxWqd"l5οrӸ똸xl 3_vg!>᳷k LJfy_ͭ2LR|c|gnWI- ᢉ~y9~Xw끛׺b~1Hyןl3}ss>^1fƵULmtKSss06`-L Mԛ!M&a2u|7\2}$_ U7{o{7_Y-WGtpqo0^j,?a¹m"NX̉Oo=6}Ƚ_~C$J*N{<~m3ܯ|+:OMh-u&kav|=rr\)/Xbw뾌ֺa]Y+gRsoq`͋'Gckj'8aë_/|00.Yr xgk^wƕ?_9L<| _k'6aaΆtRƓO{ vpcL؊Ot{>l ];lw-bUr!W|B6l=aN׊n666=d4\3.6l]dxxZbl_=?ӰĺȬXi,8zsOZ__fY +hĥ3}\4_ޭ>LlU=a x.^M[8p7NO?_v}۔'wmfnL.ݦsoskhl^oRob> ?*\8J|!F5/׬@Q8;{>'۫_7͞vucL +~BKL{̊o6ݧθpsG.``ioO8𺷺Ԝ{)㜨_ycuO$[RfJc>.e7o {Ŝ>ͅk·[9s&ۿh1t3Gk8٧?۔g_>ïr+/_pƳ46k-+l4_\Wqؒql0y|3ðsl˞{GK1Mp#ˌ{/~/p4O#?sA>qo˻x,zOi鞌GgVhx٬C˵ژ'Sj÷fٜk[K(.zƇ#e[lӤ8lIljFkg_5sglo|q?sbGҰ>™?L SŁIɇg4#g6E6jG؊{_bb#|CO)6>]nFj ||]Svks]$bV>фzT_._{/imlrO{_1Zj[pq[/qdBHsCJMB`h6zU<PkykϿWǡ go6mZ"yJ=$$|+,+о;fNa_ۃ^`ou;XWnnXcwQg1m/$ay͜;Su.y8'ɌS(y/Nu鋸bϦ=z5'q'/4^s/?6k8'N~pU#Ŧ6; -\嘍G1\8kz]\<$/rѲ_JyOk3.8'{> O\f=[1`a_p.{Kٴ0(5-'א1_}iczg/7sF& IDAT'?;O:ښ9g??}yi>?奞}c9k}a͵s'pZ}xk>q0nk͇IkW{2r(>?7Ɠ>rr-nx>5n| [7cnG<&.µyۈIO|6z6>裧?tOUl_cÏo9-7Y{umɒn"Qʚ{ajٶxiW\Mao>Slܿ/_5F?Zsp 닫z's]_xʳ\*{9}1$4ScsG8=韭Q3śx̕njW/Vm߸WlKIc1S Ol W`V)^%}U8֜xY{~ix8&&S׈8&Lseϸ0l#2֬~jX c\\s|lG V zIk< n}."^ NMf|H_5ڜ+6]pakkNqk0-4LpKk Ƈa 썡?&1gsm0lMD9}0iA'ozӛNo{۞É'Cv7;(ѯ~y>7[v =@{6|mڋFL09>l׊K̇.}S5c F=9ʹIyo}94w2v;Ń埽v}T>|3-H9Y~tvlhyj8񋅛DNKxX˛[<CX89v l˧f c^-6~K7pʳӷ±PrPsVtFgΕG9zk6ֺSb~[eޜ)qҭoyK_&~T~3:Ο2Νs̛g92=+~<Ŏ{Tʉ/>(>q_a|3[Or&o41>c>~(g<ϟaØ`Ő5xq\L 66o4 [aZ9$Ny$K0Obqٍ::L.|֠n>;W_6#)/6>XOl>l0l KɅ&V;&xK#a LJT}k/ş>g4Or0d7 ޸|W+|Փ>'Nvs?[s>39xcΗ`WV=\ZoV5i.ϟ-ɧcc:N:Nș{zbK556>>[yɿ=_ƛC`\ߴn]pf6ѹ{8~Za 5vC^cL9l>8eW9Tw/qX{}ϼ/>}Iь0q{ t+}k?uB~+ܯpb:AxIb׽2.Fn^#[yǓ9'H 1|pוbk6VhRM1|'?ͱŏK\$sሓM^ql/6Wg+ik0^e;&.^ʉN&Wsmau8>6?X7q/N|&&[Wnr[G0iM,,pa1],Z#_ݍb϶kk<״򇙱ĝ>s8|g}׏<%??1ʁMY5^or=jI}x699͛ P6' mo6qm{JŘ'Y\XOY?[vX=ٞk7K;;t~5oӸz/|s++++Wo8w}faޟvyOq?iGم"i#'?ܓ8=s|,◗~ʗ[?}{p>[{k5%ʚĮr6.8uSo^t|;/_\#~?lױpk!yq)^._1.1ojSԶ|MGp|Tͱiq˜&7_Ӝ|˗yM|!gPu 8ڸ]9,..kW}FXƭ;,N‡MӇSt{ .&^xkkLJ‡/O?/>Gى|Ox5 Cpk-ϗl4|X~08O13gW{ƘE,\|h_k.c} OI/⛟yָ~jŇ̛s wFrw튧)O}sWVF{lg6\bٌƇS֞t0U"V,xm8x{*[vu^sSQnʾثg7~S=V~]]]]|fEĽý%La!&6g\?e&dٲWϱqhyXˇ;pM+.{7}_N񻿪G_r`¥Uy8hb]Qk/>HZp[5ξ1 G3Kax)NxZ7{\a'&cw8c<~LiY>n]F̫e&|5&>1_+TxItn{ssaW ?~| g{'0_9On8ȯǝqb{/۫bwJ&l|i6ߦ9,_KBx1W; ro}#y(G\a̋+zH#FΜE*ZggkYkǯV 3>'>9g>W\tk^㧏W3F-cV#L\5mN}GŻo\l ;1k}JK;ڐ֕=]> ?-~7֒pl̹Oj0'⢛O1M&a5eϷ5XkŭOĕgck<|ϭ= U%C?}6㵅dZ_θg.8[܏+xoo'c֗WsXKϖMþ.kߦCfOCqsmH86%.q7'^RXNږ]R$6iۣ'k5a/M/:+'hC73(V`>v†Ϲ8p/{4y+^qij}/˜uPN|:7o=Oq<(1͇t8[0S>ȗ/ͦg+?:E>5>UmI㪱>}> [jpWl0'[Ō{R_S/\qaښ_}z&@ }rC|>X_>l?/p?<=s;!4>5ŏǼZ|aXq9q'{cX~S7G7vM 8]xo׆ O1OzX50S㋿Ɩ~6Ӧ~)Z-yx/,_cƇ4V\uOe\~ìz̹jaMsƞ}7Ugna6^kS`|9aCOui9g}|ֻ϶}X>;8N{%ss۶++++ҪP_R/c}Yy f:CU_݃ݏ܇h{y~cSi_p"裏)ֿy h %KWNڬL815y#tu >堆Z%-{)txgm̳+f[K}r:ʮ_7g|\}vjݚ/rN:5oV<<5Vbށ#lps-%9qYFa7M.0/17[3FCč#?v|v}_G&6s]jLpưՖ|ׂ NRcpRbfO78alt8i"OK溍*\RL|:}I1.Ė|]h/ =.c6~9WZv/|`_8a#UO'9||^x&oèg33.|NuOX:C=,j<}/㸋}z?኷@3la6$ƃ 7}np?pHyC6*o?xϖ]g[qz6in4{xLgwswW`W`W`WQ>[W}'{_DǸ{HE[=pF\#;^.mߺ C֧<đ7Q]zq6tփ1&~Cn(g?Mxtb*9"Vڜ͵^ ^}bb=T?caxkF)oZԿX 3&'/~C~μ̑rj|/_bVkMlb9*>z7.gخtG}_\x`zoja#9!F^0iX.ኧoXao=?bˡcg׀fCbDǡ5/ɿ>{1ek EWK^˿y:1O+|U/kѮ'~}{<ώ}2}̑VcnjssNhk55W\`Y~5תC\|۟ WżʮٻX8F۔o#$msz<$\l t`taYM Oy7A ]i(ݸ_Z{{lx*{¼8$p$\vl㼵~ q4_<4~7kĥssf$8o!b%5GRZvsǘCg59pYCZ9s¨m5r;lϵzŜ)OZke\`vu#[`}bx_\kX4_7z'Zf1⁋[}|x))K5,O9o|M>.)s_ ڸG> {~a䔏|?կlW:UMlͿ" &w4pWhlx{űUMs:Ϲ}>ˋL68ܵU|;j8>|Ϻ6F61g@ΆΏ|rΘ˥X櫏Okߙo`ō{ckaߴ|\CvjzL4Ncu>]ni#]w'[v\a)G|N٬0a|x䑘Sj.ߩ՘?FO)}Ά9~8j'pZ;MǓ}ѲYv8^L.-sR]C1ag [/40˳c+v`ol^jx#bNNs37d_n9-7\3qEr^y8d{OOc=v/C~NOt\>}~镯|u_p03x6rF&7 H}M7S 5~xnoy[NItޫ_~wh|<}<us'!G?e]V=׽m zrL?!=q`çW ܖ]]]]W'88>[֧8ktt׿ A88:G:\Gi|4_t`q\wKϳ\_`}gCxMීp*qԮ{|ȇrÃO|~+Пs8!ߐ*y}yOfp೦οHXZc3_ũ^??xZNYgr->rhMhd/^Ǻzq[s3sh-0|8tbzpf0f`o//7vfq;z066_&[vnF~$6?1piIo++++d~~gg>[.~hב>}~qxgoo;oY=əe gi?{D3Nc8}{Eb䓝֜Ł˃Zy~ oxqCo9x5vC\}|&<ʷ3(n.9 b:+⓻u-/,^נ/Q4yyȁ`^x7c7.A~qZG0OKga/W|8" c\rMͯ__,v>#aK|5vryx\égŋN5n4 ή\Y 6qg79UOYc/UZtv~|5Lꓙ_P> Z>b3N9WsqZWSnQX5a₝xv~0^;Mڞׇ}o8qܯKK:wwOyl>~N_u_w}~++گOOOMt\oo86q`o._vn]Mctl7CB]մ6^_W +|փY닿s6?7;9_|S)rʯ'roc΃{úNg6s٧9g#>LCS/ӹ:.gnƮ/DL <͗M3>`'X~~Qۿ=}}\SS.~r}~W~&-o ŁO{Vy yYHhjo%ǧfٔm۰SfW`W`W਀Ք9ǡ,cKs`ևIa R?x1T{,`R>g΁''3fZ9/>OO?b|=77y99y>N~mG.Ζ΁6F˾瓼|f/~)ZT\b;~>WЭx|H6|Z)=!xj|Q|eo?|j6G&>ôick78<]_’IZWq φʷ`c]9jaf=qX'j _?S gP>O3qhlbY<4>/|/ΰk|`pe/NbjW5i^XMX׵[_Md/?&/^~&\Ls+Zjzb';kOpgEw-~j: 8mWWOS//C?Cz OOoLn G~GNb8$?h7Kqo6ܛ{ֱx8*MG7Fv*2?׊Ϻunwv x@7sHS;=9ܜ>9p_c`"3Ϟ>̱; n~18|h|ϸ>/5]0r)&Zxϗ>ؗ_4G!q%̗ki_}遤>S}%6= ȡ;|kӜ\b`l^Os sOsbzŤ/lywi8s먟l'|46 ͏q/׌kf~qgD/:3ql0nzxl srX/Zc ś~| fL=sf >gD\z`:ı"jd<׶5NOf'+|udKʭًY47Ż ~g^]w|skFg>Vps<#R>iwb~𰑙CXu9#1q'[s:Kk1\x0M [榞vk׾ֹ=]l;WK$q KwqT_xX1קIZˌ3&:ih0lrH8f{6Fq>k ?wx0=ƙ$\_^[[sC ?}ӛt( ӏ he U0m&qm0벱H6r8gn 鋜9a79|frOkgϹ-W9П<*HgSٟ?hAgT|u3g3{EY^zHoqj>GuiIs~/nqxx灞C=Hq3O_=.)O<ǜٝ5v>ƴ8xq?<Ր]mC9O :H/^ıUhI6}ʍ.|\txjz)HqkoAx:8mW)q]cO5&>kk_ꋧl8oo_ r->.sļ1~x66cdW?~j?N=lF>\m-3OxyiÆk-¬/)Wxj/V¹\|M ^&cpO#n9Zl_&xl/ᇿ7Si]_tU;|9!'u">NGkL-y o7W>?݇}7zh&j4 51*( Bfx2͡|8%Ãx\`>^~ú??k~^s9pׯ_CϜ&jCiIu>>qiu:;H~#k/f g^ Ŗ<|1e֜=j+f6`쓖:pO,)&L9¶Wխ_g-gyNA!L9\I[Slj5wbcH7sc֠ |ix07ۧU.K>zU[k:K1w~CgN/.vIHs qg6 /r_y 珜.)O> 5п(&'s>1o}[fM: ~~¶xv7}9݁݁7_>\zڲg珿0ivyr〃|JT~sa["s/噯p=0ka񔛍L]Z&?F/Ȋs8Ǐ`6k GEO{&6|zƚ}Gּ6o˃=ϡw>x<<"sR]-1w͍l3<x"!v-=XszOqP[OہomN읰k]ܓpUֻoxô:svm]aݿ{O[]k|^;r~=:a'Yۿۛϼg/7_uWyx#>t]YxGp©a{(! ɾD{@WM(la#}^{Ϸ"ܾFb`fi9|F8'-z _~1jf'l$t3WCz~FjOf.b=c1KlMߚzj1nPѱSy[]k"^E2!͝75]%qϗڊKL8Gy{Oj'6GǠlt} _5G-7;,ƾ`aOj,o\3%u2Ic3vsoۼa_k|j3=_:FHgb4'8:ǪME>pˉO< t {}~}휻k<ܸh.?!{t`^vsa>cA7c5O ӽW:o+<|t9qM9|߭K@=WsW^8ŚXyW8a|sP=:뻹yyR%Q86XO0q] 8vus>}KgxUkGl9k=qr/|Ivj5O]k(Gv9؜xg\s&mc<8YΛ؊] qɬubڭqWn^OY'7{5O=1^9Q=qW3Oè~7L{òz&l!>Z=ʗ/g5/uMauc_k>'ćxyWqS?I{b=cm.Qk;'OX9p}ڧ}᷆ +?q)V_]p(m2$7>|lEwv݁݁݁7{P}so݁)sf t3f(xx7\7zJ齫 lSOnhf#lZnrhg;a¹8*#&N~h6 Uq"ք ©5F7rh XB!< x٧>\aikOj[_;.f$>gdƘ*mOM\tǢhS3O8vcy]~sc8h6WWɟ/ ߚ31[M,_k-vx1y~g[xIjM C9??fڹ21l}jN_:{k:ևL1f[g 39g,;|{n< ŖϜ7,^4عFgk-Qs'iɣ<Wd>ww?}:|?g_ԨϺg~g%&'qugcwu Ow҉q|[vvvsML=_/;qZox:6wClb1lDj-{8vε#rYǏ G;E9y.&uxKqu?!O Ϩp3k|#oxbS: /^'8C`uWy4'\|*g.6.p5wI1f7Z>>{qx̸^ ??m'~G0;mR?goI@ɜgÚôla-wK>, -WƊo݁݁g.??Ӎ//i_G: @ ɘ g.]ȫ7:_;~fsN5u^yg>u7%petS_|ד|ͫSl0 =p%zd\nuNIKo!>ᓸU8CUoca~S5¦YO~vzaFxx:>ŗClyq]uqՏ' =Wv-L\[w>C7Y1֎u7pO>k5þG[5+֜yzu$ IDATQq\xŚ~3q|l${>sr[5TgѸEL{9l/NqU8'njCwiNW)W_u=kĩN݈7{ºs95JWΙYy|%laЏiPc8٧?cwx7}4b^W~W'+Ou ,y;;&@~޷8w0۴mO7uk\_w k//?naغX_n.IotOz1,[0qv#ٍyCM3Nl OW׺{p(> '=r7%NsVZÐ4'-Ox휝{Usq#_1Dof=&0i.&>>ӄ+_Mw{CskƘwM&QՏK{mu:S9мN`z@pbI׮i/{1蹧A:5m[\RnBI6s > YLlabo\l!8\iOZX;g΍/~_aZeÿ'jHa#kZs#K> oOO7~7/~۷}۷g!Oqӗ~闾//;l_E'ʚ߉raܸ݁݁{˺x..ܰ!{҇6Wuaֻ^[S?S~7}7bGO˿|]ljwק???y7__O;skzWM7y/=n^Oo7xk x6 F4v[כk\qgm;]h6{<q%n=IjU-yZas Psv|G9`i1a/N_ڟy<\XqUçqi]^|lzHgۣyW>ǎN_rt^Ck| [jKbD}>sX6ZQqKk#y=Ľ%z@~ 8gz擳ȼ}%?|I9^Tx; 8Ra}֪XPǔh屧Kc}-Uؿwz qЧ~꧞~8??黿{ٟ}_zw|wo|~Mܞ<-1G|!݇dz;;uSO߈Wkl~|/._|~'r Qo_W}Wb_ .~W8x@C p>̰ek&{m0[\?c?vS>W\𯀟;}ٗ}_uoֹ0u//n/q~}ׁ N]>H̋ݠNI>5!n\È1/nny f7I{s728Oo7[0a77vn?qn ԏ_$r:ߺis7tO8 u43by!uj g~q|X_҇{sX?vvM0n`}ڃM ĩ7`i6"9j[W7\$򨍍&s/uo58621,G&1։|Z/;wO1O)FYS-~qٍdgõǎ;5WsV>Zo?=oq5℟5rYǴMŨ+!l6퍿Otݜ'854<,y5 |ӺXqDērTW/yUXQrreg>yWo[v]Sy8w?0k 3Gy _ /c޼tizOjw^G?8k?~O9ɇ lZͳ W@/|4WUsRC~mA⛃.J7|7A9^xi#g1ɿtI-frG18 m.ous._=qDOQ[gbcG{{U/jog;ל3NlmgG'iHj~837IUQ.I꯹>r̼Ky{{÷G}G1P f[vvޜp'o}[Oƣnq={6'?[78N|n N89vnfaCXjfMi5"N _>7n.7C7X\sc&pRzjK|L1|aë ôwbU80Fy[X4&kqjIwl-ænbTLǑsM,)~pXOg=k(vWXs2n_8ONY&'[宯z~8/<Ց=\N~N`:i?3G1a]>z~.>NXqO6^AӇg2=Ycx{=wqE gϛYlyO?[|Y9sX} lS>dSv݁݁݁݁ցWd}}C3wvv]P7zO栵콿ۼYn(LfX76vs7(©K4oVy<>pv1I=1OڗzzI.{w`w`w>l`sx{;;;z;E޳HnD{gt\,dw3'V !wa\z覄\qA< 7;D5+Wyҋ'Av)y cm$aS*Ӷ΋Gy.3#Zk=g^~zb; ͭ;MX6sa]W 011yĩ?)Wb,/vŘ'eݜ'_8ϺowjYGVכ"\Ú8O|l墳sr/znn$匷>[tm?hzf'aCx\l3xھ⧞Od7ĩz _ <÷oy5zO#{{&I5j௧jcjvb?7S5}VՏ3;n3o彄Kd9wvvvaowvvޓLxꦣ|/= 8xq?sa ' 7|wݤnnhOwDnm>#9ʍDgŶzB7|َb~Ի´xX\1qaOnW|bqȫ_tRo`+ 3p]r&ESZ|֣S{Xc弑O{X'LsH>`9go)<܌37WfԫgfWNp9̹MqI+L3~ښǝO٧?4)R, c6Ťŭ&NNs#ܨ|M[s>Ƽ=pZgϓr!#{{5OֳD,[xyƯ?Ι|7'rz?|h@Kmׇ&\9;|w`w`w:"Q.ͽ/醲 }X=87ypcmN3/oߵIyAt7cpxbƧ=tk_ ǧPI]Vkn[= C6HG\$ھVWF8ZK5GRoxjg4,1i_\Z3_<%p'ѳjyӉ8_DnbW'\^f>yK`#xhTt#XI<^oo􌩷eXWk⦮VDxhBͽ%añڪ5<]7zQWSs6jo\ٛO_IX&?{}rexΡl8ʧ5ѹQkG =';?mƭy8_^0|m'eM=u~w vvvг!j$dazw`w`w:M"7 x_sCӅ=; ;ݼn>' <>~qa_`~kyXM ,OMD\%}ͮ+.O<5[~s7p^'MSrO_{WͫNN+gir6R^>qIN~> x̚scoz>m줽hhbV:/N5Tñ+B>k0gּLctrW8qރ:M\㫎繇nk&#^{s&&=w+sRW쥪ywvvv M|&‡zwqts8,ws\S. p΃ sְbp0$~v<\7'qMje׍nșp8Dh} Cn&^[yǟ]}EŚH}7ruO9zg{ma6fO:s{?܎G9\krOO yFz+=yH+uUS=h8bXVKtj3 >5$;zdÊz=1|:N{F걮|r8HWkSfZl|w\eq/gr٪i#߬x60·zY mTSx9 S8 C9ck:\zzLOߞ8/\OV."Et⌘mtG]Yχ[x0x:GuS$pΫioS j#=C7ysctC:ˡ~ o 雹8/ RnfN}2g}>ˇۼ:كnfn6=TiX<啃=!v3aLÏ N^9H{Ϧ-:?|s1ɬڰG|Fkbiկ]KzԹ\zpZ -R{O ionK ?~y.10rbC^֘u)aj|4y5lzF뜓x2st>Tg_νǝ] G4ZDYpq8W}lFTy/|@ Z{8u%f W|bn4 Za&ox~^{$go=uI.{w`w`]# IDATw`w`w`w5w,_tgO.0:|rOsp4! nJyp&4|x\ui\k|ܰY[uzbA;CY;1mrfKUN|`/_oRWa .O0Űg C8tOܫ/l\fWO\[pl3?9-81.[Q09{__'fˉgsdQo#=͵u_pCmFrh]߭;<.1⎗X&8C"OɅZ૵zJ/ŷNԝ_S)m?.~bI񰙓0qQ:6iOj2 bҐ3a4|.ix>Ǒry}Z{^\e $:Øo8|兩Fm]8= Sގ?@ڊS|~E5%%Q.ؒ.0dwA֚E 3vB.VUpx̱ò4kM%cx}׼Kgu\e]mi>%8FQ.礘Icq\ \W9<ƄטqY9OosyDw%>t N5Ai/t-.q8Iq÷ KbG 9̇ߨokmDwnkvz/*_{(Za̞gnĒދYo5:WO`߱[s?ar3*߯Ҥ1) 8 QljONX8Z%y}']gvvvvvvvSYv].ReOO?7SҁnL*w^ܳY7¤3~qvqE7Fx4Ӽ67|'OQ]쨁t$WWuSTm Q\ [\k9"~m<عGagqá(׬uڦ}泏_*~)OL]>~\qG>[ 'k[Nל}|=Dpz 5{'ě';{9?<\5 -?i^L\l'uLń76ǖzJxWL5;񙷟9~L=) ڛN[bmȅ{1OZ=[8z=U'?@Gr̚ y|];@U".\u_|]Y ַ\ԉ5a9㏧:~;зcw4ڡs4_>MMa:h7"~5bqoie37wY)ֆHr|5cňW_|򋑋7ZŰq>)qSpZNq1j'3Gqw\JwCMOWuZ^)n.1o6^ņ:bF2W;O\ϚZ,Sļt(?r)ΚhN99i ߰7#0WS{7Xcu'ثպ60'&>0qVuZ-3><-Wb瀟y>ʧq;?VZYu5Tuu>a+VmWbfuRLZ%k1 Sj'tL-|uӟɟ|?>>x`zڋ ?jK]9wvvvvv^W\Dh#.Ĉ .\]yz{r!n]wB2h ˧=!MsÍC7&S30ׂvуi,7O3gˎ.x/jVVoZ iݞOWWuWvxɉ/k|7,|ՑOp>W?owxZM쫔|L,;I OׇimѽU7r=_Iozb'?F7sZ`oSUqq;T\j ?kk?A̓4dbSAg]Os].qU8lU'{u_ ۼ=nnq|:٪n>?]yXHro\7&o\ŷ.5ܯZ 2u{w>-v-y]ccr@U}Q~f'_1 P}xy*^Ug=+KcZn/K~wܻXIsW.\`z pąZ7;]${0tlw@p>u.51%Anh7AZ lOڍ\0gs1j8|U Iغa ]WYOy~ixc86KK15_1j-'0i15l0՚c8flk +Qcק[AC>1SpbKfsK⡓xh65o4_qZ?Q 8٫9|=GO.X~-Ry_ꨮjG#sx]m7ascrw >']|/C|rMiSݤ86ǎK׹Xg['/wrk&ί.:`\ 6[4iK~w]v!">Nx;N~o.z"n^cC뿎o.V^?; iw8/݄ܺd׎17'=37݌t[>󡴺P [uͷXMKlբ1axaHSN 4lGՏ3//<}㶖֨8b;͇6nXgj^OY7xf>>u#>W?,}[S;͝[K'lOӝKk>b)í&'̟M\7lam_wx捆Oo4ԚnlۧkyzZ-u|yZ-N$۬/;G9W?kMYtxf|@6&|Cahњ[MLLy#{sn^gџ3TK箞"i[Y:V3w{.{܀&z^_.CrkTy6s2{ V>^Q Ĭ*WFq!ٟi|tqp6VaQm{>bۋyتZ:䃙xܫ%Ձv}?QLw`w`w`w`w`w`w1u`^Dbۅ?o}'|q!X%ts颯 .ָ~;n 9M7a؜0#r;h1.7ݠvˏMz<8'1+&\۷52W'?zdM&>bڳ=66l͋N[}"̳ѳa7kW|s㯎tqtxT+SvhVz^[Jqr/fo͸3\}(}^yglxd{y±dbVkC/kopqc~1plk=ϑֳl+&US}Lb{ϻz{5}m}ne=ќm=!0Oml}wgw`w`w`w`w`wtEy.\Hu"__i+@,|}ÿ.H .}<[?}p|ypn`u0!'[b7 \?;!\yCWs܇7'h0 ^'i}oR[^~Ws5cN4.XG ߀>{ZΉY3(8>1ĩ5'_m'k3rWK'\ꉿ8:x^bm8珏 Do+_$)'emTXk{ßmngqI>YXuq=5/2yU{~39_\t>8?sus'5ǽ/],jf3GcW*;=9߼O{Wk1լq9|{6 p>S^5w,,Gyx=5z$N\k>lw-a]w|x]pab#.tǻӋ/x| _.ĸ"7XOău8Htnu~9_ )A`,tqO;<8׺$XW=8{ îf(8^MxDžC= u^Qo< [5%j*7y\qѤzW9gq[&/?ֹkͺss=B峏iq7st}c=ƿϾXWxäƙfW;nt1—?cm WVSǃ|afow|nosOq57&ƹJ0{y0}X~'A|/4$lxMg_ ? /:-2.þ}'xrg<.\y`?7?N\⢌0y.s~;' kͻI6K`ֈ']|( O{-O~{{ W=b 1勏.MV_<XoNeIK^b+.Oqap8'n=uq+&~_Εg\ߺG2sk8>u5oT/|>ik~VluƚzV<3OVV岎3|g-lo||g^/pXvb8vL?۬y| O._e~97߳;jkTOtt5񫅨>o{<7Ap֧j`<ݾO_b ~kӾ5skPZ>Zv>\Sg& fzً~8svC?U/>_璵8X8qm_Ӱ7v80s1$ݼ^Ŵn9#hCb/f{-xOj<5؃c-^rlӮ\G,s9Nyc}>;k@. b.Zc|.\xgi>z^/|h]5E\ӾVwq>gw!o9ٌ.Ş{8#p:nsG,[ 6O\u8>kꐏę=5_-GXG/>g~'ܺn G㛺z.'b0‹}b׸.يݨv`_9k8`IsdOWk{o KLb'<=1l ^7{<7ng=Ufj[|j?hؙwb6bEw,~ZG6OuɅǬ53uwah"\S9q~.NWz8ė9\.~B~kv>kxlQ~k $^1qÙ; IDATV{)6ΥY7|ll0=TW98U[i6Rm8g~9M_41k϶YSs{y|+sf?'d6[?^/bq%Y63&;9uqc\4j1pT}TGXΟ'~ݱ}^W_pyNjӾYglՙ~wvvvvvv^W\3_/pK |Gn~eBN]wA7msF߾av!]26M݀nfpm^ ^7#xsvc"o/!0rMaT+~_"!lc_תr[qf56ipxũfcb^l14_zgՌ#GiRn 5_ԟ$/n1xl8F5Z;匣il.go>kt7;NMěS1 gBx΁bO->[Kɛ\LlkgG nAg>sG׊Ouϱ6Kʣᗬx8W.< }þ^zt/.9bontw6y箜+9sf 9[@h9ثG7(qy1l )fNf^_44gѾ㘹/zJDbcMp^8WX cO8Uk7[r_-.OZN1p|ts>yc f;7?:Վu~TǺ:j'84PkֱSNR;.1'mgb \|UǍg vn qsRM쓯>p?]OG B,__]}Saflp l0%Uܻ`ą*YйȢ]\>p\xsoxhߧ>|hxv`wln9_{V͋/'yC|bpl4<᛺9{[84D^ߞՓw_//f՚Ogg_oŤsg q#ְIvu/gXsɼcʿ l:99'9o>N~x?ۃqt.co8.t9N0|o-ƙiހOjφޭ,EO;_y"/qlgsbPů9>{Oӽ#NCw5z`_ >WʏWWVqs{vVL)}?Irgt 7nnf 7{tCI 7?~pMz2{aaq5HKxe_|8|[,GqWaW:;9Ll߭aӤ-Xz:a- T qӎsxrX,_53&3Li8ļa[ۃovhv9f(V?/h\|a_+a,\gL՝knհjٲiYWgv8#L:[˟'{1[-6ɩc9Jt:O~oI\p刧uhpUMaE31OK cN۞WG:LkF7z0 XJWm]i'x!Fpɞ{s7<_<[/wǿP>'~H*7Yg.pw_ف1=?g?017~}=/Ŭ/u*_vΥ #x1*xy^ Z~`} p`=gO+oê!Nگ'W5Kl^hK1#ΜX\K| 티on$_wA %.r_){W+φמaIrYW{9۳_"vknrNµG|ňcc# |1a'vηgiqX}/:Uuw=H%.*6w\z鄝75~_r^k}6+^ᨦi:ڵTu:I6ϨNU>\maa/\{]<ȳբ_ml\򨍜x1$lFwu o}gtlqV?-'v p+ Gܝ  qM6S?<\pj3:W.Mh>^ i_'=ɟU3]M~ɺ&<8C>TGzϟ^y9$>ٜYK[O`qaCOlUv:wWp_NZl| v{kT#|b8$9<vxH5nWR|5Q#ͦp g&ixq5_Ҽܻ^[Wxpwn9Vνklxa;?X 9[ޱkms0,xc"6;o%j~M[W~nJ=b# -|GмXFjp͢}>V5G^מptno?w]ou GM>K>QЋ^}/jWHۛE- br;p;p;p;p;|ϨWrs8WܿI= ~X 9I7. l=Ɖ+N&~,>yӃL8{Yyv]:aba1cR]ˑ.O+33],.C W{踊a[L\i9xw_I{Ӻv|CL\=c5D? ~!9}as30^䩮4_b'Iŧln^.qK8m9[{Xuo'nsbn|:[-l|au15iao|tNl=̎pNk$_wX4/ a,qv܊M#k%s9]-WKC`];[|0k=+ݜs󔭱?}re߫ ;YH'}7_o]*p#xvt%=ƽ:=lxPVyKd'_PiX-WH˹go4{8vp|aӃgI8y?8Ŀ96q`'lkĹ8q&XqUo|jמ&ڃhu(1|8z#g+ }]Ɓ.rc .FbPQ .}W^zW Ƨ&vRK,aaۇ}flj_sl5˓>xfo]Z)n3V #1_iG|s;nOm\z^s8“ȃgC6Npt[w.S.28s y'Gi[^G?,m {KY/O~:LlߞjbX)\lIh}6dk୶sď?lz'{jk͟-l: Cg]pxC{f'$?8]w~òa 5'k_3~5|q5ͺ=%ѯ^_?k?xR}Ͱқ"{Úߘ~et9M5*wAy߀EtD=p,8uDrgæ-6:~x|r%FyݾT_2=1` Y=#b<8?i_a/b`|}dljY\=l|?[Nj=S>uugM7kS19#bÕdӜy\ ?|Fҋygx|WqgU7xrV|ykٜ|Ʌ' Co֧,?>ì> gv'tgpᮯgq1ϸK[wm4=O-9x{ o<)_Ӊ%]é՟ۆ~{!r['4W>\K\\G ^}/hWIM\vc͝opWnnnnn^݁>s~^|tCJэ<>vKYj <;G3 C~>`c,]L}E[1qtѤc"v<3’a\rñ ^qޭ[8G񱝲洘kvpt˅ #)Ք/|l6 6WN(}Üzd6.Guͼb9%yi$OS_-_RՕö#XOwzrW1叛>Gyix`p|3'[Y_9M:8;878v?~!ּQl≸ƻu˾噝N\'oɛy#Ф'o s<| ]gvvvvvxUn^ѓyWn#'l07ˈ? \X^qͻo&C =l5'byŨ?k~¬UKrIh_]Nqaۓy=o㞘X7 #ywTڰWX9\泮i_⬉>0C}}^=,NkCzkr}^[2pVc1rQ 3V´!^u<ŷSB7ưl|٫-v{YCh5㯏lxk03^?rW<[{ifO6/{61k=\tg5鎯8Q/MLl:sG[f_8[nɎ_K|pxd IDAT Oz\/]OwkqB~+ߜ/pBfǰo~;N~MG)H'9^o|lWnnnnn^Ձns L}ibݹD7g'=|ClK==X8z`a sXS3^{Df3oX* lrmr%Օx{Zė_ Yت#~ۜrx1t"F8^Z?<8Kw scaZKvF pItk݀il8d L'x\@흭l 屖/kĭ::M6C1jᏯXkRmnx5~z95bm^a^OS-MqЉړs;}?kL[ "lK\{5o<a/?99M5:Љs'uw379ݮƕہہہہہہہ_RܜݴwOs߽}J=dcn N`üibv/syZ"tjh>cmylO -Փ0Ū9_j>>k]~:sayQ!. gyw+Y|V 9 F>04[bMb__lpn< "G(XϤZw/aϖ櫯aF-I<ya yxXZ˷srK[܃'xぱŨŰj~Z=˾/ Iu";akoǛ7N~| ЯO;SG9:ow=N};洵{yv%8ssZ bO܋CvqZʉ/ .5򱝂8tX/.[.'47 xpImj ·g}G-{1ۨ'4,Wnm|_1n/lͧ ?QW׫:^u\Žyg|ؒWV?o/ÆGaog՘B|9,7lzg~\k:c$|O5O_{yzozudoi6޺b/fx/?0ZRmŶ޻ŝxI6yW|T{]r!N<W}T|vWqno"'n'(o?%N^ސNrvvvvvvvv9{7F}{}p^ '>y{am/&،DX%.y/<5_W_ayǥ7pf6|_L䴟 'j^;|S᪏#TW=.zk)~vpx>l)(K]5{ą+?<(^g|_}ƲUc >3bÈ3gom{ĝ 8׼~ľrN$^r{e@n'pB;aНff7 qNz_o W_ŷہہہہہہ_PuOg{!Js/eoTݻy0+b^!9r˹ZSeupz%cukzS}|ՉXs8i}a/osA;0Z˗_rTgydr.ly|!?{͟;_.W>8[[3形+\\9i Æ|:qѰ>&Ynzmp㡍ŶNSRroMiާۼ^uŤKo;g زǯ8Xןqg|kzޓ &ly޾6Z1q\i1xxQ-O7{}7K;MGI7Nb'k'}'j'ko :7Qt/={ͼyCDtM~' _{܇ #X/_h}>5c#Y?찫oa^3V\sï8N_\Nѽr}Î#2t^^p:];ún Cw.S{{o]{haHAbߎ@;ױ96k0Fs>j꼀=ƕs,gpzc5N|jKೳm|}VG:->Ӻ۷#rv5:5܈}}b]mE\ CqKxٺ^/п꠫3?l5!0z X|KaxUgsszƧ667:2>yGbiW lmm_'] e+Er;NJ'Շ4['-7-vvvvvvvgu N?{#>q9媗o7i<{yRHz4ʵ)|IuZƹ'j0ưU-PGNomǷ}+|F5燯owujWg1WK/{ߗ0?[a[C.gr:+j0ت?-У<1m^?;?/-W;aӱv~y=wjqpFotu^Y|4y\թ|疞6\a[Tķd Z-7\ɿ5Wjhvjs +_i:q{g7y7ہہہہہہہ_J|~y7PCmR=TN.XO:_:UkCeވ;uۏxk8?j0`8`qķ?I:1aGt9o?q7Ǵza)o׼5rֺ >O'հ>6ӼbmRt{&_|x^=cu|tc9L#߷H)W8OX3|n^G}l Smd}}O9qN6v;Z6[ O~ 57_3gNk8p4N) {xsku|b^)˾WvŹ~G{8 O'/ݿF3`r;p;p;p;p;p;p;K@7ug7ypoO >-.[lpzel=}[ 1o*5UNC[9\\2_M|#f?k=pN1; |ќX5o۫8ĖK('~>,;>$p~Ota8aO~qMlzОS|ws$w7;a/`Wz^7K>b^ŶrOxpְ![kq1_'yJTKO=?^6o\[tu3ݜ?xa_)˾Wv vBf??߼qaӟsސ-vvvvvvvgwVY0@wLPųz6X+}{ù5V%U:NZ^0bi8$[}o|h4a:;{x[PFť/_9+ƟM )n ;꽞8HcM|Yp,ۚ7gwagxwx`w(&L\s{SOx|8H?Z /6k/rŅsؼ>i }s  /.Lpu'h5eo&oŽ:OVeOo9Jf:զf\şz|p[v8ŰOo|W#ߚv'ϏHϚ~*vx& Yջ'9/૞(G|k79)[ǵhv|<n' ^N?X|k/ qm\q/l,^|`/L\鍋SMjLڳuIw<tO_)˾WvŹ}*_!ߛѼ7hoxPu&/pԽ~)܃I<+X8q}J|Ê7/3W$jx|ba uW;/ح!a_1Ϥ'P[sXRa;c_xlpb”G5գlt=#g޽ͫlٷ4NpbO?\uǟ^%+΋c^t<ͫA<~<0&=9?uj6;Fqo/8afC،I0OQbx͉̓zVwlaqɝ}/^/ RNH'QztbG{C/_tv{@EtqQ oߺ>G/e"]b18W3f{,nmח+K};{8->^|e<' OY4KEs8=TڈC-|ԧ8-'b}]:䇫^X#o]ٟCIX ͮ>Cm+'n} l'kuv>楼u$րp/e6X9|W^Ҿ^N?:w bNu~9[͗GlsoZ7OW5.bYZ'_u^ٺ`i`{(;нW<ܽ6ȷrCOXZt|Cy#oߙ+q4[cGgeq|6o˹1qÉoi֓팅9Źيæ=|c%N;'ks5 {"kU>ZLqb>[6 ՐY?֏ ;|99cޭ fL98s vX4?u{tr3s5?rݚOM흯|6R߿҇iہہہہہہہށn⫳_rOuʯxroEqltZ E!έR /g,o~z9`V/Dso_%S5QK"^IvXb0$ qXZNGK:1dW}y&W9_ݱWW~5>1II='[j)A/hIuîw3\3|:~4ק( Г&88蕵 NOj̦'rKĵ߹='ܸ>T[y~U9ݹorɹX>tqdS n?xWpuγEϼ^ZIy׭w"6\k_`;^+l},o\˫@ q򊍧xvK]Ծ;sO;;sۇz{w00@ڍ>(s~Î5c s- [<`ö8k wq|04k-n~p1OVf9N<G[b'c6|洱{nyA\􋇽qVW>[L>uRglQ|t_Q[9l5oqWC}p>^IAaX˥g_֔_Ú/N|dy뎱Z٫=ΰք6usń;%>ַS,滟ĭW0fcuD/W^qgFkRpxx bq}_1rll>(CjΞb%x1ZCtLy; ?[X%jK8a׏qj-ߙ#L[pf'\us>&;}^|ʵ@jmnoWͻxGWj[b>g5wu8ǵ<˽b4*7ݼޗ<dK-9Vj7wmb3pdV~EuCu7ۀ*H81F |^|`˃ ?lvWXF։լJ_ 򚋩j5aqaO8`^)˾Wv [=oq]W/w_{dF 1ln{Xuvfh~>8ڗ[KqqW^_SwrTo9 :Y\⪫9\D͋{@F!x4a·8|z l;Zp /c^rjV_,?N97yRu|拑w{Ony->Ly~tܬw0jknMź4t<0&8ʹbI֌gaN yŔW ʹ̎sw/ٳqƋi5?kVG7|t(.S6#Qr5$\\g~℉usYڏ|l~ߔ;Їë?,nw;p; ٵ5,^vcn}Xa+GqohyzHV]q0nx&GK+ - g1˶:?yUC9έ+j͎gs󕿜? VM Wm8b)#N1|\Z>s'3sF8٫3nŝ1bB}`.xA{ϕہفެwӯGp_u=,u `a<=&1 qlWfy:ė;.;.ks+XjqIl96fm񲹹X.Ǥz餺h;Ö_͏x'Vj|Fsx|\Z.a>+5S[oa0:{r'WD/ c. FƾΓ=/iH$ol=npOKtU'):Zs[/y5}_`n]]l=ݺNu7̞ }F<>^TOY#[ηOpP=q\_@ݼ]h/ЄMfZj[e#{{u`{d?@7=`yײN RLa|{X:|sӟlO`$py8jgdɿVd\ zhky3q'ͷ0Rn#•k^pZŚ'e|{& `'Ë#4,\YiO9ko^/ƺv}JVEԁ⌃ZМq-Smodt=Ş['mɕ]4֍bwGst+^aXO]~ Ƕz{5Yf[{8{h5_Z:?:w!z냱nk}ċCz(<eߋ|Y& >x'n&ofyeξql⍤_cPK0zKhC~6{uaaʍGl6寗٪)~뎇$^Gj:ٲMg7Kol}6Rl'x c^=rU+m1Ћ/[1"CxF?wbqg潘sGz1Gu^#P.:[?\I97o!ξ{?揫{ݾ J8iqa˱qʞg5_p_zv,&~s򔏿=×#<8v>Ӊ}6:?J~8g|-wr<R}w^eKS5:['˾vvvvvvvvӁn{g$;c_e9\X8R^s>Sőa%abf~&9\}g堫3l{,ƜW%]?Iː Ulu/qKCZVky!qkk]^ZӰ|Q# HK[O–nV-0#ؕ̿v^,iFP[t{,w: ^Sm k4z|ͷqUַ\㦛/rGqbcմ;x8|lŜv9&3>wͫW6˟y<٬mqdzqYmayq2їl;u9a:6rtu}߳7>)oߏ@ ?R|W#:F~uZ55/_tZM~-!\(5ЀۯaI|暋/ 8:Zk8k>k.wBjiGBygVlS)-l=v/;~ k]ibgoraϨOjSoʭqnߚ-.,ax0w+ߎj>sEa~RX~ ^.C%oƢh嗻|BUՂgx~n%4[㨶cekF/ )~h^QOf ~hvc%ևlv?XہہہD >ȋ]۝:7uLNg׹p]&5/_t}7y԰bٜCa 49S]a-ޜl7\tu75'ywmcy[=o.Oi>7t\ՅzcDžnf{5\#\Z²'}Ry5[|3\zmk _LW~$ݬ{vCѯew;_?: zα`o5Ƶ1\9f'lܵ(?)c\˦Fdvߟ8,QS>DN k.\^p8TXyw. + o/0g|x֍044G+<\bWO=>Xm*GH:K>_q!nJ >}+m ;[לOab\`zƜSqpMQLXN"Vjhk{9_ g lR0Q? ؾ\x{o'q23୮rן| S~k%"/lȿZma Na6mŞvrҤq(8aiBgW.6{!hoj0 uU#w#׼|+͟Or䧳ݦwp)/bfcۛ8`Y=9_Oli-W7ov&㢫ߣ{]j[wqϵr{eoہہہ_Qг%>|agX_d-ʿܿݭ|g%NP~>ӃDlkiɼ1b{=M–N ±PI8ڟr'*_\>v sSMaZojy8?^0Y|xi-4_, g'W&?Uc8-Ż{}kz|?'3ߙ4/~q7W}&[鍇eZz®^n..xbtbŜǢ*^ U6{>kz^nmaOQ\LYi`76xne[/goہہہ_i|WnP]z_g6X_}p`6׿ZJ[xu;p;E:zӿ7]h8õf{skù&:˜O >:ܺ=FXbqW_` Fq;_^[t}l7wæ_,W[v_Ūzik x<7}Ќq{s1Rt}Ŗ؝y&x ,Qw\Ku1X|86\-Tk5UKǜ8fdyLwL#w3_{̯ųK^5Y.&.u-=L:Y]QKꪇsxcgHz츳U;c·uyžokȗ-k珵s/f ._10~iz+ ~et"GфcO+e[|r~_7><>|xde?+ro_/_Y vn/{wI IDATkV|Q"`ObD"ؐh#[^ly3F""`$ 4TbbMء (b"j'OKb˛MNC|6hbI1og/rg[Mž}sgj19pw[iN)w~mr kG1ѱh] 0cn_ʝ]ܳ^Z:^VOˇ[>ڈS=D<:a70bLJgju o`渪uc6pNYV|FvpaiR ױ'a![9odTC9lXkSiY)H&Gqb&㤫ߺ\0ťa|z_qjS>V6f9y>܍lt"!Z=U{%m_}U?>$~ucit{=jsj烻(9컨y8:p u7X χ ozސ{SMۛ_w{߾1yސ rtсguskݧ@3]eI29 ̓͟&6#=c`v~Z-l *q- 3H1oaڻ|r6K\|bOhg64_ug*8ckT?66g7y; :y5ձRk \{8X5`]_ɥ0:m_|ĺi3|#6yͳǬډ/-|ba+LWLfLj׏dƚjk7&&zio^|rz—'L8I~1+&|W\1mNk{qxz:3gqaFFcX: ?] ̘|iO،U`Cۯ3Om߸a/\̬zr&> _1S~)b.R/.GGB荽7ô7M: ;8[o$}o[1с|܃oYڜ_C4GfLy62}b ?7C ܜ㿣+V8׸3Do>PMlx~99` a oMi]8!qM6\1q ι\Isxs8b^x笟M|#u}75[i^DK,acϏp1WXfŧgo\0<'/:Γac'tR[Ǖ/*=1e5͋ي§+&:؉6u1i5BwmXt\[T[1[amr^ ¦9 e;򅥳ճ7}^GȇTf.Ǘ}׻GG܂f ޘs 7Ik޿FڛV~܊8^;~DG?U!={{9{ {>\iތ;/?Lvi_au/N>p}hEa+⫆_=OO<~:ap3-+5\>:5f83F> +^t|u@i\/Nd-5>s>: =c#qSyKzZ.էb՗/{aa͍plrWHlt=oK/b>9oNGcO^ah]8As9\9$v+x{/3 Q?,7ntW{<0q'@7pkW1q]̴??7#W\5،W-;3~38:pt@ouo{ӤIFa7J؛WGubCbܷfy_jAq҉8#xWJg<.OfNZ/b!.'O>2{˞|Ύ#vކ"6.ȾM^%||xZ/ ?;,~u޲6\Ƴ'TGZ1ź<!_yflIĊ3Kh6>Ll85Mʣa3p&f _˖O9Nk^iCK<[o:WcY47{]-s՟1ØǕZމׇ)3&bb˩Wf7Wvy/ kWWj$գWϽ1܇C]\q%I֜Oy[\e4Hytс[$7)y|ބb&1?:pt]فs>e=?lϵYPۇ3>Hч8)rμ'7oN^˰Zah"WqSLqҺg6,[N}wdͻ^&?f2'n­;ꯦb6"jpW]W^1B^+F,^%[xu5oXuL[zoN;.~Z—L~~R\i SiN4&r|z(O<:p5_,ݾx,l埼pL=wrn_)k1OuQ#~}Kן쓧8ˡOhbp:NVGٹC\z߰&$|)ְO'_Uۈ L<;/;nOÑ~z:|8Hڼ<4;ኗݚ#-.S1Q.C?j⇝{?Oˑ6_168mob^戇.n.Ex8 zhk/nbgaY~jQ=9^ko*O|)毎Y#z *r隰w~ؓ:aˌYbc^>8o7_bW_6χjeaM#6fm/)Ǘ}#сGnxf'|1_h|3{сG_ᢇU秛wv6۲7{`胪ܸI1ռZxq#\b˜WC1M_]i^\Q,m |^9ElЇR܇0U138dN8xusa/&i6s_ոǎ?NƖ .yg^=h9pY]krb tr$3_񩝰MfRNcj aS,[9ltx!k1!_bQO7\z3kfԻo]􉫞FY^:ћ;=q񘇡vMui7[b_ϺLmQ'-_aW\_]n8:p wjojky>:pt]Ձy3٪3Hfk\psmއO9>VGǟ.6.v\8>~>٫s٫Wbゑ{v3g+>}p^gN>0gKgm_86=_'mr1_ 4{qWi{RZD <)~Bw.K)吳󄿚[c6/5-=}wt.tZ=]|zWt#>9ps]Ug}{sW1&fr]:qYK{g_e|wSp_ b⭦o=qqa4ީVGuq g+G|/<a?컈98:p v`7n]7ib}tс~{mt_̺g'V`!4{~>@wj5wМCK\2W'mC,.>~ n7_5W/)8[Wwk+=my KԓK5-<x>ka o^ŴYF|Ҿ[7Ig/l++\ i-iqF5f )1ƣC_&k {aN o&\q|dÉk\s#y–=^r6\|yoNʯw]+W|l)5.k\YW $\i>6ӹ\-|l4yoj{VCM~ڧbp̹uu zݹDONqMVzWvkrԈ{ֈ#8k ^>mr|w~;:pt؁[o7؛g|ts8:pt@޽O>H󻟭C}4ǐQ}VO\._.xg=av`zO`콜0᰼ЍrX {r0r'qw`EFM\g"'?111сG>{CG|{8:pktWͽuӧ_ =Kwyvf{G/ N}Vyv8vR.Cy+\u?(o\G>:B8Vyj qǓ=\18RF-·^I|M_5ڵ^ּ|ӵf/u7zWlڜƭcg3^ܞ-q3]9[c[gg/l4)vr>6ًxғ'^Ͷ~ڧ}b[CqƕOk1{b#uʞĻÑ-j71WSq{\{uN[Mr^o}|<pzի^u.敯|Noy[|w~ۿO}s/cqtсtzf/-{C8:pw૿Oo}[>'_ '{wӛ+ zֳN-rzs}PEy!>pbp$sMHpb޽O5c9cI>㮆0Dݸf4{[L1CWvۓޙ8Y7>`c19 ~++>jp>l]Ož'mNs雾tor/~NE/zѹсG>x3ߛ/7>{S_1c~tف~#&׾e_eoux|ӟ~^ ^;K_]}{\H{g01';y_p#'K r/, ~_=ˠ؍&.δM]qd S7-<< Vns=ceGk~Dayv Hl=\>1{œ0{p8ŧa-0K*0#|vjQGWx3 ޴%NZDS.j3/oO`'3W5{z1Y֍YSqV~>s57/]|ɿr֫W8s~{m3.Ayʵ/0ib^]٫O7ϾpH'zZX}]s-W,-Vb5ԑM᯷jޙ#?#=ix3틾G=Q'܃3ӷ}۷^DсG>7 z#9 2C|־;|Du9ykk4=?Ox_ gvɿ'>W5|{!laf Ffb7K}\ۺ>,O8a#4>>]M㩏Gxq4j?z[ ܆s/V|_|qX] =.jOgOS}lyp㐿חYSk򧋫9_ʨ=C<6,0b? |G9Kp6 [t1s3pMNؙ/3Vf9'ߊ-^+GŶNW3ti5Ukt4`Ǐaa;&qoI{.m+9۞Ϯϼ}Yss}1krc178Iz[TGk:۪”' } e[닾[u\?˾:sG|h: ;8߸tGAC=hݎ}cvt쀟??k7A%/yկ~']e_PiU׍{O?0G~ X5K5 }@nwۖ84p˫&y_{.Ój5[6 rU|FyY|9aԇgʺ Iv$iz1\x'<'z\]0bH\1SSx^q}{5\^jpŨC=<|{bG*l)Ǭ=N|Cq?(k]?gO=Q L>5t`XxŲCVO5nbIΧ0|rvn!aOpt`g8=YYS8M-?1έOl-o=G\{Yk6\tͱ_]cO89xw<%N9\h_٦X}MOl~kg&ygzƧ[˾__?_=7\|ۿۧw]ƣG8:p3v`>)SV#j IDAT7c~~m+AzKKv9З}<w ׊ȃa݇V+чl |C{zU55A G3&,baQm2=|]M0f^=0f$X\l_.Ŀ x.mT֥c#5&v6u1{IZ|N|g>%^9o\S[]kر:ߪg|{,oT\%O38iuv'&sytX,}k5_2R{cwlz9?a7cUOh_Wq{RqVstŊ b<sU=9/1kx&2c>Eќ<ɗoiNWC'8:}ͽMqQɾԨOO:=O=}w|׿~3?soG>}{crtсGnxX!;=lK/Q:g?ۯ8 <)s2?I0>Hכ/Ȋ&)O'Lq%n: _~ꂍ^BXN)j+6ol&~ :{iAa |K7΁~% +g:V|39cS]`m6|aί\8b/ִuP/9yQߌӏ܀3j`p[WKxl>N1e饚dVO{7>,\L>̲G% g>/g鼐zCub/>L筚 vs^ًko஖.5g./^u8v5ЭFDęUgvs~b_}ɻ e@.׬8#kM39s⪡`I/8 ^O}јLpzKGZ47{Xzo۱Ө&>~p?lblb>kaoOwXT=7ELb5܌a[gT-.<%bV_z˾//Ί{N?s?w'o|`jw'Kܱ|\6ǟoa~?_׽u?V9jYj7y97|À]{l4ѵj sj81|pqM>Fuׇ>ykWXF>z¶Nׇn?xHq򆵞.ornᮦŔb㤉Zxk/nㅯ|gK{sy񴇹W5G}/$wS\~lFbwWo=g3}HI=Ը^^1$|n2yxqigXWOz|Lg-=mx˅d'luLGqX 70?l4.7 m3_5e36i>O' /V-u˧ًO,;\؍znjzdmTyq aMzf'Zqϑ=V 2yQ8-cX"ZE{RlZ9 oXV_̉>'"zLxOY#I5W0ًaY ".klʭbaSSGhK8'+nu'b[#79&1a\WL#ϓNu۞V~k5椼ދIuܶo5w^Нctyb_ 8'񉧯:/sZ}9l='ޫp uxwx7:Z 3 V)_~papu<^y|o)=5yW7k~lzߓꝾ\l-?{6ϧ>H5W7+O\=g_\8O|~6g}萟d%?.9c<) ~p^|m]<0oc㼞/ͳIȺXz7Nzƅ|I6oMZYꜱs?b*/ v؜Ҹ"j'ԕ/.xŔzNl0b'q\Kdz= =Ypw^:Nq&Cs ϪWd/FJa:T5=q۟o^vE_T;?yw]o}/?ȕ8:ptM݁h===|ԛ=?ف}Vsmz@ -v^qs>s?ZcO|H5(&\϶d\1&OO>XW+ӸHӟrgrm೗U WOg`#3:;\|i>se+:1k~)eKO|>]LZ]^,Zsr^kLkM3}{)˺TljiL9ߒ}^ΗƗxW$=n0Ցivisr1sԋ91wvcʚ{ܛynjعXdګ Pn%7SOm/r's=сGJ˃RHϺ >J=8rvOM%}is?;׃%]}q}_;埿2_}j]tC\l> w]ϸVOӇ1_^빺Dz{szwC`qWOi+LOFD>Tfb3A)8aUGreO#zksqs=T\yVfs_mNGqpt{`6XSV>:ptс7mzH Xd6şpb=6rt@ρ>#soox.W9S?SWk_A\6nטtyȟ>C y(lxd*̻V(:~ܬ` 狏&/~p agzz\y X5:wj?hy unyX$kvC-ӏxg k\$fru{qxS~CgSK˺kx90k[^;#Oico]8Iw-4/[tI7%jc5Ύ9X6ųO WkR\ckk}7el BfÕ]ֲ.#wLå O{ o]}泶jb?Oa1ş\3/_SmXS^q'lxf^./RھȊvr?r}ԦSm6]pyK_ԧn7s8:pt؁&͸[yöN{~o? __}~apm> 60ƞt=·XSg[1s]fkU>o!o{.j6?b0lam̑}=lk{wL.=yf]H5ߓ# g]/>d}i#C'ҫuzꃛR\:\7YNny=k<\m7멦4jv>zf56q땫ZkTǬa\Kyu;kuվ⫍y=Ln4LXD|25wښ^fI1gT[:cڧ\l<uTGz[Kg6.R.>}})OyZQyz3=P*^W뻾kp}ӟ~z[޲P{сG.o"k]7UjO7]}};0zT҃cC*?w{{ټWz&N&᫖6rtCvOA̿[uz3fsǟklڧ}1y_ܿOO9W-\ }מs׀!Wb~χ#ݵU<5^/G ={EZ>OK֓lA~7Gg?c1/O Nkb^i˴;{=H{5w5QsQK6W۱8:F9~=]nZ _ا5qt\䏳WZN }WT$xՆ3jc>yǑƕs;IWw57`W;La˾%[^V=kO\tM?qx>hv{'Ն'_ a|G:n^>O=a>[7!f??t"_k~__7 _#5X8:pt7MFM7ʊi\ZסoxA/>tuEc۹!1= k}сO?C?AzЖMozmo{6w>?=-/xNoxN{6/_WoYOO|1x-Vׄkj׋/9 :z;?Nìsi+\q',Wdm[ʼnE=#?nV#~K~jPO{ _Os//^W]|'|}O~e&},~~*Ю3ч L>$;gG4Qu59SH5Zgc/vb̓_QͭaaCubODuI 6k|I~6e\1j.Ɯ]-~'&w1q94k0n^ ^<؄=i+6.\v奫sru77gplSf,[f#|OmnOp7c=0jx8? <4'{5X\IJxvpWmbG&bj_iⳙîcb5Ovz3l:Lf,[67exYcy8;Ļ&p\|/RYAgTOs}03wc햇>?wn4:MuPG!ޟ#!z~YtǙo sx}q}gy+w9P?O苾芟˾5l>jޯvv}g.7)OO?SHmxY'ϜL,fjscJ,/]LL<ks{mjk̺#ro_9q;N8~l IDAT~rp<5)~ôO/>vN_lbH/ZqTlug/:fa|>b69\0 3_]8<=N`9Ŷ'Pvԏ~?hJ0sޘƼ.^lIژIGIf^u"8NpZkF1S`kڇfd>TgՇY㜋7CI5Ǟuot{{G Ǐ^#_v;C8x5MlW!SfqL\\lꏳ}ǻbq1yC8q3&-?mƼ/ní?_t{r|'m^Y'~#Lk^?eo^r= +Zۗq^?ۋ|i9O' ל G'6z`͓b'>7ԗ}{GG,fcvMht?t}=f=3\Gс]#ѵeg]K]CsWiyxp7aVLz7Y#͗L~6u|vd3YC{XZ^Gk]>`vH\bk.ObkE g-?uw^պ{zLY{u\ S cakq/;ߜ[I|qqF1881 .y~cO5MuU[:?<_iv^^8'6{9[x_g꛶Y׌ Ƈ߳盱3}tO7Ŋ?lOƖ#o:[qV=_5gan0埾q+e]݃сDUoe9uoTpϟ('搛a?M'_q^}PqX;'Cx5yO=uʵ֯OMwMtl3~n-&]%ݜXaY=UG9a})g=_k1kt'q<3r'21K371qoI.;&6udN'Z c/{P_/:'k5p&vc'j-Gc'l1jwnU}Ao^}s`8)ٳG'خ{V:lՋZ*᫯|B] ư\sX]}ֳ/I{-.;L~ք}Zq-5O޵s8g۹r~IW>kvivekSO=2|W3>j,^VgK\wu|w[~$<:pt7t<\oV=y#G8sCnt|(q>4z .872mz0׽W\#]G>|n=zrmw}O}BK3̳a-C`GHĆMS :1G^ͳgK80s[ZVŽ׈9ˋ[}Sm:.~9Hl=>~>'9_8ʁ}o]|9!a |bO,| ͟/.5#/X1j |[A1 ڱgu67OG0azk&H:%xh>mQCgN7/zyg</zj_mp =sc^^dG=~զbzJ<)a!}xa:8?cq+xi9טg\Ŷ1zvutсktdqxdx 7\ |Zñt=aQс@^R{o6kיrW<08{)6?{|a!`~=k||xZOnOLZLMy{yHi6=0f?t8>F\WksnM55X|jC&O1^0?\⦆2sl3Ҿaj,ocO*^\C Gd/Mʑ-xczhruKOiM'f˕=lN_ ܞOs⮮Ulizn^n9g|xO͘9/f <{޳M3q8pltUW>r_7939Y!o{#WٳkyU'mgkU˾сG>AyC4/<@3 ٿ0{ CdGus{:z8s.x󿋽]΍{(tPrA;p=uOt-w?uX~e G*~W_kXȟ=Zc7T'[=W~ubh_Os1#jǏ_s{T=0Wv6{歾zWl?•+^~cW_i893>r+'{[Z  p+0KTL6%۫?y1[d=:w>="V셯ݵ@'찤Zqf-/~ >XCN☵W~cćgh_Ώj|t=4Nϴ Ξ>'-ekWs?M' w}o67kz-1% M:S08:f醸8i u9:^]wwW>^>8:pt@o\缵7oh8 oRɥFx35{Fc>t~I煹9:p+w50ʖd9tVzOh|s89̻.Ê Z5f̬ s\o\0JuTC105\zob_YϬ~n6/G6KgmșXOksqKb  ;뀫Fq渌M{fͫiۀK<\VMƄ ݗ]qw\&_W\5|drX/WyI´خ#?hT9A<ベؓu^g^.0IZT;Ωc3q6xzr4X뎯/yXofq0ic1*fs7)|ْjkث7F6-gomOvqQZqûgOZ>^>rFnF.y=ۊ>CہumMkӖ/[뻮ٱmw8aoJ⡰cYс[֝a$*kʚh_q ZzrN>ܔ$ګ9xUn>kc+~5̺|r2c̞o+\/zçx1w4Ӱ&߼6ǧ&|a'״KoI/6GO_bl+nO߱2p ݹ{ylƘ 6_yNMՕ/l5n.nɳ6wLShƉQN> >zښx kaf\r1j B1+Mr9ژ]~Dڍ6L@*.8{SЫ9S}OqY]ǁnrL>wG.u`vIk~uFOx򙓉 ͳ㫶ꥭ J׋=Ͽcؿ)wWyT~U 1gsq扽?zRM>:pWw{5e75^˗vuoW&̴,v׮|ڗ{~u!{~k\Q=Y-|ՙOLK|{prS[}3۴k$rʕ8roÅf/un'V2 g ƹ|g>DM ‰I:gVt;MՃh?jOş8 ,bʡ@+^s*YO}gik3o]\GT&CV:'ό)ֱ).+ιG/7Ϻ78 ϗVO5mƳ9W>j5=yW/Ք 1I*MpēM͓g7 h""侩:0o2n.hE&҃R7n<1XƳM2dž\ݰ;VҋcrMzFo"^:\L~3Kǐvz;|ִcNo~ҞqV0>ѵB|FƚLZ8\Ʃ]aGTB~Ot'o5[nxϚ.fo?4j=KŷT﬙߇?xBrVb Έ/z ,L}+MBgre!yt[F4^1\q_6\[_=yXa 9rc$pSqSj}YIz[WĚK/w5}3\)״[.jgϧ fZ6å걄5py1Vyz@?Nafp ܔi>q'<'+ı |GFd֯Yw\̇/[dp?96ًr׼çW.x9#|Vq5;.a:Ǘ}׳G[{p7n=XYqRͺ6Fo,_Dj w\^zv{3i}ykϼ=ٳٷ ױ'݃d# މXsu&Flté9M`6'Q}9^'o.6c#6d^mnWNsޜ^#*O_Wmn~)0k-&,.SO)'T^iq3_ˑ.yrZ8g={9/Wxj^k[|M_+[-l<:=7g\y8ìv%s>qCX^3:V7y&7r 1s>9:6Y9}5̬cf9)&|70z|:6HusvELXƼ\܍օoWGؽ8{)o9ʟ߁zVҐZb&]5.SoOe5{RwV8> ,g~3_0Q ;eOF6C]CYvuqo& =9t!5ڬU͆[T\} _k27bZdr৭qO x7KMa߰?~?W7?6 VM^\R폆QQCL=GrL{Ȍrk{?&~yN13cyRogOϫ8:t`޴=Hk~ci;*}{/t#4ɜg;t8~Wlv\.8QMGsX Ѻع6ٻ-ɒZ,Q@ ϣ:JZl7>Y[*U4ɃallpZ̬Z\]1\K9_~]0&W=y8>}X{}wgp/= ה{uCC|um׾~gY O]ӽѺX֤tlp45T_a<~TK|tձk1[s/jt!qě~>ڿu_>aۛרX}^#V$r7ؗ3J]5WG5Ciݼ!/a<gj[>†w:7X8I󭎻oja7z. ZyiZ~1˾G֞ WÚl^v:.ՀJ6_uxb|!Jo?^h\ f<}i?iǾ@|ɱ?qͣug3دn'^~%_7x%ͻkqo_t_!d0wܼxus/;0-Ήs_9}݁;еKkHlt؍-6L}}pr֗5eK,vQ`'+ nZɁ>g1_g/k~ښۗl`7_jvz{=۹ؾVo~δK:qXroql~㍳~p&?>}uT}1qm7qAb0g<<L˻uf㓃X07V4/l''o~.W774D<,;֋uY, *8ȩQ-0[<έI|Ǘ>c|?q>;vq f?׿~w=~lMM~<)7.ycs;gI#qo}e>vlz8.msOl{{!"8c)0 x:t,!..Z|.tyv>%+Zh6ka1CM#ً.W2baR^Zrģ^0bAX@;j4N6r^|غ{wcyZpNr<?cuYC6˗V G5/}W4_u >:_y7_ '!o?-W|N9fzG>9#}Aכj8kujak'10O#q6xXWxbq &b |2֞⭗| ö[Mlֆ8{Φ͞k6w}F㧛W<6W8zpѓѴ&yu?kxl Gꀋpqnbߍ f̀n-n p;8Flb K2|@*~x:΅;L.k8_={)vuynλZOtw=}E Fnīec׵'&M7b^Mյjn  &./6o~>o8f{8#^4YliloqTMF\Ox_|[Uz?ݼ0W-.5W;[l|c{6zcq|TΝ?Y4krx$.1.mqaw}ceO_m0|0$n/<<۩q_=cqGo:n|~˱:UG,˷ٚ mT8RlO?5{Wb{K{߹} \ <sկ~gJ0D4#o)vOghǬQOC[VyA -b\^[o!:R ל3űųe?i/ts\}!yzq{{=G{u}vkrc>as3ֺGUw0F5Õ<[c{S =ּ:U̹W1F:ٚ&ʅ{yņg7s3Cݏ11>;D˿y6aŚ+<4 6΅fcTsu8}j.>]tuYˀ'xhja#ڈO<,L|l-4G7^>Xt}S&<9tbx ?]wÞ~F7O&q>Zz_͆|.1F{ gC _ӾL_a3Oa-vk۰׷Fs>kyrqП(_:\>9{|aQCDž/؝)/5\S#aO?oqͿSh.v|77?y Iû !v즾_@}I ??~_<^7ǏD?1l)=@y{ck>k{.6{Zӽ8fk=}oܞb݁}Y`u mt_?]wuKe;/+F_5 ;lT'm?uxw$jJǫ?ZL-rWvs<ك5\R,{=`k'xRmՠF9:hTGFzTߩ?E}_ķ>u=y„Η܋Y󾠆M^0ťۚ'}9e>{ómMl.l..kqlLs+qn'j6/G\l{\3Z֎Iif?|٭Fpg+^-[? ij5ť ,\?u,7>|I)Gk/_Ǖ,~ҋ17 lqÚ=ɮΤ:ӭ#9e?vU?{5?9Ÿ7;`!qfntߞ0_±?rhbſ{9?L\=L`ìvQ~p":֟'vS!oYaʅJ=V~~G|Ox`A-_aqz;}e[m* g/a_;i Ƶ:/쎗kjǃ}j;|݁ᅯzts׏/Fqs_x{yaS /GLJt3+qA,A_,/:X"_]]jg/^/|zOgqy'AoroՒW9՜T<W'k[=?blxq\I\+텿s|곮8x:r ߹_trWj+g+7 g8h"ft>E\c kogށ\;gpvq#lţr\FΎQ(a/w FׯoT:3o1'xӰ/V Q/{G|+zTZ^^gz>׹˧V85Vk)OE;݁wށ.2]ȆႶvpSpNHAY׍\rĄv@!o}ݐn/4A lO-?ecּ|ɮ7>n}w݁=3z!=~[|s9~az#}q/glFmG䄍.[.z?b Ko姫I'@}i$NSan'K7ǟ[W\=~rY?Gr2Pqu:ncߩq?NK?=rUx`ŗ g61\-~%jq$}Χ1eK-u9.,K4|R뵷fɷy`=ݯd㊧I9l0:*nOWa] T{%K|_0| ^i5pV|u)cO՛^mFJ>vE:=4ښ>|ǒ˱tOV-v:Ý>6wLw>bG{r gK1ɷ~|=/KְZk{n#Wܰ'W|4.rR/ G?x?¥OOw9qmy1휡K_7|SՓ?-=ӱ+jO}o}.Y܍vO,+J~?t{9?uXiK}Q;nYdsOeޱS>]o u:+X8Vokk8Nww>Z;vu3w={u ׀6_+!|PPڼc'bV'X9#뜀˯vs45_SX(Oc_9Ns[q xs E{/g=sf=V;q#oUދw6= C'\_{Чs1k|l0XWGrvÃj580k糖Cr}ovwvzw۳X;)o9 +gb.7IO{/r^]ǻ@slnXAw"/3cGhi8|γlCƜpzawlS]?/Zo_.M?mkAO8fI|-ww;kf0b%5<e5#qZo\9 W~`3z65`KN=}s/NZdM8Zc-/\tθ*RN=,\+ ʷxnY7ƕ'n7[Kvl0Ix}I+qU=ڛy碋+gSs{k<WsG|ϩUSÒ6?>1$郯iűKg!#N}0ogϟ-^_ TLuqxIjots[ݰg>ah5mZ'Qlu-w6`k'WHa8l)OoO94s;V<ŭm{u;ַ\k^wׁػ{Px?^d8hCz}_(kX;NO o]?:>_=vlҡבA=o-{sTug;pw[{rgƿag4LiNb1b0 u Hӭ4lΙ+kvj'^`}>T+yj%}&{ńμ\ta7r{y?{4\^x7`Ows,|p.>_hNƈ/N$g7q4W}lZQ'{znۛ8|սŒyq{ {9?DȻ{)jHS_aoXs ҏ}R~c~t<ֱi.spk뮵,+m;pw/h=󃸯}^.z7蹳_,X[ξOVVɽgN|l|ղinձue^,JlOV9`ޚ0]uib~ɟMC~s96GI|'>6WO9[-lTC9S^Wq_}+߼:<͗ŗ4+roW58ګI#u:~k3WaŶb Vhc% RpاxՖSMΉ>bs4cjX nSy-g)wqi+շ ^+6q]b;~P"R]{&oMu玍w?ac&oyyoа7gw`ׯxw z?7v:5.#<&]W3y}cN/5Ym֧ȱOl~vߙs)iF> ؎\0Ixo\la[b[׏\ŮtV_x{9+yΧFBir0O\:''oGeO؊&~v85s[?Wo4Oªl%\qi\6|4gK/?;\_rSlN^=NvlᾤW_\<,,~V_ [}9IڼO[앟{xk|ƽl}?Ugoon, k}J/yŭKt{;P/We10z7y̭A1c|kqv\+WفEZ%|[;w=O}cEڽİnovk\?is8p\+?HĐsOTÚ'C{fًZ=oaHrM]<WtZgC,]8H1wj77/w/D]6\G<8:^ך,Ö<.|$,gn]?+?uϚKFg7WY+ގ%zN? OpscE wa͋NڵP^sѼZWݱw aOʻXsC˿r_l5 ,ڀ?H?Ko_x/y1a=>zo]<yG~ڈ3,X;tҞwE.F~αͻԹ G&٭gw+?l瀚Vogq|~w]j}Rnqt ޘpw1GC/~;nnOoy{{^~ϑ3=7B l0e &XNTAg.gj Ƿr/17X~3\zUx&58k\?Fg5/g~Ӟzɡ IDAT…)gx˕;'Kgm^ox|bpt cԇtWm'kzg[}fqo_ ]zwrO=['vbtlpI4ۮZwhؕ9'lrlkk~rZAA=_Dm͵yq%;vOxzmk<=+*'Fqî.kcyV˟Ǹ\;_3_cmW/UǮa9Mű7/Wsyi=p;_t\o}fzuaù1a?ylDyi{3~N5<'Iºy: z}uफ़^ ٞy*V:99y߳ƻP|p|08ײW?Q.gRp0KN)'OX1x_cŰբNj#əcT^Xv}C}e#ɜߐS<>0bpgG^cĥn":<<]{bi|w~^L:N{QG#^m/61gXM{OX:٪]a#x17ty Wtg W7V-?} 6)OxO4L%3WC[c[v;p^F7nDn />.v9mo"zwqw;pw/5{AЗ /\_8{}!ZԁGL{X5nC㏧՗jv?!^}#r"~N|xcr#\:[?&O<Ǿ;ٞ%oCV|>݋5I#1j(w|Öokpl+,.ɑouzvjcfmC@wN$:Ř珛ݜ,5{x넽x 9;|Z=g_ON{/ W9Yڭwٟ㺲?ԫ+RXBoM}5g|>46bpܚ{||>ly LDM5O'LhTyXz}co_u '?%_1 V>~6?[xN쯥xw..t77/n4^Fbzqrw݁wx^}_=ӽQ~/!x0+W[sXO'b8g_NB}Y_l[Cuq∇Kp8͜Gц\llꩦ4|8-?O|'lꏵuu8~ÜWbèAj#~{1t.ճ}jOY[|lkIam䇉|p ~ ɷW~o?8̓/ U Ya^ G~òu߱>j^Xα %.>+,zTkncw.9czb;^j!R·/S?TyMq/`7"?yS>~p3ؗ27*-΍a_ݛ;pw݁۽}6 s=ٽS4qaosf 9limjɇP'}HL6,O#퍿QpSz'XW[|fWWܰ_cn# o/ \^:Ft/|>\[Ss}7&+H5/{5]bD'u?] ß:u=l8< }ycmt^N>qb;[o6:=U?>j6tzc|a;Qaqwks8赋׼u]cԱx:M`捇Gn]缍ZôozG;b7ߘ|ra)5kfWCu[[о^mؼuZ-䬱W_J?U{Q+[/$ n$]݁w;:^Us/#^{xqF;>}l.M/>F\'}ZNz;浮Wj/g}hrc-/7ZÑtIS6HnZOZ6߃C|C>x:חmT] dyaگyzG>Ňc_q..bث?,-Vm$~xj.&x[7vN+x+Ó:<\NǶijř9rq/^bI׃Zb3m=&5x|o?F4{˶Ÿo8v1jj\0W˅K ð8xa&axqßZ<|j7Z3/8^vZ|t].nt/#ٺn;pw݁w>^zw= ҽa7،b-/%grWo9/רbZo OO0}A6/.M }7pW}:6-_]?@? 4iGU}j#Ylpy=n~e_?_KWsszJkrc=lk[^js#|}Q&n}.G:r|d9o^H?>l N'S{ %)g:.Ŭ=zMlkI翊 Wl3fWC5Ov+b~cOv8].rˢ!jO"9"qѼzl.{`;pw+vg~Nȯ${` ;_|lѤ1'pHxo>nQ3o=Yp,y|ދǍ F=jToxpr+0: <6Ea60FZzI>/_|MAp%!nU7g/WEn-|r)?9Xkyh;xFo|Wo|kF9Iy851d}`mG{8F 'Xo.ޞ6aT= Q^6㡋7n|W [b⊱&5\Ob';t\͋cN'Z{;hO=~ްNpsͯVL\j[W^Ns#Ng6|{zǾCv t{AYִA7٠w; vݗr l68_״xr컋5?I <~SoVsxLV_܏7i93zKWX~x; Gl,oφ׺z|G{#Oa&8!2+uG\_ iqc.{svǧ’X6OkZL5N ={{|>O9;/J"I5;ua]?;cq{>d+eqg1hWŗ/3kXxxu>qwL+^Oouooi7=9n"|5L=Ss<ŷ.OAgKr}^rVGѸkyw"N0gݘa [;pw݁r^{Χzg ߺ8rR\_|j轥i_OƘcq;dgb$j1 vOĜ]OW`O>bJW㫖coX-7{ӧm6:?=]Lk^t>K0i6?tǵc[ǚ0]G勓íԓ]kGsasoN WqzXmps]\k>܆7[\u5,kckwa:v#ql]abb_7Hx\nL;pw݁Ѿz7f#A}|'le=wttS6ss\yLVȞ?[%|6|0rYֳ?>C=j6|4!?X<}˗GWR ^\wbGR[n{O` k+U ;Ʃ~cm'Zp[y>pu\pࡍ;Y7S|4[g1k|F]Ik:1Ww?/]Yr18RLf;F42kc'bVĒ,e6Cp؇都g5]W1F蜉7 liQ|x5z`b%͕/j(<_LúX⪣:W-g|";͹M΃v1.;nbt/|n ;pwv`yuwwߗkr>{~'wc,?la|*&| {ךo߃Op<}ijϞ"尮hњ&%Ք>᮴{c9xmMa~l)*YWX^|JnNU< ޺̯-ʳ$_t<G֬'?{}oހ3O7>z}ŭ>_Z?Pij7Zn?>߽~a('8òw,],lx|4◗}k۵W}q]bݷո~qyԧ=Cj!]r6E[?۟X|GjT\` Ob՞7b7\ljݜbT3|}&'w=ꋇONӉݾէ6oNRM ?=-O9pZy4nָI)ѵ;, _,<ű9ۏw?Ov77NCWjδ?3~1g/o0Fsm #80׫<⪛-OoY; o}eo{ v~Xwp17:WB݁esӶv5݁ށ^Ow;;yϟEGLdS˹=pG>u>{ __q#nzk[N_ı>X\0i{8`5pėe{e큏m^}ů_l9|ðYZ?K)/ Nq:u? K'Q̓곇eޏ2pb{f8:ltՕ㖍G1K&X}2^j*J|7;&+:_k6|U|`aWXΫ6y֛߼6-&nXpwzρ)~jc䏯g|obͯ~}{SK_{j 4,_zbay:Kſ.VGɝ|[~'_'kop 7?7 7pa^o}wG@_;Stw?⥺=c9m0(,W6ˏy#LGҧ Em!a@6svxx*'_IߺW_lkmtc6lbq>/dORH5${b/|||=>#'o++ۗrc7bpťmg͟/\MǙrwY ܭ76ο1=-;lw0T}þ輿j1:YW/.bRc!߁nvwSpЎs! ݜsƽw:/9=㺟6wsWvw=t`st^Ӟƞ=+sm@w_}ɶڼ5}OaAvpoDv/bg^Ægq9s?1rƅ[|aɯ镾ǿbrpPOuGKW7_d/.'^^cmv-}+7[8g+[5?r sb[N'0sc'<:L5cw.369׏GǹU+>ɗf7s{l'aْba);Mӆ:՗O-գ ƞI:pSbaO<'Wsu8s=5\z9`6®ly9&<31oʮ[/X}gZ[/>qN{ο,ڱjm^M>KW{8G9DokS)w}Isq0rJ#Vi6 X$uX9:0a;.Ņ67TKؗs8|հ=9)w:nlI䫖|;̗݇;.ڬϼ\} sǾ|?o9_a,^ 堚p .Rߦw؁vkvk.utw݁?{?ۗq;Ϥ{݁@wskX%}㣻.ƿcGno%?}[ȹ;n&*?WxWZǣ~yG9?6WWD.C] vpՀF6rgoM ξ'77`+Y'<8K`fw|3oK/oy мƧϭqZA0>}uElrX/&Ű7ꉺ`j^^i9YM4mG` |=}Ɲ^lig/5;/հb|w^NP|xkkX|ټb].']bIy7.^}Elp}k堻f̋WՍ p]ǵ(; Kpo)}wLt?;N;tQv:1;]3<0_Ys^=;pw{{՗5Z}&o;;З=;ǯmb\80t+> |0]NGr7<'rٞĨ{W,{=5/wvF!R#6, ]<[N1a w>a~ص8\gmE _Z,aS՛= o§bMh{%!~倩7W98XYcG|-L

S/y[<k{wkscapѧǙ5l56_s6זǾsRtؓ|2qNt!{;'ˆy<˙wxF=.[bY{f>~~݁99|w|\g64|IO`[Ð8}qc޻ku7_zl'񄉫#d3W7#,\ceMܺNYyc1fSՀCۃ?ld1f;q-Q=bW!ťF~~;:da'l=?~Ū'8U |<6Wn|㴎keT_|>_}_>r70٪/oK cnb0j_僫k/|85Y÷5ZĶ5"lT6o>y!lT3-uu6"ckp>}\8Óy 9?ؼI'ovB^;;NNBwt9s%sッ~˃ά/u;A]#Xxy)\O]kӺ:DܽZ,{Q!NrW=x ȝtnW[?1/_|[QH!wꍓ=.oCOl$_a|)͜Ϩx;huoxU O'Y%BcZh_:q5wsU E:'y8?grC|v1Z+>k~pl-W">.[5:ջ+6\mf'g[CxǼsZqkM5uNuzNvv5nmF8ZZ cL08<.:)oX\( ZǾN;HN:>mQdo:o$vǻs w;^;>eKR/~^`zzﺶS.<|gs>wMX?c:(aap\pݹ>l4L{!Ϲu+b7ZO/Hű}}/l]Ѥb688Ŧv,O|ᩞ߮X Ӻ猫ˏ[\!Ҿ\)OXH̯\|Us1WnUiׁu2HX^ݚ}Iʼn᫞叛-yb[g_syawml)>1+c1[i5 T}k.y3WoZǾq# 9I=a(/-{q{}w݁\ݧYH<~_<#S<=#=?{/?>{U-wޢӗ笹k߮fl|I;w>> x>Uoؓj-:1ي|vWSi1X .>iw{l|'51:?lIǥ>}?L}ꟿmmq^aX~VgN{9;qq3%e4y\y魻9l=͎;>k>S}| [|~6fyVoU7#NqW{nT.G"F:i}lWc\d[ۡ웇\$yvuxOjp՛?^cͱf]\=;SJ)#\|{4>^~=8: @+AoH=Ap;pw݁1/>~3R_a/>al˴~@m eUyD! AAH VD*RQKERK*E!@d Cd0 Is}oV>wkosoRR]anr.G#]SQ !7<<{b7lptyGxjjn.=L6z?Nj-i:=ƴ5:xulMfoHXk{laߎyq֮.#IJ̏-lэ/V<4'l愮d7m%aЛjmy^=։|ΚV]aˑqL־= /F.qtz/-/N|8pWQþ#Gu{`: ҁvv'|'-L']g_zu`u`u`u`uw#E.n| ķ<$.|F>x>dγ-:p7;Ѝs1oF]pi|vx׋4xfĺJ c_Vϖg[icJiucbaխe6/49'O#][[t/ɯ~yyW(Ysxq5_ulyZOL\@'ppjwӝg[l=xIp<O9OWKq8ooKcʏ=fKi՜>?-n͍xMܨ_)Wmmb7ͧ߼t5̸04{ďVm9Mz7maİood43*Ӎ~}d:?jzڼ(1dފþ#]nR;!@ M˓c>6'MbZzu`u`u`u`u9泭~zÃ'< g}Lf]l4o9h :Hw`]ZVi87!^ipx}|‹Mfײu&Xu#͖n0ሧznE[F;ì?O[\qe^NOڣ=jzȖɖ]hu7W^jSG&^v|kqb⩾ uuX=i.!O<LZG okyb;v!vXpY7<ߌ8'?c^cޱ—0yG9`a/-gOݤן,6˜;&a SOʛf}`o?{M!v0٫A̬nzw~AIDo1a^XXXXx4tK4.\$.\ u:)Wts8ݐ8_ ~kYck$,ٍV6Xg=Un~1S76Vlx٫qͧji5gl4sM>rA'yLo>r^8VlSW1l<ߌ3᭛O.Ƙv熽fg4𑰴^v\͋@sZms?t۽O0ؤ>mz֏8ϸ'G;y_\=C)y,71gg4[L5TgGͫW\Z4'q q盒ռg_Ǩκs{e^ ҳWŧ''|1ʙ8[Htik@z2ܓg&[mgaZyt▬\tMco=nwu41ͫEcql]Oy[OA6jvz-aoF{G'lcbg /o⚷|j3yk:tOX,N 6bM&v=sߚk˯_|Lfmg]ahO9O{?M]fsp9η}n/m}aY֟f٫um>`koelߚ/kkqj_~kz|=;yAuB̏Ο>jVVVVV||65\o>3+.arWu~^׏Ձ;A[5\7֝vwg5Dd1qᆉ;޸j'kJCluJޜ_N%R|I΅k_ÅT+_h݅Xz~6cKius%l霯tw6cMqOOye?7*_n1Ә5w/& _U/g'5;1cyLˣVs78YGd퇞osC5Qz0ͬ0Itb?_W͗Vz5f>k6TK0[qN_+ONsr&oߜ}ȇXy5]~=?\94/ǼpGjmb(om$ HK'va&6pOb^+֖ۜ!κ:f,>Tuj˃3[um.rcxds9%G~s1AOVSOU} x{;\[u`u`u`u`u*v + 9b?*‰ڍ;xsՁikt؝pn6 [U7.^{*L9\uLl}抯n0 97/6ك|0$߬G{;.c@`⡻1lJǕ}NZцD6\şS-l'&ޘ6sqMOٮoΫeNņ=OZ89pg֏l~p\nQ9_ʑo9 w~%>566[a5g :.ojz+{?J{:n.- IDAT~7r;O<NF%m'5ca=m&yrHZm=;y: /N6%R|v_o$=s_N_곇|=pw산M>'\8ݠtCЍ%\&|]ۃޤsou]59I5mL{K ?擧ikY=?aׄ Q]퓎kW qp3mF{>E{,.C!-? mW=[G-<a^HL W|}C^.^iu[妛k]8mW Z宮4.ܭ͋q^a,˿]g4>ӽ}rXWpqZh4<ő- _͇Ƀ]bpf&qkM9?Y㊿5M&.iX#6T>|cU_{au^- c<}|GtYaN=W3} _;þ#pu"q SZ㤺*|ֺ@<>fN]sOtֱptY^suλΛjxNn^[3v~Jq6:x.^l2&||xZ?W:N:aϼSܓg;ǃC}:Լ-$ Mk-|Av[Z<uб:͹^xͷ7G^wo\囹kai Coc'߬8ai[)n-F11Sidu94U ;0[<S&nΫ'paӓG䠛7k0|o̍)XX{R[iUȑqϓfK|RBg->{a^|wS@cSwwn.Aar鵘mjYC)n߼zƙǛ?)&[uf/6ia ۚn8ՠKO[N|bM-O6ž;ͷmkm5?>:|Ӟma6ϕ8l,q׎ĊS&4{br.VI<< G|m߱l7]l'wy\~\|ostlZN͗_t=KO>mNUK\i8Cٓ099VCcqPMt\dk-vrw.'sty[=oOI1|vՁՁՁՁՁKI,.n_:%zp y1˷:HwO|1yᢾo'ycskǹnJol`ׯ kp^Zzշóun^j4pؓs7g_T ӷ-pCaO=yp1RbŚ^{I[gS/f*LbzU qͭ˧&la S޺ p+w`7[ju|{ &Oٝ#/L145.yֳGϺcQtb+!96K7TzUoe߷a籈G ֎.u՗887| D._ gѓGyեN8"_<8_\'.o;G,wq8eSW?kv㕋uKnΥz L5]6R?7}po~%"VՁՁՁՁՁՁՁՁՁ7*nb\'HLޅAE~s IݼLtcS.qYƇ|S0'b[j3؊8ڼlwq0D^g [u$nbg_=W̡G_Z<)̽g^)q͜#c>_XvU笭:V'X1ͺYSa'OoW=V?LR~"&)5M[]0WĔV>X>\lkIrƑՒ=͞?աo.[nM/\?corу9)Pt>L~^N\m;dr^\9!|=W ih:fU48q ^'?|e8ڨn1 ؉&hOX&=䣋k?4K |Ʋ]E*VjZXXXXXܡ7ݔƩ[䵳qvo\Lq30yafn1aZاMjM|7Z3g=>_DZWmn|O [XvzlaKfS3ͦZ٪f+{gnjWHsJf=\<^q ]Lp}Ü'N̴Ճ7|p~Fhqa\a"ܖxcrÐc=7jWc14\VVDž[Zgno݉zw'r""۸j;yaVꀛc^ztх~n *ލP|݀3qќ 1mn-n; K'ԷAW\$l0&)|8-o<c^~hX\1bI.a3OWa){n^'8'afKåUL;<|Zoq%᭝sVqaZN >{ znjo>fd٨m6W×*_=[&xf|ا%޾iv_u1]S^Ӛd>vqsFcJ WfدxV]V Wp mttw Ż9fu0bF 8кFl% \٬ :Mf1X,aԃ')I>GeuLu阊7S2&h0\q)8q/.7_"ԧyr+?L[KX 6. bNÅlqX;ooLL=<}k=^ k[k۷|G\۹us≫<<^퇞ԗ[f>s>c#Ry;639c3›O,ꏳ8Z:W'w_-:e>\Xto';$wtvn?'gq8C C-9>=' 'bﴬ}w+=ց=V*wuR.0nB.7w`ο69׍Joi]ݾ zMN_oڛ99^G~L>ȉcֈ:)uz<&~TNmQ'!щ 8OO_-:LgġzO>Z/vέ/*3o77p03gX6f͖x8/`{k*״5'6_0aT+67?%K+8烇n辽eby\Ǻ!0gwS>{ĕ '>5TG99)5K~4f5&mM7[aCpevs?Օ>-~:jNڏu1xj+~ګb?g'b `/ӯǮ^\gpbw1xӰ|T+C٭jÚJ—7{vrMi|6W]OjI5'~Wm|q5/e{Nf.pjbs?oj]F;S08j^Ǚ6Ȭg'ȫby :Hz?>&1笅:ƨ9qꗃ\aN/yzՇ?fdĜc=`_XXXX:EнPquv:>s7 . 4g&y1t7?y3u|ńog1Q Kb⦓IO.RmŜI/7JoC1Nf|G=_(NLX{`>,ȬǺ1VV$tv=[yM^F~8pZZ4Ǒ1ϵ9{|~#_I5X;sG\qNo?rK6d \LȞOg~Cj Cg|aWZh G k?lsm-n|${&gY>M+nOO\~s0̛=۾ĐxNnnu`u`u`u`u`u`u`uJv xyodzhn0fÊ+ {H7Kx܀tSlؙ7۱\bq^fCqotǓ=\ڞNWK|pMyRL:sc:bzx_-qm+3fő/yI|bIz>U|6:y{)1]l6'igгWjqZg'c-jiŖh3nbcM=0zQ3e3Gy\QLyxҳsT8κf,1GjbO.dϷ]\lwSþ{u`u`u`u`u@6-*]\[}v7 ݈4`fXڼÎ+xnxx8ˇ=넭~͓ݯ⟵7G㊓q oc"f89f̜}MyLkY[qp7Ħ}Z:κ$xđq #.klx76?yٳ7av:vr^Y\pqbc)rqGd~aIK3`ݺܰPS9|磛MN}83ޜZqXU[#}ဳκ`a'=~vn.o|c1o>n^ܚ؇a۽ [wuX?=_Nf1x5j+=Zփ5o۲#梥΋,U7nޜp3yn&pIꦡi7 . { ZM9_=3g9px:t5nq|[{y;&:!oXa>x߼F~pp|Fǰ=)uszg ?Q 6OQ-8ۛZf=Ո7=;|0劗?No:l:[= P\XZ]/k K] >vm{ ;Ez:FUys^Ż%7|5[s!_I; []C$봽^Sq0m0[m I|tT:{37|Wlqg3GxH= n>Vg]ţjZXXXXXXXk.!fOO9q'l^8A_8&b蹷rOG7'V8n6Ys9f?q5`:?=eb&|s>ȕ/4;=o_ ۩Hɛ:?MxyUk{-L\<\Y[XiSZbi5b{mrKϜ<c.6;ߜ=l|j<,[dvH;٫n z;>6Ϛ-<~[5dMh3fY\gEt3,gYWcfYDu\~.5dW~~pqXKz=_VVVVV1XՁKu_ݐX{ QpN?yӛ޴{ws3ModxOa}6گz5go}cዧg_plpL\\\|8*vOQ[^ʼnA0i>M?w|㇭rWZm-S׿gӺs셜'_njM¨܀UZ 5M37_{Ǽs71)~c/?V~bSb<1;cl,.'LJSn_b?>q_a kPqtYbaD iK~:_XibC-*Љz7[=q` Uu†;~fKZas>^w7ww7W.Iڼ }$N̼q`MJ7+s>1dJ𔃟dqwJ{g8Sv>'>~R<0@nV<3{kښWZ\%y\Xs`ky+a7qsjg#wR٫mzưo'~bN6':9??Yyu͜^Xpŵ% G6ψڊ;?|qOlipbX{r9Ibņ˞;G4[ ۜgCؒ8gm0F~M9_71zEg 3s{6qb&ޞȮxzѳO>y`?)ǝaߝʷ::::::::p;ࢽ .]̻n|ئz6lRӦFRWVOC >< ??sKomg9~d`'cmlq֍-ξ'_jRVG:c>v=1߶󘆋G)NHm򗇯+M0O>L6?>|o)zdW)qqŒ gSw3g~bfz=]^9VVVVVVVVi_}ƥowaִ_5"b n2ldÆ<; I4g1ל-kl59c4uhW&9;NBwz řG R~joxZݯW,jS([)6Vf->aou=m\G3_zTO'7~u,⋛:; k8[Mi#z IDAT{M}.z_N_l53ŕx_#94V%S-lg/]:=q@]^{` Oo3?{2sCptcǛS \~%\]Ն򕟞u[~|c̮vT+^#86lؒ[I~ZՖfxqjaۧu1hRs0ޥa]jJ::::::::p:0oh2w@`7!ys ]miqpi<2(M}E': Ndf{7</y:it~z%sL&g~XM/yQlS:n=0s'}^/N{"sL9iXwԯt1ŵbcʉ 6ܬI 3]==?Zyqi~2[ ŵni~xh.\8\͝`7 3sd:_M>mJ>[a+oQt0Z[{fٶ o=|djwS|*VՁՁՁՁՁՁՁՁՁ+Ёy]oaސCqlqoNVo1g9jNT Ճ4{tc ɶps/sjud;{rm8dfc;<ěvi{%ٷe?q;q3O㻬MGy;:\qSO9Lcgj3έu;dknmlDē{ru-Ss~>U_} WVkxZ,lxҧrߜ]Mt{aJy٧y=yͫ>EL9pIS\_E]ţjZXXXXXXX+̀n!Gc6)7kbq̛MngU|pśb^%.r=m}o90S&8ck6[2-geV^d;o]p7i9wdԧ&i7Ǖ-|ol.}7=}VSz⚷xgol9⪆pos9n< &\{h_pWG}~ZÓ9'=s;im4olSɆGy5 e[fs?0|քs.6a9wm|5URׁycא.@vߍ.ôv B7l99Lv$|Zy\ph^<G4jMOiVqn3]d[[5.o{͖==`/X'嫞t5™'\͋?SOӍxM[9q?,`|\2ϏqIO~y 87=1g+Xa>0#.qS5MoefWQ =Llj'N&.[8{0W}|n]598U0##o$[n_e_>3>BuAυ|F z0|uM u71o<͎Tg[xY|tF0m GwXZ0[~xp ϖLq5:Ήe@ݹw X [z~{bly{FNaW1/ ΥG<0AX=N_G\)mսXKOO͟f# ϧωu#|}7JݺTC:e㟘#8YGo0r|?'|[C~5ѩ<.'{<9qҽ~cǬc8cNa'1-1ooon9QKKv.3|^>?))w+>3?vopzV=Ad}wS:t7$haa7TlzX8o ӯy87ܤpι5{7S;mjga0iT{\: Gš~{$3io _p:~af_1؎-:ʁqu+9[˝LΉIڟ8#/3E0t:?̬lw6'ͫ_ntp>QldYj3ך:aHvuf 7,7 ?pZ]Ť|W [[n:^{5>6jɎ7WS[H:fp<*/?|Og+pcg=Y;{{~k%x^W>s?OO}W}ug}gCWW>?{11y9w]' x7!S {W|3QzpXsu6#6I8zLqZͻ__{߸/~]ws󯲯ykv__0e]4w~}.^;vMAܺ so& Hfxx}wf\jt9(W+K候RsOo/=Wsj^<~ VˑWC1M͵um}nbfN'cc{j]O^_Ʀ9n9=13챞-u=r7vY?lIع..|6ת}$eg~L[jnMW01凛廈.윷r3}66{}m}q /]9FO+\†9Q>!#}}ٷO5vʿ%|}~Z?sf|C /qc2-ɯ?o)\p[4~| | &ycmt2lܷp Ԙ'hM5`a^, ˯|ՖW9g6/>{M~MiSK|0[=񮖰bO+׭wǰ[Z:O澪].stWmO~=?書9lDŽq-ƺc=OҾfΉaa3ˉm+7v^R 4rQn\#p$θxTs,u_8VxWތzVzÔ6z-g у7Mz.g3mo1*j&!!Gq3Wܻh[aW/~s|7H|q Nŝ?nk6Ņ)w;в?:>X@,yXu{_| ;:s;;7m.kI7Apx7&O8ӍI76k/ٻek+\ė3KGoF~ÃCleⷘ[}bզv:A9pϚq}.>O))TW6o%j4k>T|!y|9NF{)f-{79Z#l/j7\׫b/Ŭ˼Z刻w[_1p0[.{[<`=aɋ;8M닽0Ղ:;V[G8 ob;iqW %_5[gno9Ċ!/aĩZO1s@ϖyyq#^l{`~PM{Srw~{{.K_ҳ\v'7V B߼.]l` 8Ə+1,SG7jg>7fqmmN&uˍ|֜fz+9lks2S>'\`͓pӖV:[=TWW0c2}q^F5wܬګc͋Ο|O8:Oi6OOb|jN4Wq`k̸ƽtl^ً߮+.c=mqzh/omm;|$}X %pn `ŞmƯy;kk],-_⭻Qo 7[|N;jU堳M.)qm}gOa3ݞ' ߜ.["REa.3k-<> ['ĩä{MM0}:.6VNrˆmx{q>iuok>SzSMn/5j|Vֳ6sǺx:gKwnq~3 ?6sA /{Z Dξm ۨ4Ah1ZhǏGŶ4L2-G*GdbzrUZ;аɜř?n-|6cs6b9m|77~L?||w| 'F౿ 81k::::::pt&1pL\-yd;0-Sr w\.w=m]w p7wƼQޯ*vS#^y'qΞ/WR^kr|pOҍ.{ />,ܓg069$偻n3sOW=OTEc18[Ņ{o.^3L] ÔO^\rokWOc:[x˥j 3uهdΧmY +71-8߼:g̬߼5]}͝M@^ٞI{j1ZS`3Np=X}l$[9WY,,66'[610z89?٦͆^zbfq'l=)6:Ͱ=)}w;U%Bv^3oK..\'?ɻ'< G}xg;==?w6vcuݵuZ/xK 8eHEzn^m3}3fvԧ>ꂿ=O<{& bah g|xzֈ {q{\ )zy8z?;QY5{5lk|}o|O1Yxʑ}ip3k><U}S9]p?W_\o=1缼̵\UckS7اo4o5uXgt\]}p][G~1?cV>m 7)V;U}~R^ogTG=>$0É# #z;{;Sz-g5y$뫛[ W>kWl9x?uvxZgmԣ8'e/.^<[;7?rV~3+r?{w8"dǟ|3w}s,_+eWbߺŬ c?uunտ{_{w5 ZU|$Obvu{ك[ɣ7󫴧2ׁ/ST BF뇪.xn$lg|erw??{ ^0S0Ǜ\bn㧏Vo?`η0[)jX p?û?N-v ?KnOw^㎕,̱~\@s/}^gyc>z(s?M''ޤ'~6cΌc= kMP:N{[c5qŧX]4[j4N#`5yׁpnan"z`yߌ`&pg^َbg^x>v,EygjWfyyz2/7~_g])Sqş⹈"a:ÝOf{6c֓/o>_Ϸ3~o2z̼s[qa/g=qͫoM̌3yUqq ?mm3c͝~Ksi;nG|q^vVVo7枏ዅ Gmr7?㲾7Wnn*{{OVϯ;Irxw~cC~=ZNŞS۱?S[juc]ooܹsMuom_F 8-鹨o x&Cm+/bH=0}dι:'W//T=z5ev<Ĵ?9eOOl.;Y_r 鋞peEϜs/w^LL[حiKO̴Vs*)n[qoc/#N9e;6q\;W9UCp>>ao_od'|';p.rB];ׁysUL:սscսӁ_麖3u}?c7$"ׁpݘyp4X;C s᧞1cY7ys\\=m鋋m固iq⊧/~%[֓s>gyxslu:~zf.|j9_-Gz?5[WϱS꭮+c[nc5^O;;^Itj?4ɟɇ7_+YzVWVVVVVVV|~Ws]=)O=>ݩ 9O$%;PofϷٖp\bb_yH}gxq>Rzpppvovʷ>O}#n̼#0~C>C?S~m oxoӟ-_~C?CtE/zp/pj'խcuQcU'][ϫx{W}}y:51y+^{ғtp=iO}1ز]w?3?_V):׾vaav::(e[4 ~>Pk^;Zգa/=9ٽ/vOzғvN/ s;wNgoͿF9+B;;''K {}򓟼{wy[[>?pwKp;Ӌvc/߭cuU߹SO?7ܐ{ _݇|ȇ>mfԧ>u?BnYWE/}؇} ׁ^_E_Сo }}7}ӹ%/}Glׁ/uxnntzu|ʧ]n_pu{~ΉR}~OO8<$%}X=yϻX_os:Vױ:*oO|θq+Ba{?>:Žd߁_~<گ5fݿw_^={\OJ-K~/>胮Qs2~9܁w~w><O| :gҵ[~x8.'ߪg}uUumz>Nr]X}w|җ>?noPl_ 9{{>>n}ޝrmp;cN??$cr>?8J=O}:vޫ{ܭ{<\ׁғ^+_CO}~M[a}C7N-''n?>OO?~f_pFߵϸC#97Rɏ_{^s>l|- ڵSz}~o&ݱ_}_~p>57^[>c?w}q=s iϻgwpwqm?/ /GszA"޻EO>5_5dmZ[G~/F￶syMCesse+X}?}Zk5) c/<9V_+~}}z؏5='7'gw{ϻ//;[=fzط?v_O<|XMG?~^_=PC|( g={-j?q// +g߿Ԋ5| nŇU}߭O>oKn_j@78,sލͱo{ܳ_nzeXxt>oO.}{e#ׁyz(uñٷ;7Q q>&2؁ xEo_xg >m+~snC7MͰ=V_>ҭo+@:{_[}~k^s[[Ou`_;e}:Xyz:L>OWҿn9?C?'a?wU5JؿvCIn*??;AMeCn^l_<_O}g~MAn''o]`7?M{{ ۱sn?+v܊oXojv_k߶l_72g>o']=nѸB~>4voh_ՁG[=1/?7i?~/;/ֽW],}KOֽ֛-ssŖu~7>ˈkqS:>>S?uslno9V۫cǓ]oqhͦu!<י=Qsw{s߻a?D_wi,G~_Ϣ"`"qWQqc"wD1 A55D4*} ;_ŏֿ3g&uίޙ^yz1pg.e^CmȦX^ZBbyrc/}i|$7١7qʝJOeǡ\6@ꙮ!xU#P]87|2^Xm S-Pc\԰.T㱶ryy#Gq&Ӧx2j_g(ōukz礋X0vx!MKSSf(-R/=އCpm^}Q/c*_UN~bO}%;ym2}gΒZּGOs>}oŒ3"ɴnچYrct8q /peR7o~cyWnܖtJ#_h_料(ۻ@zcrIws(l@bUO9_ai׹arx7o|/c\uۚn>_{$p~t(Y\>KNL.Ozғv`ce+6Mcd=--[iz12O{=p5qSi;0W֟|2eS~]|M;0Ŧod:/*7h/r_'Zn1:s9MnSY Ǹ~KC>YyK'iev)u~]~ieȗ}3(MCƸ*PC^\N56dӥae'tбHi33̴ˤ*:֯צ d$K˗|zѦgWƲ%i॑YI} :ɸ2zj]fb~oۧ~'38/G|Iv൯}XrIo۱^תYcRvvJJƼ8@wPmi;-3}m:نii)K9LOb/~DŽ쥗^ᚔM4k \g3|LrSfvc\]|Sd_ʹ-9u|yNf Ktk~C2=ᗿ8rMn:KU`uS省e~5~Yf|yuGf*T6<2._.=쳇<;MݧYO̗;3h|ӀKCzmuZ.yMgzuPFԿ~2/po#=Svbzwyc;p=jYUNu.i$7]2o[>rڴw$ҡNkVJ;|l{;<bUU|_rW-bsΟƧ>Οn>c_Ol륻M[󧍊M*?@Vηo|?g?ٵEjlrmSel[޼ *kNT5,iX,%FzUm-oyXXyGj?p2qL.Yt~]'mqru|L@;_\="|]oDVy^2˧?Kzu}QqyY㿴 X1^ׯ릦^R/39S?|ֳ5^K?xqcǸL7K(C'ݡev[à5.Gx^-s6v7klKlg5#| zq`k^;mwGw5~ymO˻$gy~4G-ui|_׌Moz8&KkroS޻>)ʏ@=2u? }3ַƢeO!7-wK+yc\S֩O|;c|^8 {/Wmܱ2((˴Cm+ }k/H7j|~.76G8*^ǫȍY2FT`K);SԸ~-qS2KGwcrG{K^2\pnej\voy[~#H-^{?25/@N>-i~|e6.c.첝Kowۭ#cN6 ?erd8iv`n~w}j;.1^][XW_sc !c:9 8JX=z^6<.9y΢ټǸ'7#W8F#뒽=S/iUB*V%Q~JV{;am'V4W7n'?ɪtcQvm}7O񉝅OϬz/3s6u Qf0f?d3>[֝q~O~ǻ~%~g'>qx׻5]X>/||M5^I?c9񫲍k,C7ÅIDAT^Jf1>)* (?LԞy>ϔyW]v˸_׶r~ '=#|=s,  ir xGi^W{.]ؑ>/~9ӖK/K"acX_'Ko^aۦrUI._GMm(ͻ袋?I&elUz~mJvcGXC[*]{ۖHoZyE. +{Ur#g/zHφuy< UxrV7=J~=MgsuYm*{xVK 6gsFwm?67IO'< Ӣa8f[h^b9۾),bzT,d(t4LKr7tJYXY.=28gszKϗbU.pv`{eS/%l9Ӗfese~+=*wq՗P]Ƅ18}Tہ/rGzad'v}Ngn|WǦc;0wLoK;0u-'X|3xoMv`bYz*>O1ӫZZ8SځUv`eś4!}v`ƟM"=pM8L2Vom.*1q/W|~pOK:묳j{[(79IkSos[{5 ɾG @ @^p @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @R@˰4 @ @V@5QB @ @Kɾ.æ @ @ZɾD  @ @.$ J @ @h$Z% @ @2l*M @ @kM @ @RhIENDB`PyBDSF-1.10.1/doc/source/art_rms_alt.png000066400000000000000000007607501420247104600177220ustar00rootroot00000000000000PNG  IHDRk`/iCCPICC Profilexc``2ptqre``+) rwRR` ``\\yy | 2 U +'300%@q9@HR6. r!+ v.z H}:b'A2 vIj^ʢ#ǔTbϼĒZ@! A!ahii "q(v!( cd2f` G1G)I/15C}}sïPo pHYsgR IDATx.E7FbAAD@f15sXEau1Ÿ&ĄY1뚳b1Dw~%g03w;ySNJ(kh4 @C!h4ؠi4 @C!h4 @A9k!4 @C!h4 mTj4 @C!h4Yۀ;NwQGu'|5{׻=A9e:=a˖zիJ9&Kɿ?N8R?3.>Wvg?/2eco4 @C`!М F?t׹u_ծv׸F;vWҕ7R7ѽ o%a\1KJzL_uoywߘfG@6}n^~ݡ-yK^obQ;CȆFnguֆZӧ!h4 f9]'> _nM7t;m6v~G?-oyK1N{'^-oyNd!7a?qgޝs9ݹ瞻ʬ1 nҦ|++ه>CvirܼP~KX ̆@C!h4欭kD!>E/z]לiO{Z19m%]<֨ںнXwp>;MRC!h4 X68ӻ_?*WJ򗿼}K# m6eI'ԙN_Mn7~wկ}ݷ8%yS*.x v׽u]za/޻%.14>3–dZ5v+\ O~cXwiuW;}2eZﺭڪ3Rsݬ0յr)O~E-ܲխnsY}{>v zӛt.>G?QwgQL>5ۼs8c=z뭋luo~]Wvyi\]c#\׿ 1_:꺦E.un_F7Q 72 Q#m/G^.)SRk` l&x]_W?OEV;LYhT{Vvj!_ F0kWp0t_xBPd#O gc^pFGtL}(y.CP5e[UZ)*pp\щP:󶷽mtxC9ysRdĦ3sn{.:C==O s߃8kۏx#F?]hѡ2 gx^2 n^:7B pG'RF @C!hM#a@zӧQdO,>V,8}_'~׼f|]8;Ύ>F6.O}@xG0 'p,Hu{aK/'ϗpvg>5{YCg1 .R~#U{ÈjʬGX03s޷:lj%}keDh$K67|Eu/-rt6%^=[/mk_2XW`x߾lFG?4FJ (_tt|+oH,mɆ>֜k<^i#[UF}fD?-#~F?OtF @C!hQ֦*{ַNU6ң;Z4QsZ~Wd-!0,G1e/fdh36+ŧJޟ%Y#kF#VG>MH482<Q8xXF2ɑ{|験L<YvOq#kQLǒ#kyqሏbmm3JdP{8ȚQ.<=vl4 @C`"F*Z Ys6'ք:hynaDbZQ?ϭg{ vvGk2Q #YoJꯥ5S-\2]h#돌)e7Zb`|hh$̚*wkh^1u[6>/9V1{ӟ^03J\Gha뿖IΒuc(uKQO#h|&53/zDah֟4T} ypqvmh4 ܫ^RD!e:q|yFcnyH:6h!J}6H2Ҕ1S1%eJRW7w]7M)45>S!u2 {Ϊ5MôL8hoql.bMJ|ˏsƱTnk:k6ΔQgk%j+u;Y*Kh*kPr1+SS[_i?y`i\;VKPlcwaTJRowە{b_٘8C3Uo4 @C`cGR q7·ћ2M_ 1F5ZC4.|7#tz^;r2zfdo|cSҊ#b2ⶒdO뤸~믬o~vgtKYȉwӰIμI9ɂ5Ff0ןkS3񳮍_b]lv6 Gblb#?y+k ]Y3(qZ$ZNNvL,}: Mps.5 @C!6h#kTz}F&.T1SȈJia~ծ6/zj^xAC=lAFx>dDN]53Y LxF=?Js1y&Ik(?%[61biG:E|Q_UM}s%Po-c>Dqm|_= O(tma @C!hl̷F62lZ7ET3#ӡ0:K7.<6(QCSe8ٳ3M;jv9i}Gh]4 {kN٧Ii\i5?yJ^GrәmʑE=1|eG9=QuA";Nɴ֜.ۏk>CJp[˖cC!h4Y[D?ŐqoJnֶ6U|ma1bC$# ɉ]W2u*Gsrk2zhOz^6okKvSNvCdD.5aazyQ$3pffk}ToR_:[,siu|O]gasS>4_喭Σ7 @C! ЦAb])/FэohZ.un]M)zey`ǎ#k5< Uߒ1t;S]'>\6QXyq+(3:)y ]N.w7yYeSla^Ի<yL4g>mpN+FspS 3tq3t-oYo&|* ^M6ҭ˰{qmnSvn䘚I/#evM5C:1#FL)K;?u`:4}LC՞ J˨ָo-VZ@C!hl4gmz5P8c u>b蚲fq6J U:G OE1Ά? !y_O)ƚk"-Qވ3חr6##F F0Tq}LFEM1l ^Y,K^blӑg=|8ָȆ,{ ?L~yCi8ʃ85Oy@XC\Pľ3!|3nhgz5#5%v>y+nU0EN:֩bg8 Blj6l#ٴi7.Z$>` @C!X{lSnWD7Zל>[PNJc^3皧o%r)e#s] C4⌀j#g02 ծc)Z0΍aVS]й'N{SF]-!h4 m\N(Q{ '?@ѡu:Qx GTGLU|@C!h4 @y>lv|nc{ L}z^kheٺ*8ov_4ן·2Z4 @C!h4Yjix^(ظ:6k 6Z$kla3 @C!h4h `:lρk~0YWUot~4h4 @C!hl4gmC_C!h4 @C!pD}|Y @C!h4 @sV{Wŵ)OywfϷ9Sga_Oei 0ݽ[r W/|  Z_j߶}c[f44̌wb¹t?y[3ŊoJ=uQBjx#2hEرt>3 ,9-qC`CDwhvMFWUG~Ge+YQ(JffeQ|_u͖Obfx;r­ڬ^:#W΋i!-r0Hz׻vOzғ6DN^>3/ƨz|k_;/|C1xoߐʲ>t9hOz}dh7|O</^qWFykvo}[כ>-,[QC`4gm.2mЇ>t)+^;N;L[N宴@GtVkFn-hSL$lI9}^߷  G]3M;6 fk0CY^t[mUS;յO~=TNObZcvu1Mg?r-oY>\9sK|Lo.vu7jկoY~%E.?KveO/oFyg}.F/yK_s2:2pfқ?g>Sznzӛv1\^{W&wg7.ϋ[YcDa!1$covmYIPFOۥ/}S\; cQmN*i/~gpE6=أd.F괮GyL,q Q|].ڊ6M](Dw\|x=Ga@ 0s '˴y{}V:䓋ѧ|>YaO}|EǔCN:ojw0s-+_JȺ4A1}kӟ.w&gozn5ۂs#"?w ߳=fE?#1)N~wg?{wü?%s np^<.kk<=`CTWz?ker-g=ax{g!|yxx*_:>sXn5jm~vk_Ɔu;Ok]Zn6ȟpi3(ұm 5Ѿ1*zB e5aC׿~\:;m^$n Ńi.aVsZ\0ɏ(6X f-KWG>Eቇ#p.U5rԧ>u颣7#8d \NjcAZK=q:pҚ5k"sϹSxȏaŔxAv-C2~KE{f]>:edAM[ gy\Gؾ%/)ptō;;Opv^v=.y~b'nwۍI\F ΘFf"][n7My1BQ:kvo6FK5)%w;O=i#ƣm䥙i*iY Êbbоyq-oy˜/Y;G͆+9]G1RI{dq3W3s֢h#6}Abdpn 6iǰoˢxesYil1B9BEؼt֢p)^ŢQ#yzKʢL?eeQx&axsdk19_Njbi9ktj[6#,i'<  -nYcC`G F=9US3Fwr~oİ>rzHW1=?jbڴsCZĔt;K s=qG'Cr&/}ifQgMGJY=e%gL( f7&oYwTs{駳UgTRY3'wrѯo,AF(Y&͐AtT5qإNwLqww. Hr94YfԔmP:4kv1A;H{H&xgfp9)6Jq<`Kr̡v:/vd#j+!:SûA;^ yd[uLݻu8sl(OɚIk>ñ+u} 6Y\Z$m`-'#FMa蓍!,L)7Cp޼d,rEN_nڦ$(CĉT)#>Eoႍ.x+.p43NL|CqbJ.hNuf!;F@ܐ=%}w0?/^/>,DĈSy;y_}vؘi~B,t:`;EeGw:OjHrC3o'h[xt!^|a'ArMPq=s(I Q̋EMz'pXayF1CΤ I&)ԩN34gT;e%hO&,wsb>L.Mlҧ#%z\;gRy"z/|4Z2JP3Ꝉet"ELs(C}PY!f8o$]~PTUzUqPiLX;Tc"UԥRb EG YyrkʈS:СzO?^{1xi(M:hCqgZ~:Y-.gFbLIV/zc(:Uy2tzx3jpNӕPs$k!Imv(] kllg1]t(̗bpb:ٵs4T%5F\3nSw0cϟi+qH| u'S51=3ښ?qFt Ok|А>t%S|yT.:(ܱV{^n:1А-"|3;4<| [dKRN@ {ql'GXM^05*$g_'6W.\ϛ^Nd^5y,1FQ3JE3 c:\Pbo4Y<'Y!-֧Ǎ3h9WihMǽQ66Ǫsf|Xp2HS,y6ƌ@NSs0˔bӉIXMs9BTǏ;>3>vD,n: M#ޜ!cx\L_N}S$sR4ˡiMΜ|6dr!gCl3)rVLZb<);cdƚA`ἤ2|S09^'=c=1-7Ln^dK!S1u;ja6MTߘ:sD;e=k<^l&L^EMSm,lGoU[ ueZA z lJ9cSG1?8r:0vܨYw瞗gX3>i;m#5{?~gS2R-kG3kۈ'3f:VW#k=lBܡ^6,I'7zMW'A`kTZj>+3ݴukڱ|>9*0(f%t&[ ۵mNuQap=6w!hL5=޷ڮP8,G@ #x/5z˷/P~(\利%,zʀxx8{5); acl%Ca8xra0Gᰌb`.ȔAw:5<=saNRdL_ .rp/m_@]]9K=V#u>X66|N狜k﬉WInJ{("7h&I)q[' /xGlaSw)g_pfx-a0b |Nai#ax*ao}g-(kn Cr}=x6j%ﭼeS7eAø.D;c[@{O#y]t_|X#AsGژPH0-iucgF'Lq80ZapEq/y/qdgkN![f邏]-kz\}_Oi78ٚ-/.ùň(.>m6Lf{̕Ox(:D{?v؄zB@/:ߤS'}4EaJ/6lz)UghL=JW3g.z]S?M?5=!t 9GHqU&>S/#0i[ڰ:1kekwk*{yi唌z*Փz e]lSuiK3 W:ʳe'>z^ MvX;t.?uz}M U5t`VSHt^xuH/:wt<}_kz^N٬N|ʼk |eKu\}YjV73;{ѴgS,zWݤZY<۞Zi⺜%OֈNmM A>Aϩqgx5^zN?ҫIpu}fm8❯f̷o%C=]Mz_m(ìu z IϘfPv-5fS$k iY_f֌OXkt]Ш!> k%4Y(έulh#kc87@,7HֆM6hהLk䨙֨!h4? %֬l؆ :L%kXuQۀC6 'Z6,aGf];qz+7$k[ؐtl4 Agf;!?R~4h4QtxQla"М ^V @C!h4 m破7 @C!h4 F9k]-@C!h4 @C!0@s@iA @C!h4 @C`hj@˿!h4 @C!h g͖g\:kA @C!!!e6^.{7}QC!hln}nwۊ(w_-آ}vBe-Gsǃ0M4G>-w0FguV;v'p0C ne֎7>|3a44F1~8oxel#k7 c9;#[Vˀbm'}3Q> FtAmfh<1]sQwy<8&7I۟^ګ8w\sF&uݨӣh< dL(ldžf JQ[R6 @C!h4 @C`4gm൤ @C!h4 @C`hJ!6 @C!h4 e &5 /x .BP`t%lMn6tc޺ms>uUtﴶd4v -kMo tVc O~rww'x"ro4 #}{_ukM|7_!hn4O=_ڊ ӄ6 @C!h4 UD9k~˺!h4 @C!hC9ki @C!h4 @C`h*߲n4 @C!h4h8dZxC!h4 @C!XE෬ @C!h4 86h4 @C!h4V欭"-@C!h4 @C!0欍C7 @C!h4 UD`U̻eؠޝu{nѨ.ݥآ&lP6e @C!h4>Y[uJ8 GgэId8g[vZ8mi]imgX @C!h4欭;,>;7٦/XJS3Eܟqfq|Yݩ9Կ6n]u֞ǣ9yp^[#xL-xch4 @C!J5k|vBpZжԴyB'T3Q:ʦQYVA+GC!h4Y*(5Z(5_+(f1sU8xch@C!h4 uvi;h;+V]rst| e=PX=lЫ^MozS}cNw. KF"$FSm.rF8j=é`=|WCbGL=15SD <5*/-g>g?YYLy7W죏>{S2/,/>nr<ӻg=YG>v+a53M1%G.^ZyFiA(u29}>ԋiKeÙ;5#zsn8_3Cq}ymiӈ9rRL!Εky*kkY>d]ez"| |n`p,7s.3"~8i\G"Z]vN#=/ ǜ/ $=qG:Y# y}fV[mUxK'z)yuyFdgi@FoVzkSγ@O!8$N(JCN%/y yaurJ;,Z}K]:xW;Upks /DYfޙ1<Jb>˹ӆ^;-.&뒝q]vq,?ϻؽ73zY6aXnwD IDATT׺ֵgA[-r2%*͹ch^x.H\tr~3k-wک*֦vVȂQ::jy/ _ȓ6< z8 8ً Oe=c]^83tMC՝M lɗ[e]]{M^$}b<3giW;N}?׬>ꨣ:#/y\*O CTq3|q:-V^_xYyHSr q?'3.Qϐ,ʕ<)qo1<χS,$Ҍ;OySб_GܸZYx4'2OcR\_CaҎ [NھqYSo+\ y>u c0 NK_]iЩc:ky=td*kbHv> C&qΊ#\^.8Y K@=H:Pچ5Qqepmk36vgK92z䍅/|mOֹ.kFwCiC#r٩iO_guዥvj+񧎐#=y Ǘ:~9S#y$>wk3M^K;t^ed2'><ϸ c;&Y?yXij]su\}]KS_;z'Nיwa3.e9fu~Y #Ox7kv1K]gΚ5i]}+Z!n}[wŊַշ?q1%S' CI| ;G%5l:fcsAF2g1`)4hFvo:99_K-_>--/*g͏<;龜Ŵo⏢nrk_cL-:;pLt lzlb1!xum Ù{enH0պE>㻟Ee.sRFm_8(cʝ;( tI' Vsme0 ӧŽu?S}>Ιv:6=}-M/N N:E}.$}L ='ʻw\#vfplʍJG 96۷4'A͐a< jAʝG笻l9zito-1{N8F.-a&oi/:*==@7$-80β`w^u]}S67aiڮkx+ʚ==YC K3ao3CϭF @C!:ԝ4f -rgX{׻ŊekCX}G⽼}(_nu<#}4Gg4  猼 gG?P(w 1:*_wCV =+{)[U! c{Z80hTqQktcbkd/~cxle<]ͺ ٻPOb o6] z+x!уc$k9DIuyΉ5v_}!vrEqVǁc ne^Etׇ?8k\)(653jNb90Ir`L0L@ݫꜣ.{#>-.-i-׽]7 A`YwYwfc,4IWgz1u{gw6A>$ڧt: Zf3)! /OX\H`Ҥ/NzD$+њ2@^u-u$+|]CwF*ږ F"c%mé3ح ~iӵ.u"7u{rsX]9+KSBuX"ǺޜOxo#}ȸZ};3yzhtT) _*+F>nJ'?L Mg-8]EHއ|a:*Cr$ʣncէ06/F6 FMGMbm19(KQ{뜂_r=@PrTZ5V?Z%{Myl"i{-yڱ!h4,YcxN_#F@ cy{^IrH2Ry~Ivb;fe\J p/:L46./Y 7Z 3 F׌-g~نA#o:TtT蕆~z%dXku?kߊòy?H8b LGlS& XOI\Lɡ>{֓7/_Gv1&)QA~ѣ_d3 b}ۑы.GN$ё3ꧬeۣp$\ԛq F,CG~%}kDIms=ӡJĚnJu'TF\9/IWN '':E88M"XHm"l}^r}_ꐸ'[x{#.u4œ3ed9j i4*j꣑ĵ[#5Yvax"MmZĨu>ޖg}k@C!h !dg1 -b͙_M;slBV"H11^6f;W0ͶF^:60s} g"~ڡkQň$Kc`lƳ4>rqpF_TI%uEC:Փ/:9ʓ4}&rdz2?a5Cʇv$Ϗсta iI+pL#Yru>{75-CC-+3,E96T=.{'1g.P1xl-5YxTD.!p|f5ìv$ڱ!h4 XfM嵐4Fji s1e]oxuIhv6`y9=1:?A΀bdL#FÅq! Y~/#P! gj}) bAƉ +r/1:''3<$tiq+L9^ a5S~y OdRڌ'Cxm9gHᰒeX?.tنn|F;tTNkD97 Va\>=F}_ΤZtD\W[Qix3TiXOO:+sW O).|mqb}*zc ^:NjǘƵU2wg<{nIw2oe!n#(>IP˃1=ezH%6d‹n5)+GMJG>fj} N"9:~sO9l(zem^W덃>"?8gt%q4GN6QOͰ}DƆJ;ky,yVUD=n`~{ӞN`Jbd] WC!hKvLT7ͱ8!cHYR;i 0Ҝ13N'^|f1%zh !9x`w.#TzqIb#~qӈz2|`n)/cVc#\~); N06F,"AzItgŇ!^8h0Nms|l?OίbT68%3q|'=Ř7za9Tl N%nmOXqmg=#8u[#" e?hOuZCo~J8͗uhԯb]{F?} O=Kݦ0 硸tX8$z~tcuq(Y]|xd= KҎ>PtӮ-]&}:1|`* D&JUjt4!yXSI/,AP峥0l~gBYIlh4 dgm14om0i q3z?$ c|i$SiG 5<^^ GF4b2<:#z)!LH<DŽqCƝ42]?q#A6ȇ ̻GG!Ri ǀG%P \}C͇cb1`b﫝#Fې:#=-,L\kO9B'xmL$N0+O|~ #=&\nz!tgErH/e:+c:g(S#O|;vj|^gDOA*=Ȗ4:#Jp'sR=&KX!G~5 ݖ3 ^S&GV~Óe6FY_٦5uRԇNQd>Ǐ̟tg~h4 |֜a,8K4Zz9_z+9@6D ObCzMq|S𛤳f"F|5}mt1)AE8n7uSx8?0xkS2"Ý3`,ӟ[:9ַQӷ8S>!ɇ$u3>WN),xIdk+_8j~7A7c=.='.?iŔI:6H=# [0(Cu΍rc%1Y& 6lNMtml[ nw a,F~IrlsDl"،zXmDep"wcGM:yuctڽVQPۖN ^څv ??´Wё!K>qmX),[a-KJGΩ:3D ɇdIߚX'Tku裌qjpSO>zO"2X2aR:7 @C!5ﬥ;gH1 /  G(F;tь 1҅u@c1ӖՑz^囆1 TOkεq֔nt r4/qL(]8ȥ_>׌78Șd-E4HRIDFq95};Q?};5tR=1~f0~Q;%b*+v 4P01#uK7XCLҨ'z u2Q d,sc)ʇ< G^ر*ņ>#^(ۄDtde^:M W/q0_sTS!mMO|IW?4N_YVrP}f&v˟Ȝ^c3I3/e!ޓvgzwMvGJ]\g~U{8ecC!h4D`M8k q5/#1Ȉ/]3(bt3^c鬉gq9Ê]Zy: A|)Wz4K90Fk4b1FQuLtB31|A:8c#` s>U^zLӓ{F~t[ooc=0Pg=A6Q<)R0)tk83ܝ+7nʔمvGW:uLS'9VvFqq,eHڇvۜ$QFG:OƑ3Tt>S1 H-GEVʪH{R/Ҥ骬'rtƣLN:p%FN0yJP2ԕe*wl;=&"&I>gz>f{<` K&^"QǗ,o8M< N9jlC/jڱ{|mH8\ȦGbs&*ݗ,8%mY>yoK#r<)̏,Ay#GA9 ˚Iӕ}!3ۊ<sv<9zq !=d5 nuį%y<z/ɶ"^L(lS>#y+).y<9&&d$e Cs|?<ԡƺOMo6\SQ_Q:NSϓ\eO>y9J:2Ma<>O>aw|yL}g\g~X-NZVaY[l^~ÿ&5`327 HncOy`l&3:ɋeOײPc >ҍQ2wt|d2*8d=H @zȏgHHrȯƥ9|a<~##51(7V"ݬ::$>Cȼ9_8G'yKw>yQ퐗2Xϸ~eSV|Ay҉.#8#eVKdбWI?=C纾 oYIE:[^VFY>~6~eCĴ+o@ta+2֡Ӯ @C!p?b1Ҭɣ%I& L= d3n85̌/MUiX%Zg*Q,zЏ|g1q⬚&?|!;Jc-d2D啎xYV8ӝ,b*k?CGr;P.U9ڹC9wGx2Α i)εSοm>tO:'ї^5SlXS]}YTN<􀻸lk)'uq!>[ǩP4*'~rmB4eYU/ĥQwC=L7&:A9O7BZSƤl?9m&&uq _eY2 YFgk׻T,UMu\|}g]g)N2긺v|Ǹ<2<)>#3u?.)?1JtӦN7),sqֽη>OLgEnͳn-Zz= ˓.نS&}Zg _e[8e90+yP[ =孞Rxz㜙NK^zM`"PFͺs!~qSy׼L+YΥO>&mŏ2._b2:^,p{ex/0./eu_l_c5OGnø:M\:]:?zd\-+j]j<|+q1藡.s,m:N|bH6G˺rG^t 31QF1?+Fm(یzMR:.ű·Gx#;ay㤫YdJoE)s(&e#R^^1cgu}oWbQ#u9OȨe8zxַ7rϒY_po< 7jެi0D|H›gGFRVҩ(23gIF5Nʠ癬,|&b@1^O'$21đ)_V1st2lT?`O#֩r&yLʃ?r8:$"7{H,躯[͑%y;usL9xKB裏.SLQÊlC5_|I>ҥⅩ;'|zHO~u ru? #!a/>3Ӿ S<:N%I)ʠ]kyR59N\]aY,4ڨ{sDeP\vwNv~OiV8׵' H雳ޤ|.xkOo_?720ye\xO:Jr2LZx+ݐ"/u~x]6qye 딇o߬O:dx-GⓧKIq5Wc]8'杔O?,p8l'EyT"ɣ8&->½NpiVyqk }YG>yC^IpH8%; ԋ211oGJ:NZ-,0峾Qi3%MY<Ro5/5sR^ƑWe^}:MxǔW- _z "dMyO7;.IQٚZHO6} c`1^GPFbs({F?1& V6{XG뢰5N>W;O?d 86%774oĞC;ū!q&s|"H`7`:7o!aBqYDa!$!?;92;c69X:pE~4ϯ=?#{[^`7-6k"9s#rtEȲSm.6{e#KB.jۅ~.~Y1qXZM_9)>g|y+gk3$xRh!| )BImQ Jqg ~{;}[>DGaK<B'>Kθ2r5*UNqS0"y*Ҷ&S~2iO?-W eHQOp٫{qOlfM:G]bW\物Y{ pqދ*l!|Xӯ~êw`>=]t]]rqŧ}I4| F6^wɭ{?Oٟ:L i_G|ԞMO:,|^syOnɉd>Ϙݬ=pMNܧeHI_$e-qڟݔgMl״>~xJ7zSst)OgaL!2uD9ߑ1gI+u.~dlӝΔFve_ϫXNMgטw^ӯ98*omms5੢'e uxRd+ϗ(B)μQG!7S &x˘ÚBg={܄e5_|s[&WU&kRySrUwI_~`S|+^F9,,7%#z[ 4G qyƹr)M*{c1`_r.~y9ȇ?t'GF_>qz˰_-c䴒q[-uDøʖ1W\߽>xض?91[p> #'a>XW\ra_Mbvy6Y9ͬ6E ۱?X_yK5qT>:^>*;SsSUU}rџȺco;Xʛ ߚ&~lGo˾~Ʉ\U? ?s_u3W^fntk?W#k?'nj,GZLɂdf> CM^ZBǛ9)WQxj9ll)㣩=fkIqjm(E _Ǜ`P%O qŤV Ѽ`Sh!〧Y7;Է7}/)x"od0Wlʉ´~!D BtK<찝G-~XfSպA]b1ܸK Wxou~ȅ'ȡV0eT}b' :E'p(Ǧ{gW{{N֖쐏m gc/OʔNE6>=qjq_qe/dODx?7ϓ` ŧ`L"'Đ}6vY^bO{!X\5>yJʾC'zÔ}ˎKL+[,SN9eU4 Oo,ãbg8}i}~Qفs0g,9G|[uज़^Wk]lwl@샬9Fg*GwN;Lm_OD6c1*ۘKYD_NԘYo\q1P]j/iC~\ѩ~k>>dK{N[~_Z^F,Z[/[-}m|uqw9ybN1/ݛC R)6YE"P˹؍퇅J}\'<-簑(/(R<9Ȥ6ka.Os%&E xL1J>X=|_ɲKő3<+k' ҳY{z+dכ+r+-Y~scGT rd=֛Ar.V><?)ƍbcoya5G}WH?y os'{S`d!*S-V0=߷ IDAT| *;ւmq[sXXw}9߈ȷ}9dO|*ȼ?-pIC].kfoYؔKמ'd Yysȷa$"}YgvtGN)^>ك=s dXS "Ӝ^/WUgf=뱅_1ENrLD|v[z:^s_m'LjLNd{WǽN _הOj/L]*urDn׷{msqW Ua\M*{٩cwLU?Y׮:ݥaM%̥hP0;@(Hl śyżJH+4i"Oxۘ4WQm+&F0.s0Ifo{xM>Ǖ".د&L91xll,ll,g(pY7| %#wl+yXBd\6Ϟ8G=d+=}yЇQ>N&{Ѽ^6gsTn?/DZ ^$Oy?]:gf|H?XMXa-y#oށF߁ȅx,$&~٧#;֯R_o}+rUyS^6 ئpobOtwa;pV_k]Pxrcry/zuN׹I[{~o^%qMc36Ԝ9~q5.}殏qN/qSWLƽM)DU^xTN;C\Qf1<.2),R(&i <ŐBQ! LEB߰0Œ/!]2^L]tC)"߷C '  2ya#b~H +E';#d~#[_"߼l%fCQY#fߔ؂*寮b ~$1I"v̳I_K>>  !Ӻ'Fi~a>ӯ9yp;̋7s8s/%._s|o" 2g8Py§\= _l\tҺďO\}{r+rвG~d?bGnuo6J s>8":9_],YVʟ5`oaȭW~ghnxvXޥ)=)#w1qX|R(mDW) Rx0OG'Ep܆" )pvRf* !y2yB]GIz%>]Qe谉W%S(W~߇%C[KtXS{Bb fQҳWkWYᦊbոU_^`b1qXp V8 )TRWDX(Wt)xG}Z!x(2(9V\Z7F jr9ë$5pT 7 c#[karXsQzYx#&VM56]!6Xr/ O>yUHSl(rYG̹7˺'`:#68|Gzڣ$F!KU],il8CN첓?]O=.@֜->WXH뵉ug.sl%f]ͱ5vѓ#W^[=K#v??> }]9Y^6O&㴱[ǵc܋ͪFF7#mn4}{llGQ/^Kx?~v _dj.D.>tj^"v\dw[{ΥM٬݅1uXQؤ(Rt C^&xYlkU@)RVF\ c̑Ap׮FpO#9yA*<3؊~O6W0[/5?xֹu ׏lh`W2̹ģ5g=/З 4<9E>>9lV[B"˗{y3ώ婞{HN>{ze-dotz3`%e>J.2XWm°F_mfËlxW؈z}<O\te2_er+կ9^Xu[y\S{)Wm-W{WdO\Ƒ8l㣷ܜ\wa&;/Rd)("œE(*>6]IéU!% ?򑏌E7^H/NaO7E՛:_A8)<=zyc03:ܻ֞ C|\p Kg*E8˵\H.ܰe+6m%k_>7 `4'CaX\\d.kǞ~sG;:z|(飴`G?٥oˁ ^9}?pv:Cm9sld"+t٘&6e5Ĥ艡G3k(Al`o5v_37gǟ\xiWStgg grWQd#d?"̧*7}W-Ս|ҟ;ŧgJbRyt*ݟ(53Onѫ~e#6q+ռg>m:\ ¯-*~_9vy!g\GF meTnkГZH#o}Q`)D%dRtWH+Y;66lb%-|ǦbP ؎ E<=NtޤEV`磧ͼ FÖ84}|é(e᱕y([Y;q-y^ NyIn>Ɉ&;||&s˞#<7ɼÚC&Z>lNH~lM [r42/!.X&V1#Tg͍g?#[]I'׺woڌVH\{27ůr ^W`BbDY/|k ny[GĞ=<19{8{Nc{ ϕ}uaϵOGGέ[QW:sۋ9s:Npe9KDSqyMiܒ~똭~62b~ ^^ڈޜlWKcc9[+߅U6*Wyֵ(|L$J!`W(D$.Pl7"O')`O >0>^Z>٣LF&W9(|/q)Ȥ$sX# ˼B17WrG'@?kɷ>ObO΂ ^Ǝܐ'^xDk9 Y5ذ_ad><^!Ys|jO2U߸'bg蛗O/srT_A/H;*\\%ckO CKp$.up/1kϏgU;:ۅؚ򙹴dx6EKߜ^q^W^i5 Lbv'E"ӓZt9ީP{[Qo~׻?X?o?pˑB}DY8\_#'D=.֊L/.sZݞ0Ÿ˘~?/k[ޮmzCyg&^Hy+ pX+o>.`|g1Շ]yv9Oc%FF 6c>҆^oz;0wXx~A\?\s^ 5{KM|ǫk\\]:7շoPwSr؄b]EG7d)f ֪W?Lꛯ2u`)^׏䥟7f'r8(f ~X Ȇwe~^__+ "(@)vv icRp(|`|Bܡ po5Nn _=E-]H<>wMn2Am}Xp9 R$E.Mn]{g>1&q'd`6G |\'g8:;o˜㭫'p($-T͟XWlE]z&a4~5 Nm>$A65EŽ| 8{.88lYN?sϽd6V N9 f-l/YGYWk!}"~XCԓÚgÞs֟ 6E׼K~˺u|[~ᴻmi hدZvMѿ5lmfھ8]lwJo>Y_YuZ˽*/}m|]e|pO c\3v-|^\V v(awP!E9}Ŧ ybh]R8Ә?gK_LCrM^ntȕ}C#VxfW:9`/xխ GG|zrko|>zE__;>c=iKd\({eGyd_FkD6F|l#ɮ}+Qkc?Wr@5Z/8+dC kּR]9b}w4u_> {21k%26ݫ{m?qX6Q&kQd 0m.hU+]br;^:.lx0z5GھGv=7Rݗu|{g8ijl^&&w\;߶>j'үQd2o;ixѭrxZdVc{6>n9mp:WY}r.S2r;jcj۫W=TsaMUl( l(xZiSp6%Dmŭ"Q1R`+L|)Fap1>ߊcŵm2I%f_u.>(. CCKt(q϶8M_lraNLld-2Qӕ\.ZDM\U뢣O٧',+/rB|O<0#_P#w|zj]|`% g2]#9ѳ/'D(>ѳ&~} Q-|#!3xٱĝy鮲{ {Fbκ׃4S]?}vۥ϶>[ysonORvs}W7_ nÿ;/4n{۵۽v֡uDs˶߮k>=X*ٛ N3f]9z1 dלS>xɉM y۝5z[8{bnc^(?\pL>bW\HcŁ@u={R$_@:Qr;x}k'?8Mk|owaUۓQ9C#4O:}^nq\'>:]Ճ_ti}mzќ9ׯWG-9_Uo1֜]aJ|-fٖz{/ʯٜ3'{Ke~phZqg>9s,Gd?^vj\ek?'-^x~{qtxX'Ү;w`Pl(w sBG A9 HN| 19/b Lo'V/Zx  %, W &ۺkwIeXm'b06o"XБњuaxMNzybpDOPhY_ңgUpKTZK=zHK=vk`aMB_IWbvL,(jLY\tNHY3q_2хۺ>Śmǚ!snI'4|yK( 9?.?~yɗ>;Er4u_^aw%r<ʙ<n/$o~뇗'[m;s.[ば{ _8z~YVӷ5|dG?]L/_خ}Zbʺn[uVs IDAT_گu Uv\u(]ϵ.`Mwb)kjn^oc1ʼ+o>cU{s:n浡5̧*\?6#3&mׯMLc&A h)X!qY Eq t"< k<۫(&l' c2)|f⌞!v flv:p)~?nF.j/|D>:FPSL!O)CI⧯oNd[l]r{L~K<|G`I1>|9Lx`gC;ŷl..9Dr0/un?re>,8L..|S >Ct\[74OZ>꟯sK'12/7Zp0/We+^BL[#!YW\rG?A-m=<}fkyyӇ/| ^0|}%b/:!}b;da.m>vƻZ[Ч. ˹5F7'~?h`v:ry8sx$ﯼ>]Ή9*?K96Ck ˦uK7 }0B+Yqt.VHL%dy;<'1OGk-ɇ<#ܰ]ϸ rEKt3cC~j[MޮV^oSjPmsUoZ/9d*[jnO{0r ˺{dag~I[L؏A_X*<k,i#Gfث8jmtڎ1qXK0ZIS((> SŤE!SENAR+>]B(@fmz6+ž<"1[..m $ ;[}e'#DNRɡ!<2SO> #'b1ئlV0(Gk%U݁irN)Ry{39I Vַu)H/O9 #Y3v<#|g-ubOQͿٗ؁!uhS\։'8s˃urxbrlL .li]̜|31`cmW<Փc1fņ6|g}ķ \H~;⵷N$dߓ+k ;zoQxp6m|S_wrOʧ}svWwPopQ?X# -o{mۿn7~/=Y۾M7jxsi0\v!_&m{X?}غYe,Tq{E['2]`Ms϶uk;}XY:2o,N l"čf y"~r]W!6%ɈA\x]6ck$olwK|).~]yqOYwyE?f7>ؾ~A(~=>?'Z>)Or|p`xv ׽nxӞ6]{ 0xZ{.̷e\):Mwp^rY޹}SߵXOnvuOV++5#'cqO'#)6XנK&Um|LlFt(SPd=۶Ii+-}ɻRx[yӵ #d~|?:)Z$1baM5ֲ 9/˷+w{,wA{kciNGVt\\>$p#cZShuJ~Bz{>2)({SANs_o_/O𸲖UuEOeY{DaN`L #ůKBdž+ϾNv`?k5w}} /yShmo}5ߞJlmپl䇞'g_ ?lx`v>7s}ˆ׷o#yAѵa?4^W>uv{4|U;Mo}q 8ܰmStՖ_CV]3r~ݏ&gO0.ZpO/suX'WNW~OlsU~.jۏԜ8ѩU9,.Μ9r뗖d%>2g>Z_5G&.%S}Tݹ~خzOֹ~sJfcⰖD)RXTP |! /O0, -SJ6EohW V `x^@dU<ԾO+fa=pEp3By*A7ɆP6[6p! +Y6]Q7OruMo} {@k:(B=}Kxgį5~Þہ?o?'RMwC2Wh6~ww|׾v8}﫷\6>ٮ˵qlMY` *˪u|zd3ndmZib0I1 E3+J оu ,x REX`pJAHm6dlՖ񱋴Kl(ܐS$&&۸Ɖ3v@ۺRGo %8s;0CB[A `]z⭇zqI^?8ص?L^L?v79S .ɉT6qr$wAM>xĕ5_>=C#du G7r`B0[tŗQt~.kaI.F |Np9p`kϺ^+lZ>I->vz>;ઍcor/:|ֹ`rrOe̟Km9)69cƥss}1g*nsK/D>mk?6\3r:Ll*շtL7G{KGU掔:9)+ ?H#k7}P_ dVŖV)HEx8ć^-F\R#P6L[{kiÌXZC w9v]) c[?WZξɻWY>O{?5xo.?s\l]ۯ?Tq׷_l`ᇬ@;џ&|.0׸&=6>"GG=_U?Vr/WtٳZ$6q&x쑡Kf'_pؿe_-]ǵ<'~IO?:}1ہɗvOn߾bmdv?OО=_ omI)/y}{+kAޭzypd*]姒ϲ)|k՚-8[ۧ $73ow.ݍ}+XMeR>wGD]TRz+OS!z ABFxBȘT? 0ZO/#|R)vQuE'ϟSn8Ĉo|kM戯%v֍!2\ _m%2ĕ9>]9İ7zJ"g" b ^I~䭫X]lٯaonq[9uPV?{4_c!'zɡ0UŕY./紷ɱy;+6QrȌǹ` el>_xw|˞˽ ۮa!6}gOKs={|'kk{v;tHgOjNïWlߵk{Ҿ8]WmUkjKAwk<>~]5</^#k~*y\-?Wj۾޷M-{7iut..N}0ߏ3g/mJm֊_^3ū?bW /rݔ}"mdm3MôtW7K`ǜΔf.1qo3%mpiӏ^xiW6L}} 7\ۙ 8%ۤ\-BO+,1*Ȫ )*gOQ͚ [EO.FEbW /8{Wmg=otMQR&|5cX +fM[slk{>lRB<>`M<9L(a1MNޒWƞz;1#2KZ'ybÆ؇QLbK:e#k\dͳ&JYrUؕ)_C0 p\Wׂ)Jddo=y; :\\e0*kF,y {[c{B+cʍawp@_vXQ{:9Ag/_v[CS;<}_ϯ+u\2Kح\Oѫ闆ϴ5$ c׾Õ-36CslsXr5[*_ؾp D7"ܧ3P_71U4CWO]~?KO+ӟ[jsJ5 $5q\t쁺Ocgވ̺ )ojm*/uJÀ, t u6v1h ֏"ܕ"R9(i+,'v|<-0/_t)r[M)P䱙dQjg?`Tؒ+n`M[8sHpSh;׽CHs@#Rr1Oά_r:el0mrh 8Eg>a+gk؞IkOؔ]vgCA߾PyiX5Nuo/:0y;oAZ ϭ]ňƻ+7_T{>|eB g`? \&kY)P0ҵ7iXB 1Eb,<)+zrB^Q)' <ŽÉ]O)@Ct94}x'~Eص^xað)wV,fռ-~-p:0-VP֋\lZ3]wYWXkQ~pކsoißOƻϪ_^ϫާC쵬Խ :x|xU>:xB~pVk+U"[t27̥:~kf:M?Ɔ׆%$SvS2x:W1/sum| 6ޯ ^.vc;y[e3e#B}~3 g`Y.3CAx$;B ^+e*Ŗ4Ř)"K1xT|{0UG>|-&(CW5d"%`Ma&<8;z srPUX˥"VR~cr ^X+ܕ:er~pPqqO^'C>tGk~x_tP}YcRu/˹|&GSUy0| {-Ä|ˣusб$.C9E=L6Gqvv~~kGOOh߸m=%.ķo-Jэ۷G>c-mo\y[>U3~2N?*~_"ө~pܗ).|טWA"7%^ Nfݩ\~~Μ ^&iW|T_5WOW?';~sMY?k 77kmOY_GޯGVxn/35G!+Y(I~|3fRm*W4*ƪq6W5㪟*UsO;i3Zyw~䫍覍)*YꞜyw9L\A8Q4lSm)? R-ح:+l'&OsT QĐOU}ER(rſ|IZ;0g /lv|0!ede}J3o~rd.q+0`\"@ہ==/6u g^˞.r`,KB콓O>ybO<"'צ$d޷M_\ÊX`_ⶏ s;9ʱHآ6;~Krrx__(S?b'>qj?| ~jO?><}'W' Oc?6~wopg?rؽ K^)/濻S㗃藚϶8}iȇaa#)_6bcmQ'|n6>ft3`=Bַs(-^=W{tj?*^>j^^ejly";;#Wۊi?7YLֺGg_w* /G1د\vFׯqtڧW>5Weܔ,U;s2''=8mĘ6E6um]'^p)\5/ E/pS.eB)* SiPˉS+?w Q@g*bgU*f]d6bO?/ntOx.l-yI,V窾2_ys}qE^+v:[kBWtfϞL#`:k|K#`_>ܧU)J;&/'O=f]X#[!U2ξ3Go}kᩚ?԰}}qȃ?I' О0iGD{Y{-tW|kMu?F7j5#~'Gm 4Emυ->nm6譿u[g dk$m6/{g`lFrvJGsb8.'k."XOA{_V)RHzRo[P7!7!yڔl~"b/u;ERг%F$ByX#xc[ķZa52FB%î\?.3S~?z9u–C ~"\vUK`i6~ }1D-;,yflO=Y?{w)9r+}뛿{׶wv^xp;g?QwO{>uk{v`{i{[VQ93 ȍ'xr{?۞]=%{Pi7ڞsku; ǵX϶^h%'nth2dz YPtu6s}[e3<:{cG?b7|c][ZMQU\惡37 ;e/J?nFژꇧe/zi&sޜN]K:s8j͜g3sc^8_l*s8IW) DٿluLؤ^#7RMn2/ŝˊlNxHSuLm#:TG}6]Zz%(aINفU|Ma*//.όVkOik"{Ί=·Ǭ6:˛=jjw/Аuslw󝇛Y%a-o!%p&.zOm=)GխFMn}U7Yj̇?|4$/jo|?釴]>KۓkxNC\ZySOxvtPְݼ}n9|Sr|{?ם+7ӝw){\'GP?/ /j_2tK {?LK_:mny 'Omɳ_ٟNۆϩnWhkq[b;轭w>QAڟ?J2`Tun duuJ``>lG2mb<Z UImU@*RsӥG!Z{-&o ?xV+he)EQ)Hw)šb=*"lbG05[`dW]#ӷlɌU &$#`QNA0&?y:.%C>!{A䂃\\2o%~SlɃ=9G֛M_Jwvrwȑ-9N\|7_+ 铓Sxs _p˯{O8ac>{lij_q~{'ȗ_x}خksH_gsh4:3{+5mnמZ>jjv[(^>ŶƟn1ӡπMqT]`aM]> ^ԾB ^W/lnծޢЇ>txp/+^~/vۤbHTemdƨ ]Pn\KɧNAh9qfl4XO?_Qʏ+Š/׵U*l{{̓x#9U-6G/{?z!PQmB%] 7mmӫ%_llspu &T?( C@"E "0ҫAQj)AhK} UJ?? 3}w7c֚k5>s}> y'rG>mhl&} #CWM@(Rѓg roo~I.9fc9doC׿؆f\?:[[6yhǧIN:cO,5!!^Ƀ޴F@W b&'ɤ#9/Z|3g@W飵FꩊdIK&;+vr˼u!_.zыN3tYt.$7f+68̝=[vl6sW.:q#36N75c<!NA>{>Xou8Wzڦo$Gԟ&o~)6fXO\Zv[\͆m '/ylkdg<3>S-݁QGt8]F7@]|Z&ӯ2#nХE'oNf=6pGoGG\uoˑuxr=Am֏mZGp \y͈ܸ6Hg_ocЄӚ ߨVxCu&onۛ5m70_'fUzmIOzIf6k#竔m+_i)p,+GhXQ iEEobyc)I~ UQmayB,6fmRFl!CQ.|VϾ7 F@ irϮu:)6Zĝ_YOO.=.8ԃxQX^<.q}8rMև=CǶΘ.z[Ňb E16@ :ْ;̳}q΍Ȉ:cbL^:d o8=gSްyW}Ey;9=AnY/AO65s绍#؋Zۨ//̡1OY2ȤzVp}݇ɠZ W=)kEm6`P \x::6uƑ7ױϟ_-4}nh/hvu7mp}60>wCu?Nozo iSuto铡皣q<\751i#;Bykج -^qpl .2 #z"8fm m`x\3mBZbC&֧\a bB(^BIߛ"B PȰyF|m$)ȶV9(+LV+يG@4t'%!E lNb7@Z} ;vlF&ۄ~9B6yJZE82[|b^+ا쳶6j,G8.)~OA~+'lhm;؉C10&'D</P܋26IFz47qbw17gGtE?GkbsW<6J}g!ݩ8*m(kZm3n]3) x dZC$v9.~h%E0'6t;w]@r/F'ɦ˹|&5ɹ_Ⓩi{͚ np3\7:-Ys\[˳ONE\@uwرJ>{ص./:o~? o]8a |?uene9i']pCM<ƼJ%ޡ՞~Y IDAT]b:7垑z(6Z?l ̳7WCç ]#]\Gx$&Ɲ.xz]..57>LNhF2]oj7Ө/#~'߯v@;OxOyk.?i6H7N;md+٨ CqP\):,ROŏP {3VxOpA#D>d# -ŜNŸ=dBgL_h3 7GiשȊ=ptwDn ^.M?r(b 6xJ&ILbZItH腇C?9԰MϧZe^*r?WN8$`ė޳g/z~ZVqG.]1- lz:@ ։|`y}s}!/_ ~k>{p'r7h6!-g|.I."97k5n|9bhqMtL1,c~ыozӛ[GF Uޓ(w:}hm 8+غF~Dgl dO]do*]_gQ*y#2?g_p_67g/rzN&Ȅ-Gƾs:dƹc5//M\'y o |b+$R9E?U(B,]7Y}E$t>v$ܧ]> S!GlXexs'6Kdo);;?82#?z7><~tȀFle KqgOIn >@A$>sA^\/|"xs<ڨw'| /6je--[Xd?/_\ }g;/̐%6pzM2=K+?-_8Ř.9.۩4N8y稜_\r\b%όC΃\kē d|hrg1419Fj+|5{Uh88*vu+XJpO}xU"6V;k3#}.vt}~M5as1K=:x>˵cYC~Ն.kY]mg.Ofg/ӻN/dfM3i;1p#lb_x:*[EM~wCM}L*>x+SM⠃7$ЊNy2:֧>dNQUPX,>).(ȧÁ\j'xٙbTd}L-d3/쥟`>ڬ |k8v,yt}bz jSw<[[CwSX?e]O>l=Un@M'E|ЇV{0[wk*?|OC/v.qcB(|`;bK^IO**~:w>vrsd۹9B}u'gF8^Ǿsїf_&;tl.Gg],Çwnn >wǥ9tquV#q]nl\o;Gww .cc}N;;=o7}1==8:it ›vn8~wi8<=l>o+_i^җN V|Ǹ5q: ڷ+ #yxł77]c*tD"i 2yŒO}dd<L䒡 *YdC&J4xe''9`96HE\9>2d"Cp7e5RԢgS= zC&_5JS\ͳ- c~4cY|x}d޻-6k8+Q芍BQhpv҅?;j?{.~~`/YgI|Mt~al|㟘9O,g6K[̻F9`#`-OشI7<O($EkL ȋ'6=?̛˹!xu0vm'Msk6~I'ox44*k&NЎ'X7?s0vʏQ1ù~b-W|c_emWᦲE^Uٮ:+ˉl>9;phd08s/xp;KfM!ufO2s?' O^ph}ҜMf ~2dg+KAeL;NвCdv\b/vṟ|' X~| ,2}o!͞|-&!#k /^ߏгDgklp;ckH@P9&/x6Kܓ[7?rD1%.r9~p(~&+fk"`~kmm|ڲ'>ukc!M@^.ÑiMK%wz,'^Yszr0p8g?>shwVQ[qYWɟ~,OR{8z;8sqD||8v h}:;.o58sݧp|tc}mD{|hf>vd<ެy3a`q[riLn|OGO|g>"!k$Ǽyn)FqIZC.|eSBl +tѻPC_2Ŋç)dY@7Ey4I:9|6 6lɼ]n~7c YCmrH |5X{QޱM-vd2W 5A'<`A;t^rGx`]|^&fxy G;k4pa@><:SVmsr䪖\ڸW3g\ sY{%6&7Z1#[90u@+2?^O񖷼 #:y{>v 'Lϳ= ?d^ZҼY+}OY׈tldqiȇqs4|s;Hcqwut|iNGP;OLG|iGsN/lYe#cئ8BǽG>3|]>84.o<ir /OkS+xeY}4iN.0Gy7tbxz<] 1JlɊ]S#dZ2y4=Y7oVN6me}tF\W `\+&@$F^r+^Zs߃vO+_a;Yɣ$dt|%XbHK6R|t1~bm;lPȌ#C\h塾9x8 ?#f]pxq>s)/1sJ< =xĀ<Lst;rF؜Nb0x24ݎr\ϭ= x/!Lh1Uŝ|3>zֳ5@+k,M~Թg㮳W3'٪|p}xUOxƷ3C2h|ZFuNk{zy8}.I; ^6\㣫05;5ds>Y}}wɖ78W'OwO}¦nwռysی+'xR}KPdsBF!Be^b|mBH1^9=wC -zh9l*!?'/ҡ C^,}d^ll$ĕ-=;6}hAC@K9kZ6';Y` ꃆ d~&dh͹#vD}m} W[4]<>s UC5[c6@/`C.%bMI D7{mF6b!nYąح-`] w#ů?Z$ݩiw #o1јop8뇆LzcX$d@\3O2`&.}`hZv귣6iB1(;?|׼f>z_ku]%81-i;2exWuٽ?N~dƿUs Íh:ϫ'1YE7έ[g?/Gqssh:nNc9ˠ:b^X;BK;g:'IdO Kk/ӏf\dL7k8Ur%+6wM@4B E1/FP,%(<:[!G͚M@XԒHBN12VxV` ebt--r7D^rM:̏`=cدp xfLdMFZ>PV_Jϗ#?~i#~~ 5'E?~6kw𱁝7o]?VVx}x{wSk/r=aVw 5W38[bx7饛5XqA{ǵor#N'57kOЉ:`Z'kf /mJӹ ĎmKj3r|-={LBĔ kf$G>t3INM{l`kor9< |`O\V\7'10NkMk=hc?ydd'ּ}ӵ]#j4{Dx|,coE<1u;1oMrdt}7i͍ps};JvmggE~sCavQ[Cwb k6 o`N}r=b;> ~-n?}I3}$wouEJ/E|ѸmmIU %/輰5bFZ8oOm܁rWl[2:]w7O;Cbe#Z7[S4ΔNN=ԩ/ؓC/s=GZy'_dm?6{|r!ߜ3Ć|;&f /me lc|+!o8q<et;׎t8D&hSM>o0v={ ע z^nb+I[AK?1񼂟e9ڳ*٬),UI)bHHUGS7N+Kǫ0ӏl.s7}ct^ c_cC'f,yCАہ}bvU5Xv!:  Ć|@N9kP_38s8(m(|o>O.Tw%k5;փe.s11_g1d-\Ьn:̦^\q 7dOب`g}%mS1QaUN! #Ol؁, '7)' z؛x`'S>ro%tbVc>zd-\'2w [~&O9ȩ;]藵]N:n~|s뾯{XФsd;ھSٟTs:3q~ n8{e.5׏޳{$~}t:k^F3~{\ƙ'FtdYdxņg:٬I$(*V(5FwLZz*D|Eef$y'CᣨEoJtzxz>789^8(Vڠlҁ?}2c b7dĚ^vI,cdⱩ3Oh~mz8?ݚFR{/gSO9s+/Y/Vq~zY~ovŅjC~ګ]Q>b=O\oVQ{O=J+ĬlFzO_L[s}~^Ą|Y1giW9hbd\" v+:4pl⟵.d׊|-/g|]x!orve9z}A>t;YMyW%܅3ɭѺ&zl"`,u*Us]h}t|gf|bv~=eFqk`Sх6rmI|S{䭚?͚Fq K S")dh{шy$"ʡxMU\>8 :0džmS!E}䰍l_/sD@(mO!?t8U<(öM7rEzvŷ]nt;гAk*7c}E G zwA[_뫓ֵURd޵ծ^pMJ9K*>W&8gq_>Ŵ/ IDAT2u\מi^nRwJg*9k-be FfQ/k櫢@Xg O;Gp.w]`_X7s9cY߁ǝ43vǺ嫕> _'_C[l2qMvaN %Osoq\ew9H@|'O|oޒ=r%xe};b`.:f}G^&'x.ks=+/}|HZ6ss:Z2"Gnw|2==sxɑ9_4ؗBMKu=AЬӁ.s~Mdlvys4fM(,R`'xI<:I4J2 IA>d洊Pp9i$;/:B,:ƊcBnE'+6DV:y͓mhҲ1&k^Ȍ.#/]xKsZu:sso'TuHS.?"VzW-TO~60Mb_~ַ^D {s՚y ɩu7;5B#yMNflɠɒcb_u51UEk^=H&K] rTmZz9isgMA˶Ilܳ>lckzjy|%_/><^0^wBS} نM'l;+> OWyr['W5x?{)!׵]~k E ya k]vIkntGYxS9[[c\ FqΎ99:9#Mơ]7؆no:<ѮЎsF\hɌ9ЛsiG=`0>vy&8}ݙ3^F*MڊMYtfm Ia&\@o0 2REz'\RܡWl *ma#AGweL.b/=xn!tbsdU)I?S~dr(؛7'O}|f_o@?ѡXszPܲ]OlU`(#H|XnԎjmx g_]5v|P  zM.yw\ʾULX>_asm8n=F: l%_OXOvҝ؉z>X#.NϼxX S֔Ѣv>}֛c kG67;Y 'c䝭6\vR2GnSwW]sM e˃$/}+.~65~p Xvu 7 ~!N|#o|7vrCxOїvNN?gs_了Vڟs5휭]~2G]ё88õ9߮=jVm8fm\|UoXڨVc[W2pY=S7^'*o?U]A3ۉqZ ml ֚g&pD4[2v8797謷\yfNl]p>*뷞9WmJ7j;vGG9F~ѵ]ڱeCpg],qw][o_&{97ͺvЏ~͍At6:{]^ҺLkXkIAĎ׵ ]x_K?uNͯ&M?i\Z4Cw Cb.T DOAhM捣?@"0srċ P`"Ǽ966/'M^9]6+d5o0G |dUܝH=z߆ ]6l&#~߁~w(gis<I|{>vG|0$Oș|G{Y%b9:'lLIC7:篾2locڨ ;Ȗ|e_?Kr}e65lM}Õ頟Z_cw5xL??]ؙ.|eMiC&|#/z)~-7A @5ʺM/K#s)A:vuvs#ges NȈ1^וc_?zp׶۷Yc+< ˙͜>עvq #fk8:m%k+@G|:zC_lRxԏts0x}F؄f9%6k $iPG!͉ # 8.$ωfCnh{?:}gt(8D@Fq_Y|~rU\XP( (JOn9 ۋ_)RHFUФ.m l|siRfU4O{_i/j![L3UARl&#f>_8>=(v nlёMdh[?wG/ŏ|~tzľXSs<br{wzw_Փ|_-YCQDkÎne-:ES`[OZOz͋ ֺKttZ ab.ht2 GcE)X#tⷶdғAY7\KĞ'-x8?K8|d;nu{'3qMv= /N>֏,~&q|֎6e]臷 u~>ėvg"0x3J!ۚG\3JؙQp uetyno˹9yxk~}4wz bSf!vm*wUC9>4#]{4ZPmrM95V\\y/rg۰~t=_,rũ982lR6G CgL*NwZAa G}Ӟ8wn뫃G^v|柬c;o=OlŃL]p:$';nYx>ɍl [$kVl/։ț=; lap|CVw[њ#>mkJƘ^׼5rf7B?W<ɢ-x?Qx ~E'kbjLN@d>rkOlsp1/ Wmи;AYFC.lfU3Z~;i+zu0`ol.4q񛎗q{ӏ7£"cU/2:(kw9>srGvG׈[6Cu }@ @~ޞzȜC\iΡq=^Eti|o?:_gs;3{WmYxN8SJoȜ؀XHc3&2~Id˧BFg|' O~Y")X=pݖN/'2mzتS+x(lWزS:;ٞ5Yr6w:Ykr'O͇B.q.qL;qz*og=kG?zb..V#Ͼ/.>Ttѝ|˅0>.l667M}1y`;@wuC/&9uАaz :v~!)~VL/yKNwoz9=ouuge|dc,}tq\c?F߼.8 oքA-7=W{Bmk/_͔.baݴ⚗|bOr N1 A&9Ns!|%;mO6}}RrߟAqiϽc2B':ͨwrvm wiܲ*yلf}Qk]];puzp'Dwv8AOqa61Y#9~l Ordn]͚1.P,YХ/EAEeN[dľQ眼9$ĉ$vNJ x'Z,SҡW+sCӅNk!q&ZD]xZ事c-KnxB5}xK=%*/_O\$Q|m#{k^sq*?,,.Yg뫢kE}슏?sǭ@?9c@os0c_#Ɩ\Q)df+|d fMЉ~zxȍpJ7_K\ cktuz8ugܕ㟪 Fv^6j׿m?RV =fcT_ybikz#y~sM1_eEO'|vrY[}J9l:#d#6 \x-_sl]Orлvnӎ2Vol7o39E*\tn[29Bzr\82qo;}}'OLulֲNrSNKX`7`Y_0Eb#Y!3 (R??wNP0KLvo@} 3wj Gԋ~+<ubG|?#{GK7ؒ I@}x6_җ ~ƀ~1.:;xk\ch?ǯove:sqVQ+z*^n_ ω[X>&JO6ZOd?ZzaVOV vwzo&vde-6$mCaxtrm^]Lجe?-{[﩯 ~urY};B;O}5CClVyJiQmR?~{|lٽ6~z~:ur-wp!:HaNHlV?Rc]bpIƑ뜸f}9$|LkeΑugw}n~-z}xO)nhr.3zWw޹(dǏq ]sliG95etײw.~tU}γ;k5uV?t =̜yϾxd^?m?zzZtx 4K'+t?$6k8 XDѠ< (J(E[s 82ISx=DBGlM2wF`-4аOQB-&|SPたMSĊ tfs|%ǁF>| lv):Cl7[.G|LIGoevЩ%[]lO>հS @~>}Y| /&"U'_6DV,b.RŗEbK;ܥv3/NrF|~$V֦M ɳǗxї?d8wF%Λ|5MO|r3kl};1* /wr7)qAZﯖK׺QqL t+Y6'NOejxcrq'=iZww>T*V.˯\'폕C;2qwW|{O}ںcK =}?zk'kb(/m^;=:-FW]n" #Xs$pt\07i#;ryoX6 Mx0e+5|9xض³̏ZmsrE=h.ȏ6x{!{B4ڼᏮȚ ;PZZ$/iw'ҍ>Wh̍kCq[_%k!YK$(@&,DVxH24 $x)Jv I t\v\_ҥxőG=$P9YR%^!COS8AC'\Dղ} uWXk ߮CLG6}<_A]lFz;VJMn83_dc};x?KÑX<[ vZ?v0L<9bַ>cWκVC(#怾C~cwȔ' '?~ҥ/6#d&rB Ihm\/U]|<=5x:Wə%Ւe9u셷QdkFӆiykv~6K,6i(WPp+gkdCa9sXq⣍؉t4b!rCq-˖@x3/9p" W4ِ8жcξk܃M<ٻ_ۡvFo}z3#]ޗWAxDf#pHl$ChHQ"SS( 0 W)\Zs{ ؖ ųu, PG8_@G n wOӝ coϯ!?}a%玛xZ?Eu. IDATGqw>ZA:G)f^'=W|}ϝwl*ȻX=ES飵dcasG~X sƹÃ=lk_ړPEݢ:>U6#ʦO.)]cN1w7ՇUb}={O}'!ړ^O\\mopsm{멢o{ۦÜXrKy莜8$rb-.|Pe>k /N|֌%rzX/9]5߮3گ? h㪹vq]WEocEܦvt滞Q&.3˜ts]s6C[6\#!]Z > M ]{MxƉ EF!|Zmf.crż hGT{HkJ$śN>Ū 'y@a^rIjm_L2-be^2~ Spc;wkZcȫ[c;H,yС51/|wXЏpp ur/6x6|~ D6l(dLSd_녻h)?W\6]\`r,!{ʯW6M_uӆH&pǎ,?V7l%kuݸ_u/kpg=9/ǩ:͙y>֭aZ-~1JGY;}zk"Z5ڙۅ"\݌THѸ9'b/8g):7bϦt9'bgdDwx73?Gv][[E:M:.Ŀ{>k̑ﺜt9"'V|߭/x+SlN|)1v-wIbwO?Qjr@sFWlOKA'9zӒ/9zY%9s`uph͚`Wl<8"9\"}mB {;go=fMTd(""§Eh.,  "#" |95^Qlğ3wEb( hrO!/)>{ #{SXS^Rg#v+6"Ǒ")|P|h]$ѿݖ :E6& '8+$ndzW6Z><貭lf>cs9º;w$k(Vh:Gl~$,)%+7_5Fͪ9mqW>5o+:߮Ir+^΋~\q.e/{@MK^/q' [kk|G9>[1mgt;#ykG#` o7n\[vDV~YO/645xtuvw7_6Ys\wc8zLNde.'''{8i]SAnd:Y@+6@zCujxv|;" 7BOqGq9sp<ɣh!E$$~6>)ē\-IB>t! xQb~dVH(hxhhb7]hMcFj6[2^OS+B?ş1{EE}JFlGE]9I$v`^t)|㧖lfc.ܞ?Roy˧'i;&&#?.p\^%s\@R)Z< &y C~:f^9FE6^~uzX{+_9 WuwѣZ\7\X}jŗ.9JkӹWnxF>.gbqw צ)zƴQ;L|jl5m/U\)nSHmo*Y[6)NYā_d;F>䈘;؛1:fm֋|Fm]09`þven[sݵ=38u6~ѕϏK;u{7?>mj\L;ne[9=æl1?_l{14}{2{9aXm罞 }t ؤNkk8ѯuO!cy]Z':~4qgyяәO,pHlot QSgqH8b;$ߌx}HUz"?WNdKq@‹Wպ+7&Rw ɢpR$P)$=$>]p3ղ6^ +K6zN\5tRHB|P]'Oyt)Ars O:Bx\k;]K?2ł=eU-F9t1iV5Zŷ\7qa# OǧO>vh m?{1L:k&\Al.}mxI?~㍯un?o ҎQw3g~nmv{mEÙD+X ">8EBǡ8d؂):,}p[.~Q"]Q).d+S=wx*#n<FEEkp63tڨ)@xNŐX1Eɘ #@G>8G>֧ݳgd8W(|+lt.OU76W `l>^ &+Ȁ[l3v^Eoħ).e>ڌ(ȋL4 Wԧ ~(f% 2o'_ȸ0?*_NsivdtܱN6Mt٨)a6'n8l|PIܒd*tuخ)#WOfs=X|ؤ xxTNk-+^ƃ~ϩ||N1+.>fg6gc 5Ժg,Vw]v?o~tgW0=c 9Z8ko:O 92OV1x\#<\N}$me]v:Vb 6\}Wh\]>mYG tp=>숌/z#oN2ذNfzK2>vmϸ zN>9zp,ts-@GFG_{#}z"bqِqsi͏c2 HG8Cf(PI"v~ wkqś_ş#-_;3bM՞ךToX/&Y{}=J7(A.;|]u~O}SÃ׾gD'}rC6y/v'S翼gGx\;߲^~n^2m\ |fs~Mݗd[ lr.YG'6.7~t9O Ѷq9~S&z8vzvF=|xƿtAMgUJ3{?:v~ٴ?ʊ}V4lpgK͹>[w}{.0v]=OJg6xm?2O|`\Z;9~h{ɓum@i;^ōu70b79WmD~>!)L/\AHATmlPu0Q4+6Jhs R@eFo_iqP`;hQx6EWe;1s"_#=9#'2rf]=ݷȱ..w7LCփ_;WbJ8|;~clUnxB_NLyE7zDV[=|}oH| ) k x;y|#OURPNvˑjڜG7tR\W/Ts'1=k!bmF Q;r~IyNos)'vk 2ںEy1G.F`7؍nv#5I6XĦ`㒂RW:7'c3?TE٪I}xR4\M'=s0$|2nrOG6 )`׭xN}GzF~WР?b#l =pﭯyho|skNS%ob?nmC^xXB]۬C'VrJ13Y7Ȥ=/|긭9o]ܩ6[7ߚXmn}M}Oy侻6O~v:'hvxs0 9C;_Iu۝[o,.[w~65G׺X[+Uo N끸:N>``Ǐǹe}IldYs΋芾h'q-ۜG|dlI[@rD(Ҝф.NsyNV~3}~͍Con]unXf#=/̴ nt/mHL 59%D$1\cyP^J E]ꀪJPj!A 5A]ߝKVvsNrqϴgݻjE:-_ELy-j-1Cl8* Npp-MIO,м]99#=KJJJ; 5׬Jl)RWͿl9]dQԏku1Q?;nq cun?kcUT|_j'v(ͩP /FMG|YG18=7捡weyA=8520W_īJ]2:㡟ܜ>/௵ogם)N:\ޔ鸽ڵ]SOEzxF3H^d:3}tzm_%@ɸs;;bKjd4𜧵}sة6ȄC GNGi~ t/ \,㫩;gجM @qY3Y4 i%~ WZ.V'-l/ά +_9|oӟ?RI+QIд%$JdfɆJ㠊 IMW%h@$DO҆`COC>M0ü& Q67ҥM'~->xw˯l%ˎ+=|wi.x:Ϫ9;b#ǣn0xŕ ,m)u}6xAbH튀_ωq'?Yo96:" >~siӦ[f IDAT]R1w|]ؼ[] ǫۧզx<.`q{ ~;aneǗڤE߷V}꿍w}i}{U@^v}޷bD_~Kv8Y_5 Ѻm!s6hcq Qdz_%ʱGlFt#:Ec'.CxK~f~>;a[9m[׋I~xﴽυfsOUGtM^ci/ ZNke!6kE'H*Oxˆoԭ=TnjpU. _˒K[-;_=ܠ$I$dLI~l3O·_줳_~RȀ/\ʒjp.)' q%l|b: ^{4np.YJ?(^s<`szTju%Z- ٬Ɇl=ت_Nrv78jjڵ}3 YǮO6gyc Uƍu }?Xb1 +ԏ+{zN^/ w")/(㑏NشZd]zŪ?6G)zm;oQsc86e36O[8^j.F899[[8j<ܒCx99[lŏ8Wh9;WN༅sMǻyk91?u2v8:X n2MV;GځSO{?:v^ ޴ͩ)~~o5:™~xã:z56ϭ?szF.cܼFigw>ο!X9uC9~ߜ=҆yc@#Т[->Ƶ ֨wH&$@-a :Id$%'"v Z0/?䭕]W~Q/!=ϬM/*!he\DH=d $(I \AoMGwdKo9؝ JoȕK  /1L;:d@$x~;Jj;+_X\Zզ:ڵYyԳ5޵;?nJT8{?QO ܽ||\]Q|†ͧ's7lC)AOUWɻ9c6Պ55ǡn# Cf֙LbeKYtv:Ǖ/Wxc'/Օ_cvz',0@Gv^X>p7~>\|nذa؜Im6j/z Wx37m_dwEْm)7VVs|{Aڎ 񵱷A~qj #Ew<FK/'jӝq.Cxk{ C̉&:?1Ox;/̎}N9>v1Y_v[ ~=38|j8w;os.S~Jr,g~}-x#d9@N6(zKՃIfn@Q×xtGH$J|PnJ2O>x*T~Jsb`dN =뛣KGN.]&N!KW/^P~rXFz:.^:RkҁTZKǫ_e*'xDmN)o qyr?j VտV}^CJ{nj(xpzevKg|W \oF5V*~pƊW+ W˓Řq}TM=6ǹÔb lF/|D:q}D6t\bu\#F/xw;ۋ=I,cn/CvDZ6 '4kYN.sYss} ^| nooÛC;W~ZD؉9>scx-7h,J:.7;) 1HPGsSg<2S\C+<93~w^ڑh~K5) @m ůԦHbffIKt"Q_6p%}h.c'cJm~UjveLD==$Rt/66osG3.2'2_!ɚ }z~}i&<<: ?upBF6k!}_dԘB.M֚ 6X?l@UjvVgjvzoTiunЗa׊3K 52b^~F>~T=w?Ё/}٣dW+ _|7(E7kb5k㈸~m^yͱ89MSz܄mx@l[BיKb'-͉NEE֯kE|yO)VI JtGjg8> ^ft[ﺜF5I3l$&L"X&@8͛'\VlݶK%\F֫=ѧ)W$$c'ݹk9}ZWníCX3'yə>@ۜKb&1W.?.IHOOI/%x3%DA^xd59l:芞g VI*AH",x1ωpu3~UogfwH]z]IU{#z囓jaΟQ}ğvj> .Wlم͗/ٌo]!t˨ZЈ6X+/._/>6I{xX~u[am!=av/Ӌ6ʯ#+p^ ?8bNy6\\O1kp\_?.yrcjژy+ 4x:st=u{%BTГ?u=hN.ۿ\=oxE7::mž1懅Ecmc8@\s Zk%\>>kݺw)@i2q-+^qM׹6OtڹT&~tFmڱ_M}u3dW>s ]:tڝ=K_ w";8>p6Ļ2秼#?xӸ7>KOonmNI;ۧF[~]O=O_c} :]oK;|“:]pVSn5Cl8+9۰aX_cpMIZi'u랤WIx7Tru]d_[d%cG[R;~nu<X?^zڗV'+a0gF1v;Uʍ$گ6u2DT0I$kѰG1gl! \~z;9a@st՟ㅷf~NdNlqA-4/guʆ$c3ɦ[l@/c5?6 ޢ?л.QEM kC^6"6=Pӏ9q`c-r .[/25kBs\aco6։3lplN:{C:\hk·,\nZjcpgTk?e^J_?6\VǗX؝6vԆxp"hs(:r\]aSq_9O; Za=Ա&.Iٓ=?@ ǜ1j>Q:Xo-٦w= Vі{Xde悫N$.ꅾ:>|u\s5Ḑ]d\=7ywn,sz7Wgn:6}4J TWŖ5_&+4pR"㥭},z[nw bghiw(/UwxhI^oGvj8 H=v&76eˈo2^ zpv͚`j [ I9FHR,IlK@h')2J޿-Yx؄ umOSݢ>/_UoS$)U KZ"~W$Z*% %ilZ04D}t[m nney:=W W!#Ol`УK1s%>Gg놗'@k*$izk#6WȼoMڜGvT ݯ)'qE!+9e36މ_>29mc33^I&^c/+0zKY:l1]R#kpͳ/xkJ7G-U9vZo-cZ) =+NlrAʲy~{rÃ<<~BX&U ;^ڳC>[Һ#6s K.đ?E;[ O@m@horNY m mk]?ծnz롍O66Tv-j<ߛ4GQ69p#Kͷ_:oLѿ/؎Gͭ$g.zmbfa$E~)J$o> o Nq`6 jN,<7_?ՓN+d =\qzЄGW Wͽ0IJG$ $ƒnͤwn;I~ x9 M>@ \spF&pr@d.Zیi[ fDX.pw10vMIWk⪣?lDFIqqKޞHh(9Rq=N=~9 }v~d*"Sm6M\4+J'C9?nz p7NVYoTQ6m9m+nI|xb%fjP {^n,6k97'x?c#bK֞}Z>1I5gpڏKu%Bj㊾^w}vCǞإ]mLy@,A&ssNoӟ,Eu"+cWjisڱ+twNn펗JpLukG9l gtM9w=2R&sO oJ;>X u^k, Jx":dۀ2Uă&\iP$I6C& z;6ᕄ\↟`j%ϮC', X<r^8= ^%rL9POp1IdO}+.Nc|CsxK6)xЛ.|aBq>7t=<}E7ɶvL`_H¿lmJhǹʢAg_uz *L]eyE=Ɲ9a~5nE8 lqR[G2n<->IzLh+Id;Y H`{xY?͇WX/I#^}V>-qJm.RvV{׭ۏTCz7"Y66Mwb.bF_ns5GAqga06u<8#B}ϭ=v37h~%N7m6z7o.x髷t[JZx匩3NQ@o3Ȃ q`GF 8p;2~Y} X,$+ I0~D_t%O HIC_"$"X$j(top+ d=:MK@x6l0bJgXt# Z9Nj:7csHRh,ЋRWbo|*1]>H$6_*Ukl؋ln"[O }Vx^}z6@ IDAT*)ON)T{_azw|6Sd 9𡇚ݭՕ՛kֆ:nO<oc]uWijvNJLubو=[{CF ǯsdc?h؃.>Cn ;ЁzhIy"m=Uv]i;2*E-EwsyύEآ:`>x ΩX4@|ҎLϏosnSڎ SA&=9\x]j侮Cl,D `1]LI D`H^P xORzyr%mJ8% J H$ehmx$~%$h4dgxn:_TfKnDG>t+hrѝ}n JR=QY|}tٓKO+_5 ^faYc?Yizp̽j |nRo=kSrzckz7..]찏/$nYg2>exX{k;r]a ͭCIlMrW.m_Xسy?ZPW.R~RSWw?z;~#P11W*?Uap\ <чlIN6FCGxg?ۣt(+#1Q"_VPI$ :$I~$}80?@6S,cS4;~ʗHxm:'O[ WlPr_<_^6KV>#MֳwEkN.^A%õ)OO,֚ޛ t!>?rl Ns~[4y0ύG|6DSx୥v6n4b2sXeg挥y|\8vG|xڔO2;ĕ5,N@$%xhHjL2'!I'8~#2$QĦݹҀ/|[L:Iv$_2i]pNtEko%#ᡏ {oqᤏ~t\_u#*IӺ%>v»5\;YW<<7 ><6J%|J4['X>s4?6|L&;=bN'}Z/='gA;Wmtmȷ& _*h*Oѕb~2v 'DxY;FOlo<"|]4.<ݠ8YCG?"7-mxj gw[w:ކ7~_iwYsc}>V7coȁvvx.㫭<^ ^O nJ+iO>Swœ.} phgLJݎ̜Zɹƒ,r}xeӦ[pSgN?mu;l,0Jp=!@$H|ӗȹG IKN:tyF ]%t\ŎnC@KجE؎wFGΈ`3ta3618|mN)f1ɉov Qu+զoԼ 6 V/65>Z6 /]WPX{u=i;þ\A!+첆Vz4Dcؗvnߵa`q5N,y?]xJO_c0lj\E7ruE9ue:7pčn4|gӓO/_oCBQh:q~eN/1?yS=k1ї߬7y2c6JbKOT1-A*V[]ys;yuk.7X+ű mߨ| ?OWrmb;0[h}%.|X2w32z(΅@_#fN8< ^@og\|swxўΧ)?=[Km<ÎH1G 9)ޖG^ק1)svߔn{"Ƨcc:_tg^;8̓]\s, |?J.{.;yC'#:Ol n&vl ~z٬Yb$#Adѳp-ۨPؒ3D.{ʃˀ/l%%a GyؘIML.gsdu`g=>H Μd?$N w{U2ϨƱ|VkwZ;BMo?g8M'꿨`޺mrZ;ÓMH6jTB>iK9YBgx$Ĭ 75h?f56Eȣ뿂?-]enilOcu5Sl>t_WW1Pк2=}poMv&~no  @ tb5ǫ1C=t,W!_ W@ ص^Yk:/ٓc>ر;$#1{;xF.~m;EsxmtN ^Ocs\u|IkOEs1x[MHX4?^cS'+z_}޴v=z0;Ɯw9pNWNR+ӻ}&byJlo5)q>cgG:^Y"$QtcI}1 fŘ6&`$ t~v /肗<+ NIdQ>@|љLvJlC?FxP߫f?_2&g?>Ճ]̹&͑Kwt%K~TӋ~6UxZEZøMd}($^D_q^™_}-W@t&S;z||qktPlNlIhoXWۘvX: bI6$樦s ]ӹluldǢt/:gڟm~=?sѽ27緇vlsyviq3"O\>nmBh]{/}8.3c~%#:E7Xy)NƷ,{xYܠ"AU&x%I;N0Kࠗ`]m%L5Z/A'6}$΁y%cQS1|K7:AЩIwrl~$>A% WM׾Ń耏OsVm9`@k!n} ]-x_9bbg]^AH~6#M\DhGgnFWioZ?^YQ_ή[HߵKWj2z/~x4iGQt cBZ)f]>d5=bqOIm] ?ܲ,q{/?66l;cU:9z~j}B.~G"[L|3:ٰ҇oJe=r5l.=2>gz[djuXjN:x;k:8v@;ӯ{<;kܟ緭sfVߊ):}lڦG|?팧.m@YɆ3=g Y87GVE:ms^I_F=uYx6D?uK[ cgam;f-3v#h% :p3I`!)h3.`Ymύv&"[ ҆^1$i/ 1젫>a4Kyvlt頍ƕ8\Ǽ[N/_N᫯ؑ~<<_mV |_f@n@"@ۭ}ѹ? ]m >э k(.?ؐy_ @'7} ^mH$W<# /@;~bj3"?/qX6 "FZI,]1ñnGV6gb?=~Κ zy,qF_|f/fZ2g?1|eyxҎB˷tTq.O.qԝp{ k>d:NlLKg[NNS1t:@B\FMc[]训!Xw_h_$xpBz\pEpqnw?gN ?|E|i͜ЅotT 75m|@&hAJ_TZp[iX s;xxoa$s.XIR.8_p M <$4ʖz  HҝހΒd% 9xS=S'&WΕ}W~X M$LzH$tsT|-<$|hFǭw[_ X礴".s[)6{$f2vH6Cc} A^规~póH-z ke)W{6䑃6Q'A?cz<#mxZ ̉Y4hlcxq>?y|э}ldГ}Qh'ec h6wj{K茓hCfy11>K[z@hझNԡ[ J8x.㛹sNч?? snG.{T"'#Y-Si+K;5\W3E>6]Do.#o,u yxE/%8ۘvdO=\ӏ&8rKYX.iX I9 pH$wI>4%;n5 [$d&A(p%ͳ3ؘ& &|;S(Y뇞Ksm=s ]"$]o׿~|wt~Kk;;}ocM׸> ~6+@*֙|~ȆcN_ĸ5!'q7aK֧ÝTW|L*lP u|?4E q_Օ'8c;89k>jdMp~Ob?1q> vO>E5}y 9l:Z}sG'S_}.tSS.yTVgg4}|jG7v.5zw|O{ZGڜ2ܸ{:њG\8 i[?r.M.$0Q)4vzI +Qr:&Mf+m>6l.WҒ`'&ݽYo&6K:Z/R i-)xS=RGn+ib,qf_]6C ȱpY/27p"_:ڏDA@_mN'~c3:=M><Gl76v)8Z,_Ds ,jg-3.?g,}e0 w:x]t:9 -<:yюFpsrwN u[!~ؔf֪ɛ+OljN589\pg>m8 캝5sg2B^gkSáC׵=>uxr" ng͞=m#<8Cb&Rll$>I{H9@$B Ș9 -@jA, -#G&LѓFۼ ( .lIH&͑G_?ɣ9|=4BGoUmj>:zŸG6]nǓ?S!Jjn㿀tCrt4.JڙSeeĎ9RgԻ</AG 6Rp7ډI|@O 6Wp+CJ`磫]jFLop#(Z N)c8`S8K[lo{ێ%_]pOПMᕹi4zQ ~@tO?5vg}{ko,}3Ei@og>s[j7Sp2>NS[}֞ ZiOvWӆ9t O\h:~DٝX_fshw3k~뇟1^ꎛvp򽛹3?kg^,w9%:]3x/fM@YpSJ"ea%!fEߜ+ Z0.AW%YI6p;LK$d@b_6%Ni>@-)#ocW 7w+?9> |/coջ /ȿQ/V.Ap]obm^ԧl8!Gإh9_Fl3Y_}q|)fcibe7W֓ﬗUpͰ9Ʋ&!v.b]M4xF^-s#NӋƢq2+Cѝtd?ytY/<4uWۜumEGCe1F>M IDAT3t6l֖m|*l=x Y?=lgJtՇ~|1ul/ul3N~t_DywZp";x/Ý[f>W&7âjyxm1ڒ$III$>G6*i𑵹`s!qmlt*%Itt2&zFGɺ6zsh\q˜|xkdK,%``S>+>ї62ps8Z|3#Yu^wjV\{'#x;pnb#f7mH@8W`;_ż~Bg}vt?}uc;ۮĨ wȜx /B% :Z;!:t }X78-ÝʚW⽹m\!igNԫ-<e~$^_>.9&:@ڝOxsp3N(Ѭӏ\4n>SЮfc|V٬uK(,8p!1'iH$I$@6CdZܺ'F/AoOGhߢH 4Njt4 dOH6I9۬$lɣD h۬hqqk {8u 56Օ#nwwpMn2\V뱏v)m{s8Zr;/Lw Q;Y#>gSO2gw^?,=^w?7j/|?Å+R}^wciMl >|K/I1_МZz?IU?k5~)w4d\8p`l6鋷I7]BG2ϚsKM>MM6Ď-|!Omc+=b?'/2~S@w\Z%.cthT.6Gҙ`F\Ә_9pd0?i/Bk)@k?#/jWmsJԊXu,e<1ccC6ށ's#>՞ssc}~oYI=enJ?Ņ\sNskԡ鼍e nMkb\[Ρ~Sng>N3yLSsήt+ᛟl*.1XOpÆ C;pDf&iF'/ڒ&PH,AX#_R qc6t$>mfKuJKʴIHV<%zt2."#W> ?uQ#e/;ox+=?]Wlp%n)?WsW߳OG '?|k]*)_)[5o~Q+1u᷋Mk܃GXJG6tXWA:Yc>;>:$a4xX/I6b"~j~Æ#osuK1>⍯ś15#fZo._/~q s#>|Aa$6[$Z:~w>OWlȳ b,Wщ %S^F Ё68JFA]i1}ŧƿ׏ 5YOzY49$OLzcJ/8xemo,ۭf(69׼Hcڠc~gذ_8l;__FwlI|k]a16ug{ 1>b$MЧ6suthrWe}t_Ƃl.8񉎽vx;sl8+vNydxxv^SYp87;77?7ڵηOyNbvp.鼱:ݏX㝶÷Y{yv>]Dw~0$j%I&d <.)R[dctx)EIF94j%9AO$<b 0+C6r%&vD6^JhK7b>[$[x ZbGJ '{#1C:۬|^Fo~M*i%5py]2xя^*ϟЇ៬#k: (/`ߕ}N+MڵjcBfы1z T:Z[vHd9.'V@bq.G?dҍN]㮾3y Z~D+F߸"͎C2jd/{Ƞ#5 ]ᨍf +xtԶQ1(V j]mNurL鞵zDgx|~@;CA'ꝰz뿵!q%,;s]\米y󜙕hV?|+gg96ol%]2N[Cfdf&H"HMC|IcɇdFAO\kdL"WbݓN$ߘVsp0)t`I褖i=C'2?['CfǛxޭ6%xe>+DÍuN)]>ZW.?p:%uEӃj]'mӫvčn4<~Sa1J'FN'$  H/\BIuk _Z]o>+zK+=|/OZ!K<خ{铁J7]Oi$?}jc{k_{E։ oVrlE6c9>\u E+A_ijMonlٓ(AO)hmҮ^ N/_k_7 Ǻq2؞5ۘBW|BkN'çm@/sWIc]m4e Yk,|쟷i?sb8sA Rg>sovMԋ3g Vuqb6k+1UK:fz%q#~#MjcYE:\Zpj%SѦm[Ǖ&!x01韵W^z{| dC>{<؄ 1w6qAOk}شq0j[COGz+խpꊨn1nvODxQ'vCn%.}?:cNCdvT<rNwRv@ @x?WvZF559-mSYo><362?vVj:~o>k;:]gs Lx |t9Sؑkty n [ o7S:9scgǴW/iSSt|qbxou9Km<9'<2NdxtYxYM{KYlfv6r?/>//qsh8tYxH/ w`OS% M$ 4qM(%26n$Hl$^=0D 'Jܺ%f=pq%fuJLw Qwz%vҕt!3rD xUK$m?t_9uP|ѮY\-#x=&r=$CRM*.aðG%xYQWhZgN/?]|kuK 7No=Z%y@Wxz?ɳ礣N% Z#~Y%$mJtnوgq5&n{p926g7]r,3~z!@< '/}#Tc=v˻US}y1nj|OyS{g}z!%DB$$iԒ$pAPMD:a 6$uɈ˗yOx/ $xIF86ʧp$WW~;58^ q{$n7ul" |eL[a#{]e/Q>-cgCG>9i@`/͙1__:H{%Q^=䲵 >g.UrP[:n`Odw]aElGPp5z'M~pZ)i,8bFI9?-%kgݭx4G7cS0n_]>Dgݣp.|zWlHl$Cfړ1G7q`;~> :[٩hW]h\)nrWgsDODZvl5w|͞~[k΍,kʮkdX|؄E@okwU|n[W; >QWrV ΁>^<vR7mu~W[ =bWp7k~.gvSu畸1ƶn3~>9[xvF)ib2Wqx}^ΣϵyOd~:ZY[o57l0n$MUX_ l:蠥hl>Vvܲ#yc3򕯜wb(IɟF&'CcuhJF%q˜Lfc8W$i>K^)$O]璸JL]qzr}B7+|(_H|u?]L'6Թa^G6j9ߢ>?S&?I/~򓇿fipM'sN'gIYx"^}4G=|x?_bx<~4Y?>X W\J?v/{UW+ky>a=AωUCpz7_/zW~n+uKx/I|z%CȘbC'f/<6#&F2b<1ǞS5ɱ~u;Kʇym}KmO->tr [q|s;>~l֮S&&N{ ٔLx;x~zzN| Gg ^O5SYoe:a K|Kmխ띊oKյ+{_멲|lVDG)dO_FXc>3hQ[OkhuNe ~h.'x167q2^F\t|.s7s!}s^ !tY=[':F6cCOeq% 'tDc 8xd臯"e|dh1a/j4_[U6OC׿~ܘtyYԒi Nj#]FW7x$UXV_2pt >LIKtР$ƍIj5c=QJNM |6JإMh\m4*zbѓo<~4.A%L vKNb?Vz*^RmK;cmwD)5p.OՋ:ueIp~tmR/^ c@uKOۦڈhg~b Oc\\ڔoM|>&#ŶsU0u1M8zb+G637cWA!x3Ahщ؞aUu&?q5Y|<~lDO_ߓm֙mo=6@7` M _cL96:w.{l;Bf>f?]SwwԭӻG\5`]WOo-e, X+Yg\~pA}Cy1؁xh{6ܴ2e>uȋ7uGnرlWߩQp2%9]ᅶN}C=#;8}xpןkj v9ps198cUBlHbxw/B 5c# H)6ILV IDAT )$lHJI$R?{w}U 1%ADP A,ƤQ X`Z iBtBDbP`BA("P UŨ@ B $PM7Zs}޽>DH3EʍS)(وGCBɭEOԕ_?Vlwݒs>4b9YWbqzG@^ +Ivč]i^6Q$N.ZsOMbx|-+ۃRj>^J'*_+yL} 7=&F֦+>m]JȷZZԺ> 0@>~kk=i=OMkxpA?}xߌd;6EX[M)y&)GtOte# 5Yoo"n/hy/croCPmuuC ܹ f8Ȧ_tI>\'X~;:vXĵ.z O';"-{Yd;~S@?bAS#Yoߺ/;If1t߮}mx3&_n/i\R>lGr^>2$Fd9;gk CsуpxF ]]nBkዮљyxztşx;8VGtHcgN8s]^3"g9M;19\W]|-\r!rz;$L8u:An:sNB]YGwo^ ߖGϩys/sIb( GHQ+6|c ՑdT<0  p!ᖕ!d*|ir+6VDKz68|(kS}~g>RpۺxYnd?;ռUawaLߧݰ>\WAZnfuK& :nG*z|mJ~g)r=zfY?}sfd]Ň`1~SA[TBvF=dU;z傓ЕY#׫Hvu{qjXzL][m./ ՋIuUӭ꧰BJϨ+kZg=sƄ|c'l#:vecx $W2 x:}$&6$±lg` /HG?Ӧ_8+b{!JX#  9}AyXǭ 'G2d-[ Fro@xq=}n}:OgHn8"?Ȟkю/]>|zeNqhGev[67q(kh8l:N"ǫ#] 렍쎇bN罼l[.~dȋ=./Ȟ\ƌ3?ф~NM*-HúU7/yK~ )tp<):H8BE*(>|`J*HV)Ȳ \} "Iӯ8| խն:ZjwSO/ "6u#+_(;..-Yo+OW}n3dY|{X=dy2"L|zl'[x#DA->BXlU}6Wj*b}d\h.87|y I>SW[nU7M~[_1Q+<+{[m]6Wx]ͦhk'J ? IG ~[mcև<]?g6('8z ~x#xxřNWd'Gs;c|"9'䓼q9 slEi$Sċd'kd|)cr5\g'6.:]MC`_?Od[ާaet'.-lb#~uđMblצ@)Ɏ.Wrq\]~]f-Y}g @hؒ{؋^"pD@Znfm>]QZBhmQ@AHAH1^apRɎ)(2,d(zS4)D|MNB"R v,R UċMQA9~zD붙kVaJz"*o?'Xk<|SO<S#C~*~bgds(UXX_+lz]WrĔ5d)9`M6}țYؚM;y̦9N+̷ulɵ6G2xX>ܕ1\3%#߲qΥΛsk~2;&}rewI»ʦDFo.['ؖs2艮ޟ _G5~h˴}Ns|uÅg\h<]~Q7ȃ'+9D梳"+56srЗG=.rsDvc|dAd>rGY%on?fN /N =EN Z<ˡHq[)`{l\ 0i?XX٠nm_"5Uy㵪? 6kd麅k,zL_"6%9v+vd% +Nw_ǪuE7Ϋܣ7I8Pk {VLQ~zHMLXGc"^h[BkKut})P ꤿˉ~ ]kn\9Z3A\b ?+̥iPO}O儸8,(اO$ Yd{S6f ĸa'llRwЁb G/|} K;Og a |/f/\Aw~q#,r&`z` >65u'F~'|X:yqC{Y̶k^ﱆ_Ml[F펷n6>k[axzYgM+zu;k /nވCN>z$9Y#hCtmƦ99we#&fxm%g/g.vsgdå|l|}n7tVUt\e߲<;'38tEsяDy3'||>m}l2ϼ7 ,U42ȌyWóJ?.>d7׃^SWZ< 154 ?n~Tl? !۸\P,IER շRGQ4)^"LCQChKb*nd{^])zT>Tܩۭ'HU|Bxt]EG_cxbm:C'8q߯z@ŅU65M`;@|W*F)j-=>t؉ugŇksvqӕוּd&>ΫuzzX[K2vY_o4xUnۼWSu3j-\\vW@;kC?dw^oj+е){-{iy1As(+t:9'X;3+YnM"p䲃NqcWl|aS\uaلaDdoI̋Ɖ 6[:@|reO:7xr 8myA rΓU^A_-1¿)GeS#5C#x nu+ _KV[./bP{^"EJqcuk|\90WV[mn펮tܱ3}(s^<{<[[H [#  E*sU,Q(\dMFQ̓@R((ىF}Z=8weM{ڄS*] 7uuUhoLi^`h8XU,HmC(t]I]mΏ[UNܠz}8ϫyMhXVGF7^Zs6X#6WjyIG-z^f Yլ.h񱺵P޽~U~Cu'6]j*_#8'ٌeMFQPo 16;|хdSF_(ɷ~hd=~nƒ^nwy|>m|^69y|Aĉ^ct dWظ/vN lKl [^/AFe,_Z}lės6N_{q oiO;{ CS*_Gdl"sNWϓMl'k>[&sίzAggOhC>>;xrNrmikh+iE7x0xKdϯogq~Ǜ I>PWB:(<O+Bi PEM٣w[< .uM!7j2((Xf [E^'KP󁫰*jȑp  \lCG?Y>>6^_X]!p׎Jtf 8*n}Tf0_A]){ە|æ ^'ɗ5^-[l9'WO!xn^z +ib*Xlȿg֣ٟG.>]AԻZgb#Zν6{G]@=uJXβoY*\l^mX{˂-έKU=9 [G- a95C\bN1A@Ef,}wCHm> YZ90v̭k})/+ibi@Ok/zdb,^l$+xБ=]>x:n>?eZM7row#;>VM;}uZ{;.+:?O dcI8~%r)9%fnU~VǿVw{ixE}&xc+rF?y@~sphܲ6Ó[4ǶOqlov|ɼ}G&:i?;z\;ϱi>?#kOi.{~ΘYU?99Gfs23G׈k;09]v6sdGf16̧3μ3iMCZNcSPx~i )@a q"\86i M?%)Wڤ=Q7_f*V cO0TߘlEMϱB6śq@j9;P8}N?-^}np3q;>\T$>j]iCڋ@]-|ЦK *_i6ֆu;7t6_j'{YU1զU_Odo|wwȜY/p{?FG+'mm l}! ୣآl!.khM )qoonB&_$ȃd 0DooSD~|tNа!N-@-R\3qFkmta:sύmfMܗvٌ%.s2/9b+ٞy8z[k]q~> p ӏs h=T@9r8[?6z?>#ӑiog+p8xv88RT8bH?ԻP)6@ VlS,|90`6p OfSu5uZy yp복i|d]M{7=_)pSS&]\_VrS$fZ7#>nr %%Q;6i?Rܲ\o n-=]c{n{wͅnϵs2pspݗe4i~H7;:ٝ.iFB Oq>Gto}E]Gp>N?mhu\s9e&s'5/lGGfm.PlK)0$ cœJ$P^m9и aw%7VLWժșRgzcTlYk`يTBP +6ŝ[h3kC a@*`c◢.MA(^&ךpoNJ>yoɕ}%uՈtŸ9vMWu]_ůFcxO=#Ȼl^xRěs[5s=O~3Htlwcd!Ln_f~c,k]gs,+k#3Bx[=dx\2yFS mѢe@g->ҕs0&c' ' fI*}ȷ| /9q؃?=Ykz˝6ڎDƲ6|gl6C=9gVe62|O}ztf.26iW:v.c=o;xzK,Fl_O?̥s7 ]| ^ :>8m.6c80z?pOB6x*"ج+K!*MIfPTM )t+vGBem_kF钢DȫU*$3Uvv=} ?1ݒ"jgwTJG IDATi؞P @f#^>"sA+!GltAFצ6)tM\nR5^WoTo[Of;6aĂ}o? =wq˺Pp{kj&6}0;=^gGh~|?ȡ|-߭EA2Ŧcιjc_6l=}cgW/Fa2ye_6]^ƫr& >4~#ͦዞ*GE|d(,ICVѽ ĕ\|l$EuvP,;}kΛ!gC?LYCr!8cq*s59ȅ}MDX}dcqЍ:#/n]M_Txp#'*#`)^6~qoqݺ߯[Oߵ{%! Y໬6 >b/~^Ny  pN9_cqi}Lw)`F ;}?~/V|Asrν#%=~ŦeGvxyx]7k;U[ݠv>x+›v+[%߱[Y{Nnt9*Us[5G(pGf-IP *,ͅGWmfB~ĜL(f6.gA\Lmbѵg* ~]OLUW>Y=e=U69\<_I'|IRTIQۘ} 4J٠J< NέK6Xhs5*pϭUnoz]Ξ5Ev/&G6o斵 neЈz;RF~N;5N2p# $o6bd=bO:l/ZCNs ^ۿ_Ee}SWu.YԆgkg՗4/VAbnC99G'Z8Zg/Cɝ;g6G#@W>[ [l#;ٷ 1Ϧbة/C<{U>|沎,O>v|pZ.Xu<]^xtt=џ\.16躜ev[d Hn/4GqZ9,L]8I?8tgͣmqQOO1 6ql.~>QH{?};~"4G.'%ieӦ{y=ӮG: S(R.>,@>0gl*$"FzX9] OA#;~/u|]m{sݒhZcwtzrvvDZeg6?'2?;vs2鸮s>3[~&ogҲ's螌h/.8m.ku۝?"6k BahR^8v6ClO.EVAٕ|c<#L\E#+')—V@O6ZK6Edp~E<Z;6$f:nB7ޘ~o.X;6k)[39aSu@#c?O9`ʳCks _qڤ~l-xزyx$/.p &S{9 ^l 2[טlb +FtA\<9/`7{/V~r`@й B@uImݶn~oo@ ѷԷMMJ#f"GPIXRX):ܦ+5 EɪWXE^KҩůU(F3gmTqk_x֓<ң &;KǿMZz^@ vgB3θV>B&KJauo+2os"c"`˗S-B>M|V$<+8م+w6cvv́hKhz+8ml_qrMβѕ(/ؚ5vaKܐ:_FT^_uӟE׫fc>x9يM^5/UQ@'~ syst]Ƕ>~M779G]ŝ~߼GeS&K,샏 q`yc<:9J/}d[=8׵[B?'xG}t9b<<9ݾ~8g87qnG޲=yĶeON\;ib_p\oN|p>^Fӆw%#z淊6ç\Efe;P~׌ج "G+\ARZ E#ED\ ^kL.0Vl '/f5| ] gBKUE)bVk_WNŮ{9؞7L'1E] _d#ğp&_mtP6)xxt7SlbgI;+kxd};!Ŀ~*Olx Oi'OIڐљ =[;OL#?ֽ_~zۓO^|f?,u=p{_L-6 ە /6xwbc#ap+>du+#Ϲ>tAfirxzM%bȱZ9P<19J/,x6֒vik~`/CܲӀȊNEn#]~ty7 >my.xͅ7zގ;}6-ؓ6˚tƾK l.4ؕY}Ǒqh:m~wxٳjn̅ߘ{}(VN:_ &>ѧNudlhtof}h/2ĘOց߉;^v}dyr9YƬd6_);$;vmnsZ^6"k;cS|x+'u't]c9Zp5#o/ykbx;?o׊WY{k^kMq>N[_܋5;8:Cbnشy O|b~cs6v^ lbOgM&|$O?mx#N1&9;9f}A|@spxsN%r&a1vgιln_K?>w9*n7%SlY7on+B9óln>|mWjnd~{Й82~k͚E ?V(9iÓPT$ źHqÈ)(IB^p˛" )&t |ςɶy[=>#PU!E͊+̱#0+cSZvzΞЧ% NF/\죃/)a <ѕ UeNȁGb.ē-:l]W8٬٬)۬%'|DNtYԟ _)_>[/OT~~o߾\4~x{+s .p9OlCr8f3&z/<̡K)ksd"ml c}q9༣+>4a7Kޒ|~۴f/GdSNj pr6f12 |=?{CIX!O2[}*=Hޡ!/xcr5AP(*. EbU6 XP[DXh<](dɧK!Gӧ/y1lOiDw(GV@觗-6=|1G.蠋bj)}vx1|]dC 𱇿zɷ>+͋+9ic- G/;=E 6DLE?e[)dg'ķp/Ns\={-=?38?ƚ g>sqF=q=jcq2 k9}4!lw՟JUe5D&}1Fd'ɝx}_TܳQƾ$d!G9L/y$Ѡes 9ƆypՏ.s{f|Gb3|?bNyGݱZ9Q0 X׀lUNBsGZtNy o>z,qn]Ϗr6j9-#q׃θGFq#_|mw\c~.m~Ɲ.d}B;yog̮LV9ss#ϭ mӮ<ɏx]{ m+mo |"3uRDX<sB*X9:kg#$@ )nMmd)R㫀6VR{(H:E_-n1^ X6Yon"b'rրmd&r/?3>k`?vb{)V6g6SH1Vڣ*t~t,U!/io|/]:Psgo|#pc+/W~uu ȶ'uE싵,w_Yܰ{ L&r/ ZWn?98 x/_Օ?6x8zzk}{қueIsfMx[._M;+v [o@ϖu޲UXy9%w@l-Uyӌqu|uryk˃cn5y̧U}su n]8LzBdț[7~ ;Mg~v=sWƛ#6\2G1Yg9m;3mgw?"6k8P(A($Z X -Ň'κZDg2s2WOBE mhL}FVz~}h'QN>scC! '>KUtUl؃b xėulf+؇,g1)A' O:ʼne6kooMOXҧ$ `c}2fM[vo/Oڸ-ʼ>y&хƚuM.dSJ\ãOMyM_wŹ2zqv2gI <~$&1n#o. F֏,?Ѕ^>@r`'Z37q]87GZ6tύ'5/.o 붦w[F>mcqpQޭ[;TeVcٰ\?c*gwuDlW\M1p@cxPjL.^uQW+ L~(nU /S |- 9z<oNMx\PWH)l |lМW|[N>6^(Nơ Mo Ї74xyR*ޭUp]>6eg {cL&_hd-۴]Oxٸ] zΓOmخZv>n{޵8|bīysY~}7X}ӱu*e*wqwT.ן\쾸=> jCxxȿ7[f+{b)Z~1q&[xd}⊚+ghř U yt #`Js;sm| [!0:F-E`kb`{JtYAc\|Hkh<xD/3dwſڮy.iBl.63N~d2w0dَo>MhBIm}pi{?ti#5mf>ǖ[2o|&&~ãBq.uw$GfM(m&XBaBȁS(rj)$BDHpK5 'vo٪|D'yOM8a^쪝G+>֭l9!g[l__O'%GUK!|h:i4oW:ȍ)J#UxvgJnbsD9#ChӲ :5:O[1 Q=SOo׮S7խ]TʐiSaUtGU1ƫg~n9V'C-ȗ WRyX;Wˋ_}s cqb56:g >U5l <ٲYҾbwu){o}/o//9/xmd̹⼤ %p]b<вǪʼ IDATӐ♃/ss>M8/w>:}dMh},W3}841D" Ӡ^+Ã&xt_ڎ7 mqҏە)MhĦG督:~'n~ϩާ#iwg>mM2ؑ[2o_2}5ik7C9٬y*@%WrF)pЌn!g@Ӌ.Kl>`"Po{A>tHU@G9Z8zM#;N|S@Z~WSЊmn#|%:ř:)lS:?i#<7x9IV|æmbaL#dN<Ч%/'N6}FV[6ӝgstDߥ?m؞/>YwmN8aq˔_V2newŵF31f~zL^#hђ#"+ú%dOHX ɲ t6>gm:dLs{Mnri=H  ]O6inuF!vt9E:s/v9xN﹥;qw'rMKGϵsy:]{vv126{~|] g.e*372|#/v}]v>>οc~ iv&qms6Pu5V(^lnVOS\ iW8QXdV,")кؚOI}Ǖ/E ?J\mS,S`bIؑū[JB6v6>|#G1&l.O;{f-`Wo}g.2Z.~#}L|>cqϦ>5I\קc@Vlg)Y묝6^c4dYC7<䉕ub6L:mm9[vLùg:َ9j|tuw &o1>} ؝XyO`a YfY% 6G8\Z 4k;n\Ȝn4ї96 O~N.2VͅPڇ.n]~&kF߲*8Ym{|+@Ů/\GH9i;mgnHOe|lUnR(()%OTN@DZ§M2v񃁾(mn7K 8%(wN|>d> ȹ;)llݞ&^W HoSd‘ۘkvl(#lsIE%`3qXo@Lx{AE-L9OL.eu;`C<[*|@ 0D?DŽamop7~ r?g)WlK\<7y"v~t^~#rn68 ;tM|?\YdKh._\fo|Ls>|IN)O'#jl$<:Mہop#lҧol~@?Yr=G s2Y@hruэG8]~i\Fq'f˙ .*Yjnζ}6qγ?whm#Ο~ǧ9z?Ӯ/GhW;zA)~%v#8zCFucz7nʷΆݚ?b6k E@ ůI%dK6ɂD7YG|dU*\zb\QEP(v~-d8z~Z 9~qQ+$B1>):!OhRۄ||bJ sd8HFv3Gufz2 >!v"+kYvP%фM| G'ȕ#|G_4x'{S}x_ś ß 7$Jz5_Ry<7u:~tnFUs#~ľ#>ƹwcq*nѯ}}. u*ڑwnϜ]mI&@SX(Eu;yrh֎_lO숭_#3bBf/[uҊ#;lF:'3dp^Mˋ\;tlxdXʁ5Fe/ćn}8`. D:f-:=8"she.Mtyr[Ǝ'h6[tuímg=T"essm pmٻ* _psm?7 ǖMx7[P⏈͚RZ4EbWQc$ŗR -sul^Ă+*Q'(`GūwQ0t9"M,&9t>N m?VbKZ6IcccvS2nL9~s{kgMfJmOәAySB7[p6NbCy6OH&ݑ?٠HGWlVl|d(v;olBl`+[bl`uf B5r̿ȯoCClͭ6$ƑC~|њ }.rbqp ?~6HnMsX_]v87tgqZsc~w~to.4]t~N7s[ǤU.;1zY^s}~oG;̥M?3NlG6FHqt2Cy0|g2A r|Dlֲ`ȱP6ja. ' P YXY +:*KlV8#Q 7T1fmrUJQp첑#l&lRE|U ~YyR_<:4P4د|g=M0qUqTn~%d/E&ō|WСQx>2SGX)0Ńs9gHʹ:s~~ c M/ ꊧ+ !>ymڨ=E/Z|qOϫSܠbҲf5{/|[=Y ϵߙg9>o熜i1#f<}b /a3% Oցs |b/zFۑUοZSl>샷6bʚ/7B8! ϛ^S9;492k#`mS}+6~MlXГ#nh#G+d+1c9Z2͑➟ }SNr sɆq] %䠱!sh[dOn k~g/6 7ڷoȖAצ:>[i' 6 yC`gxPV~BD|ӬI'䚗/>qN)$)kಮ.*3NŦi>?ݾLb_gGB{1F28v5ރ##5m?}Ghv:c shry!Yq!3f.-~9ûvz#Pďq0uF&VxBNw2[ͺe¿vut_wdGH<:}f.q3=Yda0Q(}@?hDO7m^wM8sYNSѤXwYco[1|vmHLJyF]elOzcE')ͳoQir^\YQ;}Ct5ʏ~kW^Oz⾿ˋ-|ފ}|3<O݋O՗(WlܮoMNzeueqﮢɹ`lȔJ*bE;"IZ[֯ڍ~r,cߵ;c\H=d/|@n|@'sgDUo6ar8Sp@\B~xؠ|ǓOɵ6mA~perpຼ %2F>.&6vM]:"N=$oU;6)kLf-~/]2%:n[x6mv~Xu.{ďNw_ibH1޷"+x4l4"O׉p#b&)l9K W8ld1G 4 2 X\C߇ vwJx;yqe*$v12nM=:ݭ'?t)Dٖ[^fzI礓N^S+nn4nKA8Nl˦-8-~O7!"GsbV5>Ӈ_AnS">ZҗIN>57|;{ug{Ai#Z`b+9䉓 kmyWq^u;_At˗-6%~6I!л&/ėإ!yxޱ'ɿq>&]ro7|u$hBfN.e|:VKCӇ~(ҝ9Gv@x2i?I<4B:m:nMdcN';lO4 }]V? &_5Gǜѽ@( ns9>2C~4t?"ڴ J•8WzRi.W! ​?[[g.Lj "16hlW}l &'zR4׌9YЋhdA<RZ 2gK^1%\HQ1 m Y>9~8:O^8wMJ/֚׾v˫3?ًOoYo{SuUNXWaeMf#?|m> m,8etx}sb#,~,O,Lhϸvue \LuY}r\Pyygj-q{L_@{X~%Ɖ>1 /!ȚM5/䉳XE6/yj:+fs٦~7]_lWHglgxH(}r(yWfXV!|ZkMAMߜk"?hw99,Gsƣ<~Z<ыN>BEV s]Hl~3z7ͨ/q&m1Gm6̧ }ڭІG ~ቭi? }4n]2UysrBl~D术2Gd.G;EϼZ!KfGf-a:\)Ɗ>oXBŖxRYPŖ[#}ooo.{^|RqL(79-?S?5oq6(|hU<|/`S"?A{Q=)#m̻PaK8,kǑa~s("Ѱ2n]=M$Ϝ|PZd ]lCl5@,|-YgSԳO~ֈ/}9]Uv>7X3X$F][ 9z`?Z[|!gY!Ow;|#WZŊlznӘsrD? 3yȊ5wxkZs>}Ѕ_:A[C^&zdG~ex' IDAT~cvd.tqc;O?u}ݮ&.66X]2g84lbkY|Mͱuᙣ5#:9#8^6zevڎ_Fc?Ŝ1# }GGK\_s6zcb:/GfMS8 v. QTѷx4%Y !gSHeÃFWG0T)l˦M7wY).Zl%~OڋyGq1MsxВBl*Ń9}F~EVjm`idC.hӡp7&_+~s/#r'}ug/ Ą'pOFU1v%&Zɕ?s =Z9nNދs!zdF8-0O8ĊG6 ls]'{xe|!2w&…NLv\gH|VsዬE@ǃz:jg.2—uǓuﴽuyt%?I)s'Jݎ`˝휣Ѳ*ޫrܪ?Y\WW 1O5 OL"؇1d+b=Z"u=Add@T,fs z`4)hmܲ!oكfE&)sLoHwcߴ{RxE"Ӈ2 ~رWd y*e6+n ȓ@ǣ6k+6ӧW =x/xr}:לCJ@K>1lN}cWHV 3K-߄>&dۚsθ+leHm;_hzNCKw@K`lf+g k|L^v=uvY;}9 d88yqp>=/faB6`CƑZޟx!^Տ/ݾMU}s>?gkѾf_oG\斵^>n_}ڹXuܨnOf'c>mЏsgiN'؃O?]^'f-]ծgV授͚@)`(+̧ᤈ!GP(4Yx VqḷS(N=+%DE(d-^L$^3f7T0$|!ͥ8^4|%GȽ׽n,կ6$ŬCCrٳ XgOb.W&>Y3~xl~\)1b2Y+qb_5xB eñ} oph#9͑C/mBlpK' /~\dY_#?ȳi3۲apGcS/66l^#WF tK/ǵqH?hZs[1vb.agCxtc>a&xm1xq|@S2W:iiyt^Fmqu3j^fgxtьs1h^eh^{/}nlwY#6kHF5]J%7&IW6Y׸5DCNI6-Ma m<$O7#"wU$ WiMs<~xxoH2%@@rgr *zD~6B.+|sW&Cw%tqf=|tm|wQĦ7eқ/w<%$ƻ/FK}%0OO{{dΤx0deƗdW~SxmN.a+ ,Ųd_+uNFh_dٲǓg+>l{GYtx|itR5*>tkyM>KqFG}1\O'_K pbzgo_mG}r9fӺ|(eX_ĈV9ǭ{6kNIlg,o8޺ZgE|kG>]G6΅Fvx.tKmv_'F^dcu Ŷ:WuMv&̟%6kN_[R*9u[J%#=sK~$~AvɅ.16ehxGKK GBdJ?[s'L<7<@16Y7>bu4uŏLt+69fa?J̑'~яȃGJgx/`͚Xqt1wVvЛ?7G8NO516E_a[68?Aer񀆏o|l>~e_|~b@3Yhrg>kH^|\p;8x 3>c<6wc/4\@x\g,Yl NOH89 J$8 ;iI@$wKdI:I")ַ-c9fկ>'e#Y}_?'h/| ??4}Up$apm~7T*}^VJ$3Q+-oy,$w_kcIxJ墝M^|ɏ,;6eMGGmq;*S G|I $W}Gox@OovU /`=ծ6]r^稹^z5q-+^Պ1'~xrAKvg%ot@-5ar F4aa-Eq:mqvm+b\lj1̯  Vx ~|Ɲ89U¡/zo/%̡/:Wă/gMԀ:s6{@h֗b-s@O6~ƕbGܪŁZASi.2fF.4 gxn #䆾я/=?udneſ .;},8d ᓹO*Q~b%8hتvm{xnz~Jswmo_!`^K}y LUc-$ Zxp%jx G,sAMdG9]ן[sbA뵯}휌8̽]y#I'R@Hz߯yz.Õ0k%zwzoz鳕,ӝmIm<6hN@?̈́~6bwwG cEw;I5D+OI^}:0<(|jA$ |))6p+ɵ\/pJKr '~+3~^NsgkNZ1Mͣ B՟Q̊廓N:i3Njvx3>_ ůdW/qO'6k[U#76kG?P[4|ևַEvƇ//ؼ~ T\4aӧ/-9pcdGxeXx1f/qPp*^=&X ~iNq#gn','N:N|:^| X;şlǮ~V?|K̥miێuQ̏VǺЌQ 3۔#9ݹ6mO汞fCbFd0'czmlv7BBG$u|th6l<Ƞu0}]9w@dXOzA7}2?1@w `]o>G%N#?tƷSB+o^^r+O젛-+;IٜOuwb?ӥ^ }藓bpe Yusl >[輎6s|`cyOɢo/>]kC_o"GLe2&n?ǺXї|R}]YS[0aaaguWH~l${CE!ATH%x㒨Jm^ApZ׺֜P&aq'CwX~~`~$N.q2$$>%< _=)On}MW&ņcUdۤ+"'|ѡ[zkл-91mwrn:Zsu7:A'<&yO%ur1 ;>/23ُw®}M _-!։yl^/_te_=P^r𳱂/WG4\61j>6lPvqcH_|Y@XR챟r. ‹q6mtWĉv\Xxȹq->F^֐hpWcN_J8w}c9Ǜa'nPmz_q]jsct<\xxx2Ns>;bjĨ~涡<<1k Nm80G7I?uXxfx][x-;XC~U#/1>kk~GQAȊde,8}n.񱿎灜@lğ>n+8iC߉p!6O,uCᓝ_ i|ͭrT%qIHZ kPIquezDwQ]yp#Y&YP,P̡Qܡ)%Nbxkv^T#xoE^u8t\P[u9/;?eMAtuކw -J)jmdsjױƷG}3n-Яe?jcNs2+EWgqovH1qI} :@/>yJ͜c:/<}\ mu/ v2g<7E_@L 7 Oǖv .͏~xmy23'߆w_ӑ5VPyI;}O=믛[_5Vfn#kp?Eπ1I?Z: Oolj8FXӏ@/nd$a_ϵo6K Ńч?6f˸@(_^ºdcEa_|&K_-~o'kcD|%G.`_k' :ҁ^JS|B8؂/}O lcׇ=p=p=pg͚d,'%JĸT1c=vϦFI2ԣmnF[؀Ilب+'?y~?DI,5{7U#׼#7x{pFz16=hN&fWճoSqI8NmlI>$TȐ^I&_ih}Yw $6FlIf @OD36B.*@R6` :HZm͂J˗n; Cz*prLЉMレ7|W#h1::kf-pGq ƻO~f3rE:وR &VKw_Պ@謑m7(aSXzt4cX(?d6Y3cy@ %T]Έ1:M?N|udNZzǎ> W <P+s;}pC:ކYR ;No/X2 ԉ #5os3axH;|oٶuٖnQ#3}m`pRo7hO9h眢m~Ɏn&jlYDɯ,$IEuqs`[LwCnzNr,  lW~_5Sgl%i^h1—wk$sxv|zgii$n(cۀxdnU-lH7m2$C16XiGﭱ+4vywp|j<'p7%f?4#}ozy;6u+i{M?x^h{j7FsXI"t#@' Jg~Dy׎=,f,u1G:؇7Gq;xiwMusYUG/ wܝ҅nF;9v:uz[1t~ido;?8d>6gwM:wUgZ.$ !` RN}PXd qIoν]RΓa6<̉c.  IDATjݑ#NjcV/=`}s'8]qM 'l]2yUs Foc׾OVBڌ|:3븧>u:o]S>{$~[b#lt;jI<'B^xJraFͦalȴyPŗޒK6t!est`9.{\%6{z& >V~}C25}l G]~w=z\Ӿ;dKV\h|XzJm*[qt{mb ~|qvXwxdӎO|m~dY f+zw_eJc}"NŹwL:^ټ%>Fɋ,2r^^z*dO<"W,wiFL]"6QbZnH\[˘;wB>>7D]4n z4}6lg]{N*ӯ}'6BN_vxD> ĈG9sAs̉w8ht9k=xY3Җ:>#ӥ=:<லc6CNd6.3 %Zc܈ui{{qI]o?pXAߥcvU]_;޸Dmm)|;bfH$=q`. ˝ I:ɟo$%I4@% εntc?զ 3£ ݥ4Kc#N~7k YtQ<_:泙FGWs6b&5tu֗p4NM6OvhCXΕ 郌;6OpCĚq<ĜzD6FCmw,E6voyxtvSw,]/Kם׎xoW]#N4?l`[n o쯣]ίύ~ uƹ.wK۝gl1ODu[3yjwMg͚DJI68U_R"8IdɈ$﷾6J׾H|f OInYwZww8z~ ;<g拐FDO/.1Q UznOTdFW|~ze"l9܋nΛ\쒬RaZ$@x9M3"|ID$u=~Goג\Y>a:ы<5 d=/^kf||B̔NM}p}H;l|K#(Y3Goڷo:_{[-y_= nY/bi |M;vҀ_2;?AG0_U䟀 4Ol5g61NP_j|Fo Jl}kK[GXlPӍZb&g~8tM2BFcȣ 7/;e?_džmt@ⷯqjv$:ZwE9ҝ^bfffi8$];\o^;4-92M~F3v\+C1Y99Ƕ =do _2w]:~;mC'6fC_:V:nڛQ㺎UYo/:i]pcG3 :M G /ϭj\xu.gsg͚ġNIDc Ɇd_%O SKl$N?8s6S1=6c^_k6qSg>s QmxQm*a#1}?Tw_զoomܵ%Qv$K0JE΅0cp|$O ࣗi$7zlOl7Nmӈm %Imdצd#@z,R5zȟLv1 ^9[+!T^ {̴xgF׋F _bf~I(k_?M 16IÇ =ȡf'6v}[%e#C ʺK/8#b _7/7~I4+9>+z~fNt}lPčyvh51b ?M|_Ħ:#a|q!ֿqeU>y$?rG^8މ|گwøg^ǯX<[lֲ8I(%Ilh%V(U;|j 5UPw3$c'tL{J^<?=}zz)ȱEBs.wsU"C%׿K>Y/#)bzQ?mnvT%sUcI`mdtPBŶp2Fn`x$۝o7nLeAzIs[%z$ALb,;fX%L=^I$Jp%Zӧףߟʫ^5}/`#_ԅ,?|xyшjٯԣ+f M1Fxn=loS!Z+e'q_Ug# 5ŸNƣ#<=>axJ cwA/+bqqv3w>*~_|g1}f,|'Cw0R\tQ|y묵Ɵt1maqnCM?t? {NxxWJgc}ޘ s2Mܫ=iAx:Dx]fOv#uËG؄ܮ7_>IG/;ѵݦ=B}GcǑN?.%?m<WNl#dÐ"xwIn]vpsnu^ms!O-i_-#XIؼeS(%tf>g?;ܑ{_xLotcY͇1ɚi/م 7 8U̓gKK &,Yzy:^27b{%ւmw]֎ɵҟXd:4o#&\N,ݏOI%-{Z(bc5@_ Apz;4G<<݌ỉĒ1Ӝpx&qgglM:O; gJN XICp cc'qoq$0=/hTݭx_#RUrvUD\\FS' Ux>W_߷oz '̿aH=zwGΉiD9Sz;#[$/LJ6Yɦ&&\8@3,!IF%6CMs%)'@: ;:_Q{OO;l{0Ks,ZɼK`@[Ožc#Gmϛ[m0䓎9fHL]6D ?$+07ZpƗ]|}J b[!#q˿]6klyǏ>|<8_?m :Г6Ή [ĭNN$ ^U# ]j 3黜>6߁vy7j?^eX83A|ؙIw]7?2wcj&ٔHD$&'{E*YfNq 8(՝] c^of|+^1k=uGOFӕDU sOOW;/)el_^~{ZxG'&ƍ2g>jy@g }&CKm;:>\dm܃U:cjoҩe]WNK%ud4sYKt}j<<̥o>817enzm筝598g͚DDRbA8K&,DK۷uʕjuzM  \ 7cM/t_5OUx9mE߼X'9]sN[d;Gxc=nz9ˆGb/JAVEIԿԋ*^O=6OLn${j&.yl6O"hM c6B+h%L`%πs|GXl%C(GܡfNJqa=Y#G|6$|eOS?uƴP l|KwmvJů/&g 'm`Fb󴋌xz't.#xvhzyqr4B\pGt%9}@re:s0dضvNܥ9Fxg|fno|W8cyoncU ^ >yxّ.7/myDmwwجuGX9$T.DI$%Vl\ Y*z8}S%lZe%Bu/ A} տOoq+/tyϴ]B]P>)Eக;ͧUR!iH Mr!&9fO/~в %4,&7eM>~bXN6Q_ 3<Sy_=/^@\oYp6YCY7kxi36y䋑_&ofaz 8Š/l_$c1_㡶assc Ϧ"mki^ *h EÏΕpք=x=MwWyC ǘ:40qv3:sW]G?LVމKk6mq<زduU n;T3^}=T^8r8VAՈʅD_+%G ԛ݉dT2O`%1dH@^/!7ݒv\l\j❖MJ̫oj\*|B%Go.Yy 98:$^\kHO2]tA(~`9 *8ts$a͇d$vd_H#'y 6 S|>_~T%7} IDATM?66+揄 l >zё6Im`Ӓ$\Қy/~hGtW+^,oRoǴYCO 7y31"_jL?XWѢ7sЛndx_>Ww[{ ߍ~8%u|F)M`~Mtb=GC1G1NWp)Fmݲ~9gݳ>U,FЅv  1mdL>UK8]=u쐹Wi躌*FޏЎv?ǖȠgƺK-;oҜM2}}e-G ~:c7q4t-Xh;>Mmop5JptE㜞r$SA<0۷oNH]$O7%voc6t#$+.xQ G<uȟM~$5r!iK_6j^~{7k|&ܯd0F[ yLӣMG ^w<;,oh  $kx^|mP_ԟ`zqy+6.Unx~ mw~xz|ui(+s^F~:5qkm:D?Y+q2u]xl]ȍoѓYozZ'7h6h+[/X=:Ďož誏VzsoI75=TD?mp=3@M@FtRA$CGr>%}|/}+|:G YnMAo8ɱO[<|7i/zǘ~;^8紗t@Cw:>oӯܒ:رy~mB!}ne6k$9r!rm[ "$M55.h^ K :5<P_/\%5Cu7bKҝ<a=Ο98XvJp~W~eg&zX/ KS"KgJ/YwuгAHG @ řlb!YD+If?iwgf ,x4j2&(o&9wrdCM/x/~%v]=KpK//͏һY9yKK#M%jv9 zؙ# ~ݳa{@݃@oЅ25x[kl׶6x$Ykct˚7|ۆ2ǑEƷfo džxy7n]"Qy=?(3t;~QM҆Xl.>tst1[˘lcڇajfo@Y[cޡ6[wxħKpVoUg3l&y0l\$ b#ІDR-}͐yϣM͏do4^N aG'f⼕Uڰ}KaeiJK?o;S _'۴>iӹK׺{[ ۑH *)o1 ɠ X{$Yt1^W $im!|79z~EGwۮY/r zGúx./~g{6]WsKI)$|$n:}oM>X/v6]6٨}:?ևwjx7=ON\q>`Zcw^c"n|v6 n|kn'B@nSmuNtRGyb  s)}}b>?9/{t&6б_Ęy6zЍ܌ xsJ(e9DvV4/~G9'[sl/b lc,.tu=+5+YMx۬#gZIM:nMcb^2>㱗W/Aw;(ߜ1>PV͇Mt[EuudJhV}㟌鳆K|̉g.M~ojǾn}0wϣOl6KO[O'4C>:Ι}{O]x1SFwtJcvκH~ |$d6M$Hp_|׻5@/~K7v)x#&뺚x%sj>Yn!}U:}< 'kL}HW/?{oVNҶ5akb?kIxTwK*cox+l^D<*9򕻍ꋆuqC'xY=BqwэIϊ+Ul_6uW<:<&xG'鬐I^{&%23vro pm2٨f7wM/Kgf31_<.֞S%{֋o|w</x=h>9f~~l9 G6}kuN,$iZc 3R}t#;K4#؏n+2Rqcad>>N{{^"s\v[ޤ gw2O@t/uhCNldn:2WnGgkC9)Უ۲d{T/ž:ش{ڬyo99߷o  7|#9'O/}tJ%'I#kQw"dL(($YI ;3{t0M dI$6mn3&k'Y:ONW?m\(£7^E}7jlxg>s4I`H^6KX K -|os$mJ؈YP|Oc~60g3g;&؆.^xmFN$#Rl{5&N?Z]KWKH~`;A<8#ˆΛ_РϺ6n^쓧Mo@=6aDoP/Oyf}=gq[/rr糾;wڱMlF~ש/yl^ZDž/Kx_Q%b.'~xPf&; :~wZGM`kظ-X?,NqW{ ńsتc椓N~G;ꋉ?sF=~^wz[=?'hK=|y Oc=Q\x%]a^r6pAŋD1G&Hb|aL'k|ƬI%b[@oft,5]qUoӝlKju:sa_dm@6"1;kazfJ2㩎q~^&ǂظRThs^/Z;wgaΧ՝7z +oGJG%=oX_8/;no/gY;Y/Z2y q1$NKP$RM$SdA+iysAҶM"bjQXhcqܥ^W7I׮;]+Uz˺kozkyee.+Lmf~77?>~t 8=#V\; *&6=IbmTKmvXhIj#_4MD>'oT66GK9རsO>=;5Zv9[8 n$ XG>َ|M)شDL\]I2kO6_Xt[ꮬ7gɺjQ@vڬ̸ߟo qj_.^&~x 6w/~S:|@}uجYx|3| Sϗ֕FU^pc @oNmkJno.ǞG"n:w1l&ߣYM4g 6knY6j\ukMy٬RNl~p|>Z|mktǤL9JKmK̅1s.2qko@;#3.s78cqBG#+zglj㭳6z&mI{֏>p9T_硽 :U8xt]v;R{^e[4fxRWrGxx::ۙkxKڥ3rlOmgus c*٬wd2 1LHZ=B)钬H%8IEJkWgLR+ɑ` }IM#Vę\y1<~g/h?6;oD?k }d_6vG >gʗGױzuWk.X*6J._6LϚ4tO׫cz˦9_2Џ<^okrHv7Kko:Ǐ<%/JvY ߱Gc#z]jח,zZ>0N]:i.;T*:dV]F^hF\__ܪ1Y7mmk7@s@j)YS<_4w'sUGlH1L?Ax%+yu|v;<:|:[sij|%KuܥH#]<1aL{fiZXRg|F4?u]NKch+૕x]n悗֝Oooo؄wH6k Fҝ/z "#Iʍ+W@\dE"qS.R$Y;| 4 ZOdh+7_[(j?S2\}νֆ}Xؾc^Xm5I!}saT''s_%ɕU#&9v}w'I9ſd f_sl%17gzϱ?fEK 6$d+E<Yiwኟ |PzD%8>IW9|Iq,ȱQV6cG;#h ;ى1dzѯcqgmN)ݹ6w%㓵1H)g?{z\=;}Oz^~O,cmmZďa6'3x{:R NKu&Oo |zH{6@?lJǟuG'm;3u$?){~g7gcv?Md?t}UK>|<&]Oܠm% ђa[֏^dKk^ʏǕ/\q}~AzG"oC}=M{Hz :>]w̬}3jC 3MϬww&HL+|N-cdXuo _cot#O;lՊ1dZ?g:놇b]/tp>}: 3.O̠>Vctzf/Ϻ-:18s^_ؼ$RǬc}\e=8+CWgqBdMXImqGKc7n>xgDרΨ+sF%ݎmqo7w2j@C/]_W_+vbN&ĂGXCč滿̠>p]Y?ousb#uyDΣpt#D5QmΣ#mןWQw;LO~_@-ߜ^.? {QQt6l!G}xZzɴ>|;,X tQͦBf׉|Ċɗl%A'29:ė68t1y9/oeR6Z~!c#78歭cu#uh''&uPgy(~w>p2xtNLGԱ[ =,|aW@̥q]d֑~N2: u`ȤvN25MN$Y>IFTxx¥'Ixϒp6O_ѦoNjھp_ z AǜԴ"/kd?cIaNA`>__|t&L_Lz%k6k"^ 6d-'#O׶>9: Xh#x֓;FĘ/j pK5ӶK!6|4J|K.6ւn/<5AW4g%uhkU^ZkqXw ?_bZA`mWb mb՘>hy« ^@|VMۉ==ئ[Ik[C`  >|>vj`/E}nfbDM;{gkn:}r-=3N٦.XG㉹>6u & 6tuUgu51~p-%c<`۷oƝ\ҷNr͍EIBȓ$tOl^B$ᢟR#UKb℆>)B NSd6 +I 8~6y$6 EcN/]79s@n&@tf/;V_E" gFGI>_&AewĶ('^m]xZkrOvbzG D.^|s߈ 14pIONbx>gvxgo><k~KY'#s1m`r COؤެcښy >:għ#1M.p-9]tԆam'=9Kd)RgWu<2<6ƽ=2?^  YO|{b[_c[Wcv/}b6?)pubTӉ=td><[7v7M<r@್tI27ւl!GyI)tN  ZKO~'O5{֊;Wq,V=f<0dmݝO̱|O7Г݌/B&c[zso/]T|>V_"\W];|)Q.]ZK{c3Ã,6{&$&>f @x͝{i ȚD?'v[./9bp=|98.8Z1e:~} ǣOyϹ>tmwlW><6 l7}|7|ϭnuϰ-SЇ>t =ql8g>9U5sbk[׷|m7@ܤ@䛳69b7«X?}2Ob%ǚkL?^4POs,_?v̠}tK?c:}*:},댥鏵k۽'ka#GEk|y/i.qh.x䤝q}ό03w}T#gfxV1N{ଣ?f#N x?=lļV6zx/>]m]38S3I@% \ķN8aIPKH8cm 7RHx IrD4C$UEK;$'G"#$$8lU6ַgX i~31ULrNv Ȝhlڌ+eD{ѩ)g/0ǗR7x߸1ײƕlP{f`-7B6Ŏ?ڬu$GT\~1CG\|c >$S}1&.ٟ×XGlL"OF)@/:tWlէsVڜ]ϯkR C/LVw=m֗|Mk .YU'`d@`26)`B1ʠ EJ-QIP QK K(d9t#XqAB72i6$ BeH@޿O6{{x޽Vs>{>;狸 ?`olBڙO7/{Ĝ^4ƀ@̣Ü" \#\'|=rlx@k\9R, x .|tIybk_şm'2xOg'~g~fw|V~B66f~?ԗ>}!`[k>?1|[jMa8sd'Gx@Zq.c2gO992:D='@3.~g5j]e=ܑ/bܱ6έGw#[ZwXGn.27Kp/-_skF;a͚;Y#p׻sU~/}|k~liiƷW ?|z?i@FNeEp9)&ׇbG9YR+B%p>xF'" (^ ニ6@]Z|O7! 7vlЉh+Zrql/1_XY d39qeX:s@K>0.cu d'^slؖK%7cG|wmћ#8wOf rr9nlcu^rúuG kp[䇳ϯsKwnXk9G2=:ޘM΍WA>cv:F\Ȍ/2#?ɉWN-1StZ1tkO#<+nd#9v.6e-;YưTUX>Ϗ^re/C!Qy . 6F |0B+R()_ks-Ǭ7z966ח5\(/d0|?l\Kd,y ؄-kci.1זm/G_Uk|p٣;ݻʥݤ5J˖w޾58'wA1\|?;;"/c9kh>r#}y} 4@lޖ؁'돺]÷D`$.rBnWOX FKůMC|,sp}36Yc~16~/>]B~k ;2ևOUЂNw)fǓb&0{V3E:9 pN|KmشCqC]AM1e~@̑@Tw W<*Q)N6|2NQ xxq&gGdKCah.wxSI##pdV fրm!?KxbOw"r+D t||$G,v@3f{l+k>&l G617ƀ-?̏heqK'!}tZ'=i#ؗsdNgqck\|y`SL:n/l6͖O;Y lG~~u~zqGrqIգ_M7fr&~C8>}~o<s;F<̇_J&Uw:~wݞus 9OBV}NsٻnD ɮ\?惔ub&w5B6? )LDFpEÇF *ZГP"[·ZDbʏ,\K45r&Yw5:-U?2ďM366 9b2s5e1'?/>)v٫͆/r |UCg.9C"m-z:c6}/ȱgmfa@|`+^6K'%Wߺ~y?~$2~wN׫;xEѝ2'n4bkn!q1YhsJ=@O~ &.2u? ~A1Yw~m{,ٕج b?y}2E*$[j>}Xt)Wo ܰM1c愸mnsٝ3pz#l؀^a}_M]>P..bVmdYS͕ UN`tpbP\%=!oG_S9(tZwM( ~auc;_eb˪ bJަfxNcWY34|fEGuױ `؈eѼx|:ZS5+9mO!B_x'h^39yqrn x\b9ooiGhzWף@ߊrfߠbpDNX/amp/鬣Ϛ˺'ȖuNw;xe}vsKcm.<}.1Ϝ6<]я2ϺF6w#DHkm^:%y#SdƑv|lBql]MNEnoWMgu$Wǒ~5JnhkSch]l ƶlˁMΟ5JV)dT(0 ߇Kq.k}0.x F<v)5RdrD×y^g=kz[$9})ٯ0 YOG>4ϡ#χ![ M>߀SYv"#6gm K-^DlL@MR֛qe3_m@(I7lF _#w*[otu} IDATl t}|qw^wlfW<9 qg#@!>X?1eq+ǍI۴lgۤj6r4*Yx=OxGKV6ox>b9I :]`q@;55_J`^Dw6rLN_(\~UnOk(ow 9׮[_Rݽ^yzw1V)erʖkmOw ]b"rYy&fme9gC`>s>6fͼ]pڽ@ut>?8~2CqZ|?8?銝ыG?O8AΨ?c2oe|zӍ MۺBnC[GydYǃGN|YբuӦ4-uޖgWbiRlKئ7W<7SKfO'e>/P$xUmjB-\؝86^D! S6EtYk'[m/6Κ9emR4Zܼ^rlB.f 6p%<ȗ-db897p)zl鳶l[l&+w:8GEwd ٗ|Obkk61 @DޚWq9C>kX=FG6l'/7zwpҡU*x&wN2yo]/ cvK]6~N{vŧpc S8?6 Or Ցid㇣?}ȾlЋ_[hi.Q\f>]Ht՗YS@ъC |ք\ No6օ<' _h,4Y7߬Jwu5:wbCz#FI']"I;[׼<}o]}t:X+Soӽj~{AiGN_VwK^2[f\熕K_u?$3/g\ 2^9m]o\tV:և}.xO͎o[\otK.c#v~p<4ly/z@K>mx;.:N?g|?cOmۃ*'fMl.Q cf`xQ*>Ō> ~>)T#nykA+F mNV[H6fS8'Q,wnqc|!G[G8> 9~~z,k?9G&?7÷cpZ1m/[hO 1}8r{F8qoJ^75 6xFW[7窃6l%uspw5Fn|ȝq6}1`3]ms m'@g@v^ }tz|`D.AǮU&qq=-#WD#'  91‘^ Z}Mz6~s]b.)nstyV]Kme[bHgxu /M.㟵}p5'?oS ^Ftؑ`8SxuƉ]l>{&/nd$ƙSxᆴC&{J'^}_1#y}#[9M?,yc=|anŃnkzɼRݹR=x+wwٻ>}BlJޕVa}i}u{DZe [ Sy~>'3bAExN)08a#pK#pRl% (m6 $1)E@!QdfsHN6 ^QؠUT)8Ŗoߖ{G{ >>E[bN (Ŧ>^x)}xS~|ӝ>y)? 6ݮwb-Oݑ~e8ߜOo o3j]bs]Նu7p_Ժpbf$8]HKW/*?XqC4ɗ]<"}mD':ှ rEgODs:ק|NZx?3?t +.CoKwCubOm!]wpRtD_~!pmK;0\Ov4I mqK];_#B8miߏu~d鏲"#|Ow]駍mgڽҜ5 6(</T(eNX}hFcA]|s.x zܣ0GEGg§Qy$RAPx*bmSܦI*NKx;BlA|qnNqf"?m)Jc[t Fх/slˉ?> ҡS_mܬ'Z9 φ}iCc.>%[?xCb.9,O#㦀du;|;gcd5&Y:YzY%ECOb9roFm& ;՛W/J~v{HǶ%]AG͎W9z9j>^<=vy;h,CE%k/:znC]!<܁3tÓN"CA##NwKz3?uml8^4]w赫f?}vD^[Ev]G||>:Yu6u:78r҆7v>Ч\K-]4qG{>F.tN/͍FstkMA~]%xGRۅجqXa2= b dEBFa .E)])PG]>Rp)Ů́B,mbO~d|16bOgÕ͈!="b"a6k5 t-xAf,^ dmMؚc?3Hq+AHXL[ <`a↶Qsk#6[۬"qhԦ tkܿן~9E щ]\1뜍>ڬ;ml+|v|t$L;4{ȗ%uWېom{ιN韞65w)/k92aݝ{/N|hlF=1[odK!F08a#,W襀cMŇBFggyt;qPs7ĝ6>PZX͌+m}1w\BH05W6N~g r)zCGc={Leܼa9眹Ⱦ׽5VD֫PSTڈ=yp=.-tqgX(^Gl&[Ѥ(' FtezqU+e ɂcH iS{%d]g#yаM?%֏֍kS>f@k #ެ5 cхMyxɵa?͑7xe\0#$-~4l`_g~6{.ݨ٤F xuwM#&+=`Lge/ /TJ!@ϙmbqǙ#CBqc?266FM?cmb Oo;s7^y >mێ7$͉iuOhCq66u~t-ɶ+kѻ^/6KumtniظMt񨻏;1t>񍌴gZq v]Rcج W1UdYEɂ)l(ljR)P8 ^{.@t,Jm(=&Lݺ~o~S+zcV 6zn2~Mܛy&XbXXrӡK.i`?ØYO2Ȧ^Gp>љ $vr ;:rQSLz1A\.<v'lml|s؍t73m ͱnV/~(pFreЁ)sw6[|Goh[4vk|/hث:֬?;:y ::u޹f3FkmvNҢOl3]ӆ'¦m+gIY( PHY(+20b7):%!P){r&v‹Cx~'8t06|@e=6tYk&χ~a,4|gEmfѦn>~/q 촾b |î?O\>\oU/akGevM[6jlzwm}C[#Ol_2l|&#` Y'7 _GQ8,4O>csѭ<y܈ϼuݏQ^ _?2҆nO8{N㎶IhU9*Џ .MХ?g%٫lډ?p,m-ckx}<ɡhdz mCV{>Ax;j#bQĸXIR٤(^: h2hT5$,GthM~<~I<*s1U)zE#ucS@*@(қM(Pň]G[;zbI&1b?.:itӌh9t)ѳf 1c1+~;% ~k oL9OzwrKk ^rr!Nb>d7?^أ71Fħy6XB| NvU|8XL98XSAG|f:^|;S歡sSL"ve酳6-Y_D~nlutMle;`<z(5KU [Vqi^P2w|>}]-\=yQ=& gl?/ȝzes_XHlʯ/,Nlkhw_'qN;kesPQ*R8+hh2wps j+". S(HJz;chP(w Yvq[6&uk9dŗX>kVtf9NK5#38!#~ذ8Wek~imgxoc.yW\iYy;k~ŵFu}t޼l[;>Ysq>"<9_h>w <l4 O>Ntids6DNرMk=Mq6 ]ڬQǪݯmO?slOi72yFg ~m^{鏴KB_hҏv|t(IYS(  ŋCPP(76>y2#Z\x{ ~`as9y b#٢PDT(m|O9볍[RPsy W“?l =Nl(cВܧ~CuciS$F)Pͥ@?pՆ+bj E(g č^kGAnE'k&* b?/k 3=p %^kbdlb/V);U ?mC>@Fb K3*Z>y Kˎ䂗OX٩-ȅ|x5Y3_yNqe}ii z|cRxZv/j}mž8}iyTF5E\~"׌:lWGfS IDATmWSmf\|K]'8;36sl`7Al .s [=1Mc< tZqRKoĞϥ:>}UInK;~Nvw-Qm_?dONdk;'';3FCd~OZ8md9s> t 2[ s||9- /h6+eoC 8ShcG O{Kԏ˲-MPe:#?Ip~b>|tJZߌ+<:捐6qt`'~I|c61?|.Gn6N:l4|5'l/$|d  y6']qMt=E:gszk1Lg-[%xN,r{mM\>zF><G6;FyA _6s3 8?MJk rOg&]eoxt}M4𣏕ymCGkv|Z;kwg=PY s7noKJ!@r$=,m߆xӜ4)N.Nqc`)FEb'q3CAA+hMAt+Qv?:׼f͆OFw#1T,ljp_mB<]lw$#|en-َȊ[ŪGB#)}>딗u13o%ݵ%}~>sY#y%'6G{hw6|cv+zƎmtK~~j9;#.GGk W*opx#g9_- >88]r=OGs؝4;na֞l^[ӽEaO;m?O^W?er=qiT*z6xЃꯦCu촣vRGh~K.l8JˇM}#эλk?jY;Α]>g .mdǦQk 8t'mq֣]Ǿ6 .xvc|.rWF^Ztq0~UFYn c_7<]n\ 2?ig-k%Nd[z T Ch  HђVFd3ҺlR.aidR(5V;3M &g5Ww־_Z6~s c|_f]l<'^_PQT3/02.Ǝq.4bLu"b+vla6oh)-[$⁆{; (n@^k#豮]6-[j:BrR|"/ cw8E,?4lHL:!e>d&6]yQXj /lv 5:'F0nQ s=txp_nmy)m/t _=R7&׫Q_\ב'?ӿR9>gvGmJॾW|^]qxw= -N_Sњ{s^?/rI)b%:h#0S,F.9Kt6 wɑm8^d+6uxo'ɻN\d{mu6vExF>?#cdtpu][r2NΜ's鸙 6÷M7g٬)Tr`(WPV b^QAdXT,)CƊr[hEqS3E P,eS);VƊ:E$~:cWk߷޺?/o5UƦ'O|GΜ+Uc6 Z+jw7B#ot N:k+NbE;)G|NESJXnhw$ȅNrO\8̡l$?8$A9}9bذm˺co𑁗~e,Oy#hň mbC^׀Lё>l+$&tgOƹv>eu{O_Rw~l=nVmc;=6j.P/-Oɷsq]?V1J/_};Lsݍοw>6ry'l}$v9F{'Fr>9qƻܕ/:D?mi]|gC6|hW͝8?ُ-A} 8H᧘ (,-secQ6X(W߷;E6eY)NecAMGOM'om;֚;zfZ>P㯍Z~t`sA,ڊ׋X¹ao#I~ KNbcb:Se#֊ uKk¿_k`+ɱ@ tz% lo:@+FrMKVɟC(6o Ē%lc9K-ϖ֊5+,zF` @捷YQ8fCVr=rDKk7)4{be=5wԞV~Z'=izS2]?3\7~6]׮5^:uWkz- +O7AޠxG]/ݡ7n-?na9 rhYg]G[~Ms˘{M?r33Ɩ۶ޮcɮi2:%7;.}~lG?9K1i;]ǫx7фӥ>}|x 'o9i6k)hH LjUUp#TV˅XJ;bs\ecmh$v=6W?fUܩe|FsӟysU?~d~Yw*_V^e=6yo1fStl"'EVn10'&#[?E m(s6b(O|h=M6b Ȧ ™)#LmL~@g1+ VB/:vˆ6z}xٍ})!`< }doF#xvza E/^!'hMz6-Ó9c:# q5'2y"vԗ=Kb?oM#Kq~+^1yM?<ݠ^?~?~'^/ ^֗XW*߶gˌ./>Yz;"T.?)W]o+_g<ӛlГ"]Ƽڎ󩶕$Hk.!}n~tţ?# v;F2Zm~v~ æC.94>tӢˣՆmm+q\ǿvq,h7"CmKs{Uh9gRݎut;i6kc[u=Z)n`Pl*X+_ũB?Qw׽K4=9ϙ 6'{r {N&t=~Uۿ}Zma*gMWwn 0ݮ6q6_7;^U {b>q5&ÇX/8}|SF/>{a'wj]qO rD͢_6$xp(kzۼ lE~[7?6_O#7{yzo~ Ц?#Y“9j``C?tKW6la'e%>mc GƾC'.t'p!mGۥO_2^oγ[VsX.km)sޱ[99ܟ?xu=mztQ;k7-Z~wMZ~ϝ<|}ite75{wuu' //9ɶC[A^䅧>jo['E\l8m%ٝ|lJ>}1#Os=|wp\ߥغ oh#ø3Kquu߶N4V~sIF9vi{?p=O|ΜZ] rvٕ٬xhHg,T^! F.-2RЇN?Yz릵1; Ň]qzo\| 3nqUSm ά;.]?\HWC%sU2%ά3ٻMo>P/`-_%b'"R17w)AXċ< )tt@osR/frSccFc -|KAݡǶtȆKVƱM%y6L[1ˋ/lhh`->_VA&6F<>6)|CFL W5=t?w1#-bSp9w "g̻_5n߯M?ܬU?S*2<> h 8 PʦmMBAի^mnn_V>я~6uwkۧzUݴcuw7b#eڣG"=7 ߛ_Ϟm8m^†?d/ \ɅH(03/^Ebb_\CNtkl'Wl;?t?{g6hmlHHpwN|M?" fGbf/b`& g G!+/O>:h*ݧU4#]bg׹캂 ;N5`*c|ibWX'ǔO7D-ume~7k= U\y"*x,bK!J(FH֢nQ!;4]NGa?\~xREPet*Q;3%ufM쏖Lv6.w?.Xї4cc%2|6(Ÿ;82)H٩i(1 G;Mb_l`9X |]Yl'/8}ZČl8ڈCllC ESN9M2ېa}mB_5O:laxmb/ L lS{6đ~yN82 L?&gc~k/!^)Zki ţAr9B|F@gm#wXcͬ 2e]ɲڬ\@;;sGNs_ێ ڟfEF\ǎnm1çN8y#>U/6k'Qf3/]Y?&ز;9wmh:At;<:g_lKc&/C@~|@C~dGntz6lb 0DI.f&2Ah;'Ywf Z>kă~x0{#_a~c05!d\}l|dM ^="[cbq0F>4l'ɉZ28H /G=#,Y f*wge2%/߳"cCAN#,_oӋ.}΃ml8Y@ryyv3 yc|kӏxظd*;Wd,¿ʯ4‡f|m#۶-]-VGbϝǟK;O{|H~ n[rٕpVˣE VQT6[S()`Vhm+b~~zZ_ ٍUbR>mow}~OU?х’oG%hlW`xdBK O."`>/?/E"N̉rg#ӣ]~;eċ  g7{S:bu&xM:crI6 ם~J|?m4rP_=tDd88tws61h> ȳ?sbރ.-:dͣO|;h"l:-ÏEBԹ6e\p w \ 7RdeCԊK&> %xlAl.vE눜%݇HLS-vG=>g }3K-6tǎѦ%ݻmwΣ.y)K\ڑ6m۬ɶE{m%9˷o8vejK:ct=9mhbZAc y[G߹ZEP!P*,B6 /Z+.=em,T؀(rh5P?k^2Lצ9^bd(tgGK\Rw~a_>pfFϫEֱ_hٞ3K֠" ?GD4|Y86=ťXGK(T f9X Ϝ:7$<=t!'y;x[NI "lsl.q6+bIGDm*1C!؝ $ٜ b6th#O\gc^6;{ܱbj`W69:ddlh$^n#7]/C_䎼`o(#c5z@9GfmyG:?8xGۛ~_꯲eK:.{H4ǪņIΩUk]s=;GWbm1/5 R+tu6q?)6k= Q i=p b9xEbC"F"ʘ Ekz-G A>Nm?6km7ݹ?`kO}7žw?`_6)tZ-<hg]t.^^,+K,Ӆ/tw6eX\˚<tRGb{b  IDATm G]%'})(t)?f lt"RW|dO@zz{['@oLR~cR3<}"ËPX`>36` ?>i&Nycmb7zl¯ 7=_?8xn&ymtnE<6/n|'ڴ∟>X|31\ e萷b^of+<@.`#Y F2/^r#8g\{&/K'_=9/И!GG-;W/9MFqnO#(˸ӌq$ߖ~/|3{ _䤥U6~?mgm*89[/uTS(C8ņ9MBNQ&383oR;j}u]KiJ2ңB_3U.[_`y|>&؛1݊)udggx=ZPT̹&s")ylS̡FQr@0q SJ+.)@7ހmyڄnݾUنn6]F6]^dWw$;U~oMK_mz٫hJQE^IJ-hGMN~CaP>+^x e/[؆M)>)6fM]_OrяKs=ѥcrb<<_1 3^}%߬q>aYl%Ñyx=y#F6C&O ` =Z6ӱ9[קSK3~kpգxoE'?l0LPC/D~gO]ƳmG6 Z@ LG\Ohm\cy޾(>rgCަZ%m14} /w n?^!i֑p':c4|scM8sdw~Z{iH!/;móE'o϶t?ڵ nK\tvut?6 us#m>22(_~QW=? _Ynj{~O͚@)^G! m!Ű"C"%*9wlT)V{a OWz.Ⱦ|=۾m:U!E"Wڌ]\+V1vqOt-o9 _x]9$Z l:Kb*qd3c I}ɝCΎOsb \s -t٬'S9QˋÚDN{cv=CM>*@wrW6fWdufnMƹ[ȵ♢?~nl͇FXh絩o?_D#X;dg{>_"c?W_\ qE Fa_QD"*Z11G"*R~soFGLwgGnpM{n{U} }d_ 2zKyJm@f.>:ةeK. V>)86?| rЊ1YEo7>cl #ωveS_?k:E @&G_Ïg/Dlao .vu WBcLV'x$}.bcɝtdF]w/ujMoB1O*c}'viVG8Majsö@f"!hOGē͎m0l"'`s+`Zf#gN#,uphѤoL'}EAx@9uΡ:X:wyh~K`9d aG13sXV}֧˒qnql45hʆ+h_#wī>9:scr'~JwvG#9?[ذm?,Yk 3@7҆f >|te~v[9no~uޱ?#}wU6wU.Wu#.?ʂ_57wLOko+?2FzY|#U9thKw|>t| -Yh%>:>щ68N6AlDb_ oxڬxuARp*Z/ Sشxԇ<B4IS8B~66o|+G]7Nw.1=1~aG=jiI}˧~3s;OVq^*vHVD9`'Y,s[u:Ψ;}6gdQL)^ ܜ$R>-%0 )Lv ȡ v@rx+6JWFly9 ć}lhc1ZcR\i x6 镣_63tg:~'@<{7A%} MI~}xOO~;.z[z rt/|o|y0:NL'?gc6i&l;禍S$G%"Z<׹Ώs9rdVLbʘn~n17v`: z^.*]]>yщ&MzBu]?2>>mqni wP8(ɯT:Еs [߯=K1Ѝ92^gH3n[gCk8Á.㮯~2~dّyK7;ͺ:}v\U"r,(dVLbt)<-.wB5w'wњZ5`""Uzf1DMATRRE#j1GijhQmi~3sϽIn|Ok^=>xf]{k_;#sUu;qn7nZTz?}Βz F\a{Z~?Uᝂ^5 $Im^^B>cѕ;ߖOI~ ]:7I6MA5OL/0=dwx  CN䥘! zsmn؃ 85=Cn33|ŗ6|A׳a+>c?]]o- 2- ݩ}/x1e=9׿4w:iOCtȧ# 3pX^t zj2xg;3et|.ox7En1>| K>lMWg\mt3gL3ޙv{;C֖]gmgC'#oD2=mDijEZ[?E|3CV7ch}8}~'sק3ފ6"{D&Y4W}uavA$>= H$+p;$,!shA$Ob^"\ڡE6-H_ 2?x}1 7 [ܛ[(oq; }$F M^쉞(7k'ӇZrb/D6>#e,gh8G1 O ':G zi7zo<1I:p; ߵ|A?[_hwqGz-Kk7?>ΗЇ_r=z1ϣvj4;>;_Hw{9}X9{"C}F:ѕ}t[d;S~ѧKt|:8^悧k{c>dn= {ӾZyzOC;}^܈97h-X$'znO^#W&:ee7e.蓕k~] ͺGkqH>Vou%4I\P%,p$$$)U PI~0FGMLo|$:=RfLf \62=%;mc()B&h4G]o8hѹuo<O?}&D7ܒo1F+9A|zvq 9'1nᇖ6HX}oc1p$WiۚOӉZTx/̏Kt0O~xo;kOlF'~`[nϿW[/V_^a~y߯<Ç ÒKgH_k_Gaϲ=^2rz^YsnؤDE~G]>||'rɤC< |EdK|9+tȾILostHӘхu|{oϮ%N/6t>bU'>.%~^`с$ykpNgl]JGĄ^MMA/gqob.G Qɰ99+}uܴncGpa xVv<z-KߧVpfF=yA+ֳN׺ /? ^ᘺv]oS{5|^w8E|YR81Vt~xP՟7%a 9,q<+C*<'ӏu+. xO,sU9.Y {[4~>/ 8LĉRs|ZE;sfiwؽ-c@3 y??bfm9=ϺVX%k($KnZtK_zL}H Jw$Śy AZsd NxHhx)Ȓ×x:-ONgKƒ>}I+_X|IsE[|i\ DQ")tXS= %L:7dqua -dсl7t_h`h{I /؊?xӁ )$#9mckw6~evӕ}v)`-%m$h\8<=1rk ߬su^dR |;'Ç򟟨8 _Tٿe(BLh |8\~p>_2%ڞw<+g?@ւ -?/;nY=k5D1QLSr^=;)xS>яu]{0EB~/k}n𚓳Y똽e>st})8w.gx/,aS6\ׁGnZtGgx7^&tdX ^#rwD]=X(AtiH{0$TI8@b!y$x8@ɛc@8x,䛷QFFg-+yewם~N`'Lsm-9%nucy | ((J2 +E662/z'ZŘ_%nRHJˇӫF}ɇ$tGko%|wdYyU~g ?} c>Xb cg3?rNMff8@\!~G r>3h/+r}5 IDAT?cq5a]n'3Vq΢9ճ &gGQrъnyˑIEoK4|A _/_*W~衣s ܾ]WE # _1#'q?Rkwb~V\'rob p#Ndэ'Ox9}ys:`/mΏq# y7 =I8Z/k^ܢn{w}>4}=ş]7}kS+uf.xw9ܾݖu6y8Yv]5z~lIS?Le:xu#Ӯ+ ގ'(vO}|V7'rs36~s(JJvoW8IuĹh% Gb?q^Z\IM$YwH C7 z O6-:=Dt,M,bݖxs~ HQHwC cyb>epEx4&u!{ԋuY\k7/ZKKV{u %:?Ynf^OϪBmzֳnڽ5w[WԞG[.+>?4}s@9}qVjɃO!$g,>ZCsۺ yL8鋂G~+`#1ǃBpF719C 61qswV췴M\Zk]_zsӭӟ)MֻhŦ~nWn?|oH̯o}Nxi7dw߇f:ᯝuȹi#O=Zڲv?4:.q?g@pfgX3wϩN{D&80C"a2/ptIB %֒O!Ano?-]M$1I$fO;l?k,$rKy0fAv BW`=vAgp G8cN'h RL.]E ]#oВ^t)L|GⅾDŽ/̑͒'jO髥}]xG>/ѓ=YFO@G xٻ1}Wxj}~9ܺ*LƻW-F9+mʊRfdv"=;CMivf+xNc5+\d֜+%D&hH)KV@کrk† t2 dO̬6yH$x |g[D-xF7XH+|HIIsH.v&o_tq$$F*\9u V+ :W-SMNvx$_aŗC!&|ӟ\M3al>R\%/4~곓j^ŗwk/x8Gf\2.?5znG=|Cz g=!'8G'D'~+{\VW8_u*|P{ ^ߨ]wLwl*}顅ZA3iߚ͹o nnĂҙn|4s${\IwlLNsxd}ڮ7şֲM?!m/C?z;k;Cw3EZze@i 1C$aP|kR%蒬d;$"pI~K\ۯnn|QG24Kt +OOxI S\9耗nunԗ@\7+nEK'|*3t{{9襘ctObK?zC,OE ֹ^{G>/|'<዗y xbK|(Nx*/UX {챣n?9}9< n6ف3Fd9}:zNu&3*`MWos} )*]Lb|ci=ng~ t )2G_A޶ӹ<%b.x7XzA5|٧C+NcB<~ϜV<a.~_%5s‹~|aŏs[o ? oz獂e<<K6(ksdֺ g |g8t)4sӱ/j7Cע=Xc@!Qp$yTcJ$ccI+)JA#fCY7 HЛ;ɰ$їDI@rM.yȒ%6mdzkIIHhΘmu#Otlvk|? >sKmbdX$%=rzBb=).7HFbI~2`辊l/.9[={.I:%B9Gw >Xr}r|zORx<9yĚD8X;;1|)\a'*b3wgqr%v31|4 ?>'6l{}xV}*&nhqw>qVk8 dB$e9GT*\I\I1$YIf oӪ%1'KR-BDX=3/ّ':f$(s%AD)nGGmLѓ`LwYDIH덊^!)#_6ёge W /jon/s|,U9ĜL.1!_k8᳑ 7t>/c^h/S1N }9諵}alw]㓽.ƾI39}L~ wgn.ӵ>֏3vO淢:u~tEYOCXenUKeS8泾-s>|tWtޟ1=G8Ve6̭c?{ ϾFN ^xTn|nע~p7v^Q [m2H"Uo /`Ӹ&vkrR]IOA&WD$6_*zH^ۜq >Iɓ\jDf63||gKܓ`>ÏiEu@o]CI"h=lW}'m vE̒xߠ~zStg'^l y>HN3Op=QxJwfOI}j/_ht}٩#4óo ~wkÿ-o+]PSL],߮XTMo~|_~ھ98 _u]3f\V]~d[asi_875>G'nBv}˞1p}Y hќ<|2=csdz{٣11k Ƌ`ÝIΔ"NS5_6p{?9u|^[F6^=6t"2?ogeyOe-kӟ8Nǰx:ݔf0ѿ;Η?5>Ț%9k7 ٨=XqIR|$J@#]W{mlt6K3'u>^dHeIR$Qd#3ɸЏlNxI@%H9`^'}#'MHD>7 /do [AzKpLGxV_G]١74?KꭱEË|ذ..Po>_/V»H=G.T߭u|NUʹtl=J}wc[Γe>S%D]<W :\kKL`.w~y"tfc3W1W35>&?_6=cώEv_Ԧj|ٷS_m5]+u=ʞ#gBK/ѕ4Hl$6A}N"DŽGrցDE$\I"O$*-J>\JxȔhݳnL4~p̡- uhHAS$#&H$*nPXm!!)v+P}^Mdw2O8+w:w `#$0Oo؄lJ!='<At|H?\5BOoz=exgf]>{_?|.[/ yYRuuS֫֋Gaw7~1o{p_k}/y*$?s'>||3ÕSgM?}ff|Fj^{Fώ3got@~os~7godϊ]~|vk=0_1d翹>n.t}[gn|`n=k6&oqs'Ut]ЙKJ?Mױ+:㛹f}xOߌIsW'ؚ6G=6-ص'g{tln/x,2s2}num֗FpC;=X0I`I<|hN8U@I]zUŀaCH2/J2́WRq" $&ɥEQ!.8zc-tы_!R:saϨgS=KO13ՏO J>)G/|ȳkl÷kd<|9%|(*|wFg{ nb^^^|/fu E-$x(Ԍt3s@谈'Eñ~Cu;יִ|u3vNm] /Ygq?|o|hsW(m8sz@e:'rgU n)/c5s11k"\ui?Oe~‹ns|OcBF6F]#7*+][ wfN;^Mpz<;].kCY[vG3mVS47NO1\SEŚ y.(ɊXr%(hSbj>ɵBwsLn$6>t|%xZ0g$(6/A! 2(&$6IR۶$C-٥8cJ_D&7ɨw3*Ov"K?vR! $nDO1v%~"ߒG@bM>/:Ϛ1|zK&*/Wl';<~>ֲSx qG'ktdv }i,O˖ /6#~p=h0 < Ußٺ=woxCAO}x͛#B_Żu E {9'89e}ƞCM>9(>|w|"~+{nNy@:ӹG\A8?[3#9]t m>/iN!~vss};n{EEsAxNe-5s]EgZcr%\l:֖:ވnBgLŇNT=̳+Y>{N"uЕSĉ bSVu5KwVBR51<>7'?UQy>C<`AOH?7i#wQN: ['z[wS7>?=ǭ Ult1/z:616~^`!a2uk ׿ͺ+rD3DRiE"D5sE+sLbʇDzK~/dglNlOn%)gX RF4b堋93ssſ&͏{"ۖ>\W~e\!c_m?;gێO{ߩoyKOW6q \:1ήؖb|ǯ>_7LtbiO/ 8'x}'=deq63g-ʬsC&x9bK;`[]9y|Y#?K=k#H4N5Mf> Lq|f8tivNuxE>ؕ1~wdħuКa.:G:^8kww~5WӾh8BwVM5wnNsaE~^]V"h:ndufŽPi IDAT;Sk)O~9^zHz6  BHZ$@oHT\r%~ ~$MK_ |&y[ s &?]@ɖčo+')֮QWMg<?Y~$ +^K)dhr+8YD [b.Fd8yCp%y4zZcIŏ$0QrȖ|+֜7 sb&nZqG`P!]V;u[B<ݣe{|=v?><Æt2ثa'C|^^xLq@O\:U K1Ϗ{!xZgCϔ+\jùk|>Xt+Ջ|D?=ٷxDWvE/kξs.:}Wo@_q 3GN|3g\胟qh}ܘH;1u\& t=#zeuv37?~w72g>pwUq>@;9gL_혎ywZ[<6_dvn|-/,pB+YK:n&W$!IdcuH$x+8QC IϙW$,sH`CF-|0՜AJJ|ìBz‚MzHdcW@@b#ď`C?~U}/?{3}r$ޮZIGGm.'CܺԞʪU{cN5Ux(@QB ^tc|yno?#y (K~ Hcԯ0 [^lV}N<{8s[rxܟӥ8Q: b9WR]q-}tHZE{_On{kp~%>-o *x=N==mt>+[wE[VjPϫnzdl.>OU2 C($ S$x0+"ɐ֛$H&'O҄W3A2%ɧS$kl(JGtlSbHP*VQS Ƀb+X7Nrk$:4(Œ%nIF{CvtXw䄞\3wD>Z~w_1`3sp鉧y{8zk!*>AOG7pj>^Hokd;8'^x/Yc>O;/9;Vv> *Q~u*PWU_Z=L6:2?xo>~1F:ҙNKW:,d[]Ϗ؂SjedC'No{ێ/6]`ܬvWt{R/ڙoWtV@0vt="+Хu݂6ڏnigwv}S|#kNt=f M nc]5}=7]]vs2;?xӣˁF;{|w[{Ŏ_/g~YK_@#)qAt??r,n+˿3̥G1(؞ZoD'w`}V h#k:ց< QIeMbDŷ#ȗIR$?uV٠ 궒ͫumZ8>e [K\p'I|KL$N!v2ϬYC襃-/g>l cFW>:ks_ vgzl nx7]k)Hn5[mn(h'/F.dWl`g E1j "7/\xI gV}^ >z9EkE8| W _Uw*>c㵯tBw_?wpzuuE-t'Ϸ#S mε&Tdٯla|9b5p\gz׻./~Xe|p5G| S9D'Z|gn^s7<x-2?m6ޏ7{:|t\o25=G sXϬ]/봝g\ }wtssɭݞR沎ggڹÙ[ucù}O~{{89~0<^$.DC2$K"Q{O7ydIcӑ^S8B2X'}͹ȼf5>WqŸ7c_[>sk;>ȷ'+7W;4ShYh~Ӈ-v>hŲ-nwLK@ĝ~sO 2;NӮ9幎mYy`vGv<\|³g/;|Oo4O:ח$I27J %lsJH$%$|\>@r,>XGx 3vQ`gV0:CZ&U0%qsR0ߘSp+>Qd([{nȫR;KwE+A{>:kN"}2O~_jp+nc/Ƞ:g(e_&N7_nRop‹؀L~F 7 {NSu)E_B`65z!5ğ+{.@._~G /zبM,  }!Nr>t;nŏxw?ߏsй˖|qJu{O}B6.8{\1xxwnĆY_0uQo5U6kb&vg&F_?'m{6b ́>?;xvQJO"񈽫Ee߬uߘ sqSGgXs;'J^ Ozғ(($$>9Ixz֓/$I8E+ Ɍ+HɍAC2䟴HVo),PxTۮcٴ?|"DI$[|)_$jo w+%ߐ+?@I6H>^o$a+oq|#9-$)\̱t`k}Wno%prp{oO|HFw)|}O'ƒ/-g9wSI[|kWUGg=+Q׫v>?|7=3:=_Ӌlc4I?\6xNLo8b|<_à >&8w\xӷG#Ü=k;zzf6x_?^jvka8O6 u'WOt7͘\s3 Ϫ¡hcr-V?1Ȱ7d.gU1|Ëͦ|󅟜p7)kS|c_}/fMs^g c~tSKFףX>gr]~swֺ,}DN5s)^_۪Fd7v!CVCkgtB7_*O_v/ze64ᕱvn.}mjGb%6z츽?;wܭꟾ"*3|EsSob{J\'8["& ? XbS'.0/ XCHPGyQ _|'!O&[NRyUE_фRL7=Y D7Z:vX"f2E+ vKLzsa<8=t $R`^ a.~3,2b+Z/Yhdc+^3ԟ8?OC>OO8xЍ/ʯIw8tpׇ]/Os N\L}5s onq49oODžXFz#j:Mis祟qOKp3.[x/]ǾNcp6n./x}=9guypV?"^gyvu:nݦ9Y71/x/?$Wi/_J$?81>pّ#G/4ٗp'5&B>cU@on{):V ᱉(V#}h7{)|^ic~YJFN?r>D?I59+z{H~H<&I=λS-ToUՊߋ>zxh})凫lx^=uPjyB%O2G=)ÿwZo5}^ޮ>0~++&2pN83-|Ŀ|=:ZwtCCV7zIk{*k5q)dnZb4Y5N|:}^d=Q_ٗOyltmw~ppEsߔ8:޴4q>8AZuD9>"6/kb><>S̅fU˶U0֡ 'o#zӳ9{4yc;tFqb-x&wg:ξ:S>[ݷ?Aڍu\4q6ҟs:s8}.Emssq*?e=m襁۸LƜ^҆/9>YFywg+x:^6a:͢6C>ki#7z\ă#|//|G~3Nup7[~C+n}pzC_M"xF֐rQsr%J:GR\AV')?gr%5ICҩ`pKphu`ȉA~J$VlJOAf}ptDƒQݬ>_|}otчtp;=l$#'v vd-')pV|}^AZG ӗ܋T* Vb9PhV%iW_p>W 3k߮/(āNΛbv=1`\17 Gah߮ɊAtڿQu?&p<*܆*/X]rpxC#z'~zsC+YOQ?țNGg߾Ug.ƎSWj^_xRU^ǿe)cO1~7?~|s:GNxU[x\ ~7\2p{kz G1ܰΑ[hvu+n 8հ+xn6n_`;s._gf3G.ؾ.>YqwbMy 'LJaI듟uTC=t_}KG#;n??o noxsI μDD$Oh2K&7ʾdGUK`$g 0[=/! <6Nup% $HǏ,O 2c'@Jȥã+Qo=HlW`Bsβ*;~HOe@=Mx)$@+)[:N7IL IDAT_33-oS|;ezfx9lqwǫ`t'9 ٥*G 'q/vpJZk*'s<[|()Rklϲހ[_u/4_\LJۿXE7\j]alS6ûUqǸ/k?R?`o`?uxm ._Ywsߢ»%/9<~k xo9:m/8Kh#qG;3}H瀟vW )>}13.iW zǙUw."\xf]gw#sgǺxSwJx+~k:\hkgtޢ)~wzQwu{?.fwK%"=^dG78`| *f5l+3[^Eȑ$HCtH%rA$t5ɆH%G Ix!!Q,CkpѺR+ nOHQa[\<gW2N:Z-^t.y~6BG\ jo "^wW/V<ϵd3>| sTņ}I=8? yS4)ɕ9s,SsvzI!޷eOS+Qr όy귟_/P|=x ^0^):w?<6_nS|s\㊑M1;*Ib^Z?6M )ά162bKx9V_^bt`mr,Wꊖ7sOX!UXX^]285ssl/dWQ[ꋫT6CYO}_\u޻oWQuoxxG}[%kӍ=to>V;>#s/>r'oZ_*Ol1<;htΊGxZ+'flo _D)>:u[)n~U?o;b>Zhmg`96}{*O},ΔVw֮Nk;ԞeӵeskK;glmn}:sd.vK^wtf迊X3l}}dee.áqlcY?64}^?_p:M_4>A@d_g.̣i/^kXn(nn|u;Uq )| AR!`Z GR0% pX:IP|WI!=Aϼ[n% +s죳D3HLzG[3GÍnӆ_!Ed|^ღ'&ֲ-/c}% s` z19|Gl_ >]aYsWEɡfN1`l:_WspQ-joVr~[:czi=I6W 6S EO}uGs՟oVQp;1\/X%} UAF;t'[AOv=pr}y[|֘أ_t`0?[tZOoCŚuZKo_uuk=)(}|xEU`Qy=;gn{NuR3|Jx͸k2|5d=6Z~<0Y7XxKxV<+Fi߬-l-n::~h6C_,K>_:M}zc*#x-[vuyn)ֶZ)8JBʚ%%^ً! o@(%#I2GF_!:_K}L:i}7Hx)^$dXsDE!8d+BG2L@E7%q`?D]z+'ޝRIy{:]^l$ $%~tgGG)]WVdW~Tɼ=":H^bkt)osWI;__О5ȓ/6jTW>V -rOB͕$/_}zкo~̚ uU} ~SÅػH}*6~+pk|Maz9GzwK?pb*6u})+{VGĞ. Es~Os%f}`MU\{Lq =/@8? _ϥr?,]6ٛM~kk|Og}.6x~sX'>^=駝o@3[ t}w+Ƌ\4O沵S~g˸tnJ~0θᮻ}◭="'5}2CNl ]]}k}>?]l:-3O3+{(eNʚGVŚ`xۖ"C7ɱ[Qۋm+8'朻;? "=tW*I惯oN4 TtDO$[d8tpCssߠz\t5>U[%-ԋ"@l"LOd)qBW9&N"no?r3h[VA?> nzL ):INyJ#/P|Sʮ׮t}*zIU^=w`P>?#_W\?q`祽V`7X_"|f8pM62?5KsTVѧnE}(v𽊋3ՏZE%"[9/R_x>\cY*P@$f_;Nt:z9?Dmn-򹒛nGۧ^乵.3 gZʾf/o;gӾAG6=Xeot s}<Lc貗̴uijtyw)ߎS9thֶOEl-a7GwDn7f$x%Z4dD/<$[^FqۺUϕ x:BGyEՕo2Q֋58^JH':G1y[9C'I6/_\HrkHxђCu!'mxkR0͹Jb|u5u[煫`ڧ~{<\qǍWDGU,EW_Tgi+| 6o\U$b7qd+&g?Z7>CPsx.o 뇟s`xX\oy6Y2 !Oz;sjGO?KSpۧ73ڣ8?F/E*6Mo6:+P3o؛m /~r;Alxl&h쯭ZWo]g]vFU2VN;bCvfk">ǛuSySݳ6]:+Li]31[lF$./-a޾zډ'8JW#$Jkj%VIfPyFELWY,QC#KAلh)Cr:ܧ\~{wﯨ2"^ʒB͛[QWPw&W0N!$?I@t?H`mb)EN$G>e|O^ԢGG |j@n?v$N9$X?*Gu;VzUuŒ⺢ah}[zңJy)u#:OK>dUj!dF`6}};Ԟw~>tW=nh]2m>z7'mj_Xsj3Z 狱g+b⃎M3܂^]/~'E(+^/.lz5TW|I'4~hE3aQeuݎ|ƍ< `t. gwC9vT)2)q|;mc-}VVݬnw|w#7>@֌6mC[eLq28eó]n|R5G-wY{DM3;=;n|g=s=h?=Vǖ\vezK8~#bM|*}>]W$Sō׆|gjO 4b4HB!{hsU?lhz6چgxm>h37m#kU6f]-:uSm'siw=vmg[F1xitZEW;_ m3#~S#'ަE9yq测T~dO|z?xe]w}(8W덏2ŚDG|U&a` z}qNt]n ye ]/JqE͕5J$bp@ &<$y5;>3[SŌ~p<^T?* QEaRSoAݰ*WW2% 5 J=|b|=乵*@ I矃5-?81Gꐤ_dsmDZ8x=xAػx_nTjVcR؁J E+ZER*UTcyUUC[TQ-5 P1sCtٞp=:y{״?k=<+&i(܆Su*vsxAwFo=Y{x%\Ku~ݯWrb!}2jnJ ^Bk'>k%^0&+c]_ *_"XY|n7OZ2-৾&j7[z*qw]^;[%ҵ$]-k!y#dNhv;W%n7o7cpxËP+y;T-̭uEZv.S/y`=wݛlvzCkg^|^!6T]s5g;i,VRN_Z|_lt-9'=|͜t6^.=lّ^ .ecHn{Udv}muߺ:wI{?6s# Ӈ&}ߝ1eev/%>o;.qS}S:.%}w}2}[G;励DMQh}H`.hɮAfv)~oNHpj@)A.<m\v9'HmKuzMwI~mvZ-"M/mx(x:O[Ǖv&VH($l~KIݯWieU %"WKW'Yx^;e uĎ?tlP2Nwg z C\{'qeO2ucn1wt?ՏWJ)R;V)߻U%qz;^V/8_׎7k7Wϫ>rypY'Yg|nw':}Y탟sEJ6^[zy d J/T?>#/W27t9K-4 4Ԛm\vfQb廃ݗ>~ tK.^˺ŰW]ٲJTZh=WȚ#b Km+yzzJW<:'\|0_F;%&6uN|ozfl2f/>a\+? g1A1y-/SB m FIvRHIFGuz%Y T&['n" F&:uJ.xٽ!M#~in<7 Tz]K,(\hV_g Cw /^o˳kz]T;Wg.Vto)t~>9զw>Ifvanc?phEl[,>^ IDAT^™[D_[wK3MCksY'T >v)Z+YNOߣ/`^!|9xw+^qe߻gGTx곓st%A^r ukz줚*qO#SN&K {d['}=)2[UGZ{/U۩u<1T2wz&--?޳Y>~3js~J|sq ЋsUb{ӺpqZ[V픇of~'ՋD!ᵫȻ}Jܬc`~L7/>s]J)@ ]v7sFB4΁fv\ƅf2jJRW>O|뼗ǾQ"rExb[z io XOƠiwz6um[95fK;d|){_EƱ 8iud-N0E`"0tg *ZV-ϱE7[ ᥌){_Lglx&gSr:. ^*S]StX%ouYӔd,H>|z;u}u^)y & ߑN f䵨/Y^qE |( =\-J ^&8 IG O~B:Z{ _< _Xm$rJAT5rr0;?dãIx҆Nk ~J N!DlϩkU~ 2+r@] pvxR:&JvJ"S"a3:u9~zh;+=Ua;zrPtzukg9oy*QXHz.Wt83qs3[^M/1.Ukm.XkTq?J^]j9Kk] Ǻ׶6'E 6~bu|e6W=[yh%'pZ_ VA]?%wR‘Wt׾g 3>6~b>_;ܭvؼ *;nX{|@KsQt-qF_|IW@m8{zY6[m*YSpS}t(k<6ۿ"|ݝ꼖鸬h.^qSzz#]zHE|Nٱ/cϑ"G%3T.8d 09 8NΌɖ1A$@) FRz=]Y|'4'}z Gg4َW䑝L0N._o{VݲY" 5ퟜVzVtn R%&㕠d.7$xxO}Rd[خeWH()A>`ĿC~PNxK;lziʣO-UO=𜙏K_ ֓U/`d>^ v9^qђ_%Vhxqzꙸ׭^>ZUrup]iMяỳ?ȑHʜ r>` 4c଻u~w9oU߷¥-8{j=E91&zfMM@_}̵v|` ŷ-r Qg?/U›Kg}͹D?YgszSeT_I[gqg6j_f|)| >tJ;lgezƍW}}p)2?h:]S &QU ]/t9e"7SƎ474{8ϕ?K%8r3>:c]{#@Fyد?4ScT22OxO ">?/܃Ll+X .-ȁKЙ,D@nM(Т 01l /jcH}U76 ?%t<y팿[S͓ JBWq#zvqHH}h. $t?vA鋟@82$;c̙a^~{>[+>ޖzu#}˶|Cho3Og$E4s[\ H|# CpUUS/:pt7>TryzUd-tb/ჟ~>7GN̉yusJ¼FrsT/xw払^̋ճw*Zf=,Vہ6{X3lp/j=-|C>B5}I}&u 끕-3ʬAedAǛ'\X A~{hF#d-۰{<њYX7^7:AǨ'qSގGX\c;Er;B3neޟzטV{;Evf2ſxNFWjçIXu@DrR<#lOЂrz#xwdKر7ұECgܠڷ|DMWg+]{hhT'}f[d{г9B3]=OxUŽ+xG& ߍ`N>S$Rt@-~sZONdMi$wJQStxG7m6u2oƙy̚p.:vR%suȽ}3ELJ|GX8ρˎխ-Qt%Zoti0Nvn=e|>~O;M;x/[lgkVٝ\ly Hvmko}cKHϜ/f^9:v}x s\XWz[ K9ƍqLKdڱ7}|MϘu︩݃Hq>u >Di7v鋭o#G?N27_rz؎>c;t2QNSe=du|Oq/egܨSǧc{]#+L^`|?1Nvv[Z]lHh~^`@&cF#H FQg iIl.t$.‘'2VI _ņj7z>klWrKFBSݺvl}dzyχlϘ$O@>2N]ɜЗ&A'g'z~|9q聾4|Ї[aVճj_ ϕ a8I~ R^qJ/_H=e'KO>{ >}ο8vh~֛ %vLQ֦'놟aG%E;vKұ {j벶V*٬/7;n+u?}eOI:su-s~IֲATUQ (L / G]Wd'48`O ]Huѐr>nWn[ZxK[jdO&:2 7z$l@nl:҇c_dͳ7ߨ"J2y),;vA[wCbÉJ 8*&Ѕl`撾掽:ѕ}d>mB9H)~3':%ESw{g'5]yg9g#=W|J'Գb5 uI@ n[ #v -7=AtNց-^J6 ;n._?ƪGT'ծ{y)!֛*Z١]=H#kguJq}pi/gs1`.d5]Du6MNW7[tAǮ(Ɉ }7U<6?k47`wH=:w:ZkGv ۰=f+!k`jNӷyt2E2B;/gͣG3SuvK=}MAR#?|S:chFysO_ïò}LoĿY2:.:u\dgB; >e{ow&zӇ~g#wo;3v䵨W$kS8Mp8x@ ʌd ~ ~`\ 4Ŕq#|Z;8ϷH/!`m.3Pϙ;ӑˎqnzɅd-n~X)n=7_q@%x[͎g.Tztrgֻ~s᭍XΗ_RW/T-.Ջ[|bGkWoƼo|B'vI^x}.f#I f{𱶲&v?_s>5Scͺ?;lƦo|N܅}|SݜpRQȹetN?v;ʏW~OQ7<ȣ!wrU$ 5knil=o8g=(s '?YeГ^==:ХDO&~zm kNGVϝyVM#veSg#ܷzs4;O'lm/ٷ!tqO>@h/v >WhtN7;\0ʹ%iObȄ>P==cA|/.9a{S®]W"9rgt dm=Q_oIqJp&A ^@'𗜸.@]E"LxI"r8e$hhn(}M;% g\@].v{[_Xo*^%W?Sփ{Pߍ;aCO}j[~%r}ʖk+>ok/75HT$\ߧu3B';lqNH?uAaJZ؇O- IN/tƒg4X;3n_]KVnVdU;/}#f_>TVXgG2aSS68;F[7Z|cLxYpwYkxh/sf~kV+׺{r^P߲e=#7CMonfNrСx#;6ht; 齫e5te#?GҖ]FzdeB|7ot1~Aߺ3ᷫmqoo#`uhG#)oǤX$S%::VϜu|p_[ [xGCSv_O{oʿ;L#:<}O .D>6G)ïc8^{ޝF=S|uduɚdh% `mCބ(@l]D&*wڽ{wN'9׹uN>V^?E/[y7'kW+uvt|OwOwvJ|\m<^pPս#3z t*h;eVc[ Uߛ?{m/T ȎܪFGmߙ?MVy_ Ue : tξVs|JH}s*7__}Y,pZկ>#*eǍjg袵Ś %/y٥l3vIƌudmgMO|x fZg_?@΃ C0w>">\kkzi 8^`CokߜFBfz%pαɘc<;7/3ޭkzQ@wv9-)eCZu>kmdMuن<;~.vd;2E}-,uY(+QPfJ#Dn"=,wMn.}S_Վ6Ee终fg{MAFrt'uKTqx!}VC`M쪱 K`%@+]XKC'hi KDA`S ⍟~WtϏT=7G ȲMfKV%fǼ}~ל]4E;tdvk_{v:ʯ ϳE5:[`- XGO6-{Ш;ؕ\q+KJaΝ࡟ĴCӆH>zv+_yJ\?^xJL3߷*9VNgIO=/yvȳ?)`a'K[~DBП??2ut9_?b IDATsZ{d oy[`,ۭ}k3522Eg!^I_Y Mlzs7̜,; 5} `O0s o ?߸Bߩmly|h^~o϶mY=sv>5;k}$@e&(tnzT}雕(g]Mo:E9B@+҂ N$xMRJc!Q pwE8 M*@ 3ɞ]N?K D|?yJHUwZ=^qJ)kw$A+HR3oV |f|MM{6[^IQ]3\%pshZ1ijkԛP=.ܿ~ep%.c^O+ :?l4@aa㲃b9׈6_+ge ;Gr>Ct =tD漱6?=$Uk_ҋ 8%>Zo3Z2zf| xh&kY'{Cg1v̻9Aray GF5ʜF8>#~Y;R.M_6çO_t|xl<;.^GKEFJE.1`I{N>yGqyw{7:x.ꛢ?Xݟ#moz_hzzqx>']QGUXQH (}ʛ|^앷[œ+;# Mp~IZ / X&dLuo@-:aldsFo^ɸ n0;q4;lW;F_._z}Auc }_z%/c*9⑫/~v4zk"ݒYp6@6哸гOdc3ZoS/G|F+S*@oE?>'8v/S/`.7{65>oQva/xI|St%V"Fz &]̋D /|Е?yF>` M`ȗ৔<t|LOǮzFr;5|\Oe ;Ho 6I gtJO\gn ~.a=ӟ daٸnWsk!wGF.evۊSm}7>:g\xo ƫapYpOջ{=zel:Ф:M)3vQql\]o]29#ȅO]ӧN[Q߈mSvf|c>%/ЧY"|ʽ6Y\ퟔ$i?_ODϩ[#?W֎C*`AJP! C!w\SP$&c$ΑGPN tJ~R4S"H {3+v$#jOeL v|]-hs.-ymF`<_e?E{-:gCa?)`ΫsCуo?[ϰy! *ñ$ilxMW}m'DoRQ!|G|o|l ^Q jg,_yV]e'}^'Ͽ#z"loF)#U_կEkȮ!`+YCt1e/?:'keÜ|K̹` ^:θGt ~,3>x7GWn8緣y_rM硽;!ܠ6|֟+Pqn[v矫Y ̹ҁ?`3lu'x`sOxmF?2u»CrMN?2CH:u]^3.װ7~/uvwFvC,%w7DqLr&/h+y˫O2u~Ye|]ngh~G:EYԿ"Yd! @\h0,Ǖ;aCO7y޾Lõ'83I2d nv N+c;?dI_(.hAӱi ,RPv֟W>t^|p ~^"@(`/?ŷw^;htϞ/Է>Xbm:1vq5&UgyL;Yxv0!sv$XxًxW/NmAٚḞV5Ү[-1|/ yX%|r|%+8:Ё2-٫.~&ɀ* z2˪c|t47;O͹9n}cwphѰMC?o.g)s2}WqsϿ[[R{g~sG q \39|d|[0ӛMtǯ0Wߢ x 듯_;iBQe񕬹Xt4xW-cXD,]ƮS-?<>6Ne?k-+.6g @|p\9dZr ]΢1sw]xvx,ua*7e,2zm0ʉK'\owMA#/c>cl;F9o72n_MP5EN.omtcb2  pAG'*HN!0 mEw'X*$G^\5&ZpFzd3W! ;E/A:`F=zJp[2O~Ÿ.`5? )D\IŇO_{9t@"> L4c֛#su}n7fgROll+F_SB2S@qeM/}aǙ}9ynN#<ɧk|p$I0EoOcWpWBMo^n󩺀ss?UI9r\o{ԣfq~8zmn3;[0? p&SZl࿜>?6z(wSO v=z6cw#kT#2~K=ryK=;Ud1k.w|ϸ//t6tජ:en=G5.S#NzdRhߍV᳊ngdGw}n{3;V t;E.At{9y%}~^4bNt!P@ ŏC %hZ`fNF)ZT=AqCwz*]=7&` ry9^Gz߳4;tϯ^v?v_OӘ@ipE$HoyƘ[v3xv{?srg. &?>.J~&  D'KF#dӺ"z4YGl};S /1`#sƎN/tW ~0Џ⋿q hͥs$fs.0#| Ͽ9:\zfQz['gTWjv:__Q/P"PzOήK4_#|6 ttK)?5q|7S6l{`=+sT0+\C?|#ݭ^zYȥ |]v= 5{I[ߪ* 8W]L]~_P%P8 T;DL & ")p9ANSleT6ve:jǘQo;m7$؛ !sztjxWބx<۰6?ɡ7=/8!ǿ R#NdN|#>X^`^qlv:/oiHV4 []:ᝄ"}t:Jdw$1F=ZG5IF۹K}xc%g𤓃`Kh髍@k6 =Q3v.?:uҹ{j{q+֢?\3U|_XY9;?ra#U"MGMAtcW1.0]_2VشU;:Jis/TdeRnԮW^yvOʑ>|IW$kSM޹+zT]1>av:|PO@R`qB .\߬"دƺE|k~$z ZLg ^ NxKp#@X]ϔ-A8AHG+ r< TcOJ Tynq>Mn{ٕ/ B.R1;hkNX`]^ />{N]sR7|͖6 t %Mxǘd\J:7(#4딱 -G@=I\|C'{e(]zu>ZOR?!n͡ndjg*K3;0H@iGWk?N=&Pag~d\lܨs|i>G؞i袝uS{s3 ~^7!z(8|^(K& Qdk\ s!Ag,0VP$9 u-m !l~ *;^@ws&]h}l\%/L -PoncptN0=?V?Z%Pn$#,Qk|$Yl17@ .΃|cvkXfXGgxj;g!G#X}ꎀජ$dҝo.(XŒ $zOgc~|a#mV_ G9I=:d;2X}x$l}f~WV!y\;8BU{~'ֹKwn6̸~Dc Jgl׏\yu=ml{`X{Ev oB9WP뫽HLRY+8W}O[n;R%#G7zkX⿧nHb]"1|5  XPO@"檿E`h'#$@wU^P*A#GM# Ћ<HPN?A%>@/qd@= 䂌N]s}gԭL9g7^~gYG/r/|2Fokz%\tOߔo-\$$S?}Ccħ|E6똾U9%:P??3b?o$]ƀ{?v`2k94^/l >E$lna_@;~=|ϘE%doOLoW⋖??kNi":S睗L!w]?4ܹWί-ۿү|Y]XKدW/8p$~ #׼eR~/F? =Fe:xO; 8@ǩv-*N3SQt#>dž7ݶN;N=Szgj9֡_D=oF}ͱw2}G 2-<{}gyO67E3evNecgtԔ~N 3+V`+wlG_ѾUJ>7cvZ/ʸs}m~`?ͼ#.q$D `dL=o<' t<^O$6;$v@\<1!`D}҈G%wT'9~\%Y:S~+u\>}JO}jճnˀ?t?UN6w3EG2%# M6!E.z]"]nwFw /!m5gdKR=`'G\FkMA|>>T>k=1;|vI9}|;x u=o^ZسoUJy|=s:'~vv872W6Z>b5Ƨs/Y۰1ke2/8~P.1p]U65 䍶vwZzluh1M:b:|.(ХFMwT٫i ֵ3k!ʿ׮5]M.]|dgD_uMZO6~3:c m2١3pIzh'Qs6m_I9yNt֎?n{p;^W~es?}*:n+>~X\?s˵%gxsg[/U랣q쫵?ԷU5.ַ̍~fĶ" IDATszƷۄOoŅ~3JG60} ~|}?|S/Wf'qJ\@aj̷ vIt:3nƬ%Ar]nG~/?~2GǞc"?/_-b4>k<8v@:c_Ƭ[5w|CGĶ7U{}gю^S}F="s#Ã2~M|f3҅oe ޸qlN??gnO]ƲӤulGu)y8 ?%^#~Omɚke-|s'p^7]wc ]" glj!Z\B/ώ@ AӂۂWOP,aszx mUCݳoB%-#H>S/l:S}XK.GM9֍OyjT@ 7`!yMI)%zʬ/r ׇ|zEgzo}es~+"s%hgk!Y@ <[_nNG9{e=y?{A䩕317jJ|WSїy1^t[ϩgEUwnKο3_ 7솇:;vz\mbG{2g yԍ 69GVa{lQv S?Kq?|7E87k)&}inЅ&|^\6&}c/\EJޗ}bЯS:cG޷WƮdCYݎoVJZɋhf&M@%дC"wlE@2<+ \&_yNǂd*cgD\ςϮC)#/\d ddWޞNPjgKԭQ|!:k5F%kh&/57ZK;dJ(%|&<顟֑D͋F|&Ջбc'ǏNIe]҉xAxeݥYA'@Oe£c+g_9g0Is0~[ ֖FOUݺ.Ϝ=hv=mg=kϵ[v{]gn~D k_-gnZO漽{O| `\u^~܆3Fo\r;o3oF\E22ݾԧ_7rX蓱E7@nrc3ttpޫlLpF沱>#SJ=G.\phEsid+v[]+_VXU|+or>Tz'% j P LI֟bMy-An: {8 %kN>n[/;'P@/e?;v|d: ?>И?sį2ޚY/sCu@$\20c]o,֎q683/ě)s>uyw9gl?>$\;()467[Y+ ?GftL9K]߮g^g^[@=;y_>ջŧSKK>׽l"iG-;h;^Z[p/^ 7\}x]Tz\D?x`3:mŹ9t\R.r]=v|l̿+t96!:?GÑO߫W斧U8d^vN<>\f7S}8o34@]p'$(&H)$o52|g͛XY7pdY ٍqП PIjz^ #S~0'^vß@0>̷ٙulM=z5.1*.`<_S'5.& eeΉ&6=`t!nݫҟo8+?ΧyxHЮ[Z_W][zo~z#x{M>?_Tjw_KԎC]s?tp[^ӻOGn5a0 DY>=~պ m/Yw\O}Y_vhrv?36G|ƾi;ovlDqxv7kԋߺ^VM_m|M_r3>ݞr)ڻ6<"S)*"Yz|/ox)XDUU'ԷNmw%c|ؙl/s/ZS0KJޏ KփL '@l :b)<{=(lq_L'66oe{ %>,>SCyHrfsF2l>̽g;8 $[6<8[p]b]nz`] /ݺVϏJvz@ghGǬcZ'i"o2[xd ?/ִĔxen؜]5too6x6 > kW˷I%3g"Oӹ/P2 ;G7cEƇ۰9d;ڼgLXf|vP.Q;PY OB1g},J YpmAWQ2A$Y&0 c/ҏ<F_kL3F. ZxwK%]f$?]/:K0lM(103>s,㭿EKdg<#Þ$]|O"N<x:B?s?zN??^g^Io9 W=gvP%j>у͛׼B5Jcu֖DyQ ԧT@u\n L}WJTN"v?W}28MI~t@L%K :.CO^9|Qwe^g6m-]89?hw'?o}t_Nyz~g>~:N,X3QICua/^\}1GVV*,|cΑc_hǹ}ݎ:T.k-8x."Vi]%_oOKm#n׭96v 2lu=2׵[W-3c};~wJe}HVtF+VVȏ=pgGqj??ޔv+_yv@=wvZ/T7 r I] =E`'^'8%R $YB'P0eKBA@mY}w^$"έUӢEsh' $hŗn҂?) xV<>Id4K Z+É=Dkpb< zgL|J|׸QoZ'13wI(O¥4lȷz矮 6!Oc_mN25:uD͹oqEO#k.ȏB2d/ˀА \uQ4ݯd|S{^>V8dB^.ѝm|w %r3vfy5ȫZ/8ZT߬qRoFM8#p7;u>mY[;^Amڙw 22ב?Nkĭ⫿Lէp"45YYe2ߖL^_[^qO-_ kx;g'Tv ;kc~/8.>.. Zmo,Яwl1>EC|ÃnJs]!6<Kox|A 'zg^΁ х}O'Fox`#tׯM&"ӳ۔A0&zAwmI2>|2O_7-DYO󗄜.&\jWX䴢9 m1 9jPV=J={z8b] ֘#yZmcUc[OVSrdvۦhBYe3θE-n}FhWFmXEgΫxlF73n.{R^KA`O0qZ.|nL퐒/W@ܟǒy$Npvx)[w!0y$zG˷Ҽvʕ2;v(UOBHIV3|ɂ7FRw'6,d79>Ss>/[c̩;' swovbYƂ.dc}YI9I~(p8<~ց#~'| I ȉ/bC槯16^^9n% #Qsg=؈>:JqΨӏ>z0?:X@"8  >@l={'_yZ<{D}fOylw]扚(Z4#Wэf'WEUuuV2VXʼ~w)y3ʬe4Us%Orڑ&vLJxG/kwE)ybG gl >ӥw{=)ӧL=}RNme}Je&:#yqn _۔eJOJ?Pmd矮~r $&Ȧ؁/Ѣ"l:E9M3:dL[ッE2v~fg>;l竮[ko 6M[8G6=~m%SoMŏ_WCG3o Gp@kl.v =+jԝOΏ̵s}bGJ8]鞱h3h# d1=;K>wvT%^]?YIֳl}6z_/=ks thgBH<" N"'`Cg\x L8)s^mA/ z3C>Ҧ3 CG6W>sC>5EB |VGW$#NFtuဒأN+$;$@=>uul$3|]oL?64Au!WuN>}s=O߉#B׿MfW_v)gfg>Tuvv-/Gl4n.7}w16|u3YmfnQئKp)~c:W=eH(S3Cub#69:NvWM=4iS?6,:m}9#ۣ/ⷎW>?> ~,.cSflS[Q}n"}B^eD?$A zA2A(g+:wF;V*yzDjgǭ0t-ؐENP]%(++ZC _Ѓ/ϡOu|NdI>]<;&f ZG}ѐ)w<%|^ɀqN /" "}J? g%#':D6{C}R':C88:Dݝ3<#?nr$ ^x cyKONxĎ9?~#Y{C:f=g?nmg'>_jw]ٟmCf9?k/{cf׻խf}[|nn9@{nÙʑ5֙uơte:u[cCK7U[gjތۈ/6BYe#~lm]?zYmWv~F1H{O*WG{+tIL=C% &4 &#L}"dDVJ',]WGA ΀R/AWK6D%}GuAe|% /~ˮ3&h՗xC$'I7<“\4n@6Cχہ/xu?ިd4G._H0?)(ƒ IDATxK|b3`ċlN/9]1px:@J^nxxW\n_<^F R x뀮l67ʬz//Zϩ>}惞>;N=o~E)wm{{Sg+_ڳvWW5|\F6[ "TIw~JGuj6@J_SNe /kaħ촩SUC;e[y\NqčU(}*|VC'ۨFvnWy;S:)Lո*Y>R=HSAY R|HuH؋g Zx|ld$Q)wqDt)KҠ–ȢN rtoC~RGW5f~J$y~2袝ɚ4F.{/Un!2L4ɥRjLƈR䮋.%T$E^`Sͤ\&aBLIW_紞7gs^~?k}Y'6#z(LJ;{}{z[b!e^ G`923>d菽6}_$<}.ҝ:G^q (e}_ ~g_[F)"Ԫ#tՏ8CVK*?:h|ՓK`J-귧^Oشi<9/C9ϓCc A99Ƹ#FrK|䥮CMW686XL1重 :æo?" iX<cL8MEl1H-.ݴ%O[TO;nξ]ӿe2sన,u{f\1KYV"c|E4y; N/ Y228&E]4:RmKPA^&g I^,?d90_SWȍە`c@s?!z89q8k.:+@#+S' ąL|=SeWH Ig md%L_M' }+]i# ¾8*#^uT\Cmg36FiLs[[vOw|PX)t;=(u9 'c.mCd|dM1Z_B`*?ӲiEd/wZI{~n?޽˛b6߭]?6}_{u|GctzYz=WauJ` 0ጙ0tΖD84N'#wV_J;矬mcDL+ϙD§L={yQ+0`@p C,el]``?jcؠ=ܢWzΆ߆/A_UMzj=Yo7ݖ;l7馏d(SAgIW`+o^/Bxa qwl]*'2fdҎ|+r3nUZ@!P@k{4N')[Z(q8X9X7N9lU:A9h{x6! q(WF~<3=c /N:=|SOb6:& djO :~r膔?%[?H0DDFi(<ꑲ!el1Vն( BX76"Xp2968!IuOyõu:׹ IqF,E]j)=Bd)78zw9ǷI>L[O$iSH_tc:1:+SIgt-tK;6|g0n 8+K_m2F+GO.%3Dm<1_A6&"KAx'x9[a&%ü&}KDdD֎ ; 㥍|;G׽um졻igr}/!'SG-oyh~dD#'F&x2+ (cnW/ ca.d,_ȡ}dǸ+6I_|(8vItvluB},O6zpWsA;Ο2|SCx8p3ԙ ;rlᇗ 18ow/+x ag,wgD eN-OnUNl' 鋬1 [),}gxO;2=a9%:CDy|q'e^QMǾ>>zG^mRHR?4wpsƹV?Ή4{ oP B( U`Czi /yK aO`Q)$ 8C^3sի^u Zu46׾68LRq@Rqaj"(nqȱ!B:T}>.-"_/:qmtUK-Xqt7}p0‹8JɡKq nxA;ǝ}7˦8Ա1'(cG{N.p)Mg=gUjn&@ wiWoFV?Ǎ)z!ܝ|g3wKUNEʓ۱{KnRF/1`9 6ዞ rs^1P2C褬tq^ytnፍSuΟ2=GWYkLN?ovǙg9w< 旍@!Pqt;S=)Ow ~38ct2l3[&̉'8qP<- qh9H׸5Fwqc̜{PpL8!* 8=Gm8SO8JtF8L8lRA/{cHt ӛ +vO$PiM; #J6lO{xG tyΟыC;;VDW~em^qs삩yhN]GL^y}o' ҖNїN:|3FB#~xE=CwsQ> i]`bonE(?XRD)o~ac-m͇<o?xh-oy O?}thz8Γ׎8 P)ppRx9$/+)$gCA$+2Ӿ:UЃFF4)"ImF΍6{جTN?(xЋ~4e//>̕m7+х3-/RG?y)[Dޢ)3Go6h'3WVd ?RRe ".|eONS>MatLeXQ\EM;o)ǧJѧ3Nyɓ'8Nar- דȢB( B` .1 th}ӛ4L5cL. moSǂy[z teECLI1΍<'! āQO/N>G\28y L"}ũg)ewʣ+lͱ8R891 zȍ1>:?mt:ώ@kF40Fjm3sVx\ O/R_<6ig 2xӷ9E'r!ymT,c'5f!W oҠqVrǾ7Xp (r)nx0:j#$/qǑs q8 .~JB }IXj&:8.lNntuϥ)z)4hu,;)፳6rgщ=향ډ>pΤ=Ϫ< O6A49cv;aȍ5Hk=q{) B`4kwxM!S`qxpl^[Oq#N*K:I?sdpw]OeCur)Ǖy, ntp, N>ǽ}3W*w@o:/DǮ*Ta=]W15lOʎ[p]*_@!px8pI'4e}o]tE:jMlH`K?a%g۹w ' }k5^ꪠ( B}@8SGQz\#ߝa#{ m8H#K[NgEYCՇ'ϢYU'u!sbYu<1uQB( 'k'xpg {wǗebG`j GaMi/y!NDI9 q0R߷OnRY 672g=X}9yqP1ݤKC߾oWaҦ?c 6HМ}>JM}L ʃ锧ߧmJK}>6M?/kߘoB( }җt\wKq h.UZ8i /A'!I7whp9fS AA$}?ql9\: 1dr>Ow.YԆ^NWypMJ/yt.RDsi>{gupgsɟ^&eo!P8Q|Q m*7.]x8 Kݦc V;r]Ԛjӕ J7|?NLjtvKS]ޱǹ )Gjܴt7::Ge;cnk>駟>n{-@!Pl.6XKW9;ӾڹkyS}k"j|vy_u<-UN%%Xs]_/|Y]xTǴX蘀w? B( ME@`]@!P@!P@!P vT@!P@!P@!T`WW@!P@!P@!P vT@!P@!P@!T`WW@!P@!P@!P vT@!P@!P@!T`WW@!P@!P@!P vT@!P@!P@!T`WW@!P@!P@!P vT@!P@!P@!T`WW@!P@!P@!P vT@!P@!P@!lD|G>_Wo6)>яcտO}CTT uM[_sF'@aTFrlDë^cO|pyp-z~ .*q{C:\tE\c#p9 x}GUF@aTFrlDvl! B( B( B{*X{LKb!P@!P@!PG@kG a ( B( B( B`kw{;__e>P0f}u,.w [}o-IJ#_Kj|ii̥/Ņ- ,fc/g:ʚ˴N>Q :Vo~ ( KUzZe>3?spVQ!Pz \*ʮG>F7ѥP - B;.JW @I?s?7>Y5֕I@!Pl{놯ԌZ'k2%( B( B( c@-0r B( B( BX@kːB( B( B(!CB( B( B(! XO}pgKVN?C4+];cOo/pxߺXM39?`;KyK_:<u{xp_}?YzZorXf]||,Hmo{[[ 9Sk_[,;kk_q~~`-|}/zы? '<\ݦ6_S?Soo}{/7xj8wvmYbn\pg}g w]{EnvmU;/s򕯼o] ap~8x.rZD__#+\ u// Jww[{ 7˾˶ßٟm+WG?z_'z3 :k x-=cւzoB/{F?3>cpa{63OdVfrʬݜy~jo;η\:#!@[Gpdd1??˖9Ĕ+MkO@=9#@=}CZ)3:^]qN,s}lq^&ddO\@"؞!#hwgsIB4e;s;oVmyy5/ ),̗sq<Ls M~`=VX`Mo6vh3|_X[}/'eޓ{'g}G>uQ*Ñq4~+.N ?ӱ|]c6;|w{=Mh~{ Fw&o==Z}d{5bnlN #:Qݛ3@ˎ?

ejOat#Mn'i&'R2a7ZqоW94iG=Qcy*x+Z&e%kVvh.#xvÇ@Ee*OA i'A|+V 9 .m;sCwiMXu>eaJ=]|[2ODƕ)nh1j3ǘk|&fߞYv\F3zy5kth]Ɣgh9-89" m%.hK.aÍ^HYH)u߷DvL{c?CmhNNYp!϶-*[fnE) ϖNjgȸg,<}ݦGmeqqqhq̷EO62ϡB s#xs'b=qSL_o^6X>{x7Cd}%;,4@꘵bQ<2Ec--czX~뛇[L. EZB{[ߺeG'>1 &ڟ]폲'i,8|g㫔[z|ۢ<âw}wm-_wި2cmYܳa;7G&kgfǧѼsp64I,lT춴u_uMYk[tv]7-_W ɺagm|[v2rN}+7}dRzӟ>:Q)'%J])cpfnxRlvØW9RnQs ~Wo2>#`nx:mXPp:Y5;nZ`_x3l>VCvSHOývFkaoӝ:-PFPpk'-z꬝69kϴ'k[2kNTrL}Q>l9>saEԂil&̚#hOg-?d(fXTnFrf{ڧ1Y[hk֞boïlܯlެ݄7V!pm=y}|]B<\)Ży)a'zZZ >x9wnBSS)-'c99gy+ۋ۩mm657o|sw) wn#. fxzܵ)Nߓ5)'ӣ-)Xd tisڶ#1b( B( B( Dn9縕օ@!P@!P@!T\@!P@!Pz"Pz[i]@!P@!P@k>e^!P@!P@!P'縕օ@!P@!P@!T\@!P@!Pz"Pz[i]@!P@!P@k>e^!P@!P@!P'縕օ@!P@!P@!T\@!P@!Pz"Pz[i]@!P@!P@k>e^!P@!P@!P'縕օ@!P@!P@!T\@!P@!Pz"Pz[i]@!P@!P@k>e^!P@!P@!P'縕օ@!P@!P@!T\@!P@!Pz"Pz[i]@!P@!P@k>e^!P@!P@!P'縕օ@!P@!P@!T\@!P@!Pz"7E[IENDB`PyBDSF-1.10.1/doc/source/art_rms_def.png000066400000000000000000005611721420247104600176750ustar00rootroot00000000000000PNG  IHDRk`/iCCPICC Profilexc``2ptqre``+) rwRR` ``\\yy | 2 U +'300%@q9@HR6. r!+ v.z H}:b'A2 vIj^ʢ#ǔTbϼĒZ@! A!ahii "q(v!( cd2f` G1G)I/15C}}sïPo pHYsgR IDATxdцw<dqXte!H` XX @p Y\[COsfؽszc_9]U]=NI(89#8#8#tvTi0#8#8#8 kGpGpG@\XF"9#8#8#Z?0[ Lomqp5\}'=ՙeGpG!Z- nK^:4La \rIḥ>~f oĈ&P;C '0.{0@{*"/ gqFxW+E+"i0 eQq̘1Z&F:nf-W_}iE8#8@7#0~7%W x6tSOC[o5\zʜ&ѫ^;aR!jW^yGA7߄o J0SjZtE+jvM7c=6 0 1qAkt"e4GpGh5.:üAmiQle_Zcg9|k]΁_+j(:?.AOpGpG riO?4f2rȐ j<1b-N;4]36sk4 M>j6[o)~ꪫVZ)zXdET Ԉc?YM0a?Oa? .~rܾ뀆D!H3<ᥗ^ '|X`FN fq׿&tҀfWW cUԋa^|k&x:曯3<!LTW[m x/?^8Vq_0diڴ /}ݰRK)"6pKw_@kK[]O~QxG_|S3Dokzz} Ԙ{`Kgqqtz[BgPIڔLw/Nb 3 0c\t lIdI(sҾO=au׭Dc;z?\ 8P6TSGpGC6#/-5sr-5LÊ $ZDMפ)B6labK¼o^:C+#LaI{8j_%HS|PGؒ0,1, Z ax5.ϲns9~vxlu5W]?.’0%cec Ƴ$hġ;ˊ$BN8i"lT᮴(ǎ"DHw!_<]AD"`k RG߰GDppKJk9"'"ht\%m+]w;C893qoEt2Ra"p)W ^VL5VXA%N#8#7p#倘ME| |S>b- ]ηvp7X5Bғ?=.kD` W]uU|x\СmF=@GSz/@#Eb2-~UZآ2~ahMD#dv 'yZE Y$^GSN9E۝gY|sڙ>;O3"tQgi֬ЏkQf-/G%1b5/ D/jR#|Vg<5kh\?Yz~tGpkք+ b}ĚZda,N5abBߪzn!~)&1˪E9^ǵ:k kk,Gh.XÏ5?O(Kƚ*wkh^b:YVX?<A93p+&3`hI%jhR^{m}V "n %^"z)MfhRbLTf="Xoi`T)МDC8<:9#8@A[? 4B'~^8h!q,bBݫuAYyanqa%&cbf%Z;)ʗliL:&a‡i $qaƘlCs0q6"Td/=5`打C8C&Qn0YRmPV_I G0f_BLYEC81xj+dsA%PpkwARbYYpX8#8׬P s2Ya68qzfbV kR 7ݮ9"  .(I "߁иde,+7# <#=ZGN(^W TsF|Y$IX毨C[F;Ǝujxv umkՃo!5FqdA1nY%hTx?t-!++{A 63]KA`-'BzI֦"p#\:9#8@D5k=Ԯ5.2U#@0G3S1LK;cQ0Y?Xbb-TŃgqsG@Ho4a)`%xgao.q>ai\#|! ! 4GpYO=$5ȶ`/CBh#&E#Z_~Ɨ !k81,ܘ"[ O:pvԄ~pGpz'HC,5Haj7< m cZxy!>2udmMOyiW*7e4{" kb& jhژR5YۇwʔIf7ͳVHiXVLnhX}'!d<=y"uN5" 0;8ff.>kF{lGp k=Ԟ3aEsIaY3s6]ZܚW1 IhXA#^ۙuKfc rcB{$%LfzNTh_\c9%>kz3!3K"!cL\=#y-ky?^>틖w,Ⱥ/([WC",c>@ˈ!"ڻG3Z8<<,Mp"<L' 5Yl,akxΖh]pGp m 0vUxd ` ]3_:zeLkM2K$ЀG0=m5aEڣ0-e@060]G㝯Eq7k*׊GpGw!ZjA Bo:p_!{ClL۳asO /e;i_&6Gyj/T:p!;ne ^ws0G(Խs9mWWXa>(lqdrfJW_}uI<>LKja%<>NNo/}s=[~ ⱴ 8 YgT8hkt<#ЉlfTIVi/ΥoY;wlJllڲF$Q1}vM6uY+*ն(3r*y=:p)bUľ3"{2`^ Z+ΫIlOktNKw4կ­p 67a74ӄ1cƨfke ]vY3r D:9"Z/^/Yg ~gz*4LݗrOkyN#{w3a&rӢ>Ӣ^C`qSO=5('xBQ@aY^{^-GKߗ*rI'4iGfqq@K/~\b"0aYc4S1 bn=Zrobvڰk~kq_ faڵW^yE}o[9SO(#.k>Swhy:<- 3̠ϧnrv:2L>:;u]:SjQ>@=[#8y&p0\sU<ƈ`\p1Y=s ?jRgmffyf)}'c}[¾[}W_ _0dM>F;fC[6D`.&,c{5'uO?s }>59B"7h x"Q>6ʵ+w0oF9=kGA'fދ;CLc xgwzEV9mNٻ~fGu{衇 E]4nf2݆nZ hǝĜXQ1-}7=FN6dq.hDx>؄ĸLxlf1xWC7G6 {FmT13_it\NK}P\WkA5,Ri6k4O\~^>>c<|kc c]NC>jo |W|~RϞ=އ~K_conښvZ~3!??0,a9 o7Ï (ă&K/k(MȇPYE^xaI9 #m^>ǭ$Uw"/~VmXI>L8#FfM^0/8nfML*es=5 F>&+$a91aDX|ҡ܇vXrf0b.Z袋J`q0z-GܸV[mo.qdp,]wua})؊">]nUzpq5kvZE" %p6lX#(VGүk ~חd -?#=bf~QF䞋)o&"TH?&Ko}E 7a⠥7߼D}geRVfoyD.SZ,2!L>O si{w8TSH⒘gڣjkޑLҔe<29T(fz?s=z8fhK4WKoLZz<餓48o7"@إ0vQt!""tXIRkdrV2!Y" k-Rq>!{(B~9>SJ`/x,w= y-BƧ$><㾥lO>d NsL:ɕyܲ2&1$8mkGy)i4xlAI.F@w& YG_W} /̎d<03K͇% k|6xx+,UILJTOW'd&H^2Vbдh4 k +>ΐxRk)1pQK/|Qٟ kA 2+Y/%Ѭh=)[omQ*8p&G%}(V,ٍ!m%1k* ƚʬ \,.9`O&ʒ+^0̀UaaV`xhVI5Yڐ|j&aiUԲtAe1aM4Z?,q(#?la:-RBxH/OXcG( e&@n6m8+K.n͓P'~AL uQEa O #2ƄHS. !08yeAoገo<@퇢="M暖^h;hZ)ڝ:cx8{wH4] %ǤwG-!lvYšhbtbniĒuL|d70b*u؂0O|?D m2шNQ,c 8xv)XzDpfD@|]^M.:4^Ogcm8s 'Tc!F2| |s걖FY(a˜A{oe,PA >@&>LbP҄5DM\Ra0 G_"0@bNٌ4) BL6A| )#W0㟘 YL<v2Ns뢽HO51/ɲ7&~E!mRB,aJy&Yڔ6LF5"f 1ﴤ@DRĬ8,P^a8Y1a4i؉˘NLqo_p=fw>%&τfLo̊}~ >`M#Bƣg^&S 6,WEE؊C-%Vtɇ&s|6UMs} VLS DZPlQ?֤a;.̽K>]ҔHE5 bzXq th5D332p1XP^26y{q {q EV}lYÖht*:|0Gzn?RڽLLk]f`5ۺ<" 81V.YB6bc-b]N1wa=#Зɻ a@u0}SYgź*B%*Ŏ!kd+xA"]˄&#D>w k`f?ASX/]fS\~#odUvaEV1A\}]pL;c"Y_GBLd_Jv۱.0%ڃ;iHsZ њ(cˑ!X9Y dXZ$4$|P!:"x7%-b"hZ<>8b2e1N 'Yh@t9dANgȄA6%Z4 B4NÀK{c!tA b23X$k1-GЃJ,g`mR|BhH4{ 0 8bJ`MuF23\R3S^aD8(mHϙ,G iXvzbW!.Ȓ#S4BApꪫe$& #Ι2& h[=s`:.}c.%ryxs#,by{V0{ 4uu9$V(,NqjcP3@PxBcQuTLYAIJb)Ul%xM>(Ԥ" %K/NA8 b 1{9w(^D$~,eD-_W& WX,̨~!~ PV>[TfR&/Y;ࡈ*fP%0JgegF +3M Auqq2!4ݫQ5c1`@)e1-yVzq&۬gsU T@FH]se-mJ;Ѫ1´1#@\,$ZeсPMAŋXO>9 -31 &JdyBL4@Me_xAM M6y7ü {V]ocye+z?nuo4}p61k:UFce'MaQ#mxvjmM"Uje%MΖruܲVRZ3e"o& 2i҄q)K8ydsd1 `8VM A &w4J]iki͜3,'Z2W>1i`žZ?k|LfM mj/+k ̴fں0DPCK(*@dT˚5hGHfM֧0✶7FZ>jBAkE;&6ـNRKH*Ws,L1'Fb1any9Q'ܘ(Ĥ?%&Wx#f1y3i:yS:67K8Z&t2!{ÊApbD|K,a'$הb,E1D_=ڀ8ubf̞[zYe0 a3fXjmY#)3BhRAr1ST=sS&AY9LXS/k0Ef!6Ke&KU?)YUf۱@m bf b”X!`0mI^Yw%(%gV^fF}9Me,2M=a!"Le߇͘82% 5RodP^ym]nlfLwV~쟖9-okc|La'b-c7<[LKCiga]mf=%3N= k݈;*t(j&bTzYl&zOܲǙZi >AoY#+GW+_95G]P7UqB}Sm χ0A0Ϛjzf1~4 iyt95d&ba0͢" yĘN!< eQ 8>}WsG"֚*DQȻs衇Zhұ^Q. =B`SfB b&e\#eY-=*U`e ٺtqe;eh˯=4VLh*mmp\N M+q>gލ5f~je?fM4:@X# X?e9nf$ ˯,B[,7ƞ7 V]C[7XA FQÀy&e2&Ge!4hYĜJ 3?0pBl4,f-QG"M'iCࣅ`ٌc8%fŢ 88J>I l"mP>uCd?8e X/ŀFfslŮwmxJ?6Gaފ#0#*"x&aUV Pm,.' Z6<"3xr ^nv3A[jRE_]a ,fMh))D[:9}{݀cRD&XA=l0ی'I:DXc#|/yɇ5ռFFяo<3&X})-:3P.3S"6Kz|o:f묅j#p' f9iGYjF;o'XNFH{:@ 2DQ[`QY&5=]&@YrCԍ~+̌xoП  z!zOfκe7d0q.~50l}bYLXG}N:0zHh q/nmtȀUn b^h)d@Ѹ"TƷ\ nePսEe5% gqYx[mMҦ`SډhW5m.z)E)V#"%GJq.3G'`x$8Y0Ox2Ȅ{_qHGv&`=I>LEqu6l&3R431.N3扙-(2B)q\SN~hA0l$2WibYQfKϚ ąpÖ4O(ƘY+\b3@IFl Y/ gmmX5ca^jRFӳGyU-˺BL:'?!2i(mƣ2Ê nf0Sb6\!> iاiq}yfL6̌c+B2#ЛoN\]|Kj@ec/Tۈy"&{Wfc^9qo6ߋx-Toq\O%|X#ujy<H1([Иw,\;=ec| M#=YYZ8故u}Xmpĺ1v*JoYe%j3f5R+/S#h|h^ .'R+-\X~2uTN#C :'Ʉش 0 0h!4 Yi4133g{NhfUiWIBhX_ [.|#kYK3Q8g jpZqk뮻 A2Gp: uYՍy'ʲn鞌8#onb{\aƒ>&h"Je0.}||lcdHܾh6F_}Uio)R7Pf\~!0'1 #Ǩ6!J;dȐ0jԨM֬}'+zkxWac9vmvi0rnJb^kcۄ;_}]Mw} niE8pGpZ?p饗++a|1^tE*Rͳ>=Њ{vqAVX.駟7[n _|EXr%z#8@@D?q΀n0 6dȐ]v%]btMkVL.as0saÆd-fm?.a#8# >6L"΅fz녇z(jaȑY|o108O'&\uUur 6 J&9 y晊tpGhXB ";:.\l8|ag~_ .@"1xa-?я%)_X/@p8Yqš DL$ZIGƮ[#_=0ӗ+|ᇫv[ou/ ܭY'L4>j[jv!;awygV48#XH30ZTXpՎW^yJ"#^{5f20cbkqԿ@0WoQK^9E;;XwNDR$i[}'ZYtIkIp#eMQ=F=fa1bDxÌ3XwX2@M7Zs9wީH1 WJBNNjw/aakqoL3%?pi ,Xc ]dq' .`|;,zcu01As#Kﷲ_ڸMO4^M3M?N5UÇ"?d;Ƚg7v% |* 6|Gy$|#y89@u>ny{1M,ߔKO$fK-TEzJoZn5g?H#;ncQfhq1V^iYtjŵhX4dͺgyc=寅mV}kwߞ1gv_};>vzuY&fݳrt;Ra¬"3 f5&_7ũ} -9]tQ󴭦rJX`:mm >QG\,>ԓh+ָ@_;|1|)枼Lh!"<H:_x(#G:E`-p 3ܷrZXmՏGN"IAO_>cDo|PE0X75sW]uCy4r6k ?p}zu:pߋ:*:{Ұpqv\isbF֘`ιov0񵅵g,4<ϹgsY +cKEadi+N'bt%DcFnf\1cahq2x`en6'{ꩧ Xi|)BKm0K\~"2Φvk*(w“ɥo5釛Ԣ/&/!B䇇ŹΌϯaZf=(xVq]/k-8)=&h' >{{1`8k`D8jԨZQ~NgRf690úTu1AB@s'`c4*8V|^|E=aЍaiϙ-Bh87N MJ M%Z cbApCZfMoaaFf42#a`-xeV^V2 Zq0g~EHA딾ûůQ^464ځ 0LS4iӢʳ&2c<."\q9';Dhق&J!<%&F0ً 2h⍈6vV(kGpCᑖK/TzXs/&9i@,,J6e EȘug}tqpYg)kcmYy׳tDH hcwyg|HLcb.$L &W_mL[gk.\Rk1UH/LģXÆw"vh,55_sXs񃑣ؔ6i~g8,~FEuabhiG@P@` Az*HaS,48ZtPL!ei&mGME -$rh԰gDŽʀ7Xڅ5͘zf]Ҷh^ͽik?GDǴyFhχޥZr/0s۰Kk]F5\S1Bk ݡ|]#8!аeBk X׆6YG\gNEc 7ܠ##Ͱ1^;U/lx1x´tn疵!ʾ}ڛifڻMRL$%Ze6h?b>XG/Lh,Ba^?`0q͘^k&1 fxē9`&MXL ē'Ƒ;.ЧMPfR(/%$@הx$8>l%jNx7b >NxF$As}vc≶c_@^>{wWh;&"GpzhXX'3R9$ LM$i:Gby s0$۳f0< WB`>"@?$&4Z9.>lu{OiE{[IB1e"+;혅e< F4,U4z"X%2fcU gX;Sժ>f:+.y8|礝~M9#8@WfQ5v Z0>&04 `X=أjaT+\V"xc'x!lQ?L̜-_@k4ƲZ+,& \♎`J;#Rq%$O(ڢœ(k&4HQ{@M('؇mfY[2#+N?]HYZ/`vYՑ-(`hF עvQT4C1Ӥ(?-VhxѨe %s˞t6KOBfn9}m3ȇ4լe3x@_JiU#<`<R.'GpGh-}BXqcH '!GqY;LO8T a֍j]F_,<\jFB+BJ#I)rXl Sjd^xv,}*,&^{? siM#Lb5d Tx6EXGxh!ٶ qYpF"z,L1-Bq\L~ژc9H6aoxML Sp61ڙ_,9レ4}Mfi,?l ͔|]PkA8#F {1Nx8`lYPyE[5 lM bi|"!)e #8#8#) S}4dqՌjִ}#Z#3SF XH4M߇0s,B ;s#G4XtYiV#8#GOkBPB;r;gma0{4aAƖ%fJt#<}-+;qGasrGpb a f ;ܤ`-C[J+i{ZPgbSO=vm7epօ bvqco`õ^[W#'Byvm5_csL~M Yx 7t1uFL׻ ٶĦl@^l@ZD]0e=[-6x>2 #{v›8܏#6'}c3IQn>cA9+<H<aGp\{m:40N109Z&T0.sDx` l͔!A#k 2<Ŵk~̈93+3.x-C*33;iR?EC`,ayUd`!avzӱXF_nm=4|sI'Zkhn537b- 'H6h!zpĉOL%~pV1G5]1 ݹFcCh̀yLʞd$۠Am`ǻ^#YT^nG%j9༅"*`RK^Yj;#8̗`f`1 < &fk /`bY";`=>LSL)4lJ*̂?*a 1ktŐ:|!a&gzԡ; \Y?GyF!>kd`!ڦ6/ T|w3< uW,6d+fVcruW1v 6n 4|2 ?I]/0{([C@ A/77#<Tѵj>&/͸&`bq<"mR/&в!on޷#FXG־F XqrGp6#[m(OL IX /hc0 #f ^i0r鹽g ]Y}0O\ v\gy9|XFfɴiFr3VB0#8@E-o̗t~A# cBy0N+ K`"c"LfMx9ej4;SSț]c6F(h#nkʜǸiĹ_+Zf;[]m$ зvX^7}7Y+oz aIF'soď]#8@C8 kb\6!2Yy睧"+:^РaʙbEꪫ45fYqDBHdc"1@h.n7CC@Ve"aΘ]0=sm I2 5!ݹ瞫wZpn{[pR-=_ ޝzmuꩧZR-?x㍁MYTa.[{oORo>pGKւքa֙_TYu%\RRLXs1qjpkps~  Z0bm`Pq-T va+p(a.I߄qhF"Vr=]ZO] eQbm!o#]*\?+ ,q$$;y}c=D9N4C6!@N#8#P ֊da҈SK! I!A0nYqa_VzV@#LrDeO "w^B("T'anꄶ!=1zyGp ka`Dc0TT! O=PT0 p"<:4ԙ`D^Eqy05iq91#1qz! xz n*;23=YFpGp!Z1:"ԨQtSաUL<Ŏ8Hb՛8Bs@^'YWIeUsϭ&?p]{aEkؓpȐ!ڿw,0GƼSzüg[LAjyi6;#8@1\X+SG2CctѐaT`EwGT`!`©; GLhX(*Zr5bH mg>njTBB㝚iv5V}}Yw8#ԇ kգ Ƒ`fk{Tf 'W\qG6zIgݣG6GfR8T}aE~F0Nzb2kF=@R>#3y'WKKe]#45\ᥗ^z\wg%YÊ&6Gdy GpG >/04_]1 Wa4a ) .!FӀ 3[9cw̞`4aO?]W'0_}K#oMSϚ'jYfM[^oI0[.uBqaBMCyyATFF5\#$qW^Y׸mNfIˋy"a;f̘r`\{@7nFtzCxezK-2c{ ` IDATh 5?9WTPϊ]f(SO=0x`XFG&3T+d}4kDxauU-߄ѣG뷡:88sM6D#C`"ѯ,Bw b)ٞ\/ҷj;#8}>/0ӎ ? 5059 Ah[n9&N0V8atVm!qDNa=ڈfH__cXa2a A )M5BkEHɴYxlBhmhV3׼E[&?`P{M[ffi;:3"/bf_N#8#:s=˧Rb L /P`ŋ𙩇{x#Ο+{^̪ʴ٫ejeg00ث Ywy=uښih3oьa7x{nMwqlM]و<6 u ϤnLFF.h{kV%Q9fi<5i[mFA&ߋ/Xm-29Kԟ.Ec ZB$6,~yN]o:#8@ia fr0Ff QưlP"4`ԂQ_[V+9K[OjtТVw)jHYqQǭiLF,{>VXA:#p꫕.ҏ,ZG4Q4]Eԗ!IAcɬMh&,TslM[E=fuVM!,ai$Γ:w}sQD=& & s GpG >/a Pa Ô2V{&LvZ l1c~[G4L i'\]tQ-x7ƚBhQp r+>쪝NaM+4Aa+8lj =E|WМmphG,EոS/DsrGpA3ek:W< 1Z=?fDZ݄s ֱYi}`Daȗ\rI 33SB5,0Y@s@>E0hhz`P/zhX <"V0 /xi1PG /b&N6GC+{ !8w!BN98M7ݴ餓N*%}dgfy0@N9#8@[fd!2f,ƿ뮻L3ڄvZXP#O)aBD8JM]8}TFXCiVH W\Q/rE54%h%5yGO k9***d~qc!x.dh4 l91,55\#8l0@Jm um'}*lg~yi B0^nE2T֘’{Tt}`rX8Mg~tGpIa bpOԛV+/%&/6b=_$[- cjDLr&&دȳN \#8#ЉIàF``6F<`:i̳ժ#N9`Ys1XwUsAVxɭ*K=鰡/Č{^O'pWJl̆z[, :TP jjB?f6pEkgyC/~op=h2E=j诚Ϛ3C0*6묳?dY:ꨣTD@CGSpzfқ7"M,}v~q3eB;G5Xgsyd# ohS[)@a-% I QyOzjH9fѬr}~N#8@_GO k&$ 1VQ/4\0 ؘ#^<?HWaȽ$ u 38HI!g=h'A}`Mf5fi'"L(eA[Exڎ:!,Igh40)hg!v;+Rfh~Gԃ=ڑ Q;J1GEL%8#vĒú[o&4U>S<Ц}r|Ya֫Qq{Yq Ɣ&oҶƕ_Jyp~8#vG<'MQ=Xj00I".BQ&s>م9]jTBܻˌ)XD\)<'f.+IZuhs00F#F0G}!1i\$h0S!apya'M~);5B 티3YoFX`n Dۢu+\S7(;?Nb-, fIRBx ǚNQf4E5~^/6e@ ES0IU`w6PVSEYDCY6B+K(l$cB>Xr@_y>قml:zas@姞Z/n)w}P4?1 '(0\WI%#ߓ+Ӹ} c̚o'?? 3<#Lq{܇}ZϋQ4LowW[gQfX#FiYg?uqvsl83;=kgqHS̑C#a ̪i 1%0inט]}՜FNf40icr@`4]w ]W0W <~1`jxӊ9)q|k*n1#}g 8` &jLlVtk &ww/ <=Ail]EL T#ozwK{هXoCWL y<[n[F5ZaiW& 9B{yv7߉Pch2 zhe =iY m{m߹ym%bmZL8AO:P "Hx~ޙsH3qqz7>oR&M'Ngi< oek;rsiuJ, ^祛Ot&}nv4k Oi:gv kGέ1~eivǷs{fqIz[#-e}!&5q[| ǍS;'A| ``S8q!P pV#kAD<~0_ֱ{5w)40ؘ}as0@XE[Ly*iDN|CܯFi/Dqvg289 i%i [!@GG>r4 <#=Lcy?*!Vo֨?} ~T뷱fx~-q%ZID3Ӻ=ǂZ6vȷM1)梙LOS~Ok1q5.b&9)Cy^zN@٪RߕVgi֓i^ͦlfޟsӉϫiX-,,k~?' '~&Ó!qy`0 #k`c1Zi4/.&byFmtV0.\EgÞm\#T \V 4Aww cNK/tbW'"8pŌ[nc[@h =N_! GkLMh~.HD+;r "|%Z˻囍fmq1W&}Z˳eDhq\?0VBy9oq4-qnqG<&8ϸgegפcDg&Xo<+^j0k埗N/ >i q,|1N#>q4˺&N&Ns8Y:Ұ߇>o{f}g#ajc.1}Yqza'~߲8_uwO kqN;)3~Y0L"4Ǭ7;sft:2AtgLཛ-3IB$>ejV)Tx"$IH!!C"X)CT!4P4(A )ãd\9>z}{Z{}眵Z{m<>\BF a#͸Dx** K=ReI-L`&-pB6Pag 0fhs44؇p#bsyd7^rҧtZUw޹(:P*Y$4, ܲ1M5 )uypYs*XPsC'NˌPkyɴܚ/sO8u\:mY-L>etF2|L|/ј^}Zqs4M w.%?*N3g_ޢJP{2؛ƒ?Q zл6`E~|bNL!8xn32O>UnqCGxčyCHi#>yǺe2\~~.|b~v8/s^7!tL?Fo@c{ƏrqkuS4!x.sqTF/ԁ雮y 3G?\Qo00kvFA艝eH=A'dZ/'h`n*u kb\pv3 ~Ieَ^8A@'[ww-4R8bhs [ c j?Bk/y╍[C(GB/}"n>c\N"ec3ѪIqɣIf_MgXR&iG#Ox;ZWjqZzǥ\\Q ݍQGҽs^ 7ku69<5iOfN%m c05R1!sݿ~<^zӏ~~n?+Gw<[_itBǸtڍSWp1M]È5zs:nⳏ֬x;YK\6 0Cc?&IExMǔ`:`a`({,R偃 -NqKw/89!\;g_yY~WdsȳS}7WۆwԋNdL]S5 9`qqL4R<xt2r* CsBcU2hц\ #ܧ.4<,Xc#$aNC,]dk>2Β;檫*G,1)- [0T <I)%(ts8f_宣wd|ɨu}psqv2w|XS^<+%ezxo۪D 2Y}.u{ݛG8r'F~,/ ,y4di~f^һg麀x4o(Fؙ\^,O<uqxL;ơ;e"N.n:g7阗GH_aQuڠFK.^J8t%81q.qpX'㖫C;b(Ki4"pϚ]Fh'oZ9#.9ƣZX;f[yӛTRRo 2IɤaNPkuvSN8L.l~0[lEi3wO6Ìfx&Ph:}H&~qBH@mq`5GOX.g{X W@:ʚ0ta^&1;EŌo-.BY2cX<22RWƋ k= ow@}1?9"#L)Zwi}YvY{{xL7%xu\cnUmrֽCfhZ裋>}~N i:O^\t9-K$]/a zWZz~# Q/d p8ABo=la vw%EȢ͟۴O<#G"G( e^GC̋1IJьuە74|w{N;47UG~ݮHyi]F%\~,sCA;KˌKD<#]voH|&(s!;mQr<_Z7tYZa}  |δѨnwP*`jxW"wXHp` mKC 9'|rZ4!iƥLm`yi-#FS]7rb!cZ^ r" *s8-@Ehv.A`D1L( ab $Gmt:h,$fYH?|N 'b IDAT9c[OCP@ uM& ]A~4B3kEC. $ݫ6-a޶c?rQWV 0pۺX֒L$Ƹ>>.wuds{_"Kk~, Wtň%t$;Tsdz &A im1#860#PY0w|\{"8Z.yKs.wq%q`\iy^鴫+wCiB]60^̋O\|]f:.4g:n8.'?q8<itu; \ y2wkDo'<c-<~Ƈljxھ҇xHh*=6r@纘7tLq k2>}o.y\gEsq%˾ e~&5L!܎c,vp a/(° x(Q/Y{LG7Vi6i4 l_ iVk+-̫~?ă}J״^ wWZAHo,g[OiqPBҼ/]v۵/Pjܡ{@zH?/궗иLJeΚzc|_Jc;qlfsnipƓwWkƾMjai2恂fu)p8DzPxQ3M_z̖`N$Dٌ{7cSߢ3}_'hl?Y?_ yEivnD̽1F]#)a/m`W==dA4O5KKk<_l>CL,<2V m.&# 4F%C&~QrM\xM2 swq.'D`[Jﲅ}A`㝆7ɛB{^X&2UQ֑wo)3=:#G~=i$ {%->L/j.-<"?Kcq357˔&ixUp@?㸈[\I!BH8'~XxG\1:1j hpFz#?&||ȅr_j-#K敦qg9$L_<8*?J,i~9u*393\dFҴ\M sƏy1^UF4ӑ.q4֩NK.x)bXq?ŋexc_9.#N]sxN4 DzuC΋9o:};?S4ڱ \C|FcG0氆5p fhF`#4Q3T ,O;| k^ S{pϟL:Yψw4^8zP}g7\A !kv9#h0g_VhFfhFbiۏI-5C9/Պ7XЮw1>8èԶnM%Z &VN/xīxf6!@w}PkafCbf 7h+nݗ .`̴q5,L"lШ$hƉgSǵW+TBrcjLEPC54[?KZ0L:mi0\[Wb3(`!԰w @hcpE)h|6|D f;/PQ`[Pfb~0 jVD]K/s!ezA]1>5ҏoqqAkڿ5230U]?[KD:(:5MUt)7:Њ0|º4bxү+sҍ./KtǡN2Lug1eN2s=4q?AN;,{c]' <סK:_ 4#Ќ@3  AM_(n! ^x`x帆: BsrM`_]UOoaK>a'HcLL+HY ۆ1+=~t-*ye}7$`޳A m_K]6ؠI!sĀ UXN(+t-Ih[n1䌰0:hF0sV6und۽b= ݦØ7uFuhDvruⵧ,S4 .xve4M?ȯJC; K":) Qnzn/M9u) /qCӏe1kd?z p *k8 ,Às):(3ɞobYpqЇ>d +L4~o5`_:֫\]G~Utv:#S>XuQJCZ ht$ i҂Ȋ+b.WBг弩(KBg}w^կF 2e#bF)22')syYt>Hc:zN&]o"Bc[Y?,1Mաm\OӮxv]xLy1?;M_M04x)MwӔ1#'Uas?ҏXCEbt/ Dؓxsݬcŵx0` ƿN_A_xgr7O4, HBw1)d cMkԸN!>!}㜳t6}h!ͥ7Fn9(S%3Zw1˵Җ٧i s܇ȩO/^$3?˙$-jϣΏ6 bQ.En4#v&oiQI8ntKL؟XrxNqEAmzSJ0r̃B&Z$x-xQm{h[e- 6xy Oux\ux\'#? c3+`2=}Y${8[@owxxlـ&U[t<; ϫcvJ}x\٧a[IZu=.6۬ï~5w8])0nhֿ|PN9 Ws/6C>#{TgQWym>t P cD;S4yī.!O \a^&)z{|W'^._Ws}k5nUqcIhy7x0PfDQ}t^lZSKpNV1A$O~̔`_Wn MML&q"A[@S|>kz~Q8cn;Ϝu\)mSŹUf8AGK|/>\<J뮻ǒg~vzfk8iCӎuҸ}JO3]v<9qsqJhuO0/t|-KɃlih#?̄_3Iu!nSA0\_?q==}}~F۬\z}a[&ljH%QoyI lV\/W}>wh''{X\&lF\60=U-iosnW?-w4I>SJ6Od:ycp?h95%fi8'\_j\mJ ҠeWUsLࣉ#FX([feh}M1]} ͫ9:DmM5BX4XKJ Cq-!Rgֽ`{.)hݖF#^%MmlS,|[KAK_4^nϔk0w<'G~<~uc" c:1];^wBӴ;,k2ޙ51~8ؘF'a㑆@y,8鸌Xzp[qӊmEW9n\fz'і_ Cq(#qIl|_&Jd Wxrc%sm]k]w}5qi>fNK؎;c=/mG.{p@>}zk=9"XVh*0-;{iJyCɜk 'r->쓟d}Hu3%\8,+>* >Rk)m y = wڟjoer;2W_}uNW\o4u1CiG{.xq$ c2m/8/ 'd۴ W0RhD=l9?NkQ.X&g}t!QzcT|.]ښ%rW7T;; ew(S`7EO|Y)P_l`|P%2Mi%r%q ]'W<3Nyiu (O#SVYHiS}fc^Z?Mn/QipE8wӦM>qHm']F3Ң^>3oHeM>~8!]b}Χt܇Ů5ޅ+|63pG헿e?JnaH`p@}|_w޹u'Ð| I<}`Rqy$ႩQa,  lI>'J,/3a>;SF_)2"{1F7~h{WG~^Q!~>(FZP8iQsyC }y@ ]յ|L+F7Z,p4}~<rtwt7q7zxdBwœ@r=5P5}*]wݸ1?:0sx$a&7 ÌpH^{U0hC,=믯*2\++v~aK2fUFL10dUG5v6=k:l!cb ^`6[>ZU H<7. m~{a1{ uY@(17OJ}tg>󙎏؇t7B_cO!i@pS a 9h,"#~ IDAT4x!@bU0A;鋁yo+:~R |/ⵕ ̋nFzǴq\/-3~0)yiN;:i\:wvcsu\։1t.ס.)p8|UWek&r,Ska$2ZhʘVje<S.&/Y3\C1MmD>YEVm谀2+hiyNmy9YQJIG]6b7~{gA<}f6'<4(I =!/xT 4 j& l!a.gf~'?,`1D-(i?ܦG~|_c/wջ"ם E7s[%Dm5\"),=zU,qE@F ˞;ީ5cyi>Wϻ84ӲHec! t\=:?s}&`oSȣو2nD\c*>Ĕ([q1EmLNQg`,a6岲ƗU~BU2͸^k>ew̳:akl<{볗cH[076E4nM Zh?˘-!#7_Zgfi^rt+(en'xcLwużaO2dA`Wu2i mZC{qs./(an'ϼgnD}hX^yYgu2Ð7XquoX<B+IQ t? j~Or*˧[ Sv8,s\iq^C_|o08mҸOO=G^/xā'by縍+c<yi:B u e8q a4&U|m5ϬsxO0#<i.gās>!弚@mX Gqi+WYA,eYUY >H$lv(üF-@@! )Uٵ:c7I'cה B=95iJcsK~ra:!n`@xp@ѯ1? }0pYG`̽0dUF 7S4tNS@Ȣ[$azwk1$&x~ fo53!Pۈ){yDs_Xtke:A#k +&s=z)pg2:,2yG@يcG!!wMЉ@=O1-3Fƈ6v?TȢy_d98.;BG >g0qӲxy_MN\yٸ|h/Hx>Pqإev,#zy ]F2~1K1=;M9ym9eMxxyΧqCqxn|!@< T ށ#W z3Vs%;^E,.RR."J$/  IO} L''Ppy4xpV@7l3뺽F- YaCڹˀAh@` ht$j(#aR_6>˪)֩\)t1w5qd\eX@3Lr}`1ϸN/zNgf vDxw+ly?T['Θ3#0Y` ֢ rqLF`!W|[[ |R8|ZnQޥ|ε "Mն3m,?wڍI_h򜟖1/.bo0cqbxḜF{<˜Gz*COZqa|<@iHh".(c({t~UFē >0Ƈ3+!C cŏIxR cv'A/q!D]͵(O+#8Scê5BqtPY&tIb-C(c1{dpo%Aׄ0Çyb.A^w/K m!׭?xB oδb|,HLu0*7pVͶn[s8+5ie=0NwhŤ:Vͽ-3x *7c@ׄ|jBVpZ%Op_f_z!ZB+w+}!}jv8"il0WC@CL>cbgU[ݖ]sCi҈20DP$ 1 ,b5y-C񥸗<fܓOn}Iҵg~hNSOYbR<_||0OC:s*ۋ4`1ia lD m_\|.F/V`X0R0O{Cmg<_8 /n# BTpIDpG@fLp8@mZL"P,q1{ XhZ@+94tW@?W\lbi k4b e,=6oo4P O}3=k֬֌Q sg M/yUE sh7;aA TŜ]fZ\΂$! PΌ{e|9‘>]CsO9Zvu2ty>x'xz1x~wCeqS('MuRԋ`"{@qI=)'8 Ms辒6u _1] khǢ`d_;F!pv¤D tZNL*+F!3P>ijĈ9|/䒂yxL `8`! E_z!~:0#i^)S`ٍžEy4D c`RXyF>BkΡLUQF0Z)vz0,|??=P9܉'X+g{WJ gXC VIL[)XH0l~P䎀 M^('cR;Zw]\J  q}1]3(g|YF`BFYmš=jvn< \rpn}KЌeYApI7-,za)HNG-.Ssgpi}iGs¸e=Kh+@OSFl0^)2m%&;s-uZ x<<ϢFpp+u]+'8GP3MBƘv`.5BZ&>Fg#e9܉뵏e':;m:A<qGh.uȏeN GD<N;N}~yQfZs>x'4".qx5qx5Ei>@nnJqT'Mppdޗ$Uv8ΡaF0h k\/HgDA=1A#i'+ӫƸDX 盡 khFwKg?5} CX[DBGWrJ͘1uDuϟfȺ?ݞ1S^~h/!ϐȜe݄g>et+mvqDt3$D_ņ++}#Ƴ󧝠}橸H;7wUGfs=8ϗ0x^u7jjҦp|^"wQ xL8I5fux~{^v?L4kn踝:aV64i9Nx8qM!:qKZ(b)s (7@ G>G9qm#k4,x[tB#}LE$4}nJ9YSV(޳SmOrƖ8ynUg"10D"tN_cAګ̪bQ{{Wqf, wI[T<1ϗ,5%Xni^(G:ˍ:1bafal 4jA ?;lnBx"Bf[[8, c&sf%{s=k̥~8{챕uؓ |T_4)c0flI~wr}mfk1ZM&~/?vL6-TuɟgzѼIcrtרޱ CAcjJCֵ;<~&Ok c=};];nܥ2M;@\J@HpqIOӔ9!$M=~1r۱h|E5fMypH3Ox_6-ڊQOkTam@`bq3x`, hrlߎdis`d:KYhz1Łe7Qʙ"t0ɡ8@2Z]{LnӸH}" wJyhuE1 I}__ii&)GJ>cg6۬-)f2glZ5!f^X[F%~݂CiHG Ycӧ~#ܫ&'o}~'= O?z ˂g0f܆u4"C9}4::ack#⑗_f)/Wbtrr3MB_ 8#ˠi/Ҧ?i~F{|#=O=&8;e(t-(" m'#N` B#CpB/PCq0죲 A?[AA:Lf_&<_0Pb<4&uϓ&FZg owh {L8P30X!Xe)L3-y~[*BU\PBNFX5–p ӧO/%@GێsSyq g7\sov(\8 /P)2/O<1L_D%]G3 X`.5XsNNʎ.铩𜛱?'⤌]5ŋ⃠kVKQ6'ubݲ#=ˍG9zƴqcq<}NC=pb%;ϡv=e[Dޕ;SNXJEʔ2 @TzwufC@C{D1.4K!I}8)=YQA 9t۴[IڡhNbc'nڃ$c=5 h|MHzR_gI{^%hS@?/m#1C h|FN3y盥}WK$ۤ^F]j:OiZ33r4_ТmfnuŸfm1g-l#ݒZ3h;z|̻t1Ls-8sq} 8;jޙB?hϾ -)mKHӦC~Yqr߆eavL)a Ur1Ixt3<'Zt[9 4a?#r^_7 1TsSm Oq@.+vziXipK1V"l`f 3~N/\;dnn.>-.1bd%YBx!Mfg-0FUM<ʱ3vU81֩*Kq6:tcM/։qc:ƙ1H:Y m:]^O=˴,GsۮGe1X'摟oۈ\ˠ=vh||ms]Mhp]3@>A+@w#05LBx>U{F&g²ZnS|ibr@7} &r\?&<uB"c"/˼ f jXTP>#X5S øΤyor)`YYCvN&vh*Α@#Lt# 2SC>>8K /l pv{E#ό:u:yI#.u>Кb2ZG* ܼDSWp׾5M'!jg|rፑ9gC^=R)N\N&9ﯕE4revyF< ,$  A}uђ}Z~:[C&/^+tD:,QJdQ Agd5sz̙&;Nk?3NUVμS1?{~ѩۇnNOU}"~x:qc?i#/!mX漺3OiG5iK|eraq3ۊe<ƍN73]!84aR`D! &Ztn(!נg Zq 0t># pϻeĹGuTqwZƎ{կ~5cƌ1kŴxxόs#_~W^ٺUڗURCP;eT;P \޹5^S7Q^/h1moi 9CE0|ođ#]9'{HƏ~U9!vp*@CsEHi>onBL;$JͷJwbOל fi<{=޽./v{iӏ}ԡҐV ,@p E&=ho؟sE[Ѹ[^~,#@aN'+M|0Ǿ[L M:ֈX'q >~2ObZE }}@XnzMFgҶb/9lnEyc/QԨsҡ^, /w1 JXFޮ1>~=w٘C: $S=_k1ae/ߢ0Cؠ=hZx/)qB!msh͝ =(4l>$|'Ż[&KƏ(Am|DjGFZiG&IXY>@ekZs onc-%@u.7h]57\=~dp gI&2~өA|4x l>sO1v'05}2=3W6т`&ʹ ^>*]' x)>{a7<9^2;l`KS2 eYv.$V;ԺKt#3\4xy*|fgs^()Ip4ӿMhwgM7m:vC I}މc{j.E9  JxjRU)ꫮZDׁC90]e#ci477`1LoM`G 2Bmi0˘|zQU֮u nvǣ7}sאT=^Xۊȏeer'IXn'rX<]07ʹ<9\AHЈakm6t>Ϸf͚C =27?~>n8WE^.?ⴋZTQmlەn'aU?FNZFyS:9<9.qCscY/p^r?1L.s]- yĝ&Hzu}{t'I16< ?(`ܗjIIsPFbS.`A ku4 :xbi*L`ZwL`;i,~+ 4ƃ>{LÅYV 9Z.4%9rs45hb\ςeEM  p^ ʀ˹s+6}? !sꩧE!lIa6Yv7fCbȽ9dvm^|hO96=Tߤ#eeFWSRxc8hk B/o0o4)g~U~J*]F;iSV^_:gf:x?hmIFК%3L<9Z}.0\'Z3leZ4QgӆvƔ{PvS~?uB{ >?с;gV48"8G;=ou6`#;z$ls.dmb^zC*MXU'A!SN G1}4;H|6>C7dzL5# *ߛ\I4U-iUl'yB}3}h( {_WuMUeZiWN{U8\^;:C'2eǴx5NK̏qqB9/w~ x3@qgH8r.wi;M=1\]~PuBqH]2vׄG`k0Yg3!nk" W7F{e鬤~?\32A \5EHC0]v $uu aÆ)$' RWL+~]%|VЂйCr;Wf h "ij-:z69A'o~ůSh-آ0˗ q^\sn(]8 "khYj,AvѾw yuf"5̃{.q+ or]4͢_ajq<  `{0{ˋieg IVB笽LQ:#>]ҪTg]w–o+9M *~Կ袋\ _rx_ 'ІtG _җZkn #nI}Gg~"ii euӮx0.mu񌟆iX2^l,Ih8ߴҐrKץaG aWY0v3h1$"/_s,5YҖk4@-t40MK֔v l#2;~BcϑӰ?֪aʈsB`S93AnIVHS6L-5ي3b~sIX|5Pw4wϘߞ{YptA T* ]1'<2Yl?<_}h m̲evXR̅s4r>a,׮NXxuN1vZU%KbY̯opb4M.3C򁘎u(K uZ@LIXfa۠iݘ[}-ܨM< M?~.7^>6x0z\ Jkz@݊ZaFz+6VTfmnU+L(~se XMdRr=Sj$3v22'W_e]Vn8BS4mO *>{%cY!ӧju~OKb~okY9Xz=Rq"h^+)As[}g<J1Ji`V>0 hϫ?Mi8, ^L66ZLL4ul^-sAnv0%'WhAJȷf:Nvx `(K>NLXA'm81I<$Gt1$dPSsH"D)I'(eʉcy8z,~=z=kMʷhDס&yfzz*1h$iۙaw3ą*.Ϗ_ٙ.x~u ui|m;%]~6='跔JtJ'fUwlڼIc[R0}R/T￿u24ON:7uDlܘ5c3m 7h˯am󷬜8[`X0?*uzq~<gz)\qΣY!K+ ֝Z7kQi>@zgM*;N{, nR R ' (Kv1"rR}H3 gLqy|IV(69ߟE5 ׮sa&X{}fr3DTQeBGͤ6X'uM^_$,,zb&~iuvp۷~1#~mg?+ַJuV$SJq|=uwūR(.ˍw,ͽ'k.vRETIXvc1r.+"D{I}a?ZRo<Ύ14%Jz,9,U\Ti 3mj$޷+K#ؑt79`YwvyEFZ#pOz=s0?7nS~GFz x=Z1=x=m ύ6]xR?8wݍpNW\hn/,owpf O;{_ϻo zYBή^ n5gnwͬuPrI4`|kϚ"9a;T.VSO@S?R |jGg3EeV/ Udt*}S[T<ټpn;yT01WrmO+U}tG)`,$W1wgB*Wzϟ瘚?pfΧzn-\*/} ϋ ,^vڋuii=cx ǝ•0hJi2/Y'^#$ͷ*~8=|=>Sq78\W No>H/nxKq;^F5O}{_Iz n5<,rr.E3[80^%w+QzI--꟭¥1,ik) !%⧧/;N$ ##$t rlCi+IF[iy;gϞ 44`97?@ =<QܾlY)x4KzGD;_ o{ܹZ20ԑ޵K >X>>\1Rt)8obTgyQGGR[bTž'Ibv݆w'%զ %Ű,1^6F>WTg6r=8٥j,]뗋¦^g>B1?Ydα=^?[|TV Ljh=WMK}:SF;~d1z7^UMp3ct<#3o[/mK}LXLl0{0FG6.mWb'43o:$߮;2[KJwT) 4F7pwǴe?? O9}}{qΟ 'xnp FₗNz'.ILNu ~@\[1.iq/ vG=O7̚E,900r+#߬orϔmj~w+ϯ]z"ȷKy> `OtB/̗VOL矒aO3CR}#]\.>Lp\CLXO:xs]nårG`ؾY9&z_߮x(#V>SB~c}F ~sR#:[u04A //tgv H js\Ũ޽; A ܳ8[ϕK-|pzHKm1k샋T߼>QIۤ$jSO ܳI^Y$TSc~a̒.iwEBo&MEpQy폏:=Z`c`x^y]^^@NE-Je'Ϫ*dѯܭwNG=kf-Ont2@bdAs2$)sO*WOν3-gE7Ejw"w{jYQ9Tn]"J xgT֦,Y0$q4Re|8R,ǑIFb޵bWSEʈUHkU\{BIKWNEMoڣf~=PRKvzUYl=x~+%sI*Y)%L{w?~Jz2Rqb6>V̊>_ 5cl\v*-K=⒲8LH{̲9w˅a#z_e?FW91j.XovjT}sծG) {j|#?aZ'~|oUraXt_?'CwTIwQA׳{>OWtݳTA[g°q]]` 2qvJնtVk,VX:/^ Mj#Q S1OrƝ NvE7z|=^ppԳB' '.nƟ<#N7x\usA>Cn ^CKx'i=|y,ߗ< 43<-j_١Vo6*U]Oa(*|YZgR`-eijw p-tk\-@~^*g"γ\$pǗ ?Z*T䎭̌obƜwZ'V~y,u1 ,Y3.4㷈tnc0zwgʝkf*cquR-P}s U>,ޣ4&or IZg?NGؚ v;>zK0w]j-{bٳA2Gjf5G̛9JF<8xs:k:w Ϭ 6vubV=e7J\ 4.ij񠒜1<b=lo* ݳg%{E#<='(|t)g*p]=~9!?C:3*?*T1jX+~b,0{u=KGU~$҄EedPDO߽e3)]v29\Rͮ(*l$xOySfD1s[V3?Q( \v!E#9> ꜝ▵٘gOU{ݳsKķ-R FP0,rr1]|ʪ+͊ÈnKFN輦/)Ψ6hR=C:2"sݒ_,5QGmT/];p:2kuo)?+uiyc5hw:o:6ksy3oUǝGO{{i1LW]loQQ 6cª]2 IDAT|`\K,zF\˃W8xll'HWJ}2ݍ_5V^ #NܬFh ̈́Ny&;YÂYHb.}C02JTҨD޹0g+grI{^^ 3uRo°ݫ;z3%-RRwFb0tJj#< HE^_aJꓺcRm#0e`%#S*`u9@7аJy8SQ=g5j.@lI翖|㱵0Vwi# ^ * wיW[}-_)&%9}gO^ޓ3tq'ZYc/ֻ݋A(~[Ƭ_ծv4js$EGa{Q1Gm\T9?T^ƕv4S]vF3l,](|8+j05י5ƿ3qר3η+aeHԺ<2UkH *>OY\a`eU$zjC@]/M;4Z cШZX1ܟ?wYވܾx/-›WV5Ehc8xIO-ƒÅzNoI " H:h/p}o@y>~i~g-/zܤ%|=Fܩp8c^+m~ϻS Uz$]ژ>;fNzq|S4 ''MnKO|hBK|'W%~  <©?xq7uK8yύ~8;+ SםÂYim`"1L딱HM)Ag * + ^}\ ABL ݪ̗Lz{VZyn"6Ť)fȵ rp ߧ2~Bݕ*%>Ye}1$.%6l(F=ܲ!_d+sU,aPg&b kT7g:wcXtB=:kϻU?jƉih;* no}])&$l9 {7Roqٱy{{J%v'VǬ lفKo6h[*{6D\~r<M!ȫֹY̳W⾍MYS7!7.k̬1c\y'gdܨr瘪:قMZ=o4wN㮚ޘ'q[7m>zx#nv;7ESۧKcZśe]SV'פ' Ü)>8G^^򫟲Rv4s0T@|\8!G\Sōzڡ2Qg!UADhaH."I8^eqhvʥ6QjR [+7K?[E+ͣ޼wʪtK֥֙Eq~*Ϲ}|(:|$N _LzZ|LI2@-gT0?it%ybP0F%i{QI[VS_qF1F׆Kb]Au7RD`Ugk3$u`Lw>B]O2Gee$Z"?E4V<f+M~?ڙוqW꡼^%ύ_$\cw:B7yRT?waY[mo;[Y1@Y`!q5X! Ym"ߢ\(C 0k_?T(1jA`_μCe̬?bQ杷[%:t5`pnzӛ~Tyiw ) J:22܃-Ê!3f}QRR1(DauYJӕwŋ)n2gc0eJ2T!Y]L.pfonNw8cf.f͹BcI,ot_}7ʸ;,ʬtً$az}0ҘQReA=*~m/p4w客Jy횾z(=T{\{1<7ϼouZwv=qO'8q$dN9iI/O/?zK7~yyHySG+H<8u\4xo*sX0bTd͝J:JY$Ox&QQb.{l[MX;4 ;\`ݤE}y?TSz[waT bPz/ "^HLjb߬3&vg0iHv0$]r3uŐCBҫ>]$J. | ]ﯱ*~^YLb~0ϝa{H][#ڌSTR0QC\}sMƀƋY|]"y&G[0j5:ICҩ.޳eeEq޳6AGUvݴoC xPuë?a|,{6/ O:7?d<||ǔztҔ yݏz('Nzh$,soBK|pC;g5E74 ;^up vN$;0k{Q;b,0kYmEڀ.*)@^AZ1NCJryɒ{u]bbWmܱZ`^SDԥa(+ܩnY&VTy;Fe0ڬ3j, S@7*H}ӗc@%cyQ<:~\{XTC%M?;`Yzp̋?P2wQ=wnd +n*>e&-nj8m&--swK|wN'-.?ƙ;&>'mtq>ZrK}~i@\Ƀf֌/V?|NY#y#1wjvK}aԭo ,L2e uuB`-X1T?4ڮ:)@) ۣʨ3"}HbwBʋqve#=j}t[l1Iڟk0̡'H%(xBڲ26̀y;s [k,Fe@0qcμ 7 Qϓ.˷*H'= gTUڸR/.uDd8\~q ?8zx#= -4^np띸N&:~$qS0OFB+O/./y=@wNWZv-D.sUTN$ [d8kq3yeٳalu@U edPa,Hvߓ4-lYNH.f[ e@~g({L|蛌)>VehܱgA{?N&ju ð_TUӔêyK 4" ]BַuχeX/ 餓fǜvXe t1T_VHW7_!y3Iə v 7C2cxg7rFw\PɻN9`SyIr{Mn 1N7ґzq'aH4kF1p:]q#r1oIK]p0%,O/ /IZK81hlKe+<ɼDž׿]wk-6#n|ƿNGO|81=]ܼ</yncivK|&>yă' $N8ig٩z5D*%kzaάmvw_&Fr`: 3rg--fբ@_v\ډz#夕ר1=o-2°]Z= YϺR#x1%'U]T22 2*}gZ*o.DKZ~S6^𛿹x@zٷ IDATdO_O;Fq/|Ʊ%"SI? ì,ܜjv%T)DꞲN#uM=yNDj?@_yԍ4uF '>3OwncdS]jnXxFݫU`ew_׾/w?xfEϿY1P4F{]RX?pvfj.-0.Xŧ0'uw6vğqzں:UuGW*+_z&>xcI^r|_ Yľ?q-O8'8䑖ȊN~8?wVrNɗpܔpPpX2k[S:ZX@Z0ۍfO-~t8jF,G*کv;ylsQgw]fgtUk^~gg[w-o0~DoW+&퇊 |1b#fYy֚LWR'0#3Uo/0j(5Ku/WT?X:v:'u)_~cfJmp0 XRDҺ߫>@<}ƏY3)1pahГa1!| E#Uw 'e/=v1 (7$k8zlHߌcf- [_V_}({*E;.RF+O]fdj>W;?ʅH.,o}D{ʐ*0И޷;nnwq3͆M|^?>Xiឿ ǟZcZ^oOks,\q>! NCCo@/℥cf8aׯz2z[)/rRw^B?G7eiCܡpX2kwu-N0Y٥~ŔU7:œAA:t]m6pvh3Og/u'UYBuao8^f@r(sl< wr1,C|9 = M]%R݃vz/W70j/+.׭o;FD^J <xVI~Z%K^.&\0&Nͪf@OV&*] +%u1&lgX4yT aԝk/,06P=3to?~%\7JK7 )&)%ɤ60?e|RDvU0S0.I0c-{3>Sq.fRUm @raX3z5?:<܎?#)Eq"`;[c*-4pɟwc~hKK|p{XYG2w;2`pB'2//ꜰ|);LLh"OOi ^:CdtVNs:$F/ `0 v @Aqr`0kq-=Sc )71p*QF_QHM&?\RwZ˾3ڟ9}cW1Van\j LYKy+&Ŵ޸ y||T>P{1?&8gsI+G9阞wMYCpL8ai#Qy҂4q6+<24@7-yl~,{?'s4:xU@}) zm080NOW=m8Uݸ؟-T[NL[5@jϲסq_n1;Ec^\/;^5]x?/M?yF77cÒY”X,R_2jAd`I:?\~0,8ÐY{H  ]z˙"y=?$w/HshA"%ϼΟZ#D^W8w-~?[W, ė{9+VZ|~W*u_)iF'J_?d % yiIV~i&!{]~(cn^m v*r$X' 鍊Dp[;;# `|;Ryj$pP{6ϲb_׏QW@Py$e#bJLy.xq co/,4o@2?߰anHH1sL▹GՅԌ=YCoq[xnxǔEs&qu|h3}3lݸ-oʌO:>{8yů~GXZp@sڿ 4uȷV\:^h=|˟g'_¡|JյI'-uӺ珟䉛4q~Pם5;]~o1gd6/s̓y&plKy3eء;nN*ud툿 \xf91,  nwt1ŏɣu[ ba ew}aײ2ix3:GϥȤW㰚aŚLURD vRB1nWez#KR}]?{C CLPDS>昺vNw%ȇx֣u4Rj̇vjuѾ\\ 91cN.[`)Iv&mTjGL:̎M`u)f˽{#i!p6PI%}^)EZƟs;񎐟b^c& UCFL$i [@8Tww ։;EW\"*nI\$ ,˓Bk~gJfUʆlcSm8x@\Oz;A]w%ȵqS% SP,/Œy\@A:U'o:x=oE^Vx{-ξR ::uU?}}n:v3@2Nf];Suunrl19n~;Gv_a/$qyZ3}֩|箅Y*Nj`=O-Yh0j/ꋵ V?R@.\%۲u:crQwZwu:7w`ۢ=Nƛ61/}71'*Gݮ>^>>dl6SGu_Vc ޅ164V1~O}̿6Ty]+\O,:R2 w@S1v/ g|lM?MseuQ9BgT)NO>whu[{[y{SOh+eT7SU,ϴ 7ohfuIYEe-wzHےd CizI&|n*ɕVqƵjam1e*Œ 'CT|MˀE5 +]PD0;Vc)j+n?P:.^'>qb4u{mT {T㒶 ,Rjːf%xv-3YW:M{cIW~eֆy3j_=_(?}GJzpf%-u+U窅ˀʹ\k*ߪ Ssoyˍu7XoT7/Rúj ~J}U}xI3Q  =ZҠYV,x鏋 |cHS15/0pTH0^HI7.jI]0O߹qW=q{^W~p|?~~mQi SQ5#:!|s;s7c}# H`gj=t\3oJ&/7?UN lXD+xqi=Oo8y7q=S;O}~~xYK|&4EpÕ˄7ↆg94lY۳gόyrj2|]r[faD-'H$aUuQ)2nn+Wؽ-o C裏Ru-E_,c/-ŤR]gӛ[ֳ8m;I"\z_93lQVժ7ug\b)fЍz&&Sy~7q|T\}7 (שCGD5|&1_%"YXAzT>6z1G`ױfhb`7l`+F-$qT~9f'3cLU)$>TmD-+ga*1fҷE_?A{iߜ2S:'o gp{8^[{ܪiepW fhn&*uY2xݟC%.pLphsᛏSZ\ WNQN'dݺitv 춪Eo:K1_[ b o/f `&2h3ZgLj |#S%QƝ.Q{>K1#5{u1bpXްqPIV#{hpwT8B>iU~Hv/hղM >vcN絯ʆzH]u.g^&@m7PgTE3& )fmK[ QxqN_1}O-܋jvއr7ď›MKyŏiSqSu:emځFBFurBvF@UAWC;ȲdvdP .jv~$>׽zURHV1xzA#hOI<ӖeToL@~L*j`h#LnTز{_ƧJBْFY#TZ"`0l_ Q Skq} ڃjj 0~jG}ۖ]RW;*C#׫g30 o\w}oK+#`]*f1n,e0l!ﯫ]Ffs$fMtG»,REӏx*r4P?|?FφxsHi|v I\M/r,J4Ic'$|K^};a+S[it;T>I8Ա1 *!wj\.QuG22`|1B;b*$c%{c ̒ی؜?-8}`G+1J6Pw|H[x?TVH @UFjtX-[TvQKFIȰu(_36U._/ g.T];eQyK}<)d1 ,: R{Y^r?oG٧n9bM4R̺~Rѝgl eCF &d.iU`#Tiͧ$7 R}edc\h^w3W:ruQy0[=- .7347f횥*fG?]=yg͂iXTIIx3.c #Kh݉@Qc^:R#kZ^^;'QEK[畄낥b?5q{*9džimo*yf0N E_;0jE㥫^f<~:*¿w'{|T2g `K,bzPLIwz'&R83s@-b䆾"&ay?讒}YTo}@߰,S6M $x' H1yrbs̀t{#i4Lm i 쐱>)P_|W2X/b/fg #h:: v\v$u`@ppIcb2αoAպs`;T 5Eg޴}ߩ'q`-O~%pGC/VE*c/i"`oK:slvLs-LV彳XTjjKcV3Zvm-cQ@%]/J¬囕oXϓMHM#AYmms f3v'a1kǎUBͤZ.I>bO~PIɢIFPpF_s/ud?JZ%:λ<ð}hoVGcu眯*gT,C޺ "[) /K=3^;D- ǩ~VgYR*7jgCp}|3KX<>ͲZjg}\e䌝32.%IbШ=ؙ8qg,]ޙ]ܼ${'ɉ q$%,]7.Yjr71XAPuñ]k{Sk1ylhߩ_SXȣ%:1G}Ltg"uXnH1\%Y nR'[$^HG*Ӯ>W5 IDATu ϨW;]C>)>]:[&Ig}X?`j|_gw}晸:^OZKzo?㦌-l#eR6Wz8yuc'eK=Lpz8x]_h&~xo<<=gc2σ VK4'OO"~~7ʄ/ ~[4:sAW e4N/YR0Bu 33Eb-;/A}/g㔑q2t}eӳe!ʻ~Y:h^w5l}8F}+ԂG>PZ\`ЂuN|a՟*ҧHo8E>yY`ɟ,5q)K}r׋;ً\1aH0l6U8Yu8Y8&O|,Tj]Qqw{D22xU6 `C]oA[4::Jg̰&q~[LE-E &o~s-t/ Yֹ`=cΏ>R#V#XtXx/a2XcqiKeApOe '4Ap?E{ '8惫.=>e#>iOĝ_򵨹j3c%_/+хy%%~Pc|gs$-Mkwڝ&\=%NqƟ)⼣hO,=xީ;w~SZaHZ]+`[$fJ?x2P+unႵf$G L>_*վ/ʾj vsׁJUu)7ս>Y!GBv٫\eQ#5sN|?ZnaؾUmaPY"|1P&Y)vQl*pu63EH#0崻0]RKzɒL}ZhtKBѻa%y8CŐ~r#RDz@nU' KIRu^e卥˅/I=+ΒlGY={6M Ĉݡ,) T?Glt`7V_xU*-w~RD=tb.as issY믞F*Τ$=`$F8']Uwjeۅ Ru*uHj4"Q[fQē\OjlS=_7罣6nHkuB[?P0]ڭn -V{u|TZ#`Lh>zh.RQgS| ߹lW} 1ghF^{qNOn$ ˞9xOv<8)MVRSV .7+ǥ.C7J\p+?Eiin$iuNhs@w=c³}#N':ҟ n@Cǟw;oGzz_Z?SO<{z‰+~L[!}Q`]\i;nl0vJ`_c? y.b҂X1cmM)3(agnt>j)щBzXҩ{"ꑵxfe"H2✦Lui_/_.ܓK#I1PERsLe.C.GY JΜR*'TL]y|ImeuD-0nn51׫E.ZyP哵@I,}ȟKemyWZ&m_iQ aͤ缓 XaLl6$l`Ҍ?*T(4}|ݾ^TWR'+/*/SWR{& ~ޥw0$1q5:Izlfz|,ߙi/8?qSiyzSGy/'/ O7IJu?<4BgLKYq17q'/h'$=ퟰĥ)9=x8)~ _f'-[te.@\"%.x=SqSi2}X+'WXGBBK'b['.xYt3$w;*kvhRcXЯgꃻ~cvbo|OA_C׋abA*`$Y x=|3S bPflܠ$Q^LuJ-nGF1HGTf>F>jR"%|RyYg9wgχ(t{?;y+zf)@_mR>g @-Muy :u;qev;@;|Qּ_yƴfEc)OLv2vાdF,¬]XQCUHظkm\T_Quw)'ۗ4嶵[ås%|Rظ-qͮa0K"#{wnƿR,OzғfYSM)eCjuA*ڋ|?7Eb+@ wj,Cbb:IVl2B6%n1};G*^C& ;1͝{1_\\wa[X7/%FTGXY$O}qҽ1=xFꔴEyw+.wbQy&CCKIJq)90qi=~~2Tr=c˟:?CU?ҖiW_hOZ/!eq㗖rWi˛g[wX3k?WwxE`ZL[@QKީţ2>X)0Y\Κԭ^?V*,)5q!LmdVݥ`34pcannxK1j7/a%2Qb^\ m&y G]:?{{ưtRfplW}ťL-^,iL`=.~:iU7S3u7>#%8;b\\WS:N.,9Ce-I笜#Ne3Ƅ4 mީsl .U8} ԙǭw%,?~c̈́=.(w9.L 'ΔZ7}\n cni e' ,ğr@˜BnSțt@xO]<~4suH8<#HSfܞ../^=z|p|~{o3nͻCGXIvMӂ/ ~h+W N{ sHze(7~Sw88;CZ/uv+d=Qkf퓥.G1jW΍8cAe癟:Nڝt )58jiHd3ΩjL~.fNX?3؂$'arqn:˛*@.jMa6`S={fgc}JxqUKprS/ӑŰ$&Oj]}.8o*i#n2 ͫMW)(P۪5xݷGʢ+F#c:9#`#)f fo=o&!byk^qo|"K.1?@͙)TKާ3`2&"uݩg[4w|3w3Mcp`Ɓivu ^,TI&2sԟ1᭥>ux0 8G 3ޯtLT1SQ>N`IP4>a`E9@\6N]sp2h~Y A&Qֻ8T_R}>,E:ziZF[5JD a.,ns F%aoLw̙h*Y5[FcY:E*s՘e;/+ W}e^O?ˠKl( 7{.Z;>U[Omq_J'N{fefLj}П/}ٽXYLJ@:6sMJ"jRg0N8ϗ3k9o}{k~N-ygq7 _@>vwL')nIq74g/uxHisZb:b̽A$7{Um%4 y 'Np +Snpϝ++@&I9=m#a%R3/hq+UYg1ت~R\$ [b^@I.R vZĻ(/Ɲj]*q$.$v:sP:&"=髸c0tqT2:MoN/mơU PUDx*/Cʏ߅9_H0.G4n:&mי8dP]s;´Ms"0wa[`w fL<{|pvĭ~܄MlypǶeaY1=uw"Nɣ>SzTӶSirBsQypݍ_KfuBԨw@F?0=P*V\JZ1zT]rARy||I,@ZR ]r3w(sB鳵`\Iwkmh)JR9'bQe9n9UzJ]cvWopHu9昍n Y`x}Oڼ1g_L{S裏]@bP4Vh?Z[&%)`h$Xx_TOEp=K- 2`*.~cI]ged0峞C7fXf0&uOTo X|rĻc;UQC%Ue/{Rmc8 UV볛,\N1vc@\mSp6h@ÓͼI-V]pNпG]Ήnew߽eŷ|>x\<4txp,Fz+2QD ~'q/g~/%սqzΫP,"TW&,̆1iڤRͽ`;*{|E&a ѵa|-nWv?$:_sImn_ Wm菬Һnƺޅ-9V_܉g.S ;Uz@z>qywIxpK{)yIܴ\ᾠ͞'E8R|z^ӂIyz%.#-OZǏ_Z7W?sS mqp: Tԣ+K,ߞNec /(vi9e!,r]X,]AQx[0$_M i~U*ɡ2}<--"Dv8I Cvu6 ?LXNc+~XY/.;:=bDYm`z>[IF~,J65oC~SS}(?3q_$ƨiLX맿={ֽ3q6z=>sZ{6#nHҴaG~[=?g|K.)sJjgal`К{RArVklVIZ?6뮛V >*]yE\6'fcYsXHi)󾌮"d1DX ^֗vzh{;ug,#"Ane<Y  IDATlԔ6:^if?|09c;'uRf2~2j_w}M<ӎ}p}B Ԓ*8?s=ڤASFG:9N~QkHrzk0$aDŽZia'Bn6LZ`\al.҂*~yڡA?B;G6 tNL(yru"bf+ΌGѰ6ӱt3>i\?fχ3SO=5GjPtq`D%M{cNL1=Z9q<+{Ƨ#Fq{,ϖ:䨇rKFGuLYa}M/oh ;8(sg)glB?Yxe0uw FwPiwHȌB1c$<"3Hq 5#/B`Zi[,ol h:gkHG2"ptӹ@Yď\\+#q~w<>˜>!iyl<"-ڃnQDzäS0ʹ~<y/IMM]=6ui ^^cTkNsL1> 72dV7=d0LlnVd6b 10:q8CĽ Hb/!Djf -%箱jNFsv5Qp;TD~UcN[i9>F5]uUE`R#u:e3_5z$56xj%X -k ճ6, ?'kܸd빜?K6s aAp-.gU k9Uy|fmkB_Y@ps̄?Xy L#)?q>eІÔta'W fm\ZB̌si.w|9/rύ88N;t=i~6^'!ב^o'FKQ!rD`+0AƳ"~ZM@Aa΀ & lAhcH][o{ʀuƎ@`8`UW-> 02sEa5ze*mЄ0#yыh\0u1y\pԐ}̀U9b=a^Z`/.XA(0Ro/N2uݬ {|sAFor[Hw5pZ>GڌkRsYHx./ ({9#-Wg .4S" yxkEkxx? h*㻢͎JǑ~\7'U<8Nq]Ɠ.s1rRPCu#xA`XF7˨zx.}t]puH^i#<.3\N]Ώt]n9?% D::f !Q㙾;Q!1>b$avs^ lD|C3X* {X:4N^,d$1v*#MXC F՗ )ul1"K~7/sg}hF Oׅy](@5.{jl8>C~ȡhDY׀`\y˄5c6疡!3c̳XBsb&p~per@ӇF9RٜkV e#j@.${mw4ȋiOQ76Me໿#.8^s=Bꤸ.zR\5apҦ[iӷ/s{12 pr1u c>߂,#=8io']{;tFKQ!śqglRvt/qá9+b^VC~>9Ud/P\y啅 kPc;^!̻\sy"Lഅ(/6I;g;k7\>[uD9:p;y\\?iM\r j, PZPg6*7sB뎄m6s!aL ]'? j#>P+%Z@0>OO3f T]tQOY,TQƼƇsW$x:fU2[5 J:t)7Mʍc~\O~Iv)ā4>WIˠ=Ӥp~=uˈizjnynڎ6:Q%nt^;a'4bv3z:44aҌ< eNQ8s}oFVK:R:5=*8XQFXk"{:2\ݾ٬xُ|#c}mZ3<-3pW~,:L朝uء,YK0v0]`>CV€6;Z Fj 8bvƾ>g茾2a&}n8%@PcOΦ33C eZ~*&^!@\I*Pk`p2.h60-uZwu G7"`ǹ4N<:abg3`Awĉ7ENOl25h!c pgY50XCƈDfry.#z_u&C#|hqBa:Hc5^)L9u``XyG {|ܑcEۘ,S>=e #W\p„.,Gs!(rWWɸb^Fȡ>?á3WhŗZA0qyZQDS罀!яm`W.yyn1}CC~OVVg&>Һdqog<^dߌK{+~;f0f%0@a8(ǣ*U-wzQukhO<3"Ƈ9Bg]W agg92Xs#ߏv߽mwyws <@/ҧ8~/F屍2vb^Oi֭^KiUWцst)gL)P~3s6DX ?TWM7+/!SaknQ W|UPC8'6UݷК)`euS״+cCy5 xg@p}āsE[;#Aby?Pw==5:4/:a„QGU5\0r'Oh  ,awu\GpOx9lvmu< yy-6O+׋!uc7ҥ2O}pX?~SԃĶΈ}s"=v2Gv"]bwR gUЬ<="%|)em6o|Buc[.υCY. Ol BX;ޠ2E`!pm q a7..PcBHb4Er>wNad(,C[n)/چq0N/F F?SCLxA`z}):>׿4!?Źg+0pR&kp{y%|Gw饅06^ +״0Q6uM_^9tȵ=Ztqfp c<;vH-QL A#sĹfW#ܑ>W,7pC.еi}@sAc)0650L">5Fw͐iPֹ~P*4S;(@+_׍eauY;yi}9^?R\R<8lVn4+)nNt+nL~:7.c5Xǐy{MeiWz]^Z;G6X7>AL4:Ya$PܥMOIn&#mV/Mӻ$-A p챋P@]9.d47t4mO0`n)K1%>A7HG ao478k24hQ@#H#9@h&}`V/?E2YYj!s 3ָ,g+J}4a(-! 85Naz]:q=/`1fK^%_b5\]W՟0- 2܇cjy4OΘ a wܱ>mݶ E00yĜaȌݪ3~s.44{];;A"`hv+ I9lm8!杏9{S߈yXT 9s`E!x =?bĩI+uĚdY jJ[\NҗȤ_o̯"i c鳫l)*8g7 x°^}ZWJ\NhfV 8s2B\y7cQ{H{~>eyq5ԧ!}CH@?lw IDATl I/hX{I?wёLxL@!9=D;ւȡf!iblS\`"XHLFK[0W,Jv!eF01&.'w-i~7ct .wiNv<2#b<+wxY>C*yeaW^{,=9w[U{q-L0`9Oh'簽 D es oh<0`zx)c+xUqƙyx3e|s`Y <ϋDƔY/ރG`HGqg0ov-:)ђ8]W3'Fb>}DV\Gmet^iAZԼYF2{4^GGc|8.GE 1,L;z^R$/Z H0!F1h fCML?boVd.㐁v폷 6@0^R~_@pP5&8AB}'-QP\#{0 <}L<5M4)pO kH0`;X}l5d Ƌy{ըI^OGͅuB^KLzGiqC,'Gr4(B<?OeиxJ}ie1NۍN.wX7?nyԉO+KqӴE:^XVUnvBލsq:mzxbvǎ8s%#G_[.zcN֍A|;Qtx^Ъ2{@fSd/gB;Wu^O0ڜ\7HpEV+N1Qu0CXCdB2 H3l̐(cx}njS:iA75~ƾ٬BSI&{N:b0/ir#l7g,8*KFp*Hߨw &}3F,x)i1MN̈́rk<3XVT )~|:N4r:v빾e!u"^>S^V\Y,xwجxuBhc8X4cӦHt*>QN<;FX3kӱEV\hWH4a`i&d*x=`^d/?Q]mݣ6;LҼr;Dp{Ў1&pX3.h]PIeCѯnɼZ4c0a<~cܳ[hM O,6 xp;@ٽʾ#8|vQw F;u[N[I )m:7Vi 1ދq5z8.ɀupLpL2 s{qId㱁վSؑ{9xMm b@}*7C&6cu0lU㔣1A+R4~2Ž+(0NkEKy^mƲB+Dp=9:tg; ϙ\N;t>t cw@m7 m6ϑsyĭFs ' y% Ip7!lyrXM4i~iQ0mbU gx|TW&\%BR m.S0<& h~hoмc|BL5*&{H?}܀2dlr0NyUa+/0^r|~Ar DHsϸ#oƔk净aU2m\7? 53?ϼ*GyϲxeC~n=} }qY>3ifdF`jֶbꫯ^xDh`o ZÍw~%Vz@zy}\RB,bl"&g+x]WE5,47ˤl͗ 7y[[c 폛_&ݥC/<ƯFh}Pt &L SV[*n4@8 3x5̺EV7tӢ.cV ``o~(u]sh-°r)53"4i,]w]aYpѢ:a]ͭU\{mqYYg9N}{ j=69oyxv4 Э1!- Hw߽xF4nTF[q4?hȇz4s2ܘGЂݩړ :$N`+a~Yfqa|P#xa5UwKت#β:6`1_pA!#HGx; A 2{@6;xN 2t ޻gi%yA}Mln1*}@#G?]#0f5kFh p9$VmEib1kKHzL^S5$9pf8gcn~I&Gʌ0i^mw..Nieʆ@;׾>0o#~XsFԍ:fO{EOQQ (MҤ~Vڑd¸VFuCp3U2ų&crf{x 61|3y {g=ӘĞp [ouÅS OU&;SQO/#(4C_Н`9]Q;/]mw>a]nkLe~?MkH;\ԍbxq׋yx./rCʬrCs0]e M:Wn2t#lNZ^vYtyQ^7?Øi+)zSf p::/sIvyF]6ԩCw$9a2؟Ckyu{*W˯JcGBK<&NkQCPzs;E S|QWc<N9>!qc/k wY<8T׃&rcdfx!"tC 1w}I Ë́{ ĆڗkIAx 1{"`K&`8bY37rBg4*!9xuΩe\T`^@Ս~cGDB{MeOl9``HԙJ8#ς c6iҤ/DOߕ,$Lɑ">0mn`T<[~b< ^f~N f"m|i]'Ѷ!-s>a+K:#nċ92ܘCs^BߧfmN;1:0CY6~̏q;cܳ1 riq mǍ4\&ieNG`| 륷qG1I4 K6si{m>=.fh1jU=dڒN lڃy_ W\tQxal& Q>@G?@#G`tּ3zV_c3>x h8|Z{Y h.7Udbt̉p;F*s9*EJofZ0VbVm6iжaơr1`y"&OGhOzF+ qO~uX?+$hV<=ua""7h ^-sA3f1ÔB?4Uا,r igJ~U~TW\QhWW^yq 23M4CUDcV.`wumq]7~bGxnZt08n1P4iB}]N;L&Lqx9m/_iG>K u5ƉAy@ǵMr@2>9`WY|bnTwYiўc-9xX@Z<=Hi՝b9 ϐi_Tg [LWyF ݶqG?Zh)Gцg"hˈ?P)䜂ӀاN3v{<9@GG` 5Xẞм%]] d~^S9+a^1h4_Dzu귒O_#cɋ`Z1|Ҧ'5MNSnUq#/W\6\'/ip\^VF~,#ӌSc{mZ}a-xkg]ê'c.|0| xYdw0OB/e9jOH뵜u5405ICP[zHvOr>☍x?Ӏ=9󒁮"h>C3/׷\u, m|;Gz18* ܷ%}@"1O}@_T TD]uo ,`X3KF2?w ko$ę{ZGcske"@V4%tGqA{ q"`1Sr#DZ3 IDATWM2Vv̋vkZQg!m!sK/-ByC;+m>|F|zLn>ߡw4оf3&\{zu}#HiAy$,Ņ%ʼ}s>qmLg@x.i5^Y֋iit4m8Fs\?1N4M4qb<0vB46x-7=5m7KA:8V|zqݲ}q(S_*lL khD1X$F3?2A'sIKaں&7ۣqovif6 {4 l)ЎGãQL" 405jK=$<&&& 1I[SLLZ^J&&dTƇ8iay[7HZufc$0e{j\6x `q5 }Bd^7Mj& *n.y .h|D,pnnV/9ƿ,b.Y1Q9>vˌ !Y!@9c ޡ})6p3 )fi5SF<ԻM{+h8C#0pSO֓Y6_\/l˞+Q 7J&?-ai1joFk9mHcA,@R)paMB5BIx>ݠ KJ("; lgiСSfA0+G5(㌚謳 =~cЮb*x֞T'1ꄖBZMq2V}l& x_Gƿl?Yz,%E?)(>!}yo$MO#t;qεuz `Iw~lk8vPP=hOG#4/w U |>X3fOczr-RN,&>NA $MKzHGeşL{]CPxeZZ_Cm(SMةH+Q_8ԘU N'!dʌ3!p8(AȊ>j XS-`@7\$sаs$tb_br&dxϝw6]]kШ'mRO,`<0ַ%9ffhxy3 Bca V|u*DlxkvcmkJa߁3~.3 `$#'?L^,읋c`⽇j"9|- &4^%r.>PG:.i5``G=3Q x9Ou{nV0+< c^ȵrb cEL=yn@?Gy~JW+ X0"04?r26i;GDƂ9T30\!C?hq#=]h{G9A76uI Xf:eāyois1q_3yR/tZХ^Z/eBqLweUkr?']vƍa' 4^Vzh])r[~n݈.&x7nYy`oiam(sҎ."Ѯͥ O8j=f Q`&o{}tw=K!2ah*MaŴe[G[V#ȁ0)Ap]iNI#8pm|s`:}zD҂Un3$8jW@PG07p\yJw|ir h;&s ?!&j#MR!9_3&)gqcbX7[ġȍss'y?Wu=ʍ?aNo^;u~J#4{:^C{پ"Mʍ[uO*7ݺx Iȣ!=!L.;δÂ}_f[kcGy18"9䚽kω9{4`|5\#$meZ-@ۋsg43&Z;7D.=ݷqぱ JwL68yp?,pHȁɩYX1i8=iE lc !ØA\B@U:*9yCl0 J |opwro{b /fop' 0xF>rCRF@k·C &A9􏅈]v٥rm"hz)؊`y~?h#h!ͥ#S & "Ozn'L[%pe<מ*s>SN)V.aZ qr/~QLp(\j1p= B]MXV;3`TwIس2%Chy00qX6'[|*&iX%wiR&ˑ+ƥxB<{چ`wibs%4X0jWIzhA`^Eü.\Y1hDֽƴ={ f M4nvtF-^8Vu6*F/uB6khwU趚g%4r֠_ԟ~R{3f Z_}8'ާ:r!1jb>q~p6w!<ZfA2AG86gvi>Iy$v]{NqN<sʉ(2{9V?W_̒=Qq@xc !PF$,9qġ~C<'C)v9aNUqDz\9y9^Z7׫lk 0Vmt#']>X!ms_wiӹ{H95&.:aG?QxNL2b8<='aӃٿ ^i0{|H'?ٸ_+o‡ >^U ^R|Zm/L '4mcs8{k$yZE]ʛ(i~:!}Ir=Vm {quξ2iEˀ+-g4^ωESye 84L\pLOq GK>äC`JZ4)~q$R.9ulZLs AGa`y|Ix[(}2Vr-ͩ/WH~ЅI"SÅnyyiO?{ 8$0 Fco-5 =O7 '~bq&e.7 \N8eCI9"ɟ񛠍bZSu~s>8K)ޥAR z&1}'9C{p:GJM4x^$y,]eIc? `0>,qVh>)摺uSJ:Řep-&mۜ3jN"@&}[okLA~y_rnvH c0Mf*)q+%9dAhpw9a LL"W}ô6>t2ݐ(gRa2.^cxRy62%C#XΩ= \\hQC/*4b\ϴozn̋8?#NU~7Ti_Gk@Vsc~Y{?80s8)iI)S:'tYZ8.wzBa=Q54=Tc2s&GG`P췋)Sbq?@nڗʤ 7J k~ˢ:&]&଱+7Ҵon)֑T1J_R~4DEۿ7ܩƪ4XK0 Y=^-q4kte>}Oa 6hFfkFZui]<._2cvY kfK+ lKK9Kf`r2"g'w;μDx\R0)Dw!LJ󶴞T6g|_N'y%5nĹL]哗RO"~Zݪ|c c)O ~]VOKe#U~Zxcy./ k0b47umܮ=-0Jv_ &f!sz[:hVmOW*ĸЯI{0e[Hf[)Kb&&k-{E@f zcN˃ur) @y\Pڣ=%,$@UŤ&O~I-c6 XӗDk-yU^{pp{pt@_`,j23ˋ46N24N ;S=q.Ku(Z4v 9ςx.wJf.H{% lG,=<W`|pݎ9Pi9~}/ `Ѐǥ\̧2f1χUpPVz]QGKWCti-5w ~_;x\gV2ǡe\3ԧGH&2{`X:^r*zWlGb7 MU7a91RZ0<> K跼,!")&s~q&K|5,MOQPaNr~^xxY P'5xi|Qm(zhpa<+I+aJuCBک^8[BK{4.59& ꜧ etL(1u m {'1o.2,'Onڅl/q I?hA=C#JYIG:QtBA&SveU?]}XCFs|^#cO2 yY6#j0o'i~;ysvk<:րOoiwIbb!7|Z.{Fa9 4{=IsoO8y}Sb=p $[JH'%?=g81s"!'W5cЫvF]52e ᅔ-ҥ&?y;U3;?JwGX;Jݰ{8Cᚎ4iYןsa]0Iڴ BM;xY;_NVՏmES^+KvH;1K9`qOBh;_5bZi[ixc=HX1D@c#3,Bhuc0ycUW]UhEP,),"a6_)63{ÎWܸI%,bB\y6 s!|NEշ39cnhA`1KK&#qX@ؠC+qӓR|o0g-hI=Z$ni0 C^-`_wqSa#p\7cJp }Yx#]## = 0- b^)` 8163NWYM" pK{FTۣ[d3Y<Ш1oFS຀0v4$Y`Fvn9F5NѢ$=xU]O o) ռWGsy U,?ZDR L^c<5 .^堔,F:\a+㝈9ΒxyOqm{n}I:pm`=?һ=BdbpG.=?i)E<㛖X)^LypbX1⚻pG1f8@+ˋʋN PQ0gfH`b _B@ %&x05DV'Yr|¤z"dn-0j74<+L(]MJxPGli EL2__#g;}Y9 ji+ƠЪYQ4Aa2.3O.Zc? i4eK$OS:zAq.-bf14a d,8BX^4]g} 4> Ap<;#$B7frpcHefm;h}5q:6L#B, -aG:\G 35ϰ\"- 4ZXmҤSZXK5WE=ǯjqFOsZ{_Oۜ ߱؎iMa,#"3N*+//ӭVm7׿)Vg<]Ncez\axi]]f\y ~&t}4 ;]>hu,ڹ r!|pfa F}J7!y| =eG&{ 0bu61Y!M=Y``ڀb~њopbj̼>&ap |%U ~fZԖ+썚OKAe5,e. A90YDƌbZq!H;6leFk,=si\'E 00="L@am7`a|+r:q~ A>jK%BX&7~̀֘\P"Y`o$!7䣱d+B: B21BI̞j[ k1p] |V}5[ys{6h*ߚ^L1Zٷ eG]0#\xD9o&,X9r]εq|NS\iĐxvy4mԘ.wXUfֹ#? Pr=71:wqӉyNܴ":_1k黿΋4]2<#,9r8( Ip:!80U1*0TP rQ] E>QX$߶4_4AMZm]L½X{h`‡g jP7,gwKnyV18$Ac1rĔ Q Ju8g[4O tpyFho]kΠQdOc ԍvBhcLXce< l}RuL Y3ϩLke.K5ZSިgͻq0T97.&y1ѽs \;(papL}>f^Owg5pm<[8@`F i?Q+CE8#A_a櫯.1^} 4owYk?p3EL8aƚrq/3]>6=Onh5y>=~O4,h!-~n#4GtCex:Il$=.ž;*l^kY~5KhpGZ>osy5.u| XP 2(3Cǁsq\Sc!3F6}øQr!xh(x2`m.Bpj?q\yKE-)K̻3E|B 2}KtWG9ԗ$M>XSp/&ٍ_/&1_ kP 06J+y2h^vء0BM& FL7 &x͂VN\`urݸg@g3\ex{;0٘sѾ* cܢʼn;sf̬]$Â"b4$=#\ځ+`v{G1dU1axypf(*0}e~Eʘ9Q Ѡ",0 sq0/xw BB !bg3=9\Pƽg>Ez9ӶZMôcn%t3NԞ0N|b<.7e\?=^h&w8+x(``ZV{Y|!5 O3 OF3@vg4L׀X |2fpx3w&VSE)!4 *CLO(y@KޤQiT +% dJcIWQ N}=^uikkמQ3IOn 먛KdYcN,t.Dԥu12Jœ]6nZMҌ0՘_e `Fa`4`3{2.2Ues1ƙXt0w}s$ݮ1qӴvc<KpZtw9vo.no;vMlGK\ȗKGr8+:=O|LnpS)~zӰuzFc(O/u FY|pDq ĩX`"(gxp#;,RIfB}ؕR5pɆ #ԟcNy :S" sifvҿ[ԕ:?*qPz/H!aD.I` +1V#3Rp1 ށ3>o[m=mxLs_%ooHqY s_!i,gGg;0\(sn{gݘ7A@}sq֨DR6]>廜tZLp;/9WƬG˿0XviQ<.ka]veȂ& = XYPq33iI5.ڍfqe=$ H\wGIyv9N*Ӧ(|.}LsZs)w[Nh"ڰ´ @_Jµ#onM̰[k|S[eu`|EEˊ ,X!;yJ;j${itg2,'ĘqV0撱 ye@jx@"9,⚨Mbr, +uԋTa'5Yk%ڨAOQc!"F%VO(!ޛTU#5{}y+IEVr3t-!*z6axR:3?`I:Ф.1O]9 KC"tu~ !`8.7M3u-BrqeqB?S&cf4ّz)Lh!"3 F^.>D7ˈƽ4)iq%ӁF ]OqΗ=RQ[i1=8ƙLKJ4F%94`P?=]50:0(~+$<]Lnmx`gxnyz) 8V;4A85jr&Gd=">8[61&\ǖqX1,ŴArK_]mH"#0`,, B0X&USDq#z갼[y.|K ׷N-ߤ9ڳͼUgAi;sw#6՞4aD9L43/6s'Jؼ?*SNr|O\`M:ڀ0G˺li῟ ?nvZwd?pyX @ <2H;#p* O\ -c7♆cCZ34>6L.uHNw횖O8nCæIé_LI'tea t)C@Yrqs# [FwZͷAYz&H&"0Y|s"80]q'.e?8xI rx0U"qh9ܦqwOm.^J —h! H{D $l!|w (uI >`%{/6 ۭ 4 ,IsaSܘ`Z(1~ư%7bCc83#g\x0^#PJm,`Gt]NtT LI6CM9<M!?yXh^HՉFmR+% _j˵ʠ uЭ# T00Z񛵱3w$)6 xŵe4Ky7|ۘt|;c '??+l>Т`ޡ870rWI]>n%)e4Y?7H~Iߑy<lG#9}`ȃRya,;4sg;0rR[o7O+t?S庞3]Qr;_'r%o. ߿~^Rd˃ MY`}&͋T30 $p,rN ,tY`6* g.*3 1 p#Z$"C?<."bOZ|׎5RaraT-/D,^6d0 1L8N?.H\ T+1QZ!4# 9341)jl0tS.eŅ0aС u0O%0FX.u@rL~!T γ(wQ%9 $lT*S ?[Fն+dleum2K r`T0AHv/ N\N'_(K?բ7j<Ɔҏ|#m:[hu&g0]D#gs<Μ IDATX iHyku*Է*cRYd~Ї6fs}Pɍ>]Vcuq]cQ#(Gu.N8lj|Suܨ ]Ks| ҠObyc-~< a 'O0aeu}t\7^OΟtb빴4.4Or.i@a]IÎo-:>ӎLw'ԻgfkHl|4y3<pn0} JJo}G 1Tp2Z3Ġ"hat#'˂sgz2^ {XLVF ƒ"eh2fAPuD5Ft&úc0<,9C D)at1?R6ɚƁ?Q1a f{#`:sjQ+WØ +4~̥?)FwH{* Oswi 4wU g_9`a'{Wm>#$<^9N;Ty6jJA4ve-RAbpR$f+izϨ?{1a,߮]rins:;l<%zNsVStI#D<ǻ~͕MM4\ʊp)>҉1>V|O7=b:pXq%hW澽PO"V'~bŮ%ήǮ4lJ'X¸4 YT̠\,M)NΨ c&b]W?к:˰v9%HrQ6 3l_3"+:/굍fp`h#ł͜D Kn!]s#,`YÌY'!ʍM0I }A:)5&bӚUu2HQhwᏮ\ߏu06\|;hfʰji,9}{`d;u>BB?1b,57;CR*KgM˦ %cINmTݢǨw{8mtzVr˓ƼџGF]ciu)'r;;mۜa|NABD r$C,^o,M'7ݢ\h[]], X cq "ۿC|)?9M*0a[MR[^uΆQK\?Jq#-Ӱ.'u\:i_tS9ì07,}Vssa,BqvR 3Ƀ ;,Yl,S&͵Z-:fN\.yg& o|KLI>`P-pe1s=?PaDh<d:X@Bm8Hå[\r*&V(-a^z&Jqvm*q6XN8 v xT%\,Ks;gƙwly&7hvW(G0(w|: Q:fD&o&0wˏS9K%ŅXX7ׄ̈́}u ޢk@7ˈ0|M߄b65fڰH~3ϻi͚ʥqaxۈw٤OA]/I]]®ӛ)&ym}ے Ɓ9l74>i1=bi8.uI4HyfXN'%#ԟļ7: Ey=0544>!X{k 5 qqYt 0Ca`ԮQ$JLڳu.$vf8LN\Ng3j!m0l00-nm%qBJ`AȐR$t{ #XjJs.ϗwxXؤHX#aJx,YL.Rt#Y0[;!i m0\' 7@ǀ`qzu|1k! tE?v$08f7džy:Z&x%0aIaK67."V'j$i`$Fm|CcFmkHt0H|4 %SVאeʿjK\Jcw s{h"4Lt*oq-ub/Z~\?Ny7Nő ̴n4OG88.y?+se5/r~ eݔR\0laݜwCl5,<ΠZ ~Ki2Je"WEwp_ &zs*ky,"ÆΩsP7)@-A<F3Hr^⛖Cx?,=V~Ƒ?.ENJ)suuw9%3RVmY441nP~L 2˘?G w {hH?Ն w>>KRzӾ|Zܣs|5%BL:26z!M⺊;Ht1j|W zfoͭ\:Ňyɗ+q&e AmN\;=0'5Aul7^`S0 gxU@I aNl% jo{̡ڱ_A $QCAwRS[JjI,0W;JIbnչHR?s?Ro͔! Ij^fP83CqNU,$OH_t=HԚ/n*)Ѥ=fZJ8ăgCux4=ҧQr)rI7%8À"B4X:+s&5Rl `ɯgK#✩)12 M3&iƉiqJ.VD* @WqfԗoQSq}+Be $'tR@8C; 3٦nʆqaM7?,F>.1QfLwrgTuFxBb1G XQ'`Pnܑ`ȅ;>0/ F͑դ-\bNPCD%X.C~SgUSH]0lr~5];G2Ί!_KWuU7$hϒ:lox6К+SLRJ >Jڝ]oO]~TF#ܭoUc?1,SF3D}y\~1ht8SiG'/ﲜ]hƥq1-@/B]Z\]IiW GRџpZ˂q)A7Ҡ%:Uw('?v2@0yg]da|H 5x}?L##Z"Hƪ+Ab299YyE+QJbg☓HM#>Hg!u&}})쮳YW^Kt #/X$kHa(V:]voGen5PDK푺q;k &1v,"aom}Yq/ *}?Y~,;e4*㏯k1oɿ$R=c;JXR;;/hc|Fߒ5\9/.N#.>kЊƧaˎ4rR뗺Λpi=pݱԟ.8ڹ/nXvu38geG79osA]984ʲ/ҍuE0P1kЇ̇LL%=;RbXMJzF]QDŌ?H.7/cb$Nƽuamu/TM_g05fl:A:B<U%5b-ZG2ju SMҰje$) ouZ@pEG,2;` XI >PͿ=dso \,KKEY|l"3ل_ MDl;bZW|bbM1^&fSo=`f02+yNS7}i>qƭN$@+B&iqwyn9\?NK~ϹΓKkW?=xO\aJP%2X\yurQty- =¸igZ3.t' 0*0?n 8>(0=0=WKL/1$lZն^x` 󀪳6Ig P>V.q{`B#YCE-y} k}Cwpb`]w EK8Ψ\e?niB*^ziu0 Vu>@*͆#j0h`Ve1XD=յ*ˍɻB `  k߼ Tfz)uT1 xgwoI[U{^(ieaCԒjy]}elėON6[ީstaO}:Ϣ;Oq{ s}D<)X8q\ltd~W#q3@ìB}dFĖ:yc0t\\[.wfR^]gƀO?A ?+czUfY|ΰ-;UۗÆ2Hl ? 6[d_iaPJ-Z!`LFfV2wC[bøgN34w<6f6.tqKKKҰiG7SLjqHsخq ;.i|ƋqKz̋anZ1.KcMc?..GӵB/-'G<~/f)i{,?vI ['-˴Gѥm9Ǭqʃ{/Ї'hwE-FީK[m y8;g`5yM%=D"E]>Q b30h0c~b`l G?q #8^`XRcQ6(& :H.Zc-a9gG{zu5pk9<5;U h08ABIݐhs4lrL= x-Cz<Ϟ̷ddyΐX`o-6p6 TM"cfx$m?G*x≎\k3Ww IofKxKSܸHvob|kvIǏM͕aǥ\9\KY~\˷uD;3i~ᴎN7N\FSR=N|i] \ 0xSڦ1;9f-sH9n?'unM6A0uMznRfSg%<x.hKyad%wT=z)9Xa3u>bl0 KXf#16E`iaZ$XV9bZ+I:aX?=}jnj]+\}q@{8W?<D9fnv]ve0O~򓕊$}SZ!2_WW F`˙oɺcB4msJ WV X[9e"bf7o?Yvcz#Ϊ$c"Ifة/o6;bw+,a^,`G kz0TRO` =9H,INEy?2K}CFrˊA):cFԨل@jwr-O~REE~/,]-4wvu㓤HY8REٰR!Yux1}P۝wońTHyEˉM W`KоO|f ıo?nvk:OZ0qi8ğ>tvO O]҉s[‹ϻ)e٭M: ;u2Rucq)i~O׃<9?;Kau0k6ЀڠG2Q 2p?я*tvbX%`8F /Ա0GȈgHA!^{mucDШu6\em@- @}|+ 0>NkutM[o۫7h:?\83,?YP8~P,g!}.p{Ld3Nq챎љZ4 ]u`,h aw^cb $AF#1~e=~-FPR_yUViAwsv ![K]z_HXRZOU "Fm1wwia?Hf9N IDAT%ʛ q|۽Qjgd8s.~]N#xy;/i$'c8_!O]߮s!.H㝖i)nL?OҰ8c>Fw:N<qc|~ӳ҉i2pΏ[*/xq}p"mt1q݆m۟G^I:jas0k6QS&Sy ,T 4Jy(iTL--œbd6źdwVT  V-dL ?f Vms\gLyr-iQK?0Nt c0>z']{]6$ jbdt}nzsj|E`pLz~ 'W7-}J?Ϧ>͵cXql~I7SSI=fw#odAO]'赣I:cf¼]u=3HXdgzQ#ĐH0>bld޼y$z] } B4"*pʴK 3䁹蠲x衇зzb *&''+X(FCަlVЭV4oxX<ԇed5n\XF] t3 ZӒK.uAUyK=̅Q:*c-̅Qߞ Wߧ`=%q=t/]yEpǝnyG|eǰ3#>~ŹX14= L'G= 1R8qM/K%.aˍix3݈c?n zqM?v:ze('n~s[OuN3q>XS0 ~\AVuN0k n8;jseJf1獕oyT/ ;.b<ԹEUr ccq-Ȗ҂$37)5Ѓ>Bi g,a|OB^9Ua`c* }w]U#?zB}hGQ,cL * ]ƒ9KTKXE̙=sNE6r7V`>я.@ qw"*F8ߺL"fPY[ET6[r ՗H~Mj{d>]+wG} ޠ˯? o]c)mɩ? )Ae = ̨h߮+/⏸GMK~Kxg*28oD+|vZ.!o#]p_| bM͏yH3H U7iPuZ"0|,xX!Y X46m͠eG !x%mIN&O ?qJ}"41E;:?Ssmab^nu/[,tn6":?|۱\Gi >O"7[yP;$]D FQR}6k=V{qsY#t?5g9}.S7} [Y`f~iw߃aK_8~J8*B._Zf&..ztSN O8f NKYigK6FMkR\řZ/K|YLxAZ7}J,n~F W]e+(E? HQB e6t [#}`4V%QRkmi]'I`h1۰ O23葎!tn&Iަ8,TXy1,#{4,o:sx)bnAy5d+ƥ^@ٝWuJjc9[ouNG\Cz }~3PܻXGffʐa>QiAs$ִzViF/~q~A eon/2jX\Za~ &b;u2`: g/ΩXD zI PGLn{Ko#.:\0qi8Ӱr0@)]ZN8BxqRoDOTT,,bnnqRTd+Uvۭ*iQ{?TW/ToD|?KKxE ̨Fz,O83=`MqPg$@Gjzl„V[mU-`9% /ꪫ%Ҫ1H*a6l*RQ\a"2s*⪃Zp, f>v7WR$/JeB2`F9uiUmel`fM\~NKӠcڸ)4O:\£ n 8f2Q w~`Ꮐi ,nEޕh.hsGg[hḺ yVIjtӴ`#9F nb7b$b=n kjQc C" *uE{,g8}JocuZc=7X"DUjǕ>wd?:Q<[]ثtJ"K%zlFy5ew}Qי3cG_!-CHxJS,y/8w佘0h>c8\גtg.yMH`>/̝xuܩvrNh3k2#53j%Oѽwj3df _^9v8uc9NKڅɗ>ip.ĉ1>J8iOx6ugM6k ߸/N/#.· 8 ,?cf-3r;(`XZ=J\{Tu:*0#Ļ^Q _h\ƸD=Sv04ᳬk6i7zQwiÉ u=xT|"黆FR+&Ƿ"6Kk,K/bx${c)ZU}/ĆHTocZ_Wvyx4bqޫ?% Npc}b8ntSA_J4aܖNpڅ֥>f֦,g`jM6ys` FAW)93l7hWoݡS$i;.}ɼytVbԤ.zUKBR4V]HB_$E0VѳUm%KF^MBy xtMt)s~kZvI3 N+Ƴ ^ݖ~ۏk?i4ɸYr]VLϕSi8]pk %E%O]xNKuǴ 8]1Ϲ1,oi5* qx10|k&F@^}G;l-3-*ffM1fk bV&oDiߨ!!;+U㗿Xq4^,uOT6hք5&,%fI?]035\Φn_yx'D. p{ 70SRb0b‚8>z _8mFnvT F~`\q+)pB:lvFP`": a[ďyY7"O4=MK]9>/?qD?c4pɇ8tp#_֤˸i8-xu^)yS7Rstrycix\F=8;G?}z~pkNt8wF\As̬w^p>*R \_0a0)g'u:)I2Zי~ nNw✇$C~Oڊ̨(a"ZV3?~XڀK*O]ڹT@aԞ )U6M<,~a~8O\h8_'Cj)@`Ōgi ds;\i6?=KP,yO",I"c{7$Bm#w\O?iIXоM 8ëK }w,c=S(:pX-ᓗtR|]OYa `*Xèa` (cuE$1\1'ҸrIMKaŒiȜZ1vYT>&^%ti$? >~ɃeKhzQ-䃃 9čYUM 3՜DKxpQЯ0hGyduT2r~璪8" #MuɆO{*:o%<%G+s9Ų  seI-[⨏qy3N,NwHmwñKqk<.a\c4M4L>0nls9!ց/_O_ \<&64k7 _f1Vx[H.X"!@Rc JD@Mƅ^(39_ЁqZjkg  ͨ9Lb6j`FzaÓ02MfFI';=P&H.*𻉏jR4zav7FF : }@!SZ"zv:#UdYo҇;mgp|Hؠ]ll1clLn nf5=o%ۥGzq9\"4n,]Np)W/;_[1_7)y~մN%Xgm-@#7H/7jas̬: #TqYNuTu$ 0iUK,f~[ˊj0{i@n;(iE!m%ΨN8blOv#8Dâ0z7pY,,>LXfOp]Pq *Ib'j"u\Hͫ,Pb5uyH(~7,Fw].L/LmtZ8xOܻ<{,'{g$d~ zQ_ƃUm@PIZ+(KTUoUL79f`NNԤП`$?jD=WڨAǣA X-rI-<2,~JRJ4A5ҵUVYb`J&9ۅE?gR yy"VԳهQV8#FxYJLO3l?1tATi PO#2eNkg 󰈩c7+i5o *VV(с }.X xL0vՏ;FqNL|ɳD95ю_I,& T@M ĨQ>r#EU"~g% Huٸiy@ >^!+&76glXDf(Q}fi묳N%os<ͫ6E ?vlOL.4s64.om5u3kizvo≋㎋i:zİi8 7u|Kۅ#MF~׋\]qcq#^.lHqvMsXOzZ\g|i1/n y\.'m43EqF\oVt IDATaipe9SU<[K_-рBm5ǬuZ5ki5n~bmmYL+U%v݄:tbߡE@K;sK1>Ārp@+]l"~ɵ><~2U!Ss {&$r|¸l\2_)R IԆbβ'THި]OX{[M6DvJq'lHw?4TyZGoj0lJba󈆔Qp-Fٷ1,=0\;gI@8䥜Nw9C~_uH-봬Ŵwıy@iU7צ~uN0k0O;C7Bb_Ź׿@B-Z,f0 Yutߌ7I "cp~[EoM6i{ 7x)*K^i3IIǠisG `Ѷ$L0)#n\\9($,.6S =Z 'tjD Ha.b}Qv?}>e^t|M}v$Ppe7ȐƩ&.mJ04?Svp,\rYmtexg5s )ﱣ 3K7E`|~|> 뮻x=[<$lAA:>;ic?X\D4]̴ƍn;{x\MqK4Jv<1~o7p4K~ӈ.ipb݌\zV..Ck._.íK4J\~xybCyisQ/A0$_UI2ȁ:N?;l<E֊bz2G=j\|YiEW㺀7=U.d`h|c/cNT>ΥgdzeLv|c& GS)2K.i]!2sVMh4H!f ͜CM/%QN5k.P?Fsf x6534.W~~.H7ڨuțMtgV*[K1m^z+_Ye|j0|fތefqLz{JM|#ژQK{p?:/9)5Ӱq׭1YD:qs4wsu~%\|i1O81p7ҍu4O G?4b3qaKq,0b`y oZ=QGTv^QAu0k #2wpQE8VĨݥgt3Ψ{uö:,Z4mRĿ4YF@C .R!tmMTј  <4BAM?TT<,$Q{<> LC"V>yR5.F:SIk]4 \\ajף, ̅K5аT"F~^'suC3׸{C-mL=rv#56`ɶeHI]C2wS6 164=Ю}[ڥ߯~գ_tiWN7i׮~"3ԥxKÎ7nLˎi1(Q9]wݵEF A T8gs'd]T5]vim6uVugD; 9KL 4αaΝ)|k_BZf5*= }b5yMe܄4cVCʆ3.L} _k.<" ײfAɢ bB u㲘8hMojL8Ω0iPD ѪL Md@b8%aq| N:,bQ<n%e~0a6K;C'gG~U?dL40~OxDK'H|~|Jݙxh"کHc_JzFv~e:c`>m'˘TYsztҗ+?*ܓeNw ޻m|ZkzJw ̢UNѬiٮpr1T҈e.\YzEZߩ[Q~k84)<֕2n\3|޽?F,cè`x6%fdL0:b񅴣-3L@E[{iy ˅a_>VK&D4n׋PROA;z>y'ԏ5}T9r"0HGjCMwOP']Q':ʣC&qb0/zQ맲4xTL)5vӆeƬ(|W V[nz8JߧsV~ ;87㥼0c5[qeS$q4;t1KқH1{`.@?M)~ġlàh~,ײniuI]ZlK#(Q9lջc 0?W";^S-C˦]* ,6YLc3rT.m:'SuvEpM0[ou%&bΕAhZB ep<.AGk gPSQ%UieWՕ3\)C1_fbջ]%jU@B{D5*?T/80X}$8K5*~/#,.Fw" D6'[b.5ګe 9bo3f+ZR"\5}RۍgժH䥀Sw}X$޿~ |x"0P350>{/c P*GI=rNg5j"U3uWвnME?ui)n?Ô[R|^GZ.]\IөSC\<Vwt'sƆE[( j +uQGU|$tx^` :  XBP̈́*\,#p',0Xa SC.x`./ 5a7|۝&~ȸCf uC~W^x`.qd}9%&샲d6]2ĺowPutq["-wx_rc~ӋKs\<#mcz77~nJ#6B?躞v!a\fL#eE<o -QtQ9sfٝJHfa1kzիZXMĀE݀a!B; A, ɡ/> YpeOODX]z-Q낁L-\>,H#XT9bs]H|&k$.܍]+@@̻!GfsTH# *!O Tbk7LSʰa!__TLrǫ~KɿX!KǨ0^6຅vx[v޹bI_T w+&D`Lp:ƅ*`ƊƠa԰Rq=蠃b"zIF=FcdS~ ףSj:Ň6 h?oRm\zRuuis]QvH8c\~Ӊn'ESԝ oCŔ{Kg{UIw38=uZ+iiC>]&g`6! b$"Cb~W]xeя,QRgHuB}FWx~RФTF@/.q!< ӟԇ1êϸq̦`MM)Na8h{Js6ExAesYjYxt/p$#,ҰƂɀaa+=b)3ԧ>BƒջJΥb gێ(#x<0/:H7TՄACtOa|!bP&ꂔCQEž%ZfgO?}^/Ж.?Iږ2vԣzO\~$Z4bV``̰Un1.+b'tVO|uf'-RUjd䓒ߨ7*0pG"+ 9,)y6zy2`Ln1g#ML:,Yg=ӋiIvgy?Tg>| k ?H݃uIo!U'sNQ}x$oEu'*6Q؜Z2?g]k:[@d>TQ+VT76,d4=xYsߩ"&]wxG׸ NEŸn99Z9<ǹ ץF.o4R&_+#N?:͔>kR'pg҇>ׁ"#qs}㜎8_ELC?X˭F}5* fˎ;ѥʝB78,<@O< 4yz}yԏ^Hf]9O3i4g8Oh^;80B' ]tOqxmR?'MqۥqʪK7^'.u,MBʢ^E[h/fg飙v"aHU#sxuqX^C iR?nhea3j* b ufgHAW|:_֑Dg>3xc8M\ -5#- RQS_Z7'4 vm;[={4N5>Jޒ1}}27.˙ݽ5 fuq0}N;PDAT8aAFUߔA,V%Xq_ $%LQBĀZ(CJiF$>9bؤy`0VI~fSGzA4ںw'X IDAT:[HW1V # F&Cx|_`UIbZ<|yINtԢFmM1II.?"d"O QU ?# xGydlu`$s~y]}9[藾7ruAϠ!G~GMǡcU{j`.ŅVџ2~%᧸9K#\GVwn7W&}cz1iuZvG  $ %L*O{L2ڃZ>a"Y#ׇMꋋ)wd^ ^K3W4,|sJ^7tm¬ AN'"ZC9@XOBVZ6R~,.8ٿK}8nk%@Ges5T3X 11뮻V㊼~KL/K(`$^_PRu^Kôq.L!6VYE=ELaDr -/ӣ?&ϦQO4\/.Kq -q|8\u㴒knM4~c8sscSZϨ[dbt#m=S/f"3vL:QjĻ OgA֤G^tEfY4Aa’7͕#]Ez,Ra`Y}s-l Ae}+Ii68C b `/ s=:  %0;qFYzVK.iZԧNKQ)c 0hm٦ryWb֮T;;PLҵ#$n}z?JK".I~$.Wi¯,Աz0lJ2w=lbMW1>Nw~?Ʃ<͹Mprrq9ZĥaF"^S'01JM˸f*>T5*qLw=DY[I1eg뎿t>TRsY&)W3lab0q{`35[ Ke5)w޹2nw5 $"#1kR|XE@%[ntT\0f`, jkVdK9B.*GBJoL#z%;pNCv83Ǹ9 i%D *H$3GH> D"n ΑJ%j=>WҶ]tOH]Dry#:ۤz]jO W1.\:3 䬌2QCK:QvAX4pnyvx}UՄ.3 ε2naL{~mٻu=4:/Cčsq9Np]ͥSX/_su4|w9%Ӵ4. 6n )^ǟ4#nīS+'}cn"}h@-">]u~0}ܘG뼣z¹sύ||?,Na2ȓ/L i$ݰ.1({!s]'|}tp,,s#;?GἛ| /1",3n%7BD Eã:* (I{^<_.n0[:OHHHH :ֈE!aY&Z(4hZWOXV\[Z153a|qg-rJM7ݔmH A 6 3CH)N#U0`@ =S~H4)-ZMf? gV1o'V[eeo'%v:"gO5Og ,,@<p P"|猙`>'p}ED)}gov^վ |F^/2 Q-Hm 1!b^cuh}=G bN0ؾgv,Es Y"ߩjDQLɯ P_=;hZzy"!t3ft˻&=uYr;W2iy\˫<<˼|n7\8k#qncyXiwa8cq <ާ:};xls u Y t$&BD/Wm>+y#,~%B'e}x諱v{< ^"L0hAWD3!'}2YЀg1|qǴm.+Ӓo{w4} YoG&-B̿pұo9ҷHဟUѱLDլh'H j9&DGydQֺټ@V]G@2/rN0$,j_]$D| 1MQ5]7G4CAi KoPx -/?iki `n; }|?:9w[dǼ}Ǣu!90(zCm G$f>`6O~цaHn!0z #("lGLrZCd%<Ijgvh;id^R|0 @ { Lc žxVx"NUĪ6aS&?œwsy6$нL+4)4<Œ/m,-9{,zGa2~ѩT=@j"ۯ2g&g nĐ0GdۜAVxsYW_)XgpG%n?\pA pX!xybGP5Dِ?n_87#u|28:H{y̍+!O|.Sa]9均s|yyi49a_#¶IwW#o-7:=~_s4^qN@真t;8utyUDO BKovZt!< ! 4B Xx@`5B<>[v Ֆڻ w5P͇"X&&xEar#oq%; j3/ 6g]viY[hbA(wk4 #w|U?ϓe+1QE(W9P{{KDG_P%UQ,i1-"UW\1E̗Zs=7?T=m"`iIk2=["@3 @(&4^ )bD]>ՎĜ!e[naqsp >ls?+<ma7uԣ7a079߻Є7 ^`Gx黅K >F>iase}tz3VUe}1Ho7cs 9N^*lW~O){ϑg=i %֟2} t Y ܢm6jd SQ$DPIW@6)h@v}@H2 teT˃Yc-uG= -/CzX6?ya[% ,b$qP/dW)g# =G>s5Jsn?+W5b>0f#cܨV{ϳe ,sjWc'W^0"z1kG۾g̗5dMpBsFO?=31eOADi_~ 3i?UU4дf @0?%?m UY- aʊ(_=!1yh8z|;OMzʖ[6_M#c#/<ʼ{e'n7u!o.<Xi A"ǿ-ji^F9Lx8p" #PƫUQz$L" m\ 8') YF`qp4}eO=h\G^a(w.+hO‚E"K^]dM2sZ?h{0%׵]fs'h*i |6{6:xpv~z!A~>YaԸ>VZebxi#>Ws1Z[L*߯q͹2G4v=iЊb ?+gYb;Z/ qwjS ôv_;3fCp 19kq}u `߫4竧FԪ? _HV}w>6ZOM ͟p.5&FʻL+p]>B>} y>t9Q9y6\mu1]ا`fQkEڄ2Ax7E`w޺gV!!5ѱ Ǔlf$a WEyI~*&@b/~k@q/H:u|i?2zVCkwZOz(Ü͵uƳ= #ZVv_s+5kfZu4&e++ #%qD&^I݈OX'`ka >]Xfȏ2<\@,lIs|/iڻHZ{IsJ(e͹ޔ ފ^,'y,^-6;\YV5ggH˝L|zΙ~G񵢼{7ky3EHA%v~Ci~_oV7+7´zە^ GVa^FFz~mUO='of:|N]zbiq<5}u.O CԪgQmkLBS1Ly mј>~r tV~WT4y10fM@ϤbSAD}|pR`rP g&7Lîgç MH@?TŖ Gy#yG<6ӘU#v92eNI^i&sy,S$99̱WA m@+ΜG^U0LgT IGq^QNѷ%mkz7oQ2כ_Z\-¯lN|bLCT8dv|iC+T__F8~  0 ,kvs<;|Q{gHt́@z,9Z||WPhsYk'O+)l; ͔$ IDATGa<u>ϬANWO}msy/~}qI缮;ʱ.Fס58'r &8nm.; 0i !VD/\㜉Bp >qe?\&@GLF; ˣ]$'.V}GX U6O+B jB, J7j}$.4W!K%=h=(dI2 }A~>FGzMΖimC{w-9@DBG/_<\g>mx}t?|ݮ#28G{{N1PQ]s/j<3?뮻Ѭ9aZy+!O Hd+8e:\#SaZD[ !4cU/ N6X\2e3.`;{ǜ& --5<k@\YOJ (o`a}ڃiض`^Zj*h_9EYpx!'iFūo=Xfw.v.9h7׻?^V[Uȅ_Yb^_]~js ?P?l-W~uz3 Gxm|qߊAͫ;yxm魼XkekuP4^0@mYFXD) {%ĜMl-Iw+Im4O;@Qkv7ֈXG:4=1b<<^R瀏Jh_z$"ZG&V?uGJe$͕+9, hB@ IC3ޑy'z7]Ү)Hؿw/*f]!-'2K^0G_LLn٬?W4V^$97" +"/uL8 :nXn5 `+CV j]^06eƟ3V2\\4?ހ3me;]^_5J_P/Syj<V1TGz\s ]2}WB~K E|LǴ3A6Շݸ*~%9_ _ znIz}jQ!k뉷ۤ6\w 9 0#+Zoc>8'$x_d ?>2MCxlEEA.>HI_cP`rS<=[>1Az75$eFGX5=&~3:RZ@Y0gCuC(c\q?gO'#¼=}?9}Tnv{ak4tkتzv3U|E鞏a9RgH@Cñ j1aI.6S/&Ojԃ)،*D*zV L ҾuAEǜnX`k=73;CAPyhOEJB0D/Chp܎;2D@)0e"Ьus}O:0}g As

BO#KO{QDK8o |wWJty.:{Ea~iEe9/GOw k✼9GܾztٿxNv2ubIijNqN&s6̽EN X#Si2U(f%¿!C*+J2I .s{K "b@@S9XIx @Y@Vo@|hBML\hސRB(vơfil/i)B#YeYyZaڀόMp y kY}gu*+}?Ϙ'p/Ǖe{"-^X&L:Vx?WФ}(@\\X8W}xNHwyj@.o`v=7[j(_ƣGCׁ4xlE#Kϫ3Nc'l6 5~U NÇM!|źO#"&\Z/,"LЈ)Y_ O HF(&QN~Bk ->(P5R09+'ː5|$[Wb1v=OKCUlNGhXvf_CWa$z\r3Փiw,CbS@|l|$j)?L!!lfo2v *9&U04a" I@ti ԘHۊى8ȑYjDXp:W;A@2~D&쉶އeV  O17 *ib~gbN`ͯ,abi+nʗ8j 꺋s{yǸ yBrsq{Ee\vl8 ͌nzنzhg~+^x=4<{qn?ciЬB(Cwd n9 7y$N#p Y}Ve=̀h6? W䃂T4C-ѫeK6OԻ$ )_A7#6Jw0R$ÝQ@:Gjjل֗3 &Ƒp ,X=s:lB^4hobf5mcjXDJ1"_u|V3ΩW敦(-'jcn7@?)>IO)ǞZ`?;L bD?? ?^?!l<ʻŖ`΀9Plv#~c玠P v4ߐIq2OV}DWi}k4jC# 7D}XD}ڈ:9ZdΑYhda{͞{Sk$pg? V X?AcF9ovo[hbմ:=jl{a5K_EA@_lI6nQԫiG?s#@ma*酝WZ&P'lP1\&me DD'#.k >-^0IL ?6Ey">ѼSCVO e[YyS$ &ȃ닟 @ۺ]Dp/8O)2DQ#D~xz^fy" AID+X$buo9~fb@6AB0q^ `;N /cd륤{Y& Pܮ/"'-O~-+>6Ɵ^V7kKkhX׻@y4 V`~2{dĿQ;#2(UZz9v-Q@_r |ZяnE}'v/7R&,߮s?n_l/^Q:2Y|N ˸NG}p` f٧Ue*"<*M+L@Z-'kګ;< DCn"?4 qiv0k qXohvwX=!&a-soЦ:gz]A[mU6-C$%9Y+43 hohh0IcNB<ږC'(&/䒕l`fj,$Z5hР `FLjwPҐOEwԇTli>fr7DG'Zk{j3I:m/H loX8ak h^]\/Syx6C+sǢcȏ<aN|v?k4I9Ba:2e0:G0u λ: <aXM1j& ҡCyZu@y `)ڮ<1{d s=Ff,?l E^\eU2!tkcZ^φ_tQeQ8Y KbiH6[2e4R6zxbb0|]> gA^ RUb҈_f@"G@͜A<]c+w<)ls虱oI#ЫҮL)}F@ -z5Gn ܓN.*ӼT{Z@[ c5"챇,K[D[S D~96~J;SZt?z[L|tE l+K_]fǜWO{eNc^8yy[~aߊ{ \<,|~Ms|PYĀm<4s( ب@ 9`V/2"T#*4LKGZ$|Ph _Y[&{)$y_7T CF7J(av*p0\LB3PF@;Ư 52;EVt޿ πڢzv HI'Z-!">qlҨyGg95)49.~>gt4ZCM:` .3JZ `mgo2Ks+}/jsDCBLӻ7 ((׵36Pssly҄BhPV'{ߪH_RāZlIt0TWC{Sel~qw};9oQjJ 5 @@ 9hxدplΆ-\D8h~iaj<8uƄȏ Α/dQk"(~qz ؎F geljT"$|i|%&dm&AHDc|Y/~-B}7A<>ȏR] J.LI 3>s5bh)2Ōib76x0b΍_L( I#76[rf* M d!Qi摙h=wdO,8DDRKDX_#  VHk^|]c|Cs"P\[fQC #s,0W_ѳL NgFa9T) L+i]\?74mo&\/āf9 q]yuM~}G5<.[>-ש|4j;l˜޼:ô.E&uܗ] 5> \${\lZկ wWd>ahcZN\6bϤz<4 `K%fDtB? wu󟼰hN;ʩ \AtKF O ' 3 N?d&< )66&KS.=,桗+8JJZR-B@,gv6W>vC'>+@ 6|uĈ 8|(غ6 7x(C7O u|hm.ζhݽ72f7]' [.SF)uۑ髯} ӊ-ʓMi+XT㺨_Eyד7 %LN= h͙)"$Ү}wsF.[>~7W+S_āz8;_=K^|;Z?|諺0 5L6˜jfM'5"{+\󺁀pAACLe|MhkM@GPQGeULpfO'D\Tfm?iSKiWF ]mNmn씾RO3+QS*D!=SZ56HwuW%v>zkGY6` &cii8&Rp0d\wcya^JsSZZ~k]~):۪[=nM_(Y#N^ל\ y/<G^y ,&&N^E8I;ɁCjG^blSe>v?OkV??&+d:wה~t.MƼ ~w#!&؋ Ve lͬ/mzI/m# /)d_G/$(ncߕY'!@>~:efٹ.pW|EZǙD+ DdG1<_[{ͨ9]r?E J?T>wGk_b4?ZAꅿlWyyd1bMVu5/qj;ӽR奕y~<>ҦyGͻHfmU=x(jyCje#W{}7Q7ñ z|C.} Ӻcjg?m6uݼ@Ѽ"̀xhЌҎQkh!a-0˃eLhM!бHED@^\2$~@ҘD`>&mЂra:Ip 7UCsBG8 8qCФ0_\_v (Oq'jF:ſJflRTH^ND`=0@8?R hjOKp|șl `Ü֪PX&>gAw-??8Sfo4O>2Ӽ6(q @0_+gO@'m?@{}c{0A 9Z%*hnBU(|)IL/Dr$ E#Lcڭ7t=.xDC T/[ڶWdI8u!Z߻]53mC~R}z'2@vaq\i ԘIgk#'ؽP%,$"~O9 E· =NW9:!?Gm9͹h  8߄$fob8$L, 7$s?l*TΑZ8]+;\-Vkv02h/w, )[o h?3#w3.ڂd!y~<(bIP_>|)m`r ;_䉯r~#a|c=XcU E~}x/PI¤GBW-oRɴyฅ|QЋi >K|Zu;NSzJmZwzs#zi7x{|Dž r)mֻ(@HF='ق36M$zXڡSiZ`FG#w9 9D/#8L6`JdBVOzRjng51$͍'WT~^;du]͙!ƅhtmq.V aj0bc<"(hVˬHSOt1P#znSҺM)1`\w(Z<҂}.R4?g$1?>֪ ~[ &hԊmb f.=-t6Gm1Hj쥖Z*xS@")#ߎ]m. nۼ:Oq02yŽj)m侷_yq-ZB{@l *3Tm uF&vj}h/\tIxV ӓ ?X=G\1(ƿ[k?iW6@G4ҫqDj5 O~џ~yuo0ۃm\uU#"'Q O!H6_]yVH@ 6 濝ks)`MѨ4QZHfzaE@mR OJ2V;ɏ0#!jʑȌ6tikB 0e'8 A=,0M@G U;GضXYF}Eaݫ{s/bX+J JN` Pr4}en#ӟ?9y9ȣ4!/Ii_k.1'5Lf 󺢥M`v' +uY+afb6d@DG,XB%?4 (/mV-OыHWe>FKe0Pe@`|Yot~ KŖvBs?k͢xLIce.7O?FHI_U:|{e$wv\^q]zW_5{}oųڲ_Lo1M9;B{uāāāāāāp`5$& bFӦYzM _yLo"0kjg.r3 ZQ6\cJf0Cw[z$><3 {・ @( Fns&O%ok lRhdƵS) SO=˳m{T7WD/F"|VZ^{=.C!05 pF'n'"bITF6;wZZ-/3[h(||n e,HV֊by4vw:-o̴|s8T_~8bȐߵ}5?W!IMa c@@@@@@` x $1VCZU >MV1<-p4#&NLC#FhI3̾싔W ѽLD M/sѽѨRA-H(-q ׷Hc_.xhP ]_1{:S@ke]2SGdeŒM]9f0 CY }S&ci-f P}O[]" Tm5s͝_fopVkL%$$$$$AZM~C8O(Z6a80EׁF/~X`FPHMZ~VZ}ʟc@6?.@af{Jv"z x77⇗(q q q q q q90 D0jS8MA1ͬ phbb@#HM& +rK Z*h/GVވ#%fw;%&k!&&&%.|J}M6$Q[ 1h21w杉wg h}c\Ͽe4kj4t{WNy$}33߽fhV#ԫV_88888090 B )O+{M&= HxS@J8F+#A_Qиt[++Ne:_S RU?"PvL1Z㍉ U2j+(\;Q'P0&ؽYgg,=m&׃s ˷n7n=z=$^x6a7ֵ#ib$a}|&=}))S7|/chyty~%`avbn1PnV9WL!{Kc<<ך!Θ2?|.-?(s2_5`@Aye,Y Se渟 $k{󒄿?\8&<^~o}2ZBy_z7t88.X>y&/ȟ?Ҽ=`IhҾ*CD}ρY#nXa`tMZE%AAEx Xzu ]tϊ "q0~Dy#[L}4++]v/T4EB0Ä3OVW"&2 Uwx4kI+ >@#T3lL`h÷4^i\ӄ)LѤ3V$0 '""Lꭟ? QAT*pS&֍gJi IB{Jx;;;n Sͫˆ[mDsMFmTQm΢~*~x㍅h05E[ƦhUVK V # G |?.cO*Ƶ$UtVʕ9}*Jء "A.L<3'G.~wCe>-B goMi@ 'd.E922eE]c qY>1'|yFWf;oJm  l?h&b|<Ǽgh70$h'S<D:k6^I7=ɟE[͇M 3&ZT/P>x &!'&v҈aF3kzEBG,q )1@t;&LB1 SF)仴mmuO[KaFڗ b&I8O!|ώz t#m2G4\x^VΫeH@r{}_t'ga=޷qGHkrOzPshIAM8B@jk5P>RNh5|P1j'OHHHHH(ρ477 1 3% M@wB7&AIZifXAN!@m\ s W.C !h.!>C߿ˮϚz/o i[Oe0af{/ |& A!L2[5ر6D=+ʱGx* s1k`g7fm/_`"&EmQ?<c5 'v%T&b;%9ͷefdeL +ܟBl Ԧ '{n=ܮS03 +҉7,i'ռ9Ӿ'NYzmq:q q q q q`lkLqr'!Cs IDAT*+"dFAeؔ{*K[Bv!s8FC2`|֖X[H%{]([7~NhNиGW[o°/|e: Ƙ=n@?]ҼpJF}=iЦm- Mܥ^˯mmJ` hϯіw70k9 iȎ-ݮ香 B?`? ?!E5U;[|wC"ȏimܫy/4P _Ol]cr)O@@@@@@m QVI/񙄵Q;HP2!fSwo SwpZahꫝ#f+P|UG6MG?u OL - jF E}I{s9sSQV4 N'{],!RMV//2Ѷ6lKw []O ?1*MvzR}Ӭy/ߪt@d}ڶe'}'wjwYPja=HZږUФwnW֕/v+H{|Θ?DIOIāāāāāākiTY`/ #"?p~Dl0t K7B2:MO*G}y^4SF#xp:?kueא/IrE恗cg>~I]~1ĊSI@iYn."46e\~Ëh>f;(3ڽ O9?45f#I=S~IURO< b|<`Hm|}|7VS(ܵgX#܅;Yx#T8d읠5Uv䮽1CQ#'0jBr^qzj"A~/_С2BþW;x?|sO5\].0=ZxY0lH8Vc 13Sv L $jX @ EB:MQfGkxE\)wYs{D@1q q q q q q9mϵ T$`'By_+iڌy̅$]VgV9&Hh|gZm)"P,MjA BÂcF ŸxЌ9!sD6 ( r=+Wc\;} 5kJ~1l>/[\FkфWlcHsc5 (q q q q q q``q`@h%מ{nB` 9jo 7\Lކw^B 7߳"W%$3&VLY̲1,-YR~GQTV_k05D3P }K/t&p뮙]FKRnC a4F׆Ü @R^zyut*- ԼT^Q Bzb>{!y^g$TV3v@Z57MϤ0&ƍObV}/>,Ƞ/l]Ɯ8&C=?*!ki.De7z[ZlXD{mo{%JHHHHH`mRL@-E{Zmޕy3oe 2@v>CG*W]uU&ܚ!ӓ0P=.ZM' !hEG< 0apYV(f"! {zzSm`  ¢{=33c0|f!򾭨}qsMda6~DaVmVy~ ~1ev7I׿-.;2@|d<B},xܡI- <RdE.,yeKٵ#b`m֪lN 8cfg/~yzKZL2Cذt888888`mb w\qf5;|$5iȎHuI}ͧ=@Ț{!@ha%?#b,Hj[y&Wþw>' >NzJ#[x ) }A~D&V3G!P"OL1o| ^ BjW} %ڸ_U0b~mq\Xhd::|0}7"ŚNmV}C(/ |M'S4?Ei_37q q q q q q` jA*{1 +& džV=/ԆCTn*Vp"%ڋ__Һ뮛i@K}GS8Ǵ V(F* o7@6V>UCm$ 5EӥXL9]4S40M`?0$ b@ϸcA $&&Q&ף Y_Ƽ" ch>3/1eds*\#;DRZVkon3ʌ),KG|ky~lR}>2G `L]igW,?QqzT|7 OԢѺ2}ay@@@@@@{80 f)t}5hk!a.^d:P@o$dMa{яtYh2[{w\v?Q#OL-f7?~n@Q &QѺ.M@y8:m.5s[!c.Pf$.+qlcsE;Fh5s_@0|+?0:8Z~wtSeNfOa2M@Jhް UR%LZ|f$I;x+kX^@@@@@@90 Zl_&GBxwE6z1E`ˀ+COda^ 6?tLʞZ=PJAbBhj}?h: O?P <#lW#b!P mB!R?«5)묳&[P7!1lzUEDhDǼt %TTAp^SȘ ,OR\y啳yYhѧ] HM|卽il͆Dt4P{SH0I2̡{QS 'Khi>~_y;~CoQ1@k!+eWe ,ժ  aik/s!mB0#LSB>[IgQl h;>q"҆}3M޸-&uL_!я1φ%χT1qXZ1-,sNdB,>Xcțl\|yy |EZ_LQ_LwV osm'&o*7J v*-rHG3LcA洃L%^ѫf6Q^ZOln &4VP~!|bD uЦ@ ٯ_M6$|ؚkբ6+'t`X < ܳ@36 V Ӳ.[YtE3v 7Tkݹ뮻*\p׆yP$%u6% K}""` R[ ڳyefb3u?d>r:2FCs JxgEF;eV<*Ky_z  <^AZaUnR4ObtzXᝄ1q q q q q qp <+[+fms3ZeShSB_tOK@0P۳p#md Ld~֬+ , Y{>@mbObY vY44 %֖Q<gJZm6 [nxSijB5$#[T.ϱDtKo2'=lh,*xܣX * 8l<Š˥c@@@@@@@kx^!X;#2 S`  #hqoW+"=(+C5DaH}ֶ:= =B5OC%:~!1. <<&;=ӳ:+ZL#4v-5@MUW] q#` t0YlXCL[ubl Oj;̻ ΛsaL_r /yё.vƠ W-BXs$ļ"%cUw!?Ar<}\$E'`?FcdPH>|W·R7UwxO0 $Jf8k#8FlsCˆ  /(*}~vn<㗨,Rז$$$$$$tX놧P$ŪfA.~֡%l U &0pPO- ;臘sR1a:QBcJ7vn;12M:ӂy$?s"@o L:,*|PHHHHHHHHÁư@w=NZį@A6j9l_ 1#xlmKk'DL|"q× o-rYۀ86CQz뭗8 @C?~XC7azgÐ fp p7hV73fbNTfb ڈ̻4āāāāāc-X÷4&@MY`Ha ⽵BMI:|Mz4Q) sy`(,Wzwy,;9ymY /d CGCn*{gn53 ~YXoyv9믟UKߩɠe\r 'B^^Y@N<gUk;-(BChٝj,_[on  l 7bϷ;G^bb}˧āāāāāc-Xz+k&]s5:.+R=+6i/= AEZNOܕW^9 Oh9S9+Zj!C<?s=riee?hѨ>iU1PLB~,[>jEyZu WyWva6lΆ+-YmСC3` ߘoB(3-^P RCGl %+7H1X_@W5N#A,U^4=꾅 V!H:ȇmTD:eaA5&Վs-@{1_*<d?.47 Hs 4U4<=P 0%faߛ9ghH~rNaiv$ 4c?&L(_75{X+wqGVGog=6*Ǘ]^N4 Y䓾5d>0bLto馕~ gnb&jk˯ؖ-ϰ bH; d(֪O3g8`#cV?K:S93Kc񍂈ʷ>%JHHHH(@ׁ5u]73c//r!d[ g.t¤9~E1-bX!yGg5 ` YF#L=Wk9SL6|&t "o elu|`;"oPc4sey|'$,x+4/},68 `cs{7u]`YpW# 1'8?|L[Ɣkff.ʂ3oBāāāāā<tX#2FZa22gƪsL@qܲhr4fG4R91QA]|y@Pq5_#4w/ØQ0żDpEhw5z&chc-S1<A);FO)?O3ݸ^{˺zfQ3w)*L8> 7o4j{e4Æ FrlIg@@@@9|ߴ\2D"dM[9 bźa>@`aa-,.];3s4 V%n?sLqBW^=ȃORP9|3mC#񳞱ԈBy^8__^3g?P ZG<Ǐh(Ʀ|^[h9WJWPtX* (+T)y?|;3/sɜI$9)'pCAr:,M;atٵ +Hr#_(:UfF7vi@hc}.u4ϯ^}?i8,3t3(cc Mgz-3~ eMqiGJ4z>K1|x<91)Q~ y7O Okٹ/+ +H'U*TL0 +\'[lE<ψ/l  l@%,׍?>@N8!`u]74d~>}&~z=~(a-F5Y()b$%HLQw+^b[q.iuq57ixOӛTfrtΧb*}ҰTkRϥ׸ϕ]\Y\p^v_Ow{8Gc/pœ_4]Ƨ(s3F}?U9eш+S ,4z96寛c= 8ރ|76!SuNE4Ar^gMLFبQAb@uS~#=; =epc -=r" " "PyTTH TNY[veCs7.p am@Brk[l#<2CD#@0q%L yE@D@D`.qCl6m k1vLu#d8h DGXtc+!" " 'k6r)>F>ู6nWE@D`H*7Y{I}?֯ԕfnj[D@D`Ǡ'@HYPlD@D@D@D@D@D  " " " " " $ e/EQ)k" " " " " "PAR*R%< " " " " " $ e/EQ)k" " " " " "PAR*R%< " " " " " $ e/EQ)k" " " " " "PAP~Wou'N*_|1Yu;ՉPc /$9 iM0ЀKQ FbԛJ4BY{ 70$+?>~F {FOw}?\XlvmSOl$;v:zQFi1HzYF(k#PO' em" " " " " "0dRֆP7'0rW_}#Lއi?|xgĨ;xkfy.R} #,O>dfiDc!(ng A[~{+(TwbԝgHz,eY&#,]8Yr" "  f .`D#krH]tIH7>Ǐ:ݰw:\s)I" ",wuWX}'Yj?6" " " " " "0d`d" " " " " "ЉNd." " " " " #H@ףE@D@D@D@D@D~p7F+B3f@>K--Ba-hw}w83O<>Ov),mru g~߅ˡkvW ^xa`X |_'~p9_SK.d?&[&L+R"?nXcV[)-lm?O=a5 o},D {}f)5*lFmT`ƽ 70l&-yP[oK/~.1~mru +IJ>:b2|lM?ml]}/`("Zk/9='c4O:>O+ v[[8vX[EF)~6lb{T5vcF/s=P~|8l _Bh?+~ 1_>j2+3kdVd12k5Y:޳2Kfp6lmOYc3wyѣG_8?oc53dؖ"JcRw(fnm|$tfb5e֠hL v6sfO?tlLɬ e?QΔE^K|_b7f6K)-U>NL eʗ̬EVe?#ϑFijM74Hy8ͼh/PLaA~yrYuߚ`ەthD\V'Pke ݆Rh m2 ~[t~g/ N.3Ҕ:=K g*}_=u-y&:9&FYЧg#K/-y58bMMcKg lzSG4g6]+{gʎ^HFvey2)u+/4M[f6832u[dc{1]5F6Fn}d[(mheCU([v:X.䒘N[n%-cfT:w0:SGDl$<;MFc0gm;ž{׿5  /G)ʩ4ѿocx۰wuM d:ϲn/uE)9EY0OɎ5\6zlt}FEaҶN #d|iĥ?yރu"=wX A~Cvf.oPXe `#JqMq ,g>ldg]ɆrXg\,H.afvCQFNw̋4y6=0q7%-0(2bmW.I\Z7SLlzqKyI֯5QhVY{G#2sbIă, Z(*mpĨAYip薏MF?Mfs PXc4hӯI' w^t4Ptqd[C}|Ģ}As{G4*5dhv2W7r<^;^()Mu6#YG Ԥ#K/ Pq[lmv^<z2y侩lz^VYY50El=Pbđڽ+a'pFT4XÛ|L>!Ea+cW-ޫǶ8ZhL,zϓ笜G~<2鹺}*ww7zɢр<m1ѨbdP163tG ?1`[ʝ<}z"^ڈaΌ.D$Zv*Ȧ3o:ޖx34_LRM~ƕ2zMGuTK (HB4Io|y8 ^AFz˦yx2vE"׺c";5~;.Z`FVhQwYgFI`zk_؃Әssn(g<{M;&I1{ZQ1_0OZ"׻q_zn9nؖ#6y٥FMNGU|f܋Nע4ii=o9I,F.l|S=rb{65jѸ Cul"[,O6ox$M]a#Jmê6lk6nYIM]7ŕ-z4aS˭" 1}h-XQۊaOӭve'>!V. qEcB9RթQ8Tz7FJ݋/+um}qmRl8Tsl3_g/m}mѩ0Aq‚kj BѳH#py䑁ʋ_7,C\'] Ir&c^ $;Q0DPrŔ<6=VP,O[r%4Fނ=#>l}bh{;b FmM[yjl6WiH @G GsP3fLkGq~ F oPvQ `7:e10be 9`Kl2B( pq4^b_T3ibm:e\)Q.#Gh_jrve6V(b;SvQQ3BمKۀ.{֛?#1+<3#:kPN?QvdHg-pS0>mN;Y7UeYS5Gp?޹M7]qD;NM'-nLKQV::|FreXU"^kإ{liiz7gCkSXs`lS$2Sni{2Sl35Hl]Tђ,SuY'RaJJf~ؔzrVpgӵܬ2z ya2gJnܜof4!TӒȞwa?C216󳌨У:1ApޥNM )ŨӖ???1ƍ%C&!<<̓L&>V58իx?s >Sydhٲeڤ;L/|˖-=Zr͛!0vR'''C&ӳBd1^etaa!݋q 077;VXrcZwRMpttĺu됓wyXnpe]7Q 0d̚5 9993f Zj… Z S}z,/CCCCCCIxxW2=22_~%ТE /JaZcZʊ C Ν;ѢE w_k׮xi1Tϟ VVVvJ ЬYPL"AۻRӻwodRWUZ~= @'""A7xCuY[[=u @dbbBRy @ ƍ% ^qΝK +VxW2tyz9 @-[PqO Џ?'99YGF رcK=NRR @jgY8+Ǵz7nܠrss%?&WWW>cۥ/1])]YbV\)VZغu$]q7⥴{a„ h۶-7n^zرc~য়~N C8w?~ o߮q.]=z *_-Z`eeC 0o޼ 4W Xl=z4:v'N 55(A0~x<}۷oW\\0t;v*.v&9ޥ1;t:g/+èQP^=W07l؀z) xY[iC2k:ǴŴfΜ 333I fΜ j6Ŵ>PD.m8իUᇕۢj";;on޼8qp)Wڱ\pttT9 7nD||<\\\={ $$AAAj/{!&&Gp!̜9gϞCm۶?@6mnݺ8r>s1#Gr%;;/_=4hΟ?ÇsZ+??y&ZhGGGtڵo߾hٲ%6l؀w}WLOHH@VVfϞ7oV~U\\\T~<|k֬aѢEJ{s[kKƍ1x`޽hܸ1yڵ  BӦM+sUAD?|ϟGxzzbΝ3f |}}?8mۆ#G^8z(P~}>ccctM<?}3f̀)ƍkkkyj2u ۷o+M2suu7|.]y)-Xpvv ?bbb#Gbjػwo18\Raa!|||@D;w.Xj:wwmQ\֭[1e+ ?~MJ:w\g333LMM1w\s"''C o1]bz֭P5-USW^%An޼)ѣGdhhHvvv*hzdJc۷oO Ч~*k.\@@K?޽{ 4sLVZE v5 " 4^}Uڷo @ DDt}+w~~]&߽{7 @ÇWbcc1eh]ϧ${.ƍϏA 333I{bmmM2(33 hԩDDtS8T19 ʚ2vXMcT#GQ֭C:t {{{"wwi55^<<<A]R~~~ᘮ}1MDI P֭)//OrӺë`GJg14h7`ccboEEE3f7^zXt)Zl{:ݻ@a۷RYVZV<^\\dx{{w000@bb" )) KIAAA~~gD9shҤ BBB ///O+T5m۶ٳgGaa!ƏQ͛7<:Ea8p`1jw9 ŋgŋ ѨlpppωU')) Ǐ_a'cZ6'0a4l۶mCz*\tQcǖrM*AՅtcccV:wK.!44T"N:u*X M)^C ׯǹsP\\5BΝ?bɒ%Z; 'UޯXcW_Һ`HLLٳg5ʯ㑐={`ƍx/Ae\.޾};BCCѹsgqpmSk[pp0BCCa b_ѰaC\m>q|}}ahhC|^ʣĴ>PꀄN:022AzY/;~TVXz֭+gΜo)I_cq<֯_#GP^^^/#G /;~Tt5y|xUf]U^f)O>7W_U.M?~cǎ5//{͉wmk޼9c3ݘ޽ ???#>>eVcfѣGѯ_?!..R)1: 4@aa!J \,X vvvJ^aӦMhҤ R+}xE) 11ptt7ӧ,Y_PRp,XqA@HHeeevҥK { x뭷ʬ2(Suѣj*!((ui?@@@ׯXXZZq{U?~$:Tٙ4h@&&&4yd1=//ׯO$}<6l NSl(F^z)믿_H].]SSSYf$}7?ܹC111tQI޲&w#{=p?ǻ*s:QQQPLL5-kjy7-+**kċjS\sLL'$$P‚Ο?R1 88?i&|?>郐 4uEZ ΐWbb"Ə7|-Z@vv6?ׯcڴi:uRťԊ>>>pqqAQN:tYYY1b8$oooYF]^zѣƎ*=OOO\rF-_lsVV233%[WTT.] oooX[[C&ʂ >|8&MT{Yf8p`ꨈ9s ##8~8?gƌ%px߰tRIM ˗WxLV%k.ݻM6\Sհ _1]scQPP~a޽%yLkKijBLMz)o>  :tD:V=?hȐ!ԲeKWnݚN(ӕze)%KPݩQFF+V(ť sss%-YAW^yEvTDqq1}Իwo255%'''7neggocc`E:z(kFfffT~}rtt 1{l8;;qF||Fe}:мy(..LB ڵk%éEԿ8p 4aX!C @wYbL78U?2443f)!!/_N;vx'1-Mq=sLj׮-YbccᆪݻL&~ARb駟ٳg+yaN"Ԕ&L@OSNNNHII!A(,,LAڵS[vǎ$%%%iԦM!GGG*((InܸA4w\I1cƐ9iu@aÆV#pSNl;c5Am[n)ӧԤIر$])cf<Hiz^vĉĄ>}*IW,a/*ϝ;d2ݽ{n߾4VƆ'_ )ɧh-t@rrrҒk>_uۗZj%9XMQ4Æ #SSS@/7.Iwppŋ|DGG#22Dzz8cZ(u@Ѵ o{5k^rǨQ*=fںu+y]7erssc 6 0d`…Un&1J⸖V\a]f͂c۶mѣtR,YDeLcJܺu ۶mիWųVVV;#͛`VVVuR{Օ~e?K[VVV*Ϝ uɓCǏȗ|!T Cm۶ӧc*[W6QF]74izꁈ';x`̝;ʘj{s\+[q]ҦM{ŋx$rCӑZj5G}hР,,,@D8r}'Nĝ;wg h|.\ҥ <YFFFb޼<񟏔w:(=b@vЫW//ƪǿ7n{L8iiipqqt[2ҹƪ;v,\\\0aZUm3mڴA^^vڅXb֬Y? xq]FQ\\\:t5jTu iDfffE<$ڵk'OĉuԴiS49{,PӦMu4ydb%X:uD5=z֭[\zUit1/)))d2YR& Pա|uh.W{ep"udjjJݺu^ϚDU׊.]ԺukjР5hЀڷoO| }]i}޽;M:̂ӦMݻkQUe###_ ._ڠP\z47]i} A(((=*9KL PDDD6V=_tzAʥד^ѣGX`8PTT@,ի1zh cU=5cQ ibȐc)R<{ IDAT5c:)u#;2j5c#c1cUcǎ˫2!8?׌Rݻw\MakXUQQWzccϘfU7J"* ZicL78?׌FRN~~~j c˖-Zkcq38cՍR 7̙3ܵkP1g8?׌Fi ~g]ۺn8?׌F Hpp0Zj"R;Zm\muc1XСCf7Dw^ ݻwc̙ظq#лwoH>}{lڴ }ၢ"I3fO>WWW3_$_ZZbbb`nn>}PdaZZ֯_|wXbܹooo|Ge>? iӆ$y}||ё ĴDĴ7n!͝;WR~̘1dnnNyyybZqq{tt4 @GUjgnn }%A(77WKKK#QB7{ --MMUf6dU:8+:j{itÇHMMU[F2Fnݺ D\\ݻs0rHy===ammp1m۶m(**رc%;v,rrrp1M $Udff-ߨpFbL*3c5cL|VFFP~}I3իj˶o^)Y0UAD*:99!##CRgF`mm]ױc`dd^{Mmc1Sw@annnaa!e?K[٤ImOyعs'>SԫWOmRXRS7od2œ)1SOi^wŤ_~3fL!P孇*Ҥ!88zg}Vfǧc3x{@jjm߾۷o=|PGf: XheQQQ4hPP\v _|,--7ߠwѵkW1ӧѧO 6m­[#55Nwƌ]"66cƌAnn.LԎx*LVy-0J"F۷/o^)=55Ui^{5WJߵk @gΜ!"ӧO w^_]ޣF)> @˖-SuKJKKƍS.]ѣGe@'OQ:D_6;Ceb&/B1w\rrr4|wDL㺶.'~ROgϞΞ=+IdO988ʕ+ϗJ-koo/*Clmm!./==]r &MPǎ%K.%Ig#''7nL&M*z2{UFLs=z.%U}["**J6+Pٌ궲]͕S~}GiQpK2ܪI&8p l٢ w@߿/*_@QOn cRP^ĨQpI,X@7n8ԩSׯ_J.Ba7o.9Nhh(_۷ׯǰa.B1|aԩ@hhZ صkFI&fR;u-XTn+۩3(,?.s w@Yma/h03xY2iӦaƍxwpm8pbuP 2˖-øq pQtEr " Æ CrrE(-[c矱e]۶mo#Fرc믿bҤIHKKCÆ >f XkcRE⺴4]Nel'ƍ999ϯpSV l@>J&_*Xh-ZTj0)Fܹ3:Q?~<ե),UbcNU~kke6l؀kb֬Y^!4t:$i+Uرc5P [?zYT~@ cz_{<plc*(u@\\\T`UJy|`l,_“; *pk9ЮODgUOq]VرcѱcGL0)))[acclݺ۷/֭[0hHL|gKұcG>,,,лwo4WTу; jpkW|U=muuZsΡG޽xѣn߾-mܸ1RRRХK|:u*ZlӧOֶݩw@(xEd[xKǻwo ܸ1'p@ZZ\]yrcM dg-Zup\9sf֮uÇ ۠0=1򔮀]wE[[H=?*6y L8sg$StjGe2Μ9beV*wm>^{; jq\k=`a$%%۷̲O<#Gpss… U.󗚚PI&ӧ/_*j\?Ft;w/^D^^Jw!|W8wZlbriX!: W1u<y$2xXcڠN8~@Y}[~u1m//`d~] 5 ~ƌC$B  cccZjPꀔ$TRRRH {xxPvԖݱc @IIIbZ~~>iӆ$y}||ё ĴDĴ7n!͝;WR~̘1dnnNyyyb#@DҶm[mڴAgϖK_9LJNDDEEDffD ZV_)^OLY31ukIt0V8K׳ʊ裏t*VSLTjmڴ v%<<>|$=((/_Fjjڲ666֭@޽{;w !!#GӶmۆ";Vrc"''A19sάÇGyfѲ հd2[713*;k'ϟĿy%aX<Q y,##J0W^U[}J "qWTurrBFFFںQNJ766u֯S[vLDOrNNXUvfuMWwK:l8+p[XQh"‚ pm[nULl|/[V񳴼%QZM4kgi777/W޶8z( 7#,.oLXUͺUMו ⫚G"̛77oC[UmO?H@7cj5]W!V>oײ%`k+XU㸮{riNi^mR!aee}^,YZޒǰ1 … 1|aԩ@hhd߼<ڵ vBJJ yf׮]8t .ıc0j(>L*6CiEEd̂f-=~LdlLdX T67 cccZj>)OFg5GFFP~}I3ચIMh߾R3bD2222$u6jĖ-[adqAaq!j%5+c5-@N^d4m t@Dߢ UV[wEݺI: v`mj#WiuʗݱC~1mΆRb.YZޒ(&M@ǘ0a>c899β5CrAAXJVzh׬o?c4//y<2cꕹxvw%o̟/_P [ð6oΝ\]uTߪK z4F5k,ԭ[s̩q@B?#G>lfϮP V dq? /ȗ]/uk7j`UG=z<(&yz㗻w9,,Ĺ%)ҬԖ~e?K[yϜ9o_~%>}Ç(..K% IDATReYf_G|yܷ3aC``0,>kZ_k?}7 ?h`ð+ w@&M.]ǎчv\m@zz:ήԲxRzzz:A  BEJ-y 9YFF+NL3w0ƪ}!d8aF@׮ceQy!֬YӧcӦM*zkмAsn0#cORU c姭 ӧOsN1'''t!33GKWPP۷O bii رCddee!88XL9r$ yfɱ6o sssqA___$''KnIIIDnݐ!C%i`=[t1V{];7EW=Lkc.N^۶m)55U$B\{H֕pAxM?,YPA*ɺh1l^[\?h 211UVQll,9ԩC{󄄄!eeeiN͚5?@} PJJRLLLLJbbb' ҥ IΘ1C܈СCmD`mm> @t2E}{^#f5nL_Y q]ۼz~q j?ÇD-^V:}ӧģGp!Kri3вdVp`{z/d@t4PX2}ƴiӰqF;}681Oqq1% !C`ٲe7nd2=.]HѵkW$oSHH+ 6 J\˖-1|pزe LRc)6yy8uBL3͕>bL^lw>e>|OCwuHCŚ5k0n8DFF޽{Ֆ+,,'vލ3gbƍ(**B޽"{ii&|G$yW^\Ȩ̫HIIoǏ k'ҫ`o/ S155U&xz?w4hbccJ驴+p012s~ |2=u*_K<=g佋k]ni#F92RdJqO?!&&| O___DFFgϞ U[vHMMΝ;1a 8탕.\(ɻ`l1110`}]ܹgϞŞ={$y?~'O/ԩScԩ[Ν5{%s~ǕW8$D><5DҡCRτ(><==hѢJ^=7%F M6߳>#F?4{Z+K%Qc2A}6_E#f\ÇHMMU[bZݺu8q;w !!#G㨢5~Q]ԑՑ\ ܱ㥚ǘ^Rɓs玪[.݋~UwO["sן%A{SFWOe2qc+Auk___egeeM:0Ky3z4V-ɓ9._g c#V9ON"__NV^/'?9y/'$̬ Tٮ]F Ў;d2TJ...Tf0&dbQqPN 4L,<<ڵ!: 20 GYکG@11uup18:]?wڵ?K5:ԩݻwF;ԵkWӧ0 YFe^===Éa?0 ]x;rH200ݳgO_>OO*X,'QZZ1 C .ܹ[nq+V*uޝ T^Qzɓ$ 4y`v N%"mNNHddDuU T1ҬJy gm92R&z0߽;QvZuQQ#R.]#FH$OrCvvvdllLnnn*(ruu%ccc#___/"v[H$.$;;;#===jҤ M62߱ϐܑ֞:07SX&"!R! RlS"OXXXޗA`„  hyʆ /FT.*2McNL>u*i>/Q BBW^}J%kǺ9|pv40i]K/d,G{o@"ZMM /ŋU 'ƍӲeKsI*oϞ=W&ݺ`|{hSO ϙJ5-CU(..CKK>~L<ׯf̘Ç#"";vPy%nܸ&˗#$$!!!1҅ !zo1AjFdwl伳JK>k׮N{SScm>, b[GdB$n)e |L45Ka--Zbm$~ HG@lmm"O߲֯_Oa`ee0V+_-޼yO=666*חN:s Ã[[[:uJ53^e~~ۛpL1&`W>22[߫J xz:w_?cNt=QǠ~E&fbcܿ_-xod ]N ?g?;)wejڱ+BLJ >999طoLFDعs'ѢE2#\n ??AAApww ꊽ{@vXX={#FdCX,Jر&&&ի/rb~dff"88^^^2YɁ`NwǏeE?Wի9зEF V1KB~>҅ݶ!H,cl˱921슦PB@R Knd`とW 믭~Pv |*I߾}IWW֬YCǏC9ѨQH,ӳgd"jݺ5֭[ȑ#Խ{wӣHÜDDKL[l!DBT\\ѝ4iѼyɓ4ab֯_Ƞ득UVdffFqqq2}d:RReAMM ߿?/_oooD"%iFvnԨQXb 0N~^˗/ѣG1x`ܼy0aGpvvٳߣN:LOSS矑ѣG?Ę1c_yx_""+ [FXrj6 YY8x G/] . P&e+=jT 9঺x6])Ier//32[-P8ww-aˍ-29nd5eN$ ={rB"Ҵil,ή6DDΝ|r*ͪ)?._&7oVpW;"G恎?<Α+rDEIwKO;؛,WYRAQ[hvg RlS3 -Z޽{+~$=5546ޔn„ k+lSNAdB$=<Ƒ7iθ,YO `G]--50Rн;8[:E0{veX"u^zV ZZ7,0y"$RM|z}Z+ P(s|r:u {AIJc)n}tkfF֭dbW[Wt禣HZ)g,P_TT899]vӧ+ovv6ƍH$ƍJu_777H$888JuW^-[Fh߾=v Bǎannk ,PO^8$9׏l 1 V8b3JgD…G@ <ˏ(nT ]\.XdfkTVke@| 6 fffhܸ14i&M M4v~լ }55*@|X"=ɥ>}5/CHo=Fٝԋ>+>9J5=|z"-J߼f aO^?|B 5hA^S^>, `RNNG@ PTTʼnnndmm͓ϝ;D"QRRD"?>Oʊz!~"a(>>J Ёʼd":yT-͙G<~G.uHԴ)Wq*JuϑuBCy^^i#s=NIm=#_H](62Z.P^6ߩ@G4ԗFF)aUULheh '`H~I[V!Pɓ'eU5 DxYDTёH4..Ӟbŋ>'nd:0D \Bk#k۹㗨_8U۷3]nFFܽ; K#_~ȿ%>79ŢEGGGaɒ%ȓM!P=ײE" H7%l.&@^?"1ut-[07nti011%l_HLLyK~ҕCU5kք4n:::ԩ]h888l""63))(S~` IDATl`q+8< |8s|1P"$HKYK 6 ظJ_Sͼf:aa7oV|<z NNNq#<<gφ^~]VvV=-#bj<\{6ԮYfaˍ-xֵ+0jS;gNUڗX}2+W`ٲe077G6mxxxx#0kRKK`v5S[WЦvy[ &((H%??,Uɮ޵j!67忷3ׯAZOG4` |.9>}:4DDD ==!!!HHH+&Mz(:;a>>ILNQ۠6f9WʕlV__a+r---KҲ̼iii[S|@qq4lmڴipYz +WT֮] q8]sO8}D]#&9MZdh͛'DTJxzzVDx/jԀ6|Y*[[ bmd:X ,] =~> ={FϞ=1bW&=M$(W0 ;˾Ϩkaq?peN@p0p`]'Lyۿ-bccy &g\/#_*>y{Wt$tChf /,9'-@) P})EV˖-]vJ:vH-[,G\n^]|Es鱱{%s3İv{.a݃D5F(KT%~a}%]]]Zf ?~JtFEb={&Q֭ԔnJGݻEFFrꈈ ]]]ruu`ڲe I$rvvb&M"5557o}ʑgggّ1ՕΎ|}})77WUEd``@ڵJSNM!ikk}]VdNڞ$Bh(=VB׮w/G\PT@~iD'TI}}ϙ>|$]n(σ))P-Wo$"CH\B9;D"Ѻu|r*;N2b11 #ԩS+}=0qN{)Aq5"!ZW_I3KJ:w&#*vSQҟ˵.Sq~ LNQ\@s<(!33&'@yY9gAj¢.f\K)wJ68С;jP6?>%&&눧O>Ck֬'N'b:|p UVdjjJ[l`֭RDDGʕ+CB7o&DB["}~~~=NR<==ׯOH'Va")) [./JT^):ܙeOzX=QV5%QϞTXeA.;\=\8rDe*=R!ߟM7z+Bh(r3JDió'OHk<7WDDG^Awʘo t(%A*Haq!55ܜL$RS#5B.A?m:hkkӅ azjUI P@@GB7.3޽{a ޞ9@rΟ?O e4w\N~///211_lqdddDƍoĄӹ{;߅WW駸e-*"KhfGǝ'fC Ҋg_`ޱ]7L IPײtTJ]oߦWR@gy^?H 5Q:,ؖ-lr` s -㯿ƌQz$y$1pu/ʰrm@9m:ۂնm[۷/ kddd|;w̑>keeLSS8u, Yrr2Μ9CBCCC۹sgԫW;w~wcȑFt;vSǎ9j֬ F5MHHwߡf͚ͨƠttyu_v&%aN7S>0a\֝1, Nj ";wlvE՟Ю 20XY>෗ܭps5/5tcɼѣ=ٟJ> |v]1DHؐU '"? Wع3m-foӁNaWO>ظq, pabbS{},Q NNN'OI&<2H#F\\ P^w'>>^eo߾ Q\\ +++x{{&&&puuŝ;wT^*wHIG ; Xhjb?. ذRzcnhS \]]68a^ЯxT0"-?cMenO| 3a_Z 㔥UVã8$IZ\ |xDCAO_M15HT#ygA6Ώ&ʑ1- T/Ċ &G8tO.{V0TYbb"x^bb"/M>o۪U+Y&&&Ju/\)S^͚5&++==yyy*,)K" 660}t`ҥHJJƍ쌻wʢ6ۻ6fiHڞzKKZ"ԫbfݺp+-n]`"`do֭eIbM77裣qpAN_֩9>>mK@"_0i'sů/`Z&_dm}))X9ZѯЮJՕ%o:tZ銯9y30`U)'PEb IۓP{bm@ #ͱs|W$r;1 S5kbW+0"xF56]eik7v " P-(kVz֭[e|ԵkWӧ0 YFe^}}}ÉaY 0J9jԨ!gϞdccӓJ$iĉDDF …s;w$adӪUa244Bxo&ahtCKיtqMDXXHԼ9_w0)j%WWJJ?Gr"ƒvx8=Wt!6ccHmM=}7)+PyTw.,,3gr:u}|||ޞLLL͍_T$ Ӹq(G1͚5zA0 (#nJJ }deeEjբ}("ߟwޥ>S E~ѣLM9bTJw Wȏ(m@ٱOʧ*JnxѴirXZZʶ*S"S5#Sμ%?Uס̌ tAA,.]`/`mmK5xq(z e?GiFPusGZ+Y11uz5쇱-bI7~Nxg> N{xxc7KFyۿK"eu9[Q쀥Kmr4uĊV`啕8x ccLxT]8֭7333Gйsg:tSNŶmP\\N:!22N:oߎ)SpqqAqq1GwڵD޽rU'##m۶ETT.\u!!!m۶Ub_:S />ۘcx\wgtl3 =6"63+ճz5S-PMю/"0*g=zA<ܹsI$Q?nH$Ѽyxգ={^b1 CPbyjܸ1>|8q1 C<]rvvVy%#3wo'M*RT(wOU$RWU몉ttNFGjK#.E{We aVz?ݢ)Y// Ą7ouF UHJ4 [GRp>Q͚D;/PTgj-ӣ#G*M(-[tǞ իrחu7~8i-Ң8^ڭ[DD&l@%Qmȵk׈aڱcL&JŅ̻~bѕܨDDԠA΍J٠"11yÇD"_|9FA4^ak_|A5jԠmOn"axC8QNw8` "ҎKN&WgeծM΋)@Dt'i/Ҧo~]YYDD66DiV(ף8Pzukp*}y6cv"LJWϛ7FK|HKh@v,#PTg!]]]VŨ(9>hbq<]+++ѣ:4lؐ:woy>|8,S?ӎ|k'ӕy֖ٙ*-ꬮC]wvUkvkɓ*'P Tg,*uBDԷo_ե5kiС.;AD4j(3ZnMuV:ruޝ(22SGDD꒫+Ӗ-[H"3+<}'M$ DxI322~dgg DhffFqqܙǏ5mڔmF/&KKK211dM?k% =x']*n):r7bݸAEJt{:p@iݛo&|&).ĄS'a"njՋ<{v)G.-Utg^#P:,?v|/ԿI>ן?x!6<wTg޽;}<߹:@{Kr^vgYOyzI 6TYGYmmmYOyV\I @(g=t&UGDDDJUbϩ*lӕEg@*`ĉضmk$%%رcӧLG*B*|Ω!44 Hp8;;shӦ +=j(X BXXD"%^˗/ѣG1x`ܼy0aGpvvٳߣN:8wLMM1m4lڴ :t͛7ajjHMM uL˗/0 6!?1ϖ=1 ""+ ?={X$л7x< l4ƭxk~r/eů *uɈXNDi{06F5Cl,n鼽3_&g'?Uxmۗ=v-\@xnx+555,^*! <6*RE˖-qw+qqxl8- NMHJwZD퀓B!Y߆}1tL?7-j@gΜt__ !ja R1+ >ߏ:*&dgtfLAG,-3 77fisNo!!Ǭ+S_DW³Ngِ_}%xx ;!>~>BLMO k(zie`OSSyo<XP8sWע.b#!+d 3|8ϩSռ[/Rk׮EHHBBBpQߍ[0E"+zSWg$$ r0 M=6Yf軯//JzZ8;pu^~+P<==e\Yvn'Ͽ|ҥKyE@ڵ'sj:j]gH;½yDӰ! 1CM{icߜX$ƗDdN68K@[#aaჼ8$'k_l),Aza!V)2vFyEbbM ?E\ ؑݕ/Oon%FY6@0`Ju˪,lllTΨom1/~}XlmII-X ش^SÃ"wlc>n HXX윅@Šn oEEܛ1{ǼSmmjo=))L ЫOTݼd } :lt e/-IIJ>50tt B|BH-+-ԛ[W>Ǜ3VZZvmx KFԩ$tnaIt !v1 PvlLÑ}dD;w-Z(3o|| ̼̐!|Z&>~̟;pwFVj‘Gp-urb-7nG</2 yy NOyC;SyV{Hz͏AR)шDDW(7.dLmkKo(չ‚ޞH2UXHuWvG#jߞԔH!c QQD%*1QݺDJc |Mz؟ ˗-xu#(~1zE0SR!C؉ $KiҩIy l##6^@Sё K.tiΈ#H$ӧO9l!;;;266&777STT1ّ//1abD"D"T6lիWͩ_~e>JsϞtI\wܡK ;dy -Ç m۔;TسJe]mOt #PTw HB?tNfN/ŹaA* \FDQYYF?<~Ҕv I^ž"-곷*y~}6͛P|7B9s&eԩS۷CdbbBnnntu%/+&&&dooOƍK+aժUԢE 200vQ`` Og֭ԳgOSP>}hǎٳ<|2aPڧ,P^QDJHR|z2ah}z~~"d#kk`ן%BCAIIE|X"|7.'4iz 4r$"؝ѣt%Di;;WT$Mw9x"͜9ZhAVVVdeeEֲG?%3w+WRq1F%85y ˟>%e͈bb^*n=8Fb7*!D͛wRqeRnja}!Zf 8q<==I,ÇWXXHZ"SSSڲe SnHWW"""8W\!ruuڼy3I$jݺ5)<ɂ:uJe0Rsss߿?mٲΜ9CӧO'sssLmV֟KL-G(""f$-9HR{t/\{o+vvm{!R)M9=0.rҶFۺUs CVT\Iړ>K ,LFVE w2r2n٭篕{^ Uͦ?E?~!CCCݻ7 >1bDeZm ^ P7O ]LYMTJ_ݾM/SJ~ʏenMSپ1{ImNYy#QN{ ?HUuʩJ7Hb8rjܸqyK PhhLGuuu%ʗ<\2~fx&"~Nॽ)*FWRW)K[Eb"ё]P@*g~(syQ-\(̠ݮ?7z;a!JN;t'sR)!}U n+J=NLu%V|%eV"55"wwHUO2 {^zx T %b+2Ӈ\C-N&)_}G&.QhYVbqAb*,'%K7gY5Le . zVS]oK,~} L3:awǔ3SJm=Wzо=; #<-:WC_!x4_pjkc_F8&;H遁Jm~-CuWpr"#33֎O+ P9YjN'ʌ\‘#Gо}{ԬYS&D㑐>Դ]gQxc4ۈ.aFhv<Ù/XцHLftt 8 `a?gvmZ-̱ؕcOO9]HG睗Y Lqc"<+uucԭ; PJӌawzAd0R6ny |-|X 3 95j̰3轷7\wmwt)|9166Ӽysx{{cΜ92deijjzhhnlacWTNǜpM`G0jܾ]RLx:jg:ã;=@Bhޤ *UE(Xz EA^$(]BB{&;q;$ںN xrxDP(̬f{xx8uAtߎ;\q5 qFӦM\OII %''J>}:ŋiذa{It֭Zr,eesݟMN5'iL-iQ-LML42,EEnݴ2K=Pq}ԧyl {tY066D?L4z4*5c9{ZۂQ7^rptvQb*hS(vY,5ݘLMk>8tB45"'=+GD͝[cKKezUrz qw^k! tHg,y+n@u ì %KtON 琟7E!Eo͛;3Aep-8u^tZĒlᅨYC}gq8rH6A0|pKr3g΀8dmI&;qDtڵ ٳ5`ll Zϛ7M6ee%&NssGN|شIn;d2CiS` ߅P:4ʂLc6ڵ |̘u ./zK8s ܹØ~̀{zݮ5hm۴>KM<ϡgUUjб+*#BBeX.=wNU0m8BMcă--q`RWU ;;sAvТE L>bj̄Gt=Ю000ړ 2^^-QU󘩻SDϻ:1؞"~qqqLё\"*”SS@.w.#II1s<@BP0M>رc\7x8 u022BϤJ?߿ϟǸq`ee__Z񁥥%Ə .`߾}hڴ) E?^zUTpҤI8_5|||jEFFO>HHH 'h;J@+ᐛQU<rr`"aۨsB.\,,jQZYϾr!,\tR^8;3۝5 6@ς]?KO{{{>Օ툠Z;NݣWVP# wB+Pw䚨_rr޿E]UACǎѹsg?~gΜ)'dƌhժ8ï*u=ЕԩF3bPã çA d2н+A<Ҁ!C##`VQtAp ,[w%zHAlmYx==i#rZAk׮3|h -BN`gg &V :u%K|!N8588#F<8q EyBa!heL.Pw͚ݻ:W/W6cc[&*9s l KCU ς]?KO {ZA.7EtB]\<;y =c^TLJ|}*3O8lu@m-!}Ξ7fv|<ڦWRui&r6иqc,^X5ǎ\|DT+B rr΁ ii{u~.(J#u/^AXcy\Tb+*N2{XI _js%*U詩pD @DzzR{,y9NCNJ;[,T"OQۑ3?r9D ILuc~3&6ۡvHLNMc;n+^̢4sŊ Z ULP2tx`Ld.ܷG-!H+NCCa^Tv"ۈjPڦÇ#zQyaܭ[7QyZk{^^5k]v: `Сh]g(-] ,T¿?|n1 5%⿞Ԟ?u?L-[H[$ry|Uӣx!(X>05N$ ō/P^.^ڶe\PhW^aR_u?aiiK'#0x~He1elꉠAPr"O,PoB_}%ZQz0Ykλ:=]+VlNC)4uƒ3::X\DBBpPxy5B݇*S!xh0<y$Dqw@rl,е+Шpu_Fw.,ai@m4߇?G ⑯ʕ+F>RWmݺuO>[~熆Գ9R(,l+Yk3ٗ,[P0ʽ@D4I ߟ hpp0ס@DDDn1z"0Hoٟ D=7R]闈_tRA2׸8 V&҅1"A[+ ShӦ ^vMAAAZ7o>ZxbcSii,ゥ,"_$AmЭ>}(Aaa MMQ_Oy3ѐ!DQQZÌ iЕJvvґ?L[ ,E D:_Ѐz.]ЪUU˞ G78Csg Bm%tC Cuw4aT~W[FHsPK!!ZY57ADke LPVhӇ8@t:{nL h__v@u x=)>DD1t~mnwt80']uN$=Jt[XAikϨw;RI37*- lƈzћS0R$k&Ͼ}LCB(\QFqE/&1}V]I[Pz̈́Z y(&z"z14@ 5ubhhjƍC޽?J V׮]ݻ666ZN ֒%KСCdeR^ IDATet8ñcPPk.}n+))A߾}ThYY߿*+u jb/EA$p<(Ct`GFwvwK!Tw߻7+]볭+iݿb"fzqOxxxJ2eO|1͛Wˉ>|^]ͧԩ }HKK#{9x$'DxD uxǥ\ظ.\ߍj$F ;}vv-l7bI,Ad2`X6vD*wS+_g~FLLsr. At;Y 7#@(uw~+_%$&Ȗ2kgƒ `AnEMsdzVc15e[j";4u\|9LMMs?t(O(w+oGU~J \ DG3|>DR9 vh1Zgۭ[Fŋ)bO3&e-|4j|AͶPZ;wqXf r>;vի۷oǏR$+QV /ՍtRY 3!tt(E2 XJJK/Fvi6/9sz{k*<wrt77Lj ii3!XPP]m۶M95@D,պbxw+o{OOD6yy2z I̒L,Fkz{k9,*`0 gg֨ޢ' _prr‹/%x <ؔ n{/,'{i >YK)R L%Y8TB옧 Qgf\=廗ţ`%o-\>+ya۶m:̄#{@*(oG_x4@޵<%+ h BqfKDEφHo%B]a /.DJgQ\ lȦcgiHEEmۆW^y +m۶QC]UAh۶-7oW^yE u@232qADؼyq˫%2Ct\ix)An*GjCly9xoGEIkLҒq\żs`Ͷ6+J+%($$K0^CCqC6As?O`qwEӦM1`ѲpwDP m?r"D' $ڰRe|<1!, YR)t{w?$=_t% aaK; .H4 4u~~駟jU{(xl.BFqLLLЫW/8oYYQ<>t=WH*믿_~SV/턒0qrUMszȈT$A4ظfK7sܜumˋ;ށ#oF"J{0!%Mz}OӤ`Çx#DEE~hޢA1<#pQ=7vhҠX (x%%&NdQUw/=@.;[22XΎ:HRTW` IWxwa``SN\gf9@{y=iRk>$Dxwwwaԩ]w Q^.9wKw<8q̮Ă(ϣ`4Ʉ g۳&KYTjF]kj/D_mrX޽@.l4p _^BFT*z-~y!!# ;M|9rn~(ott/(@koo4,J[Z`/Ǐ>rř XF[CI8 WI up߆gڧOMUH: Xdϖ,Y'rQ* W/V W(6lq%sT{}<ΝסT/6JD9§2[J[v6ZzyH&w"Mlh?MLXd&&t.hڢT%``>@6lBؑta 4Mj eϟX˗addyldeIoGxyDixh\Jq۫y,FTYeEy3`mزl "5E _APj5lQ#Vb,~YO+~As?e 89l.V\RYfW\y,Z;wf9ܻ'^PY .~@%qg! 3#"@u~6`,Z\Գ }ѣ6DV㫯aΜ9(f" /rStX*3*q{m#l\J$D*:!$i^HJb[м&P-0)ЌP,a3~Q%D9}xeִndL< =MZ} BS-ٳD5kֈQ* :}$I>_Ezׯaٲet qNb{T#qu"dlR.y(,Dcthv҈|ꥌYӋȢ%PSRi`W/d2nӦMv؁gφhJۇ .`رOްqEݻM6?G n]sJ 1j(XYY[!+4d2r҈R fBoF2KUYx=qC_7mdTJU1h odfSooƘը;ՠA@Fdu>E k<}Qtիz0H}`` Zj-ZO 3; 6i vuO;OH:AC ̏_'$ ]_JBţF٩E `U r[K X'_$&%Ͱa6 >iiRkTÇ"^$AC = ;x26*@R O<. eg[N}Q5c+La]B-q3&^?:L֚x1^=*] %=^-Z2ģ>۵/8Çkm>|8z!ӧqx٦8qbǏG.]j9nq8sLͶTaժU;w.k1i\꺟*0aD:t(lll$ɅiwwK-i FHۛ&I\\ Ǥ۷/̝ˢz߿>|0m Wlfq%I+*ºĄ%bgxl#G>҉?Fpp0ߟFlA>j5zK:zy2իDM>fFFM>BCC4gWT$PL"*(N!'di]tHE)R(ug*RŻ-3DSSPf&U @;:R_kk}("h.lj ѣ#6Rt7&>ca跨ߨLYFC+^]S&%OMt"ѹsD7n)D}O4aѐ!DFFҗ8<AAAԯ_ <j}I4|8Qn.{^xAq|}}i֬YTQQANѣG'UB))vuz; 5(mO%~H G?kMKPGk(ҷѨFDl^ :r w@p!o5k{"-ϥai~ʍ6mhVYzש_~~͍(-U+3&O&:DO ٮ/^Lǎ277u ? 0@'NhJHHŅ֮]KԴiSʢ-[ҪUo5}ԣG|2mٲVXAԶmۚq2FIgΜ3g֜g͚5CvvvB̈||-))qQpp0ر}ϳJUB )='jh8ure⿈Cd3؆:ԙ89399Mb"VTШƍ6mh}=޽DDoADzF%tq:zsMkg.n>95q/3I %27g3&M"_duԀ1ll e.]#;w.~ؔ ɹ_ߎ TT-E4(T*-%m}|@zC%%8vNO:3 Ϗ}»vmeZlޞ֖EjxČ^4DU4U[_!/k(rrr0vXp5kֈ2dj{[!=䳭HW Ldlꉔm)PG+AŜ  <>=ok02bG)Txx~=ȅXJeIgj,@˖^mlXѣ.D}qơO>ZK.:ugς8W8;wNkIЭ[;;;Vk\nn.8Ö4-ZNNNpvvF[}1DXd 3f@Dic~Mx{Ά͆@~ 3!vY,*3˲T3YY[]b|` HNQx`||mkK>.>xP/G} TVVB.P_Sb>E"Ͷ6C\H>m[V)%\]]k&YsF VGZO%P\\Ө IP'̀._uZ'%!QHclm[믁pB8{, lw?Gj2ǯ^ ªL޽Y)ȕ+zMti񠹟v١瞞)ӽU(X31]_Uh?~g>'zϕj%]ǂ hS# np])]biVi$]Fڞ c};hmC5߆MͿ'M;jFFFXlYͶǏcƍ?py̙3hݺo>~>:?ɀ&M{_EFжm[T!:=1ƀs`NLs))4zPvJCC7`쿭t]rJ|G58C,twGzq~@nV-DFFb "̞=zntDE@{E!za4r- z and$,rp33gi.d!N_~~z3# WcbŅh)ȅ`3āW$^wAn.#7hՊ]!k[?J-4=)9Xh pL4ͳp>?A^ 05fJ:C6mw]j(+o5M6H?u cATrdx5"B [o1,"l߮7X廗oozuMfdeS/^FNND,K@'$նVcoteNS53nfG=lll?h<"_>_Mͽd2 &()һ_RCyX( %_:V[z:UjRZC j 瞞gSR< `몘laCH?4=)9GE˖-1i$L2IRjgxV8أ~//k'GWfgzRCC`h">Y~ca 00zNR;'@&7t(xzz%ԋ'O_СCt@`bbRc\{K/K*"+75Ƌ^DYUee~smTpBאA4+SDҺ$x4Dy))- Zxyae|<4fD?VC%9r$ (dJ>rrp0 &| ;kKc9@]̀1䚆:uut#CG OӤ$ѢE*,V'LXիWkm׮^~o޼Yr: ƛcA(R`޾fGGBBBf̘"eUU!.3t@rfTUISVU!5>|8!ٰ vܻ1x\E>l;eFXf$2J2p(f&cs ҃$)~F}+Ѿ=c(ݷ{l8G&^zI{RFMPA&N] *r*`ll̛7M6رc8+WLk$y>ƽ0jEFFF "„ .yEE~ 'G^UiGX Ijx BQv\\EwT]"} =]Za`6o0f &p߽ʫq5*>C8}r!5劰0IU*kfДkY[f͛Y>J&t@fϞ7| 'O>}47o/YV-8lu@p-ʀO?e;箪֭[akk SSS,Zz$ s  ߢBuUnRw"p@ xie( )[ 4&A<;OOK({ F3{6ˊh(rOg]m* AA潭Cb/|] F*ٿ0II]fy@n _@B<"{رc\7xƵlp022B 6* ?<~?ƍ|}k&ǏDž o>4m k*^*ZVsa|2k :t@D/l7bAMgˊAC000…  d_uϿ%WFl O<<{ XEWY@J#a$a\Xأ9#txO?euTzMbbb|Mvn^ۅp\UׯgaVVˣ be\gz~jOMUH: O!q\RҥKu6= j*dggcΜ9h׮Zhӧ#t\D&Mжm[,]nݒl0{:$c>fK//FkbҏRذaahhs"J_-D|.)hW]^i8,}Ej5͞=gpNTRY /z&kM@.}l4\x܌䣸IwVTXrewkdχkm/++âEЩS'a„ nggN:aɒ%O85fԩ`ee޽{c咴ƛD)֍W&'Ν;ѤIXZZ%%ϣ }kʤ~[fY[qga!9R`^Fe%~HMkHA_)Ŕ)D뚫q+CCaBh)f@XfR do'ba&Kw}];v/6cǎܹ3?3g\σNȥKдiS|8s Ξ=^{ by5{U k1`(Ws|Y?e]YYv܉VZ8̘1 g bxx4ݻQ\PW{%DLޭ$CPً,- \y(BI`o7fMS.OGۦ> &omR0J+lnf[Bceg35"'@AA>c_^;86jU#ii/cfua]nBݴi k9yyyhܸ1/^\@gqqht&bl0z$6Xx̓_1`p~GDP`߾}СC CǹsP hǯW˚hLJG* d] ,EQu&KTոOЫy<118? 0G-`*`FFU(H*{Z}ay\dСZ,*tL:9 Bwn$3K## 9!!˖-%LLLo+^r""^EN9B_1#rS9xGHޔ҈RDfe%gd`FD[y{cnd$ddf{581eӧ{jA;w/p杛ns@. Vvx>9DARARj`̩ólk3pmQ%LQ˲F;{l:wݻwKfD" _ӡZGdǔ'#yS20gB;AozE2*+cZܾ jnQQpFR MvdzA鐔VB( |r26T$t;޽.CpzJ]RPu#Fhs޼yn z%գ{JXQ\od=9y_HER?> fLDnDD̄Lf\,7IIQZ( (,FxuO_7oFVj ׯ_(HNނ>Yƈ^-e3>5r 9x1 Z!(š_@ju{8hZ!; jMƕk"En%&M ޺fQ㑬qӠ}^ѽkn!TyeX1![}"xWahh|LjӳV`͓~6BxzXn\]/^*++q D^z~@N1F >KfsD\(.лQW{.. 6,nHۗr[U_$&f1Qo^[Vh%[ʺN b]f߾,ʺo 4fdbEInjKcAϷf;mÉ0i mnZ"ۓdXM4qE\ƙqe5K}Ow^>?n;Mz H>y[]޺s=@&ˣWJKiOkD2gkX¤Bl6ڠC##[Qe5J|^~zΩ.u7@$TA*zj#DD[l!ze-@͚B{ϭuPZBkh}z)&XHǴiii, 9xD:6mٳgq$G[:5zhRSV:Q:x0ڡpqjh@km?N)SOQW5G[zZ H,.iNY=)1zwM 嵷c6`ҭ[^{ME2nSQsZ-mڴ6mD8ZbmڴoZ֭,\ۛRHu_ԑ}RzzJ=v:Bx +(SRC3?摤[TO>݁D}p vNS"Fu#= ZU\ WT e#ͮGҧ~j̀L:Ef)ŧ!ZqTR'jos?:Z˜g}f,\XHk2tޫ{Ϝn+'FqgDDV7DQQ6`PK?F^{dW!e $ԫ1@N8A~~~4m4r6 r0б?Uw:r~KFY?Y ` ٱTVVoAIII$ n:EXRMEEcFQv6(;tX*.~ZZv~ҷQm=TNvK؄}}G/Rf+:f*Ojk (1xИi~UW*/54p'18uQheSgf~>w=͂*ԗJYyRQDIJ}4i$@R/^L?ɮDD&S')9T\<=:A99tTU>i/KEۚ":>8esp _5u}!QuuO--jY~4ɺJ9v?OTU!ʽQѰ4r FJнln.67o&Xg'_ '_d:ϟg6PFE.%xufɡ{w ;?w6u7]nB8?54|C]]n̤ܯ) 󏝧/HWb~~PUE=Ki- :{ޮ}oOyl]h Bg1烛w9xN_=8""\G̞=uuuϷ;~Iddd믿Ưk#Gwo_GEFF9Ll޼Ϸ+;o<ܹsKbÆ hkk+B /x'{ٕ}w / =e{0>|<ޘ:`π" >x1`b "¥*e?~1cϟ{}`R[~Fgg=<<|7~~Y_߉@F*lC6t5v|| ː7 detYdBZSrZ40Z"()$^ڰa6l`wLR8y$ƍ1ak'6mRS&_ J%+.tK5yJhixa{5c IDATX~={s!\t%hi--?@ND g@.|||\]]he*hj^A^d2㭧9gMD(hp'j@A7_=H."]&CTT^^/8gRPMM@zC5! ЖA[!l%Vbrd,J^bzDٴ 0s v{jTWWǖ-[Ʉ̜93gĴi:Zm!ʟTF[!*JGoJA pۺ oG&';`0DI" -d4)ý]m]f3.hVFs ;;b1FHH.aN`úFƂy_?,Y7a4ٯAaS!fY/cZ4ϦN[^ :H}&D"DZ~zlݺD9s&.u]r(RJ9~Dnc G;~mm8c$)Ne+$M4qN$';:Ém5FR%I)ǁ끠 By<ŋ;O?99Xors'?GF?O:z=ajp,/XN뤏lEMM 6mڄ7ѣŘ3g̙Yf!<<ܥ^_֝hmr7L&5!g/ r-HRqyڅ i߆ $ (_&]3lS!58ju;Bx8 pp挽451_:T9}pkTWWcصkZ[[lja޽WtǏcĉ/xbk]z+ZZZPPPTwӦMxiӦ Ґd5*஻Bii) QQ[[Kvʒ%K}vTWW[~m.]8RD\\-ZV|̜9Æ ޽{{h8Bh"`6O5zo t_3vUS>X}anGEژsg:֑LQ?HLtT*cٳ{AEE222ɓ Sǿ A+DB&,*^^A3VD}Z uvfxzYh)$)G!h9g 2B,!'w5j .N< 'Ng]v\dwSȌ˷ rXXl̢EѮD~?Cd2!-- wuL8Hgg#T}PrR@-qht,<΍tSj5ڌFD @Xl" ۅsy]8Y"\ DVV8CjjjN4qFvo$_6m7|c zDZfZl& (//Ǜo B_8tvލ'Zqvm[SO/paxf=s+`ĉؾ};>CxgJ%222˗o6*++Xŋ1uTV^˼ r0]m42R_x0G(U_S_CFqO`aB75?|ku:`H}7{'JKK޽{bǏɓ1ydL4 aaanv'ё3 J+e/C@ u| t%:kabŐ@,x^C8R'Ԩ]+LܵQ`` 6<^oxG FEipH LryMDٸhnfas06 pcG@Tb׮]c477&LiӐL!j(S0 8/HcL(լ7CsVSPRC fD@2JĐH I@ q^ghujqAy݆ z{cX'&b7\g1˝o܄ \l+& B,NxGjܰع031r@@܌;wΝ;T3gb֬Yȑ#Kl֣C:C04B*,2Y|}3 % 2#XڏC}Jf2 I1RQ")@옿DN+-NB@$E" (AjxC. ~ؼy/d˱uVTWWcܸqxqwX[8q8_|y^uZeYw,|P$ŗT>;^ '1|N Vˌg as3 r kg`U7\lƙ3gw^"77h;$--O$:] `Vhdar^^HR%źaZh 5lP ]^^'!JA(b"D.;;jԮo&~l.AVuF8Xyk `ӹMh3aB<0LyAbw6`vj3H܅wf={o>455A  ==ӦMCff&2222;V磣(ۏ(tK14H!D2Riy`ddjhi9R!B2Jp1DEC$WS'd¥ncbGvJ*b#nڎZ}Tczt<O"Dk+y33F6:k]f3Ça4)S`ԩ:u*ƏdZ}mm~ǡY#%RhDN DκNՌOe[ɒ^@gsD(qVEu:je-GCCG߮'*\ ~!xyM7-niaX7 xq6$ᢱA݀kz? OOdEg1o<X;{kYN?e1HRR$ 8r 9y$:;;鉑#Gbر3f ƎѣG z})3h,rZ%#"FC,NX<bnvĤ3AwIM:h+2ZD@>SG:g05j<W|?dȩS0+VSM:76-X;w&܉Ɯ9x}N2Cdv6hd.[Xz/^3HjjjaaaȰ{_VyP4 2 %@* 8n&ù¤6As^9-3J 5^B_4( .0^Qx<=݆ }0'V/om6|{[l8{B 0+a,v:O,: bhpQQ>̩LbX!<( dBBLpivm8q"|yM7-ŕ#oԨ>UQV.bo^t:1J1 ĹȈȀylAˎI$3aM`0<>}NBAA1113f RSSd$%%-1j/X ڋK@VcD$JHoO@/jtH'#TQx*˲4jKcp!VIӄ}up(Ȋ٘0Ɋ>ڽ#%%x\3D,IR#8~UN8aMt"-- qaFS44|jϣD8#!$C,Dxy9fb̑pQkjyGEʼna/B x;ny^XҭZTs}z'׫͹o>wN5nm?1ּ8$15F# ɡCP[[ Ǹq㐞t7.ۘFh4݂n9}xd3&>>N5iLZhiwt묡0F xqBc2]&L *\ #8 2e6݈~gy`bD;n#&K"4ؠ޽,/?y ?NzɓVN!%%FBJJu?|"#tbQ޹^*)H Y ޽^^KfBgm )bQ =te:fkYO10'a:Lpi̛7gϞEee%bccܫ֭[Lftg' 36db9yO~8؜u'qWǁPBFDp˰[dxǏ [6:-͖}.(JKPD$$$ 11*n:] t6KW+BaU$4 Fգ_g{; ^ ) 7#}a~,ى;q!3**GY٨'OHP9ƍ%G$.5@Dř3gPPP3g̙3(,,DWwl/n#FX F:M&M7GZ-쬳v;bm}|Kᰃc2gUO96leKϥ?cO(Jȼe;ݎ31Q(Wp WFɌHf6e64b֡INf'F}wIWWqE\p/^K!8mP86dRw;ʡחA/NWֽ_Im-H O(0OOǎ 7~:Je5}:9}#lKAr0] 1"'abDL@9WF#kReNf`]walFIr2tRkhDqq 9wΝ;bamu&%%Y')oi`!h0TZè|9,FIT7;eL p@,lxBm632}5ND(U".'N2= i1.lRSdE2F*F]` lȅ l[TľX.?.^W*(**BYYP^^nݖ[J /GFF"**DFF"<<ܩbɵ|vcsXp] !5srq0Wړ0 D"CFcth ѡfZBvαX{577… (**Bii)JJJPZZR455YI$ 6 v[~xx8,"HD0[ח`^_ {{' + fg*5 [oe>Sw[5GqE '$`R$L4Ͱe2SO%,) l3L&TVVҥKV)**¥KP^^n5k'шr_# Z;!8] ٖZ6J"p'sx<20tC-0472&y4jM\}" 'kAr5CU;ˀC<Ɋd$$"! =a2y$=R&Qcv\FE1OE*`6Q__2TVV,=<<*aaaGRRΝ< W\3qqYƎu `4T)!!OL. H N8#FZFK,FřPTt'd116vvJTTTn!!!p*$ɩwӅx^X.7 gd)32ݼ'-41Z,! fA#܎zRQ8C|MlΣ ***rZÆ CTT"""޿i2CC˧!:%s hXp%847yh暴LHKcA#G)/q LezKxx$$Xc1t;hdARZ2TV2c@3c$25s?(y^Guu5jjjP[[:4>|aqU:0'O2#E `aZd>%& ŭV$!MPU 2$h8F P IDAT@b`"b屈I\Z-iq()-eJv6c$2q42&CC4 IMMM/:{!|Λr?fÈt6k"n.S.\™3(h(n+X'@,$!10IIt9De#&%%6.[++mƉ@8޽e?"0~JGG)t  wCBB$ e>t#G`„ p+j2~1h"ւWR761#)^>Ťk(UNJ%vp hhDˣ1wшD,"q֑e bU0akk$F'n e[G8\3 Nrgbg/tu!Νc9DZ8  ~it EE|/bmͣ"?qq("F((DF4PL&8(/gIymIwv_+XG&,V"Dz㠾*uuuvp 3us1s.6k-?/*6nwu1C$1ur,GR%FJp RSz`4\U T*P^ U**[jk o!`[K& C$! 3*s\Fj1HjjQR_"Οg c+0u g;qmOcjsU!ac'zKXfi!iH I;%Qӈ2UJ(SYCe[%dq"7QQmo¤a!/ 2:qFGiu5~}uu,9`ODy`q }!P!(E151 BPg3f>YVc b< :l*jw:وrU9.0r-ۋ2U]ZkY h+w#e@,$F%r3\d556g rCCHFDk _˔"ZFCCcTN` "pN.٤?jjl Z=(7iFMfj;jQQԴנV]˶=utvypP X qbu?HD/u|[661g[0)*PF4ܵL|fԅڎZTW ըjZY`l, a0JC, F$ ¶/Q@!V~đWWluu6668lo2@ᣏXsdL(,dۋf!![bc-.&\Zt-(WIu{5j:jP^u5D"JC$Db_X!b =-@Gz/w6,r@p#@# g`oK>K ))L.Gg'sKl򘁢2CgS *8Q!ȉN/KۥE 4Pg_V<4iТmk46q^.#@`@qu_#I(rr2oa14OLl{$Sض{3[Ie^W L]h4N]:ԫ~¦B؇&MS/FUEmA" -#D,ȟqXOلۖHpݡ́)htkjmeǺG>?o ooJgמ P9z'/X|%VB؀@@*&&*4iЬmF -ZgϢE^M<W1@8[RffXĪZ6PWV-Yo@-V PK@D@" 0 pY]M&4iШiD9t-hѶYیj[uRo r~~CЏ9of6< 82},EXx?~~xn 0J2/_f2ТkAM&+u558]Vp/s OG} ?a>~G|Zwy NpkX̪+!lh`lMmnf.G1err9h7рo*/}1miD * J**2o1q6#Uhj=xk|y7֑r ws:M}n3Β@uJJVD m6T*G m6A 'ܮǐk'!斴bzNp5Bn ` -]alg; K-s Zg`RDh3} Y?<7@x }}}eL^Uبe[R¶c{R)Zd 6C>>W[a蹵𳥅qVNDLLa2} )I +RY" ɇƒP@` MKs]Lljw{R槴gxN"T&Ѿ9(@:cI,^f P h@ 1x F˗/ǶmP]]q#f͚VW^={ڊ HO'+ĉm݆+WB UW_Xt)-Zԫ\SS~СC0 4iV\8;vƩSqq6hLͬ̕!moga۶ =ö_YiKqf?kIVmm6޶qՒQYaF{FX32)g3k0;-۞\-RV]3y[{^X f\OZ|A:p"'XL.m߾z!͛7ꢌ wArss>|b1͞=nJ1) 0aFH kF;wgy8>\KK SRR]ؕoI Ђ hj*t}'O$tIwS|WXw0kHx<9{P~o8}y'#jow1nf^gzL&"_"ڵhu>h*_gǜ`pz(éBDP(9r8/iԨQ.u7nHQvv^$3g]ٳg`0Xݻ8oz<==W_G(((t:7vRKK O?m?rH1cݱ?8Ǐ;@ϛ7p ?5=_s(?Ӽ>kgy=@kQC.ӱq~mYz5b1x/Faa!N8R7&&ӧOC=;w Ѐ]va1czjd2G;ף>vʲ wߍkZ;v .\%K| _:xDc5k<\ ov܉ W}R$$$LMe3r\9䔚 "Byy"rX6%%vu"::;=Z6//+71σ`ku7-ZD TTTLqq1%$$?뻫mVժU$hTVV2zWI ЪUn8k}c ~N+Q@sb[0x=6 ZǑ=nHК5kܖ[f EGG:~ ?^}Uꫯ: uk }cN Q@sb -^54@ L&*..u7Zn!*F6mr[nӦM6WK;wtch5x7;?8MhNG͉O4tx=lnNH$x,\/".\9Mĉo['9Joɓ'`0iUH)))ؾ}[;w"%%:.]^I& HFWQPx^_ Q@sbCCÇ;͝㗣 У>J.]֮]K.-Y(88nV ϟO&L RJ&L@{oY8ŋӾ}Q*CK,!zo~ԑI>ú{)33mk}cN+Q@sb ^E4@-[4[CQQ-]$]eO?MuaZ}"{iSH?h5x_nvNGCY(p` 9_u eN  >|K,ALL .dffB ؕ7n5a6h:$$ǹ+..;#kB}'JC||5pmPZZjw ;w.Bp1o޼k~ǟg(Jrd2|rs]`Rd2IRqD"k믿nj;pB2Lu:-X<==)$$Z/L?i$joow*:kgg'}wҞ={)))G}y9T*qGsZô{nc7n JII]v<Ν;isљ3g4k,HkW*.'^O2f꼾9MJ0М&9CNG@2 ?O~͢ߎNlܸfͲ~ve/~)|A;fL<eee:u*RSSP(MMM8s <8nh4̜9ǎ1c>sDGG[9r0v{/"""|])S`Μ9x饗}>|PTԩS{СC6m<<<ooo9s0L;m6466b߾}PTOzjBB!d<s[%x_nvNC7:W4090y=d:2e -_ZA7>SMMwJ8"iɒ%-ZRSS{衇詧~O8Zt].\ޫYo!???_JG\.p;\nn.qKr;r~Gӄ P]]]4n81cɓhIvF"b,ӟKH дihٲeb Zb-[MF|-9M4y}3pu_1М&x^&:pi|NznTWWܹsϏY[6WÒqqqagTJ[nU?I^ǃWWWqvD'"ڲe ҿY,X@˖-;VVVFiiiP(DQ[(""^o:D"q?u6 IDATl|I8>r׿(%%~t5x_nfN }^ &y}%HN o6Gj vg%~rww'ANnvʳk+=lALJ )88cǎdeeEJgKr߿O;vrQ鹺tjԈ*έ_'WWWEˋAP{ƍIN:-:t4h@?諯}(?*>f,%Dk4DmeLq  &ǔC}!͟? F!!!DQQQoӧնiΜ9|rYiԩLlЛoI oק'ҟ Ύ޽r@k7NzFojDD=nZR^^s!޽;_VZEM4-kTRRV_yLՍ\s&j+DYMdLq Iaރ"$$W{V~~>n݊"L6jHvQTT>}۷oGlذ T$KNyy9Ν;-ZȝZ՟ b͚5(**{ cƌᅬ-[ָ/dZڮڜ3 pVWi͵SL`ooǏ#$$DV/33(++3Sܽ{-Z._ ԩL{{S4fCLU[#"H$HcL;vbk QѸqct;vDƍM *L{{S4f!Ssmn7 J3son'ODLL ꫯ u233aeesCfs2LB{εaX̚5K.:^A=P^^lذ6lŋo=L!ޞ3L3aεA)\.rs, t)z|>M摗>Mg PPPl.Ӑ!CHOej;gd 0i"ε2v&̽=i)=ں)D@7erssCLL ϟvĿm67ε26oތx4k аaClڴ 13gT\C[SȄ7LkKdL{{smΔ@ƌc03?nnnj멚cOV5gX[[#)) eee߿B&̽)g\["cgks0YrƍWpp0j9::*cM4  /(< A0k,b&h֬BRXÇX`{=XYY)1Viq9Lk3m~xd222 "6l؀$o믿YYY8p 5kwwwSs!t... Ê+dk+oPTT_]ipUٳGVve9r z^e___Y=A0a,]=y4g-it]`Y(DDӧ&MB͛7cذaС>#8887uC!,, p1DFFqƘ5k1sL8;;+r=r࠴ѣV\^xrJ"22RaTYYm+//cǎ̔+|2ƍ@`<} """1cLsY™Li,JJJ ?  ӧԴiSj׮\yii)Q^dedooO|EDQkKÆ ScRR @ݣUVD"&MٳёƎ+krۤQ)//OGAAAC_N З_~XLsY™L[>b֬YmʕI[8Py&f̘bРAX~==GEDD777ĉB!66Vm? wyk׮7ܹx/bΞ= gZg;δŒwEqqA.Zӗ ߆˜L3Vp!5 V:\۷oG;v옱L3VpYmxdc1XSc1c 1cZc1Xc1cmAѣG ϝ>}~~~Zcp\Ƙ!mݻw{~sϞ=CnnVi,1fHz=kŊ(,,D.]p9}.1fi,1f(zj ǎCƍѳgO۷Og24c3_ިQ#dddK.0`֮]Κ1frqc`m:::b۶m?~<^}U 6a4c7 @)))¼y X-L3f81}d߾}h۶B9sЮ];\xQ_b4c3$؝`1cY\rE-Zeu1L3f8ڢQTDK([ (++c3͘3jNG@>s1m4{cq\Xm5 BXƘp\ƘF|޽{13Vp9H-vΝÇ(BEdgg++q\?xo6:t [n1cJJJ >4h"Q^PQqǴY7 }e}Æ xѣG8;;CE3F}fNE>|XeXBxT퓓!"f͚U~2q C>/_͚5Cdd$6nܨu8׆e2岲0sL___Ç*7lIIIJT\+WaaaICTT.]>} ""GqAl۶ ...]Vpp0 PX[[HOOG\\?(кOܸqiiihԨO.kkk|7(..eqqq8r._,ܟ"..666z]o||쨈acc"BǎjҙVf8 e˖tYm ^{ EEEXnsHIIAN*[jUhzsL\fӧbccam-rJuR)Srmt:?TZd.3ׯGq .ӧ=jEn݊۷oW^hժӦMի4U>|}}E~~>mۆh_„ [޽{Tv޽r, {{{t֭[!H0h ×޽;222pit`˺~:k<~h׮ڴiSm}X|ԘǯN8v9~իU.|siU8,9ү_?4o˗/R{n\rӧOǍ7ΐ$''+?x_|DQF2tε<εr5ԫWOkSDEW[oyh^?>6m$C!MĠ}z3,[ o(}^lm>}ظql/ŋѹsg|G6l<<<TmXf .^mxjܸ1<<DQT{QÃJJJ4jH}vL Ч~*+KMM%A諯""rrssѣGOTTTDDD? @ϗ[n||VS___o6 @K.UM~! @/vk;wPRR>}>|H'}B PXXH=z "5k֐ qF""ڴiܹ^;V5yѣGԮ];~Am0EuE߯5 (RYY撕;DDtm]'&=[չ<;W|ر$5sVĹV_'AhȑZ\O&Mȕ999!$$D62AyyƏ2z~ F(Jo>3gp}DFF"22pumRRR:$''#88hٲ%>#:t8y$RRRj^z ...i[4h#F U{ٳeee1bΝ;> C6κ<κax{{o߾PRRTH$k_j߉to:sŪU/ ڬY3 "ٹpqq5݋~a޽hРBCC_///@~~޽+km.qqqꫯpI?6UcȑLڵ Afѣtڴi~ JbU˳kݻwcƍXbڴi橚֭[3gSN j?98[d L{xnU5צJHjj*llldJU ě.Lm۶֭[@@@ޖ+uEQ~ӧ-[SNa޽GTٳ7oĥK^du(@7/}. z hM7_5r7Djj*DQDYYpU\zfZzκ <:u*]3::c۶m˨k 0uTa޽pwwת2kS /"~̞= h4Ð 뛗5C9߿r;we˖a׮]8|0F%{.22se?WewGͫwް;P^^Q{СC@HHH粀g^V!!! ӧѾ}{tر҄>} b͚58pAg8u;fcc1c`Űj|2 {{{ر5ZN]L\[F?SL>!!!سg\]]5ndrɓ'O(%%wN ͞=\bkEu7իh~H/`K\EQ פ>ZJH/[oFNNNLwޕkO(' @8@ Ȟ;w}ѣIOHJLL+/--/*hPeeff*-JJJh$իWN>vT]~-[o IDAT&W"܈ѣT^=ruu0˴*uEuy]۴eXUݽ{ZlI?רRιVĹ&OH ԯkSGGG#>>/_ʕ+tR̚5 }EBBbbb~Um!=ܜJxw7N!8~x+[|9H @}pp0ܹDFF޽{غu+>}_ 1Ю];9s(]ֵkWΝ;hԨꋦΝSN!11GPP;'O"<<\ak׮瞃a_mG… }v<|VVVXpS>sxjSqPRRh",, O$nf2LYo޼7oPq78zo)U_C5‹/&j-11С:C)yTN]Y]L\[VSSS+++t]vZ 6YH$ںu+ 2h^^T$""`{OSI>M'HˋDQ˗/W`jРV{A޽{ӣGhĉHI?vSL!A(88X~(+h܏x[BԵkW1cҽLҿ}k+VPtt45hЀڷoOqqqtEAUѪ{|||="m[y/]թrpp0LYW/Kzrrߥ_2TSJrr24>>i_m+)S]{/~s˒s]9Ӫݻ}˹6zW_}%¸qjR?IB};wjɓ'4ajժS)++Kiݓ'ORTTSVhĉZp!uؑ)<<֬YPGz8NAAAH}Qmu5'O7xڶmKNNNԡC={ ܹCF"jҤ h5!p֙U|ϨwNC ?TPPPm5zӮ]_&;;;rvvӱctZ!C/^L?#ƒlRhh(5jԈ-[F[l^xtQrpp(ںu+?! #D"WwdeeEɴsN tKzݻɓ'u}hj֭dooOo߮2?Oϧ;v7|Cݺu#Qir˼wlْZjEk֬4Y93C߹s6mJ͚5sҎ;hʔ)dooO:m84Φ3gR-Hٳ'Z#A(77Wt3GH m,c&’2ʈ#Arem۶Uzp\\կ_e2f,)?3 @۷o7sLk}1]^x/_nݺJZ-;;; 7]SAMkm۵kP"BnnlDn`` ooo[[[7tKʴ2%%%ThrOƘvt711QBgVJo"}ӻ~ڶݻwW644T ew喩+y!$$HOOΝ3iXfIVFz7ֺwU.S~m1fj,)("++ 111'%%!))IíbՔNd=uC}ct9Gy0f|駘?vصk|||1S_~J?D 2]_bڴi8 0~5eI/((K/+W`֬Y ݻtR"%%Er8\2mtn޼P.=KmjJUU:=>ɓ'#++Ke]v) ^eZv-Fen蕩e+W7oy=;;;_gUVs)S둑Ç[n~UV0ax tEi8Lʒ3+ @n޼999C^^^èQиqcÇvvvsTmٲ%Ξ=P~9wgΜ!CJM˓DGOH___/m۪]*'Oƒ%KjڛBŋ=z`,i? 믕gΜQ..<<<+zjOΩS:uJ4hPۚB{S15+K4Qjj*YYY0 Ņz-447\kR ta_} @˗/Wzsʴih"DQx>''ʊ-Zcbbё/^L;v접#G mڴIV'!!ʕ+2DBaaaԨQ#oiԯ_?rrrLu;v)**lB˖-#ܹ3}d7"駟Tވ088-ZD۷otzɉѣG*LfINKK#QcǎtQ:vܣS˖-) @Fr{y퉌kMYR/_LNNNKm6zw͍?k)? :uR12IIIԩS'/HhH...ԧOڵk\xE i„ @nnnԿ/'ORTTQ@@M4IƂ-\:vHNk׮UKDNNNԮ];:u*^~S3>X%eZQI߽{FMԸqc:t@}cZS/.Y :VXAwUY͟iSٙvYm~uYE75%q ܞ_3Y͟iSӍ?V[oΝ eULCf`ę6M~Mr{ʹ68دIc7>XJM.qqqtS (##IZzΣGدδ~L81'3~ NixnjcXz5 PVVNK,1ctYcp\Xm> .^ul۶ rs#::ZnoƘiL3f8ڠcĈXcp\Ƙt:c1ciV D>}jcUZfrqcȝ;wQb4cӕN׀\rEz1VK8ӌY.?c4  j ˪c3͘3jNcj;wk֬eUZ6'Oƪg hذ!>6loVδa?i^0^m_" 11۶mõkСCL:maa!>CݻGhh(>tQnVVfΜ,o߾X`eu1{l[~=OG̘tzHH~}OA{,g0Μ1v^m/0n8|Dtt46mڤD"A޽?>+PVV^z!33ScЫW/ʕ+1e#""BvGw?~<233ǎC`` O5%0t;-ZԞ}*r i^0Kę6_5vqlٲ+WD||<y&fΜmdeea߾}ڵ'|;vΞ=͛7ǖ-[`kk @dd$6n܈Çzrrrpy3j'/Ic HݑXh7 V=[ʌ3m{zjj*/˕… RGnCll,v܉wn߾ݻwcȑHMMUǔkVjnMӊAc,;;ra@PPڶkN<((D\2Hi@dgg\Gyy9VZVZGn,dxb.\ ƘX[GP!{^׶UUݻwڵkHHHP㝅՜ eeeoE[ 8uؽ`gZwm'Sɿ;n9+V\ ܹn1fqt]gϞ{ήJx{gZڷ0v/Ӟ>兛7o*KߨzAxն^_UuU#??[nѨQjDj2]и%հ=3֭úub)???m[lg*;w  Ap 2Dz֬YR.>jh z?03lP/( _bڷƘ>H ̒šeeDTB\t(ٳgXn  QQQX~=JJJdu322pWX^^^߿̙frdղKo}v?^ޫy@ Dirs+{Øzhh( I&Zw}#G --MVoܸqXz5 P1s΅.]7nfΜ}b0an߾3f ,,LF? .`ƌZ]kҾ=T:Ӏ^ ($''+Pe 8{Ky0dӑ+VڵkСoߎ^xAVJXYYa ÁСCut9s&#F`E?VXQ1n8}{w\D[[[}EЩS'4hݻwڵkѣ!" Q߁rMc&LnxX]ܻWÐ19@&M輬Ç/qشiv{?>+V@YYzLǎC^+WĔ)SRNA!-- :tJe_v؁-[YC@Ӧ7a iKdfUZ3Ytع;LRRR#""Wv$߿_VV\\LZՍ֭[ӳgde#A(--MVv5$*ӧOj֬-Y|||hРAj})@N""ÉuSۄ1U_̼U{8@>m䎱ZŹ[=۷';ȝb3;=+55xpdeemトYYz;wݻ۷oc9r$lmmeu{ oooʾ;aرr;v,ݻ۷+cʔ)o-7++.ֺ)c66DzcLs2j ˕rrrԶm'pD\2Hi@dgg-ƚ5k|rk"|Ű;w秲m˖-qYsA|}}!Μ9!C(ԕ^!Ǐ'wH\pD_v 6Ē%K;'1p`eukM Cfڒq ee lfz89q`>=3r3:]ҤI$$$jk֬pm\\WVFDHMME``ڽqqqŁdeϞ=úu0`ٵ QRR"+W >>^V6rHX[[cժUrZje7߿?222'v튌 KjvZw`LK F?cDGG (*t' QU'PIr|3Eοe^8|8vލsuXf ȡyyy3g<==z?.];v }EϞ=rJܼy1pQXYY.Y۷rjO-ٵk4h YY7g/BBT|Y;ɩ CԲ <=Mooo\zFs A4[DdƌXm zONB}]vՉ'Q)//O&L@FWyØ'ORTTQ@@M4I.\H;v$ggg kj-܈o6_,+M֭5Z 3sƾ3mj7ɉƪXRR @Sʤntϟ!?k(fƌkM2}DBm۶>}PyyVR݋޽jQLKM I_M4|[VfMŗw9V+ڄ ёSRRH:yʶ'___$EܹCDDn"Qi֬Y u}||h*ס$??_e+';zZZcŅHIYTs SuHڳg"{ZiM:/YyxB IDATi9af3;/q]k9{e?㬶:Ӧvњ -ofS'+ Œbd^"ϚL!ojٗ^?bkk(E7n߿6y)|V߽ Fh: @&O, (8qL#MBq>>@&e3mj7Ն?͛sѱcG<|Pm;+|Y9v (+Qw;CԲ_^z%#55C Azz:"""PA0Ú!#7euy4W^W_H/Tݗ@Ϛj)gP7ѣ1m4ڵktR\v ~ڶ Oo͖<~ ?_0wCd_:phh(6mڄ/'|c./+VE'a,X'OFVVz'OC<;g1`X:4ֱ8rh^o]bFn:[NFv S˾U{gϞŨQnӪVW@F8r$Vm;f^9ӦL|Y>@4ͿoMWyq3mj7ULQ%Kw}W+LVK+N.1#El_~EL!ojP_M| ̸8T֮ƌܪ]3iS)X[Fjj* T̿]^^4y.h.893Cgn04ܿwGs ׁp0dM-F-6m$7F*>BIYx4RRR.Ӻ=,~HV?Y=AF 38SP!GGGZx1رFI666i&Y+W$ QFo͛7S~ɉ233q1rtt(ڲe -[<<B=~l2C75ShDD @ ($Ջrrr"'''j׮M: Tnkտ3kɠOnѽ{DD_}'Kȵ&L-DD| uڕׯOmڴS*ܫϲ2r̕'ʞ;( RquHyy9͚5n޼)7: zWɩ[wF$3(S{SLdseu$X=dr)οrU/% _.{~׮j3s3-kMN׀TUVVdܸqCe^0DFn]S1OO<Ș^pihF:W^8__yغ(,4F'3M| )ѣn;wʊ"}#_P@Vֿ?3fyIqԝii]ty1K-v]&/,)@˜>#ā;Ãƛ?!!nnn022===SUMYq"'6HD ҥ NNO|R'#/ ТE'; JҦ?DTQ ;\\!W]˷oSeToۮ+JUۿuY$>qGK.U[̌F!GFFqgj׮]q:uJ;l0(wdaaAjuJg{ۛԽMڶmz wk?Qel۶ϥ>:tx'lZH&MԮb޽yqkm[n\.ǰa} 6 _jUׇ+]4Zj}׈⌳НR6xA@mhdӑuOANU+xsT;99)KS"srr*'O^Y:ccc|xQ;2l2# E UkM_t` p4\n -"((ϥ>˖-{zgϞ£GT`Ϟ=֭k6_фť(((S0n8ajǭ 2x\)l$neBTK?НeQҦ?drJg҅OSjcʗjwssC||< +Wj׮n:uTr 8CZ8K%,[^%\['YWʊoJYϞQJM@A>kh6_QumZ[[CGGGx5jcccxyy!66/_FzԎW|ĜG"ZިmU]q0hP{xmҦ?d"J N0H칹O^~9n,+Q%T2yyyQ훈qFxxxyMLLD*,,DHH9L"""C;\l޼ժUC+~qݻJ27'!+W*|1$XYY)]^ěDS!ey={̙3Xp!ѦM!xU-WWQ#`dӑym' ^،/,_Zd0hM~T(Nlm| ĽW:0x0x1Pfј8Um-[D^0n8,[ AQ7b!R>}вeK|gXf гgObƌ~fΜdXz5>3j {VM8}BCCq1'rrr_z6J//D]mihcŵP ԩݻ@E3+"E 6h6333!UAhӦ LG"++ /V;M=z"￁RQ|4E"\yseg XGdh7!!!ܣ&LVT6!ss-g}H$/_{<==cǢ[n E&MݻZdf&ė;7MCc.ܱcG_044ܼyl֬YvssӧQPPl:_ݒ%@*2077N8QdCHGDEvccxUGݰi9FYw$Lʮo rNOǗ%.@&J@#D-]μgA~9(/(outt0o<̛7O~zGiѢ]+Zzu|ט;w.u8p6mڄ˗ ~ٳ'ׯ===:u ^.\^?FꠣپͪcͿkGBSV&N8Q6!kmZX{wޞcbNF4Q Rೢ ,X )gQ0=ttcxGGeK/z ƴӰ%n iR>cA+Lˋ_戈H&ѴiÃ,--SNtaСCI"\3f ;w|}}Ɔiܸqj .Y7oNԮ];ڲeHgG%; 8._\̨2g $& L?>SnQ@>|8#+#2 mZU (gϒ^D-KN~Y(CNIJ" :/Lw<xMv]Q~ڽjGGƜ9DDEE:}w%?< ivA5E646aT?Μ!H9-eӧDD:`І۷$:CaG\){_ #jPT?ZJ$#jԈ0]_?RTJϞ,_~ AwAgS ë?&F̦+O`1GǏ_ --={jK.XsQݝ?@P -hoq/?0 P*+:GΉ}G`3f׮aaob :YY _V Md%b] n2/mD\o5}:qu75r \]WMG {n .}|t@s]mՁ `rꟋ uLK$w! H~~>piM4xA=YYxXXR8z4?#Dz^:o ͛^,*u`6]5Z[\GG X!8n//VFt4"3QW !;!+"0q"{@dӑIW>.A####?~h޶8*bm ʧ:/u}#+/2^fUDvv1wkƨf M֓[9;ʨJxR\(Ѥ й3d`{3}Wvڵ75r1͛cjZO]6``VK8H\eMW K9/Q#Wm5k`V,A% 'Nijj w##L;DE)E:Xua+ IDAT_|8;翁A3oM@~:t۶mCff GH,װZVoG'CAB+vpTMd2L6 BΝq رcQ^=.\P{yøq㐟/қ1cDaÆ?== +W>} !!b^ΖSr'^ ٔuvpQ|_cǎA"@"r/ܰ~}v4wAJ1DXYct@L lܹZC`0=4PÃlmm8ե 'yzzyzzjUme22dz'E#KI W Q۶D[$fڌ6%7 իҥKD[ZlIj* O?LLL(::Z{266&___ +WjՊd2@Ą>c3f аaTAuԡu͛)44T9x.g#FߺE5ϜfPV(7&M+˨񟍩úB}"ں ƪC &(Mj"'''H$QxTk99ӅʫWqѝ;+ ¿<"GG-.ڴ y{{ʏzoQD _V_JMϝ*+D-[u,j'`[.s\*_VVBj阘8֯_/{{{SFʭ}v8RRVPP@u%/իW 'NqSSS `AVVV4vXm#>%Ht&+KXaH_9DW /.&$jڔ7C;&(7ZhA3g$*<9@K׮ ƍTic'ŸR2E646aT?C?w?~LJfnBHxQ IHhiRQ#Fh| >?ƌC&&&'_8se'٥#WWW|$HDDF̙#ҭUu+P& 4 |Ȑ!dff͒&KLQQ Dժ%jMPQ\8ӈ%H.T; [}늢Iק/ٳ_k"S*KL$H)LdlLTݰa`;r}{"77~G}0<,;]!f::b~5E 5Ĉ#0\dd -@:M777 䞞{[q"'6H:jAzHu*O3ϕp>Ghz: Q_ObiP͟_ar- ZohcĈG%!}F푧P`FPq@.V #_u]:C+ z578`ht~ ~~~ϟB&y}.[D޶Н7!!|RY^ [Y|YrBƫѤM?x"uK~-uddd? RhH+*Bdp@?՚bPA1مقs04n3g̙SK%Bѣ{jxޞqo\?a'pUlIP~}`l:KNxTCYYYhѢ`ddƍ#22qyXXXhG VJY=6=z\415}}|r7rYw mi㴪?j*X[ڵctz\:ԩN|D%KԻtWN ]CDHHBBBwccc|r9r#'Fn/wu~)B==L&nW֬C\ rj}ҙs+˾ Fbc=4LF%y_lZԩSɓ'FFFÑSj>x1dY2l9A,,I_ v2, -DIi'''J%2''r>yuK~-uаBc3| QTv\?[5-j6bxPPֹ30|80e 6z"((HyK>˖-{zmw>|8f͚!++ YYYʝgϞ!;;[FYf¹ GB1CÆ|2~`~xb'zz%.Nɗy_lZD*bPx! Cʼn'4{MOP1іGJDC ~ dg6ff=/oƥKjƍ@ð3>04mnnno\rPvmuԩ8ʕ+8j8\|Yny}GڵնifftQl{ʇ7ʁȔɰ‚гʗ]GYbh_PXYY_yyyڡ Òd`KKHIL|g]c[ +hLȟuCb046IKKʲ;"--MS]æ RW `SjDLRR\\˖J1Ե)G6_5+ q2dcqFxxxyMLLDddRVXX+'QT:""III:tktNb})0;EyT]y3 bNbxdD QPKCK8k]7eCS/J! 25kּL|׬ZoNxS'qc~a 3:q{rlF vƋ񞡩pZ-Zvک,ر#hBS]q$RV0O۷)zZ6ٳ|H^ C{XTOddDDBUMݛLLLhҥ?ЀHOO٣>|8RRRR&ɨUVdooOW{R׮]Ԕbbb}DGG RXXZu$/3""vI;w$CCCQ^*Xff&թS(!!A bе a+99I)(. e}[wCdoOڡ1 dCn .PdЉTaޭ..QXA7CDQd8WrxC6mhlrJ8G7o;wЖ-[(008,+];>R 02fziߞU+QsBA׵6&\ v>Q3@jUa2MFdiiI:uÇCD" 乹4frww'St9%rwwqQ~~Hۛ8#H"D"Q;22RN "rtt>}; ϤIAEE׮Q(+?$׏Tۯl'"ERS,-Y6emA캢|_΄^"")DNg +QayEyT/~G$23#JN~0wѦ &"4i*9#===Ys:Q_0տ<)uu|l*{^/mACc?8E"A%ؿ(ux7R93g=(x-Tͨ~v?+Z᜙@FZv"=ƆhQϒgkC̙D)WUMkUiSBJ2A6C4v,)Q"6Ӎx"cc b6yv]QWSPй&J+"WR3g8 EuΦ%ui)*׏w}o+6Tj`Ĩ4GWG<<;L um0=#V8p5f7Q5}%wfUE 70Eq14WիdddJff|2]5+2aڵ!!lwj78C!c S;sjBJa!<큧'0y20o~PVN0| >٨=н;1U*5i۶-v؁/ ٳgTa>ޖ0k$zYXec`3[#q9M+]WϺjc?؞ <fUqeu<E.jDB_,,+0`A ݎOn ݿ?0{60}*!a$<\+h401@t>9^.3dǓеNW 3r.Ֆ}u` Pvx'Ɋ+H$MڼS9'[&#ӧi͛n"'QQ~q>5 o$ 3o{[ٴf)gȋ2(0//6ȄB>ur"zLTﷳA{oDX/V۶b7Gޤ35ΐXx7/t#"h J:t?q(-;9Ч?%BBQ" *w=]imF2ǣ[nؽ{7N#FI.q"?.f8"aZ6yRnj Z&^dԭ/yΝ ۽/05Ď~;lU3?8z ֫S]fUCZ&`RWy38˩5kTEul6WN/18K8qe0,HxW=sZƻ C& T:yn12pGG,LJ—ժLԫW׮wĉz{ngcJ;g.c믁F#:*AS3᥵b1U0dNN3֭KGϟW[3֖֭Kcǎ֠;L?X76uEaoWsQ\8<)?#"h iiaT7QbcDe yqJ F.ڴ< W^dllLK.PPP*}ZlIj* O?LLL(:Z[̙3dllLN+W$;;;jժM0ttt(88:DǏ'hŊ=GGG۷/Z9BSN%GGG]6=}TKW(/ﮠs'1';EF򳈿) {7wU}%p*=/J5&t2BAt8rb:uV榸裏O DD$#`i1yXd7vmN2Y$H)8wũSYֽh*Z*ɊV̕ED>>|WFehfӕGk' 111q_^ F[wqIKrAAխ[T^=*,,TN8AQhhRB4{lA jZ̧DBѲeԎzZ+ysLPgUT+:^CgϨ:rUK*ʋlmS;t`6N4"nGo)A◕A28I$D7XL9LTYu+/MׇE\J6XNŋ=,,$Hj kGTx2_`NUNFTchfӕG5ƍall?\ 2d_ϗ[VZV C!==#9r R...ظqRuVr 6LװaÐ+e*{p޽W^ m@a8_M<OO fת7;[E>w"ss Ŵ~b\Oص 07}U5`0ax7|?Iz| l;~Ϛ(ql%iӀSf %P(^F5Ӆx',MA~B@Q_k<.FD'wXPWmXۯnKU  `hZ;IHHJ0uy/ hܸH "Bbb "R၄ApqqySU[~1Arb Xqw(R98*Sҩ%t^gCr <HLl,zYZQHIY,^LuAtd55..ؐk/r3;ƍԑ`k+Èg‹={_4s ƇP=BZe p":ꅅF/7o=1p?87o4T=5h- ;;;eyeT[umZ[[CGGdeeaѨ_> V]]S89Gj*+ܑ;)˄ t9ӧ#5l̡sg૯ǏEND:]Ş/p;㶨Q@ (gɐsJ>>( W޸ |T֋WDkv+ NJ$|N+ ƫd6m<==aeeΝ;cǢ^z?.\R󃝝իq!?_#޽{N:055+FCCGR z2cen'H==ת<UTOCBQqI~;-W0TM,ێUWQPP~!337ozc„ XLVvѣBBBM4 sQ,L@_;9aR|cpl寓(c1bm`+dd2`ݘxI&Uzjx(D e k_k.yBokVV|ض t K D{>߃ǹمbづK&L`ϟK׮]q"ER~}ٳHk.8b_&hϞ="݀jsNa IDATذEzOmG2Y@WPEC_RΦO瓙, YlMm״BgnMTNzk𮬪Qu?/T zpH$eE].]Rbz:oݺe??էcT7/Ϗ$ݷ5.Q.]Wj]v&MlWF<4hbsoҫUEo:hD'hh%;*!sqGr9Q߾D&&D.;IG={9o'!ߟϨUe,?輼xС"k9AsřU rN$Uyr>}*s6,7O6}BŪ&?OdmMԴ)Q񚰇םΞ/rP(tKM<$hf&qR)rLPVH[|d E'G)( ՋO@Zj Q ]xxxPΝEqtRuMMMiĈ"ydd`Q2!9uHwذa*],X@)?7vU,AΜAr8Q)3ƙ3Iꡔj$R2*{_ϞŐT zX{;"#(aS%݈:jŔh {ŹE~]{\hIT/>[s 욧2333L@,,,D4pmݺ DƢå):tݻ+?;ZU։Ggΐ,[<ɸKƑ4M&'UFԦ w%vuJVQm۶ sݩC̦+VO@>4}I\#*~eL3#NeOD*ե1OJ"rt$jVm߭}. 3XDիI\oVa/*%K:ӹsMUX&LOʽ-~K(˩CϋU, (DG˝j_dgQa~`e2CyO~SQA]h[pu <)##CeRPVx/" #wU&5 Nunӱa@Ƹ4z)!4|v81Qǎk20<=~iL6 -Z+\]]QvmOF({Ĥ!lm )i!tLu / ]\0}D={& 2^_@l /oƷU~}I-Zz>̦5E5!'">@9& xq"3}! "_߹#+}(, -ph!XY.%N^09|8P&=GmeѳgO#**\ic&&p|a-CLwA^'vvuTŸoظغX L@W0cWөp(pм9& Qhlrt'jԨ///xyycǎ3*͛E2iϿ2۾ wy\T>V-63Àב* FV|-[>؂Sz@VHG8 Nm׶ŅTD+p}{ 1xw 2dcqFxxxyMLLDddRVXX+ ;88۷oGQHJJСC_9 684hР\G ~8 j֜̃gt3hqVիs q2U;>b>|Y^0D?83Ǹ_O<vHY GS[)={ݻn3*NɖP} /w7ɲEeJũSUtf}Yw^I?R5mQ#:r9Ѽy놿?QfeЦm]fӕ~ܹsEOS{(. 8'"x:I__UF;v͛7;*0gQyfqJ9_b޵ϯI'^L$"Zp>A*g3@׮U;wOFzukV"ϸUc]imCcnݺ7|>HJgϞM"u$=!*S#ۺ&ܹ%~||DDOOX`AG㏪>3h:Fj̦+O${{{ EEtӋS)>((:11Mk޾MGuK\!ǧA#GRLuh ѧEQ>dٿzJ!CHB|TХωd2:EDSaxAPДw R)Ad| hbc=9.v$.tzgըA@VwѦ M@n޼Ik.!lS}9j޼95kL P() eGlDDBJxuՕ?W/m#9:JוKsoY ЦS~]Vӧ+ TkI!5*Kt4Ս(4wC.^T; 7ޏzycgz>޽Dff5 .(Sr?Oҥl C6=ԘMWS.Sͩy*;]z쬨LPЭnQneP}n^UF.qz:Q|tyJAV )>3^͛D , R]v]Q\~r2RnT,EEҵk* y$R)m%-Z ױϩn3GCmS|SS'xA.ڴ(X666hԨ:vf͚Z 1`xLO lgQHJG2apOְ[*NtvOɪѧ?||O?UIGW~ X}B @qqЦ 0u* 0,˗/Dž AEؙZԴ)n,[Pq~s%yup^TO._b lmǁfx>p@Xjy!fd 9Ziz67|`6mU8+gC6~& !*EH"6EblXBh"T, ҋ 4THO $63qHhsdn={g?{1h |JWD+EfzsޛzD܋ XճԶ%v\'bL!^ի^~we=.9kgqG+3gδ{|BǘL}dã^Q\ !qiIv0I*cm~( EDl2q Ǿ ;vH|V_^*6}*j62ew}U*E5r~Voӗj9o<‰O&ڽnW&QG IȐԜMJn cfwaR KpTstYdjm׵EZ5B~'FIIUwkoٸ?, W/;N kVʪxȍ#I)/ 2[2^1xI^͸\l.9 cǎ?KW2&Ν;BpAefnhdfnym6|TIIXeeRWCNo<ϙދU bc;e|jd׋ZM_ZgYY:uR ,X,u&8v~1ss&Fa$yFМO#C˖rӢQ^n)a`Ć$߻ ,TeϴUU翶ڢkb,$$|Iʮhv_j2"$Ff3[YYR@Fx]i*8k]CEM'$sAv%r ةP%6l Ǝ+ZjeB<VWEPPk~#G qq|ѹQQSDNn1hPhԨE[r,"`!EN /:F17)IKNn-%?O? KBm+B `JkXD 4LlzxҬcE d1k~.ĬYB4kfD́mBk"$ѥǢK9vQH^,_shB{""}ۛ6iiB<~~B̟/U"ψB_I& `ب(!~[v!-bPp⿶ڢk,//7p۷_/:OQ,"4QU) NNb2|KpMW85urMLO3V,M8ٳ?E7k4~S')<_80Cx-{lE˗ h,ZC!^}U \-\lN?vq==PXls-Bp3}2އP AvLw?e3&L[| q~fxӜd4 |QiUP-.9s$eKKʕܻT;3^z^.DbF99~EcF$f.3++jf | y' <ɻ&#< q%VaBJPƸPoWƳp@TVgfVUW3/Sf?s( +RSq474\lBڼ9٣ݶo٧h=[¶!4"]O?]=Yzw@' kbWo8/VuB*3* gOEQ{yV[EU<7.+(d8us F p< ]wu/nڕ/nfhh(...L2Edr!'WPFl 'Uٯͨ٘0MJ9 ֭Ѩwɵ˯e y"cV}{9+v}ez<~`{UVwsr~dr NHID їu#yy򢛟Ers曚2uLiCp<&q+/}-yz8 fe ݨQ^YY]wE-8ykՂATU[ lRUȫbTXF#RR4#!34m ]!Naa5JYc!:G[/, W.nÇt:"ˢVoӵCx:8ٺum*Lv^{eld"ltbz58L &SK+7= 4eJJcC i=C7jܹи1hK^*x]WWgvAvcn999ٓ={R$06};H?^M7OcOOvfe?β!ip#~@fF p}.Tlqtt j ݱcۧѻwouiz̄ 0pb\,b]\XF#"#t@r*F8( ;Onf IDAT8sަ\]CQouW#r,jĦ- f͢o߾4k֌#GrHiFII ӦMgϞjՊѣGQhժ={d锩P -[qwwog̙caÆ[=$/Yp!B6l`sG8!ùx6$p` ΅oA|| ! VXP: v4$& ]3Gկq^zIR8Zy̌b׵ŕbL:޽{7̼y8sO7 x¾IѺuk F ̄cٷWK!\LIYb21"a4AB6?+ eYW49YTBmƍrƏ=4\i6_̝;W5W7$+!11m2tP Uqq(-5EQHQbU_~<}Ff38Tغڶ77XL.t͒6 ^e޽0t\nQN ˢOlՕ+Vp|IصkyӦM;}Gƍ;X___\]]5j{eմnݚ!C``8::Cx0 |W>|cǎ P}bpZlEQxqrr?7Nȣgݪ,)Ƨ~](VoFVQ@ͬLKްŝU;VÔhooDxNiԝ Uf̐~,Zj*n6ؽ[ƪOBnϏ O`SMN`42:,4-廪*zlڵm4 99zU:seOEdETVٰp=RfJ ^i6_ 'A/F@@L0 U5UotL&?tkN>ǎl2qBZ|YiJ{>SAϕ= Mۑȿ=`˿򕾨=z#ӧ?#95 ٓxcG_^q``5KKKɉ9sw)Shժyj$7Wݖ.Ĺ㙜,Y' WUUq}ѴiS""w'NcLNdgzr:wKo |գԅLFdEb]{`SfeU*Z.nI xkgEA:MHgd+CJڢ/-ZpM7>˹iGYn0Qrrc2ߋ(ľbSͥ:uJ;* Bȑ~,pqFn-9XAgkDU{z٠ަ9:s'*L\gx뭷TY\w+h:!9s0 +d#p21|!/Cȕ6N"<ݿTY%-:vM5i\ڴihܸEc04 Gk׮~Μ9888ufneffܹs/:K.3ŋc0HJJ:8ш``ǎ`0r'9O/ՠөS'#vB&b295ʭ"xX0f26dhnL\w(.&  ~,R-ki?m|FR~9ҿiRҳ&M.n׵E]5L8M~~x>7jiO!WVfNfSwӾJh0rT娿x>* a4rgH1Ze}ٲ E`AnV`w{rSM6L}š5oWMs\Re˖1aʄ Xl* *U&LP\!+WTnqq'&7OEEu͓5bb08P6^-Lhh 8=Fά XEE# DD3iӗߦ-jڦ~nƋ~xQtB\?WGI{0 cһwNjw`>]Ҿ}{ѣSN؃|9zNjj*:t`‰qBvVn#rJ$FaǩROYDլipw!w=$"4PXQ"E\yNE5))5] pynZ]WCee%:ub\8ǎI|l+Œ3pttTm( {2V ޝWs/|s@; r$/n~~4449 <<|]IV#GcMnȟ5(@+YM2Kju ʢ[n \\\ׯ vZ0]7YxN7|h{ۻ5})-UWY8IHp*37,VEayJ f:qH%9RsR( nx;JJΆ>;i&6-uiQ7lo߾}>99+Tuss^f Gݽcҽ{S'''^m޼Eq!vͤIhҤ ^{-*@{Y\,)SCBBpsscܸqKq>|x=k *R(*si=Cp{rߴl.u۶m;ox3v][\ !֬Y[zql9-+))a\s5jDwk||ړoR=NQҾIjh^EEd❸8 t dvSIܺUW'ŇQ[F!<. 9]VTK~UuJ麆K怴iӆ3flƌiRꊅ泤D*Itzgii)Cy9rDVk11'Oժ̪ȧ#k+Ƞ7 fގ#G/ ; ::gJ͢VxfIOc00fM^i,4G_.9 M׆ѫWKBj~:u݈= =TVVҪU+kr"zw}iӦQaOOo?n7 Stįf1 A S( S:Vb,ɃT=rK9C72d]3rJ%nZ6_%-?k׮iӦ~ m:==N:ѵkWU tBBF`4:8EpĔtKF#U@¤$4bqrv 0l޽u,8=@ qӻXoX޸_W=yѦ.ңGlb͛7ۍ2|hM`\>]}a{ё/R#jJ:AQ26fﵾ -$&IOO&&Re)S䆥cG6U ^ˀU_`rʴϫ 'J 6luiQ7lzƌ4n"yu?1cR=Ν;3vؚ,YYsz}H-[r\k>|{ꔶbQGf=u e,YJϻo@E;eY\ 7}ɭt~n]^6]pW_}lРA*\԰iXiӸ[puu`0`2Q7Wv?uzbo ॗ^:OBرޘͮddAyr9!#C0 #DP]UYɛLfEj*zɓqqWWEu䊢S??uJzvYxzzҺukv$f &0ǏObQX(Vϒ1GLMiO@}19Mi5,IF=Lm^3FFZ߇$ eE﫡g\ܒ6ٰtR-Z,Ѩ[r麆KЫW/'|‘#GXp!Æ חA]jXoXqF:tرcy1 f[=m_z̺u20qv`ڵ8;;3|pMg0QQbWj+6M^Dk1Teko$y>* k}}YN#)["o/W^N88\!谬.OkwHNE}[6n,kmFїuiQ7lqƬXSO|eɉs^jV!CЦM֬Yݻqss;nѸqcFŞ={hݺ5C!؛oYcTn˗o>v?ݺu_e-݃SSW/I V%%%DM'v ?k[z%2p` yjg-št:h2ɓ$`Xȑ:tAbK/6yN8sbyb*^EF?i7,}יd׵`۷o닟y~z+ |sfl6}Bz)'@eewc4HLIɲUHYW3/<3iC^,\HrA1ߗ툄þ}:Ѧ.b0jAzua_iXvر/; N8[o%_Fi+;y{{ӦM:wٕcǮ'/O[Zf%yQ2x{(Y!@Ti)FD F:0)IFRz"W]egu> p4(3ϠUXbʑpT)BG[]Z.MWj2{2v|gqpp 9Rii)ӦM뮣e˖=ZoUlٲ%]w3fP0izOru憛w%_.Ʀ9UrrKJ53a  . '8ə4 |(>fcYJ -q4_meQ#i\<#:% nCfLu*޺Bxy챳믗C_.umq5}~ _lZ"Ng-g-O4jԈAQ()Y0Fq{*7c19Ɨu(VSPgz;ƪSkD$gϳzJOZlbϓp]0u(^KEzѳܹSL8QL&qwh~`1p@1l0bLC 8!Bx ѼkNjXi&1aFEahj}hԨUU"y~H6]w]tm'9⋴4i xm[Fǎwƪ!bJ!~IFǎҞGpw׼_F]ڢQ=ͺN*>:=vz!^|Qb&Upp?~lbbȐ!/(11hѡKkٹ"avޞ-k,/.ZBx@xILA̸qM E߅K!qc!}T/b+jYh@1ZL=A9V4kLyb./$D -G=Z*.GsouԵEaٹ;c>ܾvZ,n;&IJJJxGBGi(?{-& ZJcJx$0pc>QaaOfe_Hbw5tƌZEPsrY{7݋<'o3t%}Af?֬&M۴e+۶&fjʕs99ǗRzR6;vՕ=9~aFAp0痭F{ؓ8My* {LZ__''Z੧dVZb&݆6Ɵ 2ש]!h{qjb*d~6w ~ &;RoW7E7zIV:\ւVTFFz+ 4`͚5CjW3RS?fӞG 0zw(ysx36&8LLoR Rr\GDə=[W 0ϼ?oAx9qXV,DY3rg]J{/MOzWJfj.-ԵEaٹ;HPPyeywE8\#mN|Q@U^qgtuBy6*  WNħ@?PX(Kau͊Wo]>RCzzܥKt|z\"ߕv][ۿĹG%mz E#Gt6mNJ ^x1H,b48vrsk( ٿdpSFaĿ?24{A*\HMh`֥\*,Z:2С2UV_sƻquX滌h5Dև̘q_,-S;WMdٳy7j~M6 ڵkGLL_^]kXw] (wkFWGY! СCBkzGD<( JaQApDNd«qQ1Rs~>FDb2h216uc4 L(#lɚ@f:weeqwh(WɑU/P^.+ 6L+ju04!yi0CL7='P\Q$ѣփKQK!(HW裿tְ6,;ȹUGIŮѕLnX6UVѬY3Zlɺu.RFc4 '/OxjqDӑGOs:-^^LƿP?ZR;wJ:\]zw??IJL&?>7 !0xf?7M{$uc xA Z{wW6}5KJQ9q0깊"ByE)=l0L~f38=3dԻ71Cq~ba}FFҎ'OGFKvHE0xigg٭l )aTGs}ӯ&pӪxڭCm\Nz2d׵ECm<܋\G^ԩşzJ~0::!=RH uju>4E~QYQI xhm*[Phzy!F4%4**U?.EYo ժ1Wln,+d14ZШkNdUl;*yjm9 :t`ǎvrrLϟ_^]kXw] h2ܲ\9";nz ?={̙3uiY{0G^ǩSٴ#&E!kgc19070sՕ* rs'LӤqq7NZRS6LF\tPV_z.M,r!B]Z.M_ϲ2NOs8N&i;f~-Bvv6?5B+R&171>3t Ǐ%3SR"w=g: CZaC/4>;]!xח5X"늚7b&?}OEQغu+mڴI&,Yf<`U~gCY7hh-}zMWS/FSB(iƅlFDe /W!dje!*J7Pn)ߙln[{[L%mc"CdVhr麆Ki׮_f]jXoXVVVƎ;رco6sc8}&CX܂;bJ^T$iBw~AZ`޼y4nWWW|M( @a1""h4ӖOt,I jS8'Oa4LJi$t*x衳VZpڵ2}-VtOC#7??d~]\ԥE߰ z_ϽEx]fؽڵ߿MСC%䑔oDD#5k /2P*-ɗ0`29 ٿ*BQ@13bj%yIHq>ʪ(xfl,Ϩsyz2.<҈)-ՏrTUٲU e :ɧ^2uWxns ZCdI]Z P34+bc91й[YH 6ݻw3x` 8]vR2NGlZ>B?0QSE4Ɔ^ͼ|:]YR+*X]!!8Lx7.?) Cu=XÆ:g\kAHOdC:~a@xڜ[F3<#G(R%-_ϰ0z՛F ]w!Et-$[LIL6 ٳkZ(,Ë$^_|E6mt)ouEfBfj2<ǹܶ6M#)kgяh"Zn#'O֭%-+b4 [&%%:\Y?g9)OwO)͏()@i?((9!!8ٸth~Φ6<)۲=k'CT+WʢYPEQˍcsfMnaWT=-j6P3}HEw>qcsfk'Kݥ4(>|#F O>lٲM(?сќ>MP^LG (9q27g*dWU%3##i{l恰0HMdm VY\7?9|8|O + =w2j˨ciTϩkv][ۿ}Ԍ…ǕV/#<nTʗ &ȩ9n?Kzz:3gΤq4jԈ_ZlSHJZP`Jb|Ml" ӿ{Sd2qKPű/'vwLDx^.QQ`2&뽯+++Yv-}AAǎt;0lde"<|&#FIIYJY>K*xV,~j6.ÃIDB"vN'jT gİ#+v WFS'N|Kǎ2pT:B/jWjߤ lی'nt;iǧuD7 qDBBBx'pvvٙGyfE@gŽO;F5DGO'/.";IfOMůvS^;]wm!T7Njݫ)_Ԯ,7RExuMl\n<'fAzN##RysY{]|5:t`֬Yj6(Mƾo3DFN!;VuRd!b^R`$ >J ߜ\,2;>5wOO eV|}f~|cƌC }Y8o<ֳTh6 sspͫo`A}EՎȸqÇy'hРNNN|z&̭*dqHJKcbD 煓'Y}Xjh^}UpFg{whjP2mChBggͬ|9Vk1YY;8q)<=P=]X, ŢPS@Dn `kE<AX ~8}cc%(FBdbP` 3bbؘETe5YRB:2`iڕSQ૯:ȑTJk%z}JOpACfIv~BZ 7h BAQ>}:M6QZjzϜ_TDB‡h͍GjꗔN<Ӊ!{#&A^<9*CRnagaRټTӶ`IJ Շ$'Kyuޮ⡇Օ+Vp|IصkyӦM;}Gƍo닫+Fb޽^֭[3dȐÍ7n)~tE+炻'Ňކ [7LWR~)۳n'FsssYr% @Av9s&~~~b`?pߏV JoĽ?YV|:SOQY IlYkyIn | ff\O&L?*͛eߑ;89yi6aAAAoXxm!VbT!R ?#=F zq+V B*ƩB!Ć ͛ERR;#me[$ncN(!$ ,-BHMvdKa7[R~)M!$!cӋ ncl%Hz?:,ɱ%{~5בs${f~~~9s&fϞ3f@Tڴ7QS]=K$0#!Zjբ@-jעH= Mx(=;~c;*xxL`pGqQ% R*T"Pãk׀J =jmiܳxAغHKNMc yod<^d~6_xظ=v#F0M?0RپwV-[`ݺuؽ{7 FٳgcΜ9HJJ5TV~=fx{G! `J'+f'sը=P5_f"U~0r[JS׋>^_ɐR:f 8}2ɬFf>|#GĺupBĉQQQg϶k駟bܹ1a@SS D|7b3fgΜWky{nL<~)z!PTx衇n:YW<};/,8;/˻_Ɖ+.YQY6|_@N.d bpI_1*++gĉ߫7j'*+z xw4YYTf@l˛r@-O3~c7*ࡰZljzn:65RVVS"i?A|VpMw6kf^&N޾}ǁgVO\qJK b``b?BCmN>-[૯™3g)S`Μ95kB%UUߣzjj~@K-H$>q j(<<614P^jBWP SA5LaPf(ft--8Ѐ F=$`R R A\{\+fR IDATtFM+HJ*뚱tR|\nʻ7l؀ŋȑ#:tUۻ.\@aa+WW^7rDFFbŊX|Yܸ8 8_ktXuJWiӀ 4fZD.|?*po{W0(̶;[|Az=:$EEE5k8TI䡺zGMjH? r0^t:ԉ˩Ak$"EaVV+) @܌f R*1GuoyE[;w@\#ϲ_Pq1'3Ĝs Zo3b0?|/dgxBlݺ_}<"BFF&Oɓ'c̘1Pةtp !ˆ^ xBʄ(f;-A[EzCz4lє)(r xnj4pXGZj5[+02Z3TCT*L zvOxeYebN嶬 'w=dXqqvs/4h}gDÖ-[}vTUU!,, &Muk>Q]CkeYR&hQ EԖGpMX g'TCULӭA$auIjh9Z LldHU(pwP.jwRi9PAz%0-g)) ot8ݦ>VF^@JѾk5-Tիرc;TUU t֥z$=D_k9u0s#"lod Aji>Cxxcg ܼy;v?~eeeȑ#L.++n&GCCC.jk '@ʂJ *JeRT -h4Sp\5k}%:#J(RID~ Fs3i4,kuJΩHU(p25YTyʄe()_?K2`v70_KuuLرv t:߿}~?~'M hj*C]!B]AןQ <v4z=.ܮi%89t(jjvg?-- aaaصkR7/K* ?0}Ä D۷cƌ1xb|mNq@6|z`*5w@;OOo[B\DFcQ",XXXp k` / .VVsQ P\\o?vލ( 7NA 5 Є㨭=(--(R jb zjShk@-+'!H+ 5 Ú~ڹ] 9 q o ݻw;R==--l<ŪU@M ~[%.V^ĺSF14r(x>bwL9ƕol*0ͬ{eCK "\pAtFvލZ( >#GĈ#0b۽3R_ `0א'A蔤Dz >F4n@֪ Og) ӱF|T$I>'x p t߳INٯ-PyNqS}"cVYH>-D㦊Kn.ofIӣGcׯ_Ǐ? ''0 LVVh}:pi 0`!X8wk8vh""xQP$zԹ߽3!gtn²U&N&L`xYLSSgdggèD"AjjXN9IIIgE=74GCC.XoLFϬ˓m.HCDh)o:Om*[u\҅LN6[#k] 9 !!!׿~J:@oֱ3l3cbkuװF|*ᅉ1+yf~xS!`nrrح;$;CR\\l ;;NNRSStddd`РAC>,\44cry"||ǧ?|| A .j-ЊAfK!d}ek[MǕ25ө`>rqaOwC aVY< Tb"ua!&]߸`fȑ8zlܺu зo_QFmn徹ji44䊺Vω=Ri`kC?3]d6'ƒX(:&-sT 4P.K!O~P!X]e˖aÆ ͊aIGEffU{yyyOB_|9VXa766iiiؾ}ktb V6? +ǏPg>CIm T^*LKYɳpw,j4޽&M8>}LɄ lH[2 pYY"BlZ}U&]75]gZ.v=i:O m>+54^n58dq2?c㎚v5L2Çǟ'g$+q][*-kǎaalȒ%@;co/nǶmW:cVY'dFf:TqjCgt:a@V)8PVʼn'p :u 'OٳgAt!%%)))HLL[7@3;4hl,ZzzA.7ftI `k FYF'UI"S2eplNId֗f?^N:gϊRf~!11$zZmAkڋh.B-Ngddqb!ۻݽKJtq^C ;Ȁ׎b[6l7sii3Nu~A&t*ˁ Lnc"4}\|:"""4ݿ$%%!22~G45]33䣩 9MFM@*wxNt(]}V^d|Gؼy3>3qԒ%K}5 ӟ8x vڅÇ)S0vX<(//{СCfݽ{v6rH,]0aϜڵͬa Ǵi  7M7ؖ _Z>waEg5麺}h*f;82BO 77WSz\.Gtx=&:]|Tf_朘<1Tp[QӮYfٳ(--E\\R숳m6g\etc#v-KAj3gԬ,*.:WJ=\ pkkѣl^ ZZ b!- TTTܹs3 b$%%!11IIIbt*hhl / ޑb&'@VvLkty GnZLS:T {Kb_>+ه@b`"#^# pyCCQL*e մ 7sPPP}2>>>zNLLDbb"m Mhl,6ӲV[CW3  }[]I׎UX|9mۆWbȐ!x饗0uT1΢E}۬h_vBUUzjc?GE`` N^{͢2;qDݻDҸݻ1n8eW] Cpxݬ8СaZ-^9(9WsШkx8Ce$[Qب#GذֽaYVxۙBDvEY}9q2Aзo_eullM焈RnQF_zx{Gլo ZM5j8 h/9APd,8V#te%5c;VWAA馊=NW*/6t"?ȌĐ!ȌthlV3gL}&@L Mv{rlCp%-8Z r &45]AccIk(Fcc {,֗tLkܑSc];vp45jwZW՗a~[ ABFDsjQΞ5tnϤM\\/_sAA\">2 111:88^ Vii32@+Q4k1iz$&^h5ctD}s=ϬΈȀ/ڢӱck}&ճ1.7nܰ(ֶn(f:nO>6wvhl,mrq=!9YuGM|#B?:kر-aeVy1~oD /;eq}bH"%8C"9(١[Z-q p"p;^&g$9UZC>ǣ*++QPP"X,TWWV5}uqxxyy!""Bב9sfvsq* b!?0izp6ʞފΠÅ 8~8N8e'qlJO'D$&:czLXV_no^Fe{Yss3JKKQTTdWʕ+#bV9rt3 rt]!1:$٬y`AL~ ȫ3 WꮈqeHH@b`"TEڭȴ0'ĘRLHdyb+4 z*]ׯ ׯ_7 eeeCrSi0V^r 5\ii%iѷreUsȫdPyzlT"E,tэI[M2f L۵l|~Fƍr动gk‰'a5{8ϊ 6 ӨGٰۖՃ MU/'Ĭ6A21 ݺ]ƲWfΈ5MGF2Vl`h/a…Xf4\pC:H$ ++ xѶ-IK\6XӦAO`ǀINf!)la/R%\djU1hhŰ~1F*2+45*Ki)~7mX |ʜˮdY pM;?-sL3L!&+^՗a(uL}| 7 p ճuYIm==_`Yill'<=9׿4lLiԵLJi:)[[m//kҵA* QQvjjuoeuX 455A%EG,(i~f:_S2ӧٱ\kT`)5wZy#õk&M߸:WobZ6 `X9z?>Q,y lgA摟^ˆ >Sc&geO@zu\fz}9MN*"TeB FOQ2 a 2TVc|<ֿC{z9=4X ݨ| Ӓ6ۈy#C[=_'cXXR\ޮ۶S]-tXo0=moVIF{z9=1=FRV>uHntXݞF]#]ŵ:ۖsơF=M00]˃- _o_ ``m=s&׿Z=:D ìme`~PTϰ0Ć!6" c&"447\]r7nrez q^[$^ @@bR1PyeC-E"a. Y8piuPvlD0!04 auVZ-TZpL ȿJM%*4eA#Zfs<~~-E,lea,?Sx.)aNݬ HXmtFn+YXCC7%556k,+&}(8y2nշL*euN ƜZ l۟j ,ۿV-M}mU` TH 【!@rXA*m*bUjbGmJjJp$niol\{[)Xq[TȲ5*I\y9p<;VV4"9(H|@DU׷-alTZ[*U(.B ĭRaȌtގKPX``z]Ʋ:7m\^n٨(ٷXV" 0~@Hi¢n7斨kciZs Սtd,i}N51xlVWJSu˴uMe`,~~#Dv VQ*E55iAZ|]XВND&cَ1I3-\Y>܈R*-F]&]Gܦk z2iB}8p\rrڨue%sXq==۔^~~CDsTaLZ6ZI$fet[m'&voNO@pRc``Klj55s v42ى`c͍K8ڞMeyyl$CD@k]J%[5`:7vt:V+mvLzK |J(VVOP2}H$$ (z=`_WB}X[>kMothZƞwck_7nK8NJMò~ --LtmKuul9FC<߿ɉo[JMM%4iܹ!ۆz)99iƌt1q=JӧO`JNNKF_LѣGӦMƻy&͛7bcc)""̙C/_yǏ'tq5d[Ww{N{g<΀kڒ4{?ut(\e5/MӮS"͞=|||7ߤ;vܹsI*җ_~iӮ F{֭[iԩP((;;,CLJON۶mw}BBB(++t:Y_A+W;wҳ>K [oe֭[@ɴi&Uaq=k֬l piJ״4{?޵t(\j^ֻ] 9 ӧO%K8+9!Ahf'L@i' {n\cc#%''wmwԯ_?jjj$}g⹫WT*+V?`j⹿/aV1uҥK۽o=L5&rgۻ_Kj^ֻ] 0aΝ*˽:ƍデ~ cǎٴń sޘ;w.v܉֍uwGWM&NlܸQN5kGo~xYzwԴ4dϞ=Jt4ct42bgalq?~nm =zt,\ӝY\A׎>v+CO($** eeeClJc{q^#**ʬHUUz7((2̡δi"66֢;hllDQQMݷt{+=Y׎5k8jxqA\r}رc /@&u(D8pf`6vp󹹹8ӧOcqcAS__1'>>Oz}Jeu͛Fݷ 5 543:\=5R8k9jJHH ALJFArADPzG!AhÆ 9@&L4} @{{}Կ%vM .vyzzʕ+,X@!!!f,쬪"ZlӽpMsMsz/\Mp9 O<d2ھ}F۷L&'|iΙ3 7У>JW_q/^LRJKKs:(44֬YC[liӦRkdggBӧ֭[ޣ>|8z?iv7-JJJ2۴,,, ;;p8״ iNot%Ns@'SO=EIIINS~;JMM%4i}fq.\HJJJΫjz)))hƌnsQ>}:QRR=3nBSff&ѣ?ϟO111N͊Juu5UWW98; ״9\Ӝ׿%\ /{=<#}x'QWWKjjjflܸ~rXp!q9}YY>#KFEE!>>CxxxwV tvNnSw=M4[n" :FmqСCu)ÃƏO˖-UVѪUhٲe4~x𠤤$Fuu5orcuSSS^9F/yzz R(>>HT EկzҸ~:K}Gw-]^{5*++ipM;״spw{"tGwM;#ք)v%怼$=i&*((?y}]g]?>%&&RAAAq.]DcY|ٌoyxx˩"Zbyxxo읕2Ʈkqz;Bowkit&HOҵ+4WIRC<==׿3/|`7|@111;1v~Сb b dn41v5\ӎ54]4z[H5D=S׮&t%/ }|+DDD͛ۼy3[lY{___ڹs]응32Ʈkqzۻ;Bowkit&ݞڕ8cV\.֭[yᥗ^¼yK(d2k;FiYSSCr4559>55;vksN8{go#F ??n … 3gbԨQ03dg\Ga0pM MK._ǦMh>S*x / !!KM}vbb"d2ߡ0k֬.~g??񏨮Q/z˗瞳{]O7kit{;׿Ҵeug{] 9 $ }4 ϟիW#%%n3h۳w4c8gT i5ݻpeMwӚڕpaq.\Khjkk={`ܸq=x Μ9A0l0dffڌ/// ~- &Xx3vxu:;vѣa{FAg>Rintq]Mwz9Njwޡs9#R$JEJjrv^yzWf̘a1Fu޼y-Z-=$J),,LL_&~ĈTWWg;;\.whwfڲe ?XseZhvjjjHڻwoq:Dv2;'Pbb"I$H$J}kܹ}Qz(77OӦM#TJ{9N51랬&r ]sM[⮺v5BDPT1a'E=DHu]onn'|iӦݫׯ7^z K,׿ƿosR*CCC_zA0:W_}EݝGe˖+**AQHH:uƎKQQQe)vGU(V׻_nZM#55}]IZfY~RSS-Qj;Fo47h#pw_׽]D=O׮SvBC.o߾3<{,pLDEEa׿_~ƍŋ2d>7o_ 99|||<.]$/,,?,ŋwvw֝;w{1;ݻw#::'Oɓ'Mw޽o~{ > -Z$==hZĻz*J4 7N}b,8˗#11LHH˱o߾vt%\7kp]Mw4z] gy2?{øq=Mke%77|||hTPP@OO?4}SO=Ezj +WҀhtY:u*eeeQzz:]rJJJ(55^}U Aׯjw-2d?OMQQM2 GZ{=?MPdd$=V/~A=3d2;wYzy ڼyshdn7^W5m&r]Mws_׽]D=O׮Nټy3$"/(88A LfE5 ٳgU<AXRՔNI$JY'OL ,hUUUQffʅ=cu'L@ ѣ'@H$EQQQ$_~% @4tPu]LBvaa -&r]sMsNiu5MuݕpŨ"jll^}Uz)##hɓ'm^pV^M(Bz)==>ڷo_SOBPU*-].]d^#LFolƱejDD_~K?C%%%6W^M4fOhÆ !_-lQAD=C\GS&e5Qi+2CFFT*xضm/^S/qQjs]FZ-|8w.\hL-j5._ N'޿q0 E߾}ƟΥKcӦMh4f)J1X[흑kFiiiZUUU4{l򗿈v{' wwUMwEwkz]N\pR)KFK'9sW_o߾K,qHc˖-Xp!ꫯ/㷿-?tއ+h]Yݚpw{pBs=Xg0(((@PPx-HɓV3իWC*bŊ1cއ+h]Yݚpw{n: WZc͚5v) {3҈@^^Njʕ+!VZGڽ3&U5{ݭ wz]N444C${g`\x999Yz5/_Az.4\W5uWrʕ} icǎmwܸqPThjj:,q wݭ wp8p|#Bp8sp8ùcpp81p8pp8p8w 26lDb5w~j5BCCV\ DYD"EŐH$x׭^^D"Aiiiqo~!N55YpMsM::}ٰaov.22[o\yY|R~z4;yft:xzzZݍ;Xp!~_!$$ĩis8΂kq9״pM,mvkg?ƍqV5k׮Ŝ9s%u;?"""׿\)pM;4vi; ={@"?NJ+0x`( \|p1̜9]w݅Ǐ[~3ڵkڶ;h4x'ŋq||~>>>xgЧO`˖-x1dKo5 GVV ;;'OFxx8VZFEcbݺu:u*`ݺuɓ-Z\z`0DNNٹ|,Yfӡjq L0u9kkӳW~zjصk @IIIf6Z"##iРAf[ZZ(((Ə/0arRJH$$H+V t-ڰad2&NG? -ZH+**jD"Myy9SZZ֚}v5z-.s,{i& 0윱r̙fϞ=2h5k>СC0aYkIPPpZFII Νk>|A} J3gؼ_6kpM5ݳH/e2dٹ={Fev޸޲e˰l2A@YY{w N/-BICMA T" *4DDk 664sCIA Q ZKDA!Q!~ZZZP*Ӽr\8>>N! !I^/z{{?nWUm@ |>TmhL%5f3MfLc͇R\B$~|Bkk+ڪv`'''~ B@$\^^~YO(B"9677빕LMMa3LS3c՘}ippA8,8<<#BSU:6ۍP({ H&f:ٱ04 3L7@KX[[rpww3 "ׇEb18N\]]},ӓ oؿNnmmayy@NJ*rcD͊f\ifpH|>dYtvv"c||rzvLpT KKKTuD333X,j%ޝT+{qqHӐe({yy*aZN"=0ӯi2 f3mbE?ے}"p8Rd@UIӊB5L 3Mz jnnb[Z_(fggaٌ.1DLw3 Z!nnn vGGGF@pi"saIO&>,"""""  DDDDD`: IENDB`PyBDSF-1.10.1/doc/source/colourcorr_full.png000066400000000000000000004556131420247104600206250ustar00rootroot00000000000000PNG  IHDR XvpsBIT|d pHYsaa?i IDATxyXU> 289bNWMRqY63i6٭9?gr9" (܈y:PϷ!n_za%&Y7n0rH6nH8q"}˼tޝb'YI޽(:k,5==][i&UQͭLӷo_UєI[j*UQ3*ݻ\jԨڤIҝğRE:tjjj&%%g…(aTEQT??}||TEQԀ|`UQ׷Ly-XYnXX%+;*>|8>AAA9p9&M8ǎSEQ]]]K(ςU~޹sGOՄ?VUEQw}qI~V.r DFFjo=xW^yVZaiiI>}8~x3>>f̘vۨQhҤ G9%%%oK.gϞXXXеkW\ԯ_?!yݷo (,_EQXlYgtЁPΜ9JJQNJrr26lȱ-33:wLٷ zEEE1uEr7۷}+eaܸqy7rQZٟՂ^ $?sjioo;#ErSSSyGrHwlܸnݺѼysBCCׯK+<<-[9_~8p Gmhݺ5|A**˗/UVx{{yƎc_777ߵe1119r$vss+VLի4mڔm>|p:Tm%K= WQ~A:u*ձc<͜9EQ000ظLkYZKKKFIHHЖ?|-[0l0 ,ȕ ,EQ055-c ,)?{9]Wr(KBÇoSvm8q"K,a}/i߾=5)ƪ0EQ:taaaԭ[Ⱥƍ0a@u8r-ZPV-6z=VXX;v(V|?SwQFy۰aC ( Gl|t֭cU?K.d]155ۛ>6oNDDDۂre_At|?n}7r㏼<}HΟ?\eua,X@\\#Go[ϥ2~?hg%Qÿ7oݻwsl{jhh6m4:E}i4\c۵k*~9anٲE[oذa>}Nm_~(:p@m٭[TEQԑ#Gjˆ6h@ݵk(zAUUU566VUE0`@v׬YS֭[[nUEQnj9ݻW;V0%mW=vz}5..NS *ZXX䈷05R5FFF3TUU{5jЎY͞Ǒ 2i$UQ*9#ݪy)9 GQUUU7oo^}jfTU8ƘUUQ{jjjjII~VTUU]~(ڼys5%%$?+UzjIڵرAƍYWFF&Lц,]^}UZnͨQxtr 8ȺZaÆ4iD{5=33 ۷/=zcǎǧO}1|\\\ʊɓ'w^GbbbogkԨ[gϞ@zz:SN-R5k>u/^̚5kxY|yAHf-ɓ'sEΜ9ïŋ UȚg7h@mL>_Heԩdzm6xKC- 7o;w52mĉzjV^AUayx5F{ƦgS344OOO ٿKqH~7RAJ;N5[&Mc%,zK䟨/Gk׮clcժU9rL_O>!!!#G`aasw֭<./ʗdYhRU wO?-q[E¤IhԨw֎3n$w+Ou2h ~' uq-3h RSS9p-[,U63?; :R+1uQN'::n߾[o ޲QF7p@:v숗5j`߾}DEEK/i'_}ӳgrmݻ;vбcG\]] СCԯ_:Ϙ[ܶ6mҥKqssQFh4CTT0f^b_?C=/b(3!!!ϷʝK.ͱo||<'N~g%^@$l۱FU<PNyy)f9 YYGSID>0-[W^ѣ+V`yֹtP\R;˴lْ3foY/KRzGnݺjժȱG͚5ٺu+~)G`` L0?P{:s-m[]C(\xO/9͛7vݛ?7o'Oxiٲ% 4gϖs%'++WK=ۛkגZѡ )DU!XF,^-[vZشiÇ/5kr=*ǿO:;}~ &&srN|||ؿ?֭$?(^N>*(wqqQ۴iS`]UQٳgj˖-էOjˎ=*nڴD !ݻn߾֨QC6lXu'UQرcڲTEA:T!D ,Z(WjWCCC5%%bBj5+ ƌLJWr̙BP 2s=<75kԖҨQ#JB+Ť4h@ǎ @ƍqqqі1vX_"enݺ(:W!DS: 8::Z9{!~L^ƍ&2227o*ڵUm۶DDDJHHҥKyޟEDD乏i!9FoBtt4~~~l޼7xZ|ʩVs@\9 Ktttuիܹs޽;m۶}v˅ hܸq6Z֖Ǐ{X8@ƍsu(K)))DFF2`r]P&O ܹs /::^z*@~sH$GT- \+}ՖgO+=?Bꀔƀ0`LJ޽{aÆ"S38 g y+:R;w.;wdʕhѢ}KxQkU%G͛1O?VZ{n~mnܸG}еꚟeZu@퉉U=޾Xٓ6m;Flll)M4>e̙3Y|y)Klz׮]cܸq\epB>c,Y«ZgsgM*ʲ%wq%"##iР ‚%K0mڴ\ s~u{%6}=ꞟeZu@ %55cccmy M6-QڤIE… 6,~.]7KvLZٹDESU<yP_:͚5ŋ/](yϚUulPsL816}ϲnĦ 7?BCrr27nԖJ@@m۶SNj/$$+W/ngg駟x왶<((\_BYh̟?yk˞>}ʆ 4hP!tQF|۶m888TDXB2Rt҅aÆ1}thѢ֭ĉlڴIߔ)S $""B%A~hӦ }vv؁%K.qyСC6mcΜ9tڵH ! _0|<==9g/&W.1.]0zh/^-+Wݻ\d޽ ~~~ܹsgggCdffc'''֭[۷IKKqƌ3yڽ{w7o'OʊѣGgɣ(wFQǾ}rlS \600رc;,[xvJpppBL޽pvbϞ=|xxxzjAE((j100`,^8}Q_8;wHƎU<+cǎirĄ+VuXV]>kVY'YZnM֭5kVefgM_c--tܹstԉӧҭ\'vY_ ]Zeg֝[3Q~$?KO~B_+:!DaΟ!嗊@Q衰@Q7*:!D~ΝBQ衰09B/H JM B;D~BG: BڵъBQ!EЊBs.S'8rBD: zE bc֭B]29u +:!D~]$==ٳg䄥%nnn8p̝;FSm...h4\A"Da?~{GE[?3f͢C8880elBQFB?ٵϞ"?ծ2j(+L뱳ˋ۷0>sP%}5kӧs/_^۶Jx8GCډeժU1|p|񯂃իAAAL6˗ѣ;wn7z;;">3tfΝL8OOObbb7oGLAә4iaaa_Zڵk4r 9DMQ5nܘXzudff~z6m ȑ#p,^;JD}'@gH@@&&&3&GW^̙3tR>|ȢE QayH9K&G*nխ[5kbaaښzZmg\:&NP/}: hтuq 6mڤoʔ)uԡO>ګS9dѰaCnܸM8~8#Fã8;[;z'O:qȝx!r۷oO<ѣG\r-[0x`jժ+{=ƍ;dff(Tկ_F GGG^y":ƆȨ"/:nql޼EQy& 63qttdϞ=s= Ė-[ }@zXk=o M*0uԢUxOqqrMhҤBKxW:߿ж1YfEzRVA ϜKNFK9qzTM Q%v]vk׮|>n:YHIHȵkЦMBӧt֍֭[RF=OИ8q(aBG*5쫘¯ҷQ_BB+P(B蕪m>D"Vc~qcjpIIIڳ'DG3$ 8r\Z !ʉqtt$557xӧcee~|l2"##uhy($]vm0aBE&DU\v 7 g>Jqk\ކh(iBT7Z jfMwZB 2k,nݺżyBb޼yܺu30tGWX_VQT\ C!u%}dpuEٿf: /<!u@Mq766fڴiQp7'i:׮AllE&DU\_'R a qtaz>!xzBh(MatuOPdd$!D!gǏvG8~nґ']{S YWX 1YYǏy߿?h4|}}:t(Ԯ]m۲jժB%8;#E O4:KԔ=qqYðã;owU'ꫯ2eʔb˨Qꫯ2e ׯ///o^6ϱCQ\O:E߾}gd͸Q?'%A~p&ND?+#)\eժU1|p<1?~-X[[W_{n^"=*5eKLBN\ϙX[]JQ}u~Fo nfx}t6} l!!${ __cooϜ9s}6K?Ν;8q"0o<폘3i$^{5ˆ˵χ~;wf͚4o777mƨQ #|eR$DUR]YUc120fHIikB w@͚5ɓ'n# ƌLJWr̙BXt)>dѢEyVw[65" H24֭1 u;\a_Y_wҥKh4;%:II 0n۴yOCeYKQP]\ *8#pq#j؋+ *M`ܸqݻP^~b ёZj(Ϟq_zŋr|Wey&Ү]\ڶmKDDDq25pBB@y逈\ZgϞQFѭ[7LMMiժqIndݥ4lLr2wB跊Abm͞8TOO ap}=B4l##e(JzFGGcccV=?L<#G2p{tuphMH , !JYriøqҥ 6lu̟?7x!Ev NvNX.G᱇xY[s35$%ӰI~?iHBHdd$۷UޱcG_^ e/$<<˗\ fn4.u Bψg8Nb"\R9}eȚ˕ٳoxٺu+C 7o.)r<.v0ݺIDT?ߗ/_fԨQ4k ZhE |=jaj`SSpt߰5%!!8! !ʀOBϏ9ŪcooOLLLh%**l2 y!#&##D066ֶDz<v<4J&&&433?GbpeÆ lذ!GYgX$KޞaÆ(1b;w888[?TC=Cun^U:hi&m`ԭ[W{ £]xY;.==Qv37eˏY.QXB2w__b?~utt$44T.]iӦy֋ 553f0cƌ\---9s&_|M4AQ.\ͥK]7= ͛>ҋ7uuڴ"Ǝرcs;wN:q3Ky\~=LyaCO΃8 h޼UUEhiw~'%%ꫯ2j(֬Y-wqq)yWsbw5ڎ_N'6_(cY:߆+b%(#z)|b 6n܈ڶm}ǎ Q*3g$))  ;;;O?|}VPPQQQ|ƙt2 [2MR/dEJ;[(˥5ydy[nFtر͒ cɡ4^pvY}jN:6o<:t(ӦM޽{̙3]iē[XNf&'ڷ7恘 磹} !"D+\ζo> :^zGqMYv-{e֬Yx'o=XЯ]K1C ).IerBgbddDll,SLܹs1l0>\O:}q*Ɍ=IIwqαޚcXxCK QnM5l޼z ???^~eٓcTff&>CQkʥ{x!$#B7:'O so.][6c3܆q 1"<%Ad$3-03WiB"л9 NNN9Ȳ'K9PUEQ [Y17BU\~0V'tMF!{{05&ZaNx#[~߿[Q'OF5hР"Xqq{hÐ׬CRFLhGrZ2"1bDVYuYǏ{ѿlmmh4(shprr*O\Ĩ]*5lj@},,8zQ#8QGx!1cTa׮%DP]Ҳ?foz5;bbcx}t31u*8o4T!-ܹ???>3mÇٳg>|m5)S~zɉ˗~|||8~8{fǎo֬O*5u&.n7-Q4=ACCխ ff;s .^dXܹbBLyrll,V"--Ç%{hXX9vvvŪp?-w)'&Lx%n>]!ðDV]w_/`m=$qlHxSs ,-oy"ѩ05*D깍7͛GݺuSՈbuiUQ?GڦMbw}D8p`}NNNnٳ*9/1G.ROtIu~P>v'ٳguv̲忊UEQ}}}U/--MС:sLťм~~z?zFʱcSTԌj/zEkU54TҜn*"GK<󻨲37T<خ;wY 6 V#DNPyㆪZX T˥;QNUՆ U5=]g!J>; GfѢEL0WWWn޼ÇiҤI Ą1c(ի9sXթSsssrmSK1&ܼ3 {zx'N0Ɔl1cয় #ćܕe.UImҥ<|E >)vM߿,uܻwoKmƿ/֭˜9s9rd z'1흁RS,(Fua&WM_3K+##ɓ'3rHX5k6Ȩ"Ax}ԩSyW 0c;v _߷LSblj xx jn,^zw't!Ϲ_Ξ={JTҥKElnbx= IDAT[n+*pÃ1v-\&7Y='xݲ=!*>wd79|IHہv3=V޽ˬ޽ն-|5OcQ|%G?tՊu@֬YSnm/uچ#]ta8::뛣^{ ???Μ9Sh_~aذ$'[ѼO<_guL w||hlrYCc>cߟuWYl6l`_ya˖-P^Abb"FFFƂ h۶E`Qg8ij4g3b1f {nmk&KDVQ9ZߐcYp!uk/Lᓸ13j7eEt4?޿+o Ӧ1eԭ]1|^ 3gB\Zл!XёpRSSs_t M=FΝѣG=W ~m6/]/jPVVг'1bc]s?ɢ"cDzk׮>* 553f`ee} [=W*ݻo-\.L]pRWPQFE{ XYi^.'{`JGsotu""I̝;uŦM|yyyشiիKM6pppӱi&\xG7/_^oĉPSSCy8K.ӧqU,[ ]tAJJ+/ݼy3_;w[n8p={9mmmqeH nJ8С?ƴ΢tgΔ""Jyj%.]+Ν;x\]]|Գ>:wեKCKK ;wFzz_XۓwPH_FF8 E(""oXz?mڴ[X[Ç\.Ǚ3`d4P´Kih Ldd5臝;0~{6DdOdMN@֮X,SNԉ۷cTZ&:uP"P"P*KNϯ,Ӈ-Z`AAe20!Zcv ÃdD)Μqq7ʵb;ej ַL&D"SJ]f Nv֍ݻwgR+e20%e1- YY=ټ9?=G8PG3}#SYtdddp͚55R)R)iggUV1##_Mё))(Iaa7 ׯߑ~찷o'UTȤnHecz4/-[\Nm//fdϞdǎsp/\e͚YNU_@\]]K]ͮ\ TJgJ$FG[v\dm~vX|OXs Z52<̏/SUYt[^ٳ CVVgb…ׯ,bcAܹs TIW1{Qܾ=Шw/[8vm pdEBDDSr]Ao]ȓ|B8g`uظ1?}:U #88e޽mX\]hRR\QkA-dze"' --q,) 1:M@ej2=800/_ON~h6[!"P^:fϞ]vҥK6lкukܹse#2"0v,$'_~pqqACsڽ2D Qk0fMhI+Lo{ATA,[9&UfĵkBڵk̰feyCSmtu3.pty C?JܺDFVtKDD>M& n߾\sTf 0aibf99+F`gÑ'Ciԫ'N?ѽ{wlܸo߆RٳZvY8t0CjjCHZHNqEz.*O 1#gH@W5&3`'ƍ#4GorQۿr;(nH% ,L/H jD5jHq%- իr "2"`6ի$ Ξva_CddV$ĉ@Bj~:8WSI$""ЧOܻwJmq$,&tttp;#9$jZZU(-D۵ ZLӔp}z k7nW|ƊTszqR |8 8AGKaC]N5/;8蔦:A >EDD><1:w\J n)3p<) ͚_|! r d2tBf&pREDD}3 3 c11&  j%8fbM11PLíH j<Gy}DD>bc8t % ]a_==΃J5kboB{8Gp0]ѭVA ?RikHȩv Mv)  'q(!ApF?_tACdd$.]/R電/_v];!N¡Ϟ=CTTTt&A@ V:Яu+XD""2ҳ'nnn04 )S0 EE8 >1 !0 rh X[#"Q0I\+W<``]8!RϧT1;#UUt&q0 #_eEDD^eԨQXd N>˗/G[&!!4-Omt w 4XβDs穣Kܻz1l^&:T"""qR mX!!!Djf(ƈfZ蠧?} Ē%žw )#zg&&ЪUhX` ѿ|9$jlKKfe֭Xl:tυX HHlHFQx $!HpƍT叆`g?C zRRΡ?!&19>}ڡ~31qqvJDƦX8[%̧=;˗I5k`B0bƢۈ/POSšĉ@Ϟ螨 33~p?#F~~@6*<=|̟?G]Uc[ž{vzTu#m6>FZ#6v |9bǢ|+4†XΘ̞ /|~2fkUKcz<T [n!!! R 'b,Z͛7w+mquDVpBܾ}ѷo_QF>}:KnaÄ۷9@AX 51*vtFv uT'Œ% @@@n-"R.srr0o< &&&JXlYʞ:u Æ 5tuuѻwoر*_в k͛ORS{ df!7 p2966@ZPٷ[G1pp5WAD6ED&}9 )y)pꎱc[cS\\\`e bb6?`!#[r2FjfĄǣi ̾<K$re7CDSR@VZB>})))Fjj*N:"\z :7oĉSSS 0nnno-͛cӦM|2Ǝ ///>>>ҥ sɓ'ѵkW(JBbE6dg7T S"YP8da@bGb)-`ݐ4hwGyڵknnnԩ~W4k ,SaÀsڵQF%۰.>4jk fk ׬ %IIV1HOհKXX'(T."R(}+G&e]I0rHBd٨9&b6`1 ԰)%ؼv *g&@|SDD>YXѣMϦMF[[2KD}޵kW6mڴϗD--->}QF,,,,Iq% O8fs̨T*9r$٬jժqͼ87 o2P>!d2$$&u}HwMDy] (Z;)))H$\lY'$$#LJg~cv[겔!!\] ؘ)\Ij,L*7/DBֻZv-r^=rРl'迡]ZJlIffCIZ@WWW%K/^,`<ʤ2lOaabZQٿ?ieE~bJF#>JD*!UIJ;: 00L8pZZZ>|+cǎǏ_CCÒD\z#GDjJmmmQvm8pvm <|{%x33oj0 h t^ >#"/F_?~ȑ5/ejCkﰌ:LMM־}{ Ӛ_B'NoU0hTbn|xݻ{b"dŋ7725CDRP.3d 4 'hƎڵ+/_ÒUZ1GcZ 3/$%Va}HIlp(Pn_T%6o6o ++2CSS͛@:Jr~~~={6rrr0yA-ZGf͚!,,06ѻlrʯ@*rS-PUÉbfό :ڵkG׷x}Js 㐪a@a$qZ z 6v k[c1jjŒ̈́ SgYÒKHԪ%:ΉT Z\GGG`֬Y̯&UG1t(\,`j:/v 3,PS3bfH^vnGƍ+XPlx#4XDR=|8 \I_NBr^2>;qㄉf;=~gحP & ?ZX"Y.Ǫ(`9K:-6~\kҥ<O N֯_O===J$K__k׮-s]͚5cID7P޽{[laill̳gϖ|JD›7o㩯ƺ_)lվlcۆmu.ԩ옚z}LFdLip&bcIy5 <43vd]9r{@ SY4o(O}}_$;{02R tv&cp=J%404/x0>'[Rd}/9zt) RQ/BSEE...nNm v-I/fbqd`VV 'Rgc" @̜;a7';Jg" US^.-YXH;@8S{wK!ѣiff\>>^^,*Ja`@`^q1c`  ٷ/Y6ٙl9;O&ǍM`>+z KЩS' >:u{S~}x?nݺeO*b Dvv6GggQL88۰W\HM=PX̰@{ ,%n` 34 +lW (!0><^|>?$1i$8p{ň#J]UGjȃ#:^U`b2CBb1aNU+`zn'D͚Un2| Eu%螞@Xl2$''c۶m R|Px3;6wf&<=>~q;6O߁VQ prrB^ШQ#}p1@TTƍ>ň#P(©'0l)k-[|L 5Ԅ v;ssxgfa׮@۶\=R?A5CjBSL{n;LT00 >uha=~ae IDATc+`9'M&jkcg\|9\+ ·b|aŋrjH9P &OfA1[89zu`zaqXf `a111[n5Q5051/, j ^֡;``w}ȑw߉)5ViiiIDBkkkJ$宩Sr{y4ܸq#/\#GRMM-S&L*J?ԩSr ضm[JR=z{P[[}3gk.]v2(Y6$`ea!Y:x1D}}}2<|9==5YTYetrz{sFH) K'O7ڗpo ."aae6'^>.-ŋyI:;;S"pذa$⨩E0Z [cKL)*[#27W8PPm{,gf&Y.٦ _G|T%}VV*d477g@@r+/#G~e-bfXzuv֍W\y%ϸq(JYn:mۖTWW5O>422b 8}tJкd~>I¨(O6h@޻wx%S+Kdυ/^PM {V4 8elil9k 'M*D>>˳R޽:::oZ B6nL*jWu B߾B PKK||.tYX{=m3<OdJ:%Y.j;wΛ+RɩJTHZJJRq*>8%_hO/"7{%rNs3׮%꓉_KVTr񟋩Z|oOHEUFGobL!dnfRI,̨n"STtE*)o}P__}cSzN`XZ]]+Wȴ4V^3f`aa==5#ŧRT{a\NEZ[0;NHMڵ_ȧKUgeRdggaÆ,$$bʓ?6ѽ;``<)… qU?(*JDbQX|oݓ!ZF-z 1,ZoAOX+'(mj> zÆ tj&M`а0lnmEX|gnB\IKbc;2̝ 8;XS`kk={e=hزÚ>@Nܹ͛?yP1G+f`G+*²H`V &6l‰O O1c%zƌPy=zgȑ#ڵkhҤG~b4$=` ,85ׯիWCK z@&bb9fgzz:blڄe]!2#'B=BGD:UiGy;!!FFFܱcIrرe!qCCx/} 945%m۶Q"Ç ^^z,(cދO}N\b… $*,)OŘrjAnnώg_k͗U+~}aEjMge@rssiffƳgV|4^Q*Ё|CRzq™ ~]xݽKfggȈ3f̠BQ۷-8<̡ 2&I`T~>5== 2'GXkvtdxz8Ֆq B.]ZX|ͧWv 'Ox! H`Nd~B5kְZjalNd=aЗJ߇Pˋ~ SN:;댙]͡CIcc2)b/*wvv6MMM?2==1butt{ "6%Jt'V[Q!)!$k PM6enHϞ}GOOM>enH.=5<23iEE4搇믿N?~LpJI nj`T}Vf*455Q\\\яR1H$c$b\m|XY7:::9s&كtXZBbBn-Vkebb89Nd&&~9kעn,,X\ WtE>5>Y-ԴcѰ<N MMMo0555#l #Z:֩?GDӦXy l ̙hW)} )) + Kcǎ!77ptt,{N%'\j^6.ceXys%ov`&Tt ( F5,\;EcǀǏ3f@UU6m$HٖBT̫U X& j.b-&MXh0"'euu!Бá#ai ,_aƌ?siHHpV;%tAڵ;. !jݩS$[M롮-[ݻWtED^C 2 %L&C޽/ekWY3`hiaSM>;MVvvh߾=.\DMFNN "#LK O!g #}5hbS\]?DD66?Ά rҤItwwgRRSSS_ʊ\.… _9 ,ʡCN:a^}v#o.]^{rߗǮ.98_|Al-ڳPO6L2w\1##͛˳dDT(S\32'#2^K_4$ }}-k֔ޞ"U|\Z?Ȟ={ؘNNN.éSaÆ466f߾}߹gvwOҙ3rps!DMMM.]CA88*l^Q) NY]0.3t9}LnQ.{r2!BJЉȋ'`yz119n\%RŨJ7n\OB;99C$ɐV[Q?~&I-8 , o߾MRNlFL"c >ɡ aW(sj8,ZZ1HQYYs魟K$,]ݹs_}1nܸt[[[$''Ço,SSW|}}ѡC̚5 7n,Iڵ+\F@j /b k$ ̱6Ll6ZNN=}4""">99h)^ G8}wt =i#?u\];© -[5j^^J RExwZ;011~w?~8F7nk׮BhDž ^[v۾]pΈ{qID'U0iWza͚5kƍ@9 wE 5QS}t EEn jݺ`` N8/>c&[ew6H%ckP.-ّ#ٳX 7ѴGȏ-~MK.Ž{aj: D`@(hWr1̱:kk` ]l͸gРC`4<=-,"@UgG@̙3LOO/NJmmm归o>J$5jpu͚҅5+s]oQϟOw;HܳGd|R)n;d736aI<-.z6$T]ʀzz n\&T>Myj$''io߾GҥK)JpS[Zlv-%k/H=dm433cAAK?T*\IT ʢ>>d|v<q!T(у"33l**Bea.-RI#"ɜZfG$'O~rSSɈV^ R+rNeP̓<'In&d2: qw4!72#Se O< !!!u0ԯ_7o^={dhxFFFB-n:{tw70f P.l`#F`z.O$#F:ի"l֬BBggg4 cƠmL,\#-aaamA<pvFkVh`CM X8uJ?>pXYAN}dd܀,Kh5BP|q5kbiD[]5UcG8>t]@Z`HY~' shiccz瞝\ Pvm۷nnnؾ};&Ȩ?>.7D#~o-[f͚Xx1 ~ިЩ쌁B_]l.> ܻ,XQQQpqqՏ̼s0m N>uUVGE!I!…d?aj4I)"RVS. D{ __m9GLV I''QF2d֮] aa Q#ơH:(P*2*J,]MbD~q:Ԍbf c!"RV*KEڂo1`.ςa>.n[3f?Q= 0j)!Hm F_=BXZÀ;T֮xߴvMܳ')EDgP;ݺuÒ%KJ1\\\p֭7>֣T*1qDܿO+X.]oŤIw^\rg ĉЎOf+W wfի1jCFhtآoحifHLĒpݴ GG4~+lW`oh]lл7g0) YVhk ԩ݋sv?AA… ѪU+_m =Lhk j|׶-\ ̛mxv".N%[DK6IDmTf}3`$HV4aܥ8wNp֯_[na@F $&C-PSCsqyS ݃ݷ/~j&82ÐCpv7:u~+(""w|}}ٹsgJwF֐H$ewlѢ?)Hxĉw֡P(8~xť~y_~y^)+ps shGE9siy6=x@*d9K'p| M'R (>K{&UUɥKI // K cLakKgϨѣGSTɓ f^sӿ?Mϧ~&ܿOyquKUE/!'GRUYR |޽KDATk׮l޼[*JN4R{-'L@D«W1;B/5r6ڐ&I:$|G^zx*E{R)gܞ8 cW:/2ݓɢ"m[^=2+;vNŐWK})}X, :֭[yf:ĸqhҤ AAAx?RboC?Fn|*8~(DGO" fs?y ko/o G\xz„ 2jGǍT?GUU~]>BYU >*_gBEE={o߾z}\yU5SPEǙGΠZU^JLIhA,|YlDF҃@MI{edǵ]?8bxbCf3f ǏYf@ZZZg;wZߖr$%%1i$ڷo -Z`ذalذrgK ́"TUe 4UUٱCAAp!|w$&!ҐRB癤 xrt4Efi&V5c21%;6nͳsM[kR PYY /@nhѢ&LSy Y]]q4([p$L dL& t:7_ h:`zRNZ-%%@W/ ^u:s:4ǏR RvnO\̞^zii$$҃w=j\^rGtt4...<VD\Sy(sì<V˞\̟/ߵkRn,gĖxIhV(Ч *8q d5]?8ĖtNը%ѦhނgbȹGK硇uc63*c냴4e>]|))ށMQ,#]^¾y=%()%Fg},V vI#0P9::l2W(JKC'5qVC@&<ڸ1,\l>Џ*sVia+UˬD=T7=M<{B%)ԩUqF699;Q -@UU2?D d`ZٳhMYYLYU_4_%ED vr͛V^Pv]o', ΦyL.ۏc7ܗx#9G wwމj21m4",D^6bGÄ}{Kr77xU3ނm۰Xdulb8;; HhTϣmENOFU-xT~TcLjR'\/L=rڰa+5١CUk [#peŅ'OE~גP4ҪPV?VQb(ԉ!1eRFTZJC>EG)Y:EIIV+.l5ނGRe6DzedT;MvĆpE zaU+x r_̓>H6m(((`Hǝ Ra!~~Lz{]Ϗ0W0[l,'u,;/MYjFx8QGX{5X5݉/ӹa0]P:EՙJߒYٺ5Ljaw3h1>>LK.PPPWҰ.OQV?ώ;jlڴ &h^>>JRҫ( 'UVBHK.IoIFBQx&>ʠ曠|%Ke$:$Cdz⟮ IHH`ڵ,YwǍ+Z ÇRBeX[ }e.\YfrpaFƚZ@*b*й鈝+,D( 便I:;TI Gđ~xUUyUcĎ<._EuvxE+PeѢE8;;\F@@{Nj̳\uGcVUFFDp?yF#=*O2W1zhjټ?/ bG!8uFvѣGK~MeWR6nP_HϺk]/JJχC`0HR1c_B֑},PH0UUٞV˴3gZ%Ɍrhay9~i~5t$2;09cG9?ю뇆v@ڵuZ_}ܬv`O XA^E^mju+_5B:T]k>X&rMcI:S\ ))дlLWU6oFx Vb=MziM'˳F`l{dCCC2pSwqﮩTUJ88d&=O&|;LXT3eLQFA`` j&&atK(B!DTʡ|tE{^ >t}1n=toB^_4$UشӥKO?vo-v|6[#zS'आ{xT*y|oۧަZۜ>i$z!駭¦ok^Ǩ7,C0rr:sRN@@"#Gc0@0+'( SS%ːɓ-F><$&7 3fة{Qto-7W1Λđ8V٫uͲY`0УG lEPX3iNI*##iO(GA@F#?'R',Se}0А tؼy3SLݝM6]9x㏲& %%C`qZĩ!:rD'L 6͛Zٳ3QoVJKkGmAKP>>r`(#}7}xg=$9sbǵΝ;F`Va͛ׯflfѢEMB_ #P\jf7ci9T?770)+bQQQJZ*EÙ3SX*П5~Qj6Xl,BQx>!"#[r@i0KxMRnUR|QhHiid ///̙G}J1ydXf Ge899q^7d^֭[lj'Xt)z+^^^\tn@@nnn?/VZ1tP,̯jAoVKcY7}#G!'3)/\،23? {[6PڐEUMdPQ,8{L:|܁~QZU7`c2{%]j8991l06n>}:ŋ_ڿ-7n ƌU먯ނ@W¬[iԨ%"(+&S!r !}BLw>o̟2ݲAjEER}=<~e6ѐ ?G}F!'u.ge஻`PLϻiM'P___׿8p -[$""tn*cat(g|NG[9;;-&Vy3"$3$yd󵿃 I?m6\Q0khZѣݻegh4.\xǏ{}y)4 {{\ՂZexs@XwӗA..U l۶ !=ν8PXxhm4ߟAPN;l8{<{1Z8 *{%]~gppp 99{E۶m/{Uq k]/*+ڤ $%Z5tPf3z}2~~-Մ_O_F,IIA( _ddBwQUgNO:NYpuǯϰ~А kߗC~pvvpK_LNtz^&Pi0򠠠7|@yy$oKYY(J 1Š8(,{ɓZ{Fêz2Pe,1b\r$ ۴lYYrXSO=_~ɄјMx0t:rsZTRS:j rg"YqqTX,slovd6L ^כЬPBBQ, |&ѐVaȵƸq߿> ĥF߮&+ro￟={]Zђ*M^׻6ʪ0q:7R{갔>ފT1ۈD!2rGx+?wNCY;wā'0YLtcpv7ϫDZjŌ3 #%%?gggmv^ΞA=j{myઃx{_{57nLdpa "ȐSh ~(̎AQ[ [ʍ 4櫚(FoޟcGݡb֭u]jՊFѡCƎ[Uf6Iݪ֛L=%lAY(Х ߺuprrbȑdggcRR*u ݇ _^@UUeg38 ɽƏTNfƁ8.qd/)efE ɤoϼ6?ӧԌ h4Y/dbȐ!nݚߏF3={6M6߼& :#Cvgg*99Ъ~*ݻ!o&C ~~j$.FGFRi9Mʚ]1p^oSa $Ty^.r뭷^Dy 2&r[@ZRsu+1VwS(m۶:@AQTJzRXEUVˡ|fIP-#k#RȪ-;l ]G]fUX8-XDJLzv mۖoTU%5u9"} s9q(B 18[QA\t:6deIᅲ^;Yh`v NK賾\O=%u{׵]?6瀌=}ݗX;LMo3yd85r+VeװW؎8u.3U^`*uނ׏nDغ~68pѿڵvo*ysNm61iҤC! .yr |c׮]z]-^}UoWB< ̠gELn~!^~/ī*^~e1o< O;EEvW"3sh\[܋DNOOqOSZ*#ػW#G;WyPRDJqeh!] QQ!ȑB?ŎǮ]~.\XU]Daa8~xɓŸqĢEh_6o.IJeBl&Dhpsv'2J3 ? ~+DN  ѦMq1'&O,F[ry@Ţ}"jYSƊ_˅ؽ[aÄ~z6Q{d3p}xXĢErXD+ÎѫA]wF#ĺuBAyכb˃[W_{"8X⩧=[MۊSNsy9s&M&ckq}"1A1$fp.EWSĆN݄vQj¼iuTׂ|9o -F>L:!Ӧ٧*_O4t2mN -鱶Iro]\d/BDD;wE|RDFBQ X).'OZG-/%b*4n000&2Jp2rTѣ!0 exh5t2u>z.լr.AA8k,NNlM}M 9}_߇ܵ.BBZl_m68qbaӇf͚1fi\f:w%,r-Ohh(ǏEt֍_rpoQ' :7W&C̄xEyM7)//`H&{`0HC.uY*PHyW ؑFQ dih~~rQer?~C$fG=F<.o3h ڵkdz>ˡC7nm*XHMx|2 7,#5K-Z]vp[( =C o $S zJfKTy [͜ F#e㬻;}\;no،zUKRZUCނɻ'W!i!w~׮PGCT#M""b$"HL|cQ2eiBPtՊwJ u::;7 |#gw98H껴4;Fuނwޏ?0c<];ZfZ?eقј3AU1 8nuU@ЈI&L8Lee"HeeiPBdTUe˅ h11rNHa!X;[\jqtT`<Dn*778}1ނ .6Vɰa,JUZ&>EQPU IN^TeT5)2?x;wiw EEeVt; QQ!. !ك5^9lJf*l5)j+ ?$Hsd{VFZ?8880`BBBPU+ӹБoPU+eaeDQK٫O֓@t4BQ<AVflGmڞo-#9x8'M7ZGæZ!ޱCn ҃!V+< aqrr%oUU=kEY,;K(E($)(LJ~!! 2{Zj.[0qD+IḰZkG¾y=ԙ*+%A-Ԧ_/kLkaarΘ1`0h{ӓn碪T&TRf6`t4EtTUC7<))$$x`wnT>\ w):Q&eo R[ ]̈́o' < r_!aaa 8.\Hyy9z}11(Ё@UUrw>m#-K\f&QQE_HQKKefCK`-*`An 81O0{MԢHZk`9dʔ);wNG? k]Iً ^ HbɓecV+/پ};BZV/)!4XN34E([xUU9SQ;*9҅Ef3G򃖴>>TUSf϶|yވ\rKI-{l`60p@|څ"} }WWx(--ek׎jFNKw 61V#l#ɟXUEEaٳrO|֦ RZUe7 `m?Qwufe&뙚6ʆ pg@QdˆF#߉rիWF8r%%߁NGyyJ )裂s?YpO#204QWd;,X̩j{D|څ/¾lb ?Ad?7`hkGGZXFCppu~C/hƎ:4GIF*^99$D^b |eDFAs@K2gVё8k|Y=-[dux(+#4ޅcZؾ]:@6;yވ\rS$x zߋۿ 9vLX͘!K5ر#zuB6VD^^Mb3~xL< EC:43bQ4 mI(Kmq1wED aa-(@pzKARƴxkh-|Wdž ?L ֯,zMs@ ĆݶeAAEVʳ?[öHIiZQ!S^^#!`…XVV11j@֦, 10YP;'g8!w޽!:;;h5%͚qQkFzܯ 2;wNȾ}N;W:tؑvq$>>߁T)DP|O6ߟDԩ2`6Mϵ=q[L~nԵ~'9xYc-kQk{QӦ,!:˷ ֚^{ FCh4tڕ}ӧϟ74ۂGUŪZysh5l@qvMA`ڵ8880uTz=j&.n!3SqT/R)C"23qjE,;jiO>'ia|؆').ƍÒЎkXk7.׋:7efʎ- k./b4mڔ'NPZ!!0[8_*UU  UconLx{KbpHNXCނYfQaAYޢ|=raN]i6lk֬|GۗƍRuբ\Zd8s L?bIu kJsseqttg%-- Fs׋ԕLER $K@XOS'S[υLM%`ayӮ]a:XnuCx z5N,dbYAZٺƞ#`֚  lĉh4 4QF]=z~kz]ȝbJGU &+;8tq磪VΝ[RRJ~zBsё^KQ}}-(JE`|qrs{xkxۘ,fcL5ȹ6v#r g o/àӴ%7uB>D򲲲2ƍ۫ VTЎ.QU:j;c㱱EݔI 4C UQq_N=Ή&7Wщ7VJغS}Q {С5$`H尟Nwwp]JZ6x-&ٜ(s/3 eee,_OOO\]]KAAFcϿosZGbcSVYKX}3y/-EadD,JNXm`sry=n \ChV^j¾l 6 83m۶[cP j]լ/ dDiu摔DnhժUmofZECT=٨Jֆ,Z‡SYEӧD*,YDCdUTCde>̱crsl7ZD>QkFzрY5nlN{M9"xٲe!xg0L9Gs#;[{UeVpdmBUUC@b{g(Mz:8JJsϩ+غs=WWW|K~o2,"#a@|H[fi&F㭡9v@s䉗9R\,e[oѤI<<O G{ KqX=8PK/Z5`4i^k6s@nտ베d,F/~l He5ơC|+oϯ5EEu聥 ?źbgtt ·DV}.n (1xkqK/t֎+D}Q:%opɤVП|TU:0iL\vrrb񔕕aT7E=;J¼7;B^jD*-i--7h礟YW:֩Л(h{> ߓ'OՕ?nm]f ֭''$=Ax FoMH̔wl-Iݛ믿'F1ydvFeA=Ӧɹ_B( ~l;Xd ɦf6Yh}Yf3~O`u]xzzhضm%5jwDŽ .{붠f&8tB^<"[E \)}^?kFt1P Ͽ1QKrZbe%wQ^9w"~|{,B2Cq o ~GYooŶ㯣>֚r t:> ۷ݝ޽{iӦ^st4$Dv{[p& ?lM ȯdEƬfĉxxx0pںq'85+{{6:B1*-(^y}xA\wwh]>TVl Vqu7DѰq?'''8pEUV;3fhj^hzy ӧi׮;v$&&xBBӹRQF-z7UUdXx8ptqtz=ܽn]MhdB6Կ*lkԽVZujd6rHx;w^3\̂cZ{f/C6 Ax öm-F`by, AşI&!E,^ *+HN7NW\PHxEćOh)eHM嶠 . 7˃ݻ%}˯ȇr>Rav ?4}){ma;]13gJO!$ū^Oܹwiȑ6 6:uyh4iO=%Yf]hغuE=޽{_Z7xXX؟: vpTVڿ`X^Fx VJ ^p1dde׬YFaĈ\%%ϯ?/~z]VT0$, EaQr2UVd0@>Ϝ9Kfi&SLػ訪g& U* "+K*B Lz{^ĂBfHsy Gpرaw112S[Ӳˉ5k⧩>$&M6Eb͊XSk#NMMMeNؠA޽*U9cbQ.#"Q,bu^5&Q9Ƈ~% 7''SG`G__,Uysjj >J4lge u1򠓬3?˿ GGGJ$[}o!73kb"ZJKhHTpф#hÚ[? @lmm޳GTf&Jj4SXPQ~LCt7776oޜ駟hX]єTY]%TZ!g`'SpCR a4J܏-[R䕘+l9urzWӓ!op3\:I|y…lذ!KtoLie2Q9Ql- 7)J i)Bj ,eee| #Fm:C77CfqlؓnnLۛFZðRvL RKŨQ⍆%W`=}{}P'lObZ~=%ɟN|#j*gϞS3HÆ ijjʆ Ύ[laLc)>yROǍ%\LFlmkg}FٻHnT 9{l@*Z ͊Dd\zEW=WHFapI ;SKgqq,T*ɜ1'CU\qkiz5Uj^ `}6-)[x_~پ}{:;;gϞcqFZά[Aׯ-Vr鉄# *բo+($y5ZYY̬e<ݩP05u5 JF/rbYtjMLփD/5 gg1}%z'A=#pցQ9Q,Bg;vP"pԨQ񡷷o^KfIIeH ZM(-5s4lDuZ|v2^RdbhϪ,'\C~477'q֭> =5nnA_ߎLL\Ò00fq ==(}Es} y#'EGÃӓbbr>O&~[̶ߙ3Yv/z3i1n1Y~Y1 Z&LOov䥱/Ubkkϓ)Hs?u? @ T(ܿ?J---;׭s},Չˋc}P`҆$ *.f@B.7ƍɣGTUP!6ٌҵRuˤ$FF>d֍s癬bEg{{{JGHGҭYiP'|5H,,>*[+ê*F=x8T$rtpp.R)ʣG(996 #_3z.#gGĝrؓ u)n=&r!<}OORr-oAՆ v_tpjWpb}!y@&S{QQ^@ڿ:MAB< ϧD"y,KOswYk˫9i..t^ e5W37^C{}2Je!cc?\. I^KS]JE+ jle%6:7ee Sk򜢜XX(6}_|!dG^&<H$ܲeo~>aJR]|aK6+ZﰦGI2!AOjqJ8plժHyy.iKB+RRUbx*d Wb3//j)=UW)bGз/Je%w6Kj>`fI&]];@` 84!ӿ.^MF#" ijȈBi\ruImEፃo@W3&F35oP0𣏄Q~~6lʺ\gFFΦу`V(ߏ<-O[/ЕcCc&1`B.k~~\GXV/5Z椃vky![ۚpeke{/Wϸp٪0 iܘ6MsϖAHHuX`6m GG+Hf͚?}#F ##!!!y`` z3g={ȑ#={zX~=V^cн{w[nOT = 8tK-~v͍;HH3@&`׮]Xr%ڴi'Ns() Blbq9hj+`R! Z6@ma:%%$.nEEnj[V֭v̀+ |y¦^woH`|`2ygO/wMϏ;wyW^ȑ#ynQ```nQ#cSsۇnLJ>Dek;vݺ@||<~ma LmHNmm i-'41cP\W>xͿlߦaSr2$|٢X[CU[D0nf JmmwznRǽ?Ʋޟ 6m.]+ɓY/A_ᅨfOYpPP ̜ LJ}]8E;pa܊ sEf'ٳ@F~:6 02Ją ///H$&Lq`lsuJUmmKH4+9ȳ= `:R{بp7Q]R)썍1^.PMAӻ\p,ɮ-υL"C&zL0|fZX}}_\oku4S__ofp5 O]T@jٸqS#t1`r&4b]+WDLnd`hh(쨣M6ii?݄&LK $Od[/dgr90JPh*",+칿'i0R+aMMfbuėǎKD?GD":n ymK>ժj~rzn*Kཏ &׭RɵkR&G y $!!X^ORtw;7'SUbfUߋT.g[:PS]M;&F1W|zh17mbQE1o ^h۷VVQfBy9yCP]]rdEɅ\ﺞmE87+Šj*EG4llD7s!vԉ_~%/g| u\ReRz2hçL̍2dx&33ے988: !ӓ..a׮QlCxlӆwe7x絜 #G_I~e"ѰQ#q낰)!g$x??h4K'7o%I,ģP ZHccg^yGEkkj_DkjX`UYYY˗S&M6t5 5r9Ѓh4qʡoGA>9e1eRuJ i,UhJK׾|!UU'z}RI|ŋ?~.\sqܸqd\zcѪ*Q}@׾봹jW ݭ%DFjܹ422;XUUEPhǧ SѰ瀠 꺺 hܼBGGrР3$d,p1w~琟p!J%]N;5 ATFu2dVj kG% ۶m[;WR֖4ho޼c̙CT-5`ѣGW^a hff^zq޽AI 9gpk)}_wJ%\|eqfHPijRlٶm[JR.^999hLMI7Fts3db*TW=tmT(XQccJ77gZm# {ߗSMt[Ly0/ Jgڵr=<-[\UUO>400`ݹ?|G]\DB0ڑPVp| uշx ŨZZbcQŋS*Ɔh4,-ݻ)AAXP I-aȈ!StV;r9JnWql{:83%UeTJ+>$zmm];ъшihhHccc~7fUUյݍJeJ&N+Mܙ53">nnlccTQ!y듋L,H7>fM^s0,+`K&../VӰї;@P[NH2~h%y>:УC+a:ŞYYY|(Jپ}{^v$YY{>.M v IDATJe1++8 -ݍ*̯$yxPK;QQ,-U%/_fAi.zleM Gp<r֭E@4lEG5r.1ڹsFfI͆*BD_~I㝜غukd2.]Vd4'lj)CYXEFm'fy9sVZP!!\6>>ܟJ~]H6"+z55tOv(q|9\ƈHs쫖`}ܣZ]ﺾf 3cPbț7YUOEnԨ/wY3*Ǐ&-%$j޼m۶qܸq455%d23g1"03(]]P. flL <ʤI?;ڶ-׆ c1qbH(yy77 AA< :lKsȘ1cx?ccRС9P*eEr mD4*w%r9'%/J!ګxVȯfun6O$A㯌Rߥ`o3f7o>"O^D_~}4$D ;d偂y~y>:/$|v~H$uVؘKFk3!!#XTKJ"Rr;_Fu|+<M))IOĈ{40ԩl=ؗ2%~p];q,.NEa>5g|ټy͛sܲe3^1-k$2qѫz>->r]~[㮫6>>AICWW 6A=9\ҩS'^8e͊ 믁MFĿsR)^ͼA-a: ۷ f]]Oŋй6mڄׯuXb%}P*saj:!H^ȿk4M5A2ľt$TV>Y[m33?8;ߨQ; m@Wu DBA^5|Smbr(쎓'%p(-zSx" G^^Im@V*- `Yeׇ05b *gܹ1cV\!/v6ttzBRliH۝eMd~1[y1bn.%L"kk>h̞ 3qKAp)`H!T4qp.`b"Tgggx꺭EkCOO[Z{k0.ov 揼<@ a={š=P Q qf̀n݀Ν04GU/06m.]ֶ llмy5,,2Q]H&׳nuڠJuړN Gc ܹsM˟ kiibrxb|-ЯHR%QAhV(k6l$`\?ڴyf?Xl͛]dgPZz ڠiӥhTFI7'*RXlt&b˹Г`aVVW!;}ZltSS`thfςEDŹs-Ek֘j;ZMENu@&N&L{hB( > ,_˖V!$_y~}}ciϥnkPKqԩRY`۶m>&M˗W^(/BZndf4m!#d62dاڰe&6Aqk-ďHBF0qcL@cgy9qM8wt0L}m*l84ɓ@Rи10~ρE.R[{.fY5{@))ooP== imը9AOG`F ʕ@֦٪3:Yv@a"(P @)`k j`e $EHHCZZZAǎ`c-[jYr:ՙ߿~z[{ryشY%[oW]BC .D]9f$گE= ||)з/ 'Nf̘ {(.{R7M@ms>3QZ-c-XΰDMPQ22p,3 4KK̰BH22)S4Y8y.ckS1z*": u  īS'\= <yGʀ-[DD! ~}l،a Kz,>n˛7W^>x=aj;v _}ХK,\3gD*dfFZwLa/4m,,&"J:e} &0b"b|qꫯ~W\fΜ KN˻=L`i9VVH'y0.`958p-,Tffae=y8sFd[4ϙBrN8sDAPF1Hn;-Uv/tt'*%Ou֞¢>yQR< HHAH@۶-hkMjN6K57jδ#(am4ڷ7A(!77W\1z[̦OJ%WZ=>hddDD#G1bicc%KR 5)bFٙhRx"mv`}xaWS?!ARѣGS"K,aHH fefH(*2*: 99bBBK!8*H6rs#r TW6-O?e#sօY,9i.φ^ӵ.ZD6i"N31>/^x싰nNWWfX!I&$rZE\teóI HII5kشiZvCeeQ_U;0ӆXQȊ &:&һ7ӻ7>c_˹-%] _5Q BG r7;wjho/ؿj>tu:WRڟ@NN% ׮]ԯ rϏܷOPrPϥ.]ȷfu98%ځ;rѡ|}~z[.orPN\CXok\ĉ₍7]v8vΝ;gbĉ{B)SеkWԩS8rȃ!C dddd/@˖-鷺_ʈ^6o-Zvv"Lq7w~:Lb~Xb47n@q=s3s犬ejj28 33} 0i$4lXS:`hkr7 R[^ElA%0SXL\WdVCI&cl!9x6&NzmK).pqFTnter ƴecpW 7nbIlmEvp1$Ow}F>}`ll >a223;E/du50oi%1G2K31@,ڍCU&$LyY W^?7ofœ9sеkg!+(rr~Z]c7ae5fő>sQAb)Hi'Bbe%0 0.? xx̪=0nrH8:V-+ʤ،( ;.:pq9SlKikAnn.,--+ /;}Lkivi&6# PؼXǣJ]ЖjI+5V[4,?-i ȿ*E>}p!̙3DNN\@w#G"11r <gΜ#6hpwLY7oZ}̞ 4l8 ؋AQR]6cR n9=!ўլ0gxػw/ܹ5 ӧOǘ1cVCV1deGuu&:j:'AV rs6EEH`:S,57E(QѲAph]89! ĄQHNP8:- * jzEej7OOO쓆|vy'T*F^^^}8|6MK١Z]Qo7ߤ]VMII ʢ%rBYjFQ{7ý/syMjӮmx;8{=Ry~L07;v,Gqq"u-&,NÅ Jv$޶{clƀʆ8^* 64HJӧOԩS)&Oӧ7zX ˻ 2|'AI],Dޕ<JBƘd)줸TKyy(+@/CC 350]]ֵkb"NO08)[^:n_AqU1 u 1@ xe DkpUH'BR+$ϻ=/GFF{x"F{{{W@ Jn?pHϜ)ϻvE~E>=={X-1L̴.1 'xu` AgiYׯԩSpvvFee%ӧcʔ)04,EnE\Dq$|"LǡCsw%U)U`2M!f\Í|հP 31М4yS66qn#4K؋ " C.IYصm+7>}:O4n Eh|o_ii_SpԩߜZXXwwz|Tp<%%-Z_?ppp͛7ϟGQQ#[;P*(=K__T^Ye8q'N/:q2f̈́} {$'p rC} IDATpx2tb"&&Nӧ =cǎСV#'"rs/>`f6ff`&J@<_GuV5`:MQf_d%p)(T0 cc 31\rqr{MDk[Iw F &׬z5Hw6|}E{ ~Iw[{_Vx7ЦM?~'EBp(22Ď{cnn8v"ΡݛtLf; fMpppPU!S#%tN:jcǎرcѦ)/#' U04 s01IR_-@<yQF0m&.[Z 褯/ ?޸!2OWzU޸p C пY@u\7M@~=_z[-[QPokOߟǿѺw-&'M׏?;j|8e:>!É8vmcpt산0 ~Y̡`` ر1yrg|f 8rttt0p@;cx$0l v ^_-D>W\yַU+`FA}H,Y| Ӧ~؏އ#wڽk8z+ħ>vqDW tt#&]`o<.]36l؀?-[Ę1c0vr{ %%.ͽ HHX+QrGyH> 1`Phê.8h`j~* P*r9 ] kWpTdvºp3&кgk :?;P]PzKU1b222?DDD<ZTCR y;8&KÉ8~99hoۍvѳiODڪ/cǏäpvv3ܠRЩS̫%n#? @*)LMd8 TQ*o_ QpU I`&Lcoc㢪? .,+&Bjeu-ͽXidbrr_kfY&b.ʾ>Flcxꩧ0|x8tt.!??߇{Kb:(.A|%::0jf Cq)Ha!+Dъ aaũ_(^^A#8}4—)QMٻw/JKKQ\\iӦaܸql?W{Y[e:Udظq#T606n܈S"55 Q{.zH,\P={{{burso߮=*s33v]܅Iw4zŁ|ޭ!bG=Fs紲3 @xx8"""0hPluyր:#5GFƌA9Rn׋ⷋBi10(3n8p@q ;v1ڵd:tHNNL&rcgO#? P^xRA?do4V(qQH$: tFmS\@JpR~~~+8 "woD8F !6A8sR):$Ǐ+xx(5g ;5СC1x`eơ eeC`f hAQX LL`l-BrE1@0%[]]`T ;w|hY{!==]gvM4rEy;#]*(35@tf4~v_܍waoppD8D 1*; S!< BBqbALL add 0p I((CaTW@"1iLMC`(틒DBQbA^.DOc_c%+CJQN:/cc 22a!YZw /k-: Ոolxyya6lr)S`͵j9~8,XTcذaXbE@\ʼn5[)6vr {.8y99Cp`Ǝчؿ_7Y;@~8}0:Xdd(~!((AAAJK hidLL'#&d HFJ`n_W+ "558z0}􁯯/%PTS A`h8FF^0F_Nء4ũŨS`Hiv߇CBm* :3Z;%wAz!.Nq3) (/ttאzW㐘ܹek4 )(*JFe]`d⁠ΨH1Cqj1JJ߽`^ltZqDDx 8u -EDOPn{ @ʽH#7 9;%%Бz!W0zHJRlC*6xm)6x䰰BnQ8TJ8p_<vvŐ΢$JJAT @A?{@ޯB*կw6yYkD '_sݎ2ƕ|&^O{&uw\q2rݺ`q|2RSqk׮񁯯/X S(-MCqITVhiH)17~ C&/kMk+w@DhN{c'>^q[,]].AA A^HDD~77o_g7Ɵ'Lyv//M#˸N|퉣N);$oG Z̨/r/8Xcg@ފ|zyˏҥDe$77`ffW>1p=zg<5_ltZSG*{7˦+6t~Z<9>8Z㷎#V*>%->};gCT3F8yRqW_i]psA+a`peet8N:}`aaOX[3FIHW/XRK 0j &*Ƹ#հwN2K1x73}`ZKHKp$lP\c} Y=(oEzi۷_}DT~=/0jcw@k Dq;ka99ݤɊ >P\^^_Ө]v8VvY)q~*d yo? \7>gS$%頺?{ ..k<gq=C+[bF)^tE6^ zw^^'9H5*iHS;,dn(s |󍀼````00JӧpvzcL XKYY#G*^(Ʌ _ iy9go<=' s= 8sƗ)_~} B097; Kdtܸa ZZaGq 0W̙al&''O*bLD i{^pܼiq^ǿG5U+v􆻗;[mWPpĹZ8}']TT 0]WWŃMc3c&(^S*d=~\ | 0pq |y8eQp& bb '9g @zY1֥ 0lU= (NR3.{X.b_}pZ8u,N=/W""#AA}dXYX(2E6ORY`*(v}..wN8{1Y1-S\.p qcx]f1Ġu@d2"##{nӓ͛Ç78mii)yDGG|oooBCC_k#F`Ϟ=N=ᕕo'w/Nr913SlAp).Xȑ+7;M磹yޱc~g"//=z4FݻQ(t"7W5gBػ (n ܷ/wJliӦ8Nٰ6nyԴ1&rɌ= hʕg?~O>!ڱh2It!RO!"24ח"""oҒ%Kё)++ĜQT;דo%%{s|ɉH*;&&D+V4Xd%o1S:K:ϖTd6lؠ2<44vڭ[ VQQA}'xBeܐruumr4@?S:Kd>rk"#V-;wj KJJ"A7ިw:1g3Dv}1 m[t6ggϧ&HKشi ϫ 4iΝ;Ǐa?~<ۧ|U ;"➟ӦwDKܭ[Zaii,ur::@~[ϛwD%f_dff "nxdffͭpWWW^2ʕ+'3в<ŋͭ3猱|3ĥSu@n޼]nii|_<+WΝ;W_>}ٖc/-ê0qDXZZ_Xcͣ|3ħAh|CBB0}t̘1֭뽃GEE-k_ pIt6g2V^^Z:\iӦعs',,,W&ZZѦs>5]MԀ- >j ?~8 @۶mw~ѨQj "Aرcj?3.]Z8??]nŬ%yQ]]MSL!TڨpF֯G9-ќ|s>֯ΚOMTG@pTTT@OOO9<==Xﴽ{ƙ3gj OOO WEꎤ >?kʘ&UTT ++둾~K (29c lڴ ׯL(k+!-ќ|s>Y[Ԉcǎ qF0\N 6w۶m$*܆wȑ ~ԩSI:p@g1Ԓ燸8xyy)ѣ$ .\< 1cƌ6W: X~=֯_Rm65&ߌG@OY;10'ce鎀EAA֬YM6!33Sy@}}}8::bɘ>}:LMMŮXn߾YYY{/"ZbokG% IDATYr dMdCOmc}/ArssɉR)ٳiŴxb={6T*%gggk^~~>}'4p@'AH200 Zb4mED4w\&AؘHѡz둮%ݺu>S5k5FEf͢+V۷]s>5]@Im*1gC?Sng5pL0ANNN4qD4"J?'TJU,Zp!IRZbo[k;:S:K>>d-15VĝXz%bOh5Zbogptޝox۷o'kkkhrEZDD&&&o߾ۻw/<6M; S:K<kF76h둴5(ѠA駟*/NKAA>SF=U__9#֌ohkmV=(##,--ܜLB+W-[Ж-[hʕ4yd277'+++rZG&???ϯw|1cƴY-"^AhҤIR7??bcci$B{ZKm ^{xXz%bOh5t8; 4sL244T%ellLf͢hrEZ5 277WΛiii)/%ֶizEܙ1Q3@m>1fC?Sm= v&ˑrnݺAFg}-[L=###L8sE޽۴Vr޽*䄑#GBOOOTzzIڪmM_bɒ%HR@uu5xݶDllz\n5]O|rF[FlЎ pF[ w@D &LҥK1`&MVVVMZW9+u&ĒϺqF]QKF9 gT"2ҥ bcc1dȐfILLę3g |}}i+**{ܾ}GϞ=T~ d2ٳAAAhq2Ш C&AKKK#XӉ!@eT4QM71dC75B{Y1|ZľT]]Vyy9 EݺuSCRTYߟ5=V__O]vʕ+)::q\BSLiT i=JRuVrrr"DB\\\o>zhܹNDD 4|p"[[[?SI&|i>'83|qFۛX3ʿ73)|H$=+++uV >\yvÆ ӧϟiӦ~m|79s&y;waŘ?~lقI&aᰴwaܹxSOaΝvZ_R;yyy@VV KKK@nn.q8::"))IޒRرcaaaaX~=Ò\^o9s{Xf ƌW_}v>Oڵ < ,,,O~W 66JLLDHH$ tuut?8vލũ(Y6mBff&***zzzݻ7&OӧTmD4QMoF5O3*b(vP3jڵIYLMMitMImT-}}}Qݻwo4QM?Yd>8b ֌oh %⌶&l9r$ҪUkV=|HoVk(222R[JelAe@D/UmSa_x={ʰ,rss#KKK:u5n9x`]vz?^DD]tQy򪡡![~=B'N fVZE...jkiz3c>4QM?Yd>8b!ƌoh %⌶&~z;ݻ0d\xuuVo^k;vO>jk9::"##Cwff&*]xZf o>9Re=bbb`kkp5Yw}'NرcqZ4N%HJJRmkkׯ/;;FFFjkK.ʿk.4|CSSSuDFFɩqzHǫو1f365' 1fC~Chj#s=쳤KNޤM4._LIIIdffF ߿O3g$mmmZtZ-SLL ={ F~~~A7n "k׮ -_iݻw 6޽{ˋ믿n!_"ޟ233Si3"իW_lRJJrdѣ=jk͘1ƍ{ٲeGǏWoܸqꫯս{wھ}{߾};Y[[78^g%|i6~jX3|qFH,ЎJmM۷Snݚ|rǎԵkWT;xruΞ= dooOARI*9SaiҤI}V1)j' &< @AAA/9I$!zAjܹA GGG!JHH SSSz믿H$g4ٵw>4QM?YT>8bЎJmMbʢ&MWXXH˗/cǒ'҈#hΜ9:.\Kڵk̤y摇5]4sL244B766YfQFFFuVXAzzz[85+󉵵$"駟o߾Ą^uvZ,](88nJDD7nݻ+kΘ1*++&k|i6'3|qFŬ3ʿ73ښ6MTX+++554}YY NS^^w޾Y팊Ÿɓ'ܚ)JKKqd2|6|rW^*縪> [lAYY{FFF8q"Ν޽{}|x2Z8ohˑ^zuZZdSGA[jN=(k.栽3ZQo?5D"5 kkk^iFH9hZͩe%w4]3Y1Q8tJMMŘ1cၗ^z .]5Nrr2R:G=Q8LĚn/^ܨ6GۖC.QQQʕ+*򙘝OgɁ3kĜ)M3ڊwֹ<|' un'Zbnۊ+UyѣI裏5ɷ,9|rF:b́3qF[ZO\Zn]{ZKm۵k&O [[[@.]/ÿo| :KVXDׯ7 »ۤik.(gOBgqFOeX=ڼ_}/z6l@۷C&A[[ Ԛa-1o>&&&*8s2)QUQ&&OUO(ʰX@``͞=gϮUKܾ}UUUC닔&?<֯_;;;DDDgϞj5op:Ǘd;v,222:ǣzW382|0 xnvvv9rdtR:::u$;vvvxb:u*֮]3gয়~jʬ4ʌ3={յqnݺzg-qFk2|4 ݺuÁv܀$$$<ťQ+OL:EEE3fLfi&l޼Cwvʓg3ċ 4NOOk֬1c#F8}4>Cx뭷PQQ/θ|J݀9?5HSN{oȑHKKV^'|o&N:x8tzHl߾/kf͚}}}^V$֦>ϟDEE! ׳>O.cժUxW`ff֤d98 Q&FO'SnbL>?^zQUUU;qАrrrڻ)(cdbG@#_GEEE\)+V9s`iiMaqF/' R} qvhQ%%%wkuQċN -3c1c1k3a1c0c1 w@c1cm; 1c6c1Xc1cp1c1fc1k3a1c0c1 w@c1cm; 1c6c1Xc1cp1c1fc1k3a-"H`51q㌲; l|7n H HYW^U :mśLMMZ7sYeeeuWQQssz{{{H$\~ D"A\\\יqn[r9s`011D"ĉզH$9rx x֭SyoɐH$شiS/Z/nV;*hDF߿kb̘1prr!lmm;w6MQj?~ ,D"PXXX]t… \y]~ׯG׮]ךk׮aĈx"P$&&b刏ݻaff֪<<<0zZ]\\>x'#GbժU Z+hC=}}}6M@&ᩧuCZZZֺy&[|ضm.\yYuXӧ7 1c`ѢE^< аIZVUgmk>|8zY+3oAT*F?pFUqFfeemQk@СC={6-[syfL<˗/WYbʕM?fkzj~M=w1-- #GΝ;{+Ο?Aa;v,,--(jlٲϟG(VְDtt4.\GZZ ڵ Njtt_]wvv6ήk߼y-uA֯_h-[U9f/%KWWWxb 5~z/ko{N&aĈ "| 6㌪c IDATDEEAf%3*"wף|{TJnRyѱiH$j/$jy5tjzoԨQ$}Ga6m"A믿&""\N4a;w.PYYرA˗ԝ 8}4߿pJyo85ذaCTKKK,Z011A޽1|$$$ذaCj?033S>p͚5055s=ം ի~C Q;}uu5{9?V%[Uagg㏨ĦM ɔH6dƍ~'5{qFΝ;n:O#S S"GgTgo_|z- 8v}8폯ieb8OuݸsBCC쬱5Ο?Z{TcСXz5N8h899gϞ+փ۸xb<՚ʪsk׮hJR(QniӦoŸq 1mڴfjO>WO<Ѣ=SbعmmFB׮]1oqkДPUUUʿϝ;ÇSNU7,, 믿FIIʊ0<<D?@sTڽ{wrrr`ee&>C8q+ ̝;Wel 0vvv/7q9yyyQXXT>B0`@WrYvM}>D/VΗ]va׮]G*,--tZː~bEFF"33^^^HHH@BBBq|zovnڴ Jt;&LqWs[=,44$I|v-j[Rw{ALF666$HҥK ~RAAAFEEE4k,rqq!sss ={;[oE GN5QPP@g&OOO211z뼕bͿ÷lNuȑ#ޞԔiҤIt&÷mH2m&I"еk᭙ilۺshѢZ.\䠺q-ZD->'Obk->k/ Z 8u3g%,,m⌊@J#xwGwsceSNٳg {{{ >#FUƽr ~m@WWW5Oi Q׀ԣða`ii Dŋ7z兹={Ĵij[*!!2Q՜]رcqn٣z˱w^書x"q|222[n᫯’%K4gz\z3֮]E!22ioooL2]vŎ;uVƇ~sS'33O=qqG/Ĭ066 mۆ+W(~axwڳɌ1 H#ܻwOt@f̘pttT8p q֭l.c 4'cDrU E^^Ξ=N-ei GN'uZXXcͳn:H$6yx#c.\@TTOlܸ2՚֭k2Z_ ^z%cΜ98q^+V 99wQQ\ǿ.`E,5Qc+Th,K4&yXD4#bQ,XA"b *sΜsg;gf-O]vVHRPB6mʲe8x DGG`s+++8I%{{{^J۶miٲ%P0֭sݻٳ*SR~Ri)9:|&Nŋ9pά\'qe~J֛>ޛ<۔g\zFadd˗/,,쩉]IMmMS6gI p!v#`gggmӧܹ3 PoР͛78qJxoKl\O@N?ON0irjgMSc#G7mڄ6(JINN.%<<'NW_=8oxoKl\Ox;H QG!33}}}Q(T^]Iw999lٲ֭[ӰaCu#Iᅬ)-[Ғ .paXlYᗹ3gCϞ=bԪU?HT6 AZZ׮]>};^^^DDD6,̙èQ֭#Fښ]v{nHڵV'Ik.I*aڵӓM6 4`8;;WvmN>ٳ>}:tؑ+WbjjH L2{P(ؾ};۷oGPplmmQTT 1bua߾}xzz#zNNNꪎ$Ibƍ1|"$رc;vlU%$Ij# /pΝ鉧3jՊVZxH̫{[bzJ]|4Xox2?˗鳦ir=ף|K%&44-Z2Jګyr\\BM*92GO^3+K$@$I.@99@$I$MnPw$L@#$II6@4ХK@ I$IzUdD4[˖p)<$I$dD] *$y4K&20S$I$I  (5nTw$=OyJ K$I^lh NPw$=OX97 IDyy@  T<($Iz(ǁH&~]H2}W>$MM;IuG Is3gz聕Jb#88Szuhܸ1ׯiMW^DIe7,I4"IO6@#>>ד W^Mnݰc޽L2ܗP* aIjd݈вlH uG!Iҋh;MeggGRR lذe޽ˬY7oy뎎E*JZݰ.Vؒ$U[{ǗI*6W" IJJUDO@@sQ*̞=Jr$W2dj׮ueɒ%/-֬ YضD\\V JT$ժCB B5 uҠA.]J~~K_yt6sBu_r>"m!񦇩PAvÒ$MҶlH NLL Fe˖x{{ӰaC.\ȴi^Z>'?!ٳ$eRSS4iC a׮] >Ν;΂ ^Z^9:u"(mL+IfxUH$Iz9呞˙3gŅyQzW+;::u:WWW\]]K R9퍷S%'')ͰfWNm=6YY^`QI+Y:q0Ԯh$I7vYVB`?F 8!W^}a={z=ٳG6>Wʞ={VZ*$$]]]ԩԩSٳg<|HoaON~=ER\\qKRYvQƌ=FFF888b ܹ~cǎET>5lذH ;I6$i2)/|WnΉmǙ3#[xx8 ^zQF n݊WfРA/?6u/D`mhq 2֭֭[L:___\\\شi 4Oϙ3gڶmV:EcS4UƏϾ}عsSZw؁͚5{aX}? IOo+мyIG-Io<;v,k֬333;NY. )r\Һ.ZH( |"#tttĄ ϓkP0jb$. Eb֭ŎQb֭ALςk==bQ ++􎟢e$ӰTNQ$oB?~qC\ޝ&J%7P*h%3 &В$VU/^S3E_?䗍Xeio_ RZҫCCCiѢ"* ݻ^ZZhc ]{!g’jzZZχV08L30rT~D-Y.\g}Vr6l //xgk="" <ءJTMs4mg޻vjl /լ92a/]$u&Iiؘ г'>L]8v(;䂄Roe…Ջ^z= {ppp`ڵyf/iݺuϧ4 u ICK .V$rOOgehAET(ɯV+өSjLH򻃩)RRHVĬDvĩS]HRyyw^ ~~~mۖvnO455ښo-ZD@@ZZZ/?QݺӥfEѶW4MjOL4 www<<<+ 52;; NYf\R% vӤno 8hg45O5S6mڄ}%##C!˙Tpt0CdJ$ 9x JR LKK&&߳';G_˶>ד PXҥKX"omb‘$D.p=p;6t!c IDATxɓK$ݫ2s0#~w<},-ATϞÐ<a[px%IFyWT&ZZ̄.]Gך]9"IB[b5 .\X}H lذ1n8&O̥KHHH(Rl~mp(;P^0 ùu 4(v8Td~.Nfd|Ad} 3 dW Nl:ZX499;Xҷ/̘A_O3CL$IHqW|rYd })r }*(r8TҨqcN_޻Fɓ"߯¸Yw vL؟ʤΝ1 FI9B/)*;LHCdJ$gςTVhrUvp=-,{iVN+ILwT+W$<<}R/qVe2RRb` PL'{>JlR퍷S%˹( K.ޙ3ghժs&%â9b* uدS͚4QF3wg~6,HwG0)n$O*/]ʰt;M0hJn.;RIz{… .G~~>)))ꢧc|]%TA O23;MaRTkhBMie˖k5zaxrB1neLž,`b"A5Yfb#,-mo)ZHDڹ4aR`-hS5HMmٳС#W"""?¢p;u7nܜyJ%It57j=N MiSر*$I圽=Zzj{ٸ-PE&М;nfQlɨQR$-'TՁ:+1zF{?ll%I*e*ti͚5#00- wy5kԩS_x IK9RSIߧV}.=@R$iWܼ qqX$?#fA_di6"6J xI*ap_-.fF1bE&%گ\P:ۄT6otuG*Io2I&Oq|EbOuqBP(rJGFFi5|||ӧEDDիWԔ;>s,SSS2igBtPФ @`YY}ؽF*V$(~bԩbeeE-Xd M6}a3.A~'uo"]?#ۃ?0^ElRTjJ+JEw V&U@ ѡ-y<8Bҁl ￯h%T Of}_qL½{ o߾۷P(sT*T*KEU(E)W<\-9̀5`ڷlHWI緙3f̠so>|||x8~8[~nYCwy؊XHX,ÈpRt<B#u磏GH4:M4olĮLwsDž?ڵ0q"hh5$\+ =;w^'// ծe =&myz OO:L`FGA|~u}o.yBpٙ!~ӓ;ϬCb#gٰe ̞]ՒRyWaھ^A7&*~Н5'4YзgMuG,Ior3$++߽{tyRS`˂ăt77Ϭ,"#qz@_0I*J+W.]BR=w 0cF3g3r,oV?/`kqk4m6zR&+ 99ooo6c uUf韛bED똓ϱ.]cXMWk$MdذaM׮]K9Wr ' ʢ}. pݺC;+ݻ֭VJ^i˺dgg{1ʜk:anKKK$$:cRR'Xqq;oILz' E XODR<\]*;t=z1c`ooX_;B*UY&nnn<991 ŤIlXPo:1: ~XՐ$ (7 ݻw/dwǏ9r+T2L;v:E` nG6zAO~]KR*9r$ ,ח2}tڴi? VV+df@!J=%5`D:]5ό[WJݛλuq-N/...lڴ pn߾M۶my=/̙3m۶pqPXo[Ȁ >#GPJuXdf$$âIǒf`J|n.WtDuZGWvÒʿMr0`tڕ+Wмyѣ;vаZZ$¼9{iaބ>Q[-g]4T69s 3f̠G̜9RXti~+V ??~~~ܹs׿<=cîʕҒmߛ~ɂcNJ}y$Iz 0tP,YѣqttΝ;9r5k;b13s(h8YT (]]j]{U#FKpㆺO>!44$?ٲe u}iٞ={ÁXZ-\=d #,Ι\pwq3m6G=EvÒʎ7w+W~jժѬYnX*͛7ӿ S:t`ӦM/=qdĤ >X ޽a>ŇQڝQ#9]J[j@ 777n߾͡C_C*6SS22K*H?LG33A覣~Zv$akWG"* 4jꊭ&==K$$죲0n|H CU*NvH >K\ .@˖^ M}`ɒa,Xhذ7qq>Xw⻌6;ӦA^UC~ش <<@KTC*ͼ[`wfڵEXTcʔ{׃ c#yG<[3=#F?0fe?1r֯AL3Lٯ'Ǐޗ J ƺjj v1zhlB[[6@C6o{g7 uWjDLlXcbXص+FuXINb֡Yul8rzTwm$V},]e˖1iҤ׫V Sšؐit3vo[~qC+{28~ /`z=l]s/llҋ.XU``V!& ut: #FM S]SmfЂ=$p`A7Rt'awӫV%=?McAoͦJm. O6+]I*},^>䓧޳Ȉ˗/?S.,,ZjӇ~ D|lKnڜн;XMiJF ueE~1qUә3g=z RGرCRfMٳ'k׮%&&eO>00hHB>,{Yt$愦0nDGw,af"WO4ZI밷/rrrؿ=ہq;㨚à}Tcǂ6`H!l8|-%HJ:,Y .>{}R{yWpN8رc_z'eYY C!dĽqq0kb-^uzN{萜 BJCn̞=Zjj*233_ff&Vv|E>~||<ׯ'77}^+ٹs':t/7ݻ/,?}IH؏yO3Si68jk Mƍn:ȔHW:N͚rM(~}ž=`hX Dj)*N!3U㯬,T0r$[Ǥw܉Hcn ~*'4GIݷ~… իz̙3OmO̜9mmmz쉏7oɉZj1a„o߾[bEZB#4n +Va"5:ܼ`aBIJ(ҥKM4 7zzz\|"==/ (>|ӧO B!f̘eBBB jժ%DRR@$''*sEgě7XR%/\WyY Qw(U]TOP*XN5k---_"0P[ܿ68mwZrUuHr/ B#n(1XBG-Aђ̻Ν; R) 3R|jp"*U$jԨ!D|| 䚝9sFXXX9s"0PKܺ'7F Bl(ׅba?RW[,C5]n<,/_.E͚5RJRԬYS8;;K:G\\\ cmm-=@ sss) f?vO գGBjXH/5.g b Qz ?E֫ #%֭['._v/viDև#A@VPKݙbm0K{{!?.*HesT򮨞\CԩSE*UDV0Zov^\zU ΞyYYB1iBCK] k#i2ugyP`=ajj'|ž={ 55T"""سgsTar-ustt$))Oai٫`U^_Lc#fgal /0Hr7ME EpsS -͚]vJNBL,zZU--wԩp+B[͆ ,[V\.iM̻ڻƌÃynXHܟ'q+3]ii0mlت}01P:vu] I*E 144TwO +++>[~}lmmٹs'}IOc(9: {ax TUoe/F(X5=*&IL{ưys,)FPT'r:GS^*=zģ~_̝oN}CUxF(X]%I4!jNh=ׯϦMv%%$&ȧΩ\:<21y2(owsϸO)rE5\6@4Jݝ˗/qF,--_AKK_~e|ؼk)-:€9&ѽ;TR8P!HVVYI96c uUk? R0Va׮v".fgLWL\m0q"xyyYA|wߩfT=x ƌΝ;P JiF1ljH8r!-ZZ0v,^ˌ#6*WSJRI R0a[n_O>/-踊7…Y3p P"l*s330f lZh)8Mvr6,9߼ԜTvp\fF^fII̼'$KFr6c+Ubmt4'Bf&}0u'W_Abk'IelF";;]t&6v+CIؗ@=<298&'luF')AB&NȦM_puu-RÇ 1d׮]XZ%)(fNz%u71¹3^Wpu-XYᔤѬR36nj(x ʹsh-}IE'H>V\utX[MqU .[IR6`^5v튗֮_h@$Hb-G8ocS0otBbBh34 |k#Il!&M_e3e/\m ǁT_@Ld$ޯ\86nĭ^q0$;Gto߉n#+/ϮN܎8l(ciӦ>>;:::D[Ç~Ȇ 7n5zj/ E7...ܼyH= I0nN_"c+U`ÇяN,-9]e7,I* 6T*166~juDׄ7))p!ۛʕQB%"#b3:D?ժA;,x1CM6:4TabB%23 ׃@?Xq XT4Rckxn6o-[v%ZMcǍ ̜) 7M6@^bʔ) :www ۷ogС 68`JB/Ծ}P(lܸmҮ]mРA/Cχt1!+o Ν豂/+b3 MWWIzU]bĂ 3dxyyae5hi{Sze5+T૨ѣW4GO[ϰuXQХuJmu8::鋃BcNJt;wtOOO<==]y% IDATw/}صk'/u ԯ .a܏X:F*Yˌ$e%OL<GGG)JH& k9x Ga'LMMٶm}ʽ{K\F,?>`jߺş;RfΤݍ m4se`V4d<صXՐ7qfcgWdܸ5qqScBơdf6Χ,vv-F?8qt'>St1d̂{s ꮝ$ @NfzS"*JR~bTDbp0A &d\B&&B|XPT3O1yBũ&Є,E1d P8 ‚ ag3dCv9@c3D͘JP*Q`t__ܪ%37|=~Sw$ՕT~O: 2yLO[qmJ zWFy!CxbtV?<| DlFpLL} =cQg,[Ǐ˾jo6saCܻ昴6]U ))[ǧLqMã …꬙$BvZ:p -nX 00-$1ŏ*T!vk,&0ʊcbPyyT?pv|e3'igTVD~o>֯__3,,7{6r%K,!5u+y3xxxp}֯_OժP*W'~ d&WH ؁>9/n -XD*ׯSی3Vm8hv̈́ Sgf֥M6xyyQ|jz:t&VѤOiio?ܟ X~ ]CI*MiҤhժտײeKѸqR<ҫ?B^Q @xyy",E qo=$O-ЍBB܊%.B!Ws%QNKK666?III022"==r!Nw#ESQyyB=ZTTIddd;w }P\{EktN$<O Yu DFqVC=ͫ8}Z%@+_Ie&hYuAtre!NbڵBKKK\Z*'G]i+3DݺBt*F4!?˺rdʔ)?;l2=ҥKqpp… |nF -股PTuօݰmz5kiodBǏFQդ*AL ꮙ$7 '##sssܞ֭NXkY 70z4DGC@@AxV^MժPhsq-CSx'&@x:?o_s$~|| \QWr*wxc %tvԪs$&n)'S09(VDE'p.;x]ʊp(٣JJRЛ7P( 7SSSW_;"yҢ6n$/X|D@">H*qĪ((bӅ⣏ĺsq11ꮥ 7o2E`` *AAAڵkϔ{꺭\Y11_ /tE|F[W7'M$,--EJJ+ ENNi"BBJ=.]vO~,һw=[KK*Vى {̚JJ,.,X!!B$% a` aCX[|{|Bܽ+DTT/99"(@DDqD"T+3SS옛 1a}*+Ěskի? LF+i0MѲr_-fBώ}&ѥKA={@\xQ$'q{ r2) I 3gD^Jժ $2s2*;I\ZZB|k,&gYUn`=abbB6l:tD![:|SQ:N#z4hЀݻwSL'UU%hn?fcbP yGGU}o4HB %z{Q鈈Rzi H A4HH$:Lǁ@ gY >}.990x+z3HP= T9*Z2>Cu10`\X ǜ9senw@cX@X4V4nII37VD=&wo-[gg'0Xs51w2 * ?3fʒMW^yk׮EZonݡ_ڃjªⱴqcDT8Vnn0?+vnn2>9sT33_5`jR9 pttĀЪU+݋|uONFJWSO>05ΞM Wԭ;ff6cm` ߧb-JJgF@CqZis@&m{ѿЀ<}a<扤1tdN?Dy` _Ca˖-x/Aj -o||KWi Μ k|] ^Yœ9ԩwσ*\mغv50H|='1ڵkq\v MJy<)5'$CF `[b-oal,& 0Pv^$33m۶ŪU(j@pp0v1T)XSr]xyv^F3!H:,-NF|&Q1Xg%.D\@w_iSiݱ#[348t|i,^ ǂ cШ $'o[Fe%`[G~>^_88 NK~:$:O Hҋ;TZ=Iww Cxv81ip0vGԩ-ZK_$$` XO,wp@`Q;wŐ}5vENN͛/0PxiEA$#22mot",Y +J̝;Z  ';8=wUw톱cooA.ǹs`g7m!H8Y;;`2Lh7mmb|-=v(9 x˕yw0497W./)6l؀ƍ@W"5u7nl Z&~~}|=%K00\,p[T&~ps>IEISL?>m۶}hغ}^l^~ct2Fزe |||p888AIGZ^U]C2Lm_DG#^=`:`~4 KÒK{B9V[fS0q@<<<0k,t5j2/;;...j9r$3 rs''±#.\FT7fH~~Lb ]4hލ Fӡ1dЧd Pfm,Z{AVШT$%mJ{Z<͛CKXќ0?X[lE6wzz] y y T$<[ɓ#NA]nŪE~0x`,]ƍѰ4$&`3XDSt[ddd \חسg'OČ30l0\pvvvXzOp I~".D\yaXBh4<OTBL_.Om |F :`|9/JJ 3r 98zFunwbf 4`š5kиRtyHIمzC^:y&Mk5k|lۆwqj)aﳱ~=ѪᇀJ~]Y֭?6 Qع:LÌ@Bi&cx닐+{%Jk ŏ@D,mǥKȨ}[[Rfs0q@ڶmcǎ=t۟6mE|јek5j`vd$_|n &2CXA?DG*㞭e}>Х j'%#FkPj۶-f̘իWC\$%mA2X C :iZWcQ j1}s1f͊~K6`K̝;nnnp@jj*-[/bZbccѡC|߾}{D||WC`_}0lPj ѣHNNP*C>Co9heVV"}PgO`R k1۾X(,v0PT&}?;;`H`nӤ?FE,Rĺu@NwwԫWNNNhd-Uk01B͑s&rޖ-TbgNVLcfi>hb(kByѺSThԨWmbҥ(**z̟bn׹PfrY89..J#Z-֮]ƍ@$%orEֹ,hՌ0'* \lxo;ҊҰk-cV% x"^leѢE422zc,YLʢL&oeeO>߻S&ܹs=ͧyy<p2GS R8lٽ;YPP@kkk~$~~x)u/'%Fr9#JS=~#/[g$mlȢg2*HUlTQ. j7\쯿s7VW㲫H_|AZY餳3|F[EIxk-zzSg`JE?/νa5찧[;fAI! :NK{nf0,H۳u۶mܾ};\cǎqĈ^:;wLV=f&Jj|`jk=zD^fffalrWJ̐!Eug33 KJ[v_M.-0tg6JNegUr@H2((7oܹsqF?9ԨQ^ovOVF#e˖‚YYYLOr9XTt_Fӳ' 5|u ':lڔRI <&ʘu֧6*9t>zgE,CG[ͨQ$eWjÜښ3,))aƍ9vXdl2*&,(*QE+ޙyZ-y{s} -idD^;Ywh֒~tx/3PL/8>[׬YCLƽ{>t{3Wǻ>}8y6,RJ?~<,{p@%ezV&^ DTQFpBd֭9||d2޸q=<| 蓣io'ժ[477+׫y1ŔLuI剌 B.ջwɐR&#w╘+#x~ YaFezyX}pY.wͤ1N[hjjXbx#vVw~A?v,ٰ!YP@>|xu&$lBafM9LٟL8mimMN\U.[lv۱P]O>A n=y Tb^>_^ CӽK4k Lǟd4 duհlll0sLڵ Jvv PwH]8`\z^&׀ɓիϦ++nHe2i`i K3Klyw \⏘?駀=t)0ydlś^/C6GRE#.n9lg٢VZu0aCLR ?.?f &iay~45P>TF^R/e"&}1, >\U.lW&M;/Cѭ"xfpGӁU|ȶmWfMxfs=slbPԨLdgck>XƦZ[?\n#Gl&MV#)i+ @+HpLޖ- #nFjp0`v ܅bܙq9NmۀEIPʦ@ӡk׮e;6m[1 [Ѹpطoyfx{{…x yyh]s60Ep]#HdO LR]qg`gF9#jG| ,ż xiyK0Ett4[l3fՕySV.^ӧOСCd7nO>ӧO$9m40118Nnݺ~tqq+{=ZYYKz R3Wʼ|=-,ȯL:,))aaD IDATd|zyգVOKw$9>4Y w׾Z#Fe6*HU[>}? OdL~FNFw.]Dt$֭L&իW)I:M0aCFrgZMkߟ:y4?tXk}LI7b?< *F+Jw{ݻƣGrȐ!VwNN\\Drd$_]NU JE6iB͛AA}y5,yQn$gxլCCD曤JeW&=+cS@%2質8 }|N@2eR9sآE ֭[|:$D^BxwL‡&ܹCL8r))3 cJƩT⠚5>O>T4iRd Rϊvsq)E~ǚk204I1Yo֖YYY,.ܙII+ѯoAZOsbX%IvU#JA+g9! mSR4ZQ{ܳ577Fb&MhaaAkkkvܙ֭Jzyf*Л;*-w[ޢ^Uhy2$$FFFܹs'KJRUC(IcDMK#r"}}EiKңs yS@%2質##_AGG.ɰrs1OI`` t邀tY|٭Р dG l>E&Ҙ1cpMܹswGqq: khm㛸8HNFo~ P9!8{&M= z0P<^T}?$ HOqhCa < SбcGHKۇ9h"%B@4©,L æM~} c{ԏXxy!V]oZㅖ/_zp(g*F+I(&%A^~GayP`8w{#$d7=R1"&Et]y_E7nfR c+$&#OmSYyгpy(7Q#ꤤ+_T\Dde'N0/ϋr9;\(Y糘ˋD㏆ ɉ{7VO(IȎ=` 7 479۴i?nnnF]  ;vay8>g< L.}ZXh/"mff^ػ8pf>+K1H:U :~U?_-ݻ}sPh $5n;Bvaad L /օ[Q-'>QST#uwxx韫ZsC`RI8z(>sCi&Of6Ǚ3gХKL<hr/'vhux#(, JJ0;2va@׮p_EPz&o?[wD`e b E{@ς{@TvQ9m)sq.A=<ӓQ0RA]޶ BxD#_H'BN!?3"BD~}󶂁AUy^$Z!!!\r%xv2ULKcr~2-ZrE$+WD>b׽{Ϟ=K&׮5o[j49з/}P<7& DE5x7o^s/hʄᮼ}][d= <'^FsmVX(jM̎dո%EEvH֭#ILK*L?&2NdP+ILKɡ={ENOwsww^+)=]8!˗a:5kS`b"پE7yU^*Fs63uANͶ߷e7nu9S,ZƊ~= `z *fZ@]iBflz:FC['x32~w{l[w#AUyx =`[$ƺRf1'G|%jfZCC?W=j4Y,UH VGFwSYY5W<pn҄C Gӻwo6hЀzۭW^:tGm"IdbAiAXk g&P$H_;D )&Q%r1Kc$N L.ޔV/>SUjGX 02qOz2hy\+*"7 t:z&x.]!5XdVV_yvޝjII;)YYүz8J%zyw` U:[le6;:0 5r_Ԭ0P50ܛT牐hȩSիb`hy*yy͛I3j09?brop1OK333Λ7$18x겤$ 5}Zz,I-ᵼ799_3H)))rjsbGaTt~ܼI$md^sU%zv$&n321 T(tЁT=d:\v-ilL$厔9xy}B?$V4ի"ҙׄ$s#0V0-$XB.XQp*Ne".:V͟|Bj4O /٢Eb",wurI߄7b={'j4ټv͞oP-*^kvx jjKf&er91VCeǓ'_Ϟ{j=RxOFHB\27n6l@333FDDP I_VKz0rșKB.qYIx5*n Ye0x3f_~ɓ'Oʕ+ܰaOL 6}Z <'H/$Ig_ge Nݻ"inBRTyٳ'u:nS0a\%Dn%obbhP#7WhZ-)g>c5N1C3q!\c<Çw޴_y0.\x1f7/JU$Y.b=d{f+TD-CT*ٷo_֨Q$w̤Ba̬)u LiGEձ߹C$8+@%Z`}ĿGdRҳ<ώAel#>_OIO;{feRDGB:t`-ǼkbPP?tͧoz_DEQ&"z=9~i~RGe5y92Es҆ kF>/1ܶm/^>&&&P(411o{̙3(u܇7t~bFZfM9"zuÃ2۶m#I|CŒJeoS.39ZIb@]LҼQQ宖ҍZ'Nϧ\d 7f mjtFD1c_XX=zښAAA$CBFݽ:ss=(i%O r&lJ$I|^{_>}:m۶eFyзn{bOY?~g477gTTub4cPbuzZ{RfrI yy[D>Ȗ-bp$Ɉ_%ɿ3g2 T^Y^~Znz=9n17AU&\XP8!yyy|Yn]޾}zAA}Y(IcrF-x63 Sד.͛!!L+LcKSSŋX4(;I/ZwO3۬DGvLj4KZ yuzSSsޭruu}IݻW^^fͤHΈY##Ū Xju1G<&L̒3f *IUf˭c9shiiSÔd{˖-cՙzbΝy\nYKDVvb=(I^)**bӦMٻwozq7Tgiɰa$Ir/G+Mvtu$~jjGU<[OKM"{"#I=$Igg2oeNN;t 0""Zm>:ۻo$):!=rrh~AA,heiI:˗yI <_*F+rW"I+8|JD-w7߫s2zDe췱$ɽ))492$:y{GS, Gp/YXRݻE~D?SʠϪK,^͚53gxg>{ǎ;{d2:uFFFƆ~!͛7Ԕ?#+ ):}p]]'|>r]Haa˫.5,NrH%I~K#\/;l)Is9,.@dHU<[OK-'G]5kVZfӋd q "rj dffM6cLL Lt933ϒ$3OgRa7#75<<ϏJ0~nV@rz"$V-ĉOeheݓRn6[L߫To/nB6ozjdvT(xJ \TEsww`FC?/,},,Xk32; Y٤ ^AUs]v߿?OHHx QdddiӦDfff?2[)`JGmjΝ;^V2YSH"0S07ZIb@z{|HguzGE5MejHE:TTDnHZgݍu{W̜T6oޜLLLNWUң:QBa S7@fg\9ZdM\00iJ2hI)7բCQ'_!?>LFޯYzj7|CIu CC?$阰^8!ݦXG|bKrHz 2%!!l%kIpWő;EǤxT}Vu^_4?5k^zqϞ=bmk`latN4Ā8z5Px, } 1 FtVfَfl=Ty$EPccELxbb"ؼysR]Fsg:z `N IDAT o֛כ\2R|n&r~O@1*'=QEX?&M yI)Wݺ%8`YRBI84[mFxwȑ(M[l!.\$13  cM$y&ϒF{yѿ@66K9瑄#Rh9v [CߞIegUq@\\\ءCj)Sc`70akժŒG:}_hJ{j,g~~by2+Ww-^bIr {1o%Adz&+RflYtu3A~mRRvxQxs璒PZo$ӧnj/ cVELK )QKU|Uϋ>$''Lb6.IL6;F^M^hڌm/ŏoKtt4$V$AEwOJUJ0jRSߑ~`Ͱ0E[ۿggg9s뙑qrܙNIҳ ޶޼fATߟ-«dp&9ߑ~L/(e7oO5P6*>:/emۖuiӸu|¼yhiin%ښGǎL&\.qOuCK{"~4v2fof׿f͢%XTJ”CuϥXE$q*bճMM6q5ܸQ?nQ\"Ĵq#I28=4bsWTsu{"##٪U+Z[[ҥK$\==׷50*LLؘ@I/ѯׯӓ糲Dic2'3n4v2JJh(ƕ7ʟʠъ]aa!/^w}գL&C#بQ#:88pĉz+f.dRg*v^ejA*DhP&qԩtLK;J\۷Q+bIJ ҃YY,848 pѳ'Hy7קwIa@41jud2質8 Viuܸq2쁤qIطo_o_ر#kժEI=z4 սٿf ʥN'/ƍ$qq(˘%:&mOrfA$OPmV*=66"Nɾ4_c'GSqTQv?Um,o}?-n˖zd\n[l[fxQL$iq%IRIǼHUͭXר ښ}3(Z7**666֭O>ͣGyl޼9sqU͎~JJiՎufyyd>FFFjyq=Sx{mer&lLF笈B.pQ[TSpqMWrJD:cc˙7 4H\\c?eeȑm?)ϝ;WϴihbbtܵkO>-i͜K N].pwg3*yup!Ņ\pi<ؓ `&&Oa5 4HE7߰]vf~x2e \|9;wL;;;Θ1 $|BRT0_c;Y ֑#b2}t֨Q ?^֘ju:uJ:ѧ|Eє$ITV;L8ۮoF#dDt}<pl#&L84ș3.׋y .̌JVe_KIc:f  &KH]iPpU\zhZhjJvJP`]-iʔ++Y, A8 h H%o]2q` Յlܚwg$ڵE:G^^9`JD* Ѓz} cYۓ)%HJ"r%Ay2f&%XLgBP#Oߗ} xv'{K%sj x IѠ(. fӦMYN^r$1!a# ޸ѡt3yw2ݫk7X\,#dcɬ,y  `R(TשL-Hxċؿx >IKK{dO?=s奥I琟iʔ⻔$r 矋A777V^]taLL̽ju+(!!0Z{z̻G^e0{B~~dӦd͚Ti22a6Ld`߫!˗VC*>+*ۗ~7VKm+B%!!4_cf$j^O^xxx{{%%\ʡ\&g8B.=Qvr%=ǟj׈_)Ib#V @YBR&<089cãLzOHz&(6 l 6D(Ћf&B dLڴ?N/D>ɽ3wv>춶;W$D H3Ąׯ$I,.gp+J3|IIҳf ]P1}c:%I\J5))E Qsy3z-7o:gڬjjqFBDn"㟡lQݟ9 UljrJd<I+DI2YIN켩s5QĦMٳƶm'NamǠ.,-ayr9CB+aFM@'3Z}o1d|>pmM7aG< ={//``ܸqxWxb޾?:uډHK 6@Dz֭ '%tWuU ߸ {0콱}|b8 PoߕXx5<~3V _^˱ץhTիe8 … Xt),YsԴ3 EVK""B.zF7!xDMnaq"%BC3x0p[ov<]w;\wFKL,Z ?HRM  v{aҤI;:`\&ٹs_N6Z 4p0p0iбcocԨQ>}:}]ٍE>07^Aohe[oHGhPtz߾Ұ!w޷8s\]8|6b~=?}{`t`P (qáCO^MVG 8=<0zA[VFI˴Yc\ZDFF>|84hʱb(%ޜ|>>,)$I(!P(]y~(1So3׾"WKGaj 75.}>YP@2w?<5Z I,FK |ЏRY1-GJygȗ޶޼Fh8 ,P(8?::е0YxqɄ;8A Jbpj\m }L 䯿$J8l0ZH`wH-IqF_~LJJ^_ě7PWdT ClHD+jZ!7oo]tDVRz:J5c$SSŜSSrza7od~(;P`(a\b*`DHPWc;qT()i$n{>>tLJz(lB|dv6}kw|ċSx~~<'ׂBеjBypz{2=QffPX˞/JJJİ0qciSrLCBBOё$#SRVQ145uFNL``3#""3R^N :RJ :Ʀ6* .YŹܹSa_èǿ`H-UKIkk3ssqI޹s͛7g>}7%!!ߊZmZ4cJcb(W(x8;[D&OD?Hs=RgqNѷ>gNFI^z/2۷oO2~-"{YJyN$~Q3_<3f\~=/_ݺu{M[~>9b$Otes(S)$iҨdebb"GE3gsss2:z 0<|()Ifӿ?U*&}DCW -8P(8 yy"an.hla&_~&4|OfTvɑ#ԳzGj=`\pǎΝ;)8k,;vǎcYYIl4n;tgٮ]_?~$y!ZC[KܰAֵ+y(iffF777&''h1%e U* eAuF&'SidHSc0Ӥ$ZTlYY ].0G%|9}݈70%o!mے?,:{/BR:.N:}4AXvm"k,+WhjjW_}$(*%o~$Qep`6憆zĮ()'n,'F^D56 y"ةӽϭǣEIfddᵴ4qʔ)M%gթEUoEkɾ}3ϛo Ik.:99QF,SSS)Ifd젟_STLLz}!xsM*`Uj%23& 2/޾22"BO6Q[/῰Ïwp̾1N񦷷X.r7YT8M+jr T;$IItJ33VΠcyq@EI }ePPP%qo#feKI&Q_WA])$Ȭ /_@L^ٷ84캹+==yT( 995'ڎZkuu:u*I*umh ]ECu8I2*;Vi15=3lNak֬!ܹ$ 0& JCɇaŬ09 ZT>{r2 ZOӰaRɠ 3p$qI\Dȷ&SRjPF0bbbRM')TU\Gj MuttW.{}/IQ1ѲK ,Iujf.*rFE͢Ѩ^g[(}}X\2ӣ(S(eJ %I"E:];2.iEi캹+r'(I"Ybj*6BC@]XKz~F4W* 6ѥ"ۢIҒ\89́?$߷҃')ڴ}`}PSV>^w캹+≮R:yy}M6 4i0{-T3>]j,O-gh*d v di|/>*qb"+*ȳgLJ'DiLcrr?*2YPtN; {֭[Iֽ~x ]R"jڶͫ$zέ!aVÆ"HR\LzN0666sJ9oKB=ޛEE4JHJ"*0ʍFY IDATdT9t\|a1+QMh=.O?L&m* :'Nqz!!bnfF\It\ZMVlMc FZA`emM6kF:$bɜ;w.r9۴i={`0P`DJAhdޅ<  e<2%Mco|JE$8|^cMSS<:^I%qdqt=,AAOCZEDmڈߩS$ }?MV綞Ȍ$;wHGGAՒٜ7o_~ aJ*z{ۆP+溆G_ gQ@Z~H[ooZT|'.i^zWvcsBZj+.<ܰATUq+XgJ]c|@LN:Q&}֭WWWv^JGGG9:wR8i$lْ666ڵ+?=+tbM ,іO^^yA|_~lҤ *g\ SWS_gpzyWΦJEPfTTǑ#$6|9lÄffSLL-A]X<}+VL&ڵk jTTBnA3AL-L'^$[+ɋ$yν(ȑb- [nqԩ]S8yҋ ڇGh4YpC©!Bs2zffWHPKPݽRܺUdH1mySg첩 7n5-cG׮5Ԕ=J{Ш'>,#ݷv)P|AAl1/K.';t~$ѣe2x Qgb2TqdJj _gp`Al$*5Z''LJfJ%_abISԉܸyYPz7)sqҡIJPBIdMo߮aj!i;w)ػwo>Lj#O2\~=/\^x>N A6#m͜s-ߟbCTUxf i42,#6W<uz=&֡:x>l;e2=<LŽMҜ]e1pDBBs,E:s}}iT۷yKf ;;wXq&On~p{m/Zkuu-d2R&q׮]{}Ĉڵ_^L X}#SơC$Ă?8!/ٳE`NNO?$YRr~~ء3jFP0qY"%ĻJ+G"Ҿwﲨ{p<&w'7ndPze ^ߚˮ.c@bIA7D .OZ a6DQD( ݮ췉Ȍ`=h҄~$yĜÌ |immM[[[._,/Oat+T*Mߒwneꁢ%%-LKcKBy2'TODXK.B9N<8&+Mhڒ/xbx࠱FYGEհꄮriW^ݻw3;;oIHUصke2C‚ heeE?$d -I/4GeYo4ѣb\P\RZZI&Ą;v I%2 -[4$w+xXf0p[BAd%Idb5%a'OR$nNU챵cbxoPua|M}e2Ǐ@b. ..]"%e2V:s榠M4ČN%cNJ$Id>};w֭[YZZʲx.JeAoo[&$TVܭ`d5Q:-7Wq IILhD:fT8YZ/D}U\pv:`=7O?4mJ.ZD^V="ΠtaD{y, 3>`=~ݐ,WGܸQ<.ml]YpD>cƆ~!XZ[B`Jt,)fԬ(* 6e{2K+'3"9ijhJSSǎ?0+&eǍ w҃T.]**nW濈:ku133,7f̘ L&ѣGھ}s<{,hmmΝ;s͚54 z#U2BV ,[&.3 \h?$I`p+}}Xhxз/\XVLI&%P(83*2E|믓%%u7v헶<yD!R6UQχiߤfvo\~k Ffgp{j b2 #iӦQ.ɉ˖-cZZL&&. 9##en)+*s<#EDַ/?IdYJ} ZL ù3#٣}{q-ZKPS=9LZ]Ƨv?ş~EKsF6utaDOAxvv-r~RX\QLw;mW\ZEVÂkf&w_-*yyyhooO+++.Y,)ɘWRYPdLk,)ɲ2ƽG*+cRaFJNyhD4ұcSiƆ2wGxܳ='b`߸ʪi?89]ȠArJJJWWW>xΝ;d\~^D:88ӧ9m4p…z#W;w ͠AdhmOHbC^JuΝKVK.aamǜc$; J2I'srhnшO?؎Pjt%}b64YLOr 1ua|oQ!I[{ͱ(2M=L։]9%94DV׮⒧&OBRR.]J{{{^`PPb޽}P~~Mee ,]¸m]5ܓbugeq)Vۼ/6CMhӆcxsg/|zӔhaFssU `Uy뗗OPSVݻR9%9|{4_e4揁?B_xQef&s,J b :88‚/frr2u\_J=MmN9W&ӷouwY_-L(luw0'#CxUDȅ YʟCwTeϗNk_9'L~\.ZvrYY]EHsuO[[vvv? Ύ2֭SL\.gjj}@׫YjrBmhW턬_/5t꬞xB̝[=N{]ZjK.:4Ef>ukQEsÆ l۶-pРA>9]\\ڵYRr ׷a%o{&&~B:3 0qy"ATxdibbx)+3gDJJEfϦv^^ >μF_7"Au|s췓WD}= NU6ZtEmH9" ޱrJo`Z FJ9:_?d:?#><~\s{9*J19ٝm+[3)ShYU[oQeTIڟŤl ޹%Z>>|-&^4'z;--MtFX _[QҎ3&]ܲ'='ɪ2 JZ3ȃFpp0e2w]$I1b9|C&OLsssfI'V+tz:䓢Ʃ~네EYF^%73I޽{=z=>Lyl*`L4ʨ֊2ފX2K)S(8$< eebZ /h 2<ȥKE:ys4}DZc%7^YU5<yw'_7KKEQM&F TBAtF* Λ7666#Fp׮],,g~eFGB'*`PP'&%}NMq$J5c^PЯc2Bs(!*˴}|ܟ@1Ą>of赃Sp]F]7wKK%.J ⴴ+J23ѽ J%I2Y~k)_)#sLJDOO#}R@,((٩S'`.]afggЗ11oTHgzffg2}c:I pFe12&%m@PߊwYq`tp7Ҷ-L:GjS_~vu7 ⷍtq0ܰA =-eI]{Ĩw@SN ׯ_s433g9 MMM!IJ.XǎOjBn{hKRAІkʡ z^@LCɢ"Κ58gR$fdJe,-d!6oϼsy$IZ'hRqszvMtoϏ3{!Ggn]&%?/zBYj#jA??-3Q@V9҃ޭrjn N;`V+%ljh"WX(ˋ3f̠)MLL8f޽Y> T*MTͩ9Β<~Z(Ef$so&REVҥ挨(IKcK_ճ3 FERLA"W1P.jj%1kfP3To>ŅޕNFɠaV>dyJ9oA59Z\K(|u& ogz9;۷Sy0 |ӄv_CbuM_aA]CEfXU4z\ZJAcU6kl8|(1 |{s-=KۗhnnsǎLe^Y޾=vͳqqo3/"n2eU C ##}* +#C(lo;wu WEUY2"-Y”ʗo -W[V7Ԏ?_Z5{ƛa@kAjJj]<)IzjH3d\/r;&njʎV+)Ɖxy{9ܲe FԩSyQ0-BTVys233w89ߧ2lo]FsuJ BC SRMd}ʈ㛸҇tJrpÿK]dwΝ{GB2t;^uhyL&Ê+͍KԪ 災{^Q2*L8{셓^f4Ξ:tRRR0gcٲeXbLLt{ {Ѥo=LMs  %_l+j5^E^%-[byְ-v6mBaPy`K[㓡`Ar /Y#!PtOP.@ >31%wn캾 ))hߠ=f<93 tN IDAT@FTppP\ %.MLMԩS􄏏`Ȑ!:u*&O{xG~yh˭4ih.Z!t> ̛'8rBRS\2RA4@wpt므DwiKj\ _J6ƠVлpgCF-q5j  ,>} 'ҵhw}?$O '#(C6̓((/@Ϧ=1EͰ{7s',=̘4hGСC -L^xAQyBqqd29a)Ӎrȿ ` 5FZ{=Z IB{++iF ŋG8F!h_8ĵk.͆ Z@#a9)q22DzСagӦG􏝮=i俆Z}-bap!^:pb lĉcf$#֭[+VGؿ?:w=HHxڭCӦ@k@{ 9֎047&- v&&XxY3yڵH"v]s/Ş]X(,>ЬYJVZADN$$-Z^גȭ#D~y>88%Νq.]Z2aо}..\8'Oիtիƍgy=z8@(.iMw8;hH7:JW(Qfg aF\CYX t(/ǰ4rP(d3\iZ IA&մz5@ d(+Z}o-;z]xleVQ!mĮW_Us\}p6, ڎK^NS`={ӧs}{K1vF舱cbĉ9$yyP@ag N|,>-XKadcv#"qV^j5** 0*;`q"HЦ 8|82zwWKN"B +S+ i=va9nP 1Q}{С@۶aյzV*$K?|!z5`ndu2hl}v+B7Çɓ5gf@hh(^|E… ")#de큽@t=.qo6@E-dF7|׮qp~(-] bYB:NΝUj:Ny⫴kW­9J]_#r0/‘s=CfPp<8NFDNiZٷ'cF4^W8{V$^sr  A3gʕ+˃-FѣGcpvN@~y\^ 8[^@}E ]-d2ػa*[# Iea!R~ R ~JHJ߻m[H# ZJ``$6EZ>H!}1m ^|Yk2%2{ SYiPۚ>>6S1 i1>*38!iu$Nٳg\c„ ;v84IB^)\X3h8:<ԁ(hЄh`NO;|qEWB1,,026=]Jܸ!֙- ^mq'7bm1Ld&լz4;`UKDFJ\k;HYY6oތ7o"&&2 ;wF=h"XZZ--Z&Ozڡ\_cgN lNl JJ`۶mxg/I&(,F\ܛ(+A˖M@5'!cKl{آڶpPKWTgmv\^.mKK,."ʒOq1"z5/`6֯Y+Q~v&KrQKbXӢdwjcnM8q2K2̶,ƶ<8{VuFFjaÀg~ZN+W._ ڶmѣGcgЯ_C!(,TP&&ppGTV%()>Gp]kw#KtHc qq  "Bllm}Qڳ+Q .n#8#%L>_u6EMˬV8zT<])jLA"`_>:äDž34o.拌t<Ν;+Wm۶ń 0~a2% ~EII8NNa'{ F'QxBt`# U[BKLL0C,,0$9n*l]UF#д)8xAP+f@ThnMa SܐAPX:u/&z]Q̙3;;;DIHo[MBWQ[-/9g,ݚt|ci8w^y \ . RRajףQYiQ"|8m׵]?;GHjfpoyybmȈ.|7ɵOV{|ܹ#"˖Zkm]WVPT\(^ ߪU3" 0>  blh녋DvDLFb?5r$п RRʕ_qe$$$@.gϞ6l޽`brPTI*n ,5}` >HU{+8 qZ# \r B5THe2@KK FH,8X@`y [y8ubI] vT*1r.00]o\I(\<8ikL;pM1e8&w'"v?.bs>d0v,0bDrs8Ξ=4XZZb9r$v P\Whw![a (VhV v#  f Ph0T&Co[[ w1JG)+ъ=Pڧ;nF%8cp%=f֤:ua_CB0^/b"g׵utС{Uwf{! =ҀPB(HDTċzX. HEPHN !"$!!q$ʇȄyΣsf}w]֪?fƍy뭷0114qY4RxiSOI>LMI).>3X  ='-Q7ƍ\~m,YͣO>TU]&5eciozSo\d96lp 22yJiNNLut:7WrD`tԩl9Ȭ8~k_˦uF|1HDxCa,Jshkڨܴ8p@rF6nFLM_2> }n9S6v]EiM)6F6K?~tvMq[vvinϞqSvr_CϏ]ҥKGBB16N%%q%(*bn:qҟ}fĔP\P JLCM10 X6ĖrY BMLS* $,) }P$$H{IzKMִEwٳgӽ{ kd}ْ3OutlA[(tnndOj5hG=0~ߡb6i0R\89&!a;wf߾}bjjJ׮]޽;QQ8:^x1Pbjy J#QQ[PZPq1( ?춮 ^sDYVFٳ8qLQudپNwP˲);Fh01 6W׹y;9y$Xܹs1|Lkxg4:+;;i7"^O[7|)(VFX!M~ 89cǘ6m`̝;ooo7sT3qrZquUM&[ŭ̾|\AP0Wχ?|TJN17v.N"_`J c'MN,9KM͡isk69#GH烃%/W/j;u$(mؖc kWv%IJ+:;$ɒiP!* ݳCL~ӧpss#**pmqs+Ň<=ff11E'*Jϒ4e;#2(9!8dVAbY_sJj&mMִEw{춮y\"giZ-E $"{xv#o  u{O:;$/۷+ؾ]~TJ+vΝ՘$ݻwCUUVVVt֍Nh7<**b).>@MM8s.G9KsJcK)O)::u0cRzK9GKKhPDCك^B4Ъuڒmω?ӤdPF1*ݛ>:;x;Fuu5mۖHSbcs8JKVK{ 15 PuG<(?4TEdb*Ȑ,_R<4")qMִEwk2lذۺF=PT$nVccI{Sۧu+mvKSz{O {|Љ{a~i 0PrH:v0'gB__pϯ]mi$&z(3P%q%rI0ImqĨI./G-J%FFU* !i<.23ʚ Fۖ`miH۶m6m&LhҥK?>'Nx@5;e3eO{`oOem%O~_ =)*KfϖBnVUU2w\fϞ }O?4MsP4 '(*LIN( 8 TZ+_f&22( [[pq."iK/QС-_'~ *b@^jFXo^IOHNshk[eee|$%%q1ykCp_ɵ0FFf?k\weQ_W6lL'NwlOe{j.HAl EPDFBHH&&gObbs醹9k=lm3>DFI^8`VC] ^iws!̅(z89Mi\.|ouqv8Ow/}de1'=jj..DH9 R/ ^ᬾ+sc璜+M`lӤ:hTɓK+͡o}k׎Yd >3f̸5=h43+ $(QQK컼XfZ]RvmiԞHs%هCJӧ?/ ? tuGY˗/`hhHppN sPS(+;N]]*)ƁNagZrvmTmM[դ$VXAn066~ի8ppĵّ;?0QFKʮ?vs9VFr") _(΅cRVK aa`gM$6ǎJ?aaaҦg\꤁Fr 11A%oꎹQcF2ԥSJ #┫C5$ɫE v邑JuG"{Y; J0N\\QQQh4T7\)?Ho/(,KZkZקL %;vHRYAXOxx8o6<uu9\ W|Ri8:NEp+d~IMv ֏X3Q|Ǘ/ZYI)ecсR7n? buYrt O~^nAX.KH¤@`Fݿl󱱱FgH#׎këCҡ9Oli 3ϙ3A}~!懐sڛ*XB唴m ^^ꞥ>>낇..\$BZ*>nn gojzz:DDD{מY.]FѣTUnrr$Gd~طOx%.::uezC釈ˈ D9GdAA8IPr0'lm%]:,,Ҩ=Hrr2(J mG@J\\?GYYyX`lA]O4\wJ = QRF2GPTTāhȲePtrrydp LҚO>''*xXHHfvI/^`*xiI{к磏>b[o1rH._͕+ߠcd=WW]%t*NW` Wb֢rm0uk&;8{}()Oih~JKόؖqm16p"ga*){Z-E43fI򰵵L^43rJLBr#, ( Hk5JOORv1$.![à(A$5"9NV=(배Z}9srrr?||lСC^lv~uРAڵro&@Jιo$%I! ?#8i^%er(iEy3};BC6CFfG8ĤmBPPGreII JbVb}@=BZ:' yA q8 $ @ vvyT(/?Lzz ǹU*xyy//\]uqv.1q!24*MoQnkNv@-[ve ƍ#Ceǎ|Giӆ+WvZ֬YСCoFRR;v7= XTҐgc![gYtw·?Kg U_|!\}VPqvѬYXnkL4 =:TLMqt| [ۑ!trERjX+'cŌuy|u 11ޞ[҆+P0nU0K-eW.(ٛQ5_{)5!--M쀴j8w/$1Ql[\,}oj* 64'J%%7S.@PmMMfPGAOr_yAz \\0aìjS;ҥKxxxСCkG ij#$r?/N:rФ9}ԂT4Brt=,= " j҃rқS'u8uJJUҾ??hӦK,ӔƓygO7q:::Ҧ޶dĈomӖڽӬI||<;vdҥ?|ɓQWWGDDݺu#))\9);нm[l:{fpqz{WRr2xqiF];8}4g~ʊI&BA623`;.ϚКd}EJ < hO9gVˢ+WXy*j5Qffc5fs6l_Ƒӣ=\t].32qkn kHRCP@v@Z0BHk??NkUү??=hGe \!%4)9)\- ..iwSj}Kmrڙ3UL$1cNhh(FFFl޼B:Ϥ?f5?.-ٺT;IspфV5]x^ 9z*=X/z~Rsŗܳ>O11חVdzxaeEOŋIM= MxYb֟_l&LÄ7hc̙|~4*++qqq!223f﵇2Is'Wf)$S! Sũ;CVYV9s|}qoq/kXu*%%T mՊ1vv*(@g:)lBR rt3jeCOG7n<A9 K>R)Cd&e Gpp0hÇ[sJz Ə7'0aOyGʐYR /0~<.::gO=y.=ƂCl:m f`.Eq7ߔVHH߾RZsǒJ!E;EECy{`E00-{ȴx )1\9{V<}1VSC/~sxxCc+lh!H+:{P*p2 ugd>0o<.\ovW׿-cyR):TJp4k ~~^O<< y{ۼ]ajT6lh˹s>ov&1w7̙3Eѷo_=z4O<;Υ` +p5.\x+~wsPSE\e>'iK#|I չlcIV*ѣX[կJ3#=Ծ=/OYϷbͦ|u+>;c;Mwѝ;-ٶMJJgз䔴k'=;f;d`֭Sᔔ~gxK[baQʤH@.H΋̽ccS :j) ğN Ρ<1OK÷!܃tnM)Wl 07OB(8KnB~ם˗/˧~ʓO>Y~РA100ZyJi]ٰi40u4[bcCNyՑ,ͤKgFNePԵl(w)ȑ0aDE :_(,,$00ѣG3j(F2z Z=Y?b!\ 06v-VW yy.-EPܜ!Z(ce)Lj-뇺_[6(Jћ@^%udv}v~Huۦ/גۚ;.]>^ 4\\\+/?7זtIiiNʙ+r^|E-[F^^uµM (޽{ѣG_~e> o$'çš5b)oԡaÙ ,8cobϓOds2X!9#ii-9"O=665l߾7RQQA=z4#Gܼ_]GYQJ},-{ӪcX9kr[G]azvzX z5U]\[̆Bܼ+66am(Uo'|*NUU`m@kǪ55*D[XҒ55څbViʦ\{wٳI/TUڤ5]]ޮ+]ȾJ֭rHƎEq̃Bnkwdr[wd{1v̙3aժU ĉYb/^uF~~~Ʉ!-iVF 3з/5ٞUɫxv#uDEdГ ڂ%GdvrF XnWf޽jBCC{ 5CCXcӂ0]~+a{Ahpק%}虚޽{t55ЪtNM$+g jj0Kg"`ߕ+ثWćr[;&ڝ#?3yz]3fߒAhh(}/hh4ʏS((D|ՇB0|zF1xR֝^ǪU<^|1:|4?ꇺʘ~w߅^0+ĢE.d۶m̟?>GGG Se){)(FVw\ * =TX9ܟsɘBG)zZb݉㾂E(,l)_~t5hCC?ݰgzzuuttpΝi?d/3_aߕC|!aJ^tB74qC@"dモBHqGp2KjO$Uţme Ll"9#7CE_)T$$İi&~W.\{O>{ SPCQ7VV}^~8e{pw!EͯEiļ9=-lD{KWTę < ]Ϟ}nJ\]-DՑT_[~)#9ɹϡR<(vLA!{Gi(!_~ ڵR9s Ǒ#ye^yv:l<ɛ'MC{ۻ"QAX<ITBѥ`1_fPWPƆ09 RϨϧJA7{305U^01kvfٍ#~]:ӻso> Vu\k|5!"bݺ `%>^rF6nȗ_~R$88Ν;өDŽbbr}o&3sF=|1wP@r P `ۛb@]zՔ@c`fƏ & 0i*dDFGz$iJcx9h0 b .dY~;;/}ױ6{z=׋7>MU;{J͒%Rw""F=Ei>m6.\+:usW!8JJzu%BQ`͌'})ѣ4/ী0?#ފ0GjOֵRWb|7)eddddddd"rP*!4T:~ [JK>AݻnQ3—v^΋;y~w wvyagDnWw'Tyб$<CLL k֬sssڷoODD.Ʃđ55 Fc:!WPt ${PKiB)e?\ŠVCW#&hjP3 2222222ڇȴ\`(hQٽ|ѳk.t֍-x{+m1cXyb%КN.<3S?YYs| [?F1l|a%aŋ <BBA:Iii" fV+qP ۡ5eCFFFFFFFkfGåw޽PU9v£Q%C>t$j|A)+3*h"#a Ub9~<̙CII k׎m-uQ^~̬yB rC}Jވ.######}?a`]JnjRލÇM{J*+1եwH۷_~~䓃`klK8{ERpJ#8dGl,*P[R (#lm3(/X;w.EEEXYYB۶ plm+dCFFFFFFFkA_twށZ8q%avX] U+۷ Y9\F•2Xxx!897Ca\9̱c իTWP8{\8AVV,Ilܸy.GA0Ch!"#s7BXt<7]4q|9PYW+ySLKNShrnL6=m7KSk%5m6ߧ̽!/ lܸK2~xOVV.C鵛6mήs^ݻ7QQQ|̛7~W_af:H˃8y֮e0$6mM<]`^-##s5*#p#J ˗/ȈƍԩS9rF!--*Ӫ%\%%pZ=JSZ}d<3 7ŋxyyahhx m{gϞ%77FL (\G6M oE֨Í܄ɰv婧ƆiӦݴ\UUO3EEE=zQl5R&[<*++Z͎շ6kTTkL[F\ڬƶRꦭ}F0qD?κu밶ik˳|Fa\쵔i}tԩ=hFiƶu5zh>^K6ߧϻGv@n?ͭVh4&M?ʕ+8p` 22IUUiii۷$ܭe<(d޹Fe}<(Z> ^^^PUUAd<<<^3ed^Kс6ߧ̝\4*6M> d8KT*-^|E>@"::ZT*-niP|" @ B! 022>EEEUƴ%ӧOBPSSS!݅P(BOOO+ږʕ+bΜ9>xG?/>3uvZ ڬƶRt);E5*MƮFmi{dGj aee%~i1o0[BH< B7N۷:b޽bBPrH[misݢK/tO6MDEEݲ\KA[Z>eڪQmzM5vd?d85ضd?< MF!''8vvv(۶ܹsYr%}gbbSO=|QYYɦMxuŠA000*[ \}(_QQQO>̙3k [[;zݼeՒ}=YYhTÅGv@b,--ٻw/]vk;ĉ( """ kC+FAVV۷oٙnݺՏ)c˖-t kk{WQQBC]]:::bK}ӨWO5hF>TCen\R111B! 5sEE߿ kbnj#ju*++O|\Yt)∊BԩSo: ^]]ŋ:t(| gN0`o66lښGy7RTT޽{ܹMmCA}Iݟŋ2d̼BP(޽{o˖سgOgOOO1~="((A[GSLdP(ɓ+7qD1f̘[֭1®YFٳgSNE RRR BѠ?uVXXX͛7׍֊Pѽ{mꫢcǎ"##Cq '''ѫW/QWW'Fv*xm ///RDttx| >/hR˻}UB4F;kj1)Qm@[5*W*4bРA\|W篽5hF>C5z?-bڵ/ѪU+P(u2C4hɓD pss"$$DT*&T*ѹnh̬={ƍ",,>bƝpm=qnD||<* ѩS' +++T*ptt B888[N( !Å8p077{ ,zJRlٲA[q5YYO!dj3MQ}P!dOdD(--iiiꎮ+..gÇڵAAA_~bԩرcm̙3b̙bɒ%?&:yN xĀ"Ȥ`Rj芺\NJܨ,5f͹-?ҕdY0Vt|qux|~_Deehnn^GGx焦i^;t(֬Y#:;;'cE||;gl'77v=ٳB}nk;M&XnN}}ŋB455TwUV˗/?| oFʧgT| ,*3J /Ν;AM?00Ā _t88}4l6ǭ 'tٳp\~@FF5tvvb˖-ػw/<]}x/cfsLh 0:3*<D__222&[K0)6ESUk*Q*YsL]kq~)&[KUUHIINM9WcFidA3w-fT_͑<'k-Sĉ(//G^^x {imm`Э/>3=l=f kaƬH7@ѫ66O>=ck[WWJJJ0::|88xg=J+9y;Q DȜ){cFC(x2N^OZ2fEnnx(v ɷ}b%2o'3JȚ3woh, ٌ~}}}jhhYkaِk'`ƍxoNmb%2o'3JȚ3woh, |tttl6g4gl-{;y$6m5^__Yf###&E'Vr v299SzƌπP塭myMxpYk[jj*~'jjjP]]:M~}b%2o'3JȚ3woh9 2.]Bh4j]OZO>$Μ9VsQUUEQ0222#Vr v299Szƌ&MPtCRRRTһL&:::PRRtш6M!Vr v299SzƌπQ; DDDDD6<!"""" @(lxBDDDDDa |UVVӉsbϞ= .L&+WW-[|/UUoM[o!*f%y1'6+ Ԅoc,---}l۶ xGFڵ뉤ٳ(zƦ6 6l@rraFnjR1c>cπPPrrrPXXJOO7<<'^pvׯ`Zch#...$}"55NXޏ`F'pc>|Д9rpr 4Mٳg| ʐ9sƷ~U/FRR >%|3짢;:kooѣGQQQzeee)իWcxߗhQf|2`QP\.\.e7nDbb"y̛78x V+.\W^yxP\\;%K %%¦M`2N=z>X,())Acc#@cc#dOuƌܶQ 1ގz 999yyyw}RK'f%y1'#صkPBQaX<iiibl6;=VZZ*t UUgee cuuPE_INj %RSSE]]BMʕ+uuuݶ獵Gp "77W\pc!E۶m %>f%y1'3 {";;clhYY?s_Tdؿ?+|W(--Dl6Ǐw9NtwwcŊZxG!33lQ^c=snsӉ2\|0L`4qԩČLOO' z9rP\\1>vkbڵ^Es砪*ݧoѢE'ݧixG؈L,] Nzz׶_|sjEgg'qu'& f?(ɆI@H撚 ʽŗ-[s9s`0 ..NhL9sf~***sN:u ̦eժU/g!77?.](Qo(ɂ|F?,Xk9-**BKK N'4Mĉ^ssrryvmŋQ^^>7ݻgu]~ɝ'ɈeFI^' xBLJ~ry睸{h"?=6oތRdggcÆ ֭[aXQ߻xٹstO~x뭷`ZaX 脊9<8e״23mΩSVrrrBTgq P@+z ySawg^kmM)B!B#vB!BC B!BB!h"B!0i!B!F B!BB!h"B!0i!B!F B!BB!h"B!0i!B!F B!BB!h"B!0i!B!F B!BB!h"B!0i!B!F B!BB!h"B!0i!B!F B!BB!h"B!0i!B!F B!BB!h"B!0i!B!F B!BB!h"B!0i!B!F ڵkN'_!]!L(_]v#GRvmbȑM Zddd0sLڵk#u7 &&˪R :.ϥ|_׮]?~m~~~t:.\'MNcO*w'|B.](W:J*=ULY9ꫯ̙3ͱmt: CCCtoN iii^7xڵkcoo M4a֬Y+&ϢE Eӧ^:gܹs4nܘ'NvΝ;ۗ?x^{5XhM4^&Mʵ?>_u277հr077q̣ҧ>Q0$wϐo1c BBBpuumnnίE*?###۷/Ѷm[;i֬ow|EEVf͔i?Viii/_4MSm۶J,c7o4Mu%h"ijݺuUrel'@Y^z)u\L4Iiz4MSϱ}СJ4pG3qDiyvqPBFtL4bzMӘ9sf///ٿzZ1|pn߾Ͳerl_QFxyyެGҏ[ ZH:W׎g]}EgN[~VPqc ƍxlG,b@111nݚ?MIxx8:t`޽+** ի9CX@͚5OUR#FwQF  Dll,ƍc9&&&;{ݩS|29wbzN8kεO>l޼@JMMe…L6 {J>>>TT 7mDtt4ÇG)Lu<~yv#3f affA46L[GGG^~eV^Mbbb$V\I޽qvv6x'N̕'NMӰ1hB3Sq2e`eec%?lٲwySbkk Ecڴi^:{dfϞCzAɐW˹~(~xiZ_7oСC+WȼӾ}{^{5td@/]`^xtؑ0RRR(QD%KҼy:ğ}x"+Ws_777 瓗-K4\k0[ hڴ~X)SpQԩdձaРA|7-c՜9s&meA~PZZ;wF)ŷ~}($w-(YO#7,Y» %Ks^7<;Ν˵ޞ'Z?qD۷/Jϥ(,~d-YDbٳgiL]t)Ƕ7n(sss1.:.Wu*M'|ʕ+ݻ3_۶mijܸq͞=[i:wJ4շou}Q+VTk֬QM6)S).X ߟ糏_j4M 0 sZ~}v_'yڲ&OBBBԵkT||?ڵ4M988I*Wt:JOOWΝSfffjJ)^,,,fx}'6l4M{z)}s7/RSիW/{{zTժUR'>,OcpBij֬JMM}s2e/?R~S)OOOqEt2-[[bkkKdR z/k9ʘ?>L>J*1bj֬I~hѢA=Z׹sg nQ777ݳgdd7m۶̌[vCɺb*&L@v(]4NNN_:GY*WK/ҥK{. .$--Çu 9uaY`={{s05$w_ȑ#߿}q^u{g>NHHÇÃk>UWB3Sqp|MXt3u4m1U湾dɒFqq ˖-tg'Yj Ri4n8_|[[[.]cK/DBB$%%MRhԨ[l *dns{\+V4jYo6k >?>/bY'<^l_|55()w fffc'ɓ'y嗱c{O:t}ҠAL=ORzuZjEXXTT͛?ҭ[<9z(YO;F=z4cǎINk.oooo)W5j;dժU|lذEQR%^{5L:s}ֲ:tٹs'w͍ݻ3jԨ#&%..9zzW*QT_~e5$effB_,{[lQVQZR|:sLR5j;.cPPyw 5~xձcG4MS&MsHջwoU|yUJ5d羋-R-ZPJR5R~m7O!Xwz>9& ___:vȿoʕ+GTTTfdoooB䥠roܹ\p~5kr1,Xg}s+_D\/2թ%w!T1o<ӧyvSE3gRRR2e ͛7g߾}888d2avx"fy$O!BaLo 򒓓:teܻtRu.\Pw C_)Mɓsm{뭷JLL^?(3335suoVNNN&LPyhix[p!ǏgС߻v ,Wy?#|R!s/LUXsU&yYW,^^zxQZ5Zj… ׭]췎g6liii,]bBi<`,_Ν;?󠻈m۶QZ5ƍ=["!sa=zuXB屶f͚|2V+wvoΕR3gd;޷J*溙 (zۗ=zгgOZjE```wTit҅=z0n88q6luL\\AAATRdCJJ Νǧ@_b/Cò>4ˋSvm^ʊ+ټy3{OwΔ#Q>ϫF QSjY.бry8eʔ֖ÇvQVjժpaڶmܹsܺu <04ty%6S>O0khQ!0aB*J"00#GҦM||9֯Z H3t}WL< &_}?iiiM!λ'tfGEE_ݻk& `aa  }&Ms%?CbРA̟?d˟Ɋ+4h 6|ʼn!soe„ t҅.]{ۛ5k2d Ãk׮|r6oLӦMsM)׼@nݺō78~8+W[n(QcDzrJ|||?~|=<<>|xvYL01c`ooOΝٽ{7_}cƌ\r?a!IHZx15j ???ݙSC-غuk._hwww̙CJJ SLy۷GS\,t tĵ #h6!1#B̼y {{{7nSdsOO/CW_v4B觰nۗGQJ`nn?I~ ' ""s8pA˲eXlYuk H333  ;L))t *P ;0! rOO󶍼,T9w}O>᯿B4:v|3V*T ...W(Qⱳ`uJc\K0PFSy5^8@C.X&m{_>!ݰ0%i*5CȀŽF㭷"113gΐƍr TZ2e`kkÇsQ<<<[GRj֭!L4@LQӦK/eBr8r{U8!F*U|GXXX]|}}YfM.QQQ?}&f vaX[8!L4@LQpK5+Toyc BBּbs"Ǐ3i$֯_ϪU޽;kצe˖{9;v,rJ/^LΝ`Ꮽf隄DŽҤI G $44NwԸ1(Eӷ4N̿pE&?M9q._.숄0}1tP FRR_}7o*ǾUVe׮]TPw}/͛k׮<}PC׆ Ukp„Ь6m4ڷoc]Z{N :ԭՖPZvh`<=GR !4$:MǽJl vTB6OOOBџÃ|Ө .:/bHϜ8qe{zzҤIcّ >>iU:r6dxd$iR bSGa松-1̸N'@0E;v,׮]3x)LN&\]wnܽA8y\1xB̽c>U}rf ^J'8Xy杞J:JC׆FzI4 //|=o%*TgϞzUzz:{Ճ%u"JqlT;2DIITj  2B?E6om+%|-[). }Gߟ1c  EBgܛ3gwf̘1tԉcDza222:uj~f"== ^y|}} ٳ̛7h7o=֑tNz!$$COatƼ]&L*m ;'@0E1H{I;xfJ>!||6m%yu j8!|UXsY ŋӫWO:UFVXpWN璡ra=zup5n߾թS3g/qqqzՑڰ!dd漆r ##3Rad޽{Ջ:c7k,fΜ֭ˆ x7ݻ7AAAx{{sȑ'LږDWG'nI03i8Jd$\t)1t=_?Ȟ'K&55%%t'eUsIIx8ܹL awy9}4͚5?СCy7y\t9s0evM@〽=ac/0ʔaJdLBpp0| {Zj:vħ裏裏*{q8AyKK6ܹwӦ8nË_$T0ПMUBiν}_O ᆪ]r}vOdʮ]Ю@aTWy(+W֭[㏴$=zٳ,_cmmcVV7͛/2o<Əzv߸;:dԞNEV8!L</ 3vXrlsss~4m fvf$M3S'زN;~i âEF GUP7i$Nʴi1bD *ٝ#66%J>p6cy&UZb>HNWB]a\8~8IIImۖJ*o2w\beիc:ep0llB Ջ+V@zzz-[vZoXJ5CH Lᥗkc]€p!څ޷~˄ ҥ ]ta9,cǎV\ŋܹ3 >4`isq7.%]t g 5ٳlْw_n:FرcY^,YMݰn|Ht(͛@t!LJ)RSSUӦMibŊJ44MS-ZP+""">!CjVt SWJS_9VtQ(ys%CYߵŠ׮];锦iNcߨ(էOU\9Ure[~MJ_Jyz+F?7RU(5zS}Bd+-kއ~ԅ r㏕t钺|4M͞=;*Y#*6nZR=5R=@5m^W5vTzOM<~7գGK֭MZTرc}գFxyy1k,mۆ& KJڊsOg’lfϝ l hK8l=R:@2BBBHOO ˗/s9-Z^$$ŅW,Aˎq oq۴i^^^TX1=zAPPe˖}1ZϜɝ/իYl{U0 C( c@}GfхGbb0NݝPo+CSfѽfMjƶ-O0lX=&M$x¤=B4S=}%H[IGWM ާPTj^e^hڴ#ьw+WfݺuDGGy+ J*i$%%eτ5FkƌOV5%)#z^^ڱMkr* sCsBtN Nc*6maPr N]ŽX%#5j,[Mv\ re7´|hFnݘ1c'Çgܹ4m4 :F+uM:8q *%b( 8!LA~Ҿ}{4M{~J)4Mc֭F l]K׹ͮbb8CٳyTG~>#7ҹs7~x́&TsO_U ~|]1Sȕx]1s`gW u>|5kְn:[:v숿?ݺu Uk.ƍǻヒmڴa?d: 'gϒMoV~_/qEy"uD欄ߨ(bbbz:u4\]]4Z\m]E97^G ժQʊZ.R\}ǰaN5TsO_3fFt4{^z|@Lq}26˖U f͚ԬY?ez;،(׫G'33ZBZaDzhxB#*]BCC !44Srȑ#dzj*޽˿o'нpJVXHGG߸mڠmě dhNN2]-{r@ZB/‚66N݈X[s&v.HwJKLtlNM&M߱Չ  $pc+ M8~ѻwoO>/%I`g 33VӅHxr2]@X<_܊Nx1-D! ƔrO_USlM8;;&>t<06n 73ߺ|`aG+DnE1efcFB`ؔB{F|yaG)D& """hٲeZh˥K89u%..܉+6m %Pk+qB`L)>.ݰ8q6QݺsZ5e٭4hsWW.LSQ;}5l8:r-tqqΩSt*AA[ؑ Q|I侊+￧RJFe͔.ݗ7"nA7ec%._ Źso^=%&S=}%&nƥ w/ݥE_++Bg# K­[9żӗC+N [TִLt0@QrߨQطomڴaڴi3uTZn9rb ɩ+:ʼnD`b"#GŠ45B29g k!.ha a{q֍ocQڂ[kס}{JlePA3Cq:XQ SQ;}jQ 2<&^lyZ~GNL 'pY[oqMKóח*Uӧ3j(_ѱqq!'Z^@43_~_b즱LzƗeRx=*33ӗK "{ww~9qo=;b<+쨅wR - #^Eu6}:Gع0> Ù3Յ&O@{.cǎ… l۶e˖m6 K%9y'iTvRfflw sRk :sF/G%S=}*ՔkeR"Sx$iJukw4ЄțoΝpxaG-żWrv:1N\{cYi1ŽVI @JJ %J௿TRjՊЪU+J*exڵkSw4͌{ocO:99!!F p +5_~̺#S=}9:v$99-ocfgԷey h6Qu$KaG-DwJNކS'+ kM*N`zu(B#PD <==}vaOĉ 88'...$'ҁׯ[64m ?ȿȄHJ\9y "S=}98C,swgVٙuk>8p#s:-Ž\;???t:#{fE>}puu___x^l0+e͠D۳99ڶagc3x0:%7( cǎOV?:.{iڴ)NNNݰB) ]E:W||SMhu,//yGΝ;! s \׮-˥y&oؑF/\B Ư~e_ zuaG.DȻ &{ˮ]pqqRJ4nټys.]Ĝ9s2e wy$%%=HSG'3{%% ;vX:귈ti%Da}ڵktԉ}qӊaܸqiu˜}2e 6mHAh/o6xGBBXB{eÆ .ݟwb:+e7ҒJA-R8to9m;A(I&9T˾>Κ5txW%00g2O$B|Z:q}u3lI ukHMe(+O/X ~BДޏ:bP=zV\ɍ74lؐO>ॗfϞ=XXܼ6K>YG is s==֯pE1]AKA枡e}nnnnDFa׮O#靗HO㿿ذ%1._F/HLMdt= ժSW9j*ykoqȠTRߟ_~%Ǿڵ#..cǎYVg_Cqv@*]q//.y/3 -S͛[oѫ.ݸĜhC?]0khQ%,Y۷s >SY-e˖gؾDE}HDOMI5J介i;b|5.krw`ok\rZBLA^AprLlr\ V\┷75aF~6}h Dqg yʕ+ k׮qm֭k:u0'І{r0lIܘHOٔČ!8wy_J:GM.$ `W2fOk>ZGsf׏˗WDFnmXB[͙M~7W{KTek/>2i aP{ɉK9yr0>7t5(QKǚDj|1ݦORJr'|}Y,, ,Dqf yl2RSSy7kҥKJRR,dܹB|y8ÃWrS'ʾʵ,dР̙?ֆ?O!Dn2$W^e\zyY&oV+Y,CDsgcH28xm8pvJRͩN3gÒv(1T4~wYmI3NNNϛψ#oի2FKʻB>} Zs8;wʼn{qhy&ܸ1cc7kdɑ%:0ץ۲$ lذOOOʗ/O&M(_<իWgƍ.kʕ[Ns̙=1c&ּkY@z$%2WW_ oopwGQh IDAT\Ί+8,ӧa͚|W/3˖-gϞ91cvX92K.\rm5{6I rf27C᧟xecE4k&хi(̼;r 2VP )wccc)Qc~71c3fqO?gwQƆM⋰t)C ҍK\B3H p -PJ)ceffʕ+ ΝTٲeڹseݸqC-[V?^%&&f/T*))Iݼy3q PsF(PjNƎʔ)Oԕ+6m*(BC՜ 1C)++uqe>\=Gy{+URii Qء4 Zo~驆^]BBPIgOBT̢mN5 NR ZP X1@U?CiRgSV9Zy7zhi:~xN:m۶vڏ,33^w T.|;"F"#U;T_+ei2bcUPWTf)eiTbOUoooUJ_iiiCy{{]ٳgi]q*VTjHݫewou`An]K?ޭү]SJ3T??V{dd#Di+hYے%jҤIV]~UYgG yhNIQsg6TagCPO+;;F̻T䤚5kQF)'''@k 22Rof}f:s:|G:.rIh!*UEH:vRJ?{Uյҫ(+ h&UIL411QcTH{zbH H-y?Fy_?5u~kZ,̹s}9lĵ~ki҈ ȝ;+} 5i }Y\ @WW?GXXsegg\ooC.c0227V\`$!].hܸ1<kQ9s-"}G:^Y۶"2+B`|TPR8u 4iJJJpuFvaXBh; jyGЧ%! ?>Gqq1?a!z^zU{iuuuuѫW/n+?/øqZ\Aaz!=݌))be' olʕ@r2[$/ԽŅ cSطoǢ8f.av5- 4oO?av8s>HEj؏DuPz 333?4i >÷~ݻ#(({Bݺ. Qj Y3\,@O \f""`7}Ů]4 $⒐B$;vO?G_\\;w׿!ɞhس?~<cf9DžP}(p%?m:fНCjS+5ʋнʦHd5i$?1F:"x>R#3Sd>03BHNt"2ITթw/^DQQLMMڦqBzz:{nԭ[w|}w!kՆOAT}$tz/bet E2@#??۷/,Y~X[ ~7=]PJ 988E˖-qnX'alAH^QVVo`MS;OAOG}cRi= Ju_~%kkk`ٲe:u*ttt;jw!bqƁ$Ρn!b69k&=%>LMaonDz'NIHT /bͫ.z(Ӧcc?xn "aIH$[o^ѣH&>G0~x?~ff䠠 l҈RQO739Fu߼ ~ JӻS`z ; CB⹨l;h* ؾ4(NcXF(!Ik^ecnn>}Ta热#W[u}ddR\ 0Xۍ ܾ DEU($$^m$ܹ3^ Btʕ+ԩ ۿE7qơ01iwXys$K*o/('U0cEk5k^P$$Խ "??rk[nm۶}o 9i$ ttLP ;0?$%~ H^ߊu{-ꡦyMX0brh4```3ӿc;;Bз/s'ĂDjڵ] F2@lllS=r8 q5*\]%ڷoCAIm8~y Ô[RS5 ͅ)yo GtزHJaIH<=>#Y矆#E7aÆ  GhH۞/^Zu..Ml\I6 ps ѭHHk{ͫl.]r={u 'bLѳB9]Τ?VXq8 GKYUɫ1ۼbiV-qÇff޽.ӧaj#HJZ 0jl0ij5ZX[bxt .-y,,'KHFFFhݺ5-Zg^w=:MbcH3 >탕AW$OFoZhfܹ@d$dY?^˗ .!!rH68K0 aKK~ MƑ#9@PPuDBE2@j 2;NWʐQDWcAP prǠPFq#fIޫSGLg@p0t.zu~ ;]ݣ^:t 6`޽D-i&(q,}ptiҤIBr=tuM} ju3޵+ -뷿Λ; $Ŀ'7F/B_ Pvf̐{>P[>ص [O@u`o/aIHT%R}O@"Un]СC CC{$%T[[#ec 98 zzCo00,?TX)!Q̛7s{g'Xd nݺ;Y L<VVV8x0nnH> XSRĔNSAhf s/…XwĈP*_ԩQwP]]C/ZhibmiiVVA/^ &}HE|%$>z<л7aoߚ ΝCI |Pa?'1SSMw-[}Ra|9T@%$jӧOBCCpA@}4EECѧ(tL(9oS#9YYH3Sv`」'q%/u4XÁ0tGyUm;895A+@<׋1~}x eKk׊` Wd;dD^220tgv L$~i>|,T*<[00FRZjH% ll |1Ĭ.w%E6ER0(YC|61J\z:KSXlRSS&NHLti{Xo5Inc S]]+ꥇǂK 0iZ Jz1a:uݽo륥 'G\JG3g̬~05@LLLt2 S;TWjuuHB6@|}}<<0؛\]< "Gիq!22vAks*&ײ+V2x1^ VՀ\\%!񐚪{;wDyy9vFĂD\i;7Ѹqc۷ .Cii$iJB}3kZfJJOOG$%nνKVĘ1cФIyXr#m1bԯ_5+rrr-ME#G073?>2veT״4hǍ`~F]ad ,HHT |d}Tܸqxc0hbZSRv@E޹s2[neyy1,y*ș5hBܴ7o 16.w';w&*D YqZ~uܹsTXϏcbDQEe\b,H^SIB$&R!?'ɴ4nN׏ٓ,//3CAkךQV3akbFlҒ2 4Zio|Mĸċu:ndx#옑ALƍ7>v9shbblUH@C+++.ZkN cCuo߼>ngϊFH_O)ȑd&R:H.XGLL .]nݺ!''o.]X888jx}`t퀎qs66ŀf͚C0 lDq&V-~ +Ak7Gz:Zc*2Ʒo݀w.b, m0a筝6Mԡ]^r.]BÆn(+CV4gmۄ$kvad x l܀Dǎ+DeQz׬Y077P(0l0;v AP"=}\]><WT*9lڭcaŤ ѣ;t@Vˈav)*0fz 4:r`Xr7ȶmYRZ@ yh$H33K[/WQGoݺELYf=sR&1'<޽{˕nNAعUuY`dd$10ОZQ2u9KdA\]BL+J.ī/i3`u+&==ۍɓgg/[̙3()1$'Qs8-qBdq?60m/>x̻0˖'=x g,J IDATYYy&Kq% &L<<Bk8|]{.؝rli p 'G Hszb]uB*&ص-!С&NL8ǎ+mۆ's,\zzz0`=={`hܸ1f̘*)k;Wͽi1~<,/+HUˤwK2lB.獢"]LEI w,aLv ]\ͥ+5i }Yb@iӦAGDb``z_'@b"t.^@wc_>t |`hX ,mېgFV#%h ̻`m>kcN\f|!jC!<3__];]]`4|yHH/F 1q`r #S5V億˗/G~~>ѰR(-v@ya9c-z׮wlD9s/0@LIpw~8v/2RݳS@;vh[-1bHf㏱yfq!/A'ܛCClKKf6-.3Q߼>z/ҥݻ=X Wpgt ޕ/I#22nnns̙Onز4|[WBVـ;0w\aժUpp  ȿYҬ+X 8:Fsp7`˖JӽƔ)u+fv,9ńNN 1{l[J0pA M yysTX$Ag;3392S>Ta`t !/_1dgR+NŞez.\B[z v홁/392X^НCгÐ!V[x -BLL 5kƣG9s&e2e2 xէ}斞X=&'h]^Dp,￧>Pܣ ccEWǏ )bd9nC L*H9GxxEIU{USd:di)|MAxIu E333.X%%w(˘ v &_br|1=`?=)Ɇ ŬjuBjj}yٱcRB;o-b?5KKK#T&3zj42K?]-t!uZbMM߅ׯ?u\ESЗy3+¶m۶pvvf۶mQIII ;8brOlٳ']\\9O/9_|AN V0.7YYdZ!RRRz?$IlSgoȱ,-/SPܺE MUGG ۵#ɤ&_c=O={1gU^UE'>^8};OD 'HNNdYFCCC޿113kFܗӢj®,/,mKn} _AIGd֣ٯI[ofd۷Ytuui&j4E{_F3XLJ\ΈՊxɽa{ 70(9j;8_'##\j8h#޳+llh1j &/-jlذ2Ogz.:.N y3I`A x"KKqHZnݺI&,**bY}btT Aa @M?r9OO9z;jՔGbu.nHH_o)_H/_f\n W+ߐ$=ɟ~:::s ˄7Q/zSӻwiIJ2qUX*Vg E4&SS_0$IG>ȬDK;iʄ|Wqvq$#spǎT*SǤ < %bzTv,?L(/ USxQH LvD~?]LO ٓ6\͝;ʼn0$LBLK\fg]>L};+ pFL yP|WӇZv6L/NgHijJ{2#M RC]$3&;yybIRɆ r$ɄeaaJehj4 aaAl(g06'9Xff kT/PUdǤY^I&O]+69r$4iBFè tFdC ? w6]FVKNJZ[S((`]}gw |m[R8z G2@Jk>#.\˗vZ{d\p<#nEL@v27݃ܩѐmڈ/#@ڵ~ ! Z䟒)Tj| 0U$rRW+fgn;n|^(S|8ذaC~YpEy^@Ss,`QJܷo_EЌ}L\HC*()\@H##o+<{w7&QyYКko8q:t{I\X ~7Ջ400#SN=@?,Tv"IbJxxYRN0jbBB4;( P1]}` L%׭;:~ᬳbU1O-\"QC gU^UL)̓3g7P!d˖ǁr-;v֭[ E}}M~DWqq [ 8|-c@ROL"}x*N{h]%%%hmmnݺȑ#ܽ{76mʦM2???&FQv-s?LN +fd6mjyv^ށ|5l96$9;6~~Rȯ"ML(orsK* n ~dtI0jZ ѡ%ǎ PGG_#킂(ɪ~-d>dƤB,Z3)dNZMaÆѣ5 33P.33~lx,WzQ||8%:VK.~qcHJW]LSMD#\4LuO5Mb?$I;07ggV􌊊 MFLK\fe2EI? ?FF\88<|}YRBƒ!TуYO?ֻȱcݬYhiiG]]][=QfbLο0묩.WDOϏxq^\]fƞ !gyViٱd~Snǰ Cλ0bdfW^C_^kd|뭷x0ST*Ν;2gϮhW# ?,^L27obh8.X 6 `K*E׋cёfdr97&'sfdvdi)}}hҘC\ͯ_v"HT =y4{^Kndd߾ 01?+ ٿ?ٴEr׮]#gI2鿧S9OfHa6 bJE?/ZK0(~>RN.Z"QTV=4@=6Zһwoi>Qf99:~=oݬpJK].Ջ]tV6 fϛ nLJhZ٣cx92cbHC&ս HNm۶cpƌ$kB>yj܊=={R"%6ussRe߿ÇRfϦ\&gxQG.\1 9hTB0#c)/Ǚ3/'Ϛ{sQ<=I|WQw.#2#!l 6:u*MLLE:yv_j T_VFvqCt\VGCFo0e^]2BG[ 666g°6dܸqcϙ3O27lْV6[pܑq$E#V-27x"ŋC,)`qx1uy}Z6v}oߦPV&V6ZA>Ï/uʑDͣW133ٳgxÃ:::6mkRV&PIjx"8HA G'{HF=zɉ>NLO$>rș3aa8B512_)2]N;1*Æ҄PݓgMӽom#-Jn^ =[ nݚ,--pINHe 3F>>p"9n.<] Cw\eD#䧟\,U@Uhuݭ[8|}:I2.n}| Y\B0%F,B.҄Ab,Xn.ǝ ;0J SoUL$њwIIIoI Vܭ6Ʌɔs$EWESS2+<~8ϏII?[j`QhŵcGRۻ 7paFE_V$jս ̙3ҟ}uttjBbP\Vrh€KKIi? Ŕ$y sn_DR F? ?)ati)krXD_#dR䯡nחf~XX TYtyr;rM$Kl__I'pϞ=jҖ!!j˘s.޺ތ( pUb"!s_F fz]g 88*3g._WL$њwZ3]LLLCٓ...G] JlX*fNXpB1M68p KԈnCA_ HϽ[wCR*A/\HA8hZ~oɴ4Y#ރ?uT1..MCB10ЁeeIj ATex&'2ƊFȅ B*pWbY9ztEXJu 5M-7A G ml\l?;Ir|1~GtYߡ\RY,V\LSOO T,-oR؇c{22qwPՊF9t(_\pb_wwӸqןƫ:y&$$v|wGQ&qٲeBgϋGEPum;ߤV2+tR IDATt$u#J2<Ud *偾sG|x7їzOICE7@Eq`2<|A,,1=bzcYYKx 96RU7pT$r9s" 0bDDEZ޷oޤ{2@nU Ԕoxe* |=$^~^E|HH o7p{ve|ɒ%͛7$ss/[R& MvO&Iɡ=|9{VIGJc 3 @["$*a~RΞx31;𨪭I#^MU D`׫b "]Di*  g&H=6!^?^TByy$3眙Z{Z±p_N@v e?SO=/)))F# %55mvԥ֡TV1<2JduAA:ߕ>fc |QIࣗ5ffdh5cu+˭-wٰvZ\]]DUU'86[-{QBwe諪pjy7C1{ٳ2߅A‰?<t}#}2fz ![.1edIG 2QUFDFRmJ AHD~]VtŐ {C։aI.W˝` f{CI+O髻;~kSWWV˹s!KkLhu5zn dή]N߇|W#G$-@~9N4>zqQc(#: Թ1dd 4h7x#f t:/ސ F7юNBQ8VV&,"kjx-p#"?85nXiPh8E8׃7 B!>VvؾDnuXB8QJXbxŌ3޽{UWM}/E_8GL#}[uubTL=ZC{!K U;ᢃw1l0*!u⮻"'BѡC_ױcGa2DUUU<ׄ6!fVUt@n/4Vի' a0}41aaoNxxt11;W ~PU`#CJM%{" @U{&ߧ/m&n%(.όlx!N<5)1bs7wضM\c$.\(^拼u迾0D\1{wp$B-Da&>C1biFo'O 1kVsN4/_F zB|p&-ZG>"Tؿ_!&OlֈO?TL:UL:U=zTt>Kt>K[=EۋDqPY&;:ZB q-[l?OuJ({⡇;W '~?x {}[!ĢEW;ߊR1qDq!\Ǐ@SlbSWČ.bЉA>^?/"h"GENd&Ĉbu"aĭoψp!tb!Ή_bݿ7x_+W QV&ҥE"Z.rє⥗I 馛| .]*"""Do _"5uCt{Y#9f}MLJH}ذA;GUbƱѪ!֭b'hF4w ƑPPPs=ǀa̜9&Iߒ~1" "ZŔSPUӧeѲrjɓ'QU;SXx2t^:"Gb`0%(k5&ȑ6`xw~v>kޥ3AHM -8l<u)SGcccqwwgܹNI}}ߗh2`C^BQS\ ղbaMȚF, ~XR4p8фp5J3iɓiժqqq?{\\['ld]W'u:w,;? ߥ~H 3)V[ F___BCCQUiiFQiio6 3:rFӱm!?}赦lr_$pɳ|hB߃44~IU{p挼? Bjk9cѷSd31>EakAt=tW_cs'n\RI 5'GaͻckSxSt^ˌN'?d\\\ f3ҋPU%R ` dB$AXv6(>5 !CPAASMGZCT8ٓ9s{sΥgϞMԠIPQ]Юh5ɥ4fpIh0;iӦ Q "P&`0760TWSo\r2BQL&']eLVe÷GaFi=zD‘&K{}g֭h4&Mٿ?@ ^C۶R(j籽؛ȂHL&~Y&YRUL@c`=*ETRRNL5n knΟlYU_E`N p#˖DM]j1SU  YYx,`v6tݡB'z\{S^~EnGUU'!@0`2;쪝'N\:8z4M6l ym۶Ѻu&Mn))dT鹺'e#8XqWUU1tP:t@ll,ee١ͅX->j[ )"z(,;lڄn?\DD w)b?ISؔpRޅ2F;''sM"tG^^fRMC麲+yyL-772h4RQqV@}}&vI(B!{q6v33+vy0УtNQl(f/pgٍL0g7 .eL|hju5RYd45kx7]Kh&MJBB-Z୷ !a z};bl6o '_hcoNӉ6/k0YMܻ^,kC|q|8+V 337,˚SAU9_uk?Nw" 6mdVe%3d|||8t55]Mpp 8lu6bE%?ծ][KPZpDֽO}!552/pgqbf+~~2N禧HD۱c 3gRPS@UݸyV6MB^r!;v,F!оRde-v>CeHD)uuPZ c/Xb/#OPB@lU͛Z Mw7oFә0a]tW^L:߼矗)h5~*{F^l.FoG|cJ}z=zbA|UTP6HkL U*}6n[ˑ# ~}u'^p 8tn ?h"4 ]8q"?Xz5'Odʕx㍴hт_)PMCilYz :e9ĉB0|v;&S.hEyI;oK1Zy,>(n;(ymf;.]I-K%0Pƶh~~rv&K{M& R|@ta4>}g6 ]  VK~ᇟ!KQQպhݴČZc%kBC BY_'w?cBYv~y{:w`OU{N>dBӉES#]^^[k׮lg便ѱc_Ig[?=V 7Pidjc} ^p O>֭[7lh4ڴi ~,77www&4n\V^\t7PcȓGھl++-B#\~W_Ѻuk>}ݎ>/9r$_O"rTQ~I2tW^V;&&NEkAUU009ژZisWdlJ?^Bi)9x.dIU;6)g G\C48ر7kKٱcǟ~FEE^^^L6W߿m nc?`Y/3]~Yx]v㏨+Q > UU]]KԥQj0&&(LOJb\7NhLROW^"/>R>`AH,prޥe7];#i=$2̘!4hl犊3 O]]3qPBҳIXqSDZ-rsQF} 7J|`2O0~xپ]il NݐK"ڷog}zyy}t;QUG>J륭ɨ^@A҈#ݻ7&"#$0#Fc6Rn! ߀f :-@u5o*_-]ǜp5J3iF!,,WߋO?c„ xyy7A0}t,UEUU`yJ^<rsիkEEGՕ5k֠*UUzBByRYC5PiȶBTRh:v}6V1x,۪n|5*,prޥe7Y6BóRR车7Wt&Pb! xB1uTkf ^ߚJ|Be y=5(<K"k0;_*'檏Ͳ6lFiʫʍR~p䈳vRm9cĈٳgh4|Wvh4_$c#`XEߵ}V#6)E +*dͿ/TUl.!$cVQYQ*xtnh{@i?k߽nQy6zqqHk gҀ68q7O\.Cg͠U.ArZplv ̚%?cPU%gϞӧc4jIIyE<ɔFҿ$-h“ XLmC%E  $'"G>兑#MM{ujkeyǎEEܲ|r*]<(cHUU>S6lX>URQO䝑(w2)-^O`ʚ5AʘvhO01$$/J]Nh)nhтƿ9T)wUE-x󀬞j\.[nE%K0[@c⢐>'3xttAAbqh5rtaÜBGZCTlt:ZFg}Nk޽5k?磏>BѰlٲ =bƏ׮]/;wr;`[6\2qDLV>tHm'p@hтnTRVvm).Ż h@p`JH**VGYYl6طOn%+PM g20?CȭAIɐta׮]#F4y|R/:Xj͵z,n {N= 0P^B׮]ꪫmddp q6uqSx&!7dxa<0?ϱcZ L IDATp j 9zT +‰?Z*̙Ceee'ח*g p?W12 ڷO֭~~~![QZ+(B`$:cc1]^}_#XIhnӉG\C [ rss ~~~h4,X??u@d0q&Z,l-o!LlFDDлwo<==㏱ZX,e?b)ǘe$v|!@k\RY){Ε ANLF6HGx/fvUz6n!..1!r7ܶv9|),f0ĉrdzh*V<,-BUUrrdU٠{WWWVXTW6֝j60 ] s-.kp0: 0lp$k1X؇TXBRm 0'~֚ﲲyTUe˖<3ȑ#~l Y2^M|q< }|Z*?<?~QA^'J )(B!c>'jy$.N/^U%0'rɫ#.:wkY'ͽ@ؿ?GѰt_xҏ M^im^^B!$$뮻777>CL&&SѣQArLbF;ًyDEv674~fOBȂؠ RR? ]WvemZkXNԺJfG#ڥD۾}ن<Dnu+v uO߱#|lْ={6D~ZYYa)?UNp`ZNZm%`ި(0!.,Q֮zOdVd'~?ljRۺz?w\ `SN"߿?UUUzK>f/$KH*Mw/SNAUU%1uuu 6:ڈO@@KY򨪤ϖb9s8\ZV˔l*-[ZJnu.7lvt><ۮOG8&wߍ˯] d'1BHz i WuoTN%%ud2_Ohhh"'g9vc(B!rD$1Y,NG[99C)Yu>%$|W:} @jXZVolM||sl C۹sK)NH;ADKJdcrd6Mѣ!&23?@u#<|55lde)حvsuP: eY֡CR?AI @x^8#D q/yF#kʬ˄gyJ<#tܙ={2m4Kc%3E^uْzwnI!j4?3p@zMaa!6[- \d"g*KJpjy:1Q!}BJ Jv<9|r\I\'.'l*8C‡o;_u݅Oü,TW /IqȐƽ111r-h4|MXJIM} ֕CUU*~ l@BkX-LVUAAdJecT%Xׄl=~VuH[0VX.OJ4? j xp?sGT+WC[om]k.:uD˖-Y~=6(""nBu%#=lzL&&T*Xi(ŽBVK?>4jf&G2p@dIT~ZmNRCy0vIƬDtS#+_cY6lpW3d1t5`4@&{a6Px/UU]\$dd^̶mAh5p¦eL@\?< z~h^ʢ7d6,u+eEh @4)^Q!cO>:%)DꒈΝFuu(v'7dB3II( =k}k`&JsY_J=~6fyh$ɓ+;nǏKlFb*6 @<zpY V+tF4baٲexyyѽ{w9@uu8QQ(TUc5? d/ZHy9T{vu'p}2߅NwbqbRWdOCVY95Fمr8r 'X Em6i%ۇFa֬YXDF@Q4 3Qm*uu ^/TUF,W^MO=3i y8eEE?)?LC6X?GgRl=#? c77)a0Ȳ-[Э[7\]]yf%3t:/dd\Bƻ֑>+s$$* 7$KOhTSh$E8|1_A /oϜSsHdFzuuU=+=nee{ZYA[z?D+[KsE63!{/AAAJy (GKƔk"t-tT EfpljYا~ÇáC$±hK|y˜͋o~RVyo5E.=_FF|<3ge֭Cᅬl>VFQ*Q⢐85NChTU{e;C vC ffAտID?߿?GqL҄ ZUel۶A,6 kCvY[Z-mAc0d'\}`4Yr%ڵӓsRQQɔOzl|ZX-dI@t^:HØe$d❌ ( XU 3gɠ Jy[Yq;mqBlܘ]+}_Wl}bh8yR6{yo{e ?̩tكUZqK^UU9|07x#BƌCXXjK{պ&SB3o˃Ob6r?^!!Pn4J֬åsQTμ輢3O`K" ]\ %\[RbqYVrTUeΩ9? Ob2RAJ˗#`ڴifTJRtE=hݵ\6U݌ 051z'=! UUY  4tRS%-|ߛppEgҀtZlw}7Ѱf͚ŤI;\]X(|.5XՕw:ߕkM7JFuqy RUUᅬ7mڴaҥ , ֕)`a&6zBXʿ/beC^ׄ"[ϞeWQr }"={‚g%r 7o'趪o69q%FO&O ݑl|bH_a0[oI'fWaya 2 'bb;lOdw`ٻwocՍ?:'))/PWBluӒ4= Cs55LKLCSdkkegOҬ֭a,)IJ<_?OCxۗɌfFBg*֮$X\6̔,V+~1Bv{n<<<@UBQ*!w &c ֞bt:=K$tp0DGwm_Z.iɮ]K1vHnb3i?OOII Vg={իW+ڠUJKxzœ96j4Opߎ-y_DxWqwwm۶̝;\l:EČ2F|\axYB fdl0KF Gѣi=O0|1y,^,..o-PWbß#ٚ#‘&nWWYؠ~0 Go%:хt.曐6~!G%..]bcRJ\h:"t F( ##S\%'GR#GŽd%0<طh j?os ֮$X\V>rCt)ա*R]\0FޔYpqT@$;;YfѪU+ܘ2e "}vZjjjK!=}(CSX@B $>Hrr,i‡TUIS%ۉߟ q~E5/m$ܺP+ѨD.4n*m{iFp<OGOa{v63uu%kWqy1yj2غu+C AAYv-F8 u@<Y ,ՇDy>FrsDBQhbJ A? -d$;vߡך^?+0,Qf=<>M\JASZs]TTƍGxyy1p@x _|6== &ХKzԩS)m`[-4^Q4?OΏ*]\`*z&NFa͚5 ߀NI~稪J}F=7EQCj)-sPmzlȉrjbq,ۍŢr>C;qůgҀ'Oh?~<ǏGѰi&z)M< '[oL=neg _7I`WyMyA9YɓquuUV b(.GtHRS_6zd_u "4UTYdZ A"LM=&SBnuȊճ"hwn.6Ukw*_K}4 Dz5G𽋅#۟J6 >( 0w>tYхTW`2M&Uy'pssחW^yDL\&0ccyV^, ʾ-#v|,<H~>*kjy'# "}CC(+"@e0u+a׹EP` IDAT0AZmcHhdʕPÑԶ~jyٹs'ZM61v؟mر#v/_~׏߼tJc{UF\I+ԄF${3gB^ul66[=))/(DZZ+Hz6Idbajb"BQxB6T2= <՜:ϣ{E F}923% CˬgXn>>>h4Ɨ76l,[Hr!d1_46O=Έ#~6 yOm}Hr8<ݺuCXlyyyקncٳr*TWZ*QBuad/ɦ2RJLl FAf&1EE_}%7knn  O?ccq_ܼfc2 ru駿6t7rl}bha]2;)ܸҏfA-Yk߽FFEV+|5\wOM||@NB0j(9ROiabcǣպӵ !IOQSGGYwYNjΔlRR/qQ%2aX_lFyGgѿ#Oѿ#| BZzH&S.y2j?o~g6ڵ+ hۋ/Hv~lꊿoޫs&>Dcu?O[f))6 6lŅ~wGoMHH/CPUZA9ِv;l*3;`s<8c:s=_~),==%4 @ ؿ?ݻ쿍Adyayq& d񍛇٧fTJ eVSN1e<==qqq`Ϟ=PRr t-K>hȧx SyP¹;Α ƝޙEY3þ)""VZim1[vOGNSZZii(  ":μ?T'u>5W63;J\"Tqpð~}MI[=z\L*fz c VIզ֦?sXU6UrE_޿8qB7odii)K%%%R,=)%$\h,]HR(rQ/&T,)+dgKGJEERZQ^Z 9-IT{c"iI,Ezbi#ZP}Bd55?lkjZjoo%KH/I$I2LZj/{oڝی$IՒ$IҖ-FRK9'+,"r7C/]$ >\KMMMRggTXH:zT&efZ[˥ζNb)^?^JvN1Ϊ*j4dڐxjWV&UI#!iӤҕ+3u5 ~$IK{N:ŠA8y$]Y֯>!<χIhy;2KTϔ 'ρws'45!C0c7߰qFJKKqpp`ʔ)L6`/PYuuG074 Д`Hj+ѵz5擬8TuW(ijB[&#ԔqVVmh;&ٞ= #GRġޝM`A11$wCbJi`pHpw'[]5///~qLw.vիB`Ϟs{XcamhCKl,|8\Wx́6oeݴ1bfϞɣim=LUVjjbP[11tLoEJwWnVcmD+ZZ{蠧Y[3IO`(T#r]֚c*:DUSD ~$eQ{s FNi)ߕCa0 t{3<úu!&&j`C psox ho%K`T4VN,^ ۷ѣA&CڝVv WL&C$d2]z FLwO>G__jX p?;?~1Ćݻ!&FLޣ0$o۹tVVVL#BhkKj >&|}٢ث&vE;:6:X|%rvղVr3ܜQeex8l>8qB@#Eh3{lj)K 8fl m2/(ύ$P[+Upς$8 aj[*++`߾}wgY5zZz| #G_[ٳgyfٲek rs =z< tuTA+HD}}Ԗ}55,(,$xG ,5k>CW0CJ4s!ێ^hGxk;yf6o|suuu;v޺hU_5Nach`TBz͏?¶mP]-R c"vŮ]8vj &Oĉc-AEMM mmW  Uأ.]BIE;HrFB 21a9 %'cv0 Ӄ‚IkLY9G˓(ˠS00Aq8EIJԡB S>?!C^|lVrJ.\ӧܜiӦaÆ7l0 ٿzn55p}p8&hksIoE)w"[}89ARR?0\'|z.^\Bi?14쇻XX ` VF走*#%Vbͻ̱Ckv(`x-j=YOR>A.ʐWx1e3cr]ӧ1[趶v /kג٥1A]l$RDJȴiE5MɶmpNu'ïGFd {Wή8p#GReԨQ=OjjQWOggZZ&G`n>ÖPZzR{Ctt ӕahYAztpuu"| 15%!O,1Q( G JI,?ANU U7S=> -;ֺ233ٸq#Æ Ȉ{m6***8vAAA8N[FE#l "id!FF"63fkVJK2bbLJd("׼FJ'>> k.bbbPTӇI&--GLD:00pr,fQC6jע:#V = a:˜To51J(kk0afFD])):FMW -(ܾQLRJShhPǐ@@:OH׈C̠gH`rwqc?ק!vg!h'˗/;Cff&( ,Y’%K~\ ~4rsEUTMX]v-gEt;eL13_tؽs)KKq#!<+Wsbbb8}42 FͰa G[[2uuGP*Q[ѱ|fVњԃ^r0hY-y9"I$;]]BLM"RP|< pꂟjNm$_IEծ~Q=zz9twYB@@ɿxNBQl"YLӧìYHᜬ`{vv :##ƺeTq2Ɍhy\p]vw^\.DEE9Je, ~Z[/!bj0:OxPH-"R9f4p8 uu\hi!C#83xdIIŅ!\Ic;{u/\880.{u RIWN")/|8ou=Sr>CBl̫Jss324~w&'jQ1{6jI?Ë s cZT(úu"/EFtt4?<%%%<,]KKK**p!juKpt|r5Se^9ȂJ,,XLXLx=5~<6=y|rm8/DC;, ,-Ŀv[hMP*>|^{3f/^ݝ/Ko5?/ҳv키$\H#'Sˆ' *LtM:}2u سGꤧZ-VwF*9u*bccF[[AXX0>>:';B}}*ԁ%ffC05 AO94w[QS`@S䃍(Գ- IFW&Ą@CC) >{DRRy}͑P7]„ 8|0*ݮȵ-bޣLQQ^fGm'J::rF`\qDE_-!Ș1HL%668`10,,ΣT&PWG{{526&&Še(LTZ fftrfi"z-AEE?YB:%.h ٘& 8QNC[2d<9x.E]w_56l 77R-gĉ7 Z ++<w]N}hiYff$'TUF*zz9O<ee"EO?---,Y¼y˛pa /nnci9.}͕ ӭ[[EE45nfNN13CD %KvemZ֤I&r`J׋Gd+cl W׻'߿WW?}~BF *+EHc.&eDB2 b$4Ƌ1}0u$^L2a8|XX@jll8JBB񔕕!eСnJetv6 icl쇙YH=i>nL}j=H2]&~&PKV?5qMT8wu2d(gb mmWT0i%$+nuQ&L#GhllM@ĊΝ'ssEҰaBO.;v#oiWdDkFd3$+a>ѷZa <ǎ ABgg'z",,Pv2 Ǯ ʫdffa#e1JA ږژlDi$ȉCC&YG `b˅9ld`4z޼՝>8 IDATgBDCCQx7]V$•50u*(Sҳ8[hU.]第3f ѣFjٵKP^.f/"jHj=]9T| )k,CK?C2Pt8y ))➞T!!zsIHHŋD``>>6r2"11 +PgJҡ!Bc1:TzhsMMu Me11>>ݤ7ow?Bqq1s_ޝ펤yVqq__LlQ, S 1m#]0x.GQ/,RTđtDN= wIdTtJ:2ſ<|1JIi ~?Cն֝ϋal!|Skks,#8Yfb MINsE#GeˠW/b:t#FrJ;̅ KOA"J"zoGP_G.qW}}^sr=߹Vn<9sUbeJā_1'I:l_1ffOf wwu34 I}qq ~##aH#8g%_@¥/s22d P硄;EKANIIɵ=lmEWh(ϩSɤr)a1hP?kROАNGGzzNBh!AgM'ihD kDU-r$:C5x衇pqqCCCٶm$%%h/A޽BTTeҰ0Ꮡ[|آXbbnPǐ93e0'>b`oE[;!Hhhh@GGA;2,-ilLju2FFiKqD+[ #O# Sy78N**ΨTK2!~::+ã?;f@= ֮{EI6BZ;[y/=̣]/ײ^,-%Y`̝;e˖aggGm!.^\B}}2A8;/|1\\r = J/l%]KZUE]]^ٓg06oQ^ଃ~¦ӛo2sH"9!$D3~3Ϯ䎵nF"4ii? d]!C(r1',x/S}Dp`pއ):?"KW|}a 8c<HOj9//G+ '@O>Ƚ*w3ǙTkTZD `5tdՆetgD@n˗/~… 477D`` o6}c4Eբ/cR^zP2m%ǑXHDjkВigw]X4l¥\,:P9OuIKKHD"Ιc|ݚ>7 ?wsmW;F1ILa'RWEIgOIJT23Pw?AA ¨.ӽ9uJFzHWã- u!}}}WOeY$Re*:yaN]?q1ὕWr힡]t8zT<hn.IH@9P} XwwKwBz0!r))b65hpmwFNSQǩS'HOOUbkko_S\]۰Dss&*Y$ch聱/:*d\Ms)*ګ2gqzCvv׿n"-륗@OT~LᭈmޛJAwZс'Iɚ5kXj xEMmmU!i={Z ) #6_\—ee\ik#Ąxh?EV=̙4{6i&X3o'9~s՝ {ѣfbd;cûn3qvvǸR )b sss.\Mho_˳:~\!QCDrm%\bch~v~7CG1w2NIO ]$D(*twoF_?* ''N€t͈޽۰ *$FrцtJ+tnbAZljb@KK8Mp0 BgK9VHJi YYt;БcCcmc\@ONhsύյ-TWǑӧ)x{{3$zrQ\Xji`d4}Y"M{Z/lFvMrWڝw?kjDբa:%5kײ,~%s8|1NfN\(-Fx=ehmmf|3~x^uBBB}tuppx'5Xq+\e۰gI=1nNtm _\LxΎxQ\b xN䧊8g'bfzf,_er~Qt&Bd,gw宲=-@?Νcȑ,Xcү_?ؿ?+W$66 M.@rB< br$bA` jHn!6L22(/H[0Cv ^fgΈ A,&g%gMܹ Μ9sO E~=y1Imw4n4+9Y&'oVVBř$wVNڕ4rr01?{?[C}dr8Z-vyoopqiDO'u:::8I߾=qs3ɩ {**U.@oMbWڝw?ssaBnPXJznkdmZw-Jq2s"+ xCWyx/"pmvlG}DNN,^ѣGResj**6!Iq?c@U(AB>vae=$,+r*15ifb 7/rz#7֗` Lw? l,g(}]ikĉ133okgϦ}k]J{ A.6 lk?BAx{̙,LFE&U硖er\-\ + /#+K4K[WLLJNB$)Iԇ)t¼yУ={p s=̙3k|/8:>4Q*Tub19Nd/\Pm-ZZLfV@g!FN9b3g~x6gRXFOӞ$)Obf11v+uW-B#@bccÚ5k1c/^7ok7?QT4440w\f̘q3Ə*ƠD['E Wv6de4ECg?  8iʩ <٪\iZ2-X}L0j/E(1!7WtTũmm0ydk]{]Aw7 I32'#C ŢkI&qWcw1$&>HvxBCE{xM}zsV*LugRX~Y_;Uե훮u'[* ӸiTU,FN9?=xy! @=9=䤘*9|\rriߺ?V!D΃+( (59--pqwNflGn3[WÇqF(++ϏSr{ Yp!ƪU3YS#Z~03E ,_|by8P[+W}EE !2z4W_W_qxꩧ9s&rYck;t\4|C9ߔVֆ1mnMU++\YIik+գMOG};!j+mm2DW-~ζmT5Uakd2+Qc®];_F(3օhU}],Yٳ;v,~;,Y’%K4}&*srDh.\b`-.N\5%d7Qʹ|4ut[:wF HwKw7 !mmB=+ɵ^~Sԃd[ə5jPUp nqG!DEB,‚=GoUW{l,/ZG[66,6ay_8:ޛXI"gOԉUO+B_eu8za\N'1^EAE#@4hРA KO_'UUUYf1k֬PrQ=|;Eչ#ә>cJn3'=}33l&Cʄ={y eX9a޽\%KpULD747ee_r҇hia>:YqNs555TldE 2-Lxp9Ü&E*+<&O&G'6i:yf6o|p]믭OFhr 5*4Ќ[lk˖-x뭷nxMVcnnδiذa 6 BAvvn.A =Zr16 O.|N#!%}'2D,zo8<:ZHqwƌv22ٻw/{%??}}}"##bH;P*QSs2IjG_ QXXDO*A# !fGf 4PWG^zzDGD~>G"KN4^OsH0Ezpخ,T!Gu IDAT\Z9t[-oSNnipo= n={=-[o  yٽ{ ̅$&&@EG&XZꗐS¶mb=q\!sr .tVԼr?u&;_x+OPQf.dٳGlhkGbo~:G^9>Xx1>W_ 50`VVQ*ɹ JF?q˺onmM'|ÇFgg'NNN >Ç#(%Ԕ DseI'S˭1, `c k! (;:ghyXTeA\@AQQ4555rK\52%Yhd;+o ܿ?yg83s`u+9}C=gΆ66h[T.ž}u,uk7Z5 -[ɓ'=Ƙ~p?C.)) 99J TL:'NDڵѱcGƖ9`"ɀiHRRu#k{S!m%dⷋ!R_"'zcS(Ė-%ۗyޝѱcg\>{cܹW} yAAh.>܏ .m&OZd3<_ۨUDxZMC<lq#0#F`kq1M>UQ@to 6 * "c5g13tvڥq[wwwlܸQJɀvJ JeeK4g0s&L6D=бG #svdSkeʗ031CK0em{{?6Nzcy\)))HII  accv!$/ڵ3Çp(*z`l'C6e6h>8X imVq'p)> Abb".][[[بm+} g1ܱ*{dzP<0D&kVݩFw==|u+56f6n7Cp'`ϞIzhxڵO?-DqQ;)))o L͛uhժ?I<x4oVĘQ1;ScǖLD@f&4o)>>h۱#<}…:E8p RௌÑ.. F~m0~+q{H))8u1{bcZnKP68v:e h.:vƍ{sۏgɓXn<)[ Zl-zY3;xzATb2H6m}v+cǹcո10lX%[QL C1jy$z#Μ&L0o((sXx1fϞ]˜q?VLMiВyD͛%AIr2Cb43м9UNd|y$Kռ wCtAD=o4 P`m ~RXrHJJBVV1}tt]e1V]"{|2cf=zsɓ'q ܽ{QQQRiSСC]6BCCf$pv.zBEMIIM `DF@fKGS\o`su8j~g]z1 YMXe 4 .Ę1cO?~ݻ76mڤϒg,}z;C0ϚTk]Y,[ Ϟ=C?+==y&[̙3Dpp0WcIoZ27/yС7/Ǐ9(prYx_ȳ8D[V2b СCd$I&iU$ZJi~XX5o\{;FرcZG:g,}zYӖ.HgMʵĮ'f-]dй{QNN @111*7(77W1dbbB_~zRΧo:]Ϣ"׉o'Zz$%*..5Q gggſˣyqqqo4ȑ=z4=֭[kaj]fOOf ňaooPaڴi:d2ťd 7toQ@[ W\}3Z̞&8:wF~~>Zh򚟟VXa^1׀ȍ7^(x1fOƤ4eePoׁ0tè?4\p _F˖-1~xϋR///ǏoR]XAAAkUT))gT5)t;MI9b3Iu= };[[[Q奸hOݻw-Z?z( @6lPymڵ'6]R䓈3ʓ'3jܽΝ;j/Bu @*0aYZZIߓ!՝Qy) ,_}Q_fo˗/T_'ߏBo*޽;֮]MΘ ig^2{L>(]dйӔq)8  =2ҥKex"ѢE}aV^W\\LaaaW>3V2{|2cdܽ# DDǏW ozz:u7Ƙn De7ƢEm"++ IIIZ_aܹh֭֬[lذJt=Mp>B 99?Ç1f 4  @HH6miӦś 8rt7Ƙ~)XIiӦ RRRHXYYY W^y2eu4dF ڵkJ7L4iHMMԩS1qDԮ];vDll,>=6oތrܹNoWZ.1VSI){|NQƪ>XZZV<uyyyXlp-,,;R!֭[n:dff* www 6 471d4Q])F=cɁS_;mT>TsR^bX P\\;vi$h˽syzz uԉ&L@111C&LN: yyyQNNNrss/͛vKϧ<&f-"ɓ'SZH!wwwrss#kkkhʔ)պvMꫯhԷo_۷/?ϟOnҸ =MH9b3Hy=Q)NR(C )F$hugm& ><==eIOO'OOO1bDQĄ"##)33SL"믫e-Mb1*{j>Ůg,9z7RΝ6Qއj_K}#~3ȪU4]gU5mڔ֬YSa5k֐kmYuUa(jݺu%bC,CeORͧ%R^O}gTʹӆT3PkIoRޏVwF=1 RBBBAsC,f-""[[[ڲeK풓ֶZ֒r Szƒ)'grQއj_K}נm⫯*#yyyꫯ\n'OhW >bcc)""ɉ222ʭկ_? RzZrss)((ﯷZD%@#G={(ͥݻwSDD PFR%待_a? j>Ůg,9zrF+G}3%v8|27T.SzzzuY7|Cu355%SSSu֥ VZRbc"|ꢞ1@<)fϔص8c"bdgg+ݧ~AX`㑟5Fɓ'CJ )) W\QZOOOO撪>}hUK_}Ӷ… 1gLLLEEEDFF׸oDjE=1?b3R]OhH-YP3+<| >s΅V}qC'''6eժFIx3S]=hT2Y8ܿuݻѱcJIIIӧ!ڴiVZiBA&= nݺ[q S|--6\?۷Gݺu\/?? hta&r9LMMEŴ'|˨ Q pF M }(C y&V; @vOO>QO={T9'vذaTTTTn:t(Ru?c211Qj׮=x@u-며Z?ӧyf;vmAFҨ:yyy$ٳG8po߮4oI2d2_Q-[СCiɔFDDݻ)w}J='77 $tI$~F'43*v>8&Ռ>C8b#  ШQ#t />}ף{õV*Vf0c 30uT7n^u/%K &&3f(V||׹sg\yDHHˬ5q2?y˖-C o]W_G}ؼy3^uԭ[_E^^vލ2kSNd]6̐gϞHJJBvv6Sn-۲e˖!..W\Aaa!رcaggWnc"|fT|ͨ8R Ռ>CΨtc-[Fvvvԯ_?qk$޽[Zk.nWn!Cлᆱy$7Nݘ1chذaM̧nذh޼yt9Zd SFٳv$B^f"(~nݺ5)}[3 Ν;[kԩLYYYt}9r$P׮]I.QɷX;v3g[Ν;I&&&ԩS'0aPLL M0:uD&&&E999j>ͨOmjF'gT Qއ֬}(gTxb YYYԻwoŋ+n<5=|N?gkkkT%&&uޛE (m6mDNNNM̧:&L4/33ZhAtI"l١Crvv͛7΋N:JO^kת[r%988[ח~Gǎ#AhٲeJ/^LLc"|Q,ՌO"ΨTH1YP"Ψ. IIIcǎxu~zT/h֬Yݑʕ++xbq e[i^ӦMk. <<'NpYg̜9#Fqm6ܩ]\\ʂu>|:u(~. ѣrk߿,"##wrk)7b?Y3gT*QއOM؇Q2?4`]6M6MooҒFI/_Tw}nJ[nqQZhܹ֊&oooڵk9s^y "~:]v|}}i޼yM̧6lؐVZwR`` 988w}!_ovJoGhҥJ?3rqqC)iȐ!J D^6lH ?!!4hPa;c%|Q,ՌO"ΨI%YP"Ψ.DB~Z_^z$+);x[̙3;@M6Ǐ?PVĄLMM-O #G{UV;fh|ⰰ0:tOsA;C$ٙIjԨeee[gƍ$Š֭Gvvvԭ[7k׮$?,`;CH܌f)gT|qF}hڇqFu C̤Bw}7o 8ϏzA'N'Nh\… 4w\Z|"pW\ӧ?ۗݫq˗/ӸqJenccCǏ ̟?Ν;e)hJ'UV6DD?K*ikkK|]vM:s%OOO իaÆo6=}:b O"q3*V>QI2Cg5gJ% / uOurrRzPSEχe)((۷ѴiJ311gϞEDDҭ cddd@.+SaR\\44iD򤧧cG~~k1b&O *U_UgiQ]2}agTWx wA&Mjl-i[K?0qI9Wj IDAT㌲ʒj )kqFſ5fpjt-i[K&AhժZj Fi&@_*S3*K90tĮ$y NĮI#G[oK.9x LLLDy{ QKzQ&&l;8aj+&&F6Ϟ=[mkIoСD$&&"66Xr 䌲H5RΔ}>xg;Y7Ut?֒rϟO~~~߻wG hɓoYc,9zrFYy)gJqFuOb:Sn];wAvvvӊ+*@ܷ͛7#""...:u`ӦM5k|Ij.cɁד3#H9Sb3;| ә\|u-M%徝8qgV?w\"** EEEٳgXc,9zrFYy)gJqFu0ɓ'+lgeeU¥ZK}kذ!Ν;hDEEaΜ93gNc5@ej)~әG!''4Į'f#Gŋ8x`mΝH*/Uƒ)'gG9rgTwL V3޾FlmmqetС;v >C>x`;KXN_ 6_|1pFe8Uݻ!ɐ(lVVV=zz իnݺرc*uۇP#((+VP~ޒ%KwyGmFׯc۶my.]BJJ F-AヒŋU^.c2|r>4"!վ6k,XZZCƍ͛7c Č3`ii~!!!طoG B̞=*uSRRKKKBrJ++W ****RnJ?j Tw%3JQPPǏ#,,Lrg3ʤd/ ʱj*A}vSPP@5-Z(խ[:uꤘFcżd$ɔFTcTT @wޥիW9\. Ҝ9sʊFx_fffV:d2v۷ݝJݸqAo.cU2|r>z|i$>>JJKi3gp-|G*ߊׯPȁLݺuÇ+=~׮]Ð!CcڵpuuEvv6"""}ܤI0|ppBy1zꅧOb޽UzQFӧ/cb*2)|*|20x{{#00Piݻ!!!JKo7aL0A ud2={86mСCZ oV\ WWWt7.=...*;wT^.cHOO޽{쬶q1]gI 8 wpuuPro޽{}Oz`bb333Ç+}beeWWW\x=˗/ӧO?i*yk.S͛xQ3OQUQ&OUϚ Lt-Z@_!22ܶطo?~ +++@NN9Wgv0zh@ͱl2;wF=ЦMԩSE~))S .._T788۶mC~~~w(|ryU=a|g8p Qvm(~>y<Ƥ3e|~PyO9-޽{ĉ[..]^z?ɓ'ѵkWEl߾M4Add$!ClƏ ,]TKp>rE~)5i҄={f^i&11(;;]aLg8IIa|B\'cĉptt4tW;(cdR׀0I*됰n߾mi.55]`L8II@7Zf1cc10c1 1c1c1cLoxc10c1 1c1c1cLoxc10c1 1c1c1cLoxc10c1 1c1c1cLoxc1*dܹ1i㌲ @VV>S 4ddrW^U)oJII RG0qD!!!裏S֪ϐ!C4^쐟]aa!4m2 w L&Þ={41XMLLĉѡCB&aĈSi~d2_fW_}UnŊJEDD@&!..GGGC&!&&Rd8!FFݻ˗􄕕\\\7j'ΨbGٳ!{{{ܿuATTڍ+W^z e%ڵkѣ.^.] ,, )))7o݋$봖?2W155Ç#G/ //(**R[C vo[۹sӰ .\PvLMMb ~:n SSS2iYqF'VF7l؀ǣ~h۶-CaصkF˗k/Ψ,ڿ?=|:uD PFFֵfΜI Д)SD ԹsgQjӰaH;w1cƐ 4{l$AhԨQ_jk׎4h@jۅo^gՕd2]ve~S~έ](==vM Ј#*/WWWKVVV6$׏A+V(>rH\NTT @111'SXݱcO3daaA q8ç`iQpF:uбcGݻW'uvvFamm]:Ϟ=ի!y\p<к0~x]vErrR/B&aJ/_\3f@&aZ,7oĆ Yf)_K,Aaa^kU)F\tItݻ#GDZD]n!&777QW۲knS =<<DT c"???kXjZn */yWNhٌ5]t!C`j|TNR3*-<7nCm G.]paCwLn߾;Yf*Ϝ9>>>شiVu߿]b޽ǫ#GwXxK/ggg ގ;lJk ѪOٵkr9r'tZƍXh lذ.\:nX.yرbGttK[eƜ[]޽;7n FV@@ N4 .SW88999j׮{9׀T1a|goN֬Y̛7Oi#s}jUhٲ}K}~m]wr=z믿V&uQeQUOj(>JqFUqF{wH:tVJU ۷GÆ Y[[# @ @MX㩨o}^l:Zj&GJO-եKΝ;N½{p<{LqoiZjVӲ0GGGDGG3o>ȑ#XjUj0.[ vvv}:W_|èQꊤ$XXX|5Ο?ӧOv؁zi~u8Ŝ9s FwVn$K/74Sڵ {Ve/4k׮Xt)n݊cذa1w\_^~rDM*m$;wZj?@qq1d{.GGGTX[ZXUza\e 'N@˖-ѪUJDbb"fΜ `ZZ0bLAt%?P~}.O 8Ƒ?fB@@m[Ψ)Xϑ8}4֭[uxYjZTT$ylt] Àm[Lm6@~GչssN`Jm;w AwѣGJp U?OaÆ>7oƺuT"1b\\\T^UpnkvnaƌؼyW_ţG+i3Z3:w\̚5 [Ν;E|}=r)1k,hѢZl*#""BE̘1Cq·~۷WyAD] W\\ Z_Hl <<wo|*[.ZhSNA&)]d dgg ZES~);Hڵ ~~~HMMő#Gо}{L>>Zo*3f ۷O͇~t{mNQh\\"##abbP۹iu:e([LAAAdjjJEFFҺuѣtQZnEFFkFԲeKAqL&I_KoWҩ rrvv&LF.]pdggGyyyZs?~<ӟYLB kݻw'LFo<0a-G}VZ|񶃕b ݻ75mڔΎZlI#Gk/ކ"o3ٴiSdtڵ mxKߧmKi ڲeFV_ƞh/S FGGL&SgDDD-},}_Y9|>̝68e}>e_:wqKFQ@,--i„ YaL0aYYYi48p yyy'|RNnn.d21cŒ}vz뭷ӓ(44ϟOW\QjWܽ+JeU>|HӦMnݺQzHV6==G 6MΝ;jۮYBBB֖ZnM_u}(c D::Y ܽ{u{6n܈#F[nx7ѠAddd֭[+eIJJoW9^*{ ogΜիq%۷OqɈ$$$`׮]Jﷰ s˴]z/_hDFF*KOOGHH0m4`Μ9Jn=U.\?'NīT̝;|,X:g1zK<zիW;[n<,++ ի6mdqFoS511Q:R|ZꋟO>xJg*QXX,ZЧOc…HIIQxNNn݊M¢XY pUt]`Ҕ{_/Ff'MnСO1{lX2}GFu;]*I'C%ށKRACѹsI&ԤI:{, Zѣ @[nUw^-Zkx۴vʇF$bgTTT @FoݺEjբcV IDATن3ʓ']eTWs | @*0aYXX(~7o @*mijIߓQٳ'BCC1}tkxyya֭e.<777k2_4i$|7Uz71|pgN*`Μ934zͪl*}]ʨT?kR%v=1k3b|9s(]`uV 8#F@rr2233lٲr_r1&]F=3gi{T6 ^@ݫE2WR͞ڴ)%b1V]:wFHHы M6q@qq1ѷo_ E\\\i޲u1&2$$$I&4i222lI&I&HHHy2S͍jfOSuSU/]~~>T١׮]dgg#??-ZPi+<4 %EN3t¨ N²eː ///١M66l ֭[^^^?tR>}Z;pؑaa<a5dkũhЀObՋs۷P1ÇC7=tbsGGG"//?:Oϒ@cdd2 2Fbb"RRRpl۶ y9r$BBB0x`cGx,9vU#'U͞8pй6m !C`ƌADSk {rkT!C0dQ3?VWiƨ LLLo70tWJ? u `1&.eOC9;?O?==bLs]h"~Wnݺaʔ)/ pvvԸs,,,ʽ VAxl1G|pTBHB Z&U0H{;JAJQz HiPBN(X59({3sݹwf(BQJ*)<<):4vm^jvC( {Cq 7?)SeuFڵi޼9ƍ{` &`ddDǎټy3VSN3bĈ'sBiB5@R "V}rر'x\LTgJ,E)feB!\aaHQJ>2dÆ #113fo>LMMضr9rWWWƌ_|GyTըl#il,(^f͚E֭VZO簑md/5x~^zi~~п(J45HkD^4 Q^ժUil]y:Nffs E)9 33 .VJ&MX,--$mU5Uye%`<<8 T7,]AU5QXXnXR`jjʄ S,owNJ"cGGVERS(q.]BQQ (sHy_##v@huF SعW,t: ܞR{01Qݰg3wB;:T$qqp钡R 177|ԭ[f͚f>^_mۖ &PR%Əϑ'd"_9s+].34|?yuֱnݺ>Vʕ+9|0QQQ4hЀ^zkQR aĉ=zSSSZhOT>]i?=a{𘎏Sb+A5w)KcKm^AYQ)rF VA [n9O76& Z[WFY]|CQ^`ւiذAc)ׯaaa 85k믿riܸ1׮]YfTT? MDZ}ر4\g؞X¹ŁuV" ;tC댹Ԩ+W:ByQ*.Eh4ػ}(Ϭν4i;-⥗^*pH?Ogg4E|Yde!h׮N 1S]Ql޼4.\ȫ @ݹq7ndٲe=0F^7IWΒ%Kx#Ц l؀?- T\Px7f„ /_u˗h8JO{{vCC mO6j6QT7efΜɬYxwzw Gu爉`c3n--b[6(W6!aeʨq 믳m۶y9 qsvvOt888`bbR(c%'#m@x8BBfYHJ*2)Ϩ]t)يm[-.\NO'}{HJOJ9n$ޠ b IQLQԩS6mSN}IVVV9sΝ;SƆqqХ յ5~l 3׼>}PB&L@`` ,[M61zhZmъ/NGLuG .EQjUJvu+OciKڹ4Z$aѰ igZj>*Zl!)J)ܛ1cSN//xhVˋm۶=%$$2tЧ-qCʢms)'N@B YQ!y?D<==)Wo6/.1Z&Z-{ILx.Ɓ(JI wٓM6M^^߿b ̝xGBkM\a KL*/ܹ3;w&(( &`ddDǎټy3VSN3bĈcѰ*Vґ,Czٽw(%!y7nܠydgg߲c}]&LțT++%$ǁjVмEzHff+hM4Ff͚INNN,"g:SmNwb/˗h2cq( [a)ϡ{kPsW_V+E>mHH[B %O-2jHJ T,*徢QC\>#t|t:(h4?ѣǿWg4mfCxsbf&YESck׮ݻ?lٲ\CU ]:tyQ^=jԨA;w.߄ap@6d۬+ŠX+zub KQDa枯/yyy|s<.twwۛ(n޼ʕ+qpp(y}b"I]5ҿǣ}4wC1S׼{R~}{gʔ)h͜;b7LMo0FT'3N,)/CL"PNcر;֠q$$́bN*ЭfMº5[/y3lX}&ODxʤ=R+#t5e{֥)/_R~V/̡CТU'(P;v 44􁙷(W///֯_ObbozrZٗNf0?H㞍GєQQQO@JHr.a!;ۻA_g>8X+ʋ%?;+tZZ=5^}k@;'tdT>@еkW~7FŋyWߎJ9L;;uJSQxnFDFÁ!*鬈قC ˼N-՞R~Ln:u/ȑ{e^՜حtˆrt6vK.cpa 竧Jakٲ%gΜa۶mر۳tRvNr9r'2fLMMiժ=666O=Oҡ$:gݥKĶn_-Ņiw2~N~>h-XE1"w;ioHHSZ5.]Dnn....TZⲵ$&f 5{~7F?*W5OѰlC\°a.\5-DEWJj]k;6}^mʽmiMHIdY5k 蕄Y&5kO>yvh)Shn>*1ҒitW'>:.k ???fΜIVVrYزe |W][/BPL˛#vvLIV`n6;88ʳ^Aٶ%7)'p61aTB072T^wwRѕYϻh5-,؛ Zapea쏑g(B7@j׏^zamm 5{_~_TJjNgI\V{8-LJ"KgPޘ/  VANN($^Aʧ`nFX98-6tA{VdO~Μ' ރ-[h+O:|g !&TBQrbR? gRΎIIЦ f{F7Xrr ^CsHKSSe+%ϳwe4a_b"nYa;'(ʟ޽a5FKQ 兞FIjj*ӧO_& /U_5F*XBBB|9;ĸs IDATx .Hr d~gh/=aڛLtf?BU$^AimWWbc>]#{wFgSONFN}X E)6bT:6-aucVh(9m`wXc;p4lhţܕ̈́  # u@hh(}Qbeeņ (]ɇjH66FFO?1Fl=ݰYRrJjFLF_s$f&"aWfKs4+׌E'p=k忞ż+;ۓp v6Ԣ#֑ФP|ҥU7,E1222077TRhтТE J*Unݚco ƈĜش!q{<FAXv>Wg(ʳ^Aٵ'99IّljzuعQ/U^L5])9ռ+D}$?=T)pv??l?h:bEy`nnNժUIOO7t(tЁ+WpB(mƱ# jjԮ M…BB0Gٲj0(iWP66cq+ oo8Z8b w0tb:t(Z˱coB޽qqqRJxyy[󤥝L]MIܥ־hôԆgW3x0DFB@@QXQQ ڷoϢEK.EޟoI4iׯt>$%S ق =ٷXeKH9+Ȋ(s(`o߅;w6ۑ?hEr^Ý;n Fb"llEy_r)W7ڵkxxxɂ 6mAAAxxxX3i߉}gKN&];f{o\&*+RT_;wСCϟ9y?ĉqqqAicI$88H߾fbn6[/m1öm8\E)VE{Ee׮]89'%&5'rla|mYK[O6Rr"iҤKff& :qܹg틗vƍ,)@YY%.n;IΫM@~>cil곫4Hc 3Ћ(ʓ"""手V֭K*VVV.88X`9p$'O3gϯK}썎|}7!AEll$M1n"s͑ME:w*/{kHsݫ7WWWI3uk}N_ Q/K#G$9rD" j(k \hR(ςђw^^^֭[""'2lذZj=X?ƈd&$.Ud"+'C* ."*ϡt }VixZ|ywr>0cF+ٰa&!$d"q\^ywalO>,9 Q""յH(r(EDDpyE縲03ZQJ?QSGm]7ʵ?C.9s ]EW.))͛7Ӷm[ʗ/;wHOOnݺm_N-[ش"'RiΎЦ 8qYqf V_9k@ޅ^DEQC5@:th3::_RΝ7t׏72c!]GVLV"n{?p+W^2]?9-bjڊUO XR"#k֬/s,%1P7z:S{: 6Xvvoل+૯ХP^d%!֭[Gff&ÇYDDϱUti233ILL56.N~gܜvYq_O)ʳ+<9&AR~9Eyќ8qu5k2rȿ~ƜApp(Mϸ{32⇈x}8uWͩb_uWk ʳruԉ 6PTZsö-IΎbcaP07Gό|y$\O7㈍7t  w˖-ёޅܹs8: .nvOϧt >Y@dgw(_ܹURlY4iBٲeVwڼy3;v(Ѐem=o_o&W&>~=,ɀ+Y²(۶J,Z fM ϕ+ꇎأG:fΝ;rFJVDD;p,% ?[5/N`td0dޝ={`x z܍O?&O̘1G81v /ؼ`5X[7?<<`Jެ&IYInSPygL2 СCY &/CJ2eH>\cH2e?믿.VVV(woP"|$$G$,3St~~2?,Ldly^ҮH͚"YS$ ++jRF rQ^v5t2gΜ^ݫȉ;⋯<-ʑHKK)SdEaQbb"w^\9T*3g\1aΜ9Sc-[___/t3331ccf`ذjn;6lt>eLi39qnnddFż]-'yeRP) 3˶m0h رc?ݰz&aooZNp7Μ<8aE k(/*CoFBB#Fx &`ddDǎټy3VSN?vf֭88t'%% 4FPJc_V €0GtQݰ]Ƥa]%R, 3˞=\f͚fz ng擵/Q,"j@`bmt#(ۊb̻˗ceer9rWWWƌ_|GTj ooo;HMfHO;;%$pvOңZVYA‰pJaXQ w5hЀ )))4j_CM_5aCXJ?VBBGbn11[(7YYYq$$pF hŌh0ǡ\ ÆkTq^aKMO0x`C^t$oDz%1[cJN~>?߾ coFX[p8s _fS Ðyg|6x{{͛7Yr%:~6mpׯPTsفtHr2)Clo{swQSE)r7|CBBδk׎I&Ѿ}{J.M\\_>/BrrS;~[;յ5jԸ 5~Ǣ)]6>0?2Rd.s舉΄ә60`֜]C9\'N|S hԨ ==(aÆG/vʧCvJII!00 æ ֍ ;..hX1uGj?OA3(R {+V$!!___f͚mu:M4y`SSѾ=ʕnXAAA$$NgEBoBĂ9aaȨQLhY%N,bly.T\ [Pk?~8 ͫߊɞ]tqa{\66 ˖f]/bc.ggSEQj}Çظ:cƍTqqz'/3x)ˆ}1ƬoO ?tBC R,Ey=yJ?s|_{`eeņ 88ΝyiyD.dbrOKc 0ÇI' }+l{B׮]166~;qq;lGte`ղ,*Jd9RL]Vaz5K9SLj8`٩e ְz5 8۷ci sʄ~coG+m(c܈f t 24fމ-Lb*JɐAٲe133f͚|'>u k) z͚5k(]iiȵgĊDdwGcT4餢??01m۶x{{؝7F!g_2XEnK2]F׾DGK(/)4zi+ѧV~IOO?vSl!=n9Z1/<=Cg/s:xqI` pХTê_>se,_jժ1|<==}ʭ- +<˗/s:511(qyc5ᓐ n]X-?gDkNᇰ`;(NFޭ@vv5HIfH"ؑCºu vE^~WL6Pꆥ(EI5@JӧEjxBBw4i)S Sry3Ƅ877Ԣxz*۔^{ϧV&äI.7nm۶eРAlݺI&q)-[}np;-CaFhڴ-NNN[GǞDG)NFo[*17"B?x϶=3n8&Lϊ\ ?7!"%Oiu+=j*J2|p8)p@Nm AjjZ~ ܽ9.WLOʓy+1͍wڧ88`'=a:5΋hݺueաlNh~7Xw /-$sueO|<˖ma2шxLf BQjD>>p6 ܝs>;:z';; 6&&N~(WF2͍-USR-#_W_ѡW,kTs+v۝ٻ֭aciӦɓwͩX1ǡBVk11\Nt;MdԪ'|Ѽl۶e޼yաΝnXظ9e`^ŜQ/][##~ҿ$0TԆ1+6L?}}ZK(ϟbcdKұrG\]Yvj^^gϺѷo_fΜI^r&r (;,#Z-?FFj՗Cә9S?Po߾+SRsoҥҸq'nקF’umÆs1UTa͚5T8 lgHNsq(}W i2vKTJﯿ{(ݟI~\2K̘1mBBBݻ7...TT ///bcc t|77hHӮwdggwallZ].:!,"gOt3|`ѢEy LxjEOppܫHNL:0IJ*%iiRk\pAZ,\PrsSAr}I.Z_ 1\&\*v#`F#r|M31WCQ#"/R[ 6:v)6m˗F˦MdӦM.7oޔ-Z… eݲrJ֭JӦM%77ǽWo'N?5nkIZ"'OkkkIOO3gѣ%??WN9% 1ٷn .bg'r|CBBäm[jDe%+ϴђp۲eXXXHϞ=eݺu+K.ӧիRtiiҤlڴIV\)UT*UHBBc}"ff"" 6Khwo*q` ׿.RS__Y{"ea sGFqrIK+PQ>^e߾}RZ5W|'e㏥^zRZ5ٿsza ;WD$>^7?fT3##!2ZD74)}yymk?ƍE^41gQ^Ŋ!u$$$k&*U ̙3%##ǽ_oAAӉD;U+2bH ".]@6n(II}{_|%nw xQ\۷ElmEzK2['e<_pῨ`W9jk^RR8::ʐ!Cȑ#իWEٳ߽:vܼY#2c ?*W޿"J^fzꔴ:yR)[ꂪ7u##+ZP>^_M8Qիuu֕?E"ډHm)Պ,^/^rr%0F]@'/1Z LNٷOmv>Z .]DʗyM%9T]3j|^1 }v}qK.MffSc3љZlضMkƶm۰LNRR6֍)dOcxٲ&01i.Ƽ2yA.| dfz(ʋЏ`J^zHNNJzU1. WPMd@itZI]$,YzraIN>)HTԯr{mWRqy]}FEyIGGGDQ^EȻ:uF{Ǐ/F<('NF#VzhSFy@{uXQXK޾89uӧ >>!tiKP 9y.__Y)"+KljXϴ {&ի":~NŲvZ޽K˖-K5Y wKٲeEшhBDшy ]pnЏF]DNE _]Z?(}ܦ2m4ʊSys^ w.0P޺xQ$%EEOsQtSuo%!A?eKLsF8!+}'tS O 7_>0O(Igu+.]b4i҄X^y&O˗qss+*V]_ 6d٩e GܹsIK3lٷ 4ۗq7b;oP^9-T?ŨƣK"ϳj<+ūDthj Ԛ%'0t(> Wj5kڵXcWSlfqnnLy\oQw/Cr $!Ykւ;wfs>gtH>ڵk7]wӧOg|9=O>QssyEW4MWˣ^z̘19ލ/qZ #_8]DnSON=~GGź2m7U ?o2wU=;bZ}J5 Gx4.AAP//ZZ~{+=3 5]\R.FkBw1gnիG^?>N;رciժ۷gĉ+mhVL07W%/[SLkW5=Lhh'4 NFy9_edy*$ )/L7sy1hֵ o͡#.;whԨG'85y `g /_νދNcg}9o|Uj<߇ C;{wۛ,'r5%uzQl28񱱐 sϡi(?ORA˖)fjQ4xV3J(kE$yG9!_~%Fc z\qߙOvEP\ -[g6Ӎ=zTvpQTF/'ݝ/6k4YYh52ly'ر!66҃BnOWBKx &aah&i=nݢvN)Uo.D. NE~Y3sdRIjʜ9"? ̙3D>3CZ%'g\qjLnJhHOL# "K^_&l mRUG͛kǻuhZoSNrk[e]:;VM_/,+V\i )- ҲPiRے'},=yRd$=Ef̐'L.MEE֮83/ʯ X󓸸8y/B7$үȒ%2}-)ܹ"yy"+R~};w\}+Ұ 9ztw\5RHr˕%\#|.rHv"< 7* D>?"W-WUn.Dwɘ8QA%K|sl;M&OzEڶm'ӦM \ZxXRSWtYEdKBk&3SSE,9~\>[$ߍNm(㷌"<#rxMx+ѣ^Z*{Oߏ.v6Ld&_~YeҴVJɪ$o,yukْ+"wyLّCJE>HneHMo=J׮]).C=:N;sKVpr2)E)ԝSx W^Q1!!A=O`@V9v:$pԫ?t24ߘT^zIDGWY\0iWn3f@F`4rj+ɮ_ E4hЀӧc4ƣHOMӈ7ૂ(%wRx sDxf8^x~CNpM+夻fvxo\l/.b3f̠A^ɔXYhEPU!г'N_εwWi\q9 ٓ͛WvիWgϞ]7--pVXرceg= =x`FykÆ `6UoERAyyW/he˖<dd|^/g#YbAp{d$vM͛hx1-jǭJNުyZ?cÆ gO5gui:8礓x.ׄ_?3FU1`xyyѣɔ%B`@'cs: b/-]UyY߄ 0_Cvrr`Ʊ ɓ'Ss,'( /`:bB/zbEE^8p@͏V6OW\ţWt.:NeN'z?gȐ! 'O<#6""BnF9tp go^-!fWݤU}e#e<?9rDd/^`߿DGtSlʑǎH=%6+*J^jFu"k"_~)b0HH;ܶ6yk[2\8PG$0PiӋ6Kĥ^Uv7N/.NFn%QQrdJUFҥs=_Ixx_h"}I|Ix*AzS sgyhfaÄ͛_r^";ww_EPtwfɘ(6?SK~HHȴidӦM*yyIZ<0 MGC+""MB pCgO o6͡-5 OtD%<$ lو {pbfoSNR^J@@yB|WQ}W^,` ͼytqTU[n,RZg XB$_{ |}!3+t:111`pU l?fguY0L^ڛ_t\})]fd\bcV\pN ͛Xo{RS!%%-Z͖7'N:$BDgCv=<`|v'F ;XR]j...}^<.ӻwo<==s{7)а!dei뾺ƷVV رcԯ_I&^Nyj9Hx>MxQ BKJSR˖p8mVNOZUEXz^嫸>5 }'hݺ55a7WCېLL 1x`_v=Urqq x>/rXVRSS/=< o6mb޽̟? NՒ#L7.PCaÆ hFtf' (ɭ\LŢVs᭷.檅Wq)*/b{>q"\A%U\.?^urޅ")ܱ4Mc{_!((Ms@BC;b& ۞ǯ^t%cUx~ > @U(bXՔOMjt+ׁN;7991cpUWѡC&L@^^^ W L D ojd|N7|ɔX(4}q:Df3N^# %6n&5UIgl.j!Z; ?3_= 6d3 킮zjn67om۶e/|kתun9kH1;ԡ;@4{14h'XN؄"}(l+V+W?8eޤ$7oNٲe }]tK.MYm6` Ssaqi񖊐dt NLXFhPU;3'bQ^^p|wRʲeQ.pjzv@bbbpssI&$!!!XkT\ߓG147N$'ngРAk׎" YYH4 9$M㞨(N{baۑmtgϓڜN6.{t~:^"&Q{hh5ERӃgmrAv+,TqF??aMԃ#0x|||*N^`0="ͮSn.㪽z߾I'?={3#7bjhj6*:4Zu;r PMuCccQZz:{!#+z7ʢpv+!}tEY^kLD!9Y bE+sm<)ڵkqssI?'df{Vnڴ a͚58DFN``#X4FQ6 gDFFGԴo¿AEEj#mBørjzm;_.nVH7m ٴI:ivZDktZ MXX3 0x8:(1/5Y ))woI5ۋ?b2uJ ..CUw#Fnݺ8s뜲9ri ?r&s7\@i3uٯ_? iG%'U坝jHm?ωZ j3K θr@.rAx ͛73yj>5檆K': P٩'Oח$bCHHS FhUwG~>: ٽ[9!#Gg!!~܀*7YZHM; M{?ۃdfR@vwWtC||deɊŁB>C#<3K'ii`4޽;=zd24|^d.t2$2fAA3Rz+k¯xdܦq-6ƎU.j+U8p`^x3&''… yiqgO4ff5ۋFVUz}@BTQ^9ٌ{,GcПУӱ0x!jdEՉE\ i0xJJ//'8 3dl&{FyXX^QdJ ( 0Uw*}v6bs:FY,}'|W~?\/5.Q%7t\zCR:^_/^PRF@/ivrVwkn.#U]2z4G!~[l3Ojvo}QFԩS]㏓pƹǎcرjՊ3qDfr}٬jFL*Fvԉ|ܭBn抄9 p,N0`,X҃>K`ZvuEJ"~]= ?ayr%K>"—I1<8rI4M#m*ϛ( Ç1:s1cjǸM*"8X=]wuQϼ: U|9ա, ;_cz@5Vɰ&Mח#GtZ8|x(() avqkAM0%/*7 Qh8˖-23Y<v>LȎ&}4Z՜{5_^u ?$$(:11cnVHv5x j+%(xozv2ϋ"6UwT.qN1YKg8xP=kV^^/;6f2zschgPD*ѻc_NHy95m?k$$ϭZ^5˿a<R-ΗSq6Z{7&1_= V,ݺuW^L&# 0 Fc  c(,+JJhDϰ0V{tT~<ʬes\TV5eO[;U:cP^$p8[ڵ+& %=,="2!}IF׳9'vծ17`.n3N &1QՊ..Q\T .}^JgeHO1䮨()>\dVݻEnMnZJaܷܺVIW iNDvY)""͚5;XbHqqq|i""iwʖ[o aʧƉՓ-[eԨQbw]Rn[&T齻hVMGD : z)v8HIjSd\e[coJA%8X$?_C'pQQdD>)*ʀț)^u4y] DeՒ&ԩF:u/YY˥$H|E9vI(Mn-h!S$fY^Dǵ367mFٺUDEr@TYHODZܽd-Rף4F:l,RZ*#"VN,Y"'N &ۥmץm7$9$mh+v5;.Vn}>bKΰa"AA""7(mOH2zh.y'r]"/["6[Mʅ g2jԨ^?~ʕ"'N̞-vJayIrY~5ҺNy0.NW_-bȖ-;Y7vsdҶI2hSVPִ!\Ajz 6qILBn[n<3dgg_ϯ-W^QA@dV$syG4}TUngxyy{*<0T Cf׈1#Gg<}nL9 Mx]uk5EQRAFFM4AѱcGy:tNiӦdffVwP}|T)v'|*_ۧyjdZ+C N11c3 K$v!!t %LŧL5ۋ!oA뫪z.i.]z4:l6zU=4]._sdwBLD[r`_""nLhPqF>LA^p8Nh13x,..hm Ţr%M#.7n, ]ͦrx@7/ǏOגX:yRUxMibo?a~|Nx!^]qQ]Ԧ9rT#РAbbbN{LL 6GPm77߬8;Oĝ+G`(+rJz E$%MG^C㍄ !}(&RF]V괻z~v-I`j 4SVJ~! 4xV@56:Tk^7)]nWˢ<-z l,FDD܊a<^a6 p_!bcqYyh%iba}zΩKH+NK^pLhm J ۶/OWV7u꩒zq+$}q:zѓ^M9zj1a%N?@٬櫮RÁˇ4^ ڷoό3z쭷ޢ}QK:]85'or4O R=B R F# QFDFF%z11c*xt?@P JJ0;L9zr(f MU+$E'j:?or6n U.N6 U]veVZN㡇b˖-lٲ Tc %>^<f7?\<w߭(Jz= >LII(><{Cc4.15!뙟tZ^^п?r!~֖ 05(xzHj~5Z漪mi*cG(/'49޼mN-t:뱾}2pj T㏃VFDT aaШZ-*틯/[+2JK#nMHH;&#1xH]8\VFi\Z )-%:;>K1˃9s(SNȭVi ;_n;wاM#,ﲾY˰U^N|ߙ4N=GisMf&^}$d|u3,L9 oO1@@R\Z夻ltugdP\^Lӏ2e~ƽ_~%"V@PP GiN jD*)}Kn.eF9>\ "N%Ѐ=8mʆƚeng\l,ZR6V XVfqIO (HmKש~~B6 UZv*ʎGhNNj.Tbp] df. km^b'k7 YYY̙ gcF~ܔf 1f#%%O?>{UTER-;q^zgKNNf̘1\uUtЁ &wkc Xnjݬn]U0trӮ];JJJ߁^رԥ E< $MWI/'&i0pD` v1\YTi쭷\~m6͡+./iذaeȆNQF|W||oEg>SzE:u ;{. j[RK)w:v"#8yjT4̙0vXJKKKLu nLP wi05" E%ÓOBa!!i!t sWiQDjYګNn (M|;v6Ӎqa4xu{Rn]NQQNiBb4N{ h@X0)s8xDgb|,ii 'Ou_ﲰ:|BB(٠P%Xi'NTDrfŋx9W8Vm͡#.QRRBPP7n$((v3'cƌ9{. ijw.,v 6};k"UlptZ[ql߾ӳgO;IH^/$'9X/ Iz- IHq1W<(=;X_ oh52uTO0RS9zT\X\WXSϪ^urIj7bFݎ6 IDATonV *j|ӕO5jDΝ+s23a0xp]lcTպ& l|?JK!5U^zzœ9`%n 4ƬZGNرܵR]\*֤~ƌɓyϨT; ,8.fS9lو zUuҥKكi=,GeGTRzx)4 CTRzV*ܹ3deq >s}q UTc.jqp9 ][]J>. m'z//{N '|)[T 6AAqqqt҅&Mw^4MXrСIhFt pS<'!ft>Dcݴ5u}Sf1Oж CWXPKT lA3}ՍE'UJST Wӧެ["=Mؿ Fc<<1ccЋI؋$L=x/NexG? ^5EjC7j{un:6lHff&O"",N'$%!z=#ɷT M7)/gT(.#?ja+kȪUk;?b׫jRw4mڔKdeeXh}>uf> )qW}IwV#Nڍo rs!%%ci6[!\] [jDH6'KJHL)/~0Yyh%'<3؝vvVUQR ƿ9 a̘1x{{p5vCk Iԓ 0x!'<8l6x uرLn7@Dx'(//(#!9z!*UTYиG㰗ɱZ ɤx@}@f& ?7?}? eAmݎ͖OlCB\ܣl('zd*;0x#f`҈o-`r 3ׇYY|zTb96\TPڥ^US#v3U3`i؝\+rTCu77u999y睸'i%%9p;''NQQʁOt'sr:$|8]]]ymJo`@nP$|B9L]JIKQ >y6 $9p \]ֹP`n(ruayxς H-aӦMd8q"߃N'dqrݺT;G+[nnY39-h@\ f|rZYYk׮ V.T*&t-o?yryc GH璤$a` ץh$/^_9c8:>+-xccn2n"DfG:X(QoجYD|!׻5D [ЖHNNqj!YYY4 #"#SW2!A3&?EuY֪{eYǏ)mی̎ ?p ["y# ruȚa= 7 B///y53DsxÆ5%'N~$EȽH,--e=زeKfffhڵ~ iANd֤Q9?L$IިgY*{+ׯe2{=j4{m* mÔ$ŗ)r 9}z9:ݽKkMef&uHWj%"T/@޺$U_?:WYmW)V17 9#-[aV`6떗';mmŠ\Ni2rujJ]`m-%%zI&trrW_}E(FFBah4VRcX!gD_-f%IIR(.4{ssi0D*"ĬYy& ;oL#?$pƍ zll!`ٿN rDs4jTSe4SZ0I%"Daad:7ΎڵŋIMoݚB~ݛjuMU&fl̠J'%?LHTh!uHwPY)R.[' Bt}mڭ:g~t#fWxy_~1jt3|-#M&J]wlMM22Ra89^ ,))ܹs gTTM&=VSfHH |OI2R)1Oİ2|"&>,Lܾ]DoyhۇwG_mo9ȄD#bm-VWOښ :477[nnBM!%I @yXLJZZm:cpp {X o%P2I2#""YZ #>\)n$s0iRM48vOƅ 5hVf 8P ɐvޝ\p!YY;w\waaiL&!(+!"¸/7rQ*RZ/'_c?uLHy"cgGr5juΞQyL6Ј~Gd$^&)`'hdUU]Gҙ%%"83rS2J=(xBW͝{dʹ\ia14B=Ғܰ~@u3B0hI"R"3BLWƗNDgT䈺o=$ԩp̙LHH$=2 `PKtTRd$VWFY'FGr9ۆrKf&z=y1eN2.p[oiMQ{y7EeDL&\B:akf]sD=+k)I46me{^׬P.|RsgVx#Q#5r9xPU!AL[F}Hq1G,- <ײq摙XiSL(ڵV(lm͌Qkn0ÇIIɸ\,Ξ-L qȩShaaWx(زPY\-䌝K 1#"@BݴW YlֻT) o1)QČP :/56O?-q |t<}Z ߏz' tK򢍍MaXW^ϯs-Ibz;F" 6!9scF :tB)N|njZnڴҥKY\\L.IIT6`@-dee *=S>NY&.H6UL˒00r9gܾ͠RJb``@ӧ3 3WdDMFؘBx׮VڣEm[a6UGXi?I7;Wp]˗Eɓѣpܸq $CCPd|t٬ʭP:)`M6\"Vl ծIW?fϛ~ EL a?w${P<h>}tA%Ir򚡠P|8e2Ya9sf_C5\QtoHZ"M矛O˕lE{;II,ZXO>#]]]n:VTTP/fZyP;ϱeppS[SXR̭ iBLΘ1TӴ4 !rqOO*חܷiYwՏf5}[]EEp{< IDAT@ e[&AmZ]CϠ !6wnK*?%~LIX^.6 =𠗗$33P.^$W=!rYBrz#(ʒsQս;y˫kz1_<"˫Hv$.uŊ!ܳ QO@ѴiSnիWioo_0hZ qtQuH$Lz}E|k5IDZZ-δs=HLz5yy?hdiP)<{ +z5;řGfv-e~2?{򢢌si#Pu=(iz=駢CyR7-|=6x~=?!:5ʄ o))ogmۖ2< h2阓]4ꪘ}üjdmϢDϣUXܒFD A<{LOk/T/ßc xb."8feZdk{ sZ"pI!d@:5?!coިZ-"2kcjՊ2'Ni4R]͛)!!R.3- TG]V7@kbbxd'čJʚn8-w1B{{~𠈉EԶ%{P<\@M5/m D/.$I,,I ggK*Æ -WjRȰ5BTU t dg(ˮQo2qݻ\q"e Ʉї2?<&K%2(Ϫa3A=ƈ#8bO8&LkGtr'{)IW눯vk[`< J+".3RRD)ȱc8d`v_M3(Qdhn>,8RQCNe%c_ꢊ-ץ & / kӇܰYYguw[c)?MyR!]所I=(i I/{Q19S'gS'cǯ:rO :j4bO˖b2cy:gӇŭ[7" +*LL|巨1muCZ@dHfB[33'200s\\LeqLh$JV| ]^Fϭf\paO] ڵRWIwqڶGwQQQ8q"[nM{{{vܙ ,{rQ$>l֬=== /ZmH?~AM/? ގ2*)}&ަ7l@I$02 fe}%IҴl+$KQ[Y䮜 tID\]ɟdЭtZh0HKQТy[ PO@OL)S_~L&Ν;ښ~ h]1ߟ$Lxǚ ]x2$MIIUܴ'M 8&gytvvo0:ݷY^~IL]ZS, fpI _RISTD=*{{_~[_ar0v{t׮_a~`m7j/Uhzܹqfdd?d˖- :ug}Ƭ,VV&197gFfjTGy rw g4$WDa!!#IJ (8 =ɏ?fwD| &z5ч~< &W_DH4`n}Aana2:aNNĐ$c biږ:so38|ofNB@ٸqcQxIZ[Sd@-y*EVk"U4Cΐ!LZkj^Ur\\/~۲* *X59aMc|kA64쓳'WɓE;=#AUUUEԩSksΥۯFbb"---aÆ?<#}M~~gߤIu }'|w p),< iRAs2.#5Typ0J~Cd"A|yxD$vWYJß~"4>hQvL=ű49 <|3;~K/qqϫɸn(}Aa` Cd2!]-ݛWt_N fdŞ^A !Z8[hŋ֭[eFFwII$05aLY¢2[hPԐә*v++rXaǹ2vޅmVp51='<W6M=?lw&)2|>___vcyx8Y.d|Ti&M7aÆl޼yMYV7R.`ZjJILwi(3`Άdg, Np0-~]mKϭի30 [' fA'&#|fyIN.n?paws5z ɵk8uBY#*JKKsNz{{]]]9w\= r FE`v,e\<SCF;3yY2Kx=(F畸8eB!G=&.Ύ4<ď.~;Q'#"~2?qPo; ݵWA.*?{?~ݪU?DVUQozͣwXŜ!۬HDDz-{ 60##juPtVČYYBfQ"=#.9eܟi11R~̈dJ۷ ҍݻK2O"s;+- ?\R!C֩Qlɶ&I cbbb ~"IR&q˖-9ne6kT F۷/YP@<{NkW}~imM~84++cǎ%Λ7d`J'eA.Ab p`H-"IΆrސ}_/@fg3Qq?#20yyoJ|]?`6V!#I{Zn]p ׯ_G>}jj5{7@Z0l`㨂 'ObW.\N g[gN*_dECUkܸ@ȑg0Edk FuaĈ]׮]cijF#p4};p*Ф 0g7Ù3 hw/zĥKp駁W^ 8pN> ^#F`֬Y:u<(,<*89Ǔpwm; t$np ш%*.*BшڨŰ0؟;?..رЌE/ )(,=|`Hpxew_@f&`k ÇmQ>Ν;wq…~:^qVFG xhD>>=Q^~?CiB> n. tt NAeKtX7h}pa%rI *% -lm1 0<&//w٫8z4R) }¡Yp6mC!CO׮dkGbt9CCl "˴ib nc_>ph Ыi/9u2 |.SO BҩǏÁP(`kkS'ĨQ0QXx */J8:Ǔps|:EΪP|"Y};\'!~%NTdQ2`gakcsss瀈q3)=LR\UB֨Fnc`H[ b5p #".{mڣ|effQQQ8w.^-[_[Ȱa~g}>l|?Dr20v,PU%HH.wn܃/ {k{| >>Z1k,DEEa!I%shh::t[V(8XIh=KJ0) դ >mt:`J૯m-[7 ;o|kQ-}_G>Bv|s,Y(>L Zii)]ς{koÇ%Kॗ^kWnn QQ}Qݻf?cOǮ]8p1s8uK]=*2#AA"Z9y2 Dju?~ǎݻwɓ'c9rTgRX kkM$QR ;O;4N]$5##6IOd$^\Ab&(q82PVU{+{ n5}}›q-7n@x(#%# G3sZ23ھ{s/N'AL8{n֭3i8ď?[nFԩS1iF(T30 nn:(9[Y45Y n(+@VC'Ihncnngeht ?0Faꁓn8)ǵk 6.m0P)u;C JUs(||/ 4jזmy닄"??͛7͛`_ݻh~AV a*@d̓+:؝ORSQf2aa˖Xں5}WƏ֮kGl؆5j1<,^X{Rqȿ9#bVPO@ޫϪ7? GN%"ӦHʼn8wWR |.OazR5 "Ʉ[y&1d7ƍg%JJC: &2\\a1ptJ.b ** ƺ0/#2KKAW  ! СHKMfTW dָ7  T%F|pGX@! pr% V۾w4n@߾}fw V Ŧ}vʢ oޛ{q=:<<0LL<CZ $ GEE@vɈS N>SN!00$a:u*LfͲQTt x8h+TQ ֶh8!G .V5qrHWWchh(\\^J] ʡp8y^(r` z(: ҇!%B/Cdd`Qbela>aXhѵkWbƌسgϯ7|pT*y?KKӅm}X[#:/OyB}b/JJ {ѣEiV۶@xx8f͚,lڴ s΅TvvƢj qUUh%Z/i m`Cf&6ef+۶kMi`b ) 2Xn^C7  ZG+> z,kmlm<v؁o7oެϩ7@iع(rt731c'OH\Id°6j2#8{8sF~t:cGAFL6MKWBѠI&;v,ƍ.Cq9d*\]}:!RDR\. オdUS9䥥Ȫ :GGS,({W|oOOpPuDD g!(/ v 1 g`|y8-PWl6}͛ؿ?GGG={GE~~>1pSW!?_5~  uHS0q)I8r22f{:MÈcdÇEiS6|DgOs8u.\Fǘ1cзtZ{{/XnJJ@#"]pTCЧºK`RCQZ\2?qvZaaa|@ ߱!|MeAk@'S :v b[Mttd'D(ma=gϞCYY0o>>زe ~_AE8߳G; N,  vVvP*E!3STo-ZLUضmV^ OoB4?dg {hn#'CCڊ4v\ =p F,k\\ ;vL;wDTn o}mP)䎓pBxb86o{E7D矊:ckfzR Ο?vOLKKC޽ѫW/xyya׮]7@4NlB:u5Vc@(uB  D ]=b|n4:'\\",{5 1B]DEɡT*\XXXgϞСнllbV,&S9d2+4h..ް7@eeY N`Jzc +q]ABf 7:)ѫ?Pj &OW 9[ ghĝ<4 lp2$N&D`z ]ZcL1~,z`w;;'tP fE! dBV0tP 25Gf(/&$Մ/\\NJ#jTܪ$ ..],Έ`T F#%*ܹ5U׶W=ILkC˜@#GD(+EkbCvic\qj+Lo^"ҫPXX+V`ǎh۶->sL:m$%RnnAGPQAhi[4JJ.=!eee[F`u8jpwށn;-a[SMzb| Ni6nTqTg=n9nɶf`HM: -S{fu֭P\&ѯ΂mv((DzDK/޴H3vA\ܟ=ՙ_=z@@yo_<۷*LMMK.DGҶ-dQR$jj 07UmPj)mB)#+ 6l0`Mn[-G|k$<[!;:v숕k׮eժUk׮yHqIN:gOU}ΦS[tbNl",+S+toOz¶+w9$`at ;Vbj#GTd׮]\t SSSڵ+QQ*89$Kvӕ(Z;`g0H *ݕ(AW X2چݾ$RJri)Bm25ŋ pu%Colk7-{jk7!HXBxg(.enޝr^?}.\Ԕ}|CKP׳<G[Yn|~sjuDM!D;%,YUuD_s[i&bTW /;$>w,[7N;-;m6N PCC݅>]ikׅN0%.ՙ_ffСDGCdd566NRꔤ1MHhޛ yS\Dm%[ac&`j2ѕ}j`( = z5F@Z7xoL%&&3grDt:-[Ԑԥ޽o_t}b9.|j+;dUDyF9$=8N\*sSbbt޽'N`ooON9pwBB*Nx7eebmuf -V$TSzQvXEXS֌SA ji_Ɓ2^֭%8=ፉ<=)(_=ǃ?[n9{zK}6cܼO>YfQ\\̄ x #R_̙wΐcΦxMqo֙3,Tazy]Y#8}ZדOrqP8/xz31r"&qdg |FwpPJ- v@&M҈L:.Y%[ΝݪaaNf)9·ŇI$uNTС}߿ǐDEEҾ >>qCTVv4 ceiap6IK7ZeũZtpPtK ~츸wN )ɫ3M:s){w{3U v !!%hʾ}ٳg\ԩ:'$Ď*NS^~4XYbcPjMyKέ@k:<-hvꮱ>W^QĿUXXt.kt.{&婡z?@+KK**.pByrss9r$/S~ֶ>>quZ"{I6Ԃ8w|p)ЄOYMVe%lmyˋY^&!Əg})K/_QTYD>LLGs+J3F]~+$8-Z c_qaa!EEEq2/߽ nv j5yVqqjDPw TFEp]_pHuJ,Tۊ+QQDyD! Ӌ?} 5U}sea&r,,(-xϑ#GUFvZӺuN4!jիF k(vԞ>N QY?qԹUk֨}).caBވ{|&EN^/GJ&dj5OÄ `fVw}kFrr2=z_怜g~#D#~.g(9P97m!恗U,LZț޼ILԩY=fTбvZ^{5 g̘1XZr2Ξtll~W(K!{I6@mq-N++ska..vsc@m-~:#IIjD7~ѕLYxz3H |}]k ׫iDk0Øu[fB: G}ĨQ82m4.^nUUjX{)\áCT , ""j׆t/K:U* )pXU9ޭ=Av.BN!-Gshu:մ꘬]pCjkM=}bHMrPC߯.p߿_.gUcS6 /K+S9DaE!uiK;vxŬr/)QBA  89]@I|q!2225k54u[tXn{}u@iU)'}̛qoRPQɼ%Z;&3SɵhNGVDDooڵkb̘1<#tE~FΞu:1  XЖs9< 17mS յァ[&2 Gdth811\h3gԤӧp/^̢E8{,;vGeјpG?|ll"qwhtg^e:Wu5qJk-__99ܜB}jTCչaή@S=#"4W+W f`,緵v^rpV 4b4m ̚5q1h bbbHLLd|̚5Yfݰ]NRöoYEQ׷lFHUu,橩.TW慆R9wK;~bdF4ʪ fZ3 /XTk IHUꄤ32^6m!f! .yGFLZٵ")`l*Q )9LαϜRSݨQ8s > ڵ#99e˖Ǝ;ܹ3t}Y˙;w.{"HeNt@IՓxy5"'fZib߫yQR԰~z>S֭[WoT$** /o Bw8;KJ/9_.aQtas5_]n.yմk IDATb 89s(W:8СFb=?/iƔXX!f~ 䧟ԙϊ;]w[nM7:btm t:z).\r>hpN> ZRN.x?vQHO3ӹA ͜&=Uu50fk,t$@y#GԗeÏ)"BB(!Ւ Ga2L.p(^h s/7xnk-l<=" ?0uT;222꜍tBCCyxgjhYS}&3/Uuѕh(7:q5xy9 ٙ!]^jЗ@4;cͷgё,L,ۓ;Su']T* @eQ׎juۚ!oS^:!}ny$ץF~ #jٳ4c,moooFw駟W'dŔ]} rE|< FTYEYM9&ˇ{>do^1ci҆X\]+~77"=<1 beU?7|ԩS6mbo_H^ޏѣcPSCa,B.KsqE}t}{@6ٗ6?ϞenM :/D"B6mBYK/Ѧ6L&?lq6eeeRs ^^X?#FdȕV]⇣?xxL[7y|XF]'+ƈXpnnٰak֬a̞=OOO̐!Omo$;{)OVkC>?~TĹRܕd-B* d;0`;"~g`bB{Wj*nEٲ'Xٓʘ am'ٔUalA'0ͫUL믿믿w; ǒB1 BIs!!ڜ9sW^y1NwK.wO>\xÇ_|Ϛ!\8˖!p O]3ңr6[<%{b1_ eh~1(H<5p Qq//bnnN߾}߿?wїAa&h'BTaaG8:މEA %(RHT_F1Ufc_GjzZ'l/*"ssz‚Ǐvxu}E:ө]p"ԃZz }(Z͵Ad[#F)..nI$ƁԞD͛ǜ9s9sFa2gddsN&^/( DG#"YYs'z ǿ*"I䝻_=vjOiN Fa׷ ^v]`%;u\u _^VބlII9)!]v$UI 5X Fqبa#W7)FqL6w}cbiiyE9!pС殢Dr["'4?--[4l@@?^/ bb 3ay18Ƽim OlfsfVZ[TcJV7Jgv0evض >_<]∋cժUTWWcccC׮]}(]L۶qK9}Mjk/ոM늻yg4'S˓r.|qʬJѮ<V3@d*|4F̞=vڱj*Ұe]"R{I#u'ԩVY qq3~]cG&2)Ĥ9Z{!?[gbcfC7nt;AyW'ڲmꐨ9A׮#9ͫD$A\\|s( ۷SNDGKx+ETWҥDrr#Z;(,j#PNSǕ=\4 Մ̨M Dk#Ĩ׀/xtbus %ͅ!5C^c1&iv+鮱H}0YY-[T/"+KAK7^ӣ{O{ĝcי]TQ4DGнUwzA{amMG,jPN \/UQtؑ+Vо}{.]KWI"1 $GNҤ)&֛n1-hR:۷… {з/&& 0:'s]$'dŊ/9{,ǯA?߿?g7o߾h4s3*RҥK-QMCjO"i~$p\vJVF[^NM֌FL'-JI{9suqRmDA<EQ's<Śd7-VXX ];K;t>v@fϞMll,V?o߾\"=4~~ZHK`~>@:%LhDo~*ep(fʇ:h׽]em~[JO%#Łd{k-xv@@}Էo_>c^y*"DbHI$͏ԝBmmhupܟ~=N'p7o24$9qOII = FÜ9sZ6##Ç兿?Ǐ'//jLmPvC,,Cu?oX11 ͚K:߿̑A=Zo :Fh4v]VE\ujo<#Qx2e _} 2QߗrUo{j)MikjK ]<>3>|8p&t֍s3w\֭MRbLmP[um-|:uD o0hԠW0ӯ5sLn]իYd =h yW1Ҕk RcuGAA/^dѢEW-oS[[ƍqpp[ng6I$FF&OQC`Iv@fϞ}տ˱ˑ`„ L<$:usJ$ M )1FZZwEq:+Vp9AAAٓ˗KD"1)XMɉ' "Mxx8-Q-DԧDb\p2"""8Ή'ZVDe9|0ǎCQBCCСӦMm={ww++=zw5 ٷo^l۞Pr+//۶Mp3֨5Co{Քm)5ZWWW***(,,7:O}3uJzK#8 E;;;akk[988X$&&ްݰ0ѯ_+:uJ(",Xpű/Br[m_|MF4SQ5oJnnPE̙3$(Xbߙ3gPE\qLSnͽdzc# UUU=r-ZСCހ^pիWK/pqLLξbnnnr]w_wDTTT]w"oJ5'HJhK뮱\BbiiyH}JCo ZjI>aff&ҮY&55U>l?ZۿtR(HJJ:K$M )1FZZwZ# VL8Ɗ&D"iZz 2e ,ɓYn ٞ0aeee|u,_0oɭNSj1H}J]ch4?^Ώ vY:["ܺӧO7*Ν!۝;wfذa<—_~I\\}VY"-hJ5O1Һ)--VZdZg}rΝK@@=PM"4F퀜:u7lʕ̜9ŋEǎ_0`e/ڼVv>%Ɔ!`ڴi:u P\+W( H||<3f'ܜ޽{`)5*Z(B\#hHHH &&r tNsg|rN8Q>Ғ&NC=tmcl~͗_~Ifff]xEooo;v,-Cђk >aXt`\n[Em<\7IвKPZEQ޽{ܖ-[&EysssEPPj"66V<bΜ9bΜ9'BՊ`w]{7۷uDXX?(,,lTiK!O.LMM(Vacc#EfffgmzΝ;'z-1m4q{WL6M̟?_dgg7ڎ>i)5C֧ :h>nC֨C[^Sُr#7n Ǐft$Əߠ-}>PwV3gWfZV;-C[SmXt`)DjԐuw#Fez nBn?zcҥK-[Lou}u XSNb֬Y-7k,ѩS[Җ!׭) Ug,:0lnnCըCoܖ͐[v@Z OOOr[rh>%vvvbÆ -~zaggwK2Al,>mXt`)5zsFez nRMQi)t[oU/_),,䭷ޢ[n ڪlTWKKK*++@XXXboذ[Җ!---k׮]`Է=cс!_a}2I6!-#U899I& +V+V ' '''&2225l0# Y@ĈÇ7-!Է< &m۶ճ[PP n*&N(E[#Ceu޽xꩧ[{-g,>mXt`)5zsFewݤF逴Ǐ=b៭6mHOO}>i2prr6abbRY{-CƄ!) :FoCԨC[^S%5tuC@q…zqQ6yYbeee0~xON```ںLyy9k֬ĉ3((!C`aaaP:t jݨ{sRPPV'''fΜSO=Ϧvo{Ԩ^4*۫ѦB: FYYƍc޼yknnn7 yK }2f EW'5z"5? ERRG: FQQI=kjIDATlݺ޽{ߴ8:(tܙF3334?cdggqFZjE>}(ojjjXn=zo+++CQF-Ll 555Ŗ1}Bi ը R-!hT4e[[[accsMQaiiYW!^}Uꫯ}.++ bNرcEmmmŘ1cpww/ V[gk׮ҥKkeᬰUUU⧟~ ,7oj 1iҤFٻBQm۶Fg׮]~oAAABF#į({6lcƌӧOBcq]w #6HJ WB_ԧQ}SіP5*ۿBjT_@Eoᮻ]t5m3ef̘~c=ƈ#Yp!s矿+V0a.\]]Yr% .d<# :~ h"|3//nݺIϞ= \>Ν;  >>%׏ݻw۷/K,uu޽;:|kWVVg1|px=zpw~#F=ի),,d֭∍E`nn{2h ֬YÅ ضm[@}[g|rN8AEE2qDz!cL>Aէ>p5O}Ԩ!`}ׇhѢg {{{1l0qz (b֭eii)lR900PL8rƍ =z:ujE EQc=Vܔ)Sرc[7}fxđ#G… )))uㅢ( 뛭mA]sNDLLLeբcǎo߾ ښ1c֭EEEb„ Gy睢Fݻx+V'ssO<񄈍ZV^`BwfCը>)Ԩ!`}Շ !5ڔHC ?ˀ_}?VZ%lllVYYYBQz!uϬcƌO޽{(>W?aaa Lc)~5͆Q}SQC5*۫Bj)[ooo֬Y|/L޽IMMa;;voyʕW iV@@uO8ѣGKMM-oV 60dȐzزe >>>׏_\۶m^`9+HH>p+eeeaccӠb>_^h4hkΝ̜9k d̙l߾A[Ɔ!Q}gm6TS 5j(Fe'C RMJK{@!Ο?/>ann.}z{saaee%&L ?.ㅃ:uظqظqxDŽ7o^fϞ-ڶm+l"ŀDLLgΜBq)&^{MYa===ҥKzŋcǎImԐ۟;S888ԽѷgB駟#|||Dbbb]%xm=bԨQu 1zzF%myzz+W^+W-g>ЯFP5O} !5jFez{BH6%1 V\)ox...BQaaaQ/RFt INN ("22RhZ-Z0117gZ3+l~Ą yhr&a,:045I6!͹]b\5EC-CExxx]|1l0(x5&Xt`)5*iCՁ!kJum:,IC=Dnn..\x90T[\~'#?#//"uMrb,:045I6r Ɉ8;;7Xeuۿ?͛ f͢A]זXt`)5*iCՁ!kJum:Ɉ-gmm}xjːɑ#Gzl̚5s2wOra,:045I62())!// mO&L@jj* ,3o={6VKffUcggFaҤIuO>>WnLEEE̟?_h+,_Yx1Ç̬IWF'oFO"AjTH}6O@: f֭h4VZŬYСdddŅw+ر={@LL /_.\HYYDrHJJ OOcFN4jjjz쥗^ʊVZO?ȑ#ر#?}\>.RR $XtPo&ES^^.DDDDۻP8҉xL"3CjXȔʂ\$Xٰܒ@",\R% D#d&!}]~?5 y{y3΀_ǡemSfY~ppK477)((#0L;2rl6guuuN5xPqٌ'",,L=::Y/GaFQRS$^_z=dm+++(k]Ư555nRTZpM%[zz:677]$I(..0t:rsssXҒN'''X]]ELL~t5g`FbFIiϟOxBj:@@@=$dw[$IN/멨199˘Crr>xxx+1QR  p)))I8B)`GFmm-~ݥ}9fHOR >BmJX$\]]}CE>3J\')J.LDDDDD_?"""""/ """""2tIENDB`PyBDSF-1.10.1/doc/source/conf.py000066400000000000000000000216621420247104600161740ustar00rootroot00000000000000# -*- coding: utf-8 -*- # # PyBDSF documentation build configuration file, created by # sphinx-quickstart on Thu Jan 19 13:27:03 2012. # # This file is execfile()d with the current directory set to its containing dir. # # Note that not all possible configuration values are present in this # autogenerated file. # # All configuration values have a default; values that are commented out # serve to show the default. import sys, os # If extensions (or modules to document with autodoc) are in another directory, # add these directories to sys.path here. If the directory is relative to the # documentation root, use os.path.abspath to make it absolute, like shown here. #sys.path.insert(0, os.path.abspath('.')) # -- General configuration ----------------------------------------------------- # If your documentation needs a minimal Sphinx version, state it here. #needs_sphinx = '1.0' # Add any Sphinx extension module names here, as strings. They can be extensions # coming with Sphinx (named 'sphinx.ext.*') or your custom ones. extensions = [ 'sphinx.ext.autodoc', 'sphinx.ext.mathjax', ] # Add any paths that contain templates here, relative to this directory. templates_path = ['_templates'] # The suffix of source filenames. source_suffix = '.rst' # The encoding of source files. source_encoding = 'utf-8-sig' # The master toctree document. master_doc = 'index' # General information about the project. project = u'PyBDSF' copyright = u'2022, David Rafferty and Niruj Mohan' # The version info for the project you're documenting, acts as replacement for # |version| and |release|, also used in various other places throughout the # built documents. # # The short X.Y version. version = '1.10' # The full version, including alpha/beta/rc tags. release = '1.10.1' # The language for content autogenerated by Sphinx. Refer to documentation # for a list of supported languages. #language = None # There are two options for replacing |today|: either, you set today to some # non-false value, then it is used: #today = '' # Else, today_fmt is used as the format for a strftime call. #today_fmt = '%B %d, %Y' # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. exclude_patterns = [] # The reST default role (used for this markup: `text`) to use for all documents. #default_role = None # If true, '()' will be appended to :func: etc. cross-reference text. #add_function_parentheses = True # If true, the current module name will be prepended to all description # unit titles (such as .. function::). #add_module_names = True # If true, sectionauthor and moduleauthor directives will be shown in the # output. They are ignored by default. #show_authors = False # The name of the Pygments (syntax highlighting) style to use. pygments_style = 'sphinx' # A list of ignored prefixes for module index sorting. #modindex_common_prefix = [] # -- Options for HTML output --------------------------------------------------- # The theme to use for HTML and HTML Help pages. See the documentation for # a list of builtin themes. html_theme = 'default' # Theme options are theme-specific and customize the look and feel of a theme # further. For a list of options available for each theme, see the # documentation. #html_theme_options = {} # Add any paths that contain custom themes here, relative to this directory. #html_theme_path = [] # The name for this set of Sphinx documents. If None, it defaults to # " v documentation". #html_title = None # A shorter title for the navigation bar. Default is the same as html_title. #html_short_title = None # The name of an image file (relative to this directory) to place at the top # of the sidebar. html_logo = 'front_pic.png' # The name of an image file (within the static path) to use as favicon of the # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 # pixels large. #html_favicon = None # Add any paths that contain custom static files (such as style sheets) here, # relative to this directory. They are copied after the builtin static files, # so a file named "default.css" will overwrite the builtin "default.css". # html_static_path = ['_static'] # If not '', a 'Last updated on:' timestamp is inserted at every page bottom, # using the given strftime format. #html_last_updated_fmt = '%b %d, %Y' # If true, SmartyPants will be used to convert quotes and dashes to # typographically correct entities. #html_use_smartypants = True # Custom sidebar templates, maps document names to template names. #html_sidebars = {} # Additional templates that should be rendered to pages, maps page names to # template names. #html_additional_pages = {} # If false, no module index is generated. #html_domain_indices = True # If false, no index is generated. #html_use_index = True # If true, the index is split into individual pages for each letter. #html_split_index = False # If true, links to the reST sources are added to the pages. #html_show_sourcelink = True # If true, "Created using Sphinx" is shown in the HTML footer. Default is True. #html_show_sphinx = True # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. #html_show_copyright = True # If true, an OpenSearch description file will be output, and all pages will # contain a tag referring to it. The value of this option must be the # base URL from which the finished HTML is served. #html_use_opensearch = '' # This is the file name suffix for HTML files (e.g. ".xhtml"). #html_file_suffix = None # Output file base name for HTML help builder. htmlhelp_basename = 'PyBDSFdoc' # -- Options for LaTeX output -------------------------------------------------- latex_elements = { # The paper size ('letterpaper' or 'a4paper'). #'papersize': 'letterpaper', # The font size ('10pt', '11pt' or '12pt'). #'pointsize': '10pt', # Additional stuff for the LaTeX preamble. #'preamble': '', } # Grouping the document tree into LaTeX files. List of tuples # (source start file, target name, title, author, documentclass [howto/manual]). latex_documents = [ ('index', 'PyBDSF.tex', u'PyBDSF Documentation', u'David Rafferty and Niruj Mohan', 'manual'), ] # The name of an image file (relative to this directory) to place at the top of # the title page. #latex_logo = None # For "manual" documents, if this is true, then toplevel headings are parts, # not chapters. #latex_use_parts = False # If true, show page references after internal links. #latex_show_pagerefs = False # If true, show URL addresses after external links. #latex_show_urls = False # Documents to append as an appendix to all manuals. #latex_appendices = [] # If false, no module index is generated. #latex_domain_indices = True # -- Options for manual page output -------------------------------------------- # One entry per manual page. List of tuples # (source start file, name, description, authors, manual section). man_pages = [ ('index', 'pybdsf', u'PyBDSF Documentation', [u'David Rafferty and Niruj Mohan'], 1) ] # If true, show URL addresses after external links. #man_show_urls = False # -- Options for Texinfo output ------------------------------------------------ # Grouping the document tree into Texinfo files. List of tuples # (source start file, target name, title, author, # dir menu entry, description, category) texinfo_documents = [ ('index', 'PyBDSF', u'PyBDSF Documentation', u'David Rafferty and Niruj Mohan', 'PyBDSF', 'One line description of project.', 'Miscellaneous'), ] # Documents to append as an appendix to all manuals. #texinfo_appendices = [] # If false, no module index is generated. #texinfo_domain_indices = True # How to display URL addresses: 'footnote', 'no', or 'inline'. #texinfo_show_urls = 'footnote' # -- Options for Epub output --------------------------------------------------- # Bibliographic Dublin Core info. epub_title = u'PyBDSF' epub_author = u'David Rafferty and Niruj Mohan' epub_publisher = u'David Rafferty and Niruj Mohan' epub_copyright = u'2022, David Rafferty and Niruj Mohan' # The language of the text. It defaults to the language option # or en if the language is not set. #epub_language = '' # The scheme of the identifier. Typical schemes are ISBN or URL. #epub_scheme = '' # The unique identifier of the text. This can be a ISBN number # or the project homepage. #epub_identifier = '' # A unique identification for the text. #epub_uid = '' # A tuple containing the cover image and cover page html template filenames. #epub_cover = () # HTML files that should be inserted before the pages created by sphinx. # The format is a list of tuples containing the path and title. #epub_pre_files = [] # HTML files shat should be inserted after the pages created by sphinx. # The format is a list of tuples containing the path and title. #epub_post_files = [] # A list of files that should not be packed into the epub file. #epub_exclude_files = [] # The depth of the table of contents in toc.ncx. #epub_tocdepth = 3 # Allow duplicate toc entries. #epub_tocdup = True PyBDSF-1.10.1/doc/source/context.rst000066400000000000000000000057751420247104600171220ustar00rootroot00000000000000*********** Why PyBDSF? *********** PyBDSF was developed to serve the needs of LOFAR, the **LO**\w **F**\requency **AR**\ray [#f1]_, functioning primarily in The Netherlands. LOFAR achieves orders of magnitude better sensitivity and resolution at low frequencies (15-80 MHz, 120-240 MHz) than previous radio interferometers. In addition, given the large primary beam, the field of view is large (2-16 degrees), and the spectral coverage is wider than usual (up to 48 MHz bandwidth and up to 62,464 channels). Lastly, up to 244 independent beams can be electronically generated on the sky. These capabilities make LOFAR an ideal survey instrument, but also create challenges in data processing. In particular, for surveys a good source extraction software is essential. Before PyBDSF was developed, a survey was made of the existing source extraction packages (SAD in AIPS, SFIND in MIRIAD and SExtractor). It was concluded that none of these packages were adequate to the task, and further, it would be difficult to modify any of these to suit the needs of LOFAR. Hence, PyBDSF was written (first called PyBDSM). However, in the recent years, new low-frequency telescope projects have started which are a similar to LOFAR in some parameters (e.g., MEERKAT, Mileura Array, ASKAP and other SKA pathfinders) and there has been considerable effort to develop source extraction software at some these project sites, e.g. DUCHAMP [#f2]_. Traditionally, source extraction software, at least in radio astronomy, has defined the process as fitting (multiple) Gaussians to source pixels. This makes sense since all interferometric images are convolved with a Gaussian (fit to the main lobe of the dirty beam) after deconvolution. This process is adequate also because most radio images have primarily consisted of point (or slightly extended) sources. LOFAR images, however, are quite different. Note that the antenna diameter is 50 m, maximum baselines extend to 100 km or more, and in addition, LOFAR has almost no missing short spacing measurements (unless flagged due to RFI). Hence, the images will have a much wider range of scales of emission than usual - from point sources up to extended 3C sources. Decomposing such sources into Gaussians may not be very effective (as well as highly degenerate and hence not very useful). Hence alternative basis sets which can capture a variety of scales are essential. AIPS (Classic AIPS as well as CASA) has been experimenting with multi-resolution CLEAN methods for many years now and in the same spirit, we have included shapelet and wavelet decomposition as well. With the kind of image morphologies LOFAR routinely produces, complex ways of describing sources are needed, not just to catalog them but also to perform other filtering operations post-extraction for science purposes. Note that although PyBDSF is written for LOFAR, it will obviously work for images from any radio interferometric telescope. .. rubric:: Footnotes .. [#f1] http://www.lofar.org .. [#f2] http://www.atnf.csiro.au/people/Matthew.Whiting/Duchamp/ PyBDSF-1.10.1/doc/source/examples.rst000066400000000000000000000415761420247104600172530ustar00rootroot00000000000000.. _simple_example: Simple image with point sources ------------------------------- Below is an example of running PyBDSF on an image composed primarily of point sources (a VLSS image). :: $ pybdsf PyBDSF version 1.7.0 ======================================================================== PyBDSF commands inp task ............ : Set current task and list parameters par = val ........... : Set a parameter (par = '' sets it to default) Autocomplete (with TAB) works for par and val go .................. : Run the current task default ............. : Set current task parameters to default values tput ................ : Save parameter values tget ................ : Load parameter values PyBDSF tasks process_image ....... : Process an image: find sources, etc. show_fit ............ : Show the results of a fit write_catalog ....... : Write out list of sources to a file export_image ........ : Write residual/model/rms/mean image to a file PyBDSF help help command/task ... : Get help on a command or task (e.g., help process_image) help 'par' .......... : Get help on a parameter (e.g., help 'rms_box') help changelog ...... : See list of recent changes ________________________________________________________________________ BDSF [1]: filename='VLSS.fits' .. note:: When PyBDSF starts up, the ``process_image`` task is automatically set to be the current task, so one does not need to set it with ``inp process_image``. :: BDSF [2]: frequency=74e6 .. note:: For this image, no frequency information was present in the image header, so the frequency must be specified manually. :: BDSF [3]: interactive=T .. note:: It is often advisable to use the interactive mode when processing an image for the first time. This mode will display the islands that PyBDSF has found before proceeding to fitting, allowing the user to check that they are reasonable. :: BDSF [4]: go ---------> go() --> Opened 'VLSS.fits' Image size .............................. : (1024, 1024) pixels Number of channels ...................... : 1 Number of Stokes parameters ............. : 1 Beam shape (major, minor, pos angle) .... : (0.02222, 0.02222, 0.0) degrees Frequency of image ...................... : 74.000 MHz Number of blank pixels .................. : 0 (0.0%) Flux from sum of (non-blank) pixels ..... : 177.465 Jy Derived rms_box (box size, step size) ... : (196, 65) pixels --> Variation in rms image significant --> Using 2D map for background rms --> Variation in mean image significant --> Using 2D map for background mean Min/max values of background rms map .... : (0.06305, 0.16508) Jy/beam Min/max values of background mean map ... : (-0.01967, 0.01714) Jy/beam --> Expected 5-sigma-clipped false detection rate < fdr_ratio --> Using sigma-clipping thresholding Minimum number of pixels per island ..... : 5 Number of islands found ................. : 115 --> Displaying islands and rms image... ======================================================================== NOTE -- With the mouse pointer in plot window: Press "i" ........ : Get integrated fluxes and mean rms values for the visible portion of the image Press "m" ........ : Change min and max scaling values Press "n" ........ : Show / hide island IDs Press "0" ........ : Reset scaling to default Click Gaussian ... : Print Gaussian and source IDs (zoom_rect mode, toggled with the "zoom" button and indicated in the lower right corner, must be off) ________________________________________________________________________ .. note:: At this point, because ``interactive=True``, PyBDSF plots the islands. Once the plot window is closed, PyBDSF prompts the user to continue or to quit fitting: :: Press enter to continue or 'q' to quit .. : Fitting islands with Gaussians .......... : [==========================================] 115/115 Total number of Gaussians fit to image .. : 147 Total flux in model ..................... : 211.800 Jy Number of sources formed from Gaussians : 117 The ``process_image`` task has now finished. PyBDSF estimated a reasonable value for the ``rms_box`` parameter and determined that 2-D rms and mean maps were required to model the background of the image. Straightforward island thresholding at the 5-sigma level was used, and the minimum island size was set at 5 pixels. In total 115 islands were found, and 147 Gaussians were fit to these islands. These 147 Gaussians were then grouped into 117 sources. To check the fit, call the ``show_fit`` task: :: BDSF [5]: show_fit ---------> show_fit() ======================================================================== NOTE -- With the mouse pointer in plot window: Press "i" ........ : Get integrated fluxes and mean rms values for the visible portion of the image Press "m" ........ : Change min and max scaling values Press "n" ........ : Show / hide island IDs Press "0" ........ : Reset scaling to default Click Gaussian ... : Print Gaussian and source IDs (zoom_rect mode, toggled with the "zoom" button and indicated in the lower right corner, must be off) ________________________________________________________________________ The ``show_fit`` task produces the figure below. It is clear that the fit worked well and all significant sources were identified and modeled successfully. .. figure:: pt_src_example.png :scale: 40 % :figwidth: 75 % :align: center :alt: example output Example fit with default parameters of an image with mostly point sources. Lastly, the plot window is closed, and the source catalog is written out to an ASCII file with the ``write_catalog`` task: :: BDSF [6]: inp write_catalog --------> inp(write_catalog) WRITE_CATALOG: Write the Gaussian, source, or shapelet list to a file. ================================================================================ outfile ............... None : Output file name. None => file is named automatically; 'SAMP' => send to SAMP hub (e.g., to TOPCAT, ds9, or Aladin) bbs_patches ........... None : For BBS format, type of patch to use: None => no patches. 'single' => all Gaussians in one patch. 'gaussian' => each Gaussian gets its own patch. 'source' => all Gaussians belonging to a single source are grouped into one patch bbs_patches_mask ...... None : Name of the mask file (of same size as input image) that defines the patches if bbs_patches = 'mask' catalog_type .......... 'srl': Type of catalog to write: 'gaul' - Gaussian list, 'srl' - source list (formed by grouping Gaussians), 'shap' - shapelet list clobber .............. False : Overwrite existing file? correct_proj .......... True : Correct source parameters for image projection (BBS format only)? format ............... 'fits': Format of output catalog: 'bbs', 'ds9', 'fits', 'star', 'kvis', or 'ascii', 'csv', 'casabox', or 'sagecal' incl_chan ............ False : Include flux densities from each channel (if any)? incl_empty ........... False : Include islands without any valid Gaussians (source list only)? srcroot ............... None : Root name for entries in the output catalog. None => use image file name BDSF [7]: format='ascii' BDSF [8]: go ---------> go() --> Wrote ASCII file 'VLSS.fits.pybdsf.srl' Image with artifacts -------------------- Occasionally, an analysis run with the default parameters does not produce good results. For example, if there are significant deconvolution artifacts in the image, the ``thresh_isl``, ``thresh_pix``, or ``rms_box`` parameters might need to be changed to prevent PyBDSF from fitting Gaussians to such artifacts. An example of running PyBDSF with the default parameters on such an image is shown in the figures below. .. figure:: art_fit_def.png :scale: 50 % :figwidth: 75 % :align: center :alt: example output Example fit with default parameters of an image with strong artifacts around bright sources. A number of artifacts near the bright sources are incorrectly identified as real sources. .. figure:: art_rms_def.png :scale: 70 % :figwidth: 75 % :align: center :alt: example output The background rms map for the same region (produced using ``show_fit``) is shown in the lower panel: the rms varies fairly slowly across the image, whereas ideally it would increase strongly near the bright sources (reflecting the increased rms in those regions due to the artifacts). It is clear that a number of spurious sources are being detected. Simply raising the threshold for island detection (using the ``thresh_pix`` parameter) would remove these sources but would also remove many real but faint sources in regions of low rms. Instead, by setting the ``rms_box`` parameter to better match the typical scale over which the artifacts vary significantly, one obtains much better results. In this example, the scale of the regions affected by artifacts is approximately 20 pixels, whereas PyBDSF used a ``rms_box`` of 63 pixels when run with the default parameters, resulting in an rms map that is over-smoothed. Therefore, one should set ``rms_box=(20,10)`` so that the rms map is computed using a box of 20 pixels in size with a step size of 10 pixels (i.e., the box is moved across the image in 10-pixel steps). See the figures below for a summary of the results of this call. .. figure:: art_fit_alt.png :scale: 50 % :figwidth: 75 % :align: center :alt: example output Results of the fit with ``rms_box=(20,10)``. Both bright and faint sources are recovered properly. .. figure:: art_rms_alt.png :scale: 70 % :figwidth: 75 % :align: center :alt: example output The rms map produced with ``rms_box=(20,10)``. The rms map now varies on scales similar to that of the regions affected by the artifacts. Image with extended emission ---------------------------- If there is extended emission that fills a significant portion of the image, the background rms map will likely be biased high in regions where extended emission is present, affecting the island determination (this can be checked during a run by setting ``interactive=True``). Setting ``rms_map=False`` and ``mean_map='const'`` or ``'zero'`` will force PyBDSF to use a constant mean and rms value across the whole image. Additionally, setting ``flag_maxsize_bm`` to a large value (50 to 100) will allow large Gaussians to be fit, and setting ``atrous_do=True`` will fit Gaussians of various scales to the residual image to recover extended emission missed in the standard fitting. Depending on the source structure, the ``thresh_isl`` and ``thresh_pix`` parameters may also have to be adjusted as well to ensure that PyBDSF finds and fits islands of emission properly. An example analysis of an image with significant extended emission is shown below. Note that large, complex sources can require a long time to fit (on the order of hours). .. figure:: HydraA_74MHz_fit.png :scale: 40 % :figwidth: 75 % :align: center :alt: example output Example fit of an image of Hydra A with ``rms_map=False``, ``mean_map='zero'``, ``flag_maxsize_bm=50`` and ``atrous_do=True``. The values of ``thresh_isl`` and ``thresh_pix`` were adjusted before fitting (by setting ``interactive=True``) to obtain an island that enclosed all significant emission. .. _script_example: Scripting example ----------------- You can use the complete functionality of PyBDSF within Python scripts (see :ref:`scripting` for details). Scripting can be useful, for example, if you have a large number of images or if PyBDSF needs to be called as part of an automated reduction. Below is a short example of using PyBDSF to find sources in a number of images automatically. In this example, the best reduction parameters were determined beforehand for a representative image and saved to a PyBDSF save file using the ``tput`` command (see :ref:`commands` for details). :: # pybdsf_example.py # # This script fits a number of images automatically, writing out source # catalogs and residual and model images for each input image. Call it # with "python pybdsf_example.py" import bdsf # Define the list of images to process and the parameter save file input_images = ['a2597.fits', 'a2256_1.fits', 'a2256_2.fits', 'a2256_3.fits', 'a2256_4.fits', 'a2256_5.fits'] save_file = 'a2256.sav' # Now loop over the input images and process them for input_image in input_images: if input_image == 'a2597.fits': # For this one image, run with different parameters. # Note that the image name is the first argument to # process_image: img = bdsf.process_image(input_image, rms_box=(100,20)) else: # For the other images, use the 'a2256.sav` parameter save file. # The quiet argument is used to supress output to the terminal # (it still goes to the log file). # Note: when a save file is used, it must be given first in the # call to process_image: img = bdsf.process_image(save_file, filename=input_image, quiet=True) # Write the source list catalog. File is named automatically. img.write_catalog(format='fits', catalog_type='srl') # Write the residual image. File is named automatically. img.export_image(img_type='gaus_resid') # Write the model image. Filename is specified explicitly. img.export_image(img_type='gaus_model', outfile=input_image+'.model') .. _samp_example: Using SAMP interoperability --------------------------- PyBDSF supports SAMP (Simple Application Messaging Protocol) to provide interoperability to other applications, such as TOPCAT [#f1]_, ds9 [#f2]_, and Aladin [#f3]_. To use this functionality, a SAMP hub must be running (both TOPCAT and Aladin come with SAMP hubs). Below is an example of using PyBDSF with TOPCAT. In this example, it is assumed that an image has already been processed with ``process_image``. :: BDSF [1]: process_image('VLSS.fits') ... At this point, make sure that TOPCAT is started and its SAMP hub is running (activated by clicking the "Attempt to connect to SAMP hub" icon in the lower right-hand corner and selecting "Start internal hub"). Next, we send the PyBDSF source list to TOPCAT with ``write_catalog``: :: BDSF [2]: inp write_catalog BDSF [3]: outfile='SAMP' BDSF [4]: go ---------> go() --> Table sent to SAMP hub. TOPCAT should automatically load the table. Double-click on the table name in TOPCAT to open the table viewer. We can use now the ``show_fit`` task to highlight the table row that corresponds to a source of interest. To do this, we start ``show_fit`` with ``broadcast = True``: :: BDSF [6]: show_fit(broadcast=T) ======================================================================== NOTE -- With the mouse pointer in plot window: Press "i" ........ : Get integrated flux densities and mean rms values for the visible portion of the image Press "m" ........ : Change min and max scaling values Press "n" ........ : Show / hide island IDs Press "0" ........ : Reset scaling to default Click Gaussian ... : Print Gaussian and source IDs (zoom_rect mode, toggled with the "zoom" button and indicated in the lower right corner, must be off) ________________________________________________________________________ Now, clicking on a Gaussian will highlight the row corresponding to the source to which the Gaussian belongs. Gaussian catalogs (i.e., made with ``catalog_type='gaul'`` in ``write_catalog``) are also supported (and may be used simultaneously in TOPCAT with source catalogs). Images can be sent to ds9 or Aladin using the ``export_image`` task in the same way (with ``outfile = 'SAMP'``). Furthermore, if an image was sent, clicking on a Gaussian in the ``show_fit`` window will tell ds9 or Aladin to center their view on the coordinates of the Gaussian's center. .. rubric:: Footnotes .. [#f1] http://www.star.bristol.ac.uk/~mbt/topcat/ .. [#f2] http://hea-www.harvard.edu/RD/ds9/site/Home.html .. [#f3] http://aladin.u-strasbg.fr PyBDSF-1.10.1/doc/source/export_image.rst000066400000000000000000000071761420247104600201160ustar00rootroot00000000000000.. _export_image: ************************************************************** ``export_image``: exporting internally derived images ************************************************************** Internally derived images (e.g, the Gaussian model image) can be exported to FITS or CASA files using the ``export_image`` task: .. parsed-literal:: EXPORT_IMAGE: Write one or more images to a file. ================================================================================ :term:`outfile` ............... None : Output file name. None => file is named automatically; 'SAMP' => send to SAMP hub (e.g., to TOPCAT, ds9, or Aladin) :term:`clobber` .............. False : Overwrite existing file? :term:`img_format` ........... 'fits': Format of output image: 'fits' or 'casa' :term:`img_type` ....... 'gaus_resid': Type of image to export: 'gaus_resid', 'shap_resid', 'rms', 'mean', 'gaus_model', 'shap_model', 'ch0', 'pi', 'psf_major', 'psf_minor', 'psf_pa', 'psf_ratio', 'psf_ratio_aper', 'island_mask' :term:`mask_dilation` ............ 0 : Number of iterations to use for island-mask dilation. 0 => no dilation :term:`pad_image` ............ False : Pad image (with zeros) to original size Each of the parameters is described in detail below. .. glossary:: outfile This parameter is a string (default is ``None``) that sets the name of the output file. If ``None``, the file is named automatically. If 'SAMP' the image is sent to a running SAMP Hub (e.g., to ds9 or Aladin). clobber This parameter is a Boolean (default is ``False``) that determines whether existing files are overwritten or not. img_format This parameter is a string (default is ``'fits'``) that sets the output file format: ``'fits'`` - FITS format, ``'casa'`` - CASA format (requires casacore). img_type This parameter is a string (default is ``'gaus_resid'``) that sets the type of image to export. The following images can be exported: * ``'ch0'`` - image used for source detection * ``'rms'`` - rms map image * ``'mean'`` - mean map image * ``'pi'`` - polarized intensity image * ``'gaus_resid'`` - Gaussian model residual image * ``'gaus_model'`` - Gaussian model image * ``'shap_resid'`` - Shapelet model residual image * ``'shap_model'`` - Shapelet model image * ``'psf_major'`` - image of major axis FWHM variation (arcsec) * ``'psf_minor'`` - image of minor axis FWHM variation (arcsec) * ``'psf_pa'`` - image of position angle variation (degrees east of north) * ``'psf_ratio'`` - image of peak-to-total flux variation (1/beam) * ``'psf_ratio_aper'`` - image of peak-to-aperture flux variation (1/beam) * ``'island_mask'`` - mask of islands (0 = outside island, 1 = inside island) mask_dilation This parameter is an integer (default is ``0``) that sets the number of dilation iterations to use when making the island mask. More iterations implies larger masked regions (one iteration expands the size of features in the mask by one pixel in all directions). pad_image This parameter is a Boolean (default is ``False``) that determines whether the output image is padded to be the same size as the original image (without any trimming defined by the ``trim_box`` parameter). If ``False``, the output image will have the size specified by the ``trim_box`` parameter. PyBDSF-1.10.1/doc/source/front_pic.png000066400000000000000000001215441420247104600173660ustar00rootroot00000000000000PNG  IHDR wKKbKGD pHYs B(xtIME ˶ IDATxweWuQU-uVN(,1؋dYxl=5c~?P@DKVsuuW~Ϳ?;ONwKVz=[~)z0 ۯ\wuע(jaHEc(jCii_ <{Jeűmc6Lq( yUia_s4ۯu]|} 8&d, ˲*G|{/~{{됟҆o5Acfffشiӊ93 B(4 AL[<!cԅ/~($bq꺾b1k~!FQDxGXŃmqfefW-#ߏz]b뺎+6 MӚ %8]E+IJ% Fmۈ۶W̉k Tf X@,}=^9`*|O$ȂV̾J~`eX0b u]zNVcyy}l^ql^BtwwcY֊{ ð}_6 ys#O,,oXA{.0d``ț8WNߝM(yR?cYQi@ޱR0m^榼 \4/(ɖυ* y s+ɬ#ͮP5lFh 64TwNhqJC9C&I(U]Q4qgű_N)oѠh*-*p֕5 c&%#]|UU_GdOzU-&L!IC%UjĄwr2>_JLxI Tue3Im-j 0!P* -Tֆ_[% 6$P(oѠVQW\90\qn<OZc-sP~A Yd2 \K4(& P,h=zoMTM=N}t]oC pUl% |'<[v^uUJՇ*_T*,lv'~lNeYd29d@\m Xu"U?juE|K'CiB!kw՟&_$Cw "C Ȧa4V> m'Zki&_o} a "6$MllI~lމc%P̺'CBTZh G<쮮RL&%dn2&L\. ;I/@%}GӴ4n|ĵ9ϛ]‡t~ O))xK*k$ꧩZ7)12kExetQ5 $y5ԅhVɁv R}&8uS9wj2 ~Zd-e-$to&ÿb{{1L''=03:-)13"΢&N.Gyzz1TOUflA$r,K`Z',UC^"PM@ĢQ(4WӛCϪNXx-ǖRlvFoGcF.O>Iih) {~ڼWm),ǡNfOhR] bDI'"M8yt]DzDz IDkJI@/p0 x&P8*2BȄ0%JI~C¢5(4NR`U5atTj5(˫B@X$EWOmP(ϳ[8##X:|.ò,ssdJ%:^ڑ 与 y|A[Y˂*_dD7IT0MgfdmTN=﹋8HE~wb=\OD{.#$IIdN,PAʧJV,..233*ib4ٺeaz (B\@S5 {t'ر /`:aG[(-hbU,//ۋam H5 ʭ2UT0Nf&QΉkگivcCb)s-X' l뮣lw7ŗjƥ%aH dCי}F- _ w gSO#`}7\y%asUu<<ž>]'D33q‡j4+| ou ߫mN<aBI)k-_W鶝z! R !zB"^VkhJB/L&cy1ZO2-Q߅믇{Z}_0Mw"j~)cj"+y֦Iru؎ʕT*#yT&L[}(5xPNj(A]T,ɁSeA%uv˱)!P^J== څy FjYG0: l ccv5w`McԲ8˱J%CJ4 j5lXdq6P܏`1 8VC+1'mbIi2) eY*ICUUg"jQjv@J;r]0MR!?4li,=R+^*xhDB McS.t8X Qnm-Ummjmz Jj?sשBp@ʲ,<:/jb<6uK+N"UKxjiJ("~ jNezA.ÀCs'! goƓO2zU5lihqܼj2 +dI%$DTϛĺX2YOJZ6Ze@/x,?p5VhNU3N.(WunT[0B6o06B :z^SxM Ms/r[4 ?iܞ׉5|ӷkÇy _ke׾2b;MI%{i5c'Y_c\ȺN)]]2?ς(hyp$H<>Y7 -MzC=1R(W\?̑'}CCr$9X+joˀ@o,)}[&OK*\BĝR=T "l}nꍎu{9>wÛ n?CgXmyǏG77>1\s w Oeh6aΝ_/ر6a2 n j-m%N"n$qLfU}SΟt~.zBrM\7sǠ\b*gG@k%/㮻VOg?KpՔ|0$4 Fs]r]]|jYVWUWQ+M(V@%oqq{7"(~L3[*֭ qJPsVUey8 ./{U-dfWX:u-Lm3rYN~h^ SSQDǜc~ĉ&O']qE4uxf6ŷΒJmڀ_hj jM<02'P5 NJ啅͌l$Sa`n:|kl&ssKKX۷خKulj6>![x_OE4 uZB Nrz<(;w2w@IAT*+S{vB:i~j&8n T {SBBom 3gXx9J۶A3\w֎84ipK]F_%s=۶Q~qX\lr-ZpԿ+_ 0l|'\"+ r]x5TR TVh-UEUkRƮ|Lܪ{.#ͮh&I1LӤ:3CL0ű1222BϮ]T:}}q/cP62DptdPc66];vP_^gfy#uw.A`ZE: PKh9N;d6uBZ~G|GN9?#CRlKo km6mQ.q*yY0llkׇ/b>+tq%$^R YYjmnq6'kDԄ=,¯hDRO}~Ӷq, 4ѻ5 7 1<00uOuqx0Cej 0(lތQV* 1i;~OiX2BqZliHI׫u/hԘ+lNxc'P6~ID~ 4dYiwLx~R[9n" 1!EǏ3t5͢rDẘ:Je5X<Aq>]u0p#;8;3CvtfgqWuWM$3NkyѦؑ7HMqg:Ş낮8Ј aHnaŽ-2BќL]aFJ棨) T6kU}auCGVPJcUv<$PI>PI|7# IT8F|[sfiԗi,/c.8ڭy,7=,1OY6"F/F&}?:U]Ƨf(ˬURI}K\ZYʾ|Qjm4J."j&I+&:r}ulRy:fX4f~V3gAM+"cYB(\v/ۿQm$H۰:iٲ%\U'ɣjXZSv>ϥw\HAO2?aнmc]s FOΥ)8<f2}}dʃJ ]w XRݼ,SilF1øG!]bX4aP{1 7Lꗵp+631a@_kgevS w˦TR|O#+G5aRȦȍJBT x'r:atAyiO~+~G )|3_xE"!rv=e {%s'FVA沟(ϯJ' O٦IIIs.9)ig!~p9|y>IL0*.T8&ᚊ%irEēWurZ4MPBӰ繼C:rx!u+[M %2[.,Ğ4$m2L\Et00yF0մ$TfJPքJnZt.17,>;YKȸUUT %?9,B1I;i5f-xwZ-bz)0 SXWk5>1il3 <( 4joO"T( ̻ը=}=LM2vW@OJ̒% &yԎC4 6aXvoQ2-z/_:qnƦ2e*)֧ LC(ySAqeYkϭ3ty(Rl`d &q4 r 䯾ltLǾ"OOMa48e̞J;z .cG{z Q[~q7̳Y{Ri[.cPںqC'(z+a mzDMd q?8~5aG3M4(]y%A_Oe}C_)Po^mW~Xeϝkl9!3hm5 J4'SR[RFRk$PBEҤ6VI{L(r7;K~/Vpg`Z^A_\lGW#q ,8݇52нcGShJ%8Ɲng&}y Kj~eU/MgraRt0M:7K+,𞉉>Fj˞ r~Eʑ#A@q͛Eo}\~9=H갵Zea܉f@,MC/uE0 E8fB]:L5OkOu|)ɰESz3L <~n<)1O2BT[ ZGεZGIHr"|"Q\cNoNtdpff0 LQR@o5'0P&>x3iA\4uN }lP C\^oeKXmDJ1@لyTIm!WRۖFQ·~io읜< |e7yp--i Ζ-hN E}}QV'Sxf]H3 |^'V\8մ1[5XI;hz$_-FnrMu$ߏhfw7fD<3iX2qo/z&|e.Fs]#n3`Y"8aՅW.|8cd==TUP@/8\S1s~ks.K{''ת7Rj(W@%xHyeJ|4zZa/+GB.m Cf6fW/,6v&P.twC..lIT(4La8ccZ -0+"fn>93LWW B- fg1 p >ۜBߧ<=MJS$4Ǫ̹Ԍ:MI@@_\ 4lʺ[ c~cǬ,k V!=IBٞ깓4unUSu;ri-RATEhU;2 It}LF0[ ,gJ4c4-&4¶umkZ<CӈH1Jv LR!lQt١!B]^^`Zv&Of^k6%E*ijoj|Ą!/u :[y69'vwӻiSy,B2M9[|m*+̌ͻu#[_tf^"u+ZO'>9:Ʃ#X<|xEaVPbIyϧu|z_J e&R)<&`v&Z'B NU?N&kڱc-/Shu Ś#2ٳY qf@>v>qEYJ`~⋡P }|ץ^.ST8/YW5*?XO CuOj#+j[ ЁkK1^{:'ghmzLT,6>{lah(]tbz7m"6M~0&ܲ0, A$9կҵi+b.M5Lxf%a>Nu^uޫ>7*HjKɾ\4IC,uҐ;*Fha]xOTE6ֽ-Qfx=vff>CJ֪_tQ֭5a`3=M}v!lZM7/:/ϯ@3ʓм7IhԀlO,%7~dk}{&&3Mk FTHop zB/?p]|S*E׎UTFF\A=04>sϽҤP XҦٌ^gݽ]@WF0;ld [LN-vIN[Rw[e fWPd:rhE4J%r VS].=ؘGWj=?>ib?N06<@mg0 dY:uj՜wBd+褡C(׉"6)7icNNd%㲩 |h`jR䠣j 5|T'ԑJR|H8K`!3'l:_S_LVSUl~bx%fq[7(d:v1LL2TO$yg/WfZХ-P{''=?ݍϣ6 t>m2:]uLP?%/nRpHK.E&qA4{iI2t41b[;9u4pYT(5 ij݆fTq K/ŬTy4\{G\N=;sz̎E8|Pc;'}UPɯ환Nje}W :EDCkZ>NG5lPleM"kW9 NrǙ^L\41|4^x 7//S]1uAf^.GQ/%i:~( h|}4]QV.*pcO{''_31hz:l43m?m0.e,+-) q8xo~A>5ol߱cF8Qse{o%" ,+ыT69w >9ckuPȤLfB CtZKnO*Q2bJ~r;v,,PFӧ6e2~8ئ[|'M(Mqqa\hh4< c\nUQQ><jšʷj`Xւ7H*-UK4 rƸ47}D2޳B0u*GS:ymÞ}6n/liSALX"BP!a[;]5PIxxSw4_GPjƮFrDPmzFo/fɯ(E]Glge'20,+qR|lf(38Qvu.,qj,MMȩ%\(92pKI~\VWJ"`l.mWj5zݲ^u20 0d1<c$NnhE亄:ZPF@ &$j01ͷHIPB٧ 4nE02f|]QKLzU۳j|H5֢-GI:j5`:kj6hcjEqϓfE;C%7ub1ZiJHxjxM8*`{F&>0>3Zk n'P"IM!J:F.|9R-Afw'LMSۃ-n6VN'FC҃SڀIJQDDZww1Q5²4r͘eP֨^xAG#n!4P3MbC7 biRcqON~r'6H' %=[*q'޻[gHF߱ 4!ʚK-ԯ6lSJ^xIvഇI҄J4JdY E~|LY_/1N$ boI}~u>a8O20@A?һs'Qie#-d%Q;I[ɛ[Rwڼg)H;ߠYl omgb1*1d iBӘ1]$4@q֮mo2;_`B>8Oi"۲7 qE!Vp J왘N,ƵgLL<wW^o4+smcv+c4\!I2+SaL4qG?o bo/=0221Yܩ)_}aj=× U`w7.r!#Y'?+4TR#0Y;ofδ@u-6DΝh2,ٝ;yk{1mZ+!l`~LiXljX!iRBr N[PByi5 t-G/_޿kVjI,/c_|1xz UtHZ|&GȈklE5J1SLL`Ҥ!yO0|=&_/7{&&>wr"uCPkv*j۔N$«lZʻp$ILɀ8qҖ-؁SbQD\c!Nb!~HFХ6ae;h:};lЩz]'i񚆮iDmϯwy^jNj/)9E,Ii!&L '󟁫>jJ./nqV TZ@6Do'RM4M Rpk׍HwyC XEۗ.BKǧ!vP4 >Д߾U0Mqӧ]0 byЀY4^gjJZm{7 {p뭰m1F__>ĭ '-4DT@NҦ|i`%uPYd+BP,k7}4^+t94w:'i8/:NkQ0amaRNVHmPU0d4@m}07oFZZ"Xq.idE֘, v킷5 ohwMR8~n~g[+_ٻNE,j&vFNnD CK%|rUpVf$v;KPktBW/ ;b=~*q읜LLo#ewo31Q;9l-eD#\r薅32}饘 ~WN~<>3gt~=^: 1um˿ܤ}CpPÏh45tw7g! 9ߏs0mibZWap{ v+31ai!K{''-pdo,)Iq۶Τvw IDATf+@<+7USUNƆN2 UҲ,CCd ##Tzn~9b0E ^+xofݻ#4$ Y{ɓ@1abHOOkeۦx ˖##4j5Ju_=۷oa&iw%[IŒL$"Аbe}-&EoqJ^Y*ooo8Z>yXf҈ݻײ(YZ9x0⩧|*1?\R%CCbn ˡ#y _8^/;9螉=-4Ӹ|x&UjTV Z1G6'n4$u+}ݾ8}ljV6jiLqbw,+K |a>_Jws}{l鄕JOj'"mc[jg#k$4.Hj}mJFֱU,;||b%&XΎU|RIaurT@%WVۙþSؼ˶`^r .A%ēS3\}K__@m4?gKq~WOi"ẘ<h $O|J2s{K7!@Ϥr6;9s[Lȁ=!PIW>N/58ۉk&O҂ kU,5iUi@4l{%J?i\C!TwU+|x&q02Bׅ8n^B"OX`=vuk _Gqf6Ɗj*qw]'^^'m4BΜ1:lqbᩧJ 6Փ'̼➋5{|]3s|h4sFQr$AŒ%ΗQ$F*σcp= azض1=o汴It:)}n04 4]RiRYJ8'ɬ_$lvWviAق;q>7h֥H=|'I -+2Su"!N*u% 똖EL_FѡFZOVB,14{sϙxʶ.IL;}ȰÐhFA~`oaTgg ;ioTasR*UyI6%b6ױXsIb;+sT\u$I=VͳQ)MR - \E>zE@ccz_^! 5t]-0e}KCŕ3)N֤I|Cݻ]-\WGshJqn݊aۘ-J'R$JJI"5w:TCl\_s8/9i}R*!Jk)"TwAp0 J6aY"4N#6 hA<ŽvS9 L3f;?]w+˥ }\#4-ƯX>h4xիyW]EȑTR9F&Ҫ443w-W(a% TfuZߑecP>|;c7cM@bf>C|3#d2}w{z'꯺ww;x[ܳb8N2"|C1 (Ðog_bᇉ\|L/uŘqNVb:<$o-;=*bdihd(PؼP@ C&k^){o/?ws,wO9fƥd{% B\.7{jEo02/a6 sB~r4TӽNw Oܻy>y6JX}}ԎǾ r\Bxѣ/ ?֭tKw]ep0ӟS?U4c>'O؏;{ynW~fAE͜..릛8/B+`4+RȵjErv\OѤ՞INPa_J[9Cn7݄aĵ0ϓr|߆_?ϖKB \嫩_m/gx׻l'RM>38No> Wi"DWB54MoeK"atR]cU6EZU2hJiOgeх}}GTo.hb3|f]cш7T+MS6 <¹9|ҫ^*wZk\+m&%u⃉}T iۤmq(S9r8 qOx :ahV2|8JoD&Еi0Wz<&7E\Goo3xo}g #Ø0 _?Ϯ]57|?ZU-[[KbYF #mcxp8zo8Pf0`30c ` 6BFؖdɲޫ3Gd~Ȭj%Z>u++322"~iJWWKMq,Q;skdYH|"bTHPr]f?Jy;3[Bx҈] ['JJ^fڅ|MܜlPI3YhtMez U2۷8TI cc>ȖJ66303? ѱnf34r*gΘ>`h(atu 5طq]}ײpuT4irsϡ `SAi_:s1(%ƔdP:TEgP2*Ps&Ѡqy#BXISIVw7Yw$\YAf#jK yw׹ *jUVD:ҒJOÀ]oq Ef[]!fAQYU[Q;qFG);s?f9ޓF;|Ƕ x.T/%=eo|ʫb0L7,iInh ;\{-ezJ&.d/XAvʊI^0X^f1-XrGhPP!p Z !^]][z׶)8AnN|o~>ω4I~TNlII]2(3 Gڐ%vKꔐE][a2㨖52HhxK/Sl˞g'Jn(S)(u lPAh>W*x jo/"硦R`"YL#GcJՓTen3p9vZ/JrQ,#hIqV扐"ڭ JUZgf\\F1M (>=KdA8-`p\'u ׃ EN*<zov m^i|6ccXO_Y!=6F }J% ||I/XΥ6㴗e^e#V]JwM,?1f {Ϟ<s e]0uȽ؇GbHoN lE!5Iq-i [~&K'UIͱeGVwUWBmZPd`N].JE|ЦVS= r~"8Ӥc0q}wm-?y-p.ڍS8nzz3ao֥UN鍊Xz!{,.br"RtZhr7?GFMLOv=c4C󰗖޴Gd86sƍ_~Kouj硺kNV姞禛*VrC9iy_.½zΝثJپ2veK;PjY;5v[6D*lE2i:I'm!k< +@E}i T?C6nG+,|'N}ضHV*h}0]dfLTBSU;vF.\0ěYk#TfUj6+SnIsо/}"թ'lbmcJE_, amߎjCCxG ]4+Ds .rKS;0=!wٶ:yv UUj4к %-TBI<q4Mv4h\6h!E0Vv}q|P1d8< NDo$|a4 =8⺄ z5נMOGRtY(, )K4~|ލ<;v[X4 , i UІܿaZΉ뒿*اN+ F*G}i H팼h. LfA5[.#1ٌn8Nҩ7,颊C&^iU-4qFd0"r Ps9)%K>ƀa_ngSXǕWV43v2 PTQtupMPЖP̲"eӃu:n-7I Sx+w{oRgzV JoJ\]Nv@C'=YcwsfYO~Tץc{OL;^*1НcNcm5ea Uo;8^6v߇Br>cۀk'yuhbZߏR.4@:::X۶a@ӑRG3j'6*m줰U6ŲSKx-u]_G|i:A@f6~1wy8r-ssW_bWW_++pMi?6;JEsϡ]}5䮾 罱aUńULn񍸉V#D$YW Au>HpxMϕmc0; s||Ӈ1 [e+zoٳyf==}{<ޑ#ѯ fOim9?̀ st=,p`ᡘqN *p SSO\QDyizݷߎ_vK/E4V*{w^<]W>Y^_?WhnRiҜ0})[ow#6Z ^0z /Bg^ !Lh_P$"zUIOLwwJ(gΠmNa+uy|@m4?Otqu+#($kk?so_|lbr!f%afc΃ލ]]( r)Wl΍YbO%hC'XI{d 0#uD BDYSS϶y._غvG' ;85ubNi8N%(N~[Um@uB`2o}KVWuy$7˿]*|ռK%Vncgn'BlTB۾TBdPic ? | >SSeɘ4Wn?855Z}}c_٬)x"d8WU#%=8CXsd U-C][CA"utAqBzy kGX48z4Owq޵[ZAUDO"/ \^*gNSO^s``iyuMa-9Ueȑ>eضHZL\$!D'ƣy٤|u/$~GZ,RsLzM_ޗdHI ʰXh'(J)6t àw>(rCUQVV0y0]}~ucl`ǎ:A‚Il\w];\4Ai2]3qrnC!Rz ?YmԼ;;oo`-ÐHhv+7j5ʧOSūհmF8-цZֺeuX'^E@hgP~ B /wI*1W`L7_3Dy0&[̡9!v9)-ޗW.>\-QY4Uųmnb*4BD55Ӽpl1=m(Q:8Pd߾ ccya /<צj덍6or1fP%*sst˘⑆ڑ#4^*Ν03^= IRPI'=~l7ڑH+o$u(Bnn/\PVk!Qf.b Z&C#mRњF-3/ݷP- w2A4a&J4Q`~u1iF#"<bve#`(F;zvILotPM"NN@չZPCω7|JH߮MfZ8ݘccx8Q~0#uEa^ӃhFJj-QWzwf@1mPEg,Z4OE,k x"z6̀%6 i!&}$1vxR%&sstx#j QknNs'J.7!>gi&,B}T 4Q]&&?$[n+"U,fwPM^sEkiJ$1 2b4IZ~4'yva|vx ӧ1 VVFFFXUEBwLE!Nk',=pt#ZrMu]w]lf[Xq] o4pt{h^ǸrJ> axZ(8.Ii3v%vL?D_ TЫoG_/m4aଭ$31WB6z_a&%)=<0/H}7֙o7:fP7ibۨ,8cM! =.JdJZme4'3+[1HTT_"l7824uq0=KU1L^?|=/<Γ Ort[mWr9WOS~7S< S1x4's]׍lu7tHHQU~mR%^ۤ wQTE.!xD`BM;v6o4KK8dCQ0 y0$ZUUvx̃<6w#=1pyr>xqT75 |>|F>:J)zoq@%qq0W;# J\@TpT)n9=6@ě.6y'_vA,B׍zboy0"|q3 Q}= EAWtq'K'= fa H[;=GF7hȠzzYu5ǏS.nNj6ʇa%mDN$@|^ev"yђ Jiׁ_ *iEjb.Fc]FV>JmWZ@ྲྀ%ueCYnY(Յ8LC tAvG޻|/C_KYo-o{?F?QIJ%-K֔biJwöO m4BA1k|'%|##II^gEmB_c ޝ{wn~sO}%flm:>u S~IB%t]4U%k_īT(6MNM=!CmPZ'IP_4 ˲fdYzzzZrd2v 2"{+yVK4&?CaG(+To~;wH|Y+/ Wy_x_Л@!P6 VQOs'xEm(=JqrWVZ ~q=+7,SbOjV|l-/wiFWz.GX7 Xf33?9i9 Wx|'j,AOjᮬD\ciқ\9 z ["^ hyd2r(قAI1z*JW*XMa6M [d,?A-dӖwɎ}O}^uo R6 ӧ 3B-E@1MjG`oARsE7"1''6'5.j)sZ0Oi$1%֦D b&)uOwロoT]"7|Z>A?6 (hU*0;EU܈!_9HN2(Z&y%ب J/zWEYK{ݔhV![jRgOCF5DbO9_=_;qdM>G"x zxC߻)afz}WӓL W\%V_^b&[Bzzg$H6=;yb1_yG~{nO b6=:Jxu:Dn~0pCm(B;M 㯚"k{ ۶Կ[BmYֺ_Tk2Kzig Hg]OQuM̧D%OIʗjZ L A֎f:Bᯚ@w.JfQ.AA@o;s{^֜5 MstoO/=GƎuqiT LqM/UjsNUjssz%u1cKppjj_rqԎhҨ+\LD1j5jVٲpmA&C4 ElFS#{??-<Ɖ =}{0Hsi^Z{痟g^⪁ӵAjcciJ6a:{, DZx8Zww㋝r%'pF;$`۱϶SꐋֲwM+~sPfH':"%GUORq&IlJQ!_V\.@`f1 #2zٳ8:>N~|<5l5MJxrIvkhY=7>EH݋~6v;{8ɠ8W*NB0GF(>cۑ"Tί/'r% % ͒ J\L& @ A@+~mO  %a\U Վq4C+^|qPV)J\.j_ FtKuC Cz?PUIyn+9Y:I.Rn L3xzL`V*C64Jq@QpmTV*Q+a`@ӨJ \.z{1M2v \ JKo;M-d0 8o\N\a'tpjZɊwˌ;fD'Ju3I<*[Z uQ<M% Q|MQһk.‘ߠբ2ۋEcQk4LQP2wER EףmY<Ňd0GG)?N!]mXѓP*ll&&$dPb] Qv= d~H0ydesA$xZFuR@QUԞٹZE}&B7ǡ.Nc;۶j$|hf2, jW'M*?_ͼB!pӸXW|_Y]]}+On%2|DކaYke|^zfTsϑZRFc*ݭtHwwu5j", Mn(**^"Xe_z =`gZ%ZE_|fD~1GTZWOSNxJe8.8O*CGg7වBK.'he2?' o_DI1 xوbC%;v`--Atw3<&,- g9ySOJ(ՅW,6%F^Y(uO|H)8OO :ם +CNz}&㷋7Kf[GiJTuy;)?k_Y44U%.Y{ᥗ(كs(QEX.xjOSOFDM(_ozWZ0moV[<~.~ϯ OEڸdy(qPDDh\PI=T|$E&SS_885oİx|P' @'Z=]6ӧQGFPR)@IQN":8zE&'Py;}V9sOu(^^n@BE}P ~wui-ҿJxţ뱇xuW#=P' _YYT*QjvdQݻwz.HRA69}X[曣04T-[YA,M#}Z cl YjcpgyXccث ++ڊrX|^>4V!;ڡqq^$[b>i{%S?s =ӄMU;a!uZBK9 iG35,mŢ@t\߈Ge %YF7PR"ɣ,"aYLf_>'ɴVqq>CF 3g, UQPT@KDQ=<{pQJbY]IN,Id.)ϭmQ^%{m:[qDRWC;&KD̡Z(~'Prd`4ׁ-dD6)d$mIM<w3j%Z8|#Cz*JxǏGEF1 +TXݠ)?~,k"8Fs·^BO2J!Il[[$u J'A#Du,.'hx=' ̘)ņ$i迶jP,%쨪ˡb%>ܹfVJ uMdl[ IDAT=rbld[A%Zd՘m7NGhU%l9򒼟l3]#=쐌&uKbTϣYq_`;M^6J-6N >ӡK9y(BquU}cUCWhDiMC<q79NMN ]f~)&ܥj2T/qbiNHLN}eQup| 'N.ΈL OLe:1ﴚ"or;P >] ^uVwy;NdRra7I0 9uM#I<7O_;85l'JRKmfOej [4 cJvl"Ҳoj"PM˧'u[NMM \JDDOdWr"@)y޺<.fJR؉b~`\T6hƠ@d&AA14JE#u$s5=4VO-?vlPaԌPb+{r*_aDyQl+= &qǿ1ۅu-1-rr4ɠd1v$"Kܩ!R"j %t*Ƀwvcp+#W_Y!=18n i2r$K00%]G9su^r;wR>|L?CK{9OԂ7GXjzT.JaKb~dhbI ^yӵH* a- DwQ~ y ՃSS߾q6U؁m>q޽ >w9<@+fXt]]ju=SU 38aW_5Y(~-'& _=85}#%Te#dwje0SʢjנifHج0\\Z²maar4]\{7\{-#/}뭘iEa,TatwSVݹ3ڡM%$O4/3湆؈8z%|$E8jcz/ph$o<:Y( ݠ6HϲqJ"d.14+v%oŰIԘş8 CZD#;ރ v6Z:M"~ҩLfz#7݄it?,=odLcYgYzvIeh5 "$#d ZfTR8srIۏëQ>Y(L^%+g$UG ڜt(dcs1W?C/8R"~"jLjyhF*d`k۽udIE0$Ƙee\`X VWWhۄ2eoʃtcɵ98d8$c/?oM ?|!{͌ !b1 ǥ8λPUX) l z6R)Qt᷽kbM J|5Q?}^P!_6E&^4 FkeE^N%:T"6CE=L2]⣪*iFy(N_92i:gkY8y1RU C Fr:O}nKP|Po9#R!bk>1i׻'?.Sdk,/^XēzasʼnlPQ@:W:!OAj5j+llEQ0iv?p/tf<;2*ÈBoTT`) dpO썓 Jl NH2YD.'yW,>'IO y`|NMmPu?8553Y(S"10p%ȅCɫO|%$★yXՊ+ؙrD'%D7ly>U4 i՝;qHMO?i{- )Xl:ˑfĠ#ׇR#?1#-Q7A+01H11BwN7zo6]CCuh|!Qg{Ֆcٳ'O>{\Zm^TnbU>8 ݋kRCID2V: O]R%+bNLD5=v s/ciA8Lׅp- ;wO= <ɓ-ùvEAV[o Vúmca>C@ͶQ &fXT[UHP622β8a^x( d{cmf<+-QJ%VtwB/^C'&7Z>f1Lؽ?R,j۩S(Ylym9rb2h4:9.A^0"P-X=,3=r9됊,OF PxO#y1灉 TM T*/q!~#H?h QD*lbPcyeFT Ο#`ƍ/=0=qE )2eBẉz[K+#> j0uGF}sFGwaiҩ'- ?6b6߇W`On>wAsTȡIqOH;1+ߢm;Bih\.8C*< }cch6/.bhbae 30btT wؕNwy(? 1h`a Jm4vRǶQxѿg*Z*>UxU 93l Dޜ?ͨPIf1ornԞs| czf &k.9MC]m۝pGu"ߊ1"xrv݋4Q]^FuW*MmjbYȴP=z*/ aj IqZrHX~KUb*и AHKG\;vf 1w>ZE|F6p< 4-ZZD["u݈AQP~]@ R-~bei e!ɠgm eFZ=3=nbRMC=ޥtnOӐ*Xjݻ-DPxUy9y6(4q(l^ -;I,]wJv.'#F,wEACp]sUԥZnU SYZBw͑,++З, :E,rc͉:0D1 /rt;wvfi͢P4:Us(7-1hPBE5)2I%U\׍8όraGzq;{100S*ȿ}}-h{uZ 9BR8]_G0 r DXDndbuTK%A{e TR*H_%;G R#Tq(#H;(N6($)BqPPr`A&'rXvո~ 7S-TB@aea ݼ A{OL$j"=; gj ᅦuV/_͛0DA޾ ǶJ NA*ΠdbopҠ!UIId`T._2or+W:g2wH9yКM7nBUdD:G6m?o;CHLYN:ծ1 xL&C xGw0(3<1('I½]'.T; 0Pt}I]l6Ào-tVCjx>SSpCO<ٯBci 1}}H]?g FqPT*ԃֲT> ~tϖeuiJz8Hr=y+Wz |I+0w<4f/]H<7r⡶iI:ضjWN2O#9+AQ΂meu"h<ā<oGMRKa<D_{6LOǮPgivyy yyzKDSz!>7Eύży(7nfK+ًkgf: r^o PnvF67Qc-i'jCɒkI=CIn(+!v*+HUelRe+ѩ͊ vqYVsl=<ǩ4yUT.J?.g==E!RP'_  2 }f; Ie䭽U1ٳV (IMxI#{\THp*ǦR%C>R VR(Lu4W2-* yVdpJEL1،#$hƑ0ɪ} .@P$a3(F<5+7(>2 5MKVo=eZ4(,p&^ T6rsEH8N4MJ2Si?H< Ut%F8]&7Kݖ#u튝lw{/G0HY$or"P˦Qy(9 "pl, */9aUM%")BwIDAT|e4JHH,$MT&*Uoh4..m˲bMI=_yA-6hT<ˉ#d:qXنW^Wk+EYTz* !LyR^hJt:1TK7odP" ?r@|(MBX$!RbCp_T5(IQ d2lLT1"6dG'9v%qW\+S-dYnND2{TIxU=_٪Fƪs?hR;;_Ĉnq%U"/tU< xKrJ/U^UdWf( WҪ ZE=RGyaz $(.r\c N8i"iܽ{?x8xH%Ca!~ِgݖWI Ru/ get from header :term:`flagging_opts` ........ False : Show options for Gaussian flagging :term:`frequency` ............. None : Frequency in Hz of input image. E.g., frequency = 74e6. None => get from header. For more than one channel, use the frequency_sp parameter. :term:`interactive` .......... False : Use interactive mode :term:`mean_map` .......... 'default': Background mean map: 'default' => calc whether to use or not, 'zero' => 0, 'const' => clipped mean, 'map' => use 2-D map. :term:`multichan_opts` ....... False : Show options for multi-channel images :term:`output_opts` .......... False : Show output options :term:`polarisation_do` ...... False : Find polarisation properties :term:`psf_vary_do` .......... False : Calculate PSF variation across image :term:`rms_box` ............... None : Box size, step size for rms/mean map calculation. Specify as (box, step) in pixels. E.g., rms_box = (40, 10) => box of 40x40 pixels, step of 10 pixels. None => calculate inside program :term:`rms_map` ............... None : Background rms map: True => use 2-D rms map; False => use constant rms; None => calculate inside program :term:`shapelet_do` .......... False : Decompose islands into shapelets :term:`spectralindex_do` ..... False : Calculate spectral indices (for multi-channel image) :term:`thresh` ................ None : Type of thresholding: None => calculate inside program, 'fdr' => use false detection rate algorithm, 'hard' => use sigma clipping :term:`thresh_isl` ............. 3.0 : Threshold for the island boundary in number of sigma above the mean. Determines extent of island used for fitting :term:`thresh_pix` ............. 5.0 : Source detection threshold: threshold for the island peak in number of sigma above the mean. If false detection rate thresholding is used, this value is ignored and thresh_pix is calculated inside the program Each of the parameters is described in detail below. .. glossary:: filename This parameter is a string (no default) that sets the input image file name. The input image can be a FITS or CASA 2-, 3-, or 4-D cube. adaptive_rms_box This parameter is a Boolean (default is ``False``). If ``True``, an adaptive box is used when calculating the rms and mean maps. See :ref:`adaptive_rms_box` for details of the options. advanced_opts This parameter is a Boolean (default is ``False``). If ``True``, the advanced options are shown. See :ref:`advanced_opts` for details of the advanced options. atrous_do This parameter is a Boolean (default is ``False``). If ``True``, wavelet decomposition will be performed. See :ref:`atrous_do` for details of the options. beam This parameter is a tuple (default is ``None``) that defines the FWHM of restoring beam. Specify as (maj, min, pos ang E of N) in degrees. E.g., ``beam = (0.06, 0.02, 13.3)``. For more than one channel, use the ``beam_spectrum`` parameter. If the beam is not given by the user, then it is looked for in the image header. If not found, then an error is raised. PyBDSF will not work without knowledge of the restoring beam. flagging_opts This parameter is a Boolean (default is ``False``). If ``True``, the Gaussian flagging options will be listed. See :ref:`flagging_opts` for details of the options. frequency This parameter is a float (default is ``None``) that defines the frequency in Hz of the input image. E.g., ``frequency = 74e6``. For more than one channel, use the :term:`frequency_sp` parameter. If the frequency is not given by the user, then it is looked for in the image header. If not found, then an error is raised. PyBDSF will not work without knowledge of the frequency. interactive This parameter is a Boolean (default is ``False``). If ``True``, interactive mode is used. In interactive mode, plots are displayed at various stages of the processing so that the user may check the progress of the fit. First, plots of the rms and mean background images are displayed along with the islands found, before fitting of Gaussians takes place. The user should verify that the islands and maps are reasonable before preceding. Next, if ``atrous_do = True``, the fits to each wavelet scale are shown. The wavelet fitting may be truncated at the current scale if desired. Lastly, the final results are shown. mean_map This parameter is a string (default is ``'default'``) that determines how the background mean map is computed and how it is used further. If ``'const'``\, then the value of the clipped mean of the entire image (set by the ``kappa_clip`` option) is used as the background mean map. If ``'zero'``\, then a value of zero is used. If ``'map'``\, then the 2-dimensional mean map is computed and used. The resulting mean map is largely determined by the value of the ``rms_box`` parameter (see the ``rms_box`` parameter for more information). If ``'default'``\, then PyBDSF will attempt to determine automatically whether to use a 2-dimensional map or a constant one as follows. First, the image is assumed to be confused if ``bmpersrc_th`` < 25 or the ratio of the clipped mean to rms (clipped mean/clipped rms) is > 0.1, else the image is not confused. Next, the mean map is checked to see if its spatial variation is significant. If so, then a 2-D map is used and, if not, then the mean map is set to either 0.0 or a constant depending on whether the image is thought to be confused or not. Generally, ``'default'`` works well. However, if there is significant extended emission in the image, it is often necessary to force the use of a constant mean map using either ``'const'`` or ``'mean'``\. multichan_opts This parameter is a Boolean (default is ``False``). If ``True``, the multichannel options will be listed. See :ref:`multichan_opts` for details of the options. output_opts This parameter is a Boolean (default is ``False``). If ``True``, the output options will be listed. See :ref:`output_opts` for details of the options. polarisation_do This parameter is a Boolean (default is ``False``). If ``True``, polarization properties will be calculated for the sources. See :ref:`polarisation_do` for details of the options. psf_vary_do This parameter is a Boolean (default is ``False``). If ``True``, the spatial variation of the PSF will be estimated and its effects corrected. See :ref:`psf_vary_do` for details of the options. rms_box This parameter is a tuple (default is ``None``) of two integers and is probably the most important input parameter for PyBDSF. The first integer, boxsize, is the size of the 2-D sliding box for calculating the rms and mean over the entire image. The second, stepsize, is the number of pixels by which this box is moved for the next measurement. If ``None``\, then suitable values are calculated internally. In general, it is best to choose a box size that corresponds to the typical scale of artifacts in the image, such as those that are common around bright sources. Too small of a box size will effectively raise the local rms near a source so much that a source may not be fit at all; too large a box size can result in underestimates of the rms due to oversmoothing. A step size of 1/3 to 1/4 of the box size usually works well. .. note:: The :term:`spline_rank` parameter also affects the rms and mean maps. If you find ringing artifacts in the rms or mean maps near bright sources, try adjusting this parameter. rms_map This parameter is a Boolean (default is ``None``). If ``True``\, then the 2-D background rms image is computed and used. If ``False``\, then a constant value is assumed (use ``rms_value`` to force the rms to a specific value). If ``None``\, then the 2-D rms image is calculated, and if the variation is statistically significant then it is taken, else a constant value is assumed. The rms image used for each channel in computing the spectral index follows what was done for the channel-collapsed image. Generally, the default value works well. However, if there is significant extended emission in the image, it is often necessary to force the use of a constant rms map by setting ``rms_map = False``. shapelet_do This parameter is a Boolean (default is ``False``). If ``True``, shapelet decomposition of the islands will be performed. See :ref:`shapelet_do` for details of the options. spectralindex_do This parameter is a Boolean (default is ``False``). If ``True``, spectral indices will be calculated for the sources. See :ref:`spectralindex_do` for details of the options. thresh This parameter is a string (default is ``None``). If ``thresh = 'hard'``\, then a hard threshold is assumed, given by thresh_pix. If ``thresh = 'fdr'``\, then the False Detection Rate algorithm of Hopkins et al. (2002) is used to calculate the value of ``thresh_pix``\. If ``thresh = None``\, then the false detection probability is first calculated, and if the number of false source pixels is more than ``fdr_ratio`` times the estimated number of true source pixels, then the ``'fdr'`` threshold option is chosen, else the ``'hard'`` threshold option is chosen. thresh_isl This parameter is a float (default is 3.0) that determines the region to which fitting is done. A higher value will produce smaller islands, and hence smaller regions that are considered in the fits. A lower value will produce larger islands. Use the thresh_pix parameter to set the detection threshold for sources. Generally, ``thresh_isl`` should be lower than ``thresh_pix``\. Only regions above the absolute threshold will be used. The absolute threshold is calculated as ``abs_thr = mean + thresh_isl * rms``\. Use the ``mean_map`` and ``rms_map`` parameters to control the way the mean and rms are determined. thresh_pix This parameter is a float (default is 5.0) that sets the source detection threshold in number of sigma above the mean. If false detection rate thresholding is used, this value is ignored and ``thresh_pix`` is calculated inside the program This parameter sets the overall detection threshold for islands (i.e. ``thresh_pix = 5`` will find all sources with peak flux densities per beam of 5-sigma or greater). Use the ``thresh_isl`` parameter to control how much of each island is used in fitting. Generally, ``thresh_pix`` should be larger than ``thresh_isl``. Only islands with peaks above the absolute threshold will be used. The absolute threshold is calculated as ``abs_thr = mean + thresh_pix * rms``\. Use the ``mean_map`` and ``rms_map`` parameters to control the way the mean and rms are determined. .. _adaptive_rms_box: Adaptive box options ==================== If ``adaptive_rms_box = True``, the rms_box is reduced in size near bright sources and enlarged far from them. This scaling attempts to account for possible strong artifacts around bright sources while still acheiving accurate background rms and mean values when extended sources are present. This option is generally slower than non-adaptive scaling. Use the ``rms_box`` parameter to set the large-scale box and the ``rms_box_bright`` parameter to set the small-scale box. The threshold for bright sources can be set with the ``adaptive_thresh`` parameter: .. parsed-literal:: adaptive_rms_box ...... True : Use adaptive rms_box when determining rms and mean maps :term:`adaptive_thresh` ..... None : Sources with pixels above adaptive_thresh* clipped_rms will be considered as bright sources (i.e., with potential artifacts). None => calculate inside program :term:`rms_box_bright` ...... None : Box size, step size for rms/mean map calculation near bright sources. Specify as (box, step) in pixels. None => calculate inside program .. glossary:: adaptive_thresh This parameter is a float (default is ``None``) that sets the SNR above which sources may be affected by strong artifacts Sources that meet the SNR threshold will use the small-scale box (set by the ``rms_box_bright`` parameter) if their sizes at a threshold of 10.0 is less than 25 beam areas. If None, the threshold is varied from 500 to 50 to attempt to obtain at least 5 candidate bright sources. rms_box_bright This parameter is a tuple (default is ``None``) of two integers that sets the box and step sizes to use near bright sources (determined by the ``adaptive_thresh`` parameter). The large-scale box size is set with the ``rms_box`` parameter. .. _advanced_opts: Advanced options ================ If ``advanced_opts = True``, a number of additional options are listed. The advanced options do not usually need to be altered from the default values, but can be useful, for example, for fine tuning a fit or for quickly fitting a small region of a much larger image. The advanced options are: .. parsed-literal:: advanced_opts ......... True : Show advanced options :term:`aperture` ............ None : Radius of aperture in pixels inside which aperture fluxes are measured for each source. None => no aperture fluxes measured :term:`aperture_posn` .. 'centroid': Position the aperture (if aperture is not None) on: 'centroid' or 'peak' of the source. :term:`blank_limit` ......... None : Limit in Jy/beam below which pixels are blanked. None => no such blanking is done :term:`bmpersrc_th` ......... None : Theoretical estimate of number of beams per source. None => calculate inside program :term:`check_outsideuniv` .. False : Check for pixels outside the universe :term:`detection_image` ........ '': Detection image file name used only for detecting islands of emission. Source measurement is still done on the main image :term:`do_cache` ........... False : Cache internally derived images to disk :term:`do_mc_errors` ....... False : Estimate uncertainties for 'M'-type sources using Monte Carlo method :term:`fdr_alpha` ........... 0.05 : Alpha for FDR algorithm for thresholds :term:`fdr_ratio` ............ 0.1 : For thresh = None; if #false_pix / #source_pix < fdr_ratio, thresh = 'hard' else thresh = 'fdr' :term:`fittedimage_clip` ..... 0.1 : Sigma for clipping Gaussians while creating fitted image :term:`fix_to_beam` ........ False : Fix major and minor axes and PA of Gaussians to beam? :term:`group_by_isl` ....... False : Group all Gaussians in each island into a single source :term:`group_method` .. 'intensity': Group Gaussians into sources using 'intensity' map or 'curvature' map :term:`group_tol` ............ 1.0 : Tolerance for grouping of Gaussians into sources: larger values will result in larger sources :term:`ini_gausfit` ..... 'default': Initial guess for Gaussian parameters: 'default', 'fbdsm', or 'nobeam' :term:`ini_method` .... 'intensity': Method by which inital guess for fitting of Gaussians is chosen: 'intensity' or 'curvature' :term:`kappa_clip` ........... 3.0 : Kappa for clipped mean and rms :term:`maxpix_isl` .......... None : Maximum number of pixels with emission per island. None -> no limit :term:`minpix_isl` .......... None : Minimum number of pixels with emission per island. None -> calculate inside program :term:`ncores` .............. None : Number of cores to use during fitting, None => use all :term:`peak_fit` ............ True : Find and fit peaks of large islands before fitting entire island :term:`peak_maxsize` ........ 30.0 : If island size in beam area is more than this, attempt to fit peaks separately (if peak_fit=True). Min value is 30 :term:`rmsmean_map_filename` None : Filenames of FITS files to use as the mean and rms maps, given as a list [, ]. If supplied, the internally generated mean and rms maps are not used :term:`rms_value` ........... None : Value of constant rms in Jy/beam to use if rms_map = False. None => calculate inside program :term:`spline_rank` ............ 3 : Rank of the interpolating function for rms/mean map :term:`split_isl` ........... True : Split island if it is too large, has a large convex deficiency and it opens well. If it doesn't open well, then isl.mean = isl.clipped_mean, and is taken for fitting. Splitting, if needed, is always done for wavelet images :term:`splitisl_maxsize` .... 50.0 : If island size in beam area is more than this, consider splitting island. Min value is 50 :term:`src_ra_dec` .......... None : List of source positions at which fitting is done. E.g., src_ra_dec = [(197.1932, 47.9188), (196.5573, 42.4852)]. :term:`src_radius_pix` ...... None : Radius of the island (if src_ra_dec is not None) in pixels. None => radius is set to the FWHM of the beam major axis. :term:`stop_at` ............. None : Stops after: 'isl' = island finding step or 'read' = image reading step :term:`trim_box` ............ None : Do source detection on only a part of the image. Specify as (xmin, xmax, ymin, ymax) in pixels. E.g., trim_box = (120, 840, 15, 895). None => use entire image .. glossary:: aperture This parameter is a float (default is ``None``) that sets the radius (in pixels) inside which the aperture flux is measured for each source. The aperture is centered on the either the centroid or the peak of the source (depending on the value of the ``aperture_posn`` option). Errors are calculated from the mean of the rms map inside the aperture. aperture_posn This parameter is a string (default is ``'centroid'``) that sets the how the aperture is positioned relative to the source. If 'centroid', the aperture is centered on the source centroid. If 'peak', the aperture is centered on the source peak. If aperture=None (i.e., no aperture radius is specified), this parameter is ignored. blank_limit This parameter is a float (default is ``None``) that sets the limit in Jy/beam below which pixels are blanked. All pixels in the ch0 image with a value less than the specified limit and with at least 4 neighboring pixels with values also less than this limit are blanked. If ``None``, any such pixels are left unblanked (and hence will affect the rms and mean maps, etc.). Pixels with a value of NaN are always blanked. bmpersrc_th This parameter is a float (default is ``None``) that sets the theoretical estimate of number of beams per source. If ``None``, the value is calculated as N/[n*(alpha-1)], where N is the total number of pixels in the image, n is the number of pixels in the image whose value is greater than 5 times the clipped rms, and alpha is the slope of the differential source counts distribution, assumed to be 2.5. The value of ``bmpersrc_th`` is used to estimate the average separation in pixels between two sources, which in turn is used to estimate the boxsize for calculating the background rms and mean images. In addition, if the value is below 25 (or the ratio of clipped mean to clipped rms of the image is greater than 0.1), the image is assumed to be confused and hence the background mean is put to zero. check_outsideuniv This parameter is a Boolean (default is ``False``). If ``True``, then the coordinate of each pixel is examined to check if it is outside the universe, which may happen when, e.g., an all sky image is made with SIN projection (commonly done at LOFAR earlier). When found, these pixels are blanked (since imaging software do not do this on their own). Note that this process takes a lot of time, as every pixel is checked in case weird geometries and projections are used. detection_image This parameter is a string (default is ``''``) that sets the detection image file name used only for detecting islands of emission. Source measurement is still done on the main image. The detection image can be a FITS or CASA 2-, 3-, or 4-D cube and must have the same size and WCS parameters as the main image. do_cache This parameter is a Boolean (default is ``False``) that controls whether internally derived images are stored in memory or are cached to disk. Caching can reduce the amount of memory used, and is therefore useful when analyzing large images. do_mc_errors This parameter is a Boolean (default is ``False``). If ``True``, uncertainties on the sizes and positions of 'M'-type sources due to uncertainties in the constituent Gaussians are estimated using a Monte Carlo technique. These uncertainties are added in quadrature with those calculated using Condon (1997). If ``False``, these uncertainties are ignored, and errors are calculated using Condon (1997) only. Enabling this option will result in longer run times if many 'M'-type sources are present, but should give better estimates of the uncertainites, particularly for complex sources composed of many Gaussians. fdr_alpha This parameter is a float (default is 0.05) that sets the value of alpha for the FDR algorithm for thresholding. If ``thresh`` is ``'fdr'``, then the estimate of ``fdr_alpha`` (see Hopkins et al. 2002 [#f2]_ for details) is stored in this parameter. fdr_ratio This parameter is a float (default is 0.1). When ``thresh = None``, if #false_pix / #source_pix < fdr_ratio, ``thresh = 'hard'`` otherwise ``thresh = 'fdr'``. fittedimage_clip This parameter is a float (default is 0.1). When the residual image is being made after Gaussian decomposition, the model images for each fitted Gaussian are constructed up to a size 2b, such that the amplitude of the Gaussian falls to a value of ``fitted_image_clip`` times the local rms, b pixels from the peak. fix_to_beam This parameter is a Boolean (default is ``False``). If True, then during fitting the major and minor axes and PA of the Gaussians are fixed to the beam. Only the amplitude and position are fit. If False, all parameters are fit. group_by_isl This parameter is a Boolean (default is ``False``). If True, all Gaussians in the island belong to a single source. If False, grouping is controlled by the group_tol parameter. group_method This parameter is a string (default is ``'intensity'``). Gaussians are deemed to be a part of the same source if: (1) no pixel on the line joining the centers of any pair of Gaussians has a (Gaussian-reconstructed) value less than the island threshold, and (2) the centers are separated by a distance less than half the sum of their FWHMs along the line joining them. If ``'curvature'``, the above comparisons are done on the curature map (see Hancock et al. 2012). If ``'intensity'``, the comparisons are done on the intensity map. group_tol This parameter is a float (default is 1.0) that sets the tolerance for grouping of Gaussians into sources: larger values will result in larger sources. Sources are created by grouping nearby Gaussians as follows: (1) If the difference between the minimum value between two Gaussians and the lower of the peak flux densities of the Gaussians in an island is less than ``group_tol * thresh_isl * rms_clip``\, and (2) if the centers are separated by a distance less than ``0.5 * group_tol`` of the sum of their FWHMs along the PA of the line joining them, they belong to the same island. ini_gausfit This parameter is a string (default is ``'default'``). These are three different ways of estimating the initial guess for fitting of Gaussians to an island of emission. If ``'default'``, the maximum number of Gaussians is estimated from the number of peaks in the island. An initial guess is made for the parameters of these Gaussians before final fitting is done. This method should produce the best results when there are no large sources present. If ``'simple'``, the maximum number of Gaussians per island is set to 25, and no initial guess for the Gaussian parameters is made. Lastly, the ``'nobeam'`` method is similar to the ``'default'`` method, but no information about the beam is used. This method is best used when source sizes are expected to be very different from the beam and is generally slower than the other methods. For wavelet images, the value used for the original image is used for wavelet order j <= 3 and ``'nobeam'`` for higher orders. ini_method This parameter is a string (default is ``'intensity'``). If ``'intensity'``, the inital guess described in the help for the ``ini_gausfit`` parameter is calculated using the intensity (ch0) image. If ``'curvature'``, it is done using the curvature map (see Hancock et al. 2012). kappa_clip This parameter is a float (default is 3.0) that is the factor used for Kappa-alpha clipping, as in AIPS. For an image with few source pixels added on to (Gaussian) noise pixels, the dispersion of the underlying noise will need to be determined. This is done iteratively, whereby the actual dispersion is first computed. Then, all pixels whose value exceeds kappa clip times this rms are excluded and the rms is computed again. This process is repeated until no more pixels are excluded. For well behaved noise statistics, this process will converge to the true noise rms with a value for this parameter ~3-5. A large fraction of source pixels, less number of pixels in total, or significant non-Gaussianity of the underlying noise will all lead to non-convergence. maxpix_isl This parameter is an integer (default is ``None``) that sets the maximum number of pixels in an island for the island to be included. If ``None``, there is no limit. minpix_isl This parameter is an integer (default is ``None``) that sets the minimum number of pixels in an island for the island to be included. If ``None``, the number of pixels is set to 1/3 of the area of an unresolved source using the beam and pixel size information in the image header. It is set to 6 pixels for all wavelet images. ncores This parameter is an integer (default is ``None``) that sets the number of cores to use during fitting. If ``None``, all available cores are used (one core is reserved for plotting). peak_fit This parameter is a Boolean (default is ``True``). When True, PyBDSF will identify and fit peaks of emission in large islands iteratively (the size of islands for which peak fitting is done is controlled with the peak_maxsize option), using a maximum of 10 Gaussians per iteration. Enabling this option will generally speed up fitting (by factors of many for large islands), but may result in somewhat higher residuals. peak_maxsize This parameter is a float (default is 30.0). If island size in beam area is more than this value, attempt to fit peaks iteratively (if ``peak_fit = True``). The minimum value is 30. rmsmean_map_filename This parameter is a list (default is ``None``) that sets the filenames of FITS files to use as the mean and rms maps, given as a list [, ]. If supplied, the internally generated mean and rms maps are not used. rms_value This parameter is a float (default is ``None``) that sets the value of constant rms in Jy/beam to use if ``rms_map = False``. If ``None``, the value is calculated inside the program. spline_rank This parameter is an integer (default is 3) that sets the order of the interpolating spline function to interpolate the background rms and mean maps over the entire image. .. note:: Bicubic interpolation (the default) can cause ringing artifacts to appear in the rms and mean maps in regions where sharp changes occur. These artifacts can result in regions with negative values. If you find such artifacts, try changing the :term:`spline_rank` parameter. split_isl This parameter is a Boolean (default is ``True``). If ``True``, an island is split if it is too large, has a large convex deficiency and it opens well. If it doesn't open well, then ``isl.mean = isl.clipped_mean``, and is taken for fitting. Splitting, if needed, is always done for wavelet images splitisl_maxsize This parameter is a float (default is 50.0). If island size in beam area is more than this, consider splitting island. The minimum value is 50. src_ra_dec This parameter is a list of tuples (default is ``None``) that defines the center positions at which fitting will be done. The size of the region used for the fit is given by the ``src_radius_pix`` parameter. Positions should be given as a list of RA and Dec, in degrees, one set per source. These positions will override the normal island finding module. src_radius_pix This parameter is a float (default is ``None``) that determines the size of the region used to fit the source positions specified by the ``src_ra_dec`` parameter. If ``None``, the radius is set to the FWHM of the beam major axis. stop_at This parameter is a string (default is ``None``) that stops an analysis after: 'isl' = island finding step or 'read' = image reading step. trim_box This parameter is a tuple (default is ``None``) that defines a subregion of the image on which to do source detection. It is specified as (xmin, xmax, ymin, ymax) in pixels. E.g., ``trim_box = (120, 840, 15, 895)``\. If ``None``, the entire image is used. .. _flagging_opts: Flagging options ================ If ``flagging_opts = True``, a number of options are listed for flagging unwanted Gaussians that occur durring a fit. Flagged Gaussians are not included in any further analysis or catalog. They may be viewed using the ``show_fit`` task (see :ref:`showfit`). A flag value is associated with each flagged Gaussian that allows the user to determine the reason or reasons that it was flagged. If multiple flagging conditions are met by a single Gaussian, the flag values are summed. For example, if a Gaussian is flagged because it is too large (its size exceeds that implied by ``flag_maxsize_bm``, giving a flag value of 64) and because it is too bright (its peak flux density per beam exceeds that implied by ``flag_maxsnr``, giving a flag value of 2) then the final flag value is 64 + 2 = 66. .. note:: If a fit did not produce good results, it is often useful to check whether there are flagged Gaussians and adjust the flagging options as necessary. Flagged Gaussians can be viewed by setting ``ch0_flagged = True`` in the ``show_fit`` task. The options for flagging of Gaussians are: .. parsed-literal:: flagging_opts ......... True : Show options for Gaussian flagging :term:`flag_bordersize` ........ 0 : Flag Gaussian if centre is outside border - flag_bordersize pixels :term:`flag_maxsize_bm` ..... 25.0 : Flag Gaussian if area greater than flag_maxsize_bm times beam area :term:`flag_maxsize_isl` ..... 1.0 : Flag Gaussian if x, y bounding box around sigma-contour is factor times island bbox :term:`flag_maxsnr` .......... 1.5 : Flag Gaussian if peak is greater than flag_maxsnr times max value in island :term:`flag_minsize_bm` ...... 0.7 : Flag Gaussian if flag_smallsrc = True and area smaller than flag_minsize_bm times beam area :term:`flag_minsnr` .......... 0.9 : Flag Gaussian if peak is less than flag_minsnr times thresh_pix times local rms :term:`flag_smallsrc` ...... False : Flag sources smaller than flag_minsize_bm times beam area .. glossary:: flag_bordersize This parameter is an integer (default is 0). Any fitted Gaussian whose centre is ``flag_bordersize`` pixels outside the island bounding box is flagged. The flag value is increased by 4 (for x) and 8 (for y). flag_maxsize_bm This parameter is a float (default is 25.0). Any fitted Gaussian whose size is greater than ``flag_maxsize_bm`` times the synthesized beam is flagged. The flag value is increased by 64. flag_maxsize_fwhm This parameter is a float (default is 0.3). Any fitted Gaussian whose contour of ``flag_maxsize_fwhm`` times the FWHM falls outside the island is flagged. The flag value is increased by 256. flag_maxsize_isl This parameter is a float (default is 1.0). Any fitted Gaussian whose maximum x-dimension is larger than ``flag_maxsize_isl`` times the x-dimension of the island (and likewise for the y-dimension) is flagged. The flag value is increased by 16 (for x) and 32 (for y). flag_maxsnr This parameter is a float (default is 1.5). Any fitted Gaussian whose peak is greater than ``flag_maxsnr`` times the value of the image at the peak of the Gaussian is flagged. The flag value is increased by 2. flag_minsize_bm This parameter is a float (default is 0.7). If ``flag_smallsrc`` is True, then any fitted Gaussian whose size is less than ``flag_maxsize_bm`` times the synthesized beam is flagged. The Gaussian flag is increased by 128. flag_minsnr This parameter is a float (default is 0.7). Any fitted Gaussian whose peak is less than ``flag_minsnr`` times ``thresh_pix`` times the local rms is flagged. The flag value is increased by 1. flag_smallsrc This parameter is a Boolean (default is ``False``). If ``True``\, then fitted Gaussians whose size is less than ``flag_minsize_bm`` times the synthesized beam area are flagged. When combining Gaussians into sources, an error is raised if a 2x2 box with the peak of the Gaussian does not have all four pixels belonging to the source. Usually this means that the Gaussian is an artifact or has a very small size. If ``False``\, then if either of the sizes of the fitted Gaussian is zero, then the Gaussian is flagged. If the image is barely Nyquist sampled, this flag is best set to ``False``\. This flag is automatically set to ``False`` while decomposing wavelet images into Gaussians. .. _output_opts: Output options ============== If ``output_opts = True``, options to control the output generated by ``process_image`` are listed. By default, only a log file is generated and output is controlled with the ``export_image`` (see :ref:`export_image`) and ``write_catalog`` (see :ref:`write_catalog`) tasks. However, the user can specify that a number of optional output files be made automatically whenever ``process_image`` is run. These options are most useful for debugging or when running PyBDSF non-interactively in a Python script (see :ref:`scripting`). The output options are: .. parsed-literal:: output_opts ........... True : Show output options :term:`bbs_patches` ......... None : For BBS format, type of patch to use: None => no patches. 'single' => all Gaussians in one patch. 'gaussian' => each Gaussian gets its own patch. 'source' => all Gaussians belonging to a single source are grouped into one patch. 'mask' => use mask file specified by bbs_patches_mask :term:`bbs_patches_mask` .... None : Name of the mask file (of same size as input image) that defines the patches if bbs_patches = 'mask' :term:`indir` ............... None : Directory of input FITS files. None => get from filename :term:`opdir_overwrite` .. 'overwrite': 'overwrite'/'append': If output_all=True, delete existing files or append a new directory :term:`output_all` ......... False : Write out all files automatically to directory 'filename_pybdsf' :term:`plot_allgaus` ....... False : Make a plot of all Gaussians at the end :term:`plot_islands` ....... False : Make separate plots of each island during fitting (for large images, this may take a long time and a lot of memory) :term:`print_timing` ....... False : Print basic timing information :term:`quiet` .............. False : Suppress text output to screen. Output is still sent to the log file as usual :term:`savefits_meanim` .... False : Save background mean image as fits file :term:`savefits_normim` .... False : Save norm image as fits file :term:`savefits_rankim` .... False : Save island rank image as fits file :term:`savefits_residim` ... False : Save residual image as fits file :term:`savefits_rmsim` ..... False : Save background rms image as fits file :term:`solnname` ............ None : Name of the run, to be appended to the name of the output directory :term:`verbose_fitting` .... False : Print out extra information during fitting .. glossary:: bbs_patches This parameter is a string (default is ``None``) that sets the type of patch to use in BBS-formatted catalogs. When the Gaussian catalogue is written as a BBS-readable sky file, this option determines whether all Gaussians are in a single patch (``'single'``), there are no patches (``None``), all Gaussians for a given source are in a separate patch (``'source'``), each Gaussian gets its own patch (``'gaussian'``), or a mask image is used to define the patches (``'mask'``). If you wish to have patches defined by island, then set ``group_by_isl = True`` before fitting to force all Gaussians in an island to be in a single source. Then set ``bbs_patches = 'source'`` when writing the catalog. bbs_patches_mask This parameter is a string (default is ``None``) that sets the file name of the mask file to use to define patches in BBS-formatted catalogs. The mask image should be 1 inside the patches and 0 elsewhere and should be the same size as the input image (before any ``trim_box`` is applied). Any Gaussians that fall outside of the patches will be ignored and will not appear in the output sky model. indir This parameter is a string (default is ``None``) that sets the directory of input FITS files. If ``None``, the directory is defined by the input filename. opdir_overwrite This parameter is a string (default is ``'overwrite'``) that determines whether existing output files are overwritten or not. output_all This parameter is a Boolean (default is ``False``). If ``True``\, all output products are written automatically to the directory ``'filename_pybdsf'``. plot_allgaus This parameter is a Boolean (default is ``False``). If ``True``\, make a plot of all Gaussians at the end. plot_islands This parameter is a Boolean (default is ``False``). If ``True``\, make separate plots of each island during fitting (for large images, this may take a long time and a lot of memory). print_timing This parameter is a Boolean (default is ``False``). If ``True``\, print basic timing information. quiet This parameter is a Boolean (default is ``False``). If ``True``\, suppress text output to screen. Output is still sent to the log file as usual. savefits_meanim This parameter is a Boolean (default is ``False``). If ``True``\, save background mean image as a FITS file. savefits_normim This parameter is a Boolean (default is ``False``). If ``True``\, save norm image as a FITS file. savefits_rankim This parameter is a Boolean (default is ``False``). If ``True``\, save island rank image as a FITS file. savefits_residim This parameter is a Boolean (default is ``False``). If ``True``\, save residual image as a FITS file. savefits_rmsim This parameter is a Boolean (default is ``False``). If ``True``\, save background rms image as a FITS file. solnname This parameter is a string (default is ``None``) that sets the name of the run, to be appended to the name of the output directory. verbose_fitting This parameter is a Boolean (default is ``False``). If ``True``\, print out extra information during fitting. .. _multichan_opts: Multichannel options ==================== If ``multichan_opts = True``, the options used to control the way PyBDSF handles images with more than one frequency channel are listed. In particular, these options control how the multichannel image is collapsed to form the ``ch0`` image on which source detection is done. The options concerning multichannel images are: .. parsed-literal:: multichan_opts ........ True : Show options for multi-channel images :term:`beam_sp_derive` ...... True : If True and beam_spectrum is None, then assume header beam is for lowest frequency and scales with frequency for channels :term:`beam_spectrum` ....... None : FWHM of synthesized beam per channel. Specify as [(bmaj_ch1, bmin_ch1, bpa_ch1), (bmaj_ch2, bmin_ch2, bpa_ch2), etc.] in degrees. E.g., beam_spectrum = [(0.01, 0.01, 45.0), (0.02, 0.01, 34.0)] for two channels. None => all equal to beam :term:`collapse_av` ........... [] : List of channels to average if collapse_mode = 'average'; None => all :term:`collapse_ch0` ........... 0 : Number of the channel for source extraction, if collapse_mode = 'single' :term:`collapse_mode` ... 'average': Collapse method: 'average' or 'single'. Average channels or take single channel to perform source detection on :term:`collapse_wt` ....... 'unity': Weighting: 'unity' or 'rms'. Average channels with weights = 1 or 1/rms_clip^2 if collapse_mode = 'average' :term:`frequency_sp` ........ None : Frequency in Hz of channels in input image when more than one channel is present. E.g., frequency = [74e6, 153e6]. None => get from header .. glossary:: beam_sp_derive This parameter is a Boolean (default is ``True``). If `True` and the parameter beam_spectrum is ``None`` and no channel-dependent beam parameters are found in the header, then we assume that the beam in the header is for the lowest frequency of the image cube and scale accordingly to calculate the beam per channel. If ``False``, then a constant value of the beam (that given in the header or specified with the ``beam`` parameter) is taken instead. beam_spectrum This parameter is a list of tuples (default is ``None``) that sets the FWHM of synthesized beam per channel. Specify as [(bmaj_ch1, bmin_ch1, bpa_ch1), (bmaj_ch2, bmin_ch2, bpa_ch2), etc.] in degrees. E.g., ``beam_spectrum = [(0.01, 0.01, 45.0), (0.02, 0.01, 34.0)]`` for two channels. If ``None``, then the channel-dependent restoring beam is searched for in the header. If not found, the beam is either assumed to be a constant or to scale with frequency, depending on whether the parameter ``beam_sp_derive`` is ``False`` or ``True``. collapse_av This parameter is a list of integers (default is ``[]``) that specifies the channels to be averaged to produce the continuum image for performing source extraction, if ``collapse_mode`` is ``'average'``. If the value is ``[]``, then all channels are used. Otherwise, the value is a Python list of channel numbers. collapse_ch0 This parameter is an integer (default is 0) that specifies the number of the channel for source extraction, if ``collapse_mode = 'single'``. collapse_mode This parameter is a string (default is ``'average'``) that determines whether, when multiple channels are present, the source extraction is done on a single channel (``'single'``) or an average of many channels (``'average'``). collapse_wt This parameter is a string (default is ``'unity'``). When ``collapse_mode`` is ``'average'``, then if this value is ``'unity'``, the channels given by ``collapse_av`` are averaged with unit weights and if ``'rms'``, then they are averaged with weights which are inverse square of the clipped rms of each channel image. frequency_sp This parameter is a list of floats (default is ``None``) that sets the frequency in Hz of channels in input image when more than one channel is present. E.g., ``frequency_sp = [74e6, 153e6]``. If the frequency is not given by the user, then it is looked for in the image header. If not found, then an error is raised. PyBDSF will not work without the knowledge of the frequency. .. _atrous_do: *À trous* wavelet decomposition module -------------------------------------- If ``atrous_do = True``, this module decomposes the residual image that results from the normal fitting of Gaussians into wavelet images of various scales. Such a decomposition is useful if there is extended emission that is not well fit during normal fitting. Such emission therefore remains in the Gaussian residual image and can be further fit by Gaussians whose size is tuned to the various wavelet scales. Therefore, wavelet decomposition should be used when there is significant residual emission that remains after normal Gaussian fitting. The wavelet module performs the following steps: * The number of wavelet scales to be considered is set by the ``atrous_jmax`` parameter. By default, this number is determined automatically from the size of the largest island in the image. Wavelet images are then made for scales of order (*j*) ranging from 1 to *jmax*. * For each scale (*j*), the appropriate *à trous* wavelet transformation is made (see Holschneider et al. 1989 for details). Additionally, the "remainder" image (called the *c_J* image) is also made. This image includes all emission not included in the other wavelet images. * Depending on the value of the ``atrous_sum`` option, fitting is done to either an image that is a sum over all scales equal to or larger than the scale under consideration (``atrous_sum = True``) or to an image of a single scale (``atrous_sum = False``). Fitting to the sum over all larger scales will generally result in increased signal to noise. * If ``atrous_bdsm = True``, an rms map and a mean map are made for each wavelet image and Gaussians are fit in the normal way. Gaussians can be optionally restricted to lie within islands found from the initial image. If a wavelet island overlaps spatially with an existing island, the two islands are merged together to form a single island. The wavelet Gaussians can then be included in source catalogs (see :ref:`write_catalog`). The options for this module are as follows: .. parsed-literal:: atrous_do ............. True : Decompose Gaussian residual image into multiple scales :term:`atrous_bdsm_do` ...... True : Perform source extraction on each wavelet scale :term:`atrous_jmax` ............ 0 : Max allowed wavelength order, 0 => calculate inside program :term:`atrous_lpf` ........... 'b3': Low pass filter, either 'b3' or 'tr', for B3 spline or Triangle :term:`atrous_orig_isl` .... False : Restrict wavelet Gaussians to islands found in original image :term:`atrous_sum` .......... True : Fit to the sum of images of the remaining wavelet scales :term:`use_scipy_fft` ....... True : Use fast SciPy FFT for convolution .. glossary:: atrous_bdsm_do This parameter is a Boolean (default is ``False``). If ``True``, PyBDSF performs source extraction on each wavelet scale. atrous_jmax This parameter is an integer (default is 0) which is the maximum order of the *à trous* wavelet decomposition. If 0 (or <0 or >15), then the value is determined within the program. The value of this parameter is then estimated as the (lower) rounded off value of ln[(nm-l)/(l-1) + 1]/ln2 + 1 where nm is the minimum of the residual image size (n, m) in pixels and l is the length of the filter *à trous* lpf (see the ``atrous_lpf`` parameter for more info). A sensible value is such that the size of the kernel is not more than 3-4 times smaller than the smallest image dimension. atrous_lpf This parameter is a string (default is ``'b3'``) that sets the low pass filter, which can be either the B3 spline or the triangle function, which is used to generate the *à trous* wavelets. The B3 spline is [1, 4, 6, 4, 1] and the triangle is [1, 2, 1], normalised so that the sum is unity. The lengths of the filters are hence 5 and 3 respectively. atrous_orig_isl This parameter is a Boolean (default is ``False``). If ``True``, all wavelet Gaussians must lie within the boundaries of islands found in the original image. If ``False``, new islands that are found only in the wavelet images are included in the final fit. atrous_sum This parameter is a Boolean (default is ``True``). If ``True``, fitting is done on an image that is the sum of the remaining wavelet scales. Using the sum will generally result in improved signal. If ``False``, fitting is done on only the wavelet scale under consideration. use_scipy_fft This parameter is a Boolean (default is ``True``). If ``True``, the SciPy FFT function will be used instead of the custom version. The SciPy version is much faster but also uses much more memory. .. _psf_vary_do: PSF variation module -------------------- If ``psf_vary_do = True``, then the spatial variations in the PSF are estimated and their effects corrected for. To this end, PyBDSF performs the following steps: * A list of sources that are likely to be unresolved is constructed. This is done by first selecting only type 'S' sources by default (see :ref:`output_cols` for details of source types), but this restriction can be overridden using the ``psf_stype_only`` option) and sources with SNRs that exceed ``psf_snrcut``. Next, a function is fit to determine how the size of sources (normalized by the median size) varies with the SNR. The function used is defined as :math:`\sigma / median = \sqrt(c_1^2 + c_2^2/SNR^2)`, where :math:`\sigma` is the size of the Gaussian and :math:`c_1` and :math:`c_2` are free parameters. Clipping of outliers is done during this fitting, controlled by the ``psf_nsig`` parameter. Lastly, unresolved sources are selected by choosing sources that lie within ``psf_kappa2`` times the rms of this best-fit sigma-SNR relation. As this last step can be unreliable for high-SNR sources, an additional selection can be made for the highest SNR sources using the ``psf_high_snr`` parameter. All sources with SNRs above ``psf_high_snr`` will be taken as unresolved. * Next the image is tessellated using Voronoi tessellation to produce tiles within which the PSF shape is calculated (and assumed to be constant). The list of probable unresolved sources is filtered to select "calibrator" sources to use to determine the tessellation tiles. These sources are the brightest sources (known as the primary generators), defined as those sources that have SNRs in the top fraction of sources defined by ``psf_snrtop`` and that also have SNRs greater than ``psf_snrcutstack``. These sources are then grouped by their proximity, if they are within 50% of the distance to third closest source. * The unresolved sources within each tile that have SNRs greater than ``psf_snrcutstack`` are then stacked to form a high-SNR PSF. For each tile, this PSF is fit with a Gaussian to recover its size. The significance of the variation in the sizes across the image is quantified. * If the variation is significant, the major axis, minor axis, and position angle are then interpolated across the image. Smoothing can be applied to these images to smooth out artifacts due to noise and the interpolation. Additionally, images are made of the ratio of peak-to-total flux and peak-to-aperture flux (if an aperture is specified). These ratio images provide conversions from total flux to peak flux for point sources. In the absence of smearing effects, these ratios should be around unity. However, if ionospheric effects are present, significant smearing can be present. In this case, these ratio images can be useful, for example, in determining the sensitivity at a particular location in the image to a point source with a given total flux. * Lastly, the deconvolved source sizes are adjusted to include the PSF variation as a function of position. The options for this module are as follows: .. parsed-literal:: psf_vary_do ........... True : Calculate PSF variation across image :term:`psf_high_snr` ........ None : SNR above which all sources are taken to be unresolved. E.g., psf_high_snr = 20.0. None => no such selection is made :term:`psf_itess_method` ....... 0 : 0 = normal, 1 = 0 + round, 2 = LogSNR, 3 = SqrtLogSNR :term:`psf_kappa2` ........... 2.0 : Kappa for clipping for analytic fit :term:`psf_nsig` ............. 3.0 : Kappa for clipping within each bin :term:`psf_over` ............... 2 : Factor of nyquist sample for binning bmaj, etc. vs SNR :term:`psf_smooth` .......... None : Size of Gaussian to use for smoothing of interpolated images in arcsec. None => no smoothing :term:`psf_snrcut` .......... 10.0 : Minimum SNR for statistics :term:`psf_snrcutstack` ..... 15.0 : Unresolved sources with higher SNR taken for stacked psfs :term:`psf_snrtop` .......... 0.15 : Fraction of SNR > snrcut as primary generators :term:`psf_stype_only` ...... True : Restrict sources used in PSF variation estimating to be only of type 'S' .. glossary:: psf_high_snr This parameter is a float (default is ``None``). Gaussians with SNR greater than this are used to determine the PSF variation, even if they are deemed to be resolved. This corrects for the unreliability at high SNRs in the algorithm used to find unresolved sources. The minimum value is 20.0. If ``None``, then no such selection is made. psf_itess_method This parameter is an integer (default is 0) which can be 0, 1, 2 or 3, which corresponds to a tessellation method. If 0, 2 or 3, then the weights used for Voronoi tessellation are unity, log(SNR) and sqrt[log(SNR)] where SNR is the signal to noise ratio of the generator in a tile. If 1, then the image is tessellated such that each tile has smooth boundaries instead of straight lines, using pixel-dependent weights. psf_kappa2 This parameter is a float (default is 2.0). When iteratively arriving at a statistically probable set of 'unresolved' sources, the fitted major and minor axis sizes versus SNR are binned and fitted with analytical functions. Those Gaussians which are within ``psf_kappa2`` times the fitted rms from the fitted median are then considered 'unresolved' and are used further to estimate the PSFs. psf_nsig This parameter is a float (default is 3.0). When constructing a set of 'unresolved' sources for psf estimation, the (clipped) median, rms and mean of major and minor axis sizes of Gaussians versus SNR within each bin is calculated using ``kappa = psf_nsig``. psf_over This parameter is an integer (default is 2). When constructing a set of 'unresolved' sources for psf estimation, this parameter controls the factor of nyquist sample for binning bmaj, etc. vs SNR. psf_smooth This parameter is a float (default is ``None``) that sets the smoothing scale (in arcsec) used to smooth the interpolated images. Generally, artifacts due to noise and the interpolation can be significantly reduced if the smoothing scale is similar to the typical source separation scale. psf_snrcut This parameter is a float (default is 10.0). Only Gaussians with SNR greater than this are considered for processing. The minimum value is 5.0 psf_snrcutstack This parameter is a float (default is 15.0). Only Gaussians with SNR greater than this are used for estimating PSF images in each tile. psf_snrtop This parameter is a float (default is 0.15). If ``psf_generators`` is 'calibrator', then the peak pixels of Gaussians which are the ``psf_snrtop`` fraction of the SNR distribution are taken as Voronoi generators. psf_stype_only This parameter is a Boolean (default is ``False``). If ``True``\, sources are restricted to be only of type 'S'. .. _spectralindex_do: Spectral index module --------------------- If ``spectralindex_do = True`` (and the input image has more than one frequency), then spectral indices are calculated for the sources in the following way: * The rms maps for the remaining channels are determined. * Neighboring channels are averaged to attempt to obtain the target SNR per channel for a given source, set by the ``specind_snr`` parameter. .. note:: No color corrections are applied during averaging. However, unless the source spectral index is very steep or the channels are very wide, the correction is minimal. See :ref:`colorcorrections` for details. * Flux densities are measured for both individual Gaussians and for total sources. Once source flux densities have been measured in each channel, the SEDs are fit with the following power-law model: :math:`S_\nu \propto \nu^\alpha`, where :math:`\alpha` is the spectral index. The resulting best-fit spectral index is then included in any catalogs that are written out (see :ref:`write_catalog`). In addition, plots of the fits can be viewed with the ``show_fit`` task (see :ref:`showfit`). The options for this module are as follows: .. parsed-literal:: spectralindex_do ...... True : Calculate spectral indices (for multi-channel image) :term:`flagchan_rms` ........ True : Flag channels before (averaging and) extracting spectral index, if their rms if more than 5 (clipped) sigma outside the median rms over all channels, but only if <= 10% of channels :term:`flagchan_snr` ........ True : Flag channels that do not meet SNR criterion set by specind_snr :term:`specind_maxchan` ........ 0 : Maximum number of channels to average for a given source when when attempting to meet target SNR. 1 => no averaging; 0 => no maximum :term:`specind_snr` .......... 3.0 : Target SNR to use when fitting power law. If there is insufficient SNR, neighboring channels are averaged to obtain the target SNR .. glossary:: flagchan_rms This parameter is a Boolean (default is ``True``). If ``True``, then the clipped rms and median (r and m) of the clipped rms of each channel is calculated. Those channels whose clipped rms is greater than 4r away from m are flagged prior to averaging and calculating spectral indices from the image cube. However, these channels are flagged only if the total number of these bad channels does not exceed 10% of the total number of channels themselves. flagchan_snr This parameter is a Boolean (default is ``True``). If ``True``, then flux densities in channels that do not meet the target SNR are not used in fitting. specind_maxchan This parameter is an integer (default is 0) that sets the maximum number of channels that can be averaged together to attempt to reach the target SNR set by the ``specind_snr`` parameter. If 0, there is no limit to the number of channels that can be averaged. If 1, no averaging will be done. specind_snr This parameter is a float (default is 3.0) that sets the target SNR to use when fitting for the spectral index. If there is insufficient SNR, neighboring channels are averaged to obtain the target SNR. The maximum allowable number of channels to average is determined by the ``specind_maxchan`` parameter. Channels (after averaging) that fail to meet the target SNR are not used in fitting. .. _polarisation_do: Polarization module ------------------- If ``polarisation_do = True``, then the polarization properties of the sources are calculated. First, if ``pi_fit = True``, source detection is performed on the polarized intensity (PI) image [#f3]_ to detect sources without Stokes I counterparts. The polarization module then calculates the I, Q, U, and V flux densities, the total, linear, and circular polarisation fractions and the linear polarisation angle of each Gaussian and source. The linear polarisation angle is defined from North, with positive angles towards East. Flux densities are calculated by fitting the normalization of the Gaussians found using the Stokes I or PI images. For linearly polarised emission, the signal and noise add vectorially, giving a Rice distribution instead of a Gaussian one. To correct for this, a bias is estimated and removed from the polarisation fraction using the same method used for the NVSS catalog (see ftp://ftp.cv.nrao.edu/pub/nvss/catalog.ps). Errors on the linear and total polarisation fractions and polarisation angle are estimated using the debiased polarised flux density and standard error propagation. See Sparks & Axon (1999) [#f4]_ for a more detailed treatment. The options for this module are as follows: .. parsed-literal:: polarisation_do ....... True : Find polarisation properties :term:`pi_fit` .............. True : Check the polarized intesity (PI) image for sources not found in Stokes I :term:`pi_thresh_isl` ....... None : Threshold for PI island boundary in number of sigma above the mean. None => use thresh_isl :term:`pi_thresh_pix` ....... None : Source detection threshold for PI image: threshold for the island peak in number of sigma above the mean. None => use thresh_pix .. glossary:: pi_fit This parameter is a Boolean (default is ``True``). If ``True``, the polarized intensity image is searched for sources not present in the Stokes I image. If any such sources are found, they are added to the the Stokes I source lists. Use the ``pi_thresh_pix`` and ``pi_thresh_isl`` parameters to control island detection in the PI image. pi_thresh_isl This parameter is a float (default is ``None``) that determines the region to which fitting is done in the polarized intensity (PI) image. If ``None``, the value is set to that of the ``thresh_isl`` parameter. A higher value will produce smaller islands, and hence smaller regions that are considered in the fits. A lower value will produce larger islands. Use the ``pi_thresh_pix`` parameter to set the detection threshold for sources. Generally, ``pi_thresh_isl`` should be lower than ``pi_thresh_pix``. pi_thresh_pix This parameter is a float (default is ``None``) that sets the overall detection threshold for islands in the polarized intensity (PI) image (i.e. pi_thresh_pix = 5 will find all sources with peak flux densities per beam of 5-sigma or greater). If ``None``, the value is set to that of the ``thresh_pix`` parameter. Use the ``pi_thresh_isl`` parameter to control how much of each island is used in fitting. Generally, ``pi_thresh_pix`` should be larger than ``pi_thresh_isl``. .. _shapelet_do: Shapelet decomposition module ----------------------------- If ``shapelet_do = True``, then islands are decomposed into shapelets. Shapelets are a set of 2-D basis functions (for details, see Refregier 2003 [#f5]_) that can be used to completely model any source, typically with far fewer parameters than pixels in the source. Shapelets are useful in particular for modeling complex islands that are not well modeled by Gaussians alone. PyBDSF can currently fit cartesian shapelets to an image. The shapelet parameters can be written to a catalog using ``write_catalog`` (see :ref:`write_catalog`). For each island of emission, a shapelet decomposition is done after estimating the best values of the center, the scale :math:`\beta`, and nmax in the following way. First, an initial guess of :math:`\beta` is taken as :math:`2\sqrt{[m2(x)m2(y)]}`, where :math:`m2` is the second moment over the island, based on shapeelt analysis of simulated images of resolved sources. Similarly, a guess for nmax is taken as the minimum of 14, and maximum of 10 and :math:`2n + 2` where :math:`n=\sqrt{(n^2 + m^2)}/n_p^n - 1`, where (n, m) is the size of the island and :math:`n^m_p` is the synthesized beam minor axis FWHM in pixels. This guess for nmax is based partly on simulations and partly on the requirememts of computing time, number of constraints, etc, for shapelet decomposition. These initial values are then used to calculate the optimal central position around which to decompose the island. First, for every pixel in the island, the coefficients c12 and c21 are computed assuming that pixel as the centre of expansion. Next, the zero crossings for every vertical line of the c12 image and horizontal line of the c21 image are computed. The intersection point of these two zero-crossing vectors is then taken as the proper centre of the expansion for the image. If this procedure does not work, then the first moment is taken as the center. This updated center position is used to compute the optimal :math:`\beta`, which is taken as the value of :math:`\beta` that minimises the residual rms in the island area. Using this :math:`\beta`, the center is computed once more and the final shapelet deocmposition is then made. The options for this module are as follows: .. parsed-literal:: shapelet_do ........... True : Decompose islands into shapelets :term:`shapelet_basis` .. 'cartesian': Basis set for shapelet decomposition: 'cartesian' or 'polar' :term:`shapelet_fitmode` .... 'fit': Calculate shapelet coeff's by fitting ('fit') or integrating (None) :term:`shapelet_gresid` ..... 'False': Use Gaussian residual image for shapelet decomposition? .. glossary:: shapelet_basis This parameter is a string (default is ``'cartesian'``) that determines the type of shapelet basis used. Currently however, only cartesian is supported. shapelet_fitmode This parameter is a string (default is ``'fit'``) that determines the method of calculating shapelet coefficients. If ``None``, then these are calculated by integrating (actually, by summing over pixels, which introduces errors due to discretisation). If 'fit', then the coefficients are found by least-squares fitting of the shapelet basis functions to the image. shapelet_gresid This parameter is a Boolean (default is ``True``). If ``True``, then the shapelet decomposition is done on the Gaussian residual image rather that the ch0 image. .. rubric:: Footnotes .. [#f1] Condon, J. J. 1997, PASP, 109, 166 .. [#f2] Hopkins, A. M., Miller, C. J., Connolly, A. J., et al. 2002, AJ, 123, 1086 .. [#f3] The polarized intensity image is calculated as :math:`\sqrt{(Q^2 + U^2)}`. .. [#f4] Sparks, W. B., & Axon, D. J. 1999, PASP, 111, 1298 .. [#f5] Refregier, A. 2003, MNRAS, 338, 35. PyBDSF-1.10.1/doc/source/pt_src_example.png000066400000000000000000034704601420247104600204170ustar00rootroot00000000000000PNG  IHDRjυ/iCCPICC Profilexc``2ptqre``+) rwRR` ``\\yy | 2 U +'300%@q9@HR6. r!+ v.z H}:b'A2 vIj^ʢ#ǔTbϼĒZ@! A!ahii "q(v!( cd2f` G1G)I/15C}}sïPo pHYsgR IDATx ~GdofiV(J$R*IZ"RZ]JQY"-JH(d͚dyE$  H@$  H@$  H@$  H@ss|O$  H@$  H@$  H@$  H@2V H@$  H@$  H@$  H@$ Hf ) H@$  H@$  H@$  H@$u@$  H@$  H@$  H@$  H`$(3BJ@$  H@$  H@$  H@$  (c$  H@$  H@$  H@$  H@ *ʌm$  H@$  H@$  H@$  H@*X$  H@$  H@$  H@$  H@F2#q-$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ Hf ) H@$  H@$  H@$  H@$u@$  H@$  H@$  H@$  H`$(3BJ@$  H@$  H@$  H@$  (c$  H@$  H@$  H@$  H@ *ʌm$  H@$  H@$  H@$  H@*X$  H@$  H@$  H@$  H@F2#q-$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ Hf ) H@$  H@$  H@$  H@$u@$  H@$  H@$  H@$  H`$(3BJ@$  H@$  H@$  H@$  (c$  H@$  H@$  H@$  H@ *ʌm$  H@$  H@$  H@$  H@*X$  H@$  H@$  H@$  H@F2#q-$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ Hf ) H@$  H@$  H@$  H@$u@$  H@$  H@$  H@$  H`$(3BJ@$  H@$  H@$  H@$  (c$  H@$  H@$  H@$  H@ *ʌm$  H@$  H@$  H@$  H@*X$  H@$  H@$  H@$  H@F2#q-$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ Hf ) H@$  H@$  H@$  H@$u@$  H@$  H@$  H@$  H`$(3BJ@$  H@$  H@$  H@$  (c$  H@$  H@$  H@$  H@ *ʌm$  H@$  H@$  H@$  H@*X$  H@$  H@$  H@$  H@F2#q-$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ Hf ) H@$  H@$  H@$  H@$u@$  H@$  H@$  H@$  H`$(3BJ@$  H@$  H@$  H@$  (c$  H@$  H@$  H@$  H@ *ʌm$  H@$  H@$  H@$  H@*X$  H@$  H@$  H@$  H@F2#q-$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ Hf ) H@$  H@$  H@$  H@$u@$  H@$  H@$  H@$  H`$(3BJ@$  H@$  H@$  H@$  (c$  H@$  H@$  H@$  H@ *ʌm$  H@$  H@$  H@$  H@*X$  H@$  H@$  H@$  H@F2#q-$  H@$  H@$  H@$  H@2 H@$  H@$  H@$  H@$ Hf ) H@$  H@$  H@$  H@$u@$  H@$  H@$  H@$  H`$=<|;}h8scN/}I'.(}[z݁G[-RK#Tr* H@$  H`T?3cH@ #p7O<1 u]crK 70laUWsn*~? \rIJɈO,*}Yz֤ho۔47, H@veo~3c~vc/~QgY)aix^{mp^|gD?>Mq}J2d_z( ZL6FW_Zh g~f袋N8#å^G;(2teuY'o,Z@kןfw|3#CB$  H@ &|s̚$  tV[mp1ǤAzgi5s:{,"p7c`\$ !zvNyAd'*+)Xrʼ$ H`e [neٻ30fI$  H@f2-c$  H=ܓVbuz^W<)OdΜհX~9S-ܒVp2I4W)^mߔUVY%O &F$  H`,_WI;sR:bbGl7s3 xW)gc ᳟l2mf\H@$  H@L' LCO0a&$KO?=Z}a%oy;n6xկ~5Lɂ .X4x{S$  H@>\ =mݰ ' >x֔xFxK^/C=4ont)7k dF%  H@$  H`<$  H`*r!kMI=q boRbe$a'C7 H@$0 |*_>vI@#B +}{K 3#Rl) H@$  H@S@@2S$$  H`_?GSwRK-\`!nZh1Q~[o5{ _&p&4jlVf?O..O~rX}ǤWE]~%}x3~_L+Yd=Yo6noLXc aysVvP4$ꫯNx7?#|ֳ^ɸ; Vh?=a ^Q SD|7^[%\ /yj{p}%Ě~I mm|>Σ3m Np-^yɲ m3ge k=ow:>oӟ׽.V~ߤطQKe ♯~7R#Pҥ/K(u>,}J+wRߔNtVH~=xE%򕯤ZR;#K(iC>!zл&_W@gyfӷw k&p=Q /|r9; WL^uUo;껃rS7yX7Hx.H*/;qŴ!2US跟|YtAp$k,6սɼKsYw)R[:H@$  H@8 āE$0k|Sb?E%q{W{}Nu>N9^kǁ7Үɧ8ۋU؜N^&Ncozӛ4ds8~/NEu,_mTŁ־48݋8i?nzG[*W=|׎}tWm֋f٫c9lh/NTiD^i 7 [kzqP1nf}3G' zq©5,ޯ)LK<''{~[ӣo/4+/ 8Q7x6)ҋUo:꨾s8w}b{9Ǎ8?eJ >sZll/*䨍8!ۋ.>boJߴ]MO{"^k:9_׋q;~—FEt-6* Փ~Ӈqب7袋V,woT״ ӽSFq_rwTՋ ձ|mT`|0&kwE[}-ԣzo}k,*迭:)o2oER_b҈ U%-oyK/*xf;*aQ95L>QxnU^ϧzjojIڸٽ]v%Ջ4(^THlߋUޚXToJ"#9{ыx/gя~J#*78kFاNt>[k9mIQ 3Sm<^T@LM]ʅxyoyWQ^:W$  H@$ nZ_$  yU$9J#8qRCGZ;Ck@EVUq`5N VVlXJIVN^veMTh>cfj*HV*ʬƲ %fJP=0@Xj^d*M(Y!˪\VOݞf;yǺ =P/Xiu( XbtUQ$āZ;W;l`s}fe-|Y1-2Y[@eja+fCYEV| ,l隄^a\]L%  $X!w`Xyӻ+G[̰.X Z C2cgXʡCY?8î%`Q"mxb0yo]qHik@e8ٞtraE V`9k`yd+3]iu#רx+qb7~ ..O4A; ,` vMPA[ndek0wpB|<~ce q` P'=vmSϹLb9\K7ͨhP^N` 0:;:a[T;٤7m< : R]}[/D%|R+UXr#Vxot N_ǣs衇SEQBE*ѽOrTح-3K E2yk^7UerzjEya*HtYKˊ_JTS?7IUAsT_Z^G>>XᝑSg|7”?zX+!̳͢ }w޹$}Xy mչr`û},R"JsEZA IDATa%GŨ rPXRtU]H.K.t9'.|\-Xj\]>Tn~!Qe$  H@$  % @E$0+0`cmx* .r|Y%9#Ɯ+ E&Cr(+\)]$)GQMsb>`^m>ʰd`>frp9פ(Cy΃ jc*=Dn?B]ML<ժ 7:s@zm2E\iژQBi>eֈ4ޖІpeH9&%c,K0AkR"J("qXjRAspDs%\ҽJ.qb?Fkim 6ZmYc60U^]Bn䈸Ȃ[ ):f .K qy8z1qkWc{. -~t m$0DE\BZ8\* ה\ ޟm\p]N.Mh [[~. iQQ2}Iw~ELT>&VC]  ;\ҁ Õ'C1Thy/$ñ[rJApTJT4I._8-%WVϳ/-c4 n^SʮrبPw;/\4 n/#+q5QѠrzsQ'*ӤѪOr!~EֵvxB?M/9*Un[#ZFj;=q\E%Do~[q=!Q=ʁ7Bp6Y=· d슿6TL];ξ Q騞|wTK6^ȃ$  H@͡X H@j.fͿ2@ aMSC|+;61&$NՉ~y >TNE+2U莡ڟ;Ѭgߐ_.0[@ l*P5҈nB4G8D >OL6&Гְe6NDf0 \rIhM0h,]Ay뭷(cq~w&LCNӭ$0r LpF4!f kVR.A&)M^q-4[KŃچlhʆA;#VXoA傶w*>'ʆŊ# m&QxL /~Dyz~kp衇>;)s'(]UIRLvDwGgC@(ǖB??y:D]ƺMt!— N(r~ Ju.]qtMg)K;[XzuKPJe:]qܠ~syL,1݀?o3\㨣J\KSA←)5NgK(7mڐ) 3Xm։4&RǏ~zuDs*, G}tꪫ*Š1O]:=mJ%b+ H@$  H`NPQfNV % H`n``L< L>Ho#',8πji ?T9 3A7H(_9<(|슢+L׹/j\ͪH&d"-8&?NT{a=s$uIY^ю2 +q8ĕe$+me,~j˪eE ;S?-Vc]?A ms1WQ(wJV&y-ϕGeP[$|}bR%.6E|K_ Xے,d5(Db}74Xm >5xeF( P ɮ\3Cֻz8~0ð y?'?L+8fWaYZ,.H~E4L`JZ/+Wg]ys廡ЖAjH(³7Yjг35 E)ݰ~%%3PBYrԆ Rp$|~ mX<aFnw Ѩ׃O&?\+-7g|Nշd׵<' H@$  H`.PQf.E  H``}ȷfheJɏƠm?1(h:͙x LX>@qz`5G(92́p4g?uq+pUWݷ-Z_ɟq͐$0>3<3M^%Op!$d]t@-pd| jR~D,3bil W_&_/wk\JeJDunQ(a7Oz>%Y $6 ޔ\#-ƪk_ڎʲuor Gebae{W ?ϕ}W JVz뭓.u:+lfC \KX [mURCx'K7tH¶ÂfV=pڤB|݊T[9VW)6\} H@$  H@J@EQ[,%)(sy~\%!NҚnzX]{:W73[udI'y\5\?7 1͎`NۤU+ĽK,іL:^ZGO&2JH@G?&xc?dm o|Re9?(/+q::9_ZՠM_r%;4(yia`Uf7nJn`c^gQMxy|g륧:Pjo(<+^2n0u ?h>HJIbPƒAI,+ܕxYTDyeY~P뒮R׿*?ޔT>;M׏_?)Ì7C~$O~IY*!XĒXVp5QŲe|t纅Kg~$  H@$O`8$  7 g ,`8\r%)8`n)'hw5Y?̠[< ldM7mU7tT^z֥uק7]%/B|"F-+2mJ2t 3U2E H@$  H@TwײI@X׼&m}o۫zի扻B<|`*)RgZlHάq:@"^J 3 mAuSN9%nK`Pn2k&LeeA|3Ӿ-]KpG5Yߒe^{Z?]Y@IIOzҘo~lwm),J"o~xy'[7mHM.bzް~x]۳C=أIh~$;QBvmzX+ڲ+,]m߃֧P}Ї>4Ek[o\0y_N8!j ky}t}I@$  H@TwT u76(OL C(2O(}~AJXd m?{R)3PZA:(XeSU.2pK( eY'a>Px_Wqb %"  uTº뮛,"{݄Ǻe)-[?8C (w!,ۃ(j}TRrQ"(C|g(C֭(r?)G?T=qT/xڙ.z7j{""y}MߜB,|CJhJA !ϲOy} H@$  H@h!?V H@${Oxz{.c&kqWqvdG%Q9TN`=GKjUw?qv'da9yN/*iu<*hC +Á\σ$wҎJ8wy* %IOzu00qR|θ?I Oac8\4CHuCf=G>Rav.Q!'>Q?WZiCB˘[xǘsr>j;*v*|/*<3Jfi~cҡH|fu|>JT8ҤFijƳH$z݌^.*d~xQY"=|TRjL:s_Q:~&\>Ge*|vt<*Ua#Mȫ0\rquɪ׽ A4g)QI#]/?餓"#kҸ뮻Ri}M?ttxy KTpEңFIcP /QQ Jc;?Q,|͹nQϣrV̒&w)ʺJӎ| 9{E$  H@$ nZ_$  Nq2eecie8Hg>/K͊o9ɫ[@klsqZ<֯&@Sf%4n8V#Uq9PtMeX'B gp ܼ"i&r鲂 {u wxH+|YEK>ִa=+[6S݄7[Fg. .l=(_ 7< ׉JNMGIl| to2xRL2W #&TBydŗa:}.]p~cj/qab9KŬ8S;އ IDATv)]\QPaQ&y(QeWw_ f(@ԦRoP2OH/(ӠQG i87w"7mQ~%op=:O7+lwMɓޛ2~YKw}wבoxݷ2} ?яR~<xK^V"ca?O%y睧R*$ .^/NA\p$0c ` ,wӌKfL$  H@&E}̝$  X){u X93é`-fmVYe4Ow%_>wq_J2l< H@#J}(Ȩ$3bK``Q1̑j1$  H@$  Zн$  .\yC`%˦RMP=E]4`^~k 1 H@$  H@$  H@$ !(3$H@$  H@$  H@$  H@$  ~^H@$  H@$  H@$  H@$  A@E! D$  H@$  H@$  H@$  H`PQfCK  H@$  H@$  H@$  H@$0ed H@uškg/g?99㫴n$e+;sGHOerH?i>rw'?b3lnwq30fIk./{$0aL8 oH7)ɐ8¡7`@W$  H`v/?xSNI PAVf?ߴnH@TТTP4 H`À.^鲯jawLe|8jf![~YtEgW!-XJfσ$cpW.,|_ k<$07 u]a ~{Ue%\zo~&.pUW/M~pxsس$ H`6Kx9 X V=q]D~K^~7< OAJ@$  Q*k$ !??%}[y_S$0 )%RKc9F+_<%yɪ2fu H`!YIfe gqFX} +a]wMVd|/  H@TxjE]f"]Ӑ$0jx7b/FL dp/~1hIN$ KxF8裫^~վ;$  H@sedN? _? (\_r.pӟ0!ˤ@\wuSO >'%[ouXhڢo}[kM+y'&s@GY8ھo`y';k׿LjOi?A+÷ÍX]xӛ4~|? .vi cVw +b@ӟt:ԧ>5li/˔aX锯sI|sY-EM74qޅUӷv[OG=*7b}l_sW߹'sЇ-|MB . wy4=3Ez7pCvmCv_*=?OqgB]w,san>,c–?ZF;{'E/Js;&?r~p$}ckA?_|ũnQ׹ꪫ&~$җU0.6d0."e{{=ALQwG6eu1p@+~7?$  HpqUN>}*vYSd9m m}Tm tW\n~Eǣ-.," 7y ALGKGe!/|{lHo}k4f8 0# ^s5S?Y$0ϒel (2.%7m73-׿5ᴭna]=7.mG5庌1BXyX*y~A]<-K;J[M?v?uRX da1aRfYƪXЏ@}d^;cġJk<{}h#NьrqJ|EpJߕbO|)i'c7'#cȔ0vG](%1C8_'s@tRN ba` SÐ1-"1Ϸ_;Z-1j' H@s@l H@@%E31h/*TsvδbMJ'~^;U#:8z;c~}}CU8\.4Nn|va8\碹*NT;m}4N^{QQ?==rUZgu֠}`?&~UzU6R{JZ\/~зz޻ ?zs6-!ly8Hы*U?)Ջ֗nPn8PMyh:ƽ'pzGuT/HrԾmۇ?^/Ӌ{;?{q"1q`Rߵa^;-u?k||{Yq3Q wz0rӴʳ=ڪA'{Qu!%UQ<hWK\X2'«plX`^\ѣM0Qo{q!N'ǍJcO~fL{:άƤ_]jUalt/*V{^T1>_^}i06W,<kmc9c*.yoO~2GŅq*Bu0_.$6ӡV$M bRAM6KX&8uznZ-GYyVi`#B`Zui$ ʝVZ)YL)2IXmVnpZe5 R . ]w5յX,i4󪚨6h:?p V"hS=e+tg $z֑X*^)7s饗Kԍ.lk:0Sϱ}8y` uX9J.!MV(PN7+HBzX8٠n:#:lXJVX ZJj, a{ x]¡VUXFRۨtK0馛X=fcV=MDX-a+5Vᙆ+xv"H9j Vx&)R]qסf]xzֿxp}=VK<2,`:\Og߼XYEy}_J6-VQ.aeVXEϖxNK +1ZXYJߏ661rMʊNVcN'2 k!'Xd;RhS S 5V~ltvΌaF 3<3oYX d:#O|pO_q@:d}յȊ[6f|[&Hd=lƍЎ0\2CKJv66 [uҤ$ p7bvc \/lVgKŋ2^>"RO[a * }*^ A`1)VS{ߛ&_c<+Ռi`I R~[4IThZӿa<>$Xa(S-qQ_r+ݺqS4 4XX.O_Ų[b}l0LƱBH8蠃.7N09cیFF җf1*0= HQR¢ |e\2[Tq1㙠.0^Hqox&y>O-CMB]]eKE_z(Q0%gƗ}yFw T$  zH@_I;v8;c` vk8V dk*c5\}d'2Bi(C~@;e^9y^줏 Ï629 \=#nݖe*z/|Y0;ECLh{+[,Թb)!7䡴:1Jr˪62Xa_qL"S\*<& ?R&NJk,90+@O4,ɗ^4ŏoU"N 0V^K$0c IMh({l4N$eXSiGe*.+g,84&㚬ZwYtRKʥ9{cJ0ᢒĘo*,qz;[딖`hכc/ cd-0N6.M_,pm'yl1PO&];Ue_\7UރҢ /K6ǢW+iL_0N, 1v\iۘh=%  tQ$  H`T^ujzN(W t9OKY'Ƽh]SQzL=/];,+f0s8lMuoo%cPk->)S?ʴKLM&;5Db6hS^m]zWVR JE\ Ta >Q~'*eCI4*c MA LeL\R]|,2 %g\64`#lnA2(W%mMpD-Hs()$0Mws p)M.J%w*ECsy%qgE3Q1FQftQ1J(C1fn G=S>b֤ۘ%  H`V(аh -pAQLNG+ .k]۴8,Ze\&Z_5eXL->Ϸ]5⨬aeEr19Nzv9E}b.ө(r/WF!7ןr pw0'c;U2ƣr!T <6+YO072^EҵR/D]6EjNEx8)ꂲc\b :s6}#+T: H@X[{mH@@?L(f7 /x )MFhD9ϥ^ẕ>SD6jH05? RTLLvRW5 fEK\`t:1qA0oe Rp*!̈1q$@sp?Dũ IDAT[2L𒓊F1-$]?Kp+~DcԙR8pQs 'TA11Nb9~9q,Deq6fm3S#|pq  Ds䆣lc빜[ H@h'}λKudM]qaF30+ˋJn֙^)W\J#UGs99$e<I]A)|tx'-2?򢋘Ԕ&]:v\![6BH7eB(ç0|CG,Uy\VT.sMc&qyCL'zqJ{N<|Ov]w(reE38>ߎֺDX4[ Fr^7hB8dm0)gP_qz#>o|0H@p~!1uΈw\Z՗8Aڛ 'h|_5R*3aAs?Z | Dh#HCE@a}-IsP_-Z>(19 3F2鸕$ Ew=08W 21.YAw!іf_i $KfϣŒ-1*ηg9cDO}SsE7.ǹe1?'{_qϦb~~OUqa55]h/|ӟn:=cÌ}GϾ}ƥA–WA1M么֎3;W ryַM.5G%0cw=b3yryP2He=$ϰbu&smeHN3λibѰӥDCpAky ( ɵ&vӠ" Z<3-iVc4I#_ CcH[܁ƫ(À+ .0cT`\)e3{]$ Q"iyYaw{ng8ж>s aZ=l3]2L1D9ozӛz % f畭Eo$Do^;Aݥ[O7( ˬ(+hKޖ2q;> J9o~;xɬ.fn%  H`v`2&m:蠃R[,&oF%JK<(}z?Z9^Ae/4lئfaR9&/XG/xwy~ePrTcWX}[淮Uo H@2.G H`(;LpX#G NUW]+W6?adnT<0asϭ.Kg2 +L!8afv6|\4r袋2 mdgisϳ-7+Ap?QW1eSo H@Kpڏzɫ.WuBc*%겍a6)ɳ1mn;n&=ؤ3 C!ϸxO:kM=YwFq&.&e)%vnU{>;c@ye=?"xwr|o* ;yᔇ$  *̚[eF% I pgn4լ2EkI.Y&s?6>փiVy_,4Y R֥x߽;q@F˄74|r^~zÄfܭGhʸϗVDwo1}k7,anƈo1ǭ8p;/o36??ԧ,tl}lfr(Tl@Q"(8U|zh:4i=d6ST-jD@W& s9:묓czv]&XC`*P.F\WKo5 :Xb)V1?K٭x~6 8d%elַ]f6fг>č  H`O'PƥT }p.{ژwؕ": }5BhQE"Vq!y'%&8pbQ bo2iQV#gfLZƕ$ O3VrQl{駟]=Mc $7Q FQk7(0EK~+(.+* 3T[. jF2r>O)e._Օ0,ߠs<˯~+W<^ziJDYW.V?(s, mۤT|}ES9u+ H`&X`&gμI@IVZi>˕ <~ 6ؠUIxuNa%m0q?WYe 2ի2.}loSDYf:AyBNKhN8m 3agVzWWM;|o= nuKî=7usyznyVǠTƤe^3 H&n &N[sra:%:ٺ﩮*CCІd)|̭$  r-78UWLưK}Jvs(byz(Ͽ/HJXVrݡ]_6YfC]p\rdfDx<,]#lU6TΨgyP?`WOQ&wSy4mx=.G;*/p78S)Y94s16[o_>ej[ݮUVbwEVfw=*)k 򭑭7 7EPQf啀&LS&3GSb2FC|:]W%/yIWsyНS*Ee_*=4eŕL#n@YUnaڟ/~O9ji /:G0mU] uW?/yrkŵg5z)lIu> K+b0u=^)eW\&OVt2S8rJ0śe5̻n%  H`O|[oBƬTQsÅ/02K,ȿoگd'аN'ۍWݮwft;Aw|4ltZ/x:bcf;ef4<#PDƑ?Hm{zhx X:\0l6j9;"`6[CkZ?.26$;Coqf-w} %N;lq7ΉRj|;3,lQWT@!j8}wn"I};˹}׸\{!'8ѯ|j;<~~۶0tbNk/1gTCډ^Ɯ.s:Iz&Ԫ@!P,PzIKN6׽0>яOpi{۾#)s.t衇N]<]g>sO5# oOeh_uUs^!$#yڋZauCX+<~09]ȫf] ngl,m#.xTYd-:9zqWz=mQd>O]~bV4i5 BXBԅ2Kh0*BX.G#O}SS;=f]⇝\= ^6uD~[\\=*.]`HN\8x|(7 Ox`+^P;#=sx4ztAi?x C"Et5_D)) 2. 0^zJ^30mfznX:{}C~cq;fVҳ.NC-^O9lIc9sN'ߣO? [[-fΛ?0; yl3`;*8?w~yWQ!PGwk_9.fp,?}]fF\F12s|iS=77^ wf7Ʃ6Yun+\Ow*}i>sO]IsbhYWϓYJ :iY*<{7$b`nlSz۩#6\Kn)fWbm=0OW?Y3y<`R||vk~0'TmOB<O1sݍ~Oa㈵߆Cη gyr5"u7i"7OS۵8sN:iXr۴ҖJ!P# B(@ڿ+r+j}_^ѿx%?Vxvx~Ng #b(${ŭo}Q MVGqH?(H#b_1_9?O? VrttM,?0~¿3dN40L쟏_ഢtK{>?O{ӛ޴"y/Y_ѷ5v]i#bW\җt$]^̰/DW<1 Ɋߨ_ذ B‚ͯyXƷё^(3aFIB׾D^[ジȶp aEy#c#xjE,ڎG<2V̹qoj~>?'?>#8n&s8ލS`9GHh=& + @7 -{rQ]i_7_]@!P GeEq5?3\=_P}$r3~N4U?V8mmJ8 VF9޿aF!H$5{y#Hk%S΃kJ-_8]+WPؓ4̜/i_B( 9|LN}_\11ە~ۮ}n䷿c-LkY}5:n^/<+F/]Iߜgki;DYo"=_x+LٿZyZX|V8/Ӷ&L`8aVOɑwΙBa H&ZE7;b/ޚ)?i}v4G6/}iԗ|8'._$27iM{Vmk#[g~A}JbvmdK٭|̊\aJ0?ɵkysHf~ޚ N!7뿑( %@=Q?@!POOI=AÝy hGpǀ"3Q?rr"sN${ߴy93+?;9m.SA IDATŠ~!b\U{o/$Jml4- ?m&lLYQϞ2ܵؔyt׻޵sgʪ^帗oo۝lA_`d⏝;TuC<˜d8{ؽE Ga{s{֖iiS7y,.ԇCy89G`υuFz,/h1_ pP2E=cogT_!P^<3.$\^Ecز;%.>*l9|Duo-ޞ|v~乺[-f΅F[(f( B`A+~\Xco]k}q5/]TB@l7&ж k\D\bk 8sRXtudYuyx;v>skE9?\ v}\ okG\?uiXKvn1 ǤU%S@](sc!_~ B`"`S\gOlsz5kOX'wni;|+BF;?wh( B( B( BX x^1(>ku&z',@!P/vU( uݟ3!Lr5y͐'c<]I[c5d** Շ<ڝr[T@!P@!P@!Pn<Nf׶HyL]$3 +^:.nxuxQ!P\n>YB( pG?=υABGqG ;`3yd> 9.r>}ѝ{ B`!p&w@!P@!P@!Pk^n|SkqtsS',3( B`A^ueZ@! <~l*;ySxab=\-Azn]vY[RZy;~[-Ava3.wڒҒ%/yIwAuogmk8NXv/.nb_6v/zыD~_{K"%K.{[r!kKJK"}ӟ^/x֖ N;sg-)-<>Otկ'< K"%O>|ͻG>*O}SmfYŽ.wW]uUW$R~;9oQxwqú;xFpvwӝ ED+_ihv6uN Z~b^z뭷Z}BMV4z BNW/r){q -y-t-K={Bcp??tQEmo{ΓĶj3[/9<~}9@?qw9 `\LJrɤϽ?ݣSO]q]qq|/Z<kųZwcx}C=+:j񌖥 N]̼ȟG.jo )Sk{n2'r>yC9/Ѳ^);n؝wycT lEя~tw.5`Ewfz\^ B( B( B( B( B( B( B( B( PfJ( B( B( B( B( B( B( B( B`u$TW@!P@!P@!P@!P@!P@!P@!P@!!PʬuCZ @!P@!P@!P@!P@!P@!P@!P@!PLB擘+ B( B( B( B( !;ʫw`V7_%__{ܤtf s\R@!P@!P@!P@!گU6_ @!P,-v~hqa.ku;S[n7^denvny[?cEX z=1Yz-6px2b酿fuyC^`<޺̳躟/yOnߟq,(smdm7n~ {/#pܧjP2Dow;yFC~ЃmK;en6Z/w}~v,Q뮋o,:MVNdZIGgqFw)IG@!P79mv7^ y'|r?{ԣ՝zsQ@!p8~?Y&eڋdw{naw2Eb pwtP~uoy[dX$seugyf/2S@!PK_mn]~[z)[k-֔J( B( B( B( BX5sW?TIf7dV . B( B( B(Vz*CV @!o~yǯ /jl.M?4q[~Nw+>qLq!1%bc!~f̊aZ\љew)yMe!2K9BroeZ_leVf!2w8ZdӗWU~E79iRZ}ERG\Z՘2/vO՟VvZ}6nytr_CpImٶ}dk;i;|iE^+z\6Ľi2ڝ&;t"Y>oV<߿nܟ:.͵^qMܟe Vꮹ&+(\ט$[\#Bt/y<mqM]!2/_lN^\_Y6[oANPNF*xl#ń`ƂL#Gur q(]mc7؉~ƕmq7-O)쐇>;7v2#qo<'bK]ѧ(1ķ->[|'O&rlFt2ē1\ <iҎP?S&طBWŷe_kSgLwr0"O|EދJ?]rrF06~h?q|FȾF!G>$yqd8w'vɪVbK9oO0q-Hnrr;8O~d 7]kbW%6|&c:}|CbKzηs -ɰo Ọ'ӎ|C|KvgdX3BAG$G6P?Ē+6mS[y$9qǧxVt3F bIlmtɰycˮBbwݵՆ ˯uoٝ3s;_tOvk2O/ 6rbϱќ &3WqG_ 7_3xCVieKpqR=v|/t|';gd6Bp#ʾzWp#v??wݻwq/Fm }¹}oYq-3c2 }juӍmucWNnw6tz9ĕU!ԅ2 Y)rF_>cɑE.So1)a^G>?,nq͎>vJltҎ/:g7SȪ/9&Y 3,I<[(mɈ?yxW^tIe|%bYpeQlFW |Ĕ|@"k-G.2Gc<;xd#LF^N#1C.}iG >+|D0 tx ";|Ŷ6@;F."GF7吜Gdbnb/1ĦXmo{\d#ǎ:ɗ8o0ϧzg6G'z6FC,{!aGF/%^pV^bQg}^đXWy+Ĭ?[?c`> e GP:6"o?ȟ~eO (q[6]t9;>sd>/n{?ãć:M=u-^}ɛ.bq9}Jrr9D}pSw|O:79 '*6؊1|x$b[Be%%e?/.EIb?vcG?;AFm"m1 I pӏc\";-Ã6BCdĔاďXDM]>[ѧg ֯|bo|LcG]l䓻5]2flХ9@'z+\gm톼n?aݳOlΟ\~Y/}s]xOH^0;?yG6g,ȷcOk5z=u>fҕY#'~d!6smXM,0Zpd#"|d5jGV? tW/Rd-O'u%>#?iþ%'&&8F⥓qo_E|鷍"N@U3g vO/o90W-_tb]m! 2ڈu%/( 6[,">~)|]ر)o6Sw8@dR'KWmŜ"o`c"$;b$GO/'+ C}1OȺ{ıf >{G|!1ɾy8;D=C7 [ؖSbxg?y_ 3(Ǹ__bH]rvs^s/|_'F^G?mi+(Lm! E6 _1 }g nɋ<_6DQآGGOA 'ǿ\谡/ȟ_!tou!{sw?A.q]^9ÊEpK._|À}mƇ1PGb'~IJ6ebώv?2o2#?^q'sBXbV\n7UT,a71X r\ [k|wn,Ww^ #zsĢB( P<(V3c\}Ou.<ǂ~u_;:,?꯺~>{ݗᢍ-ܲ}ݻfy{ӛ4ozOdп0RDb0 #.9'O&Ė< iے?h!-Rڅ8솗Brdq:\JGHLlP?࢏lWrL|*tl+,!/ [2g,Ȱo!0y}vCYdfNl&R!'39rP~r`b#@<#XjC‡'~ⶥ /QgjyBP;>.a7D>1CNLѫt`|W:o~J |k_}^'i߿s=ŗ|;} 6-~c>9cN7>ۊ ፴s~DآmuB!mdC3WnrW"N"xgSȰ}O1A.rTqO쳕~rL2o nz|gO#.\Mv##ԏG޶%xF%F[lY;|51w&oCn_GO=dI _KGd}gM=9&O~W}0#?O^`=c-E)6k0.{>"@QՃ񟘴;ͼ>.|ӑC0'{Jro9񇮱b |;=dWu~!fv+tiG;8|4d>Q /c|aXsPrTv6Y,}"mxȏ [|A~xtʉNɍE]A>{'쳭gX'v{6U42kf\<w jzO=a+_p~`?~c_ l|N餓%ϝ|O|bҗt( B( B(<uB`@(.ɢ]_97y" (s饗v{~ÏYկ^/̅k׏݇>a =yBv|П'v)b. d𵘆e /-/a䲍زPI') 92OZGb O;VJ='` >OI6'rٲ"Ͷȡ&mZ'؈#o;NpQ JX?[ޤn]voqCqnu)Xqv|#;v@<_җOO9ڤ9Nޅ{B .Bg?;F˂2k~o/(g|(v|Vc#":[l_;yDO.ȥ?q8NOlXH->Y[n؈WL(":._Af`;*t2-^+,)orO'o)SO?Ëm|}mJ^~d鋽ħM>ƕ؉];?&#g<;䓇1{f!twvHD z[:G>=яWgwo{Fl2OsәO}Sݎ;8o+ b!q^ty{^:ݪ@!P@!PE^?eX'pE+}vmpΟk z?q{ܰГ U]$g=kgpGԓ$}"O' }mCۓe e+wi J)r̂~8nR05E!;/fѐ|vN]J+1EbM; -$Ys7h{/y=q9=!%u;B'w;Ң"5ܩ){ }>u2b&+7Ol%F ~C|^Љ>'zrmOۖ|d>Fg<Я>l'9~Jb;F'1> -?cJ=HlH6Gp߹lCG &vaWA^vdmّy8}@m['1'ľV1}sΖOߝ?p|fqY;\-Nrdc FQ/`FW>l7܂鉃?=.bUAlK.?GW[#mX]bm/d#(⃓z|FFLɃś\RĈϦ9a2C#!Gq bC1co"w𺝉 OxpG?a>!'hn9wr[o}ǯ뇱vl^1-'mhN8aY](#fs[eߎ+r ıdowe-tsL`~F~⤧^<ز]2ϼ$E%O,K|jO}uD ɕ~?>Fr|bx!ǻ@GIgK7dVC;qc~'uғ^r՟䏂-g7yNr;}<1 o0g|3WŔe^E!:t3q7zāySvV>`+yx2vJg H2&lØsJ">a#WWo\l)od˿}"1Ck˾+~37zF{=Yx)qB,rzt)g9߲;>^ ɘccc< v7Ixڌ}[)* B( B`)"-*B`#?]$cqĝŸgOz׻vqG~۵p\ 2!?l:sRؖ,}g>48t/魅 n-![#ckB~𑱨ņY-mrM/M|ҍ:C5v'.1ؗ=\̖x;!6 _[p !#|u~F6f# O>1TO|rRO^tœ9_H ~M *ዓ=+xo쉁}~ >;E0>2Yy$?M?eG u<4wk\Xܒiɸ~c\l>r!6^$ޖJO!|<9}lgKccr'ǃ 9חc,YNrGS`ŧv9GVWk+6.31ß>>cmb Y$&&<„oV>>e| P !;wV1-IVdbOs0 1^ ~ЧGb^EŽH; ?qG^'MW&O9`$ S%Cm a3o$21%€Ⅷ30& 8ݢ =bg 6S8ͱJ+9ҁ\E&cN`>y|;qEwd+; `yJU7sX7 |}X= XW/~ҏecc[vkC.Nyzvc%+)7[OPvBx͞\+t{߻'>1}y%ء:{Ѓ4,j^ pi jާl%Q.xi?bAv uZ/| >a!r!M'oVݾ0ȟA9K#q:QXRd?'Y՟5}tɱiӟE6ƿz x-}tcC;#v",iiul|I.hwZ,0F ?|Ɵm <ŀTet?m\b#}6K i|kka|^ ^Ɠ~Q'6E6ӎOG7zrO|i)}"Y>#F36|~V~u-m1%I\CO^0bVp'^lےN7cvldИЦ6;J CL0٦xF;߶ }+r#bw"钓{w rL+-b+m3!1z8h:%s~rs.ieAc^s׹r!loDnXB6-oCѳ}ȷ_biϡh .%Ǫqgā_-b/(G= I'_Q_bH6я𢯭>6I8cC;#c݌ErP qGxiG'eFmǟ<9qUoels<䖘c>m.c(Ŧ]6ɥvc˶1Vb ~Ml9`^JpH;7/HU.Ϻ!\,6c|l/s*7WJ_GOIqrW*vE΅˞ crMl=&;y\Ϧy" iv& j. B( B( 5@Z[xB`kYTyc;Q2̧?92w^w7}wz} _{nm6K#^o|#%ৠ,bٺ{hYh⢭[,c,6رp';ز;s71˝lXl#_], ݠCl3Y`(1L/1ٲǷ\xnHlk[@JaϷ:G6Ց:J6W J]l'ߴ-L~w>$ta{m6gL,ҧ A4r ـ!$g_b5~,ǎ-Jl NW=KGĩ{#6SOs\Ȉzp5Ė1`yEG_ |), f|ȉ,ɇ\XM"sDžh\Ssa4On&%an5ai{A~o=b_~D-xwұ}m#dCOtWĝDby2%6ْ.$_;A\Nӎ;`KbO,XىBˑ=r|(t3fbX)8O#JnƦd6YvSأs>b->9|qfà 9>$FK69!:dq^x'J[l9Old??H.~' 鈇}}}tҵoؚ_;kK6Gh'nhSr7)9|c3/|c}Mx/whc~ Y?t-˾Ֆ rl >ą-}hѳ)G>,gn67} Gۢ$z?uVيG>mNⱯ q'[>PrY) n~Ov| 32_'Ē|ïE]-]y>7g|c_|\iXr-[pHld<S [|y9XW |d_;J̶p0GcAj;{b|ɼa3s%_ V0ɖ҆)ib#ն߱od9!< ]|IV\|B\}[:|"uc* %.s{1~ljgs1ej#ȓe;v%_JgwL.Kx\(18 +|e3ف?$G?8afo}[>c7QP9Ԉy]E>ܬ˹,9眕 [[Knn>`e7{dTWr<}}A?caC\TbkOBtLgq%~pl~+$~>'HA6Pnj|c.y $w~ ^;X?`-xlӳ]t\nbAF6{(v7/ .qjOtƇ2+1M~3 [ǟ -lǗ~ؓa^bie#y2g.2'3V|_n4(q>dc 0>?Y[+0A|ta|#6qף˸廕)vc@-9F!s􉗍~`p;_;M/Y׼ۼZ+dkU1!aD>㍏#L]ގlus7w %6:~grl4fovxwx;Ez}h,'`n-IA Y~Nll fpO]?=؆FSlLO~'-m1Vb# k1C;I г%vċ v?ľ6-җFA6ZPt|m0NbH<6-d߈>oc#''⯍Y ?9ѱ~[sFN⡟< }!^$/ON;r->f)C?ƶme/_.^cꃓ ;^71?/.%v_0 CO"rC]I/lsx/Nݦ[d[^cK<6yI \KgݿniE2ǾBv,Ł$<}ɱWw V7yǖ~Ճ@wr4ɋ}5mkֹ샭 .,m_?)@!P@!PC`/5<rgf;P#BRO_Ekm.;wM"wIgO.ؑ/ Y~b~ڶ-?aE0urzh?nABek_cUl bʢvȋE!qi']bKȒ>lVQ'/Fr ^t~rwxA>rk>6sw:]ې;2WIƜN-^U7nGƀ."-A6qE^怹#b`Ҏ'{ 'd$7ͿPF-P#:|'q!XLn Y%%CS?쩋S[ɣMm179'yiY? s`o%^zb$/6jym tB(ɋ7CǎNjxb=[vc#O^ Sa?<ɗӵe }3۹N|dlt+{1|-.zd:YvKK ~aDV]ujO\ěɖ t!v˟O|Ċg,/[rIVI}˕מ:?/Z*s3y4b{ܮ7D5ESU7wkےe_[l1ٲ:ư~TG]sH9mbB?iNڝ?B'll،wle CO^KU FAbNlILLtr0?Ĥ8.œ#uOl5Oؒv7~3wǦvc_+= G>cug\쟶de5OFlZ ɋصȸ/bw/[3cb ;d KM}{tM?$9dM>&7zo [>؋?ȓ]'yvGtSfSXؑ8aoڃ}{QG :'3Gp@z-Ӡ^{w+z|SM0F61Ú_qC\ob+cc_Sԃ*UGr1l(dP7vxDG3c_ KyԜ'x ӟx`c$׾d2-YSkBW_ <)rIkRr7Q6K{:G~g7Ygig}Xn8>o[o!P7Ӿ@](sAEPLD }fȦǷ|NG~_χI}_w1LZ-,Z#g,jY ? Ot-iPeA#dx跸kΣ-e- tcЗ>}+ԍ 6OlƌlP.r`O?;|1Knqџq5(\_+9e1?e列<m'/Y'₃2ӓW,Fea;p 9qE  ί"n|6ex@)|;GY%7E^e>и_9Wd&tE8H珌EN F>x{vGцȖ-DV]y#?}#}}`0pOCዅ3.CA pP+g|E<2G=ɲ8-,9ےo!⇬nwlOױU,)/Ú@"Ici֝Ï\m\hcZd2Nl^c2Xo}b_S{>՝y ڼ :mlmy~۟v~s0Yۯ/}sji{nV'|#MO1ҥc!9?b- xrgi;9ЩӃ E11ʥ^:ɵ+?lEK +>Ŧ/|cy#vRv!ΜWN:"\<_7 +q#_'#$w8oK?{/~5_˓)ɟƗO1 Ÿo|cډNd!I<ԧywsMz97y9CG>է=%/r~>r{3n>$NƗsq;3ÄLϧB~[I2zty79b}}718^ O۠dzkumğ[K:_ڰPW)}|9UkLbo5A{O#W2U˘x2gbȫG?4&|?V'αnSʡڽs4_B`)#RsMM&՝S/rJg>sbkb踘@!0Pf(ĐYdE>!og o?}#cu՝XrBbq$`Y#FzS6(e_t,p"2#⳯M!}m;,f09~x"գ;0"oGb"_i'&rmէL'[#lⷅ,}N/99$Ȫ#mzM19_{wlSbILR؉'v}xOm$R ~O򍽌Wte+mfNA?z-_rSџkZ?@Z\Snqʹ^+[mz'$ڵɩ:Fef /cS䘓cYdcߖأŠ>fuy&'og{ aZ]m:b %ؒ'߫i=xOlZ#9[ m:Jx_^?}m/7<6 N!mStcΫQro+;|qFL(f [('L6l}qG'y$Q}di㤇їՖndzE6Ɔݼ?> v+\O8l#G[_}!oE^=6|bŌRO(9~{mc>ww/=㳧vgo۟).I=CY19X<(ٖ,~6ys# }blǿ{E68'اMO f^?!oNxӜ'ˬtLzt׎\ؔg۶N#E?}ѧ~u VO!F~xwAM^eNK$gqO9V?~˞qeN?k[Kk-@32C*,XTZ %$ A@ɺ2 S E{u+y矓Z콿;<ٿtŞ ;es>+0+0+0+0+0+pU}I|Ҭe[ON/ۘYYD@y yl>0}QfNp.{D:|+=S6zM]z_߁CānO,鰌_8, C55vhXozLa!~勜 4O%wP!/[tW8E||!={W/90x†e.}dLGrS=wO\.⥃7蓌Gn)ZWqkZ.5⛿Q]Sjcغ=F.xh\2qIv~ْk+l&K=Ogg}.u/_-@'X. 9 ᑋ_,pgOM_O` $.y_Zv|Vs_ wL*{hϬUD^܍zogGgn:O#5r]ۮr܏uO{9 +{0/}ʓÏ{rtǑGm_zGי/ɰy% <}Z?{ʯܻ%+yr[:^^9\g ]<7VEpZj+?ȼ\/wkW.֗.>0^0/t₇Z۽\D8L>Գa#jM'bf(1lSdXo>>F," ǼZ᱁#.#rœ# 6fN?,{{,{K#jzc6/m^y}O?}79<7}Rת)]pV[6|5F?CdFW+gl!io`GUc!CǟSso>!Fu`=_uz_xʖx5(:l9h/ЧS-x˕C݋S|5_(LtvL1~<:046j\>%^.Ծ;?Ou@co]u~|?Gs<+pENr"n58s0Ō}V`V`V`VU`~QmZ \ nQG'>=9g|e;8~=Jhj;rpPC0zt:`w9sH-b;lR3gpU*Ρ}PA&>Lk _rGt4<$\2HO_t{3{>˟*wuo`ʋ/Ŀ5E[.ˏr{?r6"X5yqM68Ԓ0tUf|U=ְg|G}|k0g 9wt/FG-bSf{ۭb$z-oq9Csݽ_lW?zkz1OKG.!'Gz}ToLK?֠au|\\C騳\ր{`[pKpgÖ>Fק8|NZ{(627>ùrQǸ?e:;DVM̑TpԦk8ٌ?h??߳+{ O/}iknw7y]sI^v[$l'%Y|I3㒨Ę+p șYY-8S3\?fA~:r9jZYkF^,lɒiOu|W]OF1;*6#(Ã[3NF<6^~AèN7.| 3>xtp9zD&k}ՠ&| 2qh3FElY.P<[,&ӅYNfk/Jk$|꫉kuu?{7grcޛ10{3]+3R!rz8&gza`E:#?'Q^n_N/ɼXMԽ$Џ^+X|jŬ;SL瓞19xS3aM=?}rTݒob5 وI+S^GǼq0s$~5|I>?t3'^Xz&y6V>X1;:  ^bi=eى)b}1#=DWKQg 'Mv2ߜ~ ~9w=х[>F֓. tvANǷ( ފ?۟}2IFˌbV`V`읽o;g߭}ٟݦ <3F駟=?{?9׿r=?Oށs'^9a/O9rp9OyRaI79D<2 {\c 7sk5N&f9Їz*_[wrvć9D£_y|!7(O/ݓ4&.? 1˃T=(>^r-b/skB6|i֝\0yulů5|j[vt ypԯgzW/\[LwOlbpO <̓VK;M]p:Փ%Սjd-յX舡:Ǔ#?I<Om:kzr_,}LZ=r<+^5Zէ\f?9]'w'>8`Zبx䚸Y3͇[o1 Mvȵ l 3|a3ʦ8+` z{Nw]w>bǏn swoxυN;'9眍s?s;ܾu Og׋}ᑹ{Uz뚹U]cu:dC/|s>̗{o1/ɼ_ۮ޿-&yf,W3GA^[!4wܓ5s}^odbK/;qZ;^t'֫x|CȊ1?k|Mc-؃|T[M럦1X}jQSd~bCɭx+9iM{o6_t51aǜòv֜\Ԛa# kdOÁ W}o|wsOrKrz_z[' |[|i Zq8gxꭩYc"ho֬zY^LįbWOl\-ck_~䓽[.j/[XxrM7]aGS]^oq7?{^0諗xa5kK]{]tve_^,ޯ} _~&g=~TdMMƖIMGŠt[Cȏ/*aVzӱdlÞ1c O`+8/X'冏KχFt}geLUKrdbǟb^/>ilir_aX59cg_b+r.1r?7n5~rח7tբ/v[d|' #6}|]~1{/DO `'Mo}zS$kvŠ"D_.ՑيNCjo,nZ a7\c~rlu6gi,bGNZ)b5ȺU{<={|v7ҭg>5yyxkwy~}?)O=#}]Wv͹^'q_p}uOތߵ5e`\l]wEo|s/&<[ 2= \XpKtڟr_'ؑ~wŪ {p}N}{k6|yPu,'~zXl̽& W %.kѕ^lؖ_{ #[3\]"~s>^_Ȭb.[c5F['Rr-G)!F$'æ!ٺCCO]kbao]SA!rQr=x-~b,g-]qS]Z{us-Gok>pgX5VϗƷ(O{.%x0Zru,5rmU7  _[ރ`r]ã#'$fϘM^rcOk#|K l뚎9~}&jjL^dݻ̭v<뒯aG"9ۋbuEޣ=FrF'Z;>R5,_rn}YǑ_ry-F}^M=h;moO~G6~߿ <YػIs/਀u0~3K3ڗO@0 x[; \*p' f>HOdyK_78zr!M?|uwng>s938??=MK*~w;ɛ<9OO-GOwq?ggGl>*0/\~w~g>Shg}CW7 :jvޛ/FP#YiGuHF'eKħ9I/|Dt0ʖCQ?LzG֡9~c\Q_A쬅`ڛtFh[Wdxls-|>Cj0gV9/ڨ 9]vPqTs>˱;ӏd#\sQe'Z5V~>H$I3NFI^aƘMV}c~$<_$NKAScI,6Xa0oL\WZϘۇٺÇE骯#|uƞ."Ga[;XC:gG |FekX5y6#([Zl/_pN> i/=1}rg򶷽m|}!~_nFϽ}/xތI'Wa/zы6M_q_IsoP,r񫀾}cT ;,kˣuZ:ӛlw]9Y۟^$9g07-Y$\]x042Xwԇ7c%Qul^ _EW=v+O|bzYgn>,u"JBR/UӼJgWtN-/=Kξ>/^&7Y4|Q{H_ȱЇn_+ڃ~~c?]e.OW "K3Wg׽><;>T3wӝ{ze}{&w󝗗eۗp?f޲>wdz_#ɪ V9 sOy:AC2xV8H!]ᙹqzʣ[c) `xٶ[wp9(^sSȋX]kMN˺k֛1[/[~!|aQN0}󔭜ֺ:KVͪ^doju0'f9ٛlDj@b,rчѧ˗.'سiWK6+&=}vbN5MA j| b/e}ُW|՟R/q"W95WՉqLO}S1?E|ee^v嬳ھ8R__·0^'?}fԱsoloyg}Gg _g{5QA1L$V1зg&gpK1??!?c+O>izbj9/.u)kV51dư59ImO]Ձ?9XD 8je^E1,ᱥZ&u/]Cߺ5@$_<25%6F2=VO{ć_v?s E=#G=k,M/#S_=/1үƨ!~Q>%}k'>Z5Ŋїzʳ{Yq~ Ֆ;;뗐<# |IT޹I7m$ַuؙ'_s5u͎2c>/7̗߮;/OsHID[S\n>vMr;Xrk8_ lNj_0+0+p"/Xwj |-|aOFwݷK^|`=!;N˃}~f7{?-lWDuP?T'}Ɨ6z/گv(?MNs@͖ar8Cź$r(Lsx`A1v;\eC6X؊ksA?Ip/zl^/>|͜=|:{$r..}/:,`fv6x j Xj:RaUkH uţF|8aUm!CŦź) >=XcPl8׺\ĨYaٺ㕫؆%czՇxr.0؄_ l̻ju[jjw#"c6B7>{>pdOёWuO1ЗƦu2䊲sq`G="sbGO_l-rTQM|еF_pٔ/'0FĐؾ4[؏No/ټ/߾4{ַ]zsxbq5jZrm}p?w7w5E{Ek׹ GX[_"ved]{0:{Y[D_ IDATz/f,vSylPMU[t"苁L֯8>u]uQ`S.t.~Io֖\O11>1&8Ǫu$±p+.~'lq#.}_}}_X[-/qkt`.bqo|o~pu6{-`]x|iŌ'<4g+֍_|ucrTs~VȊqMԃu}شpO,2'[c>ĄO׹a+.rrg٫a[+1Q_x\1vG5>߭9[=C?kW{ {v~F~eϯ:{ٗ?Ey@̯8+O_Z)/ v&׾DQ~fv/<|^\_V~Ӕ]2nK& ryU`j]Vyaӝ{Tj \ /\MY np'\/@~2iO{ꝟ_E[?]󉘋uYy9;{o9KƶE`d?}p#aޡf8B7FbӜɌ`6t6Zuůŭo_ubX"zxT?갥;EGrny11ʫCb2ythk;q1/'~QvpP)&:>zdLW_ݒãSՄHW>>1r}@ _a㙷[Zl7:˜,{1s#|j6\r4Ƃ_84<:uLLĖ|Xz21VL|!n^Xߜ=uq>zQ2lr>']  g^ھ 7g|]?^fF5ԵԵi"]k]/#7ڦ~Y?Wl~7Rnz$Y[ӫO-CN]Eȏ0db~imn:Ni(~8t& 2o?۟}1X9n9ӵc!|r6H鴯3?jFf79#cco~AG>b=uUg)h=ZkkW/hnzӛnf%"xE4+0+0+0+0+0+0+0+0+0+ppT`~QX%TOHz*=C+bzܡ:$CGf̾'{lˁ_vٳAOxl=;ְ5>gp .tjGD.֓p-G)OxƜ.ҋ 1=c͇>KϾ~r0ϖ/St;9ՀO92ӱN&9R/{S~ѬCwԈ=;oD|i[Go72f'Bc Z r77οxkƿ~O0>p'N7c-i(6:f08*`/xM{_^9^_kݻ];]#]k1]sX8|Ix\;q-߱}H]݋kwԼ"uAOlP4v/GSzp_jWkxqYCЁ'K=ŊO5kz_d(<ΰUw=CNӱ7YvcKΟՉ/A#7F{}Ňg O&kGMG9Z9ZjEWg{˃W3=YW]%yEO|_^~jXj=d\O6~\{// 1O竺=Wbj\͊AmԽýW5.C`bt] Ko]P|ro]7|XsX/8C &~`!G],N|sn6t`{5ȗdbAɷ\>fy32r~*.qVsS9m51[=߲̱nffέkҼ&`]~G-ɻh8s~k~ѼLYYYYYY+J}sEx9+0+prL;xPg2\W>p`>v0ϡ3cdsjslO]ЎOk`;߁^ Gm,wP'/}>vةwG:4召C^_>"Su/,רo^r \₣G\X9$/^c1׫!l}1~#^#CGz-'j|p!w©lUOj'}W rګvS/~х/NyP#Wz DZWdWGԇb W ՗^]dclؗ2f#^{59کihm } ϰL.Y]+]î)ׄk׾>=!{tC!>zӁG㟱ϗd<7]~a{rOa<˫O:i~f Oox sF]+u+_~k1vtC_|> W\z{}b2~Wçv^Z/TOj'fGGǺOt{ϒO&6Gz d#5m>SC6xjίt=|)H|AM i0> S/b'Gq.z5oqzW.k֞/}u?|5麗!᳣o/|Ts{.K[ebuݿs^Z^c=)ۗe|y/V{}Lj/nX4u61iV`Vp#ѥAŚ )xuxֳ9,¬:sh?UϬZ8Bxǧ؆enLOOG3@>y5->Ӊ1a%۰᳥\pҍ7jf\3ُ_mT/ZjXjxlqB$'l茶]}q~1r+rZFq1CóǪC9[-Btˣdp7i96xtX{˵nxe~߾,sΧpqq1yf7 ވd0?]sb#@tZZcl+tP4N_89s1E_&d41#zθWA9AbIn~Wl𛮘P񆯏7_dkVCkmF~FGNvO?Ot-W;vO8a̗϶A{r7cLjm.?vb߯;mӇEG/:0_`Ziߘ.% k5k"֍->nq~8b0ucc'xlWC>bݩf/-_+kl4.o_<pŁغw(q6=1yyxp^O8*S/Ѭ%^O{za-YzY:shГSxe2{"'kӇ ہ&=Oy>|w;E=:Qr叭 /Oɉⱥ &'Qpd,#[:>ϟ_'-<} ޼uFo{\Lt_{ɘ|%&zN#q`ӧ=:P8Opo-MM{ߜ̞7-#2ғ,rkL/,^|ɴj OL֜~OUOْC5f=]K0uf/N28#w]k7b 9 ӇAr!{eelىAԴXƼ=rn\^kXõw߀ۯ.L|u\V b׋zkR4)Xx~]aҙ4+pUww ׊^ZupE5ӻ^a>]0I)K2guoxougc/pe?lUzbtV,yscq#f<:KW~Kmu><30Q- իlsT]Դ{8t>`'r7\&\9U/O,'ƣ_˟~sux۷U7>:z;\z{oZ:jɗqVu],WZO|w}/:qcW0Xؑ5S؋M Nat+DŽ+rPo=SL7_Qai7]5aqsf0;`]NİǃR~ ԁO#|< ċBȜ.c5/~u+GEDOLZtjmᘗ1cN0[d׬|(fr[S´d3x&RsqġWKO^,>*f'GKOm=Ćyu)r`C {օ[UlcGmLZ˻5W]Cp?p໎l0 }26ӃSzt#+qCbKxM{8Օ\51}1Z?/$NrvЏW,76lyDֱ=$jݾ Z[G7F|_MSي}VCzRXŌGY'|v=ONX8l`bąkY.,q[#ok<1Y}5=k}^@kZl넮kPs_"w&s݇\O-W^7-9Խ=[wӿ9^ụCopM2-':/ņ/ O6)veLVo}Oq!Sz \W_dMܷ AkGqҥ'F)?߭OczZY#6Ōث-3f/}7bCҷVd bCk\<Бo1'/f2ZLq{kaw؊ Lƈ=[ןk HY`ZN˗{Eo÷;W'=qWZ#U_VSZ u|QBG> '=5/]f1~J>u|V`ϖ]kGp{Î^{\'bVmN=[Vp>кӺس_ɖo{tnc>pXzPmg. j\ c,~{%7X8r蔗YYG\#rIW`#w |+p~YYY˴:&AFP?9]6:\Ke.g&p:Wcȧ1i &R UOW}?#> |YHZ3q:Utǚvrb`i8}~wKV.򀇇FtaGF Lh/Z⡏Gxk4?}O6#?_8=XȘl$eZӣ痬ڌj^ŕR#ُ7bc/GW503%Ë6g[Ջ]qfo?̷Xxf ̍pΑw͸&|kFtӉ뇦Wձ7қ߼ճ| _tR.t 6\,NG>DVQz?r#ނOFɊst(|>=y6b̦e~~G>}~Ī1 OO5#~qxM/1z{q:uNg>[HYgq#:cs'ysz~c=_c~]$o 8W/gzBsk^sYZ IP?&MK/\϶W߇?j|ȡ4OWX#OfXjg'1]ќgy69*Q?6O=:_S5J<֜t4ט-1l݁!xzFGGGl dɣ4: 8: IDATex!1 ӘuAb##u!5n}GlxM y7\cO$\e =G< X,w]WadO)V @9|go7qaЯ֢==7]T :ۦG_\+zbe/ъcF1^_0= .Ȋ3 a/6B0Pkjώ ;kTdyk W`~l[5#/x6o7Y{=÷ϑ~Z s/lϻ]O#z]~cΆy}G_rK^|C\>l]߰n~!ˎ{r;ymngoqjK?rͻ/!zݢ; Gr"2HbV>uChbBl~5_uQu>Ǟ|uO#cFrKWWSj=;<91Գ)Cco}˶nwly%>Q_W\|_}1lj/R#H[Z{rg-'>oak'dW-xָ8WbRk"~58شp-בfԀ^c_G&C6tti/'&&qjj~  6C{/unYGXlZSNK}ث{'=Xl2."I  QtOogfffffff. /\vgf. jIuYyd#1:0KAc`:s&ǃư:#'T;taI8sxIߘ8:,ekOGba;~0"8tkBxhK_Hl!>|X`,'6l }H̭gGˇ~caLJ|ĨAtГ,~v_ \|kL.?4}~ؐᏸUG|W]bh=IGߚ-b#6xr/!f|Б#c񹎪K)<9ӣO]9њ5'LF Kx\? }bc,fD}1:u׾K[qMGrEⱮ6&9?b S:륦>`ipVOWp 탬=5,Od,V|_kϋ=uPYޭF_Ց2bC?vCOf طcs]ߚ\߮Dzq]s 㺊oA5}C~gٰl\={u_?-ήyl车v?s_tz}5 w:{=/_5)1/g ]tG.x%=)[;ǧ'?~k/"b'FZo\ⓇxzOuV7:aWpS_,cͭ}ܴ\*-Enߒ: Ӂw}[#:pu-`t?w]طٶl1OrؑG-'?7&}kCj'v]˱k O|9#c-cN>eyC&|Ӟ\i;^_>Կڐ b~J)L3ksի|zc`kjˁ׸56xi/k񰁇OOb3֓ b2OoKb OnHVcu}]w<<[XF\6ˡ7}za˜>̣#rOɌ/\̋!<ِψaK#Evdt1ઓZ!j 7Vc<܍7^-7lD&'G xCl6⠧(#oo㳡Gfit=ac8sDqF]5Fw>] XA_Ne?mϬAVk=bMA]]K]Ot:׶FW>~ا>Ї>-TL{Ixt"o6l-0AhC7|1~>H\x(zzFnqѯG>^d`ZCrդunC ȏFcp{l8Plb7IF|cG.]׀t`6ϬSot4*.O9s(i7cz΁=UFacO&-[Oyҡ@8t=y vDȉ~_;L~\~' Olޓoj`GO _T.r7Fk&V9p .}~Ă"W'xg.4t M^ru#5׏=5sF{A苻=Pzx|򯱁W.>=u9]rF&VvYr'9iV`}Zr^ci{۾&_uMK\3C5͜/]|!qӓiF]z_g K]t\u ym%#&c1åISx[^'`%2t?~Ʀ0䢷&Qڒã G wɌkLS8߳wn7r֛O_s꩛u?:8u@xx9r_[w6Gxs(z'_S7zHǸ>'x0ۚ; uXVl_;b`_ Ht_<#߳HW|zZl-Yoy=kbr CȬ ޏk6{L^7/<1xV,?}9Xɞ=׽v9sP|Ÿ=kczOWb^N_.jLnƚ|"xdWS~Q[sӺV@>GŨ.]cqï9}s{߰鳕Hf g/V.eg!_xFՅ=0[.!Z)>Ldd}:g߉ ډ\˶_C%%AL|բX,O9"t]XO֚W}\'xa?;Dxⷾֆ\X_gcQ,Nv%|pj|j/ykA߽[RcHjɗ5wec䀌.@·kG̎FR;q ;mcſN8*`/^\5׀{1/]xt]; t mGYB;2022$O!#$!  d eP/؀N\fM xH]up䜤UZ{׸k ~>qccw Ul8:ŽRz1SHd+9"c|ܾ#9˷uP2q9S;M M2H.?.!dX/dœt\!H7gc]VG08uO[1k)_֑CMc֩>9-6J~ŷ"5zo^ɇs10 \ 35Ɩ.\VÈgd@ז>20202e`os6 2QA/Y-o(Tq[9P,:#:@C>XK^?},#_8e >W貍_ْ;XtXŗW"Q,d&W >^Xƶąס<].f,Y~[QTǧ[)On=+D6l|׎Oyv igN<Nldʃ*aZx剞6;G!&xa<|}p8袰mmAgK]zʚSi3#S{H]2oﰥJrP{ƾdgk!ykOϮ1d|z}LG%/~?z[ӍFX:^êǧ!<*x+͝6ʷvj%ޖ}cW/>f};lQ+]auCN9u&7g,ro Oy)0,Xgtey$?X+Ƶڎ6u +]d'#Wœ1^k{eݠ7Ά\J3)ӇvbK< |4߾ȓ6ȡd8%ΓFםͯ:Y+?C~w|QPQAݒȖ*&m悬~嗍[znA+G|;dvĞGFFFFFFFFFFF. |@020202pgg=M0kBbo#01r+x=P_xP/[F|w0p :'_Brj׏><`O!OiÃ7pCm{[9/[{>kmۯx?{'A#_{.|!ϯqq{:y]cClh%z+26j ljL0V)dg?#õiw cSC??8ɐoV6[:;#07]s/rփu#_q=K>]o}/}qޗ.;N`#~aC{gHN_>9|9R7Ƶl]ࡣU:3ZĀ~?:Ϗ#=ylٛ0/dn~ 6l_6Z>L h'$ ~sJW_i=c޻我?XM[xW['|+9_lY\rf9emBsE7YyVOaVn gC_42peeݻN6޵|6lkd;2020202020202pyg`(sy?202pf4Nng.:sॐE!2x@l|;,$Onz _&æ3A}pU6,ǶC:;lCAv._?zd9=>'K?:V1CYpA/b?v"mzdéf/gy!C/:L+>)r Ci!v ovٜ>HA6~룚 6Z/rDijK Xٔs@sU68BOnz c5wa>앣֥xa|E]#b-c6\3=/)>gfN+|5hmgO6TW`Ӈn5d iQL֊/&cug ~"렑-֭3yIZ=CoZAk>=m}|>7k#pٳ\W\OdG_u ml~6~>ŏu1 IDATAT|>{ttս6_41*| m}mJ|5;_ /Flm䃮>Y%xb rd.̮;L7\dD=Dq0f]cN0h^?ƎBʼnV94ޚqZ"'ki]qsɆ#0wX "g^Sם+{F#W lu~\+a<202=fۏLl摁2*ްz#P 9WvסXv8In-~?/;Ϗ [x@9#*#c+6[]:ap-/>=|e7s[?JxâedG 5e7hO>onIG-*af3־ɱ^2ɱƪɠƳlkI5eR 8҇SZW! <}-1g7{j2HMmcdÜ_5y+Kc/(lצd'[l(ta@sfue2Jrd+ dj}AQ u40%..jla;r$tֶOV8?rBڍ/><%_gd`;@[i[W}w'lIVu-׌|}:O?뺉#3l׀Z-זk+_Űm}S =Gٞ$gO%GWj9 jXPOOKhdqē=W{.POac ߓy|A_U=t)lo|O=p#yFl%e<,0d^|}50󟍰,l!,X ف^ȍuvys'd6/n, {Jx-69!cZN8á GƧ'֙6͙6}$~|52ƛ33_F(:c+a Oȴ+lk{łO65\|߾6frrS1޼k~$}n>هɸo$Kk k??fMmLNd٫j32d~?3ִob\ko6[5~z?\ٲz?<2joi_ϧ= CkѮ7f{6Q+8u V#_p c]g5bd^'y<6v#yV1 rB^6gv7m>{=cb*jEO?/A#kA~5hw5tρxd`dʗq̕oG#W 8rX!C6oZ;4u9sp9=JĶ1v1pX~#Ϳ::d:# ]vavxp"6hv0쇓,ʑ͸ 'aKmɕūMl燏=1]NrΦBq}2l탄bd[Lw˿K61 rr6{H!u>T7]06d&xW"v`dC Y~ yNχɩ[%Q&/^>]1tc^5|^ӎ__Q}rMuIO`7^0m<=GY.䐺u~k_gz|oA_?&d_pk |4yv'Cu12xkLw=?}}}k&z;o&}8̇9G[,޳bk,SYq^E~| _ytM3g#wOnޯȡoYߞ8bzI'NG;X2Guf|mG~*|ɻȓ=o ˯H훙q5oKZKtE[0+>Y8ȡ5_?\ emzJY<|F|&&䊮}|2I|Vm·8FF +vW(Gt###W s<""auQv3gC5:a<}cflx'|p+q~ڈ^Nwc|bK_ W~E8{|7>˷z6Ld-nV]'M mch7pGO;k>}%(jx Y}7>زo+jγz |Suvɢttìkkr ]>fO_ȖKoKrKfͯV ~m|5܊v{Xqծ6g%M?{l356X|珬YmO_MxlWMo2tu;=-}0:&ց16|I'yRC_,xF Xְ=z5=d~{Q5>kk۳lgum}rj&&}0K鱫G|zORtEGc1¾XN!LJ1v|o?7}y Y߷y<-i-"VkY)ΜI +|3[35lg?;]lOnv[/8YmN躹s^|LJp_=o|Wf:5yֳpe~ĶǁOy){t'G9kC\MV6 xXCmuQnv`Ǔx`NN^a с}cZx2z2^srg0| >y+q0+|a+__b9v 8'>} _X]9"pi-C_ͷ&b%'nb]x*pẃU?yXO9OOkENɝ7,6=9\b.W\>0ѧajoD_y.?8|k.efp˥ #*zd`{ʀ=f/zgÊkc?{Bh_CзoP}D=&kc5.\ۓa˾_v"X\`Oֵ {0? 8k =6&Z;xm|v.FepO/]f~|uf姞f'>IWz`2,ty/8fW[`*{ztowOyt-_~]o)\~a'^GZ7:lZtxc.=>!>כoT#cL<֥|[Ç%u3H9"> S(@?=mB|㑥gL[ڼ^צt̗zʻyFt桃kA5INs.Nqh"_tnw-1~|6s?Ha_1.F3~#1.0Ybξ1980ғ;?埼19n6a$ {tv]kN>}AÊ _}FG,mֹf&}[ L[l bG>[ct `'o c}I~J\gC k|}m#ZڨOM1Oߵ ó6s #c|Dّmq # %r[|>[lTk-:@Xwa>ʃӍ9 7~&Ƿt\s?זޢC-c^Q v&dMq:\狼9Q#cbB^2,sI'O?}[.>ziӹG9}y ˴soۏMwܲfvMzKb<_58`>=: >95W7etcϣ0&F$75ɾ9 GW`*֙B._w~6nysKz[ܱî\y4v9ܾ7<< Y78\s7dGN8-ag3]m#.ׇuܳ)sOak'o:.'tyfO{=^t=l9` 1 y瓝rkRiAHk~sdWۼ﵂=c fՊ  jz#?Yc}aRCؔA#####hk4gѥnxa2###q1upV[ Nu@M~o~E|a]gjgk-g<C~NlT.˗><)^l%_,*o i }26הodX rkqkL ?[L&u?=jΰCcO/lƴCv%^ԭo66azFȅ:\dBRɆp>ЏX)jI8pa-G/IF_?4ηFW_![_Umc;= i㻶_'Iul3=t1d bOʉt%7u_ײ} G6y6#kchÌ\kgF{d`{ʀlZJ-~^|x]c|u{<G;[^?WyQk?pekU[cxOvsDSGqk/d5/|~KF^|9M 'ӵ盋W:cɥ}bNqQ~+dSl w2KO:qg,swZo}}ӋO8a#oK0~`JrɆ{vvU:z旿|2g ErL1/p|XUWP9kcjcɾ6)ϝΛϻv >[b'_/O&D>]ŅWD=m^G=g IDATv[-?t|շI{5}e^r{>b^o>LNךo97_c§Ч'=i}~qC^K6K%>~y.jH~ndG?%omz 9d>dmß(y:56ꑁm'a4 \jpPӢ=YϮ8$A9s^; ԓ|9ؠK?)d⠭' ;0@ј)9ظ IOv?1:oI0Ȟ?@F><1G|tX$T1p֗O]Aӓ4.v|Oit>|#N_cf\jMLi6&NCD'MLal^ }|c9!gOU'Y} k/xjc="zN_c 9|~^y0ƿ\1I.mڑWyOCgIW!6)2Hۜʯu>2a3 חF vsH/zXC=ŷ77)t:w] OzԷbNX:}sNF>%A`[OkGޞj=qكl+p |5o^Ŀߠ1ֳuݵ5ÞѾs{sѶO| AQA{{e$dY|S8`l?$k^xvծ lwz\fzr-.5]ѧ?}|TdAŲt?|!C3uC|#.^uxc^tg3Ǧd2yӧo19yt/Yc7|"NCm.䝼6_tlE0˼$TDǷXߜמÞXC|__?eW.7;{r+{5nw_dO0ߐ3 M7b5WܩI+N|R\1.=lmvس|; kf%~V<<##NoZ_;~aA$:W k,ll[u@320202pQ9#Y:t!/|)輑%aC5zɌ;⋗7ZPN6Um0>lIM>hXy睧K.dwolG.>@(;%'.8瓼9'}vcHl-&|d~FXvrde_7l}X~&r#H|X1NCxy};C~ugo4GX{tLJ1vz#O^7>Ġk!x䊭cyG?W t5fY"zo~aҖ3 myǟŗv|1kç Cۘrkb֖kZ,4"oLp֖s2칁MJ7Gtz\aS[#w7|F K1ZlO>`VG0Ky}J 242e5I{>&? ѵ'd/t]Gg]cou3 T'=/"55>^>FŵL_U&gu]8=hV d\K .0Q;YκfkQOwN}N7uz-1¾‚&vw[4Ֆ~ .Xa35oҜW?S{<`:7;ǵ7-vͯl-  7ͱ">[dZf4 է:}̱Ӯ27{ž?}O:i_́f-6u~kĎםs{{c{߻'FIMs8%18M(r.H۰EtdS`<>}n߈ta gsicuNzիgI<]ssZ\'AGlj{~Ωe ӑM9G<)M2w[nNIZ>!cOXgp+xb־193%|=O6\|7ƍ=[;$FFMht]ĿsY=<pيí]=[q5X###Dƣ4 ##eu͟pA7~„簫19|sЍ~|+zl)ɳ]㩝o`p͞6v6>BDuO8ߍ㡵rG.3Nanէ^5#1cY/ ņ7Z.yP6bF5/c.^7c J^gm5mt9Utي1Ǔ *&.u>d/lNr'CdQ븵K. p ([G?v} gƲYlFm+yv>G|c·2˯XDyd`kuWg_Bl?5l7hd`{̀kY~Zo3J^Y{ژdu;[+u-Z&Ϧc𺏗|zX|j|K.a+I?~t>h|w` z|[Hnu;O?{?2W&oqyG55o96~>xt=lJ.*><źCMʚߘ:]5n eC>e<3+G.= }Sk1gw:'l{XE|vlv韞8eqC=ӭ~u-|G>R£F|W2ޖT+ŀGOpm%71((al|[̚/+0cO^,s|#Ibp {tɗpxBVK'_&[osBO|a!S"!6b+Fz&˚zqmr.2l>J8'&t=C]PQGoC|6b?7C>%C^S;sgݒ6:Vq$oHN+0W/Z^[҅'`cYfzcO#񿬟yj.YH;<]4얘؛3N|E>yo'moȹYo [|fc^Xw'C.7)8}@͏q p T\ 7In}6VLl~4202g^(]TQ~L]rӿrYE3202pw~xʼnkD220202 84sՇ9p;hsXpK C` r@~Á¾5X2G= b^a(l勼(Zm)\֭5=ŃO>6.>3Bd`+v|A.kُ*p8;?]#`n8<|/(}|~*ޚ!oC6֧rԚK[ 0 enÉu/yϺk CZy9kozd{rjn' Lc\d|( }F X5n?y}A5=k=K^!g=ė~7ٰN^v׏t]_U$]zyo>;t{M`7OF^Jk uS\jeS`Ϯϟ0^.aa$k8cz‘G-~fO>yzo?n[:_%wҙ>}-pu .o9py0=p=÷/r"S?彜eWY#dln]#|gKls^8]e>E75톟zZo>`4CN|sg}֚GkƾāZo;F.Ts.2&G=)ӝZӣoz C{>'| 4? =.Z`!/7]'o=KZ\l1gTZ/lׇ?GgޑBƷ%In2+O> g={O`0wl0DO:f#}dsȣ򵩷l^~ka/}uƋ_ <$qC劝zw ~lTm5\d)ƓS[q7㳭]ȱX1cY~:#|'WNCl$W_֟ѮK.pm\+}6iA^m&}6Ȫ#zfON6_Y&Sa@ <֭}m:+ŒcO8#}5y(ɮٵX6ScMl~'_AWc\<V}?#askپl{/y|ΞSI{Kߞm_6яȧG/TSGG ;uʶZ/\b&c ˧6>^aXӍ1\߁1]Ŗ9tC`oNĈ]c"G/6>11rByi-*솳(&lȃ' W<)I&'[#b![Wlغ7i`/6Ow=|&/{&l 3~5H&=9l-v9g6d5]2|6sA~7쑑3|qiJ.i/~l'c O찟]cLVg`[1yBGw+/[O k{9X\SеID8҆m=o>ȉkRB>yCOqs>fϦoyg?k3ns?F1}zsoT`ZΔ>%SqM][a>;:mzo۸7"6Thq}uɷkk>-̀=-\)F. |u3Wۓo[l/8XGF ey(FF. t ρ.y9|s 3MC:`3:l;-c p0|e!!C>WN/m? te[0t NVɎ<铡îvx3ͦH8r5w.vacX9D斞<[p+<; a| Bls?9%/>}X˼ 2*[r y|+ "`/v)Ova֬G=0Cjr0A#9|m '&f[|=| ;ֹ\c. >ork<>|"qA>lYşu ;XubuvZo_|bߜ_r E\UŠQ˧<+95^a*r. |7A#k{{ao79yד=ϖBϩٳdߴs=b,=gO^اp~xdL>хZa100 b8[t]لk![xk8ՆJrZ'm?]tɧ>5v=,Kf}o1h|{lV^#wMu+f7]4}r숏.?r;yz|tștyo$sь6l: MGKl8[r,ͯ'HM[J:&+l!y]Z;r3;g,Eisg>3yOq]g9oM;3k^wO|ڼ<č`/1a{b6EZ2gn<bD|ֶ?P-^1Ivoyu<eg7A}kέu+_77 b?|Һ\kO;h=Q:Ӧ)k#2?盜9\rɲfC.7~5yΒy';Hr][͛q.pw~O??ܤ?~n/.7`E`jA##?c|\ڣf.GFF;n \!3h}XWyp pn=ΖFvu :|ҩGw!>(d//Z>{CA㓕 ڑq1¦Onɫ:x.|6 }Nd3[[⤳ί6*wU.w\j}"6?gud:F%V"ƪӘMD B6>txjZ'䋓LîRW1,wc|ɏn1EJ_'92(>gmL7dm.y~+'Wxjʅ6xbBɔp5_ࡰ঒p__糣+~|ׅo-pE/xF Xqkx|Z^nȬul뷟~D\?ΰV 'y6|sRu]d:g3%dGZ{W}?tI'.?7эz} ׉]^cPNSNZ6AŇuSEow2?AI-y?~wnysN^l>s|᳞9}b3LO;'6Bn]q6'><(a|=kK|ܐܧ?=bG|/>髛oZ˃~i/2^_ڟG S 7,~_m\[цFj u_.lr;ta=1+}AeӟL6ty~&8<[Z>Y{SMb/̄*>2,/|+96q.u<`EYWTk~i6}cֿ3sDpi܋_m+{Y[bh-Q:;|~ҦEW)dɒ(B"mDˌ}'12fd+rr{o{붡.vѢyψ0;s{}~>e4߷CY_Ϯ ,dYxFJ5='On;[=yv:;PP+SܣΉ!xJ/{Y6ő`E}o0+L7QcT=v?iwX搓Nn_Zk:af 8s_WZ}|Z޻(5˞=j©Ud4g?ATɌ 25b'O?!Sz{= >:[mUlK.i25aꅎ@G7sn8:,@G@GsMt[#x|"0[g=@Gq8dMkd63j6|Q6mKiilunfmp1f& س)g3UvmkS=`6ux8}ͮ2G'-kG]_e2;ixZ>StA¯^61@Yl/qm|/4,PПgi3GO+?Wx E?tk烤o5]tj~w_veC/b|t#D=(8'b+E<`ܾ2l[tЯN2&d`wCrn rL1OV+=ZtGvn喦CkXD?p2~5e_tb?):Ǯv)vr)? 1 '/rr\Ţ-~gN_ z`ş.[R⢧SG`~B5ks<0yu1?f3k:(՜̚ujĜnd<-^er̙.yОk~?^e>ٓCyWJI!8eL?㛯%^1 Irdk٦yrhypC9[R = ^*V^R_TJs{ەU_k'?Xs@}'mkͦWUFxѯ[#TXe:fvX䏖c0$2y'g+RY_|_, ǡ})6sbپ9f˭!}G3{}1Ɔ}O|0>ėJ>mm6me~ggcu׭*tRәHW.S4"3ȺGZ㹟z@ֲfh7z鐂2"7<؍N12mX،C\c_3mO,lסazrCYᧃND&qxI4'|#2l莞`gw";6]Kѫ-e~}4z_JDtq8Gb?I|w@gOW^v>x-/Խ*)/>/'V|i_|SVg=ps!j<2P|^E=tR=.hđwOkÛ޳!? Cו߿QSr<)4K!}#`yXԋnI?/ .+2q]>s>{'?\~!hon$G(8$sb}@!vȜQ\Uahzd\}ZQa/>&u  =tz!qVyiyߡo|\ƎoْLF7mHތ1CL6~כ'qiv265Q!ΰlE^׳\~AΧkmvĮY`K9 yy~Z?_ޔ]c!2_#C]Z=&GF9,I">S2D;xnJqzRCI< I;71ezm:]M_gMr\PώW7O,<<}N]q8?!|:&^8ğ~GWa'qсVfG.;OB Ĥ {}@;׼}!w] 2,\_EkOpkNrxQo:ħYsO=}–xG~|{z١Gotы,%&~Žl.~id1x%F'N ̹1:cZnkS3wę{uys|˜Vo≼6,SҺ'TkmqTk3?zlS}*+`_a՗W\pج/{2#4]ԓvrtVCOe}Z볌O Ydʲ^U_2˶/S+>gvoM߳H{҆ ׈]jC}`_;؃'o mlJ(볘'Wx/=dIZ<%c+N8rĮC2׃k=X]yEhyaZxg3֧Po|}~[}mI]-_ě~y}:iS=xă(l]![m}>'j/|8yz5v!].|tx2S1B>I;[5ve .mX_H{_szw=_tٲ* 91u-WսgxʌW!e|q#:}VK,\9 qԚFyREP`:'z=6!>O36wƘ@B[6o_ڭ>YfFw0Q/Ǝ~+.Yװc]&~e/%^dk^S6'ːoOcͯrim>f<;/p id'z<>xו^W,~#<!;6l VyM47y6m!eg6l%k#ͦ8ǎ۸m$'R6rkS ??!}lV8b ?̞MwlSosL$zӛ`z^1W[ٸ'ȨG_2&7"2e:˵:})v:'N7>:o^J IDATG(gO,L;ttHØc! _RiEB)rB|me_>Ojw.cUpo8G7x酇rpD?[öz+ ׈`>_6a )5Y"uْěv7$? X+dn| e&KܭGPR65s\CV/,0gk'rc~!sF9g^!sͧs^v֧ ^bdc )=eo3~|W'&뺲5륵(ܛП ĘuX!iãO&s<k"W8\)O{ndm[b>meyƛvnC2#!-Z_SKb/Y E[fW/e,X:ʘ#&,ϴch2$3<$s-?+3t|yOilxq1cʊ6}vRY;Ĉ,*ϸM={-V,Oc>Me_{+cN)2>֖1G9GRpԱx')zݦu\PeG>:z>?U/F&Fc?t:"{L\_5LkZj}HfF[W,^5':N)Pt߹f+tKH-%d흗t:B`ַ_;c7oMrm3͆:u$<:Ȑ#݁Q.9Ovd7N[%m6B u.`d':ӫC=ڒv\K#W=^yG62;E2Y60^>}oH%2t}tM6<ɵz%~x5xF?rx[p'O꣛?j~ Ǔ\.섌Ewt$\z]"7?ICYe Rf $m}(<]Rǧ{rYu4PO?!Q;UGR,W x+6d]~S.E>ut֓:9mQE_gxo >#0|h@gqaLƴ.>qe~xQtkNs)|$xo3jGM,קE~|rn#C2k_k<?C:I=ԋ$m!XElPew<l 9ħlX6aw.2&>nj{?-K/GӧO/gi_PvY<߁׉gsʑs_u:Ϩ(v_iqO>uGCѩ˿ݚuc}"E~\o#)zސƷc_NŸ9F_u>t:O&qaŽ;OAke:9{b2\:˚CK;n˝u<rǵ'x=Q.]y刭#n'1`zO?o'T7$J[xYĕqG?rc?q nȦn\ϟWr9.aqݖcǵk+&G?9$py7>yц Cذ!w^1D0wH欩S,}+}2@G#t:@G#w盎yǧIG#kHt8 m!Y)Kh6֤Ld+_e_eCOWyfSίmgM;ʯ۔:Q6w)dBĔl슓-e~щLjlRtÓ_je2^/Ej?>KW7Eo/+HM &qv0Lנ~nkĦ-:/|96ʼnGߘ v~U3~]rCn2C~Llx=m#ڤN_%!<^9F/k/%W62lY<̋1*X=i 7H?ILx3H:xe~fN?/gGtc_0aĊ/c#s<O3k?=x2֌K.YN.:uW5!kqes%sC`k3uӧl. Oze6R9$@]7O/^cǗ%or)krK,$.O$ ~ӗk `!W!bcL>>KkbN[d료r`a<㇍>wAy:bm(k_l83uzBpgc̃f=!M#w0;uǣGؖ# !^ r9|J"o܆2 6郛kz؃񓣃m`$K.x藴=~&0dlh/ aKSOvDFĎv})^NzѓI];Y_)xnl]O7_\],=ħ>mG/EG|l'Y˹WC$m7 G6R,0ц)g-Kr)>iP˵\'Ca#xQxD_Ï7`>bEpP/.:@F0C1oN'GG2wR7/80me㠝5Ncל19m~Z٬K,D|6"e-<4ԛ\3_ǫBM=aGW{eW\ZsSړS#s: ϯ:^5F pz8r)Ygs6Ϭ'#ko*onC2=Mź_wk ٞ,πlts|̹'P~7L麹>qSFl_`ݓLq3EZ3%:r]fWU>> 5N!._+6zMs8uV^q˛߾}{[^'~J.Ę8E8Ax@8~~Ɇz#k÷#_ѭ]~}̨r,~[=ZkMFe+?gȖ1$Pɼῲ"KkIM0oKʞDtL^a@eW͉ή?ݟd槸ؗo~5mmX×טО{M~ ޲.^>W-]y[{4 ٘[BE/<Ц7I bΞܵ^^%oϯzFSG##5z?X#7?:͛UfF<@G#07e&]wG#0!M 0ZӖ:yako62e#ONf[َN 9G`Iѫ>:Nb\7v>* pfgx}rװ~ȹ%zM.:P.@^98ǒ#C'|ĦQ$)a_K tKP&>VPd'bxqE2k6k#;Ӎ'M?r6/O9׆k<=iWؐԇ""r![<ȥLu×4.c_K-TYr䱡 Z9<0`0:D<%~!63W*OmCu3~Y]}e$ qu6 u=Đ9K>s!5>y5O|36ߣ׊L_W&7^C-K,H/C2yO/6eg:reM}?0XxL/TC5yJyrmMtlq7d+G;zF%2O_[p=W',ˑ˾wѭ]62,h}ߗpR'JsoxXxj)ȑ}J= 7rrC>xuYd>S˷.\o2RU̳ZyNc@ScL}'īiSG^9 Ĥԩ.uEx=أZk$P0v| w̸#%Еv~HC3&W12)%z֩/::5dK'C>oo_vφ[өugS|~ ʖSv/~ɯ&BK0+|׫l ǡyZCH; CXoI١v/;.c/X$~m3`E& wO/^rѩ Z iS8 .d2CꑲDL[ :v䒹$όqr<{Ńot v%ud+!/udNŁ'|jGNfjgbZcol/:l"uG;t{5ה/|7 eui8{Dz p-=(x:̗6_F3`E'}p?ճk?"抹oh7BC+ Co'e0- _G9|«OS{W1g~9m;0;q5|1lƲ9lK$s9519[13גrha@l ɓdu&->;s>؜W?ryu0,9_@!Od6~QI0rXfcol 6nw_wd&WY~CݫXwXs8w2|knΘW/?/IJ#[*I<8,\c!Ϻ>j̘߿Y.WG3>zˎ;6|E|Lr v-?Y~)P~s@=͓9ycau}d^C2SF=g25L}i|;XK=xv$}yԻOB|w]ÃmWէ9y2ISP~o_viv+x^?X+r_|?x'{S(KЗtu|ů2VЯ"kKSC[v Uc^ǐ>Ʀ6ube7?k|Ə,l\k=W7g6`dܙtIr@GA|zs*&dZ:3^葎#z 6G2@G"ПPr|M*_6l4sņM4_&@G\gsQ{6HCe rGƗ6#͆*^>=d. gw5l6ڼzlxӣ&2;)lkqm {C>4H9TCxӝRXgn~AAوꪫZN5=EM[%)&z&D.nc^nx. amkRU_63B_ 7ѫ [z.ꤌ>gcI|!/l+7bIF[<~-lO/Sk0fiKN?=xP@ <`.=|>z%|5y2t e+bW rx≭͗]KÈ dK+!cr^ `tMͦ/ ~oRV0 OɊ6E?X/"&>oMv>kl+ֿiŖǺǜv| Xvɰ)%nyІSG`~C\3}>d2q|21`==/xMs<e7rh-0O/ 8>\#y~?K06[bC&bA7ٶ& +'at3C[>SG$$i]v?fRǮQSfVZ^Md&ݭ]?,.[{Q:<}o)(_|q{tG}W|~(E+ʙ)$WSNJsdzXP9PxCF/X{-U|ZT9ēʂu=sĄG޻;zH¦}c?O9sʔ͞{'˼q'fWY'7}6t@An̦a?Ot YX!k`2gȥUg>gMO[zoޞ IDATzVѯoy߾3^>a,?:F֭8kܠ/~o|\ɩVH\xFr·R=u}SHhah7eC/9žm⁳uC~ (*k@x];h0"K>ξ\] ](}G򝿹!D}wKd!9S*mE{cֵz1gf@l }?>~viq .ƶ2<5WzJ٭I ZAF'rG6&Qڢ_v<ʉQk0wiR7lSG<@|B.ؐD/90N6tm<؍ﮃ2t$؊،蔧>v'~G']~ybH{|LGBd-vr:lƯbCȑSps9uCi]D<'C{#ڒG.=WF'`K.KCJ<~`.x/C? S|b~DGl?EjrKdiQn>~Æ:)tQGFJ؏萫ʉ]V:ĞGa(C9tG6Q& Y'~|&'_[0ϜI,s3͉{9<6I7%Wk7_}u9̈́sx˶s4|zcR)9= <%מ,g=z+F\95.6Q>9@W\=kn2I9_dKeI+^ye>I}pȧc(O~<^_:jB 'Ճ3/Zs)[r%~oAO9co([6^E2M[tGcO= ]ӥ=&};|`?שɆd_ך_o_#:qla,~ ѡg}إ/lc15Ip"k+ ^SP/>2.M8JfKN=~ ĦN[!L!~:vL |z%dyQWla9{ƕxx\'Nd?!yc0 \y`0s<2W7tup^5wfXGF>QMM?i@|^}" ק5g9I덵G=;@n19#K|#[6cKllU;g~X$I{lxPYrzpdž[sYg7^>+w\vps'ŋ >?ӇhЯ_'2bxc'z| ?~ute}^9qAxŔ Oj^SW{2VkdIуȨbU'|Oo8O&'叺<+V0s7ՃVX"6>Uفbc>aO;r_=pW|juNqc⸱uʻ?`M`u=١>#7__kUȺ!v_Jdmp/  Ĉ-Dl&> `iW 6E_=xK;r! &LRb | qMF1uQ_ (vl/(OQLĢm_N)?*'V#lOYI᥏-:u6ɍ;Ys.KN}c|{䃤MG'6B&[}m6 m%I*vņtW2oOC؉ӛl_g,?~fW\p;1^|B&6w.|/t M/l;ȳ=qGڥCּ%]r.X?r ';`>|MAO0gESB0mmBp #ak:c(L}CYcs>0rH&.='N,3:~l-#>F8𲅴xM eXYk. iM-ԋ^T^:aɇd~[;|SꚽӛNk/RSP~FJ-v^:\2}}L9L ~#bū.qs6!z$>IPݵͺ;~~AKO?~NZ)}ƏkxУ|e0YGrt.Og'aZr?ș up!UaG>g7~,ߌښc <{I[P6VPNu#y„~\qYa [+~3FaT߾rglSG#^_ []gG`4CG{}1{mt:GY;1~G#;"&f\If,u6ؤ܌*|C\ͦz7 A( o~c7~6\G29(l/uuل:z婏`}o)ҟdpPmOb!^rlɻtW9h2JCƘv+Gn[(~7y؏_ouNƜ!?;9:Klۮ2~c с/?K9<[Wȥ-9Pc59I\SK꣟1Wǘ ?bGx@ngXML.m=/32އWKMkD. y6:BY/sdt.ZR2<$uK3A'_xF#}Nk^_#_r1!2G|t)Gtelфo}$!!cG;ڃY^fI~g^jSrz)oNcK{'oH˼%9$㐕𼰾if-%,{O2YKl )3,`.翄"Ǟz"L|O֎Г1q1>rDd2 =#'#MoV[Е\RN0]O"GmuVHZcE>u<=:A Q߃} ]#t@omθڎ@G14U6l%~=Z[6\!ShEtH(_fuY@=m엕nxو~|~I~Fg#k:ۘ ~ͯ_!Dli>qnfI>^[?m <~ LU"k/Y1iOk/H8C '(ß`'nX叄Ob[;?Rώr:GNהЭ.m J$jK(l.Iį=rS-r⣟k#]\o>旝hC"/u#:gތ m11a7}MRfS~< iSv/bkq}vGIY 2v\flѩ>n>HņW,Q<:bOt÷iذZl#`^;ҮGq7%vaq"e:1L%Mze]1ɭ)c=sA{p뚮%.j|L-ћcܯԠ'j+rʉ+P0Cdä]2c+gR\07ܳ_tYsSݶIK,\9#-$uf}o{֛9#Y3G1%!?;̺~ O|i0^4$>#MgMRk =nlqU7 s1ƺDl.neXi |3wmՆWR7}Ζ ΝQWrt\j#B t_+0orm=l SKB#w+>; ~+U?xO?H_>%ǜBii0>/q%k)x+q_O"WrxhnP0yv|K{xqcz}ȯkC2y[rXF|ElJէfI^1o8S9EW=-Y4>.|+tZvt:y{|͛>v:#ac6cmX಩fcoΆMl\#esfkm!6>>/bmM?m쳙Ik_wW皯ېF'+_eKd1d(I&6eŖ6>#-6I!Nz>iI?~<~z sGY/YG6%fp;6I;RGz x {d'v2Gt۸Mxk|b#GpWlž$~`.!J| _N|tj'>_F9)zObr-/QcG;;hȓy;xd2I]SY=}XF/NeH$ˇ<%;;a< ڗx[ \?e>55{3gہB<%[8 xb6y:`lv9 u''_}-N IZ?g/P-r~"狻5* Gvń/c~|(MESG`~D:a#c<1_s 3qƾy@Fn.3z^O?s/ڬ'r9]}r])%'~׈T]CW_tڑUWf-[3ik'qGMlOBYc ѻw`G.d W/)~pٳ~YB}ڃUdf'{KuW]U`ÑsfWn?`u.堙iNyFeu=t3b:&O<̵\;lU/v҉WIUE_ZYmګ>r!E:@6=}P}5 V\Zw;Ĕv}d᱖w<3>s_t3nxagG6NB6쪧GGTY}E7?f'񲯝?괓=2_臫{Q_f\L^'g,7xrz[]uR}*ЯJVxF9c15ej#Oyef} Lab Xr qs'`&^ ?C>~7vٔ{waT~cepWm[w}N/p쩧s?*4ln9Yԣ܏E|u/Xӿdsv|]_o|K_jx'>nUԹ]{߭*bş_Y29tye+~']:7?}}|"xb}(xe:Av:o*du6\ OX6leK}6ğMLe~t"vK.ѭnM}e aR?%8ذ$--ƈW0^|x`-O~:!j?t)Qlɇut1?)..\}7Oc\kl+)? DOd1I"O=uGSx%![ё> ޔ宇S_`ŶNO9{tLx#L& iC#c7#fk/wlO t Çb#: QGz)Cx؉^<ڈN۬=)u?&l?`oב#i ꆲVGSG`~EX||63#d ]xѕ^N|#]&p\jE]þv~kcKx%O98%'W/y:_֧mv[?1K/muw=,`=z\Ehz}M6)߾,b_z:59Ĥ RuM?f.ҡ=I5{rzIw]ʓGɪx_}=͊9zb9= ,9: R$!>[dE9Ԝ:@G#x\# Btt:G{xtvM@G`Ef/2ԦKXTR/e3Pl1_zdlf/k^j̯mIxd+pل[6 d|ymxWb^3.b$ @OU Gwk_ =ȡl2Š!m!C_`Ckw.~I}|#S|<~*&:~3`Ҍ?,{EOrqKD~3Գ5>+nr32(NeD/ǃt+ScGS]t)G|lXW}W|pGZĢ]|?R/:66kƃv>W칦o_d vT7\Ȉ)i nѫ]]֢15Ď,a7uo9>ك<ҧ|q)nD辠Gb ,OFBŸ#+Fuprf?bWuN X6g+W1olgg=]9O܋"s2޹9$uEޫ]s62ﮩO eC ]a-p}뿝p|uW76ϷO38C'M/|a=k~k81>3k7nzHf=s}NaWR^]]k~ö sKYy}`ʖcvXY]¯d-䳘2qZ7.Xy6aٓO*OSɚ + ȫ[a՗urIyt%f:~)?)_cot/ⵦ7`Lד}~[tɣ܃$O92xt وǖvmHNlׇx,: r₉Z;dଝ#[l:k볦[Yl[oim7%O>I&U+ԧ>uKck˫7y]3Oʫoi>^r)>fZ'ߍОvOD8SFd bЏ/XY?)}_/kx6 #r9ב:r_|n#`$e$|s-)?@G#iљO-]=R/u:@?(|4`yd=m!\_ƒM17R6li#6m 6l=ylK6'j곡N!th^1dsO%S}6Ӌƭ|/4]1'[nYfe 6~m@|^lfc2Gb3fO>}C|\>'fbnx20O/xt-)ц`߸P^ 7dn7,lTgeMN.205Uɏ'r\3"v 0P~M|#sd.K$~Η䵉ake} G:ӉW>j^6]d,dd#sM7j~OSƌ~aWxsXDI.'fE|.y|۫\g|ef۵6م8쫣5~-vӟIG?O|NnlKlv̋?\Psa4ʼPv62/[krc}叧9OLƻ9`N!B Y?yIl |WK.|y^5^u=9/eʿ;ld}2?q{]^e7/OySk=H\xn)d>=sfkm >_Y.m9fL}M9$3Bh>2M3V_or?+_~_puU^dwH',z7Y(N}zhnrĄdf/~OT6u-_;Opy>`u8|zwMgS怭>>OY*GGx`ף}`O}07;%èÜ |kTN; Koqҁ1ݧ e/nܻ c'c /ottD29 ]֛n%MϿ֧,V_-F,zh]קN8l[_7[sIo^ţ/_{v27*`-~T=æ{=D>3} eqhK9.Bƣ^g.eSkgWWO,ɳ(d-9zmc/~%96Cx:FO?DXx}s }%pʭ+x`^pӟP!G+͡)XYYԈ'^NXH _ߜiR8a$'erddC?]_dq^b6?XH\k,lz If ?ɳSlx]4}x>b+?I`?&+ox%g>#Fs?[n U/LV>+-{j~# >J~?[ jvѓ?o y1 Ӿ}'6sI`?Y msJ˿kt+y&5X"=Y{l%gb {2o}:acq/# yV)o!q[?>|/b|õ:t}(-ƇiybܸY0v`Os` r֟>_t`}&& oX6حM^,) +`7/j2aצO? S؟?aO0Q^ ,X2enn/.X2YfaA[ ;$sm;o{3kŒwMD<2:8F%C3eo0xk_bQȳiVoLv J>7dIWŖl|go %>=]|3_؝/:a."7j8㧼8Prj$pd_&!۸:}HhK:t&OOl!X%o%/j\A&;!Y>p[G |82ۻyݺǎ1(GN|+pKtMFo]Y?^s'N2qc\+|gs+t1V~aE gxW>ILyC%GWxZgx`ZsE\>3$}}]Db[pdP pau( h0{1y> =G\~fS G8gW7]S8NO Gn||'u~QȘ9;(%k$5|~oq~X\ qݯ>x:C?do0퇮ڮ ;} ~%|sˏ:۵u;pS=SF?Na\'|V#9|3L7icd>_?xgum~]w{zgzW埳#zQ@4e\\_/xx}?1a?>pܔ#7=a>ؕ9gwcB2>;>PC^_x峟5|i3Pym;yHi~;0]G"K7}Zʽ`9D1k .p5F^<#y4#pe\AdmT.' 9|>hw/#N6;V9,&2 /vsA___tO5m"|`&E9;gAE^B}9ɦuCy&k~9>̅ , ؛ ] tYys ԦMM-\sR/X2)d`yPfS%K. 8!Zz9rx>9zʜrH@ Y2tҁwxa8Xt(m9px  vꠑ?l9r-/<6 Mm1;x0Bj;LJNFN?i<_î2/b<+8ڈ_r.[ro~)dqmЙ0苃|~\e(I_3,|E.tŧ]B0­ G{wsNW#bԶF-$r' 6*#)/|+]ri }D-۾;W_\b_'ʼn7|;?}G9l-6o_!?}I?OzK=O|>;X_QdҧG_ɘo>G?}y!'/^9X1}6Lr԰M2t_ T.k_}aܺ0?lE[$M,򍍅 ED0kk{ ]_D#Yg/5\kd ׏ȞEm5:a58\'6{ !1wN]dF|K_:=s8dĺ~WyQ/rI 1=.w] 6Sl9l'+F~~gw=zd'ϕG匹>&4X㟒я4[2p[!;nҥ5NWؚcbkO#1>HSW?ӟaE,?ϟm?IO~<^{,[Wߜ[SxrMg9Ue5^`Ś@b}^ 8nfgrFFc'R+.>`'d|>-9ɴC&,.;v%rz;uQ!y9e_p`+bxmCs@}.|ldO~dn|cE&vרֵxY<  zZO>CʃvsE5inV6 z8ƃG0˖w]"9;?X)b0< '9$]d5x0%Vs ּ[|tvFz1]Dͱ،[KtcZY2d`ʀ}%麴ВM=%K ޵ݒ%K. t`4zmM^)dqOd+;<҃$ ?yɒQ!xɅQŜ&햣`8r{r؍+rbbϸcvCxt+pcsIuKẂ bH&|0.jWq1+,tNf6!O_A[\x{k#Ymaf_-|NFt:uL.h'=K_ȳ\ѕ/SCfNeVO(xƑU]?x8&v+ɼ&~'Am??;t|0o}pҿ~rxOԿo:`=IBryHC9~y 2W?`dE2a' S?XzW62[ڟƫ<>ܹ>/5YXHB/\21>WceB'<2⩓5VQ<|h>K7ʎ<KrҺc~׆iFԜi'S~]Ct鳧O>{d܇/fRaD'|rn]6a-H?r5]^G6z%K ,|2=C +?sX.K ,XX~Qf-Ӓ%-^9lSBo};<^2ƙ5i{KM 'Dc,2-v(5}o8ocC-/ >{p`mÅ_!\c~A~ ElH!ţf9>|濜S{mtv {Y7mT~'Go˭+V|o8S~9g6ʍ|"r4F'mb8WH[ IDATKooMkyc{n<'g,a>m[Gl0^W:ȳۼ~|>]NOk'8d~ф=]rx#V|(0bM/b5?r [t[l/lʹ~I|[MĖl#ObCIN.[tK/yq|OOnB7;Plmcp_>Gʉ6r)^kBM_(+7aL?KP<\eֺ=uvao~4^~_ hۏHߞP7QS'j׼ukk=Fp !zz|vWudfȸ3 .s+>sdž?qd<u V9ozۦvV1e#_r ?\}&y_=ex_?k½j:Σ>sRL~9 $?ť6l>Չ/ }yXOo8듟n{ w~O{8{4a_;lؼӕ#k]2}r|vf|G|CppOƃk֮6_RMA-I{b_\xڈo o:`ϘZAk7q0/| ~9`ߐ>knvAӽ5߮9]jINLQ`K|XH^'8ia?Y1wse~O4[d5@N"͡/b+ƌA:'[Lu7kb#.u]:|Gt8SIW>ዉL|sqsmE,nrkO-yp(̗rW| M'{X^KM“ɰ ֜Iށ'+ x*Gy,|B]~=,=Eb cǃmߺ'NM>'~Xge&WWy6\CCp]}ɷ5[#y?\x٘ -,Xc8e:75=u7$6{k޲wv7{ȧo/Ƶ°m .kq|V+#{k%wht!c|6o>|?1=ZƏHltj׸9N _]gyho'Nz~ x恓l|WOCKz SOwCRO MkI%/ڮ]]_ܼs!]OypGh#b@lsy'dL\7@?[dxzheC.{: S\6l'[QӁCV ְn9>y?(ׁZnȭ “ <b;ۈm6z ?8_{rH_NOW>#vt}?%=r]\1$GlIt1ΌGCgzd[xVpłw$r|-b38_Z29fdm]!2|%Kڛ3K/c慹]_2d`K3piZ\l-X2d2̀7 8g9COGO09 \7syp*xcsp 6yM2᭖lXj8=x;1o!t0&>=:).Otѧj2t+>|H8. 3 u4oVgy7n|H_Sm؉O&_kl5# ct6QLӡ԰sv/oMM8 8汄lWRM'7`g8AF.%V575\<2H]%վIZ_<šm2dc? rA6(nmj/J z]}Ot3q岱ٛB~%bzXfٗ5?{̏~yk2߇f/]CȞBOdYxv-bO}n3ă֓k9xG?:.w\П\;2^Եכd{s z?̏kaO~/xc!s:'rVn|[<$#7hd=,k%>zH]?ڃ9;I?d}?_~mw͆>~H&钡ϐb0&v9tl~bH83J'>"va++s[s|SßS~U>-\&i zW瓌GAai:61^*aW瓸]_ίȐlxI?OȦv&Cx=:x|KW wNxUt ?xȃA~aMBle= k%K ,X#ppaq}qc%K.F= ꒁ%K6 \zכ9\֛ascv08sX6cp#GgOrƊ ָ' Oy!o^k_LQӈ\tNe5`}MX~Cb#p6D_!G$͍䐸`= |}y.+}Õ{쉑0o&#_p['|+a Úɾ\ca[xy#|{$| ?|Sc92?,k? c٢x[lt9sEvyX濶|,d`S@ oVָKd|=i]Wu{E/=i|G\ň&y2Ϙ}ǎu]i Kq]_=LCSᖷw+2tr w Wwﳠ1^]w&ud9{1\a]?Ӟ݇_|w=h~<|]bf;}D6j.z/y S\ +ť=7O|ÎAu2u+*lvc#j>g߼[0mZWg'<:.dOM~—CBg {x}fC~ F⣇ȳm);c#ߜ1N?t\{/rG}H<ܵYᓓ;g?~u&?ꞝO؈ C6"x>.|{>'~>L%`}~cP Co _Ϗl/MV l X1mօSml%K ,3<(%"'tp)Lq}C.n9sfaAm|MA"2~qtIwX4gP 2?dshaArÓ#@F|(>_ }9KsywpCJl+7rPό)/)?;l^/4t_GNr)OJ>G1!>,G.ǯ-OrI8>>T_d_G+1# mx<>[|_|SzxtdXް!%~y8yc=v^r00_|0ƋVaik<6̙<\cp6n YD\6E?eb+||ğH^kBK6 ~XƝ:q?NgzdU} \ wqzq2=,91o_%v|2Ci×[6>Y_d'5՚q]EOZ'tW>{/oFu.uħ/^m38_0[|c=կ~)^kM>=]>Hxp䒾 N1[0L ?K~I2`%Fί&8? /s6tOm>P_^Rk݆\RYp ,42pη K ,pЪ;]nW;毶1,a1ew 6Le.@PɟՇ /VcCA \Iܦ1rG.[n:]K6O٫O>?׎b?(^|c9Gd=-ɖk?a*s*9<2j%ٌO.~9f&C6"+兏8 !7jl ?ڻspa{S[yH?+qfM/>b8&O?e6[aB/]<5~_uq<$̇?lκj- *=m+?y{=:7a7yヘW[OC9>^c󘊛|sA_;q:կy>WvI.[ xLlW+ 6|Ow>p5 |?V+='x(ƻ0~Sb0VkL~m:ӓS>3}'eq5bG}5Y~WA@lh7.g8,Y(akبM˾qD/d`%K \2wd ;0Yn.-X2dyO.d%k7Xsh8r&Pf\^vhwE߁>:8s S:]PSJ׶`Qo0HO5\ '\s/ |Ѧ5:3'L‚Wۻb6Wlr?r-W|㱅/'%߼L8b?C+yľqr"|f CbgK7Z2)dz?;id/|3k㵢Exj^ZE}ڦOk:=M Ͼ$c_&hE^5?E.< F$ʿyO~r$0C8|#~Yv= CЙ'<|э˯'{ox{ķ鄣o sd.[̭{2Ɠ33Oڭ>g=Ֆ[|q#|毘N=+t`_TS#W(:'f=7~WniGd)XcO[~^矂Svto ̍>E\8">6. > 5~1$Ϧqy 刌'7H_]v_;=c0-!'>[ψ!=rtZm>w>G<<㑣GN\|#ct{tپoa=p^h zq< ^$iZ2pYeVZ㲚2/1/xXx] ,X́AXw̡;Z;@u :pddp:v;`́^oɰhw`G)Ԇo7!!bT:ģO=5NN.% 9R)sdwŠ2FGr,sq)W:c9.>LG[;|C0n0VamjdO|їAс!8}9GDk;WJ IDAT]d cV8Mx&oi11Q.됾9 ~8pam-?S9q >'CW㫑9  ڧErjn=*nZSE0ŧ.FXmTcLϘ6ƒ/ _ۚOC۸ {_kNL6GӜ6Y|iao>G>R7ƓK|@&LOs!~;TdGU2ВkC2]qY[W+_9䓦uo+guִ|V='׾]ό!ׅ>{ȞUڋ69mv:agG/O%-k9zMt ^_<_>n0}>|_؇þ1Gpаny; g~|ӵkxx亿wAmv-oNtCG'3Lm|Z|q}: %>m1ٵVA|cwc}jκ(>LJ׌꾏9aLJv<,OG}C%sщb♫ TLc^_tq@\îm | _[;lC0DG9ڜ7,'ڗldbز6٦ o1wSj{4b5PNĒ]ɅX]JQ>JFX/rk̽ q ~ ]g|%>mTaPg< :0;577֞ykHϼ[ϒ%J{d^V|b_nZFտ4bl\e6Ud`9^<^2d`Eʀ,7q`pR8TS7a9 6jq;lΧ1mr0l|kȄ Oq 9<~Wf|Wհ^-oK6W{#^cd\(uOm5Z cgsܿ$,6Cn6ܧl%~f&SlZ.5NX~b^7~2͙J^0-tk#q䣚ܐCpFai!%7|}q}C/nc\NՇ5R\du} ?bgl:?%hŁW\xl8`>95otϞ1umXj_hZπ5!+339>u_pW }jo uG #W>~{:O(_!ُ~tvwM?tcO>}Y_>4[zH7/G>2=e[w|!"7Ϗ'Sɿ|ЯOoU)v2o`W3/t)dxsj',Пc$;K{9! rsjAO[W;do9OcƵ"Bɰ)f'[de|TNah7;_c|uN%L]xJqN< 1%j -嗂xR/X2d`%~Mh|v%-~sz%K lRp(^u`˛e|ykӗ"7;,#&8["]c2#ƨ1zbN)"oyXd`t狃?v+lGWx2޶U\͏EE|7Nmr扮~]1&p5i\z\w1!;o93>d̳| Xt[03Kƫ1d/a#gͰȕW|i>Wc֪6rM<[ /{|'ۮ%wz0/VqE>> 6a(lE+_31Xt9RXElvfOr.BKjɸl1#gc%~dg+f,sZ/si]?|>,--]q ,v&o4Gk2>盚,Pnazlڰ-c|k=[;|2ίc˧~qxkGa'= [ ;p'>x'/'c |٘}ņ9W:*WSyP,9eSdtJXW %.^;y>'م ,30{].s .\2оڜ# ] \u՚\m`XK rf`yPs^ ,8 t)n:s!Y}?)F ֡ C2}c [d3?$ lct:4v&ݡ$y?A,">LLm2|U"mqW@_}ٌg.bġ5f.eK3)yaRyg _#v g>:v@H? Gć9O&n2t_v4rOS~6CxptMߜOuc59&\c8b1anp TᓗE\;|~d_O/ֻq:EG!+nsKjlﰿ/a6=dOkwǷH~-~Ҟܨe#x՟tJ5.G ϵC[tJwmK)^r>>ֹ9"Jxr(w ?`b~៹o_嫘[mt 7>|`[YhZ̀}dn[9=^Os{; |ֳ)OGAӃ _g5n!o?ۣ_{Zk̞CV|X׽Ep{׃t!uN>С+>ɻuP>߮d`G/׵ ~#cقI֘8\7=Ϯ<0?5/AEA"aO8}=}{42ƴ ]wy`Ot{3`_\Ϳ_y7g2^Ͼ_$'l^` >98^7o](ɳe {}|vZ,箩,.-8Nݺzx{4p/;1\Y2d2̀隳Ц8eNٸa\ެikCv!4siu7׍q]8s{A14V!-2K lX9S#Jlv`LO^mrˁ6"zڍ x5G 7l+d21yQv%Q=?:(}鱩ﭝIi-V2Q96ž:?|RX5clɠ:qt+wW<?20#b ͚mN1VAyi }iZ|_c|oq lr6qrrlc\s?8ahG-O/?]OG?v|'gK?փ/̃/?!ޘ7_"/7D/뀾{C_ƭe:dnE3^/xOxͳ"G^] ?9jߐKva/Ndô_ }\/#}c>l3./oxÇV`Gg79TO٥?'֣Z)|O#ryԞ÷=h N'7zjG5_f;;+9d7}>'XY8ᐇk$ϏdSm<O:<-vQX<,2 ʟȵ񳓏QلZߘXG{pkRl䳏o,48S :]Pe+;LJnaC2W m/>zI>FW+ 7@Ɲ/Rz׻t0to[l1;ox≿P- tX΁+ZjcxzW#ρ 9gA4Owx:5$}YsЗpz;Q,py~x CU|d_$ntMA |~x^L]<ʫ1QKotɱÆ Øo1vJq|tC'}dPsفu_ͳC\#m>-/l!$lE, xl ^}zc>#b_llr|-֒ϖ0ȈM<#7o'g<-2|bGɮZG;ioI6XuA6<5l[lAц W!_õu-_>-;r/nqO4vă9>EpӅc.bw^wkF7pGNkt/?/dX2ֺv\uoOи'sc'dC`!v\o\lok$눾6t`؛xt>or'çSpgc5~&#[d~У =<OƳVsUެ9co'X)r߰F|gӣ^9+n|8- ?[Wj~+c҇Ö1Yb2r'#'<:'{A3aXraS5>~?o^r÷G?`_ _r'zHV׺4byp\w [N\DO(^sZ.t-ck(lZIk|l40_Jqi,l4jE.yfN:iSz׻pLsyAu}sO i\6Lk:=AӞ̀넲e>{jO[_8=x~xes3T_X־/pQ|]t ,X{8ђ:'pp;i}OG}Ӄ,K<{ûUz:06Z-7avZ9pᇛ0X9q;*zjf:9DQ#mp1<htldZ%yf؄uM =rx|xɾM>8 >X:051x49>Chz'8իmч7qo!2r%6tũ-nl~g y8N[>~KN#k {7 +?3|o%soͰݸ1vM:a[Al9 *>6)l;o]W16Zopp!O/=1rʭ6[vGx="cH\`ˡ/)N9GB}9#6k]dW)-bG)_7/0a+|SCx_w֜ɾ P̧˕xk^s%'|ַ֧ue]VѶ㗣׼5Xe_ruj'<[Ek2gr;CM@u>FrjϨ~i+l {[أpaNgҾ7w=Dm/_z>8Wv &kuZ5oiu=<\|(F>#CCd(p^+t\ʹq;Fru-!ykq]|==ئ+W<@)W+(_' IDATԽеaȁa m;|/rz+7/{Ӈs~rmC1f}ѷ]+^8),\pt{sZ}X^&agc9f:nZu[kgx}y74s_ۍE/*ml._kQX6n~za}Sڛwwj !^e/)[2d`yyļDd`g }{;D̗af77\_6p\9LCE}ȹխn5XקyntPO_njG7k+Q2c7X1NAAA6;vOl9=x_n}m<)\m?L(aONCt6)a[hIX?a[竵/w7^ut|ԞU<>YM:9ncOJί9FAd<5W6iWa'<쪋#8b!vmba_|n{N>bV/q{L_&7~Wܣ򕯜>M̬g/X8uo[^}/3_$Ώ2\e&_;dߚ/:}K{̠n_KtvƋœ<q{]GhÅCd =:'|:a\+|Vg?pmvg+?\cx8=cwRU6{.W;Ym%jyNaF8/>9&A|1Fj6,Cͷp_?v=%#r.tUFŭ/~0omdʿMc4q [R,sp_ W|5,~ț8x**aa&k= }Hk/?\/,<ϙtuo=+2pk_{I>#FU/{"7OB||/<1audqAFAX9$#" ~j\χ&u_hd!{Cqv3/yk%K ,X2d`%KVYY2d@ z _8SG4oIvPmcބ ?E?;|q92."kCt~zJ^SMV\wEO܊e_}cۘ`6[+< i]y|9ؠWd+Ŧ枯R?ZaCNr+ .9⃷a#rh:F24g*0!m2☿pç#oHч]8C|<ȡ<VsE\["d=H =}o %tO6ymd.1 ]yh3O2|b5f dޝ@V?ZU^bLE$ѴcRj85jGP1FPPFp6-*γF@q(KQƕZիՕ; ½yg}^^~+?>='"獣X.9_5ix1 'l 9t1((f>5Oɮ6b淶s/-ux_\ho^\C|ơ5/}6ͥ1~8E< {/]/IK?4ư/,Y{[V#rm\t- O?GurOl53hG8e^#8b;餓g>1ˢ27ۥiszݵupuoykG:f9-?ø.9.8s,u<֜J:c;Ѕq |Obt|m]kp:c+YmJvv+S/~/'丯sYzЁ_>;H3o<2ξvUrrGCÏ]2Y6>mT2]k_d>|mOq#^]aS.ؐOL[lXmd/HN /p񚟭C::|dv5]ڎl!N_';Wbcӱ(x~~寏:r:|~8&嘇mOLٌ_fs1٣`бk|Yћe8.hk9$_lkƁOÏM XЉ?|sʶ^ o-WvWO|[4'g!6t@N\K;6[׿/O:1s.GI]9 Xq^7Ypz9g"n9fa‹O'ɗ\ܸIE]':)~2nzAyS\réyS~؋9F/}2xfxӛtAyxzMy\Kck#pz莇dFlyg60o [+ֳ8jYK֔9oɅu8rGbѶnCo7;FŇ:c^:1MYzf\G8m6 NE_M7O_;xO%J()dzw㸘ԎolW_l <}j?7?眸~ՙ~k]kFǼ1_XVn+rk}/\s- Уԧk4_56v3C?t>lF[=ͬ[[*n:[#9M=яIK\!MsMu3w_[oKkS~O/[{*Q:Niwٕ7{Z\?˚5k l5{)n 6~q<̥mxoltЂ)}h'o|/`;/$osيe\jSͯ6wǠ 6mpiEj:&Hg~MQ @Ϧ6ݣ'ђ oOvãgiҗtoV2bck;On[ɲ|4//?lh+ ͩة< ;~+hWv7_ yN_mou2taGL41hG66;m9S؏-N.?~M~ 9Y}s֘BÛmA:5=|ʟX,k7hJ7}%A1dǹ]5dZ WO['c$_:YqGu5d8ߣޅ0C/GG- з@g5ئhf@p;ySlx.m?0§nF539zwk ^zPy֮uԚkݥ c}C=ֆd c|@;pmBo8z>ӱoF::]˃~qO? %\,ObM7>m46TNF}f?wp%KXv滧/}l=?;? sSCԜ7ʹ~9chD [*ʑ\7(z䵃|I.|>MۘnB6kd[xn+ knh]wydFH?Hg0 k X3f>[sklk nU|ߛ+޺Xp݄W O 7܉?zH/Ա/|a6o47эFmw&`)qjF,ɦ%\jo& ydKTO OxDG.Xãݧ.{xэ!7$gK!+6S~h+=~!,bMOoy|+['[xAkrQnTؠ -^آ'6NA<{[|ʞ:m5oޚF/j&/dőo-:r=>Ec[G8ݬ5Ɋ _u/bEK6= ϯ 7r`/ 'v>1) CGIF1&c1֭qá#N飫hX~z8mto.3&o.Mqp-FcoZ[G1_6'䊅\e`߀|=#i+>s}ˀF ny]}q~S~o;iǚo泹l-XS}k?sH9N4kZT[/x֊yz"缄JƚfqMl'_uKmW~@@c2lWˉ*/6tMO|[#E,F0'6rt7c~$#t ?vOk46|s/zb|_rCu%ZCa.W(܎׼ݸ AGɿEѧ\6v%8c!|<^ad.w2/ {gφhL;zP뫋6{W\`wfvtπ\mȆ+gW27qd^^R{":F/\:).k>ֹyy55'2g,VO Ȁ N;m=||痽⓭o|z>SȻ5>L矿ő #Ddvl`Yq(61ȴaj#ͅ ]|MJlpx Ͳn%?mzK os~>dO_ݤmNYlXܸjWڢ`&MS6UmÏڀ,'|'>@ۜ?X#])7FlC«9}m5鰡ks :-9A/v9>9s-~S~x69mXr.< "}:&'n#}ts]jȨCz ݨW_6WbV]~vr8Mtve lӋM{?ܘ7cC?x~C7~yc>vC7&}yP;&{Ƌ4NW|@6tEͥb"#n uN4Y7[F#j4?x6('zU??ESAiv.0^TW78ꨣ&_vy;9yq{t`co 7o]zםDs7g1H޹sV:+3N1ֈ Ьz Sз&[rb-"G&;Ǻmm:vc`O۱ =ˏ?tCcI?l븡1=M,@_4m9>2MdĤ N9]\Ix)d+pO>qO?hxE{t<`G>a|-,cW7Ƈd~g-qɿ8]GtWkZ鼄_/|";/qbe {T|dͳbK|+:q6y>/d\ Fs>[";ϔQ IDAT/d c6ّ+y[~4.ě~9$CW>b$Ggyٕx#E?;>vf]0>fCwM/걋K_k__ 9RObl~wt֬yvvyʔ֍5vqZgqcXv5Oq=~'[z;Ӛ+^excFdw~w>{:#'_ 2=hzӞl Y۔m@i@ v'ƯQ~wŲIMd. ㅙvgvf61j.Hm4t oz7?§#<{#=šo/;8|6>4tttx#6lvſ]L>p ~z_@ .u |p@)yF?>#'lFҁțV&Cј G^4&RE} p}nSB[4f7po}fɵ+<̼O+umM]Afd:V6#wumFͽ}ց[\ oW/=b-zi/|zk?j/7hA|j~zv,һt?UG|%rR,pٯQ|V]?xMX'_[:kv5e8?x<Gܝs/t\ CNFh7vdc1rxz*'7󩜥5 >]1'k>;;ז+pMϦ;g>E?>m:7#|~ Ї-惎}'?i̱@'ϝ5?A?stI/XLK<#O8 ѯFz G._ּjgo_Wwlw\}{/.?QN<ĥ1ag`\/˻/ k X3f`;ekKٮ. Ã=P>5>2>5+0G?z:3~oj 啯|yp}TjبDo:6vɻ ;8㧓N:iKo~s1[҆\mgXm՗.^ 3m®7@tKlلWAv3dgO6dP+d@LmMrl1:_F6m0->ѯ,bO {?˃t.rX.'K1;A;:Ͱxn>E^P<5f_x]-.9"~: |F+ٌŧoS+/xhCA^b}%!|Cs~C6=h6$ſ ]'%9ms?;tW-5G:_E.lӛO'>;PÊhioƢ.\Kv·-|#4B$g5[P/l.kQ_l?d6.8կ|3e8;,y$1'7OB'lM[ҥMF g_\lC0r_t З]kO8DOzĮ6H}YCpG֞٢<+x2׽ͦ?:O}N0mO鹏}"sYӿ:<t 2c+̫wKU~Q~7:/ˈC9_hoVm\sȓ9@M/Z~Zro>_5k. .eju>6~?:׹׼fy>|Z2_W:kdž&B zxodžE|7vee/{䷣vZ}w.<m3mSQ]mم0chcOJj:yO} Y596ddmНxɶ14 |k+F@϶&%.N)~.Gj6=bgy#<_N6M95? &|~t:؍ ]ư>| G֦:6m9Ǿ\ͮ't)g慼b䯛w|"K7٠gS>2/6eБ-vJe y76!rM:T@.s98npW|kl:SoK|-tx<8 ~:i. \tLc2xZx9ÍcǛw!æ'7<=l-fY-wG-c[.ϟ]-679kC/r^^)t!?1c?C^shٕ7N ֗X8䓧vNmwߵ3;~`aMPy~N>{~:3Ϭ{湼Xֆ.Vy'кNV:nֺ7 3<^cJuчڲуƧOt)Ƥx`}U)t#9Y4:A7c.w/|&A'm*ɭ<:s2f쪛S7osZ۸&k⡗a%K[y7Z[AvgN/7ÎfOLx'j׸)/xt?V ' Oy&/G.~_^lL1[eIc\.:9ySr|bC>朹Z3d.N~khlyGűOx gLG}%ދm|;˞a"oy[N<~{O؎mGZ筑>wL1mckhG_gֱx:'pk3끋E_\gM_~\9:֛9q8V [qk \j[3f"2w=$coNLozӛ-SO=u'6ͽAoیlS~Ե.1梬B.pm~h]h8r]xVWKO6-kG~Վ,>ɇ}cr /fu>S{yx5~Ԁbrb.]#/5ƛU6HW'xUl1 ă^l٣k'bt3<ij9M?{Jm4tMeGcBz}pl?NuM8|٣}D#_\~%~+}gf '=I;lzs2曟t8>][k3sl0I VsaWtmZP99q&Z^9QBϻO}wctqzӞ>]m~V?t|ɧ~;9×)_lhү kg+:v!) ] =b*.x7]ηld~m9 6sNCvz}}ȧr>r٣GZqKkxy 7j\/M/)=qƗ/;]jBɼf~?xNso|Mo+v\S;1q)K^8rxO.|xXe PQ1fk|k#}lYKg>C2{wxHfy7L?=`]zeڌŹ7믰f`5&,GsіV5k l _^zf`{[7B޶7?p7Pqj;y4D6F <bv<o'}U+mk-f:=у'[mٔgt~yoC?y<6)6AG6b:]xO_M p5Zy,;t8~jU,r o,8-ŬYC ?>G?caqH,> js:-U.?=J9K9F7Jz^?Rdz@ rM|_J97>:lKolŢ#amtcIx%A "`l $ȑ s'>5:}ƘyF7FtG Z]rQ@.9o ᧛/R&oޢO, Y1_+hÆu |/x[|7&&t_@s 9A8u<4ʓҭo\³/?b|b|Әe>ysvB6nO7>1#^2k8L ӭw2O|b/҈q7}C>.3^+RΟvkc'ooش$V<gX#֩sX+5l;&.r<@֣<Ǐnku'ܱn~iяNosQ:2褿cOZzcQFs>9d1~E<||>^w9;ڊR[@?v/wk\\4|hjz&%g /tE?ke=\˾s>Y hHFqb+t1g;;i%s ?[!j|?bv^@/}s9ggS+}>'mk y->`.凌 ·-Ҝl?x>1#~Pr=8*'F:q<yHt+h\'ޟmo_5"9o\s>O;#mS~ێ6t6lno㬋6]~ځ> ;|% `:HGONcM=rm7n-Be~hDc#^-N4<lW2f&zĥam8pREq>d|HVo6YFJa|xC'm/no)t!F7~;;|F,_|@OY4_#܂s3qi~:'^m2>N2 Xxhq-z6xwC<|I6~8s\m_gCAwS[5fhb*F9C,|r# >%O^I>[ݬ#Cl#W }z%-2D~oz1S[[_a*S[my.-  |e3l$8c1⤟v6O`̀cx4_ad vw}ֵ^2=(3عV浕k\w뻛&;Xրud[g ޱ ֍uaV?.SqJx96O?3Czԝ.oځw+v),|qLbWmd?[ =`\͎!K7[Z*/>8tCduLg|H+g=%tڠ5.rb 3.3hy\<y||2Z?lז7Y|b3>~xq]\+|Pn܉I l?<[pt![n k&v"kX<txq]!?nW烼{4OE紓^0}.g};8yf\3rtɜLg胋aq@ikˍ/ˇMr^^KyN95~|x+6ŧSșygvW\{K Jx@~u_7m fV駧6{ƋnU!/|ÃxgsֆiP֗s4EM%ѥجf?95YG=K|?^|mkg#=h z]motUK'#\?Pc/gt.] h竚\4Ak,r?-hn:tҗ/(d N^~zjWӡ'Y[bpc.9}MЫh7 0j㣟3>:/l:km|쎅^Tokg2еm_bW/|a!1Pխn7n)9眳q{s^w DK6n‚GD߮5׵{Z+ uzZ!ךJ:{[hpW:*őLx>tCxj˟|o>S?j@6:F烒.5|:/y@N|=ɩWO__yk}bw6>>9<^A϶:b"%=Z.i9? 3g#ק+~:Aה)&J/=åq/_ءZ'~ӡGɖ?2A.3b(|0>$CM;0^O73-}j=7B{gG/ˌw\ï5k 8w~V k X3?f`}Pf}p;,1~k_^=on'pvrӛt-n'/7G;oz+^]Z Ox²3ʻ󖷼eA=I۾&ƕ Soz+&Ɨ.fpa-4o5)6],*/7x&~/6LJ6Ůvi R7+b@6ݽb^f,By57.-wN?MnzOKq䃘vZ?eO8oi1/ƙϟ?lɛ7lӫG|@MV)tW+r?_!}%>_7Ь?[ob¡EP^Ȫ6M|rכx5gMM.$.Xɉ-?寜e/~m2f͘I=>_&'tWm6 {xK5&W^ T&Vc1y\inES~_s?tłnS?;[o7V协MVfGL|_kłWaÇ )_}1=[ts cLg2xW;ps|8N־oN/yK0sj\m$-sRB ؄? NQG|fYo]Ŝ^룵j8ֽuպvgZɴ&Zk [?ljAu#1ȵZ$Ώt:Я)l>]/;"'(uğ8;N _elqk`Hm9&Q֋Gw<9y=v䄯+f}1G\m~nEN_W_jP<||&/F85Nr XjӋf+~+tѭ bm G?] ;d?/>G+ѝE뜶(eZ>x:xzF0~翸kCwm ^m|Z7dg7~cq/Y?ex|p ,;d1|C_V mO~0{S72k%٫̶~iLX#y=']ql9d-\p,ml3fq ɷ[{k{#UɀkEiķeOY3f+;#55 jUn1hƌ\ԧNovM}s 1t5.즿7l:"N:$GY%__aCņnHr tV!u~ǖ+h=4.6Oc>YGcر+|+sL! Ss={.S|ɚM/ 61_lozφGkcW(?'Y>ȕZN mГn7oM8̷^ ~ˇqK3:8īKr/EZNz?ydݼ;S/ _CNV)ƀnؑsS"A?cr4[~=xZN>z㠆Wӑj6r减m6m}y nea܌ݹ捝ֳ&9_y9drf]_)?3XoVq[օO/!9%q~Wi瓟|C\SN??yo:`;Mn_2l֖ZrjΛ֊eArw̰#MѹMŹ6^6ll>_wK>Ƕ9XHLA:\:/3΃h|\%4OF)x䑞qm_#Oxg_n9O}r]Jz; N=e}@gn&6g%yJhw1'Ʊ&㐭t=cb]\xkmF0ok)8"'ǞZȡ#Gn>53Κ%?9C4_= Bv|k^Ծc>Gyw ?V/t _u>_5ozi/|uc?ksP^V#/p㲜kLʃ:Nm:k5hl8rA|b@KͷK܋M/.]^W-9{UwԺsH}c5:|q{NCox&/}c[C퇹2|y{r,ӎx;s=wrX<1?IOz(S9y2<3~p'}1}AѺuݻš}<.:r]a]jn݊p\5'.V|5p\g+}syq-<f5k}~Z\3f`7g9^Zyы^4)ma2ߴI|N,6j7/K;.5~bCe[駟l̅EŦbņW}"']XǣsqxҡO~ mr/|x go\|9v}>CN[ģ/gG_n W~W O$Kҟ5Yk+hgn:1^|+K:I;^>K%;oq6Nv!?V#?d}2pQxAq[,7 =&kE? j8xWe+LV+ncl#4[>©7D+L& ɩ_%7dx+x%?ȓ G{ OG4F(VT@?*!<$Coɤ#:~rWiN)O찗oك_adnB<җt#1;o(o01N<(Ɵ16G=Q;hn/nw_:<0Csq޼חSmx`mm6%y-hca[vkt18w=~Y%^+xb,f| }ă_=넝gOq~e3}[Z>>ӝO|@:p-7|mlO6pS R> /z1Sh[O6Ε yP~jvﮥgCq|V~Fco%Ư,~@<^<O:6'Co8_‘]µȝu4:{h}خdΝxɯn4?,y^};;+ĕϾ;px¡_rUjrk:b+uY?> a3@=ݍ-}+ x~t{{y5 vfUep}[C!c=v맖VX3f`}ʞ@cj5k NԾY3fben]Z^7iW!ʽMm w??ܱ+.7zȻ!ͼ_7q H񶩝=8~a>>=SZ'Glo<8u1)F4q/>Ѝ}tc-Ҽp/_)rƚt _X .\ŮO~x\t |pcOîxG]Kv O^85tMF|O>mqTA7_Eoɒ5{VMn<G?wL`.<ބc7~ǨurJ6tWAx8#ym6ْ3q4|&8cG||1&g\#웗xzrE7 !3^>9g/Ʋӟ}K+){Z]H 2ߚoΛ3`_/ҸF5pj)skqk|X`]uT{֍6<0~to~96sؖVB[xW;>u %?ѥt|`-B''Y;:|N|9S?֧>Y6||HOz:%/^42>u:>KrJ}y|; bGCoQ#{d >d~9~a7t@ |#G; O'|V槚l3x,z \;ϙkboLl.>8Zx!枚gמjWl!b_[~剟rD(I.iU4~vBLG ?os?>]uR0)}>h_3|dc {xqys"%tX.'t$O<:O7ӍTх5_E>rJod َ}o~;N4gUK\r;8'_yk_|)К<篗f`ˀ z>}~ESu ?]·w|+m5K~+xf w]rICwo-_RSK*l\Imل)旾MLv6lva6` nJ@l~-mLC^xm柘CgcN|gߍ |b@WІ u<7.,yr/ȵ67=N9x>WrrCrE2AB6uqсO=mv™j9cū'r&7dR.LV֌[+[ӭa} @skM#/6tqMx( '&Og9'w"O5y9M?y8}:8 dNvȎbݫSظY?`9/b@wȒkhC 飋-Bw?v3x#zw}t/:~X]Sٱ"gcuKg>usg=k]}K2w;.Μ22?!O qv|eMؑK1ݜ/~?)-.t7D";ص6 ֻe1bWil=͋gd8rIZ׺t1\R׿OJ ZZa흁fa+v ?uvt IDATe+f~tG5W ųmZme?EW7+6wAG6^|4dv2J~W_Z\gi<3c~Bf+<6LS[m2>5|ѣA _ЍC9 ~(b#|؄:5j7\h/Q7_ ʦ}r ^c6\?bQ!~}:f1Qoó <h~ӧ.vm~S芿|ke6<zW6eЍjmrtph .}׺5?Ot8k)?to6]DǓ 7F' |l6lQӍ|lٴ +=g5[q-j7֔ش%G|:ز&mel%tjn}ҙixuKF?:>C,l'd__bCz>ޱW"qg|/ɓn`.=xK>:xxa =$Ng-rLl=߫T !ȡ˹^)cK+;3=1G@/{|}FKO0JWoNVvxg=ϞGC{h_ơxY5k X3f`e紮.  X32kjg5QVm^kQ_pkSovëo̗6hÛޞ#69| ?|.ѵ [m>{f9xENM@8zoї/;jx8_ޠkÒ^>v=#r?'t71`Cۄsm6'tao|чRzېmWCrz`N۟|b³%t6ʡy3 d]Lb1fx [‹ЛO4rT 䵭#P.jnWx'fQ.;Jo5G6ço|Ux1t W{C6]oS<o O<7gX,w|lטsbĄ\MlEx7./l~ך@k|8m\mq_|aaj+6|6קKWvG_oR< +JlƐ͵^3?dZ3;}kj$*TURno8u;jíhHy!!d1DMs[BIM51$"Tǣ뗝My89&ˏ:r怏7^^?4!{9}s5}_uqMpw'p'Ŭ/M>lpb cy-;lš8[{5rO\v ^x't\^CG8 Ea)pntzޓԧfL93c&7cϱ#Z5= f)6]Oo,=|i}Wǜ{#1q7^8sq5|f`EVC6*k \5"5z0ۚIVY3f`ec2\3fJ@Ym&e3?6lue6m6n|鰳QS /]m6 ml)6\mI^6DntWo7pk\-.gmhHDѱij'Wj'Sn]1i̗s=/{#'.ua<N*$S8w?!t|̫9zͼ^#aAnvan+Mnk~G1_rG)t6ybӹ:nt!_B\6q?xĪ||x0O~r ׼}Rs==~ɣ# 1qUqac,?3.κW|(6 ֡{. ̿nz|_sf:woqON>2o>gmG>m~HgoC\| GBWY3pmπuʚ5ל |U{^7T&zuwE]3f 5^f`0n7]60,m 6v1Ή cҸộ'L6c|<]mJ~و-?x*͗0g+j+;8honqgWo1^xα(9*$,u)^e\;e_>EXÈ qPG'rܔxK`;pi,NhW^|#?ҟ6}K^:1GMo?ؕNƟlq#쵩!21zq5[1/}uG=ocA];&|mcXRݚw>Kt}Nk3Q.sSJ6WzaNƇ6N{Wcǃ)O~ =>X1տ{}I/?rϟٗDqwSO`/I }[77gL6p`?G}ue{'|w劾Zy!v0>>_[R\K|O0#u-?889yϝbfHht*70-uO#|8tӃ!>nwp$?dagS̆OM|b'l}p2zmБ6N6?;۠O$n0,nB>铃Vt`>v"ao>}H7冢~Fo9mvrKCoppS5.6]m쌯|ѧ+圑|(񁇧>~p _%kx*Od Kg/qoc^>= l v\<˟W哪}zTZF'ua-lgǷvW93NOG:}Cs|ӧŁ/l/G=8StgŪOׇN#t`>_~\؊-tІ>+߷)SnDnQ؊ ; _66:..-OOXu(_@V?[uBǸklʋ U~af`+fZ3km-t7߭Nkz#\_\[{v]jMZG9<GJ׏Xwm|?;zJMOmꮣuX^p$_AM~z rMs;vl4 Gr#}~ _ӎA w>8gGPzzx;O ~=X\ˋcgz8O?~̹=I'M|j9[6=딗M;^ Ƀv~t>{>ͧb㏾6k xȃgbW\rRK\D|9)mt9{Cvi.qkhY?cy{_y-k'Xgc1#{oܚ3>|X;}$Ņ#o3|6_"0zOS>aӃ}n_MbGZnn!x'=s{s=l:z=#3ߘy1o\wv$9l]82gs<>18x:8(0F>Ɣ~b,f~ٚ/7IlsJN6pW78u _a3fDe,S@r/=sFsd30(֦ vyuĜZ->F;0ĝY9fnw\1Ysu..< _^NWoacSad<~1yoz|b2/E>CK1VY33`[^79nI!]aLkF+8mڭ'k̚dGG:~ZwK\\Zxk>;zl]'zև>]>89D _Ĩ fyEuY\gx;ҧñN~qz{O7O9pQp#7y_>$їg"&s67k|0؋Cg5?D\ V F_…s{|)_/kZ^#ӹ8ԿYaw!]a _aΜGۓN8qɈ?ۿ!Ѽ*_ME7sa1o8#y7v~pY99}/~Nclw?9 ={/:y7|+o{s1A>&[G$;98òNؚK88|؊_C8>W9?O67ݷhw?kkn9U X3f`=^þrUs@sbZ㶲]3U2*lZyX3pd*Z6l̹٪pm VW 7}|qWsqՆ~p67BߦBɗ|ᜰ'm9WW]UNqlҗsm>˱6W?7a˅q먏[r|~ө-nקvpqnx!_|ǡMҦ8_o08GY[-}9|iT&xyp3SΗ6:6v->ظfȏ#V_mK7P"ϯB0_?l[ʼnNF}9Rz97{mE(_qGʳ:΋}GvsgʀÊKԭRG5PYzm],qgUw7>$%FWzbϵMcs>zF:VM<.'?ƷAơ#\Yr_p1]~omt+8m K[>GnâώT7>xUҧ'7׋'.l/8i؟|eTn~og񀊜=09v}23xn:Xp>Ompgr&G3O8_kk X3f`ee[ Ȁ9ʚ5k \we#xk fF>S_& 6 lSpӧ릭Ma ?Ħ=t >Lz|k#=}ڏ IDAT|ѦX$#߳F~} N?C>mFzOr=od,ފ78I8t,z6қS>-aʕ~u>%iqb>~fcXWGs&^I?} 'iC>)rQ }JW ~b#x<12fO:'bR'_~ቃ n#6> qxO¤8g듳pn)f'l>4+?s9O7[.a1v֍O ]:w Rg7?rC"01S9 0N8XЋ ?']ɷ<s9grolyDݷ}y-;q^b Ͻ >NsӷL[_$G|is\eVˀ5b[OqR]yn Q7uktc:Fu~5a]õ>ώ^kR߲NU|yMmmе^_V 'zA]NJo=qƃ~HuTHqI_.?۲ηBzG?gzw~~j>=b}Wsls}9Rx`췾uc<ž`A<еkoG<;vm|ɡ‘G}Js*r#k?l/y7cfwqƌ/.[59?_ӽ9.ru^kqƋ9nй~P-0O]iΗcG > >~.W~az o:Os9o1g:`dkNsT;jk־q)c|\/pzOʛc/kS;'_tiׯWx[}ܥIE8x_aˉ11n^ybf`5kHג+lHW˚VY3f`o>2|V5khƝMQY6mȶf#ȴg㎾.6myM2oJб![қs>&g|'ltoӍ6dm։'}I{o6Zq_7Ԏ0pa/l ^T<0#6p鲥oy;' ܲ?a8⃡Mo;oaccMk  r₿qΗ[mOpw.mۼ͇sXtQ<堍rvc'_0aۑ~q9ǭ7ݼA_=Eᛟo|g/x|4 c8]pC .KրpfW<mb6fKN? / v Z<OJZ5%^oj5&4> =ʭs.'r 6=L]pÃDQ[z㣿7o7]6!9crOϜ91NGJp0wשGkk4uZf]_{&s]=kOkRsH_tafŕk~zv$+6k7A1$lWmuR!o'20c|Vg Ca/H~#v>hvx/^Oƙ{b#hlmr#lqunΎ.+ot m|N88Kp7ώ>,5{@7\,nC2?z8_><.~xM\_M)gǟ. =|c{mg]7qt~|o@!;=n1@'vƷl(ۈMoIq&D_᧧pw=n!F*v8tΟ385_~9 _\k׼%jŨ[ݮ+ap>˽tZ.VaahgGW.aq(0S{Ώ|xl[9j='ϸ?n3/5fzpQ}e̝wFNv+rïvm&#YafZkg5k | \ F(ٮ5+jf`?לWoVk l rS[i3Mͯt1fyX6a]#bNeN2?0m<#Ӂ6b5,ډc0;w^G[tⶌ7|Y4>7鴉]~TjsƖ[8ү=\Ŧj>䘰іc{l@ONqkksqY˱>J|5#z+69g?,8^M X盄W#}͂W~]}8V+ ;Vαcȝvqvk.ߜlG:06ǫ]j>}ƛ1p𡫿%Gy6 E#Iy|()/Q#ً]uT'JtdܸY32Kr?sSb}\ ?QD> &WqvE>_;Ř/c·>~N2441[X}Jh|S磼AH1yS%lk:p1Fxʏzq-?i)dKɅ#IX`S\S.g/> ;x#6ĬO[ε[XcU,}ҖGX޷'0HG8l(&|w6}Rص.c)~F[i`/~>Ց N|uey OnaA_x}O[) -sX~#M1FN`8<1s?yO?-5 /^S?Oy;|1"xM .ܗ}tvc+bϿCqΖ4\1oo:|kq>ԍ5t_7II?;.y|ݭp~opƷ7x}̱5@n׻7_uvm9͜t]9ƟNӹ?gxXi<)b/pRZ rl\gۨ{7ќb'F[n.NXbA:{2lWY3fg5{őVkc޵x[`+כW6ߩy^h5k l lZyX3pd 4V67mfI61h#̛%_|, 2Xڻ)#[AOM5~дNlÖn~6kQ{ڜۄd?6Ե9X~mЮ??bv^̎rp\˧>lkWH_بGvre<|fM~}؋ Lz K;< 97^bC+(ĸ.9͒nэ7x:Ym | *G˙7Zq̇6))va;g ښhʅ9 6 nT(v#u;y؄駟>anlq㫱e]n)8cLJWa|r.p!G#'0r0asN_7V`-c/֖BטWL1 -8Ӈ'0W{5[kؽ)S }xxo1w 7qtqWʬ8;>诰 G#?'pX񁃓y\6qVɀuc.eb~:֗k'+kv:lwGveݻg6h]ӭ7+d5M8룾ĺ5T\0`kwTq:\ٹi#pr'{o=EGl/?须1y<$oygqcƟ9 ^+х\V {:w1kse|q|ih+F|x|siɍn|OՁ:O82F5^~-:ɖ>|]g1;fc5⠭qN&Y3f`3mNjpq\Wg;1|;uy8ߎ }\ޘ|#X3ff`k?NyE_ e L妵6mMf n/`MϮB6]+{>ƿ9x 漸;SחpO'tӞ8ϦX8"KofφgZ>=v86} ]"|9W>gz+C$fg9goZvx+ Ʒ9tmG*ařO\bl7^ '.¤#x\\R?> :8)ŝ/6'vE_j+NG6~i7 ';;G<+G7OH-΋=,GmI\?a l y)[]_[zjX'Ӳ]]iך7qpNM%ۙ8/ֲ$=fzlW?z9mO}s:w0lpRg_L%-F|26X6DnuN_{qS]sG.q1"_.>9vx7.|(oG]YΦvd٦o;szkpOGR|i{Cou6jC6uL_z~k'xjcӹ,T#u leYG~',sp58/q?zY;O˳XkNXɼϛo1WO<hC2zouƼƃ:'\1˘:Sn -E28=כ6ha*0ڌqpkP6mxmˆOdOÕ¾i>9M666 3=6žDV!\hgpvkc3|m}f||tdG".aĥON._ƏOfmo~suSW> {~q.g懶ȿ7 }y?xʳsާ8/6EƧƕ,׊OfÄNN׼`mt#ւÃ_\Gi=}o)~"^y0qKp'[8l>fqvav!'b Q/<9wlB%x::stNˍk纉vđ _9öorbsX0 >:|ac.+$bR::Y,>M^yjm-[G,.|3xz$fxf`eZsDk\V=B5ߚuzvit)\kGf׺w':pg۷h񃷶lP'[ \#.Y>NfTZܵ)1 8;8 }?aox?-㎝qʑv>7E_7}8%g/8b^ImtC_߸:7Ǖ .ՌqO5t)obM}>>ϜC8~fi'0c7=,ϱMGO31l͊۷~ߪ!? IDATʟCfayOd?,mڝIYbm]eo-ؖ |+l-v6g^g]zgX3f̕c-شrfs ~^tl9jg3cȘ cX7mHDxf|gW7m:I/>|*6` 6Y9/]ی 8li#6"ي: aho>>D_N/8/76ÅO1;Jחvc+//{ztrL|ҧN1ЯqӞtxSaC<>{1 6cq-Qv6=y).1僎7W/|y0ClQ7Qs܋)v6g8ӆ<+|)-^rNכ|,8 ;6:}LQK^6'nwƅ\ HZSU;>Mb(|Ņ[OK owy)0u[zn"pAħ-;z8zS5x.õ^/1 ?S=ssNC7.l[t CuMRrh0v~~z0u>Ń^cf`+e6ǭCڹub[, suc-z'~k:{K:W6ouǺcN75-zbI"7qGܮ(S6x9.>N_sG8q.r/a.G9`%_xD;O>aGįNOtu'z:F\hةWvy|<837x)L1˸%Wn{&^<'7=%7F9I .m|QF J<$Cp)7s;d1oKskuKA~%>9#â.f|Ò+>~~G8]7o9oqΆ/ D\a;6 0;_ڹf[+'[G|y'OgpfG,ɿ ߛ9l]8?'>OOfmc{3LD~A'W:^!>hҰFqO>mt!s&=|A`șbl[t׿k]hMZ"mͪf`w6ۺίJ^J:zUyEu ^m X3-j_1ɪf`oCv3kKFL{+mꍃw3.6mV臗&P U?lmxӞw?/$m":j9=qs7N7j,f!6~szxTgh_S#VxK9c[ܵ;֖[WqIm̓b3>QIE[?T!ֺu֎#=]W6Y]' m_X;|80àORg&4.r\O}dx?~pv?ӯ39øģXO sx9{)dOqN­-_JgsC!p7ވ_T?^5yg)GO?K bjlO7@q7*lzkҩhSX?g9GOծ.F>;55D{sIlˑs68 ]I66I;1ލ_\%RU G|e貃bt%,)Mm՟s?ۍev|AM~ƃ^WNg"I9CJ|̑>Յ43}/iyç\M6pw9?gGݧa|M 6 Ё;{dc[ Ǯ:<>YopȾ䂾6_&0ǎhϧzELorr_\h:a_}kl/w@M`͸ scSt!M_ʅ: |[~!A3\ק4~8wu\ё}R>g}:WhD_e/>RL|Rt򧝽#}9>'m֙|IdOj'Z' i]`h#1(rclN\6vO}S3 7W5:|<lK?_uG~" _8/Ώ7]61A|'?ə#|ƿ19.X}օ~ӕC[~O9,'>=71FtG[hOWl?ūm5[5d }=}֫u`-F4ѳ>׷ӮYωkk#lq?Zt޵5-oy[s `kmvX ڭc]|/>o|`g)l?8k7WQpW"-t\ʹ0OoT/IͯxgpaN?On|Cc6 LHGq[tL1ħ[pa4'`;ƞ? vcu:X1~'o'0b>jݦ?须Qty4<DŽq5Չm<{1a/?֨~}Dn[ȇ\N?3f>8nwhqc ~$XIM7NJ/c?}X0ܷ ϱ\i_yiӗ~յ=v[=S=ZmOLy8x-g_1m?~iSFe<}ظ>ڜ/tq/C2?i/N9|K^|Yk|܊I܉_Bo5k XKV3ຽ7΀uvMU{M75X}W㪱f`+'2WNW5kHld)nliQ&Ma)fsϹ/adߛ+mxa%mH:c&|mN:@Mqx릒W}Ɓ^̸Ѓ; "ϑB=p@߸وV\wgs9m4[;q}x>r_LboM?.b<ʫa˧9'\xӎO>9C9юs/[+m>bڍ;| |G>SXp23Չ,~CƋւ\4po7F8'q,li&^aȿR._xȿ!:]_aXp}k|##f:oZ:@`:h. X8)0q#kw]+|BuÈ3y6wql/6w3~74=bS?l6㏟#Gu%qhʉe.r_!W|Iʯ 58jﺭ'1^cK=$3 x6~~CӋu'y7l qC^btNzoʯztk^p׿~N6X0?}oG<$sЎ;}mĄ}M./y.?uփT?⏯>R?~of^YtԸ76a3Oю*O \2kߘo sU9g*}\YX_Y\q 6d`Xõa TlVjM6mjو[nm-vXm)^aMm精aƩz68C6jn_ߦ~\յǩc1[>⺹/)pM_[~M+bc6xmE{C_GmasNxh+.7p^6e-N;dsa'y~Զ9~pm8-燺vs%\䧾G_<ߜ#\A䟞0~Ϲc,Wy\gMoX(x8W yX llЛYq痎7zCL[o#?A?a_N׮NÅ6{}|чY+|~+lḌG ʲqwʀ9nm׉6rRZ+ZgD6k5 7Y-מ~vv-,9Kckw䳵NKj_^;}HƃVl7MgvڌD<#~Sc"l|+aCo^{6|C̓`=l \QQ2(|)Kb_A'|\+uMA?^3}u\ߎ̘t9b}NIu?>c)gÉ*)+a_ ɹ~x>1/ÍƷ"7ن0?qdqs;U X3f`5ے+Uڠ+GX3f[wUn5[$6QSFM16 mpߤ[fe}6C(lfsv6|JцOo&=mlFbmnl kK͜(‚ W/G6}s OZp\E?=Sr|xIl?C6Xڵq&2WcOŵK[kSgGߚϵP֓՚OQW;?[k]?wmγ&#6 9bq]~\q3g\?&ne")p\Ǵ֘7V 1˟[zsQ|#%c;Est=_~6[+^#69,wS.crk]k7f㧺.dW?مߎg-;^ڙG<,L4䫱-W8IY9[D4.[ ͝8сk}jkN'~眊mo;QJxhN osZ16E4fҘ5ݫ>עƃJ6Fν\(|\`wk??k3m9Mس3}?q?_g<Ö~sΙy3Č%n`on,F>~37eEߜOErgw=X3f`^\m+ez5fu5ۖK>vmv5kdljMX6{݆37lDj1gZt`O_ Rbjj6!n^upCf:>z|/6 }9[]6Ë_q G&#L~mS^?.biצ5lE=lgZ͆/aCA [o~φ>qG>kq\OߑSi^!l`gU;|)>|.w>vjǽy(A;5Nxȇ~q1^6ӧM0Or+L\~1jrsQoyKy҃7,r}lփK=}ޛI߼Gd⮎81ʁX]/k>7Ƴ7ַyʚk1 k\涵X{XǮsL5uAu~]'\]{->Gl]$0k϶)NO~>asǷг5q<V>x}k {6|+g|H-}O޾s>q$9ӿxH_4iOy=bi^*N'1sw$bn.{=+l炥 pM!gv޺q_*3ε˽vȿ0~wKnؘp<#]C2*94Ʌl7c|ƒnrr_X__50:!D|z#Ɨuc o.\ˏq{őGL79:Cxy߹1Sпʚ5k "ZuʕqE9|3^'KYۯX}ײ]6_3Ff`7%6Hs_3f`5 6@"9n[IR6²G=}sÌ[~?~۲e41CAjҚԚf*}5OLN*n( (J.aX3n+GPTiwI Ƀp;8{r_G:0% RNs6CKl)6*e_~as.Gfes3+^hWc kq|yG%aqP-^~e[6:[0\O˟kE=',5K<6 p|/e+lg[}X]#'_,?fxY:Ϳt.0][ lxg9le\͖C=ވ(w@ɻ&}ڊ\&]|}x|5?_vؗ/D\oR/s_ms@7]K2+p菲sEOU. aƇ}|V[ii}6ĥm E֗5ZjF[g]':l g?^83 nӺW᪟<l+ ɋsu,&wמz,Ç>_0E1&MF }Qw.g|} /0.m)|%PߍN{SkM9Ϟ^=חQE[UmyW_\C|ڋ[l䖶9ZكAd;^g{"Dl0=׷D_1Ƈ7ѿa-b=Ħ.?tPg?\9}-sxuM}Ɋkl*lsߖ6nnr9ɼN?ӻ\M?nӣƷM}ufqO܏}l˹gX')!!CPmV'Ϟky`a#CR#5w͞kz1lKkO.7ɳYp)?/كAM)tʅOjŎd/ڃȮO|'@CgpWStM!|3'1lGP]sO͵3~&?}J'v!c.ʗ~k5<&>g||ׯ}X/ |ɝ(t'1臁<;r6y6d¶<>7?-5ٗsbǷ-6}-vʯϖa'tIGͷǮGyҏk/>ů]xF |v9/]󅎹$0a7첩/2!sG_:c3Ԉ]cF׸iӑҚ5ևF+k\[_jYH?;UZ:~ya#C_GlʎFb}&dg灊率ee{Cn18_}̝㏇cN|oza۾`!\{O_Ȑevd#/.Μ󞕌8t_":ˆ\e/^3+?vt#liÏ& 9}l0-b9'bh8!#1W~`g&q!X5KṠ=twȇL/?|"2MrI^\/ {92_m~9a[Bj^#iu}CA]veiM~6mcvm7מptLf-w~z qEJ.cjd,}{ 0O/6F ҇7ɻ>of+!hf`2pe{JW.}i|C[U DL[af~k]oeo9*:k X3p;^߿r X3SeTji;B f9${M 98dÍ:Ym$Ad;hCӡGCM2A<Xjf~lLw }'?bcI9T:dE#6tR\l{ɋWʯ7R%m|mE?;Dek)_~Ȉ%t"G#/-zG^[pdX&Mrf,ʫ5nɿa>7[2 |# ՇX5 ƄM[l q7qF71[6xġF_K5m1Ħ\l\q+p- {~ Nf-|qm+?4Kl{Fax/pX\3|ɝ? : 1s/s=< h=igY dm['x֣=Zc]DcW{][{ͦ}Ϛx}Y <\d!k:CO/15rG¬C5b /n|9AX||}k#֔>7})-wgܛN?}.ts^7U#t>яRya^:Ѹ>旾d ΟsŎG+737<9XG#mc2b<>ص/5kv ]m[e\]1IYkؕ_bV?W u{m+o޶VZ3f`5Ak:ë5k -`Kk7dݨ]u@̡Yde?|xSMF?9wO/d;p)d[Jr3sI]}ūo5K?7Ŏ7J~Mmlnuvn!~n-&< Y6؆Clr^A>|>JTb\Fei;WwVȆܰCb'A9&OAűyn,e']'l(jl>N}lyb󣈱BΛa<_в%O#O,jM!}r vg{V\3`.#s޺P/F^InX#m2t>r̎=_[([dKu:}e?=S7ևf7>HK>9@CygKYƀye'=8‚u]_fz-7&~ynzM7<7B&KbD 7ŻyG/;a{y(^5^xf[m+VxOfKj>7=u16On>^L?F8y]ӿٲezM/{Αu1?g}c\29, ,kt&lˮ_ 5^Lx^6噍UɉqG⯴f`5kv xC-k:5wtWk  \qn֞5kv 8sACrv>7>EðбC1Oס>G!+bd!xjFS"`UaF2|->yZI^oIO?Y0q)l_|ӈؑ_m|TkˏOCߛw՟8ـ.ؖ+> N6_LTt|lf~OLsӈi;o%y,p-keV0'G] t|i=` '5O~mr#V`;u [m?K ZΛCa)v?ç>Q[YxWw}+T>C'S傌:4VKl#kJ6矎O~-c`%/_jy@tك_v2L0r 2/Og#d1!0{d1%v7نl\S؂5n-F Mq_}X ƑY|va.>\#4O}J\)׳gۺ0沶n=Xkx 9z&9<߾B7.Ckҳ~Zc6!KIL`Gk}{RVt&md=HsxH2bc|{d{*[|Qǎ)H|/SnӅJynȋAl!ᇹam3g`8S¬vƷ~HoLӧ#y1f?n7# wݦ[oCqI|z".9֧țozLoz˧K8{ Wz^&c܃3~k;xVGt:o6_r}89lj#1CMZÑ9߰\fKaa5\pӻOq/q'.:k߈}8oΏxyyŮy7{o[6c\g8^,_7hlzlG`^sgZGI>L_|gGL31 /sO?9Ӆ]H >ȵxP9<촷#gQ[W3Ϛ5;]5\>+] \*WK-m|_ڼ|7kFW5Olض_gL+>ŋ.<ڈm9 y'|g_@NnZ8|>P|d졎F|nmzmsؐ =0x_F1҆cx{)A_\0Fd鵋x@g,x7~u˧v ;'?971Cs)Y}Q,L~dEk6v|ezub1bjGƑ=9/ ֔{}pz /ك YF}{ 9EƜl]5CKn?~fH[0Ɏ9Ɨq3kZK;la 5%d|gmV)&'Wl.m1~;\LlEF7eׇ͟g{=c {||s ^j3wgO|ۦ}fy)ޔdX~l첄?m>dїMx^av+8xTOM'=>{ig3d5nXk;8#l҇m)j6Q~27dKLt5͟>vhN7ⱓ:lVt~f:1e/,x6|~Pk]W Z6]kŁvO6Bxe񒛅?<5~Q|Y{v4'LpeS[Q'ߛ!\/Q b" {|m:5l%?_QmuʓXh/ IDATW?ҏ6R}f?Sx셽66㛸4M&,w7?'{t*x!l /,\K\{(߽&Ax'~esRd?vMe3]I ?[韷}G1r)ɳ|\>JXsl,1ʙV>5>j}vmP>o}m޳.k8"<msMo<w)d2]pZ`εOtLgPq09l8fS=Oh!?`} F/_amvK-]|D.GشS~bWa I>6E?&_Klj}>Q<̝O9 |iή-G 1>)NlcA^6w>6 W9})n};+?KȐYm|Xăͯ4jFZ3בf>m96fX_kKFۜax#vfnqc:k1.Ɲ_U+d\Ac<҇NJZmr O>cSb7&}ţ7$lO{#6YT0)~s&S|ZNsLy@/~h\Cp5m.Ƚ!7}?l.jqbC~ذ.Z83VƏ 8؃-0cf6G>gcN^ُ|1o)O%r/>e~_غ~o6=7~LxӦ}􌓭!.z}zԳ=KÇr㑋l'*]iN\!/g 䍥>y3{m,rc*^`aO!CLky&_y7g5gѧF|'Y9.>طVʿ„{+g;~5 |MOko>1N: Ϣ-jO<x_Z.dG~dw/~4}[Sl۷h-[6CO9-G0!|8^IV`LM˯ָ~}ưy:;[X3f`3`Ỳڠ^׵m[0Ȳt>i*We}+f{M5k[Xn횁|rށԹ S;UQ. vFBmϏL8 a6}jotXP.bu9(T`ʾ7/yDwACMarON5<).>];dDly~jو "l#xfC{)\)d,W$98~rɿ\!0r va6ea>>+XcϾqnf(xԆ/xu/ |՛dا_>0\?eE6ĥ֧V`Aɥ[]'0u/rߛazAFw*M9s]r/67}O!/у'A~?T/VoeX# ͻ(ʇ6<3LeM^țQ昸`s~fcZPsdG~]30kD>Yf5;PYZSmGs;޲Ȱ鑵n]i/KZg!nofs`˦6yJu/uЇ~p̣x52^'M76g\aN9u:;`aOMpŏy#'>b_bهګ\iOn[ڽ}v2ި-{hڏ}6s0}==؈UgQ}w^GG66ǧKSxz]{OM36俼ɻy`>zp<:~D۸ʱ6|jDǘ7Jy| gkq/$<.#xbOUz1~h{Gm2 3/zO L9q6tPG{0fbs2tgzNnʹS-6=2y(xM93-|0w|6s e_8A}b=9fYxyL7 |pA=~zMcܧ.MƏM!7onu08-8}u̎ɊXȵyXɮf`mwlkv`GYQՈ;ċ%6v蘜U~Dl aFٚ/Ɵp_dbW_b__2ҁur!L5e\VXOvнwrl,!lW|DmcC{s.cyZ꓅CɗvxȨYHbY*?"8N6"Bb(0AdFVFSP Km\b3xK% ?[a_nd?KNq%>]r {k8|>7˰X1`>,pVO"mH_ÚO^9"~~腻q,Y3eW6ke6m%Z_8'V^~:pjdWߥnɌ7f32_/`gQ7pӍkŲև]Ixxjgx}@7z)㚼oeiO„0ߎ7ΏY~2O~ዦo_C2;,䟟0G0[y+Θmzi{NGcgzm'[ ]~c#xŴ0O|-gC0I?/w̱:e㉹<CfGWidS8(|[a9ش~Xfc+Ox~p;qq7>7J8ُ$O\:Чh䌜\{zb+ul,,|5k ؙ2un}-on.;f`#89YX3f`!0š:8sFL;Χ.}mm>u٧6aOpN8wȾ>ؖI:tɆQ\ٓ692AvN'08%!vцs=}R93>9a/<D"rMO8Em{qv s=Kv.rx}vӧe3OZKc[~c7m4t c^8i+ڈKxr]#&"Җka'^{DS}RU 6~p5[.WaEw>И^r2&dod 2bʆoq?Ƅ.>Kϧzާw󌃮<#V~i]sD>Ӷ&&#?a>=`_qG,t #Y~a~:jXjOٞn_3?uJkv VZ;X{==GڃYr=Z&Ǿv{=ZSFt+wZpd}} rk[ӭq{nG?Y\~=siϙ2<,s?=KȏɅ'|{㊟|Xf=cc?ӝ4cO68dm旍l!7>alKƚc&CMσwɣ}lx;.7j$njx 'L3_?|c}UXo8_Yǟ]2o`3nXhG67E&}+C"=-}u h]:=z &_7>y?W{Esii۱/6|K׾5k \ \:k p`Ƽi7p_;4:;үM:4 .YgnB<(؀Á>ar@./}(_豋Wx ;2:t͟#Vm u`IOLIߡCG8ƅ>$gl;`dp84;+Gcwƒ,r%-||ˋb4n+>YXPmU{Ɖ'8}6ambCCX{`Y,| 3} ?Jmoⳍ:l69k,ؐgMm> eWܐ[7760+|v%/b@X[G٦K"3Yc|k6.{lٲe+b2Kқ&0MoJASB1(IE5/fns?žye9b%cɰ_I7AS5ߌ1"/6c<m|xUݽۍzHƵ~^u/Xe195/^9ܖ[`K^/^z };='20W{0ЫO:iPMC>uƏ0셰 op""vm袋fc|ۋn.kmg5kv ,׷ۥo֪ce?;V>ګ3K[%o[2dK_߮+Jk &2~js6~sx _M0}UQ[$.^<w]OQC:^"ǯB_lůXM&CĐ)'?|z-CM&Ora㫸Kf\Pj;٭M.L_{u}P2A |>y`;q;N.y5~~ocd)Kx-:liic _l|ˆ~0U: ɤ/k2.{Vo9k~On/C|ɷ_l+xެjɖ/"gDNBn}aRqm3P?M?eLr |wF:0/e$յxɋ){ٸ<;[5k X33d`Z3sMzGuM_mX3f;eY_}X3ˀNsӤO 1jnb.?ᘃB0cñt>yO4CW }kX@8C?3!~|J-5 ~H|OOGm$Awoh'Öo<?} S~ C]0&qdcBy_)mhWj˿t)v,y1ycrYg?D5d`׆;rF%/ƋMÇZ>u{c};"x IDATV!gp뀝 bۜ ~vǗWSOm$F6#N7]"Frڧ ‑]XapFҸħ˞i99=yCOF1Ajaa_~5}A.xkЯMO[l6Hzd693|36lx~X'Ɵ 0] xlKk}5QGO'~x`s^~i685g&12{qWr"x.֪17k z-5;gѶ^k}f`[Ez2pUU[\{Uٖwu`욁5kUeU5kv tXknܬ90sPᖃVi(:Cxr';;#Ml|w:TOa&M$xp@Q_[riC䔞y!@䔫ݡ6ħޘk^oKö"gJ.y;,&ؗ@3Sx.ׂ=_쒗vl=˛ &l)'SO2{>ؓI,b1'#^cfmDSshN?X鵖gFq/{F{D~~ɉO<|?dO0ɍ|s d^_نYeW(&c">| >;js}6#o7K ɛ2rc,䓞{lz#J~'/b.a0"Қ-歵kn[^!ڱ'>g"5&odzXOڳ8B2lZ\D{O_xtw9}a&p_baG̮aڟpӭvt`̶Aď)tӛ>^51 ycydbK_c+rŦ@(m!v>G ymȳyÞY?#?es)NG=f_`湪- - ?<~N?r'2͘{Ů#~'O5{ދcwekV^Sؗ^3rl;k2x^?^}=aնfa4/B'8)"'Sky<Ͷq̎38-V=Gye>k$a?{h|g}C#0 67_ 047#g]a_>=یoed>rbgӽ nwی & l7Ͻ`N{XEcq,O7a`#4xuh:vEeϾg:szL{c>{y)3//.c_nC0uA/x晃oEŪw޼͝5kv kWZ3f`e^v&{0lefܷ^X3f̷Uw.n7e禋_[톬0r沩vMwzlsG%_!d-CQ<6QGɔ #v$ώBⳑM:]G޵Nl8C6ȄO_qnM"e~>r0f˛ӧç9" yo5E>|dzR#jds2xoWK_\*țv*>[.gj}<5P2JXR ֧Zt>kE?yD}&՛)Y|kx#o 'S}Q />Y&;r]{f?<^=XzsM>Z¾A([/}=P+.6O<k^,'6,x¢BvcF5?o:a#2d]89k|O=o!7~ve7W`32r/N18]m^Ơy/kL61Glyre7W%m:݋d˶+~W|$G *:h:ē(}2ߏF~_gϚ5k  25p+%mY3fນ˞*^7sFf`u(:vρF~d9Ԥ5}*ѡO52wx) x.`O[qH/xt]' j1GD$yvj?|* vCAW/x0~5bT .xjFai׼WO.ljag_ّC6LaGAɚ>})O6 ~'ɰ'^} rÞq޲ėj&&98D(\ɖi|O̐7ߖsO~(OZ{gK^}R~dďIV/֌X6%OV9}ƤȹfӧZ[F$l3>NOIӚf ^ O:sy2q{_o <,wV7wƜog2{;Ζy>ۧx#n`\zcX,>fsƏq-731aɰ#obcMm9SӇkҚ9։`n#kV|sߺcY@zE{Xl[.>ͦˆZ ?;p vϟ~]ß/{UफOFlG z:&/~m?*O¡-&l=s/Wlh&OkX.!?ui'rƘ҃7y}|kmkɸ/]&/_|ˋ>㫍ȹwe=ɘݯE r7EO{5k ~3LȮyꠥͫf_]Xݟ]Y"[:ܚ5;wev][3f`S܀)n:rՍҨów!~o;pC@#=9h릓~7u(VF~93c7H\|(Ǝ޼6~ģGjC޾(_l9/n1H]?9 .y%MMØތ2/6cx6a֛<01a֝!/'bK>mܫ7vĆGOVgsY Oۚ2y271r֐Aך~`-Z;'>&}$֥.GYp=8N=Q_ak?I|x0˅ق'*y-b'^try$vox)>_?CU.Fd?ϸu/9`7l%_tt!wᇍ8:v#o1y+/G?jz6[\d`:5ͺ/?n_akk!w7O(/|S_Vc=y06\_'o/F.> ֚~HAr,*$w#ņO2v<օkm<xaE䫶>EzЃ0+: .w˼v)Wi˖|q?`abE3fƋ}~ځM6Ņ'V؍<-wƊ?d'I?]3O>QKIXp;2| ȉGa_'ÞAx< S]7W^0- qt 8_i5k nfڼ}HWZ3f`՝ug3[3f`πEf9r aW7JAvFVqֵCGl;].&/_qHҞX;pT"vª'R:s>%52<9|t I.qXɾ2R3э/Y_]d^\ǿeLK:G?,zM_ kÓrI?{x6c1\šO-C0(G̛':WPC^qM%<^{t-o7֭6\rUSY§x,{,q‚'IOoŦ70)*gsM^GiN?]8aH&ph ?a!\RΥo&%^F-ҞO^{~6G"lÐ_ [/FXWZ3#g9.kZ/'ӚDxSuɎzIT}졥RO]>Gig'bl5mzC׵?- [.kVh_O8Ɇuv9P5\&~>p3ҏ<3oC2?'axXEުO}t˩~|?5CﹿOkg>.Ӯ(gL7O~#dˍZ)?-s\ŕJqf>mvWBssу| ^8Mzj2az^?P|j+=@mbs??QIwn?^7r썣"7lwMFlttc}8QSP5W|U,Wu038B#1brr{R/ }l+Ia>XɎ:ɮ5k Q3p]|Mylql8Wlk 2~̵Ϛ5M\9ht0'yLS_ް Zc|C0g6u@<)|=Gmv_}>ǯO"v}ְ9 ? ;ytS{݀凜?r@&bwdyӞl߂WE<#n'}Y~_:$W9M~l/'Lxz9/)˃0Gr{lqf5VvB"gm O9O,apM2ȜćM~gXϿOd?q+,|'m#n2A /'tĤO[_1cOOV>/F}9c/obci?9LO様>яy7ЅS,&[jq 1wC~b{/'ExO"+c;rE}X&v+v%C8}Ow bOV+0=6'E-gj+Q3`-V5d!Z1ǭQ1S165nX^@اvmѵ֙úw{h#϶oXmqn>>6ჟMmoOk8ҷ"G ص'$ ?1F;|#̦/1G1b~LVB~;ޜg6doO< ֽQi8nrӟ6?~i}Mb_3G\#gx񋧣dy̿8z/rX%Etd"k6ndjy!^~ V6]8|3xAF+֮y6ٰX}l#̷gN'WRwg1fxPȏ~>|}[_O~lGƷ|juć-7Cq)쉋*&yK}dI䌍φw޽}vU?Ah &&p Jo\,I[@nKDK*jDP+UE ((Qzgpd\s{>wxÒX]ҧ# =::5 '+n1^zK4ǵbK,wOqymt ;LrSI=ɲUx9FF/s8I IDATFFPlyHai3KKg6+m o#ѹx6li'x3b#,ƾk1/pٸcx6ֆMB¾68hs\ب 8^C?~]LU9Jo+m.-_sW{l$AN6/ۈś6JŋC/cO}l͓W6{& n6aGEŒu\0kxRg;lwrcPOmxk1Ԯo`ݑ]q/pp!rO7L#8]Pg[qt'k4i4vϧWٜ9_~R09;縋ώ>e8⯝\Ϗ>Ӌb)b~oCJטW`Z>C7?}Ё~׹qf;'xÓ7xmプy"ƒ69^{6q(oظiϸ#O0+g1))N] ?#[$u5y]1ImuܺwUwdn;&;;뎭u>֡kCמk/ tI]C319zA_ S{kc{;ȇК6ڲw7wZkq '9w7Öp\ |GzQ8M8Y=7_ _Ǟqfctod;~;IK.Ή8o1>+MYw;6sΝ_ءzg{E*c_]?j&>K;]oM'ܟ8a<ʣOsxS|85f1?Vsh03Vq_b(\/K}|ٱak7=3:WQn~?8O,n~ӃG֭YUti[cwܙל>)ͧ?omɅw[nc\Dp%f$ĪݸGN5-o󆍣QwmY6} =sK-u_0OsE\847/<xvÒ s//9{?!#####ws6˸lȗϻohLvŋgg*p]7FF 껯D?g3!QicbӬͯA7[ l)ѵ9GmM7.c=xgKRߚ[mzfi#P~\m_C7{9Ze_~J>/N)?06ˇ_u6sG?W>au9?p㨐a[,ǛLGyEs*s=OXgOGùtWCG G{8-ryM?6҇EO7 m4?H[ v1ё1щ_ugHlÂCȫce[Ö|up զ|@Aؚp΋~UOn+z=~; <6Q?ɇ/Qkݸ+&'q.v:CFrѺ6[Q㺽n+k%G׭.lXwm`kmk]wmqUHyr,8IOM:Ob^^&llߑvݏ;x{#:r.nm ~˟WCa۽7U>;z{qCfsf6Ə~iK2l8閷\qO=uRN>%rĻs_~[['Gjk]q\jKئok0xtc;_pW+ ;}.lMsqX<;:~K"'7_C\guoD, nZ[:rC[hx{ [Ɓo~|q-FsFlXKMݘ'=r>į_9/&7^8с6psnN)=G/B9|B}tć+,ʞOąo*Q# 8[_84wN#G8 1SL8o/a~!n.<+Q| 5\CG9O`8C̷l'9ol|`7˧|tߦO.7G圭<S>򍳺czKub;=afg?kWΘla|Ĝ_;{|~,xBn"% 9S^=rn~"z_~G,si/8f=pM᦭⾌WD+Vy^$frOMv~ˑ4׻i\m8og|҇6<]LBW<=N|4}VxzVZ筃Ei&r/W0 XsK'uvW;ߋ{KOO_ڼVWzLoX:S{R=Gѯ헁\'v3=kg'78 myAKv]a㗘'S]_qC[c/|S7-oև|[~gd`d`d`d`d`̀{(=nlN?gOח񬴧72f`(Fd###Ȁ.q6l`ڸQ&Y[l{P\]a6FmnC9 S0ҷfNyơ 8}az(gӏmm8{ևHmꎰ©]_#=-fq+.Xn^r< Ss<\L0ڐV7|)& Hp <<6W۬5GMYo>EMwMTpawUW-pVؚOY[0ʏQC _N'->Ė8ʛcM. g/![y;l7賕?p?։_i? .Q>kK<Š.~v~~paS6s#&pޜT'|u7K]Kg9ѿG|5r#yScJ @_<ۜ1.8(822U3uڵu|w >?s漵aMX/+#lpjS_kWvq ڶNh=NWH6|ǡuϵ.OZ;ͱ£:9,F<: b+Z'Xy9k|)aび}h񂩝N:L[9Ymo|x.$}ž/pgh9 +tqs/}g={ǟSs09sN:ӡyb~u'3/[ϧ'/˜}ӦW`+8Q5=Y9X(:˗{/=gqieC?ſ?5>:{O\p1f">ĚmL\|W.=}pŢA=Yd%~,#{[|ls8?/jzX" <]rq"N ]p<ϜyyI]NÄcN8Ek˿xY/y=>Mj7_W{ U,]z###JƋ2H8GF =`ڜYM6Hk6٫\c Cv:a+08}q8I6؅C`QaSOjk1?X{|H C6Eۺs^NyyY~k_kgW>:qb_mᤛ]t诋 pâo.4埰!|(jԟi]×vʿ.=t#ε?1°atsk\+onc_?]qQWpQ~g/FGz8L1*osZ;[NqTpkW(9狭ݹclӖzp89Fr.5>N#}V #pg}0Hүy6uB'CYNcc(dv5QS>յeOr~QG,z_o0{ ;6j!:آ%ӏy?.Z8q_iAƟazMx,q);jזT\Q/O>gyA8!tݬatWF}1c_v8n-| pѧ1AzpH//%_<>ɚ0'Pz6Q[߈A m٦6z3Mtŋv|"pএo߮k7ǧv9 6WMl}Wpvc<b#|GqΞ+/(0^9ɿ69RF:Y}ѷ6[qRs9Ql q.,9I?6qUl|6{B5T{1//@oOU NyW:ڊElqlu7}?}K]U68(<^}kw<1y·6sJ.`kŦۿյ?upÿqi7v~b~hh6үE&t>` OGmO 9/.q7`}rW,<ԍf{~_zS'ڌppl̎X䇯rx|,9/k*垾!#[-cX3!ۚƬukҺp5G6]˴euq}hq ڳXwmOk͵k ^=,m#YaO`]s}7?_®t7|\/+在Ә% bѮ}ubqÇē5}.񠣔7:?Ήs<untp_|vcN~Rg;v̱gxpyL,İ=F/ɼ#̜rrѯgb [u$ ӺJ}~q*M@OT`8c_KR=}GGW0i@U7p5Nl<=g$Fq&p!NGj78~a/s/|bll66=t9g}mۇ 瞳OxŤS.o_`o|͕u.N:m>ӑp;:lۘ9Ǖ^M=>!,q% u/ ?r 3|`7> G*\?[s3qVίYxM`h7>D,p\\N1WWʧvuvz9J~|l vrƑS6}?O[?1~?߇X_C:֓IەW^{s gb}\#Ns gk~s,=8!&/s-3^2pN\laͺ&|@8`Io/ ~c`!8/n81y5nt惸qQwM#Fq؜ 9N扸p3#tbv.X5nra8dd`enmZC-ڈ5߼7ǻ޸XS֏:kG!v)ъun-֬;8Zv*ٶ.ϧN}k~@{\Hɉg%m|t]_D.\wqWO;|ŵ ~MWct\^Xay`O8|k'D_8Vt}y'u/uNNm^zE|c['1b#'_??7<椓7$sI'M_,Wd6pE/ːO}/g=k֌_>/ՒWl2vo36w/}$4G69i p57X8_zBm$H{.>r$.c͇/X[OW_s/tسO._yO-swKz=Wl3߸3s<}w/_j˯9umR7S=i77\Covy'(W|?wF~sX?IG./ɰy#:N{1 v6ƃ =@Ġ%baԮMl\3_?####{\\_/n ! IDATiw|,nfwMwgn<\[FM͛.yd`d`d`3\qld0큺j:6֛vkcW=i,6m]ɾMz^lKVe-_+Ʀvu+w-ΊuY@1M 6퉺>9l_s~>W[o͎γ7bmN9m#(^:*/;]]J[>+wm:&q*ï=lwʏ:|!X: bj ׼ܱyTa8n9}чs:+?|E:lhdqzyW8#>PG;BOR>A$^{:'vJg?mCFZ֝yOw 1Iڰ\_ñ^:VJzcc}!Y[}uJkn _/GѹB^OOXvul)][n]9cG}k|7|qSO`՝c?}tͥ0맫}v1/9xI'4}mxp^'N{Y斷OwE|+t+<=Y?u:y[εv 7l66~\Ĩ^{GyprLߑ+;W_|7Ggw^~}Mq5)z_K؎q`~յ[řGr~`׼z|:'NΎ7t~u.Z }\O"x:CϋwEqI:Wʅ/lοs{`l#?f e8+lEӜs͛]z⤫_6خAl4 l o73г㐑%WDgoj120202 0oCM,~}K6lfkSF=^ ¥mh|3ѹoУߦ] lvtms=_61կ]|osaLX-N,%!u#ʧox+e6I}t+hYˍv8 1ğoCLu~-};ѷ*E׷8-~}K`O7X}{HOy(f,Ž=jJWל4[>~ML8mgKhS/<\Kn%b!ŀ1Iږ+G~uXxp⠍NߢmW`9ǥoߚ/q|_:/[c x8U‡e07}ʖ?x)~Xw=7?gbN@?y2b?n|ezRNkpnjgGH9؊qNǘ%l| JZ[-x8aGypjhqW~y p僿!#[1w]uZqkzkZ}փu53gmֲk3֞vuOXa°pe #=C:?ٸ(λ֧~u<%rQa~-.:ZٱGpuDյWXqrЫ0q#;N8pc+k[}HQv)G_y_:<5G Nyn/9? O{tܙ/,WfL~)E.s~ÃQ7Op :y'7^~m>GLr.L5^z욣<ߦXS)EakMaצ͸ orG}e#N}E"qb1guC3W5⋧ ^tǧ+_οBg=sz㍿<;޾Glȕ랺z&%|yϰЗ_]LѮ1NstX|O.6g=뮥yqt51c+oZrh\>?gɇn>Gc@O_|f|WFed`d`d`d`pݑtQߞ؆bNמ2ojkaW/{k|7202pg˟Ǒ=68agLܻ\'n㈃ eNc(Nqku6 |&D|Plw#.D g?i|pf8A;N6u`'ч8!l)ni|[.qC\~!}^H_.Wkh/!66C!G}?;pQvcϋ.rԵS㊷v9/+w16rя~tfʇ1&bEE]8)>O,/ȥ7ʋ6b6po|po|K"?IG {2Vs& / \]Lǧ~̑ i,a .=bNs322`֜5h_<Ǐ>o/rZ+έ=>n{?W /;w?eұ&igY]F>Oq} PW{+_.]~Bkv8 f St?Ŗ~][W)u\N~G#~uԯgOÌ?_8+xvVz#xqGu/9qŇvŸ l,'tEҼ6c%s_綍899u3LgO_/~fIbguԍp§oGmOah#8xđ?x;^{rΟ gQƁh3gH cγ戹FȗuW>zrmKl\p\ceȥy%k1ci̇Wp#b <r\s}GN92p͈R5-ߖ _CY푁}#;rd`d`ˀa6_qݦFM0=a%%k5Ou&:lfѷƤmd8'˳+kNٖ>v~1_㥰cزq\KvqM'kkt:0ĹYI'#R GqymƆU#eGas}JA' 6I>maK?l f`)a8[<|lMMp'P_uGoҋ.6~*.~ĬLJQ! bCюWk[} ߑ~9M<'O; ~Xqqs7>MsE=zCFb]@i8ד[GNm:uL녵AZ?>9ϝbAkw=jvj#]?j_Yt r|]EOs80:H>Ž.٥ZGN|헮$0Z VcEG 5=Z:ccY,07mɖ>y G;#/k ~|8L_ _=dqt'֥|+ 'u6ae(Q)^mlY8yZ)$ GukKn_+?p0ñ]# /I/n5K3xb%=ڌ?ӥ#-Wٳ^:~~e#/?GW]#EW?_q0[ӗ/`,G/3ГK2kԧ族pT1kpTz Yr:t0~iWW7dd`d`d`d`d`oɀ{ueoxqqGFFv'vwb l |hظYh˷6[cEGo1]mdm;os·m,P&v6f<>[x|H,6_08 xO;q!+_p }^;CpхG?EN|[bN9OO[:ƹ|IvS.qozxӹ:6kz.'qp1"u+oqg+F|O‘xɫk9a\\AǷiwc+m q7Ç}<"8E:]x~x֯}k7f1m\}/k:h[`[;ڭA:r=8 ;6s?æK.dveуa^^Z^z7yǯ_Kxd%&yom]򋿣"cʯ鷮/ KwssRr[{ϵuY|1?8ŜKZgta|ԯu5i>g^/?7CO9v {tW9녿[EkCzg1֎8~_8'gtAϻ7þ;?Ƀ財#'?~ؓNZ~Y{K~ċܡ#nʯsӎ<w~ !ls[d,iL@G}QO1S}/<6C{.:/3Hks(lbq[۱8቗᭯:Op}urJ'sFlKsӝLy,וݜq+beϑ=VFG?Ƅqο=mNq~][#gu'Le\'r(Zp|8#76>`wWN^xO>~yuǃ>6qx.|pG~ŦhO:.8+֬`!; /CLO>8.W򭰕+>qsG~\Ό':8ve"ON K>p6dd`esͰ6Opz܉'-K.kz֬klC~tsK^~K޻kzXGN'Zq&qUF|]Z@Qg'ڈ~Sյu׵_VHIg]H[,\sI_|ztϹx[mݑ'G1/:8wGxԉ/r¿?=x1z yK[K:Wl c_Or⹅-|Kԍ9h'/\j#v~i a, _`ExK3DJ7.7)Wlf4|öN+z)~|C'Tfn[n^0vo`g 2^#r+_:KX&3+X^R# GNtq{L]v•:+gpSvŪO\DzK_8rCq񊧟<=/X|\-]8׾v}x́/|ɩ|Έ,vtXyaLќy(FFFF ^5}uu0&!}OʹgB<)aw8ݑ*7̕f yцf,Ń\L=@S]oQ_ц /tŰb^ztه7xlmYcę>=E{cZ6$_H8_dNyXs}W/gmnI7g˹ӑAn1_saӹB؇݇r Dv[_5}6_ǽ )ymC9C}ڵ]B'?r*u9q6=q_8iwdȖtH9RnW?ڍ>yRs- 7t;СIq,uZ wn@] R|葎Ts׻u\8ȿ-6}Ð%(|wV΀9<9w{zgmx߇8:W'kxG7œb֜Z1ksKXl[Kk 7ىuBgmǏ|}]?:Ǯ<&ҳ܊<;rBLtFOm}kozQG/5 =kǹs6q:k/DgG؎ٳIz~ NyΎ3o]rGh?]{b#جB[+8!]####7d/ܐ##{\M=boTl"*Aallvπv[}mƞ9iiηO>Hao7?>ЅOmJ{u>qЦO/`)'\lC0l6A7MAKz0/%xoٲ!|ơo2< ?~7.;}O緼#۞[O/_x''~u}MᛧpUy9w#6/ [E,Xg7_+G8 ? 7:ƪ܉g}#>)~5M|ۙ/?}m` *g~鸆d'?xpsS8ֲ~,/M̟oCb91KL:ʭ1vuXƟK÷\Kwݧ=AK?u'/v)`v7N0b/.rkkpSHll]hg/F'9;dd`e35%޷ck_<]x˦ye߼wK2;d.Yܮ֊/: iFخ έ;lݟw_m]ЁSvuOEPo]9L~ FO Lp-n9q9?GğU|Qz\` O]S??Oa+v>{H:]|ňamʑC}_[m_~6<}gxw8 /cŎwq߀eO=YS}+&lg9^$x3~p[r1`_l<{ʋ4v_8 L_#?Z'cL:hcNz+y/u \/W]_㦏j~=Du5f9_kfsyy~u310txhc:X18A+o#/\^S=9K܋d|?xۖq՟Fz^SW90_q߹6Emigc|l#lJl\ƙ 4:6Qtj \IltdcG6s'6`lvp-jqV"Q\6~:UKRLq;Gk7&?vb08|6Tϧa'J7LMz";VçgarLpq oq7;>hs^&ùЇ8hVc1C\߸+X22U3`Q/5}`kv[ _SC~ e\:'柟>EG68֊5Fеr9]Xs\qTݺ+l:,<8w\qֵ{8>s V~9Lk Ǒ8Ar{0:Wk89,¹8?;X ;E~`e>t8`>}w~t%ڟ^#*p5/t(^8ƍXUgG˧yEG{EܵɃqGD\;GQLtغ/'85}960!𵋍Mu9g <{&Gur>ٚ1VlqUggb[Ǟ$8?Ϳw?x/Ɵ/buSGN vg9Rʵq\/QN~19۵_uC>NfAM%|O/]O|bRDž_sO qՇ޽ægLq1w22020202pdp}f{wܧNwMrv]dw<?_Iؗ2C +c{hUzUIq$6mu]XklcGWCtl)|'[$ppPl9ǡXHg9cfǧ~8<+mWOHK:"akWdzɸqᇄÞq',z\qNw8m;G8Ή6B|K6j⨄~#YW; _|3f/t~b Ϸ8>Q?pN#s/9hyG]#T7Ox'|c+/ ]j!v<|(OX_&pK;L:|7~MOE;t6quMyů\22W^?> /HGֹr(a1 褫>dd`+euo>Z+^sY o{-%{Kki:Z|[gk=I_6(YϮAOt'a9*af^?ɟz%Iq-d;Nkpr.?Ň~:w:#u9jSG/hyYK^ʥ/[|¾?St套ṇ8E[ϧ'CnXgNBs~4+lDs\9LS~y#[}š}C.|f~vzC_>>sl]᧜w}lI|ꇧ1+tqL'<:[|=x^+:%8,6C4Ex҇+M #Q'lH8l ?~0/|v/|5f*ϐ͗c^JgS'CFFFFF n5يodLVxQf?202[Fo{9o#X{m0[6zm$Sdn_|Ϧ[usky7`(pegCM66;:h9|%|-sy MA1alqH ovi VS_).boPB~NpFs'}9ATc|b/ЏG`wm-/|k*'#8&'ƵX9Ԧ~!87x:#n1Oa'~~p.Gxȡo6pև1,lLQ4_xoʩܚsX`.%.[]`v/o}X~3ގp;Ɠ\[:o}s[/r/<|s.1[dï#_ _ɗs}+lK D'es߼^#k\iS?/;wzQGo!9L}k5ZtgjњZZO :~s׳!{]1ifЯ8w pHNuDk!W1|x΁CҁN/|cOqmqKaKDË8kvp}l.iώ>p_:K8QӣO:yCu7~~Kܰb%WW2+o|zoA?泏|9(ǼEns|`z+Ko| OkhgKX+x#> {_Gɘi3?7<\pb+Ş_um,:΄{.8j 8S]~𳾈ki-| y<,9|?K2qOdpιkq!)ן}rCrAE,x+DGܮ7õO`oks7q޼ү.nx7GQ<.Oۚg|qd`d`d`d`f`_}!=m&zivf lxQf̄}*6F/w*}Ѧ -amsߦ(ƾdmɆ Ӧ>váfFt|j'6%O?*6pog|Ql6o>cw>~>Ţ^+6a󋗍G6CqlOO{mk7F|f㠮ONfrP7+Nl6|CҏԎ=68uX|t Lh%Y}z;ƝN\/9Ǎ/1IBOw=;z|ʕ66vCyeVu&k/F9(>C'N87p6~WsxԵ53 sn,m *xx6rAp7ʧ;'w>'b_a7~7._/x1E^pd 9|46Nǟx r#.W>m'/H ~刨'b)W|+8ʛqs"CGpĉ |6ksKj0]'9h-ֆ:b-Z'Iu0_>`Z ,5LqZ[[I]owүdM<ȇ{]ۑ&`cWw Q:;0y \K*oظn %:rv"qr8 _kBXlH/e?X?[}Ͽx!pI#k/oϼcN~}{7U˽K2?{ک'{E`N7sٯ_y?unucO{Yӿׂv/|/yr]/ܜW cW_b:E.>v-\$~D.[4O=6ژޑ$}6}|5>{mvt|ݎſ 1u>Q6b1H_N9>M.:VgOY3];͏mq]T׮MY曎>6W<_u]<yCذ]ݎ|'Ιu:k_cd]|tn{MKj[qW%ui:^Q 'aU)^l_]?n8=,YU]r?֦sg.[DO];Ma69k222`*WG1kOt_-C2)l맣55D޺unpxF|Ƒnzڔu[X nYlOda|LWqwė xcKWHjnmʍEʾxn۽:7+F;伧<}|~xYƟ[Gӧ+gч~9|ݞ˯ǜq ]?,_%pַnLq᝝zӇOpʿ( \z>8Ǧ1 Y缵F\bNλs9r&v<ͧc}ܴ[յSӞ?}<py.f_8z<7L}Gy rwy)7tyFcßE0+]Xރ%Yl8] /xˣxqţ~jq\6SL ц؆ po,vqdu乳<_qmc6^d`d`d`̘##TlZm6vF/O:6/!fSß ?Gm|eGg1[gqAٰlᯮo bsUo1GwxqÓoF\VNp[܉/{wKUy:=iI'*aT$kڸG d . ((pW&*FqaQAeqN:I:I]y,, :O;s9U'gQQʾc_|qڎ9+uUlhsDa 1Oh<OnT؀CN|KſO[>)=O?}<61c\>y.6E."m>%/ GdV+c)a%#?d?b/ YO9 O.őM>цo؃#_[ ׼£o\cuApǧ_m֓j7gyfS?|8!?}:8>)WtȘU~ƒEmsEna:>\'Вڜ6%sy5zo3җM~ s$]yκG:_뜭ߚtDέx; Qb}v]ą?/ W霖 69+][,tWaˑGz?_|'6}bwΖ\ek {p̯zld˹Ҙf.|oǸ7#|cnƋ9^0=dJt)r.djK]O%/D{kǸx7/S žk<Ţ->o|hVg˿`ʭk8y>LXG_Q2:?.Cx]'cw8okiclx֚|.䚷ɋ\r>η[|[/c0|p71}?V|=w﨣{mpu|l|n?a?g󶼈G&^s򯏎6X0w&7Wr0'O_v>'y!B[LS77ImNЀu.;a])9pdpH d)+8MƘzp'lz5dy߼y<d|=O_(rζ rrb/F/87УO8gzO86貣Nxȹɉ#g\!~t[/d`eVۚ@䨐wJ/ɜC/m_w} n?wƇ5BrNsukڲZs@޹.5޹J `6a9}dqsP |lyIa\X7 b]D/=gC"}#]NtM1!/˄_:6&ٵ vŢ5|q"s|9)8a?8`ƗzLʃ?_zg1~:_}[2MF[Bf|囟~KsGr=qӘ6`ȝO<>G+Hdm<a}01bP/]oo}5nMk:|Vd#yxŎȓŇo\O6yݽ_7˿^\zz);0}87u?#'_柍?u .v_sC9SEd6\7"\Xn?~w&;c5⬦}zpL#lŘxژObXO7˭yF3yZ2d`'9>ƈc4hnι: ZZ%7 ?k ,QeOVnP+9}mRYc}MP "lH%COv/|,O1َ*st#r_vm6yt_[4!WN+w,OtG=WbIO=A9O6Oc[&y2ҁ~Q{v4o`!:dWa=ʮ~`l6}çGF; ㏲]yNZ22:hkԭ̗l%up׾6=\%4ϜdvK؊ |DlT`Ootԧ߱sR:p~%H9v.fOWa?վ,ry nM>?ClE?0Ȓ)dw'9^= bAxMkf>ѕtĎQn)<;;}a]|e[//׳{Õ^2?=vs=K_vdMS΋K<\o{= ;rs Wy}G9Go]X;yL hϧ>x÷co|nΗev~W4ىܶj..Ԇ(]6gQ+OߔP\t8c,x듘>蓌>U?8PᓦCW\1}O҇S2Uc<8SGs6q7xy&-H |*-;0^~16Ū-N6a7GgLTK7"s~ʋIvݤ3L*tYv؄N1\sO >Ɗk?k˯;3rgo}piS\> ].؃A_?|KWN٫M_yӛt_Aزo^Yp$?loЕϒ5kZvst~}6 xɁ+{^tѴ[77i==v'Y?/>|Զ%z<#(ŵs̆iq'wk6}aj|kO|޵f{|<#EH;;|ɱ>qx(!G#Y ?S~:]á>qwWťMhWgXs~}㡞._-}xǻ0ņ^'WyYG3`7\o9Ɏ)6_iN >r#$Ov{RrQ[xpP8l$;u4SOXO>9K5_6}%y~h-\CsMNؑ~7Gf74Ih#8֚<Ϊ}'㿌@w|7}(F>c\V#HG+~_rPg~AXb <C5ךG7i'<_L8?^aqi#}ß{d{rUe\d`Ego90:}M*l]myi3nU|mkq)O6lͲicm nTF:mC[ 4n6ljx&&yG™? oc[_,t曒o1љ1yG/6>/(~Նox1 FrP,Kg\kO~:'<9a°Ƞ-cO mP姺 q ZGdvs&(^~ƁDǦwt^zSdyA/y`9WWؒO{~c!yAR-r u:p]1bх7y+P\cJ~>Ö/mqAkɩl& a'Kf??/e{ l?XeM.l" >|Gד.Y5p4?`+8ć'GxWs9!>[9$mrK >:-V8<3;#P/Oكk|6~d}k><=7ΰ\N/tf@sMD^𑎼G"mɉqv^jwr7H>ns9O~g}du! uq$GǃK|U^EfK l3q]t6+W(ǩ1y_4xߌ׌kG=q|\ɫ;˖槸o󎼜fqf@̼&d7ke-;3n14in/d`KȀs݆yv-Rqmdb|%6cG޽†hC!з%Ƕd`?%K lppI' oue]:m|6>Fcl6vi3Nwwkzuy_>mE=??8 mɳ|9.rAW6 [RQ:l+d*pU7s[ɳ~ȨәSx6QϞzf6%Oz~E; 66YمMt!lϾM-=x0/F0ؠ$CNLa<#"# C[<;:yvmf{B8ţ_::%|c;u|8JuXe]I^uVvә!(ᑥ.w3)z6#OLqk+|Sr#K8ɔGXko(_k\_`!儌n,UŸ{l׺cqW%/JY8ګ#?ÝbsD7x ]?h&'< ێq{ X=l?xЃ4WW{=czH>_>V'g4G[+և9(g |/[c~X_lXd%5/:M_ق+(HFEΪ痣5%K2ozˇ`~MN70]GE^O\-< _pMX?􉷹*}_˯p\$\%|d>eK U># ]&ud;|yctzC[钯׆U07{ =Zy8pawEK% n㨞d`a? ?яNqCGT>#gzߍx?ᄕI7'g.5??SK[he<:#oҚ=__쁝z5n<=% dž>W&O|6l3xqp/}Ka~pgNM .`pB߉F3uoLX6$O`sDnmni$3m iN}jC6uDgS :0q >г``ⱕnR'd'6 ܧ #N2>Ո#Sl_.oҙ?d<:l-k)bR֩ySd GxM>OW> 9S)Eu>1h [qm'~!b&ؖ#"oɒfr} _KĢ??~' 1)'5tbΨӁ/f7/RC'KwImz7YsG8_QW_d†yEv39-֧[ig &[˟Mwӟyf]3C{Z[uw?3ȋ6캧p35ȼ6s?/эRvQ/޴H+q#{dd9K.rxP99صv||rK^G>ģOt:浵/5]qȷo֬-L|W-/OuQL[F;IWl{t؛=dxW,/ok&s]72Otcؼo mwǦj]u9VntS'}(c CorηH aH$2@z \Ml.6[a6.|O/0H.d`sπjvޛ?}οyW}uyPN\{{dNnK/[blKLK ,/ʬZe'}s :hemƐÿ.:W^3>& ^ᵯ}𲗽lq~Wx+^1$cSNYPawó7OtZ!7 4X Wbx64ݨƨ͖6l|!cqˆ>}`GÖ6L,#6U{a#X"2 c|e ;6[mEXUwzv&!ưGWNP|7IM k.<iWO<OW\_,''d|6LJ/ߎlx0akS?6ϗ_>C]Oahn |!O?[Hti IDATU> GoC6SC9cstmW':oŖ13p a.=`K|l;1dMq>j7GƸ{6>3|Z{mEP6#Xd ':L^]<~׷ 2orfs<6z;UtG|/MW] SƈpQLiS}|)x,g|gt$G0{x毢9CIPG-6/i3O~r'2g<8y_=~Lxͻ>Ӹ~/~qx#1wo5yiO}4_= :V /P0~j~yOy\wIC_rd{sA+Ģc:.փ {bг;X0keߑ 7'\o'2r'ΝH >9[Mb 9 ׸93OM3:uYG:LAѹa=-yի&}:I濏m!z6<_m{>۩¾<}]<l_S?副X`>Xʝ7wqNd _.6OD)0S27/,d.Ȱ.'u/&ܳ[T7+9v.bBɸ,vਛ+r[{>soldC۽ ƗH5#3|'V>gb}ovc\8ǹO"_cƟZ51ft971ɛoF>A1H;4m<]? foQcS__XМ` ?{%xINhs{<k6MC%#[/7[3fo}[ɘ+x3oc|_x-i^a=L"=qKY\XhZ@׌okMk}C_|cq1ҵ7-1/X2pg_k}Z,.X20fo}hz7<_y"A6<$y}|(8'oys3m asLu}yk~OOD6ȔnHݠvm-r6)ꑾᇛ#rhwO?>s`&HwoXE/ GˉMCEC[ɇ|rK?=G}+Q?I/0BMƱBNqb#%0W\7RazG"musaӖ_xdٞ?}xVf3Y<8|`Fm2Qd6tjd3wmᄕLW@6oGp+_v1tDُf?8Bu@|5`9 ^d`@~x [@&~v@Lr9xؕ|V诋_S.w=iK2'D[4pNw%Of.zqki wCmO~j|!`!rs;7ǘW'GrֵWLk4gӃK?]ɭΕvcE6#;(ڍE6WG|-ώ&99 =IӧWKq;ajEo·z,;$)颃vmv/b=~k/װƍMrr6__·ou?.]8b*'x(ɔb#O׵Ldi%_3xyL:OK}e#^6^qK2f/&/ ?CܼYK^խn5͑w;t衇$?yi~.d`%Kn /о, ,X29dgOd6o ,XɀO @3G׆|O#/ɬ&7Cٍ>O^|#YoYM6 |qj͵mCfͰ6lfO,Ӷ!聵v>GMi÷S4< "n'l| 'a᧟]8EަbᯣqśmoH1ABڬFGV>mLq9g_s#'XDO 1„AObk҃SxDb93Xg}XlŃU+v)da%/9\>ڄEkoG#;'_A]nq?< >ū)~'|S9{@Krd)\,ߨX\3كϞ=c}b`#qVy+07?`+?;<:dt o\}J׸k6J_|ߝ/;aKek`=kXB u|+ċ "p|?ccdOt?Xn3[0a t8{WamL$D}uÓq[m[ y`l7^xX}J}kN>ЦˀSb|s_Z0GM?Z1y3l%[ej֠wuf6cִ{k׺V&nmqȩ|sP9El:oAΙCF69> v8_dKᐇA5q>V<9 c[ Opf}wv]OsI|W4t|1gN_ sV uO#V 8 G!Cy1IO^]xq|@e@&~Ng}8bϸ=^~q.U/vݾ}XS]·I8Iyn'G^ok=&\(~I^> \oy8`h}~Xe.on۷+srof>̋'=I{j٥d`K@qDžn ,ס&V g<\y[W`.:K ,g'@sR_2dy睷> sm3ϜTljw_oo?)OR[YoSϞ~~`]rF 9Z6C ߦ.6lhv3KƧH$ȺIS'~t,l#l."Ȱ+]GoC 1 ^7A߆{bKLG>\:O=64ū dɕ76;2:pc#Ԇ60O[~/d7W,l_V囍asc!pds6g6"N/lG|島h.iCP?},]}l .^qv`nUN >C Ɯ>1:ɍ QGyv m(_dC_Ս>m11큀:r'Lkaóo)曟߃ Ӄ8K'~ ~s\ȟu@߸+|D6l帇ubK<>CWoPC~$r"-xS,DO r34؁#I}Xd-2𶷽m~-!ϟtZ `\ԧ>uo?%)'EѽuᬳΚ>Q']+an7b%XU۬dY3 ֑vkluvk ba?~gS;h!͟T/>28{< O׹ sEaes9T޵3]8el('\ĎO9iVӓ_y0E0ss Y)~#Oߐ~3N:^Vz 1*D'bC_5xӹ_pMO|L?nz/kr9azV>|x9|Ƀmn| MلEǼ×ke>YKGWI^ t vا SwMg l./3ّbpȶ..|0æ&Kx^k.}EPc~՞{L_1~7H䍣Н2?7#0|lvS<Ů _̓b'摾[':2b^"߱RE+^:VH_A>[hn_I HcCY9FJ'NXH6`Ȗ+s[# " W㑗O?{|l [(P>y96yK8G=]6am[r-y}t~lgѣOOGgNd!u~ goJW=bG|5_.g~8ldCv':9p~xmu%㳗m1$#gj]t3"?&azr sÎ6 E= ~1;#K-Ś=0a >"?');CxƄ,b3{-(?4/}{i?L?7sxܓ6tA W?k|QfDssxi^+c$>AFL8a;U85Jf ;qGO)G}Q|uل^rx96M^ sItZb$kSG|(<j?Ώ;:lKuɰ/Tng ~ UoDŽCǗg~:nppG=b_>xy/ .+z#?á\6l%ŦM; K7nmUoFM>Hކ9z0ɓ3~6i>AOlnl#F  ' GNAts=v}r<]lW Uv<>)C{>~-7rݧ7|}GStكi|f9O4"}rTp` ?U$O,#nLC"WL:a+vr']lO?]+춁Άq7d!_fS.%sRs8:=ddCl|P"˖6?s'̞6艏?Ʀs2uDN^赎13lI!s 6l-.ؕ>m|9o*/lSr ]hdi{)~뷦oԛ[R^aV@ܽ ݟg\7kmoۛs\+ĹҺSZy9:.}CLukP0p9 Ϗ /Ї8 18k ? ìNO[Ū!C/Ȳ }9c>JLvΗp/ }[SX˗ky? aZl_b̷;]8O;?ObH]w27zm3[$Kbpq|4r/w,܈[J;_铁LMsu#_a<ߐ>9 /0& 8t,x yJ2a75Yq|o .~e& a_89p#g#t\,pˉ5e`no^Uu|s3O6^:elx~C}C贡S67DmS66D'>ٯ|+zg;+:lƚraf͝k_m4ãk3N0ᶍ >yuslѵ)s_/<6`гF :ذӶd{F SO?0Dg*x6?O1?3yOp=Y~ rg-qҥCɞClC^ch2.dKvͥ|>)Ȇ q|~:;b{働|:4lOd7>ZSg_MN &:L8QI} IDAT}t`ҡKޑobU/6:rEO>+fs 7vj{:Ƃ;4"uzbf4 MֹM\9ʮq`la\kdC0|`3[kzp'&`_n~or;yzgx6|9g69+>vmx=#x08C5&c>⳾zc.} _X_C?Ӟi}k_8#_>l\OѼ^1`>7Qk{]dݸ\=!Y|>vϹB.VݚCΘiяذVO|J l2_u9gz'tY'|u|OǺ->|Ħ@qg}ds92>LG.lQW' [dҏ'l l O|%Kxm}V Ϋ|q=@ħgSˮk{r|ƕ+-ok,7VwT+y5 31챡g<;S2F?rHmz|B(Ë^$QO~B\]a |8ր1*r`٢z(4&0{I\09IoW4Lw8K_81z+V~jK[G%~3}O:LdS 4B6Ty߼^y=yOzZ?򑏼_qi&ںnj'9xX;H.=v""Cxtls[DNL0?2K9fs||+aDO92'ONN63[0G/:y곎?gC/ ߪâ ~xxk׏؜Ÿp㛼:YO(dB#d![l蛏~}xʑ6;6^k:nIԼe{gO~cw`y{pg=͕ͅ㼯鸏\]6{Ѓ2ץ1y#bN縺u:SoVamt”?2Xr0mSgr0Fh+tͻղ;v^?Ç#L>)xUjg#;iŒ^6OF_ˡcd鋫{0v(v5ΎauN<u5FutQzLɖx~iVW^i^Нnv_Aws~#kyZɋ)ZNQ?r4V e&#,]m>Â|}!%{W2tOtn@7<>p_9/}ӇI>;~}'8agkxxrS~~xdF>)]Ɵ]$SB8㏟N/i6Y}n }Q֫]>vaCms k۴=n\>dC/^q#c>OiMLVOwo60'3HC7AOy>Йo+\z6'<:}bvc1CV!18aȩOoJ \Tώ8Ȅooy Onw eK|І.;|fo|^^qɏy\5ƞoQHO,d#S9t+䔿yz{šm>3}BO_9%[+$7qAFt"'z6S)|:B9o@q?b'K6OWnmn7^ZG k1"zů &b'[VL0qv&G^ľ\x'Y ~ 8W˫\}sڧoǑ|go|0iih2nL7>mbC>.`l; _kxxSdZcK6iˁUM^=묳kָ-Wd կr-y^K^6YcSuhn3}mC4Og];O|b]]7ϼuc$2$Gkև:}U7Y䋞5&tOǺ$\FWAS{0ͦJQGbV'^Ã)|qy~|76"1Gy;ß?ϵ왿p6n;}ߎ> >}}6ɩ#^v}ؑnqf4q+91\Ɗ_#~':xw[2YO0)zְG ߢrNO6G7v[;C9Q 7?dLzxtɻg5W)_2G>g6_{!Tn`97ˎ6+]qNPoM 3rg=Oʃ!7|F Gݷ=#k#8_lGǾC`=r(xኳ?9ͅ9vY] r__LԭrN6L^>12Eq_;17y u9`S NA\O%/Y_-IfLy8uꩧN{g5s+G:.y/lvZxK 8!糅n<ؒ{SMgmNY;s;Dd`yajfFW:pqa:sԗM M.|>-}uh[Kd 56GSƗr)6끌 ^d,k<ƑL6JJצ {d'6^gFje6[ܤ D:lE ND W6lܲn5̎lÈ\N>?X|:#LŮ|'|Ԙ.N2//V\.9bQM^y'o<u3c ֜o3WBG"=6Y\m%9&=>?l!xS& 7d !b^a2N_>;z6ؕc>9eE|'YrpQ~,Ve& õo ;FN| z _<Ɓ\ aS,6z9++`s\heD5N]}zh77Y\rq矹ȼ&d+ 9_7u<:?\Fy ]gCu{0w^+Id uƄ?d/Yvu@[]~􋗽ɉl:"q@W  yK|rl0ʗv.Sg:ň6@ɕ/o[Gp,rp$vX2rry@p:K\3×W}]+t+K\b1_s>{MO~j=7t#fs}|xHy} poh %_<11. 95a 7|xL/\c!+ϰ`ȏgltKaA,soΈ_^dz#_z &_E@'G/Qq*O-}u`|Lɖ>8w~ |3>bώ't47^=S:~}#yqXd`'uo65lk_sCaKtGd-6j?:q~NY{gsl}d<ɠ=sx;_nH7_d`sˀ56Qf7wMiKy6]ӱ\ů%K6^iFˀ6J}mNK/4U6s| RG6mݨqe̱.`6Y.J`#:Yw0!cSM4}6>Ax`Dddzȩ;$Tsxs=osQO᫂7CQ:*O,\.rm>x6_]p<}ɧ/S_>e|s<2 \o<|H/ C5?c_A@Xŧ_:H}KV~ 6 ]m갵o|rZ?ͱ0Us'9ur塼x‡[ ɁbG؝KYA#|LW[^8j(q~gl$G2u~Wlse_]zؘ~6m|?׺,g[{W~WVvj7tZ7_n i롣5Z7S!Z`Ys|pl%Ks#ޜc8>ϏΝ9~0;:v>y.C4fŜ<>zRh'F%5`~ׯ?[M%_!qul_'S,#ӧo?OW}2rl],'Q7/?`kc:(ɉQ8 ]?Ă\C؎bICxX06 ^W#8ݣe.*^2Ư1GG#e醅'F}/'p>ح|WG:?i|CXL ˟Mc̷!KhnOkroG~ݟy%K֟}e%[BTx ,X2pM3pTz[2dzɀÏ>ױ>Oˠ~'_m6pܞv39iɆjI' ٰj@ds-oGCfͰ6fl֩e#F&}>F::z>Eؕ\zJs.o>#bӖOؒPӯ0A{OvY7󋧘~zۤ0xQ&%qLJfMJ7y d'%V%[̾Q{[ťm]6E/ŜMvȸS0v>+|_ɽ9;|w~[0Q#>oMa\"ws~.·//M ?bt,.moEՊr.ƃ]uo[&ΞBQ>Oy5?>5iyƑ Q0;˯*l9;!fSoކKM9!ϮC^'l\/}r']mۼo~}KFk]_6g su!J5]Gmk󜘭n0YC֓| rs5G_b-;9hbwa .>YźsuFXbm|ؘ,o:O wlI]\&v\e۹]|Ckω={x~^K9ӧ9^7v|1+96X]i|ZFsj;Eن)9vϑd} |̞Mƹs<`Yvo㙣.u=sFr|tlp7ƴ9$:4^leLj\QH\C>(k֬4L#cS'sx/7Υ3>ɳAQ|9!{9>{Oنgk/} PD8yn>`7c_ltܰɧ Vr책/99ao.~!Cȩ'C iO2l <Ɗ~k~G9g=Hb'O;)ث僮GM_|0𦫏PwFmօصcSG^tzŃ)[w0y]6XoksEm [K]GdO9K߷I]cj:9ʼ^3՜cǾ| 腟,2wח7:n&`q8GL,l \0Cc\!s͓ȸ=dk(Y+<>7O:F`/~̑[|oq vA's?7¼##v9k-{k)FDx56c|h.ЅO΍|o>h¡O!9щ/6([GL|77؃XbO[E1'Gܹ'>q˙k?uț{ȃ2g:)nF\~ ~ـ8˖=s<[=ؼfF/:<=$Ar:?s_2oyˆ˿ɗcu+ֱN;M|k¼jE9l+A˳bO%|4b3\7゜g9 xrLf-?`gj\xSse뭣:j:Gvzk_t}AF;{03^*KVi#έAׇϭjkƴ9|m9́{5(&nRȵBK ,򌳥, ,x_<~郯Wӟm=~BGyM9p;餓&ig?&dQqg?/~md]?_|R#r'n|rȚxn8.҇}M?[;oqFp*YK^>_APtSGlel3 Ve#s>/rH\dS;U`ڲxӞ6=@K^rycsS͔7/S=IOkݱk.:s0r yCf\.mR|MFc:d"⧣sElͩt6s@p=mW #¨28^hWߜ§ [%.8ء\ =ygj\'dW<_Źصm|lSDI;^v6|c+: [՟=z#o}wYG;ڎx |~9e<(lGŮM&;ɷ6r.㘘k ͟®9@=鲋__Zuw<{ օvOa0=g|VDlvOy!/I ׹V`'᧒>ٟUgLM>~(w7OU{Z赯}pJ:ckuS׽&A4=6'>1uYyks:3~]mCs٥d`%nW4lqKY/X2d`{E}Vm{/g}p}Mg{e13x[mhzSC2{ɴ;=3U<}inxwܴaWIv6lnզ]]6lFXqj[{lhV}m$0W8]swL=oy˴M6v>v ڴeƣ`A|xcΛ\>oy r=qS>W_pC|+ca1v <)9+oްԯ5&lSرq҆:79J/ʋ7v쉛t)wޖ$\<~ag#R'ø'&X7y_s/gF_R'}}/yPʏ)ld5' Qq#NLmgmꦼj.'>khv>OOzaf "bg[]UnCv[2lo<:y:y~ ˝F܎~Ẍ́I7big6/&ڭEu8Qs> JGq '>B[.?5n6<͙e|K mN[Sdݘ㑹\#NuM5l}֊><{֕JF2lG/ Z7;e=EyDo_hc[dɮ鈋o}昣SW}3_e]#ց~_!Kx8fuk60fلŘg6;Kk&d:GG\{czӞ:\!q9ʣ/l\3ws]tqD9/U1|Se_mι_|eǾ~텶\9|e__iVwL_xŴ'_%\Nɤ7 mJ2_\;s9_t6|OT'L_\ t榹ly[g~ /ͭ2q%KVoƽ\1,ȗ l!k1(F>ޜ֌͗ /ѸOB$7k3+)Oy}F?pgN7:7D6)I~ lu?WpO7ldiKN] 9 Smِ%_iF >:l۴kQk&lfa<6ڜ!0#o O-7>a m_7$GztٵbCسi6^XlZیd?m= ]p:*SG`_]?L Yـ]GwGf}|DEf㯐1X`.Mu2y.7)Ȑ-Fb$ 'bc<]}<胃?#'0Ӧ8䋧\O|vב8¢vȘ;EQlJ^XM#Fv7|D^ݍ]-9}C. ;vGpXʧV%;;77kZ@xfNg+a~֬Y3wCE`a_s}{F_G:0=|aSN6#kN LaGQyiM {0WΛ*lasܑs ȷx`vO޸ˋ<ԍ`?r`Kaf+Ȋg\M8:ɇ\/en4㷟zg8`&⑳aaV}05.I9 _XP =4MM].aKƑns^/=O$x=Wz8C}gx[z=2nu7̍;l@Uk"?{h~%yHٵ_碕ڮ[I3Ǯ%Uw*;K:rςn5狣U~36g WE[U*° ˶Լ=hc7ַ9⸦%\S Wujsk=z}R0{ 5~Cm,#?7h =< (YxۨlQ;?6OlAx6aa_|œ, a`?,L^cq1eg./>, l|8Ul@Y;6rHsj3r2u'||{b^G>őMG6ÓN>ǝ͹0[:b*.3 s XGM;k{(dA>mGp+.s#0n~:!1?VvG/ dC6 ƒNu6e3yu a#Lae'|@&>A{#\՜ɞ~ks 9ca {=m/L">MO.PpF\8r0x~qnc/yd'drSN驳&VkCy3૳Ƭ1>o}3{qfՑ/x5kCя~pԗ%K lwЦg`~ͱZWJnǦع%K ,ʬQZ03,ʵ!n(׆ܐqCH&6սmS -q:yh.m.c͆_6CzsM_| mDӦ=d&#{X#a>l^o_-6h9|G8AɃ~ cS\函x+Ic>Tчsdx'Dp5bTĄ'A@GdW G<n"gr &&4 b+!v&-WP:<`4-‡,>Z|7t٧ט#{3 , ̊~4쐁>Ȳ/gm 㫮9">1, ,ƋOu8ءχ'b_>lT6آC&0‡|>ȑrg}=6G ߽ Cǘa=v]?2)% 2Z!_/F"G~ _b20j7l0)x|*&f_|cqr :dsoz9տɀko_[r溼1 B@psޜn!֔6>"nm4{[^ѵ~i[{km|<Pc'o}[l†豩h6? r&gAG2nV:}xMG %?9GN p{=f7MC>;? }G{/~6kz^ d7hOn愘uğ5~c|+^i&x %^ɋ> lǹN , ۘA؍6;%`ƌ=~gC^l^2n܋o8}Gbڊ##6v#-zlW`@ɉCXoNm|1˿.`ǵ:ysC6=?>b?@,*Fm'Ov|DF05[: Ƶu9ʆ9o-cnMx3V귱/m̮Y 2k=nNb݅ l 46\Z?K ,X2X\-K lIb&+6l;~-ym$>O><ÃkȾmt<ķ٠c} J[6d? g-vs.H38%2-ptaS}[8>#_0?>rfHMa[s6N1Ɇef IDAT .7af}80rlѯn ~1Ī_O1 ҆W\Co%-֜9o+։l>[;E:!ksu~Q:TO,%֦~<}Ŏ0׹sP 2tuNPgM{ֱs bnȷY~ԝS?[V񸾃O_>y8M|_>]Xs ]ch,ɸgO}{ x9F@\+vi#䜞1pq\fu tU>Wb{ip@NqjNŵ&Y||3kIy4. G 9èS_nūnIr#ϊ[=_%K ,[іƔ!7:] lp\_-d`-+2[bs%`ڴ? sƙM5cq^/ʴRW{=kH6ǹ_ؙ^r%K' ֯ _~v+qűMxvdtO^Axn|i #叮>~\Ȱa=]m쩯\;G+sRoӭNMEvj+Ee.+2e'L>o2_FK_ }m¢O2ȍ|E `Bj+r/>zz[<: }ٗ.vQ?0O 8%c߿p'6XԝsAG]\"GW~2鳟o9%:>kNM'|5ΰFsq8am^7nS:va>uˆ0'g1Gd5î~mGm2٬MWsݰQIm'p;7#:*a s;A>a h\Ϙ[O9OG(s dlلOom{Ά=20:jK6/YdloCd٢fz@$Ǟaۛ!{~LeX(GO?PEFa=¦.lzKϯ{+Mt)-jneFMOv\+Yv$G_ őG#<X>`b3b׼3 _xmǧE1.bl|ƔM}`[8Q$kG)xV]~כvuv%C^= ]8?~v 'Fort yd[}=r6>C^䋋ZYwDl,P6-d"&>?r6;fɰ%!ɲIFY,rFcmg`X7|)/[>?r1ON -Xm0] 뱯 X3֐ss/MA|:KȐC^ZֲulM`g%|;n9}G}dÖrȄs}|mu]䜢--7-9χ| UrM6cΣ(q5kjY.`ŇX`‡*y>?O:=iR ß[?ty/S5".Osy6$rwAY^!GMu-q1Dx\.D~Óc %cMuׂŢN-E |vaU[n5~}r3lJs=_UngM^RC>_"|5pǮ>}}>G.tS˱\Ss-qƜdχ˟yj^LV >;'Y Ϟ<"0[d&l9ϯؐ8-=\NwfG\G?\7'X0-NG_ig%K6OQ犍,}K ,ؔ {)̒%K ,ʬq[P/X2p-3`M* ;Z663mr$FM17]`F>zٰsG^lX:*pG_n;=r÷8Ȑ 0f&<:dcUu<6+9BpP'6!+61󑌾0YtmLSW.@|A#:6wqjcw]v. 3Yq rL6P7WyYulۦ0 O_q[8Ɉy~ oy&#Fy_6G-xLgqͮXg36akP_9<ߍ#\AU]?˸#g y6ϵ–=ן-]zS_ .6< +O ҕ7@Ɖ y`&f!#'M2ɟ9"$ؓ2l7|o>W<"& ~zA8K]>>b"6sm~-?0'l"8Gn6V Y'|sck^e m>mIc/|G#76xQo&K`Z#׼-L1Fl6Wk9h=u~&tE&Vy G\nƳ&eac6DzŗGS)qdyIL]WK60:£o&;!⣋uML9h7aܺb1æc6~<8NГ/qp bhÂW |u]`V`p]9M+| 8"ʩcGłn+d`5d:M2][5ſ/35m}VeqZP.!g`yPGvFa?pύ#SpOO~j| r\220֘ud^ҶZ7ևƳέ![򥮯ꧫ%Zf&zs]:09}DFG>#l;Ǥ^!OQ|]\̅;> sʔӳ?v}cwOM~g>rLN?p~_<#Cs|aȦ0I(ʜ|LJZ#98jqޯ|w;x!|Mq#?{bhyx}V7򢯜7=y|ԇ҃s6*Sc?x]_/ Ofc'|T#2J,J‡'^`/ִ:%lFDž>\ʫq@b`}rth_zG1Q }x %dP%Jw%v}Ϧ7l(Ƌ.^M-2|2k^w 7J6aC+g-d`%OwtSh)]f}.]/X2d`{8KLK \el^ٴrl3̅3|g6X$ߦ7lvyL?9}tvbdɵ 9f&n6ڄc.Yu]xohޗȤ7y|oz3- _6IV>͇|WǧێpabNy+VK*{1fW 1byw['?NoEIs d[Jl;Wz0&,6`% XV,j9t"Wd#^u>`OOfx[5;$/vO_>_!fK{|#/mkm!m-fћl NU]Ÿ+s9"ttnzkȠr"n9]::/~9%k%Ҙ 7y F4,[ɲO=q'|@P[)#=v1"<ؖGc:Wg18{.d`5flYs֔ZgAFlk žp 7vZze/,ٵ~:8j1ͤ:~9/kAtȅ&vb?~C uíآ/|쿿m캎O?>a}0y2_tkc/?w1n17;Gnjv Vs(>;|?\'|fÏN 9[~ns6#V|5??\^ɔsX.Gvg6bCdp;wø^hKć~v>Ta sYro:'o7K5N}:_b6V^W|쑇.YmI3{im!~vֳ|`u~ﺇoɑgCS{x4;l;pX';~6KNOWfڂ[ZȊ?k2 X\eo2`!Oss]:藓~}~~aڤgr8GyqwLzcHyWyR.`O!_o6⇼C'n6uY2hG03+ 7Sצ>}v[y+ba!76at%Bdlbw#$dlVb _'-tj).8vx6{'\bqLQDc0 7ZB;ݐ ~؄o)G;%3|:WWOyc+;mva{y5gγɾ~X!m:͙sg*ɀa-֞uwļ=f[ϑuDǹPwQgZ;圉gY_x΋0runwzсO }.gDإ_-5˟ׄ>5{ӧ(f_No#×x.r˗<'|d `vM'f7Qb>2l.Kbo󰋋m6YfS_q3!~d1Sq >;"z(5N*z:"/~y9&O9ėcm;%& ~I`gvsu 󺮙7Ǣd`{8OW|u{uZ ,X j@`\2d`fȀ 8Ŧٜl|h#M)\o#M1} ttcֶWM6m6֏h+d SS%}T\SgEx|ɍpN?|w11x0j^S.Tv 9y)pW:9fmdLy(:aF/]kGS}^`]m|;W?r6|9֞<?9%@6d=csO<6h%_mdo7 3}z_nm̈́lc8D. ;p4Oee,RoV|!/&  )||Qu}|7G8tJ^Ȅ8YSGƤ>)&:l!SϒUs|n]6ZCkɱ%>f3o 5U֝ꧧ)nSƇf?٢ _w}=vڍ?[sΰ?U{8կ:1= \{#_=G=|?x^c!8u\tg~; Xo,՟Mv*ditl}Ed/w"DfogߎtGOxcQ#]Ÿ֕Jvo3l|m.Nj\?ɳ×<؋_[N谭 ۈɰ_nlNc'\8g_ao~|<o=f<}Dx05x(|1o~i-l'ph{elnm|]D߈}3s*?.d`%KV{}\UWmm*{K|K ,XXګ=%K&mm3a|Y5ncƗMDam 3m~9X4az^i7-!V'g/t#f Dy#І$g:*mD:S1Àf9(F{Jey{:0 Dߑ67i/F\«ArG3YOo8z+|';toJGn 6o\W.%>[ 9_-'^6"?Lɲ͏ZNa#-Nz{mL|x|Mty _o] ؇1[\[g6>)|uش_c)n|bFj ]2}Ø669YY2J2`-N9HSkdX֘ak-*lEl!ln-wΆI_ćs߸;zs 9i3kM./sx3t?#]zΑ:W9?tsDĎ%V/w\&+[^Eeb?x~ك:7l3G7ǮW/.>Ƃ47LC?q=~_Fߗ^xp+^>w+_z‰ñ/xO#C\3uAӟlzKn)/y=$O~r3Ϙ]k8mr(.t/uڮ>Rׇ/~9|]|˟suA+bc/ai麎0'`umqO%|W+v`FyI>u~A!05^Nn~d[<冼׸/&+{bhLW\qw;yַ5$ ?oyg~v u6(n}ph Z2d`2cӤm58n#3ЖZsϵaY2d`kWK \/ifW6l`9K&:m)mpmXp6\PDF& @SȐ_?Ylus Tw6*Bؐs6Aٱѩߦ9652\pC[P&'/6į̯# 'Ym+ 2Į:҇g.(,@Z30AT-!|=rgKN9]1k1`z Y5_WFZ2|eM;4Y |Ɯ'<-G]wuzF|C|l)'|ןd`d6ϭ#kȹ|Vck">nNZ[}`9bv;Gr3 ,3>,_ǯbĽ1n C2wiS>sNn|(|E#ˁܱ(k['xaq]Ep4G%fwl~|4i>Y#3ė"˦bn+vsO:57șm'Ȅ:ҧd+jaC\z J7^YɑȕЛfB6_o- /?6s{pC0=zx0VgRl9"(qƗbK&gS=,*GH&gm8Q q>~vx]aq4!;|h=~nJ r鳫oQ[!X<|8>n6 o 7DSȅn[L)?d#;|O=%-2}l?7&k";/p{@SO^5OAOO{%K ,ش <ε}ץ>ԗ ,X2d`%e`LXK 2-9l9вaly fZ_Oѕ6o.zboqhS<{miۄt;dV\oعL.|?ߨf&7%vdXmhţ.>A f_#zm:'C,{|tzl,l ܰg9q4ou6t?p{kΞ5^6rb'v0?|G tzƛ}r ϸ7?ă} rD䟏QCOoy_,ljk{˹|7vr>.w^nGb< +?5=\/>SYŦ&\|1a-9i%9i]N6؅Q]R\^ǎ*NG:OMyStIqj&Gi|?ƋʣC>_;p7<y ã{/9ި/ƛoo^W0NNy 7(7Éȳaiks~qeЅ< -Xm0un[?Ykr}^XlYgdȢ>y<֜5LN%<׆{l_0?:5S͹N7xk2U#ī#׎l(bdSl>YG}l*s;~|5K;΋w[>?yv!2⅝ O;4̉<696s>7=,C_>b|@ğa??|C8rwI/:0w×SNƀ}|Q_7Vwrxp\ŮoE$~yr270ȘsMO}fc}7o~wn3ُ'x LRvQ}`bkU7𕮯Õ9B0[0#fW|`(<;*lÆq'N}a`)vuaM|˗;SɺfC 戯t ,L(rFK$/Xs4C<"m18'bo5#lÇN=e'Ck4:S=tq|7/WsO&/.y&?Kn0ﭹZsu>61웻pn`9Xm 6nHn{Y7[rmohn(s /%K ,~2<(s}d`6d#f[ޝrUu/dh}I #x^mQ@$!yPAe  0 -hӓ 4+=$}7vZ{zwFXpxY=!> <vħNޱ\f>y̆.2(ßdSn—1)bLȞ|С/Wǟ|]>r/D9ſv}]7%&|צ;6Ե;WC+4P'O9Eb+'ƀzqjg v77}9Gpͷ‡4#ґ_3MYt"__l6k K9Ob xaW'o#{da +GG1 >>t_ER;_Ud|xâsX yu:șzSK>|}EVT2WZ33`z@\%9`h7/y b:s=geY#t/l7I3uSgyc.ӏcm;zI':볃DpV;Xas:yk_"sڋ\s/ g}SSaFBG> ^T6Lƹ$s~E_ھ0^rsQ{6w`o-iN>i?DOL5نf |v˕]o+)^@=2:"6؇9ƩX'}sGt+_5O[:qx^}oyw{ Y8q/]\iw\U^Y6[Ne 7_է'/a^|kwbL1/PE|3i`ܡkEٽ|/08XR/p猴cO|qoșB/uv'm}LƽiWG0#cOc uw;7sB.}X\/?jFw9Co2֨{ }c?wibӳb[i1͍+1w'ma"̕ݞ\ y^|\7#f͈>vd4fvF|+5k6W6ssxEf`NTmRnȢx˺>nٱq 5ei. ^7{ƻsmlLaA h;tӭ͹Y=>p;1H/]ᔛzx0y3^KNO>l(y)3SO~{I/eTsɧe>c2bُ_Pje{>[TӍFΖtO,vWX;+X3f`ΑkumY\mX3f`k?Dz"X3f`՞)7|lgM<|Dudm>qG,{6~[=x_o|8ӵW: JpT tLt$o1x62 :}/r ;Ӈ8]>Ahd/詳<b/mEk6X|vdXTQa7lӤǧŃW)lчcB=2 {˯vQ.ڊA IDAT%hgE }*?N/[W>S}^a##vb?0j/ f7[QO;l.=&'OM秝` 6s-d#|dƌ|xq9-vu1 1;'+VG2H>ծWZ3Y3`>YSƺym_u eN` ǷM7Ex涹I9׺|ÿOM~شӞGߍ2?~:sy2F[`rX[keyx ik[ٱU?\ȇQaoA?FF{mhĤ__};Gsp(lf 6|!)g;}7h%u8{;t  }GcUԻΰs6(yO/ k|#_h>G>g%?l?xSksƌo_;Eؤo;+06 +~h"d-sc[r&~+rUv85AV;\r)w·?1o:#xa r+od =}OFh&H< -_[C/yjMkj8g f\KN9b[^:4/UϚMj.rZvW!Ψ"Xd7o/66X4'Oo%Wz>t֣q:|/C≩zg/x 66hS|uoѺFm2g?ۗGvd-#]z*/adC,G;daONGan%!>[LnwzË^8=O]:縧M/>o^cǺ|ZFi__TKcT|]GӽOt{-cL?{rd)68ؗS=dzIϙ~˼osw:yByƗdgu=_v/ Uu7o ~yGrp.HX9OXهSEZud\"r8ͮao'O>./b1/}D}Ķ{0qv)3ϔ)d&>]yRU1}1xy˖-3v%^b_|/4Lo{1mp遏:Ic^ yy#}6v. ?98>;9Ard|'/lvYh??O?t}clsfl'?H~M xhnX3p3<]֘57>n J\k؞ƲmgͩqҘ^ +o5)2)Ck5ש ش > nlxXCں!L1|g ȣ uڳ/iӆ%O[rB~={v2t8_t:'kg[͟MnD׹wǟږ1if:KL0MVv,1,g,Zʪkr조u^>š(b?6>V2e.h׆-7|g~CVBW‡g\LOz|]RLm6aP9uPxVmd >![a4™>R2da Cxrwd؃ik\ ;c?rK|_*TmxCًMf`3d|Ybn ~eyk+{|s2ږ~k!#Bڿowy%;೟RZ#j?l#yv[צD֐X_u[ꨳu]~Dщg~;Wﺚ6^̛^N=uz~Pq#i~ lflo~ߦtHwcWrΏ{:kK%pek=X3ffB,/Vk X3ff`}Qfn[3f`Sf>m9G>1AM.(gcK{l6ږcial7fkl]uOys=t}J/|l/66}{8WȤ& y >|Ž-|l.ોMk;A7;.>YGx0؜&O..t9g/"s0$/O)|)HN|r}ߐSb:lK?c,Rr'>GyӮOYԇhS|WLȹd/6mcPzV1+?ƨqNS,0H\կ0Aފ/sok%/'/7Y5&.;r˛G|٣xtn|?xl4Ʀ|Wx1f/ɑ< a@٩ᆅ-D؝+vbf|q)ŝ kD15 Y%ǭgr qw];sbN vuG:|9&Nvg"}(.yFBG ds2rw8Fk\yx7ɜM>/;O~C;O8a:s bG?x]]Ζ~]`##` G\%\vwp_lf{‰Ӌ:r>mb6n:{ [rCyy{tޜ~ [I7xd%/d]{/oc.j.3^cX|Qk:%')f,}2,l3>=zBq^&l…|ڛ uEt^%p~ҷȉqxؗ'~[cG}e|k˶evôL/>;pj,N;]v99ϙkxc0ʃ<>t,Űѹ|44V?9~~_c{F91%+جN׼;a89l^ݸuyǫ#x׾$̮+]=.+3NV̮V lX_l=]3f+6BmL@Uh6llD6G7éN/ypfM8gm)ئ66SgƤA6,۸ev26&Ff lٜ6I){1:"xeSC T0MNleF1R>RWpUA6  x m]rKm 3 b$Wq"یccנFm1g[~/ƾ&iZf6) }BVƜ6%/WHbW;==9fױo>/Fȏq+g|ՋQNDƔ#+r-R=k9,~a_p\܊/%&tl&.:07657'_Hn9ϧ8G|ArIO\ё=B ߺƶҘ}c8#9Rӗsbp./ {r,>@cexd7`9A؇ƝbL6uߋFB8^eG:xre?WG+l2#uҋ栵/{ɛ+76᮷d5ռ͚aM@Eٵ?K|,qm/w~|Hօr3+▯ք 9g5}vse!xk#_!rlvqH>s.:t_ \<^}JGFeIF\3o%ӟ}OW|vwLˎ;v&axT>:0! /=ڌ^rO8˼HF=CQ3;lΉ\ukgOn64b7'xt]/|kl~5&qS:_KƖs@ƃ0Xx'r'|Ƃ^Cuvomh|:^@0o|gn|qɶ5-܎/_Nɝ{+:7`Oux`0a$_'Q~Ne_[,撺~}'%d`a[sK@?]a/-FzֳgY`yO~f0Ɔ:{rƗ5~k5!2^,l;CŠc1qɷ+OKWGfk5-˹py4w.OfX3pfE:ߌbXƵ0k#+5k ˕D^3f`57 g bSqپoA&'6g/#l/:ڀTI7Oգ9wuG1\eȁMD|D/HVXE 6ɇC Ju}68W''abWIv."tkxg n>Uz6苷ct^a(QH~[qO/_xt`_a|< =m 0%LTozРH62zJ倎·!J}G-2/Cgf~`Ka%__R޹>,FG{;F؋R>ˇ8)8mx钣$<%OuQ[w6m|<ar=B9$SUGt.6w{tȩM/gKn[-wԗlOB#?R^bx將3f˖i6}xq^yOf* enI<4-G,7ɜ} >,[hwcX3f`o[ѯX3f`;7\~.ւf#fO}j hv<&O$kӌ2>}fv|<"v?J/dB>@Vw:p![,|ɏvmA8ӝ?7*𷙉DCc-b\y[/|Sa_| ?Sdȿw|4%tE\\<>I s1ȗ\hw>(>]qIFu\ ]Iy$9!U`w} \8g'~%L.yzMj+99׮+|>|8/&2>flK79z~N"0?BllG/̰M8'ϗ˘Av~G$c<8/Ԇs8rd~M U? $&cvȼos˦K6Ș#eW/68} WZ32`l> 2՘7M:[撹ܼW:96e`dئ#$/?s?'?y:gϟf{]F"~X+ȚIfRD ]խ51O;|[Cwf4޳v Xͮ\X'.F|̓K,?;,Ϙz#gO>ydRsG5 ꯎ<}b?`s}".DOڵe ,~,]S>]9B)d`O7\+a'Ɛs|Hmݟ1>ݣs6ğbȳӷB^;~818Sn#,}8}>]<~RHNήCEGo)B>ss\~&`a+vs:jp\f%X+0h^ DNk.}(,?I~''¼/~3<IqV`} #,9Қ5#fֱfE IDATkuz#knv߭=5kvd)ҎZ3f`NX6ml9*6 mвa yml!r6&[tIfY7dlOlc j r6uaYN~cr!Ncm6#xɊŃ|>`QKM0Y9ķY&&1y>QU"#76—rO xٶ]\ WCߓsH-XfG|tɅx˷x?/r0/dL `c>6a3 [ .ل9;O%ǞeņlYA|nC||1یϾℋec#9 {!69gG,bc߼Cr]`DbK}?l!cEv#vƚ[;yƗx~-c*0:s1:[_x@!?qR7pʍw℁_mP ~cWr[ӝ4cP5awzyk9Rqy2ևrKOlJ~ٗ@"gloL[rҚ͖c|4敹H@yoz͆ygN8]ț3UX7[r3oK2'=ycM~:L{Rt=}u\O?k<wGuR{O>l0,bun=NŽζݟG˟[Z| ^v;>}7dׇ>7(}c~ۼg}OMu'rZ_Nīɰz͇\2+59џrG#q)zƀ#t]ϷuE\|0xq-3._V†Ϧyм9Bnȓ|,nr?W~eg'6t|Kg>9~PȚ=%9>zλ8aO^W'ߍc7~c'o 8SO>bō7,}O,x쒁F}Қ5k \35ՓZ~g5k X32^UvT&W;k l eY@tmCҍ6w3.mz)tQȰO&:bkYj'_dO& Sٮd7|M |.vo k:``yD&9 |:[uōQL~'F+鑏js'Î.^r:Rf~%'9ovSjkSYɷc•p}eoCf iu>)lsJXW 7M sb_lN|2Q{0,߈b^qlG 79-|#/blcyJxG\E\zŘnb9,s9s/: Ė^|^85AnG>Weӹ"J]l'Dι l 4n#9kl;y^#Yr~ӱ5֫>wN$C0YOz:'oT~.Ҝ|9^UTlc/,mӣZwC;>rJKxVזl3Yd嫱[ 爎sӉwz|V 鳡hGwa?ŔG>ʙz-=f?!߈ϳso1^ڸd>uy;Ƿ~~z +|O0۹X+Β著tgFlA+ىtɩ+l k8Ň\>9-x#?} :R8Ȳ_2 J rʒqmKa#>^^r17% |F0?ǣӷ~C6:Ƌ49U9wT+pd N%) Se|X35k 2`m^@ky5kX_3fz=eC{6l:"6:ɆGNOP6, {9`?6POs~6\>uxt64ld{Wq8܋6q ^:K9Fm>% qa7yLbs1~`7lM<V)dz>Q'FU芏$wQ~S) Lx쐑ծOn8/D~|꒬V¯FcOK/d+]DO7)08>W?xPY<6Ŝ?Ӯ_kbw]I) >x0n>ON|6Cmrv| ]O[:_i}rZ;,ćuyh? N?ّWㆎOl7d+lkH]M6}[p.YOUHl_rލCr'&CfK;7h7fwږ}= 03cXFu:oΚwIrd s-YH]9u>s6rkʥK~Sg~ج|t ֿcG>mX76k~w}XVѳL~8y>>9Ibk?- k˧o"OoCFɹ\X3S8G|=[t 䏍K#:|5MkEalMl/6c^h_o75~B4]4^y_7}Qt?N}!'m{13qg~_ǯ>kY.%fɉ|Ⓩƽk$]2r}c[a16ɘ!϶Bj,H_]ᛞtܧ2ă>0Fī;9cձ{ |c/L%{b$'WMAE㞐->ɰwxU'={zc 裧S3.<^G:?~׾:%?}x%>Bڑ8y:YϚylD7zL>Im~+2O+̳On8~|_GN4Ĝ@bApuOɔY`f`5u]c^׹k.{O\&`5kvHevHW#k l ؠhiix6n{H҆ 6<h6;f GaJX>ȐWg'_=| .=2g>]od+6|E =x>x`>llG~ؤlFăb9A|$rs.6Hmrmvt|J~Ջɞ~ܴiMǹvv=x>=6& ?1% YÃK<#6÷!+N?@r갗7vAWӅ_?u/~|~0g>Y_dq[/n[_>67OA x(|_o voyS!ҷէd_lg,V&Қ͚7kG拺9CQָ_?5qᑣkȖ57#Cv7u\n6`v|O+YGk:b ||u6Vl2Gלrm|?⡇.:-g={1T,Y'?wۜ8{p.7~aq|s:Mocj3g('N;ʃh1V_i;*pw\K{>ՏEߨ{/h"v~E]4-1h'+ȸC0 b5V٤z@4Fd^҅SaќW'OF?=^zs3=~#opnwK2C _v]cXgX 6w1ŋD>i&6b*'?y'N/9 grUȗ>껌ygL7ښmGŘ{22lսvqb_p)_ifrۣw$ñsU1]K?;cՑ5/WGVWfvu#Y%JS]Κ5kv /,=X3fɀ^^P'Fnca. | G6ʁvriS.|udϜxd/?˜HNQX'$ҮGq#/o!!%6Z#o%WXlA6:^˹eG6yaVgek[k6Sqmn(=yӹ#}sGGl8oXiwȚ,~s:\8tRxԼ\UG3S'鶻a?~mβav̗cc`K>| n0zK?aqgX^I[at}>̝vɄ^:6ʏ#jlэW/z3#, qS]1նH S|o>}hz^8GEd6樈me^ϙnuڋa*^9q /Coی~w˦R1 ry'#y:=dsIYk#um ]cxս?"^&[Npƞ]_?Lz~ ;?=f9FyS75/ih8|5l(QaCN>MG%ӍGЭnwB1c [ۼsp _ݗd>wOO~kO2mE8~m}oYz[:P-s\5k 2е@+iߕݪf`5W=kW=w暁50=1ٍM4|[}fZE6)mlbm7Pg˧ӹ^œr??9z9x|r}ͷ˰ |b.lG^`ROXҏhnX[>8ϧ}ʛ-r'G8)U%##'> [ޖ?GWGjGpعcL}v/ 쉇rƖ"#~k#_b]m|Y⥣<9kluKArG=} ?]z!~+ĥMx0*a_Nؠ 1gI^)ez { [-#?t|L/6 |rzN/g:+}62bWaK_ar?ζPC~a9_2qs<ⓓ-N/3N`!<F,xcCO./OoPpEm0'SܘцPgؓl棾d ٕOuDxrp(r_Xүw4ĥ.yG91u[&ϗ6'~2+wvƗ|KV=AP)d.f+zvcUx`V7Q6$g=s:פgSO۾YfNN?Ä7`kdN- ~< 0}_Lޙ31ևgo\6^Ǟӹ31?{Ŀ[7f5=@ᰞlj^[3fຕb5[g>Wr\m+"ʬX3pu ؐ6lZ0fs?d 62m·!fi6 6cmBύv`ʎTfO6ۨ#ݦ:{=PY,6Y=|k[e/yy@˗X;Ɨ8fW~>a+]8bN\Ȏpyr#ˎ&!G?$'x,=l <~=ॏ87؆_v &/au[ù8.? 6cC%K2lɱ8YoĆ@UG,6ЇH?«Oďᇕ>Ql&1i.9'{qN]? =&JyЮl>^vFT=!Ǐ1OW;[pz/6ky2/,ȷ;gmf.E߸ݲew6m,:p:ϟ\Q޴+Za__2dٖ/0%b).6+XȰF On.m_|LJp%ޕ l ضNJ9ZdzB|s\7%dkZG}/w͠϶y e\Aִt<:l9n5:–5Oxsa#:}ulv^frNckpM am[Or '_Ix7?xd6RC&=X'oc`A Yq(lŇVd32ƓMRW+8y,v#t>s[v/[ӛ^#61N҇MO:ǟ020l'bg'hg? i9!pu IDAT76-[rxc3}ȫ8H>mYx.??8˻V?|ozη}k>/tםƆ"#?io|nsxl5>婾[U_4~ji2lG=mVGka^s2=xYK2w~=y\>f1nXj9Xo1F:o|s[:kΝ/:^sLs t.y"n| +]6˗^|}e߮ȽJ>oZ_{Vk \W2(s]55kprTlu67]ncd׹ 166m":Ȧ͞=:\2Ó"0s8j59m,:"# =dgmq,})ԖH]%įzȨgO lӵq휜s6(٫ zFyco!uÃ'bB˘$.~|O t'>6{ b@!K8;'K~')h6^0#taZ=HƼV:svo$|K_Enk珯yK&f ?l^Ԧ/v|x\\[ɕ7x >(2FG<"0!aESd}_^ĉy?bWJϹ:t@ˇ\yUc52nmynSM76Ǵe6mc\rQp!/Tb˦MQ|'$x(ӌXTϦ>K7̰qD?$ ^kc_viVF b2rvv9ï'ĈG Ûڋ|$SN &z# rBvy+]n!yê-tdـ]1x =2bRzs2|QNN#O6/yy8 |R_;协 ?ӷ\r,L {?7;ơ\O!9?l,>liӟl2x'KVqGl~5]$1>5}M7 {ԧƉ}εc>MNNaѫN9ȏէoa"ghc}CysCg={v/xq~9M}9[7 W}XXfv<[1I׵wrO 6g9 \7bM-}dlpRݽ{1_4~ʷZ%l'|^~1^`GU5p̳֫[0犸ѼE]wM~'N'b刞1~v&~'rc5!XN/m̱򃯿ßE^~W9qN yRrrξv!9>_<^}!vć/v}*^u9K,o`Of9sЕ_ʅ{r+}Dox ]p3YECGy.;#fcqH5 G,_쳧 <7˃B9[ŴҚ5#fgֽ+I WELmDvt_LیX>:^m5k X茮 ة3\i͍,mFԫWw]I/6gl#6UO򕽎d8Hf+{mv|_84KG%<|q2|jc9v2l; c8TĘ]mȣ;Oo&钫/Ѷ|×q% O\liqWrWK<_Ym]%lGlS /5>kS+Wنl2!K!GY,[p{-㚙5,r^x>s"r>mSi:_a;[!^țΑsDtr+{(ň*~\搬so|K澑a)Wa}d%w=rB:G|XLږyͰd1K7]gg-~<1;|#/_۾$_0Ϡ7xISOn2-%ލF "_~A G!vr<;+n5Q<t^ػߪ{Qї"xa1KK 5sy "*w 7E⅋D[^zi%l4MME@6fyjf7|9pg=z}G90Ja'lHvw`dqGm=HeSzA-LJzt`)l=y9:zCI?Ȇu>]No:}=.ŋO\x>6}g\.tA".޷߾=w:'-z^|p8!r 22 >f̀,Z6ʉ[=5)Fxu®|=^wm}x)rŞ_yd+lq-xOD5pI[GrH~}b&Gjkl˼ssL ^|yg 'Sȁo=7psgqTW^qO~ t7ಡzֱ7L˥j v≮ H|h+)~< Ϟ-N+#[uvػ^掋vl./ƎvGO5gյxbf˯XTͯx!_qZ8ʇvt٨ˍx%!#[SZֲ䚱^]=:֡lyZk:ZC֋5uh͹>5O8tɟv1?t賃O6sӮE]ot]ql5O ȹ6B#{>diax rN?s8p=Qӿ\t#儨.7eqƿ;׫Ƌm .u9]OvxXo8ӑ=NߪC|7U /&y1/vc5f7.ww,c&.9)Emnɣ<[Kf!:ǝ6ʉAkrܚ0~lȜwԮ6bK S ^+w*>|Ǒ7qK17q҇M.Ůh rַ7潺y /Nz_y!L_D?ozP>m:C$oH\ɱ#|c+yL>/K?sƹo5өoxl}֗sy(%0202pe?nl^n3昛<|m opᰇ܆2d6۸_&%=b1mÓ\mxi-n6QUۨ 6L 7IzY㇋Mryы_la'>‗:/c9+gݦalXg'a 66q+lmOlk ?6L0Gla>M1vq]:ͷbk~f4ڋS=^]x~~vas$aK"yц#,cʟ^&Ou0oO '8(I7[96䗭5/fϗQg+Wx'?6ј|4tjǭ1կ]LJuDG\wݛJ׹u]pvp /昶ℓy~1o<_o /_;/Y6o;?YLn3tطዓgMt)0 x6~717dd`k̀ua="s|7]{u륵ݺw3, ת]7֚s8F:✰c/]^[v:{1Xan;3;4sȡ'?M/}Ɇ8a8!-ӻϏ.q Wvӝv}i">y1{Ϫ7x3]!oqU1Nm6}Ñ^KO.|dj,l3rM?[\£#nu<)l!z3o`;f5OQ߼e;z Wv[ȾÞv}ӛ_zt]stu#>YX#>IuςZC_|0 &nIG)3s\bpnM1w#pscOO|S֭Ӻ6@6_-70ڡG_;<Ƀ{q;̫~E׏~ӷi2ɾO?bzMkr[(v>Sps>)1#o0Ē-bMiåƸ8j뺉l0q3n5]{kKX0Av~^!##[OZ͍9]:"[Zl8\^ۚrz_+؜ܜ##[\ܜ+6l9rUeA9;d?gÏaeg3P}!nҕD`r9<% ÏU_6\;Vw^IW|W9p\St"m6t鄩_cXKpֱD )n}gzv3bJ/]:ag:En ^0+Qs6ܸB.l C[7+]sC;Nw͓ܵfl>[68h~&b[oc&5]8 u~cΝJym|xA9m b>o9S!I8OGb_\퐑5FFC-F娺$o:ݐg /nhWa|V \}h:Mo\bͿ#]\ˡs'ޤrlӯpPF*v6vx8}-T{> IDAT~%+k +rl#?lK‡6BG~t(I/}mN^Ѧd 2pӦҗtyޜx7h_,W/X:/?qZ!####|~m״m#g_df-sXpm~lICct)6lzZ /ن>ē0lpzSx8osyOLa6poO.9[__N-^q[XԿ4oĕSD\c |Oz>|l(ÇiL6ْ-aЇ^a[xDW\qGyHn:V#-8:*W0<]t|s>ĬܱNO66~kawzrƱXCq|on[ |OaclV8G:@/ԭIur 0my3{׾xp)bt }|U'=6:}#Q#!򀳹 7s'>aϗ1.<.M܈Cc]#JhWCsx*Fmք). 32d`[kĺ&5gM[ ֏bMXE@ڣ?\ݵZcMӺ;㈳sk:p+i5C|]axz9gOάsչǟ0=Ṧgn{ش`o3Xwuϵ YS;~z'Ny#>~Ok 8֋S8ˡ>^OG;\N+^啝:Ƃ/6|:ۘy4p!b#^7`7BG,6/(ƈ> vDB\mVK9Swuηշ5#Q,g5=OYviO}sv1W\^3Ok@,DQ0F92s<L6oM~|[_D|ї/?5d//%}͇G4QNaצ^87kEю+}x97rI7{3ϬskT ͟ 9:quQOX6qſM`um 6ũN}:Ptއ3Dž=@G}|I7đO+6Dh֛⅗O}mp />[yg܄Yk>&N6f }Ʈm#^qԇ_[jq_}:_ذ͇S w :p3:|S[qN7R^z5@Oyù7 D+ּbÇ|ig5͍ވ`+N~8xC:\x§kQ//ƿ7va?k[39隠.xomï7_~&ޤ26J rP`cuV>,\w<⪝>9t-OG3{d,;uo',o~O;}+Wސ+>17?)>|:L 7>l`70Gkq2 lE0cZekY&κ6Xۮ pulmm \G_%묵:]ou/ׯ^Mq_ G]ּkk>uC泖|XeG,6t]}C2ߚ{Kn97N_;kGLq_˹cz2ü/N[_n[yЇ@a_|xXək[|H?$1"FKOOϛF[tr=q;ȧ OualW]G3ָD;zc?yTĎ[y}<;ff/*xaG!##[\oKuȸ1([m[JlWd^-%톌 \^2= lpfllO6a6kSH'lIlxmp ? h3.|uzm+|O'Iz8֑zP>t}1NOj'|'|{=|Os&9:sN .ɗ>uD/._vNIyx䋎8q*?($?q0)`/{z?|iSW 3t;*1VyG'<6#{:JĠ#ΎD, :0-,o %1?YȖ_:p>77ݑ4װOO}]贾U&]:]3oup-JQ6Jm] y׵.'G.f>,ԗb:m|~~n&9b6|WyƋ/ծ~Ÿvv{M;[9^Njw.N'Or:M}pʉ#OWokvE%sȯsOsuRl尶oxv~bup'>/:fzV' /E|H9fÜO`NԭWactΦ8dCo=gs/= z |\iK/\ԕu/£1LuSbtma`c)]cu< =C1h7?Gv-㏛6D?{G+k m}Sa{Mߞ?O^|S9XtOI|gCO=OXι#1dw~+:{M4g&qdKҾ=QI_/:bp/)fq飣GϷkk],Vp Ꞛ7G/yu:TX81D_19G?{v+|6r ScSZDWWD1NM6tCՋM吾X5q'_?1(0s\||=I,w~rp ~AAx)nN)OoDp9̶ɗX[QL`~~~o̟#&;jCЮK3ً#{m}vCF ֛yݚ1׉yϹؚpl]Z=5a}]poz0l-uk]s1pquڏ?t:7MNl]'z7.|=}GL{zsչO^0h;7mLJd,{M _br=Z#?T2+,䟮 9HOGcou9 _>k^la|?kNnMzko|N\'Q1e1{3vt{x;j3:N˷ڨkG:^gp16V ~|<7>9K`}CNz=Eǟ=V?Spڌ|s.Yrg||7s\Q,1'ؽuq)ѓj~I| 9b˟1e[܍}c8F ϗV+֘+X6W~z=dπ!###ge.l_##WxldơM2PچpMnQb服Sd6m{؛_ĩMW>}M9ƠO)m9GsMs_ 9.xO׎g:C?P{ѹ|8OP.kWGc?>~n#Uܕ368:!ʖç1էD/'!G>]m88'ޠYOl|qǹ1K&8A7o;acׇ{gu1@խn5uYc"[9/&7Jp_僎`x|8ssG0>n)0ׇczC?3>ǃ> &f:2bVo5}XD|(D9ܘ3̇Y"'@_i>x.)KG8\޼օk/+\Ϲ7Ix<kx9v8 7_1Zȍ?#[Q]kZz o_6|`Қ ֺkv 1 됎5Zk$֜5k]gaR|h]‡7K}z0L ]Sbq!`O5|'OӝtPy}4pEuW~W{=rd9ǾӑO?Kr^;io~Ll {ӵW7<9?rƝ?/ϯxًu7n撼x]b[zO$=>鸧P'c㰶)l ps\ ǹ8?ONo9ooD܏|z!\\ȗ:^rvn˫9X3v8+x <v&>A[l\\/hl<2_|$flŀF7Zuӹ ~vqg߸+]c$~זƢ9Fz ]xSat.C^'W|XgƋ lS]lD#/9gc,qi=W{F X?ke%}Y]l }]T~QxE:'k~Xޜ~%lC toD<"R20^m~pЧR~mk|S'"GĹ H0jg#~%6D Xq1;p:£SztR{Ȗ䳹SN+D[X6MP]:/O:6q̿cڄv|Tjg><^^é|&f^aWi]C#1(tW稝>p;OϼՎۚ:V\NƢ㓝#qԿlg,nR{8W`xڗgd`+ˀ_s_6kAY_׵ZRTsv <#G } _`76t}|h>sf.. Msg\\q%ql8tpu#Vtt\{=Q:[^c8ډ\kS:o7.݋8W>s~Hqmi܍}~h'oW~/ba78|TO[絫K s\ثVmta:ڇ hmn RkpStΖC. ^h####W +qeD1202023`JO'lly-OIz̆f}6 =yӣ炍r_X9ӷޠf ;ulliG_0<U<xQ7wOSN;mѥCq<>G>q7;:|jku/vGu4W>XSOkNW9ooX= nhg30/t*CCRʯo֡#_>Ri7sF+'Ɂv?>u\'jufjv<#roֵ֖º2};oMZ#渾^g]z}&{-C_q6᰷^֜mPu|50kc}:ul}El\+ҧ^em&õB8ŗ8h[^wߤBM={·{(~tv?7\1Vx#mdo}8S]#6A-l+jcg~a)W޼ccCoz!Lq[sv[t}88Oq\t,6mo".rgSfš'`k~z qG# _n)"o𵇭 &Ί9h臣Půs7FX/| :Vu#vյ[wu!@Gzle,?}𽱁gƕ 9ߛ3C>ؤ0.8d)be&X8c[ p6@` ɧ:܀m|7QlGؕ7A+xW>؉˹8Եb]'g5O.scdh22e4wocKZ&3kӵQkbM[g]7kƵTG?l&t ] `ְ:i}-|)/l`ėg=}xmokwAO}'v8{Y9-_ }HsA ;B|˼ h$xc>?t2Xo>mo9p^Byc3;$]h,5sv\u?:r;[uFݜUC }rl^Y3tpo駏Oί>_6̕}x>}f&6 X2x*BqNZK8؊]կϙҕywʇ8+^sq_|j7?a!WLg}/l 1?6l ^^l1Omx7^{\aK}xæ,r5>߮ l~ 1KK]n}ֽ2]8$D>͍qΎxqۑNh#^1\˖?:ɇ vǞs<7dd`[πB.z$[c~\1YK;nv2=td`d`KxGeplp'\晛6`eQY֛aVsAֹw#h#Ma?W/bЧ[{H6M?zƲ˕8ة8[9&a:K\i/-?t(tu-k=BW}?t3%enC~~xtu=.ty Xs 1n8ˑ8*tckq$mvE 0*>}6&ҍsxWWS'eWU[!<㲶Y\?]}DZi+ù}s [m.utr-,'Ɨ?~=?[" 8=oy=y?&8LXW_`P t7sVw˴=8{d:Zb9>uőo9]uqr`S#nW2[<4_@lUϿc+>F!}gϦ%dv?wq'8~ )aP_j1?lV:6J\v1͍bɏ#]W>m0I ',&z>qWW|em)tIوZ,?Wبk7ϚkZFpL?J\_=ݣi0k_ߣOt_5CFF. X].s?xQmd`7zWTk:zb~GFFFF.i%###[albiAf3˹ ,ēȞVONדo6lZ 1m< \i9WͿ6=6Qdtċ.N<'68 gmmM7g#0qrV|3m/tKoJő8хk#ONuדp`1'?}m=r>EOڰ5rF߸6.=԰L\.&=)g ?%y2׵yJ\7L:Z*pŔ.} W1|ґG6qޘ𩽸{ҕ]x8u' XWk}g6n7sp͛_ō-}XFO|cnWՏX|W!洜׆\+taQ7+\aFus,,vkslK· lm0]_-k<ѱ] ֟ Z{֊֯>]u"Oko#x1/6nIO\u#Zַx.uχL3oP).@t:㵘t3~nu;/|k~l7qM{]{?>˹?}K7m?gz~^n{Xr}i'sK>$7Uo\׋S\Ix5kOЇ 7^S'}p7_:Z~O>. {|yAic#|Ot~բWrm5?b_;]?\oƷoO`u/X}]8}c'᧜?ネ?8ǿ5xh|oҵ8H!,}%E  097|Ey n$#1/ 120202pYfސ-!l L!64ٰ݈Fl`D#6lrR[`O4Gm Q6سFąMHbkqg&(<1F]6)І/]x9F3m&O!Spu^%DMnȄoR{Ɇ%\1ɿ g ]0V)ÑLVy 9Dy<1%_6/W}|qċ/ȟ>tpW_'nb^[:,ny#LGҏKaUka<٬_q= \'/xґ3ڍ>ٕ#C~/uD>ʷ6wqùhI{>$3v=ߴOߞ||خ=85ybv>䍎b>rU3A{,>,s{6kN\>{rj~콧9n0= x=v1Lmt wdΙ?cOo6?Q 8^gp7|2xuIνfjg\强Ս3Λ}(T+btuEښcS}a׵?">>Jk~96c|YL WE_ױ_%wKly-~qE?h'ږ!#[c]cwg 7ė>K8K_|.N?lp_cC {7.Ja~6^_|᪗tHw86/h8U[KS}?*1Cmt]:/G&G;o= WsQ_>=Wޔt~ݮ|kMҘ9Yx, @k/˵41 -/@ecw3s@2p[hd`d`d`dfeOu6l0S'ހ9Ʀ==tTyog>/xx_S^vON<}n`]L)1|&e<=j<v6`Oh3|ɹ>8rG9#'bL#.O'*~T~#||1[K:b$Ӯ!>y9>p?x :reš"`2"W|_8e<[G 1Ns9q`Xʓo^v|7X88ӎKs؉=9͘o9eJk\sߦFmydG_S?>xq؊2`kmX澹kEuNZ֠su@5ݚF\;q]qzu_g^6=]ufHkF{o}?|[q"՝[3gKtOr癋Ug'Y=9o?iv>9[O똣ᆗ({}寧Ӈ菖V[ݟc:XOOO7m畇:}{:3;ӟ]K&^kkG,oI?k#;y c}ʿX[m5uqZM?a#VxzhɭxqNo;>ß>;[?kqC[s  =ygzg}[ũ]\EnBݑm̬G<8񁡎=\rBW\rBs|-Jp],OK,q)>簈:__1kӧMq 0ą]m#rW6wRG\D\g5Ҙ ONhZG];nYơ{18q!N ?r C?qykFFF61']羟َ+*K]RӒK8 30>(ƨ \3ʆ8LƗ,?t1樭?86l٘kcf]ٶ -6؈S}Ħ5\۬a W~mЋ+mȪ}ަ%DXu8 74}x.[C6+C݆'/=xX%l>|kqk_{jyv6˵q:o^=>6\kEn ap3lK?8:#?Wy %UqōGŤ_{p~M]aFoXrfjgg'vu\;묳N5x o2ǎ47);K`lH;|q,'rsV8/}tao|v6Hq4Wix)ַ|X_yw>7zt7k͎nv ؊:|GoȰ~Exϸ&t凈|s6]0ٲ+DiO)<:ϟ6|qsZ䉎~s͜g=97?N.X榢.'↡.cO\DE^\97+MG ul Jku#m֗úv-Zb}X֮6kj\?])jlL IDATp;n]S~gLD*Nx7Wܧ>8*=l[8tE3?t;l#|7Ucvaə9˝5f<ɏ/l≣e\6-<Z+_Ne:,yqUgFG;,MN;b1o%Osv쇌 l X*MX>MI}AkQ5e)Wdb8/*ƍc$7ڶ \xjx,֔~uݚ"\GFF.AD0ki7W`WUOMM߹5G8;V'6F!)kSgc1WW\t<էG8bS\nWߚ3D_ă|܍sl}kSї:56^dKMYҁ5oq8a?Ƣ~ǰq8V]O|aħ>Gcn:u.tx^6t|msp+_wzNa!ÀWw\<α~漒>\:f{@i!_uԳ[k3 nG犮B*/r圎\ƒ_6|:fO~p Wnؗ._rϦ8L:b*5xhlj/,E]ng:Mox.pp #v><7=փ|qTԍ+Gm:yeGcIG^7FKgWߐ.yCt[zzGׁ͓:202020202%fDffȀ/oHt[6=fM.b6,}p苇/9PϦqǛJGjw3|ЇOO]z2ĬXw/|kSs󇭜>9=EyS]\[X rͶqS}3 n zfkǕ?=}8˫:Na`ɗkSO%g |[K8׮sq/:8_[cC>8cu:oaGyy{|sǓB;1Ҏގro 7T&~~nƓ{:=G:[́9CF ֎i~5kakv}kݺ]/`[KE>zzn];a#?s.O|Kxt߼t~i_9O~|fO`55Bܾ9_kkoP c?ϛwL~ۦ8'>azF|?gwvO/OoF!ܺkg`|~O9eT;o\8Sqm'=_7ǹo1.YA<7.pz=^Eyr^.^C |?|qȏ<qYʜ?><5_\Z9L'<_.7¯}~i|ώ?N,qo]|3{v =O1^7xI>j?c.vbU >/-x?˿2y:u4>b/?b|؉Wܒ 95]܍#nwǜ^rLc?]С KxsXډ<a..ql8ScIȡ&g8 0p4~9׎#=0ģn [VB[6ǵvoWbwmRGpjoqVǣ8-o6]:33?.c/6vNVmlOxO1C ?8lOqlNǸ}]oy#H` džb<׆׫*\ł^XA&ޡ(EKJBPIU8" QZf [s~gU}ַإӗaO@n/cQlIlٖW_:ؑ.o|W~ey{#<ӬXC܃LxؐOS>#Գ>z#c&y>/Ct2?‡G:/F  XUֈޠnop͐yo+D5D>{D(~%њWcKOv JFN:84vcOިPR>;aB+0fZte?c~뗿,]}~6mK[r+sPsv?Twrͅ_{2z-6na]epǝʇ&0V[\|V&s13a3oF vGYK_W}FV_$t˯7=SeWoA^{*r 7\uF9眫\v֙-^ƚ7_̧7WQL`[>&3ľ ?=`R6'g>3ԓ Ս3l ( vP2r=DxPڱ.峓]c?UN }⦏?>3|Ze/9qGmaY.շ8zT gW` {lߞ <`17O`Oa$C/N/qL]"'FcÙC?\{\א՗5VdÇ|`KLu#:bF!|9{|xӱrce|IW0|EtP&k)kSgKY\pV/ɫ#B?~S>/?⌠Vg]]8z^:4c!C13{WP=>Kef#GE_X.4n9HT,Y:BM{UGEBuvBzƞ2 .yxNh;x,pI=.O|[&vx-r=ſէ?XKꉣ~ؤO=ْ+6zT{t^|Rׇ߼įN㑌"_dACdK+~lƞ>tj'~JLv3F飛=zK~869%{O MxocqMl)M<SQRv&.SmcxC)csQOJ՞8~I b'q*.~_"Şy^m] z$qŖ:޴iaOi#+zbL{$<#~8QuѡNghwyW}KӜsQ>3l2lzcAۍnH.r6ϻIQۖ?3mSzzڝغf"Ӎŧޏ>}#G`"(3mOP=pn.ɓ޸>]r:jQYuxyNO9d2DOnfaѕ'хO/CؔKO!ONs"ӗmzsȗؠ/l?C~#/&l .O҇O<Nbc|Sz1?c,. /pM;]%~)>`P@ֹڴ䟲:t-O::ț@5ע|e=dM^)A|1Gb'$/],R6y77r2+wIh?qEvu-V,3ϼVXQsYma-v~{Cwqᄏl?ǵS>'m|Cڌ71oLCEMm }3-7؂ss@KM[Y98[l[ln:s Y ?)> 3rqv8gg7ؠYf]7ި t{?uVۚd;#p,+|s]Obwr #Ɲ~dMrpm䵉-[B~:$6?c2]OQb⥗:/Ŗ}~cah%6PacI0ϖ.>M.u6xGg0/7zC[>:ϗpkF]Y+yľ8 ~ǔQY\ :YsV$+;x"~әXׇ7H ~s>x2'e|pCXe._^/X`#,tJ?|g|aB/9kS=>؍F' [~}lj7xȆIocn_%fe}x`Kv>ZGt)>tACr7X |NFNF^Kb׼56l'Ή9pADda+ɱGHlxأW\u>C-md_oheopSGְϞ 5j[w!k??:gk ?<e:ٖ:& $cc/׵|jCNOdX7g:Pɐ+,s՟WZ9}v {l˟R]e־ƛg7h޴c> W:_$byuv 䍝zl6}bɼS6>u>+I>#Yf:p>2c,tZk|7>|&csW}񁍟ʰkQ6>sIЇB6/7U!FY}-nyνwީSDH|W9lNxb#~ %!}"dᱶ!uWV;_3gĤ&K_ʹGYk嚑CJ^e7EWg=,'@Dfb'E^llD77%7/ƈ>n<Y<{lʼnmp/Cx„1Gɵ F1zj {ֆvuw?}f u`݆^ _72"⚙^H.Y̶j_h_J/y#u10}}:"08wWGl{/F IDATp(3 b? gaXi~c O*KH6eIlw맛^؎Mzu.~xt0L;(}?}x]RksINzH$v&OlCnG{ݤ_dі8;lU%u䃓LҎ][ȨkE܃M[䴣ʤ?`C0th /ȻEv6C$Ζ:]R|xv&ѧ?))#|ӯ,-<w3v~JʱY>_%HneIf\N"vЩkr9g~V7i O<v0iXGyXRՇO_b>m:(rծ.8-y7knDv:PI&n6uN1I{kG_g/޵όa`&ʅ 7o>&Ψ?xk q;&^g٘U,<_Y]Rׇ-il |So|e/oVL /b &?Uzcʇ?lMoŸ%0Qem!6>]zc|"rtq]>WMöZYwz#I̔6].>ؕ՟ JJ<;z1} dPb#b<3/@)-skʽ}k>}xF`۫׿޳>}O98sg:l2m =YGo ?9<)Oac~a; !wJ=59@zO6rdg_LQ0|ᯮ=8%D8H=5ɾ2dO/]O #xx%}vqA|LcO]~68y:W|ӝka4>#%~+ GąoWMR=qK&eGqH?{mƒ5x=]P a3]_xnOFwnJ҃6`{Oҕ'`a<=v6bAx@p3o=%0#3Sӕ8pt~y8s']q>$H{|va׺P7؂KCy?kP{Ƒ,ׯ]B61=1C1W&#@t% #|z#~->(n1ٺ97?Qb}F$C+o#/N7xԍQ"&qS֗z0㣛_o_?>Ty˟7'd\~_7]O?+ˬb{|<Ԓ/_vC^uUyE/= ^sT7d?$.|[h3nt[1OzH&9dO6/{mm+v31>O9gsp dAـqG}=mu!@l~k+eͷ(o?)q~kzw̡-3~F6K7 m]3 5Gٔ:zg3ׇD魔#~dĂ ׶_R6ژfsq7ٸc|t/c&'ɲFO_sM9,=:?\҇G<>ܐ?Q.ͧ/r{eȭCw1bϽܓo}[9q=[ [?冴m0xcĘx Kx60b`\J{O}!L>^|.4"`\^jiGԝ.i#G_OfR>}^8r 9r/=fϡWBs$e"CC5ht |xѕT‹rPWzSph(FX8$399\$+N7~pG!cd3$&өMq M}YGIٹ>9*O8ia^ˤâN cBGouX|Bl%tE[d;&#kAȼc˸Mx%.;FNq%K/`# x0tdCv-rx3: ?[|cE.7 C'|K̬ɑ/=av-dܲeI1cK9_0 ٶgʵY >m xD3_b<K溹G}5g~zA.-v<<,^  I Ye֌uh7BKֻJ~P֏>̺v^W'&,SxMoiYbi oK^o9 O}X`2(X}׭| ZjnYuu˲+6ezKv=8xPbf|G|y&໸G-|FBFMW^Qn&3W}c}k}64-O~ͮ=>!d`D0X?__2[_k ^¯X({ͦ uxI[t/fey` &UobȚ!bOp/Z)P&OCͅ^x ^⑘ϛoYuk>1NOU[DA3ּqAo# ?Ȑ7Ó.YSK k/Jv1[Odo|Ulp~IuS6OAB {#j IQ۶װɟI& ={LYk:nGizm\ݛdSz'L(=lZ/x Xv[GlAݘJd+ĝ9 >{fl>riFxfA{RŒ|]a1k#Нy9Pt,#G`pE`?M>};1pbc.r8 :n2x mw`R0GiK;Yey0 zv & n}ʓa_-(aEW =@_t3bԆOJ_(dq3<2|n<9/];؉,Kdؔ-.ē)3݈.mŁwf 3|x=:3V;|Bz=}%m~|?ɰ}rd舭إ =x2DGwmxe-&ΓϽr֧GXce_' tŖve +חue ^)JٔȦܵumI/C[NVΦFV=`3䂟Mq۞/U]0G`G>us_49s (vU5ő/FٲN&KN=zm]Øٝ>fWH ސ:~X+_է޺ ,.+Y$n2&*G}N9y&C^b7_ːb+Yp~6tM7X+XɓcbM9b>O>:LƆ\œv\1FtI|7x':㓐Oqbfl O>`B)MGt'6l!"WY{NcRSKơ (.[ SƧ,>Ƒ>> 5 }ꈽuW^;tE_tKu9c.?zS/8XNG՛d&>f6< >9{0S7Vd3cGMf+9Gwsy{}Kdëy 'IF\뮆ÜJ`@0EgfOč]~“˼N|& P@>}^{#G@>}L)ROG@WarP'as`&wd@(i,xiT: !!i~y*wECr6lzz<0|= O z”mbW'|=觘1D.O܊KXS va& _'O[jkt;'ya_>@F9_°Ml|$'4&),]tw iG1?lg/ y>vStMb[-e2Щ?zb|c_1z? ?2&&]N66c 泵`nˬ5I5"e_oFfe-Z[t/e [;dK'9>< ֤Mٟy˒+7a駕|3߯Î-rNP?wl _|v@9׆|6~bsm&~nQ/+OU$ŸP W6|`%]7\N;`|ۧze>^wlfȝvlo n33b3_[c bwBg#Fx|=~7VXYq5ז?/veLbSkQ؂#8%sIY{>ӵ!moXkz 5rb597x(7&zDbK_f-2ɮ7_X~SAl34']ë/c;_v [6[?VIuy2rܸ[z[,Plwg<|SGu>3s/3S&X}fu(S9vo_w_;H3+OWf^o>}Y\pܡ:|i H_>jO0{:;s%,x=uwp8 s2>v0&djł6ž/!UWeCix7=JiүM#^xS3Ct(~dfˉrЅac9pTSL^B"c$l|iAM_pU;|K,_h/xã/_K&s++Ùhct)xd nM 'kwoN!pN2l ?/ H)!k]i{e'q0)#?Ld!kg+Y0{攄G~:#Xvs l3[6G0Әl`N0Z3b;&у}Cx٠#qE~~P7tXw|N+dS1׉ͯ놃b >:`O*icbLbn9/2"'HɁ|/񑅉~WY !z#0#`[֏yymΫ&9}ôG#90Dnڥ :K/k)$sz+~c_60lUzM{2~y+ּ}{s`WlvrnOٯ٧W߆ sT>Cjǟ(W_xA}2qg\nYteWP}M^cK,r̟GtKp;'{2M,|_>l[i/[WLϔ.&`}`'/.bxgNiԵk1czй畱 {}>k=7þyn]i/O˿0]o7O'r||J{7þnӏB2blS7Tg 7l;~D9(|j?6e:|4lm+u7[g{irsd ~Ё_k:N,ؔ؂7=7iX+く,k4u."̶&](MOb@_O}fXW&B3 {3K zbB1|ݙ @/3`JtO0.8Ǘiz}#0#0z0##G`F E,-$nɻC^pʱGrՑ:9)sk/2l/rur'S+E6oëO])rD_ǯŋ"CH636)GV=#?9=/[SD/Gr0ʍ]vtiCWO$2ohb{y?<saO03z3_`7¦-mCɇۏNyN;\y0>fo3Yϰ ›8}><$!ȉuymGefxw}=ϵ~!1d#qO}m'#s-?mTeg>7ɐ~^xG G+O_Ҟ1gF68`/t u уbGNV;  OBiJIz֡ux{ӏg~x}~Wټޜ\r8}Ǿvճ섷{M/1!`4|ЦzH;r:lVt5W}vԖ-on7|f<Ԗ8^|NyvE~"M6]F՛w?ֽIz}?Ic'Ux+WxG]ed=Ӽ+eMg>F"xZG@>}#G@>}U7 #0#pa'<ݦI1:p>wxxI:"/9,ˁfʞT* 3ڻwD%O_'r Pl9"z>)xryT;'郝NC? KѣO 2>9>8|+7}tud'm'bOb/+#q/yv6/^&r#mpA]Cѓq?16~9xFo:S9}Oz<*^|g͈-C6 =O&į \`'i uk OXȑ2/.0k|#|D)wA)z_6GNp!|$gN 6S? #Xiӯ gnD@xًti CFᓱ._aZx^O62F57$b<\h>kA^tMA~wr6:0WlN$q˼E:;Y/Euإ7>C5Ke7EAցxc9Hi~<>K֢7!{OdW}>˟v~n&vy3ڭ]>y- Եsϖ7=}]emnL$Woܰy ?vn9bʓuC~fgK+[|mӟeK,n5;۟hRw\Y1{ַx |<s6N1⯷#:]#Cb&=-$֏W}Xo˲L|+Jkx~|UC7$cNfoזk(x2|6s=OvF57Y wp}9\c-[>رeV[f['^sZ0'ab7bOd7~(J'9]bE,>vP,Î]١#3^՟6ذv$s@}U+Z>:a4?՞] xŗE3s>Wob6 sWC'wy;mXLrqao|0&bȈ52T'c-Ns2q3C?>}fX. ]TEgNSOJh}koy#`ޠ>փ+=>}zz4##ʅC,`ܡW;$-9#"0X;4Ϣ9Lj=9,EIѣNr8wPGY})0\3]@_ cS?Ğ\b3mE\̳#ăV;^-n-ᥓ,aqL||5t@' lkK;$mb|t>];!z١ӗ4fҞGtk9tEMFΆ)&7|O/~x'ҦVزnj&ue>KtfdCv=pC'`]bŽ,G^;}d_2>&GV_`.eA'G䂛>:ř2W4~x匵u#vx0yt!7'k#~n,ݴA'ٵ),T{:o6򅴟"2M9cʯdYēQg3~.Nz}?~C1֌h3Uu#gmlʥY/ȚХ.k˚g5l6zujͩYVxޠ|w6;ص~yZ_*&4,'d 8Տ%rvz;Է3@U7u|{\ %tum<\xa{|&O:|nMa{͖K|\d{ $sەTl7`Ol|g ? vcכkC6tn3ā_گ_Г]juL~3'͘q ˸llH}KkVN`7ü:3AVQ}\<Ú>8̗|lj[zd7`1_|*G"sء(u)Ls+|?9sP&i s&OJ_W)#(pzK|Үb72]GjcO}r^zs('KH?z"~o~OljXhCltNp!"x!Ն?X$N=xv셯k+9b֖[ڔ  b@_CzV\g+z%KY o?u |aS<`ȗ6g'ћ:;1 ~|d ~}!rIY'K"Xird]`LB3甓` ?`O<|t/7-nLSp%/"'_lH=5 QC[p˗$awa32;"-6I&o {#0T#Н֫mKYhX|#]›5M=Wӕnal$~~j7<|=6'Gw) ^ej&M2Gcy~!,t>S&?/C7X w=G4voXޔϾex&Y~ѮɕQ|sOv叾ĈnO>Q+8q-\b~0/pe]]RO~req}q2:6':Gپn7cݥs> }|N;;N6qԣtG? Ϝ/]Yt[:`Զ/unlxѭW_],t\+n?äf9R$c/u醵;͹)].N"O=D~F?ƍd~+~ivzX(皇^풘gL$?9,D _~-0x%&;+ ̅n,/nrM:h_\gG[b}{#GPW`Jxg:#G@ =>}#sOyڡ>wk>>I bv0A'l9r`ӎ9LsES&>OyOz,p9sBobSǍ89d! eKW0ӃO?x%O v0?6gU:J$ "fx0q^F >MDnD'~)O<6O'"{21&>Njmt*.+jd?zɘd>mHK`72Ď-OCzzyT]l"1y|tɥĆyr9}fn,uOL!O&f03lvzJ耍]IXun>+%q`DOdgd`|bW;^3$cx#(1ѯl+ܢLu6y^[t”=}ќS&'v]cs1fx2"xaSbKD>'I7|% 6;y2aB֍V}2nbG0)_/uc?񄋬~#44"`_is/Ԣ^뮶F,mNL`3omse}ֆڑ[w^}* -P鰦ءWٞ6ʾ9xd٫c|FF'x6cW(S&s5d#y{V,3f>svrk./;toqej2礼-6j޿ 6[tyu|rךpg?]xQ+-7'gm}1nEH9ɪwqǖ=|W.9f9 x3y >6anL)՜|41y+3~f6ި<eV<@7}I\a^'g9<ɚ3_d}-V C{ /^(VcyND^쒣#i2urcؓuyܵuLyFp~',]VdrzY1cI7ŧB&>A!#=Y~DHb`,e_j+M2n IhǗ E'c<5|r֍qϏ\v<6\CՏu}/_-?=8^\T Fv$c˶~1ZFC]cg$qD᳾1P[ѝyv9x5AVկpmeZ2?7zÓ9b |Lgmͮd=f8>f<6=x%"`G@>3?23?ƽ>3,ƍ+;s׋я~Uu_Ą*>}y)_|q] Cꫯ^ObtV9DvPIX9rh"l9$/bUp _84uC2mх_;cu05lk7_tjc<"f/~OY:u) N~*K#w8C+_OH?VfO aWN \' ܾD&1q_ +sNq7#YU~dŅؘx)LH]vؙ0aSL„܄,(c>"8?qKw\ċgR[4~z|Q/dHvv|]]$u8GkzTNvnw6-צtD`aZyOy+&W&;|g>؍7*v?V?d &q>2o#62Y9JJn1xl%}M/כ~v䴉=aR}ZbdE'_Btn׼x=dwd'iCjo>$:?ƞf?h瓛| Öu~?G=h 'n:;X;o,2M~^{oշGZLācA-W7c 7`'erN 6]ZGxȊ [\ems}٘?$#Fhg^yX~Q]tQ~{Cqv?iR~'o~8_j>3{Y3fcZhzdFsjO+i3|S@ܚVSkkFh|ShSѷ#0EƼxF zرS{^Y>q&kFYmځ_^^zr>o78Zkʧ?/g> *.jÖ1l*;rᕾ?L"ŔV9>vGo^ vG.ڔC pL{tP8pDLN9$|b2 $^zחNWІGJ|ѩAћvX 'Kzf`mt*=]I'N>8r(GBK-A^)OL,\“; E6GGVI0#J#)ii듓3l'vI;<|P^}x7z$8~t꧋MaCu2Ii =R ?J[I%:c;a\c?>8$vi@&^G:\ /?>t=~0$< }AN/iG"W+<~ny)W\Lc?O/}oY`M7- q'>rYg:K_RF|]s1/(?;?i~KY֑dLF5 e-g=FWz0Zhzy$N6c_|ŏ1"29=֦:>:^Y`gD?a?|M2n\vmr};=$޲.nz!6xvBM//oF<^.EόrL=2ij{>}#G+2T{}!xY_,< ];|tANO@[z vOy Ӯ. `)t0^/b&,'t:dD"F?qHYD~IS/i)C<9|6ǺP$~pӧ_62w,<S6<] _>33^)NolQ]Uϸ'G9 ~8-G^"OzYO'>"0kMcM2l?ANï /u>> XGMY$-qSįYq?rs;=꒹n\{6O#|||ڲV&%Ʌ^nxyk3o[뗰k3oCsw,{gkԧ>%=MLzl[jzb}{_WtHS{ yoZk4WZtX 5ꗿ,񭶷Yct#\Xf+"HYmg7X~p޹͆~T>شم`vdGCt\R&ˆ}~S.sח7ַ!UՆ1smar]q6amW} /v}y"&xGnQk*F*ԛ~F/"}1ӎm)#_3O`+^:9sA=ˍKW }6xĒmz/~$ↇyW`k47ɜqЁGc/KeW,ޝp9`c/[_'d%XvݡGl0%Nk?cMqH*z?;n<_RG]jQiޚ3Đm?GŌ\p?:ِU}f{̸[6%Kn͵U>2o_1bO 8s+}dg\w]z{q<&_?×?zğZkcqmA.lؑɵ6u~X_IL+}~cLϰ)cSi6K,1qo!9rdkriƱy? =069Tzfz;6ܰaoN43"` k.{>ԕVٞE8LM gJ{۴>=>C=2C}{Ez?9R_Y$sr@ GrXN;`ãϡ[#^lSC;6k }=Rl&?DAF l#/Nݨ .jx !>!lthcӗ3%r'ȱM,X)xd>qp#y|g{taXUw6}Y7j؃ rb;;Nf}>,]}Ywi- e/?m#F`&_EWO.洛RHvadԍ׼>m`+t =S9Vw}n`zrk)ndg}ʄz6Tܵɳv)#kx^Wv~/ׅ'_>|`%˚5?sf//m^|iDt veJ%xu>>\>ZVV "yya &cDDEPx28U(V@2BV{mroq'+IN$ykﻆo?6>x<39'C?:k>|0%/dַ3%0ŵ6%~Olwʃط~i>y_\k)ag [r˔J=V~|,w_9+o 9ktR__tS~$Fu`K%JbNWrs,^|ѷڽB>X1:g_<;Y$|;n}vף/M8SNӋ/[0ɿ|n} ;m6zIG}tݸ?Dž0Ol^~[<?쫭Ze_s5s5ȫnY;@9*ZPhP2'l(4ε2E]c#zxSl?V6iM;^O"2vC=mziw~GDFiKG.v3Ą ~T期~6[(XǹxŚ߿~3|QByoOGMOwԇ0Ȗ|A;Mn 4Vo{$e;r ?C>~涵*sx')kvWtPdi-3l cuo{{I&mڟ__A"/WSlNx>^!)[&#񇯞s|yf=I 7ɜ>5}uҝ(_ik/Ŧ.:_|(2䂿&?)xz)?trć?k7z]~S?3B#=##y7x*la v، 6W8czslm>m~NGUFW=~ٕ'otnrCF[|!b!d?a >\Ǔ;u%/h|e9 }(kZ||z(G7zoˍ7nF'%ozkً|~^vxb;G6 Sm妰CfΚ&g__$Î|eG~o+6۝M//7Z?} †6GMrt'F˯F2-׌VOLQ6snWOYƛkܠvG?<4[˼A{Gƞ5aY|s/+Kbpf,̈́O&IolhJ{>Tac?An{3} 3g`fԗY>̀ ]wݵ>U ü= h6StԩqKX4 $.Kd~V6&l(kǞ:6=Y˦ӲJt?tc4><Ė66?j#I8O&kpFzblGlsyvl'lXaOv\'n1hIn QlRё _OA%twg+qFOKa/yK^fC>=mɾڬ+2܊ts']ԝ|umtV7tTv69'ڝ˧NV)p39z(4.=1YpK Cs[|Ahp-g]cbxfw:q,ok28Mѓw0c,ˣz6. ON>.ə1DQ}3Iu9'(V[wn:/>j7$1/泂]x˸"'~mG/\|˙xCy3_Ϳ|(ʑB0N؇!pe͘$#ϿoKc4&ھK!_s_4U^V.'oO]",Npo{gu7li' dE Esb-Ol߆=X!~P6Aɰ.]Ş `^_ӧGMr6l2㱙 f8G-_ɲltCU7퉙]B_QOƆvx81/{ KN)|#6C |#hX;6gyq.XfVK$/N`G_$k'g859|ć# #1Q;y- M_pgVcv.yD~ xxPwΰ#p&O#qaӧ#;&g݌Armj㟼\'dť-ʽYc=kXJLp6/ķv7|hG,,.|ؑz%6} Wr~I1a<âe md2aSu:Kw⭍Œs|=t饗~\iJ+T8p=馛Gl՟Wc끺m;ƽgcߜ &ΣZVnhɛef~XoZd=t(}<.<z`nZk:gXg[>z L#}[wou|sƸcv+xQ<}cJ.`8[lGƍɿ#Z>{$i$s>{ןsvݭ,Aw_U~O7%P_+N,FF,lL7|CCN\S2p'ơu|Iv_'// oGycɯ~\n>S *orѦg1rew3:!?rˮXŏ̗5f|}8rENLdɉ7yWwɡL~\׋_/~I檭8Q,ơoUEU(Ly$}j ǯ P'Ƙ:҇3`/+!6>b-0G%]/G}~Ygv+:^~f#"׎ߘa3nt*.`OGšѦ^oOo ͞~Jo~d~6yc/\{MG&"YYg,\.O^W%0׏!A/șn,cşN:^;ylԩrk+5Ԡڽ22ʠ9wyg흍+ss9l~ 󳵬'zߎe-m&*|kke'|Z(3훉C[3gd`Χ30Axᇻ?n\tќgafX-B~G;Ǵd P.]IB_M0uk6&8ѱQFE]ѣ%ϦbClpۉgP~|:+[ᑋ;2l$m"u2)6HI[|0~u6'>@Fn!coyA҇9"c;l}I FګkӇ=yS?:(9Qז|9n:l;j 1GsD.ꈌoڂ1y瑧_Vn%mq IDATio\cC8oƤ/*; 6v,^<]b=h9MI|Q/*XhO #8~Ӯԣ񣫮+)9Ws>ѱ3_8_O/ꍉa3Y{roLsϸמ/2sS; }s\x47˼_\on!?ŝ>ft ': #;KyӛL ^G{ls-_|&FO.goz9!2Ǝu-8{'w]s+o})UHl)؅?k&9ĝ=6KF#|/qG0UO6,7gՐkO:mdJdQv,%2|E7#\[ <x^OiOi[n^ _fʸOQ"[F'8X߶e'x6t3ꡟsWɜ<0|'wuj\EKSŹvĆs$^ŤEG.:ȵvbw\Cq^k*{_/F?'6s3k(d{g 9v-,)GKK> $FK-:.,--݅3g@E;j3g`37=4cƌnʔ)o&r6O^ES[cM0^WulO /f4%dl~Q\yjWcZx}J貁|)MX =#z9q?yMƛd~c?b&vy-;lz2|Fsxtc1yꓜ|ᱟ\ȗ>'Ow %pGF3Oۈ_!xkLl`v|9ڐJdl rXH\d\p&'0O_͞$ yGl˟:yܷ.EG;_&9.WrÖe6G_lm2!\9|8Cv%'~tN;'nXFP+qɣvvq$KCƹ\3y$OHސe zxl?s_cݺDƺ#ȰY1]&gc , /gϞݭ@H΋Ҟ~p|eϾ\rX.Dǔyac(;q7s|D;xl?+oHӺ?^'\qPwm6a9y\gϹgG|á] ̜=okNV_=s^a 8um6 zHlhsDY_ٜM=k KVaGތ#簽Vnx]7؀.y϶5fw[_Қ6n.P.|BN~}>`Vck.u[6l1G\1N4Z̶v<\s ;lB|HoѭWoɟ~Ϊ:r-\?~׽o"ýgiNJ/y|!OƒG#)F<յ+L&.:e~PnD{ȃέj6.>We3#ybCtBOdOy҇GF;;^bmxHݵ9] k3aG_ bN1åysk\a+klɅqHțOb^9 }u)y;uO,oNMW"Eb#y;Y".u9!g @UGuX ojh1)A7wq k?vکxӷH駱(fLF2EяdO: ׽u t0Ou^;3夕 X=/z30-=1gK +<@/|a1=33(GgI+U^ŰׅH^8ys>=~.܆0q$o^6m(mSI3M?y 746ʹRf @#eϹnl8+6/dacDžT6tI*6ĚMn _Ѫ _ "ß'U˛Wr6Kn6Qm@٠%/.-;W܉&W#mM)1?k/I-!v3ړljO?/a4/`cbg_>e 3b 6=/av䜎sv" 9a X|vj72_S-?nmLOrY@0:?G橾b}qg M}.:Jz=73 :t>łW7jznmk'odOϛe˺Kv?~oO\CY+a< Hg8ʘ@>X |N_r,.cg >x ;AAoudOn _s ?|‘M-oH{t:t[y^S?*,sEwgG?lHp #l` ,(f2|yzC.|.']2|sq!mL!dNtͧ~iOQh&SWN5e[W J; =<1rENo|InM5+!Ǯoc[|?}seAVI^z\B8&wcDB.lmFcRn&$ybI¨xAFFqll2!墭ݐ$ϮM=h6'm fcΑ>[c' l[.G%ol-t_lExsN[ȑ^p&.mL-6$!.bV_{bsBO)E_A vwT^r=l|N[uThc1Lx zHB6vR#"Rd9r-qSؤ#L\;b ,H~^|Q~|.Ezxf/>2#qM]mxyŤ%d#v9g3<\/O\bMN訓sԞ/)b 6`%Kι#"s'Џ-Cv:1M|iVk[RJ+uW]u՘n1oSi7qnp k-7OÌ6ƁqEioɯa:gLd,;fnrGT(9s:wy Ov8y4o)_~ӻm9[ܔpv~X.n9|$sw-_f-d #C>Ԯ va_I">El7~E%gGnXQG/}f7壏/fM#|0h%"G6F'";(2lɞk s88koY2ࣟol [#щ#=uk3]c:mGxr8Q!J>La_ň9 6 ܭ5bs'51-/twwӦM7wy V􏱐>4k3\{ >6 8T^rJn!KOh6٘% Flb;73ч9=v8$NtCb'u9$~$@WN|Eڬd6w=xA'Owo󙎾BbeK-qhS{$|p¡`d: vdP'Y9Qh=}A/}i+b`0|cQb\#w|)Ĕ\x{Ĩ?ȩ5xbSl| v<ǎk7j6x`' \l/k7Ws-~sD(ˎ199IZm#S~jaQGV|Y&ӑGvEX_DQڱL2OMؼA,=M||tֱwyf3d=M)S®|7Eio;wݐa6 sZ6ac?dN9\g #nրKs97ǎ:ouo!Njݳ:MY_|渦u^>{uB,gvzHNH?F>عcߗɜKE_i=QzGF ;uqYR2)9b0O~ِlKNXߕq~aA]6br 3]@?(B8 ;} pOsu;{tI6zl}BZ2 tNF.EMS>3z~]Q~"L"c.w(X|uuNlg<`6EL&YGzw?9}6G7-~ry>&kO/yhy?/eh&sʍ(1 ~r\:5}n5nmDF~9!7dlW 뙘\wH"kb>埼?8NN.eSdNO+?eLnao_`WMn}ъ_nS{;f 2K/W~ܰSGlFz$V}J.n]GFĥ=Ml8;>w_f{H=dxc0ޗi|rfNd]K[{vm̽3g@ɝEŁgFezO (BgϮem&<;{|+GU|w}WپͦFOfe~T}?6l,i~h[| 6\iMm6lz@ˆ]MLc,6l?C=ұAMxM8mMBoEmſM9G0 >3ml >}هl!lˏ\yfÆTGavpapɃJmprNM:(ݫaC6ib8Ȉ%Éw"_NHmy1ClpH_ ~oQwT^|kL12?q/\dd |8צ##&)Ũ `Mr˹#Ćʿ~e;8Wƭ`m^3;p9#{)!vcMƦ|51%^׎_G&.{ "tG:gܘsK$G%?jW7񣰕6rέ2'̾B{b V}nLˁ#>}ct_1o | !o|c̽ߍK|nbe|Ye]w$ϖ#؂sO^In@gB3`}:#?37<+Npm6cUW]u.1Fj9ɵAag怂Yd˥yn;,k̉v-^)XDG;'֛dHG'gu2z̳ <][0ڛdWb3X#`J֍Q[ď2%/6c/0YbǺܜb} V08g=']>G׿7.ˆ6Xg3ExW3v G57d(7~>Cu‡#ymuMpC<1wyyAlɓ<#fDF$/1el͵J偀=N(s|ޞR$O؁-Gz߷_wn8_.*sk&:1$cnLȮs+&75VН2eh.Ģ/Q+y6f &jm3]_&y?ӏ|'ތ;+G'dW<1˗kUGUg.v#0!xS e쩧ǣ]_~.pė<6&Gu8O>"z yS2vZa3f78m\uLo>Tp8r}6?(ie`Qk]/eDȍ[;&ϢgYGXyٷ/zX Xϒ{3̀Dcm yz6׿iOloIzamP?B:.! \GF 5.Skc,v<:lٌ歼EG=m l IDATϴÔH6) ^&-Nφzl>Ĭ]QNV=|hO>l:F/|(>وNdrΗvqыȐSlۃ_[}s;S訷vC~|&^e &b#~t#ְ ls6ɵ<9jeãKؒ{vv<>>!lB-<$/݌`#8O#ys˛^1H|\]!\OC/&OalcS[m`i_>#u<>"mї%|P3 ܦmml8W>ydwSԓkxz5ѡxy/'7U3пv]5Yds\oEuۖz͜^_EM(0ʵ4z/-x2su$/=|  [{YCֆ2.o:ظU25qrwf b_}X!Nˣ$^z:*Ə%f{t-o|V"=~l,7[twzb'fp;¥hs|.#n>heOϾݺS72Xqn=_L62켣L]ģN^tsK\&ؗ'?2c>g0Od#~R|E;9,\P g<_w*x]=~"[&$nh5װ񇌍95\s&L[K6{k_;*QH]e9h՞jsN) C:븴#͸<.m\Kg@>O uI<:biw[tM8!4H?o\6wT'>эVno&cX6ֲqlr ̦'|Kg&|{l> ?OG7lyPQsAnR˜'cKlSM::d'=KGfvKlTF_3,/ a+vS?FC_K|x0k?a&CM#8"dc^CG'}lf|KSlKĄǯ®١G_>#pk,Lx8DDĖ(t˛mtns.t`fNlIopjOˆ8Mb>d_['y$#7< w=a'E_{[';Kb7G8*d$>G%斒]u}igQp]~7B&[bʜ˼ vr%{'t)sr#^lmyy [awxrΧ9r.np+rǞ Gnm|uz0ĘJ~-G^6lji30|173=IȄk3cӟt4Zw݅Xcx(_%8p7ՖoFuY8ƼVY{\2/梣y2?;sH]l7޿Uvp\o-`;!||k{ZAOy&ح5n {6|O HOֹ!u-m}KDGK[\w׷wvι_LR??r +q 6x;]>LĂ .k#}`>룬0+YMM9tg< ?@bJn+0Ocf}ȟW.Ý<-з3}ş:hfm ~FqJ+7 C}DQ>ٔ'm]~rK/3k,0˅_Oi{U{_'qVXs)w#sJgp]L5㇜:'>gg;]3NTߘ }"_q3_le16xS/*E߲ϗq8/dx1uVq/'Mag3\9ԞCNO;>0ĀĜGa zr'&_v1+%ȶ}FƛIٞ&._FrnlWs&Y mo{[+븨'͟~m1X{_5yM?hͩ~sg6kS<K-g( ⧗3z@O3g@M ɀbfC˦1e6l3Ws=ݩ:Wۯ^WT3$>fE\6mM3a.mI 9l2|fc>gclgS G|A׹כg?Fr.?F'> rgpݸgƇ>#;rs ƹ/[WBC󕱓/&z`&_5GG0: :<@]k{9G9Ǔ3>듌3cGCNEO3.~M-]wu__YvXToy[F2:Xi9adg}ziu<1|#oNໞ0BsM2q4/:_ty*em(c}s.~[p<ӄZskaú/.2Ϋ;1+l@G>lKs2!K|%WrO^TS+쵟%]f].-p >va=ֆźvum߬{ Mϕl<]z5u8K92C|xv>gYzY#˶\ŗ>sヶ`9sbs%o'#Jl3?3j' `(`iGɟ1ܩ+疟FsoY{Q b\7/uo(7?PX ];qd3Uތ)' ?9y)qW:l#b,]dWƠؔĠ6""}.Vkb"E>gvGqz1&a'&2ƶIfê*nܳ ,r->\9&W3rBW8W=#_a!A*H|>'vSnV+bGʑ"Ξ&g'<̹@!o}\N-tW]u\n;TooiN1e^4yj3&ƬM1yZYdiY;Ǫ{/g@əF/=>_Ɯp ƹ[5kVwgWzu/^6`n죏>>9sy}*;Snp]r%L6&빋m?IHnOT.K'ly6F3>{//vƒ79>v`x?-솯qNlDN[sh/*^tnv)zsL=c:~'>2+yrWsG`a~!>٤ݗ(mV!ĨMa43pg/}qun Hr/Rvۡ\TnE\tIdjn}:;CLRy1]3:Cij׿{Ipwv{tDw_!>.ǟ=tH&xfm{^!sϫ#{yPlu 9&(ϊ/ճV#;>|M|tU7# `"6Ykxtk7؏]Gȝ9+=Zm(6-`#V%E|=_R`mv=>ȓ9GoysZZOl^{w7o-7wyid;rYTnyǛe\S|"aԞ0n9D->jIN? c&|ڱ*Đ 0e3o|#|FW79WwL[ _p&p>;rNW>K&l<0E.|8G=b#WbM{c|9a#gɕ 7ܰm*?b-:{_[]ku]&-{gs\m&wk?mMlnHe ga_)k˰19z%Ox'b/KX 3g`eag`fc9AXKGK/O7xԞx3|?Ķ#_|ɃcO6:Yw\[Jy$O;EEvLѡW>3\lo/&Zo/yS =Du\>S;/gҷs5^IJi)o9&yƵydg~n>95sCƽ9RD9׿{$sNy_u.?r}JXno0]t1~/,k~g|[yʳʺvxdfY:!`6X*YK5fXctif˚ev/7OYu*[w;e/?ǞxZ)7{i?1E9 k*F~}&nuHdު؍ӎ !sJV0O|ӕ`?{#fS|ނ ml0jcS>DH- piKƇ6X^0k|#|}k=DWř~)|>9ތ:kFr?2;s}Ga>ndT{wfM2>ezgeo]7loc8~c,=~DY䁜X3G`Q>Ŧ->`Fl=p~;y<Ѕa20Oq}✌b]lЁL z dExZ=M XO%))SԽuyHIM7,Ϟ=+ y'?nV ?X*~-IZ${jʵXE32& Ko@>} <|h 9YbxJd^x=Mܨbn_tZm 26sC>hw79Ys5ٚwwT}OHO>V 7Qgs&b#FTstX.mteK?tQn &_6՜g\I<~m.ol‘93}L6ngŧ:68"bc]bHVnE"6e5.F @&C//_T G|0!1%|rtWt})mO~ komɳ9"|_vK+bsL0 l8o ? ]}Bes8uCd_L~eDy =̆zƲvcV}'#_O#!#VBW1yvcyӿڒp7FϾW q 兎>g%vy&Ə/`%gUـ)qA?0m0E?}-2,_h!kpEN_D,W= |%c^\0F>_RE,|5Oذߘ |qY˽m}!3˺=ӟv{_Y|>(7/k0Z7Α?3QC&#_kOlw6S9)_N;I7\Xk|O/+.`ŷHN_2]8-'W\g/yvQu&bGέUz&c>ssaծGN\YAN&.t3aW!ܲ[v6 ,k rH Y%y⣎rMG.c*?>[bnr!n"2wnZ{M7uoy#&b~]׺ʞ9Eewv1C.`O fdB66簣k6[$3<<|!s6yE_d ]u2}X"Y1ZO>M߉'{r0H^ <9u-ŗ c=1vy)r'6v?z\=x$3N苍 CɏVbBxwl5OM~Z_rq,j_\Җ1A?~)uE>{||Նm3"|urrvE?^0d"6ď`7Ə#[E&rHW\Pda]aKK ڝ;c ?#yb*P;A/$vcO䋫`/ڃE8s&7Ug;vk{G&?6"-N跘顴;g Ǧ"c9'+!񃋞&q˙&|^OK'r7qoF[4l,M"U323}vdNG6m!kl2:M2wl} QW~^SM$-x̱UY[2V\Y¸!v扛eu̜՝^&.G~խȑ]<^ 5kmrB\\W>7c"> nn"~ٍ&6"r]ϯ6v8G\=<?ۿ2,s̥վ#{:qa"W|^w\GyC͋hr6]=kĥG& r`! y3c*$~McS;M2:* s$?l)-mc#*?-9M\B|Ee+62ɰ6<n9ȶ"r[Ax;mӒπ+ssx{,>,z7 s>_ 8|2 G f3g@>}&kOV=>} L`lZڬ Y6lzes?HDk7*}|dEڲygCf|>] Oѱy8|Qʎ/X=a)9zml0!`Y1M'$q{jnγk3X_y+6vaIŵ#=Q 싗>?ODX9f)>~`#fKG<>'?a<"d8 褯6p:.|zֳDP#'{0+nQN8?8''b]Kk qnޢȾp N~>}΀9&.֟b}i|Ȝjyi6y[^F,g@̒s@Ih6 m䲙e D V6";\۬WwIFͷoEnfQiQM=`&%o_`ʆ=_6 v0'Hl x|Wg#҃]<ؔ>l`zCmVe8y?z0IW?D?]?x*L;ƛ,m<ʼnb1WcpZT/o{Cv!CY;TŊ_UOW ?8)VN J_7v8*N{4jnĕ|vxW܈ Lo`b3L6{>懘ojfvXnMX[ 2׉}@ݜo7 ;7uckW?_ #Ѓ73|`-ǯob.?_,gV}: N_ɻ mW?qq惛ⵎ'{ˇîϞc.t)o>~/Vpˬ lBG|bןC/i]\g({]?]_\t1o|ݫ&q.]{6s9bn'~8&6mi~ov}1iWדl\YG|x >>M L\ٺ3pOqU?}M ^g}hfyk_e\r˧?c/>ƺ>O?'?y9w[>x6Wc9;3|}]Q7npin$vlݼn]Nʏ~%x8~Ky<pX[p#ƈ|C3t`RfÇsxu/8zbKp+WBWt;c~o `nPiN6S}lo16S ct} 8ҙ{qs7-ff ^9G2̃6=wW>xュzu՞qG9\tÇߕ_B>}:IO_[L|X;~>h#/p)/ {R[>4n3^q_aɕ&RvڵҧW\-N:e Fe`SSuk磼OW[Xl^:yӦ>a)tjL'؏DoCmxxǍnK:w \#tF⎓6v}Gajc}l'p׆3O8J=%Nٜ1*uX+f:bH⥟OԯvuN< +cp豍xG?՟d>Τ{tLةvug\=@{{~n}x<3:yx''%䱏pxrNZͅ?tO+vb;mx=a:p\ї>8aS Dd]\l=(vu}g8rmTLt:0I}><>cO^oq O~/W|3_l` uC[u''/Yxno~#=9Ŀ6lK[xCEcxț#pw/l!8냡#vXpOO~oV]*q{=lZf~>̎+?m-FǯC~/)3;5ַymm(kמܷߛV{~ k˺h_qoz߾D>H]g !nq2㕗\X$[|L:}|+}g>\{9_a 'B–lX y+J;cVL=uyKB쵹oOm,pSNC܋ c|.*.}0,O^7@~c+[.[r L9}Z >$j>EON9mxl<eR/ڈvˁM=&^FrC?宻>$ŕs򓧞̷l z_<6sƑ/9z [`+<x;ډيG+L 74ύEy0PLzMM_0i7pW8gc=X0{6x D[>=c )|W`XC5pn˫:t'pHssƾrQGm>Qʑ;]rd^Ug[\9j62󟙁̀uS&ڞ;GؼL vtN/?tXLnf`f`f+g?[gff 8( !pWh9TvA&̡yt8ЭO [Wisp K񦁃n<? uu0H߃<`O*I>rUHrd?`;|/En{CLNtۛp~l"Vq+No  и qX۸?>wX/L|_b(v5p<"<#F\h΍Oj!&^88|a]lڳy7m~8WS<}7>]f=:=Nq_)?(n~ƭKdޱ5o䐎؊_~ٸlj^ޘUק r gx }['|K>l] N| X%zU:aބŅ+>f4!0Gk=}Zh}۟skŚWin$t|Y}U^GΫ~}=u׺W}_'ϺKcg}Xl_T'#۰%[/o/?|>1|~;i9 YKU:{9Xv}6Sxj^>ǿ>q|w~w{S$/[P8wˏv(>nbUžMW,0+v6_}3qr5G~dԧ?qGqw~uO<$o3)'8˺(_Pg#gq}k*xpBg ~1_+|HטC_.Տ, g [X򀛱Ə'&s>aO>16>/-YE.8E}|ᇓzc .,R8҉g k6cl.0( OG+p7u}eYU1gɇ?፿qw73HL t r 򧎣?S\qӾ;|}a|Ô#c*)337.k󦒛MA˵eĻ>g\پ2p}7seYѳ̔[wsCLW)X3ٹ:Ds]}8#a$,:AWBêMC6驳V\`|<:@,l6=qpW~x]!]}ŒoŘN!Ÿn?lpwxGO)>]rO[$?r0\7>˿vzXǛH>_0]bQ. k:J:3IQ{x3}qP^yW OgԓO>لW~ʻ+ѯoǿƵ런ة 6(۸C[o Ɖ_%ˋq+|{<;ƥ/{:Jħ.{\ao 'm8ȉ7pZ#S)N&Nڧ /kP:ٹo}ױ-iv:j?7y%/^>Ks|[t7e/}ɶ[O>}{_{Z-_RwS)o\,?$xW;}Շ(ag g(Q<i' ^Q[6? N}jݷ3z{Ca~:q!w.W^~8pk3|uWy} 6p`L=yHc~ǎ-}q f4'œ.kW^#&}6xćԧ_{SSG؉~6.6^k|;抮{퉛mhb8e9>L)3333;;Nhק?ӟwgpb3337U}>  8rxAvt3śFOAh`8dG<~0΁6-98~<v0\b,.tlNQO/ߒ.%N\}@ķ/qS.|{ߊSIʿd0qWzI79\1 o1Vس.tX>}:jk?㤍[ _u~ӗO>9ʟBؖ7b9a_3xRᛪ~6^bK]bN[f`oW$çኣX96rS.h쪳)Fu^9q'&V~i-lUίy[rl|zpRħ1WG҇>in+G!,0`iw5K{xb7>~q.[xktɖ1wTOt왰669o}lҏF|X;}q}rzbQ`w=–cfN{ Tœb+)3;-օcۗխ=z|N`Z~9:=ު}tضfc]£oI^{勄>?/9昍C0Ub&ڭoֽ}=^ڇ˧kqY[nݿ$?O;=O]ۿԼ9yg>߭ _qO\*?.bq=b10W?\EA<Êu)'Y疮W\q7(^k`3=lj-~It:G.\toۇyŧ>jS|0=ֈӸ>vD,Krc/vs\ã򩟽5>zڵ;< }]aNf<ԵÊCG1C8#b-GIҗwv֥Xs_6oTg~0؉B/L ~EFxFWM | /xC 늋x}3 {#r{go8OC5ZgĞX33333*2*wf`f̀C.cy@t瀍Nw:0P?)3¯7mt\zvtuXBׁ!{o| %@XIO ohgL8-'Wg?kӗ>P;CT*#v'8:Ń8L<7IG@­8ܕSz|rfƆ8m 艗$bia1qofr':ax;}m Gyv)Fv4&3x0+^&nc֔C|$n\ L0~\q4&I!vz+=3㥝.\/c>[|p{~XLLX͟~~맫Gpʃ<s^<1kGX(D=oS}S1E_]-I?m|G~X+Fu8S>k6M91>my (ki~tx׽v\:ȑ6ⰟΖW\=V m{">_!|Uo ?GV=ּ˞5>u^\w:_XPXꞾ7|opG<#$a櫜'{ّ0M }u+.憸/]1U9-l{t ;7f8?/8.W#;1_l@p0_q`OW>HKeSǒ#1cXuDƐWQlgf0@k@?a:gH;,j.x7v7 x̾k u]R\ Vq(G) '?n:i׸]v=ms|nٳ!g1H!|{}\_|uzO5 E{cj/'`QH$~͞HIvھOWk!_ ? =>0NO;]1sog`oWg46O؉VyzCf^{ZFMju^hި/[w[W,g7_Oz$Y|Γx챻+0VuS?nbN<dO|#uٿxU ?pNw}^>Ḳ=Ŕ{uJF?} [=>v^-boJ>|ӟ~s(||na/{ Bv˩~> N=i#Q1,]bA `G\v]a[~WD:lvsN?mjɭ׻#vS:-\|Đ}€˞My-fcl9%re?l>J .yr[1omYnsIsl%di/ vƀҘ)W*Ik,pdu>A ?Kxi2303030303e_ݡY${;uffffn\/ܸ|M홁p7:Vk!Zع:x!ao9ۈ}K:/z|S@H7}{-(ޡ_7p8؁wVc#))~2= } F-,L|9%dM "}CЯ70y +㥎7z=Ȗ,WqxF>Ϸa*#P@W|1ʑ~8 7tʵ6yO2ֳ$ =Ni~s1vDX`Ɇ.qˏȸ&ڌ/^q.0~tgvG>NlrV\%'ּۜ]mbV |1잾2;+,!vWbR7GCpc }|l7oyRG]}d[W_vp'/ro.#'vxt;Xxo1,vc󃮹#2nk hyKxm/7ef`'f\7Y~ _>鱵7[!E8^W= u{ku ^b]=3IDW!Ե9g8g:)OY[n}HBGnwƙ ]zևgy9nū\+SqǁobC/?90͕^a+hp#0|;o\iG3Et¤kM O^.6 ڍA|g17~`6l=˯\l[tgmʧϖ?=_t</?9'˙,8˜23psȀe ;ef`f@kr\{.ѝ:?s3D830?(shd73033!8~㡝;G;c}l;t͕88t V~ Up'G&(a?Vʆ:N9Ŋ:͏{>UyБI~䀮ćvj~|9aّ&7C8oZ~qRl簖o:kk\aZ|68/ʍxf?_6t׽~6ȿ>o tkSďKO|צ? <ٳCܴQ@oHsOy6u|(>Wƈx$/5xk>x2fZ8Nt[A`˫BGWy6fp_́޸ n1Gr 9c0[Ō{6|ٽڠ#| E1>v< |'=Ç_pƎ1u׸'ڌ}s?b)o6ef`'gL:>^ ZTKk:ga+ct[l3X$X<wҧ>ey_nr8IO^.~_um?H=/Z}~~ŖŋsUjGk?$b?q^SاzX [_-|i_a:Y}?|Ũ҃}{ۏ9]=U!OC{|ck8 Lr)^X;8gfĒq\{'Q۞OcͧXLçC6zD3|9 BO̫ kx8rN~'C97?{2??Vp+t{mj󪫮=ipc-n)mG?gf`feƁ}*"{(brݗvJ.zlH;%ϓg|r|L˙<Xځ|90s9_2ua6JQw m8;ćz<`(Iz${m|Ͻta2Vxtӟ==aq}u/Ӂß6 z:[E] pҫ>Ş&[v{ƽ>qū]edC`;qmiSP[ngaõ>p5=-8f 1/ot%k͇8G[60:tu/:U+aZ{|G/o_?}|(lH<,`Ǘ6qO[9S>\M{vc| CfG/`332`Z:WwXWք(Lu.cV O?߭a>8t@'tk>˜tOW[/yoyˆ~e#Õ7W/u"/qt}?MgCu ]7KKWz0kI*Mi?㾮 ͞CuWWn|6+Q>$6}mgmpl% u5CVU~qצu,}ae.W):^DzfA|HF,{>Ko:?\+=>EN> :Ny0ѶTfvlZ;6I@Mep7nb̧  \=Qgff ]tա4_m/ 8갭Cz8pK׷$MFvCwh؈{Eo%}|W38lw@s_7}m}K7|Ձ` Npvm:pvtʯ4>սræ_<{poy1O*|ড়ۋ0ؒqX/oGEtI3F}$!9g#Dq)}+~Cbynn3GLG>[e+BG6[~|qǯ,l} ٷEE4#6?;+&sH[;ap(^Ž_b4 $^悹*.}[_rޚ[.{rmٛ_W8܋W,aowgލ b-pW"?zn.n?3;(5e4[ °[o+z0LY毜ަwrͮ_g' <6L9R7m\<46oo6=xt1&pA5Ĕ-~]<2G賵U|S8.O1=g-Y1!]}o~SĦY|5b=~J]1j3ԕg޽װֈ8*>u-,rk,Άȏvx+Mt 4wcc~kr^}mK][>o9<5?6*6sCr7!|1s8 IDAT8'W';Y8S,|zxDkj~1 W>0qQϮK<2>l\\x&RR\㗇˯VEG\jS1|m8^m)՞co<\xf333333NeLffBd:u?Za@A?DWޑPA:̍|;8|qotE_la簎hqߕ+}9r؋CƸ+=: {SN_ 89UdG_g9o^nPw?,=ab^,ӁA_tA䍿r V]1a1V]z”{yZ7vq")Tػ[<8Q<#VEmpn#1i3KpTgK! ;y#pQ77Es|BS$x!x^{FR׆ouWxxXqo?3;(B=ګ5^oխ=@u=Қ"!]E=:paoӱG'YY^c:lЇ>uG t3>,3Zӗ\qp^?{g,9j?ս>8zO_RL{m Þ#^xm{81k!_?o~kL?-_|ÁisOO,z9g =U<Ÿg+vi~>\ɆWk g 0GrH 3rN+f'.9nf^_afL`c U1!ًS>Q)37 X|5|Ǟ>fکX{g负-wv򞱷9z333{f`>-ɼ`ϡNu+`zdžvtRF_ѿC9}}xw^:aO]]wP CLյg.^axi'Б-XOLkӟ~?FV҃1*7l>Y{}*.ts#?rz숸8 0xSh/?>qu]1My^γ W,m<.፜E\%)gOk\vm`NvM_E:%fIc#챮? 8f#ʿ8&qѮ-ԓbpuSfvzikg^f5]kD;jέa닄&t`ٸtC5's:Z_G,?uʣ=߳W7dqyѯ7ų~mў-LZ~)F} vw?=={6 Ik4lGO]џ>>*H8t鰋']-8ҁ _!y˥.ozOxq?y!, .F~#=>`d?bc] |ä_k,/z5;XI5=l]ǿ&Q96^eQ:_qT^]]ǖ# Wr5am|FߞGąވ;򡧏RVmإS6u(81?*lq}mquN̑Əcgyb^t[/xɯ#uf`f`gf`9n3kMKjʁy0/q;*7P2ugff \w~(fffS9r`0\i0P.ߌ 7>`8 7߈<AoM؄GW!0 .q pa[vŢ}G& xt7oj7Lun#o,80S^;1ፋ{LJ_frߚ$%싋?q஭@;[eNˀeA{\'澺}Zko~kM \&E>BÚ6WhOOio&UgÓ裏 |ӓ'u".xeKeCÝ?%nr:D^òߺz!Dž-_v}}1mcsa[+2o~ͫw?|~>kyYgo,2_,Eү[<ʃ9ү\x.0l\[h|ˉ>W[z-nʟǮ>io ^x<F,bg|?wٕ.bws }q—oE;i=-_TG?<㩿|۷}ۖsu֩g}U M<;~w>pvU~s ?76b6Ku\˙8]qgsOvZ Vn'Ʌ ouy.5O{y%Ρ&qNonc ߝur8<20?(sxbf`f`/3Pa|9E\9PN4et<u|f Sq`8cO_p}iu`Kd;}kg/{XTwxW:v~v9*obt0Hf߉k>]xu~1J`O}p/W~;>|jן/y?n;>0\3g.xGy \1)0[ WTWc{cVݰ/t X|>yŽyVw8]3L:-~瞍 N07?2~eJQǥ-FWC:)W_}A.|QuSz!|k+|fN8Ykܣ˖ەyzK܀U lr<{&[ڌu= yM? u|tWsc(o>+^{>֩>9Wk=uϦt0vcܴ7bL 0$^`{a9u o8Ч$Gl뙆?G!ŕ=_|X[hf^N} V.]|}]i?m]ym sZĀo/ԏXvGyak>' ~I ~Z/c;|7|? M\ql 󟙁9wt|Tмonjc_ θ}5#_}>ff`f`f`e`~Pf;303UeWA!79XspVܩf!\vuǿ>p:U҃I@9;|t馯_џ-?r`P[WXg+M~;XΧ֑vc[Pj;awţ`m lX倾+nâOxb6I/?tõ|Ix|O+U mM[|1}lN:\g|Y ڕօklW1IG-)C\-l:dsχ69.aUn?܏|hs~,rRvJїwoho}{}[0{ct- wm nU~*(D{9l GrDoy(|Xp٧׺^?IjÓЁ?c'¬o^gvbi:zԧ޺M.jko>ܮl^ǵo&8^cG~|]XaOiݷ/~l)^Ň/^7V?|uq+ӥ7sQW/ G{qO\Ëk|wF-lo>swH_w[3L|rEo,sc]>7~$Z)Ga;$]}Ħ:?xk7u3 ]zvNػWq#\OWyG\v8|K_t*g̲u%pŕ|W'藮!V+nlٹW?܈~IЮX^>9G'G}tӴ_^{wI~َNώ+||p#s3303pe^@svM#zePS #ߣ~(źcx333j{Pe8y 8r+Ds尫>ut<:밿0<$+х[tO7G;[:;m|8dvu|w>lQ=p@}8`|dcx׷W-B\8^U^o~|SO7ao g rˇ6<Ͻo^ancc|x9C7imP0b^,+KV' zsŋp1Ɓ/u}o87Oqo wxc׎csoӃoY;qg5'k[4e'6gkַPqԦ_Q޺+z vX5m߼I䀽>b۽oS؄W7+]墫x=p˳A,X.mmc(=.};\;1@O+~ʳ9DU&~t ?Iܰ?vYg->08L+t 6)3;-ցmN[g֓B֖>늾5fdKX1^AX/ְ=&\Bn >c̗>[z{lkX}3 uW/x'[η@D_I.LXmio7{}{PkS!<ӽx/oX>) ~GV ƈ^Խ& ?bQo㡈/ .{ԯvsM`/.mrM_u#r"|"]v~c/>`~Ma|,̍ԟp6]u`Cp{L9(Ӯ<6ϖoLǽ>eC`sHz-v;\N?xuQa{1:Hv+bd+|WuIC?0ծԏӏ<ivD|926O]UFXo`Ǔ_8#,mueۘg+6xl=uiuڈmljM}׾&eZ\~Bzf)g|:g.83L_k ||ʇ\iˇy@苋x}gGt[GI0Ĭŕ}kN9HɋcuNϟOLa wm|o6x*r/w<n}"Gꍡx rЇmvƔ=.L_G/#⦍UW]t#~pHs5pÇv$nxi3 W D<|| S;8-xCvI`ok ,snMi2p_등bٛ1efpn {p=C)2hL.33<=$vC-WOi IDATSzU0˾vqmm~㈕OͶx\kS^G7يUŕ?}$}3,'cpwCiw_.p+D &!p oI}3яg6Y>7>h3\e_Q>{Wɿmc3ic|%_uzQ_M=RW >ɯ~85iK7r6lrN{G6>bWY?_Ջɕ]qv6q+v턍~WоXӫdc|\^Ӧ:_1z2/: IkJb=Sn'Q:a_{k:D;Dϑw|{ï̋_mo?z=ag}Xg< _7Ň}CjPG ?}c]Eq+}!r~]w<ҧO}꾽2]W8fWu.)u:r+pN<vo)>^oO~C6>,)Q=lUɷ{qפ' m茘0 ߽.Rbv6ֈn\k9 OWRߞ۔v{ݏ豯9]W~bMӅ)~أo.'o#m}> 8%qSO âO'">N/*x;7<Ы\iK{6$ؤOQ;{E4؇ }dod价NwB\{˾K״;20ff`f`gg8&ʀ1g|c7lONF9s!C0Vup7Ktp8ۅ ~oIqȆoM987M:Do ?xaA܋hノz6CN\҅㛆\ tW`'՘.^}7'rHG7DNa`9Uz8]zCKhaQn;8‡gc{tUXܫ[27̿t7߰+1(tF[N'?x+tZ'a`)qǷFg"Cu1#{9"Xl Ӿ$6/[î6ja]~/kw5ӧ* ^rM>]cx7>ZbW7ߍk,p[t~2ᵎ(7G`0p]\;;~Vp@ nږ*hO[Rh 20!!AAj-H[D@-TqBk",Ί=|/{ι{z}>{[ߟ^k>6u%,wڅo]O~`'`'WxSfZkk7= Db-}{5Ŷ};mN>Dֲ=Z:5MW?,kt.i|7ɼ߷/iOg/|<-/  ?"^OĎ_8ݽ>m~o.0SfU9kUĮ4yeaGâ:}x@~v^g4♏gf`f^??^tm_Wk XNCcsgffN ʜ 8c8 OtrqN7Rs˞=)/̲Ɇx[dG;\D{x$]q8Iٲw@a{ :סD}WqA/aA"{զ^K]\8kw0)>^ Ǐ]p/m|3:Ă|wm hw \~ a{"r ϛafg6Yxik"8Oc;yMur>_#VU>v$bnKވI<-~Coc@ƈ/xRNϟp%⢃?۽8 \E7|xx)!򼋵uf@9^b[;(}:۟}\źo%ai? ;A{s-9 ~,6}w--oް[|_g?k.>,._SW~eu'ş9y~-wSG~H<qz?(ﰉ{q{`xxo˟Ux(mSlꪈ>y67p)}\o\yХ[O:ef`fh/;p/܃1|;g;p$^c3fFY? HԁlwNy7>5r4?30303p*e< J 8Dw8{HTu .{>M}J?xlTOcpЍ}% WCqبr?>vFIl`ӣȝștF}:]Xōo;6WUg 5RP,>Nl8{~8m醉BgN\ W;޼qNf?ƃomg+ay'_G.H/_/ƅ=wc.|>mq{u{=F?\ __v3Lxi>/11>_T{WL1g1˦oā{c}S;[:I~C)SBvu^l G =Kǽs6=qQ؇ŗ9zrH9-8«5.`WoCwI}^>jw_+hG.M]?P*Q؆WaIa[L/lR vmjEЃMrOo_w]a:a|黇}O~W2C>vS ܀ЂCXq9:V*α=~:a>30303p*f`̩83f@r\9r ̷r{(VWHn<}ͷsyj`&jǵo aF?t|o͆xq t>0)Ũ_pTӷkg-J+lm>o>`lavu>7O7ro,a%L,>pppol-_}8f&G:Ɛ-?loB#xi] [i>q0)vq?܊WEӗ/߶S?upq)/LzqSî?ۑ| [h#p/_|K'Чo9.8k0S>7ɟ+wVæ9-}geW\Ŏ:nt^Fn'/>tǟ+طo'sf#)3{%濵b[`~[+֐J#քԮ5Bǯilx:fM6]+~ {[|/Wگ +6g^'l,C/~ѦĄool¹iW)Wt`O9l\?lG`Wģo+ډk|ϯnD 6℃{uWqImC>;uL9v͗|_,a8 ~$s]]=.j|saӯ=">v ބ\O "86`]q`=\qQ&&/OU~c_',mO>Nc'>z1Ɓr-&bTnUo#|޽5Ob'=N=UV{qk7gP ۞ s+MĖ+#~7318U;|yb Og4:ǛΔˀu5dFG*a8P963030303p,30?(s,9ffN ϵ5VuxCm~9PPp͡{t:t@J7zp<99s olt(ȇ7jƭ746;v|w'dv:Q;8ksH_=nD~Bnt×Ga+7 ]Ř>a]awh}v!a|щ2.r/tq`+bt'͍r.D_k<ζ7)嫜ݕ97>4j9V| 9Dp3wn{͗lZ0Å9D^뇣_|r"&:tMQbaG,j7/̇8"vzБ7&'I*Ǯ烰crCGތKG6;GaGG1θiG؉&$}u7__pبó^5'o~xB;\: .]<˟4pFX(8ӑsR?`ч];q& +[xW޴so^gRIߚ7]֨k}ٞaYCP0뵫G:;1twMp7߿o^|yq`Zǟ#Y͓|ﱼG_\)"~ڻ//ʷTo0N3uK;<:v%uqcѮ͟׹k'{;{~ؽWz 1Ǝ8G L-h`t5'|śij^̜h>rWc{6O|gR?bwϖY8CWtĆ\Ô'lݻbV|7 ?Vtq6~p|O󃛼h30] xH\ӓk>^Ṗ+~˿|ȑ6!-vr`~7}oc}|[ml]lm^Ob券CWܳ^{s?q[TW[[l`#<g4M//}I-\}L+',#]է YNs<+Ğv(2|$~$ @q h['#C7@:ϡc'jSof`f`f`fCP.fmf`f4ɀZW=taہ|aD]Ä`1}>E&s=7V]/å;#U6[~m.Oq;<栗`u x#8}i<O49GmɨQ'N~|G=v֕11vv/Q|>xˆ:}M ɦx.^a>5^GFaY_s:v_1/v?1+eǖԧ^uaVˇX隓D=]L:U"7qKtԉ>zrÆS='=xtjO'>+a mڴzc*|}}O؋0[kvvO.8[ zkÀm0|ϗ֔6: 8|K/lNU⑍+q}.{ƓW|j<8)t+_F}uBWn/ >bkMvt]ݕ{\Y| .Ny&=;X| ,<wvkaVvw7SqkG?⮽\׶K{:0وoNIcc. =⊫~w7F[`*l暍x I}! |&ㅟoqfCF|\b]N3]=}}\+8K%Goq7luka?$ag~^;ޱD5=16rQnNtn(':of`f`fDeC'''330303pfᕃ<ߞ-b}c-S9w aoz0zs*ww8o;|åE:ӥ7~}b[r} U{auu(LOW8v`(av8}Co:dUaǾoC|‘K‡v3K.?)/#q7[?qSWʕ:{Lĭ8p+Inn1~*a`УG~뾭[vGEWyGӕ™ _p/ƞ]sX{0p/>>k4mlwc$&b!8$ݸ >R0gAVo:yÄqgncJ7dݳUrN/csvl7| Z, +_q-#C{1ڌqgvq䓝P>v0w7lb:t/kP…O_?{ÈO:QwOuIXɁ>y`S<0G?SLqˁ8U`(_yK~x=5q#l>>6|¸ Z9\s7 KГWB7'{5Nr/\oǺͷ<Ο+[~t pЇEOG8pq-cl.k#8Ӽ1Vt~]b`SาS?I1{#/ra\.ɏ & ]Ɯo:.aO(Gr͜mo1wSc+p] zي-Ɏigˏq7s)7tE)xCL$.u+F?{_яxқ23W3`oUv֚=}̜nFb}־@W^ʏ+֠5e?wB~KmUqx vW{.t=6Ŷ= \}lxӗK~hɓ%paE_,>{ޭ_ɉ+]zq[=gG={~u{r>{?Kq4|K>I+>if[~q'0\axP|O\%>*=ﳃ=O|utaS >]BB17.=7Y˘㊿O~'Oȏg=9#~n|a[r@v8k޲ǧ˷~8b]7n0)[^=|}pmˏ1&?Z ڍWl3]yGoX_mlaPo -0͖c檰 b2303phNg9;ۏ&L~p?Xl{-1;rxWݍ@Ƭ;Pl8 Wó333{*:`}1𠩭40TC:lm=.9麇;bVg>|}<\;㘤oqPF➞+=W}aj#ꏇv\}KWvAWp!_*wN?Ͼs\'`^!|O[̮auتr>l#ǍO+ ui5.:=&,+|C<]g p>\:+q˕M>٨gqO7q_c?Yw>p`_;츰'=oߛqHXFweЩ:ƀΖ+W*/}p_v[fma&6xZ|/q #_k.Сio>|*]Y6W5ef`fuB=mb[AnX$atH:Ek}hCu\ f˖Nd[?|:]]wFuUHq`u|W܏8q`W^ǭ;z'+е}'o!$ ={8:3NUϞ]ѯ^;{ut+q5lWzl?xCϵ7W>6J\鞾X\u|>y7pO!g{c7-a+Į^갊翜jSѡX.^盋rK77~|#^Xp`E~AB1N_7qWXt|CO %1-޸i E x+1lũ?aG蚇[p~cXJCpx~X2'?r+N~-['}X5kv˽;9Q\#[Wqu=bT7m懺};Wlb~1y';xX+6%r^'6^<Ä&?qG,g#6x-?bUW]fL>˅1!)|~Ǽ_xZ0ӑs:?U>&cɮ}-=yG?_83ţϽvuq/g5aYߔq}ioZ֫J^:&'{~W}̾BKl/xhcȎ_/F׽zLkV;я}vi mٲcC+E: j:<=~Æ}NJ,b;18kq0}|Ƈeo__r&l~Q_cok?_n㏿qko䈈.N <gD1_0Ƀ:Tdlq1Wa~k3'b|;p4~|5ƭΖ>.8󇛸Sw߫z߯o?|)0g˷<ʍ+揺㗊=A~ʼn_]{-|s6_{c*u>~7n4pł3O?᫢]n9,.6Bl+z\=o+i8?p/gO:eqL$omo=lyX1[.j^U'>r‡9pśpV;}ClbIW:L 0#ř?\9X !HqOr\u-r`ʏvZJ9`ոylmyʏHG<<;X&`O1MqOδʏ~”'ma 0@#pZ,N'Ц[c֜Ӛ_na3FԁhM<}c}{߽ |?bk *^'g}Ɓ20N>~vXOGkk6lp*x;Q7Ģ? f (ZqAQ~K?XڭWWNiן17۷Ǜ?op޸"n&E;< L)3{5bZ4KZyk7A['mݲXׇ֬^eŽ=gюЅOWڕu~=ӧO7! '.F]ooʏvqu ȸyЎUW=qŇrK/cO.~~n χe,t}˷\r~ ~gk_vӗ<|?rEqr9wr _m:Vnx$.}˗3;o˖_8G38 9K^7#?>VN L|uyP˖<۶_kYZYT/>`>oy!h#yƉ~J17zl]Y|Ow?\?ή ?/w]8o֣3ef`fɀ=DXJxNJxǒbc9_wux?IW#ُ9;5b>{4ɘv2fffq:"=;nsFo: W};s`A#)+W: /IlmA'/lykQ`i6KM'%]:p+鰋6a(cLӥشpN}t#EM}?>X8+0dr9_q_[h*z^R;aaF^86?.uϛyaB~/}=wӣ^lZp/.ml=p'}0Ķ}iiLqF(?~%?~ww9>L4~HMO/|.NZqW)'lvN<غW{s@+Cׇ_v 캆g/VtVnl~f`f`fd>#t4Gxx;.SVzp=IPtwuvk =3S>|*2p<́CHb~ڷj0{}]\WRw/[%} :sCtr/>:;ػ D}8O\al|WVojg~)oƸm\c3P#oⅇ8DيI]Ю.%J)O| K}P>zb('|GȆ}s_}3NX-~qp'7Vkg7uy`#WQ %n:{x&NrJ\h8h曝ⅫOĘʍ6B_ߐšј3qǝXqTؚIoQ8pcq[|SۜR7V 8Wp GoivkS]~)l!a/?E6D'7ߍ+=>?lH?[ظ/g~ƌ/|gggy0ʷy/x̀g.E*ub-C1kKt 8womZC֕zkE_tͼkK^^bh: kԺ=kP5Ζ[0-={_h{}[' [W{yvXl'Lqm/qSb`/0 S/Ս#r_'aS?xp󟿼1.q3{>qϭs/u=aڏ L<]W Oڡ]>'0ٸk}qG?N8+ LzGX(u?c; g\+p6\=M7{$p'&<Ĉ3I6ĭ݇U~+lP>_mO\߸~\aC\3y$r^s|R?;Xq ~a 6boyO}MN66~Js_6GcutKsB?qv>:ґ'T#f+ֻʅXoci}WXʝ>},Ƈ~dy]=pw;0Ǝvqj+pnGGc] 0哽>oؿƛ7dY߬cg4n\j#v >jMq332`N[֢yMS?ki]ڧII_I{_Uv^=znƇv~õ\e~qWkO?ֻ+|ֵ+[mrė'*toV`; IDAT/~2bYnN~}pp ũ~[A"ڽ.t̖}7_yw)gt ]+ ǓƝt5<ˍW_~W}s{^צ;n/~&pC>My#w|; [{]h&w ~YNadÿ6a(=:303p3nZN(u0_;cp"u7D8GG#,y ?h~G隁{e8]6krVBظLBj6:죧˖{mY=]Wv0.Y>;̫__8B7vᢝ%pU G~ ;pvx-}wnlonϮnykW>-N>KW|C8l9bs[;|0c 7?'6G'>lZ/.7XJ60#][zI8tMuFS*.cyÖ#sq0c?']oɏB¬k\wSóyOIXq_Lcq2 0 l ?G~a]oxa߸b +}lu}tʩI׽~>]ãS8:ef`fQqM[ akP˾uN>Ǻ{G/kPS2r =Wp ډ+˛Rk{V: _+|_c&ܑ-oz^]|c﮿zkن[?ߊv#ͥm,'=˯>d ;>0ʕ|j^u%f^2ϔ]^p5&ٲnޜ__E߾M|pCX}f'&![/f}v.mn9)Ogn~h^_l!mv>u#f}Jt z/NҾt];o;^t:qf`fd`̉2303pdCd7dGշ29 )u6x盀l}{Ϸl: GĽoa CWrׁzPOlսs:|-9"D]XC;[Snԋ.y. C;n/Iq7@Yo5Ɩ=|}ڷ6Sx}GD^XPß⛋yU| ~ 71}A8rȦog+ ty-t"7po]ban96A8مk6Q,5ցx]r7 |3 %jɎ < +[9aCm2rj0 .ro~ woa7g|G|3G l)\aXNBۘ&.mU^qă cR&0Du舛Sm} FOߵulT7kvR_5ўAk\L?GߚXs^v{}xg8\@xҮU6>wU_^CoO'^,$qcbEu>8o_ /M{鋗~yX!rB~o}.An>O@˷6 p`gE&t$]UG+u|m|ʳ\#vkDbkYt~aSx׮q5ΨW;]9N]I->ld+]w1-p_|ѝvo}&rh+ָẋg=E/z*7-<fLɯ߸ q)Fbq3y,+5rՊ 7bpo^oGl ,sxSo->v

~Il)p2ovx5qw:WFpʳ~Scό3su8y A#l==loThƖ|y3@N< =]liЎي,c/q;q%w؉zW6[9叝!|x^KW3U_C1W|pa׾M+ |!gf`eZk[֏\ְ=ĵzӱV=5k|={~Eb>>[խc>Lb"u ,x^Kx]m-o/ l~L9_>wZ_+7 'Wpһu;}-[{cX> Nj ]T'w鵏rlzp6>`Aq,>, 8BGBWI`4g/w^ӕJz+rʎܐ ҇C_S![N}ߺ,`0&709H_țW7y#I 1U>aO_׼f/W%Oֵo-Wq[~y9x+|+lOǿX>,/KO7niBpe;eftG[#}$H<N{-'ɠk gO9xO<32ާϙjZ2\=G\]+^q>ȥD6dc/~]I#}<:<oI<ҩ={ȥ8`4~:A,ݧ_|p\8Ł]'IM^mx^>5F010W_86Fz"G;]1yi>V|կϏ6xݳi=u@:eN[y/5\h_; R.koG~|Nثa󛸷fZkk5C׍to:,m[f,#FE]8ծ-Lo+7m٧8w/~OSn˝雗G<;o|,p'`/,t@§11߸fE)6x='ct؉5z.l a'>Xv܏3xo}.}xw;d.}t7q'vU7O`KWğ[ͫҸ4 q:}X~s-mrڳwO3لQ=q,ܧiQ{޳qO>! 9p'l]ɘsx+ٰVц;]'qeqƒ$u^J Jy o^gfN ZQh'c{ ^g7ffffffO;?>uf`f`fˀ7pP͡.ߊsӁui>A{tSܯ8\sځX~U·:8|'ox|,?S@~mp|Ƕ<>{>wX|9檼moo4{ v|uō})ƍ#E~W.1l Ӈggc@cȖ|x;BG?|h7aMo6^jWFdc.[88t׮t|P8Qg/WHomƎ]7*ox飫yh\;>.1]K<Ԇ}}'|9˷^ad[4e7}ToqU0pF. {5#fߺkmt;NNOb[\o,57_TqeݟW>q4k~Lwx ǹ瞻<?Wx ϟFf5M|G_GƏ[؍6p䧽 &EJ1o󟙁=֥CQ۽5m-XuD[~GF: k g"bnħ˧5J\(q랭}\ֺׄ0]V0WSq|!;!7_]qX?廞-6rop{su[o<>ξͭ&ߴnȯg}]\h6W\H3oyAOuΚ_x-[5/- |}H_>y8UѼ2:-_:>/quL.~|Ql(fS|xTW"Gahakl _o}IkLW ˗k/6u]ŏ_Q΍(.A.un}~}Y~.o95Z.{ey/{&V7^4=Z='G-g6o_l_rKiޘ'ovYW~ۗK|e_&-批 8g0A.s'9熱AQ䭱ey'b )6ri{kL`8HF#ncmlyNgf4ˀuux`k t?O 4?No~Z_f\w 6aP[qۡ!;hɟCBXw6񣣏w@'~;`0p?7xcW~H9p!(;rdD#pg0T,ܸGc䰖v8ʡX/:943tc09< gΈ-W3 ;?gcOzSfjĞѽ5ޚ'ֽu`mX/֊:kZFZkxH|з6$akoڋ~{cվȞaeO&o| ֺ6^\g\EhW|qu|'f^~@~ ?wC2[`?y˧!;1r&f'= $΄n9:\x8}.!z%˟tVs|o+gǘò߻¢=]b8K87f;,7Ok4\un6]6* s_ucLU?[9# ]ڌ/pO{c,w׽>ss_%O Np/3>@nSyS6]x7;\(X˕8۾^J3r Yb<6YY>bŧ>}O_X]?0i7?cﶷ]]p~5?k_?QSsfc\p끝g#`p<۷o˗y)>s㿵~k^o0%M;ogo[7r5l9C񀏿"_374ʷ1 b>5ufN |h>;>^׽x"܃ohb|Ngk,#1PNA4ZQg(9уfE~n9@}Jb}˵{-ϧGWnpRhCAtHCFm]e_kݧ#ҁ19V5<D[INb#; rg\kc#ūO; n}:lGl'󈭍.hhKv"g8P.tscjPOw_~m)x5α7Ƅ7cJK+]QMBGԵZzp֧_" #8vz孱ݽ+DK IDAT<Nvxe֕-oЃW:q̇WiW'bv>EWj' S wiWʇ)3{)9n.*֝9 HkZi[sG{6ǨφҁNǛ߽~M\}"=_^7ҁW ?{UyKQAΠ$(S^GQyU"" !! @ !B@aġ茾3*~@z $DR}8s~;''S9糞U}p)ykefON>g?g<$sĮq4;e^{Id~Ϟjѯt"'_-mn}[GU?t>5AxP߰/vv19'_]AFx#7ږ9 >CS|rbU'2F6P z!|~I<2t9jW=^W{XfKɜӧۍK.wίz1;"=wc^D{Yc}tm㡍sY>OsmY+jM#~u^#c8) 6 rEx>m˓ƬVD|+/'˜E#_y~Էt%ȏ>/y_i3͍8xdzd&g0_ r4bސ7ن/p,)e-/ mx'te1X5 賛Lg[`FEacÆ'_r7Ym ƒMYڲG2MJ7%neƥMzՆ؄ 7קbEfmyT`cnwl>|%{:lʃWՑMG#_62f#}|\p/es~m)d*1N?v^'l<;xbs9g,pWo]N>i ;*xspϘrlb_><\e?xQ.)}w}IFl .>0q.1xe /t d;'#&2@툌6208g-:y~čE mA|ȱyq5^=?mƒ:O7 ao\Ϟ\+2`v}֘k9C4 kX|&,u&9~[œ}8W$8\ pZo<( f[d'2X:~VϟxO3/_STL΋qg0|vn}?M2猷ez-^v@߽:$q1- O;=vu07 t[0˥qS\Ơ:b֮4nC]s.cCoхlNB~۹<9CQÃ.t8>= fDxysϛTr;e:<9z{Ly[?xg&_J^o~5826˵?ӫ_xˇ6Yyg>ZFݷg;˥Oߙqɥ,o?IvC\~{c,o-Ql{% ;>ƿܘ7fI8nnsz&.ĶyҚ57o[u]WKZv2Plm^lْeu׶}S6>Wq2:e5k g`]M9\-X3e? 6umrw袞M/\JjB\H7˶pgK!svŁO&ItCn١ScxыcÑMư;-`]Gv!6lǃ-po<_Ȫ'g#27f\‑n8 9.Hlx[ȇI?eE=]ɉi{ Ð\٤]ɍn.Sx*|VZ3f`9ƍqsXoΚTV/v>yNɥT|Ⱥ@~I>5(;dKlgC})Wp(txds;O;KNXk°!0*; UīOŠ/=1gC2~>Eؑո'Z"o?| kj:&)^:|7;|tΆbl9 cHY-4 OG.LΗp?g߹zrю΋/YuO?xH&wO񈩢O|-[2s>jf9|n=6zw~G~d#W$s}ɼKƃ~|79҇xBoYu~V]i3[3Ff5k X3f`Fm/V$k a ꛅmWlAf`~m|%g}?~|S͆3T =mk_xlz_lfzart#/6jmngom<-T:bcS};}#7曋dSq$7 \`U9q;lʁu?twN62 boj7&e[}s}#>v],YCloAeO l'r|kSny_,r'Nb&[dy!&'vy_Xֆ$G`-tVJf'\#?{OĮ6GdtdjX!/OΞ~i8crO:[p%Gm'o{tIO;KCvWl|[;eQ;8/7o2˃vEpk H[?\;vW"'bK/OwyYtÎx|~NL Uv㚁)bi9Wqn#2yki Vܳ1R7lS=~B%q?|Y5 (X`nkeM#'_O{uIF{gCl> wgG?uC6y]m<&aњn 2(倌~D|2>s/7dz:}. d_vsWξ5Wd.\?,T>KB117H|kW&.{#_/;wm?1!W&p/=vM>mš{so)",W0ބ-_~;oWO}M~siӯsف9MX sIϘ7[13ƃ>ws|K=>3#O*]?en41o<4f0qMy7dhdY缵pmk X3mdg{Ge,b-eԾ<_ sҚ5k 92>(ssd}f`͚جaBfV &۠$kM`ҎMA6/ymr$[~f͆1_= Me aPWڼ/<}|y9kPr|D62m6M`n*ȏ:;습n|}Ї>t˙g9 d6' 'WB<;K函Z,*l' Oī]q96QXؗ[Gq_c}AN7Agp?Ġag6XW {9fS:Đ;0[|or7^ 7Y;2ġ][OWH|b{u9?_8鹹dPq_ra |2<}9V'Z3~pSM32rH/.2/㇎R?QV"q"B/ᯟ[gh+l6k?>.xj|!aW)Wم F$'<5[>O֩Г ?CW޴%yQ[1)t[ƅ#<0\1Q?k 7asŸ6iG|뙹8'o sM\>b3?(>s )ly}vrc=úb#-=.l7=`Wf'9+ d">|/b~5 O{ \/[}8}ƢM!S_)V8v?oS?)oIz~$8 ,?#ّ/|v?}oƅis?auV\>9 l|b3|Y@=G<#O1fS.!us,)lVxyqBÉQGO?1*^6ކI'OyS;ӟ5–`>x7J]w)3k`o''.CmgL~Uˌ?}uzsϙ?y{ζ`q};O?'Msمξr.m7_L/{eGen㸥dz-yIcظakXypm>_qtx893ӯW{cicXsMt59n,N{ycmpA[b_Nٗ>AboK!Ƈv81jȻ~L<liܓ_i>J^ GwYhFl!fur։膁.'ZMQ|0tÚ>Lcf#⓭d_;c9U9W/[{n8>|eXsDᨐ_?k 4øFR75t;昶;f=tV9%puAu 歶p3a# xx[E@s:ŝ'8*mٚej4ӧ뒧\GmtOf5] |:F7%GXnMvG,V岣ʽ^'fZbWkSnԳC&UO_N]:|82rn 9?P6W[qO??zɜCOp6F~I\}~\E#q|v#>疒g!/;ȍ! ċyX&S:圝=yk9۩/r?d c ~`zxms*l9M7lK6 >Swѿ}>5Yb6Wa۹B>t IDAT>d~<瞮giK_;h(gIwcHܭ)tO=Uj/bq X3f`5k X3f`Fm/V$k ܄ msY6lLmFX6Ǻ)OKMiǾl̦[fa-6uȆ3oy;ptmұ[!& o(m ƶ6ߠqM߸7 吼z+wcC~? ȇ0nxOVl9r#xϿXA7:dT Xq<ƁsN> b×CXă'ȁ gLi>Ԏ#9/l篸LJ0費1L_|~vެo|sY Z86ҿb@|aozÇvsM~Q/}LJ:in!9)6Wozr(|ֿ0oi|];ۭQgO`z_>O1ї o9gK1aܲeCL8Dַaˎ7?䭵0+ݬO?=|1 6y'/L|ȋvxi y&/ƞ6|A|У#WJ=y2Ϛ,Ƽ2Cc[h$K9cUGOޱ4|u=5-~ض6US#3;}֡ѵ8?]>S?<%ZhAlM'sY7D;ӹ=6 ҇O_p!?ɶ#;~±<0ɛuP̈=v[/2ѫ |=r-P@O  ^ħ M xE>;d)dGy_M2xx0Æ@cvty,O|m7U1 3Wwoy ÿ V)v %ƛe٦O)}a}6=6,??,2灝)?!a>z|Jo'yC旱8]ˆEt_6[Zi5k X+X3f`5;nevܾ]#[3f` fCKiզ.hF>Y~6퐍=|mvu\`7ɲe-?un8ǖ 0&v7iwd+a <ȍ#7d^vuP&GC6mQ] 6MGMSVfynΐ-6{%.6,xŨ/sCrM92Amakën`KH.ǯX]mtE6#~6m?'U' Yc6r-F6)ЁOhEgye9aoxL)tȖoL-p!m6>WC:?|ݹEV^F1ɓgbK;IO#/nšRW[|ӗS7w2RCWM 216]>~(@ ?`#mgkq݃@Ơ~)F7r6s]on :{b16{zՓ lG0vyco1W'[ҚW2ܸo k]$׼qdϼ柾uz7Es55 >c[7歺̺G>lC-/tY@VH?g|Hf\O/;9&v}xivu>Yx7=.>q,rI&׀ȹ>f6xl'C_cNci+eϱsS7t+ { ؕE9@7;}~`#EqG]mͱȈј9 Fs]2g~闶sKtt1١ ?|< se'~_b\On\iYɇ~y/DGyK;t:n<Ա0=æמ~C2<$+ +Rs] :Ѻ/c]z`^]zEs%`,:yĦ@Ns—x ?p\(Kx:xrÌlOs׽M20чAAun1Εd\ȵ8;ak49sIc\ `f`vל652q,bۖb9\ϬcgY[[3fscfwf`6ª6P',]lkS"6h)/:p؀%Qcks>~#m;鳯cbU'/6m+u:H\mÉ:vo.>^~\ˎsĖɥ;7?t٧+F1 :O1l鷏W\1+-G4N](n/p8lg?fkʍUz0*ʿsX,|z=vGm(;K_ڬGDwK5-c gvyLC><$.`o}xh+~slmc>ĖH^Q[=y<ב}r =:.'|GNE{xig[2/ˇsaLָ CڳX@qæUO>/dev:|^[q,"CxÞęo9u<$sM9׵6O:s0~UGSSM_9_vss3L3O;}ɜM9 |Wrl;<=gϼ6'[ƃBa_/^׼.Ÿ ?Kɐ S'2(yy[7,^{qr]#Yei^ѧ?{q5k lOX~nOWk X3f2p͝X X3g昋{7ۨۂ6luOַmTFy__n05LW a#LnΒlzo{'.=crmf!mE|b _ި7l`!ajc߹@%F=<ʹ>xF~Y, >?:d7.ڸ4SO:y6ozp8ڵ}My)¦cyVCAdp-p)7RKw{Wڐ/A+6G8(r,b [dyye[i>;|,;9+!?ԟ3>!|ye]6۰VxK 5؁KamkCl#cمU;Yu.?9d>M뿽v:ēf|>7_%[o|(] O^a͚윌.+ɐ?\*`t]]#|}*.||st9޶-&r'xH=|">|Ƀϰ[|=iJr)|q| 2!εA F_fk`Ã/x^mF|6Mlg>{ɣ9w~ x`t&.cG;ĮNVlsS^ko_8=sșgm ӷn 9??_Ba`n}4w` f-2&k\ܝ瀓Or>[yY\Կj`XsEʫ%έ|8GlS[KoO׸0)|€`5WkwEbM~㨜 5kn ]uzRޮ/[k9;k_lmV5We5u]zf`"27EWk l3hφlg6= 6\ڑlun7&kqQ1fC=edmS m ڀdžҦݘ Ȧ : mSЦ/}l,7^SM۰G:dٰ&;0>vxWbw,[ӆ=yEPgpA^<@,rQʛ9]8SGKl_Ȫ t!mg㵾y2rAg]6ɳfsy C/ykVK.$y2tz6G&r"a%'婣T/min4K9Lƛx=|+QF".2nm]~ظx4u{7&WFrOنr6dˉJd wxr".7+<ɗe v ;{k^yTu9/_ȍs jC^zOG[,SΑ#y8ɏ}A"`A'rώ~0E-"'Ty/2ƯAF_¨]6q\mo~Gt/9 O\yx}xc3WL>;+`pk댢MG^KN.0kZOs7qE>٣Wts_b_Gq_~#]w8>?'?w K\?3o+>1o> P8dk&p&GWT,%9-NXuy96+vc!k<闧ی>{#aqʡ>xWlŎo|?#96΍vj pW֚5 XﶖZOVj9q 62:uJk 92>(ssd}f`͚Um\ӆMȆG:G6rN.qBv;gWvsC6\6l.&6 8PhWGڕry lzaqN~}mX"C&&0i[^⑫^vo=p,Y:J1l_-<bcO[&<QGf1UWgn҇ENQurZNƦwm; nhWK(dQ)hny.XB+vE/>rmsd;p;/Vq,m&%"G7d+&ߑ:{EnȋdtULxK{ɅڜM~j/l㉉_ű lXyo#kKEٰF懶Z~[s K>l%=xӥ2= 2pm!GQ>|̸~|Cӯ~K1Oƻe?tGZ+pbUWYɶ>+rFvO= >0'8=Grd#c6lo>u s MMl%Pt`zQ],¬]2k+w񓁁6E*~/|g=8SZ_-08-4_u,oÇ¢lurx)6+JvGw5k tdgNtcCv X3f`ܩ^#XqX3f̀+~6;Wmr-Yfylyd7Qlm:!jc 殛.;0-Kߛ mD)-@`S\0ү~G/pz:dս]F~-bcH\ m>jC٧/|,sszEaU;}~?0%|r`fk׹#%SsJ'IG?cW|OVL+6yFp9򾍌}K-:D-6aw }7M^^6a$g s.ư:K:ƃ |%1?K[#_o. Vɳ7?Yv(3Eݜ7dvCFsXϧo7bOz/q:*l9зEm로o7sYGuDs+96GGYTOU׎QN 79Jk Xu76/7㜌NFcsHsԜ4OSZ:gt[ȱ`n;6 챣#N"뇘`S@ [P b6UWoh.W\;L{yBz;Mw:k拽[Nz/Mk O%O/iN#CsO9Z\9#Ɔƒu,Hcq/ƃaW] N}ʷy]w8K_lЯ O;?]1Е'>#Q.`/f%717"~ O|o?]I;_2&bʾ:|l惼x/9PM;mxNK~8|{l!s%>kaCK>6䓧'~x06!wzcS|żuO>k7[d+'rޘyxH'/Ec#/[=#>g6_U<&$/%=Z;>/}o [3m IDATf li;"m)35'Ү>Vzcq]p]rmze{m{kžf`MA>5kn ن0N7B\, o󲛬6Im(#cC< v =Po,YpnrasΎJKl`~nĮ5\W?6?gMmxݰ׆7ۍ!?m{X„ fB ,4b#[S<_ɰV|is3|[mb aeKFarsCr[ r`i7?[СO^٣?No8 6G:l lt*Qʭ6Oy k5_< [1.9.O7e|G~z7Yqe"yRŭȶqfSflY ;-w^lXc,r+Y9ܒyV~9|hcS< Jk OƲ+|Eƹ:zj? 2D6452 nv 7X770qn}fz1sdrϚx7[6;u6xjS=K<+;n[`Fl>>鿎L[rD_^z;*v.# a'[,i6yD\S؂'ҿ0in!o㏛hyr"?X2&{d$>,䍁>8鳎o#19G/q7wN k?=Ik6c8 ŭur<-ߎ?_X ;H}uq;[>+/]9o᧾ ^;6]~4wzKϞubG/x0O׊5S>f[&~|F16sQӾ>)>8 ?>J_3F?5yѷrniP;']s!מqtΧXD?'M[M{;ǡ?biFiS8 oB捘'C|f`מbkّkɎ[rl[npc>Go}zC.GɸnYi5 - ܂3Els6(Y&Iu<zퟒ.B+!?PmYNjצEOݑz./ w>㳥 YY.eԓutNen\IW{m֗ږ,v!CFzAƹ|K1/Klom#;|h'_tÙ_ü Mn22F6ȡ  \ordt+'6Nñ]/pj[gJW<D_Y97L)L&7Sg3aXr \>Ĩd>w~g|˖pg9a:숛0.mi>I^;YT>j[k 4IoVj~5_ZZߚO˹e=K_`=n]20M72Cl#3[a25vqK&֙ W{Ho8i }v<<Yǽ [qv5A\ ~:˼=e#{.6YA o.iV ՗ߴG;Mw?{36IgxEίj곉>,ܲ7~r\_8/xK~+/:Z)pMV|vJN į^:W:rZ?.iwη pzY4ba?;Wʷv:y6I渧>u#b}t$>a\Xb_z Y(?<b-G)~S]gNgぱk> \~/b Wey<:鋷ň;qf`5kn s}vUOvkLsqkV5k X3e`om[Ϛ57j\?ֳ1f(o6&o-6Ao4dc?fq9hckl*|+6ݸW`&;6ġnuQ2mEl#{pv&1n e~a<6tT䟜g_y>b<}t:a蛋O 6;~|UdtbO}F>\zw E.e9}?l{]SO}k>ѣo&3Qw}+9,>Y爮v|` LQ;X'_S.:ƃs|-ol5OߦO`G;; Q`F` ^c&{O_:b-']O\}9=v͹0dXpK\/sO^F[!Vk#t_o 'fo)?₁m6|+9}\no>lx#< uq9)?tMtcO?]xЎw8x?k Xksޘ6-GZf,mCC8su|To 0]>']v٬c 0[Chn눎g2dP!?vΗ'6>Pklyܭן}ӮNm[P>5h^ؑ&oːGz}^|z\Cƍ~ 3xw伹EvN_1n?y'k<1m5՗Þ%]^D0*{<'b`Xi|z\}>!xHc9z 'qs^{NGW6,8 xfls8a[Q0-C2/ѧ1:6S~>1Μ~f9~enm`刼s9z+ab vَ?=b=yxԅ{7l|!gu᎛溏|ʞ YMh&(Z?Z Y,N1A_ӘצJk \w_[:s}mŹ59c]߲27MM˚5;z㳣GƷf`_6lgjƗM^ƫ4z%fvhtqIXѦn1mz ^ٵшh}rن)=Ԧc!dM>qflK=rld8+YžEجԦnsё.s}ӏ|G^bqDmEWl~v9 w^]S ?~c/\#G,#]<2l"ulғOϑ/2:x+dãNrW6mg?}0ӁCioI[n/a??b(V؊`%7$1ʯQW\qkcO< >[;wDlQ\0Yq&gM]m ynk<|e|71ʯ.^vģ/3Wdف_,1LGd=ɥ:+d(db ǯ:ںq7[q:yS'/6]mZbG0bb.ztwP]`d?k Ec\1/3syI8=bNƾsGYa"j!)?'Zs=us/2x ݨfM~--ۏ}/9GLk|>Z>?xw?1'r:9ϙ׋-:<*N'Kc͆"^v9\|T{Ka"O6=N2=J`~M_gioïM7=3qӗ_!qwԑs?ˁ~ojS9:/a$ ![ႇ1֗\xs? .FǷ)t\!Nyg3cH>5?y?y}N k {u6`/9rL^%w!+?|ݧCf?O9<26;ϘgY립ܹ<>xʉ@͸rɛ+לv܈Zo=tMs'f/'yP``[nc6˹kyG㞌9x1ozzI'M9v7ɜw<10~~39x:h{X|twCc?sмȃ~c}c-ְo<wE͘?t˯ء/>8ħoؕo糆Jk l9W#6FμVINe|jn+7\Z _>cW3uʍk_] ر3p;55k [.lٸC.]h)6\+]|<;6lo}/ k'sSm(KҮ'ltp_ =lslvڳѹc9Ӧ騰S_-K_/\)6§%.r<5_'S<#\cP?_ن% KrԵKM1]&/N)vQl[!]3GN!'3жlKN_d9.=:xյI|`x\3=|v,k9oxؖ'F,&mu6jƒEa#mhVnKN u^dW7  lGhn5m9cD\sֱybޘl#9IsG r]a#xEl <m÷|tM7{~‰K8b~(}#NO<7s8Ov/mȑmmS]Y.Am>Gtd#lay=wI]vyyGN:q,(l89dnydlG+pG6\K=󝞘;/(G9Xلk,r?G]!x膟uvgҝ|v~w.6} {药xGӗܟL463nm#p z+$6}6bOa9[W~JG;*W/,lf`5k |ĕ>/oH۫5k X3pcdFo ˫5k lP@_6܄voƳsxmrkM0}siood&^6'6x1ʿ6.m&j[vl/.f[!`^Hd矌|"6ۀ6[ܰlh$o tv3YGDd6x|}|1%^ȱo7.燼"rAi'KFiLO(tD#bt[m_cGX—q_b,k 8go XgC_:K^{t˛vشk×?sxW `]6|ȫ؅Ux|hC6Ϙf2'=<6 :Ɖv o>眬#H}X3 &X;~ٴhfz bSɷ<;`S\rg8q˭_䐣 )\LF0/?凯ƪ:9gOgH Jk ;փƿ!<0%<ȚQ]9g4 5[ZGbǺ7Z ~7ep*FT-SKiLҕ|g\:S sdi܀ou>y~ybG|ɻF #|eA=|E,~NF'o]U%!}?~==3} g]3ɜ|׌[(1ږoK?l̦.Ne`9ossv &|*.:r+3=}c>3Ȣ$>+FCUg&9OH_ ˇBс ]gd}"X]r d#1N.o,Qw=Rr/yV!qGK a'_eS+V61كG9\zG,Gyx_c"c7LJ>t*/<ο1C}ZnŻ֭[><]Lr/QmbNK\m59w.r~6`4(j3nar]sOxU%sΙ}%m)r!O!C( [f2dOV8g{5k l/sڇHX\zJ;vk߱Ff`͑A#5kn g rJo6i#Wo6Ԑ1m #f%_lAlUwN6_̃r6F&6蒅6YmF¡_mWzd,bF">  G;g >Y6v2?pɗ:n6=K_zaCyצ)}uv~v, +rM78ٶIt˅svBbgxGx6/ǰޝmrUszPT1AY eY $B2 #@2 GAAd2{(+zO}+TyI;Igk]#&b&/v7(܈ц]DGaG!{0!1j.XnS§`a-|57A9!W|tW E!o1Ǻ7b r?;<)dAOزU}9CFGᛏ#[|ɍl3Gdg>bu˗ %r[0eܪ亸pS%u/6۸4L![%\2+1^v!ه}c8K?}n®%kksn]֑u9@ۜW٠kW;X+3{|Ϸ#ug-s>Kݹs\lj:çgm;y ߠ򳷳k IDAT?Y[gEky~3I\x*}v\ɡr'8_ԯm !;|;wz'|ʜ}ƇeΝlCk~>C/ 7to0uqO`ʇdN_}װ6(K\0;M| ٖcAȫ[y䃾x eC5'zbbϑ<, s_ULEIL'ʑy%RG|<)6įq6x8y_CGz{>Oy![e%kJձU\+=ưr9/jK9|^3 WW<_W7EowO//^f.]Wř7fSƙ@D+s?닇OqqRZ'|6lH 䲃Z'=X+\vW=v1[$lD|k٥ܟM[/`o.__G|*M_rxW$~&/]DjxQ`Wwq/1IW?6%y1)Ƌn˩ lo0o|ĄZWG{փufYO':Wk\#aq|=G|u~ZQu8{yKgD Ǜl+]_d lF‰+ɧd"WL r}#ǹ;a 3-~dƷ<{ |OZ}wyXfDp{X[p<8|1<] x孺#} >!GGO~VI9kNPwd/?{s;֡'| #O1c;#{t؟\|\wM=st}9oy)_9'οs'*?gw'o~s &Ï\Șo?3nڰnwCb?5>0Ǝq"O6krעp /M>lslӯ7~Js@쥫wxW>J1l_|+g_[LNxSg%K ,X2d`%K \6id`-6lze# OicF\FoLto|6FZmزqۍ6F1xpF~rxm _7dKW؀ vl<鈍磼sdžx,^uDO,(y%04^0+86_'q'~V&^Gx ;rX,dGxl"xۇ}3Qax0_77S#wƌ/GX<]#> xr#oK:oi o\S 媹 ?(,$o.By@[ =2r=cۥd/rȧ1o vYʛuȾh#>זgmr9-6^o;i_-{]f/|cOA. b;:{?Kc#:|rHW6;z+idإC ssp77bw|n=Yhw:_ě}2 `:7;/vƬEEd]:YK }Go:ׇ{[A2(>9j;d; q.6CdF{y,{]7ɼC7t~)o 88)pbJ Ln|~/;*9ɫs2=~F~IE"G_vA<4DO+q_\`KI }y0*d~_b%SkGLqmć>|،Å_𾷿}U~dH_F޺ш m66;^vc~z|[ ];(쓕m`#bg|<+|ŦxZ)G 򊧟?ug1O| <0B[,8 i75|\s N1ǟ6Lޠo9ВKʆb m ܳ%u~ے>|;O)rC/qdW!oS5_b!_ G^j39afװۍ|8aɱ04flj7o 9v`g6 [8;urū(jn3ӕ6凍ƍ|Qĩ<;.47x5&> /pm^sd9bDK7EW?]E0;9'ĖǧCF}sa]9nʝ;ȸ"M ya"cIN9$&Z2e5[g|ڰnw<k؜? fխx/yܺwZIx9.x:'Nw|~Sv'NNxH \|:3L{w㤿XA;cwm/>zh|x~9b v/7/O^D\La%GFۑqx9ʗ~sQ5Kc6!*GΓry饗h ;G5ɒY}~ ?":wN91{pMo><3~> ;\'nQ9'#F򰅏?qSCmrD\ku~1&>7U@[%[2>Y"O㏮5eխZ;4OAvZ?6!g2:Nd,8Ĉjl+ao>'V6_ ^##Ğ-v^NypeNn9ݮ5=D]bSͧq1ilAI<||"Gzɉ~r_&Zl5gknԝ[̍M>>[.~Oh(el%ߜlҧВkZK - \xZu-_W6?K6F]k2ٍY ,X2pmf`yP{&d_ Y:~ݛ'>MnP>!nTn.73of˿ߦؖ\+6\+.]/mleɓML|Gٷ)6lEA;G^>aWB%ϦDsr~'_l'>םG'=:J:6J'xtJyq.fDN]bsOZG.{rUO>؏+W:xөLr_}ӧ[NUVkG;{s;$,fU/U)d1lIo[0FBس]as^' m}cVe78u5.TMGȷOvV\k&v>xzlӝ೉ȷNw>ãy|ak;¯;'؋&>b#Jҗ>~Ʌ1r2psoo0'\[n}[oCSwt}G>2<=1(+55[Zx[?gKٱ3gki9u&i}|v>2K1^ڧyPN2c\?3Ő#96ynȲģ:km {'?H]WgaױzK׸#~6Uv>6\ܩ?l!rXZG/?A9>:l<~gƷ%y̡?m)Gvy^~yϛ0! W~-d |q_a>Aw$_SYk\ȣ/jLŕ_z(l!F|8 :}mڲ/~SКq;i}nm U'}.Ӄ}Kۡ>OO8W{g,d`%K ,X2d`Ams\T \p.+d÷gC?]o|M z=0|c&{1ѓMofqtfZa6lv:G=Hf6`䟮[tm~ᆪF޷$TSIo~P)5e46ؚ۷ OGQmHѷ`xcU?YfoS'Gߦmڠż ;6A)9$_dT俍aGXa| ;5>+mKNȈbmĤ >o7۔JBG?TcW87}^c.b0埌?JMU䑌x.xqE{qA.k1܎l6f}ؔuo(扣(Ǿy!^rl d7.a>`4Ӱ{ aXʷ.V}zW<Ŧso  c(.Bq+ظ-n1۶t!a=k/r3rn18⃁]c}ǖ|8M:cS?GͷSm &3Hnj׏ȗsDd؆Ua{-O?}x<_4+==^Ww]Wv~=[0<|}:ƟѰA7 W-[sٚ1{k uQ7kOcg٢jq>vm>d~k|8'tԆ^6xA"K5=) t}t720'?/;9_ƠϞ:<}S|08,>r[~1ccǧ:yv u,.;L 0րXOorqc 3r.6@mt?`꫿ Ƹ~0 ]t;xʃs=a9GCrMFIW|g>["rxƬ6}1SߘOs!X_}=5aE|oE_~醙1$uU$gua{XS_3;X7v=&׌]:[|΁Y.s65GoAyq(lv5Ow}D8| ost#Ű;Lcƈ:lw%?Γra5y1o㌯ͦge1x+=T+ þ^{ns|\v4֫?g>?Ḏ:jڿk '4h^>)9rw3'u1d`m\-d`=˃2.?A=m(rsߑG9|SpڄZ8~oy#9}[+_k^[?6 _M<1mo{3K^i dC ijf~&bŠlA64aF 5cþMfOSȶ 6N1 6v簛6ϏP#nnÆHMzw#%{%y/rרy\|lH{4 bŪo:0F MY1Æ(yGS\|'/m޲OədwS<_.gՍ=xkc8\҅-}r!_ !=9ԯ^?;(}2c&smfEȈͺ1ۆ}d<@69G2ec|B^=dc;͘gS5tł uG~GXs$/l@>(_r5*y9Okؒ^hf`&/U?7yx|K_!GF?nwOc>WV<}0 w/{xǘʁ '[>'7ōI.m>;F솽q/_<}!]-G2OX~=9g|0gcDmO1H.Gd١k>%do#&r~h~=%w‰:#'0/'|sq$oMڵuYo^~ӛ(zt%nvZ|X|;zd.o=Aul[cdLdC1¤Вjț +9]ţfi'k[yD \ַv8>1g9~??_]/P IDAT}q{@o?<}S<Y._0<񏟾k5kL*{h -X2d`%K ,X2mem ӂf1׽7|x''?IOrHJ~<]じOyJl7l)y/2Ss$_msTd&K>|ωomlU6{xМW:kC3\t8*d<WNUš(2r^8=.煍qiWV#l" 7Xlj1>/6se~ 'jɾ'~1e*(h6OLleGlCPؒ/F730:3ǎG.i#ggraV|كn?}ܬmݦaf7dN9ᵯ}A~x?iO[761/x馏oQqC6;tVD9m=b-[ɯ6㱕Qy]Zc-ۚ#N'G6]dNW?~;lwk]IQA| 2Ù>OO.#=%aM>*stȷ#t|vsKuegu`m5r]eN:ioC/}K}ޒ%K ,X2y35BK , _I/K l o-Yo1}ك!MozӼ{ۘ92s>ka=icgX{&ց8{&oAsz}zCnl^ٌsCˍ]<tnEQ"Y}6 67+nı9H9Ȇȇˆ]z6Ġn!#}6d 7`%ml;җ v7Ӄ ^\=(~ٔ[r+dxڌ[bM@GD׆oA|zo܈Y*p˞~įNΑ>з}qccE69!pǎ9l|Ȣb 6O1'OLWslvx[}K=B~g^mmСKNܐSmώ130!]m5VH..Z##ck\b%.a506s]Zϗ#[dW;~ݏ8rP=^_oN:Ρ ?9Ey^%jL& O9!&6铗+1E٫͞1qssA}6y(7zM-;=qex)Í$9c"?/ g)O2xؐ9RƕmofJQ`=^=wuO6w!y:9o6OsNwo˕6Ymlo3MCj6ɃM2dMW6Sl%oSfņ4"os, agZt1b@| uv$Gҷ*f>ȱNIx6a&˖~vk|7"rafvi˭#d v sM| ~xyvd򖷜|n>Ó7>GؒeMrt4'> bc[LH_xk~%cȋa c_ld[Jg,A9W|A/]omR3=xle&V(qr1QgM|8 2` ǎ~x:sXhO|Nwӧ>&5B~M ӓCbMO<2~GdɹU0!8;;o.Ϗe۹Ztf~Χ8g\>urp?7=yCps>Yٛ?[$_#og}&g|H+䧜RoMFSi0Y \ptc}h]|VдA} W޺Bt9kz NߺVVwߺ&d=|Zӳf+^][Cwby;La\_=Nw#1T?Wzww=遏6糭s)Ω0_sV8Uj>:{Y }̇>Q/u?t؍+{agM̋OrD|0>M2lj;f uÏ=xX1߯qaSPvg52ek6ŏ%ccӁmcQ}'xl77wcIGLpsbvMdS[b7 <>;W>أc.X}G㳙/~(dy iO7C7#w}4Ęq!'ٟx+so~vgߘ ]6nx pӹKx]]"+S]/o(]<}ow=A YA*o֎qɅɘM6Ͼ#Lbۈ>aM|hbA_1]o??%jovr7?h>yӟ_Fg>orK}ɀ zUS[O\볎/z3gk&ū7u=[_2dg35XX2d`+f ?~y5zEȃ2s7W#v{".]HԶyn+@_PFOz`3.BN_um2Nϱ5 =j~d_~]T'W|Mz&cOuTastKKg/}kì |;mX٥h^#~bc '?AڎO}!YYGė"/ ?H(y:sr=<[?>{Za$Stƒ¬ޜ_aW;e'E&^fg9^;ڌ7A??_CDZ_b/L}c>of5dk>35nú!GE+-s"o26Ě_#Lw={Hƛd.`}SӛeF7ٺI7I&Jq~K_,\ŞB>1 )d~G|C?{l?ʇdFiDodCOߖNw~b8/8`F876>\Nϱ8ybӹ\r"Js pצ.}.+rn}x,1K.~TW2s 2O2ϱ'< JenG7_[?tlvypgaدŽS^5=$ý5knE<]X0d'8q83r]Ɇ#yX@OQ/lezu:b7-sŷ¿6Ǵ+ɱyX`bϼpDxҟxdv3k3;&Zv~ݵ78F;~SZMd-X2djeϥ(-3`~olxK lG|l;@]2p}πM?? WH@tiiMۏD_җNw^?o&Zo"شYurBM-dfKmNQ /ȲmDOQ!%>lh|k\~'ϖ:1*D >[#?&qd=ã+G|+OylГ3zmtaou:7;̏w) [ ]vcx`Lc;Xl/ bS_q֭x|x& u2n( ᩋ/}J8aM=q$~|YiОXI^`' T>W;/ qUsl2b1YQôhقm.Oqgӕ7x]2{pW>p9grE6!|$~s6_D(֐q'}9'G2cX3ؤgޑy7wF}>8Y{lOANULt(wl#q%'m'a6p1\ʫ#f x'?zkgk/y{&ޛa瘢;ou塘Hk3dWR}wքzupós㜠Xg[[[|OxkC;keÚU3iVk\iLfx}ģ;6Lw݇!=m9IG~a8w$On> .|/r"'t:o2/WtH;0~'}飋l||Ϻ[ʱkx=9x=,sy>Nu` 2}q3uc'r`8/7^t Mƛ0t}V-:n|!/ucD߱<0T%9aFE?=|-_x|;! v.x(r%6}T7ד(7C=;Q9;^s&9n<駹3+\{f}o{w׵ ڴRlVsAƇ 9]Y6$i6d]8ilƱM>}GXlà N~Hq^2ٶ#aqHOó)NE׆%э&OF>ل}v>gEƦ'^Ďia;{8t%\nc&v9krG?$_˥O Ɲ愣~r~][ncӛ|7~5n:vc>nN! ābKഩ_k /)69I/>왋ìk+aG}a+9І o9clŁO_X8償G&GvkڈiN֡pCl}d^gs =X\m'vk1<}E[}>;G1|_ [q2p#Pk]8wWƋ\!sy||7l XXMmk\`[g찥OQb79zZc|U9YO䖞uLVݹsu 7:i ]{9y|_ڔX;S:hs N;Mox֓WkM|с&:W^,]rCc 0?93A^e_ΝkޚʜmA2bpI~t<U\b|,N}~#v톛oݜ<;}\+<9׾yj̐\^`_;A#EdlO$lO/Ym,ҕƂ$lt17uB^>ѡ\YpGltͥv O_\H°7V"|eFOA{8Ѝu|gG=kש;0mng|ocwy7'j{=|Ct>Ikl 7z!Þ/y3;8\<dş[I/o8ʓzEڎ' {O($IfFj56z6F'!ٷ-'?U|}[BPi/\6 m!gӫ K1wdzns]à?=vMf<2K4ߜm9>yPOW^czs*w}#rSfqÇM ㏽0G /\r?i+:fJ||O~z<ճÖؑkC˳οXGuZn6C0_!^dW?> WVkOV.\p_I[!C>."k<.9nfNcOo>:rT x=m|9bu+9}lO}ö~6WW"6Ni\鄝m^#>26/sLSVN;m0unpp Wk3]?]Ahdtmo~}5oLGgCʜ;#fU:CU63ӚUD:5KrkoݴZc;7c\k/=Gan6z\n8΁/s^:=$]9}~aՇ<5>,ڇeyȋSzz,ln͑myǀ~ئWKW*sG~||=.圾drG>)|~1^&{qlx<:l0k;Φ~d{~S7?^Œ|g<)dڑ/F|~}Fl'vǞ9%X)oi}a {u2~p {1}O,S;0aq|{y!/}ppʁ?uӇʗǓƎ ml6.嚟08+ܼ4 7䲧NƱ8)n69}3bV-y<3W|d5u7yx^7w1 ;O+e>_Mg\5?zt-Z#a& ,e`/K[;[fkǶ9%s9gUAZ2d̵? %|3iwqv2YU2 f6ŷ&f&Y7ġ&oOv-S{Ic| l)6V$skO_#=7ȱ[ul6ml8ÃM|>Tg|ao& ވA=4DN;+M=}xiɆBt"W=|ly[ou[MmgW?~|O:aʆcB/}]'7|с7k}va CXFpE۾ߑ OBS>o8˹:lⳇ'Wn 5rf.K?|:FM 95&zL?yu}l9~+/%r*~z4;Xk\yW`_;+!o]cuyU/.uߤGGOa;|krl S+W yQ6G8O]=9ßsxo0dvn .`z )Qێx8~ŀMGrl+ɏcS|5.Ɨ g]|.#O?̎?lf00+Ɨ 0Uw9?r ȲmG0/噜5NMo3|ʇ7AQ~o9Ff}bqW^1kPN=5a?7O󊓧_ʃt/kb|Ns̅^8V6ָȕq91._!v_uϮMFOٷ.:6W8`_7կ|:?9η,~)_ro\`Abħ_F7 `3g7㽲/W~jn68ڜ6boهGNɛ kǎ /!~ 1/lWk66L?Jf~S? /g";_lk!n9g[l[[~ 1`S^؀ܭo}I0d冀4< jpBMqcׁ۹~#_\r}ZnՍǽ\ɅeK[AKvّ{9b=c8ȓGB}||]7}r4v_crΦq{6|3G`ba#_MWY3rQ:/ySI ?~1kNFftq%k$S<0񆳆R#>ȃW>OÎvѵ.\bԟ<氱2Mںy=>^6mN%u/ujɷhhEѺ0tE&OSwO2t{nЍ|c`uÔ1}=i|8xF5c<7Fͩjpm3zмيP&Wsa sMd:?o-,hb]Ζɀ뚅 ދ냓O>yr`v˿F_2p]m>ßjqۤC\MW뼯G^Q_ȐEazd6lW0+t,2s%K \W2pٝJ4KK[{æ7x+d6Ն½m_qoC{rlHl۬eCf8mbss&]Wem|uF] =2m9IGO166}Gm|INx}Kloi#xmΰ[LUGbrDVU/9zbPGߑ6Ka|臓.1;P ~DfG.mHl\>\bPQI 11cul87_ NU~ ~|xV,tȘ_+ݾ 鉁&\q/sykf싕 S`eW <1Ml֐*?N}H r  ;6|;9e6v'?&?9k?/: ƑIO'6r|cG1F*&d䞮K{xQwӝc|.첮=t~F$_yZi>X3!7'K.>۬cQև5Ǟs5M<3|K} M7?a֓N.W&l6;a㇛co9g<}G\ŧuX9~?? ~r/6 u|r0Pyaҵ pccv%?] xƙ]:xFyD}6g'>b r\ӳȈ/h7~a W,6ltז#}[s{쨋\{W/>з#:򑏜>K6]xc^]}\ms.YYfߐυmdƕٚ;_ʰomՉ_Egf'kz^S쬖e[ ,X2-d`yPf[Ò d?}C˿u?ð=h:gsp{ ݴ^?׿?njYя~tkmҦZ,hSbsndL󏒣e.4mӵFN1k/Mn7صFԆBWi&Mcvt~|\+^|rOF88>.&r7nk#*F#1q/)xka<`SEN׆AڔcA~GtăHO(>\pħ4jq4ogOƯ8kȇS(O0ɋ#t;I_`儇\47M 4=$g&9C-uw?ԩ{9aWjO%y~ _kڷYrlۣ2ރ J5=M<{{fOS5C2E{9~e_4ur}k,{|M4tlܷ}[d~dK j膟,>,>ه׺[6`w㮙l mȓO>X{퇉녏y|@ƜӅ3{ApNXÃg^EdgM2jc<ϞlּAQkm#8`CטBNĤe~C|#s gvɒ/~͈/زEVOeL,O@ֈ*,ƭim@d#vapц^bcQm{vyX澓ϽjxpCs3/ | 5&.xcKm9Ѧl|@@!}vcs|h=w/۸ke6d<#ވoǎ֤9jͧ>ƇM1Ev{B^.Otmz85yc^ܟRN{+}srvя~tº^<1Kuoג[[m.bze{[fޒ%K6 \ć IDATuAd`^:=$sW'>k]X"<\s9?s'7']O8'%w=0=a柒W:.n8:4SǘPLmR )F0>#=}[0js~G&ʿz8g=5C@<Ʉ&g~XeN6˻ǘy&ϯrj?]I7Ljsɗestao8خmxlǘ6"7JrN%:Ld{##y\g1 /^v|r <0OCv>@km>==gjmzd7 f\LƽqNg9b i-5?}JxH"6~{$^2/Fd  =}D&{ss9N1OƟAA''toYVK}d`]v8)gyҗ&;z=7W_fo6gN*x;O}jpo}kX|jv iwƺ)hwҥG6|l{O;u _H}x[C ޳d;/;( 0Џ\O jzz.pd5^9Sa-]؛|I6{Wȣ|L5M|y?/_5m1,(lSg'rXG<''>2O>[?>9Z9bO4<||x٩η~L^;lv纵a;]x3]?౏`l[/__̒<R7ţ4ξ?fÃy{77"?ᩅ ,X29g9wttGic3? <_^2Qf0.>Q=hzHf]rC~Ӱ7s>_O:k^kqLt>sz>|CXr۔ȁްV;wS>hT؍/A1[A2l(x|dEzphHTǧ67}|oJ㟜 u~69acNtEN`# ''\!}rF_Ό5/}J)xⅷ#Ao˼O?znfcv}6לS`Ň ؗcǎOd>t}9{[6Hdxp؃#rNVKVG^._fĞN'v;~LraL/6|V\P)K.;yb󵊗/kP~_yVZF&92ȩWŬhY!v9K95ؕ kozth ]FcO7F”<{[oom&>˿ mX\sy~o{q=,{nph~yI=ּio' aAc.ʃG 'ͮdɰczkjE]'E\?yg|&kMOlp57|]E.؄?#ag:0Są 9|>*q]焞tߡ6^ӋN1(ti^9cr-'xe<'Oac>O5濜#2]=fy<FOF^>ř<2_Kag_ɳ>~^v FZ(b5bXMC>sݵkc~rmR_;=SINŗgߎ! wsw=gԇ?<ͅ|k6܏veڣrڲGa. boNy]k?燿n!r+ 6Ykܰk5~+c3(?F2.W/td7(GObMTvMo~󛧟G>򑉵P*yt?ܧ9OmhS;;+^ t͸-y[汬o y9%?WSlw6/Ȗ ,؜3pG6 ,/3 _kwo9왓C|fYzdWzšϓa]wmz:>'@:R;sˡX j|{tevPtL-~:x Qs فlXMâp@< l' !lFłͦ12DgSA6ؤ`iWp.9:69 :x$@+;0mt, yP;T#Mf fCX3t)k]a#'|vKsY~Afr0%ϦUا#rl[Em6|O'~̑1fsIN;WM޺Bb!'W!뉌9a@Vr6>փfs  ͵ܱZA?b4+y)t0iaዬ baEЕo2 )A޼tqlkq7ْ_z.20ɕ,9ӆM/) GdKWlCn:l>=udN_k:AҚ'5W?ddnHm]Onks />įgr٠Da} 99~`^>S7d>Lʷko}4﫶7M-? O{ӦuS֠ݷo}뾵ڄoUνM3dK2w?d/]ou|r-'0 r|{&__s{N:qbWf {?rq[pM?pcb{6-6^×'Nsm|W|ϞOQ8vMSv b?#xa^vgWZv6/͵\ ׽θ5v)?$v#y`=bMt[oS[a.y`O>cb%-o Q_W\kf_ÀÃ'GOg>rʶ|¦>"kS'rh, ؁M&wd\LmOcLsm׵ɘuN8n|pgNC7NWbNk7˜|3u *նo'+G*b42-V}qk/F7*#ͻXP9bG saTG?6{𖳆vqv#3s8׍҆Q.${)z'o| :jF|e膼 w8 .tgv=g oz󞷪:O;q{tg9?=?mt~j3]DߵicƊuKrCwc+u}3k hd`?sܯ6/֟cWUc\!PXqg<>>1).xBlVZc0)ȳ(|)l!}:2rr.|# 5l{U#Kv%0铕Gz:n5/zdrɒ![IseX _A͋ClN2<|kC޲3U_Q {dl/05xW jycel|^$^5]m[y/lol'u]1y]%(nqquٝ0?8ҫ&˟14: Od.섙9_,'G?4OtO{-vMJ7'dtĻdu aw71q<=^ϴyov}9v=#'p`Cws<;t1}񫋳vkNgKE>{}%JWLso~j [7Fg>~ 19?E)~8&vEOkyKc%{zM枟M99m7K 3<(sǟ%M0>>-. 4yßٟMNdހFd><~e%\2\xӧ|)Oyi1;rX,`<|d ~h٢p 9wg\^#4t.^8CNwȄ;cz)Fo!~Ɛ!RLlg_:$Cfd铅uჁ\fK cIF[EW}c 鈉M:xp`7OޚbK z (OLbþOБ듼 =Xϟ&VFBnŧ|= G\9sxcO'O|Q/?|$7 ~į s O??eKwrdFقçelo?u u2`m7Ń=sC?xs3_Z큏9!;ar=pO]^gy'ڏ]{<:l'ڊ=' [{vwg9:|~y~y})?lxގ;M?IsՕӵtfMovж(20"8\?jׇ+bO|:5{uƈ2w ze 7_|?5Lؒw^E:_鵂-擮b߰.y#!2ŪO^ÿ~7^$snll6Õo~7aǟ;}|/:gN8xH,_>3̲<k֮^='׼h?&VCjaqxyxX0Oֿkʿ9?afݎ:zG|;y?1o?9gy|UyX0ńə>屶}͎-3pI' ~M2lnwMߜ[e}ym:֓uD~~Φ>/at(ԁ7rdA!b!#tv9$*'[ ^1 p;T%_Ƽa?5]Gdr.jybWߍנsW~g! c ;^䓎Z6=Ņ㋱W/8|ac7ҷn} 3oۈ_G-aQ-W|?sOd?~nqCѷ{w?=_78rxG}`CɻspqE{׭ݎ?a8h&gkT~`0b0+6ȃ=kȗ7r!PNsFm<֐sZl(rNv7dќj{oN>SO[C2>~fݚso̾+DJc\&k-%.oj췾.z<+ }?c>P̽x+|7. %K K ,X29eünLW;"N̸0C1ɐsaG~g#W!>> P IDAT6Ÿbc×B&wu֜3׼l ?,0}kԺ' j:f+g&{úV+|m} ߵƸ=EL{l{ޚys }mO#6D}҉/?aAW3[8\ʯ>Ls!X㛈g|B.:Nj3[=`x! w>GOg[ o.#~MO:OƼ5a!Nc59m?5p$;G]I/z-_͆6 #r7a9!S d|> q5/Q76'v>pd3}DVA#'5 @%JLJC<$Ϗ>>db߰aFJozHQ>^|I; ;ls扳tHj7Rm??ay! 7b|ΟSˉ\tK\gVd|C(wdZ2d`%K֝^=p7 OZh%kƊpd` }"+o#[dVo:qSG/7} ΘBϧi|<_lE7!m'A˿qLI[plwhHO-NlkwD"1mc}ZO\|ص}/$ؾO.ڈ OW_o>ؕ?2착.Op 9s|7 1:=c+l>;5 lx}[?ͅOd|+RE;֜X+)rL|9V.?d\ٲnj2dGl[:T^}[9"x_d,OrFs_9aKC HYQbik}DVa~k->_t}e8{)|'t]ٕ+?%n<^ۇضj:fC/}/v$~9_y7qb/هZ Ov|rbɎbL[-|ȍXx'˟%H쯮ֶd]_{uoּvͰ7dޤ|۷׶D+[|޻{>l/7"oWb,5>{i q)]>f8e9}q }o~°ws'r tyŃ\-rd^=|T0 Hr͎6ݮ|5/xjzlW/~īh#O\im~/;ƽ9''Otؒ;z5<㛽|6H yܯ7zf/6cOT[x|+NG_ntČW=s=+.Ř #I|=Ɵ9e 47$|Yx~?oMWxЃ/?l.?qOru7Yy{Պw^^:]{9w8v]VOt吋Br u퐯Ev)6tP;hܡ%|t ա&yup J[N''Vȡ?dObbá]B_ j|dx߁6-cQ]ދ.9 /rPyo~:˛tw̮aOņ'f<1m.`+H5Ο+7o,Wv s[#ę-2bVÓ sẼrN<{ON,[b?|ŋom/{v˟>Lc݅}͞F*uK¿#"8am$OV:r`.0+frk6w7AȾ/]CתA|7q+>1kNFdopE/bC?6W/'dbOK5^ 3g<O}S׋-y aimç'DV)| fof"XX,؄2wjk5^] c^ﴍw;l"*=2!9v5{ox õ7}dwmp ]tѤb6`ņz5_mq5aV/~W\|SO~}ǝ&<;yp1чE\!sp׾6]o`g=l̊7(x"2j$Ny 9}}X15\3n}G;<Ɗ!dK+L-]"ON}nN2{s6>I >pɩح#Nvy*~aϚ#ϖ=`+67^^k"1K_6/OΘ#0k7xDb1>لd؂}m6a?}otyXfcR={=a+^8[Ϸ&0?O~ί yԣG=o?fL< W\Zos!9g 9>X%uÉ~qʋt9]yfϼk;'#.Nrc=wOH}$|kߒ̥59R[M{k9%_p8ۏs9'r!LHf8@| ,a.z >Ab' ,X2pcZ9^/6֘ 9 no׆c}mo}n 4id`H/X2gUݘvV>v7s]tU_zl+iÝ/ڈj8SaO?lh8'dטCM('maEsWs}p:lc<\ˎq/0Z ?fy*\ Q?|Q-Į>@F~:dd_|X{Jqxfw8#0M^ ԁsŬhW?9ՎF}$4OE^ W8WLj7f_b$э\/d"¢fv ]Yb'h$ɩQ~bckK>+Fc,`7seGN;khI_ɏnk=}%sd`SȀ5nsk"Pk>S9 מc$O7>1?-Oc.u'~ |KU C~^vu2tD{O;7IbwmC2xa/?/~76^1/|vڨX_|l5xeC?-JOIgGc9yGu#9o߇wp3Nuv_.?h񛨞f2pf}քA,~p?6>kfJv:]okC\󹑫暌5\>#Ri9PGEWf8ݯ5ɒ;+Yᅓ< Y?s$d>cyNӋ/d`%K֕xc;zZGuo%Kn ,s X2d6̀C6ds?>Χ*S;0\#ˍ{{Õ'I1<>}m?I4&!'Jpj~T7;/m >}'2p„AaKͮo`I._H|Ⓦy~'W;p%>Ȏ11iD߼зoE<ͧMmk ~8eL[>`-/p)ϧpl.9r'% `NM_nk Fs~R6MƸa(VZ=McGN`.wj]6v6>b6k=74~==oLŠU6_4\gCHL*ajoo 5o>>7m<_'}">xէχ9fZ[YqzXaY-]m]#Pwk,aᛜ#;;pCbǾ16Ⱦ"׌0 o)p=`ydLgNowjoq ' ɿxjoqY+-d`S̀5oM+ֳuc+|퓱'\~+]kc^Iz=N_ sM|C==Ȟv^uN2/S+EVk_v M^t-A+_]/MoIfc~5 #9< O>im0 z(? ˯{d"'b1ODƜ{M2Ob';).\jvq e\x dOucr 6#| Xׁ-3^ӭeťm#<0'ƻ/&#i 'k8ʵ[{1J9kn?t?9x0g/ Od)^`f|u^9~mKO&CJ X5o8aoL2rGw}<m^O_|axqMzdĢo@ /{i[Kdo~g:piE[IxtbM{ߣɣ[:@r?n-ZJs3OÞRPGē` 6nέ?rpӽ⋇5bFG݋> O$'w}q{0ºВ%KnN\{*7Gop~[R#7w$rZnj|zӿ%K ,x28l<$K ,208ᨃ56{n9Bn+W#uS 9XtP/}:\S8l]>hX.6x|,vHOމ>7YyCAx:qxUd 5< aQɮ /Wtm5x2X鋁٠bs^Mm:&=sa(Om8L4b ~~&[@]ycC#GW7&''Soc #ac"vk}_kMd鈍>ӧ/8嚌1ش&_~RN+y5۽1%^/_a3bP>rnwoph/.[|Y|#Co"~~CֳB9Yi+?|gLo[͋1v臱u11\OiO)gt`L[mX<~l^ȫk?uF-&>>>{:{|vWy[80.bWm0'+.ych=q?Sw}-ż/IW./kk{҇/ؿ=m.Lmrͳ"kNdC?{tnզ=,;S5>6f7ƿ/z[`vaq߽#qvtCl‘c$s'x\ ~1׻Sѿ8~dop l~JޜX7n} 1'ԟ4f=3y7~g8} > N>eZ?|MA)>yֶ=/r^W^W=lğ~8-km%K o\Vekk]zlq{-o}]_;7Uz.spؼ9n~XWcq\" `i g%}m㒁%c܌Q On0M1Ԧn|7d^vf9HIw>\tu wx?6tG<9dχRLjcU\WZ-sb^鳭d7\#'Oj&5>;ɧ9fd9'; M\򡯽8ؠ' "U+Ė |9]r:NW,QE0t`W],l,|'hWvꫳ]u g'l~1?l|"ƲOo\z8ț+|[a\1S^U}򙽥^2d:vo׷6{՛lE&uGB6骻OwYoyK'W^. ƟXS+N_յ+\dD7dʡh_ ?Inwo9Æf|O?V#0哾>bbīKM.*vNxy76b^m_s~g[v+쨳S\dZBM}t'nws?b~M$~fzHn뒍͏8#KWyG>?;d)ٹp?8҃g9|W_sǟ'"Ɉ3fZZPc>侏\'lZ{с'<#/x  lV}Hl;60~{]ga/饣nMiRjdd_h%K xPkl~ݷ[ڷ梿d`57l3Z2dVɀAoR;-wHe IDATw?1n |?oCB#|O P's1>f'OihR<$ t|:MXa+հ$_x_[(x]-n<4^vJ|uA`ן?EMk<3nMO1],lK|<Ť&9abaO??+'؀=x|k^$dX/} |_"#;;{ϏPhw>}*<_kRM_lj`ƃCpѕO}؆ ?k'O%?雤9%/t /?lo KO-&1&~vq 艁romԶƚ75>}+ &~s(rOZtJ0ʵ.>Fm>qqg|_\lW+|ig%+?\Yr^O~RZ,D2`7BC?ƺk#Q&۟C>᯽d_E>6}C0=De_xZwᡏ~d1DƄǞl ` 9opaﮝ'y6\̇9gx+^1yYǟY7~^Mb^͏˞1:jQ݇6EǓmP+&:|vOj-ﵚ࡟B Co6Y6k^څ#']X r5Xr|/"/>Qk6/~6ai;pÿ_ww9 ?/9Co}~#ؽM'qZ,\#S6Xv 3ǟ?z͛4m9ꅟv1Ms՜G8aëkN=ex; [~/{û;v޵3k7i{3|c;v 4]zp~gxdK5ǸaS蛋<'2րxVZt^U[iY*#>e[4>7ϥm:~kzc}\ vp-<0\S6wd=9G9ۜ?K ,5&mbf}%ocй= r[A.ߒ%K ܼ ,ܼ|-K lpfRr}kvu΁UoZw9ڑK7:T:#A!H!2?쐣'&r:a[jw>ʎCa6=>;/{D tz ro<s0dM83M>6c,F:[t#^WLtUA7Y~ɤ~0-.kKk[W7d!K=aM |ka+OrxĬ=}z}yCpY˝M9}6|5柮ѥ§XG~MkOHꫯ)lGo'7naۚA_9 1 y1dM=d37οdN'#OϼG(fd;taR/T2`Zּek8?Ϻ^CP }C+{^Ȏ~rϯ=sKIf._{=0h=o078WO>]Su݂>,#1":|UO ݰ\zo_5k.|?9xȚ ci>5_dh^Ȕ6]Ðyk-/>C6Fy䛮1X8܄o'H_S~Prd>b<7#NQ>Wå6xg чmn?kӁMX4K?0X =:9A4c#QE~ه˾qXV2)}|4~OR\%??d>5J1O|/]a3$f9cKF5WK_e)d 9_yRb wy>ȧu<:xby #yv}a=|33{'YrO6M6m\`6IpL[%BZuloؗJגZ'# ɵgK=_rjk {ˆK7eYk/|'׾>?t菆\7wݾ;~dl͟ƣWVn <+w&5xżq [lb:/@0rei+IXä:ӷn4^qǏ?s7?rC/2lMW2c&y?}ڗǟb?"_LxA]}~= xpOO'h 6 )ŝu2Aj}~j]*!׭Uй G&W]r5?w5Ǹ?-ÿΙۄE=+7-&mZ2d`;^36mv* <00e|%R6Z.X2p3\uP|z=cr4O9(&7ωOQ@>wt: wHOL~`2W< _pC"ϗ1d-|S6 l((;thc-96|UGp6&)ge=E_\ha>`Af/j9iCg?&C̮-[o],XW7F[6_;d g?]߈O6??rr.w&61s0{>Mm|k~s>\ه>eszFY{ـ#>1rlɃov:V_Yvʼn7/,~bWnXhh{۷DK|{Wޱ퓾Ƀo>rs?E>bƳϴg?{ߤXu6yNٗxBO<vCb,kP{_x|w-v>emG5iKomSNpq난Wm~˹+/mX`C)&Dx$uKdLقYߺ(|74w3j1Åbk~G d/Z~li֣pf6~rĩ,l o] >|Ƚh@ɥog<,.򐌟&`V?kvŃl<ss/6d2<}sÎ5_>uOvc(P6*'y|W\ߐXGW_ ?q?$jO-OpW5dFGLjjE-cԺ@_5 dpm F<hOIzۑG /xXfSNe=}E@0.x]O^dnv[h%4)hC^S[qs/c59%K6 |lӏe`%?4ܸirk;S;C9`vA-uXȮ7:Lc[cd7P͡]ovxFFLmXw~ .'/og|;]|0#}cjfϼt ||K?{xlU&/&lj;eS~`eG O?v ƛ cך!KFϸ165ߊ6l'=20'ڭ{2(tX)\^Ή[tn[WqjÄmzH`2ph[t}ż7kɧJ.ed|n,x#7ex !:lk}Wy\g{c]ǿ+_$t=64_y-.(y->Yd*F|؀Z 9ն~X9eSu.><7MD|g%LJܳ6_tٓOd1?][Wj}|#[\bXh{¾q=`yXJ|pq%l-Vk:vƟ] 2=SU)_m9\6.}$Vz'g59M9rlJ{$kt&|;60$Z32C&rl7Ot^66}E?[ּy|\ɣf/l@bf.; SitH`N4}uٻ_wE)ڪh%L@BʪեW_Vv 3BH!!LBP Z /DCd2[Xޟ;p!!!Zk?{k_??=u|-}dޚ;}^ânN5|0 c.>I-r٤d=yذ69u9Q[Akg3]&2FW>>lJek)b[SFŘn>6񌉑A#;jZI{='Dg!=vQ{PqmlSQ7J>ɶ??9Ⱦe/ʎ:d7'i]}E~=&=yg"s;9^d9LNa'}k\ݼҭ_\vq]d_2޼o~a7S|nf d>nq'__4{S>w[iwbO'Zs7O~ױc,[d!lVEd>Gd|&ĥǯzt߶aͺeҩ-8`O5~8Sk'Ko@Ufkfڶ< \n2;< ##[1.4p^x>R ;u؅Cv}%[.C gC. }MV>1&p>&ӊW+>h?]rdCmO)|A+0d'إ˶O#ǖ|U.腏ֆ`^ [}zz7f["_dk9/'/C_.܈/t.ɾqr'2ʎ>ɗx挜qXr%|/Nd2jx}*-2>]ޔ[^8}jL|oG7\>N4/\d}|Z.ؤ vhˁ<ё֤16Ȳәb\-dU+o5/-f}PDo='b.ʉZa*fvmĠē %;9̟V.^u'V2t2;s =Ҽ&Gmd/od?mv {/6~m-ą]mxd^sMo|K?y_n]&ߴMkQ,j_!}+|埌6/劉mIsɕ1Y#6P+5C9|sa=Ioy/<{5ttI'o2{ӧgY|ֹCu~'~P"k IDATtH-Ϸsy^ط^yd;;fq>k۹ci>`;,lI7ldzgi[oߝ~nw~p_5}\ֺctVg?k9鰩fE Q.iadjta/67[wrO+bǃM?µ1|tɮ8\uYiɼC.26uaه >ͅR0Py!]:&_فfך[;.acQOM}6 m|5Yb6krl_\Bm=x32 0+rDNn]v5zxƊY?arGF.>8~~a%.0C>zϞ:rm5 X L,Kӆ]zAqE8bIF.uW Ip5#8"%v,9\>.*F'.:a^Z?`g>tGyb=ح@cMV(pC|(.3?Bt hvC~QY|2{@~kЉeG_9Vk 'ރ =l6ydq:".|tb͸3wl#>,chzyY>z._q$hNToNߟ~k石b5B7˼䓦|€ ӑg5~Ё}r|Z ;.&??%;=n~cӞwe^6yږ›_)N:a0W9xM}cŚ@b;GsX! 1zj؇ 5@ ]Cl].^0MSZK6>Llʫ~$0AFa{x^/,)bŒM||+2n[Q kc+[1Ӎѽ>볕3~}ק3###[;_Ook[FFF x siIKݥ dס$ΘvK. ]ua-|x˞lv) 1Ҕ>{jD?䋏 y^vIOYa63ޘq+bL~mW58 :tWzt¥OiN:t&^9 ~cs]U^6-.uqt|7Fⱏ*l曭x|cX̙Km`&;hd`G@>n)\i~<=dfgt`~AOB~[?kk2 _BoyOAɱa+ٞfS!ElgA^D7J_xl]7 K^n5/>X GF_ "c6]r!A16C'd\qa퉝Kļ\(g'R'.vTN2j7I=x#?lSOeOkLaC'e_2>'^ #Ïo=qYv(S|X7}՘袒ٜ Yc\_6b|uW}U_X!53|ۅ ~|m^+bFrKW_x`3;8pWۧ~კ.705G|J[.AOgO.=?/^>}-6|;}B$ְ6a6 5[da3my\:œl-NƟ(g}oּ3!!uVd󆭞'8'~g* `:9ϝn7}z~Q-Gu+E^:'oA=7f>{;';t _7˽z~c =-ٓo@x0n=#谏taDŽ񥶼5t~m~ 6cdMV8lז'}t單ȯbXg[p(2ﱌ=qW{\_~1ӵ6CY$qx2wWµ.QyD؄_f|rmL KO6}Kl^ rA&,!bN6{vqQ&G|Ʀ>{jdL[YoؖrB~eK]Rxa, oxJz1 MV\޾}a9=.$R!۾19kﷇ'}>d]>Ĭ/;r.FqЅϗ<ϧWÏgkSA_jĦrMמC0mohLoNc܉O1Xs+\do=/k? >O xlIs lᑋ#?=ħ1z6_s=F=g+?lm^ 3찡-cW=n_ORxAS#{_P'cǶ=j9[A65D7/3 k󷖾?~Jf/pnaq]Y ՙ\eS_ǣib$>])'aSɿ:c8/'l{/d +>Nߙ뮻.6h~aQءGͳZ9~"#SP\Mq$6WS~".;xn(62x)(ēCb M/^YfdַL~8 [ @_^Ƿ'xsqZt`#{AO|g],vx8lY7uԑ?\O9TaH0Z?d`c>XKgd__x{g>un=xo-ӗ@GLo΀32|ǒ <~+9vtJfﶊ oGc7d1|3Lc920no,##U<S\`rQ]tSO֒wf©GS?=cX N^˲ͯB޸@ȭm7ꓩɦ}m1W6-Wq6ġ 6ĥ0|5rF~6xxN|É,(Ymc!Fd#M꧛O!.dpf:kyȥMvG6+WgJW]1ӆ9b3?"W r^m`&R[M/lVlY.?Fza g ~[ džAqCΒ{-1d6Ϝ_WG?S6dQx؂>ߵ$s|yl^^v;?uB,x͛d#׺OOdZ㪽LF)7벇Y]\;LW/?)&ZO1[$Gx<./͡z\-Je3}]\J΢M2+Tyox/ʝ'M2/8O~g~ص~7&$NrW>/[n5|9O<|z 7oGϸXv&/o8yxA7%<*'@e&k~ΌFޓKMb.ldC.\0Pi׾%Z|ta>8"s. +]ԩt7h[gC|(95.}sw^}:6<}~i E|?d̍钇%y?\Q)/ƴ'kL|ʟUȫqrt3.'__|ŗ#,aーG^LH]L o6li,v8%?bMq %˝\gvr'"1 ZEhf'n.+bn~aW6;y6_}d.y6`<~kI'RNʡ5&j^imv7EܑxD&/y6DllɭC#ta+]c,GpG<62/mq!~b6rǦq>A^6 se'68:| 3ڵQ:pF{W)w6}fD37msh{svv;/>w~O0}ϼO=}:裧?}̾EΟ/POXKO}e 'ƹNXlp8Ow:Ñ!CoX[;[8yjy pv27[|w{¢Ct'>\>1) y뇜ncGB.7ꗟvt/z?;w=SOnc[t|̋7&,#y>l2ȳ'xr |szƓJ1.ۺھmO_钏t3pe {pǮog o]sR9Sym=c/iã.mBZbLy a\ifO||t,.9鸤WU/0'y>xj:.tWlRa+:RV%.|_hb)F6+Bg?aG_3Ll-$YD lƋ1-2ЗOCtQu6ѕc5Ʒ5&x y,/ft3}2jK콘Ɇ<`g yVoؓ'F}5xd>7\7#o O[~k˛ [p&G>T[N'KFkRlM+h>c铗6}ĞN ~ojtV3\[>R\gd`@{ޱš_^Ɠt.:?e{ƞ2f#P~V]m:SgΏg?tm2Y O)'NWo%7;4}/t/W5lxyѝ3?~?9CGgܡt'˟xqPz1|l9pu~/9ڝ4G59+H IDAT\{a؁IX0Ѕ'%/x { ]}!ŕ]-V96ٛ`,?z)VGx .I7<+=t1'#_to| 3DN|iÍw XZK F8/r'O;a:`i!S~`mgLr.,z|7tKƹ#vg\3msk1Zъ9Z@?####;D\rk뭅?ݐoHoJo420202psepo.ow8hy̓TW'cxjr=)%KDa.D.t쥓.JO;_O)^6޺ŏQls9R19}qG<(xHW|>5rB>46}8+1|X\kO X:6?/uU`[.uLeoxQ&ra׮Ȼ8';Hm鳫N~{Y)dCkM~ՎS 0W)f:#3L9wr>,wf\;|i"}>W;{w€X!^c>k1[e`?![jDE#O^^qeQ+&t6ɕg[/=lO}ƃϟB+dцKA^>}15.^u;OoZ7r!G5fؐuC\Xԭ/\yg>sx_~)e7`M*k/9]q~3O@.?EKct1ׅ uC^A}R);([|O{_Nvz. efdS⓼<ux#S}V66_,bȎO铡}]AOK?k hybwb y1Gdߚ@xrphA؃Y7O/['A'>@Ozݚ]1&/D5OKy`|֚Gg9t܂q}~9}E9[ݼ%f|;§F惎8||f.9G⢇/ƲOW ֶC<|DC{I_;rqFFn /.r|+wg >y8q6)=6t8kt-[Χ1ǍrH}2|B} :rjD\[pw6rQ6<;+F~؁}rY8Ur0s'4q6y'>v soaO^o{>=gp O}#ggOĊo 6JN^c]q>fR7?o}&w?V8#\a^92Ɀɑ9 <0mIWO<Ɇl_UG[҇cv`L\xB ŧ)wh6֫/GM?,#4]:].Cg5}N/d}47|(%k0C'kWnZ!4WѧOsܑ/Jm9l&7ꑁ[b<>RsC߮klFFFF]e]n呁0zbޓOm<`j.q.f]r PX]ԹbY."]C,k<>|R>J\e']>b0pn\U,d>]0{1Ūq:Ƶ |]( r\JغdGz>\xJ,E$sTa&F|d Srw6Y68}͎8:lg]qYuIo"'t֞-r"G6| I 0" [[ b֐|zNoyE :DQZdO~5+tkrLе˕e+j aNV~d_/g}q!_d|o]ELjI&ov ]-7lha5O/I|&v-bDŗ<ʁ/X|ѩ-/r."VM<}j:%v7hd`GˀumXڊ}oֶ&6f{~1<;b!r`vfO9ez&~雽I w-19#w>`sf۾׆Ù+H?jsL9[?fϗ!# |\zgek]m~5.8yK\vibG0( g;L' ?'#^X9yuCgɯq8^|0loy#7[\%~63wOhM|u?z+/O!~tgL~c'y\4&o"}[߼Eȗq K!諳LqțZKl-]M9g?/|a \.c> ?\X O|Gͧ!9zvʗz˜iNt='b'[ľxsKs-FtYgN<OEOzֳg=?i׾w7|G?_}~[S[L 1X[K2mxCrIFٲ <.(7Çӥa8ex~ٌچ>?J|o\g:{z10Y1hy,}ÁlϷ\*3%2?2w֑L䍳Dpi+0Xb :?첑<|𑉌%ϖ\!y5 2Cw&kyW_^qӭ/xWɞ1 ;&_\f_\9QGV%[d%j%V|<ďy.OKsV|(Lk>[k߹dLaI> gɄr]m[ŸGMF?U^9hd`G@{Zn_orB{|zϥK<=6}Y2̣࣎^8OːUAo|aQÒ{ʅq 6t)+(p,[:ɱA6s9uGO6yO=2a96^eO{=|h˱|QEVrxtɗ7I]ozݍsΙ.ܥ~1?t Ea7 cF&tvvQ6¹ n ]TcO,nC=xSWCN3CoƓ\6`hnfkrafKH\6a:ϙv7l ug>ї_oX1#?a!lyO+X90n~v*qmH/m?1 l7q{4 7pd`d`dπ'K.ɺs\z!a>˧|ϘȥWf>qF8y|W >F, D}}|>S}B8.Sk>q'(\ta' ^pG"Gd681Sz>e.)cH֏b+m`-'d90ӄfH᣹%̓9 ]5#%GlY"G^_|>>{&_>h-d}yӶ3Ƨv|1q>61.|cmrv9P2tΗ5]}>JD&| {>芃Ox{{̸~2\G ~|=> >?o=1gn:;<ǜ/X;Em~ah2JcɱOf>m-LM=bO;Og6_lӖOxgMqoM8|3hd`Gˀ5߾p.8{s6#c8om{Ιoe {Vi3_8ow_?<#O8qW[2\,X+d)Gؑ3'7?K3e˘!k|73ϙ>}q8{"י[~۞w|w8 f8Q[UFGڰHK!]rƴ i 2'p˵ r@Mdpyц CߢB[[=R7^p=?dPsk>챚|&\ ?}=y ȆO0GO_7&^Q6.>x[D_.ÈV㳩^7?uzF?'<ڨ/|{7$&bcלM<2Ɨsg:`KyKkڷ9(ho9"='~GA/r]*o6gd`d`d`d`d`;ʀ:Wے<>^3W{WV̀/.BҘ 0sH? \reܥ:eo?dř@cjzB1.$x`F.QɪvuaO 8Lt~,sȒ]lف#;rHuM7&Y8c.."ÏXȐW y.V4' %_>o C> !:rԋ\$@zaɾK_oAv5O7|ק8.Cͯ;^F9F0\je[|hC_S~1)&vI:xa:w^n\&$.}‹B79sbM~]g>[a95&+RPfoof/262\K╟w5ne<]19n 7t႕y0i~>]x`;lC_0(t鴾7liSn9jN{b@Y~Wcd9Xٔ'D&}zh|Fv Xpz9g){QL97#9_:?H 3ZHϯvNIk<6F޸ $V-I߸''rB[[zn}D^0AѱnaW.QT~cßrߟћwwHQ8_>jtA.#'Vo8qO%xaO_ 9; _Ld}/#ZŇѺ~ J Ym`^q4G|>l&[,S'?ͩ >zi.aCCz+>C\XG'dOy`:L8yɶ1^}ro&SzӦkYf- Zp65s8!l 9'cb`,x~F?9:2&6U,tcn>C42020202ݝ'3cZ?v}wʈnd`d`d`d`d3W"oXvH paAfOMfxdDktK4WpM.\j@\?_l z OuX.SYcs;y6* OKsƗ,]K\V16^,'l>ȫ .85n~+kdjQ  { J~]˙JD.||V9SɏίvzxkJu\ ~x+<La+^V / mleJ5&69LLc; ڍ ~%ɴ>4XJW֞6ɫٴ藟S'cئߵf=~ɭsS[mvᗏoȰ/Ll;\9 i]7F7e̠1seFd{Lg:L=^7%O=MOy 7D_~|6vχ8C1زgGd賧͆jP}dma[^6mƠȬ`k/rŞMr 2FdbX i;cmkt~9bL# ‚FoHX'ԜGoXgd޾M0dM&o>/_xs~ 7lU'C7tc+;ƍ)쩑Zf=W8W2 c~T,kWajKgV':6|hxKcXŦ8 2ik<]:ƔrB0y8[ szt%\30-_|M2؏~@2`nxa9|䍇-~X󱎓z~f\)(l5|t‡7hd`d`d`d;/%U-}Rl\Rfz920202p(syܑ |& +Z.\hi?i%ZO{f]vT$;>IH%O˦OT|!:.\у/}b3F֧Ռ+}".Y! IDAT<A]{t璐L|E>}2{v[ޠ#rcO6o GPdv7)ASh>),>z}"R.VヌOqdL>ٗ7d}<v}vr"b0FdB-9d_.aœ'Ou `@|O?`OSd!\!R>LMz#W3}d'4,F6ak-+<79L^Ca2js?8* o_rBOdBާZamt6'p9`_>_g[#짯IXF>m؆ɱ7Ʈ6d'oMyc~8|rHoșOm~6 j?Lk[#p7>}/Ƈ8lism2']U#]1Y'+m{ 3_FCOAbh5caP~"62 -ּs'7Y{ŷ}+Xk33@ݹa/kvk"Â1N=e|;9qG39[Ng33D?Σ}Iq~vYu9dSa__Yg8آ[tGi}zlocxt,t҇e-g O̅f~z^> #Gl|Ƿ'_Mn;qu?ۼ&>٥ gOs͗5&2r=;/!I>'SȰ/r5qm`` wb1: l߮ADpK=n!A##### 7ܒg>2p ̀ 0h] J$s)bK1\..ĺLEfr=Xnt{ad}IE.5鹸D̶Z\pEf]i#9`8-?d6ll/jza"߅,x⋶!F#|˓q|Y??Mɭכ\uyvȳ# _I[%+6dC$+Jgb."E?XcGoؖoP2Ů:bB; Ĥ0#o]/ܸ6>79ͯo|o~sg7H O%G89-32eZΕsgq뼽,rvw=d/Kmru~;=u{NЃUy?#z=3Vt'Ls7& lH<8ఏl| ]g"#@X?q!9x?豯Fl'9uDx38'C2 '?f=cED\{ɉQM|5/ ,c]Y#҅xL_~d<? ?1m5WLg?ħxW9dCt8y~w^pOx#_T{̋^饋7_A;baM'Oc $Ftɐs1czSɰ#~`:Qy"|&G^S35%&lʍM! f?U$E㏞"'ta.Ï9fѣ㎝yGkxܛ{n >< fw2r_ť5soڞSC~&\k접[F:=^71< y2 ֶ{Cw"<| |2I_{Jw /Yds /2kbϥYr*Ƒ1}x.״]tO6;2_dY''VDF_ svQ9Z:>bf'Qzjvʩ~_ɖ7ƊQxfK(J|(cW\SWWB/%bx:R뒥m١6F/'p/GٱP([:䛋bGJ6Bř|&gmzk]zV5?9qw#\[pk+#m*9_1$G\?][#C>]v:pf;,ZC捼1l+(;|/1!rb+YcɫS}c)yvA#;b%z;ˬscf=?Xmzyno再N09>SdO~u{Pp)N9k[>iLk,KrOG!^ΜM׹P~:g&rZ'ۺ!m,j l_ G1Gl zŰ_˔ÅE~m:gp<[?ŐMᙇd`>=1rƑ1~vuӞC+ۏ:7ɤsϙ: F^+e}Y6{J2l7?;wNz6L|scm2NG |z͋1M2rD'{g~#œ쓜8]r–N7º^6<~%;ƣ7cH}7ǭ9Ϗq97t~"< b2pSoGN4ۙҶc ّ5FY.\DI/ɥOi.]zq>-k@s Y@sqBCt>yFVBO!q>1ʯB 8~"cpt;>Mӕ0mM>\'v¿ 9=Bpz僜~XɚDFN̕|m~٢ toN޺(>r}*5e7ԗS!gKmŃ'a?u9_gKn7Xص7Ȱѧ#Ɇ}>ه6M]Efuώ>x 8'/d7oN{QT. 2#2k&0| Ȗ16,\i?U|5+lMkȓѣ/[l˙690 [|[_mn"peM9`#kƾ\j#mv~շA).s 6<ڭloICV6|ɽR̎oB0.tdٓ]$lG0#rbL1A#;ry=^Xio>irsngv{u_M?gn;ã7%ɤ+5l7Φ@-=~`yd_-ma2(j q"1=kX-Ob1FFV]2ɰc1!<>;Qn/vzly0/tzm?M;?}뮓7sک_ؑsKɫ?w%/`Yw?d^ygooyUO;c#kVsd'^b!,뤸̫=gy6ǖm梜_G&"d2?ͅ>?}a qۏú!~?lŚ֨X[v͑}W,t%sL~[xA{8j`Czm=ߟ>M/}ɒ;nhhzȓ<|f}&yxa_1pN18F΁g._os [{= O{E`.ʀ38hd`7ߚ162020202cg`QfǞ~d`dFf%A.9n.ͮꍋ7Xu8yq.>]K>>\K]}0t 8/"K֥_Ef1]ň"7Ʈiz?#KofW2V.ɄG_a]VGxqL tOM9Ԧ㫾3rܳ {(٧'&]r6߬K8ns |+5ljevk<VSB=ܙv .aW GrN q5G0[-B梽O~`Wjwa<rnk=%&?kD~ط/7z/|hϧ1~7SZ+d$]b'|;Yxho.c8jZ‰N>>o927|lC7xd:{o6u+,9A##m`C2?붹z[N/Oey,w_fjLnq-V1/Z%taEG]⦧bGOE#mXtaw$l71FaKM%b+[K}{}twm/Ep\G:;:l]&bcD4-{}<|Sgxn.„[|0ã1#֮ck5,':Y斟MG[I>I~R^1ŗ,uNXև,tj˵M/UGɇ^s cgoG!lZoQ`kJ =7"xW_|*19-^?+܊v/n8=u?JM#rZN_b| rJ9JD}:j)&<68[<7F`+aڤyȇM:^)'oyy.O^\1NNaVw.]^Js!S'Ao}◓CK1z\{'lCXU<Ř-cr@5^{=t䲸pȈͶoWQgO>1X1h㕏_6`6=x6}Q yE?~{aW]moٗ]ACzƍA6pQ|!L:%1^X\ǵPhƼ ̀מ-~1tLst|[?30303pf7|́X|I*C2uYx os֯tgaAფn8-H}a@'Bh7𐇾17?1%8]C|."q Y?tDCNφtR865&[vʉ#[#b0/oP?cb 1Wp_[Nى7}~&l?c>WlWw6%N|GHV9gC'a_/>GqR(mu_=Lmv֎!W[cD {c,t;m>p⪟=Lu\ _Xm`]}ۺ5_X5;LsmOoY+b_ݟB_MP7%}#X,P!Սƞ+nƳSl{va|-=p/9E"bL?q?3GPڛ=aCֹFּ=ўq{=gO{/=O6=W~ƒao>.Wg7t"Ͻeq ğaz?Ä'(sO33GU\9s@3_:Rxv IDATǛulwvc`v΂C>4A/аC@ ӕGy}P!*_鉕\c߁6] ;a CKTIaG?;yg܁218䓽B˗7]XX)/N)gŧpgy4+.!s058r`[WÆa?gmDuȧ\}8b.'>P8Z⧵ѵ˩>K:lAU. z=ßqcpIu ϔ#1֮5lX Ak~\eg3:qI]Xٱu?Gwv55_/웿y$[o~םx-[&86u˜y /0u=} >m|[tW֕9h͹'cNً6i\'1&#>q/G-l}[ؔ3_ԧm6!7▭{C9xW,Ͼ}i?OK.փ9b'6\{)tzL?r}MT8q<$<'sJ-b#}W_|:Sff̀}se;|{N/ܝu'<ޛxF}tZatҸ/GɾD k1ȯy82pomxfffuKšVo+6ڊzs M:|pLqH-uv\G.l> SθU> W!ct8ٺu(@Ve~GĮz~W'梃Rc3lm:abq^S谍Sc<z+&;q;+{i+S| sN<皮kخ7V+,\vlSwO8d͏>hO\ _=k18Gέa| #[PM}7bmvC6ò0\H%lakcٹN/aU-]ǹ+ ;_ {hQKgfG쉱wܸ߽ƕ~{M>v]~S?˯M6/>rڭiAU`U8bIgrS>`Έ>ݑ~{{C>šk).Wx金a^veW}|ରIϕT`zNW8O'>|+?o6Ln/_?\_iqp G|.Ϻk_Oʓ跜Gq z`7^a4Sk`)F5N]PN]qk~pk783ڎvag?q%tH'xv_uuhWy _Z^{( N{/^|t}x7q`a3嫜wbsc303030303 6lSI:jhSc{O1Sfff ?=TT94s[1M9ïj;w3z0 V>_k!=loPcl`stppUoe拝j,&pS tpwr?/B-]6r[;\za)l8l\Ib֚b#&c EA}?[RN^r_M[>waOs:>|t{q{1VscxXpϯI 1|kˉT~􋽵Aڂ1xcKIUs5wCk8˿|ź'}1^6c,^_fG*׼ g9Nߊq+Gp1'0uFwl69# +ggٱag>]1x(y?nNȼ x֝µبcKwc 6e2bW,1,6ĭ56+0߸1xycy6:ߚ`җgbL]~t/v8Em_G}.o[A\/Wx> Eݸ/'{?{.>I.8lБSN9e5ͩ(W0صCt <3`L7h͸__3da+[;r` :dua>j0yeL1C`ͯڤ`{P:/bP?}bo: t_ 9wM!0O|`OQ~o7 Jٺ:XaЃƜ#}$,u¡k~;$N't}yVFO>f'Kx7/&N?/6ļB1>iN -6C8FGs'˯7==&#|,my`~qQoq]Ixq">I8]Z'x;<qCKO=>zpmWh-Qo{n-wϰ ^g| 6HP?{<-=uW>?luo}[Zy/t{1\٨'^鵗^[ox^[O|7~oMT1x33r0NN,>ͮ=A[s~>a{aO^̽Fȍ 8x+kɧ$lxzťvkxkH9O\1^ b%b0}vxᇯ>ٞs-C20‚sױ?5vr+?]S8j?q[3?yenl\Ŧ"'욗/[a|o~/ ZGt/{_I/9,JxxX%{q׏hx,gpaϟGwk6rk6i#5c(-!bqǸ9!{UG=E5YS'qɁ>nz:'~۷tK9O/L8x{9ל51Qyݛn:w7owv\ޛ8309gor΁Wx^O?毃1Wl];`K'{q0`caKtݸ~6Ⰾ-ԛTJND).9x~8(c㯞~\o/xf8> 0`*HW}S}ӟ>O7Ʌz|\F^Bx8Ú4ޢg_Wg,X{~rb皭{_H_>W{޾_uo$ӟmx@/X{ߘ7rW }m~ܔvS lKW[CS<:l]1:q~o?x3FXcMߘ|U|6(^l:}X̍>v^>@zyo~~/Ys6>ASO]u2囒MuO&8f@ǽ>V>ʏq_v9k6ڽ71UlQlD[\|7qZJIr98nMQ>SهJ'==ezO6tzzO>Ԙ|H_2?n⟞kn=ta~^8ts75י3^&>fffF<-:sf`f`f0ˀ+n}7|;H`EfƜC0rMN=o";htЦqHtayêttDr0}k=[C; Ļ>WFi7R߷a|G?8ʧO;҃oׯ7.Dq/mxbϿ~}?mr(lb '6u6/AW6r>ܕ [_X}SXC_]_ +9[c‘'q~?gG@GU'rL\3L'8'A|[C*D^@Gn{QBXOlC~̱~Vq+&[q6pkb\1/q?` Ͼ9,~{iqbz(_#sO5ַ1xm?#^cy#oņ/r$V|QFi;Ğ25N?ҽ1j˝qQ5}o:rM4 ~~cˆɚЇ|ocn6s'ԭgǘI=Za_N7g3/{$[: .Ž~H_uxwo/^%x*ܴճ㗍_O\>O,¦l`_0N/Ao7󩎇~>u/?.0k _,N<^}<IW}=x߬߸8E]onmh/N럟~YYCO8qOq'̵/8c/:{Ccͷ_HtyK_p9k_^zr'iҋ->:֖y  ͳ|jQ]֧_6D~Wkzzm!ͯ\gL^9Nik:^ky1}hP  <JX,l oEl` kNn}:U^`§Vλ0F 5ݚ\~򔭶5/1#8-VE]|&֙8]E Nn9Kw9@k|?/gSg~N:vosC`u.f333;30ٙٞxda7nv8( ƃ;uM+;fi;s0f>|2Ь~W:4wH>;$ 'Wz9x[aϾZ60r@LN=䓾w8C }V79{$.|a鐗 * |ƍɗ\  gc˛5 C>n=W3=GEl6^?!o-|S`FСˆxkk>_b_YLsG9%]ZHnzlvbE~V𩟮=i970q 5}pj?bNf,m68XN>-W+[W~aoVWD |6?LO҇t-:nC<{QS 87B|#س'>T,-v}K:>Q<)3Gb b+ 5طֽM>auo'ɘ==Gc= }8ݟo|k-8s..0 Ÿ}Yt#.:|t/{\taKʞleS@<=auk)I{8rxI= <8>҇=cOGaK7Gg|.,7/F-_¯?nbO,DuEBqe/[=?#sny-1gPl|5C2:}l5;}OǬkG?zyW,7wY.{n?>͗g\NȡV tw~2g[tV5b!V|!aӧCpM}//[q/x5$+]uSSn{x+}T<_'xej/ ܸ\bgҞ17Dkhqnm31ɿ~94o9}k_923@΀Ôk}|ʽˀxsv,>YH\G"O ǾO͙"r)D[!;RALo,sցz xGہRôp'{f,aџQ8臝boxZӸk9 /8$ӇÁn9(a;$?夘G`f>uҁ~>ȝ0] K=aAo6ĕ~׸] Gs"+Vmzv0gq?v~F(laj+_8 ;F<鲇VvЮO\ IDAT3.}'Nl$=4ˍܖ+:ۉoGuxa઴tKwG>N9f>58诎s<^^#Ņ/:w-vkc __V3Lr>e iٚW1JkM{(;}ٷW`(|(ԟ}n ]æJGF}fC1?X?}vCśN|>Z ApGX >t鄭>ڽ>e~lW k~a)FmG6ScK'ƚf9vsK8;߹j%.`Q_~}_ /]zes^t/l6k׭V?QZ{ŕ{y, hGL>I$qGӑoabO'x$tFN|ŧ܄g<uRX(~X>`N[]6I_=?N@oe8|]|]}⯎o1JgDZ>;Iu'ݔ3xxrfffx`9m?VxXƱםf<\e̡ɟR.:7+9PC÷| a3>0.D>xV\b_7l7~O8 -ZbFxG& |/_,m0+7701.[u0pa=ń/8b|Ƒ3N8n]m曟bbc"FcMXQlj,L8ڰ􉕎<>QYIWܮ}+Ӹo [q$pv:bk7kMk O>ecM|[tI~xT̅q[xAp..^Ӝ(pUpAOx'.:l'mtƸp3Ip`gWxb?b=o=_W{ĘrkaùXf=8ƈwqw/VvœϾ<7?plflKmubN`)3Gj7ֿR{~uuצgﱁaǗ{ {\_ٵ?яOKviŭ{88`vۆ^66u//o>/~`ٚ+Ï]Ջ_^[k>]?yk9/xY׆=1;|Ek)vsTt4x15Eu|0w||}eǏbyPWn6[ׇd~7^; /iׯg_ 1/_{c矱u˹,ʛzgk3jl,k8b3lOϯ6tԍY߮obߘ|˵w~ᰅ.v:|o%_ZsسIq#zK I_ǡc xb#ٲbL,$]1m]/Rn77}mO8{pc-[v։b/Z yV Om|ᦴa>k0qOjjO}@\欵5g73G{?go\[Gw s7|H?G 9#e&ϙu0303ʀ38sC.wh֡.|~=t [fl`w ׵Dzݡ1l9`dƔxW>~8?1.{p( ~T:SiW|hFE6;g}@n~aq9eIF)<:D&\c+۸37)|+|5EU:˸;ׯ5q\}W38gy6S|87'|gmcgGI= =֘:nlهrrObr GWnab0=a$pʷu~D\V?GxǯOaёK9WL9?ݿ䉞'lH1SfQW[u ~;ܭ/ |q ֟Qm~}A#QkM)V6&>nWg#~pzq~l%eSf X`{Ϻ_!}>{{{=l_w6{='q򁶺ӽ}dG[=~}7a凈\q!Gyӓ LA=7Lb)O2.8{Kcp>K+>b^O q+ӏv8m}~z3] ttakÙ-, >|$tq0̅+_Օ^gɗB{J>udw-m^a s$/.<^ë/5{8b|HƯ|l݃xYG֏+{1'Ne1щ<뢋_ tqlMo'WOIÏȡ'|YEu8<6:x X\C6]Q*Izs>x {8򣏾n冞:a+ܓaj~{0k%>sPw?c{\t,\pS7"b1vޣ'6rռFq-opa5OGי=Ose`۽]?fr~ݧӁ`s^Nt # JS#l#+ܕ^ٰ_)0ss C8+\jgt3XгB_?䨹Nǖ ٖg +K՛rUq?tjVSv2Wڣ?ڮȍOÃtv|+/BϘx6(,|+> 6{~qN%8hEyf__6#>]b,^>v●75nKcX>]c`pK =v1W҃NWgLJ>u*߼' Wy] l?c}=?kW'/_ԧf[\qeþ6t3ƽ6~3f7O\i~k+aGB /> o>W܊Qh+5v>7X~pdCm 6}GFuyk?+7Flxx%/]*9UCwsf3(]t倿Oq޸ZZ "'?OIW/?0I|ʓ<Ƹ:dS>騳).R'G~qѩM9t< k\ߣ]1OΚu>* ^xeq]z~t]Oe75r)qz^qt {KvyõM820vzd4303p3ҁou>Z|vut``N{%v(h N}qt\)F|6 |TC8E 8)|XxvJW|TwHG&Éڍ%fxO?8[)}k0^p)5/I\>F|+xSz.;~|oϮ[~ᑸ}o`&' myS_"6mL]<ħNp#¯ ,bY=<˕x׏;af'ƾQoNÇRp<_x'` =zymi}A?1z{3>:'.و/!k97)n߉bɟ>6OEW/Xqa#F:?Wn)'ӕK|'?֨ckv|>sm?]xp=u5G=.>x3ئsSL!eOG< n% O켏5>q'{uMg\ANk_=aM&dJqCklW9|Slkqh}E~w,xy1OO =뢋cׇV>{]_~헖'|W-壻O{[ q% +;wys _d'pO揘s/15IG?H?1oxί}5j#e{_:tQ#ac ck\1†.vu}ˏ`5*~q _r= ħ^c?͝ykǡ<S_?nSo×/W,1GCGC r)Ai6&_/q?m{n]tuHV?{v0 K?9W)8p9Pcq]u0vUpnq]L+ʇd\|`^a:[z|@8HuH¦w[ByWx{˅\ۜb~&G_(_ ;dz5s[\aǟ/aK|tξyrLWP?[~ٍ2y:l/'}P&>xC?-pC>|Z[6>/4t[lzϟ'>-:}{?/A8tOw|v w6TNĭ_L߇N֬豃Ӿg\\m~x\;1Ӕ#-ֳ=aO}m*}>Wֿ:[{mﴟO gv;bCX1vfxjyi>o}GZ{ G^>,f!ЯNn GbSݘ:a'xfqc/^.}7/ W1!j]?o[]{6F_{ bԆ '|,w,{7|ʡVs{_:+b{H=]^!7}֞3\\OAb ioyOO 'fXN{E/z扭>sJp!>%&lsʮu=ek_uWM?/P^`cccO\وüh6/#n r 'lm$a˧㏏:|x}mswl~3pQKKuf`f@{hjm{~P\?T~mTߡpC;>/s@T/yr?303pp3p3gff xˡ5қ˴`Cu`Gw|GcL vF݁%7r{d;fg"~/zqS'IVc4N܎|`C/ }g~2Q'C>W8qnWb gsGk!t=k{'NযIZ ꍫEلלmlu#^[}a}޸똷|-F'Z3)>-g#_J1=x t]yбILVZ 酡oo3oe-;Cܴp(%?0Օ-;p~K'O.b/a\>;jO83i=[sGO)'SV>U/]ٳk\([m_g_qC;N.3i>ga4_~rnlӅ=r^KW?{}?aoLIWz^:{H~`6N#t[?~ܿ:.l M8W:O0ΟbqOSqw_pp'>3X>>h@Gku6?a.ϽꪍoOoXZDx@_;|?kS1cF>{} 8liXqVo F\kӧ=C؅N?gq3ugNԍZՍIgON8|*asO} ]Չ:.+>V"'}ц[|0qL.G†'[<.rɏtۅ_xٸN8<30vxd5303p2`!C|+AZ _m`tE69P_i6: N' ox|{ׁ+>h).8˷ٔz v>f ;,/xGm-El[I߷~9K?g3 >:֙16}u`?}95|:|SYl }/߬t/mOS?71WgLJ|X {yFk|˥8ֶ܋}F+8OޜVsc%!/H۵͹+]E q!d})~|zP5XbT'o]aoMj$GM_0sڻ`) q}tϕ{ջ7ÎnnWm}b/sXc>,>Ik<6WEy|`$86|۞ponا;֘=G'پg>~Iug<yэ7-_*ʱ/+>Fou-C2Bzw/pk.rܸI񰭎q8v/=fś]_~7sGb;,W'+xtpc^_>wzļW6rɷ['H:h4tGn`絤P{]PoaY^1jN'E""6:ۅ7ݼy^@\0 IDATKb;/{5lt _>GDulj|k?k/T6gͿ'=i{m_]C̉5V>Oy/nWޒ> W>w.o_kКG;k<]N!p~1X#lF?>/8="VOwū5MyN;X /rO{`i?G?p?vopTPPy)8k>;c=> <]030303pg?^ޘyS,rQsp80c0aXo컃>vDҁQ?:4&c|aB=9t>\w@~<Õm䂍>O_lO}t[ᬸq2_L0a L6x;w [+:nv\:pV|#FaS2w/xBNm䅮!~ЕC:J~ʱ<Ӈ/|i;O 7nCt>ػ rV\ Nqm t~]sVʃD:=P7xM7,m=EGWD,s0-,\ɫz7[n0+}'g nlUq␽|7tl+b ?#0ʩ~׮|yy0࡟3'q[룃g?]u>D~\ @8%9𐹄cǛwrGGzԣ84X0mMrDīΎ ?>  a~{^=~Iu?k{q0بޣ{qOcqO 1to!V{~_9㺗eƳWy/{s)|p C]\|&tax3^r7y]/=XGO~.W=/r5xm_`~ݻIm\[Z+싃<5??btI۽>\Sn[t5?Q+[70W(.r0^ƕmt*wcc+xӫmm%0^}e˳/dkW]s舡?)ڵFők^\rU竾jҷ~v7m}łoyH_K-6ՆenZg|I/;:{SR~O'~[6?=VSK6/x V)Oɏîl1^ ֪{(Wlmܦc.k q8,l埾|ս ?~+,:|WnNt֏'/ć+lW:OE'ӱQo_>?b'tkAN^ߕЛ230303p4f}\x{w0Nj`3+sNܙC]k;1*֛I]q5J_x$[mPM܊>lN: k>eFQOٍ;[qL6}c6 ).z;%[zt?Jzr@n>grV.Źk~w[CEyI;ro,pŐ}{V~sݕ|ǘ]Ts80֟ ;ubq3gf@Z^/)B{+6k:W4p%6^|uqb̟~C[_,s?]C<$sw0JՓxĕxQW9~, SNY Ũ>Wӿj w'翼K6lqT0?Rl>I5r`)8r=lS=}0p1G#3myeeb ?WǬ|H7ߴooM?Ov?2O|ғ7o'>qH&78*v8uGȓzR'a}d}#yӟ|5ؘou ? o x i>][?Ӄ^IBdC,]|W~m,S>tm.q#0s=JP3S~gcJc\2ef`f`f`f`f`f`f`f`f`f`f`f7'À-sᕃ2`[-1ھM7ؓ`;TCacѾPaS/m 6n}+ 6y9ۇa+lGN"vqׯF,75Cko}yc{}OLra&bi~}#簊Ÿ~A߷II!vd+~6GxЅq>~ۉog–zt|X\1qP{6t~>/6e߼eW7@ ӷn}kXcrҸg~|VtGu1#Ŀ-.xZ {ķ_/d'1÷\ 01ckvrOnj/w×[\jd']Ʃ}cg)iߋ_[q A ?\x }ߌ7g8|“ ^OWI94la#|+,"_N9=X.nū|Z{=rUm_>ϗFr33pdK{'ֻ=~^aOeDz{bn|wo ҧЅxOCI{}L߽>i{k~ +^xr7l,aC2>{+~?}8Äo~=J9 'p{̫/d.^NYqS<쳗pM |77[_>耋ػ/jˁ+Uƽջ'sG~HB_OzxH䐰a:Sn6;XqWק {>͓B_)2mб%%|_|oˏ^{m|g}x瞻57;f]c__s{o}u&x^qs3V?c_>$dn8˟%rJgz/*'r,w|Hyֶsoygmoţ޾wK2޸>kyszI,H'[D>?~` PN:x+k_\UX/яD, ^q˓pǕ/&=dϚ狍~W9kOYa1ps`ŧO}갭ޝzM"AiQ1kD{yLh Lh29=Q =C)!Xڒ}yrw޹k=kk]=7C,bO ,XeNe֝\Z_6/c,bsQ6V[e%?%c2GMK \28KA]2d`.\XPsB ds.h]dR\ ".\.҅Ei.ɻ|%{h#>Hd\;Ȼ?xd\ Gza7 Gf'kB}c\D|6E6.͗'->WG,gƼo5a9D't)-.䭍08b=9aK[y#]:⦧sk`L[ɖ@ {q |Jye3[aG__S>% a3 ~O&yQpg\m2bI}r!ώ &o}- 6䊵ϝRˏqqYdONgHl'yQ֠>]y%n[ڢAO=o4ΧIyd`#ˀ`M+>wΛIgf'k//ϞMg~9d~%>{$Qb_0o?5_}W Wۈ?$sDs |)Ύ-g^CV EΓ?nfSӟu4'8sn|p4yw|[be >_>yoeNgqenقomxʹXjByăͦ3`aCmh;ŅĘtaW>hbÈ/Sؿ98]W:Ňٔ~Ezs/ç'\aʓ/\6Js݋bW\:cqd`% *=KK \.2Kr剸R[2T,svn,]xƻ?e';ӁoMş:{ƴ62 ؉1>Q]B#~2 q%[ů\~W;OK79 eKOvIZˇb`/9[qeX>WEj 5|>L(sJp6 l[jk}a(=[۾{6@<ڍ[|gds~ ?^(dS7l7Ɍ':on6 (濹QQPb,>~8s~<5?| sT,'_av99>?v|rp})}g( Y}8b;Ou|s>9e'Wj^,X2d`%K ,X2d`57K3K ,2R>]3"ͧ\4 0|m`]]̡.D>Jp>;r :.|*KSrϥ!<|n6#eqCV>Y|z]HjSp'.o|ŧCF>qW`W|>Sn[1m11l ]i/ O|J=ɈO&? 2^[b?e]Q"yvlImX?2˸|k+>ߺW `b@rGcc|7=y ocx̹U_^[{r}[oX9|G&O6oiE-k6_GϜ6FpD_,j3_}Wr:cG} ?}x|A=}ɓeOmz /up\Ø3k߱e$NƳOqmƴ5ŞA{̰_G>gY#\z:q{9 @vۿ4=L/zpϕܒ1_gi'me:C~gxpv8 F g8=˹\xV^_grffsppwޏuF^oӁ/\$&7I| lr 7jg8|F-c_[ vKl_]|KZ\d71|%^q㟾*d>Md,ﱚ ?{Gwgs`^ņUc㭗|+^ <7ڞW>7ˌ|;#.z0x~Ӻg'IF.ĈM-{y~ 6;?(~E!>=,J\4^N+k~cFٝcX[vœkB>M_mk85t/#YXH\]?ō 7Y|6ůOOָTge^4bRR'%cLqɉ\t?]rUo9!Dy5 S p7/ɳA' )&<~y|xdb[* Xo4!S-|wlϖ~E>\#75t6ߵZP֨-^>ˋ0#*Gr78K'{j yb_ ]۽<]޷v]M6`#m8|ֶ^,`N\~7e^~:[MrIFog_+Xa&:UI8d>3Y1C[S0#( <8Yd=ow;a&Y2dFr+}v>!]g1|J}m5L =:gy`?yLmuNs& (|"xA/8m;>=i|5}2{?{sO>; 9K) IDATo CtNtn?7r(7ȼvG3L[ ?npؽ0tFʛsB~b1r7)+=wgm(vq1,9g#}fZGb#v)6/H82>&}k5'Ͼ={Rk]#O ~h]o8g1-ÞG1\k~idYn5 <}{/h뭇S>Ɋ/KMIg~w~{p8\wv~~2V\Ái89VL'm82dϜYC"n%zzv n/iȆ#'|tOC'=|9cj` 1c]/9 Aj yOhž>O$1}2 *ԍg\O"~]."b>_l%"S .*?59`gWݥd]F #E;d+<2kxX0Pjc ?jNq+y\x/v""B>Ҧ~~k8;闻^+waO'L:dԵW:Y,9p >(L}j梽s8kxO/)DtH+# ܦv9‡[Ɇj:tax|9=ץWه\q&Ϻf<'tρx)J'y3t 4ǚ˟%iֽvkܾl M۾j Ӧ~}abO|/әS6kg<2NV sof/{?s͇};~;L9+gxiÇ/o@[ýv|oxNu7__WcGIVx P~%7σdnWZ;9mgOu2yY'g?с.jj䛒N_7dWQֺ;}7FGxp{c|#Αow9ԭ| 6?y~oE 72Q{fCoDO=n~<+IF SYMxpbtmW؝i^M5Q /0Ԉ̜`*hTj|ol&YhMjxg[쐫S3OoX,X2d`%K ,X2d`_ YX2d`%b.\'˭.}Χ\priׅ^>F\o h]4 :X]gקbp@_ڰ.Gވ}`x^'X~)_d9}:>O Hv+Gl!'82G؂-F)>o zWs&*|Il/k1ήMG6+5t'B^LO>1MuFţƓrth^}|?W#*lLV}~1ӳg=aVxKx<|2F2jDN'B^# ^ͽ=//ʅq|'Ņo_ z6̭sCyDGC6k^Ga#jQN9+s΄'pGFmOo` _ YDɰAO]ɇYtEm>ak+|DŅGW}٘֫.b_ެUzp5>o%c1gq{Ƙ=bٯ "óx3Şd۾8 §?&XaWq+O;7G?7^ӛdOoX'/˃PL=x#[bT_Ȋ"?׽Rzxw{:#'O<蕟 |rG§>9<ݟ8K^<}C9@rlnnoSaozˇ_N6~vxݸ|놫vo~kuoBoöw򣎜w oxⷹQ{>_Āܙ#gA6[]rE<aEޞi.,Dϼ7'c|PBV8|C-J֗}ŇY 񡜱ɗ0!FWžE-:Ő 2ǃS>S\12ʼnY2p9̀.jklS/M%|4bnS^XW˯ {e՟;ǺY^f.y뮿K7ڒ%R7lJIJd`/̀m_.\\y .<1sqrř0ra֥q.*.]E]4:zQy.ڌG_=Q ?>13bdOߘ_dLȃqGz.:8[/q؂+&z<+`f Ok8=!b'K_5."Xjc[_}r&`;ߙ#x6(pZ_M)Ɛ Gߛ;VM5,mc|~5}H.`?n8g>'\\b[a}b \@ f.NG_.E:0/v|/@5_怏F[d^'Y9,ƛc>!gED|wkpE~ H+dң &$'\9#ǣ@8l"CW|ɈBK6 =.Clpnڃ1m8 d+ۻm<{GA5LDDه,j+ڝOxifM8|'>oOu^oojx(o,7]wdCyACTFsxS]<[}sg-S8@Q2;泟 ȇLk"v~37t/5=o= r>Oxf&9#?ƵoOsOo-v(xP/>\96;OzKӃ\f<⳯n  nZ|g;:۾C67~dz #C=XGm:<~a_Aĉ)l6`xA<|Ș7za7.‹'BB>.a7`Q_t9&9@0ҕcl.?p׼hdώ_ }W=^*jJyȯbig/9/x#\/9s` r5 b> yC_Ayeආd#}7'|CNj.]!9g|5نK򃇲 xa~ BO +y jK|xC.,rLJǘƫL|8t#nYm_rF?ɬ&;6|}k/[|§ Gחx+0٘ݹOgFmMW'B{Zo+M{Vㅏde#y<ۊvD&[i ;y6| _E'Yv`& Owm@t+2%'37f/yʛd0g| LW}v͓LDW2ɕԍRls3Wv]D~nK6J>"cc^2D_aчC.~kNo k?n6~V'2\^{b%_g|O7Nn7rEЇM?T bR닻6kO8a>ܰӞ{W|7:kxO|a64Ķz7ƸOgWn^;~ zSWENl~k$CN1 _J2Vxxa%nƚdX\\b"CbG15W[D sp<0NfnWsɳ \&R/X2d`%K ,X2d`e \,,X2dπ tq!^@f.\v$<]/.ĺ`Ts!wm>uHƘ>H^'G'ӆI8 }8>h9D'){Qo SE)r6Ę<8b! ?9zl5b(tȎ_Bx?#g.oOMO>Zψb)|j㌉[8"Z+s㑡k b>(gLvSȑ_Wy |OݯsSNnh֠';ag4[>h|{'cO÷7ˌ߲F[> s"l{/^ YO~fMO2tYM514dm!|ӉX}-oo\['[O:UsyI_/.sYLJ-|CfV[k歱l?jD\s{C >a[,} Et+ lrp85g2'lԆ%l-xb@ 'g͙|wîKx -3`^w6uZ='6ȗ \x \kl֗%K.8#藘 ,e5\.]rdEK..܌ ~΅~t\y8{. l= | <>h!:j.,r?K_`f@|C. t |pΖFxlxO_<@~dO]<pf\:6Ħy7" W(㱅ԖDWȟ\# #r/4O. cJ|1KvCN)6Z)l^צ'>sɦKb}6t=d?z6ƒ|Sv~#8r/~Ӹ[t`d_X>UYt\|<:|Vn/ ~x&^nba [4-اoM7l#^9MI ]v;jcH\_OX E!z0<-ŖnȒO՝U-rZZhƘƵ>zܲwozLb< <}?LλeQ{19O8~}sYy]Ȋ|S:;yrK_6+gx̕9%q3G_.f/h"o4N_a7yX=6y\uǼb__ oj/ˉ\!N1]cn3OS_oyM(pi5xŵlc\)wbw50IۑesYcGۈ;lCx[LG~>bi owiܛeW g~*M?y~+=?ܽ~6ΝizӛDZo2[ =X 1拎 }z6=7}#nsh[{ k_dL,c֛5B/]9?ɳRI~;o?jS_, O|l;>΁ɷ&c߹-_ |jˍC&/G4.d`ś9SZj%o3 rsYtyZF ,3ޏŃ%K \*p٥tǨ'n.]vd9 Su UM?lWwAR/dtd[[â lӅ[I~X%r FH_ޒF\k,{ÙmՍ zJmXs,E 6~j#6N4V|\1 |I3#ӟAv+0m.ks9׶+l2ZY|'}h)\ IDATVcK{Ɣ{z^{C <~gtNU;c s dcP;C+-޿<(Fζ|#W:&9E6&yxk_JoG>'_^'pi17]1Yo~7<̏~tEOvy3 'I77[F6ra烟-oqO -NםxH(χtIFצטZ__=F+<%~;?xRmm5b5}}^~ذs\XxaS5k>ŊָZ_Qs%K ,X2d`%Kւd`M%7l*3ıd`/jnJ.|"̥O\sQhs!c.|5uΧ}"]Blvіvr}7lɵ.}b BO'`K?:^D:j6Y?j>gL8\E`|}ė.Dd"Y1 [#6Y}mah#>gN@>7!ؔ?+Y|%>ʉ dW Cc|"Wp[֜1MOjyFBmOGͩOyw-Ӟjُ0da6=vi;i{goH CO:sل"'y q6:i _Αr>"gx=9'ᖷݰ9UǘÇဓOu64s[8n8~Ǯ:&l[1x}<\Ɂ#MiMnQ968jj r\х_&1{6b(6u|>Z?l /YC^tӟ64q;7:kxG |KV0f\U WjAݦzl}̫ǟ>8]n;s +EK;ٲ{~5cLE}+`-}~٫dأ臫&c}|GN1'prWrafKd`ƙgrnYͿ0_b|Cbo/Ѻ~ k]v~rlHd`2pFޒ% y{3|.ȶ/Ocr\r -XK.\ĭlsa9Jf<5/8Wxñ7Avk[{y'j6ѥCNs1iߑX٣Z {ȝqK䝙){R^`u(hGŽ@dsqǯ\ÚAlù/X[2|6a xIg}8쳧=V5\Ѷgm/ȞVC+{H.>n{˾kgY|U '5ι\e kgl{wF!:+=Vz~F3N{îX6| }H<dσ7I]'lI{=y|e'g-߬ӟ1&c:h߾x+^1ᱎ}z~Mg'"Ns,.<''ٟwm;|ƙá/{لoěe~8w O8Ɩokks|_g?{vΛ-rL`La3~9C̓¾BFg[w`l8ցugb2"gk.^opG^\_s_`mZk<ك|RϮxCmlL;=ϖbBv;O--=;mӎ~nC̀si%K~ ls_o%K.?X '%%K.B>>~Msɥ~75~ReD(߅'.ԥ3mt.&9jbVU>=m9~>xdsqyt bg)E1x(ً%(|d_6"'8 l]lx/ [ 6J/_-Nz~rle 1~4fFtҭk\qg=„tJm:tŅ_2م/n2ٞu.g?_#/jP8/wc.ãWa7|0~nmy͉@F~Ϯ5wNOO^aWy<ڊyO^^/W#S3OyO8b;9p'SEJk pŌܮ>;saM.>1_y͆< Gs~S}QFqͷᓫȅwo}p<|N?~4q)0yõƟ:g!+.T n6۬؄M8oJsPW]~z>i7!`e.pesz͉' _XsKWW!̃Z-b/fzmLg1:x @ӕKG.#>Y>!_lڈ>{F zd+|K6ߊb+\22IGo#c_tkYd43v9 h-qs ,%K ,X2d`%K6 A8d`3"'\j).\)ƼbE 0]sOƸ:|Oyȅ[ed|ʏ>>>jOd1F^bKG|GDOSхf6@F L:lGeC}JOK`d/ْK^d'{|ŦyؤK.[CCO&]I|c4_á2OO/bK>a|'|zͣ\)tÕc}~ӧ뙿,lv^qwr>EϗaK^.Nzl!U1r)_S1~a*.`ݚiSkK7񍇻DTP ff4[CO[|ޣ+xd}+V˕_>a70_ഞ7SϞy#sgbU_,-=Mc|bo}[+0g<>\}J^b[2ƭ?8Y0 <{ar'yXD<9 ]>2"_)؝vi"䕯|Oz=V[mT 4=YeO7O=6!{^@t[U93|]ϴ#{X{xklw=Ws||ӶviG&^~K_zIyĞv鋕6<|8dG~9!*7|o,/ak W|~6яS+}qGCظm7<`O;֨Ùpވ׽n֛s7Es!{엿|[&ώg7z/x0_|:|c=UA~Ƿ4k&|K#K\' Yc|j%SMvgv6"y ~XcU _`M\g_ݸ< ?;K&Ǟ>}yS7Q43ek<1嬇C9dLJ#9Ƙ\, b~93_Eb%K֕2[2d`x5.Ͷri)SO=uw}# 5S\s!\ҹ(C.z̓] r\j.\).Ό8Q\*껐_u ]}5?.\Cb"O%{|V? 2x]p_ 7a*^"*.,.'l!r.'.I١Xؐ3mŨ])j>#?ۅ)X|ΟGʕ6Ȱ]+9D]6O`_v1~ m;a{']{=JG+D~~/aq6[>lŤ.| HN_|XdzxlŸ Jq@dAٜ:kɱ]77.6Q1'LmDp_ Ӟ˯rf~dQ^EFp?xl<G뤹 'yg7l$u|>OÅCѮQ>#OR_<ǣ2 xPktNV%R O0ꗇb4fr.,R\Oo@ɉǸ2c2:!Km.) }D<뎽|&;_œL>Xr":NvxbTc.<{]rc+쨓 w[l9~ IF)g5ZjպoCֵwS=̰::["06uHڙ?+^6G;WQw&eG 3{G|ƟwQѕ:SmJnݛdn{{$:cs换luse?UIX9fe?\m™.9޼N~C6}u'8 s]X#(ÎkMF;?!xG Tb#Wn?qy.͸o8GOs3?Dnj?#|'v{ֳWxl}VvE~s?~-ntC6?bTPdmcS#cd<ٳF j= c6jfc7 o/L~+o)£>zF_BK ,X2d`%K lXXQfÚś%D| mEvW*Y )\L>7˵.ƺI8 IDATs1fOh>]"e`ɳȅ"Lv`сna 6|5FΧK6ȸㇺ Qtx>)ŸO6R-3|]_nI0\M9tFvPC,Ū-0 ( C}`W98`&rg|d'gM~7p(]3_x8G ;b? >}`/H|Қ15]N}72l'rWvE.LxEQ| tGb7?xS2哜.?91zͽx`Pŗ'~BOyxԧVOȔc⥋Y30օ=-X[p T,jyac|<6ɳS~aeS5[c|tf;u~;s˖BW_ @ͩuK&_v%ɥ'L`W{ ~!۾|6y}}o{]H9G76u<9W=o`>|l1+DOo+}s?Λ޸sM,x ܖF|t͞G5\:k$Cgc,߈uU\e'8hY~Cs=W}/yʋXŖָC̃oo@0^,rc\_g 6Y.Cd 3>6v$דּdz&}5N _ȊHхЦ~ڳel8c}ы^rƸ7F7Q,s9;_.nEn%K~ ,osh.d3xWZw.>6~:o["XmOz{]sBE>RM_麠C.Ԕ.l"=Dlv6=ḴӦ񗎂U\OD$%d`BKBt2.뒐^pr.%'dX7#uEʯ aŖPl~s&:ū\/rCLb0Gw +=:˻7oyb[ #lE@w<}2[NxaځEM}~+0 M\ط<8.\rd#63r?mj7?' d34GZdĊC/"æb6^%.ص?g6P"uaC)n5liȄɷO͝1$.x=B6ч!-._|?}rt/OdߚbEMss tesD.?O*G⁏q}GG֐7_ o>҃Цg-:0C ޱm=sùo+ttIO |-Ÿ"+RogoΒ|>c &#_o1 g@~ ~h \/znc4@,qᛣdz+^g<+8 Hl+ Fk|B_|sEV1`?|8_ٖ3DZcy~D>}8E Ӹ?E:tʓX+^9nO#?wCNh]ɣAm5sXj#g=`:啜)l5l39%y2>x 9맵 } '=OҦC\ϳ^9C+L';r'cZ3֐>J1Ó8lzo<7ObQ/e/oo -X2d`K2K2 %ZxljQ-,X2kesܤ6۬g}ހ\puYͥڅ/m]G#Y' /L}c.ﲍ.Ϸyc#chB/{=2.SkNrƊ!yO'h}x!52Nk70Wl;1yQqm:55>Z)|ʯ[|CF.~cӚׇ&wkq|O0s{^j 3]3m2f,!TKT J%g(HX$ %c) qS W>O>ϙ^z^w˵r^ Wi-q092k1Z WGVT nWz09T~KGWyPÎ/9V=|`FظQs Snq/G∽ҋ=f#sQ~eGZ# #/cqtkIɏ:'S>#i^i6R;S~3 o{Sϋ.he>kSیL3QP9yN9vL-u;~yo}3<oG<㧼aOZH;YnW)l0d.A 7K,Oi/GG8N4`F9_\yZ*,{\#[dSxqM%\CBze{<~}$(䐃SpR%?sN4zdT{)*?$s ? -M%|t+FO^t‡r9B)q)|#^l8^V?7GS^@ճ Xc`?{A¹ 8e5W'ƽO-~Ǎeܣ:vv==Α f{[ 'L`d 6e:+XѤ ]`cp/Vi|"7ZIx "akČ-<i <~ ,ʎsi"ͤ5U\K7UaabG)Ϻ&_ 6Ҕ˪?$o\ qcO\KC:0ceO6pC=uB="㇣>`= >q +݄[Ǐվ$oCQ&#p0#<)~8O-vQ#OΕ.ҁuV!~H 0#*[҃q$̹&-*C'8{%,冼F$]Âa|q{"<2'V L#%l`%2/CU&nI;@/{~N"^>a8q#-4'/?CGH'G^ 7< \Äϟƌt"r*e O>t=ᚼ'q_aNrCJ?f5T>G ŏp3`H\sT 2mFҦφ' \sγ ϋPN*nS\(A77GE}3"l҅9¯v!LKz qK7@8䋼=5ic;̓?d~߾?,Ja&LH} I?\/!-'Lz>-pOy8>iT?č[ÎU_?\v龓㾺{=> gL~Ãwޙ5wB5i# oz"OW] "p M!_sx9'#8"l`?y$>?=b_s B 4s=ve6;†vaj9$Sfr 3}*/eS$=sU |7yC>[l 8>vҢV品\.7|p}&-ײ#M%>D0+cC3qx9' {Ĝ0M9y$<9{9v! '~ċvc_AqcG8$ ~Hv*'Jqs~䅣 ңx9W"~ KB! G#mM8K<[fG=f5{a5iaBBy$ W'<_<fAYӽWpGŧ0` iŜפM@SŽxbNz Ci=9B≮&I9?`KQ-BaV 2rēgNTo}ۿa7\tw 'tknI/&(\sDx PbGK(u n8‡8N! ̘hWb%K/K?Qz 0I[7)}vo[dp}铘MVðSR.w_w]&q%w8Gز\ }0R^򢲤2CUfww?c_=4!fas$\Dqk-e<>CH~z&0ǯ/ pGXJ?qnT2Cx?Ň{ |q$s1q`(>I a!ǭD/D=!?,PAB8Fu{,疑#rH3S:LY~<R_&7o]w]]ꑲ,}HK\TzG*p?)QFեUnfGh ^#u4ğ(=6)-?C){RmN:ҨԖ. $#`EI@; A B'NN7e2Va02Ƒ^\c`L 1(L8470s 0' ! >`! (l p?kTŌV~!IҤ?śB<&O%Nyppq +ˌp9'pE49HXmQS>)BJ8"ݤ 3>~arp^~bʃBэDb/IZ`pHn0'MJ;n0LµK ;_], Hi&FŽpKךx!> CK3i#,)r'"W0\nk p͹Ҙ3dQY=TBK/tetk[ /NT-ɺY$)FYGš &;*3sMj p )% JnTG)/ s^=IFx;B2Bz᎐f701?C{7ni[s]{MxHI$װHzH O:㨸?&9n~É{.7•cGx'.q$LSʛ҃1#<9sDE99l/Ƚ%z_pHfNinjtq|sNذB/gVa)UtϱWs- Xët7nO>LzaJJ ĉLUT|د>%o2,ѵ4oW[-*}䑔O yfp1i&<0/s8*'aa?҈). 007y3#?E_)qy!sT8*Ob,s"sّG;Li`ƹ2{>Qy&Ҡt˞#~DS#-F%Xɣ>Zfl!Py;J( ܏#Ь#TzdGZHUI^UVoZ.M)zyx?hCyʱI]2(I!QV-=)8L oڍmL 4 fUPU`9uuN& $K#200``a]wܝTtd 5Rmw焍CN,qpL*s60A?\x͉ۻV[=l0a{_h?*>jTxsrݳ>?T'_Ug[5̮ވ?tY6|rӤȨ&0*6tpQ+m18j᫮}q3~.qeYh<ɯQiB:&y 0v;{pL`(3XbvoSV?-[k%fՊJ϶0000m3].+vs۬H)b IDATt9HXŢf;K~Xc׿ XY&Cq%QW^ O?]%d8Q;),L3ᅸ\:>?HYfM(7vR,2B630000G{N @ ,)U{oeuئb&`&`&`&0:6#^gn}롲$(,9۬a飢{T/)˼4 oP>@lQeՋ a-ax{sD gCYsC/T]x3hv]a8K wnAb&`&`&`&`!`E C`U o W]uUJ/izߘ;!&`&`&`&0| ӿ`<>OS2G>R N2(f$ieF f_a3E<0I@cgW_}uϮm /pӗ00000p9)1hҪ7_^Vz|myl ?܀$OϾxF} $c<XFc<_>O}뭷 e͞L`lXb%&l2{:t{dk}GV82tI'"mJ䡇=6%iYcued l%$>|ɑ t _Z:p#}7qc=\[m޺U+{k0&r7t 'gUJ2JY^oưN;.MOo۰7=K[.MOQGU~hzZ%J+"q`mMJLۭMr! .MInEZwup׶"mJ>MInEZ^{SO"mI$V]uն$5da4 -&`&0œ } _gu<̓YY~ae0C000V\qŤ,s;.\frGK.3ƍ w'sJX$«'d %O[F,&`&`&0~6,a 2K+:M5TSN ?XȮ`&`&`&`&`cetfL`H)f]v կ_ |HJ2[lE'&`&`&`&`Kࠃ -Po½ޛ~8tӅ7<)>죛>Eqig!s?[32׫,9F6Lz;00h4w݁ϓe]ϔ[,IyFf> 4es/h/s9ou]aĉa /|K0000IK`m]4棏>fm\s5iئ(S 2n;T<̥n&oڋm,瓚`{Ygu0vjxnW^y%k8ov:iZFm[ߗ@2˄;s8a_{*M]8qb7kr҇W_=L5TaC}W 7nOi6kFXlzN_?!qs9J+VYevm᪫ O>d{=Yaz oode >{m_}TV򗿄^x!,ᓟdx^OE]7w3|SJ|ǻ;\yKrf鄫:tMg ?XwuK,QOZŸ0qİ _?i:|ᥗ^ s1Gbя~4L?fz饗;#W'>g@qaEMuyduCt]JD=K. >hm>kMJ:p-ܒ_Wvg&/{ %z_5\P/>N}γ/Ϧn; / 믿uj(7M -GK.dj 4@|-&`&0 Ćdg-E86Н}s8яENͽ;&lRFD~~r89Y{KcX_W}j9:QѠK|k_םY?w:ZM 28H/o*[mUexy6?R?POIT?*utLFŎ}_r'|bsgצ=v`K?q'kljO~?88;䲌 h)oq`'=~OɊ p/| }ATApBg 7,':qL~řc'jF߉a|s1#E8:Q!=qB_ry@Y];bM>}H߁>Ĕ$qb6Շ,t1`\8)[F\3`+NwH꽺wBmfI[Xl9{オ)K}ѵ~ܙeYIm믿_w}^TV }JHTr!0QwS-xGb1*u2|m;V{ꩧvW?'qO.˨Xu];sQ᧧d.o w}ku"SC?N;\LAC iq5^O'A?^{u xh`o 5h:_Wdr-׵W˔Rꫯvm;L|k_0B p]J3@-i]v٥xSWwo!ٔ/X(W{t'.2߿`?n0&la t?C7ڜκ: ӡc0?lƥycW,$%+Ra@J  z]}: *p_6tnGNI4Q 0ɳO`u=N2P50w>qeQgK\Sʜ,\ M MR(?r+wdQxΞ{g>gG?Qe(7jvwuT~qiKR4%;[,PP>9)З$žu5qs'4MhC:{v-xfl>PNO?kNTP4}]wvxkr>B\YE 6,Koi1&ӻ.yG?y/ʲ&+ pG|B߇9*eȨpG_b*LI9q&-&e ~WEK_t3#8"աIZeqÏwҸ^'vov@?n m!gԔ"'tR˻1/M(E};%Jʦq'䟱6=Xi`g*eikك>[:Eq[՗Y%rJi6?Ϫ7 ]g(=i2{L}i eJݸi/|iDWS4b;~*wܱOĸe5Vӟ? m wH4aK܊^4K)KQb;'(PvcѾe,eǪLeʹL` 8Ӻ:O;SLj`jQIIn:4rf+v qʄ:qnGFue뭷NWuV)bP. 'L贫c zQ@0x>a였7xMFI*[1VaVYwva&4X Cb&n;mJt~"k h. L,A2 O=T'(_يp3l.FM3L ]pi,E&wT. 9fLH?2`e-&8ysVLg1 .(Rip 1;~ݑrm?g2%c]aplQA|3 jÕA>X% h%{?{BD&u2PFϘ<E\df"mdy=_5.le0/R,jțE1wl,* i;$Z2KYǻY܊}0+k?uq&nHY6FB{LL7MP"2!I׋ u B]4~6_QbV=ִ#w/A`mx7('e4M02vQL[HࠃJe>0yN2> eF,l:EJe"7ʟ\Ţ2aAqP?XmU)} ޛu}hGK|s) Zk:c@۽L5ƴ  T( 3 RnMm ov) 5ZQծC JY]m ^>t2EaŲEp?v)3B\uI eeXrq![>L({甛 HOX(be]h˲2?m7'Nm }L4͊2 O(1اA֪U {wo4޲h{P&A@qYi\nʶdT+ V( ܵJͯQ"o1؁ 5xT^cX!WĕI2 EAॼ㫮kWTH,S 3CSR~d# |(/(Hl l2V2R&@&= rXAnmD(( f&PG o{{_;U"=o(YAy(y۫l5Z]VhgWH6 iK.=I:E%e0sq2I4*EfaD "m&XhU]^bgQY(3BL=ܮ&x 5`O_L(zZ)XQ&yX Z&0}AcmFӌ¤EU.UYLg[Jqej{1^XFF;\XL` 0 ;i@m3z]aBV~Y{N1\O ƞ 2.ue`{B R^wWY_Bm/&ϋec&^>vAd]< ƼU`R|9t EXrբʢ&\kӹJ6-F}D{*U@cj{W(SeNBJU@2yj#{x4Ǝe-Qt*[%KŃ0:VL0o+5Sz|FEP qgR7c͐$qUFr@CX<'*q!|?N8S?N'8J>pA jJ!~8āѓM?+>A>nT~ʍ>q;mh?J\R;! *Ŕ?o[lQW- q0"ިpNW6kh4qq\e .qB%:2sb'{X 3k}츠79ncADsT՟b!t$7⬼GW_K}WWy& IDATFu\j~ǁyTPg?V jE'KR60+mE5!BLe\U/& P ~yhA%Ў;6V[mFŗA%PǕ!*˪:_un$QZ^+S;? qgAFwuC/+Lɮk,gJ_xt{;ҧ$ DKVŶYqdw (VXDuFeW8y."ymQ,.ճOqQ(IX1SQ,DE(Ǿ0!;t==GL 2P jO{\U/^ u^B!N5+rWiзe'* xSUƝiKQ/:7~1 ~qby\ڭj_EŶ4/s5_t+"Pfs}J!.ʭ9cOqt8mB$*&cG|k\05ZqJ6`)DdԦU*nĕ)D\8cr^6$#寘~wq7&)eUPGx Mg3,gdo`*4YBʔF>2C1TJ˸C3DnE츇 N{;-~!MbYNU+Ey_ ELkpMu.ʝKQ_)k8;.e0w.Ld<+q8Pb¬rKyEIFWE.ry\1`QYdEY-PUʒ/; 0XKB5YfJzܸq8E J:&7h{wNm#8")ePqQZGv%;Ƒ'B^Ɲ˜fZ$8n%=Jj7u KNĕqm;38J9W/72Ϗ[5\cgS`ŝ|) Kq1]eǸocAč6Pڥ򏂓NJ\hKkZ)|e" @3 XQũ2!FOwetMT:B,hSnXc~Ғ{24۴XFA֪n_4qذ⋇}ݷd**e;"4h^?kKy0;OK:* 3n qmx"Nys{Y1""SyUyy~.5Si4OB>(nOIH\9k^V!n!5Ek&G[˹a/ R8V/O_ǝzY&0Td=2 DĮE8ƭ+9$礼W8Y⊢.*Qy|UnbN 9,@{"oyOiZٮRr'&NGܮpe"Q)ˇ]R,Ot}àQ{OL`TQެ1(TF?LliFkf- UK0Wݑ-gqǬ(,pNcr_tg/jڑtҗ}ι(q/WamBΖ[n:(-(PTPyU˸\ 'vAzኻpT7Kc7#; Yd?[+49&` +|W}VDAkU|J=^{V U"W]˾_oȞ[r?1牎V&q#'nEei˜A1XeK+:>`+4"6u\#nE.}1|@cRiKyC'آ#JlʖJc[X:ig71OLq""qrVQyٔEy/[ײ/Q[_ⱹ @^TNh,#eƳ6 QV確;gߋ&ܮX6Ov|(1%,qəbkcV&*r_Ifj&^(˰F]wP0r^VPdg#NS@6U糭gҕLl_TWAՄ,E1C?vm]Zw< ׹v|(qJ@0/eaɾMjY>Fl}IbXSu6~UA ׿iv-N>V~1.皟npf~r7M;WvKȑ2z6σqE1KJ 9T5kK=B<Yx G}3ڻ(OK͸sɹ տƣ^Ǎ|] Wx 0Duܗ @ XQǩ3& _x)PÊW__ũIC˽{/UNLBe}tT19Si?MGᄭdY c:(1aD +n3*Nu\_l3&|Bt( s|k37pCq_y>Pnqs\:Kx)!{|^Fz7_ x}1;_` 㯮vSz9Diq6J=Þ3Q4r?ޗ*eq5ŌxV~0dQ^qȿNӎj;,M}٩] 1+4@=p9s.?+f^?no9׾H/V)J>t~B^NuUNێw<(~:v]CYlV]'i?r '$c]o+ +˫s.r_$3vc>M;I>cBL?cbrO~^ݵZyٔ_r/7**Cth&|Vi=r MA@[8È^,tX}p1ǔG*{k˼xl}Axؚ#,fZLq|Wy7q]~.2]gۦiE,\Yf_+bL`UV:Wϡp%nşSQ+ܮrHZ~Wsl9ۋ~;I;%@\dܿ\~ȾG#[Y>dsÝe_3+> UNb9.s?V>ڤ(2;%gT5E~)Ɠq5nvI8R傺*yy,s/.9GZe~1S]S6R_M6٤o¸qRX%ϧ<&яύ.}&aQR%3ˤ1}G|^Fʿ“-e6h>+49&` OhG%,UƲ]wݕ:R2Ї>.]%DEK]L:>b&nT<kvG7񘧓m墰\6{ns1 u\ m+`w4"we[$/I3>h:dQ'P1?!eraZr]?iQyVp'G{šk˼x}mC%r:xr?ChSK>&֌b)--sKp_h]wuS5;CZ3q]AE&cJx*r_GteۢI$mGyD\1evq|qE1ݣ&L>F٥`- _җ.կSK-׹:;}({Wo۵MɈ@DQf<VFѠ̹v9[|"osЫ߆–]tES#I_Vm o e%ڛbe΅oP,Ž+8tr!Pq˹bNy%\cVy*/m5<+ ;$]|ikY&hQ^cʹ r.f@ :U]ihQ v*Ey{Z{S'Uz!ܮOPwR9<ig0S%<皟}[OS8>ɮ'EQ]RnzXpSq}VחW6l, vr0qW(Sw˛ŭ/fU7|Rq'u wbyѿvb.*P ֕aV9Plk&Hz뭗>-X!joT幊+ں0W79(VX!0V ;]KxvHA8/!&˫ u=㯩K E楖Z*r-a}~ m -˹VcA rv}"UI;ԧ>bhnҧ*N.pX˕ZEG8++G$mJa{* s=w`0๐O:ל 7piiӹ?t=)M՜F LMxI4x4hV,.`0w# ªocZQ?lit`$L  >=ի(E)R/cUu5]>㓂u?~ 3{KTչ/i7)s.lK翘xm*⏼W)ʨ[&G6Lm3R>cO&Y+p)1bJ9昣5]{]e" BŦ,N%Xb%aK?}oⳘHPŹrQu ~T ;s_UB{іИ93Ƚ/,[DAP/mv뭷v^o=,Eg1,:.3 _)tnq 6Hϼ VL"{2r˫Lܫww*nZ&45% lOǚ!9s@J͕W^=Odɜn!|]Ņ|#E]Kŗ%+RrŅO0XR&*L-}|B|&HvNey]wJ(?C\X$59( 2 },L"r/w3,7Q\g}'s/vedBBܶ+vHŧv&EOć\U/dko&90!P9*+;xCe' {ꩧ~=e_jUB cI ҥ.?vM*u`t?GuT(9~S>nw=Ïz#⋓;|n=l͒}\9סHvOe%z >*var~,)qs'*3M]Qḟ8ҡ^G>n`p'd<~m4 )OD}8]&=蠃RU}[DmQ1*G%NT쳓_k?n[֎9c=7р;W^SMT$엍h+1=d'q:ԵEmBS&_}m&4lwLi;$Ko NKq>]Qwa/q2s7v?F@܅ 32ri'N,9f5S{TtIמ$@}sBt\{1{Q?N'DZj6)?0;&?K0fQ'pB1p=' ec<4ĀnV*^_k7q猎 N߲|{T C{2ˤ4=ck~. IDATf w2HኒYxEF]E]]NQp]:딺e]Rx+r=E?v[oun=x㍓}Y[q0cUs#݈|b&hhwZLL`L{٧Wu:"50WVYiЊM}tqI'usK(nrދ y+¹ tDa۪ IrWgtĕOu]71ȃBw]J;?$A-{/>( ,)XQ<`Z³/})g% U㏿/F1-0'qeFr2&UGR:eRpU꣸O i"O\ꦮeNL&4T?>vE$?nu|k\= eL Q|Lx€&b kE=MˮM}2Z~S9dP*nM3qhna@uJѶyQ FW#QUw#|&hLd"(gB* mX ׽(ڗWZZTPBD(*I qg>'*|p|TƢ]|3}%(U)11qޗ3Z/IW/BӢ o(%\N'] " /erYgu?GčbGӄz1+Q&gs1KY|Pjψ"_BDa衬m?AY(s-;bv娼ˍ&0N #( ](G-G"qwt'ic1!'UXH!rQW)H[JDKd7.(jy/2%۳„c=A)MJG?Q̅1)*S4fythkIhKYm2w W, IfR2&_, -* ]:[QUcűZ6 4VKy]-,d\,29Rnz6: +K;\r?v1:-VqXM 0L{Sn&0jaVrW]Vxـ hӼ1gݑ 2iB&MP&$ m +tl[:W3v+*;M(v<Wگp˔am!t(Lv)N ӗg w{)epk+fAV$߉Z{niviZv)URWZG(^q]%%iw|tVKoSC 5hd3;0qr9:`lkN21ê联hȢCn ;wծ%tx4P*.~;lM ?32m$+ )o(h(f]KE Ё3`Pܲ6! jd}Kyva`X^\EɅ&4dt<Б,Ua=(L4ǀ+3<݁11i J4Ow`Eܙd'6Nv$nS(WL0x= )/xnCQϵ 2@l>y{+۞^H)pԩF2 7ZZ9g. @Qy}BV m:%Ŷ!RV_Tn}vh;+qeev(U΃6GU\(U)aLsO#|ZJ.ϗ/;nhSvhz lRTFyMG Fa]}R[{ ǁƾPnd'0)龠@BM# /<ߑ[]_N1QaŕzM+?:/P^i:acc_S̐n(r7n\6 +ԁRE>0VbbױZvʕku]X_>-vi=RT.͌ңč~Y/}u %?l"vL`},&`&0EC1D5C">;!.Kez26ZJ qgca< BS9RB2!vhC:;[G qJ„src''QI&8!ӳ8$dU!nJ;=oCN{e G[ܸNB\Q+\#Q&Wꃨ|_ZqP3d`^3Dwwq0+TjO}Rse1IIC$qW&ec6wHaJ[`02~ BLu2)]i/AΥgS]VCq%Ҿ;a„ z1KOvJIۓw3`Gz&{[ƠKFByk1(kmݶ 70lF}̪.Sguo|#;sOLMy(a&`ce=vMNkMsΙvXfe)r-iKV&Yfmn?Ov[瞻1eV>HXˠqN'\xn lA"M>Db&`&`m"pwƏM6ŠÑX>?cmQ@ʰꪫvwzI)6"/LwqG_]vZ(QJ2mi&`&`- vZrva}衇?|RPf ?h&`&`&`&`XQ #:[3-C=4l}:yP9餓wݴ, lqp OVXa>9A/ <'7]LLFG Gӧ4IRK-v\o*¤QG~-z.( XE9,K|C>j1006袋 ,/ |'%cf>?m100002SLL`8CJ23Ot;\$Cַ=3j&MBK L7t 2_:<ӭϛ3`&`&`M$w>d;p 'BJṂ4i 0 ᳟l3(Rn|g}vdO.YLLL``?<|_fQOLLLLL # OML`R`kXVHXG}CZm!7xc+l$wyÇ>fijS'N SM5USPuU y=y晔&>!*hw0a„Ig1YzJ+D(K/zmE''x"1cz*h0|>!݃3]yjv#v0"螺|i0Vv!zk[&&>+qWvpa0 FޝrTo""""C"a|)ccaP cI"ex "Bsax&*W{{=s]jժ^Uʶ cyvR}sͶw]fs"ߪ~m0E}c?RYms?su%[~֕k&%{n'jnw׿:կ֭û϶ [XAȲ/=ˍyWSȹ5NwBޥaۡ<~q[ɛ$ۇ`U;}uv^U#O[$.RVʈoUG}B;lVUǾN%V40tK^r2)oo&ݔ7A -(0Mg`v+]bFe4gNof},x[Z]7mo{[ΎQcFoenxno[jL{}lj{d%Mv:–u!ԭ̖S6?tP}8.-om2nw]f|;l%U1cyo\feOiJG>Rـ?TFeEo˶UȲ=q\'$f p{ܣrrLow{;7ޙl(:mU1d J>ae[w~'O?'їW-}gK}p;G|i?o]D/!1F/}K|}6>9=u wݵ~GV;b3ΨuFYِGq3vyD婏oe-[m*V~a7uyU;nv-G IDATq_cXH_:907;<$QUE岾𐣯Kmh{hMF_{3f_KI^cݯ~IGy/?[?6*8D ؗD Hm@Yz=Q,_EiyD^a;wiV#sOd+:ҀYZ}ɻ.}i(.Jlb/N8uiKG)Oyʺx( =_ӞKaQVbMOzғz(EGkAEp{|.^~i)l4[:/x qӧi/25)8F-LEi O\\QjX:x3ikas(BJKM_m`( 9ZҁNбtX,N:Eiaڧ?^1::Ei/'B<'OGۥi?㹔YGٝ|Eil&tH.JgѨ,A;5GoQFQ#tND%@q$+>x[V ŷ ϱ8,(o0^w7!yhz6i4M[Q֥/[JxeEEqZ⚭{9G^, ب\O$4 ˀH/=5lӓ(KqS?80b VqSeiQ9l|5 \C ʭK/}Kcu([9eKQhA{{2`Q2ʀ>:> /sB[(֫ ujiLRlȣ-P6;/~s^Wôy$㽱Mؾʀ(l{ q>)pTF=WV\Iy~MV}".^5SNgRqTlʄ>Æ~S=^IOl%{1dę eB̚tgc}-- mTKėI_Z&7"Ιm#~ڴq}{{;V:ՒYyj U >gsˢL2ZWҟV&̊y۞nxfw62g*랲ՉUl*hz'Qd+q.z^G<[rH_;FUrq|Zxk ][[UȯLSmQwfeL$@"lf$%@"l{cww7]0ruji,qqqWUo1&2Cdq;ܡ6ˬ52;bNs ʥxW>UeR~0fx+YAy›L 10%̠,\lQFC;ӏz65lu,)3t`S+8<2[򊆟t t4}FS:l $,(#>c 'v@H z,3rCGN)*+@N'w=_s:*G_:)fSۿǼJ-fagx;N)w:h+}99%|טxɸ}ϩzvYVSYWUe,9|8:O!|"v7tOц9,/Lˌ閽^sapxF8ʼ}[c{oQ:򗿼)+r!G=u7(,pv6@b `gWfTBV:ʴeT7ԑ.ɠ[ ;ug#M 0]1|gY9'mNm{-vVoore Uz>Án[ak WD 8ow2Ga2BHۣg~9mh7w>{klyIE/bkk&ʟ?Z(4–0y}:x׷8wp̱sW26Ž?Lm_gNCJؒ {=<,Gߢ~yթI<^:c H^e?4EDevcG8m Gpgcվ)|ri-88m&!'}ʆlmjc2$Ԁ'tGcN(C[pk*cĎ:cJfLs\cq9p[ <96ʦVámBmD hhea8L>owI s+~4`~@cԶcS2u8*{Sqw-]|e,[k}3_lBqR}([ęb|cɊc}|g>D~l1jK&18N{<~Uc)pNL)WqiW*0OgU9ۄ[֞7uHaSr.&v)Gߣݹi$V!pPy'%@"l1{ϱxwX.BW ѣx~%JCp4 ,w6jӯKh/4U/"}j YY2+,K(Mue(_JCƕ!]Dhk_ڮ.__*=Y*6#g_U I)ӕFQ/禎ؚ͸y;ٕYVUҲbKVWfUSqWJF]i4+u6,ҕh%ךpu8* s2HWK+P/+zygKVSÞuo/AKFWeVYWVZnX'ω@"p`!PCAz8Awaǀd+yOUvoWd"lQmŷ.`VV즞qҳ/OʆM' JL߮4GN\kWY&8FAƳÆu4`8餓&mH6u\r~Qo~F]qbvW\k|zkQkOӟ1[ȯqe+GV;Fe@ ::9aOǾ"}$6D'MNeAIoRHmCٕܕo_Y!+9*LVeOQV{u.ve[GI.*)"8LE ^#l,*K]Yw8/U "A\sqBh>lTV|[bɟI |JmtOYzVeγ֖`'MUE{RYM+)kpqҐ/<^hqbXVYL𜵻Hn00mcQ iY+NWUOU1ˊ͝aWͰD H:/HD늇zC}ȅFJ:z5GR2HW ??GQҊmbHqX(U.á,Qٕ}*ig304GeVh=ָ#7papC&N8qG# 2aR~蠙# (Gz` keVz/+հ2[k,kU{e&TEYEf,{;_\Fm+ ؤD 8([,r]}:WKWfyoL Gֱ*rWa$eVI;ߔWqrڽa̠~ / svp޽wַem쳲L>w*[veIv4efuWk {83~qz8pjS"\;n 4؝s$ ^bfjb/lϲ}ffX_\V[Xfo3k. ȄvkӭaʛD H &)Z#;侬!|7q$bWǁ e:\ʊόs ݲb^ez c |ç(xL#M9n-G?>> NeK~ىoFF.ۀM&k[8c –.s2Kq\Oјݍ7_,v\}iwsflᘜ*͜M>alkSPaiEj Z/QYx!7k@$@"\tD 8 hg$\SϮJ35ёje ܮZgm4aɜwYeԪޣ~v|ש>/~q7jVqYHn;^f\n4vչ~X<7,ıle청ֲw}VCfhj{׸5omf]Ө?`"9YaVHԘ}?s*lnֶ4:"<*VtXJQht@mj1f·vf ͹}Ӻ73GVr#o0IJp^fa}3)WYҮn1\vUV| Ja}Stls=6]َv&ܷߒU⁙|tzwNOطp{vkqd[ѬlT=RU6/ȓ+M+,l36^;6s8Fau|ɱ2 gUUcL{F?S*HNNVU("Ue5?A))6bGV,[ULùi_8E" _ma Ja_ie{ܖm[e NߙCԊk2\r9 { f[焇m+[wNcZy;%(l.V+\ֆ ,SmIum:㔝|y^y<oS|uM>֖ߟkˌa>eoϰ [=\u;} yݛ4Ug">ω@"l%(hg^@"|8!ȈkT[3`4/!jJ+l:ÑQJ|i֑0LSgz(˯wT5OF٣tbev.sÌ>VV\'mZ68 Ŭt3 ,kuecF1]4ǮNxf0Ks(m`!ðl@xu3|;zo)Gր6?90fhAh(N{K LGA:Ȃ3Ψ@_- suޭ\fLg 8ܸa?2o}["v+_\e)X[47;¬!u~ǜcylA;]^VG mp4@ү3~8z9d8=N`mcJV,e9K٢ gf u2k - @gܶc2 ɰD ] sΩq6ɤe39OySj3ZdXڛp82bwZǾbWmI]"orJ8ɶdʼn7uvaX+f%zgr^=2^+7hǎDd`f13_s'xm_٪H '+8౯2Z6Me7_w'Gjfq =YkkUGFmXtGUH;msS+.U&鷱z[u;}[=Vyw/k kV¾1som!߲>Uҡ=9-іoNoa'lnD {ns܈;70e|cЮ~xٍma@"t ~@"VsE{^t g^"m>äN!Ol l !Laہvz,#6,1F'4*oPl{EsSpD~smU 6>p 25\߬2CN%VAzA ,*R}͔yI'ռpUoMdz":1Hqnu36D8Ǣ9'`,i.hղ:*D&/D X?_}]aŤle%}o߽9* L/}K'1[ ;N udlU{vUsއ)g=v# lAQgOC\!nUlfێ92>VF~0NosDV @/њK#nLF'@%>{V)d8Io+ev;l=0FrXToN[%7jd:0* pD2:1yuVslnjoj%eKZArxWSxw{} AVl#Yln:Vt 5 8h/ʝD ldk;qY;s.xK^c Nn;O;*4ܩi۵ 9CҏG>s齶slĎZyN}Ї>t]m\ʯlٷ^}?Wp;<@ :dUhn*s/_UVaߎUḇ2[iy{XTv;ݩXq}\{ݺ̑~*ÉlUǧaiD Ht3D H-oyww0ͮ4ff>0B4k…gvt g\v _%W&6e9kPrwSK;-l9$x10<{3kN>z.x8q <"|K^`>8HQ=lwA9@"p![|̺3i[T ]55lYs10x>яvVrΚ[Y{nyWfIӞox{%vj:[mcUxce03ͪn%]{Ns:=OWdmvvnj!Y// u#-wR]/wU=(ePP/=:;6܁Dpz%x=P節}͵Oۻ!υ=j€gk+Ny543mӼr<'@"3(/ĤD HmFt.JcbQ Q EY"vq_QfU,ʀBXSeuڗzXyG(NjAZ~ґbҗ4s̢t*,J#yQ^>}iq򇅼\zؔ}ڸ(^Fq\\ecAo< 4&{98^s_kz2&n#7Ѵa9mѰ.a(|\e.S Ϻ4ϨO˪.k䔎>(g,}|(Y5:3FQz9^CV4[L<&-4ntEiָVŗ,:MײZIV} 2z2HǏu &Z94F'xbWLc,4GepYfc-n}<J]#Xo+3ck1,W=_ڞa޾}{a9oQI(a~ tF.B>D h]+2x_6dQ_cali5ΚwSq8PmH_VRqN(3U2ԥ.U}PrHnJ;ã8.LE߅(piˀϐ[8`W|OZt.A#ό>ʼ`\S*~l=xF02(E}~C}^}Cn,z~>Nj^^BvwG2XN6S(^ů)HV}e0iLVxyd6^?=kvg8|N=_֞=G8F ^QY9>sfCjE{-mJqzTV&[}rߢL8睦@P|iPD ILJD -zԣz@^k0q3Es׸FoD24Z >h뤌)YQNE'~0t c=d+{?Zv`|QF"eWf,uij 4C'8ΈI0FeSuhӷ rRIׁ(;+bZ3a4(ϡ&\dCzY%iQGZSVdg2\@"tvp{hxy{{6^IJo7N)G;ރ.*nꩺʌn`lU]QzZ&Y 8?ԧʤNޝl"e'@"_XuZ%MʀFWo"V%e*r SZ`Vl5Xޤُhr ޗ'}UV9;mh&,^VVfc-`Jh*lv7>0-ʩcI.'#|#ˆؔl=!m W.[ygvP/ٽ-nEUm/l֚#zlֆ-L-~h5f,æ=V}xlO:%+d6cSN?bo[yƒZ}cr"}-2_;u;'ke@$yڹў?"S[PͤHJ)69}sW%ۍآ(lL[3)jw:kF~:Nݺe/[q) ~g}XPYaMn]ԏ6Tqf[@ӷk;Վom)lHg!BWv;bUHaʖT/Vgسl'dkҩ>0uw$z;ctEߐmlYkm?ö ۶>U6bwGfSrZ[g?3t}RԑnT{Wl8cwQ,ԝp`)V!JT?*[e"$D '{"$@"$@""`Yْo}I@"$@"$#P5N2R+2.!9D HIu}st% V:䓫VѶhR"$t٭O6˕$@"$r7~^VmoWUuYKb'?u묖/D HD 8lya tI1Sm`D HE7vHnV@|<۶LI@"p`"`?u˥d6IcB|#-_^'@"ȭv̲$@"$@"p#Q栃ܞV1c|;=:}׾kȼHD HDEw[޲#ծvEco\"}lϟD HCo|c]%??Xݶ׿} _Wwx#"Hrt_җjyp+teIEwgtD حn}YD HD H@n{v{~?CJ2Z6$@"$@"_:Wfr)I@"$ۏ?|`wN*cg>ݑG9ɓ@"𮰍uO%@"[HG$@"$@"$3`>:sgt\]׮$@"$@"0mS޷mեo|wWfL"$!|;s:-yw_rpjR"$wUdotQ?׿~$HQyYD HD HD HD HD HD HD HD Hl:OD HD HD HD HD HD HD HD 8PR,g"l='pBustk9&@"$v я~w==P!A3^Wva IDAT?c?V"aɠD HD ؅\p+w.,[G=Q??u7  '@"$#HK_Z9]9q2&![/m)(H\o>HD HN?wRڝ_<1 ^hj$@"$k^ݹ瞻Od=C~ܳę*HD H{uerd\Qf|js" pK]:y.wb]%/jWn)Ҏ(;;Cv>EGn)Ҏ(VU?;Bݠ%o}[]qԇY;]2|o~wxGw;yG[cXwviG /?ggw>E \эn[#O~{}vguVgRկ~Hy睗0;]b_.}K ?OUznQp7[# oXW %Lzmn]%%bXuc7??֕YnwM3TEs~>TA W9@t3nrtǫSf?iO <>HvmyC2~wm` G<~~i/yy'?]W<.qKT 3af.' ^uG}twQGuz׻vR7{C}O<vu6OhJv>Dcx^ֽ6O>ַ՝vi'4%=qۯ8SO<;c%]_GL>nVn+c.wlw}^׺ֵ׼5Yfv qwT `=MM$mMDO.+D z,3D HD HD HD HD HD HD HD HD`HG;ꨣw]k#.HD Hv-zjw'v{ldזs,/ />Ov׽u"Ή@"$@"AvwK\b=H6(D HD HD HD HD HD HD HD H@:G &@"$@"$@"$@"$@"$@"$@"$@"l !)#HK~_tY/{-_tA{.v }߭gbJk<חk.vO~x$#k$}L_e }*8 _8~2>!Y:2~ ʗ>/RO|#Oz?(c8G{ȇ,iart.OɡOuL8vvOoKG˟:H Y፽pe@pNGȈx'':ć?D^&Pp|Q&yg=^a!E\36ܐ_G# ? oȉ N[~鄷aV2! HݡtD FóG8z9_8r HZq! 2QtK" y*K[.V y(] OeF#o  l\+7&xbT8c5!t$OxcP86: ^V&5M'ɤ3ᑟ{X3loNXG=ɌC.8ڼk:I7tiGZZp{S8Jx 9x: w^'=^a‘8X;+3>{x苤|:'EOHƑAW?c`A6+t naF8`o~ sv׾N6:Cyg,G0|_Otr/tȠkqHG?LqJ'Owy6pG^E~tnٽ-X\Е'Ig G> K҉W'7:A;"MܓzqV.dLz7a 7M7iaQ>]KkrO` QH'6g!o6dn/"C|#e g(tŽLu |uz5S|_( ^eK??TgyJ# I+/|%_>xTn"y⣧*}P~ S7]M<#O!-a?C ǁ{/| FZr.:C#颾 _<0!vdzF*3=% &o9>il &"Ck(O-.L/{߂s" ?ˉϮE3H=A@]qauw^ I/[.)_}_?+ ۙ{.iRn9ngՒoT}ê&B`oFDnU]Rto/Iى@" 2ϳJMc42uq0u{u??R ֽY|pw[ߺ] 1׾G?Zo=nww{[sk^^+]Jݝ|wC\\~'3  5@ʸ3x>%+܀+~Zq{!9K |7*Oa:A]#Hg9t 9k&A??^UN=*k 2 C^A4(?x•nݑqN<œ,\/ =ʏHZu(WI~A69 0/pZ!<0yF ;)&g*C>GZ\Lʆ ý(xȓ1}@<#\ `~G4p>q؏XM(%(KQ0ʯx%^ q0C!-܅sO0e ,L2㓿 sL^8epȏ,  J2F0SV>,~movƚ^}ֵyk$=yO7B]zte也~[d{ް/,?zuxG=T&Hl;[x}S:jK=3*(}c}_rH?vն2CնY_FV.ޖl{-oyeIw\|gf )<ǭy#87aU]ow!7uiv_".{S}?arK]Rv" Qfg<ʥoLD %0dˀK>F> laqo0T&dI!pӦk2CtE3=.>u44o\A9'G:W&'`Gl=_L>eU/i|+ݣ /|a s%Gc^WI׻N:;EG*[g63y{^?|M\{Á>6:Ur)ϠLR"$C76@~w3J>Վ9sI=qewTe[u]8K^e;JSۿڮiy^TL`LFi:HD HD H6ۧGJ}/U*]po g>ޝ{I^fǘ }]nX fΘvk_{ܑce)x?"Pgs1u&7Iw|>uw]J7A࡬r0L£ @etbrpdm롳5 :C3J b Y1X<H&~2Pɤ9RD!p '_L' 7+G \ •>d )xyIUtJICW+%!}>rӅ\0tO/8 B'r!N0ʋL2.=B7Q7G]"C8CdG^<|z׵q~`H/!GzBt#,<[< rK oi;d3CILDK/tq-O]? ʏu|2#AwMw{y:䩾j2"s5eW}Bp{V~=7ax:+yד^ICNx?┋>!,Ѯ,IXEz&Q<1+gG>Y 3=noVdewq]®;Ӫnd'&%-hD =wRD XtYK1Ϯ,ldlVl-uwo;餓Y'W@OO#QG7N7V 괤NC߀ >c o~άN3}h|^`AG .|ﬣـA41&.b| r19l 'd< AʏAw{Y#S~x Pܻqxݓ2 IW;7 Cz蔢:M.}:(E@X ݇GK/$Lz27ru g|dJ9Q7+|$KtvJ,gq/Og$E'OYEށ<]8ԇJ9I:xIO\d8\FN!xn=BqQ^itߕϽ4Qg{FWK"<'d&'HZ\;Ӹّ4HQo#_<;N-"tq'3tFY޵02];N WFt~G}'"<:")#T&G+/p-Wwk<(I$MuW#KޱSUHL"{+ʰ @Y8=Y' X F<+Ul5+^:9X߬7//uwӝ$_Yq8xsAoy[Vm ^OD Hvag mRD`{`6+78:ikUU׸F t}gL:g79f7W&hk~u[>mjT83V3[Vq֜X7皌fSI@"$@"$?ʝ%N=aŪ-??<k_[<)OdBȕt: ٽAw-}ӟԠO>8fR /~mpt$g?uв,cD(Pvk£Ϡs>Rxl8˓8" x" ĵ{G#8F!tc7pe]K[OP:# at4t E^֞C41vR!҄ 9^e ׵Go!ǽ(oB7q -}l^Z39K㠏g`@'',V&#{ӦpgN wz?YQ<#/, >0p6(@:;m*rx|G9% ?"_(ȧ"}Z~CC䄓K?x wᡯpa-uX IDATՌg)f[u׻j=Ya`3iKe!Y~qB6hҒ<>/u6u7:Ɉ=eO~uſz?@"$@"`'U`8Xq#J=y8Ʉ [v;%fw^ bGLЉ33J̅^X7[HZ oy:HD HD H杹% f C}F9cI~-ߒ%F~8#FZVZ?ҟ}66@1h0ȏP<@O}ʈdHKpg+w/]½xg9O(BH#d s'XIpnsz;,[]y Ã; X >:|҆*:ᅝ6r_ZGYȅxft^8F],Z=!?pety?AU>3g,  >ʫ>Np>rK+oz_Kы0t\t?r&7䁏x.Nd)+QW@ ٶz _+_qNl5er׻TZd9ȕVტO'^d;3uMVřrLx(sp-O #^{{bt9x㠿8Oڷo^f,rL3G}#x*GqD җԱTz0 5a$@"$@"+mc}WVd:`Ka]WYqqm{NFKqci;$%@"$@"$@{#;C"H,91ct_n[cUcuG32[Z[R6([vl-C{6P @CQA0xI^+*gd@f v:Kr pJ/Sa ƀhȐEYg.x@|PLƠ] Ӊ!h Bsx#+b\t#5<9'0 ph#G7_z$NA}8FqKx w#e!<`,_X8+#Ї<<;]#(t ]8Ļnӆ|zq8#v&#)+ O^kiB^ĵ$ ő,@rC'z#'m<ȋ~j8x>"Г:9_Za }qd3q>%:!-WWxn{B G S.zFYV!SiC9)Hi"}ŁGs ㏲Fo|/Joq 90/";sB4!FDt 3CQx#$7OqNb_7H>&3m3N}k6|?E3[?MQ?fSeD HD H*1^N|pG7)-5; _n. $@"$@"$ۃQ!sM0GV\25: ޸mwwuF{ϥ7h +D~zm fLg+7hP":@( RZr-`V:f!VgP1qUOARtD)XH^#\pڼ*S7%+_pRgoC8"KZ傕<=\>1ibL 5#ݮL:љ,+THCbxqHO.oBIIeiW>FYφi.>eQ?V;_Cte,Agy"x-dI+OrUYڐ<a?q O{v0F(̂B7\ឳY!5Ape&NK"uDZt=ާv xB7xlkm'Q:nӷ :Av1<0~ǀr ~F| JKzƠtF@4u9ƭ33<1SnGzHYJYEQ.i@t#L9pt2GZxEaȎIGЇ t&8V&2%|U/\+Ż< }ȕWOZC':ȌN9zqHO.'_epЙQV20ƃɍV7N:&K! ="sP' =C/Axy#9.iwd+ʫ| $q#7߻,qAC>~i3 剗>0sYx=xO©}|&YV8YQBK̻Qf_]8Jlc6=\Mx߿p+r9j>Im!:v@WKeO'w_<</x>;(s`2eiPe>>mm;jU_Ux3V#h[cuA8tn36.XiŢ[c+1ѷ%;jtk`.w}W lÙa_]Tȯf= G56lXrⱑ:з٨^}ͼ~HaɞMsNۘcnG?ဘ۵fj =,15o'lٚ_lG 1_G[G>5aV?q{j6aX ȟ>e%BW~%k^7-7\G}|Q4ݜ @t+x)M!{~]0}Xmh@F\DͿbiܔ!oW4rI=?^6Yo`AN|4}W?{v/x,s8\9A'[#rg M `қgOcO+{}bLxz||kVz[:4׬c8b\87Gz3gOQq5ŗ1%;9q:s9Aq5=,5}6}M s~N^0تC|5\"z,u>y,G_|8y:ʣsΏ:ثO\n}yex$\ ^tW^jņX6}œ#vŸھ{1sh}:>Srl'~윷sϖP#bIw)>\_ns:WCk:7 ~I燺~X][[}$arXņ>q3a`a`_p菶Vn]Kw"'?G}^vezG]>IOGq~ح_w'=iUM.b%/:߳9rRbs'a`]b2(l\voNG}s΂Q,Xa{77MǢw}c_W̿]m6_Q/]A®;6$mPlS8}7Iɮ&V}7gpq0Ӈ0>#څ6Fi3i n~ɖ[jQ>5]uSnjuuӉ f>'|=>6zax+.'y|4ٯcj5'_3IQ }a'ȉ&k^]4"xAoV,c! ya+ʳsO쭑yO˜\Klk[~`GW~bU8mfrf'O gc^>)>ؓjg{-|qw֌j,\wWAkQrpn9m8\ƜoKzU_gg#g` g;9w>`vM׽fݎɶI7aS ˿ uf-ԗUNWˮ=8D#.lh9qis-zGcvD?1o2 zⲳi/>3&Ė9n;R噟 ]+> ZOo7ɗN# #30̉%oM\!|a60'B4^mimܳ[S{5)N6Yqv['$N)GGd)}un|VޭCn ,礶__k>pN9ë~Mfͳ }vYs̗W+6;@l:>kauCK͗u.g:z.f^9~,~99\ˁ-2_yvU|׺*o0X|G-{xᬺw?aZ7]1ǮfLy>y0'PTO=TOTOۆ$6Mٙcf\³i2_Tl5OeD9X͙? d(=j6W⠛bFyb1;u•ذ.F9[È/k$w߸b[u*Gh\]^Gqm?ԡshز畜> ) uyHkV>0k=WxP|4s5&ƞk,.|6ŃݚY bj~\95c7Z9Á>5~ttNy>qv׋1dK:W׵ X |:`N{^Ov,O0y}tqnMP\秼OcGz$_ >lZ7ˁN=+x5G{öl}ou^55>kfm <תqu-oy3?#ǀ|khOO6}0|cy"j0Yvf?[gk#00 00 }.|tzYz &}OO7L>0YzI]0&G=Q:N[)n'<0oe=v8)gyޟ4nv([=^'a`8?FvbO|7{_??ԧ|| 6X~G9s/zы6'|'\x>Ӷ9/| S_?ڸ_mٟF=1jƣfCWM6m>'f ^`A S7bCOfn7ܘoS9;ʯl`g'|im6S٫GrF?)oC 0jS|lZˍƷ58V/[q وՆ:0QF 7s,6q1_vW?Q\M>{ CL:lyy⯉]|6ZqW~RVL|;vj!`ұ6Vy͍Q+j v7!QCWp['x,gjaHk&P!wvxK>uuIq& :\[GK/~uȑx{"/^ĕ \ӝ/GQ IDAT7, 45Ŧ<ց&nw"˿&n06ɟuO&呏|v#nv܇a`a 1\O6ɟg*]{>/6}~kي7~6a׆>TY^7w3z ߫OsΖ^[6^{8 <ϼ2e`nߵ̮6OzUu=Tl* 5 j{ n<æw~wn__;mss܃6{;/>l_mϦn#ۿq{68ljt4&>qFښIu1]hlv60 &'Gzy9 Y:-k.Xφ8'ń~b_k 5UĠ5_Ύ&r|1WxZ5ͪ[qvdnӕhIfg̷[)VK6$#L6k5.+_Gҹښg^IXR>Kfy9V;5<<͕[6هc#]FBg>)qW|4bs{gk|ٛn[{Xđ:^s .]ηXf+c9?l?ל>_}b_`hKnGqSp F%fnT]y{9y __ #>#vݷk+Z_oo__|3 u\sʓc[ߺM;7l6oqFΞ٣00 Ās뉑a` xz ~Ց'sn4_uw|wl*BQ}}o{gux#kv뻎Ẋrߺ 04s>q뾮900 00 0݃D&a*2WA_T!M/*yMM?#?r?*>s7asnr`n8~|́ 7ΣsFySr_>__}F<1e6%mH6[=%'ho#uolҦk [O6 fC6e}`ӇhcOa&O Zql8ӇCy*I'gM>m:QL Sx%O!=uk,تSJ;PwV/~gG'7vtlL/ƛ'`&뭏Ky?,}гF8\؊Ƅ"bc'q-}>HĽXlAIל#aQoW&b5#W"'56:70ӜZkZQzcC^߱fLਇ|ݹuÆU17yT [M3n}"7[bnKS_:)ǸLz;&jO:ʳ5[Orkòn+[8//a/1-㟿6U{5ȥyt@/` 尛`^hY~v;=u{kѓd|үnǃ'< [:6??S? G\M#cދi?53:A}# 00 5m53 W_)%_%997'>[?7~7'5߮V߿]/3A>r9xk^s3@׏n.7]Fw0NZ:ilϣ8U/38 qΣ8xGG9}a`f`>U?n ~Ql=mi^Wmfx3[S?Sst.l|G~(~ws~w}w=W0}n2؄!瑵}wM6+>}F#P7ٌ$6E|8B&M6m3o#/N oEoX ͇;t 3”y|y@h&Z?5`?6ͩK>}V=z&G5.<,nȐ {fxbg#7IcFl0Go~.s|hk6[ļ8l鍉xҷc9#rJ` s0=jUnm?FsbDkeW Wlǩwna btdn1`cɟ\Ila^a0z;`E^9vSdA˃-rb?Z^[xW/NT-I1X/΋xK|\BǷBZk1i9>ndQ8xo w]9/g>~pMC`hl͑ågny+뜕G_M̏#u'q{ܡOzғm۾m嵯}ff//C8ggwŵzֳl즕͞g]?~~뿶]ʧ|ׇ|ȇ\{_=i#Yu?w.ϗANߗ:IpyyyE܍u7zx(sUWv GA`Ǿ_n$؞s>\8 F7~7nfî|Y4m_5h&S:z6(XOvm9rJn`>,mi ̑鯘-O#VyZ_57fő>/k3Ѽ#X^tX :V|ŒWۑoΜ};>0د+>l5~|udkج^b,GqVz1n*Zw>9&^k$G~a~94vS ~k AϾu|ЩoN_nꐫ̱[lj2,gGخͭy3~͋m~07W\6喽q9cLܲK?볃S0g;OFv :%bw6\Е{>śxK^rsX+=Z>;xoonkq~{IO}v3Ĭa` ݘy#0pu`I*wM_[/]$Z/x[˵'h>w9[r]?2 00 00 (2Y 2昣zÎk%sH"|CZh>tXtU|+6&tx>ı `MN78yZ m}w䫙ԇ%>Mllj^[]5j) 0:ǓM9ylj8a/c(&_t8c gaUؚ\ñ?=._}ͩ6Pm>r'|ȓWckZYn6;_\|aF,D[lQV]#g0f;z}9 x}x2aYlr<Ú9F_>kks]ZGx_ÒKx m~[~z7K zMLG9&qÉQ|zQLq3ʿ`1a+;ZokO>|DtX~mkDmj'?}doZ{oKF\x U'[y |oԛ9ëi~\ rZޞwZq>=Q: 0 od2o8j3o[q.q7wv8<"zu|0IXY9MeacgY` 307ʜ?ayC 6tm:QoSؐ솉6=W06ؠ...|(v߅}6O41H~wce>b+uauˉ }HW76iDDRX0dA*[<"&0|5i31n怷,8y7ɤ/q'lsԈrR:/Wkޜ?} _v}#yƑ֦?. O>L6rF.tnv <vomH7HZd#k98n!#RNp{<ȑat-7~oq9n>d5O F#W}"rI}֣zaa+rrC99Æ%}9h#?zɁc6Ą%f9Z;hR)/8Z3|oN̑a`a*1ŎWex/ar0ۋyu\'Q9Z];ՌzVkamOus }f|$us-00 F;D;@6S!ن 6mb>Xůf65wƧ|Z|86k9{X0hMdXq\ͩdKWiQ/\1G[V)oqH9mwϺ?' ʍJ_L/>k1rwl,y8ʝ\֜MӉ-7KּjW `շOa`a`a`a`a`(`NF3 WO5!m"9MMb>zBO,`Olq'rبD 64=j7orcS*pcԓ]ĆougO lm7ǏΓ-I|yጭ5w>1'.6a+ecC,OkX} v3؞0Q]խf} ;Zs6MbY֝^r&զLy+sSCM,&ȑ#|kk:Gaӳ秕[~pĦחzytHyOI^+|@֣ظ'9S-G1[l˧S#P z{ 8ɩ8Aq%O9rü%yz}~|ؔ1a#Z:gï9~ _pO{z-0`1W~3ZGĭ5g|}y9 Z7H\ℿ|>"3r^\m>bGą+\k?ec_6?hN9Jw}mYa`a`a1J'ߵ[ǷNJsT$9esyT^;p^yvwxJ 'Mrd? g(sVL00 \ l&XQiӑؐl&?l<h3ۅT61$6Y9ϾQl6/|H|@-|XlKEa~x.$Gm[.x3>#|r˜-qqLkC5˸|Z࡚G%?+_Ŏ.?Cr_˛?Lc$Ṉ#/yX{78#.?}5˹|rZv<S,s8<7wcyn$2GO+;M겶\lb,^'rRcXgnbuhy KGe/'G<`vbUl|ƉYr+>\1)bv>8 c•/qu3 ;_r'-=| p?a;Մwc}lgK/.s-d#7̰mI͏a`a`a`8:Lf:uv*qYaEp·}[ѳza` ̍2Ws]a`8Zl2ڼH66"5ٰ4O][7ۜ%FرOkV]9 =yc}"Fڏƻ0ri/O͋U9fNgGp j'3N*8p$Uo6rqśqG͊Eg%q.櫞⩋,cSѵ0cK1|:8lU 9i>u\sV~|4ͅ1b/_Bi ӼI 6=>{6U96_tj#<୘`/ƾz>˟_b-99}]O〡ƚX[uk!?KOhu5XCZ7=n5 'm)ocM vcy:9qn#:ªn56R}`~ 00 00 0p [MTg-xx5ObsiNw9I<{< 00 0O ̍200 \(mpTmCTm`ۄl^f|]6alc ,|mkN6Gms0mp 6m#|v@o}t 5OY+'4V9XRcb'65CjS&a:D] [U65S,?GrbCcA~bk/sM^\|+& 8julFs̍e(ŋV7Muae5/:#b;Oģva>Ycl1gg^4X|57M -cOǟ 㸤Ckօ>Lq֮>QDX\E(~0Œ~o7?x IDATsP|LǏ޹߸ C~p@쪯5K|}sjW9;£o$9Gs`hĕчFp1<8AE~9gO'#00 00 00 \Un7*/gQW0N$67swϿZi΍է5f˾^00 ܜQ00 \1\jmnh"qT1ɶJ}mO#s'Xà˗Mk6TᰃQ-ÆF>Qns }m]-GKmIX|&o6 b[V qʇ~<-a˷kp ntqD:_Ţ?_}|j8˩8Ƀ% b8`D kʧߜcVWז/t|Ș9wWK-7$]Ε[87;sr'8> {-؍GliOq:n`ɇ>Qn˃~1?|Wr0g/.]s?uوU|aed5>Nc\5a`ezw{|00 00 00 00 %sY9X0 hcՓ lڠ!lSNxzOR0CQ*`#W8\6φk8fOlt>dϜ#[67n O з+_s6^`I}LOF6`;C_ 7߈G)8'aEjƽ>XX*>{kIb^>p_'⬛7aϞ1?sy'ꅥ/:G<|!|!W ؈mo Ûcq|#7?:8hN#acm̱yk:S7o\ ˩<̓rP9ˋ5(N籱<˕^\- #휁)sbѷb8W/OOo!iy2W{FHr0xްqۼ֮X@0xc՞'?0s=0; =rf^~rǵ#_xґj`wӧ3}Rs|4j[G3a`e5g;߈> 0'xOGȼ#֊ݪGo'j[syX8\OZe5UC6W00 \nF˽~00 "6m$ ­u6>lڰ͖?K" @zcDL&(?66zXf߆(>ٴIKn X6a}[pe܇rqQ/FP66f%q}> ._¾oEЯb<7e/7t# _$$maFMηr_ᯏss|40!jEſVٳcFNrT>ىLGqk.}6r}kNtT'[Z{-O|ؗggݤT;L9+V雿6zD?8slӳo]ы׸.js9lH'^{ Wւ"oe^|ǯð~`Lg/00 0pn =5˹a`&ٕu~w,Ƈ< ܣ0.:j'nHԣ.zqKߜW1rPXc[!Ń'#=^ԥf}yùHӑ߹MWp%?>k,]lFoͧaf J6]4KeFIvKl.~mOmwӎMk>6Onrnz|aOD',G~s/_uӋA`.=:qoNcCr :uZn|Xb G NC.r7Hˎ9?:|]Ou#>~#N {q뛃%NXt|2{i`zcus Fr^0Fp}0fNa]~I UrW?^;mv]nsc:ΖQla`$ tdcf#ic^ӱO}gJ8+c>{|6aC80٭q׼u V6{.0<Kssa ɁoHW.0̛#ZH5O86單ָƼ t}yc}4ȗ 7VNՑ}5y:{1J>קk͜lꁕ+4NH~=oٖ[hDX[%{Dt }f^}V?[^aŏ%{:~rr7h˧XƇ ?>V99Ɖ~6an_{jZa`a`a`a`n(ssb6#mk6m{䤷ƣMtbtE< m67ͱ=M634C|{r`ȅ lKLOD)z#.`h(6fn7Ȏ1S1`sMqؙ#Tm Mp#{kjJ!~Aϧ_^ xy2aD;aW6ǑWg/5 '%B=?qqa<Á< xFy|O)d<;q&ov!UyY~}qrv%0p} 6?a`7M{]Lǔ> 00 `7$Y<-ޚypqyE>+ƭƿ}Ἰu9*ae;a`007y0 wm~(9is:MGm0 jF b8.lk]o6?pln,1G'_kr [@`6\m~6AI` F\ȍ|OpTIȳdz5\WyxTr( ۜ|á_M0ۼ/OG66ູ-9z98R:5(&'y∇8e]ٷ^b⊯(֍^}<⊕RXb; "bM*|M_ Wa1|G瞜x+7؎X#pS#l~xě؇!u-krQ0֛МKqG>9Frp|̯kᅎwlM5;XtZl`q髕̱!r &{{k}>).t%~\{cى'G1^Eg&fxi` 00 {P00 00 /s O;8ƾYn0\O$_yG'oz ,s YsڇSG{͝k^|kqEέ5q/k=k c`nٿ5ap" |KlX&|lbvfngayٗopo7>_夹p5` 3tgbVӯͯQ64NĠ?ʍ9"b.01M7|8189c}O[SvGn\cr<Ց]j(ҳ#\~YscC߱z%֮\:k5cL:@\O4Ť#j̖N3>̑t0z1pKWZ9c K5]Cv戜tW\asg.p.900 _a`a`a`a`a`e`nY٘00 \yl(ڀ O }C ʞ@`cӦ-Ii6xRmVfN mt=Oim$ l/t8Qtm£7𑋾V$_|_ߜ0|xmka jɘzʅ×}5.9uxy쪕N {=mX+< Blrsq#v\GO#r(:(5Ņ'z2D ǜؾB;_SB:Tց _¶Z/lĔ;:6_; G_oƻqqA-zE\k-c `ך8(>{v¥g9/4 ߟG}xZr;nV[0tk]=s7F6;,a>-Gĩypt;}]yyy}vss膁a ̍2enaR2`ӆMG=Q7}nttl&+i#S `cgFcq`|׻޵ŤjՈpűyN!Ň_0WڍfCq٘@lÆrk^MJgX>j/1,v g1|zi֕=^m]bTc9;a k1ҋX7Fӗ*t|HkIך-}v≥v:bC_l Ѝ l #L&3Ggom98'X\ʿZ$nW;o' <qԘZͳ75/q启X5ҫ?OqIo6j?=;RC=na{؆6LZfkk}3\cb}'|1:< Gq8[ףkCq'bZ|3.y_+:-M9?a`8_ ӟ+^w~e9 00 \:kٷNjw^V$9,x9,NjyrVz}Oz>vy.5 (?k1 1>msMFs]ұY/mԶ9m>ϑo56Rt1)qX|H,o=;M_R͵qۦy:bo̥qjU-j5?٭ܪe0>raW-ɧXrb_'b)֊[C`kk9f 1:% gM5oΊkysVHu#L8lȡ9 s|&UZĖ3_vѓj,x-W[-bjG>a|NO 16OϞlDy6/lG9OY}ŀ神;v';#)&$liqRы׍;t8dc8|ipnC_ΑjgG؈xSΏa`+ˀ}Z߯wxZd^c5 00 00 00 1*Y00 W0>t􇷾[ïo_lwa*Q>Ⰳ=a|mrǧiCWl{2 T: y_S\ 14uUcOe`X;J I-jZo+lWŢ ͱ3qdCQ,Wt*ykͳnsD r0D,6I79G=%7ůyg_0cӌ{ <p9`T_c}YG8%j|Gyֹ198{v GLk W/>8w4W fxu#r'6;95jGĸԱX8tNz1c1ڲ7nl;W̱%+|mQq]nҷv2l,yv.Zϯ'wQy֚`'5o^0qӑ/ [,(_G3?8W#00 Wט~we0 IDAT{ӛ޴ա_]-]Va`8{:+9j9-ZNU(VzSgWys񪣸s(ss0`S>`!*n61)H6۠9B-<i2]81GlG|~l5}+m1l +_ml4^7n "G-ʱ<&q^>[,_Ӎv/lϝ'ZN֮3ֵQWNq+g}px?_<|C/DU>r1XM! *sײukyå+uS['i$._/|!^*~tVNj|X|WM%=W ^&y'~ q[wl:6Ӊ>I79KźuV\sn[Oݪ/NSZpsws˾+7v,a`eqU&a`87|E.R =ćqI}Rڸ4c`㫑.W3qX˟޼fcƪyԦoCUp60apˁ.|6aIq8`?"][6@X +|ΥN6a7X_65W?T]7Gxlela~k}z56VÒ9:`y%6W0 >No8Y7{ QZ Ƭ4Og3M^^ n=6D4=qN,߁tp؋ ZQ}(G'zv=l0lzLt6X|16+[cvyۘnܪC3^s+Wa%~=|=iÒ>|zo}p)W|`~د7/sVOx!W;_OP=<9YKI˩W}|b;”3|-?yzk,gkI t#{l,.;sq:K󧓯:ۘNԥ/<͋H%r O c]Gk$Wx` =Fp>֋ץ C_~Dtr`k`®K=\{ǑOg!;qKO _^8GUOzaG┛_I:mr$֑-_Dz* L?ط5f/?57!.\kXDU,>|Q1:`K^#00 Weqtg͝k O#۵ka`P'&=zr<".;Fu*'q΃~*Gs7: a ̍22a` `lצ"ai!MKG>lSf*hۈimS6bNeՇ6_h/S0ڜ/>TkK__|9aC[69:,z~Z9_llF_nlW|>ǯX/p/_}rHo/W7"+Fc1䨉!'L.$.:ϭ9c;kr5?[F>CDbWW+Lv(6}r?bh`?Q Lv0O,Xq[zX§眤#|:ƭ1{sāk,Q7±#S\1aWq~G&wĹMNq} .ڽo)o6չP\lT_um[C؄O}5Y'MU qY]r sq6Spji,/=>9jlv5vW}]>+j6VL9cz%وXf}Rb#VlͅѼsGnn`(?6k?~Vsd?h~%=OGzI7O\-!^NO8ƻe×o~ 7bWG焱F`+|˟ b O\gӯf6Z&8lw˚Xt/mN'qa`~.tcvGgpa`a`a`}b`n٧՘\a i3S:@_=('6Nl[jP>f 3r,6|arƻٻɎ s OQJ77^ ݒWo[l@+-l@A藤8CR%x#t;9_D|ui:g',z(.سњ]l=?l{8ӟ'c{f.^=BgO,NRz)N%[uȻw%S uz}-_)xU.<>oNr fNC|=GlDzSaob/-ذ[ogɟ/|ȵ/u%x2ۯj[ YƒG|y#.O &O֔9H zcsrK><\{CMꩱ{#r&v^ēZau!0k:s v⪋F>ւMvlkl=/O]8j_?p╞?la`ǿ{@⺮0z`wD>D~w=4#V7vيUGq=^sGlNmD,b.ȎOٕK}+}o@0'0ɣ'WW~=qUc~쵄Ol̫c0+^g ?,+fr=ƕ/Ys/W0\{l'vucgLʎ/]xbon~kk.Ťs-~cDc^>Z>[re/_5{=BV.qfLM}p@vPCM[#_vM |Mlsu9]1f#6Gk[RΫ>_>&\qڌ$۵pap?v&__@00 00 00 00 30\M0p<=_XUAtp{;X.)|[DF\P+.XaYlWOU׻_nzoLK*x >8W=#x'|ă_ooh?qo=U-gX]O@z8a=\CZ\!Vg|^X碵k-,޼~8>gh0=H.lX>k SL{\ko-GL2#ccphW.>Fem7,~ѫ>`{3O_0P0}ًf6֫l9W[k=VĆٯÃ]a_NUAG,6X5Vڭ3LD.=`oҩ| lŋ {qWqa=|GV6|>~>O00 W1F7=c6qguc3 &+Mv狿xcxZ&k=za`x^ ̃2ka38H9l}lԠvÒ<Ϧ_k"/9ѩC_v;I6Wk"wHM^|spɓ^*.1w&s5c%p}oP|^z[Wb>I5cn6r(/6`֍g|aGn]?{I܊QNɵxq~c㳃4U-?-a[#bAmox+;Vx$>M`K.0Hug[߼8{z}Œc{0WDW71< />o{P}R^b+ o_׀ lVl>gz@^Se#>‡7$Z-G0Џ 0p x}^7y%29ߎW;a`x w1޿Fe9:oWϽpv2~y.ƥC<cw1 ϏyPT< ;ܺ.z[4BW3CGq-}qˮ9}o6?bǦC/7s$[:b>{-_4GWһ+R{bݷla8Œ>5y؄!bilaMWLjX1c{;'沣r"jpC}ୱ껲7b*Fv0[\)fnN'0p xуϟ|P{Sj:U q5a`a`a`} ̃2X00 <֛ZrW sYO882ga %'laWWZ9J z֢Ӽ5b+`&]Ǜ\}Ij#c>b[#}>bi;^-nԵyK%cMnlłk5'sb'|/`hJ%o}>U o_N`9!3W r16{3qu)5oל|W|˧ԍw0&k&b˛}%.|F\9ˆ/<8$l 'Xe)l#00 \"v߼wsv?vvw ~E]82 \>㾧]r@w<俅yN:32>U{/UyUv3`-Z>a00<:a`cCH~(c_:|dx:tA"u>l}vIA:!l0W:5?p~ҋ+y%olɳ_ #l;`˯:v5'^~K3\kkl3soj_ þg6!=H` a5/>|o/.lq ̑x}V5{Z7NxamUmlWbZc"` SmQNͱW)g {5*q/y lٱ'>8_$>]Ga`4ܻAkn{O>}kӹ廍}ԇ||$#???s~0ϥߦƻsfvyU6Xy=x_>8@{h: 'a`t=J&a``*\}r8$lhj>;jn]HҁC9 No_~K&g>ӕ[-ɧ9W\+抇gka5ZvUը..>]}6kϾk K<- 5jNc^_ٍ^9W80uW8Hd6/(s IDAT6/9/_ƾa7/o _7tu͓ƷZ/C8<_87.eGW-숾XЕn>M066l*o@ٜ+?˥ᰗ˚C۵ΰKحkni_n ;bǮtӭyn=\o:`ŏ=j { 0 0pa ==׽U.=.{Y 2l}}3x/Fa`a`a`.yed= d5d@`u6~a0l}1R:~ߛz lAʭY-_z"ǰw M?V~yoy@gn<aSަjoI(kNY9Kl|՜+ .t|^o"6֍ <6l;W{1ţo]^ౚG5!/yorkj?e몙7>Jĉ+k3 9uWfN`<t~ ܍=s޺[<(W}j1T9u89͗,?bo?;u`C5vuIoG^I~XAM5?D4/Oro^jx0&p1l50|}ȕl;5G|yᄘ}u„Zj&^ޮõl⭘xWijZ<-&,9}s$^`mw:'fy9g׃.rc1G7W]ˇW/+g:?֗@ڕ=jSM⚇MG`ʁ!8W-\o惘p+7~#>#\ >Q}k &?W"GuIUy}(enM૾.u3Ǯخq/ذ?D-t]>^|Y L7r<_8|cZO߰Co}.]uk z͉+ ~}8jϖ_lzx 00 πdLw[mc1"}O>ez;}zPƽc>ߗo /++Ϊ~k*r:w1|1s0p |{rzN00 ܉?p*_`|sc_\p,@abΜn_bZj͕ȍ^'tqc.\stpC-|l:X^aOVlxlzqɍb1slүc]˃tOr*֮.ح>s]yxG'ٔБ6[zxդO_ SvK>]q\˅9N0G?b'/j0(\/|78\وIsǮ5CUG#$y>?i&j6O1./O7Ƿv%<4\[s5laʛ.1WLu&]/j{q iYbAoTt{rť>{)_ >s)b}=a`a`a`f`쇁aH~{P]?w2~)P~oTR~k}7o$uT?,]߼@ ׿!7f/ܰ{Ŗ7k=gG1A^lh(9ktoP+^W?WraXޖ "$aNc1FNr!oqC  vOuK7Iָ_Ţ{bfk%;?U8~u7vzy5{hԇ 9*n[j=3/ >j#rcOjME𔽱-{5κ:qGUqsH9VW{F 5%wU|AuTM3~$|NP5nOWp׷/[Ղ_}&'yCjq'vš#dWt#;Ę}k:Ӈ!ĵk5"ac_>V}}N~;pg?=gq O'n؛z%q>;2 ˀ};Sg%߼c>;aa0nECs uH]kXs5ת_έ}Uָ־fZ[? ϗyPT> ]&0pNniq@7}s|ChM-pglr'ǵF/<.0~;>aŕm6{>aGlq<(޼S=#^곁c\,ka|ƫ\*7:x K'`O[OpȞ/Lq/z-[5nߕMbЉJ>eN9c$Ĝ;ٟ>lՖxl4xq"8/kg^ħ+7_&?1ۃ#ƸWxac^W8R^|oh}ىȟĝqKۏ> qe^~wq zk%9_]:WlōWSKApfP-⺒hqnr1od/G?z|_]({~ݏ^h90p+|U<|ӗӯ}IMfy[㋑=g:לcb뛯1I/Fpgn|@V>\WaeC6#b')/|]5R<~ MSW[:bqb3̋C%vU|XV#/.Lq&D_+@7FIvMϏ^luu5_bSՙ=andNÀϗ}4hax`de o$N00 00 00 00 <c>1a_$)?M?z78<`!(ޮAv*&|⠂_Wo"U5854Qԧ.: S-|ԕN Zjǃ,"g+;8ɞua<1{y|fߚuwOn[zp V1V\?CG_8la-FwOӯYQ;?O>:MDpNj7zirǝ9 7sGMl-C\oBS j{w6lxxDQ=[K,xa/oi㧉^}<ˍ[xѷ?X <;X>_[LoiɸX8/6W \6j.0}n/ߕ&.c~FuhW<Ā*|qᘳ0§C.__֤{ώr'13'D,޸{?̳x0_@Ilp? 6c 3ſ˿oCtOqr[Ct,Sbg)8 0pW="C{(޹ù佛y*ֶ}ǡ{c]99GSa!*cpʳ:a`a`9'À0Va\:,ˡGW>@/k+t:9e߼:G^~JO:6,lR1o,^+>aءC\rG6a < <"=[8N;Ɖ9cŸoy: vq<[9ąCey“+?A\ٙtɇw·^.ي犳d<{6x$dߚ/O~qz<ȁΕe^v~>WS<+}F\ZGەCr.gfOo9Q=tG|,<arqz.;ڃ}m{'|W`^EܳW8#.Io-ӓ>\/:cv,GodmGCT00 >]Aai0p)94O?{7+'xzW{1xRy_pIkw_ 00 < OOoo_1q!'m}\٩JWb^SO6æ/ʃo8ll9[`#CuW{k— F\~gF/&}6˧9W6VSoQK҉Om~+\a~| })65 00 00 00 00 00 aNxAdsk}a){o@b]5Gfb' o\#?o tbC`}ً>!O qaAW_oV0ܽe[س/Qz|pŎ 7CW_~&b>l/YLү[E`V *fsKk+Nq'`/Aɿܽ%\8p<~2g=A~0qS?Zg͵_CDD..rj+)_r^N_Dl|yǑ+lM%ưqO/3؇֝>5g`9=aΈ_R:tH˦D;uamQv q7;t*bi6*O6 w:ĕ+_Wy\a9V#a:w+\w}3VyŖ_\ҩ/;9d9D|yO|a4VqEceX,Ϗ0~=8bCő?_r`ftbk?M_ 4O n[%Fe_b_h]oN^+78|E5:vraKǎzo{<3ϵ_,6tu˯g_|zӻ^{H|ˁX>Ys ^p.'.⚃/nqȁ-l{X֊<'{F@q$OyhG1~U}`CN</pػO։X l8]1=BŢ^Zr ;cZOlc}Zsa/a`a`4600 0\vw89'PNٜ"cxq`q0a A00 <;2ڡ/F뻲u!&{~Z~aN|vtH5a+C pͳ Mip!}X]qP,>n毊ˆ+^R~/~GشVهr+FU\Cj9'H5_Wsk.G+v\ շkq7ɻ=Sz9f^Z1;W\~Iu->r6&|W#Q<:ͳ.,c]tb^nk٘KLη8| pwKؕC5Ϙ77G F^s8jށN*Pyo'w@ K3lAn9p$z ?3sb/du8[,`:8DLXș/;c-ȹJJ,:sKohxV8ց`8't֗}RJ\8tr^դx!`G#rg_'6^nrNI\{kHyrM0#I_ a\jqNSW6[x l}u,4.S0#x>`\q |czx8'R}uU7C8K-6MZo=qa^_#}u+ig6OP~V\''&]3]*Z#ܼ'Gև.Ԩ>/5Kayɞ,u78P|}:'y3?a`8݋pa`a`ΖcdHAW^}*lU]cw cɶ&Sϗϩ_ũ8[9}]M37 10\ڊdu IDATM0p'|tA_ѡr8uRO:tx )re#\;L5!Urp!}p!w|{PN\X,>5Rcˇ?دjsИ>LW9Ï7cǼzՂхV#Q"_x]ŁU֌^^O=߭m<ӳW\:pllz{| X6p_3[՜p_.HX+b>=>Ӭ&bZ9}+|I.>C>}K̕ĉ=\04&jUh/[Slp賱/H8pR^r#Hl]ŏš'Ƅ7xsܼYdͻl9 V!70A.Gykq'&&vja5裏6\1\~n~[eȎ?a:㖝Dbo~Wr4<3#0py ^N_rྐྵޫ25 00 >;~CnwzͮM}/XTqon3X9jsHRSX|3Cl5 OyPT8  h:u˗CL}wxC^:eさ~M0tn扫CVw"W c'./Ʋu0;!ri;Sל|g~5—c`#Vz.'|MI|勷գ+:49 kؙOs@+rdnrijjW|X.czb _uM;|+,8Z}jb/y>#rcCG ' 0[_>=.As#}W-l/6<{BC{>ςjv`G/<4cxx)ҹړ{EL[! q \1Ls9+VukOAU k^,94c3~Ɵ`zY7jlumĤcOg{Z|6X;s/_d9dc?rP ލ[ laÂ>>}xoO܋{|ua`a`1|9D?.6ө9$yU~۸r|'kΫZ5+9p}r~zu00 \&ߞ]f00 G1wٸHl8}瓍y >+9dO6a8%<\56`9$&HƇ7N:Zr[6 ų<[b_ ?-G98<={ )/cp䐝ZN^n'r {6X| ~6ŕkXH}˵D]{d} UgAnEWւyGcu0>pA WO؋;UͳOؕcѭ\?8-=cJvVmlq5/z9xS?=|:;y.Z<~+|IOd{c "A[K#00 00 00 00 930ʜLn0p 8d$~ob!r?pқiW:e'}otWUCq5u`,wd[ t,re/^Ӳ 7a[~0ز'6ӁӨ~-`8#9;U:ˋL_|d8ǎ/1nqO/} <;8X\~`z>r)6#r$Q99|qߛ* y'NUkEbz;{8qsq9M,Qvqh3'gqzGj]G_ gJ>[Uqv)g_y {eLɟXcN.xZ~`ï϶Gbk~[HⰁî,^{\sGuA\yÇCM]T?s{\`ayF֤|đ9~p"<ZGaCnֲ{5SňKX\N-t k1 À履~sl|^>=2 00 ]ȿ}Ou"޾u*/=Wyj_?g9̇\y8a`xZ ̃2Ok=a`'>:Ttx0ԗ0c?~laOMv* X0`r0 ٕ]޾0ǘL0՜qS~v@.frV~l =ہHu6!+jZpe\m|aEL}X :,w-l Vuël6Lj#Dͤ؉ |;ONlՈGxl1{Nfm7Xa }xa^vˎ=5vIg=lX#«֝:3U~촆ګxjW^`oұ3#l|fOÖ7= gA yx~XbWQ_>nӫZ}^rFb{J|uy0 EĤV@]컟xPI/wo>1#~g^3y}1a^wme9W<դEaұ[l sd.g^~>u_vOկ~utN00 00wL]T ws߸=d.ǹy>[CUUUkmZ? ..#3'̀H$}_9 LҸic>5ל6o.[*ÄGk|>;7#o.|k~k^M+0 ?6?=3crq5Z%*nyw5Fʅ}{>.e/=ɯ-?y5/Nw`gˏ /rՒ?sq9Й3ӕ\ŧ)YF/}l%Za%a'ߵf}~)O[wg]ҋUmw H5~a+vyӌat|4CbOo졓pZ8ە!|k6B/O"~ux_9ߌ_;N?a`8W c2a`a`a`a`ΓyPA/&C_^sތ^_~b{ `jG^l \ogDn:aZU2gU oT K\5<`^TkU?Sg^Fa-I^rl<6 qN#H3_rՋ+t5 CMlر0qn?}f'?u6'uc->>sDLȁ򣗃|Bo>Ee6p૷\ݛ1&OuO_^ع7+/K+V_̍ca`c1 00 O~o$%a}[û-)֜q9պZ%9o+\euͩ.]yc?!*bti:@oAѱuo;\#/OPWsHLʁ _*ۼR7W^mzւ3njr.x$/sr`[.0LvcO/7c8rڦ_чo~`CLгgCt._nVBϞ/;Wc5y cҩ%uXfχx6O p }s[l%pu=!fZyKm}M\k!9‘'3 _1™ψ>zz랶Ή&|?2 sg=uda`n@vs=F71>ڮ9jl}+M[}Wy_81uw.WWgwU>>f9kvL>r~X9jMsRn 3f`9솁apQ#`:t\5̕Cytr_1f٦s5vZ> |6w9mF8r8 WLv͑nUYd9r7Na[ajscezJ'ˁ 隽1C#}6 "#nçz#l(F}⺲'jsىWm95˱3 ?/~<G\5zZMtOO滲/pᙯ:6^EXß1[1 @C^z" |jгj\}g]ş҇a`a`a`a`8{uӘ 0p x-|gAdo0pIRvjܛdHV>v`ls쀔9 ӯF^5χ=\oWƛHXystފDO^rZ`,oW6 ވ@a>\9~{{\U5B pckx#rT{гqݚ'&N=ntჿXb:ʁ> Xp }:Z&=^諍}>O/Wz{e2K}qÃGrCo,Qok.s~6^p~w\<򑗵V}%i9a?6(>j}gZ]N7c;U\lڟpq+wzsUpu_—z˭\qoR[2I5upߠWlqzLJ z[?<~ɑ}:ۻ8c#kykY{2⊧>a`a`a1ĿcN-Ż.VsgN+fqnwź .ky?Y7U?^8Қ[^j1s0} CؖU4/lүbO>S00 , 8X]:;wCQsX;5vPnprƁitى ^= a3a*;ġ)Z>h<4>ֲpZ˷5:/wu zH WП/NS0ر]b˅5=~-rO|q0'rG gaCjضɃ+~ yC +ٕ+={5/?5WMlU^Zz}^.᫗ li]%7}{|[~li*1pG8Kl>?{ čuf7na|0_‰uO<6xVzbo^n!#g9ŗ9Xؕ+я~r+k3yyowr$UWGa`a`a`x. Tsz3~ Nq +]psk{l<ܮԵOka30<5 a  Uad_f`0;c[5[v; ;?W[czF]oˇ Oز1l٘;s <b >0Cg1]9~aJa'o,t O >)z!x>jdg/$6{:=(7,s_%ak\a\[qӥză)N1]y{sasυ3Ndu٘/bЯZCKAaN>1&0jâ+9ǘyv6ca`a`a`a`a`eSkfr:u6q07opJw@e4`:؁z`CT9F1y#FE,~0}D6 8zBNjpdkwY Z U+~`ߡy}zKsS՚/V3cM|ZU7LW+)N\LcJ|@}N^6϶7˿=+;Ï:V=׺㌎A^5O|6~\ؘU:W\sr'<g+ }^1jay5 L07~,qrh%Q;<{<5q/ yES'㏍zprc uda`a`bMM-pj>^Z|r,w[}xJ)|x05?&|8l_-b̗yb|͏aޚxc/χM%kNo-q#l=d>z҃&r#>{>{:< c‡^Yme޺.{kO_}=`^ZH㭽dzS0̭Uc|Ǹ=NNi%}f1 Fr}cs=-sr1oaыcm~3Qna`g:kNoV}⃿y[Y}{.r܇ j_.{%yy-_CzM\=`>Bgq`86^FUp};yS{{J.ڏӋY,soWnla`a`a1ˀ7)W~s_mߊvwuռ[_Kr.dUƻ\8WŹ懁a`8%ߞ^2`0pF r s=.:8?W6}ǡf>t5pҗ[Fr5OOƜFػ:57WmOAGĘ}U#lt؜#rj|^|wp͆=>ȸv6=ne_]Ĩl #]\ Owts}U*_//k4VWWrbTkmd~;˅4  k[ja_͹zu٭[j9=Xt>0zh'r4`Ik^ e>aV N#p\4W_-c#Gל\د9G?/)79cw؜|`Wb7a`a`a`a`a`a` ̃2 gÀïӟ/~{__?oO>y/~mJۿ?O@k裏^݋̯=9;,:zaW]^~jn0.I;lז@b8%%ޔ@~W<`k]#| :&}z,㐨˛`ʭ˟ ?5ᄈvoF^eV|ʇ{͛1\m$Kǯ@R{"S;[p,jϖ{qZCeW3JX뭷9>^r`kmz|ѭo@?<5fz+fԠɹ޶=a)ijG=]nA[İ.]߸{x߸(8i[Cp KM78%lF ؽd'}`L&lyT66}'tlʙysr9GSNƭ8rpb Fv.|[raF~gm}?[??XQ)rL/ A@,APH*@"YD2"(E!0d0זw=vzk=뉟Ϲg}DuK\b9W;Ύdq|5ʱה0'K kkTLl:sΒͷ\M<\G҉Aꕯ|G?r>Mo}'o^wֵܼzu2;uq_]jG՟D`"0LN'|y߼z׻޵r'E}k~n|5;ol~v,3pսuß_3я~t/~gܷ]|NwΝ ??n#ܭκu˺ݎh9me7ݭNo=Ϻchk7b+ua|s[9ݭVco;Sg"08eN5(Pcزyņ-K1bB~WG$hއ==yws9ovG?z)6˿^.S5 km.PhTW,uqU17X*"Q$xZ+gCS`'YSY]]!"'sdבOjR\袋8ɱ%N~iLO#SbRSp+r-}k;ŦثYg-2l_|9"bŃ-~>ϑ:xpAdGØ%.cZWJ;ta/s )'g?ةPNO]6F|3{5}<>#jt꧕{(Zs} Yb c>̳7Ͼ5ewS,܋ Z>f1X!F8ȏܬ|7f%6[6+dĉȋ-3\h^<Ŧ᳝/t'<D9L&D`"p"o{un/|b)~#Y{.\_oEzc\W7ޗk}G?3;_~t>}VڊNV<[26;rݏ\vA?dNtlG[d?hlg?lV_7DxZ#[/6ɸx O|o}[\~f+Ї(7??e/{٥p}fof2x+>PHx*")L+,*xV$ ?L7Qѭאg8|V-Gm}b'?R٭ţbǫXk +. 䊁 C6s$džŇjfV\}2_q[Io)bas+;-6|4XO^ /&cW||%_>ďv"+uٿ޸CO{% blNwZ6/t_аasFo&O}S|+>+O4L&D`"0<JM(M<VS_r[&7Y#җt׿~g?{)$P?|Q{+]Jk^+߼yֳzӞrTs)ȼo?\򕯼/f?hto+N6'7Ďb'^ƿb' QNӊ+W"3ů'{ YEQ1):V 6g⃮X`2 tlFt˽bD.ɹgNM$>8=iBĩҜO>~v!ޗ˫bh-@'kFȼX>r ?|Z#n&+I!~8slyĿ5t+z.7O}׾vQ]r#!qlz1sT-oy˥(s:'M&@)[&MNG|!})/S;smf3/٠'=i>2o}iʯ</AzP}'?KO`zիp+,yltnNrZ+f?~ى&[Nv9vV>'oghP{n2ύ3 ;tpAc\0:hq1D`"pp߻7DDoG=q}җt'?[46(tJ.7lw<ϸw巖 h5EV7HPS(r/+*l*B3oI΅b¦=P76+*:gWUb.1'V|r銓ܘ8"2`W&mqK.?+Gq3/m %ͼ:3;9$ Y{=$6WN0_':ȇtœ xZŧP/.~؊ɦhUT/~񑘐u+]qC|<;|VaFv ]1Ykd=ˍ\}r?19Ȟ8`Op;;|);+~kG`'7O޹B]Ysa$'5O1'KM1ʷX5 +6>5sds^8?'<8Y7$'9!&v&3|kϖ\yK]j)=r|! f#x#“y<Ǐ?bFtY"E~Xp:aGaˇ~֙2Srk-Ƙm9M2yPLqz?4nI'Md4AGmD`"08pKWU넝\#p]3ΙF`tur.^>t+9?+~.í}F7ZHtܦks nɸfo O{g0Ue6w2dk/>cm/ld#9[hun?Uἓ㩚^ݹq `7i"0̍2#?8 9)~mE y#\ 1[,ln)+^+$Lso$ Ύ `R$u@9*v6h-a.J8Y]]<2Zzd'/dmAoc|cN[D独x,~-PwD傧7xdƨ⤛l?:Q2aEyLGLy?qz^ވ~|D7'b1n\Ii d٨06/9;k\<б!/>|b<;rv^$OA_d:滸uE'}6]s;%7ʓEFtHO &/(<-m63H?~ww:\:طG򗿼7,VIHHgD`"0tmbӱM;>pյNuLg߭k3s'׽/O>{R5ЩxJFObdKoO6T< =O>[lb6撢>T%G|5vtCEpdb'>-]}q#]>2GM^1eK+,葥g~gvɍO2,6Ċ<OPm{y1#:8׹Nbf+ f:Y2փ׊s%N` cz4n /2c[nfhd.<5H C1lŧ9//-zlΝsXG6?d-yWlÍ<}y{[SvLا'>vaMװ5YmGʥs<ϹkD|"<*rq.˟sOS.0/G'0e_8{^;{IQp8a@6CߺsDW"|2xr{ng7i-{?Q#XlvWpm68NaG;?L&?߸w\;tM]!.z5}k5w&___BszV_ޙ#ulkq//6Կk_ڇgg{ls"އ#bY؎E~XJ~~׼M1mN}oS)wj 9k9|<1NW%n74>^;xD`"pj 07ʜ4<PG=QG<KwRYG&r~R)*Ocb=McT!6GWpk]7,l9[e[~dM?Lq쒧7NJd]̸bd "r>Gۺ;4|1!/z6ɉGm(sf/} EE 66d`] VtdSrf~d58 :#pK饛,,;7 Kmz<1'#^ ]|b(&?cuN#G|S.[bsYkǑ.m2SkM[raQ~#Ð5!N}yhvr3ODb?tz:=h9=bxAum)\qb-?CvS4L&g&\w' X6&M:~}r_~xfe>#?zsϽX:]_mwmֵޗ~2 c3ι>ep`{aKOdxvğNoGdocs5\z'3)r=?/M6~t.xqvCrcٝsD`?is"08fG7>]zץȪ@>puk]ky~<:rCUƾo䛫X [g ]x+@ER5mt4}MAkh/c7._Wst}2곇ϯ#rcMTlYlv/_-j^ؑ=Gz4Fr-6+G}H~WQ>lɑŏ(N2»qeϑ "&Lc솶 6$ۺ_1:o˕Yynx#~6FX-/sx̏ʥS<ˑso̕m~yhyv? |G|Eﵣ1_~|γ/6vGq%k%|>3f^c/f%7‡ިۜXwliW^0eLoOvMGbkџ({^-ˆlR-aoHvWY6ӵyG7]5?D`"pf RO;>Ǧj׃]۬vux"|x=׵6#7<#}N{>2MO&#0wmL&"0(sTD B@|5.MBEt;6?b*DTߍewx}c,g>s]enpxCHk, TuNn Z <1o}ljb7*he891_ơ!!XWl毸ݤa% >nޚ{T0;&|F 6ˑL>}#~&*[d?3-_7i{RGy.!$ϯ9x.S^CΜ8abw4Hk לd9xL\`ۢ|!v.yK.1+~:\l 5C h/iȹ!_8yb ŏO^=W||1g+;~&lv‡][Hlzr ;bCrGGlv1d=鄬s_>=YƜ\`'Wa<W7D`"pz"u ,[ϒ\nw'?-8u52r=fu:uƮ\ߍZsNǣy`+zzClz=S:0YxzvƘvb3ݝȲg;~rv#3M8o$v,8l| 63 $fG5Y OySVw󝗂ճvD~ӟ~DY0؎*%OV!Nͯ7s[)Hr"77+Oybks\*㻁QNܘqӅc0tA ]5OnUEnC ~>s,c>H|]r1<=EB6Ed9?}x4lqIl䣸!SMN|<x$3<Ȗ;Ռ͉-}64h^GbġSr5YHOt:s[3?;b,sNFCtQLJ‚bMB>N Lv"Vtz ;:'˧X!zfxY_|zxSY~+'ç5GOc|9 x%w640gO&lz4׼M*ttnqC>bwNDV6Oބ̇b#O&9#Fr}?rwr !+Gzp W"̓[=e>m-J׸tMns,m?Go#[\_$kя~t'>qy?2~)>i֪[c4/?4ꮉ,׾[M-<ߤD`"083Zm޵_1O|bِb{F?9e/[pg?{SmOs]os,o+x%2/x V|8׮0vw5^_6>tFۣ rg֯zիmOesnhD1ncrndmv{$lN~ƓŸXhgFNp=0qȓ"sVS7@Ft5)oۗM27nViO{JWVx3kvXFU8?c٣3c!cm>c/c&l󉯡8EO6|7NɍG:'9ݍ0rOWd_g|ɚ//xˮc씃sJþ5lxC]#[\ͱY62+cX&K|lC䛜q -*Ǝq~uD᧍&>Ćv1mu.墈aIɰ!b6l v%O19}65W_l˷quHOdиŀ/F9K?;;!{ 6ǘ '2ń6ɉ;'To lboD&f[ږ ׾Wa{mo{[G\+jCav63owmFoL_ۙv7DtA$c"_x YD_{W^K]Rh)6q.d\w~X]z;/&E/Z6?IOZ4xE!va?@W]ow}ֵٺ:ybӼ>[Ggc25'E`|YN,6o͉D`g_uogSj"08MoZ\W?b{˞7q5n_c7?Ɵէ:쳗GRC|Hs!jxCC|\)pᆡ&qQq؜ oxl(l?$˗8br,.as',&jb\đ79~:җ/h2Fjj0F+ӷܼ㛼̋M7eN\|E,c䑸ɓS #lWVr(lA|<"ϖŷ>W67/tOc%CG:^07!+6l߰b0䝟bؑ}X-|E?~z ;=cx#9㲗2/~b?{t?uq~y/6n1fI{>7#ø_mq g?;sG>`V,+jWqSQ4*VPYnU%]i5[_ yuO Cc2(&ˑ\ycC^b`ʉ91e\aJOZA.8)]~w<;0ė7'|S52.hA_Lkd /~;;_6/W9m]6̱#_y ;'22 zv^|&g #Z#.y2m8: J9j6(ȍed$dl'GnC c#|YK#vsK_zɱ|þ#٥ =k٥YϮl굛#yDy,c:(N<_f09m|9#}}[!'83SX/vzϸ"'6dƏ&I@fow}ַMW>_-jj]7]o)<3 ޳Ig3Չ1#Ol>̵ϯ~lyFʧk3so>mmV&owJ[[ښ {:x7Nf w*/qNF?~ߍȊ|m?'S:H'g w&}|-է?Gw/ci4G{L~`Q>\pY`f9ȊW0M"+.;1]t)dEh+(=^|7Šɮx嘎c9T&xcahL}c4x̗|:ja1r)wV.Ni,v} g_C(;ldg 6}(?bć6/Ɋ<7&2W?~rφhl1G0 OM)_s8jUϟ_afLCFnvG"ftBd1SlQ#϶9z2&9's8>c>uDlÍ.2'~{Mm\,A?jM?vo鋛\ctOd8|\O95|c/>f>ڌQǓŮv-]20O?V:B׿$0M\pk_ڢ׵F`"p#g8$3f׊Sa"tݵkmX(B-i}]r;|-|[Ї c7э/ys?L&3q;97L&C`n^Sz"pB na]ۊo/S>pt|i?Ռr,|_?s;a6G+Ӆ^z_u{.ıbELNY?%POR²"1 xd03}Z6' |wqX}|(|st7 s[/7;I?dW'Q|b =Qb "+?sxd`S?``E+9kdy#p&ˆ84XV^x蜡K1eOĐC<0F´ׇ#ؐA֌/;51╟-N#+^|1 _N鋝^O#<+V2zX3Xt%u1wч [U2Ήr3O{/N+^eΓd5?Z}sFrw_X{Yټ7]XOOI?D`"08uޙ'*tl^W.t;-=\o?YZW]@׽nvs7{} [_La2vX]+ﱂN3:Oc<^poj-;oϦIDLF`M?W~`xnwۭy) X5yCy{Sm7}pG7W6¸'>qf-7|_\/)?QU|_Q"/V>0hO!F[:xW8E+ͺ*Z[4=ɱǮ\[*'bc|or욧Ǿ7>[ħ94vȱ^3W^\S\OFyOɏoGyun'5ƭ | ^ :ك ~صÛ?6=ի^?eV޾/nۯ>-=aM>>]6bZCw=y?fm]>5a#WE?IOf IDATZ2vm缛4ؚcmD`"0<^] X}Г]#\_BWUV~lj366YyG<>y?_/]1$o_W]w&Rowz<|n{:崓)1M2;gg't؊v~6ŶIDTA`n9UVjyF!ox|EQoR$\~Rs|^7ȶZy%_q6)͑k}~52cu4eG'7FϜ"xə¶l%LX'Wc~~?^鋙OF{'3Nn1%\%cAĎr ?G2|⏛ ;=.;52a#5}09Kyʇ8lĠO-24H 7N1[aG}D֔2_~>A#7/n<:{2F[yÀq@7L>?r-}9Mc_Xڒün^_~7/I _Mnrʼnbʥ/}16;}˜Bȟɟ\,w,OI~Nk;kWwWO}S/O}ju_}O~=hK[̉D`"0L&0׻%f7ٲ߽3X|npͽ3'׿O.ߖwVrZ6_4/yK1oA?q[2_AQ1ʍ }744IH(}J2 +5&cQE^O[F97Fb }2b+2#*E<[o`'>q# $vUC̱'wK2gߘ sb9>Ƕ\;l3!0+쐷n*gΚ$C~EOZ6D.UL[Q<7'CWL͉W~c<9k)>$nv:?N!~yv^^#ĉ)Gvng]ؓ9G޷o=a(.WH^?k&#2.vEhG1ͼ>yy>bseO|O>ag㨼yɰ7^~3ǿ5 xQNxb,W:Weu17d ǜx'&pӊ*~aȲ'W#Þ#\?{sW|+k$?oz\gmr~\gӘ6{ڔNtmtfoy睷z3z߽إ+l?LysZ:旞Fb$o Ԙ/ ɅL}ěr ǦAO_p4GM^_Nɋs*_Í7Ps߱'Cֹ\0y65$}1†>Q-xG^[;;ʓ-ya> <n&_{&>0'; }yq3džAqOύ 76&#g_q4#͜(ZyS } +VRIF8lihgNNNߑ6T\O.}və3Pn:b.61sc.-ʇK<&_.;x#g3yrtKgn}'똼yq8j|48/>}s%?KMoq‹Q<[x'ˆFFm&0O|fNv&t锇ؽn(B&ɱ}rhBYgČ^|vɋ9]*`RmG:͉_\% u#9|r=~Լlņk( Hٴb0r%v<}maX|a^+Gv;Y<5:ͳ9&o|vdkSo"0L&AEм>;?3i"0L&D`"p28Ɍ|L&ǀ"0R7BlpAd*N*\*V,ŧOS_3]OP8\T|O.m* Sdx.qK,j6y{B]O(Oy{z$&YOg=xa'X }D^ 4.|Xɧ+&YӼab r\~lʋ}8XE6\`Mye+Kc_l;9 -xZv_1w>х>_xz'CG}]0K.u{I̾ylZXXk^?ŗ+}pɟ^㑵;LL͘8yM |{z xƯxu4vɇ)N^[Z﹭/ۭ/_|:ٖs1?"3i"0L&D`"0 |9QV] tsym~#8WlZ|[zh39|}zl&_C*2IŸ|`7v."I^lz hli l˿3d;#~ڌ¾< 4^WCe.s%{v_7G^84Tl_l >qIxb@|ft4~`?vd5{lok(?D`"0L&D!^=h9:}ۤG ʑ5~((+ɆrSle3xu$7O>\;*7H#(cN!6XŢ! ϣ|3(hC&ܲ1걅ϧykSc<5j>銭F=~l:p犕 >{Zo,O4a}ι4cʙMr-VcDndclɷ e%_LmF({d``.5sb9oܼE6[[_^ۈmqx|:a%~DN b#4nrfY[0h](#̕^l奱m/r/zHoS6D`"0L&D`"psɎcL&D`"0#07ʬ#2i@)5}EHKU[raO7dI Ҟ.)(7RAdE|GU(hTZ#1F!ƞQV 7q̳+b y~И,2&/|䥉 @)@gL)fm3-1;i gf^9\pn Ok#fyշr*_=l9 1c,&)z7yB|#..rTxyf,F{>DO4܉D*+[呏u苣|%o#quDHn:dŸ#~y3_x-v%ϦuVq MTKq4L&D`"0L7;uk^ײ{}'1xzMD{G[S{9O&Nn71ʉhXl7_.M&F`nkDD#bM1\qSfjxZJ}ƎB~E).Yhb"hK?yGPYG> 8x+VC.>Q>8ɰ!TNdÀ yѦ8;[6)7czmZeyd^bCz|9%~9SMv>2G?dGp1@tx +rb0!o2n"K_ߜbG9 v?'/`glh!vM <6]iDg;Cx%]~೑'*ɟ +_Φ>ڴC915d/2#k8œgG{'\e[KO,%ÙQ{-O 6ӆӍSynd2Go˅|o6+;yZd#Gc|2j39Ma 0Gk7o`kun8_=^-:cG ɯ'w' إؚg_?:ȳ?y/;a/r| yq^|yXu2??ppDG3oWv[~G_`_=.&#N~ /pWv5/]QDķ_yogwqۋ|7lN}rUl6َr1lnkG;&{;1e&FyL&g⫛anuM2xZb%]ERW7*4c)c:]G>>)xbU}cEbsA=ү̎ vhYCl ; ˜<r)f;jx gj7s|}6Ŗ.[ȑ|c__tZ6(A&|BpFV^l˾g9?χ[y|y]ЁB|;zK\>`>(|:ja>_1FΚx7Ì >eNc< kǾ\Gxأ'm-/cv5L&D`"08p}ڭk4c͵^묮+D`";Md;V[{S }Se!L IDAT>osc7cs7WvS|&_cnbF{O~x|;[d4.8l%s*ʧvtw3&(31i9-]P3 SE3Fͷ#Q6;~c|hrk,gOa7J؍JcTrh~]|5v4O>s,_|k;'`^ߘ*/ckLo=EПCĈ(Kg}䠟LvāG'QO#n7Qd`]zȼXs8;9NyȕG5"=voC2bB);|G*vklHqB}8˦>5$slGM8'/ 61?Ȗ1_tG\A]tN?l~~銹з.d56Cxg% 柉D`"p=1 S"4/^zZkD`"08ZTc?L&D`ei"08P(**6ɦЩh)t ~“!:b/uK-o}[˷|$oNP7C=--'?Y67)#OO1U <}+B4;HTV~lMCrdi-b'o|kx 6铣 7f/αp\Nzd4w<ĨO =_ ? 0@&ϋ.h9cc' Ll!Ŀ_"| @l5|r~(Wvٙ4LN6vI;C*xL͹3 %gw=\ٻtȮ5 ^7L_G܉lS%Nbe:NyP ODǶWs;hoƱ&uݎo/}ek+?vm1l3(szj"0؀an*(7_cebEPEbN|aIE.S E.t;͉¨q7tFa)'ϖ­©AG TŤF$rNt+p@KO,/ bC*ˮ< T&[&[35yyqZ~b#6:ȹF-W9Qrg뀼q2Fͷa~ȴkAaK_c֦ZCahm4| >{tl^td_ p'?OE^' ėyIl!'O̓`x9&os;Z옧&C^GE^ӵv^[ )yv;?i"0lz{ޤM׿/| G_^5;o8=2Y\'|3i"08yw*PqD\&v2g~౓sa,b/^aux/)MxMf6ߊ[o+a/sD`n92L EDM frZX!Ԝ(O}vG[gB&o>~ulw#/>ȳMho%b5';qTEЗOdČw"6g5|>׷֎:泙s t úMO'K˙mtXn!6r]1·5e+96xjƝPW?dj"}نbD襋}dF>^1Gy9ȣ|Oc#;y('>y975FgN͗O~/?lj'\3=Z6dXO8:O^GڤD`"pPߗ؃AVYЙOmzuf\&M&D`"pz 09OUYL&(sⰞ&Bdi=@ROTvc֍j2 .=c_].=.; r]9 r ph`;mzf搜U@ͮjg=M6kϦuMwή6cdc.us_:m"okpa>gq?a\k 9h~kv1Rϼ&'SZ8Xvj_ jcacNNkbp svڸn=Eyl].y&ҋ-mB3櫁6;>zO]JMpl|zu]b2.bʇvzJ >(z.8olk4]/LW ˗~oyzu^4s>xZZ`^rGcıcwN|jXc/#:ZswM+Fn׆U >ja^w:Сߜ: fW뫜C.G׆׻np5X4x4V M#>yu{(0 +_}%pt6z߿tާ矧??[(0 \~u/\\g]c+n^[ck_u>yW:>eFU`n޵(| T6mlڀa%6e>6:(QjöpC7 Fr86}NX|pҍdU^mN˗M y!^S1_9zY GsOO8ٜkq#|jĖfiN| qm;Zć?n|gt??jw^sNl5=q.|rS{_GO.N^zɧnxcbX>|jr˫1&nVWz55ws᱙6,c~䢭hX#nVps<8Aîy:|ɋW5:Bs#1vi6V#em+/]~ӟn8MnXp Xsk潣>r؍+#]O8!&M }q'-hzy_#oݴ4tCI;6M]?bI8x}mO~0i믿8<~ú¢ .]d 6 (nq xoq~?3ҹFQ`Ϋ;2C>Cz,;'\k:Cjy NO<ku}ysjǑϾ|\? ׭;]ǰFQh|`MS6}YV3槛kx;7Nc~q(km[~8h6X&ƮcsW?k<|Oqkjboksqiba⪵|͇MMË+:˟b5|_ut^|u6p}3e3.11l+7[7rh1n&Gȥu+p5|v] ֘M{1|W̵~śǜ]h۹G|+jU30e>aeMt[n|Ѽ9/vcK7nkzS#i`>g峝]~MWbjlb^#y}p!ocG|563 (0 \~<;3'>LFQ`FQXFw.pFQ`x ̍2o (0 Qmnzzf0oFMJ[߇jmVm_=E[t6:s}RM~OnG68{ofksY>Y`Q p{B6۔\}jטfW ,i&8+.FcW{XS3c94tἜ8?G=iGS\b4]7pAk_2=%EWz=l N_my ly]o]gt']۪ 48kjă895_,M.Ż>0@+p |\$Nr ݟJSpѩs*^X01br;ek_w8wj;}y7?>(0 rh΋1NO\c^stv>F8:fN4p ^ Np`N r?:i6s0/Ooz8:Q'qp>T7~ӍfC? SZ/5hN´ᣩ7gC: >txiLX:ikN}4rlZ8^/r+7\8j{xvו4c>φzӤq?(0 (0 <>c>2mFQ| cqL.2I+YԸ/]sYCwqXϾ77㐹Sע.9FwG<;h6AO؇6.űt cv6a9׍㥕ӑMI+6_x:~q #Wo nئe|Yl+UG6G9|W,yqs|bkxp:'[|v/NYm|ċW_srk6x5y]G*!6,Z]|׺UlkSn8 aъs0w;#nQc=:i(Vڭ<{us7p[]ϼZsX]srƊ?._Ü?u'x_ ?c>8ăQ`FQ`Ρ@A,vcFQ`F𷒻}1mfR[(h amb{@_f'Lpy*ڲL<Ĉ(!m:jrks?Ƹ{j<=Aר~56^ g_Wsܬ1NL816:a ˱{mUoq59tvlq6勧XO0okCC obækO528 |)=]ݭ9-p`Zr9O~t׷r“[.GO\`Ӗ<w`6?v^歩4Xbx}D{ÇS^hÃ%l,^A^_khZ '/`3/V^\l7:&hnvk+ԋi }=/_n_EsK4?q t5ښw/ưjj=8M~i=)'|Ոf|| ta] 'rNFQ`FQ [TsFQT MRZ싽TZRi/cŮ:܇77ϾSy cbպOpMo+wh=kŭqFc+`c!i I>x6?lIi26Yi\V7a۸m8GcT& 6NjS8Z9qjSaZhO n԰Y[|xJa`_}0՜ 6m@oG|xgS8ugm6tfxy>{F&`siW8׬.[?M.\usXvp-]n޵hkn9lG`:Ǻ>ϟm .0)_Vrˣx+ƹݤW^m͋1kGu9صa aZk_)z]5f̦醏\ 164h qt5€->njcO <7gX|^9?&+#G8R,ݵ_M@Q>j\wdžcOZ95 oy\Us97{صlƚs59Ïn|V3 (0 )ǴQ`Bcwscӛrx?﹮7ic1 eޤ̏M)`SӇ'mr:ڬ5'رZů A=,:[kCYjuy1l:f-xl5gO{~4G5w_s<֮:ę7nX]Sa峻^k>xT\do#\0TgS7DwGsaO sn'uÃs\]Λ_[Mv˧s7#o9#:NMs/^iX `au>ˮ9wXQ*֒m^j#_׉9m8 IDATX4>9ʑm{s0`GQ`FQ`FQ`FQ`FQ`FQ`s~mffnPnkStF K< &F9W?,=ܞ5"zyDiudiCr9˯T,{xm.\Yc5-\5H/ &n|5l=y8h0g~V:|z :kMٵ_Wk/#Mpco[+y'\iΦ.0a:2G^1"uOb|]O1f'tR+ϟoG哋9].ǰw˵ &^KuS'p x|<:9iS|׉u>j,& bA<{΋h† TX61Ys_s Ok.G9&NjG#.Z>X崡bũ_>|o~O|il^㯋w4W>/4>aGq#.،;o>ͩ7|;,O.VCyYQ68n/1.k񗓏̯vcNǏ/<'L~4v4ik?Iuֵyh;$VΖjb1ls+q9qO7p Ļ9y͞&Kucqā^ւݵ&>?;F~8oޜ5HLyv‡ZƋZ͉&XOyZXb[pqh⪷ʛ<M*}x#n6 -+;n~Ygi(0 (0 \wk\< (s+<MN6m^mfd1gvsp'fOT>{*x+FG\pŶ9j 6MP.Gsp4sdO!oݞ[cOqYaэp[K8xW_m~?яG>冩0ȮSg}s{YɫVxx{9:G'lqKEzS -`\^{#1ZKjqu //~1 ֯]5~(0 ܶxO~=t(0 מ4簿>rS(p ̢\̷)r5cjZ>_rዃi|]'\qjUn .l^ři[yDcjpHtPgc t~88'VSn:mX|SOĭu'ZK>ws5\n{h%rq[rpe1j&>b\i$.p\w4C.u5Ҍx5Vqjn-U֍Z+_CmrջM]k`^,"eMlu .; ^{mv~G7ίݬfLy4[f-uI׮O7Zco:\Hb,8>`qz?{ko ~G1mًqy8GnԓWb9L0\io(0 ܦ^޷_zz^3mF[VgR7?woީm4|8Es|Hs}~7sw+Zϻnϛ{8\qnYrNr_<=.α[oFV4(0 \>`!槍6<Ѽ_2͉wdk Lk׆beV1uU,[lx׹6rc`p;`tn᳥Eذƒ#f 3[ݘ#ܵnh6Zo^N=p&qc\?ux/&IkEƟlq7mVrCsi88aQҶz9סq7nqs|upbpp8V5Z\b#o^||:oNc}/>G7OjdќM'5x:˩OMt<6a+>8,&h~(p x_pc]Q`nYs>y2JOm(0 (0 (0 _QOQ`x ؀A]lDlmBÛ'xs6#lnژI6=!bmyntoS50>. ]~/_GF|!g>;^4#Gn9˝Q>55h5Îו\tmitl5l^«Rna#1x`U?YwK5v-^:&;}xbi5Sn$]z9>kT7qkI7SbEo:59u㖶rAG+i^S =F~ai|{ ƚ8M_]s]I# i(p x6 <|6 ס@UkNQAz,7u!u=$)FC9U㡱{NmpFQek(0 snp7.]aʅMet lb蜝:G\M|%^=t[Md>:kr7^_7׹F+ݜ]˷Zajp4֩oVkrڍ ? ‡?* 9B/xO"^N>t+Xr6:'"hnl.5Yo"p\pk>U|nHF n뱵3ǦrGX5њ5ZWvI^ph[b8zc~8n ptl Mhtawm|߽_թf,r <ם] ޵%҇57ŁuvyǹkF~^}}?6և|jÀ樧fFQ`FQ`!|6 ץ׭e4c^ǻRcܗ7Sr<x%yuuy Kbun_>_19ڭ0/g> 1 ̍2Ǩ5(p $!ˆqfct|lXׇ0m|oxB -μ&le4kZ+8lc5s;LP8f; ͸MUb뻍-~bˣ9;M |夋8b#Lakȫ .٫O6:/N]-ٝųts~IJS|\\5_Mű;&+/~:?M3x8ϸ嫎̉q=,k.GU|Vb5vqbƝ\ךWNsK:Ʀ|Y| w. sl<\%N3`~yyp#c8gw~Ϳk̘勯s}/ Neo,.ގa6 (p:i(0 (p{ |.v fowͧQ`FQ`nk`)qD6b=lVm<߆gmJ:lXgMUfb/V+gOpt ܜl0uM>3vOlh嗃mvS{{1kCdO7mXãVѓ;?Om$<ᩋȨn <᧮wxB1&O8T"jx9K83nRk_O?x#Lܜ&|tuD.y;^Î#歍vsb{XCk [ pF.Wt.Cw]orG׫f\#I2q_kV'--,ǺuCW®[#/6lhͧ/5o\3gcO1&z]|9~tٺxB8_ZMg?ppzRNOo5? \qZP1fQ./qG4um5qG)S^xuZׇZ FQ`N[O9{i(0 (p~w4]&C9<1+7\x,-qmNqOÇbo}sO!:FP`nu(p&l"efS& N6cmfø6JmDkܦ)<8gjl1nST3\fؚspk vpM<|tjW,NO#|,/^|iɏ r;W^n6:G0Ԭ#;7|V`hqԺ՜s8}}72Л8uÁ1ްuyG|4ϟoc8WNP'M?0­|rU̮c68+&5o-ó^r^otyFnX.k>rMWxV8NjBNv\(A]j71AuWlŪWM.˗0G1OO6a !vN5/^ru됏İsG9̧ n‚K+c>uőݼ^\]wMQE,t] aH|[tt{(0 i>{C73_4ތgnTMoQ`FQ`8~C۾þ/o4q] t[Zi.cj*& l1x=]~}NkF*07!I'PXb3VL0ņM5pVrwi7|`۰!ŧ|Q> b0ns yr9wsc[-x\9b`]Άrti쮉_c]4iȯW,1ry79>pf˻gbŅQ rOsq`Z[^vnЀMLׯĤ'|[y~ N7cX8 9r;j8av:/g|HGgߍ& s8juoW.t鵂7#89p' X#Z;'W竵VĦX7į9bXO+؝;p`;ߌ(0 ^}M*nZ9{y8s|(0 (0 ܺ}uN}&/{(0 ܆smT1 *`62mokmj@jcǻaĹMI=M8u>:iflCS<~lP̧\9klm صQ._56[q/n =` G؊.Lc9‡?,~mOP# FNx|m C =WHa ,O4 Ŗ˹8\0]Sl|Ƨx[cM^$&u)'jo>8sޑ]\fkA>rZ\l]֌MGmy-V׆W> 6ȁXk_ >ꄧ9~ƚ9lt16mM aM c4l|)Ӽ.p- c>hصڱǷ|s=lǺjpmA75 qeY/]o :lua'T\yxkt7کkO>\6>Ts8 j:kf /,7Yoy0F-ũ g|lyYr/?y>;Mv%9|u>ák `l}իW4ő s sXp/7{axVY7FWg;5i4,8ŪٵӍInJWc y㨮|7mFQ4 x&M<3﷟>LFQ`]~_zqwVݹ9ۧ훣ߎϩ}k]vKzSi(6eަ{ή@l6xںjSnC]6:k WMPv~>6> rT{:X˖?aᥫ~jV}0&O9GQ`s\ (N)nF#>: ~Y6C$6^QksV' Gm6YeGwp 6Ļx>pò9 #L\\Q`N\f`~G+c8x;0tӂ1 .?ԍfN]mcKW<BX9p ukÅ|=!eBkPk8A{'WߓBp5?!/"??=Ԥś<>lf&N/rCsvxZ*9Ԍsk)&n<9{|_1#~Gk-SXZ6V#qvN{5}~_l=A&ݚ!>5s6 9eΡFQym@msIvttFHqh'9ĵi؜N m76?_Q$c_@j?_՚WueW||Q nC:K7ͦyc8].^m Z8Ƨ p1'6Z-j K1'O3fs .^Ŝ(G9A[O+L7KcÓǹ5[\<䈳9Q47Q91rÌZ\4ך#>׍nd뗟5W-W\7nWp znai PR8=a϶ZV;0v=w= AΫ GzÉr(t5ϮYȅ\̹D-WsnnT֒tPa5:>bi뿛X{OjizȘȹa2%mc`Dxm(0 (g~W>/.߱ݎnvOyg~*Q`u~ۭ>V\]3bZ㏉eC4!?v)js Q`B>`(p PfCdm>}3aN7'?m3f?^; ;[>6EawdŮ8fWWjs|4~4';afy:wgXK˿/}xbsԌ5+70֖rf._~0a3Xa&ĭĴ+_rk@󃭛OC7_y˽by8w8Ȧ˗]|vz{I 9MҐ$aM5W٬e5ܼ7.z6_G|qP|ᥧ׌93Mm5'9ae9:~qS{iǍ0_]s7x݉Ѫv77T7>0-&Ք6Xnn}#(0 [ 9砛e֟ ^>o~}TGQ`FQ`FQ`F+1&rFRmX) ml6Tuvq6Q۴h?6@{'%!fs&*?Op,T_._acNpԯXz=~bcoT15\u^j!u\j R]swŇ.]}X~sSoIu| %h6FQenk=Q`x>AE\laoW&Cw6?lڲٸwοval] .m:;jjbplc6Ӫvmhر\a/޸M)wƮelژor' 8>U]pScg1zq0`N;j=nO8Z|Ц> b|:_}9<9p <%^s\9-qt3NaTWռv#;\/VY'\W4lO>ZCxqFM܌bsG3v4nN~8cًk0n|,C5+Z5vsϸVM֜˧9(0 \gd?k|[ ?R(0 (pieFQFcQ`zl0jmhmzML>m@lYmf/ZPlSM[G.zB d>6j>F> Y0=0zJ n#\lji_yۄn.^l_~s6z_',spn#].Okf+';I] ֻuCp;0pGxjF^SWw]]{׋vR#}[Gs8!g mÞB.k _\ha7O>rsͫO1 ^COk/cW{% ƹ5ÿ1IGiiq5nZg9SŏNꐇ ya#O)7o=5u95l8u)45@Q`FR誊(0 7OֹQNy S`Uۥq.m`T˱:?qy: 9wZ7Ox-k6 k ̍2ڊO(m|hRo?Pۀi6mmq.]65am?;mCcm ېhsr—_Mp[oX,?ʟ,Gyc`1٨Յr7fglMt9\ic G.qOCjp[H<\ksyqt-6[wqrE7\r!ry!GQSp׺3~p]'͘>w]䌫u^jߑMNb7Q]^Ls jxсn9m aB7miM,…/V_rS.~0կĕ.KR?:Gs͵ѵd(kƼ|i=ƕ^] k8k5?(0 W{?砟 FQ`F[R:1KcsCtN[ -:V_o^S۪1q#cqWNø\NQ`S]fnFQQ릩?D4g샢އ_cvlɒ+Ǻa%eqqnSԼfM⏃WGf,Fl+y~o3|oבora^kjG0aظW|kjr:8/ƯV,^q+Vm|km;80 -~q0/|goF^vcc_cO.:i^z4G>ݸl2¸ZIrnlk/f4Mcvc1Y0/ᢳc3Gln5X\Z:;AQ/yxrs.;Ksnvt 4|K?c^4h^WiaŻjs1/ c6sxO7sQGQ`O~} Q`FQ`FQ`FQ`GQzj hطi҆MKfM65s0櫛5=E=f)^=Esp4O^sxoƮӓws|Oc[7ϻW5SÆbZwr8‘jQF j+m-/^lR/r8 |+uzhʼn;ٜ{rüIchZ#yq[S|h}]#켧\$ikzĺ+_tO/:}כFԂ<0/'J}ի .ƾf/nt3_~s蚑Hsm̦of~]K'?ٸyzOqOVpQXqx)6${キiu O,t0> 7<_5eMԬ)?5gKϮqc{ ~4KϟokzZ MY ?(0 WFQ`FQ`xg 3^JMZ)ᡜw\爻9>E[)Q`8B?dFQ(`FM6lHnӳ63ܴi_nֲaoF\4|t68ۜ~H_/nprjs`fxc]l( ¶XNc67.yx:b^Ɇij(XscMڄΏ&x!ֵ gÎ3ZSuւvcƚ&MWii/x@ng8sj#~ƭs9zafW닟Zp聏Xpq^7X65SwCfBst/^n+9|sY{nq[cבy:^|ेjZgwk5Fm!M5έjuCsϜOq]&\jQxq1³}Vtm&7hrou*^0ū8]ŧ=;-kG;NFQ`FQ`FQR;e=>E{z~C|.8!]c0Ω^q}ńqL T8{éj:g9Q`Υ5\JOQ`|([7m2Wmpl巎_p`񳡬>;dkN+pŕ+?lwQ(ns~jQfxT$ IDATO>Zy1b8ol\jiչ lZטy?szlqkjҵ]^\kl|vpଋ><jvylZ;SgWsXќ.Vx~r1+ΰg椃ut:r|h .Ws0w+pq/;m u |4~lF؍DW>7ߵ" 'vc9ݍ1bN\-NÆr7?M~6h|pӲ/n;=ɅƴQ`FQ`FQ`FQ`FQ`FQ`_Q~}fvnL6$^6i5acnc o6$a1[6@mZyjsO#_l6tmv$O'*'|<]A,6'aj8^䓣uU |+oO樶8'?8Zy僛j#|5g jkB^?|?l) ?aÇsv 낏qU k0`CcyA+6֡k9\ 8U?;]=uǧ~4&p\da.i|iΟ^ƞ#|/_ܸѪpMqKKyy8: :VQZ>۞B3O{O0~ӟn5{'S,\ CNxy"W5x2 n#9~qwծpbuMOs.N#<~_oLKk{Xt~3m/Q`FQ`FQ`.Yhnu\Om_q\Z9w>Ϋ1Z8phz= `sMQ6#ʿ[s|"8rYjS cm)_/|0Ʃ&* jU]@MjQ ~pQwZSscG0I7XrTK7M3\ 鄗}pl&yQn;ťsZVl7-濺̩C.~r!ٜckoZ⭶|]O֕]>8Ԉx7A޵k![5Z_Yȗ_׮z೹i'._- o8ՠv7ΰ$:g<ݤ \v|zn^ĸyn͟?/?|D3rZ9t:\7a]\/t=5ÚЎ__#V%~M'l#|gӸq9=l-g|u#9fztc5.~nեӅy}TI;ph Kw:k-uvלZNQ`FQ`x9g˿>[?3;/0 R~9l[ujǿC9=))sUާsj8Uqsl}v[!y cw~=)v9xPŭ>}8w܅]]qFkPQ`N@lD7o1a8 6P!؜ Xyd|vG:km03^k O,-?#qs_]Z#cv\9c>-:?BLI%`(l.DD(" ҋR& E D\$4iҀ%|^^;sgޙ;w֞wg?9M&|8#'.q5'KWgr5nnk1a,^x#cWZwt8$''>bG,FW%&2kk}_?=2l#vmy2t";l~ȋ17CpC{(e#*ɟL&D@=7Mvց_4L&D`"0L&O17"(<)WxtULB%ysaηUiO5|hEPO`Pt >5\z2=1T4z '&Tl&I\'txj]z7&cl>vXKAbr,Nv4~5 OVd*㓓+:{ CO^1dd%Vvف) ȁb9DS3%\\:lȓpg3}6aƚ8E|t%#w|'<90 O|҇Gk!o[؏싅O1sG|HFtk3?ba˼@lħkg?aB/_=8K<0?3d!/fćcׁzdW_'z-7񍗼lh+`^vu:zÜY 60q%#71 2tZo}:d̉6|؛p`^uU'-]y= |˾y{+:„qVZ&D`"08p?~Gso<`}h^Fhf?-nBvs{j~nXg7?7ʤ(mf"n3ƶ[Ɍvs+ln~]nܡPvvơϹD`"p"eN$D`"pP|UdtXA!eT$jn];#EKv|Ȉ f0 %nT)S5' dgKqU| -;0P;KoWsͳ>y''Ѷ_]>؁_1Xl)J1n>;$!6*w,?|槢2]`*7:ŭJu`?]E垜+{g; bD&#*.c#";y~̋W8E6m>;cGŏ'o}ql'>srY>pkĎ؀v11==5NS? `|e,&~k[.x_GЋq!F~]> ;ⅳ<8lPrpޫi:}pyXVd^auH={l/:ҸȧVuV~o_+ܡ0IfO&Uo"08Pdy%]+㙧_بe<;l(I/W 5f_AX>be/|;x$Wpm?UdŤ,\HBL#\1,;u𧉿Ȋ l<2xFc }|hs =Qܐ'?Aɮ7Ϧ4t79DAEvʉM#+.z/^pG }v4r,8f"0L&ST0{Ÿ_ז{)vo^AID`"0L&D`"08B@ARѱPQyBmEIEQHO=Z!Bb,m~zl!ZnX}ɾ+[lV85/@mvU5uC+rxdl(zZhHo/'vғ8O+'nLM:)?˦8䳾1؋-m:ܓ"9[Ȝѓ&6#t⟼~D!}d[; $u)|{gX-g ߜF@1_LOEkÕ'tbwy= ?)19!6z2>ͦbGN=D> ٴuž%y1#kǾW~6Sv">_y1[>419wy VǓ3ݞhc̆k]^Wb~D~F/|;B&c-}e^_܌#yqW|e9{>^wl"-}Ї%yqY?mȳ+Y]hb Oqo6odħӃYyA|kt(/7:sk}aN/]}>DtۛWu']+󃯱i }qЕK\>Y\Wd˞9d+sⅣxņ,y<2٦|?eN\|5u/wt<5rqEZW9l5z+j` o<1#͚"| ǏxS?SK, &d{ Ò8!SIybK>|Z.lu9,1:grgu!.r/0K_u9㠞W_/?| ^Cbx O?3eib B|AHON|o5SoĝMs&"OzOTa<L ~ɽ44g'MN -lD.;0z<[G_b7 _nD`"08bwr/*r+fWrɣGɻV7Ɵm1rc;~(!dG=<2(I~#d蹶Qcb*6LV|ėxf؊8tü>^l[)'lIA~8 UdeЏ_lG#4zxĂOC 0/V>}2{6}iaޡ }qwXѱ.0RjůW-96ᙗ,ڜy}|quO,[>l#zl_]+7i؊'f55/$d@?bԒu3p ?i"p*#{פD`"08uDp;| 03L&D`"0L&E`>QhzI¢BoEe %gh`Qتxol-r yssg/A|5qoZ^a%UW-ʅ a+}<~#9Zqɉ(/qCG'ySaObh38E{zz4L&>O.{󞍿qܗMLvI@K1to&;vu#dYlc~pݩ9S>s<|k^'SW0Og)*z+hvHB_EqTQ _1%+*VWQhUhMdl ^!co<1>;V\U%+]&WS~w ?S\lG#Wu[<⫰EFũKxʏ-2[cm7'sփ>{a%]G|Luk-w%լ}?G0Gyڱ}qKXc>ؤ&r9d/?y#Oʅm}}^`aslykVsɗ+92| +_׌5zfG|o 19C旬|?X9xkC|kd63FX3;Dޡ |dgӜ"93O!-ffHx9&_ra k~9lǗ,|z xda}8;T>uD97!s5lc7;s-&}x&&cF>\8W&g"xzn}2 Ⱥu}וl/d53Qd'Cyv~%^c2|,G4H.^#x`ko'~1d3?b3𠛏5\;PϖZr7;"6'Вfyf+F~4we<ɈM`3v st\FCم7ȍ1ZOz.' W=ď6"/<м+pe1r/&Ghvɸ'|gc'Kʆ9xlFlC8=v&MNEY =WɹOgD`"0L&D`"0L/]ۙD`"  )_b9O; !(ە,foL6*(jg]'8< DxBq I@ IDATRAї-c~<'(`'#>6gH6̊xĪ<ᖮxN/nO'Ljî>remva29k/kK&;Ռ56Qˆ/q MW>`;<#ozJ<х+r'[Y &g\Gֲ ]X ɗmW|[<y.`ӚH5%#1{jr92Ȝ)045}$_$cmGqXKzA,4D ID`"w^=zˌd"0L  Hr8wV8onu_cL%;#ﭰkU;YlMv4L&\D`"KZXWTQӍ£¥Xs#)D*U@E dͧZQllEXP˟")}zȵB4\jb'ȗr͞1b0GNaE&uD?BWcGcWg3^W숎>Yd^laɺZc~Ē֋<0N,{Y2T!_%O|3٣GNCxu^g[[yrJ>=a|qG7{\ Sd5vP_;|N6<]61~b2glEl3 Y<. C*mlMxkb!OvĀnxl;@Z3ڦrj>HmWos 4<l9=}}&[ٞ׉D`"08x_'v D`"0L&D`"0L&!0lM&EEOI *ClɊM 9SA{B* xJXҾ]ʇzJZEݞ!f*z2%3$/Fr 9ʉ?rtz9T7'W6t;W|v 2 Ϟ[+cOt(/ɲ P<6Г5ȳiB~.E\b!'OEwc2\aċ׼M%)Gv ٰ9de}]g] !!6$VH,Yv]b}Gl%J<ͳ.x{d{H- Ml \+v2/՜LYl s,}{KLd}{>'9e,[Oa &o { >plO#]{ꬳx{R#7M1s`+X~o9)G?e [l9W1۟dx"?$nJ^{\{֎=}$kċ+<G#7&7taeoOg9lئooN9G 914L&{ݯ&;&D`"p#?DFtׯ۵cl'=m=7DvN{6G^q,M݉D`yPf9L5 >LVDƊ!XՇ 4:>vCAR_1"> c|銅]d"lNU7?N'>4]dWd/>_m$GI=2c+R&'N94>%'_0wuLɗ/^Zw>a&9c*h`lBbp1ҥ.֕qk<م/֚ ;쉱=WN|NY>~ym?@#KW0C}~x ʆ8C2tPp@\uMq ξ91^ 0w}#~>ٲbw쀏›uo *WyϚ"9Ea8}ʞ|.'/8oN||CF{H _՜x̎$1Y~Z3p+.{Vt`LOrzL#/1K16ώ8\s׽91yͣO?gӘ1L[ c3L&{/?=-nqK/twFD`"0LvCnP~;fcގNIJ6ľϺ[9V~wĸvpJw;|/5:XEw;X2;f"0L ~~l6D`"|X=\˷&gvۿ۫}c~%Gnt-Sԕook=lyOO.>^ k2n^ n4+b7STLONxH鳝 Wzg;})~6Wb7>|kbӁKsctoY xwGGxf!CWhsaW+n:Š0A_+}{ɕf-|:E<(khm0\h71wq+^r!Wt}3fK Aˆ]=:͹!5fdSt,xO^{|kk).X׾4t5.f2r Gߡ skljt5y+9;{k6;a χ1cQ<2^{91&|ņ+{ɰ‹ё[~Fmn9>x=@/2cMoM\ϖz sk؃o{V׽V׿b@>Yrn+Uzvr_w]ou{{w{+E/ZVZU}٫>=Hn&@8,!n"0\=IOZf7[>D[}sCЃ>zs|`۲{Ew:Nַ^/]o4'&D`"0L&| :<9E4|{]v}샮ozӛ "O򗿼˿\]5/yKV/x b\?/š|ˁN"cO'$ co˥"%~OQPV)>TtǓ%̳}*p*Ve<䑂L=H>[RhծV@x ?xO^s lkz*{; d9>LJy7̉AU~a| #XH}#ÿCa^Lyx|iF02ol'r b`מDrE{b.GN2Fr!]}#Oϼ<:B(䚇SO|=yzx$˦ƞ8уGCt5ɇx͓Ƨ%n$vEf!]!xsvl#tLt88{rr1#/|쉁;yrG~H|ɋ<8"=y{|;"k gO2˜fޜ' [+v=eFm_#o{C7WW^ykL:Ѓ +'#DZg R{- `g^.tyM+wſXD^]T`|_]=^FGwu򴢻.|+MwlAB|nw[]uUSߵ?,_lD`"?]ݻόgVD`k?X]GI|SZ~{[:Nm}/vϾny[6u՛>g>|voo` `z(ڎ̺pxɜc9ZldNw$xDwɖC9g~u٣?GsIL^HE`ٻk3#^pABQ䱏}s] ַVGbfP}]=O\>$_Ŗo< _X=O^]|ū=A+MuG?>[MY6]d'xI!a1r4#5n 『"&}ºbsaW6ȳ/_Vl㓅'Yv;Yc2CbsY_CV +~ƒ A:W\bY}lW9s6;0{ss|p- lEŖm|8# //6Y1CFlr@:D'WWbmݚGaZɕ;{ߘ}Õ1ѵnrd|ڣɄ!qw;oU=%|Chϟ`ui-vG?W _<>?9zpξy >}0Fncۼ ٘]#'>bBSd_dń؃;D57\~p;qY=iO[}~vwkYH'4vHƾ~߸<ƾrSbov9˾dN?__p;,{կ~$"{;s ɘLIDTCg_Coo.O 7>YooV/~#~ Ox_ٗ{ N'qH}'84>s泷y57:su;{)掕Us=1w=g9涕(ovGDo7om\So"08eN5SZ<vHYq[o(x,??/9mG7]]}wQ{ֳA͑oW+^Ok70)Zj +tAs5+~ ~GPDߵb9 ShM|+d1ab(O|ߵ~ƈMDZ|96+(xdZ&kty-(/=0kQGxr c5<m3VWgx=HX|Y_*rm/z|o:!\Qt@[1ZÕ0C20&~ȉ3ַY qeKEoΚ*GXNjo,> ֈ?~Ż0W_>UD)wXI'?5zq;>csj}K?y2_d5 b}ͼ+皿lgy).WN],?~f#P~~n9ob{ eˏ tī)Itml~ɱ) ]OΜ"_ [G_ӷF鄗Z;6'kŐ[>>'i@hxO{)rdO^3fCOF0o ]=%nU>lcNT!G_챣I|UH~c}yA|'~@߼9ز۾k߶)v ?6g67Iyc;Qp&-x蛃8fɲ p#^ Cs{T=Oփ-z]5vb^l#gD׷$FMnreɾ |~f˸d~rJr2'w>ZRӷƈÇMˋm$ք>E1YGzrI@b%#/ _,t7ηu7'k1k-v5n1Ib{$2َ׊/w8p@F[?k~⍟}gCғ&@0&%>8$s8<| Y腛|u^wG=jw^OO-݇o~C:o{֧$F`I1SCPjHb8R ;)ChP>pvvrX4>SGz=9?pj:4x>%ާ<)1,)2Fxw7Y>Y)(W͈k^0w=d ELE"8w]++*"ȍb#[ Vȱa^SW!ߚ ~81߈ f۸>r+4EMdyT8lȭB4+f?8mrg+豑mȅ [;q0l ͻ^^b5B4}y/4#=O~hϏa9.|6lvC 4'cG}yst]ɑ QV̧d[cq%2>}~Z6OqP9<1id`X }W_cCו~!dĆ5E\|<䭯y}`.?5.]r vk~b&rqX?yuD~??k$ffhG}vu:4¿̇+9_nf=b&̻q]o铷7.F ٳc }{%CF!glI@?GȺ~c[t{nk_}|Egn9h+}Ŝfˣ}OgNL&D`N IDAT"_~ e#rpŦ>?K.d>032fD .X7ԑmܾƔ<g'GZdz,9n~i4_A3Ů|ӟ^}_ mgu~闖fiz 7R`Ud$?>K_Ңr[r3Յ7~8/|9(OShTd).V,2_<|}srA7[ :YݸCdw؀MO#p̑;ov3G1׊CdFxd#}؍瓜49dŒoW#sd5s#&v11V9\cizYc{L됈9Wa>{rǓC-Y2!ۿ|s2t͍q8#`.a]Q~<"vAmu"A0QKXEP|Gƕ`8)>I 1I&?=ŃU4?'6>¯J/|<r' |Ӑ2ba*96?bf}g‏1S)PQvÊMc1"\!8#yk굆٠'?#6K |\\OPP ~_$'Q baAK^Gn槃dC1x-lf?$#(&bS>Htg7$fv\˗.[=m{ƕo9ñx{bǚa]^-bǦz>b_{rėrD>=|$ٓ`%+|ұiM8v9>Z|0m˿y?9.g_,_y:ɾ}Sb[g_zZ_g?y9ʘ.Wo|cY;|~"g}i6^ϧzjYlɋapW.v Wbdc hOB~xŲޣG~߼߽ޡϺ?hJf_四׉D`"0$?45&M7}v}s'Qz7Pf&7Kތ.lu׻U!8mF;kXWϩ^O ϑ;$'쑮^Ƨ؎4uf"0,D`GPF>pӝ<7aq~.?i'=i)E/:ȯ" |Hq#Fc1 7hnĤ c7Q U+bB-OWa27e %y6".]|EQ$K͉)Y#:l**􉁌"1yd^ç&lf懮t1}؄OGX gC >yoₛ+ys/Wp 3{ܼ^HL|xfN#숏#͵d> #8XS%~yŽ-[L6Y6Gk1Ek/b5c ';%a2fM2&c__%Gx Gx(Fѷ>y9.e;4f>j'5y.z/9ț $xSb9{d^ <|,vV&6b]ŧ [b!MFNaȰ79v6|?}qG۽|闣}a z5C]"rH);.V7Y>`_ 9{GmM4zǓz3OԽ<~ߣ<`yQ?z޷ܯy`?qG{+}{d+ʤoڗ[Q){.ojID`"08wвs}!>s{0s?steߺ==*}C<1AUOMgѻ7v֫^C2~Ww|Ż# P )]'?}A'>׿v{EHч U!7M]6&gܵC7YM?reUˮ92,>yvGJ6]W:*?;nʲQ-khG<[mL~tGGL&Gs|v^WH^+Z7uZ>c_ Xz볯o39|2PilӼseG{h(k.}qۇzto^ŢOß9^fa:>,5;4!vֵ5ʷxc˷زI8`?dSxg.=9AaEoxr-^'8ɗo~ߘgO'v2&AG)&}qGؒX}zZ~複O FmrP䶷n3+HV_w=hyַ6amEy{qC[J#uJw]v'DF="N,~Ol{g~ҽ7"?g`F:̃2g'!jC&!|COz0|c_!&5}&\IEt4ބzWLĆogA#c_b8B1y&.y#sɋY a#.CON졞8b+a6GF|riM׸"5;]>i [ߜ5AѾ9!XW~}ql-6>ڿas˙1yxyz\a!|K؇ X5;⑇v6͒V<=ķ/#{xDz~[=q[o\\ͼסQߞيhԩ(]z[g<__^jML&W\Kwq/o҉AreM$'=lw_8&ݏnoy8^XWcNi! [-'M&'yP?O6E@4f};quE>O$:Dp0PC7e@]1lWTpQ򁈛TEJ&FP"n@pPF<>L'+6<8#:Yk}Ȳ1'~W/7 vȄQJ|y?s ๒Bq2`bLxe}- Gbn]Ɓa_f߸kzar*I69y{v_N;7G֨׻x®\76]64<> ?l򖇾l;Ov].04_ ޣ~%^6klFfGcǼkMq!*[lf챣]uUE|aχ1~c.H?\kb>^$qoE,ϯm'8(c~]f7~-^ޫGnolFݻym;[=sJo'D`"0"~}Dm3ڊ϶F7r_5>;ީ1reJ=}1|7ogMy'>[sVor>xZ#Yߓ!׽֢ط&۱v8>3׉^@ǿ/1L& sgqFӜHg}2`;΍U, 7ѺV:{͛"*C4}O,2I\s(Q|Hy􊧘?ۮ"3_g=} YśZ.5_c-'>e7#K#;ŕ|AWgM\+X: e5L>آks5akSLG!/@)f۸xċGF\Zh.b#codŠLy?iO'-ǖ-<}؉5?x𐱸Gd\"hq5=s| AəfceC*w}kxd5ڒ{Kq5G&0wx6fGLdP3/1Ql&k,NsBZ[WqǾ<ӡg7>{ly:+(]I{.66΍gguֆx_ӽieEݛ'x~t2ݛD`"0o~`F}2"0`47ޛPf;ߎ~fD`"0L&D`"pBO9O86&ᷢ|e:}_x菜G~#Y]r%jcū⥆*W8uUA¤!CMr,TSL5RE|Y'k@WoW_d|ȼ'(_aMcr vI |VAו2oO,`7ب`NOWvDmWI$G>lKP Æ8`iyk%8#W?7۾ul%F#:xv`9‡ mcbїFkMcfK^glE3o>9܌5vؐ_ۓyĎ&$Eq~>`'.ag,DlwX^罏rd >{|9;D|Q}Rlbdok /v`a-7e]+v#4>y_]kzm s|ɆÍ C >ryy{:=q烼7Ƈ?lH_|~0gb|xY[=ov~o5> oxÃlN&D`"0/f7He`xofi]x"̺qn[;S]޻xc\^!݈m~Fce5(dv+}?vs"]NnSn"0?Xig"08f~~a)j3|fK{)t{s*(~C6{Bݝ| N 8HקXT1V!҇$ W"cY|ZE2zƊVX6G"1gWaWUc\Cl?:FUVAU c\VU%C$q8-6sTO=M.tYa%6ZɑGA|A[՘ױUOO`A|j=`S㓌a{a6eOĎϟ[?xMCzeXا_Iy)ޓǁkn+E|~ͧ7[wxBC#X!YqYo:ha3.՞Ҍ~w9c%aQ~r~_ZEsx}>Cn-ٞt LN|8lΘOt2s8𓓽O|\~╫+9k'k6rhkk.[bo.ylfm(;Dg/彾F|h򗣵 /|?3"?"k>^:HuJߡ/| dl&D`"0|vսx6 s6>DwQ]^X|h3Jr~3SUiy%VHvƑIv3,uMv9vs/ޭs<淛fk5){cXtOEg@`0b7i)$p`ʗ兽[77?ks_-yCbhNw4wz[ߺ~k) ^Ch2]5T6w3`i ?Bix*N&c.7di~61$Sχ=cL<m}?/dGt#Yc64h?@7lg/,zb|cQyW<}񲃇\k&KɛkY_i F|ONcsto.C4uȑ>ȕ=ᒏdbOkiFspxk'OcrdG!b5ʹ5ȳu(lgwe0Ɉ-q;w4sxkDlrOَcol'k[r9nj?]~4NMlȘV'O!Ɋ]<1[ҧG~.(]ܨ|#0k8J!?я^t?cӫ^e/yO{>qox/]c=kOD`"0L&/vt׾v_o~$=AMnw[cpϾy߾nYC݇}{c9L&D`"0LN0 ^~"ysV׹uVw\ * eEVFآOz<`g_|+\}/~G% IDATWb_tE+ao.[t]<17jg]C/3|@@){'TtAGDޓ.|OC; [aS ***QÞk z'hg?mv4qWl&?>۞VW$˯1y1 *hrŨϦ°K^07Y~%oal1Lx 5Y3C{J]b+ /,`]x#|zO^x͋ vTx&;\aSzoM[W6 /s/%6jM/rtDAsgm<lN$V_E~r>$`ɇ>0dyɍ//hb_27=3XֺS2#'ޢ8>Ӟ+_eXOWwݗ,:}Rew*m)|٧>-^e?L&D`?"|Sc8QUXU`RTBn*PWJ=M ݸ)*SK1;x{+grQk U,d)+|r(7bׇPgdɏ8'C$*.8 7ˇv<ƒ [xc+u+O/l aO|5x2G0Cly5<%/stώq}2ü#'ʍ&ٟQ~O|9{%g8+626^drtPA^d鄉uuP 4{<|m^Ξ1;3sr4g.@xk_:}9#_u \#w+5&艉]{_pJ5uȎgi'bOca;_ѯ+}ȮS~[aXЫۘ }~O1(/6`>~GLJ5eA vߜ‹kb+| H,d5_tyW|8;Q7ONl|7#Scf`Gx=t3%Yx#=%H 3-$춫 7PFfDFDfd>ҩ{9{:7"#cߺ?9{{OX0V0̵qgҟk9f^b0ɖMњc<]ob8.8szZ6#͗C{F^w) ^|צZdyU]+'kxk<ݠ3 \G஝.lt5vx894XyO/"^Ł{r.8.yx;֜&Fįk˿_y' |)AYf_9߷V?O^ϻ'mym_om1m7,l-OeۦרE|6 (0 Sq磟gM~fͻ=ϓտۿ}??l}|6Ӝ>i >MFQ`FQ`FS`n=F( ~|畿||98KGc7n/<ܬ> |ݠv|,ٛćB+p]QZK"0|RB+0+䲩8 ܀\WL 'ɹ.O+|)<šyᛃ^(&xjtO֟1S8b~XI&]T#_cѭnnH&q;b[ç}u);,676!q`GKa yןOS{X غ~wnqdlhȇVq7{']ي49` g6  ]'ՈN)Vgb|//ZO1{]aty|٤CsnuB;^3brkL{Ok}&7olsi)mq?$w ؘ>2lp.rd'yw6t`G\`k7>p7`3[k:i˧8Í 󴱯W|à ~~uӟn1zƏ.49g p<-pwrfGk3_ :K7nܠ;G_~ɏ.0c n1׹#^+~䏏kʼYkyIkknqSװ\7@[pwG(_{^_/u8d=Mkeܬf1p+;]GG݌HF^t~"Gl O'SUl͉#Ќͱs]ќ˛t o15GF#x᭛upӜW/o`(0 W0n{UFQ`FQ`~ZS ݼ/1..쇎}|p\9c%rsD5b0O_x)|s+s\?:|ON(pF:(p @Ԋ }y[϶c}Vt^[mș _)!{vŶQW趮3_].w˱Z0gv]mIQ-rhƹ;2g,t_^܂,o?1ilֳ1ǎ>4sbw ?[̇ͷyk:?Zkdabt4'o\۟0Zc'/Kɫ\9umkl >.`Yٻa;wI8l;\n22X5_sxsnb^>]lK?xl4:j֚KyX8\94/p|Oi(0 \n=!y/{b(0 (0 (0 (0 \s0F (r[OyPNOs yKB%|WaOB)"fO(n[E*s pį~]<ҍaw.^a_ǗfIlu# ;c隿uR\c|٧!+Gqi~Os0Cg?t?yLl=sOab׉}lׂ9iUXb68TA?ʃxlŰn/Ƭ4#뮉ϼŋ/9x4g7{θe _Ip8k|yE5+vbz=)!gϺ?l.?klᚧ-ƴ6fcGD3\]n&G5O ^隥/;kaІpܘ Lp5wMCwl5xR5M3;>*>0I3nrקܘfD OV}[,y({z˾9zBLC3kㆻƇ/S=1OFQUO/sCsx|'(0 (>nun]*c!,c?moXa?T^8ڗ#}kkׯlwsVa4O]8'n|P/G;-M ؛s# ,7R(ixn`_|`*Z\WO#r0eLK4Zƃs\t4]CZZa#6'p!Xnu]䚴C|\|'9hn42ws7S%Ws`/׈f.]8˽X0qO|zL+^3Wզ1ˇ&k.l>N s]8°.:>8`&ƆnMcG r4/ LXټX0{5;po8:ҀFu<֛f>ÍW=j]wbC/k-cȣ^3  W~{s fFQ`F'9~\r9GQ(07ʼLGQ>lׂczT_!mNEɊ vV x9jي|V3fk^ S8ͳm܊9[i|8lŪll^cǏk3/m vk^lxafC/bck\j֭/䡛wn>;Gs5vΞAqNq:N9n_[k/Q3o9çˏ8`N6כQL8[pʋM{Zy)?6`|eZ~Ŗ??Gs0ͳM翎58qe-[,4L\܍,o^>P&kכxxn}8\Lzj4u9:qS<7)_7_Xs#^a7FOk9~+'sFQ`x 齱1/Y}FQ`O>l~ϻMYFQ`FQ iu89 P@RqVWhUThT8UdT45_M0~!U/= -}_a_Qؘ˞"?%|m;e~1ą[SUCLs8Ӭlhda~ t#~clVM;f=%M\ⴱn)S?p`mϺ'N}Gq\՚ _<~\?AYc Su'h{r|]׽| ˜uuOpv|X  ׶X{҅stheM%oO%zmg|sy~pk,Κb9g5m؊-rƓ?c1i7byO/M iFKXV}K#?ܻiO;(?嵇y68+ <1!6\9/^\[c õ-Gqక[c/Gvs;⯷Egؚ4.ּpg{3 ()WcFQ`FQ`nWg])uߜy_][>ͭ[I6ܱ\ϾkGQe*07ʼ}G@Jc|a^4KIEOݺΦyc}޹b+,7uc<8WuThUeyv8+:iNsċ|v+p]*5XaÍ5ca7d/y=L_15cO,}ؼ6 XdVݴ@Mz8s`VCEnH.& fx{7~Sxn:}vcќkő|]wik GVnp'YC_lP\|u끍W^w'g:˘/\~/<[:>_8bwmvC 骱7C 7AF!{mMy(M"i7<޾}\ O8i4}5vpk|M+-1ՌEO|/O뽽-78|쥜f=^|igc97]Gn=zgGQ`x x6 (0 ׫@}'\vjPZ1W_}ᯱ.5tQgwcf78_͛scc6/5]u`5\ Z9zZX& <"m?sk|oׅ:YV˺nl9O>`~plV?XZl騹F51ډ̱qs uk IDATxkM] 1,9s95_|G=,kbpǿyvq'sem(0 (0 (0 u+~x=Gko&c(0 (**:;Q`yB5W8=BARRTMELGD@/a]Ӛf,|OP K _sv)V O^EԸO Oč8KEYc>fN58w4 YϜ׹B*i l{6?|=-"{X0<'Fxł M5Ok. 5c98x:D6x;%ܛD -_ZnנyO>`b]l\45=uÑK9XOINwyńcuO*6|a9 Slsr6{'8]lyx |3FyiL+x:/BǟκfL& 앧V,HuV|G|pŇKs== &?C74:Z`Á6勃?ub/ŏ6xZ>>~px: n_uڲbzMZj{izx'$ >0akּ5pFQ`FQ`FQ(w~:)8iRPN>\}spٗ5ΟK]Z^cڅ^GS^k/)<˜(0  ̍2(0 5S]n1?36f{yzO׎_rIQ< hm:a?^0^߼88un_ˇ(0 (0 (0 OI~ښ_r98!(V\>+Ρsph:^z5/}iuz\9sQ`x: g?tFP}R$CYs[3"jOcL~}ck|K\:.ؚkγSa7zy¨؜6`uFG+6S+|4alZgSnӣy>Iņo9:*x?ڬ??M1] Z{Zm?7c_kOW//\űZf=ܘQ/ZO#+*z* ~YlO.Q U?/{b*ZTOpL k0qkr);8k| 5\5뺸t M`` ^6uD[q=ze\.1Xrxt..j;ܽ>Ӽ<.S^xh[\4&̻0'ƿ˜uy[ cGFQ`.Y?+z?e (0 (rk>mudnOf/Nߋ4\qiUc{z(]vaxFceQklGQ+Sh_vkV*PǺsEPLQ8aٳլq*f;c t5_ȳ ڹxrYٰgy|qALsxF|pkزQ9 i% |ʑʵ(6lq});GlZI+WGQ|KAܼ5-(]gxswk\|n]'jv9Wk8rͶk56ٕsc^rɾ?]$wn7NҾx[ska 6έ'&]M/%4]_i+=;4c`s,rqvޘOqqcua/e^Y:_vtKkϭs(0 <F1:<g籧(0 (p>-=jތƭ:}?1~zc6a쳻k>o}u kzvsY]\K8أ(pYF;(pe R( v>Ty_Qѵ%p_`g|`Xa,qj#_[qو\c|r4^&ѓ&VcgFp kvX.~Oq9>lhM$ȣbx>klͅ(f{֜1nޜ1Λp3.f'7c-LǕckpbmZ:ϚA\׽=a|JŊލ+pC,f>լ[/Lcs0ud%>pXKs:6w_M|Y۟nYqĂȯaju(}^wa+nXWw}_FQ`FQ`)ﻀKK_`(0 (07ʜSSDB(Vٗl'(FQPU\))uO@Z| :n:xWQS:)§K:vnc|ؔ?|vt* p=QHVl 'N~o7;6bC~{d>k 6;1Nb2byBo޼=rqGNZm'$k8wnWtw3|yX'nisk0g{_ #Wn8hO5c:C) 6ǟbc^.l+k<='fc0˟ָn|'ٴw}/&{g.,O7ֽNk'09g5{<Ɔ^^g]޾}/r._{}8Қzy_|>µ=AZ烳v?~|\裏>t\KpuZkiL޵-/پx3{ ?%.7زp@GQk?W#h"S~OFQ`Fj>VTܻŽo]qc}}&g1˧xqǣs835pK{^skQ`x ̍2'Q`XPTԬT+Ve9o5`)v*(:s X̶kXk |)Npއ Q _~h(jC!6kŅ_ p6_ 3 Ӊu8ƺ"1 1ۼqϚxr[9:h1 \姉Opkb;v* Wc\`ii&w7W~Myù]SxFss+^{grs{キa'G] S]eacUS7A^cX'7Xe xx3o :_zǾ{oz8ݍhYD1[7gi>ڣ#[)l=Cnx6wιstoN\W/8׹`.?]4큘t# %Zw:C:,n&k _ :ܞf͹9[)o4˿ړc`(0 <w^^'L{ i(0 (0 @ ݴ߮}kބڱǰy,1]NqXmv㷶;C5WC}8w\>9d~9v|,c~_^|>c7 %e.`)ȨuC9]SaRhkޘ=[ͅ_6/p`18)56|1_ںO6LEZ-d*vwmMpҵ5n.v| c6+k56(5y~Y@Qy-:ZO3Ǯ^4f]߹#[6Z<)A\#a+>v7и|sÂƉ;^뼼qWh7@=؄ϕ?/:{-0O q΍Wlm_RW8:0Ɓ9ګx8kikΎi8܊mX'k%[spy-[w]h8k^ٳ+n‡Vpƺqbӱ1{/yሏXlY,vz=͂:O/rW7|qV)?coO5Z^ۻ5׍>$<ɣ |ع>9̳⇯lO"uMEm>MSyƟ7l ?( xMnO]?{z]~M>Lg>s]OM4'u~7u-vm?qy[\GaC˥xvdf{Z1߄qC:9/o{Yc81c; ) ̍27(PtUPH^EI]1SQYS!M15fR z/ӌ*VTWm^' ؋/!-\`;vsÃ9c\a7vCl|_! qNq9q #~>L5 يuǴeg\qq|ظb^,78Gi7>]8tM98ǓV| ~'xֆ `nk>L ]pQs7Rȗ۰-'lH|bW| V 9-frcqyeshq⧙9qa\`g>>iXh¯4vybϼ9V.q#┳SmӣóbaL`gNsh+&[uSKӍD+fxiEKsic(0 (pNϭiC(PZ_>]2`(0 (0 (0 <s?GQPttCԾuWTX zPa&kpzRHE]QvQqb'7XW1[~lg_u-{rqO"0^tv|ܜ@{⯎x/ap~nlV0e^pk)`/X-ċ'Ae<(Ok`Zqpf7Et8vҞ[ɦxt]aoX0"Lq9^bw6̑6<-C<x_}7~a>6'䇏hE :_|䋧sx:,a1:6]ObԞʿM:¡ |{K[ `Mc~ƹ׌i=kq0Nd̉6-\Xѓk>ڴECy Ga/x]K1;a{>ή{Nbj99ؚk鮛z O0=g1#ş6 U:~Yw~صwOn'lfnا@MѮݾvsM~=7~gNS>i{FwuaFb"gWcJFs+JVtƗgX>|PeB/يkݚK l iEtk sů0lG^ᰓ&E` ? kW |+Wf >đcEnT_Kr[7/NS9s*bhgcc7$/"ቝVn WŒ;Iw9њX]b_4u;>8u83'⚧Our1"k|rW\[^l ki0vqu¯1ݘ"Zѵ;|ZvSl<\'g+k]3S.rb5 GC{ _a/pX>_6\ˇ]yktsFx_y]]._b/vbQ|y}>. >僯+689эBwhp5bӓ]4־y>Z9vM?(0  Y;(p>OgO0g;|ܸ- 3C] c #S<1w?ƻId͏Z^#p-vzMoM1h\g^s~xq AJQsY5 u$}yÚuᄿ96pu>\1GA 6qv5:?f٭bcWkСsus<5v[؛û`Wķvq2\yZ1[|,5;Wq_|׼/WiYk͟OZc851`Z91r2x8K|n&g_].kt`0͛cY/cǞ'?kq#nM f] u7QV,t+f~WĽux|Š>+vzBǘ=Fqh\ݰ+vi4cg^i(:;z{jg5j WP1hk]Ku}xqÖ͇\`cM<=-9磷l46:W Xƽw6 (0 ggP?kQ!p?T9φw(0 l= |&[mVߗd? (0 O?V?^(0 <)*zVT%?بDټB&;辬S*zj?*´xk1|xӑ' {Cf|q[cR)ah< p&X)|ر©͗ϛ7o2u1:ןI'b+zBb?5 *r|<}S# sqqcǍ6pt){2 aIpf ~G$9んlÅ͉`Áo^q/lx7uðqE lZ[UiLhk<}Ġagw{j _5)ko[|gZ .c <\Ӥ1 Ç.XO;-ui(!0щ&֛۟oϼ|׵-?c؇ofX/b˸'@qqIg>xƫ|iusM^rtd5'W-3~kU\{vQ41M~l⸑FQ`F)?3Ϸ~&NEV}6ץH1(%[Kǹd =d^8d߳$q~Wvl_o{mOam_qj9V`ny;ٍ $(b* BY_k +:5mVsl؋XF}Ih̖ ?>bf|us?6xUU4c(Z}d^~΍+6q6L7ȃ/5clu|w7qa#9պ0)OϞVE(/݌gywM!Өb?L >ODy7~9xE8؍El~|Q.n5~Gh-7|0/ngM j  k]]7۾5r^4e7Xswnw3v4~4iϦiv|ҕ-bil&7M[qxג8_~6fmܠm]OӴ@nbҨ9Ʈҭk6_ש#];xs(0 (p~NY~>?ӟwFPYNQ%+P44`ruKجujsʣxk.|ݷ~]Cx'9}p>ns)8PV0\eΟs:TsQ`NU`n9UF',Vp,})8Y5u} jܗi a7V6sgyqi^;7%gö/ڍ?[%LJXpԋ#N 65p ol&;u=p)Ҵu8iuҚ^7Iq҅]9SgNkVbɭ|;kr+;saxr0O{u^Ҋ9"1s.lVp(0 ) 7?׍6 ܥ@1r(0  \}}70mFQ`S`n9NF'ѯP—y_yz/u_+b/ÚKCӊ`mM<5<`ߝW>j/ UPړ$yn(/f,7\OO6ݠbjla3m~ϩ7~9_klr9cgcqI˪M[xCXc4ϵpy 47}hfkkY=#(0 (;0GQALQQQRaSUaZ՚Z7(hrPqR1OJEO_*V%,`*t*j`a^1[Ag|%#xbnO9Vfpq|`׼-]y:~qC/bT,vNn7&Ջ_P3?6*hépn/gn)'ġc|unZ\`ѿKn O+/ ؚ#=|㘽ׂn7cq7vcZᨳi 94qI~r06O .Z7l1֌%בu~\a5xtu9M|0`HXvăVf+Dl`D﵌{7z|Z_8xon7;q Nl͕/N< ?{וsE-?-rc>Mo8ⱇOoS7ű_n] p5tӼѺ8yաkʹQ`FQ`W7Y~UkS covLۍ>_MFQ.uSrg_s}~jSp)܎]X~_w]ncϯ۾\1n'lfwΕmo\E1 U`n96 ODF>"P󅱵 3_0^3G9EbEO'1pdZT^OƱ/;szt|kr2.Z]lppp?ҌTLVf'c>|eH)u8Z~tȗ- ][ͅO~zkaߚ94fc-ƕ [8V+\:6ns"JXR,skv[npF[vCK?\wF91' 6w u^|1ҋǰr)7~I/Z׏5sQ3/?-Ǽ)gƶǚ.^G;qay6d-ΰ5.8/֟|(0 (ps!*(0 <¡XibfO8f c_[WdkPy7_l|yB5-x! {7x"VTlq5_LZI=y"8~*4ST#O^Xn&ao*6.]ܾl7˱Xb5Ǟ>O <+>y:=S x#w bkNßZx4,0cưKǑ?{qKߞw#c{Hv`=÷ןenWtClO+& 4; ˚ʗ ^yfݵ[8pk;]8׸\`NN{2=:y LEt5o,H h>b'Qyݹ/b>}'۟\>ZGa>=x~+;םy:5+xʹu@gװ,vkfwV`|s7X(psqz(0 Ӡؚ㡭ˇ +Q㧉Smsr)6{W<lG=1Ց}wN~szO5-,-[+NĨ3;G0W7k8; w1l85ssh9q4]7ybkykxhlgc>a^:\<[9 78+1{˜5અu-Nl/j zHʅ}|_gW7mFQ`Fs*0/Ω`(0 (0 (0 \] 1 PT U?}駠ۜ^"?ԓ+kSFaW,[M=xZAO 17ESy Sߕu:c\V\~y呭%ホycOA44..qbX4`eN0GŰ'4o?_qًLד64vB~Ü8xu_.!`X s-7|,.X't3~te>tQO\` g/'C٥_u\9,a^ӟPąIxKtaVwp.}Á^4i@Kټ7@q ':łkAq ^1TZO&[qF>xC_<xbV g4p9ggz z X<:_-;8r+~6^ٗ=X<ڲgk>,>ll,~99=]g8Sq4O4{63 (0 (0 +R{C1 ߱ }YWSy.S[`69WnhS^O&-wxnGQe*07ʼ}GC ""B8`0 (i& 7Wf)Z ©yvb*u() k!b󅭉[a՚^w7+.?.7 :_nА+N8cf8`iim^+xQ$OM|D~cG〛tM>'ܬ&bݼqlO9.r߹O3~xF t M {6\/nV9iHs:5y{_mט&pmvg#}}ui}b:wۃw8(psZ(0 <|0Ù¢ 6GQCs>T9*dV X48QtU`fXZ_1lN\͚r1|sٜBX}qh}S6q+nZibt;c] {cq K\W39lV]'\bŅO~igqaM󁏫xz"s4v qWfwVέ1 7s b;kޱux{8Κynl Īlǩ͵`yJaYϺ1z8g-r+;\ci3ah5~k#[vl[+0(0 (0 (0 R!; (0 ᄆ(0 )X񒝢"by$@醏5IÞZpiS+ {"F^Ga^Mycq=)S`qvkbz2VQX ( ik=9g}Փ'pS~:9x:,81 \y cx9WўukSUkwN{0qsAreotVý<b]\ O\ݵkX᤭G3n/LXԾ⋯7|1])Wy4 iaS@F@M?|Nk8b.<9|XbuIP΍;^8umCs-[5}2i+|r.ًG{ Gg'l ۷o'X{bţ(6tu{8q1y]ptכ<\Mͳضwl|s6bm ϾҎu?6|%^&^uŖ bC/I[GS^#0e'[%Ư멜̮Y ?pfS:fi(0 \ZߴQ`FQ`x^ Y+l_rs\9:u=Ϲ8{c*6*>+V-Bi7-p(FSZ¤SqVW0u1?c1ćYq"(XǺy]ET<ؗ9dWV^Ŋ#Lrsn/;Κsr+݈_9șfc1L0OrU׬5" 8Kl61%QN6;7)57+8ꠇ/\[5,NՃݨ\l&:Gܑ^ń <ы9?9ܵMׄXK-kJijFjRZӼ'tsGC4))5~$Ხ 5qͷ.|HkY7/[v!?Mj3> _Y5#6s~\4jSVGn F5N®9wٹNe[>_W|<|4݉94D|~΍5yפy oSl?򅃞'QusC{Й;OO ~ vdUoc9 G>tlbˠ7`J29z#vm8/?]PzkĚ(Z־d'շqf{S7^^u ˤW:00 00 00 00 2s̃S00 pԀ4Rq{Z ezKO+f OĴKh9z_d=oMT7Ή# ܟ DW`gU ==Lb', x-pe-l5qN xz2|`Wxt=6Wy r'rO;{z}|c/sMK/&[fŧSO`e6`tCjv S1Ɵ׾G j4 82o~]g~짽yOW^yV's(G:˹3<]z5ғfij'λNǕxAꆙ^|qSd[%_ 6y nCqj`[ yٻvfOޓPSq|:5% bGb'x6u?׮jѾGnQ#s"\}P[ccMymox9~67\#Ք꭫r9[ײk>5a*>}Gz\\yV5ȇa`ngCNa߄zjoиU(IU;C+}[}s{k7}}vԞ\`Qߩn1Hj00mXS#^Rs[@cY3wt? JΚi?sxٰKB:lʚDon{~` >t5k5b5zص^-)ؚ0|ŕu곦 E>9?bՐљ;g͍6|ŒCYXl!.t3_bqctu^]||KV]rum§WG=Ƈ[×uym:' 8CϏ nϟO 4 /(wG:ulػ yMl! dckJNv'{^ŔS}lȁ>:o17xWC9ܔDN'`^z1{ rvuJeW\W˵+=|J.C 7~N^lIx&6̭!Ϻ n~wZʳv_|ҝ,߫X(*7y(;*jܕ:j03oZa`0Un5CQdںjӇ36>,jǜg5嗻gs؋-5@~k|j8+a==L!VD\q[.6zdϦyrӺٕW|)WGgklsCL掚v oym37K~doN\|kYIGk]ϭg'F{F\޸/,ދ8^G,q טd=!ba^έZlhz=:k,u_7輾ƯkM6lHqvj 6:6l+q X\:bUuS7Eq/ 'a ??o ri<ǃ }Ē#00 `SޯJgz=Lܫe:|da`a`a`}sv[:abFפD_¿?S3U l=檦+|bY}lM#smxN~kft5o#?q[qk~ aCzbD VAw4gܵG=-CM[ZeȺ<~]Lp1`K_D-jNO{`GlTXl.y#^ C~v~{.v]#ŇpU|D8)l c]t8T7=Ǯ:O$O5iMs LXœ3S9A]awfね'O/r[bu:G<-ŐS>1G/F"uR]rG&הkȜ\ڇ-] XqZ%k-lEo]k^ ~tާ`\б xCN%n]'lk^n}\,|` h Xu֟r3vq[~%b_쭅\]/r%׻uz͉)\32 O3}{?y7 8rea``g瘳β{4:n_v}V}Nq޵C7Ͻ[k8&fɾ~5~Yt0p ̍2@X_DƤnUMvt5Q5xirR9ќЬոC]v# ?0n Q֔un`lx0j¯yi6_NC,Q>{y¤K/s᠜vDpW,$LIWp>GzoŰ/8[\">[/voMwEA6zץb;St+~&z7:WX啇^l{εoK_^>INFnrލ ^"?};FsgSvpvᯛyeF7?w{;E8!!o7pt}589,p+7Aċj)xekMz6\#Y!.nq?_,yG"6' R+?O?0%?MA?>;9f?O~{"=w.Ηzǟh#) e{z/Lg1z$O 00 7q."gP`LC_9E|zRU.|ٝfsߡkaWכg0?H{PًxYqt[]k00 \QNa`D4|CƣStt4VRSZvDCq}W|6'r%/ bb鬇Akld/a/z:Z&]? r"snx!ꐛO9st#E9׼7q"?ȧtsuŐX\(XG٦Ӽ}sNؖ"_NW7Y=ds<|U]b 5'SJ4/n6 4lXP8[gn%#u+If#?00 00 00 0007<8%  H$iޞX~#ח=ͤ7i q5-5Mxm`Ej֊ɿ giDԓl4=NW~Xr!?{#.n0䵧ܹsgS`2c>"}Q]=sOO>t~ՍaKf sOzxi;r9Oܸu}[LJ56'{q7+k680a` x_12 00 0~얘φY1\Fq/}bW>g>Z񵫨|ߴx(}^;Ƽ!ء{Ol620`007<8U  h"j hhDcSч$ S HBJjΟ!]11iq*6j RynQ>ft5]C[^:7h3?Gfꄅ^c]]Dnq.gh⊯A,ìa,lf5Y;;ZӠq]z7b? e5]Wl +;kj  \aW9qE/#{vvfk6sxvN̉ā9?5\]8umɍA]n`<23}o5рLl κ//ĤI^x#$pbaJ {ck?ITnX~3=hmQLׁٜ5v t>s90ǟ^: kO fűF7 w{l[W؄Sn #0ş5q:w 0 eǃ,yrS00 0 2gC>s/"y^vs_wa_metsԈѨyهӴd_u%/)(=K&,vm-}a\.ǤZgþl \8*F1;w4j_ 5Eجs8'I|mR;XQMb(G=a㼚u^\n9;]q[yxpSںa_xLy5ѰΗ=C9M/[#G5.|憼0(u϶Xsuxba 77q'>rzaV/<&Q '=vv8Q#gf#M \fW1'wn6ꔣ/S\P?G|^Ne'q '9 O9{~d'qOQl5l/<DL\ #0n$r8'4?$~ d ֺCx N.qz 8W.u0fa%jQ=zzJxŇ}1u^=q`#(Vg\U |xC.] _6^+O|KG`$׵|\?Kkz8(5XUS|-><]֝z3Wu{Z1+~ 6b!Ȧ9xnwiFL[{VzMLU70IQ\ :/t]N엺Ćx^l?b>\j#Z3H]50Zl`6uk{Ο[Þ_<ˣ>ުÍ@(8`j I\⽉x^W00 :ރ_ozS00 00 ?#WO*䐸^{ٻlԶڜ<<bkz""_CY  ~5=5?xtM6IF*{wG8ZjN'/< Yibx"޵ /'[O(_|Ԥfk.lzbDOӰ7./Q!<֊'l@{RF}\-lǧ'=V.ƍaUsǽb'|ɺlsgnϹZ#fנ llmٮ79IZ ŠSq$xb>Iǟ=߮=o7lu'u?=zh{{wd/6 6X5k̺X|Ⱥ1{n 7\el\ψ#00 00 00  ~!Y&b7uA\ }w75V[;8k:w1u.Uֵ+Y{Yf| \~00 Q>Ya1ɨ jLb Ikl}cI;WsNUY]&(A^ri^бќ34GI\7i£2'rSX,5&xHyiƛXⰷ朏ƭplK|"~ZWStWl4õ5vx17@CFS>s1|7 N{@.ŧ84؋ځɺs"rߵ!ukx@&|qzXw= ?Đ+.z&/_s[+<NbYs_:`ĵ _wصf~/o1k ߮%P5dw/qn05$5P}(UuÇ;Jbͼ&f~œ7i6R55V G :~蜾l;.s0iXFģ7Ґ]m|vNU[͢Q$x֫_Z~]%W{rc],OĹ5a\mf(X';7'wp:jkk}=~c1Q0 7OgΖ]}䗃^ؐ쪭|e#[']n0nT{qc6x~:G\\ Oj'q4(>19 7Aˁ-NĄr {)$7Cl1b!|ّs%w# b;6Hlᗛtd׼ꕳ9pLJXꐳ8PQ> lbim[a3sӮ=8a`a`a`a`[(s7Jn;hfxĻςhl<@CChJ:4֬4y\8'mrCck|"uS̋9l~=a`Q檘0p#Ф4|ҘՄ\F7 |h!NU N皱l <vl5pkxkGOֆpHfq5bo]>:FΜ?=p^)9tR|ޑ]WjGzslo85z7_rOXg  ^ O\Q ~bE,}rUذNoSbV>Ghӻ~z)S|Я7s'6c5)v WE,9xcNă[nNg 8O{?2ٿ8TC]cOϗ-q+Zʯ<儙;} nas9psy9∏lh:[in9Z\jMz1 ]S)[{pdߺ| y70Ŝ.K.؈Uj ]oٵd{΀צ;u==wK|'RJa`a0?#+wɾ1;)ή؇[|=~Z}jߧ.q>vWas=֫aߘ=n~Ώxzum׼Zwnf`nj'00 (| YBRy ̚>wyJ?iƦtbsk5E;ґ'?a'>͚Z)/ud/Y[s&iMb[à/~4q^.u:9Hq+&?z>tap +j;1k.Oz6dթ&WCMggN\xo3Oܐ=&9Y<>tނ=ql.Wqe^#njZgf:~goX/<9!NphQ\7\8'|ശr5b|(gG=8e߾1# ʗ(f9ǀ6vb' bʝtn 7lBTj5Q]apd:bZ–^^s7Դ1'rOބ}/a2u}{{ˀ{ǽ݋{}v8&00 00 taf307t0p xj'rkO6e?_b=UM5<5kjO IbHV3]l_ޛʇrDޟ ԔF1af5Z06gx Yqa6t֜|$) ;FI#`/`ןpxqO1=pN.`8ӓ+79]xz+W}Qg}epeN9Nºr{RCbe{?/Cx}.lk~ZYa*eՉ9 7>i6jTkdKF#Sdv}3|j4Lkbr^.+5zG.lt|5w5K 50 ZL99`N֑^xM4|5xao8aavMeqă/bYaKXH'&rMnvlqWO_j$6cmăuM!b <Me;5ט'G}@tlq_|߾N,p& 읫qE C\ydp9gONt|-oM8:/kv7Y+]ٺqJ=b:s7iWzbOqua\pOϷ*GjqՔ\n`_ktĹsζ!u^*6_{!QZو{Fܵxr <| [;ZG-Gc5F"՞m/_♫dn= >GNMjX@ᛅn}[nx_g=rz}Nidab`hble2c]I8 b$\s՝W-N_c2\Ĺ,CI/{g.]Oeo̓|ɵ+膁a`JFdwbc@χ/5.50` U>/Igݹ&fvt ;+cb:\>Ȋ9)95:sb8q<'jV< cqE~1 {65-wj=l6Co/ζSMZK#nh'λf%|<Įmݹ5FZ ngqc/;^_C 1Ͷ:pدbG,v:׾>ŧ7wwbe]#lų&%v\S=Qja+Xrٙw>a>W8Dplu 6K6l/p9g'+roN/f傞Ou;/7lIGo8tdK$`[Ӭ j4`^at-G v :y'#00 ŀ7ճ|u0a`a:a`c`n9_/I5$5^{K?ԀHvt'hZ`^}P yT v𫋟\lVJ<ֈ|U{"F|75:E95ubgxo#Z6u[gb/qWحY^vZi?£V~07g#^rY3/kns{Mİ.}+Z%Xbj!{*F&_ g@-]l\ՎCX%={CT/,gg}vC|r.{6-\P+_m.z1]P> O]qEwq\W5zы7x :H,Z O ^7v䀃&NupY/n-{m/zy:ġ^0^l:?v1^ Ke]-$W7[kxpT&|E|F'llQ\u87_{O?q&V|g'b)a`Na{Qu̼G  p[j:a` Cy\ IDAT}qn +Xϋq?o2I9/CsNQ}x'>X1'3p=:9+ޞ'o>k300 (s}\Oa` `6DA`yPCn N6Y'XI )]ijT槡Ϻi꼜p:<<3 lO]bPq+Mp|`@'xĹ̻>_Jg+рgǚj1pAuSAēúM|5ŒO 5KMnNL)^ǹjհ_mn _?LwsFzG{|?{ݍAnƖub%`7E!|q,5ҍx^uN{T xK-9^C`s6-=?8|_MO``[9%N!-$3_~4`0/8f_jy{lJLassknq.q,75`!%nn9Od-ʣVBߚslrk'ld3SY5|x/moUW|`Ivsuטk)<{|U\Fa`8%bjT>?Wy?a`8W]xVA]b88O/i\r\F]qGwXkD0penO-g2 F_p5}`zMI ̚lgZ~ eS|Fus[0_.Қy5@j2lDZFuIא k1j-F]RIJ\ rka2vk_5(uRⱵֱmqheW7{ jFV-W| bt,|ljS ~W#}kΰV \]np2%<G;K8]kښkSN_skZxYXsnȵ|QLGz"80 g9᥃_ٕ+ı8ώ-cqsSXW^~;mU#5.?uzaVxboƩޟqMnɯ\.7^ _79ZX[a,Wyɀ>lsS??]a`a`a`%s̽dr3PCoﻁCSRRS$,eiPùK=OX×PYc/[65V5OămOIKkb{1|Il<ĺs8|y +ĸs;9{mgc<u+c 5:ЋO8\W8'rT9=WMb{-ǡ#1Ŗ9(||qPxZÆ׻8ƙa1{"ssr:9=S]x=8T?x+^{ )bw,ϖla`a`>GaaGO<癛&pz0a`gI?שa_YmOo!vkv\5~=t5?sQ٫A: f&汆/Sl4)54ٲׇ>NSlVqىN4ҭş-W土5-W%f35E|%l/Vb͠CŁM:W&Y5|Œß;Nʗ|ƹo 7Q.Gퟘ\㽺K. :7 LmMslѹR?;5뚂8MzIJFn5S ~|u6W+Z\rioM]b;voM<岟έ1ot"Zٗ}>nxϟ"_s9͉jךCnlo|wMÉlI6u7 ~1 93 uW55c!:l{skpe.sLLzY=>^x/pWZzS{ 9b=5Wx+Ɨ>lًϿzanDc|#00 00 ŀ~^x'}8t8&00 <8 E/Mg0_kq4ǓI;go9\Qp\''ZT)]O;;)i~6 e307\6on<>MSܱf4u^ֹfA1ه9l _ [zG |aϚ5B9s¯|tpv- lH-gsb%f 3|$?x˦֌eOOY R>oNߐ!^{Y (ךQyٖ' _c۹c)?lW-ŵrq:o{]pj닾kxb#aCB':9Y,b5w{kqܞ:Ɠ8&/+8FUszn~k kν'tÒauk杳iݚ9.W7G VEoOc> {a+fnq <+N>h0% b}\F56;bmݟm00 00 '0g7R>>,42 00 00 00 \&se9̀fZ_4߃Ԣ}A)ڟ/ {ڇ x@[ dM|F5H53iN~ϓD |JOz{lS57Ǻ!*0ϯf2~[#0˞/ZYc8|Ql)hN4=-\l6o_>ŀS>vqf^ _>Gt>zb\C6rz2<~%qx:H{'tūF9]o[ו\܏?Uװn}KM#HVSH`Ms<㔎mOOwG9zb6g_uᜏsH)Z`'.|GO\5o!NM {t1+uGuy2]l\o岗y ^?M틘lz\p|8p{o p X Ÿ"v]/UYnq#{5Eظ&Űb.mBރ#Z]c׍9_}Vng7abCs_0`y;~00 7>79Vϴ,d42 \~9uwfa}Ss}>Ź~̌+k:'սrp.Nuښ❅+b~YߧlNҷ~qUgm`{'00 \*ozӛ>3?s9sflMoo?z^54>?'~'I}ѣ>k4~~//C晀0_|hjC٠4ś!jhjj=?J_4io [q5%Lljrh&xv}\cj˚sct@cnk氈F6< bv7g _ hu:Gň{N..MbqNXW=}(NN`a:|p=á5<a]lyQl<Ԕ=;>T!'ֻ!r MUG 8Ń?#ulĕϱ_MjnVuoq]#7l3qDദ&ٻPao/Ǘ, 6ѯbQ׵҉e)V6jK8hk ꧫnk=zOT}PG nnO9?G.5ә۳Zc61`(8|t-v_U kjţ8\Gvp)?`/a009r x//һLpWjgוگ8z[r/__9oF0p xr&o#ǀv}.3M|id8߸kktk^1|F__>ӗ?c_z>'?F?6Ep^}\{UWU߇ǫFǓd5?6_v'>6d~_N 0p^2enkf@3~ۜ4yꩧ>S>g| =z^wGo|OGq755x≣??~Q|%/}EuYg :_ktϗ#φ~]ztr6#=,t;9bWrC8i8+sMbz15WM YN1;7X|O+8g_9BʽZ|bZOaφȗ-}54 _v/56[s*W8"n(xb9n~tW0j[𙍸ZMu['w k^ذ50Y7lɮ9[6c5n+8ᇱ똰3K:qڣ9wgLJG9sۗ[c=+oWcuO0YS:=DGZc+uyOr%;թ6U%>rW<1h'a 㦜> |7lK in_#7hկr~~o[w}hi~6oF9 \!ޗ? +A?7 00 fw`~m>??l7ո׍o~&hum?\G7 00 00 U{~ؗoontDC>d__l? __~oo/vr~nھ??5vx)/5-/>Cv5#}Io'/c&9O%a-&l64>|E ?QعOO >Q^>$GX[saj0%k:ʥhFr f#dQ=qn|zT J/n=? C_Mqp/Sm~d71 /d#r:⍏wM{*CpЗ|Ml1=C5%8đ?Yc\6kq^:a6~ vjNŃǹ$Lj`#<9`uXOL9KLuQk[:GL5#O2g#ךkpz;߹3m7øG~dŀ}~12 \7ޫFy/<11G02 0>ߝg~1n=ndE_Eg8O-b߻aUH*E0_{;'>6`*}6k֑>>籹ga*|v~Ǯxq'00 10߰__n?ʜ77_e!!˿ˏ~'r;wӌ'n?-o\~~jkn\8 L6t>Gv}o kٳ[>v9|9>5/\|aknXggמVCC,\j1h`k[NqY#|j Vkg[lCp Fφ:ǹ8[bWِ 'KNػQVW-':iͱ:c͹aF}r)ѩOG:u>ő8e_˞^nP7> !6l&n<04??-G8sޠ7:W-<gKuӋ<8Rx=!5yŕW '>lͫ&00>W{d}כz=a ]0xm ?n1vyu}5>^{ֽ塓}ܮ7©Slvp!6|sΆ 'ܽW}|5׳#kItnh!/:4?aT8˩^]^_5`q1`_z}~K؞}0?c?+^??ޮG|Q!^C|b]ߵ]$㷝] g5vFfë:g }_;7|˷}w|v?w?oɂ>m>}W}v׿~g;n4~^ly"kN.[v?ṬNo'_D]{zƫOue\k:/#I9F? e10ߨ_g"4׾kvkMd ɳɫ^OOxK^o7 ?/}7E&h&+4' 4M5 /}Ib޹'}Q-Gbqgc->Hq gMv䓬x;O'A*\XϾ؎ k\/ϚQl9/']W#dF[ޜ$jZO'W }9')Ϛ MՔuqfu%v퓱ڊΐu13wz$PT=:WKX}C\Ghq+^`33_)<֒r97_ײYas.k]lŸ)>]^Ly 1.nb4GgvCxul_k s>q$lrKQqվXt) NFгA9Tur0R>L~1仿_d׼5X?&LMu;/MFa`xpTݠ#00 /foon}ᄒKdqx>o9֟\{ooo۞w~a`a`a`Y ̍27k?0"4Szꩣ׽uGQ ԯ~/o皀韾͏I}g}N)5kBbC#XSTcR?Q=E nا9 IDAT{4=iz1=DLM||rEos=pl<(u\EA(_%zjXLF5xN,HOGl6g:  st{44str8~w5җt7x'QcOpsKj#~wO||'w.^sX9Wtq$u@qW\(plx]ӱdžh8[Sc 8E|ѵĖ~p3}`O^8ϺᦋCvß&.ׁ?#7L=~9>FyϾ4WMbى ;;KNׄ=.om9؋k&ubóz|e/{zS/=,SW;ŒǺkk\bj8p:Û9wX}#ao<#>#v͵MoN?#?r{_ךOoO?a`3 00 ׾ ,?}Onf'}?Dw7yg$x򗿜ɋ7s ig%_mY~&YuZ?D{'Ί>q.& 8<]D7/Ro^$i\wrZ糧0nn.g?bd o~^/P5SNk[u[VSۿ]9 _?t7 hFkt8@Af |QAEym.&yW1555N0XNً+o¨Ѫ)kM >s Za2Cįk65tT#<SC_Ŵf/;8j0E>~بM5U^na/.; r~n|ǜ/[5lW7;#W"?|#ug:5kWnzyawjl_X䂃m\ r}ǽDL~XghSNx?xrw|npO1 _"퇹#8ď=sn=qQnYX- n Oدlg-v[i7u5x2~ᡃ5j.1q!>4OMp;g/ı?&S5 |bpmyU/HM*HHQ#@LQ F #C4F88~pT4SDQD 3=Fo?<>]nUݪ[Uk5SgE͸=q''O:߮1|\a#x'u?8:\̉/&`u =- )o~Yx\%e,y<>r 'Os/5\M Vk/}5ӟ+n{vwq~:0p˽~ΖO{ްySr }W{3z~}jޟ}gmW6g(ϬGƺиO}Q8t;\v}cݼf|Lb; ߮ab`(ssd{PTTQ_KWL5=O0IjxzBE|\#>5R潙RԬiH ?l4浊 鳭8ˇhC5s_ܮ#=>41HFמꋥ7fh]#?;K!,rҧo!^1`S^[٘kbϘ' =l?}a3_r^}h)[kGm>c/F79t5yO^bXk;~+]8+?^ӋO1֚Ɨ5"Z-6^kɞ4鱣ۺ~_v$BtIı^N~5vbk񶫓z8C#Zu̗ajkXnRЭI%u^m|9ƣ1_{ڪF2wg>>G逤_f~a`a`8?r~'00 ax1߾/=Z4fhuVOgA^RaRVA"gFGLM+<.*8{Z+60GP+=y \ˋqa'?|>rN}Rp1oO%Xё8⇾n.=Ebc}yD  Wi a0\'[7ݱ~;vy\{6s~{{e2+{@%pO;җ#y:G]6t``Ox ć>-8wbol_Y7fS|}霷kxO#o[ne_簯a#?>cO7]vN8:'5ƹEFnx%n }sbM]Nq6^^LM+'sǵ}"ֺFzB ?tm|[~{p=/|?>oK:瞽/}5yͱsaw{3E^Isf?HOO?l憁a`a3|7Aw#d3>r7{3Xaص}=:ڍ>oI&&Wu{\ t]k~{Τ:kg}b`=Yc+]Z븻~Vcxr9Ak37 ׏Qq=#3wk?qD4x=V6P_kq\u/9GOy_Ny8|"G7I> EIs tWƯZ|hb5)Iͱ現}utD5?=G6\ּ)؍=>- t} 'ta(Mry9W5/.a3[S-/0ȇy zb%7a1F~Ӭ ̚!?h8a?Ž>Ͽ#1GOy<8U~×yz0v[=& mǎ<cyoCp݇杗t N]+7G?zv _?C.0O"}> rMlacO5Nq{ 18`׹"]d:rx:qn+c1pra'o/l;1˕=9{aǟV1.u᫁gF{`{Z3Is7ָv;WV]w'?-mjk%[pͺ~kGa`ƀW@h7q׿~{++]κQ{a awA:/˷O9hF;cG.YϫſVN :r\%`8I: 7 ~ôo}Wm0pe.f a b"Ǒ lC|]SLEX~(Zf]_{6__Nk_Bb7h#7k(Jb-Pm>⋭tk^7𗾘aSղOX4<_tʑy5k^Ø?k)#''7vӺm.}&%pk[+ǰ4s09p29`'w 'tkѽ?x?/]‡y14O8:n֘5>h×s,^az{sΈrObC{k7]Gߎa 餗#aGO sqb>{0)8kcXϊ ]>_-^!yk;y[/Sr1Q|&} >'ጘ>]!Ժyc> 9mOO1o?]61} >XX=MF4yj1Sk󫘞0@_ך o4S~e!tɟ>}M\0!p9>ql^ȅV?bS> C5I>b^O\3cc:7vv8/Ÿ99hsW8ķ>peO|y _Ls5kbXXu^EG:pe]g}k85OO [xZ-^gOy|pYCtA9pȧoa)}*׎ ɖ?yW\:>;~pGN<wDr}sWUim"Ĺws5@V 1y[o|Na`8=׸}cW~?A0 K^{|\,{%Mtn=a{mwEYF(N(~Oɖk=Nz妽z];`WvG]qTU 4Qr9n憁a`8Q Vfn8Gwl%BQiy{ަ~g||#?WkQUKG(xwozW.xGw n+<0V5Hj(Zv#Z3QE ްUtӚP*]CЕ"+WUt\>Zޘ*-qpĞ_VWUͿ~7 r?̋mG>_8SY>̇?>ܢKG}Y-q@ǚb#? gđDO|[Nɛ%eLWcoW.8r5{O/k4iŌWzå0oM``KN2OO΍b;؊ϖ_s"VӧHI,R.٥#=-1弓1n.6;OqN_Ln}EG[3f^x nu7ݸN7/8ʭD^לS >G0O@?>Xl/]c.= w4ךt/7>y7ѵerC񣟾sʘ^{.&Қ8|ɵܒ5?Nwֹ_m/vgy{6t{l6ޟ?}{}?LwНw޹?p=k?0p0Qs9a7m܏gg>7{޽pjUc}p?(ƍ0k*0Esu. }83u2?(~݇w>c pww[ϺP!n.^ ?+>*r(V !xp" ^ 0b'qbESNa\~'}sc~ZϿxpG8"_OרhĞI7'GO 8ǧ9<= *э0KW /e_1ߑfݘ|`31iݓ0e޾OϜq>UMly9x{0)'GGhIy>İGunvO8}OXɞ>C6n؋gt,FzoLs0G/"_G~Ob z}o1=m]}>+78`q<g˷Ny8z]G$NcC_KǵZ?hrtNO;|b'V,:j%k+ųg∩ֵoL~^^Xϸ>,O?Y56/ƒ\͕3? ;1?TqiT/??}S]K_yss?ݯO˿9ⓟ{ލ'ܸyWWy<= xҼx:tm?|ާ-zm02 À߇~=4a{}߼ o1ku߽r#Ξt~pooggnϓtպzJ IDAT.!93Gxͷ{>yPE̛A$w~G9Ik)ðIVb$Yۜ6prܜVjX}ܸݍ:Hg]ߵ00 (s-0p =CBٓT6߹ ??6o~hY3`??|ٗ}}t|HhyP1>lPqB7^h)w#b^SU8U촮[*vMP&80[ i[7W(% aɆOsa 1]7ctt{āYA}͚A'S6؍K8rB_Dn*/9Ǻďf-Fۍ0#7}7xM,%欛G|͜9q =';']9qmZw^7IX';~)FͿ1=77.?s|R3`?汏}{e//#۾aU(=w߽MuwnQ栛W_ӿ/E񾫇\{ p} 2:ކa3YY}r̟nz=>>}5}&޼/ύ{G Η>_4~^z?|^XŚI.ӌy=}}f.jĹ\ QWYu3/f>8 72nH+bg?{w|wl^Wol_u}}ڮ~n~|7 on׼fo·|˷l~w~gkWsr&6)5s7fμo.{<;+xFYP)y\:DZ~wdFV2N6 ڪ㊝rʧ9[E`d$~Kk7a`Ϧ؎I8 3w8zSl'lߺ5b]EVt/[%.WnVuM?#8Q1byzeG1m/V} F!b/&~5=ŇV[dcÖ9[tnmFב:nqӌAqeç#D6r0yt4o΍=*|O_1~+φcX]߽M: 00 Sek_4=v7{|O YoyEM ,t8j w>̱|q+'Oa~\\<~6/| OԾUGoh{Mle<_[M2=-=\gxa`N݀_/ Od>I߼?DzU_ף7zD9oey?>.pk'7_2; >+GגX]+߃8s; Qrߠ (Koy[ЇoS̷K{^x=qOyxE]AC$>RPUU4DxD!TÛ>}N"ij+Vxp]1瓈-F͸F׺"=`3]n4%qс btËt?~g7!i_RM}G%N5of7Kd)>q.6dkGstl_8a0x0UܧÞw_,87_& x`7r4&a޺|+&]| y:xc\a7)Gs9z=H`']bL,'M?>Wgn +=\Ó;8kx[{8)>_8z&8q._`4kq-<"퍱M%\ls<'yY'T\b欳cO\u}070ɿXמ1FȷsՍQ9g's~ y򓟼={sO}׷Osfaolu}M'g=kUγπxdƀ_~_ 0p xBH}ӾXއyJ_}:E'l?zt;00 w00 =m sm; 28_1'uQl|0鸾ϛ}Fkuヾ qX#М~kw1*~)X1>]p曎5TTKpXKm>l#/NX7WϏZ)WX[9eoٕoq+F[uͺy\01.8&a<{X>5|~k3~͉i]?_1N ~$c]3'W3zֲu >?G>쇾V_ T\'͚WC>R·_bF8=~gwG9iL/K?4Ϟ_6[u8?΅Wȱ='~'۝00 >t#g#00 n"֎"ޣayߓcÍ5FD00 7{:S?/l00 `*ϠaL荴B¬$!n_TVAS*xC457X$~O,P_1qofi.^_"7ᆩ'$'> ^}- ;y?(twlooO4`p61[cOO5,=qlҁS*+:rv]a/=Q_cobW^.W 7}?rd;a%wl=O6cztp܆_#&J4B0׺-~{nx7Na~>'ƾ>܄?]zt53]FƇ׀rH=f<{|ȑX+ "|9:`^9gQ^m$^u3ťN_|qFa`V>G#i0|^}]z{#00 `싷^\mj~Σzכ]+"r~` cYiڇ2p~ck ?b[OӞ#lǹCn|ҷDMl9>aeC/n td܆U|鄇<,[.?b_%wvc28ٔK:'t'ݤX`dG\s.{yс1[~&9؜s&~/4+aߚ9sl:]#xdǿίn0:W调AxX'%b98wm82ϟsqnCb9i?zlav8ŕ6>™ycޜܘnOqM7ka=kkkc| w-a`a( \wXt9l(1QVσ1W zT}9ϸ~.sm}W#˫t]GY? E``n0a1X)6&)\fnfF_r-+k\+ "#?ֈu> ޤ:mp9V܅y^rHƵҽ?aOXZnNNn~ >CZO#k rk-5 \vAz:W7ǜ87g#ϧ><9/c _ٵH׹UUߺ֍l؇1ѷN~r?N;kckIYa.bIZ k69Ӿ'qjsuv_Yq[ّt3$?G[㟬[zGss:տ5R^Α^a^lZRc>ֱ+'>?$ʣ-58OZa452^G`ٞw00 00 2p^E9aٟ000 b`nX1ha&ZS`T?~ W$PuF l- tU(; kW<|=}:MEb],uO2t7W&o~6pl8'0О`T5_k'Gvx/[ne^O3?37G;RlЇ>Hˇ'Fe-y݌ [|8l= {L|[gpe,7{V9ܔaM/|ё;b w$i{鰧cM~o𘳇M@l|+'o#;Ѕ'|ӵ'Ns.sb2S3z&W`!ֵQ#:tJ#j/8j_ßm<[׾\58ƒ<̻w 7$'c9O8N*~(xc9|+fq3_1׮E~LǓc|KO8n`1si/K;/|w>=`q00 ʀ.c&uod8-a`N@vY]PbgyY<Y? ðZ[}fw$NjugQ0U縹ww]Kq=>ka`8)sIa` (VbbB"uo |"B"#aSQ%Okl/b+]GX WWM1Q7DL7f"+|u^~*.kXp[1>Evp1? 00و 0>Ӷbⲱ_09)*_n5EhRQ_i 3nF|qhNnx r4ks?gL&w`w{q[[_6y~#'>%6qs=& 9 [pXv{F?vŏxq֜/9GO~5sjZL6$Nn_~|7y=yi_>a+_pd^sh|{y1Z p:]O's=y/hۃ|Z#/|A-s0k^.F }=J#HN֍|8⸎K_~?NrXLH&ȋoU#r3_]+a`8)^oF}㤾na`n]uֲҵ ϣ;|w\-i_F88hO/K~aߗ_zgEppQ;̾c?OWrЩ30ps1ϕla&e7BqFMS7m5b^ƶ?OAtT̓0usK5tmş~+:V/&[s qS\:Kϼƾ"#KGqpd]0HCEl:0!Ţ=V36NlI:𚫹,|9ߑ#A:,$nkΫbY["Iuk{,$+~b=];cv$}Uߺqqcx"1_|[:\q'Ⰱk0־5E_s]ap܇S~G8b_l\ c2ukz ]00 00 00 ΀PN=8a`'p[: a TDIo'x@QONI*v-[s#aO*:(n ~<*C&O"G.rr]lbyjC/oGyzRN|O?0OS&|a+q~&~ 'st<1[:Ⱑ|4kyN~u '~sUӷ;]]-O}/o_qĶ{|>8z'G/1ǖc8뙼CXęs&a`a`a`ԮYH{a~si~\Lя}a;N~XuIָ>'؍W|z#IbOܝ$|S^}0p307{<@PEIELoмYS& (+T _Eʊ|V-=1͛YΊֺY5`STU?MB6lN_YnnN[a[1W)z["Ix|ښ9񲡫_NTwxl5ݴa?˝&?{C`S㟝9c>X3W>lA:ʞveWk:|Fv!}Map#l ;kPc!gĥKyyh0+38e'{snI/kɺ|ǫ>,ǾNO3ƛuq\F_.[ 8b/=<0O?p%&=1Gcl=,_16Ks ctF\aW+..ų4s:9_9<&5XĶX|ü'6Zqa`a`afbU~Voks6Eg?-n<n??g9>M<ޤs;<d,:mybxbz8=0Qf΃a`i&"h]OR (˛>xqt*|V,^}m0)V$rFan] |k-?>G5<[oͶ9b-F̱W_tloy-_'4.~͋C>?\k+&븣]\îY `b[1s}>㍏ѷnZ>;&t98=vvM|GzݼD߼`ɮsa`x x&r 00 00 00 0p307{<€%Iм1[MО6I PYzZptg7ZbæIoi r+lro}V\*gƧu ^O6x sb{"#?|w(MG_OEl=ŕ9M_n|vmۯX8Ox}zأ5gf9'Or>񮱁+|}p>f/B:©0M:bpʭ'['Qў.a^vbEO|s?}`Ϯ1T/97ɘ/>̳ogFȁ~v{>Y_+<0+uz _ F7y"wF1p_O&|XsPxp @9$?l،}[`\8C8=ŇOl:[}8 rO9u]ۯF%_8u.!&w؞toGX}Ry&l8ba{u0?a`.$^;a`a`8E;t^?/_~ȯo˺͒}>K.vϣrsy9Izqpleއu(sd6 0iLO G M;^tuC9eB_\13}Eb Wu[~/~C}hHzaSP-&bwcn7",;X拍++IOȅ/ Ӊy~M0pdb5A:Ņ9cp8|њ>;6 |1蔫1,8gaƗssL~`\q/<ft [wqǕ'4skutc_Շ`qCqssZjt |~+8IW~7#5v#u5m5Ŷ7G%GY"&nԹa{Æȇ?Ĥ;<  3rkkލ.xg#>tg÷Fc/:_z핿bü{'\M76qLp{wnnɺk^9=:55OǗҳqm˓.r|c<2 0pqƍ^ t 00 ^-{{1Wnljsxx>u-qq=HZ0fAofhre&00 ׍ojޤZ!ԜBMyz1&nǮ%է*ΚB(ŷFSa$Y 09曾1LZ–XOw/s CxͅmXqFstQDη<§6~((gΎaލ g!bc0;[1?:}j>\~mپ.8"+D_+cqG$G~t5X56b$ _Gu7O?1Љ]xo=ŀ1|b˱-\uZKկ=Vy/>wd^;4b\s4s%nҧ#~̱׬ngEs pX4)Sx?4cvEX 00 ey׽_\la`a`a`y̍Ǔ00 , x'(}pi$Rayh+|zJ[HҞ DSv='(6f_5 )z'< ex[vc}1[OQH^>ϗM[OuNl n8*ؓf©O`\:iכ3<؜ r҇=8;Uǝ.ǿ'O}b/oaGkF6#87k1ÌOI 8Oߓ~Dntk`Ӈ[ 5pc_ W?uc ć}S98[|G ϞÇX$Nqζgl퍱"/q4/.;8Ŝ#‰>; GǮuORӃV:^Az6έݑaG0ZG?˼̥I9a`ɀ{}1iP 00 ̀Oo8Il/͵ruRWGqW}EzvvT}z1}XOc N|7j> eЬ ŀª7TZqVSR>Q5OORS V6`kL:i8|ba]!7xb+|QWQ>Q  8ٗ#} aCO *F~I/ǰE709/1.c|s8g1)6~ ccת#5Ҙm-LjO\ďu}y|h:O3G߱} 56-FpB\ +8Cؼuvt7PkƄkC1^P>w<)9Qpu؍ 00 \\a`cOO-9Mu<I88|^ɓ۵9%w=n'_X'xvr~=.qoj|g}uv00 ܠ (:VThԈ7R >v$7kt2Ζnk]?tz]|xȆ5/l9*#&=_c8_k5sƧrMuqqšl]et.~8ņ䗟_ìxMRl劏N ?[jӓ3|tͺŚ{<4Ob+GM 18ⲣqN#u Osso_|+i#v^:a f߸'i8Ϟ*5ڇUZaGKq/kfVƉolf/>ɦ=0̋Q|c7{c78)kC_ } fkǜղlwyMwm׬g\~|0:GNG'|i$ُ du^ a`a`a`a`a1ˇ}0pl**jzj"¤h)R7&' Upi ,xi@Jƍ$FnUOb}OP))|k=ߊl+Vu3t5^+s=[5y{ ߾.N×=RZ}>IO>f<ixxá'Qл[<>z*?K5zUEO1 pzj5 g#pчiݓu'8߹(^ x3'q{tsŇ68‰#sj夏K+8e9GP0Ɠ>l?yECǺ#a1 FOl˷> q_s`Us҃^aY >^%GN5zt#dL_:>"{&WaŘNLO>~蛣/,]$Y\O¯x/s}{oxl1ٹMރ*Kđ?S,>aSp'ǀץ^]^Fa`a`/;$rXN$xb׊p%('Yq6gK~㰵vŹQ1kπ}<(xN+(so1P#1RtThTp5Q\{- pX[7W)WgkNWSXBƊvsIVCKXŃP<_!Ɯ< \n˿>Q?_𐊷0)+`[LnC,Vk~p[ IkTg[rd'_ܨˁIMDc Cˆ|YX%Gq0$/yw!|'=r4hv7)VFq`?p7.y/)W7+|Ӎ=t5qp?|vuKʅM,}F zKէӹfo+f>[9_9Y>8nRAÛK읾8;KXKWL1pqwnIc?_No/b<Ix㛾|)GGcB+LJ>[/ktÚxD[nŭn\ͧ+'tͧ[<ũ(Θ<K_vq:_G+@+;s ͊l1 ^7f&#)|Ӻa_#5_7Ni]{(vvbYS}9[s4Ώc6p?,:ˆ5Qr+&]6M%a1G>3$]1̋M:ٺ1>)ck\5y؝֛:ezٺc[Iϑog<97|M:o9 5.ӧ'=[#0[#.ro^[y&&<o.Ώa`4 v45@a`a`a`a`nF`'a`8:" gk"W7Y&(=1.OD lw _N$P|=AW x4}S `'xLl>l8!4{BVk }=,("o1?oטǫ\LF%᧧qƟ8 =1U8 n`s+6O}yӧ;~=׸my!O1>q'b7Ljߜ+|o~;G&v;_չjp%vՓV&8-x#^1K~N)^ tųnkܜܝm8o|kk|w^ͼ\a۸K(Zׇ V6'O~rCO瞘8]?o/~wXdXY7gM,^C' ;2 ^S.A: 00 7+7E}/;W9&Aq3O>cwYu{>Obo7pWs6յSIq00 s̜0pS10L#)!++nfWEO HN:|'lDS4O+NG"4]\pjlxzȇ9@A«|Q%4Z9H>V<Ї>t[fksK{ۊ5ռ#|Yݍ[' Qxa\%?ƦVjs ggeW9OzO=pA6a6V\ tg+5bݼ#0kç8nnq>p{-=%tSsC/kTy♟"`lyo5v8|k}͎_^x$+.7nm,\eo= Nҵivš۾Z8C H?~?}{NO|ۘwbcg\:&o IDAT!3Ͽ=_͏a` Ga`a`n,zo(#Q͢wGEΥ8Ϗݵ|< ߛ9az207\O'00 ;*L*`*X+*Vl46H }oz(Ɏ5GTi_G:k+~8O7Q\q|AcG/ll5 B.rdcƄߚ$W BooX.Dm93?ʅt:^}vhN>3_ًC?[Gcs )Lz\\eG/l]/0W\~UgoW0Ok:L?Ev޼>6b9!..z3b'ksP^|6a9~4N'ĕ:6Yn-4b*lQ O!0ϗ8 nüfL໯ݠ͎.S >5lԷ=cOA-/:`],OAyЕ-+x{R?lG6&=ϧ<5y9ODp@ [[z|d k-}d?c v3ROD1ϯ{p\'=]6:7>CIp„O:b:7űlӁ WU}{O_x/;{:b:b'Ǝlwt5r*Q G"a07Ƶ<|þU9"oboX>ćX>lyXC=>^B&af1p '쾢:aK c"'ecaGyWƚ1{39~^+Ogޒ亊6 k$evpŠy-# +e sïgۯX]Vuwf:oO8#͍K |~WۺX]0xMw}|meqG_<;%bs׷tvN=8}*,&tgos107ʜ; ɀ^d .4EIKIKJ7/(ɎX_aO6bk?nNFBO k(tI>} mX+Ɗ+y_l6v taho`>ח(Tz>s暛((M`2}Ꮔ=+ Fʋ>.yӉSVaz{gfbu?~#7,ſ]tӌ ~m͍ z:k1*o{ۚV$>wAB\b_\mALc79FgM6Fѿ s!qC:Zu\׸/Ʃùb?uO? 9eeZ+3^ *VԔ\j)6s{l9_m+6gZneb-={l׷4-le/Xgl@'1n͘rMknqðꅧذ`ͦu->쵶˶}X˞tI' \C]$ᰗ]$^k8t ?|БO74Oc- t}qY˯9?X7VW⇋;^3&ln+l\waOrѯ{b4Ǎ1z`=䋮W^]N7q[Űu89n򅍮ƇI߼׆qtM &=΋yrwxF>h-8\xa`a`a`a`a`Q00 7\]W͇)t=QCQ7pe||x@||moq$_r$/;ң7?0 u=ӆ%ĸu{>=~щ:΂>윋Ϟ&[锣3柏תv|ڣ';0uTtp\ªO6bxŒS_n_c8|8]gw;3 Qqd= -ˁ8#5^s*!`k biϹ/O\퉣'={,rFȟ o]##GW F>6n_|rߺXp`} }{l_=q-M?=1Nk\NfscO{'?|jt49&7X]ls1IOǖ t&lpb^;Νo'Z ǞxW|n]k` _FqAn/7X\k|ǘ::z'y\[6_yyɘ*b~Āx.EtuEql 0>ayפDڋ7 x߀xL [:`^lFa`a`a`x ;%λXCq_m{'ιck3pgԵ=6Ufܯc0aeYG€e.kkCbbh۳Vs1SW نOcM]z>iN/#+VgcH[!o8=kjXȬkb7]yTϏ^ C蛓[zb ǖHmN7Sl9ɅУ#޺1;B{D]8YytC^uY,zaX#C^˟^,{acg|烝VbM7%ũt+-fiOl2N~j֍ǯ|aWX /xi>pqn6i.KoWž?911/Ń\譾b=Nİ+EOL9gxt#5W~4vwX}f {9]–YlJ00 00 00 00 00 00 <, 0PTTp~EŞ`ub'(B*|{Z (J~W/ )A׾tbnϊcn 17> Wqȋ,/`O o7aУ^>#lyr4lOut%>͞0my ǜ'UD>:dQ'G7|Y6zzڇkO,{{-\4UɗS_o#'VХctʝ_8+x+9}X\ ?ܨuq K9v /ze[Ӝx{2 uiO<7;sǘ.nC3vF?69f5ӵ;OibC5laH|X\zqkY8_W.*VUUTtXU1Sb©;_n,&.,抪m-;EdX6(S@gK6}>),E\h|q*$#u|)Ω":nC|āCSnFq][l~;5pѵEO9ѷNN~8|Hv-HOEv Y/?.ą;>uxc/\k'09Ǐ uv|>qGyXd]cX7_ "|v8oc_t5:@ӧ}7E>}Nc7uG'ps'':_uc q޾9;\| C:ֺƜvNl?SN'lZ[|M,qҡ/_zX#}R sgO<7ݰ"/m1|G?zn=;>#k:w-l uϞr݌a`a`a`;cn{jS_}:X~bae0Zzg;Y (s'3a, BbȂ_ }0+J )875l05c{d-faBg|EkxoI_>H:aC9 p;=xŦ?pՓc˷fOɆX|P*|āXaμo>i_ل=r_Xs,=wpc?t:?n!^u[ǘ^|Hg';ztq\W3{1GL=uN|da`a`a`a`a`307gva1p80[f τ$U F@< ˱GtWx&gOOW|㊧G\L+dMs|/W, |)/^z{~\պ rǘOrXaWy la˾u>Q#x=9#{7 9s=/:ܞAG~NVOGao,I&||u8b8;##Ƥ9]O ºH8g\c +΢_5f]l:ZfOLEIzMx+VOk9}ٓ/_n8Α=}é>Mq}B|q#z8w:Wױ5'`:sʓ8olc/8t^k\L¦5wMt氵&]O=?O8Iavq1~盭kȞk(Μk\qOc.^SW|5:vMt7:wCİ3 bGB&Np-_z#00 00 00 W3zq}EB4 0Ӈ\OǍ |="_|w F~qt]1nXt47\ =+I9V`Z _ֽ^\ -?-=u^p zM|7GMO K|\nM\ɫkV|‡7G ;};7:/`Zk~q`eOӍ~k^ŽIȁr7k?' ,b%־5g{8krw}/7k ^j/ut8{g-moJ7Nw=g=/<|/7zֻb\nk\Cq令Jms4 00 00 00 =]Pw7nw_76]s)Cv;ơ{`]cl/}/}~ t{]? ueg-++P*BK!=EIlI>Vd5zk| =5HjKWQؚ&N~ҳȭ+LWώu, O ΧۄN?nlO%+pke+X\aw6atdc\qɦN+V}Xœ1b,F6[á麧gxՇ{ ?ŗx;'lu3tش&zaƆ7<6}8(un2;Nn}(N˞}xH5~``fk&׾9b5~Z/g:I5:7 9݀b^\O.|XO~_eZ̭8ŴO:]KO/S~~00 00 00 00 00  ̍2W20@?=]b-p+*@܊t{5oW0i\A[SDS.~򓟼)VGO8M')V@U( ub:DnU,[cZago^=C~U ._Ut}m+D ;yجi$`{| [†W,|NX򅣛Ŀ'~gJO^#uQOG|]'8"_pc<%8]ԋI]'0[gܮ1ұf#+z0:'ΰW,^"q<[ٰq͘._߽.֛I.8c_zǺ׽8\{k lz70#?A48 IDAT-.׿9#XoaCc].9ў+ם1?+[>'pᖎƞG䍧2%v݌Ek_|W|gpMW>{cast?7_'lဝf̞ڌ[x=){.na`a`a``~~76Xlq}[󍃷t?tomu='?oW??b]n_]\cs8&00 ? zhczu:G9|zt*6BG,˫|W G*K&Gs6X[ 0ϸuy<+<1/V\ktCqx+/҉|͇Xp&+81356:K:'^j6sbcF *7;{5pz|?ǟ=>:?'tI\_t-~뻖سue~w>>z:k}ڇGa10I釁a`a`47ݻ{, bg&q*ctvmklz^ a[qv)W+u&6{/ae.00 L>lW@ALҞuRJs?֛flb&;H>ڇciL_c gtk w؃KDc W)Vxݵ_W/xK>ѡF: eN(|-zq!ɯ1Z9ѱO/gxX_v9[?˅W]1-lzvak}%iKOn{s?aKOyuA7ll\S 6OO vx0Kp-}<ڳ^[5>%Z|s l0>iݚ\A/zqbG"vZlEjg~{?}{݌> {k\˿>]>:֭_/&?# ޟY+ybʇU'釁a`x S܆d窻?a`a`a`s307ʜ? ŀB0 I#+*^񵂹"(}OyEO_ xzDO ˍ叒OxQ1>REd O/G~7ErNG,Ybҁ8`^&4+FB^+6\u" b8>`5PI\{n!l-)O85x'?O۹XX=N1q.=b'pA9◮/|ɍ}O< 3]ͺ+,|)$~ClU+ϟo[WpNs:jzs9Y#-Ϳ+;6bF.ƙi&[>%>7G:|_:0E3 zr'?rzu駟>7=J X5'UD.˾1=Pog^nN~3n\3ru5qD_t4Aŗ8œkhcuحp6˗ucg!&pi_|G֜ƿ=>p'nupF| 0Xy^?ϲǒ9 +kxX{@ug:=d{SrHCvݓ}[wm,O^]c*ފvL=9at ̍2r< =a)IPc?+BZSÖ=̊RWdWTkFX+ңCo>+vӳ4>àEf6rdaMOan^-.KbY7ǡxa7Ә=9=X7z Po❿xg_[0!Þ&O ?2?{lNb:XgGe+[Kᅭ= _0$ưС?uŽk'[7C60ws'A !ă|î˿.C>8Oӹ`̇Ƨuc|Xnj!^1v3[GA4klpE^8jw  Nc, iG}ggΧF\Sq@Ē7Kn )'6bi;ɝ؍AFl3 1xu>5sowo b& ̯:o[oź%9 0pSM IىsELՍߏ%sb&?_u0gئ6?6{_r8)|iSC?}:> !FC00 <8!݇'J}C]y(VƏ 7gC2֊ fNv++1m]{^,VxhosGG|O7[gXe?8(V=#\lm8rN1>;5qo?\#qB'a]|l>_Lױ5ٚ| kϮ3_u Fa'ut ÞG3}=?NI'gc wE][tkя7fˏMĹJbɗg &S(50i{:G_HXnϼrO"v^>`lN^/n_\8 :5{ԋ˞n93Z;2 caM{la{~y3sma`a`a`ae.D00 7,h g_gaj?+H}mf?*V14?6O_іo_Qq(G,V9YSg '9VU0;t zH(-/9O|`Wؾ'kg9'@G|]ܘ%IĐ|). 1C{‹5q{b =sW8X=!zs&n yb@ȑ?bХ#}e7l:8zq݈E^wXŀY/6ދ+=^ApJ8pZ067nkÇ'|g<з]y  ]xʪsEߘquM=$=`}Gl׿szʊu犟1n>3EgғaeF.nQN^[5gφ_`J'_x&/s>zmy#=r$׉Y%l.pZeX_//)5\cv^5kmdĀܑa g ~?&xk1: -_t|>w:݆Ὥ~ŚmL3:eNx fn)2*DW @P@K\ѓ(pұG;AUA/ϯu}Pc䗽9V үƺ?cgϊNOq򠯈,t*ӵϏ2W0˕Xݠ`1'VL8łX;nno.1–&{ 8G. r#?챱ŋ'٧ f fœO5w]U_nn(f첅 uʏ=M|yO㑽>_bzX5}aln5" 7`^n\|-36~?|燍kN[c+>s}X fyѡ+?ɋ7c .qa'uӍbtub] 7>~F/_|muhޯ/8? ^ɸ5\8;kk|jz~qZ5&9}g/㎈9úm?00 bC?󳟗Lg qI[l'a xJzj6kŻU?q5vv``w^>/U/:5־99}+gs207ʜ= @Շ[sp@B%=:t&lZ}*K:=m÷5b? ;?D>唏tUaalX|a[ӱ8V,Vt9[~ {CzO{[|Y: X'ٵ="NG0[FbMOoo_}Þ(ʻ@|8Z/s-i޸ziOd:B>9+hŀ [~f^n+L X+V`#c- `0uE1ˍ=1@lhu [n n^/=ĺbzŷ}vs p~ۗu׌ 00 00 00 d`ny:Y QUqѓzBZxTDPbER鏸 bVܓEYqknDpjۼ" :0caW1b1L0{"LUp `>- 5ya;"^"G8~zꃸ_{2 ,[s俛\Ëg؜{ʏnX o<[%|l}Xrƙ׏u~6r{088kاgST:랼?vtsϸY =ġ?ܓaϙ|H\ǻk 67|u%80kٳg{J {{88$KΫsqݼ`§kX|[x#}q['>[kf}9VYl! 6]k)?00 bZ~_=㏷(Iea*}\rn½rxd|]gqu^+/a>&c?-}wq(!wwwue207\ a`8 xCfXaCWU1XYUq.*n`O\|WB_XѓT VSgί9<&|B)XnBOE_8RUags~9`^aZ7K .{キͭ؈ 7]EGG` ;r`_H?-yw#3N]nn\PH={زXްχ/<ӛao׊'س'-rdv<5ͷs$aOv^sv=;Xk4n,0[kswm><^0:l D'^pf.kn?[N8tϮΕm)VXgo/m:nw3a>\n~++'qcX|u/n* :WCͮ 'ri >q`Q Ӎ 7^g&1ı.w:p6:f=}q{&}o@a`M: ץnZ7?Fa`.>?}8.1s_YVlk7Nu$ٜ;ſS]'ĺMS "mxa`? ̍200 PUֵÕ`-]KHPN҇F{naϸ"Z/~i\9u-|DZ~}EU?| ]?٦F}qH]Mv//0ɇª n'+tO~_^烽b8q&_Ål[n6>N׽Z'\-Zc?ƫ9[׃dvtk85&v|cR6fW<8{7@oʩ5->Hk|qHWt_bLj+v ]W|g/V7ku#Vxͷx? O\a& x{=&>f8~FYͩn$,a`a`a`a007XK9A.>^'r#,٤'pÉk Xȯjb5۹[<~ţ5f_z.6nacOyI7azrmeyo58_|Ŗ<<>muÏub-FsxJ^s1_0BخHO==[Lsӷ`M֭it\>Sx+?{lI1 n 8i UUƣu[<8 U<8-;-:K3جZȇEoz7:|@/u9v̿=bL+no'r$lC.ي/>8/6wc+fNnVfnf .a۞eί:+{ެk6Xʟ>^ųG&^LϏ=q ]t@ښ_g}9XӼ/~6|5DOɃ;x|M7bxqKkI IDAT/lᓰ/Bk#{kδ5·||O/ ^+[븃9uKRL\w`t[߇ŐW b#]ş~c={_O~n_Q0pI 0]2|&röGa`)q+kw/}sU>WZuwk/V?zk_i}bX̻\pn|s8rv,L$WPTOg\31gCWQV_E` 5cpVϖ(dW:\UWN?7.>^%tcq؉ wG6'qNK\yu~+I] %VϿ}~gɟ`c?s~n=CCO#5bq7ά6$bzwFŎpDZK/s9WXtBR|Ӂ҃Sncn& {-Y8O8sGX֋U/<+$566y)&nѓ՗9]I?]bh:ՙaOn}w^z7^þ8٤700 0^Idc00 \>G|詠>\ ȗ|Y00 00 00 0p,k1z00 cLh+2+(**>*+t^S"4 z#?HzR[?G^URF,k"+0E&O\Ч{+rX"&)|CGXpذ8'>|3u60سozpdLz…'1D:`/.NIOPO~qYW#۸gU}ka q]3??8F׺qńSgN: b3'qe=su IJK_{ :K<׈\ٹf65[|kM."^gAO's{ړuOC{Ή댼؉:Jd SOe'gbl+ܽsFf.?<3vt<؇O.l\rŤǏ ۚc\:385ŵnu۞"@Xn8?+QL ;:k#StsM=[>|{aoYx_LcyuɏlZ׳vO@2}x}a`ˀ_={#=wFa23/'o|?}θY}g>s>y?Ct00 ÀKX.!M>ٷ9Kwk{.Qrb 0h k}SU ^X# *3~=~CqV!b(tQpȪ_o bh0^OC8|۷S1ľr =7+˝|%'v TCAؚ"I<=kS*<.: 䝡8q{ǓXa?lx4;kbA.it㊾G59Ŝb Cg=vv]O$?roş|r Gȇ| |𫕃9ܰ@oM-%[bXNa˺ő#fr/>piݵǯ'?lV՜%g7]ي-&¯r4q)':3Ĝ/|UXf׬g1[^MBŵOիW:{6g0g׼7uwc2 ׵~m}&3tg.O_}{00 | Ǽ?Id8H1p̹?z(ƾk{U?oO爵~)־UN}]u,<z s00 +sƌa3Õ?)85 ZP=zZbXG [~@?|} k>߂֍5G4\M1LljҳNYtUh/p# :]b"c/lk8W;l㢸kN~嗿8Ћ_t-v9پ10qŠs5ٖ SskƤakm +9l]8sƫo\pW:▞1nygO?j^ozgS|<_gF/,۪~{쬵_&3&9|,ۧc<)syIx[sfC.ĜֻWc}sd/~jk]z]o읇=&l}:1LO? u^>fdNÀm|rI7uUsgQ<|䳓p>?\00 900 00 d+ EUp[s'sїWcgSd>$HG|Yd#k ^bu.؉)=__"хAץst}:Nc5x:ZSQջ&5k7ZeN<:;b ōW:t::6b17;|^nםFʓrDi-]׌=bo%OM.5:~`C+r%kLYg3/ O˿[ۧgLx_6zk$xkt I\a& xo~62 cP~F{mߓ׳g/_|b3֟ 䳐WFa2IKۛ#ħe{|oL?߻z>89W7s/)ƹJoUgmS007ʜ1 FEFEIAMe1Na?p*F# 0*bZW=kV@%la_џo{ѰpA {Gїmg'ubN'%24~zv x/+v>|`Ћ Gٚ1rÙo]IFo>+~ҫ`O ˏ?B^g,3S}~ѷfҾ1tm=78K:+?a^Xr>[bz9elo&[;-}zxqSN?[|AY?1 ^scϏ`%w Gw|q.| ^g`LMc8&7|ڄ ZᎽXnrkN,":׃i]vŢus[Ø?5 00 e1gύ|v3w3.cyEuˀrew{^o1w}foW!s|qױ]Ź Sڔ1g*_é⍟a` ̍200 ܀>(iȦzECU=]4#(d/X'FCXAK賳Js])ڊX C[Nqo8Eqsaæbkj:0Ow՚>]N҇)zzΰ}s6ٓwmkֳ65qB7u6zmNNQlz+c9#qAst qg:]6V4N_sxnŠ{A5gw.󧏣z+]-[~ȑ_ܚnʡw;X|00 00 \~?GN^Iia`Kd`}xB4g}:.00 aF00 <@%>Ohn ^A[A'X󋘢g)jzl |W0jL܈PUx "'< uhO =xblz~ԳgKllĕ;OWX!q>XxbÁ+TD¯.!vOn&>C>g̯׹[+>Z7I0oGZ':k=5D+@ܙsXZyg%'س&2N]|-?bX!=Γ<{sG!^|;'>w_^?G>t}=T_o$Wc૭%=u)|birQ+yz?V|e_~&a5rG@?1dيA{K09Kogʿ[SqkO8rr: \ 8kk?~]f͵>yO˗k^\#00 0p9 y>2 0p=.=iӝ !UU{lqZ:9qsN]ñqgzlU>ϡkfy/]s\Vc]g< (300 H)ƤuGKEWKExi}pfoߘ\GӃA/eߺizML:cOe=]>wc a⛎5qãO_!饫׺Ȯyvbǻ`=?Z>-^>?c#]cȅ=zÁ[FA7;{or'ݴnKǸ<a -֝u|5wO \'lH/>^5"'b^Klb?n34㗈 aΖm~~׍{[IxŤ/O=?wu|vsb8#a[oO7tc|O}R^13Y 8n7p쎛MXa`a`a`a>30߸ϧ7؇a`_ ̍200 NO,5$ }cO N8f++\I(ZXS1{ [ ERbS!>VTU`GDNsE_XOO )MS^k֜'X·b<~a}1'|.O?\5W5ʇV1لoBl`'~.v|i 4ga`a`wȀWtrqP]*bIsK}TOU%b+pjn,6cT!OkpT(׺56n/@yxW&W1peB7n;: 66r6J'. 3o_M$~;WH'nыk|`"댾\ݵ{|7N9t}l߾=1K׳cCʯGΰk8K΃O:!yȑlDٳg[.Ɵ~醁z0|_?w1ܘ)c1|8L9wz Q00 Q~۠2بusCEȊ>j i^\!SiMN#0^ "XJ5c1H Ϙ=sгIJ8ӡ'ا0UM>+[^\#-|[7VX7^}_aEë5B9l]OqXg)!fz{k߸aF\Z!aӚ~:mSNΓykzzA|75ٞ5w&a[tI8o?~ IDAT}_-6={D Z']|#laq>لٍ2tc8/&:KrpZX! la= J{NE'|t?j]sdI:3$m .n몸z5-|}3a`a`a`{ԥͧa`a ̍2ep쇁a^1{Jb^qf"=zIUEފ~acO?QVO307ET\OpFIQsj^5{ZQEVdWi.|'ɧ}\Ó` b%`nݸ0[ >pHѧsOxo_;'|w{BF ;;;OOOgX\񫗗bYggNm˦;APՔ&$!D4Q(MHA F ]H IBF/EtBgߩ{ۿ5Xo֜9os޾g}vs7ns.'q%>A7a_!_>_zכ֔y l:Ně_1~0[x3>X\s5օ~MG|;{|:qϰ^WҊ[uI&^r"b#? =59kko~q3n|xș-NNqĭK^}b8ԗ84l: }zD | }歇X$.Xt/k%BWNdal_x{+[ob'O|C``00 ``gwVe5۝[n#sbj'2snOD>s,v,|>`w,sc[zs⸛즯r Ff#`8p1`ةJM4)H \*l*F.5VAF vB{rxV'=1íNaNL>`5N̸qlL,ř>ތ{]{50.~7 G'c=iˣ8h-يnlƒ1GBc0c7Zc;789aCW_9Q<ѕDǁy1tSQ{7f雇!= /kC5o]ڃ&ۍO揞1qُ۫`DZ1~wㇿ!``00 ``03 [se-n+٬vNKۭn[y?u<f'Xey,q\ka`(s< `@2J­c]*"̱(N:*^jpa8VGcLa#punCWw.`\T@kLxy.&+6|7<@ɿXna._Iq7}sQXc6 8{zq`8H_'M}x!>Y9Sg4\qٵ1ր]qg|.^196ױM^9jqˎV0gOϘ#19<:1ߜr~!mYOˇqc&}M#p9":MNƒ54x"s*&l> N1;39;Ĺٞ/{OJ3Qpxd1Y?y893&=jpRbKLvr"+18y q{1 {G+|&ş_|3̹XS8lٰ-G\%ַ94(``00 s,Ü9oWangg/q3{)]\|nnk a΁"{ F#``PdTtT U%.[}]عdkQMR]х@ F47ww>byB(+X8OA~!6˸ӊb.|c`_> _9}#Hy>bNMvWTN_+ڋ7'6Zt`; 7(9N\mk8w#{qX_q]:#зo|S} b`j-7AW:[蜰K.w솛8qf8Ujh!~9GpqPnP=:8W%M'GbOO fˇ`;q1G>ܰbޜ=@'DW-l5c眎q"gxcZ's'8]In2;; _Ƒ{?iFh:襟Osqg]omQb5/_SlpT|.#S2`aUmG\s{p={ZC``00/} &-No``7~ۭ7zc>7HL sgn|l/kŷ gJsd88 !MHJq.&5}_Zb#<of6O GKG#BRDDOƟ1Gs8O ˾i<;}ct40m>谯9e/vzٳ3Gd*`gl8\>c;|yM]9Os;7 oHxaaō__/Ir øuʏ8# cA;dVL|gqu+> }1rb2{xbuy π?s!+V2쳯7/S\tE:``00 20n]a{g1}S:׹SN{ⓟ䆰ַ.nzӛNĿֵ5}7|_W.npLO<`뷽mG6dߔ 8Yۘ8W"Г<RozEO am%= ~( vl`y9l7u_⶟;휋}ü~``008 1 !`a൯}xQ*))^?TySrO}OO!:Y3Xg-xnrT|o|4CO>y'>93}QPESRRQԼ0N(Xj>0MoG_9 |\h_IGMD`_ t˃q>}Тn|)p9~$|zI^:0ũxs?1:餓sp)[\!qկ>@B}96̇[yWcKf)1֍! dg s:ֈ׬ӘH?a}ߞfgM=Һ;N:*Kl"K!^Gt}/HiaϖL}t-_ӕ_f|f 5ዎ51ψG{Ы~l` c.z85Gyƍ3ޗ;f<(~g99±g<ļ{ ';G96Xq49?3?3_xᅋ=iۿ]˿Io~W:pl/[:kz͸ %/y=y .nw]r5bݠ4}s{mf7;Wv3^?{1Y -k!g?M=o S-oYu{t3\'hٗ:IwUzw~w29o7ĸ#n`wԷ pЇy|D$هwpAr^|0Yz/؉=3ƵQw"Ƽ_~e1 -2{>XY+c 1n0lo??Ww]+7'{&M&:ŗ`Iy{ފe]7]P<1Y|s[~0&V**2(ԌUمiTJWL̆nU '_y:ZRAoF\1Vm .8ʹ||7^ D_9M!}>-ixؚ rv\uO/sš/Z:ktE<}g}02k~{w9{?t`jafHqܚ&ώ2? -7}&>/~? _D/}i7)TTĵ'(&7 0__|uc>OIJ;| xo~}×2q`D`s'B#7ׇ?33yxe/yCV+7x:鳳K/tq{{|tݶ'I5k^gLgw< ``00 qZ``bV7M7SzRb??яċ_UY{31_gϞӛN~|3)W׿~qpP~'n_@ 0E 5 PÇ| XØ=9/I>[NO|pn޺ &l| ݊vwg}:t=1O?+[OsOP 2&f</LE>At{'-O~~Edh.O`öX>zZ+?A/u:={rM_lgpgqZ̭pԾ48,8ũ7t`y*AĂbؘ?>#wnIG_1 ~E|ktgk-] }4ڳn# q-\Oӊ{z-Xs 8x%^x$c9,ׇoP_rų\d0/ph/E|+BN^b7'g~*}Ξ6^q}ZpE9Q5{׃5y! ;9.4;?/;'ɫ5r-f5'_|87n}Χ\ bO#.>ːc@ō0n8$?ȢBZ oxts mF+*~կ~t0޷,85eG0w_)?+ x/=C'F#`)?s3 N$\\tEW }&\|`__]+x"yЃ4}87/9&zֳ?/bz<=uCkv?yE޵w^v<~]nk;kq;<5@_y#ݩ=|(``008 ڎ07z(WcOh'=i:qQ'>qg?;}y>|dz1/BiiC(*(*Z+*(VAb UIԊ>pQ"xj\S pTۇ20`C[ sNk೩Zո~\qH/e~̞zZ<0}y6xxO|WkLɃ 銡_b-Wk +Nr8?/9:u<ᴶb˿4|jt;ʋ?:n4\`ܚ@.rpS=5v< xe[brpkA?'Hy;[0"oHG.օ 8⩛IXKr<抽8ٙgck;p'ٖ[f{f(y@0G\ IDATj4Fp,'G? 8cϿK57'0e/FjnI`-#rqgfLx#y0Yn+qÌ+o9ʃ8`i<ؗbe69|98-[ [h8LX?]zu1G̯v}#p,=׺ֵ7+v׽8ӯ4}X # 뷑cVs9gcޜsKrNwL>z 7E|Q7Ȩ+/BǸ1fWls X-6ׇEq8WB,>>\<7}q}_s{W拵\s s>׼IW8I>#?^Ɯ7ޜӣϖ>o&i &t5llgY>*q& ׼}zߎ5}Ho曛ү N0lͻ\l5NK/ЉKbﵢO8qc;vµ |TLti/,sz#_5SxKczdn;yҬqz1׸ӞX-N6pʭ\GHE'>oح%9gke㐽ek3Qٹ\wqe:.ct}|m_';˦ӹA``008 V~``0pe>[6g_׸5z.r~*s.\ж:``00 ``0 \)d .<}fYeJćgqgҫ3I:^מ$C9OXۃ >PL)G`Qa7SkܷS0ر7MW3"a}l,|' (>TCߓBG=U***Wչyc$_sS.'.8z8`'̋:KEf9/97$8x}O Gl}[Ll:B`co+,sZxS0'^W\xOي^3vA8b// Oc:s.OQ|Z;z)?|ҕ =y$7؉y;~7 ztss l= _XG:l_;|y;\ēךRr{8#}o/=8[|5'vW(S<7ŋ0?s`o-9S^trexdSMK|a鰵F4{-~=/|e=#r~ZOCc/!{@f"X>ַ׻_/L?e1OOW[烁``0p8phd1>\SW~곳f;5>[ ;nv5u x\Ods^57w|򳑵xk|{rk{iyͷkY,C00 ``(3v`27QЇ^)/x5y)2(>X~? d(J*<*(1 LEHGn]>SxF^j.ي1zlY[q|7r*p79zo▞57k)p&^#1pd-ṁ>h޾n+/7I><:7=feuN./D\3#q,18 #B. _bM^\sc^JX3cnh'rϿ8[|t1[Cz9Vxܚ>]8OOnq[,nxLf׻rmF+2ڈ׵=@?``0p(p0d002|+/%gg]{{QN>[O 2NVeVܧO۳k-w+x j.bɥ_W6:zŷnFr؆``10n9X5 L$>1qg/}{_}lIK߷nW=3W1Q>PU`T kޅWc4N0J-cG_!7l盎9IŐJ̥#_Nc'04Rt-,qF1;Y;l<[b7yL|/^΋q9wqOBq|8snNOls^ysC\|/{I7ۇsae/bo1n/VvtcOG)b77r(_1K^a:[vC>[Lc)&ևt>/lf>_nG\xtȇƖt{9|ed8dc4O?Mka\CIϘ>[.Lsai ?=-lG:g3_yx}z-cLJk/}Kkz$OzғX%WJk+]umFo~}U9ͮ镎-z\Ia ``0|<?G䉂(į8"_}*WEO犜`PÊGtկX<,GZӧ[5.N#y0\OӼ'+wo%p踁Bt 8~u烤1s5O__NLk9iO!8OO\ټsp|lqkOw!ůK _1/6˸ׯ}"b#tl o<˛=[clSgE0 /W<;|:| ×W{d s|o'L?]h.p..b[ `#F+1x&$.`//0<ۍE]xoT8Dn˿) OYXd>7:8Ͳޅ^}38 ``2h/~q-y*=s/^򗯚zJwwOon|;s3]?~t6 v<8?zt{S~v6?= ZZ9og1K+mX1os;?-򔧬 Zb``0 )6" f (w>P>I6JWD7|l>vuG bi̇Qχ.ñ1vk5vwq8 \튶英8k  '~+v\xy%}SWLVl/w 叭8ϗƗuя~pL(IaUsMfũăn`/H|pk| Mб/ac/~{f]kO;Xt3=4|4V锋~ }o xG<[-~vʍ1 [qhHG 6_^ru@q=z}R\07_3 cxuo Q^b5x͜}{q{b;PLpF7ZZ#9vyk^x8'?y2ZZ%>mkg-e__Z|\烁``0 t . __35_8s83_XMZڌ]Wgkc[x53(ocIwK̯Im6׵8\f}lF9X &p6k^ͥ[1nrVS|WVU`tܫ]ol3Э]swӝǺ6خ8``06?$m13 1 dn4Pqxͨֈ"zRIlsW>i8gnCg2<1saaj;k;{kHA |ߔ3| SQ:vc&_atXQt8{/'NGv%6i|#ȭW:&l*9cKF~q`.\t7Zyp[v]5Or]k4tA~] 6εxFs~`-a92/^thܜ]7,GL{q{_3(trfgk¶O6d00 Ax#`p17n79=5t\+ˮϺ~ZK׻6w/40 ``00 D=8 wO|S}{7麆gu4ёEXOO?^X4膉.l7}GR*EHZEGsBFxRBdOt0xm\q>;>w*v)d)U`(ҧGiO0޷=<->;g%qK`#p \닡'jyй ?b18d8S [zOcueK/aұt`S|+J7z:ǛĝBSᗞ=F7]O =a>|x˸pͷ+si@~jqzQ:5sqɑ>ڌ+Z3Ď|W7~%LN3^KCgUlbx| _þ=Ř׭y6&<'6#yw䃎}h?~kGtHxk\Nxa0T\,׸5Ӝz=98tq[bo7[~Ч3֨ \]b-b`YGtKpʚK׀qI_XwN.8 ߸)xNqULta [C7d~uё3OtYMNSNYQqm?:=grq8 ]gWUmy{k  Ot׾:M2gy\}_ZKo2s"i^0.y}罕Nz [/u?1Q{fUs6җ~^m3.``00kƍ2{``;G?ѩC[X\1?S_|ߠw3o+}_^)^?Ϭ' Naч ZMi(*BBS6 GPfQ*hԧ.q@p\mxuT,UL*WU MxsÿM>g-9Gfޜ" .< Wc~7t|Ťm ob+<1w}6lQc'n`à+}0GmKolntk/=ݘώ~);/?:^b&Vq?83Gb90C>gko\;fbj?A }7?;^s;W'|؋ -sbwNGκxͦo F.6Nl\LpZ7^sr9 ~4lcoqr6o[7cw {} Yߍ9bkt̋ l8bsbK —&$6lQ|BسGǹjxy#7éx{}9!;[Ń?+h-N:餩fZUq-t~`ڣSTl5,A6[aƀ]xBlgG>duxWzM2׹u-u_k~ӟ^9]3_jmEqи>v(ۏzr٬dsX8lE=Wkݖ㧻\7հz36t__wg A_e@!CT}߽o|W~e*QGj򶷽mVػ]rʹ;+4Ïf}+CZ6aGxa4ƞ>|1[z.^`/<Kk;1uh|\FO{<ӥO+oGv.vS3ǦS=7I=ӡNU柯|\?[ 1s\bkN{ ىC焎^Fĩjk\s1:knyk?~tÖM/,8a/<:8cX:w/LR>x,~c9x8q#O7L>4kbOgKM듾Xc3wcۿZ~[=j'&q\$w;aJd>N+J3 ΀]@+]w.28pڝtf>C!J6UmDo~ggDO~NwSΩ8``00 +>0~{s*vOĄ _c&~zϟ|#o㧔|< IDATߜGپUGOE~+B**>P79{Ro;_>4  DQ o{Z=J~0}Bߘ'hjxJ!O`ÏE}>e =i@,99ecb-M!Oqo˟Xʟ?<7.vx$>[P/̸zc\l1ƜXb+W1K8[b/}<97ё`jt /q1 =!Wq'zxj8i6'[Ǜ虧~XFA.~pŇ+\ 7,\?i OG==obǧ_̾Uh-Y;rh7{MlT}ٓ3oι,)=<)OGVny7`wz@_n[ nZq]7st仚5N7V[Niy,qFt=Øi008 \5Ûl0p P<3Kģ=_[Kof* -M[V??ZV׿9Ng?sٟMOM-N?NE?xOzғVlB⣋>h40jWUtj*RDU8%M/{OMZA}ZqI">4RB=7,DlىT5φ.ϗja**u*+ח /PMG'|ϜCcb?}q+4krgq}rcM;ǥ119oMo_~z-6}6rd#VŽp8pq {lec>>^vbbrw |v8Lk˿h\kIe9 Wǥy6n8y~ʖajt9 bލ goOtf G`Zb&ދonظW¸8%Wq K> 7[/klu\i7˦{<<{1clń;aĻu,fyG,^W,F47F[׿:frmq}*<]|_Cޯ^M7XyK^2,ۏ``00[nzj}{k17Hnysf.r/o}kO}Nnٗk'< ˦uK_zߧnܸ: .X<ϟosL?y%10&mYuq_O/et/ە+0S's&o6F₟NZN2i#}ʀGrE-DlY|e4?(^ ?Ä7T?=A|Qj=(fj.I.byMӸcz9]6t‡QQng/do>sPxkNɗqq?(r`˯q  kӅIيQ_Xg qT#0vw#N'=X~绘cq6\sͧ+ŧ|ؖ\8cI/Gs<ٙK~[rѬXa_E;dg鵇{?NZMSuҍYzj؛8wkᩁZ+7  ˀ}'(㩁nwGf3Ry?'|榳<Gf7>f&s9 gpuy?>;cc``00 {Qfox^2׾ՙO*B& ط틏7}#v7~7ofט?/[ŧ>)!nwTHM+J+8& V"}x bdlp¥yR3bTXǘ"#]8šIW +yo4B-D>+ۊ F_,dK/(!&vS:x6ryq†E蛇IG_#q9o}6֢pA@ntm\S6=|yʀRDŀ`KLr4OV~/\ 0{҆9?&_.>IϾ;)&OC1k#c?NxJ dN6G1Ob[7jM; nqe81Kq:k\YpQ/4x`O΍X1C 1w4ccb"x'ұָ/~>=zMŸ׈|K`䏟p`(^11;-rģqQ~gz]%0g%wOhrOǁ [ba^ ('"~xA|tv0`կ0jb<|t}}~[uYӊ9nO7 eGqos3\  H 9Rv}w^|X߻>N{tݽ>d< _t),~Wuo0``-xd?km?IJWk~m%xm6q-}-/icŹ{cg`(hDx2p|m(TTURpxI#[J!qٛwLG!'=`\aU .Q|ͧuBq\6V18|>+<#λC_l>޺>xtӆlA<;%rҧ+d#ctCtb;}fG:r` NΘP5GǸs)qqEOz>iM n0' #{\7[~s^t5NG¥c<}'~kj?zOĚK|q q(ݘiƊ9]1n>,~ ?ѳݜgt;rɧLXC#lR `g^X}⑇=\.7uV<1btCTOč\GX@#0ĢLvx/~tmݺ}hK!؄kxkj̜_<^x3IXxsdC׹*7ƗC̚Dr)tSV.|a(d.=G|sB3ΏF/)9`x)nv<s?mx~kt.=¦f,칍9 ~F|8by8X'͇И>=|H8w =1r&i="vBpeC'>cOc0CNy7br_Zu ?LvtQL拱@9=M`CXŦ/t t膍sCg` Ȁ; C``00 ``00<Fs6,̀o潢#'=QSX_St'+T O*0WY_ѷ^x}E͞ `Z& -tt)NOYA?+8ռ<<?y/h`8{:=Ce[+ʂ/~|T< q4̹o\]ט+~ 8ɯ}Xk¦#Fst<OoQZcȷ8%d>Ĭ\zR19ګpWt=%^0 ֱV.u#\|}kC/~%\2ٴg_~r"ĥ>*F.tn̑|ͷ ^7l>>/Y^`; /|k:'/VHy -Gx5M }Zo- BK]^k}9?^`o0Oړ0[O5ҷˑ_Ys_l5>oˇs}~pS^[3/^{ƹ`5ށ+q5N__ IX#?ץ^:ʧ`_|jF7-u{t,_朋Al{r7?GyY/Gp4{/^MfrĐo//nZO>/=I~2o?\$l}j ?}g/~~īH OcA׺I9&őyم ]zp,W'΍s_^kUq\D\Fe>y9ⅅ|qp[3h0\yc_ኅ8g',ya)?z5qi.pKGLb˾L}ٶ%n1+oM~23zg|m&2MkC' r(x_+ 3Ks>;0.?b-fc"L8tL~ܥ< ۚjIx~#6LqkNg005N{鵹k·``00X_cuk-N?5 ``00 ``00 P 'ʜP=  ~SKQ 60=͂_xOOx<sѓ|uW'/5`+_Oɀ ÑMp`|s1'Z3cL,WUV8#X4ŷړ1 }'gbppEGG?фܺ8ҳ}AwDl\D 4ɯ\ xhM͝uYta{ 6×حsqf}K/g0㊴iK_ raO5|]?G:b Ol_b_tkN_Fr07Xtyk<=sZMW ȁ?=Ƙudq#|ZG\χsQܞugNgoXpZ'SN<^2ֺ֞7}lF_8q.7p:d00 `' ~d_9~Ce@CKövu;)N[\i;uj8`l$t{Xqnx?1oGc00{ƍ2{#``B_QRaQԘ(%])H:aC}PbLՑ Ɋ b`_?aU U0 ל|8l ى.=M>kɗ}vb#=_׹4x6&tn/qEƝ< +Fp}k]˭؜[:0`wMk"_:9:_m/k@z#r57OpQrh0܄8,c?+&zg_ґ<r/_陓7Z#qCM8co]j/#qoܹs6o񷷭 ᷛ>,n#Lc0,r5oιx׊9#]BGp ~g.{0sҾ◯E^?4t̻GgqjWL9} ~ qš??ɸĮ8, :XD42?rn#'73kqӺ[7&*g~a/6{=H;``00 w'r0p{/?K.YF>(e`}X~}\Q=Dw/W?*欆``00^ƍ2@ 9.&1I@(Tj戋\4WawELG6vlN7/}V8sIXHc b+n\Rcquq nz&|KsNRሩ1G IDAT19gC̳qrx|gg t}8M-?@?`` x=i``0peyZ2Guz گ``00 ``w7.``0 (QQWq@^֘VQpYau;pf[nO_Ӈ\+~zqOxJW 0z'Hg[ ●;M_<0e,=݄|  =]&LKS5xᛞ#[|>0dpD lGw }>~5>a0#v't:ũO/NBO_ގ]^\H쫧ng]~+W{6ٯmjܷg5T9膁aae> gf/b;dt#?PTJb8 v !/9w@@ltvP uCmkƚb:@uo[9k b7Ivx^X=lӬɫrW?c/య6bA\c7{פ8S ptuO^}]uј&W:M<00 2=?Gfd3sg:00 <>|N슟/U{LU}!u%!mws>\ۗ[6nwS]øn-c]>Zy&a007<:a`c/5_4Ms`@bZ~Qj엥spN'듰rʗNp/"^XԚqꭉPwW.?.6zyk8RK7 +|Yn?[v59ĥy>׋ϯݺA 8bj|وO)>}_t&O`00 00 00 WCC00 O~ (իW/?uaHO;pӀ_X{CI62)ā'x⁧/Vaac.nkz8{ !uC8Ï ]T:</dÀ%'[ąX|aE^by¢ȏㄨ:lSi1 ׬Wm7?@e O#:s8DqVv0<=;zaѫ7^`k_eӓ-؋MecE;[.b3OPCxbì/?īyO2[ j |WppұSkX8+gʘ ߞXI*z͵t!8x/O|6,yvY?m-= q].[|X''OA5o5xs{FsOTɟ-K x'a {"=GG8=?W}_b'պ5D.t%3;uZ#c5U|V†NlK.a7{Nɀ>oc>|^/r7N%3|׿o}:Ua`0Ъ9sj'D 훺Y!<9Nևş>Fln.|гӻJm/ ~ϞXaM|`]&qq 78Wj^lc88C^:壖8d.?5dç|ŋ @rPq<<Pl u"Ú׬vӟ%cNģg`knĂkAGZ9+p]۸[5lN00 0pA 3 |?lQa`8/>oGcP;.}:gK;]OC:6cwCwyhSǵzkN? (s|00 \8}QN 2vAl׃S3؈KL=/q|;okl ;> yΚakP]l`WOu85$ы-NvTlч%qqů` 'n; U¥ïs~ly:$' tmXgG6\>ധt4_N[ yq8e^6o-[#7TSv^yѷt&00 0p w y|q8 00 00 00 b`n9; @$H/}uؓ2k= _*</8zCNO LTg'|,h]OO'1q*מ(AC3Vo8rVll/~\Ǧ/ob  ba_q=CjWm^~b{t䐛ȵK'|yy47kFtW.z<_u⫇M޹κ^VŜe O53`+79oz\r򄕮EON€I C^tRQ'/5z795g~vq)r`ӟRٻfqf G85Xrzqm礚pܵO&IApkMxOM+|yo_lOU:1S:\X~9ƯZ(/#_?XG\it?tW8库?v^aO6s8#00 2gsYO 97\ 00 2n~].Zp.y[Suc\o06tf`ny?OuKS /IG82;R39= c;XebAjt/e<S0Z4G|hZw`gmccM 8qߚFCG]²/s.79Wl!|Jl}vgOtx-c8DLvW# pҟZq|oc}yrmCk8{1|pEVS.`n{Wά^On͙Mxr-lx艚1ŁǎTksu!+>au-|6]7rӹV>əވ<#t|a=e+=~A:fn.NFmaucrp÷k\خjᯞlpjf,/9+wXkݚ}'L5aGKϾ&q{i uG"xn7釁a`Kag*}gץ1 00 ܞ~vpϤ\o+w)6CVbs]q1>6Bmo&a`x ̍2a`8-}tKO>:4w!7 .paf'bqʆ/}[gۜz=YZWXq1#t}5˺U~z`!jS\_CW3N#6ÔCXƯ"jlOW:f >e҇&v|vcg/W,sZ\vk3^-|S{wt)_\cc_ Κܭ%.?|*ȚWm8#~Bԁ?:q  F98D }~ѫmL&<5ᕃw[\0?H]#> :Żx0Ӭ+gWy=G.+\uwjn82*?rpzm byϴɳk&\cCpz60ʕ}S&:\i<2 00 00 00 ?C֟sue.1W^߄}]a!85Ŧ9Na`<FۓhNȀCE-C1X䠖ށK0ҳw8@ӡfZrVܮ%:xr׎.wl\]c]f[X=\mn(gb>u7D>bu z%O5k-_vz1xx5"7뾊E4|:q}xˡ+>ijg.Ė_~oٟfx[7 ߑa`a>_|a<2 00 ?wyofh됽\k[w:jsx ==ٗ:O9b2307ʜ8 @49t Ckt}YŚ1 = Vp´ցht|WY3:65֡xt'j˞Avկ%չ'|%lՇ7lfY19{v`8^\ÆaǺ~Z'|5?5v8O7[0sR\٭pgʿշawbOطzk9pN#'?kGs8lz5]yeqs_|?=?cvGѳfZ.bpOۺ~åF'Fzko1tlWlp_Τֶ?0Ët0[]GN뫛1™~a`a`a`a`a`_207 ΀B!It|_*{u!dO yВc㟽Z̭90.'0 Qk;uhw8ʦ׺ '{qqƾ}8p%'o{o?ae|OotݰWg_\z׀DK ':8ĵkG<9C/ÿR1WESuc~reGыwu-ވ+s{Gޮ+l^-ga3=ɓ2 00 ^#%Qܖ6_ˉn޾X`uv{Hn>8= 6ṡS00 0pCW^mcAH/u-;-١Sa˥k&L`u@Oo8OX%֌Q_Nt5q;Vzҁ[k˿{Q <6$~L~c"QN%bT㸆{=0+ލm7XDlc}{&ĥ[ IDATđDpA8,e/V=qL:>0rWޚxx©F|ɞo\_װuOL~rvq|vϞ|੩}aK:{ə ^^ŷW7/1Hlt$^xT 59TuăƦÖǽ!q:k/\Y-T3|^ S^ưk=>q wm^gώ-3 00 \1n=>| 00 2gC'꺮C{%Wu\r)o{uL^11:nӇϷ^>PLvqo솁a`4FKۑgNʀ_k:pSP:rFk\:$nx` Ӂ5uZ0azvf։g,b;|-/l:hί< _]0]{bss:ŦA*o=g^6 ]ڷ&aS6n᲍Cz6u"1Üt:{{ĎX/YX40[K/;xq\) ҫ~譓˵&&FגtٙЕ^]/!>S*Wr!~>:ǰ'E={]ú3{{b_35WR,~axO5V|CCMtq+7 >>aoM>.8fzj/_bɵ1\ǧ\֚Xlu^5,#00 |NO#00 00 00 00 d`n%3(v )PсLZsX)J[wXC7$a4q<醽@_UСz:q![)rjFFa`0d?"w@a^>qOw:Cp-|h.¹Mƭwa00 OQ)< T|鬉]sDC//y UNwy GņV?j'8d_nDRcuֈ1^jp/bs{~גar6jgFz3NpOx46r>κ&kIsC9<7kO>w5x>'00 00 ~ѯg]ٵ]xهƉo[o~8y \ݴ+7v-S^\y&}>wwf[;Vw>6ae.mG&a`8)}%af6 uhNcA&;x4c͚`\^X ~l:uJJ8l'0rثC#{V]pZsÑZGĒg%bapu8k 8b^N^u`-Wl |s}9ǜ^xck/~ղr::<Zt麆4c.9{xn5~l Z޸6Knq_ 5a[b-7>dQvijŃY naOG Vʵ<#u~8` ۮjZq-5.v/=9T#ƗW=b".&.W?1._v 7b҅gIZɆ/VΛ3 ga^g :Aa`a`a`a`a ̍2wpa11QsQ8萓IǾ'8v(B:zR{$Гw dOPGLJ=X7 >aiLٓģCY=fx/^^|b/79Z45e~OQϷ'Ft:e\z cr-bipqcXux.q{,=?يmX/ Cٱ)g":Yd \#bw!^^^&= _|$zx_8Z7@ƕY׹|O 2g|O}OѠN/&¦G͛^:OiĞ5ygb1kl^cc^7'?>i_1y%5ރkk fZnr۷o7gϞmTo]-{a]< {-V,{# .Ṏb$=齙x]ab Za`a)00Oֵ~\u3%8<뮼C8d=PK;|a`g`nY!:x`q蠒;z퀓uv5ƾ s&o֊p[=~bcmt0Fn;MӉvߘuQXwY7qφ Mgԗ?|)Odr^Żq>Î<g_zOZa`޾nTʹBa ? ^>app^^4xM:=~=rݟr8us]'g.Qc32~E/[~׸q[V:Ф3&tAᱥw`Ǧ\Z W\4sk5uЛLbїỎ1?7RkbWV=X>l8vZo>8t K:[>K>bz)g}zYK97_ͼ7^mlaYl6VLk#0pZ޼i#00 ni>x*La`a`a`>dFywa`H N=WCZI1 |=CO3v|`t~h./_l:ճ[}@[/c O6O˭Nّa,MqX_SO;5[煬ťuq:t?س1fq V1魋'l`]֞͘3-p4\ЫXbGOǠ//9hb?7SU<ޜO=E5I)6‡N:ׇ&'l5_>娯f1Cgq/Wvt7y'S>ŸXDMj!⴯jǻX=C,)#߾3@d"g*ȵi:N G^MkߟQ^kOTĺʏ ukSx~^}SnlfHyѳZu|Rcc?g^^[zӫS.r7|q. n,yU}m.7>]K^7cN\tZNc}|y]u]l00 =g7|Ota`xD _w߿Fa`O,+>wZ׵Wsow>܇{k_7adkcsy_5bbvmWnʳlW_Z>pP·زܜ?TCya`x ̍2s&a`%+4:Tz5Evp']5; %H75=}7pM`XFAosy&wЬn,&1^nd!r˦\ɯ`t7Ckahr/1}a9[cXkzp.8lÂ&şMQ|fosu5֯9KWntlOSY:X'5 <~\g׃u g'&r-=8/_uO qMNԬ'B !6'S{C1}5pzNWŇ&6*7vr;ktpĊ5ˇ/==?/.|g59t>kb o\.zmmz]Gpʕ _/qŁ?DVW'hόulKg|ͧ=ͭ NDǀF1sdXSɚ9s0ӯR!60;$)岋}Xgݭ}w~f>x3a0071潦AOia`x pda`a`a`DFKܕiNƀCz\;t;?{J}ߟg՟ZqXan:̤h:T+>v!0\;;pkjI8b.fv%Cbq`>*v=e<̍VXz\0ӋI੷‡HxK^boLVQ1ԇ_ʇhGnVܲ:L&\ۭU\ƞk&?a5{ #=[7">,Ւ5q G0qZ^lGyhr&!lqK3?>{|O.Xt0 =?ŀϚ.j|7+bl/#fEnو bBrSyxpV8j}"pzzO>Lyzv &pY#0p>Ga`a`??Vu:_kcCq]k} f695Pqw-o8?|107ʜA d@CS}gP8u(˚:6^qa;48ޡRD;gMq0`K w!\:lel58'?nz`גljijF͛^~۟p1>lbWnx/F}&ܰj{I/,yW,ul$Fluűb C5ijG9]S-8bYGk<{l][L|Nyu:qw{HO|5f_ꍭí.xZf-N]KbWꆣO^ה1?1+uXɇI57ⳁu"v1^^3鬉+=l1N z79`Fo߾/l6yʇ'dblc]r jXNg7`O>p)8tMf8 y``a`a`xd g&|krdx9\Ws1kXk_8[n3>z 0Qf+&ūY_NknB:uʎw@I:W66 ljtٱ'Q栗^/?r ^`zGρ.&}+/cy!o6$ckۘxu˿}5_1?c!4[~F6^vç5s8b- Z$GǧZxpa6CSf`LkZ:6]wn[z]g05Ÿ^ ]_ha-yktÖ{¦x٧˧ 1VSVkZ'\ˁ^ $sz_1uد1 a|썶Nj,&<6KϦZ8e|9cҵl1b*|ƒ%vuiñCwda`a`a`a`a`c`n9ߟp(`#:d`(luS2:t ; 8@:=m8ӓ woC\ZϷh8 IDAT}.^xZ#y5$tl |:Xt O<9퉺핼i9j=n`~3DT''zx|Ccz^W]/DLŗ[I'xSm>[_z-=eӆ`>80X]l GN$Xri, ~8W /ʞ0훱&m?k .57byz" _>ĔX8ӾlNWlp7: }I'oʍ}uufo׶':k?Á{&zь{uכ_ 85&g´Zi>= Uk] |zW_}>U^5Fa`.>oyt٘ʇa`}ww|Ye?燪d&qrlnuZ ov=>g^5Oa`#scܵyǹM;;t 5tRKOPlbjыCb #?rsTbZ7v`l v(˶<:talf/jϮ?!9YoT֚<[}l-Oqcŗ|'[rƞa;m'!U#TDm;6|}~9$pW>ZǹxzbGo?L>b"wÀ1NWX8,ˏƷ\X7׀yŮڈ|uʽs#L0`H`Y7s=ߺ}_|ȳAvk`"Zlzzc#?bjta⩘6f'5wc}eCp'?[{/o,>Y>.K,k5c<XrLqnk:_1u6_-|gŋm5+3V>x!V#00 O>|fS23a`ϧgb_w&]sW/vy;Sū}3lk}~IeKma`e`nY٘00 | a/o~lzk! ]~=6`8a!izŸ@nvz"|ة1ӯyc,ĘOzӑ05z9􅫕ŢsbʩzŦ_)³!tOa[q{[s@| NXlFl[/C)z\5cv67z!j膂n(&l`kbݛ]_9hŁ Fb\ |3zkפFf_\k$],k2{vl[[cK%n!ٔ|5┞g:3:˟obya/1uc89lc6_n)Wk6|6kc[Mlt#^t[>M1 00 <9|&p7Z|>2 00 0> 00 e2 e7Y 0p 8pԈGτt~yzCK@0<,c~D c:s0>~_bA &.O^P`x] >xJ9|߾}Uwbù'{1 \5b4u1{E5}[`ч |>~WlOm ɏȃE/k^M06Ėp5 ߞO\8{bO=|wݲw23vY>[`C/ZuMM<NU?pE{}kWյ?00 Oq~wE>7N%>~n׿ϤSa`aus.Wcao7~Xv .Uy>5sr+9:5~rCpJS00 \sed1 gbAE$}r/eݡ$gy7;/;;?Lc{r[A1c[됗XTo/77ț?=NŬj`V5=|7=,0:CFb:&Հ3k|>&}{V0Cc#_m~ʃG`Z'7\;L\ɇЩ=x`''Wz7鵮>1&ص]Wlĭq7X1{9W`wlⲣW&z}?έ/y:?΋100 `78_>Nsa`s0}>ZXm0%oV5ǹl\ogmlu8u1a`(sn'00 \2ėF}sJk1/Kc1f;-8/\뤃Tc1jI骅= AVr[#zy6|N +O旯Xjn‚U0۳%béF[z7԰.V}3 02}>nL=ua`a2;Z> 00 0 ̍2D33i2 ?xB ;?ԘŰKO It0:ԋafOd> D|6dŕg:ЕC7[ Gej@ipLϦL7ˉ_lqHGՀKuJrR\uǩu0?c]D q k[~M,؄}7ˎ`0T\_ꓯGpFVq%L|E-?skfb//8Yl6Ko\>Q r"qmYwx/+l/_|Ǐđ[55ո?$f9r.aGco3ՁG>޻o:cqouЫQ3a=egK^5YڌSгo]pxDr5!z9l00 ag߫}qJa`_3pe 8ϟ~qnU1v͹:y u^B~%x>wsxn];w)tka`007u0 O_P"!样CRT:uHLH:t7A^~ql]&tĘ_H尔Zu(갶_N ߺfC^9,#Wz`8rkc㠝Kz6|nͭ9SxWSAkΰج5ʱavC|H5pϟȉ٨i͇ăc956j đ؛Ǎ8꧃ F\l/C>aÉ/k|WaCAps=_-|uXbl) [׷o4+Zt^pk 򁕿 tl'0œqΦ|!&XMp80!n̲FG 5j>{:>xDus=p?/TrJ jM,Ղ >`kg>l b,wa clf )q5wm#MQnlΫW]|eL`ѩ^S/NxQ#"D.l`yfWuf9?00 O;>'Fa`aaY | þk1HճK_مK˧1ǹ*?cs]폍+> 0p) tr)L00 K/}l:ԼfvkakNsp:UCgN5S}x*o^WWp`N•]O6?ai y=;b_ cֳߺ7o1_9oM|rHc>\.)9ӳӛK)uö<{O b×,O Uix% b؋)5SG\T{-O*yw]y 7v1[aK},ux Jťu`M^ϘI00 00 00 eaY}Ld>߇k}uposݤq7a^]ۻq}b700 <4sC2`T!CG9[7CRukCMtPҁSz8tIM72; _w`̮WvpmG,>쭕ٳg[p:deO9̥U-Hba/;4wBmNW#Lb{`ݨ!Őy0wn>:cuT3;&|N|5Q:;rFO>&uu ^maY]|+?n8 xƦu.Wޟ7bxՁrVkT#Lc\%>,"_Rz݀W|M>;[> 6ol]~ptp̞4]]ȗ]oW|4k]r& .嫦K6xqT9L85kɧ%FB9㜞8ٳOWnl\lnM.m|"?1@c{7~}q)y] XN.m_IOĥ#Gpg:|k9pa`a`a1?)gdonO7e803VX+]<<Ա. j_soi~5L00 ŀ/Ujv(ہc:84u8ޚо_[xJz;g?i\L~zjI7VuXL0 9^æ٩G֋܌; ӋWZ-~YO'ni0NWZVl%FWYxҗWktZ]Fʥ|'7͘XM |֭56ӱkZs5S.nj-K/vM_|4.>fܼs'[!/.p/uK,/b곦/\k551U&rЪ fwLl^j! ^lUɪѳV.\"WbqUgL㠺t)a`a`a`a`a`a`C^[-خ~o88]w1͋o-ݮ}tS>b47tjߍu6>wqw翋|a膁a`8Qv=F59ہ$}Ǿpw]U)%E;(;" JUDi}PQH!JRޙ}'3[f]y=ֻz3g9W(N~0㛅Z.[l}g< ѱ3"Xôp1%aY<2+ Z;+ln,8gWr׷x :ѳLeK`XtM7X36s3?þEK| 'X|32O _:W~|m±`Fm wZIE,[r9n K.8q9eGq>L~pp!cݸ>_vZp31vy9׈-a߫/D]b&׼ u;4FO Cl!˼ |rk{0೅Gv}?>y=zKnr%b3G݄wUrĢ?1 1֘-I |Ķ?@1P @1P @1P lB]WK[R13gK$f4Ka$Jqw)Ic+wGxO=o4|o'q^5\TG;Lʱ@10? ԍ23Wi1P Yd DJ HK$ɢp|l~.,ZjXd_[k?JpXԥ#|zҏ}6N\ 86c1qjP?zB?Z`$l &؉~z8bꫣԓ\`f\ӥVؑ%|va+cɟKoZjoxeKp{03.~bGoKy׏_8?1kI [M>k7oxN >u>9FgK ɓO3y.|՞6x%@1P @1P @1P @1P @1P @10Qf275R 57Z`q3{[HEM>bq70Ggaڢ(< p7`1-L/nr`='" Ka 3?7 '6|>yN?5:8W/aO Fq<6:a j$mU;Ⰱ'K諙G|p錓1sd+6m۶c/&{!'|66B>`yOL8~dBNz-jVÃ-{F'|[lG`:bp0f^]8 `>9[D9ͱLoSRǗZv}c֊qK_\|cMM{g=}1)^/b±S7<%xš})Ǜ8cҘ}l0??"nV5'IkW^|aIJ 61Wa)30-Ǭ/Ly |G[LǿfK8ӓx "fx>/)b(b(b`3໏V,-9r41;zm%ȫ~R]l&a46 g=6n.[|o=j@1 ԍ2wE+ fH 9hӂ,hZ,ZHω-{?Y4{q@,B/LNf>l,gQ=_b!0@Ϙ˅\m1Ǐ<z~$~Y|;uWxxxé-Fܪ3cnNظ j 0,?"-ud1.|ŔF-Nvtj9p#pYr;D>?pq,>_v+x7:u\7ј\HOFrAIxsK>qc 7Nl6vZ͒rZ֙F氖v1P -\Y^ 0IL'Q1ܜ`K-Rfab~DBG>q,&c-f4cٷыz\Zlإ6Ʌ_$Ͼx&G>~r۶FE$ĶlM gK?1".;dAƖO[!1ۛ+2wrF\ؤoK;ڍO>Z‘1ƒ>M=;Ǹ&NIZb%74krhmzɩCn;_p`Ɨ_;b,[X,Rc8V'Fr>;$/}pѷ InƉɎ_Z6x$xwpM_.b6|-IMl5}ْ`ŖNol/r$_X-q>%@1P @1P @1P @1P @1P @1<D9*bD x*@ $L -Xz{~'\tE)[- R޾4z:OCgNyb'@mAԸ|{҉#$`aԸ[yW^jc6W,$<lƸZ"yAlqr5&{ի/ޮq?nJb(b(b D=j#kJHsw5qW#YhI>įK^pm7n,ilضvmѷ`ovRNy;R80Z\f|?k}֐SmZj[ [翪/4-@Z(B,XpIU$Xm<6/-&PӇgLlm` 6>0/9pܴ!cD' |@/÷+[ g-X8<˾|#;9ÓNWb4İ(Oǟk=;1,LV=/6Ag".=V>ij bɏ3FO9<j_`g_uO|‰>5k[5Wrk [$}1'a}6#rfF[>|吹6؊S/Nf?$Xrql>&э 鳁c_|{16ޒZԅ+y }8bAKz-,ޣkĵʼn15lsccX1x9jl1Fcë3\X {%t0łi?V@1P @1P @1P ?F|v|tl{^ԼĮiJܭ֥X$lMh}jepjlҢ;x1}r6$X|k4qGĢӒ3L?'I<6pbkLؗ[}/H^痸-=p)b(b(b(b(b(%',IO fcS<=Bd+=] Om1I=} iYBIbb.߿&وL} Opi' 0l=?l~0' q=p`W/,)jdc!7q3r$쉧IOm#=DM0䫩- r%pp>$=.xMv#pc<5"|8y%039?|rՇm۶Ė{bƆ~jVf\#Z,}qqŞS=yW6'>0/2g0q+^r'ZÐc؊8{:Xjq&/{8K` 11 b˱G^L8Vy\9<1i&lmy~tQvř&n~kﴵ]+r9UYȧͭ@1e6ߜVE@1Yi҂Eg -@ ;9I-Z/8-&Â,[Ev} Na#7iVKLy&>=OGNj[p"bB#Ɖă<?u=6p-? 0٘vY<Ö`n.b5V:88^n >y@LNL~!|9Y!nz`w޹`KNsU#;ǝl-?23 \f%u758ܫ/A1Mԕc/GbxpbNly5a#<݄>L[}/xhoO^[}V}:Õ<ÕXR^x LMrK4"_9Ocڒ-?ǃҖ:&y/#nksMoD WN|ġcO9sm 5ş,6_tE=_:\ԟb(֐Q+5f ?sN)bn}3.7q+ϱm(2.b` 1MރP]*6ִZCpFj{LXۓä&ŎqoV Ji1'4e3 䘨,W6cuUS1P # XZo W1Yx YC ]HuilrU-{Y@[,ӧĆM^AO87&GoyOrf\c#vr16I.bw|Co?rOTK6_pH捓jgRFfasԚzgJM>xHlpB`dc6'|1>Cb~㛱6^6{ ˼KN(5d J3ͧϟ|vep;9G^mgܤQ @1P @1P @1P @(3[Q3p.&R.ں0jbO78b)}ðxi#=Ŝ2/ɇX~8.cm}>8>$f|串M<>҉B ՟37,D/O9>?rj"ml[MqGoEecbZ#/ޣ݌]\yi0g1 rǧdp#<~%X-o!1aᛸrђ#;6Ų;f:LscM*bS0CRpccOJ0amW|xnVv[ /\fƃ ?8S>xjq, lm~xFa=z}~Pزql8[1–\r:39O2^ÜӘ&a#< 1鍇qGaň`^]xW46+T];KOcRiRѯ.4c1䱜ʹsX0M-eS @(sP:2`хOXȘ לKo'g9m133cj frϏI?$Op'帀O<`|R ]􉛜8<Ӈa6'rlǷi /8CNe>'>6-wasN?M[~HEo6<%?}Z1xxȘ-= bW^fJO^ꀕlnKe 3>a{vpdZ\7}rX/;Q8?MٲW?9`kik?LM?-c>G_=u$N垚1~rm_R z1}n X//N>2c'kgG38*b(b(b(b]Fٝʬ(ֈ== lg .<)jWZߜX͓,rїXEx0j?Oȯ.sV`{J?B=ـ7b\mb%j|R[O IDAT_!j?1i/FœᅎbC/wy_Ï9d"7%'1ij5.V! VUᲅMZ.}l~_ y*Ml՚cnnn _yuAkbQXbʙMj߿1lѩ}ׯ5,7MԜ'\OʯMo_q_KaIp[s'O.O ðe8!ud}WO9xNFSq'͜''yE2fWU{}o^|S̉|:Ff^Uc,G}pdIt}^S%@1P KȀ|Fob(w$om4NWlV=M|6~ݤW\Mkntl\iM ޴V+v3ۓO}9$[cRѯg.rݑRGG#_b(cnY/Mŀ(#-eSd[$`i1%m۶c)-[U[z>|.wjQ5d!b< C,5: ,Zc/8ru\Q1:Wc:bGV ˂t55Yf6/>>n#`;/ 6;wO8⼺.`&8!97z9fH0$~bL6Q{wLA>9ܨaXp9'w1ٲC`n<؉e #6j{}/S<G V#kuɕ-;cp5}1aWؘwlοQ}oIg-Ki-Й_m`xx`F7yIl#: =k,%yQ-=#? Vxs{7|x/c>*ןb(֘_%@1P @1P lu.2=կ'In6I6i[۶>ƧZYpgojsJY~Tj)bغ ԍ2[wb`K2* 9Ѳ(EHilo٢hlb%`itVIeq>}a`o"il#m[jHp`'Gb&8p^/mjc_K?5%g6lfr6cFoEj-t~E2.^cv.4~tlHƴ.D;|%g9"%j`G'78좃8ƒ}9ڏ]u.tbi$NnȨק_-:>g跶omOf#?E>̼&_6}|يnوaK~Zo+ו1~xI1P @1P @1P @1P @k%/b(֒Qf--b9('mXdDY8HܷXjlr N>b=~KcbI^r"6I,Џor \5A. <1aG촶F:O 0̩/…HnlMژSy:=ICK=!IA1ý8켾`Mʉ<K7'/iBCp{"9cc\>xOP 9ˑMۼ%9k\\ťO0{,/\omN_?ԮIq?Zc'oK&.\KFnɏ<ʇAbS @1P gqhyZR @1P l|QiɎ10\f)IKfk$z5Gb'Y_*v,uM7Jbv4vWb(@(&j[ կ~_ds={daM/-.Zte⣾,[̂(]{Sۓ5'mYx,r|~Yv#bn`B+ ,G|U#}P-ƪae!a7X&#E^ 0qh]gxtixP26Žf !ZS}-vBO೗+?l <~Ղ&7=nx|C>}:u/lǩyO{~ZnjI02hy1rxx3.61SoKC!xG83_ʁS;>ѧ/1!G:)[z9N,Z;^rU(šXciru]{[˸|өMn悓ي9s#Sr/{y̑pDMy̩/LM}k9<,: qgݿs,Wmf cz_VʀU[<9Rn+e싁bewN;?/5ߎW(~ɀk-zZZWq uqq+b`gU3`!O|btݍntCG_x?sER#qg1'~Ɯ oײ M$x9ٴ§O[b$Iy?6b-\ f.xY?z$k\6Nz׌̅}vmm\H$~p͏bo?m`&VaNM=Ƴ&÷~[o˷ĥ mlSC0'b/ F}kb٦ONι.oy/xO5 q ѓUt'˶}-c> yOF`%'e<%$/tMlG3]`>|aɃ $V횱Ăx4gN{|h$1Z,xbӇZڸmg.e#/>>ɾ~'|6Зl ww7 }ݷmopB3&BU xOBK%38uj>gm7;()b`Z.xݭo}WzO}jZ+b`2Eڤ"3>zc}鋁b(`(,F1 pŗ}s}un/N>Onk_z@cO=5]\ࢪ[J[0©T6ppi.z~! I^Lz84FO^la,|?b MK&DeE b)?,䗛7'~x#[yg%&;bԘ1qRNaM\6oL[p|lwαGon WH_A<"c#6qبM\̡ z\yben`'v'u<N`3y=&8ojR{rW8I%lc ԗ>[8-p[NH,Lħ]x_$vh 'l!Zk1dTq~.¼d44~`­r΍aHB}z9 v,G\y'Y=>oȁ]/.{[<'VND?'[jc?uۗ1"L- pĆ/?0S/_ GɁ>ܻxl0IMw;3gb+G\ا&}8f~a$7>~yGkp/F ȡ6ǁ  +Cp``ى?L닫&5s?tO-}ܘApعQxĸ}~+rU3`ӛ 7Йkpk>b>;,:sA_9X /yLn`‡)"<%7vyG??|cDoդuɛŸyzz<;ןM)=)Ok{ֽ5Y8^,<?^җnJe{kxO,)fӈ[>}.'>#~O?ӗb\ r!M2}MozӾ@wG[qLǟЩmMc6y4_:MđkqG/KSFru{g}l—ܲokF.bЉWm0aj?|c#$^1 'q&.I<?}Lbh$zc#W9gO=;!cZ.ؽ?4<>gXj;:M0micb}ꐇ~e}nl;KM2*==+_?En2QmG IK-Vm7&b#ߩb| p > 7P[fw7ͼe/|TE@1P @1P 3˫s^D_ ;~EC=b~MG?{s?mկ~uhy1Tӝw޹),Yu4Yd}K]X=Q 0\P!= R7{҆_j^xa+r6tnB_lh,$:BS*-@SJlWc'8' 7+3غفxmCSW u%a9/eR>m#S[4ξ_kL<ضtďx1Fo9Gl/[j ps}sS=rq\Z/^|}&'>rI|Ca,bȩdL_ßlwC '=qgS1p'.8'M߁؝tI1S7ʌ#t;@}< 3xT&|dDx;?}In'ͱXx N#c6Ͽy3̣|ᨓ? XOq!uL9p3O+ 6<u9ǐZSxiɓuؤ֌w|751qD//<-6cxlx+K5/tAD^{9[``˙K O-6f37nRhlKo1ixEv1=j\\HmJo\k/ĵW{[y$FrKpB7.6\KLkl'{!z1a6\ȁm+/QܘO\gAo?[ 0 OX'02_l|p+NR}zm2&g"iaC/?6ƃi<̻q}6r+8&ഒogpLcO`o+\Xc[Ojꒇ&O1CF,bL cb#X^>u=_n1%vp+n摎.\CzܣezVV[qI~Ň^l-u6Ԗ-tDD.p .ّ3`?5#6rGnT$9#Ot^SrRx^F|#jA k}asc?M}o{& wx^Viqk7g*AL1P @1 g\:z.SN/1Оkkk7/%)]mUk{uY^Sk)9LZ&mm:6jKi얫jG0'śkFҸPWJ]wݵZ1cXZJY ;u̺S^f[N29)gQp݇?O;|{s]oKw߽ `'j&ɂ=L,Jfq>_N-)^Nl怟#e_Mrb;/=`#O Y$6ZZGsmqe ~Ԫ׸qxSE{>\9`Gg˜f\D>pXrØwp__S;—>yc'qimχAc8#ˆ^N;: &a3KN1ai(9r |ѧgΌa`ˋ5W$!c/~̹1I|A/\(7V^k|sKlOئ+}}9p"`|f.&OcI'V"\2f^or/('-OFy{QMj-|ұMNXmDFao̾ɾԟNk^Mc qI$s9g𚙄ZzǭܾW pb(b9ϸuG}-N;s#k}پ]x3nCYe|GSe{qnNqG"I"&Z0.jVRߎ~o{0'ձ\QՌ==M.+? rmoxv~1P ԍ2u .1TyRBW"N<`^FsnF_g~1P @1P @1 ԍ2E/f&}^'p]q6~AGd1T1P @1P s@{sђ<O7MGk(b(b`ȵIfBehsb*b(b(enQ˿؄ :}Cc+|ӛou[uWUڔ(b(b`k:z8}{_ >kSb(b(a N:K_@A|o&/P)b(b(enX+z10 ˘?wEy1:$}s#8bR\u~"yJB{yJy.rnֹY ݹ瞻[G?Qw]nP凁>} 1x;g>}v]}n^[V.Ksn|%Q?"]:/MG=Qs$;%ݹO~rwGM1=< O~, W-C={k^3i]~=>z=}3̬9wݶm.YN~w_~SܾկvwsY@%] olh ^ 3%.q|ew;ܡ;SŖ?c>w}޷75LJʅ du?]]B,g?+&V>ʜ~X Wx-)0`ԏ׽/7M-zYgu~x;oQ֦}{a]2Y[?y_๫n~sfM_r_'qf%2m۶{ֳ]W|6K?C=/YJ:~u/*τO^xx&r^6-ud:ƫP@1i[*(b(Z:nU@'uGyfPb(b`#ps,3pؗԥӋ(b(\pA뮻nRb`'ܔTBao+yu'+_JLyͮs{éڝr)ݷ~V{c.s袋ϫO?ԥ.] W>Mm۶sn .83_+bsot]r+ߌ;]yC޳}n:uoZygoN;sS9ʨ,u;mܕXo۟'9>{xYɹ9xx]j>w{0Sp_e.sRX1 Wl$2Axmε׶k_w^rs+1yw B&[[yȼss9^w;ڞk_+9׾}Vgyf&|~;zpy+Ȏ?]X{ⵇj,斁ᅞb(o651a/3 EO{=Ën |}wL˿`Z1\_`x!a/| WUۧ&fdpxc0":^G>%3 |#/x958r?7^Y[rO~rYY6~1_`=XTcqxb^^^9m/xXN >C=]}fw:EoxQ?x0j܇_r`c|\p!`e7`x1d}h?>?~ի^5uJoy[׺ֵ61?{" N זt^Uv/ /B,_j00\@ ^W#\a|SO?XW_x.  b__Ox-u~tZbnwׂۢNmnw>+}fk̀+v}Efü^BpAz'ޓop 7, ^^/yK:ȳR>+m{}ocQ滵ԥdx>'tRes}:w,{Y 6pOk7eOq~8skI)%MozqۺۿۋjR}cÛdiGox.wz;i`lexਣ<9e\~Z9#Ǟ]\s}g>s%O[c1%@1P lz8I=yE c3oqD^E_8:?_u{-"Rx#]^wAg|7>I,\}Aխn/L-ݛInq\Tulw_8Eum&F7Z [͂p1N-dOI&O8ᄉ{Eq}-! z!vbQcDNm>1VV-]R%;찅x{ņefz/zы]wýp9}ޏ2n'#su>Kov-|Ns00`}Yg}{|1lbvf&7Yx(Ǧt:ߎwYAnݔq{Dxnvθ^~x2II}3/g>}n>Go>mbn u.FяY7!@݀9Nềֹgs8>r9O][hI<&?ls>{xuy%t-ұYuӦRs~=jO^]לih)nhow^&-u^׏b\wIkɓpK_ @(3[Q09yƍw] <ee,DYh尽By8;N<)"6.Ⱦo]Eq׿ .k_ڱ <"|-ũΗ.I /G/䆆(n'q|CV 's O{cXCR'eřyZ-} <'TdraۍǽX.y=o[0_{ٹpnNZFy_]"7MZē5y4F_#67E_j{2\ZD{=gxQ><}=/t׋$!#F5B8g>sl7)͚8?:?7eevwL`=:c5zQ*1Y<6VR =>oNS}IΩzUSԡ{Uwȕc\wu:ǮlG;\6㹳|,/N<ʨlK}x+Pf׵DŖ%myFH}n)u&Ϛ_Oe]nN=鵯}f<iktI ZO 2h?ή &~3o4Ih$5=muVKtjڥ0G^'^űD Y+쪗2YRFa1:Xv^[:׶o1TmK~;ޱ8>eo (pN4^d1nx):nD-%*DIS\jXL%ڀe",3\/̧snse6li[6@[R_|js:5 )>&Fc"*7$2k#6nFqzy> LɃ^c"NXћ4 7r眏?p\Gr , ylu{fzp3(mh?{TGˢ(۲ύ1w$̪048w~F.Mf:3LY?n8@nw> Թ{\:gꍖśnis.)Ovq T7olԸZkꘜ |+PQȳϵ\`gF7\9gD2wM酞;MV`sfbD:ͿLIp97:6sύ݌#Fx`]gS/s5`ѡ'k:/uw=[ ͥtaİD7L#mc.t^+p.Z LG5F8mimu.s#XAɜ# ZsQQgf͍@˵D:]K@Y3cL㦭c)i,<ƕmu'Uc!{?7-ǿTz1uVM݉>&Vﹶ>72]mK5ϸ^gcӱ)RFuK|#|o:5Ro3&&97SmK^gX2/ FT`s/xR͘Jo%r\4.|S~ ^f.s!ʬi t.=K2֟lfF`ޮ?==%.ϛ= ]s)7iˋK#$ssy' KƎrq.cbOƆֹWkyehLM#N%/5ؕ(yٞmo{[&5(`ڳVv4vgTzčP`䐹ľ#k\9:dזu}[l3#%saNnu9PL@ǚj?O .^ p%=^c _OGo{)^Gon5J; m4cqq\NArnm_iHmΈ:vZD]'/G1-ǒs\'ifA\Jg*B (O^e=yv]k:"b6#,뗥뽂evJN<疹t7o;XSmKqfs)ڒ;M)AdaR@.@{*}ZtvFک }5|Y;/u}ʷƄ5nm >R `Y<8H&;Mj SY[qi=vѹ5/{UX?ҩ5Տϸ--hj#/\]kCEOv|9rKmİ-?i W ˼D0qn5MuSy\[ϩ5noFFZ:0/e<71o2ւ7֛k ~'I1]Ooͥ|4 }1]`;έ'Ԃ6mqZk\9="y{,-'\>qKTږzu0ˤ%WHkW-mѩ0T>HK=~iӹzi얎GXRݸٴQ0$8I? e޸߆l~Tr :.M-88(mgsu[v]{QB_k[˹6|_mةO-at܈d|f'bu%_i,\=dZr3:vmN\\ִMFH\8qw)#7𲋛cr|{ A?-Ϥ| \@4v&cڰݛ@;vK4VLCΫ}.$ d~Iy)%6zvՍC-;Z".93lMI|e:A*H qfFטڣd&R}%WxͲs봖iQ\}Uh/SajGAm͏k=2|/ 3W]#j4ۖyΫ)]c u\Z;w>ڈ8~@~hI0̸PhQ|g.ƺr^m#Qy|^')i3#A,mޮFk8{].91oe(ݫAe!"z(Pw}w {S{&0~n{⴯k=[h#[HZ~n}20N}Ӌ^S56R1gk>m\gvyե=>tUl}I\kys]RrU75;׈ <wq;fm|_ YoTK Pѽ΂{-gB?u8ĘNwS4s4'=#7^>HTZͪ Ns뼯֔mxV֙/~6׼ԍm8S.qJG\&Z=^ܰkjOmש=cjG=>a'nʌi;W.&Յ8UekWˏrL1ହ϶۝ϙ?WiɗL_9Wpf,?.7wuGxӟ޹7Nȗm2Hո:2w}ӛ4DžFXW44Ў#,օĥ:2?3S?K:oiϨ0rK b"hկ~u+9^ 8q3_ʷt߆{czp H$7tS6_q.77A2/}2gZ륻=l_=yIA)S?7|~VJr:Y.ۣY.K߿qS6!>9?:7X>Y+RٮZbK=K}_}G7w̿i;'=i;DG,6;|'W.*c8[fw,Wsq[M}o wkgq=|˱ɱgzr@\z4A3AFLN̫qee(k_ߌ'e˻iW qz2|l??t|=Paeu3ƭZ2AF>Zk: G|G x]z#?#!U vĔnϥU~W:cms>F8d\Yeɟ|ooEr ]aa]!<3̉gU1_5yuٵ̘oM!_Z[@F|L}K2=u3ևg<Ӟ1|fx$ $u;wyK|yyS]ݎמ.}n#LnH:3R׳\2?YF>-ץcc7w׶guR,Zs{T ce8L+c/#иq΍QH \Y?s羃iK_봌=N1%./y5ey>3f<ʞ@ewbl+@DŽqK#YS]]cʲkZ˴}cdO~qg)\ȟ J̯ˮc[k{bxP&"]4pg㲴?nc7,S>߷ W v9WZJxy7%KoukW]-l[n7>>s㴸T132=3is)?gMz2?<1}2<'ŕϩf^}n;Sί>O%J3A29/rd GRMYNǭ.X9n96u^Z~]W;uwu ;2t/;[֭`muMeoǰ_Ռ8'1EGy{-_[12v9WZI/#h&P~7U@-Lߵe/c?v3D~VOW<2_Yli,A̵^m)qId9Hhה?c$HnOy~VvoclYvsӂ뉥tl=tbK8d^ _ɧ^:o)hFk#P?%9]u8M+1#xw=>"q;2le$1 IDAT?t;Mo{ۦ;ev:J];SG9I}~۷}ۆGf26Ӹ ؃˥΋#e>>aȦy5Xgct Z=j݌W&%ަ~ ҮTgq ] <' }+}'~bV_sC?tkdJ,?g'|Ȳ??zQvj x˼ggX fK#ĕ|fW&7@㰮. 9v?Lq3>3 g !ōmϸ] CGG}ȱH\&-yep^#2c^?+p%9< k^a{Xo/xQ&HK:Ñ^ ,s߹D@R݌k9l[U/Ы}/YϹɟI3G/CK7[_vΫ3FÛʼoK=s7cyTZgP1ѐcqtNP47seZrͭwq,z)EGf<7RIMa}}iWG JH>Z;vb$ڸ 6YL̹732f6?AKI0X; I3w%}2 (bgR@.@x377ng{hOvcq6e؂dN꫾o{p{{v>!-o7QNZ<=+򓟼5/>]L>??q;;ߴz i =Opj 7aކ>55QSV~qs.n䞴F绿OͿnƓܷ&M??˵Yx< O8X~ck4'xnvox'_F;5 푨,RοʭCׂ+Ni7H<|R |GổWAǖmꃸsj72y~sqS/mcg=Y ؓ6\϶=1}~oF\{NͲzIZstc?g>}>y s'܂6ޛ~rO}Si#Z ;˞ϖoA}>m=!ofyWeDɛW%Z}_Nq3=o~~ü)eiil9L_zs?sWvG{\͋Uzզ 5mAzX|MMFlM7ݴm>ނCgT4.'JKw?3?S/_Nڵ=>kh?fkږd|ڒ[|'*qjR@.@ mM Jw{߻Wh_ (7b[o/rz˷|ּ| Q*mDLm4MR`V#O mwitOth=<ܸ7r (ja쳱a[>pZEn0mk sޚ 1KmT>=ihRouۚig~ԪHw{k:zW~pq^S{x#'F Y҈3ZUp@WnF7t??w?iåo4oo=jN/2nW @#nnR!&=A7$7BcOhV'2+lKk<)WzSWWI-$KK6\ask_ g:]\z)-1!}__},gwm`?[<2^yapwYrs&7 r$cCjo^FcH057̝{.k.KD3ν}~k'=I˦N335[J}K51'P6Jrn%ƶz-1))iq@cJikxiZu̶l{:x;e/.،ub6JE_EoxZѕ}o8ko~Ou2^'VN gՎ3|`0+ʹc{<2lǏ؏i^}Vя~oyl+|k@ƴ%>ַnڒ׼/\7U@[-|T/4Rzz&Q48)|$"ߜ 7<@Œ=\tOh21¡= .\Ⱦ8q&7 h>ٶ}e(Gܤ‡/}KOs7ZJ`L轐=iO{RN>\ql@//܌K\@'%[,@\Xe!7 Xx}B##a~_+}F`b=RftsaI~F3%?(˱hK!Wv[j0\Z1!֗:Q !qO o8Y7ӀE'7q`zAa)ύ8zW|=):AeD:1n8dk|M0,&ln[`D}vfA ݅,E8^9%0@ǂ9CN GY8b]_W~32_Gu:uD?Q^+^coŕ}Fvz1~33)p(C=bnFr A`IqU%sF7=/Q rkFOSA 1#D:J5`~k-v Kc{'PmI%fm}%}K=NhL~lԣ8MGٶRlk{l庁\I7M62=+_|ҨU_c];,9Eh\9GFҹDrV@Xj(J/M#u>3ܺr\I2lYg0'px-5ιqOc˺MiAu.Qkk)d0g4mn$0FZ"k/FL݌hzj@qտ @ZmLwzF5gD:NJ.ve1_klݸZCDvQ62P{jAS4ScjhlGFoG9ƝԂ.6D6zt3fj,&7aj#RL'nLmĐ]&Ѿ ԩ8ڍ5:Oej=6b̙zc!L&F?Z ,K1|S!6OۨT?{_k 7a6ım>+Qo|9kkZYE֠8^1ϺRc)oޏ+|j+S)fj#?L&RS{nM}FZo5vSsjsٝAZY^smּ[nej{"-1 sV][R(Fz> [ Z~#xk ~+?>\KS0`^Kws+w3P'j7&m Zkj7^{y!z O}pO^~oia[ڂ*LԍL3BPZ^LY̸prKwk_1hGx~]uzVj7vuuԕKSQ/6c?yZ> w4_~ه&n/wz+h8KF%}<\K--]{qnݧ\q+@}ވvA[6:u^Kpsm#_s.x;FԯZg^W:kZ0LojA6If퓨Cݐ6zb`9ǜh vݯoqWym1Fx園:>YIFYJ:Qn9wz)Vwx;۾QOh[>az\={YP@P@P@P@P@P@P@Pv82~ ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( (yb CIDAT ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uʬjw2 ( ( ( ( ( ( ( (0PP.WP@P@P@P@P@P@P@P`Uo6F*IENDB`PyBDSF-1.10.1/doc/source/pybdsf_manual_dia.png000066400000000000000000001336521420247104600210470ustar00rootroot00000000000000PNG  IHDR_L(sBIT|d pHYs B(xtEXtSoftwarewww.inkscape.org< IDATxl}?w![s +.MQ-)M,*@ zVK6ɨQ3\A `"y%*Yn(+o+ӑ o3]E-(y݇,2!BHS6{m'_Dmmm_}+xGTXD"Zswt'#ҥKxws"d?aGr ݾ}|. . :d>oj5Ei. GXTlL&q…u?t:n 6 . V*tC/3!zf2022(Ø,fff "P199X,/W^[!"fggW]d^/,'MpcccT*ۍ^xF& BmmmjRp8PTP.<~?P( =j z(JB.C^0xQT0:: x뭷p}udYL&r9az$ XU#󘘘#G n޼ ш`0`0%\t AE \.[hkk]GP(@ӡblFo6N' ߿b1b1e… ǂeY[~7:.]i,--Aӡ###j/ t<ݻ>~0 ~nJϟGP, կ޽{ Sz>EQD2DRQ?Uq.,,`hh&CfKKK wzZ""02 N'ǺZZjj,';.]իWa0 c6ֆt:Rr ݾ~ `nn(" LavvpM&A QT+eY~eb1QqmqeRI۷166JχG"!>cjy\v JVtsssXZZB>۷!"J":\;:: VM{b"(z=p8quu~^>G>W?ӫW8oJT<Ǎ7`Z bn߾X,9F, L&դGөZA|>,ɤ3*IydY~n|܃L&Q`Xd011'N@$DQT*TU<15FAt"#caaASI`ffFmKtl("cff$0Q9DQTTJ%r9nvvLNN88J%\. {6f:|:^رcpݸq8d@oo/N8N:Rz7$Ip`@ @0Ç111QR`YvFKKKxWxfq=x<G'Nd2!auWe\p8Z˗/ S*BVC(r!\E0j pߥRiUtme Gܖֶ͛7Q PVq8sχt:g"" ۑ$ X ,˪ z=bnܸX,ݎvHNavQVc-V@]]]~ADP~aeyR)9g!I<z{{ԶQy?^/9Q>^~FT*bX,BuxeنvF~D9ztxw@b1dY7^eFquV >CBq\ðbd(^尿݈F It^{5o3330Vf|>~ V.dY̨1 A޴jb0ryGPh8.Jjmw^G^oxEeYl6 T*jk(s<e VҎ={V}r*CT*r`0|;ߧ7p:0L8rȚɗҫ񠻻hrnYww7zzzaM'VŽ{1001<{$dXfyUBp:y:N>X>XN, ;T*!H Jvh4"bvvSSS}ٌ'O HR^pqy0 ^D`0022ͦYFjaza.F\"üVGעP8L. T dXle҃YV,l6{baŃ=s`2 < Q*P*`Z166Ʉcǎ=x˲ܻ_X(bPZcYJu{V˗111APBJYNCww:ks!cnne\,ehT*3o6z=:4FGG%Ig%%SCG( vjlxaa0Vm#5 dۑN0 >TUf=ʐ*DQHr8jP2wM{5>>{SM0PU*uN+(HR qvd2P>,l6D"Պp8 ϧP.--ÖPz٬=X,[|eN^G*R?(_A y,֢ޮc!Lvea6| @X,,˲|90M&Ӛ[\\TP($3 #qu|L&9 n:V/j5Ye9;w7o׫35[n:䙙|+B!`0zj^WzS3::Z&/.. 4r?ek}i+Ym8ʱSQ|䑑9 èwd2ɷnݒeY镯eYvρb !2d zTJ5r;V \p ]y?S^,o2vzU7;[٦Rc-WǏb`xx 4`|(N+WLp nU#J$B[~!{%_P(ٳHӸr wmZ hcccw`yX,@ *6NoDg'BȎbYd!{.L&Ӫr^x$!˩W*DQ|_hu\zJlxxx!,EQÈ Cz;88ϣ!yZ jW OB^B=_z0 \.ɤ:,RP(,A0L "xW0L6Vm? F!Z0RXdP,qݎYj5>|CCCHnR Hr022n|BZ!;bhh7old2Kx08N}8,--ACut:0 aHUk"@!dǙfK.Vǡ\.c~~^}L$ dY,rT* ^&jp&!U|Bv /wy!Rpj^G(,.^D"b10 I "=j{O^X0$Ғ("<4ap5:s7ѨN?v(߯TF\F.CR^G__L&z' /5>|xg,!OȲ,k!dpL&CqH$7u(}|B!4%_B!MD!BHQE!D|B!4%_B!MD!BHQE!D|B!4%_B!MD!BHQE!D: >AqaI\KKKZAG("dWA=zȲ'X\\<3x'v|? 2___'?qD,ZAyǎCgg'f[$tvv"a|||Wld2fH0 `~`: B/BIƍH&j0Lp8d(HF333p\fVrH$(0 8vn7l6aBJDQ,!82 n7 022Ԋ H$cB0LG3!{ 8~8x)s盒x }ja ֭[ܯZh4Ǐ#Hh!!d//BT*l6d2 `XӃ3gΠzi\p$ p8oIܸqx<XNn7z{{a٨7 %_r\ü#|RAXD {w 'KLC kJ/$!d䋐:[_|<;I$ab9xp0B/BZLR͛7q5\`E__X"@:ěoniEݧ(0LpܸPp("EuR)"J!`0fW+xqo~״zr>(j @ cǎG0 !)sFGG_lf8Ht 7u^N^:z|WpuL&LOOpcEi'LÁ6$l%_<"eI1\ DaԇF144P(Ԓ/Qq9Hj"o|C!A!AEd2$IiÁ~\==,dpq>|o^uaiJdrݪ'N3ڄT4狐m$ v4r:X:G"}j5twwW_īf ѣd2fHӈbHR}z"qY<>0uY;wtAqΞ=RZ("d St:V+XwE09WuLMMх{QONNbvvr:-]ė/BPTq8kXE:uj_%]W^A:D*w P愥R)dYeu*e>" #D[|iܸq333jqT͆};^cnn>V8aMq:Tβ,n7``45/B?qIu Ԟ-U! Nc||`PJ&b8N}ah/r`uR*z]D},]t }d|AEbttNW0ȁZI$X,׋p8Lk7Pw`Yz%dQE-ѵkpuTU{J%|x"Na LŃu\.<Ͼӗ-P+"ZQQow׼R z{{lJutt```ǎjU˭DQ,RNO#/<1q1a0::?{ cjjJpHT*ٳg?JȞVQ*0;; Ej5L&;v ===Z2|p͛ML&UU2t$![Gٳ[3 [m6N:Eaz IDAT5R)˰Zx !\7n@2TKX,twwF("{$IÈbwEl*###^/Д3 jOVQED"X,t:>F'U*5a;wPJ$I8@P(B /xWDyp3gΠzp6karr:>#$Bޢ( B@iY LyeXV,~\._ _FT)Y%R L{ˉ'G("-Hǔo0A$vۍa%MQ(FL& crQEZBRQNꝋn*n7l6a)jW^E8ŋx0<@ɁG榧q R)r9 8uhpВ&!JazzajfyRI-{"|Mw0Da|G>J$k.r .\r PENE`0zKYWPP{WcYSSS{.T* -..[o??3s,0{I$<@ AǷ:Tg s)YFC(Jy7n@>G^NSOnAw((˨T*0@gg'X‚ZZt:tvv̙30-[y&HӨT*tZX,Z2J$IB^GGGv;X:V ټ,yIp12N赪8qKKKH(ѸgGQ.QVQVdzAA6MOO8ܾ}z6 Em\< QQTP.!"ԓ˲(rE6 irKKKL&!":::0:DPgJR ("!͢Zd2W_h:myjp\hkkSfyU'p=,_ ôlTipT/^ l6RݻVT 1z=^utvv^F---arr`Y'N˲ĽVT*|įگ,˶|qzbׯڵkp\\~r( |3gĉ{bx;#mc_7"In޼۷o#n ZBd2㳟,NsEy|(J`YTXUdSnݒ~l2[niNZ\\GGGea`0u8[622"[,vˋZӲe-[,Ν;Z)͎kJKKmvffFfYVzV7555u8d |mb~~^v:r\մgOs^9Nkκ`0(wuu>̷`qqQ~Ջu+yv-k%JeFNAVGGGe)[Z'ܿ_N2˲ŋՋI} _o!2Ll :U$I򗿌'|RZ`>9<vl6{T*}j5ٟ{1jyJT*y ~ZTD"?:uj;c=łg}ŗ%" VU.e:=֭[C֡ 0ûu0<::u(,/`0Hm|>vkj~~^@Ǐ Є5E\t   X,_8r'Oϟ:=˘lmOF\ GP,qeKhivv/_[)El_y|G-A@k8 tD6 }}}~:JX^piʞp8H$4CE,,,#lH&ׯCQt:N':::q$I:5RQөYZR)njx<.{jaՅxT*\vM]hkW~mGEf"?99gϢ( 8{{%l6UUij|~VZ tz҃.\h4c1V&ds4ed׌ؕJ!d2appp_<#LXqy^aq,CRV/k h( bm%I0:: QaXz!XE,S V~X,Q7`^E&G&HfMO$j,˪s6 ,OaX,.Ђ `yO$VmV#8 ~c2 ^166PƁ_Wϝ ` ìٳJzV$ v):z'`o{ٳ8wN'XK/Zd28}4Jl6N> P*p9Bj[byͲ,P_GG LbbbbNs޳Vm^7ZnC$LOOСC x^sco]j`Y\/_(H(r z=2 ^iJqFFF`2P*;@5,0ŐH$D%FahO˶sAIP@>W'+mVINժ,2/Lnfכ544ł?MԔ =ٞJP(+W Ak ?RF1>>͆j_|qFo|( 0 X,`Y'a4SOY#J!JҥKcn~Ng||/z=DQT۬(1 f].sfϟ?h4~& `% ?F{{; lj'Yo zdB"ذGԩSx`Kk!OAp!܇>!˲u8DQ_DJozjVM&zfӔZrg7 0 O.>[INaa6!ĭhmkI)ϗ8$P(l͊RbJUJlf9`hjH.)=+&i^DeLcYJ[mv!Q ͼZףc_ )m4ef¡ͭ:caV V4ײ6٭Z{+U8$49_+uZltm491ݡűw^{PhfwN|smQ^%vQ\nZY)VoeR;y8r鷯+Ъ*wݡLK!ڡkeWZptIb%Mo6a4][rSV[h&͆٦Ъ͚L&u-V"VI#JV8r, %_\.X,6m0 <$irW֑#G0 fff߃B6kP.zET*|P^‚fkW ݻM[;s-04 xl^Uzl6pGmvhfV+, zEBnܸ\.u( qwޮCnabد0n&n7A6DQԬz8a7nPυD;|=eYܿXLP Qq~ <#Ji~J.ڽٌp8X,F=%;D$?~\6 qwq>z{{5B(ZSgg'x_\;dvv6 ^W" annJsssVo>Jw md2f!Nk^#Cp>u8{x1??RAyU߯"bMPp9iܺuKP4DсMc8H}}}Ʋ%ICu}YJB򗿌'xB=v;ݻ >u(bYV;wl~FFFd"hJK[\\eNER y0 cǎ(˸qbz=<Ο?[l6d2L&`0e E;Arxx4]$eXVt:MbPAi6RC(Q111PVvt:a0́9uJ%T*ܼyB\]]]`YvO AH$q> ͆=(jqp=x^eI$Iqrfb90:DQDX HRF{ W7V8Nn=zMMfggL&qx<i'2 < Μ9cA$"$Ɛ,%ߓ0A Y~|>i+ E2(?_e5lw<~C|>&wfu%8Y ^H>+ FGGH$Ե iڏc/y晦hlrQZ׻'z %_L$_%ꫯ6}m;-(IH3OpZR~Qnz⣏>B^೟WWg}ۿ7˿__p[?zvsϭz0zصP(@=Y͛7?k~7VR~*v?E 㸆~駟nI?1J~i=ztWkXq ~@;M7ۛtä+W,nVe Fyjj꡷/ǚdadG}ddGGG?t|D;ׯ_~|yC!{|y`0t:uHPm.\a`0WJRG<[uvL&:\q=@OO^yx^jHJn|'N#Mx5@099 Yo\.p%cF#VkCwB}&02=22y;wgϞkWD"qDSZwy^WPr-G [,yaaᑷyMިj5eYYɁ@`O9 FQtn:O[o%t:‚ @B{A+effF𜩩)ޣ6x@hWt:t:Hu(dI/ IDAT$HR0 f{mFFTu188@ t: If4 pMD"싻ÁSNvf30^尿y0> ލDqȑ}{SYAOKdru8did.7|]nZ&E |>֭[6!d;wl9??/OMMzޝ;w7l:sZ][QTH$~;3iM(ɓ ߿c6L[K~DmC# w`hhh{K/ᥗ^:y|G$QEQ-z P(`hh=ܪ瓽$_d.\hj6q-mU&y&._sBd/o&DQDOOe\F ۂ ڏ^ , 8Ë/bб$i*, BŢ("_l(eUlC\Rccc7v8Nqպqt:x<CX,o~O~??-l ݾa'|?JP*=f޽{(f?s?G(ZU>9| _O?Qth//WWO'P`4[[hkk[O>w) [ AqϝT.5Z\\\4wmN׈hs9j 7 k]ȭFhLZM7@ 0z;Q ؅5FEL-&Q`P[s=z*fggX݋NC G}z7bկ__{ntM{'ۡVO[ٙ $~_q gs=?{g^z /||>L&CڏTFpݸvJql%yΝmTlo< U nqV+Ax/I{{;`6!FFF0==H$'լ\.3Gh4*z,>\cFԏl6xw{n m?իWN[AkװmT*X`~~KKKh4`O>#(e<hmm /t򗿌={"{97g?G~>cx'n;4Ο?eo|A< ?ͬD#9`Y?33#fm3,[QpW'Jl]fCiZ6/҈X"(E 3 ^/( +`0rt_dlPǎ; piM$-Z/ B {D"bسgv|r\xQ~&"m~xxsssp8elׯyӎ> FOXoW)o~ 3<رc裏ݍ?]~իw@|s4}|ss=W)BNO>|}]~it RH&җt:J'|RIgk.KڐB!LMMh4$jcc#8˲UӇ+H L>E2NRI.EWp:D"hUtww( -( RA(ֶ8nZ՗t: F\.P??;; 6mW ,KaZ{Q)=Y "V`F R~\mj颴 pEh\^^9{x8EFQܱmyyQ^T %Ju~?ӣpTv{N49D"G>:299)7w}1>>N8ørJQk+++dFΞ=Ǐ+v~ł߷ol__ʵJv} /( ,z,g4Aؾ}{ɧH{ST`5: @ᥗ^0E;.qoS:'L&fP(x>傫ձP!jm0eYvW6n$]B{i4xIW9T*x^P(%;qxeV tuud2&ɀCܹf"WT*tttk0<rV~t:"EWzR;Khhhm(JAJ BpW"yڵ fX,},χ^,"Fywq9C$ <|+hmmFkk!"Z:D,h =p[9L&<"Evo?AQbYN%L&o>|G!WEQ8tl6[QAW*|A<'uP(`xx<σal w~iGIss3T*~#'s[؈_~E߆-Y?Aԣ7o"ciiYjpݰlu1uM;?c߿_00p\p\JtWR(l6yG>Vh4={W\;D`4Iql۶ JRwxGoo/lʽo)qp\` sQn`x"@яMtU)AP(byfb1fUZ۷pn|%|_Mp\p8eiK+Lz;^}5tDmmmPrH$%/,_\\D$l&U2u4MWŇ1p~?84 .V!-˲8T H$7FRn `ii >ᗑVb!j58+ˊ@ SN!\֑䋨+pؾ};9H-ʍ8(f* .\nS ;GGFGGqxj% AQGGzzzX= Q<&&&000XS\\Bβ,:;;ʶVr>|XX4zZG+sqɔc!Qb~?pT۪ib߬0 dV>JբVLSSS|U\ ) !*N] B|emm籴D))$_D]p:۱P[FI1;!bAPn/VťKt:Q(t:q)ҊaXW]+|Y{{wSs#D|r+Vu#^*˲X,r},˔ MSa.bRU`qq=EQPդH f hhh@OO9r ]ŶmJ' Te4MtbAp2 QbB,:ɤtH%'m Rmmm`d"%jB`0GzUAVcpp$_DUbطo$f3FGGRo.9tl6 v{Ŏ~ujOx^tww+Al MӤV!Quq.?V:j`@y/a`X J~Gx 7cݵk(iJD QU4Rnh4*25h0`6UQqF#x0 I*zzptaDV4C~?@Y133`Z*H *I!~?r\SOjnX+VZ333( `߾}$#Bq$"B2ċ/l6 łaCRF0(B8bY(8åK` ^|E|>%6䋨xlPDMMMUAR |5_^\.WMW玲 N ̙3xaQHETG1=== GJ%Dў4 [Uӏ* xwp8|>C#䋨hpX[[AGG!)nΝIl6v;oi à+AeE/b_E7%䋨H `Ϟ=D"08}\TV~g)U7w?y$FGGJp]>$"*R ?,Z-BF"DQ#zxVmYEF(5|ԩS?͒u7d2vaX066H o`rrE!jVM#Y IN111!orꪃVl~fİqk~~G4 p8@Qfgg122BQ2$"*F>jE<˲r XU:S)ɨfqHRpJH4 Ξ=_Wرc"FcU5%z䋨t^X f!U,aWztnaTǍh$ :;;qşg j IeYrMWWZ[[rm`$޽{܌\.H$Bh<܌~p%|k#P<&&&puFtttl**'nCjjjh4d2h<ŠRqn7P(thA|{c\r:N*q7o*ZFgg'`jj\pfdV~? C/B1lC"hCHuieeEvev!BMY,LNNn=Dy|۽iq <8~hj{=l۶ mmmJTtxpի( =ҡQEQVB^d:.$^kZZZ+4 0773gT+AE/bǡhtHUIJlE|Ss{>4 $A[F/l0ߏ3g(RՒZMdYMl)'ϟ GTjx"8C0 *@/,&&&000H$ٌ>2hF&ʊҡlAQpH$ÇLģ#Qr|~D4Mcpp"k ˲7jmmE*ᔜ^^7AwE/N'hr`X&H l.S8ͤ)9055USI#`VX Ĺs* A$_DdYeYLOO IzCP L&!DKL&zzz{VE0ɓ'paJED QTB8v咓66ZT,bnn@@pJVȑ#FCC8@A/~?6Mjc%'_jvBJSv* ``CCCXZZR:4 MEQ 144H$H$O; IDATjm۶ ,byyYPi׮]yp8JP( `}v+B /d(qD"(IʀXIh6֫x<{],ADi( χ/Bȑ#dLeLLL Ƒx(>Vl===u>@iնWfkk+ "b t$"X:Ʊcw06׮z!jQ՘A=FD!@q qiR` a4 J"+RNO5$_x"F#o* *FZ[[0 !MLL`xxF6 ?|[p)R)ȫet:tK`l6:;;@~m,?QR);whQkHElI<Ǿ}hH}FTՇ3MxW~/^$]op8a6|+B:A[C/⾒$&&& եtHO+)&pd2˗/W]9CKK R^}W(ܼyShN[[0 ~?Jpq)AT|9qΝ;0:: ŢtH=Tc[YVl6WR.`O^ÇfQ%HEl^B"ӍUi՝|iZݻ0;;xmiiMӈ|T X.4|>_D 8<F#<#T%6vV AjhZ={GEP~iC#.(*D=JXYYA&ɤՊV4DQrmS 4Mcmmm-*J.nllDcc#h˲t:4|>R)۰X,d2A~,x Aגir9{17x ؾ}oS:Z0عs'v!_# _n|F<СCeZeYDQXYYAKK ^y5d2d2R)\YY7J{W(zzR>&]sZ,B@AV/}D] WL&!|Sd2T*vرj7u0iSLfS򵲲"A?7~ 3 133oo᭷BSSr,l67nl.L&#'JEɉ4HӴ\(nfd\NN/Cբ;v^FVq%y.nua\x& H\P(ܹs8qrp…MX\\D6Ҧ/~jZtM)Y444u[M_Aؔ|%Id2>T(/,bΝ53N| G$;wF , ,0A@4E*0 :`Z`izBr pW$nbH$FlF<Gww7?^_ߠze2$ ^$>d2 ^ thP(`vvΝC2lbb!I}y\xb0p8[̹r+-ӊ`ǡ亻|>ׯD"t8rjr*2UeeYa2dr᪝M$dbttT(J4ˢnW,R%l6Cj#333r E$Q:xDERu h4I2^d"q"˲mUVR$} 8x)ah4JC12^BG!MEK ! avv:rA;v4Z?xAXEgg'l6E?\.W9-..ɓyp85RV)<#czzl&LEe)V:%B!:u :7a 0 V:O>ҡ~GOOk^IEaϞ=O; d2mFwlO}S\p,éS_Gv %@4F#}Y;F>thD=QzM)\NgXVeيZXXiNҡԕ\.'sjQzeD"qd̤P׮]C&EQQ(*ꆢh`2oիhllݻ[o&n|ӟ.9D7n@(Zi,--VWUIX'|'Mb1;~_3y 6ύ7yb|.x`2@Q|Mk_aL顷rh,TTK`D%Sn~݊T*%:Nh4R+R>7Z9N8Ŧ~hX~އxDŲ̌h6EU=MDD"z<_cFlFbMfj>'jijH$"?.mŖNVc-.."JMsT*%.|>ߏ\rbGVc(CV_.~?"?h.)p8FܼyD>v444BǏpiB]]]`@gg'x0`Zj1>>L&Ʉ&jǎC4E{{{UOoJ顷rqC[XXgffr,@LR̦顙Qz~â;<<,ZVQ7O;r) \.yj㸲NW\8JyMH[l\:nEny dn}Mgff6\.z_]]V O;Jml6|f9iLi\.'z<۶{*kX ,ˊ-%,˦{ 6t`0(r'?.]`Pǥ?ovll69VŲo6K65{?Gl6fR(X\\D6099h4@ d2 r<.˲r8|0Z[[a0ׇh4\.SN!;v "FFFJN7b˽F[[|>KvV[ORARm*x뭷 8>CX,0 d2 ׋x<~kr7l'OD[[:;;rV'Oqhii @44koqqQjp83 >Vp8qALNN<B0>>^5 bUETO%Q֡ca6M/vr9<)uN0{CCæd^y8LOOˏ777p`vvh8ǏMP@ k0Z&\~d2(9hM d2ɵV@ AV}~0ߏyab1fappX\\ĵk)d2P(%xJjA4y|M577cjj H|*/7dP(RӃ\.A<@r!cvvp<ȑ#Ν;oP(X,h4^JZ܌P(tD K[b 79ǑH$0:: ^L&f7( nxp>( GRxaX$$vb6P(P(6]{/_.F#ӦىP(WжLNvQ,--W_WnZ}{˲T锓D"^0 6pZD"!ߤojy`\.Qt:( J.~}P(x뭷@48qo~ ,--l6 ۷oG[[~iyHFmmm0 xpB駟F44rzzz3/cسg&&&_6 vD_/|mmmn,⩧*//LAX.EQH&x뭷fq|˲x'_v/(l6/sl6cݠ( ۷oG8 4 O,jbbb.]B4E?ZZZcᩧBGG| IמbA(jMӛުj޽[)jJ_xߴ~wy&I&[FG^qa7& z,^GGØjk_ p%|GO ez>w _x޽B;L_:mɴ:{{XQ%7V3]5kii nG-Py 07H/}yIǭq$BA.З~Vz\dM*Lbt h41ĞL&144Βe>|?<~Aiu |4l6B ~ hظ)Yd2f(ꎽkHN 2L*mUoo/zM:sp:p\3gѲSzU*h㗙{ ;=hЭ=TdjfKa9s׮]Å !ҖJV-j}ܭfIRF IDAT7[*^+UZ.yֿCnϽ^]^C*brxc6 n~,ˢOmc2].[m׽^ݎZ[J*U)ED/sVj˲rxzHoe0즮땈aj:Rr2Q6NfueY|099 ~SH#o%\~,$RرmM** ˲y\WiCAyB!b(OT*\.RhM KPxPL&SZt:6hZy'L rnXX,V-fqe0Cp@B`0TL|J P%߆SJ].Cnǎ@\^^.RTY08Nt(FxsHӴbUh4Jrplj JT*% ȗb ˑMR+ Bp8e3͠iFc߾}`>l4>> O'ޏZD"\L4 CE. yPHޒ^A4 ٬t(D N'HVap axxlUՈD"x122L&SsM>kW_}voF7B^Z. a?rqb.^X(ԉ*^ !8p?ǁ2"iJL]%_{b&X*<,KovMMM(C:tߥf1;; χNySiN0??_F|E6U,qy* ;wD.箔b('Uk곟,C?~&IZ87F|z}O8ߏ|> FHS>GKK 9z <σy ,˅'N  C& P( X,%T*@?nwݼeU%1rO|>To4e3(Fr;1EeT*po}[8qxNÓO>Y8Mo޼7nT*<Ӡ([:~$I#FȺ9a`41;;W[(EQ0LGDQ<3ۿ۪/>%ՅOJE:+JQeY!ՍT*%l6bT܊`0(677JRWRxieY1kkk|Dd,51,ˊVUշ\N\^^?úb0T:m%YXXi- YV\333"MӢ jY%D~h4,5V[E4W:,'~m/Q\Faa["ˢm6[E_H1K&\NjwU Rj;P/S@Z"zbTIqy9UmB찷`]Dw.Gl녗XpGmVI\ 2H JC #X:v7زy͵ϣG 4^, A^}7a4޽ې$!b FhX;^HcccV{^kr>S #V!J޽{x7 yy& I[SVCPo/^^եuZfŋL'gO@>ǟٟtvBnfqܽ{X aGfAE-*n߾ ?X\]ӟL&L&ۍ߷ta 4t]o~{n^`z__Ov陸 |X\\D8Ƶk022VF꡷NmN;MOO7Ţ%ubhNb1ym>}ڐ$9]5dYnhȲntt|nѣF"0WF<ohHp%TUE:,ٳl6 ym4E4岸׫VA4d2(~`hh/V޽{(J $I%¯"LP( H`vv5PΝ;PUC 9Dj[[[@XdYF4(b * TUJpD"~T*PBUU "@$D"kzu<|<ɟ={p㧶ZR ˙  "ZRTG?(믻ZbwwL|~EQD$A(7;JudYoΜ9IN:wPTfwC4yE3^xϟ(]}X,bcc[[[$ `@OzxTU#3/^ N#ẓ#BJgϞ$IZ {{{4 PU6 CCCu6+<ӧOSSS0QXduiգGKKKړ%`xӧO1!B#7677{jӧOwmDцnhBn`FCTO>Fcaa ̖. =s>}وRtO84Es?RA IDQ(㱺oVuϠ*ë<$I2Gsuz4 {{{فx :yL|>x<Б#u{{{PUB <@WtA4&''.鵫T*( .@ A:}E^7Rd Àf[oIpYx<Y%.^znNEjpfr\4CY* 2t]GR1Otep85 b?6kAS z- e:`x!t]7|CMjFGG( _Z]RK5<b &Μ9Asp\m=ǏaƱu]n(fY _mrŢy{sZnW4OGy0p5Gt]p DQ4OnPEQ̐iE1ooEQ4Dx}}8fVX,;NÀr0::z{i8}4//T*4 kkkyLcY QO|=TU=vyhr|쾏4?&E _@4}rZ9bc)±Wݭ4GxbLG]* ժy|4tL<|{{{jxhjs7p,HGN¯kBeܻw#|ٓ'OQP+dYvx<9sعyռru;Q0|uJr](Jbx111:=φ/-'L+++T*7?ܭ/r":\ԉQV͏\.bs詑Sׁg.p҉yr+?>s1Q*p8w@ F0$IX[[C.( 9~-<څQi6?( WDDoz@_5"DQ(E#6D6"N;X a Z]/"[p( HRVCD}ወZsወڅወڕ+W*ɤQ{"k( XYY̝t]?z-=]jaK"O5:o4hnta}?ގޗ,pf12ED=eT27o Pm߼y|n3Ț{n*t:jj6yu8fܭ0|QϨV1G!g``~ Y6lfggGKQuE<|W7ٳgN0|QWuT LR a@$b1LLLttTלrC4E<Qb"ԜSrh \J$I$IHr"dYdYT"+hl6 UU˅@ _Wx"v% $jݻRT*d2gB$a.'p _Dt]GP_|M (dY(=Nb166/B4(EQze0|QǺvapmK(v>>;׿@$ҒUѳឈ:JT Á> bxҺB<GXg}ÁӧOc~~R҈p䋈:Oi8bX[ZA˅1 rauuBo;O~/"\V$t]˗155\.LMMudt6ID~ _Dd|>K.ŋw&''r!}+vLNN޽{¥K.o1|e155QW_azzz42DQ׭./q]^GXD"b^eݎׯc``DN7$_裏⣏>B</K|VDWVڦ(mIZfnmz-¯Ykcd`$j/"jL&Eܺu ###*~AUUs~V|I:i666::|8A͛7!-t]"|>FFFt:_uܿ+++$ X p\X^^k}8Naqq[]Q\VC*alcdYcsscccd28l( t]G45%E ǩT (Be@:FX 2GTUE&$A 8sYGR@$Ȳ A:$I:xtbssOF:6*"2VWW[P(Z*in߾ׯ8t:!In޼d2 0|݆'Nfff*$I7P*( n޼ I "~md2y-5nܸY7n8s#J#͚&~s>Qq䋈Zncc(t4;;;X]]>  "V!all vwK_UU#Vw܁nGR u]֢uݎp8 WfYv͆iݎt:;0*~"RUae40 (bll (Bx lll^'? .]kNE'?s`i&I .\7x333Vn l)Kܸqa@UUj u _DR|:gB04GӇxۈFt$X,7oBQ\.|]^aMΝi A@RA*"' ~+h!qB!dW괂ޏD-5_DR\կZ8xL&qYj5bhhYr(ׅ%I@c{˲TU AcӈR[W |>#L0 TUEQZ|N2$FѰ4Mӧ 0;;5&EA2D.fGJnm2i4M;6Rr YQͦ5k`0pm=* Ţ9WT`;8w2\.K7ހ(H$ED|"i6lJgAǾr=7pW;ȳ**ߗ]'Q/"j/= DወZfpp(VBǏ!"Q0|QKIdP.ۺF0|QKɲRS֯t]GT 6zT(2>T{{{H&]c4WPRzW+˨T*VA\^XVrJ?+++a7~][#Q?c"{ב]8<{Y] QOc" BØ卑_R j###Vb9]1??p8)Gc"D$A.C&@^r^TՐJ055mN5|%$I6VWWqe7^*pe2xYወ,\_#NVj5i$ u.'RHae(Z]Z4 `qq. DgϞ,EDr:~:y$Iܾ}/[MQPK R/E_}r$R0<<`0huy]#BRg}P(Q`RNZbppp:Hd2P/_ ccc:Μ9YaKyHDfAeȲZEQP 177Gyv@OԩvD"<}|BdԩSe~/FVCX(( x1Agu`0! c}}|$AE|>SRT*A4jH$Y8H%JD]fA$~P( sDQ$IX71]͑f2 6 gΜA0D ?^ED]n"4 L (Jf߰P(`0+EA>G.(p8|BuD/")(bzzӨVAXiHH&HQVéS[orvcpp6Ľ_%hvc]ס::Q.QT<~X-(r!Pye3Qa"ukZ>4M3_TMP,zzk``NjGJIDATl6x?O!IdY N'DQ4ODወ4Ϋ0 T*\. wݘ0?v8Ǯ><oDCD]ወ9mC׋MOO#JAUU(Eԧ~duDDB,--2 t]""QT*V@!2n72׭.,Eԃǩ`ƈb"C _DDmv8~WDDEDfgΜA8pxE)1|n7[Rd2ܹs⊈, 8 À(VCDmEDd9n/""!u,,,VY]^ I( Q0|YHeb1"vww-ZወBvϟpYw.c/EDd3g߿Ͼ_D=ወbvn_DየGQ.'YH$`VVVx#Qc""{{{PUrE:(E^7$EDA\p8 MӰju9D _DD$ 8RX[v _DDDW6Ń,^7/"!2  .'1 _DDhii @Qi!׈ወ@ 0f.^#/"uUBT*eu9D0|u(g8??oq5D0|u(Ip"! _DDlxx}z Qs\AQ+"ወIX,MӰlu9D1|uI8 hfu9D0|uI 2t]ǵk׬.~/".!˲_D݋ወKDQb1@:WDDQp\8< ͢P(X\}6 "W766Qfxx ew/".s]l6!N[]}G _DD]F$x<躎l6ku9D1|uP(ƾ_D]ወ MLL`xx}up8=e(B@ `uYD 8EDԅl6BBjWEDወKy^LLLVVV(ѫ`""bp,CUU,//[]/".f055͆-n9D,x<(X__"z /".gp88Ez8( NGEDDQD0dY<|⊈yzf3GVWW_pC1|Ad2HWDD'arz|eQD"p(rVCD'`rsjL `hh*u .WVqpp`uDA^ Ii3z,ˈbpX\\% _DD=narVEDወ\z_ Z[zT骪WCDM _DD=0 GEDÚ}(z D"b Hz80t]ǥKx#z\ @8yhfmAD}ወ aذ"DQ"(Be(PU⊈Wc"bii (BQi![ _DD}BEb1Db""#EBTrQb333T*VCw:>XYY/"":&CehVCs͆)l6p55337x+5/O$}ud2i}>}+++EQ,cD0<xbY.hMn7 t1Ja}}G<uW Mm:Ąe%n$Nkډወڈወڈወڈወd$ N't]ǩSpeAK{%trnwZEQJ  ÀlwnnU*0001@D=qE* r&&&011Rpj5J%,,,v/Cd2ALLL X,bccZV޽{X__傮H&PUJ%"Nc}}[]+GR׊#_-( ^/_A'aV!DQfiu$8 rr$ bwwPqEvzrxap|Ǿh~ `4M Vr Á!lZ < h9== Y_H1JKu|駨Vp8u>XǏ.//P(^CEb11|aAP0_0ggg1;; PUdr,#N#֭[HPlnn"N#"r2 *y?9R\.4MC(<ׯ_q…>CV#cMϝ;Q5D" .hGiQ* "?"J!LBEELMMazz/X,\. ^/\.b+&zfffz155esǸu=_*B&4DQ * fgg! _-Ši>S$I!2R BXXXx0055I|(x:666Pհ<>#,//O>iN'D"혟G2n$DQD&AVW_}ӉYܸqF+EÇzqMOB 똟ǃD"IuܸqLϽoYͰU躎Ph0c)HopǞaxz'O `tt@DQȲuܻw0 X ϟ|aSSSިiE]Ev;~bwwB404M;6e#"Ai/QJŜִlEќ,J888joL/%FGGvQ,i!\=AIEsKw<(86 gΜ17\.T*Ai{PV_B\iD(*B\.dY62vww1550zY୷2kww֖DQD6ŝ;wFQV;w@etBee@^|Fvi4MC:c"333A(9 Vp8~uǂ @(Axrrvcw׼ZcbnnΝ(8888^i1|(w::FGGv셛:,$I(buPe洲҆u/^4R;Tz86 D"aNo;Pyi$ hr$vlMP*{ ǦOzaljnL&wyǼQ!2~?TUՋiOMsm^SsX/ҰĎ^!;@4]7ͅ/ S"Jaiiɜ:Dp-<}T4pFhp#B$ h… pTUE\~ǙGT*e^\D8"sssvr~?頡!VVV033ÁB`&Irfff=o=#J͛Uop ⣏>0 nc||j dža #bhhzt׮]톢($w oܸχ-DQGP@V^(i7GE` >7==ݐe2ΣGX2NH$:^7==XYYlyӧ `FmCЉ5$Ijh56bرU\nLOO74DZI$ m>R0-ⱺ777[5D$v$"a p Y 5XGokecn߾}q\.uMx^T_ ]Q׿D݌ወNN?趓|EQ.|7:u <&,288hu m'C2h4Va%M:zɲlu cZ~.2Juju}M$0j_DDDDDDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF _DDDDmEDDDF ~mBU4IENDB`PyBDSF-1.10.1/doc/source/quick_example.png000066400000000000000000025076641420247104600202470ustar00rootroot00000000000000PNG  IHDRth/iCCPICC Profilexc``2ptqre``+) rwRR` ``\\yy | 2 U +'300%@q9@HR6. r!+ v.z H}:b'A2 vIj^ʢ#ǔTbϼĒZ@! A!ahii "q(v!( cd2f` G1G)I/15C}}sïPo pHYsgR IDATx ?'IE ɒ,%iE_ R)**Bie%KJ*yq3s<׽w̙39s9ysM2xд]'dWE7AEUD@D@D@D@D@D@D@D@D@D@DdMPD@D@D@D@D@D@D@D@D@D@D@{{pT^u@D@D@D@D@D@D@D@D@D@D@z@@AD@D@D@D@D@D@D@D@D@D@dW7AEUD@D@D@D@D@D@D@D@D@D@DdMPD@D@D@D@D@D@D@D@D@D@D@{{pT^u@D@D@D@D@D@D@D@D@D@D@z@@AD@D@D@D@D@D@D@D@D@D@dW7AEUD@D@D@D@D@D@D@D@D@D@DdMPD@D@D@D@D@D@D@D@D@D@D@{{pT^u@D@D@D@D@D@D@D@D@D@D@z@@AD@D@D@D@D@D@D@D@D@D@dW7AEUD@D@D@D@D@D@D@D@D@D@DdMPD@D@D@D@D@D@D@D@D@D@D@{{pT^u@D@D@D@D@D@D@D@D@D@D@z@@AD@D@D@D@D@D@D@D@D@D@dW7AEUD@D@D@D@D@D@D@D@D@D@DdMPD@D@D@D@D@D@D@D@D@D@D@{{pT^u@D@D@D@D@D@D@D@D@D@D@z@@AD@D@D@D@D@D@D@D@D@D@dW7AEUD@D@D@D@D@D@D@D@D@D@DdMPD@D@D@D@D@D@D@D@D@D@D@{{pT^u@D@D@D@D@D@D@D@D@D@D@z@@AD@D@D@D@D@D@D@D@D@D@dW7AEUD@D@D@D@D@D@D@D@D@D@DdMPD@D@D@D@D@D@D@D@D@D@D@{{pT^u@D@D@D@D@D@D@D@D@D@D@z@@AD@D@D@D@D@D@D@D@D@D@dW7AEUD@D@D@D@D@D@D@D@D@D@DdMPD@D@D@D@D@D@D@D@D@D@D@{{pT^u@D@D@D@D@D@D@D@D@D@D@z@@AD@D@D@D@D@D@D@D@D@D@dW7AEUD@D@D@D@D@D@D@D@D@D@DdMPD@D@D@D@D@D@D@D@D@D@D@{{pT^u@D@D@D@D@D@D@D@D@D@D@z@@AD@D@D@D@D@D@D@D@D@D@dW7AE %pg{o袋f~x_ w}w8|3AgsO(",-B3*, d•,MCpY/x Lekz]ق .=aӏ|>.bك4?#(*Ǔ?3QO7K~ a?~0Ko@ F(" "0.Nϟ|\?yAIAQ+z.Evm7su^[SO:k:wyg~7t>:PD@D??gwqG]޵|ْK.;찮E~{WqwuW/|$ ,,p@Q_sJ+8z39>vmC_ók1t:p2>??''-zhQ[neKR/}K-c0t:^wv* ͼPg;g~l6˖Yfl޼y~+Bg]tQCk&}-[q߫_BD@DwfOxg0tA!-R ԧDD@L[LC@sTRYFo{Ge]VLcJ+.Wl/0x/ǖxE?8(cE>'~6W: Ҋ&0`s.]D@N?"ɶn:/x BPv0hv'fxM}^gh s9'Oq q=\-8OE@D@D@D``^+u zիUW]5\c^_:묓w0_b˫‰ " "00ԻW?elͤRQGa*#1R߸{t"O~rT/P"" " " }$ZB⡻{2)׽.쯹믟Qe)UN蚀BtMT@ }ӛTx{ߛ4 sqBcq׿ Ӓ ׶^JaVǰu͛{ȟDD@f*x 청\2̨:A Cɼ/ kΔӴM>[GͣMYҠoZ]P(K]:`]YƵoԺ!{K:O%y+)!Wtn-%Q۲L.SI@syzjDZmdUVX̅09)9ưOS6|fЇ>4%/)Cz<񶨓O!b-%\2{K_ZxxE^&ey*t>dys^8xD4na9 _r%q -Pgw7>n:S?w}Cp]tSw]v~O(*?>\COzƠPBgz׻7<(A}!>{?p$P=ak/3Ϭ*th./yG>2r-aaf󕈀@ >~3B±^ R>GgyWP(Hb^!8 3þFtMF?hs饗flIF;{~FxtIjdx?Y1\̎8l5FYF>yjw(]B_(A墋. 3")0p 3t&3e/{Ya/^bPMfF{gG'Ϫ<~dzhзgj޼ya xkv݁{B?^`?nF63yy睇~ڜ4޾J+~W83k ȇuR)~. :ZYbS_җ*s 64 zs,s#>~߭̆zhȅ^: '?vce6lx+ e;RuosqmsLx7pD?g?Y]qOES0% wg @gNVngqŸtR WXa[o0P8Ό~|/@\|]w5a q [lŤl0zHcő-bqL|>!!?cLUc"O>2]ӎ83~$f|u-~v4e8O~?nxwTCݳUe>]r T믟[ǩo&?twޙqH'NSL5mEe Sۮw3O:>n/x4i?*U_-xymvXUVa;zֳUr5nET̡ 7C^-m2w}s`B] oxCn͐\߫'ktw3+1ci|$4)zB5?,d Ĺ=qE~vuy30VA^ܳ:2X4#|e:vݫ,Q:ho ,&6Z ѹvm8Op]u:GT$.?6 IR6~qHܮ׵f́/Si_hk\ Ζ}{_QڝQĜ|k)r*ިm)x01Cwvf31DfJ\9i, {!; <7x ^.\o[o\CN/@]3:W{-2# 2fCya3Մg&1O/&Yg,nX#/>񞩚t.qS|gQvKx'5q\w<˂2:D+Խg<a6 }Q'3{g)ᙆttD<͐fȆDלPƠ@_8Wn,WZ>CxhڼCqB{G=n{ǢF aʃ doidԶgYJ7|s8}'}%}xғT'` DD@D` P[l3"3NÔbaw)&{YSĻ ?4({_ʋe|Ss!(K:j+'E>6;]|=)ExӢ̦XjrS2 Sx7Od&uk F6ΉdJCr۴&%3>=H[ao wqfHQjR!AD@:${27o3>ޱm<͠S9'rnd9k}fv&mH6i?Yn'U3򿲇}<{ՉEs3%gƜ}m^}=sba0k+<%&kfemլ9)eRwxv@޷x=aL0 ERi7̸9g͜Ō"n?eַU,W,21b(9[LJ3iЙR+3/l@kR^eFI q}nѸeaƌ3@?K9S1jVJOxU]_FUiÞtx7̈́non)׿^p3wA,6x~u'L@Eh/CT xs.RFiK~r)MI0B9hXU8)0ϝIb}UG >(ԤB0fN"FZOۅ޼r&#Ag;tb ]J`o*mtԜ5uScwSbĀT;OX*AxEڔN_yVe3 oT)c51ط^ >Z~żFv΅aȼC;lP䷇fE}=e.L|Fa7scv ͫ8y ݨm^4m7 \RA ~:q︗UR!<) ]#t^P9S!(1u+}^J}p\O^&}l]"͔ ٝl<[ IDAT/]+eŁkDwK y~q)m<2U {n2o2یi_V~g΋.fjs̜.f%wՖ20H_^v L i5V"" "=0epcjq0|T11da PYOFݥ0J>̘Qquq$dJ="x,Swa hX8:;bŔYubWn :puOD@ ]"MqE wq1K% ¢0 UWQ%f ";?'jUER!ѧq}( " 1&]8C@Q1 ɃNwE².j@NP8N:1OxtPPtb]T#gݛ8+~l6E>p%#]bCu,#&c +?a[+_JI,~b6 >1cƺdS^/" ] ;U&b!8)lb vȼ\hTiӍ6R.^7yQNSy} }|źH+7'!uߝW0> T_xg80"r|8?bW,FfEN=T~1 #MbU{=x[ءq coP-:mMXYgQ̲pU,⋹a> yzY B1ang@ŷ'K=: :lpNlIiSm)&⁴T.Rm64=:, T1MNϤa}su>72 ov 8|!,dvH/j k  ?~X 8:;ǍRgm݊SU] I_SR"ۛ>}/ ma,uicHhklSuQS-eqCdQ"GHq4}iÀ5kG ^HÇ ebOxX,@̩˺B;oAd QZhC^rHffmf]Ha13B j, o}0㙡16fO\paЀtM-?O8RMdyn֐[4ax3IuH=6Yt.ǭosT>DԽ6ia&?ItPgoyHDƦ/n 7m6?֓-?x3֒ @{?gv!)6 rY^ 9 u/u|yz SFWO3~Vt`<5bc?F:g\ԥu_|}mچx݆i|u}__NRO@mVs?ⶄ^< \i6Y gBbun1,׭5VyOd:u{WSN)V/6|sevU<(<)aSCYgEr;q]$#\ٯJ3"up @Uzʩ*:xID@D`6 a v-O88O1J,V8`\wuâ>kP~~^B9x(n7'hI츦wꪫ}{rRAGRp!|Izk1!)\t-d`n V]uբz&KO 2Y\._;G}vy{W/r̖0+'Xd_/{Q[ (_Lw=Ŏ~ -/YD`Z`?-uRJ"(LlTgvs;ۆs 'T)_+O玺p>h3埪sqB N裏LJ=sm. YS5U8tx# pֵ}{f4*!f 0XP%[1Vm` o<9ąPLkr ޵>S 1ҏ{{?cYYy\z饵2p*3Jq %M>u43H}ډ3`bA* u:'?GB>яJa&4a#oc=}wHPd;|ɣd?б묳N13+JeB}g'_D/d˝P9D@:t|,.LN"jqC56΋ FBPSS?S‡ؗsYbNLMM0Z΍*!,DΘt` !x+tIyy+ѧtIf9u3ږcXc/N/7*71i!_8|xh GK.$?~P8 S~vi!6.tøfxӹe1ݻ+l.@cJ2g iLk@b2mu aB~t1бa( /&NıSC ɤ^Sg]W t"L3fN>y _R-"Se~C_¿`u{]a3x-J@AE7-"ռ}@'21/B믿~w:D²1r.='vc%^x{=dY. B^җ[t?!gcz g0l\x2Ћ@90P‚F_`aq :>PpH s,=u \uOzDLzf| wO!<±hm  #>c 6(I'Tԡ8C˜cX231ЎwB͂F;@gz Ce 7 Ed&Wì6N` 3=d`6:M}B{I__wm9 8o7bX|AZڕa%~@'"%n: Ö!u?oCG0=N Y/|G*m<40;7e)B#j,uPB^+BcZ_qn3Vcx6.MMmv߼&eY~SH'guCɘo4%=5|n 92}SŌ~8?|6dT}2o7ooJ~Zǯ<'kNR S1||usXiWm[_eO6+:^ }DEeI{r3L:'7i?`S6@n"yN+3OogE^*,Gr>Гlƌ|1b_xg磊5T 2ڴtP֌ZҚ27nƯ)4YnNE3Oʇ 3CT.΃fp9cn6P^yqGL8f4 Ǚ|ҾW\1^%fi^ɬp@m>zhn" ɰbАAܜ|>=5\ sS63綶Ee>67.5g3<y7w9N6wԨs}U:>Ѷo˔=AIۚk?IrRQi*~hl{,"}* ߣ mR5ͩ+/yKB:3'OT07|ne㹱Y 4il\|}x=Li w ^.xZq Ӟ]X3 ajpӔ?sei#xl"r\o&fG9\R Yg8{>yzxS|S'^AL&PJxg-@HBr1,\3Znʻ[)3RXqxxZYY'%9x8^,GS|kIC]'xk% )ƒH|NDh:ޙϙ,8?z5cobS0nN'S~ߙ xLJg#,fTe~8;wF!Ohf+E_u<9e199[,< s /=iȫJ<>] `xO9P.ocb:I+e[J~S?ꨣBCj)7MG"}$=XX:ID@Llb86ϚuĨ%d B'c*@6BGaX_g ngG%1?dU  3"zm 픏;_RG:^D`* `#4PGee8"5=jϵ3eضȇ\c`)pTJxő"52`1.0ꪜycH9p<:6ĩGFF]0QL5%_tDXϸtتkh6:A[6Lybp P=mܔ ԠdO~M8Yy2Ϟ{+i#≧ J$EU@g> 768.m)ͬ  Jss= 5}+?=R E@D`Z `|*ˀ|"]L- \/=OO~gXuUV)/\Mc_"$x-Չ'3h}Qx~}C'?ɣf7dzpާ=iB -4em';/V[m]_y啳=H cE@zA஻Cy_~l?e?öW\1[r%{Q^[rKF_ ]ERM]{Gd|#ne .`gύT,j |JCO^׆?dωfQt\<׾Ny{^o~s:7 i=W IDATN.¬;_ӟt.:2a{ғW=sֱl!+WRy9-Xrezԣ*ygrJ'' 8묳]w5G>>yEe[mՄtS?qv׆AUtóVX![s5C.֌?߳ #5 g;[/k# |,K/4tM'$ lis9g~LAK?}dnD""0y؏O#0wq2O5M: X t^z.'IW]uU׿>[tEQ^jo}[?;CB 4@`XF~:(y3i/ewC^t^淼-;Α.Y8 xfoF#:6,&8 OK/umE KuY^_bP'ؠ,h0z1mp^S7X3m!mw~+[# 38^=v]vzޯgy2>=~{<8 ]}3Q,xN0Ľ竫 "5v,U) iwLp/8 ݚ~03p釢2nuzz mC߅<蛵Y/V]unȸ2اj IE p)L?󒪽b3sNn8Ώ7.qn2k@n4ßyЇoϋ/nja|}_n։M)K}1%1X l]i1Z6//O|Xn!NoPE/*1t~6}socR_L ,f$R%^6G{EO}S&mԊcnI6pOu/|!OS"c8v-,Jnf>/pfwi; l1p];cq\:+Yg̩~ IkrŇMna ~|SkB\sMq-m|"a ǮjE^?mLs?l٤XG4u+|;-(sUMy/;[yY,94Cnn ?3F3wOmހ_:#c|W7yX t9 _jn $ ֖?aȟ!zK=-آ8oS뮻.EIRG՝gp_l~ m)olLmr= E%/V6*罕jLP[H|喛p-LW2t)0[؜>Oyz밐v9:6C`Ls衇).3A}/fmX|FOLknPM74y0Cu]CRl݃?Axӟ`f ϔo&w5:1Cl~aѯ?aF9Ju3s>Nimx'fLxrq6`'vOil_QOl IIF))n-g[mf#]h/ >'3yH؆.= y':ӳFF+G/뜔V[m⤉/Fq~3'Rh0𺓈wy2F)^8>m?ꪫ*B>ǟU{twϿoU1bU~SpObc1XOd:Uڏ؀-X|bgÙ:UY鼻iA1c0qyS1b:q^tqMOf8>y籱-Wя~4t,RyyPFҬE^<|Xb7lx @9WYGOVeJ!~:~Ls.7 +R7c+4 &iοN #P1\2yV}?]ub(&A .dsxڪOUTRN"bRi͛WYԎU97.ۼ(E]s1um6_p05 ж3NC}bdоJp㛌 PQrLp;fqRA.Oy$f'6)w ;'zYǴX-#&2S:giy9Kf:)Waz6UͳEoΈ!n Y\| Uh0՛7σ0)f\p^3g6XE˵ SB|QKS2Lzf`i Zr2 uyf,*/6i"! ۈA8.ApOh`rv2ڀELΙSˢf@4e8pcR,4pI<+)3sR`cv&Mo1YW @= /BgkA8Xu1<,6g_aj-w~7xxN^քgP#8"o1MGmv҄k[#}=D[NZdqty:ysAQ-tcW." }&@ kMTH< /͔e*3aH$C SbH{=="l4{s-x4y1MєlwwSlic{΍)ɴl4E. :uI+5y!OݪY&dLYLy̭#[=x6HUMiŗf8șv\'U~ uk&=IT5 %7 en<o.u,ϔs=L%)Y$xL%"t WjY(^47MY!&$MlgS!s:E٬SJm" DΟ{CxAwCw`pbǺ3xW$LXs*Nȟe!,Q#k]w]m Em?me}۵)%3}vgLwل ?yf8M̮aMJ "Δ9~O)af1C$/b?TzAULF+L^ijfu}iOzC"0t?oDD_L!* {;,8XS X.i؇G,eO4]~2mafy {P\'M-k ū> Ʉu\{ɘQ3Bm/:"i:gHToftz<;`0L h6u?NQHSߙnm^'\M>8 IuIOD̋-<3nhDT%&>nb nIc*yrnI;m[$c 1xW"cXq]P6kyȣA2;>ad'Hrc_\Mx?u~ky#;6Y߼>VkvJ]"0$jj u@Wh]i9‹F1JγkObW'x/S! ׿Հ"G;%{GDUAt* 1j?"EǠP‡[g7'^ĈOyyڢuORb;MtaA=Qr='ި o?w_Džy162-8M=D[kb0+̢c;0x?I]]]'˳u]w]N~yw ^c> V;Yg@)0;wj*G0kr|)U~w4)ʟ3c=6̪YrRypRXj+I{Ag&-Cݠ'炓0CV( K384 ' _" ~pf:Bf7vQ6.BaW6U]|'V$ǝx{=Nw4NgќsP6ıYʓPxuYCYx^ U =YH--S`:9eEiģ;B|X)Sη߱UU MyŝArA:\K݂̏vJx@w);BwsU1=rUDZU:0索scd\77>{eyMLYh聄{u- FsF:蠃&8ĬIuݎs޽,P;6Ǚq)fuN].qqf&=m>æcI+ `8SRp:VO,jy53mdl$o%-Fz!L98`zOT,of273R be{[0'\7;x2/db't&Hvb)Kwq'BL8,WQFڞ\{/{B~##wK|ǒ#*)j>΁u8x:qݫ9't88cJk/m٠IAO(:L:G8$0(gX('35:L Awx{m d5{TeJ_D@#@[x#%\<.:BpN-랿mYkXaW]EYdج8fùxp]d@Xxa Q6ˢ+=SO=5kҕBq~ pvĸ7rgOSyAa(/FfZ;s:2&SI"0c3#966iSi3P0Z`|Ü/]6}T83B/R-T IDAT`%Kǚ_'B 8PܸCr OyS{`|R!|y pef_9;?=g|ƺ?㶃zh+mg9ote|xӢK7K:3k1pI B A1s,hsAQaBa#gOse:-ТqQ"0ĝ8B"*u]zWc]H36&qEttb?>4*c='G(j6BY{FMEzk0T1$XugUk{wMރݝ?Q.:#B'Ҵ?xjgݜk|L#w#1J4QWu<3eJ</@ƌAC w/, z<6h^J/"0tP.8|K0:"Ʋaz&7QF @˃aǐJdoųXNjV0Jr!!6y`82y>ȑJmM}Qs`ta ^.l\B<}B%mĐguvy>Žb+u¸>Ӄs7h!nӀcHk['DףhChX ]f [yL=}<*C`Nys/XkrY<,] 3N.BYyiqga u㠧Aad;qg|9=?dJ?㺙z0=8_eax>w1:?*ook)q(%e-"%ʋi.rbjQD:K<ϩ}OOB:o8d6~:s1ōlIy~ c]2o޼Ieg{B) ܈ɬS5:_Ø7<ٵNAUVY%dΡcsӰ8^{BN˟Ԩdu%BƤԓG}Bz c,P_yr~S Ȉ p i\=O<!Suݵ A[P?,\njי1P?Ouyy/ot&M!W(#i|>kBO?ҳq5;==WG-oyKm_D{"F~{A8uDO#Eg"0c ŀH^6l:_x; *8^jtUW]5t"+B8IdbL#sA`&zcr7âU=g?=g8o^l:x;1r*({G"_xqOӁ)ˤ')asp;x1L0)'ĂdzB12e!bmRd^zi;^\1\NT͐zF̓:.:DGhXt^& p#+99eΤ{6獅ڼ kB G=*n68)|c{}'.>uN ey3jJ}_{L}77soyGFؤfop.`chM躚5G޺ |#8礍n ,.m' KzP΀ʽ}bwqnG + w+8a6 Oq~ d/xAͻI|<ߩK';0s1RA?#= k0<=xםy jXs_ywr.1Όwf7̸o<s13T0s.0|\'L[USX&i1 Lڟ`p)yS9L!MIe2FeaJHQZ)C,ϔxswS|s$X3\6nR~\7{6,n}yYaXbVc yEZf͓>-@T]o7YnƼIyf؀J26L/+>؝[Wr.3缃}f̟NWIjFM3anƪd^fpA~̟?ӌHgưd:3f+ҕ׼ǵh9@9ߪfP<]H=1f4d^f6^+G^浜߈Ō>OSiqs[6><7VS8C`2!oa<ynnT?"F/L" OHbWž*V|1Ǫ|И9:䮛z9>Rt}ي] e(K6; rTߘ;(KXfN#kiN>_@>m`ձ6Zy-ddwE}^""y[&B"&L`aŐeg$B|K ޏuæx_ɽ'^CxZ3K9eF)H=N^sz袞ΤuvJ?މxLb HJ(7KV""?xgU m8YSn7 m3Cvgoyw>e!ޗx!Bێɻchi7Y;=ibGwK]8?c[Jh=mgJ[y6: >hs6S6K|<:Ӽ/) lx{BAr=~PxQx? ݅~s}:y=L]a60C.Xt$U<'̆}:ꩿg(̘I[u_p>+rn6+%{@if0x IbSdW6kDXD@:$RV" ='3Qx'@,S[g*. PR""0>x*bG ]f6 ]BX tK@ny*7=]mQ/q{znuS@saqUHn6\XHi)a 1YaoTT>&"О<#z"4DD@D@D` aw]!ܥ1;;,\KID@%Tn"{ĥ#- ۓ}C{nwNlCbB"&Lٲ~,1.!F7ߜBbG""0>ę9߉!@L|_Ç5fEXςɬУCF"#" "?,&BD (Le:tqݺi$Da绣X`UW G."{hw]~u]B̈ӿKx{lfI$" " " " " "0 '?<faߖ҉iX /@t}ŋ8~T ~fw_ٽmBf_օ[~Exw! ~Hp:LD@D@D@D@D@D@D@D`{Ro.` ~DD@F! (t&G0/i\0{=7o/{2k.d 3KD@D`X2KNljy ybeKY KY<!,BQ}do JD@D@D@D@D@D@D@D@DLy^l³ } Ca" " " " " -WUХOIH&74ZA >0J *EA2t0% HS *("ݓ@h"M mB >Nxs[{}=7Zc=ךkV:u+++++++}W'fW\1F{Ƨ llOWol_@@@@@@@@@@@@@@@vUL=zaYvpvO _U<`+˺++++++W~KOsSpgA_|@@@T}gg?~x\+ tA×m{}uz k=uU/*|++++++V/FW,_n;۲WWWຮ~ otavCza_{ҧhAӛ~7 ֿK/.if7~?p?#>ïꯦ zh|xyOc[Gmmu}=^;>Ú5k&]u]W?pvշu%f^=4>׵墋.z#,=LC?ܨ}bnw0zc*u{i*7h7ymZ:6zvx{[vCo+q]w]?v3}w.o?ofo&o۞Q?g⋇f^jol9K.dй瞻$3*6^^^^^^^^^^^^^^^^m+?ʍ{nsS}V;#ܛn֟9x&Y9f=3n;0O+++)77zݷWWWWWWWWWWWWWWWWZ7wϷON}=kwj7ۧڢ7u ^^^ę_n+M/I۴ܜ>ASkoО9{e19 .vjp8 0>m#mӞ'n?O[Og@lU߰_BݾUSN9ex{;gNW8i?n'pst9NS.iH.J$\qr$9aL癢6c8W^4Nm c9F(abn83JI/uo J^Ɖ5yV\|n v9=}7;l[y?u s%iy:9GNdK3%RR~s`G?\69y*\6rC IDATK2N;my{.u8$V'Vi#_dbحv9aSCFl7CuWO_3Wcd^[s9I'4 Ss/yA=ıZꘓ7XTHN|G/C>r]规Okpȓy2N׿s(/\&gUzfe>Jo4޹fXw%l^|CO?mI_7s߸}B?y}ٸkK P=XԂ\>" lt_Fpȏ4ιHN:d uАhl/2v-H1:k= 36&kVbӮ/`[#tfζlRnS>vCIo:![myI֝ykfl/|mQSjyMnsx, >4W8?Ș848 y1$9"9ӌkMGwo[W~OWλd[_:ݷ mS:lp$ch˼?یιf:{.}oN^1ssJlgyO!u%x<>e.QuONדkfR\eZoહcs=KcV#sO_8LJ5i9Vs 7LΌg䐟9csşk'cx8uu1׼sӖQKꀬ s?ny[O? Sr&Iܨ2H>.׋}g|'/8_eqc|_:Rԭ5ďq'Μrn٬c#}]/2S!>u&zGFü}Xq50:u tHrᛁH\<^uYcpsugnr^按ch#s柱x^GC{aN˜ES2ƞtnwׁc W3D/zn $k"ٶtjDC:lsO:r#N{p)ug=k8};dͽ5\ntӛo93n ox~nx]4`ߩ݌].͇>Xi ׳nlGze xrNʹg;~1/uKl̅mD\x5%z7yu?l}|k_9iCl l \s\:oV{m={pOwN20I u}t̵c1hOkDljM^M.Ƙ'CȌ/'[2zbc31͵WOr+.R?@Ǯx\mF|Ԏϸ᷃N#Nnt^ .Q7o_?f5c#7:yr +~dk#YYy•u&wcj[º!i@>$R7Zg6Is*m\8+yC|O]H;v:9X'jgM=xCcN|Gc{џ9v~p\eBꇞ6r&޶ ^Mn2lolrܞxG_|_%}(#lR8[9.\&>L_b:OX?Q!qu}|ꘃFXU{|!4?y/z$-бg|3.611mgvcy]ZO2'ıe-e=6}[]#:W~um}N4!>=[G= ]Nlɋ~W~ .ׁXrfI=;8l2O4ii< /vl']7Atn_q<`'vp! ?i7}뇛}ŏxp;9\5]:7k]ka7h}_p%ΏbR? ꑎ]ud=Y ?Y1YgtymM-~./ |iK1$5HAnu# F_2sgN?}x  ^ իv6j'*fSYɧ:ˍmyݞb.y9 &O.>}I)s8Ǟ1dHr휱CLS@.llɓkB:-ukcNCG A-.Xgڦ81kŪ'6\y(sEXTuSxtb $fd61g\CmɡګsgN`Soz1~NISݔ{Gc<6c,*Qp4'lLNU ˇ.8$ :SsaUʩ^.#J#q'?rnuc]g}c},yj m^ iBGS}\}JfN[Aͷ\~[7ׁ} JE/e V.SXg)[su jY\j~/=CN׎T"9hV6 ylfJrf"SǘOr#s%8RyJO^Nc$~4"]~$\38}uCqHgO,zUD{brllug[vcYB<]>8GSdĒ]C[nkf\06|yؼ ݰ=أ}pڇ.k(ܭak>ܷ{yk3lK8nZm΢g\r^P0s8a,6TqԜ<‰|nts0>ڔԟqզ4vxV9rJ)>㬛J>X UmKV7پfcᨣoJk^/gτ1ȑo~x{h'EZ~JkR:yI>r!xڐ}m#.߱s01鼞Hڌ9y'>k|&Pol1}639A'|#+]8bY# ~bG_ڰ9G==yӭ?6|Jx_9[|A1M;\Ԁ5\ vWbÏi = :Cf|4#/~݆ c̾!XI?u^uHtlΕi#mlCaˁLN/X:MSOlƼ6_Nl9N$}ΧC~`uM~t;y/W]v9%7x3&8'>t~SNt4r%x =:aݜѓW6xDoV ƜKmHs6Wl/g\&yLݛ:Y]wu_:pu7_e>w?8uqn_iH~jo<^C/1f?>1} yrХ^1#Iyncln⽀&\A%ߋ\'c4s68vSXj*F9m*O: ?z9cw:ȃ4l? sc>`WIN>]`5u\k>̖ g:5ɼ\5p=d)1\{\gN5>2F$9cĐ~vn7pز/"9kɟ6yb:Vע%on1] V?k*G>rf7?ďNIw ; ?\㹱IG`c_rQt{c<~ӟ>p'|,N9uRcAbrqL8y®T'ӕNc$uO倮+cW,E)1~Zȼzڲou(5.z}J弼Mͺv_iu4ˁMU~~*Oo?hPOn?9o?я~e?3X4T{ァc#8bY{ `_iϊ{P;h>n˵z_\SO>LT 嫾gI嚅YDoJ}׼R_]Xpz?šFSs>K.ƮǼ)9oM#Uz8sЛO!yˁLs/qbg uH|!gq85VbSY}ksb\rʗ~icNjkg.rq&`%flO~%6&~%R>;Ob&}o1k^3W훒'\v,ʳ5Ijz7*Sׁ|sꛌ{8]Oκ\!u5kF_~ Ǵ1|c6VL89>9NYYES!UmΑvr"Ozg*V{WbצSY<~]藫"9-R!yu?uS|\>rl1CYS\*EG'cS?[9_d,1Y#'z*M|Yzv^f=7o?Uʍt W/#Scc/oz6To;$V=9K|+tg~gVy7gts6~vH;?{>mc{NԳnxy0Fc~ʓ'#1qpL5w셯smG͊'Wl9ϯt\ЃɯuHu?86bSR\+m]607olH<6k$J9T8xmĜL9εb3kr˜PGpiMsMs/yC7|_p)ϺZX!^rl|Į:O?٘ÏZ]CtNfvjB9/7Rķcs:p 7R6מ>l_pvO_kJc`m)$ъڜtc`#Ve ]pi 3OuH:szԁggo__f^y=nuح3ו4sCڿHYnظq=n|s?7C絺u?xTvyXØ} rm#s@g>Ohěs*:އz9CC?뽃5{s4f;.tFVs?syzЋc Ooأnاߢcn|¾6"};iY!7=b֞Ԕiy` WGP{IN88y` :rnllHNH|SfDݼ9L>_ŬZM~OglmڍNk_ѧ9-™qӯ┉2Oev`Xփ9[|0fO7rۻ/냿-9=w&/OOՖ8sAI%1]sl\CO@/X6r~vؼdՉWrM=1~Y\_r2NjcNɕe0Xn;}rGs '|2ұxti{l)]e!c̫Ȭveعorw+paޗb }{=w_ḿvv{vInd'[^:z4cKk[r F;Fg38k=Șr"31M}3~Θl_Z'rFncrJG#]\ʩkW`+oدvES>/X~0WO8ᄑjb=_Ճv98cϞv}ۃ|W.WW%)9{uE'洃16O. 9zЩ_n,^fcΚhڔc}JZmO<)>cgNhbIƧ [mݗb[Ey{P|S1C:Hʊ_QQ^c]#{r:VLt{lPdO@gSfI=$|a,::~ݞnt_X_$ <s،+ڌ29QV\RScu'Py{ʱ9O}#9rK "rJ]nz${[wq_5Ƭu 7?͂zEε+%>%OsHxśܐtm>Cq{d\牅F>cu]m%hC&ش;N}͒}f92>> X\0WLs18BV̨h/8N] =b!41SQ;6q#ci#Os]N$N.jgƝO7O-3.rWR|Χ*r)鏝[Ϝ#LD7wkؽ?|qg~k8nFlO֟~P-]s8=&O{p?×>q~@{D·o|}opsh_{(Ǟgz^^xc"3.vy#G)9]iLzeN1';ry %'<΍Ϲ8u+pmV߰6 :'v|+_9ھƏ>á:>st}jznO ^8\'*Х_)ݓXO̽Ň1];2jwDG?D'/8k: ]ne2b?y%ֱ2}eu39{Ɔ ̔NyJ뉎1iIqmZpḏ3Fncm7Gֈ|@G1# ^SAW ?;:5e.<,k7g.~2pZwˋ4%k.^ɮMq#SgMȖycM06%Fq[ʝ8x08ЁGq1 ?x3&s9Ӭ8~|G{\ oyOh>oGhƛO^Gfw-}Ҷ˚~f?=ni7Qz'm>ϲ>پiGnRϸuNu@gM!fcm`=b#`'8cA\:.}xNycbϜ;kW`sT`9 p`{_<׽5w/{ˆPwqÛ/:hxի^Ĝn p77o'lv8!eg;弞+s2Oɕy®D/r%[2(,AҦ8iC^穯̽xR\~59\|/)Qyԥ)uH{'aOzAB ۇƛÂܬf^yeñ7? ۧk~S?ȻkϞ9p)hl-V߬(Hk=j 滁a cs)\\|xW`K@U i'ENtu؃G_>tI?h{E }so`?\me]n Ӗ>ȧ~@&[0&fj~؝+5:ۦt-歶)/VY(OI(^+]{\tYrg߼LU&Ʊ93wyKʩtv?o9>8ڕ񞠑!mc:}7FVxy\17gI9|SY3rYv8ɜOmY\yyʭK.)1?vWnpq}0jo:Gp7#OO׫!ķ7ux\C >yb=0]Mqf'ge^u|8WC˖myg^Y9kn]Y|ՙ#3Ov%#5g₵s~JS:fA>dAO,ɛ%>qƅ'sCg|RϬM8Ro\ŜFvyɽgGko>WN|8^^tN_OW>HԗmK1M%I<51I-8' 9n,ׁ>m ;8mhJ69g,Kr1;'szuS^qnÇnL%vvd#F/Xum{0qR>xl͚G>GC6=hڍƍ>o=^؞%%ᓟxM~gvk S`ÕW^u`7Ǯ9xe,!Ɣ[0nE>o6c{*_<>FSr~g~#g͟3Nn|069]nwaX5c/'Y4v-p܎k?.+W=Ϻۏ?/i!~<:k`uS\;5Ao-9yD,:Xrj}]%m`wG)1.9iGZKpAi5ğoG"ј'W`+oدrA'iavXE3SJ٬Ƨ>聯Qs8ojOL Sm)ľ-})wm779`=9Q=#96{˘ 뿚R#k\ĆyO~闹ńz$~ e?4o:Ǘ 5f^'Gg^PVꍅދ!mbQ1ygzꑹ>|I~G_^‰xÞ:xj#6mr3\qĠGNub`XSz LrGzMX5s\kgŃcXF?ueҩ!\9>0g."LrMiK?fΘ5IsLA*:igEvyzr:'+urg,c˕6߹akG2Ϝ6 o4`h!?x5'0f=YwgYo1}5G'>8j_?rjY>(\;zub90g<ř32yCcMN/7sFaMNhfq^\ N,\9#/>xpl\pp10W`+oدzI·g(d直p=N8aO=(ݜҶW;As%\9[R}=Y᧮r,:?O2ü\JJ}9r2T$9*ջAG3Oخ_^PclrȭTh ʊq:\PU/fl kPctW3sˑO #i_nl~Jc›)m..- Iqƒc o>܆Cow~X3SN$lSbIK~CR=RF\mڔاT}d-G3:cXk5k1ڝϓ`לsVr57n̲w}T`)w=o>=oĖ;-RgJσۯj~]Oq_o[ooׁ\]{Eۚ5ktWWWW`;ϴ'=nϏϬ_W}=:sӞyov'o4X٥Ge9'Q0?}?Qj_Uj'x⨾Ko]¡S(7=?ԶWMn1D v1ONjƘ0Xr y>}+370+br-a>1+ɋVqg1^U,8ssToCNlW\]<%Ƒ+}< ~>~ojYׁ<†_ԧNv;yݱ{ؔ>{9|!K@;} yt.of288GiO=\ >s`:{\jH8l=O~tn# ]N8Vڈ/0*.tɇ?WicȚ|< sqy҆O[OnW_ r\_ZcO. kTm/9w\|]TMX0;ǾHk,\]/`IH5)롻=kQ6>L?L'r&.}I/R*Le\2a,V<3[1fr{b^L){{3<яo>7^Zn{wt\5wߩĿ袋ߢׁ$,:ƹ_11M~r gNz6$MzGh%0o1W8sѧJ'?f,F֓?M~ѽaޘq58S-\?9䁃n:EJ05k}pqeZhƾzG@{,)a؍\!ᘗ \Xg ԡe)jo]|ė}r&Ng&)۵qyggNb'/v>xH팩R;xjfbīwnSVlKœ1]_=q?JPό^~saNmy?}ậWڬ@amV{+uǮ#?16珇߷p '=)|.}?]g?{v}O~: ={$Xr'tZd:m9/6gΌ|tEANw.9clب#%giı#qSǜ΍|Xb‰r,*oVg˸t9q 4>5vff\Gw+c''Ӗ~d}4&.כy"ؼ[ M,cmK/-58FO˹a s4>0>8\z?p[ROuޗߜι3ă6's'Gj歿o U/cb49o|cqdL4p+'1УCiC,fR>ul,ycoL1V'#7m&7't.{/KےpG!yַu:Z381ys/|fg}_<tlO/k?_}>t/yNL_9?^Yy y3GW ٨in 58 _x5Ma26\~E;j1ۍ%̧oi79xU&ɩtО~#9corC$8|hn[}S1iʴyGgHnLٴ1nkplo0dΚ}_99Ƴй-ƒ,cqភJ|Z#3Oיk]b& sz =iLcqJc?8sr9Osm .b#9f^˚˖ġ˧NiWs%>+77rۙ_{;찙8Ç??\cl~o?VƯWsWbgKr[jx ^0/^׍W7MuQsd=L+8< 'Ob؞ayQ =9ess\z"4&Ɂ'mc(klpಃ͇+'0H:e^=s%z,&%8mø͟ b"1O=扞@1aD/'|iҖx)1ണs`^Ym2S<= 0צDgK#3μ3bR2&=͵P~.82\l_mN5wNs~yƒ-{G/智>X Um?Xgkw60>kg#q{\5%//ǯDh?)OybUV⪽W=slJƳ8XEL"IL>lٌ yiWƚ'srVb\uKii_t? Ixu)~ړN:i}cr!E'i۸#T5SOhXs{GH/ҒG.gzv}߬':}>u5sWI : i1H|1wYcfSo<]Nz]>x;8Jǣb/wּ€z$&lւ S?KΞ:f+투fY1S|1cɍ&vu58ˑ>ulܪg<>eCg/e}Qf܏>>JM8Ǘyꌝ>sUf}:1vbbKqY~ڬVYf3N9ᬳ.+QmĕyQG5~U|omƯR[@@@@@@@V裏^< ,ׁ|_<^f7[w8Jć7' ^rmu_}+++++++++UV߰*7۵4_oޔ;ƾ)<U)-ek@,8]7ƅN<CWl5'+)78cK8vdR!ClG.vcO,vc|J%XlWb#ogïYx<˩/g^ueI~}9ɡ Xԃ1vsRNH׀u>ڰiG+F>4xW)V.a\W'W}zmpM3ƀc|z1 I58;'xn4~$7߃:hMqC¶EϾ~ 6}I!6'6e#Ug|0i16r)S#K<\KڗخN3799`\)q [GڗK=4I[xgqcqbX,!uX.tߚcH9g#`$sͱ=|vq>)iMĢ3G$M~`ygn..k>sⲾMFҮOp F~ʸp1NNJt1cjwng#0^О]ĥ.xhJ[ȟ,yONa.撜bc!W?l6Ǭ%_kNYTU_r\7k/1{X ]ηUT/z7:Os4ӔdF6qGǵsɧ ܎97H&2tOe>y#zc;k1ї l˞CRH:WKf\8sΕبFUϘuZsv&'~_bؾ6_9\L=g}stZ/S%gS3k|c\9#ߐk21Љ'O0U]6yӪ?\dX$vߛѿxCØbIsM5UW.Lj98 T>2X Y`=1_ӔvuV}"J~}AU\Ql`oƘ5'1sccbLt⌧Oimye4 cl鏞:C҈#ךseFpZesmܐ #36ƨ,/(l;'1Fř;zZ3O^u:8=LWsj18&xt7Uδ_sLJ&wKWEO'ne.n3?1!הLjwJΪEbӞz|cc"&klf>z5<6U.lήA Ɔ͕E_$G#FnJOcXS]+9+oov-8E $Ў9M=\=kĆ''a1%sX)EnĦ $MxA$\f9+o͉993&ی|4Di檯ks>KG#3 x]6M͌}VN9eN6MK,5yOSq>sT ?Õca^ï6H|`#ֆe uJC|εKWo̍&ybOIx?ރ/tg߳F:d SlG?FapGR2]c9@^ќy.87nGp{1sHףk?s+wo<5ŋf,rpNb&j=nyX'1qrƺ7mS}c;c!8ʴձuպ1'kE:}WE_ Nx^ɃN=c,~;80fǔk_N0l5oURǜ2:rAı>4c6ppiJ|2fNNx'7skmh鳤Yzd^iO=yQ;G"&qǞX`eb%.&9w{ wm⼓ jEW'#q4*QXƽ vkz;_VTIps)bɃHb׹!k^̫|ќ\R)>07k>߸)EV c|ڋis,R}FpN3c9b.fK\a#ps.)v$~J.zíN׬\ħb}rlL.wcf9x뙇Yٻ6dY×gOk7@P<쮵 YUh@(5?g+pi_}q9f=`'Yj]q+ΫU?gg-~~iOoEخ] gmz5b]_&={PS'#IKg4ikoi|}Zag[u8}uQ]ڧ(﯌=:8-Pl//<5PUlZ_{{w崎Qܳ{?{ދYg g[<',ꉝV/՞53o͞Z+خӺfW?jZtǰ|߳?kV=+G{HTJKzJ8nk]QlDm]ۚ韺/?WvJO_K]/~JggNۿOgOϞ[Ƌ` b6g5J.u|om`xWx3z*a~fX#k=LWÛ/m}+Nz~=YZzG5 ŗS{ui]n#v<ĥC+kֺ{'W?ՈC[?Z+W>~1Fg俁^7ԡ[\nyiZw{=ΚfyqWVuso'=åkrW:g.&7[Gۋܭק[s4ө~Z͈}n_,zڬNwP{7A{_=]9hydMKw![>nX{H3;7:=7Ny=V~(#׏Ͻ~5/to?Sz4Y4u|\mOqȆʞ{~{OZ,'{u847ekix{qH#La騙l}W\gzߺXHù7oKu÷6bw3Q#[o=+M -j,^lss[m[~ֵU/y-+ ;|k^ܬXvQn5ٺA{sl.Sk$˾ |{}94bw3XxWc{⥹uĪ=<>i-VqIꖫ~~&Wq:}[  5mo'CׇJz^{XQSAOy?{=2?زp5íu6cgo䧇Vkiމ:tNppّV{|idCk?hmkvF :pKnjo+ϨNx/O}[aʓzkF (j\^8Ë#z~oӗco;-!V8Ҥ[N8Y;3pq~[b=jX9qӺ3kk]u#NjX4ri-ݯ^l}seӔ qv-viNºθϭuH3rծOW{P6>z[r~ sŜSpk4jCzr6g_gŗ#[?^Ҍ/zo-ϜlpF,<ꊗֱ/?ONSo~^xv6V>~ޣ͍ÿeOG>mukl# } |{io>ig&&5W5.SMvu`ϬSSuyGǾqŲlj(x҆ɇq-=kZk[jӎWxׅF{mXskkF_aس8zh=k϶wïCMv5j,֚ⴲW˃bW3NGyś'ޙlվ+n-0#k[KQr[w>Ga{-+3kg<ҹ 쾗x܍Z?Sksan0\Nzv^v~pk W'\Nj[YujlA+l{Ko׷/NO\O?k^i.VirF9x}oS^S/^m<'({ϯqVǞl2v}~/NjZk{k-]|ⷽONW۞@==ڇk͖׌yr`>g`V'W8=5ֻ?ߪ mOi8{o7jطo/!At¯=klxSn6]y#[kx#~{S/4zfOKap|5/&=k|\ΣYe_~(}o]+֛з8XW_j5a>3{K|G5ˏ{jƇ~ug؜S<ζ8˳S5Y}v[+{< [_îqdygso| k>،g{ۯsS#-up _-g}m ƮF~p9WǰbD/WV8{qXZ =:l{#vXucߑ>;_wovپ!l?WRM z㫼g"}WZv]> g_inժ}ޯ`W{o&W+u35rg_ɋ폸vW8ӏz-}HM9k_sx=WwոgpZΞQE9_鉯K{oWZ?y_y9,?ړ>wWg4?u v_~Y+4{|K}ys3| {V't潗:>PC!aٺtv?<7}/g'o˵v΃KA}bŌjᅫ͆-zgVi_,=v M-veqhpVOib[W|sv>~y9Wů?U3Lo3S;'gxWŭfbg >=sgq:g}^+l\'򫩷n+i6)g-3Z'okqWY{vvӪ[~t؏S{5v c뵭AiqqGq<س{Z?g-|9x]YdM|1-U][Yc5tMs}g;|VWlUU.OVM_~:*WQ ufz{=]b;z:sG]mOg}+:Wqu+΍''pgO-O/1Caeh0ie5l<+taV[joLx|:#r+a;csKXr7vtSZa`4lZf >o] u`iv~bX~~1}_~rj9~6kK'ߚM6|Gm6:r[вr`iOO[fo]?z6i#'f58关4W?ܑ}8n\:as]ky8azCiͬNb񪫎ZašXuu6_Mz;g'Vzyae0:V Uj4l2YNx}u'?G}ܸa]ޮpg]ck}÷4?Wz{_.?H5?>77,~)N>n뾃Ճf橓n C'qz 7czc0)WU[/7ZYþW3~kg_'%zxzuI^6nxsϹZMMͰh^ɺ.xjMK~vlֺzg:պX8ŭٳ[~3L܋vN~˳ZZq7e;˩zw;mOvT\gÞgoxiMͯ?{I\ 쩿1 K'ߟ]_u8^tgJZgU~',/+fU?r}=Yśz ?v|< >@_^~_BP<{4Z{xg>dAq썦޳ ~}Ox~k_ҩ~G3[վUnV/Gx3r)?͸֧.7>,f~9gӌ^V+εߺlי槗4Ԩm=r/cըG3Mg'Ʒ|ܰbuWbF{X~6 nvLªSzYnL~[u5=<3V 'Vl봮~τ˖֋7N\}'>m fOmZnj{Y֏Ӭ> =~p?]u[lg~Ow>7[iwgYɫOTRF%a%p{Ӻ勇ϊtvڗ7M?F?~~ZM>[Yx1Z&Mod {Pg佑yzu/'̪zKO,iW۷5N{ng<_^o['ngqSFӹ%/~XuZ8gN{m_]or:=#~Z 7ۋk:^'.g^-jݔkfVC#s>:4^fCL[<^U,\nx}.OG}58g-~ON7/e]Nlw;X=|X-nnWKϴO>q|+ZΕ,a O[8gqqҢY,+?lyG_?GͫaUo!{KVF;OO־-7⋵+^[Wק^y0VR{v6F_r[7qY'?siW^':g!?y Oxk8w57'^Wɉ׀Wgkɳwk43vomy>+V=/?{oe5.U5F6sޑޕ^NbvŪ)~aܽF{+kz8kwwxm>U|8#cϾҵw[^} |{ѿ:{7rhH~ZU|֍YZazgci9k ^'Y(oj\,8z果?;K>ӂ'}.r0êc\KXz ?G[zΜ9k9糦~W i;~9}MG8hmWu=46{CNlz ڭxp\qW7{֏FxqrÛ{-} SqjoNz){'N:[o{C5g=?)fփݵ鬖Xyb4a_P%,aw>P}7ϞS9i_z;5˯,itN{їrۃ4jջfo9'qӺQm,Y~ieiт둟fvOȧ[oPȑ)S=k}dn/?sxymS;_> &g`[oysg ^9;bͽӄnTx^`Y#//&f?ӓ͆n077=lO<,Fv'7[_qSxqi^ͭ=l{ kww>|<߄g|^8y|<LӦAgc}}n\Y FZ_gŷ 7kW}g7^0iz};iië[^{hKZo =c =W2ԁ v-C-o?xQnjQ^ÜjʡO~4|N{HWʋw;bgϝb֟.Y>: 嬣3jg귧gܯ=:չ\ahkX}~+\qQ+uV?W7q#Gvuu1۾?+z {V[ֿg>O̾^Wu&nUY}OG8Zˉgj> Q_QU^SWj^կw=O{rԿW>!˔,üسU }?V#ky/N[άsnܼ_eK}91 _\Zl{`}W=u+#3O+kF5I1xŷG4ǯQ]ŰOrYlVb}}e+k>;X{>Cܳ{xk%H#~`_]NNMgN/vc}-!5tF5 k=_㙯ik>ϦtWk*n=1c1焟]ah Zu=홿ڻ>yٞ# yi} ~T'ƾZ7{Ưgu,^gZ[=;CgZ#k5Σ>L^O3{:g/Wya'~Wgdc9rzc>`ONW[@ӯBa}(ofu/7]WUN\4rXz͚ kWyT<޷9qgpѷZ~Ex>MMgras?A~9l~ȧ{*FV 7ugp-[[.}Xf+je5m\|uw_uy{=׬rLgZoMφk/ʯݫurUol9 v>8r6[ܚ}g\i]=5φuִpֿxky]p[7 ߳ro5o\5y-'#W[ |=Շx\6;*/Xbכ?f{qkFPzgy^J]w{<qӆhˉFKZxN]+;uy[3QoM!_?wF:}7;sH'~x'7sYmiwf>i5Gqb3k?=QIS/x+Y+̨=yiWƕs3q&,V'm#}{}v_;zֿz'5)mW{o}, XK'=Z K*ngmd뭡vX)}ZƍN~:p#nLzXG>v\x{򳞋W>K]qϗ猊Og_lsiZ ٚ!} s>>|$]+G-,n:ǩfXvV K>i>a񛏆x}rws9CSVȏN\g~yYq-˱>9{srYn5j虥oZ.Lُa] b?u{2]"V{uߛt] IDAT:O=\7xriƕFgt;pԉ״o8MY5/?۴h>8_qow=@A'/{?^ F|WͻZ5ӫ~尧ƩG'5*⏗SgcyGz1i6#+<]UܙٻӇgG= '^#f}6֧NO|j,'~Qu#N +GOǗS$Slj] uN>.Uv˅?aS6znv~.F**ι6|p![? ?iZ/f1 6Kmz\G5w⭯tOgxW7> {y<6==|hߚ}ˍ~eϖ~Ӄżf:ճwZnorf.:z~U?WgjWs kSY>WNyˁev[gtS0<_JW.?kw!G7Zl{K`k<zػ3?W7~8~E[>O>O>O>O>O>7o=/M2g͉/xk~I_Wk\U\8fxܭkF1{ǦX\e-&n^,<:{QeգZ1}mux5V&N3beqb|sy׋ŌCntYx8FFq~gu_켞qngJ3#=קU̖߯v/0ZSE9ΰ4h<GsӤ|>{>'7zV}n}xZj94v?}6{a:{QL4ϛ%ڍI'WirOnq5ZXn+^ZWoeۧ˖4OΞמm׫vWZ1WY\]g~ϮfagfX{q[#:qZWq}gXͷo/7ŜcXߺWwwA^9CXkuΚծtܱ񫺫Ozp6} VrhNyWãOmFc{(=37^7o/;N `+NOAqnX}`ȋs4}eIv󫝦4}m~Gm4뱉GX/v~9y˗ki4s %G_8. gk|:o/l#'s$O?4x~.N=gyrkk46= kzzQ۵clNsu˳{^w'ߞJZ=g 4~^׺Nk18M5X\jmB3zfўGx&O0cϭ{} bۧ)Y:xp9|\cʆw{#Hbw]k'?SC^uG9iVcuϘ7zg=mp}Svٽ)'̺Mg?}Tmut0opUFuֶNoƧ6j ox^C/ޗY,ynΫngQ>q1jʷ/\qLؕ{zvZ]_QNg}^ i8W^ߛ}NviYykX: V_5A{/7;r/k- Z{w}|Ns !N3{{W7׷hmao6z:rQ_~yrZU!<75:Y+ޜEvs3}xz[{SmiW _}WGxGlw\!Zypq:?Un'a]ŃC݇L6^xӇ?4ԑ x>}5-[?_j%~{I^C]MG^,fA;&, :jdi ˏo>Xxfz;^+_-k_NrʗgÛ{loyY~x;9\N\k٫x_i_X΢u =m'|_n#? z8 W:MC^~M?|9> f{\imN鋭to|KuW>wkʦV&n: gqz旣}W?^9Ɠ^ Y˻+WgoL oI0ΊګgZ9kk{g/o\{,~ubx|uբ]^?OT4}=5X~zկqݰw8 7F',NzWg.~9M~\bs @~X9*;k/aM{gFgy-7UkgV|Zzn s~oҌY~?C猫g^7k}]\-Zaōj.N'wZ>hn]x{}=ЬN[;cepJφ +?F~cޑw|}YMZnvQ\N0ycdXi>ЛޏzNۿO+NW_y==?={a;8l񬇍Ygidv/u0`Ι#'Fxz^ֻXpc.׸YYp1ӏ\<8j[Mj_YV3Sٽ?{lOrO.uu|cvf8Y㨵:t|8kMc<%]kȞ}U笽}n;sw>zn0{bz2==~8{fwJ>~(}|ux>mz fw9~5pU&O, 7Z|-W?Wgմ/G>K3Qxw/}QG{Zn띛_ 4ӿE Ocƻ9#7{?Lxvsv]:왯8g#ߌG9 ˞8 7ZóѤ]W5O~{3v儥y[^;n>8W 'p} 'p} 'p} 'p} 'p} ' cIM'p_A/vQGc[;6ݳ6?_O }WhmXkuduUՋ۸;W{֎|:Y]a졸*7xVŵҁ}v˷baMZoy-Nj}+&[ ԿQnjO/M} smaO[|9˭vԴ}L'L_䶦:N1 o} l5ٺ鉿#?qĄbgrޫ{,kԪ!޹tri_{_L:qw;w=4 ҃g俁>bSs&ˁ{x y=lⅯ&뇕{b.8em'm}/-(up1>Oũb{_|޺W}_Znl5V`tSsc:֐W,s,{7Ŝe= kꛕ>ۃu-ó?\OK>fZ߱gZ]y_fy{Nl-k5x4>M|Ǎ'g5ז{ӺY]=Ψmgzm}uFWft48[zl/_֏bZ>.[L/xrXawt&jQb9h:ui+qiZ x`0[+aoMX|lOxW\=x_tՠMfg kfޑ?~fC?v^7ŋ<6k[\r_/F~?#_8ߺ޲RRgNa;lg WgP|r(gꫵ}lYkӓxWgQ9qN|}xMog\Y.bיAsŵ.?.ky7KkL{߽ܛ}Ӗ}I?w<{r-u`ioo?^VGs۽bkGO]n|i҅>`i=w㭛{.e 1ڍY\޹V{=FW,hM_GC=<>ن-N@(:z|i4V۹j[Nx}~/iZ=kjqχ[7N=N5jm<Sl,/ :o-kVUaոZsS9ٟϺiT\^gt՗׽g4٭OG+s`C^x7z,gl֦ۨA5.ť_~}+xo#qf/~!6 | ?Ӽ~!aCkmLw>x~94|5r ~rA??:v}b_g{)^ngY]ixw}v{7,燝ˡӺ3oshđW #,Z w aNf4Ow>DWnnpzgrlkbuQ^Kt8{ W'Q.r;[>qVvF~ܮO xoC]0:? |{k>zW{>cZ>~azVڳs^{~!˅0}?4z.G/aӋ__z^^Ȇ3T | ukO`? mW㊗+XuC/^ίXׯ GUGZ+zznW08k+zYMkGgF[¿kO3am];[5wzj}VU|vsgq_=s}O`kX}>۩F#:?Tg巯=NGG]#G{?l+Ķ>,wWۭk}q ;y~vl.K|+}ddOWֿp0~]U.l_0c˳<vpr6k{?xUrl},jm52HUW>⨕u^X9><[7s=nm<㇤|WJ7jɞk:qv?a#֭G#yr7v9Wk:fpϞ>O7+5'v{ٵ=]_wv=ܞSfWS[ X:,~ĮV]tfw?ۃ{s~,'WpX>S'yhxGY_l],xiW֧fo5ybݓ<ϯ]#nt(77\zl]t6Nv[笟WWYVxijnK;?=gzGr]ai=-~x}^#ظbrSb @x9jojjӆg} d?׊߯C'm_yob|ޑt^,ں{-i-n/[8.<}ݺan6۾ÊֳOiniƯ֎39rznW, cvWՔiӥȖ_ :hgvxu'>.lXW7vfo^پ[7EGYo_/F} 8kؼ ]|_j_I[>h-7k]]tZz _M3Û:rN^jWߙ7=ZokW.,V/=/9Cφ坹Yy3om? lkgruV0 I IDATsٳI˞CMjrva{[ӦVX[7=c.kilOXu`eqOVXޛKM}fөp}R޴V>:_uou==\}{ڈWyqz?L/~4Hw?ϦIozbӧ~ˑgF~BI~+W?3ek-V-}68>&S+n^~/gm@uO^s54ѾhdM [xaz?k{ob[p ֹj\9joM_܋c/iQrOSI~ܽWk }ׯIiqa'56N,A;۳s5wjN?u~klį5uc}p}奯FZa[(vݫrl?_qөꋇV\I6,svO(ިkZ]7۝^yM76ggoiֽF:Vn1*#mV^gi 5[LLE;/e]_\qqk -l֫Qk[|{;˯pW +Lq꿣 O[mV^vsja]8;Դ/4 _U=KF깵jnŃL眸Z=<)L5^&nұo Z⴮5=XG.?+?n3Ω]sl:{,/nF>zi齵~i]lG8UV-g?A'[}}5u~ܭ%rI~~|9Y=lˍYfivI: C3M_=YNΊmn}n/Laq᭛4iߗ9>jlYz=-w5~fM ~k,kyZrϵo/riC=^g|dy=v4^#wuc: 'v2vسAG}nz/٪~><ڮ={Mqg>phGZZaӢqq/b] 5wǷV;|c\j`=gy'Մ]XM_.m8Ӹ޷|0x:oV~0={u{ٳjWIsRpvsZr9rwO=+Y_}"+ Nn-y6y>=3{b6Z.[G>qɯVX5о'_b֏8=guaWDF~yH=9:U'vqe]꾁^Y^ksS{}.:z]^8g7?nF>]\v5]O1\g~aM{ۿeXn&/}Gs9n8MƒOoӈLl3[5u~Ψu'!.~{gˑjk:]F~GqK>9[OcuC,Yhwa [ oL4>U>ӫGoԗ\^r{Cʱx˥ܣ]=޵l<~|Q+FGXf'Ë{ 5xA1a7R=:_u}_x>د~k~k{Q3=+狿vi}Z-6tJ.M=Lth^]ޮOz{r}UY>Y;-1aW8ΩM?^i>^H*Zgz{dWsW:=8| } t_ zg>[grhU>~Z͟yei\kOz?3=g]azS<\_Շ=ʡ>=÷G:qg^UQ#x{dqُxWbbO8)5'÷;{di(zqgu}i_q F?)'i}d>q+jxkՉ|yg{Ɵ?LWljo +g7_i_޹xv\|8l+Muw{_{UoV}w֧ngZ:#\v[gO}ž]oNL>s'puMOw'ܡx{rpmgq1Y]M{Y Uޫj8J o?ǫ++l/֛Q_i\a-^+J/?·嫯g>SWG7zav/~H žiVWs_9W[nkSyYip*{^];w9'_ uq,se;q~TJxؿrJ7ddV,^pk[<>ZWwz+ci߯o/֕׿~y oSoqkֻ?ׇ\^sx=Sm{-g`U;(.FC VFҾ>ir L/.9d?yu^3Ou[ѐ_N|4+ޯDѬg:Άg|u[ǃt-~x3pZqV^~<j翁oya{Mm.̽xn=YLnhٴyqذ/g߷i'ܟ=7ټp,VrW9Ӿl X^ v^_{cǩnK/Ѵ6ʋ#FWq[mr[O+~j,\^Xkϳ4pN|1axzgo\?biYeo–ۺ?I\՛мtvM}*oz!s+{]~ԤQ֛~_k#1==N|]b;k\=m$II}#xU#Ug𓹹g"QbU osqzkaZ~~q/{ {0On%.?8>q2^ywV<5gvό8.yQbv>o~ ~{g?AzΓ\: }Kۋ{Yn~,I]=#ח~`q? 6=+;`Ñ0z |z|)FM&l\|Ib'_Un_?~SvNgC\] I{Q|͵xKk>;ZYݵQG8(}u9N|f|^--Wz3֏~gޞSk_KG%_?}娵}ғQNup{{rto?~Wc災CdWW}KJO.N{T<ɝr>"3q':kW/393f}~*:IMv{#xzǕtg#rG56?s{_ys"ϜekʧLg_GkaG1p+ߣ;,{ٯU^͕xakmXW/>)<{OL?{/:ruWRWo*\Lnl2lz5o-^^6g9eO?`0Goe=_̯öYnJgO\k6d5,13ou|zZ_n{,_=Ggzװьm6Zb-)k88`NN<ůzw\"3\&z{{{D̏?V_K.Ro>M_ۙuF]|jd[8.߳}e㥋맯qc/n_]X^qnt|ok䝾읿8)Jv%eq>ؕb[}sCiǟI3ʵ/m|yI;C/x| y ?ǭ;|-_z{9S׵qmj_6#˙o KM\7^M'$,O$qϘknq[Ek{k{6-~kc}+/oZƝRC}<+w;v2}=Tg.󩫯]6H/OY?po1V8/J>;yb8O,6ٹI3lsa|ͽ0已-y|9}㹒rb>fza;^3oGX9+_rÓ/ur%:|%;ZՠÜr9gál칖Yn8fo9llqܫo(-lm'[=^rr71\}!!n9OO._x> *VymC,|EIP Ώ?_|-=_?XÛe8].V|a^\<,fw%uۖGrk;ÑjNNjǙoQDޝdsY.~.oq;[5/R斴f'o}ˍG|ZN?+_'GrφkÓw媇b(tlYŹ=S8lqZl8~:\rio tkN{d_^_~{{=L}W`q$>>/ON&\x_ȿNv\ŗT+^,hY#ÿ2ĩ'oe=5 ve=qN|3=czǓ>EJ-^_\s\a3O*77ؿ;S]5ҫ=p Y>Lx3Ôo sɰjӓ0};L=l'8uIu+k^a;ZU_X͂ C_fc/Xo?pI ϕ䃭[ z*njU+WonyO&p&yQK =x*v吰}Š1UC-+>Q<٪8bV9a~9'Y~{ٺ|!<97;3]%YegO{m9ξר^&ony8Kplge[Lkjv OOg{wuZ_\}'-n6xYNWy:dbƽ8>˵AI+G|ͥy |a\g IDATO-,Yqmg/|V8÷Η*k~&ڞC}3[{[Lv5Z?~ϼ|ҳ{T3|<ɖ% vΑ_=g&Տ;/nug~;bG~7`L_rl\kW>ɽ' #<{'Y{dr˧k>qnyO.y9ծNg5SG?8,Gy&M揫8Zto-X쭑?_iua]bvv}l]3)'\rWɳvzs3qɇSu㴪S3I6nt}Z8U:|-2ߞykY[ӗc8=^zKsθ^ɭ]6tܒb|{q> :u{_9_9͛돘@WG 0@~+6yr7 {#([/qFzK<]ӏ+{r[:9#λ?a䄱Hb'bRlgS,Xϸُm~qIʗ/yZ[alrw|;9ZC/gֿڋb?m<3{;=̉][.wkm~z=8?[g{oŋWwkuűŶtLm=q4Kpv3/^S:y+oq]*|W{Musu9}WV=Pzp ™^,\GX6[`orH3$ᒻחnV0ZfW3:,8aIW˗ryr~~&8#g~\d~d=8{>ysB WK/[̅8^˗\ޭp}dzZ-˕ogݍNu+_%dį sr5Zף^ž9N|$pֿ#GG&?uc 'pO={ 'pO={ 'pO=//t7ٟ0}oX{k*sGl,_2ϒ| z'NpxV|-<^_ XZ/Êx6͗ěumŒO 6-t9WZ,ܫˎ7;_׳I߅-ZLOꔋQZd=Rk}͢_gOOd<Λ&,]u78pvZgvI瑋\jΖׂQ?,Om9oya-''ny#l=Uv'[լaO_ SL~U#]ٸ䳓Qq ]pmٷÄs n͡'rqV/ÐH wrNv'{G;Xy{a<_$Lvm>k[{ϾܷዅGubó2=s'+lo(9O~8|v\Iyñ}57HoW[gΰlM,%O,;N}KWC<[Ȓ2zņZֻfg5*w唯~zu] \l̎8mϐ9ƧGՈG[z^[rô;-^ z~j[ɰ-qۥ8jU$`PK~x90ɅcN~=w~_Nbo8;Wb1XRSy.Gz=y˓5cq(,c/uN<9#=vzyO3o{>wJ}\z/|+g}Wa[+w^^|Kj׃x\rcq{ƽSnyp>:^h-^'[~Ɂ+=l8Nkud%=uN/́I|ΚnV_]pL5|pkq$0欟rC#l}`'&8I7+mz?gU?嬵y`˅'Ƨv>ݾpٚ>Lo-}}{VK|9íXK>={}CO/$O^,99+*u7o㬯n<둾:rtW,򭿞nZ6wuI,~~$<|x;}O`щ|8C؃{AP<ӗ]<θjΟ/]Mx8ēa~uקrՂF:\:<?,]I{ vyթo?ںKZH1Α/}9ºǖFvX2lfQ^Xkkz-8WnY႕eדr}D/g5j[|aX?{.y흱/ʍrv:fyą8]Ho9Vk}_9ueqgR/3$}:gz:{z\=9µ~V M=,&;y~ef[_\bWz>C{bMן3e_'HwW˖˗l|G \1g?pb?[>|zR Ou->C֯}6\|g_x:o\u9,=Q+L]ͻ˹7g/_̪\>3)]]_ngy5¾lNj\Sj)7mqv׮KKK/~Z^ϧ͊+ly݇j73_E?b{g5ȶIzgfg~p^Iy\;;+׵(gkl+v;iXvFsp+^n[⋷ls+W~|j/)]In,l3N۾'`9x_6~><ֿ {?}nfu絃z|Ÿ́z9m>Gz!O=~{ /.'|=,\p_˽/{r?QgxUN}zU>ʫ/y w ?ϸ)he9_?>gG{U2+|- ҌkG[myI_{KkGN~|={ɏ.5+~rngޣ㑭ʰ[**~8g%񬽸3baO:|{s^6ޗ'}c'i/}RW6~L^_y俪;yam]6+fv#{.5GgG3;vO3`9pl~Aޕ_uv+{f'g8ʷW x_~W0Ud?TlozW2LѯկGp٫gwmؙ\oxŝzEkʦ$N\~k^~1W5Xz?xk3;\ΥiwzHǖK|6\1XԁmI V.`ŪA95y}ʼnW-v\W >۽oϳXȿNl~n>Yg\ԉ/LOܶsg;Wޛǵ}9~ö^/b=;g9md h\6ߣ3巶7v/jO/Aoɰmѳɖ_/ͬlO_ſKҧ,]Ξ5Ɨ|-gپrѾ(kqsz;cp%ӽb^=>~9lr/+rDO|g  WZNrl9ϋesu/tF~S/ڸ圓gYc{f;&,0uϪW~:+ ۮ=oUKws%YL WfeI: O6j]0bήP;ŤW'sUd[f魵sN1vV~}zzw&_3nwM5~hu ]NO\q/&g\b7\@ܖ%9娃s8Y\[{kvuʵO>>E{-6X+>my˥J]鋣/w:ΎMgav> /$vn!F6x'_ɸX?>[grr71WXCѣgXpҼ?,_;TO?]-}$2v+W֎/ۮ=_צ(_pqwL_83=kvq9-gȖ}f۪߷ j[˙E}5I_.'r{m、3Ľ:ou3˓cǨ_z,:V5_efwodtvs^zm\\-5^o/ዙI~dtv򚛥v>:~6/N/O9ی·V_% <_Xlz5p8Cvً9esxȽC xnuO>ӟ-G^Vu s^73+v?c{MK]g*7~ca=*3]'^r^T?y.?ZWO5>VG_1مV#Ξ[><\8NOg3k.[#lqlzTlm=D$N'{ϘvscF)_gPUz;r3\קQ?j/5ܤ´onew k/o/d\9δj)JϷp۫unO/n埸w|5kZ̟mN^y+c']I? ϳ6?ix$֞ik6Oxvrw=/GJU+gM>}~|~v99,WsNg,˻,w:gyϼS*H5Z+Sݏ*WRnݭSbm3ڏx}{{JW­2w?w{o<3bcj|$~~ =Wo'?:_==>2֍LÙ:أ+#\vrx['K+Q0Y'{r`v?ߙ挽ܳQ 8k,Oo!8Xzg'MdzQ ~8˗kW%Oi>rv<>+]o_Oo+awp/WS*Qُ֧=ƻRMrcշߏ>^Hdq:)Xe'~wJ} fsG‹%mstIF>)~{ą?zɟ\F:K{t=o ^,~IW\7\?ˣǤqogt,[gN}d{!grc `N_3Go`F IDATxIgbt"_X=Ii_Vy+g{-|kũ6i#/^+=d+]=8>2| g8|8p;kklN^>П棳]+&_}ZUhsdG{Hq_sjLS{OO,tFxra&Nrlp忢y8nkc +m>/sO@yZ:G~Ŝgޭr =ޮ$$9gqdo.^o-5Nyh؋a3ޙZrl/V6;_[|};ͼu8Z^|O~!?볾·I~_ٞ'_xdyϷԖć#n1.Ϯl6+x ̋YpO'o(_̎Ǯ,V/r͠=|ܷ>;{۟a1 0܇5l>|8φK!K,;3e!br^K_=~JNRr6vzJL撿sna-j8Z{u5᷏v%.b KrU_0euuO '_<]\YO<^⏻y?{?᭸Z=į]˽tgR[[NUO=|ۛaAKzqOėUy&IL<#~|S\H=9>tg13K˗?GKͭXIun#^wpZ\16y⳯xp@WWױ6?Τ8޿V8qlz>կgcv+;?Spf"GL3-ӝY_x6˟],^VxϖxR_AbV>#/]jc/yq.uI~}~vHø>zHνk]"|?_^}ɮY_K{r~=Gb?(ϟ#ZǷbv/]kvx+]OW2>l׳\:>遄{ܰ>׶^Zy_SLp|}.LjkZ'\lm8aI>rc~Ocw?r=A<9`y,-j^!HVث^|$3\I$7z:9٘8}<1m~qx'|pF1Õ W^x8-+O=S?s{bO.8RI].d;a计 ϗ|ƹ]OSj)UKz,߾$4;ٺWyj*wqWϞ@vҫ{½H"NJ>./XZY &*?.vmk|xxe<*O-^!bO/=0Iu]]pɰl|6b]g_Y-^=Ytl[{/e/έn}ھNU>qgꜘ9኉gr?^õyY[du[=|˷V/a_ή?E_ESz b^#}=qpe1[nVft\R俒q-GzR[{{/.xi~s<\8,Ԁ-:-Z+ͷ('/0+8^=^{`w}]79Ip'~6u{Cpbrԓ sI+o#I/3_+vkH63ڙlzēOd Wï su{^㪇z '+w{b3^\|a x{sa7&$`g'L|5W{*-?Ya)@gs_p]|15^ѯp,PNz]͋,/t/Ξ,^|z[3/_X4G6?NvRꫡO5ӷosah/O?b晴_Tw Grr79a8 7ZzpA"}~|8f'}]OlNy_(o}xև<'7W?-}k|/?BqC'wQC%[O{uU>d5m >#<勫x#󧷒q0f.V''?xbH%Z^=: HhN\kw||'3Uݝ_AKo Okg雫~>s \3ˍ?#q'gbOlY/]G;- \ N=ឡܯÖ|/窧r{8)}?ob/kV|˹Wy98XIgK'kT{}t1?W>vr?k9P/s_I}mfq^U}>SE'wbawI57u*>?i6|r¤ٯW5ĨЙõF[y{?9p;aW,[窮o-:kvWܰ'bΘ:q,'Yݽތwu+g`ŗW%^>ε7~=yUkH_~ޜ·l}w,/ك>实燇8ކ_"V.<ϑͧ9>ę?*W2-.9{:Y{gK/[|[?̧N7gؕj)O0ENkok3g+)_@^Owabg|V=975UhåwZWpV^/[gK֗WzW_Ts[_T'i%qq]vxLbbW6>5svygnvڜ;z<}é^ZOnbȉ?_=m-8yOΛNsv+o/:9_^$^s~ qݻG`]s{$+8W~kG}yq凭}t/~F}nOޒm}^8;Z|d>|}mMgNZnG5\˙ßl;Csɰ-g>^wmaӷv0N}?Lv6WrZw?Ow-^M}㲮z[)5dY*ԇq-#R,y|/|I>Y8ZOq?Nmi}9C.[N<[?\q/q~1mM'mxoyO+'p+ysއy0v>7:~/0W|~[>aegldXIJZt^}kGzY\U/\*l>X봷joڼt3?gOo/i-_U{9evG-kŠd;;}o\_ޑ_l'n >{,hwIr1iڜtyÅll;Id< Z[n9+'Xg6_9q%[ro,V |z 5G\fO2rٚp3_X6']<+俒'F{UXqUj٭lׂg~_'׿^vVH]?խd+`υ7rwcq+;_>㋫/Hl~`+0/8x7 F\r\OՈ.>^jOz{ƹ=\ˉ!דrw!ŭɧNzm]^gWpKgl/^rW2\Aaq{h?Zb=5O%W_L<9lJUaV+I[t\3/GkØWO WJ,,x7_dgr6dxʷǽO{v_lv9?{{Y_z_?jSlc9bIz7T.?]?lsg׫U-90gsq\Ira+_xvzͿ+<18/o'+NvY/gb̅حs&put?GŽckĻ[sV-~{~ϰ:,g9$SϗO|׏gzR\l5[aqçKgw哿}wDn'?yT6~}/Gp+ȿ5X:|׿5[ˑnȭծ|gn%#[{þ~"\Wy\^Ë8pGWN_~%uO={ 'pO={ 'pO={ |hиn?e7ߠœ8!RM:x Nl&l=^&_z~XL"?K$>s{omN5v;kV7I_{~so_zn-G_3gŜ} }Swq=x|s[\{?85'z+&굒r^_ʍ{G~R'|jşOnzgWkYX> Y<9׿oWĉ7\[?lYٜzʥgy}fHSV$],ǹd _LYÆY\|N.3eFgΰ?1QTXbm>^l_ܙklj.d[d;c:dpT 扽f,.k7}ʭvV텾=uFw9g>OYC<8|Nv1=O{qõC6\r{-ޜ!\:Pv2a+N;sp|;>|Ooo8oÈ|Zn#և.϶N~>dͰo/Y#coM_ kWNgup-yIRyftrfx5;!?^5Ov1xf?7:˙-V.|g^>ϙp8~/kGU]Oa j,6_VduJ=#?Ka;O6|pbZ6%E^ozbNZX!yfu>y$zjs&ڤ(%Kg'{rO;߽~ t-]O=Ptb9pbޫj8d}\amlgL\}6Z>]]_=斯>[O#*~Ʋ[Y:K ^Y'y8$&x~yz<ˁ7s{|_hvߙʫodX CǓʮ=kz 5ugnzg^,0'dvf+ah[U.p䙃=qO-5æ!Bp37pst6ɏ?Z0r^__xuZ^v~'#8ʳ֟O^ )Ƶ_/W[y/`Ӯ0jz-~ʍ]8y}ݹѝ-W~s96SW39fkcksp9bbeko{)r]~]y ^.d;=_u>ԧ;y]ztcW+}md8WG5 GLxgE_'3|qO^|1S`0-}ˮ-֎ >U+p8R,\gߖ~YC~Ho儷_}{ "ê}+KO'_l{sF?Mk׿t/S|5S-8bk;ɳ~O#Wp<~{٧J˱8g c_a>{6ޏ~//G9>S?3'?ngv휑Ozޜ-?UQ+f}xW>gzog.J IDATxVlϿ[y_zq'Ò?s65Oyr֛_~佗;'p]뷙@*>XH?T818wZ<]ޕw Q~wQqLYW=9dCK?[\+>R~`I\$\6{aN>8Ս㫇zs>\oO_X;=in=\ӿϫ0v[]+#:mw뿽ϙ{;۽E'9xqYkoݣ6j˕p|z8xߒ;{'3ly͐4lO=#|Gec HTJŸ/Ľ׎.Gm>N KeW\.nW~},.}k/ϩN5qr.v{{-#ηŷG{b]ߕ^]}W9o,GO$l}Sg[5 guxqܱ{L#&p05K2|O:/rudů?v[Gõ֯df;#7N._1}Wus™uKdyǷGzE_m~ЯƳ}'9x yʰWKbv~8's˷g:s=+έ bIv#l_|+5eV7w>,^~|򒽏OR>uNʹ--,//ݵ}5NX+&_u?{};Iϖm.q3l+|a[|zXLz~^gs5l5$qʰn&q>ΔYL/>嶼'+Ηfg!'Lu61bbgΗzv_b/:k^+k×~pg'NiC}t6ο97)uaVH6̸iw5G=]-K.Ŋ%|vr幦{6?\'6II_,Liz__S?ٝu^uV+>M4`/6#3K? ~v5ʣ5^O㍯e\,ª r7BřŖGqbS?7al/t3.V %W/Ά}$ǖ5SY~ȗl_87lrkwçXBr B%jΔ?+ǍX3mNd¶'--Og+k/G^ˮp[3\t{/ya>J{zqMîkm<+\Lz}/;3ö>fܕ|Oǻ:pmo=gmlC{vxn/oq_WGΞE,˵ˇ'ŗY,< 6vf׽Й\ޮ֋Gvͅ/3qg$e3s+wp&}U3dS,wrôʽן7}ѩ{ͻcvjLS<{w}&gKod=iTO 4_yV;lq[d>rqdKt8ӷ~}/{gWc;Lnrӳ޵)gkoL}'Y8!;n~ gNy8˓GW+۪|Ts/gnΝ9.WzX_\wƖ+Oշzk>_K\a)jfsv?˜:jIu{_9_9͛돘6!̷v]kmGt}$n)$apomvH3prN){trK|l'aH_3䷖'_6򦛷֢_gu_7?ηlvvK>{e:/;ldn=ho;<[׵O/]b>~sf;_d諭xgm? b0*`XA$Xb v]c *BDE,%v|ֹs}\$7~c<ϜkιY{-]C%$'o]O|S^,d‡G-ʩx2C2\nu9UdspؖV<.䯧韹孵7nr[iGqW~+/LrmfO~j'?}z&dÑ ZCuժY^>\')<ٜ<ժzr5cת|ϟn믿r>U^旳ۿYy8{|Myt[]N}S\qoQX#O!8;pv#mzdn{a]'g&Pz Zkj{Tp6fOCh~z:˨sOo5}lN?~٭ o21W_{\Ozȶz'/ՠqovy0==1kucW[n{/!pֆ0/ʩO9&=;>yjp|(V[3p%g/r7d[6_9%ޤv Z _C]c ?@">1L]郋/u“'Fywplqs4هG^zu<9A۱yBotM!ѹT͵Fq\q%w r_G7e7~ķ飇]?|{'no?-b՜kºof"e뉓ݱM럽8/?ray,W1{c)'?J1sMscr>3.KxxAY}xKobrLXoE—K'\&^.]r+=W 5!Õ&^/>$ͽV޵?X88k7 ܠn|>55ךbŭ=G7}ƗhV^o巾&{8;pv6]*Gw@7Ȼ C<֊#ۭm:Qvl[܋?fVM}9knc[a19 mcѱw؁asb=嚮U]=-}Gcj!;֒ziPoq$N< {Gc_lu/V{si=8~`;x̿]!n(|*o&ϵlg'Ʋ}vּbS֜I|0'-ΓW~u_ \DM}E|Zz~ٷ<?1 ~{SP_37^fpkUmw}eǛOfdr@~{>O}?&W>xvkL|rZ^<~ZWzzy8'.?9·pgkrM+Mk 7jԛ_׾_qΏSngaq|۵ߟê~qnTVܜ>lӆ[lI>#N8jL\}O_̭85^5YqvuYcۯ/縘F>cgʙ{75v)' _+'1מok']z M[d5?WqgCq5 ǖu~tה9!~4S؞`:w[[>]n8vz~>?iCzKÎI&;VŲF1v?=';)=o͟)Ó1_l-׳EkG}矼|F^'=#6d5>e-OO3a:Sp_}%t}Smr5Or+W/lxgr?l:WCcc^8'V~rb W$.z{>k391|rǖgsE_õQo} _?12f| ֜=UgOp=Ŷ"߬WCg#Ln2 ~?:{mV4)̮oyÀgj ;O_lnjVЋ'Y7v}:@;>_V-~8|¥._n;0 w$:WsL ?m⧯Wr;gkkCX:_p&avOx[?C~\~6<3׾jf'L3>]o+oSwfs 灸 OXa:O}_Kdb[r 9 ϶&RlxӘa&.GMz[aL˛Oo?j%MFv^H闓=^k[qվ9{;-g~zPI%LdubSVtLtǩ\2?boquNLiV?rfOxU$(&_2Q~wycd_u8;/zU6f2|l0a֞}Ms:^{OU=Sd}󰓯:Gk[ycC>p36y8:'5Մ94fC55Vo}'_XrQ!qrbP/o n\#>ϏqO?=< WךY>󭜭i@/\r1' 3SjNi/'y7Y}%[pd3Qwzͯ׳ґ8q;p܁w8q;p܁w8q;p܁;p9;0|5jl/u_[z koZ+a?m|~ oZK<^R0ϩQn>u4|ҨKε;lOǮo[uV Sc\z9m=pz'q6i;KIL'3&O~mw`u{i'r+wȎ ƍ,~H W˽]re닌:z'}g^gsðٞ5=YY}R =7c?{6qbP{4ckr Os4:Ò3z暶r[^k>kid-I~ WOU+fO98񵇰a꡾R,޹0=q.r_n}lWj;^O~xv൯}E/z=A<)}=S_ݏ؏{pxC{Ӟ{Cz|.gJ@nb]I$wc}+ƃG8k泍r$y_2?lcpZK3/%g#cv}ɿU[uS'7/X9e ڷVi;6C=MO͆Y,fQ\7_#?z;9|qK=FԶ'ƼxI|us'΢͞79n8V/|OO̻˻>?q~~g݋_scs3:?LpN9t%pʉcg/o³ r5p 9j|Kll>9uqCLlxbz\?{֙\%'N>;k'={9{ĩN^;yz劙?`rU?+=_H IDAT?$q~5ظI~uC֜c`հG{q>Y+L՛yj?rg[zՎ_<|[=VcrɟC|w=Xz6꯹q­ꚍjN 3{_߲r>͵M=zŦ?I9;pzV9rwYz~臮|`.ȇ_%_/|0qt=y}~NA՚!3>3v/x w__CPc`wo7b浥O٨l!f 8kI[c֫NtYo98ٓbaqg#e>~kɞ!}fo?L>Y_jp񈏟m)mJo haZv07p[33ctCޔ7D_=Vc|8Eknvɵ79ުmxk3Sox|In'>n‹Q->z,'?{_uk4쉋 wŋU~g}y?~|nq\'KKwysnoݧ}ڧ{w͜t3?3wߟ_{+c{ d=>yߴC>.lxyC|}/u5ެF|AV>E'zwCO{Jv&rol=>O1{{r?n|FaX~{>^%|rOkg%2[ 9#7ڧzz>o虏-gyg=W46{>˛?׮fU+ \o)=rڣsk̞ʙ2]~֣ơ=|tS~ƅdZq%+\2앏'5WOfcoL,zGrQ,lL#S޻~~嫣z ~̧}fn=uel}r[SWg><#zL_ڟbrxkYo Sn5Oΐo[#8Ç^-tynxC>3bS#;wg|0I[a:WlOMkn:9!W3Fx\wS0<oSz||s__Hooπ>7f''?T6~~`g;c3?a3ݓy#?#;ς[? 6qs>y/|?ttu;pRׇi՚s574/9(ibnzQpgx㍓M6OڻZwxG2iM-CC'k=uČ;u;۷8WS}?y1qv|&gO{\ c0dX}mv?8űJ٧8jg'պf KNzor5f?񴟗ۯ%WTup^ 2Lc]lô8a7gX>7.gYn8k_5:k,[Gz&ۏc=hL _%pqsl縞_Gy܁܁>H#nG?ũE~~W|i8wwٟ*}ߐo7=ޣ^i߾7|0 =ۼY__{ӟ_tuN w:搝o7''_SHf^k3U4ٺgC@uaOYo 1 c鵼<|;?󦾮1{bVkO: '<w^=z~H/zW.}CC#Sz/jz<ckNk"ӫCM*N3b57?ɉ˟\ɶGrώ\kCZu5yp:>(/sH oz}ʿŕlc>,6k#zX9&wzR2؇}ؕ{Ƥ@fyF3|5ycv7p?z韾bHqyt<~=nwgWW7eǺ#8{9S,*;?\3V;?9'doI,=)խv~UF>SgsviNQ+FNVoK}¬6Ǟk-7 3O!}+szm79Ŷ86믘wngl2~pܗkDq4Z+_s]qMQ첵 ,g,|˟y̾bVzbd;NXMγ/,oJ/^-d~81L9ItrbբGy|q܁ځ$/s܁p>C?tO.sƯ+}5o ww ۽m~ޟ+~oO܂8q;p܁w8?7-r{?X/|h~o[N Ow/moY-?8q;p܁w8~vyn{M_ =fc?c??>> X}X[_/yKv??/rg[[g6U7d#^q7H\zk2iE8vGNθ'ܺ&0RJ;kWw}VK:}kgmI9d3oy&5‹Elԫ:WΔgSX:z)潔~I<ӆo\X1x K9 >c$_[_3>iʍ?|lk  ϧظgN̼Ʌ)}2{?4:FzՂk?$b8L6&,ݨjϺ{`W0O;_dêWy:.ztp/sZ*>fm+j;Ӝg_ڃ}k̺prʛx}8C^\|l_Νy~V"y{"nO=8&q#=+z?S=3Zدʯ\!WlǬskkd~Xy2olGÉ˖%ZO6_޸emq՟|{i#F9SV/l#g5'lv=S5S-bkx\zf~mb/\^f'֬NzɋcTN<̬CF-omX\a{d15g,b<|y~kok)+ngWMX_So1u8#N.n#٫l==Ok3eS19g[pCrS]1s]3|aNg-?Y,Lac1r՚k\Y!gbyCެ6\2džL'8ށ{$o|\8} ~Fx}^oo?3770{cy^E ۛ tq7+_n]T7&_?eylM~Ǔ߈7Lnpb/SjPmq6kՄ%>m9?iu'vrGݪ-߱\0ѱ`ܪ7:Ԩؚ÷bQ^uUnk9gI OKZusOĦOfYP{>• _/ji$j1~\՟=L=+?И=maN~KNiI[x\">Q{L+WDŽ:Yf9rqэ2y{ڳ?7-oY0.gS/>^`ꩼ0䟜ĵ37ˑ;9oIq|#>y۽ o8S=sИ<;Ozϭ09aGT]yq+?{ʰs͠OK}=YN>i_'Qdk,/;TwĤn z^{*ױCܟĦ6ee|՞Å!K7׺[OΉp|YsD>V;깲bf밫լN[2|oH=0ꙃ 3޸[9NYiNP UoN?}][8 '=jӋ˓1r9_0qxd͇\ ˏsH_œ+ל00_l'{5<;p;A Q#ߞooQ 70C7ggKWg|UVX 7K7Frݨχ7UP&-j/䄑W}z*7}fp8?=hͮFgk` aNY;۱Sx+cwRuKx`|bzzی3qs _k8<r=ԏX>Yx:zW7{ 70C7y<!yѱv>uN\xwL?=}1B)W@'Jq?vzO78>Ώc֮7t[K~끛M)&/9c֨VVV3(}y?rWq/opq?z={0Lpzl^}8WŦ=p~b֦w~tⰆ7^r|p+^9$aԳ{=q[>=1mu>21kOW~5)?z8k Tl|6/[^a_͆X8>Z πa10똾$.zVuOm#5_;>n+19 kŝ^M)Ϩp|7}brQG;&oF5:̙u+U]&Yz7Yo>qѯ>OV}=\pּZdn6d%gǗouҬn[̛rxv>U꧟]'g0nʸgO՛5^$ړ;}S?k9fGycs]œECDsl(.6;Vy־9>wa^s̿[cor^!k|oΚӟ~=y5:f8a/¯C55d=TE98=YyעS?纎U{-?ߡ۟;$CjCkﴟ3Z:em܊Qzq9Z9&IƕqM}^ғ3wcđkE=͚Ort0pUk+>=,_ow̫(61_9q&>Q1ֹ0f.;8+}|:|kLWwù۬ $L89>gNze7+.ӟL)g\zkNIb-x}7Yœ|8[ǍWSwCn'1gW!?<^k?rwO/__v/גw  ~^>d]7ifԻיּ9+ֳjρ3W|;'lzk6wbUgƧ^|+[}Kv{WZ͖XvR6k-uo CN6f#=_Zȕs\f-IF 'g 5!=l5Iܽgz먾zq|=I'':xčj.xK/N\[XRbg=_pS۾qbٰw/~uL_)q܁ ߁~p#y!"vgzЃd7淬%+f?& Fej _kw#gwaBpI7xj&C'c ċ2~>M IDATU´&7zaO|ZO{ɭZ~S#?8*ZMK~_zi/oQI×={ ;MNҬv)LV˙5ꏴvx2.vkx5)f˛ql8}dqş]>&-o]\8gO3'skU_Tw8[o>9oNʟzCX?ܶap6vkOGO}9[wJ`ON>vǘ4P}1'9q[!AEVGO|O槗Gνǿ5`MƬd[_xF‘_/'?/g{({6;-۽5~X 189rɹss٢G|=Sc9 Lj/\Pׅ|$_" XwK5'Wro/xrf8˫w9ݳ''}֎#Y!_v6ǟ^=q˙rZ8|fobe?`:8Ū%񬘰֧^>ǣ>I>y-L)[K}'No_L9bծ5mM=;t{1S=`k L?'N뱑oR+W Ή[lqS08k+c8rO9'>&wכ>NAZkv='r˟v yr]F?9Iz.a/r7$\;7iqpx%?;47] =x#Ħ2gśy /Hw#'Qu ݈đ?_dz-0dҧY<(Ο>ݘgμy3 WnXzs>L ~Wt5+~Rl][k)^^~6,.n_gO=zL0[r,N|ӆ+'לj ;F|F}{\19¬%#;߾G~y;ˈ^k3>g51ג;ynO/H_=y^CЃKx1Wg}|wz+|S+Ds=sry_nэpx${[/Wf'M#OOd_ˁmN7}Ųݏ u̎I?1V-9#Ӛ(ڭ-*Z#OkNݾᣓ#õa,-^-zGcO:+o"V<=W9|sO͜G?iF{{;*=IOKǭX>|pp[R^l|67qqkN¥|[dԆqgK)ty3'3ʗC?qj+_ˬ?Vڛ,yL;uہmki/}Kw{N\M&jb4+0i'ُJjM?w^}蕿P~.aH87|lӍxX:!LWY}zlM$6$[LM]Y?2p_I>-N|C%.r9{6~C[ 6|~v9_ 3n':Ӈ5V].i1#6ތyKz_gag+KW\o_vDN1[ .ΉqFnp8]đnh:qO<l|g+7tkܜ=ogsɥ5baqv:j1g}ͽ G|6MIVw S>fK3oG<LԫYx"+gZkXM;z:q 7ܰ_yg] /q=}Tzg}ñ =ϋyM:?%{oQ|Ч9t⯾<ߵgjt~ 9fO#O|Vj 3k1s7/j?QVcgg}'u|' zed}b=o鸔O|8;??tS Վj'ܷ-<=9?u֠W8OerĊzS{J3czpZߊgck WC2yϦ<>m>}sO` ,݈/{/W ^#x?q^سq%ʕr|++㟜qG:j_ב5 _%'Ǟq8p;e\νh#ni>_{{i!֡>1y̕hr=q[sE.'xN<"Fʙoq\O_S)<iMߊ뫹:Fibh IP/apGcY+_._<:z7h^zcUص>^{svKȋLF"uy5:.yy[ܭZ;^3{u_oo"?;V-6TIF\`YFU^K\iӳzt9Ӱ3^c>qKN֓5΢O]9W,[u=NʛzAB3yjM>ևtW۳'< Wo{zԣu%?[[ [[o:xレ@T3ds74~3}~~m%{\'>q7Pl?=OO_!>N7_k~E_-Mu䛿j'_ǃ)NCOzr=̔gƪ߯]jˍwХۏj;_)|r_׺znN6@᯿5=}s54[qiwlʯf8U^ch*x|'=I篎r;=z|37ʕ^ػ K&䈷8;Ofώ}1:^8(Iq\SǠ&/z_nuVu_f1x[?_ji]ժ2{/~ۏWs>yɞӧkbINܩOsmo\5[#_|?zG?[~;'|'"W9o֯ߞ|g=Y?YgS6ǧ?{|Os?9s`Wjg_ԱqT?纎iյ. 3ÞNJ? c]+{#_y?Cmj3ts#>ǣ+W}jQ?)dϽnyΙryZ0[89UXsN{]M~f?sqfWkgǕ.6'g~z 9q$'4^`㊏֌kUr戇+6{8~`x'x_~eysvg>s}}я~$@׿~7GwA}|o|]]77 {݋^wQ] vV7ܼ-Fθf '>u9z7o7=azӚAqz5멺U{YbW_kO/<}IX_Dzw.{gx'嬒c-FگZ3.:z11,^![[5y _&ڣ>>5^f9͟j?qq]?q֕_{|ƬgycW/[NLo:d;xȹGq{P;wֳ$^CPwΫyI;O}IlzSg`ejO+fLYSN}pKyo֤ˏS(obݑo7CS>Sv/x n~ _K_ɺxw3?3&;9oowx#nǰi✾YʍkOw~~u=wOzғv_5_}=f՗}ٗ~'~b=i86{5lɹI7 (6ițCהbӎ׺5 [x8)wu7xeO8s+x;𯃯9\qXO}ŭWs!:NW?{#1N5lVsN=ni fcv{ҾYob՘ɿ3`Dz,Y 7ܰ {k^^q=߰sh//y9įʯ:˸c9F< [ʓ+V50͸ív9oIS?-xy0z^^56<ώY{ ~֊˞K-^z:yk͟]~+'Jx8~`[;"~^W_Hg~oC: ??_e{~볦q8q;p܁w܁8g6wj} oq}{k{܁w8q;p܁?;BA}{hAqCn_"\}_|dWyd_z]wju,Gt1:'}Kok9ki"3~ՄK:֚Hj5U~}rW.&gJ|xV[Y-~yl&ZqǨ;_6ř?x#vQ+Ư`a#N2=Gn嶏aÑs9.l}SMwl쵖|C^:lYRy_Ŗo_>W#ܬ_-_ϏcgS_8tδ'dõӟrܰaeZlɕ?\}g0iuIug'zq㑣r]QρΓyN!1x~؛p#frSg9ECu;8>9y..ǺI+Lf6Q[OzSuLU3rZeHˌk tr|l9g^NF\0&wRzhm8=_=>TzӿN&GVOXCwɹN>/O;8\y\s둿59oH65XbaUZou G-~O⨧Y5cWN7' 3uj>z9 Ko=jMy\t}ȫ^R 7}ay~o5'?۹b|ʮ^'~OdV{aYlIN I8\zVv;;p-;pZv{݁.-`NqUpwnݠIk;ůw~ZK~IbGV"{ IDAT_j ~gݔ_μڞlyV]t?Xw ߠq6]8҇iՅo7?zk-\{I7 Wgѭ6ysĩx|8 9{Kj_bb`WN CXg=:՘T$l},/?)Ϻ昵`M>=mbjd[FMz駷b_zi8汍7\|XuljZ{wm1&7G>:6+g=UƗz &w=4zp7n1}6tr:z؝3I*&nqpbKρdc8Icn| "'˫OcO|=V㞯goo;P&epW+9ӹtc/{O\m~?Cok=)DZî0գϡܻY7\p"o [Qww?_4PkFr7 &Z^.V~\kmI,rjOrS Vuo6'={qpw k]-7Q޸R/ū+}뱽f{ 3!6jpN)'g3=s맵u-l[?6ީaO:> ]ϸ?\k%ʩ?p-nK7_뼌OzCyxnjϚ:n?f.^sb; <-5m08{$:ųI9p羨kט'<<O5pK[?{Flz߭~]W[?_iw*>NӦ[Rgco0gO|I &vrZ׽Mw˭oyfV¶ٌŇ;z])KUN[ɶ{{Y~9o,g[uW>e78ܗ{[gŹxO{ϸq}o_i5Nwdw{_5?i*ƛo0}Oyt$}r=7笇''gb˻g… WzXgK.}QO_)g_8+o/ڛǧ'Y8~uS,~|rsg_-OxK˯^>ޭﯛ]GY/Y ֟?"ߌmkrOa:㞳}[.zrkn0˧>donXk{=Sl]|r?.^|q-#{gnͳFr_'$\V|;$[O':ŧ.zz#38ŷW8;Sjĵ^7U}^.:*ߍ'#;={ 'pO={ 'pO={  ܿa%cI~ Mo#8]_ed_pl,V~㥽>|j:퓓Y$O?[0Ɖ م%mrֿz牝'a\{ܸc0]ij9‹g\vq.;wGՏo{W;YkWO.{ya[=Nj[Ξޟ;Wd[qn %__s[/Ól/^%V~9]]z[d:橖zԗS-Ǐs6?{sy9Gk+9w-!ooU'/gu.7OĩN},G9˖OU?gVokM/7)ެ9'΅ u~^G{t?.NNON}Wc9˅?ڰrwdr 0/oly{{ՃZa +yW|YV(*?L>UvrTW}GPsgqv~ת=gg˟+YT&>y~yή*&/w,~.ͣ6[a9\L0qaqONrԏeu[۹ǟ];ҟZq\''72'VzOH߾-]^_YCJ_{ _۰l纋?Εs[nŷkן^yb'`~ C\{@߇>{ǁ'XuN+O /'g||r/[oe宎KwcW8V:k=Wv9cVz }!_l}p3W ճodw9~؝[z/W~V~g^=-gxrg.xMHbE~&g&C5[]<]}^o\ٰ8Wsݳg/OK[Ļhq%e'_YK[okY7OrpW*Gnr[>?Wyj?Q|zZߩrf|}O`ىAу8R܀ƂX5Dg)_RqGqrU gr}غb+mZꜜ~ jkg|E9b$\z<]|zog9ͩ+SY?{˱=8e7c^sŜ?zξb-k LJ'uNqL-k yc:[lW=Ö?8ן/>{ŜN8IﳇrWUz?ggyWVUOߣ^Qܳ>_-?{:^>T[}npj}uW9g'GC#t>r9_uo|b>}ӯg1>ͦ_OpouH)?؛՟]8+ԛkȭur$HGX},Y=8y[?]g ϔ;ϳIg4wZ,'prғg~|큮6MKr W5)F'ɓQL$6Gk™[''}~~^IJIq񩻾guگƮpϸ,9HxOپ 8yUy]ϳ=8ϺM_; ]x$ظbX>"JrFؿ"ϹdwmWzN?gؼu#[_rY.WHŵ:n5=_mLثwro WGy?+o=`o>~PO=S-__X_a7޽o+_/Gs^_~=a*/}{b~V5-r+,քo>É%mSVds›kR/^f6|\Yo{qp3n甾Z~_Փ^TotY^>~s &g^~V?>NF]+WBU>)xLWvvvsV1_uRlk_^+m[[MKWK>uz1+!Fu=3='aww'/&C,)=/+7Gml}酔ǣoEś.N%l?{Elj#MǓ,[3g8~gdz1}YӝyÞa p!WҹNε.g?q8rg<mqom\ZkyG.o0tVCoWؕJu{+'s`\vb|6ʰjW9\ŷõ-/?r/כ~'&p' {O}oa==C8a<㑿􍥷f]ɰzG zm" 9aZꤋW? ׊'5i-ŮoLyJʯv/K%amS'yυZlV/NL38ô\SՐ[~^ #d;. /;}6_rgRO|icyh[滸|1yt/sևf,^~^uW=©<տo͒+|[,ikX81qSqn3/&+0Ig9k毷zoۼ/'/l_[|ꫳF}Y_Y_R,m{_pT$N6<#?\2ZwFx|ޮtw=\IH|~5G~}lvP4Vbdo}vs6\8q׆ɏ?Z0pd<+׉W^ųŗ/?갸ȝ6ӭQ/{7]s=֣\3}'|8%g G?ϥz3q:퍭~sÖ<{.nnU/|jVf~=&N`? {8o狭F{p!a|h/:]T7?>gVLN~yX͡c8`a}p7s\m9]Zκaγ3lg,Ҫn5۳mTϟʭFe ^\l̇cwUX)gbV#>W?]y WΞE`jc;'?,NpF6tsY9uWn._?fOu^Awo[.x"܍Z5fq^O:~\˵:S?գW_·oy|fV8^{lHd7/T=S=;Zq\:_(ւ%õ͠ޛ*5 NR|?K^q?&0ΑO}{ }^8V؍mltvͩX.ۋ IDATelҋU>vg,W+7ҿ{G8skoa.{b$>{{.YrO+{s5rsykG.ث/c\f/ 8`W'÷m?qUx+{鬕GX]_8q|z:k?e|j[_=&H|[oy꣕<7e{ܙ<Wr~U'7@_`G-o.WN~1?<\G|a}1:1䪇Uz#J9rO<+Y?ųg\Vcy=#7g鿲֫gSjxbد[OxOZnfG&:|UW|Wպy{&g7ϴz!G/Jl*v|>,./y?YS?=`k?”kUb3]?IuOJ⹊={1WuΥ*_UiOsd U^Wtz_%\,z+upWs:1}O2+yK'qI}8b܏paly䫸W7I9y|Vwb.~#_)7^U︊Yt2_Z`_κ|j-'?ʸ=O7\|+r\;~ $?=:|=e; 7)~JMdΘ 㚈fQb_O8Ml}J֧ίyubϾ&?t0=x%}ԯ)G3K>3>&q\Ů#7';bW=˿1x'ɿ33~ĵj91Od19鯬ͅZpGg{&[gx7⽴3g?1˿=ү9l}ƿ¿31+ ]mWԼk8'pmWL/]zjH֟_╳5ҫS̃Xv˓2ݟ9SҎj,O_K=/ib8I} _0< ?sŹr gʙ_l WomyrkOy!ζa_|q6rmQ' wǖWrNq\;˳zks|o=_ܝq3{ \\m|t9LKy.Xҟヿ]ﳦzr:+ o~>[I_ܕnbgom|6Y;d9[;; Xx5-dGbprWlՒ ~@=m}ȗ\Lv^2_86u6Nq-e ur|(Zjk+0}Fx߭?.gɷ8p拧\db:|!\>vt[8 oIl<#lDZ%1Zxz^~=ֿsd+M׏Zv9_,[;~vZŭt5}ct^99|HzXLΙy7V\>w7yˇ{WܬʕßW^{)\0a \>ܛGM|j},,.7\v6qKrZ W ߜ^U.$⏋._Ͱzhu} |{#.Y>g {Џ~#VkLzJ^>H} q: &o)W^r>'6~ }OY_ދ~p/$/bғqe^6YkpryƼ{~| wb|;wzſi'~_pm}%[l|gŊ,KG>:3gղ9Ow$#n|zf]v<ɕ_mz32Rv{]t|#|qq.wX'_ OrØmV,6ܺ'<Ͼw_ {k6 Uͧ[U濂M^8?˽} Οε'˥\~cS^?wp^ls]=+};c9֧9ٻY_z|_vS7/q&p8H|[j֟oco G_n~uF_q=ZKW#É+{yw:꫙K6V܍"UGG\zr[W#N$ZH/gs[Cܱ{_9_zs'pO={ 'pO={ 'pO={ LJ꿔v&远O쒋J/έWg wF+<|O,/Gr=[gmo8vNn-q}.G1aoQbd˟󦫙,9ՀW2|X)h~19+߮gzZknI񭗿?#{+ުzI9/\6bT_gVߕN*_kf-⚱O.okQL-<3L+] 8ٓү=ZoſU~EW\9Q;L닳}xͧCu 38=pttυ r[3Gť__fi_n\4 k{NvT]b{ݽc-NՆ&q.>}__։O/qԻgZ=߳ 2i|xç[prin>~}慁KVcoZeZN _sG?M7қuϭ,ZYW7…Q/\i%}̖_nJcVX.g?|2_ܶZr߂0dx~l85\ww܏jS=͖[0a']wpƥF\6ܞoopûH,nUo\/IܤZ{͇-Wx:}ֳ*b 3ggrO>Y,ȫ'{\f~オ}Ȼ=L|?w-wzpa{'YN-/X,-[]jdz+/yrM,l_([>b˛n){k,"}ƣNLy4p᪯Ozi^?΂sj}ba˃Ioѧ^^?xԖ ŝlI;:Iz~9/鯬G}evzClYvrGs/nkq>'q~udx¥q.0{:ZZ~v<=ILӷ|=yj>ks׫8&8[^p]u {BJ;x)~X|K?˶a83?YxWmo{x06xI~}Ot--v9qm|IKlRplI9I}K^/j-uթSaK~;)NLg .ióuj8kY&w~g[g}z_ rsW Q>aRNr‰LmLY'G6ۙ[ˉ\~ɰ{l[_gW|ǹ;3Zrw̾=_5jwm4?A8X58o^?s'r|g_͗sCév-yŦWk}qz=P}Sv|oqgW+ɶ;Upv5;ۢ_3{F8#sFdSya]aʇ>W?~ӻvgW u,N[=fͳgTzqY z:¶Z8'>$r8tӟK,rׇ5ogXǙ3mŧujg\q uoϘO~sN`W2lًs|v>z8:lUn~F}piZlqd1vj/x8⻋䥫;.>n~gnxt>dkxkKW8gz~{9'x]_x>}<0>ŊUGvxçrtĕ#\}G-3.vr#|%g~gH.Vf&ͭ]~!Bznsk9EO珫Zq/'S=w>{U^Hd7{Nj;_V}׼?֙ "8M%?Zͥͯ{}/rmz?/6i;ғz֧k/X=W+ذ&pޏ]ϫk/_>i9ů/xgt/{gk8ĒXi-bͨX~-'\Ǘl;uv[rޭ?.G2rk|u?w.7_5?K4ˤyWrvgqK/2/X+|0oU;֊?k+SjկjƝ]{.Oy!Su'pS,;O^vyθ~y)x)?YGr3߶ISƧG=qgoo[oϣ+ɷuV7dyW2GrO_<|'U/by A~ye }>>#ȮN?j+;3ޙwR?ɏVWpxE??~;vuHqvXs?k{$7G<X|_pR'}r~)/~[^q.qwdqYnُV};6?i%獙ut[@#U^a=k^wg|*qO:+a`WZo ؏Js_#'~:E~́YG#7+^LO_v,gMd7ڏY=>Ɵr}vXg?|nq;ٟYܟ]Zpz~hr{aˮ~s39\8갋]=27^l7Gr9>y18YLNznlrno\:(?*#?Q{>})^>)S: ZNb<[?ǿ>~eu gT9 'pO={ 'pO={ 'pO='p# AMߊ1_WB9 ~}YX]_vp矴y?L|[+]W#q̈&<;9kӯ&o+;\=ӧw3?mT[f?>yތo/;|smmdlwᅭyZW6 %v Wr>Xv'_~UZ˙޵t;s۹W5/89uzt'G=0vˡOFruS^bW lV|W~;g5⫷||al>99S~\-g>“8[5/g{^[娯NG►f%gkm#$ uޓNqַFv?~埵ôa/ie%:p l|{up`r q f|z]l)5qT/,k'g.' r-񿳼_q_r7c_~s$3$?֪۵;e}Fϳjv$Η܅r%aCU/s |]cgJgirkWSw-{!{"+W<ǟ}+SV295Z]n'b|{,b|WX8>텏4?- |Ӗd &`>=0bIXp||Nrcq~/݇?ΕzYa~|%.'ճ[X_O rۭ>o,xz+3K/e /Gh~in||I䧳pvЋ:l^߳-_\8Ն[خkX\.gf$<^Ŷ'_y'{Mί *ja/<8R0mrrzїCN~2g>ԯ彺?z8Yv;q@^aNlW?>p[^pg==kN;M˿ݿ}X>왚 IDATW8>G÷pӉ;sHoӵI[r:rW.G, մan\a;\/Η^?V/`ϾO{C$*n~Ǔ^|}_s]ͫwAWܸ䮫/jƱW/7;ϕ˜]-T<շ{fx9KW^vf/0l쑎S.;C/[#\Y%ޔyBv>|ͳ>\_z~ײ| ug,uN:XVv=*\{ϫ|'Wuqlj=z$a['yN{wp/ͨsȿv̯خzןouƽ?:r'#֜e?3{*jj,V_~: ^{S=CYG~v_ɷ|ΩXaK_JקzY8lT,qj%Dz6/uǿG:v3;_+ w_rsw?(s=l]x&W=߃bɶLoz,i[Onf6bNOſ׬X~k8S|F|cꀽk}amL7ca;f#N:.5w7tV6?ڞ]?X~>;sr峼$n:ƋS ζ['U`Uyk'Ѓ|f><й•s=UR[߯`ONy>_͇ϚɟaYg#yr? YW?=^OΫG9qg.?y>/U>zj#8*ϭq?]+wߏZ_Dxy~ygثޮb>sggzqdߍz8{&J}T3Lg=qدV+#739+"\RM_Ib6N7?}O?9ߵb?$P.O'Wl{z <`|$q}s;}'>}q;ߢX58{ :})<{8sƲ0{zڼx/ 'gjuj|U+Y>={g=8[.?O?ꑏqW3?~aV_\8{o½#=Q_W+n;W)\z:av%{OηةÝ}>>9N?l߁{y +}>q89:I9bc>xO_G=mίҝi>oe}5O'[+_Y:p~>J5^#}ュ^}:S* U15'4;@^Vl>}d!V1qyab_qngnd^ߟ l s/'o|83-93/[/]m{0o~x+K7c^sŗmzﺘ[- '6 G9-?Y,^19kw¶[8o7緗m\]NϯGY<LъyuUgqg:c|rɭǝ)nN>b;%yvu/tlb۞uxF/!gZ⌫]nYvɫ^x? 36i2/CwrH12 ?I_=ŅY,>K6/߳R,/}bWs@׿E?ź{ݟ[L\^zl2ث+꙽ϑxϚ|u%ϙt֍s|2ůlIsz[]bzq<~~8aqڰ+R/_\j<Xl9]rqS9o>s/7̉CL8Vڞv_oYf~rf9m/vΚ,>س^ַz~0PNv~3vђntߥHV}V=X}/LŝGn֕5VzX-|wW刑{~|'bq;)]U\ ' R[Ջ=L`=Pq{?PN⊃nWY`|؊%}Wd;,mg?W+gWyڭ0K}O>qIc<}XI[͉?bb[rޭW/6*uNgg쳇l5d n0:Cya_b/z։+f!\<> /Tc{3%/_9bq?g?[8ɰjs9´&} ﳾwN|ukW>t?J†Q?;3Ukg׏68IFw~1>9>[+~;}9ϷX:rZlu؏~ȏw5Ort3}Ł]O> s=OfoN/*/Ggz#pOͯϭ宎keglm+ͧ>dg9賜]i/6|v׿нu-O۵~:N|֌sm\ξ|Wxv>KluH^Nv8 xz] Wؤa#wc?1;//fX7}f뽸G=U͵7?]>ΰ鷃[SV{5<{kj\[|OoQg S}30OWV/W]Ofaӓ-=ГΝ^OξbzK=l;\9>d9}&u]N5mswo5/p|jӫ9㳜'}Uk9?i&dU |߾Wn=;ٯ|WV+fq>.Zae-;yW3t<8<ͺX5W_˵R8/6;]j+W򧷗Q]u d,ߛۋ<#ZP'Ga2ճf-vyz W7.ٲW/ |v+5 O`_1$Fʿ_1c'Ucw Gҙ<ѹ+ſ9+~U䨓+־_T.GM*W,UL;Wp\ſ‡ ΛN{[;=g<*ς W,,sԾmaW?RmO;W0r̊WraA>­q9˝nc'|?N{c|+\>6{N d}&z[l_xxt_={gϱ|{aF8<;ߙH!mT{[/rq^~srY˿{JfW?N~675xN͟\5wb['3xgxvѿ!69Ix#]: {?߹ ^ s{?kdof>P!?;!G˟?#Q}$-=YO8'r~p[#rsF\r!塛KMW?Nx7G1̏kd\|p큾:.Ro sFO;SMJ|~\a=|:IKuO./J֧ٓ{_/> ͤe>aW,ɗ*'=/.R]>w:=S%rtgUW5o kxMoeߙ6xqخu):jùawNa.Gz\|qY6_~5۪\ON߽>po'ޖT;ޓgꆫggKzɰ WNǓ~<;G5Ư'uO8I|'MßgZ;{9^zR#y Ugy} {ƕŪv/G:L+v; _raä u?յ=Sn=S%v>w ;o6NҷSߙo /mI=T(X]үpɷ{{9g 8lV|qGWLƯ~zڳ1ɯh%g?I _UcᮮS9'`~ xjvO_}pg˷Cҋ[ˏ7}?(apO\V';cj]Nv}\,;#sZ?|HQnN~xe|J=,zr]a6GL^NyP8ۋgKNNuWQ3o8s^5N_.Fw堫N-VI^So#Ϯϸ{`˭t+{I6}뇿|%;0g?F쬻\Nƾ/_l^7K9m?+[ )ylɯ3l~j+_߸!RGϮx䆻7u?Mva/ו-56dGz5f2_2ray#r'{1zIV{d1|b+r7HKqŪt'?sO~|vXNoœVg{`8z9ȟ.wG +ʝ{׷z}W;9÷Wb]=%\qs-ɳgL- |+n{<}#ypO+҇06b{<kSGpg^~> *Ǐ;c\{ۙ6>Ym6%"7%O={FS?+ӽ_p$nߞnEzOL_Ş|,*ܞNiﵨ;]m9 ;ٽy⁅>kdXf~6,^oG:^|&,GpUXs~vjŧﭽG<zjΞy~9s\Wv+ðDuq櫖]GCK=0^_GG;lWk󋭟/N2ȿ՗󬱸S{/?_y{ _\N?}GupVo{zW_:|ȫ~V{pٸA,ނ'qG_ȫFJcqI[aw}-1]8`^0ڤ;ə=99r;7=:Y57?5O@ _dIُ~3qҟӷo7Vq?osNi'w5tq8_+0+>gou)[uW||ŗ Wx~ۿ7+gϺx7k=}+Z`>O{l}yt 9aS{6juȋ3? }yaˡ؉Q#__ܫյķ"1.p&5[{kO༞Ϻ S^%v=JeF5=_ڻmnk8{T/\\..+vcô¥Ze K_ܴ^{7s&^cL`坟=jvwv|j&./|B΅ IDATV7!+kW'~jl?'8zş}'VWy%⧿O9\6:^:~˭xIa6w'꽡@9^gbglUD]{|bղ7'gH6/ ')|A9'mEܭ/nc,K|ٯ&Gg/T?ll4𕇣yO4Vg杯י}:sm_gW~ulWH'tN=i/mbaV/wxugbۛ8%W>ŗC_Ցs%aW3mypْKS4{v+=mtv= \>[lkۗǗ\ĚUuϾ˧ϧ9EN^YϹq1=Uwc{-:|W7LkͿ0++5  z(|1Ó8߬˗ƿ|cwv#F++ٺ]?)F[߷xUݳ\זdG/'pa7qw=5?k7/=}yIWl}^}x|qK@ŪU/=|~>/~zb_Y?Ź>9/5q^+:Nr^-'xH}?//{!xaq/0{)I3΄osfa[p|Dk[7/_3uoOCG}y,O_a7޾ZttGˣO2{i󗧎Y59k#V6\WOC<=OjސoXX];sopւ7 :ɭNxo_Mgk]n{L|{u_O\g93&:˽XO!8W/lzbk/1>|g /ot'~).bӝMǡ/O{gMZo8BmϞ GY~V=]<{j)o?'Km&c WD[ppsUosظͮ~jӸ,]~p;=拝gỒ3f}'o9=ߜڳw/ikY={p/G)X^oŬ`> vcj)_, +G;[FE/_OK}vq\ο,̆ggV+?^v1Y`&{衻4Ӈa6}W_C%><ʥV3,y#އU_>.uX3Xz⤼w@479⋧l훹}><{a}|݋}#gF͉MY;/L5;;|~ Cժ^gK{sQW9E[pz<*uo^_{>-g#oỷbb?4=__d7an|A]R3)ѿOK]}kz_ɥ8lN}WC{J|<㉋֏#\X}`p%fFvl8 'yzϤrÕZgaokNu5{}}{(棯joK{Uo̓w)X[{_ttf]̋[ۙ9/}\zկb}Iw]Nר>]p7<nafd?طՏ:8{^g}0L^9{g6Vav_;|gY]孿8'Nn;}VywICj9p/Ci>>޾3GCԬ)ٴup\]֯~tgǮ=N緞g6|h'wx,9b=ܝo7wՇ·X>$kp֧P[)NϿ}g85v&}N=/ kӝ1Lz1kؗ[\焏[-'~%w=;'M-_z0D^{oo9=O|~}|_g;,mUVz o'd4+lx Z/[<,q}|/GgZϺ~'T⏳8az󾽆Mo>s߉gw>p;?d۽˵vUWOWo^qW{؍ O+rrٝ;Ι]Nվz]WgY7W9gbW?L[Ls_ VmXb9^[[պ{~ŗڞt_gEi+f=-$NX~yG;=mlu?Lɣw=\qlwouVgz꫺o{1?l7={ 'pO={ 'pO={ ']wNw@J7eeݿ_>)mo7㯞'qׯW\>~j%ˑ8-%qf$xwk˿Rxbó=OW · cON<]M}rWqYg?ׯs0ngOv|}YCpY;j~/+'> 灓̮f Rkբv7w{}5:sf1/venbcW{98ΤOb겸;׽pth_Gn5d{/:c9Ήɉvu{6~Ӟ0<3WK6n]wO<_1j9{=W t)}_{щ}|vg랋c틥^)Vbl}3 -|Ɖ^LO;geN=%|l~Յ[Yq\6~mqK姓;KsK_ y#|X~<듧)O}eYd;C8ˁgG>'/[MO,^6vq,O}Uovʏ{4ڸl>q˳6L\tO/J;xgӻĩ/jճsqg߫zG}85]ݵ8V<jw.gώ|E_qvgWCξgۼ{OgMϚKO`V4~t`8}}`W]8H_N:LZy>ΞTg||H)ްq7~U^u$\z[oqšjg[^=;|}Ҟ-۽CVg'Wk?\g9gu㿒3r躕[>gu.l9c|8Io+Vڞ7rwˣj"t.ǟ?}²FgE^so~$u_سz ]ګ]|sν諞XG87 9Ov._g9ۊ3]tkli?Z|/n K~X6;}uګ,EU^=3,͟W40|;}hù}ũf/^:bW9;0'Y`Yy~ xHxt-/k q`Gp}(G=9?Ső>˦##?4?;_v{0GW~;cbUb[nE=eFg}6 SVv?qTjvX};9jxx:g6^z]3.n90~/sE3䇉|ʙS eū}ou>>ՄU~c~Jc=sf3';zə +.6Lzf1WY7Nu0_mz=UY%ɳ8l|q&_\V}E-|Ղ;iVjy+˵=UkXO7Dxq֟`N5˽]/.}VwrLsnqb;{䚒k3ȳ9^XN5Igx__6j_aªפ>m0|WzJ[3.doi+勑xr3ByŲo}O3'p3ysL`3L30ߚk_wb[݇WT垜LyO§WtOy'GOgm]Nlo{εyu_^FO'mY=7O/ ů0Wg}|glv/ў>޶?^xqUY3?+꾊5®Wݿb8?gaO{9oyr:=GVZWy.3y<=~s}9W5Y9W+߳?ŗo׆a_3U3;W YķӋ8v[|Wx5߫ ~=}~+n g쌇{?g.Kzq[/})ViMW_\i]g9{xq_ˆk9sew忒#gξ{l|'V[oo,NLjVݜ{O'ݞJKt]ypw>gz>]_tʇ'.拯komo{:y`_aΜa: gNOw{ ]S:󻗳گ8(~Ov5:Un3^<\:|Qy|Wb[/r5^/ծ |YgmUg{z3\<ۿʓK/[~tr=u7 Ow.pg=Y-1˵[-bO_xO;SK+=}ʳ:W3v&G U+Η~-vgLgL&e~eAڕ@+]}78kkU} C:=n'N8GkU^kuWRN<٨Wtο\0ޯ v}Źrh_No>_=槫_NZ,+6'giv4ν!\/ɵ =W~9:NV8|ynv~"8מ_p>䇳NOo}V>ݵg/,e[*Zab[ko5>LE7j6Ξ?lxaꁝ*Ͻxt?Gu6v~ٞ-}[ g:j!Q&vݗSL< +_3^\':8h~#>v5o}&p]\#]o}3}[ag|V%-V<ޫޓ>99Oyp#al}u/".Y^vy4*W#?N//$m_}"O'+{ֳ:a+w}pO}A>>h%^#8q;R'ٴpak1+Ԯ!3%:KX߿w~9jG;ϛd'WxIܧxķͥqɍ<>yC/Sɮ<,Y`&{!y==}a@vv5EZyr>HgL|z'[<=ιڛuUX[`7bs;Spa搽>/?~\D\'Oj9V8^^r\YW pozS썹~Yquo_nV#Ϯg8,&}Ac'>Sx{6j'._Sͩ/8/}uÄ'r,>aᚡ}W{>+{j.p?})\kޞ^\W">q~)=Q7;e9/}^+? W=>VΙ\밵[{7N W"qƵ8ٝG9+b=G׿jLY~$[raG~uΣVN?>k>;_,D%~wbً\n嫶yHfYͅ܍+w,V=xכ-n^yCo0$ymg[q˟gZ~uu[^}öۯ|yw9D=|g[)Y]:|jcbu6&_}ŗ}p=5?k7o=h}pn\ݳWW^O>)^a|}99L8|8}}D^~Jzͧ7>}jJο:Ώ]ngWq7~0b?9? YR_ˇ/́x޳q+_1 IDATgo|^b|Ws|q~>`>[[^ sΕ/˦/}:3w>ÿ1}[nOg;^>R)'77>Aj-/JXv5h Wtx{6W8 Hr{}[g,^n},on9.N8fR\z_@)/4}U&x\t|'O{T|{g/?H'>8|t+g 39kŷ~j`=/aGF{gpnwb,ߓHù|zc ^,i>ϊ:gqף3WM .w{7L6+J/p;qk۟\;otOï⯮k̦I#:tҾ'[?g|Y?S(w8`g֒Oʥm>qyop+]m\khlg?md9O_ ? C) C^@Zba`a݇_9$\5=Kgo C&>|a DVrIs_V/eOʥT\/8ի(OY檃>'|lRn|zG߾;W6䓟_nVGU:ӹ]/Uwyv:¬̓Mֲ'KrpO(%xuͲyYWK.8Nl_b}r!a.3$5T}Γ3e.^Oqt?'8S%^8{s½Kϔ扳-}ޢGg"LFsg5g%+)߾ҝē~_=^wpuJ:W[H]{N3F\G廯W~?z<>q#}#v\4_藿g吏'\=$h&/W0ۋ'uyi8U!'X?}b{Aw}i)Gbwy;UoikgNT<Τ7{o=wNFu,4 SG/Vfu&a3|þppS?,_=Z>Wγ^/W=u_>s\·ӂM_ׂ?\g>{Dյg3u86㼊飳Y;#ל_DO.~cz>>O>yqYOyO^}{yٷ`3{s~uW9!ܯ=ko[;δiQ'rq?ߞIG{(g+5/ MuO|gW\X7[6ڛK3zb7WU^>sNޟ}=>_>-L<:do;qV{{M}u_ž}Ho.?+δuݫ?,~zU[,ӎKg\_x}%W4FuEӞŸ(uڿ!^M׹upǣ>U>_'] 9-ߞ/L\t;/”Ίz֞QGr-u6خmX>n;كN>%}8~7hi5:IipO='j;kZÈ؏;`W &ݓq{e#Ul m}v<ַ㊟>MCV5_^w~6lYwqX8_>k%I¦Cgs,XG<+pg77xq,g\b]+Z/YNq,}ւ>\;A=W|͠X5a| yୄoE=xG9q}ÚE3JYַ٫u~]Kz|gi&8m^n5Cp[+g|3@z)/S^>3|vT:L$լ>9k>mGܮmm}͑:{M:k{p}շ8~W~xv}JYjU'rl[6g炳k9z|=z1WR?08vFs k7Ӟ0{'KU&܃[O>pzч}'qm-=\XJ>Xp}XCT>}-#YՓ{'_iϟ> R{K#9a͟T0{-Lٝ_NzY(a3/ś_VwNprk/jǝMm?t>}178IAWm?ͱ/YXb{78N OO']ZpY^}Z̻ͣOTuwpLuϞYr/i.8Ë'ag[a= _~78]Y` ~p|y'_axŚ{~g__.V8b9f§~z}' ]έT[{_{똸ZW]ˍ! tb6\Xj>3${g"s1S'扳Ӄ+`}p[3p''_ N33Mh#.ŷf>mYbCb=v=3<ڙv G|a궏[`P8ݻvuY;{w1,X{}ެ={~9;Xq|8fL,39՞rqśR8ԣ6\|`WSʧawlqظpG3Yn,3C:c/mľՂ-'L/ΣV_wއj/dFq8| [gMH_ ?Ii n]9mp{2ڋ~[c[[=+~;]>ly}[pwt|m~s;C8|-~{g-:tzwrv8JN|vӾl~V\ \,:;Z]'x˽߽/ptzJWGw^gaէݯa͟Jh[*2rF4)Fg~83{`'|u!r)֙Q>ծ_V?-g%?Wq>z ޜ΢h\[/iFbgiGΕl-scW\ל^{{gN.~H˗Mǟس}}V+ ߞ>=y O`a_rH·r內[[ U,ոg7,ygF9V'~gߵ)差[[+{%HÖ=X-]Pl}~EJCϾZW|kq團=W9|~z/Gl}k .w~pU{SڟuY{:h=g[}jr;kobsқ}Qiҋ]+3_}n3_w/{-w:OlWsO&ǧ܏ 'pO={ 'pO={ 'pOL?0;}מO[6Ͽ}_kŶoX\8{k?<{\$͗?_5t&qkίlWq)ٛїO={_QUW _AuF|~/ |煱7U ӂ#b pb޲^~XIyx8z֣oMT/׽~ GN?/"ggbkm_USvWjDwYPo.|+?W\Yuoή}58'VaV [O#[7G}=iQ8>K>~wI5W˷H{Cox}}{ݞ'[pM{VOK>w?up?,$^v}!V $l?[r.\yN_Hn +O̞p=d)kU/_6ݜko&ٗkO~Rmؤ<X>ó݇uU_'s·KNf}rl}l9돣i\_;\~60gjg5o]w9-W'w0cˍ ?;[8|{ߺ?[LO폏Ow>4_v8].\5v퓯=g[ p/ۗߘ_Nkb|ɻϚYn{=|>aÃC_/Nicoc>Ti}Ow=eӧଞ:NWLmw푏_Z}ip|y!kmrGhlx"?ı9C\=_:`ŗg}5hvϦw_Z\v-_gG>3k>y ;c:u<鍿_i rsn_lqisʷy'X|4|fkGssWb^uhՋ&|ًoОt|4K5훥'Rjr:9^?|voxx[ 2YWk:{x7;ܮ9>= ψb}q [{ry?c憋]lW^__N<0e?垜qGُ;/^8duٛ=W#x\0|WɷS6ӽs_nj%fL'L~8{g~SG{W= |?qquϖC\w{ Gx,3<]˿1լ>\᫩_ʏ?)#7r;i㋓SSnqoذ0<יﵩ6m,/yW~ddzwo9>{w}o!f[qk%f[\>֐c {μX̀NMԯ'r~>8x|1g7x ~h1B\癗 淗G['J|4z,sfmm|t"'׭_\jOǻ{}/o/z[L>5[tsv oy |Y.|p[K/[nao~}V[|{ٯ-^$\fz{R=Ɇ}So˙?y2>}f;ˋЧXzW4{>vRg2}U'=`N _]ފp~yor{䞼뜸K|{w?qx/h9s^NuwфNX,{Ҟo{t_;N~OV}|D}N]=+ƞG{zO`dqK_KΓo'~WG}OU||Żf7};G[߱k>^\˳Kk͵:_Tp4n [mvs'*_< >? '>֙NimX7rҸ0\s?8Ӿ3f[+N>T[ w/`*+?|$6q+x38)v|L_s>|sS=4zc|pK|Yjlѻ,{cO4؛ם>Ͻq=<_T[=A}`[U݊/l}k|pY>=Xx/v~/VM> /{b܇>ؗמNYv^.g|套/=°qe% M;a˯W{HtI- ?D;X?2OvV梷eYL}I籇 _pɑ?-OτnMql.۪/>#Zaށ?`,WC,f~_=PΦ=>ދa:~_~sqX=\g:W,sALrO7l '^QO&p]g>5اדX}u'е>;t]=}{swqs+:pթ'|x<޷s˯G>W9ѣחp0rW{ko_^8On}.k~qvg=UcKR[vWXӼ,WnM9;6xFl1ՌĚEz^~1?>`ny>?_^~>q73]igiq6O=y{so|q|=Q'`Ӽ~ ȃUn}@ Րau |a9}m=\nG~=Vq*Nҹ[}V>YN-S?v ]nX![sö]<Cwg=YMz{8jb3Lׯ _pyzlU~ds>R sUy;+.λ+v,~u5Ǒ/],;N CW}uzn&lqHǾ^gI-l _?)oϰpf7 -GԲw*'bWu=}!+Us~tG{ 'pO={ 'pO={ 'pO&p ۝4V7Qs/=N񷴻{7jpo:\oy0_;뿩Igt8i|b{rh af73QG]=E볾g'qek*R^/GXq X{M`dAM3|}ĿSK8{z~;*} pX ?|HCj~_iqT .gY&pՌﵨo *߃+lt]>>yÔGk-)?lz$=sa]4NҵqU__ŭ8xvv2;_'[6Giqoş/j/%ތ-s>]. 4{3Ӄ}\p<;3{9ݿsZ|ڰׇG'qzMkz+z>o-zώ [} s⯖X4L97/3WGkmvՊ:p7mGpKag=TskH{{ON_S~ пpa\{&;@+>T}۫_eO|ZyZ[A4/ai=N\}{y-uv={a<[}]}vlVo9f^ >rŊS1)ocj%q"l~|qޟW9[S>X8a[zf>jw<֗w/V~q\X,wpX]O&Cx퉟Mvpi''/p/A0/;{o<ˎ:~97=3מg_N><8@~rWb_I3F]6|Ε)/[hGpWb$0ekqc~klı,O<ܰ4&a]ϰW=l:Z1;κzl87^~+{b-?ϵ>zmi1{5%mݰtqk8jV ?,-'_+ڴ͇#~k.OŎ3rOogÕGr_LzU%i\p8{~zyd_lv铏}=Ϝ?L֛/<t?4~iO a˱'qWU%}tGoa _{~?-D`g/"liuȧ{ )TO WO,=?n[9|lyoͤY򟵯z׌䪱+0jK<[1D޻8jo& Ɏ<{7롳w=Qn'?YNy[NΩ,ne"zߞ[C_ݹ˯kGN(zgLua Lyn{MٽT{;e4rL[Zϟ-UMzyn{l} K亟WN#g{ܿWgQjۜT/k [N3?s=_^N7?blkWSlח0?[6|v<0Φwƫ\f+wkۯ C~CaE0||rus&쭋w>yn0m_qtƝg۫X >:sI=Y{g}Eivs/x'~ϸ7X1tbͰV{ T3;l|g~+,O}[g/_Z>kfqJzo_Y~<'oi~'Cw;>^< y>c٫[}8_]|uu=nu| G¼+Q9<=kf[U3^xu_]6Jqث>-ͤk{_k969y^^o87*[S^j&!av_3]tgyşUY=W_ }\vg#3ZA._űPG$[gwt:iuƷ^79y/U^*~ԮV#yV?}0o;ck31^{O&p&yV+] }Kr#Ìz}կW:яUlC<6zk>~@_I==ÈxeGrĹ(P 6C[qbů|^ϟi]zCVoYg^~91-֞&Wy,#靗??)>;l\xyH_aOγ>}oH'_3t3GjX?:g9{>zo}U۞wa/TK} sL{Ukמnggom.gW\N{x~WgCa|גߞNNF5>#uiwv~:/btjo}^ݱ{55ɛ線@>W=Oנ 'Ƕ>Hp^TzoX= \j߯}'VAom /==Zfү=Ul ^5YxW |yjfjZ^//q~yxrC] kzX#%!7~s#Mg5gy4CFפgM9pjaT3=?LI,~D{_or3S4lv\˃#3ڙǽ\,7l_=wBq{փ~`q_nyS¤?.-M5$)ݫw|? gU=~~Y~6lH빭V is_S+5:#:R?;V(v&{_i>_5վޝZ_g/&}-^ \>pl+Űh>Շߺ`:#_׼}Ѥ^osFOco68cZV7|a|{v|-81ekg-x>noV\qu$|V}ڰ0q+0/oqqg-䷯%?)bpW\ +i]'a;γviܝRr3Qk9O'3Yo{C8~!!x"|OK,}lj{>)ᳶ3YNls1vi3zRÇV_:Wx=>,g8٘~}|soyFj[9Iuut~}i~M=7Gpb]? C\#y妫C՗Nžnћ우wmoaoΛ混+QLWԊӾ{ݞ-n{$޵q<N-k#oO38ʏZlĽ˂#E=l3LN?\u;s0_Lv8X=-f% *|J=)7~9닏y{?9;k5᪽9Yh'[~ tUv~q/-A˵_'os#<~%_{߷q.}5:ޛE?#ūMu ߞ8S=Σio)_B_^psgRG=~|:,}rOa ], sXEK㈇o8^eaO>[׾~z^9u 3:g?EͶpޕrw9מo3uvɗR²ˮ3?N:.{Hu/ ir]uoqw߲3.,ܾ\W[]ު|zѧs7L\O⨷'v=?kIu~ Po}?=_8a!>i}Y|p>@[t?_^p1:N>oO`'?_R_l/w&вս/EQdV ĉ`yDY 5\Fy+&1q8 yxѠygDIDDAE}߯>}9 ^뽿=vUwWWWWW7qHYL:%uWsW>U?Ye E 2E'^^^̬?͐:`:5CG 6j|EP5kǸ#Sڰ.d$:>I!nsϜx{~9Z|mq]̱iOYӷܸU~α1w0OoαgOK8هyI\cᙧ#&\Ķog3\,u9&-{gՉO~uY mx̍6k7CtbQ?at~7xqv x7!+9_3/0xE^7Hĩzr:$O \8qb*+8D-qy>ؘF<{bcCǰ^NsmbY?9o'u <~<@f;vz|%8/<G\/z1nӗ}E137:oe~͉7Ԙ5e~?99ƃ; :]W&F̉^cgNM˚!?Gꕍ[ɺq%8xˁXq-$jG/]-6IlbO_䜋ACxU߬S!u(p_Bk$_8z8ۣWlkz\6eӗys}ѳu}_Z?OtrOXzFg쿼N׏}IƪOn cԐSlJIAXp~e)_D$@xbs0VCƫl<2ؘ{ }9tgvBgNesKu-6|ܜb!oa9^?dN#d/)^u@['աg7YX=ܵ~a5DU\172.DS'fk `CfG,DX~|];1ƢC6Vc+wZ!cggOgmOy:\b9ѓԁb΋o7b|J?*%NH|1Y[sıw8cYkũ:u/fYߤ_6Fv{Zgk=fKֆWH9k\:gUږo kfuk%0e>UjZh~~S7?z`23q3wiK/E>;osvzhwKuC}SgW]uWN4A;>DҔWŵ____8{(_wrNl3f˫ĘmΓ{6uϑsRs/:gif,x9<5&|i7+K]|xʉgo,vCk.k[X-ko߸:v/: Nƣ'CU众:.Pl͙<߻z畓ʙz΍Vji`:5sq7jjͻ.;+/f;x`wܥ{3}o~pbȇDW2U<{~^ܡ|` mb9Cunlʫ3yeup̡N6dl/ܜ:vQ70~C~ؒ/JYK֔JsOSӁr5$: 4'}Ѳ. IDAT@?`<`jePc@9d??[Ċɇ*cF<`Hr ϟW_}uO\~ɭ,bb9n~OSo=!_c{X:֤]eӆ}oa=v𴓏:cdL.<.X~['˱Iĺlbǜ6z'CWt }_qˍYj}eĩێZ-ep <&6dz-1ƣ'yRc[^1?K%XxƚKL"/U5~Mٹ2&eaHĦ,ן>]e>z-kB12.>k.ssOrM>kjr,ċ W{|6v?"۞z~U|ILmWy NLUN,:.W\-`q`|8or arhzXO։k&|SA|q'i;џSN?dsv>S޹yG.1?:qh3K;2P?춨=V1]3j.}ɕ9sʉ~HnnY7>{knp%t=Ǖ96jYLsޑ87!Y_8xY |bz:w{7>`_$>y=Q ccϼ__FŰfTW1ؗ*GL\1ԁv`:aNv j_?_s7!V !l~p_28o`(>upp|B<gmyy3 ;~Lkδ/fNj|!3}ҟ9yh93A!wP.M;9b!~;5fڲ؈I>Y'ǁ6yC_3[jP3UC>D}HM^?prfz-j|&=_}Q 9xs9}DU_!~pIJVSs]vt_Lٺ#5K\Y~|_rݾJsPvLU]gnnӟA.Ov߼]yn8:#!Ⱥ؜{ҝ8ԓ"V|$smz[w;ν鴣o{c (/tR~uwn'fQ׉Z\"Glqpr͉Ҟ8s &/2mD=Yrf͕dε"皨~Rzdyf.}ӆC^kK=r7FtĻ?C,dJzSO;X~kGv IS׎=}͓>%U\lCAKi>pg>dĀ?~//}9}#'6z@^cЃo-̉K~m%&z0Ӟ9||9_sY+\uMԁt~:9ZuX^|}}EY4fX/9M? c Xrƒ5 7 q^Tiod|pԑ26 v\«Lb m>C~M;}7coQk|P6krϹ+:㯞AQƹVk1/qMrp*֐n^\cs2~tC1g^c򹥌NGh8P_2<K}}Pǀrr^=B6'|2`! G_9/u'sNnss^{j'ܟ|뭻ow_RWRZmC:f֋oƤ: UB7k!~m^gR_m)y,ڳ~e9rt1O 6@/;s>ۃsl>r֔+3jV?XcG,\Y}{En֔kGy&OKZqN:'7v0S/ۆwd.c펟sb=:`^/ǏS,mYׄa`&扩=Ī'Nv{5O?Ӂ /p[]mhۻxxB#[㶅YZ9Bg] Lc?kJڬ|_l3:Y/2bNl\nnWJHv~zե9ɛ8m{\{}l4\̬]>bZ\#a1#_b`XSGlo&}%K#t֍=D}zG˚̓_IbU2~ƪ kAnM⃵xk#eKg=A6xڑY8HbC|AO=@ <e<1"0hz^׈.k?x pc'61rkf>m>鋜u>ya.sѬɭzcs_t}p2vV֞[- &^ou'xbguVG={=sg<)3}0Mo;Q??=Eԧ>{k_mph }\?_؝N漐38Hbb.zc o&~FN\0&1 žLzs ƃ͛- D:c.i'^vȅXGI eXa]xc~Øe1^} gud/юL?ϼ{|hKZ+6kü1 5#յGߺ:=ssgykbɱ\n u 3 8q?7uevtpMY}D =ןA,2\ s:8o9Gvh!z>Xd,J'G66U'v&@8|;vֽف׽{31o|?җ8I'?~Gc1~9)W\PO=kc\ zmbL|t~Ct&~w}WwSI\j)j!O_`^$kwusL|qu'_4.|'񡈃52 ćM&_`7>!u+!}s# 98}oxw[::/(RV8D籑ı/| 3LYsƯL'csN 519 @[ _18牜880ȖN0\/%&6p]#sj%p]~dyU~\XFF%_k6I uW=x8">>n7th32ڈ8k!Ϻ%NR~h<|h:Ī3gr{g^l/Xؘ%FrbNlkp.>c.㉳.77zkg㱥Y5 딃%ej:YۖC36tȓnrÏ$x=D,#X{tZclnr>pk=41Q6\on1sO=:=X{aO.9O4u`Cw` i¿t~뷺8|;38cYkϛhd%\zAyvmp?bE _}PoFE͔>7 FC^޼!k~HVCR캈?zrQ+u(+~(sHLy~ S%zwx kGݧ2V[r{%^d}Z3'rصFbG]/o{̓Ƒشr>C}m.X-<Yԣs'gFn?7{@qƺFbWb֟Z $Zz8uxC7vl֤8'^!Z qb \)S2rNBvn>ۏK2VLd}3Թb6Ą}91%: qu] 3W'0rP'>5< 1\zbhw_<|{ӝzjkV;0I`~M}sx~w\1Fl_m݆lgk qQ+=oUvuE<6pM lAFQ}?"jg,2TNU|n:ebA Xׁ%b͍9v8/QFL̿&bML' Cr rt9GY5%:b$vA\3׿髝. ;ׇnOY+_`B®N\ُ!diO{e{x y]OXL'W7q`yv-DzO{ 17_?Op߽{[=IO?WE^`}a7CB,Z ]P7kfCo"Q[:8MH_8:`?džށo\p|ü6xpj1.z_d8rgn Zsuu"KO sםn\;~˺:aoקcnɱg>kV}jk85$ƨk3牉5Hyv.nmY\>'>ǁo~\lq'o3L/1r?mܯsoI?iSZ9B&CBM9|cO]ǔ&G/<"n?ۢ}6cN>n߃яvyӺ#'qD7|O=Ofx@wzn{_Mݾw.lݺZvdo=TG>aOWϢ[,\8vN֣m^n}.k u Oı>0:mcݷm n#1W*ST,s775I֙Gr!8z>{Α:18y'w)sW˼ҦԚ=93s5\Ħsc< 9>h{[uT8)6Gn8𔱻F䉦v־[6wWz|8'v|h}Qwy^}ԁSL:0u`zvy~=a;@vu<1鸸מUWl֮̇;ݥ]0szv:QWn1~jOnpڑ[XuC` H|Og8w;<1{`sq.)3uVqN3`@K $0 ek:e\p[?ss~tƸ~1#C:S<$=9?G\ -s<1щc>br{;\Cs3NC4gR7/5g>S_?om g+6z}K\-E>oKY^su ~yI'&dӈ{ݷ} IDAT~nC1Cv`apIʙS\WBܧ%R_1O9"$k,^G!kÆ?^b֮_{;ۤK+w{v~=Dϻw}swj7^~ܥ?YM(v[/6oWg=[+1\3l_~5]amO<+ھnc쯺:xbX懋.9ܵ#ö6~k >i?L5^õ\ژz zʽƒ:9s.W:rXxRS?c]v#>iX|HZ9OL,/1oܐ-u,/q蓈Agú}nfR2⦯󹄽J,>b“__ޜbvFLAY֒1E{zK3ԁ)c:9^;cWviwnW݌]>}}E r7lC% 2d}ԟoc8P.iA|1P#K&fnz9ى}7/8/p am GfNӆǚӵ&}`!w CGg -Q)k@65N87s⒲WWyoő[uNl#u0~+qxyb!1AvƆl-6/aocNCk~5_:'}_362>|L/v[8mk^Y<ɭ >&NS|i&G26[!^AfT]ʆ]ktgMՇvoȝu+Xej˹G3kOaL4u`Cu`:a:;vzիֱe/jyk?iWT:UC-q'ϭXNˋ,RdLr z>Lz Zxe7/:?>`f)$|?%'=XC`X?Wvqؐ'S3dIkc <6'H_bё=9vijf1!{]Xpgؒ 6kG[?rzugzXr3=cn-Zȁ>kVwhk:lnp%\y99!C^k +selڑ[/9ı>YXY6t~#W/̱Ykb#3 Z%>WW8}_ܽ]g?{s=wQ7q \pclU@+>͜9f"6|M=}uǁ[2>?#Ɯ88c@8oyKwQGu_Go}ӛ˿Wt۵_֎x׻v{䓻ڭo6nLjН w)ݮK|{ݶ9+B3|gTd:Ծ٫|7>a=P=c=6kQrܲ}K_Z=]xZm`72A?0uag;Sd` Yǁ~@ ~ƪ'77uȩ'^Իo~w?ޢd<2JƪkQ/\=9%/}>)xY?~Yq1WGfexmQ\CdK䯸֚%F|r9sdmء$"a=z\OGgrt 9!_=k%<•Q&y]/6kVɵT|,|ZoM4u`Cu`ڻ6Tg'GvuWFo?wE~V% M`8s9oԼbya{^^܍K2& v̳'&obƮ}Sqc׭F/Q?P d^u5NW2w-n%u[,{ Ϙ~ gR;ְCJOX}*\<{)<9ܒ("?ah/JXN88/ǁ/hWID480myh,﷫!'O}7qOկtnQf ǦiWw]N:~G63/ilG?vmv[c`N_pv9uVwv[pkڶbOvh~նwkD:reU>@7zğΞ>~ p}haeo۶>-6 urjNs\P]O.756g տssjj_i"oG;u7D~svgC/co/wXXz8ڭiNدf7'vK'w]힖yC[ټ%/Xv]vYo@kSiG~*-o\W0Opg zQoSs|7CtRꒋ7&NPSOR 7bO>rgpޒ "3S;zXԮplڗe̐<_q|*z'mWYSKMnKYr'nzqt'~cw)Θ~)YؚsȾom꜏ac.}'^b[)܉Grdp\yS<=a:+̇hV>1p}~gO9PpDurXF8[%>җ{R (9qpD߮M{&v!J̍ٯ{]vns?y}lxLCط_>{R/Q5n ǹ]5\!Ov< zY59\} w;dOjQ+dm˜,ɐ3nke>m?tW/lGyz^nM,ٸS,YyCyķC>U'8Cr|60Fҹy#ƪ7C]Vs͋~ck5P68\x3V^wMˍ˼ֳ\ilŝg>)es,79uc?ǁ_A̧@0цt~Cuv½^h?q#f*2/z[Wc*C/czԣe/}KRȣ+kC\8֘:䚙7ILtI ;u:8eNȋssნg^by%s3/:|S953Nr5fZ~A= {\G/2d^xs ,kK191W&n sbY G扏,eNu'sd/O:#ϫc[(L^shsk3<`Ʀ:91w#bg\'ZYNfǁyLq}=r@v6}#u? \2}H̉Ldc>Ù <ɊM2ux5u=ûKx3}ڟkWɟO'k_1ܲ]9Aswm=58ۤ'~ݰW;!euG\ {hjt`@0۔^z:HȗnnmlqVT7 &/0RNj~}E\_=y7 7b;:xW s Ă\ā> oQy_&.WsE_ An=X6{N, M71g.u,zѧ n+uRov欑 ^(bgjKL6piOjY>Y Xb 1Jn+db1zPU/>ƻsƨmF.x>!O:VeqƮpǩ^^}WWLq񪿸LjǘϘ| _<`Bu}țړϲ?rĨ25kbTi>u`Cu`:a:;WITc=۪l(Wڕ1=y!sE:x1;o reNsC+qNCG'~U2/zdGG*S+o?ؾJ'cuȩ8'};HL_uȳx"?Ck_6>>'D'\ejn]/sba3N=yݡyb~^ >dkksЯN<뒘=G=v-smK=\J;H |slne:sO|u;/e%vۭ=|<=1d^}׃:cbCtSp"`Nmpjs' \cc88,1?2LqmXn'zVm};/ٱOm/mjlq--M+-[Wrro.q}̓s!v8Yov;\\Yvi;;_ds{KϩgC8= H2>9ԙ䶳Q D>rS5q WE\p}AOq 2skkpnC!3ve#6cS2q'O[:9 >ۺ6qy^ȹ}zPO0~ ' IDATWSFj-ƈ8s6k:̫nS,CFgt &. C{pnz|%oNc!S CBFϠbsw"ڒkÓ=v0\љXO_kR3$t׺c+G߉OPXYLS1\5^'7G<{NguV}W}KՐM@9_ԗʡPGzèqCR4VΛ7ٔoh66PVoo;5 bSP\{)%5 Q]NPtΣ}ޚgޘ'#-7sr|Œgү^f۫esw514&p3Aq |#{ۇ>{k.׮!חi[_^akOyT<1뜴aڽۗ#W/Ry׻=snkK7ݴ';vvLCj~Wow׻v;tPGW;[?9u`L'4@ʞÃHo};\{{׫U<'_Wc[<9;=)OYǞڱTP/0&G/>r1^9Y|K;W!{"^3'x`apysv/*˝[5Sm/ A꥗9fꚕ[r_p6RǸC8c:幏Gn ṷel=5Wֳ.>P4˦Ḛm%?QW-zN+'|{xѾ4%cVRlV,[ahn|-3F9/{5 LY߆sUcO,Oy̕cAr)q­C|с1S7ΐRzSN0]*;T Rګmh^g?c,̱I?u`%Xs/ LQxf *SN9>TN;~mOԧ5`;_(bu 't'qxmo[R׽#8{+xҗ'ڊjsW ܾd՟7y†^{W狼;qr_{l W~nmz%d~^ɗ$C`u3A|]q,'sW=Ÿ=Aòo wkGf?S?5 rm>OނW<,bKQ>|&`3g["F8z8zCG¾DF_ ispe-cvdȺs ؑ!6sR/Vƛuc}p<*}זi9X[ vJb#UʚӖxtsmMs}0~>:_LkܼaCN)IYcc=v@خx/<'=m8x+N;{TM ;nlhX?Fmٞ/O+)#s^ uq{6upl Qz|]3V?bHLK!=:h\Gs8'znvڶ[ljqb+5?k>Blqmul]{ⷅtoھO}ۿ}'>ѝnC;.k]I]F<6L }UbϚ2]}N55 !SOn#tYj=؇>9$H2\;&lCs6"9otQobkfC]Sr1RG>s3F b=9|pש!^GjN9cW|/\4suG_N^S tPѬy2z3_}>HĚ ЯɜXFڬgXYʍ]I9f|"gMu۹\}rJe<2v(kbn^s6%9cNn0҆/XsCdrwiv& U{:|~tyv}o~O|~oHŐw{t0B9X8Pys㌑M o3LzA<4NWK_ Nb?@ ]wݵI'wa~YS25\>|zLn?|zF]$!C9ƲX+۝kc-#9C'Xd qȬG]PApe]X#: U'L`2O?1ש.d-s\ۊlK D.H| Xtp#Z!:@5?}H_l1aOL5s>72\'7&_Y 8+>}x79rWOlVCű_dy6i.N!/#I9k]cξ`۲|h91>=ûSڟ/vuIznusm^npM*znuy_Em; ͗7g=m_]k5o.9]ܳ{7nCvK?]su;~eu]$buu~z;!u~aM`Y/ys^_SKRz/~۞+)g:7W}[uKc}4^LlIe?1~QzN"S#H=XdЉv|3׊;¹8+9T6h'΁REN։z%uC:jFy1ȇb:fEجlo|E6GcnKgMHL{ă i@078?}2:q5 Uu&>iS7Ձ#Bpnrx_l)mڟIwynqɟާ~ߒoFsWh}cIۻ+z'\je^Tչ:7n2~p01fA;=o*F멭zE <^RŁx`S_xprpƊ#7#9R4k]r0RNB=iC/PukC\}^>cs_n?bԛ9|V+X.EV^nr![xr1 Gd/K=pP87֯?S?εu8׹1έUO.:sy *1ꪏz|*-kyeʗcس|&ԁt~5qP%~p Rڳ+>M:0u`ԁS0Kܛ~h'_Ю؞yO_ۙ.w=9]1k/-~N}I6mE/O߼V77ۅ[%/m8jWpi-m9i6k?;/ NnW{IgvDSL:0u`ԁR79ep7\UR}&oՁ3# * ?F\n9C R=xyq:7>Ă3'`SszX܊ȫ:ֳUx;ܞyφ?rP'W野mJ 9~'rpg (eƑu/~I$&93/6qpYFA$.k6dslNt=5%ldž7Җ>b& rkcNM ć?{b&kqSpuě+eW7!1yCg% ?0r^r8"':nuC":XC]Gւ` ~%zxX?\꓾gozsglD7?{wl_zu3b2A ,D%h)Tji9⫅ %Zh*/*9 I:C~7x<ᬪֳ>{vmmo{xm{oss ;{4;g"A<59G#0S<>G?4mRU7oZ7_K9ܽn?}ZZu>S>p|U镯<ܳ^s߼^I{WYCS/z7^zwI7uĻ\ŒS>m)o;o :T=oqs(\r'](Qd}9t0G_tl3W 5r>(_=h?bFtrW׮5M9,<{k6rbn.v\kOLhs^bD_M[G~"Cǯ} On\lQtx_syP<]~]-Z<0trAd ^s~ɧQ'W3'o~5 7?sû 5\-IS3?so?]=c>;0N Љr>Zhx'/xw㢍&OƞL߉Z]8%11åNIqu8~K^C썒x7>z?ҋĨŵ޶s}_~89S.g1mcuXzc{e'l#WdGc od&6dķǯX|_b/*_84ÂkɧxBfg}a 7YY{[GS7=[꘹/a7>䉕-^Mx~c|U\#qOWeV#w}1eֲZN7s>+G>O7:5eH,W$gсVk?1og|]2߫Qxuq-:]茩sށí'/'۟xzX7ZPE7oZewk;V=w_0zho_7/[t^^gtNJk[+YWq>u;Z=f-k]xx-?\^Զ8N\gt]{zŎCUb>Nqhl?h{ /]7l~d:i_04sO_E~awִlOG>lٚwOʇܘ>0Oκsm7mO8v!x'TЗ|ŕSL.bwf7&wbawAo5lryߍCpoJ~Y`ZO\y u 7Zj0/cwYg`[aSu‡-Ƙ>e2o9]<|iΧ,[GW5}˿M>*ևSN> q',|ǟ6ܯ-8g!s|W=|mSz1aߚ£+\Gcq{C8 =3|9xܗh;MhONw[,\T=Q rO|2נv}ۚpr*)}Az O}tl3|nOX&)O|cсG,܁'Iɵ, '88Lyb'-N91nNF5$:/ɑĖ̏*GuqRg.S?n/4_H>^c35|?bć)EVI: -Ou Fb)?>n]C5[`[Q}0 IDAT]|lZ|Ҝ0O.<όak~6c[s=QGkNNX~J.Wqk/4o;>~~WPF_-?xy3'\IC/>7j/+<>9v5dMmI6:joNWl}VOdbUst'g~Z ;W~Gb//98WOz4w\Ols a#c~޹^Uju-uc=zݴ/8k]uwhڪu_7xK7aߴb;+ízn?moxy?}G7^}W޾~qpxsۻ#o\uE=czlcS\ y?׽1|;on0&Oar~ӷ/ՅX0~g}ښ ӯXsS$~tlb5'}>.YtbӶnzGb1scc7q*WaڷgsԄ=kV8FXS7}q~jWZGԓE|6:8aO҉O?]rc§q8|fpU{M=rkd(誇'͜T<]o|{/;ȕ29׹Ot8u;ߗϘ-E|q\S'Sr¨l9:3yrkyzOjjݭx|ȓviovt3ܗճT|xg]bF;L]SOyb%ׯg?ūZxs}U̎6g;'_6ʅ7M<^j#733Gzzv~5]g=囼M?m?%O]>zwnlnmh_cSr{ONL e8٦~ǻh.qDŽO_d?g_3n߱{+knYVvdym8}jǸz-Eƴ<1s[my|9ūj8:5?1ost]flrg>F=O_+ͫO716O:p7coTn}}jm٪~z c^} ./#3>c/L=)W"L;Q\~xj+;z}k}Uw9GV:X®7aξt;O|˿wW}'~ۿ=7w+^V*}s|wm_^o߷W[YpUOYﰿýOnY=zz:uwϺZ_|xwlYݵǠzwzYڣӺs?lf#z M!YY?b][+=0OG&勋W UO;>V|NO3z8ھ.O 7HOw*[u;(ݾư3d8.Bb&y9V}⺶b.|-Wl Hd8]cM]6u9gx:paxu<:i)3mcȶ1N7'jI133.*2As>?t0wq+yycatQp 5YyUaxbbç+xyojTWTqv#lٓG;0%>dMct'%7m.//>>'埮c>qm`ńVSXV%5+&oDn_ƫ>Ldo#o<ٚO֚gӇ]m|mN”yo[._傅>.`7_a+]asr1{p#r}a5bqJJ'd0gI۶}٧_b ń+| $k@}?3cΩM̌.\lkso/o;ެzHuyAǛ^eu cZP{~?<{ fsg؛7zz'oy>7-Vko{꺱ny/n߿|ы֋r3=8z  8wᘝ6|} zf0rO)y%:P1tƇtk:f)9x>wΞmT]On; w5<~q$O=q/g3~8}T=3G%W+/>*[U kЩW};F۝!>b>{<~J?ܰg{lkZ'[;יs6>?݌7{ ;滎Gwso?=c?!;- tНe')ÅI+<͓:7味x'K?*&';C&q-} w"XnuNv#6_dmFs9nǰ0O[7}ѐgp<]c\F}KFdn>[/ ~}v+7SY[TbSX>^ml| ɭ5҇'n܉?Ƒu-[8xےoO?>mY3=|[sF9gb 7{/T;7=]gۈܺ8V zf"a?[='QةO.ܨ˟nL\9'cl;ڷ1!ĩnrXӯZj7WNsdo.~RzFs>xrs>sg/6i}|QX{'g~'_lι=S[}OH>=c";~2ڇ k-Yb;_k0ds뛾Ï'埿nߵn{Gwi]77_vx?_w,޾ޅӖM+׋ 7k_k~i?踾ŭ큅?{_{>)XֹՋuFkFdmN׶oO×Mo&&N|]r6=>h_;k)CZJOk%jEuѩz0Z,>\⊙#[ͫo_dSSC߲Aֻ ?Cg߻nquູt~67ӯqoY7\7;>>Y>wݼz>#YtǴ-?O߻n{5o!zfvǏ1:Iw=_-Wߩ5;\m_cşE?jUwSme\֩qJw <"}~{}KzpyNvZ^?kyZOlst0q.;]f C 9]9_ݷ7?_dN>~~OczOKo_/eziأ)5mtM_r?Zw*&['~k>s\cu^z<̝è8e>si.Zs㚧<8<1?u<}˷yۏqr9dհ\(fb)Oѩ1uww'O׼6i⥟8Ĝɓ]pfL=c71/۴''g|P9?u>k=׽?O^n߶nzG彖k7-us]5bvC8=sxk_{x/%óힴweucݼ8s#i}wo_o^zտ:|z?y-LtG٣ipÙ̖n˱^aw.p<]Wo\\<֣t⧼Uv ]cOmWgӏ|-yN徚gV~b3n{[yǝ{ W5im~ I>[ySL׶~|knگU8>F,;/;ѫoI;(}m}ҠPg &a'Xv}ăV6=qӏ\Z(\G2쨘Y[f>[-tS~8Nsvr/;s}o[ͻ}bQä3[r|'Fmw&ͧln$f޼\|mgǭ15sǓwoO~q1{4e~|xr=n~0ӫ(ckv2'2>\<QAzѬ6]]lyr6Isg]S?eF\m;ab/Δw܉'_l뮙T߾Jt';f/Y^>]s?t1),I0>3'{ |DGa~CasoK \7oZeŸYC[7:zݬtSMoZ^+¼e}`Xu޶nߵr޼ꝗ?grxhaݱn{_O-֩v2=$.'t<516 ߠ"=k2k_N,Mu'jkF9;&>5Y?+gk^r ϴMt}T[s֓OaM+gk CFznܾCF~x5Ղs>L?MW;cǷ:$>^||n?r5{WkWdq0]f?5Qc>ׯ6xx\y.^k:*#=9mL~i'}2O߫N߳|v'^]o܁'aj䍹t84l Nl9 F4%މM-x#|] baZItlv2O_}䆛o]?49>{v?"? tY?d=c\mGpSK,nM&֚eQAQ8$j s^Y~rIz141=kbWbocnm'O\mo9۸~Oѩ?;{$ְė|Qb:[ӎQUԩ{}mP˔:To3N i^.rÎZSzܜ}r1NQl(ǥd)b…3esƕ#>ovXM_>jaN~8C̞Ǧ1ᏰÇWZGk'$1s2?k{bzb;{}󙃭5[ϧnwOf]ږF۷a;l>}S~k0ZWZg.s#Hߜ}e|)y5L?E~[> n˫}?۶H֏I^ُj˅yo4:T|:^u [pnOfĎp9}lMg|:>&fۮ&5 1[n=ӛO^t骳ku/g1t}q_aZ\ߎY<3WkUn>Î5œ9ƤָY>wc3ΓNbdShu t:ANpSIgP-Iw*^ Ig]au1~x͓h| \ dqnArfc=Bk4 ^7AϷzx5,M<$Gx#=fmφe:ols=9s (ꋋpʷX_͖i2}gnߙs#>)[>YO.ywk^xXsOftutm IDATQq#>Fx&wq`^j+8Gt5񗗾Ӊ61QjOW3;=EgLsxfx9ۤvLsbfej.r{9;V8[r/Y\y;Ml0.9i?e~gd96Do(&;b}N/\rÔCk0DuL~|Z/8X5_nw?wë֓_'o8|o;ǎO?ed_tx|x3kwk/[o^7Zx_ 1_58 u?uQ Fum>/rvt|s^39?y 2OmgȜ?y}sw]k͉-W83f⤇Q=`pUO?߹&s6 t~ϳ}A?cyv-\1Yk'\Y)M-Yը3NL᧟<o?㟔xN@sA9E2y:8a󢦓B' (=o=F\t~PsSEՕ:ғH^9aI.I|Oۻ`#^0R^r /}@/yG|~ҳO[r< !aEZou׃<á#ˡdduWO9CX|kxu;Uěm/S|j?oX>5;^,;iS؈o7bˉKBz>{?W[bŒao.f~)A7)L:Xd;Ack:b§g\W><1ao={re/|Kf+Mz`}o{_1юVmY7ow }N2s5[~f[ w6\&3:xU?x_gv__)O<|ݗ}Ko4'kl^pYO?S~/?ܺn~׵3uu}v|)|f`Wҗz;Mo=%Ϳ]ỿΕ_?G?ջ|!y~Nd {&n\:"u-v3{k~V =`N:73E&frظZc;~cNb~kROz~;MְK Gqz> lqGLpǒ0E~?G6~=tAg츚ƷmbvjqW<|ی:ͧϺ_ zZ\2?5+(i>ytrx9\yL*']2Fz.}b©q}8bw;so?$y>8pps'dg :m2<'\Z->xm.s5~7fQ~O|7k-'ۣ>v P_zZkYS9n$Zb&y~aǯC]ךk_>ZU'|xh 縟|e|ʻ9Ѿvjr\"{5dm] p}0?GPOc1)_n^7)s}7_yw|i!e/u=qO釻?{pX,Yp_}{_5bM}a+vY7^go_O߳~._Y[ksܬS.~mwכzo7vts_}fz<9Ez|/x_Omzu:<ڵ6Z-Wuu_{=dw;wk)-{5x;paXw@'-Nv?S]hoHQ{>o}e(&lN/Ϗ>w~5=fgSqk;6a`\.nw5kWq"}~ɺBvsqpv90O7Ť+7<[xpsMF+uf׭}wmOO;/]I?]޳n?E/:y˺s˿w~nZOگtwXwJ[/ ]Zt=+3kp?zDzzk7=qƺU˵R=E~d|wݩ{{m\m9qN]9Ÿuh0S3TMr6NOr9i9/.>r/¤}E<.ӗ?~NO$N|4}yp8hwrkJ,(ls~_|SDϝ9z;OEu>6JT3Wk OrӅ'2Pqd|h?i[cДȾ m{f_5qaljK?{f[<$k:^$uXk@81<ܾ?u=5׼_znzښ{+^i_?=Mb[O?e]=\7oZ7\/Ã+σj\7[ǝֵw?Maʛ.wOYׅ~Y]/7pOozZugo#vyJOgK~>̣֙}}Of<\_$SdMxzq:?W:T\srsgq_m3w5֋rc;EoBj |c\#1;GWAw5{$nHz\^TL#q+qk?◜؋puo}(ΗO~ťT$Ocš}˶1k.Zp|YS>M;|澘ߙx;paXw< `9 ;we?P! ~wb*O8Q aH ?rqk)[L5ܸb Gߜ~XAg4<˧M/ʗrg/>5):1|f~zg&y·U3<;[XǍbPm8;>}Tf<94"*.{xz5Lݔ׫08׭_8|ٓÀ_tሉwΧϙ?;{l?m{ވ'vcҼVKb|Ǜ6:'g׵yp| jpGNcߛ<|׌/E<ެ?/8mDg?pM]O`_n:w̟yxzru1xi|gݜ_<\փuuoq5ҿ o8<]>>#Y~O]X^y>mzͼ񱿘 8}j.o9cӇz3٪knל̑a= 3_~fja]c?HD_+Q|V:`!#HL+\|c^˥k$moX]7G;~#6U8q0󙜬|#j sz<w^0ԍNX-=9̰ώn?s;p܁'xH h-ɂz1~bqʯŘGv̎n>.¤K4nòw@n}D.:雛pǬM=?:5tB<[Ct"]>)݇u>yѬc⊫a(6{x7laӻtOaWk__ċ˾Ǚ8ݯ߶.~֝XM\BNjkI?kk 0:OQ90T=/e_nƗ'_SgHOo8+/w{gg ts>jJ7}Uo6!]\ͯyygҟ{l>߁Jۦ5C7Q\(]rӘ^yڏMyƞGv>FunwvJ5]Sz W}'>m=I_7(^g__~y~zkr{x} :Zyp>eߺ_Ǜ͇oYV],?}a~ºkٟav|3fo֯ABwEZW=::z:b͍a২^+7>I&?ueqdꞵ7}/Fv|aͼS.34\=I/M_^sn|M[39]\Q|7|^=Sǚ#9mʇ?OQۼ>[Ϟk8'nkj-saam?1&~O |K~5;6ˑϩyN~=4c]O?msz;uܷSܓ {?cwy~cՁ Ǫg'M\h?3pyyrtsr86IExĐ^.NYx'}p/k=^S-zAaT;];֓Tz]I(~hú%VjGOF 9#~ֶh| ߼"W<8*yGÉ;.VT5(}huylm:u%''97v7j-&v6a™s>HGל.}F}O?}Y}ov;U{ıo[cn>~͏`#]_җü<}2\y[Ss:'uכ[;̯|[ 0ӅӗcIp͟l SGۀ# :(:wb/,lH?+&Lk@|'l}M_r4W,ZO7w'?x_{~?}W^^wuc?}x_~x}x~q ?m_u_wxG|}n^׃o^7~SYg[X=u%bݴN{;&g{-ή!5tz:7%Vgz/[=VKDWn:q|g rЗc/{8t)NoH'wQXflԓ{9;U|whh7`O]Eכ{ƌ͗~Ʒtb1ͫ5?XMlb{~^wiczƩuOskcX'c)]T.acT3sWMbVLaB"9{5V;f}|▏ogk^_9gus\{OB`o7Ou7iODE1w5y'tWZxR1?'OqOvŧZrX$)t]e1&>82ٛYr>7Zwl{NsS #u\U7|17w=!MEwԱvygO~}o_e϶b'=߁Ǧj8kk\-~?u.7qfE3= zg ?zceukPz.ލwyz=wW睇$;W?c#=_x2x'o]7޳^U9|.ĺٻu-򣉽|nd]^+c5n}ɐTwݜHz|-"콦/g._MSh0Û}Ox3Zb߯7{xQ~fu_[_%ݵ-ٓr]amjW'>o|Oj7FӑOݿy/g-0Q|/?e:^N>OhOhL||=]>aeo~-}ݬ7U7{lg]>k=sS,+;Ww,۽ƾD{ ǵ_ x}whq9t[gE|g˯-}~Ŧi9{opl~Ÿ9%~>噺C_Ωy/"mMըw-y'M~?Yþs#r/(O5~O2<57.cyׂǶ@^ڠoxZasq7㆞T`B@]Mg1$_]OFkAǟ Zq>ĉAzG?fbg-LAtz8 IDATdM_F÷GO-ZFDa֩\3ርpp~&}pi=;{qdeu^j0goL>7rF-6>oa۷D;3Xsi˵._} d}7?7íwz-Î֜c`}c #._U}I/>ܸnϺ<8$z|b'&9=Zc<ٻbŵ^73m#xO$kS3uŠumߚuͺۘ5g.ϴ>8K<>?Q?>9Ψ<:x;!><0w1:X,|ɝ:WwA)]~s 9׍zEc?cǬ'.wF =':g_#[uL>^00dq曭n˷⨚bⓏK>zRSoGvc^r묧1sf<|3Wr9z2Rg9Yg]|PoEw2).xlոx O^^pkz F1NgƳ/9,Ts^lu|ДC/O̳?}u;1e-/t|ZC>%60?}ky3⍼ʿwRxŰ/\||_c6rN}py,5LOVHלվEOCC:/ӡ?2YaO< ·&{qzwֿy[~nʯoÇu8Vu~zޓޅuO[x=Afn fzn{=:_|lKJOnzy=ʎ_ofOmh֒^W@sF825D乾;FQ3nqS_~vXEn.2ֺZ r2=ҼZ86=s^Oԗ{ţ~OrgƓw9g&jbGld=Nou//عzA|3 ۣ{=V3ybɯ紹.'ߞ?pYjH?{N~~h٪/jLOn=6]/6<>j/tdItf܎Sˏ^Sr#|䋗?>m6gØrfuw$Sy}0wVrzSxgہqϹ/q8q7OݢK_ß9N8=9s #Z7oU_u|Gfo?w=5_E[ W_r|߼^7_9u3us·+&{kś/5уf=abo_7z潛[~h=i|6QٮכZ'Nyp=3wVۮ:ќMo^m)nQl9/}X٧Nw}r/r5/W13.{xr›:m#]sSkƴm>@?绽xΈ@8۴횮 ٯ_3}s䔯y7Es8(^]tœ}?.}1|}}#=ݬ>!SjNj^~ bg{d| Ƀד8IoĻAɟǛwwλY/kpnS__xp&U]7㟲;krVǛ^9Yvm}ZvY7uY8b^W޵n{w{7O=~=o;ܹzzu y:{cCzFOlqdp18u!mkKG3^d:>|D\#N_}Gg.)vn7oT5lБ|/!9[#,ѷ?\\I Uī]yFjūżr2i+fͷ<7[Sn=7; y|>j٢}nT_aS)?C)i8Օ?)[|~h7O1)ti'go;܁Gہ Gs(Ov`K j젞_'\S5tB kt-Nr$~K31d3|ښӵ'r$:u{9V\?o=8k9,5'QγFNf.zS֋W e$6J.{ s7L{lv#m;W|) zx47с󪟶V>|oCoa'{nAo{WLqGx#=ބ׾q_z}$ڛ֍R~XܓDuԛJ~-o9}}zO_pއT~17z׾n}=ZOܿkbj4|'3>ߩK۶k>Gb.r=n9[4}Z΋=-Lsc~«-^|p;O9Y'/{˜b񈬏\.9_sP<vT,*)&0"3kwrq :,v/YC|ϧ+֓9j#?z$H,tGt|/r j Ga0Pu/lQo0,>Mɨ}+GѴwBߏ|jzqڲn컏9 Ѹ}YrWx~|_{\|9Ŝo 6I09NG;wK/\ǍjkxO]8 fgygx/lRp YJ* mISBVBZQWR.R[UI۴Ma+mBRP0$ơ`m`cg;w~?/3wN8g?s9W?žr:{k]gnoHس j <.BǗ{#W,>sȣx;:DmЍIJ=siCΙI?oe?ǍE6ukc _h|Mz~^Ԯ{?.7s 7x.mCkGW}Ϋ{f>zf=f=߬Gf2ܬ<_O uyOKK/mO׍HC?R/=8mp7Iı@~xG<-8LL<.`@\x=|_0?k\sLWoeqp31Q=9u$KՆNBe~ac3Du}d}ګ:>K cţybM_ƃ KƩs,$|Ă~O+1=w7?g{0nʹ9ҫ'z</|cۃpp$Wk''پOl,ܘ3u퍘 t/Ɗeͳj(:d|#G77%sinpdϺ΅8R9qp6Vckdmg>!;ܧ1^p3c<ɃrnAm@Ҧb7AI=kf{O a 3)X˘<3Nly\ 2}ƀBϺ4'f̷6=!C}G;2uё)3-y13\X1ϒ<.;Ljo#p<7|'cq f!xk³[KtuF]l.p0${κKgpq͑g,6prscA[ vOqg\k3.udp֖9r OvcP?:d~KEI1_I=u Qr>pֲ?88~,'N]sagLx؏ަ :puG0ξ!{<~o}&qpcbވK2μbXBhJO;:t o*cZbM}V\%dX\o}qgqe1uIȾ WsIܞ$quxctQ'Jy29' [OwiKYY}qED?r6:מXڒ7g9}$yr}bcCg9/l >M{/5ȗgl_[{}\=6z?˞rc{s6>Sؔ͝ꟀǍr D)k[Wĺ@|~ /Ivduz3'es]uUom7|wΞS7?;`Ϸ+!uσb;vg}tM~)/&=vH}xG{+lO;[?~ypӯKb/pmpϓ=>[ݹ#s_;3|9q)/F3o SՍ W^Ο2yDXM|ɚtdMv&0M`4i L&0M``4?s۵?3`]j7[=Lðh9uC7ퟪg]w=?ؚWԳ!p^7\v /0j/z+uz>W\1|~[=癊f=>Kc74i L&0M{<L7ߨ"oN m[Zb߄[K݅ 6aWX=e|j3yvѱ5=kĄK`W4K=2fcޱ3bXxQ'q/jS'cN? =d7>%92~{t|1O_K{!߸ģ:9xN}aO]Yg,<ߌ:sgyv9OrQ`/⢋L!{ԧu9@_oLW Ş92OI-c9#ZB'٨ެLzbI3y,1\|rbzO&}Osc{s׊2 cӞ6^#q᳍5OLeukޖ?X;Os/7go~}vǧ>ծzW@e IDATYoe}zQ×^>[7wW hWV6A_ݻ۶}m~,ߢ.Yuܬ?XX{6:'b&s0 H6B2K2&oh,j'{YkA[-1ՍØ<Cs&`w_YKllX'fڛ}+:~D~b+{K|>U7D88c6}٣}X!WYl;<؝ub1F>ۨ}9vXyqOxK s 9gnKRdpbk:p~In6{fN`wrX9Wc8c'i#:2/1[Ah?O#3'cW{=$c8qE6O=m} tǛTry:7xN7ك}#ǍyC&la]urb\gcXl:b 1cacQ:9c]?4cY =`G81β7u̗眉~O}>q,dbx||`ȷy$li'/ub{2\bXۋ_5/}܌yO} 7Q#q~no÷9Sm}G*@}~}}~[FۃM]sMijhxN`سm9~&m#uhzvCǰտ_xWorkpn.7Xrqcuʸ9͞}#FߒkǶs0a}NzqO=/wֳ<}c}l}[kq͙7{}pyoG6,[r}#_Sgٟ˼>9>Fƥ_s͘1cmի)gm)=\=͚K0W{ݸYg?_}Ǝs7?z5Zc>l9ϗշַ;h?Xߖ=~{i .h JYW'ܤ<gmCjrz=&Kz.@ߚe[9P+g_}>Ghf{HyQr yN,փ{Y,.y} Җ2^7}<=}yL{~?ytq}}cܘcF~|I&p'0}dOx_• f&~1|`C1ؽ߬2xY\I>>?{1[u|S#~X F#6%i'}Ys$IĘ >8},qye` ~I;<׍6Y$jb0z@6~08cdM|wk !>>W 8$3!|k)c! ;6l}_A?}O`{߻61SvWp*{!Җi/ٛ\; <7qrcL>m\?g=Nٗ9E\g<ѩ3#ı쏡矻B;}<߈\Afc?@GN L0>s_3V}|;7/yknoڿY|=umWu3ōCucn֯Cu#~f}h_Wߨկ_77cr{}q=~gco篭YX? =K_zq2|toΚ=3k3vΙ1Lky\u[ϸ8ȩqqIM18${X}.Eب-p{{n,8sl'Em?6vb~Ṳ>v{6z,Sވsv <ء= CMrb`lF~#c$͵s6.V윑6\$O1d]lֱfMlqaKn\036f#q~K=.eIA7NW~ظyk>lXvs%~dϙ=9{ayaƁឍWptg#yĹ\n/s[Xt霬q=1{xFnGYrYv k/^#~ 23%'7?ŔA:[&AO#/+OEƞoگ-C#n*?ϲ_SpievK^3yT7y4z=Xj㎡o?dy89P/y}fggcG,l|9fRǾdYxq~"'q 2"κM̋x#Vyp˜ db7^,bC蹴K~8ؑEV;G0cϵp1Y \}ۏv8[S6Dc>{a?t+'gY/glYSLbOuqWM|u1$cfz%9<N }ZSNn_P-X~8K~Yq`Ĝi+1JLq8&o7/~c ؼn e򌅳xc"=اsEfp!^;?6}Lb]O?<̢86 zRlA>~-1'+vt?k kMtcXC #asa'y!VY yiczn,v5s.w8`C}^b%^rebk~=6>֟:rƣMts[@~<0ְ_`'<_c9S΍Yp{AnLo#߫f=I䲌B>\xbZK s o'W6_>6O8dVgӘYzN,>y=LtjM _vyk6]N+Ilqgqny=J|1q3k :~C_Z;KڳeOoMKn 1nίG~no(Å~vcqqsn {87vf`xdN}~S憺y@}ů|pz%nfCA>6308=C9f~N+/cǨ͚KM|ks)3ld,6r5zO̰']}'޳G{N6B}|BO2qg/g+gv`AbG_cqoo=Q'I=sZش2:q2d-ڌkcG.no7g7bso񌃧 X+ڗþs;\kUħ |ɪ4NX%":lhs߶ypbX=>?8E 4/pV~ہh8MCFmpӅN?vbFR!\?lۧ}߂9G`k=|[t,M/6=#OasQg~g,:9`d.s'fڧ3u}'sdp%v>'6k'vσE/!6';`V,fkv$OyDl̄:`Cph8szةҎEv3I—}KL$>RG[-q\Mma=vf}}Wy۱Op>y[} {~ r/S8N,ƎO5q~1쓘/}U?w.z۞!7闛=As c?\DuL#.<SΗ|:~<|8ܣ8p88:%9mřϞحǀq=vb_?i+1JLq8&ŚƑh[[-@\}Cg<6t43ϛaDXJ2ٷe@"c3O>ǣ[g,>m$|O 'eK;cvc>Dɶ O{5qsb!M}[.O1[*=`7F[rsS6_L?5nqoo|ɽS#r_'s?/u72p<\껈Rcc|VYGgvW=~eyMf;[[<7Kgc}`}S~-_@/W=J?Zߊ_y/\ݾ G#h=69<_L.o/x} ֳ?~o̢~&R>+7},613g$^c,fďal۬fٗǃX'}S[y1OdXݏ<1rieԞX)_*Xg~VC'->b&4tD'87RIbk ;XA?Egͳ=s1?c6qasb 'kɹ)&K|goRybI$_jQg՟w}M.\;|̖^&ZKY_c>C?u0`''a2o̟=L7+ws 18]ۭmk7}fK/|S;̓mߣJZLo؃}z?ۑUcKbzWw-M,7O϶߭o?t]CY{+ùy5rƩ{+cC3, IDAT=9Mlug-gOV?}ӫ:|9gdq#N}O(XΉڬ8!O_56dsSsE̴5=,fYܴcs%0Ğ3gR{uYlyi+1JLq8&Eo7{qMMMǼXO]Z`166kϺy⢃7_ŨE_` C 9vܘ6b 2<Ț βw'G&.18^Y~Yk?O5 "18H,Gv<b3N8tg=z2'QX/lƁf_o/'z<iX?6 _n32Z1~=0Pe A)n=7:'suܟ!=Br޽I\[=" gy5xo 1E҃=j2^;+_?uu=`yE?~0+Hldf=x &1Ƒ\ bςuly,%d{fmtjer}pW}S ۷\5M5e8{%.m=ΤOX |翾V y™&'6/\}Syb9/A&1kO;yn?%p>CU~†ޭ.Y؝ 2~s/`c9;z#2N@$j r=9tpt?pppA6}'&x.0EKLjXbg|_Ct"zsc}//!XrbńKŽ?61ͺ'y؝>f K/D. p7>uc/ib!s!~~rI گ:^fəylݗ9_p ;|19aWgfZ#1;\;csԦsi]Wo:p^{m-}[@}K~mv=غvڵー*_(T5mΫ0qġ=qn;ǎ}>sk8u$&<1B#?! q~AZ~f^[zo|Y[/qyz|ٿ=˹ sMlbyb#^Ls'}'|ЏG:9o~Ő棓Kb`˙ٿvSFhJN`aӜN b\hb wC.>b.$6u}@X=5Af#mۛ\1Lj+'Ggѻs"^=ݟHl>Lc݇ c'M]؞O_QF>#e vsElȩc6Ť 9̝'ɺf-bMꞀONKwue<#|y}vj֟ob!?qZper瑱`n>׆|ӗkC]u7~˿~v=Oۿkܬ?qS'?U߬mc;jswcQ7kfOMy]WjoچzV=Ķ\x N}<ůzUn_VnO}6re=S+;셽}wp>6}Ƃԟcuz_q.Aօ{nrͽxAȑOckXI6=;F3g#So_/Ƣ{lyq!'7ΘCAhԍw6nV?c}ęoyM8j'Y#qv 1`Y' #v u&FM>K`BLC<?D {@gomہ=<&~k̜X̣&qILbXش7:xOY9%cʼ!d-~ȹX0unM7ekM"ZqĨcȒScay`5ă%!gٗ53f熯mb q<kΕ8G/Z~~`8.q,ol>F{DsWvks?lߙ#.'WRG1˝{UA?Gd1~[CrfލK}O)%5oLSYL;v32~N6{X1=}җ,>Yc,H@&&m0N ڈrMy˵~Gm+yc&&Ԡ_8jBƒy19cSvމ+&—6cxgXl"qY8܏6 $N ̱3a8\r/E2q- a.dga^o D9ؗW󜭺\órkwOco͌=G)g l=fbdNm!C`j7nWn\{eU_y&n|_{=vp̟ue$O8 U/ʔ7M$.^t˾Y]Ɔ7ЧXܾ't0͛#[ۼ>CN18ޠ4;EŲ7gl^+66s $왧| 8`>_]{Ylre,OuB+18gʺʍW3>RFC=4Vw6O_/ŹyAʙK?}s߉L~q~{&f)$Rbӗ{FOvdr':ĥ =̋WΞ8`gOSKX%tmK`I9Ɔq8C_ӽj~г2}IrK||=iG'}LԛtC5"v Emalb@X<(X&^w\zi{G[w>S;3, ^8{wjԗ7Ψ?{n*BGiU_k߹/kvku{][Eeiڑ*{kۿ !Gkzy>>;.|q=G]sM{ꡇڗ??goT1/霝'[dx8>0g<5a~oK=eL9ce*D Z&7>{#_[rdKLYg6g}b8vqbϾ18chXܧLxswO^K7q7Fɍ+'Fo3V:[f|{1}I6K]y}xسrzdshs\cznNڵM4t~&92jyşpG̀7U~ؽ lblŜE={N\~=QM;1Շa.6({@wȐ=< ?!1K\{?>L?~tȽܰ+8,ӫ57~\d$tqo}86`!~i69vdu8egƈu٣KĂSH Sz=ezXu]aGF 929:<<E+lCr7zW7݃n|`K'R2υomo0ovG>.㏷=0ws7 |dUj=m#omlD7grm.ܸfrf\lw;whw O˩P]R}ys^מ{鶻n_w?_ON;2qx7.0\cx"I}YW;<{C&NƳϜ:=Gr/@Ā{G{9,d.L>s|,^e#|9{AN\rMN^[;qb:i߁yc{8ٹx <߬i=&y`֐fO3 e@̉e=Ɖs_Ȯqmk|ωs̃{*[X dc/>BB18rb=:+كx򕍳ΞX8_fI؝6^WO,5,9MX pd'ixy"M 9vqf &8ؼp0ucg}JY}e}p}'p!Yco`K Y0G(OoKy;67яX`[= 8>B9cf^99sk=87e6JKl"ơsL<:`˲upLj㔭cOEoGr<\]}es r z\D{AG6kb-胋|oMojon7}74m#X l60Ǫ>Q{:]-uӽo[֝unW3<K_vg}|L}˞{oy`?;sc`,>08/$^۱q$^ 'w_ѩ vm^8ش=kP'7:fNYqH^kLGf垙<{7ƀZ|d=c֖k'$ObL 6VRzb/'i'{{?k385匙i+1h4SdcV/\{g[1j#^/6u/1L|1}Q7~LJ\/ul^~qb=Ƈ?PӞűv_/Wf.+OnKX0RO-6́1#Ʌ_rlIᐺxƪ~YRִ6ݧ9=o=Q8l/7=#g>y/F.: |m]p]+L\bM9xȜ#' 13d:\_S8{H }jg12<]Y;:KB'F>qA>^c}ZCN={+Gꙣ ϡuiʹeɔgմ'k1],,sK85ɫ7]εO{fڳ2EڈXf'1u\!'nݱZu@_j__ow%uٺanazɏoO>H}u07k?F1rmsݴ ߰?zk+k||Y2߶kۓַ ߴ̥ܧ๜i=]ؽvMY,$ly sIN/fYzA?iC=cawM?6^#p|A, &xy !k#&nf!Kơ#˱ۿ3uOȒ9_kO=sz:uXS֣?lA9sւo.:8Cր6>V'M ԝO]ݐ>i˙eNo',1KKI& {9S4i L&0M`4i |LOzñ:Py}YKsnoǟVߊ?S$\ IDATp#?2=~?.|}vh릶rTƺyn=S2tFus/zQڭ _]ߨsp~Sq2>iΝó?яm;vCc4i L&'0}~52~ 7(z~>|/D_M7q`bC翴oE q2 ?|+]mr-֟-{x3J;6jf2}8>™{$/qf%3Gbr<b>9vOز/d56r^A]Lϯ<ְb‰;%lQ K rק<>X,=X؈7>$6CC<0c%Wu!6ܞĥO ۧKoڣ:ġS'KIc āIO`A䞰缔3|{Nح!wOΎ:gl$&~n3@z!'1ry`,)ÎLnbbaHPǍubR/9♷8exO˞&&}uO`c!ZEZ0d9<:a55GCiC֮cOycB76_IǾ]>6#osO~}ܗmo֟җ}VZ7۫v];#]?{s=[q}5-3j\v 9 ׊]«W_7|Mupܫ6٫2b`gpK|nc9{~~9bƃ81am=n!bOlb8Gcͥd{ 5 b>KLdM3VÖg<9s>7NSɪ4NX"or `śK<$Ƕ͘ =Y}9D_9gz\Kc6gDl 1l_-\rLJ.p8DZ${2]|t8̱OX9CI~E}HS6qӃ َױ%ֺ9kZ3y_Z ?΁~Ecqb^YS680?2^x L~'L|1wi󸊥c]|4Dy_}13t1|lsYz\m.N p\%sɉK,s|D=bƆlvW'Nldk"C轍x1`Qt`##ǂ\S ?:{[a|_&xҏ ҆=?p˽?rFc=za~|kt|$7;Kz/I? Q7 LZ+&I͇grs~K39H2#c,>1Pn=kqGb kӗ{!tb!8f];aXwѫy}q<ȩ?f}ا:qق%Gן>='sbeуj˜d!|q-@Eb$~nƸL6v#f{I:ϴ6c=cڑ1U\qr1,E?l39Ǘ4f'ky?߈k8r(/Ēo/ֳGtbű{D'Ly]C{Zn_?Ѿ]\ۦNkGʾ7|kg Msi?=lz||ρrC>uܓ|?~#xz6;>⭅tdI[bA~X=oKٯ؃5c0YDxƚ/מ>>n> }~8}:VzbG<;x߃,fObrxOo{] zN/˝-!/̃c9׀Ԝb Ju5G>/uJzՖu³?vޥo?h;77ַLDžeȹ=k9;+^S.zoQS7 g gPֺ_e[~lo[S0>R7_ye{[c_ 97ЮoGHØW{)s =yc6>zX]n_n`XˉuOiKY|_;QYX5K9+7ousa%#I3ing>U\7v CDɥp,F}o/ԳFΘ}{ug#Vo?^=,|̝/mSa9z^^eޘ1R\ c My[Σ:<g= 7X==s@կnnЇK/mO?pӞoh={ó{Vvgnmnmkk^37cܴ\ߞusy-7qW?|_߰i-Yg?;<g_\pc1bOM_/'{ŮW_J;1:{\)ϼ3~lز1yVޘ=l8ʛ;or3i0_V/_BPVU> s򿻁i|x/r9mrq}\@#h8l\rs I-X7$Տޛ@kvU&TB44 *Hh\P0Fyb *8^S4qx$p(1t!&ABBBBJGU*՜7_NS Uco5k>CN9vע/>u0Oġ:vBoM=׆>mȮz ;~iׯ$e? m D_[ BZE}P3qlפCp98{dk G=@':pwGW'%9ĜVj#RD=>/~;K,B#׏o~8ep7Cbgbs]ē}7}3ߜ赥Lui=1J(y\3"73d?5IbM[ց_*v\XKIu%}Ykxqz mb9lۊX(>iUv#U)a(n8gFel3vPPw3uGMy\9y20kL d&co.7kїX SƮXeO簏#޺+b^7Pqb?%5g.6Ň}V_ScKbc9IlH%F\;vrKo j{)&>?qZ]p)ԉGID,⣿r.Os,v"c(6oxs^86GLx`gw?q~P?m[`c\?mӏ\;=r/e=FѿYgưj1!l;}#X97\xbRz>cu>Xv1{#m 8kuw.OLsc\d|۞/fq2YxiO̩NlRonxƙ Nk:P͜}!쎜Xln:˛~Xz㗱+㵉NX'C 8Cu8кoS/1}mΓKزG$&YkN͒107<׏yOύc?\Lmr}z;zmz^ V#uron}'q`i\Syځсg6ŘviOp<3}SWtY>1&:Opi0'#b8/$_<}!\IJfj@5,ԠN~t kNAYBQk2/vdqso_Ev,<ĀL\`#&zyG&Gg^0?n~c7qݮ!b]נ/qe@}Do%,;w 9[kO#Z}37fwO蛔X>&F9Xy+6ԣpum/ӯ_{n3DXGCW6z}]Oэnzzȵ'¦ݜŴ~>ACm:i \2'^bA}푽 LþE,xppGёÑtYSz-W?NkpC;vtkiuCߴ[1s[{~u=}HW1qUչF9,o5mʙvv3u~e=Y\wm{곶Cu87~;cmv %=W1z0yw9Xz̓z0aP{2LJ>Hd]G=K= #מB&C2slFf\}18g XmPGzdk^ٵG&]s{NܞƧ?X zY's_u5(Y^b}K2F-gmr|$1r{7leyn@ nζdK8tՓϜWO_IW|=}OٚuvFk\3ۭ.|ʧ؛ؽM)ִ?:O=,_Y$f IDAT~w[.$x{ﺳ{MKI2ɾ|3ǾCkzAbnss71ߘmOtrmB{.Nr|3c1KYF}, WxjIѾc.&&}!yڕck凋5zcsKKoy?Lڟk}? W~yW\oo'=m7#nGԻ꯻ٛ^S7җ/6<{x=&Auںů^Ash^ڵp|=!kqx?>Omn/:_Ff=7{}z37}E?Mڧ&3˝I9R#1̾|с)PLO>mG6O_ג:0{}9]ä;L^,5$u['=c9^J-˔_k[d19>Lo;zv)<+LȜ,2\9!zݤy4~x|yzlb'b+_l~XjɁ=y/kNۘSR((ȭ;7sb'ǧYl| [/\8>2r'r_su>kL}/g .$~ѯO}ыښzWi u8ܴikpvXɷ?t 'n궦eG05< vӤV١bϾznf7]7^eYf}jv~)/}p^sqǵ ~p7S/g{BXw{ù}{'Fu7w?ɼc8>{XBGNLz牝8${|RX>u}|kq]#LW/$YUĀ?O߼0tZ)nyV ϡS-D L/ 9A'A9G7>c _9252xnOSO ~XY'1N|{a?oY s#fn֐!DXsg썽֖\^'y]&!{zes'=ı d[lC<1Z.Qf>b!>k CF/G&FDGc]Ab#Aԓu"cݳ^x\a0?\x%=9 e%y냞d́>#k6psҖ1cxڦ|M~~ESѱw#e&_C~O/X8+qW8=Sd5azz9?/^8wzͿzG?]؏ۮݧnZ7[3wOd0{NzUK/I H=sSkײ7.ol{O<=w_}UkwՍ^Bێx©Uu-z{z=7/^uP}'l56~ )Tlջ?ͥ&nF=< z25CUyP3N< k5!g3W~ pcn| ?>#O 2X`&󠗨O^'_n1ɜ\NMP󫘉rYKŔk[zs$C'f]31m>~̍>u̟q`'ri6x &)'1̉z%gkÖu;>޺qL .6sNn[r'~yfg?GiY4jځy AxA`rM$ 1:qb+rkh<0z}Y77߹8p/#Gb 5}S.23 9k1F&bi'.{B?!.Ƭf8u2FkL|D {1).]O:]l|vr:1}7WO 13Y^?k&!M5@{׉aC@}}W :|>鋎z{EN>αK`fQo_sbg҆诟𑲞n?1ЙC|.` f>Fvs#y*`19^?~-w9f¡|cPy&91V%b%:y̩s >ӧޞW|_p>]{iu48_quwn\޾~vO/Zk伳ugl}gy{׶O}tU{󇖵Җu̶z* !q_[RuQ7?w OGm4+ۉ Ȓۇ=sTfsMy߬3cօxyMZ%[?8Ȑ /vtĩG9v{ cCd1)~Mls?zfmu;ƭXd_>|&b.YpmbCvI6̞^n_b9.f5fNes{ŶskOkkgyF5Ӧl,8I#z?k0/Zc\kK)9u5ˉ5O_g!2mŐcCuȳF#zuȒy2=s3揮'cϼ\11﹵a-VZ+Kn]}m,m%NyL7ǯٹ|[yʄ \1T7p?ۗ<֍r_^~fܟ'O_VM,֟}K}{ ^ʶng>)YHݤ\YwakpV?z➧WGD<']]SC-?]wެ3[+ok_nG{;]uي_zPnl<e/v m뫎r3Bۑ+d:w>c~ַ76s[+zqgi7N5sx~gr>%[u[svssNI:kĩ^;u}6y:x1s;B$u>9XV9r_s'󸯙3m'Q4ɧχg]b2\ٹ\e5GZ=|I)cO{7 wvс?50OsN;0L;0L;07X^Z|n<-_^8wxN{l߯ǜ|ru뮺Yn/w/7mjw Z orMזzTYgʹxFg,k߶;vmyOom̴>]rn1ғwدW|k_j}#~Oo_W^)M;0L;0{߷д~S3o_>IcŸ'Sߧ k_R'Q7܇q |jX3A>sjO,Ne|#yՌ W׹88?/äxP!;h߄e { v8~55Ke1?W/f.s_=pm.&lsГ')1?⒨ sϱ~c?f̑ZݺzՃ\<:Hd|}83.Y2KڜwNn>Iģ#slĹ̇XLC?13ƥNt8WS?x?ɖ9s۳c3o>)ĕso^C"{W\`S#ׁ91oҗ#^8[U`se$f4ps.ssMLUFݙCn_:>ơBus3cBuwCb;`~̉چ:0=zKOS\9Ac< cI}st^{rp?ԅ\z22< c39JrFbvȐ\N;qkd&ssrtR2}+\<D SOF9Gu/}ջV1~O;9st{mBJon쉓2H[(:ڧؓ yO1$Ft\f2aCyq {rH< p &cԗ9Odje 3Y΅ {S (wpn.o3;G7 62 s/.I8sE&.5i33X'Jm^u`0\'2l_s˜x~Eonz&ͅݜC∥k}\`Cg>C~^\i_qr-pąN ?}]``OڈW/>,ub{"}׆?#7(aCvr|QcLqCлn}pWvmpW.K9=O6]vY;^[]YV+zMΪyze?WvW7aGїtߩܬn޷+xOaw=7+תʵ^~m[7/~OfK;8i}{lB?3f.tnܣ \VcۯŇ|b@@b\eG\<WLM8u0:I?3  tcaā $>O['hAN=OD=5@-o'K>bpz~;?U_Z%|X69vb| Y~ā/>3>`}Mړ+V։z5},ׂf5>Lf<5E 𑝣>wM .d r}}A+lm pn}Oo[+. t:XqY[?ӧ'ggf.ez(Y`X~zI_րOrds6(87?l@>!js#갃!6zU׵L[OQO- b:dѼ_Fb3|b3B|b,?nKe3i~dř #) $W3ԁG[y}d~rc]o Oo_vG>Ү6nlG:9W?x]wm|q][c;f~+׌ykc^ۮ*ǘeO_^]Z;sK枰?w}]}}MWF[<(xkUCj-ܬ Mewf=}‡,k);sJqĶ6pKolS/$a~X9v9'> '1 BjzaquzK\ps;ȁ' .fP~!9r\ׅڌC`:7r|s@u-سGi?lZ'sjCF)[CiCf;1W'fm|։|օRoڻޤFm` =c<>!ctYvOYn]Vgu:q Xg?Ns3#SKb\wY\]ڰC!s _=s&_=Vq1;~Üu&=}ֈXȌ$|ƃ:$쐱SO5vC|~ԹF]QS6N?x~Xa_OXc~ } k1~~|u2p>D|2l s.r9Fkط!1ۚmFcnLJ?iظ'6י<q0nߏl۹xG{_ޮW^n?kvhf[ݤ?ڎo+ƭFYpvZnosU<{ ڱի8T;K矿zz'Xזf{kmg(y me'/~ 椇UBfcrq4.ǣm\ GG M?ԛ<,Bb&~08ዝyn'_sg8Ԅ]@W/7nֆz2Xɚ/k~wq q֙~g/f#w+b̉͜MYb8XC FK.:d87n|w̓kL1`G l悓_>s /X|Q?8|`}{Җz"S IDATl3?{80p񃒋mHWްWQa9އ9mqy0xx9)q^Hr7F,/yM!}NXK!=6֐1+ˍcNnGbܾc_{bqcsBʋ0gMCr=}ڜ#y]'ʹ2zs":q5Z7틭)cʹ95)&q~{~#z`@܏u-&tįX}g){Ü3S~t ~ [;_|k@١s> us)kXO]i/{Y\Suc:ZOY?S7[:u]|DX7^][ZDWe}gcYgjj|WhvE=M+pcts}ݤ]e[V|U>~0n*qx-Η?zzmc;?JlRش6p'_P7QvU+IhWn?ʧ?ݾW74L;0ް߷д}# 8u"vO gi%'}:L:ϟ.-P@/r>Lq;]愋IάJr}n#tBpNceeᛘԚ:b#.r_Og]ppe-̉G6k se0|e!zZ J_pѺe=?ЋĢFd19hKڲFkA.#}5=cȉܾ`̧z9c~q\/ìpl/YKGs>u'F tlsC@p}ǘΘކa⤟}F &e2X5lrbX'5f~2%gZ ;w;O?0s`#cy9z6ӞNfc~fGiKݬdz =;./ݝ7U:jM?Q֪k]4l;z'ݖvgbWͣ-fb+NkV8qcю/Fc^8b@[Y+ Wڝ>AX7seI+s!\t-pāGo?XkbMJsR'^Lw֒~ؘ.!c6mv#<擉1n>?m@ Gkoa<>qzCn$:qg uz}3vu~Xku?!޾5L7X  2@/:̑90`Aҋ>2v C!zp% jCfMprŰFOZ֝z|_=:bmx?tk-0'Ɠsqo^9 }'ח8 !#1g,D`7}ɩ#sZcˋ]'d|oƛ_=R88y?!Goϐݢm `2g$hS;).qsDZ!CA1טSN?qq 铱?H zAY=unUupb\z:]Y0ҁ& #8nkW\N8w _.~ 1=Z?eׁt)3=fW;'+/ӟޮz[_^pXιx%_QjzzzY_?u]H~|g??.͛gںhrLpP_WW~P>m\vc[[OT5X ͭO Y]zw?^r9sC5FEn+lc4IcFo~%c|ݗ!cuZs3:}^Dy \1`>o_IL n&bpCǜ:]Ef`37Y~͏ftjw?ܒ鋍ڱ;[Ff,a@v;`Ï#AaˀٵЇqEOrؓއ90Xjr-l+mϼU\\;ύ̣',\Xݵ']|YMiځ݁ )ɕƢ<{psL^>_ bI5伻>|woOOy{osPg^`i#^߱m:doKb@GִP>ywһT }έqoĚ4X|={"k"|[=EYGD (O{rs_֘~,O߁m:[@7Ҷ

z}l^yo9ܴn`"Lݰfzzz=7_mݺ|L{ [ƍm[˟]/_w_ `7Z ܤ[fygfnyx"JӅ~K)'91_-^ ż~>6k[x='V]/'<1Đ7scofqr˃q#R/g_E=Vs­'׏vW?cu$^s ̭_>_ͮY>6v`a78Z`1L]}r|ycT=X Qd}y.v㖒+{lyڽPɹrrc.r=._R&&-1_hXg)O\ܞrc.VSbuQOұŒubPkVIؙO<=竡_<{Y r>y֚=3F>V/47WWyln_ zb5F?} -rPE1Ώys^vp=͗.;)mGqM]7?uڿ~fu{Ss7wU}}yR7yO}I'$9Nߓuz]mQ{lX cSko~+$/ek>q/eFO2lnmc1>V[XtOs]5C|]̽r,7Q^wu)9{w61\[5v`>aNM~d:A?ς82 2ɉ1zgs{b#g |ROyO=?$/^v'CGzb!Opz|Ro^;isd=Y'2}p뚭,`N}g[ˠp{OLQsALuazs}=u%&s77͋2~v6 0O׭[7~5> bY#y}wLƏanrE^9:с ks.2D9;sleѧ=׋]{F񭟹:1#'GG]Ik0㫲Ѝ2^9}k̓܇vZsk0z ,bά[}~b9kG/bMǎk8йZPFƳu7/6 ;89nNd0dcR'WΠ.|}?\#,50܇6ۑmdlܿE߸9zN}sPA;^_OԢsM+?jmS.KX;Ϥ7;<~?lˮٸ-|3O7~Ph)lnPO=ֻ>Sw [k;U?ętS{oyzbu|t#^UtxhSOm7_$?I|mB5#b|v0?׌_=ϱ?xbRrb_3q`Lb;Ả}8x\B輞C+Q^kDo~2ן0ý5Ó#:!'Y:syY_;'Q"G}k kGL9z=!76_b́ S 56p~3uq\?t9K֥oC|!dkR`CaKd3$d!#'ԃZ0%jrR9Kn e=`)ZM9܁ _;u3WǓi1^;e{t 5."%^,@?{7;`aߟ 片LO\e0̏΁_ zӓ'S!%\ɛk՗u!CQP<(9ѣσk17a,[>ԁ0:qE}f1%ۃ|o~~ ᣟ>'1s?C du1w]uIOIM=v0]scn:'u.#͛~`cN^3G챵 5@|c >:Y:d(b#53gH=s֮Nn=~ /׮l a.&_l|sn-1s;׏|wP}$>*N?p1c7>e.׭ |{0Fd,r֪],yL׺đ?u/;bXs8qщK 侍!.kOyKMW\ю<ᄶ栃\|rdY_V|W _eKU \Yk޴aC;|VZN:iY;W[ݞﱧV>1`[Es~s݈__M}ckgޖvFMjc񈶣{rG]UϪ9;%G̚~c~}f=cˍu߰>s{5s۵/g.|?sFyLkvGwMld/H=u+9bj\;5RkoyRVwX9C>[?1 r\9aY6|!nY](kuO8'=2F?|\/:}&3?oi]2lv_s`W&~쿾I~'ǘΧް&.sd:6dNt'8{OYl|' .v Q|A=&5NsS IDATz 7YĎ?ctgؿԃŶ0g?uL}l{3]YL]Bc>|jק׵㏌b*;En!c~Q 83?LcG>CbodsyH~ڳ#o˵g ĺVs\:Ty%3R?k36K1yf]`a'?d> 9v9qHzH\"N49/3뱻~9ϾQYo>p9c,2jJnخ=3t tYnPKߒ8쏙O*Gf 9yCOs7n]?z{_qn]8zn/Q7yz~Vo6mj[fJ&7Wm5ׄ0=Ikz[?c{yeoOxMmhۊ:&JēlKifP;}$1uFc]G\3XLæzd 8}x3nʧ؛ްߛݼam ׻.q8XXJg=k8>!E/zQ;/:sߵo|ͯ85܁ރ&p.WT>:#xfRTyΥbumɕ~~+ޯ{ҼzXgBܱ|鷔8r>cXݽO]9׫,N=ݿfC=uOZʯ;ٷ?g?{ 1LO|ԣ(s=mt eO:vL}]Cb s`+I/u|+~t{g%O푿 iOAύn__7yw lk_XY7v^yC{.vWm[|Ӷ3ϼj]e7G:oL_/!'Cضv㎶^}/+fKװW׻yʞ~?C/_su)܉Sl-/ec1C)x?&/Y,.qBc0ޔ-=YbSzaK.KjmvSGoo ?}߾KO?}Q7 +ݘz׻|on}k۟Ŗ-u}Nu;۟??i{BDx+}2^LN)|>|kqb/ǸbjrNԹ)cI;\c1ŸNq)ힺ^էEbzTXNz/J]k+k"3ocOx|51Z,Xl3y)u)[\^s5wYm,=Ololя~-oiyk4EZD~w{7umx/ 䜏ϧ3Vpg01g!yL;yum͸~ zU O{m99꼿~`߿ںiwrx{ۛ[{{HO;/^;wcg{򓷵|m{_ҞO g \{TMkjPc-e1Ry,v|lZJMoߏywwPu%z'mwpO9S'O9ĚiU7Ugqo馻(?'n™K~YۿW~W=R8 yg5pC3^;꩝ƫϚ8z c k`8|<28m.O#7#cnyQ~cCv0/< 9,:5Z3$|J-L/e@/İX>ԙ e/xqml.2_$lK8K=R51V|!dkdO ~6" =˜@).Ā.zdbyuε1wG~l֣?zdBcs|Lr_t1{4?vdm6K07\_ŞavN1ǜ!c%>bF@}hc=k'zjO9(eI ss'5ib8"XlY $k3QGƂ!1%}1]CyЙ':: | s} _1EckKٞ1Ld[z8ZAs5aiެ?{wMoh;nֳ]/ ?:C#IlWەkw%;p 9r'˜C!rz~%^ 8kn|Όw5'#{':n_?G{lmǿK5_b{ Zjo8v7Ǜ;m7o?5ϯЇnk[O[ݎX2tGuoоSԫ /^vK{56 xzֽ? 9O8߽-W߬}KMK/m9ԧ?~''SO=܏ ~ _gw\񁏻g~fw@ !=S ܑJԍ+jD+kd}c14rU';9 L^{#c˘!\GZCpt?^L" 2lyZBdzOvG{0c^L_֧GnpOBf<)O1ϼ6Ey#mpx`@&蕁E/vl ;:k;r'6r8c a1yҗMʱc]uA/@??u//׼5-/?)Oi'pp/yK}sp?O A׽nŦϨǸ\狀>Zۚ56v_!ccl1v=*s킩!$5D!*sN5GoǜEZf>-̉Ir] )$򵑇`28VϘN\;1!1 c-=~aC5rAKr`@8דsxԋ&bfnL|pO8?RW]ϕ)Lv׿:zO|x[WC^b9sz lIX?幨 %v4N];⾱SfNSr\;c\yɏ ~>þ\[x69XlY+[C9' ԷoSjD?RZ,|Sޏakz8lqb_Yk/'7cޜL8YA \>\M3f싛\%:8~=SobӇ.x1YCmyi7?<0>ϔg,vM7V'dMuESrBؚy8f0ɵg>n7eig$r}?/f .;ckaN\P?.>hb7aX_'xb{+_y'WEv.x~yWnr6ε:/mG1{kck9\e7]?]UC&\ʇ>Ԏ:vD=~g]A+h_Uv7\7fX;ȖvsniێZ߶Յe \Ts՗,C..iZG2cI߯/~NrVnPV{wW]pvچmikkɶz$5^Z뀋K=#pXӷN/v/Vr⺍%ʬsnu`Ab:'wM)9YWeڈe f\krkKEn'w>7/vg;;(%3}upwn|0^J~a}`o'%Wcg\WC}z,uƒ|z}[3=s>ʴeX;y7&cma8Ŝ{IJmrrv,Gr'rm`O4U+0NWS=m>i7U7?‚xR0*e:TS L*0U`=OwQPǗݬOxc NR?V :.`o?=.h?+nHӴCFl5r;Ć.iIJp̕xc,;𴓧ALGϼ9W|ist#W}Y2؎qnآG_c3:d3&Xp~!)q\A#wLgL~)xI<瑺O9@>RO"Z9aC uʍ;:5R kb-Ï-uuaSH;.?[Jj+TXki꼕G{l\wߟP+E}=F,WPc?d;I룎^899?=˹s{㙏c1zx~xЃX11$Muԕ 8u36%+Gnl135111W9c'1R>V-dp84m=r'zuѳ--:"WsGl8Mdu:@&B>c򠩃 ,178{V–2c!{H_bH:eOJϧ&ģAĤ5 %X{l`]@8Ɵ LNwur,mذu 3\mxMʝ9}v+]غ#W_SO}bqCpz{r16dŒ;i,yu,&4yL؊\l8pcfmӗ$W[9fL}$Y~n×F;G̸cN\ȕC~b r>Y'1̓CEA`$>}n#y)b"`"31ōb9Xd ކ>#c,c;0Ȱ!>9FaO7'=y\98ax9K>Ȳ63pr=czmă˸ڢ^dIW~g S-:rg|sgB65'cyO~˹3;WuAX}kN|Æ z8`{ IDATiӦس-ݞ'bgg WrA8c]rMԃ+[\uArTS6x.n:d[z47h-߱;7|^G yOԶgsuyc_]tvk%_?֊u9{i%Ͼ}mdYm7Լ0mdzz&w\\OzBA1_X~4mwɳdž`=6` }ぁɓB%-xٰ5'O,1 =sS0{_dG9\{}'&}>gcv1\r]EѬY;la=]Oؚbh>__ 9i~26} `^2niN{>-GȵGxpmۓcCs{Sޏ{ڰ%ɱ3"l|?͘/8֔>Ʈ;u3  LW%'y+&阺fD= ?>c{;"&O8xpg.;v4i6bhK?}(2xp !y:66c\aEMt}626czrܑg=O[_m|)끭k#u 8E;d`ȍ̕1{Z֐:YLL|˸2V;G!&>rsl8`7爎1c>zrs|/`X{|%1dm2!I#1r b)kOm˵ŏm۰F'2mŎ9ЇII6b'6ӗ_8~Ɠ닟۾e2ϱk\aL/3+qy;.}C_Zy?e @n\X+_1Xssm:N_Ąf?2>w>}̋i{p^u'_W\{m[SwE}uyXa-iO`g{Slk۬ GVuukA<1غj<-Qmw}V[wo~=B?ֶ3;-__Vbm_rgޚr_9c|KC8oG֣sCٷm_pmM'D]Sι˕ǶYbw<)yw g37/69 v6O>mw3vȂM ik.1e`WOΑzN|jLm5D끯rd̃-ruBc9K׼iboN<13q3̙{Lsn.caCa/c䉇st/P >P##oNYKW\9 f_[d]vO^\clK| yƧOK2.(׃o>?OxSV="MS@TY #ph+O]/bKx*g :vD<u{bN_L|0~B,uأG\퐉9(Ńrb0਍kȨ%q8k,mgW]U>KBf\#'c !s~sWd6쵁:`'%e9 &:b:͘!ÞخO` 'qz_Ry}혻D~곏1:8XǜXȔg }/K=bd6XKm50CLdጩs\İ}q28n ls=DfX.qSfNH#e)mǰcK^קQ o c-1>C@-yib= \H|F>@xz}`kKu_"rNbx쮜f/07 "WuuW65uc>כ,(7l]SIL`u_3}Ꮬ181rq#nVEuKQkvxn|Gpn?j﬋W\wV=jrwsۻU93|Y]_S1.%^sa]wݞ|~)[z7e?m_|yˋu>u~M]n.{n_\y=Qo/!S /&n''9%:>&K}0#ϾvƅXo>c] b nԋV 9!'xF8;1%nnl胏m_b-~h-$>e!t3W4[?ЇZ3i#&c0in#tH=&'}h[sO|d×Wa.e7sG;F<` 3ock} 탕x?^{}c㲍賝 P<;ۄ\鯏gl__d;vk^†uDc_gn!c }Zy/S7Y kf;1ṓ.ӦH]ߊ>IO Ď4wCʔ; Ib)ן} ;d-R\ckӏ97\H\Ansc,1ṼpH?Ȍyb,qUCS~oxY+tdN؇;/eڻKKnnpkyPGNxg,O;C.nw掝zO,#WoLr`t_k z,>~_c1Vg؜1{=vp`~R;p3g6ص,_4geGzشs X{xq}l8BΧxs ީu–KL4lԥOӦyv|sy "ָpZp=3N[ҏvbGuh\:}iphkNGO//}/xA^YQ[뛶~Æݺ=u{{ݯΝvoC}y`L%1n7ܰ]};x_}h/˅=uqu~{}vl]ΟᲽo9uh͕pg-^cO;}n!@p6!m!d fxn7u[Q[n#27l[Vc C}|d`ƽ5O>'恿dYcM,lOrOLx>|gmmڇOߔ6 ߱mm&zy7FF\f/bs47 ˖YWg/^x,'Ŏ<z眹km.6pm}O~rM/Sw h4yTo]ORdɴYiO`yD#1TS L*QA|PアCۏG5,<.zYslGfO:A^\D9Gy_i_\ں }wXWTmvՅo.oΎ /?궲`͟֍0\aDSLJ@p _mA~4>:sM%#}ډKCu/<3rcG5>2M tyrcacS4Ksvm1~!SF=ch띉bR_ₔ2o\8ןL:f.~ڛc9P7ubµC\H"Gqsѧe~Ήy>WѹnN]\y+cLs(7n$zd@nw<ɹqoXalC}m`sL}n;b21ޞuMRN56bc }Ʈ3dLmBIisS?숉NC1!󁛓8i#ͮ@q7z]^X;~}sؾIe!g= ;טr cאy$&vȔǚrbcGO?}ⷼmv?g~ki"7n=ZY[ϳ wI;چVAn;Ug{y};yv=D>}Cn֭sen<.żן⮩Gନ;Q;\T_88\/9~s3|z)}hR_DR;Q:G\\\S܇^GcY|.eu{PNl93dWoyG ~>r"W9y7Agopb'o|k.>r0OlhIz(e1 k>&>dR[o6| NF2 cC.a=y*#}}3Y,N6lj.9}vΗ1@ւ~C/\Ȝcb^ck Dn{tgή9WXʳvStpTq8h6l0Yֶ_r9c ~z~Ծf]'6}cy,:ϝF5`F?)-{bgy>6icC cn/x~g,~_dʉܱ`o$OsOꧽi,ki+O;|1:n_͚ zm842{C.Il\\;pކr( ʴY=7|~Ŕ+ri\>Gv`Ћ/.2Ipӎ1D96!KWYěϏ<]k9a8՛#rnxW{քXw}H;k=CwvrꓣcE|l 0 ñ!mUQ폾l/~u=\˱){#s.;o<>wfO&1RоqǵrbqFM}7UpV``89aͬ;'?_u~8|#Ϯ.7~=?>'r^s̘98aq_a~O~{LAvO.e9•a'&ZkLJf8c;w}{5;k{ϼ_N_8a~ƶڥxHɕgM:.Q57Džmk\;mI28z['ܹ`>2d, ܸ hf.I70t~+8M2c"3OO:Ϲ#!j|5W߸iLN2ie̕>4'X:1^V1M{u|~MBgȜzE'<ÉGM%plز$1Ƀ}p 6d؊ \Aye=>:i4>)OyJ{O=_??>`V/Ψ 2iOY<{Q_;yཷr]s!/CD#G 6e_=#maOgW'2d.'Od`؊S.2$pg>4⋃r}BCGC&e?~1aMQClKya'ܞ`1N cK/rcIJol܍Iΐv\y1)[j 9}G>x?W-1<}/r=d,k#A 3O~1Eg Df1mTU?. gH~>Odn_ .~qaX0ĵmv\>Us}0dUcس= 1}0g٤]бe p?c6"3Gsv=_l n=/mCA1S~(>,ue][Hę1?=Ag+rfPb _>_e>C\| g[>G\ȿԯEٞ7/tc=gw]pO:w7n\nąYV]#sϾ_Bl1"O诺j`vn>zYfɍ ԳOG~RkWjHs?]oV%mg=?]^s?7<犋/~?~";9!E/yu-fZߡCC8=Nqta+9^\'ﯻPl7s'V'=B:q~+}~kk)uSTU9wS̸4/߯" c>g<I(?Pz [(cyѥL,̯̔?}jߘΩ\mϒmϙ46^66v26gQ`~g5mcda-sQ?<1ѧN<:&X_>1qo?k']>֓y5d͇c|Y/Gӟ{7#yxΟ<.Bq^ ۋ_a'>=ooϵNM|e _㟫 o0OcZƄL}uBy~Г45Es⬪\^QG\ZWM5giMupmW_><̶MmG7U/,>~u֭ڗ\yylGԯ 2-_.^B9X~?TP17Ϭq/Xc7 g\쬣}u㋵?ޤ*p*p#[> }g=k~vS'dײַ0yÆ ύCgboM}H韆Y?^wm~~ =K׿~Ϭh3;Oj! ~fɪxWXg>&96yqiMh#C|g11>d ~g8cP/ tʈ2z0ƇNډ? 9}t1׺I8Q# Y'e!s#s{Z'cg Q;srQ7k.2\Lc $>ɲq)˚i1 sc_967{:ē!sTkc=6 3o8qm<4>F[y$6l0loҡ36]"!LskSG<бx)s~Qu]^9ML׌azO 02JLGR>~j.r?}x̵USth93l3ocu7|[RXK/W u=EG x~8| F^N?]Z-mN=kxayyC~/6NUV#m6<hOm+";ݲIxغ1TozC \S.צ`aN;Z>Fu2ދ!ȝ)I||[POW/c)ȈO#-\'6Ҟ@,sWΚahgn`8G9c10m!upj+ڌ뜳[iL=vlW1uϯ꯶W;F,$Zs1}}ڈ\;\{zB6c<6,<ѷya{R $)O kg}9q;;_Frl!` v13Lh F=6pd㠬ƴEvc[}o蓣yjG9d< rg?>P9{XiN˒x 'Ս2 6l Ĺ+1%o}mM?mڣWl{[Q{M؉cL{qK׶k]]s̷oݜ:_Rmkơ%Uϭgky_mI`K^3ԚIƺgcZG/3sb=w?~{i:"fDnnڐ#2sEoތէ?1ێ|Ė~\};^6|Vp1=6؉<9vO mWO_25P'Ov LgȈmr`x>2WKs'<}1_5, cI܌8L{ Ϲj+&BH>?.6)mzv OqKyB|}ݰbaG>v5S@fDS 0aHUooy>'0ox#u!u6 b gR %wiNם9z;h1N,3GXMĥ/9ގ'pjj}<r1%íKѷNN_mCG?aNRzk27|##/12pz/\žq|!cL9)7^S;Mlf69Xb.;ӷS?A& C~:kL8esBǘ6z86rq<`jK ;N.x8Ƈ,>i+]I,ȵSȰNڤ?2ƴ cH> E 1ىS^20lڧķN=L[76dn[씋)6]fkaG7򴎯{놶.RŜVwhM8. wG0\?rN,֖>z1FG GؘTw?yk\|U=~KoO](Ν\T>7ճg%KjV{GK=%uXƳܕ׻Nկe7֯3Y# }T 7,m=wv鏬/nxF=8p^5?~ xP纠Ɵ^RZ38_)n>nL\m#^9y#3HK01W{aÅ[|]ȈLL8rZք+xiyʑSX>1g>m͉d|1>ɕɽׁ-^[uuȑYl c(w,cmӬ}|!}1^/&4Tc1Sf/?SFyS_4k2mz.iǵio,~/__a'!93iN;di#b<ӏ| }cL|YY 89:n]-㤑AΜ;ܙ;tH͓)2?Cy b 1 }@ j× ׺)`06ƶvH|y2j\Ɛ[al\kvq}ONmW-`ʘ9+aL.1Ο mܺ)yk{>6ځM@=䠽c/>=Ap3NLc>"{PA♫q9PQ/Odc2EFMb%eȭ%zmXOK.=ȇ?x4q̵ .}X>?%sF9ort{2з61W16>>i\?562lՉ/: YP'7Xuy/6ci˘u$?+p4V9:.b@U/dzk$ׂk_?`zO,gXcL?匍?$v6Ȝ#}#|rzg="fw>dƺz| X;)*ۓϙW(o7VSuWO|Auc+W/3V\x~6nu =S9eϲcd 洷w=ؼyX6s uY >!3cj~Z ~5;kN[c"&9!=89Ę>ML5GP _\98윧v}܆dS(]1'g1[(vu &`:猧?219-c]0vbc=Z97=c̋<3_hqO_tɋٗ+'cI_iOԓ26)7>[cS+e;=!G8v-}6$8zM dYzl7_XԖLLa6gi&6w-31hgxyš*0U`_89 {1Y2q~=zM9YyNslr0s< 9Cg!ec!q1ē{:c/휺ccq)빾)G6ě/YD|sZ1 #v3Zo7xlg(5qRCSJ޸;߬B501]uj\vE=u\ұ.hb*<2kמR薶G?zS;묭 "Rai6`r^UbSOm[J.^8tJ}IZj;n=gkc}]Yϰ?ێܔ:yzc},yǡ9*ơS}Ƌc㬅XX^c21ݿnwc5cxnl~L6z?Y8)7a\W7? Lw0?žT?ߡ@oz'|cYxY~Hz.3VK{Ӿ~q1DfӖX[A~h!7{~F,ǹ%S[1G1s0ڌi1S/Gv8`g]>O`o?kYx>}ęűu=ϲ%6`z0IϮm3Y zub(wP|m\{ysޝu~{E{@_aCveݭ;7ps[vu5nn'}{[RE,D~V_}#GW{K_z`f~cp]K˅W\і~tUٿ^<;\ydS_&l]s[scrV~7wދb߄꿴ά?Cp[!ڰ^rͨ;NkQqeQ356_^1'>U]Sz{dSl kNB;{zf`(#O)708õuOӐCGb^_\DckM?dȒ[CtTMGNŖ`,kN:0r蓌=Gv e\amb>G8?ƴ|Dd=W-kqE_9 K9O獌#ן :{ ( &aGcll;}/2K;N|eݰ1>ya1SJ;OF,}9+ئn&=g1qc}bN?Ʃs i}㧏kXҧW>2rϳ/g?dkD<~e=}W]辽ܵ]G,܏8vO;;ejwcwvrJ[9)9zٸqI)ϿCs$ wȯiO]_ZYXRwgs~7V{qi}u`X϶+/xLwQ浢חk7\5@iRneiݏx^mͱ91-:p̕뜰\CN`A?%sSV Ϲ;ԓcL1Nb7/r0{;jWf>b'Gul؀ j r1?? \!rלa;"b=[w-A.Η1dؓF'ÿEgymr.̱s0YXrˑnck/t}3q,`胟kGq]Ynt> `8TfSwaW|4U[< I Pl쵃vSc` 8<5>>4D>3A ?ONI[9W/;AɟF_vn[=;2|ѧ3O*3nN$}c~m ΋1q9EF/G/!cLN 'i+\ܴ̕CoÆF}a+)ci6Bpzlx->ڂI/z]O+g}+x-KԆf.ryY;m)8[,A+chGκSƘ䵚.k;a/ט16K?sq 52'AO~ӷ!s;GInRFY-DL2'5yItBrcuD.R$rr7vɑK΁9:'tbk7_`Mm15:`Du W}+>5Ӷ_ϽsCo=ulv+o͹Þx#9\$^ğk};߸]~-cq긺DW33֭K+^qs3kz=yvVKsQwڲz+~y=~E}[ǎy%R[/óW9G7Ez.oOMãq.Ϩme rL[5nW#40 9ejv߼92 glaG Ep >A[cG\˚oN㋍?D-2'|ib]6lѣBO>5'^9o/\$)#eӈ?>o-''s|Xbf^70Œcg<<#ctI;tg Q IDATg3Kx髍>*p8+pÉ:aMW;^x{i:c c88>2>)˾sbmiC_?@ۑGB|%Xp6I}pAOs;Q\1z =1ʍ 9!'5i5UK&82nOߜsL|_룽v)s2=6'퐏AN^Iig~'k|,?|޺7fʰS''ikArz>ϧ`XbP^8ɳ#}0y!]ck֏ykϩ8cCIl_3Oi;~wF1&W<㧜bl|CpU/wFXB/2I/G]cl볞K/m'?mM7]ybxd3օ։o޸}+ڻE_+Q5֒7/i/}ڗtD[~W[u!vs;|RcLXiK~Y]0U:b/_V_E.Y{~UGXwW?p۝~jENYϱc ;5&>.|#\.WfNR/gW\1oAF99g|IJߏSn=,/ܔC?)S8WrPkV\alprȱ6sҹW01sy/c&Nr<[ xO>9vo?m;oB{W |rM׏z+2? &|ʑ-zLS}3loO8 qwHTS L*0U`TS c+? ;7Μ$~3&>Z9wG+Ll!}ʌ5v蜻}bmz98n[M9}#qy8FG3 ;pK.΅~R⊉}7%̅8)֜ x. _h>vg>n?^[j>swgDZ=]~L_rB{Koj?ښUS{k?~'wfIG^Nse,/5u &Agې5,ib1qFʑzXhr<Xp}bjc S1cY+rm9+Ĵf N#FfΜ<KH<Ԇ :kcSfrmbbsVw^ϼcr<1;No,mS]bMcqoXe,4؂c$cAFq:I,Kԟ*W2~XS~Hp w GK[[96:13.}(2^ c_N7O1>`"#'xHrdsxȭo蘣 L IJOʔg|r~ډ^b9 q $ƑkS}}8v4GE3^s,gR<>u-rs-\S~?b\ϩcmrb;c2NY7Ջ99NXXK?H>rFYMlyYxi\Rf\qé}Ob(Bͱ>=̹ak̥cqA?er5ؚ80nW{}'Ϲi'~)On?8kcWʘF~%S}sk dL#9{s۷.jgw^ڱup.n K]w/??}_qo_qڊK7iI\ӎ{c۽OG5-ĜhAhivlD+j}z[}훯l[o>.}?۽wqUwﭜzVc{nG-~ka=] /sKl0w wh/qr`{An;fF\87iKJcmӗÖ=Gd)I9_>>>} glI,rf@qr| ;prrm0yh[cZ/}H nռX|-sR.~bj φmțz`v]'؍C%ޜd$PgdnH[R8sxr?@;dcݘ.eEF1\S{e5  LW%'7`I9}NrGΗ͓T'qsN9cwr b+OLIbq9y2y>88bc}n frؑc/!NubL̝>66r;;gkG~g~AF$ _!73rlim D0F\g{ }oZe##s,xYKd'sk>?{oYՋ6$]B+B-X1.ʮJOTJU)$U=mlp vY 0A @BK/;_/vJty>|>s|{ޜ``>z1165/:}I?}l'Ɠ˺ټYg#|gmK0lOxX9֍lԩz5zY7 ᾥ,qZS_S}W`₉2YgԛG[>9n߲փ:qc.fz!).zpM+|l?/ }VV.cvb>bpc:W9?v[n'_𒗴osnkbx#w=<}P=-nptxK^YuWǷ?UGWn`Q%wv)? p=j_}n:{Wl+׍=Wsj_n1OkOp0쮭[۲YVwMznop~cZGMwmI1[QX`u?󜌎.wCn=yO?)oA݇|e<o CvϚl{_s_C͑5ˀg-=y|cO?xRo\S⥯Ûuc}CC9SW1_1wG詏a]I];qYy|8 _l~omǯw|~0ǬyP`Ѓ.qxN&4#;mv|c< 1y0AYQ?>Pז:p+OdwO|#Ԃ5AIL{6lfZ}g=` aaGT.:{l~bfq/sc?#NIS\p[;XZXZzi3o/uASG$ĖvIJNd{wzL왫CO ~Y2~9Ł:Fs Xӵk'[n T?u=5[wsb8C E=q'C-NRbK9~>bٟ;`{ ~O3جU9a=۷v%o]qEk_kk.=tm}~Sƺnr_?Bږ8~₯Kh]ǷmOm;z h;SߞTNo{]2ܽn|يu羳s7/c^vޫ>=?gmm{TY|w+KTT=u׵u?^{m{_plے:܆_|<8ևy"8|>PbNtRV>v go)?3'6;斂ᰖ~`ZL<|ń5a#~:Ͼ0Vx~dL75 ̏Ρ?XHC3gI];m@ŲGPGͥb!%ޘS]Rx#1⨳V$^LN?1..uj Vnw.{'&v1AKK?\5p ɧ6!>Kفn,%5u`?WerP;OԡN݃M'cqBMJl|y8pß̼kǏMYüSc._z΢}m*6}{2?Ca]}%%ܹ?M4cOs^@<#fm=ŇrƱS\܉!б^xdkP[zMxc&_jS,U/U/ETߞi!gɽЅIOlӆ^z)^FG uZĔԣ בA_yhwk w1TcWY~oy{?p;v*]οݟ{S>RcXHMW]^o^~p~u=1twWl~v'>֕K/mU7@V׍znzkֺ37^ۖۿM-})nīo-IVg_+׵_}|ɐ[;=\Ӻ5ۯ\;|WC>ݘ~uik!\~K`[m]@7v}~nq O,kEf|gRoz&kr\ĹZY̥Xל?屘t;ϚQ?ceG荅⫬Ol}sxJ1+ؤ:S//4{~:^c[n})3_>H/c^@+t^RҾ.^G>jrgxR|2ޘYTbI3V?tړbȞK݁7'SL:0u`ԁSLxN:p^6ܬWڸYgY:f}hg5ëqnk\ye[SYU7íA^5tC=mn6ܬV^Ֆz*z{Uٞ3_oB=Y'v1,ZrɯW]u=Q?\X[7T{ oq 99N:0u`ԁSLO?WWȟTF>OVIl6Y8<3«ǥ䟧0d1aS?O7CM11Ϭ?m0CĢ6]~P%*qs`Î91_FOCrX6pd޽EoY޵f X՗X{$:R v&25[>L+XK3*zE YTa<<G|+P\c3f_ϥ,104b'<>+}cg֣Xq3`@ٖ.`֨:ւl :ԫ38~8x1Y<6F^pO\֨?T<|w]>r1SO;t}AwJ4/tCꔍܗR/vy(3q G>2į/{]{W|n򖶶?}cmU}Ǐfz~K=5_ѿ?nv?ﷃ[j{nWƊqp6./Y]0\c _Ԏ>v}n}vٗ x\xNj_};zq/|pyn^<'ynq9܎ʬ'sۂT7Rtt屹g:Xmckmԙ5׬8L\=9xֆ\`c'.Āf<|9'8a?Y`ng}!X2}cBrX|)~ё[#'1p{E _<28ggȩϜe.qC*cGGOLK})1``WGSO֏09y:Txt'@FܧܶtOOY]b$|ڍ& _{ѫ^5ܬ?t/_5k׶ f xxI/y;noUmu{cݜ즛+>{xN@Cz>wTqڮz9]ٙoWu*`tw]/}k7s6 us~-yUud{?ukG~z{a`JA~duoU]iՑٖ͑Ӟ~P|Y?y"QR 9́LoJ||g*k :с!'9m>̧ݺY/}E}C/ρڡLtN| NBLF:C\[֖aԞk6O,˾zŤt`3 #[un 198$ޡ_ք<<6djZPR,6\[kCG0}ړcG s_BGE{M\Iѹ>tFX 318#5'6PFAuw9Йly걟0Q^j>a6r_^Yb~n^{ YYns~e9}o%&<=k/ՍگG} 7;1ܬ̟I[YǑ3^v^1uy;{ۇl9,UEۡv]^GDݰ?ڲ۾sݯZY73Y]ڛU?KZ;&'wWoW#xQgvT]ܤnoziw;`|Rahpû-]Pl=1c@?t0=}n0?zfbxeZXuzdg qz,s~ ac`IOg2XQI~s:x1Y :>/z8涖@֚25Zr3\{(Ơב^Pf1)/iږ_6Rװ^\ޘԯBT_<չYy#=&-P'/~|q[U|p=7OvE;ɛz^S퉺z(-8?SÓYrr]̯)n3ᆏ %uqOF}k;h7o}n uAkq Co}ڍCG~JKC-wؽޒ.c#yu]6a9Դ׾/}QYӏ:eN1Sw? Bۋ&(T\QJڐ߾_?hNdIgE'2ėGG;ј괶l7e{y'Mփ=L ܬz˔cd'GYΠbϩ.}ĜE]{o77}5u_v|ƙGS/g.}%_mPR͖j/bz=r+jiR&񉶹nvoxhwMunp?X۱yNvn;9Y۞'뗗mK_[xwnkšW+l\'ND?tOUV;t^g ^kq yjZY?0Z\?'Z~x/)yƆmd}Rbc8c:g:(pRV%ߘNPk4fZhbW71ަ޼7?퇺IO6.}gL>Kz9ijCv^|>_Xiv~.}6K9,[-farM8S Xt.W̠ N,L 2 ˯d10&Ưkb$&4O7BX'臬:&&u:_k/ __}5X@NlȾJ-`z/r=ġׯڌ=L^|u&D`} e1gs}cbCsKL{ L|oI}@/=1g?(=ѻ>jF E^c@!'{֎ 1ȉ݁z'>~~/z2{lNKmґs";fK?(:oAƏaf |߁<_6Grİ:%&6䚐=ᣭeψ1Μ;Sz2/z&kG 8'=)˾s}Ss n~gݷs}ZӮN6c9xA=Ő߰wDLߵ6zk_k+kg׻Ϭ|Uԗ}?nowMc_2 vW\wyEkj=,eYz*?f{=jwnm|d;,k\PϺ]]wWSՈO׫oV 6s+yOܞ,dw;O}Cx>ѯCĺFbE=~Q>cwԼVl3&~zǵ?~"u̼07Y#>3(8 (Ơ{ ?uig&M̾>bǹVlk(2g/I^U8S8k|g,cBdPZ/':Suam zM`z>=>>֑n)^,1u` LpP`$}` &Ns2$'I'OXR>z\>A?O)e֟y1h_7km <1UBe`[(fb?-ƈ e;a^uvکY^Lkׇۈ5f? u:n}1Y_?טyMXF5uoM\д 5v7Z5anԓ: xztC`[[Y|<O prp}}<ĜlK#nkm}B}2nzbC|Yċ1=N1c}\yeΗ8þKۙv^־g6OnֺB˹\yJ}eVAVVOgwShV֍M* EoڡsO|œJzϵ{>\]#?wXbwVԽ]ܘ?<{_Aݯ7b> pzuԤqy 8)5Xt]uxoW/lvЁ52\I?l擪#9K ezc `>Cfڍ6d'f-bvv[O76je>uҏH]yDW |:Mʙ l> y>*? \r8}[WFb&du*kS]S)C[jޑ:3i?s,>kPQFF}qY+)ϲ?Kف,%5u`?@9Srzk<#CN}9`V)C2XeOʽPʽ.y> e^G:e>RqA:=-v!^b?xbZA] gmg a155M>Vg>u?:s [#ذn8RS7ѩVVg'Asdonj[8"Z1cy.3\t |xr?'36|3UOdž0x&رYcchWsڧn}:쉶^l l#<}Aٳx1yׁn֛–:d׬Y3'>1'暨 ;=L3X?%5Bbgk"zꔥ֤,3L}CMڤzNɳg?Ol)>l7x&8.PW6~]y1T # 7`Xwc%.8=nen~9[;Sc[7 ܔ_VOS[zo=_?P}\ؘ9?0x³h6#ßm5SyЇ<ج x&<֙ט3Ą*LA kE?ۖsN3 F֒6xp)2}1@cS+֢>^e#NƉ6JG'~n/uPRq7wb~&I%<9KL&y9r[gv.Fh_(=i;ص֡ U'f~z_TnKxKT-ڥ,UOOa׳PvcK]N&1=0:v⟭ՙW]tO͝-ny6ffŗ]־/ 7oҗmgs~EW=eRdsmzݛ#&¸}/oyy* f[?X?Z;Jy9{[g7c[O=ӵu}gC~60뇱Mokq?G ?!Px4<.<8:IC}3z's!;xmb):.tI>g.1q^Ę'|58cKn,|C8|BONlח}_1 |ڒT?R+3c>CimʋƉP}6jk4/zmf3N]R{%N֚8bI۬I7}>)=/Jb?_H{|21'&̪GX.uR|{κ+_w_O G^ʙ]u?H{ 7 q:׭֫}zҖ1=? /o,vn׷SvgSq)lcǨ1R|ĕm1fO:+|,2CԚijqT\QuV JrPXJxϏ6t[5n)s't6u`):0ݰ_.N\믲"Vx|ǜv51̙/ /R ufֈᯨꋍɯ#}]~[=}9퀞P {֓x]_RZ84cąǯB]$ơ xxN}YS?S=Xg:7F]GmC25dt.&Ll as?ġ'C,|#zJM&tL{.6bIs髟9tJ0/u8z^=~)ڥDoY'Il&:^e}Ǩ Ħ^ F]nKk/gc c_u$:1':b:WSkIQN}'ɺ&×aa۝ŹH]0 1&Ltb؟2?6ec3AC@}K^^c5~G{ _e{no{p߸jdϺ]Eӵmݱr翘F7{o[U-s~{ݬ_Uo#=˾om^!g=}w=\†yW]>3k c?lux#&X_&66tU/}>}rmeM?u4֯/< IDATݎbngon!WY,s1ѩUUS詙ډeO,w"3ת /Ћ=Y\vK[֥W'.1ы :Ћ隠&VRy1|Knxf~_3OYe(׃7'8v0o]}ߵ&ԁ#>PkXT؜\;O>1ѫ0ze}A|~2Ϝe<:g9zІ^;'5w1Cjsy2c,0=<^'꫇W_ ?!]smg=mM7WSg9uՎ:]u xH]܇? GekdzFlj>jwlx՟kyj۫ZX[Q?Z-znQgǾEcybߨ@?lLb\#n)(u^j'Y33\<X~F?Ѝ\Θ^OuGmԕ<:AOYQ_146bNuPӮ.ך{qٳޏx1`?2}`CLߴSx=`#}AP$gPת=&e'bKh'O\Ym|IԁSDȃt֖'N21' d{gSlπωNL1H}KG,|#]742:4ʋl2N~`V2 p9=QꒂwM@~ecf5n%BF?s@lFcSu]3O C|h~faRk_yK$ޡ <ÿŀfR}tNzTa5Ϙn,VǨR|2n>}p{Nm6 N3?zdE}?۔zzX:dM@ns܇ջ:'%}+P&CluYCoC<'57W~5 .n_PhwMo}׽mԓ;7xbY7yzˊ.'7uкyi߸v_mo8L9Pu߽5WdGm?|K[zc췶N]^^vVͫFf{9紻j]л⹧L0ւ ﵡ=!pχ=W e])G3 w,\ i3.gc|#u7;& Fnu*>G6mA#__r;C\=v/'ƾcc&Muϊ_uOK\}o>8~R?(FtdC܏3?~lsE]XO Ә:lvWf {ԁSL:0u`ԁS?ws#~햫j523?G=\OZ7wSkK^u6 !u[pɠMY4Z~vV-׼@xOʓPr2uRdjL=<InfGxt%=6)'9~|%~?s5B~ݠ^myK=E:7=֌,fք/1nlL'=AGu}n|制L`Js |X_ֆXkR6VZacO|q[>bf pow- ~G}bsax(lcmȮ\Ģ69̓z̫?xcǦ?5W'\LJiz(~{^kw"GXr='><δ%|~bUxaߐV{nV؞ʬm<./Aa:OCϾ&:ybN;zxe07#.kWջi8 9o|c{n֯דܴ^OЯ:ж_Y7Zî\sh[{vVO^kOԱٞ'`}zk3.V9z|=aϻ!{86:=9Ep"&xx xҞ;z3k1~5I[_uz]4172sX3z95BNG6C07~߲>l)ću@Gn}&WN|g %~ƁR>S]`#/.jDړz3sl3s1ٯ;C:zx\]C ,2FN=o,z}N'58XsMRJ{[,SJēkS qu lROZ,vB9y'sx>LbK3y:1 rkbCPgT?d}Gu^kz_/)C]k_z{^sC y.'N_3AO1c/1CM搪C8GypkO|ڌNL1j1:qyKN ؗA{E>eK Ok >ȟ䱙_ fRڱ9ye]@_^]X+`t_̞6.Eo~7?\Z!>8u^/&vdcsgCY/#3#9%~L/77õzk5V8p]ݾt>o^[/3űb.=w5x|y}^Qq[?spӞ?F{bG;馶e^n,bwMu~U0Q7Wr=VׄTo}{_3^NY0yXu]ϯWGh?܅/s~YN_x]woxCqߍ79^sK BpmJ5;;mAu'>o8xq`Q[2|бc3 [_}L\xH@g/3^>w)g2j_gf|qjj#GE?6G}7{b5=2PbR}}nPc#uo=X);'1s-4ns%XҞPꔡԳylƚ5bwI/1܇ȹeĸ_a詧sm%.C:{\z ŏCvpY{柏ǡ:c;cU}K?g+`|r.H"?t^yC&+:[2zWxӞws~cMoM]Y&z=ڢ4whk_ZykWvo߸~mkvPR~OXk״#mVxD{;w_[]j][Y1McRw`ap=C9>{"Bb6/ %~L0%k@n1Q޴ 6dj@& F3pA~'D~}g+ &(fz7i>|d."IL{)&*ϚQ:wP#z匣>eXێ:-,Nڴm̞={@O (;:QOONYҀe=ڡ nKEǗwњ3>2vrO|k bR_;ћ_ak,4u%5f>_TKnY{t|$>d?qH\ok'.ׂPM[O&:k7ΚCuW𹍩;kkc'y9ձ 5ꠞIbq-Ka@d\_I>&`›N=} x:}MJfU]yO}mwÃ^>k8;90Yteո9ך7T-n//Vk{ߴտh;: 忮v?ܮomvsǞcto*\feoda zfiX )ۓ\KS}X Vy8hƂD^_q/njJ1. OF|{A1}֌:ds6Ueg$y/.1Zwg>ul/zd\Ǘ `Z\چ=9nvԇ>s3O_8!f=ԛ5CQlsحMObIzu4-JL1ե&:}?cGlNpٗf.0mkϸc#[gG}lCg.}wMᘏx'~:ӗ+}?1l}\~R|L`?,{)Q֗=u$.|R5?mHG,cI?u`_:0ݰߗM1SL:0u`ԁSLHav nc^zjz~w_vamE,YOn㮇niG>{_]}˗'ևBV._.:v?6Ҷ658w77<w<-$L:0u`ԁS~n9?Ao^'2v'?1姳 tB'<?!ΜJ_P`+8 {CmNpN~y(2S];*uN0fn1&a-5?4I͗}` 2"a\߀/БׄP?b}|=Zu]'ꚏ?}[;u'Եno{ɾo'Oo'l<Zo﷯hzWfƻmv߶M~^Pwf;vmk&r{=U~`w`ٱǶ]Uz w=xw7~z+wdU_>l_j[^X}7уD>JϠ}=/X\g.&mL-R|S^eRF@ S;yɓ1R։:0c^}O'3nx ^20Njs7"Y N|kub?WGG/͵ Iw IDAT\ef?0egq)ǶqbkG77xj>x~# O<u``8Aԁ#:=&uem[>N,iGgsFny1⊩nql'sƑϭmS w@t]?8c@̓_[\bAB]H;ẒZ%9ɓ=q̬'CԺg~agCNtK[NaϮn~M8\wSl|/ڌA9Yz&Uuc:&IO_dlsX41і=mLW>>eǖk\C"mbS7}<~8_+FLmčiLt#swpaw8w |+.0wSsNg;etw >=V7Wp~m=ѾnssNjtSpG_WVnyr۶cS;k~7kOu;~x^?0^|%/vw_>=1.me] qT&NXYzXԈl-jv cf 8FXغĐ1A%Nڴ'v_SM-Z˼%?^@!#kRSS/&v2~b?bc<թ_Qq';ﭧԟW7iDfciz e[_ԓܬ? ZP7jW3Qvi̿m^p9^ѶTU}*Z{}wQ5ACWui\n7%ozMOzrۙn')3]XĄ]l029 \#b'9I?l8jg\ŏ!X~Vo.ר 5A.Ff~jNr[zh>?`}(gY95P0kv=y9IY==?1xPIL,Q!Rl LsֹOadk ϑ8i㹯7n#rF͇_G=}5v0C}xs6caGV}Rqb(uMD,U~_* gLO8.A=+{#gm֒%>{c!>y a=S=ˏa믭S?˦t~K6Rc9IBuGb΢9g>fhU7K籟x=͸{ /}ӯg~14 m)Vu=Z{g*[tofl7 bI?z`<)os]_e}$M_J;ӆ.{no'W x~U0Qt7Wݠ/~{83g=m(uC{e_]Co׶s׎<^sCl\7VV*Jf+'a_n?n[YYiύ~C퉊YY?I3^!~lac)mk֩^Y{_ڟ3&>>m yne,}k昵6qz1?m!yzy Occ cXsʿж6o=\~֥0/n/[bNtȼZ$hќ=)jOD_knk'שM_)P9ՙbjM|^ΜƉ^.$2O/4e(v1f |u/qR7}TMZ74֒ss)b'hc5چ,%H FO/x=}pq8P"'hJd )SEq类d7&ս?:6MYk^UNݺu꼘N>+(]^1Ƙ^rs8r*6ŗϫ/1Xyo_\/Zּrccf`|"ӑcs?9Ly| gmkǟ}vXy>u7s~CBκU!{~_n;y _Ƿ\Z #==v_n[;A\mjJ[Wq͛۽H~BK/.l&\3Frޘ&c37fA\ {b.#}<-{:K}Ƹy3jtc9^l=p_?,2󞃩N1-=_}nwm3Wk,u2nbX˞ϊ'Vw8wk:]052| ?^偛vǎrUgst_8<*Gⰶ\\/'G77~ڈ|=NxOxR?׆C֓2~֦_dna~_2sר L2E;M,>̝vbO?CM_Lu#6D)E]g?kGzp#kF-s,xW=]cb96tK,;=NDz$Q'2DulKuԏJL[x/}Ӈz A1a~R/BAY/ dȵ;ys]aCGo.p!`-Pʃ^ݚİxp'1\8Ga![FzbSo:9i#^gZ.'$zr'l_meH'wѣc%xGƇ!uA\Bwdȫ'd>!:g!ȐcnUw㶮zپPw3XlY=W߿U3^y՛hVzAX9ǚ7ۿnc튟}ܞ>^P' o]=~W= nAsO;#<׿]S?.{ 7 x{۾Ϸ|W~wxG71l'A_LJƱE<`Üx.̯#؈'=$&qr^?b%Q5#3$|uO&Fu96kc v@\u-1gm!s r![hkafa{J29ї9%K }Vgɚ"J_.ؿr+ztAmGv#s :2>!>C .R=?%/prI~#1\:/9z =IXfx<&zg,Z&rkfNj?G sȚCXyr anD,:A >>P&b`߬T'Ϛ$u)kKLdH?}\z?qu-}B֪NŔG1y9# G6(Ǿ ?ٓ~mk`'sk'aN.e`B I`Z럘 v?qY kb=ȱqO\XcX3z1YGMb3+ X/s%r1_.g~%dŵv:t{1V~ =֯Y|q"#ss 0ǹswD]66i_]\/!_c?\?'óߟ9X៭9wW8*=x{S+W!7V=S>>nP8bhr_1@y~#8cg˟<w~pe5'7IdMzu1';L)rLq_sl.pݖfȩ>Lkr?|bu9/kMX憛K\}29;1Ş1ƠW GI vb 8Z!bKtXf Q v'V <13uS&ޡc$v綷'bY7z/!3G3V<gú×C/67:;sY"K{;zmbZk}?d ؑ#$rdbskK˩kyew``{P䁞6dڳiχ>ĪK_Çvp`38e451=#K`[>211b@ ޓ|?|;ыO^c'&߁.Eg ju_>cOYkϵ64=S db$á+֪L# F}33=eEvp+1έ_ƊM9s˕?VYuh۞2~}šwُx+u`Y[]oOLc`6}cܯ/\"c>g?7d[Jz~d\)z̜#6s}<}O|@n~{f5VF<筟;} Lbcs@_L}?zh>jr4/3~n,8뜐;7EgJ0zzԑ7>şun,]%fOT-\Q14>H;ri֕N}tƳU@8~s0|qc{mGm]^+ q=턞}SOb#mmpkQGC,$z|8n0g<֩z9*~KX׫s'!3=!3葘33.mM{ :OȬ\#q-yv{b6k֯eL} uڇܗ^}E7V.ǹqAAqE,2X[͓ڰ5k×"bckH]3vS֪_J&/Q;@p|Pɰv҆_!CxZ|8_opޯ=K8~8g^pGUk5Pp(s뇦u)> `=\ƗꙋL>sÙlcf~tM6^N=ƙ<MԬ5S+b>PSo-sL-d@F^uGIKTO萍F[Xi36~N㉱3ܾepxƺxyꐡs^ȑntRzas̅ fYu_߇`@CFwp\U9x-~_261ܿ)g}~\Xd|O|3E&8D.U?\z^c 1#/dY[p%-:<qg9ؖXs pG@I9<}o7؏ɕ3a > )>(?0qx˾+;O dGgN ے} ?;fgvlqщ5SϼY'zk{ǥ[akK33q!)s1ι#׬D3Hl󦿘`{aiS5a3΍[ÍI ֣Xp|\1Mؓxᨱ'LS ˁّ#? ?rT: rqs[i2v5rTu1[jw7׼Ǹ>y7ϩbve=_ʷ#g ɑr˩>,D{oNOW|o\]֖X~ʉ.)?g9/}+LC.<-rr?/M5>>O8yxy.=P5?ƭ[Ԏ8+'wßBb|B#u/|io|c?lgꏬ;@ y4o=Vm|#W_.b.巖9wgYr㭙XeJi9_)&vu#,wg_{f׏͗97\3|/e /e{E`…2y/<c2!W^o^bz,.ڧ΋$[.kljvKQܽ9}=^ϫ?qhsY藳y::zyssrb4/u{*Jג5-;^|־;K{;RRxֻR@|v)go7V,k1ѫ]OKzUumSMse8N!mcꉯRvUm;;̷ָ֭C<0NOG[^rkκ+sk}mybnk-ó[7?R IDAT.{Xgɕɓ5#"CYwl9K_\%j7c1yfi9;ȜzT1m0qus1fqY}nbn,ܸԭ,6ʹZZ >1z>K7Y{R:g>L,yV/曅5Lp`O_5$w>~ ?rR3ր:;9 </_ /2 8~Íf5%8D=r̍9smB ȼR2Z8g?A&7k&m֚֎s9⋾9ca~s_{iyC RweN^+n}lodpzάٚSKK=ɭ1mG_yCN֫/fn䜓XjG9X |6Cܯ+)k?k7ϋ< 7zaOy'5q _|S1( /"9k#q3#s~kb?C_ ?a1߁:s{N}l{O76raܿ'Ἇref> pT>rlG\~j?N^dz>' [wo~wsȵjXwU}uGӇ^=|xmc6ض)kgq<|`~roP;rWwni߻ls~+ʹ㨺{zWfg+gs_.ۏb<Юi}퉇nt!{{=B23Ȟ5 X0waDD>!ɮQX` }?]O{[?'_{ pz=CxtA!o=̩'y :+גG|L`]xM;8':þc~E/;#13CZ]/6u?9>e.yS J]iVvj}Oԁt~;:@m|r~7N?;~xP'L0y1:X`# Xà{LC5`E@O=o=>Q1uR5ckȾGX?1 IhF,6}o|cN=|nm1 ,&s4,8Ջ8.frzn\ycw_Ϻr-^|?s碟:5cCێxxAd]ɕ3y,y'g.1;@>O,sbxشc=x|)?~{?9q3q`3Ѿׁ_<`%|沍$=GϘ{2}<8 5I2}YK։圇6r!<?OK>vwΪGiS{X럩X~u->qG{v;U[nWq;=^G? ˞^*~lފ;λ!|v±36=]y>~(tHt]x OWMag݅c>]ϫ="u~g?;F:{F1~.`]R/6:vGG;Eo (m9Gŵ(3ubo Ӻg\;X̩a-#vmK;'OօE_t=&ZggkV'7sה|=zh>\x]z[;ڍ3vdo ،G2aO֡޼/&5so~r恻]y}.q#[5O[ꌇC;w0Ƌ~rLt{hs8:3=AmA3NXpUh0'{}`n qfp@Nt]CM?G=:l nkt.9r ֩:IEu꣟0K=ۈw\:07G֜ƛC?pc6|1^^7}Ͻܹ8o1]oƀvBgcg,~;+1r7~NǚFoY5;+ڼ 65A֖kךqd5?gL֗N<΍cוּ㋏2CBΚY_\[Zsw`V}Y7;u? =G@o 1J9߯C:bT l~pr{.L b}]횺~ԋ.jՏ>U?u׵#su7źmԅ#O9=x׼fhahlOQŵ5:ynpI AĘcp̩];)'q{,cȕsukω/V_.s~?[>XWw?WX8ۓwwu!؜׎:7oꪶ#v|*lԁSL:0ށLWPO)w1 n3\,968c')&\ vN9߾?d|]9#'ƃ X+WpqƸg>SixtٿxrGzt},6ϒe1N˼CsYkVo}w}l|d;s>^bO?({lR?6+08g=22qaǻ'1u8g-8Dc=| N;Zw_{7{Mz̡u}?Y;.(.,uU@?v.n|m>]S=vCڎwvmg&wɿnL9z\xWڈU6.vHOM1X5|ϟ?iWC<862k!`E;SXXRƋMO9WS_lsXq}&V?b':';՞=ež:upAA܃?zbu.?G9'|8A~ys #rXHuApdٺC&zY?\+ $2g'G^GNuK?T)~y̍ Encb% \68b ~N ,f0/5R' pz} 66wzڌ]K>xr1\pZ{_syO |ȑ:?u+vdq}M>Lй_6xõgNq69:y_=7vB@?'V\yQ?}2vV.},SNlC_{xdׂ8_<̑_rc>G]=#zz}9~y8Yrg^dۻ;>@'|~6g@zWJL< }8Ǻϐȇ>V6!ι8;տOw~CힺXL=~z̶{mگug?]q<:_넲=W;zW/vWo0#/g+o?'31fqqz;Vk3'ħvpuo|cσz?i>)ǹ0g@.2wù s[(9B7!woGć(2 AWO,vdjbӇ9D~?VA9xzi zCۘs%x':j_c&6׺7$5Ɖ޵X9簫ı3 Cyp\|qLӧ׻nq?`~jf=38-`G\#ף7_䱚CѺ@n=Oŗ^n gzf>vJ]?MojGtR{:LnoG_s᧶|Oڃ^~z7w~=Su#Ok'pa;o{vUN;OՅGٶoM.G<Vc/]+>ͶzᇇqG;eG=gWsz?Q,a޺žoT|6O}?mn_dpzW}gǏx;x%2Ī×ubNe}xON]r@_!ѹϡSƇ^LD6ߔCPS1̉>˹'M9sIiS&R.qӧ}J`?7~cAs1{/Y|1ҟl3k':kHda<ޢԈLsTs뛘/{Nnu_z68!d:y37eݎĤꧯP/}O{ꈥ?Ndq::0]SpA1<`ȅy7F \|yn-|E-`CȮC>5QPǖÈh19  b%^Pncsp1yLؐdNtbR!FȒ䄰cv`:`N5Z?1"7qbMؙCz5:2lUr0sNu":jx97Dq}=kDGnt ='I=&6gb4M~X;\,ԫ3#ĞybbĶN?Z!6I>"}}?maGv8/vb˵#'? Fƚ?1vO̬Ӻt׉]y ya?FNm2gw0Ճ '+:uu/Ƨ.]_kuDLSFⓌÉG'G`%Cap.NEzi8Xrm͇NKc~gԋ dמ1|tK?Go\r񣮱xs3ob-Gu{^;ı~WQo)9:gǡ[)'I~ح_\9q^,9k|rNy|ܮ_O.9}Xpه̱IUsb=jON&ǧ.SſpQ퐺8>Rҏ޷Mua}W<.Ww#b_b>KU}t{^k㱺q嗷Wdx]׎=_wp8E>w£|v?vV #^vHmIn#F~p9A,~UC97F_XOߌMX[o3L9t_?7n%Y?r#$罖o,v&z{@~p;gC >=ӧϛH?Wgkan_~.J8c8ķ'uu"9]u鳔y̑:RT IDATyb-rda.e]2v&55L^x>L:0u`ԁSL:0u`+օk7\ii\?rRЏ r{˷;ٹugsu#p.sƹp|.]_ 4_15Yu-ĆL:8yY=:Gu#'FA鹵9R?>$>zmpZC6u$~ҳ~q{Z;̸I:g9+؄_ołs %=ʹDN =/̺3)\DC.tX/S=_?>{J={L{TT?{\=+ྱj8?;mq_Ǽg+f?QjOׅO똽bAMܽ_98msB= w#qm7]uU;-7onohgRTRwگ9珞Oze ~BƗ6f9%~0l#SƊ p?QX=wcڗu[+V#|3Gg.{_}x qwA?u|eͩ.w=Y8k7^}ی3gCX.gl;9u ,HL8zk0iG9h.tcs8gε9S񾏝܁.ekntynKW:̃?}W:L۩eYX/{`FD?\\NT8idsLp1[,u6?\sIϳI_=AG^—9Cl| >#ILuEAf#RLb;O1F OK1اL|_X\y}SfQ\YmE&uc8A_0rMH>pm>:gg`V"oK0u9a9k%V1ˏ=s.Ykrїx?6扡xp1y',օz9_1\M;ܵ.c yF6/);W竩a};ve-ݗw"p/T^sAl|nsqV /KɋȺ~]G.:[OۿS?c۶vRsՏn%υw/n>y.oylP~?XԷ#ovQԝw ?گP="۟d{?|׵~vj#}[u?z3S.M5s'GvL,[#D X֎m)Xc| 9 c߱ۏ޷i6u̱1r[;}n?3n^3FΉг)K﬋Y#wՁ,Ggsc}O?ܼpvH~O}nW=K112ܿŗocȌܧϘ}]N$kQ/ǧgvp;[|8Xd]41|P6N8c@)s2 .e\?\^_N>0Q4?;g!;68)|+ `nAcH^/>sD5?ԆZ98ġ~e. 0PfN}E|^2'VL~©y$kw̩>Л$#^&c[c?ԣ u(;7Gօt+fgvy펺z~uuB]L?W~QO}cu7u7S#mᛍu =@]N|<:~Gw廓'8`=Gc+?wۯﵟ|[mnZNۿݾ϶_ 98f{H1z[?SFdqrre6JreܞYS?_:fřW˩=q[rV*W5.WȻ[:VRǞL~5[{nykU˼mKفggf׺Elu<غ=Q޹Xa^;n~7_ws\Q]OGuk?.@>n׆;[.?ZO{[}-W\ΪuF{G>ҎGlsBqU_ɟcq:@nsXz,w̕kEcceLƍ鴽xnK\_n﮼}c>b}Y)ߝmqzu͒W3q{܎}ԁ{^%i}Sְ~@W +3(Wbr?; o _^$o ĩO},Gv-Kf.|zX;:<5qnS3s:71]bw]֦XOgػcTu7fu=qo-0Ʊzݓr_Ǭz?乆̙v1c8ƈ~kokj;;>&'ȼfE'&/}Tv._w8K<[SJVϺTwhz/X 3^_w6{\oN~k=.z.sŋ;u1 ߢ&.snIm7v٣~h_,|:zm}'[0;Yqr|zy}oZ,XךcrεJKKJsg6mZγ/3}Y}@MNV8 }u_}TZt``]0pfx R /8G_y+Q0?_T&Xe1 _l޹6&6Gk=>EC~]ux l~PO"mĠv㇝j^zNsԒ~fg̭xu _| zM99Iz `n⡃c<àbGߓuɉACsS6 6,\8: 3 16d)kw=G6'~S\zR7,+u;#92s_{Z;Õ3s6Ȍ0!kr en ;(q NmQ Y%ƈ'1ԙ>u:Gqh6k>{sx s.[6 .\f|~hh/~=Y׿N|ov_@-kq{d{xy ^?x<7D6[.lzl,Ț؍q;EӉ}su8US'>jP,/oL_B2ƈ:ؕqp T;wOL뙥''81}ӖkӎN=8oK:kOyR2v{dg̕sL qY̭[8ɭX=9kKg.|9QGc#eq1pZG?c(^iW<[>x/zץNGvOؓ.Nl0raPur|Xb ?Od:n$pT2 :'N)8]zX֚zd|Qt>1̃?NK?p~[q+^#w/ \`9#pe}3%:?8@c^㜋 ϵ;Ci#,hl=a>8z ~9Q?'דgl{6j<|:dC'W}Z ^F7ЁzSkgY7:w_Lc.í]8zq?n~}KpbU?zD+/YO8FXWcۙ* %b8@ϷA<8O~|^@Ȟg/MԴ^VYWXvC=fs]X'zD-X~ki'n<0QHN#N8=1:_<7w1jCѺ{࣏n[{ᇇg[.Ywʣvxmw1=6϶cuN9NBck|b6ð؍uM =Xо80K $uZ6S?Y's|Q2v1sஇ<>f 2gƺcU/k_/ 089O;2Va=r泈N߬5/rg~eĢc'}I`-1Qb`O#r߾~&~\gcxW.k$}ϘonEWe`fmGL8=Fږ++Kcv}9rkQX:wR|˰sp MT83<⃎.BY_mG&6?1C?==11P?NX_FO\Ēg,x!bXfniǘEyiwXH=ٓ!s`C8ŀKsLGpF3p\m}W,1zrA;3Wx1!{֧yw.ge.׎Xa|Av_ϭ }.cu/dƧ?Yz&s0C>b=s'/s:l\+<}7mg^?8 ,|9OՉ-FG̜|Bnk "9ǟ<N/$U/cw[5z^<9qԅ\[0%֑8=>=_nwlc3}Go.K}WvnG qf<1K5 냻Xa܂>: &}3ƵȱcߐqY}3WLx3Ģ#~a38{28ԋ9r/zӹ\1 }zjDz6[}bn~}jO;j>-7F?!ͥzu•M1g̮_r>kg${}(߳wUءܯ%}cvdcyϤvr:~#pGYp9?%? kov3é7]uU;~zb^ێGG/bI1OBϋvc@Y'25Hn0Yp0ͣ@?8֣d{L}Z751ȟzDrS3$}ZԳfzc{ϵTK|'ݺཎ:`F[]O֯ng?z[X.:N|W.!38 <{~-e WOtSnr3Ot r 8B9:b[Zw&:⥌F}'N!;kM1]goO}ʽ4:pt[-?u`(y\ kWǍO.vSL~Yr֌Ob͚Tzgm=_.>G~_.n[xNˍ_Ư_nv-Sjة/G|VӋ|{/-%sEC??'sN+ IDATsd{]?nx.?Q? ˳G/#u ?uaڇB<ϺZϩtIzA<Ǹ.?^w_/usW|SCk &?e~ s7?ʳJK'I,V Kٗ}i_- G[|t`| c99+GnfagY>ަŒ2=k-SLwؿ4Ĝg!|Bp^L?X{Q 1,P+ƀ+/D.@.QHYxbm^cӿ̵${ގ>}/Ed~N.q6VkM^CXrpur rرuzkN]b~<3r=p}c$oӎ,6zbc1f_ΜYì<^y_jAv皷Ěc֬:InfXi-$_;u+I?u`9X F: 7O,{1LsgvԣmGboε3͑c~y:r˭_?8=7R~}ܬuβOt~5ݛbpPD̓\{=wpG?ki14S 0>q8,xCs_D\_!Ёy}䰳n <K \\{KXz#!emK =v/~qY/u C|~%]o.[c=YS?Qp u{M|YkCgVuiG/ѩp{/8^'b] qYC?3ܮ^+:lI2#z1\~UXNcǚr}< ӯ'>1I?cۏ:㕲qng1'uzI֬CLse6?eGzzй-z\rL?tԊ59溑!R׼bȚ͚Gpف~T^n{6rA },5p}D  cC.U@p$tO:.÷oֶ#o||\7;7_|qs{n;ףsn;폩 |b<^w\ϰVuqzxͻ6Թwb=Dx;Ng†;#ڎ eM1s?=DؾarzqAM 8(ꅵ+%YbYk1=1z8ǖ羅/1R 2u[{gk!2vz];~/f?nrBͯ6v Lk0^?jԉ5í<ր?tnN cqd-puEe-ơK6{o~?XmAZ]O3‡&} "/8񇻎z^|q8Cmsd e^|m Sw]\fxBg}]o+3NXn D.cl)㋬6yWs}P3OxB, o|vP=|g<`$q"CsYGχ'=U':ij&1O bCbwg>1${ܼp4HYǾh s ':ǖ~= =Pu2E&?l=-9^0Ϝck"⋹&ܵg~̋ݸAQ/>kݬ/sO8蜛 q z}B_vN}X 6|uez9:\6kJzH,WεXɕY;~@=7#mbff |$8H9m^bQCΘĖKĹԉN!C_K.`K]b^b"gO1\L}D^woܦ_sñw'1ҏI]HJLs=C<"6=si`Hb:8V|E /l0%um󥗶d='n=.3/^Q:t~}|?=\\O~k7.ҟR{Ӿ}UFl.1[|Uyc\sÜX낐P/ī~1nwb*w/I1_ѹON?e8dqR/ou'ז63n-N֞;qgcN.Gf]`15~{Es~0܁}ՁyWqAvQ$W^ Qg,s?t@¦_֐:ӦN,r>`c`3/['gĉcbÉE0|]>Eք\Iރn'Va_7s+'GV_/YK_bvk612^#d;˸VyeduKٹۦrYsVjO cN9S5g)G]_'znGf;Fe2|O22 ܖ(Μa}cV78}ΗqM`^yzvsrW9q]{6/A%>̍u|s@/by~`,Zѣ;.Pu3`G?:u9Q:ԅm'yU;d_[8:\QɯG>d-`;g^qp 'Gzy2?N 87f E Ϛw-<~ŚSo_ A]˵kW]xGUL!|B,5ͯ-óG%}8|A?u@`x,6Zɉ;'>:J@`=ۋ̅rц^:8ڐvཧCn>Ggs| s?uϵ1cse\ƀ-!;iFdA^zWuSܼrGoyƂKNn &s0ט5MJ\uPM=̩ILqeM`coY2RƩ?s1MNm̾cf]T 3ۗmGE_)[+WbOug7G}⋝z3s0ݏ!;\l*/_ /z@]j=̟^.t8Qq8\U?z=uz~-hR9~AUYOp=|.shuX쩧zUn-/8.ĺٷP/nwcd/y4 :Ry C=9ѱO0:ȍ^_egЏz|mZgbRC8[IL|CYgNpԏN"9`~N1GvmΧ8ubO=%됬<9W/Za=GS693A6R}HX8q r@|Iç%X=1Yk>u_^rY+~PҦ޾s/`\B؜uf`ub͚X) ڬ89vk} @u>ʉC[rsؐ͝d1Wc'aRG??]ɟ#6̣> 0/XK8S19GI)21`C.u$ǖ>+}Й_=suʙ'e!O>Nym'wb9"s"cM?uu©{zi __}_?EuÅx)g= ǟuÝ[z.uTw _Z|3.sc+wXϚbN+;1:Ϭ_Їw.dž/wsz5SkF1W<hnKbr*ÕI.g.Q_;d?6ɮTeę"gסG7:wuh|p=R/oG}#HX~Б:?cC+%Κ+:]NE<@C.OJ=Iu\8u$yobM"swwt`w'P7q悃II_eEuGcgd=e<&]赡Ǟ9{1g=ă8A/:cKҷ3} q[%k(Z"w:.﹈.szkҮOÿ`1\"ͭ=yO28rdw]!F}YЇX|%>#u7 s5Y2!&zuXƀ7EGI~CwX s?92:9k>p.~/z.u~g {K?1swrܪ.o/|8ssq WÖ:qyO-W_=[y?(C+5~Ȗ7_u}.ֻ6{kr-}푱zv8\~i7?? FnSC\KS/#?q|3۞oĂ'7k&7^n*zJ䤞y6`n1x+>ރ{/>>G7OE۠]kn~0nk'^-`upXpsxc?` fpr9с9u;:Hٞש~;v dN= r35pI֒/yA6b@DWcVú=Go9#̍Obɍ.z|ɉ?:}m;ړc[D{r&gMbOG-(mؼưN%2$@ԍ vBO. =m<]:jrd s~db$.&'鋌>uj<̵/z&zILz@qrqk 2cń;Ü8)etbh':8ɑutpz9gppk?Q:a'朚f_aϜ'\,|M_zԿ^9 k**}=)Z9967 tnS3!88 uS (}1'KḄo<ț5S6s5&>9mG{#hx3^Q8#q .Plq8Cr!>=2^OBݙz ?Fz]7m뜾?K؈"jH? 1ig>|r K3FCֈX'⿌C?T9cNn~Jbأ?˹뗱g،73C~%g!9;+-"Ă{`v,!r< 1|0!!"fxϑڬ<"CN|$'"̅͹ecH}w-حsl;o%}K(z95 ?P=~粎xgN,xȵub+:*1O sm<:tCaMc̶~^e#؜=v3 ԓ/e1Ֆ5uS^>G%u0.Owg>sn?.層xKm[#O;m8.~[pѾ|~^?Z{u=^;|m'0vu̝ȓv IDAT{ˆ~û׼>R򩑋[B\+rYv=t,?Nq}uM<I_O_lj'zS쾅:磲^[}7vOc2ut̩.g'h'9GMXG|*2w]?쒸pelSsc5:25iw>;%:\:EuƦM\_9里}H9IƧ=F{SN;eue8OՆ.5g 3;/ms;0w`܁sΨIsҙg7]GՅ{u}G#nnሓN_ᠺYw?^w:Xwk[Ş[1:ߨgࢋwg=ϵZ]?s]k.dBs;0w`܁D 4?|SbK9Gdi_#;?9'&k{^Dcd !֨՗n׺3_![o1G)sޫgl]pk5cuZTubIKKP8~'tZ\9ژ RG]`%Yzsu\Wzxϭufu~hGbs cN2\>%Wg^t#CFF3?k(k8`%/q?qCy#ku3y5NpcWơɭGgwmy2#ۚH|(3qʹ:q;}31A~>u =78<~(κ~HP)soX_(؝u7=C[SNvCuwx].UwwyuQ珯gsr:<9p'?9~{Qc#s>q̵MLkhkq;G=lnGG6׎^tȽ:8GƦkF6FF-J|b9c7ÕIr]%&]g3Ib(󦝼P]7Or?P'w'5^|Rf::y9K\G|1-Uڧ85MM=9R]ckXԐu }ܦغ_=>Øz#_)]qpY/9O;9Gvvի?m|,gr>;_~ ޏE~>?+~xe8K1IJ'悟T鯨gʟ?1\[<nspOc{1ᖷmsG?:/p<V;[b8.$R[}.Wf5qzXt]5쬋KxýgM5O'&|GiWXr`.qvo6^ [7 5379O bR@Ơ]/`ve!3\uy*'>b®k"^ ulz}w`o;0_pPB"C,7~xv=a V=qe:8zqp<%f`rwO̩/ȟ>PϝUo;s.zzo?cݹú3 ;¼S~T &yГ?z!8g4z[">c2>I^-sw;Y{Yuz1_>ߺy ıV5ͬ]49Iʜm#6yf-xK}Y{X_r0F8"26'n5smn;1q03%&&K?l&1Xtb(Sk&LJNn?9kx9A:ø'}|kR|p^_kZ<}aMY\AΉ1~P{/<leٗ|o!{\0} u/18tX57b}=1f<~{{؎ k_yCz^=?cO~pK Dy=?B Rϲ?ovu_?^?po{aۋ^4'UϫKsN|>IOάzZ0kn:<ɾ3ܟw6ڲ̣]>qag۳^e?#ׁuՏt ȑ2Hkv69̃2<"N)~֢OU'sF2\2NL\cPO6rΩl)1ku;u1#냜zsC)3V?0:G?b}oCeÇ&/ M?Zu˳pnՋ_kzI+|ׁ=א~1:80%6zX1ћ}z lv\iloCs iy|(|R\_Ɂ~ӿˉz| @IK ͹JLκun_o}SOPﶶ.37%?e:WapOE^76k]g#]som6!d*=YJp2\R\;\[cnu͞gƞ~4;h~0W]7F }}5:asOtÑsGϲ}#̎z|Ύ3 >۫햺w~g |]V>Pw[0K-u~;돬WԹn8 O< /yoSH^o{z-MMY2׻wombR^,2 hmQ̪e%*u*~+u CrmCz5=ع)]bkOrs7i1w`7*޳܁,@<ˍg>t̻ݿ]\R=mǝ B[tN>w9pw= q֢k`8:.s\s|O-}'89ȮYkbakON:]o3OQ\ܡ̕;wO;zLV0⤟5aǼK߮ϼ=zi7:_ĵ6^PcOꀌS/+Lr>}R)Oβ<7{+M{{ج+q?u=ƹrc֋3޵%Wq@i\I%U WaocBmu:;q?, u~wӯpB=~g=z|.IpOiϣo~/x-ovGW-G_7֝yuc{"ޔTཿg\iW;9//ӎ==:I}m <$)!O/FΧ#|7e6ͷѸej1w{WI.M<qG | 1ʗ{ Cqrk'9O+}[cƋʉ,fzζ/Ct}F!^(>yPGsјFcƅedy92^W&C(xAP5>+ޓ5bO21~%=v_p"}_B8m F~BC7ՏQp@SZr}?CrbX .a!̟P'8`Bf<ˍ9\l1}_\pK?`5l^Uf?{]} ˹6Ƌzf땾7oQ)2u?:`lɟ5"NOPρz8g̭=nRO rHu2n__ 3>փ,Qu+/G~ xPa.d߯I?1KN?]x/kdn~AkWtSucBp挩Z͉odr3;6cئI҆pt?t~V9wJ?dFse.'D}/z2O<Ơ#?㛟ps3Tϕ?~g,LaT́o.B].G՝>pЛ< cn:n!:7.Ϩgcp>Y\gՅG=kԯ^?t:9Q s8=IL{I!~92/: D&O~VW?Ae̕s6z5s | s8K^\>au`GWno3v1M?t[:9<ִ{^:RO-zen̅lvlW1YO(FbJb-Z:kNp\\_́mz^ГGҏǦ^?kFĜa=Q25/S'>6'J[ƌe&v`ϻ~AgL9vNPW t;W,9EDNjSY/0'\kCO0|g=C/\xvG9^$GL~~lb>d߹\+vEf;@bK05/'FXt:#A&xc}?͋2?21ׇxbmԍL>Is@ .zb$0siuþqnZ̯y'0r_OcNnF13dbRE&vY>/#3Nb]'\ 泦)nK} "e}Ysy֎aGS3ϢZX 8V9I=^K2~k^CZ3V_8rL d~yHvmj(k/oqsq`y xc/&Ͻ~p n9|uj3.?q PHA`'Ƹg=kSfS}}Ll{h :&^WV <纺/;~Ndo,#~G3ےN/ԏ\tZEFm]*{ksjF6cI!#;xl֕>8z'X|bdY,5䒘;ѵl]Ur~~ú JyTz.S}O:K )L|x|}Nr}kTfζTS1C?q\ro߾konfH)c>cz^P=k"Fl8߱:ۭ?k[[1ך+WE~ktɱ!'#2[vQ|fw``E^r!:< 92$ϦsiO}0K;8p~^y`';Lo N8aF+E:jgxOcm86 s+˱o5/۵16>) '_1I_3S̉__b#yͭ:gdko.7G>l>s3$jr ƠK~؈齘Ot91yjN{s7~ +c5Z~pt⨷֜+'|Χ]!g5'G|XuX8e2O(}UyX_(wb_ؙ[75=slnx3Vcu{rӜr|)?ur+90<4\\y<0..?us}} ^ߒa׼{Ho8._^(q\8ح7/ |M/?sY=~瀪w'9Om.?]Y?׆;om\3뵇ʮFi*Ve|)ח9\=Cq:9 %}zNz#cH,|`¡'\$(;p"wtU4|b~ :1C!B{_}Wsi~뭷~Ìcsl^ansi3F?1/Sb:SCxG>bHgdNd0~UKNss}fz:#8d?Kx_rOqN}x̃;~ȋ ;Nv}1kxM]sOsÏ<ɞ}L 68;1G;a&}~Jܭ IDATc.Sanq]O`q} CluZA~qR/XS6F_~ɕWa*cKzrn9{ 3܁uu1N~)Uק l̟i.袥i hfZ/?oЎ+]7E凖佞)U{2:p<,Lb@uH6Z*\K]߈hEDo8x̏?Ҳ{X{}L~_e۫k͚㶺Ky^;U~ːI~W /@z3'r`zU*q[gU?4'ck\)m/Gv:;쏮mu{m~ޒ]au;Emu1䮚ݳ?Kwɟ Teu!yX_~܂cJ>nf/?{3oGSۗ:f8UјU6ZFױ)ZヒG=v\LO~ iߟEk5,NoMQ\uӖrO23;;0a{ O}SA>b|(X~8\^? a$̩7E9u2enqΓ+ӹvH.Z.cLYr[^t^I֟~]}.Z[ͼ8'>OE<,F.G?192N]DZ6|%vLjѶg>OEF(a3O$7.uU0{1Lqb'7nurؿw5gs۳9|s~7rp>Eev\,L99s4:dH~ue35srwk_wPw[7Zw^ϙ=1ZkβXϷQ=a{X[^;?yPE}շ'oyk<|9/gs.ۿﰿez8SA7E8_R.R,VS۲ϭ E~7_Őw1r|3z9w9z Ƨ^)ç8'g@v>#`gSsqS357u7RG=)O&YOg=aX;1/H}%ҭY׹{߁pF`>N"6zի;G Їs9gt xK^2|WbַM;s)s\f@%cCsX=!uC!W U6vEh95zw ^X"usyl鰺8jkmF%>ŀ8d~a]޵ZX2 Yb-B%u /1N=a.&`,`d R6[\rlZ/:a }f{0]zS6ב)Sg|,$r`?C~ׇY#3kk}CŠ޾!2L]щ\#fc:|̔N/uI]< WGnrr`MO=fi}pg sx&1ipo>gCy9FSy31>}gbGSLzX@^c'>W\%&zz-2?wՓ{ :rBoT xbs19)3OLcǠ^:ExBd-e6cѹvזn/OIbX\pb=.`w?1NS>`*cϵo<['sk;z1w7\=1ͧ}s6{h:c>vx?:kx _8wϞ Xp{N_~'V8>@p<5@\}=k?9$#;oYmZ=sw81/ަN<%6|-cXx'm=y_T^㧰{.ɑ|c-3{6''3 wT'w};S^_yY#RW}&w~,s993Mߴ? e:7eXN-ʡybo9'<׬Xe2{*zqd%_WN{IHe;sUN|v*%vʫ/z)ub> W߹CMЯB;kudbC)Y7w`;0_x<G k]4܁s;0w`CEx7"m܉YSn:zTo \{ֺz=.[ckbY։Qm'?3uO2U{=2﬿~3ᇿ;AH39wԅyhq8g،?J{O-zWUsWz(qG񡟹>|X[>V v mA?X=u'8ԊdQkpNWܷ̥ΕLB~Gtb㾜X:KLpޔDH2V.+ut܎g>zWLC9a]>:=xp<>nѱ^v*X0:c.Vy7z:3->I} Lq ;7ޚ];zsK-!>jcZӏ\ۭcO~g;/ovGgu;w^77??/4JzxڸKᇄox9sbu@Ẃ/ b<ȫ۸IO _| 0Z!k>*:ɜ|~hS}agaK_;q?#°;K91ߚIM6$fj391c,:ɚSc'&֟l G?[\㐇2c*ݾǁm^eSf?U;1GXVɉs{olQ%sY ٯWh|rd񳦌Q'zi_$sizQ/w֯u}ua~?ft<>^ viUW#`UpY/]/ ^T =scI,ue:G^g?\_+2Qϱ? Ug9a5CwnnL9s.}CpE}cb<K.m3~Gg,z3>N|ǻy=u;綣LX׊,vqXx/k҇=W?{n?NXfk_/>%uIcrr#7z6_Оb~&7W"ԁm,w*?1Y1r1n3eq'eu,1`S9?ͩLey~h?Gq`a3ewgtਣ^Ok1H ^{𖷼>qmu":w2fr4^xn5'|h}'bC3h9p+2p@7~ȝŖ?v&u<\ =u{~É9Q1<}# ,.9~br-a/^9ŠtFMrS0g@}8޵Xѹf0ܮ6&^3Bnom̼0q$63e0:kSӔ,gt27sHDSOC26kL?k0\pNO]S`NL} \1sA:щ?זEdmp1sur㘻igwY;Qk؊kf~7fZEy 9z ϭb=u_*='r.WG {}b}۹?:dl3=XjaLLŴYBֆXj` YZmJ_uZk&F}?p|!lz!)G/><$\Lyb=q'>8xo´[s`p_&72yevik%31ye.#񬓼YyMG ?l~;ogqK_ts?񂽟BĠn_<>y'̅u'ƨB,~NL?\ ]6|#s?7|.?.揯ߡ|GwTCv4 IDAT6_p7>w w>wغRawHe#}NcMY?}cBӴz1.6ڍ3x_d9GGL!O~3֋̻5JM1?O=>bdM`0ןr*{i)®s;/e<HPЏF|O#;`~2έucMʜ,>q?|gxFI\܎䡯`F_o}]'sd1i˸U7a^sC;<ՏzyN]>|sd̍?syu9Lԋs&9;+!ri['Ī/=1!{&}}{{ y!1K_8}^y3ǡҶD/B&?B8\|?'N 1L;sׁ>{x _8|Qxj],?GQ4gVݻXuo:}{+^1\wug7Y\޳ŵr;:~LCmCNk^{>m"\0Mzs^v):>6wvt]pjrk9wCp>b+;mׁNY_x gsc(񘃇oE:ꄈ:U9Xkk\;uܞ+@skqg#zn~d]/"/3|{ޓ?S܂Hs⹣ `]g=WyLaZ8~|!s cGd} wH#GuI'+8 <`=yp-詓AvbN}F_ 592+bXr[+1KNpjcx,Y\\=\Y[rs[k#cWbH|]O no)6lM̓9XpȚ_kOle\\ekw sR'_uؙ+G 6XDN1`csu^̩ =xSdx(qe=SSSM=ߞe8k&Ƶqc $S603O1үs69p3&Cn=1}_}XmPsA+>F|_FLdq8t͜Bk̉7zv6^ºh~31\Qw?~8/_w+PuL^]wS?:}}㆛'?yvC^9ojb??8[n*: 1=Ć/ x ?gsDOLb?ٺ2\\ ] ATEYeoUX---ӲB͕V/ Ġ! B ᠹ$b;_y|3n&sT}?c|ǜk^{m\=QXOy3l;g>Wnz{bOrbff.y[8[iS>_n9עltDzy9^ÃQzeαZ ױ _lFC7_n}'S-xC_bf͗Czǹˁc9ܸx~zos}'~Yz֥}p0/]zu/̢Ŭ6"OwFv3Bĭjjk~wZzZWb鯦j/yã_x]8M!|_f}/oݘjVIK.ѓga(l9V$/{=rتC^1ZkN3wS9̪f8qm/͊-=|C+U>aèfX.i+bWZu^dk̸s FVv]y{Zqg5lkOK1#^fy΁*V=S-{5&nj;:&g^dbœ vnqt>{A^oR>ж7>p]WLv|7Ed0]?BI׿lO?} |~gmo^v_>\^??}O>ӛK7m_GW7_~}g;O~i_6+y}nf~w*Ŕ?d.bøc(c[·l!uf?9pe$.x6.nXi?+CWn7,KOP!RZdpK?)\i޼.W>p GyNB(Yڋ^.ϧ~X5I_59#;>%oR٫=6?F䩳\|{0ۯX 䦋挫!~_4jfɧ@P=T7.aCꇯ7;*b9-6xVXxs+&y}NVr;0ô~W;۬+nNqe߫1mV=pj+&]> }!jɰ꓌f?w,wgN٪|'<{=f5{8ץ杞gLKOي cCzqW(g 39}֘=f3q6^e/&<|Lˋ'תIgfd=XvݝsЃP.፟;yS~پ}|t}>qu:؜<:/ʛ1M;];by"[H)?Ċs@0~s~BtmvO8m}ܾ337/=}f~GO)~W}ۛެu7z}7O7?/8imwm=s&k{7%_޴ g?)^)ۛo~3ү9Ws3#]؎}|{u:x0owϑlz4aUG]9crSe9g#{Y,p ۴w<1aN!-0ӻ&8ߺ0e=(bTl&5N_=_ȟqm{iVq-f6{)F^oonbo|烍[ѭzd9i=fa.7L<Ws_)+GY9_?yΓ1fZf_қ/w˾>yXq96癭z^.׌:YLg|?&&+B

ſ? 9<Cס΃i[⯺SpV%+{K^W{џ?秷KMȏ~{7ߵ r?~_&w{O߼{72}]8avc lΫ'm=KC6e^u<}_(/9P^mx;&N౏xC?&'?'KKO{N|3ϟ۾}r-ۧqVU)o7g?G|os:utՅ=:|YR˶g8/$-dz"b>e!Ɗ>1mK4ha+ Yܼš= gSOfU/3 =~>۫uf;pvS!7&8&lW>W.w>GW?̞_?W B6iUuzq >ү-d0]s6mjo[?ߔ;9g;oğ/?{{}o/Jy;çoo9x'}s586ݹӹ n=rW[u[{fmy=\6Ӵ5s~מ~~I=lob눧osfn_S>s{3_/=)9x붟goo{ޛӷ7}yvz|uJO߻w¿Ŀ_v?Wgu͘/*&nSnys[W^|ْgq?]]Myhϫ&zW] |{ֽToar=ú-q8lj_,}vU>Oܞ<}f0{ճ NuVK|ֹ+|Zůzx8ް=v',k;tk%?a?c?/^WN78wqg]|nvVvbE?bCVzb?IRbzZ^}t֟{?y ;sx ?MsaS_Q6:,s9iOq{8"?ErЯf`g_y}߬\s GOճpgv~JfyQ@5Z?e1rԎΕ36}3ȰٓgfY΁<ϥ0uXh|ղ7s>q ۣ܎GEsWͰ{uֳas~⋉V+Z-zJތvl*_s9LVxdgoOtW/Փ}!z3v͙M@LbGۓ]|:{gl9uLL;c? t [qWC_:VXyuu1Ydzk\ǻ n.>[1|b8>+ #3cz/sN}_Ԁ^8x~Ogjd}oֿ58_lh/>#}ٗ>t4پW|I">yJ7nq{ֳ_o7[^X}ow ?>d&" ~[fs[3Sg0N Q;do:f7{Xےf$sOZlL%Qͩ+»RMV-sl0F/ʫoFrܪ [n}|9;ìhUou^|1>{3龶=Θ7ð|ra5sڣ5|5ۣYıϟ7I>ϙܛOloQLNa/ll3{cj݅>(^ӧ>iboy[g?'Po7౓ɟIW?qhuB..]]%wŤQyfׅ"^ެEÍFsE~p1 v>`=O8<=uC>UoE~yX~5]Ⱦ˧ۛ;7?OgFyjUշ'q3Oܤr͗"˳W8{R3q~ա{cOb&O]70^Mφ}uncĆg8qD<?*6]j7bUۚTŪcGɳuu5ӫU&sp?n'˅5-)ϘW[y˟vr{Yk ۾g^ͧ>#{:]Y+Uő˗}buoʰZklۜz E/1a yf+IՒ3L:؋ƌ%XMGlD<5/=^=92s/; />d{}=3矾|=t}c)?/eoJs>t.5ޱu|em}m͓Oȿg~QnxKmh>߽{_>aۇ~yz>U߻e<Mivzd{\OCǜ\DR: IDAT0'$ؑ5sز#~o,#t|ZrV;hrQ{6Qdca'ˉO;y^^i6|%=t5p|Ő[z6{"bMoOzè3ooӓ~M=_^|oM޾Ƿ:!?鋾?~vMwMwloOok2߳ad _e/ϭ+_7k~s/ֽͪcG7G䳆:;ZO|ҋG[Ռ)c1cQ}oklgg~]N_(_̌[W?y}VsVV{obR}ߤFaoXoqxmc7M'u@..n4n^qsF! Iu`u 1νy}J~'7}OIj類pCo!YjoG0fn{.88a֗7-ճ3z謊%ozzrŵlpˋV{9ztpfš|LGzx`#v<{1:'lzfr8uPl.cY#Lsi7la%-gv<>[n\k.d9oYz;FaWVìV1t9bfܔ skŇUV}s/n?db=So-;nZҪrOzOò$Ì_r?=ϚV\Kv15]#&V*;nV0ę@dz1&;΁y[<p~Zd!nN5@Zm+9 OXÓBpR'a߹_}Ci>lӟ{ۛ pzV듶˷AK_\>>as~qÏ>s+ʧn_Ǜtzn`'oWv _kߏn_䟜x w֧?6=^8;x6#v)68|Ԭ/cj8rvvq+Olk~[{SêuoĕzS$s>ɁφW8ũC;ͅ+<2Ug61ۇ>V+'ܹw ^Nd8xxcO w-wNP܅}}ޚ^l"l^0s7(\NR9N6}*sXgⴇKUZWa7Ul_3Y>K{gk宿zSo/ƃ®U1~ 0 {=7~<(jگyڮթmx8݇:O{߾'Y~~?oֿs gl_m{aI߷=|7뷯Jf/nmݾrW|¯wlӧn lmu}_moO+ gJ[}=I/C{)~nKocΥU~_ t}M^MgS̳c5gi/^aMu_{A<z<| &qe&Am 7Q6ltr<{|=^Fo :;[+ng|={dxޘA}O Wo]%%&K׸KΗ—-™UcW9_&ۥQor*~}^ cՋOr̒ҳ\Y3afϹ_ ^p9^L/oϦu{=h>bm999e]һL%Nظgs%vkx?'Ŀd37IllO}Em_>c_;~~GN}=~OIN}Ya׼O޾JU?SM{WO/]^#է{y `}݋?3g<~W~.=` M5z{|a&z__ql0ը|l|֌kgPy aOVcbڃ^NxoˏWWybv?%V Uq'6<^3/6UsbS^#ދɶgi~7}֫#^iWzMYI˩s|r:&*< sƬi+^-TykƑŖ'}G81]<_aGqa%=S8~leW'5pN Gꇇy7\s/.^{NN<~q!}o|[=&δ察YKړSLS7Yخig+vqx[=q&Wtsc:YKF'v+=űwya|-f_{@?{kv`#{Y+w$z|=~g pNӶ7? Ocjg'>+v޴>OoݾWo͏yիu||_ooگ==soɟ={2sX8v1铯[Usfz8@t:Za_89_Eb>Ēη9ቃQ^~se=y.gb6ǰ{uf*-{b / FO_b1sN9؎k5!9i11gzz^?ըcv6k0gS[zy!xXOJrs iܧjٜŋ$fNu}/^ݾ۟ؽphow<1ux1\dӅ{w\tg/"bb'>_?csް%Omv/8ȅπiO{ڣo/_…Y\{insp#_ +}ifP 7 X%/d]]l7g|lޞáX}wNV#⳯p5zQbխSN{=ƒ\&vz[z;s9+_O:FWWXT [5sʅӪ'>WzKy#F}_#Oy`L]->M 5U㯆|;i崊70ċ/M=6g(s}sMgOf也jgƖC۬w'&=˝x&';ï ׏a_<[ٻN o7{U}%>z߉D[fC`¸DDNOKݗ|ۛ~wW~u/{zo?g׽>aa}M?s'oUۛݾF燷omnt'dӿ`{SmGO;hT)}˷GHfmg똥GmA|lcc1_лNzb rp'';__PxAq0Zf9)wwW_=S"{i&ګq _ybعUMrfOxᇋoj\ ~( X13ؐ&ѣ5j:;/z;g #=b;kfz8_cU}y*}kU c8Jw}%)[9XC:kof;m?՘y|LANxANzL`}1Ywzfެ;ook_{z?gkp~~Y_E}>w{o?.K}?S7u8F-U?jšl3}'}1ӎ_<6NbW{>6rsFyqsO399]友y{=e\1\fWxjF+Ft&oqnC -yb+.Şw?dlzWn30M2Q5`^+%'䩳|w"ưaf+>={>||$X2*g{{8wU#?lV:&p7쯞=&pL1c 8&pL1[w'w糯?Yoӳ7ם~h<ܛ޴u8/ƽiN78/G oNtL1c x"Mxt^ԟQ|foP>'. =Z0WorxtjG\OY .suš+6L6ԧ"> NpAן)^dƶ喏wgKo/+^9 3fRu^Ņ>?`y a=ݹ̀ǓKG]hwt3o>.5W0/a叫!^>G\f/O 8]7:7ov'91iէoglᮁ]嗓g59]쩿V=\8}vQi+߽w>m> )/xk>3?u8c?׼>o黾[O/ͧlx>_u~~Wۧ7>dj~LonI߾ :Mޮ󭖯)\ꙕY/剭~gXLT.%עôؐ90pBW^1CyxӖ>qλC:9b8ex+7W=NƋOS1jDc k3lpfl|'0ҋz~z*~7𚍸jV_̬{nl>fMU<+VMrzˣ`o:|3yMK.~ kƗ[bVZKv5h^񄚀 .]mMܥ1 h]{q |1sQzVfF/\΀& ,G~|f-f-o\~ ,ߴˋgazƓ!q^Z|^,Nobjɓ=88|mcwU$ ;:O_qV}76qzb>[٦֔&&]Η^ܚ?m家#qY:qSxa:gˎ/+/?RWao>!f^˫Oʞ-ݾb|r,sfvr{-߳\rՉO|[}'ߋV |VӞeğC~|O#?ONjKqS*>7gz6%ww'Ԛ,gP|ivثCo9_8;?}vן~i{SnMW{b[iN`c࠰ɰXp |'P!O-WϏ/x菜F}oޘo&MnorԮ=&Vg N,^T04 IDATSFq9ų`ئBNv|mϼ<1يSbPzxz->䋭<[r[1ÛW{+w ؚkL9[~x {ZWgīwɮVKLvjxw ?'u蜘q{u$ǝ#.GiO5yCusOQ,~oz}v9ӟGodF[#\9H:?8wmox[ϵ/7qoW ^*w>9x3oޫMz}jeD_œ=þ[iU? &ouGA+YzqfyX~\`YlGbfmy;+)M(G2m;K䈁Q,e?a7;)WU:kÓ>g>g=q;8҃2kXqK0iFI|_Ņ+Ǩkv}VlT~+)̙M\뱓C#/~ܕXWj%Yq&7qa^;&p?8ްO n.].؈pa^Ef/$"?kAGhy܍CZ_^xaU~V=![l/0Ūe>]R GꕝܚW +}Ʈ8:֞۫;է˯{w,dd?xYS}(|^يI×Z;oĶfY>_kb̜bg~?olr懣8zYo8_XS家|` Qx~q-_\|9ȵjYbalaT#q_j׏ͥxqlůٷ2{}ȳgg.u>˧/s^sj!'@f9՞~]ޜ{h6ٛQ#Gwxڄ:u2;GΎ{5).;rEy̦$vGc4 n?=gco.N{ح0GW@D} +_b,/_癟#٧bo$^>"/ғyt}[ժ?x׳zns)<;l+y(L>&Gs?la矜o~P߾׽_2rl~؛Ql+13qv˦?2>.I[ylW|q+_lHvvnj^ΥSWP1֋sp{/[<ܰ_&693b[nO&&ߺGz pCkEaS|sØ0Z0V\Wg ;l.#F_aCC@XXta'yEĒ{#[l./L:+ʗ?\Ά6}rWxg՗>?0qcXd_c%Nw;i6O[5'ƺm~9T;_m[{yي+bE䵿N.6̙#>,Uሻ)]6Q/3FUi/ŕ~/9A8Y\:?5挚Y'?"S1ቍƞ^Znⳅ;yM>a\e+:rLƬ $iLY*wȏ c"w5_p1#~p90Ë6{?ΆıafGsr9W3q5-6˛lg/&>g՘60¥j_~jg=ζGM=iO{rzyWc1)翎˹*p[չ?z_E'|af'Ê#Kav[X|Ӌ䋗;c1#[W冱r9-0p٫-=ߪOv/QoƒվbgU|L~'_#1c 8&pL1c 8&pL1c  IO ߤ 'j$ڒXq0tqĀ٧WO9ݟSLOđ'BܟOOէn!z*]>g5-4OL|5S>QyV\#pu겅k{bCCӧ:^3\-UٕXKv8WĢ<̹YE|g]_5mz<}vlibg09Wof0:g6Z[ wvnWU =gOټ._Y#|ҪWCzI] +=^,_ըΌS^^ds^ML=[ŊA{ba^6rē^}Cu\?[< ''[x5W°+&^9or<&::=I[lc娃.ނo>a3LG0Q9p7\<'Ym'wbwm>Grթo+87 }ۋ&V$O>x'_Dy,W8Bμ~NLʭx;SrqQOV{YQK%~)W0l՟ǾNܫU9Lx^vE߅5]/tk^yau#[=r7,6Ub/dx/bn|ꦇUOqqՆOVuc,>_=kNسN|?oN|WU{rTO 5Z&x>1ma^fqkp/;P8[5t|"gK^q9p{Ό'_W?c{Y<>rzTs{r髍Fu˦jɞm!7S90<:9macb3W9A;)};Us/n/og`OŇO_0ğcڲ5kގg>I&iE[ϐ|9:>&L7O^*xQJ8dT<۔s>;z='ͯF\<SY_ltq=|E/V}r5&[x{ޞ}ÚÚ|1b\ý8mL/R yv)ӣ^H+?=,5ղ"n'Z8}ӟhbʅ'~~9~}~].oɇS<=Ö8b*] o#X\1]bì8"V٫5Kj9ᔏ;o1 cow5K˭6|{N7_xfK6ykbW+F̙3J0[qp{L/=W =L &=i^zqǖ=̩51,?d=DΡIV_^{'EbCLkc~Z[l9'>5f'oR%ϺK]]p!3|9KMj;5yǰ"<'"}u'z\p^v7#!̻Fwު>G{}\ڃ^D؛ 0z.-.ةg)#:|%[8#܎nv}m{fBN>)O]agՃ;w=3O/#]ORS|x쨘Za\|ͱ\ܪ1i3,į{ͺl0'%\k1<$oOy~Uj1WWծUoo5s\?x5MlkŜq|p2G̀+vέ} ^zk.x6{jS<<1F8z==W>Kr]mwd9IuO3琏 < <ՃD= @/>썲i%_{\\b5/ܕ}yY{zp˗.ga܄71ow)&=%!y/k߫| vm78{oyd{vS=~GB7iiÊzoo^ ^'pqXZ{?xO~p??kg {cηȎNUhb߳Md^ré^7SrbV=܉m[~g[sÈ_{'~Nno[']x^:w{{ʷlW+Ws|Ns 66ucWMx%&^]{e ^P{mы嬵ŕnOseַwIKw??w]u^{/&,yU-:#_&'wܲK3:꒯p㟸s+e_=̽Nj&{}i2[tAV,a3v3~⊟Dž~Fq&ozw\زv9=^jc؞뫘]Ñ}]<[rX\ak?)&fg+v쭼|37]g~zbɭ6U5ݤu7*a yߴr:Y:ɽi]Μl_[oW^K}gǭ5gǬ5mS1cʇ[3 ϜD|Xz8jכN11 c'Pe K9<ƭ=_nsY,8qՈأpA/Wgo.dKl*\>Y/܉9h~UU#Ga7u?$nɟTG0;aԧXrzS=;cųqSm1cb۞}#^;':0EWν{[H7y_vv|SGVcHG8۬]s݇lxꢰeo oqbn7sy1[ǘ\0{`oM,5ź?ٽ8=Hpx09".gbxǣdUC.kk$,2* sX|=\yacbaM_|6q.nfaL&YQ+3f5Ozf+Nx8ߞZgVױĴ&g,lvco&fzıY}9vklu.&;a/~olWj>%W,1ĶͤTGM>B'V=)%Zx~L^'pa;pAwaE ~z748̜6.aNrfO}/^Ũ†e^U-)] rbػ9Ʀ~+΋|՚}FVqȞޞմMlsh7o<Ûo6}9[f Ez>}^ب>`0S_x?a[._ldwv$:jw<:F:#Iű0Sue#.W YՌ5[W{VvqaC矜/|{@]|sí;`²P= 0>Zljӳ[z /=3kç]_ {ӚH{Dz(=z~hX,`%/f:єy[;1e[ ק[խVOL뉿zņ?gk)?_W^\8%[˿S 81ܛ۩b{WZ:r"y͞oT[`T+\vzD_x~k }an/lkˇW.{ovV\<;N;Y]{7 Kgyն1U~0ώ^m6=]l3N?3aWbK//e.afK/^94=Ƭ69bS{Vb8;܈\=6X. _{9g#quv}z < y],}t3Ǟg5./.Ά=dS{w2`v+v{>Yr{Ayޱgu7, ZϿsuXW>kt Bf\&]L򤹯|80K¬?>1f/S\ke27.Qbj73sôaOg`/mdYF}UGp[c0N^Lǁ?,)Lr&VfI''[ccocŋ'=vn̘z8_s 7ejGz..]\{e1|d =^<Ć_>c7|pbN?@=iO;LpmO^q@ ǧIokb3nzFՑ~wNW\Mbg,+:i IDATn oLb#I7>%_=vuVzT{d}8x} O,,Dfww>?mM{b؎{Y׻B!гzY}Ol}KOqr57=oa< %bc&x{ȎWNǵ> cd~x.WWQ8ǐq?6zQ^q>3:¯[JM'\|WL|śMާ3 p[%G#[&)>ԭ.g~ě|~vr;mם7Z  >5z,crauOÏఅ#ΆAjV%{~<p?c\Lq830H'"O(gΌysl~S@ ңz׫c_D8 C0λzSÎ|zfׯNy٪_܂lX9V>u\ث :mn988QsN<:><&=꩙M|ßm&{V5po1k,nͺbŵ䎟Xun4cX䰳˅Xדvvc S<{};+W^\8{Xr?=9~\ZIN9Nqz"#`^XXraزOO.>Y0pabBPݩE'_'_sMO[{Nq+{`,c&{{q{6ﭽ>ug|fqɾƥV^b_3n*_&ɽ**_}Ű5&A==~({=[9)mc \zn>^պ|%Z՘rˏ>6yrypW?bKu/>H{{ֺza z\s眳}x\}Z{;ͬ}/8!51\竟=Mlq]uuù?<^ՋSm/Apչ ̙m0c}>#' f/vx &nKn/|f{ :ijXK^\^Ĝ5CN]Nu7~]O{93?F=*:΃>0{_É{baNhg|;m?9'OLh^D?4n?X]nRaaŒg n13urσվ֛{/'ƫњ1]屵p{T= ~м0y^ʝz̆K_o"ybZЏ < t-ƪgw~zk@|ub~`懟-Ɣ8gZklxxTMzr^W^+qxSo߳l3n6Oz}WL:/jfG1M|sճg|rg}j]vxkWUصN;[|pfWΌc>cgUrG|KԽMl嬫gGKq? ftiN3K|axG佘b'%a޽-q,ޗ4U׃8 ,;NQՍ+&p]㧚_o*kk7y~ !;N\?N96}O6ۂmkO?_y|~8kVGO7z+XXz.?)l$sZ,fyx98G`nyf6G -G3~v3xzO^~gw&:|؇%ޭ_LŜYzCrY[fU&-g~RZ+w^lS!Ů4oߋOR]VO[VlZ{jWGorv-<‭jlN\/7#g<+ɵ6KxVɾ?g>_{=|ݺ`[{y[^z)ζoZy3'W1U/OuԶ-Rp!^jv3{\㉳Z|j諹W׀O F0+w8'1}/\xJyLHX =__]f\ܜw[pm[nnݳr07; z=/֞{)_OɯtV ^ٜ;k+WzgK*}b%N 'k^_.پ S/d_Lhg;wg yuǝ>q󝜋;{KV8XGd-o\-s |_YuOo@|==-upmSr8!/rvl+NZdˇ_|j:N‹ m"W?sfKt˭G} Kf\X/oyp+oz-?{}pՊmvvKs¡83ҟq> u;_ɶG|;5psSd+γJN*׵z'-%>g0k{V}9g_/'z*gՅ.zq±׿YkY0w'$ϳo8+7OK,km G6?|9KdÅ=3Ēˎm}$,<{__bfj5r%n//bguGc流}zS=vfW/}7l90~hO`Ub|IoΚߙٝ\s|{Krn`ʥ)lOɍO;N5FIK\lm={N?xN?_;ʩ~wڛi㱒_?Γ.V ~^ ~V\ju+~⻯jR8[㤯uՀVaٸmܜIpWrRk%;EO~o;Ə/l |3ŧofɆ S- |4o_f`a$f_<UEK:>^/|SCAV Oba&ne_򱝫E_}͟_f;\:|᳻G-vbhә«%yGSb՗D8zxHl?+*=C3?>_毯x0bfg}8&vu:{nխ?L{];{ZقcO=g^L_+ I϶|bb]GjS>Rbrd->p|qn-A%S/7vk-'Yj8q3w7_2[GzVoL{=Ha+Lv2rza'9d~s/6=)n=_ɫxUcm竖3:Cg[|g5;yLg/ƏSW S//]3q=qi7?_gcQtɝgjs!z|{+lj_x\sm.^+Yq/.޿a׿gꃓ4"caC/,+Rk L~zUvs"gu)o6ÿ/z[[zLN6K+oWfX3;~{mFm֋t.g/NuOr_x>\7}f[x / ?}u|u`ԄwzW~^NfQ|v+$ޖí|\N|d ݼÐ:[<:CVwyͨ||dx]񝾭-VZ8-ηӽgsך^#v.Xt~X5\螂Qw+W)}Q_sw&\'s&`-+8܉=mgꌝ GZ]-|5ntu'ߒc|6݊G_ ՜Ƽk^qS/qauԠQ lQMg.xpGuv{6'~b w%a5~0זA>"} ^‡vOr~ٻ)1:“NÛ~8,p_+ur|앰;71>[qU+7\1=UGiZ ^k>k벗;{1,]͟|xy۳㿚yDZzol)'\+.v6_rgc\gMgMOøy |ȳO^5{ֹYQWmی;oqڻ[gkv;}vg>K^Y^1;?9^~ׯϴAr{m-ߙ{׾{&k2rWM|{WɁ |o^ʽת~ tuN_{Ns|voV;M==,wȳkҬ|^绚֟^~Yoş<0')_X8s>8^a>wr>uc װN|.L.($I=G5'g>)3ܕ}WOz-~eqz&iN㠷{WNl^lsbƱ0dgȗLƣ;\gq'U/Y_Im>zW3 ܫq<2<_`]>zƓ#W}J =;<7kv㽰Ϟz9e|Iqv\WkOsO`щpâ:p~tƯFƹ6z%{~3|g~)V|~ү~ЎޙQlgf'Uoˋs'~k ̞BFoftsWVqz$|v}ywm_}-vgy8?uU^]vo6s(Wسk_<O.'.  |'ʧ;49^skvsw8㓏nGzu+wq|Z`k +V}U>ötpev[aKRr֏k WbWg5~|bצ۝|/|Y[0'е%'xw[gngݯXI8SuяjMO_y{}o=_r-rO|r΢zらlnƝkJ7é ^~:ٽUGˋȭ3=q˿zdY^zq&95b[/v/'=/nv-_뇿w/&?~iS}2f?//;W_?0tr>vo .Þ/|$垽ϫ=yVu.fXja͏k{\ly83ygx.~} Qn{?z{ ɮpq'/P=\|}"_2XxqY~ab䋇y k5/ފgk]ߤjvb'Wu,˅o6$E59K4/咭ƞcg]O;}թ^+Nmq"# _yH]lv9+7>H¬^'_N}]=>WLHyvGcx⮗%^;_gW?{C惵6#;'YKYZ&FZ8;r{W+<ۙW /q;bNzǓ^Os:C~ȃaig3^ϿuMn=:]~2ɟosUn t]]ޫuvﻫ{q}q^.~vPlNno݇Ώ{l'&yqf{knr>#ԭԇ0qbkgW6l2w5ٺǿ#?wΈgizUfl-nuΊg 'v}}Vɱ̂{),%V>^pO'a:Y_|}a-=ku CT%}?{-%n~|aX}´b_0;jdœųrGaAO'}?tޓzy]{hFWK3Փvװ͠k+=R-(q>2?ζ< {<\RMq+΁ݒ_dŇJ_oq= bsNح>k?k7/3>L4#͟9>n? }> /gN>h^~'Z[Og 9Vky>X񖋟;\0t~=M= ]||W|zg'OWPo{dwEoWoO5/i/#Lz ӯ⟝\}%O_ݜj#+8Wn/ǗT={ςS-Kgyj#S׵;^ IDATxǦY./?ǹ9K_vϷ>IܭՋU_9})8ꭾ>/~{5o,ƛ={ 'pO={ 'pO={ a IgZ=o`Ͽ5oXr\ۛ#5$Weoן^ӿN5O?/:G__:VuqP_ w|WPE~-&_7uo:)ΦUz~rN3tVq}ꉴa|yǕ[8miX5u^6Z|d}g%{&v._R~73?_uQ?fܒr*8}jkYx*%Xr,;yqחr]͡右xoqw')nL>_^E`cgRscT_>W5pL'{Nd9g[a;csaOW>?|j{zRU=vb5&u;v_l}^sOӕܧq @oXr?ged,֮O߁s}3Ysӳ˯/9*z̝_^:Zj'?1g7L^^x-|7{zլx`/XI;ǫ?N^,䋵-n&e}=.: 8dzf_SYjw?N%735q[q3aO]n5'l~qC(=|pd3]_=<͛n3QS]KdG\Vgaz}]tG];\p)O>ժgvg1bgvfo\>k{7=x=h>[K8y^8AbgbL^e;Vr$_|[9%zJ_p~}md}븜g=,[~j)vשn8=,z:uƪݵJz9z<ű7+{&]~vx8r8^S?;?Asu/|b" m%0L9񝟩]~kYqbz<-/$NqusCwmQ l>|UzY;OzΔM}e{v3i/ǩ[خ_g*7~γfW1r67l틞nkt-װ=]=R_/6m^q]Ww^ qnM|+Y~GR6N/#ϿO5vg_n5-2\on^~XzcZ\xȽfoyO௞zw~}POp/b}ȥ=[܇?X9x o/Lrl< ſWa[aN -; z%՛EbAվNzzi7#qzvWƑĝ9ߪ7g br-VN.g: ~Wפ? i[Ế|Л;]]x]G.9ypnkOvnr;"6 KnSMg{_^k~>OrUG?ze߻:k݇nmڏ8,) O[q=LZ\b9O~z6{ [yUnk:/}~+ޟחη5kw]N5Vҫ)sڞט@nߺ7p~vVƽI-'vyܧǿ9pݫr|{'l~ϔ?6.9{v3䕛_Mz~ҝ[m1<8u ?YL<\>/r>|{8[ r4|`f?Ato 8#wљ7&7<rjU_ g&HNWWN}^t_{8}Ϩg_#w_\v3~y6~/NiŻ8&[a'{+>yquW'vYdO|Uլoα|g+j_N-^\}ÅMޜb${~@WfϷSׯ5mSOu콏OaWc9Ճss|8';sX\pk>Zl.;Z'YmdxutRwlv7v5+W>_~XgG:Cs7jiN}k^W?6 GN?^]ծnM6+bmϵ:L:Kn}>g~dqt݋p!Oooj&Q{|a0q:~=ig9%KZ룼z}ՈS{nkwX~aͿgeo[yNjƗܭv3ΗA>D[lV\'}O=5gŊ'Oڗ X}UYaCN.~kʼn􅚴p|y鞩H#h>Q]V\-v=lY%+_k67/Y([>}+?Ys?r_d,L#N{/뗇JϤ˛3}O.-V/W}W/'{rVgWzg/UG}W+Η 6˽יkW=9Wثxˏ-<1:ϕ}ȳ`z _^c/szEŗr{ x6=^ӯNS3{~yDZ{K>;^jeW/B}Y_Wӵn9Mg=l왾hg [MR"^,mײg;G<|Y_YXRnwrpf_Wntf|] ]=޾#lqy͒>O[<.t{9 jZ/>qg+O-gmx=@_^_˟k3\=o~髜fl{zz=[d޿N |{w7 nO~vK->|⫋1=;.xkŹn/'^ÑmЛ/ JZ{9$Ng}o= Y/quFrGIfqvV׽n:uo?S70/yKH兏3!6~Ȯ Ͷu᱒byeŮN|z6,Lkϥ>;_6,d%?r1JW> Nl=t8y~Xd?w ) 衬>{vΰ|+st}'zK})f'Hn6wϰ'qMbl,k8vnr[bS⧄ ٶ&wr꓏n;S׏? rÒ-y͊os rfz|+^0_gs坽_Y/lӛ]YgY0V(7xljNO|跞p䓳y|X|;'xn9y\v>c>ՙ;+h'|gnG4j˷xuO}T_ ojc'6\=6?6}Grͨk-bQg~8[}˃e_ɇs^^hyߙN'pz&[[]+W]z_gWwS8.}9H%+ٽY!x|˭gG\gn|uqu:/|-խ'ʦ˯8z* wէCyt]^p9[KkgwVr`֯._q1ӓv5dlm̙WOdg veCV`?k78֠gwpkWrԡl'l_//΍-G-/{:gKoaVw:L\7/|{^N=7[ӷw?|=?}`H-WN|J\ggYwkvbd>\џHyW>icooR͟ oW.olGs1ϫ?(T/jY9'~sr(^:sފ?[?x^;cS.Wrk[̓~s?_iqճ-xSs :WguaLŒ|xV?R{֦g}g+wbWz/7{ɷ]ηrƸY;k3T+wg>=Ѽ mS}ƙ5M7ϾFykݱ{`'rfp돣䙷حՓ7G_;kw<{Q x_(wb^n؋[rק7Ggy{䙗]ituIs9uH^pl[^y~{ctUcԯ^WH8{}gWm <\g3~OG޹+~|3\91ϙC]I>z??cc°}GN'#tθ=/fcb{/3?JgGW~ꭝ.ufkw}`>6ɿq_V,>U{W=ӫ,qp˻~V;[<ŰV8rZƞu_!g`ky]W5_;۞*w}Xܭ`#{sp>C]W CbaW $/'gXzҪW~Pg;kRm牋j52[qƵ6\:uUuRyZu~_0xӓyύϮrqqw+~_޳w?T ֆzY^O!n;lOOޕ#O[_32V;Wd8y]'bU3ѫEZ6ͷgWs Clы{ͽ!3/SU-f>%|rc^Γ}{Ag_,C pb|ͼ8ٜ{gorZ߳UgslnkKՈsku\['ZϮ1ކ,r?xwY[|qč]z.t?_?z9{ymm[Э~~{νv(K7^3,9R\+6L|qMn}wM:g7sa[YL+wvzWO->p͊N_9gO9 \>Q<0r?]\]O #Ψ=d)a/>y{<$'?9ҫj=Fp|I IDATx3?36:d;Ovxs^:Ӝ%_|ا_<2 =Vsyfiî8';TU/?ޭj_/aȰ>30Gg)gő8\ةq/6,Sor\|t:0lr[^=^tð' ߵ/v`^{pX\ʝsX|;gRzR˒W?[  Ygq^jɩΞ^#<> J ^^냵ne/wy̖z9靝VO]Z9׳90'rV?~tj䫏j#Wϳ&̞l= Ujw*w[l>obק^6^̓M'N֭=ϚOby nyCt~rrp|})E_;lp!:j!R/ry^NU_U#6y+vTg?,5;[/%rmsvzO'Zߕ_xo9T7lvILƹ|I~g(')f'|bQ~֗ԣLpI9o}]X}#:En?l|ηScշ¤g!=p9N֢?ík]^v-g=/LMz.9d'Xxgk[]fny0=qr_?\}p{k>(}䏋oqqtrb0ŒOzj['3v"q!O=;s[~X=sq>p|6bկ*o}8] gjwM'Sw?9؝J;{y˳9WHzW\Յ rmg\:xnuxү`6'z)\_d3(/+b q_+8U.4= {r GG3} '<$ҿUvr1c9|_V:s[}󈫳w ~{SkE56ݿ98l/ d/-쭿tG8'-osYђ]];g6։X'v2<vq]ŞܶĞٿ7rԩo2|-6.6EFR ^^\A;{dq&{9xxL_ꝩf/dzg z&OWyW?}qlnl0O<0dWW}zzu?^?{ߺ`Z~z=ǩ6_sxu˩o´`|_kq'GAʷpn"z-V[ |)g\~ x}}{O^xs~?cM~|wdyg'5-Vk؍U{뺟׎w}ކɓ9'cco|'.|8ͮUb?*㑷}=5Ϝ3=sW>1b&:ovΧNvp|gx]q^6ʼn俊]nӓ!WgVϳ>KWP°”+]ɱlìͷ˯`g&Ǫ7ö!f%] rO'5`rv&iUQ2v1y͌n-{1gd^n-r;sllXⰝ=}q;O1>sK7E/ggw׿Xg}jGZq!?^>'_X>2sY|t=Ъ>xT(^;K'>gN8嬱uN-,g~{l&{ Os*7s߰O„Z𛻘v5澦W>NViÞky9ŻdVW| N'ceGחr/-9~ʏ8{/7?|VOw'q+5ثuO3'p3ys]l ,l6Mo +|} ˇ]Ob]}|#V8ڋKvlh&\}jW.ܾ/tg5;z;cr?8v0KZd}zO.*7_-1=O_?~5ӳ7oU?,U(Z9Za[-8W?l;08zO[_KO1jNZՆ W~8A63qzņ_?Քs-X9{u '_ϮF;:8n<8a]_?9Nj6]M.3oX6.Ղ6_ON\5W9{:8=-{5wt }aZ'\;qCw.vX+lܛ[~4!_ͳYWHG.֕^^z -5"+VsvfY0*] _欗j?šW~^Gya_V3.\EG?%?Ng_l'}+o572]ܸIyl~'g)Wvrq'[|jT }bE CZ{TGvF:C;r濰-&÷}?YwmzxLovq|Ey] |Do_b^|>yAM>D!n1jZbu/|zl\+㕟Kzb95\ה~bqk랱+;NRn_`naW8\aaW-vJ~}|{ MYߘi9ok-ZKׇkŶB=/l<͍ݢ^_z:ʗ-)6>sÒ嬾+}z jн7|o>{2 `zOW_ŷHzŻoc[ ե`mz^>roouX{-w_ǙW51vO_kߕ'-uU}8sk_]̕O|{Xu6 ䷞Nfø=׿C]=\~J4kxuIg|O7Lˇ?\rUsW9[-ggo9qZ&ֿa):|lskkOWntFrs3'KH3L륾__7nw/C: sxl|>{iOVGɖ.Დ#_|r7,\\ǹ1zKm&<剟 wbtBƶg9(;G—jȅqnηحAы]頫|=/]_rn-xv:}[|:Gtk]:jCz^>n?w~Rn9d{%'9\C?cKOƯ^ߙ⺒qzڝ=W;]b[ӽKZ3Wnt>ŇMƿe?sv>jfV*pOtmϩ}ϊ>rO<~{U|%jǧ/7'},>{ɮ֕o[G1n³=k~]=X}$Ş,&=;y^V+ZaڋYγlFaqe'MȰyY?.ȫ).o2d$SM~֮V6[N66yZt=H'!Ƕ`Z=ՙԫ>{8&xwS,ESZwHOVk<}q.?_9o-9U;?g*NZ⮋mܮ׽ ?Qy z?zm;y vGV×?9-yb+q%atѳN6ӗ8G{WC3m'U?]?.GukW G;仇iUKnyW5wنxpI]~Ǚ wezaM_Z=/ίΩFu?lgWҳI,Nf}s_iR˞mW\{Ky/kpKkD7y0{go`jp,D.G~3 6p>9b򬸜3~s]ۧ[xv 8򋗓^qUݝ{Y|yGъzz*FW[Vdj K.8y?{l[u~rH5"(s@hXU^x,/V[|>H # ( I:r v ߹gO1Z{~W~ys̹kd5wo;g7_דZxi)͗T[< T# o?Ix|S^ ׌z5[0髍sy}/pn|x0|Ε! t}{{|Ns_N_HzΛFuZqz_/{k^[:dmq6WoV3va[a:fOOˆ>z8j;cb'Lo IDATܼztKO? fr^)ދg“5YgO5s|0(>lVzfޣlOU'X8}KoW$^pz)[صֳX| Q]EIw==k.=ds<̥/wyHμ%'{üpì]5/ЇZxN)/l++~ KϦO3=[aS3 _ 3m! <C\ tcƻkM w~ysww#I_m9[$*%0V'_:(4df >.y;f?m-7Zdik֛X!63gO_Kp+\/px^PgpL{K_{[?j^q?9k˛sLOdoI8}yp[RmrbԾ7//r֞`͊ΆR経*ϸ}zǮ6z1Hqg{Vκ\f<&^~)~ʋ<āg&GwSlrM#;s$zLZz&W9s ?ϱ&*'Ezqֵ>r8{9Bݳϵ36~u͞qs+᧌EC>|v~ko[ŕ}V8zh%9.Ν79 YZ닉+mFf\f5&'~vrOpe> ٬fcxӛ5b3>ZLK}#1c 8&pL1c 8&pL1c x ߰I/ S= ݯ& D?'T/x?u积e~5_;#Mvg7|~g'slO^n-(f|; \q/"lzg[K­:ja>s^59W=p& = V<_%x~P7n%Mf5̮53|a[bc5yL[V~m˷p$ˮM+'9WXs,Wʕf3\60׽X,[ Za{S^S˟c.u%ךzGKbG1Z97=(K[{g'%x9ӏ?8˟rZl1{K3=ο҇}؇^=[^=u-&ƒժ&Y .y-2\ |O\Sv& \k>_f,xąo.>1c?czϯ>b~:Jʝ+ޓwI:?H:f%[#[Osaqkg!oKM-Zևɓ~~3oO?.s.]=z]ϵ?V#g[ko*ևߒ+~bg_vYMȏ39q&ץ|qʛ81>6YuX >8g a{r<|0MҷpI5P.a|/3kn ܯ3uՖ7$~9S' [6?fޚM_8ɑd=iQmW_ >ʩ\[yzvnͧf~&{⼱.>™6sVߴõ3Hc&.}M8wX >3XVgLۇI}9oN~5[w>[g>+;|>dX 7?\iOs1p1~Q |㙳Cg}Ǭc[ds~XWsk/ /s5~gK{gּSrfm֛QC~r?=gwcVkk;W]cjL<} Cv׃dx˖ٞ֌3;>zd5}ׄk)_x`TcK^yٸtiyٷ<'m'Qku{`˧1"|Hփ3>7nݔ獝oh%u|=Л|:\y&?&#sMڡy!}{kI}oUÇr._L/8ٷ׵[1WN}'~d=ko0pB߳}%^=9PMUgo󭜫]5yekRKu<^>'p|`}~L *^H0\>{>zx#woj;*'6}kaeguoO4s>gm㬟"푄&K6/^mû_ u=g3/-|X9$}),;>yZlj-OCHuɹ݌̦>5e{ ;}g_ɻ XmO/>5?ּNfIy\N><\j䇅`z׷^ÞR욌koW3{9]WyqzldӒnNY[3նwr6;?gj&fw>{=seɍ]۽q'&+l?{k΢}1ypKr'+}QcbkVזd:&bMŚQ癙@7Yo_^HXM7nj J/x0Z;哛zxMA{ס'lr7o̟q8$ 䬿Ņor9rS1v0Lv4u,^Og>&W\mewt-'N4V8)\rO?]|N.RO>$k~ޫk9-Lg}5/+yv]d/ &;}ùKlAi}?\o`';y-ʩ”p|^T/=;OX鳞§JwIN>Kңpf\ 'ϖ >{jfz\c{ə{9\'zT^Idyi*Xtq\?\~1uf/^\8a,>yVMǜI18>kwis.a:ޱl}?9pǮտglN9Tg>|xԪnvV:YsoyJ{~Oξ?]goE?Gz;nsz|g]5Y՛{cO;_i2^pMvM^D{Q&,_QoX( B6_9lgK/Pf5Zp7b5cq/VnzuZk=Xi/<k.'9z+>55kM9g[]sm^N.=L\}I?ɗg|8]8Vt5]-Lɓ}ovuOozvu&ugG`%>+g8ՑCJm>g5SL|\$8,K|jé=닑妓j&q<|O-ߌ:;_[gƿ7Kuz4}׾1ϓլS 妫>㳷wSn.÷|7Gwo=o1Z3ʿْ"Wl~Yo|3~fϿz#Khp[n˾y?o1s?ݛYX~ w篎Zc2[!7599k^xa'N xn:'qg枚ĉ]Ou拫rf>Dp5Kϯy AC9ø򋉇yGG FLlv?9f/z/Ŧ/yi+\Ot~[NGtƋ;ω<}NxYq9qHKo=fg}//_Gξ8Υ>)/r6l';u;9g\^5<}08so`v-ē/zpk,oa֌ZI^"w)6_M3?*Gލ決O|˟~|[)׼e'[7Lfb.ϹQ?-_ w37=7ap'?cTc֬73ufٸ[a{ȽA>~;+Z]mI{u?)VcɆeBz~}֘OIig8{|.9W̟xZ;L+Ύb?>tɮ|P^s<W׼;UN+}E̟|InjVio85&?k\`ANOg~X^ |3rx&0o݀I7_o{ϊ'W{Oۜ1#~̙:jXgw>{R; ^>wY7}㙾νϜ'OI$\Oڹks60P7jܥ`R.ƳŊ7K̾Zx b1^O[?'w>mG7~^ rf惽ѡXҾz\/j;51/>ywWg[{>cO{\ƽ^-O#>}y܇V>6|ؚmyuwE] -5-\=pq?e{}9vO;#%9y"ߛhrH>!/T5|Þjj7=+[-|qK:wQsvޅkX=iN|]C} ;= zʾ\rϘ:&ӛmו/rƷw :|[y>{C'w /ۓx~ȟǗ壯|߼Vw3lc坱i߷9fGOs=wcgůY/~z{^9Uڂ˞m8{$~u7%93=Vk۲ޯ^]k&^g\ߊlIi}EZO],\۸>7uɹ Ͼ,g:qkc;ɇoW^g= *xd}Zo>ykG _@o{oU2ֆlnIt|&/| ׍?>mUƥ^A6cO(8qc 8?g;/ə9N n?}=׋COrӻ>;Z*گϥ<~X>vsӹ^&[ɎwN.C{e0{Zq~/=՟YG-p|`^=ߞWXz޲'~-7ɾ8rZkY % IDAT־"bs~I/'&l85V)?/+^cd}7˵i&-:䌳WUx>f}<-Y޵-5._ر^>}RssVG+^nzkC.{̞?iٽIJS9/z790Vul_J#oy^⩮&s3YW7|ry_ZПK/8?;ΎlՇNsN)|Sϟĩ=?1c-C|28Z/ƣ|8Y^cʖ#zU/:,_#5[{YƋk\_[{[=\}nkG9ӯ'WT]K8&9=gns Ukdf';gݵkqnala/O͵E7\dcx ?Dg~݌_W<~i݄{Fo2ٽ'}vl7|{o R=֐iӋ]dVOr8OG}׊>׽y}iq3kӛړ; NpbpbI…1 ʞuo7Sj|d_Ö/5(I#õSg:V}]y_j?s[z~8[ps&g/$a2{{ _\#?|\=ȷlZ\>=Z{Oq~p%g .bq3]Þl\K\pxɗήvn^e1,3 z}g>?lw~[g=\QVRlK:|Ӿg^5悩Ɗ۲W_\^>|>Ųݹ7yo[Ϧ'srsҏuL'p|`= t7^oދw2̼a'M [8+xtK'/UN]=k^[g0|՝|Kב+;,lAĬw&/5g^2 %_,7Z=w5VS:^xǸyF5*^֋ٳYN=q9xԚܮ:3M\姳[᧼®3ֺk>bz;0ݚ&]v&`ŋm+ikٳ''>a7Uu޹Uv縣ױq=\;{ؔwY8oZkvO=ޙKO>Kar5}ڰq{WL|R,{_y1ag駓a->١8soq'bSo+Fӏ{͛yOϼ5tu[{_sz_1Saf^{!S]!^^w%vWUb!M!7;YqՀ[|=z+_yz~ӿKN7mvZ9f?S_(6^$l<#L}MmK-O^crQkk! <z1c 8&pL1c 8&pLKz>X7qz[r>9_e>_姟;%ߣc ?;E@?W iNo5YokIm-~;?푉_K5CepFLks֨Lħ?9 Id.;'=\ /{X9%_a!tnV;kN|q{gS՟}o2 ~\Ϻ[pd<ƭμ|s5ʟX<ٮ'>~u$ ^y/A~nhuOG}|~P{އn[qG-ʃ\oV3O6l8;|Hggj{=OOzy+gqCvsչ]3t}d>s1Mꛔ7z)N6!̯guj7%=;̺V_z3\3u™g xzηn3Iby*g[^;$]?$ ?sӭ|?Wo~oKy}׻N?z+ԟ:#?Yox{up$H{=NI90Գma .{2Y /\S϶4gkLտgwr᪣?ص&q?ɝ_r9̓%1nQF o7ް{ic{aϦ'0`ל-ߊb2Ԫ7qr8J:tK6՟ ߂/l9e/>|y,}ʸdpOoƲ,,6s5s9:'XOr0Ӗlz z|ng36O:s/_=ګSw+u&g5Y73{抓pS»IzL:+_)'ħOSl>ɑK/Gy׼i5{OSk^sՈ+58,$_.'T=j oN|37}jgc_wMv:yu⾄wN6Nd~0dœ1فC/p8>v>|KÐa5%=L:l-eyq9;rWN8)u×ě>tCsGXzרzxM]jZ=g9W\;̉1klϼp%*㕋3\^ ;q|شM,{̞\3fL;%=S/+[0mw{N?-r¯/>WK'œqSǞ~Oskbtg|dˁIrVvo䭽CO'z=s=~ O/g#zV{Cy1C~pIWCm~ɖII$;֐${@.j~X{(c+o9KcOB}+t;sq}N$rMJ.?{J$O_~\ zK`q[}%]z#'3ܲ8^.w~_~15V'3笋߷.b-㑭^ =..2yqnl՛ה~?Os>AO ZS_d5b՞3~4_vzuΙopC/I}&ˋCy]M\+i}V-G]3^.ۊ& f⪭N[|[gLmI33Z.o͟q\ {cO3߉= ˑ{L%4n֋o aқx>U~k/0r)5#/١fy^˙{J<[(8]|:f*gr M}0괲κAV<37=ǝ{_rgewTkuWfr&}s^K:W _~kW/-ןOAz ;Գ[j+Xo\j`ŧy,'|-0r*˓K~v'й~^viyk}H:Loul\ܽ=t/x$z}M[fNV\{ަDZS{sMֺ⟽[X*'\ɉOoqU/}71N?rv0Ï79W5s[_a횮 {-/k:OufOϺ|-85R|YN,ONa嶗xt9833%[vH_9q3[>pl.xU>'\[/O?L[pX7t+MܬU,|0UyM_K]}49TwT#/G)WZŪO8gagl ^ߴ{W|]c~nqؒ[wL!';d= < ;'pn̎bd~K>{ʭ>rXco?9aŲ'a.or.ݜ"Yr?-{ے8Ö_|߬ԉ^<{cHoa=N?\3>37}払3[b(5%ݹ %qYS]Ֆ U#)>ImrkG=؋9ᜨ7Glp\5gŭ׊9x|p]?+fƦtqU'rf'']|槳닞|peO3>1y ӚyNI Wܖ-w WK|^e(Y>'7?,[|63eϚpbNo儙z%ÈoM9s/s%'L+[c8Xzȭ\qҹ [璸:anՄݪY<NJuNIVc.5阸%Ǖ}|Aӏ {sr O&3iV$[oqo_˻[y]ܽvϿ"?-ӑL1c 8&pL1c 8&pL࿃ |W~W[<&pLŚ kGgj} OG~OI7| o Ou;֟:É6'Zy̎V15&G}5,f31wUZğ,Ons᳇d0|b-90;:Hח)q> #7o8]vR])y[]Z~\;绕ނ6ty,6G6Ǔ["wraֻ:IGحI=rN9KV?LǼ]K`ڷۛ'?kaN;R'YKxPW/BlRrwWivNGk>:Vw|qG}%C/tχkO1O/{PK%A}N }b㥷xy:]sGoj/]?]8[_t >%|=9/Yw6fG=zSo=Քy[s &9$5gf^7#_}9s9f3W<Ŧ\}l1c\oruHyum˕g"M}o^X̿rpv^Q#,[an737|p+lv|Ռk˞u'7NvEgl΍YW?epd7'~g_xs Q:܎5 jMo1 rfu{3n8=y|ag{y*7܌Kv:bx ?$Mz D7~n½T>0ɉ/WoʗQ<ɇI?bMA39j|$*儛}ɟRo0 ;=i?z ç/Gas6NS>qć.dV~?q%/iF|f-ɞ2}j귣xəoɟX:-Nbzʧ;LגiM~{ZV~ɓ|LI3ɧV,Ζ>5_?SZ%9%]OɎb׵ˬSn8}%ϕ^O\yafoٟs5=y=`B׷ksc~)۰r]MΖOWҌ5lz 79YgZ~ 3ׇ8푏_9ppͽl1sՙ08Mo^Ҍ~b8Ok޺Z5S$vrOvɵ/Գ[q}QOȴx]c|x=%['.}!Wf3Y|Oνd#էүӷxzu_w[O_9e[y{OOw%w~طf~<f>u&s?si/Ρ߽r#b~qr|{5W99ӷ'f/\ax X(n>ymɵ{7cz_%l}V)I+~LW_=q:]]_5ly=3)w, 'Q|ĚQ IDAT1suଆ8|ђyw%C1{_VL?쟞_ 檯sa#C;ZjZzOv twxɓ^K1ظ|gO~-|3@ R# S\ cfUE9cdv>9s-]rpWΔzq'??N?C?tyYY?鵯}{_OsB^#].Nז> _O]gd@z=7GS^|~pƖo?DRc⛸i/wmŷųV6^{#ook#bk0ɭޯn״_ˉwr5b;}oͧM?'|~?'~hί5Noiמ~[KNoo;}_N?xe/O9}?[{<<}Wy}m|IPr^]8c>kWRgG/ >ӷ_P_~?mӍލ}b;ɹ;+-oVo\ْވ%o[zcʭ|Zc׸٬i˹4'҇={t%w^rM;iC7YEE>Ώn5틌3v'Y3wns-v=ކ{V[k#j_ߊa[k>0Gş=sޟs-o5f?~O_N]z.uX۞c8?S#wl2zI|OkVv+OԻ>⫼ 皳g}=mϹ/˹MaՔʿekr}L{1SO{;Nߟϯ {7?vk>/w}铿 .CO_O/ˇ=h߇=;y?NcrmVJ]k=܅c]rO)w'v|P<Џ <o?Ԏ}7>zAoBi :?Le  ײkqփ¥9sSlG~R=}/ cVxz꺗&|N.uZNZ WzɎ#cp/7>~|W:묙a՘;>ɏ-{ONN&>WL~kUw]q[s+wr72sa'зS8W//ӟ3;|euv2=NcU,Lג@\ػƶ|z95Y 0b#OO`'p&Z3jW}XϷ5_X}y'~w{˿eWw^[rW|6l[q۟~~/sd'8?t=e\j/%'I װx՞rZV *m㛜am_\=N_?}j^'t=Lf^nNo_{?Ο7vȿMyӛ.ߴw߭7Ͼaоo}OO[zSͷcy[>wXfu+6kūkW8^K/瞑?|zxM/'V'ޚaqvrŒjm9jϿy(ƃ 0K>g7~ /]tݺz##|rݴ;7tnae:N >lugLYj% öxٛ|^|gìW[-UU)gNxztK:qG2_{78-ۋo÷·wsxkbfph[\g??i|8ZIopbqW}5GN.1|%)l C^1p$ON~Q^K'7}rɌٳ{Z'YVx^1vR._Zq]ClNn، &ɇ;aΑLfgrMWcr,/dzqùvҏM/:a};o/?<2ߴ[Ǯ\&9ߺ&v}Zz밊`g9O8R~2 ^ucnf]ԉ7C[+WGO:᪥o|$\v+eA<曜̙zǩY9[/f43=dOq{cN|w̙bۍy}~aǟ/ٿyL|rʞ8z}VR_znV,I3[N:;s7پp3~bUl{8˕IeN ˇlM3W_uw398{z[z})?߼o>w?/?yj񖷜p~]~9oϿKugoI筸jaj4yoɿ'_(=bՏJgg, d_kPճV<͚s:-Þcx ?D@sooOO>}/} .ػ!A D/&Ӌ@ҍ/|UZoO}}QñS&$bnʛkXu&}xdb8&]e9owm^7|kl2;sf?ỿWwfE< lKuj]a˯^+ޫ.nk Col9qQba/uMfԘ>V鯆-\|+=o~'| |[_wq~;׎[9xZrɉ]harN >\WZ8r>Qat5W]~69gx'u8p|ܵ8,|[}֧ZbSQ\ |q})+Oe&7 _yq+_|O.U><|M}bfGV/|y>^sЇ_5_snvi>kߨu_}~'Oivo{Ο!{No;>aOȏz+z~~'~7R~`K{_u8(fdNU#]--/<ԐklkWY:+'OpWd<(ϹR=6u׸gp2;5W:sn_Nz|cGq3Yֹ[|nbɖnbV>}U?9yq1L}5[{sRYd_[3NO%[Lk3wbz:|jL笑QNnjW#Z˖rA}?ߴS n<+\]ls.t8>O㴿b>[t8G5u:ϏWn~;_kzʟ|m_ O?9<{C5ٹ\'-ס?w]+aL518w+,|1c_O.;&͹ g\>z͓T'ߴ7m?0Iuߚߊ+g]08co͚Śm\pduCsKׯ^ofgظLon>nl8_b?9թ'Gړ}固:k'}阵/d&w\j|v9/;^O; Nf&{kNy)v^bs&9#.:-!;!oU9bj=Y}_{xK|}?SW}'镯~OOA+8ZO:߳E{{a{MgÞ9yg&-96}d=)8)YssDx3|qMN85p&aZ;o7$8g8'! <z߃O_W>"_nj渹NCz1x:{|#_޷8{Eڳb ?ի}s_[xZ}~ʽZ=ح-6-S{lվ6-m>^my|k=B\Vދ}dZ]q=}5v^]W86>.ɗ,CЙ|7'?Ti 7_H򅬱ǽ>pyrIպ'W}ܧ>M߷^&o˿-;[5;jIҷp}h۞k_]p/{N~>f$>Uswr?}XWa?.ί<`߬s^߬7|ZgrfOcߪ?.[ϭ[z,X/6y~[jOmG6g ~ȏ|EOB3:B^T{x^V^r+羾/83~׺wũίt.bmYey-r?=m9{/|>mOb6-id?6#O [=ڒjbS\b2COVcO @U3nI?YG9trzƹu>dxGqWy-|{k~5a؋?Z.~g~4zLk#$r\1~?針rך36sns܆o|x$۲㟘QcW_coVK~J8Sےjl/ߔz{r^ =oY߾W_~O\:갧7yN_y?59}CwILO|?߸x=wv6+_{췉>mKd8Q9[{>|+vғrּ0p^_”VYw+/]c/x!'p|`BN~ =yOI $eHya8e?_4).8O~R[Ձ|kKz )/ǾlCv|8.eB.KqFT}ڊ~ *O]ĩMlŎ4%WYvmUI$Sh 1rW%xK2GyP;%4Oɖ78]yiAұ␣8I^j\]O|5z Ö7C:qղe/+ ū\speR>ˏ#*xڢ6W?5_'A 8V+^u.G΋-A^ȣ6^B.:1yś61㏐˨&yiG^?27|7qsSկXre%W:\1瘀,VC\iY&]Dz44q8sEl6a8%Xq*/yyzU&σK!sCm뜵UyxM#rm,qyd(NȢ}4).s{)/=PLR/ _TG˳O} ;#M%ԣrXq:V]yldGЖ}e?)Mmѱy=u}dVI&[#?)Va , s,@x6~NH?[w^;>lɉs;t$e 'io fbH\ #(-筲J'|ul|%HG/ȫxmO<bK[*^ȟKIb_9Odo4|}|A)N.(J'oΖcN6'Mz!# 刴L5F ;i/Qq1 A7mryP'A.7߯S IDATQB.GDZO%ŧ*|(?թ|:Ő8զ<4)W[%Z/y9Hʲ՟|W*:,[":UcЇ2a+-l]سqvՕ?WW\ۖ Mt~jO8/}m:Oũ^m)Qr9VWrKet=LaKo3/<_rKE&%i2j_6͙#?K&[[IMjbߠvQ.9j6(oUF^tm}n>r#Kux c[D{4B/fgF#q$1qf9ܯ{]X{K.ʩ,=Vϑg+j_sPY]_?Lv)K{r>yMT'Q{Gu!>LLy=+$4OGW ?2t!^.e'lyc+j'OYsJz`'w=P8~ؑZp`“qNxL)1"ϫ-ܲ#z&Q7bcWWӫԛ]MXlV2ENS]yGdRNrC.;W>m>_spgS}VdH'Ny%cm_:VJy|_28~΋~y~p oVrVR '}mz,)y<{ W*]qJKRz?ۼ]x|guVWQڕ\F1q_CpWZu+9M[##}m2ʔ RB<:Sު Oyrnq{G(nAmd[ĩ.ڞk]0Mrٹ,S\^4B^69umly|_eYiV@FA.ceCXgu[omI&r>iʧ΃ctL<εZ$WץseAYS2}mUGTmΛo9| {nWѼ=믮]L)o.!Y>+YV/ymWyyq7cȩyNxfxM?sܾ:{$z% mE>M>|y~yHr] 8ᮧ G]El[梳^ҽ-!}]|.Gcޥ![ޣh/z3>wF?`T%jfUM`8`?-cD ,Q .Î5\_p/yG@!/M32ԡTگM?*m7_CL$f$~Ȥ|zόDT[1k}X7KyWXavlMoꈯ;hoMW=oPygkjK_)~Un| = FC<T7.dzEѠ?o4?1ֿ bYMq4RqNH4; h~4!~S_Ꮈ{5s1KY}{_5&`&`&`&`㔀SN9%_:;.ǃYXb'tRg}1 ,biLLLL?O|asѐȢ 8s|OkXb% ' cs^ +u^+-^˱B4ֿ 52~+4<KoG~Q5Qh?D>=lfu`qN;--"vWZ*,ax]=Z,#0000qM`ho~^wuyqИoJ:XcpGtML'WτZꫯYn",2p#@^tEaJ,y\veiaL1Rfhxǔ/Z:ӫ.,GCk=G {n)QL`8 `?4-k8s6Kk }?yLLL%`}/P@쇯d&`&`&`{FFDgyTs{C*&`&`&`&Ћq[K`z n600)L` ~Z L/:;\LLLLLLLLLL MLLLLLLLLLLL`2`?\LLLLLLLLLL MLLLLLLLLLLL`2`?\LLLLLLLLLL-L`xõ^y7o30Xoۗ7^|7!L4)K pw[n%UE,BCo׿O7Hyd <3 ?pX`².ntHg 7x03E]4 ܻx!կ~uz4L} C=kewuW[cgYgxq\Gc /|05Iײ!끋/xXdEO'HK瞤Ka%{$Ϯ%\1@@OADG}z˝o1I|_[l! z z2&G|Ry7_g_W%>S[;8Ӧ{k_5{&/@|0_׋x.Qŗ⠃*(UD%G?Eqwfi/W[m+l-;/#,vy"hH}'*k> )K.)V^yQ)ш߳D_~_]zWzGV1%g?[1}{^kى裏wwE|Q+9".Z1p|?gb+!|\>\sQ>L{*|'^xŇ?"~<`g}{_qm5_W\Qm}6~Dh+&o|#[{P02ѯk-p q-qM}5ǵL_\uQ.ҡ+)u:toۋh>ˊUVY 7ܰ({-N9唤;;' *}-DCp/|s9;(~tNzP[ىcG}t؏)HZD#{瞻WRG Cnd4o{g wz{V=쪫yp]/l&v{  0k/nҺqMo*rbe)vqzzcžmC)` r=Q~7.JQfO뭷^_l͖2,j6*B#o[3<3)Bxx!ˋIh,?>5^담5^w2VXat#(ʸګW3&d~1~H>^׉r-W\jx1M)G~(n=9)>/Tpy[ߚ CIڶ|o sNy?"_2n馦Am]K/t~ߤcŹm|\;\CGom,? O5'93GPr?O4'|r #48qS_đ%[2nM7m,\U>zHZj2:;(\7wp ŶmOq~qq#3Kdb' =d8MNȓ?Lp1 '$ux/^eԊC;"O }dWO<1LXb0أNI&1cH~>xS@N'/*Fo= Or@Π#13QxK/P ՛6=Pzz(u駟٢cgc+M#R_ S4Re淾2-Uvvjp>q ՐԻP.;O .`ꇕVZaQ!NS muT[ Lxܤ54 /[+/O `0h&%ZfЎέ~?\1c TGJ0R x`*JK5'hG48b2=CeP245ZkË^ƚtX E!uA|xNG0M뮻O<^9:Sz߅(7W]k"AiN਑"[lEm5nm}`l̍(9dꫯry ~>}!t;H wcGՍ3^#p@DWA^U=ab2=NC 16ij*djA 8*U'g#>q.`?޻}χz!QiV] 0xǗS=&77}S{dVb}@R^ a7:-!5o]cM6$“"1}Vp/^]pl T>k FgaS hqKZ`q?Lu`Bm qģN@D$4q[@z!mzO\g+1G[=.L qWyG?vAU7{3rqN@8wX@ɬ q(mZ坴[qH@}=;[8K1&@\ ?E.kD7vtE=k>]Ǒ!D. nB\+8|6ĵRZǹ/Cܪ-G/ 2_C݈2؉ug!NVj>/]?T>S[9IbiC]Cu2bL#8n ĹNbG-Lvk02vտq4_Z5zH$Qc/yr+GNGU8{[HEZ|]ASpu}4%*N;8i}ŪvaZPšρgsQ>h {uwD< _]~M>8uaKz qF#aƥ)Ή!OoKܳ)-*x`G]s _:ߛ\ft!2@F6ۼ:K]p'AzFݽG|qSPv1w\_|q_jCF2w0O7bZ!qm|J몄8mQ}c5<q]l3 % LT2l :x0r|!.}!.   QSCH =^%ۮ# sá!/ux0tQI8|)~_m<3 OۓN:)0 AC_Ny>k_븟x>ŵA m!Cڑ|g~ɐzYVPԿ䣏lȇ\ ^ qMnv9A0v}Uuv D[Tq2[>C['EJCC=L-U ꣼y8&8Ch:=P&X IDATڮeb~o1_N0B[Y遟gC\ ɠ<9>={ Md?aC孫ITQ./#9N>g[iLoyMѸio*`7OS2(3La'sCCAafm%@׀JW>HLޖb69G)s ?y39#W~󰟧e|<zrmJ0!=,ҤC=Y9%q5穦:H5N@Ϡ*$=È-wV q\z3<7C3:蠤qN=CL #`}ûPl>V+)'J>QT3)A|yoLG sJc~nLV>OӰB7^=#p a]wM V}'xb@Q^9P8wf^FT=GBkDiV|Wz^&Wi#Lڛ+M k ҔRL3pᇇwܱ\@|9jya^&' 9Zw.F) &|DiBoéZ.H-?GWC Etϴ@qGՃ[}a]MJ. 19z 3j=uA~k;oz>P/^@>:KTS|M`Mlo" CE >`9)Z؉SD믟d\uUPudx OuTι*}ۦ4w-騪Q>>wz],hīOYW~K m@US(#?D:2rjwɽFc^뫍I;Zoy#G?2uAdNyi\Y~Hzb-X@@~e5PDv{5zjGV[-eTbqĆ!D'oSc_WJguvO@ U -:>k*Ebx(GQ(KI(0qrN9]cH^gOswa112[bg̀ )6V*_o^OokDL%h:Oi8O]C?x8m}c97^=xi]eA~L }@Ʈ~/>ヴR2fҤI$˘l i8`daqq &Ȉ'q,H袋Ҷ0.ɨ+P#;ĹҖ[nŎ|}kK_eU7t!zw7EꪺKK/.D_0"񒦗=UtXěx٫ ,4AM% a6l3<ysafAt=`B߫ ?HZ't}Q~/ |Lu>8b I`?}\Zl:@/6"qO;la?1Ufy X׿X\q,ZK`!['>_5ZP`ߥ>PyQ1/z7zwq #V/oqOg>B Ɠڌ44Z+0::ʋ;^nӖ"4ʥs5\/iuQv|T8m)EF^Ab->Au_a@ ]_w^Z: g! >:M74B_ϧu$~7C>z4m30ASu7`dpG;3NJ2yJQJSI6j^1tTA 'tRe][G.8#*9ui'| ?@= #ės#Eh/ wrLC#1Ẉ?uTqZRú;|$N w 5Gq\Xv-q-b]t9s*~HGdMRp㽸ks=?6|IV"6_4p<]r-ySM|ip kpԽ=} .GQUPƏ|#)w8ZLiG?:H\#mPSXn~j=^|t8Kdt>+MF [mUJ=+U&J`R&41gxs1E1s^vet; /wfYTt's2 @—O> )adѸ< t,*PO L*'xi +R8tXn=tA_nky?}7E0Vxii6z)ZvD/hLX1i?4v6עa9MAG6W?SďcɃ>t,dP|aԋW1d:ѷtPtirb_KO*Z_4s9S+K`9_ʲ3C9F~\w^7r-jTY^~32A;o]\3yk4FN02^ܛHA1?>ufr-xqEu272!G\8Xg饗Lt9Ǐ_G+k{W_}AdtQysւ3{mI,q{oChPV`乓O =%<_~v?q=7F{JTOc$ ܷF_*DVGA9`<~ <46zF γ(Fڰ~ԉg4@޵@`KF[V1 2z tLF<ǏC G:Gt\|SsiO?񾄇>FCL oETƂ&QxF SF4u#JkC'P"LO)lցk&ҝ'=Qy3^kPϵQQuY'PSI`jQip th5;&gGU#y^{k'ē02`4f5$/Te57^xUn [-ZG` c]rj?#Y*>VX:XVk$ F-FFǝZY` ~m|iaauH:\YMg.c˻ʥk>>~ :wJOnFf`p0}Sx)Z8 O ޔ(xWoVZǛoy;3W_DS!/60000000000Q 0(*MLLLLLLLLLL*l G40000000000 +@|h&`&`&`&`&`&`&`&`&`&`AѠ:MLLLLLLLLLLB  h~4N0000000000ć&`&`&`&`&`&`&`&`&`&`&0l LLLLLLLLLL*l G40000000000 +@|h&`&`&`&`&`&`&`&`&`&`AѠ:MLLLLLLLLLLB  h~4N0000000000ć&`&`&`&`&`&`&`&`&`&`&0l LLLLLLLLLL*l G40000000000 +@|h&`&`&`&`&`&`&`&`&`&`AѠ:MLLLLLLLLLLB  h~4N0000000000ć&`&`&`&`&`&`&`&`&`&`&0l LLLLLLLLLL*l G40000000000 +@|h&`&`&`&`&`&`&`&`&`&`AѠ:MLLLLLLLLLLB  h~4N0000000000ć&`&`&`&`&`&`&`&`&`&`&0l LLLLLLLLLL*l G40000000000 +@|h&`&`&`&`&`&`&`&`&`&`AѠ:MLLLLLLLLLLB  h~4N0000000000ć&`&`&`&`&`&`&`&`&`&`&0l LLLLLLLLLL*l GRi&`&`"pgn)~S 30}{G>L4)}vh&`&`&`:a饗owO׾av"YS]wN>T:V^yU101 yML`\o.fu/fmkg=8 L34-MLL&&C9$<õ'.7<7aUV 2KmO935m'x5s<@p饗NUsI$zaopǦo|.2Yr\LL`bO %pg>_bYs_:tA){ƌa3 >L7tn "p1DŽ[ogus5WЇ>կ C;( 6z xh&`c|d&`&`&`&02o4 Ӿ'uj{x;JiHed!qG l/QxL_<5y3{F3KyTMLLLW^#w>χi}/p2 5 2 @-LL*l u;sj#<۾-R%3<Ym4000^x4~W KwLLL> s+bXn5\0o6gNHimYZج6cC$寸p7{bXj P#9^xa /^NY `^}Gyc3Fd#p.g,޴k R3 IDATV9΢k>Ydz͌{l\pn[YoO?}XtEӐf!{Ë/g^駟\pA*35yMZa%U&`&`&0! | _C=nRKu_}Ã>YlL3Wy]vYҫx.30}Moխp!PlZ3Pqop'~ +^zʘZFղP1Sa%tEΡ("0\vek7V~cA#wy'?p&[2 G@n?9ж.(w:]kVxի^ [`&`&0 |#)&w+;찴;-guVYCF-:2DFe8cU7矿FJXDoh.jIƶn[GCvm e/}/ e]š v# e*?CޗvZ?/vmW_y{[pn [4^w/5~3e?,Kz_RSW|+6|"Ֆ#u%+ "-oICL^k?PqA"uɣm+rqws W&zn=q yyFG"zFvQNs=ȉՋ|3]2[ToߕtEt ڣڢg7IY*h6Sz42wHF" ,jO]r%_W׿<'qrC.'.:[+fv+PSD2NmGַUwrF+Vwa5}I_U:蠦n(rCHsӟy΁w8ʡ㜾v.t.;u!,:ĪǮEY'&?y#dK rJYg裏p_onjlLL`,~,f&`쉎$l5"%e _BJ`rR[tIEcX ~sVЌ}w0ݴJ+r:{^ [o] _v׿l駟䎭S`/Gxe'}nưO/Yᄗ^Kp]xV)^&9<>^g R&{Y/p'><$ O />&&`&`&0 kG/sgkn>yq83;Fi^we}c]IԎےN*ߏc)qWFDǘeYJ/T.]q8<8CFVk*##AǓpשaѩpq6<ܿo2fkv9'h7[ECDS<%OV[V[m~@Nl2JYw?ɏέvQ͎70&`h70>V!Ӯ;wq*ϒ^8i顃=g!S?R"̋ /t˟t(:6WU(Zs*k }>bG`y.0UQ~L4] S(yW'HmGߕ4o[W"d5 Hy~ #`&`&`@?8gww=+7tӎkJq^1OyyVu5Pыt/i2c@ƨ9}g^>5 LrWB e'ԅ}q.is>9wʐ\i@ ~Kw̓,>(:= 9wAFq+y1O uƛ 8$!*۩˦ J:/vd~jU%o\᳟lJF:j4D:`o|:ݲw !cG$,F`1P {ڦDGP`;,[XW#.^y];#)ׅMYWC['RzӶ\̮LLL`!SwOuqTbY5ʴrF#}3Ecl#rhh`lG>ȼu! k]҈+*z6erKũk"8∴l534J3N5KRJ}+X ~)y~Oua6 qC]RM q t׵ ALj޼ |>60J3n C\P):Kc-0?s91.v0*D#m\84`'} q_o-h|$\*lM^Eub8\q񣹳&42#B6*9*;q 2*.UC/z$84=StϹɀޕ镈ߔc`G٠=8`:8NV<al'"1~p⢇z_#].mjEORW8zMͦկo ^'6}ຊSec&`㡑n @=^S*0jEyKYgQ[sZ0+aqr4wp1+C-!~uO)Hnze\!0~=X!YVJ!}>8Zm9+]9Iiu[ FՇ30F#n U۸XY20scp/ڪ>[-GMo\*@@ȕ8yXq[8~xB1B\Lx+UiV]rW\!?衡]~/M/+{w_: &aXF_ Lp=L41b`Vvw:(>)sGFո0hr-c.8s6݆"O<8#_4 mO/+>T`:J~#*'>l:e[=ahڕ^i}G a6؏qLLxSJY M]œNHw=á:9Ռj6ݬr!HaWLÇFRqqZéSb״6|aPRyML`4 gn00VɂO1 /C ,| I,1n˓'kg#<2}iY=S>"̙tyLo.>so ꧚69XPWeg?tfoX71W^xpW)5ΰ}M_T_][>ฃ<^ #L&`'10A!$oq:ݧz*mn{9c#t$W:g(ߞsiJ{+\YWee݀6c=4Ma|^kk/ |3IQYSRErsYh;Yc:[WtCF`r-iS2jz62ՐJdIW"s\ɳ.^Kqz5BQ]eY&EóW1mT[^{i40lϽ綛 +T0WO?]38#yLp<0[Opezܼ(_~_5.rV 1YΝʼn )0 -Jχ?o400XLבvXvQ?N]B`ʓo}[es]u:e 1mӽ#*77K=s8wh~J_2W7p'r w6؏tML `>%Xb\vqDz v[|e_z]8"%*Vwr94t  _9tn9L 7pC,'z1_wu㼺ğyi[2_Ma9zj]6Ǚ mJ/{!_ >Vt3gP oƋ#)Z*0^yAhʵd^ym?_3\`—FG\Ƒ-|.WL٣u8L+kϹ&`&ै-YJ.l9Gt?uJHJkmB?ҫMȘ5 S$]tE] kWXnz4Q_Ї>j{F`N|M 7ӏ&`&`#Gk6yC1fa3Cr\xԅm&-|ʜ _3 c1l /~1{&Lx=L3o91ƶn<xg}7aO: > ?qx臺@=3 xEav꯻pW'o|D9LL&4s; xviiGObZC/X4x&CG'> +y7er5} \N>5C-:妛nbn~= xͷ-J&ٹKK.dc6c{G`tItQ]ziDor譌d}(0묳t?fiay7: f@V /Lk02,"K`ڣN8!1ФWR_򗩯hUW]59#|I "LL8RUćK^C9qQG5ʈ/wE|1+|"zl7 !z'hح=n ^Dr_eƗ".VۓG/rA*ȵFJr_vƗjr1mU7\GZ~@(_˓E*)ۭ/ZEPąʲu;'tR?tɣ7H|Oq*:e\|.ȇ.Yj%/e9 x%g$ϸh4h-G<Cx˼zV+rY.zkQQ~;d e^6h.o'ȋww65~|H:YtH⇈:@S768`G8y/#C~衇Cl㇜.Q-[ʋ~׫>6~*qaoEqIp,S.Lz{[KVt>QGYnTnS+Ñ&`&0 LCLL` stSZTl1xdk&y)ᅄ;x>qP~s0r '/a/8 EO>I>x31c3OK m^!vxm0̻:l.o}[[)LC~7MJfy g$D4ܧLa`GŀgrXu o=Ǩy m^ #f?G/IxFÀg>k8_UzU=r-#aĈtSF˚5g:+ѤxL #4{t-YIQ]}mq&/M6,l9IʡixFhpu+H2Zn ,@oFcokLEi 35C*ψr#1'0E"3oiqoNScT 76؏s{MLL`H ?s~sq3LLLL`|?h>R!Z0F6#L200A!w=KP˫jP0D^9 @x9]uUie]6Es2-Rf~[_p8 Xo=X8y^A\8dM*6`PJL >O00`KWC=^|0s%X"Z6 `o; =Xn«_ˇV[-4Ln&`l0000000000^tvtV0000000000 `} ~tV000UT IDAT0000000 `} ~tV0000000000 `} ~tV0000000000 0}ǑL`xõ^;Чf&`&`&0fe+FծOO2000)$"o} t4Lo0sَS|½^׏H0khvL,9#e#}p}"]w5FZfC=py s5W?ٝg*xw]tѩ\zlf=_`S9z z ~]jF!PޥB P6PgT_&yvH -b-7<[&A`- [mUxo c6}&mfam mCv!x=[uW_g>g;fupvm4-) pm~D:Fmve8(\aM654 Gmawíܦ1}#.* .,#MLLLLLLLLLL?6ɹLLLLLLLLLLL`D `?x-LLLLLLLLLL#9\@Qg O<:s*O=Tx饗?cK_x_Ccb1I~~LOzk_|PM\Cza`'|>_5y~=.oc|OdהWڪa?ҶNN]\Gx x)O6ur''v֕5S^ey(D[[sȨio[WZONⴭ\^>]{\[վvTe>$G[ɪ+Z82QP-2gxs(*MSw.4.]yQ''ϟS&y&Yy~:".?^Cm2'>6xk`ߋ'K/4L;^O><)..p+'5TKVtM30C0L3I#p~@|$$|P!ϧx8Ү2:N?n{w+.G;[ E0\s|䅸5k\Ue~DB]ie8m.[Xzo~ᡐ/)Kq}S2\I }P~{Xr'y}=jdsC$Sysيz&(-y~|ʛ;ԱUnJ=A!/ y<,(',{ =ԭ?ʳv([\˯3PVD;NէxV>ԖX9jȡͱڭ"Nb}",[K~=#i֑M+diK%C2P]ʃ\6W򾆃U^esȯIug*,CY$վG{L%!ڔ6'dp>q`_:4 D뮿 2I?V@]e)j?\OBUe8"?J#9Xr}O,gu֒,̒d꺓 4_^Cz9Q'`+psa2M^Gr#%E<7Fʺ^ȋLUN_CU2c=k#"@N4)yq>Wt]s%3X}< WAU<[Q{-#YO[t9H>uUO~,~OkG~(G^W٧-p V$_r(O;$S-lqs|u^yPjI.ydJF^bAYmsS}$)1qΟ,ΙP?ڔ,tF_u2Ő4Kl SO~.KG˹PyW]MTN[dUF~ڹ[tj',T>?weˮqB;$KuO >[\sSd#[d~ϝQVs~@p/WrHS)y#\W_=64ȶ*)$"T *j&d)BDD/NHY?dPe"XRDEQ |o}zw>}:{zvYZڧOysS>nw]kӻ Y$ǡ=طp2A΄x{;~k,s|#b/sV3xnlzpNx7w(幫WO&pUIUhޞ)OSEխnu4O?:x͋i^=w#~t/Z;I CNfׁ@tcgki?1{M\}/d>Nq6D1kSkE\*^+qؗ_~Ǭ79Ck lk}`I^$<bwɋӃ}9ɑ?>oӝst>7y{cy/p}Ψ . i^@b7'gaA煿W@'Wq._g0|#~{Ktӂ́O4;\i6^Z}ׁ¯0F{w3>ѹ3ul;YG)>Txr܏=ga[_.$q}^.pefOmr}5=`.by@/μqwts:Kmܽ>j {'9`/|N68T-X_rwx+8'19cOr#Yf9pkYC=#p31'_"y| y__N:S{&~͞ &˽('X|db/s8A\er%\ȼ_ֽg]9{O ?!β| Fvc¸=у:Cqk2{,FiZ8vbLLl >=mN9 e/{|z{3O/yKjMڃa,?3?3hzի-򕯜[%ݭz=E6^`FݾEx}c+ \l5K_u ?uw^OW_}u 78c OON??k_9y??wWӣ}%熥ĥN7G9e māyhKv$% ֫bҏ^&~k#YJb,%~cs̏< LxmiOb'fZ[_J7ᶗ8| W)F&^ K|Ji+XOJ1ϚJr3qm߸r g  )j_=Qk27/:Ui/Ipgmy?҇ڴ.zr)R?>=:Uϋz]r:ĤN稔/^^Sf Mœxt[zoo^MO~Wr׻uI\ZY|314׷}۷/7s>LW^yE{=@O' 9{>@^o>ͯ`5\~ei|z_==Oü}c;7]K z=@O' i#6ӏ\|z?ϟ;K}sg'>u]fO? x==D^~{==K䌶֝p<|RJ] O"Y~: ݕk&A:nw۾-}H??L??0kv0ip W\~}+(~~l|MgHyA"j{m_s:#S>p鷟̓KIl Ǿg!Ʋ7tr?|عW|i`X3kubũg?ԦWoopȓ~gGħNN|'V ~p:eoP#>~˓Ȭ!hUvُ}з7ĈErk.ck%:|5N~\΄v@?RuۯI\3YA.>9%'<\9gpK.8zL?HΝ?}zO:&0 ]S_gwp-'1|Y'~leLpQĴ~S8Ote}{߉o(IOzzd//??|U|3\{=@O/x_Lŵ/}cqv sC٫'p1N_|wu4 0}7MOyS:__>OL| לaÈwݧ [}$vO8_*GکkOH8gN.#G-V^>Xã8+9s`{6)Lz2fNWN?j_mR?rW^J<|+;j_ɫ9N!>tkGҗiX܃58H{jr2*־cSoc}8ԉ2GnIJ+WG u}`]dyK7iY .~}Hyȱ6~t{vϞg.y=?>Ŷc-|SƏM ltrܓ~$yP2׸Vfϥ>ZYɏ oӆeILn}QO~rz7>_ Ɓ__,b: zoO@/;G P''}sׁ7twA9˿5|}Ýqzxp@,%_Uv#+o}⭃X=!9lpIJ9MC!2sH܋`s/,9Gz.aϽ~V.9ȓ?9^֢ZCN1iW^wOL?6$ʲS΁31gOHǗ䀃OC!>1?mq`}9#/uNk7^H}`&ɇmM;,g1OZ6}*-ְ&8u(XlAG}[GNl|H86yL>UX =ȁ/.681s:4ɐ3pCӚ5vO`awL5_5{Ho;~w~wkߍ=y޳u{:o_eJO' ȦWO'8:+`-ot;͟~7|quc7]%Hބk<1oR^sK_>yQ?…>ZiyA}p0^gO<9kwSOΣًdn9$k_\1Wť},8\W_gL})9K=g?3'ukĿ̩R%e,RʋC@Ai3}KA 9Hf2uJ}iUpY#%Nb}`S8?sz?wN~=ɾ oOI>яx;UM?N֫' z=@Od'}lz7ܗ|ɗ_B xo|ooGMpկD z=@O''_s Ox|X IDAT~WLK4ȧ<1CUԧ뿞^M|;G?2Tϑ˜ ޳/a=P+=@O'pj''aFk5_OLNnOs_̋aN|vxxWϯ˾l{{3/wLoה|a|M]:!ga\;=l +|>|9C<6z^bEM>qXu_^%iGjUӒy`O<^\`bi\pKITUGتۧyݏ^Oƈ9qe>0pre.b%=JNKzSƗxp^ט{su<+sNp{(֓G>ߚȺOs}'^>05꓾rF5+!ᤞEM}vcS/䒽yAO<^Omjweb?9%">=o.[KNjO>ܣ-ZyC`KBvwN>@|u |&8 IM"k{~m⏿ewk^WNG4K 'Oc)3ỎAVUuYoJO' zxΦy=mA{q/Czֳ=G?{|]geNC&2Êlߴㇳ%FIy69#JX:8.g//]C]COspb >86]Uv'1k1JK;LR}hlpO>{BzY:Jqwk(ŧf8>Нڃ~0uQ{"fؒ^4e+|k;ȃվ3\" 7X৖RJ^~7`ךbRVl+rss™U{>OJrȧ*Co.'kd.>>k ٟ{+ӕ=mM5ɋ'??>~&{P/ߣ]$[XW@O'`&//MFN|ov}.}~׽n>_ՉE7o]||Oo{y DSj&y`a_Ufc[+E]55/sJ=O?wm5j|3'v/:K?Z`6~gi26D>Ik>qWΉ̜E]Н'!g CO>5 fܙcߵ$fw83p;suā/1-\<͕Ǎ N'}cR.x\p3>?ur?Fg-K?{=e-9pwO%99F|⩍B3Ṛ,>ylN^^TFַr 7RRmk36UO r TGjK.tWgL2G:OD0rr2}G,~I&MVIC1seU.#Oau{LY9U֧\ȥ f)k+{7x#䱆42L[ӳ=>mmQN=GMڄwT׼ʳWs[N+qN:e4k뻶\wqCW5q<9Z#Y@O' z=M~臦%3//a-}3U}jwO'2hc=x6Csq`U ]냋bSڋ{I3G^}|3y1y`O>`ч:0n{"?m|,^s ~G-efVWk\ř<{c`}ǘ/pJ;)ߕ=Wه)骽GreoW-9jƜ|S&~!krK]9yu9Kխ!>mB엃EbklkbC^똣ԯm*͙ocUV,:ūGr֖䍖O{CNM[ÕUsp R;sQnn6,Te//~+{NmO}S{/k ޗ7iQoo߸}?~Cb>'O_Kl' z=`o6 o?p]~46 _}P^}򓟜_~{x 7LGg,5xꪫ~wׁX:뿦.l맯W[O?a_~wͺ˷D& J駞\)D~cE{!}rPᲆ1ֲoo qȺw^W~bɂ > _}+9wsn_.vy{ŏmpONxOݕ|ĹOu` N?Ȍ9mqdt...^ވfՙtN`3'kOnorn}VNk1pBg'ɱ88{_36:.\^|;z_ǽx? =fg->{M7͗sOMљ`?/6އl}Pwйk'.{ؗqh,)],u61rs<#~йp&y\B#k׿Ї>4GO`[8_m16OO`0|s;9Xc{ڧ_yYz?}~k^/> z=@O'pOkk:7ԏycׁ__xU<|}BŇ5ȃ ]҃>cǕpQWk ;sŽOڷ+D iLya5$+éVk&OWix3'Soi`6)YxX^+~_qs#Wb5ޥzK|,-pKG=kF3!_?ǹvLQqK%?9~ҏzgO˜@_wh[|~i'w] p>u' z=@O`}|O%lׁ|؂OnG̯9u o}{O<@@b7=$'5_'&nb]}RR;/bU8mrĒovȞevrK9O̾S_t\9ꇯ?/Qy\WU팭Է~KisT0>g\Rm{-kM.ĭra2&L1R;SĕڧϯqTosXX iO?uqrQr:8H/cOPm}t~O' z= }u}M\G]Sxޜ|akWĴ}H3 Zӭ!68jsUȾq> 3=yg<{!HN{Z~ME:5mK[?=A7sRxV]Hzf.%\fc93Esn֓_\ %/.񣃕Glb'6sW΁xǕ5Э+x|c5 v>O;~ݗ3__ݯ~| 7\~>]^OiMD' z=@O'8o}3Né9\y6M\z/'2$:Oֵ\{>õy$uճW=l񰃞ȱS.jOZ JΜyF/rm|sb{|cG9DΚ,9'tEmoNOC.2W֦Ub6\J^d^cU'ܜC,k#]ՑiyH0uzN>s'bs{^y&g1s9KrۓMnxNxl}`ý>>%^9;ǒ? 2>' z=@O'8_'oy3>tk{47.} A~VeMs|HrˡLnOKqY˹i 5O>kmKGڇ|9\I.6O;'uMܒ~%:TGe輞@O' z=@O' z=@O' =G=@O' z=2?]'$ᇧ.?1~TGW[^l9셯VCU b>/r>t^Ř'Lbw3ws5JZ#Wۃ_RlUf?`H^tC.8Xe<3{qcW1ǖu+VINtgXYx^ĸ~uxT2\p#^޴[=>D' z=@O'8 oƵm8q'_roŧO>c)3#\;7\y0.'>sc͌%&ԻfO' z=@O'pLޜsЖKo}d$Xg~t{tM{~žO03s~⬋\Ǯ{`yyI#ͧO.g.oa֨8XWi-fE?qx{%'R"gK?uӞqCg6Xŗ}Oؔ,drK]`pvH,rq8Nukݸ:|gbjbOxkm G6V F5QGּQ>>VbJ?zs/,0 1¬S7I~B?*)'9.skq=OQ+~K<Ʋ_s9"qe]Uu/ѓXi=M`#{ z=@O' N<y}Λ{/ޔsÄA=,ɳoVd IDATbY?sd\p''lsE=/|M:1\Hrі>*=9Y5N.6Xc[ԉ1i^zCW>.cB[ 룃h76s$aKb,8;?|nt |ӆ$/b61/NXpzeZ˚`$ }tkGYmrO+{keO`mOz=@O' z=S;Ӡz }!@%~M'Ʊg*ڒZ6#?氂C_V>ynZN]$W֐KLHw~ҧK[ Nz yiWs1gey3Ώ̜ؒZ e1rR淚dUw>,2{Gz:' z=@O' z=@O' z=#L?auJO' z=@O'p~NO%qrɓ=9ʓ3q(}8aؼrY/9Hq=.C]|y*g.|B%>myH8݇~jK?=~'gO⨅.67}装?c7g{a>\-a̓SXk}Cl0(# =9$ sg_{=@O' z=2ߐ#G7)7`I~pi/܋`¶/pYҒQƭ\9 ਋:xB>%9Oy̓{v,KIgNA?ƕrI+įLL}LG^կM>$>q~i#MnpZd地﬉n8$KsNnjG*g$`?}6x{@Rk1_N93e}g~oJ]!4~r%P#XA=ެOwݟVwOHGr<Ͻ?ļ_}A ~k?9a+@y`{&܌c ls}`i6WO' z=@O'p'0:(a|x ~}ϡC—Xે9r{Uڣ6)+Cx|}饗8؟u%?r~r^'=9[=yY=c\9'Ա]ɇ/qp"fcډb)+7NӏK;r ?4p~ua6&}ه<#Iĵ|wz3v9:s?Щn|tu?r"9d?!H#'ĢM>85mM5N.7ku/,cwSӞ~͕x|=m|$>a#čs7f],\'q;ƥ/9= k[xzIcse.bc \G t[_+}I^`SÚ9$pď^ƆSJ}`+8}>O׫'pRlz=@O' znFrz͋58yt{<A c ~k*qlp,Q.aL;%◤Ǯb+F>qysnbEjZ)/'V_ɁF>g-bkm2vc.0?9oJŪYYb'o>N=~'J{u/dh'1e|{~r/o/<}pF{Ǘ=RN5~ۿI8ŸzYWWr&/ޚȼ7ԫM̋uK q  ls>J\=@O' z=@O' z=@O' l4FcjPO' z=@O'p!LOǎ]~JO)'#4?sK=|J&Ǩ8k$N_C-d~==M>zOf {RG<f;pGO32̫cÛ{+h͹{G }W &|t?hYJ9^WWkqEqd9kg}KR,@gP68{Ok_b \yyOmғ){QKk_Κȩ}ʇÛc.}+R#{rnm:#'}^cM;^.bKeLm%|u3#l*e r~gQ Z^WZ#Gڣ{+G˞6'pYz=@O' z=)o :f|wyxf87ɭ.|cHj!gN(7S嬇YK9qtje }k<͘Աisbp1_,ö6R1Vɉߘ=jfMgnUwk9܃y#Yk>'ȗ9 ug駾{Ÿ|uorJ>lpf;љi:b~bkKrOĽv_nR.8%qbٯBMd^U ?:'u|r9G/W'}w|-؟q}JUnG_bi`+˯/E\?zr7WO@ߜZ=@O' z=-6ޔFudYOS/9}-șlXK?|䫽`ۏ1mGQǚ#}^,qHu5Ñm%r)Oz'j̞p3e2|Y}3G=0Ny/sV#/h#yiSCNnXg}63ӆ5Ozsyͅ kmk8xl/}Բ6>zKolqHTq .%ql/?ObN1r&F~>gf~❼ /bϦ5i@؟=z=@O' zjF?lr S}$R 2}֯ɛ!;QO3~tj'r).s6G#_ʙ^R=&~vl/rY#~5#NƑ9-?Y[1>' z=@O'8/&!o9X0ܐ9i{AJ= >2y>5x5I,:]\kUOe; ?8́p,̩3%_~>vAѹ'uppXstӻ9Hf~tnɍ?bgQ|`਼ ^Ys~U r^荫q_0ԃUSԝZ۽X|u)w-=ƜX8|܁+yL`!nֲ_sBI?̃]aYtސ7.F|,|ʉOba[JԥU?mp`X۬NKNm?%88k''X=>uG8O,sՑ`ȣDs𠧍w_WO`[mMyz=@O' z=z7 rǛx1pn lzD=@^ Չy-NI?Բ6~8=$xrC}ڳu7 1g#:7p/|Ȭm81:5w|6~|^F}yɟ}2̃K,ݓqkOLu7~˙yΕ>YprQq8Y֘{QʞɥOzbĩc-,q0[KN~>m}t#Ƀ՘yo]Y3|_0O˫nyr"OlXtt}y#ǏX{?r"Gp% 3OΌW۹=ΞjӏUKNqO~x1^=mO= z=@O'  л)b'śA9&|և+},=TP#/W=1FNi|-[u=/uNb˹C+mtʿXs'G۾2W}OYs06;y=Q[V\^j.v崮ZY'vM7a$߅c\.bp2k;|`riJ{Gpre_`+\1{ &־@|HL%݇G?51z.k./k%.}b[J|t1Sp+YN{4>1bsxsb}y˺\.HLcl۾q'ǝ`z=@O' zxXh{:'6fmquq'#Xj)tK.]p{3_|J#NN;F1|Iجk׳0I.kCGRsƟܟ>\8k:'m ]{ 5X>7.X{yc/]|ҙb_M3>/9Ɂ oGٿ0 }k`?+9Vn8k`1?{4$23v~Kf<Xt뚃_=Bw%.X_s^S͢u27}Ù>pc-s9C캜=`M:a/3{Fwg(.%p8y_m~[l@O' z=@O'30/*vТbw kĉYXO*E2kJFxcu7wg7wԳ?d‡E҃}xqgkm#GvOIݦ='Gdj|#M7=>f7Ҝ#1>' z=@O'8/'PWo汫o0aG=T>0硤QoޜSkk1y0e|mRT ?&rwMԳnU`=m7JRO]|@Ka$>|Ov _q䃧k1䓗zqqg)+anf/崿'p Q'y=@O' z=y5|sr#5 OOzé._a1.y=SezƴGL=Onmxs;:.t/{R6uӸ}׈5Sy[O,>UlzZê9Rg5 K,\SsO3cr{4GbKH^rlc?߸_K1 =?ݻ]nj#.ǀMj. ?\G9k?~ucux~7bCf69˅^G >OssY >Z+rSi \.8Y9C^ c24f_ƑsC]CI ~E6ƪ *F.ʅخggY<=㷆}s˗bO?>W%6;/J83yb# 9>99C|dQ9#lxug,g>թ!~}u=V7FnL^uG^d!cc[7cLIHj0]θ{S7޲' 7sbm@O' z=@O' z=@O' 5@O' z=@O|@~OO'>Yd^Su|"Oϥ:8YK=?'I-.ɯ_kb#|WO[[ά G^XZgqƬMGɗ8r5_fN[ .bƕ弈ɟRO̽#YS=|JѫZbљ+gO>U Ι޹K̙8sv ;\kKQ^F)oN/:+u-`Ov^X߅ 'ڋ`WON}Myy='0,lbbٳsKNcH砎!ތ'8=`YrZV=7lYC~mx\G IDATrsd~+_^^XlĬ/ ؑEq1@ z$ΥX^=mN9 z=@O' N|qmN)o>p֓Ôjs 7y,pɩdar& 6ysý8bٿ>G]r(Yҍы<=paO N\yK|ӏCk+X3?eY1#Yq=[_dgl۳kAK.m0 7Ҹ3/\ɷ{%roiҧ\]7'1k}{ݟ罐>|~3|xq}ޓ?>E›6إV%LþZH/{rx>6Gb ls}`i6WO' z=@O'p'oy}as p PsA$ J!{ V^:ױyQ߃1y3WF#:|%ν'U~{R˞wgi#48xuf\8?|y|\Jo2Iԑ('y_>$~kۏr+q`XA\ ?R*?X}qVopeIxH9QG8 y@<5ԝ6P8KI/ҏN?X$5]wOb|,Yo 0ɛxp֧H =#47}9X<^C8\.\ɇοʺp OK̒E%Ξ1CtcQnWZ5>$' z=@O'87yx&\ɛt˃}H]/NR88a 2ݳXxWؗXkq0e׳sǗ3f\pɅ,K.Jb~'8?5J,5'׾Ycer֒3c+ Xd,#%vO?+hG|9~`cG.|bgm%Ƌ.k?Ï8|%{BC9Cv$_Hz18>u/M~CS:;8ĉV! H|EKۇbc-9g/Y5?6Kܓs`ݛq$\K_YKĩS_݋~knȱ?yC؋"O?Ӳ' &<=@O' z=y57!t>} bb֗#:yyc׮u6uW9R\J^8Hѯ4robfГ~mM{'X嘁[Qg}Y)> \YKo1o\lYW.9Ȭ~us`&OSܙ/q'=I)N_FO[.}H!)eߣqY{_%,{r՗51ħIU 5ݳy벆HګR 65*vm"uWOL|Ɲ s˹z8 ߀'ޜ=@O' z=@O' z=@O' l4FcjPO' z=@O'p!L ?!ǧX}~J8K32cKF$?77Wo_~2ɧyI_Y? nc`ǂOu:O s[_Κ >g~9.րnLnmolb Ɛol.=c&9v#~ݣ{}osɛxt=8E+ȗԩa|oRboMH"UHr!7' NOpM z=@O' &7y@!yQUrg~m9# \`ŧ_.y`Ǹ5 YHsQRXi?p&1/F~1K2sR_»1s yͱs~sͫXsQw/A\!^*G~*탘X&8k|O' z=@O'pAN7)wfOb<Џ/86,|ɓ| EH?Prk'~g]q_}HrsU,#>T#ҽ]#47{G.S+q)rd!=#O,Bg<.Hc/-rVrcnCzts_p>૳'̱|b~ E,㜚 V{Dgt}J}s`H,uW)$q|{Й̺#^` <,s'93,p̓>Yss`u=෮XKRKW<:uy GpG731#%\2O\<)VƜEΑ~{G{͕uznkM|hez~l@w;t݁@w@ތIp6;׳Z):3a\(Xת|bWa'Mr4grnUď꣆;­}X5؋ZaK~r^e\o˯$fN0lRQ`6ӺuErц̚0?#?Z(m݁]u7wt݁@w;t1ܤ`)Ǧ}yc6&3w>%^?}0mw-ZS:uYKrisO FQMzo+G9'iw5. ?[Uccd_VmJcUjGVlb?1=ұe|rd_͓<\,b.?_mdL999#.I̭5kq]6q5>1u>jS֘%|=p/n{w:Gt݁@w;tΨYEq&Lnx68Cg8W'i,<<̀c_I>@HssX%6_/ac.sرYRKZz򼡳vsMY`=sWLߘ*kXtm2HFo#C<̱1#'/x[kucc1'JRgL䬸\<gWY?96_N-0#mpW9RZ'yyG9s=ۣx 6֕9 ^֥ Cudƥ lYC^$\9FXlS,gܺ'9}=6F:k'ryO{i7 N}1:ȗ6ph#F`*I=F\Gb bdŢC\W;pA1݁@w;t݁Y7F{o" O;pJ9%:!Y{ʹy_s<$ui|kgpai''0i#|iG<%y];kPj?&9&y#g%x9pxڑ"ɹc.N;#'Wb3wbĘG[ɹ8sɫ-gJ#+vrxM+oyA7ygߑ 8^^l Hqn`b%> 'M1$@+݁u7wȦt݁@w;t΍)pոzԮԯt]M7r5W@ތlK=(7L[7r^=]#y3Ȗ~*'.LY'mXǨw]Aaݻ^}׼qTj2m[nMxa6ۓUٔq݁ۻa{t݁@w;xC?y&ƢsTMbՑ y#cӇPWj3vm.yօZ7Ҹq c븲]W:^xt8*F\*gOJs˵?l~-~rSW8MV.xO)w՗įkXpbךtkTouqg=G)'נ}dӗ_ͼ՗\)#|=h~|4r{4>זq#[{8Lz0@w;t݁@w7 7nι_XxLhv#M8^ |09…\#XL.x|q> GqϳCx*@^ 3xcXqڐAD5 ccPy,{_X'(g|AL֖Y;< y`kK;yxWօ$5vK\_ucFR,2W̛sms#>`'X9p UެX[38kK}?={dnC9~9f=o.jnՉ«/qA]ֆ.i䰇0N_g= sWInYs_N|tX9,{_#b0w0~x8sch3̓u9j+J1CüY7O;x%>ڐ\3<%wh$6dI~??vkxճN~`v; 9u[:s{ktȍs]u"I?:qnЖnsN _iunNdŮZOtdgnp/MWZg&u1rUHV[}Ψ~q#iH7ɧn]IkYkG\k7Ė|γ֨9ye~ ֹdpĉAa~$x9+Nԉu+7񻖬M'erZĺ6XJ}Hז-嫹Wy͡>›CQHs(AMΣkVkǞ1%'ɉ}!'9Wn ܛ7YX 9UΠ8 8߀!Yt݁@w;t݁@w;t݁@w`܁~~ܗv݁@w;t`|J'xNb @UϜشa_zQ^0 24?:oM}"_ߋ>@,ఫ[v| >9Y<|@Xs˹meby-8|%npNC$6e=#zs)WKpԯu9]?3zC~y|c?څPoਜ`e_a=p0æśaԍE cHc ~s1N\k$reN{L0Sf=Ěs> ?2QݚÕ:a)#%0:c p;ƥ9#ӆ1y13vzW8Sˇ]^%W>;'=q/݁]v7wt݁@w;txӮ;OnpO96UAy4 ؙ3K}.f/cMa>ijn^O)Yձ'ԍuU=csn|XKڙs٠ɃyC;&#QՇ׈`_>jrK]1UϘvİq*/zXl`Э_[JKsrdMƏl!s 9쉺H>9kiMā3^as77ѭU.q5Wr989GHl- L1icwUz 8MZ=%=gGN`ˉCzO_7?m̭a6kyk;pa;݁@w;t݁YoyCM:Y: _,21ĉ& ~|bqͺټtϡ#WnRC?lYgy]g9'6(Ov62lؘt=KJn 1X$׆8חXx'&/6scFv15?y}xSe=I0?1^A֍Oďz9Ǘzc͏92pyoZ͉]<98q:cuf1|/1Drෞ#+冋)\!u&WOl֍Ɖ 5&|سN֍nc:ZH83cFp \rX`Mk"2k?Y6qYZ=/_vsiOY28bYR9ΉI_]KԞ䵑~]Fqx$_?cn:W̕KK[Ǧu5;iz~N5;t݁@w;8;r:f<|׍1Ԣ/miTv\JjXA&mxzr63h/<ڐ͕kH ySkM)O̓?k-XOonבXڕEC8źI!GA\=u0ErK 9köjwň7Ƒ5DZbGZ x+9I}[O]Yh>QGƯK1oRrVOK9V)Jy}>Uke_Z'~ t݁@w;t݁@w;t݁;OMt݁@w; i8^C?F}jNv*<|} WQZr3n-ont^_ɓK6`9VKr d_ўqւ/  >cV^x8:ci#ؚ=ϑZ}:uxcI]I]̽^GU9?y&6x>+5t겯p&BGn7ݾiGÑC*89ܺ;FUdsy-)8c \qC 9ġ3R[q`nbsxkCSuqGgk /7鼆Wan+6ۄs W׳*y*v>j)Gb|XXi{w0 tc݁@w;t݁|*:oaqwS`%b@f zS9ԑY5 7nR0w,%ɃG rANXQY̨6*y.nFl",\ҟQWrSuWcl"׮Nvy8s)>9wpʋ$;C\q/5Gr0ws]q`=Q;XϽkI|싵g.J|bG8m`ȓkcwbr=]~5[1;{^$J|%)xeE&RN9ԭrX?RlŤ.>m̍C+vFgYiGw}<w 91݁m:t݁@w;t݁Y7c\DvMpu3 7WlxdCȡ)Ўt.|\*I{@?}#Fݧѽ'nzxž|w\k-8o <QZvlZ9[skC&Fґ~8LXdr`='HzN,yՑևWy9:8xjL0yT̮c}#veWG=܉=:=*W#P.Gù{5H'arXgW;YF<~r' o#EfM֙\bY2q3}no֐볏ʃⶭO9¤ٷo2<+ӖvdT}ӶA;\u݁@w;tgm.p| #ƷH7UU!`|`9|\X֘<`W*k5}f.9̉4/MM}⍵NڑiYg}9˵'|bQ9`4x>Ny~>k^ .1!RvΚM^쾢#yͭMlJא6ֈ꯾X0g|_X윷b17֊CnxuX$yL +^sG3\<\_ε!G~l!uglz-3FeGk4cTX@N-߬;9gsVi[Gk{ kneqWuznYX$\9GXt#?}7݁@oUg;t݁@w;8:7tn;f,qˡ]6_YS?:t ة {Э/%XbڱyC7j]`!'+u"řGq1?q+c38G{I̹J)a|İyx̹y/`sER q g=XzFM^6kIn}Z9*i#f،ю/ | |7m]r&<C8'F3^cg8$Ė:vjЮ I.kFg~p:iG?ztaTm@w;t݁@w7޵ǧƢkSV^ux<*׸u2k&Crb9A!ѐ3kE!xl;>6lˍL^kΚXU^5T{꫸Vv0wؐ"5*GCy˼+o8qp;Ę_;hCr.\عүa^os6-s#X'kӶv=&UpCime&o»TKE֙vtzya7|ƈϟwcax*ؑ>™oʵe,uqCm8t)G3wnuYvg^scӮ=QߴUܣ|fjG54`ۦ&=ɝsqڔ#krʱΗ~K|)푵d.ç}J7ucoiNMU1K!ּJMbǹw!Gl5[cG^uco/麹nsWFnr=յIsKKqmlҁްߤKt݁@w;tι9Wި{3fsqHqƨgLKfzbg|>l GFOng60F7p5FS9209טȉM\vb҆=m*aY71 0ձ;of|Ԁ9|`={ב5*u|GP'<|!+FP\_[neϘ8bďrkg2a-ua.NNð8̣NbWubrGEa=stfX}~cg,20y-Z%F5zx~e>%f}cן~lHԆzS;5b'kV.l mU?a.J|̭Ank&9:a6_w;t݁@w;pFvoo!G:h6 ?z8l#1`w:Svj,X|p9Y% puM[1#Yg9WŞC\2OblLsXCN}džlY{9(G2v)GFr\ 1us̕vY̡\g?I.rj1֋=k9>9טgrܳဧ>bC8Oۺn5su݁@w;t݁@w;t݁@w;q [@w;t݁@wl њ|"JxdqJsڰBw<Ӗsجx#N|"Wh7ݜpqN^|?zHՎ>tRn4֌dqY?sy{>p `nsbitt󊜚KI.mp:ws| q[π\涾Zvqc}Uǎ:łnRCεou8ֆO ^XzqY/ƚ\+~|bgQdX s֊Āaw8ح|;7CΕeC ׆!Kw:Gئt݁@w;tάxNUޜ/xOGr<Ə$1lF v݀pCF X1`[5ĥu89}#*I z-gG|Kb3!Nݾc$!6פX#>jv:յ.%9O>YWl;7.u׈/da)ra37sc7ք^qu3UNqƤy3D<x 6J\̓[_-*WR5)ɁU3s0ڔx8 yT Wkz̓״Yc^ڗ͘%vsUqHK<:Qu7쏪t݁@w;qps&s|!g~1#NpG=3FNl~GOӻAۭzRMg]rZӗsUֵѰQ%1iG:u{&9G2i{_aX+6s:?uF=_HM;nl`spr0䞕c_J^OqHݵ(ܜHrhO2 u˅Z}_WWS6amج:77?9ѓkX$H8sM;Щ5!_lϞOM;=WάM>/0ڙ'. 7\a8Ɛ+7$*WGm̕qګ.;o~$X lu$#9GZrV_N0؈&|ڲwۺ@o{t݁@w;ƛE¼޼c[7X~7 0wM3w3 Ńu֡)&m#P_/kj[Ks|<7ҾinbbߚSn/eɧ_}Am:4֜#6#3.1y7a<l~(y͓u:O<㰍Y57#K}[վA;wA3t\w;t݁@w;t݁@w;tk;OدmQ݁@w;t݁s>7z"'Py'P}B/Au.xr'"kԡ:^A~iǖO>_l<NxFց {'r5:5/xSfG߰vPky݌n. xȁ }X{B] 06ԂΦCn<`Cnlr_k!\ĵ"צtTNؔCɼc!Jk)NІt.?=f5n]u5 IDAT4wȫXGb́~dqb×oAn1TƀYaEOl+69Mi%ݘhwRgΆ:9~1p0 n?7S8}HsP}~]]NHb/q \#]i;kK]lZ >|Hsy9+11ɨA.f.1#6ucͯN=3˭OiYC\[vvفްe7;t݁@w;8k:M7ͦ67O{#_oε+&C~t||x|扛W|IjiYwcUpW.cYgPmJ|asJqJUVxMY8Quy݁@w;t݁ސ+h7r#`|n<ȕ&61ro5b¶ZӨiלϺلoAU_⭸/mkz!?X䨖mʹiyl'2k_w<҃] |#~#G8n(c?uyشNqʚǨ>}5ԁް?Ft݁@w;iyWi pڥHybS:xՇ%k WJ%Z>=.g:<~$v[xbWfڔA](%<̃^(־$kt5NR:ؔ/}Kc,53f=Uu%n4/mf>V_CH[S}oȟK|xflZ&voRWca_;T݁@w;tΩ͟l{ӽ->sXoΫ)Щ ]Wp '(3W N ,uYO@xyAmr@{]v!F):8g}#I<9Cw}JlN|Cg,{_&r0o8ckPՅO<9\\Kzč#/q9H3iO\v^a3tpyw͜녁92}Xѩ NtjS1X/v^s|;ϒ6֨~3s6j'سtnT;:S>l;5I8tbor-!#:27137=cC.eb#5b9 6rȅΰ%^]X1#sg^y\˜\5:]'7xOwvՁްU'qn wNo{ۦ}Ӎ78wt%LOzғ<)?ӫ^C.'N?c?b)o^N_|AzМ~!a)݁@w;two~?cؼAuΟ{wzK^2򕯜>̟˿|z0=ϝ.r-Ӌ^5y\7_|99yI]E&~toŹA Wթx1֦^9ِ_|nqN+Paz_;Ƃ/v:~7/kog/rSP;\քy 1&tsG*qpis/Z!v8G?uoƌdfÜ5$gZ;sU֜Ү =oFsn=#R0ug_c]^[O<ѽFgx?k mppw~c9e~$Ú9شgnzC,1p7>*^Kxi XlYsc墧Ήg`YN|՜ƃ3's8`yc@8بpdȉnn|4ԗb?96trГr`9jJ1JrtsY>[vvفްe7aK/t?x ?M}{7~7ߙ~#f?D{^O}Se]6o3Qxk_;] p@w;t݁;_ӟ__͇y{~?й?OOY ?O7yz/<)Їz)|ꪫn'+^1?_x3t݁@w;}l灈=isg?y߰d@ƪq|F4yU^3Ll=k5tk%ѵǵXúRi.Gwdpp޽.g>֐<\jmiƘۚ9\J69"6'=H;|~Q$aMHxφC?u1%R{adȝ:s:̝v#mL;c$'srQJkb9$_~?07LI<|5%Y=VGrʣ~*Vs͹B‡͕tPO3ژF^=GՁް?Ξc??>˿җtt{cz>ކ_CfdOg qsWi>Wճ=YSup3GG=q?Q_ǯHw݁@w;ρ9=?MI//ߤ++q9;;}|{\çukDvlw]]ru{s76F*u\ֽtV_8 4OEҥ?.kM__:oWع>W\Qӓ˾f(6t݁@w;ly?}Y_x#&^x¬g|Z|U_"K9RϹ9?&7r/4^#knȵVLVb++Obu-qi1wv݁]w{`~-x=?Uyc&⏚C~oo@ɯwCL݁@w;tv~_WyB~ү9n/}3#1yҞϑO3ër>!`=6~Mr5V?]v]s׬8('G'l cRu%f/rNlY:xiⱋc9SjPc_+Wv$F)i^}Hxl;s}6cљs,w̑z9fm`ه|\`V5y֋NM`2Uf稺1?Sד6['$ca~kR5מ1s}''u>֩gbfP|q]H%v;7n=!dr Y[s5]:':bVkX+WuMl`ѳWБy}X1 =Wx]S0 IjeÚ |OZ1x=㫿O 8??O}g96&"'t݁@w;pz#| oqqg<s̿ۿMq[Y)_O~ryix9~ErQV&OⰣ369cͧWcBgN]%skb8lUf8[ڍ2Й[v||q~|X{*iY[RybG7.Y1 +uˡmb\|^6pf̕|)npS&jT7VMį lelP'ڒ[],6|ys'ʬzF6⪽r[kO.mԜkw \ ֪uɝQk^M AߚaWƂs1X>kw^k_%x:5GO ?ŗ%̦As>͉&V:=O]#:K8yrC]ఙ8ʡ_]i7_%92OŎl-݁Ձް?]>G`ǥ/crץϑM74L O:xϛwm-݁@w;cvρ|6?CztaT?}^UW]5='݁@w;ۿoo=55\3}?ç4i*0}/4{~}_}Ӆ^i޸ԩs8s]䵡 H!KHsuk >}O rO`V"ޚboN`9ͫ.j7z%[:8keaß9n9gح:iG84.Xr0|Mx싵aX~u%Xk26tfx^cK5׺ sbsԾ:E=ܞXwCs35zΌU^ʴǚ\<`rzL}|#,[#^49g9 1J }r87v$<#9hSV:R =c=Zvpge9.Va?˛yg&}rƚa=GN`[Hl:ƦcXXJHF<+k؊<`ztvՁްU'<1ǿ˦kv؅ .`ߞ7meLw-&|5t݁@w\r%h|Sַ\缍_tWO}7|o\F~zl_qwݦg=Y͈eS;7IMzJ5O鑾9MTDg#Mn0 |Tԍl.s`8fpbp<g:8FkEϵ:i?-yG[+y_D&uf~v-H6|ĉgٻ\Hljx9L^oC`_O~ڭcʥKNu:cךӦN.lѦnm)͕8}Jר޲;.y&푏|}nz>8} x,?G?@4i<`~Eω?Fxr~At݁@w;p|CGLg'w|  !~Kj[9px6/Ns#l3̽gFy66%БnǍ~1 nf`z@ >9ktxȞnЃn~{WMu8uJ`L7%|d.䄃0?쬉!.kGZlpsHpK֦MQ.1H0yMZrƎxYCG33WǾqxb9C~jC.UR^09Z񙃹s Z'/b C=yՑ{Z\^Gg ?v֙Ġ!kB#q\NTW V?:ug|kGgx˯> eW׆pa-4Bl`: 8YMl7FiGr͹yН+P;6G^朏%&kΊ&yS1rӯ4N)gN='E<cDd IDAT:Y߁I{C:]ɧ>pv%_%0=fN=A:}zw;t݁G>2o+_U_5z׻$~(ρ>ه^}{Ϻ}gL}W|o}|qf@pß7Gslj^-üH6_ōxrXlr#wƥ8b3}lS˿OL/}K5_O1|Ӟv>|>IE~5?2)F<O&,5̱'ni. k=%c6 J0Þd䶾|b2{k׎r!QaH{Hz>י6#;9צ\Αk˺a-kyd,n0̙ӟ8>%NJkHX$~G97__0?lI^Slƫ_S|. .`#'*'~`o}r>FX09<ȓ򧝹Nx3>fJl thzC;qHjU roę?%޺%gw9nԀ͑ wMbna&8;Q=c 7GrM`3!OӾ΁$sqk5)ڐuGA^|0uQubdžt7}^N}O~[vvҁvB$j~'~y饗{k^3߬ϼ ~|)OWny)Op L-~kH݁@w;ts}=aC'?y~*9. $<{79<'MR_wc`u)f}ɿgnõ[Q֟k6Gy.RHnZ\>w 9k:D87T=O'ٳ@w;ٻ8HwjWп&lPbDwssg2X \W?}G?d$_uȑl~%+Ol\"-v7'|O3VOy;洯wGR o+֚g܍m>=[y돍/3+b='U)/Ng\>]#my,wf{Sw.x󽶞Y?ֆW[iOߓ=}o/xR?r}WU*p \W?^wf74z?y9 eRm~y{N]Xӟn#js646Wk~g9i^}MθxaԬ~IpO5aÝ]?_c{`5 vR[0Zl-9'O{`O=wi|8`Z|pr۵<8,Wϳ1Wa|p|0|o\9zٱ4/7g^pc=QMq'?\i>^zO_.;_=jE/U*p \WU**˷{Y/߽xZ{_.|u:䫏r˫->G<<.s nE_0/ٿ!7l>WNog<|'Z^8>[XkV5 ApU}o=*'ظ+_³x=?=cڿ$Kz,7Wpm'G'SΊۏ|.ߚfSϗ{'|9[oN':'x1C+^we߫垸/8Å*3?S} \WU*p R xo°k}{wDX.(uhPN˵>fW,\uzv肧aX$\60i`ŕFx =t篟#޸0껌q_Vem)?l÷{nGs]p;/o{o.OCk,l8x{S++ W3y|O{0_]aXWMpWFk/l6W|^˖_G˟#f卛x}[H=|=d{qYWn3#gUz*?=Pָ \WU*p \~9x)Tx/rW|$zocg9|rZŊ7Alp57=XwXlvU>Sd _6u5/u|m^a^.ng_b-48cbpg_묽qWw5ړ58u /XX5+玫W+pZw \WU*p ?jn__ U. =շ'ܷr} :ΟO}|{ݾ>poͻOa_m=~4{b_jپV|=Twz[[:{]=~|V?+{\ zwu \WU*p |?b~Hkm볏p}:3lu.ߧC4s{^_'_-7_/SNƕ-vrg?U}6g{pqg[36/Sε'}Vc;_ޏ86gzh?g^_ǟNߓ؟q |wy \WU*p @/ܽ݉/:P;hQoOO~|;jUN<|u{޿X{iV8O`}r."\=V xcůr-}EEqWY ),nSՎgɺS?~9p,ּ>pr77~#0ǀaن^ӟ{]n8+hc;'liWqei|9{V0kԋMX{fŕqW|ԯ6y{aaɞrqe8U>:|br\\ooշ.}ŵ^l>F{99lϛo{LJ[~g񛇷6S|[c[5^ֿ5?u杽ZÞ[9} ɿ볗C˻xn*# o~$\WU*p \WU*p \WU*% O*p \WU*p+(ЧاOn'>\\{O8]9OW^rk~ZּQ|JU NnW =볯R7ϾՅ1?ۏxae˅;uS?\/\bgj~6{]yg~_7o}3pl8\}{{>?._Ikgl}ﶯ嫆 +?ܫx[]9 ={8ٴ0ri€r‰xsa Nprq6wñgvqT7z~ۺa׷x+iZF~c~z1}<}:9կ;W+7wY _0z*3?Cy \WU*p /^ϱ3fa@/O|pO}e5=XwyW}8c*f|r[uu-.l=3es]~9։Ue771:$lQ|'~cGrv-L=u7Ļ{/k{krV?N\{ G=Zy9ڧ%\8pink7zeˍ;s5 Ƿ#\y^.Ϋnsv./'\,|=//Lda/[^<ŗxay}vW*pRu \WU*p R y!@xq/]᳋a>|ldrrVo.q|Fb?0j]bp}´PV|lbWp>ɯGcn/[ga 5/cr@Έ}=/Ogg:^%qV˜z{2Sqg|\w/}sü:|Sj} wq/[NrdV|Zf1{}s>SƥNlWsq9~߷O9z*b/.Ӷ,=׺>˗]]ĥV#g{=ߙczPbteO[q}K?`VS]é*:wsj<}ֲƱ{Va}royʫk{6k]m/!>:灗pкAnS~}r\\njفP~Z?Y˱qsxA׭z[|cj3 W^v;_-n{:llM8]jG6k?[{`WU*p \W!m IDAT/Kw>/^q[ckŹcw.vgW =f5_|{|C~6.GyYns|k[ǣ渺OF^{4 '=Ǐ#<1i^xr{Wnyj,7~^1/{7|sQԳ>OX´fƝ=Ev04S,>v{ښqm94v]lly9r[mf޹Z[^nWXsrx-vxuý]lk>9{?q^{ O̯`WU*p \WUT`j|~zyߗz8/OV\++b+\\Ų[/|aN[{x|gV\Zb_r,ˡG<́tOٰk͟`NpqLuW>[gógNl-3Wgq *_S/Y8 ||WU*p \W/d/:`;/w>uYpka,8h/{(W<G)r6Xw9tS>i·zSOFjOy>ݞ0CO1bW=.Ǚ2q94on|az0oӚ-G~xsg{嬾0˟`j곚lj>Ya47ڣyϢyU>e [Oή-Ϻ=gkV|>}gu=ϗ_VKG} ]|lƛ]l0ܯXl5cMO{[εW=^ΫU*p \WU* aRWy_IW0O?aQ濚z߯eywYמggu).vOye56>_Oxe<<3iZb¸:`š>?mz~ذ˱8uz̷Vu0;9^q/l<˷3w׋3oQ->!'l<4OLήǿٰOW-TYW=~ƵW퉭_Ug*p \WU*pQAӎ}YkwE_Yz='y^+աlyP!fqyl|4FluU־~mݯ҈{jӅW|]/0X=Wz9\w9VbjtSo|GӰ?XC]˺Õ 'grU* 9YNo- c W>_sk`ի~W=dGg_bT+Z\s\bۣ<kɏy7?ԢKC>ς9|V{+>`6foxՈm^,{֓5k<.QڽWa_o>>[/+{Vξ孶P8UYoU*p \WU*Q`>jڋ2iޅ|=kh{U6V>X5's;sX|ZWAl9A=3w@pT rqotˉ',Ζsbn8【x& =DU!go_ZnT<ش8XZ='#5>+i6ӌϵN _{w]g鷹zUo] u(}q_o}g?8ٹu 6=_Zvŗ?y~Vۺ+ߓgpz>}.~]3gGkrML÷x:˼?b`~Z'| 6s޳|x#Ubg|piV_8 q|d OT=ɭzFY[Γݼ8Ki]q޷zϾ1g/bq=ʍ+ya~j}x?ͻ |=H \WU*p \i8 2oŜ#ԋ: rߡbO³=`0PskU٨pOrظq5?Wpwc{3_׺ _>{#N8j skqsg-xr{>S➭bpx]gOä F1a&X _o.cu(Mw8u+|b]gX=nz5ܭ)^]o>Eݏ^U'x ר,_yd{O {~~V9!,|;ǧ?6]?]oϫ_giH+=tfqn~=[_>W|w\~Yr_WU*p \W^V"í-a~|اx?+֧oy~<>ӫt~Ź؏}olڿ}emWI_9ZyٮWU*p \Wfdkq) ͆i=,XVO w y][g_qGWWg̷ֈ\?L᪗9{e+ɗ3f̻>=9F|kqsɟx>CGǧ/^{{}Nq>az 6z(kpO(ֺ>3G=}Vُξu֟<~ ?~#}~4oa>}on*3?Cy \WU*p KV{Xm/p?LqUW? dwS6־61xDž#]cʨl+Ug=? w1~@ߺXO8zZO#b'NKvGܯjm#zVbno〯ݚݯ7WCL^ztߞ<|c3=j58mXi.S~4|]|_0{GWx u-5l7o/5[~\ظϝc9WO}:|OC>WjUw81~I/b~5?qvrþ3{?]}>>?jy}W?= U*p \WU/@/ݬuW6%>q}9?כj8bf@ _!qz/ʗ\\3ʵ5_0W1xc9W;bq~֡l{6W?\qes׸qk~}䄡M},WQܵxĉ/\O%6MsS5m\=մ4./{\c{WN?^cחmn/C8 ˶rC\ ~_Z,/իe5q[đ\9o|k7ޜ K=={RqVu6?W Ļb Xެ |+ռ\WU*p \W?|9G6Qg3 ||/U*p \WU*p \WU*p \߭wKvWU*p \W}N>m'w?>Q瓚 s>iw>wZX ؍\)+s>oo|#g涟ZU-ӵ_fq_{8m.#Vpqb߹\W5SϞ[ &>~vdx==÷ܸ35_}skTz\zsc{{;ݽ|4Q>yl-<>j¶s +^~7{ړ3_[|;e?7=k=㷯sFqyZY YC~ q[p#+fnln9ߵWR*p \WU*pe:t^C:x腾'SO:|~³8<ֆ1e]\a:k9m8{a\f'[}=#F=l?s63^Or'Wf,~NybZ2Μ }#/r[[Gařoyb׼>}N[͵]==q[=w<njovcՉ?\u[x_qxkif_,9lom=YeY+nGCN5Wc;uk_= /U*p \WU*Pv<0/>Po ͳg?w@߁ |}jܿo+\AV߼|K1c1S,̓gd >ϚOzoV/4j|/7~/nk}S{7/6s NEg}NĬ<ẗ0FF=k U>7ܟ~ O3L~G#}}ŷbιߡzo/ sOq7Zj~bO^;C7q~1o1Pljtgw7k~9^>R鹘ծgc}O_>1ai9cw0 G[T|ycWnvv^wu>˩NyQgݣg=dj[Zdr[S|'O1b5¯/OϽu5}_UWQU:}\WU*p \WU*p \WU_P ~| \WU*p +z~b0L[kާ=|ɿW;kkWnYf!xޣOBbZ=m_޼[ggyav |szv;f1k:-=?a.rQW־@kXP>k;N.o An[Gըki/٧:z4p~ k1=5X|{>ku>X>F?g1χza򾚷guڮN}g<|tezqrS̐WO-O>_q߾׿sخ{Փ~v'Q-x\~'{WU*p \W_Szץ{量{w_ݬz ?밡z6yq8Oߑ'L}lϯ0a|mg<'.|xT^weg^_Q|q9agW);RriG묺Yᷟzb_9f<ƞ拫F{'|;\{6+,>ͳq;c垸q4;ʱG}x\ s8u[yGin0愍c;b9Q?T\|8/=w}JWyWU*p \W_Z^kr /;07o9Y׮/Ǻx[{j _^?,] IDATk/]|nrVOۿ[5L5ԤOxbwfwoK;xk#\=-[N^'&bwkq˟oƓ9Vt7Fugo(|bO5o~/] =z>ҏgǼtV+ .1CN6|o1۽Yx=ç?<>_y5ϗ?ǙO{_Y5\{ +.U*p \WU*pSC yϽ/f'urq9ĕ}/=z/=~eJ.Ow?9s^w?[ɿsbǯ@,_+ iרX[þgOYޯOWWi?=_ RؿRWU*p \W*^w+Žkyvv@A ǧ~}55劙Urڛu\k;>_ _gew6ߚ|]F9{>l+WCęx"^^r)8XW}ccl5pwiR:j۟kUꍯ ߺ >/r8Ox vݺ~+l w갸SbYozU$|=yZJbzY6YF|qf]~4`կO^GG8]i_po뵗0(Gbo.c+?\]\tj #7l=mm',9O<g\./y[Cmy8\qsoG?{SSp:?5g>Y|9OXW!/nм{u^} Ϯ1NkP/smks@{SW|tYojK{9čqja7?;CS_apw5kvŗlj=gO]e.^/ί?=QnU*p \WU*Ww/kjރf/ߣ [1ܟ8-\ ߯i??ӫ}ř?]6n#c~$[s^(=9gyqK\ُrqڏrL:O}>u\;#{,Gܵ5&=r LTr_WU*p \{PS|~~2`7w[ƾg.O(.qZ'Nجydؓ?bl7 m~߃=}e0?ۧv׫Zwty-7/./ޜ-[##gV_5Zgg؏z ]iɛ#yg?Wv[{~'p|ijXŖş=[7oswiqw~ Wx9WU*p \W^}@?ow{Qg sk.~g\~6˥.hWnsųpSn{mwőYL?4ޯ`ÿY= 5Ԭ0g1]6:yk~ڴ_,wZ{}~U?m=c|SvYMi_xa~/κksăo/5Z[vbO#ݶz:]b[wec|6[7gW[M_bOZ_~j۟}K̈o:j=?z:~?꽘Z*!z9V% p^aOQΫSz .~v\1sg73'9\{*W)yyWU*p \W_Z/׽h>Bꀠ 9\́y84[f; 7{_rOߓf9.>=vUzGrqSzȯ}-\}7&ހs=ğo90jwk)G^ey_Sͮrw Ʃ/mc~O^خrxeCp։?u}هkoۃC\k݃8ΡkXM /\=/W^Րgml.6<~Wuy0ϑy^i?6G u§c=M9Z_{JWyWU*p \W^{t/^wPb/&:|8ٸثQ~xOIjz?ا>:>GbO@6z6:x< 'b-6ꗣTXroWX~uқOeM|Z'u4ϗ-w9k$Oka>;Y=}ﰇwR~=u88G>q9 p*&{'>n}?rϾq9ao}ML|v^ٍhҥѺk!Ҝkj[ˋZ, n_USjU9pѹ>5Uߺ\_.ħŜ<8\4gz:3ȵgjk0pq}xWc>]{JWyWU*p \W{>vG/轸wb-V\+oȗΟ}իxzquS_?}ico^ s=XG<'r8*n='sХ ?īĉw)ms~X}4+}ZFgO[w?2>}vz\[gRn\)_[5^aĻRrSTX~־i8l~Kk%ogqOjdpV殸aσ_qw\>'_5COi_6ud7Gj~q./\W'+Ub |+ռ\WU*p \W_F^u/^{7w2}C 8L䏳\p6bp CO+kdS>j2/gO5|٧Zq\W/渻\jA2ZW#Uwb[#>Wژӓ&lOZ X\o?CL,j}=>io{ ۞䛇6~>|Fw!+9ai>)({}?秋qʭW6o &p|.l+/ ͻO7kGkqWi =S[,q[l}Ù~px<'LzՍx~ަlz ˧ywqWZk|ּsW+pZw \WU*p @ý{)"ދX(Ž k89jn|kuk{!Fa.wQ~O><+ok9Q<ˏg{Z^sðu|{VW%zsՕ 6f70vb]g}=wknP˺g_&'oW+Or}G7gkoFx,yKGӿxX:n:,.9qVNqXp멵|a=K8qf7G^/Cc3Y}by3_o-Lj^6+ƦZˇ\˟-o,LdӉ+_NX|j@Dj߼Xudż}-'us#daؽG>l, qmIrƖٴ _|i{o_'.0BcwSWmI;HS}Oeq?]o~-.~Z\}Aosy}U Oc9~QrU,8֗_A3//yrw['^zCgny|;_}+^r^{?/6Nsjf.n }s;{'`Ox{oκα~sO{ Wly}>4#~ 6W?]޽Sϟl{-_w3_u}?r듟O_g,޼}G_}켌|Q\?b\퓵V+'aq k}_eysW?b*p \WU*p o)ॼ^^@v/q5o~|1b_~ 6>~sށ}g|忲⃑k_x6|VlG<Ozu րxn.ݺ^Yww=r5=/\|땅kVx\=Lg{W_=ņk67<+VNz`37;Ԭr,^)Wnszw{լ6逧||>]'am'r:D5ouOkrVuH9b[wH9˳:r {.˱wzg'_zSl6|r9?Z~*ڳ yvǜͯמ̿e?y#wSm;m˻s?ibVu6[zQ^E [.nz^~Vz{>ucesѾ'{ߒsUN1o\.$\ Z7¿%>(_(=]-Ο,C\ۯ\.d랽-~C^Nߡ\\{`^«U*p \WU௪@/~xq7zoٞq孟bC̻Gl{޻ٓ#W/ع#rڞz)ASO'ޏ|bժY_{:WWU/}({F\pHjogO/Gp<嶏~vi_+yawWR*p \WU*pK+ЁExQ \uH`##N;gڧx;k!-^~Y7g?]^3߫|ۧXq+/?\Ql{Ɇ 'g#+ozO1^'X9>HX'_Ӫ߼sN_{jgƫ[ۚ})՟Y8򅋗;طZ;UjuΫ]non5yls^?8ӳg7Y{y*ug_5ᮽ ,R^WU*p \^ /龂zQ޺j8;,0w5_lO 8?8H%,t }g=0r. }y_j;`lڇ|iךGOCaG&w{>Y69V^憘gmuc yP_ IDAT'ڋ+Ԋbi/>ךּj{O#|{[W>|gs#oM>)/u\O W4 ou~>/aA~{VG8qC.{/+`k5mmb]a>qo~rzV/_<y Xp5_rju/ܵ0|}8~Y6`ʇM^˵^" P_~s<|]ñ@!=CS18a-'=pl>o7g>]cXJ㎋ yYW5+Lj6:-.gP/!TgqU0~s&߉^V/o}]x_%o6g}.&_`ӶO^o'܎'gnV4^>Wڔ<1#F- yԧsj=!n' Bجˑn#k8{7=Unyx>|9|p䙷,pqwO\F=ֿe?_=bA/U*p \WU**KzV|mN{qBo p`]Y/Wy!Bʷ|N{oVES%ҫ4ȟGyR.89ֆ=ǡgS065O7o?tk=oX{Y\O{`V=ɱ~9xk/g?g^8Vl=.6/{}}~8 ۾+.|c53\}3c}jcN r?? }W ׺Q,\HGd_[{;k/WXMC5qԓ8˼Kn{3* V]WU*p \^{jЋ^t P.yy~y2\寧m|0˹< Oygx6nzo㍴)C1䧉x$i[l}O=-|=/+:YSQs9q-5=ÏoZN۳zӆ=ۺp4BϵǙu=/ӟ^#/GH+8=m=}Kkforgk,]ZqϾGe/lYO<_9IZ]<5Ϳz3wd #QđZ-Ek?K{`WU*p \W?g6wƬOS߷^?Ԟuhug?+֡%lv֪#Ws\'++o?T[ h%#Q1(11M$Ơ@5jR%P(;g=wyk?s&s9s{Ñ=;|s5(sռ^3m GJ(3r>v@ q&qtGUAߡ|:8Q8}$sMw᭖3<řa>?䔍1OO6b˿1_QZu5EUMNoIc3ҝ˗bM61l{Xv^ uKךg9.R 3;}gWrW/i3~Գ|Pk{rmblk8}Vײ0et]a8M3q̋wBvR㐓z!qqS+/|i3/. [.÷|nbXSܸsG 6AD-fgM&NŞZ7lrWIW`? o]]]]]]]]]]Mz&p='g?9DVt86: 8&8Tw0)\w[jXZt݌׺1?t_ӿ1|g6<\ɵx=D ?1g6:[kXC~tI<:˞fjX}f~NO' _ӕO?qo _|r?=L=$6|'0o6ZaZCQ8#s8>~|'wIoߛ03?Zy ls>9 !je̋.=l̸që5>]哽\/]d//>:,?n|[GuSOZgV៮w˽vvvvvvvvvvv^4u%oW5M#^s`ޡy}b8_Cz:|uէ7.^JK68}lsWFWl٧}_gHҭ2{V˞n^5ϰS' nʉ_Waaf;מ>91g/G;ʏ,ڊ5gtghdkc^~3׋n6q$]1{s&qs}>ҳ&q~;cijva鳭rHN{6l8vd_s:%'>[v\-ζr׏b-^r]UW]n]]]]]]]]]]]]]]]]]]]]]][U`V]]]]]]]]]] \ޑ;jXvV?;qO9qŒC1g`;ʧf%zkl}ԁhx)ߧzꜟ?<# &%nܻ$-<{:6Sfl,ϳӽ/V WlӼŌ?b15u=xφ6>xʩ5=+^LKO{~.^ 6qq˜1̊+Ķf5~?zMH7csX6|+)wT7}Wc؎rMWNSNçWuW6iݯaf]O-w*yvvvvvvvvvv^=)a?+}ùv=_X:x wr'5_qO?#Ӈ#^M,chq-Ӌ kܡUzsr+Y%C7klm̞_Z{rmoғ#eN䘸[%s;:;Šy,OI^_!8r C# i$b噾ԭ6W Ty{XIsU$kazCqz8cٵlIk՚żyPlx6ńWd~xW|a3*"vO 7ŞrǷ]U`U%7Ϯ=K:ݪy?ɏ.[lkc1GɏN;GtCe'CxM$9?z^-38I)މKvHXNӗO拷:XO8,&^u|a>:61S߸5ٵeo4lqkk|1:OzZr4`eyp]\UsP+qk`ũV3us3/Su)xv:-*_z_|>?eNΚx-u'$=N56-ݺp5ek>k[hv=]Ì'3x-8?5jOKf^b㋳1W6\ĊW>y8b>g u]Wt h+s=_Jhy|À8/lg Ch|r>Z6Z{5!Nv&3L/8=y`ӵpZvҚ41A.;}Z]&l%9ܵ6}okafxXˮk7ѧ_6>3_IڑM>\qVNkQrn3c9~L,t3u{6?GSO9:Tl+NMq6W01Gׅnr_ctz׭kykK[,'?{7u+WOϔlsI͚5+ıir/7vկǾۮ]W`uE7߮-0=υLݥ?}NWGl3_z1]$:LэÒ֤kd8l2G~3/x䠕=ݺrwbʗQˇlՁ.\{4# S9ɩK<W97ѭp7W=I7)6}sv<5#XWsbӑ/aO\5w܍k4&g5O¤7- Ykw6>T˿jl5Oһf _]z~NƫotG9IO'ښKS^Z{\[ e{%U;oU p@]uUGxsRaD*cp}{9ϞyލGX׺9xٻٍ&_.}T\f>ux>?93^8ɛ[ aZirm>٧O8^ ƚx?%||m瘟&>m'^aN^LqC0kf~u\^ aW{:hM'\ZoM&_wzϏFi5k>FS?/nul8Iy']>ܜO7q]Jߔpv]_3^~Ȱl嚎/ W7`z=>s m]>jn]]]]]]]]]]m|zOGǃ}+.ɕj<,;NP^sPtÚwC: OۚȰ;Nw(]S<4&Zit&sۍʑSqd2 ݚO$[s:3䤧FM5~sggQ^0 <]=8INp w9}/K\}kb.&\FW]e'y[C9L[]5嫑ztgp/>٘ڊ J~t3 ?u۸7?8LA6k9sz){nkh"g0s 8 9ył+Av*yvvvvvvvvvv^={s-zssN<\7w/va g&Aл?9u@Κ;gg~g1z+_`mzM̧zAܙ?ik8ZKdž'^qO=U?\q`gشk<]xp<59dY.oS63>b4.:5V躗G4q^%llr6:z]ᇗ{b–{ɽbs}ߚHlI^:| ?:&ԕ|>f_~tͫ9sjs ;MݴMNzyMW[Oӯ>Ԡyc2mW.+ﲚkW`W`W`W`W`W`W`W`W`WE]۵9Nwײb%/af!%^s%y䓮|e,|)n3|f5u>׍Ƿqu(u&X%U>ny i]Ͻ]]]]]]]]]];|(AJLoe|My`јԚO&]8u>xHX`[SSO6^G69[9c~7Tʛsm0xx5OfᯓGb&[\Cpgrra} A~ߔ1?b15l}l| 5GZlsC<Xq[az`ϸdӦlv?%]2ל͘^[\+me׈Y:.%_6cq36guNO뀋NOZpښKźz.,֪7.QUϸU.5U+%䃣Z̟]493ϿImrN?~o/Ϙ_2 v|]>jĹk?kU,krl~VbΖzF#?|Åk=tl8:+&wlx)FdޘGxzc5S}{Ů%̔xt[`[Sk5i>ӛǗ*W>lbevh=ak3}qkl~]|]+8&qa|NzHO}s_'Os0kO~g'G|?ݑ<9uKk^#tܓsḅ˸oӜ7>A/]q,f\a7syNN[te]']}`+W|W<.K#?#/N__y3Ϝzx._qտW_؆]]]]]]]]UOO9]@ o`9>>?w>5ל~oMoo9ľvO ệzp_awz t88$'aE}|;X X7qkk0DIkuH_RǺo^^q^ ̖5NGqqf6g璌=K[NŜK<ɧ9.:/+Ymt]qD'G!Ӈ7?jG .O/Vmktɗ OZtؗǷ։OZg>/[_Uϟ8wu|j?cٛk+|֒/YNG'Rx]|{+$*DU_6o{NW?t4Q6m??xϞݾ˾_z@'<}g~{{N__|??x xڃ'VnjXG:nx'n]]]]]]>˿O6~Qߛ6?AX@wW??w@/oLGzGۿt`O懳ua;]|L߼utX^(զ|qt޽G>.)uzP{z Vޗjxņ7#l|ԿwkwĖkZ[z_˦U,2j'6_㦿yd8 ke>g ?7/L9[Xq®u_ V㣧8ΙGae#q2q Ly,YO:sx?3P߫o118nfo?'oߗ7/0qɩZ*8:\qzMZ_kS^33NW= < {{Zc?R>_ _p?Ń}ם>>wmm{'V9cg@g>C|ǜg0__z[rr;}|<4K6L7_uaW)ތ|J><ֻ),);1n]4gPr~(˘sM7yq&[c4>r=k5n.B/rIfmWmxYyuqًsdۺW`5Zm~Q|r{ͥe25Nq<>qg+*_]ON+9]w>?ַۇ iY/ x3_wk9o>_9ȫO}{$q!ƫgMlkvs|3k|\Ɨ|Wmk4MڎM>ߦ>x_LQ칆ƽW?m֗Qkʛƨ~7ů3.n3:K'WG%]Y9q9m۬mbM9Ʊo[Mg#Λoʳq7~M1O~䇜?_^~w wSyq t\{mew?8Z?gޥf}}W)(J`[po=I:^y2dz___#jf> :|̌iy 1מ0``8yqˡ>.GV#c5Okj 8qsp85 }i' +f:\sbMA\4c VkG7guoAL엸 +tɣzg7?]V{-'&z2N}_mbz=?|F'1+f׊SGY+c7sN$wqpg~qrӛo>Wrks~GNk*}$Wz~6XyQ޳n1x&k<_3]rη +9޹<8f7mg\)xIXsm eip̛kWBl ??|n׽ObKÎ|Mo|cOO8B?Lw{rFMB7{7:{X7FMQz7n8ٰ |XT|ʧ=}}oͿp QMozSl?c?v?x>^A!٫أgYsίN|o،W1ΞOmdOy1<>:pw[>žz+ma.X3zt&<ԬA Gu/6Z9&Zu^X9Q?<GW^˅=4qq')5ŀaGq鬳kW&gX8mbe#5ėS9G>}7sGX\MM-lŜ5? ?vTr(]c/7k\#k<9g~x#N?c]j3V|:G\1?׼a6 'ukgkxq>dkam+^|ӟ.{1`ah^%~_G1\ߧcgy_sU]qY'9[So<^Kkrr]T`E7ǭ*,|;q>w1>?xd{y0F&MWd71i&kAb v|aQvvvvvv^ wP>F-巜[y7|{M >i`ܗd_eUo~S[qĝ>^<ȏ%3?{-n8:6.&ָ\P5įಧ#8V޸<ԊQ>qœfro5KOȫ%y#άM(]W977=)/|Nv-1$JZͫkTS]s>9{3nyNݣ'H/n#߰~ GWOG?}OMqq{ĝlWa[c9L'7皷y:r}Oms\|W mwZE_E11׾g_U_u~x󙣿7}7=EڴMoT=4~_<ؓ]]]]]]M'rzmw]?D^{{N|;χ__|[o=|~R>Aw}w)?W~ N?rW>\M6;}&UzT=4e:Mt5Esu{79uO=L{u/-wvvvv/Oԓ>}}ǝ[[Oo>W_jP{tɹWtmܟs.x&|qke]z:=38d-8; ٻ;PCӭ5 kf0|+i?(WR/Z§.ƿ=h51'Xnt_lt Z.Oikϓ{_hTcKON]I[c5?&G<'\o-ՖޘڗWz^O IdGgV;|Xrv1`3flnM6|xsꦏ1Ytk3bqO7gm`ð~ė'rcydxZsVx87_|mn\ V^ƾI63 'G\cK/^);!ߙ3t|5){k^1c+p7xnGq7|eW*WWۿ|>t`s/kyMt[G@7AׯU5gAį&`y#kn]]]]][Wҏs/?+寜罁}<{aڦLa'~'UHanR3f|lOfsvfLϤGWakkL_:ux^0Z/lՈ,f9ir8:>ٴ85\LFt0Zuo6wrXSi_ckm`M }sbGsXn|W^t8M/QZ\|[SN>Ecܯ3$Z+lKwI.׊9?Qi*v5ob!O[8z5'HNucqk SWɰdb\XWGuXyI8I?5O;}g7~rيSe=Q??ՖwZ}`dS;ַ}}z$~>do?~^-@ܼm^tc溏:RmQQ_P,15&O?3?sz7npZ7M7H7ng++++++a[>"]zC@{_ C&G5 zh77_sC5f8ggl>IN8:V6eN]~I6y9:G[qZKqӅ5/Ǚ?=5>}'>aZ1>⤟MgvXɉO|`/XνÒZwbLïm8~ȱGIzq'yͷ z 8:_IIs?iG ;eރ2۴qXt&׃f|x]]]]]] \k>Л:>?p_?$3Ӥ>O4{U'p>YNrSlX{'l򀾜Z_N+?>wϿb=+7i~ ּ'9k ǣV։#Nk3_9yxz1S<|k0kꢛHG:d O.^qC֚j5+_>Ixqdu W>l3kÊ埮Z{|Š-N1|\szkL\Zs ]3~Yg8+lp::ɯW,L O5i'ܖOݞdͽ+pM@3j}7}p}w~Y}W_ga*ЍLzWw3isp;uڡ><馺ۮK/}$7chW}ڧ}ڝju 6|(I>;9bͭ}q{q:$sڒ(Mor\QKbYlkN-/t3K|;ÑLio\ədgƼɸ\V9}n>׺y|ʣ|ґ=y}ëw!u=V%*Nr O|q7᭶a-WӖ.$\x/ė\w|~˶ʉn+|ogvT)ؓuq(?3>yywgd}{g~Gw<Ͼ/ NsrGyFywvvvvvvvv>l*?R8~_k7{RYӟ5S?N,?W|W7㧯9N[3|ʧ~qoc5.Esf??Y'dRNK ϯߖU5ޕpwwvvvvv>On#Yç//=~½տzp/*b_>)wo3mo{?Zy؃ǰ8$5ޙnً|J/nS}wхG<xq7׻gz{lp}GqH!oQNY8;u XqC9{oměԪ3[.Nb7'7;sȇ~6=_R}ď[-obM+8׺'ٸfqd3GXr p7g--N<8_Zuɓܛ8_g#Vd9w $ܙ ~k/H31Nfx [k9^]_x<;^nn<ۊ-Nr+oz-Upal#ř2* qW|_뉃qW%aŮư8q`tn{<;_uْub8v]'UO*}IUo{{yӞs>sN;tg?}g9cñwg3w{Nmv<?,=0Ϳ7W=Bpן@n lmpPi4o˿^ox;<OC:O_~>>>7d< 7oo8}}y#rSov8ny9 5L?具Nbұ3V>%=YipmO= 湲0~ݯu<]]zʯʓ)~fG=>}7~ꇬȯگ=C] m @oи`˿O?#?ro<~/6?>h`0cFH1u V.5>~؛#ʡ761}cI>Cl:>Lً[yk65N_"GxjçX{^;]xův_ aMoSs΋N>9c&bY1 bg66_cW8G f\zRt|X(ZLt:eoO.:7ug_Ϙ/|ظ#Iu㻾`gM.j3;Ѹ6SxJFr=[Nе&:|щSM̯kxf+/rY1lt3s6 ?s|MmPZ0;{,֦]zL-oyw~I_zz_ GQrcWG~_Cݿgs/<}μq{ܤ~hK~/9}Mܯd{D_sAC\ȵ7kLk甸_m嚸lS$ǭ#yױk}q:I֕Oyst8銗dW*]ڎt5_z*x1T`ؿ‡QVQS0p^ַ@VMwpqa}3~Jo]]]]]U.o~Owh_(ld4l.L|5Hɩ KcX{?_+|[ 眏pyf=[1l&If^5Wb7/.C.M8g~+Ul[Χ\5.qgbŪ~췍&(67Vq͞OpdZ/V9kbq+P}rW`WVpSE͟2@w+g$׫_>gwںIxZĹY++++++:`X-6sNf3wpnW p}K##`AZ?r+ck$ Au{9/4-~1Q/Gkz$7 pj&֡S!SLz~aůSV?g=˯il֑/\Ӌ-'5z>pqM|]^ctjX-j1ƭXն+0133|d _uO'Z.wfpF㈓]|N'cץVib|/vS8_3NwV<%q1ϵuݻnг#{kiL5FxaqUxϼ_%L$c1T= \V^{.}&'}~y׸5ʯ5k¯,}5˾V#o6k@ʣ:I>IߚV6Ocۮ]V`e57׮˨nNn?MiSk6hyXe{TxWCeܾÆM#}B$Q#G(:rsIv g^LX\7:Pja^볕w>p=Z,ŵιq:Ϗ;[׏CA9Lx9^k3Ung(Ez;6NVW,f\6s 7ux3:]q8cI<\}漵G!~Okd7L:ZyO/gn.˷ו[g-q<^RWtS؍ŲZI'???ԠխXI5Vz0HW}V5Tk~^ըk֥5u)i7mc_x3q1wÉ2jn]YMύOXo-Mmp8ocwvvvvv^a;y~=Gj6.$la4n?Ef~dP%׸֪MÙ]-9{3/­2ϷIw8^c~W#_wGj?N2/$+l{_&gO6Ӗ>ݜˣqy>pzvx[0gý/5<ݕC5tեتSI4aL[[~KOm3y3L1aߤ˔8"e#[;Vkor6&k8bLt||mOY[[*r6֪%}~-v 7c'|cxg˖q'nv^ ;ήKn6>jl6mPy%SG]wq9|mMo8~W`W`W`W`W`W]yo<g;P ͸ zm^C+=G{^>8fKNe>u#یUX;WG &a;qpӁ5auZk+:|089Fw7̬s5{ual7=IW_z|5:s~MǑM6vWe^n`~f<կ~cUk>SI֟~A0o3 wvvvvv^oHZ ]9n1qE9h؟؏?f^KϿQ^W>c36=Lxs$jl?+fMH4s}D^]~֩UO\tx+F?쌍/\tqMvu]6'jcծky9~֒8t'뿵S׍'~'lTUz.y*xF,ί.~n~< ؃Aڇ8SL[q8f,XLYOƑ,95w⚗O+_}oϚjfӕԉG N>_Oŕ/:Z}=N#ጵ|fpW':UbC7XL2g5H_|Ϫ^Nv=|5[󼎧5/w1lgۮ]V`e57׮ˬnXn6[w]WSOIUDNl]]]]]]|!L 7^{z~apMꋿC*KM]jlf&N=n6:?99q |cƠNqkp&W;zmKoU rLy9u-)[\tad==90ͭ4Ζ8aGmrğ\qt=H~nyfvWa`0t+F2{$9y'}3_ 37^\,m6V <ӚnǓlW͘}c`3g_9ӸXdsixIkuܳ-F|#ݴ ]BGvvvvvvvvvvvvvvvvvvvvvv/]]G@*iwk9q.&q{FGoay>ݖ/ ') `aWՏŦ&gN+>?Ҟ{y{-N~`u~Ϡ_+|`9}d6?^wAڻ͜KL-;޹kYj\Ǽ(>Wbr>Rݼ/ yp琾);׼|3c*gx7ntgɻN sq]u_$/Oמq{=\7_Cr73{!8XKmZ;$k~ւ<{+?vz=,NaakU/79q)uIGvfɹnGrƌl6>+}đ,v2'8f–gpa'.lMo}_',&[UԊ5唎|ɦ3yϺ~V w}䣧O/0NR',\;{X/W>pٓ(_gL~XWbpM0ӷ0l˖,YnSw4>=­|&NN;uƗ+nwq}w^f7&75s77Y5RI{k_{Gaށ m>|xűl<7MWlۮ'3:(Kz:@0x4sĉ>>9b g,$|K߁p4~O<9X\|{zd=Nwc';!_85iՇz`/ȟl|>/|7C9Ώ^M qOYtI53F+9s,]1r5ϸ6u}eO9Lpdqg^^#krj=Gu~|3] sfn_۵9+}q;Sdu/]߃|gߺ ]kr7=> .p a^btpM>XsZg"8dk0թx7׼,VsZkHl]y۸%Iy1]x5yO}+_Ͱ+𲭀֍q]sQ.}gG|G>#?P׍?mXzx#vD ']t̵u~_ +!Cf{fÇwA>dNз)7.M pqCߞ˾5y&?\|@~5DZc-fNY~a:ڜ>aLr3/lpu:MvyTXgG%]=VNbšת_>?k;fTڎ|V9M ~%` ԘpǙғl9q5jr[WqS.wxRuszX֘/ k N&nk^X)'YލɻBgo|唎I;M[l.~/ǔg9f{^wb'qɽ6s6fZusg΀eW+︠nWXyrkS6)6U!;nm ɺYvc&vcu˳K*o ۏ:z,Ӆ%柞QaI-o#X䟏=^WqqHq=lWYV7.8ptμ>qLYt%l*hL'M~wg>_qLif/mZ~^s'˵ؤ~Fznqkv9 OU֘lgdo(;}|gzy4O/O,Yk/N9}ƚ/ y紟 nQ|VZ s< [+tå798c׶ {vk9crWIU;Γywvvvvvvvvvvvvvvvvvvvvv~]]Ko{.IOzco>^W#~VލLF95%MUǻ/ 0:H0 IDATtj=G ƓsI:-lty Kg|d͸+^Xc`(Wq•g@1ytZXϘ~;5b'_>a?Vjdqggk߉5_sG_7tqupcoMIZUmŅ3#ۺI9X3נzbkŞ>r]#u3.Wp0lsƤ/.v򷞰qša&ñ#I-l| L)ldc6o&1`KzݪqX?z-f ~cMq&{_™!r\#]1ּ=e:5&qx>eH- n]]U( pлknm5sq#tdgvz r=xU?i0sl?bݳ_J~k5Ҹ9/Α;}ß ANO|`#[럺r7[7/fs2_rIM>پ2lH]+:]zڔЯ8́ZY#Ήe늷{2^_?Dz_x&r P馾y41.>WqNf83F)qpŞU_&5҉aL'v1ms|];|V>| HsB#~ioiCo\3-'y3 npekM;z\7%lk]qk$0#ẖ|Z9xV|G=wXX1@|NT uy15q҉cufoޞ,,lCХGz:c~ 6}s5GTb؍˥+:ˡ&FU/rsb˕.?X^6%=zZz2ckՠ|YsGkdX\gǯ؊M;7|kN,N-'}--ka÷<׶7'kH3_ה;Z/LٻIKj=}3@Q5w;?+WI!2")"j*nצS>R.Fz{"sˉl?Q>~\p=grYh??3yMŋ!w3 k|3>{xʹ\ RVlywDb0lŝu577اN]|o܍xĺѹ9t%;|A&{׍\,I/݂vvvvvvwg6>3_ 9Fg8[w& Y8v19?,L#ލgs4Y`Z7m}Ⱦl4Q0_\xrÆ-{dX_5ş\ [d9;3\}.v}/.+6{UO~OuHt\0ż-xu[/O_g?Gdy[ç8Wן$/2zxٙ {ⷮ/87=IqYknYdi-޺rdx/?QvvvvvvvvvvvvvvvvvvvvvvrnG؟453P}Q OiOx$|sـk_uvvvvvvс>,`ݹ auE,Gq0Ů\;D`]/4¨|jMe08֧>|pF%],|1p[?XtꌿuZˣj(ovϛ~ؖQs KVq{[//iV l▫̦GbFIX]nquglܡ&~ss>Z|>|b`;멷ً)ȿlꐧzZoO?aŚ.~ɮ'|9`9X[/\tvfZl^i gr}sͼ|l?ȭ5rG˳u-˺ wƵ8vשxzg}bn\rȞ\o~Wor!;ЍMʹg tt.;6:vvvvvvفO'vѺ3sA88wa//fz?!gr!6= ێԞIQ'չ8q”g5=̗?)}˻}clVgoqlًOz{'as{ϿxbőlC\glf6475OQMv)vmIX#.2Ƈ϶|d?~ G#a={Ņx ,\'?V7kf= ^a#F{uf{]0+˳g9‘~s{9?7_pk;sc5Oo'_b,i{9\y;#:p.^ہہw;ayݰ;8u9'}UlyͶxny;p;p;p;p;p;D*6Cb>Q]<_<&bavmb1daa,W!pA6`fNŘ;͆kӃ,8\o 9¿~z-Wg;Z{-L= 7MNú{/m?\>6׌ޝf/'I|qZoc|o_f W\8UOיn{{ˆOO+lek9Ŗs׻jbuFl5ՇzdmemJ`757)F],7,&_ήa_ f׻rKts{T0V2U{Z+G{ǿ8X |8鋓N|Izu^MV{qW]q]Lqf%ֿa-o~Ts;p;tsK~Yɵ7w׷_s-s=\|O|+σӳjfg\Ů|-j.G|i~6&?b} [="0aZ,!{rl [b֞^}Gr'(6{cmǓ>ܞlL]v+}5>#r|\E'r;p;{7|M8;`g̹~~3~9p>_YCGu:ľՑk7p9oo#n{1=,OWkx/G\[\cղͻWFߵlkzN}Fd=lkUW}-m+ĞWqe>zOz嫚N]?ջXӛ?r%kxoS\o7׾!W?tf\k__;}~ݼ|V_vi~5o;WthaFw0 %lg(0Fdg3ނ~~?#jP[vz{[LUiWGNv+N/Ϟػ oН3?[l~~y#]ˑ,^f׿}ӫdj 4]dX7-[ zgMbpbŠ;OsaqV5{rsx-Pu'Zk[iW^75?)W=IWSuw=v$ァPW8v9pNo >j֦-E^X㔃 .F=#3rWgőܸ\{.4 iGj҃ {{wf̶2b_?vށnniC䫘bMC@߀Y\ۜvvvvvv߷=s|aW ߈uVxsz}t뇱+{zkq:_$]=\)o<=p+-[œ嬶8N`<~ }咧\?=mpSƭ a_r-3]C,N;m[Ab{8{dDuNq5>qln\a8ƞԤ~{jloY>xr'[W/&{#d~}a7~(OFvzdβןbwl^}V#Ż^q&gxa߆pIype+xT]U$͐cϞ 8)Y-od?5Xl6<#oگ?r)Q7H ޘnng\+onnnnnp&o#F%pO66}3ȽY>~Ƕq- !qv]-ZpÅMʱ_]q=@ WM}\A%UlSkk-MlRlcX}f#Oۮ{5޺K>ȷ#g_OҺ=+?d+&)׉kIV)]jR5i.>z^b6?_ܼt#ܷ/#qƾc]_R^p魋o Sd5:|83[s1~u~ɷ_7nmg{+83SLr$'J[\qKMa'C|~1ϓo-OdA}yg\W+K8m,cOjWn6O]Nx}/Oyť/ ώ?Vo?dV] \Wzax˿񙮯|{^&fpo=qџj+>,#wݾw/q>/p[׀2a&qnM#xנIg9[/G2>'rTzGj,M|>[7O/ʣC?묞dy76gIj;`O"_>cqq;[t>-z9on>݁n ?1n_s:9bo3]޸=ﰟ3J< +_>p|U$5˩jl=)د\r}5N-b'[Uߪ֧~mW~:N+9~z|5"W5'ļ已oo}`ip-FvvvvvvvՁǯoy˝|љİ+2?˾p+Ow6'9qҷI~+OISOɾkż˓|˾جMHŸ1ٲ8l'u0}W|#sܵ^X=y֍Uo|d:lW_q?{}}}̡{[+9WbNlGpW7vvs d~ׯfweunq5ň%;|;~M~~;p;p;p;p;p;ׁ*; l&ߞ1d_gÓ4$< 9Ig1F5[[usJFFscAr?vr^x%qMb v{Ztdmoo'ޭ=ڊǭWMvι r9줱lKθ&\HC_$ٚgלzd#Vk{ xxum}qUC+8=eWa~^ [SvO;Qap{\UC2zpuߡ|8ŵu.2_6+q|]ozk+/2/|]Oևpa6v8w?hb{4z&%QN+SG{b>ہ:?Ohyx{[iCf7M7CA(;ﰰWt`_{!3bIqxlK:|Oqs=Ya:Izo!\8^~j؞W[|0ˉ[E^v׮W/?[:rC^lybݴ6 /P$[y_^ɲ9'yZj5:ߛ㧗zۚM\b&5m5Nl_<[هn\X10|{cR|ҵ_~zʛkzٌx > .{lk}`:yynnց^n-Rm,fvvvvvvvvoIc>8Xu>=;>Oe%l`bsㆱ_9^qƻ?}?:Εߐ`Y'Ygw=__|/S5עi].ץlayb%}9/{:bW^k;uﴵ://[fߘ0tp&=`y{cwȷ|st{Ļ﫵^~qbÝvk=,/{s-6OOV.=q8׸%譟}GU\鯰~;#;Hu;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;O]|;p;ԁ4 'A|ï+~eٯt /O_Yۧ0ض7}Cw+:7YLq׀unwc|cNv'剋ܱ롔? IDATӋ+6YWgxuո^ӟ?/ݨVlX6;[VfvCY,ٟ˵{﬊/?<{c~vu9{׈;]|lF$[1߬ڷP|=gge /{z|W?vvP\xx[w3%č5i{[ܗہہہہہہہ 6\̑,>~ x:=cLo}}wkWv8q {S8׎zmq=V^w@[.}4νgܹ8j\ %r7-dȖuyŵuV.9`od'ϗ Ӻ><|bZڊ!ۻ}-IX?aZ֟%5\,X5[9pww)O>Tz0~G먘>|/ބZ6ny73C\ɏ⶞L#jvo+MoP&'M C7mf'0(;.GpٯuOZ;理sFJ*Lk\\cpu1יIjbpa:٪6|zbA7pa;9#`b4ٓptVo傯nk5nm0cK6uŧpOxz}WvI5y_]qFVO/zwM讉QsE+[9N<kkQ\vk޿ws(n7;]s8qY8ſx 'o ѿ3'gd$ofs-԰(/ެqf/_krw͖M~d;c[_y;#;pn^ہ?X%m͵i7?cΓ89pF7{nS\l7}uoor;צtװALM|ue_8xVo=l }򨏽LG-/Y;[qjlϸ3n=G9φ/Zʣ##|>g_dcFQO%6Wk6k#\tv{jO>Nܙoԓ$joGd[_t&>23nkۀSZ–#+v:_xY'n''6p<|[/~R|c}]Koo+o~tw;p;w7BLvtC7qNV7xsہہہہہہہ:7p朱8bvl;±̓d [rfw!l?`.wd!V~(P7gf[ =@iX_-pc^u{HŞu;:lgW2n|d-LGov[;]omap]ì&F =\|?12!^ߖz}/Wgo-g|5zت)nͱ:a_.=}V?cm}aqM3\3ۓV7ٔ3ε/g)~:C'jя%Vrlqz _?Y3=ᫎr8qm}?bӃkv65K:I7﬙lŰU?,uk_IJ{`3ʉs<cû|՞^6{ k#;Hg|Scm_Zvc]]w-Z^3^8%w[Wgju}zq?wj7]wp ;8;_3|9^wCOfvvvvvvׁ)wp\cJg/WV˹A]0Xl[ּ:f8ׇ0űIڋ/O}ވz u,{jfU9J7 -rI~Cqjd}G\Ƿ>Iml3[u֯xSz o[^>[gƩY=Zs_[_mtw]{8'ٖ+^zk-qq}[b`1i{=l{MV׮OSƟ![<|!Hp#/>HS=A=l%Ksك>>Y_9B?7|3OFSڤi ۰|O|E{l/~k~?b,?nϝ;]9m$_+'ֺkQkښp5UiGvu?:,oQQyn~7Ӷ?AO׊d3Mہہہہہہہف=wٞF|tŮ[olaotOu섯G.ehlMqYW-ɱ{Y)OWϮ^ύ Z['O-=Wk+|K6N?._;gg{k՘Ϟzzv߫gQgɳro?[p'\e߾'ߋQ$ϸssm?wi9L~uѯne4*x֌G_@jma;FzCDr;p;p;p;p;p;GsCZ<sLɧI5Z$n~>2Qjƹ^./zaF=#9q]3pI_wgvۺ#?lSmběMŖ'k]1=ӻf'ݴ80|Cg7ę gtvf Mxnʰ]}=HM~Ctnupgi}GяӺ3Ogq|qU#*fLr=I5ٗ>+ԒaJ˞^p&aɝj058a_X6nɎ'LNM-˟=Ypkcjw`nop[ckFȚ>\ OF5%ߌ?dӓ\s9lث؊Oǹ{6V_{ؽp㨦rµJ&_~^YNb°- [X6CuOcs䏿5)rWٚ%.N)_ 8 n'{qmyd* sZ'պ&k`z48Y[{H3 W1}V{\ʾ7ѵS]gŴ..+oYYyoE;Ѝ퍏57t}z?^N0ϛao|dM\Vr&s{sEv=bq_g]|rs?6ўsf†Oժ /{u;ejp$] n1w˾j&Gq{;??^Ma1.=حZ'^z63՚v%~檿!c,kkF^IoxϋSn·ψߜ?Tgk_]ןC{+~SOOIۣp\g5qoƟ^0}/\16Ny۽,> U-z:%'bO8끓4wڣYlXoO[oeb }`[|-!\ή8ONfS^*fa=|7/s1}`:yynumGMۛہہہہہہہՁ7I&_}<{NJ?gܫֲWvrz~=W>odve}ֶ1kR{{sϬ?S{7{j\ދYj֔\_,9˹F/x5).?W|_ոi/ /GGc{Gqs^ہ?x`oiޤiL}vsqE1$G76vyROS?ߺyrX7W/+xq{^J/)_O_֖7V϶r맷Y}>XS|_Bvj<Ű?@??xӓ&jЫ![9cOOjlu|cqt{"S ]S|<+%iO!$vmuJ}}Ӂ{vcn~g?inM^?ӯG_'5;_yuzWCʷr;p;p;p;p;p;>xrN|){u&Ÿ0:*:LyP{lEw1%Jg7wO[[Sqߟ ~[Q̷շW6|<雋޾`w= 0YIaOoV+>m~ݰ9{kGj_|]p$ ꗃ.OT,/Q]Or=lj^8 v몗]bkO|F}۳7[QGגu{Qewno`{ݷ>1嗃}Ǩdz l^~vC(6#|TWaUwzkx>U4~[k8[o'5lî<[0%Ŷ>x䓫^v/vv_lN_뤛9:h7=ggs :dnld7b?0caOLžk;nnnnnn~a  :?p=g0l;XnuSF*j+ߛ᧗=3U{>2N:uòkc? nsY푯ftCNzwZV|G$軎Ī~+~E=+l][哿^t4z5ˣ~ W ol>'.6r}o_rf'{{G5k)yֵCYu󗟾#[xb]vu?{g]ųk +?_e{ٺz/UOgn\In-pM8>Cx:ٓ8;o1]e3!gk.Wj0ո{8sdo9I0q%uf]L\d7/x*Ƹk~XWly>` L}afnr@vyj|l{a_sja=.V}{W}e3vqxҫFӋj`P.8>(8g3|}>9aߑvba+u9)= om dۿm)~ ''l⺾/_9vOlظi,\zcZhösꪆѥ[p0:W8?ߴ)=tc18=Hσ}#i칇 :W[FF{^zR}q/}8>^RŶLSV΂:G=,^:Z׏8Ւuam|<-n/޸am8kq O^UQQ< Vqavco[l<|d#w#dcow88tFA$=3M6gz@(&ɾ\k1gKF6i9Ӌ#x,._֋=uwWOl)G|ũ}oco˕5.6'oO6fk?Yw]|ԛbONj(~m>;`qCo]/^gOr|s:q؛!.g[>wcOb_G66V/=ԓ~ˑ_|w×u88$E!S<;1Gu6O=?s|V=ɓc|ʷiL=Oqv;=i~Í-xާd'>qW~O'*v_k!86'a4O;pp>Ճ{޻bvvvvvv_}{E3YY;8g==?ҟaӺs Yg24'bqUO\ٟe`˥&z0ㄥ7'a?ao62ͭla))Ovz SK6n\ c{WkIZ -vo.n{_X{Z<p{{&<פu=6v컎78{&x~+痽Lbd?qG|uϾ#k]ಋå8>>bÇ6`Ǿ5=r?>ʎ|IXWk6}P=Q<[9:5r^3 $o~S=tf>}'d), ķ6zunxlzזcmlz2xjS:sYǛܚwqGbIrkdQrk%l5v&eۘ:'zm:ȭSo] WuK_Wϰ[}"H?'=9֖Y]{yb}u~qx{o%p;vͦNTYl5[jF>:N3E,W]gqcƦ8O̙;ai_Wߞj_[wuu/o{0I'Ϲ~8~\vpuMV7Y7EF ?`kjH, |?2S?VCO7kY(,Gn7~;p;p;p;p;{sDc l!1Og Ji 'aaoV|7/&L+.)g8q_f˺gN5UOgTiyx]ʟO-^|+c+goj2 |tשQ<P嬡~nğ]Ӎ]W~,.uzoOq,g={}}(.Y0b3vq%S,rKg;|ي#G;mgSL5*7OXӈK!f6q-6 \([_0jczMzm=]g/_ai]ld{N+:ٯ/?F ne{ ?l:[$0J ziľ}o WZ:YoO?~kY}:_tn}OrkM'Ӌ9ٟd5b_Ŭ^ k?z=c?~U+gxaN|/\u2> Kk2q'}nbzɧzd]-n0kk:?w1zU=Hf҃;ct(KXQp|`‘ϖ=[γ=d;槳cf.[u3lŭg_մ<r뗛d73?=Ow}'>aU':z em/u\v])~k'y&ggj3ꩶoc,w6~ryڞ|dyqt`6u|k_mݸ{p8'Fyhk[;NA7[>_ӌN1sҋ8f828Ry㓧W]aK-tnLwM7en}@nfoo&d7F9j&P!vq@{7`igvvvvvv_}нݙs;/8?콿vygT㞁L?:,γKB6867.r&{ptH/oyr:0A/9k^r𩩞Xc;c\nl&cy]jz=73 ߮傧o=_>8}*]g ~r)6s}ߨݓcfk?|i'_@f'ꭎrd'+^FQq+;i8±WcIn-W]gj16X_q~qÉz^ooI.g'1{uyĺ=\}Ż)W|uVMɧ𧄍xu5جˑ<+-L=wwN8D/ݨ>R8{nn[K[뫸Wq:sAg:剷3J |S}8z}J_.>{Ǐ+Ox>#.uWɸX7ז$3XO;WgWLr}=~>3=V};@6[d?bynqut.apvs {6 Wl甕0ᗣS铅'+oM>ΰr̷9>ؓ8v-6,&ȶr3'~|loKz5o;,)YvzuA7vM?[ԷbmÔl.v߼nxHAӯk$_yBM>!֯Z3mMnY=w`| m>>O Fv5gx\(SNz>!W][gqFTa+4sxOg׿W?#٫4uHrG]/ku6Sljg9a3ʙ?w^Z[[t8#j϶ْj98xu''u1LNzbba]s5QVMCu{Kkj=}Yj3*g|ΐحkdK\gkaԬ~rq"Zhnrs}=Yl+ݯ|V#{\[Œ!Z>..O!Nq7W=g&cϮ Yqx\1>v\fߢy:7o1bI>5g2{\k쭯bu}`#yn :EԲ1nM87t7ξ7{']=~_ًm-~ਇql s~g9lnyv_2[|d{!3o5{>?{yuX(f~7X:_zB:ǟܸ,b)ixX9a'i')=l֏xUkjjpd7 }X^ZHsY|s1ozy{G/Ozo{V.ҿlN޻mo{&ݘF:ք&fcmWf[{a≃?[+onnnnn~?8O'W:9CL{F\Nz)f?lOz_WWd\nlvz!O΋.N}7v־_qNVZ\˭_1zSOȍǑ#\qk{\8 lu[MU.9LzWޭqmU>Kq-z5\=?Zn宖SigvGtsq;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;p;]#~nnU:OR8z?i'4Ojcvz?xҁ1t xLdWZOqYǹo~Uonnnnn;`iӺΞM[0O:sAtn.v~4:;`cwfc-瞥؊qruޢ?.NjpOO=Ч}YߪZ{quhgOþòO}3[z^#:_vv5u:WǹEorm~sOԨz\W酟}xoO{W΋*{p흴3x|?LiurcOV3tM|8N)o}ȆyH=9g#/]#l0W)W \^W=^Roc[;a_mm槷kaWd8^J쬭r'*[nx;*zk7tY; N a-7`'k&MM9ը.6`PcW-➵o}w`w`w`w`w`wһ;tNpXƻۻyzXgú~y!i8\jhOqq=<-8zg6_Mc3ϙHug^9•;ӫI쌙~Hz].=õ.'~o,[1jWg/6t}}'){U8Xnunux#W,O\b+,wb {7ěK'aLyZ:,iSg]/&Gg8fu<~i?|*Ú|ʣ/r}V7k '0l[yZq֓xyr!{&qf=a+f;{xkG5Ml>~A=YV~i䌏Cu/NLuu[[Kg?Gxə3j+4kz݁wd\tm2bһɑM7R ܴF/ _znlnMkf78HS }b^p|ݻtqw/\s;< yۈ\䒻3݃*Ղ.Q-d||=蚱¬SMxx }N{J5`]/0fXWG{'۠,XzN03vjk0z΋G_Qΰq&ۃ ݺʧVu1K_59F:\kaדqoQicMo3u5:kĵg<_)Nv9ي Gpr0^nrŞIz?{ҵX1!=81k#sT}k5j\ps^sTzqƛן߸đ=rf;=ykbvɛmv>썙:o+\O=hcŶU8]܈>&8o7 ? O//;?O7~Ǟ>>O?'OAt~ׅwMo:}wl\#g}gO<_+N'~_ؾ݁݁݁݁݁݁݁݁u9;;x|[s?sO|~dzwZ_Or~N_ρ}wؿj.ջ;o<ȏˊO^X Ӈ;s?۾>o=}7|==ȇ:Soo9ϯ9}~?;$y`_u߻ K(/Ȇ_M)_pd:Nw5yO|ӶƵoO>?9o?2?Gݿ{~OIT}|{H}ȱ~ 8ș[3Up# fZO[unrwcÕ5g:qy\{V+IwmM5iw6wkv.&.%]s^#^g| G5ߨg9ӽf]t#_]zu;oԣl8tt+NgK50٪!9Wmt5fgGC⧽=kc~_[Å\t!^6xڬ'k|sp-(w??'R]Vc//?))na??;{ǾwUA?:?pq#[%6 7n|nGM}JsvF+vj8uty.O_j?8gʯ70ftgo7x~/;Dq~#mXg|ɗA{'~'x_ӯտ:Y~~;5+<۝W>S?//:}g~> <3F٦S^l[{;{rrξ3~\ zqb,>\.Nvk9 q=;}b=)o8wnXۿ\Iy3`ja>qt< {V$Tôg=ׂoŅg7 o]HilԠ-ӵ:g:M֧C\H9P~\0{>2iÑI/ԧ-,[&f捃߄\u-F3_{+eM9+j!k\{=7iMM{}8ڣrVW\eu=뒜=r5\خ\pTI>Xf̘_ /] LGc 3k{bz Ѝ#lF<ޱ'ljkj=3_O8('<;_{ggt'|wK/}a}<ܟsKȭ_?C++kp9wq9M?L[Zo;;;;;;|:s`s/E艇xhߛ-?>bOO; Ndv8:<-Q\S᦭rt]r+-w.u`?ԙmO?9sz4H<7|77Mۣ_;??.=ݔbv}nRSV*nFwswvvvvvts/soss]c?|256gqɾbzu~2ۑ)ی#\񳆛jqq$\\]9ϳi1-/}{I3_V=jnf8I{_1͜S^ʹڋlڭ+:M(׵5}q\I|8Q5zM90IG5^9?k|#}.H%Ǭy|fk(Gm;PGԉ-k|ި/%b.7{77l;o# g{!֟5WbFԟ|f9#ٲiwLX{'\v2Lv5g}&fFfMoo>}|wvvvvvn~v}}scw~w>>9JU_Usxe/;8kL"bѧg_[3>irq8oNՙ VqYWCyŬ8/÷'utgNsXj1p/q>N=Q3Ě>\e,7Nio8!^wN>{?R~g}=+S5',Nz* 9MC=p.>6Zdž:+/ nl=Gx#F{'WMNfӵY ^cxE^lia/xz5k2wY{uϴهjib5w_l3gpڣic:/߫}aHzg[ =ذ'1}[Fqd+fMNɛ |?LYg?Og'9V5 ÒO7;:?n':Kg}v(o|y=qs>`/ H[7nF7t7%ndux|3/esX ֚mm}`.7bڶxFm΁bz]Fo~ޙs3{lq^<sQ>κ3X cÙ3*_uV9ky/lLt>=zb]0l3!\kP3\G׺Z G֏jW#;8]=qꏣ;9a>yku)O5WzHfXQ.ik):^w'Ȏ7N6zkxkCzeg0rZWuz >#^k3pjWfxo]G$fL{r]o^>4SZ=.َ,n/oڅNp| ;st5b[7AX_1Skt]K0V{7ھٲOMoٺ;4ZwSesd73o݌'^^Vmx㌟f38VNOȿ5\dbM&nkY,f_[w80֍Y5[]}[?Wu?ߞkQ} w${:;|\>G\ZϳObwh\z_޻NRo}4=/O_E 7f-{o7t[øq͘U?j؄F&C0=uc40nŘl坹;;;;;poo;v_:tn<9yF9@Sڷ-'pcvFq6r瓮< n8?|sx#g\Ã8_VY<Cqw:?<[oV.:%;|I&Lj[n5حKkz#=_v3#l{j}$ѫ5Ϻfzbc5c'}էRkF IDAT~eݠh-`닎n)ג8I#nm_q|fc~O=3b[m=>Vl;}x9䯦YG7`ЈY/uP'\6AΙXu;lÑqfYMaag [$ngθ5Y׏a;?M}ow،^_W/aM;z}=XCu n!C'35ѝͿ7\/k۰; 쟡y;[9Z5sxz:o״Z.a؍5|ݰ/;9>ْn;;;;;p\5yz޶zz[܏!ysgOO:"!/(]7_;n{t[aS?Ymyfmͷ650k^w۟v5'W\߆7m9'ﵸ+ϳH|q^,9Ėc味S_qkٟgacK}y\\zjϬho%Ud~yTs~`<9_ց'?C?2`1}>O)?%Ќq?z -$u1k\վv[nkm0bp٧;;;;;;zuga~O39t͚X56d\lŝɞq}`} X|/Ohbc3^Ywdc'9lKΘ WwêXNΞdZξkSW[=8f~ M yqקl36īlr$a`[c=G8ų]9c2759ĥj'κxҨF7pk_w}Xsg͙<'t8븪x6|Xaglo׳zȏ\OHƛ'/bvobqcrJҳ1q$πX710ٍэeyed2/';;;;;;;;|18{ ~ݯ9s3sOgd=@7p:o݀Zgkƨ/8pximxz;[޲U>~ 9b{`'<;l%N\V[{e3ibz~-JMk1&gIקia~f0!}息Gq8Ip.')N|tҬN)'񳧫'}bL/œ‘GC\ŷӾŒ}SO]ob]-+п\欳bg999aoZqx٣y}pagmj۳Y 'qj`[{gb[|Zj-}ϣ/}=͹;0:11~>#>l'|-~~MMo1Kd\܏o7q[)MQl36ۖtsY_u_w68>>tq8xƔ8rӹsѴ^}+.~ʸVfrm8$뻎8Oᮇp Ou)&.G_sͼSwл+v{4k̷QjO'~e-zw~z_W҃9êguN8ū_mu->oS^~wvܥNkpwkaxzܵN$nw}woo ?S?1!!~˾NO˿Oyw;#~qwמII?g;}_k\gg_Oiyppn6ScC&O88[M,}f-HqUCkX9VgK~y{'2wWC{ۻ٬}3j:>#Nl:{|Ö8͗m_vp]NV[q̭F$׃➶G:Iډ:`g55K[+gS~~/Ҩn]ҜF:ZS\COV߬AO|Wr[G=[aŸnUɶ["8]cthɾ`+VolpfKo&/ j9JGʡ&~6 C|axw_o;poxި7ы؁89s?_ Ƀ=_?'};AOc÷_μw8}g}4mk7r(@ n=|dOƟdtC:^`17]889Ѓ//:?~?O;ρ_C˛z.gOabb/21Lvi K:k⬫za!+iK7&֚m>~ծ8ш3;۪=[ p`7zqv<\gO[jt+5|u&SnN>k}&L}aapbuZ'XwXya;8-9k3J~3zDV-80z>,E)Aw^>t>h9v`:c l·xzDe|8VsI\{;V ;w"Cg}?mo|z>׿zl8л{X{j;[Q-zcOɓT[.ͬNX^$pngSP醚pVޙ.׃u}.vןWKٳKO|ⲑ㘯G6&o]R3wSg[/{_^UWףxMXn&`l_ k=mŭ6%v\Ӟ?ٜ>6賿MM}Xד-fֿWL|s]3nbiq֫YGzR]s5±KcuoτYĉN݁;}ڧ}ڽۘO3pn ō)Czg:\Ly#űV+OqOicw`w`w`w`w`wہ Qیy&狛b#rM?}Nܭgbuvjzdb=Ę=g{⁇|= -p:{ؑ`Q=lij5>dI3uZ'8>`;}`gZQpgκ'F8uS3vr+}bg+EoꙺCcC[*[-)Y\R CjN{>OW}u`ooM5MڧuvߴbR #Av7Of~×j: GO^[lW-wx4μ<~Vlew`w`v0dZ_w֐F8j?-;OT]_bLOByb>Wv9gN=vvvvvv^׻7:9_)΋_z'xqڭ;{tn bEuqSM˞-xX9?.Nze;zj%f3VN~>޸>SR: _,_?gx>s&Nz&[F0| vZ3Yc3㑏}Θ0S:d-6{&xOn}`3a#YmIةg?}t} s$U[׬rs~]wqy"~->~)ZZOdtx508'j.6 >IgX"?|FqؙǴ[{; Wo]f~6g~1ala%={R}x]ngCïfYp3fҁYcw^t"N[[˟6cͰpa-+Wt7\am ;f3;;;;;;@~׀@r"k]j%{~zaLz?Ixúi-:$a=mt灒e#᪵llNYuog9U\k~ll#{y˝>ld#Z\O5OGˎ޲Z 9s 6?.ΐx65L5/챽5qQƚS_9d+m#vW(.[Uv16EZ]ɕ\I8:=~i1b:.ץ}'!fĻڭ- '.= ϫxtP77n׍wnس?}ts:dG{G9z`/?i/ߔk0[;<;Ss ݻAa繥[syopkXre'oLlg-ߜ1s\c 8 ק'> 6yϵ0pɥ:]_`kėnݞ0{=|avNyM]/,Q|տ8эpŗg:W8|D7\l]/y#=5" y(V ?>2u<\?̅UKXMY3w[x[ð5A7 q?Z3{ qZΠG_䰿]O7,N#u8R}'zM*8ⳇN!9d7ZO ΁9_ Ituc擓gkM;lj g/j9@kw;?s 7kk3Ŋε:%m}r6ՙ>ύnYVy؛0XkVkĵߴ٦~|ك{O#d62}Ƅl7^M-Ge[yw.q8ow6oӥx:Ѝ7yr(/frO,YLa"W|srrw`w`w`w`w`wՁ=i٣Ĭz_*cbsIN~lZ_X?}q+M{]Mv8H11٦Maf}ӓc=+ќyV=L5i=%ZW\)s-(=?Q\2{NƗ_+o [ljo}9~zJzrN|vg)my\vs0O;^gc=>'GzrbJf&3cAN;yW.W;MCμ3s݁ڑx;0o>Sӟ3nhZ'L:_b8W}:nXrۥQ%z:La>֡s@g 1:wy#{u$_yձ!yi:K͘$9*߬Sk5<^Oc/CQW IDAT{=|Y?V-xۇ6kufg'}:͏l#\p5}6F;\rgƵO|\;ulQ|Π_pM+=L_X4>V`1gML|ƌާZmtl;jwr˽ٞ݁n(B7.7@7zӄgf۬YlÐ8ݠIv䋃֮µ<ݜ_ްkxWcw`w`w`w`w`wtD s1,Gg<1aӹY%]ú\8^z:YjߚI[:CǡKpfMV<|±+\yXo=]_غ&$ՀqaZϟu+O-w}tqsJ;Ӝ[Mff᥋79z7\:-ı9Lbbuab: dcw`w`w`w`w`w݁y>Hz9b8j\cg5t#˾=g7yaŅ;N>:p+v[> qF\ٓbV\I3{&N<~!x3G#{oߴNcm5O|_X138q՘+ʙo_ʅ!o)X,7}Sk8'7=j\7NK<Z_v[^rbIkK5ѵ<>19٭g=lՄ>O\cbb.]^F>s屆M>xʿ)C/qkg5&:aͷ; ['մˋCBpwD%wK;XҚ-l4o=cN5èGxEor݁݁݁݁݁݁L sEzvF;-8z9VP\| Cb9{7n= ޻ql=.'r㈗nI3-{x?8UúYJ \$GtŅ5{>{:f+l3ZqTR,ɖ]9^]cOj'Yqdkp{5Ak٬ oM3ӛ {+l=ZW?Oŗ{m7n];ߵc;;p@7yz܅vdֺvӁ~Ogk; Z]}꿉3\1Sɖ>'o5&>yV=䌣 7gS~'y^|V9GzGWRͷCENl)oO5}pݖgZ]wwr}=ݎwVVVnW{q9nS\~`;۷;wU7NVk- ~$8[}ůkK\bow`w`w`w`w`w߁;)ǔVycYճc֓z9f\v>z>ks×=:y^#K+u+̊f \؜8l#rym]]lڎ?٪tݎ9⺫m櫎cbV߻b}K\?qG##^# %{i]|?̮lqNf$Kp۾;:?n݁WX1%nr?k bWlzƟ5g+d_Nx3Yj{݁݁݁݁݁݁^ ausYCXbÒx([g"rr>V˺3Z1ջY7dsd}Ώ@Pgdclq4حi5c/ll՗S>t叓޴Xca#q۴VӎzAnr5{Wm>zS}_ FT zu0Ik"j WdO~ ~Hsƪw^|Or`>9Ç%{8!,mmƤWO8؍zBv-٫?$}]<]s#z{qplu6cˣF6Ҝ9a<G{slpbkǙ/N~9=6wMsobowi:?Mv+o*nld!t _|nnzZuCg;g@Iµ-nb泗/N:878ẇ|@rF1I6g✳wsaɟ MNfdzoQ,wj.q(O8t\w5<=˵ڭgb&_w 8>v1qeafd(G6kz┋5G78[yŕ fp– .}5W={5W={0cwmóy?uu3Vn]/bÑ8)n[s6Xy˅#b=h/] $Nz|K){1 X|qeϖ=5w^Ljngy>ks:֝f,uZNF82/}ڳe_F+g귽{`k9}xClp%fq5^}u7mS6goGXpНq5M[#9k*'[X̴[5f.v̉zrՋkvvvvvv^pp61;d;;/||<[#VKw [}YݬNP~OEzhY~V5g[rmjH=Guf ?'=/菞N6jώG_ԉ{5w zȩIvqՇ׈^˄j]k~8j|?3`×ӵO'K奋e׃ȟVUL3}:8F';8LRYPKs1k Kz-~YC1K׹΄cpl=(o]mê-;^6X9ez,ly끽ޖO"?#+=/Kk7>k=勣NOaئN5G+`?gF^Nx/׺kTǺ?l_os_j\Y,63376}1f~k#[i K-w}vss :0oNL~ĚnbqXvTnbmZo;;;;;;v}2+I/w>dg  {_~2|$Į̬rñeq00F+.|`''eߺ-.\]%L//nmN}-ndlTSvѫcWG]ϋG_زp&n{?YksNҜy7Gf3fz K:_G<;݁݁݁݁݁݁iWU,s}v<"3ی;YLa;ǔ;lk߬s[zⶦ+/)@°8΀aؕ> ݺyoQw=hp3?k*dH'l'n6#l9p4WO6`:{{>r/k4p(Fopaz-Wwq=O\j25;|OG'ZOQ=_uT[5ͣz?.#\ԳMNzUQᧄX|6;_6{{8ų:;<{xjѷώ9qtɇ'x~63I'W]K2d'#^7VKr}w`?n݁WaI%Bdvr;Df ͳ7\,n­l~.hxMt~$vql0ӹf;MIzhFXg.ޠO\m_\ŻΆ3_:~Oo>,b>_mIe#K%!9m`/>brϖv\*W[q)wbDdWګ;[9٪UX7 3[$YgUX58`&7ŭyMݰu{8˗͚}柲=T둏}ϘrՐoů8ꜱ?伤Ly{\3w9%5~kV.Y.`z]t/f^mbgI5۬3j7udU݁{~` t̛:@1!ӭ>FzJS_z+&N9桛<X_ZaZo;;;;;;bv{v aY4:ät)V:!{gYPb׳11pF53'T{akt~;q}ìNɸV9YպN]NvMwL|!٫YMufyf k+.?lw8:YybWgx͉]f#,&o~^7b^=T׺$[5k/NcϗkByY-~gNj.6^ma#ӵWI>85!%\kMz8{>isCכiAQ]A:';/|x/<ƽu?Yl߃/K ϡshx-uz3=&7mwnw9Ɠobgn/t̹rFX[l7F==O^b[ߧ,')oon2mg]tܓ_쬷=IX[0FVN|boWMgSc.qR%{aL?e#=[뵿+_xoVտ-KOIVk0paoQL2ⲿRdhRkYgm}w:W'7+Hn80G IDATn)?} ?'}w{ga-ΟgxٟL'fGQ7?~ז?3m=' }4Azk|;9yLY'yb|vq~i3zӫ WxۺW 9;:v>-s~>;dr::aŚV;L5#_ZN#;uMb1-~Ѝrdg 7 #Z].WXzl„kS;s/63>k_ [{uTQ-)uw?+}kgMf$# Fm5h) kil#W7aZ 6X7 ־1H4YϼU=U}oao}[~=Gbz>q5Հǜ {rՃLO^lQ}fg^;dw>jߙS UA{[yM{Q댫bX5q1eY';^.:i^tr3V3_O^wra{ E_joͼ} '}gn:[̂> ;> Oy^|ܓ)|04v@[]>.lbQ7eYx|z{YtY;1gHOűkҭ0˻|>˞|<1m7 t^O)8큝\oMk'i$}4?9|bMQ<nX0ăV[lRg?[{?n=g ,.ώo滊?9doXg3]=t$>9e&6yrq3VO8vzo`L)>XlbYxOk\x><>VKO`oؿDo'OEntgi.pdI(립Ő7O.ިY}-OSi]š삫9;}i' v;s:DOlй9'睫&0@3?O_?~Xٳ3^/^oE^?dttX8 ԢbPyx ңOo|~ݰC5{~[jk?[LL3j[:7;z.O.?'ʯ^gK꒳{WLNf05y]lx3_ ϊWs*(.LUYSoF&[>3>k,og#!5oNf =gi[b</ϯ7fnzG:77ũN}gF͌ʝsl1jʭ9NNT;<sړaǛ\VN+"lN`' 滐Mϼ+ -.3nW v;N3)8sc|Lf3F>O翇31߇|Uj?W-~ꞃ+{{xb]ssY髯b/9SJ#a ^7߽+>Hо}DvtψwOox9|(Uy{Xs'7; |&pn::ƪ%ǟc.SO..>lO?N`' ~>'L2iQ^&ݹ9ث|'?%9uʹ1ŞW/nsr9qZ*gb'+?g5r&fqN>cOқo\{3{&Ml5gnN1yPInrq[L^[r8/:'{=x|`Rsq7n': |0uqJ{#$&O&)󴳵Fgڏ7$w"#{S+>pJD6g<$셌'\[C6r%,ʭgAGK=ܛCqXੋcsYLfSM>X:6{+^Q}K{{?s<sd9Ո\?qa{0sT`̟ M /?c\=gq3x8j7CDg'?W7㦍~vخx{U<{z;gNG_<+\>f_=<1_oNV?r`i#Ͻdx>df٦=ϸid>_}Q{uĽ×~ƭx b t1g8- ޡ]7 Voxصf+Y...tAЛޔ_,G.Vxbwq{.Ms17n' v;?0*uqN!>Cgt 5?r0 lEn;O>F#VnY9g9!ؾk^OVkba\lnxQrN3 laOl:~~`/0˓PgJdFpY=|Gn'|^z{=gl,G^ҋϬg.o?|峷Y}+Vz/fTxKnf:ržQ>z=9o>vjg0d'Z-l5_RoBs[}Շ9boÙ86 oϽճx:ej&W $_=ٯ&pM9q'YUz*ݪOS fw/1aS\G>.N ]vcیjp@8ו*jicw;N`''༂%s ٚgb<2 O:#OzƌVdf[<;Ζ.6ԓojshfљ-8̳5mlaN>cWls]N<\Y5?]bn~#>O ey.ÎB~['W:`J_9˿˷O}߽}O E5I;Y}3^fWxs(Vs D_oqճ"٧sjQ|=|z##_^1:k67:{yZxss?ˁ9ku<뇽39Lrv*-Wn| #Yl6ztI=uUf_>Lqp|맞dK)jՉ[Ŷi#- <|Kf~SqaobS\;c͞QuI/>_}?1;{WCL';Ѵ\|lnxmA1^Qnrʫ++xӮ&y՝qϑ9kߓ̍ KLq1v.F.ȶXKSw .&[lVX+ v;71 9 ẃ2*3Kq9]_gr47c®V7:#&MV? S9:ɳZW>f|9_?'Ϙi/Gfʏ[b>U?nͧZd O0oy+79^_z;c,'8~ƒ뿟]XlI.ʼnA՜}gg˟-tfƻĖ?k?''>L'ϸbۓAȏzw⳧o*..*[irqxsSV>̙zgn{cƉ{ t ea.to:zާqd-wpsb>Eow;N`'z&0-W目N;C1KՂL23L; pO@ݠzt k%{~2Rf>LQbŴC=/yH>yf[yŊóIj,.3(or9m#>mjz'qz{Ϳ|=wYM'|%?l;{aWorlOb>],c~߼ԘӴ鹴 Cso=\ʃQ\|Wyb!ٯ>vpf5'~>Cr)7>0~͹VTNz\~5Ӝė/؉uU,nշ:o?=S.6LP^Xu7{\N8^Qj>;U qM|lz jW~L] 5 |袢^8蔻ObώbbM7"Gx{51gOb#uQ t)4sEyG7xcf{6"0mgѝnT8w>qpV٧}8/,L/VV6}u36קT?}B=e {>=~7\~:p/ ¬/!Pr̼z$xvrѫ7II{7-Yoz_faV~w՘_?VbON7 6Dz.kyx97pzZ.DYŋ.^V3)n֬؉)|TW\Ŝ9gis/V}ū_ެUFrgܟtx^z%gOek߹rNLFS<]pspa6|c3:'5rN?5|?^1m6T?>mi'>&7Ts'Op]m匙z0+d u(g/~b_N`' p|8:ް[7aw:׈7)pcI>q:dz ?[:5w&3 !?3[3O?97'\wA&5?Ւ'ߟfgjsiGOpyV7bv;N`'&0k~|.}׳ 砸O|eӹ% ~_ XV_U8 ?|g+5?Q'yK:cǫKxYVO]B~jWKO8J(^[12mƐ;Kfuy pO}='ʁ9xPb&˅w{|=\`ĐQ|aSgk?j4>q׌f7^̓fԙ狋TߌvNir_~{;)ܞUܙ7q󅕎޾g<ҫ焿0ň96^S5ٲISGujUC,_߾yX>5h֯F~ć[l:ތ'fjO_V1}~sO8V >(Woʛ9}+^z{'x;`]d.Hg|.t69.l.]|E0˝oZVoKsYLylO;N`' vuuǚ7 > 3N{pTpqdyj?նMj~aY_a$||љ^^=6>#9$zυ3giWSX; ;, #]N`' v;g#/|Q8{t.DvVJ3NW|5 VxE'ۓsj"~'oַY-} _?89ys~!{ly :ۤf&K56E&.]n{ Ol^mM*w2嫺OjE3&5^\5z>PuYun"X|<1aqvN.1zVbO{xQa=gp]ϕ)ۙn{gi+oOs~K[WPRjFmOsWOWZWlUٟ-xgH}3}\ZϫlՊO?~ξY=aq?gwar)73~Evg͸|bxן-Q?f'ūe+o.tQb'ӾN`' v\#;[8G8k8Dgr_0C̅׼|6|[:3ū9^pK6+Lu?yu`oQ_朅~0i꩓]67p:[Cr!zS`Z=GGb{z\~8U?찬ΤljXlaglx}&lD7V.[xm0f\u#=ыOrSܙǖ,W,3ݜ yfxPk$gك8QXx2\rOs?3/䉩բ'PIzqx-{Me/0q=EJK?&n=/t|Ynnypzb4z6z9=S7cӳw78U<Ζ^l N'7_z9<.R.^.:]CCk1]ĖNMr\Q?fwY}ϩXOƭG:aijv;N`'fN3P oS,7#湣8Xj5:[9CYp-Įu~-Q"L}7F|/cOw Gb,VnoŗfM278?y˦!v Sz~{E'ozz }%W.ȉ̎̏S=Ya뫽e7S2b&}yYa5#G7y#3WŢO~#Նe盼~-ybI4/-9WC\?ls^Wpª'ŒQTCcu=o=w<&flQ*\L\.y꽶pѹ>Z~P97u7_WroL5أ7')^|g/“K?;b/:95uv`{ƱoF^gx b> XY.xru΋b,Wy .|1x:\܂a' v;IDuƘ-YJ,sRg&ͩ0å#pO{-6ڝgzTcR7]=gijY>\ nNz/N˴P3umgϷ7aT-眳凡Fy/&YL^̿9_?Tp}'WZ(^~Zd$n>-Ogfw:}Wk|՟zaL_Ĝ3>}Y+]īNz^c>c˿Nj v^(Ϳϸ^xQX+=zxY5Ibg.0 Tw;N`''l2o]syL4Er9M|է?W̳ZcL{|g,~G䯗vxs'իtd7 7Gr}zY3LB6OLt$vkB8,K'1u/^mCa䇈GjF1Z],7f|'cָ_?\يS>e;n+3vX֙7 }ήՓ[ğZl3Fl:yNu0Omb~aC=/_{~j?߭f?aYmN3~ųPr [lQ13=>}+v;N`':LW-Ocg{>{e~OL1VqW}d3 ^pg)?V֕}*9piog/Su=|UsyNoyްyxNbX _qnrX,}֜f5׳Nc0p;}S.wV=̘S¼}Ml^7VuQ3R~'SyWG5o;z(~≥3U1FߕE3mxéO)ѿY͛WrW/cMyb޳Ϙ>r3H cb7ma$oo0ßްNrbEF\~??Ñ7ɚ30y?@CWW;o}j.^^ʖoN`' v߬ 8 gt3D1<;|BU˙ 7R+Ǩ>խx5Z*ԏ}u>cRC}rILY8҇t!gC"ab揋>VgNW|{:n>W5ûd̸l[×c^y'p5a5aBb>;88P@ԡ.9Vb ![(fO)]y' v;g'1'71ݼy 7O>VͤRTBweφ[~~|v/ ͩn+pjճe놷]{+ƗQ+ye>z^8a{4GX60a\"~^0^8sĖ9^Osrљ]_lzSό˟j79YO|uꙝl5Oq ;)<3J ̱+b:_ʋ9g3j5nmq3v3oڊWq\a9ʿް2ܝG:C˶]]-bӻQ5:L]aob>g[ v;N`'dݳϘ$.6^7n d[>gx{r^;oRVM_;zaު^_bˍEj glť]}=:bf0_js +9_u0*_ 8'99X<{Y\\>SlSVnxazhn3mƕ[L<{O~gLq㻊-gz{ViyLn~aa%߄'fl|O>bk&?=\/CYogGj\lo=Ux8w_>|]mݝN`' v;N`' v;N`' |&=ٻom7M'a>i&F?>?z [~A1jTG_nveNLw;N`'x'ҹfM:tV)Y';K z@g.fNGz)^ ״=ԻwW9Py"P7CԘq X{PzlfW.? \/f?}6rխx޾g418<{,ə%<" >K3O˩fXWO>s`mI¬{vr=sVM-O.6z̯=}/^\3.rQ|g~}L͆O+w&~ʝl]Nw7 w楳Ux=M30k>ͬ9Y_ʹfe'8o./F.<n'Opz>c|bi_NCѴO[=eM^G8ܞ^\qf:|a󅉇g\:S ]ßVot_QMjxaf<gp)&|x5欲f<{[oW{ 뙗}T{:eS5rʛ<>pVܿgj S5NZֹ3.Zw>?9w;oEe<_tqavHph{o:w?:֬_=>}S~?cW v;N㜀3=rV0ycD.e܉??n >Du>Ng+4Jr|;߹}>7}>,~3yv1";=ž#\ڻ0'/w.7L{4k]oڞ™+v{m';x.<]TE=uceua' w!bky1VC.Y?b9!wHݔN`' > 8#tNp\3C<8fF>7Qgnr n8u\m\}7W)n{ף~Gr!ĦΆa]>9fWLX5;^aԧ`oS/f{+^bO-S_Io:PmR{s!F#W|X:{6q3pcr'#WO7뇩)fbVkʧ̦I/aq^S70gδ#ssƦ^}۬`}x䖈5YErؼnwzXzaK;س/Qb=O~W87~W)_Ům'e&76w'O.ΖP͋bc'Uɶ|' v;@疉}uyqf|3_-gY'qnԔOӢWwӤ|X6G:nn#\8oU'dz^3㧯Yb̊3s zO>q9㲋?1^syx=:ͮr-ye# ;|׿{EZ{è6)~Dӗ?EUSi==GV{ޚg\ufSr:N\{jx3Vu朳ͼj_j'O/.c؉ƴVbٗ> |kyN`' v;N`' v;N`' > '?'p oo'Όa7W1')3_l+O('v-q{t%X v;N`'`,B|B8:tFvyuSC}{Q} W8[}'?8}-|0-}-|}guyvk71Yx^q}mEl]߳91g%#t6u,6ѫX\ 7Yf {?ٛ88uTOz3N(=>Ko*EN9agmxӒS~!.mƓ! 6 U {}?˛\يwKO)l劷o 9̙;᝘ =ۜZ{vՊy57{M^䕛}ͿT(_uS\6l^3̹7ϥi|M7n' Njv; }ڦ,! s>]PPN`' v2ws&0N;%.Y 3y0bqx>NSO>(K$8/ۻ#Xf[l(_G3kیk.l< IDAT`S}WcƊW?s7o1jWWwS3'y.F;?}#{mx{6ījN屝qpN3f֚g@masoO{a- | /3 =yqKN[v;N`''üp1T]gիX^1զg{,1KT՘\Ooc67q0>}S_6sST{߳׍ѯr/g//7=sS+[<{q'NpºK4K5{;gNe{>vů3/~ [*i' v;y>\6Dq}^pMSܻP:ޞ_O?*Lw;wGwbQOqSf;&U\Wތ!`CN>mO:X{ɟ~UZa~Wbg˻U=S{)_gvd;s~>Տ_}lWyWW'.Uδ͜i\~\c~6n'/1 |xmry;cM6W?.%6 7ؕw;N`' 4g&sg/ )C7H;uV,ş;s~-;,gYyj֫3X_?OrP8Xg'G0gbtg@_"aկFV/skq({<<5 \0' u&&[Ϗ9ykC#1?O0_X315O%lˎ\Г٦㋭.|a6pgʝ|iA3W-G<}Hp;~Cku8{ge#9 ͘b=}sņqaD9!^l=;c.DKN`oؿ4k'L`^֌-̡[ַu[qup0pU}piN`' v;pF<3tܒuv4ߴO2y<83Wμ!!węzl篖A2^nɝ=Y~r('3\1aWQ/FIa5|ᑧ=߂đ~i_~QS,;Lgb~1p3yXĨU\uգ5qwz^>;ԋ{.qU\~{lO/8Ռa >y9z?ߺ^_bT;Z'#W)^qxOw}godžF?3d48snşu`X^;H9G>q.dg a\y'3<seϏן9̸bv ta;p8 \D].ܽ(WL.[} v;N`'p1 x7! Bw>)Y&=*7[θrv<:y\:sga7Ǜzdu?gX}SCws~(^-'~?m,>ኳrQ87e'sox<|ѳkVYkŅW|S|:.i\7n'}X ΋\ nI?O?;l\| 7)yؗv;N`'fNO:8;u^pAo%wƑSkڜWfOHϛ&37LuY?'MWYc7TᄥO̤+LizS7=3gCَ ).Y$bO\9Cxy&~8lW+v4kW^"<{j}N֣eט?,2{Udxۻ]b/^3/n6:z{ +ry0گjˬM{s9k=-xu>'O4~F ѧikFY?VKO#haϽ^{$9pծ~=S]=jojܛC5ßoylâ5cőLfC=<39N%&7_b <{]L2[NC.ϸ.;N`' ޔψ,3v{G|Vg+sʔ{?gbŝύ^5wb Y=~&')?;O >}S}jƠɯywN`' v 8tF8T:Kůr&O?8{Y3&Wi{r}ꧫKz}6xq/~XZ+9z{ާmN_|bNj3>È)ix)^+<{hS;3wg. Z~g=X/ߕ-=^/U~}˟罘i/~z盱?E?ņ~[̗pzH=?'w.lW9K;ް).N2yA`]AF{J<"S]5h֏[܏~۟/F!_N`' p.pƈ1y70eo8[2ͭLaŝ33U=?#|=J+%o8H^\ltm+*7>!xb+_z0PaO}Mf Nge6_tk/bg8=Xft{vXcí9?nTgW_'Ui=7xT~:~bL\N8z_/aÙYYmzbϹѯ$zUorWeg SDoe_:`V7|1>m^ϺTg┟Ol?wdˬ~O>"5'{c&Qt9g6Kiy{/Ꮶ,&fƕ{fo3܌Xޟbfd69 wb_\A?f?]ع}Y}=?eyCfGq6ۤr,wg<N;2bv;;݅ğ ut0f'ΌE}i' v;o 捆s:-g~⦗\XM{gi~J|\WwUS~kÍO= +.ع/~=̙7O>;zc;sŐةO{2 Cr{}݋r'g k5l? ܚN߬'7~㴇7ĚYs搫}&?ً7yu|fތKwrPC)WUkh5z Ƴ/y9b1Oiϗ->Cil3&O}'7T?=ƫ)&Ęuˉϸd5Μ?N_mv;N`' v;N`' v;N`'bOؿ(h'xl~;S 9r_~?>1|^~z3_D~~@~뽿bv;N`'3'˝#li;<t.9<ҟg;s֌_v! J>9&/n8ؿb_T-=!n F9}!'ۓ^l}lջX6j]qrQ\_կFq>P`GKND l==lcV'_p LoVGaZ3N,}FaνduZ١jY?{}AFg'fd64q쓿?corÜLqo„X޴W+|xu9b;8F^ѿT  So /~Ƒ%bz{09zKz/=ʟT/͸xqrf~r9Ťg[~\sŅ﹕SSο|'RD/8;NE ' 6W'Ugݽ^Mvm;N`'M` l{q\#f:/+U#YEV-w_'^L_}T#.ų^'޴zq鰒î}Flbj>lpLW>>5+[uΓ·Gr{βaWܗaV&5mO̸ɋ}.̧yU=ƋmNa?zF?p')rU\ްS]̝7`]p=eGopO>}|xO#nzģk[ v;7c<`LF3Č%;Ϡ5lr:НG|B<\~kI`ma UA{xGX|3`}O%6=Y5 ,ظǟ}c.s᜛AZH\3ͰU +}Ooezhf|z7+me.9=O7Q;`'> mƆN{_ɸU~^Ű'EfY+[1jFf=烗.X>mk8x+xr{I^z.g\sdyw„1ImO9s>Yzja֜՞h?"Ff~gr&=x?1<|'ȋ |#'܅y7^ {//O?6QOu6n' v;c]9?tF\2o&sΛ9{8/X1,b:3lݰ]nI^^yâY0:wU컿t}᷿rڏ`UuxQOaʇEd]ίNp&N a -'}VOU~ /^+.7ϹV [l3.yr5m!^UOqv4R{%~8b/]ņSs|yş\uI=п3٫6W?EGlvu[[;<ٰ!Yՙ6f+a>mo053_VN|}>꒛Ɯ[^bM,v9]3bQߙ16[=jn2j^z{'xpK4^Og{ǯ?goo_ş]7.΅v ˁЧ7կw߼N`' ?'{?9_o[?&͛y|ÖO\9O=yN +;p,ț~~g$?+3_ v;N`'N swnYbo~N`' v;NCްgR{nW~WNg_տ__}oͿ}ڛ??ɞ}Ⱦ2am5ߧ|-N6{r//o~_b+v;N`'rG}v>Q}_o?;;7??}C>qq;wtn`S`y9frr,G`T^-O;ʟ0rY>KT TW қK|m~2͜i9k!_KH_60 Uk.so08 #ݬ8sY뫘j?y"k{ W#Abݪ.3qg e^?bאZlg=OX03S1*wd{tbtqSM[''*g^?Q~5Hwgԋjޣ|^Nvg%: #/^z{'xON !߇. ʛl__o_ӫ/oW0.].mt! EjT]7g' v;3ܯگ΁n./^J_/7?W_K{L:{㞿Xz73?{w*閕}̬[Ue~*j):,ԉ(  #EGHЁ3JD^Q ^Dz }u}#9'o vYk7NĉbƜ@C1p + q-p=Nrxa.t=;y5m7,$Ҁ݁{~iܡQcGӵ^Z̡>4#S +7lv'ރk\@lTgeCr}3'F-^ IDAT&ҵ7cXljfz62Y'0Wsx+~Z}H_k][GqGU>4sio=fnc٭rχb՞קZk?# wŦ˩vkz1,_e;Ob꟯l%Y-;x䖸髷[Tܬz˝a}{=  عf( cƜ@_S|go=GđǧFX^أjwӟ=u41'Nr"항_Ő^fr%771Ů{]7KN=W_$v0+nꭸN..<nSN~^E۽=====|k_{>>ڴOO?_G/x|.g}#.6~fKĘqGi{TO5jksk;w3qf9r#構MQMm9~ŝÙvSr8KQwԃx}tȓncjMl0ל?uo/VyT_՛UKZk%99˽I;7}`fg:>-گBCztxN'Ћ9'xMG˿˫8 st77]|oW/_^xz9Gvna׼zn_b59Ó_c=lG7ߖ=繞?Jjv/kzQ7S^=?˛:#_rߖs:Ks _Wަ|ڏ;g{|+nɫHgCr&]˜qw!Ze[+N_'pW_sW87gg_ٟ;.GTavd?s?f˿<<~W?#>Y1L5PG؟ Cu<P$(oٻ/vVdW =GG &;ѭHWU |aX0볽Sӌqh ? ~8Pv6xS]/ī^R\Z,,k]v$Gq-\Yzn 6VSOWsOOق6Hk/V5_ Z{'g ';9uw$ϸk1cxnq{Pj-ZR~p+|IM[oK^ȯ^vgӿ#FZp4s?\xZlH>?O`Z~\mZ'SPMϹX{2='0}`!/Ow~wϟַ|˷\ջ?zF~w|G쐦__cO`}bύ7Xޠ#LSO?Jżx''''''M.}777_؏ի_~MauіЛpk=ۇ06+`;0w怅m3 {=Ojym:szXFeuO/<Ⱦ?}0"Z끽<)}7x ԛ{zaYib51 C|5m~HnϝGƋiM7|>V|{ī}?ُp+{[uqN'd/6@Zx}xb{e6}È3g1e~4bzw<w}2W]~\{K瘏Ul\ɭpyT$~#M=y>\dl'?_$~({ꈫy+mRyŸjÛ_z?sW-oY`)ׯM{OjIMv>cO뻞n,A\9Oī|b?G7sxo ~q5???a 5^F oE.^lzM====oћ7|w{^}~}]^IyO磳m'aj'a _侂ͽ-|;n.-ψ"&%^&SrՎKzKz = ݽ -vu={jW^>L>|+5N*V0-=zo^s== O֪w]&攫 o֚1SnOz_s?{-'^^ba׏hN|rW\|IuL?\!p~6o_?z== fGFՎj<)OH^U] NꮹQup3s 0䭳P׌uS_;&֊حǭs3i'qS8r2-GJlgd)M۴-]>ܞ~584s_טM 656{vQL6fNTt_g+g=2Zl|fNg/>zG_FGJ?cg|6d?sћ! s} Id|O.&b'_Wq? gؿ|7I0?W֟zW95]q^u+s|GGӴGGzk9k7ޯykNf ޼')w)7 >yr1عĞMz^5fzqq]-~0G}T~&l:zT[=7ŝLn+?Y%9{{v)Inaw}uKxGKk6y—O.osq\ 8k͜'-Q6p't9]]_{wx+K~ToчN7 < '1Սy {w`ȟoL߻˻Lז tO7f~=mڅק5ͺ۱{{{{{{ +lc%SN׏4?Qib }{!un=N-8zoܽ:#QcƔGh,>n~fz+7}Ṗqُxӷb\q%~G ?mh٦'Yæ~ڷmbMg_}GFkڒ'_kUgbsqm\#{Ś={͡Ϙ)ML ־/|I]OowiN۷'\L`?S5n4{?-ɟ-es'}g ]/>6?|~ӟn|C{_㹁's~j{LfW87~|˷|+y7>=^|3-%">?YCyذj!ȽzΧnT,}D*_X&_ItZ3W-6\{8t=˷c*WOzYgCLG'aؿznGôWB{y'µ|ۧק=UOrft5aGaמ8}?3 a_Ǧ3;^ٞ&3n!s8"֜[{j/z&6}>Sqk=) J=N=m0:J]jГx=QYO8̵p S5_6r?^978txu>+.-><>qخ̟%Xm~sNiO.'r&ПiWӟH oX]|av27=ϋ;/}/бR7d~oi:;@/ %xn'}_I=ǴuC>CNG1l Eo{6oV :썻|)?*6tC#J[ZW_p;p~K߾:XY̽.F3grpۏ\zƯw{ ًHM1]#\NO/#`ۜfn#]3Uk8rm]bO`{LW+fx4g]#bkfn2.']j31g]j⨺fZ./zg.]d{=7a5ootaV^OaW~D/vnfx:ͧfM*e#0̬PvfS9MkDz:3;o??ߜŕϾ_c};no^_2I#{z[O?;l^1 ~+č'_7<8{_ҧ}ڧL[uth?'g|g<˿ y1bB͉C|oqooB01zI=====w~s?s&|5J~2ޕ{ƕ_??z2ƤpꞁBސ{:neKv0!57;jMգ>{rԽg{Non07dP=ūa),|ş|j'g̑5ɋwD{yMYWGu9~<(Ql([us_GKT#FuM>>5?mJ/nb\'?+=V\O՞yͿ~&q\l=WO|G|g)=RoZc$lO?9j_~ċ՞'x8M{OjIMv>c_E_tS?Sۛ?p?C?tɟɧ}KKs?y;yw5ԟ5gUz3ڇ[x^&_W??5>G~G>>tS_e_!Oԫ87>s>{RkӞy+q^WEOO_}˷|q*?ۊ?wwv{{|5_ǟWt gތ}׼ߐ 58׮XNzЛb\0#|r' O'''''''?WMtoo׉|w}{{<?|}{G%+\"#\_>$uWQ_ER,)b=Yn6Ou$GUq>Ζ]y!y>%#;W"90M^((^'!rq}U\y+U͒N.W{K#j\1t$7Y^b=9=_7^ =qbCxj'Gɯj95sȳWKLY_bt cv8xx]Z kV^a[1͖MܜKUSy#8U:ӞeSlŬ5O'8)"ik,_qlh9؎T5kV%mfħ$7ɮA3VV^5>8z`pa7qɷ]Nuc ,ӡ~?>Y_W T>C?g__x˿WW|m[xaL^#7^ĽT7z̛L_?)оpߧ'x c"=====^ם:bQ슗Ζ_^5pj+0񖘉 gO;' |?<1j٪M{{竞f M۾ۮ^__ߝZX;Õ7g7Ob?>~问oN7rn /Mͨ_xb›y_SsCz÷yӞ7oo=___#Z__8at>ЧoC} }y8JxXއ}Gu{$yΉAĻ7[D=#<,=%?xk/}b,{vzs{3ay-$F>IOWYo=Mzkaa>7 %[:# Q#? 0f}}5+6{a¨]jOj{>f w՛4{^婗cV^#O\{duZ|agܵ?{?t5Ь9|z~i(}wuv̝5~Zj_bC<=GcnՑ7qˉ3{^CX$NI IDATO?[|g_L5{K(:SV'jjUmj=θfÚ8GumOq&+=L?fTYKqϥM/ 6_@8zy7V/#xߋ~x&5Nqկ<sjtR=Ǽ)''t~}P&yV/x=MW~=z SjlW=;#+NP'y>Is]6.'69<)<46k}ӫYO'ۗhp[N9)+\SȯVylԀNʞOִ88=_i-ŢYc֝SrŠz^xq9[=Uwb#=Y90-GgV|Yc,] Ͼ)nYZk~3sۏ:ժ~V|bÉÏ%/Gh'#GG60am/q08<|ymg#u;\}~ <}tmO`O`OpyuSՍޜ)X7/ݐiϼqO`O`O`O`O`O%=~7qshJ[P:WNuКdk"tRQgWzp+f=wTp:R/l;l>b3~Θs.Vğ9au?80kW!9_|և˞^^ݧ!ܷ`Ą>5(UN~hw7OugGj T/ԩőb˛1`W6B&ۥ7/-f`/9y>c3wGdbnR(&LXpZ+N5O>qc]L_x O?vҞ ~ۜidSlb|z?? o~lso?}ӞK{-|")yϑo{rO`[~-Q-A|⠾ W~ wW򴧾V}꛽z?%{fih{7j7;|rE?V}'79g~T WlهZQqOYe}o3}g=۟=x p_MTAS1RQn{{.WF]0x5C>5(W^'l.5X6kHX;gʼnYiEdw rC&ukWl9c3f->y5I ~ފkabc0VF[_٧8o+%W_N}xaeë;;\+?치$=>1㳩5f9?_W={w1_}mc \3^yss ]7b|׋4[/,z/ʮ5lKl9cd{x+=ȼG_pݫ~-[p:8(tT !yGLS/Ÿ_.}8".,pͼh`; f[ʙKq3xS?sZGيgWO_/O{Wƅ?U|q0Ϝ'al`ëܪ afT]άQ=Nz}K7;-'}Wը9ŋm/.rbf??\bazd|֢7jCjVpyxu-oS>+7Ώ'}z};s儹N=s6C^kڏdg)al۞L`?v'ŭIx7ۋ,rN39{ɭ^=E"ݛt/ڋᄘTr&7Y9y7_aꩧ'@_$)po駾W,uU~\{ѫ%.cf2'B8rٛCn{׿Y[a}dj+f}ɱ]po\}{&.K{WkDbl,Q̬gtPsNKGv}Mshnt$kr2׹}W~ʩ8{bLK:3~\|׫\1>_=Ybۇ82 OfK_p3jxSooyO&jgO`O& L^m#M&ЛMr'fLz3}Ư6sqanKG8a;­ُ05gK/_䦽_k|7M߳`&F~97s{Suys.~?{Z<{75P|Vڒ>,Ef\sziO`ؿs:w"o+>{l:ߴmyO`O`O`O`O`O`O8crŦKI(>xqxtdw7>g~bqaL}ϗ\/q:UM'p Lk <yz ؟e_ Ǿ)V̌˾ _!b6_Oy僿i>9.kn43<5=aWdaa?@lK~Dy\qp,4pҧ>|bG3=LX98 W. }7l駞X嗇À +7rŢMV^7COm3}bWzi!{m^O׹wwP?Ŋ|XgJ[\8aC?WeyjaV[%7XXk~5fs3yÜ}Ɂ+6,.nf|UmkrfkN3^v&y&=s>>ۇ:8[ x8/rQ/G؍WrOsζl}O`O`O`O`O`O1."&>ߤMG:̠σ >acg{\D|1a+:jŁWtkW![ГDVG_<60՝Xɝlr)7] gs{x8^/9LuY!"ݵ뺈#}ՀNK`^}rTl׈]X}/?.ZQ1C=#o}0|S-z=SU;7hR]bk-/v}O~#nʟ5fb9YmbfL }%OoaԏV61f1p$Q\;Gp{VNna?M%y&KbG5<1W:[5S=ٲr~ c&ҫUNSzgC'o|bNy$OL6z~ȫiv桼5>mss+8Y)\b6 8;/vG/lXW{{{{{{{L`ҺM p'ML>8&W_to~Moz7oA|3ߧR5rNXoĮgzg8\lc՞~ --^=֜vEv{SawXaŋ]3oO] ͵$#XU\|H.6ų׹?Nn/|L=y;jv/[Ͻ|||O.';DX{{{{{{{{{{{/ n[Z맞V^k^}q.8͟6OVkwƅ9؎k}mTz_{y[b^?NnOr];\>{a8_søk~m'Ni[sxʶ}o>9MߔZ߆ZGuO%:KV j+v=k'DhuoO`O`O`O`O`O uX_н ;н~s|u}J5q___51V./_Rlb+\e7D7\]xFqk=S'^ʍMO*>k&CbԌǖǻ6bg=:g=\9s0 oMS^zw`gÖ s~}#o8[XtϱُD=ԓQn̓;[ElsǶ汩YzfWߊQ2\V,>i|D'g׷٣rӻdfW_5 c^#6z/&|8dUf?bPr!dܚvan~.ۛ|}͹հ~C7b:͆G Y7$яzU?ʟS._rjkOń=O׸ <Np hBXRtՖ/p6xM`ދ8d)=Ic|p@)=AA:wG^_:0N{У__[C\6XF~ߕ&y~z pDn5lٵpVσcˏV]\uy{ӵPȩ)Ϊߵ|VXqNO50? OX{:@/88lx=oaw}gׇC{dOO^lկx5psSK'ِiS#9lʟ|DbNʽfO|tk^0`SjFa7φԶQ-v}مΗg7sd>fsc?u0{{{{{{{{{{/ 7Ä||63l:!NOshQ~)Q/pAEmf ~:<9QK>ףV=íSЃq?}GgOz &ִg>1k(Z-yCz\ $|~1U+An/F+|1V‹Ǖ>q17eަ}pZ8f?ʩnqX6rw9WݪgXv'gܞ?ΪFzQ̴>›q>cn#߯<[ <}roO`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O`O؟v]L`6VO- 潆O):d&>]OJ_P~G10St_b+S|>1,&W_w?\Nq'>=Y|0ÞYz} E0ۇ}Y).BzSF}2b’GQ{^3Wk.Gbԟxua/|䇁]qbY>֛>)zfӾۏ0ůqlV9S꡹rL쩘d WZu6q5تGrُΧZ9\^+NQ q+>)C1=l=;g'^\nut7{>%pjza K?ߑ w{W>P=z;mdxjbW\޶ ]Nsc (&ЛތtotzPNqd6ī7qS_0~V S X:*oew03^l8^ S9;\oVhrيcF{aC^6uP&VoH&\d/ rXuH$stK&>t98[1I-vr93s/Llk^,.>m==9'O=఺vh ʣׇ+k.lQ<{Ό#9LyGߴ'\M`?Wu5^x C/SN}B oK8THxt=?eqCOd~fOXsbzq0 N}٧Q?jȵz~= Yi`4iQd='ά~x1O/fRx՞5k/@w-a̹;|Sff36t-՘u֞'{k/\zn-׿@qR.3>sEVQNyqV%v抭߲k =賆⋵f kߚ;<̫f~GN_lMy~Ϟf|2ZP>9ߤ I5‹Wlxa[ xO7x]7xO`@;$du"gcaIvDjO.FOa[z>f}홏a2K|tM ~ɸ4*{?Ĭ+Vc} /G1l81mSgDk/.wLlrZܬ=s5fqĝv%8򪳟0o-{s$ɓ˛qpvʶ'Δa5fR'?dT6's?㬟sU/:׸f%⛘S//olӿ=w wn5 [k < ^:p!4OqŰݛ9)>(>OIz0|Oؗ+.\1kgO®oxXՔ6 W%Šdf#Z0WY_͜>\ǵz/ȭ!wړflO=ԩחeg-[=29|FԳH+V=Hj?{s>p\[ϑէOWjlr]>I5mOpŸo0S¬. DOggoVC/n3ɰ83]'ڣ>͞`N0&\Gz)Nbʅ|T{>ĨQ=ȷz}''&۬\;I'e7Ğ|2=iOÛg,p 7#^>SӬ(?^z>igoOtK1x瓣^fF7],;{4z rԚ{eϷ֟XI/.^?\ԧr̩z!W]δOszx}^b*b\jsڅ-V>{ds3<٦?N0eyn`+'[g.|'aכḶmx!L`ؿaO`O`O`O`O`O`O`O`O`O99o~WXOSam}VyL{\fמԲKF>Ga~v՘~x틽4O7[>7>I/. Q}{Tk6N꩸Hͨ8zQخqͥW_/|~#[~A.F4,6P}y>'jW,=Lᨗ_1Ś}XGapULngWٲOq5mFF:)gO(y tp9FA7k3Gl4e9f]nsK׫ܻbb-6I=W %Oj?pd+~ƭ:gLg]L`7ƞ ~ QuMf6yE:bْqP1 XOv'|rag?-|5yH2cgQܑM}Uˡ;Le#U /:umgwPl@= =g,Y֯O{9qKqrbP6y0:' Er͸W󳽋ՙSOknϚzBtsd Tfϟpp"}9Rm3v7Vd<fCf=ɸ0g>hIzSho˧9=-VN̹Oóp&xX=So쳖>W8|΅?/ܰs<{<^kUWŭ5Ze☛:MZr?.Fn==^KXnfgTK̃>/`K|ױ~f |lVGG?zW}|Olnk凧Sn13.[xMySr{w=J5'o5''''''''''bO;O i>ʞm']\ً[~>_P~z v} r+J}G0} "j~XufoAbgrZŜ൸~|ɡӾǬjJY_!f5p_mzI9gQn3Ӈof=573Wgkl@,[w&v~'Xe>qdvͩR=P }Vc+^ܬg$^^8;h#;fϣS,[gܩg?W̛>%z$=ώgvq|iG6>T姷vcVU˞.U]d=V ZJC+/:ckM{Ol3ħ|h'=\:^Wqqg; fLLۑ\\<~\#8٬Y'{^;ǴcCaͺO?7ߪO5Flϔ-=_v::6+~Nv?PY}^x3nqpN(.8^W̉\|XۜٹY;{-=ګ/Y1/nߞN`?wf75?ߌwXAD|Gr8|aD^Ng4{^O:ãS;r??оgf7 ;pd=aʯV1,V\喣'ۛo~^[M]3"$:r&_cUz_o 8g'y.կ6[;^]9:kXl^rf>a-*6hN{=P}*始:`6V 1٪ьiV.fRl^bpqk,]7}8v5Z3nΖ]^{LW-vZSH :\9߮S5[({S\Z˛=/{'Ƭ^?d8m%oZaG0'Δe?l6ZzdT'pxnq7ڞ<, fLsŮ\}>򟳩i98..QOV:t?W^?{ξf\zh]{q+jOǯÜ?lub.QRf?yj^1qf8g؎g~}mG|qgn m t\V r=>ZӖ|>?kŬ}q懿*ªO^\5?{q/OG \lS>JMpMKdz|F+Zsʹ).Zu_Ѽ֞[yqzj~~L/m]?S5n'w}b%G) OG|L(v bʻƞ jސaPCp LT?bo |]XUV*rןgmz5} ltuf4Qͺ#WZVT}DXU$ד8tv_A!p?l&^}C}^ _=oFlgaʱߨ|fը^ix8jsOsL] {}l8u&f%1ffglG{gv>28ՙгΤj~Ž+???{=(m*GLT>>I-s=Kf%lUͯvq0ecoe3>}^Ga="qͭq<.˝l|f#r7xRxIUظ{{{{{{{{{{{/ \zM:|cmÍF_|v2i9hqpbwa:LppSO=ĄeUCL ^}+.ݚNjÂML36s+8bOwrzjnuٜ:L*:<яZLoN̓[~5Gq-V?s͍ rbϗ}퇽é؃zz3~|i3W~&+0w۴inljQu3'v՗$W%. '^f CN~:'׃^6^}UC>`{狳eo=W Gq\7phtrԛ鞇lųzQ Ukv2{Fz\~ՏOl٫y =x}䣟Vo'pw9͍''''''''''MhF~n#{a;1:0Ćr(o)Gowt1cUov8o9k{9C6tQlgd8JW3&֜um W샜ryM-lkK\#Jk?jr"#7gf?|-utUKxNY|=-^9[gbϼ|8|94k9p`XZS_ՠO/6k%7 < '5ٍ''''''''''@o;{%o;8+'&J+͛MY <ū/C1k_u>ɑ|k^gX=ϼդwh4Wz⪃GjT Pw>V3ΆO>ylk}sTpOfo~KoyIo?bͤyshΦx^/P<4S/=\z-oל,μ>'}5' VY0Q_4{J3o[֬W=6j8]#6{gj6bYC,:^`t1ۤrVs|TSxq1c\-F7cygy՚v{>'ߤߙ&bˆՖM[}ǧ\K10/.FlEsh{&{ObILuc 'AvQ O~xGXG'GoÛbO>!8cgs rV}͟z9F#{?8|S矟|_ O|欱Ifq'<Ǔ']=========GzQ+upGNo೯pz#ȆϦqD_N6>-d_. TurPs+ą_;bG鈟ܷ>eu\Z'_JV\ݙO6L`]ΥfW#ġ:7MKu8K_q2{o|U.Uy1YM?G_ER,,>]b#UOY|).\1r-]N=j|zYI_^<듧.Wt-tK9՟X乗bZQ2>QqCϡ/\zy*v'j6i3Y_=9GOշcىX1kCo沋c_YO̦=ww^t&)CuNŠO m=`SØԫV8Ij4͈>k+MҋoW]K1-/̲^?Ӟ|*Μ꣋[ͤ8U0ׁ }YA_X'ggaX3~fyٖUr8 CP$0 IP@P A,@EKBR"QERE9yNϯsvzkwgso&C{%|.XϹ6X9Ҏ،1WR{O1O[[~83Oq\]i{;6~U\ko~ IDAT2KoR''"}y=LuQ>9v@;(ٗ|ѷgbsbĂ3sڕ%jjY{D2{jco?<:ZI#O\};#>g9sdx.777uRsY;r ֵqbD6ci3~kC|dm}=f vvq+kH|c椽SK|lG5 c>vb'X>1OV=u1x!s896}J{en[ؖO{ vϹ|qع^ԋو'sF s2!->JqSmsu ?9m[^5,vڰ  (b(b(6oӚ Gp܍/u 7@DP?uo s֡N uq&rq=暈ǀIJe;0|ؽ˞Xe׀p-A|'Χvt6DA1&{>>Z2\`&j:97ϹCr./1stM Ük?a]1~أHqF~ؑr$. ?>|ukscc/Jpe}jهk##f4a9HDu|%1 1~fb`wXgwkz1P @1P @1P nj.tp!ź8w xb @ƈM|͜C>gN >HTĵ5AZ;93ۯHlFcZ(G6 _mm!C:OyYߵI0G?=$G HKyXpuX.jZϼ]ns>伣+y59v_tJzxkZ+ck֖g q˻O5/{|CsZ\7͑1gmcB鷆6d.^-Xl ve!W̭+5evHmZ55N_So=kÜ%>9]7s՟2a&:s#ۜ<=ɳגx Lו1W}˸̵F?:\AXu.1ɥO7vtn la7׎.xOy謧7xd9\O{>5a7Zة_/1'  izα 9Ġ6s{ ^_M˼$'г\`sK}ڜr6q6!1dNs\'L6ͼEH1/sZC;\7q>^1|'}%V93Q $alV1P @1P @1P i8ᢜ qvmJ/s|.  ޜ9)Fn`Ӌs1IJmY1Jb؈<9Nq=HcƋGk'&J#V#c̛띜xtjj듣ݺ<^?l#x| l9"9xb\y'&S{#=1mט٧|-u8lΕ '&ؓ9k%8{kǟkg.^Ǿ0X08!1Lę/#'mDma>ד.CVflbq{x7ޙ;zڵ1Ggvt4n3_XrS_ǧecVb'7*-Y $G^$ja@1P @1P @1.Y{YgMl`rw67װ!|Bލ:|شY)6s661`FfC+En5Y'em?ɣ^^v'uks:7MIϙT5Σ}o\{`YϜXs{Uka/ W0r`'\tGdq #ϻ9'9퉹2ƁMdޫk|JwGGSSeN-٧=F瘹~xUqgcgO?6ol 8ZeгcMr#q%0Prb(b(b`_29{B9lL^;:wi86+I}Fs{f.Å8ȬoJqi{69ז\6cܜ~ҞsubR^g=vѹl$i\;׾t}F6 'v!{=iE׆ ב~lmmԏ81bb٧R[ƃ]Leƪ[߹R;2֏4&mtS&>p[,ZsvAyJb|cFkү4/"_lln2}7Sn2Pna@1P @1P b x;_Kpx|EGM݌1OKLu%ab_z0?G6GG|zbgO,ܴOlt9%t8똌)Gb'mY;~|9_Cl;}doy.ڐb)yYgš6:[:>uQa؃z]8/bНSm=A7/ Y3{F\א|Sþs$+N#ssn}z"^?:9^ć$6bMڜsHGkCR h|kcz#m2~Y_y0aׇ9zowPŷCXƧ-c|tqEJ;@mQ @1P @1P .Ĺpp<>3 v|nhlp!$GXt.џ ڐ ͅg톇9n!Wn`9ܜHlю siW3~n ]v`%wĊTO'q97r;},јuQcM\k .8qxFyC d.'œZI?`!]6֯qZ8AMq+< {򧞼oZc~<yڐکhgG.yf?Y ^y{D3w.rMA!?׭M;sŁΑ#&~++ 8ġ'6>f1Q GUpb(b(b# ^Ӟ"l0p tsLq&@b }e(I >uuI>>{Qמ?dnG7G+0>}itl7RCkҺrX86ⴛOEfݨ'es}=ڍm!2y1Zڌ{9v+gHׂ!rz̵ugN[#:7zH7ƳY9:f۷uCOG2$8{n)p!.xK5zڌQgHr ֚gh9| {u9\}9?zO|o-XFcC|~'~ƉI ms09vs#zb` fb(b(bf x.Yp^'n I[ƪ_4ic[OiS.J~ܵ.[&fQ~Ϸ6g.rXYkfFksBέeξlOb-fv ogK~`[9BW٫y/gXz;/j~(b(b(npSy 8 WjO.>Eg0-M_=|8-n;O3y;uml--s<Ҧ56~mKc}$\8Hkr\bg9ǃAbqEΚ-c5>$y-HOڑy9Қڌa6C C1pnS'z9or?an~e|]y=,lُƛ&qV7kz7WVڗvH[ܡ&_N<['Ⱦճ8W75c/-s:Z;uYw&䙫zE~u|bd$E#Q[c6[e@1P @1P >co|Slz ?|عg|ḵId.7_ gC 7*6繹N;>spڭ?Jk&9zƏX4F'ju;3׸VT'9#k3FlI/}IĤ?[&qšw-ě+6:)Ylسs֨oM0sٚe]tkAg=s8X ]ͷw9(&q`F'?csF}l#)ƶHjLm`Ӟc;m\!60^;2{G >gs19g}Α԰Nkwֳb.1= "smiߌ.#_FַL^[a6Z@1P @1P cm7>/¹g3Ɇ n"㦃H\IXJ2O}|>øVо:[YѮŦ\eo8Jb8ߊ#qRϺH7 ѵaJrGu[vFv$6Wa-c0W7XbzX'm3צ49H9{.s%цLF~$Gq^Xbd=ZZZyxJօYy檛l9ڭuPOI~`i7 ~i훝'1֭nD*c`탷Zq1P @1P @1P @1P @1P @1;fb(b(b`7]~ᵻ1޻rHwٓmϝw{8\bMx/8"s%䉁;9q ߯μn)pNH^6{`/1#Ɂa}eķOc[|4' X|z|~[bF$+}kT|d-CM=h g&kq==7(s=ڬ\0f/ks95F`YcX+qoxtyNLǀ̷'M_OZ#1$?<#ղqyf?<9srgގ1M'?&9Xd~ ZNrr>Nb,䱦}fLlƉa)Ci΢xf5fȫݮT@1P @1P @1P Cvsf r. Gd##\60܍c*+{؏9&y9B6D=/93 sbͱ8{6|ٯ=>k1#l b;ɚւ;|έC6$qNM 5 };НV>.x|rO)NLacOg?Yf8{yIdkW>jd,16;=xYH66kA+Nstoe[8\?1uPC1oAݪݼE|uvZsDxZi`%1d{I}Rm]j{UG=smJ"\Ob.>b39c#[ُmvdb\I\b`8jj (b(b(=y&Jaφ H/a#n2@ 8bG1nd5]$s3Ad37N9ybZ[1oLi,0'Xj0o1iGgd ڨsOcnN\|gevÞrɷ:9z9Wꙇ<6X'ϗCl)w؃ǃf z]I~/ڙۃ6a90Ԣ59o&i]:|{0ŵscJlzvqcx2y1Fs'&>9usm,X^g!o7 ѿrӃ٫1rn8gԕs󦀳{'fV1ַFU\m=̚":Q6}lkʱR{[%O&]w+͜qU'&;9Ŵo{AbCj#71vǏv8XmYr,bI}kmG.C|a#CǑvr=x <1:m `|UG]sƒ*|gx<ˇ=;Wv|5'R}tĐόA>1ȜHdN?(qnbЗ iyHdĢk;CO8n1N6N+=3GhG>a2%զݹ{sc\y'Ξ2|}3= =|\GHSH?97a,X<9MzuCڗ>r!ڙk9uK=̄3zqfn fXlߚJI|0V;׾r;;rhm|͋0Parb(b(b`0'8 #`W:m2I?^Ae>>ÆLȡ6y |IpvxKMLuX 6rfv{jsS#ebz;bg{Ӹ3rL;6{&G=3}!yy籅Ed/f\r9<󱍟!]gkN ];1YHk#}$A95m->G09 K9=;zq\\sSu9>9謿7f=cЩ)ѣX$,v3b'+V1P @1P @1P {Ho[œ /3ombmֹW֔=n9MܝZkQƧT'lQ6vG{2srI5$",ϛrQl˜p;ɹSffu1aۉ_`۩ܝn'2k߶v0vzmU1@ڰRb(b(b8.B=/]!n]lHz!LӶfr>50%G3w.\%q9J|\3w[F'ڕُ6dWWVf=tʬ:1Xg3z[|}Jޓb*{1ikrL=Q\&G8_$[kmF\,nbk70VQ9깤O{.[{o](AWo#kz<'m{srUko1P{|T7@1P @1P @1K p~I'M|||E1ب`#0wMGȯR<$_Ø蹉bvp-ƉI_=q&\+~5O|§+KIG_偭ͧ|c0M|jL{{&p$O]|?whƁ.RZ2Z8j8'\'>rɜ#k|2i|iO\3'X♛Zև09'$' ?kZ>t׋N>sF,8Gw5{Nno\=ov!e`񩛟WsV!M}bCn;_!3wcg.&sяOV/Vӆf}Cij60UO1>vVg]j~w-b(b(b# paС6@88r3⬳ZXb 6QPwK#X6 ,!-9F?gm:;pCS?k$>8D2Cg0a3#ƍ=llc6vA2?ڐu^ScqBp\Xs^_=&HO`M5`o 3\9u\^Rǚm<8ia#]R>zJqSjϺȶ6g 6F_ Wxe8 |^<9!Zb+8Ε}g=Z[819sm8'9,yHbm}tn,5Ud(~R:6s-sٟOI6Llv[C6?ҵk7~LcKa+Tn1P @1P @1P ܌Ft/Խ0gØv8bMbsonkwҾ҆XoXH{`CE,AMs3xȹpo <v\ Uwh :bl+Eg܈#sXY޳70%朜[9sC:#c%6k\CL6X9W_bCgz7g tϓ%lgZmγ퇚ج{,Xm|\71̵eg>̳חR&gͱ\#ɷi\ bO &80G)&s(fb1bG2\}Z|tjeOL0;=9A9>׫y{2pԵG g]|8읚 | s-ڱk=SU7>ް:V ӎtԞښ){Է> = v}=mag0G.=1X{6g0v`>t}ĉa3xH97ޑg}W??Am;o1E kgWr# &-s!s=Soc=,&q $ú{R[bik!^>fl/R{֚r1[+5};RL1ڹm_D./݋IҞz2/F19oZ˹bK=cR+e:ouq+[|"gC1*sW]Lk׮a9Y\[b` ԆVb(b(bw "|tIk?>.bݯ@ m&)ݼD W<lOr9abku\_Z\ Cvu69}ڌepÜ䴘AO|ZpE$=Mk20ھ3_8Ĥn\OY$Xf[_xq^ Ytsf 6N=HM/mCۺ3͎muԢWH#9.soT|1j~3lUb_SU3@1P @1P v^zdcСCkN,č\y_|cgNHc)mfPM/#~cXCs(7s8r+Ց˜Hsn7۫r;wS<.vre91OH&)'Sr_b3oen_>0ae8@p1=E1!Z?/27ތEfseơL;qbgKҋdMv {Gx=Xc|Yg5oWK_kG X1P @1P 1e}:7|Ç-iVY@1P @1P ;@m ymo{iW?эn4]= x+<1Ó] @1P @1P 3 pnw+]J&WpwCЁ7GO}S7l*NHGӯ 1̹91`xW-vXd;2F8`wN,68b6c>Y`y]ĶNz%'mEon[9Afqra3Ck<88% u{0yA lpbcX]2~C1z|z f5 >qmmimcK{[G1)Y}%2pv*Egqg.Ȯ~Og5~/}K̹e/t1P @1P 93ct1ϝzT?=h<ݴ=mz]x+\aak^|ązn6{^^dH3k\V'\za}n+^E|Ƥuh uK m+%zcOpd/stcƷu3Zڑ8Jbk1gfuẒ6sC%~ۃ'Gƥn<)u;76V's]bYXm`cvб뛳%V3XY!s13Xtq8H rcb:~mHb=!cg>liM|*X~<1:2O9\=>{nԥ =aHs8p:2 IDATbʬb[9mMl5b6w5> z׻&[:yk_;U .Ke,b(b`1/|ax[:5}[ݪ/x7Wzz vsy927z1bylvebtsgn?ipbNtI9lx[zJsƁ 7ʴCbbn>:X8ΑYǼy'bIbڲ_t7n\=':x̡w|\O# \Y ,F <{ !&g=ӧv1w1a}nth}{[hGq&ӻ`q:3/C7GLdAm0qKc3\n|~ϭ#\09ы+1^2u#2}õG=9ϵ'jġ õiv]|%60FjX>&(vڰiF o9}k%s lؿ=9Wb(b(y77a@/Bϋwu/حε'6ⰥJsdg'oԦ̜6CՕ٫?z$^~ϖbf6c*ɺi۩m}5Un8m"C,ilY8$qt7\sⵡ3ΑE[G\ sP[G.kosfu0=I]ٟ֓~פO{Oڏ>g?7uc>ސiCȍpbx3ss<#Zmi׎Cwy]g3geۏ\)GLˇ!!C&lk٪=q/Vb`'8٘D-b`8.˯~Smy1P @1P bZ˼>7}5ZR)@1P @1P >cg' կ~um|yn\BZs}k_|8wxe/b(yoo՟uY%w^9LO:$I^Ojm]k;꼛ݹXNc=u1IY]\>/`;9w5u`p`Wȯx@5t=Hu@F?i7?CL%892zӞp0ǹ|4xb<'s}˹1Jrs-ϩܵ/9Xtza3cЃ8cD5S#m[Li.sm)6x ڙkjO㘩+c>z?qm.|d,;b!#1,qGҏNƑ_Nx_:ÇO<G<6[53k?[ɧ\1],3Y Y~WVR;􋭍yb20?'FpJ}GkM|b+sk] qK7z j~7X-e?9OE\viN65b(bx߸-yj3 k|עmJ^>ysz|0\b60=/Mb3ᅾ\;ȍġc3Ngԉq=H7N1Wn|Ag:thC2(e+9ةE t6h9q`=[Yy):0ǹJaNgkw`scІ47RqdOr;6soع:䈺 S2o9!|S FDP.v{F氆ƂCn ~h zstQraΕƤLn#^v|ϼ]&מ$7'za/r̞N,=7>/cyagcG $'K^^ρ)A2~]Xy65cwđ#s1S>M q DN>\noTC|ϣHb+vjЃ}y)MoZE^jܻUpm0p'e"?kƳ_1͜62`%.Ѻj]|#õu=Mcsы^t/s3spk^wR?/ts3E^u/}//K^k^cȋ{/ڱ9Mnd/ssvkAA\Ǽ5OSn􈅴g.sז7T>7,륞b`-yX7n7d>ۢyw渦>-:<~K]R`:~͵5'sp[vN\`#l1'gڑ9\촫o$3lm,XI||}^KcNdLՌ;q|ywqemqC.sٮ'?= v@^Aw] ]{>:pRvڰaB nȯ#s_җ͏E}+_6opgqycg{j!x=뇵Խ;7+-U |#;Njx+ӷmBʿMu 7/3gx:^;GlFkۨv3ce=Nd~nzbgNs+5YF-ƣᖷp^wab3;m\ss\2:x|`Ԟ[W ^桷[zكVsb?ظֽmo;F7ʐI稄MLۋomm|;'c#{G5k(O[̜_)j~,]c*Wg1pgTo~?ҕv'H/{s1e?6 96/S9 S&CdžTf:c7c5v^k>O sx׈+\ 7w#8/wot}:oϡ7ϻ_sd^bWyLJG>Y ׸5>Zַu-oy}o6@1P @1P {_k_k^u`@1P @1P 'j~?+ߕ}xZ^. '/nstcX @1P @1mnvMMvi? s`FRTb(b(}@mu[};-5yr]lغk^ @1P @1O7u׽nx_}*N$"p;(b(b(@m麟u{67pxя~tx>^N{w _c|u]kR @1P @18׹5u8|͛|ԣ59Z1P @1.T{ڰߋgz*b(b(b(b(b8p \ @1P @1P @1P @1P @1P Aj~j(b(b(b(b(b1P׊b(b(b(b(b( aOJT @1P @1P @1P @1P @1p wk@1P @1P @1P @1P @1P {b`Wx0?~%/9p`Wkt_uC.{߹0+_WW>pի^uo?\XW |ӟ> +++E/z׾/~+^)0ُO8 \g}cy{ỿv'sЕ <;\BZH;K_Mo0[;߆۾mM=Fί??|;}sۿۇ[e7yxk_;a7pdtk/=Y 8z?w#pg'n57կo}[k+_xŵyO#?я9y]j ^ o^׭79*5~gm4.s ]ߵ0*y{\ezk3|f?8E.2\:Y:5/v-ȗH^\W~G#:}/y2~|p _H@G  &f7[2=&Vu 3x?Ûz,,5\s=+]JXzexk^3a:ss\b:j0\R}߆!=Q.0K׾-oyˬ_O9]yw$=^{ѵ\ _8 |XqeSԁX,r:yx?+?+{0;o<_mo2^p|4=|3WN=7g+Eawʸ0xuC+RG9/V~'ruFxwP[93++&+MqeE/zr.2nun8??Ons7}%C<\s~뷺K7 V|9WGq4nou=G7E|ry W'ĺ FB M힧F+~+Y3-oyonxXy ^0K7~7f1p'qС`/F1WgCw\{c d6K;Ƌ.;0<7ovo=}:bPhӏfvmukM灻;ݹX4qkLz1/?S??1p{ a|s]]d&t^0u w:e.v࠹ uw/Y>^ gGmk:z׻p׻u]җt?nᑏ|whw4#A߲NqW|oonwׁMn^gw]ßɟLKO]aw;O>¸0.kcGJ;xsz߁\/ZO:OOl+y])^p]'1xWj瓠hmq?Cu US?Sse/3-+]NFڻfbJ!EŦQ?+FL琻H0?;$Eqi 7Vg;awchӻ˗;v(S̃\&ŧx2^Nw r{k;n{S=|/FVƏtN??Hׁй#;Njz'q3ÝK>aҞO~/r?|>X{tOltx80_);;ݻ#m|sc{w+fOGɘqce|y cZMq#ee|`W9N WR+:)26W~e&;@a?~ĦAS2qٻ˘',yݞ§8q)^6o9o$q9y<3޸4j_Or]6n.O>|oY3I뉃8sgm_> Dla?yF>^{^^O`ie+/w)(k 6RGL~P59ⶻa=m:?PmsJ1oX>: gl""B\U9 IO-6;Lj 97ǻDx=>JlsqWy{Nwwdz17&W16lվaeOM<=_)js<t:nssum6u+iG/1WFʣNouw0aWu91lHXglc˛"`7;jB> {o!GtTA4"qm'/ވ {noϽ5t/xm:|NOڣ 96u!. g|iop~6yyF7cQlwÞ}&Oj_Sk-_WEf8Q  |ggkc1nP~c%3@('|ӯxw~&j/We|M OQEm/丵+?̌Cw7ϻs>z9?aFI9;E7-M2?x櫐=ڐ͝MVf _1votN_=^Cq|h+!;Χb}]=ml旾 nT* IDATH[}7[q=5{݌oLmwks𺐯al? uAs]W}7 וՖ;u=ea6g)À/(N`7a^h2޸;:@ˍ7GZwLa]{ƻQ;k-;dډY,y΋M߉})M_g *2Cn맺)|/xwߓGSw3v;M%Go 5C09{Ӓԭ:?2wDz~GU7Hm}|nFj2{aOg/l;π?^z7v=wYV_usowb{w*Q|BDAp]Qh"/-$&FE$ (qA-!*K\pw1%/7?`~9}c|{fk|j*'92Kr+'dZ@lwFt/+O+oX_V+~~Shځzw~oTn2ؒe:e˷qbcu4t9Aہ؟ 2|_ KL(% MKzVz&'އ=fLo߽>ȤY _OW?@&r:Yr"^}0Ϸm_uoN,ٿj^vmnBM%VUK:s+WɄaå|3Qm|z]评ھk}1u]|ӗ>I~'gd>~XOVG h99U?(ߴT M?@&N%x `mц7-0jlkCT$8Rze.TO oUb[ \s5ݤ >o6tSUG'~ɽ?v`MKdžǰOzg",g]k]ܯNJC.L[ën{Ru.w,[' `۽@5۸q[ o%HYm\g1PKmuX|mrb}σA???V7^T[zځu+i׿~q駏Qu4gS9u'Z'SJNs 8S -UGlW~* i&Ww芴V&^<*obL:}I/]H?WuJH`( `? :m[rKhr?cV~.%f_s9ݛ'@GOpTe]Q?acs~Oo+N[\ve_W b7|K.zZxƽ֊:Z~ۥu]wݢM_|qwB<˫+W?%11:kCh!QҗSMs~vMRk>Tmʺ?.^Xw8kjf؇s=+4=<̵ض۪/PAYwڇ_۶IyKa,Sgi.r?ZaݯõLmEW<.s.]6AykڊJ^>Vz|3| _~ i&.E?ifysmEgsd%& `kpjܞmʿ-i_"=s^nꫯ)1'kޯ=n{Oo3׺i}Ͼ~Z~mX<^oH.ZzWғ8=hm7qm*c+$li'(eTo4S[Y+ٕ9z _oΗE&[d؛L bcIÞ',,.n~}~z=M{GM޹҇u[Ȼ맿A밿}HȄ^xaW`ñau0w,.˝ 99Kϝg<DN[AW?$-x9٪ wwl1Uc%یʺ?Vzk_CЮma GIw __ɘD%su8&7 ,*wm8X'?Y-KH',ߩ=F3 :/jQg dbҟ4|[V kˉ D)uߏa'og)u[&h'sF9엿p6q.U~z]c߱:czgϝ+u"Kzg2,'"i)S] <>wcK&ČYr2n\/)lRiZu)y{.@9yd{ׯl{k~B<9a~@yx,:V?rG9v8Y'i:ScnʘE˒rKM7ݴ6nf8uWWiX'iۙ+GpIźb>T ˓-'Gc;zMW=7ҿdWvQ~ߥ['Zz0ھݚn|n丗{?Fm.QLrrZiEMmرӂkiW}[1.g=3~K.0eo=BiWG>K'?ki$=Rߖ岍52I;DZ/﮼vr&_W 9_H<M?+sSmO?}:QL[/iO{vx+.vyO [.sٓV/tm^ZS_xW|+;>?t9;ӟkҭ 0&[-@+jOG#nK[&@nS`&YIɋtι0cj-ɟ[6M^IK>]īv#S;ƷLzuqgsQTW2u Lqlijvy$cu阔K s8~b|Ӫ{O6be˺'>Q k^3vy{޲9;LۼMٕ߆|C :Hok Sԥ1}?<{4sɜ0W}k]zW%*ni4af_$-MKfm<.~0ӛ4 ;c6'{?߱ݽL=ev{Lo\hɺ7Ц%@RjJ{~}c1.w7ͫmد]C1'-կ~u=ӛ.d46s@c]x{ٕuHr6F(K^U}$ҪO䥰4뮘vپN.=vu;|rX:6$uߩ"lsr'Ǩv+F~{ dzUF{7x%']^s^W8Z;p:ߑ\n/v`'_W7~;3}K;0uViӏA*%^ ^uNox eL>P66n'j Gh$uDӠO~ϛF=uY*-zaU%ЖzWqLoco~ oX2ɳߒoxV'UG9#k2Cz~#=]'cKUU7Alwjے;+7.^9.s2_T\`˷\1'X ,Z+9ђ2_;vr?zr4.wLy~pI%YݦhAEIhrvC[EUs*?1A>_ -XvrhA6?/ډsWbEzzuO*=߃[eh ,~/2iX֠_1K-8|f\d $pCn n2-ܲhEh=r\L w۷aW}'۷^mE!nĮ{&޼RRF79e?w/iONݤ؆n&l1ځS֋e%IlEځILW7< Ȝp#78M]݆XsK/,-p'3 j3n;l&6ALxF郾׮K!iUmr, O @ @ $@ @ @S짊O @ @fU @ @ @`T1  @ @ @ 3* @ @L*&? @ @A@~TE @ @ @S'@ @ @3πH @ @ 0U@~ @ @ @`PI @ @ O @ @ `?"  @ @ @Tb @ @ @g@U$ @ @* `?UL~ @ @ 0 $@ @ @S짊O @ @fU @ @ @`T1  @ @ @ 3* @ @L*&? @ @A@~TE @ @ @S'@ @ @3πH @ @ 0U@~ @ @ @`PI @ @ O @ @ `?"  @ @ @Tb @ @ @g@U$ @ @* `?UL~ @ @ 0 $@ @ @S짊O @ @fU @ @ @`T1  @ @ @ 3* @ @L*&? @ @A@~TE @ @ @S'@ @ @3πH @*Pu2 ;IDAT @ 0U@~ @ @ @`PI @ @ O @ @ `?"  @ @ @Tb @ @ @g@U$ @ @* `?UL~ @ @ 0 $@ @ @S짊O @ @fU @ @ @`T1  @ @ @ 3* @ @L*&? @ @A@~TE @ @ @S'@ @ @3πH @ @ 0U@~ @ @ @`PI @ @ O @ @ `?"  @ @ @Tb @ @ @g@U$ @ @* `?UL~ @ @ 0 $@ @ @S짊O @ @fU @ @ @`T1  @ @ @ 3* @ @L*&? @ @A@~TE @ @ @S'@ @ @3πH @ @ 0U@~ @ @ @`PI @ @ O @ @ `?"  @ @ @Tb @ @ @g@U$ @ @* `?UL~ @ @ 0 $@ @ @S짊O @ @fU @ @ @`T1  @ @ @ 3* @ @L*&? @ @A@~TE @ @ @S'@ @ @3πH @ @ 0U@~ @ @ @`PI @ @ O @ @ `?"  @ @ @Tb @ @ @g@U$ @ @* `?UL~ @ @ 0 $@ @ @S짊O @ @fU @ @ @`T1  @ @ @ 3* @ @L*&? @ @A@~TE @ @ @S'@ @ @3πH @ @ 0U@~ @ @ @`PI @ @ O @ @ `?"  @ @ @Tb @ @ @g@U$ @ @* `?UL~ @ @ 0 $@ @ @S짊O @ @fU @ @ @`T1  @ @ @ 3* @ @L*&? @ @A@~TE @ @ @S'@ @ @3πH @ @ 0U@~ @ @ @`PI @ @ O @ @ DZc KIENDB`PyBDSF-1.10.1/doc/source/scripting.rst000066400000000000000000000046531420247104600174320ustar00rootroot00000000000000.. _scripting: **************** Scripting PyBDSF **************** Because PyBDSF is written in Python, it is straightforward to use PyBDSF non-interactively within Python scripts (for example, to automate source detection in a large number of images for which the optimal analysis parameters are known). To use PyBDSF in a Python script, import it by calling:: import bdsf inside your script. Processing may then be done using ``process_image()`` as follows:: img = bdsf.process_image(filename, ) where ``filename`` is the name of the image (in FITS or CASA format) or PyBDSF parameter save file and ```` is a comma-separated list of arguments defined as in the interactive environment (e.g., ``beam = (0.033, 0.033, 0.0), rms_map=False``). See :ref:`process_image` for details. .. note:: The filename of the input image is also stored in the parameter save file. If you wish to override this filename (e.g., to use the saved parameters on a different image), give the save file as the first parameter and then explicitly set the filename. For example: ``img = bdsf.process_image('image1_savefile.sav', filename='image2.fits')``. If the fit is successful, PyBDSF will return an Image object (in this example named ``img``) which contains the results of the fit (among many other things). When run in a Python script, it may be desirable to set ``output_all = True`` to write all output, including source lists, residual images, etc. to a directory named ``filename_pybdsf``. Optionally, the same tasks used in the interactive PyBDSF shell are available for examining the fit and writing out the source list, residual image, etc. These tasks are methods of the Image object returned by ``bdsf.process_image()`` and are described below. The input parameters to each of these tasks are the same as those available in the interactive shell (see the relevant task section for details). ``img.show_fit()`` This method shows a quick summary of the fit by plotting the input image with the islands and Gaussians found, along with the model and residual images. See :ref:`showfit` for details. ``img.export_image()`` Write an internally derived image (e.g., the model image) to a FITS file. See :ref:`export_image` for details. ``img.write_catalog()`` This method writes the Gaussian or source list to a file. See :ref:`write_catalog` for details. An example of using PyBDSF within a Python script is given in :ref:`script_example`. PyBDSF-1.10.1/doc/source/show_fit.rst000066400000000000000000000112221420247104600172400ustar00rootroot00000000000000.. _showfit: ************************************************** ``show_fit``: visualizing the fit results ************************************************** PyBDSF includes a task named ``show_fit`` that allows the user to quickly check the results of the ``process_image`` task. Use ``inp show_fit`` to list the parameters: .. parsed-literal:: SHOW_FIT: Show results of fit. ================================================================================ :term:`broadcast` ............ False : Broadcast Gaussian and source IDs and coordinates to SAMP hub when a Gaussian is clicked? :term:`ch0_flagged` .......... False : Show the ch0 image with flagged Gaussians (if any) overplotted :term:`ch0_image` ............. True : Show the ch0 image. This is the image used for source detection :term:`ch0_islands` ........... True : Show the ch0 image with islands and Gaussians (if any) overplotted :term:`gmodel_image` .......... True : Show the Gaussian model image :term:`gresid_image` .......... True : Show the Gaussian residual image :term:`mean_image` ............ True : Show the background mean image :term:`pi_image` ............. False : Show the polarized intensity image :term:`psf_major` ............ False : Show the PSF major axis variation :term:`psf_minor` ............ False : Show the PSF minor axis variation :term:`psf_pa` ............... False : Show the PSF position angle variation :term:`rms_image` ............. True : Show the background rms image :term:`smodel_image` ......... False : Show the shapelet model image :term:`source_seds` .......... False : Plot the source SEDs and best-fit spectral indices (if image was processed with spectralindex_do = True). Sources may be chosen by ID with the 'c' key or, if ch0_islands = True, by picking a source with the mouse :term:`sresid_image` ......... False : Show the shapelet residual image Each of the parameters is described in detail below. .. glossary:: broadcast This parameter is a Boolean (default is ``False``) that determines whether the Gaussian and source IDs and coordinates are sent to a running SAMP Hub when a Gaussian is clicked on. Note that for the IDs to be useful, a catalog must have been sent to the SAMP hub previously using the ``write_catalog`` task (with ``outfile = 'SAMP'``). ch0_flagged This parameter is a Boolean (default is ``False``) that determines whether to plot the ch0 image (the image used for source detection) with any flagged Gaussians overplotted. ch0_image This parameter is a Boolean (default is ``True``) that determines whether to plot the ch0 image (the image used for source detection). ch0_islands This parameter is a Boolean (default is ``True``) that determines whether to plot the ch0 image (the image used for source detection) with islands and Gaussians overplotted. gmodel_image This parameter is a Boolean (default is ``True``) that determines whether to plot the Gaussian model image. gresid_image This parameter is a Boolean (default is ``True``) that determines whether to plot the Gaussian residual image. mean_image This parameter is a Boolean (default is ``True``) that determines whether to plot the background mean image. pi_image This parameter is a Boolean (default is ``False``) that determines whether to plot the polarized intensity image. psf_major This parameter is a Boolean (default is ``False``) that determines whether to plot the variation of the major axis of the PSF. psf_minor This parameter is a Boolean (default is ``False``) that determines whether to plot the variation of the minor axis of the PSF. psf_pa This parameter is a Boolean (default is ``False``) that determines whether to plot the variation of the position angle of the PSF. rms_image This parameter is a Boolean (default is ``True``) that determines whether to plot the background rms image. smodel_image This parameter is a Boolean (default is ``False``) that determines whether to plot the shapelet model image. source_seds This parameter is a Boolean (default is ``False``) that determines whether to plot the source SEDs and best-fit spectral indices. sresid_image This parameter is a Boolean (default is ``False``) that determines whether to plot the shapelet residual image. PyBDSF-1.10.1/doc/source/ug_basics.rst000066400000000000000000000272631420247104600173710ustar00rootroot00000000000000.. _basics: ************* PyBDSF Basics ************* PyBDSF has been designed to share many similarities with the CASA interactive environment (known as ``casapy`` [#f1]_ ), which is in turn based on AIPS. Therefore, the commands used in PyBDSF should be familiar to anyone who has used these software packages. Starting PyBDSF --------------- After installing (see :ref:`installing`) you can start PyBDSF by simply opening a terminal and typing:: $ pybdsf at the terminal prompt. The interactive environment will then load, and a welcome screen listing common commands and tasks will be shown. You will then be at the PyBDSF prompt, which looks like this:: BDSF [1]: Quitting PyBDSF --------------- To quit PyBDSF, type ``quit`` or enter ``CNTL-D`` at the prompt. Getting help ------------ PyBDSF has an extensive built-in help system. To get help on a command or task, type:: help For example, to get help on the ``process_image`` task, type:: help process_image To get help on a input parameter to a task, type:: help '' Note the quotes, which are necessary (since parameter names are strings). For example, to get help on the ``'rms_box'`` paramter, type:: help 'rms_box' Simply typing ``help`` will start the Python help system. Logging ------- Logging of all task output is done automatically to a log file. Logs for subsequent runs on the same image are appended to the end of the log file. The log for each run includes a listing of all the non-default and internally derived parameters, so that a run can be easily reproduced using only information in the log. .. _commands: Commands -------- As in CASA, PyBDSF uses a number of commands to list input parameters for tasks, to execute the tasks, etc. The PyBDSF commands are as follows: .. parsed-literal:: :term:`inp` task ............ : Set current task and list parameters :term:`go` .................. : Run the current task :term:`default` ............. : Set current task parameters to default values :term:`tput` ................ : Save parameter values :term:`tget` ................ : Load parameter values .. glossary:: inp This command sets the current task (e.g., ``inp process_image``) and lists the relevant parameters for that task. If entered without a task name, the parameters of the previously set task will be listed. .. note:: At startup, the current task is set to the ``process_image`` task. go This command executes the current task. default This command resets all parameters for a task to their default values. If a task name is given (e.g.,``default show_fit``), the parameters for that task are reset. If no task name is given, the parameters of the current task are reset. tput This command saves the processing parameters to a file. .. note:: After the successful completion of a task, the current parameters are saved to the file 'pybdsf.last'. A file name may be given (e.g., ``tput 'savefile.sav'``), in which case the parameters are saved to the file specified. If no file name is given, the parameters are saved to the file 'pybdsf.last'. The saved parameters can be loaded using the :term:`tget` command. tget This command loads the processing parameters from a parameter save file. A file name may be given (e.g., ``tget 'savefile.sav'``), in which case the parameters are loaded from the file specified. If no file name is given, the parameters are loaded from the file 'pybdsf.last' if it exists. Normally, the save file is created by the :term:`tput` command. Tasks ----- The following tasks are available in PyBDSF: .. parsed-literal:: :term:`process_image` ....... : Process an image: find sources, etc. :term:`show_fit` ............ : Show the results of a fit :term:`write_catalog` ....... : Write out list of sources to a file :term:`export_image` ........ : Write residual/model/rms/mean image to a file .. glossary:: process_image This task processes an image to find and measure sources. See :ref:`process_image` for details. show_fit This task shows the result of a fit. See :ref:`showfit` for details. write_catalog This task writes the source catalog. See :ref:`write_catalog` for details. export_image This task exports an internally derived image. See :ref:`export_image` for details. Hierarchy of an astronomical image ---------------------------------- The following figure shows the basic hierarchy of an image adopted by PyBDSF. Islands of emission are identified and decomposed into Gaussians. The Gaussians are then grouped into sources. .. figure:: pybdsf_manual_dia.png :scale: 100 % :figwidth: 75 % :align: center :alt: image hierarchy The hierarchy of an image. .. _quick_example: Quick-start example ------------------- Below is an example of using PyBDSF to find and measure sources in an image:: $ pybdsf PyBDSF version 1.1 ======================================================================== PyBDSF commands inp task ............ : Set current task and list parameters par = val ........... : Set a parameter (par = '' sets it to default) Autocomplete (with TAB) works for par and val go .................. : Run the current task default ............. : Set current task parameters to default values tput ................ : Save parameter values tget ................ : Load parameter values PyBDSF tasks process_image ....... : Process an image: find sources, etc. show_fit ............ : Show the results of a fit write_catalog ....... : Write out list of sources to a file export_image ........ : Write residual/model/rms/mean image to a file PyBDSF help help command/task ... : Get help on a command or task (e.g., help process_image) help 'par' .......... : Get help on a parameter (e.g., help 'rms_box') help changelog ...... : See list of recent changes ________________________________________________________________________ BDSF [1]: inp process_image --------> inp(process_image) PROCESS_IMAGE: Find and measure sources in an image. ================================================================================= filename ................. '': Input image file name advanced_opts ........ False : Show advanced options adaptive_rms_box ..... False : Use adaptive rms_box when determining rms and mean maps atrous_do ............ False : Decompose Gaussian residual image into multiple scales beam .................. None : FWHM of restoring beam. Specify as (maj, min, pos ang E of N) in degrees. E.g., beam = (0.06, 0.02, 13.3). None => get from header flagging_opts ........ False : Show options for Gaussian flagging frequency ............. None : Frequency in Hz of input image. E.g., frequency = 74e6. None => get from header. interactive .......... False : Use interactive mode mean_map .......... 'default': Background mean map: 'default' => calc whether to use or not, 'zero' => 0, 'const' => clipped mean, 'map' => use 2-D map multichan_opts ....... False : Show options for multi-channel images output_opts .......... False : Show output options polarisation_do ...... False : Find polarisation properties psf_vary_do .......... False : Calculate PSF variation across image rms_box ............... None : Box size, step size for rms/mean map calculation. Specify as (box, step) in pixels. E.g., rms_box = (40, 10) => box of 40x40 pixels, step of 10 pixels. None => calculate inside program rms_map ............... None : Background rms map: True => use 2-D rms map; False => use constant rms; None => calculate inside program shapelet_do .......... False : Decompose islands into shapelets spectralindex_do ..... False : Calculate spectral indices (for multi-channel image) thresh ................ None : Type of thresholding: None => calculate inside program, 'fdr' => use false detection rate algorithm, 'hard' => use sigma clipping thresh_isl ............. 3.0 : Threshold for the island boundary in number of sigma above the mean. Determines extent of island used for fitting thresh_pix ............. 5.0 : Source detection threshold: threshold for the island peak in number of sigma above the mean. If false detection rate thresholding is used, this value is ignored and thresh_pix is calculated inside the program BDSF [2]: filename = 'sb48.fits' BDSF [3]: go --------> go() --> Opened 'sb48.fits' Image size .............................. : (256, 256) pixels Number of channels ...................... : 1 Beam shape (major, minor, pos angle) .... : (0.002916, 0.002654, -173.36) degrees Frequency of averaged image ............. : 146.497 MHz Blank pixels in the image ............... : 0 (0.0%) Flux from sum of (non-blank) pixels ..... : 29.565 Jy Derived rms_box (box size, step size) ... : (61, 20) pixels --> Variation in rms image significant --> Using 2D map for background rms --> Variation in mean image significant --> Using 2D map for background mean Min/max values of background rms map .... : (0.05358, 0.25376) Jy/beam Min/max values of background mean map ... : (-0.03656, 0.06190) Jy/beam --> Expected 5-sigma-clipped false detection rate < fdr_ratio --> Using sigma-clipping thresholding Number of islands found ................. : 4 Fitting islands with Gaussians .......... : [====] 4/4 Total number of Gaussians fit to image .. : 12 Total flux in model ..................... : 27.336 Jy Number of sources formed from Gaussians : 6 BDSF [4]: show_fit --------> show_fit() The figure made by ``show_fit`` is shown in the figure below. In the plot window, one can zoom in, save the plot to a file, etc. The list of best-fit Gaussians found by PyBDSF may be written to a file for use in other programs as follows:: BDSF [5]: write_catalog --------> write_catalog() --> Wrote FITS file 'sb48.pybdsf.srl.fits' The output Gaussian or source list contains source positions, fluxes, etc. .. figure:: quick_example.png :scale: 50 % :figwidth: 75 % :align: center :alt: show_fit example output Output of ``show_fit``, showing the original image with and without sources, the model image, and the residual (original minus model) image. Boundaries of the islands of emission found by PyBDSF are shown in light blue. The fitted Gaussians are shown for each island as ellipses (the sizes of which correspond to the FWHMs of the Gaussians). Gaussians that have been grouped together into a source are shown with the same color. For example, the two red Gaussians of island #1 have been grouped together into one source, and the nine Gaussians of island #0 have been grouped into 4 separate sources. .. rubric:: Footnotes .. [#f1] http://casa.nrao.edu PyBDSF-1.10.1/doc/source/whats_new.rst000066400000000000000000000426671420247104600174360ustar00rootroot00000000000000.. _new: ********** What's New ********** Version 1.10.1 (2022/02/14): * Fix NumPy API compatibility issue Version 1.10.0 (2022/02/09): * Update some functions as required by scipy version >= 1.8.0 (PR #172) * Fix build issues with Python 3.8, end support for Python < 3.6, add support for Python 3.8 and 3.9, and make installation of the interactive pybdsf shell optional (PR #169) * Improve handling of the beam in the spectral index module (PR #165) * Improve handling of large, complex islands (PR #160) * Allow a file to be supplied for the ch0 image used in the spectral index module (PR #127) Version 1.9.2 (2019/12/05): * Fix exception behaviour if spline order change does not work * Add check for frequency info in header Version 1.9.1 (2019/09/25): * Fix various shapelet decomposition issues * Fix crash in Gaussian fitting (#96) * Fix blank_limit check_low error (#100) * Fix various minor bugs Version 1.9.0 (2019/03/25): * Add support for Python 3 * Fix various minor bugs Version 1.8.15 (2018/10/12): * Fix segfault in Gaussian fitting (#63) * Fix math domain error (#76) * Fix setup.py for boost versions > 1.63 (#58) Version 1.8.14 (2018/05/18): * Fix an error on total flux density (#50) * Add the possibility to provide an external noise and mean maps (#43) * Append the image FITS header into catalog FITS header (#53) * Make PyBDSF compatible with newer boost libraries, specifically those used in Ubuntu 18.04 (#55) Version 1.8.13 (2017/11/17): * Remove deprecated boolean operators Version 1.8.12 (2017/09/01): * Fix crash with tiny regions * Fix very low centroid peak fluxes * Fix compile error with numpy 1.13 Version 1.8.11 (2017/06/01): * Fix for interactive shell problem Version 1.8.10 (2017/05/31): * Fixes for various installation and runtime issues on modern systems. Version 1.8.9 (2017/03/23): * Fix to bug that causes an error when grouping Gaussians into sources Version 1.8.8 (2017/03/17): * Rename to PyBDSF * Move to python setuptools * Move out of the LOFAR tree to github * Fix to issues related to numpy versions >= 1.12.0 Version 1.8.7 (2016/06/10): * Fix to bug that caused incorrect output images when input image was not square. Version 1.8.6 (2016/01/20): * Fix to bug that caused incorrect island mask when two islands are very close together. * Fix to bug that caused crash when image is masked and the ``src_ra_dec`` option is used. Version 1.8.5 (2015/11/30): * Fix to bug in ``export_image`` that resulted in incorrect output image when both ``trim_box`` and ``pad_image`` were used. * Fix to bug in wavelet module related to merging of islands. * Fix to bug in polarization module related to numbering of new islands. * Added option to use much faster (but also much more memory intensive) SciPy ``fftconvolve`` function instead of custom PyBDSM one. The option (``use_scipy_fft``) defaults to ``True``. * Increased number of digits for values in output text catalogs Version 1.8.4 (2015/08/06): * Improved speed of wavelet module. * Added option to use PyFFTW in wavelet module if available. * Fix to IPython version check. * Fix to bug that caused a failure to write shapelet models in FITS format. * Fix to bug that caused a crash when both ``atrous_do = True`` and ``output_all = True``. * Fixed a bug that caused a crash on machines with only one core. Version 1.8.3 (2014/09/26): * Fix to bug that caused a crash when using the wavelet module and all Gaussians in an island were flagged. Version 1.8.2 (2014/05/14): * Island masks generated by the ``export_image`` task will now be expanded to match input image shape (as required by the AWimager). * Fix to bug that caused image read failure when image lacks a Stokes axis. * Fix to bug in CASA masks generated with ``export_image`` that caused cleaning to fail in CASA 4.2 and above. * Fix to bug that resulted in output file names being converted to lower case inappropriately. Version 1.8.1 (2014/01/14): * Added option (``bbs_patches = 'mask'``) to allow patches in an output BBS sky model to be defined using a mask image (set with the ``bbs_patches_mask`` option). * Fix to bug that caused the ``incl_empty`` option to be ignored when ``format = 'fits'`` in the ``write_catalog`` task. * Enabled output of images in CASA format in the ``export_image`` task (``img_format = 'casa'``). * Added an option to ``export_image`` to export an island-mask image, with ones where there is emission and zeros elsewhere (``image_type = 'island_mask'``). Features in the island mask may be optionally dilated by specifying the number of dilation iterations with the ``mask_dilation`` parameter. The mask image may be padded with zeros to match the original image when the ``trim_box`` option was used to analyze only a portion of the image (``pad_image = True``). * Added an option to write a CASA region file to the ``write_catalog`` task (``format = 'casabox'``). * Added an option to write a CSV catalog to the ``write_catalog`` task (``format = 'csv'``). * Added error message when the rms is zero in some part of the rms map. Version 1.8.0 (2013/10/16): * Improved wavelet fitting. Added option so that wavelet fitting can be done to the sum of images on the remaining wavelet scales, improving the signal for fitting (controlled with the ``atrous_sum`` option). Added option so that user can choose whether to include new islands found only in the wavelet images in the final fit or not (controlled with the ``atrous_orig_isl`` option). * Fixed a bug that could lead to incomplete fitting of some islands. * Improved overall convergence of fits. Version 1.7.7 (2013/10/10): * Improved fitting of bright sources under certain circumstances. Version 1.7.6 (2013/09/27): * Changed caching behavior to ensure that temporary files are always deleted after they are no longer needed or on exit. * Renamed ``blank_zeros`` to ``blank_limit``. The ``blank_limit`` option now specifies a limit below which pixels are blanked. * Enabled SAGECAL sky-model output. Version 1.7.5 (2013/09/02): * Fix to bug that caused a crash when images with 2 or 3 axes were used. * Improved rms and mean calculation (following the implementation used in PySE, see http://dare.uva.nl/document/174052 for details). The threshold used to determine the clipped rms and mean values is now determined internally by default (i.e., ``kappa_clip = None``). Version 1.7.4 (2013/08/29): * Fix to bug in ``show_fit`` that caused error when ``i`` is pressed in the plot window and shapelet decomposition had not been done. * Tweak to ``pybdsm`` startup shell script to avoid problems with the Mac OS X matplotlib backend on non-framework Python installations (such as Anaconda Python). * Fix to bug in ``process_image`` that could result in wavelet Gaussians being excluded from model image under certain conditions. Version 1.7.3 (2013/08/27): * Fix to bug in image reading that caused images to be distorted. Version 1.7.2 (2013/08/23): * Improved handling of non-standard FITS CUNIT keywords. * Improved loading of FITS images when ``trim_box`` is specified. Version 1.7.1 (2013/08/22): * Fix to bug that caused cached images to be deleted when rerunning an analysis. * Fix to bug in ``show_fit`` due to undefined images. * Fix to bug in ``process_image`` (and ``img.process()``) that would result in unneeded reprocessing. Version 1.7.0 (2013/08/20): * PyBDSM will now use Astropy if installed for FITS and WCS modules. * Fix to avoid excessive memory usage in the wavelet module (replaced ``scipy.signal.fftconvolve`` with a custom function). * Added option to use disk caching for internally derived images (``do_cache``). Caching can reduce memory usage and is therefore useful when processing large images. * Implemented a variable operation chain for process_image (and ``img.process()``) that allows unneeded steps to be skipped if the image is being reprocessed. * Fixed a bug that could cause Gaussian fitting to hang during iterative fitting of large islands. * Added option (``fix_to_beam``) to fix the size and position angle of Gaussians to the restoring beam during fitting. * Fix to bug that caused the position angle used to initialize fitting to be incorrect. Version 1.6.1 (2013/03/22): * Fix to bug in ds9 and kvis catalog files that resulted in incorrect position angles. * Fix to bug in position-dependent WCS transformations that caused incorrect source parameters in output catalogs. * Added option to output uncorrected source parameters to a BBS sky model file (``correct_proj``). * Removed sky transformations for flagged Gaussians, as these could sometimes give math domain errors. * Disabled aperture flux measurement on wavelet images as it is not used/needed. Version 1.6.0 (2013/03/05): * Improved speed and accuracy of aperture flux calculation. * Added option to use the curvature map method of Hancock et al. (2012) for the initial estimation of Gaussian parameters (``ini_method = 'curvature'``) and for grouping of Gaussians into sources (``group_method = 'curvature'``). * Fix to bug in spectral index module that caused sources with multiple Gaussians to be skipped. Minor adjustments to the wavelet module to improve performance. * Implemented position-dependent WCS transformations. * Added option to fit to any arbitrary location in the image within a given radius (``src_ra_dec`` and ``src_radius_pix``). * Fix to bug in wavelet module that caused crash when no Gaussians were fit to the main image. * Fix to bug that resulted in incorrect numbering of wavelet Gaussians. Added ``'srl'`` output in ds9 format when using ``output_all = True``. * Fix to bug in source grouping algorithm. Improved fitting when background mean is nonzero. Fix to allow images with GLAT and GLON WCS coordinates. Fix to bug when equinox is taken from the epoch keyword. Version 1.5.1 (2012/12/19): * Fix to bug in wavelet module that occurred when the center of the wavelet Gaussian lies outside of the image. * Fix to re-enable srl output catalogs in ds9 region format. * Fix to bug that resulted in the output directory not always being created. * Added an option (``aperture_posn``), used when aperture fluxes are desired, to specify whether to center the aperture on the source centroid or the source peak. * Changes to reduce memory usage, particularly in the wavelet module. * Fix to bypass bug in matplotlib when display variable is not set. * Fixed bug that caused a crash when a detection image was used. * Fixed a bug with incorrect save directory when "plot_allgaus" is True. Version 1.5.0 (2012/10/29): * Improved WCS handling. PyBDSM can now read images with a much greater variety of WCS systems (e.g., the ``VOPT`` spectral system). * Fixed a bug related to the use of a detection image when a subimage is specified (with ``trim_box``). Version 1.4.5 (2012/10/12): * Added option (``incl_empty``) to include empty islands (that have no un-flagged Gaussians) in output catalogs. Any such empty islands are given negative source IDs and have positions given by the location of the peak of the island. * Fixed a bug in Gaussian fitting that could cause a crash when fitting fails. * Fixed a bug in parallelization that could cause a crash due to improper concatenation of result lists. Version 1.4.4 (2012/10/09): * Fixed a bug related to the parallelization of Gaussian fitting that could cause a crash due to improper mapping of island lists to processes. * Improved logging. * Added a warning when one or more islands are not fit (i.e., no valid, unflagged Gaussians were found). * Added code to handle images with no unblanked pixels. * Improved fitting robustness. Version 1.4.3 (2012/10/04): * Fixed a bug in the mean map calculation that caused mean maps with constant values (i.e., non-2D maps) to have values of 0.0 Jy/beam unless ``mean_map = 'const'`` was explicitly specified. * Fixed a bug in the PSF vary module that resulted in incorrect PSF generators being used. Added an option to smooth the resulting PSF images (``psf_smooth``). Parallelized the PSF interpolation and smoothing steps. Improved PSF vary documentation. Version 1.4.2 (2012/09/25): * Dramatically reduced time required to identify valid wavelet islands. Fixed bug that resulted in output FITS gaul tables being improperly sorted. Version 1.4.1 (2012/09/11): * Added SAMP (Simple Application Messaging Protocol) support to the write_catalog, export_image, and show_fit tasks. These tasks can now use SAMP to communicate with other programs connected to a SAMP hub (e.g., ds9, Topcat, Aladin). Version 1.4.0 (2012/09/11): * Parallelized Gaussian fitting, shapelet decomposition, validation of wavelet islands, and mean/rms map generation. The number of cores to be used can be specified with the ``ncores`` option (default is to use all). Version 1.3.2 (2012/08/22): * Fixed a bug that could cause the user-specified ``rms_box`` value to be ignored. Added an option to enable the Monte Carlo error estimation for 'M'-type sources (the ``do_mc_errors`` option), which is now disabled by default. Version 1.3.1 (2012/07/11): * Fixed a bug that caused images written when ``output_all = True`` to be transposed. Added frequency information to all output images. Improved fitting robustness to prevent rare cases in which no valid Gaussians could be fit to an island. Modified the island-finding routine to handle NaNs properly. Version 1.3.0 (2012/07/03): * Fixed a bug in the calculation of positional errors for Gaussians. * Adjusted ``rms_box`` algorithm to check for negative rms values (due to interpolation with cubic spline). If negative values are found, either the box size is increased or the interpolation is done with ``order=1`` (bilinear) instead. * Output now includes the residual image produced using only wavelet Gaussians (if any) when ``atrous_do=True`` and ``output_all=True``. * Improved organization of files when ``output_all=True``. * Added logging of simple statistics (mean, std. dev, skew, and kurtosis) of the residual images. * Included image rotation (if any) in beam definition. Rotation angle can vary across the image (defined by image WCS). * Added Sagecal output format for Gaussian catalogs. * Added check for newer versions of the PyBDSM software ``tar.gz`` file available on ftp.strw.leidenuniv.nl. * Added total island flux (from sum of pixels) to ``gaul`` and ``srl`` catalogs. Version 1.2 (2012/06/06): * Added option to output flux densities for every channel found by the spectral index module. * Added option to spectral index module to allow use of flux densities that do not meet the desired SNR. * Implemented an adaptive scaling scheme for the ``rms_box`` parameter that shrinks the box size near bright sources and expands it far from them (enabled with the ``adaptive_rms_box`` option when ``rms_box`` is None). This scheme generally results in improved rms and mean maps when both strong artifacts and extended sources are present. * Improved speed of Gaussian fitting to wavelet images. * Added option to calculate fluxes within a specified aperture radius in pixels (set with the ``aperture`` option). Aperture fluxes, if measured, are output in the ``srl`` format catalogs. Version 1.1 (2012/03/28): * Tweaked settings that affect fitting of Gaussians to improve fitting in general. * Modified calculation of the ``rms_box`` parameter (when the ``rms_box`` option is None) to work better with fields composed mainly of point sources when strong artifacts are present. * Modified fitting of large islands to adopt an iterative fitting scheme that limits the number of Gaussians fit simultaneously per iteration to 10. This change speeds up fitting of large islands considerably. * Added the option to use a "detection" image for island detection (the ``detection_image`` option); source properties are still measured from the main input image. This option is particularly useful with images made with LOFAR's AWImager, as the uncorrected, flat-noise image (the ``*.restored`` image) is better for source detection than the corrected image (the ``*.restored.corr`` image). * Modified the polarization module so that sources that appear only in Stokes Q or U (and hence not in Stokes I) are now identified. This identification is done using the polarized intensity (PI) image. * Improved the plotting speed (by a factor of many) in ``show_fit`` when there are a large number of islands present. * Simplified the spectral index module to make it more user friendly and stable. * Altered reading of images to correctly handle 4D cubes. * Extended the ``psf_vary`` module to include fitting of stacked PSFs with Gaussians, interpolation of the resulting parameters across the image, and correction of the deconvolved source sizes using the interpolated PSFs. * Added residual rms and mean values to source catalogs. These values can be compared to background rms and mean values as a quick check of fit quality. * Added output of shapelet parameters as FITS tables. * Fixed many minor bugs. See the changelog (accessible from the interactive shell using ``help changelog``) for details of all changes since the last version. PyBDSF-1.10.1/doc/source/write_catalog.rst000066400000000000000000000423441420247104600202530ustar00rootroot00000000000000.. _write_catalog: *************************************************** ``write_catalog``: writing source catalogs *************************************************** The properties of the fitted Gaussians, sources, and shapelets may be written in a number of formats to a file using the ``write_catalog`` task. See below (:ref:`output_cols`) for a detailed description of the output columns. .. note:: For BBS and SAGECAL formats, the output catalogs always use the J2000 equinox. If the input image does not have an equinox of J2000, the coordinates of sources will be precessed to J2000. Catalogs in other formats will have the equinox of the image. The task parameters are as follows: .. parsed-literal:: WRITE_CATALOG: Write the Gaussian, source, or shapelet list to a file. ================================================================================ :term:`outfile` ............... None : Output file name. None => file is named automatically; 'SAMP' => send to SAMP hub (e.g., to TOPCAT, ds9, or Aladin) :term:`bbs_patches` ........... None : For BBS format, type of patch to use: None => no patches. 'single' => all Gaussians in one patch. 'gaussian' => each Gaussian gets its own patch. 'source' => all Gaussians belonging to a single source are grouped into one patch. 'mask' => use mask file specified by bbs_patches_mask :term:`bbs_patches_mask` ...... None : Name of the mask file (of same size as input image) that defines the patches if bbs_patches = 'mask' :term:`catalog_type` .......... 'srl': Type of catalog to write: 'gaul' - Gaussian list, 'srl' - source list (formed by grouping Gaussians), 'shap' - shapelet list (FITS format only) :term:`clobber` .............. False : Overwrite existing file? :term:`correct_proj` .......... True : Correct source parameters for image projection (BBS format only)? :term:`format` ............... 'fits': Format of output Gaussian list: 'bbs', 'ds9', 'fits', 'star', 'kvis', 'ascii', 'csv', 'casabox', or 'sagecal' :term:`incl_chan` ............ False : Include fluxes from each channel (if any)? :term:`incl_empty` ........... False : Include islands without any valid Gaussians (source list only)? :term:`srcroot` ............... None : Root name for entries in the output catalog. None => use image file name Each of the parameters is described in detail below. .. glossary:: outfile This parameter is a string (default is ``None``) that sets the name of the output file. If ``None``, the file is named automatically. If 'SAMP' the full catalog (i.e., ``format = 'fits'``) is sent to a running SAMP Hub (e.g., to TOPCAT or Aladin). bbs_patches This parameter is a string (default is ``None``) that sets the type of patch to use in BBS-formatted catalogs. When the Gaussian catalogue is written as a BBS-readable sky file, this option determines whether all Gaussians are in a single patch (``'single'``), there are no patches (``None``), all Gaussians for a given source are in a separate patch (``'source'``), each Gaussian gets its own patch (``'gaussian'``), or a mask image is used to define the patches (``'mask'``). If you wish to have patches defined by island, then set ``group_by_isl = True`` before fitting to force all Gaussians in an island to be in a single source. Then set ``bbs_patches = 'source'`` when writing the catalog. bbs_patches_mask This parameter is a string (default is ``None``) that sets the file name of the mask file to use to define patches in BBS-formatted catalogs. The mask image should be 1 inside the patches and 0 elsewhere and should be the same size as the input image (before any ``trim_box`` is applied). Any Gaussians that fall outside of the patches will be ignored and will not appear in the output sky model. catalog_type This parameter is a string (default is ``'srl'``) that sets the type of catalog to write: ``'gaul'`` - Gaussian list, ``'srl'`` - source list (formed by grouping Gaussians), ``'shap'`` - shapelet list (``'fits'`` format only) .. note:: The choice of ``'srl'`` or ``'gaul'`` depends on whether you want all the source structure in your catalog or not. For example, if you are making a sky model for use as a model in calibration, you want to include all the source structure in your model, so you would use a Gaussian list (``'gaul'``), which writes each Gaussian. On the other hand, if you want to compare to other source catalogs, you want instead the total source flux densities, so use source lists (``'srl'``). For example, say you have a source that is unresolved in WENSS, but is resolved in your image into two nearby Gaussians that are grouped into a single source. In this case, you want to compare the sum of the Gaussians to the WENSS flux density, and hence should use a source list. clobber This parameter is a Boolean (default is ``False``) that determines whether existing files are overwritten or not. correct_proj This parameter is a Boolean (default is ``True``) that determines whether the source parameters in the output catalog will be corrected for first-order projection effects. If ``False``, no correction is done. In this case, the position angle is relative to the +y axis, NOT true north, and source sizes are calculated assuming a constant pixel scale (equal to the scale at the image center). If ``True``, the position angle and source size are corrected using the average pixel size and angle offset (between the +y axis and north) at the location of the source center. format This parameter is a string (default is ``'fits'``) that sets the format of the output catalog. The following formats are supported: * ``'bbs'`` - BlackBoard Selfcal sky model format (Gaussian list only) * ``'ds9'`` - ds9 region format * ``'fits'`` - FITS catalog format, readable by many software packages, including IDL, TOPCAT, Python, fv, Aladin, etc. * ``'star'`` - AIPS STAR format (Gaussian list only) * ``'kvis'`` - kvis format (Gaussian list only) * ``'ascii'`` - simple text file with spaces separating the values * ``'csv'`` - Comma-separated Values (CSV) text file * ``'casabox'`` - CASA region file (boxes only) * ``'sagecal'`` - SAGECAL sky model format (Gaussian list only) Catalogues with the ``'fits'``, ``'ascii'``, and ``'csv'`` formats include all available information (see :ref:`output_cols` for column definitions). The other formats include only a subset of the full information. incl_chan This parameter is a Boolean (default is ``False``) that determines whether the total flux densities of each source measured in each channel by the spectral index module are included in the output. incl_empty This parameter is a Boolean (default is ``False``) that determines whether islands without any valid Gaussians are included in the output catalog. This option is only available for source lists. If True, islands for which Gaussian fitting failed will be included in the output catalog. In these cases, the source IDs are negative and only a subset of the standard columns will be populated (columns requiring information from Gaussian fits are left blank). srcroot This parameter is a string (default is ``None``) that sets the root for source names in the output catalog. .. _output_cols: Definition of output columns ---------------------------- The information included in the Gaussian and source catalogs varies by format and can include the following quantities. .. note:: For ACSII, CSV, and FITS formats, the reference frequency (in Hz) and equinox are stored in the header of the catalog. The header in ASCII and CSV catalogs is the first few lines of the catalog. For FITS catalogs, this information is stored in the comments as well as in the FREQ0 and EQUINOX keywords in the primary header. * **Gaus_id:** a unique number that identifies the Gaussian, starting from zero * **Source_id:** a unique number that identifies the Source, starting from zero * **Isl_id:** a unique number that identifies the Island, starting from zero * **Wave_id:** the wavelet scale from which the source was extracted, starting from zero (for the ch0 image) * **RA:** the right ascension of the source (for the equinox of the image), in degrees * **E_RA:** the error on the right ascension of the source, in degrees * **DEC:** the declination of the source (for the equinox of the image), in degrees * **E_DEC:** the 1-:math:`\sigma` error on the declination of the source, in degrees * **RA_max:** the right ascension of the maximum of the source (for the equinox of the image), in degrees (``'srl'`` catalogs only) * **E_RA_max:** the 1-:math:`\sigma` error on the right ascension of the maximum of the source, in degrees (``'srl'`` catalogs only) * **DEC_max:** the declination of the maximum of the source (for the equinox of the image), in degrees (``'srl'`` catalogs only) * **E_DEC_max:** the 1-:math:`\sigma` error on the declination of the maximum of the source, in degrees (``'srl'`` catalogs only) * **Total_flux:** the total, integrated Stokes I flux density of the source at the reference frequency, in Jy * **E_Total_flux:** the 1-:math:`\sigma` error on the total flux density of the source, in Jy * **Peak_flux:** the peak Stokes I flux density per beam of the source, in Jy/beam * **E_Peak_flux:** the 1-:math:`\sigma` error on the peak flux density per beam of the source, in Jy/beam * **Aperture_flux:** the total Stokes I flux density of the source within the specified aperture, in Jy (``'srl'`` catalogs only) * **E_Aperture_flux:** the 1-:math:`\sigma` error on the total flux density of the source within the specified aperture, in Jy (``'srl'`` catalogs only) * **Xposn:** the x image coordinate of the source, in pixels * **E_Xposn:** the 1-:math:`\sigma` error on the x image coordinate of the source, in pixels * **Yposn:** the y image coordinate of the source, in pixels * **E_Yposn:** the 1-:math:`\sigma` error on the y image coordinate of the source, in pixels * **Xposn_max:** the x image coordinate of the maximum of the source, in pixels (``'srl'`` catalogs only) * **E_Xposn_max:** the 1-:math:`\sigma` error on the x image coordinate of the maximum of the source, in pixels (``'srl'`` catalogs only) * **Yposn_max:** the y image coordinate of the maximum of the source, in pixels (``'srl'`` catalogs only) * **E_Yposn_max:** the 1-:math:`\sigma` error on the y image coordinate of the maximum of the source, in pixels (``'srl'`` catalogs only) * **Maj:** the FWHM of the major axis of the source, in degrees * **E_Maj:** the 1-:math:`\sigma` error on the FWHM of the major axis of the source, in degrees * **Min:** the FWHM of the minor axis of the source, in degrees * **E_Min:** the 1-:math:`\sigma` error on the FWHM of the minor axis of the source, in degrees * **PA:** the position angle of the major axis of the source measured east of north, in degrees * **E_PA:** the 1-:math:`\sigma` error on the position angle of the major axis of the source, in degrees * **Maj_img_plane:** the FWHM of the major axis of the source in the image plane, in degrees * **E_Maj_img_plane:** the 1-:math:`\sigma` error on the FWHM of the major axis of the source in the image plane, in degrees * **Min_img_plane:** the FWHM of the minor axis of the source in the image plane, in degrees * **E_Min_img_plane:** the 1-:math:`\sigma` error on the FWHM of the minor axis of the source in the image plane, in degrees * **PA_img_plane:** the position angle in the image plane of the major axis of the source measured east of north, in degrees * **E_PA_img_plane:** the 1-:math:`\sigma` error on the position angle in the image plane of the major axis of the source, in degrees * **DC_Maj:** the FWHM of the deconvolved major axis of the source, in degrees * **E_DC_Maj:** the 1-:math:`\sigma` error on the FWHM of the deconvolved major axis of the source, in degrees * **DC_Min:** the FWHM of the deconvolved minor axis of the source, in degrees * **E_DC_Min:** the 1-:math:`\sigma` error on the FWHM of the deconvolved minor axis of the source, in degrees * **DC_PA:** the position angle of the deconvolved major axis of the source measured east of north, in degrees * **E_DC_PA:** the 1-:math:`\sigma` error on the position angle of the deconvolved major axis of the source, in degrees * **DC_Maj_img_plane:** the FWHM of the deconvolved major axis of the source in the image plane, in degrees * **E_DC_Maj_img_plane:** the 1-:math:`\sigma` error on the FWHM of the deconvolved major axis of the source in the image plane, in degrees * **DC_Min_img_plane:** the FWHM of the deconvolved minor axis of the source in the image plane, in degrees * **E_DC_Min_img_plane:** the 1-:math:`\sigma` error on the FWHM of the deconvolved minor axis of the source in the image plane, in degrees * **DC_PA_img_plane:** the position angle in the image plane of the deconvolved major axis of the source measured east of north, in degrees * **E_DC_PA_img_plane:** the 1-:math:`\sigma` error on the position angle in the image plane of the deconvolved major axis of the source, in degrees * **Isl_Total_flux:** the total, integrated Stokes I flux density of the island in which the source is located, in Jy. This value is calculated from the sum of all non-masked pixels in the island with values above ``thresh_isl`` * **E_Isl_Total_flux:** the 1-:math:`\sigma` error on the total flux density of the island in which the source is located, in Jy * **Isl_rms:** the average background rms value of the island (derived from the rms map), in Jy/beam * **Isl_mean:** the averge background mean value of the island (derived from the mean map), in Jy/beam * **Resid_Isl_rms:** the average residual background rms value of the island (derived from the residual map, after subtraction of fitted Gaussians), in Jy/beam * **Resid_Isl_mean:** the averge residual background mean value of the island (derived from the residual map, after subtraction of fitted Gaussians), in Jy/beam * **S_Code:** a code that defines the source structure. * 'S' = a single-Gaussian source that is the only source in the island * 'C' = a single-Gaussian source in an island with other sources * 'M' = a multi-Gaussian source * **Spec_Indx:** the spectral index of the source * **E_Spec_Indx:** the 1-:math:`\sigma` error on the spectral index of the source * **Total_flux_ch#** the total, integrated Stokes I flux density of the source in channel #, in Jy * **E_Total_flux_ch#** the 1-:math:`\sigma` error on the total, integrated Stokes I flux density of the source in channel #, in Jy * **Freq_ch#** the frequency of channel #, in Hz * **Total_Q:** the total, integrated Stokes Q flux density of the source at the reference frequency, in Jy * **E_Total_Q:** the 1-:math:`\sigma` error on the total Stokes Q flux density of the source at the reference frequency, in Jy * **Total_U:** the total, integrated Stokes U flux density of the source at the reference frequency, in Jy * **E_Total_U:** the 1-:math:`\sigma` error on the total Stokes U flux density of the source at the reference frequency, in Jy * **Total_V:** the total, integrated Stokes V flux density of the source at the reference frequency, in Jy * **E_Total_V:** the 1-:math:`\sigma` error on the total Stokes V flux density of the source at the reference frequency, in Jy * **Linear_Pol_frac:** the linear polarization fraction of the source * **Elow_Linear_Pol_frac:** the 1-:math:`\sigma` error on the linear polarization fraction of the source * **Ehigh_Linear_Pol_frac:** the 1-:math:`\sigma` error on the linear polarization fraction of the source * **Circ_Pol_Frac:** the circular polarization fraction of the source * **Elow_Circ_Pol_Frac:** the 1-:math:`\sigma` error on the circular polarization fraction of the source * **Ehigh_Circ_Pol_Frac:** the 1-:math:`\sigma` error on the circular polarization fraction of the source * **Total_Pol_Frac:** the total polarization fraction of the source * **Elow_Total_Pol_Frac:** the 1-:math:`\sigma` error on the total polarization fraction of the source * **Ehigh_Total_Pol_Frac:** the 1-:math:`\sigma` error on the total polarization fraction of the source * **Linear_Pol_Ang:** the linear polarization angle, measured east of north, in degrees * **E_Linear_Pol_Ang:** the 1-:math:`\sigma` error on the linear polarization angle, in degrees The shapelet catalog contains the following additional columns: * **shapelet_basis:** the basis coordinate system: 'c' for cartesian, 's' for spherical * **shapelet_beta:** the :math:`\beta` parameter of the shapelet decomposition * **shapelet_nmax:** the maximum order of the shapelet * **shapelet_cf:** a (flattened) array of the shapelet coefficients PyBDSF-1.10.1/manylinux2010/000077500000000000000000000000001420247104600151505ustar00rootroot00000000000000PyBDSF-1.10.1/manylinux2010/.gitignore000066400000000000000000000000061420247104600171340ustar00rootroot00000000000000*.whl PyBDSF-1.10.1/manylinux2010/build.sh000077500000000000000000000003761420247104600166140ustar00rootroot00000000000000#!/bin/bash -ve HERE=`dirname "$0"` cd $HERE/.. for i in 36 37 38 39; do docker build -f manylinux2010/wheel${i}.docker . -t pybdsf${i} docker run -v `pwd`/manylinux2010:/manylinux2010 pybdsf${i} sh -c "cp /output/*.whl /manylinux2010/." done PyBDSF-1.10.1/manylinux2010/wheel36.docker000066400000000000000000000025431420247104600176220ustar00rootroot00000000000000FROM quay.io/pypa/manylinux2010_x86_64 # install rpms RUN yum install -y gcc-gfortran # download other source code WORKDIR /tmp RUN curl https://ufpr.dl.sourceforge.net/project/boost/boost/1.70.0/boost_1_70_0.tar.bz2 --output /tmp/boost.tar.bz2 RUN mkdir /build WORKDIR /build # how many threads to use for compiling ENV THREADS 4 ENV PYMAJOR 3 ENV PYMINOR 6 ENV PYUNICODE m ENV TARGET cp${PYMAJOR}${PYMINOR}-cp${PYMAJOR}${PYMINOR}${PYUNICODE} # install python dependencies, make boost install also boost_numpy RUN /opt/python/${TARGET}/bin/pip install oldest-supported-numpy # setup boost WORKDIR /build RUN tar jxf /tmp/boost.tar.bz2 WORKDIR /build/boost_1_70_0 RUN ./bootstrap.sh --prefix=/opt/boost \ --with-libraries=python \ --with-python=/opt/python/${TARGET}/bin/python \ --with-python-version=${PYMAJOR}.${PYMINOR} \ --with-python-root=/opt/python/${TARGET} RUN ./b2 -j${THREADS} \ cxxflags="-fPIC -I/opt/python/${TARGET}/include/python${PYMAJOR}.${PYMINOR}${PYUNICODE}/" \ link=static,shared install ADD . /PyBDSF WORKDIR /PyBDSF ENV CFLAGS "-I/opt/boost/include -L/opt/boost/lib" ENV LD_LIBRARY_PATH "/opt/boost/lib:/usr/local/lib" RUN /opt/python/${TARGET}/bin/python ./setup.py build_ext -j${THREADS} RUN /opt/python/${TARGET}/bin/python ./setup.py bdist_wheel -d . RUN auditwheel repair --plat manylinux2010_x86_64 -w /output *.whl PyBDSF-1.10.1/manylinux2010/wheel37.docker000066400000000000000000000025431420247104600176230ustar00rootroot00000000000000FROM quay.io/pypa/manylinux2010_x86_64 # install rpms RUN yum install -y gcc-gfortran # download other source code WORKDIR /tmp RUN curl https://ufpr.dl.sourceforge.net/project/boost/boost/1.70.0/boost_1_70_0.tar.bz2 --output /tmp/boost.tar.bz2 RUN mkdir /build WORKDIR /build # how many threads to use for compiling ENV THREADS 4 ENV PYMAJOR 3 ENV PYMINOR 7 ENV PYUNICODE m ENV TARGET cp${PYMAJOR}${PYMINOR}-cp${PYMAJOR}${PYMINOR}${PYUNICODE} # install python dependencies, make boost install also boost_numpy RUN /opt/python/${TARGET}/bin/pip install oldest-supported-numpy # setup boost WORKDIR /build RUN tar jxf /tmp/boost.tar.bz2 WORKDIR /build/boost_1_70_0 RUN ./bootstrap.sh --prefix=/opt/boost \ --with-libraries=python \ --with-python=/opt/python/${TARGET}/bin/python \ --with-python-version=${PYMAJOR}.${PYMINOR} \ --with-python-root=/opt/python/${TARGET} RUN ./b2 -j${THREADS} \ cxxflags="-fPIC -I/opt/python/${TARGET}/include/python${PYMAJOR}.${PYMINOR}${PYUNICODE}/" \ link=static,shared install ADD . /PyBDSF WORKDIR /PyBDSF ENV CFLAGS "-I/opt/boost/include -L/opt/boost/lib" ENV LD_LIBRARY_PATH "/opt/boost/lib:/usr/local/lib" RUN /opt/python/${TARGET}/bin/python ./setup.py build_ext -j${THREADS} RUN /opt/python/${TARGET}/bin/python ./setup.py bdist_wheel -d . RUN auditwheel repair --plat manylinux2010_x86_64 -w /output *.whl PyBDSF-1.10.1/manylinux2010/wheel38.docker000066400000000000000000000025071420247104600176240ustar00rootroot00000000000000FROM quay.io/pypa/manylinux2010_x86_64 # install rpms RUN yum install -y gcc-gfortran # download other source code WORKDIR /tmp RUN curl https://ufpr.dl.sourceforge.net/project/boost/boost/1.70.0/boost_1_70_0.tar.bz2 --output /tmp/boost.tar.bz2 RUN mkdir /build WORKDIR /build # how many threads to use for compiling ENV THREADS 4 ENV PYMAJOR 3 ENV PYMINOR 8 ENV TARGET cp${PYMAJOR}${PYMINOR}-cp${PYMAJOR}${PYMINOR} # install python dependencies, make boost install also boost_numpy RUN /opt/python/${TARGET}/bin/pip install oldest-supported-numpy # setup boost WORKDIR /build RUN tar jxf /tmp/boost.tar.bz2 WORKDIR /build/boost_1_70_0 RUN ./bootstrap.sh --prefix=/opt/boost \ --with-libraries=python \ --with-python=/opt/python/${TARGET}/bin/python \ --with-python-version=${PYMAJOR}.${PYMINOR} \ --with-python-root=/opt/python/${TARGET} RUN ./b2 -j${THREADS} \ cxxflags="-fPIC -I/opt/python/${TARGET}/include/python${PYMAJOR}.${PYMINOR}${PYUNICODE}/" \ link=static,shared install ADD . /PyBDSF WORKDIR /PyBDSF ENV CFLAGS "-I/opt/boost/include -L/opt/boost/lib" ENV LD_LIBRARY_PATH "/opt/boost/lib:/usr/local/lib" RUN /opt/python/${TARGET}/bin/python ./setup.py build_ext -j${THREADS} RUN /opt/python/${TARGET}/bin/python ./setup.py bdist_wheel -d . RUN auditwheel repair --plat manylinux2010_x86_64 -w /output *.whl PyBDSF-1.10.1/manylinux2010/wheel39.docker000066400000000000000000000025071420247104600176250ustar00rootroot00000000000000FROM quay.io/pypa/manylinux2010_x86_64 # install rpms RUN yum install -y gcc-gfortran # download other source code WORKDIR /tmp RUN curl https://ufpr.dl.sourceforge.net/project/boost/boost/1.70.0/boost_1_70_0.tar.bz2 --output /tmp/boost.tar.bz2 RUN mkdir /build WORKDIR /build # how many threads to use for compiling ENV THREADS 4 ENV PYMAJOR 3 ENV PYMINOR 9 ENV TARGET cp${PYMAJOR}${PYMINOR}-cp${PYMAJOR}${PYMINOR} # install python dependencies, make boost install also boost_numpy RUN /opt/python/${TARGET}/bin/pip install oldest-supported-numpy # setup boost WORKDIR /build RUN tar jxf /tmp/boost.tar.bz2 WORKDIR /build/boost_1_70_0 RUN ./bootstrap.sh --prefix=/opt/boost \ --with-libraries=python \ --with-python=/opt/python/${TARGET}/bin/python \ --with-python-version=${PYMAJOR}.${PYMINOR} \ --with-python-root=/opt/python/${TARGET} RUN ./b2 -j${THREADS} \ cxxflags="-fPIC -I/opt/python/${TARGET}/include/python${PYMAJOR}.${PYMINOR}${PYUNICODE}/" \ link=static,shared install ADD . /PyBDSF WORKDIR /PyBDSF ENV CFLAGS "-I/opt/boost/include -L/opt/boost/lib" ENV LD_LIBRARY_PATH "/opt/boost/lib:/usr/local/lib" RUN /opt/python/${TARGET}/bin/python ./setup.py build_ext -j${THREADS} RUN /opt/python/${TARGET}/bin/python ./setup.py bdist_wheel -d . RUN auditwheel repair --plat manylinux2010_x86_64 -w /output *.whl PyBDSF-1.10.1/natgrid/000077500000000000000000000000001420247104600142515ustar00rootroot00000000000000PyBDSF-1.10.1/natgrid/Include/000077500000000000000000000000001420247104600156345ustar00rootroot00000000000000PyBDSF-1.10.1/natgrid/Include/nnchead.h000066400000000000000000000037211420247104600174100ustar00rootroot00000000000000#include #include #include #ifndef __APPLE__ #include #endif #define SQ(x) (x) * (x) #define BIGNUM 1E37 #define EPSILON 0.00001 #define RANGE 10 #define EQ == #define NE != #define AND && #define OR || extern double **points, **joints, wbit, horilap, vertlap, bI, bJ, nuldat, xstart, ystart, xend, yend, maxhoriz, aaa, bbb, ccc, det, work3[3][3], xx, sumx, sumy, sumz, sumx2, sumy2, sumxy, sumxz, sumyz, asum, nn_pi, piby2, piby32, rad2deg, bigtri[3][3], horilap_save, vertlap_save; extern double magx, magy, magz, magx_orig, magy_orig, magz_orig, maxxy[2][3], magx_auto, magy_auto, magz_auto; extern int igrad, non_neg, densi, sdip, rads, southhemi, extrap, adf, nndup; extern int datcnt, datcnt3, numtri, imag, numnei, iscale, ext, *jndx, neicnt, optim, goodflag, updir, scor[3][2], auto_scale, single_point, first_single, asflag, error_status; extern char tri_file[256], error_file[256], emsg[256]; extern FILE *fopen(), *filee; extern void Terminate(); extern void ErrorHnd(int, char *, FILE *, char *); void FindNeigh(); void TriNeigh(); void Gradient(); void FindProp(); double Surface(); double Meld(); void TooSteep(); void TooShallow(); void TooNarrow(); struct datum *IMakeDatum(); struct simp *IMakeSimp(); struct temp *IMakeTemp(); struct neig *IMakeNeig(); int *IntVect(); void FreeVecti(); double *DoubleVect(); void FreeVectd(); int **IntMatrix(); void FreeMatrixi(); float **FloatMatrix(); void FreeMatrixf(); double **DoubleMatrix(); void FreeMatrixd(); PyBDSF-1.10.1/natgrid/Include/nncheadd.h000066400000000000000000000013401420247104600175470ustar00rootroot00000000000000struct asinfod { int crows; int ccols; double **aspect_outd; double **slope_outd; }; struct asinfod curasd; extern double armind(int, double *); extern double armaxd(int, double *); extern void Initialized(int, double [], double [], int, int, double [], double []); int ReadDatad(int, double *, double *, double *); double **MakeGridd(int, int, double *, double *); void c_nngetsloped(int, int, double *, int *); void c_nngetaspectd(int, int, double *, int *); void c_nnpntinitd(int, double [], double [], double []); extern void c_nnpntd(double, double, double *); void c_nnpntendd(); PyBDSF-1.10.1/natgrid/Include/nncheads.h000066400000000000000000000010601420247104600175650ustar00rootroot00000000000000extern double armin(int, float *); extern double armax(int, float *); extern void Initialize(int, float [], float [], int, int, float [], float []); int ReadData(int, float *, float *, float *); float **MakeGrid(int, int, float *, float *); void c_nngetslopes(int, int, float *, int *); void c_nngetaspects(int, int, float *, int *); void c_nnpntinits(int, float [], float [], float []); extern void c_nnpnts(float, float, float *); void c_nnpntend(); PyBDSF-1.10.1/natgrid/Include/nnexver.h000066400000000000000000000004301420247104600174670ustar00rootroot00000000000000extern struct datum *rootdat, *curdat, *holddat; extern struct simp *rootsimp, *cursimp, *holdsimp, *lastsimp, *prevsimp; extern struct temp *roottemp, *curtemp, *lasttemp, *prevtemp; extern struct neig *rootneig, *curneig, *lastneig; extern struct asinfo curas; PyBDSF-1.10.1/natgrid/Include/nnghead.h000066400000000000000000000030061420247104600174100ustar00rootroot00000000000000#include #include #include #ifndef __APPLE__ #include #endif #include #define RANSEED 367367 #define BIGNUM 1E37 #define EPSILON 0.00001 #define EQ == #define NE != #define AND && #define OR || extern double **points, **joints, wbit, horilap, vertlap, bI, bJ, nuldat, xstart, ystart, xend, yend, maxhoriz, aaa, bbb, ccc, det, work3[3][3], xx, sumx, sumy, sumz, sumx2, sumy2, sumxy, sumxz, sumyz, asum, nn_pi, piby2, piby32, rad2deg, bigtri[3][3], horilap_save, vertlap_save; extern double magx, magy, magz, magx_orig, magy_orig, magz_orig, maxxy[2][3], magx_auto, magy_auto, magz_auto; extern int igrad, non_neg, densi, sdip, rads, southhemi, extrap, adf, nndup; extern int datcnt, datcnt3, numtri, imag, numnei, iscale, ext, *jndx, neicnt, optim, goodflag, updir, scor[3][2], auto_scale, single_point, first_single, asflag, error_status; extern char tri_file[256], error_file[256], emsg[256]; extern FILE *fopen(), *filee; extern void Gradient(); extern void ErrorHnd(int, char *, FILE *, char *); extern void CircOut(); extern void c_nnsetc(char *, char *); extern void c_nngetc(char *, char *); extern void c_nnseti(char *, int); extern void c_nngeti(char *, int *); PyBDSF-1.10.1/natgrid/Include/nngheadd.h000066400000000000000000000005531420247104600175600ustar00rootroot00000000000000void Initialized(int, double [], double [], int, int, double [], double []); double armind(int, double *); double armaxd(int, double *); extern int ReadDatad(); extern double **MakeGridd(int, int, double *, double *); extern void c_nnsetrd(char *, double); extern void c_nngetrd(char *, double *); extern void Terminate(); PyBDSF-1.10.1/natgrid/Include/nngheads.h000066400000000000000000000005471420247104600176020ustar00rootroot00000000000000void Initialize(int, float [], float [], int, int, float [], float []); double armin(int, float *); double armax(int, float *); extern int ReadData(); extern float **MakeGrid(int, int, float *, float *); extern void c_nnsetr(char *, float); extern void c_nngetr(char *, float *); extern void Terminate(); PyBDSF-1.10.1/natgrid/Include/nnmhead.h000066400000000000000000000044501420247104600174220ustar00rootroot00000000000000#include #include #include #ifndef __APPLE__ #include #endif #define SQ(x) (x) * (x) #define RANSEED 367367 #define BIGNUM 1E37 #define EPSILON 0.00001 #define EQ == #define NE != #define AND && #define OR || double **points, **joints, wbit, horilap = -1., vertlap = -1., bI = 1.5, bJ = 7.0, nuldat = 0.0, xstart, ystart, xend, yend, maxhoriz, aaa, bbb, ccc, det, work3[3][3], xx, sumx, sumy, sumz, sumx2, sumy2, sumxy, sumxz, sumyz, asum, nn_pi, piby2, piby32, rad2deg, bigtri[3][3], horilap_save, vertlap_save; double magx = 1, magy = 1, magz = 1, magx_orig, magy_orig, magz_orig, maxxy[2][3], magx_auto, magy_auto, magz_auto; int igrad = 0, non_neg = 0, densi, sdip = 0, rads = 0, southhemi = 0, extrap = 1, adf = 0, nndup = 1; int datcnt, datcnt3, numtri, imag, numnei, iscale, ext, *jndx, neicnt, optim = 1, goodflag, updir = 1, scor[3][2] = {{1,2}, {2,0}, {0,1}}, auto_scale = 1, single_point = 0, first_single = 1, asflag = 1, error_status = 0; char tri_file[256] = {"nnalg.dat"}, error_file[256] = {"stderr"}, emsg[256]; FILE *fopen(), *filee = NULL; extern void Gradient(); extern void ErrorHnd(int, char *, FILE *, char *); extern void CircOut(); extern void c_nnsetc(char *, char *); extern void c_nngetc(char *, char *); extern void c_nnseti(char *, int); extern void c_nngeti(char *, int *); extern void Terminate(); extern void ErrorHnd(int, char *, FILE *, char *); void FindNeigh(); void TriNeigh(); void Gradient(); void FindProp(); double Surface(); double Meld(); void TooSteep(); void TooShallow(); void TooNarrow(); struct datum *IMakeDatum(); struct simp *IMakeSimp(); struct temp *IMakeTemp(); struct neig *IMakeNeig(); int *IntVect(); void FreeVecti(); double *DoubleVect(); void FreeVectd(); int **IntMatrix(); void FreeMatrixi(); float **FloatMatrix(); void FreeMatrixf(); double **DoubleMatrix(); void FreeMatrixd(); PyBDSF-1.10.1/natgrid/Include/nntpvrs.h000066400000000000000000000003651420247104600175230ustar00rootroot00000000000000struct datum *rootdat, *curdat, *holddat; struct simp *rootsimp, *cursimp, *holdsimp, *lastsimp, *prevsimp; struct temp *roottemp, *curtemp, *lasttemp, *prevtemp; struct neig *rootneig, *curneig, *lastneig; struct asinfo curas; PyBDSF-1.10.1/natgrid/Include/nntypes.h000066400000000000000000000007211420247104600175050ustar00rootroot00000000000000struct datum { double values[3]; struct datum *nextdat; }; struct simp { int vert[3]; double cent[3]; struct simp *nextsimp; }; struct temp { int end[2]; struct temp *nexttemp; }; struct neig { int neinum; double narea; double coord; struct neig *nextneig; }; struct asinfo { int crows; int ccols; float **aspect_out; float **slope_out; }; PyBDSF-1.10.1/natgrid/Include/nnuhead.h000066400000000000000000000025211420247104600174270ustar00rootroot00000000000000#include #include #define EQ == #define NE != #define AND && #define OR || extern int igrad, densi, non_neg, sdip, rads, optim, extrap, southhemi, updir, auto_scale, adf, nndup; extern double bI, bJ, magx, magy, magz, horilap, vertlap, nuldat, magx_auto, magy_auto, magz_auto, horilap_save, vertlap_save; extern char tri_file[], error_file[], emsg[]; extern FILE *filee; /* * Fortran function macro. This macro is used to provide the appropriate * system-specific C function name for it to be Fortran callable. */ #ifndef NGCALLF #ifdef UNICOS #define NGCALLF(reg,caps) caps #elif defined(RS6000) || defined(__hpux) #define NGCALLF(reg,caps) reg #else #ifdef __STDC__ #define NGCALLF(reg,caps) reg##_ #else #define NGCALLF(reg,caps) reg/**/_ #endif /* __STDC__ */ #endif /* UNICOS else ... */ #endif /* NGCALLF */ void c_nnsetc(char *, char *); void c_nngetc(char *, char *); void c_nnseti(char *, int); void c_nngeti(char *, int *); extern void ErrorHnd(int, char *, FILE *, char *); void NGCALLF(nnseti,NNSETI) (char *, int *); void NGCALLF(nngeti,NNGETI) (char *, int *); PyBDSF-1.10.1/natgrid/Include/nnuheadd.h000066400000000000000000000027631420247104600176030ustar00rootroot00000000000000void c_nnsetrd(char *, double); void c_nngetrd(char *, double *); extern void c_nngetsloped(int, int, double *, int *); extern void c_nngetaspectd(int, int, double *, int *); extern void c_nnpntinitd(int, double *, double *, double *); extern void c_nnpntd(double, double, double *); extern void c_nnpntendd(); /* * Fortran function macro. This macro is used to provide the appropriate * system-specific C function name for it to be Fortran callable. */ #ifndef NGCALLF #ifdef UNICOS #define NGCALLF(reg,caps) caps #elif defined(RS6000) || defined(__hpux) #define NGCALLF(reg,caps) reg #else #ifdef __STDC__ #define NGCALLF(reg,caps) reg##_ #else #define NGCALLF(reg,caps) reg/**/_ #endif /* __STDC__ */ #endif /* UNICOS else ... */ #endif /* NGCALLF */ /* * Fortran entry points. */ void NGCALLF(natgridd,NATGRIDD) (int *, double *, double *, double *, int *, int *, double *, double *, double *, int *); void NGCALLF(nnsetrd,NNSETRD) (char *, double *); void NGCALLF(nngetrd,NNGETRD) (char *, double *); void NGCALLF(nngetsloped,NNGETSLOPED) (int *, int *, double *, int *); void NGCALLF(nngetaspectd,NNGETASPECTD) (int *, int *, double *, int *); void NGCALLF(nnpntinitd,NNPNTINITD) (int *, double *, double *, double *); void NGCALLF(nnpntd,NNPNTD) (double *, double *, double *); void NGCALLF(nnpntend,NNPNTEND) (); double *c_natgridd(int, double [], double [], double [], int, int, double [], double [], int *); PyBDSF-1.10.1/natgrid/Include/nnuheads.h000066400000000000000000000027131420247104600176150ustar00rootroot00000000000000void c_nnsetr(char *, float); void c_nngetr(char *, float *); extern void c_nngetslopes(int, int, float *, int *); extern void c_nngetaspects(int, int, float *, int *); extern void c_nnpntinits(int, float *, float *, float *); extern void c_nnpnts(float, float, float *); extern void c_nnpntend(); /* * Fortran function macro. This macro is used to provide the appropriate * system-specific C function name for it to be Fortran callable. */ #ifndef NGCALLF #ifdef UNICOS #define NGCALLF(reg,caps) caps #elif defined(RS6000) || defined(__hpux) #define NGCALLF(reg,caps) reg #else #ifdef __STDC__ #define NGCALLF(reg,caps) reg##_ #else #define NGCALLF(reg,caps) reg/**/_ #endif /* __STDC__ */ #endif /* UNICOS else ... */ #endif /* NGCALLF */ /* * Fortran entry points. */ void NGCALLF(natgrids,NATGRIDS) (int *, float *, float *, float *, int *, int *, float *, float *, float *, int *); void NGCALLF(nnsetr,NNSETR) (char *, float *); void NGCALLF(nngetr,NNGETR) (char *, float *); void NGCALLF(nngetslopes,NNGETSLOPES) (int *, int *, float *, int *); void NGCALLF(nngetaspects,NNGETASPECTS) (int *, int *, float *, int *); void NGCALLF(nnpntinits,NNPNTINITS) (int *, float *, float *, float *); void NGCALLF(nnpnts,NNPNTS) (float *, float *, float *); void NGCALLF(nnpntend,NNPNTEND) (); float *c_natgrids(int, float [], float [], float [], int, int, float [], float [], int *); PyBDSF-1.10.1/natgrid/Src/000077500000000000000000000000001420247104600150005ustar00rootroot00000000000000PyBDSF-1.10.1/natgrid/Src/natgrid.c000066400000000000000000000023661420247104600166030ustar00rootroot00000000000000/* * This file contains the settings for most of the * global variables by way of including nnmhead.h . */ #include "nnmhead.h" #include "nnghead.h" #include "nntypes.h" #include "nntpvrs.h" #include "nnexver.h" void Terminate() { struct simp *tmp,*tmp0; struct datum *dtmp,*dtmp0; struct neig *ntmp,*ntmp0; struct temp *ttmp,*ttmp0; tmp = rootsimp; while(tmp!=NULL) { tmp0 =tmp->nextsimp; free(tmp); tmp = tmp0; } rootsimp = cursimp = holdsimp = lastsimp = prevsimp = NULL; dtmp = rootdat; while(dtmp!=NULL) { dtmp0 =dtmp->nextdat; free(dtmp); dtmp = dtmp0; } rootdat = curdat = holddat = NULL; ntmp = rootneig; while(ntmp!=NULL) { ntmp0 =ntmp->nextneig; free(ntmp); ntmp = ntmp0; } rootneig = curneig = lastneig = NULL; ttmp = roottemp; while(ttmp!=NULL) { ttmp0 =ttmp->nexttemp; free(ttmp); ttmp = ttmp0; } roottemp = curtemp = lasttemp= prevtemp= NULL; if(points!=NULL) { FreeMatrixd(points); points = NULL; } if(joints!=NULL) { FreeMatrixd(joints); joints = NULL; } if(jndx != NULL) { FreeVecti(jndx); jndx = NULL; } magx = magx_orig; magy = magy_orig; magz = magz_orig; } PyBDSF-1.10.1/natgrid/Src/natgridd.c000066400000000000000000000066661420247104600167560ustar00rootroot00000000000000#include "nnghead.h" #include "nngheadd.h" double *c_natgridd(int n, double x[], double y[], double z[], int nxi, int nyi, double xi[], double yi[], int *ier) { double **data_out=NULL, *rtrn_val=NULL; *ier = 0; if (single_point == 0) { asflag = 1; Initialized(n, x, y, nxi, nyi, xi, yi); if (ReadDatad(n,x,y,z) != 0) { *ier = error_status; return ( (double *) NULL); } } if (adf) { CircOut(); if (error_status) { *ier = error_status; return ( (double *) NULL); } } if (igrad) { Gradient(); if (error_status) { *ier = error_status; return ( (double *) NULL); } } data_out = MakeGridd(nxi, nyi, xi, yi); if (error_status) { if((data_out !=NULL)&&(data_out[0]!=NULL)) { free(data_out[0]); free(data_out); } *ier = error_status; return ( (double *) NULL); } if (single_point == 0) { Terminate(); } horilap = -1.; vertlap = -1.; rtrn_val = data_out[0]; free(data_out); return (rtrn_val); } void Initialized(int n, double x[], double y[], int nxi, int nyi, double xi[], double yi[]) { double xil, xir, yib, yit; error_status = 0; datcnt = 0; magx_orig = magx; magy_orig = magy; magz_orig = magz; iscale = 0; magx_auto = 1.; magy_auto = 1.; magz_auto = 1.; /* * Find the limits of the output array. */ xstart = armind(nxi, xi); xend = armaxd(nxi, xi); ystart = armind(nyi, yi); yend = armaxd(nyi, yi); /* * Find the limits of the input array. */ xil = armind(n, x); xir = armaxd(n, x); yib = armind(n, y); yit = armaxd(n, y); /* * As the default (that is, unless horizontal and vertical overlaps * have been specifically set by the user) choose the overlap values * as the smallest values that will make all input data points included * in the overlap region. */ if (horilap EQ -1.) { if ( (xstart >= xil) && (xend <= xir) ) { horilap = 1.01 * (((xstart-xil) < (xir-xend)) ? (xir-xend) : (xstart-xil)); } else if ( (xstart >= xil) && (xend >= xir) ) { horilap = 1.01 * (xstart-xil); } else if ( (xstart <= xil) && (xend <= xir) ) { horilap = 1.01 * (xir-xend); } else if ( (xstart <= xil) && (xir <= xend) ) { horilap = 0.; } } if (horilap <= EPSILON) { horilap = 0.01 * (xend - xstart); } if (vertlap EQ -1.) { if ( (yib <= ystart) && (yend <= yit) ) { vertlap = 1.01 * (((ystart-yib) < (yit-yend)) ? (yit-yend) : (ystart-yib)); } else if ( (ystart <= yib) && (yend <= yit) ) { vertlap = 1.01 * (yit-yend); } else if ( (yib <= ystart) && (yit <= yend) ) { vertlap = 1.01 * (ystart-yib); } else if ( (ystart <= yib) && (yit <= yend) ) { vertlap = 0.; } } if (vertlap <= EPSILON) { vertlap = 0.01 * (yend - ystart); } } double armind(int num, double *x) { int i; float amin; amin = x[0]; for (i = 1 ; i < num ; i++) if (x[i] < amin) amin = x[i]; return(amin); } double armaxd(int num, double *x) { int i; float amax; amax = x[0]; for (i = 1 ; i < num ; i++) if (x[i] > amax) amax = x[i]; return(amax); } PyBDSF-1.10.1/natgrid/Src/natgridmodule.c000077500000000000000000002762471420247104600200270ustar00rootroot00000000000000 /************************************************************************************************ * * * natgridmodule.c: a C extension which exports the following functions to Python: * * * * Single precision procedures: * * * * natgrids - primary function for gridding. * * seti - set int parameter values. * * geti - retrieve values for int parameters. * * setr - set float parameter values. * * getr - retrieve values for float parameters * * setc - set char parameter values. * * getc - retrieve values for char parameters. * * getaspects - get aspect values, if calculated. * * getslopes - get slope values, if calculated. * * pntinits - initiate single point mode. * * pnts - interpolate at a single point. * * pntend _ terminate single point mode. * * * * * * Double precision procedures: * * * * natgridd - primary function for gridding. * * setrd - set float parameter values. * * getrd - retrieve values for float parameters * * getaspectd - get aspect values, if calculated. * * getsloped - get slope values, if calculated. * * pntinitd - initiate single point mode. * * pntd - interpolate at a single point. * * pntendd _ terminate single point mode. * * * * where is getwts and getwtd * * * *************************************************************************************************/ #include "Python.h" #include "numpy/arrayobject.h" #include #include #include #include #define PRINTNATGRIDS 0 #define WRITENATGRIDS 0 #define PRINTPNTINITS 0 #define WRITEPNTINITS 0 static PyObject *ErrorObject; /* locally raised exception */ /*---------------------------------------- Macros -----------------------------------------------*/ #define onError(message) { PyErr_SetString(ErrorObject, message); return NULL; } /*--------------------------------- Function Prototypes -----------------------------------------*/ /* ---- external C functions in the library ---- */ extern float *c_natgrids(int npnts, float x[], float y[], float z[], int numxout, int numyout, float xo[], float yo[], int *ier); extern void c_nnseti(char *pnam, int ival); extern void c_nngeti(char *pnam, int *ival); extern void c_nnsetr(char *pnam, float fval); extern void c_nngetr(char *pnam, float *fval); extern void c_nnsetc(char *pnam, char *cval); extern void c_nngetc(char *pnam, char *cval); extern void c_nngetaspects(int row, int column, float *aspect, int *ier); extern void c_nngetslopes(int row, int column, float *slope, int *ier); extern void c_nnpntinits(int row, float x[], float y[], float z[]); extern void c_nnpnts(float x, float y, float *z); extern void c_nnpntend(); extern double *c_natgridd(int n, double x[], double y[], double z[], int numxout, int numyout, double xo[], double yo[], int *ier); extern void c_nnsetrd(char *pnam, double dval); extern void c_nngetrd(char *pnam, double *dval); extern void c_nngetaspectd(int row, int column, double *aspect, int *ier); extern void c_nngetsloped(int row, int column, double *slope, int *ier); extern void c_nnpntinitd(int row, double x[], double y[], double z[]); extern void c_nnpntd(double x, double y, double *z); extern void c_nnpntendd(); /* ---- functions in this file called by c extensions ---- */ void write_int(int size, char *title, FILE *fp, int *data); void write_float(int size, char *title, FILE *fp, float *data); void print_float(int size, char *title, float *data); void write_double(int size, char *title, FILE *fp, double *data); void print_double(int size, char *title, double *data); /************************************************************************************************* ************************************************************************************************** * * * EXPORTED MODULE METHOD-FUNCTIONS * * * * * ************************************************************************************************** **************************************************************************************************/ static char nat_c_natgrids__doc__[] = " \n\ \n\ natgrids - Primary gridding function \n\ \n\ natgrids is the C single precision function that does an interpolation from 2D random data \n\ to a output grid. natgrids is called after all the desired values for the control parameters \n\ have been set using the procedures seti, setr, setc and setd. \n\ \n\ natgrids returns a pointer to a linear array of data that is the interpolated grid stored in \n\ row-major order. That is, if out is declared as \n\ float out; \n\ and we set: \n\ out = natgrids(npnts, x, y, z, numxout, numyout, xo, yo, &ier); \n\ then out[i numyout + j] is the interpolated value at coordinate point (xo[i], y[j]) for \n\ 0 <= i < numxout and 0 <= j < numyout. The space for out is allocated internal to natgrids \n\ and is numxout numyout floats in size. \n\ \n\ Prototype: \n\ \n\ extern float c_natgrids(int npnts, float x[], float y[], float z[], \n\ int numxout, int numyout, float xo[], float yo[], int ier); \n\ \n\ Call from Python: \n\ \n\ out, ier = natgrids(npnts, x, y, z, numxout, numyout, xo, yo) \n\ \n\ where: \n\ \n\ npnts -- the number of input data points \n\ \n\ x -- array of size npnts containing the x coordinates of the input data points \n\ \n\ y -- array of size npnts containing the y coordinates of the input data points \n\ \n\ z -- array of size npnts containing the functional values of the input data points. That is, \n\ z[j] is the value of the input function at coordinate (x[j], y[j]), for 0 <= j < npnts. \n\ \n\ numxout -- the number of x values in the output grid, \n\ \n\ numyout -- the number of y values in the output grid. \n\ \n\ xo -- array of size numxout containing the x coordinates of the output data grid. The values \n\ of xo must be increasing, but need not be equally spaced. \n\ \n\ yo -- array of size numyout containing the y coordinates of the output data grid. The values \n\ of yo must be increasing, but need not be equally spaced. \n\ \n\ "; static PyObject *nat_c_natgrids(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ int npnts; /* The number of input data points */ PyArrayObject *object_x; /* Object pointer containing the x coordinates of the input data points */ PyArrayObject *object_y; /* Object pointer containing the y coordinates of the input data points */ PyArrayObject *object_z; /* Object pointer containing the functional values of the input data points */ int numxout; /* The number of x values in the output grid */ int numyout; /* The number of y values in the output grid */ PyArrayObject *object_xo; /* Object pointer containing the x coordinates of the output data grid */ PyArrayObject *object_yo; /* Object pointer containing the y coordinates of the output data grid */ /* fields required by call to c function*/ float *out; /* An array with the interpolated values at the output coordinate points */ int ier; /* An error return value. If *ier is returned as 0, then no errors were detected. If ier is non-zero, then refer to the list in the error table for details. */ /* fields required to construct the return of result to python */ PyArrayObject *object_out; /* array object to accept the data and return it to Python */ npy_intp dims[2]; /* used in creating object_out */ /* declarations for writes to a file */ FILE *fp; /* File used in ascii write */ char *title[6] = { "x", "y ", "z", "xo", "yo", "result" }; /* Titles for print to file */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "iOOOiiOO", &npnts, &object_x, &object_y, &object_z, &numxout, &numyout, &object_xo, &object_yo)) { PyErr_SetString(PyExc_TypeError, "Pass to natgrids is wrong.\n"); return NULL; } out = (float *)c_natgrids(npnts, (float *)object_x->data, (float *)object_y->data, (float *)object_z->data, numxout, numyout, (float *)object_xo->data, (float *)object_yo->data, &ier); /* -------- create a NumPy array housing the C language data out ----------- */ dims[0] = numxout; dims[1] = numyout; object_out = (PyArrayObject *)PyArray_NewFromDescr(&PyArray_Type, PyArray_DescrFromType(PyArray_FLOAT), 2, dims, NULL, (char *)out, NPY_ARRAY_CARRAY, NULL); if (PRINTNATGRIDS == 1) { /* -------- print data to the screen ---------- */ printf("npnts: %d\n", npnts); printf("numxout: %d\n", numxout); printf("numyout: %d\n", numyout); print_float(npnts, title[0], (float *)object_x->data); print_float(npnts, title[1], (float *)object_x->data); print_float(npnts, title[2], (float *)object_z->data); print_float(numxout, title[3], (float *)object_xo->data); print_float(numyout, title[4], (float *)object_yo->data); print_float(numxout*numyout, title[5], (float *)object_out->data); } if (WRITENATGRIDS == 1) { /* -------- write data to a file ----------- */ if((fp = fopen("natgrids.asc", "w")) == NULL) { PyErr_SetString(PyExc_IOError, "Can not open file to write checks"); return NULL; } fprintf(fp, "npnts: %d\n", npnts); fprintf(fp, "numxout: %d\n", numxout); fprintf(fp, "numyout: %d\n", numyout); write_float(npnts, title[0], fp, (float *)object_x->data); write_float(npnts, title[1], fp, (float *)object_y->data); write_float(npnts, title[2], fp, (float *)object_z->data); write_float(numxout, title[3], fp, (float *)object_xo->data); write_float(numyout, title[4], fp, (float *)object_yo->data); write_float(numxout*numyout, title[5], fp, (float *)object_out->data); fclose(fp); } return Py_BuildValue(("Oi"), object_out, ier); } static char nat_c_nnseti__doc__[] = " \n\ \n\ seti - Set int valued parameters \n\ \n\ seti is used to set values for any of the control parameters that take int values. The \n\ values set by seti remain in effect until changed by subsequent calls to seti. \n\ \n\ Prototype: \n\ \n\ extern void nnseti(char pnam, int ival); \n\ \n\ Call from Python: \n\ \n\ seti(pnam, ival) \n\ \n\ where: \n\ \n\ pnam -- the name of the control parameter whic is assigned an int value. \n\ \n\ ival -- the value to be assigned to the control parameter whose name is pointed to by pnam. \n\ \n\ "; static PyObject *nat_c_nnseti(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ char *pnam; /* the name of the control parameter to be assigned an int value */ int ival; /* value to be assigned to the control parameter whose name is pointed to by pnam */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "si", &pnam, &ival)) { PyErr_SetString(PyExc_TypeError, "Pass to nnseti is wrong.\n"); return NULL; } c_nnseti(pnam, ival); Py_INCREF(Py_None); return Py_None; } static char nat_c_nngeti__doc__[] = " \n\ \n\ geti - Retreive an int valued parameter \n\ \n\ geti is called to obtain current values for any of the int valued control parameters. \n\ \n\ Prototype: \n\ \n\ extern void c_nngeti(char pnam, int ival); \n\ \n\ Call from Python: \n\ \n\ ival = geti(pnam) \n\ \n\ where: \n\ \n\ pnam -- the name of the control parameter which is assigned an int value. \n\ \n\ ival -- the value currently assigned to the control parameter whose name is pointed to by pnam. \n\ \n\ "; static PyObject *nat_c_nngeti(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ char *pnam; /* the name of the control parameter whose value is to be retrieved */ /* fields required by call to c function*/ int ival; /* the value currently assigned to the control parameter whose name is pointed to by pnam */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "s", &pnam)) { PyErr_SetString(PyExc_TypeError, "Pass to nngeti is wrong.\n"); return NULL; } c_nngeti(pnam, &ival); return Py_BuildValue("i", ival); } static char nat_c_nnsetr__doc__[] = " \n\ \n\ setr - Set float valued parameters \n\ \n\ setr is used to set values for any of the control parameters that take float values. The \n\ values set by setr remain in effect until changed by subsequent calls to setr. \n\ \n\ Prototype: \n\ \n\ extern void c_nnsetr(char pnam, float fval); \n\ \n\ Call from Python: \n\ \n\ setr(pnam, fval) \n\ \n\ where: \n\ \n\ pnam -- the name of the control parameter to be assigned an float value. \n\ \n\ fval -- the value to be assigned to the control parameter whose name is pointed to by pnam. \n\ \n\ "; static PyObject *nat_c_nnsetr(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ char *pnam; /* the name of the control parameter to be assigned a float value */ float fval; /* value to be assigned to the control parameter whose name is pointed to by pnam */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "sf", &pnam, &fval)) { PyErr_SetString(PyExc_TypeError, "Pass to nnsetr is wrong.\n"); return NULL; } c_nnsetr(pnam, fval); Py_INCREF(Py_None); return Py_None; } static char nat_c_nngetr__doc__[] = " \n\ \n\ getr - Retreive an float valued parameter \n\ \n\ getr is called to obtain current values for any of the float valued control parameters. \n\ \n\ Prototype: \n\ \n\ extern void c_nngetr(char pnam, int fval); \n\ \n\ Call from Python: \n\ \n\ fval = getr(pnam) \n\ \n\ where: \n\ \n\ pnam -- the name of the control parameter which is assigned a float value. \n\ \n\ fval -- the value currently assigned to the control parameter whose name is pointed to by pnam. \n\ \n\ "; static PyObject *nat_c_nngetr(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ char *pnam; /* the name of the control parameter whose value is to be retrieved */ /* fields required by call to c function*/ float fval; /* the value currently assigned to the control parameter whose name is pointed to by pnam */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "s", &pnam)) { PyErr_SetString(PyExc_TypeError, "Pass to nngetr is wrong.\n"); return NULL; } c_nngetr(pnam, &fval); return Py_BuildValue("f", fval); } static char nat_c_nnsetc__doc__[] = " \n\ \n\ setc - Set char valued parameters \n\ \n\ setc is used to set values for any of the control parameters that take string values. The \n\ values set by setc remain in effect until changed by subsequent calls to setc. \n\ \n\ Prototype: \n\ \n\ extern void c_nnsetc(char pnam, char cval); \n\ \n\ Call from Python: \n\ \n\ setc(pnam, cval) \n\ \n\ where: \n\ \n\ pnam -- the name of the control parameter to be assigned a char value. \n\ \n\ cval -- the value to be assigned to the control parameter whose name is pointed to by pnam. \n\ \n\ "; static PyObject *nat_c_nnsetc(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ char *pnam; /* the name of the control parameter to be assigned a char value */ char *cval; /* value to be assigned to the control parameter whose name is pointed to by pnam */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "ss", &pnam, &cval)) { PyErr_SetString(PyExc_TypeError, "Pass to nnsetc is wrong.\n"); return NULL; } c_nnsetc(pnam, cval); Py_INCREF(Py_None); return Py_None; } static char nat_c_nngetc__doc__[] = " \n\ \n\ getc - Retreive an char valued parameter \n\ \n\ getc is called to obtain current values for any of the string valued control parameters. \n\ \n\ Prototype: \n\ \n\ extern void c_nngetc(char pnam, char cval); \n\ \n\ Call from Python: \n\ \n\ cval = getc(pnam) \n\ \n\ where: \n\ \n\ pnam -- the name of the control parameter which is assigned a string value. \n\ \n\ cval -- the value currently assigned to the control parameter whose name is pointed to by pnam. \n\ \n\ "; static PyObject *nat_c_nngetc(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ char *pnam; /* the name of the control parameter whose value is to be retrieved */ /* fields required by call to c function*/ char cval[128]; /* the value currently assigned to the control parameter whose name is pointed to by pnam */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "s", &pnam)) { PyErr_SetString(PyExc_TypeError, "Pass to nngetc is wrong.\n"); return NULL; } c_nngetc(pnam, cval); return Py_BuildValue("s", cval); } static char nat_c_nngetaspects__doc__[] = " \n\ \n\ getaspects - Retreive aspect values, if calculated \n\ \n\ getaspects is called to retrieve an aspect, in single-precision, at a specified coordinate \n\ value. For further details see the module on computing aspects and slopes. \n\ \n\ Prototype: \n\ \n\ extern void c_nngetaspects(int row, int column, float aspect, int ier); \n\ \n\ Call from Python: \n\ \n\ aspect, ier = getaspects(row, column) \n\ \n\ where: \n\ \n\ row -- a subscript indexing the first dimenioned variable in the 2D grid array returned from \n\ the most recent call to natgrids. \n\ \n\ column -- a subscript indexing the second dimenioned variable in the 2D grid array returned \n\ from the most recent call to natgrids. \n\ \n\ aspect -- the aspect at the grid point z[i][j], where z is the output grid in the most recent \n\ call to natgrids. \n\ \n\ ier -- an error return value. If ier is returned as 0, then no errors were detected. If ier \n\ is non-zero, then refer to the list in the error table for details. \n\ \n\ "; static PyObject *nat_c_nngetaspects(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ int row; /* A subscript indexing the first dimenioned variable in the 2D grid array returned from the most recent call to c_natgrids */ int column; /* A subscript indexing the second dimenioned variable in the 2D grid array returned from the most recent call to c_natgrids */ /* fields required by call to c function*/ float aspect; /* the aspect at the grid point z[i][j], where z is the output grid in the most recent call to c_natgrids. */ int ier; /* An error return value. If *ier is returned as 0, then no errors were detected. If *ier is non-zero, then refer to the list in the error table for details. */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "ii", &row, &column)) { PyErr_SetString(PyExc_TypeError, "Pass to nngetaspects is wrong.\n"); return NULL; } c_nngetaspects(row, column, &aspect, &ier); return Py_BuildValue("fi", aspect, ier); } static char nat_c_nngetslopes__doc__[] = " \n\ \n\ getslopes - Retreive slope values, if calculated \n\ \n\ getslopes is called to retrieve a slope, in single-precision, at a specified coordinate \n\ value. For further details see the module on computing slopes and slopes. \n\ \n\ Prototype: \n\ \n\ extern void c_nngetslopes(int row, int column, float slope, int ier); \n\ \n\ Call from Python: \n\ \n\ slope, ier = getslopes(row, column) \n\ \n\ where: \n\ \n\ row -- a subscript indexing the first dimenioned variable in the 2D grid array returned from \n\ the most recent call to natgrids. \n\ \n\ column -- a subscript indexing the second dimenioned variable in the 2D grid array returned \n\ from the most recent call to natgrids. \n\ \n\ slope -- the slope at the grid point z[i][j], where z is the output grid in the most recent \n\ call to natgrids. \n\ \n\ ier -- an error return value. If ier is returned as 0, then no errors were detected. If ier \n\ is non-zero, then refer to the list in the error table for details. \n\ \n\ "; static PyObject *nat_c_nngetslopes(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ int row; /* A subscript indexing the first dimenioned variable in the 2D grid array returned from the most recent call to c_natgrids */ int column; /* A subscript indexing the second dimenioned variable in the 2D grid array returned from the most recent call to c_natgrids */ /* fields required by call to c function*/ float slope; /* the slope at the grid point z[i][j], where z is the output grid in the most recent call to c_natgrids. */ int ier; /* An error return value. If *ier is returned as 0, then no errors were detected. If *ier is non-zero, then refer to the list in the error table for details. */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "ii", &row, &column)) { PyErr_SetString(PyExc_TypeError, "Pass to nngetslopes is wrong.\n"); return NULL; } c_nngetslopes(row, column, &slope, &ier); return Py_BuildValue("fi", slope, ier); } static char nat_c_nnpntinits__doc__[] = " \n\ \n\ pntinits - Enter single-point mode \n\ \n\ This function calculates all naturnal neighbor relationships in an input data array and sets \n\ some internal parameters so that pnts can be called to interpolate at individual points. \n\ \n\ Prototype: \n\ \n\ extern void c_nnpntinits(int row, float x[], float y[], float z[]); \n\ \n\ Call from Python: \n\ \n\ pntinits(n, x, y, z) \n\ \n\ where: \n\ \n\ n -- the number of input data points \n\ \n\ x -- array of size npnts containing the x coordinates of the input data points \n\ \n\ y -- array of size npnts containing the y coordinates of the input data points \n\ \n\ z -- array of size npnts containing the functional values of the input data points. That is, \n\ z[j] is the value of the input function at coordinate (x[j], y[j]), for 0 <= j < npnts. \n\ \n\ "; static PyObject *nat_c_nnpntinits(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ int npnts; /* the number of input data points (npnts > 3 )*/ PyArrayObject *object_x; /* object pointer containing the x coordinates of the input data points */ PyArrayObject *object_y; /* object pointer containing the y coordinates of the input data points */ PyArrayObject *object_z; /* object pointer containing the functional values at the input data points */ /* declarations for writes to a file */ FILE *fp; /* File used in ascii write */ char *title[3] = {"x", "y ", "z"}; /* Titles for print to file */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "iOOO", &npnts, &object_x, &object_y, &object_z)) { PyErr_SetString(PyExc_TypeError, "Pass to nnpntinits is wrong.\n"); return NULL; } /* -------- write input data to a file ----------- */ c_nnpntinits(npnts, (float *)object_x->data, (float *)object_y->data, (float *)object_z->data); if (PRINTPNTINITS == 1) { /* -------- print data to the screen ---------- */ printf("npnts: %d\n", npnts); print_float(npnts, title[0], (float *)object_x->data); print_float(npnts, title[1], (float *)object_x->data); print_float(npnts, title[2], (float *)object_z->data); } if (WRITEPNTINITS == 1) { /* -------- write data to a file ----------- */ if((fp = fopen("pntinits.asc", "w")) == NULL) { PyErr_SetString(PyExc_IOError, "Can not open file to write checks"); return NULL; } fprintf(fp, "npnts: %d\n", npnts); write_float(npnts, title[0], fp, (float *)object_x->data); write_float(npnts, title[1], fp, (float *)object_y->data); write_float(npnts, title[2], fp, (float *)object_z->data); fclose(fp); } Py_INCREF(Py_None); return Py_None; } static char nat_c_nnpnts__doc__[] = " \n\ \n\ pnts - Interpolate at a single point \n\ \n\ This function is called to interpolate at a specified point. Before calling this function, \n\ pntinits must be called. \n\ \n\ Prototype: \n\ \n\ extern void c_nnpnts(float x, float y, float z); \n\ \n\ Call from Python: \n\ \n\ z = pnts(x, y) \n\ \n\ where: \n\ \n\ x -- x coordinate of the point where interpolation is desired. \n\ \n\ y -- y coordinate of the point where interpolation is desired. \n\ \n\ z -- the interpolated functional value at (x,y). \n\ \n\ "; static PyObject *nat_c_nnpnts(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ float x; /* x coordinate of the point where interpolation is desired */ float y; /* y coordinate of the point where interpolation is desired */ /* fields required by call to c function*/ float z; /* the interpolated functional value at (x,y) */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "ff", &x, &y)) { PyErr_SetString(PyExc_TypeError, "Pass to nnpnts is wrong.\n"); return NULL; } c_nnpnts(x, y, &z); return Py_BuildValue("f", z); } static char nat_c_nnpntend__doc__[] = " \n\ \n\ pntend - Exit single-point mode \n\ \n\ This function is called to terminate interpolation at single points. It is called after having \n\ made previous calls to pntinits and pnts. \n\ \n\ Prototype: \n\ \n\ extern void c_nnpntend(); \n\ \n\ Call from Python: \n\ \n\ pntend() \n\ \n\ "; static PyObject *nat_c_nnpntend(PyObject *self, PyObject *args) { /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "")) { PyErr_SetString(PyExc_TypeError, "Pass to nnpntend is wrong.\n"); return NULL; } c_nnpntend(); Py_INCREF(Py_None); return Py_None; } static char nat_c_natgridd__doc__[] = " \n\ \n\ natgridd - Primary gridding function \n\ \n\ natgridd is the C double-precision function that does an interpolation from 2D random data \n\ to a output grid. natgridd is called after all the desired values for the control parameters \n\ have been set using the procedures seti, setr and setc. \n\ \n\ natgridd returns a pointer to a linear array of data that is the interpolated grid stored in \n\ row-major order. That is, if out is declared as \n\ double out; \n\ and we set: \n\ out = natgridd(npnts, x, y, z, numxout, numyout, xo, yo, &ier); \n\ then out[i numyout + j] is the interpolated value at coordinate point (xo[i], y[j]) for \n\ 0 <= i < numxout and 0 <= j < numyout. The space for out is allocated internal to natgridd \n\ and is numxout numyout floats in size. \n\ \n\ Prototype: \n\ \n\ extern double c_natgridd(int n, double x[], double y[], double z[], int numxout, \n\ int numyout, double xo[], double yo[], int ier); \n\ \n\ Call from Python: \n\ \n\ out, ier = natgridd(npnts, x, y, z, numxout, numyout, xi, yi) \n\ \n\ where: \n\ \n\ npnts -- the number of input data points \n\ \n\ x -- array of size npnts containing the x coordinates of the input data points \n\ \n\ y -- array of size npnts containing the y coordinates of the input data points \n\ \n\ z -- array of size npnts containing the functional values of the input data points. That is, \n\ z[j] is the value of the input function at coordinate (x[j], y[j]), for 0 <= j < npnts. \n\ \n\ numxout -- the number of x values in the output grid, \n\ \n\ numyout -- the number of y values in the output grid. \n\ \n\ xo -- array of size numxout containing the x coordinates of the output data grid. The values \n\ of xo must be increasing, but need not be equally spaced. \n\ \n\ yo -- array of size numyout containing the y coordinates of the output data grid. The values \n\ of yo must be increasing, but need not be equally spaced. \n\ \n\ "; static PyObject *nat_c_natgridd(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ int npnts; /* the number of input data points */ int numxout; /* the number of x values in the output grid */ int numyout; /* the number of y values in the output grid */ PyArrayObject *object_x; /* object pointer containing the x coordinates of the input data points */ PyArrayObject *object_y; /* object pointer containing the y coordinates of the input data points */ PyArrayObject *object_z; /* Object pointer containing the functional values of the input data points */ PyArrayObject *object_xo; /* object pointer containing the x coordinates of the output data grid */ PyArrayObject *object_yo; /* object pointer containing the y coordinates of the output data grid */ /* fields required by call to c function*/ double *out; /* An array with the interpolated values at the coordinate points */ int ier; /* An error return value. If *ier is returned as 0, then no errors were detected. If *ier is non-zero, then refer to the list in the error table for details. */ /* fields required to construct the return of result to python */ PyArrayObject *object_out; /* array object to accept the data and return it to Python */ npy_intp dims[2]; /* used in creating object_out */ /* declarations for writes to a file */ FILE *fp; /* File used in ascii write */ char *title[6] = {"x", "y ", "z", "xo", "yo", "result"}; /* Titles for print to file */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "iOOOiiOO", &npnts, &object_x, &object_y, &object_z, &numxout, &numyout, &object_xo, &object_yo)) { PyErr_SetString(PyExc_TypeError, "Pass to natgridd is wrong.\n"); return NULL; } out = (double *)c_natgridd(npnts, (double *)object_x->data, (double *)object_y->data, (double *)object_z->data, numxout, numyout, (double *)object_xo->data, (double *)object_yo->data, &ier); /* -------- create a NumPy array housing the c language data out ----------- */ dims[0] = numxout; dims[1] = numyout; object_out = (PyArrayObject *)PyArray_NewFromDescr(&PyArray_Type, PyArray_DescrFromType(PyArray_DOUBLE), 2, dims, NULL, (char *)out, NPY_ARRAY_CARRAY, NULL); if (PRINTNATGRIDS == 1) { /* -------- print data to the screen ---------- */ printf("npnts: %d\n", npnts); printf("numxout: %d\n", numxout); printf("numyout: %d\n", numyout); print_double(npnts, title[0], (double *)object_x->data); print_double(npnts, title[1], (double *)object_x->data); print_double(npnts, title[2], (double *)object_z->data); print_double(numxout, title[3], (double *)object_xo->data); print_double(numyout, title[4], (double *)object_yo->data); print_double(numxout*numyout, title[5], (double *)object_out->data); } if (WRITENATGRIDS == 1) { /* -------- write data to a file ----------- */ if((fp = fopen("natgridd.asc", "w")) == NULL) { PyErr_SetString(PyExc_IOError, "Can not open file to write checks"); return NULL; } fprintf(fp, "npnts: %d\n", npnts); fprintf(fp, "numxout: %d\n", numxout); fprintf(fp, "numyout: %d\n", numyout); write_double(npnts, title[0], fp, (double *)object_x->data); write_double(npnts, title[1], fp, (double *)object_y->data); write_double(npnts, title[2], fp, (double *)object_z->data); write_double(numxout, title[3], fp, (double *)object_xo->data); write_double(numyout, title[4], fp, (double *)object_yo->data); write_double(numxout*numyout, title[5], fp, (double *)object_out->data); fclose(fp); } return Py_BuildValue(("Oi"), object_out, ier); } static char nat_c_nnsetrd__doc__[] = " \n\ \n\ setrd - Set double-precision parameters values \n\ \n\ setrd is used to set values for any of the control parameters that take double-precision \n\ values. The values set by setd remain in effect until changed by subsequent calls to \n\ setrd. \n\ \n\ Prototype: \n\ \n\ extern void c_nnsetrd(char pnam, double dval); \n\ \n\ Call from Python: \n\ \n\ setrd(pnam, dval) \n\ \n\ where: \n\ \n\ pnam -- the name of the control parameter to be assigned an double-precision value. \n\ \n\ dval -- the value to be assigned to the control parameter whose name is pointed to by pnam. \n\ \n\ "; static PyObject *nat_c_nnsetrd(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ char *pnam; /* the name of the control parameter to be assigned a double value */ double dval; /* value to be assigned to the control parameter whose name is pointed to by pnam */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "sd", &pnam, &dval)) { PyErr_SetString(PyExc_TypeError, "Pass to nnsetrd is wrong.\n"); return NULL; } c_nnsetrd(pnam, dval); Py_INCREF(Py_None); return Py_None; } static char nat_c_nngetrd__doc__[] = " \n\ \n\ getrd - Retreive an double precision parameter \n\ \n\ getrd is called to obtain current values for any of the double-precision control parameters. \n\ \n\ Prototype: \n\ \n\ extern void c_nngetrd(char pnam, int dval); \n\ \n\ Call from Python: \n\ \n\ dval = getrd(pnam) \n\ \n\ where: \n\ \n\ pnam -- the name of the control parameter which is assigned a double precision value. \n\ \n\ dval -- the value currently assigned to the control parameter whose name is pointed to by pnam. \n\ \n\ "; static PyObject *nat_c_nngetrd(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ char *pnam; /* the name of the control parameter whose value is to be retrieved */ /* fields required by call to c function*/ double dval; /* the value currently assigned to the control parameter whose name is pointed to by pnam */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "s", &pnam)) { PyErr_SetString(PyExc_TypeError, "Pass to nngetrd is wrong.\n"); return NULL; } c_nngetrd(pnam, &dval); return Py_BuildValue("d", dval); } static char nat_c_nngetaspectd__doc__[] = " \n\ \n\ getaspectd - Retreive aspect values, if calculated \n\ \n\ getaspectd is called to retrieve an aspect, in double-precision, at a specified coordinate \n\ value. For further details see the module on computing aspects and slopes. \n\ \n\ Prototype: \n\ \n\ extern void c_nngetaspectd(int row, int column, double aspect, int ier); \n\ \n\ Call from Python: \n\ \n\ aspect, ier = getaspectd(row, column) \n\ \n\ where: \n\ \n\ row -- a subscript indexing the first dimenioned variable in the 2D grid array returned from \n\ the most recent call to natgridd. \n\ \n\ column -- a subscript indexing the second dimenioned variable in the 2D grid array returned \n\ from the most recent call to natgridd. \n\ \n\ aspect -- the aspect at the grid point z[i][j], where z is the output grid in the most recent \n\ call to natgridd. \n\ \n\ ier -- an error return value. If ier is returned as 0, then no errors were detected. If ier \n\ is non-zero, then refer to the list in the error table for details. \n\ \n\ "; static PyObject *nat_c_nngetaspectd(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ int row; /* A subscript indexing the first dimenioned variable in the 2D grid array returned from the most recent call to c_natgridd */ int column; /* A subscript indexing the second dimenioned variable in the 2D grid array returned from the most recent call to c_natgridd */ /* fields required by call to c function*/ double aspect; /* the aspect at the grid point z[i][j], where z is the output grid in the most recent call to c_natgridd. */ int ier; /* An error return value. If *ier is returned as 0, then no errors were detected. If *ier is non-zero, then refer to the list in the error table for details. */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "ii", &row, &column)) { PyErr_SetString(PyExc_TypeError, "Pass to nngetaspectd is wrong.\n"); return NULL; } c_nngetaspectd(row, column, &aspect, &ier); return Py_BuildValue("di", aspect, ier); } static char nat_c_nngetsloped__doc__[] = " \n\ \n\ getsloped - Retreive slope values, if calculated \n\ \n\ getsloped is called to retrieve a slope, in single precision, at a specified coordinate \n\ value. For further details see the module on computing slopes and slopes. \n\ \n\ Prototype: \n\ \n\ extern void c_nngetsloped(int row, int column, double slope, int ier); \n\ \n\ Call from Python: \n\ \n\ slope, ier = getsloped(row, column) \n\ \n\ where: \n\ \n\ row -- a subscript indexing the first dimenioned variable in the 2D grid array returned from \n\ the most recent call to natgridd. \n\ \n\ column -- a subscript indexing the second dimenioned variable in the 2D grid array returned \n\ from the most recent call to natgridd. \n\ \n\ slope -- the slope at the grid point z[i][j], where z is the output grid in the most recent \n\ call to natgridd. \n\ \n\ ier -- an error return value. If ier is returned as 0, then no errors were detected. If ier \n\ is non-zero, then refer to the list in the error table for details. \n\ \n\ "; static PyObject *nat_c_nngetsloped(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ int row; /* A subscript indexing the first dimenioned variable in the 2D grid array returned from the most recent call to c_natgridd */ int column; /* A subscript indexing the second dimenioned variable in the 2D grid array returned from the most recent call to c_natgridd */ /* fields required by call to c function*/ double slope; /* the slope at the grid point z[i][j], where z is the output grid in the most recent call to c_natgridd. */ int ier; /* An error return value. If *ier is returned as 0, then no errors were detected. If *ier is non-zero, then refer to the list in the error table for details. */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "ii", &row, &column)) { PyErr_SetString(PyExc_TypeError, "Pass to nngetsloped is wrong.\n"); return NULL; } c_nngetsloped(row, column, &slope, &ier); return Py_BuildValue("di", slope, ier); } static char nat_c_nnpntinitd__doc__[] = " \n\ \n\ pntinitd - Enter single-point mode \n\ \n\ This function calculates all naturnal neighbor relationships in an input data array and sets \n\ some internal parameters so that pnts can be called to interpolate at individual points. \n\ \n\ Prototype: \n\ \n\ extern void c_nnpntinitd(int row, double x[], double y[], double z[]); \n\ \n\ Call from Python: \n\ \n\ pntinitd(n, x, y, z) \n\ \n\ where: \n\ \n\ npnts -- the number of input data points \n\ \n\ x -- array of size npnts containing the x coordinates of the input data points \n\ \n\ y -- array of size npnts containing the y coordinates of the input data points \n\ \n\ z -- array of size npnts containing the functional values of the input data points. That is, \n\ z[j] is the value of the input function at coordinate (x[j], y[j]), for 0 <= j < npnts. \n\ \n\ "; static PyObject *nat_c_nnpntinitd(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ int npnts; /* the number of input data points (npnts > 3)*/ PyArrayObject *object_x; /* object pointer containing the x coordinates of the input data points */ PyArrayObject *object_y; /* object pointer containing the y coordinates of the input data points */ PyArrayObject *object_z; /* object pointer containing the functional values at the input data points */ /* declarations for writes to a file */ FILE *fp; /* File used in ascii write */ char *title[3] = { "x", "y ", "z" }; /* Titles for print to file */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "iOOO", &npnts, &object_x, &object_y, &object_z)) { PyErr_SetString(PyExc_TypeError, "Pass to nnpntinitd is wrong.\n"); return NULL; } c_nnpntinitd(npnts, (double *)object_x->data, (double *)object_y->data, (double *)object_z->data); if (PRINTPNTINITS == 1) { /* -------- print data to the screen ---------- */ printf("npnts: %d\n", npnts); print_double(npnts, title[0], (double *)object_x->data); print_double(npnts, title[1], (double *)object_x->data); print_double(npnts, title[2], (double *)object_z->data); } if (WRITEPNTINITS == 1) { /* -------- write data to a file ----------- */ if((fp = fopen("pntinitd.asc", "w")) == NULL) { PyErr_SetString(PyExc_IOError, "Can not open file to write checks"); return NULL; } fprintf(fp, "npnts: %d\n", npnts); write_double(npnts, title[0], fp, (double *)object_x->data); write_double(npnts, title[1], fp, (double *)object_y->data); write_double(npnts, title[2], fp, (double *)object_z->data); fclose(fp); } Py_INCREF(Py_None); return Py_None; } static char nat_c_nnpntd__doc__[] = " \n\ \n\ pntd - Interpolate at a single point \n\ \n\ This function is called to interpolate at a specified point. Before calling this function, \n\ pntinitd must be called. \n\ \n\ Prototype: \n\ \n\ extern void c_nnpnts(double x, double y, double z); \n\ \n\ Call from Python: \n\ \n\ z = pntd(x, y) \n\ \n\ where: \n\ \n\ x -- x coordinate of the point where interpolation is desired. \n\ \n\ y -- y coordinate of the point where interpolation is desired. \n\ \n\ z -- the interpolated functional value at (x,y). \n\ \n\ "; static PyObject *nat_c_nnpntd(PyObject *self, PyObject *args) { /* ----------------------- Declarations ------------------------------------*/ /* fields which are passed from Python in the args tuple */ double x; /* x coordinate of the point where interpolation is desired */ double y; /* y coordinate of the point where interpolation is desired */ /* fields required by call to c function*/ double z; /* the interpolated functional value at (x,y) */ /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "dd", &x, &y)) { PyErr_SetString(PyExc_TypeError, "Pass to nnpntd is wrong.\n"); return NULL; } c_nnpntd(x, y, &z); return Py_BuildValue("d", z); } static char nat_c_nnpntendd__doc__[] = " \n\ \n\ pntend - Exit single-point mode \n\ \n\ This function is called to terminate interpolation at single points. It is called after having \n\ made previous calls to pntinitd and pntd. \n\ \n\ Prototype: \n\ \n\ extern void c_nnpntendd(); \n\ \n\ Call from Python: \n\ \n\ pntendd() \n\ \n\ "; static PyObject *nat_c_nnpntendd(PyObject *self, PyObject *args) { /* ----------------------- Start Execution ------------------------------------*/ if(!PyArg_ParseTuple(args, "")) { PyErr_SetString(PyExc_TypeError, "Pass to nnpntendd is wrong.\n"); return NULL; } c_nnpntendd(); Py_INCREF(Py_None); return Py_None; } /************************************************************************* * * * METHOD REGISTRATION TABLE: NAME-STRING -> FUNCTION-POINTER * * * \**************************************************************************/ static struct PyMethodDef nat_methods[] = { { "natgrids", (PyCFunction)nat_c_natgrids, METH_VARARGS, nat_c_natgrids__doc__ }, { "seti", (PyCFunction)nat_c_nnseti, METH_VARARGS, nat_c_nnseti__doc__ }, { "geti", (PyCFunction)nat_c_nngeti, METH_VARARGS, nat_c_nngeti__doc__ }, { "setr", (PyCFunction)nat_c_nnsetr, METH_VARARGS, nat_c_nnsetr__doc__ }, { "getr", (PyCFunction)nat_c_nngetr, METH_VARARGS, nat_c_nngetr__doc__ }, { "setc", (PyCFunction)nat_c_nnsetc, METH_VARARGS, nat_c_nnsetc__doc__ }, { "getc", (PyCFunction)nat_c_nngetc, METH_VARARGS, nat_c_nngetc__doc__ }, { "getaspects", (PyCFunction)nat_c_nngetaspects, METH_VARARGS, nat_c_nngetaspects__doc__}, { "getslopes", (PyCFunction)nat_c_nngetslopes, METH_VARARGS, nat_c_nngetslopes__doc__ }, { "pntinits", (PyCFunction)nat_c_nnpntinits, METH_VARARGS, nat_c_nnpntinits__doc__ }, { "pnts", (PyCFunction)nat_c_nnpnts, METH_VARARGS, nat_c_nnpnts__doc__ }, { "pntend", (PyCFunction)nat_c_nnpntend, METH_VARARGS, nat_c_nnpntend__doc__ }, { "natgridd", (PyCFunction)nat_c_natgridd, METH_VARARGS, nat_c_natgridd__doc__ }, { "setrd", (PyCFunction)nat_c_nnsetrd, METH_VARARGS, nat_c_nnsetrd__doc__ }, { "getrd", (PyCFunction)nat_c_nngetrd, METH_VARARGS, nat_c_nngetrd__doc__ }, { "getaspectd", (PyCFunction)nat_c_nngetaspectd, METH_VARARGS, nat_c_nngetaspectd__doc__}, { "getsloped", (PyCFunction)nat_c_nngetsloped, METH_VARARGS, nat_c_nngetsloped__doc__ }, { "pntinitd", (PyCFunction)nat_c_nnpntinitd, METH_VARARGS, nat_c_nnpntinitd__doc__ }, { "pntd", (PyCFunction)nat_c_nnpntd, METH_VARARGS, nat_c_nnpntd__doc__ }, { "pntendd", (PyCFunction)nat_c_nnpntendd, METH_VARARGS, nat_c_nnpntendd__doc__ }, { NULL, NULL, 0, NULL } }; /************************************************************************* * * * INITIALIZATION FUNCTION * * * \**************************************************************************/ #if PY_MAJOR_VERSION >= 3 static struct PyModuleDef natgridmodule = { PyModuleDef_HEAD_INIT, "natgridmodule", /* name of module */ "", /* module documentation, may be NULL */ -1, /* size of per-interpreter state of the module, or -1 if the module keeps state in global variables. */ nat_methods }; PyMODINIT_FUNC PyInit_natgridmodule(void) { import_array(); return PyModule_Create(&natgridmodule); } #else void initnatgridmodule() { PyObject *m, *d; /* create this module and add the functions */ m = Py_InitModule("natgridmodule", nat_methods); import_array(); /* add symbolic constants to the module */ d = PyModule_GetDict(m); ErrorObject = Py_BuildValue("s", "natgridmodule.error"); PyDict_SetItemString(d, "error", ErrorObject); /* check for errors */ if(PyErr_Occurred()) Py_FatalError("can't initialize module natgridmodule"); } #endif /************************************************************************* * * * C FUNCTIONS USED IN THE C-EXTENSIONS * * \**************************************************************************/ /******************************************************************************** * Function: write_int.c * * Procedure: Uses 5d format to write 6 numbers per line * Purpose: write ascii data for one horizontal field or one cross section * * Passed: Data, pointer to start of data ********************************************************************************/ void write_int(int size, char *title, FILE *fp, int *data) { int n; /* data counter */ int line; /* counter to insert a line after each six numbers */ int *d; /* pointer to increment through data */ d = data; line = 0; fprintf(fp, "\n%s\n", title); for(n=0; n= xil) && (xend <= xir) ) { horilap = 1.01 * (((xstart-xil) < (xir-xend)) ? (xir-xend) : (xstart-xil)); } else if ( (xstart >= xil) && (xend >= xir) ) { horilap = 1.01 * (xstart-xil); } else if ( (xstart <= xil) && (xend <= xir) ) { horilap = 1.01 * (xir-xend); } else if ( (xstart <= xil) && (xir <= xend) ) { horilap = 0.; } } if (horilap <= EPSILON) { horilap = 0.01 * (xend - xstart); } if (vertlap EQ -1.) { if ( (yib <= ystart) && (yend <= yit) ) { vertlap = 1.01 * (((ystart-yib) < (yit-yend)) ? (yit-yend) : (ystart-yib)); } else if ( (ystart <= yib) && (yend <= yit) ) { vertlap = 1.01 * (yit-yend); } else if ( (yib <= ystart) && (yit <= yend) ) { vertlap = 1.01 * (ystart-yib); } else if ( (ystart <= yib) && (yit <= yend) ) { vertlap = 0.; } } if (vertlap <= EPSILON) { vertlap = 0.01 * (yend - ystart); } } double armin(int num, float *x) { int i; float amin; amin = x[0]; for (i = 1 ; i < num ; i++) if (x[i] < amin) amin = x[i]; return(amin); } double armax(int num, float *x) { int i; float amax; amax = x[0]; for (i = 1 ; i < num ; i++) if (x[i] > amax) amax = x[i]; return(amax); } PyBDSF-1.10.1/natgrid/Src/nncrunch.c000066400000000000000000000772501420247104600167750ustar00rootroot00000000000000/* * The code in this file is based on code written and * copyrighted (C) by Dave Watson. Dr. Watson retains the * copyright to his original code. Augmentations and changes * to Dr. Watson's code are copyrighted (C) by UCAR, 1997. */ #include #include "nncheads.h" #include "nnchead.h" #include "nntypes.h" #include "nnexver.h" #include "nnuheads.h" #include "nnuhead.h" void Gradient() { int i0, i1, i2, i3; double u2, wxd, wyd, wxde, wydn, xc, xe, xn; for (i0=0; i0nextsimp; for (i2=0; i2<2; i2++) for (i3=0; i3<3; i3++) work3[i2][i3] = points[cursimp->vert[0]][i3] - points[cursimp->vert[i2+1]][i3]; work3[2][0] = work3[0][1] * work3[1][2] - work3[1][1] * work3[0][2]; work3[2][1] = work3[0][2] * work3[1][0] - work3[1][2] * work3[0][0]; work3[2][2] = work3[0][0] * work3[1][1] - work3[1][0] * work3[0][1]; u2 = 1; if (work3[2][2]<0) u2 = -1; xx += sqrt(SQ(work3[2][0]) + SQ(work3[2][1]) + SQ(work3[2][2])); for (i2=0; i2<3; i2++) points[i0][i2+3] += work3[2][i2] * u2; } xx = 1 - sqrt(SQ(points[i0][3]) + SQ(points[i0][4]) + SQ(points[i0][5])) / xx; points[i0][3] /= points[i0][5]; points[i0][4] /= points[i0][5]; points[i0][5] = xx; } } for (i0=0; i0<3; i0++) { points[datcnt+i0][3] = -bbb; points[datcnt+i0][4] = -ccc; points[datcnt+i0][5] = 1; } } void FindNeigh(ipt) int ipt; { int i0, i1, i2, i3, j1, j2, j3, j4, j5; if (rootsimp->nextsimp EQ NULL) { rootsimp->nextsimp = IMakeSimp(); if (error_status) return; } cursimp = rootsimp->nextsimp; cursimp->vert[0] = datcnt; cursimp->vert[1] = datcnt + 1; cursimp->vert[2] = datcnt + 2; cursimp->cent[0] = cursimp->cent[1] = 0.5; cursimp->cent[2] = BIGNUM; numtri = 1; lasttemp = roottemp; for (i2=0; i2<3; i2++) { j1 = 0; if (j1 EQ i2) j1++; j2 = j1 + 1; if (j2 EQ i2) j2++; if (lasttemp->nexttemp EQ NULL) { lasttemp->nexttemp = IMakeTemp(); if (error_status) return; } lasttemp = lasttemp->nexttemp; lasttemp->end[0] = cursimp->vert[j1]; lasttemp->end[1] = cursimp->vert[j2]; } curtemp = roottemp; for (i1=0; i1<3; i1++) { curtemp = curtemp->nexttemp; for (i2=0; i2<2; i2++) { work3[i2][0] = points[curtemp->end[i2]][0] - points[ipt][0]; work3[i2][1] = points[curtemp->end[i2]][1] - points[ipt][1]; work3[i2][2] = work3[i2][0] * (points[curtemp->end[i2]][0] + points[ipt][0]) / 2 + work3[i2][1] * (points[curtemp->end[i2]][1] + points[ipt][1]) / 2; } xx = work3[0][0] * work3[1][1] - work3[1][0] * work3[0][1]; cursimp->cent[0] = (work3[0][2] * work3[1][1] - work3[1][2] * work3[0][1]) / xx; cursimp->cent[1] = (work3[0][0] * work3[1][2] - work3[1][0] * work3[0][2]) / xx; cursimp->cent[2] = SQ(points[ipt][0] - cursimp->cent[0]) + SQ(points[ipt][1] - cursimp->cent[1]); cursimp->vert[0] = curtemp->end[0]; cursimp->vert[1] = curtemp->end[1]; cursimp->vert[2] = ipt; lastsimp = cursimp; if (cursimp->nextsimp EQ NULL) { cursimp->nextsimp = IMakeSimp(); if (error_status) return; } cursimp = cursimp->nextsimp; } numtri += 2; for (i0=0; i0nextsimp; xx = cursimp->cent[2] - SQ(points[i0][0] - cursimp->cent[0]); if (xx > 0) { xx -= SQ(points[i0][1] - cursimp->cent[1]); if (xx > 0) { j4--; for (i2=0; i2<3; i2++) { j1 = 0; if (j1 EQ i2) j1++; j2 = j1 + 1; if (j2 EQ i2) j2++; if (j3>1) { j5 = j3; curtemp = roottemp; for (i3=0; i3<=j5; i3++) { prevtemp = curtemp; curtemp = curtemp->nexttemp; if (cursimp->vert[j1] EQ curtemp->end[0]) { if (cursimp->vert[j2] EQ curtemp->end[1]) { if (curtemp EQ lasttemp) lasttemp = prevtemp; else { prevtemp->nexttemp = curtemp->nexttemp; curtemp->nexttemp = lasttemp->nexttemp; lasttemp->nexttemp = curtemp; } j3--; goto NextOne; } } } } if (lasttemp->nexttemp EQ NULL) { lasttemp->nexttemp = IMakeTemp(); if (error_status) return; } lasttemp = lasttemp->nexttemp; j3++; lasttemp->end[0] = cursimp->vert[j1]; lasttemp->end[1] = cursimp->vert[j2]; NextOne:; } if (cursimp EQ lastsimp) lastsimp = prevsimp; else { prevsimp->nextsimp = cursimp->nextsimp; cursimp->nextsimp = lastsimp->nextsimp; lastsimp->nextsimp = cursimp; cursimp = prevsimp; } } } } if (j3 > -1) { curtemp = roottemp; cursimp = lastsimp->nextsimp; for (i1=0; i1<=j3; i1++) { curtemp = curtemp->nexttemp; if (curtemp->end[0] EQ ipt OR curtemp->end[1] EQ ipt) { for (i2=0; i2<2; i2++) { work3[i2][0] = points[curtemp->end[i2]][0] - points[i0][0]; work3[i2][1] = points[curtemp->end[i2]][1] - points[i0][1]; work3[i2][2] = work3[i2][0] * (points[curtemp->end[i2]][0] + points[i0][0]) / 2 + work3[i2][1] * (points[curtemp->end[i2]][1] + points[i0][1]) / 2; } xx = work3[0][0] * work3[1][1] - work3[1][0] * work3[0][1]; cursimp->cent[0] = (work3[0][2] * work3[1][1] - work3[1][2] * work3[0][1]) / xx; cursimp->cent[1] = (work3[0][0] * work3[1][2] - work3[1][0] * work3[0][2]) / xx; cursimp->cent[2] = SQ(points[i0][0] - cursimp->cent[0]) + SQ(points[i0][1] - cursimp->cent[1]); cursimp->vert[0] = curtemp->end[0]; cursimp->vert[1] = curtemp->end[1]; cursimp->vert[2] = i0; lastsimp = cursimp; if (cursimp->nextsimp EQ NULL) { cursimp->nextsimp = IMakeSimp(); if (error_status) return; } cursimp = cursimp->nextsimp; j4++; } } numtri += j4; } } } for (i0=0; i0nextsimp; for (i2=0; i2<3; i2++) { if (cursimp->vert[i2] < datcnt) { if (cursimp->vert[i2] NE ipt) jndx[cursimp->vert[i2]] = 1; } else ext = 1; } } } void TriNeigh() { int i0, i1, i2, i3, j1, j2, j3, j4, j5; if (rootsimp->nextsimp EQ NULL) { rootsimp->nextsimp = IMakeSimp(); if (error_status) return; } lastsimp = cursimp = rootsimp->nextsimp; cursimp->vert[0] = datcnt; cursimp->vert[1] = datcnt + 1; cursimp->vert[2] = datcnt + 2; cursimp->cent[0] = cursimp->cent[1] = 0.5; cursimp->cent[2] = BIGNUM; numtri = 1; for (i0=0; i0nextsimp; xx = cursimp->cent[2] - SQ(points[i0][0] - cursimp->cent[0]); if (xx > 0) { xx -= SQ(points[i0][1] - cursimp->cent[1]); if (xx > 0) { for (i2=0; i2<3; i2++) { j1 = 0; if (j1 EQ i2) j1++; j2 = j1 + 1; if (j2 EQ i2) j2++; if (j3>1) { j5 = j3; curtemp = roottemp; for (i3=0; i3<=j5; i3++) { prevtemp = curtemp; curtemp = curtemp->nexttemp; if (cursimp->vert[j1] EQ curtemp->end[0]) { if (cursimp->vert[j2] EQ curtemp->end[1]) { if (curtemp EQ lasttemp) lasttemp = prevtemp; else { prevtemp->nexttemp = curtemp->nexttemp; curtemp->nexttemp = lasttemp->nexttemp; lasttemp->nexttemp = curtemp; } j3--; goto NextOne; } } } } if (lasttemp->nexttemp EQ NULL) { lasttemp->nexttemp = IMakeTemp(); if (error_status) return; } lasttemp = lasttemp->nexttemp; j3++; lasttemp->end[0] = cursimp->vert[j1]; lasttemp->end[1] = cursimp->vert[j2]; NextOne:; } if (cursimp EQ lastsimp) lastsimp = prevsimp; else { prevsimp->nextsimp = cursimp->nextsimp; cursimp->nextsimp = lastsimp->nextsimp; lastsimp->nextsimp = cursimp; cursimp = prevsimp; } } } } curtemp = roottemp; cursimp = lastsimp->nextsimp; for (i1=0; i1<=j3; i1++) { curtemp = curtemp->nexttemp; for (i2=0; i2<2; i2++) { work3[i2][0] = points[curtemp->end[i2]][0] - points[i0][0]; work3[i2][1] = points[curtemp->end[i2]][1] - points[i0][1]; work3[i2][2] = work3[i2][0] * (points[curtemp->end[i2]][0] + points[i0][0]) / 2 + work3[i2][1] * (points[curtemp->end[i2]][1] + points[i0][1]) / 2; } xx = work3[0][0] * work3[1][1] - work3[1][0] * work3[0][1]; cursimp->cent[0] = (work3[0][2] * work3[1][1] - work3[1][2] * work3[0][1]) / xx; cursimp->cent[1] = (work3[0][0] * work3[1][2] - work3[1][0] * work3[0][2]) / xx; cursimp->cent[2] = SQ(points[i0][0] - cursimp->cent[0]) + SQ(points[i0][1] - cursimp->cent[1]); cursimp->vert[0] = curtemp->end[0]; cursimp->vert[1] = curtemp->end[1]; cursimp->vert[2] = i0; lastsimp = cursimp; if (cursimp->nextsimp EQ NULL) { cursimp->nextsimp = IMakeSimp(); if (error_status) return; } cursimp = cursimp->nextsimp; } numtri += 2; } } cursimp = rootsimp; for (asum=0, i0=0; i0nextsimp; for (i1=0; i1<2; i1++) { work3[0][i1] = points[cursimp->vert[1]][i1] - points[cursimp->vert[0]][i1]; work3[1][i1] = points[cursimp->vert[2]][i1] - points[cursimp->vert[0]][i1]; } xx = work3[0][0] * work3[1][1] - work3[0][1] * work3[1][0]; if (xx < 0) { j4 = cursimp->vert[2]; cursimp->vert[2] = cursimp->vert[1]; cursimp->vert[1] = j4; if (cursimp->vert[0] < datcnt) asum -= xx / 2; } else if (cursimp->vert[0] < datcnt) asum += xx / 2; } } void CircOut() { FILE *filer; int ix,i0; struct simp *simpaddr; if (adf) { for (i0 = 0; i0 < datcnt; i0++) jndx[i0] = 1; TriNeigh(); if (error_status) return; if ((filer = fopen(tri_file,"w")) EQ (FILE *) NULL) { ErrorHnd(3, "CircOut", filee, "\n"); error_status = 3; return; } /* * Put out defaults for plot control parameters. */ fprintf(filer,"/*\n"); fprintf(filer,"/* Integer flags (I5 format).\n"); fprintf(filer,"/*\n"); fprintf(filer,"/*..+....1....+....2....+....3....+....4" "....+....5....+....6....+....7....+....8\n"); fprintf(filer," 8 - GKS workstation type " "(1=ncgm; 8=X11 window; 20=PostScript).\n"); fprintf(filer," 1 - flags whether axes should be drawn.\n"); fprintf(filer," 0 - Halfax/Grid flag (0=halfax and 1=grid)\n"); fprintf(filer," 1 - Flags whether triangulation should be drawn.\n"); fprintf(filer," 0 - Flags whether a blue dot should be drawn " "at (0.,0.) [0=no; 1=yes]\n"); fprintf(filer," 0 - Flag to indicate whether the pseudo data " "should be included in the plot.\n"); fprintf(filer," 1 - Flag indicating whether the natural " "neighbor circles are drawn.\n"); fprintf(filer," 1 - Flags whether the centers of the natural " "neighborhood circles are drawn.\n"); fprintf(filer," 1 - Flag indicating if Voronoi polygons should " "be drawn [0=no; 1=yes].\n"); fprintf(filer," 1 - Flag indicating if the original points are " "to be marked.\n"); fprintf(filer,"/*\n"); fprintf(filer,"/* Color information (3F7.3 format) as RGB triples\n"); fprintf(filer,"/*\n"); fprintf(filer,"/*..+....1....+....2....+....3....+....4" "....+....5....+....6....+....7....+....8\n"); fprintf(filer," 0.000 0.000 0.000 - background color\n"); fprintf(filer," 1.000 1.000 1.000 - foreground color " "(used for axes)\n"); fprintf(filer," 1.000 0.000 0.000 - circumcircle color\n"); fprintf(filer," 0.000 1.000 0.000 - color of circumcircle " "centers\n"); fprintf(filer," 0.000 1.000 1.000 - color for triangulation\n"); fprintf(filer," 1.000 1.000 0.000 - Voronoi polygon color\n"); fprintf(filer," 1.000 1.000 0.000 - color of vertex dots\n"); fprintf(filer," 0.000 0.000 1.000 - color of reference dot\n"); fprintf(filer," 0.000 0.000 1.000 - color for natural neighbor " "points\n"); fprintf(filer," 1.000 1.000 1.000 - color to mark points where " "natural neighbors are desired\n"); fprintf(filer,"/*\n"); fprintf(filer,"/* Scale factors (F7.3 format)\n"); fprintf(filer,"/*\n"); fprintf(filer,"/*..+....1....+....2....+....3....+....4" "....+....5....+....6....+....7....+....8\n"); fprintf(filer," 1.000 - scale factor for dots at vertices\n"); fprintf(filer," 1.000 - scale factor for circumcircle centers\n"); fprintf(filer," 2.000 - scale factor for circle lines\n"); fprintf(filer," 2.000 - scale factor for Voronoi polygon lines\n"); fprintf(filer," 2.000 - scale factor for tringulation lines\n"); fprintf(filer," 1.000 - scale factor for axes lines\n"); fprintf(filer," 1.000 - scale factor for points where natural " "neighbors are desired\n"); fprintf(filer," 1.000 - scale factor for points marking natural " "neighbors\n"); fprintf(filer,"/*\n"); fprintf(filer,"/* User coordinates for SET call (4E15.3 format), " "defaults if all zeros\n"); fprintf(filer,"/*\n"); fprintf(filer,"/*..+....1....+....2....+....3....+....4" "....+....5....+....6....+....7....+....8\n"); fprintf(filer," 0.000E+00 0.000E+00 0.000E+00 " " 0.000E+00\n"); fprintf(filer,"/*\n"); fprintf(filer,"/* Number of user input data. (I5 format)\n"); fprintf(filer,"/*\n"); fprintf(filer,"/*..+....1....+....2....+....3....+....4" "....+....5....+....6....+....7....+....8\n"); fprintf(filer,"%5d\n",datcnt); fprintf(filer,"/*\n"); fprintf(filer,"/* User data. The datum number occurs first " "(in I5 format) followed\n"); fprintf(filer,"/* by the x,y,z values (in E15.3 format).\n"); fprintf(filer,"/*\n"); fprintf(filer,"/*..+....1....+....2....+....3....+....4" "....+....5....+....6....+....7....+....8\n"); for (ix = 0; ix < datcnt; ix++) { fprintf(filer,"%5d%15.3E%15.3E%15.3E\n", ix+1,points[ix][0],points[ix][1],points[ix][2]); } fprintf(filer,"/*\n"); fprintf(filer,"/* Pseudo data.\n"); fprintf(filer,"/*\n"); fprintf(filer,"/*..+....1....+....2....+....3....+....4" "....+....5....+....6....+....7....+....8\n"); for (ix = datcnt; ix < datcnt+3; ix++) { fprintf(filer,"%5d%15.3E%15.3E%15.3E\n", ix+1,points[ix][0],points[ix][1],points[ix][2]); } fprintf(filer,"/*\n"); fprintf(filer,"/* The number of circumcircles (I5 format).\n"); fprintf(filer,"/*\n"); fprintf(filer,"/*..+....1....+....2....+....3....+....4" "....+....5....+....6....+....7....+....8\n"); simpaddr = rootsimp->nextsimp; fprintf(filer,"%5d\n",numtri); fprintf(filer,"/*\n"); fprintf(filer,"/* Circumcircle data. The first three numbers are " "the numbers of the\n"); fprintf(filer,"/* data (as listed above) lying on the " "circumcircle; the next two\n"); fprintf(filer,"/* numbers give the center position of the " "circumcircle; the final\n"); fprintf(filer,"/* number is the square of the radius of the " "circumcircle.\n"); fprintf(filer,"/*\n"); fprintf(filer,"/*..+....1....+....2....+....3....+....4" "....+....5....+....6....+....7....+....8\n"); for (ix = 0; ix < numtri; ix++) { fprintf(filer,"%5d%5d%5d%15.3E%15.3E%15.3E\n", simpaddr->vert[0]+1,simpaddr->vert[1]+1,simpaddr->vert[2]+1, simpaddr->cent[0],simpaddr->cent[1],simpaddr->cent[2]); simpaddr = simpaddr->nextsimp; } fprintf(filer,"/*\n"); fprintf(filer,"/* Number of points where natural neighbors are " "to be marked and\n"); fprintf(filer,"/* a flag indicating whether just the points where " "first order neighbors\n"); fprintf(filer,"/* are desired are marked (-1), whether the first " " order neighbors \n"); fprintf(filer,"/* will be marked as well (0), or both first and " "second order neighbors\n"); fprintf(filer,"/* are marked (1). The points will be marked with " "Xs, in the\n"); fprintf(filer,"/* color described above. (2I5 format)\n"); fprintf(filer,"/*\n"); fprintf(filer,"/*..+....1....+....2....+....3....+....4" "....+....5....+....6....+....7....+....8\n"); fprintf(filer," 0 0\n"); fprintf(filer,"/*\n"); fprintf(filer,"/* The coordinate list of points whose natural " "neighbors are to\n"); fprintf(filer,"/* be displayed (using the color index as described " "above), should\n"); fprintf(filer,"/* be listed here in 2E15.3 format.\n"); fprintf(filer,"/*\n"); fprintf(filer,"/*..+....1....+....2....+....3....+....4" "....+....5....+....6....+....7....+....8\n"); fprintf(filer,"/* 0.000E-00 0.000E-00\n"); fclose(filer); return; } } void FindProp(wxd, wyd) double wxd, wyd; { int i2, i3, i4, pos_count, inside; double xx, work3[3][3], work4[3][2]; lastneig = rootneig; goodflag = 0; numnei = -1; cursimp = rootsimp; for (i2=0; i2nextsimp; xx = cursimp->cent[2] - SQ(wxd - cursimp->cent[0]); if (xx > 0) { xx -= SQ(wyd - cursimp->cent[1]); if (xx > 0) { inside = 0; if (cursimp->vert[0] < datcnt) inside = 1; for (i3=0; i3<3; i3++) { for (i4=0; i4<2; i4++) { work3[i4][0] = points[cursimp-> vert[scor[i3][i4]]][0] - wxd; work3[i4][1] = points[cursimp-> vert[scor[i3][i4]]][1] - wyd; work3[i4][2] = work3[i4][0] * (points[cursimp-> vert[scor[i3][i4]]][0] + wxd) / 2 + work3[i4][1] * (points[cursimp-> vert[scor[i3][i4]]][1] + wyd) / 2; } xx = work3[0][0] * work3[1][1] - work3[1][0] * work3[0][1]; work4[i3][0] = (work3[0][2] * work3[1][1] - work3[1][2] * work3[0][1]) / xx; work4[i3][1] = (work3[0][0] * work3[1][2] - work3[1][0] * work3[0][2]) / xx; } pos_count = 0; for (i3=0; i3<3; i3++) { work3[2][i3] = ((work4[scor[i3][0]][0] - cursimp->cent[0]) * (work4[scor[i3][1]][1] - cursimp->cent[1]) - (work4[scor[i3][1]][0] - cursimp->cent[0]) * (work4[scor[i3][0]][1] - cursimp->cent[1])) / 2; if (work3[2][i3]>0) pos_count++; } if (pos_count>2 AND inside) goodflag = 1; for (i3=0; i3<3; i3++) { if (numnei>1) { curneig = rootneig; for (i4=0; i4<=numnei; i4++) { curneig = curneig->nextneig; if (cursimp->vert[i3] EQ curneig->neinum) { curneig->narea += work3[2][i3]; goto GOTEM; } } } if (lastneig->nextneig EQ NULL) { lastneig->nextneig = IMakeNeig(); if (error_status) return; } lastneig = lastneig->nextneig; numnei++; lastneig->neinum = cursimp->vert[i3]; lastneig->narea = work3[2][i3]; GOTEM:; } } } } } double Surface() { int i0; double xx, asurf; curneig = rootneig; for (xx=0, i0=0; i0<=numnei; i0++) { curneig = curneig->nextneig; xx += curneig->narea; } curneig = rootneig; for (asurf=0, i0=0; i0<=numnei; i0++) { curneig = curneig->nextneig; curneig->narea /= xx; asurf += curneig->narea * points[curneig->neinum][2]; } return asurf; } double Meld(double asurf, double wxd, double wyd) { int i0; double rS, rT, rB, bD, bB, hP; curneig = rootneig; for (i0 = 0 ; i0 <= numnei ; i0++) { curneig = curneig->nextneig; curneig->coord = 0; if (curneig->narea>0.00001 AND curneig->narea < 2) { if (fabs(points[curneig->neinum][5]) > 0.00001) { rS = fabs(points[curneig->neinum][5]) + bI; rT = rS * bJ; rB = 1 / rT; bD = pow(curneig->narea, rT); bB = bD * 2; if (bD>0.5) bB = (1 - bD) * 2; bB = pow(bB, rS) / 2; if (bD>0.5) bB = 1 - bB; hP = pow(bB, rB); curneig->coord = ((points[curneig->neinum][3] * points[curneig->neinum][0] + points[curneig->neinum][4] * points[curneig->neinum][1] + points[curneig->neinum][2] - points[curneig->neinum][3] * wxd - points[curneig->neinum][4] * wyd) - asurf) * hP; } } } curneig = rootneig; for (i0=0; i0<=numnei; i0++) { curneig = curneig->nextneig; asurf += curneig->coord; } return asurf; } void TooSteep() { ErrorHnd(4,"TooSteep", filee, "\n"); igrad = 0; } void TooShallow() { ErrorHnd(5,"TooShallow", filee, "\n"); igrad = 0; } void TooNarrow() { ErrorHnd(6, "TooNarrow", filee, "\n"); igrad = 0; } int *IntVect(int ncols) { int *vectptr; if ((vectptr = (int *) malloc(ncols * sizeof(int))) EQ (int *) NULL) { error_status = 7; ErrorHnd(error_status, "IntVect", filee, "\n"); vectptr = (int *) NULL; } return vectptr; } void FreeVecti(int *vectptr) { free(vectptr); } double *DoubleVect(int ncols) { double *vectptr; if ((vectptr = (double *) malloc(ncols * sizeof(double))) EQ (double *) NULL) { error_status = 8; ErrorHnd(error_status, "DoubleVect", filee, "\n"); return ( (double *) NULL); } return vectptr; } void FreeVectd(double *vectptr) { free(vectptr); } int **IntMatrix(int nrows, int ncols) { int i0; int **matptr; if (nrows < 2) nrows = 2; if (ncols < 2) ncols = 2; if ((matptr = (int **) malloc(nrows * sizeof(int *))) EQ (int **) NULL) { error_status = 9; ErrorHnd(error_status, "IntMatrix", filee, "\n"); return ( (int **) NULL); } if ((matptr[0] = (int *) malloc(nrows * ncols * sizeof(int))) EQ (int *) NULL) { error_status = 10; ErrorHnd(error_status, "IntMatrix", filee, "\n"); return ( (int **) NULL); } for (i0=1; i0nextdat = NULL; return datptr; } struct simp *IMakeSimp() { struct simp *simpptr; if ((simpptr = (struct simp *) malloc(sizeof(struct simp))) EQ (struct simp *) NULL) { error_status = 16; ErrorHnd(error_status, "IMakeSimp", filee, "\n"); return ((struct simp *) NULL); } simpptr->nextsimp = NULL; return (simpptr); } struct temp *IMakeTemp() { struct temp *tempptr; if ((tempptr = (struct temp *) malloc(sizeof(struct temp))) EQ (struct temp *) NULL) { error_status = 17; ErrorHnd(error_status, "IMakeTemp", filee, "\n"); return ((struct temp *) NULL); } tempptr->nexttemp = NULL; return tempptr; } struct neig *IMakeNeig() { struct neig *neigptr; if ((neigptr = (struct neig *) malloc(sizeof(struct neig))) EQ (struct neig *) NULL) { error_status = 18; ErrorHnd(error_status, "IMakeNeig", filee, "\n"); return ((struct neig *) NULL); } neigptr->nextneig = NULL; return neigptr; } PyBDSF-1.10.1/natgrid/Src/nncrunchd.c000066400000000000000000000427001420247104600171310ustar00rootroot00000000000000#include "nncheadd.h" #include "nnchead.h" #include "nntypes.h" #include "nnexver.h" #include "nnuheadd.h" #include "nnuhead.h" int ReadDatad(int numdat, double *xin, double *yin, double *zin) { double temp[3], minx, maxx, miny, maxy, xtmp, ytmp, ztmp; double qtxy, qtyx, qtzx, qtzy; int i0, i1, n0; bigtri[0][0] = bigtri[0][1] = bigtri[1][1] = bigtri[2][0] = -1; bigtri[1][0] = bigtri[2][1] = 5; if (rootdat EQ NULL) { rootdat = IMakeDatum(); if (error_status) return (error_status); rootsimp = IMakeSimp(); if (error_status) return (error_status); roottemp = IMakeTemp(); if (error_status) return (error_status); rootneig = IMakeNeig(); if (error_status) return (error_status); rootdat->values[0] = rootdat->values[1] = rootdat->values[2] = 0; } else { FreeVecti(jndx); FreeMatrixd(points); FreeMatrixd(joints); } curdat = rootdat; datcnt = 0; minx = xstart - horilap; maxx = xend + horilap; miny = ystart - vertlap; maxy = yend + vertlap; for (n0 = 0 ; n0 < numdat ; n0++) { temp[0] = xin[n0]; temp[1] = yin[n0]; temp[2] = zin[n0]; if (temp[0] > minx AND temp[0] < maxx AND temp[1] > miny AND temp[1] < maxy) { if (curdat->nextdat EQ NULL) { curdat->nextdat = IMakeDatum(); if (error_status) return (error_status); } curdat = curdat->nextdat; datcnt++; for (i1 = 0; i1 < 3; i1++) curdat->values[i1] = temp[i1]; } } if (datcnt > 3) { datcnt3 = datcnt + 3; jndx = IntVect(datcnt3); if (error_status) return (error_status); sumx = sumy = sumz = sumx2 = sumy2 = sumxy = sumxz = sumyz = 0; iscale = 0; /* * Calculate minimums and maximums of the input data accounting for * the scale factors. * * For the initial calculations, we have: * * maxxy[0][0] = maximum x input data value * maxxy[1][0] = minimum x input data value * maxxy[0][1] = maximum y input data value * maxxy[1][1] = minimum y input data value * maxxy[0][2] = maximum z input data value * maxxy[1][2] = minimum z input data value * */ data_limits: maxxy[0][0] = maxxy[0][1] = maxxy[0][2] = -(maxxy[1][0] = maxxy[1][1] = maxxy[1][2] = BIGNUM); curdat = rootdat->nextdat; for (i0 = 0; i0 < datcnt; i0++) { xtmp = curdat->values[0] * magx; if (maxxy[0][0] < xtmp) maxxy[0][0] = xtmp; if (maxxy[1][0] > xtmp) maxxy[1][0] = xtmp; ytmp = curdat->values[1] * magy; if (maxxy[0][1] < ytmp) maxxy[0][1] = ytmp; if (maxxy[1][1] > ytmp) maxxy[1][1] = ytmp; ztmp = curdat->values[2] * magz; if (maxxy[0][2] < ztmp) maxxy[0][2] = ztmp; if (maxxy[1][2] > ztmp) maxxy[1][2] = ztmp; curdat = curdat->nextdat; } /* * Modify the mins and maxs based on the scale factors and overlap regions. * to get the actual minimums and maximums of the data under consideration. */ if (maxxy[0][0] < maxx * magx) maxxy[0][0] = maxx * magx; if (maxxy[1][0] > minx * magx) maxxy[1][0] = minx * magx; if (maxxy[0][1] < maxy * magy) maxxy[0][1] = maxy * magy; if (maxxy[1][1] > miny * magy) maxxy[1][1] = miny * magy; /* * Calculate the extents in x, y, and z. * * maxxy[0][0] = maximum x extent, including overlap regions. * maxxy[0][1] = maximum y extent, including overlap regions. * maxxy[0][2] = maximum z extent. */ for (i0 = 0 ; i0 < 3 ; i0++) { maxxy[0][i0] -= maxxy[1][i0]; } maxhoriz = maxxy[0][0]; if (maxhoriz < maxxy[0][1]) maxhoriz = maxxy[0][1]; wbit = maxhoriz * EPSILON; /* * Calculate the ratio of the x extent by the y extent (qtxy) and * the y extent by the x extent (qtyx) . */ qtxy = maxxy[0][0] / maxxy[0][1]; qtyx = 1./qtxy; if ( (qtxy > (2.+EPSILON)) OR (qtyx > (2.+EPSILON)) ) { if (auto_scale) { /* * Readjust the scaling and recompute the data limits. */ iscale = 1; if (qtxy > (2+EPSILON) ) { magy *= qtxy; } else { magx *= qtyx; } magx_auto = magx; magy_auto = magy; magz_auto = magz; goto data_limits; } else { /* * Issue a warning and turn off gradient estimation. */ TooNarrow(); } } if (igrad) { qtzx = maxxy[0][2] / maxxy[0][0]; qtzy = maxxy[0][2] / maxxy[0][1]; if ( (qtzx > 60) OR (qtzy > 60) ) { if (auto_scale) { /* * Readjust the scaling and recompute the data limits. The X and Y * scales have been appropriately adjusted by the time you get here, * so dividing magz by either qtzx or qtzy will bring it in line. */ iscale = 1; magz *= 1./qtzx; magx_auto = magx; magy_auto = magy; magz_auto = magz; goto data_limits; } else { /* * Issue a warning and turn off gradient estimation. */ TooSteep(); } } if ( (qtzx < .017) OR (qtzy < .017) ) { if (auto_scale) { /* * Readjust the scaling and recompute the data limits. The X and Y * scales have been appropriately adjusted by the time you get here, * so dividing magz by either qtzx or qtzy will bring it in line. */ iscale = 1; magz *= 1./qtzx; magx_auto = magx; magy_auto = magy; magz_auto = magz; goto data_limits; } else { /* * Issue a warning and turn off gradient estimation. */ TooShallow(); } } } if (igrad) { points = DoubleMatrix(datcnt+4, 6); if (error_status) return (error_status); } else { points = DoubleMatrix(datcnt+4, 3); if (error_status) return (error_status); } joints = DoubleMatrix(datcnt3, 2); if (error_status) return (error_status); curdat = rootdat->nextdat; rootdat->nextdat = NULL; for (i0 = 0; i0 < datcnt; i0++) { sumx += points[i0][0] = curdat->values[0] * magx; sumx2 += SQ(points[i0][0]); sumy += points[i0][1] = curdat->values[1] * magy; sumy2 += SQ(points[i0][1]); sumxy += points[i0][0] * points[i0][1]; if (densi) points[i0][2] = 1; else { sumz += points[i0][2] = curdat->values[2] * magz; sumxz += points[i0][0] * points[i0][2]; sumyz += points[i0][1] * points[i0][2]; } holddat = curdat; curdat = curdat->nextdat; free(holddat); } det = (datcnt * (sumx2 * sumy2 - sumxy * sumxy)) - (sumx * (sumx * sumy2 - sumy * sumxy)) + (sumy * (sumx * sumxy - sumy * sumx2)); aaa = ((sumz * (sumx2 * sumy2 - sumxy * sumxy)) - (sumxz * (sumx * sumy2 - sumy * sumxy)) + (sumyz * (sumx * sumxy - sumy * sumx2))) / det; bbb = ((datcnt * (sumxz * sumy2 - sumyz * sumxy)) - (sumz * (sumx * sumy2 - sumy * sumxy)) + (sumy * (sumx * sumyz - sumy * sumxz))) / det; ccc = ((datcnt * (sumx2 * sumyz - sumxy * sumxz)) - (sumx * (sumx * sumyz - sumy * sumxz)) + (sumz * (sumx * sumxy - sumy * sumx2))) / det; for (i0 = 0 ; i0 < 3 ; i0++) { points[datcnt+i0][0] = maxxy[1][0] + bigtri[i0][0] * maxxy[0][0] * RANGE; points[datcnt+i0][1] = maxxy[1][1] + bigtri[i0][1] * maxxy[0][1] * RANGE; if (densi) points[datcnt+i0][2] = 1; else points[datcnt+i0][2] = aaa + bbb * points[datcnt+i0][0] + ccc * points[datcnt+i0][1]; } rootdat = NULL; } else { ErrorHnd(1, "ReadData", filee, "\n"); error_status = 1; return (error_status); } /* * Determine if any input data coordinates are duplicated. */ if (nndup == 1) { for (i0 = 0 ; i0 < datcnt ; i0++) { for (i1 = i0+1 ; i1 < datcnt ; i1++) { if ( (points[i0][0] == points[i1][0]) && (points[i0][1] == points[i1][1]) ) { sprintf(emsg,"\n Coordinates %d and %d are identical.\n",i0,i1); ErrorHnd(2, "ReadData", filee, emsg); error_status = 2; return (error_status); } } } } /* * Introduce a small random perturbation into the coordinate values. */ srand(367); for (i0 = 0 ; i0 < datcnt ; i0++) { for (i1 = 0 ; i1 < 2 ; i1++) { points[i0][i1] += wbit * (0.5 - (double)rand() / RAND_MAX); } } if (sdip OR igrad) { piby2 = 2 * atan(1.0); nn_pi = piby2 * 2; piby32 = 3 * piby2; rad2deg = 90 / piby2; } return (0); } double **MakeGridd(int nxi, int nyi, double *xi, double *yi) { double wxd, wyd, wxde, wydn, surf, surfe, surfn, aspect, slope; int i0, j7, j8; static int first_c = 1, first_as = 1; static double **data_out; if (optim) { for (i0 = 0 ; i0 < datcnt ; i0++) jndx[i0] = 1; if ( (single_point == 0) || (igrad > 0) ) { TriNeigh(); } else { if (first_single == 1) { TriNeigh(); first_single = 0; } } if (error_status) return ( (double **) NULL); } data_out = DoubleMatrix(nxi,nyi); if (error_status) return ( (double **) NULL); if (sdip) { if (first_as) first_as = 0; else { FreeMatrixd(curasd.aspect_outd); FreeMatrixd(curasd.slope_outd); } curasd.crows = 0; curasd.ccols = 0; curasd.aspect_outd = DoubleMatrix(nxi,nyi); curasd.slope_outd = DoubleMatrix(nxi,nyi); } for (j8 = 0 ; j8 < nyi ; j8++) { if (updir > 0) wyd = yi[j8]*magy; else wyd = yi[nyi-j8-1]*magy; points[datcnt3][1] = wyd; for (j7 = 0 ; j7 < nxi ; j7++) { wxd = xi[j7]*magx; points[datcnt3][0] = wxd; if (!optim) { FindNeigh(datcnt3); if (error_status) return ( (double **) NULL); TriNeigh(); if (error_status) return ( (double **) NULL); } FindProp(wxd,wyd); if (error_status) return ( (double **) NULL); if (!extrap AND !goodflag) surf = nuldat; else { surf = Surface(); if (igrad>0) surf = Meld(surf,wxd,wyd); if (non_neg) if (surf < 0) surf = 0; } if (sdip) { wxde = wxd + wbit; FindProp(wxde,wyd); if (error_status) return ( (double **) NULL); surfe = Surface(); if (igrad > 0) surfe = Meld(surfe,wxde,wyd); if (non_neg) if (surfe < 0) surfe = 0; wydn = wyd + wbit; FindProp(wxd,wydn); if (error_status) return ( (double **) NULL); surfn = Surface(); if (igrad > 0) surfn = Meld(surfn,wxd,wydn); if (non_neg) if (surfn < 0) surfn = 0; surfe = (surf - surfe) / wbit; surfn = (surf - surfn) / wbit; if (surfe > 0) { if (surfn > 0) aspect = piby2 - atan(surfn / surfe); else aspect = piby2 + atan(surfn / surfe) * -1; } else { if (surfe < 0) { if (surfn > 0) aspect = piby32 + atan(surfn / surfe) * -1; else aspect = piby32 - atan(surfn / surfe); } else { if (surfn > 0) aspect = 0; else aspect = nn_pi; } } slope = atan(sqrt(SQ(surfe) + SQ(surfn))); if (!rads) { aspect *= rad2deg; slope *= rad2deg; } (curasd.aspect_outd)[j7][j8] = aspect; (curasd.slope_outd)[j7][j8] = slope; curasd.crows = nxi; curasd.ccols = nyi; if (magz EQ 1.) data_out[j7][j8] = surf; else data_out[j7][j8] = surf/magz; } else { if (magz EQ 1.) data_out[j7][j8] = surf; else data_out[j7][j8] = surf/magz; } } } return (data_out); } void c_nngetsloped(int row, int col, double *slope, int *ier) { if (asflag == 0) { error_status = 28; ErrorHnd(error_status, "c_nngetsloped", filee, "\n"); *ier = 28; *slope = -999.; return; } if (iscale == 1) { sprintf(emsg,"\n\n Current automatically computed scaling " "values:\n" " magx = %f\n magy = %f\n" " magz = %f\n\n", magx_auto, magy_auto, magz_auto); ErrorHnd(26, "c_nngetsloped", filee, emsg); *ier = 26; *slope = -999.; return; } if (curasd.crows == 0) { ErrorHnd(19, "c_nngetsloped", filee, "\n"); *ier = 19; *slope = -999.; return; } if (row >= curasd.crows || row < 0) { sprintf(emsg,"\n Requested row = %d (indices starting with one)\n",row+1); ErrorHnd(20, "c_nngetsloped", filee, emsg); *ier = 20; *slope = -999.; return; } if (col >= curasd.ccols || col < 0) { sprintf(emsg,"\n Requested column = %d (indices starting with one)\n", col+1); ErrorHnd(21, "c_nngetsloped", filee, emsg); *ier = 21; *slope = -999.; return; } *ier = 0; *slope = (curasd.slope_outd)[row][col]; } void c_nngetaspectd(int row, int col, double *aspect, int *ier) { if (asflag == 0) { error_status = 28; ErrorHnd(error_status, "c_nngetaspectd", filee, "\n"); *ier = 28; *aspect = -999.; return; } if (iscale == 1) { sprintf(emsg,"\n\n Current automatically computed scaling " "values:\n" " magx = %f\n magy = %f\n" " magz = %f\n\n", magx_auto, magy_auto, magz_auto); ErrorHnd(25, "c_nngetaspectd", filee, emsg); *ier = 25; *aspect = -999.; return; } if (curasd.crows == 0) { ErrorHnd(22, "c_nngetaspectd", filee, "\n"); *ier = 22; *aspect = -999.; return; } if (row >= curasd.crows || row < 0) { sprintf(emsg,"\n Requested row = %d (indices starting with one)\n",row+1); ErrorHnd(20, "c_nngetaspectd", filee, emsg); *ier = 20; *aspect = -999.; return; } if (col >= curasd.ccols || col < 0) { sprintf(emsg,"\n Requested column = %d (indices starting with one)\n", col); ErrorHnd(21, "c_nngetaspectd", filee, emsg); *ier = 21; *aspect = -999.; return; } *ier = 0; *aspect = (curasd.aspect_outd)[row][col]; } /* * Initialize single point interpolation mode. This just * does the regridding initialization and initial data analysis. */ void c_nnpntinitd(int n, double x[], double y[], double z[]) { #define NXI 2 #define NYI 2 double xi[NXI], yi[NYI], wtmp; single_point = 1; first_single = 1; asflag = 0; horilap_save = horilap; vertlap_save = vertlap; horilap = -1.; vertlap = -1.; /* * Establish the gridded region to contain all of the input * data points plus an extra 10% space around the border. */ xi[0] = armind(n, x); xi[1] = armaxd(n, x); wtmp = xi[1] - xi[0]; xi[0] -= 0.1*wtmp; xi[1] += 0.1*wtmp; yi[0] = armind(n, y); yi[1] = armaxd(n, y); wtmp = yi[1] - yi[0]; yi[0] -= 0.1*wtmp; yi[1] += 0.1*wtmp; Initialized(n, x, y, NXI, NYI, xi, yi); if (ReadDatad(n,x,y,z) != 0) { ErrorHnd(error_status, "c_nnpntinitd", filee, "\n"); } } void c_nnpntd(double x, double y, double *point) { int idum, nxi=3, nyi=3, ierr; double xdum[1], ydum[1], zdum[1], xi[3], yi[3], *out; /* * Check to see if the input point is within the gridded region * set up in the initialization. */ if ( (x < xstart) || (x > xend) || (y < ystart) || (y > yend) ) { sprintf(emsg,"\n Coordinate = (%f, %f)\n", x, y); ErrorHnd(27, "c_nnpntd", filee, emsg); return; } /* * Set up a 3 x 3 gridded region with the desired coordinate in * the middle. */ xi[0] = x-0.05*(xend-xstart); xi[1] = x; xi[2] = x+0.05*(xend-xstart); yi[0] = y-0.05*(yend-ystart); yi[1] = y; yi[2] = y+0.05*(yend-ystart); out = c_natgridd(idum, xdum, ydum, zdum, nxi, nyi, xi, yi, &ierr); if (ierr != 0) { ErrorHnd(28, "c_nnpntd", filee, "\n"); error_status = ierr; *point = -999.; } *point = out[3*1 +1]; } void c_nnpntendd() { single_point = 0; first_single = 0; horilap = horilap_save; vertlap = vertlap_save; Terminate(); } PyBDSF-1.10.1/natgrid/Src/nncrunchs.c000066400000000000000000000426701420247104600171560ustar00rootroot00000000000000#include "nncheads.h" #include "nnchead.h" #include "nntypes.h" #include "nnexver.h" #include "nnuheads.h" #include "nnuhead.h" int ReadData(int numdat, float *xin, float *yin, float *zin) { double temp[3], minx, maxx, miny, maxy, xtmp, ytmp, ztmp; double qtxy, qtyx, qtzx, qtzy; int i0, i1, n0; bigtri[0][0] = bigtri[0][1] = bigtri[1][1] = bigtri[2][0] = -1; bigtri[1][0] = bigtri[2][1] = 5; if (rootdat EQ NULL) { rootdat = IMakeDatum(); if (error_status) return (error_status); rootsimp = IMakeSimp(); if (error_status) return (error_status); roottemp = IMakeTemp(); if (error_status) return (error_status); rootneig = IMakeNeig(); if (error_status) return (error_status); rootdat->values[0] = rootdat->values[1] = rootdat->values[2] = 0; } else { FreeVecti(jndx); FreeMatrixd(points); FreeMatrixd(joints); } curdat = rootdat; datcnt = 0; minx = xstart - horilap; maxx = xend + horilap; miny = ystart - vertlap; maxy = yend + vertlap; for (n0 = 0 ; n0 < numdat ; n0++) { temp[0] = xin[n0]; temp[1] = yin[n0]; temp[2] = zin[n0]; if (temp[0] > minx AND temp[0] < maxx AND temp[1] > miny AND temp[1] < maxy) { if (curdat->nextdat EQ NULL) { curdat->nextdat = IMakeDatum(); if (error_status) return (error_status); } curdat = curdat->nextdat; datcnt++; for (i1 = 0; i1 < 3; i1++) curdat->values[i1] = temp[i1]; } } if (datcnt > 3) { datcnt3 = datcnt + 3; jndx = IntVect(datcnt3); if (error_status) return (error_status); sumx = sumy = sumz = sumx2 = sumy2 = sumxy = sumxz = sumyz = 0; iscale = 0; /* * Calculate minimums and maximums of the input data accounting for * the scale factors. * * For the initial calculations, we have: * * maxxy[0][0] = maximum x input data value * maxxy[1][0] = minimum x input data value * maxxy[0][1] = maximum y input data value * maxxy[1][1] = minimum y input data value * maxxy[0][2] = maximum z input data value * maxxy[1][2] = minimum z input data value * */ data_limits: maxxy[0][0] = maxxy[0][1] = maxxy[0][2] = -(maxxy[1][0] = maxxy[1][1] = maxxy[1][2] = BIGNUM); curdat = rootdat->nextdat; for (i0 = 0; i0 < datcnt; i0++) { xtmp = curdat->values[0] * magx; if (maxxy[0][0] < xtmp) maxxy[0][0] = xtmp; if (maxxy[1][0] > xtmp) maxxy[1][0] = xtmp; ytmp = curdat->values[1] * magy; if (maxxy[0][1] < ytmp) maxxy[0][1] = ytmp; if (maxxy[1][1] > ytmp) maxxy[1][1] = ytmp; ztmp = curdat->values[2] * magz; if (maxxy[0][2] < ztmp) maxxy[0][2] = ztmp; if (maxxy[1][2] > ztmp) maxxy[1][2] = ztmp; curdat = curdat->nextdat; } /* * Modify the mins and maxs based on the scale factors and overlap regions. * to get the actual minimums and maximums of the data under consideration. */ if (maxxy[0][0] < maxx * magx) maxxy[0][0] = maxx * magx; if (maxxy[1][0] > minx * magx) maxxy[1][0] = minx * magx; if (maxxy[0][1] < maxy * magy) maxxy[0][1] = maxy * magy; if (maxxy[1][1] > miny * magy) maxxy[1][1] = miny * magy; /* * Calculate the extents in x, y, and z. * * maxxy[0][0] = maximum x extent, including overlap regions. * maxxy[0][1] = maximum y extent, including overlap regions. * maxxy[0][2] = maximum z extent. */ for (i0 = 0 ; i0 < 3 ; i0++) { maxxy[0][i0] -= maxxy[1][i0]; } maxhoriz = maxxy[0][0]; if (maxhoriz < maxxy[0][1]) maxhoriz = maxxy[0][1]; wbit = maxhoriz * EPSILON; /* * Calculate the ratio of the x extent by the y extent (qtxy) and * the y extent by the x extent (qtyx) . */ qtxy = maxxy[0][0] / maxxy[0][1]; qtyx = 1./qtxy; if ( (qtxy > (2.+EPSILON)) OR (qtyx > (2.+EPSILON)) ) { if (auto_scale) { /* * Readjust the scaling and recompute the data limits. */ iscale = 1; if (qtxy > (2+EPSILON) ) { magy *= qtxy; } else { magx *= qtyx; } magx_auto = magx; magy_auto = magy; magz_auto = magz; goto data_limits; } else { /* * Issue a warning and turn off gradient estimation. */ TooNarrow(); } } if (igrad) { qtzx = maxxy[0][2] / maxxy[0][0]; qtzy = maxxy[0][2] / maxxy[0][1]; if ( (qtzx > 60) OR (qtzy > 60) ) { if (auto_scale) { /* * Readjust the scaling and recompute the data limits. The X and Y * scales have been appropriately adjusted by the time you get here, * so dividing magz by either qtzx or qtzy will bring it in line. */ iscale = 1; magz *= 1./qtzx; magx_auto = magx; magy_auto = magy; magz_auto = magz; goto data_limits; } else { /* * Issue a warning and turn off gradient estimation. */ TooSteep(); } } if ( (qtzx < .017) OR (qtzy < .017) ) { if (auto_scale) { /* * Readjust the scaling and recompute the data limits. The X and Y * scales have been appropriately adjusted by the time you get here, * so dividing magz by either qtzx or qtzy will bring it in line. */ iscale = 1; magz *= 1./qtzx; magx_auto = magx; magy_auto = magy; magz_auto = magz; goto data_limits; } else { /* * Issue a warning and turn off gradient estimation. */ TooShallow(); } } } if (igrad) { points = DoubleMatrix(datcnt+4, 6); if (error_status) return (error_status); } else { points = DoubleMatrix(datcnt+4, 3); if (error_status) return (error_status); } joints = DoubleMatrix(datcnt3, 2); if (error_status) return (error_status); curdat = rootdat->nextdat; rootdat->nextdat = NULL; free(rootdat); for (i0 = 0; i0 < datcnt; i0++) { sumx += points[i0][0] = curdat->values[0] * magx; sumx2 += SQ(points[i0][0]); sumy += points[i0][1] = curdat->values[1] * magy; sumy2 += SQ(points[i0][1]); sumxy += points[i0][0] * points[i0][1]; if (densi) points[i0][2] = 1; else { sumz += points[i0][2] = curdat->values[2] * magz; sumxz += points[i0][0] * points[i0][2]; sumyz += points[i0][1] * points[i0][2]; } holddat = curdat; curdat = curdat->nextdat; free(holddat); } det = (datcnt * (sumx2 * sumy2 - sumxy * sumxy)) - (sumx * (sumx * sumy2 - sumy * sumxy)) + (sumy * (sumx * sumxy - sumy * sumx2)); aaa = ((sumz * (sumx2 * sumy2 - sumxy * sumxy)) - (sumxz * (sumx * sumy2 - sumy * sumxy)) + (sumyz * (sumx * sumxy - sumy * sumx2))) / det; bbb = ((datcnt * (sumxz * sumy2 - sumyz * sumxy)) - (sumz * (sumx * sumy2 - sumy * sumxy)) + (sumy * (sumx * sumyz - sumy * sumxz))) / det; ccc = ((datcnt * (sumx2 * sumyz - sumxy * sumxz)) - (sumx * (sumx * sumyz - sumy * sumxz)) + (sumz * (sumx * sumxy - sumy * sumx2))) / det; for (i0 = 0 ; i0 < 3 ; i0++) { points[datcnt+i0][0] = maxxy[1][0] + bigtri[i0][0] * maxxy[0][0] * RANGE; points[datcnt+i0][1] = maxxy[1][1] + bigtri[i0][1] * maxxy[0][1] * RANGE; if (densi) points[datcnt+i0][2] = 1; else points[datcnt+i0][2] = aaa + bbb * points[datcnt+i0][0] + ccc * points[datcnt+i0][1]; } rootdat = NULL; } else { ErrorHnd(1, "ReadData", filee, "\n"); error_status = 1; return (error_status); } /* * Determine if any input data coordinates are duplicated. */ if (nndup == 1) { for (i0 = 0 ; i0 < datcnt ; i0++) { for (i1 = i0+1 ; i1 < datcnt ; i1++) { if ( (points[i0][0] == points[i1][0]) && (points[i0][1] == points[i1][1]) ) { sprintf(emsg,"\n Coordinates %d and %d are identical.\n",i0,i1); ErrorHnd(2, "ReadData", filee, emsg); error_status = 2; return (error_status); } } } } /* * Introduce a small random perturbation into the coordinate values. */ srand(367); for (i0 = 0 ; i0 < datcnt ; i0++) { for (i1 = 0 ; i1 < 2 ; i1++) { points[i0][i1] += wbit * (0.5 - (double)rand() / RAND_MAX); } } if (sdip OR igrad) { piby2 = 2 * atan(1.0); nn_pi = piby2 * 2; piby32 = 3 * piby2; rad2deg = 90 / piby2; } return (0); } float **MakeGrid(int nxi, int nyi, float *xi, float *yi) { double wxd, wyd, wxde, wydn, surf, surfe, surfn, aspect, slope; int i0, j7, j8; static int first_c = 1, first_as = 1; static float **data_out; if (optim) { for (i0 = 0 ; i0 < datcnt ; i0++) jndx[i0] = 1; if ( (single_point == 0) || (igrad > 0) ) { TriNeigh(); } else { if (first_single == 1) { TriNeigh(); first_single = 0; } } if (error_status) return ( (float **) NULL); } data_out = FloatMatrix(nxi,nyi); if (error_status) return ( (float **) NULL); if (sdip) { if (first_as) first_as = 0; else { FreeMatrixf(curas.aspect_out); FreeMatrixf(curas.slope_out); } curas.crows = 0; curas.ccols = 0; curas.aspect_out = FloatMatrix(nxi,nyi); curas.slope_out = FloatMatrix(nxi,nyi); } for (j8 = 0 ; j8 < nyi ; j8++) { if (updir > 0) wyd = yi[j8]*magy; else wyd = yi[nyi-j8-1]*magy; points[datcnt3][1] = wyd; for (j7 = 0 ; j7 < nxi ; j7++) { wxd = xi[j7]*magx; points[datcnt3][0] = wxd; if (!optim) { FindNeigh(datcnt3); if (error_status) return ( (float **) NULL); TriNeigh(); if (error_status) return ( (float **) NULL); } FindProp(wxd,wyd); if (error_status) return ( (float **) NULL); if (!extrap AND !goodflag) surf = nuldat; else { surf = Surface(); if (igrad>0) surf = Meld(surf,wxd,wyd); if (non_neg) if (surf < 0) surf = 0; } if (sdip) { wxde = wxd + wbit; FindProp(wxde,wyd); if (error_status) return ( (float **) NULL); surfe = Surface(); if (igrad > 0) surfe = Meld(surfe,wxde,wyd); if (non_neg) if (surfe < 0) surfe = 0; wydn = wyd + wbit; FindProp(wxd,wydn); if (error_status) return ( (float **) NULL); surfn = Surface(); if (igrad > 0) surfn = Meld(surfn,wxd,wydn); if (non_neg) if (surfn < 0) surfn = 0; surfe = (surf - surfe) / wbit; surfn = (surf - surfn) / wbit; if (surfe > 0) { if (surfn > 0) aspect = piby2 - atan(surfn / surfe); else aspect = piby2 + atan(surfn / surfe) * -1; } else { if (surfe < 0) { if (surfn > 0) aspect = piby32 + atan(surfn / surfe) * -1; else aspect = piby32 - atan(surfn / surfe); } else { if (surfn > 0) aspect = 0; else aspect = nn_pi; } } slope = atan(sqrt(SQ(surfe) + SQ(surfn))); if (!rads) { aspect *= rad2deg; slope *= rad2deg; } (curas.aspect_out)[j7][j8] = aspect; (curas.slope_out)[j7][j8] = slope; curas.crows = nxi; curas.ccols = nyi; if (magz EQ 1.) data_out[j7][j8] = surf; else data_out[j7][j8] = surf/magz; } else { if (magz EQ 1.) data_out[j7][j8] = surf; else data_out[j7][j8] = surf/magz; } } } return (data_out); } void c_nngetslopes(int row, int col, float *slope, int *ier) { if (asflag == 0) { error_status = 28; ErrorHnd(error_status, "c_nngetslopes", filee, "\n"); *ier = 28; *slope = -999.; return; } if (iscale == 1) { sprintf(emsg,"\n\n Current automatically computed scaling " "values:\n" " magx = %f\n magy = %f\n" " magz = %f\n\n", magx_auto, magy_auto, magz_auto); ErrorHnd(26, "c_nngetslopes", filee, emsg); *ier = 26; *slope = -999.; return; } if (curas.crows == 0) { ErrorHnd(19, "c_nngetslopes", filee, "\n"); *ier = 19; *slope = -999.; return; } if (row >= curas.crows || row < 0) { sprintf(emsg,"\n Requested row = %d (indices starting with one)\n",row+1); ErrorHnd(20, "c_nngetslopes", filee, emsg); *ier = 20; *slope = -999.; return; } if (col >= curas.ccols || col < 0) { sprintf(emsg,"\n Requested column = %d (indices starting with one)\n", col+1); ErrorHnd(21, "c_nngetslopes", filee, emsg); *ier = 21; *slope = -999.; return; } *ier = 0; *slope = (curas.slope_out)[row][col]; } void c_nngetaspects(int row, int col, float *aspect, int *ier) { if (asflag == 0) { error_status = 28; ErrorHnd(error_status, "c_nngetaspects", filee, "\n"); *ier = 28; *aspect = -999.; return; } if (iscale == 1) { sprintf(emsg,"\n\n Current automatically computed scaling " "values:\n" " magx = %f\n magy = %f\n" " magz = %f\n\n", magx_auto, magy_auto, magz_auto); ErrorHnd(25, "c_nngetaspects", filee, emsg); *ier = 25; *aspect = -999.; return; } if (curas.crows == 0) { ErrorHnd(22, "c_nngetaspects", filee, "\n"); *ier = 22; *aspect = -999.; return; } if (row >= curas.crows || row < 0) { sprintf(emsg,"\n Requested row = %d (indices starting with one)\n",row+1); ErrorHnd(20, "c_nngetaspects", filee, emsg); *ier = 20; *aspect = -999.; return; } if (col >= curas.ccols || col < 0) { sprintf(emsg,"\n Requested column = %d (indices starting with one)\n", col); ErrorHnd(21, "c_nngetaspects", filee, emsg); *ier = 21; *aspect = -999.; return; } *ier = 0; *aspect = (curas.aspect_out)[row][col]; } /* * Initialize single point interpolation mode. This just * does the regridding initialization and initial data analysis. */ void c_nnpntinits(int n, float x[], float y[], float z[]) { #define NXI 2 #define NYI 2 float xi[NXI], yi[NYI], wtmp; single_point = 1; first_single = 1; asflag = 0; horilap_save = horilap; vertlap_save = vertlap; horilap = -1.; vertlap = -1.; /* * Establish the gridded region to contain all of the input * data points plus an extra 10% space around the border. */ xi[0] = (float) armin(n, x); xi[1] = (float) armax(n, x); wtmp = xi[1] - xi[0]; xi[0] -= 0.1*wtmp; xi[1] += 0.1*wtmp; yi[0] = (float) armin(n, y); yi[1] = (float) armax(n, y); wtmp = yi[1] - yi[0]; yi[0] -= 0.1*wtmp; yi[1] += 0.1*wtmp; Initialize(n, x, y, NXI, NYI, xi, yi); if (ReadData(n,x,y,z) != 0) { ErrorHnd(error_status, "c_nnpntinits", filee, "\n"); } } void c_nnpnts(float x, float y, float *point) { int idum, nxi=3, nyi=3, ierr; float xdum[1], ydum[1], zdum[1], xi[3], yi[3], *out; /* * Check to see if the input point is within the gridded region * set up in the initialization. */ if ( (x < xstart) || (x > xend) || (y < ystart) || (y > yend) ) { sprintf(emsg,"\n Coordinate = (%f, %f)\n", x, y); ErrorHnd(27, "c_nnpnts", filee, emsg); return; } /* * Set up a 3 x 3 gridded region with the desired coordinate in * the middle. */ xi[0] = x-0.05*(xend-xstart); xi[1] = x; xi[2] = x+0.05*(xend-xstart); yi[0] = y-0.05*(yend-ystart); yi[1] = y; yi[2] = y+0.05*(yend-ystart); out = c_natgrids(idum, xdum, ydum, zdum, nxi, nyi, xi, yi, &ierr); if (ierr != 0) { ErrorHnd(28, "c_nnpnts", filee, "\n"); error_status = ierr; *point = -999.; } *point = out[3*1 + 1]; } void c_nnpntend() { single_point = 0; first_single = 0; horilap = horilap_save; vertlap = vertlap_save; Terminate(); } PyBDSF-1.10.1/natgrid/Src/nnerror.c000066400000000000000000000067621420247104600166440ustar00rootroot00000000000000#include #include #define MAX_ERROR 30 void ErrorLog(int, char *, FILE *, char *); char *ErrMsg(int); extern int error_status; void ErrorHnd(int error, char *func, FILE *efile, char *smsg) { ErrorLog(error, func, efile, smsg); } void ErrorLog(int error, char *func, FILE *efile, char *smsg) { if ( (error == 4) || (error == 5) || (error == 6 || error == 28) ) { fprintf(efile, "natgrid - warning number %d from %s:\n %s", error, func, ErrMsg(error)); error_status = 0; } else { fprintf(efile, "natgrid - error number %d from %s:\n %s", error, func, ErrMsg(error)); error_status = error; } fprintf(efile,"%s",smsg); } char *ErrMsg(int i) { char *rlist; const char *err_list[MAX_ERROR] = { /* #001 */ "Insufficient data in gridded region to triangulate.", /* #002 */ "Duplicate input data coordinates are not allowed.", /* #003 */ "Unable to open file for writing algorithmic data.", /* #004 */ "WARNING: The ratio of vertical to horizontal scales is too large for \n meaningful gradient estimation. Rescale the data if gradients are required.", /* #005 */ "WARNING: The ratio of vertical to horizontal scales is too small for\n meaningful gradient estimation. Rescale the data if gradients are required.", /* #006 */ "WARNING: The ratio of x-axis breadth to y-axis breadth of this gridded \n region may be too extreme for good interpolation. Changing the block \n proportions, or rescaling the x or y coordinate may be indicated.\n Gradient calculations have been disabled.", /* #007 */ "Unable to allocate storage for ivector.", /* #008 */ "Unable to allocate storage for dvector.", /* #009 */ "Unable to allocate storage for **imatrix.", /* #010 */ "Unable to allocate storage for imatrix[].", /* #011 */ "Unable to allocate storage for **fmatrix.", /* #012 */ "Unable to allocate storage for fmatrix[].", /* #013 */ "Unable to allocate storage for **dmatrix.", /* #014 */ "Unable to allocate storage for dmatrix[].", /* #015 */ "Unable to allocate storage for raw data.", /* #016 */ "Unable to allocate storage for a simplex.", /* #017 */ "Unable to allocate storage for temp.", /* #018 */ "Unable to allocate storage for neig.", /* #019 */ "Slopes have not been computed, set sdi.", /* #020 */ "Row argument out of range.", /* #021 */ "Column argument out of range.", /* #022 */ "Aspects have not been computed, set sdi.", /* #023 */ "Parameter name not known.", /* #024 */ "Cannot open error file.", /* #025 */ "Automatic scaling has been done - aspects will be distorted and \n consequently are not returned. Rescale your data manually, or \n by setting magx, magy, and magz appropriately.", /* #026 */ "Automatic scaling has been done - slopes will be distorted and \n consequently are not returned. Rescale your data manually, or \n by setting magx, magy, and magz appropriately.", /* #027 */ "Coordinate is outside of the gridded region for a single point interpolation.", /* #028 */ "Cannot compute aspects and slopes in conjunction with single point \n interpolation mode.", /* #029 */ "Fortran DOUBLE PRECISION entries are not supported on UNICOS.", /* #030 */ "Error number out of range." }; if (i >= MAX_ERROR) { rlist = (char *) err_list[29]; } else { rlist = (char *) err_list[i-1]; } return (rlist); } int ErrMax() { return(MAX_ERROR); } PyBDSF-1.10.1/natgrid/Src/nnuser.c000066400000000000000000000104531420247104600164610ustar00rootroot00000000000000#include "nnuheads.h" #include "nnuhead.h" /* * Get values for character parameters. */ void c_nngetc(char *pnam, char *vnam) { char *s; if (!strncmp(pnam,"alg",3) OR !strncmp(pnam,"ALG",3)) { s = tri_file; } else if (!strncmp(pnam,"erf",3) OR !strncmp(pnam,"ERF",3)) { s = error_file; } else { sprintf(emsg,"\n Parameter name supplied is: %s\n",pnam); ErrorHnd(23, "c_nngetc", filee, emsg); return; } for ( ; *s != '\0'; ++s, ++vnam) { *vnam = *s; } *vnam = '\0'; } /* * Get values for integer parameters. */ void c_nngeti(char *pnam, int *ival) { if (!strncmp(pnam,"asc",3) OR !strncmp(pnam,"ASC",3)) { *ival = auto_scale; } else if (!strncmp(pnam,"igr",3) OR !strncmp(pnam,"IGR",3)) { *ival = igrad; } else if (!strncmp(pnam,"upd",3) OR !strncmp(pnam,"UPD",3)) { *ival = updir; } else if (!strncmp(pnam,"non",3) OR !strncmp(pnam,"NON",3)) { *ival = non_neg; } else if (!strncmp(pnam,"sdi",3) OR !strncmp(pnam,"SDI",3)) { *ival = sdip; } else if (!strncmp(pnam,"rad",3) OR !strncmp(pnam,"RAD",3)) { *ival = rads; } else if (!strncmp(pnam,"opt",3) OR !strncmp(pnam,"OPT",3)) { *ival = optim; } else if (!strncmp(pnam,"ext",3) OR !strncmp(pnam,"EXT",3)) { *ival = extrap; } else if (!strncmp(pnam,"adf",3) OR !strncmp(pnam,"ADF",3)) { *ival = adf; } else if (!strncmp(pnam,"dup",3) OR !strncmp(pnam,"DUP",3)) { *ival = nndup; } else { sprintf(emsg,"\n Parameter name supplied is: %s\n",pnam); ErrorHnd(23, "c_nngeti", filee, emsg); } } /* * Set values for character parameters. */ void c_nnsetc(char *pnam, char *vnam) { int i; char *s; if (!strncmp(pnam,"alg",3) OR !strncmp(pnam,"ALG",3)) { s = tri_file; for ( ; *vnam != '\0'; ++s, ++vnam) { *s = *vnam; } *s = '\0'; } else if (!strncmp(pnam,"erf",3) OR !strncmp(pnam,"ERF",3)) { if (!strncmp(vnam,"stderr",6)) { filee = stderr; strcpy(error_file,"stderr"); } else if (!strncmp(vnam,"stdout",6)) { filee = stdout; strcpy(error_file,"stdout"); } else { if ((filee = fopen(vnam,"w")) EQ (FILE *) NULL) { ErrorHnd(24, "c_nnsetc", stderr, "\n"); return; } strcpy(error_file,vnam); } } else { sprintf(emsg,"\n Parameter name supplied is: %s\n",pnam); ErrorHnd(23, "c_nnsetc", filee, emsg); } } /* * Set values for integer parameters. */ void c_nnseti(char *pnam, int ival) { if (!strncmp(pnam,"asc",3) OR !strncmp(pnam,"ASC",3)) { auto_scale = ival; } else if (!strncmp(pnam,"igr",3) OR !strncmp(pnam,"IGR",3)) { igrad = ival; } else if (!strncmp(pnam,"upd",3) OR !strncmp(pnam,"UPD",3)) { updir = ival; } else if (!strncmp(pnam,"non",3) OR !strncmp(pnam,"NON",3)) { non_neg = ival; } else if (!strncmp(pnam,"sdi",3) OR !strncmp(pnam,"SDI",3)) { sdip = ival; } else if (!strncmp(pnam,"rad",3) OR !strncmp(pnam,"RAD",3)) { rads = ival; } else if (!strncmp(pnam,"opt",3) OR !strncmp(pnam,"OPT",3)) { optim = ival; } else if (!strncmp(pnam,"ext",3) OR !strncmp(pnam,"EXT",3)) { extrap = ival; } else if (!strncmp(pnam,"adf",3) OR !strncmp(pnam,"ADF",3)) { adf = ival; } else if (!strncmp(pnam,"dup",3) OR !strncmp(pnam,"DUP",3)) { nndup = ival; } else { sprintf(emsg,"\n Parameter name supplied is: %s\n",pnam); ErrorHnd(23, "c_nnseti", filee, emsg); } } void NGCALLF(nnseti,NNSETI) (char *pnam, int *ival) { c_nnseti(pnam, *ival); } void NGCALLF(nngeti,NNGETI) (char *pnam, int *ival) { c_nngeti(pnam, ival); } void NGCALLF(fnnsetc,FNNSETC) (char *pnam, char *cval, int *clen) { char cdum[256]; int i; for (i = 0 ; i < *clen ; i++) { cdum[i] = cval[i]; } i = *clen; cdum[i] = '\0'; c_nnsetc(pnam, cdum); } void NGCALLF(fnngetc,FNNGETC) (char *pnam, char *cval, int *clen) { char cdum[256] = {" "}; int i,jf; c_nngetc(pnam, cdum); jf = 0; for (i = 0 ; i < *clen ; i++) { if ((cdum[i] != '\0') && (jf == 0)) { cval[i] = cdum[i]; } else { jf = 1; cval[i] = ' '; } } } PyBDSF-1.10.1/natgrid/Src/nnuserd.c000066400000000000000000000123351420247104600166260ustar00rootroot00000000000000#include "nnuheadd.h" #include "nnuhead.h" #include extern int error_status; /* * Get values for double parameters. */ void c_nngetrd(char *pnam, double *dval) { if (!strncmp(pnam,"bi",2) OR !strncmp(pnam,"BI",2) OR !strncmp(pnam,"bI",2) OR !strncmp(pnam,"Bi",2)) { *dval = bI; } else if (!strncmp(pnam,"bj",2) OR !strncmp(pnam,"BJ",2) OR !strncmp(pnam,"bJ",2) OR !strncmp(pnam,"Bj",2)) { *dval = bJ; } else if (!strncmp(pnam,"magx",4) OR !strncmp(pnam,"MAGX",4)) { *dval = magx; } else if (!strncmp(pnam,"magy",4) OR !strncmp(pnam,"MAGY",4)) { *dval = magy; } else if (!strncmp(pnam,"magz",4) OR !strncmp(pnam,"MAGZ",4)) { *dval = magz; } else if (!strncmp(pnam,"hor",3) OR !strncmp(pnam,"HOR",3)) { *dval = horilap; } else if (!strncmp(pnam,"ver",3) OR !strncmp(pnam,"VER",3)) { *dval = vertlap; } else if (!strncmp(pnam,"nul",3) OR !strncmp(pnam,"NUL",3)) { *dval = nuldat; } else if (!strncmp(pnam,"xas",3) OR !strncmp(pnam,"XAS",3)) { *dval = magx_auto; } else if (!strncmp(pnam,"yas",3) OR !strncmp(pnam,"YAS",3)) { *dval = magy_auto; } else if (!strncmp(pnam,"zas",3) OR !strncmp(pnam,"ZAS",3)) { *dval = magz_auto; } else { sprintf(emsg,"\n Parameter name supplied is: %s\n",pnam); ErrorHnd(23, "c_nngetrd", filee, emsg); } } /* * Set values for double parameters. */ void c_nnsetrd(char *pnam, double dval) { if (!strncmp(pnam,"bi",2) OR !strncmp(pnam,"BI",2) OR !strncmp(pnam,"bI",2) OR !strncmp(pnam,"Bi",2)) { if (dval < 1.) { bI = 1.; } else if (dval > 3.) { bI = 3.; } else { bI = dval; } } else if (!strncmp(pnam,"bj",2) OR !strncmp(pnam,"BJ",2) OR !strncmp(pnam,"bJ",2) OR !strncmp(pnam,"Bj",2)) { if (dval < 3.) { bJ = 3.; } else if (dval > 9.) { bJ = 9.; } else { bJ = dval; } } else if (!strncmp(pnam,"magx",4) OR !strncmp(pnam,"MAGX",4)) { magx = dval; } else if (!strncmp(pnam,"magy",4) OR !strncmp(pnam,"MAGY",4)) { magy = dval; } else if (!strncmp(pnam,"magz",4) OR !strncmp(pnam,"MAGZ",4)) { magz = dval; } else if (!strncmp(pnam,"hor",3) OR !strncmp(pnam,"HOR",3)) { horilap = dval; } else if (!strncmp(pnam,"ver",3) OR !strncmp(pnam,"VER",3)) { vertlap = dval; } else if (!strncmp(pnam,"nul",3) OR !strncmp(pnam,"NUL",3)) { nuldat = dval; } else { sprintf(emsg,"\n Parameter name supplied is: %s\n",pnam); ErrorHnd(23, "c_nnsetrd", filee, emsg); } } /* * C entries in support of the Fortran interface. */ #ifdef UNICOS void NGCALLF(natgridd,NATGRIDD) (int *n, double *x, double *y, double *z, int *nxg, int *nyg, double *xg, double *yg, double *zg, int *ier) { ErrorHnd(29, "natgridd", filee, "\n"); *ier = error_status; return; } #else void NGCALLF(natgridd,NATGRIDD) (int *n, double *x, double *y, double *z, int *nxg, int *nyg, double *xg, double *yg, double *zg, int *ier) { double *zar; int nn, mm; zar = c_natgridd(*n, x, y, z, *nxg, *nyg, xg, yg, ier); if (*ier) return; for (mm = 0 ; mm < *nxg ; mm++) { for (nn = 0 ; nn < *nyg ; nn++) { *(zg + nn * (*nxg) + mm) = zar[mm*(*nyg)+nn]; } } free(zar); return; } #endif #ifdef UNICOS void NGCALLF(nnsetrd,NNSETRD) (char *pnam, double *rval) { ErrorHnd(29, "nnsetrd", filee, "\n"); } #else void NGCALLF(nnsetrd,NNSETRD) (char *pnam, double *rval) { c_nnsetrd(pnam, *rval); } #endif #ifdef UNICOS void NGCALLF(nngetrd,NNGETRD) (char *pnam, double *rval) { ErrorHnd(29, "nngetrd", filee, "\n"); } #else void NGCALLF(nngetrd,NNGETRD) (char *pnam, double *rval) { c_nngetrd(pnam, rval); } #endif #ifdef UNICOS void NGCALLF(nngetsloped,NNGETSLOPED) (int *row, int *col, double *slope, int *ier) { ErrorHnd(29, "nngetsloped", filee, "\n"); *ier = error_status; } #else void NGCALLF(nngetsloped,NNGETSLOPED) (int *row, int *col, double *slope, int *ier) { c_nngetsloped(*row-1, *col-1, slope, ier); } #endif #ifdef UNICOS void NGCALLF(nngetaspectd,NNGETASPECTD) (int *row, int *col, double *aspect, int *ier) { ErrorHnd(29, "nngetaspectd", filee, "\n"); *ier = error_status; } #else void NGCALLF(nngetaspectd,NNGETASPECTD) (int *row, int *col, double *aspect, int *ier) { c_nngetaspectd(*row-1, *col-1, aspect, ier); } #endif #ifdef UNICOS void NGCALLF(nnpntinitd,NNPNTINITD) (int *n, double *x, double *y, double *z) { ErrorHnd(29, "nnpntinitd", filee, "\n"); } #else void NGCALLF(nnpntinitd,NNPNTINITD) (int *n, double *x, double *y, double *z) { c_nnpntinitd (*n, x, y, z); } #endif #ifdef UNICOS void NGCALLF(nnpntd,NNPNTD) (double *x, double *y, double *point) { ErrorHnd(29, "nnpntd", filee, "\n"); } #else void NGCALLF(nnpntd,NNPNTD) (double *x, double *y, double *point) { c_nnpntd (*x, *y, point); } #endif #ifdef UNICOS void NGCALLF(nnpntendd,NNPNTENDD) () { ErrorHnd(29, "nnpntendd", filee, "\n"); } #else void NGCALLF(nnpntendd,NNPNTENDD) () { c_nnpntendd (); } #endif PyBDSF-1.10.1/natgrid/Src/nnusers.c000066400000000000000000000075331420247104600166510ustar00rootroot00000000000000#include "nnuheads.h" #include "nnuhead.h" #include /* * Get values for float parameters. */ void c_nngetr(char *pnam, float *dval) { if (!strncmp(pnam,"bi",2) OR !strncmp(pnam,"BI",2) OR !strncmp(pnam,"bI",2) OR !strncmp(pnam,"Bi",2)) { *dval = bI; } else if (!strncmp(pnam,"bj",2) OR !strncmp(pnam,"BJ",2) OR !strncmp(pnam,"bJ",2) OR !strncmp(pnam,"Bj",2)) { *dval = bJ; } else if (!strncmp(pnam,"magx",4) OR !strncmp(pnam,"MAGX",4)) { *dval = magx; } else if (!strncmp(pnam,"magy",4) OR !strncmp(pnam,"MAGY",4)) { *dval = magy; } else if (!strncmp(pnam,"magz",4) OR !strncmp(pnam,"MAGZ",4)) { *dval = magz; } else if (!strncmp(pnam,"hor",3) OR !strncmp(pnam,"HOR",3)) { *dval = horilap; } else if (!strncmp(pnam,"ver",3) OR !strncmp(pnam,"VER",3)) { *dval = vertlap; } else if (!strncmp(pnam,"nul",3) OR !strncmp(pnam,"NUL",3)) { *dval = nuldat; } else if (!strncmp(pnam,"xas",3) OR !strncmp(pnam,"XAS",3)) { *dval = magx_auto; } else if (!strncmp(pnam,"yas",3) OR !strncmp(pnam,"YAS",3)) { *dval = magy_auto; } else if (!strncmp(pnam,"zas",3) OR !strncmp(pnam,"ZAS",3)) { *dval = magz_auto; } else { sprintf(emsg,"\n Parameter name supplied is: %s\n",pnam); ErrorHnd(23, "c_nngetr", filee, emsg); } } /* * Set values for float parameters. */ void c_nnsetr(char *pnam, float dval) { if (!strncmp(pnam,"bi",2) OR !strncmp(pnam,"BI",2) OR !strncmp(pnam,"bI",2) OR !strncmp(pnam,"Bi",2)) { if (dval < 1.) { bI = 1.; } else if (dval > 3.) { bI = 3.; } else { bI = dval; } } else if (!strncmp(pnam,"bj",2) OR !strncmp(pnam,"BJ",2) OR !strncmp(pnam,"bJ",2) OR !strncmp(pnam,"Bj",2)) { if (dval < 3.) { bJ = 3.; } else if (dval > 9.) { bJ = 9.; } else { bJ = dval; } } else if (!strncmp(pnam,"magx",4) OR !strncmp(pnam,"MAGX",4)) { magx = dval; } else if (!strncmp(pnam,"magy",4) OR !strncmp(pnam,"MAGY",4)) { magy = dval; } else if (!strncmp(pnam,"magz",4) OR !strncmp(pnam,"MAGZ",4)) { magz = dval; } else if (!strncmp(pnam,"hor",3) OR !strncmp(pnam,"HOR",3)) { horilap = dval; } else if (!strncmp(pnam,"ver",3) OR !strncmp(pnam,"VER",3)) { vertlap = dval; } else if (!strncmp(pnam,"nul",3) OR !strncmp(pnam,"NUL",3)) { nuldat = dval; } else { sprintf(emsg,"\n Parameter name supplied is: %s\n",pnam); ErrorHnd(23, "c_nngetc", filee, emsg); } } /* * C entries in support of the Fortran interface. */ void NGCALLF(natgrids,NATGRIDS) (int *n, float *x, float *y, float *z, int *nxg, int *nyg, float *xg, float *yg, float *zg, int *ier) { float *zar; int nn, mm; zar = c_natgrids(*n, x, y, z, *nxg, *nyg, xg, yg, ier); if (*ier) return; for (mm = 0 ; mm < *nxg ; mm++) { for (nn = 0 ; nn < *nyg ; nn++) { *(zg + nn * (*nxg) + mm) = zar[mm*(*nyg)+nn]; } } free(zar); return; } void NGCALLF(nnsetr,NNSETR) (char *pnam, float *rval) { c_nnsetr(pnam, *rval); } void NGCALLF(nngetr,NNGETR) (char *pnam, float *rval) { c_nngetr(pnam, rval); } void NGCALLF(nngetslopes,NNGETSLOPES) (int *row, int *col, float *slope, int *ier) { c_nngetslopes(*row-1, *col-1, slope, ier); } void NGCALLF(nngetaspects,NNGETASPECTS) (int *row, int *col, float *aspect, int *ier) { c_nngetaspects(*row-1, *col-1, aspect, ier); } void NGCALLF(nnpntinits,NNPNTINITS) (int *n, float *x, float *y, float *z) { c_nnpntinits (*n, x, y, z); } void NGCALLF(nnpnts,NNPNTS) (float *x, float *y, float *point) { c_nnpnts (*x, *y, point); } void NGCALLF(nnpntend,NNPNTEND) () { c_nnpntend (); } PyBDSF-1.10.1/natgrid/Test/000077500000000000000000000000001420247104600151705ustar00rootroot00000000000000PyBDSF-1.10.1/natgrid/Test/test_natgrid.py000077500000000000000000001437711420247104600202510ustar00rootroot00000000000000# Adapted for numpy/ma/cdms2 by convertcdms.py """Documentation for module natgridtest: an automatic test for natgrid, an interface to the ngmath NATGRID TESTING Typing cdat natgridtest.py generates some testing of the natgridmodule using analytical functions as fields. It also writes a hard copy of the documentation to the file natgridmodule.doc and a copy of the information describing the nature of the tests to test.asc. For the single and the double precision interpolations from randomly spaced data to a rectangular grid on a sphere, the numerical results are written to netCDF files if there is access to the module cdms. DOCUMENTATION Without conducting the tests, documentation written to the file natgridmodule.doc can be produced after importing the natgridtest module by typing natgridtest.document() """ import sys, numpy, math, random, nat, natgridmodule writeTestcase = 'yes' try: import cdms2 except ImportError: print 'Can not write test case results to netCDF files without module cdms2' writeTestcase = 'no' def document(): #------------------------------------------------------------------------------- # # purpose: 'document' writes documentation for the user to a file # # usage: import natgridtest # natgridtest.document() # # passed : nothing # # returned: nothing # #------------------------------------------------------------------------------- import nat std = sys.stdout # save sys.stout to allow reassigning later sys.stdout = open( 'natgridmodule.doc', 'w') print '**********************************************************************************************\n' print '*************************** Overview of the CDAT interface to natgrid ************************\n' print '**********************************************************************************************\n' print nat.__doc__ print print print ' HELP PACKAGE EXAMPLE \n' print ' ************************ Default Parameter Table **********************\n' print ' -----------------------------------------------------------------------------------------------------' nat.help('table') print sys.stdout = std return None def sendOutput(msg, value = None, screen = 'no'): #------------------------------------------------------------------------------ # # purpose: send a message and optionally a value a file and if screen is not 'no' # send the same thing to the screen # # usage: sendOutput(msg, value = number, screen = 'yes') # # passed : msg - the string to write to the output media # value - a number # screen - a string set to something different from 'no' if the output also # goes to the screen # # returned: None # #------------------------------------------------------------------------------ if value is None: if screen != 'no': print msg output.write(msg + '\n') else: if screen != 'no': print msg, `value` output.write(msg + ' %15.11e\n' % (value,)) return None # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # ++++++++++++++++++++++++++++++++++ Autotest Calls ++++++++++++++++++++++++++++++++++ # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ def runtests(): #----------------------------------------------------------------------------- # # purpose: call test cases # #----------------------------------------------------------------------------- sendOutput('############################################################################################') sendOutput('################## Here are the results of running analytical test cases #####################') sendOutput('############################################################################################') testError = 0 for n in range(1,8): err = choose(n) if err != 0: #print 'test number with error :',n,err testError = testError + 1 return testError def choose(case): #------------------------------------------------------------------------------- # # purpose: check out natgrid # # case 1: a simple 2D interpolation using y32 -- single precision #--------------------------------------------------------------------------------- err = 0 if case == 1: sendOutput('\n******* natural neighbor linear interpolation -- single precision *****\n') # array dimensions ni = 6 # size of xi, yi, and dataIn nxo = 21 nyo = 21 # input arrays and data xiList = [0.00, 1.00, 0.00, 1.00, 0.40, 0.75] yiList = [0.00, 0.00, 1.00, 1.00, 0.20, 0.65] dataInList = [0.00, 0.00, 0.00, 0.00, 1.25, 0.80] xi = numpy.array(xiList, numpy.float32) yi = numpy.array(yiList, numpy.float32) dataIn = numpy.array(dataInList, numpy.float32) # output array xo = uniformGrid(nxo, 1.0, 0.0) yo = uniformGrid(nyo, 1.0, 0.0) r = nat.Natgrid(xi, yi, xo, yo) dataOut = r.rgrd(dataIn) sendOutput('*** writing single precision linear interpolation test case to the netCDF file SingleLinearRegrid.nc') write1D_4DField('SingleLinearRegrid', dataOut, xo, yo) dataCheck = storedAnswers('linearRegrid') dataCheck = numpy.reshape(dataCheck, (nxo,nyo)) error = rmserror(dataOut, dataCheck) # find the rms error sendOutput('\n******* compare results\n') sendOutput('*** the linear interpolation test case rms error is usually less than 1.e-05') sendOutput('*** the linear interpolation test case rms error = ', error) if error > .0001: err = 1 return err elif case == 2: sendOutput('\n******* natural neighbor linear interpolation -- double precision *****\n') # array dimensions ni = 6 # size 0f xi, yi, and dataIn nxo = 21 nyo = 21 # input arrays and data xiList = [0.00, 1.00, 0.00, 1.00, 0.40, 0.75] yiList = [0.00, 0.00, 1.00, 1.00, 0.20, 0.65] dataInList = [0.00, 0.00, 0.00, 0.00, 1.25, 0.80] xi = numpy.array(xiList, numpy.float64) yi = numpy.array(yiList, numpy.float64) dataIn = numpy.array(dataInList, numpy.float64) # output array xo = uniformGrid(nxo, 1.0, 0.0) yo = uniformGrid(nyo, 1.0, 0.0) xo = xo.astype(numpy.float64) yo = yo.astype(numpy.float64) r = nat.Natgrid(xi, yi, xo, yo) dataOut = r.rgrd(dataIn) xo = xo.astype(numpy.float32) # convert back to single precision yo = yo.astype(numpy.float32) dataOut = dataOut.astype(numpy.float32) sendOutput('*** writing double precision linear interpolation test case to the netCDF file DoubleLinearRegrid.nc') write1D_4DField('DoubleLinearRegrid', dataOut, xo, yo) dataCheck = storedAnswers('linearRegrid') dataCheck = numpy.reshape(dataCheck, (nxo,nyo)) error = rmserror(dataOut, dataCheck) # find the rms error sendOutput('\n******* compare results\n') sendOutput('*** the linear interpolation test case rms error is usually less than 1.e-05') sendOutput('*** the linear interpolation test case rms error = ', error) if error > .0001: err = 1 return err elif case == 3: sendOutput('\n******* natural neighbor nonlinear interpolation -- single precision *****\n') # array dimensions ni = 6 # size of xi, yi, and dataIn nxo = 21 nyo = 21 # input arrays and data xiList = [0.00, 1.00, 0.00, 1.00, 0.40, 0.75] yiList = [0.00, 0.00, 1.00, 1.00, 0.20, 0.65] dataInList = [0.00, 0.00, 0.00, 0.00, 1.25, 0.80] xi = numpy.array(xiList, numpy.float32) yi = numpy.array(yiList, numpy.float32) dataIn = numpy.array(dataInList, numpy.float32) # output array xo = uniformGrid(nxo, 1.0, 0.0) yo = uniformGrid(nyo, 1.0, 0.0) r = nat.Natgrid(xi, yi, xo, yo) r.igr = 1 # choose nonlinear interpolation dataOut = r.rgrd(dataIn) sendOutput('*** writing single precision nonlinear interpolation test case to the netCDF file SingleNonlinearRegrid.nc') write1D_4DField('SingleNonlinearRegrid', dataOut, xo, yo) dataCheck = storedAnswers('nonlinearRegrid') dataCheck = numpy.reshape(dataCheck, (nxo,nyo)) error = rmserror(dataOut, dataCheck) # find the rms error sendOutput('\n******* compare results\n') sendOutput('*** the nonlinear interpolation test case rms error is usually less than 1.e-05') sendOutput('*** the nonlinear interpolation test case rms error = ', error) if error > .0001: err = 1 return err elif case == 4: sendOutput('\n******* natural neighbor nonlinear interpolation -- double precision *****\n') # array dimensions ni = 6 # size 0f xi, yi, and dataIn nxo = 21 nyo = 21 # input arrays and data xiList = [0.00, 1.00, 0.00, 1.00, 0.40, 0.75] yiList = [0.00, 0.00, 1.00, 1.00, 0.20, 0.65] dataInList = [0.00, 0.00, 0.00, 0.00, 1.25, 0.80] xi = numpy.array(xiList, numpy.float64) yi = numpy.array(yiList, numpy.float64) dataIn = numpy.array(dataInList, numpy.float64) # output array xo = uniformGrid(nxo, 1.0, 0.0) yo = uniformGrid(nyo, 1.0, 0.0) xo = xo.astype(numpy.float64) yo = yo.astype(numpy.float64) r = nat.Natgrid(xi, yi, xo, yo) r.igr = 1 # choose nonlinear interpolation dataOut = r.rgrd(dataIn) xo = xo.astype(numpy.float32) # convert back to single precision yo = yo.astype(numpy.float32) dataOut = dataOut.astype(numpy.float32) sendOutput('*** writing double precision nonlinear interpolation test case to the netCDF file DoubleNonlinearRegrid.nc') write1D_4DField('DoubleNonlinearRegrid', dataOut, xo, yo) dataCheck = storedAnswers('nonlinearRegrid') dataCheck = numpy.reshape(dataCheck, (nxo,nyo)) error = rmserror(dataOut, dataCheck) # find the rms error sendOutput('\n******* compare results\n') sendOutput('*** the nonlinear interpolation test case rms error is usually less than 1.e-05') sendOutput('*** the nonlinear interpolation test case rms error = ', error) if error > .0001: err = 1 return err elif case == 5: sendOutput('\n******* interpolation and computation of aspects and slopes -- single precision *******\n') # array dimensions ni = 800 # size of xi, yi, and dataIn nxo = 21 nyo = 21 # input array and data xisort, xi = randomGrid(ni, 1.2, -0.2) # xisort has random numbers monotonically increasing yisort, yi = randomGrid(ni, 1.2, -0.2) dataIn = numpy.zeros((ni,), numpy.float32) for i in range(ni): dataIn[i] = (xi[i] - 0.25)*(xi[i] - 0.25) + (yi[i] - 0.50)*(yi[i] - 0.50) # output array xo = uniformGrid(nxo, 1.0, 0.0) yo = uniformGrid(nyo, 1.0, 0.0) r = nat.Natgrid(xi, yi, xo, yo) dataOut, aspect, slope = r.rgrd(dataIn, aspectSlope = 'yes') sendOutput('*** writing single precision linear interpolation test case to the netCDF file AspectSlopeRegrid.nc') write1D_4DField('AspectSlopeRegrid', dataOut, xo, yo) # Calculate the exact answer dataCheck = numpy.zeros((nxo, nyo), numpy.float32) for i in range(nxo): for j in range(nyo): dataCheck[i,j] = (xo[i] - 0.25)*(xo[i] - 0.25) + (yo[j] - 0.50)*(yo[j] - 0.50) sendOutput('*** writing exact answer to single precision interpolation test case to the netCDF file AspectSlopeExact.nc') write1D_4DField('AspectSlopeExact', dataOut, xo, yo) error = rmserror(dataOut, dataCheck) # find the rms error sendOutput('\n******* compare results\n') sendOutput('*** the linear interpolation test case rms error is usually about 1.e-03') sendOutput('*** the linear interpolation test case rms error = ', error) # Calculate the x and y aspects u = numpy.zeros((nxo, nyo), numpy.float32) v = numpy.zeros((nxo, nyo), numpy.float32) for i in range(nxo): for j in range(nyo): uvtemp = (math.pi/180.)*aspect[i,j] u[i,j] = math.cos(uvtemp) v[i,j] = math.sin(uvtemp) sendOutput('*** writing the cosine of the aspect to xaspect.nc') sendOutput('*** writing the sine of the aspect to yaspect.nc') write1D_4DField('xaspect', u, xo, yo) write1D_4DField('yaspect', v, xo, yo) if error > .01: err = 1 return err elif case == 6: sendOutput('\n******* single point mode -- single precision *****\n') # array dimensions ni = 171 # size of xi, yi, and dataIn nxo = 21 nyo = 21 # input arrays and data xisort, xi = randomGrid(ni, 1.2, -0.2) # xisort has random numbers monotonically increasing yisort, yi = randomGrid(ni, 1.2, -0.2) dataIn = numpy.zeros((ni,), numpy.float32) for i in range(ni): dataIn[i] = (xi[i] - 0.25)*(xi[i] - 0.25) + (yi[i] - 0.50)*(yi[i] - 0.50) # output array xo = uniformGrid(nxo, 1.0, 0.0) yo = uniformGrid(nyo, 1.0, 0.0) xn, yn = grid2Dto1D(xo, yo) r = nat.Natgrid(xi, yi, xn, yn, listOutput = 'yes') r.igr = 1 # choose nonlinear interpolation zn = r.rgrd(dataIn) xo, yo, dataOut = c1Dto2D(nxo, nyo, xn, yn, zn) sendOutput('*** writing single precision single point mode test case to the netCDF file SinglePointMode.nc') write1D_4DField('SinglePointMode', dataOut, xo, yo) dataCheck = numpy.zeros((nxo,nyo), numpy.float32) for i in range(nxo): for j in range(nyo): dataCheck[i,j] = (xo[i] - 0.25)*(xo[i] - 0.25) + (yo[j] - 0.50)*(yo[j] - 0.50) sendOutput('*** writing exact answer to single precision single point mode test case to the netCDF file SinglePointExact.nc') write1D_4DField('SinglePointExact', dataOut, xo, yo) error = rmserror(dataOut, dataCheck) # find the rms error sendOutput('\n******* compare results\n') sendOutput('*** the nonlinear single point mode test case rms error is usually less than 1.e-02') sendOutput('*** the nonlinear single point test case rms error = ', error) if error > .01: err = 1 return err elif case == 7: sendOutput('\n******* nonlinear interpolation of y32 with a wrap -- single precision *****\n') # input arrays and data lati,latiSort,loni,loniSort = storedGrids() y32 = YData(loni, lati) # y32(lati[i], loni[j]) format newOrder = (1,0) y32 = numpy.transpose(y32, newOrder) lonLinear, latLinear, y32Linear = c2Dto1D(loni, lati, y32) # change to the linear list format # output array nlato = 71 nlono = 144 lato = uniformGrid(nlato, 87.5, -87.5) # start at - 87.5 lono = uniformGrid(nlono, 357.5, 0.0) # start at 0. r = nat.Natgrid(latLinear, lonLinear, lato, lono) #r.igr = 1 # choose nonlinear interpolation dataOut = r.rgrd(y32Linear, wrap = 'yes') dataCheck = YData(lono, lato) # longitude varies the fastest sendOutput('*** writing exact answer to single precision y32 interpolatiion test case to the netCDF file y32Exact.nc') write1D_4DField('y32Exact', dataCheck, lato, lono) # lono varies the fastest. Shape is(nlati, nloni) sendOutput('*** writing single precision y32 interpolation test case to the netCDF file y32Regrid.nc') write1D_4DField('y32Regrid', dataOut, lato, lono) error = rmserror(dataOut, dataCheck) # find the rms error sendOutput('\n******* compare results\n') sendOutput('*** the nonlinear interpolation test case rms error is usually less than 1.e-02') sendOutput('*** the nonlinear interpolation test case rms error = ', error) if error > .01: err = 1 return err dataCheck = YData(lono, lato) # longitude varies the fastest write1D_4DField('data_Check', dataCheck, lato, lono) # lono varies the fastest. Shape is(nlati, nloni) # ------------------------------------------------------------------------------ # Call the interpolator print 'making instance for case 8' r = nat.Natgrid(latLinear, lonLinear, lato, lono) print 'call rgrd method for case 8' dataOut = r.rgrd(y32Linear, wrap = 'yes') print 'returning from call rgrd method for case 8' write1D_4DField('wrapdata_Out', dataOut, lato, lono) # loni varies the fastest. Shape is(nlati, nloni) print 'dataOut and dataCheck shapes before call to rmserror', dataOut.shape, dataCheck.shape error = rmserror(dataOut, dataCheck) # find the rms error print 'case 1 rms error = ', error return None # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ # ++++++++++++++++++++++++++++++++ Autotest Utilities +++++++++++++++++++++++++++++++++ # ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ def randomGrid(number, vmax, vmin): #---------------------------------------------------------------------------------------- # # purpose: to construct a grid coordinate which is random but monotonically increasing # # usage: vsort, vraw = randomGrid(number, vmax, vmin) # # passed: number - the size of the array # vmax - the largest possible value # vmin - the smallest possible value # # returned: vsort - a numpy array sorted to be monotonically increasing # vraw - the same array as vsort without the sort into a monotonically # increasing values # #----------------------------------------------------------------------------------------- listNumbers = [] # generate random numbers vrange = vmax - vmin for i in range(number): listNumbers.append(vmin + vrange*random.random() ) vraw = numpy.array(listNumbers, numpy.float32) # make array of raw list of random numbers listNumbers.sort() # make array of sorted list of random numbers listNumbers.reverse() # make array of sorted list of random numbers vsort = numpy.array(listNumbers, numpy.float32) return vsort, vraw def storedAnswers(choice): #---------------------------------------------------------------------------------------- # # purpose: to store the answers to selected test cases # # usage: data = storedAnswers(choice) # # passed : choice -- a string idetifying the desired data # # returned: data # #---------------------------------------------------------------------------------------- if choice == 'linearRegrid': linearRegridList = [ 8.4993E-07, 3.7050E-03, 6.9907E-03, 9.8621E-03, 1.2324E-02, 1.4383E-02, 1.6037E-02, 1.7102E-02, 1.7583E-02, 1.7586E-02, 1.7189E-02, 1.6454E-02, 1.5428E-02, 1.4147E-02, 1.2642E-02, 1.0937E-02, 9.0519E-03, 7.0031E-03, 4.8043E-03, 2.4671E-03, 4.3879E-06, 7.2811E-03, 1.5625E-01, 1.5625E-01, 1.5625E-01, 1.5625E-01, 1.5625E-01, 1.5476E-01, 1.5088E-01, 1.4598E-01, 1.4069E-01, 1.3534E-01, 1.3005E-01, 1.2487E-01, 1.1980E-01, 1.1476E-01, 1.0963E-01, 1.0414E-01, 9.7756E-02, 8.8053E-02, 6.6249E-02, 8.4452E-04, 1.3750E-02, 2.6209E-01, 3.1250E-01, 3.1250E-01, 3.1250E-01, 3.1158E-01, 3.0454E-01, 2.9412E-01, 2.8246E-01, 2.7050E-01, 2.5865E-01, 2.4703E-01, 2.3563E-01, 2.2431E-01, 2.1283E-01, 2.0076E-01, 1.8705E-01, 1.6770E-01, 1.3780E-01, 8.7170E-02, 1.6137E-03, 1.9411E-02, 2.9894E-01, 4.5966E-01, 4.6875E-01, 4.6875E-01, 4.6336E-01, 4.4829E-01, 4.2966E-01, 4.1005E-01, 3.9052E-01, 3.7142E-01, 3.5281E-01, 3.3451E-01, 3.1623E-01, 2.9748E-01, 2.7694E-01, 2.5040E-01, 2.1500E-01, 1.6605E-01, 9.5877E-02, 2.3095E-03, 2.4271E-02, 3.1159E-01, 5.5232E-01, 6.2500E-01, 6.2490E-01, 6.1118E-01, 5.8621E-01, 5.5806E-01, 5.2959E-01, 5.0180E-01, 4.7493E-01, 4.4884E-01, 4.2320E-01, 3.9749E-01, 3.7065E-01, 3.3827E-01, 2.9815E-01, 2.4785E-01, 1.8341E-01, 1.0017E-01, 2.9305E-03, 2.8341E-02, 3.1249E-01, 6.0503E-01, 7.7272E-01, 7.8001E-01, 7.5547E-01, 7.1872E-01, 6.7979E-01, 6.4164E-01, 6.0504E-01, 5.6997E-01, 5.3607E-01, 5.0277E-01, 4.6931E-01, 4.3199E-01, 3.8746E-01, 3.3460E-01, 2.7123E-01, 1.9442E-01, 1.0243E-01, 3.4747E-03, 3.1627E-02, 3.1249E-01, 6.2499E-01, 8.7816E-01, 9.3479E-01, 8.9655E-01, 8.4565E-01, 7.9466E-01, 7.4613E-01, 7.0030E-01, 6.5677E-01, 6.1484E-01, 5.7368E-01, 5.3151E-01, 4.8291E-01, 4.2690E-01, 3.6244E-01, 2.8776E-01, 2.0100E-01, 1.0437E-01, 3.9397E-03, 3.4140E-02, 3.1249E-01, 6.2500E-01, 9.3601E-01, 1.0908E+00, 1.0330E+00, 9.6510E-01, 9.0112E-01, 8.4192E-01, 7.8681E-01, 7.3480E-01, 6.8485E-01, 6.3583E-01, 5.8391E-01, 5.2465E-01, 4.5798E-01, 3.8304E-01, 2.9858E-01, 2.0549E-01, 1.0620E-01, 4.3220E-03, 3.5887E-02, 3.1250E-01, 6.2500E-01, 9.3750E-01, 1.2500E+00, 1.1529E+00, 1.0692E+00, 9.9449E-01, 9.2588E-01, 8.6236E-01, 8.0251E-01, 7.4497E-01, 6.8836E-01, 6.2670E-01, 5.5756E-01, 4.8112E-01, 3.9679E-01, 3.0586E-01, 2.0979E-01, 1.0798E-01, 4.6174E-03, 3.6877E-02, 3.1250E-01, 6.2396E-01, 9.1734E-01, 1.1479E+00, 1.1546E+00, 1.1088E+00, 1.0471E+00, 9.8424E-01, 9.2126E-01, 8.5666E-01, 7.9286E-01, 7.2938E-01, 6.5911E-01, 5.8108E-01, 4.9636E-01, 4.0694E-01, 3.1293E-01, 2.1400E-01, 1.0972E-01, 4.8200E-03, 3.7117E-02, 3.1097E-01, 6.0588E-01, 8.6639E-01, 1.0526E+00, 1.0806E+00, 1.0693E+00, 1.0360E+00, 9.9296E-01, 9.4356E-01, 8.8783E-01, 8.2419E-01, 7.5644E-01, 6.8069E-01, 5.9785E-01, 5.0976E-01, 4.1712E-01, 3.1998E-01, 2.1814E-01, 1.1139E-01, 4.9216E-03, 3.6509E-02, 3.0353E-01, 5.7902E-01, 8.1072E-01, 9.6003E-01, 9.8676E-01, 1.0031E+00, 9.9376E-01, 9.6959E-01, 9.3602E-01, 8.9422E-01, 8.4272E-01, 7.7847E-01, 7.0090E-01, 6.1499E-01, 5.2351E-01, 4.2744E-01, 3.2700E-01, 2.2214E-01, 1.1290E-01, 4.9105E-03, 3.4793E-02, 2.9338E-01, 5.4929E-01, 7.5334E-01, 8.6617E-01, 8.9081E-01, 9.1544E-01, 9.3057E-01, 9.2741E-01, 9.1235E-01, 8.8750E-01, 8.5160E-01, 8.0010E-01, 7.2228E-01, 6.3305E-01, 5.3775E-01, 4.3786E-01, 3.3380E-01, 2.2572E-01, 1.1400E-01, 4.7721E-03, 3.2230E-02, 2.8206E-01, 5.1778E-01, 6.9308E-01, 7.7022E-01, 7.9485E-01, 8.1948E-01, 8.4411E-01, 8.6324E-01, 8.6898E-01, 8.6426E-01, 8.4838E-01, 8.1552E-01, 7.4542E-01, 6.5225E-01, 5.5230E-01, 4.4790E-01, 3.3973E-01, 2.2820E-01, 1.1429E-01, 4.5258E-03, 2.9007E-02, 2.6994E-01, 4.8377E-01, 6.2700E-01, 6.7426E-01, 6.9889E-01, 7.2353E-01, 7.4816E-01, 7.7279E-01, 7.9709E-01, 8.1464E-01, 8.2358E-01, 8.1914E-01, 7.7103E-01, 6.7221E-01, 5.6584E-01, 4.5576E-01, 3.4286E-01, 2.2858E-01, 1.1429E-01, 4.1797E-03, 2.5235E-02, 2.5676E-01, 4.4512E-01, 5.5023E-01, 5.7831E-01, 6.0294E-01, 6.2757E-01, 6.5220E-01, 6.7608E-01, 6.9914E-01, 7.2227E-01, 7.4625E-01, 7.7187E-01, 7.9999E-01, 6.8572E-01, 5.7143E-01, 4.5715E-01, 3.4286E-01, 2.2858E-01, 1.1429E-01, 3.7338E-03, 2.0987E-02, 2.4149E-01, 3.9756E-01, 4.5772E-01, 4.8235E-01, 5.0624E-01, 5.2689E-01, 5.4531E-01, 5.6257E-01, 5.7940E-01, 5.9628E-01, 6.1336E-01, 6.2992E-01, 6.3999E-01, 6.3186E-01, 5.6427E-01, 4.5715E-01, 3.4286E-01, 2.2858E-01, 1.1429E-01, 3.1880E-03, 1.6310E-02, 2.2155E-01, 3.3264E-01, 3.6166E-01, 3.8203E-01, 3.9797E-01, 4.1139E-01, 4.2346E-01, 4.3486E-01, 4.4598E-01, 4.5695E-01, 4.6754E-01, 4.7658E-01, 4.7999E-01, 4.7999E-01, 4.7245E-01, 4.2657E-01, 3.4218E-01, 2.2858E-01, 1.1429E-01, 2.5420E-03, 1.1239E-02, 1.8956E-01, 2.4052E-01, 2.5713E-01, 2.6835E-01, 2.7702E-01, 2.8442E-01, 2.9121E-01, 2.9769E-01, 3.0399E-01, 3.1006E-01, 3.1554E-01, 3.1941E-01, 3.1999E-01, 3.1999E-01, 3.1999E-01, 3.1737E-01, 2.9044E-01, 2.2479E-01, 1.1429E-01, 1.7957E-03, 5.7978E-03, 1.1982E-01, 1.3170E-01, 1.3741E-01, 1.4126E-01, 1.4439E-01, 1.4721E-01, 1.4990E-01, 1.5251E-01, 1.5503E-01, 1.5735E-01, 1.5920E-01, 1.6000E-01, 1.6000E-01, 1.6000E-01, 1.6000E-01, 1.6000E-01, 1.6000E-01, 1.5335E-01, 1.1016E-01, 9.4906E-04, 7.6115E-08, 1.3378E-03, 2.5593E-03, 3.6624E-03, 4.6450E-03, 5.5041E-03, 6.2360E-03, 6.8355E-03, 7.2956E-03, 7.6065E-03, 7.7542E-03, 7.7177E-03, 7.4883E-03, 7.1010E-03, 6.5572E-03, 5.8568E-03, 4.9997E-03, 3.9857E-03, 2.8145E-03, 1.4861E-03, 9.4486E-07] return numpy.array((linearRegridList), numpy.float32) elif choice == 'nonlinearRegrid': nonlinearRegridList = [ 1.4061E-07, 5.9856E-04, 3.3025E-03, 7.1219E-03, 1.1544E-02, 1.6204E-02, 2.0812E-02, 2.5066E-02, 2.8761E-02, 3.1773E-02, 3.4004E-02, 3.5371E-02, 3.5807E-02, 3.5254E-02, 3.3662E-02, 3.0987E-02, 2.7190E-02, 2.2235E-02, 1.6086E-02, 8.6904E-03, 9.3576E-07, -1.6475E-03, 4.0636E-02, 5.1891E-02, 6.2648E-02, 7.2691E-02, 8.1856E-02, 8.8773E-02, 9.2560E-02, 9.4276E-02, 9.4444E-02, 9.3304E-02, 9.0947E-02, 8.7384E-02, 8.2576E-02, 7.6457E-02, 6.8940E-02, 5.9917E-02, 4.9275E-02, 3.6498E-02, 2.0278E-02, 1.0188E-04, -2.3704E-03, 1.1213E-01, 1.6880E-01, 1.8774E-01, 2.0453E-01, 2.1804E-01, 2.2176E-01, 2.1920E-01, 2.1323E-01, 2.0517E-01, 1.9562E-01, 1.8480E-01, 1.7278E-01, 1.5950E-01, 1.4489E-01, 1.2884E-01, 1.1104E-01, 8.9636E-02, 6.3626E-02, 3.2008E-02, -8.7618E-05, -2.3976E-03, 1.5408E-01, 3.2600E-01, 3.6266E-01, 3.8633E-01, 3.9820E-01, 3.9203E-01, 3.7764E-01, 3.5940E-01, 3.3920E-01, 3.1785E-01, 2.9562E-01, 2.7254E-01, 2.4856E-01, 2.2356E-01, 1.9698E-01, 1.6591E-01, 1.2967E-01, 8.7819E-02, 4.0778E-02, -4.2476E-04, -1.9720E-03, 1.7771E-01, 4.5068E-01, 5.6699E-01, 5.9747E-01, 6.0036E-01, 5.8014E-01, 5.5077E-01, 5.1774E-01, 4.8328E-01, 4.4829E-01, 4.1306E-01, 3.7759E-01, 3.4182E-01, 3.0540E-01, 2.6448E-01, 2.1798E-01, 1.6583E-01, 1.0820E-01, 4.7477E-02, -8.5668E-04, -1.2987E-03, 1.8918E-01, 5.3532E-01, 7.6919E-01, 8.1425E-01, 8.0561E-01, 7.7032E-01, 7.2542E-01, 6.7709E-01, 6.2785E-01, 5.7870E-01, 5.2997E-01, 4.8176E-01, 4.3409E-01, 3.8373E-01, 3.2738E-01, 2.6522E-01, 1.9749E-01, 1.2515E-01, 5.2692E-02, -1.3503E-03, -5.4612E-04, 1.9741E-01, 5.7911E-01, 9.1567E-01, 1.0141E+00, 9.9646E-01, 9.4885E-01, 8.9058E-01, 8.2845E-01, 7.6536E-01, 7.0264E-01, 6.4088E-01, 5.8039E-01, 5.2051E-01, 4.5538E-01, 3.8409E-01, 3.0698E-01, 2.2467E-01, 1.3902E-01, 5.7014E-02, -1.8810E-03, 1.5272E-04, 2.0341E-01, 5.9346E-01, 9.9962E-01, 1.1721E+00, 1.1542E+00, 1.1021E+00, 1.0360E+00, 9.6363E-01, 8.8911E-01, 8.1453E-01, 7.4107E-01, 6.6956E-01, 5.9736E-01, 5.1877E-01, 4.3381E-01, 3.4303E-01, 2.4748E-01, 1.5066E-01, 6.0634E-02, -2.4281E-03, 6.9861E-04, 2.0731E-01, 6.0225E-01, 1.0160E+00, 1.2500E+00, 1.2555E+00, 1.2148E+00, 1.1508E+00, 1.0743E+00, 9.9241E-01, 9.0888E-01, 8.2606E-01, 7.4565E-01, 6.6273E-01, 5.7280E-01, 4.7605E-01, 3.7323E-01, 2.6681E-01, 1.6090E-01, 6.3627E-02, -2.9730E-03, 1.0247E-03, 2.0918E-01, 6.0431E-01, 9.9699E-01, 1.2241E+00, 1.2631E+00, 1.2530E+00, 1.2085E+00, 1.1440E+00, 1.0666E+00, 9.7985E-01, 8.9131E-01, 8.0517E-01, 7.1501E-01, 6.1671E-01, 5.1081E-01, 3.9933E-01, 2.8423E-01, 1.6982E-01, 6.6003E-02, -3.4978E-03, 1.0951E-03, 2.0736E-01, 5.7738E-01, 9.3136E-01, 1.1486E+00, 1.2035E+00, 1.2158E+00, 1.1947E+00, 1.1512E+00, 1.0908E+00, 1.0171E+00, 9.3223E-01, 8.4588E-01, 7.5422E-01, 6.5262E-01, 5.4169E-01, 4.2310E-01, 2.9972E-01, 1.7733E-01, 6.7690E-02, -3.9847E-03, 8.6025E-04, 1.9721E-01, 5.3426E-01, 8.4983E-01, 1.0425E+00, 1.0970E+00, 1.1360E+00, 1.1387E+00, 1.1160E+00, 1.0752E+00, 1.0199E+00, 9.5238E-01, 8.7484E-01, 7.8660E-01, 6.8440E-01, 5.6941E-01, 4.4420E-01, 3.1296E-01, 1.8312E-01, 6.8501E-02, -4.4155E-03, 2.4226E-04, 1.8267E-01, 4.8442E-01, 7.5872E-01, 9.1395E-01, 9.6583E-01, 1.0156E+00, 1.0482E+00, 1.0516E+00, 1.0343E+00, 1.0007E+00, 9.5303E-01, 8.9252E-01, 8.1160E-01, 7.1103E-01, 5.9312E-01, 4.6183E-01, 3.2305E-01, 1.8641E-01, 6.8047E-02, -4.7698E-03, -5.8461E-04, 1.6578E-01, 4.3042E-01, 6.5949E-01, 7.7110E-01, 8.2280E-01, 8.7431E-01, 9.2200E-01, 9.5600E-01, 9.6629E-01, 9.5780E-01, 9.3276E-01, 8.9167E-01, 8.2627E-01, 7.3058E-01, 6.1102E-01, 4.7395E-01, 3.2792E-01, 1.8550E-01, 6.5685E-02, -5.0087E-03, -1.4594E-03, 1.4726E-01, 3.7257E-01, 5.5181E-01, 6.2548E-01, 6.7771E-01, 7.3133E-01, 7.8294E-01, 8.2931E-01, 8.6682E-01, 8.8664E-01, 8.8759E-01, 8.6922E-01, 8.2572E-01, 7.3918E-01, 6.1846E-01, 4.7522E-01, 3.2240E-01, 1.7822E-01, 6.2363E-02, -5.0958E-03, -2.2396E-03, 1.2721E-01, 3.1004E-01, 4.3490E-01, 4.8592E-01, 5.3958E-01, 5.9600E-01, 6.5193E-01, 7.0330E-01, 7.4713E-01, 7.8192E-01, 8.0552E-01, 8.1423E-01, 8.0000E-01, 7.2297E-01, 5.9985E-01, 4.5521E-01, 3.0629E-01, 1.6880E-01, 5.8577E-02, -4.9947E-03, -2.7897E-03, 1.0526E-01, 2.4121E-01, 3.1212E-01, 3.6074E-01, 4.1573E-01, 4.6891E-01, 5.1792E-01, 5.6226E-01, 6.0169E-01, 6.3568E-01, 6.6300E-01, 6.8064E-01, 6.7757E-01, 6.4324E-01, 5.5705E-01, 4.2785E-01, 2.8778E-01, 1.5805E-01, 5.4318E-02, -4.6651E-03, -2.9748E-03, 8.0481E-02, 1.6467E-01, 2.0663E-01, 2.5106E-01, 2.9319E-01, 3.3190E-01, 3.6737E-01, 3.9985E-01, 4.2931E-01, 4.5529E-01, 4.7648E-01, 4.8955E-01, 4.8514E-01, 4.6828E-01, 4.3856E-01, 3.6952E-01, 2.6597E-01, 1.4587E-01, 4.9559E-02, -4.0612E-03, -2.6588E-03, 5.0914E-02, 8.7792E-02, 1.1716E-01, 1.4398E-01, 1.6823E-01, 1.9056E-01, 2.1134E-01, 2.3069E-01, 2.4842E-01, 2.6399E-01, 2.7621E-01, 2.8241E-01, 2.7877E-01, 2.7097E-01, 2.5980E-01, 2.4222E-01, 2.0011E-01, 1.2931E-01, 4.4238E-02, -3.1307E-03, -1.6950E-03, 1.5529E-02, 2.6578E-02, 3.5795E-02, 4.4418E-02, 5.2999E-02, 6.1652E-02, 7.0306E-02, 7.8788E-02, 8.6822E-02, 9.3985E-02, 9.9597E-02, 1.0247E-01, 1.0283E-01, 1.0170E-01, 9.8775E-02, 9.3695E-02, 8.5980E-02, 7.1050E-02, 3.6490E-02, -1.8052E-03, -9.6657E-07, -8.0903E-03, -1.3190E-02, -1.6109E-02, -1.7301E-02, -1.7095E-02, -1.5765E-02, -1.3557E-02, -1.0694E-02, -7.3887E-03, -3.8441E-03, -2.5851E-04, 3.1767E-03, 6.2818E-03, 8.8673E-03, 1.0736E-02, 1.1677E-02, 1.1452E-02, 9.7757E-03, 6.2375E-03, 4.3809E-07] return numpy.array((nonlinearRegridList), numpy.float32) else: print 'unknown option in call for data in storedAnswers' return None def uniformGrid(number, vend, vstart): #---------------------------------------------------------------------------- # # purpose: to construct a grid coordinate which is uniform # # usage: v = uniformGrid(number, vend, vstart) # # passed: number - the size of the array # vend - the last value # vstart - the first value # # returned: v - a float32 numpy array with values from vstart to v end # #----------------------------------------------------------------------------- v = numpy.zeros((number,), numpy.float32) vinc = (vend - vstart)/(number - 1) for n in range(number): v[n] = vstart + n*vinc return v def storedGrids(): """ #------------------------------------------------------------------- # # purpose: to construct a grid coordinate which is random # # passed : nothing # # returned: lati -- a 60 element latitude grid from -90. to +90. degrees # latiSort -- lati sorted to be montonically decreasing # loni -- a 120 element longitude grid from 0. to 360. degrees # loniSort -- loni sorted to be montonically increasing # #------------------------------------------------------------------------""" latiList = [ 1.3092E+01, 7.1081E+01, 3.2199E+01, 2.6314E+01, -7.5665E+01, -7.2182E+00, -2.1963E+01, -8.3351E+01, 4.8161E+01, 8.6379E+01, -5.6722E+01, -3.3604E+01, 3.4670E-01, -5.9393E+00, -1.7894E+01, 1.7068E+01, -1.0846E+01, -6.0505E+00, -4.9974E+01, 7.1796E+01, 3.3333E+01, 8.0870E+01, 2.7362E+00, 2.6315E+00, -3.9012E+01, 5.2667E+00, -8.1956E+01, 8.8042E+01, 8.0710E+00, -5.3203E+01, -6.5512E+00, 5.0851E+01, 2.2580E+00, -2.2110E+01, 5.3739E+01, -8.7512E+01, 6.7964E+01, 3.9599E+01, 1.2495E+01, -1.1603E+01, -1.3217E+01, 3.0072E+01, -6.2477E+01, 8.9158E+01, 6.1896E+01, 3.5624E+01, -3.5438E+01, 6.2368E+01, -3.2040E+01, 7.2130E+01, -7.9999E+01, 6.4780E+01, 5.3882E+01, 6.9012E+01, 7.9715E+01, -7.2460E+01, 7.5047E+00, -1.5061E+01, 2.5178E+01, 6.9948E+00] latiSortList = [ -8.7512E+01, -8.3351E+01, -8.1956E+01, -7.9999E+01, -7.5665E+01, -7.2460E+01, -6.2477E+01, -5.6722E+01, -5.3203E+01, -4.9974E+01, -3.9012E+01, -3.5438E+01, -3.3604E+01, -3.2040E+01, -2.2110E+01, -2.1963E+01, -1.7894E+01, -1.5061E+01, -1.3217E+01, -1.1603E+01, -1.0846E+01, -7.2182E+00, -6.5512E+00, -6.0505E+00, -5.9393E+00, 3.4670E-01, 2.2580E+00, 2.6315E+00, 2.7362E+00, 5.2667E+00, 6.9948E+00, 7.5047E+00, 8.0710E+00, 1.2495E+01, 1.3092E+01, 1.7068E+01, 2.5178E+01, 2.6314E+01, 3.0072E+01, 3.2199E+01, 3.3333E+01, 3.5624E+01, 3.9599E+01, 4.8161E+01, 5.0851E+01, 5.3739E+01, 5.3882E+01, 6.1896E+01, 6.2368E+01, 6.4780E+01, 6.7964E+01, 6.9012E+01, 7.1081E+01, 7.1796E+01, 7.2130E+01, 7.9715E+01, 8.0870E+01, 8.6379E+01, 8.8042E+01, 8.9158E+01] latiSortList.reverse() loniList = [ 1.0950E+02, 3.1987E+02, 1.6087E+02, 2.2737E+02, 1.4790E+02, 6.2704E+01, 6.2566E+01, 2.4556E+02, 2.4902E+01, 9.1912E+01, 1.2039E+02, 1.6807E+02, 1.8303E+02, 2.4495E+02, 1.1643E+01, 9.5821E+01, 1.6826E+02, 2.3723E+02, 1.4022E+01, 2.6537E+02, 3.4034E+01, 1.0511E+02, 2.4025E+02, 1.0651E+02, 8.4892E+01, 3.4940E+02, 1.6315E+02, 1.1100E+02, 1.4735E+02, 1.7356E+02, 7.5067E+01, 2.9491E+02, 1.3526E+02, 3.4038E+02, 3.1191E+02, 2.4636E+02, 1.0361E+02, 3.1934E+02, 2.5720E+02, 3.5403E+02, 1.8194E+02, 2.8795E+02, 9.0098E+01, 2.7536E+02, 4.1070E+01, 3.7064E+01, 1.5244E+02, 8.5413E+01, 1.3328E+02, 3.2401E+02, 2.7889E+01, 1.3045E+02, 2.3126E+01, 2.2804E+02, 1.2270E+02, 1.5981E+02, 2.1705E+02, 2.2611E+02, 2.9517E+02, 3.5181E+02, 3.0866E+02, 1.0522E+01, 2.2290E+01, 1.2809E+02, 3.1070E+01, 2.3676E+02, 1.6915E+01, 3.2640E+02, 7.1367E+01, 1.9983E+02, 1.0566E+02, 2.7452E+02, 1.3069E+02, 2.5578E+02, 2.2619E+02, 3.5151E+02, 3.3032E+01, 1.2169E+02, 1.4333E+02, 8.3669E+01, 3.3945E-01, 2.8520E+02, 9.7079E+01, 3.1794E+02, 1.7400E+02, 3.1042E+02, 1.2403E+02, 2.8891E+02, 2.5776E+02, 1.5096E+02, 4.0489E+01, 2.1803E+02, 2.6891E+02, 2.5970E+02, 2.3404E+02, 3.2476E+01, 6.4254E+01, 2.9157E+02, 4.8417E+00, 2.7701E+02, 7.5394E+01, 1.5646E+02, 4.3079E+01, 1.6228E+02, 3.3645E+02, 2.8462E+02, 3.4708E+02, 1.8942E+02, 1.4303E+02, 1.8721E+00, 1.3013E+02, 1.9077E+02, 1.8328E+02, 3.5694E+02, 3.5559E+02, 1.4661E+01, 8.7624E+01, 2.0111E+02, 1.5145E+02, 1.8391E+02] loniSortList = [ 3.3945E-01, 1.8721E+00, 4.8417E+00, 1.0522E+01, 1.1643E+01, 1.4022E+01, 1.4661E+01, 1.6915E+01, 2.2290E+01, 2.3126E+01, 2.4902E+01, 2.7889E+01, 3.1070E+01, 3.2476E+01, 3.3032E+01, 3.4034E+01, 3.7064E+01, 4.0489E+01, 4.1070E+01, 4.3079E+01, 6.2566E+01, 6.2704E+01, 6.4254E+01, 7.1367E+01, 7.5067E+01, 7.5394E+01, 8.3669E+01, 8.4892E+01, 8.5413E+01, 8.7624E+01, 9.0098E+01, 9.1912E+01, 9.5821E+01, 9.7079E+01, 1.0361E+02, 1.0511E+02, 1.0566E+02, 1.0651E+02, 1.0950E+02, 1.1100E+02, 1.2039E+02, 1.2169E+02, 1.2270E+02, 1.2403E+02, 1.2809E+02, 1.3013E+02, 1.3045E+02, 1.3069E+02, 1.3328E+02, 1.3526E+02, 1.4303E+02, 1.4333E+02, 1.4735E+02, 1.4790E+02, 1.5096E+02, 1.5145E+02, 1.5244E+02, 1.5646E+02, 1.5981E+02, 1.6087E+02, 1.6228E+02, 1.6315E+02, 1.6807E+02, 1.6826E+02, 1.7356E+02, 1.7400E+02, 1.8194E+02, 1.8303E+02, 1.8328E+02, 1.8391E+02, 1.8942E+02, 1.9077E+02, 1.9983E+02, 2.0111E+02, 2.1705E+02, 2.1803E+02, 2.2611E+02, 2.2619E+02, 2.2737E+02, 2.2804E+02, 2.3404E+02, 2.3676E+02, 2.3723E+02, 2.4025E+02, 2.4495E+02, 2.4556E+02, 2.4636E+02, 2.5578E+02, 2.5720E+02, 2.5776E+02, 2.5970E+02, 2.6537E+02, 2.6891E+02, 2.7452E+02, 2.7536E+02, 2.7701E+02, 2.8462E+02, 2.8520E+02, 2.8795E+02, 2.8891E+02, 2.9157E+02, 2.9491E+02, 2.9517E+02, 3.0866E+02, 3.1042E+02, 3.1191E+02, 3.1794E+02, 3.1934E+02, 3.1987E+02, 3.2401E+02, 3.2640E+02, 3.3645E+02, 3.4038E+02, 3.4708E+02, 3.4940E+02, 3.5151E+02, 3.5181E+02, 3.5403E+02, 3.5559E+02, 3.5694E+02] lati = numpy.array((latiList), numpy.float32) latiSort = numpy.array((latiSortList), numpy.float32) loni = numpy.array((loniList), numpy.float32) loniSort = numpy.array((loniSortList), numpy.float32) return lati, latiSort, loni, loniSort def grid2Dto1D(x, y): """ #------------------------------------------------------------------- # # purpose: to construct a linear grid from a rectangular one # # passed : x[i] and y[j] # # returned: xn[n], yn[n] # #------------------------------------------------------------------------""" numberx = len(x) numbery = len(y) size =numberx*numbery xn = numpy.zeros(size, numpy.float32) yn = numpy.zeros(size, numpy.float32) for i in range(numberx): for j in range(numbery): n = j + i*numbery xn[n] = x[i] yn[n] = y[j] return (xn, yn) def c1Dto2D(numberx, numbery, xn, yn, zn): """ #------------------------------------------------------------------- # # purpose: to construct 2D z[i,j] 1D zn[n] format # # passed: xn[n], yn[n], zn[n] # # returned : x[i], y[j] and z[i,j] # #------------------------------------------------------------------------""" x = numpy.zeros(numberx, numpy.float32) y = numpy.zeros(numbery, numpy.float32) for i in range(numberx): x[i] = xn[i*numbery] for j in range(numbery): y[j] = yn[j] z = numpy.reshape(zn, (numberx, numbery)) return (x, y, z) def c2Dto1D(x, y, z): #--------------------------------------------------------------------------------------------------- # # purpose: to construct 1D zn[n] from 2D z[i,j] format # # usage: xn, yn, zn = c2Dto1D(x, y, z) # # passed: x - the array which describes the rectangular grid associated with the first z index # y - the array which describes the rectangular grid associated with the second z index # z - the 2D data associated with the x, y grid # # returned: xn - a list form of the x array # yn - a list form of the y array # zn - a list form of the data array (this array has the same length as xn and yn # #--------------------------------------------------------------------------------------------------- numberx = len(x) numbery = len(y) size =numberx*numbery xn = numpy.zeros(size, numpy.float32) yn = numpy.zeros(size, numpy.float32) for i in range(numberx): for j in range(numbery): n = j + i*numbery xn[n] = x[i] yn[n] = y[j] zn = numpy.ravel(z) return (xn, yn, zn) def write1D_4DField(varname, dataField, x, y = None, z = None, t = None): #------------------------------------------------------------------------------ # # purpose: write an output field which may be 1D, 2D, 3D or 4D to a NetCDF file # # usage: write1D_4DField(varname, dataField, x, y, z = None, t = None) for a 2D write # # passed : varname - name of the variable and the file id # x,y,z,t - dimension vectors # dataField - the data # # returned: None # #------------------------------------------------------------------------------- import cdms2 fileObj = cdms2.createDataset(varname + '.nc') # construct the axis tuple x = x.astype(numpy.float64) x_axis = fileObj.createAxis('x', x) axisList = [x_axis] if y is not None: y = y.astype(numpy.float64) y_axis = fileObj.createAxis('y', y) axisList.append(y_axis) if z is not None: z = z.astype(numpy.float64) z_axis = fileObj.createAxis('z', z) axisList.append(z_axis) if t is not None: t = t.astype(numpy.float64) t_axis = fileObj.createAxis('t', t) axisList.append(t_axis) if len(axisList) == 1: axisTuple = (x_axis,) else: axisTuple = tuple(axisList) # write the data to the file var = fileObj.createVariable(varname, numpy.float32, axisTuple) # variable without data var[:] = dataField # copy in the data fileObj.close() return None #----------------------------------------------------------------- def YData(lonvals, latvals, data_name = 'Y32'): #---------------------------------------------------------------------------- # # purpose: construct Y33, Y32, Y31 or Y30 data # # usage: data = YData(lonvals, latvals, data_name = 'Y32'): # # passed : lonvals -- longitude vactor # latvals -- latitude vactor # # returned: data #----------------------------------------------------------------------------- if data_name[:3] == 'Y33': data = Y33(lonvals, latvals) elif data_name[:3] == 'Y32': data = Y32(lonvals, latvals) elif data_name[:3] == 'Y31': data = Y31(lonvals, latvals) elif data_name[:3] == 'Y30': data = Y30(lonvals, latvals) else: msg = 'Must choose Y33, Y32, Y31 or Y30' raise ValueError, msg return return data def Y33(lonvals, latvals): #------------------------------------------------------------------------------ # # purpose: construct Y33 data # # usage: y33 = Y33(lonvals, latvals) # # passed : lonvals -- longitude vactor # latvals -- latitude vactor # # returned: data #------------------------------------------------------------------------------ nlon = len(lonvals) nlat = len(latvals) phi = (math.pi/180.)*lonvals theta = (math.pi/180.)*latvals y33 = numpy.zeros( (nlat,nlon), numpy.float32) # memory fac = -(1./4.)*math.sqrt( (35./(4.*math.pi)) ) fac = 1.0 for i in range(nlon): for j in range(nlat): y33[j,i] = fac*(math.sin(theta[j])**3)*math.cos(3.*phi[i]) return y33 def Y32(lonvals, latvals): #------------------------------------------------------------------------------- # # purpose: construct Y32 data # # usage: y32 = Y32(lonvals, latvals) # # passed : lonvals -- longitude vactor # latvals -- latitude vactor # # returned: data #------------------------------------------------------------------------------- nlon = len(lonvals) nlat = len(latvals) phi = (math.pi/180.)*lonvals theta = (math.pi/180.)*latvals y32 = numpy.zeros( (nlat,nlon), numpy.float32) # memory fac = (1./4.)*math.sqrt( (105./(4.*math.pi)) ) fac = 1.0 for i in range(nlon): for j in range(nlat): y32[j,i] = fac*(math.sin(theta[j])**2)*math.cos(theta[j])*math.cos(2.*phi[i]) return y32 def Y31(lonvals, latvals): #-------------------------------------------------------------------------------- # # purpose: construct Y31 data # # usage: y31 = Y31(lonvals, latvals) # # passed : lonvals -- longitude vactor # latvals -- latitude vactor # # returned: data #-------------------------------------------------------------------------------- nlon = len(lonvals) nlat = len(latvals) phi = (math.pi/180.)*lonvals theta = (math.pi/180.)*latvals y31 = numpy.zeros( (nlat,nlon), numpy.float32) # memory fac = -(1./4.)*math.sqrt( (21./(4.*math.pi)) ) fac = 1.0 for i in range(nlon): for j in range(nlat): y31[j,i] = fac*math.sin(theta[j])*(5.*math.cos(theta[j])**2 - 1.)*math.cos(phi[i]) return y31 def Y30(lonvals, latvals): #---------------------------------------------------------------------------------- # # purpose: construct Y30 data # # usage: y30 = Y30(lonvals, latvals) # # passed : lonvals -- longitude vactor # latvals -- latitude vactor # # returned: data #----------------------------------------------------------------------------------- nlon = len(lonvals) nlat = len(latvals) phi = (math.pi/180.)*lonvals theta = (math.pi/180.)*latvals lonvals = makelon(nlon) phi = lonvals phi = (math.pi/180.)*lonvals latvals, colatvals = makelat(nlat, grid_type) latvals, colatvals = makelat(nlat) theta = (math.pi/180.)*colatvals y30 = numpy.zeros( (nlat,nlon), numpy.float32) # memory fac = math.sqrt( (7./(4.*math.pi)) ) fac = 1.0 for i in range(nlon): for j in range(nlat): y30[j,i] = fac*( (5./2.)*math.cos(theta[j])**3 - (3./2.)*math.cos(theta[j]) ) return y30 #----------------------------------------------------------------- def rmserror(data1, data2): #--------------------------------------------------------------------------------- # # purpose: compute the rms error for two data sets having the same shape # # passed : the two data sets # # returned: rms error # #--------------------------------------------------------------------------------- if data1.shape != data2.shape: print 'Error in shape in rmserror' print 'data1 shape = ', data1.shape print 'data2 shape = ', data2.shape raise ValueError d1 = numpy.ravel(data1) d2 = numpy.ravel(data2) sq = (d1 - d2)*(d1 - d2) error = numpy.sum(sq)/len(d1) rmserror = numpy.sqrt(error) return rmserror if __name__ == "__main__": output = open('test.asc', 'w') # global file name print 'Running the test computations' testError = runtests() write = document() sendOutput(' ') sendOutput('*********') sendOutput('General information on the use of NATGRID has been written to the file natgridmodule.doc.') sendOutput('*********') sendOutput(' ') if testError == 0: print 'Testing Completed Successfully' else: print 'Testing completed but it may have problems. Look at test.asc for an explanation' print 'Some details on the testing have been written to the file test.asc.' print 'General information on the use of NATGRID has been written to the file natgridmodule.doc.' output.close() PyBDSF-1.10.1/natgrid/natgridmodule.doc000066400000000000000000000555641420247104600176150ustar00rootroot00000000000000********************************************************************************************** *************************** Overview of the CDAT interface to natgrid ************************ ********************************************************************************************** --------------------------------------------------------------------------------------------- INTRODUCTION TO NGMATH The ngmath library is a collection of interpolators and approximators for one-dimensional, two-dimensional and three-dimensional data. The packages, which were obtained from NCAR, are: natgrid -- a two-dimensional random data interpolation package based on Dave Watson's nngridr. dsgrid -- a three-dimensional random data interpolator based on a simple inverse distance weighting algorithm. fitgrid -- an interpolation package for one-dimensional and two-dimensional gridded data based on Alan Cline's Fitpack. Fitpack uses splines under tension to interpolate in one and two dimensions. csagrid -- an approximation package for one-dimensional, two-dimensional and three-dimensional random data based on David Fulker's Splpack. csagrid uses cubic splines to calculate its approximation function. cssgrid -- an interpolation package for random data on the surface of a sphere based on the work of Robert Renka. cssgrid uses cubic splines to calculate its interpolation function. shgrid -- an interpolation package for random data in 3-space based on the work of Robert Renka. shgrid uses a modified Shepard's algorithm to calculate its interpolation function. COMPARISION OF NGMATH PACKAGES Three-dimensional packages -- shgrid, csagrid and dsgrid. shgrid is probably the package of choice for interpolation. It uses a least squares fit of biquadratics to construct its interpolation function. The interpolation function will pass through the original data points. csagrid uses a least squares fit of cubic splines to calculate its approximation function: the calculated surface will not necesarily pass through the original data points. The algorithm can become unstable in data sparse regions. dsgrid uses a weighted average algorithm and is stable in all cases, but the resultant interpolation is not usually smooth and execution time is very slow. dsgrid is probably best used when csagrid and shgrid fail or for comparative purposes. Two-dimensional packages -- natgrid, fitgrid, csagrid and dsgrid. natgrid is the package of choice in most cases. It implements a very stable algorithm and has parameters for adjusting the smoothness of the output surface. fitgrid offers user-settable parameters for specifiying derivatives along the boundary of the output grid which are not available in natgrid. csagrid produces an approximate two-dimensional surface which may be smoother than that produced by fitgrid and natgrid. dsgrid is not recommended for two-dimensional surfaces. natgrid is superior in all respects. One-dimensional packages -- fitgrid and csagrid. fitgrid is definitely the package of choice. It has many features not available in csagrid, such as interpolating parametric curves, finding integrals, handling periodic functions, allowing smoothing that varies from linear to a full cubic spline interpolation and specifying slopes at the end points. Interpolation on a sphere -- cssgrid. cssgrid is designed specifically for interpolating on a sphere. It uses cubic splines to calculate an interpolation function. NATGRID PACKAGE natgrid implements a natural neighbor interpolation method. The input for the interpolation is a set of randomly spaced two-dimensional coordinates with functional values at those coordinates; the output is a set of interpolated values at coordinates in a user specified rectangular grid. The coordinates in the output grid must be monotonic in each coordinate direction, but need not be evenly spaced. It is also possible to interpolate at a single point. natgrid uses a weighted average method that is much more sophisticated than the inverse distance weighted average used by dsgrid. One distinguishing quality of natural neighbor interpolation is the way in which a set of neighboring points (the natural neighbor) is selected to use for interpolating at a point. The natural neighbor selection process avoids the problems common to methods based on choosing a fixed number of neighboring points, or all points within a fixed distance. Another distinguishing quality of natural neighbor interpolation is the way that the weights are calculated for the functional values at the natural neighbor coordinates. These weights are based on proportionate area, rather than distances. The method of finding the natural neighbors and calculating area-based weights to produce interpolated values is called natural neighbor linear interpolation. This produces an interpolation surface that has a continous slope at all points, except at the original input points. The result of natural neighbor linear interpolation can be visualized as producing a snugly fit sheet stretched over all of the input points. The interpolation method in natgrid also allows for natural neighbor linear interpolation augmented by blending in gradient estimates. This is called natural neighbor nonlinear interpolation. It produces an interpolation surface that has a continuous slope at all locations; two tautness parameters can be set by the user to control the apparent smoothness of the output surface. NATGRID CONTENTS Access through Python to the natgrid package from NCAR's ngmath distribution is provided directly through the module natgridmodule.so which was generated as a Python C language extension in order to export the natgrid functions from the original C language library to Python. REQUIRED FILE natgridmodule.so -- the Python interface to the ngmath natgrid package. USEFUL FILES nat.py -- the object oriented interface including a general help package. natgridtest.py -- the code to test nat.py and to write documentation. USAGE This module is designed to use in two ways. One is through the use of the object oriented interface to the underlying functions. This approach is recommended for users not already familiar with the original natgrid distribtution because it simplifies the calls to the routines. The other method uses the original functions calling them directly from Python. ------------------- OBJECT ORIENTED APPROACH ---------------- The nat module contains the Natgrid class and its single method, rgrd, which provides access to all the natgrid functions. The object oriented approach has been organized as a two step process. STEP 1. To make an instance, r, type: import nat r = nat.Natgrid(xi, yi, xo, yo) or r = nat.Natgrid(xi, yi, xo, yo, listOutput = 'yes') where xi, yi and xo, yo are the input and output grid coordinate arrays. The optional listOutput must set to anything except 'no' if xo, yo are in list format as explained below. It is the responsibility of the user to set listOutput if the output is in the list form. The input grid must be organized in a list format always. The size of the xi array and the yi array are necessarily equal. For example, if there are n randomly spaced input data points, there are n values in xi and n values in yi. There are two possible formats for the output grid. The output grid coordinate arrays may be a list like the input array or it may be a rectangular grid. The choice between the two posibilities is made according to requirements in subseqent calls to the method function. The first choice is required if the subsequent call is to the single point mode interpolation. The list can have one or more points. Of course, the list could describe a rectangular grid. For example, a rectangular grid with 10 x values and 20 y values can be rewrtten in list form with 200 x value and 200 y values. However, this form requires calling the slower single point interpolator. The second choice is most efficient for the basic interpolation to a rectangular output grid. The output grid must be monotonic but need not be equally spced. The grid coordinate arrays can be single precision (numpy.float32) or double precision (numpy.float64). The decision on whether to call for a single or a double precision computation subsequently is made by looking at the type of these arrays. To look at the default settings for the control parameters and a brief description of thier properties, type r.printDefaultParameterTable() To change a setting type the new value. For example, to set igr to 1, type r.igr = 1 To find a value without printing the table, type the name. For example, to exam the value of hor, type r.hor To check the settings type r.printInstanceParameterTable() -- prints in tabular form the parameters used in subsequent calls to the method function rgrd. or printStoredParameters() -- prints the parameters in memory which may differ from the above if the user has made more than one instance of the Natgrid class. STEP 2. natgrid is restricted to two dimensions . Consequently, it is the user's responsibility to reduce the processing of higher dimensional data to a sequence of calls using only two dimensional data. The computations are divided into two groups depending on whether the output arrays are in list form or in rectilinear grid form. If they are in list format the single point mode is called to interpolate to those individual points. This is the only process possible. On the other hand, if the output goes to a rectangular grid there are more choices. In addition to carrying out linear and nonlinear interpolations, it is possible to request aspects and slopes. The aspect at a point on the interpolated surface is the direction of steepest descend. The slope is the value of the partial derivative taken in the direction of the aspect. The slope is measured as an angle that is zero in a horizonal surface and positive below the horizontal. The following examples cover the basic computations. They start with a indication of the appropriate STEP 1. Example 1: the basic natural neighbor linear interpolation As STEP 1 make an instance, r, with: import nat r = nat.Natgrid(xi, yi, xo, yo) where the xo, yo grid is rectilinear as explained above in STEP 1. Then call the primary interpolation computation to regrid the input data, dataIn, on the grid (xi, yi) to the output data, dataOut, on the grid (xo, yo), with dataOut = r.rgrd( dataIn ) The computation is either single or double precision as determined by the precision submitted in the grid description in STEP 1. It is also possible to request a wrap in the input grid and the input data in the longitude direction, assumed to be the yi grid coordinate, by adding a keyword as dataOut = r.rgrd( dataIn, wrap = 'yes' ) Example 2: natural neighbor linear interpolation returning the aspect and the slope. As STEP 1 make an instance, r, with: import nat r = nat.Natgrid(xi, yi, xo, yo) where the xo, yo grid is rectilinear as explained above in STEP 1. Then call the primary interpolation computation to regrid the input data, dataIn, on the grid (xi, yi) to the output data, dataOut, on the grid (xo, yo), while asking for the aspect and the slope on this output grid, with dataOut, a, s = r.rgrd( dataIn, aspectSlope = 'yes' ) where a is the aspect, the direction of the steepest descent in degrees measured from 'north' and s is the slope in degrees measured from the horizontal. Necessarily, these are arrays aligned with the rectilinear output grid, xo, yo. The computation is either single or double precision as determined by the precision submitted in the grid description in STEP 1. It is also possible to request a wrap in the input grid and the input data in the longitude direction, assumed to be the yi grid coordinate, by adding a keyword as dataOut, a, s = r.rgrd( dataIn, aspectSlope = 'yes', wrap = 'yes' ) Example 3: the basic natural neighbor nonlinear interpolation The procedure for the nonlinear interpolation differs from the linear case in the need to set the control parameter igr. Follow Example 1 and insert the following statament after making the instance, r. r.igr = 1 Example 4: natural neighbor nonlinear interpolation returning the aspect and the slope. The procedure for the nonlinear interpolation differs from the linear case in the need to set the control parameter igr. Follow Example 2 and insert the following statament after making the instance, r. r.igr = 1 Example 5: single point mode natural neighbor linear interpolation As STEP 1 make an instance, r, with: import nat r = nat.Natgrid(xi, yi, xo, yo, listOutput = 'yes') where the xo, yo output grid is in the list form (not a rectangular output grid) as explained above in STEP 1. To call the single point mode interpolation computation to regrid the input data, dataIn, on the grid (xi, yi) to the output data, dataOut, on the grid (xo, yo), type dataOut = r.rgrd( dataIn ) The computation is either single or double precision as determined by the precision submitted in the grid description in STEP 1. In the single point mode it is not possible to request the aspect and the slope. Example 6: single point mode natural neighbor nonlinear interpolation The procedure for the nonlinear interpolation differs from the linear case in the need to set the control parameter igr. Follow Example 5 and insert the following statament after making the instance, r. r.igr = 1 ------------------- ORIGINAL FUNCTION APPROACH ----------------- The module natgridmodule.so exports the following functions to Python from the original ngmath C library: Single precision procedures: natgrids - primary function for gridding. seti - set int parameter values. geti - retrieve values for int parameters. setr - set float parameter values. getr - retrieve values for float parameters setc - set char parameter values. getc - retrieve values for char parameters. getaspects - get aspect values, if calculated by setting sdi = 1. getslopes - get slope values, if calculated by setting sdi = 1. pntinits - initiate single point mode. pnts - interpolate at a single point. pntend - terminate single point mode. Double precision procedures: natgridd - primary function for gridding. setrd - set float parameter values. getrd - retrieve values for float parameters getaspectd - get aspect values, if calculated by setting sdi = 1. getsloped - get slope values, if calculated by setting sdi = 1. pntinitd - initiate single point mode. pntd - interpolate at a single point. pntendd - terminate single point mode. Information on the use of the routines is available by importing natgridmodule and printing the docstring of interest. For example, documentation for the routine natgrids is obtained by typing import natgridmodule print natgridmodule.natgrids.__doc__ This same information is available in the help package. A description of the control parameters is not in the natgridmodule documentation. It can be found by typing import nat nat.printParameterTable() The documentation associated with the natgridmodule.so, such as the doctrings, describe the C code. DOCUMENTATION Documentation is provided through Python's docstrings, essentially Python style program comments. A help package provides instructions on the use of the natgrid module. A table of contents is printed to the screen by typing nat.help() after importing nat. A hard copy of all the pertinent 'docstring' documentation written to the file natgridmodule.doc can be produced by typing nat.document() As an alternate to using the help package, online documentation for the natgrids function, for example, is available directly from the natgrids doctring by typing import natgridmodule print natgridmodule.natgrids.__doc__ TESTING To run a test of the natgrid computations and to get a copy of this documentation, type cdat natgridtest.py -------------------------------------------------------------------------------------------------------------- HELP PACKAGE EXAMPLE ************************ Default Parameter Table ********************** ----------------------------------------------------------------------------------------------------- name type legal value default value description ---- ----- ------------ --------------- ------------------------------------------------------------ adf int 0 = no or 1 0 produce data file of algoritmic info for display? (see alg) alg char any file nam "nnalg.dat" file name for algoritmic display tool (see adf) asc int 0 = no or 1 1 is automatic scaling is allowed? bI float >= 1. 1.5 tautness increasing effect of the gradients by increasing bI bJ float >= 1. 7.0 tautness decreasing breadth of region affected by gradients dup int 0 = yes or 1 1 are duplicate input coordinates are allowed? ext int 0 = no or 1 1 is extrapolation allowed outside the convex hull? hor float >= 0. -1.0 amount of horizontal overlap from outside current region igr int 0 = no or 1 0 are gradients are to be computed? magx float > 0. 1.0 scale factor for x coordinate values magy float > 0. 1.0 scale factor for y coordinate values magz float > 0. 1.0 scale factor for z coordinate values non int 0 = yes or 1 0 are interpolated values are allowed to be negative? nul float any float 0.0 value for points outside the convex hull if no extrapolation rad int 0 = rad or 1 0 are slopes and aspects are returned in radians or degrees? sdi int 0 = no or 1 0 are slopes and aspects to be computed? upd int 0=N to S or 1 does output array from giving N to S or S to N? ver float >= 0. -1.0 amount of vertical overlap from outside current region xas float > 0. 0.0 scale used by automatic scaling of x in last interpolation yas float > 0. 0.0 scale used by automatic scaling of y in last interpolation zas float > 0. 0.0 scale used by automatic scaling of z in last interpolation PyBDSF-1.10.1/natgrid/setup.py000066400000000000000000000006241420247104600157650ustar00rootroot00000000000000#!/usr/bin/env python from numpy.distutils.core import setup, Extension import glob,sys sources=glob.glob('Src/*.c') setup (name = "natgrid", version='1.0', description = "natgrid", url = "http://cdat.sf.net", packages = [''], package_dir = {'': 'Lib'}, include_dirs = ['Include',], ext_modules = [Extension('natgridmodule', sources), ] ) PyBDSF-1.10.1/pyproject.toml000066400000000000000000000001461420247104600155360ustar00rootroot00000000000000[build-system] requires = ["setuptools", "wheel", "oldest-supported-numpy"] PyBDSF-1.10.1/setup.py000077500000000000000000000235351420247104600143460ustar00rootroot00000000000000#!/usr/bin/env python from __future__ import print_function import platform import setuptools from numpy.distutils.core import setup, Extension import numpy import sys from ctypes.util import find_library from os.path import join, realpath, dirname import subprocess import glob import distutils.cmd import distutils.log from numpy.distutils.command.build_ext import build_ext as numpy_build_ext from distutils.command.clean import clean as distutils_clean from distutils import ccompiler import os import warnings no_boost_error = """ Could not find a Python boost library! Please use your package manager to install boost. Or install it manually: http://boostorg.github.io/python/doc/html/index.html """ minpack_src = ["lmder.f", "lmpar.f", "qrfac.f", "qrsolv.f", "enorm.f", "dpmpar.f"] port3_src = ["dnsg.f", "dn2g.f", "drnsg.f", "drn2g.f", "d1mach.f", "da7sst.f", "dc7vfn.f", "dd7tpr.f", "dd7upd.f", "df7hes.f", "dg7lit.f", "dg7qts.f", "ditsum.f", "divset.f", "dl7itv.f", "dl7ivm.f", "dl7mst.f", "dl7nvr.f", "dl7sqr.f", "dl7srt.f", "dl7svn.f", "dl7svx.f", "dl7tsq.f", "dl7tvm.f", "dl7vml.f", "dn2cvp.f", "dn2lrd.f", "dn2rdp.f", "do7prd.f", "dparck.f", "dq7apl.f", "dq7rad.f", "dq7rfh.f", "dr7mdc.f", "drldst.f", "ds7cpr.f", "ds7lup.f", "ds7lvm.f", "dv2axy.f", "dv2nrm.f", "dv7cpy.f", "dv7dfl.f", "dv7prm.f", "dv7scl.f", "dv7scp.f", "dv7swp.f", "i1mach.f", "i7mdcn.f", "stopx.f"] srcpath = join(dirname(realpath(__file__)), "src") class CleanStatic(distutils.cmd.Command): """Custom command to remove static libraries and their intermediate files.""" description = "remove static libs" user_options = [] def initialize_options(self): pass def finalize_options(self): pass def run(self): for lib in ["minpack", "port3"]: self.announce( "Removing lib{}.a and object files".format(lib), level=distutils.log.INFO ) subprocess.check_call( "rm -f *.o lib{}.a".format(lib), cwd=join(srcpath, lib), shell=True, ) class BuildStatic(CleanStatic): """Custom command to build static libraries.""" # Compile minpack and port3, TODO: handle this with f2py description = "build static libs" def run(self): for lib, src_files in [["minpack", minpack_src], ["port3", port3_src]]: self.announce("Building lib{}".format(lib), level=distutils.log.INFO) for src in src_files: subprocess.check_output( ["gfortran", "-fPIC", "-c", src], cwd=join(srcpath, lib) ) subprocess.check_output( "ar -cq lib{}.a *.o".format(lib), cwd=join(srcpath, lib), shell=True ) class BuildExt(numpy_build_ext): """Custom build_ext command that calls mbuild to build static libs""" def run(self): self.run_command("mbuild") numpy_build_ext.run(self) class Clean(distutils_clean): """Custom clean command that calls mclean to clean static libs""" def run(self): self.run_command("mclean") distutils_clean.run(self) def find_library_file(libname): """ Try to get the directory of the specified library. It adds to the search path the library paths given to distutil's build_ext. """ # Use a dummy argument parser to get user specified library dirs lib_dirs = [os.path.join(sys.prefix, 'lib'), '/usr/local/lib', '/usr/lib64', '/usr/lib'] try: lib_dirs.append(os.path.join('/usr/lib', getattr(sys, "implementation", sys) ._multiarch)) except AttributeError: # This is a non-multiarch aware Python. import sysconfig arch = sysconfig.get_config_var('MULTIARCH') if arch is not None: lib_dirs.append(os.path.join('/usr/lib', arch)) if 'LD_LIBRARY_PATH' in os.environ: lib_dirs += os.environ['LD_LIBRARY_PATH'].split(':') compiler = ccompiler.new_compiler() return compiler.find_library_file(lib_dirs, libname) def find_boost_python(): """ Find the name and path of boost-python Returns: library_name, e.g. 'boost_python-py36' (a guess if boost is not found) library_dir, e.g. '/opt/local/boost/lib' ('' if boost is not found) include_dir, e.g. '/opt/local/boost/include' ('' if boost is not found) """ short_version = "{}{}".format(sys.version_info[0], sys.version_info[1]) major_version = str(sys.version_info[0]) # Prefer libraries with python version in their name over unversioned variants boostlibnames = ['boost_python-py' + short_version, 'boost_python' + short_version, 'boost_python' + major_version, 'boost_python', ] # The -mt (multithread) extension is used on macOS but not Linux. # Look for it first to avoid ending up with a single-threaded version. boostlibnames = sum([[name + '-mt', name] for name in boostlibnames], []) for libboostname in boostlibnames: found_lib = find_library_file(libboostname) if found_lib: libdir = dirname(found_lib) includedir = join(dirname(libdir), "include") return libboostname, libdir, includedir warnings.warn(no_boost_error) return boostlibnames[0], '', '' def find_boost_numpy(): """ Find the name and path of boost-numpy Returns: library_name, e.g. 'boost_numpy-py36' (None if boost_numpy is not found) library_dir, e.g. '/opt/local/boost/lib' ('' if boost is not found) include_dir, e.g. '/opt/local/boost/include' ('' if boost is not found) """ short_version = "{}{}".format(sys.version_info[0], sys.version_info[1]) major_version = str(sys.version_info[0]) # Prefer libraries with python version in their name over unversioned variants boostlibnames = ['boost_numpy-py' + short_version, 'boost_numpy' + short_version, 'boost_numpy' + major_version, 'boost_numpy', ] # The -mt (multithread) extension is used on macOS but not Linux. # Look for it first to avoid ending up with a single-threaded version. boostlibnames = sum([[name + '-mt', name] for name in boostlibnames], []) for libboostname in boostlibnames: found_lib = find_library_file(libboostname) if found_lib: libdir = dirname(found_lib) includedir = join(dirname(libdir), "include") return libboostname, libdir, includedir warnings.warn("No library boost_numpy found (this may be no problem)") return None, '', '' def main(): boost_python_libname, boost_python_libdir, boost_python_includedir = find_boost_python() boost_numpy_libname, boost_numpy_libdir, boost_numpy_includedir = find_boost_numpy() extensions = [] fext = Extension( name="bdsf._pytesselate", sources=[ "src/fortran/pytess_simple.f", "src/fortran/pytess_roundness.f" ] ) fext.f2py_options = [""] extensions.append(fext) libraries = [ 'minpack', 'port3', 'gfortran', boost_python_libname ] if boost_numpy_libname is not None: libraries.append(boost_numpy_libname) extensions.append(Extension( name="bdsf._cbdsm", sources=[ "src/c++/Fitter_dn2g.cc", "src/c++/Fitter_dnsg.cc", "src/c++/Fitter_lmder.cc", "src/c++/MGFunction1.cc", "src/c++/MGFunction2.cc", "src/c++/cbdsm_main.cc", "src/c++/stat.cc", "src/c++/num_util/num_util.cpp" ], libraries=libraries, include_dirs=["src/c++", boost_python_includedir, boost_numpy_includedir, numpy.get_include()], library_dirs=[join(srcpath, "minpack"), join(srcpath, "port3"), boost_python_libdir, boost_numpy_libdir] )) extensions.append(Extension( name="bdsf.nat.natgridmodule", sources=glob.glob("natgrid/Src/*.c"), include_dirs=["natgrid/Include"] )) # HACK for supporting older versions of NumPy for ext in extensions: ext.extra_f77_compile_args = [] ext.extra_f90_compile_args = [] setup( name='bdsf', version='1.10.1', author='David Rafferty', author_email='drafferty@hs.uni-hamburg.de', url='https://github.com/lofar-astron/PyBDSF', description='Blob Detection and Source Finder', long_description=open('README.rst', 'rt').read(), long_description_content_type='text/x-rst', platforms='Linux, Mac OS X', packages=['bdsf', 'bdsf.nat'], package_dir={'bdsf.nat': join('bdsf', 'nat')}, classifiers=[ 'Intended Audience :: Science/Research', 'Programming Language :: C++', 'Programming Language :: Fortran', 'Programming Language :: Python :: 3', 'Topic :: Scientific/Engineering :: Astronomy' ], ext_modules=extensions, extras_require={ 'ishell': ['ipython'] }, install_requires=['backports.shutil_get_terminal_size', 'astropy', 'numpy', 'scipy'], entry_points = { 'console_scripts': [ 'pybdsf = bdsf.pybdsf:main [ishell]', 'pybdsm = bdsf.pybdsf:main [ishell]' ] }, zip_safe=False, cmdclass={ 'mclean': CleanStatic, 'mbuild': BuildStatic, 'build_ext': BuildExt, 'clean': Clean } ) if __name__ == "__main__": main() PyBDSF-1.10.1/src/000077500000000000000000000000001420247104600134105ustar00rootroot00000000000000PyBDSF-1.10.1/src/c++/000077500000000000000000000000001420247104600137605ustar00rootroot00000000000000PyBDSF-1.10.1/src/c++/Fitter_dn2g.cc000066400000000000000000000072321420247104600164420ustar00rootroot00000000000000/*! \file Fitter_dn2g.cc \ingroup pybdsm \author Oleksandr Usov \date 30/10/2007 */ #include "Fitters.h" #include using namespace std; /** This fitter uses DN2G algorithm from the (free subset of) PORT3 library (www.netlib.org/port). DN2G is an implementation of the NL2SOL -- adaptive nonlinear least squares algorithm; also known as TOMS/573. **/ // this is prototype for a fortran routines extern "C" void dn2g_(int &n, int &p, double *x, void *F, void *J, int *iv, int &liv, int &lv, double *v, int *uiparm, double *urparm, void *ufparm); extern "C" void divset_(const int &alg, int *iv, int &liv, int &lv, double *v); // user functions // FIXME: these should have been declared "extern "C" static ...", but gcc 4.2.2 rejects such declarations static void dn2g_f(int &n, int &p, double *x, int &nf, double *F, void *uiparm, void *urparm, void *ufparm); static void dn2g_df(int &n, int &p, double *x, int &nf, double *J, void *uiparm, void *urparm, void *ufparm); // dn2g driver bool dn2g_fit(MGFunction &fcn, bool final, int verbose) { int dsize = fcn.data_size(); int npar = fcn.parameters_size(); // working variables int n = dsize, p = npar, liv = 82+p, lv = 105 + p*(n+2*p+17) + 2*n; vector x(p), v(lv); vector iv(liv); // set run-time parameters divset_(1, &iv[0], liv, lv, &v[0]); iv[16] = 1000; // MXFCAL - maximal number of function calls iv[17] = 1000; // MXITER - maximal number of iterations if (final) v[32] = 1e-8; // XCTOL - x-convergence tolerance else v[32] = 1e-4; // XCTOL - x-convergence tolerance verbose = (verbose < 0) ? 0 : verbose; switch (verbose) { case 0: // silence it completely case 1: iv[20] = 0; // PRUNIT break; case 2: // print out some results iv[13] = 0; // COVPRT - covariance & regression diagnostic (0 ... 3) iv[18] = 1; // OUTLEV - iteration summary (0, 1, ...) iv[19] = 1; // PARPRT - non-default parameters (0, 1) iv[21] = 1; // SOLPRT - solution (x, F, J) (0, 1) iv[22] = 1; // STATPR - summary statistics (-1, 0, 1) iv[23] = 0; // X0PRT - input X (0, 1) break; } iv[56] = 0; // RDREQ -- do not calculate covariance & regression diagnostic arrays fcn.get_parameters(&x[0]); dn2g_(n, p, &x[0], (void *)dn2g_f, (void *)dn2g_df, &iv[0], liv, lv, &v[0], (int *)0, (double *)0, (void *)&fcn); fcn.set_parameters(&x[0]); // extract errors information if (final) { // TODO } // check convergence and (possibly) print out status line int info = iv[0]; bool converged = (info > 2) && (info < 7); if (verbose) { int nfev = iv[5]; // NFCALL - number of function evaluations int njev = iv[29]; // NGCALL - number of gradient evaluations double chi2 = fcn.chi2(); cout << "status: " << converged << " code: " << info << " Fev/Jev: " << nfev << "/" << njev << " chi2(/dp): " << chi2 << "(" << chi2/dsize << ")" << " DN2G" << endl; } return converged; } // user-supplied functions static void dn2g_f(int &n, int &p, double *x, int &nf, double *F, void *uiparm, void *urparm, void *ufparm) { (void)nf; (void)uiparm; (void)urparm; MGFunction *fcn = (MGFunction *)ufparm; assert(n == fcn->data_size()); assert(p == fcn->parameters_size()); fcn->set_parameters(x); fcn->fcn_diff(F); } static void dn2g_df(int &n, int &p, double *x, int &nf, double *J, void *uiparm, void *urparm, void *ufparm) { (void)nf; (void)uiparm; (void)urparm; MGFunction *fcn = (MGFunction *)ufparm; assert(n == fcn->data_size()); assert(p == fcn->parameters_size()); fcn->set_parameters(x); fcn->fcn_diff_transposed_gradient(J); } PyBDSF-1.10.1/src/c++/Fitter_dnsg.cc000066400000000000000000000106051420247104600165410ustar00rootroot00000000000000/*! \file Fitter_dn2g.cc \ingroup pybdsm \author Oleksandr Usov \date 30/10/2007 */ #include "Fitters.h" #include using namespace std; /** This fitter uses DNSG algorithm from the (free subset of) PORT3 library (www.netlib.org/port). DNSG is an separable least-squares solver which calls DN2G algorithm to solve for non-linear parameters and then uses linear least-squares solver to compute the linear parameters. **/ // this is prototype for a fortran routines extern "C" void dnsg_ (int &n, int &p, int &l, double *alf, double *c, double *Y, void *F, void *J, int *inc, int &iinc, int *iv, int &liv, int &lv, double *v, int *uiparm, double *urparm, void *ufparm); extern "C" void divset_(const int &alg, int *iv, int &liv, int &lv, double *v); // user functions // FIXME: these should have been declared "extern "C" static ...", but gcc 4.2.2 rejects such declarations static void dnsg_f(int &n, int &p, int &l, double *alf, int &nf, double *phi, void *uiparm, void *urparm, void *ufparm); static void dnsg_df(int &n, int &p, int &l, double *alf, int &nf, double *der, void *uiparm, void *urparm, void *ufparm); // dnsg driver bool dnsg_fit(MGFunction &fcn, bool final, int verbose) { int dsize = fcn.data_size(); int lpar = fcn.gaul_size(); int nlpar = fcn.parameters_size() - lpar; // working variables int n = dsize, p = nlpar, l = lpar; int iinc = l+1, liv = 115 + p + l + 2*p; int lv = 105 + n*(l+p+3) + (l+p)*(n+l+p+1) + l*(l+3)/2 + p*(2*p+17); vector alf(p), c(l), y(n), v(lv); vector inc((l+1)*p), iv(liv); // set run-time parameters divset_(1, &iv[0], liv, lv, &v[0]); iv[16] = 1000; // MXFCAL - maximal number of function calls iv[17] = 1000; // MXITER - maximal number of iterations if (final) v[32] = 1e-8; // XCTOL - x-convergence tolerance else v[32] = 1e-4; // XCTOL - x-convergence tolerance verbose = (verbose < 0) ? 0 : verbose; switch (verbose) { case 0: // silence it completely case 1: iv[20] = 0; // PRUNIT break; case 2: // print out some results iv[13] = 0; // COVPRT - covariance & regression diagnostic (0 ... 3) iv[18] = 1; // OUTLEV - iteration summary (0, 1, ...) iv[19] = 1; // PARPRT - non-default parameters (0, 1) iv[21] = 1; // SOLPRT - solution (x, F, J) (0, 1) iv[22] = 1; // STATPR - summary statistics (-1, 0, 1) iv[23] = 0; // X0PRT - input X (0, 1) break; } iv[56] = 0; // RDREQ -- do not calculate covariance & regression diagnostic arrays fcn.get_nlin_parameters(&alf[0]); fcn.data(&y[0]); // fill in incidence matrix int pi = 0; for (int li = 0; li < l; ++li) { for (int i = 0; i < fcn.gaussian_size(li) - 1; ++i) { inc[li + pi * (l+1)] = 1; ++ pi; } } dnsg_(n, p, l, &alf[0], &c[0], &y[0], (void *)dnsg_f, (void *)dnsg_df, &inc[0], iinc, &iv[0], liv, lv, &v[0], (int *)0, (double *)0, (void *)&fcn); fcn.set_nlin_parameters(&alf[0]); fcn.set_lin_parameters(&c[0]); // extract errors information if (final) { // TODO } // check convergence and (possibly) print out status line int info = iv[0]; bool converged = (info > 2) && (info < 7); if (verbose) { int nfev = iv[5]; // NFCALL - number of function evaluations int njev = iv[29]; // NGCALL - number of gradient evaluations double chi2 = fcn.chi2(); cout << "status: " << converged << " code: " << info << " Fev/Jev: " << nfev << "/" << njev << " chi2(/dp): " << chi2 << "(" << chi2/dsize << ")" << " DNSG" << endl; } return converged; } // user-supplied functions static void dnsg_f(int &n, int &p, int &l, double *alf, int &nf, double *phi, void *uiparm, void *urparm, void *ufparm) { (void)nf; (void)uiparm; (void)urparm; MGFunction *fcn = (MGFunction *)ufparm; assert(n == fcn->data_size()); assert(p == fcn->parameters_size() - fcn->gaul_size()); assert(l == fcn->gaul_size()); fcn->set_nlin_parameters(alf); fcn->fcn_partial_value(phi); } static void dnsg_df(int &n, int &p, int &l, double *alf, int &nf, double *der, void *uiparm, void *urparm, void *ufparm) { (void)nf; (void)uiparm; (void)urparm; MGFunction *fcn = (MGFunction *)ufparm; assert(n == fcn->data_size()); assert(p == fcn->parameters_size() - fcn->gaul_size()); assert(l == fcn->gaul_size()); fcn->set_nlin_parameters(alf); fcn->fcn_partial_gradient(der); } PyBDSF-1.10.1/src/c++/Fitter_lmder.cc000066400000000000000000000056031420247104600167130ustar00rootroot00000000000000/*! \file Fitter_lmder.cc \ingroup pybdsm \author Oleksandr Usov \date 30/10/2007 */ #include "Fitters.h" #include using namespace std; /** This fitter uses slightly modified version of the Levenberg-Marquardt algorithm lmder from netlib's MINPACK-1 (www.netlib.org/minpack). The modification of the original lmder.f was needed to pass extra arguments into user function. **/ // this is prototype for a fortran minimization routine extern "C" void lmder_(void *fcn, int &m, int &n, double *x, double *F, double *J, int &ldfjac, double &ftol, double &xtol, double >ol, int &maxfev, double *diag, int &mode, double &factor, int &nprint, int &info, int &nfev, int &njev, int *ipvt, double *qtf, double *wa1, double *wa2, double *wa3, double *wa4, void *userpar); // user function // FIXME: these should have been declared "extern "C" static ...", but gcc 4.2.2 rejects such declarations static void lmder_fcn(int &m, int &n, double *x, double *F, double *J, int &ldfjac, int &iflag, void *userpar); // lmder driver bool lmder_fit(MGFunction &fcn, bool final, int verbose) { int dsize = fcn.data_size(); int npar = fcn.parameters_size(); // working variables int m = dsize, n = npar, ldfjac = m, maxfev = 200, mode = 1, nprint = 0, info, nfev, njev; double ftol, xtol, gtol, factor = 10; vector x(n), F(m), J(ldfjac * n), diag(n), qtf(n), wa1(n), wa2(n), wa3(n), wa4(m); vector ipvt(n); // set run-time parameters gtol = 0; if (final) ftol = xtol = 1e-6; else ftol = xtol = 1e-4; fcn.get_parameters(&x[0]); lmder_((void *)lmder_fcn, m, n, &x[0], &F[0], &J[0], ldfjac, ftol, xtol, gtol, maxfev, &diag[0], mode, factor, nprint, info, nfev, njev, &ipvt[0], &qtf[0], &wa1[0], &wa2[0], &wa3[0], &wa4[0], (void *)&fcn); fcn.set_parameters(&x[0]); // extract errors information if (final) { // TODO } // check convergence and (possibly) print out status line bool converged = (info > 0) && (info < 4); if (verbose) { double chi2 = fcn.chi2(); cout << "status: " << converged << " code: " << info << " Fev/Jev: " << nfev << "/" << njev << " chi2(/dp): " << chi2 << "(" << chi2/dsize << ")" << " LMDER" << endl; } return converged; } // user-supplied function static void lmder_fcn(int &m, int &n, double *x, double *F, double *J, int &ldfjac, int &iflag, void *userpar) { (void)ldfjac; MGFunction *fcn = (MGFunction *)userpar; assert(m == fcn->data_size()); assert(n == fcn->parameters_size()); fcn->set_parameters(x); switch (iflag) { case 1: return fcn->fcn_diff(F); case 2: return fcn->fcn_diff_transposed_gradient(J); default: cerr << "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n" " LMDER C-wrapper\n" " unexpected value of iflag\n" "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n"; abort(); } } PyBDSF-1.10.1/src/c++/Fitters.h000066400000000000000000000005751420247104600155600ustar00rootroot00000000000000 #ifndef _FITTERS_H_INCLUDED #define _FITTERS_H_INCLUDED #include "MGFunction.h" /*! \file Fitters.h \ingroup pybdsm \author Oleksandr Usov \date 30/10/2007 */ bool lmder_fit(MGFunction &fcn, bool final, int verbose); bool dn2g_fit(MGFunction &fcn, bool final, int verbose); bool dnsg_fit(MGFunction &fcn, bool final, int verbose); #endif // _FITTERS_H_INCLUDED PyBDSF-1.10.1/src/c++/MGFunction.h000066400000000000000000000114161420247104600161450ustar00rootroot00000000000000#include "Python.h" #ifndef _MGFUNCTION_H_INCLUDED #define _MGFUNCTION_H_INCLUDED #include #include #include #include using namespace boost::python; /*! \class MGFunction \ingroup pybdsm \brief Multi-Gaussian function. \author Oleksandr Usov \date 15/10/2007 This class allows you to manage multi-gaussian function and implements all math required to use it for fitting. In order to improve fitting performance a number of tricks are done. MGFunction maintains internal caches of unmasked data points (mm_data) and partially evaluated gaussians (mm_fcn). End-user interface consists of functions to add (py_add_gaussian), remove (py_remove_gaussian), retrieve (py_get_gaussian) single gaussians and a functions to access all parameters at once (py_get/set_parameters). Few more support routines are present too (py_find_peak, py_reset, etc). Internal interface for fitter routines provides a number of low-level functions to evaluate gaussians (and their derivatives) in a number of ways (fcn_value, fcn_diff, fcn_gradient, etc). An important note -- current implementation isn't thread-safe, as caches are shared between all instances. One of the possibilities change it is to define caches thread-local, but this will require special care for the cleanup to prevent memory leaks. */ class MGFunction { public: MGFunction(pyndarray data, pyndarray mask, double weight); ~MGFunction(); //////////////////////////////// // High-level Python interface //////////////////////////////// enum Gtype { G_Amplitude_Only = 1, G_Reduced_Gaussian = 3, G_Gaussian = 6, }; void py_reset(); void py_add_gaussian(Gtype type, object parameters); void py_remove_gaussian(int idx); tuple py_get_gaussian(int idx); void py_set_gaussian(int idx, object parameters); list py_get_parameters(); void py_set_parameters(object parameters); list py_get_errors(); tuple py_find_peak(); static void register_class(); //////////////////////////////// // Low-level interface for fitting routines //////////////////////////////// int data_size() const { return m_ndata; } int gaul_size() const { return m_gaul.size(); } int parameters_size() const { return m_npar; } int gaussian_size(unsigned idx) const { assert(idx < m_gaul.size()); return m_gaul[idx]; } void get_parameters(double *buf) const; void set_parameters(const double *buf); void get_nlin_parameters(double *buf) const; void set_nlin_parameters(const double *buf); void set_lin_parameters(const double *buf); /*! data (unmasked pixels only) */ void data(double *buf) const; /*! value of the function (unmasked pixels only) */ void fcn_value(double *buf) const; /*! data - value (unmasked pixels only) */ void fcn_diff(double *buf) const; /*! values of single (unscaled) gaussians */ void fcn_partial_value(double *buf) const; /*! fcn_value gradient */ void fcn_gradient(double *buf) const; /*! fcn_diff gradient */ void fcn_diff_gradient(double *buf) const; /*! fcn_value gradient (transposed) */ void fcn_transposed_gradient(double *buf) const; /*! fcn_diff gradient (transposed) */ void fcn_diff_transposed_gradient(double *buf) const; /*! fcn_partial_value gradient */ void fcn_partial_gradient(double *buf) const; /*! calculate chi^2 of the residual image */ double chi2() const; protected: /*! gaussians types (lengths) */ std::vector m_gaul; /*! parameters of gaussians */ std::vector > m_parameters; /*! error bars */ std::vector > m_errors; /*! weight for chi^2 calculation */ double m_weight; /*! number of fitted parameters */ unsigned m_npar; /*! number of fitted (unmasked) datapoints */ unsigned m_ndata; /*! Data array */ pyndarray m_data; /*! Mask array */ pyndarray m_mask; private: /*! prevent copying of the MGFunction objects */ MGFunction(MGFunction const &); /// these are used to cache intermediate calculations template void __update_dcache() const; void _update_dcache() const; /// update cached data void _update_fcache() const; /// update cached function unsigned long _cksum() const; /// cksum of m_parameters typedef struct { int x1, x2; double d; } dcache_t; typedef struct { double sn, cs, f1, f2, val; } fcache_t; typedef std::vector::iterator dcache_it; typedef std::vector::iterator fcache_it; /*! Data cache */ static std::vector mm_data; /*! cache for function/gradient evaluations */ static std::vector mm_fcn; // these are used to verify whether cached values are up-to-date static void *mm_obj; static unsigned long mm_cksum; }; #endif // _MGFUNCTION_H_INCLUDED PyBDSF-1.10.1/src/c++/MGFunction1.cc000066400000000000000000000150171420247104600163650ustar00rootroot00000000000000/*! \file MGFunction.cc \ingroup pybdsm \author Oleksandr Usov \author 15/10/2007 Python interface. Most routines here are pretty straighforward, as they just wrap/unwrap parameters coming to/from python side. */ #define PY_ARRAY_UNIQUE_SYMBOL PyArrayHandle #define NO_IMPORT_ARRAY #include "boost_python.h" #include "MGFunction.h" #include #include namespace n = num_util; // to support python 3 where all ints are long #if PY_MAJOR_VERSION >= 3 #define PyInt_FromLong PyLong_FromLong #define PyInt_AsLong PyLong_AsLong #endif // // Constructor -- check data types/shapes and store them // MGFunction::MGFunction(pyndarray data, pyndarray mask, double weight) : m_weight(weight), m_npar(0), m_data(data), m_mask(mask) { py_assert(n::rank(data) == 2 && n::rank(mask) == 2, PyExc_ValueError, "Data and mask should be rank-2 arrays"); py_assert(n::shape(data) == n::shape(mask), PyExc_ValueError, "Shape of mask doesn't matches that of data"); py_assert(n::type(mask) == NPY_BOOL, PyExc_TypeError, "Incorrect mask datatype"); // to calculate m_ndata we subtract masked pixels PyObject *sum = PyArray_Sum((PyArrayObject *)mask.ptr(), NPY_MAXDIMS, NPY_INT, NULL); m_ndata = n::size(data) - PyInt_AsLong(sum); Py_DECREF(sum); } // // Destructor -- essentially do-nothing thing // MGFunction::~MGFunction() { // enforce data cache reset // this is needed if new MGFunction object is allocated // at the same spot in memory as previous one if (mm_obj == this) mm_obj = 0; } // // Clear MGFunction, dropping all gaussians // void MGFunction::py_reset() { m_npar = 0; m_gaul.clear(); m_parameters.clear(); m_errors.clear(); } // // Add a gaussian of a specific kind // void MGFunction::py_add_gaussian(Gtype type, object parameters) { py_assert(len(parameters) == 6, PyExc_ValueError, "Wrong number of parameters for gaussian"); std::vector t(6); for (int i = 0; i < 6; ++i) t[i] = extract(parameters[i]); m_npar += int(type); m_gaul.push_back(int(type)); m_parameters.push_back(t); m_errors.push_back(std::vector(6)); } // // Remove gaussian by index // void MGFunction::py_remove_gaussian(int idx) { if (idx < 0) idx += m_gaul.size(); py_assert(idx >= 0 && idx < (int)m_gaul.size(), PyExc_IndexError, "Incorrect index"); m_npar -= m_gaul[idx]; m_gaul.erase(m_gaul.begin() + idx); m_parameters.erase(m_parameters.begin() + idx); m_errors.erase(m_errors.begin() + idx); } // // Get gaussian parameters by index // boost::python::tuple MGFunction::py_get_gaussian(int idx) { if (idx < 0) idx += m_gaul.size(); py_assert(idx >= 0 && idx < (int)m_gaul.size(), PyExc_IndexError, "Incorrect index"); std::vector &p = m_parameters[idx]; return boost::python::make_tuple(p[0], p[1], p[2], p[3], p[4], p[5]); } // // Set gaussian parameters by index // void MGFunction::py_set_gaussian(int idx, object parameters) { if (idx < 0) idx += m_gaul.size(); py_assert(idx >= 0 && idx < (int)m_gaul.size(), PyExc_IndexError, "Incorrect index"); py_assert(len(parameters) == 6, PyExc_ValueError, "Wrong number of parameters for gaussian"); for (int i = 0; i < 6; ++i) m_parameters[idx][i] = extract(parameters[i]); } // // Get all gaussian parameters as a list of tuples // list MGFunction::py_get_parameters() { list res; for (unsigned i = 0; i < m_gaul.size(); ++i) res.append(py_get_gaussian(i)); return res; } // // Set all gaussian parameters from a list of tuples // void MGFunction::py_set_parameters(object parameters) { py_assert(len(parameters) == int(m_gaul.size()), PyExc_ValueError, "Wrong number of gaussians"); for (unsigned i = 0; i < m_parameters.size(); ++i) py_set_gaussian(i, parameters[i]); } // // Errors -- not really implemented now // list MGFunction::py_get_errors() { list res; for (unsigned i = 0; i < m_gaul.size(); ++i) { std::vector &e = m_errors[i]; res.append(boost::python::make_tuple(e[0], e[1], e[2], e[3], e[4], e[5])); } return res; } // // Find highest peak in the data-MGFunction residual // boost::python::tuple MGFunction::py_find_peak() { std::vector buf(data_size()); fcn_diff(&buf.front()); double peak = buf[0]; unsigned pidx = 0; for (unsigned i = 0; i < buf.size(); ++i) if (buf[i] > peak) { peak = buf[i]; pidx = i; } int x1 = mm_data[pidx].x1; int x2 = mm_data[pidx].x2; return boost::python::make_tuple(peak, boost::python::make_tuple(x1, x2)); } // // Register MGFunction class in python interpreter // void MGFunction::register_class() { /* FIXME: I don't really understand why this 'using' statement should be here, but my compiler (apple gcc 4.0.1) can't find arg without it. */ using boost::python::arg; enum_("Gtype") .value("g1", G_Amplitude_Only) .value("g3", G_Reduced_Gaussian) .value("g6", G_Gaussian) ; class_("MGFunction", "Multi-Gaussian function.\n\n" "This class allows you to manage multi-gaussian function\n" "and implements all math required to use it for fitting.\n\n" "NEVER EVER USE IT IN MULTITHREADED SOFTWARE WITHOUT APPROPRIATE LOCKING\n" "IT'S INTERNAL CACHES ARE NOT THREAD-SAFE\n\n", init((arg("data"), "mask", arg("weight") = 1.))) .def("__len__", &MGFunction::gaul_size, "total number of gaussians") .def("add_gaussian", &MGFunction::py_add_gaussian, (arg("type"), "parameters"), "add gaussian to the set") .def("remove_gaussian", &MGFunction::py_remove_gaussian, arg("idx"), "remove given gaussian") .def("__delitem__", &MGFunction::py_remove_gaussian, arg("idx"), "remove given gaussian") .def("__getitem__", &MGFunction::py_get_gaussian, arg("idx"), "get parameters of the given gaussian") .def("__setitem__", &MGFunction::py_set_gaussian, (arg("idx"), "parameters"), "set parameters of the given gaussian") .def("find_peak", &MGFunction::py_find_peak, "find highest peak in the residual image\n" "returns (value, (x1, x2))") .def("fitted_parameters", &MGFunction::parameters_size, "total number of fitted parameters") .def("reset", &MGFunction::py_reset, "reset MGFunction by forgetting all gaussians") ADD_PROPERTY2("parameters", &MGFunction::py_get_parameters, &MGFunction::py_set_parameters, "get/set parameters of all gaussians together") ADD_PROPERTY1("errors", &MGFunction::py_get_errors, "get error bounds") ; } PyBDSF-1.10.1/src/c++/MGFunction2.cc000066400000000000000000000354001420247104600163640ustar00rootroot00000000000000/*! \file MGFunction.cc \ingroup pybdsm \author Oleksandr Usov \date 15/10/2007 Low-level interface. Beware that most routines here are quite involved and unforgiving. Make sure output array sizes are correct. MGFunction class stores internally all unmasked data points, and a list of 2D gaussians, and provides functions to evaluate them in the variety of ways. Let me introduce some notation. MGFunction object with N 2D gaussians in it is defined as: MGF(x1,x2) = sum(A_i * fcn_i(x1,x2; NL_ij)), where fcn_i(x1,x2; NL_ij) = exp(-0.5 * (f1^2 + f2^2)) f1 = ( (x1-NL_i1)*cos(NL_i5) + (x2-NL_i2)*sin(NL_i5))/NL_i3 f2 = (-(x1-NL_i1)*sin(NL_i5) + (x2-NL_i2)*cos(NL_i5))/NL_i4 so amplitudes of sub-gaussians (A_i) are linear fitted parameters, and parameters under exponents (NL_ij) are non-linear. */ #define PY_ARRAY_UNIQUE_SYMBOL PyArrayHandle #define NO_IMPORT_ARRAY #include "boost_python.h" #include "MGFunction.h" #if defined(__GLIBCXX__) and __cplusplus <= 199711L #include #endif #include #include #if not(defined(_LIBCPP_VERSION)) and __cplusplus <= 199711L using namespace __gnu_cxx; #endif namespace n = num_util; std::vector MGFunction::mm_data; std::vector MGFunction::mm_fcn; void * MGFunction::mm_obj = 0; unsigned long MGFunction::mm_cksum = -1; static const double deg = M_PI/180; // // Copy all fitted parameters to buf. // buf should be parameters_size() long. // void MGFunction::get_parameters(double *buf) const { double *chk = buf; for (unsigned i = 0; i < m_gaul.size(); ++i) { copy_n(m_parameters[i].begin(), m_gaul[i], buf); buf += m_gaul[i]; } assert(buf - chk == (int)m_npar); } // // Set all fitted parameters from buf // buf should be parameters_size() long. // void MGFunction::set_parameters(const double *buf) { const double *chk = buf; for(unsigned i = 0; i < m_gaul.size(); ++i) { copy_n(buf, m_gaul[i], m_parameters[i].begin()); buf += m_gaul[i]; } assert(buf - chk == (int)m_npar); } // // Copy all fitted non-linear parameters to buf // buf should be parameters_size() - gaul_size() long. // void MGFunction::get_nlin_parameters(double *buf) const { double *chk = buf; for (unsigned i = 0; i < m_gaul.size(); ++i) { copy_n(m_parameters[i].begin() + 1, m_gaul[i] - 1, buf); buf += m_gaul[i] - 1; } assert(buf - chk == (int)(m_npar - m_gaul.size())); } // // Set all fitted non-linear parameters from buf // buf should be parameters_size() - gaul_size() long. // void MGFunction::set_nlin_parameters(const double *buf) { const double *chk = buf; for(unsigned i = 0; i < m_gaul.size(); ++i) { copy_n(buf, m_gaul[i] - 1, m_parameters[i].begin() + 1); buf += m_gaul[i] - 1 ; } assert(buf - chk == (int)(m_npar - m_gaul.size())); } // // Set all fitted linear parameters from buf // buf should be gaul_size() long. // void MGFunction::set_lin_parameters(const double *buf) { const double *chk = buf; for(unsigned i = 0; i < m_gaul.size(); ++i, ++buf) m_parameters[i][0] = *buf; assert(buf - chk == (int)m_gaul.size()); } // // Copy (unmasked) data into buf. // buf should be data_size() long. // void MGFunction::data(double *buf) const { _update_fcache(); double *chk = buf; for (dcache_it d = mm_data.begin(); d != mm_data.end(); ++d, ++buf) *buf = d->d; assert(buf - chk == (int)m_ndata); } // // Evaluate MGFunction (for unmasked pixels only) // buf should be data_size() long. // void MGFunction::fcn_value(double *buf) const { _update_fcache(); double *chk = buf; fcache_it f = mm_fcn.begin(); for (unsigned didx = 0; didx < m_ndata; ++didx, ++buf) { *buf = 0; for (unsigned gidx = 0; gidx < m_gaul.size(); ++gidx, ++f) *buf += m_parameters[gidx][0] * f->val; } assert(buf - chk == (int)m_ndata); } // // Evaluate (data-MGFunction) (for unmasked pixels only) // buf should be data_size() long. // void MGFunction::fcn_diff(double *buf) const { _update_fcache(); double *chk = buf; fcache_it f = mm_fcn.begin(); for (dcache_it d = mm_data.begin(); d != mm_data.end(); ++d, ++buf) { *buf = d->d; for (unsigned gidx = 0; gidx < m_gaul.size(); ++gidx, ++f) *buf -= m_parameters[gidx][0] * f->val; } assert(buf - chk == (int)m_ndata); } // // Evaluate non-linear part of MGFunction // each gaussian is evaluated for all data points and stored contiguously // buf should be data_size()*gaul_size() long. // // buf layout is following: // fcn_0(X_0; ...), fcn_0(X_1; ...), ....... fcn_0(X_n; ...) // ............................................. // fcn_m(X_0; ...), fcn_m(X_1; ...), ....... fcn_m(X_n; ...) // // where n == data_size() and m == gaul_size() // void MGFunction::fcn_partial_value(double *buf) const { _update_fcache(); fcache_it f = mm_fcn.begin(); unsigned didx, gidx = 0; for (didx = 0; didx < m_ndata; ++didx) { for (gidx = 0; gidx < m_gaul.size(); ++gidx, ++f) buf[gidx * m_ndata + didx] = f->val; } assert((gidx - 1) * m_ndata + didx == m_ndata * m_gaul.size()); } // // Gradient of MGFunction // all derivatives are evaluated for each data point and stored contiguously // buf should be data_size()*parameters_size() long // // buf layout: // dF(X_0)/dx_0 , dF(X_0)/dx_1, .... dF(X_0)/dx_m // .................................... // dF(X_n)/dx_0 , dF(X_n)/dx_1, .... dF(X_n)/dx_m // // where n == data_size() and m == parameters_size() // void MGFunction::fcn_gradient(double *buf) const { _update_fcache(); double *chk = buf; fcache_it f = mm_fcn.begin(); for (unsigned didx = 0; didx < m_ndata; ++didx) for (unsigned gidx = 0; gidx < m_gaul.size(); ++gidx, ++f) { const std::vector &p = m_parameters[gidx]; double cs = f->cs; double sn = f->sn; double f1 = f->f1; double f2 = f->f2; double V = p[0] * f->val; *(buf++) = f->val; if (m_gaul[gidx] == G_Gaussian || m_gaul[gidx] == G_Reduced_Gaussian) { *(buf++) = (V * (f1*cs/p[3] - f2*sn/p[4])); *(buf++) = (V * (f1*sn/p[3] + f2*cs/p[4])); if (m_gaul[gidx] == G_Gaussian) { *(buf++) = (V * f1*f1/p[3]); *(buf++) = (V * f2*f2/p[4]); *(buf++) = (V * deg * f1 * f2 * (p[3]/p[4] - p[4]/p[3])); } } } assert(buf - chk == (int)(m_ndata * m_npar)); } // // Gradient of (data-MGFunction) // all derivatives are evaluated for each data point and stored contiguously // buf should be data_size()*parameters_size() long // // see fcn_gradient for layout description // void MGFunction::fcn_diff_gradient(double *buf) const { _update_fcache(); double *chk = buf; fcache_it f = mm_fcn.begin(); for (unsigned didx = 0; didx < m_ndata; ++didx) for (unsigned gidx = 0; gidx < m_gaul.size(); ++gidx, ++f) { const std::vector &p = m_parameters[gidx]; double cs = f->cs; double sn = f->sn; double f1 = f->f1; double f2 = f->f2; double V = - p[0] * f->val; // EXTRA MINUS SIGN INCLUDED *(buf++) = - f->val; // EXTRA MINUS SIGN INCLUDED if (m_gaul[gidx] == G_Gaussian || m_gaul[gidx] == G_Reduced_Gaussian) { *(buf++) = (V * (f1*cs/p[3] - f2*sn/p[4])); *(buf++) = (V * (f1*sn/p[3] + f2*cs/p[4])); if (m_gaul[gidx] == G_Gaussian) { *(buf++) = (V * f1*f1/p[3]); *(buf++) = (V * f2*f2/p[4]); *(buf++) = (V * deg * f1 * f2 * (p[3]/p[4] - p[4]/p[3])); } } } assert(buf - chk == (int)(m_ndata * m_npar)); } // // Gradient of MGFunction // each derivative is evaluated for all data points and stored contiguously // buf should be data_size()*parameters_size() long // // buf layout: // dF(X_0)/dx_0 , dF(X_1)/dx_0, .... dF(X_n)/dx_0 // .................................... // dF(X_0)/dx_m , dF(X_1)/dx_m, .... dF(X_n)/dx_m // // where n == data_size() and m == parameters_size() // void MGFunction::fcn_transposed_gradient(double *buf) const { _update_fcache(); fcache_it f = mm_fcn.begin(); unsigned didx, gidx = 0, ggidx = 0; for (didx = 0; didx < m_ndata; ++didx) { ggidx = 0; for (gidx = 0; gidx < m_gaul.size(); ++gidx, ++f) { const std::vector &p = m_parameters[gidx]; double cs = f->cs; double sn = f->sn; double f1 = f->f1; double f2 = f->f2; double V = p[0] * f->val; buf[(0 + ggidx)*m_ndata + didx] = f->val; if (m_gaul[gidx] == G_Gaussian || m_gaul[gidx] == G_Reduced_Gaussian) { buf[(1 + ggidx)*m_ndata + didx] = (V * (f1*cs/p[3] - f2*sn/p[4])); buf[(2 + ggidx)*m_ndata + didx] = (V * (f1*sn/p[3] + f2*cs/p[4])); if (m_gaul[gidx] == G_Gaussian) { buf[(3 + ggidx)*m_ndata + didx] = (V * f1*f1/p[3]); buf[(4 + ggidx)*m_ndata + didx] = (V * f2*f2/p[4]); buf[(5 + ggidx)*m_ndata + didx] = (V * deg * f1 * f2 * (p[3]/p[4] - p[4]/p[3])); } } ggidx += m_gaul[gidx]; } } assert(ggidx * m_ndata == m_ndata * m_npar); } // // Gradient of (data-MGFunction) // each derivative is evaluated for all data points and stored contiguously // buf should be data_size()*parameters_size() long // // see fcn_transposed_gradient for layout description // void MGFunction::fcn_diff_transposed_gradient(double *buf) const { _update_fcache(); fcache_it f = mm_fcn.begin(); unsigned didx, gidx = 0, ggidx = 0; for (didx = 0; didx < m_ndata; ++didx) { ggidx = 0; for (gidx = 0; gidx < m_gaul.size(); ++gidx, ++f) { const std::vector &p = m_parameters[gidx]; double cs = f->cs; double sn = f->sn; double f1 = f->f1; double f2 = f->f2; double V = - p[0] * f->val; // EXTRA MINUS SIGN INCLUDED buf[(0 + ggidx)*m_ndata + didx] = - f->val; // EXTRA MINUS SIGN INCLUDED if (m_gaul[gidx] == G_Gaussian || m_gaul[gidx] == G_Reduced_Gaussian) { buf[(1 + ggidx)*m_ndata + didx] = (V * (f1*cs/p[3] - f2*sn/p[4])); buf[(2 + ggidx)*m_ndata + didx] = (V * (f1*sn/p[3] + f2*cs/p[4])); if (m_gaul[gidx] == G_Gaussian) { buf[(3 + ggidx)*m_ndata + didx] = (V * f1*f1/p[3]); buf[(4 + ggidx)*m_ndata + didx] = (V * f2*f2/p[4]); buf[(5 + ggidx)*m_ndata + didx] = (V * deg * f1 * f2 * (p[3]/p[4] - p[4]/p[3])); } } ggidx += m_gaul[gidx]; } } assert(ggidx * m_ndata == m_ndata * m_npar); } // // Gradient of non-linear functions (corresponds to fcn_partial_value) // each derivative is evaluated for all data points and stored contiguously // buf should be data_size()*(parameters_size() - gaul_size()) long // // buf layout: // dF(X_0)/dNL_0 , dF(X_1)/dNL_0, .... dF(X_n)/dNL_0 // .................................... // dF(X_0)/dNL_m , dF(X_1)/dNL_m, .... dF(X_n)/dNL_m // // where n == data_size() and m == (parameters_size()-gaul_size()) // void MGFunction::fcn_partial_gradient(double *buf) const { _update_fcache(); fcache_it f = mm_fcn.begin(); unsigned didx, gidx = 0, ggidx = 0; for (didx = 0; didx < m_ndata; ++didx) { ggidx = 0; for (gidx = 0; gidx < m_gaul.size(); ++gidx, ++f) { const std::vector &p = m_parameters[gidx]; double cs = f->cs; double sn = f->sn; double f1 = f->f1; double f2 = f->f2; double V = f->val; if (m_gaul[gidx] == G_Gaussian || m_gaul[gidx] == G_Reduced_Gaussian) { buf[(0 + ggidx)*m_ndata + didx] = (V * (f1*cs/p[3] - f2*sn/p[4])); buf[(1 + ggidx)*m_ndata + didx] = (V * (f1*sn/p[3] + f2*cs/p[4])); if (m_gaul[gidx] == G_Gaussian) { buf[(2 + ggidx)*m_ndata + didx] = (V * f1*f1/p[3]); buf[(3 + ggidx)*m_ndata + didx] = (V * f2*f2/p[4]); buf[(4 + ggidx)*m_ndata + didx] = (V * deg * f1 * f2 * (p[3]/p[4] - p[4]/p[3])); } } ggidx += m_gaul[gidx] - 1; } } assert(ggidx * m_ndata == m_ndata * (m_npar - m_gaul.size())); } // // Calculate \chi^2 measure between data and MGFunction // uses uniform weighting for all data points // double MGFunction::chi2() const { _update_fcache(); double res = 0; fcache_it f = mm_fcn.begin(); for (dcache_it d = mm_data.begin(); d != mm_data.end(); ++d) { double v = d->d; for (unsigned gidx = 0; gidx < m_gaul.size(); ++gidx, ++f) v -= m_parameters[gidx][0] * f->val; v /= m_weight; res += v*v; } return res; } ////////////////////////////// // cache-handling ////////////////////////////// // // Calculate checksum of values of fitted parameters. // this is used as for a quick check whether cached values of // function should be updated // unsigned long MGFunction::_cksum() const { typedef unsigned long T; T res = 0; for (unsigned i = 0; i < m_gaul.size(); ++i) { T *buf = (T *)&m_parameters[i][0]; int size = m_parameters[i].size() * sizeof(double) / sizeof(T); for (int j = 0; j < size; ++j) res ^= buf[j]; } return res; } // // Update data-cache: rescan data and mask arrays and copy // unmasked pixels into data-cache // template void MGFunction::__update_dcache() const { PyObject *data = (PyObject *)m_data.ptr(); PyObject *mask = (PyObject *)m_mask.ptr(); std::vector shape = n::shape(m_data); dcache_t t; mm_data.clear(); mm_data.reserve(m_ndata); for (int i = 0; i < shape[0]; ++i) for (int j = 0; j < shape[1]; ++j) if (!*(npy_bool *)PyArray_GETPTR2(mask, i, j)) { t.x1 = i; t.x2 = j; t.d = *(T *)PyArray_GETPTR2(data, i, j); mm_data.push_back(t); } assert(mm_data.size() == m_ndata); } // // Type-dispatcher for __update_dcache // void MGFunction::_update_dcache() const { PyArray_TYPES type = n::type(m_data); switch (type) { case NPY_DOUBLE: return __update_dcache(); case NPY_FLOAT: return __update_dcache(); default: py_assert(false, PyExc_TypeError, "Incorrect data datatype"); } } // // Update function-cache: check if fitted parameters were changed // and recalculate all gaussians. // // Also calls _update_dcache if needed // void MGFunction::_update_fcache() const { unsigned long cksum = _cksum(); unsigned ngaul = m_gaul.size(); // reallocate function/data arrays if (mm_fcn.size() != m_ndata * ngaul || mm_obj != (void *)this) { if (mm_obj != (void *)this) { _update_dcache(); mm_obj = (void *)this; } mm_fcn.resize(m_ndata * ngaul); mm_cksum = cksum-1; // force wrong mm_cksum } if (mm_cksum != cksum) { fcache_it f = mm_fcn.begin(); for (dcache_it d = mm_data.begin(); d != mm_data.end(); ++d) for (unsigned gidx = 0; gidx < ngaul; ++gidx, ++f) { const std::vector &p = m_parameters[gidx]; int x1 = d->x1; int x2 = d->x2; double cs = cos(p[5]*deg); double sn = sin(p[5]*deg); double f1 = ( (x1 - p[1]) * cs + (x2 - p[2]) * sn)/p[3]; double f2 = (-(x1 - p[1]) * sn + (x2 - p[2]) * cs)/p[4]; double v = exp((f1*f1 + f2*f2)/(-2.L)); f->sn = sn; f->cs = cs; f->f1 = f1; f->f2 = f2; f->val = v; } mm_cksum = cksum; } } PyBDSF-1.10.1/src/c++/boost_python.h000066400000000000000000000015361420247104600166650ustar00rootroot00000000000000#ifndef _AUX_H_INCLUDED #define _AUX_H_INCLUDED /*! \file boost_python.h \ingroup pybdsm \brief Miscellaneous usefull routines */ #include #include #include #include #if BOOST_VERSION > 106500 #include #endif #if BOOST_VERSION > 103200 #define ADD_PROPERTY1(name, get, doc) .add_property(name, get, doc) #define ADD_PROPERTY2(name, get, set, doc) .add_property(name, get, set, doc) #else #define ADD_PROPERTY1(name, get, doc) .add_property(name, get) #define ADD_PROPERTY2(name, get, set, doc) .add_property(name, get, set) #endif inline void py_assert(bool cond, PyObject *exc, const char *msg) { if(!cond) { PyErr_SetString(exc, msg); throw boost::python::error_already_set(); } } #endif // _AUX_H_INCLUDED PyBDSF-1.10.1/src/c++/cbdsm_main.cc000066400000000000000000000025711420247104600163700ustar00rootroot00000000000000/*! \file cbdsm_main.cc \ingroup pybdsf \author Oleksandr Usov */ #define PY_ARRAY_UNIQUE_SYMBOL PyArrayHandle #include "stat.h" #include "MGFunction.h" #include "Fitters.h" #include using namespace boost::python; #if PY_MAJOR_VERSION == 2 static void wrap_import_array() { import_array(); } #else static void * wrap_import_array() { import_array(); return NULL; } #endif BOOST_PYTHON_MODULE(_cbdsm) { wrap_import_array(); #if BOOST_VERSION < 106500 numeric::array::set_module_and_type("numpy", "ndarray"); #else boost::python::numpy::initialize(); #endif scope().attr("__doc__") = "A collection of optimized C & Fortran routines for pybdsf"; def("bstat", &bstat, (arg("array"), arg("mask") = false, arg("kappa") = 3), "calculate (clipped) mean and rms of the n-dimensional (masked) image\n" "returns 4-tuple (mean, dev, cmean, cdev)\n"); MGFunction::register_class(); def("lmder_fit", &lmder_fit, (arg("fcn"), arg("final") = false, arg("verbose") = 1), "Fitter using the Levenberg-Marquardt algorithm LMDER from MINPACK-1"); def("dn2g_fit", &dn2g_fit, (arg("fcn"), arg("final") = false, arg("verbose") = 1), "Fitter using DN2G algorithm from PORT3 library"); def("dnsg_fit", &dnsg_fit, (arg("fcn"), arg("final") = false, arg("verbose") = 1), "Fitter using DNSG algorithm from PORT3 library"); } PyBDSF-1.10.1/src/c++/num_util/000077500000000000000000000000001420247104600156145ustar00rootroot00000000000000PyBDSF-1.10.1/src/c++/num_util/num_util.cpp000066400000000000000000000310411420247104600201530ustar00rootroot00000000000000// Copyright 2006 Phil Austin (http://www.eos.ubc.ca/personal/paustin) // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) #define PY_ARRAY_UNIQUE_SYMBOL PyArrayHandle #define NO_IMPORT_ARRAY #include "num_util.h" // namespace { const char* rcsid = "$Id$"; } using namespace boost::python; namespace num_util{ //specializations for use by makeNum template <> PyArray_TYPES getEnum(void) { return PyArray_UBYTE; } template <> PyArray_TYPES getEnum(void) { return PyArray_BYTE; } template <> PyArray_TYPES getEnum(void) { return PyArray_SHORT; } template <> PyArray_TYPES getEnum(void) { return PyArray_USHORT; } template <> PyArray_TYPES getEnum(void) { return PyArray_UINT; } template <> PyArray_TYPES getEnum(void) { return PyArray_INT; } template <> PyArray_TYPES getEnum(void) { return PyArray_LONG; } template <> PyArray_TYPES getEnum(void) { return PyArray_ULONG; } template <> PyArray_TYPES getEnum(void) { return PyArray_LONGLONG; } template <> PyArray_TYPES getEnum(void) { return PyArray_ULONGLONG; } template <> PyArray_TYPES getEnum(void) { return PyArray_FLOAT; } template <> PyArray_TYPES getEnum(void) { return PyArray_DOUBLE; } template <> PyArray_TYPES getEnum(void) { return PyArray_LONGDOUBLE; } template <> PyArray_TYPES getEnum >(void) { return PyArray_CFLOAT; } template <> PyArray_TYPES getEnum >(void) { return PyArray_CDOUBLE; } template <> PyArray_TYPES getEnum >(void) { return PyArray_CLONGDOUBLE; } typedef KindStringMap::value_type KindStringMapEntry; KindStringMapEntry kindStringMapEntries[] = { KindStringMapEntry(PyArray_UBYTE, "PyArray_UBYTE"), KindStringMapEntry(PyArray_BYTE, "PyArray_BYTE"), KindStringMapEntry(PyArray_SHORT, "PyArray_SHORT"), KindStringMapEntry(PyArray_INT, "PyArray_INT"), KindStringMapEntry(PyArray_LONG, "PyArray_LONG"), KindStringMapEntry(PyArray_FLOAT, "PyArray_FLOAT"), KindStringMapEntry(PyArray_DOUBLE, "PyArray_DOUBLE"), KindStringMapEntry(PyArray_CFLOAT, "PyArray_CFLOAT"), KindStringMapEntry(PyArray_CDOUBLE,"PyArray_CDOUBLE"), KindStringMapEntry(PyArray_OBJECT, "PyArray_OBJECT"), KindStringMapEntry(PyArray_NTYPES, "PyArray_NTYPES"), KindStringMapEntry(PyArray_NOTYPE ,"PyArray_NOTYPE") }; typedef KindCharMap::value_type KindCharMapEntry; KindCharMapEntry kindCharMapEntries[] = { KindCharMapEntry(PyArray_UBYTE, 'B'), KindCharMapEntry(PyArray_BYTE, 'b'), KindCharMapEntry(PyArray_SHORT, 'h'), KindCharMapEntry(PyArray_INT, 'i'), KindCharMapEntry(PyArray_LONG, 'l'), KindCharMapEntry(PyArray_FLOAT, 'f'), KindCharMapEntry(PyArray_DOUBLE, 'd'), KindCharMapEntry(PyArray_CFLOAT, 'F'), KindCharMapEntry(PyArray_CDOUBLE,'D'), KindCharMapEntry(PyArray_OBJECT, 'O') }; typedef KindTypeMap::value_type KindTypeMapEntry; KindTypeMapEntry kindTypeMapEntries[] = { KindTypeMapEntry('B',PyArray_UBYTE), KindTypeMapEntry('b',PyArray_BYTE), KindTypeMapEntry('h',PyArray_SHORT), KindTypeMapEntry('i',PyArray_INT), KindTypeMapEntry('l',PyArray_LONG), KindTypeMapEntry('f',PyArray_FLOAT), KindTypeMapEntry('d',PyArray_DOUBLE), KindTypeMapEntry('F',PyArray_CFLOAT), KindTypeMapEntry('D',PyArray_CDOUBLE), KindTypeMapEntry('O',PyArray_OBJECT) }; int numStringEntries = sizeof(kindStringMapEntries)/sizeof(KindStringMapEntry); int numCharEntries = sizeof(kindCharMapEntries)/sizeof(KindCharMapEntry); int numTypeEntries = sizeof(kindTypeMapEntries)/sizeof(KindTypeMapEntry); static KindStringMap kindstrings(kindStringMapEntries, kindStringMapEntries + numStringEntries); static KindCharMap kindchars(kindCharMapEntries, kindCharMapEntries + numCharEntries); static KindTypeMap kindtypes(kindTypeMapEntries, kindTypeMapEntries + numTypeEntries); //Create a numarray referencing Python sequence object pyndarray makeNum(object x){ if (!PySequence_Check(x.ptr())){ PyErr_SetString(PyExc_ValueError, "expected a sequence"); throw_error_already_set(); } object obj(handle<> (PyArray_ContiguousFromObject(x.ptr(),PyArray_NOTYPE,0,0))); check_PyArrayElementType(obj); return extract(obj); } //Create a one-dimensional Numeric array of length n and Numeric type t pyndarray makeNum(int n, PyArray_TYPES t=PyArray_DOUBLE){ object obj(handle<>(PyArray_FromDims(1, &n, t))); return extract(obj); } //Create a Numeric array with dimensions dimens and Numeric type t pyndarray makeNum(std::vector dimens, PyArray_TYPES t=PyArray_DOUBLE){ object obj(handle<>(PyArray_FromDims(dimens.size(), &dimens[0], t))); return extract(obj); } pyndarray makeNum(const pyndarray& arr){ //Returns a reference of arr by calling pyndarray copy constructor. //The copy constructor increases arr's reference count. return pyndarray(arr); } PyArray_TYPES type(pyndarray arr){ return PyArray_TYPES(PyArray_TYPE(arr.ptr())); } void check_type(pyndarray arr, PyArray_TYPES expected_type){ PyArray_TYPES actual_type = type(arr); if (actual_type != expected_type) { std::ostringstream stream; stream << "expected Numeric type " << kindstrings[expected_type] << ", found Numeric type " << kindstrings[actual_type] << std::ends; PyErr_SetString(PyExc_TypeError, stream.str().c_str()); throw_error_already_set(); } return; } //Return the number of dimensions int rank(pyndarray arr){ //std::cout << "inside rank" << std::endl; if(!PyArray_Check(arr.ptr())){ PyErr_SetString(PyExc_ValueError, "expected a PyArrayObject"); throw_error_already_set(); } return PyArray_NDIM(arr.ptr()); } void check_rank(pyndarray arr, int expected_rank){ int actual_rank = rank(arr); if (actual_rank != expected_rank) { std::ostringstream stream; stream << "expected rank " << expected_rank << ", found rank " << actual_rank << std::ends; PyErr_SetString(PyExc_RuntimeError, stream.str().c_str()); throw_error_already_set(); } return; } int size(pyndarray arr) { if(!PyArray_Check(arr.ptr())){ PyErr_SetString(PyExc_ValueError, "expected a PyArrayObject"); throw_error_already_set(); } return PyArray_Size(arr.ptr()); } void check_size(pyndarray arr, int expected_size){ int actual_size = size(arr); if (actual_size != expected_size) { std::ostringstream stream; stream << "expected size " << expected_size << ", found size " << actual_size << std::ends; PyErr_SetString(PyExc_RuntimeError, stream.str().c_str()); throw_error_already_set(); } return; } std::vector shape(pyndarray arr){ std::vector out_dims; if(!PyArray_Check(arr.ptr())){ PyErr_SetString(PyExc_ValueError, "expected a PyArrayObject"); throw_error_already_set(); } npy_intp* dims_ptr = PyArray_DIMS(arr.ptr()); int the_rank = rank(arr); for (int i = 0; i < the_rank; i++){ out_dims.push_back(*(dims_ptr + i)); } return out_dims; } int get_dim(pyndarray arr, int dimnum){ assert(dimnum >= 0); int the_rank=rank(arr); if(the_rank < dimnum){ std::ostringstream stream; stream << "Error: asked for length of dimension "; stream << dimnum << " but rank of array is " << the_rank << std::ends; PyErr_SetString(PyExc_RuntimeError, stream.str().c_str()); throw_error_already_set(); } std::vector actual_dims = shape(arr); return actual_dims[dimnum]; } void check_shape(pyndarray arr, std::vector expected_dims){ std::vector actual_dims = shape(arr); if (actual_dims != expected_dims) { std::ostringstream stream; stream << "expected dimensions " << vector_str(expected_dims) << ", found dimensions " << vector_str(actual_dims) << std::ends; PyErr_SetString(PyExc_RuntimeError, stream.str().c_str()); throw_error_already_set(); } return; } void check_dim(pyndarray arr, int dimnum, int dimsize){ std::vector actual_dims = shape(arr); if(actual_dims[dimnum] != dimsize){ std::ostringstream stream; stream << "Error: expected dimension number "; stream << dimnum << " to be length " << dimsize; stream << ", but found length " << actual_dims[dimnum] << std::ends; PyErr_SetString(PyExc_RuntimeError, stream.str().c_str()); throw_error_already_set(); } return; } bool iscontiguous(pyndarray arr) { // return arr.iscontiguous(); return PyArray_ISCONTIGUOUS(arr.ptr()); } void check_contiguous(pyndarray arr) { if (!iscontiguous(arr)) { PyErr_SetString(PyExc_RuntimeError, "expected a contiguous array"); throw_error_already_set(); } return; } void* data(pyndarray arr){ if(!PyArray_Check(arr.ptr())){ PyErr_SetString(PyExc_ValueError, "expected a PyArrayObject"); throw_error_already_set(); } return PyArray_DATA(arr.ptr()); } //Copy data into the array void copy_data(pyndarray arr, char* new_data){ char* arr_data = (char*) data(arr); int nbytes = PyArray_NBYTES(arr.ptr()); for (int i = 0; i < nbytes; i++) { arr_data[i] = new_data[i]; } return; } //Return a clone of this array pyndarray clone(pyndarray arr){ object obj(handle<>(PyArray_NewCopy((PyArrayObject*)arr.ptr(),PyArray_CORDER))); return makeNum(obj); } //Return a clone of this array with a new type pyndarray astype(pyndarray arr, PyArray_TYPES t){ #if BOOST_VERSION < 106500 return (pyndarray) arr.astype(type2char(t)); #else return (pyndarray) arr.astype(type2dtype(type2char(t))); #endif } std::vector strides(pyndarray arr){ std::vector out_strides; if(!PyArray_Check(arr.ptr())){ PyErr_SetString(PyExc_ValueError, "expected a PyArrayObject"); throw_error_already_set(); } npy_intp* strides_ptr = PyArray_STRIDES(arr.ptr()); int the_rank = rank(arr); for (int i = 0; i < the_rank; i++){ out_strides.push_back(*(strides_ptr + i)); } return out_strides; } int refcount(pyndarray arr){ return NPY_REFCOUNT(arr.ptr()); } void check_PyArrayElementType(object newo){ PyArray_TYPES theType=PyArray_TYPES(PyArray_TYPE(newo.ptr())); if(theType == PyArray_OBJECT){ std::ostringstream stream; stream << "array elments have been cast to PyArray_OBJECT, " << "numhandle can only accept arrays with numerical elements" << std::ends; PyErr_SetString(PyExc_TypeError, stream.str().c_str()); throw_error_already_set(); } return; } std::string type2string(PyArray_TYPES t_type){ return kindstrings[t_type]; } char type2char(PyArray_TYPES t_type){ return kindchars[t_type]; } #if BOOST_VERSION >= 106500 boost::python::numpy::dtype type2dtype(char t){ switch(t) { case 'B': return boost::python::numpy::dtype::get_builtin(); case 'b': return boost::python::numpy::dtype::get_builtin(); case 'h': return boost::python::numpy::dtype::get_builtin(); case 'i': return boost::python::numpy::dtype::get_builtin(); case 'l': return boost::python::numpy::dtype::get_builtin(); case 'f': return boost::python::numpy::dtype::get_builtin(); case 'd': return boost::python::numpy::dtype::get_builtin(); case 'F': return boost::python::numpy::dtype::get_builtin >(); case 'D': return boost::python::numpy::dtype::get_builtin >(); default: std::cout << "Invalid character code!" << std::endl; break; } } #endif PyArray_TYPES char2type(char e_type){ return kindtypes[e_type]; } template inline std::string vector_str(const std::vector& vec) { std::ostringstream stream; stream << "(" << vec[0]; for(std::size_t i = 1; i < vec.size(); i++){ stream << ", " << vec[i]; } stream << ")"; return stream.str(); } inline void check_size_match(std::vector dims, int n) { int total = std::accumulate(dims.begin(),dims.end(),1,std::multiplies()); if (total != n) { std::ostringstream stream; stream << "expected array size " << n << ", dimensions give array size " << total << std::ends; PyErr_SetString(PyExc_TypeError, stream.str().c_str()); throw_error_already_set(); } return; } } //namespace num_util PyBDSF-1.10.1/src/c++/num_util/num_util.h000066400000000000000000000241621420247104600176260ustar00rootroot00000000000000#ifndef NUM_UTIL_H__ #define NUM_UTIL_H__ // Copyright 2006 Phil Austin (http://www.eos.ubc.ca/personal/paustin) // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at // http://www.boost.org/LICENSE_1_0.txt) // // $Id$ // #include #include #include #include #include #include #include #include #include namespace num_util{ //! /** *A free function that extracts a PyArrayObject from any sequential PyObject. *@param x a sequential PyObject wrapped in a Boost/Python 'object'. *@return a PyArrayObject wrapped in Boost/Python numeric array. */ pyndarray makeNum(boost::python::object x); /** *Creates an one-dimensional numpy array of length n and numpy type t. * The elements of the array are initialized to zero. *@param n an integer representing the length of the array. *@param t elements' numpy type. Default is double. *@return a numeric array of size n with elements initialized to zero. */ pyndarray makeNum(int n, PyArray_TYPES t); /** *Creates a n-dimensional numpy array with dimensions dimens and numpy *type t. The elements of the array are initialized to zero. *@param dimens a vector of interger specifies the dimensions of the array. *@param t elements' numpy type. Default is double. *@return a numeric array of shape dimens with elements initialized to zero. */ pyndarray makeNum(std::vector dimens, PyArray_TYPES t); /** *Function template returns PyArray_Type for C++ type *See num_util.cpp for specializations *@param T C++ type *@return numpy type enum */ template PyArray_TYPES getEnum(void) { PyErr_SetString(PyExc_ValueError, "no mapping available for this type"); boost::python::throw_error_already_set(); return PyArray_VOID; } /** *Function template creates a one-dimensional numpy array of length n containing *a copy of data at data*. See num_util.cpp::getEnum() for list of specializations *@param T C type of data *@param T* data pointer to start of data *@param n an integer indicates the size of the array. *@return a numpy array of size n with elements initialized to data. */ template pyndarray makeNum(T* data, int n = 0){ boost::python::object obj(boost::python::handle<>(PyArray_FromDims(1, &n, getEnum()))); void *arr_data = PyArray_DATA((PyArrayObject*) obj.ptr()); memcpy(arr_data, data, PyArray_ITEMSIZE((PyArrayObject*) obj.ptr()) * n); // copies the input data to return boost::python::extract(obj); } /** *Function template creates an n-dimensional numpy array with dimensions dimens containing *a copy of values starting at data. See num_util.cpp::getEnum() for list of specializations *@param T C type of data *@param T* data pointer to start of data *@param n an integer indicates the size of the array. *@return a numpy array of size n with elements initialized to data. */ template pyndarray makeNum(T * data, std::vector dims){ int total = std::accumulate(dims.begin(),dims.end(),1,std::multiplies()); boost::python::object obj(boost::python::handle<>(PyArray_FromDims(dims.size(),&dims[0], getEnum()))); void *arr_data = PyArray_DATA((PyArrayObject*) obj.ptr()); memcpy(arr_data, data, PyArray_ITEMSIZE((PyArrayObject*) obj.ptr()) * total); return boost::python::extract(obj); } /** *Creates a numpy array from a numpy array, referencing the data. *@param arr a Boost/Python numeric array. *@return a numeric array referencing the input array. */ pyndarray makeNum(const pyndarray& arr); /** *A free function that retrieves the numpy type of a numpy array. *@param arr a Boost/Python numeric array. *@return the numpy type of the array's elements */ PyArray_TYPES type(pyndarray arr); /** *Throws an exception if the actual array type is not equal to the expected *type. *@param arr a Boost/Python numeric array. *@param expected_type an expected numpy type. *@return ----- */ void check_type(pyndarray arr, PyArray_TYPES expected_type); /** *A free function that retrieves the number of dimensions of a numpy array. *@param arr a Boost/Python numeric array. *@return an integer that indicates the rank of an array. */ int rank(pyndarray arr); /** *Throws an exception if the actual rank is not equal to the expected rank. *@param arr a Boost/Python numeric array. *@param expected_rank an expected rank of the numeric array. *@return ----- */ void check_rank(pyndarray arr, int expected_rank); /** *A free function that returns the total size of the array. *@param arr a Boost/Python numeric array. *@return an integer that indicates the total size of the array. */ int size(pyndarray arr); /** *Throw an exception if the actual total size of the array is not equal to *the expected size. *@param arr a Boost/Python numeric array. *@param expected_size the expected size of an array. *@return ----- */ void check_size(pyndarray arr, int expected_size); /** *Returns the dimensions in a vector. *@param arr a Boost/Python numeric array. *@return a vector with integer values that indicates the shape of the array. */ std::vector shape(pyndarray arr); /** *Returns the size of a specific dimension. *@param arr a Boost/Python numeric array. *@param dimnum an integer that identifies the dimension to retrieve. *@return the size of the requested dimension. */ int get_dim(pyndarray arr, int dimnum); /** *Throws an exception if the actual dimensions of the array are not equal to *the expected dimensions. *@param arr a Boost/Python numeric array. *@param expected_dims an integer vector of expected dimension. *@return ----- */ void check_shape(pyndarray arr, std::vector expected_dims); /** *Throws an exception if a specific dimension from a numpy array does not *match the expected size. *@param arr a Boost/Python numeric array. *@param dimnum an integer that specifies which dimension of 'arr' to check. *@param dimsize an expected size of the specified dimension. *@return ----- */ void check_dim(pyndarray arr, int dimnum, int dimsize); /** *Returns true if the array is contiguous. *@param arr a Boost/Python numeric array. *@return true if the array is contiguous, false otherwise. */ bool iscontiguous(pyndarray arr); /** *Throws an exception if the array is not contiguous. *@param arr a Boost/Python numeric array. *@return ----- */ void check_contiguous(pyndarray arr); /** *Returns a pointer to the data in the array. *@param arr a Boost/Python numeric array. *@return a char pointer pointing at the first element of the array. */ void* data(pyndarray arr); /** *Copies data into the array. *@param arr a Boost/Python numeric array. *@param new_data a char pointer referencing the new data. *@return ----- */ void copy_data(pyndarray arr, char* new_data); /** *Returns a clone of this array. *@param arr a Boost/Python numeric array. *@return a replicate of the Boost/Python numeric array. */ pyndarray clone(pyndarray arr); /** *Returns a clone of this array with a new type. *@param arr a Boost/Python numeric array. *@param t PyArray_TYPES of the output array. *@return a replicate of 'arr' with type set to 't'. */ pyndarray astype(pyndarray arr, PyArray_TYPES t); /* *Returns the reference count of the array. */ /* *@param arr a Boost/Python numeric array. */ /* *@return the reference count of the array. */ int refcount(pyndarray arr); /** *Returns the strides array in a vector of integer. *@param arr a Boost/Python numeric array. *@return the strides of an array. */ std::vector strides(pyndarray arr); /** *Throws an exception if the element of a numpy array is type cast to *PyArray_OBJECT. *@param newo a Boost/Python object. *@return ----- */ void check_PyArrayElementType(boost::python::object newo); /** *Mapping from a PyArray_TYPE to its corresponding name in string. */ typedef std::map KindStringMap; /** *Mapping from a PyArray_TYPE to its corresponding typeID in char. */ typedef std::map KindCharMap; /** *Mapping from a typeID to its corresponding PyArray_TYPE. */ typedef std::map KindTypeMap; /** *Converts a PyArray_TYPE to its name in string. *@param t_type a PyArray_TYPES. *@return the corresponding name in string. */ std::string type2string(PyArray_TYPES t_type); /** *Converts a PyArray_TYPE to its single character typecode. *@param t_type a PyArray_TYPES. *@return the corresponding typecode in char. */ char type2char(PyArray_TYPES t_type); /** *Converts single character typecode of PyArray_TYPE *to its corresponding numpy dtype. *@param t single character typecode of PyArray_TYPES. *@return the corresponding numpy dtype. */ #if BOOST_VERSION >= 106500 boost::python::numpy::dtype type2dtype(char t); #endif /** *Coverts a single character typecode to its PyArray_TYPES. *@param e_type a PyArray_TYPES typecode in char. *@return its corresponding PyArray_TYPES. */ PyArray_TYPES char2type(char e_type); /** *Constructs a string which contains a list of elements extracted from the *input vector. *@param vec a vector of any type. *@return a string that lists the elements from the input vector. */ template inline std::string vector_str(const std::vector& vec); /** *Throws an exception if the total size computed from a vector of integer *does not match with the expected size. *@param dims an integer vector of dimensions. *@param n an expected size. *@return ----- */ inline void check_size_match(std::vector dims, int n); } // namespace num_util #endif PyBDSF-1.10.1/src/c++/pyndarray.h000066400000000000000000000003031420247104600161360ustar00rootroot00000000000000#if BOOST_VERSION < 106500 typedef typename boost::python::numeric::array pyndarray; #else #include typedef typename boost::python::numpy::ndarray pyndarray; #endifPyBDSF-1.10.1/src/c++/stat.cc000066400000000000000000000143011420247104600152410ustar00rootroot00000000000000/*! \file stat.cc \ingroup pybdsm \author Oleksandr Usov */ #define PY_ARRAY_UNIQUE_SYMBOL PyArrayHandle #define NO_IMPORT_ARRAY #include "boost_python.h" #include "stat.h" #include #include using namespace boost::python; using namespace std; namespace n = num_util; // check if obj is numpy scalar object and it's value is val static bool npybool_check(PyObject *obj, bool val) { npy_bool tmp; if (PyArray_IsScalar(obj, Bool)) { PyArray_ScalarAsCtype(obj, &tmp); return tmp == val; } return false; } static inline bool _nonzero(const unsigned &n, const int *v) { bool res = true; for (unsigned i = 0; i < n; ++i) res = res && v[i]; return res; } // calculate clipped mean/rms for array template static pair _stat_nd(pyndarray arr, double _mean, double _threshold) { // ensure contiguous memory access by appropriately sorting indices vector shape = n::shape(arr); vector strides = n::strides(arr); const unsigned Nd = shape.size(); for (unsigned i = 0; i < Nd; ++i) strides[i] /= sizeof(T); for (unsigned i = 0; i < Nd; ++i) for (unsigned j = i; j < Nd; ++j) if (strides[i] > strides[j]) { swap(shape[i], shape[j]); swap(strides[i], strides[j]); } // accumulators double sum = 0; double sumsq = 0; int N = n::size(arr); // data access machinery: we need adv to simplify jumping from // one line to the next one (offset from the end of previous line) T *data = (T *)n::data(arr); int idx[Nd]; int adv[Nd]; for (unsigned i = 0; i < Nd; ++i) { idx[i] = shape[i]; adv[i] = strides[i]; if (i) adv[i] -= shape[i-1]*strides[i-1]; } while (_nonzero(Nd, idx)) { // inner loop over fastest index int _cnt = idx[0]; int _adv = adv[0]; while(_cnt) { --_cnt; double v = *data; if (fabs(v - _mean) > _threshold) --N; else { sum += v; sumsq += v*v; } data += _adv; } idx[0] = _cnt; // now a bit of magic to handle all other indices for (unsigned i = 1; i < Nd; ++i) { idx[i-1] = shape[i-1]; data += adv[i]; --idx[i]; if (idx[i] != 0) break; } } double mean = sum/N; double dev = sqrt((sumsq + N*mean*mean - 2*mean*sum)/(N-1)); return make_pair(mean, dev); } // calculate clipped mean/rms for masked array template static pair _stat_nd_m(pyndarray arr, pyndarray mask, double _mean, double _threshold) { // ensure contiguous memory access by appropriately sorting indices vector shape = n::shape(arr); vector strides = n::strides(arr); vector mstrides = n::strides(mask); const unsigned Nd = shape.size(); for (unsigned i = 0; i < Nd; ++i) { strides[i] /= sizeof(T); mstrides[i] /= sizeof(npy_bool); } for (unsigned i = 0; i < Nd; ++i) for (unsigned j = i; j < Nd; ++j) if (strides[i] > strides[j]) { swap(shape[i], shape[j]); swap(strides[i], strides[j]); swap(mstrides[i], mstrides[j]); } // accumulators double sum = 0; double sumsq = 0; int N = n::size(arr); // data access machinery: we need adv to simplify jumping from // one line to the next one (offset from the end of previous line) T *data = (T *)n::data(arr); npy_bool *mdata = (npy_bool *)n::data(mask); int idx[Nd]; int adv[Nd]; int madv[Nd]; for (unsigned i = 0; i < Nd; ++i) { idx[i] = shape[i]; adv[i] = strides[i]; madv[i] = mstrides[i]; if (i) { adv[i] -= shape[i-1]*strides[i-1]; madv[i] -= shape[i-1]*mstrides[i-1]; } } while (_nonzero(Nd, idx)) { // inner loop over fastest index int _cnt = idx[0]; int _adv = adv[0]; int _madv = madv[0]; while(_cnt) { --_cnt; double v = *data; if (*mdata || fabs(v - _mean) > _threshold) --N; else { sum += v; sumsq += v*v; } data += _adv; mdata += _madv; } idx[0] = _cnt; // now a bit of magic to handle all other indices for (unsigned i = 1; i < Nd; ++i) { idx[i-1] = shape[i-1]; data += adv[i]; mdata += madv[i]; --idx[i]; if (idx[i] != 0) break; } } double mean = sum/N; double dev = sqrt((sumsq + N*mean*mean - 2*mean*sum)/(N-1)); return make_pair(mean, dev); } // dispatch calculation to the correct _stat_FOO function template static pair _stat(pyndarray arr, object mask, double _mean, double _threshold) { if (mask.ptr() == Py_None || mask.ptr() == Py_False || npybool_check(mask.ptr(), false)) return _stat_nd(arr, _mean, _threshold); else return _stat_nd_m(arr, extract(mask), _mean, _threshold); } template static object _bstat(pyndarray arr, object mask, double kappa) { #include const int max_iter = 200; vector mean, dev; pair res(0, DBL_MAX); int cnt = 0; do { ++cnt; mean.push_back(res.first); dev.push_back(res.second); res = _stat(arr, mask, mean.back(), kappa*dev.back()); } while (res.second != dev.back() && cnt < max_iter); /* py_assert(res.second == dev.back(), PyExc_RuntimeError, "clipped rRMS calculation does not converge"); */ return boost::python::make_tuple(mean[1], dev[1], mean.back(), dev.back(), cnt); } object bstat(pyndarray arr, object mask, double kappa) { NPY_TYPES type = n::type(arr); if (PyArray_ISBYTESWAPPED(arr.ptr())) goto fail; if (mask.ptr() != Py_None && mask.ptr() != Py_False && !npybool_check(mask.ptr(), false)) { pyndarray amask = extract(mask); n::check_type(amask, NPY_BOOL); int rank = n::rank(arr); n::check_rank(amask, rank); n::check_size(amask, n::size(arr)); // this is pointless on pc, but might matter somewhere else if (PyArray_ISBYTESWAPPED(amask.ptr())) goto fail; } switch (type) { case NPY_DOUBLE: return _bstat(arr, mask, kappa); case NPY_FLOAT: return _bstat(arr, mask, kappa); default: goto fail; } fail: py_assert(false, PyExc_RuntimeError, "bstat dispatch failed: not implemented for this datatype/layout"); return boost::python::tuple(); // this is fake return-statement to silence the compiler } PyBDSF-1.10.1/src/c++/stat.h000066400000000000000000000006411420247104600151050ustar00rootroot00000000000000#ifndef _CBDSM_STAT_H_INCLUDED_ #define _CBDSM_STAT_H_INCLUDED_ #include #include #include /*! \file stat.h \ingroup pybdsm \author Oleksandr Usov Clipped RMS and mean value calculation for numpy array. */ boost::python::object bstat (pyndarray arr, boost::python::object mask, double kappa); #endif // _CBDSM_STAT_H_INCLUDED_ PyBDSF-1.10.1/src/fortran/000077500000000000000000000000001420247104600150635ustar00rootroot00000000000000PyBDSF-1.10.1/src/fortran/Makefile000066400000000000000000000027601420247104600165300ustar00rootroot00000000000000# All the routines which are needed for libraries for PyBDSM are compiled here # using gnu95, f2py and suitable flags depending on os. Include files are in ../includes # $(FC) -c *.f -o *.o DIR=../../fBDSM CFLAGS = -I$(DIR)/includes ODIR=./ LIBDIR=../../fBDSM/libs IODIR=../../fBDSM/io MDIR=../../fBDSM/wout_pgplot ifeq ($(shell uname -m), x86_64) FC=gfortran -fPIC -fno-second-underscore $(CFLAGS) else # ! i686 FC=/usr/bin/g77 -g -fno-second-underscore -fbounds-check $(CFLAGS) endif ifeq ($(shell uname -s), Darwin) FC=gfortran -fbounds-check $(CFLAGS) endif OBJ1 = iland_mat2list.o writearray.o gaul2gaulbin.o writefitshead.o sub_prog.o \ readarray.o get_keyword.o check.o OBJ1_f = iland_mat2list.f writearray.f gaul2gaulbin.f writefitshead.f all: _pytesselate.so _py2fbdsm.so LIBS=$(LIBDIR)/libfbdsm_woutpg.a _pytesselate.pyf : f2py2.5 pytess_simple.f pytess_roundness.f -m _pytesselate -h _pytesselate.pyf _pytesselate.so: _pytesselate.pyf pytess_simple.o pytess_roundness.o f2py2.5 --fcompiler=gnu95 -c _pytesselate.pyf pytess_simple.o pytess_roundness.o dummy.f _py2fbdsm.pyf : cp $(IODIR)/readarray.f $(IODIR)/writearray.f $(IODIR)/writefitshead.f ./ cp $(MDIR)/check.f $(MDIR)/get_keyword.f $(MDIR)/iland_mat2list.f $(MDIR)/sub_prog.f ./ f2py2.5 $(OBJ1_f) -m _py2fbdsm -h _py2fbdsm.pyf _py2fbdsm.so: _py2fbdsm.pyf $(OBJ1) f2py2.5 --fcompiler=gnu95 -c _py2fbdsm.pyf $(OBJ1) $(LIBS) dummy.f %.o: %.f $(FC) -c $< -o $@ clean: rm -fr *.o cleanall: rm -fr *.o *.so *.pyf PyBDSF-1.10.1/src/fortran/constants.inc000066400000000000000000000004561420247104600175770ustar00rootroot00000000000000c! physical constants real*8 c,pi,rad,fwsig,bolt,sq2 parameter (pi=3.14159265358979d0) parameter (fwsig=2.35482d0) parameter (rad=57.29577951308232) parameter (c=2.99792458d8) parameter (bolt=1.3806505d-23) parameter (sq2=1.41421356237310d0) PyBDSF-1.10.1/src/fortran/gaul2gaulbin.f000066400000000000000000000024641420247104600176140ustar00rootroot00000000000000 subroutine gaul2gaulbin(fname) implicit none character fname*500,word*10,f2*500 integer gaulid,islid,flag,blc1,blc2,trc1,trc2,srcid,nchar real*8 tot,dtot,peak,epeak,ra,era,dec,edec,xpix,expix,ypix real*8 eypix,bmaj,ebmaj,bmin,ebmin,bpa,ebpa,dbmaj,edbmaj,dbmin real*8 edbmin,dbpa,edbpa,sstd,sav,rstd,rav,chisq,q,dumr1,dumr2 real*8 dumr3,dumr4,dumr5,dumr6 cf2py fname f2 = fname(1:nchar(fname))//'.bin' open(unit=21, file=fname) open(unit=22, file=f2, form='unformatted') word = '' do while (word.ne.'fmt') read (21,*) word end do 200 read (21,*,END=100) gaulid,islid,flag,tot,dtot,peak,epeak,ra, / era,dec,edec,xpix,expix,ypix,eypix,bmaj,ebmaj,bmin,ebmin,bpa, / ebpa,dbmaj,edbmaj,dbmin,edbmin,dbpa,edbpa,sstd,sav,rstd, / rav,chisq,q,srcid,blc1,blc2,trc1,trc2,dumr1,dumr2, / dumr3,dumr4,dumr5,dumr6 write (22) gaulid,islid,flag,tot,dtot,peak,epeak,ra, / era,dec,edec,xpix,expix,ypix,eypix,bmaj,ebmaj,bmin,ebmin,bpa, / ebpa,dbmaj,edbmaj,dbmin,edbmin,dbpa,edbpa,sstd,sav,rstd, / rav,chisq,q,srcid,blc1,blc2,trc1,trc2,dumr1,dumr2, / dumr3,dumr4,dumr5,dumr6 goto 200 100 close(21) close(22) return end PyBDSF-1.10.1/src/fortran/pytess_roundness.f000077500000000000000000000122371420247104600206710ustar00rootroot00000000000000c! roundness modified for python subroutine pytess_roundness(n,m,ngens,xgens,ygens, / snrgens,eps,code,volrank) implicit none integer n,m,ngens,i,areavec(ngens) integer roundfacold(ngens),niter real*8 volrank(n,m),xgens(ngens),ygens(ngens),snrgens(ngens) real*8 eps,roundfac(ngens) real*8 roundpix(ngens),x(ngens),y(ngens) character code*1 cf2py intent(in) n,m,ngens,xgens,ygens,snrgens,code,eps cf2py intent(out) volrank do i=1,ngens roundfac(i)=2.d0/3.d0 x(i)=0.d0 y(i)=0.d0 roundpix(i)=0.d0 areavec(i)=1 end do niter=0 333 continue call tess_bin_complicated(n,m,ngens,xgens,ygens, / snrgens,volrank,roundpix,x,y,niter,code,eps) niter=niter+1 do i=1,ngens roundfacold(i)=roundfac(i) end do call tile_roundness(volrank,n,m,ngens,xgens, / ygens,roundfac,roundpix,x,y) call calc_area_tess(volrank,n,m,ngens,areavec) if (niter.eq.1.or.(niter.lt.2)) then goto 333 end if i=int(snrgens(1)) return end c! same as simple but weights are fn of each pixel now rather than bin c! if code='s' then each pt belongs to one bin. If not then fuzzy tesselation subroutine tess_bin_complicated(n,m,ngens,xgens,ygens, / snrgens,volrank,roundpix,x,y,niter,code,eps) implicit none integer n,m,ngens,i,j,k,minind(n,m),l,niter real*8 volrank(n,m),xgens(ngens),ygens(ngens),dist,dist1 real*8 dumr,snrgens(ngens),eps,roundpix(ngens) real*8 x(ngens),y(ngens),dumr1,wts character code*1 do j=1,m do i=1,n volrank(i,j)=0.d0 dumr=1.d90 do k=1,ngens if (niter.eq.0) then wts=1.d0 else dumr1=sqrt((x(k)-i)*(x(k)-i)+(y(k)-j)*(y(k)-j)) dumr1=dumr1*roundpix(k) wts=1.d0/dumr1 end if dist=sqrt((i-xgens(k))*(i-xgens(k))+ / (j-ygens(k))*(j-ygens(k)))/wts if (dist.lt.dumr) then dumr=dist minind(i,j)=k end if ! minind(i,j) is number of nearest generator end do end do end do c! if (code.eq.'s') then do j=1,m do i=1,n volrank(i,j)=1.d0*minind(i,j) end do end do else do j=1,m do i=1,n do k=1,ngens l=minind(i,j) if (k.ne.l) then if (niter.eq.0) then wts=1.d0 else dumr1=sqrt((x(k)-i)*(x(k)-i)+(y(k)-j)*(y(k)-j)) dumr1=dumr1*roundpix(k) wts=1.d0/dumr1 end if dist=sqrt((i-xgens(k))*(i-xgens(k))+ / (j-ygens(k))*(j-ygens(k)))/wts dist1=sqrt((i-xgens(minind(i,j)))*(i-xgens(minind(i,j)))+ / (j-ygens(minind(i,j)))*(j-ygens(minind(i,j))))/wts if (dist.le.(1.d0+eps)*dist1) / volrank(i,j)=volrank(i,j)+1.d0*(minind(i,j)+k) end if end do end do end do end if i=int(snrgens(1)) return end subroutine calc_area_tess(volrank,n,m,x,areavec) implicit none integer n,m,x,areavec(x),i,j real*8 volrank(n,m) do i=1,x areavec(i)=0 end do do j=1,m do i=1,n areavec(int(volrank(i,j)))=areavec(int(volrank(i,j)))+1 end do end do return end c! c! c! check roundness. c! modify to make roundpix not include dist so that u dont have to c! define huge 3d arrays which crash. subroutine tile_roundness(volrank,n,m,ngens,xgens, / ygens,roundfac,roundpix,x,y) implicit none include "constants.inc" integer n,m,i,j,ngens,ind,npix(ngens),k real*8 volrank(n,m),area(ngens),sumrad(ngens),dist real*8 xgens(ngens),ygens(ngens),roundfac(ngens) real*8 x(ngens),y(ngens),roundpix(ngens) do i=1,ngens area(i)=0.d0 sumrad(i)=0.d0 npix(i)=0 x(i)=0.d0 y(i)=0.d0 end do do j=1,m do i=1,n ind=int(volrank(i,j)) x(ind)=x(ind)+i y(ind)=y(ind)+j npix(ind)=npix(ind)+1 end do end do do i=1,ngens x(i)=x(i)/npix(i) y(i)=y(i)/npix(i) end do do i=1,ngens npix(i)=0 end do do j=1,m do i=1,n ind=int(volrank(i,j)) dist=sqrt((xgens(ind)-i)*(xgens(ind)-i)+ / (ygens(ind)-j)*(ygens(ind)-j)) dist=sqrt((x(ind)-i)*(x(ind)-i)+ / (y(ind)-j)*(y(ind)-j)) area(ind)=area(ind)+1 sumrad(ind)=sumrad(ind)+dist npix(ind)=npix(ind)+1 end do end do do i=1,ngens roundfac(i)=(sumrad(i)/npix(i))/(sqrt(area(i)/pi)) end do do k=1,ngens roundpix(k)=1.d0/(sumrad(k)/npix(k)) end do return end PyBDSF-1.10.1/src/fortran/pytess_simple.f000077500000000000000000000033741420247104600201440ustar00rootroot00000000000000c! if code='s' then each pt belongs to one bin. If not then fuzzy tesselation c! cut out just this part for pythn cos it takes forever to do this part c! in python subroutine pytess_simple(n,m,ngens,xgens,ygens, / snrgens,wts,eps,code,volrank) implicit none integer n,m,ngens,i,j,k,minind(n,m),l real*8 volrank(n,m),xgens(ngens),ygens(ngens),dist real*8 dumr,snrgens(ngens),wts(ngens),eps,distmin character code*1 cf2py intent(in) n,m,ngens,xgens,ygens,snrgens,wts,code,eps cf2py intent(out) volrank do j=1,m do i=1,n volrank(i,j)=0.d0 dumr=1.d90 do k=1,ngens dist=sqrt((i-xgens(k))*(i-xgens(k))+ / (j-ygens(k))*(j-ygens(k)))/wts(k) if (dist.lt.dumr) then dumr=dist minind(i,j)=k end if ! minind(i,j) is number of nearest generator end do end do end do c! if (code.eq.'s') then do j=1,m do i=1,n volrank(i,j)=1.d0*minind(i,j) end do end do else do j=1,m do i=1,n do k=1,ngens l=minind(i,j) if (k.ne.l) then dist=sqrt((i-xgens(k))*(i-xgens(k))+ / (j-ygens(k))*(j-ygens(k)))/wts(k) distmin=sqrt((i-xgens(l))*(i-xgens(l))+ / (j-ygens(l))*(j-ygens(l)))/wts(l) if (dist.le.(1.d0+eps)*distmin) / volrank(i,j)=volrank(i,j)+1.d0*(l+k) end if end do end do end do end if i = int(snrgens(1)) ! so there is no warning while compiling return end c! PyBDSF-1.10.1/src/minpack/000077500000000000000000000000001420247104600150325ustar00rootroot00000000000000PyBDSF-1.10.1/src/minpack/CMakeLists.txt_minpack000066400000000000000000000005171420247104600212770ustar00rootroot00000000000000## ---------------------------------------------------------------------- ## $Id$ ## ---------------------------------------------------------------------- enable_language(Fortran) set (minpack_sources lmder.f lmpar.f qrfac.f qrsolv.f enorm.f dpmpar.f) add_definitions (-fPIC) add_library (minpack STATIC ${minpack_sources}) PyBDSF-1.10.1/src/minpack/DISCLAIMER000066400000000000000000000043061420247104600163740ustar00rootroot00000000000000Minpack Copyright Notice (1999) University of Chicago. All rights reserved Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The end-user documentation included with the redistribution, if any, must include the following acknowledgment: "This product includes software developed by the University of Chicago, as Operator of Argonne National Laboratory. Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. 4. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS" WITHOUT WARRANTY OF ANY KIND. THE COPYRIGHT HOLDER, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND THEIR EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL LIABILITY OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR USEFULNESS OF THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF THE SOFTWARE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS, (4) DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL BE CORRECTED. 5. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT HOLDER, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT, INCIDENTAL, CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF ANY KIND OR NATURE, INCLUDING BUT NOT LIMITED TO LOSS OF PROFITS OR LOSS OF DATA, FOR ANY REASON WHATSOEVER, WHETHER SUCH LIABILITY IS ASSERTED ON THE BASIS OF CONTRACT, TORT (INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE, EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE POSSIBILITY OF SUCH LOSS OR DAMAGES. PyBDSF-1.10.1/src/minpack/README000066400000000000000000000014051420247104600157120ustar00rootroot00000000000000====== readme for minpack ====== Minpack includes software for solving nonlinear equations and nonlinear least squares problems. Five algorithmic paths each include a core subroutine and an easy-to-use driver. The algorithms proceed either from an analytic specification of the Jacobian matrix or directly from the problem functions. The paths include facilities for systems of equations with a banded Jacobian matrix, for least squares problems with a large amount of data, and for checking the consistency of the Jacobian matrix with the functions. This directory contains the double-precision versions. Jorge More', Burt Garbow, and Ken Hillstrom at Argonne National Laboratory. For copyright information see; http://www.netlib.org/minpack/disclaimer PyBDSF-1.10.1/src/minpack/chkder.f000066400000000000000000000114341420247104600164440ustar00rootroot00000000000000 subroutine chkder(m,n,x,fvec,fjac,ldfjac,xp,fvecp,mode,err) integer m,n,ldfjac,mode double precision x(n),fvec(m),fjac(ldfjac,n),xp(n),fvecp(m), * err(m) c ********** c c subroutine chkder c c this subroutine checks the gradients of m nonlinear functions c in n variables, evaluated at a point x, for consistency with c the functions themselves. the user must call chkder twice, c first with mode = 1 and then with mode = 2. c c mode = 1. on input, x must contain the point of evaluation. c on output, xp is set to a neighboring point. c c mode = 2. on input, fvec must contain the functions and the c rows of fjac must contain the gradients c of the respective functions each evaluated c at x, and fvecp must contain the functions c evaluated at xp. c on output, err contains measures of correctness of c the respective gradients. c c the subroutine does not perform reliably if cancellation or c rounding errors cause a severe loss of significance in the c evaluation of a function. therefore, none of the components c of x should be unusually small (in particular, zero) or any c other value which may cause loss of significance. c c the subroutine statement is c c subroutine chkder(m,n,x,fvec,fjac,ldfjac,xp,fvecp,mode,err) c c where c c m is a positive integer input variable set to the number c of functions. c c n is a positive integer input variable set to the number c of variables. c c x is an input array of length n. c c fvec is an array of length m. on input when mode = 2, c fvec must contain the functions evaluated at x. c c fjac is an m by n array. on input when mode = 2, c the rows of fjac must contain the gradients of c the respective functions evaluated at x. c c ldfjac is a positive integer input parameter not less than m c which specifies the leading dimension of the array fjac. c c xp is an array of length n. on output when mode = 1, c xp is set to a neighboring point of x. c c fvecp is an array of length m. on input when mode = 2, c fvecp must contain the functions evaluated at xp. c c mode is an integer input variable set to 1 on the first call c and 2 on the second. other values of mode are equivalent c to mode = 1. c c err is an array of length m. on output when mode = 2, c err contains measures of correctness of the respective c gradients. if there is no severe loss of significance, c then if err(i) is 1.0 the i-th gradient is correct, c while if err(i) is 0.0 the i-th gradient is incorrect. c for values of err between 0.0 and 1.0, the categorization c is less certain. in general, a value of err(i) greater c than 0.5 indicates that the i-th gradient is probably c correct, while a value of err(i) less than 0.5 indicates c that the i-th gradient is probably incorrect. c c subprograms called c c minpack supplied ... dpmpar c c fortran supplied ... dabs,dlog10,dsqrt c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,j double precision eps,epsf,epslog,epsmch,factor,one,temp,zero double precision dpmpar data factor,one,zero /1.0d2,1.0d0,0.0d0/ c c epsmch is the machine precision. c epsmch = dpmpar(1) c eps = dsqrt(epsmch) c if (mode .eq. 2) go to 20 c c mode = 1. c do 10 j = 1, n temp = eps*dabs(x(j)) if (temp .eq. zero) temp = eps xp(j) = x(j) + temp 10 continue go to 70 20 continue c c mode = 2. c epsf = factor*epsmch epslog = dlog10(eps) do 30 i = 1, m err(i) = zero 30 continue do 50 j = 1, n temp = dabs(x(j)) if (temp .eq. zero) temp = one do 40 i = 1, m err(i) = err(i) + temp*fjac(i,j) 40 continue 50 continue do 60 i = 1, m temp = one if (fvec(i) .ne. zero .and. fvecp(i) .ne. zero * .and. dabs(fvecp(i)-fvec(i)) .ge. epsf*dabs(fvec(i))) * temp = eps*dabs((fvecp(i)-fvec(i))/eps-err(i)) * /(dabs(fvec(i)) + dabs(fvecp(i))) err(i) = one if (temp .gt. epsmch .and. temp .lt. eps) * err(i) = (dlog10(temp) - epslog)/epslog if (temp .ge. eps) err(i) = zero 60 continue 70 continue c return c c last card of subroutine chkder. c end PyBDSF-1.10.1/src/minpack/cmake_install.cmake000066400000000000000000000017511420247104600206460ustar00rootroot00000000000000# Install script for directory: /Users/mohan/lofarsoft/src/pybdsm/implement/minpack # Set the install prefix IF(NOT DEFINED CMAKE_INSTALL_PREFIX) SET(CMAKE_INSTALL_PREFIX "/usr/local") ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX) STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") # Set the install configuration name. IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) IF(BUILD_TYPE) STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" "" CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") ELSE(BUILD_TYPE) SET(CMAKE_INSTALL_CONFIG_NAME "") ENDIF(BUILD_TYPE) MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) # Set the component getting installed. IF(NOT CMAKE_INSTALL_COMPONENT) IF(COMPONENT) MESSAGE(STATUS "Install component: \"${COMPONENT}\"") SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}") ELSE(COMPONENT) SET(CMAKE_INSTALL_COMPONENT) ENDIF(COMPONENT) ENDIF(NOT CMAKE_INSTALL_COMPONENT) PyBDSF-1.10.1/src/minpack/dogleg.f000066400000000000000000000122671420247104600164520ustar00rootroot00000000000000 subroutine dogleg(n,r,lr,diag,qtb,delta,x,wa1,wa2) integer n,lr double precision delta double precision r(lr),diag(n),qtb(n),x(n),wa1(n),wa2(n) c ********** c c subroutine dogleg c c given an m by n matrix a, an n by n nonsingular diagonal c matrix d, an m-vector b, and a positive number delta, the c problem is to determine the convex combination x of the c gauss-newton and scaled gradient directions that minimizes c (a*x - b) in the least squares sense, subject to the c restriction that the euclidean norm of d*x be at most delta. c c this subroutine completes the solution of the problem c if it is provided with the necessary information from the c qr factorization of a. that is, if a = q*r, where q has c orthogonal columns and r is an upper triangular matrix, c then dogleg expects the full upper triangle of r and c the first n components of (q transpose)*b. c c the subroutine statement is c c subroutine dogleg(n,r,lr,diag,qtb,delta,x,wa1,wa2) c c where c c n is a positive integer input variable set to the order of r. c c r is an input array of length lr which must contain the upper c triangular matrix r stored by rows. c c lr is a positive integer input variable not less than c (n*(n+1))/2. c c diag is an input array of length n which must contain the c diagonal elements of the matrix d. c c qtb is an input array of length n which must contain the first c n elements of the vector (q transpose)*b. c c delta is a positive input variable which specifies an upper c bound on the euclidean norm of d*x. c c x is an output array of length n which contains the desired c convex combination of the gauss-newton direction and the c scaled gradient direction. c c wa1 and wa2 are work arrays of length n. c c subprograms called c c minpack-supplied ... dpmpar,enorm c c fortran-supplied ... dabs,dmax1,dmin1,dsqrt c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,j,jj,jp1,k,l double precision alpha,bnorm,epsmch,gnorm,one,qnorm,sgnorm,sum, * temp,zero double precision dpmpar,enorm data one,zero /1.0d0,0.0d0/ c c epsmch is the machine precision. c epsmch = dpmpar(1) c c first, calculate the gauss-newton direction. c jj = (n*(n + 1))/2 + 1 do 50 k = 1, n j = n - k + 1 jp1 = j + 1 jj = jj - k l = jj + 1 sum = zero if (n .lt. jp1) go to 20 do 10 i = jp1, n sum = sum + r(l)*x(i) l = l + 1 10 continue 20 continue temp = r(jj) if (temp .ne. zero) go to 40 l = j do 30 i = 1, j temp = dmax1(temp,dabs(r(l))) l = l + n - i 30 continue temp = epsmch*temp if (temp .eq. zero) temp = epsmch 40 continue x(j) = (qtb(j) - sum)/temp 50 continue c c test whether the gauss-newton direction is acceptable. c do 60 j = 1, n wa1(j) = zero wa2(j) = diag(j)*x(j) 60 continue qnorm = enorm(n,wa2) if (qnorm .le. delta) go to 140 c c the gauss-newton direction is not acceptable. c next, calculate the scaled gradient direction. c l = 1 do 80 j = 1, n temp = qtb(j) do 70 i = j, n wa1(i) = wa1(i) + r(l)*temp l = l + 1 70 continue wa1(j) = wa1(j)/diag(j) 80 continue c c calculate the norm of the scaled gradient and test for c the special case in which the scaled gradient is zero. c gnorm = enorm(n,wa1) sgnorm = zero alpha = delta/qnorm if (gnorm .eq. zero) go to 120 c c calculate the point along the scaled gradient c at which the quadratic is minimized. c do 90 j = 1, n wa1(j) = (wa1(j)/gnorm)/diag(j) 90 continue l = 1 do 110 j = 1, n sum = zero do 100 i = j, n sum = sum + r(l)*wa1(i) l = l + 1 100 continue wa2(j) = sum 110 continue temp = enorm(n,wa2) sgnorm = (gnorm/temp)/temp c c test whether the scaled gradient direction is acceptable. c alpha = zero if (sgnorm .ge. delta) go to 120 c c the scaled gradient direction is not acceptable. c finally, calculate the point along the dogleg c at which the quadratic is minimized. c bnorm = enorm(n,qtb) temp = (bnorm/gnorm)*(bnorm/qnorm)*(sgnorm/delta) temp = temp - (delta/qnorm)*(sgnorm/delta)**2 * + dsqrt((temp-(delta/qnorm))**2 * +(one-(delta/qnorm)**2)*(one-(sgnorm/delta)**2)) alpha = ((delta/qnorm)*(one - (sgnorm/delta)**2))/temp 120 continue c c form appropriate convex combination of the gauss-newton c direction and the scaled gradient direction. c temp = (one - alpha)*dmin1(sgnorm,delta) do 130 j = 1, n x(j) = temp*wa1(j) + alpha*x(j) 130 continue 140 continue return c c last card of subroutine dogleg. c end PyBDSF-1.10.1/src/minpack/dpmpar.f000066400000000000000000000132361420247104600164710ustar00rootroot00000000000000 double precision function dpmpar(i) integer i c ********** c c Function dpmpar c c This function provides double precision machine parameters c when the appropriate set of data statements is activated (by c removing the c from column 1) and all other data statements are c rendered inactive. Most of the parameter values were obtained c from the corresponding Bell Laboratories Port Library function. c c The function statement is c c double precision function dpmpar(i) c c where c c i is an integer input variable set to 1, 2, or 3 which c selects the desired machine parameter. If the machine has c t base b digits and its smallest and largest exponents are c emin and emax, respectively, then these parameters are c c dpmpar(1) = b**(1 - t), the machine precision, c c dpmpar(2) = b**(emin - 1), the smallest magnitude, c c dpmpar(3) = b**emax*(1 - b**(-t)), the largest magnitude. c c Argonne National Laboratory. MINPACK Project. November 1996. c Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More' c c ********** integer mcheps(4) integer minmag(4) integer maxmag(4) double precision dmach(3) equivalence (dmach(1),mcheps(1)) equivalence (dmach(2),minmag(1)) equivalence (dmach(3),maxmag(1)) c c Machine constants for the IBM 360/370 series, c the Amdahl 470/V6, the ICL 2900, the Itel AS/6, c the Xerox Sigma 5/7/9 and the Sel systems 85/86. c c data mcheps(1),mcheps(2) / z34100000, z00000000 / c data minmag(1),minmag(2) / z00100000, z00000000 / c data maxmag(1),maxmag(2) / z7fffffff, zffffffff / c c Machine constants for the Honeywell 600/6000 series. c c data mcheps(1),mcheps(2) / o606400000000, o000000000000 / c data minmag(1),minmag(2) / o402400000000, o000000000000 / c data maxmag(1),maxmag(2) / o376777777777, o777777777777 / c c Machine constants for the CDC 6000/7000 series. c c data mcheps(1) / 15614000000000000000b / c data mcheps(2) / 15010000000000000000b / c c data minmag(1) / 00604000000000000000b / c data minmag(2) / 00000000000000000000b / c c data maxmag(1) / 37767777777777777777b / c data maxmag(2) / 37167777777777777777b / c c Machine constants for the PDP-10 (KA processor). c c data mcheps(1),mcheps(2) / "114400000000, "000000000000 / c data minmag(1),minmag(2) / "033400000000, "000000000000 / c data maxmag(1),maxmag(2) / "377777777777, "344777777777 / c c Machine constants for the PDP-10 (KI processor). c c data mcheps(1),mcheps(2) / "104400000000, "000000000000 / c data minmag(1),minmag(2) / "000400000000, "000000000000 / c data maxmag(1),maxmag(2) / "377777777777, "377777777777 / c c Machine constants for the PDP-11. c c data mcheps(1),mcheps(2) / 9472, 0 / c data mcheps(3),mcheps(4) / 0, 0 / c c data minmag(1),minmag(2) / 128, 0 / c data minmag(3),minmag(4) / 0, 0 / c c data maxmag(1),maxmag(2) / 32767, -1 / c data maxmag(3),maxmag(4) / -1, -1 / c c Machine constants for the Burroughs 6700/7700 systems. c c data mcheps(1) / o1451000000000000 / c data mcheps(2) / o0000000000000000 / c c data minmag(1) / o1771000000000000 / c data minmag(2) / o7770000000000000 / c c data maxmag(1) / o0777777777777777 / c data maxmag(2) / o7777777777777777 / c c Machine constants for the Burroughs 5700 system. c c data mcheps(1) / o1451000000000000 / c data mcheps(2) / o0000000000000000 / c c data minmag(1) / o1771000000000000 / c data minmag(2) / o0000000000000000 / c c data maxmag(1) / o0777777777777777 / c data maxmag(2) / o0007777777777777 / c c Machine constants for the Burroughs 1700 system. c c data mcheps(1) / zcc6800000 / c data mcheps(2) / z000000000 / c c data minmag(1) / zc00800000 / c data minmag(2) / z000000000 / c c data maxmag(1) / zdffffffff / c data maxmag(2) / zfffffffff / c c Machine constants for the Univac 1100 series. c c data mcheps(1),mcheps(2) / o170640000000, o000000000000 / c data minmag(1),minmag(2) / o000040000000, o000000000000 / c data maxmag(1),maxmag(2) / o377777777777, o777777777777 / c c Machine constants for the Data General Eclipse S/200. c c Note - it may be appropriate to include the following card - c static dmach(3) c c data minmag/20k,3*0/,maxmag/77777k,3*177777k/ c data mcheps/32020k,3*0/ c c Machine constants for the Harris 220. c c data mcheps(1),mcheps(2) / '20000000, '00000334 / c data minmag(1),minmag(2) / '20000000, '00000201 / c data maxmag(1),maxmag(2) / '37777777, '37777577 / c c Machine constants for the Cray-1. c c data mcheps(1) / 0376424000000000000000b / c data mcheps(2) / 0000000000000000000000b / c c data minmag(1) / 0200034000000000000000b / c data minmag(2) / 0000000000000000000000b / c c data maxmag(1) / 0577777777777777777777b / c data maxmag(2) / 0000007777777777777776b / c c Machine constants for the Prime 400. c c data mcheps(1),mcheps(2) / :10000000000, :00000000123 / c data minmag(1),minmag(2) / :10000000000, :00000100000 / c data maxmag(1),maxmag(2) / :17777777777, :37777677776 / c c Machine constants for the VAX-11. c c data mcheps(1),mcheps(2) / 9472, 0 / c data minmag(1),minmag(2) / 128, 0 / c data maxmag(1),maxmag(2) / -32769, -1 / c c Machine constants for IEEE machines. c data dmach(1) /2.22044604926d-16/ data dmach(2) /2.22507385852d-308/ data dmach(3) /1.79769313485d+308/ c dpmpar = dmach(i) return c c Last card of function dpmpar. c end PyBDSF-1.10.1/src/minpack/enorm.f000066400000000000000000000060771420247104600163330ustar00rootroot00000000000000 double precision function enorm(n,x) integer n double precision x(n) c ********** c c function enorm c c given an n-vector x, this function calculates the c euclidean norm of x. c c the euclidean norm is computed by accumulating the sum of c squares in three different sums. the sums of squares for the c small and large components are scaled so that no overflows c occur. non-destructive underflows are permitted. underflows c and overflows do not occur in the computation of the unscaled c sum of squares for the intermediate components. c the definitions of small, intermediate and large components c depend on two constants, rdwarf and rgiant. the main c restrictions on these constants are that rdwarf**2 not c underflow and rgiant**2 not overflow. the constants c given here are suitable for every known computer. c c the function statement is c c double precision function enorm(n,x) c c where c c n is a positive integer input variable. c c x is an input array of length n. c c subprograms called c c fortran-supplied ... dabs,dsqrt c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i double precision agiant,floatn,one,rdwarf,rgiant,s1,s2,s3,xabs, * x1max,x3max,zero data one,zero,rdwarf,rgiant /1.0d0,0.0d0,3.834d-20,1.304d19/ s1 = zero s2 = zero s3 = zero x1max = zero x3max = zero floatn = n agiant = rgiant/floatn do 90 i = 1, n xabs = dabs(x(i)) if (xabs .gt. rdwarf .and. xabs .lt. agiant) go to 70 if (xabs .le. rdwarf) go to 30 c c sum for large components. c if (xabs .le. x1max) go to 10 s1 = one + s1*(x1max/xabs)**2 x1max = xabs go to 20 10 continue s1 = s1 + (xabs/x1max)**2 20 continue go to 60 30 continue c c sum for small components. c if (xabs .le. x3max) go to 40 s3 = one + s3*(x3max/xabs)**2 x3max = xabs go to 50 40 continue if (xabs .ne. zero) s3 = s3 + (xabs/x3max)**2 50 continue 60 continue go to 80 70 continue c c sum for intermediate components. c s2 = s2 + xabs**2 80 continue 90 continue c c calculation of norm. c if (s1 .eq. zero) go to 100 enorm = x1max*dsqrt(s1+(s2/x1max)/x1max) go to 130 100 continue if (s2 .eq. zero) go to 110 if (s2 .ge. x3max) * enorm = dsqrt(s2*(one+(x3max/s2)*(x3max*s3))) if (s2 .lt. x3max) * enorm = dsqrt(x3max*((s2/x3max)+(x3max*s3))) go to 120 110 continue enorm = x3max*dsqrt(s3) 120 continue 130 continue return c c last card of function enorm. c end PyBDSF-1.10.1/src/minpack/ex/000077500000000000000000000000001420247104600154465ustar00rootroot00000000000000PyBDSF-1.10.1/src/minpack/ex/file01000066400000000000000000000105131420247104600164510ustar00rootroot00000000000000 REAL FUNCTION SPMPAR(I) INTEGER I C ********** C C FUNCTION SPMPAR C C THIS FUNCTION PROVIDES SINGLE PRECISION MACHINE PARAMETERS C WHEN THE APPROPRIATE SET OF DATA STATEMENTS IS ACTIVATED (BY C REMOVING THE C FROM COLUMN 1) AND ALL OTHER DATA STATEMENTS ARE C RENDERED INACTIVE. MOST OF THE PARAMETER VALUES WERE OBTAINED C FROM THE CORRESPONDING BELL LABORATORIES PORT LIBRARY FUNCTION. C C THE FUNCTION STATEMENT IS C C REAL FUNCTION SPMPAR(I) C C WHERE C C I IS AN INTEGER INPUT VARIABLE SET TO 1, 2, OR 3 WHICH C SELECTS THE DESIRED MACHINE PARAMETER. IF THE MACHINE HAS C T BASE B DIGITS AND ITS SMALLEST AND LARGEST EXPONENTS ARE C EMIN AND EMAX, RESPECTIVELY, THEN THESE PARAMETERS ARE C C SPMPAR(1) = B**(1 - T), THE MACHINE PRECISION, C C SPMPAR(2) = B**(EMIN - 1), THE SMALLEST MAGNITUDE, C C SPMPAR(3) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER MCHEPS(2) INTEGER MINMAG(2) INTEGER MAXMAG(2) REAL RMACH(3) EQUIVALENCE (RMACH(1),MCHEPS(1)) EQUIVALENCE (RMACH(2),MINMAG(1)) EQUIVALENCE (RMACH(3),MAXMAG(1)) C C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES, C THE AMDAHL 470/V6, THE ICL 2900, THE ITEL AS/6, C THE XEROX SIGMA 5/7/9 AND THE SEL SYSTEMS 85/86. C DATA RMACH(1) / Z3C100000 / DATA RMACH(2) / Z00100000 / DATA RMACH(3) / Z7FFFFFFF / C C MACHINE CONSTANTS FOR THE HONEYWELL 600/6000 SERIES. C C DATA RMACH(1) / O716400000000 / C DATA RMACH(2) / O402400000000 / C DATA RMACH(3) / O376777777777 / C C MACHINE CONSTANTS FOR THE CDC 6000/7000 SERIES. C C DATA RMACH(1) / 16414000000000000000B / C DATA RMACH(2) / 00014000000000000000B / C DATA RMACH(3) / 37767777777777777777B / C C MACHINE CONSTANTS FOR THE PDP-10 (KA OR KI PROCESSOR). C C DATA RMACH(1) / "147400000000 / C DATA RMACH(2) / "000400000000 / C DATA RMACH(3) / "377777777777 / C C MACHINE CONSTANTS FOR THE PDP-11 FORTRAN SUPPORTING C 32-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). C C DATA MCHEPS(1) / 889192448 / C DATA MINMAG(1) / 8388608 / C DATA MAXMAG(1) / 2147483647 / C C DATA RMACH(1) / O06500000000 / C DATA RMACH(2) / O00040000000 / C DATA RMACH(3) / O17777777777 / C C MACHINE CONSTANTS FOR THE PDP-11 FORTRAN SUPPORTING C 16-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). C C DATA MCHEPS(1),MCHEPS(2) / 13568, 0 / C DATA MINMAG(1),MINMAG(2) / 128, 0 / C DATA MAXMAG(1),MAXMAG(2) / 32767, -1 / C C DATA MCHEPS(1),MCHEPS(2) / O032400, O000000 / C DATA MINMAG(1),MINMAG(2) / O000200, O000000 / C DATA MAXMAG(1),MAXMAG(2) / O077777, O177777 / C C MACHINE CONSTANTS FOR THE BURROUGHS 5700/6700/7700 SYSTEMS. C C DATA RMACH(1) / O1301000000000000 / C DATA RMACH(2) / O1771000000000000 / C DATA RMACH(3) / O0777777777777777 / C C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM. C C DATA RMACH(1) / Z4EA800000 / C DATA RMACH(2) / Z400800000 / C DATA RMACH(3) / Z5FFFFFFFF / C C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. C C DATA RMACH(1) / O147400000000 / C DATA RMACH(2) / O000400000000 / C DATA RMACH(3) / O377777777777 / C C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200. C C NOTE - IT MAY BE APPROPRIATE TO INCLUDE THE FOLLOWING CARD - C STATIC RMACH(3) C C DATA MINMAG/20K,0/,MAXMAG/77777K,177777K/ C DATA MCHEPS/36020K,0/ C C MACHINE CONSTANTS FOR THE HARRIS 220. C C DATA MCHEPS(1) / '20000000, '00000353 / C DATA MINMAG(1) / '20000000, '00000201 / C DATA MAXMAG(1) / '37777777, '00000177 / C C MACHINE CONSTANTS FOR THE CRAY-1. C C DATA RMACH(1) / 0377224000000000000000B / C DATA RMACH(2) / 0200034000000000000000B / C DATA RMACH(3) / 0577777777777777777776B / C C MACHINE CONSTANTS FOR THE PRIME 400. C C DATA MCHEPS(1) / :10000000153 / C DATA MINMAG(1) / :10000000000 / C DATA MAXMAG(1) / :17777777777 / C C MACHINE CONSTANTS FOR THE VAX-11. C C DATA MCHEPS(1) / 13568 / C DATA MINMAG(1) / 128 / C DATA MAXMAG(1) / -32769 / C SPMPAR = RMACH(I) RETURN C C LAST CARD OF FUNCTION SPMPAR. C END PyBDSF-1.10.1/src/minpack/ex/file02000066400000000000000000004561071420247104600164670ustar00rootroot00000000000000 SUBROUTINE CHKDER(M,N,X,FVEC,FJAC,LDFJAC,XP,FVECP,MODE,ERR) INTEGER M,N,LDFJAC,MODE REAL X(N),FVEC(M),FJAC(LDFJAC,N),XP(N),FVECP(M),ERR(M) C ********** C C SUBROUTINE CHKDER C C THIS SUBROUTINE CHECKS THE GRADIENTS OF M NONLINEAR FUNCTIONS C IN N VARIABLES, EVALUATED AT A POINT X, FOR CONSISTENCY WITH C THE FUNCTIONS THEMSELVES. THE USER MUST CALL CHKDER TWICE, C FIRST WITH MODE = 1 AND THEN WITH MODE = 2. C C MODE = 1. ON INPUT, X MUST CONTAIN THE POINT OF EVALUATION. C ON OUTPUT, XP IS SET TO A NEIGHBORING POINT. C C MODE = 2. ON INPUT, FVEC MUST CONTAIN THE FUNCTIONS AND THE C ROWS OF FJAC MUST CONTAIN THE GRADIENTS C OF THE RESPECTIVE FUNCTIONS EACH EVALUATED C AT X, AND FVECP MUST CONTAIN THE FUNCTIONS C EVALUATED AT XP. C ON OUTPUT, ERR CONTAINS MEASURES OF CORRECTNESS OF C THE RESPECTIVE GRADIENTS. C C THE SUBROUTINE DOES NOT PERFORM RELIABLY IF CANCELLATION OR C ROUNDING ERRORS CAUSE A SEVERE LOSS OF SIGNIFICANCE IN THE C EVALUATION OF A FUNCTION. THEREFORE, NONE OF THE COMPONENTS C OF X SHOULD BE UNUSUALLY SMALL (IN PARTICULAR, ZERO) OR ANY C OTHER VALUE WHICH MAY CAUSE LOSS OF SIGNIFICANCE. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE CHKDER(M,N,X,FVEC,FJAC,LDFJAC,XP,FVECP,MODE,ERR) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN ARRAY OF LENGTH M. ON INPUT WHEN MODE = 2, C FVEC MUST CONTAIN THE FUNCTIONS EVALUATED AT X. C C FJAC IS AN M BY N ARRAY. ON INPUT WHEN MODE = 2, C THE ROWS OF FJAC MUST CONTAIN THE GRADIENTS OF C THE RESPECTIVE FUNCTIONS EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER INPUT PARAMETER NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C XP IS AN ARRAY OF LENGTH N. ON OUTPUT WHEN MODE = 1, C XP IS SET TO A NEIGHBORING POINT OF X. C C FVECP IS AN ARRAY OF LENGTH M. ON INPUT WHEN MODE = 2, C FVECP MUST CONTAIN THE FUNCTIONS EVALUATED AT XP. C C MODE IS AN INTEGER INPUT VARIABLE SET TO 1 ON THE FIRST CALL C AND 2 ON THE SECOND. OTHER VALUES OF MODE ARE EQUIVALENT C TO MODE = 1. C C ERR IS AN ARRAY OF LENGTH M. ON OUTPUT WHEN MODE = 2, C ERR CONTAINS MEASURES OF CORRECTNESS OF THE RESPECTIVE C GRADIENTS. IF THERE IS NO SEVERE LOSS OF SIGNIFICANCE, C THEN IF ERR(I) IS 1.0 THE I-TH GRADIENT IS CORRECT, C WHILE IF ERR(I) IS 0.0 THE I-TH GRADIENT IS INCORRECT. C FOR VALUES OF ERR BETWEEN 0.0 AND 1.0, THE CATEGORIZATION C IS LESS CERTAIN. IN GENERAL, A VALUE OF ERR(I) GREATER C THAN 0.5 INDICATES THAT THE I-TH GRADIENT IS PROBABLY C CORRECT, WHILE A VALUE OF ERR(I) LESS THAN 0.5 INDICATES C THAT THE I-TH GRADIENT IS PROBABLY INCORRECT. C C SUBPROGRAMS CALLED C C MINPACK SUPPLIED ... SPMPAR C C FORTRAN SUPPLIED ... ABS,ALOG10,SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J REAL EPS,EPSF,EPSLOG,EPSMCH,FACTOR,ONE,TEMP,ZERO REAL SPMPAR DATA FACTOR,ONE,ZERO /1.0E2,1.0E0,0.0E0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = SPMPAR(1) C EPS = SQRT(EPSMCH) C IF (MODE .EQ. 2) GO TO 20 C C MODE = 1. C DO 10 J = 1, N TEMP = EPS*ABS(X(J)) IF (TEMP .EQ. ZERO) TEMP = EPS XP(J) = X(J) + TEMP 10 CONTINUE GO TO 70 20 CONTINUE C C MODE = 2. C EPSF = FACTOR*EPSMCH EPSLOG = ALOG10(EPS) DO 30 I = 1, M ERR(I) = ZERO 30 CONTINUE DO 50 J = 1, N TEMP = ABS(X(J)) IF (TEMP .EQ. ZERO) TEMP = ONE DO 40 I = 1, M ERR(I) = ERR(I) + TEMP*FJAC(I,J) 40 CONTINUE 50 CONTINUE DO 60 I = 1, M TEMP = ONE IF (FVEC(I) .NE. ZERO .AND. FVECP(I) .NE. ZERO * .AND. ABS(FVECP(I)-FVEC(I)) .GE. EPSF*ABS(FVEC(I))) * TEMP = EPS*ABS((FVECP(I)-FVEC(I))/EPS-ERR(I)) * /(ABS(FVEC(I)) + ABS(FVECP(I))) ERR(I) = ONE IF (TEMP .GT. EPSMCH .AND. TEMP .LT. EPS) * ERR(I) = (ALOG10(TEMP) - EPSLOG)/EPSLOG IF (TEMP .GE. EPS) ERR(I) = ZERO 60 CONTINUE 70 CONTINUE C RETURN C C LAST CARD OF SUBROUTINE CHKDER. C END SUBROUTINE DOGLEG(N,R,LR,DIAG,QTB,DELTA,X,WA1,WA2) INTEGER N,LR REAL DELTA REAL R(LR),DIAG(N),QTB(N),X(N),WA1(N),WA2(N) C ********** C C SUBROUTINE DOGLEG C C GIVEN AN M BY N MATRIX A, AN N BY N NONSINGULAR DIAGONAL C MATRIX D, AN M-VECTOR B, AND A POSITIVE NUMBER DELTA, THE C PROBLEM IS TO DETERMINE THE CONVEX COMBINATION X OF THE C GAUSS-NEWTON AND SCALED GRADIENT DIRECTIONS THAT MINIMIZES C (A*X - B) IN THE LEAST SQUARES SENSE, SUBJECT TO THE C RESTRICTION THAT THE EUCLIDEAN NORM OF D*X BE AT MOST DELTA. C C THIS SUBROUTINE COMPLETES THE SOLUTION OF THE PROBLEM C IF IT IS PROVIDED WITH THE NECESSARY INFORMATION FROM THE C QR FACTORIZATION OF A. THAT IS, IF A = Q*R, WHERE Q HAS C ORTHOGONAL COLUMNS AND R IS AN UPPER TRIANGULAR MATRIX, C THEN DOGLEG EXPECTS THE FULL UPPER TRIANGLE OF R AND C THE FIRST N COMPONENTS OF (Q TRANSPOSE)*B. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE DOGLEG(N,R,LR,DIAG,QTB,DELTA,X,WA1,WA2) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE ORDER OF R. C C R IS AN INPUT ARRAY OF LENGTH LR WHICH MUST CONTAIN THE UPPER C TRIANGULAR MATRIX R STORED BY ROWS. C C LR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(N+1))/2. C C DIAG IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE C DIAGONAL ELEMENTS OF THE MATRIX D. C C QTB IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE FIRST C N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*B. C C DELTA IS A POSITIVE INPUT VARIABLE WHICH SPECIFIES AN UPPER C BOUND ON THE EUCLIDEAN NORM OF D*X. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE DESIRED C CONVEX COMBINATION OF THE GAUSS-NEWTON DIRECTION AND THE C SCALED GRADIENT DIRECTION. C C WA1 AND WA2 ARE WORK ARRAYS OF LENGTH N. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... SPMPAR,ENORM C C FORTRAN-SUPPLIED ... ABS,AMAX1,AMIN1,SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,JJ,JP1,K,L REAL ALPHA,BNORM,EPSMCH,GNORM,ONE,QNORM,SGNORM,SUM,TEMP,ZERO REAL SPMPAR,ENORM DATA ONE,ZERO /1.0E0,0.0E0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = SPMPAR(1) C C FIRST, CALCULATE THE GAUSS-NEWTON DIRECTION. C JJ = (N*(N + 1))/2 + 1 DO 50 K = 1, N J = N - K + 1 JP1 = J + 1 JJ = JJ - K L = JJ + 1 SUM = ZERO IF (N .LT. JP1) GO TO 20 DO 10 I = JP1, N SUM = SUM + R(L)*X(I) L = L + 1 10 CONTINUE 20 CONTINUE TEMP = R(JJ) IF (TEMP .NE. ZERO) GO TO 40 L = J DO 30 I = 1, J TEMP = AMAX1(TEMP,ABS(R(L))) L = L + N - I 30 CONTINUE TEMP = EPSMCH*TEMP IF (TEMP .EQ. ZERO) TEMP = EPSMCH 40 CONTINUE X(J) = (QTB(J) - SUM)/TEMP 50 CONTINUE C C TEST WHETHER THE GAUSS-NEWTON DIRECTION IS ACCEPTABLE. C DO 60 J = 1, N WA1(J) = ZERO WA2(J) = DIAG(J)*X(J) 60 CONTINUE QNORM = ENORM(N,WA2) IF (QNORM .LE. DELTA) GO TO 140 C C THE GAUSS-NEWTON DIRECTION IS NOT ACCEPTABLE. C NEXT, CALCULATE THE SCALED GRADIENT DIRECTION. C L = 1 DO 80 J = 1, N TEMP = QTB(J) DO 70 I = J, N WA1(I) = WA1(I) + R(L)*TEMP L = L + 1 70 CONTINUE WA1(J) = WA1(J)/DIAG(J) 80 CONTINUE C C CALCULATE THE NORM OF THE SCALED GRADIENT AND TEST FOR C THE SPECIAL CASE IN WHICH THE SCALED GRADIENT IS ZERO. C GNORM = ENORM(N,WA1) SGNORM = ZERO ALPHA = DELTA/QNORM IF (GNORM .EQ. ZERO) GO TO 120 C C CALCULATE THE POINT ALONG THE SCALED GRADIENT C AT WHICH THE QUADRATIC IS MINIMIZED. C DO 90 J = 1, N WA1(J) = (WA1(J)/GNORM)/DIAG(J) 90 CONTINUE L = 1 DO 110 J = 1, N SUM = ZERO DO 100 I = J, N SUM = SUM + R(L)*WA1(I) L = L + 1 100 CONTINUE WA2(J) = SUM 110 CONTINUE TEMP = ENORM(N,WA2) SGNORM = (GNORM/TEMP)/TEMP C C TEST WHETHER THE SCALED GRADIENT DIRECTION IS ACCEPTABLE. C ALPHA = ZERO IF (SGNORM .GE. DELTA) GO TO 120 C C THE SCALED GRADIENT DIRECTION IS NOT ACCEPTABLE. C FINALLY, CALCULATE THE POINT ALONG THE DOGLEG C AT WHICH THE QUADRATIC IS MINIMIZED. C BNORM = ENORM(N,QTB) TEMP = (BNORM/GNORM)*(BNORM/QNORM)*(SGNORM/DELTA) TEMP = TEMP - (DELTA/QNORM)*(SGNORM/DELTA)**2 * + SQRT((TEMP-(DELTA/QNORM))**2 * +(ONE-(DELTA/QNORM)**2)*(ONE-(SGNORM/DELTA)**2)) ALPHA = ((DELTA/QNORM)*(ONE - (SGNORM/DELTA)**2))/TEMP 120 CONTINUE C C FORM APPROPRIATE CONVEX COMBINATION OF THE GAUSS-NEWTON C DIRECTION AND THE SCALED GRADIENT DIRECTION. C TEMP = (ONE - ALPHA)*AMIN1(SGNORM,DELTA) DO 130 J = 1, N X(J) = TEMP*WA1(J) + ALPHA*X(J) 130 CONTINUE 140 CONTINUE RETURN C C LAST CARD OF SUBROUTINE DOGLEG. C END REAL FUNCTION ENORM(N,X) INTEGER N REAL X(N) C ********** C C FUNCTION ENORM C C GIVEN AN N-VECTOR X, THIS FUNCTION CALCULATES THE C EUCLIDEAN NORM OF X. C C THE EUCLIDEAN NORM IS COMPUTED BY ACCUMULATING THE SUM OF C SQUARES IN THREE DIFFERENT SUMS. THE SUMS OF SQUARES FOR THE C SMALL AND LARGE COMPONENTS ARE SCALED SO THAT NO OVERFLOWS C OCCUR. NON-DESTRUCTIVE UNDERFLOWS ARE PERMITTED. UNDERFLOWS C AND OVERFLOWS DO NOT OCCUR IN THE COMPUTATION OF THE UNSCALED C SUM OF SQUARES FOR THE INTERMEDIATE COMPONENTS. C THE DEFINITIONS OF SMALL, INTERMEDIATE AND LARGE COMPONENTS C DEPEND ON TWO CONSTANTS, RDWARF AND RGIANT. THE MAIN C RESTRICTIONS ON THESE CONSTANTS ARE THAT RDWARF**2 NOT C UNDERFLOW AND RGIANT**2 NOT OVERFLOW. THE CONSTANTS C GIVEN HERE ARE SUITABLE FOR EVERY KNOWN COMPUTER. C C THE FUNCTION STATEMENT IS C C REAL FUNCTION ENORM(N,X) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN INPUT ARRAY OF LENGTH N. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... ABS,SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I REAL AGIANT,FLOATN,ONE,RDWARF,RGIANT,S1,S2,S3,XABS,X1MAX,X3MAX, * ZERO DATA ONE,ZERO,RDWARF,RGIANT /1.0E0,0.0E0,3.834E-20,1.304E19/ S1 = ZERO S2 = ZERO S3 = ZERO X1MAX = ZERO X3MAX = ZERO FLOATN = N AGIANT = RGIANT/FLOATN DO 90 I = 1, N XABS = ABS(X(I)) IF (XABS .GT. RDWARF .AND. XABS .LT. AGIANT) GO TO 70 IF (XABS .LE. RDWARF) GO TO 30 C C SUM FOR LARGE COMPONENTS. C IF (XABS .LE. X1MAX) GO TO 10 S1 = ONE + S1*(X1MAX/XABS)**2 X1MAX = XABS GO TO 20 10 CONTINUE S1 = S1 + (XABS/X1MAX)**2 20 CONTINUE GO TO 60 30 CONTINUE C C SUM FOR SMALL COMPONENTS. C IF (XABS .LE. X3MAX) GO TO 40 S3 = ONE + S3*(X3MAX/XABS)**2 X3MAX = XABS GO TO 50 40 CONTINUE IF (XABS .NE. ZERO) S3 = S3 + (XABS/X3MAX)**2 50 CONTINUE 60 CONTINUE GO TO 80 70 CONTINUE C C SUM FOR INTERMEDIATE COMPONENTS. C S2 = S2 + XABS**2 80 CONTINUE 90 CONTINUE C C CALCULATION OF NORM. C IF (S1 .EQ. ZERO) GO TO 100 ENORM = X1MAX*SQRT(S1+(S2/X1MAX)/X1MAX) GO TO 130 100 CONTINUE IF (S2 .EQ. ZERO) GO TO 110 IF (S2 .GE. X3MAX) * ENORM = SQRT(S2*(ONE+(X3MAX/S2)*(X3MAX*S3))) IF (S2 .LT. X3MAX) * ENORM = SQRT(X3MAX*((S2/X3MAX)+(X3MAX*S3))) GO TO 120 110 CONTINUE ENORM = X3MAX*SQRT(S3) 120 CONTINUE 130 CONTINUE RETURN C C LAST CARD OF FUNCTION ENORM. C END SUBROUTINE FDJAC1(FCN,N,X,FVEC,FJAC,LDFJAC,IFLAG,ML,MU,EPSFCN, * WA1,WA2) INTEGER N,LDFJAC,IFLAG,ML,MU REAL EPSFCN REAL X(N),FVEC(N),FJAC(LDFJAC,N),WA1(N),WA2(N) C ********** C C SUBROUTINE FDJAC1 C C THIS SUBROUTINE COMPUTES A FORWARD-DIFFERENCE APPROXIMATION C TO THE N BY N JACOBIAN MATRIX ASSOCIATED WITH A SPECIFIED C PROBLEM OF N FUNCTIONS IN N VARIABLES. IF THE JACOBIAN HAS C A BANDED FORM, THEN FUNCTION EVALUATIONS ARE SAVED BY ONLY C APPROXIMATING THE NONZERO TERMS. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE FDJAC1(FCN,N,X,FVEC,FJAC,LDFJAC,IFLAG,ML,MU,EPSFCN, C WA1,WA2) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(N,X,FVEC,IFLAG) C INTEGER N,IFLAG C REAL X(N),FVEC(N) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF FDJAC1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS AND VARIABLES. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE C FUNCTIONS EVALUATED AT X. C C FJAC IS AN OUTPUT N BY N ARRAY WHICH CONTAINS THE C APPROXIMATION TO THE JACOBIAN MATRIX EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C IFLAG IS AN INTEGER VARIABLE WHICH CAN BE USED TO TERMINATE C THE EXECUTION OF FDJAC1. SEE DESCRIPTION OF FCN. C C ML IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES C THE NUMBER OF SUBDIAGONALS WITHIN THE BAND OF THE C JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET C ML TO AT LEAST N - 1. C C EPSFCN IS AN INPUT VARIABLE USED IN DETERMINING A SUITABLE C STEP LENGTH FOR THE FORWARD-DIFFERENCE APPROXIMATION. THIS C APPROXIMATION ASSUMES THAT THE RELATIVE ERRORS IN THE C FUNCTIONS ARE OF THE ORDER OF EPSFCN. IF EPSFCN IS LESS C THAN THE MACHINE PRECISION, IT IS ASSUMED THAT THE RELATIVE C ERRORS IN THE FUNCTIONS ARE OF THE ORDER OF THE MACHINE C PRECISION. C C MU IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES C THE NUMBER OF SUPERDIAGONALS WITHIN THE BAND OF THE C JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET C MU TO AT LEAST N - 1. C C WA1 AND WA2 ARE WORK ARRAYS OF LENGTH N. IF ML + MU + 1 IS AT C LEAST N, THEN THE JACOBIAN IS CONSIDERED DENSE, AND WA2 IS C NOT REFERENCED. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... SPMPAR C C FORTRAN-SUPPLIED ... ABS,AMAX1,SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,K,MSUM REAL EPS,EPSMCH,H,TEMP,ZERO REAL SPMPAR DATA ZERO /0.0E0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = SPMPAR(1) C EPS = SQRT(AMAX1(EPSFCN,EPSMCH)) MSUM = ML + MU + 1 IF (MSUM .LT. N) GO TO 40 C C COMPUTATION OF DENSE APPROXIMATE JACOBIAN. C DO 20 J = 1, N TEMP = X(J) H = EPS*ABS(TEMP) IF (H .EQ. ZERO) H = EPS X(J) = TEMP + H CALL FCN(N,X,WA1,IFLAG) IF (IFLAG .LT. 0) GO TO 30 X(J) = TEMP DO 10 I = 1, N FJAC(I,J) = (WA1(I) - FVEC(I))/H 10 CONTINUE 20 CONTINUE 30 CONTINUE GO TO 110 40 CONTINUE C C COMPUTATION OF BANDED APPROXIMATE JACOBIAN. C DO 90 K = 1, MSUM DO 60 J = K, N, MSUM WA2(J) = X(J) H = EPS*ABS(WA2(J)) IF (H .EQ. ZERO) H = EPS X(J) = WA2(J) + H 60 CONTINUE CALL FCN(N,X,WA1,IFLAG) IF (IFLAG .LT. 0) GO TO 100 DO 80 J = K, N, MSUM X(J) = WA2(J) H = EPS*ABS(WA2(J)) IF (H .EQ. ZERO) H = EPS DO 70 I = 1, N FJAC(I,J) = ZERO IF (I .GE. J - MU .AND. I .LE. J + ML) * FJAC(I,J) = (WA1(I) - FVEC(I))/H 70 CONTINUE 80 CONTINUE 90 CONTINUE 100 CONTINUE 110 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FDJAC1. C END SUBROUTINE FDJAC2(FCN,M,N,X,FVEC,FJAC,LDFJAC,IFLAG,EPSFCN,WA) INTEGER M,N,LDFJAC,IFLAG REAL EPSFCN REAL X(N),FVEC(M),FJAC(LDFJAC,N),WA(M) C ********** C C SUBROUTINE FDJAC2 C C THIS SUBROUTINE COMPUTES A FORWARD-DIFFERENCE APPROXIMATION C TO THE M BY N JACOBIAN MATRIX ASSOCIATED WITH A SPECIFIED C PROBLEM OF M FUNCTIONS IN N VARIABLES. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE FDJAC2(FCN,M,N,X,FVEC,FJAC,LDFJAC,IFLAG,EPSFCN,WA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,IFLAG) C INTEGER M,N,IFLAG C REAL X(N),FVEC(M) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF FDJAC2. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN INPUT ARRAY OF LENGTH M WHICH MUST CONTAIN THE C FUNCTIONS EVALUATED AT X. C C FJAC IS AN OUTPUT M BY N ARRAY WHICH CONTAINS THE C APPROXIMATION TO THE JACOBIAN MATRIX EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C IFLAG IS AN INTEGER VARIABLE WHICH CAN BE USED TO TERMINATE C THE EXECUTION OF FDJAC2. SEE DESCRIPTION OF FCN. C C EPSFCN IS AN INPUT VARIABLE USED IN DETERMINING A SUITABLE C STEP LENGTH FOR THE FORWARD-DIFFERENCE APPROXIMATION. THIS C APPROXIMATION ASSUMES THAT THE RELATIVE ERRORS IN THE C FUNCTIONS ARE OF THE ORDER OF EPSFCN. IF EPSFCN IS LESS C THAN THE MACHINE PRECISION, IT IS ASSUMED THAT THE RELATIVE C ERRORS IN THE FUNCTIONS ARE OF THE ORDER OF THE MACHINE C PRECISION. C C WA IS A WORK ARRAY OF LENGTH M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... SPMPAR C C FORTRAN-SUPPLIED ... ABS,AMAX1,SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J REAL EPS,EPSMCH,H,TEMP,ZERO REAL SPMPAR DATA ZERO /0.0E0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = SPMPAR(1) C EPS = SQRT(AMAX1(EPSFCN,EPSMCH)) DO 20 J = 1, N TEMP = X(J) H = EPS*ABS(TEMP) IF (H .EQ. ZERO) H = EPS X(J) = TEMP + H CALL FCN(M,N,X,WA,IFLAG) IF (IFLAG .LT. 0) GO TO 30 X(J) = TEMP DO 10 I = 1, M FJAC(I,J) = (WA(I) - FVEC(I))/H 10 CONTINUE 20 CONTINUE 30 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FDJAC2. C END SUBROUTINE HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN,DIAG, * MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC,R,LR, * QTF,WA1,WA2,WA3,WA4) INTEGER N,MAXFEV,ML,MU,MODE,NPRINT,INFO,NFEV,LDFJAC,LR REAL XTOL,EPSFCN,FACTOR REAL X(N),FVEC(N),DIAG(N),FJAC(LDFJAC,N),R(LR),QTF(N),WA1(N), * WA2(N),WA3(N),WA4(N) EXTERNAL FCN C ********** C C SUBROUTINE HYBRD C C THE PURPOSE OF HYBRD IS TO FIND A ZERO OF A SYSTEM OF C N NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION C OF THE POWELL HYBRID METHOD. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS. THE JACOBIAN IS C THEN CALCULATED BY A FORWARD-DIFFERENCE APPROXIMATION. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN, C DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,FJAC, C LDFJAC,R,LR,QTF,WA1,WA2,WA3,WA4) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(N,X,FVEC,IFLAG) C INTEGER N,IFLAG C REAL X(N),FVEC(N) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C --------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF HYBRD. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS AND VARIABLES. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C XTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE C ITERATES IS AT MOST XTOL. C C MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION C OCCURS WHEN THE NUMBER OF CALLS TO FCN IS AT LEAST MAXFEV C BY THE END OF AN ITERATION. C C ML IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES C THE NUMBER OF SUBDIAGONALS WITHIN THE BAND OF THE C JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET C ML TO AT LEAST N - 1. C C MU IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES C THE NUMBER OF SUPERDIAGONALS WITHIN THE BAND OF THE C JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET C MU TO AT LEAST N - 1. C C EPSFCN IS AN INPUT VARIABLE USED IN DETERMINING A SUITABLE C STEP LENGTH FOR THE FORWARD-DIFFERENCE APPROXIMATION. THIS C APPROXIMATION ASSUMES THAT THE RELATIVE ERRORS IN THE C FUNCTIONS ARE OF THE ORDER OF EPSFCN. IF EPSFCN IS LESS C THAN THE MACHINE PRECISION, IT IS ASSUMED THAT THE RELATIVE C ERRORS IN THE FUNCTIONS ARE OF THE ORDER OF THE MACHINE C PRECISION. C C DIAG IS AN ARRAY OF LENGTH N. IF MODE = 1 (SEE C BELOW), DIAG IS INTERNALLY SET. IF MODE = 2, DIAG C MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS C MULTIPLICATIVE SCALE FACTORS FOR THE VARIABLES. C C MODE IS AN INTEGER INPUT VARIABLE. IF MODE = 1, THE C VARIABLES WILL BE SCALED INTERNALLY. IF MODE = 2, C THE SCALING IS SPECIFIED BY THE INPUT DIAG. OTHER C VALUES OF MODE ARE EQUIVALENT TO MODE = 1. C C FACTOR IS A POSITIVE INPUT VARIABLE USED IN DETERMINING THE C INITIAL STEP BOUND. THIS BOUND IS SET TO THE PRODUCT OF C FACTOR AND THE EUCLIDEAN NORM OF DIAG*X IF NONZERO, OR ELSE C TO FACTOR ITSELF. IN MOST CASES FACTOR SHOULD LIE IN THE C INTERVAL (.1,100.). 100. IS A GENERALLY RECOMMENDED VALUE. C C NPRINT IS AN INTEGER INPUT VARIABLE THAT ENABLES CONTROLLED C PRINTING OF ITERATES IF IT IS POSITIVE. IN THIS CASE, C FCN IS CALLED WITH IFLAG = 0 AT THE BEGINNING OF THE FIRST C ITERATION AND EVERY NPRINT ITERATIONS THEREAFTER AND C IMMEDIATELY PRIOR TO RETURN, WITH X AND FVEC AVAILABLE C FOR PRINTING. IF NPRINT IS NOT POSITIVE, NO SPECIAL CALLS C OF FCN WITH IFLAG = 0 ARE MADE. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 RELATIVE ERROR BETWEEN TWO CONSECUTIVE ITERATES C IS AT MOST XTOL. C C INFO = 2 NUMBER OF CALLS TO FCN HAS REACHED OR EXCEEDED C MAXFEV. C C INFO = 3 XTOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 4 ITERATION IS NOT MAKING GOOD PROGRESS, AS C MEASURED BY THE IMPROVEMENT FROM THE LAST C FIVE JACOBIAN EVALUATIONS. C C INFO = 5 ITERATION IS NOT MAKING GOOD PROGRESS, AS C MEASURED BY THE IMPROVEMENT FROM THE LAST C TEN ITERATIONS. C C NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN. C C FJAC IS AN OUTPUT N BY N ARRAY WHICH CONTAINS THE C ORTHOGONAL MATRIX Q PRODUCED BY THE QR FACTORIZATION C OF THE FINAL APPROXIMATE JACOBIAN. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C R IS AN OUTPUT ARRAY OF LENGTH LR WHICH CONTAINS THE C UPPER TRIANGULAR MATRIX PRODUCED BY THE QR FACTORIZATION C OF THE FINAL APPROXIMATE JACOBIAN, STORED ROWWISE. C C LR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(N+1))/2. C C QTF IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE VECTOR (Q TRANSPOSE)*FVEC. C C WA1, WA2, WA3, AND WA4 ARE WORK ARRAYS OF LENGTH N. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DOGLEG,SPMPAR,ENORM,FDJAC1, C QFORM,QRFAC,R1MPYQ,R1UPDT C C FORTRAN-SUPPLIED ... ABS,AMAX1,AMIN1,MIN0,MOD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IFLAG,ITER,J,JM1,L,MSUM,NCFAIL,NCSUC,NSLOW1,NSLOW2 INTEGER IWA(1) LOGICAL JEVAL,SING REAL ACTRED,DELTA,EPSMCH,FNORM,FNORM1,ONE,PNORM,PRERED,P1,P5, * P001,P0001,RATIO,SUM,TEMP,XNORM,ZERO REAL SPMPAR,ENORM DATA ONE,P1,P5,P001,P0001,ZERO * /1.0E0,1.0E-1,5.0E-1,1.0E-3,1.0E-4,0.0E0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = SPMPAR(1) C INFO = 0 IFLAG = 0 NFEV = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. XTOL .LT. ZERO .OR. MAXFEV .LE. 0 * .OR. ML .LT. 0 .OR. MU .LT. 0 .OR. FACTOR .LE. ZERO * .OR. LDFJAC .LT. N .OR. LR .LT. (N*(N + 1))/2) GO TO 300 IF (MODE .NE. 2) GO TO 20 DO 10 J = 1, N IF (DIAG(J) .LE. ZERO) GO TO 300 10 CONTINUE 20 CONTINUE C C EVALUATE THE FUNCTION AT THE STARTING POINT C AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(N,X,FVEC,IFLAG) NFEV = 1 IF (IFLAG .LT. 0) GO TO 300 FNORM = ENORM(N,FVEC) C C DETERMINE THE NUMBER OF CALLS TO FCN NEEDED TO COMPUTE C THE JACOBIAN MATRIX. C MSUM = MIN0(ML+MU+1,N) C C INITIALIZE ITERATION COUNTER AND MONITORS. C ITER = 1 NCSUC = 0 NCFAIL = 0 NSLOW1 = 0 NSLOW2 = 0 C C BEGINNING OF THE OUTER LOOP. C 30 CONTINUE JEVAL = .TRUE. C C CALCULATE THE JACOBIAN MATRIX. C IFLAG = 2 CALL FDJAC1(FCN,N,X,FVEC,FJAC,LDFJAC,IFLAG,ML,MU,EPSFCN,WA1, * WA2) NFEV = NFEV + MSUM IF (IFLAG .LT. 0) GO TO 300 C C COMPUTE THE QR FACTORIZATION OF THE JACOBIAN. C CALL QRFAC(N,N,FJAC,LDFJAC,.FALSE.,IWA,1,WA1,WA2,WA3) C C ON THE FIRST ITERATION AND IF MODE IS 1, SCALE ACCORDING C TO THE NORMS OF THE COLUMNS OF THE INITIAL JACOBIAN. C IF (ITER .NE. 1) GO TO 70 IF (MODE .EQ. 2) GO TO 50 DO 40 J = 1, N DIAG(J) = WA2(J) IF (WA2(J) .EQ. ZERO) DIAG(J) = ONE 40 CONTINUE 50 CONTINUE C C ON THE FIRST ITERATION, CALCULATE THE NORM OF THE SCALED X C AND INITIALIZE THE STEP BOUND DELTA. C DO 60 J = 1, N WA3(J) = DIAG(J)*X(J) 60 CONTINUE XNORM = ENORM(N,WA3) DELTA = FACTOR*XNORM IF (DELTA .EQ. ZERO) DELTA = FACTOR 70 CONTINUE C C FORM (Q TRANSPOSE)*FVEC AND STORE IN QTF. C DO 80 I = 1, N QTF(I) = FVEC(I) 80 CONTINUE DO 120 J = 1, N IF (FJAC(J,J) .EQ. ZERO) GO TO 110 SUM = ZERO DO 90 I = J, N SUM = SUM + FJAC(I,J)*QTF(I) 90 CONTINUE TEMP = -SUM/FJAC(J,J) DO 100 I = J, N QTF(I) = QTF(I) + FJAC(I,J)*TEMP 100 CONTINUE 110 CONTINUE 120 CONTINUE C C COPY THE TRIANGULAR FACTOR OF THE QR FACTORIZATION INTO R. C SING = .FALSE. DO 150 J = 1, N L = J JM1 = J - 1 IF (JM1 .LT. 1) GO TO 140 DO 130 I = 1, JM1 R(L) = FJAC(I,J) L = L + N - I 130 CONTINUE 140 CONTINUE R(L) = WA1(J) IF (WA1(J) .EQ. ZERO) SING = .TRUE. 150 CONTINUE C C ACCUMULATE THE ORTHOGONAL FACTOR IN FJAC. C CALL QFORM(N,N,FJAC,LDFJAC,WA1) C C RESCALE IF NECESSARY. C IF (MODE .EQ. 2) GO TO 170 DO 160 J = 1, N DIAG(J) = AMAX1(DIAG(J),WA2(J)) 160 CONTINUE 170 CONTINUE C C BEGINNING OF THE INNER LOOP. C 180 CONTINUE C C IF REQUESTED, CALL FCN TO ENABLE PRINTING OF ITERATES. C IF (NPRINT .LE. 0) GO TO 190 IFLAG = 0 IF (MOD(ITER-1,NPRINT) .EQ. 0) CALL FCN(N,X,FVEC,IFLAG) IF (IFLAG .LT. 0) GO TO 300 190 CONTINUE C C DETERMINE THE DIRECTION P. C CALL DOGLEG(N,R,LR,DIAG,QTF,DELTA,WA1,WA2,WA3) C C STORE THE DIRECTION P AND X + P. CALCULATE THE NORM OF P. C DO 200 J = 1, N WA1(J) = -WA1(J) WA2(J) = X(J) + WA1(J) WA3(J) = DIAG(J)*WA1(J) 200 CONTINUE PNORM = ENORM(N,WA3) C C ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND. C IF (ITER .EQ. 1) DELTA = AMIN1(DELTA,PNORM) C C EVALUATE THE FUNCTION AT X + P AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(N,WA2,WA4,IFLAG) NFEV = NFEV + 1 IF (IFLAG .LT. 0) GO TO 300 FNORM1 = ENORM(N,WA4) C C COMPUTE THE SCALED ACTUAL REDUCTION. C ACTRED = -ONE IF (FNORM1 .LT. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2 C C COMPUTE THE SCALED PREDICTED REDUCTION. C L = 1 DO 220 I = 1, N SUM = ZERO DO 210 J = I, N SUM = SUM + R(L)*WA1(J) L = L + 1 210 CONTINUE WA3(I) = QTF(I) + SUM 220 CONTINUE TEMP = ENORM(N,WA3) PRERED = ZERO IF (TEMP .LT. FNORM) PRERED = ONE - (TEMP/FNORM)**2 C C COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED C REDUCTION. C RATIO = ZERO IF (PRERED .GT. ZERO) RATIO = ACTRED/PRERED C C UPDATE THE STEP BOUND. C IF (RATIO .GE. P1) GO TO 230 NCSUC = 0 NCFAIL = NCFAIL + 1 DELTA = P5*DELTA GO TO 240 230 CONTINUE NCFAIL = 0 NCSUC = NCSUC + 1 IF (RATIO .GE. P5 .OR. NCSUC .GT. 1) * DELTA = AMAX1(DELTA,PNORM/P5) IF (ABS(RATIO-ONE) .LE. P1) DELTA = PNORM/P5 240 CONTINUE C C TEST FOR SUCCESSFUL ITERATION. C IF (RATIO .LT. P0001) GO TO 260 C C SUCCESSFUL ITERATION. UPDATE X, FVEC, AND THEIR NORMS. C DO 250 J = 1, N X(J) = WA2(J) WA2(J) = DIAG(J)*X(J) FVEC(J) = WA4(J) 250 CONTINUE XNORM = ENORM(N,WA2) FNORM = FNORM1 ITER = ITER + 1 260 CONTINUE C C DETERMINE THE PROGRESS OF THE ITERATION. C NSLOW1 = NSLOW1 + 1 IF (ACTRED .GE. P001) NSLOW1 = 0 IF (JEVAL) NSLOW2 = NSLOW2 + 1 IF (ACTRED .GE. P1) NSLOW2 = 0 C C TEST FOR CONVERGENCE. C IF (DELTA .LE. XTOL*XNORM .OR. FNORM .EQ. ZERO) INFO = 1 IF (INFO .NE. 0) GO TO 300 C C TESTS FOR TERMINATION AND STRINGENT TOLERANCES. C IF (NFEV .GE. MAXFEV) INFO = 2 IF (P1*AMAX1(P1*DELTA,PNORM) .LE. EPSMCH*XNORM) INFO = 3 IF (NSLOW2 .EQ. 5) INFO = 4 IF (NSLOW1 .EQ. 10) INFO = 5 IF (INFO .NE. 0) GO TO 300 C C CRITERION FOR RECALCULATING JACOBIAN APPROXIMATION C BY FORWARD DIFFERENCES. C IF (NCFAIL .EQ. 2) GO TO 290 C C CALCULATE THE RANK ONE MODIFICATION TO THE JACOBIAN C AND UPDATE QTF IF NECESSARY. C DO 280 J = 1, N SUM = ZERO DO 270 I = 1, N SUM = SUM + FJAC(I,J)*WA4(I) 270 CONTINUE WA2(J) = (SUM - WA3(J))/PNORM WA1(J) = DIAG(J)*((DIAG(J)*WA1(J))/PNORM) IF (RATIO .GE. P0001) QTF(J) = SUM 280 CONTINUE C C COMPUTE THE QR FACTORIZATION OF THE UPDATED JACOBIAN. C CALL R1UPDT(N,N,R,LR,WA1,WA2,WA3,SING) CALL R1MPYQ(N,N,FJAC,LDFJAC,WA2,WA3) CALL R1MPYQ(1,N,QTF,1,WA2,WA3) C C END OF THE INNER LOOP. C JEVAL = .FALSE. GO TO 180 290 CONTINUE C C END OF THE OUTER LOOP. C GO TO 30 300 CONTINUE C C TERMINATION, EITHER NORMAL OR USER IMPOSED. C IF (IFLAG .LT. 0) INFO = IFLAG IFLAG = 0 IF (NPRINT .GT. 0) CALL FCN(N,X,FVEC,IFLAG) RETURN C C LAST CARD OF SUBROUTINE HYBRD. C END SUBROUTINE HYBRD1(FCN,N,X,FVEC,TOL,INFO,WA,LWA) INTEGER N,INFO,LWA REAL TOL REAL X(N),FVEC(N),WA(LWA) EXTERNAL FCN C ********** C C SUBROUTINE HYBRD1 C C THE PURPOSE OF HYBRD1 IS TO FIND A ZERO OF A SYSTEM OF C N NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION C OF THE POWELL HYBRID METHOD. THIS IS DONE BY USING THE C MORE GENERAL NONLINEAR EQUATION SOLVER HYBRD. THE USER C MUST PROVIDE A SUBROUTINE WHICH CALCULATES THE FUNCTIONS. C THE JACOBIAN IS THEN CALCULATED BY A FORWARD-DIFFERENCE C APPROXIMATION. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE HYBRD1(FCN,N,X,FVEC,TOL,INFO,WA,LWA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(N,X,FVEC,IFLAG) C INTEGER N,IFLAG C REAL X(N),FVEC(N) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C --------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF HYBRD1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS AND VARIABLES. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C TOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION OCCURS C WHEN THE ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO = 2 NUMBER OF CALLS TO FCN HAS REACHED OR EXCEEDED C 200*(N+1). C C INFO = 3 TOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 4 ITERATION IS NOT MAKING GOOD PROGRESS. C C WA IS A WORK ARRAY OF LENGTH LWA. C C LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(3*N+13))/2. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... HYBRD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER INDEX,J,LR,MAXFEV,ML,MODE,MU,NFEV,NPRINT REAL EPSFCN,FACTOR,ONE,XTOL,ZERO DATA FACTOR,ONE,ZERO /1.0E2,1.0E0,0.0E0/ INFO = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. TOL .LT. ZERO .OR. LWA .LT. (N*(3*N + 13))/2) * GO TO 20 C C CALL HYBRD. C MAXFEV = 200*(N + 1) XTOL = TOL ML = N - 1 MU = N - 1 EPSFCN = ZERO MODE = 2 DO 10 J = 1, N WA(J) = ONE 10 CONTINUE NPRINT = 0 LR = (N*(N + 1))/2 INDEX = 6*N + LR CALL HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN,WA(1),MODE, * FACTOR,NPRINT,INFO,NFEV,WA(INDEX+1),N,WA(6*N+1),LR, * WA(N+1),WA(2*N+1),WA(3*N+1),WA(4*N+1),WA(5*N+1)) IF (INFO .EQ. 5) INFO = 4 20 CONTINUE RETURN C C LAST CARD OF SUBROUTINE HYBRD1. C END SUBROUTINE HYBRJ(FCN,N,X,FVEC,FJAC,LDFJAC,XTOL,MAXFEV,DIAG,MODE, * FACTOR,NPRINT,INFO,NFEV,NJEV,R,LR,QTF,WA1,WA2, * WA3,WA4) INTEGER N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV,LR REAL XTOL,FACTOR REAL X(N),FVEC(N),FJAC(LDFJAC,N),DIAG(N),R(LR),QTF(N),WA1(N), * WA2(N),WA3(N),WA4(N) C ********** C C SUBROUTINE HYBRJ C C THE PURPOSE OF HYBRJ IS TO FIND A ZERO OF A SYSTEM OF C N NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION C OF THE POWELL HYBRID METHOD. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS AND THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE HYBRJ(FCN,N,X,FVEC,FJAC,LDFJAC,XTOL,MAXFEV,DIAG, C MODE,FACTOR,NPRINT,INFO,NFEV,NJEV,R,LR,QTF, C WA1,WA2,WA3,WA4) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE JACOBIAN. FCN MUST C BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER C CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) C INTEGER N,LDFJAC,IFLAG C REAL X(N),FVEC(N),FJAC(LDFJAC,N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. C IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND C RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. C --------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF HYBRJ. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS AND VARIABLES. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT N BY N ARRAY WHICH CONTAINS THE C ORTHOGONAL MATRIX Q PRODUCED BY THE QR FACTORIZATION C OF THE FINAL APPROXIMATE JACOBIAN. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C XTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE C ITERATES IS AT MOST XTOL. C C MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION C OCCURS WHEN THE NUMBER OF CALLS TO FCN WITH IFLAG = 1 C HAS REACHED MAXFEV. C C DIAG IS AN ARRAY OF LENGTH N. IF MODE = 1 (SEE C BELOW), DIAG IS INTERNALLY SET. IF MODE = 2, DIAG C MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS C MULTIPLICATIVE SCALE FACTORS FOR THE VARIABLES. C C MODE IS AN INTEGER INPUT VARIABLE. IF MODE = 1, THE C VARIABLES WILL BE SCALED INTERNALLY. IF MODE = 2, C THE SCALING IS SPECIFIED BY THE INPUT DIAG. OTHER C VALUES OF MODE ARE EQUIVALENT TO MODE = 1. C C FACTOR IS A POSITIVE INPUT VARIABLE USED IN DETERMINING THE C INITIAL STEP BOUND. THIS BOUND IS SET TO THE PRODUCT OF C FACTOR AND THE EUCLIDEAN NORM OF DIAG*X IF NONZERO, OR ELSE C TO FACTOR ITSELF. IN MOST CASES FACTOR SHOULD LIE IN THE C INTERVAL (.1,100.). 100. IS A GENERALLY RECOMMENDED VALUE. C C NPRINT IS AN INTEGER INPUT VARIABLE THAT ENABLES CONTROLLED C PRINTING OF ITERATES IF IT IS POSITIVE. IN THIS CASE, C FCN IS CALLED WITH IFLAG = 0 AT THE BEGINNING OF THE FIRST C ITERATION AND EVERY NPRINT ITERATIONS THEREAFTER AND C IMMEDIATELY PRIOR TO RETURN, WITH X AND FVEC AVAILABLE C FOR PRINTING. FVEC AND FJAC SHOULD NOT BE ALTERED. C IF NPRINT IS NOT POSITIVE, NO SPECIAL CALLS OF FCN C WITH IFLAG = 0 ARE MADE. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 RELATIVE ERROR BETWEEN TWO CONSECUTIVE ITERATES C IS AT MOST XTOL. C C INFO = 2 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED MAXFEV. C C INFO = 3 XTOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 4 ITERATION IS NOT MAKING GOOD PROGRESS, AS C MEASURED BY THE IMPROVEMENT FROM THE LAST C FIVE JACOBIAN EVALUATIONS. C C INFO = 5 ITERATION IS NOT MAKING GOOD PROGRESS, AS C MEASURED BY THE IMPROVEMENT FROM THE LAST C TEN ITERATIONS. C C NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 1. C C NJEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 2. C C R IS AN OUTPUT ARRAY OF LENGTH LR WHICH CONTAINS THE C UPPER TRIANGULAR MATRIX PRODUCED BY THE QR FACTORIZATION C OF THE FINAL APPROXIMATE JACOBIAN, STORED ROWWISE. C C LR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(N+1))/2. C C QTF IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE VECTOR (Q TRANSPOSE)*FVEC. C C WA1, WA2, WA3, AND WA4 ARE WORK ARRAYS OF LENGTH N. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DOGLEG,SPMPAR,ENORM, C QFORM,QRFAC,R1MPYQ,R1UPDT C C FORTRAN-SUPPLIED ... ABS,AMAX1,AMIN1,MOD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IFLAG,ITER,J,JM1,L,NCFAIL,NCSUC,NSLOW1,NSLOW2 INTEGER IWA(1) LOGICAL JEVAL,SING REAL ACTRED,DELTA,EPSMCH,FNORM,FNORM1,ONE,PNORM,PRERED,P1,P5, * P001,P0001,RATIO,SUM,TEMP,XNORM,ZERO REAL SPMPAR,ENORM DATA ONE,P1,P5,P001,P0001,ZERO * /1.0E0,1.0E-1,5.0E-1,1.0E-3,1.0E-4,0.0E0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = SPMPAR(1) C INFO = 0 IFLAG = 0 NFEV = 0 NJEV = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. LDFJAC .LT. N .OR. XTOL .LT. ZERO * .OR. MAXFEV .LE. 0 .OR. FACTOR .LE. ZERO * .OR. LR .LT. (N*(N + 1))/2) GO TO 300 IF (MODE .NE. 2) GO TO 20 DO 10 J = 1, N IF (DIAG(J) .LE. ZERO) GO TO 300 10 CONTINUE 20 CONTINUE C C EVALUATE THE FUNCTION AT THE STARTING POINT C AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) NFEV = 1 IF (IFLAG .LT. 0) GO TO 300 FNORM = ENORM(N,FVEC) C C INITIALIZE ITERATION COUNTER AND MONITORS. C ITER = 1 NCSUC = 0 NCFAIL = 0 NSLOW1 = 0 NSLOW2 = 0 C C BEGINNING OF THE OUTER LOOP. C 30 CONTINUE JEVAL = .TRUE. C C CALCULATE THE JACOBIAN MATRIX. C IFLAG = 2 CALL FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) NJEV = NJEV + 1 IF (IFLAG .LT. 0) GO TO 300 C C COMPUTE THE QR FACTORIZATION OF THE JACOBIAN. C CALL QRFAC(N,N,FJAC,LDFJAC,.FALSE.,IWA,1,WA1,WA2,WA3) C C ON THE FIRST ITERATION AND IF MODE IS 1, SCALE ACCORDING C TO THE NORMS OF THE COLUMNS OF THE INITIAL JACOBIAN. C IF (ITER .NE. 1) GO TO 70 IF (MODE .EQ. 2) GO TO 50 DO 40 J = 1, N DIAG(J) = WA2(J) IF (WA2(J) .EQ. ZERO) DIAG(J) = ONE 40 CONTINUE 50 CONTINUE C C ON THE FIRST ITERATION, CALCULATE THE NORM OF THE SCALED X C AND INITIALIZE THE STEP BOUND DELTA. C DO 60 J = 1, N WA3(J) = DIAG(J)*X(J) 60 CONTINUE XNORM = ENORM(N,WA3) DELTA = FACTOR*XNORM IF (DELTA .EQ. ZERO) DELTA = FACTOR 70 CONTINUE C C FORM (Q TRANSPOSE)*FVEC AND STORE IN QTF. C DO 80 I = 1, N QTF(I) = FVEC(I) 80 CONTINUE DO 120 J = 1, N IF (FJAC(J,J) .EQ. ZERO) GO TO 110 SUM = ZERO DO 90 I = J, N SUM = SUM + FJAC(I,J)*QTF(I) 90 CONTINUE TEMP = -SUM/FJAC(J,J) DO 100 I = J, N QTF(I) = QTF(I) + FJAC(I,J)*TEMP 100 CONTINUE 110 CONTINUE 120 CONTINUE C C COPY THE TRIANGULAR FACTOR OF THE QR FACTORIZATION INTO R. C SING = .FALSE. DO 150 J = 1, N L = J JM1 = J - 1 IF (JM1 .LT. 1) GO TO 140 DO 130 I = 1, JM1 R(L) = FJAC(I,J) L = L + N - I 130 CONTINUE 140 CONTINUE R(L) = WA1(J) IF (WA1(J) .EQ. ZERO) SING = .TRUE. 150 CONTINUE C C ACCUMULATE THE ORTHOGONAL FACTOR IN FJAC. C CALL QFORM(N,N,FJAC,LDFJAC,WA1) C C RESCALE IF NECESSARY. C IF (MODE .EQ. 2) GO TO 170 DO 160 J = 1, N DIAG(J) = AMAX1(DIAG(J),WA2(J)) 160 CONTINUE 170 CONTINUE C C BEGINNING OF THE INNER LOOP. C 180 CONTINUE C C IF REQUESTED, CALL FCN TO ENABLE PRINTING OF ITERATES. C IF (NPRINT .LE. 0) GO TO 190 IFLAG = 0 IF (MOD(ITER-1,NPRINT) .EQ. 0) * CALL FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) IF (IFLAG .LT. 0) GO TO 300 190 CONTINUE C C DETERMINE THE DIRECTION P. C CALL DOGLEG(N,R,LR,DIAG,QTF,DELTA,WA1,WA2,WA3) C C STORE THE DIRECTION P AND X + P. CALCULATE THE NORM OF P. C DO 200 J = 1, N WA1(J) = -WA1(J) WA2(J) = X(J) + WA1(J) WA3(J) = DIAG(J)*WA1(J) 200 CONTINUE PNORM = ENORM(N,WA3) C C ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND. C IF (ITER .EQ. 1) DELTA = AMIN1(DELTA,PNORM) C C EVALUATE THE FUNCTION AT X + P AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(N,WA2,WA4,FJAC,LDFJAC,IFLAG) NFEV = NFEV + 1 IF (IFLAG .LT. 0) GO TO 300 FNORM1 = ENORM(N,WA4) C C COMPUTE THE SCALED ACTUAL REDUCTION. C ACTRED = -ONE IF (FNORM1 .LT. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2 C C COMPUTE THE SCALED PREDICTED REDUCTION. C L = 1 DO 220 I = 1, N SUM = ZERO DO 210 J = I, N SUM = SUM + R(L)*WA1(J) L = L + 1 210 CONTINUE WA3(I) = QTF(I) + SUM 220 CONTINUE TEMP = ENORM(N,WA3) PRERED = ZERO IF (TEMP .LT. FNORM) PRERED = ONE - (TEMP/FNORM)**2 C C COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED C REDUCTION. C RATIO = ZERO IF (PRERED .GT. ZERO) RATIO = ACTRED/PRERED C C UPDATE THE STEP BOUND. C IF (RATIO .GE. P1) GO TO 230 NCSUC = 0 NCFAIL = NCFAIL + 1 DELTA = P5*DELTA GO TO 240 230 CONTINUE NCFAIL = 0 NCSUC = NCSUC + 1 IF (RATIO .GE. P5 .OR. NCSUC .GT. 1) * DELTA = AMAX1(DELTA,PNORM/P5) IF (ABS(RATIO-ONE) .LE. P1) DELTA = PNORM/P5 240 CONTINUE C C TEST FOR SUCCESSFUL ITERATION. C IF (RATIO .LT. P0001) GO TO 260 C C SUCCESSFUL ITERATION. UPDATE X, FVEC, AND THEIR NORMS. C DO 250 J = 1, N X(J) = WA2(J) WA2(J) = DIAG(J)*X(J) FVEC(J) = WA4(J) 250 CONTINUE XNORM = ENORM(N,WA2) FNORM = FNORM1 ITER = ITER + 1 260 CONTINUE C C DETERMINE THE PROGRESS OF THE ITERATION. C NSLOW1 = NSLOW1 + 1 IF (ACTRED .GE. P001) NSLOW1 = 0 IF (JEVAL) NSLOW2 = NSLOW2 + 1 IF (ACTRED .GE. P1) NSLOW2 = 0 C C TEST FOR CONVERGENCE. C IF (DELTA .LE. XTOL*XNORM .OR. FNORM .EQ. ZERO) INFO = 1 IF (INFO .NE. 0) GO TO 300 C C TESTS FOR TERMINATION AND STRINGENT TOLERANCES. C IF (NFEV .GE. MAXFEV) INFO = 2 IF (P1*AMAX1(P1*DELTA,PNORM) .LE. EPSMCH*XNORM) INFO = 3 IF (NSLOW2 .EQ. 5) INFO = 4 IF (NSLOW1 .EQ. 10) INFO = 5 IF (INFO .NE. 0) GO TO 300 C C CRITERION FOR RECALCULATING JACOBIAN. C IF (NCFAIL .EQ. 2) GO TO 290 C C CALCULATE THE RANK ONE MODIFICATION TO THE JACOBIAN C AND UPDATE QTF IF NECESSARY. C DO 280 J = 1, N SUM = ZERO DO 270 I = 1, N SUM = SUM + FJAC(I,J)*WA4(I) 270 CONTINUE WA2(J) = (SUM - WA3(J))/PNORM WA1(J) = DIAG(J)*((DIAG(J)*WA1(J))/PNORM) IF (RATIO .GE. P0001) QTF(J) = SUM 280 CONTINUE C C COMPUTE THE QR FACTORIZATION OF THE UPDATED JACOBIAN. C CALL R1UPDT(N,N,R,LR,WA1,WA2,WA3,SING) CALL R1MPYQ(N,N,FJAC,LDFJAC,WA2,WA3) CALL R1MPYQ(1,N,QTF,1,WA2,WA3) C C END OF THE INNER LOOP. C JEVAL = .FALSE. GO TO 180 290 CONTINUE C C END OF THE OUTER LOOP. C GO TO 30 300 CONTINUE C C TERMINATION, EITHER NORMAL OR USER IMPOSED. C IF (IFLAG .LT. 0) INFO = IFLAG IFLAG = 0 IF (NPRINT .GT. 0) CALL FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) RETURN C C LAST CARD OF SUBROUTINE HYBRJ. C END SUBROUTINE HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA) INTEGER N,LDFJAC,INFO,LWA REAL TOL REAL X(N),FVEC(N),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN C ********** C C SUBROUTINE HYBRJ1 C C THE PURPOSE OF HYBRJ1 IS TO FIND A ZERO OF A SYSTEM OF C N NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION C OF THE POWELL HYBRID METHOD. THIS IS DONE BY USING THE C MORE GENERAL NONLINEAR EQUATION SOLVER HYBRJ. THE USER C MUST PROVIDE A SUBROUTINE WHICH CALCULATES THE FUNCTIONS C AND THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE JACOBIAN. FCN MUST C BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER C CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) C INTEGER N,LDFJAC,IFLAG C REAL X(N),FVEC(N),FJAC(LDFJAC,N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. C IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND C RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. C --------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF HYBRJ1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS AND VARIABLES. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT N BY N ARRAY WHICH CONTAINS THE C ORTHOGONAL MATRIX Q PRODUCED BY THE QR FACTORIZATION C OF THE FINAL APPROXIMATE JACOBIAN. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C TOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION OCCURS C WHEN THE ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO = 2 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED 100*(N+1). C C INFO = 3 TOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 4 ITERATION IS NOT MAKING GOOD PROGRESS. C C WA IS A WORK ARRAY OF LENGTH LWA. C C LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(N+13))/2. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... HYBRJ C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER J,LR,MAXFEV,MODE,NFEV,NJEV,NPRINT REAL FACTOR,ONE,XTOL,ZERO DATA FACTOR,ONE,ZERO /1.0E2,1.0E0,0.0E0/ INFO = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. LDFJAC .LT. N .OR. TOL .LT. ZERO * .OR. LWA .LT. (N*(N + 13))/2) GO TO 20 C C CALL HYBRJ. C MAXFEV = 100*(N + 1) XTOL = TOL MODE = 2 DO 10 J = 1, N WA(J) = ONE 10 CONTINUE NPRINT = 0 LR = (N*(N + 1))/2 CALL HYBRJ(FCN,N,X,FVEC,FJAC,LDFJAC,XTOL,MAXFEV,WA(1),MODE, * FACTOR,NPRINT,INFO,NFEV,NJEV,WA(6*N+1),LR,WA(N+1), * WA(2*N+1),WA(3*N+1),WA(4*N+1),WA(5*N+1)) IF (INFO .EQ. 5) INFO = 4 20 CONTINUE RETURN C C LAST CARD OF SUBROUTINE HYBRJ1. C END SUBROUTINE LMDER(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV INTEGER IPVT(N) REAL FTOL,XTOL,GTOL,FACTOR REAL X(N),FVEC(M),FJAC(LDFJAC,N),DIAG(N),QTF(N),WA1(N),WA2(N), * WA3(N),WA4(M) C ********** C C SUBROUTINE LMDER C C THE PURPOSE OF LMDER IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF C THE LEVENBERG-MARQUARDT ALGORITHM. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS AND THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMDER(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, C MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV, C NJEV,IPVT,QTF,WA1,WA2,WA3,WA4) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE JACOBIAN. FCN MUST C BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER C CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) C INTEGER M,N,LDFJAC,IFLAG C REAL X(N),FVEC(M),FJAC(LDFJAC,N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. C IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND C RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMDER. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT M BY N ARRAY. THE UPPER N BY N SUBMATRIX C OF FJAC CONTAINS AN UPPER TRIANGULAR MATRIX R WITH C DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE SUCH THAT C C T T T C P *(JAC *JAC)*P = R *R, C C WHERE P IS A PERMUTATION MATRIX AND JAC IS THE FINAL C CALCULATED JACOBIAN. COLUMN J OF P IS COLUMN IPVT(J) C (SEE BELOW) OF THE IDENTITY MATRIX. THE LOWER TRAPEZOIDAL C PART OF FJAC CONTAINS INFORMATION GENERATED DURING C THE COMPUTATION OF R. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C FTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN BOTH THE ACTUAL AND PREDICTED RELATIVE C REDUCTIONS IN THE SUM OF SQUARES ARE AT MOST FTOL. C THEREFORE, FTOL MEASURES THE RELATIVE ERROR DESIRED C IN THE SUM OF SQUARES. C C XTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE C ITERATES IS AT MOST XTOL. THEREFORE, XTOL MEASURES THE C RELATIVE ERROR DESIRED IN THE APPROXIMATE SOLUTION. C C GTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE COSINE OF THE ANGLE BETWEEN FVEC AND C ANY COLUMN OF THE JACOBIAN IS AT MOST GTOL IN ABSOLUTE C VALUE. THEREFORE, GTOL MEASURES THE ORTHOGONALITY C DESIRED BETWEEN THE FUNCTION VECTOR AND THE COLUMNS C OF THE JACOBIAN. C C MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION C OCCURS WHEN THE NUMBER OF CALLS TO FCN WITH IFLAG = 1 C HAS REACHED MAXFEV. C C DIAG IS AN ARRAY OF LENGTH N. IF MODE = 1 (SEE C BELOW), DIAG IS INTERNALLY SET. IF MODE = 2, DIAG C MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS C MULTIPLICATIVE SCALE FACTORS FOR THE VARIABLES. C C MODE IS AN INTEGER INPUT VARIABLE. IF MODE = 1, THE C VARIABLES WILL BE SCALED INTERNALLY. IF MODE = 2, C THE SCALING IS SPECIFIED BY THE INPUT DIAG. OTHER C VALUES OF MODE ARE EQUIVALENT TO MODE = 1. C C FACTOR IS A POSITIVE INPUT VARIABLE USED IN DETERMINING THE C INITIAL STEP BOUND. THIS BOUND IS SET TO THE PRODUCT OF C FACTOR AND THE EUCLIDEAN NORM OF DIAG*X IF NONZERO, OR ELSE C TO FACTOR ITSELF. IN MOST CASES FACTOR SHOULD LIE IN THE C INTERVAL (.1,100.). 100. IS A GENERALLY RECOMMENDED VALUE. C C NPRINT IS AN INTEGER INPUT VARIABLE THAT ENABLES CONTROLLED C PRINTING OF ITERATES IF IT IS POSITIVE. IN THIS CASE, C FCN IS CALLED WITH IFLAG = 0 AT THE BEGINNING OF THE FIRST C ITERATION AND EVERY NPRINT ITERATIONS THEREAFTER AND C IMMEDIATELY PRIOR TO RETURN, WITH X, FVEC, AND FJAC C AVAILABLE FOR PRINTING. FVEC AND FJAC SHOULD NOT BE C ALTERED. IF NPRINT IS NOT POSITIVE, NO SPECIAL CALLS C OF FCN WITH IFLAG = 0 ARE MADE. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 BOTH ACTUAL AND PREDICTED RELATIVE REDUCTIONS C IN THE SUM OF SQUARES ARE AT MOST FTOL. C C INFO = 2 RELATIVE ERROR BETWEEN TWO CONSECUTIVE ITERATES C IS AT MOST XTOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 THE COSINE OF THE ANGLE BETWEEN FVEC AND ANY C COLUMN OF THE JACOBIAN IS AT MOST GTOL IN C ABSOLUTE VALUE. C C INFO = 5 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED MAXFEV. C C INFO = 6 FTOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 XTOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 8 GTOL IS TOO SMALL. FVEC IS ORTHOGONAL TO THE C COLUMNS OF THE JACOBIAN TO MACHINE PRECISION. C C NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 1. C C NJEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 2. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH N. IPVT C DEFINES A PERMUTATION MATRIX P SUCH THAT JAC*P = Q*R, C WHERE JAC IS THE FINAL CALCULATED JACOBIAN, Q IS C ORTHOGONAL (NOT STORED), AND R IS UPPER TRIANGULAR C WITH DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C QTF IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FIRST N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*FVEC. C C WA1, WA2, AND WA3 ARE WORK ARRAYS OF LENGTH N. C C WA4 IS A WORK ARRAY OF LENGTH M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... SPMPAR,ENORM,LMPAR,QRFAC C C FORTRAN-SUPPLIED ... ABS,AMAX1,AMIN1,SQRT,MOD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IFLAG,ITER,J,L REAL ACTRED,DELTA,DIRDER,EPSMCH,FNORM,FNORM1,GNORM,ONE,PAR, * PNORM,PRERED,P1,P5,P25,P75,P0001,RATIO,SUM,TEMP,TEMP1, * TEMP2,XNORM,ZERO REAL SPMPAR,ENORM DATA ONE,P1,P5,P25,P75,P0001,ZERO * /1.0E0,1.0E-1,5.0E-1,2.5E-1,7.5E-1,1.0E-4,0.0E0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = SPMPAR(1) C INFO = 0 IFLAG = 0 NFEV = 0 NJEV = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. LDFJAC .LT. M * .OR. FTOL .LT. ZERO .OR. XTOL .LT. ZERO .OR. GTOL .LT. ZERO * .OR. MAXFEV .LE. 0 .OR. FACTOR .LE. ZERO) GO TO 300 IF (MODE .NE. 2) GO TO 20 DO 10 J = 1, N IF (DIAG(J) .LE. ZERO) GO TO 300 10 CONTINUE 20 CONTINUE C C EVALUATE THE FUNCTION AT THE STARTING POINT C AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) NFEV = 1 IF (IFLAG .LT. 0) GO TO 300 FNORM = ENORM(M,FVEC) C C INITIALIZE LEVENBERG-MARQUARDT PARAMETER AND ITERATION COUNTER. C PAR = ZERO ITER = 1 C C BEGINNING OF THE OUTER LOOP. C 30 CONTINUE C C CALCULATE THE JACOBIAN MATRIX. C IFLAG = 2 CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) NJEV = NJEV + 1 IF (IFLAG .LT. 0) GO TO 300 C C IF REQUESTED, CALL FCN TO ENABLE PRINTING OF ITERATES. C IF (NPRINT .LE. 0) GO TO 40 IFLAG = 0 IF (MOD(ITER-1,NPRINT) .EQ. 0) * CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) IF (IFLAG .LT. 0) GO TO 300 40 CONTINUE C C COMPUTE THE QR FACTORIZATION OF THE JACOBIAN. C CALL QRFAC(M,N,FJAC,LDFJAC,.TRUE.,IPVT,N,WA1,WA2,WA3) C C ON THE FIRST ITERATION AND IF MODE IS 1, SCALE ACCORDING C TO THE NORMS OF THE COLUMNS OF THE INITIAL JACOBIAN. C IF (ITER .NE. 1) GO TO 80 IF (MODE .EQ. 2) GO TO 60 DO 50 J = 1, N DIAG(J) = WA2(J) IF (WA2(J) .EQ. ZERO) DIAG(J) = ONE 50 CONTINUE 60 CONTINUE C C ON THE FIRST ITERATION, CALCULATE THE NORM OF THE SCALED X C AND INITIALIZE THE STEP BOUND DELTA. C DO 70 J = 1, N WA3(J) = DIAG(J)*X(J) 70 CONTINUE XNORM = ENORM(N,WA3) DELTA = FACTOR*XNORM IF (DELTA .EQ. ZERO) DELTA = FACTOR 80 CONTINUE C C FORM (Q TRANSPOSE)*FVEC AND STORE THE FIRST N COMPONENTS IN C QTF. C DO 90 I = 1, M WA4(I) = FVEC(I) 90 CONTINUE DO 130 J = 1, N IF (FJAC(J,J) .EQ. ZERO) GO TO 120 SUM = ZERO DO 100 I = J, M SUM = SUM + FJAC(I,J)*WA4(I) 100 CONTINUE TEMP = -SUM/FJAC(J,J) DO 110 I = J, M WA4(I) = WA4(I) + FJAC(I,J)*TEMP 110 CONTINUE 120 CONTINUE FJAC(J,J) = WA1(J) QTF(J) = WA4(J) 130 CONTINUE C C COMPUTE THE NORM OF THE SCALED GRADIENT. C GNORM = ZERO IF (FNORM .EQ. ZERO) GO TO 170 DO 160 J = 1, N L = IPVT(J) IF (WA2(L) .EQ. ZERO) GO TO 150 SUM = ZERO DO 140 I = 1, J SUM = SUM + FJAC(I,J)*(QTF(I)/FNORM) 140 CONTINUE GNORM = AMAX1(GNORM,ABS(SUM/WA2(L))) 150 CONTINUE 160 CONTINUE 170 CONTINUE C C TEST FOR CONVERGENCE OF THE GRADIENT NORM. C IF (GNORM .LE. GTOL) INFO = 4 IF (INFO .NE. 0) GO TO 300 C C RESCALE IF NECESSARY. C IF (MODE .EQ. 2) GO TO 190 DO 180 J = 1, N DIAG(J) = AMAX1(DIAG(J),WA2(J)) 180 CONTINUE 190 CONTINUE C C BEGINNING OF THE INNER LOOP. C 200 CONTINUE C C DETERMINE THE LEVENBERG-MARQUARDT PARAMETER. C CALL LMPAR(N,FJAC,LDFJAC,IPVT,DIAG,QTF,DELTA,PAR,WA1,WA2, * WA3,WA4) C C STORE THE DIRECTION P AND X + P. CALCULATE THE NORM OF P. C DO 210 J = 1, N WA1(J) = -WA1(J) WA2(J) = X(J) + WA1(J) WA3(J) = DIAG(J)*WA1(J) 210 CONTINUE PNORM = ENORM(N,WA3) C C ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND. C IF (ITER .EQ. 1) DELTA = AMIN1(DELTA,PNORM) C C EVALUATE THE FUNCTION AT X + P AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,WA2,WA4,FJAC,LDFJAC,IFLAG) NFEV = NFEV + 1 IF (IFLAG .LT. 0) GO TO 300 FNORM1 = ENORM(M,WA4) C C COMPUTE THE SCALED ACTUAL REDUCTION. C ACTRED = -ONE IF (P1*FNORM1 .LT. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2 C C COMPUTE THE SCALED PREDICTED REDUCTION AND C THE SCALED DIRECTIONAL DERIVATIVE. C DO 230 J = 1, N WA3(J) = ZERO L = IPVT(J) TEMP = WA1(L) DO 220 I = 1, J WA3(I) = WA3(I) + FJAC(I,J)*TEMP 220 CONTINUE 230 CONTINUE TEMP1 = ENORM(N,WA3)/FNORM TEMP2 = (SQRT(PAR)*PNORM)/FNORM PRERED = TEMP1**2 + TEMP2**2/P5 DIRDER = -(TEMP1**2 + TEMP2**2) C C COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED C REDUCTION. C RATIO = ZERO IF (PRERED .NE. ZERO) RATIO = ACTRED/PRERED C C UPDATE THE STEP BOUND. C IF (RATIO .GT. P25) GO TO 240 IF (ACTRED .GE. ZERO) TEMP = P5 IF (ACTRED .LT. ZERO) * TEMP = P5*DIRDER/(DIRDER + P5*ACTRED) IF (P1*FNORM1 .GE. FNORM .OR. TEMP .LT. P1) TEMP = P1 DELTA = TEMP*AMIN1(DELTA,PNORM/P1) PAR = PAR/TEMP GO TO 260 240 CONTINUE IF (PAR .NE. ZERO .AND. RATIO .LT. P75) GO TO 250 DELTA = PNORM/P5 PAR = P5*PAR 250 CONTINUE 260 CONTINUE C C TEST FOR SUCCESSFUL ITERATION. C IF (RATIO .LT. P0001) GO TO 290 C C SUCCESSFUL ITERATION. UPDATE X, FVEC, AND THEIR NORMS. C DO 270 J = 1, N X(J) = WA2(J) WA2(J) = DIAG(J)*X(J) 270 CONTINUE DO 280 I = 1, M FVEC(I) = WA4(I) 280 CONTINUE XNORM = ENORM(N,WA2) FNORM = FNORM1 ITER = ITER + 1 290 CONTINUE C C TESTS FOR CONVERGENCE. C IF (ABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE) INFO = 1 IF (DELTA .LE. XTOL*XNORM) INFO = 2 IF (ABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE .AND. INFO .EQ. 2) INFO = 3 IF (INFO .NE. 0) GO TO 300 C C TESTS FOR TERMINATION AND STRINGENT TOLERANCES. C IF (NFEV .GE. MAXFEV) INFO = 5 IF (ABS(ACTRED) .LE. EPSMCH .AND. PRERED .LE. EPSMCH * .AND. P5*RATIO .LE. ONE) INFO = 6 IF (DELTA .LE. EPSMCH*XNORM) INFO = 7 IF (GNORM .LE. EPSMCH) INFO = 8 IF (INFO .NE. 0) GO TO 300 C C END OF THE INNER LOOP. REPEAT IF ITERATION UNSUCCESSFUL. C IF (RATIO .LT. P0001) GO TO 200 C C END OF THE OUTER LOOP. C GO TO 30 300 CONTINUE C C TERMINATION, EITHER NORMAL OR USER IMPOSED. C IF (IFLAG .LT. 0) INFO = IFLAG IFLAG = 0 IF (NPRINT .GT. 0) CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) RETURN C C LAST CARD OF SUBROUTINE LMDER. C END SUBROUTINE LMDER1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,IPVT,WA, * LWA) INTEGER M,N,LDFJAC,INFO,LWA INTEGER IPVT(N) REAL TOL REAL X(N),FVEC(M),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN C ********** C C SUBROUTINE LMDER1 C C THE PURPOSE OF LMDER1 IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF THE C LEVENBERG-MARQUARDT ALGORITHM. THIS IS DONE BY USING THE MORE C GENERAL LEAST-SQUARES SOLVER LMDER. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS AND THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMDER1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL,INFO, C IPVT,WA,LWA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE JACOBIAN. FCN MUST C BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER C CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) C INTEGER M,N,LDFJAC,IFLAG C REAL X(N),FVEC(M),FJAC(LDFJAC,N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. C IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND C RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMDER1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT M BY N ARRAY. THE UPPER N BY N SUBMATRIX C OF FJAC CONTAINS AN UPPER TRIANGULAR MATRIX R WITH C DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE SUCH THAT C C T T T C P *(JAC *JAC)*P = R *R, C C WHERE P IS A PERMUTATION MATRIX AND JAC IS THE FINAL C CALCULATED JACOBIAN. COLUMN J OF P IS COLUMN IPVT(J) C (SEE BELOW) OF THE IDENTITY MATRIX. THE LOWER TRAPEZOIDAL C PART OF FJAC CONTAINS INFORMATION GENERATED DURING C THE COMPUTATION OF R. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C TOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION OCCURS C WHEN THE ALGORITHM ESTIMATES EITHER THAT THE RELATIVE C ERROR IN THE SUM OF SQUARES IS AT MOST TOL OR THAT C THE RELATIVE ERROR BETWEEN X AND THE SOLUTION IS AT C MOST TOL. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C IN THE SUM OF SQUARES IS AT MOST TOL. C C INFO = 2 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 FVEC IS ORTHOGONAL TO THE COLUMNS OF THE C JACOBIAN TO MACHINE PRECISION. C C INFO = 5 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED 100*(N+1). C C INFO = 6 TOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 TOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH N. IPVT C DEFINES A PERMUTATION MATRIX P SUCH THAT JAC*P = Q*R, C WHERE JAC IS THE FINAL CALCULATED JACOBIAN, Q IS C ORTHOGONAL (NOT STORED), AND R IS UPPER TRIANGULAR C WITH DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C WA IS A WORK ARRAY OF LENGTH LWA. C C LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN 5*N+M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... LMDER C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER MAXFEV,MODE,NFEV,NJEV,NPRINT REAL FACTOR,FTOL,GTOL,XTOL,ZERO DATA FACTOR,ZERO /1.0E2,0.0E0/ INFO = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. LDFJAC .LT. M .OR. TOL .LT. ZERO * .OR. LWA .LT. 5*N + M) GO TO 10 C C CALL LMDER. C MAXFEV = 100*(N + 1) FTOL = TOL XTOL = TOL GTOL = ZERO MODE = 1 NPRINT = 0 CALL LMDER(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL,MAXFEV, * WA(1),MODE,FACTOR,NPRINT,INFO,NFEV,NJEV,IPVT,WA(N+1), * WA(2*N+1),WA(3*N+1),WA(4*N+1),WA(5*N+1)) IF (INFO .EQ. 8) INFO = 4 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE LMDER1. C END SUBROUTINE LMDIF(FCN,M,N,X,FVEC,FTOL,XTOL,GTOL,MAXFEV,EPSFCN, * DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,MAXFEV,MODE,NPRINT,INFO,NFEV,LDFJAC INTEGER IPVT(N) REAL FTOL,XTOL,GTOL,EPSFCN,FACTOR REAL X(N),FVEC(M),DIAG(N),FJAC(LDFJAC,N),QTF(N),WA1(N),WA2(N), * WA3(N),WA4(M) EXTERNAL FCN C ********** C C SUBROUTINE LMDIF C C THE PURPOSE OF LMDIF IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF C THE LEVENBERG-MARQUARDT ALGORITHM. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS. THE JACOBIAN IS C THEN CALCULATED BY A FORWARD-DIFFERENCE APPROXIMATION. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMDIF(FCN,M,N,X,FVEC,FTOL,XTOL,GTOL,MAXFEV,EPSFCN, C DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,FJAC, C LDFJAC,IPVT,QTF,WA1,WA2,WA3,WA4) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,IFLAG) C INTEGER M,N,IFLAG C REAL X(N),FVEC(M) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMDIF. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN BOTH THE ACTUAL AND PREDICTED RELATIVE C REDUCTIONS IN THE SUM OF SQUARES ARE AT MOST FTOL. C THEREFORE, FTOL MEASURES THE RELATIVE ERROR DESIRED C IN THE SUM OF SQUARES. C C XTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE C ITERATES IS AT MOST XTOL. THEREFORE, XTOL MEASURES THE C RELATIVE ERROR DESIRED IN THE APPROXIMATE SOLUTION. C C GTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE COSINE OF THE ANGLE BETWEEN FVEC AND C ANY COLUMN OF THE JACOBIAN IS AT MOST GTOL IN ABSOLUTE C VALUE. THEREFORE, GTOL MEASURES THE ORTHOGONALITY C DESIRED BETWEEN THE FUNCTION VECTOR AND THE COLUMNS C OF THE JACOBIAN. C C MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION C OCCURS WHEN THE NUMBER OF CALLS TO FCN IS AT LEAST C MAXFEV BY THE END OF AN ITERATION. C C EPSFCN IS AN INPUT VARIABLE USED IN DETERMINING A SUITABLE C STEP LENGTH FOR THE FORWARD-DIFFERENCE APPROXIMATION. THIS C APPROXIMATION ASSUMES THAT THE RELATIVE ERRORS IN THE C FUNCTIONS ARE OF THE ORDER OF EPSFCN. IF EPSFCN IS LESS C THAN THE MACHINE PRECISION, IT IS ASSUMED THAT THE RELATIVE C ERRORS IN THE FUNCTIONS ARE OF THE ORDER OF THE MACHINE C PRECISION. C C DIAG IS AN ARRAY OF LENGTH N. IF MODE = 1 (SEE C BELOW), DIAG IS INTERNALLY SET. IF MODE = 2, DIAG C MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS C MULTIPLICATIVE SCALE FACTORS FOR THE VARIABLES. C C MODE IS AN INTEGER INPUT VARIABLE. IF MODE = 1, THE C VARIABLES WILL BE SCALED INTERNALLY. IF MODE = 2, C THE SCALING IS SPECIFIED BY THE INPUT DIAG. OTHER C VALUES OF MODE ARE EQUIVALENT TO MODE = 1. C C FACTOR IS A POSITIVE INPUT VARIABLE USED IN DETERMINING THE C INITIAL STEP BOUND. THIS BOUND IS SET TO THE PRODUCT OF C FACTOR AND THE EUCLIDEAN NORM OF DIAG*X IF NONZERO, OR ELSE C TO FACTOR ITSELF. IN MOST CASES FACTOR SHOULD LIE IN THE C INTERVAL (.1,100.). 100. IS A GENERALLY RECOMMENDED VALUE. C C NPRINT IS AN INTEGER INPUT VARIABLE THAT ENABLES CONTROLLED C PRINTING OF ITERATES IF IT IS POSITIVE. IN THIS CASE, C FCN IS CALLED WITH IFLAG = 0 AT THE BEGINNING OF THE FIRST C ITERATION AND EVERY NPRINT ITERATIONS THEREAFTER AND C IMMEDIATELY PRIOR TO RETURN, WITH X AND FVEC AVAILABLE C FOR PRINTING. IF NPRINT IS NOT POSITIVE, NO SPECIAL CALLS C OF FCN WITH IFLAG = 0 ARE MADE. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 BOTH ACTUAL AND PREDICTED RELATIVE REDUCTIONS C IN THE SUM OF SQUARES ARE AT MOST FTOL. C C INFO = 2 RELATIVE ERROR BETWEEN TWO CONSECUTIVE ITERATES C IS AT MOST XTOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 THE COSINE OF THE ANGLE BETWEEN FVEC AND ANY C COLUMN OF THE JACOBIAN IS AT MOST GTOL IN C ABSOLUTE VALUE. C C INFO = 5 NUMBER OF CALLS TO FCN HAS REACHED OR C EXCEEDED MAXFEV. C C INFO = 6 FTOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 XTOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 8 GTOL IS TOO SMALL. FVEC IS ORTHOGONAL TO THE C COLUMNS OF THE JACOBIAN TO MACHINE PRECISION. C C NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN. C C FJAC IS AN OUTPUT M BY N ARRAY. THE UPPER N BY N SUBMATRIX C OF FJAC CONTAINS AN UPPER TRIANGULAR MATRIX R WITH C DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE SUCH THAT C C T T T C P *(JAC *JAC)*P = R *R, C C WHERE P IS A PERMUTATION MATRIX AND JAC IS THE FINAL C CALCULATED JACOBIAN. COLUMN J OF P IS COLUMN IPVT(J) C (SEE BELOW) OF THE IDENTITY MATRIX. THE LOWER TRAPEZOIDAL C PART OF FJAC CONTAINS INFORMATION GENERATED DURING C THE COMPUTATION OF R. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH N. IPVT C DEFINES A PERMUTATION MATRIX P SUCH THAT JAC*P = Q*R, C WHERE JAC IS THE FINAL CALCULATED JACOBIAN, Q IS C ORTHOGONAL (NOT STORED), AND R IS UPPER TRIANGULAR C WITH DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C QTF IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FIRST N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*FVEC. C C WA1, WA2, AND WA3 ARE WORK ARRAYS OF LENGTH N. C C WA4 IS A WORK ARRAY OF LENGTH M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... SPMPAR,ENORM,FDJAC2,LMPAR,QRFAC C C FORTRAN-SUPPLIED ... ABS,AMAX1,AMIN1,SQRT,MOD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IFLAG,ITER,J,L REAL ACTRED,DELTA,DIRDER,EPSMCH,FNORM,FNORM1,GNORM,ONE,PAR, * PNORM,PRERED,P1,P5,P25,P75,P0001,RATIO,SUM,TEMP,TEMP1, * TEMP2,XNORM,ZERO REAL SPMPAR,ENORM DATA ONE,P1,P5,P25,P75,P0001,ZERO * /1.0E0,1.0E-1,5.0E-1,2.5E-1,7.5E-1,1.0E-4,0.0E0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = SPMPAR(1) C INFO = 0 IFLAG = 0 NFEV = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. LDFJAC .LT. M * .OR. FTOL .LT. ZERO .OR. XTOL .LT. ZERO .OR. GTOL .LT. ZERO * .OR. MAXFEV .LE. 0 .OR. FACTOR .LE. ZERO) GO TO 300 IF (MODE .NE. 2) GO TO 20 DO 10 J = 1, N IF (DIAG(J) .LE. ZERO) GO TO 300 10 CONTINUE 20 CONTINUE C C EVALUATE THE FUNCTION AT THE STARTING POINT C AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,X,FVEC,IFLAG) NFEV = 1 IF (IFLAG .LT. 0) GO TO 300 FNORM = ENORM(M,FVEC) C C INITIALIZE LEVENBERG-MARQUARDT PARAMETER AND ITERATION COUNTER. C PAR = ZERO ITER = 1 C C BEGINNING OF THE OUTER LOOP. C 30 CONTINUE C C CALCULATE THE JACOBIAN MATRIX. C IFLAG = 2 CALL FDJAC2(FCN,M,N,X,FVEC,FJAC,LDFJAC,IFLAG,EPSFCN,WA4) NFEV = NFEV + N IF (IFLAG .LT. 0) GO TO 300 C C IF REQUESTED, CALL FCN TO ENABLE PRINTING OF ITERATES. C IF (NPRINT .LE. 0) GO TO 40 IFLAG = 0 IF (MOD(ITER-1,NPRINT) .EQ. 0) CALL FCN(M,N,X,FVEC,IFLAG) IF (IFLAG .LT. 0) GO TO 300 40 CONTINUE C C COMPUTE THE QR FACTORIZATION OF THE JACOBIAN. C CALL QRFAC(M,N,FJAC,LDFJAC,.TRUE.,IPVT,N,WA1,WA2,WA3) C C ON THE FIRST ITERATION AND IF MODE IS 1, SCALE ACCORDING C TO THE NORMS OF THE COLUMNS OF THE INITIAL JACOBIAN. C IF (ITER .NE. 1) GO TO 80 IF (MODE .EQ. 2) GO TO 60 DO 50 J = 1, N DIAG(J) = WA2(J) IF (WA2(J) .EQ. ZERO) DIAG(J) = ONE 50 CONTINUE 60 CONTINUE C C ON THE FIRST ITERATION, CALCULATE THE NORM OF THE SCALED X C AND INITIALIZE THE STEP BOUND DELTA. C DO 70 J = 1, N WA3(J) = DIAG(J)*X(J) 70 CONTINUE XNORM = ENORM(N,WA3) DELTA = FACTOR*XNORM IF (DELTA .EQ. ZERO) DELTA = FACTOR 80 CONTINUE C C FORM (Q TRANSPOSE)*FVEC AND STORE THE FIRST N COMPONENTS IN C QTF. C DO 90 I = 1, M WA4(I) = FVEC(I) 90 CONTINUE DO 130 J = 1, N IF (FJAC(J,J) .EQ. ZERO) GO TO 120 SUM = ZERO DO 100 I = J, M SUM = SUM + FJAC(I,J)*WA4(I) 100 CONTINUE TEMP = -SUM/FJAC(J,J) DO 110 I = J, M WA4(I) = WA4(I) + FJAC(I,J)*TEMP 110 CONTINUE 120 CONTINUE FJAC(J,J) = WA1(J) QTF(J) = WA4(J) 130 CONTINUE C C COMPUTE THE NORM OF THE SCALED GRADIENT. C GNORM = ZERO IF (FNORM .EQ. ZERO) GO TO 170 DO 160 J = 1, N L = IPVT(J) IF (WA2(L) .EQ. ZERO) GO TO 150 SUM = ZERO DO 140 I = 1, J SUM = SUM + FJAC(I,J)*(QTF(I)/FNORM) 140 CONTINUE GNORM = AMAX1(GNORM,ABS(SUM/WA2(L))) 150 CONTINUE 160 CONTINUE 170 CONTINUE C C TEST FOR CONVERGENCE OF THE GRADIENT NORM. C IF (GNORM .LE. GTOL) INFO = 4 IF (INFO .NE. 0) GO TO 300 C C RESCALE IF NECESSARY. C IF (MODE .EQ. 2) GO TO 190 DO 180 J = 1, N DIAG(J) = AMAX1(DIAG(J),WA2(J)) 180 CONTINUE 190 CONTINUE C C BEGINNING OF THE INNER LOOP. C 200 CONTINUE C C DETERMINE THE LEVENBERG-MARQUARDT PARAMETER. C CALL LMPAR(N,FJAC,LDFJAC,IPVT,DIAG,QTF,DELTA,PAR,WA1,WA2, * WA3,WA4) C C STORE THE DIRECTION P AND X + P. CALCULATE THE NORM OF P. C DO 210 J = 1, N WA1(J) = -WA1(J) WA2(J) = X(J) + WA1(J) WA3(J) = DIAG(J)*WA1(J) 210 CONTINUE PNORM = ENORM(N,WA3) C C ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND. C IF (ITER .EQ. 1) DELTA = AMIN1(DELTA,PNORM) C C EVALUATE THE FUNCTION AT X + P AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,WA2,WA4,IFLAG) NFEV = NFEV + 1 IF (IFLAG .LT. 0) GO TO 300 FNORM1 = ENORM(M,WA4) C C COMPUTE THE SCALED ACTUAL REDUCTION. C ACTRED = -ONE IF (P1*FNORM1 .LT. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2 C C COMPUTE THE SCALED PREDICTED REDUCTION AND C THE SCALED DIRECTIONAL DERIVATIVE. C DO 230 J = 1, N WA3(J) = ZERO L = IPVT(J) TEMP = WA1(L) DO 220 I = 1, J WA3(I) = WA3(I) + FJAC(I,J)*TEMP 220 CONTINUE 230 CONTINUE TEMP1 = ENORM(N,WA3)/FNORM TEMP2 = (SQRT(PAR)*PNORM)/FNORM PRERED = TEMP1**2 + TEMP2**2/P5 DIRDER = -(TEMP1**2 + TEMP2**2) C C COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED C REDUCTION. C RATIO = ZERO IF (PRERED .NE. ZERO) RATIO = ACTRED/PRERED C C UPDATE THE STEP BOUND. C IF (RATIO .GT. P25) GO TO 240 IF (ACTRED .GE. ZERO) TEMP = P5 IF (ACTRED .LT. ZERO) * TEMP = P5*DIRDER/(DIRDER + P5*ACTRED) IF (P1*FNORM1 .GE. FNORM .OR. TEMP .LT. P1) TEMP = P1 DELTA = TEMP*AMIN1(DELTA,PNORM/P1) PAR = PAR/TEMP GO TO 260 240 CONTINUE IF (PAR .NE. ZERO .AND. RATIO .LT. P75) GO TO 250 DELTA = PNORM/P5 PAR = P5*PAR 250 CONTINUE 260 CONTINUE C C TEST FOR SUCCESSFUL ITERATION. C IF (RATIO .LT. P0001) GO TO 290 C C SUCCESSFUL ITERATION. UPDATE X, FVEC, AND THEIR NORMS. C DO 270 J = 1, N X(J) = WA2(J) WA2(J) = DIAG(J)*X(J) 270 CONTINUE DO 280 I = 1, M FVEC(I) = WA4(I) 280 CONTINUE XNORM = ENORM(N,WA2) FNORM = FNORM1 ITER = ITER + 1 290 CONTINUE C C TESTS FOR CONVERGENCE. C IF (ABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE) INFO = 1 IF (DELTA .LE. XTOL*XNORM) INFO = 2 IF (ABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE .AND. INFO .EQ. 2) INFO = 3 IF (INFO .NE. 0) GO TO 300 C C TESTS FOR TERMINATION AND STRINGENT TOLERANCES. C IF (NFEV .GE. MAXFEV) INFO = 5 IF (ABS(ACTRED) .LE. EPSMCH .AND. PRERED .LE. EPSMCH * .AND. P5*RATIO .LE. ONE) INFO = 6 IF (DELTA .LE. EPSMCH*XNORM) INFO = 7 IF (GNORM .LE. EPSMCH) INFO = 8 IF (INFO .NE. 0) GO TO 300 C C END OF THE INNER LOOP. REPEAT IF ITERATION UNSUCCESSFUL. C IF (RATIO .LT. P0001) GO TO 200 C C END OF THE OUTER LOOP. C GO TO 30 300 CONTINUE C C TERMINATION, EITHER NORMAL OR USER IMPOSED. C IF (IFLAG .LT. 0) INFO = IFLAG IFLAG = 0 IF (NPRINT .GT. 0) CALL FCN(M,N,X,FVEC,IFLAG) RETURN C C LAST CARD OF SUBROUTINE LMDIF. C END SUBROUTINE LMDIF1(FCN,M,N,X,FVEC,TOL,INFO,IWA,WA,LWA) INTEGER M,N,INFO,LWA INTEGER IWA(N) REAL TOL REAL X(N),FVEC(M),WA(LWA) EXTERNAL FCN C ********** C C SUBROUTINE LMDIF1 C C THE PURPOSE OF LMDIF1 IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF THE C LEVENBERG-MARQUARDT ALGORITHM. THIS IS DONE BY USING THE MORE C GENERAL LEAST-SQUARES SOLVER LMDIF. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS. THE JACOBIAN IS C THEN CALCULATED BY A FORWARD-DIFFERENCE APPROXIMATION. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMDIF1(FCN,M,N,X,FVEC,TOL,INFO,IWA,WA,LWA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,IFLAG) C INTEGER M,N,IFLAG C REAL X(N),FVEC(M) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMDIF1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C TOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION OCCURS C WHEN THE ALGORITHM ESTIMATES EITHER THAT THE RELATIVE C ERROR IN THE SUM OF SQUARES IS AT MOST TOL OR THAT C THE RELATIVE ERROR BETWEEN X AND THE SOLUTION IS AT C MOST TOL. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C IN THE SUM OF SQUARES IS AT MOST TOL. C C INFO = 2 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 FVEC IS ORTHOGONAL TO THE COLUMNS OF THE C JACOBIAN TO MACHINE PRECISION. C C INFO = 5 NUMBER OF CALLS TO FCN HAS REACHED OR C EXCEEDED 200*(N+1). C C INFO = 6 TOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 TOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C IWA IS AN INTEGER WORK ARRAY OF LENGTH N. C C WA IS A WORK ARRAY OF LENGTH LWA. C C LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C M*N+5*N+M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... LMDIF C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER MAXFEV,MODE,MP5N,NFEV,NPRINT REAL EPSFCN,FACTOR,FTOL,GTOL,XTOL,ZERO DATA FACTOR,ZERO /1.0E2,0.0E0/ INFO = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. TOL .LT. ZERO * .OR. LWA .LT. M*N + 5*N + M) GO TO 10 C C CALL LMDIF. C MAXFEV = 200*(N + 1) FTOL = TOL XTOL = TOL GTOL = ZERO EPSFCN = ZERO MODE = 1 NPRINT = 0 MP5N = M + 5*N CALL LMDIF(FCN,M,N,X,FVEC,FTOL,XTOL,GTOL,MAXFEV,EPSFCN,WA(1), * MODE,FACTOR,NPRINT,INFO,NFEV,WA(MP5N+1),M,IWA, * WA(N+1),WA(2*N+1),WA(3*N+1),WA(4*N+1),WA(5*N+1)) IF (INFO .EQ. 8) INFO = 4 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE LMDIF1. C END SUBROUTINE LMPAR(N,R,LDR,IPVT,DIAG,QTB,DELTA,PAR,X,SDIAG,WA1, * WA2) INTEGER N,LDR INTEGER IPVT(N) REAL DELTA,PAR REAL R(LDR,N),DIAG(N),QTB(N),X(N),SDIAG(N),WA1(N),WA2(N) C ********** C C SUBROUTINE LMPAR C C GIVEN AN M BY N MATRIX A, AN N BY N NONSINGULAR DIAGONAL C MATRIX D, AN M-VECTOR B, AND A POSITIVE NUMBER DELTA, C THE PROBLEM IS TO DETERMINE A VALUE FOR THE PARAMETER C PAR SUCH THAT IF X SOLVES THE SYSTEM C C A*X = B , SQRT(PAR)*D*X = 0 , C C IN THE LEAST SQUARES SENSE, AND DXNORM IS THE EUCLIDEAN C NORM OF D*X, THEN EITHER PAR IS ZERO AND C C (DXNORM-DELTA) .LE. 0.1*DELTA , C C OR PAR IS POSITIVE AND C C ABS(DXNORM-DELTA) .LE. 0.1*DELTA . C C THIS SUBROUTINE COMPLETES THE SOLUTION OF THE PROBLEM C IF IT IS PROVIDED WITH THE NECESSARY INFORMATION FROM THE C QR FACTORIZATION, WITH COLUMN PIVOTING, OF A. THAT IS, IF C A*P = Q*R, WHERE P IS A PERMUTATION MATRIX, Q HAS ORTHOGONAL C COLUMNS, AND R IS AN UPPER TRIANGULAR MATRIX WITH DIAGONAL C ELEMENTS OF NONINCREASING MAGNITUDE, THEN LMPAR EXPECTS C THE FULL UPPER TRIANGLE OF R, THE PERMUTATION MATRIX P, C AND THE FIRST N COMPONENTS OF (Q TRANSPOSE)*B. ON OUTPUT C LMPAR ALSO PROVIDES AN UPPER TRIANGULAR MATRIX S SUCH THAT C C T T T C P *(A *A + PAR*D*D)*P = S *S . C C S IS EMPLOYED WITHIN LMPAR AND MAY BE OF SEPARATE INTEREST. C C ONLY A FEW ITERATIONS ARE GENERALLY NEEDED FOR CONVERGENCE C OF THE ALGORITHM. IF, HOWEVER, THE LIMIT OF 10 ITERATIONS C IS REACHED, THEN THE OUTPUT PAR WILL CONTAIN THE BEST C VALUE OBTAINED SO FAR. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMPAR(N,R,LDR,IPVT,DIAG,QTB,DELTA,PAR,X,SDIAG, C WA1,WA2) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE ORDER OF R. C C R IS AN N BY N ARRAY. ON INPUT THE FULL UPPER TRIANGLE C MUST CONTAIN THE FULL UPPER TRIANGLE OF THE MATRIX R. C ON OUTPUT THE FULL UPPER TRIANGLE IS UNALTERED, AND THE C STRICT LOWER TRIANGLE CONTAINS THE STRICT UPPER TRIANGLE C (TRANSPOSED) OF THE UPPER TRIANGULAR MATRIX S. C C LDR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY R. C C IPVT IS AN INTEGER INPUT ARRAY OF LENGTH N WHICH DEFINES THE C PERMUTATION MATRIX P SUCH THAT A*P = Q*R. COLUMN J OF P C IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C DIAG IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE C DIAGONAL ELEMENTS OF THE MATRIX D. C C QTB IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE FIRST C N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*B. C C DELTA IS A POSITIVE INPUT VARIABLE WHICH SPECIFIES AN UPPER C BOUND ON THE EUCLIDEAN NORM OF D*X. C C PAR IS A NONNEGATIVE VARIABLE. ON INPUT PAR CONTAINS AN C INITIAL ESTIMATE OF THE LEVENBERG-MARQUARDT PARAMETER. C ON OUTPUT PAR CONTAINS THE FINAL ESTIMATE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE LEAST C SQUARES SOLUTION OF THE SYSTEM A*X = B, SQRT(PAR)*D*X = 0, C FOR THE OUTPUT PAR. C C SDIAG IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C DIAGONAL ELEMENTS OF THE UPPER TRIANGULAR MATRIX S. C C WA1 AND WA2 ARE WORK ARRAYS OF LENGTH N. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... SPMPAR,ENORM,QRSOLV C C FORTRAN-SUPPLIED ... ABS,AMAX1,AMIN1,SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,ITER,J,JM1,JP1,K,L,NSING REAL DXNORM,DWARF,FP,GNORM,PARC,PARL,PARU,P1,P001,SUM,TEMP,ZERO REAL SPMPAR,ENORM DATA P1,P001,ZERO /1.0E-1,1.0E-3,0.0E0/ C C DWARF IS THE SMALLEST POSITIVE MAGNITUDE. C DWARF = SPMPAR(2) C C COMPUTE AND STORE IN X THE GAUSS-NEWTON DIRECTION. IF THE C JACOBIAN IS RANK-DEFICIENT, OBTAIN A LEAST SQUARES SOLUTION. C NSING = N DO 10 J = 1, N WA1(J) = QTB(J) IF (R(J,J) .EQ. ZERO .AND. NSING .EQ. N) NSING = J - 1 IF (NSING .LT. N) WA1(J) = ZERO 10 CONTINUE IF (NSING .LT. 1) GO TO 50 DO 40 K = 1, NSING J = NSING - K + 1 WA1(J) = WA1(J)/R(J,J) TEMP = WA1(J) JM1 = J - 1 IF (JM1 .LT. 1) GO TO 30 DO 20 I = 1, JM1 WA1(I) = WA1(I) - R(I,J)*TEMP 20 CONTINUE 30 CONTINUE 40 CONTINUE 50 CONTINUE DO 60 J = 1, N L = IPVT(J) X(L) = WA1(J) 60 CONTINUE C C INITIALIZE THE ITERATION COUNTER. C EVALUATE THE FUNCTION AT THE ORIGIN, AND TEST C FOR ACCEPTANCE OF THE GAUSS-NEWTON DIRECTION. C ITER = 0 DO 70 J = 1, N WA2(J) = DIAG(J)*X(J) 70 CONTINUE DXNORM = ENORM(N,WA2) FP = DXNORM - DELTA IF (FP .LE. P1*DELTA) GO TO 220 C C IF THE JACOBIAN IS NOT RANK DEFICIENT, THE NEWTON C STEP PROVIDES A LOWER BOUND, PARL, FOR THE ZERO OF C THE FUNCTION. OTHERWISE SET THIS BOUND TO ZERO. C PARL = ZERO IF (NSING .LT. N) GO TO 120 DO 80 J = 1, N L = IPVT(J) WA1(J) = DIAG(L)*(WA2(L)/DXNORM) 80 CONTINUE DO 110 J = 1, N SUM = ZERO JM1 = J - 1 IF (JM1 .LT. 1) GO TO 100 DO 90 I = 1, JM1 SUM = SUM + R(I,J)*WA1(I) 90 CONTINUE 100 CONTINUE WA1(J) = (WA1(J) - SUM)/R(J,J) 110 CONTINUE TEMP = ENORM(N,WA1) PARL = ((FP/DELTA)/TEMP)/TEMP 120 CONTINUE C C CALCULATE AN UPPER BOUND, PARU, FOR THE ZERO OF THE FUNCTION. C DO 140 J = 1, N SUM = ZERO DO 130 I = 1, J SUM = SUM + R(I,J)*QTB(I) 130 CONTINUE L = IPVT(J) WA1(J) = SUM/DIAG(L) 140 CONTINUE GNORM = ENORM(N,WA1) PARU = GNORM/DELTA IF (PARU .EQ. ZERO) PARU = DWARF/AMIN1(DELTA,P1) C C IF THE INPUT PAR LIES OUTSIDE OF THE INTERVAL (PARL,PARU), C SET PAR TO THE CLOSER ENDPOINT. C PAR = AMAX1(PAR,PARL) PAR = AMIN1(PAR,PARU) IF (PAR .EQ. ZERO) PAR = GNORM/DXNORM C C BEGINNING OF AN ITERATION. C 150 CONTINUE ITER = ITER + 1 C C EVALUATE THE FUNCTION AT THE CURRENT VALUE OF PAR. C IF (PAR .EQ. ZERO) PAR = AMAX1(DWARF,P001*PARU) TEMP = SQRT(PAR) DO 160 J = 1, N WA1(J) = TEMP*DIAG(J) 160 CONTINUE CALL QRSOLV(N,R,LDR,IPVT,WA1,QTB,X,SDIAG,WA2) DO 170 J = 1, N WA2(J) = DIAG(J)*X(J) 170 CONTINUE DXNORM = ENORM(N,WA2) TEMP = FP FP = DXNORM - DELTA C C IF THE FUNCTION IS SMALL ENOUGH, ACCEPT THE CURRENT VALUE C OF PAR. ALSO TEST FOR THE EXCEPTIONAL CASES WHERE PARL C IS ZERO OR THE NUMBER OF ITERATIONS HAS REACHED 10. C IF (ABS(FP) .LE. P1*DELTA * .OR. PARL .EQ. ZERO .AND. FP .LE. TEMP * .AND. TEMP .LT. ZERO .OR. ITER .EQ. 10) GO TO 220 C C COMPUTE THE NEWTON CORRECTION. C DO 180 J = 1, N L = IPVT(J) WA1(J) = DIAG(L)*(WA2(L)/DXNORM) 180 CONTINUE DO 210 J = 1, N WA1(J) = WA1(J)/SDIAG(J) TEMP = WA1(J) JP1 = J + 1 IF (N .LT. JP1) GO TO 200 DO 190 I = JP1, N WA1(I) = WA1(I) - R(I,J)*TEMP 190 CONTINUE 200 CONTINUE 210 CONTINUE TEMP = ENORM(N,WA1) PARC = ((FP/DELTA)/TEMP)/TEMP C C DEPENDING ON THE SIGN OF THE FUNCTION, UPDATE PARL OR PARU. C IF (FP .GT. ZERO) PARL = AMAX1(PARL,PAR) IF (FP .LT. ZERO) PARU = AMIN1(PARU,PAR) C C COMPUTE AN IMPROVED ESTIMATE FOR PAR. C PAR = AMAX1(PARL,PAR+PARC) C C END OF AN ITERATION. C GO TO 150 220 CONTINUE C C TERMINATION. C IF (ITER .EQ. 0) PAR = ZERO RETURN C C LAST CARD OF SUBROUTINE LMPAR. C END SUBROUTINE LMSTR(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV INTEGER IPVT(N) LOGICAL SING REAL FTOL,XTOL,GTOL,FACTOR REAL X(N),FVEC(M),FJAC(LDFJAC,N),DIAG(N),QTF(N),WA1(N),WA2(N), * WA3(N),WA4(M) C ********** C C SUBROUTINE LMSTR C C THE PURPOSE OF LMSTR IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF C THE LEVENBERG-MARQUARDT ALGORITHM WHICH USES MINIMAL STORAGE. C THE USER MUST PROVIDE A SUBROUTINE WHICH CALCULATES THE C FUNCTIONS AND THE ROWS OF THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMSTR(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, C MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV, C NJEV,IPVT,QTF,WA1,WA2,WA3,WA4) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE ROWS OF THE JACOBIAN. C FCN MUST BE DECLARED IN AN EXTERNAL STATEMENT IN THE C USER CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) C INTEGER M,N,IFLAG C REAL X(N),FVEC(M),FJROW(N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C IF IFLAG = I CALCULATE THE (I-1)-ST ROW OF THE C JACOBIAN AT X AND RETURN THIS VECTOR IN FJROW. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMSTR. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT N BY N ARRAY. THE UPPER TRIANGLE OF FJAC C CONTAINS AN UPPER TRIANGULAR MATRIX R SUCH THAT C C T T T C P *(JAC *JAC)*P = R *R, C C WHERE P IS A PERMUTATION MATRIX AND JAC IS THE FINAL C CALCULATED JACOBIAN. COLUMN J OF P IS COLUMN IPVT(J) C (SEE BELOW) OF THE IDENTITY MATRIX. THE LOWER TRIANGULAR C PART OF FJAC CONTAINS INFORMATION GENERATED DURING C THE COMPUTATION OF R. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C FTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN BOTH THE ACTUAL AND PREDICTED RELATIVE C REDUCTIONS IN THE SUM OF SQUARES ARE AT MOST FTOL. C THEREFORE, FTOL MEASURES THE RELATIVE ERROR DESIRED C IN THE SUM OF SQUARES. C C XTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE C ITERATES IS AT MOST XTOL. THEREFORE, XTOL MEASURES THE C RELATIVE ERROR DESIRED IN THE APPROXIMATE SOLUTION. C C GTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE COSINE OF THE ANGLE BETWEEN FVEC AND C ANY COLUMN OF THE JACOBIAN IS AT MOST GTOL IN ABSOLUTE C VALUE. THEREFORE, GTOL MEASURES THE ORTHOGONALITY C DESIRED BETWEEN THE FUNCTION VECTOR AND THE COLUMNS C OF THE JACOBIAN. C C MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION C OCCURS WHEN THE NUMBER OF CALLS TO FCN WITH IFLAG = 1 C HAS REACHED MAXFEV. C C DIAG IS AN ARRAY OF LENGTH N. IF MODE = 1 (SEE C BELOW), DIAG IS INTERNALLY SET. IF MODE = 2, DIAG C MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS C MULTIPLICATIVE SCALE FACTORS FOR THE VARIABLES. C C MODE IS AN INTEGER INPUT VARIABLE. IF MODE = 1, THE C VARIABLES WILL BE SCALED INTERNALLY. IF MODE = 2, C THE SCALING IS SPECIFIED BY THE INPUT DIAG. OTHER C VALUES OF MODE ARE EQUIVALENT TO MODE = 1. C C FACTOR IS A POSITIVE INPUT VARIABLE USED IN DETERMINING THE C INITIAL STEP BOUND. THIS BOUND IS SET TO THE PRODUCT OF C FACTOR AND THE EUCLIDEAN NORM OF DIAG*X IF NONZERO, OR ELSE C TO FACTOR ITSELF. IN MOST CASES FACTOR SHOULD LIE IN THE C INTERVAL (.1,100.). 100. IS A GENERALLY RECOMMENDED VALUE. C C NPRINT IS AN INTEGER INPUT VARIABLE THAT ENABLES CONTROLLED C PRINTING OF ITERATES IF IT IS POSITIVE. IN THIS CASE, C FCN IS CALLED WITH IFLAG = 0 AT THE BEGINNING OF THE FIRST C ITERATION AND EVERY NPRINT ITERATIONS THEREAFTER AND C IMMEDIATELY PRIOR TO RETURN, WITH X AND FVEC AVAILABLE C FOR PRINTING. IF NPRINT IS NOT POSITIVE, NO SPECIAL CALLS C OF FCN WITH IFLAG = 0 ARE MADE. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 BOTH ACTUAL AND PREDICTED RELATIVE REDUCTIONS C IN THE SUM OF SQUARES ARE AT MOST FTOL. C C INFO = 2 RELATIVE ERROR BETWEEN TWO CONSECUTIVE ITERATES C IS AT MOST XTOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 THE COSINE OF THE ANGLE BETWEEN FVEC AND ANY C COLUMN OF THE JACOBIAN IS AT MOST GTOL IN C ABSOLUTE VALUE. C C INFO = 5 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED MAXFEV. C C INFO = 6 FTOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 XTOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 8 GTOL IS TOO SMALL. FVEC IS ORTHOGONAL TO THE C COLUMNS OF THE JACOBIAN TO MACHINE PRECISION. C C NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 1. C C NJEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 2. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH N. IPVT C DEFINES A PERMUTATION MATRIX P SUCH THAT JAC*P = Q*R, C WHERE JAC IS THE FINAL CALCULATED JACOBIAN, Q IS C ORTHOGONAL (NOT STORED), AND R IS UPPER TRIANGULAR. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C QTF IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FIRST N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*FVEC. C C WA1, WA2, AND WA3 ARE WORK ARRAYS OF LENGTH N. C C WA4 IS A WORK ARRAY OF LENGTH M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... SPMPAR,ENORM,LMPAR,QRFAC,RWUPDT C C FORTRAN-SUPPLIED ... ABS,AMAX1,AMIN1,SQRT,MOD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, DUDLEY V. GOETSCHEL, KENNETH E. HILLSTROM, C JORGE J. MORE C C ********** INTEGER I,IFLAG,ITER,J,L REAL ACTRED,DELTA,DIRDER,EPSMCH,FNORM,FNORM1,GNORM,ONE,PAR, * PNORM,PRERED,P1,P5,P25,P75,P0001,RATIO,SUM,TEMP,TEMP1, * TEMP2,XNORM,ZERO REAL SPMPAR,ENORM DATA ONE,P1,P5,P25,P75,P0001,ZERO * /1.0E0,1.0E-1,5.0E-1,2.5E-1,7.5E-1,1.0E-4,0.0E0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = SPMPAR(1) C INFO = 0 IFLAG = 0 NFEV = 0 NJEV = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. LDFJAC .LT. N * .OR. FTOL .LT. ZERO .OR. XTOL .LT. ZERO .OR. GTOL .LT. ZERO * .OR. MAXFEV .LE. 0 .OR. FACTOR .LE. ZERO) GO TO 340 IF (MODE .NE. 2) GO TO 20 DO 10 J = 1, N IF (DIAG(J) .LE. ZERO) GO TO 340 10 CONTINUE 20 CONTINUE C C EVALUATE THE FUNCTION AT THE STARTING POINT C AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,X,FVEC,WA3,IFLAG) NFEV = 1 IF (IFLAG .LT. 0) GO TO 340 FNORM = ENORM(M,FVEC) C C INITIALIZE LEVENBERG-MARQUARDT PARAMETER AND ITERATION COUNTER. C PAR = ZERO ITER = 1 C C BEGINNING OF THE OUTER LOOP. C 30 CONTINUE C C IF REQUESTED, CALL FCN TO ENABLE PRINTING OF ITERATES. C IF (NPRINT .LE. 0) GO TO 40 IFLAG = 0 IF (MOD(ITER-1,NPRINT) .EQ. 0) CALL FCN(M,N,X,FVEC,WA3,IFLAG) IF (IFLAG .LT. 0) GO TO 340 40 CONTINUE C C COMPUTE THE QR FACTORIZATION OF THE JACOBIAN MATRIX C CALCULATED ONE ROW AT A TIME, WHILE SIMULTANEOUSLY C FORMING (Q TRANSPOSE)*FVEC AND STORING THE FIRST C N COMPONENTS IN QTF. C DO 60 J = 1, N QTF(J) = ZERO DO 50 I = 1, N FJAC(I,J) = ZERO 50 CONTINUE 60 CONTINUE IFLAG = 2 DO 70 I = 1, M CALL FCN(M,N,X,FVEC,WA3,IFLAG) IF (IFLAG .LT. 0) GO TO 340 TEMP = FVEC(I) CALL RWUPDT(N,FJAC,LDFJAC,WA3,QTF,TEMP,WA1,WA2) IFLAG = IFLAG + 1 70 CONTINUE NJEV = NJEV + 1 C C IF THE JACOBIAN IS RANK DEFICIENT, CALL QRFAC TO C REORDER ITS COLUMNS AND UPDATE THE COMPONENTS OF QTF. C SING = .FALSE. DO 80 J = 1, N IF (FJAC(J,J) .EQ. ZERO) SING = .TRUE. IPVT(J) = J WA2(J) = ENORM(J,FJAC(1,J)) 80 CONTINUE IF (.NOT.SING) GO TO 130 CALL QRFAC(N,N,FJAC,LDFJAC,.TRUE.,IPVT,N,WA1,WA2,WA3) DO 120 J = 1, N IF (FJAC(J,J) .EQ. ZERO) GO TO 110 SUM = ZERO DO 90 I = J, N SUM = SUM + FJAC(I,J)*QTF(I) 90 CONTINUE TEMP = -SUM/FJAC(J,J) DO 100 I = J, N QTF(I) = QTF(I) + FJAC(I,J)*TEMP 100 CONTINUE 110 CONTINUE FJAC(J,J) = WA1(J) 120 CONTINUE 130 CONTINUE C C ON THE FIRST ITERATION AND IF MODE IS 1, SCALE ACCORDING C TO THE NORMS OF THE COLUMNS OF THE INITIAL JACOBIAN. C IF (ITER .NE. 1) GO TO 170 IF (MODE .EQ. 2) GO TO 150 DO 140 J = 1, N DIAG(J) = WA2(J) IF (WA2(J) .EQ. ZERO) DIAG(J) = ONE 140 CONTINUE 150 CONTINUE C C ON THE FIRST ITERATION, CALCULATE THE NORM OF THE SCALED X C AND INITIALIZE THE STEP BOUND DELTA. C DO 160 J = 1, N WA3(J) = DIAG(J)*X(J) 160 CONTINUE XNORM = ENORM(N,WA3) DELTA = FACTOR*XNORM IF (DELTA .EQ. ZERO) DELTA = FACTOR 170 CONTINUE C C COMPUTE THE NORM OF THE SCALED GRADIENT. C GNORM = ZERO IF (FNORM .EQ. ZERO) GO TO 210 DO 200 J = 1, N L = IPVT(J) IF (WA2(L) .EQ. ZERO) GO TO 190 SUM = ZERO DO 180 I = 1, J SUM = SUM + FJAC(I,J)*(QTF(I)/FNORM) 180 CONTINUE GNORM = AMAX1(GNORM,ABS(SUM/WA2(L))) 190 CONTINUE 200 CONTINUE 210 CONTINUE C C TEST FOR CONVERGENCE OF THE GRADIENT NORM. C IF (GNORM .LE. GTOL) INFO = 4 IF (INFO .NE. 0) GO TO 340 C C RESCALE IF NECESSARY. C IF (MODE .EQ. 2) GO TO 230 DO 220 J = 1, N DIAG(J) = AMAX1(DIAG(J),WA2(J)) 220 CONTINUE 230 CONTINUE C C BEGINNING OF THE INNER LOOP. C 240 CONTINUE C C DETERMINE THE LEVENBERG-MARQUARDT PARAMETER. C CALL LMPAR(N,FJAC,LDFJAC,IPVT,DIAG,QTF,DELTA,PAR,WA1,WA2, * WA3,WA4) C C STORE THE DIRECTION P AND X + P. CALCULATE THE NORM OF P. C DO 250 J = 1, N WA1(J) = -WA1(J) WA2(J) = X(J) + WA1(J) WA3(J) = DIAG(J)*WA1(J) 250 CONTINUE PNORM = ENORM(N,WA3) C C ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND. C IF (ITER .EQ. 1) DELTA = AMIN1(DELTA,PNORM) C C EVALUATE THE FUNCTION AT X + P AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,WA2,WA4,WA3,IFLAG) NFEV = NFEV + 1 IF (IFLAG .LT. 0) GO TO 340 FNORM1 = ENORM(M,WA4) C C COMPUTE THE SCALED ACTUAL REDUCTION. C ACTRED = -ONE IF (P1*FNORM1 .LT. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2 C C COMPUTE THE SCALED PREDICTED REDUCTION AND C THE SCALED DIRECTIONAL DERIVATIVE. C DO 270 J = 1, N WA3(J) = ZERO L = IPVT(J) TEMP = WA1(L) DO 260 I = 1, J WA3(I) = WA3(I) + FJAC(I,J)*TEMP 260 CONTINUE 270 CONTINUE TEMP1 = ENORM(N,WA3)/FNORM TEMP2 = (SQRT(PAR)*PNORM)/FNORM PRERED = TEMP1**2 + TEMP2**2/P5 DIRDER = -(TEMP1**2 + TEMP2**2) C C COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED C REDUCTION. C RATIO = ZERO IF (PRERED .NE. ZERO) RATIO = ACTRED/PRERED C C UPDATE THE STEP BOUND. C IF (RATIO .GT. P25) GO TO 280 IF (ACTRED .GE. ZERO) TEMP = P5 IF (ACTRED .LT. ZERO) * TEMP = P5*DIRDER/(DIRDER + P5*ACTRED) IF (P1*FNORM1 .GE. FNORM .OR. TEMP .LT. P1) TEMP = P1 DELTA = TEMP*AMIN1(DELTA,PNORM/P1) PAR = PAR/TEMP GO TO 300 280 CONTINUE IF (PAR .NE. ZERO .AND. RATIO .LT. P75) GO TO 290 DELTA = PNORM/P5 PAR = P5*PAR 290 CONTINUE 300 CONTINUE C C TEST FOR SUCCESSFUL ITERATION. C IF (RATIO .LT. P0001) GO TO 330 C C SUCCESSFUL ITERATION. UPDATE X, FVEC, AND THEIR NORMS. C DO 310 J = 1, N X(J) = WA2(J) WA2(J) = DIAG(J)*X(J) 310 CONTINUE DO 320 I = 1, M FVEC(I) = WA4(I) 320 CONTINUE XNORM = ENORM(N,WA2) FNORM = FNORM1 ITER = ITER + 1 330 CONTINUE C C TESTS FOR CONVERGENCE. C IF (ABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE) INFO = 1 IF (DELTA .LE. XTOL*XNORM) INFO = 2 IF (ABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE .AND. INFO .EQ. 2) INFO = 3 IF (INFO .NE. 0) GO TO 340 C C TESTS FOR TERMINATION AND STRINGENT TOLERANCES. C IF (NFEV .GE. MAXFEV) INFO = 5 IF (ABS(ACTRED) .LE. EPSMCH .AND. PRERED .LE. EPSMCH * .AND. P5*RATIO .LE. ONE) INFO = 6 IF (DELTA .LE. EPSMCH*XNORM) INFO = 7 IF (GNORM .LE. EPSMCH) INFO = 8 IF (INFO .NE. 0) GO TO 340 C C END OF THE INNER LOOP. REPEAT IF ITERATION UNSUCCESSFUL. C IF (RATIO .LT. P0001) GO TO 240 C C END OF THE OUTER LOOP. C GO TO 30 340 CONTINUE C C TERMINATION, EITHER NORMAL OR USER IMPOSED. C IF (IFLAG .LT. 0) INFO = IFLAG IFLAG = 0 IF (NPRINT .GT. 0) CALL FCN(M,N,X,FVEC,WA3,IFLAG) RETURN C C LAST CARD OF SUBROUTINE LMSTR. C END SUBROUTINE LMSTR1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,IPVT,WA, * LWA) INTEGER M,N,LDFJAC,INFO,LWA INTEGER IPVT(N) REAL TOL REAL X(N),FVEC(M),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN C ********** C C SUBROUTINE LMSTR1 C C THE PURPOSE OF LMSTR1 IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF C THE LEVENBERG-MARQUARDT ALGORITHM WHICH USES MINIMAL STORAGE. C THIS IS DONE BY USING THE MORE GENERAL LEAST-SQUARES SOLVER C LMSTR. THE USER MUST PROVIDE A SUBROUTINE WHICH CALCULATES C THE FUNCTIONS AND THE ROWS OF THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMSTR1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL,INFO, C IPVT,WA,LWA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE ROWS OF THE JACOBIAN. C FCN MUST BE DECLARED IN AN EXTERNAL STATEMENT IN THE C USER CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) C INTEGER M,N,IFLAG C REAL X(N),FVEC(M),FJROW(N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C IF IFLAG = I CALCULATE THE (I-1)-ST ROW OF THE C JACOBIAN AT X AND RETURN THIS VECTOR IN FJROW. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMSTR1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT N BY N ARRAY. THE UPPER TRIANGLE OF FJAC C CONTAINS AN UPPER TRIANGULAR MATRIX R SUCH THAT C C T T T C P *(JAC *JAC)*P = R *R, C C WHERE P IS A PERMUTATION MATRIX AND JAC IS THE FINAL C CALCULATED JACOBIAN. COLUMN J OF P IS COLUMN IPVT(J) C (SEE BELOW) OF THE IDENTITY MATRIX. THE LOWER TRIANGULAR C PART OF FJAC CONTAINS INFORMATION GENERATED DURING C THE COMPUTATION OF R. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C TOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION OCCURS C WHEN THE ALGORITHM ESTIMATES EITHER THAT THE RELATIVE C ERROR IN THE SUM OF SQUARES IS AT MOST TOL OR THAT C THE RELATIVE ERROR BETWEEN X AND THE SOLUTION IS AT C MOST TOL. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C IN THE SUM OF SQUARES IS AT MOST TOL. C C INFO = 2 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 FVEC IS ORTHOGONAL TO THE COLUMNS OF THE C JACOBIAN TO MACHINE PRECISION. C C INFO = 5 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED 100*(N+1). C C INFO = 6 TOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 TOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH N. IPVT C DEFINES A PERMUTATION MATRIX P SUCH THAT JAC*P = Q*R, C WHERE JAC IS THE FINAL CALCULATED JACOBIAN, Q IS C ORTHOGONAL (NOT STORED), AND R IS UPPER TRIANGULAR. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C WA IS A WORK ARRAY OF LENGTH LWA. C C LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN 5*N+M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... LMSTR C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, DUDLEY V. GOETSCHEL, KENNETH E. HILLSTROM, C JORGE J. MORE C C ********** INTEGER MAXFEV,MODE,NFEV,NJEV,NPRINT REAL FACTOR,FTOL,GTOL,XTOL,ZERO DATA FACTOR,ZERO /1.0E2,0.0E0/ INFO = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. LDFJAC .LT. N .OR. TOL .LT. ZERO * .OR. LWA .LT. 5*N + M) GO TO 10 C C CALL LMSTR. C MAXFEV = 100*(N + 1) FTOL = TOL XTOL = TOL GTOL = ZERO MODE = 1 NPRINT = 0 CALL LMSTR(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL,MAXFEV, * WA(1),MODE,FACTOR,NPRINT,INFO,NFEV,NJEV,IPVT,WA(N+1), * WA(2*N+1),WA(3*N+1),WA(4*N+1),WA(5*N+1)) IF (INFO .EQ. 8) INFO = 4 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE LMSTR1. C END SUBROUTINE QFORM(M,N,Q,LDQ,WA) INTEGER M,N,LDQ REAL Q(LDQ,M),WA(M) C ********** C C SUBROUTINE QFORM C C THIS SUBROUTINE PROCEEDS FROM THE COMPUTED QR FACTORIZATION OF C AN M BY N MATRIX A TO ACCUMULATE THE M BY M ORTHOGONAL MATRIX C Q FROM ITS FACTORED FORM. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE QFORM(M,N,Q,LDQ,WA) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF ROWS OF A AND THE ORDER OF Q. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C Q IS AN M BY M ARRAY. ON INPUT THE FULL LOWER TRAPEZOID IN C THE FIRST MIN(M,N) COLUMNS OF Q CONTAINS THE FACTORED FORM. C ON OUTPUT Q HAS BEEN ACCUMULATED INTO A SQUARE MATRIX. C C LDQ IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY Q. C C WA IS A WORK ARRAY OF LENGTH M. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,JM1,K,L,MINMN,NP1 REAL ONE,SUM,TEMP,ZERO DATA ONE,ZERO /1.0E0,0.0E0/ C C ZERO OUT UPPER TRIANGLE OF Q IN THE FIRST MIN(M,N) COLUMNS. C MINMN = MIN0(M,N) IF (MINMN .LT. 2) GO TO 30 DO 20 J = 2, MINMN JM1 = J - 1 DO 10 I = 1, JM1 Q(I,J) = ZERO 10 CONTINUE 20 CONTINUE 30 CONTINUE C C INITIALIZE REMAINING COLUMNS TO THOSE OF THE IDENTITY MATRIX. C NP1 = N + 1 IF (M .LT. NP1) GO TO 60 DO 50 J = NP1, M DO 40 I = 1, M Q(I,J) = ZERO 40 CONTINUE Q(J,J) = ONE 50 CONTINUE 60 CONTINUE C C ACCUMULATE Q FROM ITS FACTORED FORM. C DO 120 L = 1, MINMN K = MINMN - L + 1 DO 70 I = K, M WA(I) = Q(I,K) Q(I,K) = ZERO 70 CONTINUE Q(K,K) = ONE IF (WA(K) .EQ. ZERO) GO TO 110 DO 100 J = K, M SUM = ZERO DO 80 I = K, M SUM = SUM + Q(I,J)*WA(I) 80 CONTINUE TEMP = SUM/WA(K) DO 90 I = K, M Q(I,J) = Q(I,J) - TEMP*WA(I) 90 CONTINUE 100 CONTINUE 110 CONTINUE 120 CONTINUE RETURN C C LAST CARD OF SUBROUTINE QFORM. C END SUBROUTINE QRFAC(M,N,A,LDA,PIVOT,IPVT,LIPVT,RDIAG,ACNORM,WA) INTEGER M,N,LDA,LIPVT INTEGER IPVT(LIPVT) LOGICAL PIVOT REAL A(LDA,N),RDIAG(N),ACNORM(N),WA(N) C ********** C C SUBROUTINE QRFAC C C THIS SUBROUTINE USES HOUSEHOLDER TRANSFORMATIONS WITH COLUMN C PIVOTING (OPTIONAL) TO COMPUTE A QR FACTORIZATION OF THE C M BY N MATRIX A. THAT IS, QRFAC DETERMINES AN ORTHOGONAL C MATRIX Q, A PERMUTATION MATRIX P, AND AN UPPER TRAPEZOIDAL C MATRIX R WITH DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE, C SUCH THAT A*P = Q*R. THE HOUSEHOLDER TRANSFORMATION FOR C COLUMN K, K = 1,2,...,MIN(M,N), IS OF THE FORM C C T C I - (1/U(K))*U*U C C WHERE U HAS ZEROS IN THE FIRST K-1 POSITIONS. THE FORM OF C THIS TRANSFORMATION AND THE METHOD OF PIVOTING FIRST C APPEARED IN THE CORRESPONDING LINPACK SUBROUTINE. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE QRFAC(M,N,A,LDA,PIVOT,IPVT,LIPVT,RDIAG,ACNORM,WA) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF ROWS OF A. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C A IS AN M BY N ARRAY. ON INPUT A CONTAINS THE MATRIX FOR C WHICH THE QR FACTORIZATION IS TO BE COMPUTED. ON OUTPUT C THE STRICT UPPER TRAPEZOIDAL PART OF A CONTAINS THE STRICT C UPPER TRAPEZOIDAL PART OF R, AND THE LOWER TRAPEZOIDAL C PART OF A CONTAINS A FACTORED FORM OF Q (THE NON-TRIVIAL C ELEMENTS OF THE U VECTORS DESCRIBED ABOVE). C C LDA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY A. C C PIVOT IS A LOGICAL INPUT VARIABLE. IF PIVOT IS SET TRUE, C THEN COLUMN PIVOTING IS ENFORCED. IF PIVOT IS SET FALSE, C THEN NO COLUMN PIVOTING IS DONE. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH LIPVT. IPVT C DEFINES THE PERMUTATION MATRIX P SUCH THAT A*P = Q*R. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C IF PIVOT IS FALSE, IPVT IS NOT REFERENCED. C C LIPVT IS A POSITIVE INTEGER INPUT VARIABLE. IF PIVOT IS FALSE, C THEN LIPVT MAY BE AS SMALL AS 1. IF PIVOT IS TRUE, THEN C LIPVT MUST BE AT LEAST N. C C RDIAG IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C DIAGONAL ELEMENTS OF R. C C ACNORM IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C NORMS OF THE CORRESPONDING COLUMNS OF THE INPUT MATRIX A. C IF THIS INFORMATION IS NOT NEEDED, THEN ACNORM CAN COINCIDE C WITH RDIAG. C C WA IS A WORK ARRAY OF LENGTH N. IF PIVOT IS FALSE, THEN WA C CAN COINCIDE WITH RDIAG. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... SPMPAR,ENORM C C FORTRAN-SUPPLIED ... AMAX1,SQRT,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,JP1,K,KMAX,MINMN REAL AJNORM,EPSMCH,ONE,P05,SUM,TEMP,ZERO REAL SPMPAR,ENORM DATA ONE,P05,ZERO /1.0E0,5.0E-2,0.0E0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = SPMPAR(1) C C COMPUTE THE INITIAL COLUMN NORMS AND INITIALIZE SEVERAL ARRAYS. C DO 10 J = 1, N ACNORM(J) = ENORM(M,A(1,J)) RDIAG(J) = ACNORM(J) WA(J) = RDIAG(J) IF (PIVOT) IPVT(J) = J 10 CONTINUE C C REDUCE A TO R WITH HOUSEHOLDER TRANSFORMATIONS. C MINMN = MIN0(M,N) DO 110 J = 1, MINMN IF (.NOT.PIVOT) GO TO 40 C C BRING THE COLUMN OF LARGEST NORM INTO THE PIVOT POSITION. C KMAX = J DO 20 K = J, N IF (RDIAG(K) .GT. RDIAG(KMAX)) KMAX = K 20 CONTINUE IF (KMAX .EQ. J) GO TO 40 DO 30 I = 1, M TEMP = A(I,J) A(I,J) = A(I,KMAX) A(I,KMAX) = TEMP 30 CONTINUE RDIAG(KMAX) = RDIAG(J) WA(KMAX) = WA(J) K = IPVT(J) IPVT(J) = IPVT(KMAX) IPVT(KMAX) = K 40 CONTINUE C C COMPUTE THE HOUSEHOLDER TRANSFORMATION TO REDUCE THE C J-TH COLUMN OF A TO A MULTIPLE OF THE J-TH UNIT VECTOR. C AJNORM = ENORM(M-J+1,A(J,J)) IF (AJNORM .EQ. ZERO) GO TO 100 IF (A(J,J) .LT. ZERO) AJNORM = -AJNORM DO 50 I = J, M A(I,J) = A(I,J)/AJNORM 50 CONTINUE A(J,J) = A(J,J) + ONE C C APPLY THE TRANSFORMATION TO THE REMAINING COLUMNS C AND UPDATE THE NORMS. C JP1 = J + 1 IF (N .LT. JP1) GO TO 100 DO 90 K = JP1, N SUM = ZERO DO 60 I = J, M SUM = SUM + A(I,J)*A(I,K) 60 CONTINUE TEMP = SUM/A(J,J) DO 70 I = J, M A(I,K) = A(I,K) - TEMP*A(I,J) 70 CONTINUE IF (.NOT.PIVOT .OR. RDIAG(K) .EQ. ZERO) GO TO 80 TEMP = A(J,K)/RDIAG(K) RDIAG(K) = RDIAG(K)*SQRT(AMAX1(ZERO,ONE-TEMP**2)) IF (P05*(RDIAG(K)/WA(K))**2 .GT. EPSMCH) GO TO 80 RDIAG(K) = ENORM(M-J,A(JP1,K)) WA(K) = RDIAG(K) 80 CONTINUE 90 CONTINUE 100 CONTINUE RDIAG(J) = -AJNORM 110 CONTINUE RETURN C C LAST CARD OF SUBROUTINE QRFAC. C END SUBROUTINE QRSOLV(N,R,LDR,IPVT,DIAG,QTB,X,SDIAG,WA) INTEGER N,LDR INTEGER IPVT(N) REAL R(LDR,N),DIAG(N),QTB(N),X(N),SDIAG(N),WA(N) C ********** C C SUBROUTINE QRSOLV C C GIVEN AN M BY N MATRIX A, AN N BY N DIAGONAL MATRIX D, C AND AN M-VECTOR B, THE PROBLEM IS TO DETERMINE AN X WHICH C SOLVES THE SYSTEM C C A*X = B , D*X = 0 , C C IN THE LEAST SQUARES SENSE. C C THIS SUBROUTINE COMPLETES THE SOLUTION OF THE PROBLEM C IF IT IS PROVIDED WITH THE NECESSARY INFORMATION FROM THE C QR FACTORIZATION, WITH COLUMN PIVOTING, OF A. THAT IS, IF C A*P = Q*R, WHERE P IS A PERMUTATION MATRIX, Q HAS ORTHOGONAL C COLUMNS, AND R IS AN UPPER TRIANGULAR MATRIX WITH DIAGONAL C ELEMENTS OF NONINCREASING MAGNITUDE, THEN QRSOLV EXPECTS C THE FULL UPPER TRIANGLE OF R, THE PERMUTATION MATRIX P, C AND THE FIRST N COMPONENTS OF (Q TRANSPOSE)*B. THE SYSTEM C A*X = B, D*X = 0, IS THEN EQUIVALENT TO C C T T C R*Z = Q *B , P *D*P*Z = 0 , C C WHERE X = P*Z. IF THIS SYSTEM DOES NOT HAVE FULL RANK, C THEN A LEAST SQUARES SOLUTION IS OBTAINED. ON OUTPUT QRSOLV C ALSO PROVIDES AN UPPER TRIANGULAR MATRIX S SUCH THAT C C T T T C P *(A *A + D*D)*P = S *S . C C S IS COMPUTED WITHIN QRSOLV AND MAY BE OF SEPARATE INTEREST. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE QRSOLV(N,R,LDR,IPVT,DIAG,QTB,X,SDIAG,WA) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE ORDER OF R. C C R IS AN N BY N ARRAY. ON INPUT THE FULL UPPER TRIANGLE C MUST CONTAIN THE FULL UPPER TRIANGLE OF THE MATRIX R. C ON OUTPUT THE FULL UPPER TRIANGLE IS UNALTERED, AND THE C STRICT LOWER TRIANGLE CONTAINS THE STRICT UPPER TRIANGLE C (TRANSPOSED) OF THE UPPER TRIANGULAR MATRIX S. C C LDR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY R. C C IPVT IS AN INTEGER INPUT ARRAY OF LENGTH N WHICH DEFINES THE C PERMUTATION MATRIX P SUCH THAT A*P = Q*R. COLUMN J OF P C IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C DIAG IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE C DIAGONAL ELEMENTS OF THE MATRIX D. C C QTB IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE FIRST C N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*B. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE LEAST C SQUARES SOLUTION OF THE SYSTEM A*X = B, D*X = 0. C C SDIAG IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C DIAGONAL ELEMENTS OF THE UPPER TRIANGULAR MATRIX S. C C WA IS A WORK ARRAY OF LENGTH N. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... ABS,SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,JP1,K,KP1,L,NSING REAL COS,COTAN,P5,P25,QTBPJ,SIN,SUM,TAN,TEMP,ZERO DATA P5,P25,ZERO /5.0E-1,2.5E-1,0.0E0/ C C COPY R AND (Q TRANSPOSE)*B TO PRESERVE INPUT AND INITIALIZE S. C IN PARTICULAR, SAVE THE DIAGONAL ELEMENTS OF R IN X. C DO 20 J = 1, N DO 10 I = J, N R(I,J) = R(J,I) 10 CONTINUE X(J) = R(J,J) WA(J) = QTB(J) 20 CONTINUE C C ELIMINATE THE DIAGONAL MATRIX D USING A GIVENS ROTATION. C DO 100 J = 1, N C C PREPARE THE ROW OF D TO BE ELIMINATED, LOCATING THE C DIAGONAL ELEMENT USING P FROM THE QR FACTORIZATION. C L = IPVT(J) IF (DIAG(L) .EQ. ZERO) GO TO 90 DO 30 K = J, N SDIAG(K) = ZERO 30 CONTINUE SDIAG(J) = DIAG(L) C C THE TRANSFORMATIONS TO ELIMINATE THE ROW OF D C MODIFY ONLY A SINGLE ELEMENT OF (Q TRANSPOSE)*B C BEYOND THE FIRST N, WHICH IS INITIALLY ZERO. C QTBPJ = ZERO DO 80 K = J, N C C DETERMINE A GIVENS ROTATION WHICH ELIMINATES THE C APPROPRIATE ELEMENT IN THE CURRENT ROW OF D. C IF (SDIAG(K) .EQ. ZERO) GO TO 70 IF (ABS(R(K,K)) .GE. ABS(SDIAG(K))) GO TO 40 COTAN = R(K,K)/SDIAG(K) SIN = P5/SQRT(P25+P25*COTAN**2) COS = SIN*COTAN GO TO 50 40 CONTINUE TAN = SDIAG(K)/R(K,K) COS = P5/SQRT(P25+P25*TAN**2) SIN = COS*TAN 50 CONTINUE C C COMPUTE THE MODIFIED DIAGONAL ELEMENT OF R AND C THE MODIFIED ELEMENT OF ((Q TRANSPOSE)*B,0). C R(K,K) = COS*R(K,K) + SIN*SDIAG(K) TEMP = COS*WA(K) + SIN*QTBPJ QTBPJ = -SIN*WA(K) + COS*QTBPJ WA(K) = TEMP C C ACCUMULATE THE TRANFORMATION IN THE ROW OF S. C KP1 = K + 1 IF (N .LT. KP1) GO TO 70 DO 60 I = KP1, N TEMP = COS*R(I,K) + SIN*SDIAG(I) SDIAG(I) = -SIN*R(I,K) + COS*SDIAG(I) R(I,K) = TEMP 60 CONTINUE 70 CONTINUE 80 CONTINUE 90 CONTINUE C C STORE THE DIAGONAL ELEMENT OF S AND RESTORE C THE CORRESPONDING DIAGONAL ELEMENT OF R. C SDIAG(J) = R(J,J) R(J,J) = X(J) 100 CONTINUE C C SOLVE THE TRIANGULAR SYSTEM FOR Z. IF THE SYSTEM IS C SINGULAR, THEN OBTAIN A LEAST SQUARES SOLUTION. C NSING = N DO 110 J = 1, N IF (SDIAG(J) .EQ. ZERO .AND. NSING .EQ. N) NSING = J - 1 IF (NSING .LT. N) WA(J) = ZERO 110 CONTINUE IF (NSING .LT. 1) GO TO 150 DO 140 K = 1, NSING J = NSING - K + 1 SUM = ZERO JP1 = J + 1 IF (NSING .LT. JP1) GO TO 130 DO 120 I = JP1, NSING SUM = SUM + R(I,J)*WA(I) 120 CONTINUE 130 CONTINUE WA(J) = (WA(J) - SUM)/SDIAG(J) 140 CONTINUE 150 CONTINUE C C PERMUTE THE COMPONENTS OF Z BACK TO COMPONENTS OF X. C DO 160 J = 1, N L = IPVT(J) X(L) = WA(J) 160 CONTINUE RETURN C C LAST CARD OF SUBROUTINE QRSOLV. C END SUBROUTINE RWUPDT(N,R,LDR,W,B,ALPHA,COS,SIN) INTEGER N,LDR REAL ALPHA REAL R(LDR,N),W(N),B(N),COS(N),SIN(N) C ********** C C SUBROUTINE RWUPDT C C GIVEN AN N BY N UPPER TRIANGULAR MATRIX R, THIS SUBROUTINE C COMPUTES THE QR DECOMPOSITION OF THE MATRIX FORMED WHEN A ROW C IS ADDED TO R. IF THE ROW IS SPECIFIED BY THE VECTOR W, THEN C RWUPDT DETERMINES AN ORTHOGONAL MATRIX Q SUCH THAT WHEN THE C N+1 BY N MATRIX COMPOSED OF R AUGMENTED BY W IS PREMULTIPLIED C BY (Q TRANSPOSE), THE RESULTING MATRIX IS UPPER TRAPEZOIDAL. C THE MATRIX (Q TRANSPOSE) IS THE PRODUCT OF N TRANSFORMATIONS C C G(N)*G(N-1)* ... *G(1) C C WHERE G(I) IS A GIVENS ROTATION IN THE (I,N+1) PLANE WHICH C ELIMINATES ELEMENTS IN THE (N+1)-ST PLANE. RWUPDT ALSO C COMPUTES THE PRODUCT (Q TRANSPOSE)*C WHERE C IS THE C (N+1)-VECTOR (B,ALPHA). Q ITSELF IS NOT ACCUMULATED, RATHER C THE INFORMATION TO RECOVER THE G ROTATIONS IS SUPPLIED. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE RWUPDT(N,R,LDR,W,B,ALPHA,COS,SIN) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE ORDER OF R. C C R IS AN N BY N ARRAY. ON INPUT THE UPPER TRIANGULAR PART OF C R MUST CONTAIN THE MATRIX TO BE UPDATED. ON OUTPUT R C CONTAINS THE UPDATED TRIANGULAR MATRIX. C C LDR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY R. C C W IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE ROW C VECTOR TO BE ADDED TO R. C C B IS AN ARRAY OF LENGTH N. ON INPUT B MUST CONTAIN THE C FIRST N ELEMENTS OF THE VECTOR C. ON OUTPUT B CONTAINS C THE FIRST N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*C. C C ALPHA IS A VARIABLE. ON INPUT ALPHA MUST CONTAIN THE C (N+1)-ST ELEMENT OF THE VECTOR C. ON OUTPUT ALPHA CONTAINS C THE (N+1)-ST ELEMENT OF THE VECTOR (Q TRANSPOSE)*C. C C COS IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C COSINES OF THE TRANSFORMING GIVENS ROTATIONS. C C SIN IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C SINES OF THE TRANSFORMING GIVENS ROTATIONS. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... ABS,SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, DUDLEY V. GOETSCHEL, KENNETH E. HILLSTROM, C JORGE J. MORE C C ********** INTEGER I,J,JM1 REAL COTAN,ONE,P5,P25,ROWJ,TAN,TEMP,ZERO DATA ONE,P5,P25,ZERO /1.0E0,5.0E-1,2.5E-1,0.0E0/ C DO 60 J = 1, N ROWJ = W(J) JM1 = J - 1 C C APPLY THE PREVIOUS TRANSFORMATIONS TO C R(I,J), I=1,2,...,J-1, AND TO W(J). C IF (JM1 .LT. 1) GO TO 20 DO 10 I = 1, JM1 TEMP = COS(I)*R(I,J) + SIN(I)*ROWJ ROWJ = -SIN(I)*R(I,J) + COS(I)*ROWJ R(I,J) = TEMP 10 CONTINUE 20 CONTINUE C C DETERMINE A GIVENS ROTATION WHICH ELIMINATES W(J). C COS(J) = ONE SIN(J) = ZERO IF (ROWJ .EQ. ZERO) GO TO 50 IF (ABS(R(J,J)) .GE. ABS(ROWJ)) GO TO 30 COTAN = R(J,J)/ROWJ SIN(J) = P5/SQRT(P25+P25*COTAN**2) COS(J) = SIN(J)*COTAN GO TO 40 30 CONTINUE TAN = ROWJ/R(J,J) COS(J) = P5/SQRT(P25+P25*TAN**2) SIN(J) = COS(J)*TAN 40 CONTINUE C C APPLY THE CURRENT TRANSFORMATION TO R(J,J), B(J), AND ALPHA. C R(J,J) = COS(J)*R(J,J) + SIN(J)*ROWJ TEMP = COS(J)*B(J) + SIN(J)*ALPHA ALPHA = -SIN(J)*B(J) + COS(J)*ALPHA B(J) = TEMP 50 CONTINUE 60 CONTINUE RETURN C C LAST CARD OF SUBROUTINE RWUPDT. C END SUBROUTINE R1MPYQ(M,N,A,LDA,V,W) INTEGER M,N,LDA REAL A(LDA,N),V(N),W(N) C ********** C C SUBROUTINE R1MPYQ C C GIVEN AN M BY N MATRIX A, THIS SUBROUTINE COMPUTES A*Q WHERE C Q IS THE PRODUCT OF 2*(N - 1) TRANSFORMATIONS C C GV(N-1)*...*GV(1)*GW(1)*...*GW(N-1) C C AND GV(I), GW(I) ARE GIVENS ROTATIONS IN THE (I,N) PLANE WHICH C ELIMINATE ELEMENTS IN THE I-TH AND N-TH PLANES, RESPECTIVELY. C Q ITSELF IS NOT GIVEN, RATHER THE INFORMATION TO RECOVER THE C GV, GW ROTATIONS IS SUPPLIED. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE R1MPYQ(M,N,A,LDA,V,W) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF ROWS OF A. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C A IS AN M BY N ARRAY. ON INPUT A MUST CONTAIN THE MATRIX C TO BE POSTMULTIPLIED BY THE ORTHOGONAL MATRIX Q C DESCRIBED ABOVE. ON OUTPUT A*Q HAS REPLACED A. C C LDA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY A. C C V IS AN INPUT ARRAY OF LENGTH N. V(I) MUST CONTAIN THE C INFORMATION NECESSARY TO RECOVER THE GIVENS ROTATION GV(I) C DESCRIBED ABOVE. C C W IS AN INPUT ARRAY OF LENGTH N. W(I) MUST CONTAIN THE C INFORMATION NECESSARY TO RECOVER THE GIVENS ROTATION GW(I) C DESCRIBED ABOVE. C C SUBROUTINES CALLED C C FORTRAN-SUPPLIED ... ABS,SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,NMJ,NM1 REAL COS,ONE,SIN,TEMP DATA ONE /1.0E0/ C C APPLY THE FIRST SET OF GIVENS ROTATIONS TO A. C NM1 = N - 1 IF (NM1 .LT. 1) GO TO 50 DO 20 NMJ = 1, NM1 J = N - NMJ IF (ABS(V(J)) .GT. ONE) COS = ONE/V(J) IF (ABS(V(J)) .GT. ONE) SIN = SQRT(ONE-COS**2) IF (ABS(V(J)) .LE. ONE) SIN = V(J) IF (ABS(V(J)) .LE. ONE) COS = SQRT(ONE-SIN**2) DO 10 I = 1, M TEMP = COS*A(I,J) - SIN*A(I,N) A(I,N) = SIN*A(I,J) + COS*A(I,N) A(I,J) = TEMP 10 CONTINUE 20 CONTINUE C C APPLY THE SECOND SET OF GIVENS ROTATIONS TO A. C DO 40 J = 1, NM1 IF (ABS(W(J)) .GT. ONE) COS = ONE/W(J) IF (ABS(W(J)) .GT. ONE) SIN = SQRT(ONE-COS**2) IF (ABS(W(J)) .LE. ONE) SIN = W(J) IF (ABS(W(J)) .LE. ONE) COS = SQRT(ONE-SIN**2) DO 30 I = 1, M TEMP = COS*A(I,J) + SIN*A(I,N) A(I,N) = -SIN*A(I,J) + COS*A(I,N) A(I,J) = TEMP 30 CONTINUE 40 CONTINUE 50 CONTINUE RETURN C C LAST CARD OF SUBROUTINE R1MPYQ. C END SUBROUTINE R1UPDT(M,N,S,LS,U,V,W,SING) INTEGER M,N,LS LOGICAL SING REAL S(LS),U(M),V(N),W(M) C ********** C C SUBROUTINE R1UPDT C C GIVEN AN M BY N LOWER TRAPEZOIDAL MATRIX S, AN M-VECTOR U, C AND AN N-VECTOR V, THE PROBLEM IS TO DETERMINE AN C ORTHOGONAL MATRIX Q SUCH THAT C C T C (S + U*V )*Q C C IS AGAIN LOWER TRAPEZOIDAL. C C THIS SUBROUTINE DETERMINES Q AS THE PRODUCT OF 2*(N - 1) C TRANSFORMATIONS C C GV(N-1)*...*GV(1)*GW(1)*...*GW(N-1) C C WHERE GV(I), GW(I) ARE GIVENS ROTATIONS IN THE (I,N) PLANE C WHICH ELIMINATE ELEMENTS IN THE I-TH AND N-TH PLANES, C RESPECTIVELY. Q ITSELF IS NOT ACCUMULATED, RATHER THE C INFORMATION TO RECOVER THE GV, GW ROTATIONS IS RETURNED. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE R1UPDT(M,N,S,LS,U,V,W,SING) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF ROWS OF S. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF S. N MUST NOT EXCEED M. C C S IS AN ARRAY OF LENGTH LS. ON INPUT S MUST CONTAIN THE LOWER C TRAPEZOIDAL MATRIX S STORED BY COLUMNS. ON OUTPUT S CONTAINS C THE LOWER TRAPEZOIDAL MATRIX PRODUCED AS DESCRIBED ABOVE. C C LS IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(2*M-N+1))/2. C C U IS AN INPUT ARRAY OF LENGTH M WHICH MUST CONTAIN THE C VECTOR U. C C V IS AN ARRAY OF LENGTH N. ON INPUT V MUST CONTAIN THE VECTOR C V. ON OUTPUT V(I) CONTAINS THE INFORMATION NECESSARY TO C RECOVER THE GIVENS ROTATION GV(I) DESCRIBED ABOVE. C C W IS AN OUTPUT ARRAY OF LENGTH M. W(I) CONTAINS INFORMATION C NECESSARY TO RECOVER THE GIVENS ROTATION GW(I) DESCRIBED C ABOVE. C C SING IS A LOGICAL OUTPUT VARIABLE. SING IS SET TRUE IF ANY C OF THE DIAGONAL ELEMENTS OF THE OUTPUT S ARE ZERO. OTHERWISE C SING IS SET FALSE. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... SPMPAR C C FORTRAN-SUPPLIED ... ABS,SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE, C JOHN L. NAZARETH C C ********** INTEGER I,J,JJ,L,NMJ,NM1 REAL COS,COTAN,GIANT,ONE,P5,P25,SIN,TAN,TAU,TEMP,ZERO REAL SPMPAR DATA ONE,P5,P25,ZERO /1.0E0,5.0E-1,2.5E-1,0.0E0/ C C GIANT IS THE LARGEST MAGNITUDE. C GIANT = SPMPAR(3) C C INITIALIZE THE DIAGONAL ELEMENT POINTER. C JJ = (N*(2*M - N + 1))/2 - (M - N) C C MOVE THE NONTRIVIAL PART OF THE LAST COLUMN OF S INTO W. C L = JJ DO 10 I = N, M W(I) = S(L) L = L + 1 10 CONTINUE C C ROTATE THE VECTOR V INTO A MULTIPLE OF THE N-TH UNIT VECTOR C IN SUCH A WAY THAT A SPIKE IS INTRODUCED INTO W. C NM1 = N - 1 IF (NM1 .LT. 1) GO TO 70 DO 60 NMJ = 1, NM1 J = N - NMJ JJ = JJ - (M - J + 1) W(J) = ZERO IF (V(J) .EQ. ZERO) GO TO 50 C C DETERMINE A GIVENS ROTATION WHICH ELIMINATES THE C J-TH ELEMENT OF V. C IF (ABS(V(N)) .GE. ABS(V(J))) GO TO 20 COTAN = V(N)/V(J) SIN = P5/SQRT(P25+P25*COTAN**2) COS = SIN*COTAN TAU = ONE IF (ABS(COS)*GIANT .GT. ONE) TAU = ONE/COS GO TO 30 20 CONTINUE TAN = V(J)/V(N) COS = P5/SQRT(P25+P25*TAN**2) SIN = COS*TAN TAU = SIN 30 CONTINUE C C APPLY THE TRANSFORMATION TO V AND STORE THE INFORMATION C NECESSARY TO RECOVER THE GIVENS ROTATION. C V(N) = SIN*V(J) + COS*V(N) V(J) = TAU C C APPLY THE TRANSFORMATION TO S AND EXTEND THE SPIKE IN W. C L = JJ DO 40 I = J, M TEMP = COS*S(L) - SIN*W(I) W(I) = SIN*S(L) + COS*W(I) S(L) = TEMP L = L + 1 40 CONTINUE 50 CONTINUE 60 CONTINUE 70 CONTINUE C C ADD THE SPIKE FROM THE RANK 1 UPDATE TO W. C DO 80 I = 1, M W(I) = W(I) + V(N)*U(I) 80 CONTINUE C C ELIMINATE THE SPIKE. C SING = .FALSE. IF (NM1 .LT. 1) GO TO 140 DO 130 J = 1, NM1 IF (W(J) .EQ. ZERO) GO TO 120 C C DETERMINE A GIVENS ROTATION WHICH ELIMINATES THE C J-TH ELEMENT OF THE SPIKE. C IF (ABS(S(JJ)) .GE. ABS(W(J))) GO TO 90 COTAN = S(JJ)/W(J) SIN = P5/SQRT(P25+P25*COTAN**2) COS = SIN*COTAN TAU = ONE IF (ABS(COS)*GIANT .GT. ONE) TAU = ONE/COS GO TO 100 90 CONTINUE TAN = W(J)/S(JJ) COS = P5/SQRT(P25+P25*TAN**2) SIN = COS*TAN TAU = SIN 100 CONTINUE C C APPLY THE TRANSFORMATION TO S AND REDUCE THE SPIKE IN W. C L = JJ DO 110 I = J, M TEMP = COS*S(L) + SIN*W(I) W(I) = -SIN*S(L) + COS*W(I) S(L) = TEMP L = L + 1 110 CONTINUE C C STORE THE INFORMATION NECESSARY TO RECOVER THE C GIVENS ROTATION. C W(J) = TAU 120 CONTINUE C C TEST FOR ZERO DIAGONAL ELEMENTS IN THE OUTPUT S. C IF (S(JJ) .EQ. ZERO) SING = .TRUE. JJ = JJ + (M - J + 1) 130 CONTINUE 140 CONTINUE C C MOVE W BACK INTO THE LAST COLUMN OF THE OUTPUT S. C L = JJ DO 150 I = N, M S(L) = W(I) L = L + 1 150 CONTINUE IF (S(JJ) .EQ. ZERO) SING = .TRUE. RETURN C C LAST CARD OF SUBROUTINE R1UPDT. C END PyBDSF-1.10.1/src/minpack/ex/file03000066400000000000000000005042621420247104600164640ustar00rootroot000000000000001 0 Page 0 Documentation for MINPACK subroutine HYBRD1 0 Single precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of HYBRD1 is to find a zero of a system of N non- linear functions in N variables by a modification of the Powell hybrid method. This is done by using the more general nonlinea equation solver HYBRD. The user must provide a subroutine whic calculates the functions. The Jacobian is then calculated by a forward-difference approximation. 0 2. Subroutine and type statements. 0 SUBROUTINE HYBRD1(FCN,N,X,FVEC,TOL,INFO,WA,LWA) INTEGER N,INFO,LWA REAL TOL REAL X(N),FVEC(N),WA(LWA) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to HYBRD1 and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from HYBRD1. 0 FCN is the name of the user-supplied subroutine which calculate the functions. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows 0 SUBROUTINE FCN(N,X,FVEC,IFLAG) INTEGER N,IFLAG REAL X(N),FVEC(N) ---------- CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. ---------- RETURN END 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of HYBRD1. In this case se IFLAG to a negative integer. 1 0 Page 0 N is a positive integer input variable set to the number of functions and variables. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length N which contains the function evaluated at the output X. 0 TOL is a nonnegative input variable. Termination occurs when the algorithm estimates that the relative error between X and the solution is at most TOL. Section 4 contains more details about TOL. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Algorithm estimates that the relative error between X and the solution is at most TOL. 0 INFO = 2 Number of calls to FCN has reached or exceeded 200*(N+1). 0 INFO = 3 TOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 4 Iteration is not making good progress. 0 Sections 4 and 5 contain more details about INFO. 0 WA is a work array of length LWA. 0 LWA is a positive integer input variable not less than (N*(3*N+13))/2. 0 4. Successful completion. 0 The accuracy of HYBRD1 is controlled by the convergence parame- ter TOL. This parameter is used in a test which makes a compar ison between the approximation X and a solution XSOL. HYBRD1 terminates when the test is satisfied. If TOL is less than the machine precision (as defined by the MINPACK function SPMPAR(1)), then HYBRD1 only attempts to satisfy the test defined by the machine precision. Further progress is not usu- ally possible. Unless high precision solutions are required, the recommended value for TOL is the square root of the machine precision. 0 The test assumes that the functions are reasonably well behaved 1 0 Page 0 If this condition is not satisfied, then HYBRD1 may incorrectly indicate convergence. The validity of the answer can be checked, for example, by rerunning HYBRD1 with a tighter toler- ance. 0 Convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(X-XSOL) .LE. TOL*ENORM(XSOL). 0 If this condition is satisfied with TOL = 10**(-K), then the larger components of X have K significant decimal digits and INFO is set to 1. There is a danger that the smaller compo- nents of X may have large relative errors, but the fast rate of convergence of HYBRD1 usually avoids this possibility. 0 5. Unsuccessful completion. 0 Unsuccessful termination of HYBRD1 can be due to improper input parameters, arithmetic interrupts, an excessive number of func- tion evaluations, errors in the functions, or lack of good prog ress. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or TOL .LT. 0.E0, or LWA .LT. (N*(3*N+13))/2. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by HYBRD1. In this case, it may be possible to remedy the situation by not evalu ating the functions here, but instead setting the components of FVEC to numbers that exceed those in the initial FVEC, thereby indirectly reducing the step length. The step length can be more directly controlled by using instead HYBRD, which includes in its calling sequence the step-length- governing parameter FACTOR. 0 Excessive number of function evaluations. If the number of calls to FCN reaches 200*(N+1), then this indicates that the routine is converging very slowly as measured by the progress of FVEC, and INFO is set to 2. This situation should be unu- sual because, as indicated below, lack of good progress is usually diagnosed earlier by HYBRD1, causing termination with INFO = 4. 0 Errors in the functions. The choice of step length in the for- ward-difference approximation to the Jacobian assumes that th relative errors in the functions are of the order of the machine precision. If this is not the case, HYBRD1 may fail (usually with INFO = 4). The user should then use HYBRD instead, or one of the programs which require the analytic Jacobian (HYBRJ1 and HYBRJ). 1 0 Page 0 Lack of good progress. HYBRD1 searches for a zero of the syste by minimizing the sum of the squares of the functions. In so doing, it can become trapped in a region where the minimum does not correspond to a zero of the system and, in this situ ation, the iteration eventually fails to make good progress. In particular, this will happen if the system does not have a zero. If the system has a zero, rerunning HYBRD1 from a dif- ferent starting point may be helpful. 0 6. Characteristics of the algorithm. 0 HYBRD1 is a modification of the Powell hybrid method. Two of its main characteristics involve the choice of the correction a a convex combination of the Newton and scaled gradient direc- tions, and the updating of the Jacobian by the rank-1 method of Broyden. The choice of the correction guarantees (under reason able conditions) global convergence for starting points far fro the solution and a fast rate of convergence. The Jacobian is approximated by forward differences at the starting point, but forward differences are not used again until the rank-1 method fails to produce satisfactory progress. 0 Timing. The time required by HYBRD1 to solve a given problem depends on N, the behavior of the functions, the accuracy requested, and the starting point. The number of arithmetic operations needed by HYBRD1 is about 11.5*(N**2) to process each call to FCN. Unless FCN can be evaluated quickly, the timing of HYBRD1 will be strongly influenced by the time spen in FCN. 0 Storage. HYBRD1 requires (3*N**2 + 17*N)/2 single precision storage locations, in addition to the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DOGLEG,SPMPAR,ENORM,FDJAC1,HYBRD, QFORM,QRFAC,R1MPYQ,R1UPDT 0 FORTRAN-supplied ... ABS,AMAX1,AMIN1,SQRT,MIN0,MOD 0 8. References. 0 M. J. D. Powell, A Hybrid Method for Nonlinear Equations. Numerical Methods for Nonlinear Algebraic Equations, P. Rabinowitz, editor. Gordon and Breach, 1970. 0 9. Example. 1 0 Page 0 The problem is to determine the values of x(1), x(2), ..., x(9) which solve the system of tridiagonal equations 0 (3-2*x(1))*x(1) -2*x(2) = -1 -x(i-1) + (3-2*x(i))*x(i) -2*x(i+1) = -1, i=2-8 -x(8) + (3-2*x(9))*x(9) = -1 0 C ********** C C DRIVER FOR HYBRD1 EXAMPLE. C SINGLE PRECISION VERSION C C ********** INTEGER J,N,INFO,LWA,NWRITE REAL TOL,FNORM REAL X(9),FVEC(9),WA(180) REAL ENORM,SPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C N = 9 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH SOLUTION. C DO 10 J = 1, 9 X(J) = -1.E0 10 CONTINUE C LWA = 180 C C SET TOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C TOL = SQRT(SPMPAR(1)) C CALL HYBRD1(FCN,N,X,FVEC,TOL,INFO,WA,LWA) FNORM = ENORM(N,FVEC) WRITE (NWRITE,1000) FNORM,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,E15.7 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // (5X,3E15.7)) C C LAST CARD OF DRIVER FOR HYBRD1 EXAMPLE. C END SUBROUTINE FCN(N,X,FVEC,IFLAG) INTEGER N,IFLAG REAL X(N),FVEC(N) C 1 0 Page 0 C SUBROUTINE FCN FOR HYBRD1 EXAMPLE. C INTEGER K REAL ONE,TEMP,TEMP1,TEMP2,THREE,TWO,ZERO DATA ZERO,ONE,TWO,THREE /0.E0,1.E0,2.E0,3.E0/ C DO 10 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.1192636E-07 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 -0.5706545E+00 -0.6816283E+00 -0.7017325E+00 -0.7042129E+00 -0.7013690E+00 -0.6918656E+00 -0.6657920E+00 -0.5960342E+00 -0.4164121E+00 1 0 1 0 Page 0 Documentation for MINPACK subroutine HYBRD 0 Single precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of HYBRD is to find a zero of a system of N non- linear functions in N variables by a modification of the Powell hybrid method. The user must provide a subroutine which calcu- lates the functions. The Jacobian is then calculated by a for- ward-difference approximation. 0 2. Subroutine and type statements. 0 SUBROUTINE HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN,DIAG, * MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC, * R,LR,QTF,WA1,WA2,WA3,WA4) INTEGER N,MAXFEV,ML,MU,MODE,NPRINT,INFO,NFEV,LDFJAC,LR REAL XTOL,EPSFCN,FACTOR REAL X(N),FVEC(N),DIAG(N),FJAC(LDFJAC,N),R(LR),QTF(N), * WA1(N),WA2(N),WA3(N),WA4(N) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to HYBRD and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from HYBRD. 0 FCN is the name of the user-supplied subroutine which calculate the functions. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows 0 SUBROUTINE FCN(N,X,FVEC,IFLAG) INTEGER N,IFLAG REAL X(N),FVEC(N) ---------- CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. ---------- RETURN END 0 The value of IFLAG should not be changed by FCN unless the 1 0 Page 0 user wants to terminate execution of HYBRD. In this case set IFLAG to a negative integer. 0 N is a positive integer input variable set to the number of functions and variables. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length N which contains the function evaluated at the output X. 0 XTOL is a nonnegative input variable. Termination occurs when the relative error between two consecutive iterates is at mos XTOL. Therefore, XTOL measures the relative error desired in the approximate solution. Section 4 contains more details about XTOL. 0 MAXFEV is a positive integer input variable. Termination occur when the number of calls to FCN is at least MAXFEV by the end of an iteration. 0 ML is a nonnegative integer input variable which specifies the number of subdiagonals within the band of the Jacobian matrix If the Jacobian is not banded, set ML to at least N - 1. 0 MU is a nonnegative integer input variable which specifies the number of superdiagonals within the band of the Jacobian matrix. If the Jacobian is not banded, set MU to at least N - 1. 0 EPSFCN is an input variable used in determining a suitable step for the forward-difference approximation. This approximation assumes that the relative errors in the functions are of the order of EPSFCN. If EPSFCN is less than the machine preci- sion, it is assumed that the relative errors in the functions are of the order of the machine precision. 0 DIAG is an array of length N. If MODE = 1 (see below), DIAG is internally set. If MODE = 2, DIAG must contain positive entries that serve as multiplicative scale factors for the variables. 0 MODE is an integer input variable. If MODE = 1, the variables will be scaled internally. If MODE = 2, the scaling is speci fied by the input DIAG. Other values of MODE are equivalent to MODE = 1. 0 FACTOR is a positive input variable used in determining the ini tial step bound. This bound is set to the product of FACTOR and the Euclidean norm of DIAG*X if nonzero, or else to FACTO itself. In most cases FACTOR should lie in the interval (.1,100.). 100. is a generally recommended value. 1 0 Page 0 NPRINT is an integer input variable that enables controlled printing of iterates if it is positive. In this case, FCN is called with IFLAG = 0 at the beginning of the first iteration and every NPRINT iterations thereafter and immediately prior to return, with X and FVEC available for printing. If NPRINT is not positive, no special calls of FCN with IFLAG = 0 are made. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Relative error between two consecutive iterates is at most XTOL. 0 INFO = 2 Number of calls to FCN has reached or exceeded MAXFEV. 0 INFO = 3 XTOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 4 Iteration is not making good progress, as measured by the improvement from the last five Jacobian eval uations. 0 INFO = 5 Iteration is not making good progress, as measured by the improvement from the last ten iterations. 0 Sections 4 and 5 contain more details about INFO. 0 NFEV is an integer output variable set to the number of calls t FCN. 0 FJAC is an output N by N array which contains the orthogonal matrix Q produced by the QR factorization of the final approx imate Jacobian. 0 LDFJAC is a positive integer input variable not less than N which specifies the leading dimension of the array FJAC. 0 R is an output array of length LR which contains the upper triangular matrix produced by the QR factorization of the final approximate Jacobian, stored rowwise. 0 LR is a positive integer input variable not less than (N*(N+1))/2. 0 QTF is an output array of length N which contains the vector (Q transpose)*FVEC. 0 WA1, WA2, WA3, and WA4 are work arrays of length N. 1 0 Page 0 4. Successful completion. 0 The accuracy of HYBRD is controlled by the convergence paramete XTOL. This parameter is used in a test which makes a compariso between the approximation X and a solution XSOL. HYBRD termi- nates when the test is satisfied. If the convergence parameter is less than the machine precision (as defined by the MINPACK function SPMPAR(1)), then HYBRD only attempts to satisfy the test defined by the machine precision. Further progress is not usually possible. 0 The test assumes that the functions are reasonably well behaved If this condition is not satisfied, then HYBRD may incorrectly indicate convergence. The validity of the answer can be checked, for example, by rerunning HYBRD with a tighter toler- ance. 0 Convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z and D is the diagonal matrix whose entries are defined by the array DIAG, then this test attempts to guaran- tee that 0 ENORM(D*(X-XSOL)) .LE. XTOL*ENORM(D*XSOL). 0 If this condition is satisfied with XTOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 1. There is a danger that the smaller compo- nents of D*X may have large relative errors, but the fast rat of convergence of HYBRD usually avoids this possibility. Unless high precision solutions are required, the recommended value for XTOL is the square root of the machine precision. 0 5. Unsuccessful completion. 0 Unsuccessful termination of HYBRD can be due to improper input parameters, arithmetic interrupts, an excessive number of func- tion evaluations, or lack of good progress. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or XTOL .LT. 0.E0, or MAXFEV .LE. 0, or ML .LT. 0, or MU .LT. 0, or FACTOR .LE. 0.E0, or LDFJAC .LT. N, or LR .LT. (N*(N+1))/2 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by HYBRD. In this case, it may be possible to remedy the situation by rerunning HYBRD with a smaller value of FACTOR. 0 Excessive number of function evaluations. A reasonable value for MAXFEV is 200*(N+1). If the number of calls to FCN reaches MAXFEV, then this indicates that the routine is con- verging very slowly as measured by the progress of FVEC, and 1 0 Page 0 INFO is set to 2. This situation should be unusual because, as indicated below, lack of good progress is usually diagnose earlier by HYBRD, causing termination with INFO = 4 or INFO = 5. 0 Lack of good progress. HYBRD searches for a zero of the system by minimizing the sum of the squares of the functions. In so doing, it can become trapped in a region where the minimum does not correspond to a zero of the system and, in this situ ation, the iteration eventually fails to make good progress. In particular, this will happen if the system does not have a zero. If the system has a zero, rerunning HYBRD from a dif- ferent starting point may be helpful. 0 6. Characteristics of the algorithm. 0 HYBRD is a modification of the Powell hybrid method. Two of it main characteristics involve the choice of the correction as a convex combination of the Newton and scaled gradient directions and the updating of the Jacobian by the rank-1 method of Broy- den. The choice of the correction guarantees (under reasonable conditions) global convergence for starting points far from the solution and a fast rate of convergence. The Jacobian is approximated by forward differences at the starting point, but forward differences are not used again until the rank-1 method fails to produce satisfactory progress. 0 Timing. The time required by HYBRD to solve a given problem depends on N, the behavior of the functions, the accuracy requested, and the starting point. The number of arithmetic operations needed by HYBRD is about 11.5*(N**2) to process each call to FCN. Unless FCN can be evaluated quickly, the timing of HYBRD will be strongly influenced by the time spent in FCN. 0 Storage. HYBRD requires (3*N**2 + 17*N)/2 single precision storage locations, in addition to the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DOGLEG,SPMPAR,ENORM,FDJAC1, QFORM,QRFAC,R1MPYQ,R1UPDT 0 FORTRAN-supplied ... ABS,AMAX1,AMIN1,SQRT,MIN0,MOD 0 8. References. 0 M. J. D. Powell, A Hybrid Method for Nonlinear Equations. 1 0 Page 0 Numerical Methods for Nonlinear Algebraic Equations, P. Rabinowitz, editor. Gordon and Breach, 1970. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), ..., x(9) which solve the system of tridiagonal equations 0 (3-2*x(1))*x(1) -2*x(2) = -1 -x(i-1) + (3-2*x(i))*x(i) -2*x(i+1) = -1, i=2-8 -x(8) + (3-2*x(9))*x(9) = -1 0 C ********** C C DRIVER FOR HYBRD EXAMPLE. C SINGLE PRECISION VERSION C C ********** INTEGER J,N,MAXFEV,ML,MU,MODE,NPRINT,INFO,NFEV,LDFJAC,LR,NWRITE REAL XTOL,EPSFCN,FACTOR,FNORM REAL X(9),FVEC(9),DIAG(9),FJAC(9,9),R(45),QTF(9), * WA1(9),WA2(9),WA3(9),WA4(9) REAL ENORM,SPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C N = 9 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH SOLUTION. C DO 10 J = 1, 9 X(J) = -1.E0 10 CONTINUE C LDFJAC = 9 LR = 45 C C SET XTOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C XTOL = SQRT(SPMPAR(1)) C MAXFEV = 2000 ML = 1 MU = 1 EPSFCN = 0.E0 MODE = 2 DO 20 J = 1, 9 DIAG(J) = 1.E0 1 0 Page 0 20 CONTINUE FACTOR = 1.E2 NPRINT = 0 C CALL HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN,DIAG, * MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC, * R,LR,QTF,WA1,WA2,WA3,WA4) FNORM = ENORM(N,FVEC) WRITE (NWRITE,1000) FNORM,NFEV,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,E15.7 // * 5X,31H NUMBER OF FUNCTION EVALUATIONS,I10 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // (5X,3E15.7)) C C LAST CARD OF DRIVER FOR HYBRD EXAMPLE. C END SUBROUTINE FCN(N,X,FVEC,IFLAG) INTEGER N,IFLAG REAL X(N),FVEC(N) C C SUBROUTINE FCN FOR HYBRD EXAMPLE. C INTEGER K REAL ONE,TEMP,TEMP1,TEMP2,THREE,TWO,ZERO DATA ZERO,ONE,TWO,THREE /0.E0,1.E0,2.E0,3.E0/ C IF (IFLAG .NE. 0) GO TO 5 C C INSERT PRINT STATEMENTS HERE WHEN NPRINT IS POSITIVE. C RETURN 5 CONTINUE DO 10 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.1192636E-07 0 NUMBER OF FUNCTION EVALUATIONS 14 1 0 Page 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 -0.5706545E+00 -0.6816283E+00 -0.7017325E+00 -0.7042129E+00 -0.7013690E+00 -0.6918656E+00 -0.6657920E+00 -0.5960342E+00 -0.4164121E+00 1 0 1 0 Page 0 Documentation for MINPACK subroutine HYBRJ1 0 Single precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of HYBRJ1 is to find a zero of a system of N non- linear functions in N variables by a modification of the Powell hybrid method. This is done by using the more general nonlinea equation solver HYBRJ. The user must provide a subroutine whic calculates the functions and the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA) INTEGER N,LDFJAC,INFO,LWA REAL TOL REAL X(N),FVEC(N),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to HYBRJ1 and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from HYBRJ1. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows. 0 SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER N,LDFJAC,IFLAG REAL X(N),FVEC(N),FJAC(LDFJAC,N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. ---------- RETURN END 0 The value of IFLAG should not be changed by FCN unless the 1 0 Page 0 user wants to terminate execution of HYBRJ1. In this case se IFLAG to a negative integer. 0 N is a positive integer input variable set to the number of functions and variables. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length N which contains the function evaluated at the output X. 0 FJAC is an output N by N array which contains the orthogonal matrix Q produced by the QR factorization of the final approx imate Jacobian. Section 6 contains more details about the approximation to the Jacobian. 0 LDFJAC is a positive integer input variable not less than N which specifies the leading dimension of the array FJAC. 0 TOL is a nonnegative input variable. Termination occurs when the algorithm estimates that the relative error between X and the solution is at most TOL. Section 4 contains more details about TOL. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Algorithm estimates that the relative error between X and the solution is at most TOL. 0 INFO = 2 Number of calls to FCN with IFLAG = 1 has reached 100*(N+1). 0 INFO = 3 TOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 4 Iteration is not making good progress. 0 Sections 4 and 5 contain more details about INFO. 0 WA is a work array of length LWA. 0 LWA is a positive integer input variable not less than (N*(N+13))/2. 0 4. Successful completion. 0 The accuracy of HYBRJ1 is controlled by the convergence 1 0 Page 0 parameter TOL. This parameter is used in a test which makes a comparison between the approximation X and a solution XSOL. HYBRJ1 terminates when the test is satisfied. If TOL is less than the machine precision (as defined by the MINPACK function SPMPAR(1)), then HYBRJ1 only attempts to satisfy the test defined by the machine precision. Further progress is not usu- ally possible. Unless high precision solutions are required, the recommended value for TOL is the square root of the machine precision. 0 The test assumes that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then HYBRJ1 ma incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning HYBRJ1 with a tighter toler- ance. 0 Convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(X-XSOL) .LE. TOL*ENORM(XSOL). 0 If this condition is satisfied with TOL = 10**(-K), then the larger components of X have K significant decimal digits and INFO is set to 1. There is a danger that the smaller compo- nents of X may have large relative errors, but the fast rate of convergence of HYBRJ1 usually avoids this possibility. 0 5. Unsuccessful completion. 0 Unsuccessful termination of HYBRJ1 can be due to improper input parameters, arithmetic interrupts, an excessive number of func- tion evaluations, or lack of good progress. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or LDFJAC .LT. N, or TOL .LT. 0.E0, or LWA .LT. (N*(N+13))/2. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by HYBRJ1. In this case, it may be possible to remedy the situation by not evalu ating the functions here, but instead setting the components of FVEC to numbers that exceed those in the initial FVEC, thereby indirectly reducing the step length. The step length can be more directly controlled by using instead HYBRJ, which includes in its calling sequence the step-length- governing parameter FACTOR. 0 Excessive number of function evaluations. If the number of calls to FCN with IFLAG = 1 reaches 100*(N+1), then this indi cates that the routine is converging very slowly as measured 1 0 Page 0 by the progress of FVEC, and INFO is set to 2. This situatio should be unusual because, as indicated below, lack of good progress is usually diagnosed earlier by HYBRJ1, causing ter- mination with INFO = 4. 0 Lack of good progress. HYBRJ1 searches for a zero of the syste by minimizing the sum of the squares of the functions. In so doing, it can become trapped in a region where the minimum does not correspond to a zero of the system and, in this situ ation, the iteration eventually fails to make good progress. In particular, this will happen if the system does not have a zero. If the system has a zero, rerunning HYBRJ1 from a dif- ferent starting point may be helpful. 0 6. Characteristics of the algorithm. 0 HYBRJ1 is a modification of the Powell hybrid method. Two of its main characteristics involve the choice of the correction a a convex combination of the Newton and scaled gradient direc- tions, and the updating of the Jacobian by the rank-1 method of Broyden. The choice of the correction guarantees (under reason able conditions) global convergence for starting points far fro the solution and a fast rate of convergence. The Jacobian is calculated at the starting point, but it is not recalculated until the rank-1 method fails to produce satisfactory progress. 0 Timing. The time required by HYBRJ1 to solve a given problem depends on N, the behavior of the functions, the accuracy requested, and the starting point. The number of arithmetic operations needed by HYBRJ1 is about 11.5*(N**2) to process each evaluation of the functions (call to FCN with IFLAG = 1) and 1.3*(N**3) to process each evaluation of the Jacobian (call to FCN with IFLAG = 2). Unless FCN can be evaluated quickly, the timing of HYBRJ1 will be strongly influenced by the time spent in FCN. 0 Storage. HYBRJ1 requires (3*N**2 + 17*N)/2 single precision storage locations, in addition to the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DOGLEG,SPMPAR,ENORM,HYBRJ, QFORM,QRFAC,R1MPYQ,R1UPDT 0 FORTRAN-supplied ... ABS,AMAX1,AMIN1,SQRT,MIN0,MOD 0 8. References. 1 0 Page 0 M. J. D. Powell, A Hybrid Method for Nonlinear Equations. Numerical Methods for Nonlinear Algebraic Equations, P. Rabinowitz, editor. Gordon and Breach, 1970. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), ..., x(9) which solve the system of tridiagonal equations 0 (3-2*x(1))*x(1) -2*x(2) = -1 -x(i-1) + (3-2*x(i))*x(i) -2*x(i+1) = -1, i=2-8 -x(8) + (3-2*x(9))*x(9) = -1 0 C ********** C C DRIVER FOR HYBRJ1 EXAMPLE. C SINGLE PRECISION VERSION C C ********** INTEGER J,N,LDFJAC,INFO,LWA,NWRITE REAL TOL,FNORM REAL X(9),FVEC(9),FJAC(9,9),WA(99) REAL ENORM,SPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C N = 9 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH SOLUTION. C DO 10 J = 1, 9 X(J) = -1.E0 10 CONTINUE C LDFJAC = 9 LWA = 99 C C SET TOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C TOL = SQRT(SPMPAR(1)) C CALL HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA) FNORM = ENORM(N,FVEC) WRITE (NWRITE,1000) FNORM,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,E15.7 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // (5X,3E15.7)) 1 0 Page 0 C C LAST CARD OF DRIVER FOR HYBRJ1 EXAMPLE. C END SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER N,LDFJAC,IFLAG REAL X(N),FVEC(N),FJAC(LDFJAC,N) C C SUBROUTINE FCN FOR HYBRJ1 EXAMPLE. C INTEGER J,K REAL ONE,TEMP,TEMP1,TEMP2,THREE,TWO,ZERO DATA ZERO,ONE,TWO,THREE,FOUR /0.E0,1.E0,2.E0,3.E0,4.E0/ C IF (IFLAG .EQ. 2) GO TO 20 DO 10 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 10 CONTINUE GO TO 50 20 CONTINUE DO 40 K = 1, N DO 30 J = 1, N FJAC(K,J) = ZERO 30 CONTINUE FJAC(K,K) = THREE - FOUR*X(K) IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -TWO 40 CONTINUE 50 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.1192636E-07 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 -0.5706545E+00 -0.6816283E+00 -0.7017325E+00 -0.7042129E+00 -0.7013690E+00 -0.6918656E+00 -0.6657920E+00 -0.5960342E+00 -0.4164121E+00 1 0 1 0 Page 0 Documentation for MINPACK subroutine HYBRJ 0 Single precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of HYBRJ is to find a zero of a system of N non- linear functions in N variables by a modification of the Powell hybrid method. The user must provide a subroutine which calcu- lates the functions and the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE HYBRJ(FCN,N,X,FVEC,FJAC,LDFJAC,XTOL,MAXFEV,DIAG, * MODE,FACTOR,NPRINT,INFO,NFEV,NJEV,R,LR,QTF, * WA1,WA2,WA3,WA4) INTEGER N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV,LR REAL XTOL,FACTOR REAL X(N),FVEC(N),FJAC(LDFJAC,N),DIAG(N),R(LR),QTF(N), * WA1(N),WA2(N),WA3(N),WA4(N) 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to HYBRJ and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from HYBRJ. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows. 0 SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER N,LDFJAC,IFLAG REAL X(N),FVEC(N),FJAC(LDFJAC,N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. ---------- RETURN END 1 0 Page 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of HYBRJ. In this case set IFLAG to a negative integer. 0 N is a positive integer input variable set to the number of functions and variables. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length N which contains the function evaluated at the output X. 0 FJAC is an output N by N array which contains the orthogonal matrix Q produced by the QR factorization of the final approx imate Jacobian. Section 6 contains more details about the approximation to the Jacobian. 0 LDFJAC is a positive integer input variable not less than N which specifies the leading dimension of the array FJAC. 0 XTOL is a nonnegative input variable. Termination occurs when the relative error between two consecutive iterates is at mos XTOL. Therefore, XTOL measures the relative error desired in the approximate solution. Section 4 contains more details about XTOL. 0 MAXFEV is a positive integer input variable. Termination occur when the number of calls to FCN with IFLAG = 1 has reached MAXFEV. 0 DIAG is an array of length N. If MODE = 1 (see below), DIAG is internally set. If MODE = 2, DIAG must contain positive entries that serve as multiplicative scale factors for the variables. 0 MODE is an integer input variable. If MODE = 1, the variables will be scaled internally. If MODE = 2, the scaling is speci fied by the input DIAG. Other values of MODE are equivalent to MODE = 1. 0 FACTOR is a positive input variable used in determining the ini tial step bound. This bound is set to the product of FACTOR and the Euclidean norm of DIAG*X if nonzero, or else to FACTO itself. In most cases FACTOR should lie in the interval (.1,100.). 100. is a generally recommended value. 0 NPRINT is an integer input variable that enables controlled printing of iterates if it is positive. In this case, FCN is called with IFLAG = 0 at the beginning of the first iteration and every NPRINT iterations thereafter and immediately prior to return, with X and FVEC available for printing. FVEC and FJAC should not be altered. If NPRINT is not positive, no 1 0 Page 0 special calls of FCN with IFLAG = 0 are made. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Relative error between two consecutive iterates is at most XTOL. 0 INFO = 2 Number of calls to FCN with IFLAG = 1 has reached MAXFEV. 0 INFO = 3 XTOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 4 Iteration is not making good progress, as measured by the improvement from the last five Jacobian eval uations. 0 INFO = 5 Iteration is not making good progress, as measured by the improvement from the last ten iterations. 0 Sections 4 and 5 contain more details about INFO. 0 NFEV is an integer output variable set to the number of calls t FCN with IFLAG = 1. 0 NJEV is an integer output variable set to the number of calls t FCN with IFLAG = 2. 0 R is an output array of length LR which contains the upper triangular matrix produced by the QR factorization of the final approximate Jacobian, stored rowwise. 0 LR is a positive integer input variable not less than (N*(N+1))/2. 0 QTF is an output array of length N which contains the vector (Q transpose)*FVEC. 0 WA1, WA2, WA3, and WA4 are work arrays of length N. 0 4. Successful completion. 0 The accuracy of HYBRJ is controlled by the convergence paramete XTOL. This parameter is used in a test which makes a compariso between the approximation X and a solution XSOL. HYBRJ termi- nates when the test is satisfied. If the convergence parameter is less than the machine precision (as defined by the MINPACK function SPMPAR(1)), then HYBRJ only attempts to satisfy the test defined by the machine precision. Further progress is not 1 0 Page 0 usually possible. 0 The test assumes that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then HYBRJ may incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning HYBRJ with a tighter toler- ance. 0 Convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z and D is the diagonal matrix whose entries are defined by the array DIAG, then this test attempts to guaran- tee that 0 ENORM(D*(X-XSOL)) .LE. XTOL*ENORM(D*XSOL). 0 If this condition is satisfied with XTOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 1. There is a danger that the smaller compo- nents of D*X may have large relative errors, but the fast rat of convergence of HYBRJ usually avoids this possibility. Unless high precision solutions are required, the recommended value for XTOL is the square root of the machine precision. 0 5. Unsuccessful completion. 0 Unsuccessful termination of HYBRJ can be due to improper input parameters, arithmetic interrupts, an excessive number of func- tion evaluations, or lack of good progress. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or LDFJAC .LT. N, or XTOL .LT. 0.E0, or MAXFEV .LE. 0, or FACTOR .LE. 0.E0, or LR .LT. (N*(N+1))/2. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by HYBRJ. In this case, it may be possible to remedy the situation by rerunning HYBRJ with a smaller value of FACTOR. 0 Excessive number of function evaluations. A reasonable value for MAXFEV is 100*(N+1). If the number of calls to FCN with IFLAG = 1 reaches MAXFEV, then this indicates that the routin is converging very slowly as measured by the progress of FVEC and INFO is set to 2. This situation should be unusual because, as indicated below, lack of good progress is usually diagnosed earlier by HYBRJ, causing termination with INFO = 4 or INFO = 5. 0 Lack of good progress. HYBRJ searches for a zero of the system by minimizing the sum of the squares of the functions. In so 1 0 Page 0 doing, it can become trapped in a region where the minimum does not correspond to a zero of the system and, in this situ ation, the iteration eventually fails to make good progress. In particular, this will happen if the system does not have a zero. If the system has a zero, rerunning HYBRJ from a dif- ferent starting point may be helpful. 0 6. Characteristics of the algorithm. 0 HYBRJ is a modification of the Powell hybrid method. Two of it main characteristics involve the choice of the correction as a convex combination of the Newton and scaled gradient directions and the updating of the Jacobian by the rank-1 method of Broy- den. The choice of the correction guarantees (under reasonable conditions) global convergence for starting points far from the solution and a fast rate of convergence. The Jacobian is calcu lated at the starting point, but it is not recalculated until the rank-1 method fails to produce satisfactory progress. 0 Timing. The time required by HYBRJ to solve a given problem depends on N, the behavior of the functions, the accuracy requested, and the starting point. The number of arithmetic operations needed by HYBRJ is about 11.5*(N**2) to process each evaluation of the functions (call to FCN with IFLAG = 1) and 1.3*(N**3) to process each evaluation of the Jacobian (call to FCN with IFLAG = 2). Unless FCN can be evaluated quickly, the timing of HYBRJ will be strongly influenced by the time spent in FCN. 0 Storage. HYBRJ requires (3*N**2 + 17*N)/2 single precision storage locations, in addition to the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DOGLEG,SPMPAR,ENORM, QFORM,QRFAC,R1MPYQ,R1UPDT 0 FORTRAN-supplied ... ABS,AMAX1,AMIN1,SQRT,MIN0,MOD 0 8. References. 0 M. J. D. Powell, A Hybrid Method for Nonlinear Equations. Numerical Methods for Nonlinear Algebraic Equations, P. Rabinowitz, editor. Gordon and Breach, 1970. 0 9. Example. 1 0 Page 0 The problem is to determine the values of x(1), x(2), ..., x(9) which solve the system of tridiagonal equations 0 (3-2*x(1))*x(1) -2*x(2) = -1 -x(i-1) + (3-2*x(i))*x(i) -2*x(i+1) = -1, i=2-8 -x(8) + (3-2*x(9))*x(9) = -1 0 C ********** C C DRIVER FOR HYBRJ EXAMPLE. C SINGLE PRECISION VERSION C C ********** INTEGER J,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV,LR,NWRITE REAL XTOL,FACTOR,FNORM REAL X(9),FVEC(9),FJAC(9,9),DIAG(9),R(45),QTF(9), * WA1(9),WA2(9),WA3(9),WA4(9) REAL ENORM,SPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C N = 9 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH SOLUTION. C DO 10 J = 1, 9 X(J) = -1.E0 10 CONTINUE C LDFJAC = 9 LR = 45 C C SET XTOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C XTOL = SQRT(SPMPAR(1)) C MAXFEV = 1000 MODE = 2 DO 20 J = 1, 9 DIAG(J) = 1.E0 20 CONTINUE FACTOR = 1.E2 NPRINT = 0 C CALL HYBRJ(FCN,N,X,FVEC,FJAC,LDFJAC,XTOL,MAXFEV,DIAG, * MODE,FACTOR,NPRINT,INFO,NFEV,NJEV,R,LR,QTF, * WA1,WA2,WA3,WA4) FNORM = ENORM(N,FVEC) WRITE (NWRITE,1000) FNORM,NFEV,NJEV,INFO,(X(J),J=1,N) 1 0 Page 0 STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,E15.7 // * 5X,31H NUMBER OF FUNCTION EVALUATIONS,I10 // * 5X,31H NUMBER OF JACOBIAN EVALUATIONS,I10 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // (5X,3E15.7)) C C LAST CARD OF DRIVER FOR HYBRJ EXAMPLE. C END SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER N,LDFJAC,IFLAG REAL X(N),FVEC(N),FJAC(LDFJAC,N) C C SUBROUTINE FCN FOR HYBRJ EXAMPLE. C INTEGER J,K REAL ONE,TEMP,TEMP1,TEMP2,THREE,TWO,ZERO DATA ZERO,ONE,TWO,THREE,FOUR /0.E0,1.E0,2.E0,3.E0,4.E0/ C IF (IFLAG .NE. 0) GO TO 5 C C INSERT PRINT STATEMENTS HERE WHEN NPRINT IS POSITIVE. C RETURN 5 CONTINUE IF (IFLAG .EQ. 2) GO TO 20 DO 10 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 10 CONTINUE GO TO 50 20 CONTINUE DO 40 K = 1, N DO 30 J = 1, N FJAC(K,J) = ZERO 30 CONTINUE FJAC(K,K) = THREE - FOUR*X(K) IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -TWO 40 CONTINUE 50 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 1 0 Page 0 FINAL L2 NORM OF THE RESIDUALS 0.1192636E-07 0 NUMBER OF FUNCTION EVALUATIONS 11 0 NUMBER OF JACOBIAN EVALUATIONS 1 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 -0.5706545E+00 -0.6816283E+00 -0.7017325E+00 -0.7042129E+00 -0.7013690E+00 -0.6918656E+00 -0.6657920E+00 -0.5960342E+00 -0.4164121E+00 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMDER1 0 Single precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMDER1 is to minimize the sum of the squares of nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm. This is done by using the more general least-squares solver LMDER. The user must provide a subroutine which calculates the functions and the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE LMDER1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL, * INFO,IPVT,WA,LWA) INTEGER M,N,LDFJAC,INFO,LWA INTEGER IPVT(N) REAL TOL REAL X(N),FVEC(M),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMDER1 and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMDER1. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows. 0 SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER M,N,LDFJAC,IFLAG REAL X(N),FVEC(M),FJAC(LDFJAC,N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. ---------- RETURN END 1 0 Page 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMDER1. In this case se IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 FJAC is an output M by N array. The upper N by N submatrix of FJAC contains an upper triangular matrix R with diagonal ele- ments of nonincreasing magnitude such that 0 T T T P *(JAC *JAC)*P = R *R, 0 where P is a permutation matrix and JAC is the final calcu- lated Jacobian. Column j of P is column IPVT(j) (see below) of the identity matrix. The lower trapezoidal part of FJAC contains information generated during the computation of R. 0 LDFJAC is a positive integer input variable not less than M which specifies the leading dimension of the array FJAC. 0 TOL is a nonnegative input variable. Termination occurs when the algorithm estimates either that the relative error in the sum of squares is at most TOL or that the relative error between X and the solution is at most TOL. Section 4 contain more details about TOL. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Algorithm estimates that the relative error in the sum of squares is at most TOL. 0 INFO = 2 Algorithm estimates that the relative error between X and the solution is at most TOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 FVEC is orthogonal to the columns of the Jacobian t machine precision. 1 0 Page 0 INFO = 5 Number of calls to FCN with IFLAG = 1 has reached 100*(N+1). 0 INFO = 6 TOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 TOL is too small. No further improvement in the approximate solution X is possible. 0 Sections 4 and 5 contain more details about INFO. 0 IPVT is an integer output array of length N. IPVT defines a permutation matrix P such that JAC*P = Q*R, where JAC is the final calculated Jacobian, Q is orthogonal (not stored), and is upper triangular with diagonal elements of nonincreasing magnitude. Column j of P is column IPVT(j) of the identity matrix. 0 WA is a work array of length LWA. 0 LWA is a positive integer input variable not less than 5*N+M. 0 4. Successful completion. 0 The accuracy of LMDER1 is controlled by the convergence parame- ter TOL. This parameter is used in tests which make three type of comparisons between the approximation X and a solution XSOL. LMDER1 terminates when any of the tests is satisfied. If TOL i less than the machine precision (as defined by the MINPACK func tion SPMPAR(1)), then LMDER1 only attempts to satisfy the test defined by the machine precision. Further progress is not usu- ally possible. Unless high precision solutions are required, the recommended value for TOL is the square root of the machine precision. 0 The tests assume that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then LMDER1 ma incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning LMDER1 with a tighter toler- ance. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+TOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with TOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an INFO is set to 1 (or to 3 if the second test is also 1 0 Page 0 satisfied). 0 Second convergence test. If D is a diagonal matrix (implicitly generated by LMDER1) whose entries contain scale factors for the variables, then this test attempts to guarantee that 0 ENORM(D*(X-XSOL)) .LE. TOL*ENORM(D*XSOL). 0 If this condition is satisfied with TOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but the choice of D is such that the accuracy of the components of X is usually related t their sensitivity. 0 Third convergence test. This test is satisfied when FVEC is orthogonal to the columns of the Jacobian to machine preci- sion. There is no clear relationship between this test and the accuracy of LMDER1, and furthermore, the test is equally well satisfied at other critical points, namely maximizers an saddle points. Therefore, termination caused by this test (INFO = 4) should be examined carefully. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMDER1 can be due to improper input parameters, arithmetic interrupts, or an excessive number of function evaluations. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or LDFJAC .LT. M, or TOL .LT. 0.E0, or LWA .LT. 5*N+M. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMDER1. In this case, it may be possible to remedy the situation by not evalu ating the functions here, but instead setting the components of FVEC to numbers that exceed those in the initial FVEC, thereby indirectly reducing the step length. The step length can be more directly controlled by using instead LMDER, which includes in its calling sequence the step-length- governing parameter FACTOR. 0 Excessive number of function evaluations. If the number of calls to FCN with IFLAG = 1 reaches 100*(N+1), then this indi cates that the routine is converging very slowly as measured by the progress of FVEC, and INFO is set to 5. In this case, it may be helpful to restart LMDER1, thereby forcing it to disregard old (and possibly harmful) information. 0 1 0 Page 0 6. Characteristics of the algorithm. 0 LMDER1 is a modification of the Levenberg-Marquardt algorithm. Two of its main characteristics involve the proper use of implicitly scaled variables and an optimal choice for the cor- rection. The use of implicitly scaled variables achieves scale invariance of LMDER1 and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (under reasonable conditions) global convergence from starting points far from th solution and a fast rate of convergence for problems with small residuals. 0 Timing. The time required by LMDER1 to solve a given problem depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMDER1 is about N**3 to process each evaluation of the functions (call to FCN with IFLAG = 1) and M*(N**2) to process each evaluation of the Jacobian (call to FCN with IFLAG = 2). Unless FCN can be evaluated quickly, the timing of LMDER1 will be strongly influenced by the time spent in FCN. 0 Storage. LMDER1 requires M*N + 2*M + 6*N single precision sto- rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... SPMPAR,ENORM,LMDER,LMPAR,QRFAC,QRSOLV 0 FORTRAN-supplied ... ABS,AMAX1,AMIN1,SQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 1 0 Page 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMDER1 EXAMPLE. C SINGLE PRECISION VERSION C C ********** INTEGER J,M,N,LDFJAC,INFO,LWA,NWRITE INTEGER IPVT(3) REAL TOL,FNORM REAL X(3),FVEC(15),FJAC(15,3),WA(30) REAL ENORM,SPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.E0 X(2) = 1.E0 X(3) = 1.E0 C LDFJAC = 15 LWA = 30 C C SET TOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C TOL = SQRT(SPMPAR(1)) C CALL LMDER1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL, * INFO,IPVT,WA,LWA) FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,E15.7 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3E15.7) C C LAST CARD OF DRIVER FOR LMDER1 EXAMPLE. C 1 0 Page 0 END SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER M,N,LDFJAC,IFLAG REAL X(N),FVEC(M),FJAC(LDFJAC,N) C C SUBROUTINE FCN FOR LMDER1 EXAMPLE. C INTEGER I REAL TMP1,TMP2,TMP3,TMP4 REAL Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4E-1,1.8E-1,2.2E-1,2.5E-1,2.9E-1,3.2E-1,3.5E-1,3.9E-1, * 3.7E-1,5.8E-1,7.3E-1,9.6E-1,1.34E0,2.1E0,4.39E0/ C IF (IFLAG .EQ. 2) GO TO 20 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE GO TO 40 20 CONTINUE DO 30 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJAC(I,1) = -1.E0 FJAC(I,2) = TMP1*TMP2/TMP4 FJAC(I,3) = TMP1*TMP3/TMP4 30 CONTINUE 40 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596E-01 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 0.8241058E-01 0.1133037E+01 0.2343695E+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMDER 0 Single precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMDER is to minimize the sum of the squares of M nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm. The user must provide a subrou- tine which calculates the functions and the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE LMDER(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV INTEGER IPVT(N) REAL FTOL,XTOL,GTOL,FACTOR REAL X(N),FVEC(M),FJAC(LDFJAC,N),DIAG(N),QTF(N), * WA1(N),WA2(N),WA3(N),WA4(M) 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMDER and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMDER. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows. 0 SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER M,N,LDFJAC,IFLAG REAL X(N),FVEC(M),FJAC(LDFJAC,N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. ---------- RETURN END 1 0 Page 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMDER. In this case set IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 FJAC is an output M by N array. The upper N by N submatrix of FJAC contains an upper triangular matrix R with diagonal ele- ments of nonincreasing magnitude such that 0 T T T P *(JAC *JAC)*P = R *R, 0 where P is a permutation matrix and JAC is the final calcu- lated Jacobian. Column j of P is column IPVT(j) (see below) of the identity matrix. The lower trapezoidal part of FJAC contains information generated during the computation of R. 0 LDFJAC is a positive integer input variable not less than M which specifies the leading dimension of the array FJAC. 0 FTOL is a nonnegative input variable. Termination occurs when both the actual and predicted relative reductions in the sum of squares are at most FTOL. Therefore, FTOL measures the relative error desired in the sum of squares. Section 4 con- tains more details about FTOL. 0 XTOL is a nonnegative input variable. Termination occurs when the relative error between two consecutive iterates is at mos XTOL. Therefore, XTOL measures the relative error desired in the approximate solution. Section 4 contains more details about XTOL. 0 GTOL is a nonnegative input variable. Termination occurs when the cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. Therefore, GTOL measures the orthogonality desired between the function vecto and the columns of the Jacobian. Section 4 contains more details about GTOL. 0 MAXFEV is a positive integer input variable. Termination occur when the number of calls to FCN with IFLAG = 1 has reached MAXFEV. 1 0 Page 0 DIAG is an array of length N. If MODE = 1 (see below), DIAG is internally set. If MODE = 2, DIAG must contain positive entries that serve as multiplicative scale factors for the variables. 0 MODE is an integer input variable. If MODE = 1, the variables will be scaled internally. If MODE = 2, the scaling is speci fied by the input DIAG. Other values of MODE are equivalent to MODE = 1. 0 FACTOR is a positive input variable used in determining the ini tial step bound. This bound is set to the product of FACTOR and the Euclidean norm of DIAG*X if nonzero, or else to FACTO itself. In most cases FACTOR should lie in the interval (.1,100.). 100. is a generally recommended value. 0 NPRINT is an integer input variable that enables controlled printing of iterates if it is positive. In this case, FCN is called with IFLAG = 0 at the beginning of the first iteration and every NPRINT iterations thereafter and immediately prior to return, with X, FVEC, and FJAC available for printing. FVEC and FJAC should not be altered. If NPRINT is not posi- tive, no special calls of FCN with IFLAG = 0 are made. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Both actual and predicted relative reductions in th sum of squares are at most FTOL. 0 INFO = 2 Relative error between two consecutive iterates is at most XTOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 The cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. 0 INFO = 5 Number of calls to FCN with IFLAG = 1 has reached MAXFEV. 0 INFO = 6 FTOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 XTOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 8 GTOL is too small. FVEC is orthogonal to the columns of the Jacobian to machine precision. 0 Sections 4 and 5 contain more details about INFO. 1 0 Page 0 NFEV is an integer output variable set to the number of calls t FCN with IFLAG = 1. 0 NJEV is an integer output variable set to the number of calls t FCN with IFLAG = 2. 0 IPVT is an integer output array of length N. IPVT defines a permutation matrix P such that JAC*P = Q*R, where JAC is the final calculated Jacobian, Q is orthogonal (not stored), and is upper triangular with diagonal elements of nonincreasing magnitude. Column j of P is column IPVT(j) of the identity matrix. 0 QTF is an output array of length N which contains the first N elements of the vector (Q transpose)*FVEC. 0 WA1, WA2, and WA3 are work arrays of length N. 0 WA4 is a work array of length M. 0 4. Successful completion. 0 The accuracy of LMDER is controlled by the convergence parame- ters FTOL, XTOL, and GTOL. These parameters are used in tests which make three types of comparisons between the approximation X and a solution XSOL. LMDER terminates when any of the tests is satisfied. If any of the convergence parameters is less tha the machine precision (as defined by the MINPACK function SPMPAR(1)), then LMDER only attempts to satisfy the test define by the machine precision. Further progress is not usually pos- sible. 0 The tests assume that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then LMDER may incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning LMDER with tighter toler- ances. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+FTOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with FTOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an INFO is set to 1 (or to 3 if the second test is also satis- fied). Unless high precision solutions are required, the recommended value for FTOL is the square root of the machine precision. 1 0 Page 0 Second convergence test. If D is the diagonal matrix whose entries are defined by the array DIAG, then this test attempt to guarantee that 0 ENORM(D*(X-XSOL)) .LE. XTOL*ENORM(D*XSOL). 0 If this condition is satisfied with XTOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but if MODE = 1, then the accuracy of the components of X is usually related to their sensitivity. Unless high precision solutions are required, the recommended value for XTOL is the square root of the machine precision. 0 Third convergence test. This test is satisfied when the cosine of the angle between FVEC and any column of the Jacobian at X is at most GTOL in absolute value. There is no clear rela- tionship between this test and the accuracy of LMDER, and furthermore, the test is equally well satisfied at other crit ical points, namely maximizers and saddle points. Therefore, termination caused by this test (INFO = 4) should be examined carefully. The recommended value for GTOL is zero. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMDER can be due to improper input parameters, arithmetic interrupts, or an excessive number of function evaluations. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or LDFJAC .LT. M, or FTOL .LT. 0.E0, or XTOL .LT. 0.E0, or GTOL .LT. 0.E0, or MAXFEV .LE. 0, or FACTOR .LE. 0.E0. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMDER. In this case, it may be possible to remedy the situation by rerunning LMDER with a smaller value of FACTOR. 0 Excessive number of function evaluations. A reasonable value for MAXFEV is 100*(N+1). If the number of calls to FCN with IFLAG = 1 reaches MAXFEV, then this indicates that the routin is converging very slowly as measured by the progress of FVEC and INFO is set to 5. In this case, it may be helpful to restart LMDER with MODE set to 1. 0 6. Characteristics of the algorithm. 0 LMDER is a modification of the Levenberg-Marquardt algorithm. 1 0 Page 0 Two of its main characteristics involve the proper use of implicitly scaled variables (if MODE = 1) and an optimal choice for the correction. The use of implicitly scaled variables achieves scale invariance of LMDER and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (unde reasonable conditions) global convergence from starting points far from the solution and a fast rate of convergence for prob- lems with small residuals. 0 Timing. The time required by LMDER to solve a given problem depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMDER is about N**3 to process eac evaluation of the functions (call to FCN with IFLAG = 1) and M*(N**2) to process each evaluation of the Jacobian (call to FCN with IFLAG = 2). Unless FCN can be evaluated quickly, th timing of LMDER will be strongly influenced by the time spent in FCN. 0 Storage. LMDER requires M*N + 2*M + 6*N single precision sto- rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... SPMPAR,ENORM,LMPAR,QRFAC,QRSOLV 0 FORTRAN-supplied ... ABS,AMAX1,AMIN1,SQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 1 0 Page 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMDER EXAMPLE. C SINGLE PRECISION VERSION C C ********** INTEGER J,M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV,NWRITE INTEGER IPVT(3) REAL FTOL,XTOL,GTOL,FACTOR,FNORM REAL X(3),FVEC(15),FJAC(15,3),DIAG(3),QTF(3), * WA1(3),WA2(3),WA3(3),WA4(15) REAL ENORM,SPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.E0 X(2) = 1.E0 X(3) = 1.E0 C LDFJAC = 15 C C SET FTOL AND XTOL TO THE SQUARE ROOT OF THE MACHINE PRECISION C AND GTOL TO ZERO. UNLESS HIGH PRECISION SOLUTIONS ARE C REQUIRED, THESE ARE THE RECOMMENDED SETTINGS. C FTOL = SQRT(SPMPAR(1)) XTOL = SQRT(SPMPAR(1)) GTOL = 0.E0 C MAXFEV = 400 MODE = 1 FACTOR = 1.E2 NPRINT = 0 C CALL LMDER(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,NFEV,NJEV,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,E15.7 // 1 0 Page 0 * 5X,31H NUMBER OF FUNCTION EVALUATIONS,I10 // * 5X,31H NUMBER OF JACOBIAN EVALUATIONS,I10 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3E15.7) C C LAST CARD OF DRIVER FOR LMDER EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER M,N,LDFJAC,IFLAG REAL X(N),FVEC(M),FJAC(LDFJAC,N) C C SUBROUTINE FCN FOR LMDER EXAMPLE. C INTEGER I REAL TMP1,TMP2,TMP3,TMP4 REAL Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4E-1,1.8E-1,2.2E-1,2.5E-1,2.9E-1,3.2E-1,3.5E-1,3.9E-1, * 3.7E-1,5.8E-1,7.3E-1,9.6E-1,1.34E0,2.1E0,4.39E0/ C IF (IFLAG .NE. 0) GO TO 5 C C INSERT PRINT STATEMENTS HERE WHEN NPRINT IS POSITIVE. C RETURN 5 CONTINUE IF (IFLAG .EQ. 2) GO TO 20 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE GO TO 40 20 CONTINUE DO 30 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJAC(I,1) = -1.E0 FJAC(I,2) = TMP1*TMP2/TMP4 FJAC(I,3) = TMP1*TMP3/TMP4 30 CONTINUE 40 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 1 0 Page 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596E-01 0 NUMBER OF FUNCTION EVALUATIONS 6 0 NUMBER OF JACOBIAN EVALUATIONS 5 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 0.8241058E-01 0.1133037E+01 0.2343695E+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMSTR1 0 Single precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMSTR1 is to minimize the sum of the squares of nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm which uses minimal storage. This is done by using the more general least-squares solver LMSTR. The user must provide a subroutine which calculates the func- tions and the rows of the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE LMSTR1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL, * INFO,IPVT,WA,LWA) INTEGER M,N,LDFJAC,INFO,LWA INTEGER IPVT(N) REAL TOL REAL X(N),FVEC(M),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMSTR1 and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMSTR1. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the rows of the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program and should be written as follows. 0 SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) INTEGER M,N,IFLAG REAL X(N),FVEC(M),FJROW(N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. IF IFLAG = I CALCULATE THE (I-1)-ST ROW OF THE JACOBIAN AT X AND RETURN THIS VECTOR IN FJROW. ---------- RETURN 1 0 Page 0 END 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMSTR1. In this case se IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 FJAC is an output N by N array. The upper triangle of FJAC con tains an upper triangular matrix R such that 0 T T T P *(JAC *JAC)*P = R *R, 0 where P is a permutation matrix and JAC is the final calcu- lated Jacobian. Column j of P is column IPVT(j) (see below) of the identity matrix. The lower triangular part of FJAC contains information generated during the computation of R. 0 LDFJAC is a positive integer input variable not less than N which specifies the leading dimension of the array FJAC. 0 TOL is a nonnegative input variable. Termination occurs when the algorithm estimates either that the relative error in the sum of squares is at most TOL or that the relative error between X and the solution is at most TOL. Section 4 contain more details about TOL. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Algorithm estimates that the relative error in the sum of squares is at most TOL. 0 INFO = 2 Algorithm estimates that the relative error between X and the solution is at most TOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 FVEC is orthogonal to the columns of the Jacobian t 1 0 Page 0 machine precision. 0 INFO = 5 Number of calls to FCN with IFLAG = 1 has reached 100*(N+1). 0 INFO = 6 TOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 TOL is too small. No further improvement in the approximate solution X is possible. 0 Sections 4 and 5 contain more details about INFO. 0 IPVT is an integer output array of length N. IPVT defines a permutation matrix P such that JAC*P = Q*R, where JAC is the final calculated Jacobian, Q is orthogonal (not stored), and is upper triangular. Column j of P is column IPVT(j) of the identity matrix. 0 WA is a work array of length LWA. 0 LWA is a positive integer input variable not less than 5*N+M. 0 4. Successful completion. 0 The accuracy of LMSTR1 is controlled by the convergence parame- ter TOL. This parameter is used in tests which make three type of comparisons between the approximation X and a solution XSOL. LMSTR1 terminates when any of the tests is satisfied. If TOL i less than the machine precision (as defined by the MINPACK func tion SPMPAR(1)), then LMSTR1 only attempts to satisfy the test defined by the machine precision. Further progress is not usu- ally possible. Unless high precision solutions are required, the recommended value for TOL is the square root of the machine precision. 0 The tests assume that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then LMSTR1 ma incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning LMSTR1 with a tighter toler- ance. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+TOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with TOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an 1 0 Page 0 INFO is set to 1 (or to 3 if the second test is also satis- fied). 0 Second convergence test. If D is a diagonal matrix (implicitly generated by LMSTR1) whose entries contain scale factors for the variables, then this test attempts to guarantee that 0 ENORM(D*(X-XSOL)) .LE. TOL*ENORM(D*XSOL). 0 If this condition is satisfied with TOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but the choice of D is such that the accuracy of the components of X is usually related t their sensitivity. 0 Third convergence test. This test is satisfied when FVEC is orthogonal to the columns of the Jacobian to machine preci- sion. There is no clear relationship between this test and the accuracy of LMSTR1, and furthermore, the test is equally well satisfied at other critical points, namely maximizers an saddle points. Therefore, termination caused by this test (INFO = 4) should be examined carefully. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMSTR1 can be due to improper input parameters, arithmetic interrupts, or an excessive number of function evaluations. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or LDFJAC .LT. N, or TOL .LT. 0.E0, or LWA .LT. 5*N+M. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMSTR1. In this case, it may be possible to remedy the situation by not evalu ating the functions here, but instead setting the components of FVEC to numbers that exceed those in the initial FVEC, thereby indirectly reducing the step length. The step length can be more directly controlled by using instead LMSTR, which includes in its calling sequence the step-length- governing parameter FACTOR. 0 Excessive number of function evaluations. If the number of calls to FCN with IFLAG = 1 reaches 100*(N+1), then this indi cates that the routine is converging very slowly as measured by the progress of FVEC, and INFO is set to 5. In this case, it may be helpful to restart LMSTR1, thereby forcing it to disregard old (and possibly harmful) information. 1 0 Page 0 6. Characteristics of the algorithm. 0 LMSTR1 is a modification of the Levenberg-Marquardt algorithm. Two of its main characteristics involve the proper use of implicitly scaled variables and an optimal choice for the cor- rection. The use of implicitly scaled variables achieves scale invariance of LMSTR1 and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (under reasonable conditions) global convergence from starting points far from th solution and a fast rate of convergence for problems with small residuals. 0 Timing. The time required by LMSTR1 to solve a given problem depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMSTR1 is about N**3 to process each evaluation of the functions (call to FCN with IFLAG = 1) and 1.5*(N**2) to process each row of the Jacobian (call to FCN with IFLAG .GE. 2). Unless FCN can be evaluated quickly, the timing of LMSTR1 will be strongly influenced by the time spent in FCN. 0 Storage. LMSTR1 requires N**2 + 2*M + 6*N single precision sto rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... SPMPAR,ENORM,LMSTR,LMPAR,QRFAC,QRSOLV, RWUPDT 0 FORTRAN-supplied ... ABS,AMAX1,AMIN1,SQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 1 0 Page 0 to the data 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMSTR1 EXAMPLE. C SINGLE PRECISION VERSION C C ********** INTEGER J,M,N,LDFJAC,INFO,LWA,NWRITE INTEGER IPVT(3) REAL TOL,FNORM REAL X(3),FVEC(15),FJAC(3,3),WA(30) REAL ENORM,SPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.E0 X(2) = 1.E0 X(3) = 1.E0 C LDFJAC = 3 LWA = 30 C C SET TOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C TOL = SQRT(SPMPAR(1)) C CALL LMSTR1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL, * INFO,IPVT,WA,LWA) FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,E15.7 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3E15.7) C 1 0 Page 0 C LAST CARD OF DRIVER FOR LMSTR1 EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) INTEGER M,N,IFLAG REAL X(N),FVEC(M),FJROW(N) C C SUBROUTINE FCN FOR LMSTR1 EXAMPLE. C INTEGER I REAL TMP1,TMP2,TMP3,TMP4 REAL Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4E-1,1.8E-1,2.2E-1,2.5E-1,2.9E-1,3.2E-1,3.5E-1,3.9E-1, * 3.7E-1,5.8E-1,7.3E-1,9.6E-1,1.34E0,2.1E0,4.39E0/ C IF (IFLAG .GE. 2) GO TO 20 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE GO TO 40 20 CONTINUE I = IFLAG - 1 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJROW(1) = -1.E0 FJROW(2) = TMP1*TMP2/TMP4 FJROW(3) = TMP1*TMP3/TMP4 30 CONTINUE 40 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596E-01 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 0.8241058E-01 0.1133037E+01 0.2343695E+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMSTR 0 Single precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMSTR is to minimize the sum of the squares of M nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm which uses minimal storage. The user must provide a subroutine which calculates the functions and the rows of the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE LMSTR(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV INTEGER IPVT(N) REAL FTOL,XTOL,GTOL,FACTOR REAL X(N),FVEC(M),FJAC(LDFJAC,N),DIAG(N),QTF(N), * WA1(N),WA2(N),WA3(N),WA4(M) 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMSTR and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMSTR. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the rows of the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program and should be written as follows. 0 SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) INTEGER M,N,IFLAG REAL X(N),FVEC(M),FJROW(N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. IF IFLAG = I CALCULATE THE (I-1)-ST ROW OF THE JACOBIAN AT X AND RETURN THIS VECTOR IN FJROW. ---------- RETURN 1 0 Page 0 END 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMSTR. In this case set IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 FJAC is an output N by N array. The upper triangle of FJAC con tains an upper triangular matrix R such that 0 T T T P *(JAC *JAC)*P = R *R, 0 where P is a permutation matrix and JAC is the final calcu- lated Jacobian. Column j of P is column IPVT(j) (see below) of the identity matrix. The lower triangular part of FJAC contains information generated during the computation of R. 0 LDFJAC is a positive integer input variable not less than N which specifies the leading dimension of the array FJAC. 0 FTOL is a nonnegative input variable. Termination occurs when both the actual and predicted relative reductions in the sum of squares are at most FTOL. Therefore, FTOL measures the relative error desired in the sum of squares. Section 4 con- tains more details about FTOL. 0 XTOL is a nonnegative input variable. Termination occurs when the relative error between two consecutive iterates is at mos XTOL. Therefore, XTOL measures the relative error desired in the approximate solution. Section 4 contains more details about XTOL. 0 GTOL is a nonnegative input variable. Termination occurs when the cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. Therefore, GTOL measures the orthogonality desired between the function vecto and the columns of the Jacobian. Section 4 contains more details about GTOL. 0 MAXFEV is a positive integer input variable. Termination occur when the number of calls to FCN with IFLAG = 1 has reached 1 0 Page 0 MAXFEV. 0 DIAG is an array of length N. If MODE = 1 (see below), DIAG is internally set. If MODE = 2, DIAG must contain positive entries that serve as multiplicative scale factors for the variables. 0 MODE is an integer input variable. If MODE = 1, the variables will be scaled internally. If MODE = 2, the scaling is speci fied by the input DIAG. Other values of MODE are equivalent to MODE = 1. 0 FACTOR is a positive input variable used in determining the ini tial step bound. This bound is set to the product of FACTOR and the Euclidean norm of DIAG*X if nonzero, or else to FACTO itself. In most cases FACTOR should lie in the interval (.1,100.). 100. is a generally recommended value. 0 NPRINT is an integer input variable that enables controlled printing of iterates if it is positive. In this case, FCN is called with IFLAG = 0 at the beginning of the first iteration and every NPRINT iterations thereafter and immediately prior to return, with X and FVEC available for printing. If NPRINT is not positive, no special calls of FCN with IFLAG = 0 are made. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Both actual and predicted relative reductions in th sum of squares are at most FTOL. 0 INFO = 2 Relative error between two consecutive iterates is at most XTOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 The cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. 0 INFO = 5 Number of calls to FCN with IFLAG = 1 has reached MAXFEV. 0 INFO = 6 FTOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 XTOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 8 GTOL is too small. FVEC is orthogonal to the columns of the Jacobian to machine precision. 1 0 Page 0 Sections 4 and 5 contain more details about INFO. 0 NFEV is an integer output variable set to the number of calls t FCN with IFLAG = 1. 0 NJEV is an integer output variable set to the number of calls t FCN with IFLAG = 2. 0 IPVT is an integer output array of length N. IPVT defines a permutation matrix P such that JAC*P = Q*R, where JAC is the final calculated Jacobian, Q is orthogonal (not stored), and is upper triangular. Column j of P is column IPVT(j) of the identity matrix. 0 QTF is an output array of length N which contains the first N elements of the vector (Q transpose)*FVEC. 0 WA1, WA2, and WA3 are work arrays of length N. 0 WA4 is a work array of length M. 0 4. Successful completion. 0 The accuracy of LMSTR is controlled by the convergence parame- ters FTOL, XTOL, and GTOL. These parameters are used in tests which make three types of comparisons between the approximation X and a solution XSOL. LMSTR terminates when any of the tests is satisfied. If any of the convergence parameters is less tha the machine precision (as defined by the MINPACK function SPMPAR(1)), then LMSTR only attempts to satisfy the test define by the machine precision. Further progress is not usually pos- sible. 0 The tests assume that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then LMSTR may incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning LMSTR with tighter toler- ances. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+FTOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with FTOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an INFO is set to 1 (or to 3 if the second test is also satis- fied). Unless high precision solutions are required, the recommended value for FTOL is the square root of the machine 1 0 Page 0 precision. 0 Second convergence test. If D is the diagonal matrix whose entries are defined by the array DIAG, then this test attempt to guarantee that 0 ENORM(D*(X-XSOL)) .LE. XTOL*ENORM(D*XSOL). 0 If this condition is satisfied with XTOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but if MODE = 1, then the accuracy of the components of X is usually related to their sensitivity. Unless high precision solutions are required, the recommended value for XTOL is the square root of the machine precision. 0 Third convergence test. This test is satisfied when the cosine of the angle between FVEC and any column of the Jacobian at X is at most GTOL in absolute value. There is no clear rela- tionship between this test and the accuracy of LMSTR, and furthermore, the test is equally well satisfied at other crit ical points, namely maximizers and saddle points. Therefore, termination caused by this test (INFO = 4) should be examined carefully. The recommended value for GTOL is zero. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMSTR can be due to improper input parameters, arithmetic interrupts, or an excessive number of function evaluations. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or LDFJAC .LT. N, or FTOL .LT. 0.E0, or XTOL .LT. 0.E0, or GTOL .LT. 0.E0, or MAXFEV .LE. 0, or FACTOR .LE. 0.E0. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMSTR. In this case, it may be possible to remedy the situation by rerunning LMSTR with a smaller value of FACTOR. 0 Excessive number of function evaluations. A reasonable value for MAXFEV is 100*(N+1). If the number of calls to FCN with IFLAG = 1 reaches MAXFEV, then this indicates that the routin is converging very slowly as measured by the progress of FVEC and INFO is set to 5. In this case, it may be helpful to restart LMSTR with MODE set to 1. 0 6. Characteristics of the algorithm. 1 0 Page 0 LMSTR is a modification of the Levenberg-Marquardt algorithm. Two of its main characteristics involve the proper use of implicitly scaled variables (if MODE = 1) and an optimal choice for the correction. The use of implicitly scaled variables achieves scale invariance of LMSTR and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (unde reasonable conditions) global convergence from starting points far from the solution and a fast rate of convergence for prob- lems with small residuals. 0 Timing. The time required by LMSTR to solve a given problem depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMSTR is about N**3 to process eac evaluation of the functions (call to FCN with IFLAG = 1) and 1.5*(N**2) to process each row of the Jacobian (call to FCN with IFLAG .GE. 2). Unless FCN can be evaluated quickly, the timing of LMSTR will be strongly influenced by the time spent in FCN. 0 Storage. LMSTR requires N**2 + 2*M + 6*N single precision sto- rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... SPMPAR,ENORM,LMPAR,QRFAC,QRSOLV,RWUPDT 0 FORTRAN-supplied ... ABS,AMAX1,AMIN1,SQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 1 0 Page 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMSTR EXAMPLE. C SINGLE PRECISION VERSION C C ********** INTEGER J,M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV,NWRITE INTEGER IPVT(3) REAL FTOL,XTOL,GTOL,FACTOR,FNORM REAL X(3),FVEC(15),FJAC(3,3),DIAG(3),QTF(3), * WA1(3),WA2(3),WA3(3),WA4(15) REAL ENORM,SPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.E0 X(2) = 1.E0 X(3) = 1.E0 C LDFJAC = 3 C C SET FTOL AND XTOL TO THE SQUARE ROOT OF THE MACHINE PRECISION C AND GTOL TO ZERO. UNLESS HIGH PRECISION SOLUTIONS ARE C REQUIRED, THESE ARE THE RECOMMENDED SETTINGS. C FTOL = SQRT(SPMPAR(1)) XTOL = SQRT(SPMPAR(1)) GTOL = 0.E0 C MAXFEV = 400 MODE = 1 FACTOR = 1.E2 NPRINT = 0 C CALL LMSTR(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,NFEV,NJEV,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,E15.7 // 1 0 Page 0 * 5X,31H NUMBER OF FUNCTION EVALUATIONS,I10 // * 5X,31H NUMBER OF JACOBIAN EVALUATIONS,I10 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3E15.7) C C LAST CARD OF DRIVER FOR LMSTR EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) INTEGER M,N,IFLAG REAL X(N),FVEC(M),FJROW(N) C C SUBROUTINE FCN FOR LMSTR EXAMPLE. C INTEGER I REAL TMP1,TMP2,TMP3,TMP4 REAL Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4E-1,1.8E-1,2.2E-1,2.5E-1,2.9E-1,3.2E-1,3.5E-1,3.9E-1, * 3.7E-1,5.8E-1,7.3E-1,9.6E-1,1.34E0,2.1E0,4.39E0/ C IF (IFLAG .NE. 0) GO TO 5 C C INSERT PRINT STATEMENTS HERE WHEN NPRINT IS POSITIVE. C RETURN 5 CONTINUE IF (IFLAG .GE. 2) GO TO 20 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE GO TO 40 20 CONTINUE I = IFLAG - 1 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJROW(1) = -1.E0 FJROW(2) = TMP1*TMP2/TMP4 FJROW(3) = TMP1*TMP3/TMP4 30 CONTINUE 40 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 1 0 Page 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596E-01 0 NUMBER OF FUNCTION EVALUATIONS 6 0 NUMBER OF JACOBIAN EVALUATIONS 5 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 0.8241058E-01 0.1133037E+01 0.2343695E+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMDIF1 0 Single precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMDIF1 is to minimize the sum of the squares of nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm. This is done by using the more general least-squares solver LMDIF. The user must provide a subroutine which calculates the functions. The Jacobian is the calculated by a forward-difference approximation. 0 2. Subroutine and type statements. 0 SUBROUTINE LMDIF1(FCN,M,N,X,FVEC,TOL,INFO,IWA,WA,LWA) INTEGER M,N,INFO,LWA INTEGER IWA(N) REAL TOL REAL X(N),FVEC(M),WA(LWA) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMDIF1 and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMDIF1. 0 FCN is the name of the user-supplied subroutine which calculate the functions. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows 0 SUBROUTINE FCN(M,N,X,FVEC,IFLAG) INTEGER M,N,IFLAG REAL X(N),FVEC(M) ---------- CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. ---------- RETURN END 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMDIF1. In this case se 1 0 Page 0 IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 TOL is a nonnegative input variable. Termination occurs when the algorithm estimates either that the relative error in the sum of squares is at most TOL or that the relative error between X and the solution is at most TOL. Section 4 contain more details about TOL. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Algorithm estimates that the relative error in the sum of squares is at most TOL. 0 INFO = 2 Algorithm estimates that the relative error between X and the solution is at most TOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 FVEC is orthogonal to the columns of the Jacobian t machine precision. 0 INFO = 5 Number of calls to FCN has reached or exceeded 200*(N+1). 0 INFO = 6 TOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 TOL is too small. No further improvement in the approximate solution X is possible. 0 Sections 4 and 5 contain more details about INFO. 0 IWA is an integer work array of length N. 0 WA is a work array of length LWA. 0 LWA is a positive integer input variable not less than 1 0 Page 0 M*N+5*N+M. 0 4. Successful completion. 0 The accuracy of LMDIF1 is controlled by the convergence parame- ter TOL. This parameter is used in tests which make three type of comparisons between the approximation X and a solution XSOL. LMDIF1 terminates when any of the tests is satisfied. If TOL i less than the machine precision (as defined by the MINPACK func tion SPMPAR(1)), then LMDIF1 only attempts to satisfy the test defined by the machine precision. Further progress is not usu- ally possible. Unless high precision solutions are required, the recommended value for TOL is the square root of the machine precision. 0 The tests assume that the functions are reasonably well behaved If this condition is not satisfied, then LMDIF1 may incorrectly indicate convergence. The validity of the answer can be checked, for example, by rerunning LMDIF1 with a tighter toler- ance. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+TOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with TOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an INFO is set to 1 (or to 3 if the second test is also satis- fied). 0 Second convergence test. If D is a diagonal matrix (implicitly generated by LMDIF1) whose entries contain scale factors for the variables, then this test attempts to guarantee that 0 ENORM(D*(X-XSOL)) .LE. TOL*ENORM(D*XSOL). 0 If this condition is satisfied with TOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but the choice of D is such that the accuracy of the components of X is usually related t their sensitivity. 0 Third convergence test. This test is satisfied when FVEC is orthogonal to the columns of the Jacobian to machine preci- sion. There is no clear relationship between this test and the accuracy of LMDIF1, and furthermore, the test is equally well satisfied at other critical points, namely maximizers an saddle points. Also, errors in the functions (see below) may result in the test being satisfied at a point not close to th 1 0 Page 0 minimum. Therefore, termination caused by this test (INFO = 4) should be examined carefully. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMDIF1 can be due to improper input parameters, arithmetic interrupts, an excessive number of func- tion evaluations, or errors in the functions. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or TOL .LT. 0.E0, or LWA .LT. M*N+5*N+M. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMDIF1. In this case, it may be possible to remedy the situation by not evalu ating the functions here, but instead setting the components of FVEC to numbers that exceed those in the initial FVEC, thereby indirectly reducing the step length. The step length can be more directly controlled by using instead LMDIF, which includes in its calling sequence the step-length-governing parameter FACTOR. 0 Excessive number of function evaluations. If the number of calls to FCN reaches 200*(N+1), then this indicates that the routine is converging very slowly as measured by the progress of FVEC, and INFO is set to 5. In this case, it may be help- ful to restart LMDIF1, thereby forcing it to disregard old (and possibly harmful) information. 0 Errors in the functions. The choice of step length in the for- ward-difference approximation to the Jacobian assumes that th relative errors in the functions are of the order of the machine precision. If this is not the case, LMDIF1 may fail (usually with INFO = 4). The user should then use LMDIF instead, or one of the programs which require the analytic Jacobian (LMDER1 and LMDER). 0 6. Characteristics of the algorithm. 0 LMDIF1 is a modification of the Levenberg-Marquardt algorithm. Two of its main characteristics involve the proper use of implicitly scaled variables and an optimal choice for the cor- rection. The use of implicitly scaled variables achieves scale invariance of LMDIF1 and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (under reasonable conditions) global convergence from starting points far from th solution and a fast rate of convergence for problems with small residuals. 0 Timing. The time required by LMDIF1 to solve a given problem 1 0 Page 0 depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMDIF1 is about N**3 to process each evaluation of the functions (one call to FCN) and M*(N**2) to process each approximation to the Jacobian (N calls to FCN). Unless FCN can be evaluated quickly, the tim- ing of LMDIF1 will be strongly influenced by the time spent i FCN. 0 Storage. LMDIF1 requires M*N + 2*M + 6*N single precision sto- rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... SPMPAR,ENORM,FDJAC2,LMDIF,LMPAR, QRFAC,QRSOLV 0 FORTRAN-supplied ... ABS,AMAX1,AMIN1,SQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMDIF1 EXAMPLE. C SINGLE PRECISION VERSION C 1 0 Page 0 C ********** INTEGER J,M,N,INFO,LWA,NWRITE INTEGER IWA(3) REAL TOL,FNORM REAL X(3),FVEC(15),WA(75) REAL ENORM,SPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.E0 X(2) = 1.E0 X(3) = 1.E0 C LWA = 75 C C SET TOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C TOL = SQRT(SPMPAR(1)) C CALL LMDIF1(FCN,M,N,X,FVEC,TOL,INFO,IWA,WA,LWA) FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,E15.7 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3E15.7) C C LAST CARD OF DRIVER FOR LMDIF1 EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,IFLAG) INTEGER M,N,IFLAG REAL X(N),FVEC(M) C C SUBROUTINE FCN FOR LMDIF1 EXAMPLE. C INTEGER I REAL TMP1,TMP2,TMP3 REAL Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4E-1,1.8E-1,2.2E-1,2.5E-1,2.9E-1,3.2E-1,3.5E-1,3.9E-1, * 3.7E-1,5.8E-1,7.3E-1,9.6E-1,1.34E0,2.1E0,4.39E0/ C 1 0 Page 0 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596E-01 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 0.8241057E-01 0.1133037E+01 0.2343695E+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMDIF 0 Single precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMDIF is to minimize the sum of the squares of M nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm. The user must provide a subrou- tine which calculates the functions. The Jacobian is then cal- culated by a forward-difference approximation. 0 2. Subroutine and type statements. 0 SUBROUTINE LMDIF(FCN,M,N,X,FVEC,FTOL,XTOL,GTOL,MAXFEV,EPSFCN, * DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,MAXFEV,MODE,NPRINT,INFO,NFEV,LDFJAC INTEGER IPVT(N) REAL FTOL,XTOL,GTOL,EPSFCN,FACTOR REAL X(N),FVEC(M),DIAG(N),FJAC(LDFJAC,N),QTF(N), * WA1(N),WA2(N),WA3(N),WA4(M) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMDIF and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMDIF. 0 FCN is the name of the user-supplied subroutine which calculate the functions. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows 0 SUBROUTINE FCN(M,N,X,FVEC,IFLAG) INTEGER M,N,IFLAG REAL X(N),FVEC(M) ---------- CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. ---------- RETURN END 1 0 Page 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMDIF. In this case set IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 FTOL is a nonnegative input variable. Termination occurs when both the actual and predicted relative reductions in the sum of squares are at most FTOL. Therefore, FTOL measures the relative error desired in the sum of squares. Section 4 con- tains more details about FTOL. 0 XTOL is a nonnegative input variable. Termination occurs when the relative error between two consecutive iterates is at mos XTOL. Therefore, XTOL measures the relative error desired in the approximate solution. Section 4 contains more details about XTOL. 0 GTOL is a nonnegative input variable. Termination occurs when the cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. Therefore, GTOL measures the orthogonality desired between the function vecto and the columns of the Jacobian. Section 4 contains more details about GTOL. 0 MAXFEV is a positive integer input variable. Termination occur when the number of calls to FCN is at least MAXFEV by the end of an iteration. 0 EPSFCN is an input variable used in determining a suitable step for the forward-difference approximation. This approximation assumes that the relative errors in the functions are of the order of EPSFCN. If EPSFCN is less than the machine preci- sion, it is assumed that the relative errors in the functions are of the order of the machine precision. 0 DIAG is an array of length N. If MODE = 1 (see below), DIAG is internally set. If MODE = 2, DIAG must contain positive entries that serve as multiplicative scale factors for the variables. 0 MODE is an integer input variable. If MODE = 1, the variables will be scaled internally. If MODE = 2, the scaling is 1 0 Page 0 specified by the input DIAG. Other values of MODE are equiva lent to MODE = 1. 0 FACTOR is a positive input variable used in determining the ini tial step bound. This bound is set to the product of FACTOR and the Euclidean norm of DIAG*X if nonzero, or else to FACTO itself. In most cases FACTOR should lie in the interval (.1,100.). 100. is a generally recommended value. 0 NPRINT is an integer input variable that enables controlled printing of iterates if it is positive. In this case, FCN is called with IFLAG = 0 at the beginning of the first iteration and every NPRINT iterations thereafter and immediately prior to return, with X and FVEC available for printing. If NPRINT is not positive, no special calls of FCN with IFLAG = 0 are made. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Both actual and predicted relative reductions in th sum of squares are at most FTOL. 0 INFO = 2 Relative error between two consecutive iterates is at most XTOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 The cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. 0 INFO = 5 Number of calls to FCN has reached or exceeded MAXFEV. 0 INFO = 6 FTOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 XTOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 8 GTOL is too small. FVEC is orthogonal to the columns of the Jacobian to machine precision. 0 Sections 4 and 5 contain more details about INFO. 0 NFEV is an integer output variable set to the number of calls t FCN. 0 FJAC is an output M by N array. The upper N by N submatrix of FJAC contains an upper triangular matrix R with diagonal ele- ments of nonincreasing magnitude such that 1 0 Page 0 T T T P *(JAC *JAC)*P = R *R, 0 where P is a permutation matrix and JAC is the final calcu- lated Jacobian. Column j of P is column IPVT(j) (see below) of the identity matrix. The lower trapezoidal part of FJAC contains information generated during the computation of R. 0 LDFJAC is a positive integer input variable not less than M which specifies the leading dimension of the array FJAC. 0 IPVT is an integer output array of length N. IPVT defines a permutation matrix P such that JAC*P = Q*R, where JAC is the final calculated Jacobian, Q is orthogonal (not stored), and is upper triangular with diagonal elements of nonincreasing magnitude. Column j of P is column IPVT(j) of the identity matrix. 0 QTF is an output array of length N which contains the first N elements of the vector (Q transpose)*FVEC. 0 WA1, WA2, and WA3 are work arrays of length N. 0 WA4 is a work array of length M. 0 4. Successful completion. 0 The accuracy of LMDIF is controlled by the convergence parame- ters FTOL, XTOL, and GTOL. These parameters are used in tests which make three types of comparisons between the approximation X and a solution XSOL. LMDIF terminates when any of the tests is satisfied. If any of the convergence parameters is less tha the machine precision (as defined by the MINPACK function SPMPAR(1)), then LMDIF only attempts to satisfy the test define by the machine precision. Further progress is not usually pos- sible. 0 The tests assume that the functions are reasonably well behaved If this condition is not satisfied, then LMDIF may incorrectly indicate convergence. The validity of the answer can be checked, for example, by rerunning LMDIF with tighter toler- ances. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+FTOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with FTOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an INFO is set to 1 (or to 3 if the second test is also satis- fied). Unless high precision solutions are required, the 1 0 Page 0 recommended value for FTOL is the square root of the machine precision. 0 Second convergence test. If D is the diagonal matrix whose entries are defined by the array DIAG, then this test attempt to guarantee that 0 ENORM(D*(X-XSOL)) .LE. XTOL*ENORM(D*XSOL). 0 If this condition is satisfied with XTOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but if MODE = 1, then the accuracy of the components of X is usually related to their sensitivity. Unless high precision solutions are required, the recommended value for XTOL is the square root of the machine precision. 0 Third convergence test. This test is satisfied when the cosine of the angle between FVEC and any column of the Jacobian at X is at most GTOL in absolute value. There is no clear rela- tionship between this test and the accuracy of LMDIF, and furthermore, the test is equally well satisfied at other crit ical points, namely maximizers and saddle points. Therefore, termination caused by this test (INFO = 4) should be examined carefully. The recommended value for GTOL is zero. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMDIF can be due to improper input parameters, arithmetic interrupts, or an excessive number of function evaluations. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or LDFJAC .LT. M, or FTOL .LT. 0.E0, or XTOL .LT. 0.E0, or GTOL .LT. 0.E0, or MAXFEV .LE. 0, or FACTOR .LE. 0.E0. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMDIF. In this case, it may be possible to remedy the situation by rerunning LMDIF with a smaller value of FACTOR. 0 Excessive number of function evaluations. A reasonable value for MAXFEV is 200*(N+1). If the number of calls to FCN reaches MAXFEV, then this indicates that the routine is con- verging very slowly as measured by the progress of FVEC, and INFO is set to 5. In this case, it may be helpful to restart LMDIF with MODE set to 1. 0 1 0 Page 0 6. Characteristics of the algorithm. 0 LMDIF is a modification of the Levenberg-Marquardt algorithm. Two of its main characteristics involve the proper use of implicitly scaled variables (if MODE = 1) and an optimal choice for the correction. The use of implicitly scaled variables achieves scale invariance of LMDIF and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (unde reasonable conditions) global convergence from starting points far from the solution and a fast rate of convergence for prob- lems with small residuals. 0 Timing. The time required by LMDIF to solve a given problem depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMDIF is about N**3 to process eac evaluation of the functions (one call to FCN) and M*(N**2) to process each approximation to the Jacobian (N calls to FCN). Unless FCN can be evaluated quickly, the timing of LMDIF will be strongly influenced by the time spent in FCN. 0 Storage. LMDIF requires M*N + 2*M + 6*N single precision sto- rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... SPMPAR,ENORM,FDJAC2,LMPAR,QRFAC,QRSOLV 0 FORTRAN-supplied ... ABS,AMAX1,AMIN1,SQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 1 0 Page 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMDIF EXAMPLE. C SINGLE PRECISION VERSION C C ********** INTEGER J,M,N,MAXFEV,MODE,NPRINT,INFO,NFEV,LDFJAC,NWRITE INTEGER IPVT(3) REAL FTOL,XTOL,GTOL,EPSFCN,FACTOR,FNORM REAL X(3),FVEC(15),DIAG(3),FJAC(15,3),QTF(3), * WA1(3),WA2(3),WA3(3),WA4(15) REAL ENORM,SPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.E0 X(2) = 1.E0 X(3) = 1.E0 C LDFJAC = 15 C C SET FTOL AND XTOL TO THE SQUARE ROOT OF THE MACHINE PRECISION C AND GTOL TO ZERO. UNLESS HIGH PRECISION SOLUTIONS ARE C REQUIRED, THESE ARE THE RECOMMENDED SETTINGS. C FTOL = SQRT(SPMPAR(1)) XTOL = SQRT(SPMPAR(1)) GTOL = 0.E0 C MAXFEV = 800 EPSFCN = 0.E0 MODE = 1 FACTOR = 1.E2 NPRINT = 0 C CALL LMDIF(FCN,M,N,X,FVEC,FTOL,XTOL,GTOL,MAXFEV,EPSFCN, * DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC, * IPVT,QTF,WA1,WA2,WA3,WA4) 1 0 Page 0 FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,NFEV,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,E15.7 // * 5X,31H NUMBER OF FUNCTION EVALUATIONS,I10 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3E15.7) C C LAST CARD OF DRIVER FOR LMDIF EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,IFLAG) INTEGER M,N,IFLAG REAL X(N),FVEC(M) C C SUBROUTINE FCN FOR LMDIF EXAMPLE. C INTEGER I REAL TMP1,TMP2,TMP3 REAL Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4E-1,1.8E-1,2.2E-1,2.5E-1,2.9E-1,3.2E-1,3.5E-1,3.9E-1, * 3.7E-1,5.8E-1,7.3E-1,9.6E-1,1.34E0,2.1E0,4.39E0/ C IF (IFLAG .NE. 0) GO TO 5 C C INSERT PRINT STATEMENTS HERE WHEN NPRINT IS POSITIVE. C RETURN 5 CONTINUE DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596E-01 0 NUMBER OF FUNCTION EVALUATIONS 21 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 1 0 Page 0 0.8241057E-01 0.1133037E+01 0.2343695E+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine CHKDER 0 Single precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of CHKDER is to check the gradients of M nonlinear functions in N variables, evaluated at a point X, for consis- tency with the functions themselves. The user must call CHKDER twice, first with MODE = 1 and then with MODE = 2. 0 2. Subroutine and type statements. 0 SUBROUTINE CHKDER(M,N,X,FVEC,FJAC,LDFJAC,XP,FVECP,MODE,ERR) INTEGER M,N,LDFJAC,MODE REAL X(N),FVEC(M),FJAC(LDFJAC,N),XP(N),FVECP(M),ERR(M) 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to CHKDER and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from CHKDER. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. 0 X is an input array of length N. 0 FVEC is an array of length M. On input when MODE = 2, FVEC mus contain the functions evaluated at X. 0 FJAC is an M by N array. On input when MODE = 2, the rows of FJAC must contain the gradients of the respective functions evaluated at X. 0 LDFJAC is a positive integer input variable not less than M which specifies the leading dimension of the array FJAC. 0 XP is an array of length N. On output when MODE = 1, XP is set to a neighboring point of X. 1 0 Page 0 FVECP is an array of length M. On input when MODE = 2, FVECP must contain the functions evaluated at XP. 0 MODE is an integer input variable set to 1 on the first call an 2 on the second. Other values of MODE are equivalent to MODE = 1. 0 ERR is an array of length M. On output when MODE = 2, ERR con- tains measures of correctness of the respective gradients. I there is no severe loss of significance, then if ERR(I) is 1. the I-th gradient is correct, while if ERR(I) is 0.0 the I-th gradient is incorrect. For values of ERR between 0.0 and 1.0 the categorization is less certain. In general, a value of ERR(I) greater than 0.5 indicates that the I-th gradient is probably correct, while a value of ERR(I) less than 0.5 indi- cates that the I-th gradient is probably incorrect. 0 4. Successful completion. 0 CHKDER usually guarantees that if ERR(I) is 1.0, then the I-th gradient at X is consistent with the I-th function. This sug- gests that the input X be such that consistency of the gradient at X implies consistency of the gradient at all points of inter est. If all the components of X are distinct and the fractiona part of each one has two nonzero digits, then X is likely to be a satisfactory choice. 0 If ERR(I) is not 1.0 but is greater than 0.5, then the I-th gra dient is probably consistent with the I-th function (the more s the larger ERR(I) is), but the conditions for ERR(I) to be 1.0 have not been completely satisfied. In this case, it is recom- mended that CHKDER be rerun with other input values of X. If ERR(I) is always greater than 0.5, then the I-th gradient is consistent with the I-th function. 0 5. Unsuccessful completion. 0 CHKDER does not perform reliably if cancellation or rounding errors cause a severe loss of significance in the evaluation of a function. Therefore, none of the components of X should be unusually small (in particular, zero) or any other value which may cause loss of significance. The relative differences between corresponding elements of FVECP and FVEC should be at least two orders of magnitude greater than the machine precisio (as defined by the MINPACK function SPMPAR(1)). If there is a severe loss of significance in the evaluation of the I-th func- tion, then ERR(I) may be 0.0 and yet the I-th gradient could be correct. 0 If ERR(I) is not 0.0 but is less than 0.5, then the I-th gra- dient is probably not consistent with the I-th function (the more so the smaller ERR(I) is), but the conditions for ERR(I) t 1 0 Page 0 be 0.0 have not been completely satisfied. In this case, it is recommended that CHKDER be rerun with other input values of X. If ERR(I) is always less than 0.5 and if there is no severe los of significance, then the I-th gradient is not consistent with the I-th function. 0 6. Characteristics of the algorithm. 0 CHKDER checks the I-th gradient for consistency with the I-th function by computing a forward-difference approximation along suitably chosen direction and comparing this approximation with the user-supplied gradient along the same direction. The prin- cipal characteristic of CHKDER is its invariance to changes in scale of the variables or functions. 0 Timing. The time required by CHKDER depends only on M and N. The number of arithmetic operations needed by CHKDER is about N when MODE = 1 and M*N when MODE = 2. 0 Storage. CHKDER requires M*N + 3*M + 2*N single precision stor age locations, in addition to the storage required by the pro gram. There are no internally declared storage arrays. 0 7. Subprograms required. 0 MINPACK-supplied ... SPMPAR 0 FORTRAN-supplied ... ABS,ALOG10,SQRT 0 8. References. 0 None. 0 9. Example. 0 This example checks the Jacobian matrix for the problem that determines the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 1 0 Page 0 C ********** C C DRIVER FOR CHKDER EXAMPLE. C SINGLE PRECISION VERSION C C ********** INTEGER I,M,N,LDFJAC,MODE,NWRITE REAL X(3),FVEC(15),FJAC(15,3),XP(3),FVECP(15),ERR(15) C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING VALUES SHOULD BE SUITABLE FOR C CHECKING THE JACOBIAN MATRIX. C X(1) = 9.2E-1 X(2) = 1.3E-1 X(3) = 5.4E-1 C LDFJAC = 15 C MODE = 1 CALL CHKDER(M,N,X,FVEC,FJAC,LDFJAC,XP,FVECP,MODE,ERR) MODE = 2 CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,1) CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,2) CALL FCN(M,N,XP,FVECP,FJAC,LDFJAC,1) CALL CHKDER(M,N,X,FVEC,FJAC,LDFJAC,XP,FVECP,MODE,ERR) C DO 10 I = 1, M FVECP(I) = FVECP(I) - FVEC(I) 10 CONTINUE WRITE (NWRITE,1000) (FVEC(I),I=1,M) WRITE (NWRITE,2000) (FVECP(I),I=1,M) WRITE (NWRITE,3000) (ERR(I),I=1,M) STOP 1000 FORMAT (/5X,5H FVEC // (5X,3E15.7)) 2000 FORMAT (/5X,13H FVECP - FVEC // (5X,3E15.7)) 3000 FORMAT (/5X,4H ERR // (5X,3E15.7)) C C LAST CARD OF DRIVER FOR CHKDER EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER M,N,LDFJAC,IFLAG REAL X(N),FVEC(M),FJAC(LDFJAC,N) C C SUBROUTINE FCN FOR CHKDER EXAMPLE. C INTEGER I 1 0 Page 0 REAL TMP1,TMP2,TMP3,TMP4 REAL Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4E-1,1.8E-1,2.2E-1,2.5E-1,2.9E-1,3.2E-1,3.5E-1,3.9E-1, * 3.7E-1,5.8E-1,7.3E-1,9.6E-1,1.34E0,2.1E0,4.39E0/ C IF (IFLAG .EQ. 2) GO TO 20 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE GO TO 40 20 CONTINUE DO 30 I = 1, 15 TMP1 = I TMP2 = 16 - I C C ERROR INTRODUCED INTO NEXT STATEMENT FOR ILLUSTRATION. C CORRECTED STATEMENT SHOULD READ TMP3 = TMP1 . C TMP3 = TMP2 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJAC(I,1) = -1.E0 FJAC(I,2) = TMP1*TMP2/TMP4 FJAC(I,3) = TMP1*TMP3/TMP4 30 CONTINUE 40 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be different. In particular, the differences FVECP - FVEC are machine dependent. 0 FVEC 0 -0.1181606E+01 -0.1429655E+01 -0.1606344E+01 -0.1745269E+01 -0.1840654E+01 -0.1921586E+01 -0.1984141E+01 -0.2022537E+01 -0.2468977E+01 -0.2827562E+01 -0.3473582E+01 -0.4437612E+01 -0.6047662E+01 -0.9267761E+01 -0.1891806E+02 0 FVECP - FVEC 0 -0.7724666E-08 -0.3432405E-08 -0.2034843E-09 0.2313685E-08 0.4331078E-08 0.5984096E-08 1 0 Page 0 0.7363281E-08 0.8531470E-08 0.1488591E-07 0.2335850E-07 0.3522012E-07 0.5301255E-07 0.8266660E-07 0.1419747E-06 0.3198990E-06 0 ERR 0 0.1141397E+00 0.9943516E-01 0.9674474E-01 0.9980447E-01 0.1073116E+00 0.1220445E+00 0.1526814E+00 0.1000000E+01 0.1000000E+01 0.1000000E+01 0.1000000E+01 0.1000000E+01 0.1000000E+01 0.1000000E+01 0.1000000E+01 PyBDSF-1.10.1/src/minpack/ex/file04000066400000000000000000000145331420247104600164620ustar00rootroot00000000000000 DOUBLE PRECISION FUNCTION DPMPAR(I) INTEGER I C ********** C C FUNCTION DPMPAR C C THIS FUNCTION PROVIDES DOUBLE PRECISION MACHINE PARAMETERS C WHEN THE APPROPRIATE SET OF DATA STATEMENTS IS ACTIVATED (BY C REMOVING THE C FROM COLUMN 1) AND ALL OTHER DATA STATEMENTS ARE C RENDERED INACTIVE. MOST OF THE PARAMETER VALUES WERE OBTAINED C FROM THE CORRESPONDING BELL LABORATORIES PORT LIBRARY FUNCTION. C C THE FUNCTION STATEMENT IS C C DOUBLE PRECISION FUNCTION DPMPAR(I) C C WHERE C C I IS AN INTEGER INPUT VARIABLE SET TO 1, 2, OR 3 WHICH C SELECTS THE DESIRED MACHINE PARAMETER. IF THE MACHINE HAS C T BASE B DIGITS AND ITS SMALLEST AND LARGEST EXPONENTS ARE C EMIN AND EMAX, RESPECTIVELY, THEN THESE PARAMETERS ARE C C DPMPAR(1) = B**(1 - T), THE MACHINE PRECISION, C C DPMPAR(2) = B**(EMIN - 1), THE SMALLEST MAGNITUDE, C C DPMPAR(3) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER MCHEPS(4) INTEGER MINMAG(4) INTEGER MAXMAG(4) DOUBLE PRECISION DMACH(3) EQUIVALENCE (DMACH(1),MCHEPS(1)) EQUIVALENCE (DMACH(2),MINMAG(1)) EQUIVALENCE (DMACH(3),MAXMAG(1)) C C MACHINE CONSTANTS FOR THE IBM 360/370 SERIES, C THE AMDAHL 470/V6, THE ICL 2900, THE ITEL AS/6, C THE XEROX SIGMA 5/7/9 AND THE SEL SYSTEMS 85/86. C DATA MCHEPS(1),MCHEPS(2) / Z34100000, Z00000000 / DATA MINMAG(1),MINMAG(2) / Z00100000, Z00000000 / DATA MAXMAG(1),MAXMAG(2) / Z7FFFFFFF, ZFFFFFFFF / C C MACHINE CONSTANTS FOR THE HONEYWELL 600/6000 SERIES. C C DATA MCHEPS(1),MCHEPS(2) / O606400000000, O000000000000 / C DATA MINMAG(1),MINMAG(2) / O402400000000, O000000000000 / C DATA MAXMAG(1),MAXMAG(2) / O376777777777, O777777777777 / C C MACHINE CONSTANTS FOR THE CDC 6000/7000 SERIES. C C DATA MCHEPS(1) / 15614000000000000000B / C DATA MCHEPS(2) / 15010000000000000000B / C C DATA MINMAG(1) / 00604000000000000000B / C DATA MINMAG(2) / 00000000000000000000B / C C DATA MAXMAG(1) / 37767777777777777777B / C DATA MAXMAG(2) / 37167777777777777777B / C C MACHINE CONSTANTS FOR THE PDP-10 (KA PROCESSOR). C C DATA MCHEPS(1),MCHEPS(2) / "114400000000, "000000000000 / C DATA MINMAG(1),MINMAG(2) / "033400000000, "000000000000 / C DATA MAXMAG(1),MAXMAG(2) / "377777777777, "344777777777 / C C MACHINE CONSTANTS FOR THE PDP-10 (KI PROCESSOR). C C DATA MCHEPS(1),MCHEPS(2) / "104400000000, "000000000000 / C DATA MINMAG(1),MINMAG(2) / "000400000000, "000000000000 / C DATA MAXMAG(1),MAXMAG(2) / "377777777777, "377777777777 / C C MACHINE CONSTANTS FOR THE PDP-11 FORTRAN SUPPORTING C 32-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). C C DATA MCHEPS(1),MCHEPS(2) / 620756992, 0 / C DATA MINMAG(1),MINMAG(2) / 8388608, 0 / C DATA MAXMAG(1),MAXMAG(2) / 2147483647, -1 / C C DATA MCHEPS(1),MCHEPS(2) / O04500000000, O00000000000 / C DATA MINMAG(1),MINMAG(2) / O00040000000, O00000000000 / C DATA MAXMAG(1),MAXMAG(2) / O17777777777, O37777777777 / C C MACHINE CONSTANTS FOR THE PDP-11 FORTRAN SUPPORTING C 16-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). C C DATA MCHEPS(1),MCHEPS(2) / 9472, 0 / C DATA MCHEPS(3),MCHEPS(4) / 0, 0 / C C DATA MINMAG(1),MINMAG(2) / 128, 0 / C DATA MINMAG(3),MINMAG(4) / 0, 0 / C C DATA MAXMAG(1),MAXMAG(2) / 32767, -1 / C DATA MAXMAG(3),MAXMAG(4) / -1, -1 / C C DATA MCHEPS(1),MCHEPS(2) / O022400, O000000 / C DATA MCHEPS(3),MCHEPS(4) / O000000, O000000 / C C DATA MINMAG(1),MINMAG(2) / O000200, O000000 / C DATA MINMAG(3),MINMAG(4) / O000000, O000000 / C C DATA MAXMAG(1),MAXMAG(2) / O077777, O177777 / C DATA MAXMAG(3),MAXMAG(4) / O177777, O177777 / C C MACHINE CONSTANTS FOR THE BURROUGHS 6700/7700 SYSTEMS. C C DATA MCHEPS(1) / O1451000000000000 / C DATA MCHEPS(2) / O0000000000000000 / C C DATA MINMAG(1) / O1771000000000000 / C DATA MINMAG(2) / O7770000000000000 / C C DATA MAXMAG(1) / O0777777777777777 / C DATA MAXMAG(2) / O7777777777777777 / C C MACHINE CONSTANTS FOR THE BURROUGHS 5700 SYSTEM. C C DATA MCHEPS(1) / O1451000000000000 / C DATA MCHEPS(2) / O0000000000000000 / C C DATA MINMAG(1) / O1771000000000000 / C DATA MINMAG(2) / O0000000000000000 / C C DATA MAXMAG(1) / O0777777777777777 / C DATA MAXMAG(2) / O0007777777777777 / C C MACHINE CONSTANTS FOR THE BURROUGHS 1700 SYSTEM. C C DATA MCHEPS(1) / ZCC6800000 / C DATA MCHEPS(2) / Z000000000 / C C DATA MINMAG(1) / ZC00800000 / C DATA MINMAG(2) / Z000000000 / C C DATA MAXMAG(1) / ZDFFFFFFFF / C DATA MAXMAG(2) / ZFFFFFFFFF / C C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. C C DATA MCHEPS(1),MCHEPS(2) / O170640000000, O000000000000 / C DATA MINMAG(1),MINMAG(2) / O000040000000, O000000000000 / C DATA MAXMAG(1),MAXMAG(2) / O377777777777, O777777777777 / C C MACHINE CONSTANTS FOR THE DATA GENERAL ECLIPSE S/200. C C NOTE - IT MAY BE APPROPRIATE TO INCLUDE THE FOLLOWING CARD - C STATIC DMACH(3) C C DATA MINMAG/20K,3*0/,MAXMAG/77777K,3*177777K/ C DATA MCHEPS/32020K,3*0/ C C MACHINE CONSTANTS FOR THE HARRIS 220. C C DATA MCHEPS(1),MCHEPS(2) / '20000000, '00000334 / C DATA MINMAG(1),MINMAG(2) / '20000000, '00000201 / C DATA MAXMAG(1),MAXMAG(2) / '37777777, '37777577 / C C MACHINE CONSTANTS FOR THE CRAY-1. C C DATA MCHEPS(1) / 0376424000000000000000B / C DATA MCHEPS(2) / 0000000000000000000000B / C C DATA MINMAG(1) / 0200034000000000000000B / C DATA MINMAG(2) / 0000000000000000000000B / C C DATA MAXMAG(1) / 0577777777777777777777B / C DATA MAXMAG(2) / 0000007777777777777776B / C C MACHINE CONSTANTS FOR THE PRIME 400. C C DATA MCHEPS(1),MCHEPS(2) / :10000000000, :00000000123 / C DATA MINMAG(1),MINMAG(2) / :10000000000, :00000100000 / C DATA MAXMAG(1),MAXMAG(2) / :17777777777, :37777677776 / C C MACHINE CONSTANTS FOR THE VAX-11. C C DATA MCHEPS(1),MCHEPS(2) / 9472, 0 / C DATA MINMAG(1),MINMAG(2) / 128, 0 / C DATA MAXMAG(1),MAXMAG(2) / -32769, -1 / C DPMPAR = DMACH(I) RETURN C C LAST CARD OF FUNCTION DPMPAR. C END PyBDSF-1.10.1/src/minpack/ex/file05000066400000000000000000004607671420247104600165010ustar00rootroot00000000000000 SUBROUTINE CHKDER(M,N,X,FVEC,FJAC,LDFJAC,XP,FVECP,MODE,ERR) INTEGER M,N,LDFJAC,MODE DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N),XP(N),FVECP(M), * ERR(M) C ********** C C SUBROUTINE CHKDER C C THIS SUBROUTINE CHECKS THE GRADIENTS OF M NONLINEAR FUNCTIONS C IN N VARIABLES, EVALUATED AT A POINT X, FOR CONSISTENCY WITH C THE FUNCTIONS THEMSELVES. THE USER MUST CALL CHKDER TWICE, C FIRST WITH MODE = 1 AND THEN WITH MODE = 2. C C MODE = 1. ON INPUT, X MUST CONTAIN THE POINT OF EVALUATION. C ON OUTPUT, XP IS SET TO A NEIGHBORING POINT. C C MODE = 2. ON INPUT, FVEC MUST CONTAIN THE FUNCTIONS AND THE C ROWS OF FJAC MUST CONTAIN THE GRADIENTS C OF THE RESPECTIVE FUNCTIONS EACH EVALUATED C AT X, AND FVECP MUST CONTAIN THE FUNCTIONS C EVALUATED AT XP. C ON OUTPUT, ERR CONTAINS MEASURES OF CORRECTNESS OF C THE RESPECTIVE GRADIENTS. C C THE SUBROUTINE DOES NOT PERFORM RELIABLY IF CANCELLATION OR C ROUNDING ERRORS CAUSE A SEVERE LOSS OF SIGNIFICANCE IN THE C EVALUATION OF A FUNCTION. THEREFORE, NONE OF THE COMPONENTS C OF X SHOULD BE UNUSUALLY SMALL (IN PARTICULAR, ZERO) OR ANY C OTHER VALUE WHICH MAY CAUSE LOSS OF SIGNIFICANCE. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE CHKDER(M,N,X,FVEC,FJAC,LDFJAC,XP,FVECP,MODE,ERR) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN ARRAY OF LENGTH M. ON INPUT WHEN MODE = 2, C FVEC MUST CONTAIN THE FUNCTIONS EVALUATED AT X. C C FJAC IS AN M BY N ARRAY. ON INPUT WHEN MODE = 2, C THE ROWS OF FJAC MUST CONTAIN THE GRADIENTS OF C THE RESPECTIVE FUNCTIONS EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER INPUT PARAMETER NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C XP IS AN ARRAY OF LENGTH N. ON OUTPUT WHEN MODE = 1, C XP IS SET TO A NEIGHBORING POINT OF X. C C FVECP IS AN ARRAY OF LENGTH M. ON INPUT WHEN MODE = 2, C FVECP MUST CONTAIN THE FUNCTIONS EVALUATED AT XP. C C MODE IS AN INTEGER INPUT VARIABLE SET TO 1 ON THE FIRST CALL C AND 2 ON THE SECOND. OTHER VALUES OF MODE ARE EQUIVALENT C TO MODE = 1. C C ERR IS AN ARRAY OF LENGTH M. ON OUTPUT WHEN MODE = 2, C ERR CONTAINS MEASURES OF CORRECTNESS OF THE RESPECTIVE C GRADIENTS. IF THERE IS NO SEVERE LOSS OF SIGNIFICANCE, C THEN IF ERR(I) IS 1.0 THE I-TH GRADIENT IS CORRECT, C WHILE IF ERR(I) IS 0.0 THE I-TH GRADIENT IS INCORRECT. C FOR VALUES OF ERR BETWEEN 0.0 AND 1.0, THE CATEGORIZATION C IS LESS CERTAIN. IN GENERAL, A VALUE OF ERR(I) GREATER C THAN 0.5 INDICATES THAT THE I-TH GRADIENT IS PROBABLY C CORRECT, WHILE A VALUE OF ERR(I) LESS THAN 0.5 INDICATES C THAT THE I-TH GRADIENT IS PROBABLY INCORRECT. C C SUBPROGRAMS CALLED C C MINPACK SUPPLIED ... DPMPAR C C FORTRAN SUPPLIED ... DABS,DLOG10,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J DOUBLE PRECISION EPS,EPSF,EPSLOG,EPSMCH,FACTOR,ONE,TEMP,ZERO DOUBLE PRECISION DPMPAR DATA FACTOR,ONE,ZERO /1.0D2,1.0D0,0.0D0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = DPMPAR(1) C EPS = DSQRT(EPSMCH) C IF (MODE .EQ. 2) GO TO 20 C C MODE = 1. C DO 10 J = 1, N TEMP = EPS*DABS(X(J)) IF (TEMP .EQ. ZERO) TEMP = EPS XP(J) = X(J) + TEMP 10 CONTINUE GO TO 70 20 CONTINUE C C MODE = 2. C EPSF = FACTOR*EPSMCH EPSLOG = DLOG10(EPS) DO 30 I = 1, M ERR(I) = ZERO 30 CONTINUE DO 50 J = 1, N TEMP = DABS(X(J)) IF (TEMP .EQ. ZERO) TEMP = ONE DO 40 I = 1, M ERR(I) = ERR(I) + TEMP*FJAC(I,J) 40 CONTINUE 50 CONTINUE DO 60 I = 1, M TEMP = ONE IF (FVEC(I) .NE. ZERO .AND. FVECP(I) .NE. ZERO * .AND. DABS(FVECP(I)-FVEC(I)) .GE. EPSF*DABS(FVEC(I))) * TEMP = EPS*DABS((FVECP(I)-FVEC(I))/EPS-ERR(I)) * /(DABS(FVEC(I)) + DABS(FVECP(I))) ERR(I) = ONE IF (TEMP .GT. EPSMCH .AND. TEMP .LT. EPS) * ERR(I) = (DLOG10(TEMP) - EPSLOG)/EPSLOG IF (TEMP .GE. EPS) ERR(I) = ZERO 60 CONTINUE 70 CONTINUE C RETURN C C LAST CARD OF SUBROUTINE CHKDER. C END SUBROUTINE DOGLEG(N,R,LR,DIAG,QTB,DELTA,X,WA1,WA2) INTEGER N,LR DOUBLE PRECISION DELTA DOUBLE PRECISION R(LR),DIAG(N),QTB(N),X(N),WA1(N),WA2(N) C ********** C C SUBROUTINE DOGLEG C C GIVEN AN M BY N MATRIX A, AN N BY N NONSINGULAR DIAGONAL C MATRIX D, AN M-VECTOR B, AND A POSITIVE NUMBER DELTA, THE C PROBLEM IS TO DETERMINE THE CONVEX COMBINATION X OF THE C GAUSS-NEWTON AND SCALED GRADIENT DIRECTIONS THAT MINIMIZES C (A*X - B) IN THE LEAST SQUARES SENSE, SUBJECT TO THE C RESTRICTION THAT THE EUCLIDEAN NORM OF D*X BE AT MOST DELTA. C C THIS SUBROUTINE COMPLETES THE SOLUTION OF THE PROBLEM C IF IT IS PROVIDED WITH THE NECESSARY INFORMATION FROM THE C QR FACTORIZATION OF A. THAT IS, IF A = Q*R, WHERE Q HAS C ORTHOGONAL COLUMNS AND R IS AN UPPER TRIANGULAR MATRIX, C THEN DOGLEG EXPECTS THE FULL UPPER TRIANGLE OF R AND C THE FIRST N COMPONENTS OF (Q TRANSPOSE)*B. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE DOGLEG(N,R,LR,DIAG,QTB,DELTA,X,WA1,WA2) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE ORDER OF R. C C R IS AN INPUT ARRAY OF LENGTH LR WHICH MUST CONTAIN THE UPPER C TRIANGULAR MATRIX R STORED BY ROWS. C C LR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(N+1))/2. C C DIAG IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE C DIAGONAL ELEMENTS OF THE MATRIX D. C C QTB IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE FIRST C N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*B. C C DELTA IS A POSITIVE INPUT VARIABLE WHICH SPECIFIES AN UPPER C BOUND ON THE EUCLIDEAN NORM OF D*X. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE DESIRED C CONVEX COMBINATION OF THE GAUSS-NEWTON DIRECTION AND THE C SCALED GRADIENT DIRECTION. C C WA1 AND WA2 ARE WORK ARRAYS OF LENGTH N. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... DPMPAR,ENORM C C FORTRAN-SUPPLIED ... DABS,DMAX1,DMIN1,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,JJ,JP1,K,L DOUBLE PRECISION ALPHA,BNORM,EPSMCH,GNORM,ONE,QNORM,SGNORM,SUM, * TEMP,ZERO DOUBLE PRECISION DPMPAR,ENORM DATA ONE,ZERO /1.0D0,0.0D0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = DPMPAR(1) C C FIRST, CALCULATE THE GAUSS-NEWTON DIRECTION. C JJ = (N*(N + 1))/2 + 1 DO 50 K = 1, N J = N - K + 1 JP1 = J + 1 JJ = JJ - K L = JJ + 1 SUM = ZERO IF (N .LT. JP1) GO TO 20 DO 10 I = JP1, N SUM = SUM + R(L)*X(I) L = L + 1 10 CONTINUE 20 CONTINUE TEMP = R(JJ) IF (TEMP .NE. ZERO) GO TO 40 L = J DO 30 I = 1, J TEMP = DMAX1(TEMP,DABS(R(L))) L = L + N - I 30 CONTINUE TEMP = EPSMCH*TEMP IF (TEMP .EQ. ZERO) TEMP = EPSMCH 40 CONTINUE X(J) = (QTB(J) - SUM)/TEMP 50 CONTINUE C C TEST WHETHER THE GAUSS-NEWTON DIRECTION IS ACCEPTABLE. C DO 60 J = 1, N WA1(J) = ZERO WA2(J) = DIAG(J)*X(J) 60 CONTINUE QNORM = ENORM(N,WA2) IF (QNORM .LE. DELTA) GO TO 140 C C THE GAUSS-NEWTON DIRECTION IS NOT ACCEPTABLE. C NEXT, CALCULATE THE SCALED GRADIENT DIRECTION. C L = 1 DO 80 J = 1, N TEMP = QTB(J) DO 70 I = J, N WA1(I) = WA1(I) + R(L)*TEMP L = L + 1 70 CONTINUE WA1(J) = WA1(J)/DIAG(J) 80 CONTINUE C C CALCULATE THE NORM OF THE SCALED GRADIENT AND TEST FOR C THE SPECIAL CASE IN WHICH THE SCALED GRADIENT IS ZERO. C GNORM = ENORM(N,WA1) SGNORM = ZERO ALPHA = DELTA/QNORM IF (GNORM .EQ. ZERO) GO TO 120 C C CALCULATE THE POINT ALONG THE SCALED GRADIENT C AT WHICH THE QUADRATIC IS MINIMIZED. C DO 90 J = 1, N WA1(J) = (WA1(J)/GNORM)/DIAG(J) 90 CONTINUE L = 1 DO 110 J = 1, N SUM = ZERO DO 100 I = J, N SUM = SUM + R(L)*WA1(I) L = L + 1 100 CONTINUE WA2(J) = SUM 110 CONTINUE TEMP = ENORM(N,WA2) SGNORM = (GNORM/TEMP)/TEMP C C TEST WHETHER THE SCALED GRADIENT DIRECTION IS ACCEPTABLE. C ALPHA = ZERO IF (SGNORM .GE. DELTA) GO TO 120 C C THE SCALED GRADIENT DIRECTION IS NOT ACCEPTABLE. C FINALLY, CALCULATE THE POINT ALONG THE DOGLEG C AT WHICH THE QUADRATIC IS MINIMIZED. C BNORM = ENORM(N,QTB) TEMP = (BNORM/GNORM)*(BNORM/QNORM)*(SGNORM/DELTA) TEMP = TEMP - (DELTA/QNORM)*(SGNORM/DELTA)**2 * + DSQRT((TEMP-(DELTA/QNORM))**2 * +(ONE-(DELTA/QNORM)**2)*(ONE-(SGNORM/DELTA)**2)) ALPHA = ((DELTA/QNORM)*(ONE - (SGNORM/DELTA)**2))/TEMP 120 CONTINUE C C FORM APPROPRIATE CONVEX COMBINATION OF THE GAUSS-NEWTON C DIRECTION AND THE SCALED GRADIENT DIRECTION. C TEMP = (ONE - ALPHA)*DMIN1(SGNORM,DELTA) DO 130 J = 1, N X(J) = TEMP*WA1(J) + ALPHA*X(J) 130 CONTINUE 140 CONTINUE RETURN C C LAST CARD OF SUBROUTINE DOGLEG. C END DOUBLE PRECISION FUNCTION ENORM(N,X) INTEGER N DOUBLE PRECISION X(N) C ********** C C FUNCTION ENORM C C GIVEN AN N-VECTOR X, THIS FUNCTION CALCULATES THE C EUCLIDEAN NORM OF X. C C THE EUCLIDEAN NORM IS COMPUTED BY ACCUMULATING THE SUM OF C SQUARES IN THREE DIFFERENT SUMS. THE SUMS OF SQUARES FOR THE C SMALL AND LARGE COMPONENTS ARE SCALED SO THAT NO OVERFLOWS C OCCUR. NON-DESTRUCTIVE UNDERFLOWS ARE PERMITTED. UNDERFLOWS C AND OVERFLOWS DO NOT OCCUR IN THE COMPUTATION OF THE UNSCALED C SUM OF SQUARES FOR THE INTERMEDIATE COMPONENTS. C THE DEFINITIONS OF SMALL, INTERMEDIATE AND LARGE COMPONENTS C DEPEND ON TWO CONSTANTS, RDWARF AND RGIANT. THE MAIN C RESTRICTIONS ON THESE CONSTANTS ARE THAT RDWARF**2 NOT C UNDERFLOW AND RGIANT**2 NOT OVERFLOW. THE CONSTANTS C GIVEN HERE ARE SUITABLE FOR EVERY KNOWN COMPUTER. C C THE FUNCTION STATEMENT IS C C DOUBLE PRECISION FUNCTION ENORM(N,X) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN INPUT ARRAY OF LENGTH N. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DABS,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I DOUBLE PRECISION AGIANT,FLOATN,ONE,RDWARF,RGIANT,S1,S2,S3,XABS, * X1MAX,X3MAX,ZERO DATA ONE,ZERO,RDWARF,RGIANT /1.0D0,0.0D0,3.834D-20,1.304D19/ S1 = ZERO S2 = ZERO S3 = ZERO X1MAX = ZERO X3MAX = ZERO FLOATN = N AGIANT = RGIANT/FLOATN DO 90 I = 1, N XABS = DABS(X(I)) IF (XABS .GT. RDWARF .AND. XABS .LT. AGIANT) GO TO 70 IF (XABS .LE. RDWARF) GO TO 30 C C SUM FOR LARGE COMPONENTS. C IF (XABS .LE. X1MAX) GO TO 10 S1 = ONE + S1*(X1MAX/XABS)**2 X1MAX = XABS GO TO 20 10 CONTINUE S1 = S1 + (XABS/X1MAX)**2 20 CONTINUE GO TO 60 30 CONTINUE C C SUM FOR SMALL COMPONENTS. C IF (XABS .LE. X3MAX) GO TO 40 S3 = ONE + S3*(X3MAX/XABS)**2 X3MAX = XABS GO TO 50 40 CONTINUE IF (XABS .NE. ZERO) S3 = S3 + (XABS/X3MAX)**2 50 CONTINUE 60 CONTINUE GO TO 80 70 CONTINUE C C SUM FOR INTERMEDIATE COMPONENTS. C S2 = S2 + XABS**2 80 CONTINUE 90 CONTINUE C C CALCULATION OF NORM. C IF (S1 .EQ. ZERO) GO TO 100 ENORM = X1MAX*DSQRT(S1+(S2/X1MAX)/X1MAX) GO TO 130 100 CONTINUE IF (S2 .EQ. ZERO) GO TO 110 IF (S2 .GE. X3MAX) * ENORM = DSQRT(S2*(ONE+(X3MAX/S2)*(X3MAX*S3))) IF (S2 .LT. X3MAX) * ENORM = DSQRT(X3MAX*((S2/X3MAX)+(X3MAX*S3))) GO TO 120 110 CONTINUE ENORM = X3MAX*DSQRT(S3) 120 CONTINUE 130 CONTINUE RETURN C C LAST CARD OF FUNCTION ENORM. C END SUBROUTINE FDJAC1(FCN,N,X,FVEC,FJAC,LDFJAC,IFLAG,ML,MU,EPSFCN, * WA1,WA2) INTEGER N,LDFJAC,IFLAG,ML,MU DOUBLE PRECISION EPSFCN DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N),WA1(N),WA2(N) C ********** C C SUBROUTINE FDJAC1 C C THIS SUBROUTINE COMPUTES A FORWARD-DIFFERENCE APPROXIMATION C TO THE N BY N JACOBIAN MATRIX ASSOCIATED WITH A SPECIFIED C PROBLEM OF N FUNCTIONS IN N VARIABLES. IF THE JACOBIAN HAS C A BANDED FORM, THEN FUNCTION EVALUATIONS ARE SAVED BY ONLY C APPROXIMATING THE NONZERO TERMS. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE FDJAC1(FCN,N,X,FVEC,FJAC,LDFJAC,IFLAG,ML,MU,EPSFCN, C WA1,WA2) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(N,X,FVEC,IFLAG) C INTEGER N,IFLAG C DOUBLE PRECISION X(N),FVEC(N) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF FDJAC1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS AND VARIABLES. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE C FUNCTIONS EVALUATED AT X. C C FJAC IS AN OUTPUT N BY N ARRAY WHICH CONTAINS THE C APPROXIMATION TO THE JACOBIAN MATRIX EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C IFLAG IS AN INTEGER VARIABLE WHICH CAN BE USED TO TERMINATE C THE EXECUTION OF FDJAC1. SEE DESCRIPTION OF FCN. C C ML IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES C THE NUMBER OF SUBDIAGONALS WITHIN THE BAND OF THE C JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET C ML TO AT LEAST N - 1. C C EPSFCN IS AN INPUT VARIABLE USED IN DETERMINING A SUITABLE C STEP LENGTH FOR THE FORWARD-DIFFERENCE APPROXIMATION. THIS C APPROXIMATION ASSUMES THAT THE RELATIVE ERRORS IN THE C FUNCTIONS ARE OF THE ORDER OF EPSFCN. IF EPSFCN IS LESS C THAN THE MACHINE PRECISION, IT IS ASSUMED THAT THE RELATIVE C ERRORS IN THE FUNCTIONS ARE OF THE ORDER OF THE MACHINE C PRECISION. C C MU IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES C THE NUMBER OF SUPERDIAGONALS WITHIN THE BAND OF THE C JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET C MU TO AT LEAST N - 1. C C WA1 AND WA2 ARE WORK ARRAYS OF LENGTH N. IF ML + MU + 1 IS AT C LEAST N, THEN THE JACOBIAN IS CONSIDERED DENSE, AND WA2 IS C NOT REFERENCED. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... DPMPAR C C FORTRAN-SUPPLIED ... DABS,DMAX1,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,K,MSUM DOUBLE PRECISION EPS,EPSMCH,H,TEMP,ZERO DOUBLE PRECISION DPMPAR DATA ZERO /0.0D0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = DPMPAR(1) C EPS = DSQRT(DMAX1(EPSFCN,EPSMCH)) MSUM = ML + MU + 1 IF (MSUM .LT. N) GO TO 40 C C COMPUTATION OF DENSE APPROXIMATE JACOBIAN. C DO 20 J = 1, N TEMP = X(J) H = EPS*DABS(TEMP) IF (H .EQ. ZERO) H = EPS X(J) = TEMP + H CALL FCN(N,X,WA1,IFLAG) IF (IFLAG .LT. 0) GO TO 30 X(J) = TEMP DO 10 I = 1, N FJAC(I,J) = (WA1(I) - FVEC(I))/H 10 CONTINUE 20 CONTINUE 30 CONTINUE GO TO 110 40 CONTINUE C C COMPUTATION OF BANDED APPROXIMATE JACOBIAN. C DO 90 K = 1, MSUM DO 60 J = K, N, MSUM WA2(J) = X(J) H = EPS*DABS(WA2(J)) IF (H .EQ. ZERO) H = EPS X(J) = WA2(J) + H 60 CONTINUE CALL FCN(N,X,WA1,IFLAG) IF (IFLAG .LT. 0) GO TO 100 DO 80 J = K, N, MSUM X(J) = WA2(J) H = EPS*DABS(WA2(J)) IF (H .EQ. ZERO) H = EPS DO 70 I = 1, N FJAC(I,J) = ZERO IF (I .GE. J - MU .AND. I .LE. J + ML) * FJAC(I,J) = (WA1(I) - FVEC(I))/H 70 CONTINUE 80 CONTINUE 90 CONTINUE 100 CONTINUE 110 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FDJAC1. C END SUBROUTINE FDJAC2(FCN,M,N,X,FVEC,FJAC,LDFJAC,IFLAG,EPSFCN,WA) INTEGER M,N,LDFJAC,IFLAG DOUBLE PRECISION EPSFCN DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N),WA(M) C ********** C C SUBROUTINE FDJAC2 C C THIS SUBROUTINE COMPUTES A FORWARD-DIFFERENCE APPROXIMATION C TO THE M BY N JACOBIAN MATRIX ASSOCIATED WITH A SPECIFIED C PROBLEM OF M FUNCTIONS IN N VARIABLES. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE FDJAC2(FCN,M,N,X,FVEC,FJAC,LDFJAC,IFLAG,EPSFCN,WA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,IFLAG) C INTEGER M,N,IFLAG C DOUBLE PRECISION X(N),FVEC(M) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF FDJAC2. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN INPUT ARRAY OF LENGTH M WHICH MUST CONTAIN THE C FUNCTIONS EVALUATED AT X. C C FJAC IS AN OUTPUT M BY N ARRAY WHICH CONTAINS THE C APPROXIMATION TO THE JACOBIAN MATRIX EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C IFLAG IS AN INTEGER VARIABLE WHICH CAN BE USED TO TERMINATE C THE EXECUTION OF FDJAC2. SEE DESCRIPTION OF FCN. C C EPSFCN IS AN INPUT VARIABLE USED IN DETERMINING A SUITABLE C STEP LENGTH FOR THE FORWARD-DIFFERENCE APPROXIMATION. THIS C APPROXIMATION ASSUMES THAT THE RELATIVE ERRORS IN THE C FUNCTIONS ARE OF THE ORDER OF EPSFCN. IF EPSFCN IS LESS C THAN THE MACHINE PRECISION, IT IS ASSUMED THAT THE RELATIVE C ERRORS IN THE FUNCTIONS ARE OF THE ORDER OF THE MACHINE C PRECISION. C C WA IS A WORK ARRAY OF LENGTH M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DPMPAR C C FORTRAN-SUPPLIED ... DABS,DMAX1,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J DOUBLE PRECISION EPS,EPSMCH,H,TEMP,ZERO DOUBLE PRECISION DPMPAR DATA ZERO /0.0D0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = DPMPAR(1) C EPS = DSQRT(DMAX1(EPSFCN,EPSMCH)) DO 20 J = 1, N TEMP = X(J) H = EPS*DABS(TEMP) IF (H .EQ. ZERO) H = EPS X(J) = TEMP + H CALL FCN(M,N,X,WA,IFLAG) IF (IFLAG .LT. 0) GO TO 30 X(J) = TEMP DO 10 I = 1, M FJAC(I,J) = (WA(I) - FVEC(I))/H 10 CONTINUE 20 CONTINUE 30 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FDJAC2. C END SUBROUTINE HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN,DIAG, * MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC,R,LR, * QTF,WA1,WA2,WA3,WA4) INTEGER N,MAXFEV,ML,MU,MODE,NPRINT,INFO,NFEV,LDFJAC,LR DOUBLE PRECISION XTOL,EPSFCN,FACTOR DOUBLE PRECISION X(N),FVEC(N),DIAG(N),FJAC(LDFJAC,N),R(LR), * QTF(N),WA1(N),WA2(N),WA3(N),WA4(N) EXTERNAL FCN C ********** C C SUBROUTINE HYBRD C C THE PURPOSE OF HYBRD IS TO FIND A ZERO OF A SYSTEM OF C N NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION C OF THE POWELL HYBRID METHOD. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS. THE JACOBIAN IS C THEN CALCULATED BY A FORWARD-DIFFERENCE APPROXIMATION. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN, C DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,FJAC, C LDFJAC,R,LR,QTF,WA1,WA2,WA3,WA4) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(N,X,FVEC,IFLAG) C INTEGER N,IFLAG C DOUBLE PRECISION X(N),FVEC(N) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C --------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF HYBRD. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS AND VARIABLES. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C XTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE C ITERATES IS AT MOST XTOL. C C MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION C OCCURS WHEN THE NUMBER OF CALLS TO FCN IS AT LEAST MAXFEV C BY THE END OF AN ITERATION. C C ML IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES C THE NUMBER OF SUBDIAGONALS WITHIN THE BAND OF THE C JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET C ML TO AT LEAST N - 1. C C MU IS A NONNEGATIVE INTEGER INPUT VARIABLE WHICH SPECIFIES C THE NUMBER OF SUPERDIAGONALS WITHIN THE BAND OF THE C JACOBIAN MATRIX. IF THE JACOBIAN IS NOT BANDED, SET C MU TO AT LEAST N - 1. C C EPSFCN IS AN INPUT VARIABLE USED IN DETERMINING A SUITABLE C STEP LENGTH FOR THE FORWARD-DIFFERENCE APPROXIMATION. THIS C APPROXIMATION ASSUMES THAT THE RELATIVE ERRORS IN THE C FUNCTIONS ARE OF THE ORDER OF EPSFCN. IF EPSFCN IS LESS C THAN THE MACHINE PRECISION, IT IS ASSUMED THAT THE RELATIVE C ERRORS IN THE FUNCTIONS ARE OF THE ORDER OF THE MACHINE C PRECISION. C C DIAG IS AN ARRAY OF LENGTH N. IF MODE = 1 (SEE C BELOW), DIAG IS INTERNALLY SET. IF MODE = 2, DIAG C MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS C MULTIPLICATIVE SCALE FACTORS FOR THE VARIABLES. C C MODE IS AN INTEGER INPUT VARIABLE. IF MODE = 1, THE C VARIABLES WILL BE SCALED INTERNALLY. IF MODE = 2, C THE SCALING IS SPECIFIED BY THE INPUT DIAG. OTHER C VALUES OF MODE ARE EQUIVALENT TO MODE = 1. C C FACTOR IS A POSITIVE INPUT VARIABLE USED IN DETERMINING THE C INITIAL STEP BOUND. THIS BOUND IS SET TO THE PRODUCT OF C FACTOR AND THE EUCLIDEAN NORM OF DIAG*X IF NONZERO, OR ELSE C TO FACTOR ITSELF. IN MOST CASES FACTOR SHOULD LIE IN THE C INTERVAL (.1,100.). 100. IS A GENERALLY RECOMMENDED VALUE. C C NPRINT IS AN INTEGER INPUT VARIABLE THAT ENABLES CONTROLLED C PRINTING OF ITERATES IF IT IS POSITIVE. IN THIS CASE, C FCN IS CALLED WITH IFLAG = 0 AT THE BEGINNING OF THE FIRST C ITERATION AND EVERY NPRINT ITERATIONS THEREAFTER AND C IMMEDIATELY PRIOR TO RETURN, WITH X AND FVEC AVAILABLE C FOR PRINTING. IF NPRINT IS NOT POSITIVE, NO SPECIAL CALLS C OF FCN WITH IFLAG = 0 ARE MADE. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 RELATIVE ERROR BETWEEN TWO CONSECUTIVE ITERATES C IS AT MOST XTOL. C C INFO = 2 NUMBER OF CALLS TO FCN HAS REACHED OR EXCEEDED C MAXFEV. C C INFO = 3 XTOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 4 ITERATION IS NOT MAKING GOOD PROGRESS, AS C MEASURED BY THE IMPROVEMENT FROM THE LAST C FIVE JACOBIAN EVALUATIONS. C C INFO = 5 ITERATION IS NOT MAKING GOOD PROGRESS, AS C MEASURED BY THE IMPROVEMENT FROM THE LAST C TEN ITERATIONS. C C NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN. C C FJAC IS AN OUTPUT N BY N ARRAY WHICH CONTAINS THE C ORTHOGONAL MATRIX Q PRODUCED BY THE QR FACTORIZATION C OF THE FINAL APPROXIMATE JACOBIAN. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C R IS AN OUTPUT ARRAY OF LENGTH LR WHICH CONTAINS THE C UPPER TRIANGULAR MATRIX PRODUCED BY THE QR FACTORIZATION C OF THE FINAL APPROXIMATE JACOBIAN, STORED ROWWISE. C C LR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(N+1))/2. C C QTF IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE VECTOR (Q TRANSPOSE)*FVEC. C C WA1, WA2, WA3, AND WA4 ARE WORK ARRAYS OF LENGTH N. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DOGLEG,DPMPAR,ENORM,FDJAC1, C QFORM,QRFAC,R1MPYQ,R1UPDT C C FORTRAN-SUPPLIED ... DABS,DMAX1,DMIN1,MIN0,MOD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IFLAG,ITER,J,JM1,L,MSUM,NCFAIL,NCSUC,NSLOW1,NSLOW2 INTEGER IWA(1) LOGICAL JEVAL,SING DOUBLE PRECISION ACTRED,DELTA,EPSMCH,FNORM,FNORM1,ONE,PNORM, * PRERED,P1,P5,P001,P0001,RATIO,SUM,TEMP,XNORM, * ZERO DOUBLE PRECISION DPMPAR,ENORM DATA ONE,P1,P5,P001,P0001,ZERO * /1.0D0,1.0D-1,5.0D-1,1.0D-3,1.0D-4,0.0D0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = DPMPAR(1) C INFO = 0 IFLAG = 0 NFEV = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. XTOL .LT. ZERO .OR. MAXFEV .LE. 0 * .OR. ML .LT. 0 .OR. MU .LT. 0 .OR. FACTOR .LE. ZERO * .OR. LDFJAC .LT. N .OR. LR .LT. (N*(N + 1))/2) GO TO 300 IF (MODE .NE. 2) GO TO 20 DO 10 J = 1, N IF (DIAG(J) .LE. ZERO) GO TO 300 10 CONTINUE 20 CONTINUE C C EVALUATE THE FUNCTION AT THE STARTING POINT C AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(N,X,FVEC,IFLAG) NFEV = 1 IF (IFLAG .LT. 0) GO TO 300 FNORM = ENORM(N,FVEC) C C DETERMINE THE NUMBER OF CALLS TO FCN NEEDED TO COMPUTE C THE JACOBIAN MATRIX. C MSUM = MIN0(ML+MU+1,N) C C INITIALIZE ITERATION COUNTER AND MONITORS. C ITER = 1 NCSUC = 0 NCFAIL = 0 NSLOW1 = 0 NSLOW2 = 0 C C BEGINNING OF THE OUTER LOOP. C 30 CONTINUE JEVAL = .TRUE. C C CALCULATE THE JACOBIAN MATRIX. C IFLAG = 2 CALL FDJAC1(FCN,N,X,FVEC,FJAC,LDFJAC,IFLAG,ML,MU,EPSFCN,WA1, * WA2) NFEV = NFEV + MSUM IF (IFLAG .LT. 0) GO TO 300 C C COMPUTE THE QR FACTORIZATION OF THE JACOBIAN. C CALL QRFAC(N,N,FJAC,LDFJAC,.FALSE.,IWA,1,WA1,WA2,WA3) C C ON THE FIRST ITERATION AND IF MODE IS 1, SCALE ACCORDING C TO THE NORMS OF THE COLUMNS OF THE INITIAL JACOBIAN. C IF (ITER .NE. 1) GO TO 70 IF (MODE .EQ. 2) GO TO 50 DO 40 J = 1, N DIAG(J) = WA2(J) IF (WA2(J) .EQ. ZERO) DIAG(J) = ONE 40 CONTINUE 50 CONTINUE C C ON THE FIRST ITERATION, CALCULATE THE NORM OF THE SCALED X C AND INITIALIZE THE STEP BOUND DELTA. C DO 60 J = 1, N WA3(J) = DIAG(J)*X(J) 60 CONTINUE XNORM = ENORM(N,WA3) DELTA = FACTOR*XNORM IF (DELTA .EQ. ZERO) DELTA = FACTOR 70 CONTINUE C C FORM (Q TRANSPOSE)*FVEC AND STORE IN QTF. C DO 80 I = 1, N QTF(I) = FVEC(I) 80 CONTINUE DO 120 J = 1, N IF (FJAC(J,J) .EQ. ZERO) GO TO 110 SUM = ZERO DO 90 I = J, N SUM = SUM + FJAC(I,J)*QTF(I) 90 CONTINUE TEMP = -SUM/FJAC(J,J) DO 100 I = J, N QTF(I) = QTF(I) + FJAC(I,J)*TEMP 100 CONTINUE 110 CONTINUE 120 CONTINUE C C COPY THE TRIANGULAR FACTOR OF THE QR FACTORIZATION INTO R. C SING = .FALSE. DO 150 J = 1, N L = J JM1 = J - 1 IF (JM1 .LT. 1) GO TO 140 DO 130 I = 1, JM1 R(L) = FJAC(I,J) L = L + N - I 130 CONTINUE 140 CONTINUE R(L) = WA1(J) IF (WA1(J) .EQ. ZERO) SING = .TRUE. 150 CONTINUE C C ACCUMULATE THE ORTHOGONAL FACTOR IN FJAC. C CALL QFORM(N,N,FJAC,LDFJAC,WA1) C C RESCALE IF NECESSARY. C IF (MODE .EQ. 2) GO TO 170 DO 160 J = 1, N DIAG(J) = DMAX1(DIAG(J),WA2(J)) 160 CONTINUE 170 CONTINUE C C BEGINNING OF THE INNER LOOP. C 180 CONTINUE C C IF REQUESTED, CALL FCN TO ENABLE PRINTING OF ITERATES. C IF (NPRINT .LE. 0) GO TO 190 IFLAG = 0 IF (MOD(ITER-1,NPRINT) .EQ. 0) CALL FCN(N,X,FVEC,IFLAG) IF (IFLAG .LT. 0) GO TO 300 190 CONTINUE C C DETERMINE THE DIRECTION P. C CALL DOGLEG(N,R,LR,DIAG,QTF,DELTA,WA1,WA2,WA3) C C STORE THE DIRECTION P AND X + P. CALCULATE THE NORM OF P. C DO 200 J = 1, N WA1(J) = -WA1(J) WA2(J) = X(J) + WA1(J) WA3(J) = DIAG(J)*WA1(J) 200 CONTINUE PNORM = ENORM(N,WA3) C C ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND. C IF (ITER .EQ. 1) DELTA = DMIN1(DELTA,PNORM) C C EVALUATE THE FUNCTION AT X + P AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(N,WA2,WA4,IFLAG) NFEV = NFEV + 1 IF (IFLAG .LT. 0) GO TO 300 FNORM1 = ENORM(N,WA4) C C COMPUTE THE SCALED ACTUAL REDUCTION. C ACTRED = -ONE IF (FNORM1 .LT. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2 C C COMPUTE THE SCALED PREDICTED REDUCTION. C L = 1 DO 220 I = 1, N SUM = ZERO DO 210 J = I, N SUM = SUM + R(L)*WA1(J) L = L + 1 210 CONTINUE WA3(I) = QTF(I) + SUM 220 CONTINUE TEMP = ENORM(N,WA3) PRERED = ZERO IF (TEMP .LT. FNORM) PRERED = ONE - (TEMP/FNORM)**2 C C COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED C REDUCTION. C RATIO = ZERO IF (PRERED .GT. ZERO) RATIO = ACTRED/PRERED C C UPDATE THE STEP BOUND. C IF (RATIO .GE. P1) GO TO 230 NCSUC = 0 NCFAIL = NCFAIL + 1 DELTA = P5*DELTA GO TO 240 230 CONTINUE NCFAIL = 0 NCSUC = NCSUC + 1 IF (RATIO .GE. P5 .OR. NCSUC .GT. 1) * DELTA = DMAX1(DELTA,PNORM/P5) IF (DABS(RATIO-ONE) .LE. P1) DELTA = PNORM/P5 240 CONTINUE C C TEST FOR SUCCESSFUL ITERATION. C IF (RATIO .LT. P0001) GO TO 260 C C SUCCESSFUL ITERATION. UPDATE X, FVEC, AND THEIR NORMS. C DO 250 J = 1, N X(J) = WA2(J) WA2(J) = DIAG(J)*X(J) FVEC(J) = WA4(J) 250 CONTINUE XNORM = ENORM(N,WA2) FNORM = FNORM1 ITER = ITER + 1 260 CONTINUE C C DETERMINE THE PROGRESS OF THE ITERATION. C NSLOW1 = NSLOW1 + 1 IF (ACTRED .GE. P001) NSLOW1 = 0 IF (JEVAL) NSLOW2 = NSLOW2 + 1 IF (ACTRED .GE. P1) NSLOW2 = 0 C C TEST FOR CONVERGENCE. C IF (DELTA .LE. XTOL*XNORM .OR. FNORM .EQ. ZERO) INFO = 1 IF (INFO .NE. 0) GO TO 300 C C TESTS FOR TERMINATION AND STRINGENT TOLERANCES. C IF (NFEV .GE. MAXFEV) INFO = 2 IF (P1*DMAX1(P1*DELTA,PNORM) .LE. EPSMCH*XNORM) INFO = 3 IF (NSLOW2 .EQ. 5) INFO = 4 IF (NSLOW1 .EQ. 10) INFO = 5 IF (INFO .NE. 0) GO TO 300 C C CRITERION FOR RECALCULATING JACOBIAN APPROXIMATION C BY FORWARD DIFFERENCES. C IF (NCFAIL .EQ. 2) GO TO 290 C C CALCULATE THE RANK ONE MODIFICATION TO THE JACOBIAN C AND UPDATE QTF IF NECESSARY. C DO 280 J = 1, N SUM = ZERO DO 270 I = 1, N SUM = SUM + FJAC(I,J)*WA4(I) 270 CONTINUE WA2(J) = (SUM - WA3(J))/PNORM WA1(J) = DIAG(J)*((DIAG(J)*WA1(J))/PNORM) IF (RATIO .GE. P0001) QTF(J) = SUM 280 CONTINUE C C COMPUTE THE QR FACTORIZATION OF THE UPDATED JACOBIAN. C CALL R1UPDT(N,N,R,LR,WA1,WA2,WA3,SING) CALL R1MPYQ(N,N,FJAC,LDFJAC,WA2,WA3) CALL R1MPYQ(1,N,QTF,1,WA2,WA3) C C END OF THE INNER LOOP. C JEVAL = .FALSE. GO TO 180 290 CONTINUE C C END OF THE OUTER LOOP. C GO TO 30 300 CONTINUE C C TERMINATION, EITHER NORMAL OR USER IMPOSED. C IF (IFLAG .LT. 0) INFO = IFLAG IFLAG = 0 IF (NPRINT .GT. 0) CALL FCN(N,X,FVEC,IFLAG) RETURN C C LAST CARD OF SUBROUTINE HYBRD. C END SUBROUTINE HYBRD1(FCN,N,X,FVEC,TOL,INFO,WA,LWA) INTEGER N,INFO,LWA DOUBLE PRECISION TOL DOUBLE PRECISION X(N),FVEC(N),WA(LWA) EXTERNAL FCN C ********** C C SUBROUTINE HYBRD1 C C THE PURPOSE OF HYBRD1 IS TO FIND A ZERO OF A SYSTEM OF C N NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION C OF THE POWELL HYBRID METHOD. THIS IS DONE BY USING THE C MORE GENERAL NONLINEAR EQUATION SOLVER HYBRD. THE USER C MUST PROVIDE A SUBROUTINE WHICH CALCULATES THE FUNCTIONS. C THE JACOBIAN IS THEN CALCULATED BY A FORWARD-DIFFERENCE C APPROXIMATION. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE HYBRD1(FCN,N,X,FVEC,TOL,INFO,WA,LWA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(N,X,FVEC,IFLAG) C INTEGER N,IFLAG C DOUBLE PRECISION X(N),FVEC(N) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C --------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF HYBRD1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS AND VARIABLES. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C TOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION OCCURS C WHEN THE ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO = 2 NUMBER OF CALLS TO FCN HAS REACHED OR EXCEEDED C 200*(N+1). C C INFO = 3 TOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 4 ITERATION IS NOT MAKING GOOD PROGRESS. C C WA IS A WORK ARRAY OF LENGTH LWA. C C LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(3*N+13))/2. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... HYBRD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER INDEX,J,LR,MAXFEV,ML,MODE,MU,NFEV,NPRINT DOUBLE PRECISION EPSFCN,FACTOR,ONE,XTOL,ZERO DATA FACTOR,ONE,ZERO /1.0D2,1.0D0,0.0D0/ INFO = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. TOL .LT. ZERO .OR. LWA .LT. (N*(3*N + 13))/2) * GO TO 20 C C CALL HYBRD. C MAXFEV = 200*(N + 1) XTOL = TOL ML = N - 1 MU = N - 1 EPSFCN = ZERO MODE = 2 DO 10 J = 1, N WA(J) = ONE 10 CONTINUE NPRINT = 0 LR = (N*(N + 1))/2 INDEX = 6*N + LR CALL HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN,WA(1),MODE, * FACTOR,NPRINT,INFO,NFEV,WA(INDEX+1),N,WA(6*N+1),LR, * WA(N+1),WA(2*N+1),WA(3*N+1),WA(4*N+1),WA(5*N+1)) IF (INFO .EQ. 5) INFO = 4 20 CONTINUE RETURN C C LAST CARD OF SUBROUTINE HYBRD1. C END SUBROUTINE HYBRJ(FCN,N,X,FVEC,FJAC,LDFJAC,XTOL,MAXFEV,DIAG,MODE, * FACTOR,NPRINT,INFO,NFEV,NJEV,R,LR,QTF,WA1,WA2, * WA3,WA4) INTEGER N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV,LR DOUBLE PRECISION XTOL,FACTOR DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N),DIAG(N),R(LR), * QTF(N),WA1(N),WA2(N),WA3(N),WA4(N) C ********** C C SUBROUTINE HYBRJ C C THE PURPOSE OF HYBRJ IS TO FIND A ZERO OF A SYSTEM OF C N NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION C OF THE POWELL HYBRID METHOD. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS AND THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE HYBRJ(FCN,N,X,FVEC,FJAC,LDFJAC,XTOL,MAXFEV,DIAG, C MODE,FACTOR,NPRINT,INFO,NFEV,NJEV,R,LR,QTF, C WA1,WA2,WA3,WA4) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE JACOBIAN. FCN MUST C BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER C CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) C INTEGER N,LDFJAC,IFLAG C DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. C IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND C RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. C --------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF HYBRJ. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS AND VARIABLES. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT N BY N ARRAY WHICH CONTAINS THE C ORTHOGONAL MATRIX Q PRODUCED BY THE QR FACTORIZATION C OF THE FINAL APPROXIMATE JACOBIAN. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C XTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE C ITERATES IS AT MOST XTOL. C C MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION C OCCURS WHEN THE NUMBER OF CALLS TO FCN WITH IFLAG = 1 C HAS REACHED MAXFEV. C C DIAG IS AN ARRAY OF LENGTH N. IF MODE = 1 (SEE C BELOW), DIAG IS INTERNALLY SET. IF MODE = 2, DIAG C MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS C MULTIPLICATIVE SCALE FACTORS FOR THE VARIABLES. C C MODE IS AN INTEGER INPUT VARIABLE. IF MODE = 1, THE C VARIABLES WILL BE SCALED INTERNALLY. IF MODE = 2, C THE SCALING IS SPECIFIED BY THE INPUT DIAG. OTHER C VALUES OF MODE ARE EQUIVALENT TO MODE = 1. C C FACTOR IS A POSITIVE INPUT VARIABLE USED IN DETERMINING THE C INITIAL STEP BOUND. THIS BOUND IS SET TO THE PRODUCT OF C FACTOR AND THE EUCLIDEAN NORM OF DIAG*X IF NONZERO, OR ELSE C TO FACTOR ITSELF. IN MOST CASES FACTOR SHOULD LIE IN THE C INTERVAL (.1,100.). 100. IS A GENERALLY RECOMMENDED VALUE. C C NPRINT IS AN INTEGER INPUT VARIABLE THAT ENABLES CONTROLLED C PRINTING OF ITERATES IF IT IS POSITIVE. IN THIS CASE, C FCN IS CALLED WITH IFLAG = 0 AT THE BEGINNING OF THE FIRST C ITERATION AND EVERY NPRINT ITERATIONS THEREAFTER AND C IMMEDIATELY PRIOR TO RETURN, WITH X AND FVEC AVAILABLE C FOR PRINTING. FVEC AND FJAC SHOULD NOT BE ALTERED. C IF NPRINT IS NOT POSITIVE, NO SPECIAL CALLS OF FCN C WITH IFLAG = 0 ARE MADE. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 RELATIVE ERROR BETWEEN TWO CONSECUTIVE ITERATES C IS AT MOST XTOL. C C INFO = 2 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED MAXFEV. C C INFO = 3 XTOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 4 ITERATION IS NOT MAKING GOOD PROGRESS, AS C MEASURED BY THE IMPROVEMENT FROM THE LAST C FIVE JACOBIAN EVALUATIONS. C C INFO = 5 ITERATION IS NOT MAKING GOOD PROGRESS, AS C MEASURED BY THE IMPROVEMENT FROM THE LAST C TEN ITERATIONS. C C NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 1. C C NJEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 2. C C R IS AN OUTPUT ARRAY OF LENGTH LR WHICH CONTAINS THE C UPPER TRIANGULAR MATRIX PRODUCED BY THE QR FACTORIZATION C OF THE FINAL APPROXIMATE JACOBIAN, STORED ROWWISE. C C LR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(N+1))/2. C C QTF IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE VECTOR (Q TRANSPOSE)*FVEC. C C WA1, WA2, WA3, AND WA4 ARE WORK ARRAYS OF LENGTH N. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DOGLEG,DPMPAR,ENORM, C QFORM,QRFAC,R1MPYQ,R1UPDT C C FORTRAN-SUPPLIED ... DABS,DMAX1,DMIN1,MOD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IFLAG,ITER,J,JM1,L,NCFAIL,NCSUC,NSLOW1,NSLOW2 INTEGER IWA(1) LOGICAL JEVAL,SING DOUBLE PRECISION ACTRED,DELTA,EPSMCH,FNORM,FNORM1,ONE,PNORM, * PRERED,P1,P5,P001,P0001,RATIO,SUM,TEMP,XNORM, * ZERO DOUBLE PRECISION DPMPAR,ENORM DATA ONE,P1,P5,P001,P0001,ZERO * /1.0D0,1.0D-1,5.0D-1,1.0D-3,1.0D-4,0.0D0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = DPMPAR(1) C INFO = 0 IFLAG = 0 NFEV = 0 NJEV = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. LDFJAC .LT. N .OR. XTOL .LT. ZERO * .OR. MAXFEV .LE. 0 .OR. FACTOR .LE. ZERO * .OR. LR .LT. (N*(N + 1))/2) GO TO 300 IF (MODE .NE. 2) GO TO 20 DO 10 J = 1, N IF (DIAG(J) .LE. ZERO) GO TO 300 10 CONTINUE 20 CONTINUE C C EVALUATE THE FUNCTION AT THE STARTING POINT C AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) NFEV = 1 IF (IFLAG .LT. 0) GO TO 300 FNORM = ENORM(N,FVEC) C C INITIALIZE ITERATION COUNTER AND MONITORS. C ITER = 1 NCSUC = 0 NCFAIL = 0 NSLOW1 = 0 NSLOW2 = 0 C C BEGINNING OF THE OUTER LOOP. C 30 CONTINUE JEVAL = .TRUE. C C CALCULATE THE JACOBIAN MATRIX. C IFLAG = 2 CALL FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) NJEV = NJEV + 1 IF (IFLAG .LT. 0) GO TO 300 C C COMPUTE THE QR FACTORIZATION OF THE JACOBIAN. C CALL QRFAC(N,N,FJAC,LDFJAC,.FALSE.,IWA,1,WA1,WA2,WA3) C C ON THE FIRST ITERATION AND IF MODE IS 1, SCALE ACCORDING C TO THE NORMS OF THE COLUMNS OF THE INITIAL JACOBIAN. C IF (ITER .NE. 1) GO TO 70 IF (MODE .EQ. 2) GO TO 50 DO 40 J = 1, N DIAG(J) = WA2(J) IF (WA2(J) .EQ. ZERO) DIAG(J) = ONE 40 CONTINUE 50 CONTINUE C C ON THE FIRST ITERATION, CALCULATE THE NORM OF THE SCALED X C AND INITIALIZE THE STEP BOUND DELTA. C DO 60 J = 1, N WA3(J) = DIAG(J)*X(J) 60 CONTINUE XNORM = ENORM(N,WA3) DELTA = FACTOR*XNORM IF (DELTA .EQ. ZERO) DELTA = FACTOR 70 CONTINUE C C FORM (Q TRANSPOSE)*FVEC AND STORE IN QTF. C DO 80 I = 1, N QTF(I) = FVEC(I) 80 CONTINUE DO 120 J = 1, N IF (FJAC(J,J) .EQ. ZERO) GO TO 110 SUM = ZERO DO 90 I = J, N SUM = SUM + FJAC(I,J)*QTF(I) 90 CONTINUE TEMP = -SUM/FJAC(J,J) DO 100 I = J, N QTF(I) = QTF(I) + FJAC(I,J)*TEMP 100 CONTINUE 110 CONTINUE 120 CONTINUE C C COPY THE TRIANGULAR FACTOR OF THE QR FACTORIZATION INTO R. C SING = .FALSE. DO 150 J = 1, N L = J JM1 = J - 1 IF (JM1 .LT. 1) GO TO 140 DO 130 I = 1, JM1 R(L) = FJAC(I,J) L = L + N - I 130 CONTINUE 140 CONTINUE R(L) = WA1(J) IF (WA1(J) .EQ. ZERO) SING = .TRUE. 150 CONTINUE C C ACCUMULATE THE ORTHOGONAL FACTOR IN FJAC. C CALL QFORM(N,N,FJAC,LDFJAC,WA1) C C RESCALE IF NECESSARY. C IF (MODE .EQ. 2) GO TO 170 DO 160 J = 1, N DIAG(J) = DMAX1(DIAG(J),WA2(J)) 160 CONTINUE 170 CONTINUE C C BEGINNING OF THE INNER LOOP. C 180 CONTINUE C C IF REQUESTED, CALL FCN TO ENABLE PRINTING OF ITERATES. C IF (NPRINT .LE. 0) GO TO 190 IFLAG = 0 IF (MOD(ITER-1,NPRINT) .EQ. 0) * CALL FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) IF (IFLAG .LT. 0) GO TO 300 190 CONTINUE C C DETERMINE THE DIRECTION P. C CALL DOGLEG(N,R,LR,DIAG,QTF,DELTA,WA1,WA2,WA3) C C STORE THE DIRECTION P AND X + P. CALCULATE THE NORM OF P. C DO 200 J = 1, N WA1(J) = -WA1(J) WA2(J) = X(J) + WA1(J) WA3(J) = DIAG(J)*WA1(J) 200 CONTINUE PNORM = ENORM(N,WA3) C C ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND. C IF (ITER .EQ. 1) DELTA = DMIN1(DELTA,PNORM) C C EVALUATE THE FUNCTION AT X + P AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(N,WA2,WA4,FJAC,LDFJAC,IFLAG) NFEV = NFEV + 1 IF (IFLAG .LT. 0) GO TO 300 FNORM1 = ENORM(N,WA4) C C COMPUTE THE SCALED ACTUAL REDUCTION. C ACTRED = -ONE IF (FNORM1 .LT. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2 C C COMPUTE THE SCALED PREDICTED REDUCTION. C L = 1 DO 220 I = 1, N SUM = ZERO DO 210 J = I, N SUM = SUM + R(L)*WA1(J) L = L + 1 210 CONTINUE WA3(I) = QTF(I) + SUM 220 CONTINUE TEMP = ENORM(N,WA3) PRERED = ZERO IF (TEMP .LT. FNORM) PRERED = ONE - (TEMP/FNORM)**2 C C COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED C REDUCTION. C RATIO = ZERO IF (PRERED .GT. ZERO) RATIO = ACTRED/PRERED C C UPDATE THE STEP BOUND. C IF (RATIO .GE. P1) GO TO 230 NCSUC = 0 NCFAIL = NCFAIL + 1 DELTA = P5*DELTA GO TO 240 230 CONTINUE NCFAIL = 0 NCSUC = NCSUC + 1 IF (RATIO .GE. P5 .OR. NCSUC .GT. 1) * DELTA = DMAX1(DELTA,PNORM/P5) IF (DABS(RATIO-ONE) .LE. P1) DELTA = PNORM/P5 240 CONTINUE C C TEST FOR SUCCESSFUL ITERATION. C IF (RATIO .LT. P0001) GO TO 260 C C SUCCESSFUL ITERATION. UPDATE X, FVEC, AND THEIR NORMS. C DO 250 J = 1, N X(J) = WA2(J) WA2(J) = DIAG(J)*X(J) FVEC(J) = WA4(J) 250 CONTINUE XNORM = ENORM(N,WA2) FNORM = FNORM1 ITER = ITER + 1 260 CONTINUE C C DETERMINE THE PROGRESS OF THE ITERATION. C NSLOW1 = NSLOW1 + 1 IF (ACTRED .GE. P001) NSLOW1 = 0 IF (JEVAL) NSLOW2 = NSLOW2 + 1 IF (ACTRED .GE. P1) NSLOW2 = 0 C C TEST FOR CONVERGENCE. C IF (DELTA .LE. XTOL*XNORM .OR. FNORM .EQ. ZERO) INFO = 1 IF (INFO .NE. 0) GO TO 300 C C TESTS FOR TERMINATION AND STRINGENT TOLERANCES. C IF (NFEV .GE. MAXFEV) INFO = 2 IF (P1*DMAX1(P1*DELTA,PNORM) .LE. EPSMCH*XNORM) INFO = 3 IF (NSLOW2 .EQ. 5) INFO = 4 IF (NSLOW1 .EQ. 10) INFO = 5 IF (INFO .NE. 0) GO TO 300 C C CRITERION FOR RECALCULATING JACOBIAN. C IF (NCFAIL .EQ. 2) GO TO 290 C C CALCULATE THE RANK ONE MODIFICATION TO THE JACOBIAN C AND UPDATE QTF IF NECESSARY. C DO 280 J = 1, N SUM = ZERO DO 270 I = 1, N SUM = SUM + FJAC(I,J)*WA4(I) 270 CONTINUE WA2(J) = (SUM - WA3(J))/PNORM WA1(J) = DIAG(J)*((DIAG(J)*WA1(J))/PNORM) IF (RATIO .GE. P0001) QTF(J) = SUM 280 CONTINUE C C COMPUTE THE QR FACTORIZATION OF THE UPDATED JACOBIAN. C CALL R1UPDT(N,N,R,LR,WA1,WA2,WA3,SING) CALL R1MPYQ(N,N,FJAC,LDFJAC,WA2,WA3) CALL R1MPYQ(1,N,QTF,1,WA2,WA3) C C END OF THE INNER LOOP. C JEVAL = .FALSE. GO TO 180 290 CONTINUE C C END OF THE OUTER LOOP. C GO TO 30 300 CONTINUE C C TERMINATION, EITHER NORMAL OR USER IMPOSED. C IF (IFLAG .LT. 0) INFO = IFLAG IFLAG = 0 IF (NPRINT .GT. 0) CALL FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) RETURN C C LAST CARD OF SUBROUTINE HYBRJ. C END SUBROUTINE HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA) INTEGER N,LDFJAC,INFO,LWA DOUBLE PRECISION TOL DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN C ********** C C SUBROUTINE HYBRJ1 C C THE PURPOSE OF HYBRJ1 IS TO FIND A ZERO OF A SYSTEM OF C N NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION C OF THE POWELL HYBRID METHOD. THIS IS DONE BY USING THE C MORE GENERAL NONLINEAR EQUATION SOLVER HYBRJ. THE USER C MUST PROVIDE A SUBROUTINE WHICH CALCULATES THE FUNCTIONS C AND THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE JACOBIAN. FCN MUST C BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER C CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) C INTEGER N,LDFJAC,IFLAG C DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. C IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND C RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. C --------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF HYBRJ1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS AND VARIABLES. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT N BY N ARRAY WHICH CONTAINS THE C ORTHOGONAL MATRIX Q PRODUCED BY THE QR FACTORIZATION C OF THE FINAL APPROXIMATE JACOBIAN. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C TOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION OCCURS C WHEN THE ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO = 2 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED 100*(N+1). C C INFO = 3 TOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 4 ITERATION IS NOT MAKING GOOD PROGRESS. C C WA IS A WORK ARRAY OF LENGTH LWA. C C LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(N+13))/2. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... HYBRJ C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER J,LR,MAXFEV,MODE,NFEV,NJEV,NPRINT DOUBLE PRECISION FACTOR,ONE,XTOL,ZERO DATA FACTOR,ONE,ZERO /1.0D2,1.0D0,0.0D0/ INFO = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. LDFJAC .LT. N .OR. TOL .LT. ZERO * .OR. LWA .LT. (N*(N + 13))/2) GO TO 20 C C CALL HYBRJ. C MAXFEV = 100*(N + 1) XTOL = TOL MODE = 2 DO 10 J = 1, N WA(J) = ONE 10 CONTINUE NPRINT = 0 LR = (N*(N + 1))/2 CALL HYBRJ(FCN,N,X,FVEC,FJAC,LDFJAC,XTOL,MAXFEV,WA(1),MODE, * FACTOR,NPRINT,INFO,NFEV,NJEV,WA(6*N+1),LR,WA(N+1), * WA(2*N+1),WA(3*N+1),WA(4*N+1),WA(5*N+1)) IF (INFO .EQ. 5) INFO = 4 20 CONTINUE RETURN C C LAST CARD OF SUBROUTINE HYBRJ1. C END SUBROUTINE LMDER(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV INTEGER IPVT(N) DOUBLE PRECISION FTOL,XTOL,GTOL,FACTOR DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N),DIAG(N),QTF(N), * WA1(N),WA2(N),WA3(N),WA4(M) C ********** C C SUBROUTINE LMDER C C THE PURPOSE OF LMDER IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF C THE LEVENBERG-MARQUARDT ALGORITHM. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS AND THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMDER(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, C MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV, C NJEV,IPVT,QTF,WA1,WA2,WA3,WA4) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE JACOBIAN. FCN MUST C BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER C CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) C INTEGER M,N,LDFJAC,IFLAG C DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. C IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND C RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMDER. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT M BY N ARRAY. THE UPPER N BY N SUBMATRIX C OF FJAC CONTAINS AN UPPER TRIANGULAR MATRIX R WITH C DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE SUCH THAT C C T T T C P *(JAC *JAC)*P = R *R, C C WHERE P IS A PERMUTATION MATRIX AND JAC IS THE FINAL C CALCULATED JACOBIAN. COLUMN J OF P IS COLUMN IPVT(J) C (SEE BELOW) OF THE IDENTITY MATRIX. THE LOWER TRAPEZOIDAL C PART OF FJAC CONTAINS INFORMATION GENERATED DURING C THE COMPUTATION OF R. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C FTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN BOTH THE ACTUAL AND PREDICTED RELATIVE C REDUCTIONS IN THE SUM OF SQUARES ARE AT MOST FTOL. C THEREFORE, FTOL MEASURES THE RELATIVE ERROR DESIRED C IN THE SUM OF SQUARES. C C XTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE C ITERATES IS AT MOST XTOL. THEREFORE, XTOL MEASURES THE C RELATIVE ERROR DESIRED IN THE APPROXIMATE SOLUTION. C C GTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE COSINE OF THE ANGLE BETWEEN FVEC AND C ANY COLUMN OF THE JACOBIAN IS AT MOST GTOL IN ABSOLUTE C VALUE. THEREFORE, GTOL MEASURES THE ORTHOGONALITY C DESIRED BETWEEN THE FUNCTION VECTOR AND THE COLUMNS C OF THE JACOBIAN. C C MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION C OCCURS WHEN THE NUMBER OF CALLS TO FCN WITH IFLAG = 1 C HAS REACHED MAXFEV. C C DIAG IS AN ARRAY OF LENGTH N. IF MODE = 1 (SEE C BELOW), DIAG IS INTERNALLY SET. IF MODE = 2, DIAG C MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS C MULTIPLICATIVE SCALE FACTORS FOR THE VARIABLES. C C MODE IS AN INTEGER INPUT VARIABLE. IF MODE = 1, THE C VARIABLES WILL BE SCALED INTERNALLY. IF MODE = 2, C THE SCALING IS SPECIFIED BY THE INPUT DIAG. OTHER C VALUES OF MODE ARE EQUIVALENT TO MODE = 1. C C FACTOR IS A POSITIVE INPUT VARIABLE USED IN DETERMINING THE C INITIAL STEP BOUND. THIS BOUND IS SET TO THE PRODUCT OF C FACTOR AND THE EUCLIDEAN NORM OF DIAG*X IF NONZERO, OR ELSE C TO FACTOR ITSELF. IN MOST CASES FACTOR SHOULD LIE IN THE C INTERVAL (.1,100.).100. IS A GENERALLY RECOMMENDED VALUE. C C NPRINT IS AN INTEGER INPUT VARIABLE THAT ENABLES CONTROLLED C PRINTING OF ITERATES IF IT IS POSITIVE. IN THIS CASE, C FCN IS CALLED WITH IFLAG = 0 AT THE BEGINNING OF THE FIRST C ITERATION AND EVERY NPRINT ITERATIONS THEREAFTER AND C IMMEDIATELY PRIOR TO RETURN, WITH X, FVEC, AND FJAC C AVAILABLE FOR PRINTING. FVEC AND FJAC SHOULD NOT BE C ALTERED. IF NPRINT IS NOT POSITIVE, NO SPECIAL CALLS C OF FCN WITH IFLAG = 0 ARE MADE. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 BOTH ACTUAL AND PREDICTED RELATIVE REDUCTIONS C IN THE SUM OF SQUARES ARE AT MOST FTOL. C C INFO = 2 RELATIVE ERROR BETWEEN TWO CONSECUTIVE ITERATES C IS AT MOST XTOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 THE COSINE OF THE ANGLE BETWEEN FVEC AND ANY C COLUMN OF THE JACOBIAN IS AT MOST GTOL IN C ABSOLUTE VALUE. C C INFO = 5 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED MAXFEV. C C INFO = 6 FTOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 XTOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 8 GTOL IS TOO SMALL. FVEC IS ORTHOGONAL TO THE C COLUMNS OF THE JACOBIAN TO MACHINE PRECISION. C C NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 1. C C NJEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 2. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH N. IPVT C DEFINES A PERMUTATION MATRIX P SUCH THAT JAC*P = Q*R, C WHERE JAC IS THE FINAL CALCULATED JACOBIAN, Q IS C ORTHOGONAL (NOT STORED), AND R IS UPPER TRIANGULAR C WITH DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C QTF IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FIRST N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*FVEC. C C WA1, WA2, AND WA3 ARE WORK ARRAYS OF LENGTH N. C C WA4 IS A WORK ARRAY OF LENGTH M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DPMPAR,ENORM,LMPAR,QRFAC C C FORTRAN-SUPPLIED ... DABS,DMAX1,DMIN1,DSQRT,MOD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IFLAG,ITER,J,L DOUBLE PRECISION ACTRED,DELTA,DIRDER,EPSMCH,FNORM,FNORM1,GNORM, * ONE,PAR,PNORM,PRERED,P1,P5,P25,P75,P0001,RATIO, * SUM,TEMP,TEMP1,TEMP2,XNORM,ZERO DOUBLE PRECISION DPMPAR,ENORM DATA ONE,P1,P5,P25,P75,P0001,ZERO * /1.0D0,1.0D-1,5.0D-1,2.5D-1,7.5D-1,1.0D-4,0.0D0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = DPMPAR(1) C INFO = 0 IFLAG = 0 NFEV = 0 NJEV = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. LDFJAC .LT. M * .OR. FTOL .LT. ZERO .OR. XTOL .LT. ZERO .OR. GTOL .LT. ZERO * .OR. MAXFEV .LE. 0 .OR. FACTOR .LE. ZERO) GO TO 300 IF (MODE .NE. 2) GO TO 20 DO 10 J = 1, N IF (DIAG(J) .LE. ZERO) GO TO 300 10 CONTINUE 20 CONTINUE C C EVALUATE THE FUNCTION AT THE STARTING POINT C AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) NFEV = 1 IF (IFLAG .LT. 0) GO TO 300 FNORM = ENORM(M,FVEC) C C INITIALIZE LEVENBERG-MARQUARDT PARAMETER AND ITERATION COUNTER. C PAR = ZERO ITER = 1 C C BEGINNING OF THE OUTER LOOP. C 30 CONTINUE C C CALCULATE THE JACOBIAN MATRIX. C IFLAG = 2 CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) NJEV = NJEV + 1 IF (IFLAG .LT. 0) GO TO 300 C C IF REQUESTED, CALL FCN TO ENABLE PRINTING OF ITERATES. C IF (NPRINT .LE. 0) GO TO 40 IFLAG = 0 IF (MOD(ITER-1,NPRINT) .EQ. 0) * CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) IF (IFLAG .LT. 0) GO TO 300 40 CONTINUE C C COMPUTE THE QR FACTORIZATION OF THE JACOBIAN. C CALL QRFAC(M,N,FJAC,LDFJAC,.TRUE.,IPVT,N,WA1,WA2,WA3) C C ON THE FIRST ITERATION AND IF MODE IS 1, SCALE ACCORDING C TO THE NORMS OF THE COLUMNS OF THE INITIAL JACOBIAN. C IF (ITER .NE. 1) GO TO 80 IF (MODE .EQ. 2) GO TO 60 DO 50 J = 1, N DIAG(J) = WA2(J) IF (WA2(J) .EQ. ZERO) DIAG(J) = ONE 50 CONTINUE 60 CONTINUE C C ON THE FIRST ITERATION, CALCULATE THE NORM OF THE SCALED X C AND INITIALIZE THE STEP BOUND DELTA. C DO 70 J = 1, N WA3(J) = DIAG(J)*X(J) 70 CONTINUE XNORM = ENORM(N,WA3) DELTA = FACTOR*XNORM IF (DELTA .EQ. ZERO) DELTA = FACTOR 80 CONTINUE C C FORM (Q TRANSPOSE)*FVEC AND STORE THE FIRST N COMPONENTS IN C QTF. C DO 90 I = 1, M WA4(I) = FVEC(I) 90 CONTINUE DO 130 J = 1, N IF (FJAC(J,J) .EQ. ZERO) GO TO 120 SUM = ZERO DO 100 I = J, M SUM = SUM + FJAC(I,J)*WA4(I) 100 CONTINUE TEMP = -SUM/FJAC(J,J) DO 110 I = J, M WA4(I) = WA4(I) + FJAC(I,J)*TEMP 110 CONTINUE 120 CONTINUE FJAC(J,J) = WA1(J) QTF(J) = WA4(J) 130 CONTINUE C C COMPUTE THE NORM OF THE SCALED GRADIENT. C GNORM = ZERO IF (FNORM .EQ. ZERO) GO TO 170 DO 160 J = 1, N L = IPVT(J) IF (WA2(L) .EQ. ZERO) GO TO 150 SUM = ZERO DO 140 I = 1, J SUM = SUM + FJAC(I,J)*(QTF(I)/FNORM) 140 CONTINUE GNORM = DMAX1(GNORM,DABS(SUM/WA2(L))) 150 CONTINUE 160 CONTINUE 170 CONTINUE C C TEST FOR CONVERGENCE OF THE GRADIENT NORM. C IF (GNORM .LE. GTOL) INFO = 4 IF (INFO .NE. 0) GO TO 300 C C RESCALE IF NECESSARY. C IF (MODE .EQ. 2) GO TO 190 DO 180 J = 1, N DIAG(J) = DMAX1(DIAG(J),WA2(J)) 180 CONTINUE 190 CONTINUE C C BEGINNING OF THE INNER LOOP. C 200 CONTINUE C C DETERMINE THE LEVENBERG-MARQUARDT PARAMETER. C CALL LMPAR(N,FJAC,LDFJAC,IPVT,DIAG,QTF,DELTA,PAR,WA1,WA2, * WA3,WA4) C C STORE THE DIRECTION P AND X + P. CALCULATE THE NORM OF P. C DO 210 J = 1, N WA1(J) = -WA1(J) WA2(J) = X(J) + WA1(J) WA3(J) = DIAG(J)*WA1(J) 210 CONTINUE PNORM = ENORM(N,WA3) C C ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND. C IF (ITER .EQ. 1) DELTA = DMIN1(DELTA,PNORM) C C EVALUATE THE FUNCTION AT X + P AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,WA2,WA4,FJAC,LDFJAC,IFLAG) NFEV = NFEV + 1 IF (IFLAG .LT. 0) GO TO 300 FNORM1 = ENORM(M,WA4) C C COMPUTE THE SCALED ACTUAL REDUCTION. C ACTRED = -ONE IF (P1*FNORM1 .LT. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2 C C COMPUTE THE SCALED PREDICTED REDUCTION AND C THE SCALED DIRECTIONAL DERIVATIVE. C DO 230 J = 1, N WA3(J) = ZERO L = IPVT(J) TEMP = WA1(L) DO 220 I = 1, J WA3(I) = WA3(I) + FJAC(I,J)*TEMP 220 CONTINUE 230 CONTINUE TEMP1 = ENORM(N,WA3)/FNORM TEMP2 = (DSQRT(PAR)*PNORM)/FNORM PRERED = TEMP1**2 + TEMP2**2/P5 DIRDER = -(TEMP1**2 + TEMP2**2) C C COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED C REDUCTION. C RATIO = ZERO IF (PRERED .NE. ZERO) RATIO = ACTRED/PRERED C C UPDATE THE STEP BOUND. C IF (RATIO .GT. P25) GO TO 240 IF (ACTRED .GE. ZERO) TEMP = P5 IF (ACTRED .LT. ZERO) * TEMP = P5*DIRDER/(DIRDER + P5*ACTRED) IF (P1*FNORM1 .GE. FNORM .OR. TEMP .LT. P1) TEMP = P1 DELTA = TEMP*DMIN1(DELTA,PNORM/P1) PAR = PAR/TEMP GO TO 260 240 CONTINUE IF (PAR .NE. ZERO .AND. RATIO .LT. P75) GO TO 250 DELTA = PNORM/P5 PAR = P5*PAR 250 CONTINUE 260 CONTINUE C C TEST FOR SUCCESSFUL ITERATION. C IF (RATIO .LT. P0001) GO TO 290 C C SUCCESSFUL ITERATION. UPDATE X, FVEC, AND THEIR NORMS. C DO 270 J = 1, N X(J) = WA2(J) WA2(J) = DIAG(J)*X(J) 270 CONTINUE DO 280 I = 1, M FVEC(I) = WA4(I) 280 CONTINUE XNORM = ENORM(N,WA2) FNORM = FNORM1 ITER = ITER + 1 290 CONTINUE C C TESTS FOR CONVERGENCE. C IF (DABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE) INFO = 1 IF (DELTA .LE. XTOL*XNORM) INFO = 2 IF (DABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE .AND. INFO .EQ. 2) INFO = 3 IF (INFO .NE. 0) GO TO 300 C C TESTS FOR TERMINATION AND STRINGENT TOLERANCES. C IF (NFEV .GE. MAXFEV) INFO = 5 IF (DABS(ACTRED) .LE. EPSMCH .AND. PRERED .LE. EPSMCH * .AND. P5*RATIO .LE. ONE) INFO = 6 IF (DELTA .LE. EPSMCH*XNORM) INFO = 7 IF (GNORM .LE. EPSMCH) INFO = 8 IF (INFO .NE. 0) GO TO 300 C C END OF THE INNER LOOP. REPEAT IF ITERATION UNSUCCESSFUL. C IF (RATIO .LT. P0001) GO TO 200 C C END OF THE OUTER LOOP. C GO TO 30 300 CONTINUE C C TERMINATION, EITHER NORMAL OR USER IMPOSED. C IF (IFLAG .LT. 0) INFO = IFLAG IFLAG = 0 IF (NPRINT .GT. 0) CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) RETURN C C LAST CARD OF SUBROUTINE LMDER. C END SUBROUTINE LMDER1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,IPVT,WA, * LWA) INTEGER M,N,LDFJAC,INFO,LWA INTEGER IPVT(N) DOUBLE PRECISION TOL DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN C ********** C C SUBROUTINE LMDER1 C C THE PURPOSE OF LMDER1 IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF THE C LEVENBERG-MARQUARDT ALGORITHM. THIS IS DONE BY USING THE MORE C GENERAL LEAST-SQUARES SOLVER LMDER. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS AND THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMDER1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL,INFO, C IPVT,WA,LWA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE JACOBIAN. FCN MUST C BE DECLARED IN AN EXTERNAL STATEMENT IN THE USER C CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) C INTEGER M,N,LDFJAC,IFLAG C DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. C IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND C RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMDER1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT M BY N ARRAY. THE UPPER N BY N SUBMATRIX C OF FJAC CONTAINS AN UPPER TRIANGULAR MATRIX R WITH C DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE SUCH THAT C C T T T C P *(JAC *JAC)*P = R *R, C C WHERE P IS A PERMUTATION MATRIX AND JAC IS THE FINAL C CALCULATED JACOBIAN. COLUMN J OF P IS COLUMN IPVT(J) C (SEE BELOW) OF THE IDENTITY MATRIX. THE LOWER TRAPEZOIDAL C PART OF FJAC CONTAINS INFORMATION GENERATED DURING C THE COMPUTATION OF R. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C TOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION OCCURS C WHEN THE ALGORITHM ESTIMATES EITHER THAT THE RELATIVE C ERROR IN THE SUM OF SQUARES IS AT MOST TOL OR THAT C THE RELATIVE ERROR BETWEEN X AND THE SOLUTION IS AT C MOST TOL. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C IN THE SUM OF SQUARES IS AT MOST TOL. C C INFO = 2 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 FVEC IS ORTHOGONAL TO THE COLUMNS OF THE C JACOBIAN TO MACHINE PRECISION. C C INFO = 5 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED 100*(N+1). C C INFO = 6 TOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 TOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH N. IPVT C DEFINES A PERMUTATION MATRIX P SUCH THAT JAC*P = Q*R, C WHERE JAC IS THE FINAL CALCULATED JACOBIAN, Q IS C ORTHOGONAL (NOT STORED), AND R IS UPPER TRIANGULAR C WITH DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C WA IS A WORK ARRAY OF LENGTH LWA. C C LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN 5*N+M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... LMDER C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER MAXFEV,MODE,NFEV,NJEV,NPRINT DOUBLE PRECISION FACTOR,FTOL,GTOL,XTOL,ZERO DATA FACTOR,ZERO /1.0D2,0.0D0/ INFO = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. LDFJAC .LT. M .OR. TOL .LT. ZERO * .OR. LWA .LT. 5*N + M) GO TO 10 C C CALL LMDER. C MAXFEV = 100*(N + 1) FTOL = TOL XTOL = TOL GTOL = ZERO MODE = 1 NPRINT = 0 CALL LMDER(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL,MAXFEV, * WA(1),MODE,FACTOR,NPRINT,INFO,NFEV,NJEV,IPVT,WA(N+1), * WA(2*N+1),WA(3*N+1),WA(4*N+1),WA(5*N+1)) IF (INFO .EQ. 8) INFO = 4 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE LMDER1. C END SUBROUTINE LMDIF(FCN,M,N,X,FVEC,FTOL,XTOL,GTOL,MAXFEV,EPSFCN, * DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,MAXFEV,MODE,NPRINT,INFO,NFEV,LDFJAC INTEGER IPVT(N) DOUBLE PRECISION FTOL,XTOL,GTOL,EPSFCN,FACTOR DOUBLE PRECISION X(N),FVEC(M),DIAG(N),FJAC(LDFJAC,N),QTF(N), * WA1(N),WA2(N),WA3(N),WA4(M) EXTERNAL FCN C ********** C C SUBROUTINE LMDIF C C THE PURPOSE OF LMDIF IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF C THE LEVENBERG-MARQUARDT ALGORITHM. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS. THE JACOBIAN IS C THEN CALCULATED BY A FORWARD-DIFFERENCE APPROXIMATION. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMDIF(FCN,M,N,X,FVEC,FTOL,XTOL,GTOL,MAXFEV,EPSFCN, C DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,FJAC, C LDFJAC,IPVT,QTF,WA1,WA2,WA3,WA4) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,IFLAG) C INTEGER M,N,IFLAG C DOUBLE PRECISION X(N),FVEC(M) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMDIF. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN BOTH THE ACTUAL AND PREDICTED RELATIVE C REDUCTIONS IN THE SUM OF SQUARES ARE AT MOST FTOL. C THEREFORE, FTOL MEASURES THE RELATIVE ERROR DESIRED C IN THE SUM OF SQUARES. C C XTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE C ITERATES IS AT MOST XTOL. THEREFORE, XTOL MEASURES THE C RELATIVE ERROR DESIRED IN THE APPROXIMATE SOLUTION. C C GTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE COSINE OF THE ANGLE BETWEEN FVEC AND C ANY COLUMN OF THE JACOBIAN IS AT MOST GTOL IN ABSOLUTE C VALUE. THEREFORE, GTOL MEASURES THE ORTHOGONALITY C DESIRED BETWEEN THE FUNCTION VECTOR AND THE COLUMNS C OF THE JACOBIAN. C C MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION C OCCURS WHEN THE NUMBER OF CALLS TO FCN IS AT LEAST C MAXFEV BY THE END OF AN ITERATION. C C EPSFCN IS AN INPUT VARIABLE USED IN DETERMINING A SUITABLE C STEP LENGTH FOR THE FORWARD-DIFFERENCE APPROXIMATION. THIS C APPROXIMATION ASSUMES THAT THE RELATIVE ERRORS IN THE C FUNCTIONS ARE OF THE ORDER OF EPSFCN. IF EPSFCN IS LESS C THAN THE MACHINE PRECISION, IT IS ASSUMED THAT THE RELATIVE C ERRORS IN THE FUNCTIONS ARE OF THE ORDER OF THE MACHINE C PRECISION. C C DIAG IS AN ARRAY OF LENGTH N. IF MODE = 1 (SEE C BELOW), DIAG IS INTERNALLY SET. IF MODE = 2, DIAG C MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS C MULTIPLICATIVE SCALE FACTORS FOR THE VARIABLES. C C MODE IS AN INTEGER INPUT VARIABLE. IF MODE = 1, THE C VARIABLES WILL BE SCALED INTERNALLY. IF MODE = 2, C THE SCALING IS SPECIFIED BY THE INPUT DIAG. OTHER C VALUES OF MODE ARE EQUIVALENT TO MODE = 1. C C FACTOR IS A POSITIVE INPUT VARIABLE USED IN DETERMINING THE C INITIAL STEP BOUND. THIS BOUND IS SET TO THE PRODUCT OF C FACTOR AND THE EUCLIDEAN NORM OF DIAG*X IF NONZERO, OR ELSE C TO FACTOR ITSELF. IN MOST CASES FACTOR SHOULD LIE IN THE C INTERVAL (.1,100.). 100. IS A GENERALLY RECOMMENDED VALUE. C C NPRINT IS AN INTEGER INPUT VARIABLE THAT ENABLES CONTROLLED C PRINTING OF ITERATES IF IT IS POSITIVE. IN THIS CASE, C FCN IS CALLED WITH IFLAG = 0 AT THE BEGINNING OF THE FIRST C ITERATION AND EVERY NPRINT ITERATIONS THEREAFTER AND C IMMEDIATELY PRIOR TO RETURN, WITH X AND FVEC AVAILABLE C FOR PRINTING. IF NPRINT IS NOT POSITIVE, NO SPECIAL CALLS C OF FCN WITH IFLAG = 0 ARE MADE. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 BOTH ACTUAL AND PREDICTED RELATIVE REDUCTIONS C IN THE SUM OF SQUARES ARE AT MOST FTOL. C C INFO = 2 RELATIVE ERROR BETWEEN TWO CONSECUTIVE ITERATES C IS AT MOST XTOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 THE COSINE OF THE ANGLE BETWEEN FVEC AND ANY C COLUMN OF THE JACOBIAN IS AT MOST GTOL IN C ABSOLUTE VALUE. C C INFO = 5 NUMBER OF CALLS TO FCN HAS REACHED OR C EXCEEDED MAXFEV. C C INFO = 6 FTOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 XTOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 8 GTOL IS TOO SMALL. FVEC IS ORTHOGONAL TO THE C COLUMNS OF THE JACOBIAN TO MACHINE PRECISION. C C NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN. C C FJAC IS AN OUTPUT M BY N ARRAY. THE UPPER N BY N SUBMATRIX C OF FJAC CONTAINS AN UPPER TRIANGULAR MATRIX R WITH C DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE SUCH THAT C C T T T C P *(JAC *JAC)*P = R *R, C C WHERE P IS A PERMUTATION MATRIX AND JAC IS THE FINAL C CALCULATED JACOBIAN. COLUMN J OF P IS COLUMN IPVT(J) C (SEE BELOW) OF THE IDENTITY MATRIX. THE LOWER TRAPEZOIDAL C PART OF FJAC CONTAINS INFORMATION GENERATED DURING C THE COMPUTATION OF R. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH N. IPVT C DEFINES A PERMUTATION MATRIX P SUCH THAT JAC*P = Q*R, C WHERE JAC IS THE FINAL CALCULATED JACOBIAN, Q IS C ORTHOGONAL (NOT STORED), AND R IS UPPER TRIANGULAR C WITH DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C QTF IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FIRST N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*FVEC. C C WA1, WA2, AND WA3 ARE WORK ARRAYS OF LENGTH N. C C WA4 IS A WORK ARRAY OF LENGTH M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DPMPAR,ENORM,FDJAC2,LMPAR,QRFAC C C FORTRAN-SUPPLIED ... DABS,DMAX1,DMIN1,DSQRT,MOD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IFLAG,ITER,J,L DOUBLE PRECISION ACTRED,DELTA,DIRDER,EPSMCH,FNORM,FNORM1,GNORM, * ONE,PAR,PNORM,PRERED,P1,P5,P25,P75,P0001,RATIO, * SUM,TEMP,TEMP1,TEMP2,XNORM,ZERO DOUBLE PRECISION DPMPAR,ENORM DATA ONE,P1,P5,P25,P75,P0001,ZERO * /1.0D0,1.0D-1,5.0D-1,2.5D-1,7.5D-1,1.0D-4,0.0D0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = DPMPAR(1) C INFO = 0 IFLAG = 0 NFEV = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. LDFJAC .LT. M * .OR. FTOL .LT. ZERO .OR. XTOL .LT. ZERO .OR. GTOL .LT. ZERO * .OR. MAXFEV .LE. 0 .OR. FACTOR .LE. ZERO) GO TO 300 IF (MODE .NE. 2) GO TO 20 DO 10 J = 1, N IF (DIAG(J) .LE. ZERO) GO TO 300 10 CONTINUE 20 CONTINUE C C EVALUATE THE FUNCTION AT THE STARTING POINT C AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,X,FVEC,IFLAG) NFEV = 1 IF (IFLAG .LT. 0) GO TO 300 FNORM = ENORM(M,FVEC) C C INITIALIZE LEVENBERG-MARQUARDT PARAMETER AND ITERATION COUNTER. C PAR = ZERO ITER = 1 C C BEGINNING OF THE OUTER LOOP. C 30 CONTINUE C C CALCULATE THE JACOBIAN MATRIX. C IFLAG = 2 CALL FDJAC2(FCN,M,N,X,FVEC,FJAC,LDFJAC,IFLAG,EPSFCN,WA4) NFEV = NFEV + N IF (IFLAG .LT. 0) GO TO 300 C C IF REQUESTED, CALL FCN TO ENABLE PRINTING OF ITERATES. C IF (NPRINT .LE. 0) GO TO 40 IFLAG = 0 IF (MOD(ITER-1,NPRINT) .EQ. 0) CALL FCN(M,N,X,FVEC,IFLAG) IF (IFLAG .LT. 0) GO TO 300 40 CONTINUE C C COMPUTE THE QR FACTORIZATION OF THE JACOBIAN. C CALL QRFAC(M,N,FJAC,LDFJAC,.TRUE.,IPVT,N,WA1,WA2,WA3) C C ON THE FIRST ITERATION AND IF MODE IS 1, SCALE ACCORDING C TO THE NORMS OF THE COLUMNS OF THE INITIAL JACOBIAN. C IF (ITER .NE. 1) GO TO 80 IF (MODE .EQ. 2) GO TO 60 DO 50 J = 1, N DIAG(J) = WA2(J) IF (WA2(J) .EQ. ZERO) DIAG(J) = ONE 50 CONTINUE 60 CONTINUE C C ON THE FIRST ITERATION, CALCULATE THE NORM OF THE SCALED X C AND INITIALIZE THE STEP BOUND DELTA. C DO 70 J = 1, N WA3(J) = DIAG(J)*X(J) 70 CONTINUE XNORM = ENORM(N,WA3) DELTA = FACTOR*XNORM IF (DELTA .EQ. ZERO) DELTA = FACTOR 80 CONTINUE C C FORM (Q TRANSPOSE)*FVEC AND STORE THE FIRST N COMPONENTS IN C QTF. C DO 90 I = 1, M WA4(I) = FVEC(I) 90 CONTINUE DO 130 J = 1, N IF (FJAC(J,J) .EQ. ZERO) GO TO 120 SUM = ZERO DO 100 I = J, M SUM = SUM + FJAC(I,J)*WA4(I) 100 CONTINUE TEMP = -SUM/FJAC(J,J) DO 110 I = J, M WA4(I) = WA4(I) + FJAC(I,J)*TEMP 110 CONTINUE 120 CONTINUE FJAC(J,J) = WA1(J) QTF(J) = WA4(J) 130 CONTINUE C C COMPUTE THE NORM OF THE SCALED GRADIENT. C GNORM = ZERO IF (FNORM .EQ. ZERO) GO TO 170 DO 160 J = 1, N L = IPVT(J) IF (WA2(L) .EQ. ZERO) GO TO 150 SUM = ZERO DO 140 I = 1, J SUM = SUM + FJAC(I,J)*(QTF(I)/FNORM) 140 CONTINUE GNORM = DMAX1(GNORM,DABS(SUM/WA2(L))) 150 CONTINUE 160 CONTINUE 170 CONTINUE C C TEST FOR CONVERGENCE OF THE GRADIENT NORM. C IF (GNORM .LE. GTOL) INFO = 4 IF (INFO .NE. 0) GO TO 300 C C RESCALE IF NECESSARY. C IF (MODE .EQ. 2) GO TO 190 DO 180 J = 1, N DIAG(J) = DMAX1(DIAG(J),WA2(J)) 180 CONTINUE 190 CONTINUE C C BEGINNING OF THE INNER LOOP. C 200 CONTINUE C C DETERMINE THE LEVENBERG-MARQUARDT PARAMETER. C CALL LMPAR(N,FJAC,LDFJAC,IPVT,DIAG,QTF,DELTA,PAR,WA1,WA2, * WA3,WA4) C C STORE THE DIRECTION P AND X + P. CALCULATE THE NORM OF P. C DO 210 J = 1, N WA1(J) = -WA1(J) WA2(J) = X(J) + WA1(J) WA3(J) = DIAG(J)*WA1(J) 210 CONTINUE PNORM = ENORM(N,WA3) C C ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND. C IF (ITER .EQ. 1) DELTA = DMIN1(DELTA,PNORM) C C EVALUATE THE FUNCTION AT X + P AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,WA2,WA4,IFLAG) NFEV = NFEV + 1 IF (IFLAG .LT. 0) GO TO 300 FNORM1 = ENORM(M,WA4) C C COMPUTE THE SCALED ACTUAL REDUCTION. C ACTRED = -ONE IF (P1*FNORM1 .LT. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2 C C COMPUTE THE SCALED PREDICTED REDUCTION AND C THE SCALED DIRECTIONAL DERIVATIVE. C DO 230 J = 1, N WA3(J) = ZERO L = IPVT(J) TEMP = WA1(L) DO 220 I = 1, J WA3(I) = WA3(I) + FJAC(I,J)*TEMP 220 CONTINUE 230 CONTINUE TEMP1 = ENORM(N,WA3)/FNORM TEMP2 = (DSQRT(PAR)*PNORM)/FNORM PRERED = TEMP1**2 + TEMP2**2/P5 DIRDER = -(TEMP1**2 + TEMP2**2) C C COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED C REDUCTION. C RATIO = ZERO IF (PRERED .NE. ZERO) RATIO = ACTRED/PRERED C C UPDATE THE STEP BOUND. C IF (RATIO .GT. P25) GO TO 240 IF (ACTRED .GE. ZERO) TEMP = P5 IF (ACTRED .LT. ZERO) * TEMP = P5*DIRDER/(DIRDER + P5*ACTRED) IF (P1*FNORM1 .GE. FNORM .OR. TEMP .LT. P1) TEMP = P1 DELTA = TEMP*DMIN1(DELTA,PNORM/P1) PAR = PAR/TEMP GO TO 260 240 CONTINUE IF (PAR .NE. ZERO .AND. RATIO .LT. P75) GO TO 250 DELTA = PNORM/P5 PAR = P5*PAR 250 CONTINUE 260 CONTINUE C C TEST FOR SUCCESSFUL ITERATION. C IF (RATIO .LT. P0001) GO TO 290 C C SUCCESSFUL ITERATION. UPDATE X, FVEC, AND THEIR NORMS. C DO 270 J = 1, N X(J) = WA2(J) WA2(J) = DIAG(J)*X(J) 270 CONTINUE DO 280 I = 1, M FVEC(I) = WA4(I) 280 CONTINUE XNORM = ENORM(N,WA2) FNORM = FNORM1 ITER = ITER + 1 290 CONTINUE C C TESTS FOR CONVERGENCE. C IF (DABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE) INFO = 1 IF (DELTA .LE. XTOL*XNORM) INFO = 2 IF (DABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE .AND. INFO .EQ. 2) INFO = 3 IF (INFO .NE. 0) GO TO 300 C C TESTS FOR TERMINATION AND STRINGENT TOLERANCES. C IF (NFEV .GE. MAXFEV) INFO = 5 IF (DABS(ACTRED) .LE. EPSMCH .AND. PRERED .LE. EPSMCH * .AND. P5*RATIO .LE. ONE) INFO = 6 IF (DELTA .LE. EPSMCH*XNORM) INFO = 7 IF (GNORM .LE. EPSMCH) INFO = 8 IF (INFO .NE. 0) GO TO 300 C C END OF THE INNER LOOP. REPEAT IF ITERATION UNSUCCESSFUL. C IF (RATIO .LT. P0001) GO TO 200 C C END OF THE OUTER LOOP. C GO TO 30 300 CONTINUE C C TERMINATION, EITHER NORMAL OR USER IMPOSED. C IF (IFLAG .LT. 0) INFO = IFLAG IFLAG = 0 IF (NPRINT .GT. 0) CALL FCN(M,N,X,FVEC,IFLAG) RETURN C C LAST CARD OF SUBROUTINE LMDIF. C END SUBROUTINE LMDIF1(FCN,M,N,X,FVEC,TOL,INFO,IWA,WA,LWA) INTEGER M,N,INFO,LWA INTEGER IWA(N) DOUBLE PRECISION TOL DOUBLE PRECISION X(N),FVEC(M),WA(LWA) EXTERNAL FCN C ********** C C SUBROUTINE LMDIF1 C C THE PURPOSE OF LMDIF1 IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF THE C LEVENBERG-MARQUARDT ALGORITHM. THIS IS DONE BY USING THE MORE C GENERAL LEAST-SQUARES SOLVER LMDIF. THE USER MUST PROVIDE A C SUBROUTINE WHICH CALCULATES THE FUNCTIONS. THE JACOBIAN IS C THEN CALCULATED BY A FORWARD-DIFFERENCE APPROXIMATION. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMDIF1(FCN,M,N,X,FVEC,TOL,INFO,IWA,WA,LWA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS. FCN MUST BE DECLARED C IN AN EXTERNAL STATEMENT IN THE USER CALLING C PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,IFLAG) C INTEGER M,N,IFLAG C DOUBLE PRECISION X(N),FVEC(M) C ---------- C CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMDIF1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C TOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION OCCURS C WHEN THE ALGORITHM ESTIMATES EITHER THAT THE RELATIVE C ERROR IN THE SUM OF SQUARES IS AT MOST TOL OR THAT C THE RELATIVE ERROR BETWEEN X AND THE SOLUTION IS AT C MOST TOL. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C IN THE SUM OF SQUARES IS AT MOST TOL. C C INFO = 2 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 FVEC IS ORTHOGONAL TO THE COLUMNS OF THE C JACOBIAN TO MACHINE PRECISION. C C INFO = 5 NUMBER OF CALLS TO FCN HAS REACHED OR C EXCEEDED 200*(N+1). C C INFO = 6 TOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 TOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C IWA IS AN INTEGER WORK ARRAY OF LENGTH N. C C WA IS A WORK ARRAY OF LENGTH LWA. C C LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C M*N+5*N+M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... LMDIF C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER MAXFEV,MODE,MP5N,NFEV,NPRINT DOUBLE PRECISION EPSFCN,FACTOR,FTOL,GTOL,XTOL,ZERO DATA FACTOR,ZERO /1.0D2,0.0D0/ INFO = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. TOL .LT. ZERO * .OR. LWA .LT. M*N + 5*N + M) GO TO 10 C C CALL LMDIF. C MAXFEV = 200*(N + 1) FTOL = TOL XTOL = TOL GTOL = ZERO EPSFCN = ZERO MODE = 1 NPRINT = 0 MP5N = M + 5*N CALL LMDIF(FCN,M,N,X,FVEC,FTOL,XTOL,GTOL,MAXFEV,EPSFCN,WA(1), * MODE,FACTOR,NPRINT,INFO,NFEV,WA(MP5N+1),M,IWA, * WA(N+1),WA(2*N+1),WA(3*N+1),WA(4*N+1),WA(5*N+1)) IF (INFO .EQ. 8) INFO = 4 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE LMDIF1. C END SUBROUTINE LMPAR(N,R,LDR,IPVT,DIAG,QTB,DELTA,PAR,X,SDIAG,WA1, * WA2) INTEGER N,LDR INTEGER IPVT(N) DOUBLE PRECISION DELTA,PAR DOUBLE PRECISION R(LDR,N),DIAG(N),QTB(N),X(N),SDIAG(N),WA1(N), * WA2(N) C ********** C C SUBROUTINE LMPAR C C GIVEN AN M BY N MATRIX A, AN N BY N NONSINGULAR DIAGONAL C MATRIX D, AN M-VECTOR B, AND A POSITIVE NUMBER DELTA, C THE PROBLEM IS TO DETERMINE A VALUE FOR THE PARAMETER C PAR SUCH THAT IF X SOLVES THE SYSTEM C C A*X = B , SQRT(PAR)*D*X = 0 , C C IN THE LEAST SQUARES SENSE, AND DXNORM IS THE EUCLIDEAN C NORM OF D*X, THEN EITHER PAR IS ZERO AND C C (DXNORM-DELTA) .LE. 0.1*DELTA , C C OR PAR IS POSITIVE AND C C ABS(DXNORM-DELTA) .LE. 0.1*DELTA . C C THIS SUBROUTINE COMPLETES THE SOLUTION OF THE PROBLEM C IF IT IS PROVIDED WITH THE NECESSARY INFORMATION FROM THE C QR FACTORIZATION, WITH COLUMN PIVOTING, OF A. THAT IS, IF C A*P = Q*R, WHERE P IS A PERMUTATION MATRIX, Q HAS ORTHOGONAL C COLUMNS, AND R IS AN UPPER TRIANGULAR MATRIX WITH DIAGONAL C ELEMENTS OF NONINCREASING MAGNITUDE, THEN LMPAR EXPECTS C THE FULL UPPER TRIANGLE OF R, THE PERMUTATION MATRIX P, C AND THE FIRST N COMPONENTS OF (Q TRANSPOSE)*B. ON OUTPUT C LMPAR ALSO PROVIDES AN UPPER TRIANGULAR MATRIX S SUCH THAT C C T T T C P *(A *A + PAR*D*D)*P = S *S . C C S IS EMPLOYED WITHIN LMPAR AND MAY BE OF SEPARATE INTEREST. C C ONLY A FEW ITERATIONS ARE GENERALLY NEEDED FOR CONVERGENCE C OF THE ALGORITHM. IF, HOWEVER, THE LIMIT OF 10 ITERATIONS C IS REACHED, THEN THE OUTPUT PAR WILL CONTAIN THE BEST C VALUE OBTAINED SO FAR. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMPAR(N,R,LDR,IPVT,DIAG,QTB,DELTA,PAR,X,SDIAG, C WA1,WA2) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE ORDER OF R. C C R IS AN N BY N ARRAY. ON INPUT THE FULL UPPER TRIANGLE C MUST CONTAIN THE FULL UPPER TRIANGLE OF THE MATRIX R. C ON OUTPUT THE FULL UPPER TRIANGLE IS UNALTERED, AND THE C STRICT LOWER TRIANGLE CONTAINS THE STRICT UPPER TRIANGLE C (TRANSPOSED) OF THE UPPER TRIANGULAR MATRIX S. C C LDR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY R. C C IPVT IS AN INTEGER INPUT ARRAY OF LENGTH N WHICH DEFINES THE C PERMUTATION MATRIX P SUCH THAT A*P = Q*R. COLUMN J OF P C IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C DIAG IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE C DIAGONAL ELEMENTS OF THE MATRIX D. C C QTB IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE FIRST C N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*B. C C DELTA IS A POSITIVE INPUT VARIABLE WHICH SPECIFIES AN UPPER C BOUND ON THE EUCLIDEAN NORM OF D*X. C C PAR IS A NONNEGATIVE VARIABLE. ON INPUT PAR CONTAINS AN C INITIAL ESTIMATE OF THE LEVENBERG-MARQUARDT PARAMETER. C ON OUTPUT PAR CONTAINS THE FINAL ESTIMATE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE LEAST C SQUARES SOLUTION OF THE SYSTEM A*X = B, SQRT(PAR)*D*X = 0, C FOR THE OUTPUT PAR. C C SDIAG IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C DIAGONAL ELEMENTS OF THE UPPER TRIANGULAR MATRIX S. C C WA1 AND WA2 ARE WORK ARRAYS OF LENGTH N. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... DPMPAR,ENORM,QRSOLV C C FORTRAN-SUPPLIED ... DABS,DMAX1,DMIN1,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,ITER,J,JM1,JP1,K,L,NSING DOUBLE PRECISION DXNORM,DWARF,FP,GNORM,PARC,PARL,PARU,P1,P001, * SUM,TEMP,ZERO DOUBLE PRECISION DPMPAR,ENORM DATA P1,P001,ZERO /1.0D-1,1.0D-3,0.0D0/ C C DWARF IS THE SMALLEST POSITIVE MAGNITUDE. C DWARF = DPMPAR(2) C C COMPUTE AND STORE IN X THE GAUSS-NEWTON DIRECTION. IF THE C JACOBIAN IS RANK-DEFICIENT, OBTAIN A LEAST SQUARES SOLUTION. C NSING = N DO 10 J = 1, N WA1(J) = QTB(J) IF (R(J,J) .EQ. ZERO .AND. NSING .EQ. N) NSING = J - 1 IF (NSING .LT. N) WA1(J) = ZERO 10 CONTINUE IF (NSING .LT. 1) GO TO 50 DO 40 K = 1, NSING J = NSING - K + 1 WA1(J) = WA1(J)/R(J,J) TEMP = WA1(J) JM1 = J - 1 IF (JM1 .LT. 1) GO TO 30 DO 20 I = 1, JM1 WA1(I) = WA1(I) - R(I,J)*TEMP 20 CONTINUE 30 CONTINUE 40 CONTINUE 50 CONTINUE DO 60 J = 1, N L = IPVT(J) X(L) = WA1(J) 60 CONTINUE C C INITIALIZE THE ITERATION COUNTER. C EVALUATE THE FUNCTION AT THE ORIGIN, AND TEST C FOR ACCEPTANCE OF THE GAUSS-NEWTON DIRECTION. C ITER = 0 DO 70 J = 1, N WA2(J) = DIAG(J)*X(J) 70 CONTINUE DXNORM = ENORM(N,WA2) FP = DXNORM - DELTA IF (FP .LE. P1*DELTA) GO TO 220 C C IF THE JACOBIAN IS NOT RANK DEFICIENT, THE NEWTON C STEP PROVIDES A LOWER BOUND, PARL, FOR THE ZERO OF C THE FUNCTION. OTHERWISE SET THIS BOUND TO ZERO. C PARL = ZERO IF (NSING .LT. N) GO TO 120 DO 80 J = 1, N L = IPVT(J) WA1(J) = DIAG(L)*(WA2(L)/DXNORM) 80 CONTINUE DO 110 J = 1, N SUM = ZERO JM1 = J - 1 IF (JM1 .LT. 1) GO TO 100 DO 90 I = 1, JM1 SUM = SUM + R(I,J)*WA1(I) 90 CONTINUE 100 CONTINUE WA1(J) = (WA1(J) - SUM)/R(J,J) 110 CONTINUE TEMP = ENORM(N,WA1) PARL = ((FP/DELTA)/TEMP)/TEMP 120 CONTINUE C C CALCULATE AN UPPER BOUND, PARU, FOR THE ZERO OF THE FUNCTION. C DO 140 J = 1, N SUM = ZERO DO 130 I = 1, J SUM = SUM + R(I,J)*QTB(I) 130 CONTINUE L = IPVT(J) WA1(J) = SUM/DIAG(L) 140 CONTINUE GNORM = ENORM(N,WA1) PARU = GNORM/DELTA IF (PARU .EQ. ZERO) PARU = DWARF/DMIN1(DELTA,P1) C C IF THE INPUT PAR LIES OUTSIDE OF THE INTERVAL (PARL,PARU), C SET PAR TO THE CLOSER ENDPOINT. C PAR = DMAX1(PAR,PARL) PAR = DMIN1(PAR,PARU) IF (PAR .EQ. ZERO) PAR = GNORM/DXNORM C C BEGINNING OF AN ITERATION. C 150 CONTINUE ITER = ITER + 1 C C EVALUATE THE FUNCTION AT THE CURRENT VALUE OF PAR. C IF (PAR .EQ. ZERO) PAR = DMAX1(DWARF,P001*PARU) TEMP = DSQRT(PAR) DO 160 J = 1, N WA1(J) = TEMP*DIAG(J) 160 CONTINUE CALL QRSOLV(N,R,LDR,IPVT,WA1,QTB,X,SDIAG,WA2) DO 170 J = 1, N WA2(J) = DIAG(J)*X(J) 170 CONTINUE DXNORM = ENORM(N,WA2) TEMP = FP FP = DXNORM - DELTA C C IF THE FUNCTION IS SMALL ENOUGH, ACCEPT THE CURRENT VALUE C OF PAR. ALSO TEST FOR THE EXCEPTIONAL CASES WHERE PARL C IS ZERO OR THE NUMBER OF ITERATIONS HAS REACHED 10. C IF (DABS(FP) .LE. P1*DELTA * .OR. PARL .EQ. ZERO .AND. FP .LE. TEMP * .AND. TEMP .LT. ZERO .OR. ITER .EQ. 10) GO TO 220 C C COMPUTE THE NEWTON CORRECTION. C DO 180 J = 1, N L = IPVT(J) WA1(J) = DIAG(L)*(WA2(L)/DXNORM) 180 CONTINUE DO 210 J = 1, N WA1(J) = WA1(J)/SDIAG(J) TEMP = WA1(J) JP1 = J + 1 IF (N .LT. JP1) GO TO 200 DO 190 I = JP1, N WA1(I) = WA1(I) - R(I,J)*TEMP 190 CONTINUE 200 CONTINUE 210 CONTINUE TEMP = ENORM(N,WA1) PARC = ((FP/DELTA)/TEMP)/TEMP C C DEPENDING ON THE SIGN OF THE FUNCTION, UPDATE PARL OR PARU. C IF (FP .GT. ZERO) PARL = DMAX1(PARL,PAR) IF (FP .LT. ZERO) PARU = DMIN1(PARU,PAR) C C COMPUTE AN IMPROVED ESTIMATE FOR PAR. C PAR = DMAX1(PARL,PAR+PARC) C C END OF AN ITERATION. C GO TO 150 220 CONTINUE C C TERMINATION. C IF (ITER .EQ. 0) PAR = ZERO RETURN C C LAST CARD OF SUBROUTINE LMPAR. C END SUBROUTINE LMSTR(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV INTEGER IPVT(N) LOGICAL SING DOUBLE PRECISION FTOL,XTOL,GTOL,FACTOR DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N),DIAG(N),QTF(N), * WA1(N),WA2(N),WA3(N),WA4(M) C ********** C C SUBROUTINE LMSTR C C THE PURPOSE OF LMSTR IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF C THE LEVENBERG-MARQUARDT ALGORITHM WHICH USES MINIMAL STORAGE. C THE USER MUST PROVIDE A SUBROUTINE WHICH CALCULATES THE C FUNCTIONS AND THE ROWS OF THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMSTR(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, C MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV, C NJEV,IPVT,QTF,WA1,WA2,WA3,WA4) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE ROWS OF THE JACOBIAN. C FCN MUST BE DECLARED IN AN EXTERNAL STATEMENT IN THE C USER CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) C INTEGER M,N,IFLAG C DOUBLE PRECISION X(N),FVEC(M),FJROW(N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C IF IFLAG = I CALCULATE THE (I-1)-ST ROW OF THE C JACOBIAN AT X AND RETURN THIS VECTOR IN FJROW. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMSTR. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT N BY N ARRAY. THE UPPER TRIANGLE OF FJAC C CONTAINS AN UPPER TRIANGULAR MATRIX R SUCH THAT C C T T T C P *(JAC *JAC)*P = R *R, C C WHERE P IS A PERMUTATION MATRIX AND JAC IS THE FINAL C CALCULATED JACOBIAN. COLUMN J OF P IS COLUMN IPVT(J) C (SEE BELOW) OF THE IDENTITY MATRIX. THE LOWER TRIANGULAR C PART OF FJAC CONTAINS INFORMATION GENERATED DURING C THE COMPUTATION OF R. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C FTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN BOTH THE ACTUAL AND PREDICTED RELATIVE C REDUCTIONS IN THE SUM OF SQUARES ARE AT MOST FTOL. C THEREFORE, FTOL MEASURES THE RELATIVE ERROR DESIRED C IN THE SUM OF SQUARES. C C XTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE RELATIVE ERROR BETWEEN TWO CONSECUTIVE C ITERATES IS AT MOST XTOL. THEREFORE, XTOL MEASURES THE C RELATIVE ERROR DESIRED IN THE APPROXIMATE SOLUTION. C C GTOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION C OCCURS WHEN THE COSINE OF THE ANGLE BETWEEN FVEC AND C ANY COLUMN OF THE JACOBIAN IS AT MOST GTOL IN ABSOLUTE C VALUE. THEREFORE, GTOL MEASURES THE ORTHOGONALITY C DESIRED BETWEEN THE FUNCTION VECTOR AND THE COLUMNS C OF THE JACOBIAN. C C MAXFEV IS A POSITIVE INTEGER INPUT VARIABLE. TERMINATION C OCCURS WHEN THE NUMBER OF CALLS TO FCN WITH IFLAG = 1 C HAS REACHED MAXFEV. C C DIAG IS AN ARRAY OF LENGTH N. IF MODE = 1 (SEE C BELOW), DIAG IS INTERNALLY SET. IF MODE = 2, DIAG C MUST CONTAIN POSITIVE ENTRIES THAT SERVE AS C MULTIPLICATIVE SCALE FACTORS FOR THE VARIABLES. C C MODE IS AN INTEGER INPUT VARIABLE. IF MODE = 1, THE C VARIABLES WILL BE SCALED INTERNALLY. IF MODE = 2, C THE SCALING IS SPECIFIED BY THE INPUT DIAG. OTHER C VALUES OF MODE ARE EQUIVALENT TO MODE = 1. C C FACTOR IS A POSITIVE INPUT VARIABLE USED IN DETERMINING THE C INITIAL STEP BOUND. THIS BOUND IS SET TO THE PRODUCT OF C FACTOR AND THE EUCLIDEAN NORM OF DIAG*X IF NONZERO, OR ELSE C TO FACTOR ITSELF. IN MOST CASES FACTOR SHOULD LIE IN THE C INTERVAL (.1,100.). 100. IS A GENERALLY RECOMMENDED VALUE. C C NPRINT IS AN INTEGER INPUT VARIABLE THAT ENABLES CONTROLLED C PRINTING OF ITERATES IF IT IS POSITIVE. IN THIS CASE, C FCN IS CALLED WITH IFLAG = 0 AT THE BEGINNING OF THE FIRST C ITERATION AND EVERY NPRINT ITERATIONS THEREAFTER AND C IMMEDIATELY PRIOR TO RETURN, WITH X AND FVEC AVAILABLE C FOR PRINTING. IF NPRINT IS NOT POSITIVE, NO SPECIAL CALLS C OF FCN WITH IFLAG = 0 ARE MADE. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 BOTH ACTUAL AND PREDICTED RELATIVE REDUCTIONS C IN THE SUM OF SQUARES ARE AT MOST FTOL. C C INFO = 2 RELATIVE ERROR BETWEEN TWO CONSECUTIVE ITERATES C IS AT MOST XTOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 THE COSINE OF THE ANGLE BETWEEN FVEC AND ANY C COLUMN OF THE JACOBIAN IS AT MOST GTOL IN C ABSOLUTE VALUE. C C INFO = 5 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED MAXFEV. C C INFO = 6 FTOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 XTOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C INFO = 8 GTOL IS TOO SMALL. FVEC IS ORTHOGONAL TO THE C COLUMNS OF THE JACOBIAN TO MACHINE PRECISION. C C NFEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 1. C C NJEV IS AN INTEGER OUTPUT VARIABLE SET TO THE NUMBER OF C CALLS TO FCN WITH IFLAG = 2. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH N. IPVT C DEFINES A PERMUTATION MATRIX P SUCH THAT JAC*P = Q*R, C WHERE JAC IS THE FINAL CALCULATED JACOBIAN, Q IS C ORTHOGONAL (NOT STORED), AND R IS UPPER TRIANGULAR. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C QTF IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS C THE FIRST N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*FVEC. C C WA1, WA2, AND WA3 ARE WORK ARRAYS OF LENGTH N. C C WA4 IS A WORK ARRAY OF LENGTH M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DPMPAR,ENORM,LMPAR,QRFAC,RWUPDT C C FORTRAN-SUPPLIED ... DABS,DMAX1,DMIN1,DSQRT,MOD C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, DUDLEY V. GOETSCHEL, KENNETH E. HILLSTROM, C JORGE J. MORE C C ********** INTEGER I,IFLAG,ITER,J,L DOUBLE PRECISION ACTRED,DELTA,DIRDER,EPSMCH,FNORM,FNORM1,GNORM, * ONE,PAR,PNORM,PRERED,P1,P5,P25,P75,P0001,RATIO, * SUM,TEMP,TEMP1,TEMP2,XNORM,ZERO DOUBLE PRECISION DPMPAR,ENORM DATA ONE,P1,P5,P25,P75,P0001,ZERO * /1.0D0,1.0D-1,5.0D-1,2.5D-1,7.5D-1,1.0D-4,0.0D0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = DPMPAR(1) C INFO = 0 IFLAG = 0 NFEV = 0 NJEV = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. LDFJAC .LT. N * .OR. FTOL .LT. ZERO .OR. XTOL .LT. ZERO .OR. GTOL .LT. ZERO * .OR. MAXFEV .LE. 0 .OR. FACTOR .LE. ZERO) GO TO 340 IF (MODE .NE. 2) GO TO 20 DO 10 J = 1, N IF (DIAG(J) .LE. ZERO) GO TO 340 10 CONTINUE 20 CONTINUE C C EVALUATE THE FUNCTION AT THE STARTING POINT C AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,X,FVEC,WA3,IFLAG) NFEV = 1 IF (IFLAG .LT. 0) GO TO 340 FNORM = ENORM(M,FVEC) C C INITIALIZE LEVENBERG-MARQUARDT PARAMETER AND ITERATION COUNTER. C PAR = ZERO ITER = 1 C C BEGINNING OF THE OUTER LOOP. C 30 CONTINUE C C IF REQUESTED, CALL FCN TO ENABLE PRINTING OF ITERATES. C IF (NPRINT .LE. 0) GO TO 40 IFLAG = 0 IF (MOD(ITER-1,NPRINT) .EQ. 0) CALL FCN(M,N,X,FVEC,WA3,IFLAG) IF (IFLAG .LT. 0) GO TO 340 40 CONTINUE C C COMPUTE THE QR FACTORIZATION OF THE JACOBIAN MATRIX C CALCULATED ONE ROW AT A TIME, WHILE SIMULTANEOUSLY C FORMING (Q TRANSPOSE)*FVEC AND STORING THE FIRST C N COMPONENTS IN QTF. C DO 60 J = 1, N QTF(J) = ZERO DO 50 I = 1, N FJAC(I,J) = ZERO 50 CONTINUE 60 CONTINUE IFLAG = 2 DO 70 I = 1, M CALL FCN(M,N,X,FVEC,WA3,IFLAG) IF (IFLAG .LT. 0) GO TO 340 TEMP = FVEC(I) CALL RWUPDT(N,FJAC,LDFJAC,WA3,QTF,TEMP,WA1,WA2) IFLAG = IFLAG + 1 70 CONTINUE NJEV = NJEV + 1 C C IF THE JACOBIAN IS RANK DEFICIENT, CALL QRFAC TO C REORDER ITS COLUMNS AND UPDATE THE COMPONENTS OF QTF. C SING = .FALSE. DO 80 J = 1, N IF (FJAC(J,J) .EQ. ZERO) SING = .TRUE. IPVT(J) = J WA2(J) = ENORM(J,FJAC(1,J)) 80 CONTINUE IF (.NOT.SING) GO TO 130 CALL QRFAC(N,N,FJAC,LDFJAC,.TRUE.,IPVT,N,WA1,WA2,WA3) DO 120 J = 1, N IF (FJAC(J,J) .EQ. ZERO) GO TO 110 SUM = ZERO DO 90 I = J, N SUM = SUM + FJAC(I,J)*QTF(I) 90 CONTINUE TEMP = -SUM/FJAC(J,J) DO 100 I = J, N QTF(I) = QTF(I) + FJAC(I,J)*TEMP 100 CONTINUE 110 CONTINUE FJAC(J,J) = WA1(J) 120 CONTINUE 130 CONTINUE C C ON THE FIRST ITERATION AND IF MODE IS 1, SCALE ACCORDING C TO THE NORMS OF THE COLUMNS OF THE INITIAL JACOBIAN. C IF (ITER .NE. 1) GO TO 170 IF (MODE .EQ. 2) GO TO 150 DO 140 J = 1, N DIAG(J) = WA2(J) IF (WA2(J) .EQ. ZERO) DIAG(J) = ONE 140 CONTINUE 150 CONTINUE C C ON THE FIRST ITERATION, CALCULATE THE NORM OF THE SCALED X C AND INITIALIZE THE STEP BOUND DELTA. C DO 160 J = 1, N WA3(J) = DIAG(J)*X(J) 160 CONTINUE XNORM = ENORM(N,WA3) DELTA = FACTOR*XNORM IF (DELTA .EQ. ZERO) DELTA = FACTOR 170 CONTINUE C C COMPUTE THE NORM OF THE SCALED GRADIENT. C GNORM = ZERO IF (FNORM .EQ. ZERO) GO TO 210 DO 200 J = 1, N L = IPVT(J) IF (WA2(L) .EQ. ZERO) GO TO 190 SUM = ZERO DO 180 I = 1, J SUM = SUM + FJAC(I,J)*(QTF(I)/FNORM) 180 CONTINUE GNORM = DMAX1(GNORM,DABS(SUM/WA2(L))) 190 CONTINUE 200 CONTINUE 210 CONTINUE C C TEST FOR CONVERGENCE OF THE GRADIENT NORM. C IF (GNORM .LE. GTOL) INFO = 4 IF (INFO .NE. 0) GO TO 340 C C RESCALE IF NECESSARY. C IF (MODE .EQ. 2) GO TO 230 DO 220 J = 1, N DIAG(J) = DMAX1(DIAG(J),WA2(J)) 220 CONTINUE 230 CONTINUE C C BEGINNING OF THE INNER LOOP. C 240 CONTINUE C C DETERMINE THE LEVENBERG-MARQUARDT PARAMETER. C CALL LMPAR(N,FJAC,LDFJAC,IPVT,DIAG,QTF,DELTA,PAR,WA1,WA2, * WA3,WA4) C C STORE THE DIRECTION P AND X + P. CALCULATE THE NORM OF P. C DO 250 J = 1, N WA1(J) = -WA1(J) WA2(J) = X(J) + WA1(J) WA3(J) = DIAG(J)*WA1(J) 250 CONTINUE PNORM = ENORM(N,WA3) C C ON THE FIRST ITERATION, ADJUST THE INITIAL STEP BOUND. C IF (ITER .EQ. 1) DELTA = DMIN1(DELTA,PNORM) C C EVALUATE THE FUNCTION AT X + P AND CALCULATE ITS NORM. C IFLAG = 1 CALL FCN(M,N,WA2,WA4,WA3,IFLAG) NFEV = NFEV + 1 IF (IFLAG .LT. 0) GO TO 340 FNORM1 = ENORM(M,WA4) C C COMPUTE THE SCALED ACTUAL REDUCTION. C ACTRED = -ONE IF (P1*FNORM1 .LT. FNORM) ACTRED = ONE - (FNORM1/FNORM)**2 C C COMPUTE THE SCALED PREDICTED REDUCTION AND C THE SCALED DIRECTIONAL DERIVATIVE. C DO 270 J = 1, N WA3(J) = ZERO L = IPVT(J) TEMP = WA1(L) DO 260 I = 1, J WA3(I) = WA3(I) + FJAC(I,J)*TEMP 260 CONTINUE 270 CONTINUE TEMP1 = ENORM(N,WA3)/FNORM TEMP2 = (DSQRT(PAR)*PNORM)/FNORM PRERED = TEMP1**2 + TEMP2**2/P5 DIRDER = -(TEMP1**2 + TEMP2**2) C C COMPUTE THE RATIO OF THE ACTUAL TO THE PREDICTED C REDUCTION. C RATIO = ZERO IF (PRERED .NE. ZERO) RATIO = ACTRED/PRERED C C UPDATE THE STEP BOUND. C IF (RATIO .GT. P25) GO TO 280 IF (ACTRED .GE. ZERO) TEMP = P5 IF (ACTRED .LT. ZERO) * TEMP = P5*DIRDER/(DIRDER + P5*ACTRED) IF (P1*FNORM1 .GE. FNORM .OR. TEMP .LT. P1) TEMP = P1 DELTA = TEMP*DMIN1(DELTA,PNORM/P1) PAR = PAR/TEMP GO TO 300 280 CONTINUE IF (PAR .NE. ZERO .AND. RATIO .LT. P75) GO TO 290 DELTA = PNORM/P5 PAR = P5*PAR 290 CONTINUE 300 CONTINUE C C TEST FOR SUCCESSFUL ITERATION. C IF (RATIO .LT. P0001) GO TO 330 C C SUCCESSFUL ITERATION. UPDATE X, FVEC, AND THEIR NORMS. C DO 310 J = 1, N X(J) = WA2(J) WA2(J) = DIAG(J)*X(J) 310 CONTINUE DO 320 I = 1, M FVEC(I) = WA4(I) 320 CONTINUE XNORM = ENORM(N,WA2) FNORM = FNORM1 ITER = ITER + 1 330 CONTINUE C C TESTS FOR CONVERGENCE. C IF (DABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE) INFO = 1 IF (DELTA .LE. XTOL*XNORM) INFO = 2 IF (DABS(ACTRED) .LE. FTOL .AND. PRERED .LE. FTOL * .AND. P5*RATIO .LE. ONE .AND. INFO .EQ. 2) INFO = 3 IF (INFO .NE. 0) GO TO 340 C C TESTS FOR TERMINATION AND STRINGENT TOLERANCES. C IF (NFEV .GE. MAXFEV) INFO = 5 IF (DABS(ACTRED) .LE. EPSMCH .AND. PRERED .LE. EPSMCH * .AND. P5*RATIO .LE. ONE) INFO = 6 IF (DELTA .LE. EPSMCH*XNORM) INFO = 7 IF (GNORM .LE. EPSMCH) INFO = 8 IF (INFO .NE. 0) GO TO 340 C C END OF THE INNER LOOP. REPEAT IF ITERATION UNSUCCESSFUL. C IF (RATIO .LT. P0001) GO TO 240 C C END OF THE OUTER LOOP. C GO TO 30 340 CONTINUE C C TERMINATION, EITHER NORMAL OR USER IMPOSED. C IF (IFLAG .LT. 0) INFO = IFLAG IFLAG = 0 IF (NPRINT .GT. 0) CALL FCN(M,N,X,FVEC,WA3,IFLAG) RETURN C C LAST CARD OF SUBROUTINE LMSTR. C END SUBROUTINE LMSTR1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,IPVT,WA, * LWA) INTEGER M,N,LDFJAC,INFO,LWA INTEGER IPVT(N) DOUBLE PRECISION TOL DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN C ********** C C SUBROUTINE LMSTR1 C C THE PURPOSE OF LMSTR1 IS TO MINIMIZE THE SUM OF THE SQUARES OF C M NONLINEAR FUNCTIONS IN N VARIABLES BY A MODIFICATION OF C THE LEVENBERG-MARQUARDT ALGORITHM WHICH USES MINIMAL STORAGE. C THIS IS DONE BY USING THE MORE GENERAL LEAST-SQUARES SOLVER C LMSTR. THE USER MUST PROVIDE A SUBROUTINE WHICH CALCULATES C THE FUNCTIONS AND THE ROWS OF THE JACOBIAN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE LMSTR1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL,INFO, C IPVT,WA,LWA) C C WHERE C C FCN IS THE NAME OF THE USER-SUPPLIED SUBROUTINE WHICH C CALCULATES THE FUNCTIONS AND THE ROWS OF THE JACOBIAN. C FCN MUST BE DECLARED IN AN EXTERNAL STATEMENT IN THE C USER CALLING PROGRAM, AND SHOULD BE WRITTEN AS FOLLOWS. C C SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) C INTEGER M,N,IFLAG C DOUBLE PRECISION X(N),FVEC(M),FJROW(N) C ---------- C IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND C RETURN THIS VECTOR IN FVEC. C IF IFLAG = I CALCULATE THE (I-1)-ST ROW OF THE C JACOBIAN AT X AND RETURN THIS VECTOR IN FJROW. C ---------- C RETURN C END C C THE VALUE OF IFLAG SHOULD NOT BE CHANGED BY FCN UNLESS C THE USER WANTS TO TERMINATE EXECUTION OF LMSTR1. C IN THIS CASE SET IFLAG TO A NEGATIVE INTEGER. C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF FUNCTIONS. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF VARIABLES. N MUST NOT EXCEED M. C C X IS AN ARRAY OF LENGTH N. ON INPUT X MUST CONTAIN C AN INITIAL ESTIMATE OF THE SOLUTION VECTOR. ON OUTPUT X C CONTAINS THE FINAL ESTIMATE OF THE SOLUTION VECTOR. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS C THE FUNCTIONS EVALUATED AT THE OUTPUT X. C C FJAC IS AN OUTPUT N BY N ARRAY. THE UPPER TRIANGLE OF FJAC C CONTAINS AN UPPER TRIANGULAR MATRIX R SUCH THAT C C T T T C P *(JAC *JAC)*P = R *R, C C WHERE P IS A PERMUTATION MATRIX AND JAC IS THE FINAL C CALCULATED JACOBIAN. COLUMN J OF P IS COLUMN IPVT(J) C (SEE BELOW) OF THE IDENTITY MATRIX. THE LOWER TRIANGULAR C PART OF FJAC CONTAINS INFORMATION GENERATED DURING C THE COMPUTATION OF R. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C TOL IS A NONNEGATIVE INPUT VARIABLE. TERMINATION OCCURS C WHEN THE ALGORITHM ESTIMATES EITHER THAT THE RELATIVE C ERROR IN THE SUM OF SQUARES IS AT MOST TOL OR THAT C THE RELATIVE ERROR BETWEEN X AND THE SOLUTION IS AT C MOST TOL. C C INFO IS AN INTEGER OUTPUT VARIABLE. IF THE USER HAS C TERMINATED EXECUTION, INFO IS SET TO THE (NEGATIVE) C VALUE OF IFLAG. SEE DESCRIPTION OF FCN. OTHERWISE, C INFO IS SET AS FOLLOWS. C C INFO = 0 IMPROPER INPUT PARAMETERS. C C INFO = 1 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C IN THE SUM OF SQUARES IS AT MOST TOL. C C INFO = 2 ALGORITHM ESTIMATES THAT THE RELATIVE ERROR C BETWEEN X AND THE SOLUTION IS AT MOST TOL. C C INFO = 3 CONDITIONS FOR INFO = 1 AND INFO = 2 BOTH HOLD. C C INFO = 4 FVEC IS ORTHOGONAL TO THE COLUMNS OF THE C JACOBIAN TO MACHINE PRECISION. C C INFO = 5 NUMBER OF CALLS TO FCN WITH IFLAG = 1 HAS C REACHED 100*(N+1). C C INFO = 6 TOL IS TOO SMALL. NO FURTHER REDUCTION IN C THE SUM OF SQUARES IS POSSIBLE. C C INFO = 7 TOL IS TOO SMALL. NO FURTHER IMPROVEMENT IN C THE APPROXIMATE SOLUTION X IS POSSIBLE. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH N. IPVT C DEFINES A PERMUTATION MATRIX P SUCH THAT JAC*P = Q*R, C WHERE JAC IS THE FINAL CALCULATED JACOBIAN, Q IS C ORTHOGONAL (NOT STORED), AND R IS UPPER TRIANGULAR. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C WA IS A WORK ARRAY OF LENGTH LWA. C C LWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN 5*N+M. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... LMSTR C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, DUDLEY V. GOETSCHEL, KENNETH E. HILLSTROM, C JORGE J. MORE C C ********** INTEGER MAXFEV,MODE,NFEV,NJEV,NPRINT DOUBLE PRECISION FACTOR,FTOL,GTOL,XTOL,ZERO DATA FACTOR,ZERO /1.0D2,0.0D0/ INFO = 0 C C CHECK THE INPUT PARAMETERS FOR ERRORS. C IF (N .LE. 0 .OR. M .LT. N .OR. LDFJAC .LT. N .OR. TOL .LT. ZERO * .OR. LWA .LT. 5*N + M) GO TO 10 C C CALL LMSTR. C MAXFEV = 100*(N + 1) FTOL = TOL XTOL = TOL GTOL = ZERO MODE = 1 NPRINT = 0 CALL LMSTR(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL,MAXFEV, * WA(1),MODE,FACTOR,NPRINT,INFO,NFEV,NJEV,IPVT,WA(N+1), * WA(2*N+1),WA(3*N+1),WA(4*N+1),WA(5*N+1)) IF (INFO .EQ. 8) INFO = 4 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE LMSTR1. C END SUBROUTINE QFORM(M,N,Q,LDQ,WA) INTEGER M,N,LDQ DOUBLE PRECISION Q(LDQ,M),WA(M) C ********** C C SUBROUTINE QFORM C C THIS SUBROUTINE PROCEEDS FROM THE COMPUTED QR FACTORIZATION OF C AN M BY N MATRIX A TO ACCUMULATE THE M BY M ORTHOGONAL MATRIX C Q FROM ITS FACTORED FORM. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE QFORM(M,N,Q,LDQ,WA) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF ROWS OF A AND THE ORDER OF Q. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C Q IS AN M BY M ARRAY. ON INPUT THE FULL LOWER TRAPEZOID IN C THE FIRST MIN(M,N) COLUMNS OF Q CONTAINS THE FACTORED FORM. C ON OUTPUT Q HAS BEEN ACCUMULATED INTO A SQUARE MATRIX. C C LDQ IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY Q. C C WA IS A WORK ARRAY OF LENGTH M. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,JM1,K,L,MINMN,NP1 DOUBLE PRECISION ONE,SUM,TEMP,ZERO DATA ONE,ZERO /1.0D0,0.0D0/ C C ZERO OUT UPPER TRIANGLE OF Q IN THE FIRST MIN(M,N) COLUMNS. C MINMN = MIN0(M,N) IF (MINMN .LT. 2) GO TO 30 DO 20 J = 2, MINMN JM1 = J - 1 DO 10 I = 1, JM1 Q(I,J) = ZERO 10 CONTINUE 20 CONTINUE 30 CONTINUE C C INITIALIZE REMAINING COLUMNS TO THOSE OF THE IDENTITY MATRIX. C NP1 = N + 1 IF (M .LT. NP1) GO TO 60 DO 50 J = NP1, M DO 40 I = 1, M Q(I,J) = ZERO 40 CONTINUE Q(J,J) = ONE 50 CONTINUE 60 CONTINUE C C ACCUMULATE Q FROM ITS FACTORED FORM. C DO 120 L = 1, MINMN K = MINMN - L + 1 DO 70 I = K, M WA(I) = Q(I,K) Q(I,K) = ZERO 70 CONTINUE Q(K,K) = ONE IF (WA(K) .EQ. ZERO) GO TO 110 DO 100 J = K, M SUM = ZERO DO 80 I = K, M SUM = SUM + Q(I,J)*WA(I) 80 CONTINUE TEMP = SUM/WA(K) DO 90 I = K, M Q(I,J) = Q(I,J) - TEMP*WA(I) 90 CONTINUE 100 CONTINUE 110 CONTINUE 120 CONTINUE RETURN C C LAST CARD OF SUBROUTINE QFORM. C END SUBROUTINE QRFAC(M,N,A,LDA,PIVOT,IPVT,LIPVT,RDIAG,ACNORM,WA) INTEGER M,N,LDA,LIPVT INTEGER IPVT(LIPVT) LOGICAL PIVOT DOUBLE PRECISION A(LDA,N),RDIAG(N),ACNORM(N),WA(N) C ********** C C SUBROUTINE QRFAC C C THIS SUBROUTINE USES HOUSEHOLDER TRANSFORMATIONS WITH COLUMN C PIVOTING (OPTIONAL) TO COMPUTE A QR FACTORIZATION OF THE C M BY N MATRIX A. THAT IS, QRFAC DETERMINES AN ORTHOGONAL C MATRIX Q, A PERMUTATION MATRIX P, AND AN UPPER TRAPEZOIDAL C MATRIX R WITH DIAGONAL ELEMENTS OF NONINCREASING MAGNITUDE, C SUCH THAT A*P = Q*R. THE HOUSEHOLDER TRANSFORMATION FOR C COLUMN K, K = 1,2,...,MIN(M,N), IS OF THE FORM C C T C I - (1/U(K))*U*U C C WHERE U HAS ZEROS IN THE FIRST K-1 POSITIONS. THE FORM OF C THIS TRANSFORMATION AND THE METHOD OF PIVOTING FIRST C APPEARED IN THE CORRESPONDING LINPACK SUBROUTINE. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE QRFAC(M,N,A,LDA,PIVOT,IPVT,LIPVT,RDIAG,ACNORM,WA) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF ROWS OF A. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C A IS AN M BY N ARRAY. ON INPUT A CONTAINS THE MATRIX FOR C WHICH THE QR FACTORIZATION IS TO BE COMPUTED. ON OUTPUT C THE STRICT UPPER TRAPEZOIDAL PART OF A CONTAINS THE STRICT C UPPER TRAPEZOIDAL PART OF R, AND THE LOWER TRAPEZOIDAL C PART OF A CONTAINS A FACTORED FORM OF Q (THE NON-TRIVIAL C ELEMENTS OF THE U VECTORS DESCRIBED ABOVE). C C LDA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY A. C C PIVOT IS A LOGICAL INPUT VARIABLE. IF PIVOT IS SET TRUE, C THEN COLUMN PIVOTING IS ENFORCED. IF PIVOT IS SET FALSE, C THEN NO COLUMN PIVOTING IS DONE. C C IPVT IS AN INTEGER OUTPUT ARRAY OF LENGTH LIPVT. IPVT C DEFINES THE PERMUTATION MATRIX P SUCH THAT A*P = Q*R. C COLUMN J OF P IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C IF PIVOT IS FALSE, IPVT IS NOT REFERENCED. C C LIPVT IS A POSITIVE INTEGER INPUT VARIABLE. IF PIVOT IS FALSE, C THEN LIPVT MAY BE AS SMALL AS 1. IF PIVOT IS TRUE, THEN C LIPVT MUST BE AT LEAST N. C C RDIAG IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C DIAGONAL ELEMENTS OF R. C C ACNORM IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C NORMS OF THE CORRESPONDING COLUMNS OF THE INPUT MATRIX A. C IF THIS INFORMATION IS NOT NEEDED, THEN ACNORM CAN COINCIDE C WITH RDIAG. C C WA IS A WORK ARRAY OF LENGTH N. IF PIVOT IS FALSE, THEN WA C CAN COINCIDE WITH RDIAG. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... DPMPAR,ENORM C C FORTRAN-SUPPLIED ... DMAX1,DSQRT,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,JP1,K,KMAX,MINMN DOUBLE PRECISION AJNORM,EPSMCH,ONE,P05,SUM,TEMP,ZERO DOUBLE PRECISION DPMPAR,ENORM DATA ONE,P05,ZERO /1.0D0,5.0D-2,0.0D0/ C C EPSMCH IS THE MACHINE PRECISION. C EPSMCH = DPMPAR(1) C C COMPUTE THE INITIAL COLUMN NORMS AND INITIALIZE SEVERAL ARRAYS. C DO 10 J = 1, N ACNORM(J) = ENORM(M,A(1,J)) RDIAG(J) = ACNORM(J) WA(J) = RDIAG(J) IF (PIVOT) IPVT(J) = J 10 CONTINUE C C REDUCE A TO R WITH HOUSEHOLDER TRANSFORMATIONS. C MINMN = MIN0(M,N) DO 110 J = 1, MINMN IF (.NOT.PIVOT) GO TO 40 C C BRING THE COLUMN OF LARGEST NORM INTO THE PIVOT POSITION. C KMAX = J DO 20 K = J, N IF (RDIAG(K) .GT. RDIAG(KMAX)) KMAX = K 20 CONTINUE IF (KMAX .EQ. J) GO TO 40 DO 30 I = 1, M TEMP = A(I,J) A(I,J) = A(I,KMAX) A(I,KMAX) = TEMP 30 CONTINUE RDIAG(KMAX) = RDIAG(J) WA(KMAX) = WA(J) K = IPVT(J) IPVT(J) = IPVT(KMAX) IPVT(KMAX) = K 40 CONTINUE C C COMPUTE THE HOUSEHOLDER TRANSFORMATION TO REDUCE THE C J-TH COLUMN OF A TO A MULTIPLE OF THE J-TH UNIT VECTOR. C AJNORM = ENORM(M-J+1,A(J,J)) IF (AJNORM .EQ. ZERO) GO TO 100 IF (A(J,J) .LT. ZERO) AJNORM = -AJNORM DO 50 I = J, M A(I,J) = A(I,J)/AJNORM 50 CONTINUE A(J,J) = A(J,J) + ONE C C APPLY THE TRANSFORMATION TO THE REMAINING COLUMNS C AND UPDATE THE NORMS. C JP1 = J + 1 IF (N .LT. JP1) GO TO 100 DO 90 K = JP1, N SUM = ZERO DO 60 I = J, M SUM = SUM + A(I,J)*A(I,K) 60 CONTINUE TEMP = SUM/A(J,J) DO 70 I = J, M A(I,K) = A(I,K) - TEMP*A(I,J) 70 CONTINUE IF (.NOT.PIVOT .OR. RDIAG(K) .EQ. ZERO) GO TO 80 TEMP = A(J,K)/RDIAG(K) RDIAG(K) = RDIAG(K)*DSQRT(DMAX1(ZERO,ONE-TEMP**2)) IF (P05*(RDIAG(K)/WA(K))**2 .GT. EPSMCH) GO TO 80 RDIAG(K) = ENORM(M-J,A(JP1,K)) WA(K) = RDIAG(K) 80 CONTINUE 90 CONTINUE 100 CONTINUE RDIAG(J) = -AJNORM 110 CONTINUE RETURN C C LAST CARD OF SUBROUTINE QRFAC. C END SUBROUTINE QRSOLV(N,R,LDR,IPVT,DIAG,QTB,X,SDIAG,WA) INTEGER N,LDR INTEGER IPVT(N) DOUBLE PRECISION R(LDR,N),DIAG(N),QTB(N),X(N),SDIAG(N),WA(N) C ********** C C SUBROUTINE QRSOLV C C GIVEN AN M BY N MATRIX A, AN N BY N DIAGONAL MATRIX D, C AND AN M-VECTOR B, THE PROBLEM IS TO DETERMINE AN X WHICH C SOLVES THE SYSTEM C C A*X = B , D*X = 0 , C C IN THE LEAST SQUARES SENSE. C C THIS SUBROUTINE COMPLETES THE SOLUTION OF THE PROBLEM C IF IT IS PROVIDED WITH THE NECESSARY INFORMATION FROM THE C QR FACTORIZATION, WITH COLUMN PIVOTING, OF A. THAT IS, IF C A*P = Q*R, WHERE P IS A PERMUTATION MATRIX, Q HAS ORTHOGONAL C COLUMNS, AND R IS AN UPPER TRIANGULAR MATRIX WITH DIAGONAL C ELEMENTS OF NONINCREASING MAGNITUDE, THEN QRSOLV EXPECTS C THE FULL UPPER TRIANGLE OF R, THE PERMUTATION MATRIX P, C AND THE FIRST N COMPONENTS OF (Q TRANSPOSE)*B. THE SYSTEM C A*X = B, D*X = 0, IS THEN EQUIVALENT TO C C T T C R*Z = Q *B , P *D*P*Z = 0 , C C WHERE X = P*Z. IF THIS SYSTEM DOES NOT HAVE FULL RANK, C THEN A LEAST SQUARES SOLUTION IS OBTAINED. ON OUTPUT QRSOLV C ALSO PROVIDES AN UPPER TRIANGULAR MATRIX S SUCH THAT C C T T T C P *(A *A + D*D)*P = S *S . C C S IS COMPUTED WITHIN QRSOLV AND MAY BE OF SEPARATE INTEREST. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE QRSOLV(N,R,LDR,IPVT,DIAG,QTB,X,SDIAG,WA) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE ORDER OF R. C C R IS AN N BY N ARRAY. ON INPUT THE FULL UPPER TRIANGLE C MUST CONTAIN THE FULL UPPER TRIANGLE OF THE MATRIX R. C ON OUTPUT THE FULL UPPER TRIANGLE IS UNALTERED, AND THE C STRICT LOWER TRIANGLE CONTAINS THE STRICT UPPER TRIANGLE C (TRANSPOSED) OF THE UPPER TRIANGULAR MATRIX S. C C LDR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY R. C C IPVT IS AN INTEGER INPUT ARRAY OF LENGTH N WHICH DEFINES THE C PERMUTATION MATRIX P SUCH THAT A*P = Q*R. COLUMN J OF P C IS COLUMN IPVT(J) OF THE IDENTITY MATRIX. C C DIAG IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE C DIAGONAL ELEMENTS OF THE MATRIX D. C C QTB IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE FIRST C N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*B. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE LEAST C SQUARES SOLUTION OF THE SYSTEM A*X = B, D*X = 0. C C SDIAG IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C DIAGONAL ELEMENTS OF THE UPPER TRIANGULAR MATRIX S. C C WA IS A WORK ARRAY OF LENGTH N. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DABS,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,JP1,K,KP1,L,NSING DOUBLE PRECISION COS,COTAN,P5,P25,QTBPJ,SIN,SUM,TAN,TEMP,ZERO DATA P5,P25,ZERO /5.0D-1,2.5D-1,0.0D0/ C C COPY R AND (Q TRANSPOSE)*B TO PRESERVE INPUT AND INITIALIZE S. C IN PARTICULAR, SAVE THE DIAGONAL ELEMENTS OF R IN X. C DO 20 J = 1, N DO 10 I = J, N R(I,J) = R(J,I) 10 CONTINUE X(J) = R(J,J) WA(J) = QTB(J) 20 CONTINUE C C ELIMINATE THE DIAGONAL MATRIX D USING A GIVENS ROTATION. C DO 100 J = 1, N C C PREPARE THE ROW OF D TO BE ELIMINATED, LOCATING THE C DIAGONAL ELEMENT USING P FROM THE QR FACTORIZATION. C L = IPVT(J) IF (DIAG(L) .EQ. ZERO) GO TO 90 DO 30 K = J, N SDIAG(K) = ZERO 30 CONTINUE SDIAG(J) = DIAG(L) C C THE TRANSFORMATIONS TO ELIMINATE THE ROW OF D C MODIFY ONLY A SINGLE ELEMENT OF (Q TRANSPOSE)*B C BEYOND THE FIRST N, WHICH IS INITIALLY ZERO. C QTBPJ = ZERO DO 80 K = J, N C C DETERMINE A GIVENS ROTATION WHICH ELIMINATES THE C APPROPRIATE ELEMENT IN THE CURRENT ROW OF D. C IF (SDIAG(K) .EQ. ZERO) GO TO 70 IF (DABS(R(K,K)) .GE. DABS(SDIAG(K))) GO TO 40 COTAN = R(K,K)/SDIAG(K) SIN = P5/DSQRT(P25+P25*COTAN**2) COS = SIN*COTAN GO TO 50 40 CONTINUE TAN = SDIAG(K)/R(K,K) COS = P5/DSQRT(P25+P25*TAN**2) SIN = COS*TAN 50 CONTINUE C C COMPUTE THE MODIFIED DIAGONAL ELEMENT OF R AND C THE MODIFIED ELEMENT OF ((Q TRANSPOSE)*B,0). C R(K,K) = COS*R(K,K) + SIN*SDIAG(K) TEMP = COS*WA(K) + SIN*QTBPJ QTBPJ = -SIN*WA(K) + COS*QTBPJ WA(K) = TEMP C C ACCUMULATE THE TRANFORMATION IN THE ROW OF S. C KP1 = K + 1 IF (N .LT. KP1) GO TO 70 DO 60 I = KP1, N TEMP = COS*R(I,K) + SIN*SDIAG(I) SDIAG(I) = -SIN*R(I,K) + COS*SDIAG(I) R(I,K) = TEMP 60 CONTINUE 70 CONTINUE 80 CONTINUE 90 CONTINUE C C STORE THE DIAGONAL ELEMENT OF S AND RESTORE C THE CORRESPONDING DIAGONAL ELEMENT OF R. C SDIAG(J) = R(J,J) R(J,J) = X(J) 100 CONTINUE C C SOLVE THE TRIANGULAR SYSTEM FOR Z. IF THE SYSTEM IS C SINGULAR, THEN OBTAIN A LEAST SQUARES SOLUTION. C NSING = N DO 110 J = 1, N IF (SDIAG(J) .EQ. ZERO .AND. NSING .EQ. N) NSING = J - 1 IF (NSING .LT. N) WA(J) = ZERO 110 CONTINUE IF (NSING .LT. 1) GO TO 150 DO 140 K = 1, NSING J = NSING - K + 1 SUM = ZERO JP1 = J + 1 IF (NSING .LT. JP1) GO TO 130 DO 120 I = JP1, NSING SUM = SUM + R(I,J)*WA(I) 120 CONTINUE 130 CONTINUE WA(J) = (WA(J) - SUM)/SDIAG(J) 140 CONTINUE 150 CONTINUE C C PERMUTE THE COMPONENTS OF Z BACK TO COMPONENTS OF X. C DO 160 J = 1, N L = IPVT(J) X(L) = WA(J) 160 CONTINUE RETURN C C LAST CARD OF SUBROUTINE QRSOLV. C END SUBROUTINE RWUPDT(N,R,LDR,W,B,ALPHA,COS,SIN) INTEGER N,LDR DOUBLE PRECISION ALPHA DOUBLE PRECISION R(LDR,N),W(N),B(N),COS(N),SIN(N) C ********** C C SUBROUTINE RWUPDT C C GIVEN AN N BY N UPPER TRIANGULAR MATRIX R, THIS SUBROUTINE C COMPUTES THE QR DECOMPOSITION OF THE MATRIX FORMED WHEN A ROW C IS ADDED TO R. IF THE ROW IS SPECIFIED BY THE VECTOR W, THEN C RWUPDT DETERMINES AN ORTHOGONAL MATRIX Q SUCH THAT WHEN THE C N+1 BY N MATRIX COMPOSED OF R AUGMENTED BY W IS PREMULTIPLIED C BY (Q TRANSPOSE), THE RESULTING MATRIX IS UPPER TRAPEZOIDAL. C THE MATRIX (Q TRANSPOSE) IS THE PRODUCT OF N TRANSFORMATIONS C C G(N)*G(N-1)* ... *G(1) C C WHERE G(I) IS A GIVENS ROTATION IN THE (I,N+1) PLANE WHICH C ELIMINATES ELEMENTS IN THE (N+1)-ST PLANE. RWUPDT ALSO C COMPUTES THE PRODUCT (Q TRANSPOSE)*C WHERE C IS THE C (N+1)-VECTOR (B,ALPHA). Q ITSELF IS NOT ACCUMULATED, RATHER C THE INFORMATION TO RECOVER THE G ROTATIONS IS SUPPLIED. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE RWUPDT(N,R,LDR,W,B,ALPHA,COS,SIN) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE ORDER OF R. C C R IS AN N BY N ARRAY. ON INPUT THE UPPER TRIANGULAR PART OF C R MUST CONTAIN THE MATRIX TO BE UPDATED. ON OUTPUT R C CONTAINS THE UPDATED TRIANGULAR MATRIX. C C LDR IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY R. C C W IS AN INPUT ARRAY OF LENGTH N WHICH MUST CONTAIN THE ROW C VECTOR TO BE ADDED TO R. C C B IS AN ARRAY OF LENGTH N. ON INPUT B MUST CONTAIN THE C FIRST N ELEMENTS OF THE VECTOR C. ON OUTPUT B CONTAINS C THE FIRST N ELEMENTS OF THE VECTOR (Q TRANSPOSE)*C. C C ALPHA IS A VARIABLE. ON INPUT ALPHA MUST CONTAIN THE C (N+1)-ST ELEMENT OF THE VECTOR C. ON OUTPUT ALPHA CONTAINS C THE (N+1)-ST ELEMENT OF THE VECTOR (Q TRANSPOSE)*C. C C COS IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C COSINES OF THE TRANSFORMING GIVENS ROTATIONS. C C SIN IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE C SINES OF THE TRANSFORMING GIVENS ROTATIONS. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DABS,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, DUDLEY V. GOETSCHEL, KENNETH E. HILLSTROM, C JORGE J. MORE C C ********** INTEGER I,J,JM1 DOUBLE PRECISION COTAN,ONE,P5,P25,ROWJ,TAN,TEMP,ZERO DATA ONE,P5,P25,ZERO /1.0D0,5.0D-1,2.5D-1,0.0D0/ C DO 60 J = 1, N ROWJ = W(J) JM1 = J - 1 C C APPLY THE PREVIOUS TRANSFORMATIONS TO C R(I,J), I=1,2,...,J-1, AND TO W(J). C IF (JM1 .LT. 1) GO TO 20 DO 10 I = 1, JM1 TEMP = COS(I)*R(I,J) + SIN(I)*ROWJ ROWJ = -SIN(I)*R(I,J) + COS(I)*ROWJ R(I,J) = TEMP 10 CONTINUE 20 CONTINUE C C DETERMINE A GIVENS ROTATION WHICH ELIMINATES W(J). C COS(J) = ONE SIN(J) = ZERO IF (ROWJ .EQ. ZERO) GO TO 50 IF (DABS(R(J,J)) .GE. DABS(ROWJ)) GO TO 30 COTAN = R(J,J)/ROWJ SIN(J) = P5/DSQRT(P25+P25*COTAN**2) COS(J) = SIN(J)*COTAN GO TO 40 30 CONTINUE TAN = ROWJ/R(J,J) COS(J) = P5/DSQRT(P25+P25*TAN**2) SIN(J) = COS(J)*TAN 40 CONTINUE C C APPLY THE CURRENT TRANSFORMATION TO R(J,J), B(J), AND ALPHA. C R(J,J) = COS(J)*R(J,J) + SIN(J)*ROWJ TEMP = COS(J)*B(J) + SIN(J)*ALPHA ALPHA = -SIN(J)*B(J) + COS(J)*ALPHA B(J) = TEMP 50 CONTINUE 60 CONTINUE RETURN C C LAST CARD OF SUBROUTINE RWUPDT. C END SUBROUTINE R1MPYQ(M,N,A,LDA,V,W) INTEGER M,N,LDA DOUBLE PRECISION A(LDA,N),V(N),W(N) C ********** C C SUBROUTINE R1MPYQ C C GIVEN AN M BY N MATRIX A, THIS SUBROUTINE COMPUTES A*Q WHERE C Q IS THE PRODUCT OF 2*(N - 1) TRANSFORMATIONS C C GV(N-1)*...*GV(1)*GW(1)*...*GW(N-1) C C AND GV(I), GW(I) ARE GIVENS ROTATIONS IN THE (I,N) PLANE WHICH C ELIMINATE ELEMENTS IN THE I-TH AND N-TH PLANES, RESPECTIVELY. C Q ITSELF IS NOT GIVEN, RATHER THE INFORMATION TO RECOVER THE C GV, GW ROTATIONS IS SUPPLIED. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE R1MPYQ(M,N,A,LDA,V,W) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF ROWS OF A. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C A IS AN M BY N ARRAY. ON INPUT A MUST CONTAIN THE MATRIX C TO BE POSTMULTIPLIED BY THE ORTHOGONAL MATRIX Q C DESCRIBED ABOVE. ON OUTPUT A*Q HAS REPLACED A. C C LDA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY A. C C V IS AN INPUT ARRAY OF LENGTH N. V(I) MUST CONTAIN THE C INFORMATION NECESSARY TO RECOVER THE GIVENS ROTATION GV(I) C DESCRIBED ABOVE. C C W IS AN INPUT ARRAY OF LENGTH N. W(I) MUST CONTAIN THE C INFORMATION NECESSARY TO RECOVER THE GIVENS ROTATION GW(I) C DESCRIBED ABOVE. C C SUBROUTINES CALLED C C FORTRAN-SUPPLIED ... DABS,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,J,NMJ,NM1 DOUBLE PRECISION COS,ONE,SIN,TEMP DATA ONE /1.0D0/ C C APPLY THE FIRST SET OF GIVENS ROTATIONS TO A. C NM1 = N - 1 IF (NM1 .LT. 1) GO TO 50 DO 20 NMJ = 1, NM1 J = N - NMJ IF (DABS(V(J)) .GT. ONE) COS = ONE/V(J) IF (DABS(V(J)) .GT. ONE) SIN = DSQRT(ONE-COS**2) IF (DABS(V(J)) .LE. ONE) SIN = V(J) IF (DABS(V(J)) .LE. ONE) COS = DSQRT(ONE-SIN**2) DO 10 I = 1, M TEMP = COS*A(I,J) - SIN*A(I,N) A(I,N) = SIN*A(I,J) + COS*A(I,N) A(I,J) = TEMP 10 CONTINUE 20 CONTINUE C C APPLY THE SECOND SET OF GIVENS ROTATIONS TO A. C DO 40 J = 1, NM1 IF (DABS(W(J)) .GT. ONE) COS = ONE/W(J) IF (DABS(W(J)) .GT. ONE) SIN = DSQRT(ONE-COS**2) IF (DABS(W(J)) .LE. ONE) SIN = W(J) IF (DABS(W(J)) .LE. ONE) COS = DSQRT(ONE-SIN**2) DO 30 I = 1, M TEMP = COS*A(I,J) + SIN*A(I,N) A(I,N) = -SIN*A(I,J) + COS*A(I,N) A(I,J) = TEMP 30 CONTINUE 40 CONTINUE 50 CONTINUE RETURN C C LAST CARD OF SUBROUTINE R1MPYQ. C END SUBROUTINE R1UPDT(M,N,S,LS,U,V,W,SING) INTEGER M,N,LS LOGICAL SING DOUBLE PRECISION S(LS),U(M),V(N),W(M) C ********** C C SUBROUTINE R1UPDT C C GIVEN AN M BY N LOWER TRAPEZOIDAL MATRIX S, AN M-VECTOR U, C AND AN N-VECTOR V, THE PROBLEM IS TO DETERMINE AN C ORTHOGONAL MATRIX Q SUCH THAT C C T C (S + U*V )*Q C C IS AGAIN LOWER TRAPEZOIDAL. C C THIS SUBROUTINE DETERMINES Q AS THE PRODUCT OF 2*(N - 1) C TRANSFORMATIONS C C GV(N-1)*...*GV(1)*GW(1)*...*GW(N-1) C C WHERE GV(I), GW(I) ARE GIVENS ROTATIONS IN THE (I,N) PLANE C WHICH ELIMINATE ELEMENTS IN THE I-TH AND N-TH PLANES, C RESPECTIVELY. Q ITSELF IS NOT ACCUMULATED, RATHER THE C INFORMATION TO RECOVER THE GV, GW ROTATIONS IS RETURNED. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE R1UPDT(M,N,S,LS,U,V,W,SING) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF ROWS OF S. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF S. N MUST NOT EXCEED M. C C S IS AN ARRAY OF LENGTH LS. ON INPUT S MUST CONTAIN THE LOWER C TRAPEZOIDAL MATRIX S STORED BY COLUMNS. ON OUTPUT S CONTAINS C THE LOWER TRAPEZOIDAL MATRIX PRODUCED AS DESCRIBED ABOVE. C C LS IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C (N*(2*M-N+1))/2. C C U IS AN INPUT ARRAY OF LENGTH M WHICH MUST CONTAIN THE C VECTOR U. C C V IS AN ARRAY OF LENGTH N. ON INPUT V MUST CONTAIN THE VECTOR C V. ON OUTPUT V(I) CONTAINS THE INFORMATION NECESSARY TO C RECOVER THE GIVENS ROTATION GV(I) DESCRIBED ABOVE. C C W IS AN OUTPUT ARRAY OF LENGTH M. W(I) CONTAINS INFORMATION C NECESSARY TO RECOVER THE GIVENS ROTATION GW(I) DESCRIBED C ABOVE. C C SING IS A LOGICAL OUTPUT VARIABLE. SING IS SET TRUE IF ANY C OF THE DIAGONAL ELEMENTS OF THE OUTPUT S ARE ZERO. OTHERWISE C SING IS SET FALSE. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... DPMPAR C C FORTRAN-SUPPLIED ... DABS,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE, C JOHN L. NAZARETH C C ********** INTEGER I,J,JJ,L,NMJ,NM1 DOUBLE PRECISION COS,COTAN,GIANT,ONE,P5,P25,SIN,TAN,TAU,TEMP, * ZERO DOUBLE PRECISION DPMPAR DATA ONE,P5,P25,ZERO /1.0D0,5.0D-1,2.5D-1,0.0D0/ C C GIANT IS THE LARGEST MAGNITUDE. C GIANT = DPMPAR(3) C C INITIALIZE THE DIAGONAL ELEMENT POINTER. C JJ = (N*(2*M - N + 1))/2 - (M - N) C C MOVE THE NONTRIVIAL PART OF THE LAST COLUMN OF S INTO W. C L = JJ DO 10 I = N, M W(I) = S(L) L = L + 1 10 CONTINUE C C ROTATE THE VECTOR V INTO A MULTIPLE OF THE N-TH UNIT VECTOR C IN SUCH A WAY THAT A SPIKE IS INTRODUCED INTO W. C NM1 = N - 1 IF (NM1 .LT. 1) GO TO 70 DO 60 NMJ = 1, NM1 J = N - NMJ JJ = JJ - (M - J + 1) W(J) = ZERO IF (V(J) .EQ. ZERO) GO TO 50 C C DETERMINE A GIVENS ROTATION WHICH ELIMINATES THE C J-TH ELEMENT OF V. C IF (DABS(V(N)) .GE. DABS(V(J))) GO TO 20 COTAN = V(N)/V(J) SIN = P5/DSQRT(P25+P25*COTAN**2) COS = SIN*COTAN TAU = ONE IF (DABS(COS)*GIANT .GT. ONE) TAU = ONE/COS GO TO 30 20 CONTINUE TAN = V(J)/V(N) COS = P5/DSQRT(P25+P25*TAN**2) SIN = COS*TAN TAU = SIN 30 CONTINUE C C APPLY THE TRANSFORMATION TO V AND STORE THE INFORMATION C NECESSARY TO RECOVER THE GIVENS ROTATION. C V(N) = SIN*V(J) + COS*V(N) V(J) = TAU C C APPLY THE TRANSFORMATION TO S AND EXTEND THE SPIKE IN W. C L = JJ DO 40 I = J, M TEMP = COS*S(L) - SIN*W(I) W(I) = SIN*S(L) + COS*W(I) S(L) = TEMP L = L + 1 40 CONTINUE 50 CONTINUE 60 CONTINUE 70 CONTINUE C C ADD THE SPIKE FROM THE RANK 1 UPDATE TO W. C DO 80 I = 1, M W(I) = W(I) + V(N)*U(I) 80 CONTINUE C C ELIMINATE THE SPIKE. C SING = .FALSE. IF (NM1 .LT. 1) GO TO 140 DO 130 J = 1, NM1 IF (W(J) .EQ. ZERO) GO TO 120 C C DETERMINE A GIVENS ROTATION WHICH ELIMINATES THE C J-TH ELEMENT OF THE SPIKE. C IF (DABS(S(JJ)) .GE. DABS(W(J))) GO TO 90 COTAN = S(JJ)/W(J) SIN = P5/DSQRT(P25+P25*COTAN**2) COS = SIN*COTAN TAU = ONE IF (DABS(COS)*GIANT .GT. ONE) TAU = ONE/COS GO TO 100 90 CONTINUE TAN = W(J)/S(JJ) COS = P5/DSQRT(P25+P25*TAN**2) SIN = COS*TAN TAU = SIN 100 CONTINUE C C APPLY THE TRANSFORMATION TO S AND REDUCE THE SPIKE IN W. C L = JJ DO 110 I = J, M TEMP = COS*S(L) + SIN*W(I) W(I) = -SIN*S(L) + COS*W(I) S(L) = TEMP L = L + 1 110 CONTINUE C C STORE THE INFORMATION NECESSARY TO RECOVER THE C GIVENS ROTATION. C W(J) = TAU 120 CONTINUE C C TEST FOR ZERO DIAGONAL ELEMENTS IN THE OUTPUT S. C IF (S(JJ) .EQ. ZERO) SING = .TRUE. JJ = JJ + (M - J + 1) 130 CONTINUE 140 CONTINUE C C MOVE W BACK INTO THE LAST COLUMN OF THE OUTPUT S. C L = JJ DO 150 I = N, M S(L) = W(I) L = L + 1 150 CONTINUE IF (S(JJ) .EQ. ZERO) SING = .TRUE. RETURN C C LAST CARD OF SUBROUTINE R1UPDT. C END PyBDSF-1.10.1/src/minpack/ex/file06000066400000000000000000005066771420247104600165030ustar00rootroot000000000000001 0 Page 0 Documentation for MINPACK subroutine HYBRD1 0 Double precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of HYBRD1 is to find a zero of a system of N non- linear functions in N variables by a modification of the Powell hybrid method. This is done by using the more general nonlinea equation solver HYBRD. The user must provide a subroutine whic calculates the functions. The Jacobian is then calculated by a forward-difference approximation. 0 2. Subroutine and type statements. 0 SUBROUTINE HYBRD1(FCN,N,X,FVEC,TOL,INFO,WA,LWA) INTEGER N,INFO,LWA DOUBLE PRECISION TOL DOUBLE PRECISION X(N),FVEC(N),WA(LWA) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to HYBRD1 and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from HYBRD1. 0 FCN is the name of the user-supplied subroutine which calculate the functions. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows 0 SUBROUTINE FCN(N,X,FVEC,IFLAG) INTEGER N,IFLAG DOUBLE PRECISION X(N),FVEC(N) ---------- CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. ---------- RETURN END 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of HYBRD1. In this case se IFLAG to a negative integer. 1 0 Page 0 N is a positive integer input variable set to the number of functions and variables. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length N which contains the function evaluated at the output X. 0 TOL is a nonnegative input variable. Termination occurs when the algorithm estimates that the relative error between X and the solution is at most TOL. Section 4 contains more details about TOL. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Algorithm estimates that the relative error between X and the solution is at most TOL. 0 INFO = 2 Number of calls to FCN has reached or exceeded 200*(N+1). 0 INFO = 3 TOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 4 Iteration is not making good progress. 0 Sections 4 and 5 contain more details about INFO. 0 WA is a work array of length LWA. 0 LWA is a positive integer input variable not less than (N*(3*N+13))/2. 0 4. Successful completion. 0 The accuracy of HYBRD1 is controlled by the convergence parame- ter TOL. This parameter is used in a test which makes a compar ison between the approximation X and a solution XSOL. HYBRD1 terminates when the test is satisfied. If TOL is less than the machine precision (as defined by the MINPACK function DPMPAR(1)), then HYBRD1 only attempts to satisfy the test defined by the machine precision. Further progress is not usu- ally possible. Unless high precision solutions are required, the recommended value for TOL is the square root of the machine precision. 0 The test assumes that the functions are reasonably well behaved 1 0 Page 0 If this condition is not satisfied, then HYBRD1 may incorrectly indicate convergence. The validity of the answer can be checked, for example, by rerunning HYBRD1 with a tighter toler- ance. 0 Convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(X-XSOL) .LE. TOL*ENORM(XSOL). 0 If this condition is satisfied with TOL = 10**(-K), then the larger components of X have K significant decimal digits and INFO is set to 1. There is a danger that the smaller compo- nents of X may have large relative errors, but the fast rate of convergence of HYBRD1 usually avoids this possibility. 0 5. Unsuccessful completion. 0 Unsuccessful termination of HYBRD1 can be due to improper input parameters, arithmetic interrupts, an excessive number of func- tion evaluations, errors in the functions, or lack of good prog ress. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or TOL .LT. 0.D0, or LWA .LT. (N*(3*N+13))/2. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by HYBRD1. In this case, it may be possible to remedy the situation by not evalu ating the functions here, but instead setting the components of FVEC to numbers that exceed those in the initial FVEC, thereby indirectly reducing the step length. The step length can be more directly controlled by using instead HYBRD, which includes in its calling sequence the step-length- governing parameter FACTOR. 0 Excessive number of function evaluations. If the number of calls to FCN reaches 200*(N+1), then this indicates that the routine is converging very slowly as measured by the progress of FVEC, and INFO is set to 2. This situation should be unu- sual because, as indicated below, lack of good progress is usually diagnosed earlier by HYBRD1, causing termination with INFO = 4. 0 Errors in the functions. The choice of step length in the for- ward-difference approximation to the Jacobian assumes that th relative errors in the functions are of the order of the machine precision. If this is not the case, HYBRD1 may fail (usually with INFO = 4). The user should then use HYBRD instead, or one of the programs which require the analytic Jacobian (HYBRJ1 and HYBRJ). 1 0 Page 0 Lack of good progress. HYBRD1 searches for a zero of the syste by minimizing the sum of the squares of the functions. In so doing, it can become trapped in a region where the minimum does not correspond to a zero of the system and, in this situ ation, the iteration eventually fails to make good progress. In particular, this will happen if the system does not have a zero. If the system has a zero, rerunning HYBRD1 from a dif- ferent starting point may be helpful. 0 6. Characteristics of the algorithm. 0 HYBRD1 is a modification of the Powell hybrid method. Two of its main characteristics involve the choice of the correction a a convex combination of the Newton and scaled gradient direc- tions, and the updating of the Jacobian by the rank-1 method of Broyden. The choice of the correction guarantees (under reason able conditions) global convergence for starting points far fro the solution and a fast rate of convergence. The Jacobian is approximated by forward differences at the starting point, but forward differences are not used again until the rank-1 method fails to produce satisfactory progress. 0 Timing. The time required by HYBRD1 to solve a given problem depends on N, the behavior of the functions, the accuracy requested, and the starting point. The number of arithmetic operations needed by HYBRD1 is about 11.5*(N**2) to process each call to FCN. Unless FCN can be evaluated quickly, the timing of HYBRD1 will be strongly influenced by the time spen in FCN. 0 Storage. HYBRD1 requires (3*N**2 + 17*N)/2 double precision storage locations, in addition to the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DOGLEG,DPMPAR,ENORM,FDJAC1,HYBRD, QFORM,QRFAC,R1MPYQ,R1UPDT 0 FORTRAN-supplied ... DABS,DMAX1,DMIN1,DSQRT,MIN0,MOD 0 8. References. 0 M. J. D. Powell, A Hybrid Method for Nonlinear Equations. Numerical Methods for Nonlinear Algebraic Equations, P. Rabinowitz, editor. Gordon and Breach, 1970. 0 9. Example. 1 0 Page 0 The problem is to determine the values of x(1), x(2), ..., x(9) which solve the system of tridiagonal equations 0 (3-2*x(1))*x(1) -2*x(2) = -1 -x(i-1) + (3-2*x(i))*x(i) -2*x(i+1) = -1, i=2-8 -x(8) + (3-2*x(9))*x(9) = -1 0 C ********** C C DRIVER FOR HYBRD1 EXAMPLE. C DOUBLE PRECISION VERSION C C ********** INTEGER J,N,INFO,LWA,NWRITE DOUBLE PRECISION TOL,FNORM DOUBLE PRECISION X(9),FVEC(9),WA(180) DOUBLE PRECISION ENORM,DPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C N = 9 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH SOLUTION. C DO 10 J = 1, 9 X(J) = -1.D0 10 CONTINUE C LWA = 180 C C SET TOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C TOL = DSQRT(DPMPAR(1)) C CALL HYBRD1(FCN,N,X,FVEC,TOL,INFO,WA,LWA) FNORM = ENORM(N,FVEC) WRITE (NWRITE,1000) FNORM,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,D15.7 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // (5X,3D15.7)) C C LAST CARD OF DRIVER FOR HYBRD1 EXAMPLE. C END SUBROUTINE FCN(N,X,FVEC,IFLAG) INTEGER N,IFLAG DOUBLE PRECISION X(N),FVEC(N) C 1 0 Page 0 C SUBROUTINE FCN FOR HYBRD1 EXAMPLE. C INTEGER K DOUBLE PRECISION ONE,TEMP,TEMP1,TEMP2,THREE,TWO,ZERO DATA ZERO,ONE,TWO,THREE /0.D0,1.D0,2.D0,3.D0/ C DO 10 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.1192636D-07 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 -0.5706545D+00 -0.6816283D+00 -0.7017325D+00 -0.7042129D+00 -0.7013690D+00 -0.6918656D+00 -0.6657920D+00 -0.5960342D+00 -0.4164121D+00 1 0 1 0 Page 0 Documentation for MINPACK subroutine HYBRD 0 Double precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of HYBRD is to find a zero of a system of N non- linear functions in N variables by a modification of the Powell hybrid method. The user must provide a subroutine which calcu- lates the functions. The Jacobian is then calculated by a for- ward-difference approximation. 0 2. Subroutine and type statements. 0 SUBROUTINE HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN,DIAG, * MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC, * R,LR,QTF,WA1,WA2,WA3,WA4) INTEGER N,MAXFEV,ML,MU,MODE,NPRINT,INFO,NFEV,LDFJAC,LR DOUBLE PRECISION XTOL,EPSFCN,FACTOR DOUBLE PRECISION X(N),FVEC(N),DIAG(N),FJAC(LDFJAC,N),R(LR),QTF( * WA1(N),WA2(N),WA3(N),WA4(N) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to HYBRD and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from HYBRD. 0 FCN is the name of the user-supplied subroutine which calculate the functions. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows 0 SUBROUTINE FCN(N,X,FVEC,IFLAG) INTEGER N,IFLAG DOUBLE PRECISION X(N),FVEC(N) ---------- CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. ---------- RETURN END 0 The value of IFLAG should not be changed by FCN unless the 1 0 Page 0 user wants to terminate execution of HYBRD. In this case set IFLAG to a negative integer. 0 N is a positive integer input variable set to the number of functions and variables. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length N which contains the function evaluated at the output X. 0 XTOL is a nonnegative input variable. Termination occurs when the relative error between two consecutive iterates is at mos XTOL. Therefore, XTOL measures the relative error desired in the approximate solution. Section 4 contains more details about XTOL. 0 MAXFEV is a positive integer input variable. Termination occur when the number of calls to FCN is at least MAXFEV by the end of an iteration. 0 ML is a nonnegative integer input variable which specifies the number of subdiagonals within the band of the Jacobian matrix If the Jacobian is not banded, set ML to at least N - 1. 0 MU is a nonnegative integer input variable which specifies the number of superdiagonals within the band of the Jacobian matrix. If the Jacobian is not banded, set MU to at least N - 1. 0 EPSFCN is an input variable used in determining a suitable step for the forward-difference approximation. This approximation assumes that the relative errors in the functions are of the order of EPSFCN. If EPSFCN is less than the machine preci- sion, it is assumed that the relative errors in the functions are of the order of the machine precision. 0 DIAG is an array of length N. If MODE = 1 (see below), DIAG is internally set. If MODE = 2, DIAG must contain positive entries that serve as multiplicative scale factors for the variables. 0 MODE is an integer input variable. If MODE = 1, the variables will be scaled internally. If MODE = 2, the scaling is speci fied by the input DIAG. Other values of MODE are equivalent to MODE = 1. 0 FACTOR is a positive input variable used in determining the ini tial step bound. This bound is set to the product of FACTOR and the Euclidean norm of DIAG*X if nonzero, or else to FACTO itself. In most cases FACTOR should lie in the interval (.1,100.). 100. is a generally recommended value. 1 0 Page 0 NPRINT is an integer input variable that enables controlled printing of iterates if it is positive. In this case, FCN is called with IFLAG = 0 at the beginning of the first iteration and every NPRINT iterations thereafter and immediately prior to return, with X and FVEC available for printing. If NPRINT is not positive, no special calls of FCN with IFLAG = 0 are made. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Relative error between two consecutive iterates is at most XTOL. 0 INFO = 2 Number of calls to FCN has reached or exceeded MAXFEV. 0 INFO = 3 XTOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 4 Iteration is not making good progress, as measured by the improvement from the last five Jacobian eval uations. 0 INFO = 5 Iteration is not making good progress, as measured by the improvement from the last ten iterations. 0 Sections 4 and 5 contain more details about INFO. 0 NFEV is an integer output variable set to the number of calls t FCN. 0 FJAC is an output N by N array which contains the orthogonal matrix Q produced by the QR factorization of the final approx imate Jacobian. 0 LDFJAC is a positive integer input variable not less than N which specifies the leading dimension of the array FJAC. 0 R is an output array of length LR which contains the upper triangular matrix produced by the QR factorization of the final approximate Jacobian, stored rowwise. 0 LR is a positive integer input variable not less than (N*(N+1))/2. 0 QTF is an output array of length N which contains the vector (Q transpose)*FVEC. 0 WA1, WA2, WA3, and WA4 are work arrays of length N. 1 0 Page 0 4. Successful completion. 0 The accuracy of HYBRD is controlled by the convergence paramete XTOL. This parameter is used in a test which makes a compariso between the approximation X and a solution XSOL. HYBRD termi- nates when the test is satisfied. If the convergence parameter is less than the machine precision (as defined by the MINPACK function DPMPAR(1)), then HYBRD only attempts to satisfy the test defined by the machine precision. Further progress is not usually possible. 0 The test assumes that the functions are reasonably well behaved If this condition is not satisfied, then HYBRD may incorrectly indicate convergence. The validity of the answer can be checked, for example, by rerunning HYBRD with a tighter toler- ance. 0 Convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z and D is the diagonal matrix whose entries are defined by the array DIAG, then this test attempts to guaran- tee that 0 ENORM(D*(X-XSOL)) .LE. XTOL*ENORM(D*XSOL). 0 If this condition is satisfied with XTOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 1. There is a danger that the smaller compo- nents of D*X may have large relative errors, but the fast rat of convergence of HYBRD usually avoids this possibility. Unless high precision solutions are required, the recommended value for XTOL is the square root of the machine precision. 0 5. Unsuccessful completion. 0 Unsuccessful termination of HYBRD can be due to improper input parameters, arithmetic interrupts, an excessive number of func- tion evaluations, or lack of good progress. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or XTOL .LT. 0.D0, or MAXFEV .LE. 0, or ML .LT. 0, or MU .LT. 0, or FACTOR .LE. 0.D0, or LDFJAC .LT. N, or LR .LT. (N*(N+1))/2 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by HYBRD. In this case, it may be possible to remedy the situation by rerunning HYBRD with a smaller value of FACTOR. 0 Excessive number of function evaluations. A reasonable value for MAXFEV is 200*(N+1). If the number of calls to FCN reaches MAXFEV, then this indicates that the routine is con- verging very slowly as measured by the progress of FVEC, and 1 0 Page 0 INFO is set to 2. This situation should be unusual because, as indicated below, lack of good progress is usually diagnose earlier by HYBRD, causing termination with INFO = 4 or INFO = 5. 0 Lack of good progress. HYBRD searches for a zero of the system by minimizing the sum of the squares of the functions. In so doing, it can become trapped in a region where the minimum does not correspond to a zero of the system and, in this situ ation, the iteration eventually fails to make good progress. In particular, this will happen if the system does not have a zero. If the system has a zero, rerunning HYBRD from a dif- ferent starting point may be helpful. 0 6. Characteristics of the algorithm. 0 HYBRD is a modification of the Powell hybrid method. Two of it main characteristics involve the choice of the correction as a convex combination of the Newton and scaled gradient directions and the updating of the Jacobian by the rank-1 method of Broy- den. The choice of the correction guarantees (under reasonable conditions) global convergence for starting points far from the solution and a fast rate of convergence. The Jacobian is approximated by forward differences at the starting point, but forward differences are not used again until the rank-1 method fails to produce satisfactory progress. 0 Timing. The time required by HYBRD to solve a given problem depends on N, the behavior of the functions, the accuracy requested, and the starting point. The number of arithmetic operations needed by HYBRD is about 11.5*(N**2) to process each call to FCN. Unless FCN can be evaluated quickly, the timing of HYBRD will be strongly influenced by the time spent in FCN. 0 Storage. HYBRD requires (3*N**2 + 17*N)/2 double precision storage locations, in addition to the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DOGLEG,DPMPAR,ENORM,FDJAC1, QFORM,QRFAC,R1MPYQ,R1UPDT 0 FORTRAN-supplied ... DABS,DMAX1,DMIN1,DSQRT,MIN0,MOD 0 8. References. 0 M. J. D. Powell, A Hybrid Method for Nonlinear Equations. 1 0 Page 0 Numerical Methods for Nonlinear Algebraic Equations, P. Rabinowitz, editor. Gordon and Breach, 1970. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), ..., x(9) which solve the system of tridiagonal equations 0 (3-2*x(1))*x(1) -2*x(2) = -1 -x(i-1) + (3-2*x(i))*x(i) -2*x(i+1) = -1, i=2-8 -x(8) + (3-2*x(9))*x(9) = -1 0 C ********** C C DRIVER FOR HYBRD EXAMPLE. C DOUBLE PRECISION VERSION C C ********** INTEGER J,N,MAXFEV,ML,MU,MODE,NPRINT,INFO,NFEV,LDFJAC,LR,NWRITE DOUBLE PRECISION XTOL,EPSFCN,FACTOR,FNORM DOUBLE PRECISION X(9),FVEC(9),DIAG(9),FJAC(9,9),R(45),QTF(9), * WA1(9),WA2(9),WA3(9),WA4(9) DOUBLE PRECISION ENORM,DPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C N = 9 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH SOLUTION. C DO 10 J = 1, 9 X(J) = -1.D0 10 CONTINUE C LDFJAC = 9 LR = 45 C C SET XTOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C XTOL = DSQRT(DPMPAR(1)) C MAXFEV = 2000 ML = 1 MU = 1 EPSFCN = 0.D0 MODE = 2 DO 20 J = 1, 9 DIAG(J) = 1.D0 1 0 Page 0 20 CONTINUE FACTOR = 1.D2 NPRINT = 0 C CALL HYBRD(FCN,N,X,FVEC,XTOL,MAXFEV,ML,MU,EPSFCN,DIAG, * MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC, * R,LR,QTF,WA1,WA2,WA3,WA4) FNORM = ENORM(N,FVEC) WRITE (NWRITE,1000) FNORM,NFEV,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,D15.7 // * 5X,31H NUMBER OF FUNCTION EVALUATIONS,I10 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // (5X,3D15.7)) C C LAST CARD OF DRIVER FOR HYBRD EXAMPLE. C END SUBROUTINE FCN(N,X,FVEC,IFLAG) INTEGER N,IFLAG DOUBLE PRECISION X(N),FVEC(N) C C SUBROUTINE FCN FOR HYBRD EXAMPLE. C INTEGER K DOUBLE PRECISION ONE,TEMP,TEMP1,TEMP2,THREE,TWO,ZERO DATA ZERO,ONE,TWO,THREE /0.D0,1.D0,2.D0,3.D0/ C IF (IFLAG .NE. 0) GO TO 5 C C INSERT PRINT STATEMENTS HERE WHEN NPRINT IS POSITIVE. C RETURN 5 CONTINUE DO 10 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.1192636D-07 0 NUMBER OF FUNCTION EVALUATIONS 14 1 0 Page 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 -0.5706545D+00 -0.6816283D+00 -0.7017325D+00 -0.7042129D+00 -0.7013690D+00 -0.6918656D+00 -0.6657920D+00 -0.5960342D+00 -0.4164121D+00 1 0 1 0 Page 0 Documentation for MINPACK subroutine HYBRJ1 0 Double precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of HYBRJ1 is to find a zero of a system of N non- linear functions in N variables by a modification of the Powell hybrid method. This is done by using the more general nonlinea equation solver HYBRJ. The user must provide a subroutine whic calculates the functions and the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA) INTEGER N,LDFJAC,INFO,LWA DOUBLE PRECISION TOL DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to HYBRJ1 and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from HYBRJ1. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows. 0 SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER N,LDFJAC,IFLAG DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. ---------- RETURN END 0 The value of IFLAG should not be changed by FCN unless the 1 0 Page 0 user wants to terminate execution of HYBRJ1. In this case se IFLAG to a negative integer. 0 N is a positive integer input variable set to the number of functions and variables. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length N which contains the function evaluated at the output X. 0 FJAC is an output N by N array which contains the orthogonal matrix Q produced by the QR factorization of the final approx imate Jacobian. Section 6 contains more details about the approximation to the Jacobian. 0 LDFJAC is a positive integer input variable not less than N which specifies the leading dimension of the array FJAC. 0 TOL is a nonnegative input variable. Termination occurs when the algorithm estimates that the relative error between X and the solution is at most TOL. Section 4 contains more details about TOL. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Algorithm estimates that the relative error between X and the solution is at most TOL. 0 INFO = 2 Number of calls to FCN with IFLAG = 1 has reached 100*(N+1). 0 INFO = 3 TOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 4 Iteration is not making good progress. 0 Sections 4 and 5 contain more details about INFO. 0 WA is a work array of length LWA. 0 LWA is a positive integer input variable not less than (N*(N+13))/2. 0 4. Successful completion. 0 The accuracy of HYBRJ1 is controlled by the convergence 1 0 Page 0 parameter TOL. This parameter is used in a test which makes a comparison between the approximation X and a solution XSOL. HYBRJ1 terminates when the test is satisfied. If TOL is less than the machine precision (as defined by the MINPACK function DPMPAR(1)), then HYBRJ1 only attempts to satisfy the test defined by the machine precision. Further progress is not usu- ally possible. Unless high precision solutions are required, the recommended value for TOL is the square root of the machine precision. 0 The test assumes that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then HYBRJ1 ma incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning HYBRJ1 with a tighter toler- ance. 0 Convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(X-XSOL) .LE. TOL*ENORM(XSOL). 0 If this condition is satisfied with TOL = 10**(-K), then the larger components of X have K significant decimal digits and INFO is set to 1. There is a danger that the smaller compo- nents of X may have large relative errors, but the fast rate of convergence of HYBRJ1 usually avoids this possibility. 0 5. Unsuccessful completion. 0 Unsuccessful termination of HYBRJ1 can be due to improper input parameters, arithmetic interrupts, an excessive number of func- tion evaluations, or lack of good progress. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or LDFJAC .LT. N, or TOL .LT. 0.D0, or LWA .LT. (N*(N+13))/2. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by HYBRJ1. In this case, it may be possible to remedy the situation by not evalu ating the functions here, but instead setting the components of FVEC to numbers that exceed those in the initial FVEC, thereby indirectly reducing the step length. The step length can be more directly controlled by using instead HYBRJ, which includes in its calling sequence the step-length- governing parameter FACTOR. 0 Excessive number of function evaluations. If the number of calls to FCN with IFLAG = 1 reaches 100*(N+1), then this indi cates that the routine is converging very slowly as measured 1 0 Page 0 by the progress of FVEC, and INFO is set to 2. This situatio should be unusual because, as indicated below, lack of good progress is usually diagnosed earlier by HYBRJ1, causing ter- mination with INFO = 4. 0 Lack of good progress. HYBRJ1 searches for a zero of the syste by minimizing the sum of the squares of the functions. In so doing, it can become trapped in a region where the minimum does not correspond to a zero of the system and, in this situ ation, the iteration eventually fails to make good progress. In particular, this will happen if the system does not have a zero. If the system has a zero, rerunning HYBRJ1 from a dif- ferent starting point may be helpful. 0 6. Characteristics of the algorithm. 0 HYBRJ1 is a modification of the Powell hybrid method. Two of its main characteristics involve the choice of the correction a a convex combination of the Newton and scaled gradient direc- tions, and the updating of the Jacobian by the rank-1 method of Broyden. The choice of the correction guarantees (under reason able conditions) global convergence for starting points far fro the solution and a fast rate of convergence. The Jacobian is calculated at the starting point, but it is not recalculated until the rank-1 method fails to produce satisfactory progress. 0 Timing. The time required by HYBRJ1 to solve a given problem depends on N, the behavior of the functions, the accuracy requested, and the starting point. The number of arithmetic operations needed by HYBRJ1 is about 11.5*(N**2) to process each evaluation of the functions (call to FCN with IFLAG = 1) and 1.3*(N**3) to process each evaluation of the Jacobian (call to FCN with IFLAG = 2). Unless FCN can be evaluated quickly, the timing of HYBRJ1 will be strongly influenced by the time spent in FCN. 0 Storage. HYBRJ1 requires (3*N**2 + 17*N)/2 double precision storage locations, in addition to the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DOGLEG,DPMPAR,ENORM,HYBRJ, QFORM,QRFAC,R1MPYQ,R1UPDT 0 FORTRAN-supplied ... DABS,DMAX1,DMIN1,DSQRT,MIN0,MOD 0 8. References. 1 0 Page 0 M. J. D. Powell, A Hybrid Method for Nonlinear Equations. Numerical Methods for Nonlinear Algebraic Equations, P. Rabinowitz, editor. Gordon and Breach, 1970. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), ..., x(9) which solve the system of tridiagonal equations 0 (3-2*x(1))*x(1) -2*x(2) = -1 -x(i-1) + (3-2*x(i))*x(i) -2*x(i+1) = -1, i=2-8 -x(8) + (3-2*x(9))*x(9) = -1 0 C ********** C C DRIVER FOR HYBRJ1 EXAMPLE. C DOUBLE PRECISION VERSION C C ********** INTEGER J,N,LDFJAC,INFO,LWA,NWRITE DOUBLE PRECISION TOL,FNORM DOUBLE PRECISION X(9),FVEC(9),FJAC(9,9),WA(99) DOUBLE PRECISION ENORM,DPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C N = 9 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH SOLUTION. C DO 10 J = 1, 9 X(J) = -1.D0 10 CONTINUE C LDFJAC = 9 LWA = 99 C C SET TOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C TOL = DSQRT(DPMPAR(1)) C CALL HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA) FNORM = ENORM(N,FVEC) WRITE (NWRITE,1000) FNORM,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,D15.7 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // (5X,3D15.7)) 1 0 Page 0 C C LAST CARD OF DRIVER FOR HYBRJ1 EXAMPLE. C END SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER N,LDFJAC,IFLAG DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N) C C SUBROUTINE FCN FOR HYBRJ1 EXAMPLE. C INTEGER J,K DOUBLE PRECISION ONE,TEMP,TEMP1,TEMP2,THREE,TWO,ZERO DATA ZERO,ONE,TWO,THREE,FOUR /0.D0,1.D0,2.D0,3.D0,4.D0/ C IF (IFLAG .EQ. 2) GO TO 20 DO 10 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 10 CONTINUE GO TO 50 20 CONTINUE DO 40 K = 1, N DO 30 J = 1, N FJAC(K,J) = ZERO 30 CONTINUE FJAC(K,K) = THREE - FOUR*X(K) IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -TWO 40 CONTINUE 50 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.1192636D-07 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 -0.5706545D+00 -0.6816283D+00 -0.7017325D+00 -0.7042129D+00 -0.7013690D+00 -0.6918656D+00 -0.6657920D+00 -0.5960342D+00 -0.4164121D+00 1 0 1 0 Page 0 Documentation for MINPACK subroutine HYBRJ 0 Double precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of HYBRJ is to find a zero of a system of N non- linear functions in N variables by a modification of the Powell hybrid method. The user must provide a subroutine which calcu- lates the functions and the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE HYBRJ(FCN,N,X,FVEC,FJAC,LDFJAC,XTOL,MAXFEV,DIAG, * MODE,FACTOR,NPRINT,INFO,NFEV,NJEV,R,LR,QTF, * WA1,WA2,WA3,WA4) INTEGER N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV,LR DOUBLE PRECISION XTOL,FACTOR DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N),DIAG(N),R(LR),QTF( * WA1(N),WA2(N),WA3(N),WA4(N) 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to HYBRJ and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from HYBRJ. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows. 0 SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER N,LDFJAC,IFLAG DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. ---------- RETURN END 1 0 Page 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of HYBRJ. In this case set IFLAG to a negative integer. 0 N is a positive integer input variable set to the number of functions and variables. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length N which contains the function evaluated at the output X. 0 FJAC is an output N by N array which contains the orthogonal matrix Q produced by the QR factorization of the final approx imate Jacobian. Section 6 contains more details about the approximation to the Jacobian. 0 LDFJAC is a positive integer input variable not less than N which specifies the leading dimension of the array FJAC. 0 XTOL is a nonnegative input variable. Termination occurs when the relative error between two consecutive iterates is at mos XTOL. Therefore, XTOL measures the relative error desired in the approximate solution. Section 4 contains more details about XTOL. 0 MAXFEV is a positive integer input variable. Termination occur when the number of calls to FCN with IFLAG = 1 has reached MAXFEV. 0 DIAG is an array of length N. If MODE = 1 (see below), DIAG is internally set. If MODE = 2, DIAG must contain positive entries that serve as multiplicative scale factors for the variables. 0 MODE is an integer input variable. If MODE = 1, the variables will be scaled internally. If MODE = 2, the scaling is speci fied by the input DIAG. Other values of MODE are equivalent to MODE = 1. 0 FACTOR is a positive input variable used in determining the ini tial step bound. This bound is set to the product of FACTOR and the Euclidean norm of DIAG*X if nonzero, or else to FACTO itself. In most cases FACTOR should lie in the interval (.1,100.). 100. is a generally recommended value. 0 NPRINT is an integer input variable that enables controlled printing of iterates if it is positive. In this case, FCN is called with IFLAG = 0 at the beginning of the first iteration and every NPRINT iterations thereafter and immediately prior to return, with X and FVEC available for printing. FVEC and FJAC should not be altered. If NPRINT is not positive, no 1 0 Page 0 special calls of FCN with IFLAG = 0 are made. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Relative error between two consecutive iterates is at most XTOL. 0 INFO = 2 Number of calls to FCN with IFLAG = 1 has reached MAXFEV. 0 INFO = 3 XTOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 4 Iteration is not making good progress, as measured by the improvement from the last five Jacobian eval uations. 0 INFO = 5 Iteration is not making good progress, as measured by the improvement from the last ten iterations. 0 Sections 4 and 5 contain more details about INFO. 0 NFEV is an integer output variable set to the number of calls t FCN with IFLAG = 1. 0 NJEV is an integer output variable set to the number of calls t FCN with IFLAG = 2. 0 R is an output array of length LR which contains the upper triangular matrix produced by the QR factorization of the final approximate Jacobian, stored rowwise. 0 LR is a positive integer input variable not less than (N*(N+1))/2. 0 QTF is an output array of length N which contains the vector (Q transpose)*FVEC. 0 WA1, WA2, WA3, and WA4 are work arrays of length N. 0 4. Successful completion. 0 The accuracy of HYBRJ is controlled by the convergence paramete XTOL. This parameter is used in a test which makes a compariso between the approximation X and a solution XSOL. HYBRJ termi- nates when the test is satisfied. If the convergence parameter is less than the machine precision (as defined by the MINPACK function DPMPAR(1)), then HYBRJ only attempts to satisfy the test defined by the machine precision. Further progress is not 1 0 Page 0 usually possible. 0 The test assumes that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then HYBRJ may incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning HYBRJ with a tighter toler- ance. 0 Convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z and D is the diagonal matrix whose entries are defined by the array DIAG, then this test attempts to guaran- tee that 0 ENORM(D*(X-XSOL)) .LE. XTOL*ENORM(D*XSOL). 0 If this condition is satisfied with XTOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 1. There is a danger that the smaller compo- nents of D*X may have large relative errors, but the fast rat of convergence of HYBRJ usually avoids this possibility. Unless high precision solutions are required, the recommended value for XTOL is the square root of the machine precision. 0 5. Unsuccessful completion. 0 Unsuccessful termination of HYBRJ can be due to improper input parameters, arithmetic interrupts, an excessive number of func- tion evaluations, or lack of good progress. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or LDFJAC .LT. N, or XTOL .LT. 0.D0, or MAXFEV .LE. 0, or FACTOR .LE. 0.D0, or LR .LT. (N*(N+1))/2. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by HYBRJ. In this case, it may be possible to remedy the situation by rerunning HYBRJ with a smaller value of FACTOR. 0 Excessive number of function evaluations. A reasonable value for MAXFEV is 100*(N+1). If the number of calls to FCN with IFLAG = 1 reaches MAXFEV, then this indicates that the routin is converging very slowly as measured by the progress of FVEC and INFO is set to 2. This situation should be unusual because, as indicated below, lack of good progress is usually diagnosed earlier by HYBRJ, causing termination with INFO = 4 or INFO = 5. 0 Lack of good progress. HYBRJ searches for a zero of the system by minimizing the sum of the squares of the functions. In so 1 0 Page 0 doing, it can become trapped in a region where the minimum does not correspond to a zero of the system and, in this situ ation, the iteration eventually fails to make good progress. In particular, this will happen if the system does not have a zero. If the system has a zero, rerunning HYBRJ from a dif- ferent starting point may be helpful. 0 6. Characteristics of the algorithm. 0 HYBRJ is a modification of the Powell hybrid method. Two of it main characteristics involve the choice of the correction as a convex combination of the Newton and scaled gradient directions and the updating of the Jacobian by the rank-1 method of Broy- den. The choice of the correction guarantees (under reasonable conditions) global convergence for starting points far from the solution and a fast rate of convergence. The Jacobian is calcu lated at the starting point, but it is not recalculated until the rank-1 method fails to produce satisfactory progress. 0 Timing. The time required by HYBRJ to solve a given problem depends on N, the behavior of the functions, the accuracy requested, and the starting point. The number of arithmetic operations needed by HYBRJ is about 11.5*(N**2) to process each evaluation of the functions (call to FCN with IFLAG = 1) and 1.3*(N**3) to process each evaluation of the Jacobian (call to FCN with IFLAG = 2). Unless FCN can be evaluated quickly, the timing of HYBRJ will be strongly influenced by the time spent in FCN. 0 Storage. HYBRJ requires (3*N**2 + 17*N)/2 double precision storage locations, in addition to the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DOGLEG,DPMPAR,ENORM, QFORM,QRFAC,R1MPYQ,R1UPDT 0 FORTRAN-supplied ... DABS,DMAX1,DMIN1,DSQRT,MIN0,MOD 0 8. References. 0 M. J. D. Powell, A Hybrid Method for Nonlinear Equations. Numerical Methods for Nonlinear Algebraic Equations, P. Rabinowitz, editor. Gordon and Breach, 1970. 0 9. Example. 1 0 Page 0 The problem is to determine the values of x(1), x(2), ..., x(9) which solve the system of tridiagonal equations 0 (3-2*x(1))*x(1) -2*x(2) = -1 -x(i-1) + (3-2*x(i))*x(i) -2*x(i+1) = -1, i=2-8 -x(8) + (3-2*x(9))*x(9) = -1 0 C ********** C C DRIVER FOR HYBRJ EXAMPLE. C DOUBLE PRECISION VERSION C C ********** INTEGER J,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV,LR,NWRITE DOUBLE PRECISION XTOL,FACTOR,FNORM DOUBLE PRECISION X(9),FVEC(9),FJAC(9,9),DIAG(9),R(45),QTF(9), * WA1(9),WA2(9),WA3(9),WA4(9) DOUBLE PRECISION ENORM,DPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C N = 9 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH SOLUTION. C DO 10 J = 1, 9 X(J) = -1.D0 10 CONTINUE C LDFJAC = 9 LR = 45 C C SET XTOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C XTOL = DSQRT(DPMPAR(1)) C MAXFEV = 1000 MODE = 2 DO 20 J = 1, 9 DIAG(J) = 1.D0 20 CONTINUE FACTOR = 1.D2 NPRINT = 0 C CALL HYBRJ(FCN,N,X,FVEC,FJAC,LDFJAC,XTOL,MAXFEV,DIAG, * MODE,FACTOR,NPRINT,INFO,NFEV,NJEV,R,LR,QTF, * WA1,WA2,WA3,WA4) FNORM = ENORM(N,FVEC) WRITE (NWRITE,1000) FNORM,NFEV,NJEV,INFO,(X(J),J=1,N) 1 0 Page 0 STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,D15.7 // * 5X,31H NUMBER OF FUNCTION EVALUATIONS,I10 // * 5X,31H NUMBER OF JACOBIAN EVALUATIONS,I10 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // (5X,3D15.7)) C C LAST CARD OF DRIVER FOR HYBRJ EXAMPLE. C END SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER N,LDFJAC,IFLAG DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N) C C SUBROUTINE FCN FOR HYBRJ EXAMPLE. C INTEGER J,K DOUBLE PRECISION ONE,TEMP,TEMP1,TEMP2,THREE,TWO,ZERO DATA ZERO,ONE,TWO,THREE,FOUR /0.D0,1.D0,2.D0,3.D0,4.D0/ C IF (IFLAG .NE. 0) GO TO 5 C C INSERT PRINT STATEMENTS HERE WHEN NPRINT IS POSITIVE. C RETURN 5 CONTINUE IF (IFLAG .EQ. 2) GO TO 20 DO 10 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 10 CONTINUE GO TO 50 20 CONTINUE DO 40 K = 1, N DO 30 J = 1, N FJAC(K,J) = ZERO 30 CONTINUE FJAC(K,K) = THREE - FOUR*X(K) IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -TWO 40 CONTINUE 50 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 1 0 Page 0 FINAL L2 NORM OF THE RESIDUALS 0.1192636D-07 0 NUMBER OF FUNCTION EVALUATIONS 11 0 NUMBER OF JACOBIAN EVALUATIONS 1 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 -0.5706545D+00 -0.6816283D+00 -0.7017325D+00 -0.7042129D+00 -0.7013690D+00 -0.6918656D+00 -0.6657920D+00 -0.5960342D+00 -0.4164121D+00 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMDER1 0 Double precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMDER1 is to minimize the sum of the squares of nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm. This is done by using the more general least-squares solver LMDER. The user must provide a subroutine which calculates the functions and the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE LMDER1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL, * INFO,IPVT,WA,LWA) INTEGER M,N,LDFJAC,INFO,LWA INTEGER IPVT(N) DOUBLE PRECISION TOL DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMDER1 and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMDER1. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows. 0 SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER M,N,LDFJAC,IFLAG DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. ---------- RETURN END 1 0 Page 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMDER1. In this case se IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 FJAC is an output M by N array. The upper N by N submatrix of FJAC contains an upper triangular matrix R with diagonal ele- ments of nonincreasing magnitude such that 0 T T T P *(JAC *JAC)*P = R *R, 0 where P is a permutation matrix and JAC is the final calcu- lated Jacobian. Column j of P is column IPVT(j) (see below) of the identity matrix. The lower trapezoidal part of FJAC contains information generated during the computation of R. 0 LDFJAC is a positive integer input variable not less than M which specifies the leading dimension of the array FJAC. 0 TOL is a nonnegative input variable. Termination occurs when the algorithm estimates either that the relative error in the sum of squares is at most TOL or that the relative error between X and the solution is at most TOL. Section 4 contain more details about TOL. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Algorithm estimates that the relative error in the sum of squares is at most TOL. 0 INFO = 2 Algorithm estimates that the relative error between X and the solution is at most TOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 FVEC is orthogonal to the columns of the Jacobian t machine precision. 1 0 Page 0 INFO = 5 Number of calls to FCN with IFLAG = 1 has reached 100*(N+1). 0 INFO = 6 TOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 TOL is too small. No further improvement in the approximate solution X is possible. 0 Sections 4 and 5 contain more details about INFO. 0 IPVT is an integer output array of length N. IPVT defines a permutation matrix P such that JAC*P = Q*R, where JAC is the final calculated Jacobian, Q is orthogonal (not stored), and is upper triangular with diagonal elements of nonincreasing magnitude. Column j of P is column IPVT(j) of the identity matrix. 0 WA is a work array of length LWA. 0 LWA is a positive integer input variable not less than 5*N+M. 0 4. Successful completion. 0 The accuracy of LMDER1 is controlled by the convergence parame- ter TOL. This parameter is used in tests which make three type of comparisons between the approximation X and a solution XSOL. LMDER1 terminates when any of the tests is satisfied. If TOL i less than the machine precision (as defined by the MINPACK func tion DPMPAR(1)), then LMDER1 only attempts to satisfy the test defined by the machine precision. Further progress is not usu- ally possible. Unless high precision solutions are required, the recommended value for TOL is the square root of the machine precision. 0 The tests assume that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then LMDER1 ma incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning LMDER1 with a tighter toler- ance. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+TOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with TOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an INFO is set to 1 (or to 3 if the second test is also 1 0 Page 0 satisfied). 0 Second convergence test. If D is a diagonal matrix (implicitly generated by LMDER1) whose entries contain scale factors for the variables, then this test attempts to guarantee that 0 ENORM(D*(X-XSOL)) .LE. TOL*ENORM(D*XSOL). 0 If this condition is satisfied with TOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but the choice of D is such that the accuracy of the components of X is usually related t their sensitivity. 0 Third convergence test. This test is satisfied when FVEC is orthogonal to the columns of the Jacobian to machine preci- sion. There is no clear relationship between this test and the accuracy of LMDER1, and furthermore, the test is equally well satisfied at other critical points, namely maximizers an saddle points. Therefore, termination caused by this test (INFO = 4) should be examined carefully. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMDER1 can be due to improper input parameters, arithmetic interrupts, or an excessive number of function evaluations. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or LDFJAC .LT. M, or TOL .LT. 0.D0, or LWA .LT. 5*N+M. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMDER1. In this case, it may be possible to remedy the situation by not evalu ating the functions here, but instead setting the components of FVEC to numbers that exceed those in the initial FVEC, thereby indirectly reducing the step length. The step length can be more directly controlled by using instead LMDER, which includes in its calling sequence the step-length- governing parameter FACTOR. 0 Excessive number of function evaluations. If the number of calls to FCN with IFLAG = 1 reaches 100*(N+1), then this indi cates that the routine is converging very slowly as measured by the progress of FVEC, and INFO is set to 5. In this case, it may be helpful to restart LMDER1, thereby forcing it to disregard old (and possibly harmful) information. 0 1 0 Page 0 6. Characteristics of the algorithm. 0 LMDER1 is a modification of the Levenberg-Marquardt algorithm. Two of its main characteristics involve the proper use of implicitly scaled variables and an optimal choice for the cor- rection. The use of implicitly scaled variables achieves scale invariance of LMDER1 and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (under reasonable conditions) global convergence from starting points far from th solution and a fast rate of convergence for problems with small residuals. 0 Timing. The time required by LMDER1 to solve a given problem depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMDER1 is about N**3 to process each evaluation of the functions (call to FCN with IFLAG = 1) and M*(N**2) to process each evaluation of the Jacobian (call to FCN with IFLAG = 2). Unless FCN can be evaluated quickly, the timing of LMDER1 will be strongly influenced by the time spent in FCN. 0 Storage. LMDER1 requires M*N + 2*M + 6*N double precision sto- rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DPMPAR,ENORM,LMDER,LMPAR,QRFAC,QRSOLV 0 FORTRAN-supplied ... DABS,DMAX1,DMIN1,DSQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 1 0 Page 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMDER1 EXAMPLE. C DOUBLE PRECISION VERSION C C ********** INTEGER J,M,N,LDFJAC,INFO,LWA,NWRITE INTEGER IPVT(3) DOUBLE PRECISION TOL,FNORM DOUBLE PRECISION X(3),FVEC(15),FJAC(15,3),WA(30) DOUBLE PRECISION ENORM,DPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.D0 X(2) = 1.D0 X(3) = 1.D0 C LDFJAC = 15 LWA = 30 C C SET TOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C TOL = DSQRT(DPMPAR(1)) C CALL LMDER1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL, * INFO,IPVT,WA,LWA) FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,D15.7 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3D15.7) C C LAST CARD OF DRIVER FOR LMDER1 EXAMPLE. C 1 0 Page 0 END SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER M,N,LDFJAC,IFLAG DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N) C C SUBROUTINE FCN FOR LMDER1 EXAMPLE. C INTEGER I DOUBLE PRECISION TMP1,TMP2,TMP3,TMP4 DOUBLE PRECISION Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4D-1,1.8D-1,2.2D-1,2.5D-1,2.9D-1,3.2D-1,3.5D-1,3.9D-1, * 3.7D-1,5.8D-1,7.3D-1,9.6D-1,1.34D0,2.1D0,4.39D0/ C IF (IFLAG .EQ. 2) GO TO 20 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE GO TO 40 20 CONTINUE DO 30 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJAC(I,1) = -1.D0 FJAC(I,2) = TMP1*TMP2/TMP4 FJAC(I,3) = TMP1*TMP3/TMP4 30 CONTINUE 40 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596D-01 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 0.8241058D-01 0.1133037D+01 0.2343695D+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMDER 0 Double precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMDER is to minimize the sum of the squares of M nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm. The user must provide a subrou- tine which calculates the functions and the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE LMDER(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV INTEGER IPVT(N) DOUBLE PRECISION FTOL,XTOL,GTOL,FACTOR DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N),DIAG(N),QTF(N), * WA1(N),WA2(N),WA3(N),WA4(M) 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMDER and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMDER. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows. 0 SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER M,N,LDFJAC,IFLAG DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. DO NOT ALTER FJAC. IF IFLAG = 2 CALCULATE THE JACOBIAN AT X AND RETURN THIS MATRIX IN FJAC. DO NOT ALTER FVEC. ---------- RETURN END 1 0 Page 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMDER. In this case set IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 FJAC is an output M by N array. The upper N by N submatrix of FJAC contains an upper triangular matrix R with diagonal ele- ments of nonincreasing magnitude such that 0 T T T P *(JAC *JAC)*P = R *R, 0 where P is a permutation matrix and JAC is the final calcu- lated Jacobian. Column j of P is column IPVT(j) (see below) of the identity matrix. The lower trapezoidal part of FJAC contains information generated during the computation of R. 0 LDFJAC is a positive integer input variable not less than M which specifies the leading dimension of the array FJAC. 0 FTOL is a nonnegative input variable. Termination occurs when both the actual and predicted relative reductions in the sum of squares are at most FTOL. Therefore, FTOL measures the relative error desired in the sum of squares. Section 4 con- tains more details about FTOL. 0 XTOL is a nonnegative input variable. Termination occurs when the relative error between two consecutive iterates is at mos XTOL. Therefore, XTOL measures the relative error desired in the approximate solution. Section 4 contains more details about XTOL. 0 GTOL is a nonnegative input variable. Termination occurs when the cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. Therefore, GTOL measures the orthogonality desired between the function vecto and the columns of the Jacobian. Section 4 contains more details about GTOL. 0 MAXFEV is a positive integer input variable. Termination occur when the number of calls to FCN with IFLAG = 1 has reached MAXFEV. 1 0 Page 0 DIAG is an array of length N. If MODE = 1 (see below), DIAG is internally set. If MODE = 2, DIAG must contain positive entries that serve as multiplicative scale factors for the variables. 0 MODE is an integer input variable. If MODE = 1, the variables will be scaled internally. If MODE = 2, the scaling is speci fied by the input DIAG. Other values of MODE are equivalent to MODE = 1. 0 FACTOR is a positive input variable used in determining the ini tial step bound. This bound is set to the product of FACTOR and the Euclidean norm of DIAG*X if nonzero, or else to FACTO itself. In most cases FACTOR should lie in the interval (.1,100.). 100. is a generally recommended value. 0 NPRINT is an integer input variable that enables controlled printing of iterates if it is positive. In this case, FCN is called with IFLAG = 0 at the beginning of the first iteration and every NPRINT iterations thereafter and immediately prior to return, with X, FVEC, and FJAC available for printing. FVEC and FJAC should not be altered. If NPRINT is not posi- tive, no special calls of FCN with IFLAG = 0 are made. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Both actual and predicted relative reductions in th sum of squares are at most FTOL. 0 INFO = 2 Relative error between two consecutive iterates is at most XTOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 The cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. 0 INFO = 5 Number of calls to FCN with IFLAG = 1 has reached MAXFEV. 0 INFO = 6 FTOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 XTOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 8 GTOL is too small. FVEC is orthogonal to the columns of the Jacobian to machine precision. 0 Sections 4 and 5 contain more details about INFO. 1 0 Page 0 NFEV is an integer output variable set to the number of calls t FCN with IFLAG = 1. 0 NJEV is an integer output variable set to the number of calls t FCN with IFLAG = 2. 0 IPVT is an integer output array of length N. IPVT defines a permutation matrix P such that JAC*P = Q*R, where JAC is the final calculated Jacobian, Q is orthogonal (not stored), and is upper triangular with diagonal elements of nonincreasing magnitude. Column j of P is column IPVT(j) of the identity matrix. 0 QTF is an output array of length N which contains the first N elements of the vector (Q transpose)*FVEC. 0 WA1, WA2, and WA3 are work arrays of length N. 0 WA4 is a work array of length M. 0 4. Successful completion. 0 The accuracy of LMDER is controlled by the convergence parame- ters FTOL, XTOL, and GTOL. These parameters are used in tests which make three types of comparisons between the approximation X and a solution XSOL. LMDER terminates when any of the tests is satisfied. If any of the convergence parameters is less tha the machine precision (as defined by the MINPACK function DPMPAR(1)), then LMDER only attempts to satisfy the test define by the machine precision. Further progress is not usually pos- sible. 0 The tests assume that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then LMDER may incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning LMDER with tighter toler- ances. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+FTOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with FTOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an INFO is set to 1 (or to 3 if the second test is also satis- fied). Unless high precision solutions are required, the recommended value for FTOL is the square root of the machine precision. 1 0 Page 0 Second convergence test. If D is the diagonal matrix whose entries are defined by the array DIAG, then this test attempt to guarantee that 0 ENORM(D*(X-XSOL)) .LE. XTOL*ENORM(D*XSOL). 0 If this condition is satisfied with XTOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but if MODE = 1, then the accuracy of the components of X is usually related to their sensitivity. Unless high precision solutions are required, the recommended value for XTOL is the square root of the machine precision. 0 Third convergence test. This test is satisfied when the cosine of the angle between FVEC and any column of the Jacobian at X is at most GTOL in absolute value. There is no clear rela- tionship between this test and the accuracy of LMDER, and furthermore, the test is equally well satisfied at other crit ical points, namely maximizers and saddle points. Therefore, termination caused by this test (INFO = 4) should be examined carefully. The recommended value for GTOL is zero. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMDER can be due to improper input parameters, arithmetic interrupts, or an excessive number of function evaluations. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or LDFJAC .LT. M, or FTOL .LT. 0.D0, or XTOL .LT. 0.D0, or GTOL .LT. 0.D0, or MAXFEV .LE. 0, or FACTOR .LE. 0.D0. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMDER. In this case, it may be possible to remedy the situation by rerunning LMDER with a smaller value of FACTOR. 0 Excessive number of function evaluations. A reasonable value for MAXFEV is 100*(N+1). If the number of calls to FCN with IFLAG = 1 reaches MAXFEV, then this indicates that the routin is converging very slowly as measured by the progress of FVEC and INFO is set to 5. In this case, it may be helpful to restart LMDER with MODE set to 1. 0 6. Characteristics of the algorithm. 0 LMDER is a modification of the Levenberg-Marquardt algorithm. 1 0 Page 0 Two of its main characteristics involve the proper use of implicitly scaled variables (if MODE = 1) and an optimal choice for the correction. The use of implicitly scaled variables achieves scale invariance of LMDER and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (unde reasonable conditions) global convergence from starting points far from the solution and a fast rate of convergence for prob- lems with small residuals. 0 Timing. The time required by LMDER to solve a given problem depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMDER is about N**3 to process eac evaluation of the functions (call to FCN with IFLAG = 1) and M*(N**2) to process each evaluation of the Jacobian (call to FCN with IFLAG = 2). Unless FCN can be evaluated quickly, th timing of LMDER will be strongly influenced by the time spent in FCN. 0 Storage. LMDER requires M*N + 2*M + 6*N double precision sto- rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DPMPAR,ENORM,LMPAR,QRFAC,QRSOLV 0 FORTRAN-supplied ... DABS,DMAX1,DMIN1,DSQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 1 0 Page 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMDER EXAMPLE. C DOUBLE PRECISION VERSION C C ********** INTEGER J,M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV,NWRITE INTEGER IPVT(3) DOUBLE PRECISION FTOL,XTOL,GTOL,FACTOR,FNORM DOUBLE PRECISION X(3),FVEC(15),FJAC(15,3),DIAG(3),QTF(3), * WA1(3),WA2(3),WA3(3),WA4(15) DOUBLE PRECISION ENORM,DPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.D0 X(2) = 1.D0 X(3) = 1.D0 C LDFJAC = 15 C C SET FTOL AND XTOL TO THE SQUARE ROOT OF THE MACHINE PRECISION C AND GTOL TO ZERO. UNLESS HIGH PRECISION SOLUTIONS ARE C REQUIRED, THESE ARE THE RECOMMENDED SETTINGS. C FTOL = DSQRT(DPMPAR(1)) XTOL = DSQRT(DPMPAR(1)) GTOL = 0.D0 C MAXFEV = 400 MODE = 1 FACTOR = 1.D2 NPRINT = 0 C CALL LMDER(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,NFEV,NJEV,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,D15.7 // 1 0 Page 0 * 5X,31H NUMBER OF FUNCTION EVALUATIONS,I10 // * 5X,31H NUMBER OF JACOBIAN EVALUATIONS,I10 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3D15.7) C C LAST CARD OF DRIVER FOR LMDER EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER M,N,LDFJAC,IFLAG DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N) C C SUBROUTINE FCN FOR LMDER EXAMPLE. C INTEGER I DOUBLE PRECISION TMP1,TMP2,TMP3,TMP4 DOUBLE PRECISION Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4D-1,1.8D-1,2.2D-1,2.5D-1,2.9D-1,3.2D-1,3.5D-1,3.9D-1, * 3.7D-1,5.8D-1,7.3D-1,9.6D-1,1.34D0,2.1D0,4.39D0/ C IF (IFLAG .NE. 0) GO TO 5 C C INSERT PRINT STATEMENTS HERE WHEN NPRINT IS POSITIVE. C RETURN 5 CONTINUE IF (IFLAG .EQ. 2) GO TO 20 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE GO TO 40 20 CONTINUE DO 30 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJAC(I,1) = -1.D0 FJAC(I,2) = TMP1*TMP2/TMP4 FJAC(I,3) = TMP1*TMP3/TMP4 30 CONTINUE 40 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 1 0 Page 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596D-01 0 NUMBER OF FUNCTION EVALUATIONS 6 0 NUMBER OF JACOBIAN EVALUATIONS 5 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 0.8241058D-01 0.1133037D+01 0.2343695D+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMSTR1 0 Double precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMSTR1 is to minimize the sum of the squares of nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm which uses minimal storage. This is done by using the more general least-squares solver LMSTR. The user must provide a subroutine which calculates the func- tions and the rows of the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE LMSTR1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL, * INFO,IPVT,WA,LWA) INTEGER M,N,LDFJAC,INFO,LWA INTEGER IPVT(N) DOUBLE PRECISION TOL DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N),WA(LWA) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMSTR1 and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMSTR1. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the rows of the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program and should be written as follows. 0 SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) INTEGER M,N,IFLAG DOUBLE PRECISION X(N),FVEC(M),FJROW(N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. IF IFLAG = I CALCULATE THE (I-1)-ST ROW OF THE JACOBIAN AT X AND RETURN THIS VECTOR IN FJROW. ---------- RETURN 1 0 Page 0 END 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMSTR1. In this case se IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 FJAC is an output N by N array. The upper triangle of FJAC con tains an upper triangular matrix R such that 0 T T T P *(JAC *JAC)*P = R *R, 0 where P is a permutation matrix and JAC is the final calcu- lated Jacobian. Column j of P is column IPVT(j) (see below) of the identity matrix. The lower triangular part of FJAC contains information generated during the computation of R. 0 LDFJAC is a positive integer input variable not less than N which specifies the leading dimension of the array FJAC. 0 TOL is a nonnegative input variable. Termination occurs when the algorithm estimates either that the relative error in the sum of squares is at most TOL or that the relative error between X and the solution is at most TOL. Section 4 contain more details about TOL. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Algorithm estimates that the relative error in the sum of squares is at most TOL. 0 INFO = 2 Algorithm estimates that the relative error between X and the solution is at most TOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 FVEC is orthogonal to the columns of the Jacobian t 1 0 Page 0 machine precision. 0 INFO = 5 Number of calls to FCN with IFLAG = 1 has reached 100*(N+1). 0 INFO = 6 TOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 TOL is too small. No further improvement in the approximate solution X is possible. 0 Sections 4 and 5 contain more details about INFO. 0 IPVT is an integer output array of length N. IPVT defines a permutation matrix P such that JAC*P = Q*R, where JAC is the final calculated Jacobian, Q is orthogonal (not stored), and is upper triangular. Column j of P is column IPVT(j) of the identity matrix. 0 WA is a work array of length LWA. 0 LWA is a positive integer input variable not less than 5*N+M. 0 4. Successful completion. 0 The accuracy of LMSTR1 is controlled by the convergence parame- ter TOL. This parameter is used in tests which make three type of comparisons between the approximation X and a solution XSOL. LMSTR1 terminates when any of the tests is satisfied. If TOL i less than the machine precision (as defined by the MINPACK func tion DPMPAR(1)), then LMSTR1 only attempts to satisfy the test defined by the machine precision. Further progress is not usu- ally possible. Unless high precision solutions are required, the recommended value for TOL is the square root of the machine precision. 0 The tests assume that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then LMSTR1 ma incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning LMSTR1 with a tighter toler- ance. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+TOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with TOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an 1 0 Page 0 INFO is set to 1 (or to 3 if the second test is also satis- fied). 0 Second convergence test. If D is a diagonal matrix (implicitly generated by LMSTR1) whose entries contain scale factors for the variables, then this test attempts to guarantee that 0 ENORM(D*(X-XSOL)) .LE. TOL*ENORM(D*XSOL). 0 If this condition is satisfied with TOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but the choice of D is such that the accuracy of the components of X is usually related t their sensitivity. 0 Third convergence test. This test is satisfied when FVEC is orthogonal to the columns of the Jacobian to machine preci- sion. There is no clear relationship between this test and the accuracy of LMSTR1, and furthermore, the test is equally well satisfied at other critical points, namely maximizers an saddle points. Therefore, termination caused by this test (INFO = 4) should be examined carefully. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMSTR1 can be due to improper input parameters, arithmetic interrupts, or an excessive number of function evaluations. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or LDFJAC .LT. N, or TOL .LT. 0.D0, or LWA .LT. 5*N+M. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMSTR1. In this case, it may be possible to remedy the situation by not evalu ating the functions here, but instead setting the components of FVEC to numbers that exceed those in the initial FVEC, thereby indirectly reducing the step length. The step length can be more directly controlled by using instead LMSTR, which includes in its calling sequence the step-length- governing parameter FACTOR. 0 Excessive number of function evaluations. If the number of calls to FCN with IFLAG = 1 reaches 100*(N+1), then this indi cates that the routine is converging very slowly as measured by the progress of FVEC, and INFO is set to 5. In this case, it may be helpful to restart LMSTR1, thereby forcing it to disregard old (and possibly harmful) information. 1 0 Page 0 6. Characteristics of the algorithm. 0 LMSTR1 is a modification of the Levenberg-Marquardt algorithm. Two of its main characteristics involve the proper use of implicitly scaled variables and an optimal choice for the cor- rection. The use of implicitly scaled variables achieves scale invariance of LMSTR1 and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (under reasonable conditions) global convergence from starting points far from th solution and a fast rate of convergence for problems with small residuals. 0 Timing. The time required by LMSTR1 to solve a given problem depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMSTR1 is about N**3 to process each evaluation of the functions (call to FCN with IFLAG = 1) and 1.5*(N**2) to process each row of the Jacobian (call to FCN with IFLAG .GE. 2). Unless FCN can be evaluated quickly, the timing of LMSTR1 will be strongly influenced by the time spent in FCN. 0 Storage. LMSTR1 requires N**2 + 2*M + 6*N double precision sto rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DPMPAR,ENORM,LMSTR,LMPAR,QRFAC,QRSOLV, RWUPDT 0 FORTRAN-supplied ... DABS,DMAX1,DMIN1,DSQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 1 0 Page 0 to the data 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMSTR1 EXAMPLE. C DOUBLE PRECISION VERSION C C ********** INTEGER J,M,N,LDFJAC,INFO,LWA,NWRITE INTEGER IPVT(3) DOUBLE PRECISION TOL,FNORM DOUBLE PRECISION X(3),FVEC(15),FJAC(3,3),WA(30) DOUBLE PRECISION ENORM,DPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.D0 X(2) = 1.D0 X(3) = 1.D0 C LDFJAC = 3 LWA = 30 C C SET TOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C TOL = DSQRT(DPMPAR(1)) C CALL LMSTR1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL, * INFO,IPVT,WA,LWA) FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,D15.7 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3D15.7) C 1 0 Page 0 C LAST CARD OF DRIVER FOR LMSTR1 EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) INTEGER M,N,IFLAG DOUBLE PRECISION X(N),FVEC(M),FJROW(N) C C SUBROUTINE FCN FOR LMSTR1 EXAMPLE. C INTEGER I DOUBLE PRECISION TMP1,TMP2,TMP3,TMP4 DOUBLE PRECISION Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4D-1,1.8D-1,2.2D-1,2.5D-1,2.9D-1,3.2D-1,3.5D-1,3.9D-1, * 3.7D-1,5.8D-1,7.3D-1,9.6D-1,1.34D0,2.1D0,4.39D0/ C IF (IFLAG .GE. 2) GO TO 20 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE GO TO 40 20 CONTINUE I = IFLAG - 1 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJROW(1) = -1.D0 FJROW(2) = TMP1*TMP2/TMP4 FJROW(3) = TMP1*TMP3/TMP4 30 CONTINUE 40 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596D-01 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 0.8241058D-01 0.1133037D+01 0.2343695D+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMSTR 0 Double precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMSTR is to minimize the sum of the squares of M nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm which uses minimal storage. The user must provide a subroutine which calculates the functions and the rows of the Jacobian. 0 2. Subroutine and type statements. 0 SUBROUTINE LMSTR(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV INTEGER IPVT(N) DOUBLE PRECISION FTOL,XTOL,GTOL,FACTOR DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N),DIAG(N),QTF(N), * WA1(N),WA2(N),WA3(N),WA4(M) 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMSTR and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMSTR. 0 FCN is the name of the user-supplied subroutine which calculate the functions and the rows of the Jacobian. FCN must be declared in an EXTERNAL statement in the user calling program and should be written as follows. 0 SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) INTEGER M,N,IFLAG DOUBLE PRECISION X(N),FVEC(M),FJROW(N) ---------- IF IFLAG = 1 CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. IF IFLAG = I CALCULATE THE (I-1)-ST ROW OF THE JACOBIAN AT X AND RETURN THIS VECTOR IN FJROW. ---------- RETURN 1 0 Page 0 END 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMSTR. In this case set IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 FJAC is an output N by N array. The upper triangle of FJAC con tains an upper triangular matrix R such that 0 T T T P *(JAC *JAC)*P = R *R, 0 where P is a permutation matrix and JAC is the final calcu- lated Jacobian. Column j of P is column IPVT(j) (see below) of the identity matrix. The lower triangular part of FJAC contains information generated during the computation of R. 0 LDFJAC is a positive integer input variable not less than N which specifies the leading dimension of the array FJAC. 0 FTOL is a nonnegative input variable. Termination occurs when both the actual and predicted relative reductions in the sum of squares are at most FTOL. Therefore, FTOL measures the relative error desired in the sum of squares. Section 4 con- tains more details about FTOL. 0 XTOL is a nonnegative input variable. Termination occurs when the relative error between two consecutive iterates is at mos XTOL. Therefore, XTOL measures the relative error desired in the approximate solution. Section 4 contains more details about XTOL. 0 GTOL is a nonnegative input variable. Termination occurs when the cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. Therefore, GTOL measures the orthogonality desired between the function vecto and the columns of the Jacobian. Section 4 contains more details about GTOL. 0 MAXFEV is a positive integer input variable. Termination occur when the number of calls to FCN with IFLAG = 1 has reached 1 0 Page 0 MAXFEV. 0 DIAG is an array of length N. If MODE = 1 (see below), DIAG is internally set. If MODE = 2, DIAG must contain positive entries that serve as multiplicative scale factors for the variables. 0 MODE is an integer input variable. If MODE = 1, the variables will be scaled internally. If MODE = 2, the scaling is speci fied by the input DIAG. Other values of MODE are equivalent to MODE = 1. 0 FACTOR is a positive input variable used in determining the ini tial step bound. This bound is set to the product of FACTOR and the Euclidean norm of DIAG*X if nonzero, or else to FACTO itself. In most cases FACTOR should lie in the interval (.1,100.). 100. is a generally recommended value. 0 NPRINT is an integer input variable that enables controlled printing of iterates if it is positive. In this case, FCN is called with IFLAG = 0 at the beginning of the first iteration and every NPRINT iterations thereafter and immediately prior to return, with X and FVEC available for printing. If NPRINT is not positive, no special calls of FCN with IFLAG = 0 are made. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Both actual and predicted relative reductions in th sum of squares are at most FTOL. 0 INFO = 2 Relative error between two consecutive iterates is at most XTOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 The cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. 0 INFO = 5 Number of calls to FCN with IFLAG = 1 has reached MAXFEV. 0 INFO = 6 FTOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 XTOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 8 GTOL is too small. FVEC is orthogonal to the columns of the Jacobian to machine precision. 1 0 Page 0 Sections 4 and 5 contain more details about INFO. 0 NFEV is an integer output variable set to the number of calls t FCN with IFLAG = 1. 0 NJEV is an integer output variable set to the number of calls t FCN with IFLAG = 2. 0 IPVT is an integer output array of length N. IPVT defines a permutation matrix P such that JAC*P = Q*R, where JAC is the final calculated Jacobian, Q is orthogonal (not stored), and is upper triangular. Column j of P is column IPVT(j) of the identity matrix. 0 QTF is an output array of length N which contains the first N elements of the vector (Q transpose)*FVEC. 0 WA1, WA2, and WA3 are work arrays of length N. 0 WA4 is a work array of length M. 0 4. Successful completion. 0 The accuracy of LMSTR is controlled by the convergence parame- ters FTOL, XTOL, and GTOL. These parameters are used in tests which make three types of comparisons between the approximation X and a solution XSOL. LMSTR terminates when any of the tests is satisfied. If any of the convergence parameters is less tha the machine precision (as defined by the MINPACK function DPMPAR(1)), then LMSTR only attempts to satisfy the test define by the machine precision. Further progress is not usually pos- sible. 0 The tests assume that the functions and the Jacobian are coded consistently, and that the functions are reasonably well behaved. If these conditions are not satisfied, then LMSTR may incorrectly indicate convergence. The coding of the Jacobian can be checked by the MINPACK subroutine CHKDER. If the Jaco- bian is coded correctly, then the validity of the answer can be checked, for example, by rerunning LMSTR with tighter toler- ances. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+FTOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with FTOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an INFO is set to 1 (or to 3 if the second test is also satis- fied). Unless high precision solutions are required, the recommended value for FTOL is the square root of the machine 1 0 Page 0 precision. 0 Second convergence test. If D is the diagonal matrix whose entries are defined by the array DIAG, then this test attempt to guarantee that 0 ENORM(D*(X-XSOL)) .LE. XTOL*ENORM(D*XSOL). 0 If this condition is satisfied with XTOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but if MODE = 1, then the accuracy of the components of X is usually related to their sensitivity. Unless high precision solutions are required, the recommended value for XTOL is the square root of the machine precision. 0 Third convergence test. This test is satisfied when the cosine of the angle between FVEC and any column of the Jacobian at X is at most GTOL in absolute value. There is no clear rela- tionship between this test and the accuracy of LMSTR, and furthermore, the test is equally well satisfied at other crit ical points, namely maximizers and saddle points. Therefore, termination caused by this test (INFO = 4) should be examined carefully. The recommended value for GTOL is zero. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMSTR can be due to improper input parameters, arithmetic interrupts, or an excessive number of function evaluations. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or LDFJAC .LT. N, or FTOL .LT. 0.D0, or XTOL .LT. 0.D0, or GTOL .LT. 0.D0, or MAXFEV .LE. 0, or FACTOR .LE. 0.D0. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMSTR. In this case, it may be possible to remedy the situation by rerunning LMSTR with a smaller value of FACTOR. 0 Excessive number of function evaluations. A reasonable value for MAXFEV is 100*(N+1). If the number of calls to FCN with IFLAG = 1 reaches MAXFEV, then this indicates that the routin is converging very slowly as measured by the progress of FVEC and INFO is set to 5. In this case, it may be helpful to restart LMSTR with MODE set to 1. 0 6. Characteristics of the algorithm. 1 0 Page 0 LMSTR is a modification of the Levenberg-Marquardt algorithm. Two of its main characteristics involve the proper use of implicitly scaled variables (if MODE = 1) and an optimal choice for the correction. The use of implicitly scaled variables achieves scale invariance of LMSTR and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (unde reasonable conditions) global convergence from starting points far from the solution and a fast rate of convergence for prob- lems with small residuals. 0 Timing. The time required by LMSTR to solve a given problem depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMSTR is about N**3 to process eac evaluation of the functions (call to FCN with IFLAG = 1) and 1.5*(N**2) to process each row of the Jacobian (call to FCN with IFLAG .GE. 2). Unless FCN can be evaluated quickly, the timing of LMSTR will be strongly influenced by the time spent in FCN. 0 Storage. LMSTR requires N**2 + 2*M + 6*N double precision sto- rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DPMPAR,ENORM,LMPAR,QRFAC,QRSOLV,RWUPDT 0 FORTRAN-supplied ... DABS,DMAX1,DMIN1,DSQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 1 0 Page 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMSTR EXAMPLE. C DOUBLE PRECISION VERSION C C ********** INTEGER J,M,N,LDFJAC,MAXFEV,MODE,NPRINT,INFO,NFEV,NJEV,NWRITE INTEGER IPVT(3) DOUBLE PRECISION FTOL,XTOL,GTOL,FACTOR,FNORM DOUBLE PRECISION X(3),FVEC(15),FJAC(3,3),DIAG(3),QTF(3), * WA1(3),WA2(3),WA3(3),WA4(15) DOUBLE PRECISION ENORM,DPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.D0 X(2) = 1.D0 X(3) = 1.D0 C LDFJAC = 3 C C SET FTOL AND XTOL TO THE SQUARE ROOT OF THE MACHINE PRECISION C AND GTOL TO ZERO. UNLESS HIGH PRECISION SOLUTIONS ARE C REQUIRED, THESE ARE THE RECOMMENDED SETTINGS. C FTOL = DSQRT(DPMPAR(1)) XTOL = DSQRT(DPMPAR(1)) GTOL = 0.D0 C MAXFEV = 400 MODE = 1 FACTOR = 1.D2 NPRINT = 0 C CALL LMSTR(FCN,M,N,X,FVEC,FJAC,LDFJAC,FTOL,XTOL,GTOL, * MAXFEV,DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,NJEV, * IPVT,QTF,WA1,WA2,WA3,WA4) FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,NFEV,NJEV,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,D15.7 // 1 0 Page 0 * 5X,31H NUMBER OF FUNCTION EVALUATIONS,I10 // * 5X,31H NUMBER OF JACOBIAN EVALUATIONS,I10 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3D15.7) C C LAST CARD OF DRIVER FOR LMSTR EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) INTEGER M,N,IFLAG DOUBLE PRECISION X(N),FVEC(M),FJROW(N) C C SUBROUTINE FCN FOR LMSTR EXAMPLE. C INTEGER I DOUBLE PRECISION TMP1,TMP2,TMP3,TMP4 DOUBLE PRECISION Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4D-1,1.8D-1,2.2D-1,2.5D-1,2.9D-1,3.2D-1,3.5D-1,3.9D-1, * 3.7D-1,5.8D-1,7.3D-1,9.6D-1,1.34D0,2.1D0,4.39D0/ C IF (IFLAG .NE. 0) GO TO 5 C C INSERT PRINT STATEMENTS HERE WHEN NPRINT IS POSITIVE. C RETURN 5 CONTINUE IF (IFLAG .GE. 2) GO TO 20 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE GO TO 40 20 CONTINUE I = IFLAG - 1 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJROW(1) = -1.D0 FJROW(2) = TMP1*TMP2/TMP4 FJROW(3) = TMP1*TMP3/TMP4 30 CONTINUE 40 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 1 0 Page 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596D-01 0 NUMBER OF FUNCTION EVALUATIONS 6 0 NUMBER OF JACOBIAN EVALUATIONS 5 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 0.8241058D-01 0.1133037D+01 0.2343695D+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMDIF1 0 Double precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMDIF1 is to minimize the sum of the squares of nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm. This is done by using the more general least-squares solver LMDIF. The user must provide a subroutine which calculates the functions. The Jacobian is the calculated by a forward-difference approximation. 0 2. Subroutine and type statements. 0 SUBROUTINE LMDIF1(FCN,M,N,X,FVEC,TOL,INFO,IWA,WA,LWA) INTEGER M,N,INFO,LWA INTEGER IWA(N) DOUBLE PRECISION TOL DOUBLE PRECISION X(N),FVEC(M),WA(LWA) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMDIF1 and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMDIF1. 0 FCN is the name of the user-supplied subroutine which calculate the functions. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows 0 SUBROUTINE FCN(M,N,X,FVEC,IFLAG) INTEGER M,N,IFLAG DOUBLE PRECISION X(N),FVEC(M) ---------- CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. ---------- RETURN END 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMDIF1. In this case se 1 0 Page 0 IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 TOL is a nonnegative input variable. Termination occurs when the algorithm estimates either that the relative error in the sum of squares is at most TOL or that the relative error between X and the solution is at most TOL. Section 4 contain more details about TOL. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Algorithm estimates that the relative error in the sum of squares is at most TOL. 0 INFO = 2 Algorithm estimates that the relative error between X and the solution is at most TOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 FVEC is orthogonal to the columns of the Jacobian t machine precision. 0 INFO = 5 Number of calls to FCN has reached or exceeded 200*(N+1). 0 INFO = 6 TOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 TOL is too small. No further improvement in the approximate solution X is possible. 0 Sections 4 and 5 contain more details about INFO. 0 IWA is an integer work array of length N. 0 WA is a work array of length LWA. 0 LWA is a positive integer input variable not less than 1 0 Page 0 M*N+5*N+M. 0 4. Successful completion. 0 The accuracy of LMDIF1 is controlled by the convergence parame- ter TOL. This parameter is used in tests which make three type of comparisons between the approximation X and a solution XSOL. LMDIF1 terminates when any of the tests is satisfied. If TOL i less than the machine precision (as defined by the MINPACK func tion DPMPAR(1)), then LMDIF1 only attempts to satisfy the test defined by the machine precision. Further progress is not usu- ally possible. Unless high precision solutions are required, the recommended value for TOL is the square root of the machine precision. 0 The tests assume that the functions are reasonably well behaved If this condition is not satisfied, then LMDIF1 may incorrectly indicate convergence. The validity of the answer can be checked, for example, by rerunning LMDIF1 with a tighter toler- ance. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+TOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with TOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an INFO is set to 1 (or to 3 if the second test is also satis- fied). 0 Second convergence test. If D is a diagonal matrix (implicitly generated by LMDIF1) whose entries contain scale factors for the variables, then this test attempts to guarantee that 0 ENORM(D*(X-XSOL)) .LE. TOL*ENORM(D*XSOL). 0 If this condition is satisfied with TOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but the choice of D is such that the accuracy of the components of X is usually related t their sensitivity. 0 Third convergence test. This test is satisfied when FVEC is orthogonal to the columns of the Jacobian to machine preci- sion. There is no clear relationship between this test and the accuracy of LMDIF1, and furthermore, the test is equally well satisfied at other critical points, namely maximizers an saddle points. Also, errors in the functions (see below) may result in the test being satisfied at a point not close to th 1 0 Page 0 minimum. Therefore, termination caused by this test (INFO = 4) should be examined carefully. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMDIF1 can be due to improper input parameters, arithmetic interrupts, an excessive number of func- tion evaluations, or errors in the functions. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or TOL .LT. 0.D0, or LWA .LT. M*N+5*N+M. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMDIF1. In this case, it may be possible to remedy the situation by not evalu ating the functions here, but instead setting the components of FVEC to numbers that exceed those in the initial FVEC, thereby indirectly reducing the step length. The step length can be more directly controlled by using instead LMDIF, which includes in its calling sequence the step-length-governing parameter FACTOR. 0 Excessive number of function evaluations. If the number of calls to FCN reaches 200*(N+1), then this indicates that the routine is converging very slowly as measured by the progress of FVEC, and INFO is set to 5. In this case, it may be help- ful to restart LMDIF1, thereby forcing it to disregard old (and possibly harmful) information. 0 Errors in the functions. The choice of step length in the for- ward-difference approximation to the Jacobian assumes that th relative errors in the functions are of the order of the machine precision. If this is not the case, LMDIF1 may fail (usually with INFO = 4). The user should then use LMDIF instead, or one of the programs which require the analytic Jacobian (LMDER1 and LMDER). 0 6. Characteristics of the algorithm. 0 LMDIF1 is a modification of the Levenberg-Marquardt algorithm. Two of its main characteristics involve the proper use of implicitly scaled variables and an optimal choice for the cor- rection. The use of implicitly scaled variables achieves scale invariance of LMDIF1 and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (under reasonable conditions) global convergence from starting points far from th solution and a fast rate of convergence for problems with small residuals. 0 Timing. The time required by LMDIF1 to solve a given problem 1 0 Page 0 depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMDIF1 is about N**3 to process each evaluation of the functions (one call to FCN) and M*(N**2) to process each approximation to the Jacobian (N calls to FCN). Unless FCN can be evaluated quickly, the tim- ing of LMDIF1 will be strongly influenced by the time spent i FCN. 0 Storage. LMDIF1 requires M*N + 2*M + 6*N double precision sto- rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DPMPAR,ENORM,FDJAC2,LMDIF,LMPAR, QRFAC,QRSOLV 0 FORTRAN-supplied ... DABS,DMAX1,DMIN1,DSQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMDIF1 EXAMPLE. C DOUBLE PRECISION VERSION C 1 0 Page 0 C ********** INTEGER J,M,N,INFO,LWA,NWRITE INTEGER IWA(3) DOUBLE PRECISION TOL,FNORM DOUBLE PRECISION X(3),FVEC(15),WA(75) DOUBLE PRECISION ENORM,DPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.D0 X(2) = 1.D0 X(3) = 1.D0 C LWA = 75 C C SET TOL TO THE SQUARE ROOT OF THE MACHINE PRECISION. C UNLESS HIGH PRECISION SOLUTIONS ARE REQUIRED, C THIS IS THE RECOMMENDED SETTING. C TOL = DSQRT(DPMPAR(1)) C CALL LMDIF1(FCN,M,N,X,FVEC,TOL,INFO,IWA,WA,LWA) FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,D15.7 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3D15.7) C C LAST CARD OF DRIVER FOR LMDIF1 EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,IFLAG) INTEGER M,N,IFLAG DOUBLE PRECISION X(N),FVEC(M) C C SUBROUTINE FCN FOR LMDIF1 EXAMPLE. C INTEGER I DOUBLE PRECISION TMP1,TMP2,TMP3 DOUBLE PRECISION Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4D-1,1.8D-1,2.2D-1,2.5D-1,2.9D-1,3.2D-1,3.5D-1,3.9D-1, * 3.7D-1,5.8D-1,7.3D-1,9.6D-1,1.34D0,2.1D0,4.39D0/ C 1 0 Page 0 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596D-01 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 0 0.8241057D-01 0.1133037D+01 0.2343695D+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine LMDIF 0 Double precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of LMDIF is to minimize the sum of the squares of M nonlinear functions in N variables by a modification of the Levenberg-Marquardt algorithm. The user must provide a subrou- tine which calculates the functions. The Jacobian is then cal- culated by a forward-difference approximation. 0 2. Subroutine and type statements. 0 SUBROUTINE LMDIF(FCN,M,N,X,FVEC,FTOL,XTOL,GTOL,MAXFEV,EPSFCN, * DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC, * IPVT,QTF,WA1,WA2,WA3,WA4) INTEGER M,N,MAXFEV,MODE,NPRINT,INFO,NFEV,LDFJAC INTEGER IPVT(N) DOUBLE PRECISION FTOL,XTOL,GTOL,EPSFCN,FACTOR DOUBLE PRECISION X(N),FVEC(M),DIAG(N),FJAC(LDFJAC,N),QTF(N), * WA1(N),WA2(N),WA3(N),WA4(M) EXTERNAL FCN 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to LMDIF and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from LMDIF. 0 FCN is the name of the user-supplied subroutine which calculate the functions. FCN must be declared in an EXTERNAL statement in the user calling program, and should be written as follows 0 SUBROUTINE FCN(M,N,X,FVEC,IFLAG) INTEGER M,N,IFLAG DOUBLE PRECISION X(N),FVEC(M) ---------- CALCULATE THE FUNCTIONS AT X AND RETURN THIS VECTOR IN FVEC. ---------- RETURN END 1 0 Page 0 The value of IFLAG should not be changed by FCN unless the user wants to terminate execution of LMDIF. In this case set IFLAG to a negative integer. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. N must not exceed M. 0 X is an array of length N. On input X must contain an initial estimate of the solution vector. On output X contains the final estimate of the solution vector. 0 FVEC is an output array of length M which contains the function evaluated at the output X. 0 FTOL is a nonnegative input variable. Termination occurs when both the actual and predicted relative reductions in the sum of squares are at most FTOL. Therefore, FTOL measures the relative error desired in the sum of squares. Section 4 con- tains more details about FTOL. 0 XTOL is a nonnegative input variable. Termination occurs when the relative error between two consecutive iterates is at mos XTOL. Therefore, XTOL measures the relative error desired in the approximate solution. Section 4 contains more details about XTOL. 0 GTOL is a nonnegative input variable. Termination occurs when the cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. Therefore, GTOL measures the orthogonality desired between the function vecto and the columns of the Jacobian. Section 4 contains more details about GTOL. 0 MAXFEV is a positive integer input variable. Termination occur when the number of calls to FCN is at least MAXFEV by the end of an iteration. 0 EPSFCN is an input variable used in determining a suitable step for the forward-difference approximation. This approximation assumes that the relative errors in the functions are of the order of EPSFCN. If EPSFCN is less than the machine preci- sion, it is assumed that the relative errors in the functions are of the order of the machine precision. 0 DIAG is an array of length N. If MODE = 1 (see below), DIAG is internally set. If MODE = 2, DIAG must contain positive entries that serve as multiplicative scale factors for the variables. 0 MODE is an integer input variable. If MODE = 1, the variables will be scaled internally. If MODE = 2, the scaling is 1 0 Page 0 specified by the input DIAG. Other values of MODE are equiva lent to MODE = 1. 0 FACTOR is a positive input variable used in determining the ini tial step bound. This bound is set to the product of FACTOR and the Euclidean norm of DIAG*X if nonzero, or else to FACTO itself. In most cases FACTOR should lie in the interval (.1,100.). 100. is a generally recommended value. 0 NPRINT is an integer input variable that enables controlled printing of iterates if it is positive. In this case, FCN is called with IFLAG = 0 at the beginning of the first iteration and every NPRINT iterations thereafter and immediately prior to return, with X and FVEC available for printing. If NPRINT is not positive, no special calls of FCN with IFLAG = 0 are made. 0 INFO is an integer output variable. If the user has terminated execution, INFO is set to the (negative) value of IFLAG. See description of FCN. Otherwise, INFO is set as follows. 0 INFO = 0 Improper input parameters. 0 INFO = 1 Both actual and predicted relative reductions in th sum of squares are at most FTOL. 0 INFO = 2 Relative error between two consecutive iterates is at most XTOL. 0 INFO = 3 Conditions for INFO = 1 and INFO = 2 both hold. 0 INFO = 4 The cosine of the angle between FVEC and any column of the Jacobian is at most GTOL in absolute value. 0 INFO = 5 Number of calls to FCN has reached or exceeded MAXFEV. 0 INFO = 6 FTOL is too small. No further reduction in the sum of squares is possible. 0 INFO = 7 XTOL is too small. No further improvement in the approximate solution X is possible. 0 INFO = 8 GTOL is too small. FVEC is orthogonal to the columns of the Jacobian to machine precision. 0 Sections 4 and 5 contain more details about INFO. 0 NFEV is an integer output variable set to the number of calls t FCN. 0 FJAC is an output M by N array. The upper N by N submatrix of FJAC contains an upper triangular matrix R with diagonal ele- ments of nonincreasing magnitude such that 1 0 Page 0 T T T P *(JAC *JAC)*P = R *R, 0 where P is a permutation matrix and JAC is the final calcu- lated Jacobian. Column j of P is column IPVT(j) (see below) of the identity matrix. The lower trapezoidal part of FJAC contains information generated during the computation of R. 0 LDFJAC is a positive integer input variable not less than M which specifies the leading dimension of the array FJAC. 0 IPVT is an integer output array of length N. IPVT defines a permutation matrix P such that JAC*P = Q*R, where JAC is the final calculated Jacobian, Q is orthogonal (not stored), and is upper triangular with diagonal elements of nonincreasing magnitude. Column j of P is column IPVT(j) of the identity matrix. 0 QTF is an output array of length N which contains the first N elements of the vector (Q transpose)*FVEC. 0 WA1, WA2, and WA3 are work arrays of length N. 0 WA4 is a work array of length M. 0 4. Successful completion. 0 The accuracy of LMDIF is controlled by the convergence parame- ters FTOL, XTOL, and GTOL. These parameters are used in tests which make three types of comparisons between the approximation X and a solution XSOL. LMDIF terminates when any of the tests is satisfied. If any of the convergence parameters is less tha the machine precision (as defined by the MINPACK function DPMPAR(1)), then LMDIF only attempts to satisfy the test define by the machine precision. Further progress is not usually pos- sible. 0 The tests assume that the functions are reasonably well behaved If this condition is not satisfied, then LMDIF may incorrectly indicate convergence. The validity of the answer can be checked, for example, by rerunning LMDIF with tighter toler- ances. 0 First convergence test. If ENORM(Z) denotes the Euclidean norm of a vector Z, then this test attempts to guarantee that 0 ENORM(FVEC) .LE. (1+FTOL)*ENORM(FVECS), 0 where FVECS denotes the functions evaluated at XSOL. If this condition is satisfied with FTOL = 10**(-K), then the final residual norm ENORM(FVEC) has K significant decimal digits an INFO is set to 1 (or to 3 if the second test is also satis- fied). Unless high precision solutions are required, the 1 0 Page 0 recommended value for FTOL is the square root of the machine precision. 0 Second convergence test. If D is the diagonal matrix whose entries are defined by the array DIAG, then this test attempt to guarantee that 0 ENORM(D*(X-XSOL)) .LE. XTOL*ENORM(D*XSOL). 0 If this condition is satisfied with XTOL = 10**(-K), then the larger components of D*X have K significant decimal digits an INFO is set to 2 (or to 3 if the first test is also satis- fied). There is a danger that the smaller components of D*X may have large relative errors, but if MODE = 1, then the accuracy of the components of X is usually related to their sensitivity. Unless high precision solutions are required, the recommended value for XTOL is the square root of the machine precision. 0 Third convergence test. This test is satisfied when the cosine of the angle between FVEC and any column of the Jacobian at X is at most GTOL in absolute value. There is no clear rela- tionship between this test and the accuracy of LMDIF, and furthermore, the test is equally well satisfied at other crit ical points, namely maximizers and saddle points. Therefore, termination caused by this test (INFO = 4) should be examined carefully. The recommended value for GTOL is zero. 0 5. Unsuccessful completion. 0 Unsuccessful termination of LMDIF can be due to improper input parameters, arithmetic interrupts, or an excessive number of function evaluations. 0 Improper input parameters. INFO is set to 0 if N .LE. 0, or M .LT. N, or LDFJAC .LT. M, or FTOL .LT. 0.D0, or XTOL .LT. 0.D0, or GTOL .LT. 0.D0, or MAXFEV .LE. 0, or FACTOR .LE. 0.D0. 0 Arithmetic interrupts. If these interrupts occur in the FCN subroutine during an early stage of the computation, they may be caused by an unacceptable choice of X by LMDIF. In this case, it may be possible to remedy the situation by rerunning LMDIF with a smaller value of FACTOR. 0 Excessive number of function evaluations. A reasonable value for MAXFEV is 200*(N+1). If the number of calls to FCN reaches MAXFEV, then this indicates that the routine is con- verging very slowly as measured by the progress of FVEC, and INFO is set to 5. In this case, it may be helpful to restart LMDIF with MODE set to 1. 0 1 0 Page 0 6. Characteristics of the algorithm. 0 LMDIF is a modification of the Levenberg-Marquardt algorithm. Two of its main characteristics involve the proper use of implicitly scaled variables (if MODE = 1) and an optimal choice for the correction. The use of implicitly scaled variables achieves scale invariance of LMDIF and limits the size of the correction in any direction where the functions are changing rapidly. The optimal choice of the correction guarantees (unde reasonable conditions) global convergence from starting points far from the solution and a fast rate of convergence for prob- lems with small residuals. 0 Timing. The time required by LMDIF to solve a given problem depends on M and N, the behavior of the functions, the accu- racy requested, and the starting point. The number of arith- metic operations needed by LMDIF is about N**3 to process eac evaluation of the functions (one call to FCN) and M*(N**2) to process each approximation to the Jacobian (N calls to FCN). Unless FCN can be evaluated quickly, the timing of LMDIF will be strongly influenced by the time spent in FCN. 0 Storage. LMDIF requires M*N + 2*M + 6*N double precision sto- rage locations and N integer storage locations, in addition t the storage required by the program. There are no internally declared storage arrays. 0 7. Subprograms required. 0 USER-supplied ...... FCN 0 MINPACK-supplied ... DPMPAR,ENORM,FDJAC2,LMPAR,QRFAC,QRSOLV 0 FORTRAN-supplied ... DABS,DMAX1,DMIN1,DSQRT,MOD 0 8. References. 0 Jorge J. More, The Levenberg-Marquardt Algorithm, Implementatio and Theory. Numerical Analysis, G. A. Watson, editor. Lecture Notes in Mathematics 630, Springer-Verlag, 1977. 0 9. Example. 0 The problem is to determine the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 1 0 Page 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 0 C ********** C C DRIVER FOR LMDIF EXAMPLE. C DOUBLE PRECISION VERSION C C ********** INTEGER J,M,N,MAXFEV,MODE,NPRINT,INFO,NFEV,LDFJAC,NWRITE INTEGER IPVT(3) DOUBLE PRECISION FTOL,XTOL,GTOL,EPSFCN,FACTOR,FNORM DOUBLE PRECISION X(3),FVEC(15),DIAG(3),FJAC(15,3),QTF(3), * WA1(3),WA2(3),WA3(3),WA4(15) DOUBLE PRECISION ENORM,DPMPAR EXTERNAL FCN C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING STARTING VALUES PROVIDE A ROUGH FIT. C X(1) = 1.D0 X(2) = 1.D0 X(3) = 1.D0 C LDFJAC = 15 C C SET FTOL AND XTOL TO THE SQUARE ROOT OF THE MACHINE PRECISION C AND GTOL TO ZERO. UNLESS HIGH PRECISION SOLUTIONS ARE C REQUIRED, THESE ARE THE RECOMMENDED SETTINGS. C FTOL = DSQRT(DPMPAR(1)) XTOL = DSQRT(DPMPAR(1)) GTOL = 0.D0 C MAXFEV = 800 EPSFCN = 0.D0 MODE = 1 FACTOR = 1.D2 NPRINT = 0 C CALL LMDIF(FCN,M,N,X,FVEC,FTOL,XTOL,GTOL,MAXFEV,EPSFCN, * DIAG,MODE,FACTOR,NPRINT,INFO,NFEV,FJAC,LDFJAC, * IPVT,QTF,WA1,WA2,WA3,WA4) 1 0 Page 0 FNORM = ENORM(M,FVEC) WRITE (NWRITE,1000) FNORM,NFEV,INFO,(X(J),J=1,N) STOP 1000 FORMAT (5X,31H FINAL L2 NORM OF THE RESIDUALS,D15.7 // * 5X,31H NUMBER OF FUNCTION EVALUATIONS,I10 // * 5X,15H EXIT PARAMETER,16X,I10 // * 5X,27H FINAL APPROXIMATE SOLUTION // 5X,3D15.7) C C LAST CARD OF DRIVER FOR LMDIF EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,IFLAG) INTEGER M,N,IFLAG DOUBLE PRECISION X(N),FVEC(M) C C SUBROUTINE FCN FOR LMDIF EXAMPLE. C INTEGER I DOUBLE PRECISION TMP1,TMP2,TMP3 DOUBLE PRECISION Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4D-1,1.8D-1,2.2D-1,2.5D-1,2.9D-1,3.2D-1,3.5D-1,3.9D-1, * 3.7D-1,5.8D-1,7.3D-1,9.6D-1,1.34D0,2.1D0,4.39D0/ C IF (IFLAG .NE. 0) GO TO 5 C C INSERT PRINT STATEMENTS HERE WHEN NPRINT IS POSITIVE. C RETURN 5 CONTINUE DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be slightly different. 0 FINAL L2 NORM OF THE RESIDUALS 0.9063596D-01 0 NUMBER OF FUNCTION EVALUATIONS 21 0 EXIT PARAMETER 1 0 FINAL APPROXIMATE SOLUTION 1 0 Page 0 0.8241057D-01 0.1133037D+01 0.2343695D+01 1 0 1 0 Page 0 Documentation for MINPACK subroutine CHKDER 0 Double precision version 0 Argonne National Laboratory 0 Burton S. Garbow, Kenneth E. Hillstrom, Jorge J. More 0 March 1980 0 1. Purpose. 0 The purpose of CHKDER is to check the gradients of M nonlinear functions in N variables, evaluated at a point X, for consis- tency with the functions themselves. The user must call CHKDER twice, first with MODE = 1 and then with MODE = 2. 0 2. Subroutine and type statements. 0 SUBROUTINE CHKDER(M,N,X,FVEC,FJAC,LDFJAC,XP,FVECP,MODE,ERR) INTEGER M,N,LDFJAC,MODE DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N),XP(N),FVECP(M), * ERR(M) 0 3. Parameters. 0 Parameters designated as input parameters must be specified on entry to CHKDER and are not changed on exit, while parameters designated as output parameters need not be specified on entry and are set to appropriate values on exit from CHKDER. 0 M is a positive integer input variable set to the number of functions. 0 N is a positive integer input variable set to the number of variables. 0 X is an input array of length N. 0 FVEC is an array of length M. On input when MODE = 2, FVEC mus contain the functions evaluated at X. 0 FJAC is an M by N array. On input when MODE = 2, the rows of FJAC must contain the gradients of the respective functions evaluated at X. 0 LDFJAC is a positive integer input variable not less than M which specifies the leading dimension of the array FJAC. 0 XP is an array of length N. On output when MODE = 1, XP is set to a neighboring point of X. 1 0 Page 0 FVECP is an array of length M. On input when MODE = 2, FVECP must contain the functions evaluated at XP. 0 MODE is an integer input variable set to 1 on the first call an 2 on the second. Other values of MODE are equivalent to MODE = 1. 0 ERR is an array of length M. On output when MODE = 2, ERR con- tains measures of correctness of the respective gradients. I there is no severe loss of significance, then if ERR(I) is 1. the I-th gradient is correct, while if ERR(I) is 0.0 the I-th gradient is incorrect. For values of ERR between 0.0 and 1.0 the categorization is less certain. In general, a value of ERR(I) greater than 0.5 indicates that the I-th gradient is probably correct, while a value of ERR(I) less than 0.5 indi- cates that the I-th gradient is probably incorrect. 0 4. Successful completion. 0 CHKDER usually guarantees that if ERR(I) is 1.0, then the I-th gradient at X is consistent with the I-th function. This sug- gests that the input X be such that consistency of the gradient at X implies consistency of the gradient at all points of inter est. If all the components of X are distinct and the fractiona part of each one has two nonzero digits, then X is likely to be a satisfactory choice. 0 If ERR(I) is not 1.0 but is greater than 0.5, then the I-th gra dient is probably consistent with the I-th function (the more s the larger ERR(I) is), but the conditions for ERR(I) to be 1.0 have not been completely satisfied. In this case, it is recom- mended that CHKDER be rerun with other input values of X. If ERR(I) is always greater than 0.5, then the I-th gradient is consistent with the I-th function. 0 5. Unsuccessful completion. 0 CHKDER does not perform reliably if cancellation or rounding errors cause a severe loss of significance in the evaluation of a function. Therefore, none of the components of X should be unusually small (in particular, zero) or any other value which may cause loss of significance. The relative differences between corresponding elements of FVECP and FVEC should be at least two orders of magnitude greater than the machine precisio (as defined by the MINPACK function DPMPAR(1)). If there is a severe loss of significance in the evaluation of the I-th func- tion, then ERR(I) may be 0.0 and yet the I-th gradient could be correct. 0 If ERR(I) is not 0.0 but is less than 0.5, then the I-th gra- dient is probably not consistent with the I-th function (the more so the smaller ERR(I) is), but the conditions for ERR(I) t 1 0 Page 0 be 0.0 have not been completely satisfied. In this case, it is recommended that CHKDER be rerun with other input values of X. If ERR(I) is always less than 0.5 and if there is no severe los of significance, then the I-th gradient is not consistent with the I-th function. 0 6. Characteristics of the algorithm. 0 CHKDER checks the I-th gradient for consistency with the I-th function by computing a forward-difference approximation along suitably chosen direction and comparing this approximation with the user-supplied gradient along the same direction. The prin- cipal characteristic of CHKDER is its invariance to changes in scale of the variables or functions. 0 Timing. The time required by CHKDER depends only on M and N. The number of arithmetic operations needed by CHKDER is about N when MODE = 1 and M*N when MODE = 2. 0 Storage. CHKDER requires M*N + 3*M + 2*N double precision stor age locations, in addition to the storage required by the pro gram. There are no internally declared storage arrays. 0 7. Subprograms required. 0 MINPACK-supplied ... DPMPAR 0 FORTRAN-supplied ... DABS,DLOG10,DSQRT 0 8. References. 0 None. 0 9. Example. 0 This example checks the Jacobian matrix for the problem that determines the values of x(1), x(2), and x(3) which provide the best fit (in the least squares sense) of 0 x(1) + u(i)/(v(i)*x(2) + w(i)*x(3)), i = 1, 15 0 to the data 0 y = (0.14,0.18,0.22,0.25,0.29,0.32,0.35,0.39, 0.37,0.58,0.73,0.96,1.34,2.10,4.39), 0 where u(i) = i, v(i) = 16 - i, and w(i) = min(u(i),v(i)). The i-th component of FVEC is thus defined by 0 y(i) - (x(1) + u(i)/(v(i)*x(2) + w(i)*x(3))). 1 0 Page 0 C ********** C C DRIVER FOR CHKDER EXAMPLE. C DOUBLE PRECISION VERSION C C ********** INTEGER I,M,N,LDFJAC,MODE,NWRITE DOUBLE PRECISION X(3),FVEC(15),FJAC(15,3),XP(3),FVECP(15), * ERR(15) C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C M = 15 N = 3 C C THE FOLLOWING VALUES SHOULD BE SUITABLE FOR C CHECKING THE JACOBIAN MATRIX. C X(1) = 9.2D-1 X(2) = 1.3D-1 X(3) = 5.4D-1 C LDFJAC = 15 C MODE = 1 CALL CHKDER(M,N,X,FVEC,FJAC,LDFJAC,XP,FVECP,MODE,ERR) MODE = 2 CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,1) CALL FCN(M,N,X,FVEC,FJAC,LDFJAC,2) CALL FCN(M,N,XP,FVECP,FJAC,LDFJAC,1) CALL CHKDER(M,N,X,FVEC,FJAC,LDFJAC,XP,FVECP,MODE,ERR) C DO 10 I = 1, M FVECP(I) = FVECP(I) - FVEC(I) 10 CONTINUE WRITE (NWRITE,1000) (FVEC(I),I=1,M) WRITE (NWRITE,2000) (FVECP(I),I=1,M) WRITE (NWRITE,3000) (ERR(I),I=1,M) STOP 1000 FORMAT (/5X,5H FVEC // (5X,3D15.7)) 2000 FORMAT (/5X,13H FVECP - FVEC // (5X,3D15.7)) 3000 FORMAT (/5X,4H ERR // (5X,3D15.7)) C C LAST CARD OF DRIVER FOR CHKDER EXAMPLE. C END SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER M,N,LDFJAC,IFLAG DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N) C C SUBROUTINE FCN FOR CHKDER EXAMPLE. C 1 0 Page 0 INTEGER I DOUBLE PRECISION TMP1,TMP2,TMP3,TMP4 DOUBLE PRECISION Y(15) DATA Y(1),Y(2),Y(3),Y(4),Y(5),Y(6),Y(7),Y(8), * Y(9),Y(10),Y(11),Y(12),Y(13),Y(14),Y(15) * /1.4D-1,1.8D-1,2.2D-1,2.5D-1,2.9D-1,3.2D-1,3.5D-1,3.9D-1, * 3.7D-1,5.8D-1,7.3D-1,9.6D-1,1.34D0,2.1D0,4.39D0/ C IF (IFLAG .EQ. 2) GO TO 20 DO 10 I = 1, 15 TMP1 = I TMP2 = 16 - I TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 10 CONTINUE GO TO 40 20 CONTINUE DO 30 I = 1, 15 TMP1 = I TMP2 = 16 - I C C ERROR INTRODUCED INTO NEXT STATEMENT FOR ILLUSTRATION. C CORRECTED STATEMENT SHOULD READ TMP3 = TMP1 . C TMP3 = TMP2 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJAC(I,1) = -1.D0 FJAC(I,2) = TMP1*TMP2/TMP4 FJAC(I,3) = TMP1*TMP3/TMP4 30 CONTINUE 40 CONTINUE RETURN C C LAST CARD OF SUBROUTINE FCN. C END 0 Results obtained with different compilers or machines may be different. In particular, the differences FVECP - FVEC are machine dependent. 0 FVEC 0 -0.1181606D+01 -0.1429655D+01 -0.1606344D+01 -0.1745269D+01 -0.1840654D+01 -0.1921586D+01 -0.1984141D+01 -0.2022537D+01 -0.2468977D+01 -0.2827562D+01 -0.3473582D+01 -0.4437612D+01 -0.6047662D+01 -0.9267761D+01 -0.1891806D+02 0 FVECP - FVEC 0 -0.7724666D-08 -0.3432405D-08 -0.2034843D-09 1 0 Page 0 0.2313685D-08 0.4331078D-08 0.5984096D-08 0.7363281D-08 0.8531470D-08 0.1488591D-07 0.2335850D-07 0.3522012D-07 0.5301255D-07 0.8266660D-07 0.1419747D-06 0.3198990D-06 0 ERR 0 0.1141397D+00 0.9943516D-01 0.9674474D-01 0.9980447D-01 0.1073116D+00 0.1220445D+00 0.1526814D+00 0.1000000D+01 0.1000000D+01 0.1000000D+01 0.1000000D+01 0.1000000D+01 0.1000000D+01 0.1000000D+01 0.1000000D+01 PyBDSF-1.10.1/src/minpack/ex/file07000066400000000000000000000255701420247104600164700ustar00rootroot00000000000000C ********** C C THIS PROGRAM CHECKS THE CONSTANTS OF MACHINE PRECISION AND C SMALLEST AND LARGEST MACHINE REPRESENTABLE NUMBERS SPECIFIED IN C FUNCTION SPMPAR, AGAINST THE CORRESPONDING HARDWARE-DETERMINED C MACHINE CONSTANTS OBTAINED BY SMCHAR, A SUBROUTINE DUE TO C W. J. CODY. C C DATA STATEMENTS IN SPMPAR CORRESPONDING TO THE MACHINE USED MUST C BE ACTIVATED BY REMOVING C IN COLUMN 1. C C THE PRINTED OUTPUT CONSISTS OF THE MACHINE CONSTANTS OBTAINED BY C SMCHAR AND COMPARISONS OF THE SPMPAR CONSTANTS WITH THEIR C SMCHAR COUNTERPARTS. DESCRIPTIONS OF THE MACHINE CONSTANTS ARE C GIVEN IN THE PROLOGUE COMMENTS OF SMCHAR. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... SMCHAR,SPMPAR C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IBETA,IEXP,IRND,IT,MACHEP,MAXEXP,MINEXP,NEGEP,NGRD, * NWRITE REAL DWARF,EPS,EPSMCH,EPSNEG,GIANT,XMAX,XMIN REAL RERR(3) REAL SPMPAR C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C C DETERMINE THE MACHINE CONSTANTS DYNAMICALLY FROM SMCHAR. C CALL SMCHAR(IBETA,IT,IRND,NGRD,MACHEP,NEGEP,IEXP,MINEXP,MAXEXP, * EPS,EPSNEG,XMIN,XMAX) C C COMPARE THE SPMPAR CONSTANTS WITH THEIR SMCHAR COUNTERPARTS AND C STORE THE RELATIVE DIFFERENCES IN RERR. C EPSMCH = SPMPAR(1) DWARF = SPMPAR(2) GIANT = SPMPAR(3) RERR(1) = (EPSMCH - EPS)/EPSMCH RERR(2) = (DWARF - XMIN)/DWARF RERR(3) = (XMAX - GIANT)/GIANT C C WRITE THE SMCHAR CONSTANTS. C WRITE (NWRITE,10) * IBETA,IT,IRND,NGRD,MACHEP,NEGEP,IEXP,MINEXP,MAXEXP,EPS, * EPSNEG,XMIN,XMAX C C WRITE THE SPMPAR CONSTANTS AND THE RELATIVE DIFFERENCES. C WRITE (NWRITE,20) EPSMCH,RERR(1),DWARF,RERR(2),GIANT,RERR(3) STOP 10 FORMAT (17H1SMCHAR CONSTANTS /// 8H IBETA =, I6 // 8H IT =, * I6 // 8H IRND =, I6 // 8H NGRD =, I6 // 9H MACHEP =, * I6 // 8H NEGEP =, I6 // 7H IEXP =, I6 // 9H MINEXP =, * I6 // 9H MAXEXP =, I6 // 6H EPS =, E15.7 // 9H EPSNEG =, * E15.7 // 7H XMIN =, E15.7 // 7H XMAX =, E15.7) 20 FORMAT ( /// 42H SPMPAR CONSTANTS AND RELATIVE DIFFERENCES /// * 9H EPSMCH =, E15.7 / 10H RERR(1) =, E15.7 // * 8H DWARF =, E15.7 / 10H RERR(2) =, E15.7 // 8H GIANT =, * E15.7 / 10H RERR(3) =, E15.7) C C LAST CARD OF DRIVER. C END SUBROUTINE SMCHAR(IBETA,IT,IRND,NGRD,MACHEP,NEGEP,IEXP,MINEXP, 1 MAXEXP,EPS,EPSNEG,XMIN,XMAX) C INTEGER I,IBETA,IEXP,IRND,IT,IZ,J,K,MACHEP,MAXEXP,MINEXP, 1 MX,NEGEP,NGRD REAL A,B,BETA,BETAIN,BETAM1,EPS,EPSNEG,ONE,XMAX,XMIN,Y,Z,ZERO C C THIS SUBROUTINE IS INTENDED TO DETERMINE THE CHARACTERISTICS C OF THE FLOATING-POINT ARITHMETIC SYSTEM THAT ARE SPECIFIED C BELOW. THE FIRST THREE ARE DETERMINED ACCORDING TO AN C ALGORITHM DUE TO M. MALCOLM, CACM 15 (1972), PP. 949-951, C INCORPORATING SOME, BUT NOT ALL, OF THE IMPROVEMENTS C SUGGESTED BY M. GENTLEMAN AND S. MAROVICH, CACM 17 (1974), C PP. 276-277. C C C IBETA - THE RADIX OF THE FLOATING-POINT REPRESENTATION C IT - THE NUMBER OF BASE IBETA DIGITS IN THE FLOATING-POINT C SIGNIFICAND C IRND - 0 IF FLOATING-POINT ADDITION CHOPS, C 1 IF FLOATING-POINT ADDITION ROUNDS C NGRD - THE NUMBER OF GUARD DIGITS FOR MULTIPLICATION. IT IS C 0 IF IRND=1, OR IF IRND=0 AND ONLY IT BASE IBET C DIGITS PARTICIPATE IN THE POST NORMALIZATION SHIFT C OF THE FLOATING-POINT SIGNIFICAND IN MULTIPLICATION C 1 IF IRND=0 AND MORE THAN IT BASE IBETA DIGITS C PARTICIPATE IN THE POST NORMALIZATION SHIFT OF THE C FLOATING-POINT SIGNIFICAND IN MULTIPLICATION C MACHEP - THE LARGEST NEGATIVE INTEGER SUCH THAT C 1.0+FLOAT(IBETA)**MACHEP .NE. 1.0, EXCEPT THAT C MACHEP IS BOUNDED BELOW BY -(IT+3) C NEGEPS - THE LARGEST NEGATIVE INTEGER SUCH THAT C 1.0-FLOAT(IBETA)**NEGEPS .NE. 1.0, EXCEPT THAT C NEGEPS IS BOUNDED BELOW BY -(IT+3) C IEXP - THE NUMBER OF BITS (DECIMAL PLACES IF IBETA = 10) C RESERVED FOR THE REPRESENTATION OF THE EXPONENT C (INCLUDING THE BIAS OR SIGN) OF A FLOATING-POINT C NUMBER C MINEXP - THE LARGEST IN MAGNITUDE NEGATIVE INTEGER SUCH THAT C FLOAT(IBETA)**MINEXP IS A POSITIVE FLOATING-POINT C NUMBER C MAXEXP - THE LARGEST POSITIVE INTEGER EXPONENT FOR A FINITE C FLOATING-POINT NUMBER C EPS - THE SMALLEST POSITIVE FLOATING-POINT NUMBER SUCH C THAT 1.0+EPS .NE. 1.0. IN PARTICULAR, IF EITHER C IBETA = 2 OR IRND = 0, EPS = FLOAT(IBETA)**MACHEP. C OTHERWISE, EPS = (FLOAT(IBETA)**MACHEP)/2 C EPSNEG - A SMALL POSITIVE FLOATING-POINT NUMBER SUCH THAT C 1.0-EPSNEG .NE. 1.0. IN PARTICULAR, IF IBETA = 2 C OR IRND = 0, EPSNEG = FLOAT(IBETA)**NEGEPS. C OTHERWISE, EPSNEG = (IBETA**NEGEPS)/2. BECAUSE C NEGEPS IS BOUNDED BELOW BY -(IT+3), EPSNEG MAY NOT C BE THE SMALLEST NUMBER WHICH CAN ALTER 1.0 BY C SUBTRACTION. C XMIN - THE SMALLEST NON-VANISHING FLOATING-POINT POWER OF TH C RADIX. IN PARTICULAR, XMIN = FLOAT(IBETA)**MINEXP C XMAX - THE LARGEST FINITE FLOATING-POINT NUMBER. IN C PARTICULAR XMAX = (1.0-EPSNEG)*FLOAT(IBETA)**MAXEXP C NOTE - ON SOME MACHINES XMAX WILL BE ONLY THE C SECOND, OR PERHAPS THIRD, LARGEST NUMBER, BEING C TOO SMALL BY 1 OR 2 UNITS IN THE LAST DIGIT OF C THE SIGNIFICAND. C C LATEST REVISION - OCTOBER 22, 1979 C C AUTHOR - W. J. CODY C ARGONNE NATIONAL LABORATORY C C----------------------------------------------------------------- ONE = FLOAT(1) ZERO = 0.0E0 C----------------------------------------------------------------- C DETERMINE IBETA,BETA ALA MALCOLM C----------------------------------------------------------------- A = ONE 10 A = A + A IF (((A+ONE)-A)-ONE .EQ. ZERO) GO TO 10 B = ONE 20 B = B + B IF ((A+B)-A .EQ. ZERO) GO TO 20 IBETA = INT((A+B)-A) BETA = FLOAT(IBETA) C----------------------------------------------------------------- C DETERMINE IT, IRND C----------------------------------------------------------------- IT = 0 B = ONE 100 IT = IT + 1 B = B * BETA IF (((B+ONE)-B)-ONE .EQ. ZERO) GO TO 100 IRND = 0 BETAM1 = BETA - ONE IF ((A+BETAM1)-A .NE. ZERO) IRND = 1 C----------------------------------------------------------------- C DETERMINE NEGEP, EPSNEG C----------------------------------------------------------------- NEGEP = IT + 3 BETAIN = ONE / BETA A = ONE C DO 200 I = 1, NEGEP A = A * BETAIN 200 CONTINUE C B = A 210 IF ((ONE-A)-ONE .NE. ZERO) GO TO 220 A = A * BETA NEGEP = NEGEP - 1 GO TO 210 220 NEGEP = -NEGEP EPSNEG = A IF ((IBETA .EQ. 2) .OR. (IRND .EQ. 0)) GO TO 300 A = (A*(ONE+A)) / (ONE+ONE) IF ((ONE-A)-ONE .NE. ZERO) EPSNEG = A C----------------------------------------------------------------- C DETERMINE MACHEP, EPS C----------------------------------------------------------------- 300 MACHEP = -IT - 3 A = B 310 IF((ONE+A)-ONE .NE. ZERO) GO TO 320 A = A * BETA MACHEP = MACHEP + 1 GO TO 310 320 EPS = A IF ((IBETA .EQ. 2) .OR. (IRND .EQ. 0)) GO TO 350 A = (A*(ONE+A)) / (ONE+ONE) IF ((ONE+A)-ONE .NE. ZERO) EPS = A C----------------------------------------------------------------- C DETERMINE NGRD C----------------------------------------------------------------- 350 NGRD = 0 IF ((IRND .EQ. 0) .AND. ((ONE+EPS)*ONE-ONE) .NE. ZERO) NGRD = 1 C----------------------------------------------------------------- C DETERMINE IEXP, MINEXP, XMIN C C LOOP TO DETERMINE LARGEST I AND K = 2**I SUCH THAT C (1/BETA) ** (2**(I)) C DOES NOT UNDERFLOW C EXIT FROM LOOP IS SIGNALED BY AN UNDERFLOW. C----------------------------------------------------------------- I = 0 K = 1 Z = BETAIN 400 Y = Z Z = Y * Y C----------------------------------------------------------------- C CHECK FOR UNDERFLOW HERE C----------------------------------------------------------------- A = Z * ONE IF ((A+A .EQ. ZERO) .OR. (ABS(Z) .GE. Y)) GO TO 410 I = I + 1 K = K + K GO TO 400 410 IF (IBETA .EQ. 10) GO TO 420 IEXP = I + 1 MX = K + K GO TO 450 C----------------------------------------------------------------- C FOR DECIMAL MACHINES ONLY C----------------------------------------------------------------- 420 IEXP = 2 IZ = IBETA 430 IF (K .LT. IZ) GO TO 440 IZ = IZ * IBETA IEXP = IEXP + 1 GO TO 430 440 MX = IZ + IZ - 1 C----------------------------------------------------------------- C LOOP TO DETERMINE MINEXP, XMIN C EXIT FROM LOOP IS SIGNALED BY AN UNDERFLOW. C----------------------------------------------------------------- 450 XMIN = Y Y = Y * BETAIN C----------------------------------------------------------------- C CHECK FOR UNDERFLOW HERE C----------------------------------------------------------------- A = Y * ONE IF (((A+A) .EQ. ZERO) .OR. (ABS(Y) .GE. XMIN)) GO TO 460 K = K + 1 GO TO 450 460 MINEXP = -K C----------------------------------------------------------------- C DETERMINE MAXEXP, XMAX C----------------------------------------------------------------- IF ((MX .GT. K+K-3) .OR. (IBETA .EQ. 10)) GO TO 500 MX = MX + MX IEXP = IEXP + 1 500 MAXEXP = MX + MINEXP C----------------------------------------------------------------- C ADJUST FOR MACHINES WITH IMPLICIT LEADING C BIT IN BINARY SIGNIFICAND AND MACHINES WITH C RADIX POINT AT EXTREME RIGHT OF SIGNIFICAND C----------------------------------------------------------------- I = MAXEXP + MINEXP IF ((IBETA .EQ. 2) .AND. (I .EQ. 0)) MAXEXP = MAXEXP - 1 IF (I .GT. 20) MAXEXP = MAXEXP - 1 IF (A .NE. Y) MAXEXP = MAXEXP - 2 XMAX = ONE - EPSNEG IF (XMAX*ONE .NE. XMAX) XMAX = ONE - BETA * EPSNEG XMAX = XMAX / (BETA * BETA * BETA * XMIN) I = MAXEXP + MINEXP + 3 IF (I .LE. 0) GO TO 520 C DO 510 J = 1, I IF (IBETA .EQ. 2) XMAX = XMAX + XMAX IF (IBETA .NE. 2) XMAX = XMAX * BETA 510 CONTINUE C 520 RETURN C ---------- LAST CARD OF SMCHAR ---------- END PyBDSF-1.10.1/src/minpack/ex/file08000066400000000000000000000336211420247104600164650ustar00rootroot00000000000000C ********** C C THIS PROGRAM TESTS CODES FOR THE SOLUTION OF N NONLINEAR C EQUATIONS IN N VARIABLES. IT CONSISTS OF A DRIVER AND AN C INTERFACE SUBROUTINE FCN. THE DRIVER READS IN DATA, CALLS THE C NONLINEAR EQUATION SOLVER, AND FINALLY PRINTS OUT INFORMATION C ON THE PERFORMANCE OF THE SOLVER. THIS IS ONLY A SAMPLE DRIVER, C MANY OTHER DRIVERS ARE POSSIBLE. THE INTERFACE SUBROUTINE FCN C IS NECESSARY TO TAKE INTO ACCOUNT THE FORMS OF CALLING C SEQUENCES USED BY THE FUNCTION SUBROUTINES IN THE VARIOUS C NONLINEAR EQUATION SOLVERS. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... SPMPAR,ENORM,HYBRD1,INITPT,VECFCN C C FORTRAN-SUPPLIED ... SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IC,INFO,K,LWA,N,NFEV,NPROB,NREAD,NTRIES,NWRITE INTEGER NA(60),NF(60),NP(60),NX(60) REAL FACTOR,FNORM1,FNORM2,ONE,TEN,TOL REAL FNM(60),FVEC(40),WA(2660),X(40) REAL SPMPAR,ENORM EXTERNAL FCN COMMON /REFNUM/ NPROB,NFEV C C LOGICAL INPUT UNIT IS ASSUMED TO BE NUMBER 5. C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NREAD,NWRITE /5,6/ C DATA ONE,TEN /1.0E0,1.0E1/ TOL = SQRT(SPMPAR(1)) LWA = 2660 IC = 0 10 CONTINUE READ (NREAD,50) NPROB,N,NTRIES IF (NPROB .LE. 0) GO TO 30 FACTOR = ONE DO 20 K = 1, NTRIES IC = IC + 1 CALL INITPT(N,X,NPROB,FACTOR) CALL VECFCN(N,X,FVEC,NPROB) FNORM1 = ENORM(N,FVEC) WRITE (NWRITE,60) NPROB,N NFEV = 0 CALL HYBRD1(FCN,N,X,FVEC,TOL,INFO,WA,LWA) FNORM2 = ENORM(N,FVEC) NP(IC) = NPROB NA(IC) = N NF(IC) = NFEV NX(IC) = INFO FNM(IC) = FNORM2 WRITE (NWRITE,70) FNORM1,FNORM2,NFEV,INFO,(X(I), I = 1, N) FACTOR = TEN*FACTOR 20 CONTINUE GO TO 10 30 CONTINUE WRITE (NWRITE,80) IC WRITE (NWRITE,90) DO 40 I = 1, IC WRITE (NWRITE,100) NP(I),NA(I),NF(I),NX(I),FNM(I) 40 CONTINUE STOP 50 FORMAT (3I5) 60 FORMAT ( //// 5X, 8H PROBLEM, I5, 5X, 10H DIMENSION, I5, 5X //) 70 FORMAT (5X, 33H INITIAL L2 NORM OF THE RESIDUALS, E15.7 // 5X, * 33H FINAL L2 NORM OF THE RESIDUALS , E15.7 // 5X, * 33H NUMBER OF FUNCTION EVALUATIONS , I10 // 5X, * 15H EXIT PARAMETER, 18X, I10 // 5X, * 27H FINAL APPROXIMATE SOLUTION // (5X, 5E15.7)) 80 FORMAT (12H1SUMMARY OF , I3, 16H CALLS TO HYBRD1 /) 90 FORMAT (39H NPROB N NFEV INFO FINAL L2 NORM /) 100 FORMAT (I4, I6, I7, I6, 1X, E15.7) C C LAST CARD OF DRIVER. C END SUBROUTINE FCN(N,X,FVEC,IFLAG) INTEGER N,IFLAG REAL X(N),FVEC(N) C ********** C C THE CALLING SEQUENCE OF FCN SHOULD BE IDENTICAL TO THE C CALLING SEQUENCE OF THE FUNCTION SUBROUTINE IN THE NONLINEAR C EQUATION SOLVER. FCN SHOULD ONLY CALL THE TESTING FUNCTION C SUBROUTINE VECFCN WITH THE APPROPRIATE VALUE OF PROBLEM C NUMBER (NPROB). C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... VECFCN C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER NPROB,NFEV COMMON /REFNUM/ NPROB,NFEV CALL VECFCN(N,X,FVEC,NPROB) NFEV = NFEV + 1 RETURN C C LAST CARD OF INTERFACE SUBROUTINE FCN. C END SUBROUTINE VECFCN(N,X,FVEC,NPROB) INTEGER N,NPROB REAL X(N),FVEC(N) C ********** C C SUBROUTINE VECFCN C C THIS SUBROUTINE DEFINES FOURTEEN TEST FUNCTIONS. THE FIRST C FIVE TEST FUNCTIONS ARE OF DIMENSIONS 2,4,2,4,3, RESPECTIVELY, C WHILE THE REMAINING TEST FUNCTIONS ARE OF VARIABLE DIMENSION C N FOR ANY N GREATER THAN OR EQUAL TO 1 (PROBLEM 6 IS AN C EXCEPTION TO THIS, SINCE IT DOES NOT ALLOW N = 1). C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE VECFCN(N,X,FVEC,NPROB) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE NPROB C FUNCTION VECTOR EVALUATED AT X. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... ATAN,COS,EXP,SIGN,SIN,SQRT, C MAX0,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IEV,IVAR,J,K,K1,K2,KP1,ML,MU REAL C1,C2,C3,C4,C5,C6,C7,C8,C9,EIGHT,FIVE,H,ONE,PROD,SUM,SUM1, * SUM2,TEMP,TEMP1,TEMP2,TEN,THREE,TI,TJ,TK,TPI,TWO,ZERO REAL FLOAT DATA ZERO,ONE,TWO,THREE,FIVE,EIGHT,TEN * /0.0E0,1.0E0,2.0E0,3.0E0,5.0E0,8.0E0,1.0E1/ DATA C1,C2,C3,C4,C5,C6,C7,C8,C9 * /1.0E4,1.0001E0,2.0E2,2.02E1,1.98E1,1.8E2,2.5E-1,5.0E-1, * 2.9E1/ FLOAT(IVAR) = IVAR C C PROBLEM SELECTOR. C GO TO (10,20,30,40,50,60,120,170,200,220,270,300,330,350), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE FVEC(1) = ONE - X(1) FVEC(2) = TEN*(X(2) - X(1)**2) GO TO 380 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE FVEC(1) = X(1) + TEN*X(2) FVEC(2) = SQRT(FIVE)*(X(3) - X(4)) FVEC(3) = (X(2) - TWO*X(3))**2 FVEC(4) = SQRT(TEN)*(X(1) - X(4))**2 GO TO 380 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE FVEC(1) = C1*X(1)*X(2) - ONE FVEC(2) = EXP(-X(1)) + EXP(-X(2)) - C2 GO TO 380 C C WOOD FUNCTION. C 40 CONTINUE TEMP1 = X(2) - X(1)**2 TEMP2 = X(4) - X(3)**2 FVEC(1) = -C3*X(1)*TEMP1 - (ONE - X(1)) FVEC(2) = C3*TEMP1 + C4*(X(2) - ONE) + C5*(X(4) - ONE) FVEC(3) = -C6*X(3)*TEMP2 - (ONE - X(3)) FVEC(4) = C6*TEMP2 + C4*(X(4) - ONE) + C5*(X(2) - ONE) GO TO 380 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE TPI = EIGHT*ATAN(ONE) TEMP1 = SIGN(C7,X(2)) IF (X(1) .GT. ZERO) TEMP1 = ATAN(X(2)/X(1))/TPI IF (X(1) .LT. ZERO) TEMP1 = ATAN(X(2)/X(1))/TPI + C8 TEMP2 = SQRT(X(1)**2+X(2)**2) FVEC(1) = TEN*(X(3) - TEN*TEMP1) FVEC(2) = TEN*(TEMP2 - ONE) FVEC(3) = X(3) GO TO 380 C C WATSON FUNCTION. C 60 CONTINUE DO 70 K = 1, N FVEC(K) = ZERO 70 CONTINUE DO 110 I = 1, 29 TI = FLOAT(I)/C9 SUM1 = ZERO TEMP = ONE DO 80 J = 2, N SUM1 = SUM1 + FLOAT(J-1)*TEMP*X(J) TEMP = TI*TEMP 80 CONTINUE SUM2 = ZERO TEMP = ONE DO 90 J = 1, N SUM2 = SUM2 + TEMP*X(J) TEMP = TI*TEMP 90 CONTINUE TEMP1 = SUM1 - SUM2**2 - ONE TEMP2 = TWO*TI*SUM2 TEMP = ONE/TI DO 100 K = 1, N FVEC(K) = FVEC(K) + TEMP*(FLOAT(K-1) - TEMP2)*TEMP1 TEMP = TI*TEMP 100 CONTINUE 110 CONTINUE TEMP = X(2) - X(1)**2 - ONE FVEC(1) = FVEC(1) + X(1)*(ONE - TWO*TEMP) FVEC(2) = FVEC(2) + TEMP GO TO 380 C C CHEBYQUAD FUNCTION. C 120 CONTINUE DO 130 K = 1, N FVEC(K) = ZERO 130 CONTINUE DO 150 J = 1, N TEMP1 = ONE TEMP2 = TWO*X(J) - ONE TEMP = TWO*TEMP2 DO 140 I = 1, N FVEC(I) = FVEC(I) + TEMP2 TI = TEMP*TEMP2 - TEMP1 TEMP1 = TEMP2 TEMP2 = TI 140 CONTINUE 150 CONTINUE TK = ONE/FLOAT(N) IEV = -1 DO 160 K = 1, N FVEC(K) = TK*FVEC(K) IF (IEV .GT. 0) FVEC(K) = FVEC(K) + ONE/(FLOAT(K)**2 - ONE) IEV = -IEV 160 CONTINUE GO TO 380 C C BROWN ALMOST-LINEAR FUNCTION. C 170 CONTINUE SUM = -FLOAT(N+1) PROD = ONE DO 180 J = 1, N SUM = SUM + X(J) PROD = X(J)*PROD 180 CONTINUE DO 190 K = 1, N FVEC(K) = X(K) + SUM 190 CONTINUE FVEC(N) = PROD - ONE GO TO 380 C C DISCRETE BOUNDARY VALUE FUNCTION. C 200 CONTINUE H = ONE/FLOAT(N+1) DO 210 K = 1, N TEMP = (X(K) + FLOAT(K)*H + ONE)**3 TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TWO*X(K) - TEMP1 - TEMP2 + TEMP*H**2/TWO 210 CONTINUE GO TO 380 C C DISCRETE INTEGRAL EQUATION FUNCTION. C 220 CONTINUE H = ONE/FLOAT(N+1) DO 260 K = 1, N TK = FLOAT(K)*H SUM1 = ZERO DO 230 J = 1, K TJ = FLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM1 = SUM1 + TJ*TEMP 230 CONTINUE SUM2 = ZERO KP1 = K + 1 IF (N .LT. KP1) GO TO 250 DO 240 J = KP1, N TJ = FLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM2 = SUM2 + (ONE - TJ)*TEMP 240 CONTINUE 250 CONTINUE FVEC(K) = X(K) + H*((ONE - TK)*SUM1 + TK*SUM2)/TWO 260 CONTINUE GO TO 380 C C TRIGONOMETRIC FUNCTION. C 270 CONTINUE SUM = ZERO DO 280 J = 1, N FVEC(J) = COS(X(J)) SUM = SUM + FVEC(J) 280 CONTINUE DO 290 K = 1, N FVEC(K) = FLOAT(N+K) - SIN(X(K)) - SUM - FLOAT(K)*FVEC(K) 290 CONTINUE GO TO 380 C C VARIABLY DIMENSIONED FUNCTION. C 300 CONTINUE SUM = ZERO DO 310 J = 1, N SUM = SUM + FLOAT(J)*(X(J) - ONE) 310 CONTINUE TEMP = SUM*(ONE + TWO*SUM**2) DO 320 K = 1, N FVEC(K) = X(K) - ONE + FLOAT(K)*TEMP 320 CONTINUE GO TO 380 C C BROYDEN TRIDIAGONAL FUNCTION. C 330 CONTINUE DO 340 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 340 CONTINUE GO TO 380 C C BROYDEN BANDED FUNCTION. C 350 CONTINUE ML = 5 MU = 1 DO 370 K = 1, N K1 = MAX0(1,K-ML) K2 = MIN0(K+MU,N) TEMP = ZERO DO 360 J = K1, K2 IF (J .NE. K) TEMP = TEMP + X(J)*(ONE + X(J)) 360 CONTINUE FVEC(K) = X(K)*(TWO + FIVE*X(K)**2) + ONE - TEMP 370 CONTINUE 380 CONTINUE RETURN C C LAST CARD OF SUBROUTINE VECFCN. C END SUBROUTINE INITPT(N,X,NPROB,FACTOR) INTEGER N,NPROB REAL FACTOR REAL X(N) C ********** C C SUBROUTINE INITPT C C THIS SUBROUTINE SPECIFIES THE STANDARD STARTING POINTS FOR C THE FUNCTIONS DEFINED BY SUBROUTINE VECFCN. THE SUBROUTINE C RETURNS IN X A MULTIPLE (FACTOR) OF THE STANDARD STARTING C POINT. FOR THE SIXTH FUNCTION THE STANDARD STARTING POINT IS C ZERO, SO IN THIS CASE, IF FACTOR IS NOT UNITY, THEN THE C SUBROUTINE RETURNS THE VECTOR X(J) = FACTOR, J=1,...,N. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE INITPT(N,X,NPROB,FACTOR) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE STANDARD C STARTING POINT FOR PROBLEM NPROB MULTIPLIED BY FACTOR. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C FACTOR IS AN INPUT VARIABLE WHICH SPECIFIES THE MULTIPLE OF C THE STANDARD STARTING POINT. IF FACTOR IS UNITY, NO C MULTIPLICATION IS PERFORMED. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IVAR,J REAL C1,H,HALF,ONE,THREE,TJ,ZERO REAL FLOAT DATA ZERO,HALF,ONE,THREE,C1 /0.0E0,5.0E-1,1.0E0,3.0E0,1.2E0/ FLOAT(IVAR) = IVAR C C SELECTION OF INITIAL POINT. C GO TO (10,20,30,40,50,60,80,100,120,120,140,160,180,180), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE X(1) = -C1 X(2) = ONE GO TO 200 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE X(1) = THREE X(2) = -ONE X(3) = ZERO X(4) = ONE GO TO 200 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE X(1) = ZERO X(2) = ONE GO TO 200 C C WOOD FUNCTION. C 40 CONTINUE X(1) = -THREE X(2) = -ONE X(3) = -THREE X(4) = -ONE GO TO 200 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE X(1) = -ONE X(2) = ZERO X(3) = ZERO GO TO 200 C C WATSON FUNCTION. C 60 CONTINUE DO 70 J = 1, N X(J) = ZERO 70 CONTINUE GO TO 200 C C CHEBYQUAD FUNCTION. C 80 CONTINUE H = ONE/FLOAT(N+1) DO 90 J = 1, N X(J) = FLOAT(J)*H 90 CONTINUE GO TO 200 C C BROWN ALMOST-LINEAR FUNCTION. C 100 CONTINUE DO 110 J = 1, N X(J) = HALF 110 CONTINUE GO TO 200 C C DISCRETE BOUNDARY VALUE AND INTEGRAL EQUATION FUNCTIONS. C 120 CONTINUE H = ONE/FLOAT(N+1) DO 130 J = 1, N TJ = FLOAT(J)*H X(J) = TJ*(TJ - ONE) 130 CONTINUE GO TO 200 C C TRIGONOMETRIC FUNCTION. C 140 CONTINUE H = ONE/FLOAT(N) DO 150 J = 1, N X(J) = H 150 CONTINUE GO TO 200 C C VARIABLY DIMENSIONED FUNCTION. C 160 CONTINUE H = ONE/FLOAT(N) DO 170 J = 1, N X(J) = ONE - FLOAT(J)*H 170 CONTINUE GO TO 200 C C BROYDEN TRIDIAGONAL AND BANDED FUNCTIONS. C 180 CONTINUE DO 190 J = 1, N X(J) = -ONE 190 CONTINUE 200 CONTINUE C C COMPUTE MULTIPLE OF INITIAL POINT. C IF (FACTOR .EQ. ONE) GO TO 250 IF (NPROB .EQ. 6) GO TO 220 DO 210 J = 1, N X(J) = FACTOR*X(J) 210 CONTINUE GO TO 240 220 CONTINUE DO 230 J = 1, N X(J) = FACTOR 230 CONTINUE 240 CONTINUE 250 CONTINUE RETURN C C LAST CARD OF SUBROUTINE INITPT. C END PyBDSF-1.10.1/src/minpack/ex/file09000066400000000000000000000542641420247104600164740ustar00rootroot00000000000000C ********** C C THIS PROGRAM TESTS CODES FOR THE SOLUTION OF N NONLINEAR C EQUATIONS IN N VARIABLES. IT CONSISTS OF A DRIVER AND AN C INTERFACE SUBROUTINE FCN. THE DRIVER READS IN DATA, CALLS THE C NONLINEAR EQUATION SOLVER, AND FINALLY PRINTS OUT INFORMATION C ON THE PERFORMANCE OF THE SOLVER. THIS IS ONLY A SAMPLE DRIVER, C MANY OTHER DRIVERS ARE POSSIBLE. THE INTERFACE SUBROUTINE FCN C IS NECESSARY TO TAKE INTO ACCOUNT THE FORMS OF CALLING C SEQUENCES USED BY THE FUNCTION AND JACOBIAN SUBROUTINES IN C THE VARIOUS NONLINEAR EQUATION SOLVERS. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... SPMPAR,ENORM,HYBRJ1,INITPT,VECFCN C C FORTRAN-SUPPLIED ... SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IC,INFO,K,LDFJAC,LWA,N,NFEV,NJEV,NPROB,NREAD,NTRIES, * NWRITE INTEGER NA(60),NF(60),NJ(60),NP(60),NX(60) REAL FACTOR,FNORM1,FNORM2,ONE,TEN,TOL REAL FNM(60),FJAC(40,40),FVEC(40),WA(1060),X(40) REAL SPMPAR,ENORM EXTERNAL FCN COMMON /REFNUM/ NPROB,NFEV,NJEV C C LOGICAL INPUT UNIT IS ASSUMED TO BE NUMBER 5. C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NREAD,NWRITE /5,6/ C DATA ONE,TEN /1.0E0,1.0E1/ TOL = SQRT(SPMPAR(1)) LDFJAC = 40 LWA = 1060 IC = 0 10 CONTINUE READ (NREAD,50) NPROB,N,NTRIES IF (NPROB .LE. 0) GO TO 30 FACTOR = ONE DO 20 K = 1, NTRIES IC = IC + 1 CALL INITPT(N,X,NPROB,FACTOR) CALL VECFCN(N,X,FVEC,NPROB) FNORM1 = ENORM(N,FVEC) WRITE (NWRITE,60) NPROB,N NFEV = 0 NJEV = 0 CALL HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA) FNORM2 = ENORM(N,FVEC) NP(IC) = NPROB NA(IC) = N NF(IC) = NFEV NJ(IC) = NJEV NX(IC) = INFO FNM(IC) = FNORM2 WRITE (NWRITE,70) * FNORM1,FNORM2,NFEV,NJEV,INFO,(X(I), I = 1, N) FACTOR = TEN*FACTOR 20 CONTINUE GO TO 10 30 CONTINUE WRITE (NWRITE,80) IC WRITE (NWRITE,90) DO 40 I = 1, IC WRITE (NWRITE,100) NP(I),NA(I),NF(I),NJ(I),NX(I),FNM(I) 40 CONTINUE STOP 50 FORMAT (3I5) 60 FORMAT ( //// 5X, 8H PROBLEM, I5, 5X, 10H DIMENSION, I5, 5X //) 70 FORMAT (5X, 33H INITIAL L2 NORM OF THE RESIDUALS, E15.7 // 5X, * 33H FINAL L2 NORM OF THE RESIDUALS , E15.7 // 5X, * 33H NUMBER OF FUNCTION EVALUATIONS , I10 // 5X, * 33H NUMBER OF JACOBIAN EVALUATIONS , I10 // 5X, * 15H EXIT PARAMETER, 18X, I10 // 5X, * 27H FINAL APPROXIMATE SOLUTION // (5X, 5E15.7)) 80 FORMAT (12H1SUMMARY OF , I3, 16H CALLS TO HYBRJ1 /) 90 FORMAT (46H NPROB N NFEV NJEV INFO FINAL L2 NORM /) 100 FORMAT (I4, I6, 2I7, I6, 1X, E15.7) C C LAST CARD OF DRIVER. C END SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER N,LDFJAC,IFLAG REAL X(N),FVEC(N),FJAC(LDFJAC,N) C ********** C C THE CALLING SEQUENCE OF FCN SHOULD BE IDENTICAL TO THE C CALLING SEQUENCE OF THE FUNCTION SUBROUTINE IN THE NONLINEAR C EQUATION SOLVER. FCN SHOULD ONLY CALL THE TESTING FUNCTION C AND JACOBIAN SUBROUTINES VECFCN AND VECJAC WITH THE C APPROPRIATE VALUE OF PROBLEM NUMBER (NPROB). C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... VECFCN,VECJAC C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER NPROB,NFEV,NJEV COMMON /REFNUM/ NPROB,NFEV,NJEV IF (IFLAG .EQ. 1) CALL VECFCN(N,X,FVEC,NPROB) IF (IFLAG .EQ. 2) CALL VECJAC(N,X,FJAC,LDFJAC,NPROB) IF (IFLAG .EQ. 1) NFEV = NFEV + 1 IF (IFLAG .EQ. 2) NJEV = NJEV + 1 RETURN C C LAST CARD OF INTERFACE SUBROUTINE FCN. C END SUBROUTINE VECJAC(N,X,FJAC,LDFJAC,NPROB) INTEGER N,LDFJAC,NPROB REAL X(N),FJAC(LDFJAC,N) C ********** C C SUBROUTINE VECJAC C C THIS SUBROUTINE DEFINES THE JACOBIAN MATRICES OF FOURTEEN C TEST FUNCTIONS. THE PROBLEM DIMENSIONS ARE AS DESCRIBED C IN THE PROLOGUE COMMENTS OF VECFCN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE VECJAC(N,X,FJAC,LDFJAC,NPROB) C C WHERE C C N IS A POSITIVE INTEGER VARIABLE. C C X IS AN ARRAY OF LENGTH N. C C FJAC IS AN N BY N ARRAY. ON OUTPUT FJAC CONTAINS THE C JACOBIAN MATRIX OF THE NPROB FUNCTION EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C NPROB IS A POSITIVE INTEGER VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... ATAN,COS,EXP,AMIN1,SIN,SQRT, C MAX0,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IVAR,J,K,K1,K2,ML,MU REAL C1,C3,C4,C5,C6,C9,EIGHT,FIFTN,FIVE,FOUR,H,HUNDRD,ONE,PROD, * SIX,SUM,SUM1,SUM2,TEMP,TEMP1,TEMP2,TEMP3,TEMP4,TEN,THREE, * TI,TJ,TK,TPI,TWENTY,TWO,ZERO REAL FLOAT DATA ZERO,ONE,TWO,THREE,FOUR,FIVE,SIX,EIGHT,TEN,FIFTN,TWENTY, * HUNDRD * /0.0E0,1.0E0,2.0E0,3.0E0,4.0E0,5.0E0,6.0E0,8.0E0,1.0E1, * 1.5E1,2.0E1,1.0E2/ DATA C1,C3,C4,C5,C6,C9 /1.0E4,2.0E2,2.02E1,1.98E1,1.8E2,2.9E1/ FLOAT(IVAR) = IVAR C C JACOBIAN ROUTINE SELECTOR. C GO TO (10,20,50,60,90,100,200,230,290,320,350,380,420,450), * NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE FJAC(1,1) = -ONE FJAC(1,2) = ZERO FJAC(2,1) = -TWENTY*X(1) FJAC(2,2) = TEN GO TO 490 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE DO 40 K = 1, 4 DO 30 J = 1, 4 FJAC(K,J) = ZERO 30 CONTINUE 40 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = TEN FJAC(2,3) = SQRT(FIVE) FJAC(2,4) = -FJAC(2,3) FJAC(3,2) = TWO*(X(2) - TWO*X(3)) FJAC(3,3) = -TWO*FJAC(3,2) FJAC(4,1) = TWO*SQRT(TEN)*(X(1) - X(4)) FJAC(4,4) = -FJAC(4,1) GO TO 490 C C POWELL BADLY SCALED FUNCTION. C 50 CONTINUE FJAC(1,1) = C1*X(2) FJAC(1,2) = C1*X(1) FJAC(2,1) = -EXP(-X(1)) FJAC(2,2) = -EXP(-X(2)) GO TO 490 C C WOOD FUNCTION. C 60 CONTINUE DO 80 K = 1, 4 DO 70 J = 1, 4 FJAC(K,J) = ZERO 70 CONTINUE 80 CONTINUE TEMP1 = X(2) - THREE*X(1)**2 TEMP2 = X(4) - THREE*X(3)**2 FJAC(1,1) = -C3*TEMP1 + ONE FJAC(1,2) = -C3*X(1) FJAC(2,1) = -TWO*C3*X(1) FJAC(2,2) = C3 + C4 FJAC(2,4) = C5 FJAC(3,3) = -C6*TEMP2 + ONE FJAC(3,4) = -C6*X(3) FJAC(4,2) = C5 FJAC(4,3) = -TWO*C6*X(3) FJAC(4,4) = C6 + C4 GO TO 490 C C HELICAL VALLEY FUNCTION. C 90 CONTINUE TPI = EIGHT*ATAN(ONE) TEMP = X(1)**2 + X(2)**2 TEMP1 = TPI*TEMP TEMP2 = SQRT(TEMP) FJAC(1,1) = HUNDRD*X(2)/TEMP1 FJAC(1,2) = -HUNDRD*X(1)/TEMP1 FJAC(1,3) = TEN FJAC(2,1) = TEN*X(1)/TEMP2 FJAC(2,2) = TEN*X(2)/TEMP2 FJAC(2,3) = ZERO FJAC(3,1) = ZERO FJAC(3,2) = ZERO FJAC(3,3) = ONE GO TO 490 C C WATSON FUNCTION. C 100 CONTINUE DO 120 K = 1, N DO 110 J = K, N FJAC(K,J) = ZERO 110 CONTINUE 120 CONTINUE DO 170 I = 1, 29 TI = FLOAT(I)/C9 SUM1 = ZERO TEMP = ONE DO 130 J = 2, N SUM1 = SUM1 + FLOAT(J-1)*TEMP*X(J) TEMP = TI*TEMP 130 CONTINUE SUM2 = ZERO TEMP = ONE DO 140 J = 1, N SUM2 = SUM2 + TEMP*X(J) TEMP = TI*TEMP 140 CONTINUE TEMP1 = TWO*(SUM1 - SUM2**2 - ONE) TEMP2 = TWO*SUM2 TEMP = TI**2 TK = ONE DO 160 K = 1, N TJ = TK DO 150 J = K, N FJAC(K,J) = FJAC(K,J) * + TJ * *((FLOAT(K-1)/TI - TEMP2) * *(FLOAT(J-1)/TI - TEMP2) - TEMP1) TJ = TI*TJ 150 CONTINUE TK = TEMP*TK 160 CONTINUE 170 CONTINUE FJAC(1,1) = FJAC(1,1) + SIX*X(1)**2 - TWO*X(2) + THREE FJAC(1,2) = FJAC(1,2) - TWO*X(1) FJAC(2,2) = FJAC(2,2) + ONE DO 190 K = 1, N DO 180 J = K, N FJAC(J,K) = FJAC(K,J) 180 CONTINUE 190 CONTINUE GO TO 490 C C CHEBYQUAD FUNCTION. C 200 CONTINUE TK = ONE/FLOAT(N) DO 220 J = 1, N TEMP1 = ONE TEMP2 = TWO*X(J) - ONE TEMP = TWO*TEMP2 TEMP3 = ZERO TEMP4 = TWO DO 210 K = 1, N FJAC(K,J) = TK*TEMP4 TI = FOUR*TEMP2 + TEMP*TEMP4 - TEMP3 TEMP3 = TEMP4 TEMP4 = TI TI = TEMP*TEMP2 - TEMP1 TEMP1 = TEMP2 TEMP2 = TI 210 CONTINUE 220 CONTINUE GO TO 490 C C BROWN ALMOST-LINEAR FUNCTION. C 230 CONTINUE PROD = ONE DO 250 J = 1, N PROD = X(J)*PROD DO 240 K = 1, N FJAC(K,J) = ONE 240 CONTINUE FJAC(J,J) = TWO 250 CONTINUE DO 280 J = 1, N TEMP = X(J) IF (TEMP .NE. ZERO) GO TO 270 TEMP = ONE PROD = ONE DO 260 K = 1, N IF (K .NE. J) PROD = X(K)*PROD 260 CONTINUE 270 CONTINUE FJAC(N,J) = PROD/TEMP 280 CONTINUE GO TO 490 C C DISCRETE BOUNDARY VALUE FUNCTION. C 290 CONTINUE H = ONE/FLOAT(N+1) DO 310 K = 1, N TEMP = THREE*(X(K) + FLOAT(K)*H + ONE)**2 DO 300 J = 1, N FJAC(K,J) = ZERO 300 CONTINUE FJAC(K,K) = TWO + TEMP*H**2/TWO IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -ONE 310 CONTINUE GO TO 490 C C DISCRETE INTEGRAL EQUATION FUNCTION. C 320 CONTINUE H = ONE/FLOAT(N+1) DO 340 K = 1, N TK = FLOAT(K)*H DO 330 J = 1, N TJ = FLOAT(J)*H TEMP = THREE*(X(J) + TJ + ONE)**2 FJAC(K,J) = H*AMIN1(TJ*(ONE-TK),TK*(ONE-TJ))*TEMP/TWO 330 CONTINUE FJAC(K,K) = FJAC(K,K) + ONE 340 CONTINUE GO TO 490 C C TRIGONOMETRIC FUNCTION. C 350 CONTINUE DO 370 J = 1, N TEMP = SIN(X(J)) DO 360 K = 1, N FJAC(K,J) = TEMP 360 CONTINUE FJAC(J,J) = FLOAT(J+1)*TEMP - COS(X(J)) 370 CONTINUE GO TO 490 C C VARIABLY DIMENSIONED FUNCTION. C 380 CONTINUE SUM = ZERO DO 390 J = 1, N SUM = SUM + FLOAT(J)*(X(J) - ONE) 390 CONTINUE TEMP = ONE + SIX*SUM**2 DO 410 K = 1, N DO 400 J = K, N FJAC(K,J) = FLOAT(K*J)*TEMP FJAC(J,K) = FJAC(K,J) 400 CONTINUE FJAC(K,K) = FJAC(K,K) + ONE 410 CONTINUE GO TO 490 C C BROYDEN TRIDIAGONAL FUNCTION. C 420 CONTINUE DO 440 K = 1, N DO 430 J = 1, N FJAC(K,J) = ZERO 430 CONTINUE FJAC(K,K) = THREE - FOUR*X(K) IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -TWO 440 CONTINUE GO TO 490 C C BROYDEN BANDED FUNCTION. C 450 CONTINUE ML = 5 MU = 1 DO 480 K = 1, N DO 460 J = 1, N FJAC(K,J) = ZERO 460 CONTINUE K1 = MAX0(1,K-ML) K2 = MIN0(K+MU,N) DO 470 J = K1, K2 IF (J .NE. K) FJAC(K,J) = -(ONE + TWO*X(J)) 470 CONTINUE FJAC(K,K) = TWO + FIFTN*X(K)**2 480 CONTINUE 490 CONTINUE RETURN C C LAST CARD OF SUBROUTINE VECJAC. C END SUBROUTINE INITPT(N,X,NPROB,FACTOR) INTEGER N,NPROB REAL FACTOR REAL X(N) C ********** C C SUBROUTINE INITPT C C THIS SUBROUTINE SPECIFIES THE STANDARD STARTING POINTS FOR C THE FUNCTIONS DEFINED BY SUBROUTINE VECFCN. THE SUBROUTINE C RETURNS IN X A MULTIPLE (FACTOR) OF THE STANDARD STARTING C POINT. FOR THE SIXTH FUNCTION THE STANDARD STARTING POINT IS C ZERO, SO IN THIS CASE, IF FACTOR IS NOT UNITY, THEN THE C SUBROUTINE RETURNS THE VECTOR X(J) = FACTOR, J=1,...,N. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE INITPT(N,X,NPROB,FACTOR) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE STANDARD C STARTING POINT FOR PROBLEM NPROB MULTIPLIED BY FACTOR. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C FACTOR IS AN INPUT VARIABLE WHICH SPECIFIES THE MULTIPLE OF C THE STANDARD STARTING POINT. IF FACTOR IS UNITY, NO C MULTIPLICATION IS PERFORMED. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IVAR,J REAL C1,H,HALF,ONE,THREE,TJ,ZERO REAL FLOAT DATA ZERO,HALF,ONE,THREE,C1 /0.0E0,5.0E-1,1.0E0,3.0E0,1.2E0/ FLOAT(IVAR) = IVAR C C SELECTION OF INITIAL POINT. C GO TO (10,20,30,40,50,60,80,100,120,120,140,160,180,180), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE X(1) = -C1 X(2) = ONE GO TO 200 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE X(1) = THREE X(2) = -ONE X(3) = ZERO X(4) = ONE GO TO 200 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE X(1) = ZERO X(2) = ONE GO TO 200 C C WOOD FUNCTION. C 40 CONTINUE X(1) = -THREE X(2) = -ONE X(3) = -THREE X(4) = -ONE GO TO 200 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE X(1) = -ONE X(2) = ZERO X(3) = ZERO GO TO 200 C C WATSON FUNCTION. C 60 CONTINUE DO 70 J = 1, N X(J) = ZERO 70 CONTINUE GO TO 200 C C CHEBYQUAD FUNCTION. C 80 CONTINUE H = ONE/FLOAT(N+1) DO 90 J = 1, N X(J) = FLOAT(J)*H 90 CONTINUE GO TO 200 C C BROWN ALMOST-LINEAR FUNCTION. C 100 CONTINUE DO 110 J = 1, N X(J) = HALF 110 CONTINUE GO TO 200 C C DISCRETE BOUNDARY VALUE AND INTEGRAL EQUATION FUNCTIONS. C 120 CONTINUE H = ONE/FLOAT(N+1) DO 130 J = 1, N TJ = FLOAT(J)*H X(J) = TJ*(TJ - ONE) 130 CONTINUE GO TO 200 C C TRIGONOMETRIC FUNCTION. C 140 CONTINUE H = ONE/FLOAT(N) DO 150 J = 1, N X(J) = H 150 CONTINUE GO TO 200 C C VARIABLY DIMENSIONED FUNCTION. C 160 CONTINUE H = ONE/FLOAT(N) DO 170 J = 1, N X(J) = ONE - FLOAT(J)*H 170 CONTINUE GO TO 200 C C BROYDEN TRIDIAGONAL AND BANDED FUNCTIONS. C 180 CONTINUE DO 190 J = 1, N X(J) = -ONE 190 CONTINUE 200 CONTINUE C C COMPUTE MULTIPLE OF INITIAL POINT. C IF (FACTOR .EQ. ONE) GO TO 250 IF (NPROB .EQ. 6) GO TO 220 DO 210 J = 1, N X(J) = FACTOR*X(J) 210 CONTINUE GO TO 240 220 CONTINUE DO 230 J = 1, N X(J) = FACTOR 230 CONTINUE 240 CONTINUE 250 CONTINUE RETURN C C LAST CARD OF SUBROUTINE INITPT. C END SUBROUTINE VECFCN(N,X,FVEC,NPROB) INTEGER N,NPROB REAL X(N),FVEC(N) C ********** C C SUBROUTINE VECFCN C C THIS SUBROUTINE DEFINES FOURTEEN TEST FUNCTIONS. THE FIRST C FIVE TEST FUNCTIONS ARE OF DIMENSIONS 2,4,2,4,3, RESPECTIVELY, C WHILE THE REMAINING TEST FUNCTIONS ARE OF VARIABLE DIMENSION C N FOR ANY N GREATER THAN OR EQUAL TO 1 (PROBLEM 6 IS AN C EXCEPTION TO THIS, SINCE IT DOES NOT ALLOW N = 1). C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE VECFCN(N,X,FVEC,NPROB) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE NPROB C FUNCTION VECTOR EVALUATED AT X. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... ATAN,COS,EXP,SIGN,SIN,SQRT, C MAX0,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IEV,IVAR,J,K,K1,K2,KP1,ML,MU REAL C1,C2,C3,C4,C5,C6,C7,C8,C9,EIGHT,FIVE,H,ONE,PROD,SUM,SUM1, * SUM2,TEMP,TEMP1,TEMP2,TEN,THREE,TI,TJ,TK,TPI,TWO,ZERO REAL FLOAT DATA ZERO,ONE,TWO,THREE,FIVE,EIGHT,TEN * /0.0E0,1.0E0,2.0E0,3.0E0,5.0E0,8.0E0,1.0E1/ DATA C1,C2,C3,C4,C5,C6,C7,C8,C9 * /1.0E4,1.0001E0,2.0E2,2.02E1,1.98E1,1.8E2,2.5E-1,5.0E-1, * 2.9E1/ FLOAT(IVAR) = IVAR C C PROBLEM SELECTOR. C GO TO (10,20,30,40,50,60,120,170,200,220,270,300,330,350), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE FVEC(1) = ONE - X(1) FVEC(2) = TEN*(X(2) - X(1)**2) GO TO 380 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE FVEC(1) = X(1) + TEN*X(2) FVEC(2) = SQRT(FIVE)*(X(3) - X(4)) FVEC(3) = (X(2) - TWO*X(3))**2 FVEC(4) = SQRT(TEN)*(X(1) - X(4))**2 GO TO 380 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE FVEC(1) = C1*X(1)*X(2) - ONE FVEC(2) = EXP(-X(1)) + EXP(-X(2)) - C2 GO TO 380 C C WOOD FUNCTION. C 40 CONTINUE TEMP1 = X(2) - X(1)**2 TEMP2 = X(4) - X(3)**2 FVEC(1) = -C3*X(1)*TEMP1 - (ONE - X(1)) FVEC(2) = C3*TEMP1 + C4*(X(2) - ONE) + C5*(X(4) - ONE) FVEC(3) = -C6*X(3)*TEMP2 - (ONE - X(3)) FVEC(4) = C6*TEMP2 + C4*(X(4) - ONE) + C5*(X(2) - ONE) GO TO 380 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE TPI = EIGHT*ATAN(ONE) TEMP1 = SIGN(C7,X(2)) IF (X(1) .GT. ZERO) TEMP1 = ATAN(X(2)/X(1))/TPI IF (X(1) .LT. ZERO) TEMP1 = ATAN(X(2)/X(1))/TPI + C8 TEMP2 = SQRT(X(1)**2+X(2)**2) FVEC(1) = TEN*(X(3) - TEN*TEMP1) FVEC(2) = TEN*(TEMP2 - ONE) FVEC(3) = X(3) GO TO 380 C C WATSON FUNCTION. C 60 CONTINUE DO 70 K = 1, N FVEC(K) = ZERO 70 CONTINUE DO 110 I = 1, 29 TI = FLOAT(I)/C9 SUM1 = ZERO TEMP = ONE DO 80 J = 2, N SUM1 = SUM1 + FLOAT(J-1)*TEMP*X(J) TEMP = TI*TEMP 80 CONTINUE SUM2 = ZERO TEMP = ONE DO 90 J = 1, N SUM2 = SUM2 + TEMP*X(J) TEMP = TI*TEMP 90 CONTINUE TEMP1 = SUM1 - SUM2**2 - ONE TEMP2 = TWO*TI*SUM2 TEMP = ONE/TI DO 100 K = 1, N FVEC(K) = FVEC(K) + TEMP*(FLOAT(K-1) - TEMP2)*TEMP1 TEMP = TI*TEMP 100 CONTINUE 110 CONTINUE TEMP = X(2) - X(1)**2 - ONE FVEC(1) = FVEC(1) + X(1)*(ONE - TWO*TEMP) FVEC(2) = FVEC(2) + TEMP GO TO 380 C C CHEBYQUAD FUNCTION. C 120 CONTINUE DO 130 K = 1, N FVEC(K) = ZERO 130 CONTINUE DO 150 J = 1, N TEMP1 = ONE TEMP2 = TWO*X(J) - ONE TEMP = TWO*TEMP2 DO 140 I = 1, N FVEC(I) = FVEC(I) + TEMP2 TI = TEMP*TEMP2 - TEMP1 TEMP1 = TEMP2 TEMP2 = TI 140 CONTINUE 150 CONTINUE TK = ONE/FLOAT(N) IEV = -1 DO 160 K = 1, N FVEC(K) = TK*FVEC(K) IF (IEV .GT. 0) FVEC(K) = FVEC(K) + ONE/(FLOAT(K)**2 - ONE) IEV = -IEV 160 CONTINUE GO TO 380 C C BROWN ALMOST-LINEAR FUNCTION. C 170 CONTINUE SUM = -FLOAT(N+1) PROD = ONE DO 180 J = 1, N SUM = SUM + X(J) PROD = X(J)*PROD 180 CONTINUE DO 190 K = 1, N FVEC(K) = X(K) + SUM 190 CONTINUE FVEC(N) = PROD - ONE GO TO 380 C C DISCRETE BOUNDARY VALUE FUNCTION. C 200 CONTINUE H = ONE/FLOAT(N+1) DO 210 K = 1, N TEMP = (X(K) + FLOAT(K)*H + ONE)**3 TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TWO*X(K) - TEMP1 - TEMP2 + TEMP*H**2/TWO 210 CONTINUE GO TO 380 C C DISCRETE INTEGRAL EQUATION FUNCTION. C 220 CONTINUE H = ONE/FLOAT(N+1) DO 260 K = 1, N TK = FLOAT(K)*H SUM1 = ZERO DO 230 J = 1, K TJ = FLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM1 = SUM1 + TJ*TEMP 230 CONTINUE SUM2 = ZERO KP1 = K + 1 IF (N .LT. KP1) GO TO 250 DO 240 J = KP1, N TJ = FLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM2 = SUM2 + (ONE - TJ)*TEMP 240 CONTINUE 250 CONTINUE FVEC(K) = X(K) + H*((ONE - TK)*SUM1 + TK*SUM2)/TWO 260 CONTINUE GO TO 380 C C TRIGONOMETRIC FUNCTION. C 270 CONTINUE SUM = ZERO DO 280 J = 1, N FVEC(J) = COS(X(J)) SUM = SUM + FVEC(J) 280 CONTINUE DO 290 K = 1, N FVEC(K) = FLOAT(N+K) - SIN(X(K)) - SUM - FLOAT(K)*FVEC(K) 290 CONTINUE GO TO 380 C C VARIABLY DIMENSIONED FUNCTION. C 300 CONTINUE SUM = ZERO DO 310 J = 1, N SUM = SUM + FLOAT(J)*(X(J) - ONE) 310 CONTINUE TEMP = SUM*(ONE + TWO*SUM**2) DO 320 K = 1, N FVEC(K) = X(K) - ONE + FLOAT(K)*TEMP 320 CONTINUE GO TO 380 C C BROYDEN TRIDIAGONAL FUNCTION. C 330 CONTINUE DO 340 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 340 CONTINUE GO TO 380 C C BROYDEN BANDED FUNCTION. C 350 CONTINUE ML = 5 MU = 1 DO 370 K = 1, N K1 = MAX0(1,K-ML) K2 = MIN0(K+MU,N) TEMP = ZERO DO 360 J = K1, K2 IF (J .NE. K) TEMP = TEMP + X(J)*(ONE + X(J)) 360 CONTINUE FVEC(K) = X(K)*(TWO + FIVE*X(K)**2) + ONE - TEMP 370 CONTINUE 380 CONTINUE RETURN C C LAST CARD OF SUBROUTINE VECFCN. C END PyBDSF-1.10.1/src/minpack/ex/file11000066400000000000000000000666741420247104600164750ustar00rootroot00000000000000C ********** C C THIS PROGRAM TESTS CODES FOR THE LEAST-SQUARES SOLUTION OF C M NONLINEAR EQUATIONS IN N VARIABLES. IT CONSISTS OF A DRIVER C AND AN INTERFACE SUBROUTINE FCN. THE DRIVER READS IN DATA, C CALLS THE NONLINEAR LEAST-SQUARES SOLVER, AND FINALLY PRINTS C OUT INFORMATION ON THE PERFORMANCE OF THE SOLVER. THIS IS C ONLY A SAMPLE DRIVER, MANY OTHER DRIVERS ARE POSSIBLE. THE C INTERFACE SUBROUTINE FCN IS NECESSARY TO TAKE INTO ACCOUNT THE C FORMS OF CALLING SEQUENCES USED BY THE FUNCTION AND JACOBIAN C SUBROUTINES IN THE VARIOUS NONLINEAR LEAST-SQUARES SOLVERS. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... SPMPAR,ENORM,INITPT,LMSTR1,SSQFCN C C FORTRAN-SUPPLIED ... SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IC,INFO,K,LDFJAC,LWA,M,N,NFEV,NJEV,NPROB,NREAD,NTRIES, * NWRITE INTEGER IWA(40),MA(60),NA(60),NF(60),NJ(60),NP(60),NX(60) REAL FACTOR,FNORM1,FNORM2,ONE,TEN,TOL REAL FJAC(40,40),FNM(60),FVEC(65),WA(265),X(40) REAL SPMPAR,ENORM EXTERNAL FCN COMMON /REFNUM/ NPROB,NFEV,NJEV C C LOGICAL INPUT UNIT IS ASSUMED TO BE NUMBER 5. C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NREAD,NWRITE /5,6/ C DATA ONE,TEN /1.0E0,1.0E1/ TOL = SQRT(SPMPAR(1)) LDFJAC = 40 LWA = 265 IC = 0 10 CONTINUE READ (NREAD,50) NPROB,N,M,NTRIES IF (NPROB .LE. 0) GO TO 30 FACTOR = ONE DO 20 K = 1, NTRIES IC = IC + 1 CALL INITPT(N,X,NPROB,FACTOR) CALL SSQFCN(M,N,X,FVEC,NPROB) FNORM1 = ENORM(M,FVEC) WRITE (NWRITE,60) NPROB,N,M NFEV = 0 NJEV = 0 CALL LMSTR1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,IWA,WA, * LWA) CALL SSQFCN(M,N,X,FVEC,NPROB) FNORM2 = ENORM(M,FVEC) NP(IC) = NPROB NA(IC) = N MA(IC) = M NF(IC) = NFEV NJ(IC) = NJEV NX(IC) = INFO FNM(IC) = FNORM2 WRITE (NWRITE,70) * FNORM1,FNORM2,NFEV,NJEV,INFO,(X(I), I = 1, N) FACTOR = TEN*FACTOR 20 CONTINUE GO TO 10 30 CONTINUE WRITE (NWRITE,80) IC WRITE (NWRITE,90) DO 40 I = 1, IC WRITE (NWRITE,100) NP(I),NA(I),MA(I),NF(I),NJ(I),NX(I),FNM(I) 40 CONTINUE STOP 50 FORMAT (4I5) 60 FORMAT ( //// 5X, 8H PROBLEM, I5, 5X, 11H DIMENSIONS, 2I5, 5X // * ) 70 FORMAT (5X, 33H INITIAL L2 NORM OF THE RESIDUALS, E15.7 // 5X, * 33H FINAL L2 NORM OF THE RESIDUALS , E15.7 // 5X, * 33H NUMBER OF FUNCTION EVALUATIONS , I10 // 5X, * 33H NUMBER OF JACOBIAN EVALUATIONS , I10 // 5X, * 15H EXIT PARAMETER, 18X, I10 // 5X, * 27H FINAL APPROXIMATE SOLUTION // (5X, 5E15.7)) 80 FORMAT (12H1SUMMARY OF , I3, 16H CALLS TO LMSTR1 /) 90 FORMAT (49H NPROB N M NFEV NJEV INFO FINAL L2 NORM /) 100 FORMAT (3I5, 3I6, 2X, E15.7) C C LAST CARD OF DRIVER. C END SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) INTEGER M,N,IFLAG REAL X(N),FVEC(M),FJROW(N) C ********** C C THE CALLING SEQUENCE OF FCN SHOULD BE IDENTICAL TO THE C CALLING SEQUENCE OF THE FUNCTION SUBROUTINE IN THE NONLINEAR C LEAST SQUARES SOLVER. IF IFLAG = 1, FCN SHOULD ONLY CALL THE C TESTING FUNCTION SUBROUTINE SSQFCN. IF IFLAG = I, I .GE. 2, C FCN SHOULD ONLY CALL SUBROUTINE SSQJAC TO CALCULATE THE C (I-1)-ST ROW OF THE JACOBIAN. (THE SSQJAC SUBROUTINE PROVIDED C HERE FOR TESTING PURPOSES CALCULATES THE ENTIRE JACOBIAN C MATRIX AND IS THEREFORE CALLED ONLY WHEN IFLAG = 2.) EACH C CALL TO SSQFCN OR SSQJAC SHOULD SPECIFY THE APPROPRIATE C VALUE OF PROBLEM NUMBER (NPROB). C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... SSQFCN,SSQJAC C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER NPROB,NFEV,NJEV,J REAL TEMP(65,40) COMMON /REFNUM/ NPROB,NFEV,NJEV IF (IFLAG .EQ. 1) CALL SSQFCN(M,N,X,FVEC,NPROB) IF (IFLAG .EQ. 2) CALL SSQJAC(M,N,X,TEMP,65,NPROB) IF (IFLAG .EQ. 1) NFEV = NFEV + 1 IF (IFLAG .EQ. 2) NJEV = NJEV + 1 IF (IFLAG .EQ. 1) GO TO 120 DO 110 J = 1, N FJROW(J) = TEMP(IFLAG-1,J) 110 CONTINUE 120 CONTINUE RETURN C C LAST CARD OF INTERFACE SUBROUTINE FCN. C END SUBROUTINE SSQJAC(M,N,X,FJAC,LDFJAC,NPROB) INTEGER M,N,LDFJAC,NPROB REAL X(N),FJAC(LDFJAC,N) C ********** C C SUBROUTINE SSQJAC C C THIS SUBROUTINE DEFINES THE JACOBIAN MATRICES OF EIGHTEEN C NONLINEAR LEAST SQUARES PROBLEMS. THE PROBLEM DIMENSIONS ARE C AS DESCRIBED IN THE PROLOGUE COMMENTS OF SSQFCN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE SSQJAC(M,N,X,FJAC,LDFJAC,NPROB) C C WHERE C C M AND N ARE POSITIVE INTEGER INPUT VARIABLES. N MUST NOT C EXCEED M. C C X IS AN INPUT ARRAY OF LENGTH N. C C FJAC IS AN M BY N OUTPUT ARRAY WHICH CONTAINS THE JACOBIAN C MATRIX OF THE NPROB FUNCTION EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C NPROB IS A POSITIVE INTEGER VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... ATAN,COS,EXP,SIN,SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IVAR,J,K,MM1,NM1 REAL C14,C20,C29,C45,C100,DIV,DX,EIGHT,FIVE,FOUR,ONE,PROD,S2, * TEMP,TEN,THREE,TI,TMP1,TMP2,TMP3,TMP4,TPI,TWO,ZERO REAL V(11) REAL FLOAT DATA ZERO,ONE,TWO,THREE,FOUR,FIVE,EIGHT,TEN,C14,C20,C29,C45,C100 * /0.0E0,1.0E0,2.0E0,3.0E0,4.0E0,5.0E0,8.0E0,1.0E1,1.4E1, * 2.0E1,2.9E1,4.5E1,1.0E2/ DATA V(1),V(2),V(3),V(4),V(5),V(6),V(7),V(8),V(9),V(10),V(11) * /4.0E0,2.0E0,1.0E0,5.0E-1,2.5E-1,1.67E-1,1.25E-1,1.0E-1, * 8.33E-2,7.14E-2,6.25E-2/ FLOAT(IVAR) = IVAR C C JACOBIAN ROUTINE SELECTOR. C GO TO (10,40,70,130,140,150,180,190,210,230,250,310,330,350,370, * 400,460,480), NPROB C C LINEAR FUNCTION - FULL RANK. C 10 CONTINUE TEMP = TWO/FLOAT(M) DO 30 J = 1, N DO 20 I = 1, M FJAC(I,J) = -TEMP 20 CONTINUE FJAC(J,J) = FJAC(J,J) + ONE 30 CONTINUE GO TO 500 C C LINEAR FUNCTION - RANK 1. C 40 CONTINUE DO 60 J = 1, N DO 50 I = 1, M FJAC(I,J) = FLOAT(I)*FLOAT(J) 50 CONTINUE 60 CONTINUE GO TO 500 C C LINEAR FUNCTION - RANK 1 WITH ZERO COLUMNS AND ROWS. C 70 CONTINUE DO 90 J = 1, N DO 80 I = 1, M FJAC(I,J) = ZERO 80 CONTINUE 90 CONTINUE NM1 = N - 1 MM1 = M - 1 IF (NM1 .LT. 2) GO TO 120 DO 110 J = 2, NM1 DO 100 I = 2, MM1 FJAC(I,J) = FLOAT(I-1)*FLOAT(J) 100 CONTINUE 110 CONTINUE 120 CONTINUE GO TO 500 C C ROSENBROCK FUNCTION. C 130 CONTINUE FJAC(1,1) = -C20*X(1) FJAC(1,2) = TEN FJAC(2,1) = -ONE FJAC(2,2) = ZERO GO TO 500 C C HELICAL VALLEY FUNCTION. C 140 CONTINUE TPI = EIGHT*ATAN(ONE) TEMP = X(1)**2 + X(2)**2 TMP1 = TPI*TEMP TMP2 = SQRT(TEMP) FJAC(1,1) = C100*X(2)/TMP1 FJAC(1,2) = -C100*X(1)/TMP1 FJAC(1,3) = TEN FJAC(2,1) = TEN*X(1)/TMP2 FJAC(2,2) = TEN*X(2)/TMP2 FJAC(2,3) = ZERO FJAC(3,1) = ZERO FJAC(3,2) = ZERO FJAC(3,3) = ONE GO TO 500 C C POWELL SINGULAR FUNCTION. C 150 CONTINUE DO 170 J = 1, 4 DO 160 I = 1, 4 FJAC(I,J) = ZERO 160 CONTINUE 170 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = TEN FJAC(2,3) = SQRT(FIVE) FJAC(2,4) = -FJAC(2,3) FJAC(3,2) = TWO*(X(2) - TWO*X(3)) FJAC(3,3) = -TWO*FJAC(3,2) FJAC(4,1) = TWO*SQRT(TEN)*(X(1) - X(4)) FJAC(4,4) = -FJAC(4,1) GO TO 500 C C FREUDENSTEIN AND ROTH FUNCTION. C 180 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = X(2)*(TEN - THREE*X(2)) - TWO FJAC(2,1) = ONE FJAC(2,2) = X(2)*(TWO + THREE*X(2)) - C14 GO TO 500 C C BARD FUNCTION. C 190 CONTINUE DO 200 I = 1, 15 TMP1 = FLOAT(I) TMP2 = FLOAT(16-I) TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJAC(I,1) = -ONE FJAC(I,2) = TMP1*TMP2/TMP4 FJAC(I,3) = TMP1*TMP3/TMP4 200 CONTINUE GO TO 500 C C KOWALIK AND OSBORNE FUNCTION. C 210 CONTINUE DO 220 I = 1, 11 TMP1 = V(I)*(V(I) + X(2)) TMP2 = V(I)*(V(I) + X(3)) + X(4) FJAC(I,1) = -TMP1/TMP2 FJAC(I,2) = -V(I)*X(1)/TMP2 FJAC(I,3) = FJAC(I,1)*FJAC(I,2) FJAC(I,4) = FJAC(I,3)/V(I) 220 CONTINUE GO TO 500 C C MEYER FUNCTION. C 230 CONTINUE DO 240 I = 1, 16 TEMP = FIVE*FLOAT(I) + C45 + X(3) TMP1 = X(2)/TEMP TMP2 = EXP(TMP1) FJAC(I,1) = TMP2 FJAC(I,2) = X(1)*TMP2/TEMP FJAC(I,3) = -TMP1*FJAC(I,2) 240 CONTINUE GO TO 500 C C WATSON FUNCTION. C 250 CONTINUE DO 280 I = 1, 29 DIV = FLOAT(I)/C29 S2 = ZERO DX = ONE DO 260 J = 1, N S2 = S2 + DX*X(J) DX = DIV*DX 260 CONTINUE TEMP = TWO*DIV*S2 DX = ONE/DIV DO 270 J = 1, N FJAC(I,J) = DX*(FLOAT(J-1) - TEMP) DX = DIV*DX 270 CONTINUE 280 CONTINUE DO 300 J = 1, N DO 290 I = 30, 31 FJAC(I,J) = ZERO 290 CONTINUE 300 CONTINUE FJAC(30,1) = ONE FJAC(31,1) = -TWO*X(1) FJAC(31,2) = ONE GO TO 500 C C BOX 3-DIMENSIONAL FUNCTION. C 310 CONTINUE DO 320 I = 1, M TEMP = FLOAT(I) TMP1 = TEMP/TEN FJAC(I,1) = -TMP1*EXP(-TMP1*X(1)) FJAC(I,2) = TMP1*EXP(-TMP1*X(2)) FJAC(I,3) = EXP(-TEMP) - EXP(-TMP1) 320 CONTINUE GO TO 500 C C JENNRICH AND SAMPSON FUNCTION. C 330 CONTINUE DO 340 I = 1, M TEMP = FLOAT(I) FJAC(I,1) = -TEMP*EXP(TEMP*X(1)) FJAC(I,2) = -TEMP*EXP(TEMP*X(2)) 340 CONTINUE GO TO 500 C C BROWN AND DENNIS FUNCTION. C 350 CONTINUE DO 360 I = 1, M TEMP = FLOAT(I)/FIVE TI = SIN(TEMP) TMP1 = X(1) + TEMP*X(2) - EXP(TEMP) TMP2 = X(3) + TI*X(4) - COS(TEMP) FJAC(I,1) = TWO*TMP1 FJAC(I,2) = TEMP*FJAC(I,1) FJAC(I,3) = TWO*TMP2 FJAC(I,4) = TI*FJAC(I,3) 360 CONTINUE GO TO 500 C C CHEBYQUAD FUNCTION. C 370 CONTINUE DX = ONE/FLOAT(N) DO 390 J = 1, N TMP1 = ONE TMP2 = TWO*X(J) - ONE TEMP = TWO*TMP2 TMP3 = ZERO TMP4 = TWO DO 380 I = 1, M FJAC(I,J) = DX*TMP4 TI = FOUR*TMP2 + TEMP*TMP4 - TMP3 TMP3 = TMP4 TMP4 = TI TI = TEMP*TMP2 - TMP1 TMP1 = TMP2 TMP2 = TI 380 CONTINUE 390 CONTINUE GO TO 500 C C BROWN ALMOST-LINEAR FUNCTION. C 400 CONTINUE PROD = ONE DO 420 J = 1, N PROD = X(J)*PROD DO 410 I = 1, N FJAC(I,J) = ONE 410 CONTINUE FJAC(J,J) = TWO 420 CONTINUE DO 450 J = 1, N TEMP = X(J) IF (TEMP .NE. ZERO) GO TO 440 TEMP = ONE PROD = ONE DO 430 K = 1, N IF (K .NE. J) PROD = X(K)*PROD 430 CONTINUE 440 CONTINUE FJAC(N,J) = PROD/TEMP 450 CONTINUE GO TO 500 C C OSBORNE 1 FUNCTION. C 460 CONTINUE DO 470 I = 1, 33 TEMP = TEN*FLOAT(I-1) TMP1 = EXP(-X(4)*TEMP) TMP2 = EXP(-X(5)*TEMP) FJAC(I,1) = -ONE FJAC(I,2) = -TMP1 FJAC(I,3) = -TMP2 FJAC(I,4) = TEMP*X(2)*TMP1 FJAC(I,5) = TEMP*X(3)*TMP2 470 CONTINUE GO TO 500 C C OSBORNE 2 FUNCTION. C 480 CONTINUE DO 490 I = 1, 65 TEMP = FLOAT(I-1)/TEN TMP1 = EXP(-X(5)*TEMP) TMP2 = EXP(-X(6)*(TEMP-X(9))**2) TMP3 = EXP(-X(7)*(TEMP-X(10))**2) TMP4 = EXP(-X(8)*(TEMP-X(11))**2) FJAC(I,1) = -TMP1 FJAC(I,2) = -TMP2 FJAC(I,3) = -TMP3 FJAC(I,4) = -TMP4 FJAC(I,5) = TEMP*X(1)*TMP1 FJAC(I,6) = X(2)*(TEMP - X(9))**2*TMP2 FJAC(I,7) = X(3)*(TEMP - X(10))**2*TMP3 FJAC(I,8) = X(4)*(TEMP - X(11))**2*TMP4 FJAC(I,9) = -TWO*X(2)*X(6)*(TEMP - X(9))*TMP2 FJAC(I,10) = -TWO*X(3)*X(7)*(TEMP - X(10))*TMP3 FJAC(I,11) = -TWO*X(4)*X(8)*(TEMP - X(11))*TMP4 490 CONTINUE 500 CONTINUE RETURN C C LAST CARD OF SUBROUTINE SSQJAC. C END SUBROUTINE INITPT(N,X,NPROB,FACTOR) INTEGER N,NPROB REAL FACTOR REAL X(N) C ********** C C SUBROUTINE INITPT C C THIS SUBROUTINE SPECIFIES THE STANDARD STARTING POINTS FOR THE C FUNCTIONS DEFINED BY SUBROUTINE SSQFCN. THE SUBROUTINE RETURNS C IN X A MULTIPLE (FACTOR) OF THE STANDARD STARTING POINT. FOR C THE 11TH FUNCTION THE STANDARD STARTING POINT IS ZERO, SO IN C THIS CASE, IF FACTOR IS NOT UNITY, THEN THE SUBROUTINE RETURNS C THE VECTOR X(J) = FACTOR, J=1,...,N. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE INITPT(N,X,NPROB,FACTOR) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE STANDARD C STARTING POINT FOR PROBLEM NPROB MULTIPLIED BY FACTOR. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C FACTOR IS AN INPUT VARIABLE WHICH SPECIFIES THE MULTIPLE OF C THE STANDARD STARTING POINT. IF FACTOR IS UNITY, NO C MULTIPLICATION IS PERFORMED. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IVAR,J REAL C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17, * FIVE,H,HALF,ONE,SEVEN,TEN,THREE,TWENTY,TWNTF,TWO,ZERO REAL FLOAT DATA ZERO,HALF,ONE,TWO,THREE,FIVE,SEVEN,TEN,TWENTY,TWNTF * /0.0E0,5.0E-1,1.0E0,2.0E0,3.0E0,5.0E0,7.0E0,1.0E1,2.0E1, * 2.5E1/ DATA C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 * /1.2E0,2.5E-1,3.9E-1,4.15E-1,2.0E-2,4.0E3,2.5E2,3.0E-1, * 4.0E-1,1.5E0,1.0E-2,1.3E0,6.5E-1,7.0E-1,6.0E-1,4.5E0, * 5.5E0/ FLOAT(IVAR) = IVAR C C SELECTION OF INITIAL POINT. C GO TO (10,10,10,30,40,50,60,70,80,90,100,120,130,140,150,170, * 190,200), NPROB C C LINEAR FUNCTION - FULL RANK OR RANK 1. C 10 CONTINUE DO 20 J = 1, N X(J) = ONE 20 CONTINUE GO TO 210 C C ROSENBROCK FUNCTION. C 30 CONTINUE X(1) = -C1 X(2) = ONE GO TO 210 C C HELICAL VALLEY FUNCTION. C 40 CONTINUE X(1) = -ONE X(2) = ZERO X(3) = ZERO GO TO 210 C C POWELL SINGULAR FUNCTION. C 50 CONTINUE X(1) = THREE X(2) = -ONE X(3) = ZERO X(4) = ONE GO TO 210 C C FREUDENSTEIN AND ROTH FUNCTION. C 60 CONTINUE X(1) = HALF X(2) = -TWO GO TO 210 C C BARD FUNCTION. C 70 CONTINUE X(1) = ONE X(2) = ONE X(3) = ONE GO TO 210 C C KOWALIK AND OSBORNE FUNCTION. C 80 CONTINUE X(1) = C2 X(2) = C3 X(3) = C4 X(4) = C3 GO TO 210 C C MEYER FUNCTION. C 90 CONTINUE X(1) = C5 X(2) = C6 X(3) = C7 GO TO 210 C C WATSON FUNCTION. C 100 CONTINUE DO 110 J = 1, N X(J) = ZERO 110 CONTINUE GO TO 210 C C BOX 3-DIMENSIONAL FUNCTION. C 120 CONTINUE X(1) = ZERO X(2) = TEN X(3) = TWENTY GO TO 210 C C JENNRICH AND SAMPSON FUNCTION. C 130 CONTINUE X(1) = C8 X(2) = C9 GO TO 210 C C BROWN AND DENNIS FUNCTION. C 140 CONTINUE X(1) = TWNTF X(2) = FIVE X(3) = -FIVE X(4) = -ONE GO TO 210 C C CHEBYQUAD FUNCTION. C 150 CONTINUE H = ONE/FLOAT(N+1) DO 160 J = 1, N X(J) = FLOAT(J)*H 160 CONTINUE GO TO 210 C C BROWN ALMOST-LINEAR FUNCTION. C 170 CONTINUE DO 180 J = 1, N X(J) = HALF 180 CONTINUE GO TO 210 C C OSBORNE 1 FUNCTION. C 190 CONTINUE X(1) = HALF X(2) = C10 X(3) = -ONE X(4) = C11 X(5) = C5 GO TO 210 C C OSBORNE 2 FUNCTION. C 200 CONTINUE X(1) = C12 X(2) = C13 X(3) = C13 X(4) = C14 X(5) = C15 X(6) = THREE X(7) = FIVE X(8) = SEVEN X(9) = TWO X(10) = C16 X(11) = C17 210 CONTINUE C C COMPUTE MULTIPLE OF INITIAL POINT. C IF (FACTOR .EQ. ONE) GO TO 260 IF (NPROB .EQ. 11) GO TO 230 DO 220 J = 1, N X(J) = FACTOR*X(J) 220 CONTINUE GO TO 250 230 CONTINUE DO 240 J = 1, N X(J) = FACTOR 240 CONTINUE 250 CONTINUE 260 CONTINUE RETURN C C LAST CARD OF SUBROUTINE INITPT. C END SUBROUTINE SSQFCN(M,N,X,FVEC,NPROB) INTEGER M,N,NPROB REAL X(N),FVEC(M) C ********** C C SUBROUTINE SSQFCN C C THIS SUBROUTINE DEFINES THE FUNCTIONS OF EIGHTEEN NONLINEAR C LEAST SQUARES PROBLEMS. THE ALLOWABLE VALUES OF (M,N) FOR C FUNCTIONS 1,2 AND 3 ARE VARIABLE BUT WITH M .GE. N. C FOR FUNCTIONS 4,5,6,7,8,9 AND 10 THE VALUES OF (M,N) ARE C (2,2),(3,3),(4,4),(2,2),(15,3),(11,4) AND (16,3), RESPECTIVELY. C FUNCTION 11 (WATSON) HAS M = 31 WITH N USUALLY 6 OR 9. C HOWEVER, ANY N, N = 2,...,31, IS PERMITTED. C FUNCTIONS 12,13 AND 14 HAVE N = 3,2 AND 4, RESPECTIVELY, BUT C ALLOW ANY M .GE. N, WITH THE USUAL CHOICES BEING 10,10 AND 20. C FUNCTION 15 (CHEBYQUAD) ALLOWS M AND N VARIABLE WITH M .GE. N. C FUNCTION 16 (BROWN) ALLOWS N VARIABLE WITH M = N. C FOR FUNCTIONS 17 AND 18, THE VALUES OF (M,N) ARE C (33,5) AND (65,11), RESPECTIVELY. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE SSQFCN(M,N,X,FVEC,NPROB) C C WHERE C C M AND N ARE POSITIVE INTEGER INPUT VARIABLES. N MUST NOT C EXCEED M. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS THE NPROB C FUNCTION EVALUATED AT X. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... ATAN,COS,EXP,SIN,SQRT,SIGN C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IEV,IVAR,J,NM1 REAL C13,C14,C29,C45,DIV,DX,EIGHT,FIVE,ONE,PROD,SUM,S1,S2,TEMP, * TEN,TI,TMP1,TMP2,TMP3,TMP4,TPI,TWO,ZERO,ZP25,ZP5 REAL V(11),Y1(15),Y2(11),Y3(16),Y4(33),Y5(65) REAL FLOAT DATA ZERO,ZP25,ZP5,ONE,TWO,FIVE,EIGHT,TEN,C13,C14,C29,C45 * /0.0E0,2.5E-1,5.0E-1,1.0E0,2.0E0,5.0E0,8.0E0,1.0E1,1.3E1, * 1.4E1,2.9E1,4.5E1/ DATA V(1),V(2),V(3),V(4),V(5),V(6),V(7),V(8),V(9),V(10),V(11) * /4.0E0,2.0E0,1.0E0,5.0E-1,2.5E-1,1.67E-1,1.25E-1,1.0E-1, * 8.33E-2,7.14E-2,6.25E-2/ DATA Y1(1),Y1(2),Y1(3),Y1(4),Y1(5),Y1(6),Y1(7),Y1(8),Y1(9), * Y1(10),Y1(11),Y1(12),Y1(13),Y1(14),Y1(15) * /1.4E-1,1.8E-1,2.2E-1,2.5E-1,2.9E-1,3.2E-1,3.5E-1,3.9E-1, * 3.7E-1,5.8E-1,7.3E-1,9.6E-1,1.34E0,2.1E0,4.39E0/ DATA Y2(1),Y2(2),Y2(3),Y2(4),Y2(5),Y2(6),Y2(7),Y2(8),Y2(9), * Y2(10),Y2(11) * /1.957E-1,1.947E-1,1.735E-1,1.6E-1,8.44E-2,6.27E-2,4.56E-2, * 3.42E-2,3.23E-2,2.35E-2,2.46E-2/ DATA Y3(1),Y3(2),Y3(3),Y3(4),Y3(5),Y3(6),Y3(7),Y3(8),Y3(9), * Y3(10),Y3(11),Y3(12),Y3(13),Y3(14),Y3(15),Y3(16) * /3.478E4,2.861E4,2.365E4,1.963E4,1.637E4,1.372E4,1.154E4, * 9.744E3,8.261E3,7.03E3,6.005E3,5.147E3,4.427E3,3.82E3, * 3.307E3,2.872E3/ DATA Y4(1),Y4(2),Y4(3),Y4(4),Y4(5),Y4(6),Y4(7),Y4(8),Y4(9), * Y4(10),Y4(11),Y4(12),Y4(13),Y4(14),Y4(15),Y4(16),Y4(17), * Y4(18),Y4(19),Y4(20),Y4(21),Y4(22),Y4(23),Y4(24),Y4(25), * Y4(26),Y4(27),Y4(28),Y4(29),Y4(30),Y4(31),Y4(32),Y4(33) * /8.44E-1,9.08E-1,9.32E-1,9.36E-1,9.25E-1,9.08E-1,8.81E-1, * 8.5E-1,8.18E-1,7.84E-1,7.51E-1,7.18E-1,6.85E-1,6.58E-1, * 6.28E-1,6.03E-1,5.8E-1,5.58E-1,5.38E-1,5.22E-1,5.06E-1, * 4.9E-1,4.78E-1,4.67E-1,4.57E-1,4.48E-1,4.38E-1,4.31E-1, * 4.24E-1,4.2E-1,4.14E-1,4.11E-1,4.06E-1/ DATA Y5(1),Y5(2),Y5(3),Y5(4),Y5(5),Y5(6),Y5(7),Y5(8),Y5(9), * Y5(10),Y5(11),Y5(12),Y5(13),Y5(14),Y5(15),Y5(16),Y5(17), * Y5(18),Y5(19),Y5(20),Y5(21),Y5(22),Y5(23),Y5(24),Y5(25), * Y5(26),Y5(27),Y5(28),Y5(29),Y5(30),Y5(31),Y5(32),Y5(33), * Y5(34),Y5(35),Y5(36),Y5(37),Y5(38),Y5(39),Y5(40),Y5(41), * Y5(42),Y5(43),Y5(44),Y5(45),Y5(46),Y5(47),Y5(48),Y5(49), * Y5(50),Y5(51),Y5(52),Y5(53),Y5(54),Y5(55),Y5(56),Y5(57), * Y5(58),Y5(59),Y5(60),Y5(61),Y5(62),Y5(63),Y5(64),Y5(65) * /1.366E0,1.191E0,1.112E0,1.013E0,9.91E-1,8.85E-1,8.31E-1, * 8.47E-1,7.86E-1,7.25E-1,7.46E-1,6.79E-1,6.08E-1,6.55E-1, * 6.16E-1,6.06E-1,6.02E-1,6.26E-1,6.51E-1,7.24E-1,6.49E-1, * 6.49E-1,6.94E-1,6.44E-1,6.24E-1,6.61E-1,6.12E-1,5.58E-1, * 5.33E-1,4.95E-1,5.0E-1,4.23E-1,3.95E-1,3.75E-1,3.72E-1, * 3.91E-1,3.96E-1,4.05E-1,4.28E-1,4.29E-1,5.23E-1,5.62E-1, * 6.07E-1,6.53E-1,6.72E-1,7.08E-1,6.33E-1,6.68E-1,6.45E-1, * 6.32E-1,5.91E-1,5.59E-1,5.97E-1,6.25E-1,7.39E-1,7.1E-1, * 7.29E-1,7.2E-1,6.36E-1,5.81E-1,4.28E-1,2.92E-1,1.62E-1, * 9.8E-2,5.4E-2/ FLOAT(IVAR) = IVAR C C FUNCTION ROUTINE SELECTOR. C GO TO (10,40,70,110,120,130,140,150,170,190,210,250,270,290,310, * 360,390,410), NPROB C C LINEAR FUNCTION - FULL RANK. C 10 CONTINUE SUM = ZERO DO 20 J = 1, N SUM = SUM + X(J) 20 CONTINUE TEMP = TWO*SUM/FLOAT(M) + ONE DO 30 I = 1, M FVEC(I) = -TEMP IF (I .LE. N) FVEC(I) = FVEC(I) + X(I) 30 CONTINUE GO TO 430 C C LINEAR FUNCTION - RANK 1. C 40 CONTINUE SUM = ZERO DO 50 J = 1, N SUM = SUM + FLOAT(J)*X(J) 50 CONTINUE DO 60 I = 1, M FVEC(I) = FLOAT(I)*SUM - ONE 60 CONTINUE GO TO 430 C C LINEAR FUNCTION - RANK 1 WITH ZERO COLUMNS AND ROWS. C 70 CONTINUE SUM = ZERO NM1 = N - 1 IF (NM1 .LT. 2) GO TO 90 DO 80 J = 2, NM1 SUM = SUM + FLOAT(J)*X(J) 80 CONTINUE 90 CONTINUE DO 100 I = 1, M FVEC(I) = FLOAT(I-1)*SUM - ONE 100 CONTINUE FVEC(M) = -ONE GO TO 430 C C ROSENBROCK FUNCTION. C 110 CONTINUE FVEC(1) = TEN*(X(2) - X(1)**2) FVEC(2) = ONE - X(1) GO TO 430 C C HELICAL VALLEY FUNCTION. C 120 CONTINUE TPI = EIGHT*ATAN(ONE) TMP1 = SIGN(ZP25,X(2)) IF (X(1) .GT. ZERO) TMP1 = ATAN(X(2)/X(1))/TPI IF (X(1) .LT. ZERO) TMP1 = ATAN(X(2)/X(1))/TPI + ZP5 TMP2 = SQRT(X(1)**2+X(2)**2) FVEC(1) = TEN*(X(3) - TEN*TMP1) FVEC(2) = TEN*(TMP2 - ONE) FVEC(3) = X(3) GO TO 430 C C POWELL SINGULAR FUNCTION. C 130 CONTINUE FVEC(1) = X(1) + TEN*X(2) FVEC(2) = SQRT(FIVE)*(X(3) - X(4)) FVEC(3) = (X(2) - TWO*X(3))**2 FVEC(4) = SQRT(TEN)*(X(1) - X(4))**2 GO TO 430 C C FREUDENSTEIN AND ROTH FUNCTION. C 140 CONTINUE FVEC(1) = -C13 + X(1) + ((FIVE - X(2))*X(2) - TWO)*X(2) FVEC(2) = -C29 + X(1) + ((ONE + X(2))*X(2) - C14)*X(2) GO TO 430 C C BARD FUNCTION. C 150 CONTINUE DO 160 I = 1, 15 TMP1 = FLOAT(I) TMP2 = FLOAT(16-I) TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y1(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 160 CONTINUE GO TO 430 C C KOWALIK AND OSBORNE FUNCTION. C 170 CONTINUE DO 180 I = 1, 11 TMP1 = V(I)*(V(I) + X(2)) TMP2 = V(I)*(V(I) + X(3)) + X(4) FVEC(I) = Y2(I) - X(1)*TMP1/TMP2 180 CONTINUE GO TO 430 C C MEYER FUNCTION. C 190 CONTINUE DO 200 I = 1, 16 TEMP = FIVE*FLOAT(I) + C45 + X(3) TMP1 = X(2)/TEMP TMP2 = EXP(TMP1) FVEC(I) = X(1)*TMP2 - Y3(I) 200 CONTINUE GO TO 430 C C WATSON FUNCTION. C 210 CONTINUE DO 240 I = 1, 29 DIV = FLOAT(I)/C29 S1 = ZERO DX = ONE DO 220 J = 2, N S1 = S1 + FLOAT(J-1)*DX*X(J) DX = DIV*DX 220 CONTINUE S2 = ZERO DX = ONE DO 230 J = 1, N S2 = S2 + DX*X(J) DX = DIV*DX 230 CONTINUE FVEC(I) = S1 - S2**2 - ONE 240 CONTINUE FVEC(30) = X(1) FVEC(31) = X(2) - X(1)**2 - ONE GO TO 430 C C BOX 3-DIMENSIONAL FUNCTION. C 250 CONTINUE DO 260 I = 1, M TEMP = FLOAT(I) TMP1 = TEMP/TEN FVEC(I) = EXP(-TMP1*X(1)) - EXP(-TMP1*X(2)) * + (EXP(-TEMP) - EXP(-TMP1))*X(3) 260 CONTINUE GO TO 430 C C JENNRICH AND SAMPSON FUNCTION. C 270 CONTINUE DO 280 I = 1, M TEMP = FLOAT(I) FVEC(I) = TWO + TWO*TEMP - EXP(TEMP*X(1)) - EXP(TEMP*X(2)) 280 CONTINUE GO TO 430 C C BROWN AND DENNIS FUNCTION. C 290 CONTINUE DO 300 I = 1, M TEMP = FLOAT(I)/FIVE TMP1 = X(1) + TEMP*X(2) - EXP(TEMP) TMP2 = X(3) + SIN(TEMP)*X(4) - COS(TEMP) FVEC(I) = TMP1**2 + TMP2**2 300 CONTINUE GO TO 430 C C CHEBYQUAD FUNCTION. C 310 CONTINUE DO 320 I = 1, M FVEC(I) = ZERO 320 CONTINUE DO 340 J = 1, N TMP1 = ONE TMP2 = TWO*X(J) - ONE TEMP = TWO*TMP2 DO 330 I = 1, M FVEC(I) = FVEC(I) + TMP2 TI = TEMP*TMP2 - TMP1 TMP1 = TMP2 TMP2 = TI 330 CONTINUE 340 CONTINUE DX = ONE/FLOAT(N) IEV = -1 DO 350 I = 1, M FVEC(I) = DX*FVEC(I) IF (IEV .GT. 0) FVEC(I) = FVEC(I) + ONE/(FLOAT(I)**2 - ONE) IEV = -IEV 350 CONTINUE GO TO 430 C C BROWN ALMOST-LINEAR FUNCTION. C 360 CONTINUE SUM = -FLOAT(N+1) PROD = ONE DO 370 J = 1, N SUM = SUM + X(J) PROD = X(J)*PROD 370 CONTINUE DO 380 I = 1, N FVEC(I) = X(I) + SUM 380 CONTINUE FVEC(N) = PROD - ONE GO TO 430 C C OSBORNE 1 FUNCTION. C 390 CONTINUE DO 400 I = 1, 33 TEMP = TEN*FLOAT(I-1) TMP1 = EXP(-X(4)*TEMP) TMP2 = EXP(-X(5)*TEMP) FVEC(I) = Y4(I) - (X(1) + X(2)*TMP1 + X(3)*TMP2) 400 CONTINUE GO TO 430 C C OSBORNE 2 FUNCTION. C 410 CONTINUE DO 420 I = 1, 65 TEMP = FLOAT(I-1)/TEN TMP1 = EXP(-X(5)*TEMP) TMP2 = EXP(-X(6)*(TEMP-X(9))**2) TMP3 = EXP(-X(7)*(TEMP-X(10))**2) TMP4 = EXP(-X(8)*(TEMP-X(11))**2) FVEC(I) = Y5(I) * - (X(1)*TMP1 + X(2)*TMP2 + X(3)*TMP3 + X(4)*TMP4) 420 CONTINUE 430 CONTINUE RETURN C C LAST CARD OF SUBROUTINE SSQFCN. C END PyBDSF-1.10.1/src/minpack/ex/file12000066400000000000000000000445531420247104600164660ustar00rootroot00000000000000C ********** C C THIS PROGRAM TESTS CODES FOR THE LEAST-SQUARES SOLUTION OF C M NONLINEAR EQUATIONS IN N VARIABLES. IT CONSISTS OF A DRIVER C AND AN INTERFACE SUBROUTINE FCN. THE DRIVER READS IN DATA, C CALLS THE NONLINEAR LEAST-SQUARES SOLVER, AND FINALLY PRINTS C OUT INFORMATION ON THE PERFORMANCE OF THE SOLVER. THIS IS C ONLY A SAMPLE DRIVER, MANY OTHER DRIVERS ARE POSSIBLE. THE C INTERFACE SUBROUTINE FCN IS NECESSARY TO TAKE INTO ACCOUNT THE C FORMS OF CALLING SEQUENCES USED BY THE FUNCTION AND JACOBIAN C SUBROUTINES IN THE VARIOUS NONLINEAR LEAST-SQUARES SOLVERS. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... SPMPAR,ENORM,INITPT,LMDIF1,SSQFCN C C FORTRAN-SUPPLIED ... SQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IC,INFO,K,LWA,M,N,NFEV,NJEV,NPROB,NREAD,NTRIES,NWRITE INTEGER IWA(40),MA(60),NA(60),NF(60),NJ(60),NP(60),NX(60) REAL FACTOR,FNORM1,FNORM2,ONE,TEN,TOL REAL FNM(60),FVEC(65),WA(2865),X(40) REAL SPMPAR,ENORM EXTERNAL FCN COMMON /REFNUM/ NPROB,NFEV,NJEV C C LOGICAL INPUT UNIT IS ASSUMED TO BE NUMBER 5. C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NREAD,NWRITE /5,6/ C DATA ONE,TEN /1.0E0,1.0E1/ TOL = SQRT(SPMPAR(1)) LWA = 2865 IC = 0 10 CONTINUE READ (NREAD,50) NPROB,N,M,NTRIES IF (NPROB .LE. 0) GO TO 30 FACTOR = ONE DO 20 K = 1, NTRIES IC = IC + 1 CALL INITPT(N,X,NPROB,FACTOR) CALL SSQFCN(M,N,X,FVEC,NPROB) FNORM1 = ENORM(M,FVEC) WRITE (NWRITE,60) NPROB,N,M NFEV = 0 NJEV = 0 CALL LMDIF1(FCN,M,N,X,FVEC,TOL,INFO,IWA,WA,LWA) CALL SSQFCN(M,N,X,FVEC,NPROB) FNORM2 = ENORM(M,FVEC) NP(IC) = NPROB NA(IC) = N MA(IC) = M NF(IC) = NFEV NJEV = NJEV/N NJ(IC) = NJEV NX(IC) = INFO FNM(IC) = FNORM2 WRITE (NWRITE,70) * FNORM1,FNORM2,NFEV,NJEV,INFO,(X(I), I = 1, N) FACTOR = TEN*FACTOR 20 CONTINUE GO TO 10 30 CONTINUE WRITE (NWRITE,80) IC WRITE (NWRITE,90) DO 40 I = 1, IC WRITE (NWRITE,100) NP(I),NA(I),MA(I),NF(I),NJ(I),NX(I),FNM(I) 40 CONTINUE STOP 50 FORMAT (4I5) 60 FORMAT ( //// 5X, 8H PROBLEM, I5, 5X, 11H DIMENSIONS, 2I5, 5X // * ) 70 FORMAT (5X, 33H INITIAL L2 NORM OF THE RESIDUALS, E15.7 // 5X, * 33H FINAL L2 NORM OF THE RESIDUALS , E15.7 // 5X, * 33H NUMBER OF FUNCTION EVALUATIONS , I10 // 5X, * 33H NUMBER OF JACOBIAN EVALUATIONS , I10 // 5X, * 15H EXIT PARAMETER, 18X, I10 // 5X, * 27H FINAL APPROXIMATE SOLUTION // (5X, 5E15.7)) 80 FORMAT (12H1SUMMARY OF , I3, 16H CALLS TO LMDIF1 /) 90 FORMAT (49H NPROB N M NFEV NJEV INFO FINAL L2 NORM /) 100 FORMAT (3I5, 3I6, 2X, E15.7) C C LAST CARD OF DRIVER. C END SUBROUTINE FCN(M,N,X,FVEC,IFLAG) INTEGER M,N,IFLAG REAL X(N),FVEC(M) C ********** C C THE CALLING SEQUENCE OF FCN SHOULD BE IDENTICAL TO THE C CALLING SEQUENCE OF THE FUNCTION SUBROUTINE IN THE NONLINEAR C LEAST-SQUARES SOLVER. FCN SHOULD ONLY CALL THE TESTING C FUNCTION SUBROUTINE SSQFCN WITH THE APPROPRIATE VALUE OF C PROBLEM NUMBER (NPROB). C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... SSQFCN C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER NPROB,NFEV,NJEV COMMON /REFNUM/ NPROB,NFEV,NJEV CALL SSQFCN(M,N,X,FVEC,NPROB) IF (IFLAG .EQ. 1) NFEV = NFEV + 1 IF (IFLAG .EQ. 2) NJEV = NJEV + 1 RETURN C C LAST CARD OF INTERFACE SUBROUTINE FCN. C END SUBROUTINE SSQFCN(M,N,X,FVEC,NPROB) INTEGER M,N,NPROB REAL X(N),FVEC(M) C ********** C C SUBROUTINE SSQFCN C C THIS SUBROUTINE DEFINES THE FUNCTIONS OF EIGHTEEN NONLINEAR C LEAST SQUARES PROBLEMS. THE ALLOWABLE VALUES OF (M,N) FOR C FUNCTIONS 1,2 AND 3 ARE VARIABLE BUT WITH M .GE. N. C FOR FUNCTIONS 4,5,6,7,8,9 AND 10 THE VALUES OF (M,N) ARE C (2,2),(3,3),(4,4),(2,2),(15,3),(11,4) AND (16,3), RESPECTIVELY. C FUNCTION 11 (WATSON) HAS M = 31 WITH N USUALLY 6 OR 9. C HOWEVER, ANY N, N = 2,...,31, IS PERMITTED. C FUNCTIONS 12,13 AND 14 HAVE N = 3,2 AND 4, RESPECTIVELY, BUT C ALLOW ANY M .GE. N, WITH THE USUAL CHOICES BEING 10,10 AND 20. C FUNCTION 15 (CHEBYQUAD) ALLOWS M AND N VARIABLE WITH M .GE. N. C FUNCTION 16 (BROWN) ALLOWS N VARIABLE WITH M = N. C FOR FUNCTIONS 17 AND 18, THE VALUES OF (M,N) ARE C (33,5) AND (65,11), RESPECTIVELY. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE SSQFCN(M,N,X,FVEC,NPROB) C C WHERE C C M AND N ARE POSITIVE INTEGER INPUT VARIABLES. N MUST NOT C EXCEED M. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS THE NPROB C FUNCTION EVALUATED AT X. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... ATAN,COS,EXP,SIN,SQRT,SIGN C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IEV,IVAR,J,NM1 REAL C13,C14,C29,C45,DIV,DX,EIGHT,FIVE,ONE,PROD,SUM,S1,S2,TEMP, * TEN,TI,TMP1,TMP2,TMP3,TMP4,TPI,TWO,ZERO,ZP25,ZP5 REAL V(11),Y1(15),Y2(11),Y3(16),Y4(33),Y5(65) REAL FLOAT DATA ZERO,ZP25,ZP5,ONE,TWO,FIVE,EIGHT,TEN,C13,C14,C29,C45 * /0.0E0,2.5E-1,5.0E-1,1.0E0,2.0E0,5.0E0,8.0E0,1.0E1,1.3E1, * 1.4E1,2.9E1,4.5E1/ DATA V(1),V(2),V(3),V(4),V(5),V(6),V(7),V(8),V(9),V(10),V(11) * /4.0E0,2.0E0,1.0E0,5.0E-1,2.5E-1,1.67E-1,1.25E-1,1.0E-1, * 8.33E-2,7.14E-2,6.25E-2/ DATA Y1(1),Y1(2),Y1(3),Y1(4),Y1(5),Y1(6),Y1(7),Y1(8),Y1(9), * Y1(10),Y1(11),Y1(12),Y1(13),Y1(14),Y1(15) * /1.4E-1,1.8E-1,2.2E-1,2.5E-1,2.9E-1,3.2E-1,3.5E-1,3.9E-1, * 3.7E-1,5.8E-1,7.3E-1,9.6E-1,1.34E0,2.1E0,4.39E0/ DATA Y2(1),Y2(2),Y2(3),Y2(4),Y2(5),Y2(6),Y2(7),Y2(8),Y2(9), * Y2(10),Y2(11) * /1.957E-1,1.947E-1,1.735E-1,1.6E-1,8.44E-2,6.27E-2,4.56E-2, * 3.42E-2,3.23E-2,2.35E-2,2.46E-2/ DATA Y3(1),Y3(2),Y3(3),Y3(4),Y3(5),Y3(6),Y3(7),Y3(8),Y3(9), * Y3(10),Y3(11),Y3(12),Y3(13),Y3(14),Y3(15),Y3(16) * /3.478E4,2.861E4,2.365E4,1.963E4,1.637E4,1.372E4,1.154E4, * 9.744E3,8.261E3,7.03E3,6.005E3,5.147E3,4.427E3,3.82E3, * 3.307E3,2.872E3/ DATA Y4(1),Y4(2),Y4(3),Y4(4),Y4(5),Y4(6),Y4(7),Y4(8),Y4(9), * Y4(10),Y4(11),Y4(12),Y4(13),Y4(14),Y4(15),Y4(16),Y4(17), * Y4(18),Y4(19),Y4(20),Y4(21),Y4(22),Y4(23),Y4(24),Y4(25), * Y4(26),Y4(27),Y4(28),Y4(29),Y4(30),Y4(31),Y4(32),Y4(33) * /8.44E-1,9.08E-1,9.32E-1,9.36E-1,9.25E-1,9.08E-1,8.81E-1, * 8.5E-1,8.18E-1,7.84E-1,7.51E-1,7.18E-1,6.85E-1,6.58E-1, * 6.28E-1,6.03E-1,5.8E-1,5.58E-1,5.38E-1,5.22E-1,5.06E-1, * 4.9E-1,4.78E-1,4.67E-1,4.57E-1,4.48E-1,4.38E-1,4.31E-1, * 4.24E-1,4.2E-1,4.14E-1,4.11E-1,4.06E-1/ DATA Y5(1),Y5(2),Y5(3),Y5(4),Y5(5),Y5(6),Y5(7),Y5(8),Y5(9), * Y5(10),Y5(11),Y5(12),Y5(13),Y5(14),Y5(15),Y5(16),Y5(17), * Y5(18),Y5(19),Y5(20),Y5(21),Y5(22),Y5(23),Y5(24),Y5(25), * Y5(26),Y5(27),Y5(28),Y5(29),Y5(30),Y5(31),Y5(32),Y5(33), * Y5(34),Y5(35),Y5(36),Y5(37),Y5(38),Y5(39),Y5(40),Y5(41), * Y5(42),Y5(43),Y5(44),Y5(45),Y5(46),Y5(47),Y5(48),Y5(49), * Y5(50),Y5(51),Y5(52),Y5(53),Y5(54),Y5(55),Y5(56),Y5(57), * Y5(58),Y5(59),Y5(60),Y5(61),Y5(62),Y5(63),Y5(64),Y5(65) * /1.366E0,1.191E0,1.112E0,1.013E0,9.91E-1,8.85E-1,8.31E-1, * 8.47E-1,7.86E-1,7.25E-1,7.46E-1,6.79E-1,6.08E-1,6.55E-1, * 6.16E-1,6.06E-1,6.02E-1,6.26E-1,6.51E-1,7.24E-1,6.49E-1, * 6.49E-1,6.94E-1,6.44E-1,6.24E-1,6.61E-1,6.12E-1,5.58E-1, * 5.33E-1,4.95E-1,5.0E-1,4.23E-1,3.95E-1,3.75E-1,3.72E-1, * 3.91E-1,3.96E-1,4.05E-1,4.28E-1,4.29E-1,5.23E-1,5.62E-1, * 6.07E-1,6.53E-1,6.72E-1,7.08E-1,6.33E-1,6.68E-1,6.45E-1, * 6.32E-1,5.91E-1,5.59E-1,5.97E-1,6.25E-1,7.39E-1,7.1E-1, * 7.29E-1,7.2E-1,6.36E-1,5.81E-1,4.28E-1,2.92E-1,1.62E-1, * 9.8E-2,5.4E-2/ FLOAT(IVAR) = IVAR C C FUNCTION ROUTINE SELECTOR. C GO TO (10,40,70,110,120,130,140,150,170,190,210,250,270,290,310, * 360,390,410), NPROB C C LINEAR FUNCTION - FULL RANK. C 10 CONTINUE SUM = ZERO DO 20 J = 1, N SUM = SUM + X(J) 20 CONTINUE TEMP = TWO*SUM/FLOAT(M) + ONE DO 30 I = 1, M FVEC(I) = -TEMP IF (I .LE. N) FVEC(I) = FVEC(I) + X(I) 30 CONTINUE GO TO 430 C C LINEAR FUNCTION - RANK 1. C 40 CONTINUE SUM = ZERO DO 50 J = 1, N SUM = SUM + FLOAT(J)*X(J) 50 CONTINUE DO 60 I = 1, M FVEC(I) = FLOAT(I)*SUM - ONE 60 CONTINUE GO TO 430 C C LINEAR FUNCTION - RANK 1 WITH ZERO COLUMNS AND ROWS. C 70 CONTINUE SUM = ZERO NM1 = N - 1 IF (NM1 .LT. 2) GO TO 90 DO 80 J = 2, NM1 SUM = SUM + FLOAT(J)*X(J) 80 CONTINUE 90 CONTINUE DO 100 I = 1, M FVEC(I) = FLOAT(I-1)*SUM - ONE 100 CONTINUE FVEC(M) = -ONE GO TO 430 C C ROSENBROCK FUNCTION. C 110 CONTINUE FVEC(1) = TEN*(X(2) - X(1)**2) FVEC(2) = ONE - X(1) GO TO 430 C C HELICAL VALLEY FUNCTION. C 120 CONTINUE TPI = EIGHT*ATAN(ONE) TMP1 = SIGN(ZP25,X(2)) IF (X(1) .GT. ZERO) TMP1 = ATAN(X(2)/X(1))/TPI IF (X(1) .LT. ZERO) TMP1 = ATAN(X(2)/X(1))/TPI + ZP5 TMP2 = SQRT(X(1)**2+X(2)**2) FVEC(1) = TEN*(X(3) - TEN*TMP1) FVEC(2) = TEN*(TMP2 - ONE) FVEC(3) = X(3) GO TO 430 C C POWELL SINGULAR FUNCTION. C 130 CONTINUE FVEC(1) = X(1) + TEN*X(2) FVEC(2) = SQRT(FIVE)*(X(3) - X(4)) FVEC(3) = (X(2) - TWO*X(3))**2 FVEC(4) = SQRT(TEN)*(X(1) - X(4))**2 GO TO 430 C C FREUDENSTEIN AND ROTH FUNCTION. C 140 CONTINUE FVEC(1) = -C13 + X(1) + ((FIVE - X(2))*X(2) - TWO)*X(2) FVEC(2) = -C29 + X(1) + ((ONE + X(2))*X(2) - C14)*X(2) GO TO 430 C C BARD FUNCTION. C 150 CONTINUE DO 160 I = 1, 15 TMP1 = FLOAT(I) TMP2 = FLOAT(16-I) TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y1(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 160 CONTINUE GO TO 430 C C KOWALIK AND OSBORNE FUNCTION. C 170 CONTINUE DO 180 I = 1, 11 TMP1 = V(I)*(V(I) + X(2)) TMP2 = V(I)*(V(I) + X(3)) + X(4) FVEC(I) = Y2(I) - X(1)*TMP1/TMP2 180 CONTINUE GO TO 430 C C MEYER FUNCTION. C 190 CONTINUE DO 200 I = 1, 16 TEMP = FIVE*FLOAT(I) + C45 + X(3) TMP1 = X(2)/TEMP TMP2 = EXP(TMP1) FVEC(I) = X(1)*TMP2 - Y3(I) 200 CONTINUE GO TO 430 C C WATSON FUNCTION. C 210 CONTINUE DO 240 I = 1, 29 DIV = FLOAT(I)/C29 S1 = ZERO DX = ONE DO 220 J = 2, N S1 = S1 + FLOAT(J-1)*DX*X(J) DX = DIV*DX 220 CONTINUE S2 = ZERO DX = ONE DO 230 J = 1, N S2 = S2 + DX*X(J) DX = DIV*DX 230 CONTINUE FVEC(I) = S1 - S2**2 - ONE 240 CONTINUE FVEC(30) = X(1) FVEC(31) = X(2) - X(1)**2 - ONE GO TO 430 C C BOX 3-DIMENSIONAL FUNCTION. C 250 CONTINUE DO 260 I = 1, M TEMP = FLOAT(I) TMP1 = TEMP/TEN FVEC(I) = EXP(-TMP1*X(1)) - EXP(-TMP1*X(2)) * + (EXP(-TEMP) - EXP(-TMP1))*X(3) 260 CONTINUE GO TO 430 C C JENNRICH AND SAMPSON FUNCTION. C 270 CONTINUE DO 280 I = 1, M TEMP = FLOAT(I) FVEC(I) = TWO + TWO*TEMP - EXP(TEMP*X(1)) - EXP(TEMP*X(2)) 280 CONTINUE GO TO 430 C C BROWN AND DENNIS FUNCTION. C 290 CONTINUE DO 300 I = 1, M TEMP = FLOAT(I)/FIVE TMP1 = X(1) + TEMP*X(2) - EXP(TEMP) TMP2 = X(3) + SIN(TEMP)*X(4) - COS(TEMP) FVEC(I) = TMP1**2 + TMP2**2 300 CONTINUE GO TO 430 C C CHEBYQUAD FUNCTION. C 310 CONTINUE DO 320 I = 1, M FVEC(I) = ZERO 320 CONTINUE DO 340 J = 1, N TMP1 = ONE TMP2 = TWO*X(J) - ONE TEMP = TWO*TMP2 DO 330 I = 1, M FVEC(I) = FVEC(I) + TMP2 TI = TEMP*TMP2 - TMP1 TMP1 = TMP2 TMP2 = TI 330 CONTINUE 340 CONTINUE DX = ONE/FLOAT(N) IEV = -1 DO 350 I = 1, M FVEC(I) = DX*FVEC(I) IF (IEV .GT. 0) FVEC(I) = FVEC(I) + ONE/(FLOAT(I)**2 - ONE) IEV = -IEV 350 CONTINUE GO TO 430 C C BROWN ALMOST-LINEAR FUNCTION. C 360 CONTINUE SUM = -FLOAT(N+1) PROD = ONE DO 370 J = 1, N SUM = SUM + X(J) PROD = X(J)*PROD 370 CONTINUE DO 380 I = 1, N FVEC(I) = X(I) + SUM 380 CONTINUE FVEC(N) = PROD - ONE GO TO 430 C C OSBORNE 1 FUNCTION. C 390 CONTINUE DO 400 I = 1, 33 TEMP = TEN*FLOAT(I-1) TMP1 = EXP(-X(4)*TEMP) TMP2 = EXP(-X(5)*TEMP) FVEC(I) = Y4(I) - (X(1) + X(2)*TMP1 + X(3)*TMP2) 400 CONTINUE GO TO 430 C C OSBORNE 2 FUNCTION. C 410 CONTINUE DO 420 I = 1, 65 TEMP = FLOAT(I-1)/TEN TMP1 = EXP(-X(5)*TEMP) TMP2 = EXP(-X(6)*(TEMP-X(9))**2) TMP3 = EXP(-X(7)*(TEMP-X(10))**2) TMP4 = EXP(-X(8)*(TEMP-X(11))**2) FVEC(I) = Y5(I) * - (X(1)*TMP1 + X(2)*TMP2 + X(3)*TMP3 + X(4)*TMP4) 420 CONTINUE 430 CONTINUE RETURN C C LAST CARD OF SUBROUTINE SSQFCN. C END SUBROUTINE INITPT(N,X,NPROB,FACTOR) INTEGER N,NPROB REAL FACTOR REAL X(N) C ********** C C SUBROUTINE INITPT C C THIS SUBROUTINE SPECIFIES THE STANDARD STARTING POINTS FOR THE C FUNCTIONS DEFINED BY SUBROUTINE SSQFCN. THE SUBROUTINE RETURNS C IN X A MULTIPLE (FACTOR) OF THE STANDARD STARTING POINT. FOR C THE 11TH FUNCTION THE STANDARD STARTING POINT IS ZERO, SO IN C THIS CASE, IF FACTOR IS NOT UNITY, THEN THE SUBROUTINE RETURNS C THE VECTOR X(J) = FACTOR, J=1,...,N. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE INITPT(N,X,NPROB,FACTOR) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE STANDARD C STARTING POINT FOR PROBLEM NPROB MULTIPLIED BY FACTOR. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C FACTOR IS AN INPUT VARIABLE WHICH SPECIFIES THE MULTIPLE OF C THE STANDARD STARTING POINT. IF FACTOR IS UNITY, NO C MULTIPLICATION IS PERFORMED. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IVAR,J REAL C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17, * FIVE,H,HALF,ONE,SEVEN,TEN,THREE,TWENTY,TWNTF,TWO,ZERO REAL FLOAT DATA ZERO,HALF,ONE,TWO,THREE,FIVE,SEVEN,TEN,TWENTY,TWNTF * /0.0E0,5.0E-1,1.0E0,2.0E0,3.0E0,5.0E0,7.0E0,1.0E1,2.0E1, * 2.5E1/ DATA C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 * /1.2E0,2.5E-1,3.9E-1,4.15E-1,2.0E-2,4.0E3,2.5E2,3.0E-1, * 4.0E-1,1.5E0,1.0E-2,1.3E0,6.5E-1,7.0E-1,6.0E-1,4.5E0, * 5.5E0/ FLOAT(IVAR) = IVAR C C SELECTION OF INITIAL POINT. C GO TO (10,10,10,30,40,50,60,70,80,90,100,120,130,140,150,170, * 190,200), NPROB C C LINEAR FUNCTION - FULL RANK OR RANK 1. C 10 CONTINUE DO 20 J = 1, N X(J) = ONE 20 CONTINUE GO TO 210 C C ROSENBROCK FUNCTION. C 30 CONTINUE X(1) = -C1 X(2) = ONE GO TO 210 C C HELICAL VALLEY FUNCTION. C 40 CONTINUE X(1) = -ONE X(2) = ZERO X(3) = ZERO GO TO 210 C C POWELL SINGULAR FUNCTION. C 50 CONTINUE X(1) = THREE X(2) = -ONE X(3) = ZERO X(4) = ONE GO TO 210 C C FREUDENSTEIN AND ROTH FUNCTION. C 60 CONTINUE X(1) = HALF X(2) = -TWO GO TO 210 C C BARD FUNCTION. C 70 CONTINUE X(1) = ONE X(2) = ONE X(3) = ONE GO TO 210 C C KOWALIK AND OSBORNE FUNCTION. C 80 CONTINUE X(1) = C2 X(2) = C3 X(3) = C4 X(4) = C3 GO TO 210 C C MEYER FUNCTION. C 90 CONTINUE X(1) = C5 X(2) = C6 X(3) = C7 GO TO 210 C C WATSON FUNCTION. C 100 CONTINUE DO 110 J = 1, N X(J) = ZERO 110 CONTINUE GO TO 210 C C BOX 3-DIMENSIONAL FUNCTION. C 120 CONTINUE X(1) = ZERO X(2) = TEN X(3) = TWENTY GO TO 210 C C JENNRICH AND SAMPSON FUNCTION. C 130 CONTINUE X(1) = C8 X(2) = C9 GO TO 210 C C BROWN AND DENNIS FUNCTION. C 140 CONTINUE X(1) = TWNTF X(2) = FIVE X(3) = -FIVE X(4) = -ONE GO TO 210 C C CHEBYQUAD FUNCTION. C 150 CONTINUE H = ONE/FLOAT(N+1) DO 160 J = 1, N X(J) = FLOAT(J)*H 160 CONTINUE GO TO 210 C C BROWN ALMOST-LINEAR FUNCTION. C 170 CONTINUE DO 180 J = 1, N X(J) = HALF 180 CONTINUE GO TO 210 C C OSBORNE 1 FUNCTION. C 190 CONTINUE X(1) = HALF X(2) = C10 X(3) = -ONE X(4) = C11 X(5) = C5 GO TO 210 C C OSBORNE 2 FUNCTION. C 200 CONTINUE X(1) = C12 X(2) = C13 X(3) = C13 X(4) = C14 X(5) = C15 X(6) = THREE X(7) = FIVE X(8) = SEVEN X(9) = TWO X(10) = C16 X(11) = C17 210 CONTINUE C C COMPUTE MULTIPLE OF INITIAL POINT. C IF (FACTOR .EQ. ONE) GO TO 260 IF (NPROB .EQ. 11) GO TO 230 DO 220 J = 1, N X(J) = FACTOR*X(J) 220 CONTINUE GO TO 250 230 CONTINUE DO 240 J = 1, N X(J) = FACTOR 240 CONTINUE 250 CONTINUE 260 CONTINUE RETURN C C LAST CARD OF SUBROUTINE INITPT. C END PyBDSF-1.10.1/src/minpack/ex/file13000066400000000000000000000542151420247104600164630ustar00rootroot00000000000000C ********** C C THIS PROGRAM TESTS THE ABILITY OF CHKDER TO DETECT C INCONSISTENCIES BETWEEN FUNCTIONS AND THEIR FIRST DERIVATIVES. C FOURTEEN TEST FUNCTION VECTORS AND JACOBIANS ARE USED. ELEVEN OF C THE TESTS ARE FALSE(F), I.E. THERE ARE INCONSISTENCIES BETWEEN C THE FUNCTION VECTORS AND THE CORRESPONDING JACOBIANS. THREE OF C THE TESTS ARE TRUE(T), I.E. THERE ARE NO INCONSISTENCIES. THE C DRIVER READS IN DATA, CALLS CHKDER AND PRINTS OUT INFORMATION C REQUIRED BY AND RECEIVED FROM CHKDER. C C SUBPROGRAMS CALLED C C MINPACK SUPPLIED ... CHKDER,ERRJAC,INITPT,VECFCN C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,LDFJAC,LNP,MODE,N,NPROB,NREAD,NWRITE INTEGER NA(14),NP(14) LOGICAL A(14) REAL CP,ONE REAL DIFF(10),ERR(10),ERRMAX(14),ERRMIN(14),FJAC(10,10), * FVEC1(10),FVEC2(10),X1(10),X2(10) C C LOGICAL INPUT UNIT IS ASSUMED TO BE NUMBER 5. C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NREAD,NWRITE /5,6/ C DATA A(1),A(2),A(3),A(4),A(5),A(6),A(7),A(8),A(9),A(10),A(11), * A(12),A(13),A(14) * /.FALSE.,.FALSE.,.FALSE.,.TRUE.,.FALSE.,.FALSE.,.FALSE., * .TRUE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.TRUE.,.FALSE./ DATA CP,ONE /1.23E-1,1.0E0/ LDFJAC = 10 10 CONTINUE READ (NREAD,60) NPROB,N IF (NPROB .LE. 0) GO TO 40 CALL INITPT(N,X1,NPROB,ONE) DO 20 I = 1, N X1(I) = X1(I) + CP CP = -CP 20 CONTINUE WRITE (NWRITE,70) NPROB,N,A(NPROB) MODE = 1 CALL CHKDER(N,N,X1,FVEC1,FJAC,LDFJAC,X2,FVEC2,MODE,ERR) MODE = 2 CALL VECFCN(N,X1,FVEC1,NPROB) CALL ERRJAC(N,X1,FJAC,LDFJAC,NPROB) CALL VECFCN(N,X2,FVEC2,NPROB) CALL CHKDER(N,N,X1,FVEC1,FJAC,LDFJAC,X2,FVEC2,MODE,ERR) ERRMIN(NPROB) = ERR(1) ERRMAX(NPROB) = ERR(1) DO 30 I = 1, N DIFF(I) = FVEC2(I) - FVEC1(I) IF (ERRMIN(NPROB) .GT. ERR(I)) ERRMIN(NPROB) = ERR(I) IF (ERRMAX(NPROB) .LT. ERR(I)) ERRMAX(NPROB) = ERR(I) 30 CONTINUE NP(NPROB) = NPROB LNP = NPROB NA(NPROB) = N WRITE (NWRITE,80) (FVEC1(I), I = 1, N) WRITE (NWRITE,90) (DIFF(I), I = 1, N) WRITE (NWRITE,100) (ERR(I), I = 1, N) GO TO 10 40 CONTINUE WRITE (NWRITE,110) LNP WRITE (NWRITE,120) DO 50 I = 1, LNP WRITE (NWRITE,130) NP(I),NA(I),A(I),ERRMIN(I),ERRMAX(I) 50 CONTINUE STOP 60 FORMAT (2I5) 70 FORMAT ( /// 5X, 8H PROBLEM, I5, 5X, 15H WITH DIMENSION, I5, 2X, * 5H IS , L1) 80 FORMAT ( // 5X, 25H FIRST FUNCTION VECTOR // (5X, 5E15.7)) 90 FORMAT ( // 5X, 27H FUNCTION DIFFERENCE VECTOR // (5X, 5E15.7)) 100 FORMAT ( // 5X, 13H ERROR VECTOR // (5X, 5E15.7)) 110 FORMAT (12H1SUMMARY OF , I3, 16H TESTS OF CHKDER /) 120 FORMAT (46H NPROB N STATUS ERRMIN ERRMAX /) 130 FORMAT (I4, I6, 6X, L1, 3X, 2E15.7) C C LAST CARD OF DERIVATIVE CHECK TEST DRIVER. C END SUBROUTINE ERRJAC(N,X,FJAC,LDFJAC,NPROB) INTEGER N,LDFJAC,NPROB REAL X(N),FJAC(LDFJAC,N) C ********** C C SUBROUTINE ERRJAC C C THIS SUBROUTINE IS DERIVED FROM VECJAC WHICH DEFINES THE C JACOBIAN MATRICES OF FOURTEEN TEST FUNCTIONS. THE PROBLEM C DIMENSIONS ARE AS DESCRIBED IN THE PROLOGUE COMMENTS OF VECFCN. C VARIOUS ERRORS ARE DELIBERATELY INTRODUCED TO PROVIDE A TEST C FOR CHKDER. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE ERRJAC(N,X,FJAC,LDFJAC,NPROB) C C WHERE C C N IS A POSITIVE INTEGER VARIABLE. C C X IS AN ARRAY OF LENGTH N. C C FJAC IS AN N BY N ARRAY. ON OUTPUT FJAC CONTAINS THE C JACOBIAN MATRIX, WITH VARIOUS ERRORS DELIBERATELY C INTRODUCED, OF THE NPROB FUNCTION EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C NPROB IS A POSITIVE INTEGER VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... ATAN,COS,EXP,AMIN1,SIN,SQRT, C MAX0,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IVAR,J,K,K1,K2,ML,MU REAL C1,C3,C4,C5,C6,C9,EIGHT,FIFTN,FIVE,FOUR,H,HUNDRD,ONE,PROD, * SIX,SUM,SUM1,SUM2,TEMP,TEMP1,TEMP2,TEMP3,TEMP4,TEN,THREE, * TI,TJ,TK,TPI,TWENTY,TWO,ZERO REAL FLOAT DATA ZERO,ONE,TWO,THREE,FOUR,FIVE,SIX,EIGHT,TEN,FIFTN,TWENTY, * HUNDRD * /0.0E0,1.0E0,2.0E0,3.0E0,4.0E0,5.0E0,6.0E0,8.0E0,1.0E1, * 1.5E1,2.0E1,1.0E2/ DATA C1,C3,C4,C5,C6,C9 /1.0E4,2.0E2,2.02E1,1.98E1,1.8E2,2.9E1/ FLOAT(IVAR) = IVAR C C JACOBIAN ROUTINE SELECTOR. C GO TO (10,20,50,60,90,100,200,230,290,320,350,380,420,450), * NPROB C C ROSENBROCK FUNCTION WITH SIGN REVERSAL AFFECTING ELEMENT (1,1). C 10 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = ZERO FJAC(2,1) = -TWENTY*X(1) FJAC(2,2) = TEN GO TO 490 C C POWELL SINGULAR FUNCTION WITH SIGN REVERSAL AFFECTING ELEMENT C (3,3). C 20 CONTINUE DO 40 K = 1, 4 DO 30 J = 1, 4 FJAC(K,J) = ZERO 30 CONTINUE 40 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = TEN FJAC(2,3) = SQRT(FIVE) FJAC(2,4) = -FJAC(2,3) FJAC(3,2) = TWO*(X(2) - TWO*X(3)) FJAC(3,3) = TWO*FJAC(3,2) FJAC(4,1) = TWO*SQRT(TEN)*(X(1) - X(4)) FJAC(4,4) = -FJAC(4,1) GO TO 490 C C POWELL BADLY SCALED FUNCTION WITH THE SIGN OF THE JACOBIAN C REVERSED. C 50 CONTINUE FJAC(1,1) = -C1*X(2) FJAC(1,2) = -C1*X(1) FJAC(2,1) = EXP(-X(1)) FJAC(2,2) = EXP(-X(2)) GO TO 490 C C WOOD FUNCTION WITHOUT ERROR. C 60 CONTINUE DO 80 K = 1, 4 DO 70 J = 1, 4 FJAC(K,J) = ZERO 70 CONTINUE 80 CONTINUE TEMP1 = X(2) - THREE*X(1)**2 TEMP2 = X(4) - THREE*X(3)**2 FJAC(1,1) = -C3*TEMP1 + ONE FJAC(1,2) = -C3*X(1) FJAC(2,1) = -TWO*C3*X(1) FJAC(2,2) = C3 + C4 FJAC(2,4) = C5 FJAC(3,3) = -C6*TEMP2 + ONE FJAC(3,4) = -C6*X(3) FJAC(4,2) = C5 FJAC(4,3) = -TWO*C6*X(3) FJAC(4,4) = C6 + C4 GO TO 490 C C HELICAL VALLEY FUNCTION WITH MULTIPLICATIVE ERROR AFFECTING C ELEMENTS (2,1) AND (2,2). C 90 CONTINUE TPI = EIGHT*ATAN(ONE) TEMP = X(1)**2 + X(2)**2 TEMP1 = TPI*TEMP TEMP2 = SQRT(TEMP) FJAC(1,1) = HUNDRD*X(2)/TEMP1 FJAC(1,2) = -HUNDRD*X(1)/TEMP1 FJAC(1,3) = TEN FJAC(2,1) = FIVE*X(1)/TEMP2 FJAC(2,2) = FIVE*X(2)/TEMP2 FJAC(2,3) = ZERO FJAC(3,1) = ZERO FJAC(3,2) = ZERO FJAC(3,3) = ONE GO TO 490 C C WATSON FUNCTION WITH SIGN REVERSALS AFFECTING THE COMPUTATION OF C TEMP1. C 100 CONTINUE DO 120 K = 1, N DO 110 J = K, N FJAC(K,J) = ZERO 110 CONTINUE 120 CONTINUE DO 170 I = 1, 29 TI = FLOAT(I)/C9 SUM1 = ZERO TEMP = ONE DO 130 J = 2, N SUM1 = SUM1 + FLOAT(J-1)*TEMP*X(J) TEMP = TI*TEMP 130 CONTINUE SUM2 = ZERO TEMP = ONE DO 140 J = 1, N SUM2 = SUM2 + TEMP*X(J) TEMP = TI*TEMP 140 CONTINUE TEMP1 = TWO*(SUM1 + SUM2**2 + ONE) TEMP2 = TWO*SUM2 TEMP = TI**2 TK = ONE DO 160 K = 1, N TJ = TK DO 150 J = K, N FJAC(K,J) = FJAC(K,J) * + TJ * *((FLOAT(K-1)/TI - TEMP2) * *(FLOAT(J-1)/TI - TEMP2) - TEMP1) TJ = TI*TJ 150 CONTINUE TK = TEMP*TK 160 CONTINUE 170 CONTINUE FJAC(1,1) = FJAC(1,1) + SIX*X(1)**2 - TWO*X(2) + THREE FJAC(1,2) = FJAC(1,2) - TWO*X(1) FJAC(2,2) = FJAC(2,2) + ONE DO 190 K = 1, N DO 180 J = K, N FJAC(J,K) = FJAC(K,J) 180 CONTINUE 190 CONTINUE GO TO 490 C C CHEBYQUAD FUNCTION WITH JACOBIAN TWICE CORRECT SIZE. C 200 CONTINUE TK = ONE/FLOAT(N) DO 220 J = 1, N TEMP1 = ONE TEMP2 = TWO*X(J) - ONE TEMP = TWO*TEMP2 TEMP3 = ZERO TEMP4 = TWO DO 210 K = 1, N FJAC(K,J) = TWO*TK*TEMP4 TI = FOUR*TEMP2 + TEMP*TEMP4 - TEMP3 TEMP3 = TEMP4 TEMP4 = TI TI = TEMP*TEMP2 - TEMP1 TEMP1 = TEMP2 TEMP2 = TI 210 CONTINUE 220 CONTINUE GO TO 490 C C BROWN ALMOST-LINEAR FUNCTION WITHOUT ERROR. C 230 CONTINUE PROD = ONE DO 250 J = 1, N PROD = X(J)*PROD DO 240 K = 1, N FJAC(K,J) = ONE 240 CONTINUE FJAC(J,J) = TWO 250 CONTINUE DO 280 J = 1, N TEMP = X(J) IF (TEMP .NE. ZERO) GO TO 270 TEMP = ONE PROD = ONE DO 260 K = 1, N IF (K .NE. J) PROD = X(K)*PROD 260 CONTINUE 270 CONTINUE FJAC(N,J) = PROD/TEMP 280 CONTINUE GO TO 490 C C DISCRETE BOUNDARY VALUE FUNCTION WITH MULTIPLICATIVE ERROR C AFFECTING THE JACOBIAN DIAGONAL. C 290 CONTINUE H = ONE/FLOAT(N+1) DO 310 K = 1, N TEMP = THREE*(X(K) + FLOAT(K)*H + ONE)**2 DO 300 J = 1, N FJAC(K,J) = ZERO 300 CONTINUE FJAC(K,K) = FOUR + TEMP*H**2 IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -ONE 310 CONTINUE GO TO 490 C C DISCRETE INTEGRAL EQUATION FUNCTION WITH SIGN ERROR AFFECTING C THE JACOBIAN DIAGONAL. C 320 CONTINUE H = ONE/FLOAT(N+1) DO 340 K = 1, N TK = FLOAT(K)*H DO 330 J = 1, N TJ = FLOAT(J)*H TEMP = THREE*(X(J) + TJ + ONE)**2 FJAC(K,J) = H*AMIN1(TJ*(ONE-TK),TK*(ONE-TJ))*TEMP/TWO 330 CONTINUE FJAC(K,K) = FJAC(K,K) - ONE 340 CONTINUE GO TO 490 C C TRIGONOMETRIC FUNCTION WITH SIGN ERRORS AFFECTING THE C OFFDIAGONAL ELEMENTS OF THE JACOBIAN. C 350 CONTINUE DO 370 J = 1, N TEMP = SIN(X(J)) DO 360 K = 1, N FJAC(K,J) = -TEMP 360 CONTINUE FJAC(J,J) = FLOAT(J+1)*TEMP - COS(X(J)) 370 CONTINUE GO TO 490 C C VARIABLY DIMENSIONED FUNCTION WITH OPERATION ERROR AFFECTING C THE UPPER TRIANGULAR ELEMENTS OF THE JACOBIAN. C 380 CONTINUE SUM = ZERO DO 390 J = 1, N SUM = SUM + FLOAT(J)*(X(J) - ONE) 390 CONTINUE TEMP = ONE + SIX*SUM**2 DO 410 K = 1, N DO 400 J = K, N FJAC(K,J) = FLOAT(K*J)/TEMP FJAC(J,K) = FJAC(K,J) 400 CONTINUE FJAC(K,K) = FJAC(K,K) + ONE 410 CONTINUE GO TO 490 C C BROYDEN TRIDIAGONAL FUNCTION WITHOUT ERROR. C 420 CONTINUE DO 440 K = 1, N DO 430 J = 1, N FJAC(K,J) = ZERO 430 CONTINUE FJAC(K,K) = THREE - FOUR*X(K) IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -TWO 440 CONTINUE GO TO 490 C C BROYDEN BANDED FUNCTION WITH SIGN ERROR AFFECTING THE JACOBIAN C DIAGONAL. C 450 CONTINUE ML = 5 MU = 1 DO 480 K = 1, N DO 460 J = 1, N FJAC(K,J) = ZERO 460 CONTINUE K1 = MAX0(1,K-ML) K2 = MIN0(K+MU,N) DO 470 J = K1, K2 IF (J .NE. K) FJAC(K,J) = -(ONE + TWO*X(J)) 470 CONTINUE FJAC(K,K) = TWO - FIFTN*X(K)**2 480 CONTINUE 490 CONTINUE RETURN C C LAST CARD OF SUBROUTINE ERRJAC. C END SUBROUTINE INITPT(N,X,NPROB,FACTOR) INTEGER N,NPROB REAL FACTOR REAL X(N) C ********** C C SUBROUTINE INITPT C C THIS SUBROUTINE SPECIFIES THE STANDARD STARTING POINTS FOR C THE FUNCTIONS DEFINED BY SUBROUTINE VECFCN. THE SUBROUTINE C RETURNS IN X A MULTIPLE (FACTOR) OF THE STANDARD STARTING C POINT. FOR THE SIXTH FUNCTION THE STANDARD STARTING POINT IS C ZERO, SO IN THIS CASE, IF FACTOR IS NOT UNITY, THEN THE C SUBROUTINE RETURNS THE VECTOR X(J) = FACTOR, J=1,...,N. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE INITPT(N,X,NPROB,FACTOR) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE STANDARD C STARTING POINT FOR PROBLEM NPROB MULTIPLIED BY FACTOR. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C FACTOR IS AN INPUT VARIABLE WHICH SPECIFIES THE MULTIPLE OF C THE STANDARD STARTING POINT. IF FACTOR IS UNITY, NO C MULTIPLICATION IS PERFORMED. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IVAR,J REAL C1,H,HALF,ONE,THREE,TJ,ZERO REAL FLOAT DATA ZERO,HALF,ONE,THREE,C1 /0.0E0,5.0E-1,1.0E0,3.0E0,1.2E0/ FLOAT(IVAR) = IVAR C C SELECTION OF INITIAL POINT. C GO TO (10,20,30,40,50,60,80,100,120,120,140,160,180,180), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE X(1) = -C1 X(2) = ONE GO TO 200 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE X(1) = THREE X(2) = -ONE X(3) = ZERO X(4) = ONE GO TO 200 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE X(1) = ZERO X(2) = ONE GO TO 200 C C WOOD FUNCTION. C 40 CONTINUE X(1) = -THREE X(2) = -ONE X(3) = -THREE X(4) = -ONE GO TO 200 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE X(1) = -ONE X(2) = ZERO X(3) = ZERO GO TO 200 C C WATSON FUNCTION. C 60 CONTINUE DO 70 J = 1, N X(J) = ZERO 70 CONTINUE GO TO 200 C C CHEBYQUAD FUNCTION. C 80 CONTINUE H = ONE/FLOAT(N+1) DO 90 J = 1, N X(J) = FLOAT(J)*H 90 CONTINUE GO TO 200 C C BROWN ALMOST-LINEAR FUNCTION. C 100 CONTINUE DO 110 J = 1, N X(J) = HALF 110 CONTINUE GO TO 200 C C DISCRETE BOUNDARY VALUE AND INTEGRAL EQUATION FUNCTIONS. C 120 CONTINUE H = ONE/FLOAT(N+1) DO 130 J = 1, N TJ = FLOAT(J)*H X(J) = TJ*(TJ - ONE) 130 CONTINUE GO TO 200 C C TRIGONOMETRIC FUNCTION. C 140 CONTINUE H = ONE/FLOAT(N) DO 150 J = 1, N X(J) = H 150 CONTINUE GO TO 200 C C VARIABLY DIMENSIONED FUNCTION. C 160 CONTINUE H = ONE/FLOAT(N) DO 170 J = 1, N X(J) = ONE - FLOAT(J)*H 170 CONTINUE GO TO 200 C C BROYDEN TRIDIAGONAL AND BANDED FUNCTIONS. C 180 CONTINUE DO 190 J = 1, N X(J) = -ONE 190 CONTINUE 200 CONTINUE C C COMPUTE MULTIPLE OF INITIAL POINT. C IF (FACTOR .EQ. ONE) GO TO 250 IF (NPROB .EQ. 6) GO TO 220 DO 210 J = 1, N X(J) = FACTOR*X(J) 210 CONTINUE GO TO 240 220 CONTINUE DO 230 J = 1, N X(J) = FACTOR 230 CONTINUE 240 CONTINUE 250 CONTINUE RETURN C C LAST CARD OF SUBROUTINE INITPT. C END SUBROUTINE VECFCN(N,X,FVEC,NPROB) INTEGER N,NPROB REAL X(N),FVEC(N) C ********** C C SUBROUTINE VECFCN C C THIS SUBROUTINE DEFINES FOURTEEN TEST FUNCTIONS. THE FIRST C FIVE TEST FUNCTIONS ARE OF DIMENSIONS 2,4,2,4,3, RESPECTIVELY, C WHILE THE REMAINING TEST FUNCTIONS ARE OF VARIABLE DIMENSION C N FOR ANY N GREATER THAN OR EQUAL TO 1 (PROBLEM 6 IS AN C EXCEPTION TO THIS, SINCE IT DOES NOT ALLOW N = 1). C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE VECFCN(N,X,FVEC,NPROB) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE NPROB C FUNCTION VECTOR EVALUATED AT X. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... ATAN,COS,EXP,SIGN,SIN,SQRT, C MAX0,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IEV,IVAR,J,K,K1,K2,KP1,ML,MU REAL C1,C2,C3,C4,C5,C6,C7,C8,C9,EIGHT,FIVE,H,ONE,PROD,SUM,SUM1, * SUM2,TEMP,TEMP1,TEMP2,TEN,THREE,TI,TJ,TK,TPI,TWO,ZERO REAL FLOAT DATA ZERO,ONE,TWO,THREE,FIVE,EIGHT,TEN * /0.0E0,1.0E0,2.0E0,3.0E0,5.0E0,8.0E0,1.0E1/ DATA C1,C2,C3,C4,C5,C6,C7,C8,C9 * /1.0E4,1.0001E0,2.0E2,2.02E1,1.98E1,1.8E2,2.5E-1,5.0E-1, * 2.9E1/ FLOAT(IVAR) = IVAR C C PROBLEM SELECTOR. C GO TO (10,20,30,40,50,60,120,170,200,220,270,300,330,350), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE FVEC(1) = ONE - X(1) FVEC(2) = TEN*(X(2) - X(1)**2) GO TO 380 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE FVEC(1) = X(1) + TEN*X(2) FVEC(2) = SQRT(FIVE)*(X(3) - X(4)) FVEC(3) = (X(2) - TWO*X(3))**2 FVEC(4) = SQRT(TEN)*(X(1) - X(4))**2 GO TO 380 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE FVEC(1) = C1*X(1)*X(2) - ONE FVEC(2) = EXP(-X(1)) + EXP(-X(2)) - C2 GO TO 380 C C WOOD FUNCTION. C 40 CONTINUE TEMP1 = X(2) - X(1)**2 TEMP2 = X(4) - X(3)**2 FVEC(1) = -C3*X(1)*TEMP1 - (ONE - X(1)) FVEC(2) = C3*TEMP1 + C4*(X(2) - ONE) + C5*(X(4) - ONE) FVEC(3) = -C6*X(3)*TEMP2 - (ONE - X(3)) FVEC(4) = C6*TEMP2 + C4*(X(4) - ONE) + C5*(X(2) - ONE) GO TO 380 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE TPI = EIGHT*ATAN(ONE) TEMP1 = SIGN(C7,X(2)) IF (X(1) .GT. ZERO) TEMP1 = ATAN(X(2)/X(1))/TPI IF (X(1) .LT. ZERO) TEMP1 = ATAN(X(2)/X(1))/TPI + C8 TEMP2 = SQRT(X(1)**2+X(2)**2) FVEC(1) = TEN*(X(3) - TEN*TEMP1) FVEC(2) = TEN*(TEMP2 - ONE) FVEC(3) = X(3) GO TO 380 C C WATSON FUNCTION. C 60 CONTINUE DO 70 K = 1, N FVEC(K) = ZERO 70 CONTINUE DO 110 I = 1, 29 TI = FLOAT(I)/C9 SUM1 = ZERO TEMP = ONE DO 80 J = 2, N SUM1 = SUM1 + FLOAT(J-1)*TEMP*X(J) TEMP = TI*TEMP 80 CONTINUE SUM2 = ZERO TEMP = ONE DO 90 J = 1, N SUM2 = SUM2 + TEMP*X(J) TEMP = TI*TEMP 90 CONTINUE TEMP1 = SUM1 - SUM2**2 - ONE TEMP2 = TWO*TI*SUM2 TEMP = ONE/TI DO 100 K = 1, N FVEC(K) = FVEC(K) + TEMP*(FLOAT(K-1) - TEMP2)*TEMP1 TEMP = TI*TEMP 100 CONTINUE 110 CONTINUE TEMP = X(2) - X(1)**2 - ONE FVEC(1) = FVEC(1) + X(1)*(ONE - TWO*TEMP) FVEC(2) = FVEC(2) + TEMP GO TO 380 C C CHEBYQUAD FUNCTION. C 120 CONTINUE DO 130 K = 1, N FVEC(K) = ZERO 130 CONTINUE DO 150 J = 1, N TEMP1 = ONE TEMP2 = TWO*X(J) - ONE TEMP = TWO*TEMP2 DO 140 I = 1, N FVEC(I) = FVEC(I) + TEMP2 TI = TEMP*TEMP2 - TEMP1 TEMP1 = TEMP2 TEMP2 = TI 140 CONTINUE 150 CONTINUE TK = ONE/FLOAT(N) IEV = -1 DO 160 K = 1, N FVEC(K) = TK*FVEC(K) IF (IEV .GT. 0) FVEC(K) = FVEC(K) + ONE/(FLOAT(K)**2 - ONE) IEV = -IEV 160 CONTINUE GO TO 380 C C BROWN ALMOST-LINEAR FUNCTION. C 170 CONTINUE SUM = -FLOAT(N+1) PROD = ONE DO 180 J = 1, N SUM = SUM + X(J) PROD = X(J)*PROD 180 CONTINUE DO 190 K = 1, N FVEC(K) = X(K) + SUM 190 CONTINUE FVEC(N) = PROD - ONE GO TO 380 C C DISCRETE BOUNDARY VALUE FUNCTION. C 200 CONTINUE H = ONE/FLOAT(N+1) DO 210 K = 1, N TEMP = (X(K) + FLOAT(K)*H + ONE)**3 TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TWO*X(K) - TEMP1 - TEMP2 + TEMP*H**2/TWO 210 CONTINUE GO TO 380 C C DISCRETE INTEGRAL EQUATION FUNCTION. C 220 CONTINUE H = ONE/FLOAT(N+1) DO 260 K = 1, N TK = FLOAT(K)*H SUM1 = ZERO DO 230 J = 1, K TJ = FLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM1 = SUM1 + TJ*TEMP 230 CONTINUE SUM2 = ZERO KP1 = K + 1 IF (N .LT. KP1) GO TO 250 DO 240 J = KP1, N TJ = FLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM2 = SUM2 + (ONE - TJ)*TEMP 240 CONTINUE 250 CONTINUE FVEC(K) = X(K) + H*((ONE - TK)*SUM1 + TK*SUM2)/TWO 260 CONTINUE GO TO 380 C C TRIGONOMETRIC FUNCTION. C 270 CONTINUE SUM = ZERO DO 280 J = 1, N FVEC(J) = COS(X(J)) SUM = SUM + FVEC(J) 280 CONTINUE DO 290 K = 1, N FVEC(K) = FLOAT(N+K) - SIN(X(K)) - SUM - FLOAT(K)*FVEC(K) 290 CONTINUE GO TO 380 C C VARIABLY DIMENSIONED FUNCTION. C 300 CONTINUE SUM = ZERO DO 310 J = 1, N SUM = SUM + FLOAT(J)*(X(J) - ONE) 310 CONTINUE TEMP = SUM*(ONE + TWO*SUM**2) DO 320 K = 1, N FVEC(K) = X(K) - ONE + FLOAT(K)*TEMP 320 CONTINUE GO TO 380 C C BROYDEN TRIDIAGONAL FUNCTION. C 330 CONTINUE DO 340 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 340 CONTINUE GO TO 380 C C BROYDEN BANDED FUNCTION. C 350 CONTINUE ML = 5 MU = 1 DO 370 K = 1, N K1 = MAX0(1,K-ML) K2 = MIN0(K+MU,N) TEMP = ZERO DO 360 J = K1, K2 IF (J .NE. K) TEMP = TEMP + X(J)*(ONE + X(J)) 360 CONTINUE FVEC(K) = X(K)*(TWO + FIVE*X(K)**2) + ONE - TEMP 370 CONTINUE 380 CONTINUE RETURN C C LAST CARD OF SUBROUTINE VECFCN. C END PyBDSF-1.10.1/src/minpack/ex/file14000066400000000000000000000257301420247104600164640ustar00rootroot00000000000000C ********** C C THIS PROGRAM CHECKS THE CONSTANTS OF MACHINE PRECISION AND C SMALLEST AND LARGEST MACHINE REPRESENTABLE NUMBERS SPECIFIED IN C FUNCTION DPMPAR, AGAINST THE CORRESPONDING HARDWARE-DETERMINED C MACHINE CONSTANTS OBTAINED BY DMCHAR, A SUBROUTINE DUE TO C W. J. CODY. C C DATA STATEMENTS IN DPMPAR CORRESPONDING TO THE MACHINE USED MUST C BE ACTIVATED BY REMOVING C IN COLUMN 1. C C THE PRINTED OUTPUT CONSISTS OF THE MACHINE CONSTANTS OBTAINED BY C DMCHAR AND COMPARISONS OF THE DPMPAR CONSTANTS WITH THEIR C DMCHAR COUNTERPARTS. DESCRIPTIONS OF THE MACHINE CONSTANTS ARE C GIVEN IN THE PROLOGUE COMMENTS OF DMCHAR. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... DMCHAR,DPMPAR C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IBETA,IEXP,IRND,IT,MACHEP,MAXEXP,MINEXP,NEGEP,NGRD, * NWRITE DOUBLE PRECISION DWARF,EPS,EPSMCH,EPSNEG,GIANT,XMAX,XMIN DOUBLE PRECISION RERR(3) DOUBLE PRECISION DPMPAR C C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NWRITE /6/ C C DETERMINE THE MACHINE CONSTANTS DYNAMICALLY FROM DMCHAR. C CALL DMCHAR(IBETA,IT,IRND,NGRD,MACHEP,NEGEP,IEXP,MINEXP,MAXEXP, * EPS,EPSNEG,XMIN,XMAX) C C COMPARE THE DPMPAR CONSTANTS WITH THEIR DMCHAR COUNTERPARTS AND C STORE THE RELATIVE DIFFERENCES IN RERR. C EPSMCH = DPMPAR(1) DWARF = DPMPAR(2) GIANT = DPMPAR(3) RERR(1) = (EPSMCH - EPS)/EPSMCH RERR(2) = (DWARF - XMIN)/DWARF RERR(3) = (XMAX - GIANT)/GIANT C C WRITE THE DMCHAR CONSTANTS. C WRITE (NWRITE,10) * IBETA,IT,IRND,NGRD,MACHEP,NEGEP,IEXP,MINEXP,MAXEXP,EPS, * EPSNEG,XMIN,XMAX C C WRITE THE DPMPAR CONSTANTS AND THE RELATIVE DIFFERENCES. C WRITE (NWRITE,20) EPSMCH,RERR(1),DWARF,RERR(2),GIANT,RERR(3) STOP 10 FORMAT (17H1DMCHAR CONSTANTS /// 8H IBETA =, I6 // 8H IT =, * I6 // 8H IRND =, I6 // 8H NGRD =, I6 // 9H MACHEP =, * I6 // 8H NEGEP =, I6 // 7H IEXP =, I6 // 9H MINEXP =, * I6 // 9H MAXEXP =, I6 // 6H EPS =, D15.7 // 9H EPSNEG =, * D15.7 // 7H XMIN =, D15.7 // 7H XMAX =, D15.7) 20 FORMAT ( /// 42H DPMPAR CONSTANTS AND RELATIVE DIFFERENCES /// * 9H EPSMCH =, D15.7 / 10H RERR(1) =, D15.7 // * 8H DWARF =, D15.7 / 10H RERR(2) =, D15.7 // 8H GIANT =, * D15.7 / 10H RERR(3) =, D15.7) C C LAST CARD OF DRIVER. C END SUBROUTINE DMCHAR(IBETA,IT,IRND,NGRD,MACHEP,NEGEP,IEXP,MINEXP, 1 MAXEXP,EPS,EPSNEG,XMIN,XMAX) C INTEGER I,IBETA,IEXP,IRND,IT,IZ,J,K,MACHEP,MAXEXP,MINEXP, 1 MX,NEGEP,NGRD DOUBLE PRECISION A,B,BETA,BETAIN,BETAM1,EPS,EPSNEG,ONE,XMAX, 1 XMIN,Y,Z,ZERO C C THIS SUBROUTINE IS INTENDED TO DETERMINE THE CHARACTERISTICS C OF THE FLOATING-POINT ARITHMETIC SYSTEM THAT ARE SPECIFIED C BELOW. THE FIRST THREE ARE DETERMINED ACCORDING TO AN C ALGORITHM DUE TO M. MALCOLM, CACM 15 (1972), PP. 949-951, C INCORPORATING SOME, BUT NOT ALL, OF THE IMPROVEMENTS C SUGGESTED BY M. GENTLEMAN AND S. MAROVICH, CACM 17 (1974), C PP. 276-277. C C C IBETA - THE RADIX OF THE FLOATING-POINT REPRESENTATION C IT - THE NUMBER OF BASE IBETA DIGITS IN THE FLOATING-POINT C SIGNIFICAND C IRND - 0 IF FLOATING-POINT ADDITION CHOPS, C 1 IF FLOATING-POINT ADDITION ROUNDS C NGRD - THE NUMBER OF GUARD DIGITS FOR MULTIPLICATION. IT IS C 0 IF IRND=1, OR IF IRND=0 AND ONLY IT BASE IBET C DIGITS PARTICIPATE IN THE POST NORMALIZATION SHIFT C OF THE FLOATING-POINT SIGNIFICAND IN MULTIPLICATION C 1 IF IRND=0 AND MORE THAN IT BASE IBETA DIGITS C PARTICIPATE IN THE POST NORMALIZATION SHIFT OF THE C FLOATING-POINT SIGNIFICAND IN MULTIPLICATION C MACHEP - THE LARGEST NEGATIVE INTEGER SUCH THAT C 1.0+FLOAT(IBETA)**MACHEP .NE. 1.0, EXCEPT THAT C MACHEP IS BOUNDED BELOW BY -(IT+3) C NEGEPS - THE LARGEST NEGATIVE INTEGER SUCH THAT C 1.0-FLOAT(IBETA)**NEGEPS .NE. 1.0, EXCEPT THAT C NEGEPS IS BOUNDED BELOW BY -(IT+3) C IEXP - THE NUMBER OF BITS (DECIMAL PLACES IF IBETA = 10) C RESERVED FOR THE REPRESENTATION OF THE EXPONENT C (INCLUDING THE BIAS OR SIGN) OF A FLOATING-POINT C NUMBER C MINEXP - THE LARGEST IN MAGNITUDE NEGATIVE INTEGER SUCH THAT C FLOAT(IBETA)**MINEXP IS A POSITIVE FLOATING-POINT C NUMBER C MAXEXP - THE LARGEST POSITIVE INTEGER EXPONENT FOR A FINITE C FLOATING-POINT NUMBER C EPS - THE SMALLEST POSITIVE FLOATING-POINT NUMBER SUCH C THAT 1.0+EPS .NE. 1.0. IN PARTICULAR, IF EITHER C IBETA = 2 OR IRND = 0, EPS = FLOAT(IBETA)**MACHEP. C OTHERWISE, EPS = (FLOAT(IBETA)**MACHEP)/2 C EPSNEG - A SMALL POSITIVE FLOATING-POINT NUMBER SUCH THAT C 1.0-EPSNEG .NE. 1.0. IN PARTICULAR, IF IBETA = 2 C OR IRND = 0, EPSNEG = FLOAT(IBETA)**NEGEPS. C OTHERWISE, EPSNEG = (IBETA**NEGEPS)/2. BECAUSE C NEGEPS IS BOUNDED BELOW BY -(IT+3), EPSNEG MAY NOT C BE THE SMALLEST NUMBER WHICH CAN ALTER 1.0 BY C SUBTRACTION. C XMIN - THE SMALLEST NON-VANISHING FLOATING-POINT POWER OF TH C RADIX. IN PARTICULAR, XMIN = FLOAT(IBETA)**MINEXP C XMAX - THE LARGEST FINITE FLOATING-POINT NUMBER. IN C PARTICULAR XMAX = (1.0-EPSNEG)*FLOAT(IBETA)**MAXEXP C NOTE - ON SOME MACHINES XMAX WILL BE ONLY THE C SECOND, OR PERHAPS THIRD, LARGEST NUMBER, BEING C TOO SMALL BY 1 OR 2 UNITS IN THE LAST DIGIT OF C THE SIGNIFICAND. C C LATEST REVISION - OCTOBER 22, 1979 C C AUTHOR - W. J. CODY C ARGONNE NATIONAL LABORATORY C C----------------------------------------------------------------- ONE = DBLE(FLOAT(1)) ZERO = 0.0D0 C----------------------------------------------------------------- C DETERMINE IBETA,BETA ALA MALCOLM C----------------------------------------------------------------- A = ONE 10 A = A + A IF (((A+ONE)-A)-ONE .EQ. ZERO) GO TO 10 B = ONE 20 B = B + B IF ((A+B)-A .EQ. ZERO) GO TO 20 IBETA = INT(SNGL((A + B) - A)) BETA = DBLE(FLOAT(IBETA)) C----------------------------------------------------------------- C DETERMINE IT, IRND C----------------------------------------------------------------- IT = 0 B = ONE 100 IT = IT + 1 B = B * BETA IF (((B+ONE)-B)-ONE .EQ. ZERO) GO TO 100 IRND = 0 BETAM1 = BETA - ONE IF ((A+BETAM1)-A .NE. ZERO) IRND = 1 C----------------------------------------------------------------- C DETERMINE NEGEP, EPSNEG C----------------------------------------------------------------- NEGEP = IT + 3 BETAIN = ONE / BETA A = ONE C DO 200 I = 1, NEGEP A = A * BETAIN 200 CONTINUE C B = A 210 IF ((ONE-A)-ONE .NE. ZERO) GO TO 220 A = A * BETA NEGEP = NEGEP - 1 GO TO 210 220 NEGEP = -NEGEP EPSNEG = A IF ((IBETA .EQ. 2) .OR. (IRND .EQ. 0)) GO TO 300 A = (A*(ONE+A)) / (ONE+ONE) IF ((ONE-A)-ONE .NE. ZERO) EPSNEG = A C----------------------------------------------------------------- C DETERMINE MACHEP, EPS C----------------------------------------------------------------- 300 MACHEP = -IT - 3 A = B 310 IF((ONE+A)-ONE .NE. ZERO) GO TO 320 A = A * BETA MACHEP = MACHEP + 1 GO TO 310 320 EPS = A IF ((IBETA .EQ. 2) .OR. (IRND .EQ. 0)) GO TO 350 A = (A*(ONE+A)) / (ONE+ONE) IF ((ONE+A)-ONE .NE. ZERO) EPS = A C----------------------------------------------------------------- C DETERMINE NGRD C----------------------------------------------------------------- 350 NGRD = 0 IF ((IRND .EQ. 0) .AND. ((ONE+EPS)*ONE-ONE) .NE. ZERO) NGRD = 1 C----------------------------------------------------------------- C DETERMINE IEXP, MINEXP, XMIN C C LOOP TO DETERMINE LARGEST I AND K = 2**I SUCH THAT C (1/BETA) ** (2**(I)) C DOES NOT UNDERFLOW C EXIT FROM LOOP IS SIGNALED BY AN UNDERFLOW. C----------------------------------------------------------------- I = 0 K = 1 Z = BETAIN 400 Y = Z Z = Y * Y C----------------------------------------------------------------- C CHECK FOR UNDERFLOW HERE C----------------------------------------------------------------- A = Z * ONE IF ((A+A .EQ. ZERO) .OR. (DABS(Z) .GE. Y)) GO TO 410 I = I + 1 K = K + K GO TO 400 410 IF (IBETA .EQ. 10) GO TO 420 IEXP = I + 1 MX = K + K GO TO 450 C----------------------------------------------------------------- C FOR DECIMAL MACHINES ONLY C----------------------------------------------------------------- 420 IEXP = 2 IZ = IBETA 430 IF (K .LT. IZ) GO TO 440 IZ = IZ * IBETA IEXP = IEXP + 1 GO TO 430 440 MX = IZ + IZ - 1 C----------------------------------------------------------------- C LOOP TO DETERMINE MINEXP, XMIN C EXIT FROM LOOP IS SIGNALED BY AN UNDERFLOW. C----------------------------------------------------------------- 450 XMIN = Y Y = Y * BETAIN C----------------------------------------------------------------- C CHECK FOR UNDERFLOW HERE C----------------------------------------------------------------- A = Y * ONE IF (((A+A) .EQ. ZERO) .OR. (DABS(Y) .GE. XMIN)) GO TO 460 K = K + 1 GO TO 450 460 MINEXP = -K C----------------------------------------------------------------- C DETERMINE MAXEXP, XMAX C----------------------------------------------------------------- IF ((MX .GT. K+K-3) .OR. (IBETA .EQ. 10)) GO TO 500 MX = MX + MX IEXP = IEXP + 1 500 MAXEXP = MX + MINEXP C----------------------------------------------------------------- C ADJUST FOR MACHINES WITH IMPLICIT LEADING C BIT IN BINARY SIGNIFICAND AND MACHINES WITH C RADIX POINT AT EXTREME RIGHT OF SIGNIFICAND C----------------------------------------------------------------- I = MAXEXP + MINEXP IF ((IBETA .EQ. 2) .AND. (I .EQ. 0)) MAXEXP = MAXEXP - 1 IF (I .GT. 20) MAXEXP = MAXEXP - 1 IF (A .NE. Y) MAXEXP = MAXEXP - 2 XMAX = ONE - EPSNEG IF (XMAX*ONE .NE. XMAX) XMAX = ONE - BETA * EPSNEG XMAX = XMAX / (BETA * BETA * BETA * XMIN) I = MAXEXP + MINEXP + 3 IF (I .LE. 0) GO TO 520 C DO 510 J = 1, I IF (IBETA .EQ. 2) XMAX = XMAX + XMAX IF (IBETA .NE. 2) XMAX = XMAX * BETA 510 CONTINUE C 520 RETURN C ---------- LAST CARD OF DMCHAR ---------- END PyBDSF-1.10.1/src/minpack/ex/file15000066400000000000000000000341471420247104600164670ustar00rootroot00000000000000C ********** C C THIS PROGRAM TESTS CODES FOR THE SOLUTION OF N NONLINEAR C EQUATIONS IN N VARIABLES. IT CONSISTS OF A DRIVER AND AN C INTERFACE SUBROUTINE FCN. THE DRIVER READS IN DATA, CALLS THE C NONLINEAR EQUATION SOLVER, AND FINALLY PRINTS OUT INFORMATION C ON THE PERFORMANCE OF THE SOLVER. THIS IS ONLY A SAMPLE DRIVER, C MANY OTHER DRIVERS ARE POSSIBLE. THE INTERFACE SUBROUTINE FCN C IS NECESSARY TO TAKE INTO ACCOUNT THE FORMS OF CALLING C SEQUENCES USED BY THE FUNCTION SUBROUTINES IN THE VARIOUS C NONLINEAR EQUATION SOLVERS. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DPMPAR,ENORM,HYBRD1,INITPT,VECFCN C C FORTRAN-SUPPLIED ... DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IC,INFO,K,LWA,N,NFEV,NPROB,NREAD,NTRIES,NWRITE INTEGER NA(60),NF(60),NP(60),NX(60) DOUBLE PRECISION FACTOR,FNORM1,FNORM2,ONE,TEN,TOL DOUBLE PRECISION FNM(60),FVEC(40),WA(2660),X(40) DOUBLE PRECISION DPMPAR,ENORM EXTERNAL FCN COMMON /REFNUM/ NPROB,NFEV C C LOGICAL INPUT UNIT IS ASSUMED TO BE NUMBER 5. C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NREAD,NWRITE /5,6/ C DATA ONE,TEN /1.0D0,1.0D1/ TOL = DSQRT(DPMPAR(1)) LWA = 2660 IC = 0 10 CONTINUE READ (NREAD,50) NPROB,N,NTRIES IF (NPROB .LE. 0) GO TO 30 FACTOR = ONE DO 20 K = 1, NTRIES IC = IC + 1 CALL INITPT(N,X,NPROB,FACTOR) CALL VECFCN(N,X,FVEC,NPROB) FNORM1 = ENORM(N,FVEC) WRITE (NWRITE,60) NPROB,N NFEV = 0 CALL HYBRD1(FCN,N,X,FVEC,TOL,INFO,WA,LWA) FNORM2 = ENORM(N,FVEC) NP(IC) = NPROB NA(IC) = N NF(IC) = NFEV NX(IC) = INFO FNM(IC) = FNORM2 WRITE (NWRITE,70) FNORM1,FNORM2,NFEV,INFO,(X(I), I = 1, N) FACTOR = TEN*FACTOR 20 CONTINUE GO TO 10 30 CONTINUE WRITE (NWRITE,80) IC WRITE (NWRITE,90) DO 40 I = 1, IC WRITE (NWRITE,100) NP(I),NA(I),NF(I),NX(I),FNM(I) 40 CONTINUE STOP 50 FORMAT (3I5) 60 FORMAT ( //// 5X, 8H PROBLEM, I5, 5X, 10H DIMENSION, I5, 5X //) 70 FORMAT (5X, 33H INITIAL L2 NORM OF THE RESIDUALS, D15.7 // 5X, * 33H FINAL L2 NORM OF THE RESIDUALS , D15.7 // 5X, * 33H NUMBER OF FUNCTION EVALUATIONS , I10 // 5X, * 15H EXIT PARAMETER, 18X, I10 // 5X, * 27H FINAL APPROXIMATE SOLUTION // (5X, 5D15.7)) 80 FORMAT (12H1SUMMARY OF , I3, 16H CALLS TO HYBRD1 /) 90 FORMAT (39H NPROB N NFEV INFO FINAL L2 NORM /) 100 FORMAT (I4, I6, I7, I6, 1X, D15.7) C C LAST CARD OF DRIVER. C END SUBROUTINE FCN(N,X,FVEC,IFLAG) INTEGER N,IFLAG DOUBLE PRECISION X(N),FVEC(N) C ********** C C THE CALLING SEQUENCE OF FCN SHOULD BE IDENTICAL TO THE C CALLING SEQUENCE OF THE FUNCTION SUBROUTINE IN THE NONLINEAR C EQUATION SOLVER. FCN SHOULD ONLY CALL THE TESTING FUNCTION C SUBROUTINE VECFCN WITH THE APPROPRIATE VALUE OF PROBLEM C NUMBER (NPROB). C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... VECFCN C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER NPROB,NFEV COMMON /REFNUM/ NPROB,NFEV CALL VECFCN(N,X,FVEC,NPROB) NFEV = NFEV + 1 RETURN C C LAST CARD OF INTERFACE SUBROUTINE FCN. C END SUBROUTINE VECFCN(N,X,FVEC,NPROB) INTEGER N,NPROB DOUBLE PRECISION X(N),FVEC(N) C ********** C C SUBROUTINE VECFCN C C THIS SUBROUTINE DEFINES FOURTEEN TEST FUNCTIONS. THE FIRST C FIVE TEST FUNCTIONS ARE OF DIMENSIONS 2,4,2,4,3, RESPECTIVELY, C WHILE THE REMAINING TEST FUNCTIONS ARE OF VARIABLE DIMENSION C N FOR ANY N GREATER THAN OR EQUAL TO 1 (PROBLEM 6 IS AN C EXCEPTION TO THIS, SINCE IT DOES NOT ALLOW N = 1). C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE VECFCN(N,X,FVEC,NPROB) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE NPROB C FUNCTION VECTOR EVALUATED AT X. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DATAN,DCOS,DEXP,DSIGN,DSIN,DSQRT, C MAX0,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IEV,IVAR,J,K,K1,K2,KP1,ML,MU DOUBLE PRECISION C1,C2,C3,C4,C5,C6,C7,C8,C9,EIGHT,FIVE,H,ONE, * PROD,SUM,SUM1,SUM2,TEMP,TEMP1,TEMP2,TEN,THREE, * TI,TJ,TK,TPI,TWO,ZERO DOUBLE PRECISION DFLOAT DATA ZERO,ONE,TWO,THREE,FIVE,EIGHT,TEN * /0.0D0,1.0D0,2.0D0,3.0D0,5.0D0,8.0D0,1.0D1/ DATA C1,C2,C3,C4,C5,C6,C7,C8,C9 * /1.0D4,1.0001D0,2.0D2,2.02D1,1.98D1,1.8D2,2.5D-1,5.0D-1, * 2.9D1/ DFLOAT(IVAR) = IVAR C C PROBLEM SELECTOR. C GO TO (10,20,30,40,50,60,120,170,200,220,270,300,330,350), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE FVEC(1) = ONE - X(1) FVEC(2) = TEN*(X(2) - X(1)**2) GO TO 380 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE FVEC(1) = X(1) + TEN*X(2) FVEC(2) = DSQRT(FIVE)*(X(3) - X(4)) FVEC(3) = (X(2) - TWO*X(3))**2 FVEC(4) = DSQRT(TEN)*(X(1) - X(4))**2 GO TO 380 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE FVEC(1) = C1*X(1)*X(2) - ONE FVEC(2) = DEXP(-X(1)) + DEXP(-X(2)) - C2 GO TO 380 C C WOOD FUNCTION. C 40 CONTINUE TEMP1 = X(2) - X(1)**2 TEMP2 = X(4) - X(3)**2 FVEC(1) = -C3*X(1)*TEMP1 - (ONE - X(1)) FVEC(2) = C3*TEMP1 + C4*(X(2) - ONE) + C5*(X(4) - ONE) FVEC(3) = -C6*X(3)*TEMP2 - (ONE - X(3)) FVEC(4) = C6*TEMP2 + C4*(X(4) - ONE) + C5*(X(2) - ONE) GO TO 380 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE TPI = EIGHT*DATAN(ONE) TEMP1 = DSIGN(C7,X(2)) IF (X(1) .GT. ZERO) TEMP1 = DATAN(X(2)/X(1))/TPI IF (X(1) .LT. ZERO) TEMP1 = DATAN(X(2)/X(1))/TPI + C8 TEMP2 = DSQRT(X(1)**2+X(2)**2) FVEC(1) = TEN*(X(3) - TEN*TEMP1) FVEC(2) = TEN*(TEMP2 - ONE) FVEC(3) = X(3) GO TO 380 C C WATSON FUNCTION. C 60 CONTINUE DO 70 K = 1, N FVEC(K) = ZERO 70 CONTINUE DO 110 I = 1, 29 TI = DFLOAT(I)/C9 SUM1 = ZERO TEMP = ONE DO 80 J = 2, N SUM1 = SUM1 + DFLOAT(J-1)*TEMP*X(J) TEMP = TI*TEMP 80 CONTINUE SUM2 = ZERO TEMP = ONE DO 90 J = 1, N SUM2 = SUM2 + TEMP*X(J) TEMP = TI*TEMP 90 CONTINUE TEMP1 = SUM1 - SUM2**2 - ONE TEMP2 = TWO*TI*SUM2 TEMP = ONE/TI DO 100 K = 1, N FVEC(K) = FVEC(K) + TEMP*(DFLOAT(K-1) - TEMP2)*TEMP1 TEMP = TI*TEMP 100 CONTINUE 110 CONTINUE TEMP = X(2) - X(1)**2 - ONE FVEC(1) = FVEC(1) + X(1)*(ONE - TWO*TEMP) FVEC(2) = FVEC(2) + TEMP GO TO 380 C C CHEBYQUAD FUNCTION. C 120 CONTINUE DO 130 K = 1, N FVEC(K) = ZERO 130 CONTINUE DO 150 J = 1, N TEMP1 = ONE TEMP2 = TWO*X(J) - ONE TEMP = TWO*TEMP2 DO 140 I = 1, N FVEC(I) = FVEC(I) + TEMP2 TI = TEMP*TEMP2 - TEMP1 TEMP1 = TEMP2 TEMP2 = TI 140 CONTINUE 150 CONTINUE TK = ONE/DFLOAT(N) IEV = -1 DO 160 K = 1, N FVEC(K) = TK*FVEC(K) IF (IEV .GT. 0) FVEC(K) = FVEC(K) + ONE/(DFLOAT(K)**2 - ONE) IEV = -IEV 160 CONTINUE GO TO 380 C C BROWN ALMOST-LINEAR FUNCTION. C 170 CONTINUE SUM = -DFLOAT(N+1) PROD = ONE DO 180 J = 1, N SUM = SUM + X(J) PROD = X(J)*PROD 180 CONTINUE DO 190 K = 1, N FVEC(K) = X(K) + SUM 190 CONTINUE FVEC(N) = PROD - ONE GO TO 380 C C DISCRETE BOUNDARY VALUE FUNCTION. C 200 CONTINUE H = ONE/DFLOAT(N+1) DO 210 K = 1, N TEMP = (X(K) + DFLOAT(K)*H + ONE)**3 TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TWO*X(K) - TEMP1 - TEMP2 + TEMP*H**2/TWO 210 CONTINUE GO TO 380 C C DISCRETE INTEGRAL EQUATION FUNCTION. C 220 CONTINUE H = ONE/DFLOAT(N+1) DO 260 K = 1, N TK = DFLOAT(K)*H SUM1 = ZERO DO 230 J = 1, K TJ = DFLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM1 = SUM1 + TJ*TEMP 230 CONTINUE SUM2 = ZERO KP1 = K + 1 IF (N .LT. KP1) GO TO 250 DO 240 J = KP1, N TJ = DFLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM2 = SUM2 + (ONE - TJ)*TEMP 240 CONTINUE 250 CONTINUE FVEC(K) = X(K) + H*((ONE - TK)*SUM1 + TK*SUM2)/TWO 260 CONTINUE GO TO 380 C C TRIGONOMETRIC FUNCTION. C 270 CONTINUE SUM = ZERO DO 280 J = 1, N FVEC(J) = DCOS(X(J)) SUM = SUM + FVEC(J) 280 CONTINUE DO 290 K = 1, N FVEC(K) = DFLOAT(N+K) - DSIN(X(K)) - SUM - DFLOAT(K)*FVEC(K) 290 CONTINUE GO TO 380 C C VARIABLY DIMENSIONED FUNCTION. C 300 CONTINUE SUM = ZERO DO 310 J = 1, N SUM = SUM + DFLOAT(J)*(X(J) - ONE) 310 CONTINUE TEMP = SUM*(ONE + TWO*SUM**2) DO 320 K = 1, N FVEC(K) = X(K) - ONE + DFLOAT(K)*TEMP 320 CONTINUE GO TO 380 C C BROYDEN TRIDIAGONAL FUNCTION. C 330 CONTINUE DO 340 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 340 CONTINUE GO TO 380 C C BROYDEN BANDED FUNCTION. C 350 CONTINUE ML = 5 MU = 1 DO 370 K = 1, N K1 = MAX0(1,K-ML) K2 = MIN0(K+MU,N) TEMP = ZERO DO 360 J = K1, K2 IF (J .NE. K) TEMP = TEMP + X(J)*(ONE + X(J)) 360 CONTINUE FVEC(K) = X(K)*(TWO + FIVE*X(K)**2) + ONE - TEMP 370 CONTINUE 380 CONTINUE RETURN C C LAST CARD OF SUBROUTINE VECFCN. C END SUBROUTINE INITPT(N,X,NPROB,FACTOR) INTEGER N,NPROB DOUBLE PRECISION FACTOR DOUBLE PRECISION X(N) C ********** C C SUBROUTINE INITPT C C THIS SUBROUTINE SPECIFIES THE STANDARD STARTING POINTS FOR C THE FUNCTIONS DEFINED BY SUBROUTINE VECFCN. THE SUBROUTINE C RETURNS IN X A MULTIPLE (FACTOR) OF THE STANDARD STARTING C POINT. FOR THE SIXTH FUNCTION THE STANDARD STARTING POINT IS C ZERO, SO IN THIS CASE, IF FACTOR IS NOT UNITY, THEN THE C SUBROUTINE RETURNS THE VECTOR X(J) = FACTOR, J=1,...,N. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE INITPT(N,X,NPROB,FACTOR) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE STANDARD C STARTING POINT FOR PROBLEM NPROB MULTIPLIED BY FACTOR. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C FACTOR IS AN INPUT VARIABLE WHICH SPECIFIES THE MULTIPLE OF C THE STANDARD STARTING POINT. IF FACTOR IS UNITY, NO C MULTIPLICATION IS PERFORMED. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IVAR,J DOUBLE PRECISION C1,H,HALF,ONE,THREE,TJ,ZERO DOUBLE PRECISION DFLOAT DATA ZERO,HALF,ONE,THREE,C1 /0.0D0,5.0D-1,1.0D0,3.0D0,1.2D0/ DFLOAT(IVAR) = IVAR C C SELECTION OF INITIAL POINT. C GO TO (10,20,30,40,50,60,80,100,120,120,140,160,180,180), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE X(1) = -C1 X(2) = ONE GO TO 200 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE X(1) = THREE X(2) = -ONE X(3) = ZERO X(4) = ONE GO TO 200 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE X(1) = ZERO X(2) = ONE GO TO 200 C C WOOD FUNCTION. C 40 CONTINUE X(1) = -THREE X(2) = -ONE X(3) = -THREE X(4) = -ONE GO TO 200 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE X(1) = -ONE X(2) = ZERO X(3) = ZERO GO TO 200 C C WATSON FUNCTION. C 60 CONTINUE DO 70 J = 1, N X(J) = ZERO 70 CONTINUE GO TO 200 C C CHEBYQUAD FUNCTION. C 80 CONTINUE H = ONE/DFLOAT(N+1) DO 90 J = 1, N X(J) = DFLOAT(J)*H 90 CONTINUE GO TO 200 C C BROWN ALMOST-LINEAR FUNCTION. C 100 CONTINUE DO 110 J = 1, N X(J) = HALF 110 CONTINUE GO TO 200 C C DISCRETE BOUNDARY VALUE AND INTEGRAL EQUATION FUNCTIONS. C 120 CONTINUE H = ONE/DFLOAT(N+1) DO 130 J = 1, N TJ = DFLOAT(J)*H X(J) = TJ*(TJ - ONE) 130 CONTINUE GO TO 200 C C TRIGONOMETRIC FUNCTION. C 140 CONTINUE H = ONE/DFLOAT(N) DO 150 J = 1, N X(J) = H 150 CONTINUE GO TO 200 C C VARIABLY DIMENSIONED FUNCTION. C 160 CONTINUE H = ONE/DFLOAT(N) DO 170 J = 1, N X(J) = ONE - DFLOAT(J)*H 170 CONTINUE GO TO 200 C C BROYDEN TRIDIAGONAL AND BANDED FUNCTIONS. C 180 CONTINUE DO 190 J = 1, N X(J) = -ONE 190 CONTINUE 200 CONTINUE C C COMPUTE MULTIPLE OF INITIAL POINT. C IF (FACTOR .EQ. ONE) GO TO 250 IF (NPROB .EQ. 6) GO TO 220 DO 210 J = 1, N X(J) = FACTOR*X(J) 210 CONTINUE GO TO 240 220 CONTINUE DO 230 J = 1, N X(J) = FACTOR 230 CONTINUE 240 CONTINUE 250 CONTINUE RETURN C C LAST CARD OF SUBROUTINE INITPT. C END PyBDSF-1.10.1/src/minpack/ex/file16000066400000000000000000000547721420247104600164760ustar00rootroot00000000000000C ********** C C THIS PROGRAM TESTS CODES FOR THE SOLUTION OF N NONLINEAR C EQUATIONS IN N VARIABLES. IT CONSISTS OF A DRIVER AND AN C INTERFACE SUBROUTINE FCN. THE DRIVER READS IN DATA, CALLS THE C NONLINEAR EQUATION SOLVER, AND FINALLY PRINTS OUT INFORMATION C ON THE PERFORMANCE OF THE SOLVER. THIS IS ONLY A SAMPLE DRIVER, C MANY OTHER DRIVERS ARE POSSIBLE. THE INTERFACE SUBROUTINE FCN C IS NECESSARY TO TAKE INTO ACCOUNT THE FORMS OF CALLING C SEQUENCES USED BY THE FUNCTION AND JACOBIAN SUBROUTINES IN C THE VARIOUS NONLINEAR EQUATION SOLVERS. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DPMPAR,ENORM,HYBRJ1,INITPT,VECFCN C C FORTRAN-SUPPLIED ... DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IC,INFO,K,LDFJAC,LWA,N,NFEV,NJEV,NPROB,NREAD,NTRIES, 1 NWRITE INTEGER NA(60),NF(60),NJ(60),NP(60),NX(60) DOUBLE PRECISION FACTOR,FNORM1,FNORM2,ONE,TEN,TOL DOUBLE PRECISION FNM(60),FJAC(40,40),FVEC(40),WA(1060),X(40) DOUBLE PRECISION DPMPAR,ENORM EXTERNAL FCN COMMON /REFNUM/ NPROB,NFEV,NJEV C C LOGICAL INPUT UNIT IS ASSUMED TO BE NUMBER 5. C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NREAD,NWRITE /5,6/ C DATA ONE,TEN /1.0D0,1.0D1/ TOL = DSQRT(DPMPAR(1)) LDFJAC = 40 LWA = 1060 IC = 0 10 CONTINUE READ (NREAD,50) NPROB,N,NTRIES IF (NPROB .LE. 0) GO TO 30 FACTOR = ONE DO 20 K = 1, NTRIES IC = IC + 1 CALL INITPT(N,X,NPROB,FACTOR) CALL VECFCN(N,X,FVEC,NPROB) FNORM1 = ENORM(N,FVEC) WRITE (NWRITE,60) NPROB,N NFEV = 0 NJEV = 0 CALL HYBRJ1(FCN,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,WA,LWA) FNORM2 = ENORM(N,FVEC) NP(IC) = NPROB NA(IC) = N NF(IC) = NFEV NJ(IC) = NJEV NX(IC) = INFO FNM(IC) = FNORM2 WRITE (NWRITE,70) 1 FNORM1,FNORM2,NFEV,NJEV,INFO,(X(I), I = 1, N) FACTOR = TEN*FACTOR 20 CONTINUE GO TO 10 30 CONTINUE WRITE (NWRITE,80) IC WRITE (NWRITE,90) DO 40 I = 1, IC WRITE (NWRITE,100) NP(I),NA(I),NF(I),NJ(I),NX(I),FNM(I) 40 CONTINUE STOP 50 FORMAT (3I5) 60 FORMAT ( //// 5X, 8H PROBLEM, I5, 5X, 10H DIMENSION, I5, 5X //) 70 FORMAT (5X, 33H INITIAL L2 NORM OF THE RESIDUALS, D15.7 // 5X, 1 33H FINAL L2 NORM OF THE RESIDUALS , D15.7 // 5X, 2 33H NUMBER OF FUNCTION EVALUATIONS , I10 // 5X, 3 33H NUMBER OF JACOBIAN EVALUATIONS , I10 // 5X, 4 15H EXIT PARAMETER, 18X, I10 // 5X, 5 27H FINAL APPROXIMATE SOLUTION // (5X, 5D15.7)) 80 FORMAT (12H1SUMMARY OF , I3, 16H CALLS TO HYBRJ1 /) 90 FORMAT (46H NPROB N NFEV NJEV INFO FINAL L2 NORM /) 100 FORMAT (I4, I6, 2I7, I6, 1X, D15.7) C C LAST CARD OF DRIVER. C END SUBROUTINE FCN(N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER N,LDFJAC,IFLAG DOUBLE PRECISION X(N),FVEC(N),FJAC(LDFJAC,N) C ********** C C THE CALLING SEQUENCE OF FCN SHOULD BE IDENTICAL TO THE C CALLING SEQUENCE OF THE FUNCTION SUBROUTINE IN THE NONLINEAR C EQUATION SOLVER. FCN SHOULD ONLY CALL THE TESTING FUNCTION C AND JACOBIAN SUBROUTINES VECFCN AND VECJAC WITH THE C APPROPRIATE VALUE OF PROBLEM NUMBER (NPROB). C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... VECFCN,VECJAC C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER NPROB,NFEV,NJEV COMMON /REFNUM/ NPROB,NFEV,NJEV IF (IFLAG .EQ. 1) CALL VECFCN(N,X,FVEC,NPROB) IF (IFLAG .EQ. 2) CALL VECJAC(N,X,FJAC,LDFJAC,NPROB) IF (IFLAG .EQ. 1) NFEV = NFEV + 1 IF (IFLAG .EQ. 2) NJEV = NJEV + 1 RETURN C C LAST CARD OF INTERFACE SUBROUTINE FCN. C END SUBROUTINE VECJAC(N,X,FJAC,LDFJAC,NPROB) INTEGER N,LDFJAC,NPROB DOUBLE PRECISION X(N),FJAC(LDFJAC,N) C ********** C C SUBROUTINE VECJAC C C THIS SUBROUTINE DEFINES THE JACOBIAN MATRICES OF FOURTEEN C TEST FUNCTIONS. THE PROBLEM DIMENSIONS ARE AS DESCRIBED C IN THE PROLOGUE COMMENTS OF VECFCN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE VECJAC(N,X,FJAC,LDFJAC,NPROB) C C WHERE C C N IS A POSITIVE INTEGER VARIABLE. C C X IS AN ARRAY OF LENGTH N. C C FJAC IS AN N BY N ARRAY. ON OUTPUT FJAC CONTAINS THE C JACOBIAN MATRIX OF THE NPROB FUNCTION EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C NPROB IS A POSITIVE INTEGER VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DATAN,DCOS,DEXP,DMIN1,DSIN,DSQRT, C MAX0,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IVAR,J,K,K1,K2,ML,MU DOUBLE PRECISION C1,C3,C4,C5,C6,C9,EIGHT,FIFTN,FIVE,FOUR,H, * HUNDRD,ONE,PROD,SIX,SUM,SUM1,SUM2,TEMP,TEMP1, * TEMP2,TEMP3,TEMP4,TEN,THREE,TI,TJ,TK,TPI, * TWENTY,TWO,ZERO DOUBLE PRECISION DFLOAT DATA ZERO,ONE,TWO,THREE,FOUR,FIVE,SIX,EIGHT,TEN,FIFTN,TWENTY, * HUNDRD * /0.0D0,1.0D0,2.0D0,3.0D0,4.0D0,5.0D0,6.0D0,8.0D0,1.0D1, * 1.5D1,2.0D1,1.0D2/ DATA C1,C3,C4,C5,C6,C9 /1.0D4,2.0D2,2.02D1,1.98D1,1.8D2,2.9D1/ DFLOAT(IVAR) = IVAR C C JACOBIAN ROUTINE SELECTOR. C GO TO (10,20,50,60,90,100,200,230,290,320,350,380,420,450), * NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE FJAC(1,1) = -ONE FJAC(1,2) = ZERO FJAC(2,1) = -TWENTY*X(1) FJAC(2,2) = TEN GO TO 490 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE DO 40 K = 1, 4 DO 30 J = 1, 4 FJAC(K,J) = ZERO 30 CONTINUE 40 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = TEN FJAC(2,3) = DSQRT(FIVE) FJAC(2,4) = -FJAC(2,3) FJAC(3,2) = TWO*(X(2) - TWO*X(3)) FJAC(3,3) = -TWO*FJAC(3,2) FJAC(4,1) = TWO*DSQRT(TEN)*(X(1) - X(4)) FJAC(4,4) = -FJAC(4,1) GO TO 490 C C POWELL BADLY SCALED FUNCTION. C 50 CONTINUE FJAC(1,1) = C1*X(2) FJAC(1,2) = C1*X(1) FJAC(2,1) = -DEXP(-X(1)) FJAC(2,2) = -DEXP(-X(2)) GO TO 490 C C WOOD FUNCTION. C 60 CONTINUE DO 80 K = 1, 4 DO 70 J = 1, 4 FJAC(K,J) = ZERO 70 CONTINUE 80 CONTINUE TEMP1 = X(2) - THREE*X(1)**2 TEMP2 = X(4) - THREE*X(3)**2 FJAC(1,1) = -C3*TEMP1 + ONE FJAC(1,2) = -C3*X(1) FJAC(2,1) = -TWO*C3*X(1) FJAC(2,2) = C3 + C4 FJAC(2,4) = C5 FJAC(3,3) = -C6*TEMP2 + ONE FJAC(3,4) = -C6*X(3) FJAC(4,2) = C5 FJAC(4,3) = -TWO*C6*X(3) FJAC(4,4) = C6 + C4 GO TO 490 C C HELICAL VALLEY FUNCTION. C 90 CONTINUE TPI = EIGHT*DATAN(ONE) TEMP = X(1)**2 + X(2)**2 TEMP1 = TPI*TEMP TEMP2 = DSQRT(TEMP) FJAC(1,1) = HUNDRD*X(2)/TEMP1 FJAC(1,2) = -HUNDRD*X(1)/TEMP1 FJAC(1,3) = TEN FJAC(2,1) = TEN*X(1)/TEMP2 FJAC(2,2) = TEN*X(2)/TEMP2 FJAC(2,3) = ZERO FJAC(3,1) = ZERO FJAC(3,2) = ZERO FJAC(3,3) = ONE GO TO 490 C C WATSON FUNCTION. C 100 CONTINUE DO 120 K = 1, N DO 110 J = K, N FJAC(K,J) = ZERO 110 CONTINUE 120 CONTINUE DO 170 I = 1, 29 TI = DFLOAT(I)/C9 SUM1 = ZERO TEMP = ONE DO 130 J = 2, N SUM1 = SUM1 + DFLOAT(J-1)*TEMP*X(J) TEMP = TI*TEMP 130 CONTINUE SUM2 = ZERO TEMP = ONE DO 140 J = 1, N SUM2 = SUM2 + TEMP*X(J) TEMP = TI*TEMP 140 CONTINUE TEMP1 = TWO*(SUM1 - SUM2**2 - ONE) TEMP2 = TWO*SUM2 TEMP = TI**2 TK = ONE DO 160 K = 1, N TJ = TK DO 150 J = K, N FJAC(K,J) = FJAC(K,J) * + TJ * *((DFLOAT(K-1)/TI - TEMP2) * *(DFLOAT(J-1)/TI - TEMP2) - TEMP1) TJ = TI*TJ 150 CONTINUE TK = TEMP*TK 160 CONTINUE 170 CONTINUE FJAC(1,1) = FJAC(1,1) + SIX*X(1)**2 - TWO*X(2) + THREE FJAC(1,2) = FJAC(1,2) - TWO*X(1) FJAC(2,2) = FJAC(2,2) + ONE DO 190 K = 1, N DO 180 J = K, N FJAC(J,K) = FJAC(K,J) 180 CONTINUE 190 CONTINUE GO TO 490 C C CHEBYQUAD FUNCTION. C 200 CONTINUE TK = ONE/DFLOAT(N) DO 220 J = 1, N TEMP1 = ONE TEMP2 = TWO*X(J) - ONE TEMP = TWO*TEMP2 TEMP3 = ZERO TEMP4 = TWO DO 210 K = 1, N FJAC(K,J) = TK*TEMP4 TI = FOUR*TEMP2 + TEMP*TEMP4 - TEMP3 TEMP3 = TEMP4 TEMP4 = TI TI = TEMP*TEMP2 - TEMP1 TEMP1 = TEMP2 TEMP2 = TI 210 CONTINUE 220 CONTINUE GO TO 490 C C BROWN ALMOST-LINEAR FUNCTION. C 230 CONTINUE PROD = ONE DO 250 J = 1, N PROD = X(J)*PROD DO 240 K = 1, N FJAC(K,J) = ONE 240 CONTINUE FJAC(J,J) = TWO 250 CONTINUE DO 280 J = 1, N TEMP = X(J) IF (TEMP .NE. ZERO) GO TO 270 TEMP = ONE PROD = ONE DO 260 K = 1, N IF (K .NE. J) PROD = X(K)*PROD 260 CONTINUE 270 CONTINUE FJAC(N,J) = PROD/TEMP 280 CONTINUE GO TO 490 C C DISCRETE BOUNDARY VALUE FUNCTION. C 290 CONTINUE H = ONE/DFLOAT(N+1) DO 310 K = 1, N TEMP = THREE*(X(K) + DFLOAT(K)*H + ONE)**2 DO 300 J = 1, N FJAC(K,J) = ZERO 300 CONTINUE FJAC(K,K) = TWO + TEMP*H**2/TWO IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -ONE 310 CONTINUE GO TO 490 C C DISCRETE INTEGRAL EQUATION FUNCTION. C 320 CONTINUE H = ONE/DFLOAT(N+1) DO 340 K = 1, N TK = DFLOAT(K)*H DO 330 J = 1, N TJ = DFLOAT(J)*H TEMP = THREE*(X(J) + TJ + ONE)**2 FJAC(K,J) = H*DMIN1(TJ*(ONE-TK),TK*(ONE-TJ))*TEMP/TWO 330 CONTINUE FJAC(K,K) = FJAC(K,K) + ONE 340 CONTINUE GO TO 490 C C TRIGONOMETRIC FUNCTION. C 350 CONTINUE DO 370 J = 1, N TEMP = DSIN(X(J)) DO 360 K = 1, N FJAC(K,J) = TEMP 360 CONTINUE FJAC(J,J) = DFLOAT(J+1)*TEMP - DCOS(X(J)) 370 CONTINUE GO TO 490 C C VARIABLY DIMENSIONED FUNCTION. C 380 CONTINUE SUM = ZERO DO 390 J = 1, N SUM = SUM + DFLOAT(J)*(X(J) - ONE) 390 CONTINUE TEMP = ONE + SIX*SUM**2 DO 410 K = 1, N DO 400 J = K, N FJAC(K,J) = DFLOAT(K*J)*TEMP FJAC(J,K) = FJAC(K,J) 400 CONTINUE FJAC(K,K) = FJAC(K,K) + ONE 410 CONTINUE GO TO 490 C C BROYDEN TRIDIAGONAL FUNCTION. C 420 CONTINUE DO 440 K = 1, N DO 430 J = 1, N FJAC(K,J) = ZERO 430 CONTINUE FJAC(K,K) = THREE - FOUR*X(K) IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -TWO 440 CONTINUE GO TO 490 C C BROYDEN BANDED FUNCTION. C 450 CONTINUE ML = 5 MU = 1 DO 480 K = 1, N DO 460 J = 1, N FJAC(K,J) = ZERO 460 CONTINUE K1 = MAX0(1,K-ML) K2 = MIN0(K+MU,N) DO 470 J = K1, K2 IF (J .NE. K) FJAC(K,J) = -(ONE + TWO*X(J)) 470 CONTINUE FJAC(K,K) = TWO + FIFTN*X(K)**2 480 CONTINUE 490 CONTINUE RETURN C C LAST CARD OF SUBROUTINE VECJAC. C END SUBROUTINE INITPT(N,X,NPROB,FACTOR) INTEGER N,NPROB DOUBLE PRECISION FACTOR DOUBLE PRECISION X(N) C ********** C C SUBROUTINE INITPT C C THIS SUBROUTINE SPECIFIES THE STANDARD STARTING POINTS FOR C THE FUNCTIONS DEFINED BY SUBROUTINE VECFCN. THE SUBROUTINE C RETURNS IN X A MULTIPLE (FACTOR) OF THE STANDARD STARTING C POINT. FOR THE SIXTH FUNCTION THE STANDARD STARTING POINT IS C ZERO, SO IN THIS CASE, IF FACTOR IS NOT UNITY, THEN THE C SUBROUTINE RETURNS THE VECTOR X(J) = FACTOR, J=1,...,N. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE INITPT(N,X,NPROB,FACTOR) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE STANDARD C STARTING POINT FOR PROBLEM NPROB MULTIPLIED BY FACTOR. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C FACTOR IS AN INPUT VARIABLE WHICH SPECIFIES THE MULTIPLE OF C THE STANDARD STARTING POINT. IF FACTOR IS UNITY, NO C MULTIPLICATION IS PERFORMED. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IVAR,J DOUBLE PRECISION C1,H,HALF,ONE,THREE,TJ,ZERO DOUBLE PRECISION DFLOAT DATA ZERO,HALF,ONE,THREE,C1 /0.0D0,5.0D-1,1.0D0,3.0D0,1.2D0/ DFLOAT(IVAR) = IVAR C C SELECTION OF INITIAL POINT. C GO TO (10,20,30,40,50,60,80,100,120,120,140,160,180,180), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE X(1) = -C1 X(2) = ONE GO TO 200 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE X(1) = THREE X(2) = -ONE X(3) = ZERO X(4) = ONE GO TO 200 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE X(1) = ZERO X(2) = ONE GO TO 200 C C WOOD FUNCTION. C 40 CONTINUE X(1) = -THREE X(2) = -ONE X(3) = -THREE X(4) = -ONE GO TO 200 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE X(1) = -ONE X(2) = ZERO X(3) = ZERO GO TO 200 C C WATSON FUNCTION. C 60 CONTINUE DO 70 J = 1, N X(J) = ZERO 70 CONTINUE GO TO 200 C C CHEBYQUAD FUNCTION. C 80 CONTINUE H = ONE/DFLOAT(N+1) DO 90 J = 1, N X(J) = DFLOAT(J)*H 90 CONTINUE GO TO 200 C C BROWN ALMOST-LINEAR FUNCTION. C 100 CONTINUE DO 110 J = 1, N X(J) = HALF 110 CONTINUE GO TO 200 C C DISCRETE BOUNDARY VALUE AND INTEGRAL EQUATION FUNCTIONS. C 120 CONTINUE H = ONE/DFLOAT(N+1) DO 130 J = 1, N TJ = DFLOAT(J)*H X(J) = TJ*(TJ - ONE) 130 CONTINUE GO TO 200 C C TRIGONOMETRIC FUNCTION. C 140 CONTINUE H = ONE/DFLOAT(N) DO 150 J = 1, N X(J) = H 150 CONTINUE GO TO 200 C C VARIABLY DIMENSIONED FUNCTION. C 160 CONTINUE H = ONE/DFLOAT(N) DO 170 J = 1, N X(J) = ONE - DFLOAT(J)*H 170 CONTINUE GO TO 200 C C BROYDEN TRIDIAGONAL AND BANDED FUNCTIONS. C 180 CONTINUE DO 190 J = 1, N X(J) = -ONE 190 CONTINUE 200 CONTINUE C C COMPUTE MULTIPLE OF INITIAL POINT. C IF (FACTOR .EQ. ONE) GO TO 250 IF (NPROB .EQ. 6) GO TO 220 DO 210 J = 1, N X(J) = FACTOR*X(J) 210 CONTINUE GO TO 240 220 CONTINUE DO 230 J = 1, N X(J) = FACTOR 230 CONTINUE 240 CONTINUE 250 CONTINUE RETURN C C LAST CARD OF SUBROUTINE INITPT. C END SUBROUTINE VECFCN(N,X,FVEC,NPROB) INTEGER N,NPROB DOUBLE PRECISION X(N),FVEC(N) C ********** C C SUBROUTINE VECFCN C C THIS SUBROUTINE DEFINES FOURTEEN TEST FUNCTIONS. THE FIRST C FIVE TEST FUNCTIONS ARE OF DIMENSIONS 2,4,2,4,3, RESPECTIVELY, C WHILE THE REMAINING TEST FUNCTIONS ARE OF VARIABLE DIMENSION C N FOR ANY N GREATER THAN OR EQUAL TO 1 (PROBLEM 6 IS AN C EXCEPTION TO THIS, SINCE IT DOES NOT ALLOW N = 1). C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE VECFCN(N,X,FVEC,NPROB) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE NPROB C FUNCTION VECTOR EVALUATED AT X. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DATAN,DCOS,DEXP,DSIGN,DSIN,DSQRT, C MAX0,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IEV,IVAR,J,K,K1,K2,KP1,ML,MU DOUBLE PRECISION C1,C2,C3,C4,C5,C6,C7,C8,C9,EIGHT,FIVE,H,ONE, * PROD,SUM,SUM1,SUM2,TEMP,TEMP1,TEMP2,TEN,THREE, * TI,TJ,TK,TPI,TWO,ZERO DOUBLE PRECISION DFLOAT DATA ZERO,ONE,TWO,THREE,FIVE,EIGHT,TEN * /0.0D0,1.0D0,2.0D0,3.0D0,5.0D0,8.0D0,1.0D1/ DATA C1,C2,C3,C4,C5,C6,C7,C8,C9 * /1.0D4,1.0001D0,2.0D2,2.02D1,1.98D1,1.8D2,2.5D-1,5.0D-1, * 2.9D1/ DFLOAT(IVAR) = IVAR C C PROBLEM SELECTOR. C GO TO (10,20,30,40,50,60,120,170,200,220,270,300,330,350), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE FVEC(1) = ONE - X(1) FVEC(2) = TEN*(X(2) - X(1)**2) GO TO 380 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE FVEC(1) = X(1) + TEN*X(2) FVEC(2) = DSQRT(FIVE)*(X(3) - X(4)) FVEC(3) = (X(2) - TWO*X(3))**2 FVEC(4) = DSQRT(TEN)*(X(1) - X(4))**2 GO TO 380 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE FVEC(1) = C1*X(1)*X(2) - ONE FVEC(2) = DEXP(-X(1)) + DEXP(-X(2)) - C2 GO TO 380 C C WOOD FUNCTION. C 40 CONTINUE TEMP1 = X(2) - X(1)**2 TEMP2 = X(4) - X(3)**2 FVEC(1) = -C3*X(1)*TEMP1 - (ONE - X(1)) FVEC(2) = C3*TEMP1 + C4*(X(2) - ONE) + C5*(X(4) - ONE) FVEC(3) = -C6*X(3)*TEMP2 - (ONE - X(3)) FVEC(4) = C6*TEMP2 + C4*(X(4) - ONE) + C5*(X(2) - ONE) GO TO 380 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE TPI = EIGHT*DATAN(ONE) TEMP1 = DSIGN(C7,X(2)) IF (X(1) .GT. ZERO) TEMP1 = DATAN(X(2)/X(1))/TPI IF (X(1) .LT. ZERO) TEMP1 = DATAN(X(2)/X(1))/TPI + C8 TEMP2 = DSQRT(X(1)**2+X(2)**2) FVEC(1) = TEN*(X(3) - TEN*TEMP1) FVEC(2) = TEN*(TEMP2 - ONE) FVEC(3) = X(3) GO TO 380 C C WATSON FUNCTION. C 60 CONTINUE DO 70 K = 1, N FVEC(K) = ZERO 70 CONTINUE DO 110 I = 1, 29 TI = DFLOAT(I)/C9 SUM1 = ZERO TEMP = ONE DO 80 J = 2, N SUM1 = SUM1 + DFLOAT(J-1)*TEMP*X(J) TEMP = TI*TEMP 80 CONTINUE SUM2 = ZERO TEMP = ONE DO 90 J = 1, N SUM2 = SUM2 + TEMP*X(J) TEMP = TI*TEMP 90 CONTINUE TEMP1 = SUM1 - SUM2**2 - ONE TEMP2 = TWO*TI*SUM2 TEMP = ONE/TI DO 100 K = 1, N FVEC(K) = FVEC(K) + TEMP*(DFLOAT(K-1) - TEMP2)*TEMP1 TEMP = TI*TEMP 100 CONTINUE 110 CONTINUE TEMP = X(2) - X(1)**2 - ONE FVEC(1) = FVEC(1) + X(1)*(ONE - TWO*TEMP) FVEC(2) = FVEC(2) + TEMP GO TO 380 C C CHEBYQUAD FUNCTION. C 120 CONTINUE DO 130 K = 1, N FVEC(K) = ZERO 130 CONTINUE DO 150 J = 1, N TEMP1 = ONE TEMP2 = TWO*X(J) - ONE TEMP = TWO*TEMP2 DO 140 I = 1, N FVEC(I) = FVEC(I) + TEMP2 TI = TEMP*TEMP2 - TEMP1 TEMP1 = TEMP2 TEMP2 = TI 140 CONTINUE 150 CONTINUE TK = ONE/DFLOAT(N) IEV = -1 DO 160 K = 1, N FVEC(K) = TK*FVEC(K) IF (IEV .GT. 0) FVEC(K) = FVEC(K) + ONE/(DFLOAT(K)**2 - ONE) IEV = -IEV 160 CONTINUE GO TO 380 C C BROWN ALMOST-LINEAR FUNCTION. C 170 CONTINUE SUM = -DFLOAT(N+1) PROD = ONE DO 180 J = 1, N SUM = SUM + X(J) PROD = X(J)*PROD 180 CONTINUE DO 190 K = 1, N FVEC(K) = X(K) + SUM 190 CONTINUE FVEC(N) = PROD - ONE GO TO 380 C C DISCRETE BOUNDARY VALUE FUNCTION. C 200 CONTINUE H = ONE/DFLOAT(N+1) DO 210 K = 1, N TEMP = (X(K) + DFLOAT(K)*H + ONE)**3 TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TWO*X(K) - TEMP1 - TEMP2 + TEMP*H**2/TWO 210 CONTINUE GO TO 380 C C DISCRETE INTEGRAL EQUATION FUNCTION. C 220 CONTINUE H = ONE/DFLOAT(N+1) DO 260 K = 1, N TK = DFLOAT(K)*H SUM1 = ZERO DO 230 J = 1, K TJ = DFLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM1 = SUM1 + TJ*TEMP 230 CONTINUE SUM2 = ZERO KP1 = K + 1 IF (N .LT. KP1) GO TO 250 DO 240 J = KP1, N TJ = DFLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM2 = SUM2 + (ONE - TJ)*TEMP 240 CONTINUE 250 CONTINUE FVEC(K) = X(K) + H*((ONE - TK)*SUM1 + TK*SUM2)/TWO 260 CONTINUE GO TO 380 C C TRIGONOMETRIC FUNCTION. C 270 CONTINUE SUM = ZERO DO 280 J = 1, N FVEC(J) = DCOS(X(J)) SUM = SUM + FVEC(J) 280 CONTINUE DO 290 K = 1, N FVEC(K) = DFLOAT(N+K) - DSIN(X(K)) - SUM - DFLOAT(K)*FVEC(K) 290 CONTINUE GO TO 380 C C VARIABLY DIMENSIONED FUNCTION. C 300 CONTINUE SUM = ZERO DO 310 J = 1, N SUM = SUM + DFLOAT(J)*(X(J) - ONE) 310 CONTINUE TEMP = SUM*(ONE + TWO*SUM**2) DO 320 K = 1, N FVEC(K) = X(K) - ONE + DFLOAT(K)*TEMP 320 CONTINUE GO TO 380 C C BROYDEN TRIDIAGONAL FUNCTION. C 330 CONTINUE DO 340 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 340 CONTINUE GO TO 380 C C BROYDEN BANDED FUNCTION. C 350 CONTINUE ML = 5 MU = 1 DO 370 K = 1, N K1 = MAX0(1,K-ML) K2 = MIN0(K+MU,N) TEMP = ZERO DO 360 J = K1, K2 IF (J .NE. K) TEMP = TEMP + X(J)*(ONE + X(J)) 360 CONTINUE FVEC(K) = X(K)*(TWO + FIVE*X(K)**2) + ONE - TEMP 370 CONTINUE 380 CONTINUE RETURN C C LAST CARD OF SUBROUTINE VECFCN. C END PyBDSF-1.10.1/src/minpack/ex/file17000066400000000000000000000666231420247104600164750ustar00rootroot00000000000000C ********** C C THIS PROGRAM TESTS CODES FOR THE LEAST-SQUARES SOLUTION OF C M NONLINEAR EQUATIONS IN N VARIABLES. IT CONSISTS OF A DRIVER C AND AN INTERFACE SUBROUTINE FCN. THE DRIVER READS IN DATA, C CALLS THE NONLINEAR LEAST-SQUARES SOLVER, AND FINALLY PRINTS C OUT INFORMATION ON THE PERFORMANCE OF THE SOLVER. THIS IS C ONLY A SAMPLE DRIVER, MANY OTHER DRIVERS ARE POSSIBLE. THE C INTERFACE SUBROUTINE FCN IS NECESSARY TO TAKE INTO ACCOUNT THE C FORMS OF CALLING SEQUENCES USED BY THE FUNCTION AND JACOBIAN C SUBROUTINES IN THE VARIOUS NONLINEAR LEAST-SQUARES SOLVERS. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DPMPAR,ENORM,INITPT,LMDER1,SSQFCN C C FORTRAN-SUPPLIED ... DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IC,INFO,K,LDFJAC,LWA,M,N,NFEV,NJEV,NPROB,NREAD,NTRIES, * NWRITE INTEGER IWA(40),MA(60),NA(60),NF(60),NJ(60),NP(60),NX(60) DOUBLE PRECISION FACTOR,FNORM1,FNORM2,ONE,TEN,TOL DOUBLE PRECISION FJAC(65,40),FNM(60),FVEC(65),WA(265),X(40) DOUBLE PRECISION DPMPAR,ENORM EXTERNAL FCN COMMON /REFNUM/ NPROB,NFEV,NJEV C C LOGICAL INPUT UNIT IS ASSUMED TO BE NUMBER 5. C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NREAD,NWRITE /5,6/ C DATA ONE,TEN /1.0D0,1.0D1/ TOL = DSQRT(DPMPAR(1)) LDFJAC = 65 LWA = 265 IC = 0 10 CONTINUE READ (NREAD,50) NPROB,N,M,NTRIES IF (NPROB .LE. 0) GO TO 30 FACTOR = ONE DO 20 K = 1, NTRIES IC = IC + 1 CALL INITPT(N,X,NPROB,FACTOR) CALL SSQFCN(M,N,X,FVEC,NPROB) FNORM1 = ENORM(M,FVEC) WRITE (NWRITE,60) NPROB,N,M NFEV = 0 NJEV = 0 CALL LMDER1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,IWA,WA, * LWA) CALL SSQFCN(M,N,X,FVEC,NPROB) FNORM2 = ENORM(M,FVEC) NP(IC) = NPROB NA(IC) = N MA(IC) = M NF(IC) = NFEV NJ(IC) = NJEV NX(IC) = INFO FNM(IC) = FNORM2 WRITE (NWRITE,70) * FNORM1,FNORM2,NFEV,NJEV,INFO,(X(I), I = 1, N) FACTOR = TEN*FACTOR 20 CONTINUE GO TO 10 30 CONTINUE WRITE (NWRITE,80) IC WRITE (NWRITE,90) DO 40 I = 1, IC WRITE (NWRITE,100) NP(I),NA(I),MA(I),NF(I),NJ(I),NX(I),FNM(I) 40 CONTINUE STOP 50 FORMAT (4I5) 60 FORMAT ( //// 5X, 8H PROBLEM, I5, 5X, 11H DIMENSIONS, 2I5, 5X // * ) 70 FORMAT (5X, 33H INITIAL L2 NORM OF THE RESIDUALS, D15.7 // 5X, * 33H FINAL L2 NORM OF THE RESIDUALS , D15.7 // 5X, * 33H NUMBER OF FUNCTION EVALUATIONS , I10 // 5X, * 33H NUMBER OF JACOBIAN EVALUATIONS , I10 // 5X, * 15H EXIT PARAMETER, 18X, I10 // 5X, * 27H FINAL APPROXIMATE SOLUTION // (5X, 5D15.7)) 80 FORMAT (12H1SUMMARY OF , I3, 16H CALLS TO LMDER1 /) 90 FORMAT (49H NPROB N M NFEV NJEV INFO FINAL L2 NORM /) 100 FORMAT (3I5, 3I6, 1X, D15.7) C C LAST CARD OF DRIVER. C END SUBROUTINE FCN(M,N,X,FVEC,FJAC,LDFJAC,IFLAG) INTEGER M,N,LDFJAC,IFLAG DOUBLE PRECISION X(N),FVEC(M),FJAC(LDFJAC,N) C ********** C C THE CALLING SEQUENCE OF FCN SHOULD BE IDENTICAL TO THE C CALLING SEQUENCE OF THE FUNCTION SUBROUTINE IN THE NONLINEAR C LEAST-SQUARES SOLVER. FCN SHOULD ONLY CALL THE TESTING C FUNCTION AND JACOBIAN SUBROUTINES SSQFCN AND SSQJAC WITH C THE APPROPRIATE VALUE OF PROBLEM NUMBER (NPROB). C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... SSQFCN,SSQJAC C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER NPROB,NFEV,NJEV COMMON /REFNUM/ NPROB,NFEV,NJEV IF (IFLAG .EQ. 1) CALL SSQFCN(M,N,X,FVEC,NPROB) IF (IFLAG .EQ. 2) CALL SSQJAC(M,N,X,FJAC,LDFJAC,NPROB) IF (IFLAG .EQ. 1) NFEV = NFEV + 1 IF (IFLAG .EQ. 2) NJEV = NJEV + 1 RETURN C C LAST CARD OF INTERFACE SUBROUTINE FCN. C END SUBROUTINE SSQJAC(M,N,X,FJAC,LDFJAC,NPROB) INTEGER M,N,LDFJAC,NPROB DOUBLE PRECISION X(N),FJAC(LDFJAC,N) C ********** C C SUBROUTINE SSQJAC C C THIS SUBROUTINE DEFINES THE JACOBIAN MATRICES OF EIGHTEEN C NONLINEAR LEAST SQUARES PROBLEMS. THE PROBLEM DIMENSIONS ARE C AS DESCRIBED IN THE PROLOGUE COMMENTS OF SSQFCN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE SSQJAC(M,N,X,FJAC,LDFJAC,NPROB) C C WHERE C C M AND N ARE POSITIVE INTEGER INPUT VARIABLES. N MUST NOT C EXCEED M. C C X IS AN INPUT ARRAY OF LENGTH N. C C FJAC IS AN M BY N OUTPUT ARRAY WHICH CONTAINS THE JACOBIAN C MATRIX OF THE NPROB FUNCTION EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C NPROB IS A POSITIVE INTEGER VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DATAN,DCOS,DEXP,DSIN,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IVAR,J,K,MM1,NM1 DOUBLE PRECISION C14,C20,C29,C45,C100,DIV,DX,EIGHT,FIVE,FOUR, * ONE,PROD,S2,TEMP,TEN,THREE,TI,TMP1,TMP2,TMP3, * TMP4,TPI,TWO,ZERO DOUBLE PRECISION V(11) DOUBLE PRECISION DFLOAT DATA ZERO,ONE,TWO,THREE,FOUR,FIVE,EIGHT,TEN,C14,C20,C29,C45,C100 * /0.0D0,1.0D0,2.0D0,3.0D0,4.0D0,5.0D0,8.0D0,1.0D1,1.4D1, * 2.0D1,2.9D1,4.5D1,1.0D2/ DATA V(1),V(2),V(3),V(4),V(5),V(6),V(7),V(8),V(9),V(10),V(11) * /4.0D0,2.0D0,1.0D0,5.0D-1,2.5D-1,1.67D-1,1.25D-1,1.0D-1, * 8.33D-2,7.14D-2,6.25D-2/ DFLOAT(IVAR) = IVAR C C JACOBIAN ROUTINE SELECTOR. C GO TO (10,40,70,130,140,150,180,190,210,230,250,310,330,350,370, * 400,460,480), NPROB C C LINEAR FUNCTION - FULL RANK. C 10 CONTINUE TEMP = TWO/DFLOAT(M) DO 30 J = 1, N DO 20 I = 1, M FJAC(I,J) = -TEMP 20 CONTINUE FJAC(J,J) = FJAC(J,J) + ONE 30 CONTINUE GO TO 500 C C LINEAR FUNCTION - RANK 1. C 40 CONTINUE DO 60 J = 1, N DO 50 I = 1, M FJAC(I,J) = DFLOAT(I)*DFLOAT(J) 50 CONTINUE 60 CONTINUE GO TO 500 C C LINEAR FUNCTION - RANK 1 WITH ZERO COLUMNS AND ROWS. C 70 CONTINUE DO 90 J = 1, N DO 80 I = 1, M FJAC(I,J) = ZERO 80 CONTINUE 90 CONTINUE NM1 = N - 1 MM1 = M - 1 IF (NM1 .LT. 2) GO TO 120 DO 110 J = 2, NM1 DO 100 I = 2, MM1 FJAC(I,J) = DFLOAT(I-1)*DFLOAT(J) 100 CONTINUE 110 CONTINUE 120 CONTINUE GO TO 500 C C ROSENBROCK FUNCTION. C 130 CONTINUE FJAC(1,1) = -C20*X(1) FJAC(1,2) = TEN FJAC(2,1) = -ONE FJAC(2,2) = ZERO GO TO 500 C C HELICAL VALLEY FUNCTION. C 140 CONTINUE TPI = EIGHT*DATAN(ONE) TEMP = X(1)**2 + X(2)**2 TMP1 = TPI*TEMP TMP2 = DSQRT(TEMP) FJAC(1,1) = C100*X(2)/TMP1 FJAC(1,2) = -C100*X(1)/TMP1 FJAC(1,3) = TEN FJAC(2,1) = TEN*X(1)/TMP2 FJAC(2,2) = TEN*X(2)/TMP2 FJAC(2,3) = ZERO FJAC(3,1) = ZERO FJAC(3,2) = ZERO FJAC(3,3) = ONE GO TO 500 C C POWELL SINGULAR FUNCTION. C 150 CONTINUE DO 170 J = 1, 4 DO 160 I = 1, 4 FJAC(I,J) = ZERO 160 CONTINUE 170 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = TEN FJAC(2,3) = DSQRT(FIVE) FJAC(2,4) = -FJAC(2,3) FJAC(3,2) = TWO*(X(2) - TWO*X(3)) FJAC(3,3) = -TWO*FJAC(3,2) FJAC(4,1) = TWO*DSQRT(TEN)*(X(1) - X(4)) FJAC(4,4) = -FJAC(4,1) GO TO 500 C C FREUDENSTEIN AND ROTH FUNCTION. C 180 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = X(2)*(TEN - THREE*X(2)) - TWO FJAC(2,1) = ONE FJAC(2,2) = X(2)*(TWO + THREE*X(2)) - C14 GO TO 500 C C BARD FUNCTION. C 190 CONTINUE DO 200 I = 1, 15 TMP1 = DFLOAT(I) TMP2 = DFLOAT(16-I) TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJAC(I,1) = -ONE FJAC(I,2) = TMP1*TMP2/TMP4 FJAC(I,3) = TMP1*TMP3/TMP4 200 CONTINUE GO TO 500 C C KOWALIK AND OSBORNE FUNCTION. C 210 CONTINUE DO 220 I = 1, 11 TMP1 = V(I)*(V(I) + X(2)) TMP2 = V(I)*(V(I) + X(3)) + X(4) FJAC(I,1) = -TMP1/TMP2 FJAC(I,2) = -V(I)*X(1)/TMP2 FJAC(I,3) = FJAC(I,1)*FJAC(I,2) FJAC(I,4) = FJAC(I,3)/V(I) 220 CONTINUE GO TO 500 C C MEYER FUNCTION. C 230 CONTINUE DO 240 I = 1, 16 TEMP = FIVE*DFLOAT(I) + C45 + X(3) TMP1 = X(2)/TEMP TMP2 = DEXP(TMP1) FJAC(I,1) = TMP2 FJAC(I,2) = X(1)*TMP2/TEMP FJAC(I,3) = -TMP1*FJAC(I,2) 240 CONTINUE GO TO 500 C C WATSON FUNCTION. C 250 CONTINUE DO 280 I = 1, 29 DIV = DFLOAT(I)/C29 S2 = ZERO DX = ONE DO 260 J = 1, N S2 = S2 + DX*X(J) DX = DIV*DX 260 CONTINUE TEMP = TWO*DIV*S2 DX = ONE/DIV DO 270 J = 1, N FJAC(I,J) = DX*(DFLOAT(J-1) - TEMP) DX = DIV*DX 270 CONTINUE 280 CONTINUE DO 300 J = 1, N DO 290 I = 30, 31 FJAC(I,J) = ZERO 290 CONTINUE 300 CONTINUE FJAC(30,1) = ONE FJAC(31,1) = -TWO*X(1) FJAC(31,2) = ONE GO TO 500 C C BOX 3-DIMENSIONAL FUNCTION. C 310 CONTINUE DO 320 I = 1, M TEMP = DFLOAT(I) TMP1 = TEMP/TEN FJAC(I,1) = -TMP1*DEXP(-TMP1*X(1)) FJAC(I,2) = TMP1*DEXP(-TMP1*X(2)) FJAC(I,3) = DEXP(-TEMP) - DEXP(-TMP1) 320 CONTINUE GO TO 500 C C JENNRICH AND SAMPSON FUNCTION. C 330 CONTINUE DO 340 I = 1, M TEMP = DFLOAT(I) FJAC(I,1) = -TEMP*DEXP(TEMP*X(1)) FJAC(I,2) = -TEMP*DEXP(TEMP*X(2)) 340 CONTINUE GO TO 500 C C BROWN AND DENNIS FUNCTION. C 350 CONTINUE DO 360 I = 1, M TEMP = DFLOAT(I)/FIVE TI = DSIN(TEMP) TMP1 = X(1) + TEMP*X(2) - DEXP(TEMP) TMP2 = X(3) + TI*X(4) - DCOS(TEMP) FJAC(I,1) = TWO*TMP1 FJAC(I,2) = TEMP*FJAC(I,1) FJAC(I,3) = TWO*TMP2 FJAC(I,4) = TI*FJAC(I,3) 360 CONTINUE GO TO 500 C C CHEBYQUAD FUNCTION. C 370 CONTINUE DX = ONE/DFLOAT(N) DO 390 J = 1, N TMP1 = ONE TMP2 = TWO*X(J) - ONE TEMP = TWO*TMP2 TMP3 = ZERO TMP4 = TWO DO 380 I = 1, M FJAC(I,J) = DX*TMP4 TI = FOUR*TMP2 + TEMP*TMP4 - TMP3 TMP3 = TMP4 TMP4 = TI TI = TEMP*TMP2 - TMP1 TMP1 = TMP2 TMP2 = TI 380 CONTINUE 390 CONTINUE GO TO 500 C C BROWN ALMOST-LINEAR FUNCTION. C 400 CONTINUE PROD = ONE DO 420 J = 1, N PROD = X(J)*PROD DO 410 I = 1, N FJAC(I,J) = ONE 410 CONTINUE FJAC(J,J) = TWO 420 CONTINUE DO 450 J = 1, N TEMP = X(J) IF (TEMP .NE. ZERO) GO TO 440 TEMP = ONE PROD = ONE DO 430 K = 1, N IF (K .NE. J) PROD = X(K)*PROD 430 CONTINUE 440 CONTINUE FJAC(N,J) = PROD/TEMP 450 CONTINUE GO TO 500 C C OSBORNE 1 FUNCTION. C 460 CONTINUE DO 470 I = 1, 33 TEMP = TEN*DFLOAT(I-1) TMP1 = DEXP(-X(4)*TEMP) TMP2 = DEXP(-X(5)*TEMP) FJAC(I,1) = -ONE FJAC(I,2) = -TMP1 FJAC(I,3) = -TMP2 FJAC(I,4) = TEMP*X(2)*TMP1 FJAC(I,5) = TEMP*X(3)*TMP2 470 CONTINUE GO TO 500 C C OSBORNE 2 FUNCTION. C 480 CONTINUE DO 490 I = 1, 65 TEMP = DFLOAT(I-1)/TEN TMP1 = DEXP(-X(5)*TEMP) TMP2 = DEXP(-X(6)*(TEMP-X(9))**2) TMP3 = DEXP(-X(7)*(TEMP-X(10))**2) TMP4 = DEXP(-X(8)*(TEMP-X(11))**2) FJAC(I,1) = -TMP1 FJAC(I,2) = -TMP2 FJAC(I,3) = -TMP3 FJAC(I,4) = -TMP4 FJAC(I,5) = TEMP*X(1)*TMP1 FJAC(I,6) = X(2)*(TEMP - X(9))**2*TMP2 FJAC(I,7) = X(3)*(TEMP - X(10))**2*TMP3 FJAC(I,8) = X(4)*(TEMP - X(11))**2*TMP4 FJAC(I,9) = -TWO*X(2)*X(6)*(TEMP - X(9))*TMP2 FJAC(I,10) = -TWO*X(3)*X(7)*(TEMP - X(10))*TMP3 FJAC(I,11) = -TWO*X(4)*X(8)*(TEMP - X(11))*TMP4 490 CONTINUE 500 CONTINUE RETURN C C LAST CARD OF SUBROUTINE SSQJAC. C END SUBROUTINE INITPT(N,X,NPROB,FACTOR) INTEGER N,NPROB DOUBLE PRECISION FACTOR DOUBLE PRECISION X(N) C ********** C C SUBROUTINE INITPT C C THIS SUBROUTINE SPECIFIES THE STANDARD STARTING POINTS FOR THE C FUNCTIONS DEFINED BY SUBROUTINE SSQFCN. THE SUBROUTINE RETURNS C IN X A MULTIPLE (FACTOR) OF THE STANDARD STARTING POINT. FOR C THE 11TH FUNCTION THE STANDARD STARTING POINT IS ZERO, SO IN C THIS CASE, IF FACTOR IS NOT UNITY, THEN THE SUBROUTINE RETURNS C THE VECTOR X(J) = FACTOR, J=1,...,N. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE INITPT(N,X,NPROB,FACTOR) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE STANDARD C STARTING POINT FOR PROBLEM NPROB MULTIPLIED BY FACTOR. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C FACTOR IS AN INPUT VARIABLE WHICH SPECIFIES THE MULTIPLE OF C THE STANDARD STARTING POINT. IF FACTOR IS UNITY, NO C MULTIPLICATION IS PERFORMED. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IVAR,J DOUBLE PRECISION C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14, * C15,C16,C17,FIVE,H,HALF,ONE,SEVEN,TEN,THREE, * TWENTY,TWNTF,TWO,ZERO DOUBLE PRECISION DFLOAT DATA ZERO,HALF,ONE,TWO,THREE,FIVE,SEVEN,TEN,TWENTY,TWNTF * /0.0D0,5.0D-1,1.0D0,2.0D0,3.0D0,5.0D0,7.0D0,1.0D1,2.0D1, * 2.5D1/ DATA C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 * /1.2D0,2.5D-1,3.9D-1,4.15D-1,2.0D-2,4.0D3,2.5D2,3.0D-1, * 4.0D-1,1.5D0,1.0D-2,1.3D0,6.5D-1,7.0D-1,6.0D-1,4.5D0, * 5.5D0/ DFLOAT(IVAR) = IVAR C C SELECTION OF INITIAL POINT. C GO TO (10,10,10,30,40,50,60,70,80,90,100,120,130,140,150,170, * 190,200), NPROB C C LINEAR FUNCTION - FULL RANK OR RANK 1. C 10 CONTINUE DO 20 J = 1, N X(J) = ONE 20 CONTINUE GO TO 210 C C ROSENBROCK FUNCTION. C 30 CONTINUE X(1) = -C1 X(2) = ONE GO TO 210 C C HELICAL VALLEY FUNCTION. C 40 CONTINUE X(1) = -ONE X(2) = ZERO X(3) = ZERO GO TO 210 C C POWELL SINGULAR FUNCTION. C 50 CONTINUE X(1) = THREE X(2) = -ONE X(3) = ZERO X(4) = ONE GO TO 210 C C FREUDENSTEIN AND ROTH FUNCTION. C 60 CONTINUE X(1) = HALF X(2) = -TWO GO TO 210 C C BARD FUNCTION. C 70 CONTINUE X(1) = ONE X(2) = ONE X(3) = ONE GO TO 210 C C KOWALIK AND OSBORNE FUNCTION. C 80 CONTINUE X(1) = C2 X(2) = C3 X(3) = C4 X(4) = C3 GO TO 210 C C MEYER FUNCTION. C 90 CONTINUE X(1) = C5 X(2) = C6 X(3) = C7 GO TO 210 C C WATSON FUNCTION. C 100 CONTINUE DO 110 J = 1, N X(J) = ZERO 110 CONTINUE GO TO 210 C C BOX 3-DIMENSIONAL FUNCTION. C 120 CONTINUE X(1) = ZERO X(2) = TEN X(3) = TWENTY GO TO 210 C C JENNRICH AND SAMPSON FUNCTION. C 130 CONTINUE X(1) = C8 X(2) = C9 GO TO 210 C C BROWN AND DENNIS FUNCTION. C 140 CONTINUE X(1) = TWNTF X(2) = FIVE X(3) = -FIVE X(4) = -ONE GO TO 210 C C CHEBYQUAD FUNCTION. C 150 CONTINUE H = ONE/DFLOAT(N+1) DO 160 J = 1, N X(J) = DFLOAT(J)*H 160 CONTINUE GO TO 210 C C BROWN ALMOST-LINEAR FUNCTION. C 170 CONTINUE DO 180 J = 1, N X(J) = HALF 180 CONTINUE GO TO 210 C C OSBORNE 1 FUNCTION. C 190 CONTINUE X(1) = HALF X(2) = C10 X(3) = -ONE X(4) = C11 X(5) = C5 GO TO 210 C C OSBORNE 2 FUNCTION. C 200 CONTINUE X(1) = C12 X(2) = C13 X(3) = C13 X(4) = C14 X(5) = C15 X(6) = THREE X(7) = FIVE X(8) = SEVEN X(9) = TWO X(10) = C16 X(11) = C17 210 CONTINUE C C COMPUTE MULTIPLE OF INITIAL POINT. C IF (FACTOR .EQ. ONE) GO TO 260 IF (NPROB .EQ. 11) GO TO 230 DO 220 J = 1, N X(J) = FACTOR*X(J) 220 CONTINUE GO TO 250 230 CONTINUE DO 240 J = 1, N X(J) = FACTOR 240 CONTINUE 250 CONTINUE 260 CONTINUE RETURN C C LAST CARD OF SUBROUTINE INITPT. C END SUBROUTINE SSQFCN(M,N,X,FVEC,NPROB) INTEGER M,N,NPROB DOUBLE PRECISION X(N),FVEC(M) C ********** C C SUBROUTINE SSQFCN C C THIS SUBROUTINE DEFINES THE FUNCTIONS OF EIGHTEEN NONLINEAR C LEAST SQUARES PROBLEMS. THE ALLOWABLE VALUES OF (M,N) FOR C FUNCTIONS 1,2 AND 3 ARE VARIABLE BUT WITH M .GE. N. C FOR FUNCTIONS 4,5,6,7,8,9 AND 10 THE VALUES OF (M,N) ARE C (2,2),(3,3),(4,4),(2,2),(15,3),(11,4) AND (16,3), RESPECTIVELY. C FUNCTION 11 (WATSON) HAS M = 31 WITH N USUALLY 6 OR 9. C HOWEVER, ANY N, N = 2,...,31, IS PERMITTED. C FUNCTIONS 12,13 AND 14 HAVE N = 3,2 AND 4, RESPECTIVELY, BUT C ALLOW ANY M .GE. N, WITH THE USUAL CHOICES BEING 10,10 AND 20. C FUNCTION 15 (CHEBYQUAD) ALLOWS M AND N VARIABLE WITH M .GE. N. C FUNCTION 16 (BROWN) ALLOWS N VARIABLE WITH M = N. C FOR FUNCTIONS 17 AND 18, THE VALUES OF (M,N) ARE C (33,5) AND (65,11), RESPECTIVELY. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE SSQFCN(M,N,X,FVEC,NPROB) C C WHERE C C M AND N ARE POSITIVE INTEGER INPUT VARIABLES. N MUST NOT C EXCEED M. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS THE NPROB C FUNCTION EVALUATED AT X. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DATAN,DCOS,DEXP,DSIN,DSQRT,DSIGN C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IEV,IVAR,J,NM1 DOUBLE PRECISION C13,C14,C29,C45,DIV,DX,EIGHT,FIVE,ONE,PROD,SUM, * S1,S2,TEMP,TEN,TI,TMP1,TMP2,TMP3,TMP4,TPI,TWO, * ZERO,ZP25,ZP5 DOUBLE PRECISION V(11),Y1(15),Y2(11),Y3(16),Y4(33),Y5(65) DOUBLE PRECISION DFLOAT DATA ZERO,ZP25,ZP5,ONE,TWO,FIVE,EIGHT,TEN,C13,C14,C29,C45 * /0.0D0,2.5D-1,5.0D-1,1.0D0,2.0D0,5.0D0,8.0D0,1.0D1,1.3D1, * 1.4D1,2.9D1,4.5D1/ DATA V(1),V(2),V(3),V(4),V(5),V(6),V(7),V(8),V(9),V(10),V(11) * /4.0D0,2.0D0,1.0D0,5.0D-1,2.5D-1,1.67D-1,1.25D-1,1.0D-1, * 8.33D-2,7.14D-2,6.25D-2/ DATA Y1(1),Y1(2),Y1(3),Y1(4),Y1(5),Y1(6),Y1(7),Y1(8),Y1(9), * Y1(10),Y1(11),Y1(12),Y1(13),Y1(14),Y1(15) * /1.4D-1,1.8D-1,2.2D-1,2.5D-1,2.9D-1,3.2D-1,3.5D-1,3.9D-1, * 3.7D-1,5.8D-1,7.3D-1,9.6D-1,1.34D0,2.1D0,4.39D0/ DATA Y2(1),Y2(2),Y2(3),Y2(4),Y2(5),Y2(6),Y2(7),Y2(8),Y2(9), * Y2(10),Y2(11) * /1.957D-1,1.947D-1,1.735D-1,1.6D-1,8.44D-2,6.27D-2,4.56D-2, * 3.42D-2,3.23D-2,2.35D-2,2.46D-2/ DATA Y3(1),Y3(2),Y3(3),Y3(4),Y3(5),Y3(6),Y3(7),Y3(8),Y3(9), * Y3(10),Y3(11),Y3(12),Y3(13),Y3(14),Y3(15),Y3(16) * /3.478D4,2.861D4,2.365D4,1.963D4,1.637D4,1.372D4,1.154D4, * 9.744D3,8.261D3,7.03D3,6.005D3,5.147D3,4.427D3,3.82D3, * 3.307D3,2.872D3/ DATA Y4(1),Y4(2),Y4(3),Y4(4),Y4(5),Y4(6),Y4(7),Y4(8),Y4(9), * Y4(10),Y4(11),Y4(12),Y4(13),Y4(14),Y4(15),Y4(16),Y4(17), * Y4(18),Y4(19),Y4(20),Y4(21),Y4(22),Y4(23),Y4(24),Y4(25), * Y4(26),Y4(27),Y4(28),Y4(29),Y4(30),Y4(31),Y4(32),Y4(33) * /8.44D-1,9.08D-1,9.32D-1,9.36D-1,9.25D-1,9.08D-1,8.81D-1, * 8.5D-1,8.18D-1,7.84D-1,7.51D-1,7.18D-1,6.85D-1,6.58D-1, * 6.28D-1,6.03D-1,5.8D-1,5.58D-1,5.38D-1,5.22D-1,5.06D-1, * 4.9D-1,4.78D-1,4.67D-1,4.57D-1,4.48D-1,4.38D-1,4.31D-1, * 4.24D-1,4.2D-1,4.14D-1,4.11D-1,4.06D-1/ DATA Y5(1),Y5(2),Y5(3),Y5(4),Y5(5),Y5(6),Y5(7),Y5(8),Y5(9), * Y5(10),Y5(11),Y5(12),Y5(13),Y5(14),Y5(15),Y5(16),Y5(17), * Y5(18),Y5(19),Y5(20),Y5(21),Y5(22),Y5(23),Y5(24),Y5(25), * Y5(26),Y5(27),Y5(28),Y5(29),Y5(30),Y5(31),Y5(32),Y5(33), * Y5(34),Y5(35),Y5(36),Y5(37),Y5(38),Y5(39),Y5(40),Y5(41), * Y5(42),Y5(43),Y5(44),Y5(45),Y5(46),Y5(47),Y5(48),Y5(49), * Y5(50),Y5(51),Y5(52),Y5(53),Y5(54),Y5(55),Y5(56),Y5(57), * Y5(58),Y5(59),Y5(60),Y5(61),Y5(62),Y5(63),Y5(64),Y5(65) * /1.366D0,1.191D0,1.112D0,1.013D0,9.91D-1,8.85D-1,8.31D-1, * 8.47D-1,7.86D-1,7.25D-1,7.46D-1,6.79D-1,6.08D-1,6.55D-1, * 6.16D-1,6.06D-1,6.02D-1,6.26D-1,6.51D-1,7.24D-1,6.49D-1, * 6.49D-1,6.94D-1,6.44D-1,6.24D-1,6.61D-1,6.12D-1,5.58D-1, * 5.33D-1,4.95D-1,5.0D-1,4.23D-1,3.95D-1,3.75D-1,3.72D-1, * 3.91D-1,3.96D-1,4.05D-1,4.28D-1,4.29D-1,5.23D-1,5.62D-1, * 6.07D-1,6.53D-1,6.72D-1,7.08D-1,6.33D-1,6.68D-1,6.45D-1, * 6.32D-1,5.91D-1,5.59D-1,5.97D-1,6.25D-1,7.39D-1,7.1D-1, * 7.29D-1,7.2D-1,6.36D-1,5.81D-1,4.28D-1,2.92D-1,1.62D-1, * 9.8D-2,5.4D-2/ DFLOAT(IVAR) = IVAR C C FUNCTION ROUTINE SELECTOR. C GO TO (10,40,70,110,120,130,140,150,170,190,210,250,270,290,310, * 360,390,410), NPROB C C LINEAR FUNCTION - FULL RANK. C 10 CONTINUE SUM = ZERO DO 20 J = 1, N SUM = SUM + X(J) 20 CONTINUE TEMP = TWO*SUM/DFLOAT(M) + ONE DO 30 I = 1, M FVEC(I) = -TEMP IF (I .LE. N) FVEC(I) = FVEC(I) + X(I) 30 CONTINUE GO TO 430 C C LINEAR FUNCTION - RANK 1. C 40 CONTINUE SUM = ZERO DO 50 J = 1, N SUM = SUM + DFLOAT(J)*X(J) 50 CONTINUE DO 60 I = 1, M FVEC(I) = DFLOAT(I)*SUM - ONE 60 CONTINUE GO TO 430 C C LINEAR FUNCTION - RANK 1 WITH ZERO COLUMNS AND ROWS. C 70 CONTINUE SUM = ZERO NM1 = N - 1 IF (NM1 .LT. 2) GO TO 90 DO 80 J = 2, NM1 SUM = SUM + DFLOAT(J)*X(J) 80 CONTINUE 90 CONTINUE DO 100 I = 1, M FVEC(I) = DFLOAT(I-1)*SUM - ONE 100 CONTINUE FVEC(M) = -ONE GO TO 430 C C ROSENBROCK FUNCTION. C 110 CONTINUE FVEC(1) = TEN*(X(2) - X(1)**2) FVEC(2) = ONE - X(1) GO TO 430 C C HELICAL VALLEY FUNCTION. C 120 CONTINUE TPI = EIGHT*DATAN(ONE) TMP1 = DSIGN(ZP25,X(2)) IF (X(1) .GT. ZERO) TMP1 = DATAN(X(2)/X(1))/TPI IF (X(1) .LT. ZERO) TMP1 = DATAN(X(2)/X(1))/TPI + ZP5 TMP2 = DSQRT(X(1)**2+X(2)**2) FVEC(1) = TEN*(X(3) - TEN*TMP1) FVEC(2) = TEN*(TMP2 - ONE) FVEC(3) = X(3) GO TO 430 C C POWELL SINGULAR FUNCTION. C 130 CONTINUE FVEC(1) = X(1) + TEN*X(2) FVEC(2) = DSQRT(FIVE)*(X(3) - X(4)) FVEC(3) = (X(2) - TWO*X(3))**2 FVEC(4) = DSQRT(TEN)*(X(1) - X(4))**2 GO TO 430 C C FREUDENSTEIN AND ROTH FUNCTION. C 140 CONTINUE FVEC(1) = -C13 + X(1) + ((FIVE - X(2))*X(2) - TWO)*X(2) FVEC(2) = -C29 + X(1) + ((ONE + X(2))*X(2) - C14)*X(2) GO TO 430 C C BARD FUNCTION. C 150 CONTINUE DO 160 I = 1, 15 TMP1 = DFLOAT(I) TMP2 = DFLOAT(16-I) TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y1(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 160 CONTINUE GO TO 430 C C KOWALIK AND OSBORNE FUNCTION. C 170 CONTINUE DO 180 I = 1, 11 TMP1 = V(I)*(V(I) + X(2)) TMP2 = V(I)*(V(I) + X(3)) + X(4) FVEC(I) = Y2(I) - X(1)*TMP1/TMP2 180 CONTINUE GO TO 430 C C MEYER FUNCTION. C 190 CONTINUE DO 200 I = 1, 16 TEMP = FIVE*DFLOAT(I) + C45 + X(3) TMP1 = X(2)/TEMP TMP2 = DEXP(TMP1) FVEC(I) = X(1)*TMP2 - Y3(I) 200 CONTINUE GO TO 430 C C WATSON FUNCTION. C 210 CONTINUE DO 240 I = 1, 29 DIV = DFLOAT(I)/C29 S1 = ZERO DX = ONE DO 220 J = 2, N S1 = S1 + DFLOAT(J-1)*DX*X(J) DX = DIV*DX 220 CONTINUE S2 = ZERO DX = ONE DO 230 J = 1, N S2 = S2 + DX*X(J) DX = DIV*DX 230 CONTINUE FVEC(I) = S1 - S2**2 - ONE 240 CONTINUE FVEC(30) = X(1) FVEC(31) = X(2) - X(1)**2 - ONE GO TO 430 C C BOX 3-DIMENSIONAL FUNCTION. C 250 CONTINUE DO 260 I = 1, M TEMP = DFLOAT(I) TMP1 = TEMP/TEN FVEC(I) = DEXP(-TMP1*X(1)) - DEXP(-TMP1*X(2)) * + (DEXP(-TEMP) - DEXP(-TMP1))*X(3) 260 CONTINUE GO TO 430 C C JENNRICH AND SAMPSON FUNCTION. C 270 CONTINUE DO 280 I = 1, M TEMP = DFLOAT(I) FVEC(I) = TWO + TWO*TEMP - DEXP(TEMP*X(1)) - DEXP(TEMP*X(2)) 280 CONTINUE GO TO 430 C C BROWN AND DENNIS FUNCTION. C 290 CONTINUE DO 300 I = 1, M TEMP = DFLOAT(I)/FIVE TMP1 = X(1) + TEMP*X(2) - DEXP(TEMP) TMP2 = X(3) + DSIN(TEMP)*X(4) - DCOS(TEMP) FVEC(I) = TMP1**2 + TMP2**2 300 CONTINUE GO TO 430 C C CHEBYQUAD FUNCTION. C 310 CONTINUE DO 320 I = 1, M FVEC(I) = ZERO 320 CONTINUE DO 340 J = 1, N TMP1 = ONE TMP2 = TWO*X(J) - ONE TEMP = TWO*TMP2 DO 330 I = 1, M FVEC(I) = FVEC(I) + TMP2 TI = TEMP*TMP2 - TMP1 TMP1 = TMP2 TMP2 = TI 330 CONTINUE 340 CONTINUE DX = ONE/DFLOAT(N) IEV = -1 DO 350 I = 1, M FVEC(I) = DX*FVEC(I) IF (IEV .GT. 0) FVEC(I) = FVEC(I) + ONE/(DFLOAT(I)**2 - ONE) IEV = -IEV 350 CONTINUE GO TO 430 C C BROWN ALMOST-LINEAR FUNCTION. C 360 CONTINUE SUM = -DFLOAT(N+1) PROD = ONE DO 370 J = 1, N SUM = SUM + X(J) PROD = X(J)*PROD 370 CONTINUE DO 380 I = 1, N FVEC(I) = X(I) + SUM 380 CONTINUE FVEC(N) = PROD - ONE GO TO 430 C C OSBORNE 1 FUNCTION. C 390 CONTINUE DO 400 I = 1, 33 TEMP = TEN*DFLOAT(I-1) TMP1 = DEXP(-X(4)*TEMP) TMP2 = DEXP(-X(5)*TEMP) FVEC(I) = Y4(I) - (X(1) + X(2)*TMP1 + X(3)*TMP2) 400 CONTINUE GO TO 430 C C OSBORNE 2 FUNCTION. C 410 CONTINUE DO 420 I = 1, 65 TEMP = DFLOAT(I-1)/TEN TMP1 = DEXP(-X(5)*TEMP) TMP2 = DEXP(-X(6)*(TEMP-X(9))**2) TMP3 = DEXP(-X(7)*(TEMP-X(10))**2) TMP4 = DEXP(-X(8)*(TEMP-X(11))**2) FVEC(I) = Y5(I) * - (X(1)*TMP1 + X(2)*TMP2 + X(3)*TMP3 + X(4)*TMP4) 420 CONTINUE 430 CONTINUE RETURN C C LAST CARD OF SUBROUTINE SSQFCN. C END PyBDSF-1.10.1/src/minpack/ex/file18000066400000000000000000000675261420247104600165010ustar00rootroot00000000000000C ********** C C THIS PROGRAM TESTS CODES FOR THE LEAST-SQUARES SOLUTION OF C M NONLINEAR EQUATIONS IN N VARIABLES. IT CONSISTS OF A DRIVER C AND AN INTERFACE SUBROUTINE FCN. THE DRIVER READS IN DATA, C CALLS THE NONLINEAR LEAST-SQUARES SOLVER, AND FINALLY PRINTS C OUT INFORMATION ON THE PERFORMANCE OF THE SOLVER. THIS IS C ONLY A SAMPLE DRIVER, MANY OTHER DRIVERS ARE POSSIBLE. THE C INTERFACE SUBROUTINE FCN IS NECESSARY TO TAKE INTO ACCOUNT THE C FORMS OF CALLING SEQUENCES USED BY THE FUNCTION AND JACOBIAN C SUBROUTINES IN THE VARIOUS NONLINEAR LEAST-SQUARES SOLVERS. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DPMPAR,ENORM,INITPT,LMSTR1,SSQFCN C C FORTRAN-SUPPLIED ... DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IC,INFO,K,LDFJAC,LWA,M,N,NFEV,NJEV,NPROB,NREAD,NTRIES, * NWRITE INTEGER IWA(40),MA(60),NA(60),NF(60),NJ(60),NP(60),NX(60) DOUBLE PRECISION FACTOR,FNORM1,FNORM2,ONE,TEN,TOL DOUBLE PRECISION FJAC(40,40),FNM(60),FVEC(65),WA(265),X(40) DOUBLE PRECISION DPMPAR,ENORM EXTERNAL FCN COMMON /REFNUM/ NPROB,NFEV,NJEV C C LOGICAL INPUT UNIT IS ASSUMED TO BE NUMBER 5. C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NREAD,NWRITE /5,6/ C DATA ONE,TEN /1.0D0,1.0D1/ TOL = DSQRT(DPMPAR(1)) LDFJAC = 40 LWA = 265 IC = 0 10 CONTINUE READ (NREAD,50) NPROB,N,M,NTRIES IF (NPROB .LE. 0) GO TO 30 FACTOR = ONE DO 20 K = 1, NTRIES IC = IC + 1 CALL INITPT(N,X,NPROB,FACTOR) CALL SSQFCN(M,N,X,FVEC,NPROB) FNORM1 = ENORM(M,FVEC) WRITE (NWRITE,60) NPROB,N,M NFEV = 0 NJEV = 0 CALL LMSTR1(FCN,M,N,X,FVEC,FJAC,LDFJAC,TOL,INFO,IWA,WA, * LWA) CALL SSQFCN(M,N,X,FVEC,NPROB) FNORM2 = ENORM(M,FVEC) NP(IC) = NPROB NA(IC) = N MA(IC) = M NF(IC) = NFEV NJ(IC) = NJEV NX(IC) = INFO FNM(IC) = FNORM2 WRITE (NWRITE,70) * FNORM1,FNORM2,NFEV,NJEV,INFO,(X(I), I = 1, N) FACTOR = TEN*FACTOR 20 CONTINUE GO TO 10 30 CONTINUE WRITE (NWRITE,80) IC WRITE (NWRITE,90) DO 40 I = 1, IC WRITE (NWRITE,100) NP(I),NA(I),MA(I),NF(I),NJ(I),NX(I),FNM(I) 40 CONTINUE STOP 50 FORMAT (4I5) 60 FORMAT ( //// 5X, 8H PROBLEM, I5, 5X, 11H DIMENSIONS, 2I5, 5X // * ) 70 FORMAT (5X, 33H INITIAL L2 NORM OF THE RESIDUALS, D15.7 // 5X, * 33H FINAL L2 NORM OF THE RESIDUALS , D15.7 // 5X, * 33H NUMBER OF FUNCTION EVALUATIONS , I10 // 5X, * 33H NUMBER OF JACOBIAN EVALUATIONS , I10 // 5X, * 15H EXIT PARAMETER, 18X, I10 // 5X, * 27H FINAL APPROXIMATE SOLUTION // (5X, 5D15.7)) 80 FORMAT (12H1SUMMARY OF , I3, 16H CALLS TO LMSTR1 /) 90 FORMAT (49H NPROB N M NFEV NJEV INFO FINAL L2 NORM /) 100 FORMAT (3I5, 3I6, 1X, D15.7) C C LAST CARD OF DRIVER. C END SUBROUTINE FCN(M,N,X,FVEC,FJROW,IFLAG) INTEGER M,N,IFLAG DOUBLE PRECISION X(N),FVEC(M),FJROW(N) C ********** C C THE CALLING SEQUENCE OF FCN SHOULD BE IDENTICAL TO THE C CALLING SEQUENCE OF THE FUNCTION SUBROUTINE IN THE NONLINEAR C LEAST SQUARES SOLVER. IF IFLAG = 1, FCN SHOULD ONLY CALL THE C TESTING FUNCTION SUBROUTINE SSQFCN. IF IFLAG = I, I .GE. 2, C FCN SHOULD ONLY CALL SUBROUTINE SSQJAC TO CALCULATE THE C (I-1)-ST ROW OF THE JACOBIAN. (THE SSQJAC SUBROUTINE PROVIDED C HERE FOR TESTING PURPOSES CALCULATES THE ENTIRE JACOBIAN C MATRIX AND IS THEREFORE CALLED ONLY WHEN IFLAG = 2.) EACH C CALL TO SSQFCN OR SSQJAC SHOULD SPECIFY THE APPROPRIATE C VALUE OF PROBLEM NUMBER (NPROB). C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... SSQFCN,SSQJAC C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER NPROB,NFEV,NJEV,J DOUBLE PRECISION TEMP(65,40) COMMON /REFNUM/ NPROB,NFEV,NJEV IF (IFLAG .EQ. 1) CALL SSQFCN(M,N,X,FVEC,NPROB) IF (IFLAG .EQ. 2) CALL SSQJAC(M,N,X,TEMP,65,NPROB) IF (IFLAG .EQ. 1) NFEV = NFEV + 1 IF (IFLAG .EQ. 2) NJEV = NJEV + 1 IF (IFLAG .EQ. 1) GO TO 120 DO 110 J = 1, N FJROW(J) = TEMP(IFLAG-1,J) 110 CONTINUE 120 CONTINUE RETURN C C LAST CARD OF INTERFACE SUBROUTINE FCN. C END SUBROUTINE SSQJAC(M,N,X,FJAC,LDFJAC,NPROB) INTEGER M,N,LDFJAC,NPROB DOUBLE PRECISION X(N),FJAC(LDFJAC,N) C ********** C C SUBROUTINE SSQJAC C C THIS SUBROUTINE DEFINES THE JACOBIAN MATRICES OF EIGHTEEN C NONLINEAR LEAST SQUARES PROBLEMS. THE PROBLEM DIMENSIONS ARE C AS DESCRIBED IN THE PROLOGUE COMMENTS OF SSQFCN. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE SSQJAC(M,N,X,FJAC,LDFJAC,NPROB) C C WHERE C C M AND N ARE POSITIVE INTEGER INPUT VARIABLES. N MUST NOT C EXCEED M. C C X IS AN INPUT ARRAY OF LENGTH N. C C FJAC IS AN M BY N OUTPUT ARRAY WHICH CONTAINS THE JACOBIAN C MATRIX OF THE NPROB FUNCTION EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN M C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C NPROB IS A POSITIVE INTEGER VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DATAN,DCOS,DEXP,DSIN,DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IVAR,J,K,MM1,NM1 DOUBLE PRECISION C14,C20,C29,C45,C100,DIV,DX,EIGHT,FIVE,FOUR, * ONE,PROD,S2,TEMP,TEN,THREE,TI,TMP1,TMP2,TMP3, * TMP4,TPI,TWO,ZERO DOUBLE PRECISION V(11) DOUBLE PRECISION DFLOAT DATA ZERO,ONE,TWO,THREE,FOUR,FIVE,EIGHT,TEN,C14,C20,C29,C45,C100 * /0.0D0,1.0D0,2.0D0,3.0D0,4.0D0,5.0D0,8.0D0,1.0D1,1.4D1, * 2.0D1,2.9D1,4.5D1,1.0D2/ DATA V(1),V(2),V(3),V(4),V(5),V(6),V(7),V(8),V(9),V(10),V(11) * /4.0D0,2.0D0,1.0D0,5.0D-1,2.5D-1,1.67D-1,1.25D-1,1.0D-1, * 8.33D-2,7.14D-2,6.25D-2/ DFLOAT(IVAR) = IVAR C C JACOBIAN ROUTINE SELECTOR. C GO TO (10,40,70,130,140,150,180,190,210,230,250,310,330,350,370, * 400,460,480), NPROB C C LINEAR FUNCTION - FULL RANK. C 10 CONTINUE TEMP = TWO/DFLOAT(M) DO 30 J = 1, N DO 20 I = 1, M FJAC(I,J) = -TEMP 20 CONTINUE FJAC(J,J) = FJAC(J,J) + ONE 30 CONTINUE GO TO 500 C C LINEAR FUNCTION - RANK 1. C 40 CONTINUE DO 60 J = 1, N DO 50 I = 1, M FJAC(I,J) = DFLOAT(I)*DFLOAT(J) 50 CONTINUE 60 CONTINUE GO TO 500 C C LINEAR FUNCTION - RANK 1 WITH ZERO COLUMNS AND ROWS. C 70 CONTINUE DO 90 J = 1, N DO 80 I = 1, M FJAC(I,J) = ZERO 80 CONTINUE 90 CONTINUE NM1 = N - 1 MM1 = M - 1 IF (NM1 .LT. 2) GO TO 120 DO 110 J = 2, NM1 DO 100 I = 2, MM1 FJAC(I,J) = DFLOAT(I-1)*DFLOAT(J) 100 CONTINUE 110 CONTINUE 120 CONTINUE GO TO 500 C C ROSENBROCK FUNCTION. C 130 CONTINUE FJAC(1,1) = -C20*X(1) FJAC(1,2) = TEN FJAC(2,1) = -ONE FJAC(2,2) = ZERO GO TO 500 C C HELICAL VALLEY FUNCTION. C 140 CONTINUE TPI = EIGHT*DATAN(ONE) TEMP = X(1)**2 + X(2)**2 TMP1 = TPI*TEMP TMP2 = DSQRT(TEMP) FJAC(1,1) = C100*X(2)/TMP1 FJAC(1,2) = -C100*X(1)/TMP1 FJAC(1,3) = TEN FJAC(2,1) = TEN*X(1)/TMP2 FJAC(2,2) = TEN*X(2)/TMP2 FJAC(2,3) = ZERO FJAC(3,1) = ZERO FJAC(3,2) = ZERO FJAC(3,3) = ONE GO TO 500 C C POWELL SINGULAR FUNCTION. C 150 CONTINUE DO 170 J = 1, 4 DO 160 I = 1, 4 FJAC(I,J) = ZERO 160 CONTINUE 170 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = TEN FJAC(2,3) = DSQRT(FIVE) FJAC(2,4) = -FJAC(2,3) FJAC(3,2) = TWO*(X(2) - TWO*X(3)) FJAC(3,3) = -TWO*FJAC(3,2) FJAC(4,1) = TWO*DSQRT(TEN)*(X(1) - X(4)) FJAC(4,4) = -FJAC(4,1) GO TO 500 C C FREUDENSTEIN AND ROTH FUNCTION. C 180 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = X(2)*(TEN - THREE*X(2)) - TWO FJAC(2,1) = ONE FJAC(2,2) = X(2)*(TWO + THREE*X(2)) - C14 GO TO 500 C C BARD FUNCTION. C 190 CONTINUE DO 200 I = 1, 15 TMP1 = DFLOAT(I) TMP2 = DFLOAT(16-I) TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 TMP4 = (X(2)*TMP2 + X(3)*TMP3)**2 FJAC(I,1) = -ONE FJAC(I,2) = TMP1*TMP2/TMP4 FJAC(I,3) = TMP1*TMP3/TMP4 200 CONTINUE GO TO 500 C C KOWALIK AND OSBORNE FUNCTION. C 210 CONTINUE DO 220 I = 1, 11 TMP1 = V(I)*(V(I) + X(2)) TMP2 = V(I)*(V(I) + X(3)) + X(4) FJAC(I,1) = -TMP1/TMP2 FJAC(I,2) = -V(I)*X(1)/TMP2 FJAC(I,3) = FJAC(I,1)*FJAC(I,2) FJAC(I,4) = FJAC(I,3)/V(I) 220 CONTINUE GO TO 500 C C MEYER FUNCTION. C 230 CONTINUE DO 240 I = 1, 16 TEMP = FIVE*DFLOAT(I) + C45 + X(3) TMP1 = X(2)/TEMP TMP2 = DEXP(TMP1) FJAC(I,1) = TMP2 FJAC(I,2) = X(1)*TMP2/TEMP FJAC(I,3) = -TMP1*FJAC(I,2) 240 CONTINUE GO TO 500 C C WATSON FUNCTION. C 250 CONTINUE DO 280 I = 1, 29 DIV = DFLOAT(I)/C29 S2 = ZERO DX = ONE DO 260 J = 1, N S2 = S2 + DX*X(J) DX = DIV*DX 260 CONTINUE TEMP = TWO*DIV*S2 DX = ONE/DIV DO 270 J = 1, N FJAC(I,J) = DX*(DFLOAT(J-1) - TEMP) DX = DIV*DX 270 CONTINUE 280 CONTINUE DO 300 J = 1, N DO 290 I = 30, 31 FJAC(I,J) = ZERO 290 CONTINUE 300 CONTINUE FJAC(30,1) = ONE FJAC(31,1) = -TWO*X(1) FJAC(31,2) = ONE GO TO 500 C C BOX 3-DIMENSIONAL FUNCTION. C 310 CONTINUE DO 320 I = 1, M TEMP = DFLOAT(I) TMP1 = TEMP/TEN FJAC(I,1) = -TMP1*DEXP(-TMP1*X(1)) FJAC(I,2) = TMP1*DEXP(-TMP1*X(2)) FJAC(I,3) = DEXP(-TEMP) - DEXP(-TMP1) 320 CONTINUE GO TO 500 C C JENNRICH AND SAMPSON FUNCTION. C 330 CONTINUE DO 340 I = 1, M TEMP = DFLOAT(I) FJAC(I,1) = -TEMP*DEXP(TEMP*X(1)) FJAC(I,2) = -TEMP*DEXP(TEMP*X(2)) 340 CONTINUE GO TO 500 C C BROWN AND DENNIS FUNCTION. C 350 CONTINUE DO 360 I = 1, M TEMP = DFLOAT(I)/FIVE TI = DSIN(TEMP) TMP1 = X(1) + TEMP*X(2) - DEXP(TEMP) TMP2 = X(3) + TI*X(4) - DCOS(TEMP) FJAC(I,1) = TWO*TMP1 FJAC(I,2) = TEMP*FJAC(I,1) FJAC(I,3) = TWO*TMP2 FJAC(I,4) = TI*FJAC(I,3) 360 CONTINUE GO TO 500 C C CHEBYQUAD FUNCTION. C 370 CONTINUE DX = ONE/DFLOAT(N) DO 390 J = 1, N TMP1 = ONE TMP2 = TWO*X(J) - ONE TEMP = TWO*TMP2 TMP3 = ZERO TMP4 = TWO DO 380 I = 1, M FJAC(I,J) = DX*TMP4 TI = FOUR*TMP2 + TEMP*TMP4 - TMP3 TMP3 = TMP4 TMP4 = TI TI = TEMP*TMP2 - TMP1 TMP1 = TMP2 TMP2 = TI 380 CONTINUE 390 CONTINUE GO TO 500 C C BROWN ALMOST-LINEAR FUNCTION. C 400 CONTINUE PROD = ONE DO 420 J = 1, N PROD = X(J)*PROD DO 410 I = 1, N FJAC(I,J) = ONE 410 CONTINUE FJAC(J,J) = TWO 420 CONTINUE DO 450 J = 1, N TEMP = X(J) IF (TEMP .NE. ZERO) GO TO 440 TEMP = ONE PROD = ONE DO 430 K = 1, N IF (K .NE. J) PROD = X(K)*PROD 430 CONTINUE 440 CONTINUE FJAC(N,J) = PROD/TEMP 450 CONTINUE GO TO 500 C C OSBORNE 1 FUNCTION. C 460 CONTINUE DO 470 I = 1, 33 TEMP = TEN*DFLOAT(I-1) TMP1 = DEXP(-X(4)*TEMP) TMP2 = DEXP(-X(5)*TEMP) FJAC(I,1) = -ONE FJAC(I,2) = -TMP1 FJAC(I,3) = -TMP2 FJAC(I,4) = TEMP*X(2)*TMP1 FJAC(I,5) = TEMP*X(3)*TMP2 470 CONTINUE GO TO 500 C C OSBORNE 2 FUNCTION. C 480 CONTINUE DO 490 I = 1, 65 TEMP = DFLOAT(I-1)/TEN TMP1 = DEXP(-X(5)*TEMP) TMP2 = DEXP(-X(6)*(TEMP-X(9))**2) TMP3 = DEXP(-X(7)*(TEMP-X(10))**2) TMP4 = DEXP(-X(8)*(TEMP-X(11))**2) FJAC(I,1) = -TMP1 FJAC(I,2) = -TMP2 FJAC(I,3) = -TMP3 FJAC(I,4) = -TMP4 FJAC(I,5) = TEMP*X(1)*TMP1 FJAC(I,6) = X(2)*(TEMP - X(9))**2*TMP2 FJAC(I,7) = X(3)*(TEMP - X(10))**2*TMP3 FJAC(I,8) = X(4)*(TEMP - X(11))**2*TMP4 FJAC(I,9) = -TWO*X(2)*X(6)*(TEMP - X(9))*TMP2 FJAC(I,10) = -TWO*X(3)*X(7)*(TEMP - X(10))*TMP3 FJAC(I,11) = -TWO*X(4)*X(8)*(TEMP - X(11))*TMP4 490 CONTINUE 500 CONTINUE RETURN C C LAST CARD OF SUBROUTINE SSQJAC. C END SUBROUTINE INITPT(N,X,NPROB,FACTOR) INTEGER N,NPROB DOUBLE PRECISION FACTOR DOUBLE PRECISION X(N) C ********** C C SUBROUTINE INITPT C C THIS SUBROUTINE SPECIFIES THE STANDARD STARTING POINTS FOR THE C FUNCTIONS DEFINED BY SUBROUTINE SSQFCN. THE SUBROUTINE RETURNS C IN X A MULTIPLE (FACTOR) OF THE STANDARD STARTING POINT. FOR C THE 11TH FUNCTION THE STANDARD STARTING POINT IS ZERO, SO IN C THIS CASE, IF FACTOR IS NOT UNITY, THEN THE SUBROUTINE RETURNS C THE VECTOR X(J) = FACTOR, J=1,...,N. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE INITPT(N,X,NPROB,FACTOR) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE STANDARD C STARTING POINT FOR PROBLEM NPROB MULTIPLIED BY FACTOR. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C FACTOR IS AN INPUT VARIABLE WHICH SPECIFIES THE MULTIPLE OF C THE STANDARD STARTING POINT. IF FACTOR IS UNITY, NO C MULTIPLICATION IS PERFORMED. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IVAR,J DOUBLE PRECISION C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14, * C15,C16,C17,FIVE,H,HALF,ONE,SEVEN,TEN,THREE, * TWENTY,TWNTF,TWO,ZERO DOUBLE PRECISION DFLOAT DATA ZERO,HALF,ONE,TWO,THREE,FIVE,SEVEN,TEN,TWENTY,TWNTF * /0.0D0,5.0D-1,1.0D0,2.0D0,3.0D0,5.0D0,7.0D0,1.0D1,2.0D1, * 2.5D1/ DATA C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 * /1.2D0,2.5D-1,3.9D-1,4.15D-1,2.0D-2,4.0D3,2.5D2,3.0D-1, * 4.0D-1,1.5D0,1.0D-2,1.3D0,6.5D-1,7.0D-1,6.0D-1,4.5D0, * 5.5D0/ DFLOAT(IVAR) = IVAR C C SELECTION OF INITIAL POINT. C GO TO (10,10,10,30,40,50,60,70,80,90,100,120,130,140,150,170, * 190,200), NPROB C C LINEAR FUNCTION - FULL RANK OR RANK 1. C 10 CONTINUE DO 20 J = 1, N X(J) = ONE 20 CONTINUE GO TO 210 C C ROSENBROCK FUNCTION. C 30 CONTINUE X(1) = -C1 X(2) = ONE GO TO 210 C C HELICAL VALLEY FUNCTION. C 40 CONTINUE X(1) = -ONE X(2) = ZERO X(3) = ZERO GO TO 210 C C POWELL SINGULAR FUNCTION. C 50 CONTINUE X(1) = THREE X(2) = -ONE X(3) = ZERO X(4) = ONE GO TO 210 C C FREUDENSTEIN AND ROTH FUNCTION. C 60 CONTINUE X(1) = HALF X(2) = -TWO GO TO 210 C C BARD FUNCTION. C 70 CONTINUE X(1) = ONE X(2) = ONE X(3) = ONE GO TO 210 C C KOWALIK AND OSBORNE FUNCTION. C 80 CONTINUE X(1) = C2 X(2) = C3 X(3) = C4 X(4) = C3 GO TO 210 C C MEYER FUNCTION. C 90 CONTINUE X(1) = C5 X(2) = C6 X(3) = C7 GO TO 210 C C WATSON FUNCTION. C 100 CONTINUE DO 110 J = 1, N X(J) = ZERO 110 CONTINUE GO TO 210 C C BOX 3-DIMENSIONAL FUNCTION. C 120 CONTINUE X(1) = ZERO X(2) = TEN X(3) = TWENTY GO TO 210 C C JENNRICH AND SAMPSON FUNCTION. C 130 CONTINUE X(1) = C8 X(2) = C9 GO TO 210 C C BROWN AND DENNIS FUNCTION. C 140 CONTINUE X(1) = TWNTF X(2) = FIVE X(3) = -FIVE X(4) = -ONE GO TO 210 C C CHEBYQUAD FUNCTION. C 150 CONTINUE H = ONE/DFLOAT(N+1) DO 160 J = 1, N X(J) = DFLOAT(J)*H 160 CONTINUE GO TO 210 C C BROWN ALMOST-LINEAR FUNCTION. C 170 CONTINUE DO 180 J = 1, N X(J) = HALF 180 CONTINUE GO TO 210 C C OSBORNE 1 FUNCTION. C 190 CONTINUE X(1) = HALF X(2) = C10 X(3) = -ONE X(4) = C11 X(5) = C5 GO TO 210 C C OSBORNE 2 FUNCTION. C 200 CONTINUE X(1) = C12 X(2) = C13 X(3) = C13 X(4) = C14 X(5) = C15 X(6) = THREE X(7) = FIVE X(8) = SEVEN X(9) = TWO X(10) = C16 X(11) = C17 210 CONTINUE C C COMPUTE MULTIPLE OF INITIAL POINT. C IF (FACTOR .EQ. ONE) GO TO 260 IF (NPROB .EQ. 11) GO TO 230 DO 220 J = 1, N X(J) = FACTOR*X(J) 220 CONTINUE GO TO 250 230 CONTINUE DO 240 J = 1, N X(J) = FACTOR 240 CONTINUE 250 CONTINUE 260 CONTINUE RETURN C C LAST CARD OF SUBROUTINE INITPT. C END SUBROUTINE SSQFCN(M,N,X,FVEC,NPROB) INTEGER M,N,NPROB DOUBLE PRECISION X(N),FVEC(M) C ********** C C SUBROUTINE SSQFCN C C THIS SUBROUTINE DEFINES THE FUNCTIONS OF EIGHTEEN NONLINEAR C LEAST SQUARES PROBLEMS. THE ALLOWABLE VALUES OF (M,N) FOR C FUNCTIONS 1,2 AND 3 ARE VARIABLE BUT WITH M .GE. N. C FOR FUNCTIONS 4,5,6,7,8,9 AND 10 THE VALUES OF (M,N) ARE C (2,2),(3,3),(4,4),(2,2),(15,3),(11,4) AND (16,3), RESPECTIVELY. C FUNCTION 11 (WATSON) HAS M = 31 WITH N USUALLY 6 OR 9. C HOWEVER, ANY N, N = 2,...,31, IS PERMITTED. C FUNCTIONS 12,13 AND 14 HAVE N = 3,2 AND 4, RESPECTIVELY, BUT C ALLOW ANY M .GE. N, WITH THE USUAL CHOICES BEING 10,10 AND 20. C FUNCTION 15 (CHEBYQUAD) ALLOWS M AND N VARIABLE WITH M .GE. N. C FUNCTION 16 (BROWN) ALLOWS N VARIABLE WITH M = N. C FOR FUNCTIONS 17 AND 18, THE VALUES OF (M,N) ARE C (33,5) AND (65,11), RESPECTIVELY. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE SSQFCN(M,N,X,FVEC,NPROB) C C WHERE C C M AND N ARE POSITIVE INTEGER INPUT VARIABLES. N MUST NOT C EXCEED M. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS THE NPROB C FUNCTION EVALUATED AT X. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DATAN,DCOS,DEXP,DSIN,DSQRT,DSIGN C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IEV,IVAR,J,NM1 DOUBLE PRECISION C13,C14,C29,C45,DIV,DX,EIGHT,FIVE,ONE,PROD,SUM, * S1,S2,TEMP,TEN,TI,TMP1,TMP2,TMP3,TMP4,TPI,TWO, * ZERO,ZP25,ZP5 DOUBLE PRECISION V(11),Y1(15),Y2(11),Y3(16),Y4(33),Y5(65) DOUBLE PRECISION DFLOAT DATA ZERO,ZP25,ZP5,ONE,TWO,FIVE,EIGHT,TEN,C13,C14,C29,C45 * /0.0D0,2.5D-1,5.0D-1,1.0D0,2.0D0,5.0D0,8.0D0,1.0D1,1.3D1, * 1.4D1,2.9D1,4.5D1/ DATA V(1),V(2),V(3),V(4),V(5),V(6),V(7),V(8),V(9),V(10),V(11) * /4.0D0,2.0D0,1.0D0,5.0D-1,2.5D-1,1.67D-1,1.25D-1,1.0D-1, * 8.33D-2,7.14D-2,6.25D-2/ DATA Y1(1),Y1(2),Y1(3),Y1(4),Y1(5),Y1(6),Y1(7),Y1(8),Y1(9), * Y1(10),Y1(11),Y1(12),Y1(13),Y1(14),Y1(15) * /1.4D-1,1.8D-1,2.2D-1,2.5D-1,2.9D-1,3.2D-1,3.5D-1,3.9D-1, * 3.7D-1,5.8D-1,7.3D-1,9.6D-1,1.34D0,2.1D0,4.39D0/ DATA Y2(1),Y2(2),Y2(3),Y2(4),Y2(5),Y2(6),Y2(7),Y2(8),Y2(9), * Y2(10),Y2(11) * /1.957D-1,1.947D-1,1.735D-1,1.6D-1,8.44D-2,6.27D-2,4.56D-2, * 3.42D-2,3.23D-2,2.35D-2,2.46D-2/ DATA Y3(1),Y3(2),Y3(3),Y3(4),Y3(5),Y3(6),Y3(7),Y3(8),Y3(9), * Y3(10),Y3(11),Y3(12),Y3(13),Y3(14),Y3(15),Y3(16) * /3.478D4,2.861D4,2.365D4,1.963D4,1.637D4,1.372D4,1.154D4, * 9.744D3,8.261D3,7.03D3,6.005D3,5.147D3,4.427D3,3.82D3, * 3.307D3,2.872D3/ DATA Y4(1),Y4(2),Y4(3),Y4(4),Y4(5),Y4(6),Y4(7),Y4(8),Y4(9), * Y4(10),Y4(11),Y4(12),Y4(13),Y4(14),Y4(15),Y4(16),Y4(17), * Y4(18),Y4(19),Y4(20),Y4(21),Y4(22),Y4(23),Y4(24),Y4(25), * Y4(26),Y4(27),Y4(28),Y4(29),Y4(30),Y4(31),Y4(32),Y4(33) * /8.44D-1,9.08D-1,9.32D-1,9.36D-1,9.25D-1,9.08D-1,8.81D-1, * 8.5D-1,8.18D-1,7.84D-1,7.51D-1,7.18D-1,6.85D-1,6.58D-1, * 6.28D-1,6.03D-1,5.8D-1,5.58D-1,5.38D-1,5.22D-1,5.06D-1, * 4.9D-1,4.78D-1,4.67D-1,4.57D-1,4.48D-1,4.38D-1,4.31D-1, * 4.24D-1,4.2D-1,4.14D-1,4.11D-1,4.06D-1/ DATA Y5(1),Y5(2),Y5(3),Y5(4),Y5(5),Y5(6),Y5(7),Y5(8),Y5(9), * Y5(10),Y5(11),Y5(12),Y5(13),Y5(14),Y5(15),Y5(16),Y5(17), * Y5(18),Y5(19),Y5(20),Y5(21),Y5(22),Y5(23),Y5(24),Y5(25), * Y5(26),Y5(27),Y5(28),Y5(29),Y5(30),Y5(31),Y5(32),Y5(33), * Y5(34),Y5(35),Y5(36),Y5(37),Y5(38),Y5(39),Y5(40),Y5(41), * Y5(42),Y5(43),Y5(44),Y5(45),Y5(46),Y5(47),Y5(48),Y5(49), * Y5(50),Y5(51),Y5(52),Y5(53),Y5(54),Y5(55),Y5(56),Y5(57), * Y5(58),Y5(59),Y5(60),Y5(61),Y5(62),Y5(63),Y5(64),Y5(65) * /1.366D0,1.191D0,1.112D0,1.013D0,9.91D-1,8.85D-1,8.31D-1, * 8.47D-1,7.86D-1,7.25D-1,7.46D-1,6.79D-1,6.08D-1,6.55D-1, * 6.16D-1,6.06D-1,6.02D-1,6.26D-1,6.51D-1,7.24D-1,6.49D-1, * 6.49D-1,6.94D-1,6.44D-1,6.24D-1,6.61D-1,6.12D-1,5.58D-1, * 5.33D-1,4.95D-1,5.0D-1,4.23D-1,3.95D-1,3.75D-1,3.72D-1, * 3.91D-1,3.96D-1,4.05D-1,4.28D-1,4.29D-1,5.23D-1,5.62D-1, * 6.07D-1,6.53D-1,6.72D-1,7.08D-1,6.33D-1,6.68D-1,6.45D-1, * 6.32D-1,5.91D-1,5.59D-1,5.97D-1,6.25D-1,7.39D-1,7.1D-1, * 7.29D-1,7.2D-1,6.36D-1,5.81D-1,4.28D-1,2.92D-1,1.62D-1, * 9.8D-2,5.4D-2/ DFLOAT(IVAR) = IVAR C C FUNCTION ROUTINE SELECTOR. C GO TO (10,40,70,110,120,130,140,150,170,190,210,250,270,290,310, * 360,390,410), NPROB C C LINEAR FUNCTION - FULL RANK. C 10 CONTINUE SUM = ZERO DO 20 J = 1, N SUM = SUM + X(J) 20 CONTINUE TEMP = TWO*SUM/DFLOAT(M) + ONE DO 30 I = 1, M FVEC(I) = -TEMP IF (I .LE. N) FVEC(I) = FVEC(I) + X(I) 30 CONTINUE GO TO 430 C C LINEAR FUNCTION - RANK 1. C 40 CONTINUE SUM = ZERO DO 50 J = 1, N SUM = SUM + DFLOAT(J)*X(J) 50 CONTINUE DO 60 I = 1, M FVEC(I) = DFLOAT(I)*SUM - ONE 60 CONTINUE GO TO 430 C C LINEAR FUNCTION - RANK 1 WITH ZERO COLUMNS AND ROWS. C 70 CONTINUE SUM = ZERO NM1 = N - 1 IF (NM1 .LT. 2) GO TO 90 DO 80 J = 2, NM1 SUM = SUM + DFLOAT(J)*X(J) 80 CONTINUE 90 CONTINUE DO 100 I = 1, M FVEC(I) = DFLOAT(I-1)*SUM - ONE 100 CONTINUE FVEC(M) = -ONE GO TO 430 C C ROSENBROCK FUNCTION. C 110 CONTINUE FVEC(1) = TEN*(X(2) - X(1)**2) FVEC(2) = ONE - X(1) GO TO 430 C C HELICAL VALLEY FUNCTION. C 120 CONTINUE TPI = EIGHT*DATAN(ONE) TMP1 = DSIGN(ZP25,X(2)) IF (X(1) .GT. ZERO) TMP1 = DATAN(X(2)/X(1))/TPI IF (X(1) .LT. ZERO) TMP1 = DATAN(X(2)/X(1))/TPI + ZP5 TMP2 = DSQRT(X(1)**2+X(2)**2) FVEC(1) = TEN*(X(3) - TEN*TMP1) FVEC(2) = TEN*(TMP2 - ONE) FVEC(3) = X(3) GO TO 430 C C POWELL SINGULAR FUNCTION. C 130 CONTINUE FVEC(1) = X(1) + TEN*X(2) FVEC(2) = DSQRT(FIVE)*(X(3) - X(4)) FVEC(3) = (X(2) - TWO*X(3))**2 FVEC(4) = DSQRT(TEN)*(X(1) - X(4))**2 GO TO 430 C C FREUDENSTEIN AND ROTH FUNCTION. C 140 CONTINUE FVEC(1) = -C13 + X(1) + ((FIVE - X(2))*X(2) - TWO)*X(2) FVEC(2) = -C29 + X(1) + ((ONE + X(2))*X(2) - C14)*X(2) GO TO 430 C C BARD FUNCTION. C 150 CONTINUE DO 160 I = 1, 15 TMP1 = DFLOAT(I) TMP2 = DFLOAT(16-I) TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y1(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 160 CONTINUE GO TO 430 C C KOWALIK AND OSBORNE FUNCTION. C 170 CONTINUE DO 180 I = 1, 11 TMP1 = V(I)*(V(I) + X(2)) TMP2 = V(I)*(V(I) + X(3)) + X(4) FVEC(I) = Y2(I) - X(1)*TMP1/TMP2 180 CONTINUE GO TO 430 C C MEYER FUNCTION. C 190 CONTINUE DO 200 I = 1, 16 TEMP = FIVE*DFLOAT(I) + C45 + X(3) TMP1 = X(2)/TEMP TMP2 = DEXP(TMP1) FVEC(I) = X(1)*TMP2 - Y3(I) 200 CONTINUE GO TO 430 C C WATSON FUNCTION. C 210 CONTINUE DO 240 I = 1, 29 DIV = DFLOAT(I)/C29 S1 = ZERO DX = ONE DO 220 J = 2, N S1 = S1 + DFLOAT(J-1)*DX*X(J) DX = DIV*DX 220 CONTINUE S2 = ZERO DX = ONE DO 230 J = 1, N S2 = S2 + DX*X(J) DX = DIV*DX 230 CONTINUE FVEC(I) = S1 - S2**2 - ONE 240 CONTINUE FVEC(30) = X(1) FVEC(31) = X(2) - X(1)**2 - ONE GO TO 430 C C BOX 3-DIMENSIONAL FUNCTION. C 250 CONTINUE DO 260 I = 1, M TEMP = DFLOAT(I) TMP1 = TEMP/TEN FVEC(I) = DEXP(-TMP1*X(1)) - DEXP(-TMP1*X(2)) * + (DEXP(-TEMP) - DEXP(-TMP1))*X(3) 260 CONTINUE GO TO 430 C C JENNRICH AND SAMPSON FUNCTION. C 270 CONTINUE DO 280 I = 1, M TEMP = DFLOAT(I) FVEC(I) = TWO + TWO*TEMP - DEXP(TEMP*X(1)) - DEXP(TEMP*X(2)) 280 CONTINUE GO TO 430 C C BROWN AND DENNIS FUNCTION. C 290 CONTINUE DO 300 I = 1, M TEMP = DFLOAT(I)/FIVE TMP1 = X(1) + TEMP*X(2) - DEXP(TEMP) TMP2 = X(3) + DSIN(TEMP)*X(4) - DCOS(TEMP) FVEC(I) = TMP1**2 + TMP2**2 300 CONTINUE GO TO 430 C C CHEBYQUAD FUNCTION. C 310 CONTINUE DO 320 I = 1, M FVEC(I) = ZERO 320 CONTINUE DO 340 J = 1, N TMP1 = ONE TMP2 = TWO*X(J) - ONE TEMP = TWO*TMP2 DO 330 I = 1, M FVEC(I) = FVEC(I) + TMP2 TI = TEMP*TMP2 - TMP1 TMP1 = TMP2 TMP2 = TI 330 CONTINUE 340 CONTINUE DX = ONE/DFLOAT(N) IEV = -1 DO 350 I = 1, M FVEC(I) = DX*FVEC(I) IF (IEV .GT. 0) FVEC(I) = FVEC(I) + ONE/(DFLOAT(I)**2 - ONE) IEV = -IEV 350 CONTINUE GO TO 430 C C BROWN ALMOST-LINEAR FUNCTION. C 360 CONTINUE SUM = -DFLOAT(N+1) PROD = ONE DO 370 J = 1, N SUM = SUM + X(J) PROD = X(J)*PROD 370 CONTINUE DO 380 I = 1, N FVEC(I) = X(I) + SUM 380 CONTINUE FVEC(N) = PROD - ONE GO TO 430 C C OSBORNE 1 FUNCTION. C 390 CONTINUE DO 400 I = 1, 33 TEMP = TEN*DFLOAT(I-1) TMP1 = DEXP(-X(4)*TEMP) TMP2 = DEXP(-X(5)*TEMP) FVEC(I) = Y4(I) - (X(1) + X(2)*TMP1 + X(3)*TMP2) 400 CONTINUE GO TO 430 C C OSBORNE 2 FUNCTION. C 410 CONTINUE DO 420 I = 1, 65 TEMP = DFLOAT(I-1)/TEN TMP1 = DEXP(-X(5)*TEMP) TMP2 = DEXP(-X(6)*(TEMP-X(9))**2) TMP3 = DEXP(-X(7)*(TEMP-X(10))**2) TMP4 = DEXP(-X(8)*(TEMP-X(11))**2) FVEC(I) = Y5(I) * - (X(1)*TMP1 + X(2)*TMP2 + X(3)*TMP3 + X(4)*TMP4) 420 CONTINUE 430 CONTINUE RETURN C C LAST CARD OF SUBROUTINE SSQFCN. C END PyBDSF-1.10.1/src/minpack/ex/file19000066400000000000000000000451721420247104600164730ustar00rootroot00000000000000C ********** C C THIS PROGRAM TESTS CODES FOR THE LEAST-SQUARES SOLUTION OF C M NONLINEAR EQUATIONS IN N VARIABLES. IT CONSISTS OF A DRIVER C AND AN INTERFACE SUBROUTINE FCN. THE DRIVER READS IN DATA, C CALLS THE NONLINEAR LEAST-SQUARES SOLVER, AND FINALLY PRINTS C OUT INFORMATION ON THE PERFORMANCE OF THE SOLVER. THIS IS C ONLY A SAMPLE DRIVER, MANY OTHER DRIVERS ARE POSSIBLE. THE C INTERFACE SUBROUTINE FCN IS NECESSARY TO TAKE INTO ACCOUNT THE C FORMS OF CALLING SEQUENCES USED BY THE FUNCTION AND JACOBIAN C SUBROUTINES IN THE VARIOUS NONLINEAR LEAST-SQUARES SOLVERS. C C SUBPROGRAMS CALLED C C USER-SUPPLIED ...... FCN C C MINPACK-SUPPLIED ... DPMPAR,ENORM,INITPT,LMDIF1,SSQFCN C C FORTRAN-SUPPLIED ... DSQRT C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IC,INFO,K,LWA,M,N,NFEV,NJEV,NPROB,NREAD,NTRIES,NWRITE INTEGER IWA(40),MA(60),NA(60),NF(60),NJ(60),NP(60),NX(60) DOUBLE PRECISION FACTOR,FNORM1,FNORM2,ONE,TEN,TOL DOUBLE PRECISION FNM(60),FVEC(65),WA(2865),X(40) DOUBLE PRECISION DPMPAR,ENORM EXTERNAL FCN COMMON /REFNUM/ NPROB,NFEV,NJEV C C LOGICAL INPUT UNIT IS ASSUMED TO BE NUMBER 5. C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NREAD,NWRITE /5,6/ C DATA ONE,TEN /1.0D0,1.0D1/ TOL = DSQRT(DPMPAR(1)) LWA = 2865 IC = 0 10 CONTINUE READ (NREAD,50) NPROB,N,M,NTRIES IF (NPROB .LE. 0) GO TO 30 FACTOR = ONE DO 20 K = 1, NTRIES IC = IC + 1 CALL INITPT(N,X,NPROB,FACTOR) CALL SSQFCN(M,N,X,FVEC,NPROB) FNORM1 = ENORM(M,FVEC) WRITE (NWRITE,60) NPROB,N,M NFEV = 0 NJEV = 0 CALL LMDIF1(FCN,M,N,X,FVEC,TOL,INFO,IWA,WA,LWA) CALL SSQFCN(M,N,X,FVEC,NPROB) FNORM2 = ENORM(M,FVEC) NP(IC) = NPROB NA(IC) = N MA(IC) = M NF(IC) = NFEV NJEV = NJEV/N NJ(IC) = NJEV NX(IC) = INFO FNM(IC) = FNORM2 WRITE (NWRITE,70) * FNORM1,FNORM2,NFEV,NJEV,INFO,(X(I), I = 1, N) FACTOR = TEN*FACTOR 20 CONTINUE GO TO 10 30 CONTINUE WRITE (NWRITE,80) IC WRITE (NWRITE,90) DO 40 I = 1, IC WRITE (NWRITE,100) NP(I),NA(I),MA(I),NF(I),NJ(I),NX(I),FNM(I) 40 CONTINUE STOP 50 FORMAT (4I5) 60 FORMAT ( //// 5X, 8H PROBLEM, I5, 5X, 11H DIMENSIONS, 2I5, 5X // * ) 70 FORMAT (5X, 33H INITIAL L2 NORM OF THE RESIDUALS, D15.7 // 5X, * 33H FINAL L2 NORM OF THE RESIDUALS , D15.7 // 5X, * 33H NUMBER OF FUNCTION EVALUATIONS , I10 // 5X, * 33H NUMBER OF JACOBIAN EVALUATIONS , I10 // 5X, * 15H EXIT PARAMETER, 18X, I10 // 5X, * 27H FINAL APPROXIMATE SOLUTION // (5X, 5D15.7)) 80 FORMAT (12H1SUMMARY OF , I3, 16H CALLS TO LMDIF1 /) 90 FORMAT (49H NPROB N M NFEV NJEV INFO FINAL L2 NORM /) 100 FORMAT (3I5, 3I6, 1X, D15.7) C C LAST CARD OF DRIVER. C END SUBROUTINE FCN(M,N,X,FVEC,IFLAG) INTEGER M,N,IFLAG DOUBLE PRECISION X(N),FVEC(M) C ********** C C THE CALLING SEQUENCE OF FCN SHOULD BE IDENTICAL TO THE C CALLING SEQUENCE OF THE FUNCTION SUBROUTINE IN THE NONLINEAR C LEAST-SQUARES SOLVER. FCN SHOULD ONLY CALL THE TESTING C FUNCTION SUBROUTINE SSQFCN WITH THE APPROPRIATE VALUE OF C PROBLEM NUMBER (NPROB). C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... SSQFCN C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER NPROB,NFEV,NJEV COMMON /REFNUM/ NPROB,NFEV,NJEV CALL SSQFCN(M,N,X,FVEC,NPROB) IF (IFLAG .EQ. 1) NFEV = NFEV + 1 IF (IFLAG .EQ. 2) NJEV = NJEV + 1 RETURN C C LAST CARD OF INTERFACE SUBROUTINE FCN. C END SUBROUTINE SSQFCN(M,N,X,FVEC,NPROB) INTEGER M,N,NPROB DOUBLE PRECISION X(N),FVEC(M) C ********** C C SUBROUTINE SSQFCN C C THIS SUBROUTINE DEFINES THE FUNCTIONS OF EIGHTEEN NONLINEAR C LEAST SQUARES PROBLEMS. THE ALLOWABLE VALUES OF (M,N) FOR C FUNCTIONS 1,2 AND 3 ARE VARIABLE BUT WITH M .GE. N. C FOR FUNCTIONS 4,5,6,7,8,9 AND 10 THE VALUES OF (M,N) ARE C (2,2),(3,3),(4,4),(2,2),(15,3),(11,4) AND (16,3), RESPECTIVELY. C FUNCTION 11 (WATSON) HAS M = 31 WITH N USUALLY 6 OR 9. C HOWEVER, ANY N, N = 2,...,31, IS PERMITTED. C FUNCTIONS 12,13 AND 14 HAVE N = 3,2 AND 4, RESPECTIVELY, BUT C ALLOW ANY M .GE. N, WITH THE USUAL CHOICES BEING 10,10 AND 20. C FUNCTION 15 (CHEBYQUAD) ALLOWS M AND N VARIABLE WITH M .GE. N. C FUNCTION 16 (BROWN) ALLOWS N VARIABLE WITH M = N. C FOR FUNCTIONS 17 AND 18, THE VALUES OF (M,N) ARE C (33,5) AND (65,11), RESPECTIVELY. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE SSQFCN(M,N,X,FVEC,NPROB) C C WHERE C C M AND N ARE POSITIVE INTEGER INPUT VARIABLES. N MUST NOT C EXCEED M. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN OUTPUT ARRAY OF LENGTH M WHICH CONTAINS THE NPROB C FUNCTION EVALUATED AT X. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DATAN,DCOS,DEXP,DSIN,DSQRT,DSIGN C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IEV,IVAR,J,NM1 DOUBLE PRECISION C13,C14,C29,C45,DIV,DX,EIGHT,FIVE,ONE,PROD,SUM, * S1,S2,TEMP,TEN,TI,TMP1,TMP2,TMP3,TMP4,TPI,TWO, * ZERO,ZP25,ZP5 DOUBLE PRECISION V(11),Y1(15),Y2(11),Y3(16),Y4(33),Y5(65) DOUBLE PRECISION DFLOAT DATA ZERO,ZP25,ZP5,ONE,TWO,FIVE,EIGHT,TEN,C13,C14,C29,C45 * /0.0D0,2.5D-1,5.0D-1,1.0D0,2.0D0,5.0D0,8.0D0,1.0D1,1.3D1, * 1.4D1,2.9D1,4.5D1/ DATA V(1),V(2),V(3),V(4),V(5),V(6),V(7),V(8),V(9),V(10),V(11) * /4.0D0,2.0D0,1.0D0,5.0D-1,2.5D-1,1.67D-1,1.25D-1,1.0D-1, * 8.33D-2,7.14D-2,6.25D-2/ DATA Y1(1),Y1(2),Y1(3),Y1(4),Y1(5),Y1(6),Y1(7),Y1(8),Y1(9), * Y1(10),Y1(11),Y1(12),Y1(13),Y1(14),Y1(15) * /1.4D-1,1.8D-1,2.2D-1,2.5D-1,2.9D-1,3.2D-1,3.5D-1,3.9D-1, * 3.7D-1,5.8D-1,7.3D-1,9.6D-1,1.34D0,2.1D0,4.39D0/ DATA Y2(1),Y2(2),Y2(3),Y2(4),Y2(5),Y2(6),Y2(7),Y2(8),Y2(9), * Y2(10),Y2(11) * /1.957D-1,1.947D-1,1.735D-1,1.6D-1,8.44D-2,6.27D-2,4.56D-2, * 3.42D-2,3.23D-2,2.35D-2,2.46D-2/ DATA Y3(1),Y3(2),Y3(3),Y3(4),Y3(5),Y3(6),Y3(7),Y3(8),Y3(9), * Y3(10),Y3(11),Y3(12),Y3(13),Y3(14),Y3(15),Y3(16) * /3.478D4,2.861D4,2.365D4,1.963D4,1.637D4,1.372D4,1.154D4, * 9.744D3,8.261D3,7.03D3,6.005D3,5.147D3,4.427D3,3.82D3, * 3.307D3,2.872D3/ DATA Y4(1),Y4(2),Y4(3),Y4(4),Y4(5),Y4(6),Y4(7),Y4(8),Y4(9), * Y4(10),Y4(11),Y4(12),Y4(13),Y4(14),Y4(15),Y4(16),Y4(17), * Y4(18),Y4(19),Y4(20),Y4(21),Y4(22),Y4(23),Y4(24),Y4(25), * Y4(26),Y4(27),Y4(28),Y4(29),Y4(30),Y4(31),Y4(32),Y4(33) * /8.44D-1,9.08D-1,9.32D-1,9.36D-1,9.25D-1,9.08D-1,8.81D-1, * 8.5D-1,8.18D-1,7.84D-1,7.51D-1,7.18D-1,6.85D-1,6.58D-1, * 6.28D-1,6.03D-1,5.8D-1,5.58D-1,5.38D-1,5.22D-1,5.06D-1, * 4.9D-1,4.78D-1,4.67D-1,4.57D-1,4.48D-1,4.38D-1,4.31D-1, * 4.24D-1,4.2D-1,4.14D-1,4.11D-1,4.06D-1/ DATA Y5(1),Y5(2),Y5(3),Y5(4),Y5(5),Y5(6),Y5(7),Y5(8),Y5(9), * Y5(10),Y5(11),Y5(12),Y5(13),Y5(14),Y5(15),Y5(16),Y5(17), * Y5(18),Y5(19),Y5(20),Y5(21),Y5(22),Y5(23),Y5(24),Y5(25), * Y5(26),Y5(27),Y5(28),Y5(29),Y5(30),Y5(31),Y5(32),Y5(33), * Y5(34),Y5(35),Y5(36),Y5(37),Y5(38),Y5(39),Y5(40),Y5(41), * Y5(42),Y5(43),Y5(44),Y5(45),Y5(46),Y5(47),Y5(48),Y5(49), * Y5(50),Y5(51),Y5(52),Y5(53),Y5(54),Y5(55),Y5(56),Y5(57), * Y5(58),Y5(59),Y5(60),Y5(61),Y5(62),Y5(63),Y5(64),Y5(65) * /1.366D0,1.191D0,1.112D0,1.013D0,9.91D-1,8.85D-1,8.31D-1, * 8.47D-1,7.86D-1,7.25D-1,7.46D-1,6.79D-1,6.08D-1,6.55D-1, * 6.16D-1,6.06D-1,6.02D-1,6.26D-1,6.51D-1,7.24D-1,6.49D-1, * 6.49D-1,6.94D-1,6.44D-1,6.24D-1,6.61D-1,6.12D-1,5.58D-1, * 5.33D-1,4.95D-1,5.0D-1,4.23D-1,3.95D-1,3.75D-1,3.72D-1, * 3.91D-1,3.96D-1,4.05D-1,4.28D-1,4.29D-1,5.23D-1,5.62D-1, * 6.07D-1,6.53D-1,6.72D-1,7.08D-1,6.33D-1,6.68D-1,6.45D-1, * 6.32D-1,5.91D-1,5.59D-1,5.97D-1,6.25D-1,7.39D-1,7.1D-1, * 7.29D-1,7.2D-1,6.36D-1,5.81D-1,4.28D-1,2.92D-1,1.62D-1, * 9.8D-2,5.4D-2/ DFLOAT(IVAR) = IVAR C C FUNCTION ROUTINE SELECTOR. C GO TO (10,40,70,110,120,130,140,150,170,190,210,250,270,290,310, * 360,390,410), NPROB C C LINEAR FUNCTION - FULL RANK. C 10 CONTINUE SUM = ZERO DO 20 J = 1, N SUM = SUM + X(J) 20 CONTINUE TEMP = TWO*SUM/DFLOAT(M) + ONE DO 30 I = 1, M FVEC(I) = -TEMP IF (I .LE. N) FVEC(I) = FVEC(I) + X(I) 30 CONTINUE GO TO 430 C C LINEAR FUNCTION - RANK 1. C 40 CONTINUE SUM = ZERO DO 50 J = 1, N SUM = SUM + DFLOAT(J)*X(J) 50 CONTINUE DO 60 I = 1, M FVEC(I) = DFLOAT(I)*SUM - ONE 60 CONTINUE GO TO 430 C C LINEAR FUNCTION - RANK 1 WITH ZERO COLUMNS AND ROWS. C 70 CONTINUE SUM = ZERO NM1 = N - 1 IF (NM1 .LT. 2) GO TO 90 DO 80 J = 2, NM1 SUM = SUM + DFLOAT(J)*X(J) 80 CONTINUE 90 CONTINUE DO 100 I = 1, M FVEC(I) = DFLOAT(I-1)*SUM - ONE 100 CONTINUE FVEC(M) = -ONE GO TO 430 C C ROSENBROCK FUNCTION. C 110 CONTINUE FVEC(1) = TEN*(X(2) - X(1)**2) FVEC(2) = ONE - X(1) GO TO 430 C C HELICAL VALLEY FUNCTION. C 120 CONTINUE TPI = EIGHT*DATAN(ONE) TMP1 = DSIGN(ZP25,X(2)) IF (X(1) .GT. ZERO) TMP1 = DATAN(X(2)/X(1))/TPI IF (X(1) .LT. ZERO) TMP1 = DATAN(X(2)/X(1))/TPI + ZP5 TMP2 = DSQRT(X(1)**2+X(2)**2) FVEC(1) = TEN*(X(3) - TEN*TMP1) FVEC(2) = TEN*(TMP2 - ONE) FVEC(3) = X(3) GO TO 430 C C POWELL SINGULAR FUNCTION. C 130 CONTINUE FVEC(1) = X(1) + TEN*X(2) FVEC(2) = DSQRT(FIVE)*(X(3) - X(4)) FVEC(3) = (X(2) - TWO*X(3))**2 FVEC(4) = DSQRT(TEN)*(X(1) - X(4))**2 GO TO 430 C C FREUDENSTEIN AND ROTH FUNCTION. C 140 CONTINUE FVEC(1) = -C13 + X(1) + ((FIVE - X(2))*X(2) - TWO)*X(2) FVEC(2) = -C29 + X(1) + ((ONE + X(2))*X(2) - C14)*X(2) GO TO 430 C C BARD FUNCTION. C 150 CONTINUE DO 160 I = 1, 15 TMP1 = DFLOAT(I) TMP2 = DFLOAT(16-I) TMP3 = TMP1 IF (I .GT. 8) TMP3 = TMP2 FVEC(I) = Y1(I) - (X(1) + TMP1/(X(2)*TMP2 + X(3)*TMP3)) 160 CONTINUE GO TO 430 C C KOWALIK AND OSBORNE FUNCTION. C 170 CONTINUE DO 180 I = 1, 11 TMP1 = V(I)*(V(I) + X(2)) TMP2 = V(I)*(V(I) + X(3)) + X(4) FVEC(I) = Y2(I) - X(1)*TMP1/TMP2 180 CONTINUE GO TO 430 C C MEYER FUNCTION. C 190 CONTINUE DO 200 I = 1, 16 TEMP = FIVE*DFLOAT(I) + C45 + X(3) TMP1 = X(2)/TEMP TMP2 = DEXP(TMP1) FVEC(I) = X(1)*TMP2 - Y3(I) 200 CONTINUE GO TO 430 C C WATSON FUNCTION. C 210 CONTINUE DO 240 I = 1, 29 DIV = DFLOAT(I)/C29 S1 = ZERO DX = ONE DO 220 J = 2, N S1 = S1 + DFLOAT(J-1)*DX*X(J) DX = DIV*DX 220 CONTINUE S2 = ZERO DX = ONE DO 230 J = 1, N S2 = S2 + DX*X(J) DX = DIV*DX 230 CONTINUE FVEC(I) = S1 - S2**2 - ONE 240 CONTINUE FVEC(30) = X(1) FVEC(31) = X(2) - X(1)**2 - ONE GO TO 430 C C BOX 3-DIMENSIONAL FUNCTION. C 250 CONTINUE DO 260 I = 1, M TEMP = DFLOAT(I) TMP1 = TEMP/TEN FVEC(I) = DEXP(-TMP1*X(1)) - DEXP(-TMP1*X(2)) * + (DEXP(-TEMP) - DEXP(-TMP1))*X(3) 260 CONTINUE GO TO 430 C C JENNRICH AND SAMPSON FUNCTION. C 270 CONTINUE DO 280 I = 1, M TEMP = DFLOAT(I) FVEC(I) = TWO + TWO*TEMP - DEXP(TEMP*X(1)) - DEXP(TEMP*X(2)) 280 CONTINUE GO TO 430 C C BROWN AND DENNIS FUNCTION. C 290 CONTINUE DO 300 I = 1, M TEMP = DFLOAT(I)/FIVE TMP1 = X(1) + TEMP*X(2) - DEXP(TEMP) TMP2 = X(3) + DSIN(TEMP)*X(4) - DCOS(TEMP) FVEC(I) = TMP1**2 + TMP2**2 300 CONTINUE GO TO 430 C C CHEBYQUAD FUNCTION. C 310 CONTINUE DO 320 I = 1, M FVEC(I) = ZERO 320 CONTINUE DO 340 J = 1, N TMP1 = ONE TMP2 = TWO*X(J) - ONE TEMP = TWO*TMP2 DO 330 I = 1, M FVEC(I) = FVEC(I) + TMP2 TI = TEMP*TMP2 - TMP1 TMP1 = TMP2 TMP2 = TI 330 CONTINUE 340 CONTINUE DX = ONE/DFLOAT(N) IEV = -1 DO 350 I = 1, M FVEC(I) = DX*FVEC(I) IF (IEV .GT. 0) FVEC(I) = FVEC(I) + ONE/(DFLOAT(I)**2 - ONE) IEV = -IEV 350 CONTINUE GO TO 430 C C BROWN ALMOST-LINEAR FUNCTION. C 360 CONTINUE SUM = -DFLOAT(N+1) PROD = ONE DO 370 J = 1, N SUM = SUM + X(J) PROD = X(J)*PROD 370 CONTINUE DO 380 I = 1, N FVEC(I) = X(I) + SUM 380 CONTINUE FVEC(N) = PROD - ONE GO TO 430 C C OSBORNE 1 FUNCTION. C 390 CONTINUE DO 400 I = 1, 33 TEMP = TEN*DFLOAT(I-1) TMP1 = DEXP(-X(4)*TEMP) TMP2 = DEXP(-X(5)*TEMP) FVEC(I) = Y4(I) - (X(1) + X(2)*TMP1 + X(3)*TMP2) 400 CONTINUE GO TO 430 C C OSBORNE 2 FUNCTION. C 410 CONTINUE DO 420 I = 1, 65 TEMP = DFLOAT(I-1)/TEN TMP1 = DEXP(-X(5)*TEMP) TMP2 = DEXP(-X(6)*(TEMP-X(9))**2) TMP3 = DEXP(-X(7)*(TEMP-X(10))**2) TMP4 = DEXP(-X(8)*(TEMP-X(11))**2) FVEC(I) = Y5(I) * - (X(1)*TMP1 + X(2)*TMP2 + X(3)*TMP3 + X(4)*TMP4) 420 CONTINUE 430 CONTINUE RETURN C C LAST CARD OF SUBROUTINE SSQFCN. C END SUBROUTINE INITPT(N,X,NPROB,FACTOR) INTEGER N,NPROB DOUBLE PRECISION FACTOR DOUBLE PRECISION X(N) C ********** C C SUBROUTINE INITPT C C THIS SUBROUTINE SPECIFIES THE STANDARD STARTING POINTS FOR THE C FUNCTIONS DEFINED BY SUBROUTINE SSQFCN. THE SUBROUTINE RETURNS C IN X A MULTIPLE (FACTOR) OF THE STANDARD STARTING POINT. FOR C THE 11TH FUNCTION THE STANDARD STARTING POINT IS ZERO, SO IN C THIS CASE, IF FACTOR IS NOT UNITY, THEN THE SUBROUTINE RETURNS C THE VECTOR X(J) = FACTOR, J=1,...,N. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE INITPT(N,X,NPROB,FACTOR) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE STANDARD C STARTING POINT FOR PROBLEM NPROB MULTIPLIED BY FACTOR. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 18. C C FACTOR IS AN INPUT VARIABLE WHICH SPECIFIES THE MULTIPLE OF C THE STANDARD STARTING POINT. IF FACTOR IS UNITY, NO C MULTIPLICATION IS PERFORMED. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IVAR,J DOUBLE PRECISION C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14, * C15,C16,C17,FIVE,H,HALF,ONE,SEVEN,TEN,THREE, * TWENTY,TWNTF,TWO,ZERO DOUBLE PRECISION DFLOAT DATA ZERO,HALF,ONE,TWO,THREE,FIVE,SEVEN,TEN,TWENTY,TWNTF * /0.0D0,5.0D-1,1.0D0,2.0D0,3.0D0,5.0D0,7.0D0,1.0D1,2.0D1, * 2.5D1/ DATA C1,C2,C3,C4,C5,C6,C7,C8,C9,C10,C11,C12,C13,C14,C15,C16,C17 * /1.2D0,2.5D-1,3.9D-1,4.15D-1,2.0D-2,4.0D3,2.5D2,3.0D-1, * 4.0D-1,1.5D0,1.0D-2,1.3D0,6.5D-1,7.0D-1,6.0D-1,4.5D0, * 5.5D0/ DFLOAT(IVAR) = IVAR C C SELECTION OF INITIAL POINT. C GO TO (10,10,10,30,40,50,60,70,80,90,100,120,130,140,150,170, * 190,200), NPROB C C LINEAR FUNCTION - FULL RANK OR RANK 1. C 10 CONTINUE DO 20 J = 1, N X(J) = ONE 20 CONTINUE GO TO 210 C C ROSENBROCK FUNCTION. C 30 CONTINUE X(1) = -C1 X(2) = ONE GO TO 210 C C HELICAL VALLEY FUNCTION. C 40 CONTINUE X(1) = -ONE X(2) = ZERO X(3) = ZERO GO TO 210 C C POWELL SINGULAR FUNCTION. C 50 CONTINUE X(1) = THREE X(2) = -ONE X(3) = ZERO X(4) = ONE GO TO 210 C C FREUDENSTEIN AND ROTH FUNCTION. C 60 CONTINUE X(1) = HALF X(2) = -TWO GO TO 210 C C BARD FUNCTION. C 70 CONTINUE X(1) = ONE X(2) = ONE X(3) = ONE GO TO 210 C C KOWALIK AND OSBORNE FUNCTION. C 80 CONTINUE X(1) = C2 X(2) = C3 X(3) = C4 X(4) = C3 GO TO 210 C C MEYER FUNCTION. C 90 CONTINUE X(1) = C5 X(2) = C6 X(3) = C7 GO TO 210 C C WATSON FUNCTION. C 100 CONTINUE DO 110 J = 1, N X(J) = ZERO 110 CONTINUE GO TO 210 C C BOX 3-DIMENSIONAL FUNCTION. C 120 CONTINUE X(1) = ZERO X(2) = TEN X(3) = TWENTY GO TO 210 C C JENNRICH AND SAMPSON FUNCTION. C 130 CONTINUE X(1) = C8 X(2) = C9 GO TO 210 C C BROWN AND DENNIS FUNCTION. C 140 CONTINUE X(1) = TWNTF X(2) = FIVE X(3) = -FIVE X(4) = -ONE GO TO 210 C C CHEBYQUAD FUNCTION. C 150 CONTINUE H = ONE/DFLOAT(N+1) DO 160 J = 1, N X(J) = DFLOAT(J)*H 160 CONTINUE GO TO 210 C C BROWN ALMOST-LINEAR FUNCTION. C 170 CONTINUE DO 180 J = 1, N X(J) = HALF 180 CONTINUE GO TO 210 C C OSBORNE 1 FUNCTION. C 190 CONTINUE X(1) = HALF X(2) = C10 X(3) = -ONE X(4) = C11 X(5) = C5 GO TO 210 C C OSBORNE 2 FUNCTION. C 200 CONTINUE X(1) = C12 X(2) = C13 X(3) = C13 X(4) = C14 X(5) = C15 X(6) = THREE X(7) = FIVE X(8) = SEVEN X(9) = TWO X(10) = C16 X(11) = C17 210 CONTINUE C C COMPUTE MULTIPLE OF INITIAL POINT. C IF (FACTOR .EQ. ONE) GO TO 260 IF (NPROB .EQ. 11) GO TO 230 DO 220 J = 1, N X(J) = FACTOR*X(J) 220 CONTINUE GO TO 250 230 CONTINUE DO 240 J = 1, N X(J) = FACTOR 240 CONTINUE 250 CONTINUE 260 CONTINUE RETURN C C LAST CARD OF SUBROUTINE INITPT. C END PyBDSF-1.10.1/src/minpack/ex/file20000066400000000000000000000547051420247104600164650ustar00rootroot00000000000000C ********** C C THIS PROGRAM TESTS THE ABILITY OF CHKDER TO DETECT C INCONSISTENCIES BETWEEN FUNCTIONS AND THEIR FIRST DERIVATIVES. C FOURTEEN TEST FUNCTION VECTORS AND JACOBIANS ARE USED. ELEVEN OF C THE TESTS ARE FALSE(F), I.E. THERE ARE INCONSISTENCIES BETWEEN C THE FUNCTION VECTORS AND THE CORRESPONDING JACOBIANS. THREE OF C THE TESTS ARE TRUE(T), I.E. THERE ARE NO INCONSISTENCIES. THE C DRIVER READS IN DATA, CALLS CHKDER AND PRINTS OUT INFORMATION C REQUIRED BY AND RECEIVED FROM CHKDER. C C SUBPROGRAMS CALLED C C MINPACK SUPPLIED ... CHKDER,ERRJAC,INITPT,VECFCN C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,LDFJAC,LNP,MODE,N,NPROB,NREAD,NWRITE INTEGER NA(14),NP(14) LOGICAL A(14) DOUBLE PRECISION CP,ONE DOUBLE PRECISION DIFF(10),ERR(10),ERRMAX(14),ERRMIN(14), * FJAC(10,10),FVEC1(10),FVEC2(10),X1(10),X2(10) C C LOGICAL INPUT UNIT IS ASSUMED TO BE NUMBER 5. C LOGICAL OUTPUT UNIT IS ASSUMED TO BE NUMBER 6. C DATA NREAD,NWRITE /5,6/ C DATA A(1),A(2),A(3),A(4),A(5),A(6),A(7),A(8),A(9),A(10),A(11), * A(12),A(13),A(14) * /.FALSE.,.FALSE.,.FALSE.,.TRUE.,.FALSE.,.FALSE.,.FALSE., * .TRUE.,.FALSE.,.FALSE.,.FALSE.,.FALSE.,.TRUE.,.FALSE./ DATA CP,ONE /1.23D-1,1.0D0/ LDFJAC = 10 10 CONTINUE READ (NREAD,60) NPROB,N IF (NPROB .LE. 0) GO TO 40 CALL INITPT(N,X1,NPROB,ONE) DO 20 I = 1, N X1(I) = X1(I) + CP CP = -CP 20 CONTINUE WRITE (NWRITE,70) NPROB,N,A(NPROB) MODE = 1 CALL CHKDER(N,N,X1,FVEC1,FJAC,LDFJAC,X2,FVEC2,MODE,ERR) MODE = 2 CALL VECFCN(N,X1,FVEC1,NPROB) CALL ERRJAC(N,X1,FJAC,LDFJAC,NPROB) CALL VECFCN(N,X2,FVEC2,NPROB) CALL CHKDER(N,N,X1,FVEC1,FJAC,LDFJAC,X2,FVEC2,MODE,ERR) ERRMIN(NPROB) = ERR(1) ERRMAX(NPROB) = ERR(1) DO 30 I = 1, N DIFF(I) = FVEC2(I) - FVEC1(I) IF (ERRMIN(NPROB) .GT. ERR(I)) ERRMIN(NPROB) = ERR(I) IF (ERRMAX(NPROB) .LT. ERR(I)) ERRMAX(NPROB) = ERR(I) 30 CONTINUE NP(NPROB) = NPROB LNP = NPROB NA(NPROB) = N WRITE (NWRITE,80) (FVEC1(I), I = 1, N) WRITE (NWRITE,90) (DIFF(I), I = 1, N) WRITE (NWRITE,100) (ERR(I), I = 1, N) GO TO 10 40 CONTINUE WRITE (NWRITE,110) LNP WRITE (NWRITE,120) DO 50 I = 1, LNP WRITE (NWRITE,130) NP(I),NA(I),A(I),ERRMIN(I),ERRMAX(I) 50 CONTINUE STOP 60 FORMAT (2I5) 70 FORMAT ( /// 5X, 8H PROBLEM, I5, 5X, 15H WITH DIMENSION, I5, 2X, * 5H IS , L1) 80 FORMAT ( // 5X, 25H FIRST FUNCTION VECTOR // (5X, 5D15.7)) 90 FORMAT ( // 5X, 27H FUNCTION DIFFERENCE VECTOR // (5X, 5D15.7)) 100 FORMAT ( // 5X, 13H ERROR VECTOR // (5X, 5D15.7)) 110 FORMAT (12H1SUMMARY OF , I3, 16H TESTS OF CHKDER /) 120 FORMAT (46H NPROB N STATUS ERRMIN ERRMAX /) 130 FORMAT (I4, I6, 6X, L1, 3X, 2D15.7) C C LAST CARD OF DERIVATIVE CHECK TEST DRIVER. C END SUBROUTINE ERRJAC(N,X,FJAC,LDFJAC,NPROB) INTEGER N,LDFJAC,NPROB DOUBLE PRECISION X(N),FJAC(LDFJAC,N) C ********** C C SUBROUTINE ERRJAC C C THIS SUBROUTINE IS DERIVED FROM VECJAC WHICH DEFINES THE C JACOBIAN MATRICES OF FOURTEEN TEST FUNCTIONS. THE PROBLEM C DIMENSIONS ARE AS DESCRIBED IN THE PROLOGUE COMMENTS OF VECFCN. C VARIOUS ERRORS ARE DELIBERATELY INTRODUCED TO PROVIDE A TEST C FOR CHKDER. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE ERRJAC(N,X,FJAC,LDFJAC,NPROB) C C WHERE C C N IS A POSITIVE INTEGER VARIABLE. C C X IS AN ARRAY OF LENGTH N. C C FJAC IS AN N BY N ARRAY. ON OUTPUT FJAC CONTAINS THE C JACOBIAN MATRIX, WITH VARIOUS ERRORS DELIBERATELY C INTRODUCED, OF THE NPROB FUNCTION EVALUATED AT X. C C LDFJAC IS A POSITIVE INTEGER VARIABLE NOT LESS THAN N C WHICH SPECIFIES THE LEADING DIMENSION OF THE ARRAY FJAC. C C NPROB IS A POSITIVE INTEGER VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DATAN,DCOS,DEXP,DMIN1,DSIN,DSQRT, C MAX0,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IVAR,J,K,K1,K2,ML,MU DOUBLE PRECISION C1,C3,C4,C5,C6,C9,EIGHT,FIFTN,FIVE,FOUR,H, * HUNDRD,ONE,PROD,SIX,SUM,SUM1,SUM2,TEMP,TEMP1, * TEMP2,TEMP3,TEMP4,TEN,THREE,TI,TJ,TK,TPI, * TWENTY,TWO,ZERO DOUBLE PRECISION DFLOAT DATA ZERO,ONE,TWO,THREE,FOUR,FIVE,SIX,EIGHT,TEN,FIFTN,TWENTY, * HUNDRD * /0.0D0,1.0D0,2.0D0,3.0D0,4.0D0,5.0D0,6.0D0,8.0D0,1.0D1, * 1.5D1,2.0D1,1.0D2/ DATA C1,C3,C4,C5,C6,C9 /1.0D4,2.0D2,2.02D1,1.98D1,1.8D2,2.9D1/ DFLOAT(IVAR) = IVAR C C JACOBIAN ROUTINE SELECTOR. C GO TO (10,20,50,60,90,100,200,230,290,320,350,380,420,450), * NPROB C C ROSENBROCK FUNCTION WITH SIGN REVERSAL AFFECTING ELEMENT (1,1). C 10 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = ZERO FJAC(2,1) = -TWENTY*X(1) FJAC(2,2) = TEN GO TO 490 C C POWELL SINGULAR FUNCTION WITH SIGN REVERSAL AFFECTING ELEMENT C (3,3). C 20 CONTINUE DO 40 K = 1, 4 DO 30 J = 1, 4 FJAC(K,J) = ZERO 30 CONTINUE 40 CONTINUE FJAC(1,1) = ONE FJAC(1,2) = TEN FJAC(2,3) = DSQRT(FIVE) FJAC(2,4) = -FJAC(2,3) FJAC(3,2) = TWO*(X(2) - TWO*X(3)) FJAC(3,3) = TWO*FJAC(3,2) FJAC(4,1) = TWO*DSQRT(TEN)*(X(1) - X(4)) FJAC(4,4) = -FJAC(4,1) GO TO 490 C C POWELL BADLY SCALED FUNCTION WITH THE SIGN OF THE JACOBIAN C REVERSED. C 50 CONTINUE FJAC(1,1) = -C1*X(2) FJAC(1,2) = -C1*X(1) FJAC(2,1) = DEXP(-X(1)) FJAC(2,2) = DEXP(-X(2)) GO TO 490 C C WOOD FUNCTION WITHOUT ERROR. C 60 CONTINUE DO 80 K = 1, 4 DO 70 J = 1, 4 FJAC(K,J) = ZERO 70 CONTINUE 80 CONTINUE TEMP1 = X(2) - THREE*X(1)**2 TEMP2 = X(4) - THREE*X(3)**2 FJAC(1,1) = -C3*TEMP1 + ONE FJAC(1,2) = -C3*X(1) FJAC(2,1) = -TWO*C3*X(1) FJAC(2,2) = C3 + C4 FJAC(2,4) = C5 FJAC(3,3) = -C6*TEMP2 + ONE FJAC(3,4) = -C6*X(3) FJAC(4,2) = C5 FJAC(4,3) = -TWO*C6*X(3) FJAC(4,4) = C6 + C4 GO TO 490 C C HELICAL VALLEY FUNCTION WITH MULTIPLICATIVE ERROR AFFECTING C ELEMENTS (2,1) AND (2,2). C 90 CONTINUE TPI = EIGHT*DATAN(ONE) TEMP = X(1)**2 + X(2)**2 TEMP1 = TPI*TEMP TEMP2 = DSQRT(TEMP) FJAC(1,1) = HUNDRD*X(2)/TEMP1 FJAC(1,2) = -HUNDRD*X(1)/TEMP1 FJAC(1,3) = TEN FJAC(2,1) = FIVE*X(1)/TEMP2 FJAC(2,2) = FIVE*X(2)/TEMP2 FJAC(2,3) = ZERO FJAC(3,1) = ZERO FJAC(3,2) = ZERO FJAC(3,3) = ONE GO TO 490 C C WATSON FUNCTION WITH SIGN REVERSALS AFFECTING THE COMPUTATION OF C TEMP1. C 100 CONTINUE DO 120 K = 1, N DO 110 J = K, N FJAC(K,J) = ZERO 110 CONTINUE 120 CONTINUE DO 170 I = 1, 29 TI = DFLOAT(I)/C9 SUM1 = ZERO TEMP = ONE DO 130 J = 2, N SUM1 = SUM1 + DFLOAT(J-1)*TEMP*X(J) TEMP = TI*TEMP 130 CONTINUE SUM2 = ZERO TEMP = ONE DO 140 J = 1, N SUM2 = SUM2 + TEMP*X(J) TEMP = TI*TEMP 140 CONTINUE TEMP1 = TWO*(SUM1 + SUM2**2 + ONE) TEMP2 = TWO*SUM2 TEMP = TI**2 TK = ONE DO 160 K = 1, N TJ = TK DO 150 J = K, N FJAC(K,J) = FJAC(K,J) * + TJ * *((DFLOAT(K-1)/TI - TEMP2) * *(DFLOAT(J-1)/TI - TEMP2) - TEMP1) TJ = TI*TJ 150 CONTINUE TK = TEMP*TK 160 CONTINUE 170 CONTINUE FJAC(1,1) = FJAC(1,1) + SIX*X(1)**2 - TWO*X(2) + THREE FJAC(1,2) = FJAC(1,2) - TWO*X(1) FJAC(2,2) = FJAC(2,2) + ONE DO 190 K = 1, N DO 180 J = K, N FJAC(J,K) = FJAC(K,J) 180 CONTINUE 190 CONTINUE GO TO 490 C C CHEBYQUAD FUNCTION WITH JACOBIAN TWICE CORRECT SIZE. C 200 CONTINUE TK = ONE/DFLOAT(N) DO 220 J = 1, N TEMP1 = ONE TEMP2 = TWO*X(J) - ONE TEMP = TWO*TEMP2 TEMP3 = ZERO TEMP4 = TWO DO 210 K = 1, N FJAC(K,J) = TWO*TK*TEMP4 TI = FOUR*TEMP2 + TEMP*TEMP4 - TEMP3 TEMP3 = TEMP4 TEMP4 = TI TI = TEMP*TEMP2 - TEMP1 TEMP1 = TEMP2 TEMP2 = TI 210 CONTINUE 220 CONTINUE GO TO 490 C C BROWN ALMOST-LINEAR FUNCTION WITHOUT ERROR. C 230 CONTINUE PROD = ONE DO 250 J = 1, N PROD = X(J)*PROD DO 240 K = 1, N FJAC(K,J) = ONE 240 CONTINUE FJAC(J,J) = TWO 250 CONTINUE DO 280 J = 1, N TEMP = X(J) IF (TEMP .NE. ZERO) GO TO 270 TEMP = ONE PROD = ONE DO 260 K = 1, N IF (K .NE. J) PROD = X(K)*PROD 260 CONTINUE 270 CONTINUE FJAC(N,J) = PROD/TEMP 280 CONTINUE GO TO 490 C C DISCRETE BOUNDARY VALUE FUNCTION WITH MULTIPLICATIVE ERROR C AFFECTING THE JACOBIAN DIAGONAL. C 290 CONTINUE H = ONE/DFLOAT(N+1) DO 310 K = 1, N TEMP = THREE*(X(K) + DFLOAT(K)*H + ONE)**2 DO 300 J = 1, N FJAC(K,J) = ZERO 300 CONTINUE FJAC(K,K) = FOUR + TEMP*H**2 IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -ONE 310 CONTINUE GO TO 490 C C DISCRETE INTEGRAL EQUATION FUNCTION WITH SIGN ERROR AFFECTING C THE JACOBIAN DIAGONAL. C 320 CONTINUE H = ONE/DFLOAT(N+1) DO 340 K = 1, N TK = DFLOAT(K)*H DO 330 J = 1, N TJ = DFLOAT(J)*H TEMP = THREE*(X(J) + TJ + ONE)**2 FJAC(K,J) = H*DMIN1(TJ*(ONE-TK),TK*(ONE-TJ))*TEMP/TWO 330 CONTINUE FJAC(K,K) = FJAC(K,K) - ONE 340 CONTINUE GO TO 490 C C TRIGONOMETRIC FUNCTION WITH SIGN ERRORS AFFECTING THE C OFFDIAGONAL ELEMENTS OF THE JACOBIAN. C 350 CONTINUE DO 370 J = 1, N TEMP = DSIN(X(J)) DO 360 K = 1, N FJAC(K,J) = -TEMP 360 CONTINUE FJAC(J,J) = DFLOAT(J+1)*TEMP - DCOS(X(J)) 370 CONTINUE GO TO 490 C C VARIABLY DIMENSIONED FUNCTION WITH OPERATION ERROR AFFECTING C THE UPPER TRIANGULAR ELEMENTS OF THE JACOBIAN. C 380 CONTINUE SUM = ZERO DO 390 J = 1, N SUM = SUM + DFLOAT(J)*(X(J) - ONE) 390 CONTINUE TEMP = ONE + SIX*SUM**2 DO 410 K = 1, N DO 400 J = K, N FJAC(K,J) = DFLOAT(K*J)/TEMP FJAC(J,K) = FJAC(K,J) 400 CONTINUE FJAC(K,K) = FJAC(K,K) + ONE 410 CONTINUE GO TO 490 C C BROYDEN TRIDIAGONAL FUNCTION WITHOUT ERROR. C 420 CONTINUE DO 440 K = 1, N DO 430 J = 1, N FJAC(K,J) = ZERO 430 CONTINUE FJAC(K,K) = THREE - FOUR*X(K) IF (K .NE. 1) FJAC(K,K-1) = -ONE IF (K .NE. N) FJAC(K,K+1) = -TWO 440 CONTINUE GO TO 490 C C BROYDEN BANDED FUNCTION WITH SIGN ERROR AFFECTING THE JACOBIAN C DIAGONAL. C 450 CONTINUE ML = 5 MU = 1 DO 480 K = 1, N DO 460 J = 1, N FJAC(K,J) = ZERO 460 CONTINUE K1 = MAX0(1,K-ML) K2 = MIN0(K+MU,N) DO 470 J = K1, K2 IF (J .NE. K) FJAC(K,J) = -(ONE + TWO*X(J)) 470 CONTINUE FJAC(K,K) = TWO - FIFTN*X(K)**2 480 CONTINUE 490 CONTINUE RETURN C C LAST CARD OF SUBROUTINE ERRJAC. C END SUBROUTINE INITPT(N,X,NPROB,FACTOR) INTEGER N,NPROB DOUBLE PRECISION FACTOR DOUBLE PRECISION X(N) C ********** C C SUBROUTINE INITPT C C THIS SUBROUTINE SPECIFIES THE STANDARD STARTING POINTS FOR C THE FUNCTIONS DEFINED BY SUBROUTINE VECFCN. THE SUBROUTINE C RETURNS IN X A MULTIPLE (FACTOR) OF THE STANDARD STARTING C POINT. FOR THE SIXTH FUNCTION THE STANDARD STARTING POINT IS C ZERO, SO IN THIS CASE, IF FACTOR IS NOT UNITY, THEN THE C SUBROUTINE RETURNS THE VECTOR X(J) = FACTOR, J=1,...,N. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE INITPT(N,X,NPROB,FACTOR) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE STANDARD C STARTING POINT FOR PROBLEM NPROB MULTIPLIED BY FACTOR. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C FACTOR IS AN INPUT VARIABLE WHICH SPECIFIES THE MULTIPLE OF C THE STANDARD STARTING POINT. IF FACTOR IS UNITY, NO C MULTIPLICATION IS PERFORMED. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER IVAR,J DOUBLE PRECISION C1,H,HALF,ONE,THREE,TJ,ZERO DOUBLE PRECISION DFLOAT DATA ZERO,HALF,ONE,THREE,C1 /0.0D0,5.0D-1,1.0D0,3.0D0,1.2D0/ DFLOAT(IVAR) = IVAR C C SELECTION OF INITIAL POINT. C GO TO (10,20,30,40,50,60,80,100,120,120,140,160,180,180), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE X(1) = -C1 X(2) = ONE GO TO 200 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE X(1) = THREE X(2) = -ONE X(3) = ZERO X(4) = ONE GO TO 200 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE X(1) = ZERO X(2) = ONE GO TO 200 C C WOOD FUNCTION. C 40 CONTINUE X(1) = -THREE X(2) = -ONE X(3) = -THREE X(4) = -ONE GO TO 200 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE X(1) = -ONE X(2) = ZERO X(3) = ZERO GO TO 200 C C WATSON FUNCTION. C 60 CONTINUE DO 70 J = 1, N X(J) = ZERO 70 CONTINUE GO TO 200 C C CHEBYQUAD FUNCTION. C 80 CONTINUE H = ONE/DFLOAT(N+1) DO 90 J = 1, N X(J) = DFLOAT(J)*H 90 CONTINUE GO TO 200 C C BROWN ALMOST-LINEAR FUNCTION. C 100 CONTINUE DO 110 J = 1, N X(J) = HALF 110 CONTINUE GO TO 200 C C DISCRETE BOUNDARY VALUE AND INTEGRAL EQUATION FUNCTIONS. C 120 CONTINUE H = ONE/DFLOAT(N+1) DO 130 J = 1, N TJ = DFLOAT(J)*H X(J) = TJ*(TJ - ONE) 130 CONTINUE GO TO 200 C C TRIGONOMETRIC FUNCTION. C 140 CONTINUE H = ONE/DFLOAT(N) DO 150 J = 1, N X(J) = H 150 CONTINUE GO TO 200 C C VARIABLY DIMENSIONED FUNCTION. C 160 CONTINUE H = ONE/DFLOAT(N) DO 170 J = 1, N X(J) = ONE - DFLOAT(J)*H 170 CONTINUE GO TO 200 C C BROYDEN TRIDIAGONAL AND BANDED FUNCTIONS. C 180 CONTINUE DO 190 J = 1, N X(J) = -ONE 190 CONTINUE 200 CONTINUE C C COMPUTE MULTIPLE OF INITIAL POINT. C IF (FACTOR .EQ. ONE) GO TO 250 IF (NPROB .EQ. 6) GO TO 220 DO 210 J = 1, N X(J) = FACTOR*X(J) 210 CONTINUE GO TO 240 220 CONTINUE DO 230 J = 1, N X(J) = FACTOR 230 CONTINUE 240 CONTINUE 250 CONTINUE RETURN C C LAST CARD OF SUBROUTINE INITPT. C END SUBROUTINE VECFCN(N,X,FVEC,NPROB) INTEGER N,NPROB DOUBLE PRECISION X(N),FVEC(N) C ********** C C SUBROUTINE VECFCN C C THIS SUBROUTINE DEFINES FOURTEEN TEST FUNCTIONS. THE FIRST C FIVE TEST FUNCTIONS ARE OF DIMENSIONS 2,4,2,4,3, RESPECTIVELY, C WHILE THE REMAINING TEST FUNCTIONS ARE OF VARIABLE DIMENSION C N FOR ANY N GREATER THAN OR EQUAL TO 1 (PROBLEM 6 IS AN C EXCEPTION TO THIS, SINCE IT DOES NOT ALLOW N = 1). C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE VECFCN(N,X,FVEC,NPROB) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C X IS AN INPUT ARRAY OF LENGTH N. C C FVEC IS AN OUTPUT ARRAY OF LENGTH N WHICH CONTAINS THE NPROB C FUNCTION VECTOR EVALUATED AT X. C C NPROB IS A POSITIVE INTEGER INPUT VARIABLE WHICH DEFINES THE C NUMBER OF THE PROBLEM. NPROB MUST NOT EXCEED 14. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... DATAN,DCOS,DEXP,DSIGN,DSIN,DSQRT, C MAX0,MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. MARCH 1980. C BURTON S. GARBOW, KENNETH E. HILLSTROM, JORGE J. MORE C C ********** INTEGER I,IEV,IVAR,J,K,K1,K2,KP1,ML,MU DOUBLE PRECISION C1,C2,C3,C4,C5,C6,C7,C8,C9,EIGHT,FIVE,H,ONE, * PROD,SUM,SUM1,SUM2,TEMP,TEMP1,TEMP2,TEN,THREE, * TI,TJ,TK,TPI,TWO,ZERO DOUBLE PRECISION DFLOAT DATA ZERO,ONE,TWO,THREE,FIVE,EIGHT,TEN * /0.0D0,1.0D0,2.0D0,3.0D0,5.0D0,8.0D0,1.0D1/ DATA C1,C2,C3,C4,C5,C6,C7,C8,C9 * /1.0D4,1.0001D0,2.0D2,2.02D1,1.98D1,1.8D2,2.5D-1,5.0D-1, * 2.9D1/ DFLOAT(IVAR) = IVAR C C PROBLEM SELECTOR. C GO TO (10,20,30,40,50,60,120,170,200,220,270,300,330,350), NPROB C C ROSENBROCK FUNCTION. C 10 CONTINUE FVEC(1) = ONE - X(1) FVEC(2) = TEN*(X(2) - X(1)**2) GO TO 380 C C POWELL SINGULAR FUNCTION. C 20 CONTINUE FVEC(1) = X(1) + TEN*X(2) FVEC(2) = DSQRT(FIVE)*(X(3) - X(4)) FVEC(3) = (X(2) - TWO*X(3))**2 FVEC(4) = DSQRT(TEN)*(X(1) - X(4))**2 GO TO 380 C C POWELL BADLY SCALED FUNCTION. C 30 CONTINUE FVEC(1) = C1*X(1)*X(2) - ONE FVEC(2) = DEXP(-X(1)) + DEXP(-X(2)) - C2 GO TO 380 C C WOOD FUNCTION. C 40 CONTINUE TEMP1 = X(2) - X(1)**2 TEMP2 = X(4) - X(3)**2 FVEC(1) = -C3*X(1)*TEMP1 - (ONE - X(1)) FVEC(2) = C3*TEMP1 + C4*(X(2) - ONE) + C5*(X(4) - ONE) FVEC(3) = -C6*X(3)*TEMP2 - (ONE - X(3)) FVEC(4) = C6*TEMP2 + C4*(X(4) - ONE) + C5*(X(2) - ONE) GO TO 380 C C HELICAL VALLEY FUNCTION. C 50 CONTINUE TPI = EIGHT*DATAN(ONE) TEMP1 = DSIGN(C7,X(2)) IF (X(1) .GT. ZERO) TEMP1 = DATAN(X(2)/X(1))/TPI IF (X(1) .LT. ZERO) TEMP1 = DATAN(X(2)/X(1))/TPI + C8 TEMP2 = DSQRT(X(1)**2+X(2)**2) FVEC(1) = TEN*(X(3) - TEN*TEMP1) FVEC(2) = TEN*(TEMP2 - ONE) FVEC(3) = X(3) GO TO 380 C C WATSON FUNCTION. C 60 CONTINUE DO 70 K = 1, N FVEC(K) = ZERO 70 CONTINUE DO 110 I = 1, 29 TI = DFLOAT(I)/C9 SUM1 = ZERO TEMP = ONE DO 80 J = 2, N SUM1 = SUM1 + DFLOAT(J-1)*TEMP*X(J) TEMP = TI*TEMP 80 CONTINUE SUM2 = ZERO TEMP = ONE DO 90 J = 1, N SUM2 = SUM2 + TEMP*X(J) TEMP = TI*TEMP 90 CONTINUE TEMP1 = SUM1 - SUM2**2 - ONE TEMP2 = TWO*TI*SUM2 TEMP = ONE/TI DO 100 K = 1, N FVEC(K) = FVEC(K) + TEMP*(DFLOAT(K-1) - TEMP2)*TEMP1 TEMP = TI*TEMP 100 CONTINUE 110 CONTINUE TEMP = X(2) - X(1)**2 - ONE FVEC(1) = FVEC(1) + X(1)*(ONE - TWO*TEMP) FVEC(2) = FVEC(2) + TEMP GO TO 380 C C CHEBYQUAD FUNCTION. C 120 CONTINUE DO 130 K = 1, N FVEC(K) = ZERO 130 CONTINUE DO 150 J = 1, N TEMP1 = ONE TEMP2 = TWO*X(J) - ONE TEMP = TWO*TEMP2 DO 140 I = 1, N FVEC(I) = FVEC(I) + TEMP2 TI = TEMP*TEMP2 - TEMP1 TEMP1 = TEMP2 TEMP2 = TI 140 CONTINUE 150 CONTINUE TK = ONE/DFLOAT(N) IEV = -1 DO 160 K = 1, N FVEC(K) = TK*FVEC(K) IF (IEV .GT. 0) FVEC(K) = FVEC(K) + ONE/(DFLOAT(K)**2 - ONE) IEV = -IEV 160 CONTINUE GO TO 380 C C BROWN ALMOST-LINEAR FUNCTION. C 170 CONTINUE SUM = -DFLOAT(N+1) PROD = ONE DO 180 J = 1, N SUM = SUM + X(J) PROD = X(J)*PROD 180 CONTINUE DO 190 K = 1, N FVEC(K) = X(K) + SUM 190 CONTINUE FVEC(N) = PROD - ONE GO TO 380 C C DISCRETE BOUNDARY VALUE FUNCTION. C 200 CONTINUE H = ONE/DFLOAT(N+1) DO 210 K = 1, N TEMP = (X(K) + DFLOAT(K)*H + ONE)**3 TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TWO*X(K) - TEMP1 - TEMP2 + TEMP*H**2/TWO 210 CONTINUE GO TO 380 C C DISCRETE INTEGRAL EQUATION FUNCTION. C 220 CONTINUE H = ONE/DFLOAT(N+1) DO 260 K = 1, N TK = DFLOAT(K)*H SUM1 = ZERO DO 230 J = 1, K TJ = DFLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM1 = SUM1 + TJ*TEMP 230 CONTINUE SUM2 = ZERO KP1 = K + 1 IF (N .LT. KP1) GO TO 250 DO 240 J = KP1, N TJ = DFLOAT(J)*H TEMP = (X(J) + TJ + ONE)**3 SUM2 = SUM2 + (ONE - TJ)*TEMP 240 CONTINUE 250 CONTINUE FVEC(K) = X(K) + H*((ONE - TK)*SUM1 + TK*SUM2)/TWO 260 CONTINUE GO TO 380 C C TRIGONOMETRIC FUNCTION. C 270 CONTINUE SUM = ZERO DO 280 J = 1, N FVEC(J) = DCOS(X(J)) SUM = SUM + FVEC(J) 280 CONTINUE DO 290 K = 1, N FVEC(K) = DFLOAT(N+K) - DSIN(X(K)) - SUM - DFLOAT(K)*FVEC(K) 290 CONTINUE GO TO 380 C C VARIABLY DIMENSIONED FUNCTION. C 300 CONTINUE SUM = ZERO DO 310 J = 1, N SUM = SUM + DFLOAT(J)*(X(J) - ONE) 310 CONTINUE TEMP = SUM*(ONE + TWO*SUM**2) DO 320 K = 1, N FVEC(K) = X(K) - ONE + DFLOAT(K)*TEMP 320 CONTINUE GO TO 380 C C BROYDEN TRIDIAGONAL FUNCTION. C 330 CONTINUE DO 340 K = 1, N TEMP = (THREE - TWO*X(K))*X(K) TEMP1 = ZERO IF (K .NE. 1) TEMP1 = X(K-1) TEMP2 = ZERO IF (K .NE. N) TEMP2 = X(K+1) FVEC(K) = TEMP - TEMP1 - TWO*TEMP2 + ONE 340 CONTINUE GO TO 380 C C BROYDEN BANDED FUNCTION. C 350 CONTINUE ML = 5 MU = 1 DO 370 K = 1, N K1 = MAX0(1,K-ML) K2 = MIN0(K+MU,N) TEMP = ZERO DO 360 J = K1, K2 IF (J .NE. K) TEMP = TEMP + X(J)*(ONE + X(J)) 360 CONTINUE FVEC(K) = X(K)*(TWO + FIVE*X(K)**2) + ONE - TEMP 370 CONTINUE 380 CONTINUE RETURN C C LAST CARD OF SUBROUTINE VECFCN. C END PyBDSF-1.10.1/src/minpack/ex/file21000066400000000000000000000005601420247104600164540ustar00rootroot00000000000000 1 2 3 2 4 3 3 2 2 4 4 3 5 3 3 6 6 2 6 9 2 7 5 3 7 6 3 7 7 3 7 8 1 7 9 1 8 10 3 8 30 1 8 40 1 9 10 3 10 1 3 10 10 3 11 10 3 12 10 3 13 10 3 14 10 3 0 0 0 PyBDSF-1.10.1/src/minpack/ex/file22000066400000000000000000000011411420247104600164510ustar00rootroot00000000000000 1 5 10 1 1 5 50 1 2 5 10 1 2 5 50 1 3 5 10 1 3 5 50 1 4 2 2 3 5 3 3 3 6 4 4 3 7 2 2 3 8 3 15 3 9 4 11 3 10 3 16 2 11 6 31 3 11 9 31 3 11 12 31 3 12 3 10 1 13 2 10 1 14 4 20 3 15 1 8 3 15 8 8 1 15 9 9 1 15 10 10 1 16 10 10 3 16 30 30 1 16 40 40 1 17 5 33 1 18 11 65 1 0 0 0 0 PyBDSF-1.10.1/src/minpack/ex/file23000066400000000000000000000002451420247104600164560ustar00rootroot00000000000000 1 2 2 4 3 2 4 4 5 3 6 9 7 7 8 10 9 10 10 10 11 10 12 10 13 10 14 10 0 0 PyBDSF-1.10.1/src/minpack/ex/index.html000066400000000000000000000033371420247104600174510ustar00rootroot00000000000000 minpack/ex

minpack/ex

Click here to see the number of accesses to this library.


file	file01
for	Function SPMPAR

file	file02
for	MINPACK-1
prec	single

file	file03
for	MINPACK-1 documentation
,	unfortunately, column 73 was lost at Argonne long ago
prec	single

file	file04
for	Function DPMPAR

file	file05
for	MINPACK-1

file	file06
for	MINPACK-1 documentation
,	unfortunately, column 73 was lost at Argonne long ago
prec	double

file	file07
for	SMCHAR test

file	file08
for	HYBRD  test
prec	single

file	file09
for	HYBRJ  test
prec	single

file	file10
for	LMDER  test
prec	single

file	file11
for	LMSTR  test
prec	single

file	file12
for	LMDIF  test
prec	single

file	file13
for	CHKDER test
prec	single

file	file14
for	DMCHAR test

file	file15
for	HYBRD  test
prec	double

file	file16
for	HYBRJ  test
prec	double

file	file17
for	LMDER  test
prec	double

file	file18
for	LMSTR  test
prec	double

file	file19
for	LMDIF  test
prec	double

file	file20
for	CHKDER test
prec	double

file	file21
for	HYBRD and HYBRJ data

file	file22
for	LMDER, LMSTR, and LMDIf data

file	file23
for	CHKDER data

PyBDSF-1.10.1/src/minpack/fdjac1.f000066400000000000000000000115261420247104600163360ustar00rootroot00000000000000 subroutine fdjac1(fcn,n,x,fvec,fjac,ldfjac,iflag,ml,mu,epsfcn, * wa1,wa2) integer n,ldfjac,iflag,ml,mu double precision epsfcn double precision x(n),fvec(n),fjac(ldfjac,n),wa1(n),wa2(n) c ********** c c subroutine fdjac1 c c this subroutine computes a forward-difference approximation c to the n by n jacobian matrix associated with a specified c problem of n functions in n variables. if the jacobian has c a banded form, then function evaluations are saved by only c approximating the nonzero terms. c c the subroutine statement is c c subroutine fdjac1(fcn,n,x,fvec,fjac,ldfjac,iflag,ml,mu,epsfcn, c wa1,wa2) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions. fcn must be declared c in an external statement in the user calling c program, and should be written as follows. c c subroutine fcn(n,x,fvec,iflag) c integer n,iflag c double precision x(n),fvec(n) c ---------- c calculate the functions at x and c return this vector in fvec. c ---------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of fdjac1. c in this case set iflag to a negative integer. c c n is a positive integer input variable set to the number c of functions and variables. c c x is an input array of length n. c c fvec is an input array of length n which must contain the c functions evaluated at x. c c fjac is an output n by n array which contains the c approximation to the jacobian matrix evaluated at x. c c ldfjac is a positive integer input variable not less than n c which specifies the leading dimension of the array fjac. c c iflag is an integer variable which can be used to terminate c the execution of fdjac1. see description of fcn. c c ml is a nonnegative integer input variable which specifies c the number of subdiagonals within the band of the c jacobian matrix. if the jacobian is not banded, set c ml to at least n - 1. c c epsfcn is an input variable used in determining a suitable c step length for the forward-difference approximation. this c approximation assumes that the relative errors in the c functions are of the order of epsfcn. if epsfcn is less c than the machine precision, it is assumed that the relative c errors in the functions are of the order of the machine c precision. c c mu is a nonnegative integer input variable which specifies c the number of superdiagonals within the band of the c jacobian matrix. if the jacobian is not banded, set c mu to at least n - 1. c c wa1 and wa2 are work arrays of length n. if ml + mu + 1 is at c least n, then the jacobian is considered dense, and wa2 is c not referenced. c c subprograms called c c minpack-supplied ... dpmpar c c fortran-supplied ... dabs,dmax1,dsqrt c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,j,k,msum double precision eps,epsmch,h,temp,zero double precision dpmpar data zero /0.0d0/ c c epsmch is the machine precision. c epsmch = dpmpar(1) c eps = dsqrt(dmax1(epsfcn,epsmch)) msum = ml + mu + 1 if (msum .lt. n) go to 40 c c computation of dense approximate jacobian. c do 20 j = 1, n temp = x(j) h = eps*dabs(temp) if (h .eq. zero) h = eps x(j) = temp + h call fcn(n,x,wa1,iflag) if (iflag .lt. 0) go to 30 x(j) = temp do 10 i = 1, n fjac(i,j) = (wa1(i) - fvec(i))/h 10 continue 20 continue 30 continue go to 110 40 continue c c computation of banded approximate jacobian. c do 90 k = 1, msum do 60 j = k, n, msum wa2(j) = x(j) h = eps*dabs(wa2(j)) if (h .eq. zero) h = eps x(j) = wa2(j) + h 60 continue call fcn(n,x,wa1,iflag) if (iflag .lt. 0) go to 100 do 80 j = k, n, msum x(j) = wa2(j) h = eps*dabs(wa2(j)) if (h .eq. zero) h = eps do 70 i = 1, n fjac(i,j) = zero if (i .ge. j - mu .and. i .le. j + ml) * fjac(i,j) = (wa1(i) - fvec(i))/h 70 continue 80 continue 90 continue 100 continue 110 continue return c c last card of subroutine fdjac1. c end PyBDSF-1.10.1/src/minpack/fdjac2.f000066400000000000000000000064141420247104600163370ustar00rootroot00000000000000 subroutine fdjac2(fcn,m,n,x,fvec,fjac,ldfjac,iflag,epsfcn,wa) integer m,n,ldfjac,iflag double precision epsfcn double precision x(n),fvec(m),fjac(ldfjac,n),wa(m) c ********** c c subroutine fdjac2 c c this subroutine computes a forward-difference approximation c to the m by n jacobian matrix associated with a specified c problem of m functions in n variables. c c the subroutine statement is c c subroutine fdjac2(fcn,m,n,x,fvec,fjac,ldfjac,iflag,epsfcn,wa) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions. fcn must be declared c in an external statement in the user calling c program, and should be written as follows. c c subroutine fcn(m,n,x,fvec,iflag) c integer m,n,iflag c double precision x(n),fvec(m) c ---------- c calculate the functions at x and c return this vector in fvec. c ---------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of fdjac2. c in this case set iflag to a negative integer. c c m is a positive integer input variable set to the number c of functions. c c n is a positive integer input variable set to the number c of variables. n must not exceed m. c c x is an input array of length n. c c fvec is an input array of length m which must contain the c functions evaluated at x. c c fjac is an output m by n array which contains the c approximation to the jacobian matrix evaluated at x. c c ldfjac is a positive integer input variable not less than m c which specifies the leading dimension of the array fjac. c c iflag is an integer variable which can be used to terminate c the execution of fdjac2. see description of fcn. c c epsfcn is an input variable used in determining a suitable c step length for the forward-difference approximation. this c approximation assumes that the relative errors in the c functions are of the order of epsfcn. if epsfcn is less c than the machine precision, it is assumed that the relative c errors in the functions are of the order of the machine c precision. c c wa is a work array of length m. c c subprograms called c c user-supplied ...... fcn c c minpack-supplied ... dpmpar c c fortran-supplied ... dabs,dmax1,dsqrt c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,j double precision eps,epsmch,h,temp,zero double precision dpmpar data zero /0.0d0/ c c epsmch is the machine precision. c epsmch = dpmpar(1) c eps = dsqrt(dmax1(epsfcn,epsmch)) do 20 j = 1, n temp = x(j) h = eps*dabs(temp) if (h .eq. zero) h = eps x(j) = temp + h call fcn(m,n,x,wa,iflag) if (iflag .lt. 0) go to 30 x(j) = temp do 10 i = 1, m fjac(i,j) = (wa(i) - fvec(i))/h 10 continue 20 continue 30 continue return c c last card of subroutine fdjac2. c end PyBDSF-1.10.1/src/minpack/hybrd.f000066400000000000000000000350541420247104600163200ustar00rootroot00000000000000 subroutine hybrd(fcn,n,x,fvec,xtol,maxfev,ml,mu,epsfcn,diag, * mode,factor,nprint,info,nfev,fjac,ldfjac,r,lr, * qtf,wa1,wa2,wa3,wa4) integer n,maxfev,ml,mu,mode,nprint,info,nfev,ldfjac,lr double precision xtol,epsfcn,factor double precision x(n),fvec(n),diag(n),fjac(ldfjac,n),r(lr), * qtf(n),wa1(n),wa2(n),wa3(n),wa4(n) external fcn c ********** c c subroutine hybrd c c the purpose of hybrd is to find a zero of a system of c n nonlinear functions in n variables by a modification c of the powell hybrid method. the user must provide a c subroutine which calculates the functions. the jacobian is c then calculated by a forward-difference approximation. c c the subroutine statement is c c subroutine hybrd(fcn,n,x,fvec,xtol,maxfev,ml,mu,epsfcn, c diag,mode,factor,nprint,info,nfev,fjac, c ldfjac,r,lr,qtf,wa1,wa2,wa3,wa4) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions. fcn must be declared c in an external statement in the user calling c program, and should be written as follows. c c subroutine fcn(n,x,fvec,iflag) c integer n,iflag c double precision x(n),fvec(n) c ---------- c calculate the functions at x and c return this vector in fvec. c --------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of hybrd. c in this case set iflag to a negative integer. c c n is a positive integer input variable set to the number c of functions and variables. c c x is an array of length n. on input x must contain c an initial estimate of the solution vector. on output x c contains the final estimate of the solution vector. c c fvec is an output array of length n which contains c the functions evaluated at the output x. c c xtol is a nonnegative input variable. termination c occurs when the relative error between two consecutive c iterates is at most xtol. c c maxfev is a positive integer input variable. termination c occurs when the number of calls to fcn is at least maxfev c by the end of an iteration. c c ml is a nonnegative integer input variable which specifies c the number of subdiagonals within the band of the c jacobian matrix. if the jacobian is not banded, set c ml to at least n - 1. c c mu is a nonnegative integer input variable which specifies c the number of superdiagonals within the band of the c jacobian matrix. if the jacobian is not banded, set c mu to at least n - 1. c c epsfcn is an input variable used in determining a suitable c step length for the forward-difference approximation. this c approximation assumes that the relative errors in the c functions are of the order of epsfcn. if epsfcn is less c than the machine precision, it is assumed that the relative c errors in the functions are of the order of the machine c precision. c c diag is an array of length n. if mode = 1 (see c below), diag is internally set. if mode = 2, diag c must contain positive entries that serve as c multiplicative scale factors for the variables. c c mode is an integer input variable. if mode = 1, the c variables will be scaled internally. if mode = 2, c the scaling is specified by the input diag. other c values of mode are equivalent to mode = 1. c c factor is a positive input variable used in determining the c initial step bound. this bound is set to the product of c factor and the euclidean norm of diag*x if nonzero, or else c to factor itself. in most cases factor should lie in the c interval (.1,100.). 100. is a generally recommended value. c c nprint is an integer input variable that enables controlled c printing of iterates if it is positive. in this case, c fcn is called with iflag = 0 at the beginning of the first c iteration and every nprint iterations thereafter and c immediately prior to return, with x and fvec available c for printing. if nprint is not positive, no special calls c of fcn with iflag = 0 are made. c c info is an integer output variable. if the user has c terminated execution, info is set to the (negative) c value of iflag. see description of fcn. otherwise, c info is set as follows. c c info = 0 improper input parameters. c c info = 1 relative error between two consecutive iterates c is at most xtol. c c info = 2 number of calls to fcn has reached or exceeded c maxfev. c c info = 3 xtol is too small. no further improvement in c the approximate solution x is possible. c c info = 4 iteration is not making good progress, as c measured by the improvement from the last c five jacobian evaluations. c c info = 5 iteration is not making good progress, as c measured by the improvement from the last c ten iterations. c c nfev is an integer output variable set to the number of c calls to fcn. c c fjac is an output n by n array which contains the c orthogonal matrix q produced by the qr factorization c of the final approximate jacobian. c c ldfjac is a positive integer input variable not less than n c which specifies the leading dimension of the array fjac. c c r is an output array of length lr which contains the c upper triangular matrix produced by the qr factorization c of the final approximate jacobian, stored rowwise. c c lr is a positive integer input variable not less than c (n*(n+1))/2. c c qtf is an output array of length n which contains c the vector (q transpose)*fvec. c c wa1, wa2, wa3, and wa4 are work arrays of length n. c c subprograms called c c user-supplied ...... fcn c c minpack-supplied ... dogleg,dpmpar,enorm,fdjac1, c qform,qrfac,r1mpyq,r1updt c c fortran-supplied ... dabs,dmax1,dmin1,min0,mod c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,iflag,iter,j,jm1,l,msum,ncfail,ncsuc,nslow1,nslow2 integer iwa(1) logical jeval,sing double precision actred,delta,epsmch,fnorm,fnorm1,one,pnorm, * prered,p1,p5,p001,p0001,ratio,sum,temp,xnorm, * zero double precision dpmpar,enorm data one,p1,p5,p001,p0001,zero * /1.0d0,1.0d-1,5.0d-1,1.0d-3,1.0d-4,0.0d0/ c c epsmch is the machine precision. c epsmch = dpmpar(1) c info = 0 iflag = 0 nfev = 0 c c check the input parameters for errors. c if (n .le. 0 .or. xtol .lt. zero .or. maxfev .le. 0 * .or. ml .lt. 0 .or. mu .lt. 0 .or. factor .le. zero * .or. ldfjac .lt. n .or. lr .lt. (n*(n + 1))/2) go to 300 if (mode .ne. 2) go to 20 do 10 j = 1, n if (diag(j) .le. zero) go to 300 10 continue 20 continue c c evaluate the function at the starting point c and calculate its norm. c iflag = 1 call fcn(n,x,fvec,iflag) nfev = 1 if (iflag .lt. 0) go to 300 fnorm = enorm(n,fvec) c c determine the number of calls to fcn needed to compute c the jacobian matrix. c msum = min0(ml+mu+1,n) c c initialize iteration counter and monitors. c iter = 1 ncsuc = 0 ncfail = 0 nslow1 = 0 nslow2 = 0 c c beginning of the outer loop. c 30 continue jeval = .true. c c calculate the jacobian matrix. c iflag = 2 call fdjac1(fcn,n,x,fvec,fjac,ldfjac,iflag,ml,mu,epsfcn,wa1, * wa2) nfev = nfev + msum if (iflag .lt. 0) go to 300 c c compute the qr factorization of the jacobian. c call qrfac(n,n,fjac,ldfjac,.false.,iwa,1,wa1,wa2,wa3) c c on the first iteration and if mode is 1, scale according c to the norms of the columns of the initial jacobian. c if (iter .ne. 1) go to 70 if (mode .eq. 2) go to 50 do 40 j = 1, n diag(j) = wa2(j) if (wa2(j) .eq. zero) diag(j) = one 40 continue 50 continue c c on the first iteration, calculate the norm of the scaled x c and initialize the step bound delta. c do 60 j = 1, n wa3(j) = diag(j)*x(j) 60 continue xnorm = enorm(n,wa3) delta = factor*xnorm if (delta .eq. zero) delta = factor 70 continue c c form (q transpose)*fvec and store in qtf. c do 80 i = 1, n qtf(i) = fvec(i) 80 continue do 120 j = 1, n if (fjac(j,j) .eq. zero) go to 110 sum = zero do 90 i = j, n sum = sum + fjac(i,j)*qtf(i) 90 continue temp = -sum/fjac(j,j) do 100 i = j, n qtf(i) = qtf(i) + fjac(i,j)*temp 100 continue 110 continue 120 continue c c copy the triangular factor of the qr factorization into r. c sing = .false. do 150 j = 1, n l = j jm1 = j - 1 if (jm1 .lt. 1) go to 140 do 130 i = 1, jm1 r(l) = fjac(i,j) l = l + n - i 130 continue 140 continue r(l) = wa1(j) if (wa1(j) .eq. zero) sing = .true. 150 continue c c accumulate the orthogonal factor in fjac. c call qform(n,n,fjac,ldfjac,wa1) c c rescale if necessary. c if (mode .eq. 2) go to 170 do 160 j = 1, n diag(j) = dmax1(diag(j),wa2(j)) 160 continue 170 continue c c beginning of the inner loop. c 180 continue c c if requested, call fcn to enable printing of iterates. c if (nprint .le. 0) go to 190 iflag = 0 if (mod(iter-1,nprint) .eq. 0) call fcn(n,x,fvec,iflag) if (iflag .lt. 0) go to 300 190 continue c c determine the direction p. c call dogleg(n,r,lr,diag,qtf,delta,wa1,wa2,wa3) c c store the direction p and x + p. calculate the norm of p. c do 200 j = 1, n wa1(j) = -wa1(j) wa2(j) = x(j) + wa1(j) wa3(j) = diag(j)*wa1(j) 200 continue pnorm = enorm(n,wa3) c c on the first iteration, adjust the initial step bound. c if (iter .eq. 1) delta = dmin1(delta,pnorm) c c evaluate the function at x + p and calculate its norm. c iflag = 1 call fcn(n,wa2,wa4,iflag) nfev = nfev + 1 if (iflag .lt. 0) go to 300 fnorm1 = enorm(n,wa4) c c compute the scaled actual reduction. c actred = -one if (fnorm1 .lt. fnorm) actred = one - (fnorm1/fnorm)**2 c c compute the scaled predicted reduction. c l = 1 do 220 i = 1, n sum = zero do 210 j = i, n sum = sum + r(l)*wa1(j) l = l + 1 210 continue wa3(i) = qtf(i) + sum 220 continue temp = enorm(n,wa3) prered = zero if (temp .lt. fnorm) prered = one - (temp/fnorm)**2 c c compute the ratio of the actual to the predicted c reduction. c ratio = zero if (prered .gt. zero) ratio = actred/prered c c update the step bound. c if (ratio .ge. p1) go to 230 ncsuc = 0 ncfail = ncfail + 1 delta = p5*delta go to 240 230 continue ncfail = 0 ncsuc = ncsuc + 1 if (ratio .ge. p5 .or. ncsuc .gt. 1) * delta = dmax1(delta,pnorm/p5) if (dabs(ratio-one) .le. p1) delta = pnorm/p5 240 continue c c test for successful iteration. c if (ratio .lt. p0001) go to 260 c c successful iteration. update x, fvec, and their norms. c do 250 j = 1, n x(j) = wa2(j) wa2(j) = diag(j)*x(j) fvec(j) = wa4(j) 250 continue xnorm = enorm(n,wa2) fnorm = fnorm1 iter = iter + 1 260 continue c c determine the progress of the iteration. c nslow1 = nslow1 + 1 if (actred .ge. p001) nslow1 = 0 if (jeval) nslow2 = nslow2 + 1 if (actred .ge. p1) nslow2 = 0 c c test for convergence. c if (delta .le. xtol*xnorm .or. fnorm .eq. zero) info = 1 if (info .ne. 0) go to 300 c c tests for termination and stringent tolerances. c if (nfev .ge. maxfev) info = 2 if (p1*dmax1(p1*delta,pnorm) .le. epsmch*xnorm) info = 3 if (nslow2 .eq. 5) info = 4 if (nslow1 .eq. 10) info = 5 if (info .ne. 0) go to 300 c c criterion for recalculating jacobian approximation c by forward differences. c if (ncfail .eq. 2) go to 290 c c calculate the rank one modification to the jacobian c and update qtf if necessary. c do 280 j = 1, n sum = zero do 270 i = 1, n sum = sum + fjac(i,j)*wa4(i) 270 continue wa2(j) = (sum - wa3(j))/pnorm wa1(j) = diag(j)*((diag(j)*wa1(j))/pnorm) if (ratio .ge. p0001) qtf(j) = sum 280 continue c c compute the qr factorization of the updated jacobian. c call r1updt(n,n,r,lr,wa1,wa2,wa3,sing) call r1mpyq(n,n,fjac,ldfjac,wa2,wa3) call r1mpyq(1,n,qtf,1,wa2,wa3) c c end of the inner loop. c jeval = .false. go to 180 290 continue c c end of the outer loop. c go to 30 300 continue c c termination, either normal or user imposed. c if (iflag .lt. 0) info = iflag iflag = 0 if (nprint .gt. 0) call fcn(n,x,fvec,iflag) return c c last card of subroutine hybrd. c end PyBDSF-1.10.1/src/minpack/hybrd1.f000066400000000000000000000075241420247104600164020ustar00rootroot00000000000000 subroutine hybrd1(fcn,n,x,fvec,tol,info,wa,lwa) integer n,info,lwa double precision tol double precision x(n),fvec(n),wa(lwa) external fcn c ********** c c subroutine hybrd1 c c the purpose of hybrd1 is to find a zero of a system of c n nonlinear functions in n variables by a modification c of the powell hybrid method. this is done by using the c more general nonlinear equation solver hybrd. the user c must provide a subroutine which calculates the functions. c the jacobian is then calculated by a forward-difference c approximation. c c the subroutine statement is c c subroutine hybrd1(fcn,n,x,fvec,tol,info,wa,lwa) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions. fcn must be declared c in an external statement in the user calling c program, and should be written as follows. c c subroutine fcn(n,x,fvec,iflag) c integer n,iflag c double precision x(n),fvec(n) c ---------- c calculate the functions at x and c return this vector in fvec. c --------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of hybrd1. c in this case set iflag to a negative integer. c c n is a positive integer input variable set to the number c of functions and variables. c c x is an array of length n. on input x must contain c an initial estimate of the solution vector. on output x c contains the final estimate of the solution vector. c c fvec is an output array of length n which contains c the functions evaluated at the output x. c c tol is a nonnegative input variable. termination occurs c when the algorithm estimates that the relative error c between x and the solution is at most tol. c c info is an integer output variable. if the user has c terminated execution, info is set to the (negative) c value of iflag. see description of fcn. otherwise, c info is set as follows. c c info = 0 improper input parameters. c c info = 1 algorithm estimates that the relative error c between x and the solution is at most tol. c c info = 2 number of calls to fcn has reached or exceeded c 200*(n+1). c c info = 3 tol is too small. no further improvement in c the approximate solution x is possible. c c info = 4 iteration is not making good progress. c c wa is a work array of length lwa. c c lwa is a positive integer input variable not less than c (n*(3*n+13))/2. c c subprograms called c c user-supplied ...... fcn c c minpack-supplied ... hybrd c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer index,j,lr,maxfev,ml,mode,mu,nfev,nprint double precision epsfcn,factor,one,xtol,zero data factor,one,zero /1.0d2,1.0d0,0.0d0/ info = 0 c c check the input parameters for errors. c if (n .le. 0 .or. tol .lt. zero .or. lwa .lt. (n*(3*n + 13))/2) * go to 20 c c call hybrd. c maxfev = 200*(n + 1) xtol = tol ml = n - 1 mu = n - 1 epsfcn = zero mode = 2 do 10 j = 1, n wa(j) = one 10 continue nprint = 0 lr = (n*(n + 1))/2 index = 6*n + lr call hybrd(fcn,n,x,fvec,xtol,maxfev,ml,mu,epsfcn,wa(1),mode, * factor,nprint,info,nfev,wa(index+1),n,wa(6*n+1),lr, * wa(n+1),wa(2*n+1),wa(3*n+1),wa(4*n+1),wa(5*n+1)) if (info .eq. 5) info = 4 20 continue return c c last card of subroutine hybrd1. c end PyBDSF-1.10.1/src/minpack/hybrj.f000066400000000000000000000333751420247104600163320ustar00rootroot00000000000000 subroutine hybrj(fcn,n,x,fvec,fjac,ldfjac,xtol,maxfev,diag,mode, * factor,nprint,info,nfev,njev,r,lr,qtf,wa1,wa2, * wa3,wa4) integer n,ldfjac,maxfev,mode,nprint,info,nfev,njev,lr double precision xtol,factor double precision x(n),fvec(n),fjac(ldfjac,n),diag(n),r(lr), * qtf(n),wa1(n),wa2(n),wa3(n),wa4(n) c ********** c c subroutine hybrj c c the purpose of hybrj is to find a zero of a system of c n nonlinear functions in n variables by a modification c of the powell hybrid method. the user must provide a c subroutine which calculates the functions and the jacobian. c c the subroutine statement is c c subroutine hybrj(fcn,n,x,fvec,fjac,ldfjac,xtol,maxfev,diag, c mode,factor,nprint,info,nfev,njev,r,lr,qtf, c wa1,wa2,wa3,wa4) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions and the jacobian. fcn must c be declared in an external statement in the user c calling program, and should be written as follows. c c subroutine fcn(n,x,fvec,fjac,ldfjac,iflag) c integer n,ldfjac,iflag c double precision x(n),fvec(n),fjac(ldfjac,n) c ---------- c if iflag = 1 calculate the functions at x and c return this vector in fvec. do not alter fjac. c if iflag = 2 calculate the jacobian at x and c return this matrix in fjac. do not alter fvec. c --------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of hybrj. c in this case set iflag to a negative integer. c c n is a positive integer input variable set to the number c of functions and variables. c c x is an array of length n. on input x must contain c an initial estimate of the solution vector. on output x c contains the final estimate of the solution vector. c c fvec is an output array of length n which contains c the functions evaluated at the output x. c c fjac is an output n by n array which contains the c orthogonal matrix q produced by the qr factorization c of the final approximate jacobian. c c ldfjac is a positive integer input variable not less than n c which specifies the leading dimension of the array fjac. c c xtol is a nonnegative input variable. termination c occurs when the relative error between two consecutive c iterates is at most xtol. c c maxfev is a positive integer input variable. termination c occurs when the number of calls to fcn with iflag = 1 c has reached maxfev. c c diag is an array of length n. if mode = 1 (see c below), diag is internally set. if mode = 2, diag c must contain positive entries that serve as c multiplicative scale factors for the variables. c c mode is an integer input variable. if mode = 1, the c variables will be scaled internally. if mode = 2, c the scaling is specified by the input diag. other c values of mode are equivalent to mode = 1. c c factor is a positive input variable used in determining the c initial step bound. this bound is set to the product of c factor and the euclidean norm of diag*x if nonzero, or else c to factor itself. in most cases factor should lie in the c interval (.1,100.). 100. is a generally recommended value. c c nprint is an integer input variable that enables controlled c printing of iterates if it is positive. in this case, c fcn is called with iflag = 0 at the beginning of the first c iteration and every nprint iterations thereafter and c immediately prior to return, with x and fvec available c for printing. fvec and fjac should not be altered. c if nprint is not positive, no special calls of fcn c with iflag = 0 are made. c c info is an integer output variable. if the user has c terminated execution, info is set to the (negative) c value of iflag. see description of fcn. otherwise, c info is set as follows. c c info = 0 improper input parameters. c c info = 1 relative error between two consecutive iterates c is at most xtol. c c info = 2 number of calls to fcn with iflag = 1 has c reached maxfev. c c info = 3 xtol is too small. no further improvement in c the approximate solution x is possible. c c info = 4 iteration is not making good progress, as c measured by the improvement from the last c five jacobian evaluations. c c info = 5 iteration is not making good progress, as c measured by the improvement from the last c ten iterations. c c nfev is an integer output variable set to the number of c calls to fcn with iflag = 1. c c njev is an integer output variable set to the number of c calls to fcn with iflag = 2. c c r is an output array of length lr which contains the c upper triangular matrix produced by the qr factorization c of the final approximate jacobian, stored rowwise. c c lr is a positive integer input variable not less than c (n*(n+1))/2. c c qtf is an output array of length n which contains c the vector (q transpose)*fvec. c c wa1, wa2, wa3, and wa4 are work arrays of length n. c c subprograms called c c user-supplied ...... fcn c c minpack-supplied ... dogleg,dpmpar,enorm, c qform,qrfac,r1mpyq,r1updt c c fortran-supplied ... dabs,dmax1,dmin1,mod c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,iflag,iter,j,jm1,l,ncfail,ncsuc,nslow1,nslow2 integer iwa(1) logical jeval,sing double precision actred,delta,epsmch,fnorm,fnorm1,one,pnorm, * prered,p1,p5,p001,p0001,ratio,sum,temp,xnorm, * zero double precision dpmpar,enorm data one,p1,p5,p001,p0001,zero * /1.0d0,1.0d-1,5.0d-1,1.0d-3,1.0d-4,0.0d0/ c c epsmch is the machine precision. c epsmch = dpmpar(1) c info = 0 iflag = 0 nfev = 0 njev = 0 c c check the input parameters for errors. c if (n .le. 0 .or. ldfjac .lt. n .or. xtol .lt. zero * .or. maxfev .le. 0 .or. factor .le. zero * .or. lr .lt. (n*(n + 1))/2) go to 300 if (mode .ne. 2) go to 20 do 10 j = 1, n if (diag(j) .le. zero) go to 300 10 continue 20 continue c c evaluate the function at the starting point c and calculate its norm. c iflag = 1 call fcn(n,x,fvec,fjac,ldfjac,iflag) nfev = 1 if (iflag .lt. 0) go to 300 fnorm = enorm(n,fvec) c c initialize iteration counter and monitors. c iter = 1 ncsuc = 0 ncfail = 0 nslow1 = 0 nslow2 = 0 c c beginning of the outer loop. c 30 continue jeval = .true. c c calculate the jacobian matrix. c iflag = 2 call fcn(n,x,fvec,fjac,ldfjac,iflag) njev = njev + 1 if (iflag .lt. 0) go to 300 c c compute the qr factorization of the jacobian. c call qrfac(n,n,fjac,ldfjac,.false.,iwa,1,wa1,wa2,wa3) c c on the first iteration and if mode is 1, scale according c to the norms of the columns of the initial jacobian. c if (iter .ne. 1) go to 70 if (mode .eq. 2) go to 50 do 40 j = 1, n diag(j) = wa2(j) if (wa2(j) .eq. zero) diag(j) = one 40 continue 50 continue c c on the first iteration, calculate the norm of the scaled x c and initialize the step bound delta. c do 60 j = 1, n wa3(j) = diag(j)*x(j) 60 continue xnorm = enorm(n,wa3) delta = factor*xnorm if (delta .eq. zero) delta = factor 70 continue c c form (q transpose)*fvec and store in qtf. c do 80 i = 1, n qtf(i) = fvec(i) 80 continue do 120 j = 1, n if (fjac(j,j) .eq. zero) go to 110 sum = zero do 90 i = j, n sum = sum + fjac(i,j)*qtf(i) 90 continue temp = -sum/fjac(j,j) do 100 i = j, n qtf(i) = qtf(i) + fjac(i,j)*temp 100 continue 110 continue 120 continue c c copy the triangular factor of the qr factorization into r. c sing = .false. do 150 j = 1, n l = j jm1 = j - 1 if (jm1 .lt. 1) go to 140 do 130 i = 1, jm1 r(l) = fjac(i,j) l = l + n - i 130 continue 140 continue r(l) = wa1(j) if (wa1(j) .eq. zero) sing = .true. 150 continue c c accumulate the orthogonal factor in fjac. c call qform(n,n,fjac,ldfjac,wa1) c c rescale if necessary. c if (mode .eq. 2) go to 170 do 160 j = 1, n diag(j) = dmax1(diag(j),wa2(j)) 160 continue 170 continue c c beginning of the inner loop. c 180 continue c c if requested, call fcn to enable printing of iterates. c if (nprint .le. 0) go to 190 iflag = 0 if (mod(iter-1,nprint) .eq. 0) * call fcn(n,x,fvec,fjac,ldfjac,iflag) if (iflag .lt. 0) go to 300 190 continue c c determine the direction p. c call dogleg(n,r,lr,diag,qtf,delta,wa1,wa2,wa3) c c store the direction p and x + p. calculate the norm of p. c do 200 j = 1, n wa1(j) = -wa1(j) wa2(j) = x(j) + wa1(j) wa3(j) = diag(j)*wa1(j) 200 continue pnorm = enorm(n,wa3) c c on the first iteration, adjust the initial step bound. c if (iter .eq. 1) delta = dmin1(delta,pnorm) c c evaluate the function at x + p and calculate its norm. c iflag = 1 call fcn(n,wa2,wa4,fjac,ldfjac,iflag) nfev = nfev + 1 if (iflag .lt. 0) go to 300 fnorm1 = enorm(n,wa4) c c compute the scaled actual reduction. c actred = -one if (fnorm1 .lt. fnorm) actred = one - (fnorm1/fnorm)**2 c c compute the scaled predicted reduction. c l = 1 do 220 i = 1, n sum = zero do 210 j = i, n sum = sum + r(l)*wa1(j) l = l + 1 210 continue wa3(i) = qtf(i) + sum 220 continue temp = enorm(n,wa3) prered = zero if (temp .lt. fnorm) prered = one - (temp/fnorm)**2 c c compute the ratio of the actual to the predicted c reduction. c ratio = zero if (prered .gt. zero) ratio = actred/prered c c update the step bound. c if (ratio .ge. p1) go to 230 ncsuc = 0 ncfail = ncfail + 1 delta = p5*delta go to 240 230 continue ncfail = 0 ncsuc = ncsuc + 1 if (ratio .ge. p5 .or. ncsuc .gt. 1) * delta = dmax1(delta,pnorm/p5) if (dabs(ratio-one) .le. p1) delta = pnorm/p5 240 continue c c test for successful iteration. c if (ratio .lt. p0001) go to 260 c c successful iteration. update x, fvec, and their norms. c do 250 j = 1, n x(j) = wa2(j) wa2(j) = diag(j)*x(j) fvec(j) = wa4(j) 250 continue xnorm = enorm(n,wa2) fnorm = fnorm1 iter = iter + 1 260 continue c c determine the progress of the iteration. c nslow1 = nslow1 + 1 if (actred .ge. p001) nslow1 = 0 if (jeval) nslow2 = nslow2 + 1 if (actred .ge. p1) nslow2 = 0 c c test for convergence. c if (delta .le. xtol*xnorm .or. fnorm .eq. zero) info = 1 if (info .ne. 0) go to 300 c c tests for termination and stringent tolerances. c if (nfev .ge. maxfev) info = 2 if (p1*dmax1(p1*delta,pnorm) .le. epsmch*xnorm) info = 3 if (nslow2 .eq. 5) info = 4 if (nslow1 .eq. 10) info = 5 if (info .ne. 0) go to 300 c c criterion for recalculating jacobian. c if (ncfail .eq. 2) go to 290 c c calculate the rank one modification to the jacobian c and update qtf if necessary. c do 280 j = 1, n sum = zero do 270 i = 1, n sum = sum + fjac(i,j)*wa4(i) 270 continue wa2(j) = (sum - wa3(j))/pnorm wa1(j) = diag(j)*((diag(j)*wa1(j))/pnorm) if (ratio .ge. p0001) qtf(j) = sum 280 continue c c compute the qr factorization of the updated jacobian. c call r1updt(n,n,r,lr,wa1,wa2,wa3,sing) call r1mpyq(n,n,fjac,ldfjac,wa2,wa3) call r1mpyq(1,n,qtf,1,wa2,wa3) c c end of the inner loop. c jeval = .false. go to 180 290 continue c c end of the outer loop. c go to 30 300 continue c c termination, either normal or user imposed. c if (iflag .lt. 0) info = iflag iflag = 0 if (nprint .gt. 0) call fcn(n,x,fvec,fjac,ldfjac,iflag) return c c last card of subroutine hybrj. c end PyBDSF-1.10.1/src/minpack/hybrj1.f000066400000000000000000000103501420247104600163770ustar00rootroot00000000000000 subroutine hybrj1(fcn,n,x,fvec,fjac,ldfjac,tol,info,wa,lwa) integer n,ldfjac,info,lwa double precision tol double precision x(n),fvec(n),fjac(ldfjac,n),wa(lwa) external fcn c ********** c c subroutine hybrj1 c c the purpose of hybrj1 is to find a zero of a system of c n nonlinear functions in n variables by a modification c of the powell hybrid method. this is done by using the c more general nonlinear equation solver hybrj. the user c must provide a subroutine which calculates the functions c and the jacobian. c c the subroutine statement is c c subroutine hybrj1(fcn,n,x,fvec,fjac,ldfjac,tol,info,wa,lwa) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions and the jacobian. fcn must c be declared in an external statement in the user c calling program, and should be written as follows. c c subroutine fcn(n,x,fvec,fjac,ldfjac,iflag) c integer n,ldfjac,iflag c double precision x(n),fvec(n),fjac(ldfjac,n) c ---------- c if iflag = 1 calculate the functions at x and c return this vector in fvec. do not alter fjac. c if iflag = 2 calculate the jacobian at x and c return this matrix in fjac. do not alter fvec. c --------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of hybrj1. c in this case set iflag to a negative integer. c c n is a positive integer input variable set to the number c of functions and variables. c c x is an array of length n. on input x must contain c an initial estimate of the solution vector. on output x c contains the final estimate of the solution vector. c c fvec is an output array of length n which contains c the functions evaluated at the output x. c c fjac is an output n by n array which contains the c orthogonal matrix q produced by the qr factorization c of the final approximate jacobian. c c ldfjac is a positive integer input variable not less than n c which specifies the leading dimension of the array fjac. c c tol is a nonnegative input variable. termination occurs c when the algorithm estimates that the relative error c between x and the solution is at most tol. c c info is an integer output variable. if the user has c terminated execution, info is set to the (negative) c value of iflag. see description of fcn. otherwise, c info is set as follows. c c info = 0 improper input parameters. c c info = 1 algorithm estimates that the relative error c between x and the solution is at most tol. c c info = 2 number of calls to fcn with iflag = 1 has c reached 100*(n+1). c c info = 3 tol is too small. no further improvement in c the approximate solution x is possible. c c info = 4 iteration is not making good progress. c c wa is a work array of length lwa. c c lwa is a positive integer input variable not less than c (n*(n+13))/2. c c subprograms called c c user-supplied ...... fcn c c minpack-supplied ... hybrj c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer j,lr,maxfev,mode,nfev,njev,nprint double precision factor,one,xtol,zero data factor,one,zero /1.0d2,1.0d0,0.0d0/ info = 0 c c check the input parameters for errors. c if (n .le. 0 .or. ldfjac .lt. n .or. tol .lt. zero * .or. lwa .lt. (n*(n + 13))/2) go to 20 c c call hybrj. c maxfev = 100*(n + 1) xtol = tol mode = 2 do 10 j = 1, n wa(j) = one 10 continue nprint = 0 lr = (n*(n + 1))/2 call hybrj(fcn,n,x,fvec,fjac,ldfjac,xtol,maxfev,wa(1),mode, * factor,nprint,info,nfev,njev,wa(6*n+1),lr,wa(n+1), * wa(2*n+1),wa(3*n+1),wa(4*n+1),wa(5*n+1)) if (info .eq. 5) info = 4 20 continue return c c last card of subroutine hybrj1. c end PyBDSF-1.10.1/src/minpack/index.html000066400000000000000000000101541420247104600170300ustar00rootroot00000000000000 minpack

minpack

Click here to see the number of accesses to this library.


file    disclaimer
for     MINPACK copyright notice

lib	ex
for	test programs

file	readme
for	overview of minpack

file	chkder.f  chkder.f plus dependencies
gams	F3,G4c,K6d
for	check gradients for consistency with functions

file	dogleg.f  dogleg.f plus dependencies
for	determine combination of gauss-newton and gradient directions

file	dpmpar.f
for	provide double precision machine parameters

file	enorm.f
for	calculate euclidean norm of vector

file	fdjac1.f  fdjac1.f plus dependencies
for	calculate difference approximation to jacobian (nonlinear equations)

file	fdjac2.f  fdjac2.f plus dependencies
for	calculate difference approximation to jacobian (least squares)

file	hybrd.f  hybrd.f plus dependencies
gams	F2
for	solve systems of nonlinear equations (approximate jacobian)

file	hybrd1.f  hybrd1.f plus dependencies
gams	F2
for	easy-to-use driver for (minpack/hybrd)

file	hybrj.f  hybrj.f plus dependencies
gams	F2
for	solve systems of nonlinear equations (analytic jacobian)

file	hybrj1.f  hybrj1.f plus dependencies
gams	F2
for	easy-to-use driver for (minpack/hybrj)

file	lmder.f  lmder.f plus dependencies
gams	K1b1a2
for	solve nonlinear least squares problem (analytic jacobian)

file	lmder1.f  lmder1.f plus dependencies
gams	K1b1a2
for	easy-to-use driver for (minpack/lmder)

file	lmdif.f  lmdif.f plus dependencies
gams	K1b1a1
for	solve nonlinear least squares problem (approximate jacobian)

file	lmdif1.f  lmdif1.f plus dependencies
gams	K1b1a1
for	easy-to-use driver for (minpack/lmdif)

file	lmpar.f  lmpar.f plus dependencies
for	determine levenberg-marquardt parameter

file	lmstr.f  lmstr.f plus dependencies
gams	K1b1a2
for	solve nonlinear least squares problem (storage conserving)

file	lmstr1.f  lmstr1.f plus dependencies
gams	K1b1a2
for	easy-to-use driver for (minpack/lmstr)

file	qform.f
for	accumulate orthogonal matrix from qr factorization

file	qrfac.f  qrfac.f plus dependencies
for	compute qr factorization of rectangular matrix

file	qrsolv.f
for	complete solution of least squares problem

file	rwupdt.f
for	update qr factorization after row addition

file	r1mpyq.f
for	apply orthogonal transformations from qr factorization

file	r1updt.f  r1updt.f plus dependencies
for	update qr factorization after rank-1 addition

PyBDSF-1.10.1/src/minpack/lmder.f000066400000000000000000000362361420247104600163160ustar00rootroot00000000000000 subroutine lmder(fcn,m,n,x,fvec,fjac,ldfjac,ftol,xtol,gtol, * maxfev,diag,mode,factor,nprint,info,nfev,njev, * ipvt,qtf,wa1,wa2,wa3,wa4,userpar) external fcn,userpar integer m,n,ldfjac,maxfev,mode,nprint,info,nfev,njev integer ipvt(n) double precision ftol,xtol,gtol,factor double precision x(n),fvec(m),fjac(ldfjac,n),diag(n),qtf(n), * wa1(n),wa2(n),wa3(n),wa4(m) c ********** c c subroutine lmder c c the purpose of lmder is to minimize the sum of the squares of c m nonlinear functions in n variables by a modification of c the levenberg-marquardt algorithm. the user must provide a c subroutine which calculates the functions and the jacobian. c c the subroutine statement is c c subroutine lmder(fcn,m,n,x,fvec,fjac,ldfjac,ftol,xtol,gtol, c maxfev,diag,mode,factor,nprint,info,nfev, c njev,ipvt,qtf,wa1,wa2,wa3,wa4) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions and the jacobian. fcn must c be declared in an external statement in the user c calling program, and should be written as follows. c c subroutine fcn(m,n,x,fvec,fjac,ldfjac,iflag) c integer m,n,ldfjac,iflag c double precision x(n),fvec(m),fjac(ldfjac,n) c ---------- c if iflag = 1 calculate the functions at x and c return this vector in fvec. do not alter fjac. c if iflag = 2 calculate the jacobian at x and c return this matrix in fjac. do not alter fvec. c ---------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of lmder. c in this case set iflag to a negative integer. c c m is a positive integer input variable set to the number c of functions. c c n is a positive integer input variable set to the number c of variables. n must not exceed m. c c x is an array of length n. on input x must contain c an initial estimate of the solution vector. on output x c contains the final estimate of the solution vector. c c fvec is an output array of length m which contains c the functions evaluated at the output x. c c fjac is an output m by n array. the upper n by n submatrix c of fjac contains an upper triangular matrix r with c diagonal elements of nonincreasing magnitude such that c c t t t c p *(jac *jac)*p = r *r, c c where p is a permutation matrix and jac is the final c calculated jacobian. column j of p is column ipvt(j) c (see below) of the identity matrix. the lower trapezoidal c part of fjac contains information generated during c the computation of r. c c ldfjac is a positive integer input variable not less than m c which specifies the leading dimension of the array fjac. c c ftol is a nonnegative input variable. termination c occurs when both the actual and predicted relative c reductions in the sum of squares are at most ftol. c therefore, ftol measures the relative error desired c in the sum of squares. c c xtol is a nonnegative input variable. termination c occurs when the relative error between two consecutive c iterates is at most xtol. therefore, xtol measures the c relative error desired in the approximate solution. c c gtol is a nonnegative input variable. termination c occurs when the cosine of the angle between fvec and c any column of the jacobian is at most gtol in absolute c value. therefore, gtol measures the orthogonality c desired between the function vector and the columns c of the jacobian. c c maxfev is a positive integer input variable. termination c occurs when the number of calls to fcn with iflag = 1 c has reached maxfev. c c diag is an array of length n. if mode = 1 (see c below), diag is internally set. if mode = 2, diag c must contain positive entries that serve as c multiplicative scale factors for the variables. c c mode is an integer input variable. if mode = 1, the c variables will be scaled internally. if mode = 2, c the scaling is specified by the input diag. other c values of mode are equivalent to mode = 1. c c factor is a positive input variable used in determining the c initial step bound. this bound is set to the product of c factor and the euclidean norm of diag*x if nonzero, or else c to factor itself. in most cases factor should lie in the c interval (.1,100.).100. is a generally recommended value. c c nprint is an integer input variable that enables controlled c printing of iterates if it is positive. in this case, c fcn is called with iflag = 0 at the beginning of the first c iteration and every nprint iterations thereafter and c immediately prior to return, with x, fvec, and fjac c available for printing. fvec and fjac should not be c altered. if nprint is not positive, no special calls c of fcn with iflag = 0 are made. c c info is an integer output variable. if the user has c terminated execution, info is set to the (negative) c value of iflag. see description of fcn. otherwise, c info is set as follows. c c info = 0 improper input parameters. c c info = 1 both actual and predicted relative reductions c in the sum of squares are at most ftol. c c info = 2 relative error between two consecutive iterates c is at most xtol. c c info = 3 conditions for info = 1 and info = 2 both hold. c c info = 4 the cosine of the angle between fvec and any c column of the jacobian is at most gtol in c absolute value. c c info = 5 number of calls to fcn with iflag = 1 has c reached maxfev. c c info = 6 ftol is too small. no further reduction in c the sum of squares is possible. c c info = 7 xtol is too small. no further improvement in c the approximate solution x is possible. c c info = 8 gtol is too small. fvec is orthogonal to the c columns of the jacobian to machine precision. c c nfev is an integer output variable set to the number of c calls to fcn with iflag = 1. c c njev is an integer output variable set to the number of c calls to fcn with iflag = 2. c c ipvt is an integer output array of length n. ipvt c defines a permutation matrix p such that jac*p = q*r, c where jac is the final calculated jacobian, q is c orthogonal (not stored), and r is upper triangular c with diagonal elements of nonincreasing magnitude. c column j of p is column ipvt(j) of the identity matrix. c c qtf is an output array of length n which contains c the first n elements of the vector (q transpose)*fvec. c c wa1, wa2, and wa3 are work arrays of length n. c c wa4 is a work array of length m. c c subprograms called c c user-supplied ...... fcn c c minpack-supplied ... dpmpar,enorm,lmpar,qrfac c c fortran-supplied ... dabs,dmax1,dmin1,dsqrt,mod c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,iflag,iter,j,l double precision actred,delta,dirder,epsmch,fnorm,fnorm1,gnorm, * one,par,pnorm,prered,p1,p5,p25,p75,p0001,ratio, * sum,temp,temp1,temp2,xnorm,zero double precision dpmpar,enorm data one,p1,p5,p25,p75,p0001,zero * /1.0d0,1.0d-1,5.0d-1,2.5d-1,7.5d-1,1.0d-4,0.0d0/ c c epsmch is the machine precision. c epsmch = dpmpar(1) c info = 0 iflag = 0 nfev = 0 njev = 0 c c check the input parameters for errors. c if (n .le. 0 .or. m .lt. n .or. ldfjac .lt. m * .or. ftol .lt. zero .or. xtol .lt. zero .or. gtol .lt. zero * .or. maxfev .le. 0 .or. factor .le. zero) go to 300 if (mode .ne. 2) go to 20 do 10 j = 1, n if (diag(j) .le. zero) go to 300 10 continue 20 continue c c evaluate the function at the starting point c and calculate its norm. c iflag = 1 call fcn(m,n,x,fvec,fjac,ldfjac,iflag,userpar) nfev = 1 if (iflag .lt. 0) go to 300 fnorm = enorm(m,fvec) c c initialize levenberg-marquardt parameter and iteration counter. c par = zero iter = 1 c c beginning of the outer loop. c 30 continue c c calculate the jacobian matrix. c iflag = 2 call fcn(m,n,x,fvec,fjac,ldfjac,iflag,userpar) njev = njev + 1 if (iflag .lt. 0) go to 300 c c if requested, call fcn to enable printing of iterates. c if (nprint .le. 0) go to 40 iflag = 0 if (mod(iter-1,nprint) .eq. 0) * call fcn(m,n,x,fvec,fjac,ldfjac,iflag,userpar) if (iflag .lt. 0) go to 300 40 continue c c compute the qr factorization of the jacobian. c call qrfac(m,n,fjac,ldfjac,.true.,ipvt,n,wa1,wa2,wa3) c c on the first iteration and if mode is 1, scale according c to the norms of the columns of the initial jacobian. c if (iter .ne. 1) go to 80 if (mode .eq. 2) go to 60 do 50 j = 1, n diag(j) = wa2(j) if (wa2(j) .eq. zero) diag(j) = one 50 continue 60 continue c c on the first iteration, calculate the norm of the scaled x c and initialize the step bound delta. c do 70 j = 1, n wa3(j) = diag(j)*x(j) 70 continue xnorm = enorm(n,wa3) delta = factor*xnorm if (delta .eq. zero) delta = factor 80 continue c c form (q transpose)*fvec and store the first n components in c qtf. c do 90 i = 1, m wa4(i) = fvec(i) 90 continue do 130 j = 1, n if (fjac(j,j) .eq. zero) go to 120 sum = zero do 100 i = j, m sum = sum + fjac(i,j)*wa4(i) 100 continue temp = -sum/fjac(j,j) do 110 i = j, m wa4(i) = wa4(i) + fjac(i,j)*temp 110 continue 120 continue fjac(j,j) = wa1(j) qtf(j) = wa4(j) 130 continue c c compute the norm of the scaled gradient. c gnorm = zero if (fnorm .eq. zero) go to 170 do 160 j = 1, n l = ipvt(j) if (wa2(l) .eq. zero) go to 150 sum = zero do 140 i = 1, j sum = sum + fjac(i,j)*(qtf(i)/fnorm) 140 continue gnorm = dmax1(gnorm,dabs(sum/wa2(l))) 150 continue 160 continue 170 continue c c test for convergence of the gradient norm. c if (gnorm .le. gtol) info = 4 if (info .ne. 0) go to 300 c c rescale if necessary. c if (mode .eq. 2) go to 190 do 180 j = 1, n diag(j) = dmax1(diag(j),wa2(j)) 180 continue 190 continue c c beginning of the inner loop. c 200 continue c c determine the levenberg-marquardt parameter. c call lmpar(n,fjac,ldfjac,ipvt,diag,qtf,delta,par,wa1,wa2, * wa3,wa4) c c store the direction p and x + p. calculate the norm of p. c do 210 j = 1, n wa1(j) = -wa1(j) wa2(j) = x(j) + wa1(j) wa3(j) = diag(j)*wa1(j) 210 continue pnorm = enorm(n,wa3) c c on the first iteration, adjust the initial step bound. c if (iter .eq. 1) delta = dmin1(delta,pnorm) c c evaluate the function at x + p and calculate its norm. c iflag = 1 call fcn(m,n,wa2,wa4,fjac,ldfjac,iflag,userpar) nfev = nfev + 1 if (iflag .lt. 0) go to 300 fnorm1 = enorm(m,wa4) c c compute the scaled actual reduction. c actred = -one if (p1*fnorm1 .lt. fnorm) actred = one - (fnorm1/fnorm)**2 c c compute the scaled predicted reduction and c the scaled directional derivative. c do 230 j = 1, n wa3(j) = zero l = ipvt(j) temp = wa1(l) do 220 i = 1, j wa3(i) = wa3(i) + fjac(i,j)*temp 220 continue 230 continue temp1 = enorm(n,wa3)/fnorm temp2 = (dsqrt(par)*pnorm)/fnorm prered = temp1**2 + temp2**2/p5 dirder = -(temp1**2 + temp2**2) c c compute the ratio of the actual to the predicted c reduction. c ratio = zero if (prered .ne. zero) ratio = actred/prered c c update the step bound. c if (ratio .gt. p25) go to 240 if (actred .ge. zero) temp = p5 if (actred .lt. zero) * temp = p5*dirder/(dirder + p5*actred) if (p1*fnorm1 .ge. fnorm .or. temp .lt. p1) temp = p1 delta = temp*dmin1(delta,pnorm/p1) par = par/temp go to 260 240 continue if (par .ne. zero .and. ratio .lt. p75) go to 250 delta = pnorm/p5 par = p5*par 250 continue 260 continue c c test for successful iteration. c if (ratio .lt. p0001) go to 290 c c successful iteration. update x, fvec, and their norms. c do 270 j = 1, n x(j) = wa2(j) wa2(j) = diag(j)*x(j) 270 continue do 280 i = 1, m fvec(i) = wa4(i) 280 continue xnorm = enorm(n,wa2) fnorm = fnorm1 iter = iter + 1 290 continue c c tests for convergence. c if (dabs(actred) .le. ftol .and. prered .le. ftol * .and. p5*ratio .le. one) info = 1 if (delta .le. xtol*xnorm) info = 2 if (dabs(actred) .le. ftol .and. prered .le. ftol * .and. p5*ratio .le. one .and. info .eq. 2) info = 3 if (info .ne. 0) go to 300 c c tests for termination and stringent tolerances. c if (nfev .ge. maxfev) info = 5 if (dabs(actred) .le. epsmch .and. prered .le. epsmch * .and. p5*ratio .le. one) info = 6 if (delta .le. epsmch*xnorm) info = 7 if (gnorm .le. epsmch) info = 8 if (info .ne. 0) go to 300 c c end of the inner loop. repeat if iteration unsuccessful. c if (ratio .lt. p0001) go to 200 c c end of the outer loop. c go to 30 300 continue c c termination, either normal or user imposed. c if (iflag .lt. 0) info = iflag iflag = 0 if (nprint .gt. 0) call fcn(m,n,x,fvec,fjac,ldfjac,iflag,userpar) return c c last card of subroutine lmder. c end PyBDSF-1.10.1/src/minpack/lmder1.f000066400000000000000000000130521420247104600163660ustar00rootroot00000000000000 subroutine lmder1(fcn,m,n,x,fvec,fjac,ldfjac,tol,info,ipvt,wa, * lwa) integer m,n,ldfjac,info,lwa integer ipvt(n) double precision tol double precision x(n),fvec(m),fjac(ldfjac,n),wa(lwa) external fcn c ********** c c subroutine lmder1 c c the purpose of lmder1 is to minimize the sum of the squares of c m nonlinear functions in n variables by a modification of the c levenberg-marquardt algorithm. this is done by using the more c general least-squares solver lmder. the user must provide a c subroutine which calculates the functions and the jacobian. c c the subroutine statement is c c subroutine lmder1(fcn,m,n,x,fvec,fjac,ldfjac,tol,info, c ipvt,wa,lwa) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions and the jacobian. fcn must c be declared in an external statement in the user c calling program, and should be written as follows. c c subroutine fcn(m,n,x,fvec,fjac,ldfjac,iflag) c integer m,n,ldfjac,iflag c double precision x(n),fvec(m),fjac(ldfjac,n) c ---------- c if iflag = 1 calculate the functions at x and c return this vector in fvec. do not alter fjac. c if iflag = 2 calculate the jacobian at x and c return this matrix in fjac. do not alter fvec. c ---------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of lmder1. c in this case set iflag to a negative integer. c c m is a positive integer input variable set to the number c of functions. c c n is a positive integer input variable set to the number c of variables. n must not exceed m. c c x is an array of length n. on input x must contain c an initial estimate of the solution vector. on output x c contains the final estimate of the solution vector. c c fvec is an output array of length m which contains c the functions evaluated at the output x. c c fjac is an output m by n array. the upper n by n submatrix c of fjac contains an upper triangular matrix r with c diagonal elements of nonincreasing magnitude such that c c t t t c p *(jac *jac)*p = r *r, c c where p is a permutation matrix and jac is the final c calculated jacobian. column j of p is column ipvt(j) c (see below) of the identity matrix. the lower trapezoidal c part of fjac contains information generated during c the computation of r. c c ldfjac is a positive integer input variable not less than m c which specifies the leading dimension of the array fjac. c c tol is a nonnegative input variable. termination occurs c when the algorithm estimates either that the relative c error in the sum of squares is at most tol or that c the relative error between x and the solution is at c most tol. c c info is an integer output variable. if the user has c terminated execution, info is set to the (negative) c value of iflag. see description of fcn. otherwise, c info is set as follows. c c info = 0 improper input parameters. c c info = 1 algorithm estimates that the relative error c in the sum of squares is at most tol. c c info = 2 algorithm estimates that the relative error c between x and the solution is at most tol. c c info = 3 conditions for info = 1 and info = 2 both hold. c c info = 4 fvec is orthogonal to the columns of the c jacobian to machine precision. c c info = 5 number of calls to fcn with iflag = 1 has c reached 100*(n+1). c c info = 6 tol is too small. no further reduction in c the sum of squares is possible. c c info = 7 tol is too small. no further improvement in c the approximate solution x is possible. c c ipvt is an integer output array of length n. ipvt c defines a permutation matrix p such that jac*p = q*r, c where jac is the final calculated jacobian, q is c orthogonal (not stored), and r is upper triangular c with diagonal elements of nonincreasing magnitude. c column j of p is column ipvt(j) of the identity matrix. c c wa is a work array of length lwa. c c lwa is a positive integer input variable not less than 5*n+m. c c subprograms called c c user-supplied ...... fcn c c minpack-supplied ... lmder c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer maxfev,mode,nfev,njev,nprint double precision factor,ftol,gtol,xtol,zero data factor,zero /1.0d2,0.0d0/ info = 0 c c check the input parameters for errors. c if (n .le. 0 .or. m .lt. n .or. ldfjac .lt. m .or. tol .lt. zero * .or. lwa .lt. 5*n + m) go to 10 c c call lmder. c maxfev = 100*(n + 1) ftol = tol xtol = tol gtol = zero mode = 1 nprint = 0 call lmder(fcn,m,n,x,fvec,fjac,ldfjac,ftol,xtol,gtol,maxfev, * wa(1),mode,factor,nprint,info,nfev,njev,ipvt,wa(n+1), * wa(2*n+1),wa(3*n+1),wa(4*n+1),wa(5*n+1)) if (info .eq. 8) info = 4 10 continue return c c last card of subroutine lmder1. c end PyBDSF-1.10.1/src/minpack/lmdif.f000066400000000000000000000362701420247104600163040ustar00rootroot00000000000000 subroutine lmdif(fcn,m,n,x,fvec,ftol,xtol,gtol,maxfev,epsfcn, * diag,mode,factor,nprint,info,nfev,fjac,ldfjac, * ipvt,qtf,wa1,wa2,wa3,wa4) integer m,n,maxfev,mode,nprint,info,nfev,ldfjac integer ipvt(n) double precision ftol,xtol,gtol,epsfcn,factor double precision x(n),fvec(m),diag(n),fjac(ldfjac,n),qtf(n), * wa1(n),wa2(n),wa3(n),wa4(m) external fcn c ********** c c subroutine lmdif c c the purpose of lmdif is to minimize the sum of the squares of c m nonlinear functions in n variables by a modification of c the levenberg-marquardt algorithm. the user must provide a c subroutine which calculates the functions. the jacobian is c then calculated by a forward-difference approximation. c c the subroutine statement is c c subroutine lmdif(fcn,m,n,x,fvec,ftol,xtol,gtol,maxfev,epsfcn, c diag,mode,factor,nprint,info,nfev,fjac, c ldfjac,ipvt,qtf,wa1,wa2,wa3,wa4) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions. fcn must be declared c in an external statement in the user calling c program, and should be written as follows. c c subroutine fcn(m,n,x,fvec,iflag) c integer m,n,iflag c double precision x(n),fvec(m) c ---------- c calculate the functions at x and c return this vector in fvec. c ---------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of lmdif. c in this case set iflag to a negative integer. c c m is a positive integer input variable set to the number c of functions. c c n is a positive integer input variable set to the number c of variables. n must not exceed m. c c x is an array of length n. on input x must contain c an initial estimate of the solution vector. on output x c contains the final estimate of the solution vector. c c fvec is an output array of length m which contains c the functions evaluated at the output x. c c ftol is a nonnegative input variable. termination c occurs when both the actual and predicted relative c reductions in the sum of squares are at most ftol. c therefore, ftol measures the relative error desired c in the sum of squares. c c xtol is a nonnegative input variable. termination c occurs when the relative error between two consecutive c iterates is at most xtol. therefore, xtol measures the c relative error desired in the approximate solution. c c gtol is a nonnegative input variable. termination c occurs when the cosine of the angle between fvec and c any column of the jacobian is at most gtol in absolute c value. therefore, gtol measures the orthogonality c desired between the function vector and the columns c of the jacobian. c c maxfev is a positive integer input variable. termination c occurs when the number of calls to fcn is at least c maxfev by the end of an iteration. c c epsfcn is an input variable used in determining a suitable c step length for the forward-difference approximation. this c approximation assumes that the relative errors in the c functions are of the order of epsfcn. if epsfcn is less c than the machine precision, it is assumed that the relative c errors in the functions are of the order of the machine c precision. c c diag is an array of length n. if mode = 1 (see c below), diag is internally set. if mode = 2, diag c must contain positive entries that serve as c multiplicative scale factors for the variables. c c mode is an integer input variable. if mode = 1, the c variables will be scaled internally. if mode = 2, c the scaling is specified by the input diag. other c values of mode are equivalent to mode = 1. c c factor is a positive input variable used in determining the c initial step bound. this bound is set to the product of c factor and the euclidean norm of diag*x if nonzero, or else c to factor itself. in most cases factor should lie in the c interval (.1,100.). 100. is a generally recommended value. c c nprint is an integer input variable that enables controlled c printing of iterates if it is positive. in this case, c fcn is called with iflag = 0 at the beginning of the first c iteration and every nprint iterations thereafter and c immediately prior to return, with x and fvec available c for printing. if nprint is not positive, no special calls c of fcn with iflag = 0 are made. c c info is an integer output variable. if the user has c terminated execution, info is set to the (negative) c value of iflag. see description of fcn. otherwise, c info is set as follows. c c info = 0 improper input parameters. c c info = 1 both actual and predicted relative reductions c in the sum of squares are at most ftol. c c info = 2 relative error between two consecutive iterates c is at most xtol. c c info = 3 conditions for info = 1 and info = 2 both hold. c c info = 4 the cosine of the angle between fvec and any c column of the jacobian is at most gtol in c absolute value. c c info = 5 number of calls to fcn has reached or c exceeded maxfev. c c info = 6 ftol is too small. no further reduction in c the sum of squares is possible. c c info = 7 xtol is too small. no further improvement in c the approximate solution x is possible. c c info = 8 gtol is too small. fvec is orthogonal to the c columns of the jacobian to machine precision. c c nfev is an integer output variable set to the number of c calls to fcn. c c fjac is an output m by n array. the upper n by n submatrix c of fjac contains an upper triangular matrix r with c diagonal elements of nonincreasing magnitude such that c c t t t c p *(jac *jac)*p = r *r, c c where p is a permutation matrix and jac is the final c calculated jacobian. column j of p is column ipvt(j) c (see below) of the identity matrix. the lower trapezoidal c part of fjac contains information generated during c the computation of r. c c ldfjac is a positive integer input variable not less than m c which specifies the leading dimension of the array fjac. c c ipvt is an integer output array of length n. ipvt c defines a permutation matrix p such that jac*p = q*r, c where jac is the final calculated jacobian, q is c orthogonal (not stored), and r is upper triangular c with diagonal elements of nonincreasing magnitude. c column j of p is column ipvt(j) of the identity matrix. c c qtf is an output array of length n which contains c the first n elements of the vector (q transpose)*fvec. c c wa1, wa2, and wa3 are work arrays of length n. c c wa4 is a work array of length m. c c subprograms called c c user-supplied ...... fcn c c minpack-supplied ... dpmpar,enorm,fdjac2,lmpar,qrfac c c fortran-supplied ... dabs,dmax1,dmin1,dsqrt,mod c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,iflag,iter,j,l double precision actred,delta,dirder,epsmch,fnorm,fnorm1,gnorm, * one,par,pnorm,prered,p1,p5,p25,p75,p0001,ratio, * sum,temp,temp1,temp2,xnorm,zero double precision dpmpar,enorm data one,p1,p5,p25,p75,p0001,zero * /1.0d0,1.0d-1,5.0d-1,2.5d-1,7.5d-1,1.0d-4,0.0d0/ c c epsmch is the machine precision. c epsmch = dpmpar(1) c info = 0 iflag = 0 nfev = 0 c c check the input parameters for errors. c if (n .le. 0 .or. m .lt. n .or. ldfjac .lt. m * .or. ftol .lt. zero .or. xtol .lt. zero .or. gtol .lt. zero * .or. maxfev .le. 0 .or. factor .le. zero) go to 300 if (mode .ne. 2) go to 20 do 10 j = 1, n if (diag(j) .le. zero) go to 300 10 continue 20 continue c c evaluate the function at the starting point c and calculate its norm. c iflag = 1 call fcn(m,n,x,fvec,iflag) nfev = 1 if (iflag .lt. 0) go to 300 fnorm = enorm(m,fvec) c c initialize levenberg-marquardt parameter and iteration counter. c par = zero iter = 1 c c beginning of the outer loop. c 30 continue c c calculate the jacobian matrix. c iflag = 2 call fdjac2(fcn,m,n,x,fvec,fjac,ldfjac,iflag,epsfcn,wa4) nfev = nfev + n if (iflag .lt. 0) go to 300 c c if requested, call fcn to enable printing of iterates. c if (nprint .le. 0) go to 40 iflag = 0 if (mod(iter-1,nprint) .eq. 0) call fcn(m,n,x,fvec,iflag) if (iflag .lt. 0) go to 300 40 continue c c compute the qr factorization of the jacobian. c call qrfac(m,n,fjac,ldfjac,.true.,ipvt,n,wa1,wa2,wa3) c c on the first iteration and if mode is 1, scale according c to the norms of the columns of the initial jacobian. c if (iter .ne. 1) go to 80 if (mode .eq. 2) go to 60 do 50 j = 1, n diag(j) = wa2(j) if (wa2(j) .eq. zero) diag(j) = one 50 continue 60 continue c c on the first iteration, calculate the norm of the scaled x c and initialize the step bound delta. c do 70 j = 1, n wa3(j) = diag(j)*x(j) 70 continue xnorm = enorm(n,wa3) delta = factor*xnorm if (delta .eq. zero) delta = factor 80 continue c c form (q transpose)*fvec and store the first n components in c qtf. c do 90 i = 1, m wa4(i) = fvec(i) 90 continue do 130 j = 1, n if (fjac(j,j) .eq. zero) go to 120 sum = zero do 100 i = j, m sum = sum + fjac(i,j)*wa4(i) 100 continue temp = -sum/fjac(j,j) do 110 i = j, m wa4(i) = wa4(i) + fjac(i,j)*temp 110 continue 120 continue fjac(j,j) = wa1(j) qtf(j) = wa4(j) 130 continue c c compute the norm of the scaled gradient. c gnorm = zero if (fnorm .eq. zero) go to 170 do 160 j = 1, n l = ipvt(j) if (wa2(l) .eq. zero) go to 150 sum = zero do 140 i = 1, j sum = sum + fjac(i,j)*(qtf(i)/fnorm) 140 continue gnorm = dmax1(gnorm,dabs(sum/wa2(l))) 150 continue 160 continue 170 continue c c test for convergence of the gradient norm. c if (gnorm .le. gtol) info = 4 if (info .ne. 0) go to 300 c c rescale if necessary. c if (mode .eq. 2) go to 190 do 180 j = 1, n diag(j) = dmax1(diag(j),wa2(j)) 180 continue 190 continue c c beginning of the inner loop. c 200 continue c c determine the levenberg-marquardt parameter. c call lmpar(n,fjac,ldfjac,ipvt,diag,qtf,delta,par,wa1,wa2, * wa3,wa4) c c store the direction p and x + p. calculate the norm of p. c do 210 j = 1, n wa1(j) = -wa1(j) wa2(j) = x(j) + wa1(j) wa3(j) = diag(j)*wa1(j) 210 continue pnorm = enorm(n,wa3) c c on the first iteration, adjust the initial step bound. c if (iter .eq. 1) delta = dmin1(delta,pnorm) c c evaluate the function at x + p and calculate its norm. c iflag = 1 call fcn(m,n,wa2,wa4,iflag) nfev = nfev + 1 if (iflag .lt. 0) go to 300 fnorm1 = enorm(m,wa4) c c compute the scaled actual reduction. c actred = -one if (p1*fnorm1 .lt. fnorm) actred = one - (fnorm1/fnorm)**2 c c compute the scaled predicted reduction and c the scaled directional derivative. c do 230 j = 1, n wa3(j) = zero l = ipvt(j) temp = wa1(l) do 220 i = 1, j wa3(i) = wa3(i) + fjac(i,j)*temp 220 continue 230 continue temp1 = enorm(n,wa3)/fnorm temp2 = (dsqrt(par)*pnorm)/fnorm prered = temp1**2 + temp2**2/p5 dirder = -(temp1**2 + temp2**2) c c compute the ratio of the actual to the predicted c reduction. c ratio = zero if (prered .ne. zero) ratio = actred/prered c c update the step bound. c if (ratio .gt. p25) go to 240 if (actred .ge. zero) temp = p5 if (actred .lt. zero) * temp = p5*dirder/(dirder + p5*actred) if (p1*fnorm1 .ge. fnorm .or. temp .lt. p1) temp = p1 delta = temp*dmin1(delta,pnorm/p1) par = par/temp go to 260 240 continue if (par .ne. zero .and. ratio .lt. p75) go to 250 delta = pnorm/p5 par = p5*par 250 continue 260 continue c c test for successful iteration. c if (ratio .lt. p0001) go to 290 c c successful iteration. update x, fvec, and their norms. c do 270 j = 1, n x(j) = wa2(j) wa2(j) = diag(j)*x(j) 270 continue do 280 i = 1, m fvec(i) = wa4(i) 280 continue xnorm = enorm(n,wa2) fnorm = fnorm1 iter = iter + 1 290 continue c c tests for convergence. c if (dabs(actred) .le. ftol .and. prered .le. ftol * .and. p5*ratio .le. one) info = 1 if (delta .le. xtol*xnorm) info = 2 if (dabs(actred) .le. ftol .and. prered .le. ftol * .and. p5*ratio .le. one .and. info .eq. 2) info = 3 if (info .ne. 0) go to 300 c c tests for termination and stringent tolerances. c if (nfev .ge. maxfev) info = 5 if (dabs(actred) .le. epsmch .and. prered .le. epsmch * .and. p5*ratio .le. one) info = 6 if (delta .le. epsmch*xnorm) info = 7 if (gnorm .le. epsmch) info = 8 if (info .ne. 0) go to 300 c c end of the inner loop. repeat if iteration unsuccessful. c if (ratio .lt. p0001) go to 200 c c end of the outer loop. c go to 30 300 continue c c termination, either normal or user imposed. c if (iflag .lt. 0) info = iflag iflag = 0 if (nprint .gt. 0) call fcn(m,n,x,fvec,iflag) return c c last card of subroutine lmdif. c end PyBDSF-1.10.1/src/minpack/lmdif1.f000066400000000000000000000105631420247104600163620ustar00rootroot00000000000000 subroutine lmdif1(fcn,m,n,x,fvec,tol,info,iwa,wa,lwa) integer m,n,info,lwa integer iwa(n) double precision tol double precision x(n),fvec(m),wa(lwa) external fcn c ********** c c subroutine lmdif1 c c the purpose of lmdif1 is to minimize the sum of the squares of c m nonlinear functions in n variables by a modification of the c levenberg-marquardt algorithm. this is done by using the more c general least-squares solver lmdif. the user must provide a c subroutine which calculates the functions. the jacobian is c then calculated by a forward-difference approximation. c c the subroutine statement is c c subroutine lmdif1(fcn,m,n,x,fvec,tol,info,iwa,wa,lwa) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions. fcn must be declared c in an external statement in the user calling c program, and should be written as follows. c c subroutine fcn(m,n,x,fvec,iflag) c integer m,n,iflag c double precision x(n),fvec(m) c ---------- c calculate the functions at x and c return this vector in fvec. c ---------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of lmdif1. c in this case set iflag to a negative integer. c c m is a positive integer input variable set to the number c of functions. c c n is a positive integer input variable set to the number c of variables. n must not exceed m. c c x is an array of length n. on input x must contain c an initial estimate of the solution vector. on output x c contains the final estimate of the solution vector. c c fvec is an output array of length m which contains c the functions evaluated at the output x. c c tol is a nonnegative input variable. termination occurs c when the algorithm estimates either that the relative c error in the sum of squares is at most tol or that c the relative error between x and the solution is at c most tol. c c info is an integer output variable. if the user has c terminated execution, info is set to the (negative) c value of iflag. see description of fcn. otherwise, c info is set as follows. c c info = 0 improper input parameters. c c info = 1 algorithm estimates that the relative error c in the sum of squares is at most tol. c c info = 2 algorithm estimates that the relative error c between x and the solution is at most tol. c c info = 3 conditions for info = 1 and info = 2 both hold. c c info = 4 fvec is orthogonal to the columns of the c jacobian to machine precision. c c info = 5 number of calls to fcn has reached or c exceeded 200*(n+1). c c info = 6 tol is too small. no further reduction in c the sum of squares is possible. c c info = 7 tol is too small. no further improvement in c the approximate solution x is possible. c c iwa is an integer work array of length n. c c wa is a work array of length lwa. c c lwa is a positive integer input variable not less than c m*n+5*n+m. c c subprograms called c c user-supplied ...... fcn c c minpack-supplied ... lmdif c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer maxfev,mode,mp5n,nfev,nprint double precision epsfcn,factor,ftol,gtol,xtol,zero data factor,zero /1.0d2,0.0d0/ info = 0 c c check the input parameters for errors. c if (n .le. 0 .or. m .lt. n .or. tol .lt. zero * .or. lwa .lt. m*n + 5*n + m) go to 10 c c call lmdif. c maxfev = 200*(n + 1) ftol = tol xtol = tol gtol = zero epsfcn = zero mode = 1 nprint = 0 mp5n = m + 5*n call lmdif(fcn,m,n,x,fvec,ftol,xtol,gtol,maxfev,epsfcn,wa(1), * mode,factor,nprint,info,nfev,wa(mp5n+1),m,iwa, * wa(n+1),wa(2*n+1),wa(3*n+1),wa(4*n+1),wa(5*n+1)) if (info .eq. 8) info = 4 10 continue return c c last card of subroutine lmdif1. c end PyBDSF-1.10.1/src/minpack/lmpar.f000066400000000000000000000200631420247104600163150ustar00rootroot00000000000000 subroutine lmpar(n,r,ldr,ipvt,diag,qtb,delta,par,x,sdiag,wa1, * wa2) integer n,ldr integer ipvt(n) double precision delta,par double precision r(ldr,n),diag(n),qtb(n),x(n),sdiag(n),wa1(n), * wa2(n) c ********** c c subroutine lmpar c c given an m by n matrix a, an n by n nonsingular diagonal c matrix d, an m-vector b, and a positive number delta, c the problem is to determine a value for the parameter c par such that if x solves the system c c a*x = b , sqrt(par)*d*x = 0 , c c in the least squares sense, and dxnorm is the euclidean c norm of d*x, then either par is zero and c c (dxnorm-delta) .le. 0.1*delta , c c or par is positive and c c abs(dxnorm-delta) .le. 0.1*delta . c c this subroutine completes the solution of the problem c if it is provided with the necessary information from the c qr factorization, with column pivoting, of a. that is, if c a*p = q*r, where p is a permutation matrix, q has orthogonal c columns, and r is an upper triangular matrix with diagonal c elements of nonincreasing magnitude, then lmpar expects c the full upper triangle of r, the permutation matrix p, c and the first n components of (q transpose)*b. on output c lmpar also provides an upper triangular matrix s such that c c t t t c p *(a *a + par*d*d)*p = s *s . c c s is employed within lmpar and may be of separate interest. c c only a few iterations are generally needed for convergence c of the algorithm. if, however, the limit of 10 iterations c is reached, then the output par will contain the best c value obtained so far. c c the subroutine statement is c c subroutine lmpar(n,r,ldr,ipvt,diag,qtb,delta,par,x,sdiag, c wa1,wa2) c c where c c n is a positive integer input variable set to the order of r. c c r is an n by n array. on input the full upper triangle c must contain the full upper triangle of the matrix r. c on output the full upper triangle is unaltered, and the c strict lower triangle contains the strict upper triangle c (transposed) of the upper triangular matrix s. c c ldr is a positive integer input variable not less than n c which specifies the leading dimension of the array r. c c ipvt is an integer input array of length n which defines the c permutation matrix p such that a*p = q*r. column j of p c is column ipvt(j) of the identity matrix. c c diag is an input array of length n which must contain the c diagonal elements of the matrix d. c c qtb is an input array of length n which must contain the first c n elements of the vector (q transpose)*b. c c delta is a positive input variable which specifies an upper c bound on the euclidean norm of d*x. c c par is a nonnegative variable. on input par contains an c initial estimate of the levenberg-marquardt parameter. c on output par contains the final estimate. c c x is an output array of length n which contains the least c squares solution of the system a*x = b, sqrt(par)*d*x = 0, c for the output par. c c sdiag is an output array of length n which contains the c diagonal elements of the upper triangular matrix s. c c wa1 and wa2 are work arrays of length n. c c subprograms called c c minpack-supplied ... dpmpar,enorm,qrsolv c c fortran-supplied ... dabs,dmax1,dmin1,dsqrt c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,iter,j,jm1,jp1,k,l,nsing double precision dxnorm,dwarf,fp,gnorm,parc,parl,paru,p1,p001, * sum,temp,zero double precision dpmpar,enorm data p1,p001,zero /1.0d-1,1.0d-3,0.0d0/ c c dwarf is the smallest positive magnitude. c dwarf = dpmpar(2) c c compute and store in x the gauss-newton direction. if the c jacobian is rank-deficient, obtain a least squares solution. c nsing = n do 10 j = 1, n wa1(j) = qtb(j) if (r(j,j) .eq. zero .and. nsing .eq. n) nsing = j - 1 if (nsing .lt. n) wa1(j) = zero 10 continue if (nsing .lt. 1) go to 50 do 40 k = 1, nsing j = nsing - k + 1 wa1(j) = wa1(j)/r(j,j) temp = wa1(j) jm1 = j - 1 if (jm1 .lt. 1) go to 30 do 20 i = 1, jm1 wa1(i) = wa1(i) - r(i,j)*temp 20 continue 30 continue 40 continue 50 continue do 60 j = 1, n l = ipvt(j) x(l) = wa1(j) 60 continue c c initialize the iteration counter. c evaluate the function at the origin, and test c for acceptance of the gauss-newton direction. c iter = 0 do 70 j = 1, n wa2(j) = diag(j)*x(j) 70 continue dxnorm = enorm(n,wa2) fp = dxnorm - delta if (fp .le. p1*delta) go to 220 c c if the jacobian is not rank deficient, the newton c step provides a lower bound, parl, for the zero of c the function. otherwise set this bound to zero. c parl = zero if (nsing .lt. n) go to 120 do 80 j = 1, n l = ipvt(j) wa1(j) = diag(l)*(wa2(l)/dxnorm) 80 continue do 110 j = 1, n sum = zero jm1 = j - 1 if (jm1 .lt. 1) go to 100 do 90 i = 1, jm1 sum = sum + r(i,j)*wa1(i) 90 continue 100 continue wa1(j) = (wa1(j) - sum)/r(j,j) 110 continue temp = enorm(n,wa1) parl = ((fp/delta)/temp)/temp 120 continue c c calculate an upper bound, paru, for the zero of the function. c do 140 j = 1, n sum = zero do 130 i = 1, j sum = sum + r(i,j)*qtb(i) 130 continue l = ipvt(j) wa1(j) = sum/diag(l) 140 continue gnorm = enorm(n,wa1) paru = gnorm/delta if (paru .eq. zero) paru = dwarf/dmin1(delta,p1) c c if the input par lies outside of the interval (parl,paru), c set par to the closer endpoint. c par = dmax1(par,parl) par = dmin1(par,paru) if (par .eq. zero) par = gnorm/dxnorm c c beginning of an iteration. c 150 continue iter = iter + 1 c c evaluate the function at the current value of par. c if (par .eq. zero) par = dmax1(dwarf,p001*paru) temp = dsqrt(par) do 160 j = 1, n wa1(j) = temp*diag(j) 160 continue call qrsolv(n,r,ldr,ipvt,wa1,qtb,x,sdiag,wa2) do 170 j = 1, n wa2(j) = diag(j)*x(j) 170 continue dxnorm = enorm(n,wa2) temp = fp fp = dxnorm - delta c c if the function is small enough, accept the current value c of par. also test for the exceptional cases where parl c is zero or the number of iterations has reached 10. c if (dabs(fp) .le. p1*delta * .or. parl .eq. zero .and. fp .le. temp * .and. temp .lt. zero .or. iter .eq. 10) go to 220 c c compute the newton correction. c do 180 j = 1, n l = ipvt(j) wa1(j) = diag(l)*(wa2(l)/dxnorm) 180 continue do 210 j = 1, n wa1(j) = wa1(j)/sdiag(j) temp = wa1(j) jp1 = j + 1 if (n .lt. jp1) go to 200 do 190 i = jp1, n wa1(i) = wa1(i) - r(i,j)*temp 190 continue 200 continue 210 continue temp = enorm(n,wa1) parc = ((fp/delta)/temp)/temp c c depending on the sign of the function, update parl or paru. c if (fp .gt. zero) parl = dmax1(parl,par) if (fp .lt. zero) paru = dmin1(paru,par) c c compute an improved estimate for par. c par = dmax1(parl,par+parc) c c end of an iteration. c go to 150 220 continue c c termination. c if (iter .eq. 0) par = zero return c c last card of subroutine lmpar. c end PyBDSF-1.10.1/src/minpack/lmstr.f000066400000000000000000000370221420247104600163460ustar00rootroot00000000000000 subroutine lmstr(fcn,m,n,x,fvec,fjac,ldfjac,ftol,xtol,gtol, * maxfev,diag,mode,factor,nprint,info,nfev,njev, * ipvt,qtf,wa1,wa2,wa3,wa4) integer m,n,ldfjac,maxfev,mode,nprint,info,nfev,njev integer ipvt(n) logical sing double precision ftol,xtol,gtol,factor double precision x(n),fvec(m),fjac(ldfjac,n),diag(n),qtf(n), * wa1(n),wa2(n),wa3(n),wa4(m) c ********** c c subroutine lmstr c c the purpose of lmstr is to minimize the sum of the squares of c m nonlinear functions in n variables by a modification of c the levenberg-marquardt algorithm which uses minimal storage. c the user must provide a subroutine which calculates the c functions and the rows of the jacobian. c c the subroutine statement is c c subroutine lmstr(fcn,m,n,x,fvec,fjac,ldfjac,ftol,xtol,gtol, c maxfev,diag,mode,factor,nprint,info,nfev, c njev,ipvt,qtf,wa1,wa2,wa3,wa4) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions and the rows of the jacobian. c fcn must be declared in an external statement in the c user calling program, and should be written as follows. c c subroutine fcn(m,n,x,fvec,fjrow,iflag) c integer m,n,iflag c double precision x(n),fvec(m),fjrow(n) c ---------- c if iflag = 1 calculate the functions at x and c return this vector in fvec. c if iflag = i calculate the (i-1)-st row of the c jacobian at x and return this vector in fjrow. c ---------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of lmstr. c in this case set iflag to a negative integer. c c m is a positive integer input variable set to the number c of functions. c c n is a positive integer input variable set to the number c of variables. n must not exceed m. c c x is an array of length n. on input x must contain c an initial estimate of the solution vector. on output x c contains the final estimate of the solution vector. c c fvec is an output array of length m which contains c the functions evaluated at the output x. c c fjac is an output n by n array. the upper triangle of fjac c contains an upper triangular matrix r such that c c t t t c p *(jac *jac)*p = r *r, c c where p is a permutation matrix and jac is the final c calculated jacobian. column j of p is column ipvt(j) c (see below) of the identity matrix. the lower triangular c part of fjac contains information generated during c the computation of r. c c ldfjac is a positive integer input variable not less than n c which specifies the leading dimension of the array fjac. c c ftol is a nonnegative input variable. termination c occurs when both the actual and predicted relative c reductions in the sum of squares are at most ftol. c therefore, ftol measures the relative error desired c in the sum of squares. c c xtol is a nonnegative input variable. termination c occurs when the relative error between two consecutive c iterates is at most xtol. therefore, xtol measures the c relative error desired in the approximate solution. c c gtol is a nonnegative input variable. termination c occurs when the cosine of the angle between fvec and c any column of the jacobian is at most gtol in absolute c value. therefore, gtol measures the orthogonality c desired between the function vector and the columns c of the jacobian. c c maxfev is a positive integer input variable. termination c occurs when the number of calls to fcn with iflag = 1 c has reached maxfev. c c diag is an array of length n. if mode = 1 (see c below), diag is internally set. if mode = 2, diag c must contain positive entries that serve as c multiplicative scale factors for the variables. c c mode is an integer input variable. if mode = 1, the c variables will be scaled internally. if mode = 2, c the scaling is specified by the input diag. other c values of mode are equivalent to mode = 1. c c factor is a positive input variable used in determining the c initial step bound. this bound is set to the product of c factor and the euclidean norm of diag*x if nonzero, or else c to factor itself. in most cases factor should lie in the c interval (.1,100.). 100. is a generally recommended value. c c nprint is an integer input variable that enables controlled c printing of iterates if it is positive. in this case, c fcn is called with iflag = 0 at the beginning of the first c iteration and every nprint iterations thereafter and c immediately prior to return, with x and fvec available c for printing. if nprint is not positive, no special calls c of fcn with iflag = 0 are made. c c info is an integer output variable. if the user has c terminated execution, info is set to the (negative) c value of iflag. see description of fcn. otherwise, c info is set as follows. c c info = 0 improper input parameters. c c info = 1 both actual and predicted relative reductions c in the sum of squares are at most ftol. c c info = 2 relative error between two consecutive iterates c is at most xtol. c c info = 3 conditions for info = 1 and info = 2 both hold. c c info = 4 the cosine of the angle between fvec and any c column of the jacobian is at most gtol in c absolute value. c c info = 5 number of calls to fcn with iflag = 1 has c reached maxfev. c c info = 6 ftol is too small. no further reduction in c the sum of squares is possible. c c info = 7 xtol is too small. no further improvement in c the approximate solution x is possible. c c info = 8 gtol is too small. fvec is orthogonal to the c columns of the jacobian to machine precision. c c nfev is an integer output variable set to the number of c calls to fcn with iflag = 1. c c njev is an integer output variable set to the number of c calls to fcn with iflag = 2. c c ipvt is an integer output array of length n. ipvt c defines a permutation matrix p such that jac*p = q*r, c where jac is the final calculated jacobian, q is c orthogonal (not stored), and r is upper triangular. c column j of p is column ipvt(j) of the identity matrix. c c qtf is an output array of length n which contains c the first n elements of the vector (q transpose)*fvec. c c wa1, wa2, and wa3 are work arrays of length n. c c wa4 is a work array of length m. c c subprograms called c c user-supplied ...... fcn c c minpack-supplied ... dpmpar,enorm,lmpar,qrfac,rwupdt c c fortran-supplied ... dabs,dmax1,dmin1,dsqrt,mod c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, dudley v. goetschel, kenneth e. hillstrom, c jorge j. more c c ********** integer i,iflag,iter,j,l double precision actred,delta,dirder,epsmch,fnorm,fnorm1,gnorm, * one,par,pnorm,prered,p1,p5,p25,p75,p0001,ratio, * sum,temp,temp1,temp2,xnorm,zero double precision dpmpar,enorm data one,p1,p5,p25,p75,p0001,zero * /1.0d0,1.0d-1,5.0d-1,2.5d-1,7.5d-1,1.0d-4,0.0d0/ c c epsmch is the machine precision. c epsmch = dpmpar(1) c info = 0 iflag = 0 nfev = 0 njev = 0 c c check the input parameters for errors. c if (n .le. 0 .or. m .lt. n .or. ldfjac .lt. n * .or. ftol .lt. zero .or. xtol .lt. zero .or. gtol .lt. zero * .or. maxfev .le. 0 .or. factor .le. zero) go to 340 if (mode .ne. 2) go to 20 do 10 j = 1, n if (diag(j) .le. zero) go to 340 10 continue 20 continue c c evaluate the function at the starting point c and calculate its norm. c iflag = 1 call fcn(m,n,x,fvec,wa3,iflag) nfev = 1 if (iflag .lt. 0) go to 340 fnorm = enorm(m,fvec) c c initialize levenberg-marquardt parameter and iteration counter. c par = zero iter = 1 c c beginning of the outer loop. c 30 continue c c if requested, call fcn to enable printing of iterates. c if (nprint .le. 0) go to 40 iflag = 0 if (mod(iter-1,nprint) .eq. 0) call fcn(m,n,x,fvec,wa3,iflag) if (iflag .lt. 0) go to 340 40 continue c c compute the qr factorization of the jacobian matrix c calculated one row at a time, while simultaneously c forming (q transpose)*fvec and storing the first c n components in qtf. c do 60 j = 1, n qtf(j) = zero do 50 i = 1, n fjac(i,j) = zero 50 continue 60 continue iflag = 2 do 70 i = 1, m call fcn(m,n,x,fvec,wa3,iflag) if (iflag .lt. 0) go to 340 temp = fvec(i) call rwupdt(n,fjac,ldfjac,wa3,qtf,temp,wa1,wa2) iflag = iflag + 1 70 continue njev = njev + 1 c c if the jacobian is rank deficient, call qrfac to c reorder its columns and update the components of qtf. c sing = .false. do 80 j = 1, n if (fjac(j,j) .eq. zero) sing = .true. ipvt(j) = j wa2(j) = enorm(j,fjac(1,j)) 80 continue if (.not.sing) go to 130 call qrfac(n,n,fjac,ldfjac,.true.,ipvt,n,wa1,wa2,wa3) do 120 j = 1, n if (fjac(j,j) .eq. zero) go to 110 sum = zero do 90 i = j, n sum = sum + fjac(i,j)*qtf(i) 90 continue temp = -sum/fjac(j,j) do 100 i = j, n qtf(i) = qtf(i) + fjac(i,j)*temp 100 continue 110 continue fjac(j,j) = wa1(j) 120 continue 130 continue c c on the first iteration and if mode is 1, scale according c to the norms of the columns of the initial jacobian. c if (iter .ne. 1) go to 170 if (mode .eq. 2) go to 150 do 140 j = 1, n diag(j) = wa2(j) if (wa2(j) .eq. zero) diag(j) = one 140 continue 150 continue c c on the first iteration, calculate the norm of the scaled x c and initialize the step bound delta. c do 160 j = 1, n wa3(j) = diag(j)*x(j) 160 continue xnorm = enorm(n,wa3) delta = factor*xnorm if (delta .eq. zero) delta = factor 170 continue c c compute the norm of the scaled gradient. c gnorm = zero if (fnorm .eq. zero) go to 210 do 200 j = 1, n l = ipvt(j) if (wa2(l) .eq. zero) go to 190 sum = zero do 180 i = 1, j sum = sum + fjac(i,j)*(qtf(i)/fnorm) 180 continue gnorm = dmax1(gnorm,dabs(sum/wa2(l))) 190 continue 200 continue 210 continue c c test for convergence of the gradient norm. c if (gnorm .le. gtol) info = 4 if (info .ne. 0) go to 340 c c rescale if necessary. c if (mode .eq. 2) go to 230 do 220 j = 1, n diag(j) = dmax1(diag(j),wa2(j)) 220 continue 230 continue c c beginning of the inner loop. c 240 continue c c determine the levenberg-marquardt parameter. c call lmpar(n,fjac,ldfjac,ipvt,diag,qtf,delta,par,wa1,wa2, * wa3,wa4) c c store the direction p and x + p. calculate the norm of p. c do 250 j = 1, n wa1(j) = -wa1(j) wa2(j) = x(j) + wa1(j) wa3(j) = diag(j)*wa1(j) 250 continue pnorm = enorm(n,wa3) c c on the first iteration, adjust the initial step bound. c if (iter .eq. 1) delta = dmin1(delta,pnorm) c c evaluate the function at x + p and calculate its norm. c iflag = 1 call fcn(m,n,wa2,wa4,wa3,iflag) nfev = nfev + 1 if (iflag .lt. 0) go to 340 fnorm1 = enorm(m,wa4) c c compute the scaled actual reduction. c actred = -one if (p1*fnorm1 .lt. fnorm) actred = one - (fnorm1/fnorm)**2 c c compute the scaled predicted reduction and c the scaled directional derivative. c do 270 j = 1, n wa3(j) = zero l = ipvt(j) temp = wa1(l) do 260 i = 1, j wa3(i) = wa3(i) + fjac(i,j)*temp 260 continue 270 continue temp1 = enorm(n,wa3)/fnorm temp2 = (dsqrt(par)*pnorm)/fnorm prered = temp1**2 + temp2**2/p5 dirder = -(temp1**2 + temp2**2) c c compute the ratio of the actual to the predicted c reduction. c ratio = zero if (prered .ne. zero) ratio = actred/prered c c update the step bound. c if (ratio .gt. p25) go to 280 if (actred .ge. zero) temp = p5 if (actred .lt. zero) * temp = p5*dirder/(dirder + p5*actred) if (p1*fnorm1 .ge. fnorm .or. temp .lt. p1) temp = p1 delta = temp*dmin1(delta,pnorm/p1) par = par/temp go to 300 280 continue if (par .ne. zero .and. ratio .lt. p75) go to 290 delta = pnorm/p5 par = p5*par 290 continue 300 continue c c test for successful iteration. c if (ratio .lt. p0001) go to 330 c c successful iteration. update x, fvec, and their norms. c do 310 j = 1, n x(j) = wa2(j) wa2(j) = diag(j)*x(j) 310 continue do 320 i = 1, m fvec(i) = wa4(i) 320 continue xnorm = enorm(n,wa2) fnorm = fnorm1 iter = iter + 1 330 continue c c tests for convergence. c if (dabs(actred) .le. ftol .and. prered .le. ftol * .and. p5*ratio .le. one) info = 1 if (delta .le. xtol*xnorm) info = 2 if (dabs(actred) .le. ftol .and. prered .le. ftol * .and. p5*ratio .le. one .and. info .eq. 2) info = 3 if (info .ne. 0) go to 340 c c tests for termination and stringent tolerances. c if (nfev .ge. maxfev) info = 5 if (dabs(actred) .le. epsmch .and. prered .le. epsmch * .and. p5*ratio .le. one) info = 6 if (delta .le. epsmch*xnorm) info = 7 if (gnorm .le. epsmch) info = 8 if (info .ne. 0) go to 340 c c end of the inner loop. repeat if iteration unsuccessful. c if (ratio .lt. p0001) go to 240 c c end of the outer loop. c go to 30 340 continue c c termination, either normal or user imposed. c if (iflag .lt. 0) info = iflag iflag = 0 if (nprint .gt. 0) call fcn(m,n,x,fvec,wa3,iflag) return c c last card of subroutine lmstr. c end PyBDSF-1.10.1/src/minpack/lmstr1.f000066400000000000000000000127311420247104600164270ustar00rootroot00000000000000 subroutine lmstr1(fcn,m,n,x,fvec,fjac,ldfjac,tol,info,ipvt,wa, * lwa) integer m,n,ldfjac,info,lwa integer ipvt(n) double precision tol double precision x(n),fvec(m),fjac(ldfjac,n),wa(lwa) external fcn c ********** c c subroutine lmstr1 c c the purpose of lmstr1 is to minimize the sum of the squares of c m nonlinear functions in n variables by a modification of c the levenberg-marquardt algorithm which uses minimal storage. c this is done by using the more general least-squares solver c lmstr. the user must provide a subroutine which calculates c the functions and the rows of the jacobian. c c the subroutine statement is c c subroutine lmstr1(fcn,m,n,x,fvec,fjac,ldfjac,tol,info, c ipvt,wa,lwa) c c where c c fcn is the name of the user-supplied subroutine which c calculates the functions and the rows of the jacobian. c fcn must be declared in an external statement in the c user calling program, and should be written as follows. c c subroutine fcn(m,n,x,fvec,fjrow,iflag) c integer m,n,iflag c double precision x(n),fvec(m),fjrow(n) c ---------- c if iflag = 1 calculate the functions at x and c return this vector in fvec. c if iflag = i calculate the (i-1)-st row of the c jacobian at x and return this vector in fjrow. c ---------- c return c end c c the value of iflag should not be changed by fcn unless c the user wants to terminate execution of lmstr1. c in this case set iflag to a negative integer. c c m is a positive integer input variable set to the number c of functions. c c n is a positive integer input variable set to the number c of variables. n must not exceed m. c c x is an array of length n. on input x must contain c an initial estimate of the solution vector. on output x c contains the final estimate of the solution vector. c c fvec is an output array of length m which contains c the functions evaluated at the output x. c c fjac is an output n by n array. the upper triangle of fjac c contains an upper triangular matrix r such that c c t t t c p *(jac *jac)*p = r *r, c c where p is a permutation matrix and jac is the final c calculated jacobian. column j of p is column ipvt(j) c (see below) of the identity matrix. the lower triangular c part of fjac contains information generated during c the computation of r. c c ldfjac is a positive integer input variable not less than n c which specifies the leading dimension of the array fjac. c c tol is a nonnegative input variable. termination occurs c when the algorithm estimates either that the relative c error in the sum of squares is at most tol or that c the relative error between x and the solution is at c most tol. c c info is an integer output variable. if the user has c terminated execution, info is set to the (negative) c value of iflag. see description of fcn. otherwise, c info is set as follows. c c info = 0 improper input parameters. c c info = 1 algorithm estimates that the relative error c in the sum of squares is at most tol. c c info = 2 algorithm estimates that the relative error c between x and the solution is at most tol. c c info = 3 conditions for info = 1 and info = 2 both hold. c c info = 4 fvec is orthogonal to the columns of the c jacobian to machine precision. c c info = 5 number of calls to fcn with iflag = 1 has c reached 100*(n+1). c c info = 6 tol is too small. no further reduction in c the sum of squares is possible. c c info = 7 tol is too small. no further improvement in c the approximate solution x is possible. c c ipvt is an integer output array of length n. ipvt c defines a permutation matrix p such that jac*p = q*r, c where jac is the final calculated jacobian, q is c orthogonal (not stored), and r is upper triangular. c column j of p is column ipvt(j) of the identity matrix. c c wa is a work array of length lwa. c c lwa is a positive integer input variable not less than 5*n+m. c c subprograms called c c user-supplied ...... fcn c c minpack-supplied ... lmstr c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, dudley v. goetschel, kenneth e. hillstrom, c jorge j. more c c ********** integer maxfev,mode,nfev,njev,nprint double precision factor,ftol,gtol,xtol,zero data factor,zero /1.0d2,0.0d0/ info = 0 c c check the input parameters for errors. c if (n .le. 0 .or. m .lt. n .or. ldfjac .lt. n .or. tol .lt. zero * .or. lwa .lt. 5*n + m) go to 10 c c call lmstr. c maxfev = 100*(n + 1) ftol = tol xtol = tol gtol = zero mode = 1 nprint = 0 call lmstr(fcn,m,n,x,fvec,fjac,ldfjac,ftol,xtol,gtol,maxfev, * wa(1),mode,factor,nprint,info,nfev,njev,ipvt,wa(n+1), * wa(2*n+1),wa(3*n+1),wa(4*n+1),wa(5*n+1)) if (info .eq. 8) info = 4 10 continue return c c last card of subroutine lmstr1. c end PyBDSF-1.10.1/src/minpack/qform.f000066400000000000000000000046761420247104600163420ustar00rootroot00000000000000 subroutine qform(m,n,q,ldq,wa) integer m,n,ldq double precision q(ldq,m),wa(m) c ********** c c subroutine qform c c this subroutine proceeds from the computed qr factorization of c an m by n matrix a to accumulate the m by m orthogonal matrix c q from its factored form. c c the subroutine statement is c c subroutine qform(m,n,q,ldq,wa) c c where c c m is a positive integer input variable set to the number c of rows of a and the order of q. c c n is a positive integer input variable set to the number c of columns of a. c c q is an m by m array. on input the full lower trapezoid in c the first min(m,n) columns of q contains the factored form. c on output q has been accumulated into a square matrix. c c ldq is a positive integer input variable not less than m c which specifies the leading dimension of the array q. c c wa is a work array of length m. c c subprograms called c c fortran-supplied ... min0 c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,j,jm1,k,l,minmn,np1 double precision one,sum,temp,zero data one,zero /1.0d0,0.0d0/ c c zero out upper triangle of q in the first min(m,n) columns. c minmn = min0(m,n) if (minmn .lt. 2) go to 30 do 20 j = 2, minmn jm1 = j - 1 do 10 i = 1, jm1 q(i,j) = zero 10 continue 20 continue 30 continue c c initialize remaining columns to those of the identity matrix. c np1 = n + 1 if (m .lt. np1) go to 60 do 50 j = np1, m do 40 i = 1, m q(i,j) = zero 40 continue q(j,j) = one 50 continue 60 continue c c accumulate q from its factored form. c do 120 l = 1, minmn k = minmn - l + 1 do 70 i = k, m wa(i) = q(i,k) q(i,k) = zero 70 continue q(k,k) = one if (wa(k) .eq. zero) go to 110 do 100 j = k, m sum = zero do 80 i = k, m sum = sum + q(i,j)*wa(i) 80 continue temp = sum/wa(k) do 90 i = k, m q(i,j) = q(i,j) - temp*wa(i) 90 continue 100 continue 110 continue 120 continue return c c last card of subroutine qform. c end PyBDSF-1.10.1/src/minpack/qrfac.f000066400000000000000000000124511420247104600163000ustar00rootroot00000000000000 subroutine qrfac(m,n,a,lda,pivot,ipvt,lipvt,rdiag,acnorm,wa) integer m,n,lda,lipvt integer ipvt(lipvt) logical pivot double precision a(lda,n),rdiag(n),acnorm(n),wa(n) c ********** c c subroutine qrfac c c this subroutine uses householder transformations with column c pivoting (optional) to compute a qr factorization of the c m by n matrix a. that is, qrfac determines an orthogonal c matrix q, a permutation matrix p, and an upper trapezoidal c matrix r with diagonal elements of nonincreasing magnitude, c such that a*p = q*r. the householder transformation for c column k, k = 1,2,...,min(m,n), is of the form c c t c i - (1/u(k))*u*u c c where u has zeros in the first k-1 positions. the form of c this transformation and the method of pivoting first c appeared in the corresponding linpack subroutine. c c the subroutine statement is c c subroutine qrfac(m,n,a,lda,pivot,ipvt,lipvt,rdiag,acnorm,wa) c c where c c m is a positive integer input variable set to the number c of rows of a. c c n is a positive integer input variable set to the number c of columns of a. c c a is an m by n array. on input a contains the matrix for c which the qr factorization is to be computed. on output c the strict upper trapezoidal part of a contains the strict c upper trapezoidal part of r, and the lower trapezoidal c part of a contains a factored form of q (the non-trivial c elements of the u vectors described above). c c lda is a positive integer input variable not less than m c which specifies the leading dimension of the array a. c c pivot is a logical input variable. if pivot is set true, c then column pivoting is enforced. if pivot is set false, c then no column pivoting is done. c c ipvt is an integer output array of length lipvt. ipvt c defines the permutation matrix p such that a*p = q*r. c column j of p is column ipvt(j) of the identity matrix. c if pivot is false, ipvt is not referenced. c c lipvt is a positive integer input variable. if pivot is false, c then lipvt may be as small as 1. if pivot is true, then c lipvt must be at least n. c c rdiag is an output array of length n which contains the c diagonal elements of r. c c acnorm is an output array of length n which contains the c norms of the corresponding columns of the input matrix a. c if this information is not needed, then acnorm can coincide c with rdiag. c c wa is a work array of length n. if pivot is false, then wa c can coincide with rdiag. c c subprograms called c c minpack-supplied ... dpmpar,enorm c c fortran-supplied ... dmax1,dsqrt,min0 c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,j,jp1,k,kmax,minmn double precision ajnorm,epsmch,one,p05,sum,temp,zero double precision dpmpar,enorm data one,p05,zero /1.0d0,5.0d-2,0.0d0/ c c epsmch is the machine precision. c epsmch = dpmpar(1) c c compute the initial column norms and initialize several arrays. c do 10 j = 1, n acnorm(j) = enorm(m,a(1,j)) rdiag(j) = acnorm(j) wa(j) = rdiag(j) if (pivot) ipvt(j) = j 10 continue c c reduce a to r with householder transformations. c minmn = min0(m,n) do 110 j = 1, minmn if (.not.pivot) go to 40 c c bring the column of largest norm into the pivot position. c kmax = j do 20 k = j, n if (rdiag(k) .gt. rdiag(kmax)) kmax = k 20 continue if (kmax .eq. j) go to 40 do 30 i = 1, m temp = a(i,j) a(i,j) = a(i,kmax) a(i,kmax) = temp 30 continue rdiag(kmax) = rdiag(j) wa(kmax) = wa(j) k = ipvt(j) ipvt(j) = ipvt(kmax) ipvt(kmax) = k 40 continue c c compute the householder transformation to reduce the c j-th column of a to a multiple of the j-th unit vector. c ajnorm = enorm(m-j+1,a(j,j)) if (ajnorm .eq. zero) go to 100 if (a(j,j) .lt. zero) ajnorm = -ajnorm do 50 i = j, m a(i,j) = a(i,j)/ajnorm 50 continue a(j,j) = a(j,j) + one c c apply the transformation to the remaining columns c and update the norms. c jp1 = j + 1 if (n .lt. jp1) go to 100 do 90 k = jp1, n sum = zero do 60 i = j, m sum = sum + a(i,j)*a(i,k) 60 continue temp = sum/a(j,j) do 70 i = j, m a(i,k) = a(i,k) - temp*a(i,j) 70 continue if (.not.pivot .or. rdiag(k) .eq. zero) go to 80 temp = a(j,k)/rdiag(k) rdiag(k) = rdiag(k)*dsqrt(dmax1(zero,one-temp**2)) if (p05*(rdiag(k)/wa(k))**2 .gt. epsmch) go to 80 rdiag(k) = enorm(m-j,a(jp1,k)) wa(k) = rdiag(k) 80 continue 90 continue 100 continue rdiag(j) = -ajnorm 110 continue return c c last card of subroutine qrfac. c end PyBDSF-1.10.1/src/minpack/qrsolv.f000066400000000000000000000140421420247104600165300ustar00rootroot00000000000000 subroutine qrsolv(n,r,ldr,ipvt,diag,qtb,x,sdiag,wa) integer n,ldr integer ipvt(n) double precision r(ldr,n),diag(n),qtb(n),x(n),sdiag(n),wa(n) c ********** c c subroutine qrsolv c c given an m by n matrix a, an n by n diagonal matrix d, c and an m-vector b, the problem is to determine an x which c solves the system c c a*x = b , d*x = 0 , c c in the least squares sense. c c this subroutine completes the solution of the problem c if it is provided with the necessary information from the c qr factorization, with column pivoting, of a. that is, if c a*p = q*r, where p is a permutation matrix, q has orthogonal c columns, and r is an upper triangular matrix with diagonal c elements of nonincreasing magnitude, then qrsolv expects c the full upper triangle of r, the permutation matrix p, c and the first n components of (q transpose)*b. the system c a*x = b, d*x = 0, is then equivalent to c c t t c r*z = q *b , p *d*p*z = 0 , c c where x = p*z. if this system does not have full rank, c then a least squares solution is obtained. on output qrsolv c also provides an upper triangular matrix s such that c c t t t c p *(a *a + d*d)*p = s *s . c c s is computed within qrsolv and may be of separate interest. c c the subroutine statement is c c subroutine qrsolv(n,r,ldr,ipvt,diag,qtb,x,sdiag,wa) c c where c c n is a positive integer input variable set to the order of r. c c r is an n by n array. on input the full upper triangle c must contain the full upper triangle of the matrix r. c on output the full upper triangle is unaltered, and the c strict lower triangle contains the strict upper triangle c (transposed) of the upper triangular matrix s. c c ldr is a positive integer input variable not less than n c which specifies the leading dimension of the array r. c c ipvt is an integer input array of length n which defines the c permutation matrix p such that a*p = q*r. column j of p c is column ipvt(j) of the identity matrix. c c diag is an input array of length n which must contain the c diagonal elements of the matrix d. c c qtb is an input array of length n which must contain the first c n elements of the vector (q transpose)*b. c c x is an output array of length n which contains the least c squares solution of the system a*x = b, d*x = 0. c c sdiag is an output array of length n which contains the c diagonal elements of the upper triangular matrix s. c c wa is a work array of length n. c c subprograms called c c fortran-supplied ... dabs,dsqrt c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,j,jp1,k,kp1,l,nsing double precision cos,cotan,p5,p25,qtbpj,sin,sum,tan,temp,zero data p5,p25,zero /5.0d-1,2.5d-1,0.0d0/ c c copy r and (q transpose)*b to preserve input and initialize s. c in particular, save the diagonal elements of r in x. c do 20 j = 1, n do 10 i = j, n r(i,j) = r(j,i) 10 continue x(j) = r(j,j) wa(j) = qtb(j) 20 continue c c eliminate the diagonal matrix d using a givens rotation. c do 100 j = 1, n c c prepare the row of d to be eliminated, locating the c diagonal element using p from the qr factorization. c l = ipvt(j) if (diag(l) .eq. zero) go to 90 do 30 k = j, n sdiag(k) = zero 30 continue sdiag(j) = diag(l) c c the transformations to eliminate the row of d c modify only a single element of (q transpose)*b c beyond the first n, which is initially zero. c qtbpj = zero do 80 k = j, n c c determine a givens rotation which eliminates the c appropriate element in the current row of d. c if (sdiag(k) .eq. zero) go to 70 if (dabs(r(k,k)) .ge. dabs(sdiag(k))) go to 40 cotan = r(k,k)/sdiag(k) sin = p5/dsqrt(p25+p25*cotan**2) cos = sin*cotan go to 50 40 continue tan = sdiag(k)/r(k,k) cos = p5/dsqrt(p25+p25*tan**2) sin = cos*tan 50 continue c c compute the modified diagonal element of r and c the modified element of ((q transpose)*b,0). c r(k,k) = cos*r(k,k) + sin*sdiag(k) temp = cos*wa(k) + sin*qtbpj qtbpj = -sin*wa(k) + cos*qtbpj wa(k) = temp c c accumulate the tranformation in the row of s. c kp1 = k + 1 if (n .lt. kp1) go to 70 do 60 i = kp1, n temp = cos*r(i,k) + sin*sdiag(i) sdiag(i) = -sin*r(i,k) + cos*sdiag(i) r(i,k) = temp 60 continue 70 continue 80 continue 90 continue c c store the diagonal element of s and restore c the corresponding diagonal element of r. c sdiag(j) = r(j,j) r(j,j) = x(j) 100 continue c c solve the triangular system for z. if the system is c singular, then obtain a least squares solution. c nsing = n do 110 j = 1, n if (sdiag(j) .eq. zero .and. nsing .eq. n) nsing = j - 1 if (nsing .lt. n) wa(j) = zero 110 continue if (nsing .lt. 1) go to 150 do 140 k = 1, nsing j = nsing - k + 1 sum = zero jp1 = j + 1 if (nsing .lt. jp1) go to 130 do 120 i = jp1, nsing sum = sum + r(i,j)*wa(i) 120 continue 130 continue wa(j) = (wa(j) - sum)/sdiag(j) 140 continue 150 continue c c permute the components of z back to components of x. c do 160 j = 1, n l = ipvt(j) x(l) = wa(j) 160 continue return c c last card of subroutine qrsolv. c end PyBDSF-1.10.1/src/minpack/r1mpyq.f000066400000000000000000000054551420247104600164430ustar00rootroot00000000000000 subroutine r1mpyq(m,n,a,lda,v,w) integer m,n,lda double precision a(lda,n),v(n),w(n) c ********** c c subroutine r1mpyq c c given an m by n matrix a, this subroutine computes a*q where c q is the product of 2*(n - 1) transformations c c gv(n-1)*...*gv(1)*gw(1)*...*gw(n-1) c c and gv(i), gw(i) are givens rotations in the (i,n) plane which c eliminate elements in the i-th and n-th planes, respectively. c q itself is not given, rather the information to recover the c gv, gw rotations is supplied. c c the subroutine statement is c c subroutine r1mpyq(m,n,a,lda,v,w) c c where c c m is a positive integer input variable set to the number c of rows of a. c c n is a positive integer input variable set to the number c of columns of a. c c a is an m by n array. on input a must contain the matrix c to be postmultiplied by the orthogonal matrix q c described above. on output a*q has replaced a. c c lda is a positive integer input variable not less than m c which specifies the leading dimension of the array a. c c v is an input array of length n. v(i) must contain the c information necessary to recover the givens rotation gv(i) c described above. c c w is an input array of length n. w(i) must contain the c information necessary to recover the givens rotation gw(i) c described above. c c subroutines called c c fortran-supplied ... dabs,dsqrt c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more c c ********** integer i,j,nmj,nm1 double precision cos,one,sin,temp data one /1.0d0/ c c apply the first set of givens rotations to a. c nm1 = n - 1 if (nm1 .lt. 1) go to 50 do 20 nmj = 1, nm1 j = n - nmj if (dabs(v(j)) .gt. one) cos = one/v(j) if (dabs(v(j)) .gt. one) sin = dsqrt(one-cos**2) if (dabs(v(j)) .le. one) sin = v(j) if (dabs(v(j)) .le. one) cos = dsqrt(one-sin**2) do 10 i = 1, m temp = cos*a(i,j) - sin*a(i,n) a(i,n) = sin*a(i,j) + cos*a(i,n) a(i,j) = temp 10 continue 20 continue c c apply the second set of givens rotations to a. c do 40 j = 1, nm1 if (dabs(w(j)) .gt. one) cos = one/w(j) if (dabs(w(j)) .gt. one) sin = dsqrt(one-cos**2) if (dabs(w(j)) .le. one) sin = w(j) if (dabs(w(j)) .le. one) cos = dsqrt(one-sin**2) do 30 i = 1, m temp = cos*a(i,j) + sin*a(i,n) a(i,n) = -sin*a(i,j) + cos*a(i,n) a(i,j) = temp 30 continue 40 continue 50 continue return c c last card of subroutine r1mpyq. c end PyBDSF-1.10.1/src/minpack/r1updt.f000066400000000000000000000131061420247104600164210ustar00rootroot00000000000000 subroutine r1updt(m,n,s,ls,u,v,w,sing) integer m,n,ls logical sing double precision s(ls),u(m),v(n),w(m) c ********** c c subroutine r1updt c c given an m by n lower trapezoidal matrix s, an m-vector u, c and an n-vector v, the problem is to determine an c orthogonal matrix q such that c c t c (s + u*v )*q c c is again lower trapezoidal. c c this subroutine determines q as the product of 2*(n - 1) c transformations c c gv(n-1)*...*gv(1)*gw(1)*...*gw(n-1) c c where gv(i), gw(i) are givens rotations in the (i,n) plane c which eliminate elements in the i-th and n-th planes, c respectively. q itself is not accumulated, rather the c information to recover the gv, gw rotations is returned. c c the subroutine statement is c c subroutine r1updt(m,n,s,ls,u,v,w,sing) c c where c c m is a positive integer input variable set to the number c of rows of s. c c n is a positive integer input variable set to the number c of columns of s. n must not exceed m. c c s is an array of length ls. on input s must contain the lower c trapezoidal matrix s stored by columns. on output s contains c the lower trapezoidal matrix produced as described above. c c ls is a positive integer input variable not less than c (n*(2*m-n+1))/2. c c u is an input array of length m which must contain the c vector u. c c v is an array of length n. on input v must contain the vector c v. on output v(i) contains the information necessary to c recover the givens rotation gv(i) described above. c c w is an output array of length m. w(i) contains information c necessary to recover the givens rotation gw(i) described c above. c c sing is a logical output variable. sing is set true if any c of the diagonal elements of the output s are zero. otherwise c sing is set false. c c subprograms called c c minpack-supplied ... dpmpar c c fortran-supplied ... dabs,dsqrt c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, kenneth e. hillstrom, jorge j. more, c john l. nazareth c c ********** integer i,j,jj,l,nmj,nm1 double precision cos,cotan,giant,one,p5,p25,sin,tan,tau,temp, * zero double precision dpmpar data one,p5,p25,zero /1.0d0,5.0d-1,2.5d-1,0.0d0/ c c giant is the largest magnitude. c giant = dpmpar(3) c c initialize the diagonal element pointer. c jj = (n*(2*m - n + 1))/2 - (m - n) c c move the nontrivial part of the last column of s into w. c l = jj do 10 i = n, m w(i) = s(l) l = l + 1 10 continue c c rotate the vector v into a multiple of the n-th unit vector c in such a way that a spike is introduced into w. c nm1 = n - 1 if (nm1 .lt. 1) go to 70 do 60 nmj = 1, nm1 j = n - nmj jj = jj - (m - j + 1) w(j) = zero if (v(j) .eq. zero) go to 50 c c determine a givens rotation which eliminates the c j-th element of v. c if (dabs(v(n)) .ge. dabs(v(j))) go to 20 cotan = v(n)/v(j) sin = p5/dsqrt(p25+p25*cotan**2) cos = sin*cotan tau = one if (dabs(cos)*giant .gt. one) tau = one/cos go to 30 20 continue tan = v(j)/v(n) cos = p5/dsqrt(p25+p25*tan**2) sin = cos*tan tau = sin 30 continue c c apply the transformation to v and store the information c necessary to recover the givens rotation. c v(n) = sin*v(j) + cos*v(n) v(j) = tau c c apply the transformation to s and extend the spike in w. c l = jj do 40 i = j, m temp = cos*s(l) - sin*w(i) w(i) = sin*s(l) + cos*w(i) s(l) = temp l = l + 1 40 continue 50 continue 60 continue 70 continue c c add the spike from the rank 1 update to w. c do 80 i = 1, m w(i) = w(i) + v(n)*u(i) 80 continue c c eliminate the spike. c sing = .false. if (nm1 .lt. 1) go to 140 do 130 j = 1, nm1 if (w(j) .eq. zero) go to 120 c c determine a givens rotation which eliminates the c j-th element of the spike. c if (dabs(s(jj)) .ge. dabs(w(j))) go to 90 cotan = s(jj)/w(j) sin = p5/dsqrt(p25+p25*cotan**2) cos = sin*cotan tau = one if (dabs(cos)*giant .gt. one) tau = one/cos go to 100 90 continue tan = w(j)/s(jj) cos = p5/dsqrt(p25+p25*tan**2) sin = cos*tan tau = sin 100 continue c c apply the transformation to s and reduce the spike in w. c l = jj do 110 i = j, m temp = cos*s(l) + sin*w(i) w(i) = -sin*s(l) + cos*w(i) s(l) = temp l = l + 1 110 continue c c store the information necessary to recover the c givens rotation. c w(j) = tau 120 continue c c test for zero diagonal elements in the output s. c if (s(jj) .eq. zero) sing = .true. jj = jj + (m - j + 1) 130 continue 140 continue c c move w back into the last column of the output s. c l = jj do 150 i = n, m s(l) = w(i) l = l + 1 150 continue if (s(jj) .eq. zero) sing = .true. return c c last card of subroutine r1updt. c end PyBDSF-1.10.1/src/minpack/rwupdt.f000066400000000000000000000073351420247104600165360ustar00rootroot00000000000000 subroutine rwupdt(n,r,ldr,w,b,alpha,cos,sin) integer n,ldr double precision alpha double precision r(ldr,n),w(n),b(n),cos(n),sin(n) c ********** c c subroutine rwupdt c c given an n by n upper triangular matrix r, this subroutine c computes the qr decomposition of the matrix formed when a row c is added to r. if the row is specified by the vector w, then c rwupdt determines an orthogonal matrix q such that when the c n+1 by n matrix composed of r augmented by w is premultiplied c by (q transpose), the resulting matrix is upper trapezoidal. c the matrix (q transpose) is the product of n transformations c c g(n)*g(n-1)* ... *g(1) c c where g(i) is a givens rotation in the (i,n+1) plane which c eliminates elements in the (n+1)-st plane. rwupdt also c computes the product (q transpose)*c where c is the c (n+1)-vector (b,alpha). q itself is not accumulated, rather c the information to recover the g rotations is supplied. c c the subroutine statement is c c subroutine rwupdt(n,r,ldr,w,b,alpha,cos,sin) c c where c c n is a positive integer input variable set to the order of r. c c r is an n by n array. on input the upper triangular part of c r must contain the matrix to be updated. on output r c contains the updated triangular matrix. c c ldr is a positive integer input variable not less than n c which specifies the leading dimension of the array r. c c w is an input array of length n which must contain the row c vector to be added to r. c c b is an array of length n. on input b must contain the c first n elements of the vector c. on output b contains c the first n elements of the vector (q transpose)*c. c c alpha is a variable. on input alpha must contain the c (n+1)-st element of the vector c. on output alpha contains c the (n+1)-st element of the vector (q transpose)*c. c c cos is an output array of length n which contains the c cosines of the transforming givens rotations. c c sin is an output array of length n which contains the c sines of the transforming givens rotations. c c subprograms called c c fortran-supplied ... dabs,dsqrt c c argonne national laboratory. minpack project. march 1980. c burton s. garbow, dudley v. goetschel, kenneth e. hillstrom, c jorge j. more c c ********** integer i,j,jm1 double precision cotan,one,p5,p25,rowj,tan,temp,zero data one,p5,p25,zero /1.0d0,5.0d-1,2.5d-1,0.0d0/ c do 60 j = 1, n rowj = w(j) jm1 = j - 1 c c apply the previous transformations to c r(i,j), i=1,2,...,j-1, and to w(j). c if (jm1 .lt. 1) go to 20 do 10 i = 1, jm1 temp = cos(i)*r(i,j) + sin(i)*rowj rowj = -sin(i)*r(i,j) + cos(i)*rowj r(i,j) = temp 10 continue 20 continue c c determine a givens rotation which eliminates w(j). c cos(j) = one sin(j) = zero if (rowj .eq. zero) go to 50 if (dabs(r(j,j)) .ge. dabs(rowj)) go to 30 cotan = r(j,j)/rowj sin(j) = p5/dsqrt(p25+p25*cotan**2) cos(j) = sin(j)*cotan go to 40 30 continue tan = rowj/r(j,j) cos(j) = p5/dsqrt(p25+p25*tan**2) sin(j) = cos(j)*tan 40 continue c c apply the current transformation to r(j,j), b(j), and alpha. c r(j,j) = cos(j)*r(j,j) + sin(j)*rowj temp = cos(j)*b(j) + sin(j)*alpha alpha = -sin(j)*b(j) + cos(j)*alpha b(j) = temp 50 continue 60 continue return c c last card of subroutine rwupdt. c end PyBDSF-1.10.1/src/port3/000077500000000000000000000000001420247104600144575ustar00rootroot00000000000000PyBDSF-1.10.1/src/port3/CHANGES000066400000000000000000000421471420247104600154620ustar00rootroot00000000000000====== corrections to PORT ====== The PORT3 subroutine library has two parts, one with publicly available code (freely available from netlib), the other proprietary (available for a fee: contact AT&T Technology Licensing, (800) 462-8146; 10 Independence Blvd, Warren, NJ 07060-0911.) This file describes changes to both parts. Descriptions of corrections to the proprietary part are flagged with ($$); the corrected proprietary routines are available "from portfix". For AT&T people (accessing netlib from a machine known to Network Action Central as an AT&T machine "inside the firewall"), all of PORT3 is available from netlib. ====== errata ====== N2F (and N2G): the last word in the ``Purpose'' section should be ``N2G'' rather than ``N2F''. MNSX and SMNSX ($$): Usage sections should show these as functions rather than subroutines. See the SMNSX example. N2FB (and N2GB): Note 3 should mention ``NSFB or NSGB'' rather than ``PSNBN, PSNLB, SNLLB, or SNLBN''. POST ($$): LPLMI calling sequence is WRONG - should be LPLMI(NV,V,X,NX,XI). *********** (The above errors have been corrected in Port documenttion source.) From nls Wed Dec 12 10:06 EST 1984 l2sff calls gq1 (not gqm11) which calls ... which calls "gamma", disagrees with cross-reference index of port 3. should check them all. From dmg Wed Apr 3 8:50 EST 1985 The examples for MFTCR (label MFTG) and MFTRC (label MFTF) have two statements misplaced in the loops that conjugate the output from MFTRC: the statement "N2MK = N-1" should be one line higher (just before the outer DO statement) and the statement "N2MK = N2MK - 2" should be one lower (just after the CONTINUE closing the inner DO statement). This has no effect on the output of the examples (unless you turn subscript checking on), but it does make them confusing. ====== Bug fixes ====== From dmg Thu Apr 4 06:25 EST 1985 Adjust FFT routines ($$) MFTCC, MFTCR, and MFTRC to work correctly when N is the product of an odd number of primes. (Source tapes distributed after March of 1985 should have these bugs fixed.) From dmg Sun Apr 7 14:24 EST 1985 The scratch storage (from the Port stack) required by MFTCR ($$) and MFTRC is (N+2)*NNS rather than N*NNS. From dmg Tue Sep 24 08:00 EST 1985 Corrections to Port 3 source: A9RNT[CDILR] (in p3src.frame) and APRNT[CDILR] (in Utilities): delete the line "MCOL = MIN0(MCOL, 160)" and later (in the one line where MCOL is used) change "MCOL" to "MIN0(MCOL,160)". [This stops these routines from possibly modifying the input-only parameter MCOL.] BPLD, CBPLD, DBPLD (in p3src.lin): insert "CALL ERROFF" at label 70 (just before the call on SETERR originally labeled 70). [In the unlikely event that SETERR has been called with the message "SINGULAR MATRIX", this eliminates the Port error of calling SETERR while an error is outstanding.] CBANM and CBPNM (in p3src.lin ($$)): omit the declaration of CABS. QP2NT and DQP2NT (in p3src.linopt ($$)): change "WRITE(6" to "WRITE(PU" (twice). LGEA (in p3tests): change "IWRITE = 6" to "IWRITE = I1MACH(2)" (on line 7). PRSA (in p3tests): change "WRITE(6" to "WRITE(IWRITE" (11 times). M66FT, MFTCC, MFTCR, MFTRC, DM66FT, DMFTCC, DMFTCR, DMFTRC (in p3src.fft ($$)): change "INTEGER IFX(1)" to the following 5 lines: C/6S INTEGER IFX(1) C/7S C INTEGER IFX(*) C/ [This prevents a compile-time diagnostic of subscript out of range on some Fortran 77 compilers when these routines reference IFX(2) or IFX(3).] [IRD]1MACH (in p3src.frame): constants for Sequent Balance 8000 and AT&T 7300 (UNIX PC) added. From dmg Tue Sep 24 19:32 EST 1985 SVAD (in p3tests) should declare UNI to be REAL rather than DOUBLE PRECISION and should reference DBLE(UNI(0)) rather than just UNI(0). From dmg Wed Sep 25 13:22 EST 1985 DT1UED, DT1UEV, DT2UEV, DT3UEV, DVDSS1 (in p3src.app2 ($$)) should reference DBLE(FLOAT(...)) rather than DFLOAT(...) (or should declare DFLOAT to be DOUBLE PRECISION). The same applies to LYAD, VDAD, VDBD, and VDED in p3tests. From dmg Wed Oct 16 15:25 EST 1985 Linear programming modules changed by Linda Kaufman ($$): A4PPG A4PPS C4NST C4ONS D4CLM DA4PPG DA4PPS DC4NST DC4ONS DD4CLM DG4ETC DL4P2 DL4PH1 G4ETC L4P2 L4PH1 From dmg Wed Oct 16 15:28 EST 1985 LRAD and LRPA in p3tests have four FORMAT statements each with extra commas in them (before and after a / ). From ehg Fri Oct 25 18:04 EDT 1985 In VDSS1 and DVDSS1 ($$), the assignment to L1 should involve FLOAT(N-1) rather than FLOAT(N). From dmg Fri Feb 14 10:57 EST 1986 In Z1ONE ($$), the lines IF (JCALL .GT. 1 .AND. G2 .GT. 0.0E0) DXTRY = AMIN1(DXTRY, G2) JUSED = 0 should be changed to C *** G2 IS NOT DEFINED WHEN JCALL .LE. 1 *** IF (JCALL .LE. 1) GO TO 61 IF (G2 .GT. 0.0E0) DXTRY = AMIN1(DXTRY, G2) 61 JUSED = 0 Similarly, in DZ1ONE, the lines IF (JCALL .GT. 1 .AND. G2 .GT. 0.0D0) DXTRY = DMIN1(DXTRY, G2) JUSED = 0 should be changed to C *** G2 IS NOT DEFINED WHEN JCALL .LE. 1 *** IF (JCALL .LE. 1) GO TO 61 IF (G2 .GT. 0.0D0) DXTRY = DMIN1(DXTRY, G2) 61 JUSED = 0 From dmg Tue Apr 15 23:30 EST 1986 Linda Kaufman has changed LINPA, LINPR, DLINPA, DLINPR, and many of the modules they call ($$). From dmg Fri Jun 6 17:00 EST 1986 In RQUAD ($$), the line IF (KWARN .GT. 0) GO TO 200 should be added before line 40, i.e., just before EPS = EPSA + EPSR * ABS(ANS) In DRQUAD ($$), lines 41-43 should be changed from EPS = EPSA + EPSR * DABS(ANS) EPS = EPSA + EPSR * DMAX1(0.5D0*DABS(ANS), DABS(ANS)-ERREST) IF (KWARN .GT. 0) GO TO 200 to IF (KWARN .GT. 0) GO TO 200 EPS = EPSA + EPSR * DABS(ANS) IF (ERREST .LE. EPS) RETURN EPS = EPSA + EPSR * DMAX1(0.5D0*DABS(ANS), DABS(ANS)-ERREST) That is, "IF (KWARN..." should go up two lines, and "IF (ERREST .LE. EPS) RETURN" should be added after the first assignment ot EPS. From dmg Thu Aug 7 14:54 EDT 1986 The documentation for NSF1 ($$) should list X as an output (rather than input) variable and should define f(x) as 1/2 sum from i=1 to n ( sum from j=1 to L A sub i,j (x) c sub j y(x) sub i ) sup 2 (i.e., there should be a left paren between the sumation signs rather than before A). From dmg Tue Sep 30 12:45 EDT 1986 In subroutines V7DFL and DV7DFL, the statement V(DELTA0) = SQTEPS should be moved from line 58 to line 86, i.e., to follow V(DINIT) = 0.D+0 (This only matters if you provide [D]MN[FG] with an initial Hessian approximation.) From dmg Thu Feb 12 14:38 EST 1987 DM[135]FT DMFT[CR]I: COMMON /M55FT/ changed to /DM55FT/ From dmg Thu Feb 26 11:02 EST 1987 [D]MFTC[RC], [D]MFTRC ($$): size of DSTAK made consistent with the rest of Port. From dmg Fri Feb 27 23:32 EST 1987 [D]LTSQ ($$): calls on [D]G1SVD and [D]C2LSQ should pass DSTAK(IV) or RSTAK(IV) rather than A. [bug fix by lck] From dmg Fri Feb 27 23:38 EST 1987 Sundry Optimization Chapter modules adjusted so they only declare EXTERNAL routines actually used, and so EXTERNAL statements come after rather than before relevant type statements. From dmg Fri Apr 17 7:18:00 EDT 1987 [D]SVDLS ($$): last two calls on [D]G1SVD should pass .TRUE. rather than MATV. [bug fix by lck] From dmg Thu May 28 17:13 EDT 1987 [D]HQR2 replaced by versions adapted from EISPACK II (to fix a bug in DHQR2). From dmg Tue Aug 11 11:04 EDT 1987 EXTERNAL statements shifted in *NSX routines of Optimization Chapter ($$). From dmg Tue Aug 18 12:52:30 EDT 1987 [ D]G7QTS: massaged to prevent loop when lower and upper Gerschgorin bounds are exact. From dmg Tue Sep 29 09:10:05 EDT 1987 Typos in NS[FG][B ] documentation: change IINC to INCC everywhere, and change "For the example discussed in B" to "For B in the example discussed" . From dmg Wed Sep 30 16:00:00 EDT 1987 DP6MDC ($$) should declare SAVE rather than PSAVE . [fix from nls and lck] From dmg Sun Oct 8 18:00:00 EST 1987 MNSX and SMNSX ($$): RSTAK should be dimensioned 1000 (rather than 500 -- for consistency with the rest of Port). From dmg Fri Jan 29 22:00:00 EST 1988 I1MACH, R1MACH, D1MACH: constants for CDC machines corrected. From dmg Fri Sep 23 09:44:00 EDT 1988 [RD]1MACH: sanity check (stuff involving SC) added. From dmg Tue Nov 29 07:25:00 EST 1988 [ D]A4PPG ($$): bug fixes from Linda Kaufman From dmg Mon Dec 19 18:26:00 EST 1988 [ D]S[37]GRD: more robust scaling: changed "H = TWO*(AFXETA*AGI/(AAI**2))**(ONE/THREE)" into "H = TWO * (AFXETA*AGI)**(ONE/THREE) * AAI**(-TWO/THREE)" From dmg Wed Mar 15 06:15 EST 1989 [ D]G4ETC and [ D]L4PH1 ($$): bug fixes from Linda Kaufman (affecting [ D]IQP with bounds = [RD]1MACH(2) ). From dmg Mon Jul 24 23:55 EDT 1989 [ D]NSF: second call on CALCA (just after 160 CONTINUE) should pass IV(NFGCAL) rather than NF. From dmg Fri Aug 4 10:47:00 EDT 1989 [ D]POSTW: K should appear in a DATA stmt: DATA K/0/ and, for Fortran 77, should appear in a SAVE statement. From dmg Sat Jan 13 18:58:00 EST 1990 DSPMLE ($$): lines 104-107: the SETERR call omitted IERR as the penultimate parameter: the continuation line should be 1 IERR, 2) From dmg Wed Jan 17 15:18:00 EST 1990 C5APP ($$): should call MOVEBR rather than MOVEBD. N5ERR ($$): the Fortran 77 version should declare MESSG to be CHARACTER*1 MESSG(NMESSG) ASYM, DASYM, DSYM, SYM ($$): the SETERR call omitted the string-length argument, 16 (arg 2). From dmg Sat Jan 20 17:12:14 EST 1990 DNSF1 ($$): should declare DFMIN to be DOUBLE PRECISION. From dmg Tue Feb 13 09:53:00 EST 1990 [ D]G7LIT and [ D]G7ITB: should set IV(RESTOR) properly when declining to evaluate the objective function during "internal doubling". This sometime affects the separable nonlinear least-squares routines. From dmg Sun Apr 1 17:05:04 EDT 1990 [ D]RN2G[B ]: adjusted to ask just once rather than twice for the initial residual in the unusual case where the residual and Jacobian matrix are provided in "hunks" (i.e., ND < N). From dmg Tue Apr 3 19:18:08 EDT 1990 [ D]NSF and [ D]N2GB: comments about minimum values of LIV and LV corrected. From dmg Sun Apr 15 00:12:50 EDT 1990 Minor modifications in [ D]G7ITB, [ D]G7LIT, [ D]RNSG -- should be invisible to current PORT uses of these routines. From dmg Mon May 14 09:57:36 EDT 1990 [ D]RMN[GH][B ] changed to set IV(RESTOR) properly when declining to evaluate the objective function during "internal doubling". This only matters if you're calling one of these routines directly and you rely on IV(RESTOR). From dmg Wed May 16 00:14:43 EDT 1990 [ D]RMNH[B ] changed to set the initial radius as the nonlinear least squares solvers do, to V(LMAX0)/(1 + V(PHMXFC)) (rather than just to V(LMAX0)), so that the first step tried is guaranteed to have 2-norm at most V(LMAX0). From dmg Tue Aug 14 01:12:47 EDT 1990 [ D]G7ITB changed to return IV(1) = 82 (as per the Usage Summary) when some lower bound exceeds the corresponding upper bound. From dmg Fri Sep 28 11:37:51 EDT 1990 Comments on lengths of IV and LIV corrected in [ D][ R][MN[FGH]B. (The numbers in the Port manual are correct.) From dmg Tue Oct 16 12:35:13 EDT 1990 [ D]N2LRD and [ D]N2RDP: scale of regression diagnostic vector changed: it is now scaled (in [ D]N2LRD) by 1/sqrt(f*) when f* is nonzero, where f* is the "optimal" objective value; the printing in [ D]N2RDP reflects this change. This change makes the regression diagnostic vector independent of "response scale", i.e., of the scale of the residual vector. From dmg Fri Jan 18 00:07:12 EST 1991 [ D]G7QTS: insert IF (UK .LT. LK) UK = LK just before IF (ALPHAK .LT. LK) GO TO 210 to prevent a rare loop due to roundoff errors. From dmg Mon Apr 15 14:38:42 EDT 1991 [ D]A4PPS ($$) updated to fix a stack-overwrite bug in [ D]LINP[AR] that sometimes manifested itself when a variable had identical simple lower and upper bounds. (Thanks to lck for the fix.) From dmg Mon May 6 17:01:59 EDT 1991 [ D]4CLM, [ D]L4P2, [ D]L4PH1 ($$) modified to correct a bug in [ D]LINP[AR]. Possible symptom: continuing to iterate at an optimal solution. (Thanks to lck for the fix.) From dmg Fri May 10 13:18:46 EDT 1991 Further tweak by lck to [ D]L4P2 ($$). From dmg Sat 22 Jun 16:55:34 EDT 1991 Trivial change to declarations in [ d]s7dmp.f: change "X(*), Y(N), Z(*)" to "X(*), Y(*), Z(N)". From dmg Wed 26 Jun 18:59:26 EDT 1991 Tweak (from ehg) to D1MACH: in response to a SUN Fortran compiler bug, integer arrays involved in EQUIVALENCE and DATA are now dimensioned (2) rather than (4), and comments point out the machines where (2) must be changed to (4). From dmg Sat Jul 6 09:47:17 EDT 1991 [ D]A7SST: use correct tolerance [V(SCTOL)] both places the singular- convergence test is made: change V(RFCTOL) to V(SCTOL) in the line 290 IF (-V(NREDUC) .LE. V(RFCTOL) * DABS(V(F0))) IV(IRC) = 11 From dmg Thu Sep 12 09:56:31 EDT 1991 parck.f: change D11.3 to E11.3 in the FORMAT labelled 130. From dmg Sat Jan 18 00:24:24 EST 1992 Correct comments in [ d]rn2gb.f: < C LIV...... LENGTH OF IV... LIV MUST BE AT LEAST P + 80. < C LV....... LENGTH OF V... LV MUST BE AT LEAST 105 + P*(2*P+16). --- > C LIV...... LENGTH OF IV... LIV MUST BE AT LEAST 4*P + 82. > C LV....... LENGTH OF V... LV MUST BE AT LEAST 105 + P*(2*P+20). From dmg Sat Mar 21 00:42:45 EST 1992 Comments in D1MACH about IEEE constants tweaked. From dmg Tue May 19 22:57:44 EDT 1992 Commented C source appended just before the END lines of [IRD]1MACH. From dmg Tue Jul 28 08:52:38 EDT 1992 DRPOLY and D[12345789]RPLY ($$) changed to do all calculations in double precision (to circumvent exponent range limitations on machines, such as IEEE arithmetic machines, in which single precision has a smaller exponent range than double). From dmg Tue Mar 9 13:19:23 EST 1993 [ d]n2g[b ].f: move "NN = N2 - N1 + 1" down 3 lines, so it comes after "IF (IV1 .GT. 2) GO TO 10". This only matters if your machine checks for uninitialized integer variables. From dmg Thu May 13 22:08:11 EDT 1993 [ d]a7ssT.f: add "V(F) = V(FLSTGD)" to block labelled 60 (to restore function value when IV(TOOBIG) is nonzero). This matters if the next function evaluation would exceed the function evaluation limit. Fri Jun 10 13:09:15 EDT 1994 [ d]l4ph1.f: lines 86 and 87 ($$): change (I) to (II) throughout. Wed Feb 15 11:38:13 EST 1995 [ d]n2g[b ].f: correct volume number in comment on NL2SOL paper. Mon Jun 5 16:56:53 EDT 1995 [ d]l7mst.f: fix bug in rescaling fast-Givens transformations: the new scale wasn't stored when no rotation was necessary (a rarely seen bug). Sun Jun 18 00:22:57 EDT 1995 [ d]a7sst.f: zero IV(TOOBIG) when nonzero. Sometimes a longer step is attempted before accepting a step that would give a decrease. If this longer step caused IV(TOOBIG) to be nonzero, it might be left nonzero during the gradient evaluation, leading to an incorrect message about the gradient not being computable. [ d]rmng.f: fix a wrong goto (used in singular-convergence test). [ d]rmn[gh][b ].f: initialize V(F0) to the initial function value. Fri Sep 15 11:24:08 EDT 1995 burm1.f: fix glitch in test for overly tight convergence tolerance: 70c70 < IDIG = IFLR(R1MACH(5)*FLOAT(I1MACH(11))) --- > IDIG = IFLR(R1MACH(5)*FLOAT(I1MACH(14))) (burm1.f is only in the AT&T-proprietary part of PORT.) [ d]rnsg[b ].f: (not really a bug): adjust second call of [ D]RN2G[B ] to pass a copy of NML for arg N2. This is the change to drnsg.f: 107c107 < 1 IPIV1, IER, IV1, J1, JLEN, K, LH, LI, LL1O2, MD, N1, --- > 1 IPIV1, IER, IV1, J1, JLEN, K, LH, LI, LL1O2, MD, N1, N2, 210c210,211 < 30 CALL DRN2G(V(D1), V(DR1L), IV, LIV, LV, NML, N, N1, NML, P, --- > 30 N2 = NML > CALL DRN2G(V(D1), V(DR1L), IV, LIV, LV, NML, N, N1, N2, P, [ d][ r]ns[fg].f: comment that estimated covariance matrices are ordered (alf,c): nonlinear parameters first, then linear parameters. Fri Mar 13 10:51:19 EST 1998 e9rint.f and seterr.f adjusted so (in the default Fortran 77 format) they do not reference I1MACH(6), but simply know that each character contains one character. Thu Nov 18 12:38:30 EST 1999 [ d]l9stp.f: lines 98, 101: change IW(0) to IW(1). This only affects the error number reported when [ d]l7pf gives a funny return. Mon Oct 21 14:19:47 EDT 2002 [ d]a7ss5.f: accept a step that gives a small function reduction if, after considering any alternate model, two further trial steps with reduced radii did not produce a better step. i7shft.f: for a forthcoming addition to the PORT library, allow negative K to request a right-circular shift of X(-K), ..., X(N) by one position. Thu Nov 14 09:29:58 EST 2002 [ d]rn2gb.f: fix a bug in handling problems with N < P (a nonlinear least-squares problem with bounds on the parameters being estimated and fewer observations than parameters being estimated). Thu Apr 29 21:53:03 MDT 2004 [ d]r7tvm.f: fix a performance bug that afflicted [ d]n2[fg]b on square systems (as many residuals as optimization variables). [ d]g7itb.f: fix a performance bug that afflicted [d]n2[fg]b after a rejected trial step. The wrong model might have been chosen. [ d]g7lit.f and [ d]g7itb.f: Restore the "step" vector after rejecting a proposed alternate trial function evaluation because the preducted function reduction is too small. This would affect the choice of model (Gauss-Newton or augmented) for the next iteration. The above bug fixes also affect the corresponding separable nonlinear least-squares solvers [ d]ns[fg][b ]. PyBDSF-1.10.1/src/port3/CMakeLists.txt_port3000066400000000000000000000022611420247104600203470ustar00rootroot00000000000000## ---------------------------------------------------------------------- ## $Id$ ## ---------------------------------------------------------------------- enable_language(Fortran) set (port3_sources dnsg.f dn2g.f drnsg.f drn2g.f d1mach.f da7sst.f dc7vfn.f dd7tpr.f dd7upd.f df7hes.f dg7lit.f dg7qts.f ditsum.f divset.f dl7itv.f dl7ivm.f dl7mst.f dl7nvr.f dl7sqr.f dl7srt.f dl7svn.f dl7svx.f dl7tsq.f dl7tvm.f dl7vml.f dn2cvp.f dn2lrd.f dn2rdp.f do7prd.f dparck.f dq7apl.f dq7rad.f dq7rfh.f dr7mdc.f drldst.f ds7cpr.f ds7lup.f ds7lvm.f dv2axy.f dv2nrm.f dv7cpy.f dv7dfl.f dv7prm.f dv7scl.f dv7scp.f dv7swp.f i1mach.f i7mdcn.f stopx.f) ## FIXME: there should be better way that creating shared library add_library (port3 SHARED ${port3_sources}) ## set additional target properties if (APPLE) set_target_properties (port3 PROPERTIES PREFIX "" SUFFIX .so LINK_FLAGS "-fPIC -flat_namespace" ) else (APPLE) set_target_properties (port3 PROPERTIES PREFIX "" SUFFIX .so LINK_FLAGS "-fPIC -shared" ) endif (APPLE) ## ---------------------------------------------------------------------- ## Installation install (TARGETS port3 DESTINATION lib) PyBDSF-1.10.1/src/port3/README000066400000000000000000000053361420247104600153460ustar00rootroot00000000000000In general, contents of the PORT3 library are available by license. However, the following utility routines are publicly available: a0xtrp d0xtrp dalloc dxtrap e9rint enter entsrc eprint erroff i0tk00 i0tk01 i8save i8tsel ialloc istkgt istkin istkmd istkqu istkrl istkst leave movebc movebd movebi movebl movebr movefc movefd movefi movefl movefr mtstak n5err nerror nirall retsrc s88fmt setc setd seterr seti setl setr srecap stinit xtrap. Also available are the up-to-date versions of NL2SOL (TOMS algorithm 573): n2f and n2g correspond to NL2SNO and NL2SOL; n2p is a variant of NL2SOL that allows the residual vector and Jacobian matrix to be passed in pieces, rather than all at once; n2[fgp]b are versions of NL2SOL that handle simple bounds; ns[fg] are versions for separable nonlinear least-squares, and ns[fg]b are versions for separable nonlinear least-squares with simple bounds. dn[s2][fgp][b ] are the double-precision versions. Similarly available are current versions of SMSNO, SUMSL, HUMSL (TOMS algorithm 611) for general unconstrained minimization: mnf uses function values only; mng uses function and gradient values; mnh uses function, gradient, and Hessian values; mn[fgh]b are versions that handle simple bounds; dmn[fgh][b ] are double-precision versions. Postscript for "Usage Summary for Selected Optimization Routines", which is relevant to [ d]n[2f][fg][b ] and [ d]mn[fgh][b ], is available at http://netlib.bell-labs.com/cm/cs/cstr/153.ps.gz To PORT source files xxx1.f xxx2.f ... xxxn.f and all PORT routines these files call, send the E-mail message send xxx1 xxx2 ... xxxn from port to netlib@netlib.bell-labs.com . There is a subdirectory "ex" of a few examples. For more information, try a request of the form send index for port/ex There is also a subdirectory "chk" of implementation checkout programs. The PORT Mathematical Subroutine Library Phyllis A. Fox, Editor 1984, AT&T Bell Telephone Laboratories, Inc. The entire PORT library is now available without charge for non-commercial use under a non-exclusive limited-use software agreement: see http://www.bell-labs.com/topic/swdist/ or go directly to http://www.bell-labs.com/project/PORT/ Postscript for the PORT 3 Manual is available as http://www.bell-labs.com/project/PORT/doc/port3doc.tar.gz For commercial uses of the PORT library, contact Edward S. Cartier Lucent Technologies Software Solutions Group 2 Paragon Way, room 3A-25 Freehold, NJ 07728, U.S.A. phone +1-732-577-2720 E-mail ecartier@lucent.com Web http://www.bell-labs.com/org/ssg/ For a summary of ways to get things from netlib, send the two-word E-mail message "send readme" to netlib@netlib.bell-labs.com . ########################################################## PyBDSF-1.10.1/src/port3/a0xtrp.f000066400000000000000000000027341420247104600160520ustar00rootroot00000000000000 SUBROUTINE A0XTRP(TM,M,NVAR,NG,KMAX,XPOLY,T,ERROR,EBEST,RHG,EMAG, 1 ESAVE) C REAL TM(NVAR),NG(M),T(NVAR,KMAX),RHG(1) C REAL RHG(MIN(M-1,KMAX)) REAL ERROR(NVAR,1),EBEST(NVAR),EMAG(1) C REAL ERROR(NVAR,MIN(M-1,KMAX)),EMAG(MIN(M-1,KMAX)) LOGICAL XPOLY,ESAVE C REAL U,V,TI,TV,TEMP REAL ERR C IF (M.GT.1) GO TO 20 C C ... INITIALIZE T. C DO 10 I=1,NVAR 10 T(I,1)=TM(I) C GO TO 80 C 20 MR=MIN0(M-1,KMAX) C DO 30 J=1,MR MMJ=M-J RHG(J)=NG(M)/NG(MMJ) EMAG(J)=1.0E0+1.0E0/(RHG(J)-1.0E0) IF (XPOLY) RHG(J)=RHG(J)-1.0E0 30 CONTINUE C DO 70 I=1,NVAR C V=0.0E0 U=T(I,1) TI=TM(I) T(I,1)=TI C DO 60 J=1,MR C C ......... OBTAIN SIGNED ERROR ESTIMATE. C ERR=(T(I,J)-U)*EMAG(J) IF (ESAVE) ERROR(I,J)=ERR ERR=ABS(ERR) IF (J.EQ.1) EBEST(I)=ERR EBEST(I)=AMIN1(EBEST(I),ERR) IF (EBEST(I).EQ.ERR) JBEST=J C IF (J.EQ.KMAX) GO TO 60 C IF (XPOLY) GO TO 40 C C ......... RATIONAL EXTRAPOLATION. C TV=TI-V TEMP=RHG(J)*(U-V)-TV IF (TEMP.NE.0.0E0) TI=TI+(TI-U)*(TV/TEMP) V=U GO TO 50 C C ......... POLYNOMIAL EXTRAPOLATION. C 40 TI=TI+(TI-U)/RHG(J) C 50 U=T(I,J+1) T(I,J+1)=TI 60 CONTINUE C 70 TM(I)=T(I,JBEST) C 80 RETURN C END PyBDSF-1.10.1/src/port3/a7sst.f000066400000000000000000000511051420247104600156710ustar00rootroot00000000000000 SUBROUTINE A7SST(IV, LIV, LV, V) C C *** ASSESS CANDIDATE STEP (***SOL VERSION 2.3) *** C INTEGER LIV, LV INTEGER IV(LIV) REAL V(LV) C C *** PURPOSE *** C C THIS SUBROUTINE IS CALLED BY AN UNCONSTRAINED MINIMIZATION C ROUTINE TO ASSESS THE NEXT CANDIDATE STEP. IT MAY RECOMMEND ONE C OF SEVERAL COURSES OF ACTION, SUCH AS ACCEPTING THE STEP, RECOM- C PUTING IT USING THE SAME OR A NEW QUADRATIC MODEL, OR HALTING DUE C TO CONVERGENCE OR FALSE CONVERGENCE. SEE THE RETURN CODE LISTING C BELOW. C C-------------------------- PARAMETER USAGE -------------------------- C C IV (I/O) INTEGER PARAMETER AND SCRATCH VECTOR -- SEE DESCRIPTION C BELOW OF IV VALUES REFERENCED. C LIV (IN) LENGTH OF IV ARRAY. C LV (IN) LENGTH OF V ARRAY. C V (I/O) REAL PARAMETER AND SCRATCH VECTOR -- SEE DESCRIPTION C BELOW OF V VALUES REFERENCED. C C *** IV VALUES REFERENCED *** C C IV(IRC) (I/O) ON INPUT FOR THE FIRST STEP TRIED IN A NEW ITERATION, C IV(IRC) SHOULD BE SET TO 3 OR 4 (THE VALUE TO WHICH IT IS C SET WHEN STEP IS DEFINITELY TO BE ACCEPTED). ON INPUT C AFTER STEP HAS BEEN RECOMPUTED, IV(IRC) SHOULD BE C UNCHANGED SINCE THE PREVIOUS RETURN OF A7SST. C ON OUTPUT, IV(IRC) IS A RETURN CODE HAVING ONE OF THE C FOLLOWING VALUES... C 1 = SWITCH MODELS OR TRY SMALLER STEP. C 2 = SWITCH MODELS OR ACCEPT STEP. C 3 = ACCEPT STEP AND DETERMINE V(RADFAC) BY GRADIENT C TESTS. C 4 = ACCEPT STEP, V(RADFAC) HAS BEEN DETERMINED. C 5 = RECOMPUTE STEP (USING THE SAME MODEL). C 6 = RECOMPUTE STEP WITH RADIUS = V(LMAXS) BUT DO NOT C EVALUATE THE OBJECTIVE FUNCTION. C 7 = X-CONVERGENCE (SEE V(XCTOL)). C 8 = RELATIVE FUNCTION CONVERGENCE (SEE V(RFCTOL)). C 9 = BOTH X- AND RELATIVE FUNCTION CONVERGENCE. C 10 = ABSOLUTE FUNCTION CONVERGENCE (SEE V(AFCTOL)). C 11 = SINGULAR CONVERGENCE (SEE V(LMAXS)). C 12 = FALSE CONVERGENCE (SEE V(XFTOL)). C 13 = IV(IRC) WAS OUT OF RANGE ON INPUT. C RETURN CODE I HAS PRECEDENCE OVER I+1 FOR I = 9, 10, 11. C IV(MLSTGD) (I/O) SAVED VALUE OF IV(MODEL). C IV(MODEL) (I/O) ON INPUT, IV(MODEL) SHOULD BE AN INTEGER IDENTIFYING C THE CURRENT QUADRATIC MODEL OF THE OBJECTIVE FUNCTION. C IF A PREVIOUS STEP YIELDED A BETTER FUNCTION REDUCTION, C THEN IV(MODEL) WILL BE SET TO IV(MLSTGD) ON OUTPUT. C IV(NFCALL) (IN) INVOCATION COUNT FOR THE OBJECTIVE FUNCTION. C IV(NFGCAL) (I/O) VALUE OF IV(NFCALL) AT STEP THAT GAVE THE BIGGEST C FUNCTION REDUCTION THIS ITERATION. IV(NFGCAL) REMAINS C UNCHANGED UNTIL A FUNCTION REDUCTION IS OBTAINED. C IV(RADINC) (I/O) THE NUMBER OF RADIUS INCREASES (OR MINUS THE NUMBER C OF DECREASES) SO FAR THIS ITERATION. C IV(RESTOR) (OUT) SET TO 1 IF V(F) HAS BEEN RESTORED AND X SHOULD BE C RESTORED TO ITS INITIAL VALUE, TO 2 IF X SHOULD BE SAVED, C TO 3 IF X SHOULD BE RESTORED FROM THE SAVED VALUE, AND TO C 0 OTHERWISE. C IV(STAGE) (I/O) COUNT OF THE NUMBER OF MODELS TRIED SO FAR IN THE C CURRENT ITERATION. C IV(STGLIM) (IN) MAXIMUM NUMBER OF MODELS TO CONSIDER. C IV(SWITCH) (OUT) SET TO 0 UNLESS A NEW MODEL IS BEING TRIED AND IT C GIVES A SMALLER FUNCTION VALUE THAN THE PREVIOUS MODEL, C IN WHICH CASE A7SST SETS IV(SWITCH) = 1. C IV(TOOBIG) (I/O) IS NONZERO ON INPUT IF STEP WAS TOO BIG (E.G., IF C IT WOULD CAUSE OVERFLOW). IT IS SET TO 0 ON RETURN. C IV(XIRC) (I/O) VALUE THAT IV(IRC) WOULD HAVE IN THE ABSENCE OF C CONVERGENCE, FALSE CONVERGENCE, AND OVERSIZED STEPS. C C *** V VALUES REFERENCED *** C C V(AFCTOL) (IN) ABSOLUTE FUNCTION CONVERGENCE TOLERANCE. IF THE C ABSOLUTE VALUE OF THE CURRENT FUNCTION VALUE V(F) IS LESS C THAN V(AFCTOL) AND A7SST DOES NOT RETURN WITH C IV(IRC) = 11, THEN A7SST RETURNS WITH IV(IRC) = 10. C V(DECFAC) (IN) FACTOR BY WHICH TO DECREASE RADIUS WHEN IV(TOOBIG) IS C NONZERO. C V(DSTNRM) (IN) THE 2-NORM OF D*STEP. C V(DSTSAV) (I/O) VALUE OF V(DSTNRM) ON SAVED STEP. C V(DST0) (IN) THE 2-NORM OF D TIMES THE NEWTON STEP (WHEN DEFINED, C I.E., FOR V(NREDUC) .GE. 0). C V(F) (I/O) ON BOTH INPUT AND OUTPUT, V(F) IS THE OBJECTIVE FUNC- C TION VALUE AT X. IF X IS RESTORED TO A PREVIOUS VALUE, C THEN V(F) IS RESTORED TO THE CORRESPONDING VALUE. C V(FDIF) (OUT) THE FUNCTION REDUCTION V(F0) - V(F) (FOR THE OUTPUT C VALUE OF V(F) IF AN EARLIER STEP GAVE A BIGGER FUNCTION C DECREASE, AND FOR THE INPUT VALUE OF V(F) OTHERWISE). C V(FLSTGD) (I/O) SAVED VALUE OF V(F). C V(F0) (IN) OBJECTIVE FUNCTION VALUE AT START OF ITERATION. C V(GTSLST) (I/O) VALUE OF V(GTSTEP) ON SAVED STEP. C V(GTSTEP) (IN) INNER PRODUCT BETWEEN STEP AND GRADIENT. C V(INCFAC) (IN) MINIMUM FACTOR BY WHICH TO INCREASE RADIUS. C V(LMAXS) (IN) MAXIMUM REASONABLE STEP SIZE (AND INITIAL STEP BOUND). C IF THE ACTUAL FUNCTION DECREASE IS NO MORE THAN TWICE C WHAT WAS PREDICTED, IF A RETURN WITH IV(IRC) = 7, 8, OR 9 C DOES NOT OCCUR, IF V(DSTNRM) .GT. V(LMAXS) OR THE CURRENT C STEP IS A NEWTON STEP, AND IF C V(PREDUC) .LE. V(SCTOL) * ABS(V(F0)), THEN A7SST RETURNS C WITH IV(IRC) = 11. IF SO DOING APPEARS WORTHWHILE, THEN C A7SST REPEATS THIS TEST (DISALLOWING A FULL NEWTON STEP) C WITH V(PREDUC) COMPUTED FOR A STEP OF LENGTH V(LMAXS) C (BY A RETURN WITH IV(IRC) = 6). C V(NREDUC) (I/O) FUNCTION REDUCTION PREDICTED BY QUADRATIC MODEL FOR C NEWTON STEP. IF A7SST IS CALLED WITH IV(IRC) = 6, I.E., C IF V(PREDUC) HAS BEEN COMPUTED WITH RADIUS = V(LMAXS) FOR C _USE_ IN THE SINGULAR CONVERGENCE TEST, THEN V(NREDUC) IS C SET TO -V(PREDUC) BEFORE THE LATTER IS RESTORED. C V(PLSTGD) (I/O) VALUE OF V(PREDUC) ON SAVED STEP. C V(PREDUC) (I/O) FUNCTION REDUCTION PREDICTED BY QUADRATIC MODEL FOR C CURRENT STEP. C V(RADFAC) (OUT) FACTOR TO BE USED IN DETERMINING THE NEW RADIUS, C WHICH SHOULD BE V(RADFAC)*DST, WHERE DST IS EITHER THE C OUTPUT VALUE OF V(DSTNRM) OR THE 2-NORM OF C DIAG(NEWD)*STEP FOR THE OUTPUT VALUE OF STEP AND THE C UPDATED VERSION, NEWD, OF THE SCALE VECTOR D. FOR C IV(IRC) = 3, V(RADFAC) = 1.0 IS RETURNED. C V(RDFCMN) (IN) MINIMUM VALUE FOR V(RADFAC) IN TERMS OF THE INPUT C VALUE OF V(DSTNRM) -- SUGGESTED VALUE = 0.1. C V(RDFCMX) (IN) MAXIMUM VALUE FOR V(RADFAC) -- SUGGESTED VALUE = 4.0. C V(RELDX) (IN) SCALED RELATIVE CHANGE IN X CAUSED BY STEP, COMPUTED C (E.G.) BY FUNCTION RLDST AS C MAX (D(I)*ABS(X(I)-X0(I)), 1 .LE. I .LE. P) / C MAX (D(I)*(ABS(X(I))+ABS(X0(I))), 1 .LE. I .LE. P). C V(RFCTOL) (IN) RELATIVE FUNCTION CONVERGENCE TOLERANCE. IF THE C ACTUAL FUNCTION REDUCTION IS AT MOST TWICE WHAT WAS PRE- C DICTED AND V(NREDUC) .LE. V(RFCTOL)*ABS(V(F0)), THEN C A7SST RETURNS WITH IV(IRC) = 8 OR 9. C V(SCTOL) (IN) SINGULAR CONVERGENCE TOLERANCE -- SEE V(LMAXS). C V(STPPAR) (IN) MARQUARDT PARAMETER -- 0 MEANS FULL NEWTON STEP. C V(TUNER1) (IN) TUNING CONSTANT USED TO DECIDE IF THE FUNCTION C REDUCTION WAS MUCH LESS THAN EXPECTED. SUGGESTED C VALUE = 0.1. C V(TUNER2) (IN) TUNING CONSTANT USED TO DECIDE IF THE FUNCTION C REDUCTION WAS LARGE ENOUGH TO ACCEPT STEP. SUGGESTED C VALUE = 10**-4. C V(TUNER3) (IN) TUNING CONSTANT USED TO DECIDE IF THE RADIUS C SHOULD BE INCREASED. SUGGESTED VALUE = 0.75. C V(XCTOL) (IN) X-CONVERGENCE CRITERION. IF STEP IS A NEWTON STEP C (V(STPPAR) = 0) HAVING V(RELDX) .LE. V(XCTOL) AND GIVING C AT MOST TWICE THE PREDICTED FUNCTION DECREASE, THEN C A7SST RETURNS IV(IRC) = 7 OR 9. C V(XFTOL) (IN) FALSE CONVERGENCE TOLERANCE. IF STEP GAVE NO OR ONLY C A SMALL FUNCTION DECREASE AND V(RELDX) .LE. V(XFTOL), C THEN A7SST RETURNS WITH IV(IRC) = 12. C C------------------------------- NOTES ------------------------------- C C *** APPLICATION AND USAGE RESTRICTIONS *** C C THIS ROUTINE IS CALLED AS PART OF THE NL2SOL (NONLINEAR C LEAST-SQUARES) PACKAGE. IT MAY BE USED IN ANY UNCONSTRAINED C MINIMIZATION SOLVER THAT USES DOGLEG, GOLDFELD-QUANDT-TROTTER, C OR LEVENBERG-MARQUARDT STEPS. C C *** ALGORITHM NOTES *** C C SEE (1) FOR FURTHER DISCUSSION OF THE ASSESSING AND MODEL C SWITCHING STRATEGIES. WHILE NL2SOL CONSIDERS ONLY TWO MODELS, C A7SST IS DESIGNED TO HANDLE ANY NUMBER OF MODELS. C C *** USAGE NOTES *** C C ON THE FIRST CALL OF AN ITERATION, ONLY THE I/O VARIABLES C STEP, X, IV(IRC), IV(MODEL), V(F), V(DSTNRM), V(GTSTEP), AND C V(PREDUC) NEED HAVE BEEN INITIALIZED. BETWEEN CALLS, NO I/O C VALUES EXCEPT STEP, X, IV(MODEL), V(F) AND THE STOPPING TOLER- C ANCES SHOULD BE CHANGED. C AFTER A RETURN FOR CONVERGENCE OR FALSE CONVERGENCE, ONE CAN C CHANGE THE STOPPING TOLERANCES AND CALL A7SST AGAIN, IN WHICH C CASE THE STOPPING TESTS WILL BE REPEATED. C C *** REFERENCES *** C C (1) DENNIS, J.E., JR., GAY, D.M., AND WELSCH, R.E. (1981), C AN ADAPTIVE NONLINEAR LEAST-SQUARES ALGORITHM, C ACM TRANS. MATH. SOFTWARE, VOL. 7, NO. 3. C C (2) POWELL, M.J.D. (1970) A FORTRAN SUBROUTINE FOR SOLVING C SYSTEMS OF NONLINEAR ALGEBRAIC EQUATIONS, IN NUMERICAL C METHODS FOR NONLINEAR ALGEBRAIC EQUATIONS, EDITED BY C P. RABINOWITZ, GORDON AND BREACH, LONDON. C C *** HISTORY *** C C JOHN DENNIS DESIGNED MUCH OF THIS ROUTINE, STARTING WITH C IDEAS IN (2). ROY WELSCH SUGGESTED THE MODEL SWITCHING STRATEGY. C DAVID GAY AND STEPHEN PETERS CAST THIS SUBROUTINE INTO A MORE C PORTABLE FORM (WINTER 1977), AND DAVID GAY CAST IT INTO ITS C PRESENT FORM (FALL 1978), WITH MINOR CHANGES TO THE SINGULAR C CONVERGENCE TEST IN MAY, 1984 (TO DEAL WITH FULL NEWTON STEPS). C C *** GENERAL *** C C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, AND C MCS-7906671. C C------------------------ EXTERNAL QUANTITIES ------------------------ C C *** NO EXTERNAL FUNCTIONS AND SUBROUTINES *** C C-------------------------- LOCAL VARIABLES -------------------------- C LOGICAL GOODX INTEGER I, NFC REAL EMAX, EMAXS, GTS, RFAC1, XMAX REAL HALF, ONE, ONEP2, TWO, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AFCTOL, DECFAC, DSTNRM, DSTSAV, DST0, F, FDIF, FLSTGD, F0, 1 GTSLST, GTSTEP, INCFAC, IRC, LMAXS, MLSTGD, MODEL, NFCALL, 2 NFGCAL, NREDUC, PLSTGD, PREDUC, RADFAC, RADINC, RDFCMN, 3 RDFCMX, RELDX, RESTOR, RFCTOL, SCTOL, STAGE, STGLIM, 4 STPPAR, SWITCH, TOOBIG, TUNER1, TUNER2, TUNER3, XCTOL, 5 XFTOL, XIRC C C *** DATA INITIALIZATIONS *** C C/6 C DATA HALF/0.5E+0/, ONE/1.E+0/, ONEP2/1.2E+0/, TWO/2.E+0/, C 1 ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, ONE=1.E+0, ONEP2=1.2E+0, TWO=2.E+0, 1 ZERO=0.E+0) C/ C C/6 C DATA IRC/29/, MLSTGD/32/, MODEL/5/, NFCALL/6/, NFGCAL/7/, C 1 RADINC/8/, RESTOR/9/, STAGE/10/, STGLIM/11/, SWITCH/12/, C 2 TOOBIG/2/, XIRC/13/ C/7 PARAMETER (IRC=29, MLSTGD=32, MODEL=5, NFCALL=6, NFGCAL=7, 1 RADINC=8, RESTOR=9, STAGE=10, STGLIM=11, SWITCH=12, 2 TOOBIG=2, XIRC=13) C/ C/6 C DATA AFCTOL/31/, DECFAC/22/, DSTNRM/2/, DST0/3/, DSTSAV/18/, C 1 F/10/, FDIF/11/, FLSTGD/12/, F0/13/, GTSLST/14/, GTSTEP/4/, C 2 INCFAC/23/, LMAXS/36/, NREDUC/6/, PLSTGD/15/, PREDUC/7/, C 3 RADFAC/16/, RDFCMN/24/, RDFCMX/25/, RELDX/17/, RFCTOL/32/, C 4 SCTOL/37/, STPPAR/5/, TUNER1/26/, TUNER2/27/, TUNER3/28/, C 5 XCTOL/33/, XFTOL/34/ C/7 PARAMETER (AFCTOL=31, DECFAC=22, DSTNRM=2, DST0=3, DSTSAV=18, 1 F=10, FDIF=11, FLSTGD=12, F0=13, GTSLST=14, GTSTEP=4, 2 INCFAC=23, LMAXS=36, NREDUC=6, PLSTGD=15, PREDUC=7, 3 RADFAC=16, RDFCMN=24, RDFCMX=25, RELDX=17, RFCTOL=32, 4 SCTOL=37, STPPAR=5, TUNER1=26, TUNER2=27, TUNER3=28, 5 XCTOL=33, XFTOL=34) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C NFC = IV(NFCALL) IV(SWITCH) = 0 IV(RESTOR) = 0 RFAC1 = ONE GOODX = .TRUE. I = IV(IRC) IF (I .GE. 1 .AND. I .LE. 12) 1 GO TO (20,30,10,10,40,280,220,220,220,220,220,170), I IV(IRC) = 13 GO TO 999 C C *** INITIALIZE FOR NEW ITERATION *** C 10 IV(STAGE) = 1 IV(RADINC) = 0 V(FLSTGD) = V(F0) IF (IV(TOOBIG) .EQ. 0) GO TO 110 IV(STAGE) = -1 IV(XIRC) = I GO TO 60 C C *** STEP WAS RECOMPUTED WITH NEW MODEL OR SMALLER RADIUS *** C *** FIRST DECIDE WHICH *** C 20 IF (IV(MODEL) .NE. IV(MLSTGD)) GO TO 30 C *** OLD MODEL RETAINED, SMALLER RADIUS TRIED *** C *** DO NOT CONSIDER ANY MORE NEW MODELS THIS ITERATION *** IV(STAGE) = IV(STGLIM) IV(RADINC) = -1 GO TO 110 C C *** A NEW MODEL IS BEING TRIED. DECIDE WHETHER TO KEEP IT. *** C 30 IV(STAGE) = IV(STAGE) + 1 C C *** NOW WE ADD THE POSSIBILITY THAT STEP WAS RECOMPUTED WITH *** C *** THE SAME MODEL, PERHAPS BECAUSE OF AN OVERSIZED STEP. *** C 40 IF (IV(STAGE) .GT. 0) GO TO 50 C C *** STEP WAS RECOMPUTED BECAUSE IT WAS TOO BIG. *** C IF (IV(TOOBIG) .NE. 0) GO TO 60 C C *** RESTORE IV(STAGE) AND PICK UP WHERE WE LEFT OFF. *** C IV(STAGE) = -IV(STAGE) I = IV(XIRC) GO TO (20, 30, 110, 110, 70), I C 50 IF (IV(TOOBIG) .EQ. 0) GO TO 70 C C *** HANDLE OVERSIZE STEP *** C IV(TOOBIG) = 0 IF (IV(RADINC) .GT. 0) GO TO 80 IV(STAGE) = -IV(STAGE) IV(XIRC) = IV(IRC) C 60 IV(TOOBIG) = 0 V(RADFAC) = V(DECFAC) IV(RADINC) = IV(RADINC) - 1 IV(IRC) = 5 IV(RESTOR) = 1 V(F) = V(FLSTGD) GO TO 999 C 70 IF (V(F) .LT. V(FLSTGD)) GO TO 110 C C *** THE NEW STEP IS A LOSER. RESTORE OLD MODEL. *** C IF (IV(MODEL) .EQ. IV(MLSTGD)) GO TO 80 IV(MODEL) = IV(MLSTGD) IV(SWITCH) = 1 C C *** RESTORE STEP, ETC. ONLY IF A PREVIOUS STEP DECREASED V(F). C 80 IF (V(FLSTGD) .GE. V(F0)) GO TO 110 IF (IV(STAGE) .LT. IV(STGLIM)) THEN GOODX = .FALSE. ELSE IF (NFC .LT. IV(NFGCAL) + IV(STGLIM) + 2) THEN GOODX = .FALSE. ELSE IF (IV(SWITCH) .NE. 0) THEN GOODX = .FALSE. ENDIF IV(RESTOR) = 3 V(F) = V(FLSTGD) V(PREDUC) = V(PLSTGD) V(GTSTEP) = V(GTSLST) IF (IV(SWITCH) .EQ. 0) RFAC1 = V(DSTNRM) / V(DSTSAV) V(DSTNRM) = V(DSTSAV) IF (GOODX) THEN C C *** ACCEPT PREVIOUS SLIGHTLY REDUCING STEP *** C V(FDIF) = V(F0) - V(F) IV(IRC) = 4 V(RADFAC) = RFAC1 GO TO 999 ENDIF NFC = IV(NFGCAL) C 110 V(FDIF) = V(F0) - V(F) IF (V(FDIF) .GT. V(TUNER2) * V(PREDUC)) GO TO 140 IF (IV(RADINC) .GT. 0) GO TO 140 C C *** NO (OR ONLY A TRIVIAL) FUNCTION DECREASE C *** -- SO TRY NEW MODEL OR SMALLER RADIUS C IF (V(F) .LT. V(F0)) GO TO 120 IV(MLSTGD) = IV(MODEL) V(FLSTGD) = V(F) V(F) = V(F0) IV(RESTOR) = 1 GO TO 130 120 IV(NFGCAL) = NFC 130 IV(IRC) = 1 IF (IV(STAGE) .LT. IV(STGLIM)) GO TO 160 IV(IRC) = 5 IV(RADINC) = IV(RADINC) - 1 GO TO 160 C C *** NONTRIVIAL FUNCTION DECREASE ACHIEVED *** C 140 IV(NFGCAL) = NFC RFAC1 = ONE V(DSTSAV) = V(DSTNRM) IF (V(FDIF) .GT. V(PREDUC)*V(TUNER1)) GO TO 190 C C *** DECREASE WAS MUCH LESS THAN PREDICTED -- EITHER CHANGE MODELS C *** OR ACCEPT STEP WITH DECREASED RADIUS. C IF (IV(STAGE) .GE. IV(STGLIM)) GO TO 150 C *** CONSIDER SWITCHING MODELS *** IV(IRC) = 2 GO TO 160 C C *** ACCEPT STEP WITH DECREASED RADIUS *** C 150 IV(IRC) = 4 C C *** SET V(RADFAC) TO FLETCHER*S DECREASE FACTOR *** C 160 IV(XIRC) = IV(IRC) EMAX = V(GTSTEP) + V(FDIF) V(RADFAC) = HALF * RFAC1 IF (EMAX .LT. V(GTSTEP)) V(RADFAC) = RFAC1 * AMAX1(V(RDFCMN), 1 HALF * V(GTSTEP)/EMAX) C C *** DO FALSE CONVERGENCE TEST *** C 170 IF (V(RELDX) .LE. V(XFTOL)) GO TO 180 IV(IRC) = IV(XIRC) IF (V(F) .LT. V(F0)) GO TO 200 GO TO 230 C 180 IV(IRC) = 12 GO TO 240 C C *** HANDLE GOOD FUNCTION DECREASE *** C 190 IF (V(FDIF) .LT. (-V(TUNER3) * V(GTSTEP))) GO TO 210 C C *** INCREASING RADIUS LOOKS WORTHWHILE. SEE IF WE JUST C *** RECOMPUTED STEP WITH A DECREASED RADIUS OR RESTORED STEP C *** AFTER RECOMPUTING IT WITH A LARGER RADIUS. C IF (IV(RADINC) .LT. 0) GO TO 210 IF (IV(RESTOR) .EQ. 1) GO TO 210 IF (IV(RESTOR) .EQ. 3) GO TO 210 C C *** WE DID NOT. TRY A LONGER STEP UNLESS THIS WAS A NEWTON C *** STEP. C V(RADFAC) = V(RDFCMX) GTS = V(GTSTEP) IF (V(FDIF) .LT. (HALF/V(RADFAC) - ONE) * GTS) 1 V(RADFAC) = AMAX1(V(INCFAC), HALF*GTS/(GTS + V(FDIF))) IV(IRC) = 4 IF (V(STPPAR) .EQ. ZERO) GO TO 230 IF (V(DST0) .GE. ZERO .AND. (V(DST0) .LT. TWO*V(DSTNRM) 1 .OR. V(NREDUC) .LT. ONEP2*V(FDIF))) GO TO 230 C *** STEP WAS NOT A NEWTON STEP. RECOMPUTE IT WITH C *** A LARGER RADIUS. IV(IRC) = 5 IV(RADINC) = IV(RADINC) + 1 C C *** SAVE VALUES CORRESPONDING TO GOOD STEP *** C 200 V(FLSTGD) = V(F) IV(MLSTGD) = IV(MODEL) IF (IV(RESTOR) .EQ. 0) IV(RESTOR) = 2 V(DSTSAV) = V(DSTNRM) IV(NFGCAL) = NFC V(PLSTGD) = V(PREDUC) V(GTSLST) = V(GTSTEP) GO TO 230 C C *** ACCEPT STEP WITH RADIUS UNCHANGED *** C 210 V(RADFAC) = ONE IV(IRC) = 3 GO TO 230 C C *** COME HERE FOR A RESTART AFTER CONVERGENCE *** C 220 IV(IRC) = IV(XIRC) IF (V(DSTSAV) .GE. ZERO) GO TO 240 IV(IRC) = 12 GO TO 240 C C *** PERFORM CONVERGENCE TESTS *** C 230 IV(XIRC) = IV(IRC) 240 IF (IV(RESTOR) .EQ. 1 .AND. V(FLSTGD) .LT. V(F0)) IV(RESTOR) = 3 IF ( ABS(V(F)) .LT. V(AFCTOL)) IV(IRC) = 10 IF (HALF * V(FDIF) .GT. V(PREDUC)) GO TO 999 EMAX = V(RFCTOL) * ABS(V(F0)) EMAXS = V(SCTOL) * ABS(V(F0)) IF (V(PREDUC) .LE. EMAXS .AND. (V(DSTNRM) .GT. V(LMAXS) .OR. 1 V(STPPAR) .EQ. ZERO)) IV(IRC) = 11 IF (V(DST0) .LT. ZERO) GO TO 250 I = 0 IF ((V(NREDUC) .GT. ZERO .AND. V(NREDUC) .LE. EMAX) .OR. 1 (V(NREDUC) .EQ. ZERO. AND. V(PREDUC) .EQ. ZERO)) I = 2 IF (V(STPPAR) .EQ. ZERO .AND. V(RELDX) .LE. V(XCTOL) 1 .AND. GOODX) I = I + 1 IF (I .GT. 0) IV(IRC) = I + 6 C C *** CONSIDER RECOMPUTING STEP OF LENGTH V(LMAXS) FOR SINGULAR C *** CONVERGENCE TEST. C 250 IF (IV(IRC) .GT. 5 .AND. IV(IRC) .NE. 12) GO TO 999 IF (V(STPPAR) .EQ. ZERO) GO TO 999 IF (V(DSTNRM) .GT. V(LMAXS)) GO TO 260 IF (V(PREDUC) .GE. EMAXS) GO TO 999 IF (V(DST0) .LE. ZERO) GO TO 270 IF (HALF * V(DST0) .LE. V(LMAXS)) GO TO 999 GO TO 270 260 IF (HALF * V(DSTNRM) .LE. V(LMAXS)) GO TO 999 XMAX = V(LMAXS) / V(DSTNRM) IF (XMAX * (TWO - XMAX) * V(PREDUC) .GE. EMAXS) GO TO 999 270 IF (V(NREDUC) .LT. ZERO) GO TO 290 C C *** RECOMPUTE V(PREDUC) FOR _USE_ IN SINGULAR CONVERGENCE TEST *** C V(GTSLST) = V(GTSTEP) V(DSTSAV) = V(DSTNRM) IF (IV(IRC) .EQ. 12) V(DSTSAV) = -V(DSTSAV) V(PLSTGD) = V(PREDUC) I = IV(RESTOR) IV(RESTOR) = 2 IF (I .EQ. 3) IV(RESTOR) = 0 IV(IRC) = 6 GO TO 999 C C *** PERFORM SINGULAR CONVERGENCE TEST WITH RECOMPUTED V(PREDUC) *** C 280 V(GTSTEP) = V(GTSLST) V(DSTNRM) = ABS(V(DSTSAV)) IV(IRC) = IV(XIRC) IF (V(DSTSAV) .LE. ZERO) IV(IRC) = 12 V(NREDUC) = -V(PREDUC) V(PREDUC) = V(PLSTGD) IV(RESTOR) = 3 290 IF (-V(NREDUC) .LE. V(SCTOL) * ABS(V(F0))) IV(IRC) = 11 C 999 RETURN C C *** LAST LINE OF A7SST FOLLOWS *** END PyBDSF-1.10.1/src/port3/a9rntc.f000066400000000000000000000160041420247104600160270ustar00rootroot00000000000000 SUBROUTINE A9RNTC(A, NITEMS, IOUT, MCOL, W, D) C C THIS IS THE DOCUMENTED ROUTINE APRNTC, BUT WITHOUT THE CALLS TO C SETERR- BECAUSE IT IS CALLED BY SETERR. C C THIS SUBROUTINE PRINTS OUT NITEMS FROM THE COMPLEX ARRAY, A, ON C OUTPUT UNIT IOUT, USING A MAXIMUM OF MCOL PRINT SPACES. C THE OUTPUT FORMAT IS 2(1PEW.D). C THE PROGRAM PUTS AS MANY VALUES ON A LINE AS POSSIBLE. C W SHOULD BE INPUT AS THE ACTUAL WIDTH +1 FOR A SPACE BETWEEN VALUES. C C DUPLICATE LINES ARE NOT ALL PRINTED, BUT ARE INDICATED BY ASTERISKS. C C WRITTEN BY DAN WARNER, REVISED BY PHYL FOX, OCTOBER 21, 1982. C C THE LINE WIDTH IS COMPUTED AS THE MINIMUM OF THE INPUT MCOL AND 160. C IF THE LINE WIDTH IS TO BE INCREASED ABOVE 160, THE BUFFERS LINE() C AND LAST(), WHICH THE VALUES TO BE PRINTED ON ONE LINE, MUST C BE DIMENSIONED ACCORDINGLY. C C INPUT PARAMETERS - C C A - THE START OF THE COMPLEX ARRAY TO BE PRINTED C C NITEMS - THE NUMBER OF ITEMS TO BE PRINTED C C IOUT - THE OUTPUT UNIT FOR PRINTING C C MCOL - THE NUMBER OF SPACES ACROSS THE LINE C C W - THE WIDTH OF THE PRINTED VALUE (1PEW.D) C C D - THE NUMBER OF DIGITS AFTER THE DECIMAL POINT (1PEW.D) C C C ERROR STATES - NONE. LOWER LEVEL ROUTINE CALLED BY C SETERR, SO IT CANNOT CALL SETERR. C INTEGER NITEMS, IOUT, MCOL, W, D C/R C REAL A(2,NITEMS) C/C COMPLEX A(NITEMS) C/ C INTEGER MAX0, MIN0, WW, DD, EMIN, EMAX, 1 EXPENT, I1MACH, ICEIL, IABS, I10WID C/6S C INTEGER IFMT1(20), IFMT2(18), BLANK, STAR C INTEGER IFMT1C(20), IFMT2C(18) C EQUIVALENCE (IFMT1(1),IFMT1C(1)), (IFMT2(1),IFMT2C(1)) C/7S CHARACTER*1 IFMT1(20), IFMT2(18), BLANK, STAR CHARACTER*20 IFMT1C CHARACTER*18 IFMT2C EQUIVALENCE (IFMT1(1),IFMT1C), (IFMT2(1),IFMT2C) C/ INTEGER INDW, NCOL, COUNT, I, J, K, ILINE, ILAST LOGICAL DUP C/R C REAL LINE(2,18), LAST(2,18) C/C COMPLEX LINE(18), LAST(18) C/ REAL LOGETA C C/6S C DATA BLANK/1H /, STAR/1H*/, INDW/7/, EXPENT/0/ C/7S DATA BLANK/' '/, STAR/'*'/, INDW/7/, EXPENT/0/ C/ C C IFMT1 IS FOR THE ASTERISK LINES- IFMT2 FOR THE DATA LINES C C/6S C DATA IFMT1( 1) /1H(/, IFMT2( 1) /1H(/ C DATA IFMT1( 2) /1H1/, IFMT2( 2) /1H1/ C DATA IFMT1( 3) /1HA/, IFMT2( 3) /1HA/ C DATA IFMT1( 4) /1H1/, IFMT2( 4) /1H1/ C DATA IFMT1( 5) /1H,/, IFMT2( 5) /1H,/ C DATA IFMT1( 6) /1H5/, IFMT2( 6) /1HI/ C DATA IFMT1( 7) /1HX/, IFMT2( 7) /1H7/ C DATA IFMT1( 8) /1H,/, IFMT2( 8) /1H,/ C DATA IFMT1( 9) /1H2/, IFMT2( 9) /1H1/ C DATA IFMT1(10) /1HA/, IFMT2(10) /1HP/ C DATA IFMT1(11) /1H1/, IFMT2(11) /1H / C DATA IFMT1(12) /1H,/, IFMT2(12) /1HE/ C DATA IFMT1(13) /1H /, IFMT2(13) /1H / C DATA IFMT1(14) /1H /, IFMT2(14) /1H / C DATA IFMT1(15) /1HX/, IFMT2(15) /1H./ C DATA IFMT1(16) /1H,/, IFMT2(16) /1H / C DATA IFMT1(17) /1H2/, IFMT2(17) /1H / C DATA IFMT1(18) /1HA/, IFMT2(18) /1H)/ C DATA IFMT1(19) /1H1/ C DATA IFMT1(20) /1H)/ C/7S DATA IFMT1( 1) /'('/, IFMT2( 1) /'('/ DATA IFMT1( 2) /'1'/, IFMT2( 2) /'1'/ DATA IFMT1( 3) /'A'/, IFMT2( 3) /'A'/ DATA IFMT1( 4) /'1'/, IFMT2( 4) /'1'/ DATA IFMT1( 5) /','/, IFMT2( 5) /','/ DATA IFMT1( 6) /'5'/, IFMT2( 6) /'I'/ DATA IFMT1( 7) /'X'/, IFMT2( 7) /'7'/ DATA IFMT1( 8) /','/, IFMT2( 8) /','/ DATA IFMT1( 9) /'2'/, IFMT2( 9) /'1'/ DATA IFMT1(10) /'A'/, IFMT2(10) /'P'/ DATA IFMT1(11) /'1'/, IFMT2(11) /' '/ DATA IFMT1(12) /','/, IFMT2(12) /'E'/ DATA IFMT1(13) /' '/, IFMT2(13) /' '/ DATA IFMT1(14) /' '/, IFMT2(14) /' '/ DATA IFMT1(15) /'X'/, IFMT2(15) /'.'/ DATA IFMT1(16) /','/, IFMT2(16) /' '/ DATA IFMT1(17) /'2'/, IFMT2(17) /' '/ DATA IFMT1(18) /'A'/, IFMT2(18) /')'/ DATA IFMT1(19) /'1'/ DATA IFMT1(20) /')'/ C/ C C EXPENT IS USED AS A FIRST-TIME SWITCH TO SIGNAL IF THE C MACHINE-VALUE CONSTANTS HAVE BEEN COMPUTED. C IF (EXPENT .GT. 0) GO TO 10 LOGETA = ALOG10(FLOAT(I1MACH(10))) EMIN = ICEIL(LOGETA*FLOAT(IABS(I1MACH(12)-1))) EMAX = ICEIL(LOGETA*FLOAT(I1MACH(13))) EXPENT = I10WID(MAX0(EMIN, EMAX)) C C COMPUTE THE FORMATS. C 10 WW = MIN0(99, MAX0(W, 5+EXPENT)) CALL S88FMT(2, WW, IFMT2(13)) DD = MIN0(D, (WW-(5+EXPENT))) CALL S88FMT(2, DD, IFMT2(16)) C C NCOL IS THE NUMBER OF VALUES TO BE PRINTED ACROSS THE LINE. C NCOL = MAX0(1, MIN0(9, (MIN0(MCOL,160)-INDW)/(2*WW))) CALL S88FMT(1, (2*NCOL), IFMT2(11)) WW = WW-2 C C THE ASTERISKS ARE POSITIONED RIGHT-ADJUSTED IN THE W-WIDTH SPACE. CALL S88FMT(2, WW, IFMT1(13)) C C I COUNTS THE NUMBER OF ITEMS TO BE PRINTED, C J COUNTS THE NUMBER ON A GIVEN LINE, C COUNT COUNTS THE NUMBER OF DUPLICATE LINES. C I = 1 J = 0 COUNT = 0 C C THE LOGICAL OF THE FOLLOWING IS ROUGHLY THIS - C IF THERE ARE STILL MORE ITEMS TO BE PRINTED, A LINE- C FULL IS PUT INTO THE ARRAY, LINE. C WHENEVER A LINE IS PRINTED OUT, IT IS ALSO STUFFED INTO C THE ARRAY, LAST, TO COMPARE WITH THE NEXT ONE COMING IN C TO CHECK FOR REPEAT OR DUPLICATED LINES. C ALSO WHENEVER A LINE IS WRITTEN OUT, THE DUPLICATION C COUNTER, COUNT, IS SET TO ONE. C THE ONLY MILDLY TRICKY PART IS TO NOTE THAT COUNT HAS TO C GO TO 3 BEFORE A LINE OF ASTERISKS IS PRINTED BECAUSE C OF COURSE NO SUCH LINE IS PRINTED FOR JUST A PAIR OF C DUPLICATE LINES. C C ILINE IS PRINTED AS THE INDEX OF THE FIRST ARRAY ELEMENT C IN A LINE. C C 20 IF (I .GT. NITEMS) GO TO 90 J = J+1 C/R C LINE(1,J) = A(1,I) C LINE(2,J) = A(2,I) C/C LINE(J) = A(I) C/ IF (J .EQ. 1) ILINE = I IF (J .LT. NCOL .AND. I .LT. NITEMS) GO TO 80 IF (COUNT .EQ. 0) GO TO 50 DUP = .TRUE. DO 30 K=1,NCOL C/R C IF (LAST(1,K) .NE. LINE(1,K) .OR. C 1 LAST(2,K) .NE. LINE(2,K)) C 2 DUP = .FALSE. C/C IF (REAL(LAST(K)) .NE. REAL(LINE(K)) .OR. 1 AIMAG(LAST(K)) .NE. AIMAG(LINE(K))) 2 DUP = .FALSE. C/ 30 CONTINUE IF (I .EQ. NITEMS .AND. J .LT. NCOL) DUP = .FALSE. IF (.NOT. DUP .AND. COUNT .EQ. 1) GO TO 50 IF (.NOT. DUP) GO TO 40 COUNT = COUNT+1 IF (COUNT .EQ. 3) WRITE(IOUT, IFMT1C) BLANK, 1 STAR, STAR, STAR, STAR IF (I .EQ. NITEMS) GO TO 50 GO TO 70 C/R C 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(1,K), C 1 LAST(2,K), K=1,NCOL) C 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(1,K), C 1 LINE(2,K), K=1,J) C/C 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(K), K=1,NCOL) 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(K), K=1,J) C/ COUNT = 1 DO 60 K=1,NCOL C/R C LAST(1,K) = LINE(1,K) C 60 LAST(2,K) = LINE(2,K) C/C 60 LAST(K) = LINE(K) C/ 70 ILAST = ILINE J = 0 80 I = I+1 GO TO 20 90 RETURN END PyBDSF-1.10.1/src/port3/a9rntd.f000066400000000000000000000145521420247104600160360ustar00rootroot00000000000000 SUBROUTINE A9RNTD(A, NITEMS, IOUT, MCOL, W, D) C C THIS IS THE DOCUMENTED ROUTINE APRNTD, BUT WITHOUT THE CALLS TO C SETERR - BECAUSE IT IS CALLED BY SETERR. C C THIS SUBROUTINE PRINTS OUT NITEMS FROM THE DOUBLE PRECISION ARRAY, C A, ON OUTPUT UNIT IOUT, USING A MAXIMUM OF MCOL PRINT SPACES. C THE OUTPUT FORMAT IS 1PDW.D. C THE PROGRAM PUTS AS MANY VALUES ON A LINE AS POSSIBLE. C W SHOULD BE INPUT AS THE ACTUAL WIDTH +1 FOR A SPACE BETWEEN VALUES. C C DUPLICATE LINES ARE NOT ALL PRINTED, BUT ARE INDICATED BY ASTERISKS. C C WRITTEN BY DAN WARNER, REVISED BY PHYL FOX, OCTOBER 21, 1982. C C THE LINE WIDTH IS COMPUTED AS THE MINIMUM OF THE INPUT MCOL AND 160. C IF THE LINE WIDTH IS TO BE INCREASED ABOVE 160, THE BUFFERS LINE() C AND LAST(), WHICH THE VALUES TO BE PRINTED ON ONE LINE, MUST C BE DIMENSIONED ACCORDINGLY. C C INPUT PARAMETERS - C C A - THE START OF THE DOUBLE PRECISION ARRAY TO BE PRINTED C C NITEMS - THE NUMBER OF ITEMS TO BE PRINTED C C IOUT - THE OUTPUT UNIT FOR PRINTING C C MCOL - THE NUMBER OF SPACES ACROSS THE LINE C C W - THE WIDTH OF THE PRINTED VALUE (1PDW.D) C C D - THE NUMBER OF DIGITS AFTER THE DECIMAL POINT (1PDW.D) C C C ERROR STATES - NONE. LOWER LEVEL ROUTINE CALLED BY C SETERR, SO IT CANNOT CALL SETERR. C INTEGER NITEMS, IOUT, MCOL, W, D DOUBLE PRECISION A(NITEMS) C INTEGER MAX0, MIN0, WW, DD, EMIN, EMAX, 1 EXPENT, I1MACH, ICEIL, IABS, I10WID C/6S C INTEGER IFMT1(20), IFMT1C(20), IFMT2(18), IFMT2C(18), BLANK, STAR C EQUIVALENCE (IFMT1(1), IFMT1C(1)), (IFMT2(1), IFMT2C(1)) C/7S CHARACTER*1 IFMT1(20), IFMT2(18), BLANK, STAR CHARACTER*20 IFMT1C CHARACTER*18 IFMT2C EQUIVALENCE (IFMT1(1), IFMT1C), (IFMT2(1), IFMT2C) C/ INTEGER INDW, NCOL, COUNT, I, J, K, ILINE, ILAST LOGICAL DUP DOUBLE PRECISION LINE(18), LAST(18) REAL LOGETA C C/6S C DATA BLANK/1H /, STAR/1H*/, INDW/7/, EXPENT/0/ C/7S DATA BLANK/' '/, STAR/'*'/, INDW/7/, EXPENT/0/ C/ C C IFMT1 IS FOR THE ASTERISK LINES- IFMT2 FOR THE DATA LINES C C/6S C DATA IFMT1( 1) /1H(/, IFMT2( 1) /1H(/ C DATA IFMT1( 2) /1H1/, IFMT2( 2) /1H1/ C DATA IFMT1( 3) /1HA/, IFMT2( 3) /1HA/ C DATA IFMT1( 4) /1H1/, IFMT2( 4) /1H1/ C DATA IFMT1( 5) /1H,/, IFMT2( 5) /1H,/ C DATA IFMT1( 6) /1H5/, IFMT2( 6) /1HI/ C DATA IFMT1( 7) /1HX/, IFMT2( 7) /1H7/ C DATA IFMT1( 8) /1H,/, IFMT2( 8) /1H,/ C DATA IFMT1( 9) /1H2/, IFMT2( 9) /1H1/ C DATA IFMT1(10) /1HA/, IFMT2(10) /1HP/ C DATA IFMT1(11) /1H1/, IFMT2(11) /1H / C DATA IFMT1(12) /1H,/, IFMT2(12) /1HD/ C DATA IFMT1(13) /1H /, IFMT2(13) /1H / C DATA IFMT1(14) /1H /, IFMT2(14) /1H / C DATA IFMT1(15) /1HX/, IFMT2(15) /1H./ C DATA IFMT1(16) /1H,/, IFMT2(16) /1H / C DATA IFMT1(17) /1H2/, IFMT2(17) /1H / C DATA IFMT1(18) /1HA/, IFMT2(18) /1H)/ C DATA IFMT1(19) /1H1/ C DATA IFMT1(20) /1H)/ C/7S DATA IFMT1( 1) /'('/, IFMT2( 1) /'('/ DATA IFMT1( 2) /'1'/, IFMT2( 2) /'1'/ DATA IFMT1( 3) /'A'/, IFMT2( 3) /'A'/ DATA IFMT1( 4) /'1'/, IFMT2( 4) /'1'/ DATA IFMT1( 5) /','/, IFMT2( 5) /','/ DATA IFMT1( 6) /'5'/, IFMT2( 6) /'I'/ DATA IFMT1( 7) /'X'/, IFMT2( 7) /'7'/ DATA IFMT1( 8) /','/, IFMT2( 8) /','/ DATA IFMT1( 9) /'2'/, IFMT2( 9) /'1'/ DATA IFMT1(10) /'A'/, IFMT2(10) /'P'/ DATA IFMT1(11) /'1'/, IFMT2(11) /' '/ DATA IFMT1(12) /','/, IFMT2(12) /'D'/ DATA IFMT1(13) /' '/, IFMT2(13) /' '/ DATA IFMT1(14) /' '/, IFMT2(14) /' '/ DATA IFMT1(15) /'X'/, IFMT2(15) /'.'/ DATA IFMT1(16) /','/, IFMT2(16) /' '/ DATA IFMT1(17) /'2'/, IFMT2(17) /' '/ DATA IFMT1(18) /'A'/, IFMT2(18) /')'/ DATA IFMT1(19) /'1'/ DATA IFMT1(20) /')'/ C/ C C EXPENT IS USED AS A FIRST-TIME SWITCH TO SIGNAL IF THE C MACHINE-VALUE CONSTANTS HAVE BEEN COMPUTED. C IF (EXPENT .GT. 0) GO TO 10 LOGETA = ALOG10(FLOAT(I1MACH(10))) EMIN = ICEIL(LOGETA*FLOAT(IABS(I1MACH(15)-1))) EMAX = ICEIL(LOGETA*FLOAT(I1MACH(16))) EXPENT = I10WID(MAX0(EMIN, EMAX)) C C COMPUTE THE FORMATS. C 10 WW = MIN0(99, MAX0(W, 5+EXPENT)) CALL S88FMT(2, WW, IFMT2(13)) DD = MIN0(D, (WW-(5+EXPENT))) CALL S88FMT(2, DD, IFMT2(16)) C C NCOL IS THE NUMBER OF VALUES TO BE PRINTED ACROSS THE LINE. C NCOL = MAX0(1, MIN0(9, (MIN0(MCOL,160)-INDW)/WW)) CALL S88FMT(1, NCOL, IFMT2(11)) WW = WW-2 C THE ASTERISKS ARE POSITIONED RIGHT-ADJUSTED IN THE W-WIDTH SPACE. CALL S88FMT(2, WW, IFMT1(13)) C C I COUNTS THE NUMBER OF ITEMS TO BE PRINTED, C J COUNTS THE NUMBER ON A GIVEN LINE, C COUNT COUNTS THE NUMBER OF DUPLICATE LINES. C I = 1 J = 0 COUNT = 0 C C THE LOGICAL OF THE FOLLOWING IS ROUGHLY THIS - C IF THERE ARE STILL MORE ITEMS TO BE PRINTED, A LINE- C FULL IS PUT INTO THE ARRAY, LINE. C WHENEVER A LINE IS PRINTED OUT, IT IS ALSO STUFFED INTO C THE ARRAY, LAST, TO COMPARE WITH THE NEXT ONE COMING IN C TO CHECK FOR REPEAT OR DUPLICATED LINES. C ALSO WHENEVER A LINE IS WRITTEN OUT, THE DUPLICATION C COUNTER, COUNT, IS SET TO ONE. C THE ONLY MILDLY TRICKY PART IS TO NOTE THAT COUNT HAS TO C GO TO 3 BEFORE A LINE OF ASTERISKS IS PRINTED BECAUSE C OF COURSE NO SUCH LINE IS PRINTED FOR JUST A PAIR OF C DUPLICATE LINES. C C ILINE IS PRINTED AS THE INDEX OF THE FIRST ARRAY ELEMENT C IN A LINE. C 20 IF (I .GT. NITEMS) GO TO 90 J = J+1 LINE(J) = A(I) IF (J .EQ. 1) ILINE = I IF (J .LT. NCOL .AND. I .LT. NITEMS) GO TO 80 IF (COUNT .EQ. 0) GO TO 50 DUP = .TRUE. DO 30 K=1,NCOL 30 IF (LAST(K) .NE. LINE(K)) DUP = .FALSE. IF (I .EQ. NITEMS .AND. J .LT. NCOL) DUP = .FALSE. IF (.NOT. DUP .AND. COUNT .EQ. 1) GO TO 50 IF (.NOT. DUP) GO TO 40 COUNT = COUNT+1 IF (COUNT .EQ. 3) WRITE(IOUT, IFMT1C) BLANK, 1 STAR, STAR, STAR, STAR IF (I .EQ. NITEMS) GO TO 50 GO TO 70 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(K), K=1,NCOL) 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(K), K=1,J) COUNT = 1 DO 60 K=1,NCOL 60 LAST(K) = LINE(K) 70 ILAST = ILINE J = 0 80 I = I+1 GO TO 20 90 RETURN END PyBDSF-1.10.1/src/port3/a9rnti.f000066400000000000000000000131021420247104600160310ustar00rootroot00000000000000 SUBROUTINE A9RNTI(A, NITEMS, IOUT, MCOL, W) C C THIS IS THE DOCUMENTED ROUTINE APRNTI, BUT WITHOUT THE CALLS TO C SETERR - BECAUSE IT IS CALLED BY SETERR. C C THIS SUBROUTINE PRINTS OUT NITEMS FROM THE INTEGER ARRAY, A, ON C OUTPUT UNIT IOUT, USING A MAXIMUM OF MCOL PRINT SPACES. C THE OUTPUT FORMAT IS IW. C THE PROGRAM PUTS AS MANY VALUES ON A LINE AS POSSIBLE. C W SHOULD BE INPUT AS THE ACTUAL WIDTH +1 FOR A SPACE BETWEEN VALUES. C C DUPLICATE LINES ARE NOT ALL PRINTED, BUT ARE INDICATED BY ASTERISKS. C C WRITTEN BY DAN WARNER, REVISED BY PHYL FOX, OCTOBER 21, 1982. C C THE LINE WIDTH IS COMPUTED AS THE MINIMUM OF THE INPUT MCOL AND 160. C IF THE LINE WIDTH IS TO BE INCREASED ABOVE 160, THE BUFFERS LINE() C AND LAST(), WHICH THE VALUES TO BE PRINTED ON ONE LINE, MUST C BE DIMENSIONED ACCORDINGLY. C C INPUT PARAMETERS - C C A - THE START OF THE INTEGER ARRAY TO BE PRINTED C C NITEMS - THE NUMBER OF ITEMS TO BE PRINTED C C IOUT - THE OUTPUT UNIT FOR PRINTING C C MCOL - THE NUMBER OF SPACES ACROSS THE LINE C C W - THE WIDTH OF THE PRINTED VALUE (IW) C C C ERROR STATES - NONE. LOWER LEVEL ROUTINE CALLED BY C SETERR, SO IT CANNOT CALL SETERR. C C INTEGER NITEMS, IOUT, MCOL, W INTEGER A(NITEMS) C INTEGER MAX0, MIN0, WW C/6S C INTEGER IFMT1(20), IFMT1C(20), IFMT2(14), IFMT2C(14), BLANK, STAR C EQUIVALENCE (IFMT1(1), IFMT1C(1)), (IFMT2(1), IFMT2C(1)) C/7S CHARACTER*1 IFMT1(20), IFMT2(14), BLANK, STAR CHARACTER*20 IFMT1C CHARACTER*14 IFMT2C EQUIVALENCE (IFMT1(1), IFMT1C), (IFMT2(1), IFMT2C) C/ INTEGER INDW, NCOL, COUNT, I, J, K, ILINE, ILAST LOGICAL DUP INTEGER LINE(40), LAST(40) C C/6S C DATA BLANK/1H /, STAR/1H*/, INDW/7/ C/7S DATA BLANK/' '/, STAR/'*'/, INDW/7/ C/ C C IFMT1 IS FOR THE ASTERISK LINES- IFMT2 FOR THE DATA LINES C C/6S C DATA IFMT1( 1) /1H(/, IFMT2( 1) /1H(/ C DATA IFMT1( 2) /1H1/, IFMT2( 2) /1H1/ C DATA IFMT1( 3) /1HA/, IFMT2( 3) /1HA/ C DATA IFMT1( 4) /1H1/, IFMT2( 4) /1H1/ C DATA IFMT1( 5) /1H,/, IFMT2( 5) /1H,/ C DATA IFMT1( 6) /1H5/, IFMT2( 6) /1HI/ C DATA IFMT1( 7) /1HX/, IFMT2( 7) /1H7/ C DATA IFMT1( 8) /1H,/, IFMT2( 8) /1H,/ C DATA IFMT1( 9) /1H2/, IFMT2( 9) /1H / C DATA IFMT1(10) /1HA/, IFMT2(10) /1H / C DATA IFMT1(11) /1H1/, IFMT2(11) /1HI/ C DATA IFMT1(12) /1H,/, IFMT2(12) /1H / C DATA IFMT1(13) /1H /, IFMT2(13) /1H / C DATA IFMT1(14) /1H /, IFMT2(14) /1H)/ C DATA IFMT1(15) /1HX/ C DATA IFMT1(16) /1H,/ C DATA IFMT1(17) /1H2/ C DATA IFMT1(18) /1HA/ C DATA IFMT1(19) /1H1/ C DATA IFMT1(20) /1H)/ C/7S DATA IFMT1( 1) /'('/, IFMT2( 1) /'('/ DATA IFMT1( 2) /'1'/, IFMT2( 2) /'1'/ DATA IFMT1( 3) /'A'/, IFMT2( 3) /'A'/ DATA IFMT1( 4) /'1'/, IFMT2( 4) /'1'/ DATA IFMT1( 5) /','/, IFMT2( 5) /','/ DATA IFMT1( 6) /'5'/, IFMT2( 6) /'I'/ DATA IFMT1( 7) /'X'/, IFMT2( 7) /'7'/ DATA IFMT1( 8) /','/, IFMT2( 8) /','/ DATA IFMT1( 9) /'2'/, IFMT2( 9) /' '/ DATA IFMT1(10) /'A'/, IFMT2(10) /' '/ DATA IFMT1(11) /'1'/, IFMT2(11) /'I'/ DATA IFMT1(12) /','/, IFMT2(12) /' '/ DATA IFMT1(13) /' '/, IFMT2(13) /' '/ DATA IFMT1(14) /' '/, IFMT2(14) /')'/ DATA IFMT1(15) /'X'/ DATA IFMT1(16) /','/ DATA IFMT1(17) /'2'/ DATA IFMT1(18) /'A'/ DATA IFMT1(19) /'1'/ DATA IFMT1(20) /')'/ C/ C C COMPUTE THE FORMATS. C WW = MIN0(99, MAX0(W, 2)) CALL S88FMT(2, WW, IFMT2(12)) NCOL = MAX0(1, MIN0(99, (MIN0(MCOL,160) - INDW)/WW)) CALL S88FMT(2, NCOL, IFMT2(9)) WW = WW-2 CALL S88FMT(2, WW, IFMT1(13)) C C THE ASTERISKS ARE POSITIONED RIGHT-ADJUSTED IN THE W-WIDTH SPACE. CALL S88FMT(2, WW, IFMT1(13)) C C I COUNTS THE NUMBER OF ITEMS TO BE PRINTED, C J COUNTS THE NUMBER ON A GIVEN LINE, C COUNT COUNTS THE NUMBER OF DUPLICATE LINES. C 10 I = 1 J = 0 COUNT = 0 C C THE LOGICAL OF THE FOLLOWING IS ROUGHLY THIS - C IF THERE ARE STILL MORE ITEMS TO BE PRINTED, A LINE- C FULL IS PUT INTO THE ARRAY, LINE. C WHENEVER A LINE IS PRINTED OUT, IT IS ALSO STUFFED INTO C THE ARRAY, LAST, TO COMPARE WITH THE NEXT ONE COMING IN C TO CHECK FOR REPEAT OR DUPLICATED LINES. C ALSO WHENEVER A LINE IS WRITTEN OUT, THE DUPLICATION C COUNTER, COUNT, IS SET TO ONE. C THE ONLY MILDLY TRICKY PART IS TO NOTE THAT COUNT HAS TO C GO TO 3 BEFORE A LINE OF ASTERISKS IS PRINTED BECAUSE C OF COURSE NO SUCH LINE IS PRINTED FOR JUST A PAIR OF C DUPLICATE LINES. C C ILINE IS PRINTED AS THE INDEX OF THE FIRST ARRAY ELEMENT C IN A LINE. C 20 IF (I .GT. NITEMS) GO TO 90 J = J+1 LINE(J) = A(I) IF (J .EQ. 1) ILINE = I IF (J .LT. NCOL .AND. I .LT. NITEMS) GO TO 80 IF (COUNT .EQ. 0) GO TO 50 DUP = .TRUE. DO 30 K=1,NCOL 30 IF (LAST(K) .NE. LINE(K)) DUP = .FALSE. IF (I .EQ. NITEMS .AND. J .LT. NCOL) DUP = .FALSE. IF (.NOT. DUP .AND. COUNT .EQ. 1) GO TO 50 IF (.NOT. DUP) GO TO 40 COUNT = COUNT+1 IF (COUNT .EQ. 3) WRITE(IOUT, IFMT1C) BLANK, 1 STAR, STAR, STAR, STAR IF (I .EQ. NITEMS) GO TO 50 GO TO 70 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(K), K=1,NCOL) 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(K), K=1,J) COUNT = 1 DO 60 K=1,NCOL 60 LAST(K) = LINE(K) 70 ILAST = ILINE J = 0 80 I = I+1 GO TO 20 90 RETURN END PyBDSF-1.10.1/src/port3/a9rntl.f000066400000000000000000000131751420247104600160460ustar00rootroot00000000000000 SUBROUTINE A9RNTL(A, NITEMS, IOUT, MCOL) C C THIS IS THE DOCUMENTED ROUTINE APRNTL, BUT WITHOUT THE CALLS TO C SETERR - BECAUSE IT IS CALLED BY SETERR. C C THIS SUBROUTINE PRINTS OUT NITEMS FROM THE LOGICAL ARRAY, A, ON C OUTPUT UNIT IOUT, USING A MAXIMUM OF MCOL PRINT SPACES. C THE T OR F VALUES ARE PRINTED RIGHT-ADJUSTED IN A FIELD OF WIDTH 4. C C DUPLICATE LINES ARE NOT ALL PRINTED, BUT ARE INDICATED BY ASTERISKS. C C WRITTEN BY DAN WARNER, REVISED BY PHYL FOX, OCTOBER 21, 1982. C C THE LINE WIDTH IS COMPUTED AS THE MINIMUM OF THE INPUT MCOL AND 160. C IF THE LINE WIDTH IS TO BE INCREASED ABOVE 160, THE BUFFERS LINE() C AND LAST(), WHICH THE VALUES TO BE PRINTED ON ONE LINE, MUST C BE DIMENSIONED ACCORDINGLY. C C INPUT PARAMETERS - C C A - THE START OF THE LOGICAL ARRAY TO BE PRINTED C C NITEMS - THE NUMBER OF ITEMS TO BE PRINTED C C IOUT - THE OUTPUT UNIT FOR PRINTING C C MCOL - THE NUMBER OF SPACES ACROSS THE LINE C C C ERROR STATES - NONE. LOWER LEVEL ROUTINE CALLED BY C SETERR, SO IT CANNOT CALL SETERR. C C INTEGER NITEMS, IOUT, MCOL LOGICAL A(NITEMS) C INTEGER MAX0, MIN0 C/6S C INTEGER IFMT1(20), IFMT1C(20), IFMT2(19), IFMT2C(19), BLANK, C 1 STAR, TCHAR, FCHAR C INTEGER LINE(40), LAST(40) C EQUIVALENCE (IFMT1(1), IFMT1C(1)), (IFMT2(1), IFMT2C(1)) C/7S CHARACTER*1 IFMT1(20), IFMT2(19), BLANK, STAR, TCHAR, FCHAR CHARACTER*20 IFMT1C CHARACTER*19 IFMT2C EQUIVALENCE (IFMT1(1), IFMT1C), (IFMT2(1), IFMT2C) CHARACTER*1 LINE(40), LAST(40) C/ INTEGER INDW, NCOL, COUNT, I, J, K, ILINE, ILAST LOGICAL DUP C C/6S C DATA BLANK/1H /, STAR/1H*/, TCHAR/1HT/, FCHAR/1HF/, INDW/7/ C/7S DATA BLANK/' '/, STAR/'*'/, TCHAR/'T'/, FCHAR/'F'/, INDW/7/ C/ C C C IFMT1 IS FOR THE ASTERISK LINES- IFMT2 FOR THE DATA LINES C C/6S C DATA IFMT1( 1) /1H(/, IFMT2( 1) /1H(/ C DATA IFMT1( 2) /1H1/, IFMT2( 2) /1H1/ C DATA IFMT1( 3) /1HA/, IFMT2( 3) /1HA/ C DATA IFMT1( 4) /1H1/, IFMT2( 4) /1H1/ C DATA IFMT1( 5) /1H,/, IFMT2( 5) /1H,/ C DATA IFMT1( 6) /1H5/, IFMT2( 6) /1HI/ C DATA IFMT1( 7) /1HX/, IFMT2( 7) /1H7/ C DATA IFMT1( 8) /1H,/, IFMT2( 8) /1H,/ C DATA IFMT1( 9) /1H2/, IFMT2( 9) /1H / C DATA IFMT1(10) /1HA/, IFMT2(10) /1H / C DATA IFMT1(11) /1H1/, IFMT2(11) /1H(/ C DATA IFMT1(12) /1H,/, IFMT2(12) /1H3/ C DATA IFMT1(13) /1H /, IFMT2(13) /1HX/ C DATA IFMT1(14) /1H2/, IFMT2(14) /1H,/ C DATA IFMT1(15) /1HX/, IFMT2(15) /1H1/ C DATA IFMT1(16) /1H,/, IFMT2(16) /1HA/ C DATA IFMT1(17) /1H2/, IFMT2(17) /1H1/ C DATA IFMT1(18) /1HA/, IFMT2(18) /1H)/ C DATA IFMT1(19) /1H1/, IFMT2(19) /1H)/ C DATA IFMT1(20) /1H)/ C/7S DATA IFMT1( 1) /'('/, IFMT2( 1) /'('/ DATA IFMT1( 2) /'1'/, IFMT2( 2) /'1'/ DATA IFMT1( 3) /'A'/, IFMT2( 3) /'A'/ DATA IFMT1( 4) /'1'/, IFMT2( 4) /'1'/ DATA IFMT1( 5) /','/, IFMT2( 5) /','/ DATA IFMT1( 6) /'5'/, IFMT2( 6) /'I'/ DATA IFMT1( 7) /'X'/, IFMT2( 7) /'7'/ DATA IFMT1( 8) /','/, IFMT2( 8) /','/ DATA IFMT1( 9) /'2'/, IFMT2( 9) /' '/ DATA IFMT1(10) /'A'/, IFMT2(10) /' '/ DATA IFMT1(11) /'1'/, IFMT2(11) /'('/ DATA IFMT1(12) /','/, IFMT2(12) /'3'/ DATA IFMT1(13) /' '/, IFMT2(13) /'X'/ DATA IFMT1(14) /'2'/, IFMT2(14) /','/ DATA IFMT1(15) /'X'/, IFMT2(15) /'1'/ DATA IFMT1(16) /','/, IFMT2(16) /'A'/ DATA IFMT1(17) /'2'/, IFMT2(17) /'1'/ DATA IFMT1(18) /'A'/, IFMT2(18) /')'/ DATA IFMT1(19) /'1'/, IFMT2(19) /')'/ DATA IFMT1(20) /')'/ C/ C C C COMPUTE THE NUMBER OF FIELDS OF 4 ACROSS A LINE. C NCOL = MAX0(1, MIN0(99, (MIN0(MCOL,160)-INDW)/4)) C C THE ASTERISKS ARE POSITIONED RIGHT-ADJUSTED IN THE 4-CHARACTER SPACE. CALL S88FMT(2, NCOL, IFMT2(9)) C C I COUNTS THE NUMBER OF ITEMS TO BE PRINTED, C J COUNTS THE NUMBER ON A GIVEN LINE, C COUNT COUNTS THE NUMBER OF DUPLICATE LINES. C 10 I = 1 J = 0 COUNT = 0 C C THE LOGICAL OF THE FOLLOWING IS ROUGHLY THIS - C IF THERE ARE STILL MORE ITEMS TO BE PRINTED, A LINE- C FULL IS PUT INTO THE ARRAY, LINE. C WHENEVER A LINE IS PRINTED OUT, IT IS ALSO STUFFED INTO C THE ARRAY, LAST, TO COMPARE WITH THE NEXT ONE COMING IN C TO CHECK FOR REPEAT OR DUPLICATED LINES. C ALSO WHENEVER A LINE IS WRITTEN OUT, THE DUPLICATION C COUNTER, COUNT, IS SET TO ONE. C THE ONLY MILDLY TRICKY PART IS TO NOTE THAT COUNT HAS TO C GO TO 3 BEFORE A LINE OF ASTERISKS IS PRINTED BECAUSE C OF COURSE NO SUCH LINE IS PRINTED FOR JUST A PAIR OF C DUPLICATE LINES. C C ILINE IS PRINTED AS THE INDEX OF THE FIRST ARRAY ELEMENT C IN A LINE. C 20 IF (I .GT. NITEMS) GO TO 90 J = J+1 LINE(J) = FCHAR IF ( A(I) ) LINE(J) = TCHAR IF (J .EQ. 1) ILINE = I IF (J .LT. NCOL .AND. I .LT. NITEMS) GO TO 80 IF (COUNT .EQ. 0) GO TO 50 DUP = .TRUE. DO 30 K=1,NCOL 30 IF (LAST(K) .NE. LINE(K)) DUP = .FALSE. IF (I .EQ. NITEMS .AND. J .LT. NCOL) DUP = .FALSE. IF (.NOT. DUP .AND. COUNT .EQ. 1) GO TO 50 IF (.NOT. DUP) GO TO 40 COUNT = COUNT+1 IF (COUNT .EQ. 3) WRITE(IOUT, IFMT1C) BLANK, 1 STAR, STAR, STAR, STAR IF (I .EQ. NITEMS) GO TO 50 GO TO 70 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(K), K=1,NCOL) 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(K), K=1,J) COUNT = 1 DO 60 K=1,NCOL 60 LAST(K) = LINE(K) 70 ILAST = ILINE J = 0 80 I = I+1 GO TO 20 90 RETURN END PyBDSF-1.10.1/src/port3/a9rntr.f000066400000000000000000000144771420247104600160620ustar00rootroot00000000000000 SUBROUTINE A9RNTR(A, NITEMS, IOUT, MCOL, W, D) C C THIS IS THE DOCUMENTED ROUTINE APRNTR, BUT WITHOUT THE CALLS TO C SETERR - BECAUSE IT IS CALLED BY SETERR. C C THIS SUBROUTINE PRINTS OUT NITEMS FROM THE REAL ARRAY, A, ON C OUTPUT UNIT IOUT, USING A MAXIMUM OF MCOL PRINT SPACES. C THE OUTPUT FORMAT IS 1PEW.D. C THE PROGRAM PUTS AS MANY VALUES ON A LINE AS POSSIBLE. C W SHOULD BE INPUT AS THE ACTUAL WIDTH +1 FOR A SPACE BETWEEN VALUES. C C DUPLICATE LINES ARE NOT ALL PRINTED, BUT ARE INDICATED BY ASTERISKS. C C WRITTEN BY DAN WARNER, REVISED BY PHYL FOX, OCTOBER 21, 1982. C C THE LINE WIDTH IS COMPUTED AS THE MINIMUM OF THE INPUT MCOL AND 160. C IF THE LINE WIDTH IS TO BE INCREASED ABOVE 160, THE BUFFERS LINE() C AND LAST(), WHICH THE VALUES TO BE PRINTED ON ONE LINE, MUST C BE DIMENSIONED ACCORDINGLY. C C INPUT PARAMETERS - C C A - THE START OF THE REAL ARRAY TO BE PRINTED C C NITEMS - THE NUMBER OF ITEMS TO BE PRINTED C C IOUT - THE OUTPUT UNIT FOR PRINTING C C MCOL - THE NUMBER OF SPACES ACROSS THE LINE C C W - THE WIDTH OF THE PRINTED VALUE (1PEW.D) C C D - THE NUMBER OF DIGITS AFTER THE DECIMAL POINT (1PEW.D) C C C ERROR STATES - NONE. LOWER LEVEL ROUTINE CALLED BY C SETERR, SO IT CANNOT CALL SETERR. C C INTEGER NITEMS, IOUT, MCOL, W, D REAL A(NITEMS) C INTEGER MAX0, MIN0, WW, DD, EMIN, EMAX, 1 EXPENT, I1MACH, ICEIL, IABS, I10WID C/6S C INTEGER IFMT1(20), IFMT1C(20), IFMT2(18), IFMT2C(18), BLANK, STAR C EQUIVALENCE (IFMT1(1), IFMT1C(1)), (IFMT2(1), IFMT2C(1)) C/7S CHARACTER*1 IFMT1(20), IFMT2(18), BLANK, STAR CHARACTER*20 IFMT1C CHARACTER*18 IFMT2C EQUIVALENCE (IFMT1(1), IFMT1C), (IFMT2(1), IFMT2C) C/ INTEGER INDW, NCOL, COUNT, I, J, K, ILINE, ILAST LOGICAL DUP REAL LINE(18), LAST(18), LOGETA C C/6S C DATA BLANK/1H /, STAR/1H*/, INDW/7/, EXPENT/0/ C/7S DATA BLANK/' '/, STAR/'*'/, INDW/7/, EXPENT/0/ C/ C C IFMT1 IS FOR THE ASTERISK LINES- IFMT2 FOR THE DATA LINES C C/6S C DATA IFMT1( 1) /1H(/, IFMT2( 1) /1H(/ C DATA IFMT1( 2) /1H1/, IFMT2( 2) /1H1/ C DATA IFMT1( 3) /1HA/, IFMT2( 3) /1HA/ C DATA IFMT1( 4) /1H1/, IFMT2( 4) /1H1/ C DATA IFMT1( 5) /1H,/, IFMT2( 5) /1H,/ C DATA IFMT1( 6) /1H5/, IFMT2( 6) /1HI/ C DATA IFMT1( 7) /1HX/, IFMT2( 7) /1H7/ C DATA IFMT1( 8) /1H,/, IFMT2( 8) /1H,/ C DATA IFMT1( 9) /1H2/, IFMT2( 9) /1H1/ C DATA IFMT1(10) /1HA/, IFMT2(10) /1HP/ C DATA IFMT1(11) /1H1/, IFMT2(11) /1H / C DATA IFMT1(12) /1H,/, IFMT2(12) /1HE/ C DATA IFMT1(13) /1H /, IFMT2(13) /1H / C DATA IFMT1(14) /1H /, IFMT2(14) /1H / C DATA IFMT1(15) /1HX/, IFMT2(15) /1H./ C DATA IFMT1(16) /1H,/, IFMT2(16) /1H / C DATA IFMT1(17) /1H2/, IFMT2(17) /1H / C DATA IFMT1(18) /1HA/, IFMT2(18) /1H)/ C DATA IFMT1(19) /1H1/ C DATA IFMT1(20) /1H)/ C/7S DATA IFMT1( 1) /'('/, IFMT2( 1) /'('/ DATA IFMT1( 2) /'1'/, IFMT2( 2) /'1'/ DATA IFMT1( 3) /'A'/, IFMT2( 3) /'A'/ DATA IFMT1( 4) /'1'/, IFMT2( 4) /'1'/ DATA IFMT1( 5) /','/, IFMT2( 5) /','/ DATA IFMT1( 6) /'5'/, IFMT2( 6) /'I'/ DATA IFMT1( 7) /'X'/, IFMT2( 7) /'7'/ DATA IFMT1( 8) /','/, IFMT2( 8) /','/ DATA IFMT1( 9) /'2'/, IFMT2( 9) /'1'/ DATA IFMT1(10) /'A'/, IFMT2(10) /'P'/ DATA IFMT1(11) /'1'/, IFMT2(11) /' '/ DATA IFMT1(12) /','/, IFMT2(12) /'E'/ DATA IFMT1(13) /' '/, IFMT2(13) /' '/ DATA IFMT1(14) /' '/, IFMT2(14) /' '/ DATA IFMT1(15) /'X'/, IFMT2(15) /'.'/ DATA IFMT1(16) /','/, IFMT2(16) /' '/ DATA IFMT1(17) /'2'/, IFMT2(17) /' '/ DATA IFMT1(18) /'A'/, IFMT2(18) /')'/ DATA IFMT1(19) /'1'/ DATA IFMT1(20) /')'/ C/ C C C EXPENT IS USED AS A FIRST-TIME SWITCH TO SIGNAL IF THE C MACHINE-VALUE CONSTANTS HAVE BEEN COMPUTED. C IF (EXPENT .GT. 0) GO TO 10 LOGETA = ALOG10(FLOAT(I1MACH(10))) EMIN = ICEIL(LOGETA*FLOAT(IABS(I1MACH(12)-1))) EMAX = ICEIL(LOGETA*FLOAT(I1MACH(13))) EXPENT = I10WID(MAX0(EMIN, EMAX)) C C COMPUTE THE FORMATS. C 10 WW = MIN0(99, MAX0(W, 5+EXPENT)) CALL S88FMT(2, WW, IFMT2(13)) DD = MIN0(D, (WW-(5+EXPENT))) CALL S88FMT(2, DD, IFMT2(16)) C C NCOL IS THE NUMBER OF VALUES TO BE PRINTED ACROSS THE LINE. C NCOL = MAX0(1, MIN0(9, (MIN0(MCOL,160)-INDW)/WW)) CALL S88FMT(1, NCOL, IFMT2(11)) WW = WW-2 C C THE ASTERISKS ARE POSITIONED RIGHT-ADJUSTED IN THE W-WIDTH SPACE. CALL S88FMT(2, WW, IFMT1(13)) C C I COUNTS THE NUMBER OF ITEMS TO BE PRINTED, C J COUNTS THE NUMBER ON A GIVEN LINE, C COUNT COUNTS THE NUMBER OF DUPLICATE LINES. C I = 1 J = 0 COUNT = 0 C C THE LOGICAL OF THE FOLLOWING IS ROUGHLY THIS - C IF THERE ARE STILL MORE ITEMS TO BE PRINTED, A LINE- C FULL IS PUT INTO THE ARRAY, LINE. C WHENEVER A LINE IS PRINTED OUT, IT IS ALSO STUFFED INTO C THE ARRAY, LAST, TO COMPARE WITH THE NEXT ONE COMING IN C TO CHECK FOR REPEAT OR DUPLICATED LINES. C ALSO WHENEVER A LINE IS WRITTEN OUT, THE DUPLICATION C COUNTER, COUNT, IS SET TO ONE. C THE ONLY MILDLY TRICKY PART IS TO NOTE THAT COUNT HAS TO C GO TO 3 BEFORE A LINE OF ASTERISKS IS PRINTED BECAUSE C OF COURSE NO SUCH LINE IS PRINTED FOR JUST A PAIR OF C DUPLICATE LINES. C C ILINE IS PRINTED AS THE INDEX OF THE FIRST ARRAY ELEMENT C IN A LINE. C 20 IF (I .GT. NITEMS) GO TO 90 J = J+1 LINE(J) = A(I) IF (J .EQ. 1) ILINE = I IF (J .LT. NCOL .AND. I .LT. NITEMS) GO TO 80 IF (COUNT .EQ. 0) GO TO 50 DUP = .TRUE. DO 30 K=1,NCOL 30 IF (LAST(K) .NE. LINE(K)) DUP = .FALSE. IF (I .EQ. NITEMS .AND. J .LT. NCOL) DUP = .FALSE. IF (.NOT. DUP .AND. COUNT .EQ. 1) GO TO 50 IF (.NOT. DUP) GO TO 40 COUNT = COUNT+1 IF (COUNT .EQ. 3) WRITE(IOUT, IFMT1C) BLANK, 1 STAR, STAR, STAR, STAR IF (I .EQ. NITEMS) GO TO 50 GO TO 70 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(K), K=1,NCOL) 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(K), K=1,J) COUNT = 1 DO 60 K=1,NCOL 60 LAST(K) = LINE(K) 70 ILAST = ILINE J = 0 80 I = I+1 GO TO 20 90 RETURN END PyBDSF-1.10.1/src/port3/aprntc.f000066400000000000000000000171511420247104600161220ustar00rootroot00000000000000 SUBROUTINE APRNTC(A, NITEMS, IOUT, MCOL, W, D) C C THIS SUBROUTINE PRINTS OUT NITEMS FROM THE COMPLEX ARRAY, A, ON C OUTPUT UNIT IOUT, USING A MAXIMUM OF MCOL PRINT SPACES. C THE OUTPUT FORMAT IS 2(1PEW.D). C THE PROGRAM PUTS AS MANY VALUES ON A LINE AS POSSIBLE. C W SHOULD BE INPUT AS THE ACTUAL WIDTH +1 FOR A SPACE BETWEEN VALUES. C C DUPLICATE LINES ARE NOT ALL PRINTED, BUT ARE INDICATED BY ASTERISKS. C C WRITTEN BY DAN WARNER, REVISED BY PHYL FOX, OCTOBER 21, 1982. C C THE LINE WIDTH IS COMPUTED AS THE MINIMUM OF THE INPUT MCOL AND 160. C IF THE LINE WIDTH IS TO BE INCREASED ABOVE 160, THE BUFFERS LINE() C AND LAST(), WHICH THE VALUES TO BE PRINTED ON ONE LINE, MUST C BE DIMENSIONED ACCORDINGLY. C C INPUT PARAMETERS - C C A - THE START OF THE COMPLEX ARRAY TO BE PRINTED C C NITEMS - THE NUMBER OF ITEMS TO BE PRINTED C C IOUT - THE OUTPUT UNIT FOR PRINTING C C MCOL - THE NUMBER OF SPACES ACROSS THE LINE C C W - THE WIDTH OF THE PRINTED VALUE (1PEW.D) C C D - THE NUMBER OF DIGITS AFTER THE DECIMAL POINT (1PEW.D) C C C ERROR STATES - C C 1 - NITEMS .LE. ZERO C C 2 - W .GT. MCOL C C 3 - D .LT. ZERO C C 4 - W .LT. D+6 C INTEGER NITEMS, IOUT, MCOL, W, D C/R C REAL A(2,NITEMS) C/C COMPLEX A(NITEMS) C/ C INTEGER MAX0, MIN0, WW, DD, EMIN, EMAX, 1 EXPENT, I1MACH, ICEIL, IABS, I10WID C/6S C INTEGER IFMT1(20), IFMT2(18), BLANK, STAR C INTEGER IFMT1C(20), IFMT2C(18) C EQUIVALENCE (IFMT1(1),IFMT1C(1)), (IFMT2(1),IFMT2C(1)) C/7S CHARACTER*1 IFMT1(20), IFMT2(18), BLANK, STAR CHARACTER*20 IFMT1C CHARACTER*18 IFMT2C EQUIVALENCE (IFMT1(1),IFMT1C), (IFMT2(1),IFMT2C) C/ INTEGER INDW, NCOL, COUNT, I, J, K, ILINE, ILAST LOGICAL DUP C/R C REAL LINE(2,18), LAST(2,18) C/C COMPLEX LINE(18), LAST(18) C/ REAL LOGETA C C/6S C DATA BLANK/1H /, STAR/1H*/, INDW/7/, EXPENT/0/ C/7S DATA BLANK/' '/, STAR/'*'/, INDW/7/, EXPENT/0/ C/ C C IFMT1 IS FOR THE ASTERISK LINES, IFMT2 FOR THE DATA LINES C C/6S C DATA IFMT1( 1) /1H(/, IFMT2( 1) /1H(/ C DATA IFMT1( 2) /1H1/, IFMT2( 2) /1H1/ C DATA IFMT1( 3) /1HA/, IFMT2( 3) /1HA/ C DATA IFMT1( 4) /1H1/, IFMT2( 4) /1H1/ C DATA IFMT1( 5) /1H,/, IFMT2( 5) /1H,/ C DATA IFMT1( 6) /1H5/, IFMT2( 6) /1HI/ C DATA IFMT1( 7) /1HX/, IFMT2( 7) /1H7/ C DATA IFMT1( 8) /1H,/, IFMT2( 8) /1H,/ C DATA IFMT1( 9) /1H2/, IFMT2( 9) /1H1/ C DATA IFMT1(10) /1HA/, IFMT2(10) /1HP/ C DATA IFMT1(11) /1H1/, IFMT2(11) /1H / C DATA IFMT1(12) /1H,/, IFMT2(12) /1HE/ C DATA IFMT1(13) /1H /, IFMT2(13) /1H / C DATA IFMT1(14) /1H /, IFMT2(14) /1H / C DATA IFMT1(15) /1HX/, IFMT2(15) /1H./ C DATA IFMT1(16) /1H,/, IFMT2(16) /1H / C DATA IFMT1(17) /1H2/, IFMT2(17) /1H / C DATA IFMT1(18) /1HA/, IFMT2(18) /1H)/ C DATA IFMT1(19) /1H1/ C DATA IFMT1(20) /1H)/ C/7S DATA IFMT1( 1) /'('/, IFMT2( 1) /'('/ DATA IFMT1( 2) /'1'/, IFMT2( 2) /'1'/ DATA IFMT1( 3) /'A'/, IFMT2( 3) /'A'/ DATA IFMT1( 4) /'1'/, IFMT2( 4) /'1'/ DATA IFMT1( 5) /','/, IFMT2( 5) /','/ DATA IFMT1( 6) /'5'/, IFMT2( 6) /'I'/ DATA IFMT1( 7) /'X'/, IFMT2( 7) /'7'/ DATA IFMT1( 8) /','/, IFMT2( 8) /','/ DATA IFMT1( 9) /'2'/, IFMT2( 9) /'1'/ DATA IFMT1(10) /'A'/, IFMT2(10) /'P'/ DATA IFMT1(11) /'1'/, IFMT2(11) /' '/ DATA IFMT1(12) /','/, IFMT2(12) /'E'/ DATA IFMT1(13) /' '/, IFMT2(13) /' '/ DATA IFMT1(14) /' '/, IFMT2(14) /' '/ DATA IFMT1(15) /'X'/, IFMT2(15) /'.'/ DATA IFMT1(16) /','/, IFMT2(16) /' '/ DATA IFMT1(17) /'2'/, IFMT2(17) /' '/ DATA IFMT1(18) /'A'/, IFMT2(18) /')'/ DATA IFMT1(19) /'1'/ DATA IFMT1(20) /')'/ C/ C C/6S C IF (NITEMS .LE. 0) CALL C 1 SETERR(27H APRNTC - NITEMS .LE. ZERO, 27, 1, 2) C/7S IF (NITEMS .LE. 0) CALL 1 SETERR(' APRNTC - NITEMS .LE. ZERO', 27, 1, 2) C/ C C/6S C IF (W .GT. MCOL) CALL C 1 SETERR(22H APRNTC - W .GT. MCOL, 22, 2, 2) C/7S IF (W .GT. MCOL) CALL 1 SETERR(' APRNTC - W .GT. MCOL', 22, 2, 2) C/ C C/6S C IF (D .LT. 0) CALL C 1 SETERR(22H APRNTC - D .LT. ZERO, 22, 3, 2) C/7S IF (D .LT. 0) CALL 1 SETERR(' APRNTC - D .LT. ZERO', 22, 3, 2) C/ C C/6S C IF (W .LT. D+6) CALL C 1 SETERR(21H APRNTC - W .LT. D+6, 21, 4, 2) C/7S IF (W .LT. D+6) CALL 1 SETERR(' APRNTC - W .LT. D+6', 21, 4, 2) C/ C C C EXPENT IS USED AS A FIRST-TIME SWITCH TO SIGNAL IF THE C MACHINE-VALUE CONSTANTS HAVE BEEN COMPUTED. C IF (EXPENT .GT. 0) GO TO 10 LOGETA = ALOG10(FLOAT(I1MACH(10))) EMIN = ICEIL(LOGETA*FLOAT(IABS(I1MACH(12)-1))) EMAX = ICEIL(LOGETA*FLOAT(I1MACH(13))) EXPENT = I10WID(MAX0(EMIN, EMAX)) C C COMPUTE THE FORMATS. C 10 WW = MIN0(99, MAX0(W, 5+EXPENT)) CALL S88FMT(2, WW, IFMT2(13)) DD = MIN0(D, (WW-(5+EXPENT))) CALL S88FMT(2, DD, IFMT2(16)) C C NCOL IS THE NUMBER OF VALUES TO BE PRINTED ACROSS THE LINE. C NCOL = MAX0(1, MIN0(9, (MIN0(MCOL,160)-INDW)/(2*WW))) CALL S88FMT(1, (2*NCOL), IFMT2(11)) WW = WW-2 C C THE ASTERISKS ARE POSITIONED RIGHT-ADJUSTED IN THE W-WIDTH SPACE. CALL S88FMT(2, WW, IFMT1(13)) C C I COUNTS THE NUMBER OF ITEMS TO BE PRINTED, C J COUNTS THE NUMBER ON A GIVEN LINE, C COUNT COUNTS THE NUMBER OF DUPLICATE LINES. C I = 1 J = 0 COUNT = 0 C C THE LOGICAL OF THE FOLLOWING IS ROUGHLY THIS - C IF THERE ARE STILL MORE ITEMS TO BE PRINTED, A LINE- C FULL IS PUT INTO THE ARRAY, LINE. C WHENEVER A LINE IS PRINTED OUT, IT IS ALSO STUFFED INTO C THE ARRAY, LAST, TO COMPARE WITH THE NEXT ONE COMING IN C TO CHECK FOR REPEAT OR DUPLICATED LINES. C ALSO WHENEVER A LINE IS WRITTEN OUT, THE DUPLICATION C COUNTER, COUNT, IS SET TO ONE. C THE ONLY MILDLY TRICKY PART IS TO NOTE THAT COUNT HAS TO C GO TO 3 BEFORE A LINE OF ASTERISKS IS PRINTED BECAUSE C OF COURSE NO SUCH LINE IS PRINTED FOR JUST A PAIR OF C DUPLICATE LINES. C C ILINE IS PRINTED AS THE INDEX OF THE FIRST ARRAY ELEMENT C IN A LINE. C C 20 IF (I .GT. NITEMS) GO TO 90 J = J+1 C/R C LINE(1,J) = A(1,J) C LINE(2,J) = A(2,J) C/C LINE(J) = A(I) C/ IF (J .EQ. 1) ILINE = I IF (J .LT. NCOL .AND. I .LT. NITEMS) GO TO 80 IF (COUNT .EQ. 0) GO TO 50 DUP = .TRUE. DO 30 K=1,NCOL C/R C IF (LAST(1,K) .NE. LINE(1,K) .OR. C 1 LAST(2,K) .NE. LINE(2,K)) C 2 DUP = .FALSE. C/C IF (REAL(LAST(K)) .NE. REAL(LINE(K)) .OR. 1 AIMAG(LAST(K)) .NE. AIMAG(LINE(K))) 2 DUP = .FALSE. C/ 30 CONTINUE IF (I .EQ. NITEMS .AND. J .LT. NCOL) DUP = .FALSE. IF (.NOT. DUP .AND. COUNT .EQ. 1) GO TO 50 IF (.NOT. DUP) GO TO 40 COUNT = COUNT+1 IF (COUNT .EQ. 3) WRITE(IOUT, IFMT1C) BLANK, 1 STAR, STAR, STAR, STAR IF (I .EQ. NITEMS) GO TO 50 GO TO 70 C/R C 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(1,K), C 1 LAST(2,K), K=1,NCOL) C 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(1,K), C 1 LINE(2,K), K=1,J) C/C 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(K), K=1,NCOL) 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(K), K=1,J) C/ COUNT = 1 DO 60 K=1,NCOL C/R C LAST(1,K) = LINE(1,K) C 60 LAST(2,K) = LINE(2,K) C/C 60 LAST(K) = LINE(K) C/ 70 ILAST = ILINE J = 0 80 I = I+1 GO TO 20 90 RETURN END PyBDSF-1.10.1/src/port3/aprntd.f000066400000000000000000000157071420247104600161300ustar00rootroot00000000000000 SUBROUTINE APRNTD(A, NITEMS, IOUT, MCOL, W, D) C C THIS SUBROUTINE PRINTS OUT NITEMS FROM THE DOUBLE PRECISION ARRAY, C A, ON OUTPUT UNIT IOUT, USING A MAXIMUM OF MCOL PRINT SPACES. C THE OUTPUT FORMAT IS 1PDW.D. C THE PROGRAM PUTS AS MANY VALUES ON A LINE AS POSSIBLE. C W SHOULD BE INPUT AS THE ACTUAL WIDTH +1 FOR A SPACE BETWEEN VALUES. C C DUPLICATE LINES ARE NOT ALL PRINTED, BUT ARE INDICATED BY ASTERISKS. C C WRITTEN BY DAN WARNER, REVISED BY PHYL FOX, OCTOBER 21, 1982. C C THE LINE WIDTH IS COMPUTED AS THE MINIMUM OF THE INPUT MCOL AND 160. C IF THE LINE WIDTH IS TO BE INCREASED ABOVE 160, THE BUFFERS LINE() C AND LAST(), WHICH THE VALUES TO BE PRINTED ON ONE LINE, MUST C BE DIMENSIONED ACCORDINGLY. C C INPUT PARAMETERS - C C A - THE START OF THE DOUBLE PRECISION ARRAY TO BE PRINTED C C NITEMS - THE NUMBER OF ITEMS TO BE PRINTED C C IOUT - THE OUTPUT UNIT FOR PRINTING C C MCOL - THE NUMBER OF SPACES ACROSS THE LINE C C W - THE WIDTH OF THE PRINTED VALUE (1PDW.D) C C D - THE NUMBER OF DIGITS AFTER THE DECIMAL POINT (1PDW.D) C C C ERROR STATES - C C 1 - NITEMS .LE. ZERO C C 2 - W .GT. MCOL C C 3 - D .LT. ZERO C C 4 - W .LT. D+6 C INTEGER NITEMS, IOUT, MCOL, W, D DOUBLE PRECISION A(NITEMS) C INTEGER MAX0, MIN0, WW, DD, EMIN, EMAX, 1 EXPENT, I1MACH, ICEIL, IABS, I10WID C/6S C INTEGER IFMT1(20), IFMT1C(20), IFMT2(18), IFMT2C(18), BLANK, STAR C EQUIVALENCE (IFMT1(1),IFMT1C(1)), (IFMT2(1),IFMT2C(1)) C/7S CHARACTER*1 IFMT1(20), IFMT2(18), BLANK, STAR CHARACTER*20 IFMT1C CHARACTER*18 IFMT2C EQUIVALENCE (IFMT1(1),IFMT1C), (IFMT2(1),IFMT2C) C/ INTEGER INDW, NCOL, COUNT, I, J, K, ILINE, ILAST LOGICAL DUP DOUBLE PRECISION LINE(18), LAST(18) REAL LOGETA C C/6S C DATA BLANK/1H /, STAR/1H*/, INDW/7/, EXPENT/0/ C/7S DATA BLANK/' '/, STAR/'*'/, INDW/7/, EXPENT/0/ C/ C C IFMT1 IS FOR THE ASTERISK LINES, IFMT2 FOR THE DATA LINES C C/6S C DATA IFMT1( 1) /1H(/, IFMT2( 1) /1H(/ C DATA IFMT1( 2) /1H1/, IFMT2( 2) /1H1/ C DATA IFMT1( 3) /1HA/, IFMT2( 3) /1HA/ C DATA IFMT1( 4) /1H1/, IFMT2( 4) /1H1/ C DATA IFMT1( 5) /1H,/, IFMT2( 5) /1H,/ C DATA IFMT1( 6) /1H5/, IFMT2( 6) /1HI/ C DATA IFMT1( 7) /1HX/, IFMT2( 7) /1H7/ C DATA IFMT1( 8) /1H,/, IFMT2( 8) /1H,/ C DATA IFMT1( 9) /1H2/, IFMT2( 9) /1H1/ C DATA IFMT1(10) /1HA/, IFMT2(10) /1HP/ C DATA IFMT1(11) /1H1/, IFMT2(11) /1H / C DATA IFMT1(12) /1H,/, IFMT2(12) /1HD/ C DATA IFMT1(13) /1H /, IFMT2(13) /1H / C DATA IFMT1(14) /1H /, IFMT2(14) /1H / C DATA IFMT1(15) /1HX/, IFMT2(15) /1H./ C DATA IFMT1(16) /1H,/, IFMT2(16) /1H / C DATA IFMT1(17) /1H2/, IFMT2(17) /1H / C DATA IFMT1(18) /1HA/, IFMT2(18) /1H)/ C DATA IFMT1(19) /1H1/ C DATA IFMT1(20) /1H)/ C/7S DATA IFMT1( 1) /'('/, IFMT2( 1) /'('/ DATA IFMT1( 2) /'1'/, IFMT2( 2) /'1'/ DATA IFMT1( 3) /'A'/, IFMT2( 3) /'A'/ DATA IFMT1( 4) /'1'/, IFMT2( 4) /'1'/ DATA IFMT1( 5) /','/, IFMT2( 5) /','/ DATA IFMT1( 6) /'5'/, IFMT2( 6) /'I'/ DATA IFMT1( 7) /'X'/, IFMT2( 7) /'7'/ DATA IFMT1( 8) /','/, IFMT2( 8) /','/ DATA IFMT1( 9) /'2'/, IFMT2( 9) /'1'/ DATA IFMT1(10) /'A'/, IFMT2(10) /'P'/ DATA IFMT1(11) /'1'/, IFMT2(11) /' '/ DATA IFMT1(12) /','/, IFMT2(12) /'D'/ DATA IFMT1(13) /' '/, IFMT2(13) /' '/ DATA IFMT1(14) /' '/, IFMT2(14) /' '/ DATA IFMT1(15) /'X'/, IFMT2(15) /'.'/ DATA IFMT1(16) /','/, IFMT2(16) /' '/ DATA IFMT1(17) /'2'/, IFMT2(17) /' '/ DATA IFMT1(18) /'A'/, IFMT2(18) /')'/ DATA IFMT1(19) /'1'/ DATA IFMT1(20) /')'/ C/ C C/6S C IF (NITEMS .LE. 0) CALL C 1 SETERR(27H APRNTD - NITEMS .LE. ZERO, 27, 1, 2) C/7S IF (NITEMS .LE. 0) CALL 1 SETERR(' APRNTD - NITEMS .LE. ZERO', 27, 1, 2) C/ C C/6S C IF (W .GT. MCOL) CALL C 1 SETERR(22H APRNTD - W .GT. MCOL, 22, 2, 2) C/7S IF (W .GT. MCOL) CALL 1 SETERR(' APRNTD - W .GT. MCOL', 22, 2, 2) C/ C C/6S C IF (D .LT. 0) CALL C 1 SETERR(22H APRNTD - D .LT. ZERO, 22, 3, 2) C/7S IF (D .LT. 0) CALL 1 SETERR(' APRNTD - D .LT. ZERO', 22, 3, 2) C/ C C/6S C IF (W .LT. D+6) CALL C 1 SETERR(21H APRNTD - W .LT. D+6, 21, 4, 2) C/7S IF (W .LT. D+6) CALL 1 SETERR(' APRNTD - W .LT. D+6', 21, 4, 2) C/ C C EXPENT IS USED AS A FIRST-TIME SWITCH TO SIGNAL IF THE C MACHINE-VALUE CONSTANTS HAVE BEEN COMPUTED. C IF (EXPENT .GT. 0) GO TO 10 LOGETA = ALOG10(FLOAT(I1MACH(10))) EMIN = ICEIL(LOGETA*FLOAT(IABS(I1MACH(15)-1))) EMAX = ICEIL(LOGETA*FLOAT(I1MACH(16))) EXPENT = I10WID(MAX0(EMIN, EMAX)) C C COMPUTE THE FORMATS. C 10 WW = MIN0(99, MAX0(W, 5+EXPENT)) CALL S88FMT(2, WW, IFMT2(13)) DD = MIN0(D, (WW-(5+EXPENT))) CALL S88FMT(2, DD, IFMT2(16)) C C NCOL IS THE NUMBER OF VALUES TO BE PRINTED ACROSS THE LINE. C NCOL = MAX0(1, MIN0(9, (MIN0(MCOL,160)-INDW)/WW)) CALL S88FMT(1, NCOL, IFMT2(11)) WW = WW-2 C THE ASTERISKS ARE POSITIONED RIGHT-ADJUSTED IN THE W-WIDTH SPACE. CALL S88FMT(2, WW, IFMT1(13)) C C I COUNTS THE NUMBER OF ITEMS TO BE PRINTED, C J COUNTS THE NUMBER ON A GIVEN LINE, C COUNT COUNTS THE NUMBER OF DUPLICATE LINES. C I = 1 J = 0 COUNT = 0 C C THE LOGICAL OF THE FOLLOWING IS ROUGHLY THIS - C IF THERE ARE STILL MORE ITEMS TO BE PRINTED, A LINE- C FULL IS PUT INTO THE ARRAY, LINE. C WHENEVER A LINE IS PRINTED OUT, IT IS ALSO STUFFED INTO C THE ARRAY, LAST, TO COMPARE WITH THE NEXT ONE COMING IN C TO CHECK FOR REPEAT OR DUPLICATED LINES. C ALSO WHENEVER A LINE IS WRITTEN OUT, THE DUPLICATION C COUNTER, COUNT, IS SET TO ONE. C THE ONLY MILDLY TRICKY PART IS TO NOTE THAT COUNT HAS TO C GO TO 3 BEFORE A LINE OF ASTERISKS IS PRINTED BECAUSE C OF COURSE NO SUCH LINE IS PRINTED FOR JUST A PAIR OF C DUPLICATE LINES. C C ILINE IS PRINTED AS THE INDEX OF THE FIRST ARRAY ELEMENT C IN A LINE. C 20 IF (I .GT. NITEMS) GO TO 90 J = J+1 LINE(J) = A(I) IF (J .EQ. 1) ILINE = I IF (J .LT. NCOL .AND. I .LT. NITEMS) GO TO 80 IF (COUNT .EQ. 0) GO TO 50 DUP = .TRUE. DO 30 K=1,NCOL 30 IF (LAST(K) .NE. LINE(K)) DUP = .FALSE. IF (I .EQ. NITEMS .AND. J .LT. NCOL) DUP = .FALSE. IF (.NOT. DUP .AND. COUNT .EQ. 1) GO TO 50 IF (.NOT. DUP) GO TO 40 COUNT = COUNT+1 IF (COUNT .EQ. 3) WRITE(IOUT, IFMT1C) BLANK, 1 STAR, STAR, STAR, STAR IF (I .EQ. NITEMS) GO TO 50 GO TO 70 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(K), K=1,NCOL) 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(K), K=1,J) COUNT = 1 DO 60 K=1,NCOL 60 LAST(K) = LINE(K) 70 ILAST = ILINE J = 0 80 I = I+1 GO TO 20 90 RETURN END PyBDSF-1.10.1/src/port3/aprnti.f000066400000000000000000000134371420247104600161330ustar00rootroot00000000000000 SUBROUTINE APRNTI(A, NITEMS, IOUT, MCOL, W) C C THIS SUBROUTINE PRINTS OUT NITEMS FROM THE INTEGER ARRAY, A, ON C OUTPUT UNIT IOUT, USING A MAXIMUM OF MCOL PRINT SPACES. C THE OUTPUT FORMAT IS IW. C THE PROGRAM PUTS AS MANY VALUES ON A LINE AS POSSIBLE. C W SHOULD BE INPUT AS THE ACTUAL WIDTH +1 FOR A SPACE BETWEEN VALUES. C C DUPLICATE LINES ARE NOT ALL PRINTED, BUT ARE INDICATED BY ASTERISKS. C C WRITTEN BY DAN WARNER, REVISED BY PHYL FOX, OCTOBER 21, 1982. C C THE LINE WIDTH IS COMPUTED AS THE MINIMUM OF THE INPUT MCOL AND 160. C IF THE LINE WIDTH IS TO BE INCREASED ABOVE 160, THE BUFFERS LINE() C AND LAST(), WHICH THE VALUES TO BE PRINTED ON ONE LINE, MUST C BE DIMENSIONED ACCORDINGLY. C C INPUT PARAMETERS - C C A - THE START OF THE INTEGER ARRAY TO BE PRINTED C C NITEMS - THE NUMBER OF ITEMS TO BE PRINTED C C IOUT - THE OUTPUT UNIT FOR PRINTING C C MCOL - THE NUMBER OF SPACES ACROSS THE LINE C C W - THE WIDTH OF THE PRINTED VALUE (IW) C C C ERROR STATES - C C 1 - NITEMS .LE. ZERO C C 2 - W .GT. MCOL C INTEGER NITEMS, IOUT, MCOL, W INTEGER A(NITEMS) C INTEGER MAX0, MIN0, WW C/6S C INTEGER IFMT1(20), IFMT1C(20), IFMT2(14), IFMT2C(14), BLANK, STAR C EQUIVALENCE (IFMT1(1),IFMT1C(1)), (IFMT2(1),IFMT2C(1)) C/7S CHARACTER*1 IFMT1(20), IFMT2(14), BLANK, STAR CHARACTER*20 IFMT1C CHARACTER*14 IFMT2C EQUIVALENCE (IFMT1(1),IFMT1C), (IFMT2(1),IFMT2C) C/ INTEGER INDW, NCOL, COUNT, I, J, K, ILINE, ILAST LOGICAL DUP INTEGER LINE(40), LAST(40) C C/6S C DATA BLANK/1H /, STAR/1H*/, INDW/7/ C/7S DATA BLANK/' '/, STAR/'*'/, INDW/7/ C/ C C IFMT1 IS FOR THE ASTERISK LINES, IFMT2 FOR THE DATA LINES C C/6S C DATA IFMT1( 1) /1H(/, IFMT2( 1) /1H(/ C DATA IFMT1( 2) /1H1/, IFMT2( 2) /1H1/ C DATA IFMT1( 3) /1HA/, IFMT2( 3) /1HA/ C DATA IFMT1( 4) /1H1/, IFMT2( 4) /1H1/ C DATA IFMT1( 5) /1H,/, IFMT2( 5) /1H,/ C DATA IFMT1( 6) /1H5/, IFMT2( 6) /1HI/ C DATA IFMT1( 7) /1HX/, IFMT2( 7) /1H7/ C DATA IFMT1( 8) /1H,/, IFMT2( 8) /1H,/ C DATA IFMT1( 9) /1H2/, IFMT2( 9) /1H / C DATA IFMT1(10) /1HA/, IFMT2(10) /1H / C DATA IFMT1(11) /1H1/, IFMT2(11) /1HI/ C DATA IFMT1(12) /1H,/, IFMT2(12) /1H / C DATA IFMT1(13) /1H /, IFMT2(13) /1H / C DATA IFMT1(14) /1H /, IFMT2(14) /1H)/ C DATA IFMT1(15) /1HX/ C DATA IFMT1(16) /1H,/ C DATA IFMT1(17) /1H2/ C DATA IFMT1(18) /1HA/ C DATA IFMT1(19) /1H1/ C DATA IFMT1(20) /1H)/ C/7S DATA IFMT1( 1) /'('/, IFMT2( 1) /'('/ DATA IFMT1( 2) /'1'/, IFMT2( 2) /'1'/ DATA IFMT1( 3) /'A'/, IFMT2( 3) /'A'/ DATA IFMT1( 4) /'1'/, IFMT2( 4) /'1'/ DATA IFMT1( 5) /','/, IFMT2( 5) /','/ DATA IFMT1( 6) /'5'/, IFMT2( 6) /'I'/ DATA IFMT1( 7) /'X'/, IFMT2( 7) /'7'/ DATA IFMT1( 8) /','/, IFMT2( 8) /','/ DATA IFMT1( 9) /'2'/, IFMT2( 9) /' '/ DATA IFMT1(10) /'A'/, IFMT2(10) /' '/ DATA IFMT1(11) /'1'/, IFMT2(11) /'I'/ DATA IFMT1(12) /','/, IFMT2(12) /' '/ DATA IFMT1(13) /' '/, IFMT2(13) /' '/ DATA IFMT1(14) /' '/, IFMT2(14) /')'/ DATA IFMT1(15) /'X'/ DATA IFMT1(16) /','/ DATA IFMT1(17) /'2'/ DATA IFMT1(18) /'A'/ DATA IFMT1(19) /'1'/ DATA IFMT1(20) /')'/ C/ C C/6S C IF (NITEMS .LE. 0) CALL C 1 SETERR(27H APRNTI - NITEMS .LE. ZERO, 27, 1, 2) C/7S IF (NITEMS .LE. 0) CALL 1 SETERR(' APRNTI - NITEMS .LE. ZERO', 27, 1, 2) C/ C C/6S C IF (W .GT. MCOL) CALL C 1 SETERR(22H APRNTI - W .GT. MCOL, 22, 2, 2) C/7S IF (W .GT. MCOL) CALL 1 SETERR(' APRNTI - W .GT. MCOL', 22, 2, 2) C/ C C COMPUTE THE FORMATS. C WW = MIN0(99, MAX0(W, 2)) CALL S88FMT(2, WW, IFMT2(12)) NCOL = MAX0(1, MIN0(99, (MIN0(MCOL,160) - INDW)/WW)) CALL S88FMT(2, NCOL, IFMT2(9)) WW = WW-2 CALL S88FMT(2, WW, IFMT1(13)) C C THE ASTERISKS ARE POSITIONED RIGHT-ADJUSTED IN THE W-WIDTH SPACE. CALL S88FMT(2, WW, IFMT1(13)) C C I COUNTS THE NUMBER OF ITEMS TO BE PRINTED, C J COUNTS THE NUMBER ON A GIVEN LINE, C COUNT COUNTS THE NUMBER OF DUPLICATE LINES. C 10 I = 1 J = 0 COUNT = 0 C C THE LOGICAL OF THE FOLLOWING IS ROUGHLY THIS - C IF THERE ARE STILL MORE ITEMS TO BE PRINTED, A LINE- C FULL IS PUT INTO THE ARRAY, LINE. C WHENEVER A LINE IS PRINTED OUT, IT IS ALSO STUFFED INTO C THE ARRAY, LAST, TO COMPARE WITH THE NEXT ONE COMING IN C TO CHECK FOR REPEAT OR DUPLICATED LINES. C ALSO WHENEVER A LINE IS WRITTEN OUT, THE DUPLICATION C COUNTER, COUNT, IS SET TO ONE. C THE ONLY MILDLY TRICKY PART IS TO NOTE THAT COUNT HAS TO C GO TO 3 BEFORE A LINE OF ASTERISKS IS PRINTED BECAUSE C OF COURSE NO SUCH LINE IS PRINTED FOR JUST A PAIR OF C DUPLICATE LINES. C C ILINE IS PRINTED AS THE INDEX OF THE FIRST ARRAY ELEMENT C IN A LINE. C 20 IF (I .GT. NITEMS) GO TO 90 J = J+1 LINE(J) = A(I) IF (J .EQ. 1) ILINE = I IF (J .LT. NCOL .AND. I .LT. NITEMS) GO TO 80 IF (COUNT .EQ. 0) GO TO 50 DUP = .TRUE. DO 30 K=1,NCOL 30 IF (LAST(K) .NE. LINE(K)) DUP = .FALSE. IF (I .EQ. NITEMS .AND. J .LT. NCOL) DUP = .FALSE. IF (.NOT. DUP .AND. COUNT .EQ. 1) GO TO 50 IF (.NOT. DUP) GO TO 40 COUNT = COUNT+1 IF (COUNT .EQ. 3) WRITE(IOUT, IFMT1C) BLANK, 1 STAR, STAR, STAR, STAR IF (I .EQ. NITEMS) GO TO 50 GO TO 70 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(K), K=1,NCOL) 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(K), K=1,J) COUNT = 1 DO 60 K=1,NCOL 60 LAST(K) = LINE(K) 70 ILAST = ILINE J = 0 80 I = I+1 GO TO 20 90 RETURN END PyBDSF-1.10.1/src/port3/aprntl.f000066400000000000000000000132171420247104600161320ustar00rootroot00000000000000 SUBROUTINE APRNTL(A, NITEMS, IOUT, MCOL) C C THIS SUBROUTINE PRINTS OUT NITEMS FROM THE LOGICAL ARRAY, A, ON C OUTPUT UNIT IOUT, USING A MAXIMUM OF MCOL PRINT SPACES. C THE T OR F VALUES ARE PRINTED RIGHT-ADJUSTED IN A FIELD OF WIDTH 4. C C DUPLICATE LINES ARE NOT ALL PRINTED, BUT ARE INDICATED BY ASTERISKS. C C WRITTEN BY DAN WARNER, REVISED BY PHYL FOX, OCTOBER 21, 1982. C C THE LINE WIDTH IS COMPUTED AS THE MINIMUM OF THE INPUT MCOL AND 160. C IF THE LINE WIDTH IS TO BE INCREASED ABOVE 160, THE BUFFERS LINE() C AND LAST(), WHICH THE VALUES TO BE PRINTED ON ONE LINE, MUST C BE DIMENSIONED ACCORDINGLY. C C INPUT PARAMETERS - C C A - THE START OF THE LOGICAL ARRAY TO BE PRINTED C C NITEMS - THE NUMBER OF ITEMS TO BE PRINTED C C IOUT - THE OUTPUT UNIT FOR PRINTING C C MCOL - THE NUMBER OF SPACES ACROSS THE LINE C C C ERROR STATES - C C 1 - NITEMS .LE. ZERO C INTEGER NITEMS, IOUT, MCOL LOGICAL A(NITEMS) C INTEGER MAX0, MIN0 C/6S C INTEGER IFMT1(20), IFMT1C(20), IFMT2(19), IFMT2C(19) C EQUIVALENCE (IFMT1(1),IFMT1C(1)), (IFMT2(1),IFMT2C(1)) C INTEGER BLANK, FCHAR, STAR, TCHAR C/7S CHARACTER*1 IFMT1(20), IFMT2(19), BLANK, FCHAR, STAR, TCHAR CHARACTER*20 IFMT1C CHARACTER*19 IFMT2C EQUIVALENCE (IFMT1(1),IFMT1C), (IFMT2(1),IFMT2C) C/ INTEGER INDW, NCOL, COUNT, I, J, K, ILINE, ILAST LOGICAL DUP C/6S C INTEGER LINE(40), LAST(40) C DATA BLANK/1H /, STAR/1H*/, TCHAR/1HT/, FCHAR/1HF/, INDW/7/ C/7S CHARACTER*1 LINE(40), LAST(40) DATA BLANK/' '/, STAR/'*'/, TCHAR/'T'/, FCHAR/'F'/, INDW/7/ C/ C C C IFMT1 IS FOR THE ASTERISK LINES, IFMT2 FOR THE DATA LINES C C/6S C DATA IFMT1( 1) /1H(/, IFMT2( 1) /1H(/ C DATA IFMT1( 2) /1H1/, IFMT2( 2) /1H1/ C DATA IFMT1( 3) /1HA/, IFMT2( 3) /1HA/ C DATA IFMT1( 4) /1H1/, IFMT2( 4) /1H1/ C DATA IFMT1( 5) /1H,/, IFMT2( 5) /1H,/ C DATA IFMT1( 6) /1H5/, IFMT2( 6) /1HI/ C DATA IFMT1( 7) /1HX/, IFMT2( 7) /1H7/ C DATA IFMT1( 8) /1H,/, IFMT2( 8) /1H,/ C DATA IFMT1( 9) /1H2/, IFMT2( 9) /1H / C DATA IFMT1(10) /1HA/, IFMT2(10) /1H / C DATA IFMT1(11) /1H1/, IFMT2(11) /1H(/ C DATA IFMT1(12) /1H,/, IFMT2(12) /1H3/ C DATA IFMT1(13) /1H /, IFMT2(13) /1HX/ C DATA IFMT1(14) /1H2/, IFMT2(14) /1H,/ C DATA IFMT1(15) /1HX/, IFMT2(15) /1H1/ C DATA IFMT1(16) /1H,/, IFMT2(16) /1HA/ C DATA IFMT1(17) /1H2/, IFMT2(17) /1H1/ C DATA IFMT1(18) /1HA/, IFMT2(18) /1H)/ C DATA IFMT1(19) /1H1/, IFMT2(19) /1H)/ C DATA IFMT1(20) /1H)/ C/7S DATA IFMT1( 1) /'('/, IFMT2( 1) /'('/ DATA IFMT1( 2) /'1'/, IFMT2( 2) /'1'/ DATA IFMT1( 3) /'A'/, IFMT2( 3) /'A'/ DATA IFMT1( 4) /'1'/, IFMT2( 4) /'1'/ DATA IFMT1( 5) /','/, IFMT2( 5) /','/ DATA IFMT1( 6) /'5'/, IFMT2( 6) /'I'/ DATA IFMT1( 7) /'X'/, IFMT2( 7) /'7'/ DATA IFMT1( 8) /','/, IFMT2( 8) /','/ DATA IFMT1( 9) /'2'/, IFMT2( 9) /' '/ DATA IFMT1(10) /'A'/, IFMT2(10) /' '/ DATA IFMT1(11) /'1'/, IFMT2(11) /'('/ DATA IFMT1(12) /','/, IFMT2(12) /'3'/ DATA IFMT1(13) /' '/, IFMT2(13) /'X'/ DATA IFMT1(14) /'2'/, IFMT2(14) /','/ DATA IFMT1(15) /'X'/, IFMT2(15) /'1'/ DATA IFMT1(16) /','/, IFMT2(16) /'A'/ DATA IFMT1(17) /'2'/, IFMT2(17) /'1'/ DATA IFMT1(18) /'A'/, IFMT2(18) /')'/ DATA IFMT1(19) /'1'/, IFMT2(19) /')'/ DATA IFMT1(20) /')'/ C/ C C/6S C IF (NITEMS .LE. 0) CALL C 1 SETERR(27H APRNTL - NITEMS .LE. ZERO, 27, 1, 2) C/7S IF (NITEMS .LE. 0) CALL 1 SETERR(' APRNTL - NITEMS .LE. ZERO', 27, 1, 2) C/ C C COMPUTE THE NUMBER OF FIELDS OF 4 ACROSS A LINE. C NCOL = MAX0(1, MIN0(99, (MIN0(MCOL,160)-INDW)/4)) C C THE ASTERISKS ARE POSITIONED RIGHT-ADJUSTED IN THE 4-CHARACTER SPACE. CALL S88FMT(2, NCOL, IFMT2(9)) C C I COUNTS THE NUMBER OF ITEMS TO BE PRINTED, C J COUNTS THE NUMBER ON A GIVEN LINE, C COUNT COUNTS THE NUMBER OF DUPLICATE LINES. C 10 I = 1 J = 0 COUNT = 0 C C THE LOGICAL OF THE FOLLOWING IS ROUGHLY THIS - C IF THERE ARE STILL MORE ITEMS TO BE PRINTED, A LINE- C FULL IS PUT INTO THE ARRAY, LINE. C WHENEVER A LINE IS PRINTED OUT, IT IS ALSO STUFFED INTO C THE ARRAY, LAST, TO COMPARE WITH THE NEXT ONE COMING IN C TO CHECK FOR REPEAT OR DUPLICATED LINES. C ALSO WHENEVER A LINE IS WRITTEN OUT, THE DUPLICATION C COUNTER, COUNT, IS SET TO ONE. C THE ONLY MILDLY TRICKY PART IS TO NOTE THAT COUNT HAS TO C GO TO 3 BEFORE A LINE OF ASTERISKS IS PRINTED BECAUSE C OF COURSE NO SUCH LINE IS PRINTED FOR JUST A PAIR OF C DUPLICATE LINES. C C ILINE IS PRINTED AS THE INDEX OF THE FIRST ARRAY ELEMENT C IN A LINE. C 20 IF (I .GT. NITEMS) GO TO 90 J = J+1 LINE(J) = FCHAR IF ( A(I) ) LINE(J) = TCHAR IF (J .EQ. 1) ILINE = I IF (J .LT. NCOL .AND. I .LT. NITEMS) GO TO 80 IF (COUNT .EQ. 0) GO TO 50 DUP = .TRUE. DO 30 K=1,NCOL 30 IF (LAST(K) .NE. LINE(K)) DUP = .FALSE. IF (I .EQ. NITEMS .AND. J .LT. NCOL) DUP = .FALSE. IF (.NOT. DUP .AND. COUNT .EQ. 1) GO TO 50 IF (.NOT. DUP) GO TO 40 COUNT = COUNT+1 IF (COUNT .EQ. 3) WRITE(IOUT, IFMT1C) BLANK, 1 STAR, STAR, STAR, STAR IF (I .EQ. NITEMS) GO TO 50 GO TO 70 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(K), K=1,NCOL) 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(K), K=1,J) COUNT = 1 DO 60 K=1,NCOL 60 LAST(K) = LINE(K) 70 ILAST = ILINE J = 0 80 I = I+1 GO TO 20 90 RETURN END PyBDSF-1.10.1/src/port3/aprntr.f000066400000000000000000000156321420247104600161430ustar00rootroot00000000000000 SUBROUTINE APRNTR(A, NITEMS, IOUT, MCOL, W, D) C C THIS SUBROUTINE PRINTS OUT NITEMS FROM THE REAL ARRAY, A, ON C OUTPUT UNIT IOUT, USING A MAXIMUM OF MCOL PRINT SPACES. C THE OUTPUT FORMAT IS 1PEW.D. C THE PROGRAM PUTS AS MANY VALUES ON A LINE AS POSSIBLE. C W SHOULD BE INPUT AS THE ACTUAL WIDTH +1 FOR A SPACE BETWEEN VALUES. C C DUPLICATE LINES ARE NOT ALL PRINTED, BUT ARE INDICATED BY ASTERISKS. C C WRITTEN BY DAN WARNER, REVISED BY PHYL FOX, OCTOBER 21, 1982. C C THE LINE WIDTH IS COMPUTED AS THE MINIMUM OF THE INPUT MCOL AND 160. C IF THE LINE WIDTH IS TO BE INCREASED ABOVE 160, THE BUFFERS LINE() C AND LAST(), WHICH THE VALUES TO BE PRINTED ON ONE LINE, MUST C BE DIMENSIONED ACCORDINGLY. C C INPUT PARAMETERS - C C A - THE START OF THE REAL ARRAY TO BE PRINTED C C NITEMS - THE NUMBER OF ITEMS TO BE PRINTED C C IOUT - THE OUTPUT UNIT FOR PRINTING C C MCOL - THE NUMBER OF SPACES ACROSS THE LINE C C W - THE WIDTH OF THE PRINTED VALUE (1PEW.D) C C D - THE NUMBER OF DIGITS AFTER THE DECIMAL POINT (1PEW.D) C C C ERROR STATES - C C 1 - NITEMS .LE. ZERO C C 2 - W .GT. MCOL C C 3 - D .LT. ZERO C C 4 - W .LT. D+6 C INTEGER NITEMS, IOUT, MCOL, W, D REAL A(NITEMS) C INTEGER MAX0, MIN0, WW, DD, EMIN, EMAX, 1 EXPENT, I1MACH, ICEIL, IABS, I10WID C/6S C INTEGER IFMT1(20), IFMT1C(20), IFMT2(18), IFMT2C(18), BLANK, STAR C EQUIVALENCE (IFMT1(1),IFMT1C(1)), (IFMT2(1),IFMT2C(1)) C/7S CHARACTER*1 IFMT1(20), IFMT2(18), BLANK, STAR CHARACTER*20 IFMT1C CHARACTER*18 IFMT2C EQUIVALENCE (IFMT1(1),IFMT1C), (IFMT2(1),IFMT2C) C/ INTEGER INDW, NCOL, COUNT, I, J, K, ILINE, ILAST LOGICAL DUP REAL LINE(18), LAST(18), LOGETA C C/6S C DATA BLANK/1H /, STAR/1H*/, INDW/7/, EXPENT/0/ C/7S DATA BLANK/' '/, STAR/'*'/, INDW/7/, EXPENT/0/ C/ C C IFMT1 IS FOR THE ASTERISK LINES, IFMT2 FOR THE DATA LINES C C/6S C DATA IFMT1( 1) /1H(/, IFMT2( 1) /1H(/ C DATA IFMT1( 2) /1H1/, IFMT2( 2) /1H1/ C DATA IFMT1( 3) /1HA/, IFMT2( 3) /1HA/ C DATA IFMT1( 4) /1H1/, IFMT2( 4) /1H1/ C DATA IFMT1( 5) /1H,/, IFMT2( 5) /1H,/ C DATA IFMT1( 6) /1H5/, IFMT2( 6) /1HI/ C DATA IFMT1( 7) /1HX/, IFMT2( 7) /1H7/ C DATA IFMT1( 8) /1H,/, IFMT2( 8) /1H,/ C DATA IFMT1( 9) /1H2/, IFMT2( 9) /1H1/ C DATA IFMT1(10) /1HA/, IFMT2(10) /1HP/ C DATA IFMT1(11) /1H1/, IFMT2(11) /1H / C DATA IFMT1(12) /1H,/, IFMT2(12) /1HE/ C DATA IFMT1(13) /1H /, IFMT2(13) /1H / C DATA IFMT1(14) /1H /, IFMT2(14) /1H / C DATA IFMT1(15) /1HX/, IFMT2(15) /1H./ C DATA IFMT1(16) /1H,/, IFMT2(16) /1H / C DATA IFMT1(17) /1H2/, IFMT2(17) /1H / C DATA IFMT1(18) /1HA/, IFMT2(18) /1H)/ C DATA IFMT1(19) /1H1/ C DATA IFMT1(20) /1H)/ C/7S DATA IFMT1( 1) /'('/, IFMT2( 1) /'('/ DATA IFMT1( 2) /'1'/, IFMT2( 2) /'1'/ DATA IFMT1( 3) /'A'/, IFMT2( 3) /'A'/ DATA IFMT1( 4) /'1'/, IFMT2( 4) /'1'/ DATA IFMT1( 5) /','/, IFMT2( 5) /','/ DATA IFMT1( 6) /'5'/, IFMT2( 6) /'I'/ DATA IFMT1( 7) /'X'/, IFMT2( 7) /'7'/ DATA IFMT1( 8) /','/, IFMT2( 8) /','/ DATA IFMT1( 9) /'2'/, IFMT2( 9) /'1'/ DATA IFMT1(10) /'A'/, IFMT2(10) /'P'/ DATA IFMT1(11) /'1'/, IFMT2(11) /' '/ DATA IFMT1(12) /','/, IFMT2(12) /'E'/ DATA IFMT1(13) /' '/, IFMT2(13) /' '/ DATA IFMT1(14) /' '/, IFMT2(14) /' '/ DATA IFMT1(15) /'X'/, IFMT2(15) /'.'/ DATA IFMT1(16) /','/, IFMT2(16) /' '/ DATA IFMT1(17) /'2'/, IFMT2(17) /' '/ DATA IFMT1(18) /'A'/, IFMT2(18) /')'/ DATA IFMT1(19) /'1'/ DATA IFMT1(20) /')'/ C/ C C/6S C IF (NITEMS .LE. 0) CALL C 1 SETERR(27H APRNTR - NITEMS .LE. ZERO, 27, 1, 2) C/7S IF (NITEMS .LE. 0) CALL 1 SETERR(' APRNTR - NITEMS .LE. ZERO', 27, 1, 2) C/ C C/6S C IF (W .GT. MCOL) CALL C 1 SETERR(22H APRNTR - W .GT. MCOL, 22, 2, 2) C/7S IF (W .GT. MCOL) CALL 1 SETERR(' APRNTR - W .GT. MCOL', 22, 2, 2) C/ C C/6S C IF (D .LT. 0) CALL C 1 SETERR(22H APRNTR - D .LT. ZERO, 22, 3, 2) C/7S IF (D .LT. 0) CALL 1 SETERR(' APRNTR - D .LT. ZERO', 22, 3, 2) C/ C C/6S C IF (W .LT. D+6) CALL C 1 SETERR(21H APRNTR - W .LT. D+6, 21, 4, 2) C/7S IF (W .LT. D+6) CALL 1 SETERR(' APRNTR - W .LT. D+6', 21, 4, 2) C/ C C C EXPENT IS USED AS A FIRST-TIME SWITCH TO SIGNAL IF THE C MACHINE-VALUE CONSTANTS HAVE BEEN COMPUTED. C IF (EXPENT .GT. 0) GO TO 10 LOGETA = ALOG10(FLOAT(I1MACH(10))) EMIN = ICEIL(LOGETA*FLOAT(IABS(I1MACH(12)-1))) EMAX = ICEIL(LOGETA*FLOAT(I1MACH(13))) EXPENT = I10WID(MAX0(EMIN, EMAX)) C C COMPUTE THE FORMATS. C 10 WW = MIN0(99, MAX0(W, 5+EXPENT)) CALL S88FMT(2, WW, IFMT2(13)) DD = MIN0(D, (WW-(5+EXPENT))) CALL S88FMT(2, DD, IFMT2(16)) C C NCOL IS THE NUMBER OF VALUES TO BE PRINTED ACROSS THE LINE. C NCOL = MAX0(1, MIN0(9, (MIN0(MCOL,160)-INDW)/WW)) CALL S88FMT(1, NCOL, IFMT2(11)) WW = WW-2 C C THE ASTERISKS ARE POSITIONED RIGHT-ADJUSTED IN THE W-WIDTH SPACE. CALL S88FMT(2, WW, IFMT1(13)) C C I COUNTS THE NUMBER OF ITEMS TO BE PRINTED, C J COUNTS THE NUMBER ON A GIVEN LINE, C COUNT COUNTS THE NUMBER OF DUPLICATE LINES. C I = 1 J = 0 COUNT = 0 C C THE LOGICAL OF THE FOLLOWING IS ROUGHLY THIS - C IF THERE ARE STILL MORE ITEMS TO BE PRINTED, A LINE- C FULL IS PUT INTO THE ARRAY, LINE. C WHENEVER A LINE IS PRINTED OUT, IT IS ALSO STUFFED INTO C THE ARRAY, LAST, TO COMPARE WITH THE NEXT ONE COMING IN C TO CHECK FOR REPEAT OR DUPLICATED LINES. C ALSO WHENEVER A LINE IS WRITTEN OUT, THE DUPLICATION C COUNTER, COUNT, IS SET TO ONE. C THE ONLY MILDLY TRICKY PART IS TO NOTE THAT COUNT HAS TO C GO TO 3 BEFORE A LINE OF ASTERISKS IS PRINTED BECAUSE C OF COURSE NO SUCH LINE IS PRINTED FOR JUST A PAIR OF C DUPLICATE LINES. C C ILINE IS PRINTED AS THE INDEX OF THE FIRST ARRAY ELEMENT C IN A LINE. C 20 IF (I .GT. NITEMS) GO TO 90 J = J+1 LINE(J) = A(I) IF (J .EQ. 1) ILINE = I IF (J .LT. NCOL .AND. I .LT. NITEMS) GO TO 80 IF (COUNT .EQ. 0) GO TO 50 DUP = .TRUE. DO 30 K=1,NCOL 30 IF (LAST(K) .NE. LINE(K)) DUP = .FALSE. IF (I .EQ. NITEMS .AND. J .LT. NCOL) DUP = .FALSE. IF (.NOT. DUP .AND. COUNT .EQ. 1) GO TO 50 IF (.NOT. DUP) GO TO 40 COUNT = COUNT+1 IF (COUNT .EQ. 3) WRITE(IOUT, IFMT1C) BLANK, 1 STAR, STAR, STAR, STAR IF (I .EQ. NITEMS) GO TO 50 GO TO 70 40 WRITE(IOUT, IFMT2C) BLANK, ILAST, (LAST(K), K=1,NCOL) 50 WRITE(IOUT, IFMT2C) BLANK, ILINE, (LINE(K), K=1,J) COUNT = 1 DO 60 K=1,NCOL 60 LAST(K) = LINE(K) 70 ILAST = ILINE J = 0 80 I = I+1 GO TO 20 90 RETURN END PyBDSF-1.10.1/src/port3/c6lcf.f000066400000000000000000000002231420247104600156200ustar00rootroot00000000000000 SUBROUTINE C6LCF(P,X,NF,F,IU,UR,UF) INTEGER P,IU REAL X(P),F,UR EXTERNAL UF CALL UF(P,X,NF,F) RETURN END PyBDSF-1.10.1/src/port3/c7vfn.f000066400000000000000000000024311420247104600156510ustar00rootroot00000000000000 SUBROUTINE C7VFN(IV, L, LH, LIV, LV, N, P, V) C C *** FINISH COVARIANCE COMPUTATION FOR RN2G, RNSG *** C INTEGER LH, LIV, LV, N, P INTEGER IV(LIV) REAL L(LH), V(LV) C EXTERNAL L7NVR, L7TSQ, V7SCL C C *** LOCAL VARIABLES *** C INTEGER COV, I REAL HALF C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, COVMAT, F, FDH, H, MODE, RDREQ, REGD C C/6 C DATA CNVCOD/55/, COVMAT/26/, F/10/, FDH/74/, H/56/, MODE/35/, C 1 RDREQ/57/, REGD/67/ C/7 PARAMETER (CNVCOD=55, COVMAT=26, F=10, FDH=74, H=56, MODE=35, 1 RDREQ=57, REGD=67) C/ DATA HALF/0.5E+0/ C C *** BODY *** C IV(1) = IV(CNVCOD) I = IV(MODE) - P IV(MODE) = 0 IV(CNVCOD) = 0 IF (IV(FDH) .LE. 0) GO TO 999 IF ((I-2)**2 .EQ. 1) IV(REGD) = 1 IF (MOD(IV(RDREQ),2) .NE. 1) GO TO 999 C C *** FINISH COMPUTING COVARIANCE MATRIX = INVERSE OF F.D. HESSIAN. C COV = IABS(IV(H)) IV(FDH) = 0 C IF (IV(COVMAT) .NE. 0) GO TO 999 IF (I .GE. 2) GO TO 10 CALL L7NVR(P, V(COV), L) CALL L7TSQ(P, V(COV), V(COV)) C 10 CALL V7SCL(LH, V(COV), V(F)/(HALF * FLOAT(MAX0(1,N-P))), V(COV)) IV(COVMAT) = COV C 999 RETURN C *** LAST LINE OF C7VFN FOLLOWS *** END PyBDSF-1.10.1/src/port3/call.f000066400000000000000000000000311420247104600155330ustar00rootroot00000000000000 call n2f end PyBDSF-1.10.1/src/port3/cddiv.f000066400000000000000000000016371420247104600157260ustar00rootroot00000000000000 SUBROUTINE CDDIV(A,B,C) DOUBLE PRECISION A(2),B(2),C(2),G,H,T C C THIS ROUTINE DOES COMPLEX DOUBLE PRECISION C DIVISION (C=A/B), FOLLOWING THE METHOD C GIVEN IN ALGOL ON PAGES 357 AND 358 OF C WILKINSON AND REINSCHS BOOK- C HANDBOOK FOR AUTOMATIC COMPUTATION C SPRINGER-VERLAG 1971 C C THIS VERSION HAS BEEN CHANGED SLIGHTLY TO PREVENT C INPUTS A AND B FROM BEING DESTROYED. C WRITTEN MARCH 20, 1975 BY P. FOX C C FOR ACCURACY THE COMPUTATION IS DONE DIFFERENTLY C DEPENDING ON WHETHER THE REAL OR IMAGINARY PART OF C B IS LARGER C IF ( DABS(B(1)) .GT. DABS(B(2)) ) GO TO 10 H = B(1)/B(2) G = H*B(1) + B(2) T = A(1) C(1) = (H * T + A(2))/G C(2) = (H * A(2) - T)/G RETURN C C IF THE REAL PART OF B IS LARGER THAN THE IMAGINARY- 10 H = B(2)/B(1) G = H*B(2) + B(1) T = A(1) C(1) = ( T + H * A(2))/G C(2) = (A(2) - H * T)/G RETURN END PyBDSF-1.10.1/src/port3/cmake_install.cmake000066400000000000000000000033351420247104600202730ustar00rootroot00000000000000# Install script for directory: /Users/mohan/lofarsoft/src/pybdsm/implement/port3 # Set the install prefix IF(NOT DEFINED CMAKE_INSTALL_PREFIX) SET(CMAKE_INSTALL_PREFIX "/usr/local") ENDIF(NOT DEFINED CMAKE_INSTALL_PREFIX) STRING(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") # Set the install configuration name. IF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) IF(BUILD_TYPE) STRING(REGEX REPLACE "^[^A-Za-z0-9_]+" "" CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") ELSE(BUILD_TYPE) SET(CMAKE_INSTALL_CONFIG_NAME "") ENDIF(BUILD_TYPE) MESSAGE(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") ENDIF(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) # Set the component getting installed. IF(NOT CMAKE_INSTALL_COMPONENT) IF(COMPONENT) MESSAGE(STATUS "Install component: \"${COMPONENT}\"") SET(CMAKE_INSTALL_COMPONENT "${COMPONENT}") ELSE(COMPONENT) SET(CMAKE_INSTALL_COMPONENT) ENDIF(COMPONENT) ENDIF(NOT CMAKE_INSTALL_COMPONENT) IF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") FILE(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE SHARED_LIBRARY FILES "/Users/mohan/lofarsoft/src/pybdsm/implement/port3/port3.so") IF(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/port3.so") EXECUTE_PROCESS(COMMAND "/usr/bin/install_name_tool" -id "port3.so" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/port3.so") IF(CMAKE_INSTALL_DO_STRIP) EXECUTE_PROCESS(COMMAND "/usr/bin/strip" "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/port3.so") ENDIF(CMAKE_INSTALL_DO_STRIP) ENDIF(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/port3.so") ENDIF(NOT CMAKE_INSTALL_COMPONENT OR "${CMAKE_INSTALL_COMPONENT}" STREQUAL "Unspecified") PyBDSF-1.10.1/src/port3/d0xtrp.f000066400000000000000000000030001420247104600160400ustar00rootroot00000000000000 SUBROUTINE D0XTRP(TM,M,NVAR,NG,KMAX,XPOLY,T,ERROR,EBEST,RHG,EMAG, 1 ESAVE) C DOUBLE PRECISION TM(NVAR),NG(M),T(NVAR,KMAX),RHG(1) C DOUBLE PRECISION RHG(MIN(M-1,KMAX)) REAL ERROR(NVAR,1),EBEST(NVAR),EMAG(1) C REAL ERROR(NVAR,MIN(M-1,KMAX)),EMAG(MIN(M-1,KMAX)) LOGICAL XPOLY,ESAVE C DOUBLE PRECISION U,V,TI,TV,TEMP REAL ERR C IF (M.GT.1) GO TO 20 C C ... INITIALIZE T. C DO 10 I=1,NVAR 10 T(I,1)=TM(I) C GO TO 80 C 20 MR=MIN0(M-1,KMAX) C DO 30 J=1,MR MMJ=M-J RHG(J)=NG(M)/NG(MMJ) EMAG(J)=1.0D0+1.0D0/(RHG(J)-1.0D0) IF (XPOLY) RHG(J)=RHG(J)-1.0D0 30 CONTINUE C DO 70 I=1,NVAR C V=0.0D0 U=T(I,1) TI=TM(I) T(I,1)=TI C DO 60 J=1,MR C C ......... OBTAIN SIGNED ERROR ESTIMATE. C ERR=(T(I,J)-U)*EMAG(J) IF (ESAVE) ERROR(I,J)=ERR ERR=ABS(ERR) IF (J.EQ.1) EBEST(I)=ERR EBEST(I)=AMIN1(EBEST(I),ERR) IF (EBEST(I).EQ.ERR) JBEST=J C IF (J.EQ.KMAX) GO TO 60 C IF (XPOLY) GO TO 40 C C ......... RATIONAL EXTRAPOLATION. C TV=TI-V TEMP=RHG(J)*(U-V)-TV IF (TEMP.NE.0.0D0) TI=TI+(TI-U)*(TV/TEMP) V=U GO TO 50 C C ......... POLYNOMIAL EXTRAPOLATION. C 40 TI=TI+(TI-U)/RHG(J) C 50 U=T(I,J+1) T(I,J+1)=TI 60 CONTINUE C 70 TM(I)=T(I,JBEST) C 80 RETURN C END PyBDSF-1.10.1/src/port3/d1mach.f000066400000000000000000000167361420247104600160000ustar00rootroot00000000000000 DOUBLE PRECISION FUNCTION D1MACH(I) INTEGER I C C DOUBLE-PRECISION MACHINE CONSTANTS C D1MACH( 1) = B**(EMIN-1), THE SMALLEST POSITIVE MAGNITUDE. C D1MACH( 2) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE. C D1MACH( 3) = B**(-T), THE SMALLEST RELATIVE SPACING. C D1MACH( 4) = B**(1-T), THE LARGEST RELATIVE SPACING. C D1MACH( 5) = LOG10(B) C INTEGER SMALL(2) INTEGER LARGE(2) INTEGER RIGHT(2) INTEGER DIVER(2) INTEGER LOG10(2) INTEGER SC, CRAY1(38), J C ************************* C commented out by Usov. We don't have CRAY machines anyway :) C COMMON /D9MACH/ CRAY1 C ************************* SAVE SMALL, LARGE, RIGHT, DIVER, LOG10, SC DOUBLE PRECISION DMACH(5) EQUIVALENCE (DMACH(1),SMALL(1)) EQUIVALENCE (DMACH(2),LARGE(1)) EQUIVALENCE (DMACH(3),RIGHT(1)) EQUIVALENCE (DMACH(4),DIVER(1)) EQUIVALENCE (DMACH(5),LOG10(1)) C THIS VERSION ADAPTS AUTOMATICALLY TO MOST CURRENT MACHINES. C R1MACH CAN HANDLE AUTO-DOUBLE COMPILING, BUT THIS VERSION OF C D1MACH DOES NOT, BECAUSE WE DO NOT HAVE QUAD CONSTANTS FOR C MANY MACHINES YET. C TO COMPILE ON OLDER MACHINES, ADD A C IN COLUMN 1 C ON THE NEXT LINE DATA SC/0/ C AND REMOVE THE C FROM COLUMN 1 IN ONE OF THE SECTIONS BELOW. C CONSTANTS FOR EVEN OLDER MACHINES CAN BE OBTAINED BY C mail netlib@research.bell-labs.com C send old1mach from blas C PLEASE SEND CORRECTIONS TO dmg OR ehg@bell-labs.com. C C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES. C DATA SMALL(1),SMALL(2) / O402400000000, O000000000000 / C DATA LARGE(1),LARGE(2) / O376777777777, O777777777777 / C DATA RIGHT(1),RIGHT(2) / O604400000000, O000000000000 / C DATA DIVER(1),DIVER(2) / O606400000000, O000000000000 / C DATA LOG10(1),LOG10(2) / O776464202324, O117571775714 /, SC/987/ C C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING C 32-BIT INTEGERS. C DATA SMALL(1),SMALL(2) / 8388608, 0 / C DATA LARGE(1),LARGE(2) / 2147483647, -1 / C DATA RIGHT(1),RIGHT(2) / 612368384, 0 / C DATA DIVER(1),DIVER(2) / 620756992, 0 / C DATA LOG10(1),LOG10(2) / 1067065498, -2063872008 /, SC/987/ C C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. C DATA SMALL(1),SMALL(2) / O000040000000, O000000000000 / C DATA LARGE(1),LARGE(2) / O377777777777, O777777777777 / C DATA RIGHT(1),RIGHT(2) / O170540000000, O000000000000 / C DATA DIVER(1),DIVER(2) / O170640000000, O000000000000 / C DATA LOG10(1),LOG10(2) / O177746420232, O411757177572 /, SC/987/ C C ON FIRST CALL, IF NO DATA UNCOMMENTED, TEST MACHINE TYPES. IF (SC .NE. 987) THEN DMACH(1) = 1.D13 IF ( SMALL(1) .EQ. 1117925532 * .AND. SMALL(2) .EQ. -448790528) THEN * *** IEEE BIG ENDIAN *** SMALL(1) = 1048576 SMALL(2) = 0 LARGE(1) = 2146435071 LARGE(2) = -1 RIGHT(1) = 1017118720 RIGHT(2) = 0 DIVER(1) = 1018167296 DIVER(2) = 0 LOG10(1) = 1070810131 LOG10(2) = 1352628735 ELSE IF ( SMALL(2) .EQ. 1117925532 * .AND. SMALL(1) .EQ. -448790528) THEN * *** IEEE LITTLE ENDIAN *** SMALL(2) = 1048576 SMALL(1) = 0 LARGE(2) = 2146435071 LARGE(1) = -1 RIGHT(2) = 1017118720 RIGHT(1) = 0 DIVER(2) = 1018167296 DIVER(1) = 0 LOG10(2) = 1070810131 LOG10(1) = 1352628735 ELSE IF ( SMALL(1) .EQ. -2065213935 * .AND. SMALL(2) .EQ. 10752) THEN * *** VAX WITH D_FLOATING *** SMALL(1) = 128 SMALL(2) = 0 LARGE(1) = -32769 LARGE(2) = -1 RIGHT(1) = 9344 RIGHT(2) = 0 DIVER(1) = 9472 DIVER(2) = 0 LOG10(1) = 546979738 LOG10(2) = -805796613 ELSE IF ( SMALL(1) .EQ. 1267827943 * .AND. SMALL(2) .EQ. 704643072) THEN * *** IBM MAINFRAME *** SMALL(1) = 1048576 SMALL(2) = 0 LARGE(1) = 2147483647 LARGE(2) = -1 RIGHT(1) = 856686592 RIGHT(2) = 0 DIVER(1) = 873463808 DIVER(2) = 0 LOG10(1) = 1091781651 LOG10(2) = 1352628735 ELSE IF ( SMALL(1) .EQ. 1120022684 * .AND. SMALL(2) .EQ. -448790528) THEN * *** CONVEX C-1 *** SMALL(1) = 1048576 SMALL(2) = 0 LARGE(1) = 2147483647 LARGE(2) = -1 RIGHT(1) = 1019215872 RIGHT(2) = 0 DIVER(1) = 1020264448 DIVER(2) = 0 LOG10(1) = 1072907283 LOG10(2) = 1352628735 ELSE IF ( SMALL(1) .EQ. 815547074 * .AND. SMALL(2) .EQ. 58688) THEN * *** VAX G-FLOATING *** SMALL(1) = 16 SMALL(2) = 0 LARGE(1) = -32769 LARGE(2) = -1 RIGHT(1) = 15552 RIGHT(2) = 0 DIVER(1) = 15568 DIVER(2) = 0 LOG10(1) = 1142112243 LOG10(2) = 2046775455 ELSE DMACH(2) = 1.D27 + 1 DMACH(3) = 1.D27 LARGE(2) = LARGE(2) - RIGHT(2) IF (LARGE(2) .EQ. 64 .AND. SMALL(2) .EQ. 0) THEN CRAY1(1) = 67291416 DO 10 J = 1, 20 CRAY1(J+1) = CRAY1(J) + CRAY1(J) 10 CONTINUE CRAY1(22) = CRAY1(21) + 321322 DO 20 J = 22, 37 CRAY1(J+1) = CRAY1(J) + CRAY1(J) 20 CONTINUE IF (CRAY1(38) .EQ. SMALL(1)) THEN * *** CRAY *** CALL I1MCRY(SMALL(1), J, 8285, 8388608, 0) SMALL(2) = 0 CALL I1MCRY(LARGE(1), J, 24574, 16777215, 16777215) CALL I1MCRY(LARGE(2), J, 0, 16777215, 16777214) CALL I1MCRY(RIGHT(1), J, 16291, 8388608, 0) RIGHT(2) = 0 CALL I1MCRY(DIVER(1), J, 16292, 8388608, 0) DIVER(2) = 0 CALL I1MCRY(LOG10(1), J, 16383, 10100890, 8715215) CALL I1MCRY(LOG10(2), J, 0, 16226447, 9001388) ELSE WRITE(*,9000) STOP 779 END IF ELSE WRITE(*,9000) STOP 779 END IF END IF SC = 987 END IF * SANITY CHECK IF (DMACH(4) .GE. 1.0D0) STOP 778 IF (I .LT. 1 .OR. I .GT. 5) THEN WRITE(*,*) 'D1MACH(I): I =',I,' is out of bounds.' STOP END IF D1MACH = DMACH(I) RETURN 9000 FORMAT(/' Adjust D1MACH by uncommenting data statements'/ *' appropriate for your machine.') * /* Standard C source for D1MACH -- remove the * in column 1 */ *#include *#include *#include *double d1mach_(long *i) *{ * switch(*i){ * case 1: return DBL_MIN; * case 2: return DBL_MAX; * case 3: return DBL_EPSILON/FLT_RADIX; * case 4: return DBL_EPSILON; * case 5: return log10((double)FLT_RADIX); * } * fprintf(stderr, "invalid argument: d1mach(%ld)\n", *i); * exit(1); return 0; /* some compilers demand return values */ *} END SUBROUTINE I1MCRY(A, A1, B, C, D) **** SPECIAL COMPUTATION FOR OLD CRAY MACHINES **** INTEGER A, A1, B, C, D A1 = 16777216*B + C A = 16777216*A1 + D END PyBDSF-1.10.1/src/port3/d4sqr.f000066400000000000000000000015601420247104600156650ustar00rootroot00000000000000 SUBROUTINE D4SQR(K, M, N, Q, R, B, RHS) INTEGER M INTEGER N REAL Q(K, 1), R( 1), B(1), RHS(K) INTEGER I REAL BETA, ALPHA,U, X C C THIS SUBROUTINE UPDATES THE QR DECOMPOSTION WHENE A NEW C ROW CONTAINED IN B IS ADDED TO THE MATRIX C M=M+1 MM1=M-1 C C ZERO OUT ROW AND COLUMN OF Q MATRIX C Q(M,M)=1. IF(M.EQ.1)RETURN DO 10 II=1,MM1 Q(M,II)=0.0 Q(II,M)=0.0 10 CONTINUE X=RHS(M) IF (N.EQ.0) RETURN IS=1 DO 20 I=1,N CALL SROTG(R(IS), B(I), ALPHA, BETA) CALL SROT(M, Q(I, 1), K, Q(M, 1), K, ALPHA, BETA) U=RHS(I) RHS(I)=ALPHA*U+BETA*X X=-BETA*U+ALPHA*X IS=IS+I+1 IF (N-I.GE.1) 1 CALL SROT2(N-I,R(IS-1),I+1,B(I+1),-1,ALPHA,BETA) 20 CONTINUE RHS(M)=X RETURN END PyBDSF-1.10.1/src/port3/d7dgb.f000066400000000000000000000116261420247104600156230ustar00rootroot00000000000000 SUBROUTINE D7DGB(B, D, DIG, DST, G, IPIV, KA, L, LV, P, PC, 1 NWTST, STEP, TD, TG, V, W, X0) C C *** COMPUTE DOUBLE-DOGLEG STEP, SUBJECT TO SIMPLE BOUNDS ON X *** C INTEGER LV, KA, P, PC INTEGER IPIV(P) REAL B(2,P), D(P), DIG(P), DST(P), G(P), L(1), 1 NWTST(P), STEP(P), TD(P), TG(P), V(LV), W(P), 2 X0(P) C C DIMENSION L(P*(P+1)/2) C REAL D7TPR, R7MDC, V2NRM EXTERNAL D7DOG, D7TPR, I7SHFT, L7ITV, L7IVM, L7TVM, L7VML, 1 Q7RSH, R7MDC, V2NRM, V2AXY, V7CPY, V7IPR, V7SCP, 2 V7SHF, V7VMP C C *** LOCAL VARIABLES *** C INTEGER I, J, K, P1, P1M1 REAL DNWTST, GHINVG, GNORM, GNORM0, NRED, PRED, RAD, 1 T, T1, T2, TI, X0I, XI REAL HALF, MEPS2, ONE, TWO, ZERO C C *** V SUBSCRIPTS *** C INTEGER DGNORM, DST0, DSTNRM, GRDFAC, GTHG, GTSTEP, NREDUC, 1 NWTFAC, PREDUC, RADIUS, STPPAR C C/6 C DATA DGNORM/1/, DST0/3/, DSTNRM/2/, GRDFAC/45/, GTHG/44/, C 1 GTSTEP/4/, NREDUC/6/, NWTFAC/46/, PREDUC/7/, RADIUS/8/, C 2 STPPAR/5/ C/7 PARAMETER (DGNORM=1, DST0=3, DSTNRM=2, GRDFAC=45, GTHG=44, 1 GTSTEP=4, NREDUC=6, NWTFAC=46, PREDUC=7, RADIUS=8, 2 STPPAR=5) C/ C/6 C DATA HALF/0.5E+0/, ONE/1.E+0/, TWO/2.E+0/, ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, ONE=1.E+0, TWO=2.E+0, ZERO=0.E+0) SAVE MEPS2 C/ DATA MEPS2/0.E+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IF (MEPS2 .LE. ZERO) MEPS2 = TWO * R7MDC(3) GNORM0 = V(DGNORM) V(DSTNRM) = ZERO IF (KA .LT. 0) GO TO 10 DNWTST = V(DST0) NRED = V(NREDUC) 10 PRED = ZERO V(STPPAR) = ZERO RAD = V(RADIUS) IF (PC .GT. 0) GO TO 20 DNWTST = ZERO CALL V7SCP(P, STEP, ZERO) GO TO 140 C 20 P1 = PC CALL V7CPY(P, TD, D) CALL V7IPR(P, IPIV, TD) CALL V7SCP(PC, DST, ZERO) CALL V7CPY(P, TG, G) CALL V7IPR(P, IPIV, TG) C 30 CALL L7IVM(P1, NWTST, L, TG) GHINVG = D7TPR(P1, NWTST, NWTST) V(NREDUC) = HALF * GHINVG CALL L7ITV(P1, NWTST, L, NWTST) CALL V7VMP(P1, STEP, NWTST, TD, 1) V(DST0) = V2NRM(PC, STEP) IF (KA .GE. 0) GO TO 40 KA = 0 DNWTST = V(DST0) NRED = V(NREDUC) 40 V(RADIUS) = RAD - V(DSTNRM) IF (V(RADIUS) .LE. ZERO) GO TO 100 CALL V7VMP(P1, DIG, TG, TD, -1) GNORM = V2NRM(P1, DIG) IF (GNORM .LE. ZERO) GO TO 100 V(DGNORM) = GNORM CALL V7VMP(P1, DIG, DIG, TD, -1) CALL L7TVM(P1, W, L, DIG) V(GTHG) = V2NRM(P1, W) KA = KA + 1 CALL D7DOG(DIG, LV, P1, NWTST, STEP, V) C C *** FIND T SUCH THAT X - T*STEP IS STILL FEASIBLE. C T = ONE K = 0 DO 70 I = 1, P1 J = IPIV(I) X0I = X0(J) + DST(I)/TD(I) XI = X0I + STEP(I) IF (XI .LT. B(1,J)) GO TO 50 IF (XI .LE. B(2,J)) GO TO 70 TI = (B(2,J) - X0I) / STEP(I) J = I GO TO 60 50 TI = (B(1,J) - X0I) / STEP(I) J = -I 60 IF (T .LE. TI) GO TO 70 K = J T = TI 70 CONTINUE C C *** UPDATE DST, TG, AND PRED *** C CALL V7VMP(P1, STEP, STEP, TD, 1) CALL V2AXY(P1, DST, T, STEP, DST) V(DSTNRM) = V2NRM(PC, DST) T1 = T * V(GRDFAC) T2 = T * V(NWTFAC) PRED = PRED - T1*GNORM * ((T2 + ONE)*GNORM) 1 - T2 * (ONE + HALF*T2)*GHINVG 2 - HALF * (V(GTHG)*T1)**2 IF (K .EQ. 0) GO TO 100 CALL L7VML(P1, W, L, W) T2 = ONE - T2 DO 80 I = 1, P1 80 TG(I) = T2*TG(I) - T1*W(I) C C *** PERMUTE L, ETC. IF NECESSARY *** C P1M1 = P1 - 1 J = IABS(K) IF (J .EQ. P1) GO TO 90 CALL Q7RSH(J, P1, .FALSE., TG, L, W) CALL I7SHFT(P1, J, IPIV) CALL V7SHF(P1, J, TG) CALL V7SHF(P1, J, TD) CALL V7SHF(P1, J, DST) 90 IF (K .LT. 0) IPIV(P1) = -IPIV(P1) P1 = P1M1 IF (P1 .GT. 0) GO TO 30 C C *** UNSCALE STEP, UPDATE X AND DIHDI *** C 100 CALL V7SCP(P, STEP, ZERO) DO 110 I = 1, PC J = IABS(IPIV(I)) STEP(J) = DST(I) / TD(I) 110 CONTINUE C C *** FUDGE STEP TO ENSURE THAT IT FORCES APPROPRIATE COMPONENTS C *** TO THEIR BOUNDS *** C IF (P1 .GE. PC) GO TO 140 CALL V2AXY(P, TD, ONE, STEP, X0) K = P1 + 1 DO 130 I = K, PC J = IPIV(I) T = MEPS2 IF (J .GT. 0) GO TO 120 T = -T J = -J IPIV(I) = J 120 T = T * AMAX1( ABS(TD(J)), ABS(X0(J))) STEP(J) = STEP(J) + T 130 CONTINUE C 140 V(DGNORM) = GNORM0 V(NREDUC) = NRED V(PREDUC) = PRED V(RADIUS) = RAD V(DST0) = DNWTST V(GTSTEP) = D7TPR(P, STEP, G) C 999 RETURN C *** LAST LINE OF D7DGB FOLLOWS *** END PyBDSF-1.10.1/src/port3/d7dog.f000066400000000000000000000165561420247104600156470ustar00rootroot00000000000000 SUBROUTINE D7DOG(DIG, LV, N, NWTSTP, STEP, V) C C *** COMPUTE DOUBLE DOGLEG STEP *** C C *** PARAMETER DECLARATIONS *** C INTEGER LV, N REAL DIG(N), NWTSTP(N), STEP(N), V(LV) C C *** PURPOSE *** C C THIS SUBROUTINE COMPUTES A CANDIDATE STEP (FOR _USE_ IN AN UNCON- C STRAINED MINIMIZATION CODE) BY THE DOUBLE DOGLEG ALGORITHM OF C DENNIS AND MEI (REF. 1), WHICH IS A VARIATION ON POWELL*S DOGLEG C SCHEME (REF. 2, P. 95). C C-------------------------- PARAMETER USAGE -------------------------- C C DIG (INPUT) DIAG(D)**-2 * G -- SEE ALGORITHM NOTES. C G (INPUT) THE CURRENT GRADIENT VECTOR. C LV (INPUT) LENGTH OF V. C N (INPUT) NUMBER OF COMPONENTS IN DIG, G, NWTSTP, AND STEP. C NWTSTP (INPUT) NEGATIVE NEWTON STEP -- SEE ALGORITHM NOTES. C STEP (OUTPUT) THE COMPUTED STEP. C V (I/O) VALUES ARRAY, THE FOLLOWING COMPONENTS OF WHICH ARE C USED HERE... C V(BIAS) (INPUT) BIAS FOR RELAXED NEWTON STEP, WHICH IS V(BIAS) OF C THE WAY FROM THE FULL NEWTON TO THE FULLY RELAXED NEWTON C STEP. RECOMMENDED VALUE = 0.8 . C V(DGNORM) (INPUT) 2-NORM OF DIAG(D)**-1 * G -- SEE ALGORITHM NOTES. C V(DSTNRM) (OUTPUT) 2-NORM OF DIAG(D) * STEP, WHICH IS V(RADIUS) C UNLESS V(STPPAR) = 0 -- SEE ALGORITHM NOTES. C V(DST0) (INPUT) 2-NORM OF DIAG(D) * NWTSTP -- SEE ALGORITHM NOTES. C V(GRDFAC) (OUTPUT) THE COEFFICIENT OF DIG IN THE STEP RETURNED -- C STEP(I) = V(GRDFAC)*DIG(I) + V(NWTFAC)*NWTSTP(I). C V(GTHG) (INPUT) SQUARE-ROOT OF (DIG**T) * (HESSIAN) * DIG -- SEE C ALGORITHM NOTES. C V(GTSTEP) (OUTPUT) INNER PRODUCT BETWEEN G AND STEP. C V(NREDUC) (OUTPUT) FUNCTION REDUCTION PREDICTED FOR THE FULL NEWTON C STEP. C V(NWTFAC) (OUTPUT) THE COEFFICIENT OF NWTSTP IN THE STEP RETURNED -- C SEE V(GRDFAC) ABOVE. C V(PREDUC) (OUTPUT) FUNCTION REDUCTION PREDICTED FOR THE STEP RETURNED. C V(RADIUS) (INPUT) THE TRUST REGION RADIUS. D TIMES THE STEP RETURNED C HAS 2-NORM V(RADIUS) UNLESS V(STPPAR) = 0. C V(STPPAR) (OUTPUT) CODE TELLING HOW STEP WAS COMPUTED... 0 MEANS A C FULL NEWTON STEP. BETWEEN 0 AND 1 MEANS V(STPPAR) OF THE C WAY FROM THE NEWTON TO THE RELAXED NEWTON STEP. BETWEEN C 1 AND 2 MEANS A TRUE DOUBLE DOGLEG STEP, V(STPPAR) - 1 OF C THE WAY FROM THE RELAXED NEWTON TO THE CAUCHY STEP. C GREATER THAN 2 MEANS 1 / (V(STPPAR) - 1) TIMES THE CAUCHY C STEP. C C------------------------------- NOTES ------------------------------- C C *** ALGORITHM NOTES *** C C LET G AND H BE THE CURRENT GRADIENT AND HESSIAN APPROXIMA- C TION RESPECTIVELY AND LET D BE THE CURRENT SCALE VECTOR. THIS C ROUTINE ASSUMES DIG = DIAG(D)**-2 * G AND NWTSTP = H**-1 * G. C THE STEP COMPUTED IS THE SAME ONE WOULD GET BY REPLACING G AND H C BY DIAG(D)**-1 * G AND DIAG(D)**-1 * H * DIAG(D)**-1, C COMPUTING STEP, AND TRANSLATING STEP BACK TO THE ORIGINAL C VARIABLES, I.E., PREMULTIPLYING IT BY DIAG(D)**-1. C C *** REFERENCES *** C C 1. DENNIS, J.E., AND MEI, H.H.W. (1979), TWO NEW UNCONSTRAINED OPTI- C MIZATION ALGORITHMS WHICH _USE_ FUNCTION AND GRADIENT C VALUES, J. OPTIM. THEORY APPLIC. 28, PP. 453-482. C 2. POWELL, M.J.D. (1970), A HYBRID METHOD FOR NON-LINEAR EQUATIONS, C IN NUMERICAL METHODS FOR NON-LINEAR EQUATIONS, EDITED BY C P. RABINOWITZ, GORDON AND BREACH, LONDON. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS MCS-7600324 AND C MCS-7906671. C C------------------------ EXTERNAL QUANTITIES ------------------------ C C *** INTRINSIC FUNCTIONS *** C/+ REAL SQRT C/ C-------------------------- LOCAL VARIABLES -------------------------- C INTEGER I REAL CFACT, CNORM, CTRNWT, GHINVG, FEMNSQ, GNORM, 1 NWTNRM, RELAX, RLAMBD, T, T1, T2 REAL HALF, ONE, TWO, ZERO C C *** V SUBSCRIPTS *** C INTEGER BIAS, DGNORM, DSTNRM, DST0, GRDFAC, GTHG, GTSTEP, 1 NREDUC, NWTFAC, PREDUC, RADIUS, STPPAR C C *** DATA INITIALIZATIONS *** C C/6 C DATA HALF/0.5E+0/, ONE/1.E+0/, TWO/2.E+0/, ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, ONE=1.E+0, TWO=2.E+0, ZERO=0.E+0) C/ C C/6 C DATA BIAS/43/, DGNORM/1/, DSTNRM/2/, DST0/3/, GRDFAC/45/, C 1 GTHG/44/, GTSTEP/4/, NREDUC/6/, NWTFAC/46/, PREDUC/7/, C 2 RADIUS/8/, STPPAR/5/ C/7 PARAMETER (BIAS=43, DGNORM=1, DSTNRM=2, DST0=3, GRDFAC=45, 1 GTHG=44, GTSTEP=4, NREDUC=6, NWTFAC=46, PREDUC=7, 2 RADIUS=8, STPPAR=5) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C NWTNRM = V(DST0) RLAMBD = ONE IF (NWTNRM .GT. ZERO) RLAMBD = V(RADIUS) / NWTNRM GNORM = V(DGNORM) GHINVG = TWO * V(NREDUC) V(GRDFAC) = ZERO V(NWTFAC) = ZERO IF (RLAMBD .LT. ONE) GO TO 30 C C *** THE NEWTON STEP IS INSIDE THE TRUST REGION *** C V(STPPAR) = ZERO V(DSTNRM) = NWTNRM V(GTSTEP) = -GHINVG V(PREDUC) = V(NREDUC) V(NWTFAC) = -ONE DO 20 I = 1, N 20 STEP(I) = -NWTSTP(I) GO TO 999 C 30 V(DSTNRM) = V(RADIUS) CFACT = (GNORM / V(GTHG))**2 C *** CAUCHY STEP = -CFACT * G. CNORM = GNORM * CFACT RELAX = ONE - V(BIAS) * (ONE - GNORM*CNORM/GHINVG) IF (RLAMBD .LT. RELAX) GO TO 50 C C *** STEP IS BETWEEN RELAXED NEWTON AND FULL NEWTON STEPS *** C V(STPPAR) = ONE - (RLAMBD - RELAX) / (ONE - RELAX) T = -RLAMBD V(GTSTEP) = T * GHINVG V(PREDUC) = RLAMBD * (ONE - HALF*RLAMBD) * GHINVG V(NWTFAC) = T DO 40 I = 1, N 40 STEP(I) = T * NWTSTP(I) GO TO 999 C 50 IF (CNORM .LT. V(RADIUS)) GO TO 70 C C *** THE CAUCHY STEP LIES OUTSIDE THE TRUST REGION -- C *** STEP = SCALED CAUCHY STEP *** C T = -V(RADIUS) / GNORM V(GRDFAC) = T V(STPPAR) = ONE + CNORM / V(RADIUS) V(GTSTEP) = -V(RADIUS) * GNORM V(PREDUC) = V(RADIUS)*(GNORM - HALF*V(RADIUS)*(V(GTHG)/GNORM)**2) DO 60 I = 1, N 60 STEP(I) = T * DIG(I) GO TO 999 C C *** COMPUTE DOGLEG STEP BETWEEN CAUCHY AND RELAXED NEWTON *** C *** FEMUR = RELAXED NEWTON STEP MINUS CAUCHY STEP *** C 70 CTRNWT = CFACT * RELAX * GHINVG / GNORM C *** CTRNWT = INNER PROD. OF CAUCHY AND RELAXED NEWTON STEPS, C *** SCALED BY GNORM**-1. T1 = CTRNWT - GNORM*CFACT**2 C *** T1 = INNER PROD. OF FEMUR AND CAUCHY STEP, SCALED BY C *** GNORM**-1. T2 = V(RADIUS)*(V(RADIUS)/GNORM) - GNORM*CFACT**2 T = RELAX * NWTNRM FEMNSQ = (T/GNORM)*T - CTRNWT - T1 C *** FEMNSQ = SQUARE OF 2-NORM OF FEMUR, SCALED BY GNORM**-1. T = T2 / (T1 + SQRT(T1**2 + FEMNSQ*T2)) C *** DOGLEG STEP = CAUCHY STEP + T * FEMUR. T1 = (T - ONE) * CFACT V(GRDFAC) = T1 T2 = -T * RELAX V(NWTFAC) = T2 V(STPPAR) = TWO - T V(GTSTEP) = T1*GNORM**2 + T2*GHINVG V(PREDUC) = -T1*GNORM * ((T2 + ONE)*GNORM) 1 - T2 * (ONE + HALF*T2)*GHINVG 2 - HALF * (V(GTHG)*T1)**2 DO 80 I = 1, N 80 STEP(I) = T1*DIG(I) + T2*NWTSTP(I) C 999 RETURN C *** LAST LINE OF D7DOG FOLLOWS *** END PyBDSF-1.10.1/src/port3/d7dup.f000066400000000000000000000020631420247104600156520ustar00rootroot00000000000000 SUBROUTINE D7DUP(D, HDIAG, IV, LIV, LV, N, V) C C *** UPDATE SCALE VECTOR D FOR MNH *** C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, N INTEGER IV(LIV) REAL D(N), HDIAG(N), V(LV) C C *** LOCAL VARIABLES *** C INTEGER DTOLI, D0I, I REAL T, VDFAC C C *** INTRINSIC FUNCTIONS *** C/+ REAL SQRT C/ C *** SUBSCRIPTS FOR IV AND V *** C INTEGER DFAC, DTOL, DTYPE, NITER C/6 C DATA DFAC/41/, DTOL/59/, DTYPE/16/, NITER/31/ C/7 PARAMETER (DFAC=41, DTOL=59, DTYPE=16, NITER=31) C/ C C------------------------------- BODY -------------------------------- C I = IV(DTYPE) IF (I .EQ. 1) GO TO 10 IF (IV(NITER) .GT. 0) GO TO 999 C 10 DTOLI = IV(DTOL) D0I = DTOLI + N VDFAC = V(DFAC) DO 20 I = 1, N T = AMAX1( SQRT( ABS(HDIAG(I))), VDFAC*D(I)) IF (T .LT. V(DTOLI)) T = AMAX1(V(DTOLI), V(D0I)) D(I) = T DTOLI = DTOLI + 1 D0I = D0I + 1 20 CONTINUE C 999 RETURN C *** LAST CARD OF D7DUP FOLLOWS *** END PyBDSF-1.10.1/src/port3/d7egr.f000066400000000000000000000100701420247104600156340ustar00rootroot00000000000000 SUBROUTINE D7EGR(N,INDROW,JPNTR,INDCOL,IPNTR,NDEG,IWA,BWA) INTEGER N INTEGER INDROW(1),JPNTR(1),INDCOL(1),IPNTR(1),NDEG(N),IWA(N) LOGICAL BWA(N) C ********** C C SUBROUTINE D7EGR C C GIVEN THE SPARSITY PATTERN OF AN M BY N MATRIX A, C THIS SUBROUTINE DETERMINES THE DEGREE SEQUENCE FOR C THE INTERSECTION GRAPH OF THE COLUMNS OF A. C C IN GRAPH-THEORY TERMINOLOGY, THE INTERSECTION GRAPH OF C THE COLUMNS OF A IS THE LOOPLESS GRAPH G WITH VERTICES C A(J), J = 1,2,...,N WHERE A(J) IS THE J-TH COLUMN OF A C AND WITH EDGE (A(I),A(J)) IF AND ONLY IF COLUMNS I AND J C HAVE A NON-ZERO IN THE SAME ROW POSITION. C C NOTE THAT THE VALUE OF M IS NOT NEEDED BY D7EGR AND IS C THEREFORE NOT PRESENT IN THE SUBROUTINE STATEMENT. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE D7EGR(N,INDROW,JPNTR,INDCOL,IPNTR,NDEG,IWA,BWA) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C INDROW IS AN INTEGER INPUT ARRAY WHICH CONTAINS THE ROW C INDICES FOR THE NON-ZEROES IN THE MATRIX A. C C JPNTR IS AN INTEGER INPUT ARRAY OF LENGTH N + 1 WHICH C SPECIFIES THE LOCATIONS OF THE ROW INDICES IN INDROW. C THE ROW INDICES FOR COLUMN J ARE C C INDROW(K), K = JPNTR(J),...,JPNTR(J+1)-1. C C NOTE THAT JPNTR(N+1)-1 IS THEN THE NUMBER OF NON-ZERO C ELEMENTS OF THE MATRIX A. C C INDCOL IS AN INTEGER INPUT ARRAY WHICH CONTAINS THE C COLUMN INDICES FOR THE NON-ZEROES IN THE MATRIX A. C C IPNTR IS AN INTEGER INPUT ARRAY OF LENGTH M + 1 WHICH C SPECIFIES THE LOCATIONS OF THE COLUMN INDICES IN INDCOL. C THE COLUMN INDICES FOR ROW I ARE C C INDCOL(K), K = IPNTR(I),...,IPNTR(I+1)-1. C C NOTE THAT IPNTR(M+1)-1 IS THEN THE NUMBER OF NON-ZERO C ELEMENTS OF THE MATRIX A. C C NDEG IS AN INTEGER OUTPUT ARRAY OF LENGTH N WHICH C SPECIFIES THE DEGREE SEQUENCE. THE DEGREE OF THE C J-TH COLUMN OF A IS NDEG(J). C C IWA IS AN INTEGER WORK ARRAY OF LENGTH N. C C BWA IS A LOGICAL WORK ARRAY OF LENGTH N. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. JUNE 1982. C THOMAS F. COLEMAN, BURTON S. GARBOW, JORGE J. MORE C C ********** INTEGER DEG,IC,IP,IPL,IPU,IR,JCOL,JP,JPL,JPU C C INITIALIZATION BLOCK. C DO 10 JP = 1, N NDEG(JP) = 0 BWA(JP) = .FALSE. 10 CONTINUE C C COMPUTE THE DEGREE SEQUENCE BY DETERMINING THE CONTRIBUTIONS C TO THE DEGREES FROM THE CURRENT(JCOL) COLUMN AND FURTHER C COLUMNS WHICH HAVE NOT YET BEEN CONSIDERED. C IF (N .LT. 2) GO TO 90 DO 80 JCOL = 2, N BWA(JCOL) = .TRUE. DEG = 0 C C DETERMINE ALL POSITIONS (IR,JCOL) WHICH CORRESPOND C TO NON-ZEROES IN THE MATRIX. C JPL = JPNTR(JCOL) JPU = JPNTR(JCOL+1) - 1 IF (JPU .LT. JPL) GO TO 50 DO 40 JP = JPL, JPU IR = INDROW(JP) C C FOR EACH ROW IR, DETERMINE ALL POSITIONS (IR,IC) C WHICH CORRESPOND TO NON-ZEROES IN THE MATRIX. C IPL = IPNTR(IR) IPU = IPNTR(IR+1) - 1 DO 30 IP = IPL, IPU IC = INDCOL(IP) C C ARRAY BWA MARKS COLUMNS WHICH HAVE CONTRIBUTED TO C THE DEGREE COUNT OF COLUMN JCOL. UPDATE THE DEGREE C COUNTS OF THESE COLUMNS. ARRAY IWA RECORDS THE C MARKED COLUMNS. C IF (BWA(IC)) GO TO 20 BWA(IC) = .TRUE. NDEG(IC) = NDEG(IC) + 1 DEG = DEG + 1 IWA(DEG) = IC 20 CONTINUE 30 CONTINUE 40 CONTINUE 50 CONTINUE C C UN-MARK THE COLUMNS RECORDED BY IWA AND FINALIZE THE C DEGREE COUNT OF COLUMN JCOL. C IF (DEG .LT. 1) GO TO 70 DO 60 JP = 1, DEG IC = IWA(JP) BWA(IC) = .FALSE. 60 CONTINUE NDEG(JCOL) = NDEG(JCOL) + DEG 70 CONTINUE 80 CONTINUE 90 CONTINUE RETURN C C LAST CARD OF SUBROUTINE D7EGR. C END PyBDSF-1.10.1/src/port3/d7mlp.f000066400000000000000000000013451420247104600156540ustar00rootroot00000000000000 SUBROUTINE D7MLP(N, X, Y, Z, K) C C *** SET X = DIAG(Y)**K * Z C *** FOR X, Z = LOWER TRIANG. MATRICES STORED COMPACTLY BY ROW C *** K = 1 OR -1. C INTEGER N, K C/6 C REAL X(1), Y(N), Z(1) C/7 REAL X(*), Y(N), Z(*) C/ INTEGER I, J, L REAL ONE, T DATA ONE/1.E+0/ C L = 1 IF (K .GE. 0) GO TO 30 DO 20 I = 1, N T = ONE / Y(I) DO 10 J = 1, I X(L) = T * Z(L) L = L + 1 10 CONTINUE 20 CONTINUE GO TO 999 C 30 DO 50 I = 1, N T = Y(I) DO 40 J = 1, I X(L) = T * Z(L) L = L + 1 40 CONTINUE 50 CONTINUE 999 RETURN C *** LAST CARD OF D7MLP FOLLOWS *** END PyBDSF-1.10.1/src/port3/d7tpr.f000066400000000000000000000017121420247104600156670ustar00rootroot00000000000000 REAL FUNCTION D7TPR(P, X, Y) C C *** RETURN THE INNER PRODUCT OF THE P-VECTORS X AND Y. *** C INTEGER P REAL X(P), Y(P) C INTEGER I REAL ONE, SQTETA, T, ZERO REAL R7MDC EXTERNAL R7MDC C C *** R7MDC(2) RETURNS A MACHINE-DEPENDENT CONSTANT, SQTETA, WHICH C *** IS SLIGHTLY LARGER THAN THE SMALLEST POSITIVE NUMBER THAT C *** CAN BE SQUARED WITHOUT UNDERFLOWING. C C/6 C DATA ONE/1.E+0/, SQTETA/0.E+0/, ZERO/0.E+0/ C/7 PARAMETER (ONE=1.E+0, ZERO=0.E+0) DATA SQTETA/0.E+0/ C/ C D7TPR = ZERO IF (P .LE. 0) GO TO 999 IF (SQTETA .EQ. ZERO) SQTETA = R7MDC(2) DO 20 I = 1, P T = AMAX1( ABS(X(I)), ABS(Y(I))) IF (T .GT. ONE) GO TO 10 IF (T .LT. SQTETA) GO TO 20 T = (X(I)/SQTETA)*Y(I) IF ( ABS(T) .LT. SQTETA) GO TO 20 10 D7TPR = D7TPR + X(I)*Y(I) 20 CONTINUE C 999 RETURN C *** LAST LINE OF D7TPR FOLLOWS *** END PyBDSF-1.10.1/src/port3/d7upd.f000066400000000000000000000035001420247104600156470ustar00rootroot00000000000000 SUBROUTINE D7UPD(D, DR, IV, LIV, LV, N, ND, NN, N2, P, V) C C *** UPDATE SCALE VECTOR D FOR NL2IT *** C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, N, ND, NN, N2, P INTEGER IV(LIV) REAL D(P), DR(ND,P), V(LV) C DIMENSION V(*) C C *** LOCAL VARIABLES *** C INTEGER D0, I, JCN0, JCN1, JCNI, JTOL0, JTOLI, K, SII REAL T, VDFAC C C *** CONSTANTS *** C REAL ZERO C C *** INTRINSIC FUNCTIONS *** C/+ REAL SQRT C/ C *** EXTERNAL SUBROUTINE *** C EXTERNAL V7SCP C C V7SCP... SETS ALL COMPONENTS OF A VECTOR TO A SCALAR. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER DFAC, DTYPE, JCN, JTOL, NITER, S C/6 C DATA DFAC/41/, DTYPE/16/, JCN/66/, JTOL/59/, NITER/31/, S/62/ C/7 PARAMETER (DFAC=41, DTYPE=16, JCN=66, JTOL=59, NITER=31, S=62) C/ C C/6 C DATA ZERO/0.E+0/ C/7 PARAMETER (ZERO=0.E+0) C/ C C------------------------------- BODY -------------------------------- C IF (IV(DTYPE) .NE. 1 .AND. IV(NITER) .GT. 0) GO TO 999 JCN1 = IV(JCN) JCN0 = IABS(JCN1) - 1 IF (JCN1 .LT. 0) GO TO 10 IV(JCN) = -JCN1 CALL V7SCP(P, V(JCN1), ZERO) 10 DO 30 I = 1, P JCNI = JCN0 + I T = V(JCNI) DO 20 K = 1, NN 20 T = AMAX1(T, ABS(DR(K,I))) V(JCNI) = T 30 CONTINUE IF (N2 .LT. N) GO TO 999 VDFAC = V(DFAC) JTOL0 = IV(JTOL) - 1 D0 = JTOL0 + P SII = IV(S) - 1 DO 50 I = 1, P SII = SII + I JCNI = JCN0 + I T = V(JCNI) IF (V(SII) .GT. ZERO) T = AMAX1( SQRT(V(SII)), T) JTOLI = JTOL0 + I D0 = D0 + 1 IF (T .LT. V(JTOLI)) T = AMAX1(V(D0), V(JTOLI)) D(I) = AMAX1(VDFAC*D(I), T) 50 CONTINUE C 999 RETURN C *** LAST CARD OF D7UPD FOLLOWS *** END PyBDSF-1.10.1/src/port3/da7sst.f000066400000000000000000000511631420247104600160410ustar00rootroot00000000000000 SUBROUTINE DA7SST(IV, LIV, LV, V) C C *** ASSESS CANDIDATE STEP (***SOL VERSION 2.3) *** C INTEGER LIV, LV INTEGER IV(LIV) DOUBLE PRECISION V(LV) C C *** PURPOSE *** C C THIS SUBROUTINE IS CALLED BY AN UNCONSTRAINED MINIMIZATION C ROUTINE TO ASSESS THE NEXT CANDIDATE STEP. IT MAY RECOMMEND ONE C OF SEVERAL COURSES OF ACTION, SUCH AS ACCEPTING THE STEP, RECOM- C PUTING IT USING THE SAME OR A NEW QUADRATIC MODEL, OR HALTING DUE C TO CONVERGENCE OR FALSE CONVERGENCE. SEE THE RETURN CODE LISTING C BELOW. C C-------------------------- PARAMETER USAGE -------------------------- C C IV (I/O) INTEGER PARAMETER AND SCRATCH VECTOR -- SEE DESCRIPTION C BELOW OF IV VALUES REFERENCED. C LIV (IN) LENGTH OF IV ARRAY. C LV (IN) LENGTH OF V ARRAY. C V (I/O) REAL PARAMETER AND SCRATCH VECTOR -- SEE DESCRIPTION C BELOW OF V VALUES REFERENCED. C C *** IV VALUES REFERENCED *** C C IV(IRC) (I/O) ON INPUT FOR THE FIRST STEP TRIED IN A NEW ITERATION, C IV(IRC) SHOULD BE SET TO 3 OR 4 (THE VALUE TO WHICH IT IS C SET WHEN STEP IS DEFINITELY TO BE ACCEPTED). ON INPUT C AFTER STEP HAS BEEN RECOMPUTED, IV(IRC) SHOULD BE C UNCHANGED SINCE THE PREVIOUS RETURN OF DA7SST. C ON OUTPUT, IV(IRC) IS A RETURN CODE HAVING ONE OF THE C FOLLOWING VALUES... C 1 = SWITCH MODELS OR TRY SMALLER STEP. C 2 = SWITCH MODELS OR ACCEPT STEP. C 3 = ACCEPT STEP AND DETERMINE V(RADFAC) BY GRADIENT C TESTS. C 4 = ACCEPT STEP, V(RADFAC) HAS BEEN DETERMINED. C 5 = RECOMPUTE STEP (USING THE SAME MODEL). C 6 = RECOMPUTE STEP WITH RADIUS = V(LMAXS) BUT DO NOT C EVALUATE THE OBJECTIVE FUNCTION. C 7 = X-CONVERGENCE (SEE V(XCTOL)). C 8 = RELATIVE FUNCTION CONVERGENCE (SEE V(RFCTOL)). C 9 = BOTH X- AND RELATIVE FUNCTION CONVERGENCE. C 10 = ABSOLUTE FUNCTION CONVERGENCE (SEE V(AFCTOL)). C 11 = SINGULAR CONVERGENCE (SEE V(LMAXS)). C 12 = FALSE CONVERGENCE (SEE V(XFTOL)). C 13 = IV(IRC) WAS OUT OF RANGE ON INPUT. C RETURN CODE I HAS PRECEDENCE OVER I+1 FOR I = 9, 10, 11. C IV(MLSTGD) (I/O) SAVED VALUE OF IV(MODEL). C IV(MODEL) (I/O) ON INPUT, IV(MODEL) SHOULD BE AN INTEGER IDENTIFYING C THE CURRENT QUADRATIC MODEL OF THE OBJECTIVE FUNCTION. C IF A PREVIOUS STEP YIELDED A BETTER FUNCTION REDUCTION, C THEN IV(MODEL) WILL BE SET TO IV(MLSTGD) ON OUTPUT. C IV(NFCALL) (IN) INVOCATION COUNT FOR THE OBJECTIVE FUNCTION. C IV(NFGCAL) (I/O) VALUE OF IV(NFCALL) AT STEP THAT GAVE THE BIGGEST C FUNCTION REDUCTION THIS ITERATION. IV(NFGCAL) REMAINS C UNCHANGED UNTIL A FUNCTION REDUCTION IS OBTAINED. C IV(RADINC) (I/O) THE NUMBER OF RADIUS INCREASES (OR MINUS THE NUMBER C OF DECREASES) SO FAR THIS ITERATION. C IV(RESTOR) (OUT) SET TO 1 IF V(F) HAS BEEN RESTORED AND X SHOULD BE C RESTORED TO ITS INITIAL VALUE, TO 2 IF X SHOULD BE SAVED, C TO 3 IF X SHOULD BE RESTORED FROM THE SAVED VALUE, AND TO C 0 OTHERWISE. C IV(STAGE) (I/O) COUNT OF THE NUMBER OF MODELS TRIED SO FAR IN THE C CURRENT ITERATION. C IV(STGLIM) (IN) MAXIMUM NUMBER OF MODELS TO CONSIDER. C IV(SWITCH) (OUT) SET TO 0 UNLESS A NEW MODEL IS BEING TRIED AND IT C GIVES A SMALLER FUNCTION VALUE THAN THE PREVIOUS MODEL, C IN WHICH CASE DA7SST SETS IV(SWITCH) = 1. C IV(TOOBIG) (I/O) IS NONZERO ON INPUT IF STEP WAS TOO BIG (E.G., IF C IT WOULD CAUSE OVERFLOW). IT IS SET TO 0 ON RETURN. C IV(XIRC) (I/O) VALUE THAT IV(IRC) WOULD HAVE IN THE ABSENCE OF C CONVERGENCE, FALSE CONVERGENCE, AND OVERSIZED STEPS. C C *** V VALUES REFERENCED *** C C V(AFCTOL) (IN) ABSOLUTE FUNCTION CONVERGENCE TOLERANCE. IF THE C ABSOLUTE VALUE OF THE CURRENT FUNCTION VALUE V(F) IS LESS C THAN V(AFCTOL) AND DA7SST DOES NOT RETURN WITH C IV(IRC) = 11, THEN DA7SST RETURNS WITH IV(IRC) = 10. C V(DECFAC) (IN) FACTOR BY WHICH TO DECREASE RADIUS WHEN IV(TOOBIG) IS C NONZERO. C V(DSTNRM) (IN) THE 2-NORM OF D*STEP. C V(DSTSAV) (I/O) VALUE OF V(DSTNRM) ON SAVED STEP. C V(DST0) (IN) THE 2-NORM OF D TIMES THE NEWTON STEP (WHEN DEFINED, C I.E., FOR V(NREDUC) .GE. 0). C V(F) (I/O) ON BOTH INPUT AND OUTPUT, V(F) IS THE OBJECTIVE FUNC- C TION VALUE AT X. IF X IS RESTORED TO A PREVIOUS VALUE, C THEN V(F) IS RESTORED TO THE CORRESPONDING VALUE. C V(FDIF) (OUT) THE FUNCTION REDUCTION V(F0) - V(F) (FOR THE OUTPUT C VALUE OF V(F) IF AN EARLIER STEP GAVE A BIGGER FUNCTION C DECREASE, AND FOR THE INPUT VALUE OF V(F) OTHERWISE). C V(FLSTGD) (I/O) SAVED VALUE OF V(F). C V(F0) (IN) OBJECTIVE FUNCTION VALUE AT START OF ITERATION. C V(GTSLST) (I/O) VALUE OF V(GTSTEP) ON SAVED STEP. C V(GTSTEP) (IN) INNER PRODUCT BETWEEN STEP AND GRADIENT. C V(INCFAC) (IN) MINIMUM FACTOR BY WHICH TO INCREASE RADIUS. C V(LMAXS) (IN) MAXIMUM REASONABLE STEP SIZE (AND INITIAL STEP BOUND). C IF THE ACTUAL FUNCTION DECREASE IS NO MORE THAN TWICE C WHAT WAS PREDICTED, IF A RETURN WITH IV(IRC) = 7, 8, OR 9 C DOES NOT OCCUR, IF V(DSTNRM) .GT. V(LMAXS) OR THE CURRENT C STEP IS A NEWTON STEP, AND IF C V(PREDUC) .LE. V(SCTOL) * ABS(V(F0)), THEN DA7SST RETURNS C WITH IV(IRC) = 11. IF SO DOING APPEARS WORTHWHILE, THEN C DA7SST REPEATS THIS TEST (DISALLOWING A FULL NEWTON STEP) C WITH V(PREDUC) COMPUTED FOR A STEP OF LENGTH V(LMAXS) C (BY A RETURN WITH IV(IRC) = 6). C V(NREDUC) (I/O) FUNCTION REDUCTION PREDICTED BY QUADRATIC MODEL FOR C NEWTON STEP. IF DA7SST IS CALLED WITH IV(IRC) = 6, I.E., C IF V(PREDUC) HAS BEEN COMPUTED WITH RADIUS = V(LMAXS) FOR C _USE_ IN THE SINGULAR CONVERGENCE TEST, THEN V(NREDUC) IS C SET TO -V(PREDUC) BEFORE THE LATTER IS RESTORED. C V(PLSTGD) (I/O) VALUE OF V(PREDUC) ON SAVED STEP. C V(PREDUC) (I/O) FUNCTION REDUCTION PREDICTED BY QUADRATIC MODEL FOR C CURRENT STEP. C V(RADFAC) (OUT) FACTOR TO BE USED IN DETERMINING THE NEW RADIUS, C WHICH SHOULD BE V(RADFAC)*DST, WHERE DST IS EITHER THE C OUTPUT VALUE OF V(DSTNRM) OR THE 2-NORM OF C DIAG(NEWD)*STEP FOR THE OUTPUT VALUE OF STEP AND THE C UPDATED VERSION, NEWD, OF THE SCALE VECTOR D. FOR C IV(IRC) = 3, V(RADFAC) = 1.0 IS RETURNED. C V(RDFCMN) (IN) MINIMUM VALUE FOR V(RADFAC) IN TERMS OF THE INPUT C VALUE OF V(DSTNRM) -- SUGGESTED VALUE = 0.1. C V(RDFCMX) (IN) MAXIMUM VALUE FOR V(RADFAC) -- SUGGESTED VALUE = 4.0. C V(RELDX) (IN) SCALED RELATIVE CHANGE IN X CAUSED BY STEP, COMPUTED C (E.G.) BY FUNCTION DRLDST AS C MAX (D(I)*ABS(X(I)-X0(I)), 1 .LE. I .LE. P) / C MAX (D(I)*(ABS(X(I))+ABS(X0(I))), 1 .LE. I .LE. P). C V(RFCTOL) (IN) RELATIVE FUNCTION CONVERGENCE TOLERANCE. IF THE C ACTUAL FUNCTION REDUCTION IS AT MOST TWICE WHAT WAS PRE- C DICTED AND V(NREDUC) .LE. V(RFCTOL)*ABS(V(F0)), THEN C DA7SST RETURNS WITH IV(IRC) = 8 OR 9. C V(SCTOL) (IN) SINGULAR CONVERGENCE TOLERANCE -- SEE V(LMAXS). C V(STPPAR) (IN) MARQUARDT PARAMETER -- 0 MEANS FULL NEWTON STEP. C V(TUNER1) (IN) TUNING CONSTANT USED TO DECIDE IF THE FUNCTION C REDUCTION WAS MUCH LESS THAN EXPECTED. SUGGESTED C VALUE = 0.1. C V(TUNER2) (IN) TUNING CONSTANT USED TO DECIDE IF THE FUNCTION C REDUCTION WAS LARGE ENOUGH TO ACCEPT STEP. SUGGESTED C VALUE = 10**-4. C V(TUNER3) (IN) TUNING CONSTANT USED TO DECIDE IF THE RADIUS C SHOULD BE INCREASED. SUGGESTED VALUE = 0.75. C V(XCTOL) (IN) X-CONVERGENCE CRITERION. IF STEP IS A NEWTON STEP C (V(STPPAR) = 0) HAVING V(RELDX) .LE. V(XCTOL) AND GIVING C AT MOST TWICE THE PREDICTED FUNCTION DECREASE, THEN C DA7SST RETURNS IV(IRC) = 7 OR 9. C V(XFTOL) (IN) FALSE CONVERGENCE TOLERANCE. IF STEP GAVE NO OR ONLY C A SMALL FUNCTION DECREASE AND V(RELDX) .LE. V(XFTOL), C THEN DA7SST RETURNS WITH IV(IRC) = 12. C C------------------------------- NOTES ------------------------------- C C *** APPLICATION AND USAGE RESTRICTIONS *** C C THIS ROUTINE IS CALLED AS PART OF THE NL2SOL (NONLINEAR C LEAST-SQUARES) PACKAGE. IT MAY BE USED IN ANY UNCONSTRAINED C MINIMIZATION SOLVER THAT USES DOGLEG, GOLDFELD-QUANDT-TROTTER, C OR LEVENBERG-MARQUARDT STEPS. C C *** ALGORITHM NOTES *** C C SEE (1) FOR FURTHER DISCUSSION OF THE ASSESSING AND MODEL C SWITCHING STRATEGIES. WHILE NL2SOL CONSIDERS ONLY TWO MODELS, C DA7SST IS DESIGNED TO HANDLE ANY NUMBER OF MODELS. C C *** USAGE NOTES *** C C ON THE FIRST CALL OF AN ITERATION, ONLY THE I/O VARIABLES C STEP, X, IV(IRC), IV(MODEL), V(F), V(DSTNRM), V(GTSTEP), AND C V(PREDUC) NEED HAVE BEEN INITIALIZED. BETWEEN CALLS, NO I/O C VALUES EXCEPT STEP, X, IV(MODEL), V(F) AND THE STOPPING TOLER- C ANCES SHOULD BE CHANGED. C AFTER A RETURN FOR CONVERGENCE OR FALSE CONVERGENCE, ONE CAN C CHANGE THE STOPPING TOLERANCES AND CALL DA7SST AGAIN, IN WHICH C CASE THE STOPPING TESTS WILL BE REPEATED. C C *** REFERENCES *** C C (1) DENNIS, J.E., JR., GAY, D.M., AND WELSCH, R.E. (1981), C AN ADAPTIVE NONLINEAR LEAST-SQUARES ALGORITHM, C ACM TRANS. MATH. SOFTWARE, VOL. 7, NO. 3. C C (2) POWELL, M.J.D. (1970) A FORTRAN SUBROUTINE FOR SOLVING C SYSTEMS OF NONLINEAR ALGEBRAIC EQUATIONS, IN NUMERICAL C METHODS FOR NONLINEAR ALGEBRAIC EQUATIONS, EDITED BY C P. RABINOWITZ, GORDON AND BREACH, LONDON. C C *** HISTORY *** C C JOHN DENNIS DESIGNED MUCH OF THIS ROUTINE, STARTING WITH C IDEAS IN (2). ROY WELSCH SUGGESTED THE MODEL SWITCHING STRATEGY. C DAVID GAY AND STEPHEN PETERS CAST THIS SUBROUTINE INTO A MORE C PORTABLE FORM (WINTER 1977), AND DAVID GAY CAST IT INTO ITS C PRESENT FORM (FALL 1978), WITH MINOR CHANGES TO THE SINGULAR C CONVERGENCE TEST IN MAY, 1984 (TO DEAL WITH FULL NEWTON STEPS). C C *** GENERAL *** C C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, AND C MCS-7906671. C C------------------------ EXTERNAL QUANTITIES ------------------------ C C *** NO EXTERNAL FUNCTIONS AND SUBROUTINES *** C C-------------------------- LOCAL VARIABLES -------------------------- C LOGICAL GOODX INTEGER I, NFC DOUBLE PRECISION EMAX, EMAXS, GTS, RFAC1, XMAX DOUBLE PRECISION HALF, ONE, ONEP2, TWO, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AFCTOL, DECFAC, DSTNRM, DSTSAV, DST0, F, FDIF, FLSTGD, F0, 1 GTSLST, GTSTEP, INCFAC, IRC, LMAXS, MLSTGD, MODEL, NFCALL, 2 NFGCAL, NREDUC, PLSTGD, PREDUC, RADFAC, RADINC, RDFCMN, 3 RDFCMX, RELDX, RESTOR, RFCTOL, SCTOL, STAGE, STGLIM, 4 STPPAR, SWITCH, TOOBIG, TUNER1, TUNER2, TUNER3, XCTOL, 5 XFTOL, XIRC C C *** DATA INITIALIZATIONS *** C C/6 C DATA HALF/0.5D+0/, ONE/1.D+0/, ONEP2/1.2D+0/, TWO/2.D+0/, C 1 ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, ONE=1.D+0, ONEP2=1.2D+0, TWO=2.D+0, 1 ZERO=0.D+0) C/ C C/6 C DATA IRC/29/, MLSTGD/32/, MODEL/5/, NFCALL/6/, NFGCAL/7/, C 1 RADINC/8/, RESTOR/9/, STAGE/10/, STGLIM/11/, SWITCH/12/, C 2 TOOBIG/2/, XIRC/13/ C/7 PARAMETER (IRC=29, MLSTGD=32, MODEL=5, NFCALL=6, NFGCAL=7, 1 RADINC=8, RESTOR=9, STAGE=10, STGLIM=11, SWITCH=12, 2 TOOBIG=2, XIRC=13) C/ C/6 C DATA AFCTOL/31/, DECFAC/22/, DSTNRM/2/, DST0/3/, DSTSAV/18/, C 1 F/10/, FDIF/11/, FLSTGD/12/, F0/13/, GTSLST/14/, GTSTEP/4/, C 2 INCFAC/23/, LMAXS/36/, NREDUC/6/, PLSTGD/15/, PREDUC/7/, C 3 RADFAC/16/, RDFCMN/24/, RDFCMX/25/, RELDX/17/, RFCTOL/32/, C 4 SCTOL/37/, STPPAR/5/, TUNER1/26/, TUNER2/27/, TUNER3/28/, C 5 XCTOL/33/, XFTOL/34/ C/7 PARAMETER (AFCTOL=31, DECFAC=22, DSTNRM=2, DST0=3, DSTSAV=18, 1 F=10, FDIF=11, FLSTGD=12, F0=13, GTSLST=14, GTSTEP=4, 2 INCFAC=23, LMAXS=36, NREDUC=6, PLSTGD=15, PREDUC=7, 3 RADFAC=16, RDFCMN=24, RDFCMX=25, RELDX=17, RFCTOL=32, 4 SCTOL=37, STPPAR=5, TUNER1=26, TUNER2=27, TUNER3=28, 5 XCTOL=33, XFTOL=34) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C NFC = IV(NFCALL) IV(SWITCH) = 0 IV(RESTOR) = 0 RFAC1 = ONE GOODX = .TRUE. I = IV(IRC) IF (I .GE. 1 .AND. I .LE. 12) 1 GO TO (20,30,10,10,40,280,220,220,220,220,220,170), I IV(IRC) = 13 GO TO 999 C C *** INITIALIZE FOR NEW ITERATION *** C 10 IV(STAGE) = 1 IV(RADINC) = 0 V(FLSTGD) = V(F0) IF (IV(TOOBIG) .EQ. 0) GO TO 110 IV(STAGE) = -1 IV(XIRC) = I GO TO 60 C C *** STEP WAS RECOMPUTED WITH NEW MODEL OR SMALLER RADIUS *** C *** FIRST DECIDE WHICH *** C 20 IF (IV(MODEL) .NE. IV(MLSTGD)) GO TO 30 C *** OLD MODEL RETAINED, SMALLER RADIUS TRIED *** C *** DO NOT CONSIDER ANY MORE NEW MODELS THIS ITERATION *** IV(STAGE) = IV(STGLIM) IV(RADINC) = -1 GO TO 110 C C *** A NEW MODEL IS BEING TRIED. DECIDE WHETHER TO KEEP IT. *** C 30 IV(STAGE) = IV(STAGE) + 1 C C *** NOW WE ADD THE POSSIBILITY THAT STEP WAS RECOMPUTED WITH *** C *** THE SAME MODEL, PERHAPS BECAUSE OF AN OVERSIZED STEP. *** C 40 IF (IV(STAGE) .GT. 0) GO TO 50 C C *** STEP WAS RECOMPUTED BECAUSE IT WAS TOO BIG. *** C IF (IV(TOOBIG) .NE. 0) GO TO 60 C C *** RESTORE IV(STAGE) AND PICK UP WHERE WE LEFT OFF. *** C IV(STAGE) = -IV(STAGE) I = IV(XIRC) GO TO (20, 30, 110, 110, 70), I C 50 IF (IV(TOOBIG) .EQ. 0) GO TO 70 C C *** HANDLE OVERSIZE STEP *** C IV(TOOBIG) = 0 IF (IV(RADINC) .GT. 0) GO TO 80 IV(STAGE) = -IV(STAGE) IV(XIRC) = IV(IRC) C 60 IV(TOOBIG) = 0 V(RADFAC) = V(DECFAC) IV(RADINC) = IV(RADINC) - 1 IV(IRC) = 5 IV(RESTOR) = 1 V(F) = V(FLSTGD) GO TO 999 C 70 IF (V(F) .LT. V(FLSTGD)) GO TO 110 C C *** THE NEW STEP IS A LOSER. RESTORE OLD MODEL. *** C IF (IV(MODEL) .EQ. IV(MLSTGD)) GO TO 80 IV(MODEL) = IV(MLSTGD) IV(SWITCH) = 1 C C *** RESTORE STEP, ETC. ONLY IF A PREVIOUS STEP DECREASED V(F). C 80 IF (V(FLSTGD) .GE. V(F0)) GO TO 110 IF (IV(STAGE) .LT. IV(STGLIM)) THEN GOODX = .FALSE. ELSE IF (NFC .LT. IV(NFGCAL) + IV(STGLIM) + 2) THEN GOODX = .FALSE. ELSE IF (IV(SWITCH) .NE. 0) THEN GOODX = .FALSE. ENDIF IV(RESTOR) = 3 V(F) = V(FLSTGD) V(PREDUC) = V(PLSTGD) V(GTSTEP) = V(GTSLST) IF (IV(SWITCH) .EQ. 0) RFAC1 = V(DSTNRM) / V(DSTSAV) V(DSTNRM) = V(DSTSAV) IF (GOODX) THEN C C *** ACCEPT PREVIOUS SLIGHTLY REDUCING STEP *** C V(FDIF) = V(F0) - V(F) IV(IRC) = 4 V(RADFAC) = RFAC1 GO TO 999 ENDIF NFC = IV(NFGCAL) C 110 V(FDIF) = V(F0) - V(F) IF (V(FDIF) .GT. V(TUNER2) * V(PREDUC)) GO TO 140 IF (IV(RADINC) .GT. 0) GO TO 140 C C *** NO (OR ONLY A TRIVIAL) FUNCTION DECREASE C *** -- SO TRY NEW MODEL OR SMALLER RADIUS C IF (V(F) .LT. V(F0)) GO TO 120 IV(MLSTGD) = IV(MODEL) V(FLSTGD) = V(F) V(F) = V(F0) IV(RESTOR) = 1 GO TO 130 120 IV(NFGCAL) = NFC 130 IV(IRC) = 1 IF (IV(STAGE) .LT. IV(STGLIM)) GO TO 160 IV(IRC) = 5 IV(RADINC) = IV(RADINC) - 1 GO TO 160 C C *** NONTRIVIAL FUNCTION DECREASE ACHIEVED *** C 140 IV(NFGCAL) = NFC RFAC1 = ONE V(DSTSAV) = V(DSTNRM) IF (V(FDIF) .GT. V(PREDUC)*V(TUNER1)) GO TO 190 C C *** DECREASE WAS MUCH LESS THAN PREDICTED -- EITHER CHANGE MODELS C *** OR ACCEPT STEP WITH DECREASED RADIUS. C IF (IV(STAGE) .GE. IV(STGLIM)) GO TO 150 C *** CONSIDER SWITCHING MODELS *** IV(IRC) = 2 GO TO 160 C C *** ACCEPT STEP WITH DECREASED RADIUS *** C 150 IV(IRC) = 4 C C *** SET V(RADFAC) TO FLETCHER*S DECREASE FACTOR *** C 160 IV(XIRC) = IV(IRC) EMAX = V(GTSTEP) + V(FDIF) V(RADFAC) = HALF * RFAC1 IF (EMAX .LT. V(GTSTEP)) V(RADFAC) = RFAC1 * DMAX1(V(RDFCMN), 1 HALF * V(GTSTEP)/EMAX) C C *** DO FALSE CONVERGENCE TEST *** C 170 IF (V(RELDX) .LE. V(XFTOL)) GO TO 180 IV(IRC) = IV(XIRC) IF (V(F) .LT. V(F0)) GO TO 200 GO TO 230 C 180 IV(IRC) = 12 GO TO 240 C C *** HANDLE GOOD FUNCTION DECREASE *** C 190 IF (V(FDIF) .LT. (-V(TUNER3) * V(GTSTEP))) GO TO 210 C C *** INCREASING RADIUS LOOKS WORTHWHILE. SEE IF WE JUST C *** RECOMPUTED STEP WITH A DECREASED RADIUS OR RESTORED STEP C *** AFTER RECOMPUTING IT WITH A LARGER RADIUS. C IF (IV(RADINC) .LT. 0) GO TO 210 IF (IV(RESTOR) .EQ. 1) GO TO 210 IF (IV(RESTOR) .EQ. 3) GO TO 210 C C *** WE DID NOT. TRY A LONGER STEP UNLESS THIS WAS A NEWTON C *** STEP. C V(RADFAC) = V(RDFCMX) GTS = V(GTSTEP) IF (V(FDIF) .LT. (HALF/V(RADFAC) - ONE) * GTS) 1 V(RADFAC) = DMAX1(V(INCFAC), HALF*GTS/(GTS + V(FDIF))) IV(IRC) = 4 IF (V(STPPAR) .EQ. ZERO) GO TO 230 IF (V(DST0) .GE. ZERO .AND. (V(DST0) .LT. TWO*V(DSTNRM) 1 .OR. V(NREDUC) .LT. ONEP2*V(FDIF))) GO TO 230 C *** STEP WAS NOT A NEWTON STEP. RECOMPUTE IT WITH C *** A LARGER RADIUS. IV(IRC) = 5 IV(RADINC) = IV(RADINC) + 1 C C *** SAVE VALUES CORRESPONDING TO GOOD STEP *** C 200 V(FLSTGD) = V(F) IV(MLSTGD) = IV(MODEL) IF (IV(RESTOR) .EQ. 0) IV(RESTOR) = 2 V(DSTSAV) = V(DSTNRM) IV(NFGCAL) = NFC V(PLSTGD) = V(PREDUC) V(GTSLST) = V(GTSTEP) GO TO 230 C C *** ACCEPT STEP WITH RADIUS UNCHANGED *** C 210 V(RADFAC) = ONE IV(IRC) = 3 GO TO 230 C C *** COME HERE FOR A RESTART AFTER CONVERGENCE *** C 220 IV(IRC) = IV(XIRC) IF (V(DSTSAV) .GE. ZERO) GO TO 240 IV(IRC) = 12 GO TO 240 C C *** PERFORM CONVERGENCE TESTS *** C 230 IV(XIRC) = IV(IRC) 240 IF (IV(RESTOR) .EQ. 1 .AND. V(FLSTGD) .LT. V(F0)) IV(RESTOR) = 3 IF (DABS(V(F)) .LT. V(AFCTOL)) IV(IRC) = 10 IF (HALF * V(FDIF) .GT. V(PREDUC)) GO TO 999 EMAX = V(RFCTOL) * DABS(V(F0)) EMAXS = V(SCTOL) * DABS(V(F0)) IF (V(PREDUC) .LE. EMAXS .AND. (V(DSTNRM) .GT. V(LMAXS) .OR. 1 V(STPPAR) .EQ. ZERO)) IV(IRC) = 11 IF (V(DST0) .LT. ZERO) GO TO 250 I = 0 IF ((V(NREDUC) .GT. ZERO .AND. V(NREDUC) .LE. EMAX) .OR. 1 (V(NREDUC) .EQ. ZERO. AND. V(PREDUC) .EQ. ZERO)) I = 2 IF (V(STPPAR) .EQ. ZERO .AND. V(RELDX) .LE. V(XCTOL) 1 .AND. GOODX) I = I + 1 IF (I .GT. 0) IV(IRC) = I + 6 C C *** CONSIDER RECOMPUTING STEP OF LENGTH V(LMAXS) FOR SINGULAR C *** CONVERGENCE TEST. C 250 IF (IV(IRC) .GT. 5 .AND. IV(IRC) .NE. 12) GO TO 999 IF (V(STPPAR) .EQ. ZERO) GO TO 999 IF (V(DSTNRM) .GT. V(LMAXS)) GO TO 260 IF (V(PREDUC) .GE. EMAXS) GO TO 999 IF (V(DST0) .LE. ZERO) GO TO 270 IF (HALF * V(DST0) .LE. V(LMAXS)) GO TO 999 GO TO 270 260 IF (HALF * V(DSTNRM) .LE. V(LMAXS)) GO TO 999 XMAX = V(LMAXS) / V(DSTNRM) IF (XMAX * (TWO - XMAX) * V(PREDUC) .GE. EMAXS) GO TO 999 270 IF (V(NREDUC) .LT. ZERO) GO TO 290 C C *** RECOMPUTE V(PREDUC) FOR _USE_ IN SINGULAR CONVERGENCE TEST *** C V(GTSLST) = V(GTSTEP) V(DSTSAV) = V(DSTNRM) IF (IV(IRC) .EQ. 12) V(DSTSAV) = -V(DSTSAV) V(PLSTGD) = V(PREDUC) I = IV(RESTOR) IV(RESTOR) = 2 IF (I .EQ. 3) IV(RESTOR) = 0 IV(IRC) = 6 GO TO 999 C C *** PERFORM SINGULAR CONVERGENCE TEST WITH RECOMPUTED V(PREDUC) *** C 280 V(GTSTEP) = V(GTSLST) V(DSTNRM) = DABS(V(DSTSAV)) IV(IRC) = IV(XIRC) IF (V(DSTSAV) .LE. ZERO) IV(IRC) = 12 V(NREDUC) = -V(PREDUC) V(PREDUC) = V(PLSTGD) IV(RESTOR) = 3 290 IF (-V(NREDUC) .LE. V(SCTOL) * DABS(V(F0))) IV(IRC) = 11 C 999 RETURN C C *** LAST LINE OF DA7SST FOLLOWS *** END PyBDSF-1.10.1/src/port3/dalloc.f000066400000000000000000000001371420247104600160650ustar00rootroot00000000000000 SUBROUTINE DALLOC(N) C CALL I0TK01 CALL ISTKRL(N) C RETURN C END PyBDSF-1.10.1/src/port3/dc6lcf.f000066400000000000000000000002401420247104600157630ustar00rootroot00000000000000 SUBROUTINE DC6LCF(P,X,NF,F,IU,UR,UF) INTEGER P,IU DOUBLE PRECISION X(P),F,UR EXTERNAL UF CALL UF(P,X,NF,F) RETURN END PyBDSF-1.10.1/src/port3/dc7vfn.f000066400000000000000000000024611420247104600160200ustar00rootroot00000000000000 SUBROUTINE DC7VFN(IV, L, LH, LIV, LV, N, P, V) C C *** FINISH COVARIANCE COMPUTATION FOR DRN2G, DRNSG *** C INTEGER LH, LIV, LV, N, P INTEGER IV(LIV) DOUBLE PRECISION L(LH), V(LV) C EXTERNAL DL7NVR, DL7TSQ, DV7SCL C C *** LOCAL VARIABLES *** C INTEGER COV, I DOUBLE PRECISION HALF C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, COVMAT, F, FDH, H, MODE, RDREQ, REGD C C/6 C DATA CNVCOD/55/, COVMAT/26/, F/10/, FDH/74/, H/56/, MODE/35/, C 1 RDREQ/57/, REGD/67/ C/7 PARAMETER (CNVCOD=55, COVMAT=26, F=10, FDH=74, H=56, MODE=35, 1 RDREQ=57, REGD=67) C/ DATA HALF/0.5D+0/ C C *** BODY *** C IV(1) = IV(CNVCOD) I = IV(MODE) - P IV(MODE) = 0 IV(CNVCOD) = 0 IF (IV(FDH) .LE. 0) GO TO 999 IF ((I-2)**2 .EQ. 1) IV(REGD) = 1 IF (MOD(IV(RDREQ),2) .NE. 1) GO TO 999 C C *** FINISH COMPUTING COVARIANCE MATRIX = INVERSE OF F.D. HESSIAN. C COV = IABS(IV(H)) IV(FDH) = 0 C IF (IV(COVMAT) .NE. 0) GO TO 999 IF (I .GE. 2) GO TO 10 CALL DL7NVR(P, V(COV), L) CALL DL7TSQ(P, V(COV), V(COV)) C 10 CALL DV7SCL(LH, V(COV), V(F)/(HALF * FLOAT(MAX0(1,N-P))), V(COV)) IV(COVMAT) = COV C 999 RETURN C *** LAST LINE OF DC7VFN FOLLOWS *** END PyBDSF-1.10.1/src/port3/dd4sqr.f000066400000000000000000000016161420247104600160330ustar00rootroot00000000000000 SUBROUTINE DD4SQR(K, M, N, Q, R, B, RHS) INTEGER M INTEGER N DOUBLE PRECISION Q(K, 1), R( 1), B(1), RHS(K) INTEGER I DOUBLE PRECISION BETA, ALPHA,U, X C C THIS SUBROUTINE UPDATES THE QR DECOMPOSTION WHENE A NEW C ROW CONTAINED IN B IS ADDED TO THE MATRIX C M=M+1 MM1=M-1 C C ZERO OUT ROW AND COLUMN OF Q MATRIX C Q(M,M)=1. IF(M.EQ.1)RETURN DO 10 II=1,MM1 Q(M,II)=0.0D0 Q(II,M)=0.0D0 10 CONTINUE X=RHS(M) IF (N.EQ.0) RETURN IS=1 DO 20 I=1,N CALL DROTG(R(IS), B(I), ALPHA, BETA) CALL DROT(M, Q(I, 1), K, Q(M, 1), K, ALPHA, BETA) U=RHS(I) RHS(I)=ALPHA*U+BETA*X X=-BETA*U+ALPHA*X IS=IS+I+1 IF (N-I.GE.1) 1 CALL DS4ROT(N-I,R(IS-1),I+1,B(I+1),-1,ALPHA,BETA) 20 CONTINUE RHS(M)=X RETURN END PyBDSF-1.10.1/src/port3/dd7dgb.f000066400000000000000000000117151420247104600157660ustar00rootroot00000000000000 SUBROUTINE DD7DGB(B, D, DIG, DST, G, IPIV, KA, L, LV, P, PC, 1 NWTST, STEP, TD, TG, V, W, X0) C C *** COMPUTE DOUBLE-DOGLEG STEP, SUBJECT TO SIMPLE BOUNDS ON X *** C INTEGER LV, KA, P, PC INTEGER IPIV(P) DOUBLE PRECISION B(2,P), D(P), DIG(P), DST(P), G(P), L(1), 1 NWTST(P), STEP(P), TD(P), TG(P), V(LV), W(P), 2 X0(P) C C DIMENSION L(P*(P+1)/2) C DOUBLE PRECISION DD7TPR, DR7MDC, DV2NRM EXTERNAL DD7DOG, DD7TPR, I7SHFT, DL7ITV, DL7IVM, DL7TVM,DL7VML, 1 DQ7RSH, DR7MDC, DV2NRM,DV2AXY,DV7CPY, DV7IPR, DV7SCP, 2 DV7SHF, DV7VMP C C *** LOCAL VARIABLES *** C INTEGER I, J, K, P1, P1M1 DOUBLE PRECISION DNWTST, GHINVG, GNORM, GNORM0, NRED, PRED, RAD, 1 T, T1, T2, TI, X0I, XI DOUBLE PRECISION HALF, MEPS2, ONE, TWO, ZERO C C *** V SUBSCRIPTS *** C INTEGER DGNORM, DST0, DSTNRM, GRDFAC, GTHG, GTSTEP, NREDUC, 1 NWTFAC, PREDUC, RADIUS, STPPAR C C/6 C DATA DGNORM/1/, DST0/3/, DSTNRM/2/, GRDFAC/45/, GTHG/44/, C 1 GTSTEP/4/, NREDUC/6/, NWTFAC/46/, PREDUC/7/, RADIUS/8/, C 2 STPPAR/5/ C/7 PARAMETER (DGNORM=1, DST0=3, DSTNRM=2, GRDFAC=45, GTHG=44, 1 GTSTEP=4, NREDUC=6, NWTFAC=46, PREDUC=7, RADIUS=8, 2 STPPAR=5) C/ C/6 C DATA HALF/0.5D+0/, ONE/1.D+0/, TWO/2.D+0/, ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, ONE=1.D+0, TWO=2.D+0, ZERO=0.D+0) SAVE MEPS2 C/ DATA MEPS2/0.D+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IF (MEPS2 .LE. ZERO) MEPS2 = TWO * DR7MDC(3) GNORM0 = V(DGNORM) V(DSTNRM) = ZERO IF (KA .LT. 0) GO TO 10 DNWTST = V(DST0) NRED = V(NREDUC) 10 PRED = ZERO V(STPPAR) = ZERO RAD = V(RADIUS) IF (PC .GT. 0) GO TO 20 DNWTST = ZERO CALL DV7SCP(P, STEP, ZERO) GO TO 140 C 20 P1 = PC CALL DV7CPY(P, TD, D) CALL DV7IPR(P, IPIV, TD) CALL DV7SCP(PC, DST, ZERO) CALL DV7CPY(P, TG, G) CALL DV7IPR(P, IPIV, TG) C 30 CALL DL7IVM(P1, NWTST, L, TG) GHINVG = DD7TPR(P1, NWTST, NWTST) V(NREDUC) = HALF * GHINVG CALL DL7ITV(P1, NWTST, L, NWTST) CALL DV7VMP(P1, STEP, NWTST, TD, 1) V(DST0) = DV2NRM(PC, STEP) IF (KA .GE. 0) GO TO 40 KA = 0 DNWTST = V(DST0) NRED = V(NREDUC) 40 V(RADIUS) = RAD - V(DSTNRM) IF (V(RADIUS) .LE. ZERO) GO TO 100 CALL DV7VMP(P1, DIG, TG, TD, -1) GNORM = DV2NRM(P1, DIG) IF (GNORM .LE. ZERO) GO TO 100 V(DGNORM) = GNORM CALL DV7VMP(P1, DIG, DIG, TD, -1) CALL DL7TVM(P1, W, L, DIG) V(GTHG) = DV2NRM(P1, W) KA = KA + 1 CALL DD7DOG(DIG, LV, P1, NWTST, STEP, V) C C *** FIND T SUCH THAT X - T*STEP IS STILL FEASIBLE. C T = ONE K = 0 DO 70 I = 1, P1 J = IPIV(I) X0I = X0(J) + DST(I)/TD(I) XI = X0I + STEP(I) IF (XI .LT. B(1,J)) GO TO 50 IF (XI .LE. B(2,J)) GO TO 70 TI = (B(2,J) - X0I) / STEP(I) J = I GO TO 60 50 TI = (B(1,J) - X0I) / STEP(I) J = -I 60 IF (T .LE. TI) GO TO 70 K = J T = TI 70 CONTINUE C C *** UPDATE DST, TG, AND PRED *** C CALL DV7VMP(P1, STEP, STEP, TD, 1) CALL DV2AXY(P1, DST, T, STEP, DST) V(DSTNRM) = DV2NRM(PC, DST) T1 = T * V(GRDFAC) T2 = T * V(NWTFAC) PRED = PRED - T1*GNORM * ((T2 + ONE)*GNORM) 1 - T2 * (ONE + HALF*T2)*GHINVG 2 - HALF * (V(GTHG)*T1)**2 IF (K .EQ. 0) GO TO 100 CALL DL7VML(P1, W, L, W) T2 = ONE - T2 DO 80 I = 1, P1 80 TG(I) = T2*TG(I) - T1*W(I) C C *** PERMUTE L, ETC. IF NECESSARY *** C P1M1 = P1 - 1 J = IABS(K) IF (J .EQ. P1) GO TO 90 CALL DQ7RSH(J, P1, .FALSE., TG, L, W) CALL I7SHFT(P1, J, IPIV) CALL DV7SHF(P1, J, TG) CALL DV7SHF(P1, J, TD) CALL DV7SHF(P1, J, DST) 90 IF (K .LT. 0) IPIV(P1) = -IPIV(P1) P1 = P1M1 IF (P1 .GT. 0) GO TO 30 C C *** UNSCALE STEP, UPDATE X AND DIHDI *** C 100 CALL DV7SCP(P, STEP, ZERO) DO 110 I = 1, PC J = IABS(IPIV(I)) STEP(J) = DST(I) / TD(I) 110 CONTINUE C C *** FUDGE STEP TO ENSURE THAT IT FORCES APPROPRIATE COMPONENTS C *** TO THEIR BOUNDS *** C IF (P1 .GE. PC) GO TO 140 CALL DV2AXY(P, TD, ONE, STEP, X0) K = P1 + 1 DO 130 I = K, PC J = IPIV(I) T = MEPS2 IF (J .GT. 0) GO TO 120 T = -T J = -J IPIV(I) = J 120 T = T * DMAX1(DABS(TD(J)), DABS(X0(J))) STEP(J) = STEP(J) + T 130 CONTINUE C 140 V(DGNORM) = GNORM0 V(NREDUC) = NRED V(PREDUC) = PRED V(RADIUS) = RAD V(DST0) = DNWTST V(GTSTEP) = DD7TPR(P, STEP, G) C 999 RETURN C *** LAST LINE OF DD7DGB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dd7dog.f000066400000000000000000000166401420247104600160050ustar00rootroot00000000000000 SUBROUTINE DD7DOG(DIG, LV, N, NWTSTP, STEP, V) C C *** COMPUTE DOUBLE DOGLEG STEP *** C C *** PARAMETER DECLARATIONS *** C INTEGER LV, N DOUBLE PRECISION DIG(N), NWTSTP(N), STEP(N), V(LV) C C *** PURPOSE *** C C THIS SUBROUTINE COMPUTES A CANDIDATE STEP (FOR _USE_ IN AN UNCON- C STRAINED MINIMIZATION CODE) BY THE DOUBLE DOGLEG ALGORITHM OF C DENNIS AND MEI (REF. 1), WHICH IS A VARIATION ON POWELL*S DOGLEG C SCHEME (REF. 2, P. 95). C C-------------------------- PARAMETER USAGE -------------------------- C C DIG (INPUT) DIAG(D)**-2 * G -- SEE ALGORITHM NOTES. C G (INPUT) THE CURRENT GRADIENT VECTOR. C LV (INPUT) LENGTH OF V. C N (INPUT) NUMBER OF COMPONENTS IN DIG, G, NWTSTP, AND STEP. C NWTSTP (INPUT) NEGATIVE NEWTON STEP -- SEE ALGORITHM NOTES. C STEP (OUTPUT) THE COMPUTED STEP. C V (I/O) VALUES ARRAY, THE FOLLOWING COMPONENTS OF WHICH ARE C USED HERE... C V(BIAS) (INPUT) BIAS FOR RELAXED NEWTON STEP, WHICH IS V(BIAS) OF C THE WAY FROM THE FULL NEWTON TO THE FULLY RELAXED NEWTON C STEP. RECOMMENDED VALUE = 0.8 . C V(DGNORM) (INPUT) 2-NORM OF DIAG(D)**-1 * G -- SEE ALGORITHM NOTES. C V(DSTNRM) (OUTPUT) 2-NORM OF DIAG(D) * STEP, WHICH IS V(RADIUS) C UNLESS V(STPPAR) = 0 -- SEE ALGORITHM NOTES. C V(DST0) (INPUT) 2-NORM OF DIAG(D) * NWTSTP -- SEE ALGORITHM NOTES. C V(GRDFAC) (OUTPUT) THE COEFFICIENT OF DIG IN THE STEP RETURNED -- C STEP(I) = V(GRDFAC)*DIG(I) + V(NWTFAC)*NWTSTP(I). C V(GTHG) (INPUT) SQUARE-ROOT OF (DIG**T) * (HESSIAN) * DIG -- SEE C ALGORITHM NOTES. C V(GTSTEP) (OUTPUT) INNER PRODUCT BETWEEN G AND STEP. C V(NREDUC) (OUTPUT) FUNCTION REDUCTION PREDICTED FOR THE FULL NEWTON C STEP. C V(NWTFAC) (OUTPUT) THE COEFFICIENT OF NWTSTP IN THE STEP RETURNED -- C SEE V(GRDFAC) ABOVE. C V(PREDUC) (OUTPUT) FUNCTION REDUCTION PREDICTED FOR THE STEP RETURNED. C V(RADIUS) (INPUT) THE TRUST REGION RADIUS. D TIMES THE STEP RETURNED C HAS 2-NORM V(RADIUS) UNLESS V(STPPAR) = 0. C V(STPPAR) (OUTPUT) CODE TELLING HOW STEP WAS COMPUTED... 0 MEANS A C FULL NEWTON STEP. BETWEEN 0 AND 1 MEANS V(STPPAR) OF THE C WAY FROM THE NEWTON TO THE RELAXED NEWTON STEP. BETWEEN C 1 AND 2 MEANS A TRUE DOUBLE DOGLEG STEP, V(STPPAR) - 1 OF C THE WAY FROM THE RELAXED NEWTON TO THE CAUCHY STEP. C GREATER THAN 2 MEANS 1 / (V(STPPAR) - 1) TIMES THE CAUCHY C STEP. C C------------------------------- NOTES ------------------------------- C C *** ALGORITHM NOTES *** C C LET G AND H BE THE CURRENT GRADIENT AND HESSIAN APPROXIMA- C TION RESPECTIVELY AND LET D BE THE CURRENT SCALE VECTOR. THIS C ROUTINE ASSUMES DIG = DIAG(D)**-2 * G AND NWTSTP = H**-1 * G. C THE STEP COMPUTED IS THE SAME ONE WOULD GET BY REPLACING G AND H C BY DIAG(D)**-1 * G AND DIAG(D)**-1 * H * DIAG(D)**-1, C COMPUTING STEP, AND TRANSLATING STEP BACK TO THE ORIGINAL C VARIABLES, I.E., PREMULTIPLYING IT BY DIAG(D)**-1. C C *** REFERENCES *** C C 1. DENNIS, J.E., AND MEI, H.H.W. (1979), TWO NEW UNCONSTRAINED OPTI- C MIZATION ALGORITHMS WHICH _USE_ FUNCTION AND GRADIENT C VALUES, J. OPTIM. THEORY APPLIC. 28, PP. 453-482. C 2. POWELL, M.J.D. (1970), A HYBRID METHOD FOR NON-LINEAR EQUATIONS, C IN NUMERICAL METHODS FOR NON-LINEAR EQUATIONS, EDITED BY C P. RABINOWITZ, GORDON AND BREACH, LONDON. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS MCS-7600324 AND C MCS-7906671. C C------------------------ EXTERNAL QUANTITIES ------------------------ C C *** INTRINSIC FUNCTIONS *** C/+ DOUBLE PRECISION DSQRT C/ C-------------------------- LOCAL VARIABLES -------------------------- C INTEGER I DOUBLE PRECISION CFACT, CNORM, CTRNWT, GHINVG, FEMNSQ, GNORM, 1 NWTNRM, RELAX, RLAMBD, T, T1, T2 DOUBLE PRECISION HALF, ONE, TWO, ZERO C C *** V SUBSCRIPTS *** C INTEGER BIAS, DGNORM, DSTNRM, DST0, GRDFAC, GTHG, GTSTEP, 1 NREDUC, NWTFAC, PREDUC, RADIUS, STPPAR C C *** DATA INITIALIZATIONS *** C C/6 C DATA HALF/0.5D+0/, ONE/1.D+0/, TWO/2.D+0/, ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, ONE=1.D+0, TWO=2.D+0, ZERO=0.D+0) C/ C C/6 C DATA BIAS/43/, DGNORM/1/, DSTNRM/2/, DST0/3/, GRDFAC/45/, C 1 GTHG/44/, GTSTEP/4/, NREDUC/6/, NWTFAC/46/, PREDUC/7/, C 2 RADIUS/8/, STPPAR/5/ C/7 PARAMETER (BIAS=43, DGNORM=1, DSTNRM=2, DST0=3, GRDFAC=45, 1 GTHG=44, GTSTEP=4, NREDUC=6, NWTFAC=46, PREDUC=7, 2 RADIUS=8, STPPAR=5) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C NWTNRM = V(DST0) RLAMBD = ONE IF (NWTNRM .GT. ZERO) RLAMBD = V(RADIUS) / NWTNRM GNORM = V(DGNORM) GHINVG = TWO * V(NREDUC) V(GRDFAC) = ZERO V(NWTFAC) = ZERO IF (RLAMBD .LT. ONE) GO TO 30 C C *** THE NEWTON STEP IS INSIDE THE TRUST REGION *** C V(STPPAR) = ZERO V(DSTNRM) = NWTNRM V(GTSTEP) = -GHINVG V(PREDUC) = V(NREDUC) V(NWTFAC) = -ONE DO 20 I = 1, N 20 STEP(I) = -NWTSTP(I) GO TO 999 C 30 V(DSTNRM) = V(RADIUS) CFACT = (GNORM / V(GTHG))**2 C *** CAUCHY STEP = -CFACT * G. CNORM = GNORM * CFACT RELAX = ONE - V(BIAS) * (ONE - GNORM*CNORM/GHINVG) IF (RLAMBD .LT. RELAX) GO TO 50 C C *** STEP IS BETWEEN RELAXED NEWTON AND FULL NEWTON STEPS *** C V(STPPAR) = ONE - (RLAMBD - RELAX) / (ONE - RELAX) T = -RLAMBD V(GTSTEP) = T * GHINVG V(PREDUC) = RLAMBD * (ONE - HALF*RLAMBD) * GHINVG V(NWTFAC) = T DO 40 I = 1, N 40 STEP(I) = T * NWTSTP(I) GO TO 999 C 50 IF (CNORM .LT. V(RADIUS)) GO TO 70 C C *** THE CAUCHY STEP LIES OUTSIDE THE TRUST REGION -- C *** STEP = SCALED CAUCHY STEP *** C T = -V(RADIUS) / GNORM V(GRDFAC) = T V(STPPAR) = ONE + CNORM / V(RADIUS) V(GTSTEP) = -V(RADIUS) * GNORM V(PREDUC) = V(RADIUS)*(GNORM - HALF*V(RADIUS)*(V(GTHG)/GNORM)**2) DO 60 I = 1, N 60 STEP(I) = T * DIG(I) GO TO 999 C C *** COMPUTE DOGLEG STEP BETWEEN CAUCHY AND RELAXED NEWTON *** C *** FEMUR = RELAXED NEWTON STEP MINUS CAUCHY STEP *** C 70 CTRNWT = CFACT * RELAX * GHINVG / GNORM C *** CTRNWT = INNER PROD. OF CAUCHY AND RELAXED NEWTON STEPS, C *** SCALED BY GNORM**-1. T1 = CTRNWT - GNORM*CFACT**2 C *** T1 = INNER PROD. OF FEMUR AND CAUCHY STEP, SCALED BY C *** GNORM**-1. T2 = V(RADIUS)*(V(RADIUS)/GNORM) - GNORM*CFACT**2 T = RELAX * NWTNRM FEMNSQ = (T/GNORM)*T - CTRNWT - T1 C *** FEMNSQ = SQUARE OF 2-NORM OF FEMUR, SCALED BY GNORM**-1. T = T2 / (T1 + DSQRT(T1**2 + FEMNSQ*T2)) C *** DOGLEG STEP = CAUCHY STEP + T * FEMUR. T1 = (T - ONE) * CFACT V(GRDFAC) = T1 T2 = -T * RELAX V(NWTFAC) = T2 V(STPPAR) = TWO - T V(GTSTEP) = T1*GNORM**2 + T2*GHINVG V(PREDUC) = -T1*GNORM * ((T2 + ONE)*GNORM) 1 - T2 * (ONE + HALF*T2)*GHINVG 2 - HALF * (V(GTHG)*T1)**2 DO 80 I = 1, N 80 STEP(I) = T1*DIG(I) + T2*NWTSTP(I) C 999 RETURN C *** LAST LINE OF DD7DOG FOLLOWS *** END PyBDSF-1.10.1/src/port3/dd7dup.f000066400000000000000000000021311420247104600160120ustar00rootroot00000000000000 SUBROUTINE DD7DUP(D, HDIAG, IV, LIV, LV, N, V) C C *** UPDATE SCALE VECTOR D FOR DMNH *** C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, N INTEGER IV(LIV) DOUBLE PRECISION D(N), HDIAG(N), V(LV) C C *** LOCAL VARIABLES *** C INTEGER DTOLI, D0I, I DOUBLE PRECISION T, VDFAC C C *** INTRINSIC FUNCTIONS *** C/+ DOUBLE PRECISION DSQRT C/ C *** SUBSCRIPTS FOR IV AND V *** C INTEGER DFAC, DTOL, DTYPE, NITER C/6 C DATA DFAC/41/, DTOL/59/, DTYPE/16/, NITER/31/ C/7 PARAMETER (DFAC=41, DTOL=59, DTYPE=16, NITER=31) C/ C C------------------------------- BODY -------------------------------- C I = IV(DTYPE) IF (I .EQ. 1) GO TO 10 IF (IV(NITER) .GT. 0) GO TO 999 C 10 DTOLI = IV(DTOL) D0I = DTOLI + N VDFAC = V(DFAC) DO 20 I = 1, N T = DMAX1(DSQRT(DABS(HDIAG(I))), VDFAC*D(I)) IF (T .LT. V(DTOLI)) T = DMAX1(V(DTOLI), V(D0I)) D(I) = T DTOLI = DTOLI + 1 D0I = D0I + 1 20 CONTINUE C 999 RETURN C *** LAST CARD OF DD7DUP FOLLOWS *** END PyBDSF-1.10.1/src/port3/dd7mlp.f000066400000000000000000000014111420247104600160120ustar00rootroot00000000000000 SUBROUTINE DD7MLP(N, X, Y, Z, K) C C *** SET X = DIAG(Y)**K * Z C *** FOR X, Z = LOWER TRIANG. MATRICES STORED COMPACTLY BY ROW C *** K = 1 OR -1. C INTEGER N, K C/6 C DOUBLE PRECISION X(1), Y(N), Z(1) C/7 DOUBLE PRECISION X(*), Y(N), Z(*) C/ INTEGER I, J, L DOUBLE PRECISION ONE, T DATA ONE/1.D+0/ C L = 1 IF (K .GE. 0) GO TO 30 DO 20 I = 1, N T = ONE / Y(I) DO 10 J = 1, I X(L) = T * Z(L) L = L + 1 10 CONTINUE 20 CONTINUE GO TO 999 C 30 DO 50 I = 1, N T = Y(I) DO 40 J = 1, I X(L) = T * Z(L) L = L + 1 40 CONTINUE 50 CONTINUE 999 RETURN C *** LAST CARD OF DD7MLP FOLLOWS *** END PyBDSF-1.10.1/src/port3/dd7tpr.f000066400000000000000000000017721420247104600160410ustar00rootroot00000000000000 DOUBLE PRECISION FUNCTION DD7TPR(P, X, Y) C C *** RETURN THE INNER PRODUCT OF THE P-VECTORS X AND Y. *** C INTEGER P DOUBLE PRECISION X(P), Y(P) C INTEGER I DOUBLE PRECISION ONE, SQTETA, T, ZERO DOUBLE PRECISION DR7MDC EXTERNAL DR7MDC C C *** DR7MDC(2) RETURNS A MACHINE-DEPENDENT CONSTANT, SQTETA, WHICH C *** IS SLIGHTLY LARGER THAN THE SMALLEST POSITIVE NUMBER THAT C *** CAN BE SQUARED WITHOUT UNDERFLOWING. C C/6 C DATA ONE/1.D+0/, SQTETA/0.D+0/, ZERO/0.D+0/ C/7 PARAMETER (ONE=1.D+0, ZERO=0.D+0) DATA SQTETA/0.D+0/ C/ C DD7TPR = ZERO IF (P .LE. 0) GO TO 999 IF (SQTETA .EQ. ZERO) SQTETA = DR7MDC(2) DO 20 I = 1, P T = DMAX1(DABS(X(I)), DABS(Y(I))) IF (T .GT. ONE) GO TO 10 IF (T .LT. SQTETA) GO TO 20 T = (X(I)/SQTETA)*Y(I) IF (DABS(T) .LT. SQTETA) GO TO 20 10 DD7TPR = DD7TPR + X(I)*Y(I) 20 CONTINUE C 999 RETURN C *** LAST LINE OF DD7TPR FOLLOWS *** END PyBDSF-1.10.1/src/port3/dd7upd.f000066400000000000000000000035621420247104600160230ustar00rootroot00000000000000 SUBROUTINE DD7UPD(D, DR, IV, LIV, LV, N, ND, NN, N2, P, V) C C *** UPDATE SCALE VECTOR D FOR NL2IT *** C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, N, ND, NN, N2, P INTEGER IV(LIV) DOUBLE PRECISION D(P), DR(ND,P), V(LV) C DIMENSION V(*) C C *** LOCAL VARIABLES *** C INTEGER D0, I, JCN0, JCN1, JCNI, JTOL0, JTOLI, K, SII DOUBLE PRECISION T, VDFAC C C *** CONSTANTS *** C DOUBLE PRECISION ZERO C C *** INTRINSIC FUNCTIONS *** C/+ DOUBLE PRECISION DSQRT C/ C *** EXTERNAL SUBROUTINE *** C EXTERNAL DV7SCP C C DV7SCP... SETS ALL COMPONENTS OF A VECTOR TO A SCALAR. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER DFAC, DTYPE, JCN, JTOL, NITER, S C/6 C DATA DFAC/41/, DTYPE/16/, JCN/66/, JTOL/59/, NITER/31/, S/62/ C/7 PARAMETER (DFAC=41, DTYPE=16, JCN=66, JTOL=59, NITER=31, S=62) C/ C C/6 C DATA ZERO/0.D+0/ C/7 PARAMETER (ZERO=0.D+0) C/ C C------------------------------- BODY -------------------------------- C IF (IV(DTYPE) .NE. 1 .AND. IV(NITER) .GT. 0) GO TO 999 JCN1 = IV(JCN) JCN0 = IABS(JCN1) - 1 IF (JCN1 .LT. 0) GO TO 10 IV(JCN) = -JCN1 CALL DV7SCP(P, V(JCN1), ZERO) 10 DO 30 I = 1, P JCNI = JCN0 + I T = V(JCNI) DO 20 K = 1, NN 20 T = DMAX1(T, DABS(DR(K,I))) V(JCNI) = T 30 CONTINUE IF (N2 .LT. N) GO TO 999 VDFAC = V(DFAC) JTOL0 = IV(JTOL) - 1 D0 = JTOL0 + P SII = IV(S) - 1 DO 50 I = 1, P SII = SII + I JCNI = JCN0 + I T = V(JCNI) IF (V(SII) .GT. ZERO) T = DMAX1(DSQRT(V(SII)), T) JTOLI = JTOL0 + I D0 = D0 + 1 IF (T .LT. V(JTOLI)) T = DMAX1(V(D0), V(JTOLI)) D(I) = DMAX1(VDFAC*D(I), T) 50 CONTINUE C 999 RETURN C *** LAST CARD OF DD7UPD FOLLOWS *** END PyBDSF-1.10.1/src/port3/deigen.f000066400000000000000000000056451420247104600160730ustar00rootroot00000000000000 SUBROUTINE DEIGEN(NM,N,A,WR,WI,Z) DOUBLE PRECISION A(NM,N),WR(N),WI(N),Z(NM,N) C COMMON/CSTAK/D DOUBLE PRECISION D(500) C C DEIGEN FINDS THE EIGENVALUES AND EIGENVECTORS C OF A DOUBLE-PRECISION MATRIX (NOT IMAGINARY) BY C CALLING THE SEQUENCE OF SUBROUTINES C DORTHE,DORTRA, AND DHQR2, WHICH, IN TURN, ARE C THE EISPACK ROUTINES ORTHES, ORTRAN, AND HQR2, C ADJUSTED FOR DOUBLE PRECISION. C C ON INPUT - C C NM - AN INTEGER INPUT VARIABLE SET EQUAL TO C THE ROW DIMENSION OF THE TWO-DIMENSIONAL ARRAYS C A AND Z AS SPECIFIED IN THE DIMENSION STATEMENTS C FOR A AND Z IN THE CALLING PROGRAM. C C N - AN INTEGER INPUT VARIABLE SET EQUAL TO THE C ORDER OF THE MATRIX A. C C N MUST NOT BE GREATER THAN NM. C C A - THE MATRIX, A DOUBLE-PRECISION TWO-DIMENSIONAL C ARRAY WITH ROW DIMENSION NM AND COLUMN C DIMENSION AT LEAST N. C C A IS OVERWRITTEN. C C C C ON OUTPUT - C C WR - A DOUBLE-PRECISION ARRAY OF DIMENSION C AT LEAST N CONTAINING THE REAL PARTS OF THE EIGENVALUES C C WI - A DOUBLE-PRECISION ARRAY OF DIMENSION C AT LEAST N CONTAINING THE IMAGINARY PARTS OF THE EIGENVALUES. C C THE EIGENVALUES ARE UNORDERED EXCEPT THAT C COMPLEX CONJUGATE PAIRS OF EIGENVALUES C APPEAR CONSECUTIVELY WITH THE EIGENVALUE HAVING C THE POSITIVE IMAGINARY PART FIRST. C C Z - A DOUBLE-PRECISION TWO-DIMENSIONAL ARRAY C WITH ROW DIMENSION NM AND COLUMN DIMENSION C AT LEAST N CONTAINING THE REAL AND IMAGINARY PARTS C OF THE EIGENVECTORS. C C IF THE J-TH EIGENVALUE IS REAL, THE J-TH C COLUMN OF Z CONTAINS ITS EIGENVECTOR. C C IF THE J-TH EIGENVALUE IS COMPLEX WITH C POSITIVE REAL PART, THE J-TH AND (J+1)-TH C COLUMNS OF Z CONTAIN THE REAL AND IMAGINARY C PARTS OF ITS EIGENVECTOR. C C THE CONJUGATE OF THIS VECTOR IS THE C EIGENVECTOR FOR THE CONJUGATE EIGENVALUE. C THE EIGENVECTORS ARE NOT NORMALIZED. C C C ERROR STATES - C C 1 - N IS GREATER THAN NM C C K - THE K-TH EIGENVALUE COULD NOT BE COMPUTED C WITHIN 30 ITERATIONS. C C THE EIGENVALUES IN THE WR AND WRI ARRAYS C SHOULD BE CORRECT FOR INDICES C K+1, K+2,...,N, BUT NO EIGENVECTORS ARE COMPUTED. C C C C C CHECK FOR INPUT ERROR IN N C C/6S C IF (N .GT. NM) CALL SETERR( C 1 29HDEIGEN - N IS GREATER THAN NM,29,1,2) C/7S IF (N .GT. NM) CALL SETERR( 1 'DEIGEN - N IS GREATER THAN NM',29,1,2) C/ C C ALLOCATE A SCRATCH VECTOR IORT = ISTKGT(N,4) C CALL DORTHE (NM,N,1,N,A,D(IORT)) CALL DORTRA (NM,N,1,N,A,D(IORT),Z) CALL DHQR2 (NM,N,1,N,A,WR,WI,Z,IERR) C IF (IERR .NE. 0) GO TO 10 CALL ISTKRL(1) RETURN C/6S C 10 CALL SETERR( C 1 34HDEIGEN - FAILED ON THAT EIGENVALUE,34,IERR,1) C/7S 10 CALL SETERR( 1 'DEIGEN - FAILED ON THAT EIGENVALUE',34,IERR,1) C/ C CALL ISTKRL(1) RETURN END PyBDSF-1.10.1/src/port3/df7dhb.f000066400000000000000000000164201420247104600157670ustar00rootroot00000000000000 SUBROUTINE DF7DHB(B, D, G, IRT, IV, LIV, LV, P, V, X) C C *** COMPUTE FINITE-DIFFERENCE HESSIAN, STORE IT IN V STARTING C *** AT V(IV(FDH)) = V(-IV(H)). HONOR SIMPLE BOUNDS IN B. C C *** IF IV(COVREQ) .GE. 0 THEN DF7DHB USES GRADIENT DIFFERENCES, C *** OTHERWISE FUNCTION DIFFERENCES. STORAGE IN V IS AS IN DG7LIT. C C IRT VALUES... C 1 = COMPUTE FUNCTION VALUE, I.E., V(F). C 2 = COMPUTE G. C 3 = DONE. C C C *** PARAMETER DECLARATIONS *** C INTEGER IRT, LIV, LV, P INTEGER IV(LIV) DOUBLE PRECISION B(2,P), D(P), G(P), V(LV), X(P) C C *** LOCAL VARIABLES *** C LOGICAL OFFSID INTEGER GSAVE1, HES, HMI, HPI, HPM, I, K, KIND, L, M, MM1, MM1O2, 1 NEWM1, PP1O2, STPI, STPM, STP0 DOUBLE PRECISION DEL, DEL0, T, XM, XM1 DOUBLE PRECISION HALF, HLIM, ONE, TWO, ZERO C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DV7CPY, DV7SCP C C DV7CPY.... COPY ONE VECTOR TO ANOTHER. C DV7SCP... COPY SCALAR TO ALL COMPONENTS OF A VECTOR. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER COVREQ, DELTA, DELTA0, DLTFDC, F, FDH, FX, H, KAGQT, MODE, 1 NFGCAL, SAVEI, SWITCH, TOOBIG, W, XMSAVE C C/6 C DATA HALF/0.5D+0/, HLIM/0.1D+0/, ONE/1.D+0/, TWO/2.D+0/, C 1 ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, HLIM=0.1D+0, ONE=1.D+0, TWO=2.D+0, 1 ZERO=0.D+0) C/ C C/6 C DATA COVREQ/15/, DELTA/52/, DELTA0/44/, DLTFDC/42/, F/10/, C 1 FDH/74/, FX/53/, H/56/, KAGQT/33/, MODE/35/, NFGCAL/7/, C 2 SAVEI/63/, SWITCH/12/, TOOBIG/2/, W/65/, XMSAVE/51/ C/7 PARAMETER (COVREQ=15, DELTA=52, DELTA0=44, DLTFDC=42, F=10, 1 FDH=74, FX=53, H=56, KAGQT=33, MODE=35, NFGCAL=7, 2 SAVEI=63, SWITCH=12, TOOBIG=2, W=65, XMSAVE=51) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IRT = 4 KIND = IV(COVREQ) M = IV(MODE) IF (M .GT. 0) GO TO 10 HES = IABS(IV(H)) IV(H) = -HES IV(FDH) = 0 IV(KAGQT) = -1 V(FX) = V(F) C *** SUPPLY ZEROS IN CASE B(1,I) = B(2,I) FOR SOME I *** CALL DV7SCP(P*(P+1)/2, V(HES), ZERO) 10 IF (M .GT. P) GO TO 999 IF (KIND .LT. 0) GO TO 120 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN USING BOTH FUNCTION AND C *** GRADIENT VALUES. C GSAVE1 = IV(W) + P IF (M .GT. 0) GO TO 20 C *** FIRST CALL ON DF7DHB. SET GSAVE = G, TAKE FIRST STEP *** CALL DV7CPY(P, V(GSAVE1), G) IV(SWITCH) = IV(NFGCAL) GO TO 80 C 20 DEL = V(DELTA) X(M) = V(XMSAVE) IF (IV(TOOBIG) .EQ. 0) GO TO 30 C C *** HANDLE OVERSIZE V(DELTA) *** C DEL0 = V(DELTA0) * DMAX1(ONE/D(M), DABS(X(M))) DEL = HALF * DEL IF (DABS(DEL/DEL0) .LE. HLIM) GO TO 140 C 30 HES = -IV(H) C C *** SET G = (G - GSAVE)/DEL *** C DEL = ONE / DEL DO 40 I = 1, P G(I) = DEL * (G(I) - V(GSAVE1)) GSAVE1 = GSAVE1 + 1 40 CONTINUE C C *** ADD G AS NEW COL. TO FINITE-DIFF. HESSIAN MATRIX *** C K = HES + M*(M-1)/2 L = K + M - 2 IF (M .EQ. 1) GO TO 60 C C *** SET H(I,M) = 0.5 * (H(I,M) + G(I)) FOR I = 1 TO M-1 *** C MM1 = M - 1 DO 50 I = 1, MM1 IF (B(1,I) .LT. B(2,I)) V(K) = HALF * (V(K) + G(I)) K = K + 1 50 CONTINUE C C *** ADD H(I,M) = G(I) FOR I = M TO P *** C 60 L = L + 1 DO 70 I = M, P IF (B(1,I) .LT. B(2,I)) V(L) = G(I) L = L + I 70 CONTINUE C 80 M = M + 1 IV(MODE) = M IF (M .GT. P) GO TO 340 IF (B(1,M) .GE. B(2,M)) GO TO 80 C C *** CHOOSE NEXT FINITE-DIFFERENCE STEP, RETURN TO GET G THERE *** C DEL = V(DELTA0) * DMAX1(ONE/D(M), DABS(X(M))) XM = X(M) IF (XM .LT. ZERO) GO TO 90 XM1 = XM + DEL IF (XM1 .LE. B(2,M)) GO TO 110 XM1 = XM - DEL IF (XM1 .GE. B(1,M)) GO TO 100 GO TO 280 90 XM1 = XM - DEL IF (XM1 .GE. B(1,M)) GO TO 100 XM1 = XM + DEL IF (XM1 .LE. B(2,M)) GO TO 110 GO TO 280 C 100 DEL = -DEL 110 V(XMSAVE) = XM X(M) = XM1 V(DELTA) = DEL IRT = 2 GO TO 999 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN USING FUNCTION VALUES ONLY. C 120 STP0 = IV(W) + P - 1 MM1 = M - 1 MM1O2 = M*MM1/2 HES = -IV(H) IF (M .GT. 0) GO TO 130 C *** FIRST CALL ON DF7DHB. *** IV(SAVEI) = 0 GO TO 240 C 130 IF (IV(TOOBIG) .EQ. 0) GO TO 150 C *** PUNT IN THE EVENT OF AN OVERSIZE STEP *** 140 IV(FDH) = -2 GO TO 350 150 I = IV(SAVEI) IF (I .GT. 0) GO TO 190 C C *** SAVE F(X + STP(M)*E(M)) IN H(P,M) *** C PP1O2 = P * (P-1) / 2 HPM = HES + PP1O2 + MM1 V(HPM) = V(F) C C *** START COMPUTING ROW M OF THE FINITE-DIFFERENCE HESSIAN H. *** C NEWM1 = 1 GO TO 260 160 HMI = HES + MM1O2 IF (MM1 .EQ. 0) GO TO 180 HPI = HES + PP1O2 DO 170 I = 1, MM1 T = ZERO IF (B(1,I) .LT. B(2,I)) T = V(FX) - (V(F) + V(HPI)) V(HMI) = T HMI = HMI + 1 HPI = HPI + 1 170 CONTINUE 180 V(HMI) = V(F) - TWO*V(FX) IF (OFFSID) V(HMI) = V(FX) - TWO*V(F) C C *** COMPUTE FUNCTION VALUES NEEDED TO COMPLETE ROW M OF H. *** C I = 0 GO TO 200 C 190 X(I) = V(DELTA) C C *** FINISH COMPUTING H(M,I) *** C STPI = STP0 + I HMI = HES + MM1O2 + I - 1 STPM = STP0 + M V(HMI) = (V(HMI) + V(F)) / (V(STPI)*V(STPM)) 200 I = I + 1 IF (I .GT. M) GO TO 230 IF (B(1,I) .LT. B(2,I)) GO TO 210 GO TO 200 C 210 IV(SAVEI) = I STPI = STP0 + I V(DELTA) = X(I) X(I) = X(I) + V(STPI) IRT = 1 IF (I .LT. M) GO TO 999 NEWM1 = 2 GO TO 260 220 X(M) = V(XMSAVE) - DEL IF (OFFSID) X(M) = V(XMSAVE) + TWO*DEL GO TO 999 C 230 IV(SAVEI) = 0 X(M) = V(XMSAVE) C 240 M = M + 1 IV(MODE) = M IF (M .GT. P) GO TO 330 IF (B(1,M) .LT. B(2,M)) GO TO 250 GO TO 240 C C *** PREPARE TO COMPUTE ROW M OF THE FINITE-DIFFERENCE HESSIAN H. C *** COMPUTE M-TH STEP SIZE STP(M), THEN RETURN TO OBTAIN C *** F(X + STP(M)*E(M)), WHERE E(M) = M-TH STD. UNIT VECTOR. C 250 V(XMSAVE) = X(M) NEWM1 = 3 260 XM = V(XMSAVE) DEL = V(DLTFDC) * DMAX1(ONE/D(M), DABS(XM)) XM1 = XM + DEL OFFSID = .FALSE. IF (XM1 .LE. B(2,M)) GO TO 270 OFFSID = .TRUE. XM1 = XM - DEL IF (XM - TWO*DEL .GE. B(1,M)) GO TO 300 GO TO 280 270 IF (XM-DEL .GE. B(1,M)) GO TO 290 OFFSID = .TRUE. IF (XM + TWO*DEL .LE. B(2,M)) GO TO 310 C 280 IV(FDH) = -2 GO TO 350 C 290 IF (XM .GE. ZERO) GO TO 310 XM1 = XM - DEL 300 DEL = -DEL 310 GO TO (160, 220, 320), NEWM1 320 X(M) = XM1 STPM = STP0 + M V(STPM) = DEL IRT = 1 GO TO 999 C C *** HANDLE SPECIAL CASE OF B(1,P) = B(2,P) -- CLEAR SCRATCH VALUES C *** FROM LAST ROW OF FDH... C 330 IF (B(1,P) .LT. B(2,P)) GO TO 340 I = HES + P*(P-1)/2 CALL DV7SCP(P, V(I), ZERO) C C *** RESTORE V(F), ETC. *** C 340 IV(FDH) = HES 350 V(F) = V(FX) IRT = 3 IF (KIND .LT. 0) GO TO 999 IV(NFGCAL) = IV(SWITCH) GSAVE1 = IV(W) + P CALL DV7CPY(P, G, V(GSAVE1)) GO TO 999 C 999 RETURN C *** LAST LINE OF DF7DHB FOLLOWS *** END PyBDSF-1.10.1/src/port3/df7hes.f000066400000000000000000000142171420247104600160130ustar00rootroot00000000000000 SUBROUTINE DF7HES(D, G, IRT, IV, LIV, LV, P, V, X) C C *** COMPUTE FINITE-DIFFERENCE HESSIAN, STORE IT IN V STARTING C *** AT V(IV(FDH)) = V(-IV(H)). C C *** IF IV(COVREQ) .GE. 0 THEN DF7HES USES GRADIENT DIFFERENCES, C *** OTHERWISE FUNCTION DIFFERENCES. STORAGE IN V IS AS IN DG7LIT. C C IRT VALUES... C 1 = COMPUTE FUNCTION VALUE, I.E., V(F). C 2 = COMPUTE G. C 3 = DONE. C C C *** PARAMETER DECLARATIONS *** C INTEGER IRT, LIV, LV, P INTEGER IV(LIV) DOUBLE PRECISION D(P), G(P), V(LV), X(P) C C *** LOCAL VARIABLES *** C INTEGER GSAVE1, HES, HMI, HPI, HPM, I, K, KIND, L, M, MM1, MM1O2, 1 PP1O2, STPI, STPM, STP0 DOUBLE PRECISION DEL, HALF, NEGPT5, ONE, TWO, ZERO C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DV7CPY C C DV7CPY.... COPY ONE VECTOR TO ANOTHER. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER COVREQ, DELTA, DELTA0, DLTFDC, F, FDH, FX, H, KAGQT, MODE, 1 NFGCAL, SAVEI, SWITCH, TOOBIG, W, XMSAVE C C/6 C DATA HALF/0.5D+0/, NEGPT5/-0.5D+0/, ONE/1.D+0/, TWO/2.D+0/, C 1 ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, NEGPT5=-0.5D+0, ONE=1.D+0, TWO=2.D+0, 1 ZERO=0.D+0) C/ C C/6 C DATA COVREQ/15/, DELTA/52/, DELTA0/44/, DLTFDC/42/, F/10/, C 1 FDH/74/, FX/53/, H/56/, KAGQT/33/, MODE/35/, NFGCAL/7/, C 2 SAVEI/63/, SWITCH/12/, TOOBIG/2/, W/65/, XMSAVE/51/ C/7 PARAMETER (COVREQ=15, DELTA=52, DELTA0=44, DLTFDC=42, F=10, 1 FDH=74, FX=53, H=56, KAGQT=33, MODE=35, NFGCAL=7, 2 SAVEI=63, SWITCH=12, TOOBIG=2, W=65, XMSAVE=51) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IRT = 4 KIND = IV(COVREQ) M = IV(MODE) IF (M .GT. 0) GO TO 10 IV(H) = -IABS(IV(H)) IV(FDH) = 0 IV(KAGQT) = -1 V(FX) = V(F) 10 IF (M .GT. P) GO TO 999 IF (KIND .LT. 0) GO TO 110 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN USING BOTH FUNCTION AND C *** GRADIENT VALUES. C GSAVE1 = IV(W) + P IF (M .GT. 0) GO TO 20 C *** FIRST CALL ON DF7HES. SET GSAVE = G, TAKE FIRST STEP *** CALL DV7CPY(P, V(GSAVE1), G) IV(SWITCH) = IV(NFGCAL) GO TO 90 C 20 DEL = V(DELTA) X(M) = V(XMSAVE) IF (IV(TOOBIG) .EQ. 0) GO TO 40 C C *** HANDLE OVERSIZE V(DELTA) *** C IF (DEL*X(M) .GT. ZERO) GO TO 30 C *** WE ALREADY TRIED SHRINKING V(DELTA), SO QUIT *** IV(FDH) = -2 GO TO 220 C C *** TRY SHRINKING V(DELTA) *** 30 DEL = NEGPT5 * DEL GO TO 100 C 40 HES = -IV(H) C C *** SET G = (G - GSAVE)/DEL *** C DO 50 I = 1, P G(I) = (G(I) - V(GSAVE1)) / DEL GSAVE1 = GSAVE1 + 1 50 CONTINUE C C *** ADD G AS NEW COL. TO FINITE-DIFF. HESSIAN MATRIX *** C K = HES + M*(M-1)/2 L = K + M - 2 IF (M .EQ. 1) GO TO 70 C C *** SET H(I,M) = 0.5 * (H(I,M) + G(I)) FOR I = 1 TO M-1 *** C MM1 = M - 1 DO 60 I = 1, MM1 V(K) = HALF * (V(K) + G(I)) K = K + 1 60 CONTINUE C C *** ADD H(I,M) = G(I) FOR I = M TO P *** C 70 L = L + 1 DO 80 I = M, P V(L) = G(I) L = L + I 80 CONTINUE C 90 M = M + 1 IV(MODE) = M IF (M .GT. P) GO TO 210 C C *** CHOOSE NEXT FINITE-DIFFERENCE STEP, RETURN TO GET G THERE *** C DEL = V(DELTA0) * DMAX1(ONE/D(M), DABS(X(M))) IF (X(M) .LT. ZERO) DEL = -DEL V(XMSAVE) = X(M) 100 X(M) = X(M) + DEL V(DELTA) = DEL IRT = 2 GO TO 999 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN USING FUNCTION VALUES ONLY. C 110 STP0 = IV(W) + P - 1 MM1 = M - 1 MM1O2 = M*MM1/2 IF (M .GT. 0) GO TO 120 C *** FIRST CALL ON DF7HES. *** IV(SAVEI) = 0 GO TO 200 C 120 I = IV(SAVEI) HES = -IV(H) IF (I .GT. 0) GO TO 180 IF (IV(TOOBIG) .EQ. 0) GO TO 140 C C *** HANDLE OVERSIZE STEP *** C STPM = STP0 + M DEL = V(STPM) IF (DEL*X(XMSAVE) .GT. ZERO) GO TO 130 C *** WE ALREADY TRIED SHRINKING THE STEP, SO QUIT *** IV(FDH) = -2 GO TO 220 C C *** TRY SHRINKING THE STEP *** 130 DEL = NEGPT5 * DEL X(M) = X(XMSAVE) + DEL V(STPM) = DEL IRT = 1 GO TO 999 C C *** SAVE F(X + STP(M)*E(M)) IN H(P,M) *** C 140 PP1O2 = P * (P-1) / 2 HPM = HES + PP1O2 + MM1 V(HPM) = V(F) C C *** START COMPUTING ROW M OF THE FINITE-DIFFERENCE HESSIAN H. *** C HMI = HES + MM1O2 IF (MM1 .EQ. 0) GO TO 160 HPI = HES + PP1O2 DO 150 I = 1, MM1 V(HMI) = V(FX) - (V(F) + V(HPI)) HMI = HMI + 1 HPI = HPI + 1 150 CONTINUE 160 V(HMI) = V(F) - TWO*V(FX) C C *** COMPUTE FUNCTION VALUES NEEDED TO COMPLETE ROW M OF H. *** C I = 1 C 170 IV(SAVEI) = I STPI = STP0 + I V(DELTA) = X(I) X(I) = X(I) + V(STPI) IF (I .EQ. M) X(I) = V(XMSAVE) - V(STPI) IRT = 1 GO TO 999 C 180 X(I) = V(DELTA) IF (IV(TOOBIG) .EQ. 0) GO TO 190 C *** PUNT IN THE EVENT OF AN OVERSIZE STEP *** IV(FDH) = -2 GO TO 220 C C *** FINISH COMPUTING H(M,I) *** C 190 STPI = STP0 + I HMI = HES + MM1O2 + I - 1 STPM = STP0 + M V(HMI) = (V(HMI) + V(F)) / (V(STPI)*V(STPM)) I = I + 1 IF (I .LE. M) GO TO 170 IV(SAVEI) = 0 X(M) = V(XMSAVE) C 200 M = M + 1 IV(MODE) = M IF (M .GT. P) GO TO 210 C C *** PREPARE TO COMPUTE ROW M OF THE FINITE-DIFFERENCE HESSIAN H. C *** COMPUTE M-TH STEP SIZE STP(M), THEN RETURN TO OBTAIN C *** F(X + STP(M)*E(M)), WHERE E(M) = M-TH STD. UNIT VECTOR. C DEL = V(DLTFDC) * DMAX1(ONE/D(M), DABS(X(M))) IF (X(M) .LT. ZERO) DEL = -DEL V(XMSAVE) = X(M) X(M) = X(M) + DEL STPM = STP0 + M V(STPM) = DEL IRT = 1 GO TO 999 C C *** RESTORE V(F), ETC. *** C 210 IV(FDH) = HES 220 V(F) = V(FX) IRT = 3 IF (KIND .LT. 0) GO TO 999 IV(NFGCAL) = IV(SWITCH) GSAVE1 = IV(W) + P CALL DV7CPY(P, G, V(GSAVE1)) GO TO 999 C 999 RETURN C *** LAST CARD OF DF7HES FOLLOWS *** END PyBDSF-1.10.1/src/port3/dg7itb.f000066400000000000000000000701441420247104600160140ustar00rootroot00000000000000 SUBROUTINE DG7ITB(B, D, G, IV, LIV, LV, P, PS, V, X, Y) C C *** CARRY OUT NL2SOL-LIKE ITERATIONS FOR GENERALIZED LINEAR *** C *** REGRESSION PROBLEMS (AND OTHERS OF SIMILAR STRUCTURE) *** C *** HAVING SIMPLE BOUNDS ON THE PARAMETERS BEING ESTIMATED. *** C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, P, PS INTEGER IV(LIV) DOUBLE PRECISION B(2,P), D(P), G(P), V(LV), X(P), Y(P) C C-------------------------- PARAMETER USAGE -------------------------- C C B.... VECTOR OF LOWER AND UPPER BOUNDS ON X. C D.... SCALE VECTOR. C IV... INTEGER VALUE ARRAY. C LIV.. LENGTH OF IV. MUST BE AT LEAST 80. C LH... LENGTH OF H = P*(P+1)/2. C LV... LENGTH OF V. MUST BE AT LEAST P*(3*P + 19)/2 + 7. C G.... GRADIENT AT X (WHEN IV(1) = 2). C HC... GAUSS-NEWTON HESSIAN AT X (WHEN IV(1) = 2). C P.... NUMBER OF PARAMETERS (COMPONENTS IN X). C PS... NUMBER OF NONZERO ROWS AND COLUMNS IN S. C V.... FLOATING-POINT VALUE ARRAY. C X.... PARAMETER VECTOR. C Y.... PART OF YIELD VECTOR (WHEN IV(1)= 2, SCRATCH OTHERWISE). C C *** DISCUSSION *** C C DG7ITB IS SIMILAR TO DG7LIT, EXCEPT FOR THE EXTRA PARAMETER B C -- DG7ITB ENFORCES THE BOUNDS B(1,I) .LE. X(I) .LE. B(2,I), C I = 1(1)P. C DG7ITB PERFORMS NL2SOL-LIKE ITERATIONS FOR A VARIETY OF C REGRESSION PROBLEMS THAT ARE SIMILAR TO NONLINEAR LEAST-SQUARES C IN THAT THE HESSIAN IS THE SUM OF TWO TERMS, A READILY-COMPUTED C FIRST-ORDER TERM AND A SECOND-ORDER TERM. THE CALLER SUPPLIES C THE FIRST-ORDER TERM OF THE HESSIAN IN HC (LOWER TRIANGLE, STORED C COMPACTLY BY ROWS), AND DG7ITB BUILDS AN APPROXIMATION, S, TO THE C SECOND-ORDER TERM. THE CALLER ALSO PROVIDES THE FUNCTION VALUE, C GRADIENT, AND PART OF THE YIELD VECTOR USED IN UPDATING S. C DG7ITB DECIDES DYNAMICALLY WHETHER OR NOT TO _USE_ S WHEN CHOOSING C THE NEXT STEP TO TRY... THE HESSIAN APPROXIMATION USED IS EITHER C HC ALONE (GAUSS-NEWTON MODEL) OR HC + S (AUGMENTED MODEL). C IF PS .LT. P, THEN ROWS AND COLUMNS PS+1...P OF S ARE KEPT C CONSTANT. THEY WILL BE ZERO UNLESS THE CALLER SETS IV(INITS) TO C 1 OR 2 AND SUPPLIES NONZERO VALUES FOR THEM, OR THE CALLER SETS C IV(INITS) TO 3 OR 4 AND THE FINITE-DIFFERENCE INITIAL S THEN C COMPUTED HAS NONZERO VALUES IN THESE ROWS. C C IF IV(INITS) IS 3 OR 4, THEN THE INITIAL S IS COMPUTED BY C FINITE DIFFERENCES. 3 MEANS _USE_ FUNCTION DIFFERENCES, 4 MEANS C _USE_ GRADIENT DIFFERENCES. FINITE DIFFERENCING IS DONE THE SAME C WAY AS IN COMPUTING A COVARIANCE MATRIX (WITH IV(COVREQ) = -1, -2, C 1, OR 2). C C FOR UPDATING S, DG7ITB ASSUMES THAT THE GRADIENT HAS THE FORM C OF A SUM OVER I OF RHO(I,X)*GRAD(R(I,X)), WHERE GRAD DENOTES THE C GRADIENT WITH RESPECT TO X. THE TRUE SECOND-ORDER TERM THEN IS C THE SUM OVER I OF RHO(I,X)*HESSIAN(R(I,X)). IF X = X0 + STEP, C THEN WE WISH TO UPDATE S SO THAT S*STEP IS THE SUM OVER I OF C RHO(I,X)*(GRAD(R(I,X)) - GRAD(R(I,X0))). THE CALLER MUST SUPPLY C PART OF THIS IN Y, NAMELY THE SUM OVER I OF C RHO(I,X)*GRAD(R(I,X0)), WHEN CALLING DG7ITB WITH IV(1) = 2 AND C IV(MODE) = 0 (WHERE MODE = 38). G THEN CONTANS THE OTHER PART, C SO THAT THE DESIRED YIELD VECTOR IS G - Y. IF PS .LT. P, THEN C THE ABOVE DISCUSSION APPLIES ONLY TO THE FIRST PS COMPONENTS OF C GRAD(R(I,X)), STEP, AND Y. C C PARAMETERS IV, P, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO DN2GB (AND NL2SOL), EXCEPT THAT V CAN BE SHORTER C (SINCE THE PART OF V THAT DN2GB USES FOR STORING D, J, AND R IS C NOT NEEDED). MOREOVER, COMPARED WITH DN2GB (AND NL2SOL), IV(1) C MAY HAVE THE TWO ADDITIONAL OUTPUT VALUES 1 AND 2, WHICH ARE C EXPLAINED BELOW, AS IS THE _USE_ OF IV(TOOBIG) AND IV(NFGCAL). C THE VALUES IV(D), IV(J), AND IV(R), WHICH ARE OUTPUT VALUES FROM C DN2GB (AND DN2FB), ARE NOT REFERENCED BY DG7ITB OR THE C SUBROUTINES IT CALLS. C C WHEN DG7ITB IS FIRST CALLED, I.E., WHEN DG7ITB IS CALLED WITH C IV(1) = 0 OR 12, V(F), G, AND HC NEED NOT BE INITIALIZED. TO C OBTAIN THESE STARTING VALUES, DG7ITB RETURNS FIRST WITH IV(1) = 1, C THEN WITH IV(1) = 2, WITH IV(MODE) = -1 IN BOTH CASES. ON C SUBSEQUENT RETURNS WITH IV(1) = 2, IV(MODE) = 0 IMPLIES THAT C Y MUST ALSO BE SUPPLIED. (NOTE THAT Y IS USED FOR SCRATCH -- ITS C INPUT CONTENTS ARE LOST. BY CONTRAST, HC IS NEVER CHANGED.) C ONCE CONVERGENCE HAS BEEN OBTAINED, IV(RDREQ) AND IV(COVREQ) MAY C IMPLY THAT A FINITE-DIFFERENCE HESSIAN SHOULD BE COMPUTED FOR USE C IN COMPUTING A COVARIANCE MATRIX. IN THIS CASE DG7ITB WILL MAKE C A NUMBER OF RETURNS WITH IV(1) = 1 OR 2 AND IV(MODE) POSITIVE. C WHEN IV(MODE) IS POSITIVE, Y SHOULD NOT BE CHANGED. C C IV(1) = 1 MEANS THE CALLER SHOULD SET V(F) (I.E., V(10)) TO F(X), THE C FUNCTION VALUE AT X, AND CALL DG7ITB AGAIN, HAVING CHANGED C NONE OF THE OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) C CANNOT BE EVALUATED (E.G. IF OVERFLOW WOULD OCCUR), WHICH C MAY HAPPEN BECAUSE OF AN OVERSIZED STEP. IN THIS CASE C THE CALLER SHOULD SET IV(TOOBIG) = IV(2) TO 1, WHICH WILL C CAUSE DG7ITB TO IGNORE V(F) AND TRY A SMALLER STEP. NOTE C THAT THE CURRENT FUNCTION EVALUATION COUNT IS AVAILABLE C IN IV(NFCALL) = IV(6). THIS MAY BE USED TO IDENTIFY C WHICH COPY OF SAVED INFORMATION SHOULD BE USED IN COM- C PUTING G, HC, AND Y THE NEXT TIME DG7ITB RETURNS WITH C IV(1) = 2. SEE MLPIT FOR AN EXAMPLE OF THIS. C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT OF F AT C X. THE CALLER SHOULD ALSO SET HC TO THE GAUSS-NEWTON C HESSIAN AT X. IF IV(MODE) = 0, THEN THE CALLER SHOULD C ALSO COMPUTE THE PART OF THE YIELD VECTOR DESCRIBED ABOVE. C THE CALLER SHOULD THEN CALL DG7ITB AGAIN (WITH IV(1) = 2). C THE CALLER MAY ALSO CHANGE D AT THIS TIME, BUT SHOULD NOT C CHANGE X. NOTE THAT IV(NFGCAL) = IV(7) CONTAINS THE C VALUE THAT IV(NFCALL) HAD DURING THE RETURN WITH C IV(1) = 1 IN WHICH X HAD THE SAME VALUE AS IT NOW HAS. C IV(NFGCAL) IS EITHER IV(NFCALL) OR IV(NFCALL) - 1. MLPIT C IS AN EXAMPLE WHERE THIS INFORMATION IS USED. IF G OR HC C CANNOT BE EVALUATED AT X, THEN THE CALLER MAY SET C IV(NFGCAL) TO 0, IN WHICH CASE DG7ITB WILL RETURN WITH C IV(1) = 15. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C (SEE NL2SOL FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C LOGICAL HAVQTR, HAVRM INTEGER DUMMY, DIG1, G01, H1, HC1, I, I1, IPI, IPIV0, IPIV1, 1 IPIV2, IPN, J, K, L, LMAT1, LSTGST, P1, P1LEN, PP1, PP1O2, 2 QTR1, RMAT1, RSTRST, STEP1, STPMOD, S1, TD1, TEMP1, TEMP2, 3 TG1, W1, WLM1, X01 DOUBLE PRECISION E, GI, STTSST, T, T1, XI C C *** CONSTANTS *** C DOUBLE PRECISION HALF, NEGONE, ONE, ONEP2, ZERO C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX DOUBLE PRECISION DD7TPR, DRLDST, DV2NRM EXTERNAL DA7SST, DD7TPR, DF7DHB, DG7QSB,I7COPY, I7PNVR, I7SHFT, 1 DITSUM, DL7MSB, DL7SQR, DL7TVM,DL7VML,DPARCK, DQ7RSH, 2 DRLDST, DS7DMP, DS7IPR, DS7LUP, DS7LVM, STOPX, DV2NRM, 3 DV2AXY,DV7CPY, DV7IPR, DV7SCP, DV7VMP C C DA7SST.... ASSESSES CANDIDATE STEP. C DD7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C DF7DHB... COMPUTE FINITE-DIFFERENCE HESSIAN (FOR INIT. S MATRIX). C DG7QSB... COMPUTES GOLDFELD-QUANDT-TROTTER STEP (AUGMENTED MODEL). C I7COPY.... COPIES ONE INTEGER VECTOR TO ANOTHER. C I7PNVR... INVERTS PERMUTATION ARRAY. C I7SHFT... SHIFTS AN INTEGER VECTOR. C DITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C DL7MSB... COMPUTES LEVENBERG-MARQUARDT STEP (GAUSS-NEWTON MODEL). C DL7SQR... COMPUTES L * L**T FROM LOWER TRIANGULAR MATRIX L. C DL7TVM... COMPUTES L**T * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C DL7VML.... COMPUTES L * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C DPARCK.... CHECK VALIDITY OF IV AND V INPUT COMPONENTS. C DQ7RSH... SHIFTS A QR FACTORIZATION. C DRLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C DS7DMP... MULTIPLIES A SYM. MATRIX FORE AND AFT BY A DIAG. MATRIX. C DS7IPR... APPLIES PERMUTATION TO (LOWER TRIANG. OF) SYM. MATRIX. C DS7LUP... PERFORMS QUASI-NEWTON UPDATE ON COMPACTLY STORED LOWER TRI- C ANGLE OF A SYMMETRIC MATRIX. C DS7LVM... MULTIPLIES COMPACTLY STORED SYM. MATRIX TIMES VECTOR. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C DV2NRM... RETURNS THE 2-NORM OF A VECTOR. C DV2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7IPR... APPLIES A PERMUTATION TO A VECTOR. C DV7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C DV7VMP... MULTIPLIES (DIVIDES) VECTORS COMPONENTWISE. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, COSMIN, COVMAT, COVREQ, DGNORM, DIG, 1 DSTNRM, F, FDH, FDIF, FUZZ, F0, GTSTEP, H, HC, IERR, 2 INCFAC, INITS, IPIVOT, IRC, IVNEED, KAGQT, KALM, LMAT, 3 LMAX0, LMAXS, MODE, MODEL, MXFCAL, MXITER, NEXTIV, NEXTV, 4 NFCALL, NFGCAL, NFCOV, NGCOV, NGCALL, NITER, NVSAVE, P0, 5 PC, PERM, PHMXFC, PREDUC, QTR, RADFAC, RADINC, RADIUS, 6 RAD0, RDREQ, REGD, RELDX, RESTOR, RMAT, S, SIZE, STEP, 7 STGLIM, STPPAR, SUSED, SWITCH, TOOBIG, TUNER4, TUNER5, 8 VNEED, VSAVE, W, WSCALE, XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C *** (NOTE THAT P0 AND PC ARE STORED IN IV(G0) AND IV(STLSTG) RESP.) C C/6 C DATA CNVCOD/55/, COVMAT/26/, COVREQ/15/, DIG/37/, FDH/74/, H/56/, C 1 HC/71/, IERR/75/, INITS/25/, IPIVOT/76/, IRC/29/, IVNEED/3/, C 2 KAGQT/33/, KALM/34/, LMAT/42/, MODE/35/, MODEL/5/, C 3 MXFCAL/17/, MXITER/18/, NEXTIV/46/, NEXTV/47/, NFCALL/6/, C 4 NFGCAL/7/, NFCOV/52/, NGCOV/53/, NGCALL/30/, NITER/31/, C 5 P0/48/, PC/41/, PERM/58/, QTR/77/, RADINC/8/, RDREQ/57/, C 6 REGD/67/, RESTOR/9/, RMAT/78/, S/62/, STEP/40/, STGLIM/11/, C 7 SUSED/64/, SWITCH/12/, TOOBIG/2/, VNEED/4/, VSAVE/60/, W/65/, C 8 XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, COVMAT=26, COVREQ=15, DIG=37, FDH=74, H=56, 1 HC=71, IERR=75, INITS=25, IPIVOT=76, IRC=29, IVNEED=3, 2 KAGQT=33, KALM=34, LMAT=42, MODE=35, MODEL=5, 3 MXFCAL=17, MXITER=18, NEXTIV=46, NEXTV=47, NFCALL=6, 4 NFGCAL=7, NFCOV=52, NGCOV=53, NGCALL=30, NITER=31, 5 P0=48, PC=41, PERM=58, QTR=77, RADINC=8, RDREQ=57, 6 REGD=67, RESTOR=9, RMAT=78, S=62, STEP=40, STGLIM=11, 7 SUSED=64, SWITCH=12, TOOBIG=2, VNEED=4, VSAVE=60, W=65, 8 XIRC=13, X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA COSMIN/47/, DGNORM/1/, DSTNRM/2/, F/10/, FDIF/11/, FUZZ/45/, C 1 F0/13/, GTSTEP/4/, INCFAC/23/, LMAX0/35/, LMAXS/36/, C 2 NVSAVE/9/, PHMXFC/21/, PREDUC/7/, RADFAC/16/, RADIUS/8/, C 3 RAD0/9/, RELDX/17/, SIZE/55/, STPPAR/5/, TUNER4/29/, C 4 TUNER5/30/, WSCALE/56/ C/7 PARAMETER (COSMIN=47, DGNORM=1, DSTNRM=2, F=10, FDIF=11, FUZZ=45, 1 F0=13, GTSTEP=4, INCFAC=23, LMAX0=35, LMAXS=36, 2 NVSAVE=9, PHMXFC=21, PREDUC=7, RADFAC=16, RADIUS=8, 3 RAD0=9, RELDX=17, SIZE=55, STPPAR=5, TUNER4=29, 4 TUNER5=30, WSCALE=56) C/ C C C/6 C DATA HALF/0.5D+0/, NEGONE/-1.D+0/, ONE/1.D+0/, ONEP2/1.2D+0/, C 1 ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, NEGONE=-1.D+0, ONE=1.D+0, ONEP2=1.2D+0, 1 ZERO=0.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 50 IF (I .EQ. 2) GO TO 60 C IF (I .LT. 12) GO TO 10 IF (I .GT. 13) GO TO 10 IV(VNEED) = IV(VNEED) + P*(3*P + 25)/2 + 7 IV(IVNEED) = IV(IVNEED) + 4*P 10 CALL DPARCK(1, D, IV, LIV, LV, P, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 GO TO (360, 360, 360, 360, 360, 360, 240, 190, 240, 20, 20, 30), I C C *** STORAGE ALLOCATION *** C 20 PP1O2 = P * (P + 1) / 2 IV(S) = IV(LMAT) + PP1O2 IV(X0) = IV(S) + PP1O2 IV(STEP) = IV(X0) + 2*P IV(DIG) = IV(STEP) + 3*P IV(W) = IV(DIG) + 2*P IV(H) = IV(W) + 4*P + 7 IV(NEXTV) = IV(H) + PP1O2 IV(IPIVOT) = IV(PERM) + 3*P IV(NEXTIV) = IV(IPIVOT) + P IF (IV(1) .NE. 13) GO TO 30 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 30 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(STGLIM) = 2 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(COVMAT) = 0 IV(NFCOV) = 0 IV(NGCOV) = 0 IV(RADINC) = 0 IV(PC) = P V(RAD0) = ZERO V(STPPAR) = ZERO V(RADIUS) = V(LMAX0) / (ONE + V(PHMXFC)) C C *** CHECK CONSISTENCY OF B AND INITIALIZE IP ARRAY *** C IPI = IV(IPIVOT) DO 40 I = 1, P IV(IPI) = I IPI = IPI + 1 IF (B(1,I) .GT. B(2,I)) GO TO 680 40 CONTINUE C C *** SET INITIAL MODEL AND S MATRIX *** C IV(MODEL) = 1 IV(1) = 1 IF (IV(S) .LT. 0) GO TO 710 IF (IV(INITS) .GT. 1) IV(MODEL) = 2 S1 = IV(S) IF (IV(INITS) .EQ. 0 .OR. IV(INITS) .GT. 2) 1 CALL DV7SCP(P*(P+1)/2, V(S1), ZERO) GO TO 710 C C *** NEW FUNCTION VALUE *** C 50 IF (IV(MODE) .EQ. 0) GO TO 360 IF (IV(MODE) .GT. 0) GO TO 590 C IF (IV(TOOBIG) .EQ. 0) GO TO 690 IV(1) = 63 GO TO 999 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C 60 IF (IV(TOOBIG) .EQ. 0) GO TO 70 IV(1) = 65 GO TO 999 C C *** NEW GRADIENT *** C 70 IV(KALM) = -1 IV(KAGQT) = -1 IV(FDH) = 0 IF (IV(MODE) .GT. 0) GO TO 590 IF (IV(HC) .LE. 0 .AND. IV(RMAT) .LE. 0) GO TO 670 C C *** CHOOSE INITIAL PERMUTATION *** C IPI = IV(IPIVOT) IPN = IPI + P - 1 IPIV2 = IV(PERM) - 1 K = IV(PC) P1 = P PP1 = P + 1 RMAT1 = IV(RMAT) HAVRM = RMAT1 .GT. 0 QTR1 = IV(QTR) HAVQTR = QTR1 .GT. 0 C *** MAKE SURE V(QTR1) IS LEGAL (EVEN WHEN NOT REFERENCED) *** W1 = IV(W) IF (.NOT. HAVQTR) QTR1 = W1 + P C DO 100 I = 1, P I1 = IV(IPN) IPN = IPN - 1 IF (B(1,I1) .GE. B(2,I1)) GO TO 80 XI = X(I1) GI = G(I1) IF (XI .LE. B(1,I1) .AND. GI .GT. ZERO) GO TO 80 IF (XI .GE. B(2,I1) .AND. GI .LT. ZERO) GO TO 80 C *** DISALLOW CONVERGENCE IF X(I1) HAS JUST BEEN FREED *** J = IPIV2 + I1 IF (IV(J) .GT. K) IV(CNVCOD) = 0 GO TO 100 80 IF (I1 .GE. P1) GO TO 90 I1 = PP1 - I CALL I7SHFT(P1, I1, IV(IPI)) IF (HAVRM) 1 CALL DQ7RSH(I1, P1, HAVQTR, V(QTR1), V(RMAT1), V(W1)) 90 P1 = P1 - 1 100 CONTINUE IV(PC) = P1 C C *** COMPUTE V(DGNORM) (AN OUTPUT VALUE IF WE STOP NOW) *** C V(DGNORM) = ZERO IF (P1 .LE. 0) GO TO 110 DIG1 = IV(DIG) CALL DV7VMP(P, V(DIG1), G, D, -1) CALL DV7IPR(P, IV(IPI), V(DIG1)) V(DGNORM) = DV2NRM(P1, V(DIG1)) 110 IF (IV(CNVCOD) .NE. 0) GO TO 580 IF (IV(MODE) .EQ. 0) GO TO 510 IV(MODE) = 0 V(F0) = V(F) IF (IV(INITS) .LE. 2) GO TO 170 C C *** ARRANGE FOR FINITE-DIFFERENCE INITIAL S *** C IV(XIRC) = IV(COVREQ) IV(COVREQ) = -1 IF (IV(INITS) .GT. 3) IV(COVREQ) = 1 IV(CNVCOD) = 70 GO TO 600 C C *** COME TO NEXT STMT AFTER COMPUTING F.D. HESSIAN FOR INIT. S *** C 120 H1 = IV(FDH) IF (H1 .LE. 0) GO TO 660 IV(CNVCOD) = 0 IV(MODE) = 0 IV(NFCOV) = 0 IV(NGCOV) = 0 IV(COVREQ) = IV(XIRC) S1 = IV(S) PP1O2 = PS * (PS + 1) / 2 HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 130 CALL DV2AXY(PP1O2, V(S1), NEGONE, V(HC1), V(H1)) GO TO 140 130 RMAT1 = IV(RMAT) LMAT1 = IV(LMAT) CALL DL7SQR(P, V(LMAT1), V(RMAT1)) IPI = IV(IPIVOT) IPIV1 = IV(PERM) + P CALL I7PNVR(P, IV(IPIV1), IV(IPI)) CALL DS7IPR(P, IV(IPIV1), V(LMAT1)) CALL DV2AXY(PP1O2, V(S1), NEGONE, V(LMAT1), V(H1)) C C *** ZERO PORTION OF S CORRESPONDING TO FIXED X COMPONENTS *** C 140 DO 160 I = 1, P IF (B(1,I) .LT. B(2,I)) GO TO 160 K = S1 + I*(I-1)/2 CALL DV7SCP(I, V(K), ZERO) IF (I .GE. P) GO TO 170 K = K + 2*I - 1 I1 = I + 1 DO 150 J = I1, P V(K) = ZERO K = K + J 150 CONTINUE 160 CONTINUE C 170 IV(1) = 2 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 180 CALL DITSUM(D, G, IV, LIV, LV, P, V, X) 190 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 200 IV(1) = 10 GO TO 999 200 IV(NITER) = K + 1 C C *** UPDATE RADIUS *** C IF (K .EQ. 0) GO TO 220 STEP1 = IV(STEP) DO 210 I = 1, P V(STEP1) = D(I) * V(STEP1) STEP1 = STEP1 + 1 210 CONTINUE STEP1 = IV(STEP) T = V(RADFAC) * DV2NRM(P, V(STEP1)) IF (V(RADFAC) .LT. ONE .OR. T .GT. V(RADIUS)) V(RADIUS) = T C C *** INITIALIZE FOR START OF NEXT ITERATION *** C 220 X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(MODEL) C C *** COPY X TO X0 *** C CALL DV7CPY(P, V(X01), X) C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 230 IF (.NOT. STOPX(DUMMY)) GO TO 250 IV(1) = 11 GO TO 260 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 240 IF (V(F) .GE. V(F0)) GO TO 250 V(RADFAC) = ONE K = IV(NITER) GO TO 200 C 250 IF (IV(NFCALL) .LT. IV(MXFCAL) + IV(NFCOV)) GO TO 270 IV(1) = 9 260 IF (V(F) .GE. V(F0)) GO TO 999 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 500 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 270 STEP1 = IV(STEP) TG1 = IV(DIG) TD1 = TG1 + P X01 = IV(X0) W1 = IV(W) H1 = IV(H) P1 = IV(PC) IPI = IV(PERM) IPIV1 = IPI + P IPIV2 = IPIV1 + P IPIV0 = IV(IPIVOT) IF (IV(MODEL) .EQ. 2) GO TO 280 C C *** COMPUTE LEVENBERG-MARQUARDT STEP IF POSSIBLE... C RMAT1 = IV(RMAT) IF (RMAT1 .LE. 0) GO TO 280 QTR1 = IV(QTR) IF (QTR1 .LE. 0) GO TO 280 LMAT1 = IV(LMAT) WLM1 = W1 + P CALL DL7MSB(B, D, G, IV(IERR), IV(IPIV0), IV(IPIV1), 1 IV(IPIV2), IV(KALM), V(LMAT1), LV, P, IV(P0), 2 IV(PC), V(QTR1), V(RMAT1), V(STEP1), V(TD1), 3 V(TG1), V, V(W1), V(WLM1), X, V(X01)) C *** H IS STORED IN THE END OF W AND HAS JUST BEEN OVERWRITTEN, C *** SO WE MARK IT INVALID... IV(H) = -IABS(H1) C *** EVEN IF H WERE STORED ELSEWHERE, IT WOULD BE NECESSARY TO C *** MARK INVALID THE INFORMATION DG7QTS MAY HAVE STORED IN V... IV(KAGQT) = -1 GO TO 330 C 280 IF (H1 .GT. 0) GO TO 320 C C *** SET H TO D**-1 * (HC + T1*S) * D**-1. *** C P1LEN = P1*(P1+1)/2 H1 = -H1 IV(H) = H1 IV(FDH) = 0 IF (P1 .LE. 0) GO TO 320 C *** MAKE TEMPORARY PERMUTATION ARRAY *** CALL I7COPY(P, IV(IPI), IV(IPIV0)) J = IV(HC) IF (J .GT. 0) GO TO 290 J = H1 RMAT1 = IV(RMAT) CALL DL7SQR(P1, V(H1), V(RMAT1)) GO TO 300 290 CALL DV7CPY(P*(P+1)/2, V(H1), V(J)) CALL DS7IPR(P, IV(IPI), V(H1)) 300 IF (IV(MODEL) .EQ. 1) GO TO 310 LMAT1 = IV(LMAT) S1 = IV(S) CALL DV7CPY(P*(P+1)/2, V(LMAT1), V(S1)) CALL DS7IPR(P, IV(IPI), V(LMAT1)) CALL DV2AXY(P1LEN, V(H1), ONE, V(LMAT1), V(H1)) 310 CALL DV7CPY(P, V(TD1), D) CALL DV7IPR(P, IV(IPI), V(TD1)) CALL DS7DMP(P1, V(H1), V(H1), V(TD1), -1) IV(KAGQT) = -1 C C *** COMPUTE ACTUAL GOLDFELD-QUANDT-TROTTER STEP *** C 320 LMAT1 = IV(LMAT) CALL DG7QSB(B, D, V(H1), G, IV(IPI), IV(IPIV1), IV(IPIV2), 1 IV(KAGQT), V(LMAT1), LV, P, IV(P0), P1, V(STEP1), 2 V(TD1), V(TG1), V, V(W1), X, V(X01)) IF (IV(KALM) .GT. 0) IV(KALM) = 0 C 330 IF (IV(IRC) .NE. 6) GO TO 340 IF (IV(RESTOR) .NE. 2) GO TO 360 RSTRST = 2 GO TO 370 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 340 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 360 IF (IV(IRC) .NE. 5) GO TO 350 IF (V(RADFAC) .LE. ONE) GO TO 350 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 350 STEP1 = IV(STEP) X01 = IV(X0) CALL DV2AXY(P, V(STEP1), NEGONE, V(X01), X) IF (IV(RESTOR) .NE. 2) GO TO 360 RSTRST = 0 GO TO 370 C C *** COMPUTE F(X0 + STEP) *** C 350 X01 = IV(X0) STEP1 = IV(STEP) CALL DV2AXY(P, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 710 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 360 RSTRST = 3 370 X01 = IV(X0) V(RELDX) = DRLDST(P, D, X, V(X01)) CALL DA7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = X01 + P I = IV(RESTOR) + 1 GO TO (410, 380, 390, 400), I 380 CALL DV7CPY(P, X, V(X01)) GO TO 410 390 CALL DV7CPY(P, V(LSTGST), V(STEP1)) GO TO 410 400 CALL DV7CPY(P, V(STEP1), V(LSTGST)) CALL DV2AXY(P, X, ONE, V(STEP1), V(X01)) V(RELDX) = DRLDST(P, D, X, V(X01)) IV(RESTOR) = RSTRST C C *** IF NECESSARY, SWITCH MODELS *** C 410 IF (IV(SWITCH) .EQ. 0) GO TO 420 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(SUSED) + 2 L = IV(VSAVE) CALL DV7CPY(NVSAVE, V, V(L)) 420 L = IV(IRC) - 4 STPMOD = IV(MODEL) IF (L .GT. 0) GO TO (440,450,460,460,460,460,460,460,570,510), L C C *** DECIDE WHETHER TO CHANGE MODELS *** C E = V(PREDUC) - V(FDIF) S1 = IV(S) CALL DS7LVM(PS, Y, V(S1), V(STEP1)) STTSST = HALF * DD7TPR(PS, V(STEP1), Y) IF (IV(MODEL) .EQ. 1) STTSST = -STTSST IF (DABS(E + STTSST) * V(FUZZ) .GE. DABS(E)) GO TO 430 C C *** SWITCH MODELS *** C IV(MODEL) = 3 - IV(MODEL) IF (-2 .LT. L) GO TO 470 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(SUSED) + 2 L = IV(VSAVE) CALL DV7CPY(NVSAVE, V(L), V) GO TO 230 C 430 IF (-3 .LT. L) GO TO 470 C C *** RECOMPUTE STEP WITH DIFFERENT RADIUS *** C 440 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 230 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST C 450 V(RADIUS) = V(LMAXS) GO TO 270 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 460 IV(CNVCOD) = L IF (V(F) .GE. V(F0)) GO TO 580 IF (IV(XIRC) .EQ. 14) GO TO 580 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 470 IV(COVMAT) = 0 IV(REGD) = 0 C C *** SEE WHETHER TO SET V(RADFAC) BY GRADIENT TESTS *** C IF (IV(IRC) .NE. 3) GO TO 500 STEP1 = IV(STEP) TEMP1 = STEP1 + P TEMP2 = IV(X0) C C *** SET TEMP1 = HESSIAN * STEP FOR _USE_ IN GRADIENT TESTS *** C HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 480 CALL DS7LVM(P, V(TEMP1), V(HC1), V(STEP1)) GO TO 490 480 RMAT1 = IV(RMAT) IPIV0 = IV(IPIVOT) CALL DV7CPY(P, V(TEMP1), V(STEP1)) CALL DV7IPR(P, IV(IPIV0), V(TEMP1)) CALL DL7TVM(P, V(TEMP1), V(RMAT1), V(TEMP1)) CALL DL7VML(P, V(TEMP1), V(RMAT1), V(TEMP1)) IPIV1 = IV(PERM) + P CALL I7PNVR(P, IV(IPIV1), IV(IPIV0)) CALL DV7IPR(P, IV(IPIV1), V(TEMP1)) C 490 IF (STPMOD .EQ. 1) GO TO 500 S1 = IV(S) CALL DS7LVM(PS, V(TEMP2), V(S1), V(STEP1)) CALL DV2AXY(PS, V(TEMP1), ONE, V(TEMP2), V(TEMP1)) C C *** SAVE OLD GRADIENT AND COMPUTE NEW ONE *** C 500 IV(NGCALL) = IV(NGCALL) + 1 G01 = IV(W) CALL DV7CPY(P, V(G01), G) GO TO 690 C C *** INITIALIZATIONS -- G0 = G - G0, ETC. *** C 510 G01 = IV(W) CALL DV2AXY(P, V(G01), NEGONE, V(G01), G) STEP1 = IV(STEP) TEMP1 = STEP1 + P TEMP2 = IV(X0) IF (IV(IRC) .NE. 3) GO TO 540 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C C *** SET TEMP1 = D**-1 * (HESSIAN * STEP + (G(X0) - G(X))) *** C K = TEMP1 L = G01 DO 520 I = 1, P V(K) = (V(K) - V(L)) / D(I) K = K + 1 L = L + 1 520 CONTINUE C C *** DO GRADIENT TESTS *** C IF (DV2NRM(P, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) GO TO 530 IF (DD7TPR(P, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 540 530 V(RADFAC) = V(INCFAC) C C *** COMPUTE Y VECTOR NEEDED FOR UPDATING S *** C 540 CALL DV2AXY(PS, Y, NEGONE, Y, G) C C *** DETERMINE SIZING FACTOR V(SIZE) *** C C *** SET TEMP1 = S * STEP *** S1 = IV(S) CALL DS7LVM(PS, V(TEMP1), V(S1), V(STEP1)) C T1 = DABS(DD7TPR(PS, V(STEP1), V(TEMP1))) T = DABS(DD7TPR(PS, V(STEP1), Y)) V(SIZE) = ONE IF (T .LT. T1) V(SIZE) = T / T1 C C *** SET G0 TO WCHMTD CHOICE OF FLETCHER AND AL-BAALI *** C HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 550 CALL DS7LVM(PS, V(G01), V(HC1), V(STEP1)) GO TO 560 C 550 RMAT1 = IV(RMAT) IPIV0 = IV(IPIVOT) CALL DV7CPY(P, V(G01), V(STEP1)) I = G01 + PS IF (PS .LT. P) CALL DV7SCP(P-PS, V(I), ZERO) CALL DV7IPR(P, IV(IPIV0), V(G01)) CALL DL7TVM(P, V(G01), V(RMAT1), V(G01)) CALL DL7VML(P, V(G01), V(RMAT1), V(G01)) IPIV1 = IV(PERM) + P CALL I7PNVR(P, IV(IPIV1), IV(IPIV0)) CALL DV7IPR(P, IV(IPIV1), V(G01)) C 560 CALL DV2AXY(PS, V(G01), ONE, Y, V(G01)) C C *** UPDATE S *** C CALL DS7LUP(V(S1), V(COSMIN), PS, V(SIZE), V(STEP1), V(TEMP1), 1 V(TEMP2), V(G01), V(WSCALE), Y) IV(1) = 2 GO TO 180 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 570 IV(1) = 64 GO TO 999 C C C *** CONVERGENCE OBTAINED -- SEE WHETHER TO COMPUTE COVARIANCE *** C 580 IF (IV(RDREQ) .EQ. 0) GO TO 660 IF (IV(FDH) .NE. 0) GO TO 660 IF (IV(CNVCOD) .GE. 7) GO TO 660 IF (IV(REGD) .GT. 0) GO TO 660 IF (IV(COVMAT) .GT. 0) GO TO 660 IF (IABS(IV(COVREQ)) .GE. 3) GO TO 640 IF (IV(RESTOR) .EQ. 0) IV(RESTOR) = 2 GO TO 600 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN FOR COMPUTING COVARIANCE *** C 590 IV(RESTOR) = 0 600 CALL DF7DHB(B, D, G, I, IV, LIV, LV, P, V, X) GO TO (610, 620, 630), I 610 IV(NFCOV) = IV(NFCOV) + 1 IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 710 C 620 IV(NGCOV) = IV(NGCOV) + 1 IV(NGCALL) = IV(NGCALL) + 1 IV(NFGCAL) = IV(NFCALL) + IV(NGCOV) GO TO 690 C 630 IF (IV(CNVCOD) .EQ. 70) GO TO 120 GO TO 660 C 640 H1 = IABS(IV(H)) IV(FDH) = H1 IV(H) = -H1 HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 650 CALL DV7CPY(P*(P+1)/2, V(H1), V(HC1)) GO TO 660 650 RMAT1 = IV(RMAT) CALL DL7SQR(P, V(H1), V(RMAT1)) C 660 IV(MODE) = 0 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 GO TO 999 C C *** SPECIAL RETURN FOR MISSING HESSIAN INFORMATION -- BOTH C *** IV(HC) .LE. 0 AND IV(RMAT) .LE. 0 C 670 IV(1) = 1400 GO TO 999 C C *** INCONSISTENT B *** C 680 IV(1) = 82 GO TO 999 C C *** SAVE, THEN INITIALIZE IPIVOT ARRAY BEFORE COMPUTING G *** C 690 IV(1) = 2 J = IV(IPIVOT) IPI = IV(PERM) CALL I7PNVR(P, IV(IPI), IV(J)) DO 700 I = 1, P IV(J) = I J = J + 1 700 CONTINUE C C *** PROJECT X INTO FEASIBLE REGION (PRIOR TO COMPUTING F OR G) *** C 710 DO 720 I = 1, P IF (X(I) .LT. B(1,I)) X(I) = B(1,I) IF (X(I) .GT. B(2,I)) X(I) = B(2,I) 720 CONTINUE IV(TOOBIG) = 0 C 999 RETURN C C *** LAST LINE OF DG7ITB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dg7lit.f000066400000000000000000000610461420247104600160270ustar00rootroot00000000000000 SUBROUTINE DG7LIT(D, G, IV, LIV, LV, P, PS, V, X, Y) C C *** CARRY OUT NL2SOL-LIKE ITERATIONS FOR GENERALIZED LINEAR *** C *** REGRESSION PROBLEMS (AND OTHERS OF SIMILAR STRUCTURE) *** C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, P, PS INTEGER IV(LIV) DOUBLE PRECISION D(P), G(P), V(LV), X(P), Y(P) C C-------------------------- PARAMETER USAGE -------------------------- C C D.... SCALE VECTOR. C IV... INTEGER VALUE ARRAY. C LIV.. LENGTH OF IV. MUST BE AT LEAST 82. C LH... LENGTH OF H = P*(P+1)/2. C LV... LENGTH OF V. MUST BE AT LEAST P*(3*P + 19)/2 + 7. C G.... GRADIENT AT X (WHEN IV(1) = 2). C P.... NUMBER OF PARAMETERS (COMPONENTS IN X). C PS... NUMBER OF NONZERO ROWS AND COLUMNS IN S. C V.... FLOATING-POINT VALUE ARRAY. C X.... PARAMETER VECTOR. C Y.... PART OF YIELD VECTOR (WHEN IV(1)= 2, SCRATCH OTHERWISE). C C *** DISCUSSION *** C C DG7LIT PERFORMS NL2SOL-LIKE ITERATIONS FOR A VARIETY OF C REGRESSION PROBLEMS THAT ARE SIMILAR TO NONLINEAR LEAST-SQUARES C IN THAT THE HESSIAN IS THE SUM OF TWO TERMS, A READILY-COMPUTED C FIRST-ORDER TERM AND A SECOND-ORDER TERM. THE CALLER SUPPLIES C THE FIRST-ORDER TERM OF THE HESSIAN IN HC (LOWER TRIANGLE, STORED C COMPACTLY BY ROWS IN V, STARTING AT IV(HC)), AND DG7LIT BUILDS AN C APPROXIMATION, S, TO THE SECOND-ORDER TERM. THE CALLER ALSO C PROVIDES THE FUNCTION VALUE, GRADIENT, AND PART OF THE YIELD C VECTOR USED IN UPDATING S. DG7LIT DECIDES DYNAMICALLY WHETHER OR C NOT TO _USE_ S WHEN CHOOSING THE NEXT STEP TO TRY... THE HESSIAN C APPROXIMATION USED IS EITHER HC ALONE (GAUSS-NEWTON MODEL) OR C HC + S (AUGMENTED MODEL). C C IF PS .LT. P, THEN ROWS AND COLUMNS PS+1...P OF S ARE KEPT C CONSTANT. THEY WILL BE ZERO UNLESS THE CALLER SETS IV(INITS) TO C 1 OR 2 AND SUPPLIES NONZERO VALUES FOR THEM, OR THE CALLER SETS C IV(INITS) TO 3 OR 4 AND THE FINITE-DIFFERENCE INITIAL S THEN C COMPUTED HAS NONZERO VALUES IN THESE ROWS. C C IF IV(INITS) IS 3 OR 4, THEN THE INITIAL S IS COMPUTED BY C FINITE DIFFERENCES. 3 MEANS _USE_ FUNCTION DIFFERENCES, 4 MEANS C _USE_ GRADIENT DIFFERENCES. FINITE DIFFERENCING IS DONE THE SAME C WAY AS IN COMPUTING A COVARIANCE MATRIX (WITH IV(COVREQ) = -1, -2, C 1, OR 2). C C FOR UPDATING S,DG7LIT ASSUMES THAT THE GRADIENT HAS THE FORM C OF A SUM OVER I OF RHO(I,X)*GRAD(R(I,X)), WHERE GRAD DENOTES THE C GRADIENT WITH RESPECT TO X. THE TRUE SECOND-ORDER TERM THEN IS C THE SUM OVER I OF RHO(I,X)*HESSIAN(R(I,X)). IF X = X0 + STEP, C THEN WE WISH TO UPDATE S SO THAT S*STEP IS THE SUM OVER I OF C RHO(I,X)*(GRAD(R(I,X)) - GRAD(R(I,X0))). THE CALLER MUST SUPPLY C PART OF THIS IN Y, NAMELY THE SUM OVER I OF C RHO(I,X)*GRAD(R(I,X0)), WHEN CALLING DG7LIT WITH IV(1) = 2 AND C IV(MODE) = 0 (WHERE MODE = 38). G THEN CONTANS THE OTHER PART, C SO THAT THE DESIRED YIELD VECTOR IS G - Y. IF PS .LT. P, THEN C THE ABOVE DISCUSSION APPLIES ONLY TO THE FIRST PS COMPONENTS OF C GRAD(R(I,X)), STEP, AND Y. C C PARAMETERS IV, P, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO NL2SOL (WHICH SEE), EXCEPT THAT V CAN BE SHORTER C (SINCE THE PART OF V THAT NL2SOL USES FOR STORING D, J, AND R IS C NOT NEEDED). MOREOVER, COMPARED WITH NL2SOL, IV(1) MAY HAVE THE C TWO ADDITIONAL OUTPUT VALUES 1 AND 2, WHICH ARE EXPLAINED BELOW, C AS IS THE _USE_ OF IV(TOOBIG) AND IV(NFGCAL). THE VALUES IV(D), C IV(J), AND IV(R), WHICH ARE OUTPUT VALUES FROM NL2SOL (AND C NL2SNO), ARE NOT REFERENCED BY DG7LIT OR THE SUBROUTINES IT CALLS. C C WHEN DG7LIT IS FIRST CALLED, I.E., WHEN DG7LIT IS CALLED WITH C IV(1) = 0 OR 12, V(F), G, AND HC NEED NOT BE INITIALIZED. TO C OBTAIN THESE STARTING VALUES,DG7LIT RETURNS FIRST WITH IV(1) = 1, C THEN WITH IV(1) = 2, WITH IV(MODE) = -1 IN BOTH CASES. ON C SUBSEQUENT RETURNS WITH IV(1) = 2, IV(MODE) = 0 IMPLIES THAT C Y MUST ALSO BE SUPPLIED. (NOTE THAT Y IS USED FOR SCRATCH -- ITS C INPUT CONTENTS ARE LOST. BY CONTRAST, HC IS NEVER CHANGED.) C ONCE CONVERGENCE HAS BEEN OBTAINED, IV(RDREQ) AND IV(COVREQ) MAY C IMPLY THAT A FINITE-DIFFERENCE HESSIAN SHOULD BE COMPUTED FOR USE C IN COMPUTING A COVARIANCE MATRIX. IN THIS CASE DG7LIT WILL MAKE A C NUMBER OF RETURNS WITH IV(1) = 1 OR 2 AND IV(MODE) POSITIVE. C WHEN IV(MODE) IS POSITIVE, Y SHOULD NOT BE CHANGED. C C IV(1) = 1 MEANS THE CALLER SHOULD SET V(F) (I.E., V(10)) TO F(X), THE C FUNCTION VALUE AT X, AND CALL DG7LIT AGAIN, HAVING CHANGED C NONE OF THE OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) C CANNOT BE EVALUATED (E.G. IF OVERFLOW WOULD OCCUR), WHICH C MAY HAPPEN BECAUSE OF AN OVERSIZED STEP. IN THIS CASE C THE CALLER SHOULD SET IV(TOOBIG) = IV(2) TO 1, WHICH WILL C CAUSE DG7LIT TO IGNORE V(F) AND TRY A SMALLER STEP. NOTE C THAT THE CURRENT FUNCTION EVALUATION COUNT IS AVAILABLE C IN IV(NFCALL) = IV(6). THIS MAY BE USED TO IDENTIFY C WHICH COPY OF SAVED INFORMATION SHOULD BE USED IN COM- C PUTING G, HC, AND Y THE NEXT TIME DG7LIT RETURNS WITH C IV(1) = 2. SEE MLPIT FOR AN EXAMPLE OF THIS. C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT OF F AT C X. THE CALLER SHOULD ALSO SET HC TO THE GAUSS-NEWTON C HESSIAN AT X. IF IV(MODE) = 0, THEN THE CALLER SHOULD C ALSO COMPUTE THE PART OF THE YIELD VECTOR DESCRIBED ABOVE. C THE CALLER SHOULD THEN CALL DG7LIT AGAIN (WITH IV(1) = 2). C THE CALLER MAY ALSO CHANGE D AT THIS TIME, BUT SHOULD NOT C CHANGE X. NOTE THAT IV(NFGCAL) = IV(7) CONTAINS THE C VALUE THAT IV(NFCALL) HAD DURING THE RETURN WITH C IV(1) = 1 IN WHICH X HAD THE SAME VALUE AS IT NOW HAS. C IV(NFGCAL) IS EITHER IV(NFCALL) OR IV(NFCALL) - 1. MLPIT C IS AN EXAMPLE WHERE THIS INFORMATION IS USED. IF G OR HC C CANNOT BE EVALUATED AT X, THEN THE CALLER MAY SET C IV(TOOBIG) TO 1, IN WHICH CASE DG7LIT WILL RETURN WITH C IV(1) = 15. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED IN PART BY D.O.E. GRANT EX-76-A-01-2295 TO MIT/CCREMS. C C (SEE NL2SOL FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DUMMY, DIG1, G01, H1, HC1, I, IPIV1, J, K, L, LMAT1, 1 LSTGST, PP1O2, QTR1, RMAT1, RSTRST, STEP1, STPMOD, S1, 2 TEMP1, TEMP2, W1, X01 DOUBLE PRECISION E, STTSST, T, T1 C C *** CONSTANTS *** C DOUBLE PRECISION HALF, NEGONE, ONE, ONEP2, ZERO C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX DOUBLE PRECISION DD7TPR, DL7SVX, DL7SVN, DRLDST, DR7MDC, DV2NRM EXTERNAL DA7SST, DD7TPR,DF7HES,DG7QTS,DITSUM, DL7MST,DL7SRT, 1 DL7SQR, DL7SVX, DL7SVN, DL7TVM,DL7VML,DPARCK, DRLDST, 2 DR7MDC, DS7LUP, DS7LVM, STOPX,DV2AXY,DV7CPY, DV7SCP, 3 DV2NRM C C DA7SST.... ASSESSES CANDIDATE STEP. C DD7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C DF7HES.... COMPUTE FINITE-DIFFERENCE HESSIAN (FOR COVARIANCE). C DG7QTS.... COMPUTES GOLDFELD-QUANDT-TROTTER STEP (AUGMENTED MODEL). C DITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C DL7MST... COMPUTES LEVENBERG-MARQUARDT STEP (GAUSS-NEWTON MODEL). C DL7SRT.... COMPUTES CHOLESKY FACTOR OF (LOWER TRIANG. OF) SYM. MATRIX. C DL7SQR... COMPUTES L * L**T FROM LOWER TRIANGULAR MATRIX L. C DL7TVM... COMPUTES L**T * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C DL7SVX... ESTIMATES LARGEST SING. VALUE OF LOWER TRIANG. MATRIX. C DL7SVN... ESTIMATES SMALLEST SING. VALUE OF LOWER TRIANG. MATRIX. C DL7VML.... COMPUTES L * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C DPARCK.... CHECK VALIDITY OF IV AND V INPUT COMPONENTS. C DRLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C DR7MDC... RETURNS MACHINE-DEPENDENT CONSTANTS. C DS7LUP... PERFORMS QUASI-NEWTON UPDATE ON COMPACTLY STORED LOWER TRI- C ANGLE OF A SYMMETRIC MATRIX. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C DV2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C DV2NRM... RETURNS THE 2-NORM OF A VECTOR. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, COSMIN, COVMAT, COVREQ, DGNORM, DIG, DSTNRM, F, 1 FDH, FDIF, FUZZ, F0, GTSTEP, H, HC, IERR, INCFAC, INITS, 2 IPIVOT, IRC, KAGQT, KALM, LMAT, LMAX0, LMAXS, MODE, MODEL, 3 MXFCAL, MXITER, NEXTV, NFCALL, NFGCAL, NFCOV, NGCOV, 4 NGCALL, NITER, NVSAVE, PHMXFC, PREDUC, QTR, RADFAC, 5 RADINC, RADIUS, RAD0, RCOND, RDREQ, REGD, RELDX, RESTOR, 6 RMAT, S, SIZE, STEP, STGLIM, STLSTG, STPPAR, SUSED, 7 SWITCH, TOOBIG, TUNER4, TUNER5, VNEED, VSAVE, W, WSCALE, 8 XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA CNVCOD/55/, COVMAT/26/, COVREQ/15/, DIG/37/, FDH/74/, H/56/, C 1 HC/71/, IERR/75/, INITS/25/, IPIVOT/76/, IRC/29/, KAGQT/33/, C 2 KALM/34/, LMAT/42/, MODE/35/, MODEL/5/, MXFCAL/17/, C 3 MXITER/18/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, NFCOV/52/, C 4 NGCOV/53/, NGCALL/30/, NITER/31/, QTR/77/, RADINC/8/, C 5 RDREQ/57/, REGD/67/, RESTOR/9/, RMAT/78/, S/62/, STEP/40/, C 6 STGLIM/11/, STLSTG/41/, SUSED/64/, SWITCH/12/, TOOBIG/2/, C 7 VNEED/4/, VSAVE/60/, W/65/, XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, COVMAT=26, COVREQ=15, DIG=37, FDH=74, H=56, 1 HC=71, IERR=75, INITS=25, IPIVOT=76, IRC=29, KAGQT=33, 2 KALM=34, LMAT=42, MODE=35, MODEL=5, MXFCAL=17, 3 MXITER=18, NEXTV=47, NFCALL=6, NFGCAL=7, NFCOV=52, 4 NGCOV=53, NGCALL=30, NITER=31, QTR=77, RADINC=8, 5 RDREQ=57, REGD=67, RESTOR=9, RMAT=78, S=62, STEP=40, 6 STGLIM=11, STLSTG=41, SUSED=64, SWITCH=12, TOOBIG=2, 7 VNEED=4, VSAVE=60, W=65, XIRC=13, X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA COSMIN/47/, DGNORM/1/, DSTNRM/2/, F/10/, FDIF/11/, FUZZ/45/, C 1 F0/13/, GTSTEP/4/, INCFAC/23/, LMAX0/35/, LMAXS/36/, C 2 NVSAVE/9/, PHMXFC/21/, PREDUC/7/, RADFAC/16/, RADIUS/8/, C 3 RAD0/9/, RCOND/53/, RELDX/17/, SIZE/55/, STPPAR/5/, C 4 TUNER4/29/, TUNER5/30/, WSCALE/56/ C/7 PARAMETER (COSMIN=47, DGNORM=1, DSTNRM=2, F=10, FDIF=11, FUZZ=45, 1 F0=13, GTSTEP=4, INCFAC=23, LMAX0=35, LMAXS=36, 2 NVSAVE=9, PHMXFC=21, PREDUC=7, RADFAC=16, RADIUS=8, 3 RAD0=9, RCOND=53, RELDX=17, SIZE=55, STPPAR=5, 4 TUNER4=29, TUNER5=30, WSCALE=56) C/ C C C/6 C DATA HALF/0.5D+0/, NEGONE/-1.D+0/, ONE/1.D+0/, ONEP2/1.2D+0/, C 1 ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, NEGONE=-1.D+0, ONE=1.D+0, ONEP2=1.2D+0, 1 ZERO=0.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 40 IF (I .EQ. 2) GO TO 50 C IF (I .EQ. 12 .OR. I .EQ. 13) 1 IV(VNEED) = IV(VNEED) + P*(3*P + 19)/2 + 7 CALL DPARCK(1, D, IV, LIV, LV, P, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 GO TO (290, 290, 290, 290, 290, 290, 170, 120, 170, 10, 10, 20), I C C *** STORAGE ALLOCATION *** C 10 PP1O2 = P * (P + 1) / 2 IV(S) = IV(LMAT) + PP1O2 IV(X0) = IV(S) + PP1O2 IV(STEP) = IV(X0) + P IV(STLSTG) = IV(STEP) + P IV(DIG) = IV(STLSTG) + P IV(W) = IV(DIG) + P IV(H) = IV(W) + 4*P + 7 IV(NEXTV) = IV(H) + PP1O2 IF (IV(1) .NE. 13) GO TO 20 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 20 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(STGLIM) = 2 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(COVMAT) = 0 IV(NFCOV) = 0 IV(NGCOV) = 0 IV(RADINC) = 0 IV(RESTOR) = 0 IV(FDH) = 0 V(RAD0) = ZERO V(STPPAR) = ZERO V(RADIUS) = V(LMAX0) / (ONE + V(PHMXFC)) C C *** SET INITIAL MODEL AND S MATRIX *** C IV(MODEL) = 1 IF (IV(S) .LT. 0) GO TO 999 IF (IV(INITS) .GT. 1) IV(MODEL) = 2 S1 = IV(S) IF (IV(INITS) .EQ. 0 .OR. IV(INITS) .GT. 2) 1 CALL DV7SCP(P*(P+1)/2, V(S1), ZERO) IV(1) = 1 J = IV(IPIVOT) IF (J .LE. 0) GO TO 999 DO 30 I = 1, P IV(J) = I J = J + 1 30 CONTINUE GO TO 999 C C *** NEW FUNCTION VALUE *** C 40 IF (IV(MODE) .EQ. 0) GO TO 290 IF (IV(MODE) .GT. 0) GO TO 520 C IV(1) = 2 IF (IV(TOOBIG) .EQ. 0) GO TO 999 IV(1) = 63 GO TO 999 C C *** NEW GRADIENT *** C 50 IV(KALM) = -1 IV(KAGQT) = -1 IV(FDH) = 0 IF (IV(MODE) .GT. 0) GO TO 520 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C IF (IV(TOOBIG) .EQ. 0) GO TO 60 IV(1) = 65 GO TO 999 60 IF (IV(HC) .LE. 0 .AND. IV(RMAT) .LE. 0) GO TO 610 C C *** COMPUTE D**-1 * GRADIENT *** C DIG1 = IV(DIG) K = DIG1 DO 70 I = 1, P V(K) = G(I) / D(I) K = K + 1 70 CONTINUE V(DGNORM) = DV2NRM(P, V(DIG1)) C IF (IV(CNVCOD) .NE. 0) GO TO 510 IF (IV(MODE) .EQ. 0) GO TO 440 IV(MODE) = 0 V(F0) = V(F) IF (IV(INITS) .LE. 2) GO TO 100 C C *** ARRANGE FOR FINITE-DIFFERENCE INITIAL S *** C IV(XIRC) = IV(COVREQ) IV(COVREQ) = -1 IF (IV(INITS) .GT. 3) IV(COVREQ) = 1 IV(CNVCOD) = 70 GO TO 530 C C *** COME TO NEXT STMT AFTER COMPUTING F.D. HESSIAN FOR INIT. S *** C 80 IV(CNVCOD) = 0 IV(MODE) = 0 IV(NFCOV) = 0 IV(NGCOV) = 0 IV(COVREQ) = IV(XIRC) S1 = IV(S) PP1O2 = PS * (PS + 1) / 2 HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 90 CALL DV2AXY(PP1O2, V(S1), NEGONE, V(HC1), V(H1)) GO TO 100 90 RMAT1 = IV(RMAT) CALL DL7SQR(PS, V(S1), V(RMAT1)) CALL DV2AXY(PP1O2, V(S1), NEGONE, V(S1), V(H1)) 100 IV(1) = 2 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 110 CALL DITSUM(D, G, IV, LIV, LV, P, V, X) 120 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 130 IV(1) = 10 GO TO 999 130 IV(NITER) = K + 1 C C *** UPDATE RADIUS *** C IF (K .EQ. 0) GO TO 150 STEP1 = IV(STEP) DO 140 I = 1, P V(STEP1) = D(I) * V(STEP1) STEP1 = STEP1 + 1 140 CONTINUE STEP1 = IV(STEP) T = V(RADFAC) * DV2NRM(P, V(STEP1)) IF (V(RADFAC) .LT. ONE .OR. T .GT. V(RADIUS)) V(RADIUS) = T C C *** INITIALIZE FOR START OF NEXT ITERATION *** C 150 X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(MODEL) C C *** COPY X TO X0 *** C CALL DV7CPY(P, V(X01), X) C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 160 IF (.NOT. STOPX(DUMMY)) GO TO 180 IV(1) = 11 GO TO 190 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 170 IF (V(F) .GE. V(F0)) GO TO 180 V(RADFAC) = ONE K = IV(NITER) GO TO 130 C 180 IF (IV(NFCALL) .LT. IV(MXFCAL) + IV(NFCOV)) GO TO 200 IV(1) = 9 190 IF (V(F) .GE. V(F0)) GO TO 999 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 430 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 200 STEP1 = IV(STEP) W1 = IV(W) H1 = IV(H) T1 = ONE IF (IV(MODEL) .EQ. 2) GO TO 210 T1 = ZERO C C *** COMPUTE LEVENBERG-MARQUARDT STEP IF POSSIBLE... C RMAT1 = IV(RMAT) IF (RMAT1 .LE. 0) GO TO 210 QTR1 = IV(QTR) IF (QTR1 .LE. 0) GO TO 210 IPIV1 = IV(IPIVOT) CALL DL7MST(D, G, IV(IERR), IV(IPIV1), IV(KALM), P, V(QTR1), 1 V(RMAT1), V(STEP1), V, V(W1)) C *** H IS STORED IN THE END OF W AND HAS JUST BEEN OVERWRITTEN, C *** SO WE MARK IT INVALID... IV(H) = -IABS(H1) C *** EVEN IF H WERE STORED ELSEWHERE, IT WOULD BE NECESSARY TO C *** MARK INVALID THE INFORMATION DG7QTS MAY HAVE STORED IN V... IV(KAGQT) = -1 GO TO 260 C 210 IF (H1 .GT. 0) GO TO 250 C C *** SET H TO D**-1 * (HC + T1*S) * D**-1. *** C H1 = -H1 IV(H) = H1 IV(FDH) = 0 J = IV(HC) IF (J .GT. 0) GO TO 220 J = H1 RMAT1 = IV(RMAT) CALL DL7SQR(P, V(H1), V(RMAT1)) 220 S1 = IV(S) DO 240 I = 1, P T = ONE / D(I) DO 230 K = 1, I V(H1) = T * (V(J) + T1*V(S1)) / D(K) J = J + 1 H1 = H1 + 1 S1 = S1 + 1 230 CONTINUE 240 CONTINUE H1 = IV(H) IV(KAGQT) = -1 C C *** COMPUTE ACTUAL GOLDFELD-QUANDT-TROTTER STEP *** C 250 DIG1 = IV(DIG) LMAT1 = IV(LMAT) CALL DG7QTS(D, V(DIG1), V(H1), IV(KAGQT), V(LMAT1), P, V(STEP1), 1 V, V(W1)) IF (IV(KALM) .GT. 0) IV(KALM) = 0 C 260 IF (IV(IRC) .NE. 6) GO TO 270 IF (IV(RESTOR) .NE. 2) GO TO 290 RSTRST = 2 GO TO 300 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 270 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 290 IF (IV(IRC) .NE. 5) GO TO 280 IF (V(RADFAC) .LE. ONE) GO TO 280 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 280 STEP1 = IV(STEP) X01 = IV(X0) CALL DV2AXY(P, V(STEP1), NEGONE, V(X01), X) IF (IV(RESTOR) .NE. 2) GO TO 290 RSTRST = 0 GO TO 300 C C *** COMPUTE F(X0 + STEP) *** C 280 X01 = IV(X0) STEP1 = IV(STEP) CALL DV2AXY(P, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 999 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 290 RSTRST = 3 300 X01 = IV(X0) V(RELDX) = DRLDST(P, D, X, V(X01)) CALL DA7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = IV(STLSTG) I = IV(RESTOR) + 1 GO TO (340, 310, 320, 330), I 310 CALL DV7CPY(P, X, V(X01)) GO TO 340 320 CALL DV7CPY(P, V(LSTGST), V(STEP1)) GO TO 340 330 CALL DV7CPY(P, V(STEP1), V(LSTGST)) CALL DV2AXY(P, X, ONE, V(STEP1), V(X01)) V(RELDX) = DRLDST(P, D, X, V(X01)) IV(RESTOR) = RSTRST C C *** IF NECESSARY, SWITCH MODELS *** C 340 IF (IV(SWITCH) .EQ. 0) GO TO 350 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(SUSED) + 2 L = IV(VSAVE) CALL DV7CPY(NVSAVE, V, V(L)) 350 L = IV(IRC) - 4 STPMOD = IV(MODEL) IF (L .GT. 0) GO TO (370,380,390,390,390,390,390,390,500,440), L C C *** DECIDE WHETHER TO CHANGE MODELS *** C E = V(PREDUC) - V(FDIF) S1 = IV(S) CALL DS7LVM(PS, Y, V(S1), V(STEP1)) STTSST = HALF * DD7TPR(PS, V(STEP1), Y) IF (IV(MODEL) .EQ. 1) STTSST = -STTSST IF (DABS(E + STTSST) * V(FUZZ) .GE. DABS(E)) GO TO 360 C C *** SWITCH MODELS *** C IV(MODEL) = 3 - IV(MODEL) IF (-2 .LT. L) GO TO 400 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(SUSED) + 2 L = IV(VSAVE) CALL DV7CPY(NVSAVE, V(L), V) GO TO 160 C 360 IF (-3 .LT. L) GO TO 400 C C *** RECOMPUTE STEP WITH NEW RADIUS *** C 370 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 160 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST C 380 V(RADIUS) = V(LMAXS) GO TO 200 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 390 IV(CNVCOD) = L IF (V(F) .GE. V(F0)) GO TO 510 IF (IV(XIRC) .EQ. 14) GO TO 510 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 400 IV(COVMAT) = 0 IV(REGD) = 0 C C *** SEE WHETHER TO SET V(RADFAC) BY GRADIENT TESTS *** C IF (IV(IRC) .NE. 3) GO TO 430 STEP1 = IV(STEP) TEMP1 = IV(STLSTG) TEMP2 = IV(W) C C *** SET TEMP1 = HESSIAN * STEP FOR _USE_ IN GRADIENT TESTS *** C HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 410 CALL DS7LVM(P, V(TEMP1), V(HC1), V(STEP1)) GO TO 420 410 RMAT1 = IV(RMAT) CALL DL7TVM(P, V(TEMP1), V(RMAT1), V(STEP1)) CALL DL7VML(P, V(TEMP1), V(RMAT1), V(TEMP1)) C 420 IF (STPMOD .EQ. 1) GO TO 430 S1 = IV(S) CALL DS7LVM(PS, V(TEMP2), V(S1), V(STEP1)) CALL DV2AXY(PS, V(TEMP1), ONE, V(TEMP2), V(TEMP1)) C C *** SAVE OLD GRADIENT AND COMPUTE NEW ONE *** C 430 IV(NGCALL) = IV(NGCALL) + 1 G01 = IV(W) CALL DV7CPY(P, V(G01), G) IV(1) = 2 IV(TOOBIG) = 0 GO TO 999 C C *** INITIALIZATIONS -- G0 = G - G0, ETC. *** C 440 G01 = IV(W) CALL DV2AXY(P, V(G01), NEGONE, V(G01), G) STEP1 = IV(STEP) TEMP1 = IV(STLSTG) TEMP2 = IV(W) IF (IV(IRC) .NE. 3) GO TO 470 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C C *** SET TEMP1 = D**-1 * (HESSIAN * STEP + (G(X0) - G(X))) *** C K = TEMP1 L = G01 DO 450 I = 1, P V(K) = (V(K) - V(L)) / D(I) K = K + 1 L = L + 1 450 CONTINUE C C *** DO GRADIENT TESTS *** C IF (DV2NRM(P, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) GO TO 460 IF (DD7TPR(P, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 470 460 V(RADFAC) = V(INCFAC) C C *** COMPUTE Y VECTOR NEEDED FOR UPDATING S *** C 470 CALL DV2AXY(PS, Y, NEGONE, Y, G) C C *** DETERMINE SIZING FACTOR V(SIZE) *** C C *** SET TEMP1 = S * STEP *** S1 = IV(S) CALL DS7LVM(PS, V(TEMP1), V(S1), V(STEP1)) C T1 = DABS(DD7TPR(PS, V(STEP1), V(TEMP1))) T = DABS(DD7TPR(PS, V(STEP1), Y)) V(SIZE) = ONE IF (T .LT. T1) V(SIZE) = T / T1 C C *** SET G0 TO WCHMTD CHOICE OF FLETCHER AND AL-BAALI *** C HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 480 CALL DS7LVM(PS, V(G01), V(HC1), V(STEP1)) GO TO 490 C 480 RMAT1 = IV(RMAT) CALL DL7TVM(PS, V(G01), V(RMAT1), V(STEP1)) CALL DL7VML(PS, V(G01), V(RMAT1), V(G01)) C 490 CALL DV2AXY(PS, V(G01), ONE, Y, V(G01)) C C *** UPDATE S *** C CALL DS7LUP(V(S1), V(COSMIN), PS, V(SIZE), V(STEP1), V(TEMP1), 1 V(TEMP2), V(G01), V(WSCALE), Y) IV(1) = 2 GO TO 110 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 500 IV(1) = 64 GO TO 999 C C C *** CONVERGENCE OBTAINED -- SEE WHETHER TO COMPUTE COVARIANCE *** C 510 IF (IV(RDREQ) .EQ. 0) GO TO 600 IF (IV(FDH) .NE. 0) GO TO 600 IF (IV(CNVCOD) .GE. 7) GO TO 600 IF (IV(REGD) .GT. 0) GO TO 600 IF (IV(COVMAT) .GT. 0) GO TO 600 IF (IABS(IV(COVREQ)) .GE. 3) GO TO 560 IF (IV(RESTOR) .EQ. 0) IV(RESTOR) = 2 GO TO 530 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN FOR COMPUTING COVARIANCE *** C 520 IV(RESTOR) = 0 530 CALL DF7HES(D, G, I, IV, LIV, LV, P, V, X) GO TO (540, 550, 580), I 540 IV(NFCOV) = IV(NFCOV) + 1 IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 999 C 550 IV(NGCOV) = IV(NGCOV) + 1 IV(NGCALL) = IV(NGCALL) + 1 IV(NFGCAL) = IV(NFCALL) + IV(NGCOV) IV(1) = 2 GO TO 999 C 560 H1 = IABS(IV(H)) IV(H) = -H1 PP1O2 = P * (P + 1) / 2 RMAT1 = IV(RMAT) IF (RMAT1 .LE. 0) GO TO 570 LMAT1 = IV(LMAT) CALL DV7CPY(PP1O2, V(LMAT1), V(RMAT1)) V(RCOND) = ZERO GO TO 590 570 HC1 = IV(HC) IV(FDH) = H1 CALL DV7CPY(P*(P+1)/2, V(H1), V(HC1)) C C *** COMPUTE CHOLESKY FACTOR OF FINITE-DIFFERENCE HESSIAN C *** FOR _USE_ IN CALLER*S COVARIANCE CALCULATION... C 580 LMAT1 = IV(LMAT) H1 = IV(FDH) IF (H1 .LE. 0) GO TO 600 IF (IV(CNVCOD) .EQ. 70) GO TO 80 CALL DL7SRT(1, P, V(LMAT1), V(H1), I) IV(FDH) = -1 V(RCOND) = ZERO IF (I .NE. 0) GO TO 600 C 590 IV(FDH) = -1 STEP1 = IV(STEP) T = DL7SVN(P, V(LMAT1), V(STEP1), V(STEP1)) IF (T .LE. ZERO) GO TO 600 T = T / DL7SVX(P, V(LMAT1), V(STEP1), V(STEP1)) IF (T .GT. DR7MDC(4)) IV(FDH) = H1 V(RCOND) = T C 600 IV(MODE) = 0 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 GO TO 999 C C *** SPECIAL RETURN FOR MISSING HESSIAN INFORMATION -- BOTH C *** IV(HC) .LE. 0 AND IV(RMAT) .LE. 0 C 610 IV(1) = 1400 C 999 RETURN C C *** LAST LINE OF DG7LIT FOLLOWS *** END PyBDSF-1.10.1/src/port3/dg7qsb.f000066400000000000000000000044371420247104600160250ustar00rootroot00000000000000 SUBROUTINE DG7QSB(B, D, DIHDI, G, IPIV, IPIV1, IPIV2, KA, L, LV, 1 P, P0, PC, STEP, TD, TG, V, W, X, X0) C C *** COMPUTE HEURISTIC BOUNDED NEWTON STEP *** C INTEGER KA, LV, P, P0, PC INTEGER IPIV(P), IPIV1(P), IPIV2(P) DOUBLE PRECISION B(2,P), D(P), DIHDI(1), G(P), L(1), 1 STEP(P,2), TD(P), TG(P), V(LV), W(P), X0(P), X(P) C DIMENSION DIHDI(P*(P+1)/2), L(P*(P+1)/2) C DOUBLE PRECISION DD7TPR EXTERNAL DD7TPR,DG7QTS, DS7BQN, DS7IPR,DV7CPY, DV7IPR, 1 DV7SCP, DV7VMP C C *** LOCAL VARIABLES *** C INTEGER K, KB, KINIT, NS, P1, P10 DOUBLE PRECISION DS0, NRED, PRED, RAD DOUBLE PRECISION ZERO C C *** V SUBSCRIPTS *** C INTEGER DST0, DSTNRM, GTSTEP, NREDUC, PREDUC, RADIUS C C/6 C DATA DST0/3/, DSTNRM/2/, GTSTEP/4/, NREDUC/6/, PREDUC/7/, C 1 RADIUS/8/ C/7 PARAMETER (DST0=3, DSTNRM=2, GTSTEP=4, NREDUC=6, PREDUC=7, 1 RADIUS=8) C/ DATA ZERO/0.D+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C P1 = PC IF (KA .LT. 0) GO TO 10 NRED = V(NREDUC) DS0 = V(DST0) GO TO 20 10 P0 = 0 KA = -1 C 20 KINIT = -1 IF (P0 .EQ. P1) KINIT = KA CALL DV7CPY(P, X, X0) PRED = ZERO RAD = V(RADIUS) KB = -1 V(DSTNRM) = ZERO IF (P1 .GT. 0) GO TO 30 NRED = ZERO DS0 = ZERO CALL DV7SCP(P, STEP, ZERO) GO TO 60 C 30 CALL DV7CPY(P, TD, D) CALL DV7IPR(P, IPIV, TD) CALL DV7VMP(P, TG, G, D, -1) CALL DV7IPR(P, IPIV, TG) 40 K = KINIT KINIT = -1 V(RADIUS) = RAD - V(DSTNRM) CALL DG7QTS(TD, TG, DIHDI, K, L, P1, STEP, V, W) P0 = P1 IF (KA .GE. 0) GO TO 50 NRED = V(NREDUC) DS0 = V(DST0) C 50 KA = K V(RADIUS) = RAD P10 = P1 CALL DS7BQN(B, D, STEP(1,2), IPIV, IPIV1, IPIV2, KB, L, LV, 1 NS, P, P1, STEP, TD, TG, V, W, X, X0) IF (NS .GT. 0) CALL DS7IPR(P10, IPIV1, DIHDI) PRED = PRED + V(PREDUC) IF (NS .NE. 0) P0 = 0 IF (KB .LE. 0) GO TO 40 C 60 V(DST0) = DS0 V(NREDUC) = NRED V(PREDUC) = PRED V(GTSTEP) = DD7TPR(P, G, STEP) C 999 RETURN C *** LAST LINE OF DG7QSB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dg7qts.f000066400000000000000000000526371420247104600160540ustar00rootroot00000000000000 SUBROUTINE DG7QTS(D, DIG, DIHDI, KA, L, P, STEP, V, W) C C *** COMPUTE GOLDFELD-QUANDT-TROTTER STEP BY MORE-HEBDEN TECHNIQUE *** C *** (NL2SOL VERSION 2.2), MODIFIED A LA MORE AND SORENSEN *** C C *** PARAMETER DECLARATIONS *** C INTEGER KA, P DOUBLE PRECISION D(P), DIG(P), DIHDI(1), L(1), V(21), STEP(P), 1 W(1) C DIMENSION DIHDI(P*(P+1)/2), L(P*(P+1)/2), W(4*P+7) C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** PURPOSE *** C C GIVEN THE (COMPACTLY STORED) LOWER TRIANGLE OF A SCALED C HESSIAN (APPROXIMATION) AND A NONZERO SCALED GRADIENT VECTOR, C THIS SUBROUTINE COMPUTES A GOLDFELD-QUANDT-TROTTER STEP OF C APPROXIMATE LENGTH V(RADIUS) BY THE MORE-HEBDEN TECHNIQUE. IN C OTHER WORDS, STEP IS COMPUTED TO (APPROXIMATELY) MINIMIZE C PSI(STEP) = (G**T)*STEP + 0.5*(STEP**T)*H*STEP SUCH THAT THE C 2-NORM OF D*STEP IS AT MOST (APPROXIMATELY) V(RADIUS), WHERE C G IS THE GRADIENT, H IS THE HESSIAN, AND D IS A DIAGONAL C SCALE MATRIX WHOSE DIAGONAL IS STORED IN THE PARAMETER D. C (DG7QTS ASSUMES DIG = D**-1 * G AND DIHDI = D**-1 * H * D**-1.) C C *** PARAMETER DESCRIPTION *** C C D (IN) = THE SCALE VECTOR, I.E. THE DIAGONAL OF THE SCALE C MATRIX D MENTIONED ABOVE UNDER PURPOSE. C DIG (IN) = THE SCALED GRADIENT VECTOR, D**-1 * G. IF G = 0, THEN C STEP = 0 AND V(STPPAR) = 0 ARE RETURNED. C DIHDI (IN) = LOWER TRIANGLE OF THE SCALED HESSIAN (APPROXIMATION), C I.E., D**-1 * H * D**-1, STORED COMPACTLY BY ROWS., I.E., C IN THE ORDER (1,1), (2,1), (2,2), (3,1), (3,2), ETC. C KA (I/O) = THE NUMBER OF HEBDEN ITERATIONS (SO FAR) TAKEN TO DETER- C MINE STEP. KA .LT. 0 ON INPUT MEANS THIS IS THE FIRST C ATTEMPT TO DETERMINE STEP (FOR THE PRESENT DIG AND DIHDI) C -- KA IS INITIALIZED TO 0 IN THIS CASE. OUTPUT WITH C KA = 0 (OR V(STPPAR) = 0) MEANS STEP = -(H**-1)*G. C L (I/O) = WORKSPACE OF LENGTH P*(P+1)/2 FOR CHOLESKY FACTORS. C P (IN) = NUMBER OF PARAMETERS -- THE HESSIAN IS A P X P MATRIX. C STEP (I/O) = THE STEP COMPUTED. C V (I/O) CONTAINS VARIOUS CONSTANTS AND VARIABLES DESCRIBED BELOW. C W (I/O) = WORKSPACE OF LENGTH 4*P + 6. C C *** ENTRIES IN V *** C C V(DGNORM) (I/O) = 2-NORM OF (D**-1)*G. C V(DSTNRM) (OUTPUT) = 2-NORM OF D*STEP. C V(DST0) (I/O) = 2-NORM OF D*(H**-1)*G (FOR POS. DEF. H ONLY), OR C OVERESTIMATE OF SMALLEST EIGENVALUE OF (D**-1)*H*(D**-1). C V(EPSLON) (IN) = MAX. REL. ERROR ALLOWED FOR PSI(STEP). FOR THE C STEP RETURNED, PSI(STEP) WILL EXCEED ITS OPTIMAL VALUE C BY LESS THAN -V(EPSLON)*PSI(STEP). SUGGESTED VALUE = 0.1. C V(GTSTEP) (OUT) = INNER PRODUCT BETWEEN G AND STEP. C V(NREDUC) (OUT) = PSI(-(H**-1)*G) = PSI(NEWTON STEP) (FOR POS. DEF. C H ONLY -- V(NREDUC) IS SET TO ZERO OTHERWISE). C V(PHMNFC) (IN) = TOL. (TOGETHER WITH V(PHMXFC)) FOR ACCEPTING STEP C (MORE*S SIGMA). THE ERROR V(DSTNRM) - V(RADIUS) MUST LIE C BETWEEN V(PHMNFC)*V(RADIUS) AND V(PHMXFC)*V(RADIUS). C V(PHMXFC) (IN) (SEE V(PHMNFC).) C SUGGESTED VALUES -- V(PHMNFC) = -0.25, V(PHMXFC) = 0.5. C V(PREDUC) (OUT) = PSI(STEP) = PREDICTED OBJ. FUNC. REDUCTION FOR STEP. C V(RADIUS) (IN) = RADIUS OF CURRENT (SCALED) TRUST REGION. C V(RAD0) (I/O) = VALUE OF V(RADIUS) FROM PREVIOUS CALL. C V(STPPAR) (I/O) IS NORMALLY THE MARQUARDT PARAMETER, I.E. THE ALPHA C DESCRIBED BELOW UNDER ALGORITHM NOTES. IF H + ALPHA*D**2 C (SEE ALGORITHM NOTES) IS (NEARLY) SINGULAR, HOWEVER, C THEN V(STPPAR) = -ALPHA. C C *** USAGE NOTES *** C C IF IT IS DESIRED TO RECOMPUTE STEP USING A DIFFERENT VALUE OF C V(RADIUS), THEN THIS ROUTINE MAY BE RESTARTED BY CALLING IT C WITH ALL PARAMETERS UNCHANGED EXCEPT V(RADIUS). (THIS EXPLAINS C WHY STEP AND W ARE LISTED AS I/O). ON AN INITIAL CALL (ONE WITH C KA .LT. 0), STEP AND W NEED NOT BE INITIALIZED AND ONLY COMPO- C NENTS V(EPSLON), V(STPPAR), V(PHMNFC), V(PHMXFC), V(RADIUS), AND C V(RAD0) OF V MUST BE INITIALIZED. C C *** ALGORITHM NOTES *** C C THE DESIRED G-Q-T STEP (REF. 2, 3, 4, 6) SATISFIES C (H + ALPHA*D**2)*STEP = -G FOR SOME NONNEGATIVE ALPHA SUCH THAT C H + ALPHA*D**2 IS POSITIVE SEMIDEFINITE. ALPHA AND STEP ARE C COMPUTED BY A SCHEME ANALOGOUS TO THE ONE DESCRIBED IN REF. 5. C ESTIMATES OF THE SMALLEST AND LARGEST EIGENVALUES OF THE HESSIAN C ARE OBTAINED FROM THE GERSCHGORIN CIRCLE THEOREM ENHANCED BY A C SIMPLE FORM OF THE SCALING DESCRIBED IN REF. 7. CASES IN WHICH C H + ALPHA*D**2 IS NEARLY (OR EXACTLY) SINGULAR ARE HANDLED BY C THE TECHNIQUE DISCUSSED IN REF. 2. IN THESE CASES, A STEP OF C (EXACT) LENGTH V(RADIUS) IS RETURNED FOR WHICH PSI(STEP) EXCEEDS C ITS OPTIMAL VALUE BY LESS THAN -V(EPSLON)*PSI(STEP). THE TEST C SUGGESTED IN REF. 6 FOR DETECTING THE SPECIAL CASE IS PERFORMED C ONCE TWO MATRIX FACTORIZATIONS HAVE BEEN DONE -- DOING SO SOONER C SEEMS TO DEGRADE THE PERFORMANCE OF OPTIMIZATION ROUTINES THAT C CALL THIS ROUTINE. C C *** FUNCTIONS AND SUBROUTINES CALLED *** C C DD7TPR - RETURNS INNER PRODUCT OF TWO VECTORS. C DL7ITV - APPLIES INVERSE-TRANSPOSE OF COMPACT LOWER TRIANG. MATRIX. C DL7IVM - APPLIES INVERSE OF COMPACT LOWER TRIANG. MATRIX. C DL7SRT - FINDS CHOLESKY FACTOR (OF COMPACTLY STORED LOWER TRIANG.). C DL7SVN - RETURNS APPROX. TO MIN. SING. VALUE OF LOWER TRIANG. MATRIX. C DR7MDC - RETURNS MACHINE-DEPENDENT CONSTANTS. C DV2NRM - RETURNS 2-NORM OF A VECTOR. C C *** REFERENCES *** C C 1. DENNIS, J.E., GAY, D.M., AND WELSCH, R.E. (1981), AN ADAPTIVE C NONLINEAR LEAST-SQUARES ALGORITHM, ACM TRANS. MATH. C SOFTWARE, VOL. 7, NO. 3. C 2. GAY, D.M. (1981), COMPUTING OPTIMAL LOCALLY CONSTRAINED STEPS, C SIAM J. SCI. STATIST. COMPUTING, VOL. 2, NO. 2, PP. C 186-197. C 3. GOLDFELD, S.M., QUANDT, R.E., AND TROTTER, H.F. (1966), C MAXIMIZATION BY QUADRATIC HILL-CLIMBING, ECONOMETRICA 34, C PP. 541-551. C 4. HEBDEN, M.D. (1973), AN ALGORITHM FOR MINIMIZATION USING EXACT C SECOND DERIVATIVES, REPORT T.P. 515, THEORETICAL PHYSICS C DIV., A.E.R.E. HARWELL, OXON., ENGLAND. C 5. MORE, J.J. (1978), THE LEVENBERG-MARQUARDT ALGORITHM, IMPLEMEN- C TATION AND THEORY, PP.105-116 OF SPRINGER LECTURE NOTES C IN MATHEMATICS NO. 630, EDITED BY G.A. WATSON, SPRINGER- C VERLAG, BERLIN AND NEW YORK. C 6. MORE, J.J., AND SORENSEN, D.C. (1981), COMPUTING A TRUST REGION C STEP, TECHNICAL REPORT ANL-81-83, ARGONNE NATIONAL LAB. C 7. VARGA, R.S. (1965), MINIMAL GERSCHGORIN SETS, PACIFIC J. MATH. 15, C PP. 719-729. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, AND C MCS-7906671. C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C LOGICAL RESTRT INTEGER DGGDMX, DIAG, DIAG0, DSTSAV, EMAX, EMIN, I, IM1, INC, IRC, 1 J, K, KALIM, KAMIN, K1, LK0, PHIPIN, Q, Q0, UK0, X DOUBLE PRECISION ALPHAK, AKI, AKK, DELTA, DST, EPS, GTSTA, LK, 1 OLDPHI, PHI, PHIMAX, PHIMIN, PSIFAC, RAD, RADSQ, 2 ROOT, SI, SK, SW, T, TWOPSI, T1, T2, UK, WI C C *** CONSTANTS *** DOUBLE PRECISION BIG, DGXFAC, EPSFAC, FOUR, HALF, KAPPA, NEGONE, 1 ONE, P001, SIX, THREE, TWO, ZERO C C *** INTRINSIC FUNCTIONS *** C/+ DOUBLE PRECISION DSQRT C/ C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C DOUBLE PRECISION DD7TPR, DL7SVN, DR7MDC, DV2NRM EXTERNAL DD7TPR, DL7ITV, DL7IVM,DL7SRT, DL7SVN, DR7MDC, DV2NRM C C *** SUBSCRIPTS FOR V *** C INTEGER DGNORM, DSTNRM, DST0, EPSLON, GTSTEP, STPPAR, NREDUC, 1 PHMNFC, PHMXFC, PREDUC, RADIUS, RAD0 C/6 C DATA DGNORM/1/, DSTNRM/2/, DST0/3/, EPSLON/19/, GTSTEP/4/, C 1 NREDUC/6/, PHMNFC/20/, PHMXFC/21/, PREDUC/7/, RADIUS/8/, C 2 RAD0/9/, STPPAR/5/ C/7 PARAMETER (DGNORM=1, DSTNRM=2, DST0=3, EPSLON=19, GTSTEP=4, 1 NREDUC=6, PHMNFC=20, PHMXFC=21, PREDUC=7, RADIUS=8, 2 RAD0=9, STPPAR=5) C/ C C/6 C DATA EPSFAC/50.0D+0/, FOUR/4.0D+0/, HALF/0.5D+0/, C 1 KAPPA/2.0D+0/, NEGONE/-1.0D+0/, ONE/1.0D+0/, P001/1.0D-3/, C 2 SIX/6.0D+0/, THREE/3.0D+0/, TWO/2.0D+0/, ZERO/0.0D+0/ C/7 PARAMETER (EPSFAC=50.0D+0, FOUR=4.0D+0, HALF=0.5D+0, 1 KAPPA=2.0D+0, NEGONE=-1.0D+0, ONE=1.0D+0, P001=1.0D-3, 2 SIX=6.0D+0, THREE=3.0D+0, TWO=2.0D+0, ZERO=0.0D+0) SAVE DGXFAC C/ DATA BIG/0.D+0/, DGXFAC/0.D+0/ C C *** BODY *** C IF (BIG .LE. ZERO) BIG = DR7MDC(6) C C *** STORE LARGEST ABS. ENTRY IN (D**-1)*H*(D**-1) AT W(DGGDMX). DGGDMX = P + 1 C *** STORE GERSCHGORIN OVER- AND UNDERESTIMATES OF THE LARGEST C *** AND SMALLEST EIGENVALUES OF (D**-1)*H*(D**-1) AT W(EMAX) C *** AND W(EMIN) RESPECTIVELY. EMAX = DGGDMX + 1 EMIN = EMAX + 1 C *** FOR _USE_ IN RECOMPUTING STEP, THE FINAL VALUES OF LK, UK, DST, C *** AND THE INVERSE DERIVATIVE OF MORE*S PHI AT 0 (FOR POS. DEF. C *** H) ARE STORED IN W(LK0), W(UK0), W(DSTSAV), AND W(PHIPIN) C *** RESPECTIVELY. LK0 = EMIN + 1 PHIPIN = LK0 + 1 UK0 = PHIPIN + 1 DSTSAV = UK0 + 1 C *** STORE DIAG OF (D**-1)*H*(D**-1) IN W(DIAG),...,W(DIAG0+P). DIAG0 = DSTSAV DIAG = DIAG0 + 1 C *** STORE -D*STEP IN W(Q),...,W(Q0+P). Q0 = DIAG0 + P Q = Q0 + 1 C *** ALLOCATE STORAGE FOR SCRATCH VECTOR X *** X = Q + P RAD = V(RADIUS) RADSQ = RAD**2 C *** PHITOL = MAX. ERROR ALLOWED IN DST = V(DSTNRM) = 2-NORM OF C *** D*STEP. PHIMAX = V(PHMXFC) * RAD PHIMIN = V(PHMNFC) * RAD PSIFAC = BIG T1 = TWO * V(EPSLON) / (THREE * (FOUR * (V(PHMNFC) + ONE) * 1 (KAPPA + ONE) + KAPPA + TWO) * RAD) IF (T1 .LT. BIG*DMIN1(RAD,ONE)) PSIFAC = T1 / RAD C *** OLDPHI IS USED TO DETECT LIMITS OF NUMERICAL ACCURACY. IF C *** WE RECOMPUTE STEP AND IT DOES NOT CHANGE, THEN WE ACCEPT IT. OLDPHI = ZERO EPS = V(EPSLON) IRC = 0 RESTRT = .FALSE. KALIM = KA + 50 C C *** START OR RESTART, DEPENDING ON KA *** C IF (KA .GE. 0) GO TO 290 C C *** FRESH START *** C K = 0 UK = NEGONE KA = 0 KALIM = 50 V(DGNORM) = DV2NRM(P, DIG) V(NREDUC) = ZERO V(DST0) = ZERO KAMIN = 3 IF (V(DGNORM) .EQ. ZERO) KAMIN = 0 C C *** STORE DIAG(DIHDI) IN W(DIAG0+1),...,W(DIAG0+P) *** C J = 0 DO 10 I = 1, P J = J + I K1 = DIAG0 + I W(K1) = DIHDI(J) 10 CONTINUE C C *** DETERMINE W(DGGDMX), THE LARGEST ELEMENT OF DIHDI *** C T1 = ZERO J = P * (P + 1) / 2 DO 20 I = 1, J T = DABS(DIHDI(I)) IF (T1 .LT. T) T1 = T 20 CONTINUE W(DGGDMX) = T1 C C *** TRY ALPHA = 0 *** C 30 CALL DL7SRT(1, P, L, DIHDI, IRC) IF (IRC .EQ. 0) GO TO 50 C *** INDEF. H -- UNDERESTIMATE SMALLEST EIGENVALUE, _USE_ THIS C *** ESTIMATE TO INITIALIZE LOWER BOUND LK ON ALPHA. J = IRC*(IRC+1)/2 T = L(J) L(J) = ONE DO 40 I = 1, IRC 40 W(I) = ZERO W(IRC) = ONE CALL DL7ITV(IRC, W, L, W) T1 = DV2NRM(IRC, W) LK = -T / T1 / T1 V(DST0) = -LK IF (RESTRT) GO TO 210 GO TO 70 C C *** POSITIVE DEFINITE H -- COMPUTE UNMODIFIED NEWTON STEP. *** 50 LK = ZERO T = DL7SVN(P, L, W(Q), W(Q)) IF (T .GE. ONE) GO TO 60 IF (V(DGNORM) .GE. T*T*BIG) GO TO 70 60 CALL DL7IVM(P, W(Q), L, DIG) GTSTA = DD7TPR(P, W(Q), W(Q)) V(NREDUC) = HALF * GTSTA CALL DL7ITV(P, W(Q), L, W(Q)) DST = DV2NRM(P, W(Q)) V(DST0) = DST PHI = DST - RAD IF (PHI .LE. PHIMAX) GO TO 260 IF (RESTRT) GO TO 210 C C *** PREPARE TO COMPUTE GERSCHGORIN ESTIMATES OF LARGEST (AND C *** SMALLEST) EIGENVALUES. *** C 70 K = 0 DO 100 I = 1, P WI = ZERO IF (I .EQ. 1) GO TO 90 IM1 = I - 1 DO 80 J = 1, IM1 K = K + 1 T = DABS(DIHDI(K)) WI = WI + T W(J) = W(J) + T 80 CONTINUE 90 W(I) = WI K = K + 1 100 CONTINUE C C *** (UNDER-)ESTIMATE SMALLEST EIGENVALUE OF (D**-1)*H*(D**-1) *** C K = 1 T1 = W(DIAG) - W(1) IF (P .LE. 1) GO TO 120 DO 110 I = 2, P J = DIAG0 + I T = W(J) - W(I) IF (T .GE. T1) GO TO 110 T1 = T K = I 110 CONTINUE C 120 SK = W(K) J = DIAG0 + K AKK = W(J) K1 = K*(K-1)/2 + 1 INC = 1 T = ZERO DO 150 I = 1, P IF (I .EQ. K) GO TO 130 AKI = DABS(DIHDI(K1)) SI = W(I) J = DIAG0 + I T1 = HALF * (AKK - W(J) + SI - AKI) T1 = T1 + DSQRT(T1*T1 + SK*AKI) IF (T .LT. T1) T = T1 IF (I .LT. K) GO TO 140 130 INC = I 140 K1 = K1 + INC 150 CONTINUE C W(EMIN) = AKK - T UK = V(DGNORM)/RAD - W(EMIN) IF (V(DGNORM) .EQ. ZERO) UK = UK + P001 + P001*UK IF (UK .LE. ZERO) UK = P001 C C *** COMPUTE GERSCHGORIN (OVER-)ESTIMATE OF LARGEST EIGENVALUE *** C K = 1 T1 = W(DIAG) + W(1) IF (P .LE. 1) GO TO 170 DO 160 I = 2, P J = DIAG0 + I T = W(J) + W(I) IF (T .LE. T1) GO TO 160 T1 = T K = I 160 CONTINUE C 170 SK = W(K) J = DIAG0 + K AKK = W(J) K1 = K*(K-1)/2 + 1 INC = 1 T = ZERO DO 200 I = 1, P IF (I .EQ. K) GO TO 180 AKI = DABS(DIHDI(K1)) SI = W(I) J = DIAG0 + I T1 = HALF * (W(J) + SI - AKI - AKK) T1 = T1 + DSQRT(T1*T1 + SK*AKI) IF (T .LT. T1) T = T1 IF (I .LT. K) GO TO 190 180 INC = I 190 K1 = K1 + INC 200 CONTINUE C W(EMAX) = AKK + T LK = DMAX1(LK, V(DGNORM)/RAD - W(EMAX)) C C *** ALPHAK = CURRENT VALUE OF ALPHA (SEE ALG. NOTES ABOVE). WE C *** _USE_ MORE*S SCHEME FOR INITIALIZING IT. ALPHAK = DABS(V(STPPAR)) * V(RAD0)/RAD ALPHAK = DMIN1(UK, DMAX1(ALPHAK, LK)) C IF (IRC .NE. 0) GO TO 210 C C *** COMPUTE L0 FOR POSITIVE DEFINITE H *** C CALL DL7IVM(P, W, L, W(Q)) T = DV2NRM(P, W) W(PHIPIN) = RAD / T / T LK = DMAX1(LK, PHI*W(PHIPIN)) C C *** SAFEGUARD ALPHAK AND ADD ALPHAK*I TO (D**-1)*H*(D**-1) *** C 210 KA = KA + 1 IF (-V(DST0) .GE. ALPHAK .OR. ALPHAK .LT. LK .OR. ALPHAK .GE. UK) 1 ALPHAK = UK * DMAX1(P001, DSQRT(LK/UK)) IF (ALPHAK .LE. ZERO) ALPHAK = HALF * UK IF (ALPHAK .LE. ZERO) ALPHAK = UK K = 0 DO 220 I = 1, P K = K + I J = DIAG0 + I DIHDI(K) = W(J) + ALPHAK 220 CONTINUE C C *** TRY COMPUTING CHOLESKY DECOMPOSITION *** C CALL DL7SRT(1, P, L, DIHDI, IRC) IF (IRC .EQ. 0) GO TO 240 C C *** (D**-1)*H*(D**-1) + ALPHAK*I IS INDEFINITE -- OVERESTIMATE C *** SMALLEST EIGENVALUE FOR _USE_ IN UPDATING LK *** C J = (IRC*(IRC+1))/2 T = L(J) L(J) = ONE DO 230 I = 1, IRC 230 W(I) = ZERO W(IRC) = ONE CALL DL7ITV(IRC, W, L, W) T1 = DV2NRM(IRC, W) LK = ALPHAK - T/T1/T1 V(DST0) = -LK IF (UK .LT. LK) UK = LK IF (ALPHAK .LT. LK) GO TO 210 C C *** NASTY CASE -- EXACT GERSCHGORIN BOUNDS. FUDGE LK, UK... C T = P001 * ALPHAK IF (T .LE. ZERO) T = P001 LK = ALPHAK + T IF (UK .LE. LK) UK = LK + T GO TO 210 C C *** ALPHAK MAKES (D**-1)*H*(D**-1) POSITIVE DEFINITE. C *** COMPUTE Q = -D*STEP, CHECK FOR CONVERGENCE. *** C 240 CALL DL7IVM(P, W(Q), L, DIG) GTSTA = DD7TPR(P, W(Q), W(Q)) CALL DL7ITV(P, W(Q), L, W(Q)) DST = DV2NRM(P, W(Q)) PHI = DST - RAD IF (PHI .LE. PHIMAX .AND. PHI .GE. PHIMIN) GO TO 270 IF (PHI .EQ. OLDPHI) GO TO 270 OLDPHI = PHI IF (PHI .LT. ZERO) GO TO 330 C C *** UNACCEPTABLE ALPHAK -- UPDATE LK, UK, ALPHAK *** C 250 IF (KA .GE. KALIM) GO TO 270 C *** THE FOLLOWING DMIN1 IS NECESSARY BECAUSE OF RESTARTS *** IF (PHI .LT. ZERO) UK = DMIN1(UK, ALPHAK) C *** KAMIN = 0 ONLY IFF THE GRADIENT VANISHES *** IF (KAMIN .EQ. 0) GO TO 210 CALL DL7IVM(P, W, L, W(Q)) C *** THE FOLLOWING, COMMENTED CALCULATION OF ALPHAK IS SOMETIMES C *** SAFER BUT WORSE IN PERFORMANCE... C T1 = DST / DV2NRM(P, W) C ALPHAK = ALPHAK + T1 * (PHI/RAD) * T1 T1 = DV2NRM(P, W) ALPHAK = ALPHAK + (PHI/T1) * (DST/T1) * (DST/RAD) LK = DMAX1(LK, ALPHAK) ALPHAK = LK GO TO 210 C C *** ACCEPTABLE STEP ON FIRST TRY *** C 260 ALPHAK = ZERO C C *** SUCCESSFUL STEP IN GENERAL. COMPUTE STEP = -(D**-1)*Q *** C 270 DO 280 I = 1, P J = Q0 + I STEP(I) = -W(J)/D(I) 280 CONTINUE V(GTSTEP) = -GTSTA V(PREDUC) = HALF * (DABS(ALPHAK)*DST*DST + GTSTA) GO TO 410 C C C *** RESTART WITH NEW RADIUS *** C 290 IF (V(DST0) .LE. ZERO .OR. V(DST0) - RAD .GT. PHIMAX) GO TO 310 C C *** PREPARE TO RETURN NEWTON STEP *** C RESTRT = .TRUE. KA = KA + 1 K = 0 DO 300 I = 1, P K = K + I J = DIAG0 + I DIHDI(K) = W(J) 300 CONTINUE UK = NEGONE GO TO 30 C 310 KAMIN = KA + 3 IF (V(DGNORM) .EQ. ZERO) KAMIN = 0 IF (KA .EQ. 0) GO TO 50 C DST = W(DSTSAV) ALPHAK = DABS(V(STPPAR)) PHI = DST - RAD T = V(DGNORM)/RAD UK = T - W(EMIN) IF (V(DGNORM) .EQ. ZERO) UK = UK + P001 + P001*UK IF (UK .LE. ZERO) UK = P001 IF (RAD .GT. V(RAD0)) GO TO 320 C C *** SMALLER RADIUS *** LK = ZERO IF (ALPHAK .GT. ZERO) LK = W(LK0) LK = DMAX1(LK, T - W(EMAX)) IF (V(DST0) .GT. ZERO) LK = DMAX1(LK, (V(DST0)-RAD)*W(PHIPIN)) GO TO 250 C C *** BIGGER RADIUS *** 320 IF (ALPHAK .GT. ZERO) UK = DMIN1(UK, W(UK0)) LK = DMAX1(ZERO, -V(DST0), T - W(EMAX)) IF (V(DST0) .GT. ZERO) LK = DMAX1(LK, (V(DST0)-RAD)*W(PHIPIN)) GO TO 250 C C *** DECIDE WHETHER TO CHECK FOR SPECIAL CASE... IN PRACTICE (FROM C *** THE STANDPOINT OF THE CALLING OPTIMIZATION CODE) IT SEEMS BEST C *** NOT TO CHECK UNTIL A FEW ITERATIONS HAVE FAILED -- HENCE THE C *** TEST ON KAMIN BELOW. C 330 DELTA = ALPHAK + DMIN1(ZERO, V(DST0)) TWOPSI = ALPHAK*DST*DST + GTSTA IF (KA .GE. KAMIN) GO TO 340 C *** IF THE TEST IN REF. 2 IS SATISFIED, FALL THROUGH TO HANDLE C *** THE SPECIAL CASE (AS SOON AS THE MORE-SORENSEN TEST DETECTS C *** IT). IF (PSIFAC .GE. BIG) GO TO 340 IF (DELTA .GE. PSIFAC*TWOPSI) GO TO 370 C C *** CHECK FOR THE SPECIAL CASE OF H + ALPHA*D**2 (NEARLY) C *** SINGULAR. _USE_ ONE STEP OF INVERSE POWER METHOD WITH START C *** FROM DL7SVN TO OBTAIN APPROXIMATE EIGENVECTOR CORRESPONDING C *** TO SMALLEST EIGENVALUE OF (D**-1)*H*(D**-1). DL7SVN RETURNS C *** X AND W WITH L*W = X. C 340 T = DL7SVN(P, L, W(X), W) C C *** NORMALIZE W *** DO 350 I = 1, P 350 W(I) = T*W(I) C *** COMPLETE CURRENT INV. POWER ITER. -- REPLACE W BY (L**-T)*W. CALL DL7ITV(P, W, L, W) T2 = ONE/DV2NRM(P, W) DO 360 I = 1, P 360 W(I) = T2*W(I) T = T2 * T C C *** NOW W IS THE DESIRED APPROXIMATE (UNIT) EIGENVECTOR AND C *** T*X = ((D**-1)*H*(D**-1) + ALPHAK*I)*W. C SW = DD7TPR(P, W(Q), W) T1 = (RAD + DST) * (RAD - DST) ROOT = DSQRT(SW*SW + T1) IF (SW .LT. ZERO) ROOT = -ROOT SI = T1 / (SW + ROOT) C C *** THE ACTUAL TEST FOR THE SPECIAL CASE... C IF ((T2*SI)**2 .LE. EPS*(DST**2 + ALPHAK*RADSQ)) GO TO 380 C C *** UPDATE UPPER BOUND ON SMALLEST EIGENVALUE (WHEN NOT POSITIVE) C *** (AS RECOMMENDED BY MORE AND SORENSEN) AND CONTINUE... C IF (V(DST0) .LE. ZERO) V(DST0) = DMIN1(V(DST0), T2**2 - ALPHAK) LK = DMAX1(LK, -V(DST0)) C C *** CHECK WHETHER WE CAN HOPE TO DETECT THE SPECIAL CASE IN C *** THE AVAILABLE ARITHMETIC. ACCEPT STEP AS IT IS IF NOT. C C *** IF NOT YET AVAILABLE, OBTAIN MACHINE DEPENDENT VALUE DGXFAC. 370 IF (DGXFAC .EQ. ZERO) DGXFAC = EPSFAC * DR7MDC(3) C IF (DELTA .GT. DGXFAC*W(DGGDMX)) GO TO 250 GO TO 270 C C *** SPECIAL CASE DETECTED... NEGATE ALPHAK TO INDICATE SPECIAL CASE C 380 ALPHAK = -ALPHAK V(PREDUC) = HALF * TWOPSI C C *** ACCEPT CURRENT STEP IF ADDING SI*W WOULD LEAD TO A C *** FURTHER RELATIVE REDUCTION IN PSI OF LESS THAN V(EPSLON)/3. C T1 = ZERO T = SI*(ALPHAK*SW - HALF*SI*(ALPHAK + T*DD7TPR(P,W(X),W))) IF (T .LT. EPS*TWOPSI/SIX) GO TO 390 V(PREDUC) = V(PREDUC) + T DST = RAD T1 = -SI 390 DO 400 I = 1, P J = Q0 + I W(J) = T1*W(I) - W(J) STEP(I) = W(J) / D(I) 400 CONTINUE V(GTSTEP) = DD7TPR(P, DIG, W(Q)) C C *** SAVE VALUES FOR _USE_ IN A POSSIBLE RESTART *** C 410 V(DSTNRM) = DST V(STPPAR) = ALPHAK W(LK0) = LK W(UK0) = UK V(RAD0) = RAD W(DSTSAV) = DST C C *** RESTORE DIAGONAL OF DIHDI *** C J = 0 DO 420 I = 1, P J = J + I K = DIAG0 + I DIHDI(J) = W(K) 420 CONTINUE C 999 RETURN C C *** LAST CARD OF DG7QTS FOLLOWS *** END PyBDSF-1.10.1/src/port3/dh2rfa.f000066400000000000000000000006501420247104600157750ustar00rootroot00000000000000 SUBROUTINE DH2RFA(N, A, B, X, Y, Z) C C *** APPLY 2X2 HOUSEHOLDER REFLECTION DETERMINED BY X, Y, Z TO C *** N-VECTORS A, B *** C INTEGER N DOUBLE PRECISION A(N), B(N), X, Y, Z INTEGER I DOUBLE PRECISION T DO 10 I = 1, N T = A(I)*X + B(I)*Y A(I) = A(I) + T B(I) = B(I) + T*Z 10 CONTINUE 999 RETURN C *** LAST LINE OF DH2RFA FOLLOWS *** END PyBDSF-1.10.1/src/port3/dh2rfg.f000066400000000000000000000015261420247104600160060ustar00rootroot00000000000000 DOUBLE PRECISION FUNCTION DH2RFG(A, B, X, Y, Z) C C *** DETERMINE X, Y, Z SO I + (1,Z)**T * (X,Y) IS A 2X2 C *** HOUSEHOLDER REFLECTION SENDING (A,B)**T INTO (C,0)**T, C *** WHERE C = -SIGN(A)*SQRT(A**2 + B**2) IS THE VALUE DH2RFG C *** RETURNS. C DOUBLE PRECISION A, B, X, Y, Z C DOUBLE PRECISION A1, B1, C, T C/+ DOUBLE PRECISION DSQRT C/ DOUBLE PRECISION ZERO DATA ZERO/0.D+0/ C C *** BODY *** C IF (B .NE. ZERO) GO TO 10 X = ZERO Y = ZERO Z = ZERO DH2RFG = A GO TO 999 10 T = DABS(A) + DABS(B) A1 = A / T B1 = B / T C = DSQRT(A1**2 + B1**2) IF (A1 .GT. ZERO) C = -C A1 = A1 - C Z = B1 / A1 X = A1 / C Y = B1 / C DH2RFG = T * C 999 RETURN C *** LAST LINE OF DH2RFG FOLLOWS *** END PyBDSF-1.10.1/src/port3/dhqr2.f000066400000000000000000000354141420247104600156550ustar00rootroot00000000000000 SUBROUTINE DHQR2(NM,N,LOW,IGH,H,WR,WI,Z,IERR) C INTEGER I,J,K,L,M,N,EN,II,JJ,LL,MM,NA,NM,NN, X IGH,ITN,ITS,LOW,MP2,ENM2,IERR DOUBLE PRECISION H(NM,N),WR(N),WI(N),Z(NM,N) C DOUBLE PRECISION CMPLXN(2),CMPLXD(2),CMPLXC(2) C THE ABOVE ARE TO BE USED WITH THE PORT CDDIV C ROUTINE NEEDED HERE FOR DOUBLE COMPLEX IN C PLACE OF THE RATIOS USED IN THE ORIGINAL HQR2. C THEY ARE, RESPECTIVELY, NUMERATOR, DENOMINATOR, AND COMPLEX ANSWER. C DOUBLE PRECISION P,Q,R,S,T,W,X,Y,RA,SA,VI,VR,ZZ,NORM,TST1,TST2 LOGICAL NOTLAS C C THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE HQR2, C NUM. MATH. 16, 181-204(1970) BY PETERS AND WILKINSON. C HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971). C C THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS C OF A REAL UPPER HESSENBERG MATRIX BY THE QR METHOD. THE C EIGENVECTORS OF A REAL GENERAL MATRIX CAN ALSO BE FOUND C IF ELMHES AND ELTRAN OR ORTHES AND ORTRAN HAVE C BEEN USED TO REDUCE THIS GENERAL MATRIX TO HESSENBERG FORM C AND TO ACCUMULATE THE SIMILARITY TRANSFORMATIONS. C C ON INPUT C C NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL C ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM C DIMENSION STATEMENT. C C N IS THE ORDER OF THE MATRIX. C C LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING C SUBROUTINE BALANC. IF BALANC HAS NOT BEEN USED, C SET LOW=1, IGH=N. C C H CONTAINS THE UPPER HESSENBERG MATRIX. C C Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED BY ELTRAN C AFTER THE REDUCTION BY ELMHES, OR BY ORTRAN AFTER THE C REDUCTION BY ORTHES, IF PERFORMED. IF THE EIGENVECTORS C OF THE HESSENBERG MATRIX ARE DESIRED, Z MUST CONTAIN THE C IDENTITY MATRIX. C C ON OUTPUT C C H HAS BEEN DESTROYED. C C WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS, C RESPECTIVELY, OF THE EIGENVALUES. THE EIGENVALUES C ARE UNORDERED EXCEPT THAT COMPLEX CONJUGATE PAIRS C OF VALUES APPEAR CONSECUTIVELY WITH THE EIGENVALUE C HAVING THE POSITIVE IMAGINARY PART FIRST. IF AN C ERROR EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT C FOR INDICES IERR+1,...,N. C C Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGENVECTORS. C IF THE I-TH EIGENVALUE IS REAL, THE I-TH COLUMN OF Z C CONTAINS ITS EIGENVECTOR. IF THE I-TH EIGENVALUE IS COMPLEX C WITH POSITIVE IMAGINARY PART, THE I-TH AND (I+1)-TH C COLUMNS OF Z CONTAIN THE REAL AND IMAGINARY PARTS OF ITS C EIGENVECTOR. THE EIGENVECTORS ARE UNNORMALIZED. IF AN C ERROR EXIT IS MADE, NONE OF THE EIGENVECTORS HAS BEEN FOUND. C C IERR IS SET TO C ZERO FOR NORMAL RETURN, C J IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED C WHILE THE J-TH EIGENVALUE IS BEING SOUGHT. C C THIS ROUTINE IS FROM EISPACK (VERSION DATED AUGUST 1983), WITH C NAMES CHANGED IN ACCORDANCE WITH PORT CONVENTIONS FOR DOUBLE C PRECISION, AND WITH PROCEDURE CDIV REPLACED BY THE PORT DOUBLE- C PRECISION COMPLEX DIVISION ROUTINE, CDDIV. C C ------------------------------------------------------------------ C IERR = 0 NORM = 0.0D0 K = 1 C .......... STORE ROOTS ISOLATED BY BALANC C AND COMPUTE MATRIX NORM .......... DO 50 I = 1, N C DO 40 J = K, N 40 NORM = NORM + DABS(H(I,J)) C K = I IF (I .GE. LOW .AND. I .LE. IGH) GO TO 50 WR(I) = H(I,I) WI(I) = 0.0D0 50 CONTINUE C EN = IGH T = 0.0D0 ITN = 30*N C .......... SEARCH FOR NEXT EIGENVALUES .......... 60 IF (EN .LT. LOW) GO TO 340 ITS = 0 NA = EN - 1 ENM2 = NA - 1 C .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT C FOR L=EN STEP -1 UNTIL LOW DO -- .......... 70 DO 80 LL = LOW, EN L = EN + LOW - LL IF (L .EQ. LOW) GO TO 100 S = DABS(H(L-1,L-1)) + DABS(H(L,L)) IF (S .EQ. 0.0D0) S = NORM TST1 = S TST2 = TST1 + DABS(H(L,L-1)) IF (TST2 .EQ. TST1) GO TO 100 80 CONTINUE C .......... FORM SHIFT .......... 100 X = H(EN,EN) IF (L .EQ. EN) GO TO 270 Y = H(NA,NA) W = H(EN,NA) * H(NA,EN) IF (L .EQ. NA) GO TO 280 IF (ITN .EQ. 0) GO TO 1000 IF (ITS .NE. 10 .AND. ITS .NE. 20) GO TO 130 C .......... FORM EXCEPTIONAL SHIFT .......... T = T + X C DO 120 I = LOW, EN 120 H(I,I) = H(I,I) - X C S = DABS(H(EN,NA)) + DABS(H(NA,ENM2)) X = 0.75D0 * S Y = X W = -0.4375D0 * S * S 130 ITS = ITS + 1 ITN = ITN - 1 C .......... LOOK FOR TWO CONSECUTIVE SMALL C SUB-DIAGONAL ELEMENTS. C FOR M=EN-2 STEP -1 UNTIL L DO -- .......... DO 140 MM = L, ENM2 M = ENM2 + L - MM ZZ = H(M,M) R = X - ZZ S = Y - ZZ P = (R * S - W) / H(M+1,M) + H(M,M+1) Q = H(M+1,M+1) - ZZ - R - S R = H(M+2,M+1) S = DABS(P) + DABS(Q) + DABS(R) P = P / S Q = Q / S R = R / S IF (M .EQ. L) GO TO 150 TST1 = DABS(P)*(DABS(H(M-1,M-1)) + DABS(ZZ) + DABS(H(M+1,M+1))) TST2 = TST1 + DABS(H(M,M-1))*(DABS(Q) + DABS(R)) IF (TST2 .EQ. TST1) GO TO 150 140 CONTINUE C 150 MP2 = M + 2 C DO 160 I = MP2, EN H(I,I-2) = 0.0D0 IF (I .EQ. MP2) GO TO 160 H(I,I-3) = 0.0D0 160 CONTINUE C .......... DOUBLE QR STEP INVOLVING ROWS L TO EN AND C COLUMNS M TO EN .......... DO 260 K = M, NA NOTLAS = K .NE. NA IF (K .EQ. M) GO TO 170 P = H(K,K-1) Q = H(K+1,K-1) R = 0.0D0 IF (NOTLAS) R = H(K+2,K-1) X = DABS(P) + DABS(Q) + DABS(R) IF (X .EQ. 0.0D0) GO TO 260 P = P / X Q = Q / X R = R / X 170 S = DSIGN(DSQRT(P*P+Q*Q+R*R),P) IF (K .EQ. M) GO TO 180 H(K,K-1) = -S * X GO TO 190 180 IF (L .NE. M) H(K,K-1) = -H(K,K-1) 190 P = P + S X = P / S Y = Q / S ZZ = R / S Q = Q / P R = R / P IF (NOTLAS) GO TO 225 C .......... ROW MODIFICATION .......... DO 200 J = K, N P = H(K,J) + Q * H(K+1,J) H(K,J) = H(K,J) - P * X H(K+1,J) = H(K+1,J) - P * Y 200 CONTINUE C J = MIN0(EN,K+3) C .......... COLUMN MODIFICATION .......... DO 210 I = 1, J P = X * H(I,K) + Y * H(I,K+1) H(I,K) = H(I,K) - P H(I,K+1) = H(I,K+1) - P * Q 210 CONTINUE C .......... ACCUMULATE TRANSFORMATIONS .......... DO 220 I = LOW, IGH P = X * Z(I,K) + Y * Z(I,K+1) Z(I,K) = Z(I,K) - P Z(I,K+1) = Z(I,K+1) - P * Q 220 CONTINUE GO TO 255 225 CONTINUE C .......... ROW MODIFICATION .......... DO 230 J = K, N P = H(K,J) + Q * H(K+1,J) + R * H(K+2,J) H(K,J) = H(K,J) - P * X H(K+1,J) = H(K+1,J) - P * Y H(K+2,J) = H(K+2,J) - P * ZZ 230 CONTINUE C J = MIN0(EN,K+3) C .......... COLUMN MODIFICATION .......... DO 240 I = 1, J P = X * H(I,K) + Y * H(I,K+1) + ZZ * H(I,K+2) H(I,K) = H(I,K) - P H(I,K+1) = H(I,K+1) - P * Q H(I,K+2) = H(I,K+2) - P * R 240 CONTINUE C .......... ACCUMULATE TRANSFORMATIONS .......... DO 250 I = LOW, IGH P = X * Z(I,K) + Y * Z(I,K+1) + ZZ * Z(I,K+2) Z(I,K) = Z(I,K) - P Z(I,K+1) = Z(I,K+1) - P * Q Z(I,K+2) = Z(I,K+2) - P * R 250 CONTINUE 255 CONTINUE C 260 CONTINUE C GO TO 70 C .......... ONE ROOT FOUND .......... 270 H(EN,EN) = X + T WR(EN) = H(EN,EN) WI(EN) = 0.0D0 EN = NA GO TO 60 C .......... TWO ROOTS FOUND .......... 280 P = (Y - X) / 2.0D0 Q = P * P + W ZZ = DSQRT(DABS(Q)) H(EN,EN) = X + T X = H(EN,EN) H(NA,NA) = Y + T IF (Q .LT. 0.0D0) GO TO 320 C .......... REAL PAIR .......... ZZ = P + DSIGN(ZZ,P) WR(NA) = X + ZZ WR(EN) = WR(NA) IF (ZZ .NE. 0.0D0) WR(EN) = X - W / ZZ WI(NA) = 0.0D0 WI(EN) = 0.0D0 X = H(EN,NA) S = DABS(X) + DABS(ZZ) P = X / S Q = ZZ / S R = DSQRT(P*P+Q*Q) P = P / R Q = Q / R C .......... ROW MODIFICATION .......... DO 290 J = NA, N ZZ = H(NA,J) H(NA,J) = Q * ZZ + P * H(EN,J) H(EN,J) = Q * H(EN,J) - P * ZZ 290 CONTINUE C .......... COLUMN MODIFICATION .......... DO 300 I = 1, EN ZZ = H(I,NA) H(I,NA) = Q * ZZ + P * H(I,EN) H(I,EN) = Q * H(I,EN) - P * ZZ 300 CONTINUE C .......... ACCUMULATE TRANSFORMATIONS .......... DO 310 I = LOW, IGH ZZ = Z(I,NA) Z(I,NA) = Q * ZZ + P * Z(I,EN) Z(I,EN) = Q * Z(I,EN) - P * ZZ 310 CONTINUE C GO TO 330 C .......... COMPLEX PAIR .......... 320 WR(NA) = X + P WR(EN) = X + P WI(NA) = ZZ WI(EN) = -ZZ 330 EN = ENM2 GO TO 60 C .......... ALL ROOTS FOUND. BACKSUBSTITUTE TO FIND C VECTORS OF UPPER TRIANGULAR FORM .......... 340 IF (NORM .EQ. 0.0D0) GO TO 1001 C .......... FOR EN=N STEP -1 UNTIL 1 DO -- .......... DO 800 NN = 1, N EN = N + 1 - NN P = WR(EN) Q = WI(EN) NA = EN - 1 IF (Q) 710, 600, 800 C .......... REAL VECTOR .......... 600 M = EN H(EN,EN) = 1.0D0 IF (NA .EQ. 0) GO TO 800 C .......... FOR I=EN-1 STEP -1 UNTIL 1 DO -- .......... DO 700 II = 1, NA I = EN - II W = H(I,I) - P R = 0.0D0 C DO 610 J = M, EN 610 R = R + H(I,J) * H(J,EN) C IF (WI(I) .GE. 0.0D0) GO TO 630 ZZ = W S = R GO TO 700 630 M = I IF (WI(I) .NE. 0.0D0) GO TO 640 T = W IF (T .NE. 0.0D0) GO TO 635 TST1 = NORM T = TST1 632 T = 0.01D0 * T TST2 = NORM + T IF (TST2 .GT. TST1) GO TO 632 635 H(I,EN) = -R / T GO TO 680 C .......... SOLVE REAL EQUATIONS .......... 640 X = H(I,I+1) Y = H(I+1,I) Q = (WR(I) - P) * (WR(I) - P) + WI(I) * WI(I) T = (X * S - ZZ * R) / Q H(I,EN) = T IF (DABS(X) .LE. DABS(ZZ)) GO TO 650 H(I+1,EN) = (-R - W * T) / X GO TO 680 650 H(I+1,EN) = (-S - Y * T) / ZZ C C .......... OVERFLOW CONTROL .......... 680 T = DABS(H(I,EN)) IF (T .EQ. 0.0D0) GO TO 700 TST1 = T TST2 = TST1 + 1.0D0/TST1 IF (TST2 .GT. TST1) GO TO 700 DO 690 J = I, EN H(J,EN) = H(J,EN)/T 690 CONTINUE C 700 CONTINUE C .......... END REAL VECTOR .......... GO TO 800 C .......... COMPLEX VECTOR .......... 710 M = NA C .......... LAST VECTOR COMPONENT CHOSEN IMAGINARY SO THAT C EIGENVECTOR MATRIX IS TRIANGULAR .......... IF (DABS(H(EN,NA)) .LE. DABS(H(NA,EN))) GO TO 720 H(NA,NA) = Q / H(EN,NA) H(NA,EN) = -(H(EN,EN) - P) / H(EN,NA) GO TO 730 720 CMPLXN(1) = 0.D0 CMPLXN(2) = -H(NA,EN) CMPLXD(1) = H(NA,NA)-P CMPLXD(2) = Q CALL CDDIV(CMPLXN,CMPLXD,CMPLXC) H(NA,NA) = CMPLXC(1) H(NA,EN) = CMPLXC(2) 730 H(EN,NA) = 0.0D0 H(EN,EN) = 1.0D0 ENM2 = NA - 1 IF (ENM2 .EQ. 0) GO TO 800 C .......... FOR I=EN-2 STEP -1 UNTIL 1 DO -- .......... DO 795 II = 1, ENM2 I = NA - II W = H(I,I) - P RA = 0.0D0 SA = 0.0D0 C DO 760 J = M, EN RA = RA + H(I,J) * H(J,NA) SA = SA + H(I,J) * H(J,EN) 760 CONTINUE C IF (WI(I) .GE. 0.0D0) GO TO 770 ZZ = W R = RA S = SA GO TO 795 770 M = I IF (WI(I) .NE. 0.0D0) GO TO 780 CMPLXN(1) = -RA CMPLXN(2) = -SA CMPLXD(1) = W CMPLXD(2) = Q CALL CDDIV(CMPLXN,CMPLXD,CMPLXC) H(I,NA) = CMPLXC(1) H(I,EN) = CMPLXC(2) GO TO 790 C .......... SOLVE COMPLEX EQUATIONS .......... 780 X = H(I,I+1) Y = H(I+1,I) VR = (WR(I) - P) * (WR(I) - P) + WI(I) * WI(I) - Q * Q VI = (WR(I) - P) * 2.0D0 * Q IF (VR .NE. 0.0D0 .OR. VI .NE. 0.0D0) GO TO 784 TST1 = NORM * (DABS(W) + DABS(Q) + DABS(X) X + DABS(Y) + DABS(ZZ)) VR = TST1 783 VR = 0.01D0 * VR TST2 = TST1 + VR IF (TST2 .GT. TST1) GO TO 783 784 CMPLXN(1) = X*R-ZZ*RA+Q*SA CMPLXN(2) = X*S-ZZ*SA-Q*RA CMPLXD(1) = VR CMPLXD(2) = VI CALL CDDIV(CMPLXN,CMPLXD,CMPLXC) H(I,NA) = CMPLXC(1) H(I,EN) = CMPLXC(2) IF (DABS(X) .LE. DABS(ZZ) + DABS(Q)) GO TO 785 H(I+1,NA) = (-RA - W * H(I,NA) + Q * H(I,EN)) / X H(I+1,EN) = (-SA - W * H(I,EN) - Q * H(I,NA)) / X GO TO 790 785 CMPLXN(1) = -R-Y*H(I,NA) CMPLXN(2) = -S-Y*H(I,EN) CMPLXD(1) = ZZ CMPLXD(2) = Q CALL CDDIV(CMPLXN,CMPLXD,CMPLXC) H(I+1,NA) = CMPLXC(1) H(I+1,EN) = CMPLXC(2) C C .......... OVERFLOW CONTROL .......... 790 T = DMAX1(DABS(H(I,NA)), DABS(H(I,EN))) IF (T .EQ. 0.0D0) GO TO 795 TST1 = T TST2 = TST1 + 1.0D0/TST1 IF (TST2 .GT. TST1) GO TO 795 DO 792 J = I, EN H(J,NA) = H(J,NA)/T H(J,EN) = H(J,EN)/T 792 CONTINUE C 795 CONTINUE C .......... END COMPLEX VECTOR .......... 800 CONTINUE C .......... END BACK SUBSTITUTION. C VECTORS OF ISOLATED ROOTS .......... DO 840 I = 1, N IF (I .GE. LOW .AND. I .LE. IGH) GO TO 840 C DO 820 J = I, N 820 Z(I,J) = H(I,J) C 840 CONTINUE C .......... MULTIPLY BY TRANSFORMATION MATRIX TO GIVE C VECTORS OF ORIGINAL FULL MATRIX. C FOR J=N STEP -1 UNTIL LOW DO -- .......... DO 880 JJ = LOW, N J = N + LOW - JJ M = MIN0(J,IGH) C DO 880 I = LOW, IGH ZZ = 0.0D0 C DO 860 K = LOW, M 860 ZZ = ZZ + Z(I,K) * H(K,J) C Z(I,J) = ZZ 880 CONTINUE C GO TO 1001 C .......... SET ERROR -- ALL EIGENVALUES HAVE NOT C CONVERGED AFTER 30*N ITERATIONS .......... 1000 IERR = EN 1001 RETURN END PyBDSF-1.10.1/src/port3/ditsum.f000066400000000000000000000174051420247104600161420ustar00rootroot00000000000000 SUBROUTINE DITSUM(D, G, IV, LIV, LV, P, V, X) C C *** PRINT ITERATION SUMMARY FOR ***SOL (VERSION 2.3) *** C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, P INTEGER IV(LIV) DOUBLE PRECISION D(P), G(P), V(LV), X(P) C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER ALG, I, IV1, M, NF, NG, OL, PU C/6S C REAL MODEL1(6), MODEL2(6) C/7S CHARACTER*4 MODEL1(6), MODEL2(6) C/ DOUBLE PRECISION NRELDF, OLDF, PRELDF, RELDF, ZERO C C *** NO EXTERNAL FUNCTIONS OR SUBROUTINES *** C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER ALGSAV, DSTNRM, F, FDIF, F0, NEEDHD, NFCALL, NFCOV, NGCOV, 1 NGCALL, NITER, NREDUC, OUTLEV, PREDUC, PRNTIT, PRUNIT, 2 RELDX, SOLPRT, STATPR, STPPAR, SUSED, X0PRT C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA ALGSAV/51/, NEEDHD/36/, NFCALL/6/, NFCOV/52/, NGCALL/30/, C 1 NGCOV/53/, NITER/31/, OUTLEV/19/, PRNTIT/39/, PRUNIT/21/, C 2 SOLPRT/22/, STATPR/23/, SUSED/64/, X0PRT/24/ C/7 PARAMETER (ALGSAV=51, NEEDHD=36, NFCALL=6, NFCOV=52, NGCALL=30, 1 NGCOV=53, NITER=31, OUTLEV=19, PRNTIT=39, PRUNIT=21, 2 SOLPRT=22, STATPR=23, SUSED=64, X0PRT=24) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DSTNRM/2/, F/10/, F0/13/, FDIF/11/, NREDUC/6/, PREDUC/7/, C 1 RELDX/17/, STPPAR/5/ C/7 PARAMETER (DSTNRM=2, F=10, F0=13, FDIF=11, NREDUC=6, PREDUC=7, 1 RELDX=17, STPPAR=5) C/ C C/6 C DATA ZERO/0.D+0/ C/7 PARAMETER (ZERO=0.D+0) C/ C/6S C DATA MODEL1(1)/4H /, MODEL1(2)/4H /, MODEL1(3)/4H /, C 1 MODEL1(4)/4H /, MODEL1(5)/4H G /, MODEL1(6)/4H S /, C 2 MODEL2(1)/4H G /, MODEL2(2)/4H S /, MODEL2(3)/4HG-S /, C 3 MODEL2(4)/4HS-G /, MODEL2(5)/4H-S-G/, MODEL2(6)/4H-G-S/ C/7S DATA MODEL1/' ',' ',' ',' ',' G ',' S '/, 1 MODEL2/' G ',' S ','G-S ','S-G ','-S-G','-G-S'/ C/ C C------------------------------- BODY -------------------------------- C PU = IV(PRUNIT) IF (PU .EQ. 0) GO TO 999 IV1 = IV(1) IF (IV1 .GT. 62) IV1 = IV1 - 51 OL = IV(OUTLEV) ALG = MOD(IV(ALGSAV)-1,2) + 1 IF (IV1 .LT. 2 .OR. IV1 .GT. 15) GO TO 370 IF (IV1 .GE. 12) GO TO 120 IF (IV1 .EQ. 2 .AND. IV(NITER) .EQ. 0) GO TO 390 IF (OL .EQ. 0) GO TO 120 IF (IV1 .GE. 10 .AND. IV(PRNTIT) .EQ. 0) GO TO 120 IF (IV1 .GT. 2) GO TO 10 IV(PRNTIT) = IV(PRNTIT) + 1 IF (IV(PRNTIT) .LT. IABS(OL)) GO TO 999 10 NF = IV(NFCALL) - IABS(IV(NFCOV)) IV(PRNTIT) = 0 RELDF = ZERO PRELDF = ZERO OLDF = DMAX1(DABS(V(F0)), DABS(V(F))) IF (OLDF .LE. ZERO) GO TO 20 RELDF = V(FDIF) / OLDF PRELDF = V(PREDUC) / OLDF 20 IF (OL .GT. 0) GO TO 60 C C *** PRINT SHORT SUMMARY LINE *** C IF (IV(NEEDHD) .EQ. 1 .AND. ALG .EQ. 1) WRITE(PU,30) 30 FORMAT(/10H IT NF,6X,1HF,7X,5HRELDF,3X,6HPRELDF,3X,5HRELDX, 1 2X,13HMODEL STPPAR) IF (IV(NEEDHD) .EQ. 1 .AND. ALG .EQ. 2) WRITE(PU,40) 40 FORMAT(/11H IT NF,7X,1HF,8X,5HRELDF,4X,6HPRELDF,4X,5HRELDX, 1 3X,6HSTPPAR) IV(NEEDHD) = 0 IF (ALG .EQ. 2) GO TO 50 M = IV(SUSED) WRITE(PU,100) IV(NITER), NF, V(F), RELDF, PRELDF, V(RELDX), 1 MODEL1(M), MODEL2(M), V(STPPAR) GO TO 120 C 50 WRITE(PU,110) IV(NITER), NF, V(F), RELDF, PRELDF, V(RELDX), 1 V(STPPAR) GO TO 120 C C *** PRINT LONG SUMMARY LINE *** C 60 IF (IV(NEEDHD) .EQ. 1 .AND. ALG .EQ. 1) WRITE(PU,70) 70 FORMAT(/11H IT NF,6X,1HF,7X,5HRELDF,3X,6HPRELDF,3X,5HRELDX, 1 2X,13HMODEL STPPAR,2X,6HD*STEP,2X,7HNPRELDF) IF (IV(NEEDHD) .EQ. 1 .AND. ALG .EQ. 2) WRITE(PU,80) 80 FORMAT(/11H IT NF,7X,1HF,8X,5HRELDF,4X,6HPRELDF,4X,5HRELDX, 1 3X,6HSTPPAR,3X,6HD*STEP,3X,7HNPRELDF) IV(NEEDHD) = 0 NRELDF = ZERO IF (OLDF .GT. ZERO) NRELDF = V(NREDUC) / OLDF IF (ALG .EQ. 2) GO TO 90 M = IV(SUSED) WRITE(PU,100) IV(NITER), NF, V(F), RELDF, PRELDF, V(RELDX), 1 MODEL1(M), MODEL2(M), V(STPPAR), V(DSTNRM), NRELDF GO TO 120 C 90 WRITE(PU,110) IV(NITER), NF, V(F), RELDF, PRELDF, 1 V(RELDX), V(STPPAR), V(DSTNRM), NRELDF 100 FORMAT(I6,I5,D10.3,2D9.2,D8.1,A3,A4,2D8.1,D9.2) 110 FORMAT(I6,I5,D11.3,2D10.2,3D9.1,D10.2) C 120 IF (IV1 .LE. 2) GO TO 999 I = IV(STATPR) IF (I .EQ. (-1)) GO TO 460 IF (I + IV1 .LT. 0) GO TO 460 GO TO (999, 999, 130, 150, 170, 190, 210, 230, 250, 270, 290, 310, 1 330, 350, 500), IV1 C 130 WRITE(PU,140) 140 FORMAT(/26H ***** X-CONVERGENCE *****) GO TO 430 C 150 WRITE(PU,160) 160 FORMAT(/42H ***** RELATIVE FUNCTION CONVERGENCE *****) GO TO 430 C 170 WRITE(PU,180) 180 FORMAT(/49H ***** X- AND RELATIVE FUNCTION CONVERGENCE *****) GO TO 430 C 190 WRITE(PU,200) 200 FORMAT(/42H ***** ABSOLUTE FUNCTION CONVERGENCE *****) GO TO 430 C 210 WRITE(PU,220) 220 FORMAT(/33H ***** SINGULAR CONVERGENCE *****) GO TO 430 C 230 WRITE(PU,240) 240 FORMAT(/30H ***** FALSE CONVERGENCE *****) GO TO 430 C 250 WRITE(PU,260) 260 FORMAT(/38H ***** FUNCTION EVALUATION LIMIT *****) GO TO 430 C 270 WRITE(PU,280) 280 FORMAT(/28H ***** ITERATION LIMIT *****) GO TO 430 C 290 WRITE(PU,300) 300 FORMAT(/18H ***** STOPX *****) GO TO 430 C 310 WRITE(PU,320) 320 FORMAT(/44H ***** INITIAL F(X) CANNOT BE COMPUTED *****) C GO TO 390 C 330 WRITE(PU,340) 340 FORMAT(/37H ***** BAD PARAMETERS TO ASSESS *****) GO TO 999 C 350 WRITE(PU,360) 360 FORMAT(/43H ***** GRADIENT COULD NOT BE COMPUTED *****) IF (IV(NITER) .GT. 0) GO TO 460 GO TO 390 C 370 WRITE(PU,380) IV(1) 380 FORMAT(/14H ***** IV(1) =,I5,6H *****) GO TO 999 C C *** INITIAL CALL ON DITSUM *** C 390 IF (IV(X0PRT) .NE. 0) WRITE(PU,400) (I, X(I), D(I), I = 1, P) 400 FORMAT(/23H I INITIAL X(I),8X,4HD(I)//(1X,I5,D17.6,D14.3)) C *** THE FOLLOWING ARE TO AVOID UNDEFINED VARIABLES WHEN THE C *** FUNCTION EVALUATION LIMIT IS 1... V(DSTNRM) = ZERO V(FDIF) = ZERO V(NREDUC) = ZERO V(PREDUC) = ZERO V(RELDX) = ZERO IF (IV1 .GE. 12) GO TO 999 IV(NEEDHD) = 0 IV(PRNTIT) = 0 IF (OL .EQ. 0) GO TO 999 IF (OL .LT. 0 .AND. ALG .EQ. 1) WRITE(PU,30) IF (OL .LT. 0 .AND. ALG .EQ. 2) WRITE(PU,40) IF (OL .GT. 0 .AND. ALG .EQ. 1) WRITE(PU,70) IF (OL .GT. 0 .AND. ALG .EQ. 2) WRITE(PU,80) IF (ALG .EQ. 1) WRITE(PU,410) IV(NFCALL), V(F) IF (ALG .EQ. 2) WRITE(PU,420) IV(NFCALL), V(F) 410 FORMAT(/6H 0,I5,D10.3) 420 FORMAT(/6H 0,I5,D11.3) GO TO 999 C C *** PRINT VARIOUS INFORMATION REQUESTED ON SOLUTION *** C 430 IV(NEEDHD) = 1 IF (IV(STATPR) .LE. 0) GO TO 460 OLDF = DMAX1(DABS(V(F0)), DABS(V(F))) PRELDF = ZERO NRELDF = ZERO IF (OLDF .LE. ZERO) GO TO 440 PRELDF = V(PREDUC) / OLDF NRELDF = V(NREDUC) / OLDF 440 NF = IV(NFCALL) - IV(NFCOV) NG = IV(NGCALL) - IV(NGCOV) WRITE(PU,450) V(F), V(RELDX), NF, NG, PRELDF, NRELDF 450 FORMAT(/9H FUNCTION,D17.6,8H RELDX,D17.3/12H FUNC. EVALS, 1 I8,9X,11HGRAD. EVALS,I8/7H PRELDF,D16.3,6X,7HNPRELDF,D15.3) C 460 IF (IV(SOLPRT) .EQ. 0) GO TO 999 IV(NEEDHD) = 1 IF (IV(ALGSAV) .GT. 2) GO TO 999 WRITE(PU,470) 470 FORMAT(/22H I FINAL X(I),8X,4HD(I),10X,4HG(I)/) DO 480 I = 1, P 480 WRITE(PU,490) I, X(I), D(I), G(I) 490 FORMAT(1X,I5,D16.6,2D14.3) GO TO 999 C 500 WRITE(PU,510) 510 FORMAT(/24H INCONSISTENT DIMENSIONS) 999 RETURN C *** LAST CARD OF DITSUM FOLLOWS *** END PyBDSF-1.10.1/src/port3/divset.f000066400000000000000000000066021420247104600161300ustar00rootroot00000000000000 SUBROUTINE DIVSET(ALG, IV, LIV, LV, V) C C *** SUPPLY ***SOL (VERSION 2.3) DEFAULT VALUES TO IV AND V *** C C *** ALG = 1 MEANS REGRESSION CONSTANTS. C *** ALG = 2 MEANS GENERAL UNCONSTRAINED OPTIMIZATION CONSTANTS. C INTEGER LIV, LV INTEGER ALG, IV(LIV) DOUBLE PRECISION V(LV) C INTEGER I7MDCN EXTERNAL I7MDCN,DV7DFL C I7MDCN... RETURNS MACHINE-DEPENDENT INTEGER CONSTANTS. C DV7DFL.... PROVIDES DEFAULT VALUES TO V. C INTEGER ALG1, MIV, MV INTEGER MINIV(4), MINV(4) C C *** SUBSCRIPTS FOR IV *** C INTEGER ALGSAV, COVPRT, COVREQ, DRADPR, DTYPE, HC, IERR, INITH, 1 INITS, IPIVOT, IVNEED, LASTIV, LASTV, LMAT, MXFCAL, 2 MXITER, NFCOV, NGCOV, NVDFLT, NVSAVE, OUTLEV, PARPRT, 3 PARSAV, PERM, PRUNIT, QRTYP, RDREQ, RMAT, SOLPRT, STATPR, 4 VNEED, VSAVE, X0PRT C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA ALGSAV/51/, COVPRT/14/, COVREQ/15/, DRADPR/101/, DTYPE/16/, C 1 HC/71/, IERR/75/, INITH/25/, INITS/25/, IPIVOT/76/, C 2 IVNEED/3/, LASTIV/44/, LASTV/45/, LMAT/42/, MXFCAL/17/, C 3 MXITER/18/, NFCOV/52/, NGCOV/53/, NVDFLT/50/, NVSAVE/9/, C 4 OUTLEV/19/, PARPRT/20/, PARSAV/49/, PERM/58/, PRUNIT/21/, C 5 QRTYP/80/, RDREQ/57/, RMAT/78/, SOLPRT/22/, STATPR/23/, C 6 VNEED/4/, VSAVE/60/, X0PRT/24/ C/7 PARAMETER (ALGSAV=51, COVPRT=14, COVREQ=15, DRADPR=101, DTYPE=16, 1 HC=71, IERR=75, INITH=25, INITS=25, IPIVOT=76, 2 IVNEED=3, LASTIV=44, LASTV=45, LMAT=42, MXFCAL=17, 3 MXITER=18, NFCOV=52, NGCOV=53, NVDFLT=50, NVSAVE=9, 4 OUTLEV=19, PARPRT=20, PARSAV=49, PERM=58, PRUNIT=21, 5 QRTYP=80, RDREQ=57, RMAT=78, SOLPRT=22, STATPR=23, 6 VNEED=4, VSAVE=60, X0PRT=24) C/ DATA MINIV(1)/82/, MINIV(2)/59/, MINIV(3)/103/, MINIV(4)/103/, 1 MINV(1)/98/, MINV(2)/71/, MINV(3)/101/, MINV(4)/85/ C C------------------------------- BODY -------------------------------- C IF (PRUNIT .LE. LIV) IV(PRUNIT) = I7MDCN(1) IF (ALGSAV .LE. LIV) IV(ALGSAV) = ALG IF (ALG .LT. 1 .OR. ALG .GT. 4) GO TO 40 MIV = MINIV(ALG) IF (LIV .LT. MIV) GO TO 20 MV = MINV(ALG) IF (LV .LT. MV) GO TO 30 ALG1 = MOD(ALG-1,2) + 1 CALL DV7DFL(ALG1, LV, V) IV(1) = 12 IF (ALG .GT. 2) IV(DRADPR) = 1 IV(IVNEED) = 0 IV(LASTIV) = MIV IV(LASTV) = MV IV(LMAT) = MV + 1 IV(MXFCAL) = 200 IV(MXITER) = 150 IV(OUTLEV) = 1 IV(PARPRT) = 1 IV(PERM) = MIV + 1 IV(SOLPRT) = 1 IV(STATPR) = 1 IV(VNEED) = 0 IV(X0PRT) = 1 C IF (ALG1 .GE. 2) GO TO 10 C C *** REGRESSION VALUES C IV(COVPRT) = 3 IV(COVREQ) = 1 IV(DTYPE) = 1 IV(HC) = 0 IV(IERR) = 0 IV(INITS) = 0 IV(IPIVOT) = 0 IV(NVDFLT) = 32 IV(VSAVE) = 58 IF (ALG .GT. 2) IV(VSAVE) = IV(VSAVE) + 3 IV(PARSAV) = IV(VSAVE) + NVSAVE IV(QRTYP) = 1 IV(RDREQ) = 3 IV(RMAT) = 0 GO TO 999 C C *** GENERAL OPTIMIZATION VALUES C 10 IV(DTYPE) = 0 IV(INITH) = 1 IV(NFCOV) = 0 IV(NGCOV) = 0 IV(NVDFLT) = 25 IV(PARSAV) = 47 IF (ALG .GT. 2) IV(PARSAV) = 61 GO TO 999 C 20 IV(1) = 15 GO TO 999 C 30 IV(1) = 16 GO TO 999 C 40 IV(1) = 67 C 999 RETURN C *** LAST CARD OF DIVSET FOLLOWS *** END PyBDSF-1.10.1/src/port3/dl7itv.f000066400000000000000000000015471420247104600160460ustar00rootroot00000000000000 SUBROUTINE DL7ITV(N, X, L, Y) C C *** SOLVE (L**T)*X = Y, WHERE L IS AN N X N LOWER TRIANGULAR C *** MATRIX STORED COMPACTLY BY ROWS. X AND Y MAY OCCUPY THE SAME C *** STORAGE. *** C INTEGER N DOUBLE PRECISION X(N), L(1), Y(N) INTEGER I, II, IJ, IM1, I0, J, NP1 DOUBLE PRECISION XI, ZERO C/6 C DATA ZERO/0.D+0/ C/7 PARAMETER (ZERO=0.D+0) C/ C DO 10 I = 1, N 10 X(I) = Y(I) NP1 = N + 1 I0 = N*(N+1)/2 DO 30 II = 1, N I = NP1 - II XI = X(I)/L(I0) X(I) = XI IF (I .LE. 1) GO TO 999 I0 = I0 - I IF (XI .EQ. ZERO) GO TO 30 IM1 = I - 1 DO 20 J = 1, IM1 IJ = I0 + J X(J) = X(J) - XI*L(IJ) 20 CONTINUE 30 CONTINUE 999 RETURN C *** LAST CARD OF DL7ITV FOLLOWS *** END PyBDSF-1.10.1/src/port3/dl7ivm.f000066400000000000000000000014621420247104600160330ustar00rootroot00000000000000 SUBROUTINE DL7IVM(N, X, L, Y) C C *** SOLVE L*X = Y, WHERE L IS AN N X N LOWER TRIANGULAR C *** MATRIX STORED COMPACTLY BY ROWS. X AND Y MAY OCCUPY THE SAME C *** STORAGE. *** C INTEGER N DOUBLE PRECISION X(N), L(1), Y(N) DOUBLE PRECISION DD7TPR EXTERNAL DD7TPR INTEGER I, J, K DOUBLE PRECISION T, ZERO C/6 C DATA ZERO/0.D+0/ C/7 PARAMETER (ZERO=0.D+0) C/ C DO 10 K = 1, N IF (Y(K) .NE. ZERO) GO TO 20 X(K) = ZERO 10 CONTINUE GO TO 999 20 J = K*(K+1)/2 X(K) = Y(K) / L(J) IF (K .GE. N) GO TO 999 K = K + 1 DO 30 I = K, N T = DD7TPR(I-1, L(J+1), X) J = J + I X(I) = (Y(I) - T)/L(J) 30 CONTINUE 999 RETURN C *** LAST CARD OF DL7IVM FOLLOWS *** END PyBDSF-1.10.1/src/port3/dl7msb.f000066400000000000000000000063221420247104600160210ustar00rootroot00000000000000 SUBROUTINE DL7MSB(B, D, G, IERR, IPIV, IPIV1, IPIV2, KA, LMAT, 1 LV, P, P0, PC, QTR, RMAT, STEP, TD, TG, V, 2 W, WLM, X, X0) C C *** COMPUTE HEURISTIC BOUNDED NEWTON STEP *** C INTEGER IERR, KA, LV, P, P0, PC INTEGER IPIV(P), IPIV1(P), IPIV2(P) DOUBLE PRECISION B(2,P), D(P), G(P), LMAT(1), QTR(P), RMAT(1), 1 STEP(P,3), TD(P), TG(P), V(LV), W(P), WLM(1), 2 X0(P), X(P) C DIMENSION LMAT(P*(P+1)/2), RMAT(P*(P+1)/2), WLM(P*(P+5)/2 + 4) C DOUBLE PRECISION DD7TPR EXTERNAL DD7MLP, DD7TPR, DL7MST, DL7TVM, DQ7RSH, DS7BQN, 1 DV2AXY,DV7CPY, DV7IPR, DV7SCP, DV7VMP C C *** LOCAL VARIABLES *** C INTEGER I, J, K, K0, KB, KINIT, L, NS, P1, P10, P11 DOUBLE PRECISION DS0, NRED, PRED, RAD DOUBLE PRECISION ONE, ZERO C C *** V SUBSCRIPTS *** C INTEGER DST0, DSTNRM, GTSTEP, NREDUC, PREDUC, RADIUS C C/6 C DATA DST0/3/, DSTNRM/2/, GTSTEP/4/, NREDUC/6/, PREDUC/7/, C 1 RADIUS/8/ C/7 PARAMETER (DST0=3, DSTNRM=2, GTSTEP=4, NREDUC=6, PREDUC=7, 1 RADIUS=8) C/ DATA ONE/1.D+0/, ZERO/0.D+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C P1 = PC IF (KA .LT. 0) GO TO 10 NRED = V(NREDUC) DS0 = V(DST0) GO TO 20 10 P0 = 0 KA = -1 C 20 KINIT = -1 IF (P0 .EQ. P1) KINIT = KA CALL DV7CPY(P, X, X0) CALL DV7CPY(P, TD, D) C *** _USE_ STEP(1,3) AS TEMP. COPY OF QTR *** CALL DV7CPY(P, STEP(1,3), QTR) CALL DV7IPR(P, IPIV, TD) PRED = ZERO RAD = V(RADIUS) KB = -1 V(DSTNRM) = ZERO IF (P1 .GT. 0) GO TO 30 NRED = ZERO DS0 = ZERO CALL DV7SCP(P, STEP, ZERO) GO TO 90 C 30 CALL DV7VMP(P, TG, G, D, -1) CALL DV7IPR(P, IPIV, TG) P10 = P1 40 K = KINIT KINIT = -1 V(RADIUS) = RAD - V(DSTNRM) CALL DV7VMP(P1, TG, TG, TD, 1) DO 50 I = 1, P1 50 IPIV1(I) = I K0 = MAX0(0, K) CALL DL7MST(TD, TG, IERR, IPIV1, K, P1, STEP(1,3), RMAT, STEP, 1 V, WLM) CALL DV7VMP(P1, TG, TG, TD, -1) P0 = P1 IF (KA .GE. 0) GO TO 60 NRED = V(NREDUC) DS0 = V(DST0) C 60 KA = K V(RADIUS) = RAD L = P1 + 5 IF (K .LE. K0) CALL DD7MLP(P1, LMAT, TD, RMAT, -1) IF (K .GT. K0) CALL DD7MLP(P1, LMAT, TD, WLM(L), -1) CALL DS7BQN(B, D, STEP(1,2), IPIV, IPIV1, IPIV2, KB, LMAT, 1 LV, NS, P, P1, STEP, TD, TG, V, W, X, X0) PRED = PRED + V(PREDUC) IF (NS .EQ. 0) GO TO 80 P0 = 0 C C *** UPDATE RMAT AND QTR *** C P11 = P1 + 1 L = P10 + P11 DO 70 K = P11, P10 J = L - K I = IPIV2(J) IF (I .LT. J) CALL DQ7RSH(I, J, .TRUE., QTR, RMAT, W) 70 CONTINUE C 80 IF (KB .GT. 0) GO TO 90 C C *** UPDATE LOCAL COPY OF QTR *** C CALL DV7VMP(P10, W, STEP(1,2), TD, -1) CALL DL7TVM(P10, W, LMAT, W) CALL DV2AXY(P10, STEP(1,3), ONE, W, QTR) GO TO 40 C 90 V(DST0) = DS0 V(NREDUC) = NRED V(PREDUC) = PRED V(GTSTEP) = DD7TPR(P, G, STEP) C 999 RETURN C *** LAST LINE OF DL7MSB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dl7mst.f000066400000000000000000000401201420247104600160350ustar00rootroot00000000000000 SUBROUTINE DL7MST(D, G, IERR, IPIVOT, KA, P, QTR, R, STEP, V, W) C C *** COMPUTE LEVENBERG-MARQUARDT STEP USING MORE-HEBDEN TECHNIQUE ** C *** NL2SOL VERSION 2.2. *** C C *** PARAMETER DECLARATIONS *** C INTEGER IERR, KA, P INTEGER IPIVOT(P) DOUBLE PRECISION D(P), G(P), QTR(P), R(1), STEP(P), V(21), W(1) C DIMENSION W(P*(P+5)/2 + 4) C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** PURPOSE *** C C GIVEN THE R MATRIX FROM THE QR DECOMPOSITION OF A JACOBIAN C MATRIX, J, AS WELL AS Q-TRANSPOSE TIMES THE CORRESPONDING C RESIDUAL VECTOR, RESID, THIS SUBROUTINE COMPUTES A LEVENBERG- C MARQUARDT STEP OF APPROXIMATE LENGTH V(RADIUS) BY THE MORE- C TECHNIQUE. C C *** PARAMETER DESCRIPTION *** C C D (IN) = THE SCALE VECTOR. C G (IN) = THE GRADIENT VECTOR (J**T)*R. C IERR (I/O) = RETURN CODE FROM QRFACT OR DQ7RGS -- 0 MEANS R HAS C FULL RANK. C IPIVOT (I/O) = PERMUTATION ARRAY FROM QRFACT OR DQ7RGS, WHICH COMPUTE C QR DECOMPOSITIONS WITH COLUMN PIVOTING. C KA (I/O). KA .LT. 0 ON INPUT MEANS THIS IS THE FIRST CALL ON C DL7MST FOR THE CURRENT R AND QTR. ON OUTPUT KA CON- C TAINS THE NUMBER OF HEBDEN ITERATIONS NEEDED TO DETERMINE C STEP. KA = 0 MEANS A GAUSS-NEWTON STEP. C P (IN) = NUMBER OF PARAMETERS. C QTR (IN) = (Q**T)*RESID = Q-TRANSPOSE TIMES THE RESIDUAL VECTOR. C R (IN) = THE R MATRIX, STORED COMPACTLY BY COLUMNS. C STEP (OUT) = THE LEVENBERG-MARQUARDT STEP COMPUTED. C V (I/O) CONTAINS VARIOUS CONSTANTS AND VARIABLES DESCRIBED BELOW. C W (I/O) = WORKSPACE OF LENGTH P*(P+5)/2 + 4. C C *** ENTRIES IN V *** C C V(DGNORM) (I/O) = 2-NORM OF (D**-1)*G. C V(DSTNRM) (I/O) = 2-NORM OF D*STEP. C V(DST0) (I/O) = 2-NORM OF GAUSS-NEWTON STEP (FOR NONSING. J). C V(EPSLON) (IN) = MAX. REL. ERROR ALLOWED IN TWONORM(R)**2 MINUS C TWONORM(R - J*STEP)**2. (SEE ALGORITHM NOTES BELOW.) C V(GTSTEP) (OUT) = INNER PRODUCT BETWEEN G AND STEP. C V(NREDUC) (OUT) = HALF THE REDUCTION IN THE SUM OF SQUARES PREDICTED C FOR A GAUSS-NEWTON STEP. C V(PHMNFC) (IN) = TOL. (TOGETHER WITH V(PHMXFC)) FOR ACCEPTING STEP C (MORE*S SIGMA). THE ERROR V(DSTNRM) - V(RADIUS) MUST LIE C BETWEEN V(PHMNFC)*V(RADIUS) AND V(PHMXFC)*V(RADIUS). C V(PHMXFC) (IN) (SEE V(PHMNFC).) C V(PREDUC) (OUT) = HALF THE REDUCTION IN THE SUM OF SQUARES PREDICTED C BY THE STEP RETURNED. C V(RADIUS) (IN) = RADIUS OF CURRENT (SCALED) TRUST REGION. C V(RAD0) (I/O) = VALUE OF V(RADIUS) FROM PREVIOUS CALL. C V(STPPAR) (I/O) = MARQUARDT PARAMETER (OR ITS NEGATIVE IF THE SPECIAL C CASE MENTIONED BELOW IN THE ALGORITHM NOTES OCCURS). C C NOTE -- SEE DATA STATEMENT BELOW FOR VALUES OF ABOVE SUBSCRIPTS. C C *** USAGE NOTES *** C C IF IT IS DESIRED TO RECOMPUTE STEP USING A DIFFERENT VALUE OF C V(RADIUS), THEN THIS ROUTINE MAY BE RESTARTED BY CALLING IT C WITH ALL PARAMETERS UNCHANGED EXCEPT V(RADIUS). (THIS EXPLAINS C WHY MANY PARAMETERS ARE LISTED AS I/O). ON AN INTIIAL CALL (ONE C WITH KA = -1), THE CALLER NEED ONLY HAVE INITIALIZED D, G, KA, P, C QTR, R, V(EPSLON), V(PHMNFC), V(PHMXFC), V(RADIUS), AND V(RAD0). C C *** APPLICATION AND USAGE RESTRICTIONS *** C C THIS ROUTINE IS CALLED AS PART OF THE NL2SOL (NONLINEAR LEAST- C SQUARES) PACKAGE (REF. 1). C C *** ALGORITHM NOTES *** C C THIS CODE IMPLEMENTS THE STEP COMPUTATION SCHEME DESCRIBED IN C REFS. 2 AND 4. FAST GIVENS TRANSFORMATIONS (SEE REF. 3, PP. 60- C 62) ARE USED TO COMPUTE STEP WITH A NONZERO MARQUARDT PARAMETER. C A SPECIAL CASE OCCURS IF J IS (NEARLY) SINGULAR AND V(RADIUS) C IS SUFFICIENTLY LARGE. IN THIS CASE THE STEP RETURNED IS SUCH C THAT TWONORM(R)**2 - TWONORM(R - J*STEP)**2 DIFFERS FROM ITS C OPTIMAL VALUE BY LESS THAN V(EPSLON) TIMES THIS OPTIMAL VALUE, C WHERE J AND R DENOTE THE ORIGINAL JACOBIAN AND RESIDUAL. (SEE C REF. 2 FOR MORE DETAILS.) C C *** FUNCTIONS AND SUBROUTINES CALLED *** C C DD7TPR - RETURNS INNER PRODUCT OF TWO VECTORS. C DL7ITV - APPLY INVERSE-TRANSPOSE OF COMPACT LOWER TRIANG. MATRIX. C DL7IVM - APPLY INVERSE OF COMPACT LOWER TRIANG. MATRIX. C DV7CPY - COPIES ONE VECTOR TO ANOTHER. C DV2NRM - RETURNS 2-NORM OF A VECTOR. C C *** REFERENCES *** C C 1. DENNIS, J.E., GAY, D.M., AND WELSCH, R.E. (1981), AN ADAPTIVE C NONLINEAR LEAST-SQUARES ALGORITHM, ACM TRANS. MATH. C SOFTWARE, VOL. 7, NO. 3. C 2. GAY, D.M. (1981), COMPUTING OPTIMAL LOCALLY CONSTRAINED STEPS, C SIAM J. SCI. STATIST. COMPUTING, VOL. 2, NO. 2, PP. C 186-197. C 3. LAWSON, C.L., AND HANSON, R.J. (1974), SOLVING LEAST SQUARES C PROBLEMS, PRENTICE-HALL, ENGLEWOOD CLIFFS, N.J. C 4. MORE, J.J. (1978), THE LEVENBERG-MARQUARDT ALGORITHM, IMPLEMEN- C TATION AND THEORY, PP.105-116 OF SPRINGER LECTURE NOTES C IN MATHEMATICS NO. 630, EDITED BY G.A. WATSON, SPRINGER- C VERLAG, BERLIN AND NEW YORK. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, AND C MCS-7906671. C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DSTSAV, I, IP1, I1, J1, K, KALIM, L, LK0, PHIPIN, 1 PP1O2, RES, RES0, RMAT, RMAT0, UK0 DOUBLE PRECISION A, ADI, ALPHAK, B, DFACSQ, DST, DTOL, D1, D2, 1 LK, OLDPHI, PHI, PHIMAX, PHIMIN, PSIFAC, RAD, 2 SI, SJ, SQRTAK, T, TWOPSI, UK, WL C C *** CONSTANTS *** DOUBLE PRECISION DFAC, EIGHT, HALF, NEGONE, ONE, P001, THREE, 1 TTOL, ZERO DOUBLE PRECISION BIG C C *** INTRINSIC FUNCTIONS *** C/+ DOUBLE PRECISION DSQRT C/ C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C DOUBLE PRECISION DD7TPR, DL7SVN, DR7MDC, DV2NRM EXTERNAL DD7TPR, DL7ITV, DL7IVM, DL7SVN, DR7MDC,DV7CPY, DV2NRM C C *** SUBSCRIPTS FOR V *** C INTEGER DGNORM, DSTNRM, DST0, EPSLON, GTSTEP, NREDUC, PHMNFC, 1 PHMXFC, PREDUC, RADIUS, RAD0, STPPAR C/6 C DATA DGNORM/1/, DSTNRM/2/, DST0/3/, EPSLON/19/, GTSTEP/4/, C 1 NREDUC/6/, PHMNFC/20/, PHMXFC/21/, PREDUC/7/, RADIUS/8/, C 2 RAD0/9/, STPPAR/5/ C/7 PARAMETER (DGNORM=1, DSTNRM=2, DST0=3, EPSLON=19, GTSTEP=4, 1 NREDUC=6, PHMNFC=20, PHMXFC=21, PREDUC=7, RADIUS=8, 2 RAD0=9, STPPAR=5) C/ C C/6 C DATA DFAC/256.D+0/, EIGHT/8.D+0/, HALF/0.5D+0/, NEGONE/-1.D+0/, C 1 ONE/1.D+0/, P001/1.D-3/, THREE/3.D+0/, TTOL/2.5D+0/, C 2 ZERO/0.D+0/ C/7 PARAMETER (DFAC=256.D+0, EIGHT=8.D+0, HALF=0.5D+0, NEGONE=-1.D+0, 1 ONE=1.D+0, P001=1.D-3, THREE=3.D+0, TTOL=2.5D+0, 2 ZERO=0.D+0) SAVE BIG C/ DATA BIG/0.D+0/ C C *** BODY *** C C *** FOR _USE_ IN RECOMPUTING STEP, THE FINAL VALUES OF LK AND UK, C *** THE INVERSE DERIVATIVE OF MORE*S PHI AT 0 (FOR NONSING. J) C *** AND THE VALUE RETURNED AS V(DSTNRM) ARE STORED AT W(LK0), C *** W(UK0), W(PHIPIN), AND W(DSTSAV) RESPECTIVELY. LK0 = P + 1 PHIPIN = LK0 + 1 UK0 = PHIPIN + 1 DSTSAV = UK0 + 1 RMAT0 = DSTSAV C *** A COPY OF THE R-MATRIX FROM THE QR DECOMPOSITION OF J IS C *** STORED IN W STARTING AT W(RMAT), AND A COPY OF THE RESIDUAL C *** VECTOR IS STORED IN W STARTING AT W(RES). THE LOOPS BELOW C *** THAT UPDATE THE QR DECOMP. FOR A NONZERO MARQUARDT PARAMETER C *** WORK ON THESE COPIES. RMAT = RMAT0 + 1 PP1O2 = P * (P + 1) / 2 RES0 = PP1O2 + RMAT0 RES = RES0 + 1 RAD = V(RADIUS) IF (RAD .GT. ZERO) 1 PSIFAC = V(EPSLON)/((EIGHT*(V(PHMNFC) + ONE) + THREE) * RAD**2) IF (BIG .LE. ZERO) BIG = DR7MDC(6) PHIMAX = V(PHMXFC) * RAD PHIMIN = V(PHMNFC) * RAD C *** DTOL, DFAC, AND DFACSQ ARE USED IN RESCALING THE FAST GIVENS C *** REPRESENTATION OF THE UPDATED QR DECOMPOSITION. DTOL = ONE/DFAC DFACSQ = DFAC*DFAC C *** OLDPHI IS USED TO DETECT LIMITS OF NUMERICAL ACCURACY. IF C *** WE RECOMPUTE STEP AND IT DOES NOT CHANGE, THEN WE ACCEPT IT. OLDPHI = ZERO LK = ZERO UK = ZERO KALIM = KA + 12 C C *** START OR RESTART, DEPENDING ON KA *** C IF (KA) 10, 20, 370 C C *** FRESH START -- COMPUTE V(NREDUC) *** C 10 KA = 0 KALIM = 12 K = P IF (IERR .NE. 0) K = IABS(IERR) - 1 V(NREDUC) = HALF*DD7TPR(K, QTR, QTR) C C *** SET UP TO TRY INITIAL GAUSS-NEWTON STEP *** C 20 V(DST0) = NEGONE IF (IERR .NE. 0) GO TO 90 T = DL7SVN(P, R, STEP, W(RES)) IF (T .GE. ONE) GO TO 30 IF (DV2NRM(P, QTR) .GE. BIG*T) GO TO 90 C C *** COMPUTE GAUSS-NEWTON STEP *** C C *** NOTE -- THE R-MATRIX IS STORED COMPACTLY BY COLUMNS IN C *** R(1), R(2), R(3), ... IT IS THE TRANSPOSE OF A C *** LOWER TRIANGULAR MATRIX STORED COMPACTLY BY ROWS, AND WE C *** TREAT IT AS SUCH WHEN USING DL7ITV AND DL7IVM. 30 CALL DL7ITV(P, W, R, QTR) C *** TEMPORARILY STORE PERMUTED -D*STEP IN STEP. DO 60 I = 1, P J1 = IPIVOT(I) STEP(I) = D(J1)*W(I) 60 CONTINUE DST = DV2NRM(P, STEP) V(DST0) = DST PHI = DST - RAD IF (PHI .LE. PHIMAX) GO TO 410 C *** IF THIS IS A RESTART, GO TO 110 *** IF (KA .GT. 0) GO TO 110 C C *** GAUSS-NEWTON STEP WAS UNACCEPTABLE. COMPUTE L0 *** C DO 70 I = 1, P J1 = IPIVOT(I) STEP(I) = D(J1)*(STEP(I)/DST) 70 CONTINUE CALL DL7IVM(P, STEP, R, STEP) T = ONE / DV2NRM(P, STEP) W(PHIPIN) = (T/RAD)*T LK = PHI*W(PHIPIN) C C *** COMPUTE U0 *** C 90 DO 100 I = 1, P 100 W(I) = G(I)/D(I) V(DGNORM) = DV2NRM(P, W) UK = V(DGNORM)/RAD IF (UK .LE. ZERO) GO TO 390 C C *** ALPHAK WILL BE USED AS THE CURRENT MARQUARDT PARAMETER. WE C *** _USE_ MORE*S SCHEME FOR INITIALIZING IT. C ALPHAK = DABS(V(STPPAR)) * V(RAD0)/RAD ALPHAK = DMIN1(UK, DMAX1(ALPHAK, LK)) C C C *** TOP OF LOOP -- INCREMENT KA, COPY R TO RMAT, QTR TO RES *** C 110 KA = KA + 1 CALL DV7CPY(PP1O2, W(RMAT), R) CALL DV7CPY(P, W(RES), QTR) C C *** SAFEGUARD ALPHAK AND INITIALIZE FAST GIVENS SCALE VECTOR. *** C IF (ALPHAK .LE. ZERO .OR. ALPHAK .LT. LK .OR. ALPHAK .GE. UK) 1 ALPHAK = UK * DMAX1(P001, DSQRT(LK/UK)) IF (ALPHAK .LE. ZERO) ALPHAK = HALF * UK SQRTAK = DSQRT(ALPHAK) DO 120 I = 1, P 120 W(I) = ONE C C *** ADD ALPHAK*D AND UPDATE QR DECOMP. USING FAST GIVENS TRANS. *** C DO 270 I = 1, P C *** GENERATE, APPLY 1ST GIVENS TRANS. FOR ROW I OF ALPHAK*D. C *** (USE STEP TO STORE TEMPORARY ROW) *** L = I*(I+1)/2 + RMAT0 WL = W(L) D2 = ONE D1 = W(I) J1 = IPIVOT(I) ADI = SQRTAK*D(J1) IF (ADI .GE. DABS(WL)) GO TO 150 130 A = ADI/WL B = D2*A/D1 T = A*B + ONE IF (T .GT. TTOL) GO TO 150 W(I) = D1/T D2 = D2/T W(L) = T*WL A = -A DO 140 J1 = I, P L = L + J1 STEP(J1) = A*W(L) 140 CONTINUE GO TO 170 C 150 B = WL/ADI A = D1*B/D2 T = A*B + ONE IF (T .GT. TTOL) GO TO 130 W(I) = D2/T D2 = D1/T W(L) = T*ADI DO 160 J1 = I, P L = L + J1 WL = W(L) STEP(J1) = -WL W(L) = A*WL 160 CONTINUE C 170 IF (I .EQ. P) GO TO 280 C C *** NOW _USE_ GIVENS TRANS. TO ZERO ELEMENTS OF TEMP. ROW *** C IP1 = I + 1 DO 260 I1 = IP1, P SI = STEP(I1-1) IF (SI .EQ. ZERO) GO TO 260 L = I1*(I1+1)/2 + RMAT0 WL = W(L) D1 = W(I1) C C *** RESCALE ROW I1 IF NECESSARY *** C IF (D1 .GE. DTOL) GO TO 190 D1 = D1*DFACSQ WL = WL/DFAC K = L DO 180 J1 = I1, P K = K + J1 W(K) = W(K)/DFAC 180 CONTINUE C C *** _USE_ GIVENS TRANS. TO ZERO NEXT ELEMENT OF TEMP. ROW C 190 IF (DABS(SI) .GT. DABS(WL)) GO TO 220 200 A = SI/WL B = D2*A/D1 T = A*B + ONE IF (T .GT. TTOL) GO TO 220 W(L) = T*WL W(I1) = D1/T D2 = D2/T DO 210 J1 = I1, P L = L + J1 WL = W(L) SJ = STEP(J1) W(L) = WL + B*SJ STEP(J1) = SJ - A*WL 210 CONTINUE GO TO 240 C 220 B = WL/SI A = D1*B/D2 T = A*B + ONE IF (T .GT. TTOL) GO TO 200 W(I1) = D2/T D2 = D1/T W(L) = T*SI DO 230 J1 = I1, P L = L + J1 WL = W(L) SJ = STEP(J1) W(L) = A*WL + SJ STEP(J1) = B*SJ - WL 230 CONTINUE C C *** RESCALE TEMP. ROW IF NECESSARY *** C 240 IF (D2 .GE. DTOL) GO TO 260 D2 = D2*DFACSQ DO 250 K = I1, P 250 STEP(K) = STEP(K)/DFAC 260 CONTINUE 270 CONTINUE C C *** COMPUTE STEP *** C 280 CALL DL7ITV(P, W(RES), W(RMAT), W(RES)) C *** RECOVER STEP AND STORE PERMUTED -D*STEP AT W(RES) *** DO 290 I = 1, P J1 = IPIVOT(I) K = RES0 + I T = W(K) STEP(J1) = -T W(K) = T*D(J1) 290 CONTINUE DST = DV2NRM(P, W(RES)) PHI = DST - RAD IF (PHI .LE. PHIMAX .AND. PHI .GE. PHIMIN) GO TO 430 IF (OLDPHI .EQ. PHI) GO TO 430 OLDPHI = PHI C C *** CHECK FOR (AND HANDLE) SPECIAL CASE *** C IF (PHI .GT. ZERO) GO TO 310 IF (KA .GE. KALIM) GO TO 430 TWOPSI = ALPHAK*DST*DST - DD7TPR(P, STEP, G) IF (ALPHAK .GE. TWOPSI*PSIFAC) GO TO 310 V(STPPAR) = -ALPHAK GO TO 440 C C *** UNACCEPTABLE STEP -- UPDATE LK, UK, ALPHAK, AND TRY AGAIN *** C 300 IF (PHI .LT. ZERO) UK = DMIN1(UK, ALPHAK) GO TO 320 310 IF (PHI .LT. ZERO) UK = ALPHAK 320 DO 330 I = 1, P J1 = IPIVOT(I) K = RES0 + I STEP(I) = D(J1) * (W(K)/DST) 330 CONTINUE CALL DL7IVM(P, STEP, W(RMAT), STEP) DO 340 I = 1, P 340 STEP(I) = STEP(I) / DSQRT(W(I)) T = ONE / DV2NRM(P, STEP) ALPHAK = ALPHAK + T*PHI*T/RAD LK = DMAX1(LK, ALPHAK) ALPHAK = LK GO TO 110 C C *** RESTART *** C 370 LK = W(LK0) UK = W(UK0) IF (V(DST0) .GT. ZERO .AND. V(DST0) - RAD .LE. PHIMAX) GO TO 20 ALPHAK = DABS(V(STPPAR)) DST = W(DSTSAV) PHI = DST - RAD T = V(DGNORM)/RAD IF (RAD .GT. V(RAD0)) GO TO 380 C C *** SMALLER RADIUS *** UK = T IF (ALPHAK .LE. ZERO) LK = ZERO IF (V(DST0) .GT. ZERO) LK = DMAX1(LK, (V(DST0)-RAD)*W(PHIPIN)) GO TO 300 C C *** BIGGER RADIUS *** 380 IF (ALPHAK .LE. ZERO .OR. UK .GT. T) UK = T LK = ZERO IF (V(DST0) .GT. ZERO) LK = DMAX1(LK, (V(DST0)-RAD)*W(PHIPIN)) GO TO 300 C C *** SPECIAL CASE -- RAD .LE. 0 OR (G = 0 AND J IS SINGULAR) *** C 390 V(STPPAR) = ZERO DST = ZERO LK = ZERO UK = ZERO V(GTSTEP) = ZERO V(PREDUC) = ZERO DO 400 I = 1, P 400 STEP(I) = ZERO GO TO 450 C C *** ACCEPTABLE GAUSS-NEWTON STEP -- RECOVER STEP FROM W *** C 410 ALPHAK = ZERO DO 420 I = 1, P J1 = IPIVOT(I) STEP(J1) = -W(I) 420 CONTINUE C C *** SAVE VALUES FOR _USE_ IN A POSSIBLE RESTART *** C 430 V(STPPAR) = ALPHAK 440 V(GTSTEP) = DMIN1(DD7TPR(P,STEP,G), ZERO) V(PREDUC) = HALF * (ALPHAK*DST*DST - V(GTSTEP)) 450 V(DSTNRM) = DST W(DSTSAV) = DST W(LK0) = LK W(UK0) = UK V(RAD0) = RAD C 999 RETURN C C *** LAST CARD OF DL7MST FOLLOWS *** END PyBDSF-1.10.1/src/port3/dl7nvr.f000066400000000000000000000021571420247104600160470ustar00rootroot00000000000000 SUBROUTINE DL7NVR(N, LIN, L) C C *** COMPUTE LIN = L**-1, BOTH N X N LOWER TRIANG. STORED *** C *** COMPACTLY BY ROWS. LIN AND L MAY SHARE THE SAME STORAGE. *** C C *** PARAMETERS *** C INTEGER N DOUBLE PRECISION L(1), LIN(1) C DIMENSION L(N*(N+1)/2), LIN(N*(N+1)/2) C C *** LOCAL VARIABLES *** C INTEGER I, II, IM1, JJ, J0, J1, K, K0, NP1 DOUBLE PRECISION ONE, T, ZERO C/6 C DATA ONE/1.D+0/, ZERO/0.D+0/ C/7 PARAMETER (ONE=1.D+0, ZERO=0.D+0) C/ C C *** BODY *** C NP1 = N + 1 J0 = N*(NP1)/2 DO 30 II = 1, N I = NP1 - II LIN(J0) = ONE/L(J0) IF (I .LE. 1) GO TO 999 J1 = J0 IM1 = I - 1 DO 20 JJ = 1, IM1 T = ZERO J0 = J1 K0 = J1 - JJ DO 10 K = 1, JJ T = T - L(K0)*LIN(J0) J0 = J0 - 1 K0 = K0 + K - I 10 CONTINUE LIN(J0) = T/L(K0) 20 CONTINUE J0 = J0 - 1 30 CONTINUE 999 RETURN C *** LAST CARD OF DL7NVR FOLLOWS *** END PyBDSF-1.10.1/src/port3/dl7sqr.f000066400000000000000000000016651420247104600160520ustar00rootroot00000000000000 SUBROUTINE DL7SQR(N, A, L) C C *** COMPUTE A = LOWER TRIANGLE OF L*(L**T), WITH BOTH C *** L AND A STORED COMPACTLY BY ROWS. (BOTH MAY OCCUPY THE C *** SAME STORAGE. C C *** PARAMETERS *** C INTEGER N DOUBLE PRECISION A(1), L(1) C DIMENSION A(N*(N+1)/2), L(N*(N+1)/2) C C *** LOCAL VARIABLES *** C INTEGER I, II, IJ, IK, IP1, I0, J, JJ, JK, J0, K, NP1 DOUBLE PRECISION T C NP1 = N + 1 I0 = N*(N+1)/2 DO 30 II = 1, N I = NP1 - II IP1 = I + 1 I0 = I0 - I J0 = I*(I+1)/2 DO 20 JJ = 1, I J = IP1 - JJ J0 = J0 - J T = 0.0D0 DO 10 K = 1, J IK = I0 + K JK = J0 + K T = T + L(IK)*L(JK) 10 CONTINUE IJ = I0 + J A(IJ) = T 20 CONTINUE 30 CONTINUE 999 RETURN END PyBDSF-1.10.1/src/port3/dl7srt.f000066400000000000000000000032261420247104600160500ustar00rootroot00000000000000 SUBROUTINE DL7SRT(N1, N, L, A, IRC) C C *** COMPUTE ROWS N1 THROUGH N OF THE CHOLESKY FACTOR L OF C *** A = L*(L**T), WHERE L AND THE LOWER TRIANGLE OF A ARE BOTH C *** STORED COMPACTLY BY ROWS (AND MAY OCCUPY THE SAME STORAGE). C *** IRC = 0 MEANS ALL WENT WELL. IRC = J MEANS THE LEADING C *** PRINCIPAL J X J SUBMATRIX OF A IS NOT POSITIVE DEFINITE -- C *** AND L(J*(J+1)/2) CONTAINS THE (NONPOS.) REDUCED J-TH DIAGONAL. C C *** PARAMETERS *** C INTEGER N1, N, IRC DOUBLE PRECISION L(1), A(1) C DIMENSION L(N*(N+1)/2), A(N*(N+1)/2) C C *** LOCAL VARIABLES *** C INTEGER I, IJ, IK, IM1, I0, J, JK, JM1, J0, K DOUBLE PRECISION T, TD, ZERO C C *** INTRINSIC FUNCTIONS *** C/+ DOUBLE PRECISION DSQRT C/ C/6 C DATA ZERO/0.D+0/ C/7 PARAMETER (ZERO=0.D+0) C/ C C *** BODY *** C I0 = N1 * (N1 - 1) / 2 DO 50 I = N1, N TD = ZERO IF (I .EQ. 1) GO TO 40 J0 = 0 IM1 = I - 1 DO 30 J = 1, IM1 T = ZERO IF (J .EQ. 1) GO TO 20 JM1 = J - 1 DO 10 K = 1, JM1 IK = I0 + K JK = J0 + K T = T + L(IK)*L(JK) 10 CONTINUE 20 IJ = I0 + J J0 = J0 + J T = (A(IJ) - T) / L(J0) L(IJ) = T TD = TD + T*T 30 CONTINUE 40 I0 = I0 + I T = A(I0) - TD IF (T .LE. ZERO) GO TO 60 L(I0) = DSQRT(T) 50 CONTINUE C IRC = 0 GO TO 999 C 60 L(I0) = T IRC = I C 999 RETURN C C *** LAST CARD OF DL7SRT *** END PyBDSF-1.10.1/src/port3/dl7svn.f000066400000000000000000000131741420247104600160510ustar00rootroot00000000000000 DOUBLE PRECISION FUNCTION DL7SVN(P, L, X, Y) C C *** ESTIMATE SMALLEST SING. VALUE OF PACKED LOWER TRIANG. MATRIX L C C *** PARAMETER DECLARATIONS *** C INTEGER P DOUBLE PRECISION L(1), X(P), Y(P) C DIMENSION L(P*(P+1)/2) C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** PURPOSE *** C C THIS FUNCTION RETURNS A GOOD OVER-ESTIMATE OF THE SMALLEST C SINGULAR VALUE OF THE PACKED LOWER TRIANGULAR MATRIX L. C C *** PARAMETER DESCRIPTION *** C C P (IN) = THE ORDER OF L. L IS A P X P LOWER TRIANGULAR MATRIX. C L (IN) = ARRAY HOLDING THE ELEMENTS OF L IN ROW ORDER, I.E. C L(1,1), L(2,1), L(2,2), L(3,1), L(3,2), L(3,3), ETC. C X (OUT) IF DL7SVN RETURNS A POSITIVE VALUE, THEN X IS A NORMALIZED C APPROXIMATE LEFT SINGULAR VECTOR CORRESPONDING TO THE C SMALLEST SINGULAR VALUE. THIS APPROXIMATION MAY BE VERY C CRUDE. IF DL7SVN RETURNS ZERO, THEN SOME COMPONENTS OF X C ARE ZERO AND THE REST RETAIN THEIR INPUT VALUES. C Y (OUT) IF DL7SVN RETURNS A POSITIVE VALUE, THEN Y = (L**-1)*X IS AN C UNNORMALIZED APPROXIMATE RIGHT SINGULAR VECTOR CORRESPOND- C ING TO THE SMALLEST SINGULAR VALUE. THIS APPROXIMATION C MAY BE CRUDE. IF DL7SVN RETURNS ZERO, THEN Y RETAINS ITS C INPUT VALUE. THE CALLER MAY PASS THE SAME VECTOR FOR X C AND Y (NONSTANDARD FORTRAN USAGE), IN WHICH CASE Y OVER- C WRITES X (FOR NONZERO DL7SVN RETURNS). C C *** ALGORITHM NOTES *** C C THE ALGORITHM IS BASED ON (1), WITH THE ADDITIONAL PROVISION THAT C DL7SVN = 0 IS RETURNED IF THE SMALLEST DIAGONAL ELEMENT OF L C (IN MAGNITUDE) IS NOT MORE THAN THE UNIT ROUNDOFF TIMES THE C LARGEST. THE ALGORITHM USES A RANDOM NUMBER GENERATOR PROPOSED C IN (4), WHICH PASSES THE SPECTRAL TEST WITH FLYING COLORS -- SEE C (2) AND (3). C C *** SUBROUTINES AND FUNCTIONS CALLED *** C C DV2NRM - FUNCTION, RETURNS THE 2-NORM OF A VECTOR. C C *** REFERENCES *** C C (1) CLINE, A., MOLER, C., STEWART, G., AND WILKINSON, J.H.(1977), C AN ESTIMATE FOR THE CONDITION NUMBER OF A MATRIX, REPORT C TM-310, APPLIED MATH. DIV., ARGONNE NATIONAL LABORATORY. C C (2) HOAGLIN, D.C. (1976), THEORETICAL PROPERTIES OF CONGRUENTIAL C RANDOM-NUMBER GENERATORS -- AN EMPIRICAL VIEW, C MEMORANDUM NS-340, DEPT. OF STATISTICS, HARVARD UNIV. C C (3) KNUTH, D.E. (1969), THE ART OF COMPUTER PROGRAMMING, VOL. 2 C (SEMINUMERICAL ALGORITHMS), ADDISON-WESLEY, READING, MASS. C C (4) SMITH, C.S. (1971), MULTIPLICATIVE PSEUDO-RANDOM NUMBER C GENERATORS WITH PRIME MODULUS, J. ASSOC. COMPUT. MACH. 18, C PP. 586-593. C C *** HISTORY *** C C DESIGNED AND CODED BY DAVID M. GAY (WINTER 1977/SUMMER 1978). C C *** GENERAL *** C C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, AND MCS76-11989. C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER I, II, IX, J, JI, JJ, JJJ, JM1, J0, PM1 DOUBLE PRECISION B, SMINUS, SPLUS, T, XMINUS, XPLUS C C *** CONSTANTS *** C DOUBLE PRECISION HALF, ONE, R9973, ZERO C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C DOUBLE PRECISION DD7TPR, DV2NRM EXTERNAL DD7TPR, DV2NRM,DV2AXY C C/6 C DATA HALF/0.5D+0/, ONE/1.D+0/, R9973/9973.D+0/, ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, ONE=1.D+0, R9973=9973.D+0, ZERO=0.D+0) C/ C C *** BODY *** C IX = 2 PM1 = P - 1 C C *** FIRST CHECK WHETHER TO RETURN DL7SVN = 0 AND INITIALIZE X *** C II = 0 J0 = P*PM1/2 JJ = J0 + P IF (L(JJ) .EQ. ZERO) GO TO 110 IX = MOD(3432*IX, 9973) B = HALF*(ONE + FLOAT(IX)/R9973) XPLUS = B / L(JJ) X(P) = XPLUS IF (P .LE. 1) GO TO 60 DO 10 I = 1, PM1 II = II + I IF (L(II) .EQ. ZERO) GO TO 110 JI = J0 + I X(I) = XPLUS * L(JI) 10 CONTINUE C C *** SOLVE (L**T)*X = B, WHERE THE COMPONENTS OF B HAVE RANDOMLY C *** CHOSEN MAGNITUDES IN (.5,1) WITH SIGNS CHOSEN TO MAKE X LARGE. C C DO J = P-1 TO 1 BY -1... DO 50 JJJ = 1, PM1 J = P - JJJ C *** DETERMINE X(J) IN THIS ITERATION. NOTE FOR I = 1,2,...,J C *** THAT X(I) HOLDS THE CURRENT PARTIAL SUM FOR ROW I. IX = MOD(3432*IX, 9973) B = HALF*(ONE + FLOAT(IX)/R9973) XPLUS = (B - X(J)) XMINUS = (-B - X(J)) SPLUS = DABS(XPLUS) SMINUS = DABS(XMINUS) JM1 = J - 1 J0 = J*JM1/2 JJ = J0 + J XPLUS = XPLUS/L(JJ) XMINUS = XMINUS/L(JJ) IF (JM1 .EQ. 0) GO TO 30 DO 20 I = 1, JM1 JI = J0 + I SPLUS = SPLUS + DABS(X(I) + L(JI)*XPLUS) SMINUS = SMINUS + DABS(X(I) + L(JI)*XMINUS) 20 CONTINUE 30 IF (SMINUS .GT. SPLUS) XPLUS = XMINUS X(J) = XPLUS C *** UPDATE PARTIAL SUMS *** IF (JM1 .GT. 0) CALL DV2AXY(JM1, X, XPLUS, L(J0+1), X) 50 CONTINUE C C *** NORMALIZE X *** C 60 T = ONE/DV2NRM(P, X) DO 70 I = 1, P 70 X(I) = T*X(I) C C *** SOLVE L*Y = X AND RETURN DL7SVN = 1/TWONORM(Y) *** C DO 100 J = 1, P JM1 = J - 1 J0 = J*JM1/2 JJ = J0 + J T = ZERO IF (JM1 .GT. 0) T = DD7TPR(JM1, L(J0+1), Y) Y(J) = (X(J) - T) / L(JJ) 100 CONTINUE C DL7SVN = ONE/DV2NRM(P, Y) GO TO 999 C 110 DL7SVN = ZERO 999 RETURN C *** LAST CARD OF DL7SVN FOLLOWS *** END PyBDSF-1.10.1/src/port3/dl7svx.f000066400000000000000000000121471420247104600160620ustar00rootroot00000000000000 DOUBLE PRECISION FUNCTION DL7SVX(P, L, X, Y) C C *** ESTIMATE LARGEST SING. VALUE OF PACKED LOWER TRIANG. MATRIX L C C *** PARAMETER DECLARATIONS *** C INTEGER P DOUBLE PRECISION L(1), X(P), Y(P) C DIMENSION L(P*(P+1)/2) C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** PURPOSE *** C C THIS FUNCTION RETURNS A GOOD UNDER-ESTIMATE OF THE LARGEST C SINGULAR VALUE OF THE PACKED LOWER TRIANGULAR MATRIX L. C C *** PARAMETER DESCRIPTION *** C C P (IN) = THE ORDER OF L. L IS A P X P LOWER TRIANGULAR MATRIX. C L (IN) = ARRAY HOLDING THE ELEMENTS OF L IN ROW ORDER, I.E. C L(1,1), L(2,1), L(2,2), L(3,1), L(3,2), L(3,3), ETC. C X (OUT) IF DL7SVX RETURNS A POSITIVE VALUE, THEN X = (L**T)*Y IS AN C (UNNORMALIZED) APPROXIMATE RIGHT SINGULAR VECTOR C CORRESPONDING TO THE LARGEST SINGULAR VALUE. THIS C APPROXIMATION MAY BE CRUDE. C Y (OUT) IF DL7SVX RETURNS A POSITIVE VALUE, THEN Y = L*X IS A C NORMALIZED APPROXIMATE LEFT SINGULAR VECTOR CORRESPOND- C ING TO THE LARGEST SINGULAR VALUE. THIS APPROXIMATION C MAY BE VERY CRUDE. THE CALLER MAY PASS THE SAME VECTOR C FOR X AND Y (NONSTANDARD FORTRAN USAGE), IN WHICH CASE X C OVER-WRITES Y. C C *** ALGORITHM NOTES *** C C THE ALGORITHM IS BASED ON ANALOGY WITH (1). IT USES A C RANDOM NUMBER GENERATOR PROPOSED IN (4), WHICH PASSES THE C SPECTRAL TEST WITH FLYING COLORS -- SEE (2) AND (3). C C *** SUBROUTINES AND FUNCTIONS CALLED *** C C DV2NRM - FUNCTION, RETURNS THE 2-NORM OF A VECTOR. C C *** REFERENCES *** C C (1) CLINE, A., MOLER, C., STEWART, G., AND WILKINSON, J.H.(1977), C AN ESTIMATE FOR THE CONDITION NUMBER OF A MATRIX, REPORT C TM-310, APPLIED MATH. DIV., ARGONNE NATIONAL LABORATORY. C C (2) HOAGLIN, D.C. (1976), THEORETICAL PROPERTIES OF CONGRUENTIAL C RANDOM-NUMBER GENERATORS -- AN EMPIRICAL VIEW, C MEMORANDUM NS-340, DEPT. OF STATISTICS, HARVARD UNIV. C C (3) KNUTH, D.E. (1969), THE ART OF COMPUTER PROGRAMMING, VOL. 2 C (SEMINUMERICAL ALGORITHMS), ADDISON-WESLEY, READING, MASS. C C (4) SMITH, C.S. (1971), MULTIPLICATIVE PSEUDO-RANDOM NUMBER C GENERATORS WITH PRIME MODULUS, J. ASSOC. COMPUT. MACH. 18, C PP. 586-593. C C *** HISTORY *** C C DESIGNED AND CODED BY DAVID M. GAY (WINTER 1977/SUMMER 1978). C C *** GENERAL *** C C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, AND MCS76-11989. C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER I, IX, J, JI, JJ, JJJ, JM1, J0, PM1, PPLUS1 DOUBLE PRECISION B, BLJI, SMINUS, SPLUS, T, YI C C *** CONSTANTS *** C DOUBLE PRECISION HALF, ONE, R9973, ZERO C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C DOUBLE PRECISION DD7TPR, DV2NRM EXTERNAL DD7TPR, DV2NRM,DV2AXY C C/6 C DATA HALF/0.5D+0/, ONE/1.D+0/, R9973/9973.D+0/, ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, ONE=1.D+0, R9973=9973.D+0, ZERO=0.D+0) C/ C C *** BODY *** C IX = 2 PPLUS1 = P + 1 PM1 = P - 1 C C *** FIRST INITIALIZE X TO PARTIAL SUMS *** C J0 = P*PM1/2 JJ = J0 + P IX = MOD(3432*IX, 9973) B = HALF*(ONE + FLOAT(IX)/R9973) X(P) = B * L(JJ) IF (P .LE. 1) GO TO 40 DO 10 I = 1, PM1 JI = J0 + I X(I) = B * L(JI) 10 CONTINUE C C *** COMPUTE X = (L**T)*B, WHERE THE COMPONENTS OF B HAVE RANDOMLY C *** CHOSEN MAGNITUDES IN (.5,1) WITH SIGNS CHOSEN TO MAKE X LARGE. C C DO J = P-1 TO 1 BY -1... DO 30 JJJ = 1, PM1 J = P - JJJ C *** DETERMINE X(J) IN THIS ITERATION. NOTE FOR I = 1,2,...,J C *** THAT X(I) HOLDS THE CURRENT PARTIAL SUM FOR ROW I. IX = MOD(3432*IX, 9973) B = HALF*(ONE + FLOAT(IX)/R9973) JM1 = J - 1 J0 = J*JM1/2 SPLUS = ZERO SMINUS = ZERO DO 20 I = 1, J JI = J0 + I BLJI = B * L(JI) SPLUS = SPLUS + DABS(BLJI + X(I)) SMINUS = SMINUS + DABS(BLJI - X(I)) 20 CONTINUE IF (SMINUS .GT. SPLUS) B = -B X(J) = ZERO C *** UPDATE PARTIAL SUMS *** CALL DV2AXY(J, X, B, L(J0+1), X) 30 CONTINUE C C *** NORMALIZE X *** C 40 T = DV2NRM(P, X) IF (T .LE. ZERO) GO TO 80 T = ONE / T DO 50 I = 1, P 50 X(I) = T*X(I) C C *** COMPUTE L*X = Y AND RETURN SVMAX = TWONORM(Y) *** C DO 60 JJJ = 1, P J = PPLUS1 - JJJ JI = J*(J-1)/2 + 1 Y(J) = DD7TPR(J, L(JI), X) 60 CONTINUE C C *** NORMALIZE Y AND SET X = (L**T)*Y *** C T = ONE / DV2NRM(P, Y) JI = 1 DO 70 I = 1, P YI = T * Y(I) X(I) = ZERO CALL DV2AXY(I, X, YI, L(JI), X) JI = JI + I 70 CONTINUE DL7SVX = DV2NRM(P, X) GO TO 999 C 80 DL7SVX = ZERO C 999 RETURN C *** LAST CARD OF DL7SVX FOLLOWS *** END PyBDSF-1.10.1/src/port3/dl7tsq.f000066400000000000000000000016011420247104600160420ustar00rootroot00000000000000 SUBROUTINE DL7TSQ(N, A, L) C C *** SET A TO LOWER TRIANGLE OF (L**T) * L *** C C *** L = N X N LOWER TRIANG. MATRIX STORED ROWWISE. *** C *** A IS ALSO STORED ROWWISE AND MAY SHARE STORAGE WITH L. *** C INTEGER N DOUBLE PRECISION A(1), L(1) C DIMENSION A(N*(N+1)/2), L(N*(N+1)/2) C INTEGER I, II, IIM1, I1, J, K, M DOUBLE PRECISION LII, LJ C II = 0 DO 50 I = 1, N I1 = II + 1 II = II + I M = 1 IF (I .EQ. 1) GO TO 30 IIM1 = II - 1 DO 20 J = I1, IIM1 LJ = L(J) DO 10 K = I1, J A(M) = A(M) + LJ*L(K) M = M + 1 10 CONTINUE 20 CONTINUE 30 LII = L(II) DO 40 J = I1, II 40 A(J) = LII * L(J) 50 CONTINUE C 999 RETURN C *** LAST CARD OF DL7TSQ FOLLOWS *** END PyBDSF-1.10.1/src/port3/dl7tvm.f000066400000000000000000000012741420247104600160470ustar00rootroot00000000000000 SUBROUTINE DL7TVM(N, X, L, Y) C C *** COMPUTE X = (L**T)*Y, WHERE L IS AN N X N LOWER C *** TRIANGULAR MATRIX STORED COMPACTLY BY ROWS. X AND Y MAY C *** OCCUPY THE SAME STORAGE. *** C INTEGER N DOUBLE PRECISION X(N), L(1), Y(N) C DIMENSION L(N*(N+1)/2) INTEGER I, IJ, I0, J DOUBLE PRECISION YI, ZERO C/6 C DATA ZERO/0.D+0/ C/7 PARAMETER (ZERO=0.D+0) C/ C I0 = 0 DO 20 I = 1, N YI = Y(I) X(I) = ZERO DO 10 J = 1, I IJ = I0 + J X(J) = X(J) + YI*L(IJ) 10 CONTINUE I0 = I0 + I 20 CONTINUE 999 RETURN C *** LAST CARD OF DL7TVM FOLLOWS *** END PyBDSF-1.10.1/src/port3/dl7upd.f000066400000000000000000000103201420247104600160210ustar00rootroot00000000000000 SUBROUTINE DL7UPD(BETA, GAMMA, L, LAMBDA, LPLUS, N, W, Z) C C *** COMPUTE LPLUS = SECANT UPDATE OF L *** C C *** PARAMETER DECLARATIONS *** C INTEGER N DOUBLE PRECISION BETA(N), GAMMA(N), L(1), LAMBDA(N), LPLUS(1), 1 W(N), Z(N) C DIMENSION L(N*(N+1)/2), LPLUS(N*(N+1)/2) C C-------------------------- PARAMETER USAGE -------------------------- C C BETA = SCRATCH VECTOR. C GAMMA = SCRATCH VECTOR. C L (INPUT) LOWER TRIANGULAR MATRIX, STORED ROWWISE. C LAMBDA = SCRATCH VECTOR. C LPLUS (OUTPUT) LOWER TRIANGULAR MATRIX, STORED ROWWISE, WHICH MAY C OCCUPY THE SAME STORAGE AS L. C N (INPUT) LENGTH OF VECTOR PARAMETERS AND ORDER OF MATRICES. C W (INPUT, DESTROYED ON OUTPUT) RIGHT SINGULAR VECTOR OF RANK 1 C CORRECTION TO L. C Z (INPUT, DESTROYED ON OUTPUT) LEFT SINGULAR VECTOR OF RANK 1 C CORRECTION TO L. C C------------------------------- NOTES ------------------------------- C C *** APPLICATION AND USAGE RESTRICTIONS *** C C THIS ROUTINE UPDATES THE CHOLESKY FACTOR L OF A SYMMETRIC C POSITIVE DEFINITE MATRIX TO WHICH A SECANT UPDATE IS BEING C APPLIED -- IT COMPUTES A CHOLESKY FACTOR LPLUS OF C L * (I + Z*W**T) * (I + W*Z**T) * L**T. IT IS ASSUMED THAT W C AND Z HAVE BEEN CHOSEN SO THAT THE UPDATED MATRIX IS STRICTLY C POSITIVE DEFINITE. C C *** ALGORITHM NOTES *** C C THIS CODE USES RECURRENCE 3 OF REF. 1 (WITH D(J) = 1 FOR ALL J) C TO COMPUTE LPLUS OF THE FORM L * (I + Z*W**T) * Q, WHERE Q C IS AN ORTHOGONAL MATRIX THAT MAKES THE RESULT LOWER TRIANGULAR. C LPLUS MAY HAVE SOME NEGATIVE DIAGONAL ELEMENTS. C C *** REFERENCES *** C C 1. GOLDFARB, D. (1976), FACTORIZED VARIABLE METRIC METHODS FOR UNCON- C STRAINED OPTIMIZATION, MATH. COMPUT. 30, PP. 796-811. C C *** GENERAL *** C C CODED BY DAVID M. GAY (FALL 1979). C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS MCS-7600324 AND C MCS-7906671. C C------------------------ EXTERNAL QUANTITIES ------------------------ C C *** INTRINSIC FUNCTIONS *** C/+ DOUBLE PRECISION DSQRT C/ C-------------------------- LOCAL VARIABLES -------------------------- C INTEGER I, IJ, J, JJ, JP1, K, NM1, NP1 DOUBLE PRECISION A, B, BJ, ETA, GJ, LJ, LIJ, LJJ, NU, S, THETA, 1 WJ, ZJ DOUBLE PRECISION ONE, ZERO C C *** DATA INITIALIZATIONS *** C C/6 C DATA ONE/1.D+0/, ZERO/0.D+0/ C/7 PARAMETER (ONE=1.D+0, ZERO=0.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C NU = ONE ETA = ZERO IF (N .LE. 1) GO TO 30 NM1 = N - 1 C C *** TEMPORARILY STORE S(J) = SUM OVER K = J+1 TO N OF W(K)**2 IN C *** LAMBDA(J). C S = ZERO DO 10 I = 1, NM1 J = N - I S = S + W(J+1)**2 LAMBDA(J) = S 10 CONTINUE C C *** COMPUTE LAMBDA, GAMMA, AND BETA BY GOLDFARB*S RECURRENCE 3. C DO 20 J = 1, NM1 WJ = W(J) A = NU*Z(J) - ETA*WJ THETA = ONE + A*WJ S = A*LAMBDA(J) LJ = DSQRT(THETA**2 + A*S) IF (THETA .GT. ZERO) LJ = -LJ LAMBDA(J) = LJ B = THETA*WJ + S GAMMA(J) = B * NU / LJ BETA(J) = (A - B*ETA) / LJ NU = -NU / LJ ETA = -(ETA + (A**2)/(THETA - LJ)) / LJ 20 CONTINUE 30 LAMBDA(N) = ONE + (NU*Z(N) - ETA*W(N))*W(N) C C *** UPDATE L, GRADUALLY OVERWRITING W AND Z WITH L*W AND L*Z. C NP1 = N + 1 JJ = N * (N + 1) / 2 DO 60 K = 1, N J = NP1 - K LJ = LAMBDA(J) LJJ = L(JJ) LPLUS(JJ) = LJ * LJJ WJ = W(J) W(J) = LJJ * WJ ZJ = Z(J) Z(J) = LJJ * ZJ IF (K .EQ. 1) GO TO 50 BJ = BETA(J) GJ = GAMMA(J) IJ = JJ + J JP1 = J + 1 DO 40 I = JP1, N LIJ = L(IJ) LPLUS(IJ) = LJ*LIJ + BJ*W(I) + GJ*Z(I) W(I) = W(I) + LIJ*WJ Z(I) = Z(I) + LIJ*ZJ IJ = IJ + I 40 CONTINUE 50 JJ = JJ - J 60 CONTINUE C 999 RETURN C *** LAST CARD OF DL7UPD FOLLOWS *** END PyBDSF-1.10.1/src/port3/dl7vml.f000066400000000000000000000013501420247104600160320ustar00rootroot00000000000000 SUBROUTINE DL7VML(N, X, L, Y) C C *** COMPUTE X = L*Y, WHERE L IS AN N X N LOWER TRIANGULAR C *** MATRIX STORED COMPACTLY BY ROWS. X AND Y MAY OCCUPY THE SAME C *** STORAGE. *** C INTEGER N DOUBLE PRECISION X(N), L(1), Y(N) C DIMENSION L(N*(N+1)/2) INTEGER I, II, IJ, I0, J, NP1 DOUBLE PRECISION T, ZERO C/6 C DATA ZERO/0.D+0/ C/7 PARAMETER (ZERO=0.D+0) C/ C NP1 = N + 1 I0 = N*(N+1)/2 DO 20 II = 1, N I = NP1 - II I0 = I0 - I T = ZERO DO 10 J = 1, I IJ = I0 + J T = T + L(IJ)*Y(J) 10 CONTINUE X(I) = T 20 CONTINUE 999 RETURN C *** LAST CARD OF DL7VML FOLLOWS *** END PyBDSF-1.10.1/src/port3/dmnf.f000066400000000000000000000065051420247104600155600ustar00rootroot00000000000000 SUBROUTINE DMNF(N, D, X, CALCF, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING C *** FINITE-DIFFERENCE GRADIENTS AND SECANT HESSIAN APPROXIMATIONS. C INTEGER N, LIV, LV INTEGER IV(LIV), UIPARM(1) DOUBLE PRECISION D(N), X(N), V(LV), URPARM(1) C DIMENSION V(77 + N*(N+17)/2), UIPARM(*), URPARM(*) EXTERNAL CALCF, UFPARM C C *** PURPOSE *** C C THIS ROUTINE INTERACTS WITH SUBROUTINE DRMNF IN AN ATTEMPT C TO FIND AN N-VECTOR X* THAT MINIMIZES THE (UNCONSTRAINED) C OBJECTIVE FUNCTION COMPUTED BY CALCF. (OFTEN THE X* FOUND IS C A LOCAL MINIMIZER RATHER THAN A GLOBAL ONE.) C C *** PARAMETERS *** C C THE PARAMETERS FOR DMNF ARE THE SAME AS THOSE FOR DMNG C (WHICH SEE), EXCEPT THAT CALCG IS OMITTED. INSTEAD OF CALLING C CALCG TO OBTAIN THE GRADIENT OF THE OBJECTIVE FUNCTION AT X, C DMNF CALLS DS7GRD, WHICH COMPUTES AN APPROXIMATION TO THE C GRADIENT BY FINITE (FORWARD AND CENTRAL) DIFFERENCES USING THE C METHOD OF REF. 1. THE FOLLOWING INPUT COMPONENT IS OF INTEREST C IN THIS REGARD (AND IS NOT DESCRIBED IN DMNG). C C V(ETA0)..... V(42) IS AN ESTIMATED BOUND ON THE RELATIVE ERROR IN THE C OBJECTIVE FUNCTION VALUE COMPUTED BY CALCF... C (TRUE VALUE) = (COMPUTED VALUE) * (1 + E), C WHERE ABS(E) .LE. V(ETA0). DEFAULT = MACHEP * 10**3, C WHERE MACHEP IS THE UNIT ROUNDOFF. C C THE OUTPUT VALUES IV(NFCALL) AND IV(NGCALL) HAVE DIFFERENT C MEANINGS FOR DMNF THAN FOR DMNG... C C IV(NFCALL)... IV(6) IS THE NUMBER OF CALLS SO FAR MADE ON CALCF (I.E., C FUNCTION EVALUATIONS) EXCLUDING THOSE MADE ONLY FOR C COMPUTING GRADIENTS. THE INPUT VALUE IV(MXFCAL) IS A C LIMIT ON IV(NFCALL). C IV(NGCALL)... IV(30) IS THE NUMBER OF FUNCTION EVALUATIONS MADE ONLY C FOR COMPUTING GRADIENTS. THE TOTAL NUMBER OF FUNCTION C EVALUATIONS IS THUS IV(NFCALL) + IV(NGCALL). C C *** REFERENCE *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER 1980). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER C GRANTS MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, C AND MCS-7906671. C C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL DRMNF C C DRMNF.... OVERSEES COMPUTATION OF FINITE-DIFFERENCE GRADIENT AND C CALLS DRMNG TO CARRY OUT DMNG ALGORITHM. C INTEGER NF DOUBLE PRECISION FX C C *** SUBSCRIPTS FOR IV *** C INTEGER NFCALL, TOOBIG C C/6 C DATA NFCALL/6/, TOOBIG/2/ C/7 PARAMETER (NFCALL=6, TOOBIG=2) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C 10 CALL DRMNF(D, FX, IV, LIV, LV, N, V, X) IF (IV(1) .GT. 2) GO TO 999 C C *** COMPUTE FUNCTION *** C NF = IV(NFCALL) CALL CALCF(N, X, NF, FX, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 10 C C 999 RETURN C *** LAST CARD OF DMNF FOLLOWS *** END PyBDSF-1.10.1/src/port3/dmnfb.f000066400000000000000000000067321420247104600157240ustar00rootroot00000000000000 SUBROUTINE DMNFB(P, D, X, B, CALCF, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING C *** FINITE-DIFFERENCE GRADIENTS AND SECANT HESSIAN APPROXIMATIONS. C INTEGER P, LIV, LV C/6S C INTEGER IV(LIV), UIPARM(1) C DOUBLE PRECISION B(2,P), D(P), X(P), V(LV), URPARM(1) C/7S INTEGER IV(LIV), UIPARM(*) DOUBLE PRECISION B(2,P), D(P), X(P), V(LV), URPARM(*) C/ C DIMENSION V(59 + P), V(77 + P*(P+23)/2), UIPARM(*), URPARM(*) EXTERNAL CALCF, UFPARM C C *** PURPOSE *** C C THIS ROUTINE INTERACTS WITH SUBROUTINE DRMNF IN AN ATTEMPT C TO FIND AN P-VECTOR X* THAT MINIMIZES THE (UNCONSTRAINED) C OBJECTIVE FUNCTION COMPUTED BY CALCF. (OFTEN THE X* FOUND IS C A LOCAL MINIMIZER RATHER THAN A GLOBAL ONE.) C C *** PARAMETERS *** C C THE PARAMETERS FOR DMNFB ARE THE SAME AS THOSE FOR DMNGB C (WHICH SEE), EXCEPT THAT CALCG IS OMITTED. INSTEAD OF CALLING C CALCG TO OBTAIN THE GRADIENT OF THE OBJECTIVE FUNCTION AT X, C DMNFB CALLS DS3GRD, WHICH COMPUTES AN APPROXIMATION TO THE C GRADIENT BY FINITE (FORWARD AND CENTRAL) DIFFERENCES USING THE C METHOD OF REF. 1. THE FOLLOWING INPUT COMPONENT IS OF INTEREST C IN THIS REGARD (AND IS NOT DESCRIBED IN DMNG OR DMNGB). C C V(ETA0)..... V(42) IS AN ESTIMATED BOUND ON THE RELATIVE ERROR IN THE C OBJECTIVE FUNCTION VALUE COMPUTED BY CALCF... C (TRUE VALUE) = (COMPUTED VALUE) * (1 + E), C WHERE ABS(E) .LE. V(ETA0). DEFAULT = MACHEP * 10**3, C WHERE MACHEP IS THE UNIT ROUNDOFF. C C THE OUTPUT VALUES IV(NFCALL) AND IV(NGCALL) HAVE DIFFERENT C MEANINGS FOR DMNFB THAN FOR DMNG... C C IV(NFCALL)... IV(6) IS THE NUMBER OF CALLS SO FAR MADE ON CALCF (I.E., C FUNCTION EVALUATIONS) EXCLUDING THOSE MADE ONLY FOR C COMPUTING GRADIENTS. THE INPUT VALUE IV(MXFCAL) IS A C LIMIT ON IV(NFCALL). C IV(NGCALL)... IV(30) IS THE NUMBER OF FUNCTION EVALUATIONS MADE ONLY C FOR COMPUTING GRADIENTS. THE TOTAL NUMBER OF FUNCTION C EVALUATIONS IS THUS IV(NFCALL) + IV(NGCALL). C C *** REFERENCE *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER 1980). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER C GRANTS MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, C AND MCS-7906671. C C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL DRMNFB C C DRMNFB... OVERSEES COMPUTATION OF FINITE-DIFFERENCE GRADIENT AND C CALLS DRMNG TO CARRY OUT DMNG ALGORITHM. C INTEGER NF DOUBLE PRECISION FX C C *** SUBSCRIPTS FOR IV *** C INTEGER NFCALL, TOOBIG C C/6 C DATA NFCALL/6/, TOOBIG/2/ C/7 PARAMETER (NFCALL=6, TOOBIG=2) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C 10 CALL DRMNFB(B, D, FX, IV, LIV, LV, P, V, X) IF (IV(1) .GT. 2) GO TO 999 C C *** COMPUTE FUNCTION *** C NF = IV(NFCALL) CALL CALCF(P, X, NF, FX, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 10 C C 999 RETURN C *** LAST CARD OF DMNFB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dmng.f000066400000000000000000000635741420247104600155720ustar00rootroot00000000000000 SUBROUTINE DMNG(N, D, X, CALCF, CALCG, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING *** C *** ANALYTIC GRADIENT AND HESSIAN APPROX. FROM SECANT UPDATE *** C INTEGER N, LIV, LV INTEGER IV(LIV), UIPARM(1) DOUBLE PRECISION D(N), X(N), V(LV), URPARM(1) C DIMENSION V(71 + N*(N+15)/2), UIPARM(*), URPARM(*) EXTERNAL CALCF, CALCG, UFPARM C C *** PURPOSE *** C C THIS ROUTINE INTERACTS WITH SUBROUTINE DRMNG IN AN ATTEMPT C TO FIND AN N-VECTOR X* THAT MINIMIZES THE (UNCONSTRAINED) C OBJECTIVE FUNCTION COMPUTED BY CALCF. (OFTEN THE X* FOUND IS C A LOCAL MINIMIZER RATHER THAN A GLOBAL ONE.) C C-------------------------- PARAMETER USAGE -------------------------- C C N........ (INPUT) THE NUMBER OF VARIABLES ON WHICH F DEPENDS, I.E., C THE NUMBER OF COMPONENTS IN X. C D........ (INPUT/OUTPUT) A SCALE VECTOR SUCH THAT D(I)*X(I), C I = 1,2,...,N, ARE ALL IN COMPARABLE UNITS. C D CAN STRONGLY AFFECT THE BEHAVIOR OF DMNG. C FINDING THE BEST CHOICE OF D IS GENERALLY A TRIAL- C AND-ERROR PROCESS. CHOOSING D SO THAT D(I)*X(I) C HAS ABOUT THE SAME VALUE FOR ALL I OFTEN WORKS WELL. C THE DEFAULTS PROVIDED BY SUBROUTINE DIVSET (SEE IV C BELOW) REQUIRE THE CALLER TO SUPPLY D. C X........ (INPUT/OUTPUT) BEFORE (INITIALLY) CALLING DMNG, THE CALL- C ER SHOULD SET X TO AN INITIAL GUESS AT X*. WHEN C DMNG RETURNS, X CONTAINS THE BEST POINT SO FAR C FOUND, I.E., THE ONE THAT GIVES THE LEAST VALUE SO C FAR SEEN FOR F(X). C CALCF.... (INPUT) A SUBROUTINE THAT, GIVEN X, COMPUTES F(X). CALCF C MUST BE DECLARED EXTERNAL IN THE CALLING PROGRAM. C IT IS INVOKED BY C CALL CALCF(N, X, NF, F, UIPARM, URPARM, UFPARM) C WHEN CALCF IS CALLED, NF IS THE INVOCATION C COUNT FOR CALCF. NF IS INCLUDED FOR POSSIBLE USE C WITH CALCG. IF X IS OUT OF BOUNDS (E.G., IF IT C WOULD CAUSE OVERFLOW IN COMPUTING F(X)), THEN CALCF C SHOULD SET NF TO 0. THIS WILL CAUSE A SHORTER STEP C TO BE ATTEMPTED. (IF X IS IN BOUNDS, THEN CALCF C SHOULD NOT CHANGE NF.) THE OTHER PARAMETERS ARE AS C DESCRIBED ABOVE AND BELOW. CALCF SHOULD NOT CHANGE C N, P, OR X. C CALCG.... (INPUT) A SUBROUTINE THAT, GIVEN X, COMPUTES G(X), THE GRA- C DIENT OF F AT X. CALCG MUST BE DECLARED EXTERNAL IN C THE CALLING PROGRAM. IT IS INVOKED BY C CALL CALCG(N, X, NF, G, UIPARM, URPARM, UFAPRM) C WHEN CALCG IS CALLED, NF IS THE INVOCATION C COUNT FOR CALCF AT THE TIME F(X) WAS EVALUATED. THE C X PASSED TO CALCG IS USUALLY THE ONE PASSED TO CALCF C ON EITHER ITS MOST RECENT INVOCATION OR THE ONE C PRIOR TO IT. IF CALCF SAVES INTERMEDIATE RESULTS C FOR _USE_ BY CALCG, THEN IT IS POSSIBLE TO TELL FROM C NF WHETHER THEY ARE VALID FOR THE CURRENT X (OR C WHICH COPY IS VALID IF TWO COPIES ARE KEPT). IF G C CANNOT BE COMPUTED AT X, THEN CALCG SHOULD SET NF TO C 0. IN THIS CASE, DMNG WILL RETURN WITH IV(1) = 65. C (IF G CAN BE COMPUTED AT X, THEN CALCG SHOULD NOT C CHANGED NF.) THE OTHER PARAMETERS TO CALCG ARE AS C DESCRIBED ABOVE AND BELOW. CALCG SHOULD NOT CHANGE C N OR X. C IV....... (INPUT/OUTPUT) AN INTEGER VALUE ARRAY OF LENGTH LIV (SEE C BELOW) THAT HELPS CONTROL THE DMNG ALGORITHM AND C THAT IS USED TO STORE VARIOUS INTERMEDIATE QUANTI- C TIES. OF PARTICULAR INTEREST ARE THE INITIALIZATION/ C RETURN CODE IV(1) AND THE ENTRIES IN IV THAT CONTROL C PRINTING AND LIMIT THE NUMBER OF ITERATIONS AND FUNC- C TION EVALUATIONS. SEE THE SECTION ON IV INPUT C VALUES BELOW. C LIV...... (INPUT) LENGTH OF IV ARRAY. MUST BE AT LEAST 60. IF LIV C IS TOO SMALL, THEN DMNG RETURNS WITH IV(1) = 15. C WHEN DMNG RETURNS, THE SMALLEST ALLOWED VALUE OF C LIV IS STORED IN IV(LASTIV) -- SEE THE SECTION ON C IV OUTPUT VALUES BELOW. (THIS IS INTENDED FOR USE C WITH EXTENSIONS OF DMNG THAT HANDLE CONSTRAINTS.) C LV....... (INPUT) LENGTH OF V ARRAY. MUST BE AT LEAST 71+N*(N+15)/2. C (AT LEAST 77+N*(N+17)/2 FOR DMNF, AT LEAST C 78+N*(N+12) FOR DMNH). IF LV IS TOO SMALL, THEN C DMNG RETURNS WITH IV(1) = 16. WHEN DMNG RETURNS, C THE SMALLEST ALLOWED VALUE OF LV IS STORED IN C IV(LASTV) -- SEE THE SECTION ON IV OUTPUT VALUES C BELOW. C V........ (INPUT/OUTPUT) A FLOATING-POINT VALUE ARRAY OF LENGTH LV C (SEE BELOW) THAT HELPS CONTROL THE DMNG ALGORITHM C AND THAT IS USED TO STORE VARIOUS INTERMEDIATE C QUANTITIES. OF PARTICULAR INTEREST ARE THE ENTRIES C IN V THAT LIMIT THE LENGTH OF THE FIRST STEP C ATTEMPTED (LMAX0) AND SPECIFY CONVERGENCE TOLERANCES C (AFCTOL, LMAXS, RFCTOL, SCTOL, XCTOL, XFTOL). C UIPARM... (INPUT) USER INTEGER PARAMETER ARRAY PASSED WITHOUT CHANGE C TO CALCF AND CALCG. C URPARM... (INPUT) USER FLOATING-POINT PARAMETER ARRAY PASSED WITHOUT C CHANGE TO CALCF AND CALCG. C UFPARM... (INPUT) USER EXTERNAL SUBROUTINE OR FUNCTION PASSED WITHOUT C CHANGE TO CALCF AND CALCG. C C *** IV INPUT VALUES (FROM SUBROUTINE DIVSET) *** C C IV(1)... ON INPUT, IV(1) SHOULD HAVE A VALUE BETWEEN 0 AND 14...... C 0 AND 12 MEAN THIS IS A FRESH START. 0 MEANS THAT C DIVSET(2, IV, LIV, LV, V) C IS TO BE CALLED TO PROVIDE ALL DEFAULT VALUES TO IV AND C V. 12 (THE VALUE THAT DIVSET ASSIGNS TO IV(1)) MEANS THE C CALLER HAS ALREADY CALLED DIVSET AND HAS POSSIBLY CHANGED C SOME IV AND/OR V ENTRIES TO NON-DEFAULT VALUES. C 13 MEANS DIVSET HAS BEEN CALLED AND THAT DMNG (AND C DRMNG) SHOULD ONLY DO THEIR STORAGE ALLOCATION. THAT IS, C THEY SHOULD SET THE OUTPUT COMPONENTS OF IV THAT TELL C WHERE VARIOUS SUBARRAYS ARRAYS OF V BEGIN, SUCH AS IV(G) C (AND, FOR DMNH AND DRMNH ONLY, IV(DTOL)), AND RETURN. C 14 MEANS THAT A STORAGE HAS BEEN ALLOCATED (BY A CALL C WITH IV(1) = 13) AND THAT THE ALGORITHM SHOULD BE C STARTED. WHEN CALLED WITH IV(1) = 13, DMNG RETURNS C IV(1) = 14 UNLESS LIV OR LV IS TOO SMALL (OR N IS NOT C POSITIVE). DEFAULT = 12. C IV(INITH).... IV(25) TELLS WHETHER THE HESSIAN APPROXIMATION H SHOULD C BE INITIALIZED. 1 (THE DEFAULT) MEANS DRMNG SHOULD C INITIALIZE H TO THE DIAGONAL MATRIX WHOSE I-TH DIAGONAL C ELEMENT IS D(I)**2. 0 MEANS THE CALLER HAS SUPPLIED A C CHOLESKY FACTOR L OF THE INITIAL HESSIAN APPROXIMATION C H = L*(L**T) IN V, STARTING AT V(IV(LMAT)) = V(IV(42)) C (AND STORED COMPACTLY BY ROWS). NOTE THAT IV(LMAT) MAY C BE INITIALIZED BY CALLING DMNG WITH IV(1) = 13 (SEE C THE IV(1) DISCUSSION ABOVE). DEFAULT = 1. C IV(MXFCAL)... IV(17) GIVES THE MAXIMUM NUMBER OF FUNCTION EVALUATIONS C (CALLS ON CALCF) ALLOWED. IF THIS NUMBER DOES NOT SUF- C FICE, THEN DMNG RETURNS WITH IV(1) = 9. DEFAULT = 200. C IV(MXITER)... IV(18) GIVES THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. C IT ALSO INDIRECTLY LIMITS THE NUMBER OF GRADIENT EVALUA- C TIONS (CALLS ON CALCG) TO IV(MXITER) + 1. IF IV(MXITER) C ITERATIONS DO NOT SUFFICE, THEN DMNG RETURNS WITH C IV(1) = 10. DEFAULT = 150. C IV(OUTLEV)... IV(19) CONTROLS THE NUMBER AND LENGTH OF ITERATION SUM- C MARY LINES PRINTED (BY DITSUM). IV(OUTLEV) = 0 MEANS DO C NOT PRINT ANY SUMMARY LINES. OTHERWISE, PRINT A SUMMARY C LINE AFTER EACH ABS(IV(OUTLEV)) ITERATIONS. IF IV(OUTLEV) C IS POSITIVE, THEN SUMMARY LINES OF LENGTH 78 (PLUS CARRI- C AGE CONTROL) ARE PRINTED, INCLUDING THE FOLLOWING... THE C ITERATION AND FUNCTION EVALUATION COUNTS, F = THE CURRENT C FUNCTION VALUE, RELATIVE DIFFERENCE IN FUNCTION VALUES C ACHIEVED BY THE LATEST STEP (I.E., RELDF = (F0-V(F))/F01, C WHERE F01 IS THE MAXIMUM OF ABS(V(F)) AND ABS(V(F0)) AND C V(F0) IS THE FUNCTION VALUE FROM THE PREVIOUS ITERA- C TION), THE RELATIVE FUNCTION REDUCTION PREDICTED FOR THE C STEP JUST TAKEN (I.E., PRELDF = V(PREDUC) / F01, WHERE C V(PREDUC) IS DESCRIBED BELOW), THE SCALED RELATIVE CHANGE C IN X (SEE V(RELDX) BELOW), THE STEP PARAMETER FOR THE C STEP JUST TAKEN (STPPAR = 0 MEANS A FULL NEWTON STEP, C BETWEEN 0 AND 1 MEANS A RELAXED NEWTON STEP, BETWEEN 1 C AND 2 MEANS A DOUBLE DOGLEG STEP, GREATER THAN 2 MEANS C A SCALED DOWN CAUCHY STEP -- SEE SUBROUTINE DBLDOG), THE C 2-NORM OF THE SCALE VECTOR D TIMES THE STEP JUST TAKEN C (SEE V(DSTNRM) BELOW), AND NPRELDF, I.E., C V(NREDUC)/F01, WHERE V(NREDUC) IS DESCRIBED BELOW -- IF C NPRELDF IS POSITIVE, THEN IT IS THE RELATIVE FUNCTION C REDUCTION PREDICTED FOR A NEWTON STEP (ONE WITH C STPPAR = 0). IF NPRELDF IS NEGATIVE, THEN IT IS THE C NEGATIVE OF THE RELATIVE FUNCTION REDUCTION PREDICTED C FOR A STEP COMPUTED WITH STEP BOUND V(LMAXS) FOR _USE_ IN C TESTING FOR SINGULAR CONVERGENCE. C IF IV(OUTLEV) IS NEGATIVE, THEN LINES OF LENGTH 50 C ARE PRINTED, INCLUDING ONLY THE FIRST 6 ITEMS LISTED C ABOVE (THROUGH RELDX). C DEFAULT = 1. C IV(PARPRT)... IV(20) = 1 MEANS PRINT ANY NONDEFAULT V VALUES ON A C FRESH START OR ANY CHANGED V VALUES ON A RESTART. C IV(PARPRT) = 0 MEANS SKIP THIS PRINTING. DEFAULT = 1. C IV(PRUNIT)... IV(21) IS THE OUTPUT UNIT NUMBER ON WHICH ALL PRINTING C IS DONE. IV(PRUNIT) = 0 MEANS SUPPRESS ALL PRINTING. C DEFAULT = STANDARD OUTPUT UNIT (UNIT 6 ON MOST SYSTEMS). C IV(SOLPRT)... IV(22) = 1 MEANS PRINT OUT THE VALUE OF X RETURNED (AS C WELL AS THE GRADIENT AND THE SCALE VECTOR D). C IV(SOLPRT) = 0 MEANS SKIP THIS PRINTING. DEFAULT = 1. C IV(STATPR)... IV(23) = 1 MEANS PRINT SUMMARY STATISTICS UPON RETURN- C ING. THESE CONSIST OF THE FUNCTION VALUE, THE SCALED C RELATIVE CHANGE IN X CAUSED BY THE MOST RECENT STEP (SEE C V(RELDX) BELOW), THE NUMBER OF FUNCTION AND GRADIENT C EVALUATIONS (CALLS ON CALCF AND CALCG), AND THE RELATIVE C FUNCTION REDUCTIONS PREDICTED FOR THE LAST STEP TAKEN AND C FOR A NEWTON STEP (OR PERHAPS A STEP BOUNDED BY V(LMAXS) C -- SEE THE DESCRIPTIONS OF PRELDF AND NPRELDF UNDER C IV(OUTLEV) ABOVE). C IV(STATPR) = 0 MEANS SKIP THIS PRINTING. C IV(STATPR) = -1 MEANS SKIP THIS PRINTING AS WELL AS THAT C OF THE ONE-LINE TERMINATION REASON MESSAGE. DEFAULT = 1. C IV(X0PRT).... IV(24) = 1 MEANS PRINT THE INITIAL X AND SCALE VECTOR D C (ON A FRESH START ONLY). IV(X0PRT) = 0 MEANS SKIP THIS C PRINTING. DEFAULT = 1. C C *** (SELECTED) IV OUTPUT VALUES *** C C IV(1)........ ON OUTPUT, IV(1) IS A RETURN CODE.... C 3 = X-CONVERGENCE. THE SCALED RELATIVE DIFFERENCE (SEE C V(RELDX)) BETWEEN THE CURRENT PARAMETER VECTOR X AND C A LOCALLY OPTIMAL PARAMETER VECTOR IS VERY LIKELY AT C MOST V(XCTOL). C 4 = RELATIVE FUNCTION CONVERGENCE. THE RELATIVE DIFFER- C ENCE BETWEEN THE CURRENT FUNCTION VALUE AND ITS LO- C CALLY OPTIMAL VALUE IS VERY LIKELY AT MOST V(RFCTOL). C 5 = BOTH X- AND RELATIVE FUNCTION CONVERGENCE (I.E., THE C CONDITIONS FOR IV(1) = 3 AND IV(1) = 4 BOTH HOLD). C 6 = ABSOLUTE FUNCTION CONVERGENCE. THE CURRENT FUNCTION C VALUE IS AT MOST V(AFCTOL) IN ABSOLUTE VALUE. C 7 = SINGULAR CONVERGENCE. THE HESSIAN NEAR THE CURRENT C ITERATE APPEARS TO BE SINGULAR OR NEARLY SO, AND A C STEP OF LENGTH AT MOST V(LMAXS) IS UNLIKELY TO YIELD C A RELATIVE FUNCTION DECREASE OF MORE THAN V(SCTOL). C 8 = FALSE CONVERGENCE. THE ITERATES APPEAR TO BE CONVERG- C ING TO A NONCRITICAL POINT. THIS MAY MEAN THAT THE C CONVERGENCE TOLERANCES (V(AFCTOL), V(RFCTOL), C V(XCTOL)) ARE TOO SMALL FOR THE ACCURACY TO WHICH C THE FUNCTION AND GRADIENT ARE BEING COMPUTED, THAT C THERE IS AN ERROR IN COMPUTING THE GRADIENT, OR THAT C THE FUNCTION OR GRADIENT IS DISCONTINUOUS NEAR X. C 9 = FUNCTION EVALUATION LIMIT REACHED WITHOUT OTHER CON- C VERGENCE (SEE IV(MXFCAL)). C 10 = ITERATION LIMIT REACHED WITHOUT OTHER CONVERGENCE C (SEE IV(MXITER)). C 11 = STOPX RETURNED .TRUE. (EXTERNAL INTERRUPT). SEE THE C USAGE NOTES BELOW. C 14 = STORAGE HAS BEEN ALLOCATED (AFTER A CALL WITH C IV(1) = 13). C 17 = RESTART ATTEMPTED WITH N CHANGED. C 18 = D HAS A NEGATIVE COMPONENT AND IV(DTYPE) .LE. 0. C 19...43 = V(IV(1)) IS OUT OF RANGE. C 63 = F(X) CANNOT BE COMPUTED AT THE INITIAL X. C 64 = BAD PARAMETERS PASSED TO ASSESS (WHICH SHOULD NOT C OCCUR). C 65 = THE GRADIENT COULD NOT BE COMPUTED AT X (SEE CALCG C ABOVE). C 67 = BAD FIRST PARAMETER TO DIVSET. C 80 = IV(1) WAS OUT OF RANGE. C 81 = N IS NOT POSITIVE. C IV(G)........ IV(28) IS THE STARTING SUBSCRIPT IN V OF THE CURRENT C GRADIENT VECTOR (THE ONE CORRESPONDING TO X). C IV(LASTIV)... IV(44) IS THE LEAST ACCEPTABLE VALUE OF LIV. (IT IS C ONLY SET IF LIV IS AT LEAST 44.) C IV(LASTV).... IV(45) IS THE LEAST ACCEPTABLE VALUE OF LV. (IT IS C ONLY SET IF LIV IS LARGE ENOUGH, AT LEAST IV(LASTIV).) C IV(NFCALL)... IV(6) IS THE NUMBER OF CALLS SO FAR MADE ON CALCF (I.E., C FUNCTION EVALUATIONS). C IV(NGCALL)... IV(30) IS THE NUMBER OF GRADIENT EVALUATIONS (CALLS ON C CALCG). C IV(NITER).... IV(31) IS THE NUMBER OF ITERATIONS PERFORMED. C C *** (SELECTED) V INPUT VALUES (FROM SUBROUTINE DIVSET) *** C C V(BIAS)..... V(43) IS THE BIAS PARAMETER USED IN SUBROUTINE DBLDOG -- C SEE THAT SUBROUTINE FOR DETAILS. DEFAULT = 0.8. C V(AFCTOL)... V(31) IS THE ABSOLUTE FUNCTION CONVERGENCE TOLERANCE. C IF DMNG FINDS A POINT WHERE THE FUNCTION VALUE IS LESS C THAN V(AFCTOL) IN ABSOLUTE VALUE, AND IF DMNG DOES NOT C RETURN WITH IV(1) = 3, 4, OR 5, THEN IT RETURNS WITH C IV(1) = 6. THIS TEST CAN BE TURNED OFF BY SETTING C V(AFCTOL) TO ZERO. DEFAULT = MAX(10**-20, MACHEP**2), C WHERE MACHEP IS THE UNIT ROUNDOFF. C V(DINIT).... V(38), IF NONNEGATIVE, IS THE VALUE TO WHICH THE SCALE C VECTOR D IS INITIALIZED. DEFAULT = -1. C V(LMAX0).... V(35) GIVES THE MAXIMUM 2-NORM ALLOWED FOR D TIMES THE C VERY FIRST STEP THAT DMNG ATTEMPTS. THIS PARAMETER CAN C MARKEDLY AFFECT THE PERFORMANCE OF DMNG. C V(LMAXS).... V(36) IS USED IN TESTING FOR SINGULAR CONVERGENCE -- IF C THE FUNCTION REDUCTION PREDICTED FOR A STEP OF LENGTH C BOUNDED BY V(LMAXS) IS AT MOST V(SCTOL) * ABS(F0), WHERE C F0 IS THE FUNCTION VALUE AT THE START OF THE CURRENT C ITERATION, AND IF DMNG DOES NOT RETURN WITH IV(1) = 3, C 4, 5, OR 6, THEN IT RETURNS WITH IV(1) = 7. DEFAULT = 1. C V(RFCTOL)... V(32) IS THE RELATIVE FUNCTION CONVERGENCE TOLERANCE. C IF THE CURRENT MODEL PREDICTS A MAXIMUM POSSIBLE FUNCTION C REDUCTION (SEE V(NREDUC)) OF AT MOST V(RFCTOL)*ABS(F0) C AT THE START OF THE CURRENT ITERATION, WHERE F0 IS THE C THEN CURRENT FUNCTION VALUE, AND IF THE LAST STEP ATTEMPT- C ED ACHIEVED NO MORE THAN TWICE THE PREDICTED FUNCTION C DECREASE, THEN DMNG RETURNS WITH IV(1) = 4 (OR 5). C DEFAULT = MAX(10**-10, MACHEP**(2/3)), WHERE MACHEP IS C THE UNIT ROUNDOFF. C V(SCTOL).... V(37) IS THE SINGULAR CONVERGENCE TOLERANCE -- SEE THE C DESCRIPTION OF V(LMAXS) ABOVE. C V(TUNER1)... V(26) HELPS DECIDE WHEN TO CHECK FOR FALSE CONVERGENCE. C THIS IS DONE IF THE ACTUAL FUNCTION DECREASE FROM THE C CURRENT STEP IS NO MORE THAN V(TUNER1) TIMES ITS PREDICT- C ED VALUE. DEFAULT = 0.1. C V(XCTOL).... V(33) IS THE X-CONVERGENCE TOLERANCE. IF A NEWTON STEP C (SEE V(NREDUC)) IS TRIED THAT HAS V(RELDX) .LE. V(XCTOL) C AND IF THIS STEP YIELDS AT MOST TWICE THE PREDICTED FUNC- C TION DECREASE, THEN DMNG RETURNS WITH IV(1) = 3 (OR 5). C (SEE THE DESCRIPTION OF V(RELDX) BELOW.) C DEFAULT = MACHEP**0.5, WHERE MACHEP IS THE UNIT ROUNDOFF. C V(XFTOL).... V(34) IS THE FALSE CONVERGENCE TOLERANCE. IF A STEP IS C TRIED THAT GIVES NO MORE THAN V(TUNER1) TIMES THE PREDICT- C ED FUNCTION DECREASE AND THAT HAS V(RELDX) .LE. V(XFTOL), C AND IF DMNG DOES NOT RETURN WITH IV(1) = 3, 4, 5, 6, OR C 7, THEN IT RETURNS WITH IV(1) = 8. (SEE THE DESCRIPTION C OF V(RELDX) BELOW.) DEFAULT = 100*MACHEP, WHERE C MACHEP IS THE UNIT ROUNDOFF. C V(*)........DIVSET SUPPLIES TO V A NUMBER OF TUNING CONSTANTS, WITH C WHICH IT SHOULD ORDINARILY BE UNNECESSARY TO TINKER. SEE C SECTION 17 OF VERSION 2.2 OF THE NL2SOL USAGE SUMMARY C (I.E., THE APPENDIX TO REF. 1) FOR DETAILS ON V(I), C I = DECFAC, INCFAC, PHMNFC, PHMXFC, RDFCMN, RDFCMX, C TUNER2, TUNER3, TUNER4, TUNER5. C C *** (SELECTED) V OUTPUT VALUES *** C C V(DGNORM)... V(1) IS THE 2-NORM OF (DIAG(D)**-1)*G, WHERE G IS THE C MOST RECENTLY COMPUTED GRADIENT. C V(DSTNRM)... V(2) IS THE 2-NORM OF DIAG(D)*STEP, WHERE STEP IS THE C CURRENT STEP. C V(F)........ V(10) IS THE CURRENT FUNCTION VALUE. C V(F0)....... V(13) IS THE FUNCTION VALUE AT THE START OF THE CURRENT C ITERATION. C V(NREDUC)... V(6), IF POSITIVE, IS THE MAXIMUM FUNCTION REDUCTION C POSSIBLE ACCORDING TO THE CURRENT MODEL, I.E., THE FUNC- C TION REDUCTION PREDICTED FOR A NEWTON STEP (I.E., C STEP = -H**-1 * G, WHERE G IS THE CURRENT GRADIENT AND C H IS THE CURRENT HESSIAN APPROXIMATION). C IF V(NREDUC) IS NEGATIVE, THEN IT IS THE NEGATIVE OF C THE FUNCTION REDUCTION PREDICTED FOR A STEP COMPUTED WITH C A STEP BOUND OF V(LMAXS) FOR _USE_ IN TESTING FOR SINGULAR C CONVERGENCE. C V(PREDUC)... V(7) IS THE FUNCTION REDUCTION PREDICTED (BY THE CURRENT C QUADRATIC MODEL) FOR THE CURRENT STEP. THIS (DIVIDED BY C V(F0)) IS USED IN TESTING FOR RELATIVE FUNCTION C CONVERGENCE. C V(RELDX).... V(17) IS THE SCALED RELATIVE CHANGE IN X CAUSED BY THE C CURRENT STEP, COMPUTED AS C MAX(ABS(D(I)*(X(I)-X0(I)), 1 .LE. I .LE. P) / C MAX(D(I)*(ABS(X(I))+ABS(X0(I))), 1 .LE. I .LE. P), C WHERE X = X0 + STEP. C C------------------------------- NOTES ------------------------------- C C *** ALGORITHM NOTES *** C C THIS ROUTINE USES A HESSIAN APPROXIMATION COMPUTED FROM THE C BFGS UPDATE (SEE REF 3). ONLY A CHOLESKY FACTOR OF THE HESSIAN C APPROXIMATION IS STORED, AND THIS IS UPDATED USING IDEAS FROM C REF. 4. STEPS ARE COMPUTED BY THE DOUBLE DOGLEG SCHEME DESCRIBED C IN REF. 2. THE STEPS ARE ASSESSED AS IN REF. 1. C C *** USAGE NOTES *** C C AFTER A RETURN WITH IV(1) .LE. 11, IT IS POSSIBLE TO RESTART, C I.E., TO CHANGE SOME OF THE IV AND V INPUT VALUES DESCRIBED ABOVE C AND CONTINUE THE ALGORITHM FROM THE POINT WHERE IT WAS INTERRUPT- C ED. IV(1) SHOULD NOT BE CHANGED, NOR SHOULD ANY ENTRIES OF IV C AND V OTHER THAN THE INPUT VALUES (THOSE SUPPLIED BY DIVSET). C THOSE WHO DO NOT WISH TO WRITE A CALCG WHICH COMPUTES THE C GRADIENT ANALYTICALLY SHOULD CALL DMNF RATHER THAN DMNG. C DMNF USES FINITE DIFFERENCES TO COMPUTE AN APPROXIMATE GRADIENT. C THOSE WHO WOULD PREFER TO PROVIDE F AND G (THE FUNCTION AND C GRADIENT) BY REVERSE COMMUNICATION RATHER THAN BY WRITING SUBROU- C TINES CALCF AND CALCG MAY CALL ON DRMNG DIRECTLY. SEE THE COM- C MENTS AT THE BEGINNING OF DRMNG. C THOSE WHO _USE_ DMNG INTERACTIVELY MAY WISH TO SUPPLY THEIR C OWN STOPX FUNCTION, WHICH SHOULD RETURN .TRUE. IF THE BREAK KEY C HAS BEEN PRESSED SINCE STOPX WAS LAST INVOKED. THIS MAKES IT C POSSIBLE TO EXTERNALLY INTERRUPT DMNG (WHICH WILL RETURN WITH C IV(1) = 11 IF STOPX RETURNS .TRUE.). C STORAGE FOR G IS ALLOCATED AT THE END OF V. THUS THE CALLER C MAY MAKE V LONGER THAN SPECIFIED ABOVE AND MAY ALLOW CALCG TO USE C ELEMENTS OF G BEYOND THE FIRST N AS SCRATCH STORAGE. C C *** PORTABILITY NOTES *** C C THE DMNG DISTRIBUTION TAPE CONTAINS BOTH SINGLE- AND DOUBLE- C PRECISION VERSIONS OF THE DMNG SOURCE CODE, SO IT SHOULD BE UN- C NECESSARY TO CHANGE PRECISIONS. C ONLY THE FUNCTIONS I7MDCN AND DR7MDC CONTAIN MACHINE-DEPENDENT C CONSTANTS. TO CHANGE FROM ONE MACHINE TO ANOTHER, IT SHOULD C SUFFICE TO CHANGE THE (FEW) RELEVANT LINES IN THESE FUNCTIONS. C INTRINSIC FUNCTIONS ARE EXPLICITLY DECLARED. ON CERTAIN COM- C PUTERS (E.G. UNIVAC), IT MAY BE NECESSARY TO COMMENT OUT THESE C DECLARATIONS. SO THAT THIS MAY BE DONE AUTOMATICALLY BY A SIMPLE C PROGRAM, SUCH DECLARATIONS ARE PRECEDED BY A COMMENT HAVING C/+ C IN COLUMNS 1-3 AND BLANKS IN COLUMNS 4-72 AND ARE FOLLOWED BY C A COMMENT HAVING C/ IN COLUMNS 1 AND 2 AND BLANKS IN COLUMNS 3-72. C THE DMNG SOURCE CODE IS EXPRESSED IN 1966 ANSI STANDARD C FORTRAN. IT MAY BE CONVERTED TO FORTRAN 77 BY COMMENTING OUT ALL C LINES THAT FALL BETWEEN A LINE HAVING C/6 IN COLUMNS 1-3 AND A C LINE HAVING C/7 IN COLUMNS 1-3 AND BY REMOVING (I.E., REPLACING C BY A BLANK) THE C IN COLUMN 1 OF THE LINES THAT FOLLOW THE C/7 C LINE AND PRECEDE A LINE HAVING C/ IN COLUMNS 1-2 AND BLANKS IN C COLUMNS 3-72. THESE CHANGES CONVERT SOME DATA STATEMENTS INTO C PARAMETER STATEMENTS, CONVERT SOME VARIABLES FROM REAL TO C CHARACTER*4, AND MAKE THE DATA STATEMENTS THAT INITIALIZE THESE C VARIABLES _USE_ CHARACTER STRINGS DELIMITED BY PRIMES INSTEAD C OF HOLLERITH CONSTANTS. (SUCH VARIABLES AND DATA STATEMENTS C APPEAR ONLY IN MODULES DITSUM AND DPARCK. PARAMETER STATEMENTS C APPEAR NEARLY EVERYWHERE.) THESE CHANGES ALSO ADD SAVE STATE- C MENTS FOR VARIABLES GIVEN MACHINE-DEPENDENT CONSTANTS BY DR7MDC. C C *** REFERENCES *** C C 1. DENNIS, J.E., GAY, D.M., AND WELSCH, R.E. (1981), ALGORITHM 573 -- C AN ADAPTIVE NONLINEAR LEAST-SQUARES ALGORITHM, ACM TRANS. C MATH. SOFTWARE 7, PP. 369-383. C C 2. DENNIS, J.E., AND MEI, H.H.W. (1979), TWO NEW UNCONSTRAINED OPTI- C MIZATION ALGORITHMS WHICH _USE_ FUNCTION AND GRADIENT C VALUES, J. OPTIM. THEORY APPLIC. 28, PP. 453-482. C C 3. DENNIS, J.E., AND MORE, J.J. (1977), QUASI-NEWTON METHODS, MOTIVA- C TION AND THEORY, SIAM REV. 19, PP. 46-89. C C 4. GOLDFARB, D. (1976), FACTORIZED VARIABLE METRIC METHODS FOR UNCON- C STRAINED OPTIMIZATION, MATH. COMPUT. 30, PP. 796-811. C C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER 1980). REVISED SUMMER 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER C GRANTS MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, C AND MCS-7906671. C. C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL DIVSET, DRMNG C C DIVSET... SUPPLIES DEFAULT IV AND V INPUT COMPONENTS. C DRMNG... REVERSE-COMMUNICATION ROUTINE THAT CARRIES OUT DMNG ALGO- C RITHM. C INTEGER G1, IV1, NF DOUBLE PRECISION F C C *** SUBSCRIPTS FOR IV *** C INTEGER NEXTV, NFCALL, NFGCAL, G, TOOBIG, VNEED C C/6 C DATA NEXTV/47/, NFCALL/6/, NFGCAL/7/, G/28/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (NEXTV=47, NFCALL=6, NFGCAL=7, G=28, TOOBIG=2, VNEED=4) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IF (IV(1) .EQ. 0) CALL DIVSET(2, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 12 .OR. IV1 .EQ. 13) IV(VNEED) = IV(VNEED) + N IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 G1 = 1 IF (IV1 .EQ. 12) IV(1) = 13 GO TO 20 C 10 G1 = IV(G) C 20 CALL DRMNG(D, F, V(G1), IV, LIV, LV, N, V, X) IF (IV(1) - 2) 30, 40, 50 C 30 NF = IV(NFCALL) CALL CALCF(N, X, NF, F, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 40 NF = IV(NFGCAL) CALL CALCG(N, X, NF, V(G1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 50 IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION C IV(G) = IV(NEXTV) IV(NEXTV) = IV(G) + N IF (IV1 .NE. 13) GO TO 10 C 999 RETURN C *** LAST CARD OF DMNG FOLLOWS *** END PyBDSF-1.10.1/src/port3/dmngb.f000066400000000000000000000045301420247104600157170ustar00rootroot00000000000000 SUBROUTINE DMNGB(N, D, X, B, CALCF, CALCG, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL SIMPLY BOUNDED OBJECTIVE FUNCTION USING *** C *** ANALYTIC GRADIENT AND HESSIAN APPROX. FROM SECANT UPDATE *** C INTEGER N, LIV, LV C/6S C INTEGER IV(LIV), UIPARM(1) C DOUBLE PRECISION D(N), X(N), B(2,N), V(LV), URPARM(1) C/7S INTEGER IV(LIV), UIPARM(*) DOUBLE PRECISION D(N), X(N), B(2,N), V(LV), URPARM(*) C/ C DIMENSION IV(59 + N), V(71 + N*(N+21)/2), UIPARM(*), URPARM(*) EXTERNAL CALCF, CALCG, UFPARM C C *** DISCUSSION *** C C THIS ROUTINE IS LIKE DMNG, EXCEPT FOR THE EXTRA PARAMETER B, C AN ARRAY OF LOWER AND UPPER BOUNDS ON X... DMNGB ENFORCES THE C CONSTRAINTS THAT B(1,I) .LE. X(I) .LE. B(2,I), I = 1(1)N. C (INSTEAD OF CALLING DRMNG, DMNGB CALLS DRMNGB.) C. C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL DIVSET, DRMNGB C C DIVSET.... SUPPLIES DEFAULT IV AND V INPUT COMPONENTS. C DRMNGB... REVERSE-COMMUNICATION ROUTINE THAT CARRIES OUT DMNG ALGO- C RITHM. C INTEGER G1, IV1, NF DOUBLE PRECISION F C C *** SUBSCRIPTS FOR IV *** C INTEGER NEXTV, NFCALL, NFGCAL, G, TOOBIG, VNEED C C/6 C DATA NEXTV/47/, NFCALL/6/, NFGCAL/7/, G/28/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (NEXTV=47, NFCALL=6, NFGCAL=7, G=28, TOOBIG=2, VNEED=4) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IF (IV(1) .EQ. 0) CALL DIVSET(2, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + N CALL DRMNGB(B, D, F, V, IV, LIV, LV, N, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION C IV(G) = IV(NEXTV) IV(NEXTV) = IV(G) + N IF (IV1 .EQ. 13) GO TO 999 C 10 G1 = IV(G) C 20 CALL DRMNGB(B, D, F, V(G1), IV, LIV, LV, N, V, X) IF (IV(1) - 2) 30, 40, 999 C 30 NF = IV(NFCALL) CALL CALCF(N, X, NF, F, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 40 NF = IV(NFGCAL) CALL CALCG(N, X, NF, V(G1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 999 RETURN C *** LAST CARD OF DMNGB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dmnh.f000066400000000000000000000132011420247104600155510ustar00rootroot00000000000000 SUBROUTINE DMNH(N, D, X, CALCF, CALCGH, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING *** C *** (ANALYTIC) GRADIENT AND HESSIAN PROVIDED BY THE CALLER. *** C INTEGER LIV, LV, N INTEGER IV(LIV), UIPARM(1) DOUBLE PRECISION D(N), X(N), V(LV), URPARM(1) C DIMENSION V(78 + N*(N+12)), UIPARM(*), URPARM(*) EXTERNAL CALCF, CALCGH, UFPARM C C------------------------------ DISCUSSION --------------------------- C C THIS ROUTINE IS LIKE DMNG, EXCEPT THAT THE SUBROUTINE PARA- C METER CALCG OF DMNG (WHICH COMPUTES THE GRADIENT OF THE OBJEC- C TIVE FUNCTION) IS REPLACED BY THE SUBROUTINE PARAMETER CALCGH, C WHICH COMPUTES BOTH THE GRADIENT AND (LOWER TRIANGLE OF THE) C HESSIAN OF THE OBJECTIVE FUNCTION. THE CALLING SEQUENCE IS... C CALL CALCGH(N, X, NF, G, H, UIPARM, URPARM, UFPARM) C PARAMETERS N, X, NF, G, UIPARM, URPARM, AND UFPARM ARE THE SAME C AS FOR DMNG, WHILE H IS AN ARRAY OF LENGTH N*(N+1)/2 IN WHICH C CALCGH MUST STORE THE LOWER TRIANGLE OF THE HESSIAN AT X. START- C ING AT H(1), CALCGH MUST STORE THE HESSIAN ENTRIES IN THE ORDER C (1,1), (2,1), (2,2), (3,1), (3,2), (3,3), ... C THE VALUE PRINTED (BY DITSUM) IN THE COLUMN LABELLED STPPAR C IS THE LEVENBERG-MARQUARDT USED IN COMPUTING THE CURRENT STEP. C ZERO MEANS A FULL NEWTON STEP. IF THE SPECIAL CASE DESCRIBED IN C REF. 1 IS DETECTED, THEN STPPAR IS NEGATED. THE VALUE PRINTED C IN THE COLUMN LABELLED NPRELDF IS ZERO IF THE CURRENT HESSIAN C IS NOT POSITIVE DEFINITE. C IT SOMETIMES PROVES WORTHWHILE TO LET D BE DETERMINED FROM THE C DIAGONAL OF THE HESSIAN MATRIX BY SETTING IV(DTYPE) = 1 AND C V(DINIT) = 0. THE FOLLOWING IV AND V COMPONENTS ARE RELEVANT... C C IV(DTOL)..... IV(59) GIVES THE STARTING SUBSCRIPT IN V OF THE DTOL C ARRAY USED WHEN D IS UPDATED. (IV(DTOL) CAN BE C INITIALIZED BY CALLING DMNH WITH IV(1) = 13.) C IV(DTYPE).... IV(16) TELLS HOW THE SCALE VECTOR D SHOULD BE CHOSEN. C IV(DTYPE) .LE. 0 MEANS THAT D SHOULD NOT BE UPDATED, AND C IV(DTYPE) .GE. 1 MEANS THAT D SHOULD BE UPDATED AS C DESCRIBED BELOW WITH V(DFAC). DEFAULT = 0. C V(DFAC)..... V(41) AND THE DTOL AND D0 ARRAYS (SEE V(DTINIT) AND C V(D0INIT)) ARE USED IN UPDATING THE SCALE VECTOR D WHEN C IV(DTYPE) .GT. 0. (D IS INITIALIZED ACCORDING TO C V(DINIT), DESCRIBED IN DMNG.) LET C D1(I) = MAX(SQRT(ABS(H(I,I))), V(DFAC)*D(I)), C WHERE H(I,I) IS THE I-TH DIAGONAL ELEMENT OF THE CURRENT C HESSIAN. IF IV(DTYPE) = 1, THEN D(I) IS SET TO D1(I) C UNLESS D1(I) .LT. DTOL(I), IN WHICH CASE D(I) IS SET TO C MAX(D0(I), DTOL(I)). C IF IV(DTYPE) .GE. 2, THEN D IS UPDATED DURING THE FIRST C ITERATION AS FOR IV(DTYPE) = 1 (AFTER ANY INITIALIZATION C DUE TO V(DINIT)) AND IS LEFT UNCHANGED THEREAFTER. C DEFAULT = 0.6. C V(DTINIT)... V(39), IF POSITIVE, IS THE VALUE TO WHICH ALL COMPONENTS C OF THE DTOL ARRAY (SEE V(DFAC)) ARE INITIALIZED. IF C V(DTINIT) = 0, THEN IT IS ASSUMED THAT THE CALLER HAS C STORED DTOL IN V STARTING AT V(IV(DTOL)). C DEFAULT = 10**-6. C V(D0INIT)... V(40), IF POSITIVE, IS THE VALUE TO WHICH ALL COMPONENTS C OF THE D0 VECTOR (SEE V(DFAC)) ARE INITIALIZED. IF C V(DFAC) = 0, THEN IT IS ASSUMED THAT THE CALLER HAS C STORED D0 IN V STARTING AT V(IV(DTOL)+N). DEFAULT = 1.0. C C *** REFERENCE *** C C 1. GAY, D.M. (1981), COMPUTING OPTIMAL LOCALLY CONSTRAINED STEPS, C SIAM J. SCI. STATIST. COMPUT. 2, PP. 186-197. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER 1980). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324 AND MCS-7906671. C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL DIVSET, DRMNH C C DIVSET... PROVIDES DEFAULT INPUT VALUES FOR IV AND V. C DRMNH... REVERSE-COMMUNICATION ROUTINE THAT DOES DMNH ALGORITHM. C INTEGER G1, H1, IV1, LH, NF DOUBLE PRECISION F C C *** SUBSCRIPTS FOR IV *** C INTEGER G, H, NEXTV, NFCALL, NFGCAL, TOOBIG, VNEED C C/6 C DATA NEXTV/47/, NFCALL/6/, NFGCAL/7/, G/28/, H/56/, TOOBIG/2/, C 1 VNEED/4/ C/7 PARAMETER (NEXTV=47, NFCALL=6, NFGCAL=7, G=28, H=56, TOOBIG=2, 1 VNEED=4) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C LH = N * (N + 1) / 2 IF (IV(1) .EQ. 0) CALL DIVSET(2, IV, LIV, LV, V) IF (IV(1) .EQ. 12 .OR. IV(1) .EQ. 13) 1 IV(VNEED) = IV(VNEED) + N*(N+3)/2 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 G1 = 1 H1 = 1 IF (IV1 .EQ. 12) IV(1) = 13 GO TO 20 C 10 G1 = IV(G) H1 = IV(H) C 20 CALL DRMNH(D, F, V(G1), V(H1), IV, LH, LIV, LV, N, V, X) IF (IV(1) - 2) 30, 40, 50 C 30 NF = IV(NFCALL) CALL CALCF(N, X, NF, F, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 40 NF = IV(NFGCAL) CALL CALCGH(N, X, NF, V(G1), V(H1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 50 IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION C IV(G) = IV(NEXTV) IV(H) = IV(G) + N IV(NEXTV) = IV(H) + N*(N+1)/2 IF (IV1 .NE. 13) GO TO 10 C 999 RETURN C *** LAST CARD OF DMNH FOLLOWS *** END PyBDSF-1.10.1/src/port3/dmnhb.f000066400000000000000000000130741420247104600157230ustar00rootroot00000000000000 SUBROUTINE DMNHB(N, D, X, B, CALCF, CALCGH, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL SIMPLY BOUNDED OBJECTIVE FUNCTION USING *** C *** (ANALYTIC) GRADIENT AND HESSIAN PROVIDED BY THE CALLER. *** C INTEGER LIV, LV, N C/6S C INTEGER IV(LIV), UIPARM(1) C DOUBLE PRECISION B(2,N), D(N), X(N), V(LV), URPARM(1) C/7S INTEGER IV(LIV), UIPARM(*) DOUBLE PRECISION B(2,N), D(N), X(N), V(LV), URPARM(*) C/ C DIMENSION IV(59 + 3*N), V(78 + N*(N+15)) EXTERNAL CALCF, CALCGH, UFPARM C C------------------------------ DISCUSSION --------------------------- C C THIS ROUTINE IS LIKE DMNGB, EXCEPT THAT THE SUBROUTINE PARA- C METER CALCG OF DMNGB (WHICH COMPUTES THE GRADIENT OF THE OBJEC- C TIVE FUNCTION) IS REPLACED BY THE SUBROUTINE PARAMETER CALCGH, C WHICH COMPUTES BOTH THE GRADIENT AND (LOWER TRIANGLE OF THE) C HESSIAN OF THE OBJECTIVE FUNCTION. THE CALLING SEQUENCE IS... C CALL CALCGH(N, X, NF, G, H, UIPARM, URPARM, UFPARM) C PARAMETERS N, X, NF, G, UIPARM, URPARM, AND UFPARM ARE THE SAME C AS FOR DMNGB, WHILE H IS AN ARRAY OF LENGTH N*(N+1)/2 IN WHICH C CALCGH MUST STORE THE LOWER TRIANGLE OF THE HESSIAN AT X. START- C ING AT H(1), CALCGH MUST STORE THE HESSIAN ENTRIES IN THE ORDER C (1,1), (2,1), (2,2), (3,1), (3,2), (3,3), ... C THE VALUE PRINTED (BY DITSUM) IN THE COLUMN LABELLED STPPAR C IS THE LEVENBERG-MARQUARDT USED IN COMPUTING THE CURRENT STEP. C ZERO MEANS A FULL NEWTON STEP. IF THE SPECIAL CASE DESCRIBED IN C REF. 1 IS DETECTED, THEN STPPAR IS NEGATED. THE VALUE PRINTED C IN THE COLUMN LABELLED NPRELDF IS ZERO IF THE CURRENT HESSIAN C IS NOT POSITIVE DEFINITE. C IT SOMETIMES PROVES WORTHWHILE TO LET D BE DETERMINED FROM THE C DIAGONAL OF THE HESSIAN MATRIX BY SETTING IV(DTYPE) = 1 AND C V(DINIT) = 0. THE FOLLOWING IV AND V COMPONENTS ARE RELEVANT... C C IV(DTOL)..... IV(59) GIVES THE STARTING SUBSCRIPT IN V OF THE DTOL C ARRAY USED WHEN D IS UPDATED. (IV(DTOL) CAN BE C INITIALIZED BY CALLING DMNHB WITH IV(1) = 13.) C IV(DTYPE).... IV(16) TELLS HOW THE SCALE VECTOR D SHOULD BE CHOSEN. C IV(DTYPE) .LE. 0 MEANS THAT D SHOULD NOT BE UPDATED, AND C IV(DTYPE) .GE. 1 MEANS THAT D SHOULD BE UPDATED AS C DESCRIBED BELOW WITH V(DFAC). DEFAULT = 0. C V(DFAC)..... V(41) AND THE DTOL AND D0 ARRAYS (SEE V(DTINIT) AND C V(D0INIT)) ARE USED IN UPDATING THE SCALE VECTOR D WHEN C IV(DTYPE) .GT. 0. (D IS INITIALIZED ACCORDING TO C V(DINIT), DESCRIBED IN DMNG.) LET C D1(I) = MAX(SQRT(ABS(H(I,I))), V(DFAC)*D(I)), C WHERE H(I,I) IS THE I-TH DIAGONAL ELEMENT OF THE CURRENT C HESSIAN. IF IV(DTYPE) = 1, THEN D(I) IS SET TO D1(I) C UNLESS D1(I) .LT. DTOL(I), IN WHICH CASE D(I) IS SET TO C MAX(D0(I), DTOL(I)). C IF IV(DTYPE) .GE. 2, THEN D IS UPDATED DURING THE FIRST C ITERATION AS FOR IV(DTYPE) = 1 (AFTER ANY INITIALIZATION C DUE TO V(DINIT)) AND IS LEFT UNCHANGED THEREAFTER. C DEFAULT = 0.6. C V(DTINIT)... V(39), IF POSITIVE, IS THE VALUE TO WHICH ALL COMPONENTS C OF THE DTOL ARRAY (SEE V(DFAC)) ARE INITIALIZED. IF C V(DTINIT) = 0, THEN IT IS ASSUMED THAT THE CALLER HAS C STORED DTOL IN V STARTING AT V(IV(DTOL)). C DEFAULT = 10**-6. C V(D0INIT)... V(40), IF POSITIVE, IS THE VALUE TO WHICH ALL COMPONENTS C OF THE D0 VECTOR (SEE V(DFAC)) ARE INITIALIZED. IF C V(DFAC) = 0, THEN IT IS ASSUMED THAT THE CALLER HAS C STORED D0 IN V STARTING AT V(IV(DTOL)+N). DEFAULT = 1.0. C C *** REFERENCE *** C C 1. GAY, D.M. (1981), COMPUTING OPTIMAL LOCALLY CONSTRAINED STEPS, C SIAM J. SCI. STATIST. COMPUT. 2, PP. 186-197. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER, SPRING 1983). C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL DIVSET, DRMNHB C C DIVSET.... PROVIDES DEFAULT INPUT VALUES FOR IV AND V. C DRMNHB... REVERSE-COMMUNICATION ROUTINE THAT DOES DMNHB ALGORITHM. C INTEGER G1, H1, IV1, LH, NF DOUBLE PRECISION F C C *** SUBSCRIPTS FOR IV *** C INTEGER G, H, NEXTV, NFCALL, NFGCAL, TOOBIG, VNEED C C/6 C DATA NEXTV/47/, NFCALL/6/, NFGCAL/7/, G/28/, H/56/, TOOBIG/2/, C 1 VNEED/4/ C/7 PARAMETER (NEXTV=47, NFCALL=6, NFGCAL=7, G=28, H=56, TOOBIG=2, 1 VNEED=4) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C LH = N * (N + 1) / 2 IF (IV(1) .EQ. 0) CALL DIVSET(2, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + N*(N+3)/2 CALL DRMNHB(B, D, F, V, V, IV, LH, LIV, LV, N, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION C IV(G) = IV(NEXTV) IV(H) = IV(G) + N IV(NEXTV) = IV(H) + N*(N+1)/2 IF (IV1 .EQ. 13) GO TO 999 C 10 G1 = IV(G) H1 = IV(H) C 20 CALL DRMNHB(B, D, F, V(G1), V(H1), IV, LH, LIV, LV, N, V, X) IF (IV(1) - 2) 30, 40, 999 C 30 NF = IV(NFCALL) CALL CALCF(N, X, NF, F, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 40 NF = IV(NFGCAL) CALL CALCGH(N, X, NF, V(G1), V(H1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 999 RETURN C *** LAST CARD OF DMNHB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dn2cvp.f000066400000000000000000000050161420247104600160240ustar00rootroot00000000000000 SUBROUTINE DN2CVP(IV, LIV, LV, P, V) C C *** PRINT COVARIANCE MATRIX FOR DRN2G *** C INTEGER LIV, LV, P INTEGER IV(LIV) DOUBLE PRECISION V(LV) C C *** LOCAL VARIABLES *** C INTEGER COV1, I, II, I1, J, PU DOUBLE PRECISION T C C *** IV SUBSCRIPTS *** C INTEGER COVMAT, COVPRT, COVREQ, NEEDHD, NFCOV, NGCOV, PRUNIT, 1 RCOND, REGD, STATPR C C/6 C DATA COVMAT/26/, COVPRT/14/, COVREQ/15/, NEEDHD/36/, NFCOV/52/, C 1 NGCOV/53/, PRUNIT/21/, RCOND/53/, REGD/67/, STATPR/23/ C/7 PARAMETER (COVMAT=26, COVPRT=14, COVREQ=15, NEEDHD=36, NFCOV=52, 1 NGCOV=53, PRUNIT=21, RCOND=53, REGD=67, STATPR=23) C/ C *** BODY *** C IF (IV(1) .GT. 8) GO TO 999 PU = IV(PRUNIT) IF (PU .EQ. 0) GO TO 999 IF (IV(STATPR) .EQ. 0) GO TO 30 IF (IV(NFCOV) .GT. 0) WRITE(PU,10) IV(NFCOV) 10 FORMAT(/1X,I4,50H EXTRA FUNC. EVALS FOR COVARIANCE AND DIAGNOST 1ICS.) IF (IV(NGCOV) .GT. 0) WRITE(PU,20) IV(NGCOV) 20 FORMAT(1X,I4,50H EXTRA GRAD. EVALS FOR COVARIANCE AND DIAGNOSTI 1CS.) C 30 IF (IV(COVPRT) .LE. 0) GO TO 999 COV1 = IV(COVMAT) IF (IV(REGD) .LE. 0 .AND. COV1 .LE. 0) GO TO 70 IV(NEEDHD) = 1 T = V(RCOND)**2 IF (IABS(IV(COVREQ)) .GT. 2) GO TO 50 C WRITE(PU,40) T 40 FORMAT(/47H RECIPROCAL CONDITION OF F.D. HESSIAN = AT MOST,D10.2) GO TO 70 C 50 WRITE(PU,60) T 60 FORMAT(/44H RECIPROCAL CONDITION OF (J**T)*J = AT LEAST,D10.2) C 70 IF (MOD(IV(COVPRT),2) .EQ. 0) GO TO 999 IV(NEEDHD) = 1 IF (COV1) 80,110,130 80 IF (-1 .EQ. COV1) WRITE(PU,90) 90 FORMAT(/43H ++++++ INDEFINITE COVARIANCE MATRIX ++++++) IF (-2 .EQ. COV1) WRITE(PU,100) 100 FORMAT(/52H ++++++ OVERSIZE STEPS IN COMPUTING COVARIANCE +++++) GO TO 999 C 110 WRITE(PU,120) 120 FORMAT(/45H ++++++ COVARIANCE MATRIX NOT COMPUTED ++++++) GO TO 999 C 130 I = IABS(IV(COVREQ)) IF (I .LE. 1) WRITE(PU,140) 140 FORMAT(/48H COVARIANCE = SCALE * H**-1 * (J**T * J) * H**-1/ 1 23H WHERE H = F.D. HESSIAN/) IF (I .EQ. 2) WRITE(PU,150) 150 FORMAT(/56H COVARIANCE = H**-1, WHERE H = FINITE-DIFFERENCE HESSIA 1N/) IF (I .GT. 2) WRITE(PU,160) 160 FORMAT(/30H COVARIANCE = SCALE * J**T * J/) II = COV1 - 1 DO 170 I = 1, P I1 = II + 1 II = II + I WRITE(PU,180) I, (V(J), J = I1, II) 170 CONTINUE 180 FORMAT(4H ROW,I3,2X,5D12.3/(9X,5D12.3)) C 999 RETURN C *** LAST CARD OF DN2CVP FOLLOWS *** END PyBDSF-1.10.1/src/port3/dn2f.f000066400000000000000000000132251420247104600154620ustar00rootroot00000000000000 SUBROUTINE DN2F(N, P, X, CALCR, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE A NONLINEAR SUM OF SQUARES USING RESIDUAL VALUES ONLY.. C *** THIS AMOUNTS TO DN2G WITHOUT THE SUBROUTINE PARAMETER CALCJ. C C *** PARAMETERS *** C INTEGER N, P, LIV, LV C/6 C INTEGER IV(LIV), UIPARM(1) C DOUBLE PRECISION X(P), V(LV), URPARM(1) C/7 INTEGER IV(LIV), UIPARM(*) DOUBLE PRECISION X(P), V(LV), URPARM(*) C/ EXTERNAL CALCR, UFPARM C C----------------------------- DISCUSSION ---------------------------- C C THIS AMOUNTS TO SUBROUTINE NL2SNO (REF. 1) MODIFIED TO CALL C DRN2G. C THE PARAMETERS FOR DN2F ARE THE SAME AS THOSE FOR DN2G C (WHICH SEE), EXCEPT THAT CALCJ IS OMITTED. INSTEAD OF CALLING C CALCJ TO OBTAIN THE JACOBIAN MATRIX OF R AT X, DN2F COMPUTES C AN APPROXIMATION TO IT BY FINITE (FORWARD) DIFFERENCES -- SEE C V(DLTFDJ) BELOW. DN2F USES FUNCTION VALUES ONLY WHEN COMPUT- C THE COVARIANCE MATRIX (RATHER THAN THE FUNCTIONS AND GRADIENTS C THAT DN2G MAY USE). TO DO SO, DN2F SETS IV(COVREQ) TO MINUS C ITS ABSOLUTE VALUE. THUS V(DELTA0) IS NEVER REFERENCED AND ONLY C V(DLTFDC) MATTERS -- SEE NL2SOL FOR A DESCRIPTION OF V(DLTFDC). C THE NUMBER OF EXTRA CALLS ON CALCR USED IN COMPUTING THE JACO- C BIAN APPROXIMATION ARE NOT INCLUDED IN THE FUNCTION EVALUATION C COUNT IV(NFCALL), BUT ARE RECORDED IN IV(NGCALL) INSTEAD. C C V(DLTFDJ)... V(43) HELPS CHOOSE THE STEP SIZE USED WHEN COMPUTING THE C FINITE-DIFFERENCE JACOBIAN MATRIX. FOR DIFFERENCES IN- C VOLVING X(I), THE STEP SIZE FIRST TRIED IS C V(DLTFDJ) * MAX(ABS(X(I)), 1/D(I)), C WHERE D IS THE CURRENT SCALE VECTOR (SEE REF. 1). (IF C THIS STEP IS TOO BIG, I.E., IF CALCR SETS NF TO 0, THEN C SMALLER STEPS ARE TRIED UNTIL THE STEP SIZE IS SHRUNK BE- C LOW 1000 * MACHEP, WHERE MACHEP IS THE UNIT ROUNDOFF. C DEFAULT = MACHEP**0.5. C C *** REFERENCE *** C C 1. DENNIS, J.E., GAY, D.M., AND WELSCH, R.E. (1981), AN ADAPTIVE C NONLINEAR LEAST-SQUARES ALGORITHM, ACM TRANS. MATH. C SOFTWARE, VOL. 7, NO. 3. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C+++++++++++++++++++++++++++ DECLARATIONS +++++++++++++++++++++++++++ C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DIVSET, DRN2G, DN2RDP, DV7SCP C C DIVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C DRN2G... CARRIES OUT OPTIMIZATION ITERATIONS. C DN2RDP... PRINTS REGRESSION DIAGNOSTICS. C DV7SCP... SETS ALL COMPONENTS OF A VECTOR TO A SCALAR. C C *** LOCAL VARIABLES *** C INTEGER D1, DK, DR1, I, IV1, J1K, K, N1, N2, NF, NG, RD1, R1, RN DOUBLE PRECISION H, H0, HLIM, NEGPT5, ONE, XK, ZERO C C *** IV AND V COMPONENTS *** C INTEGER COVREQ, D, DINIT, DLTFDJ, J, MODE, NEXTV, NFCALL, NFGCAL, 1 NGCALL, NGCOV, R, REGD, REGD0, TOOBIG, VNEED C/6 C DATA COVREQ/15/, D/27/, DINIT/38/, DLTFDJ/43/, J/70/, MODE/35/, C 1 NEXTV/47/, NFCALL/6/, NFGCAL/7/, NGCALL/30/, NGCOV/53/, C 2 R/61/, REGD/67/, REGD0/82/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (COVREQ=15, D=27, DINIT=38, DLTFDJ=43, J=70, MODE=35, 1 NEXTV=47, NFCALL=6, NFGCAL=7, NGCALL=30, NGCOV=53, 2 R=61, REGD=67, REGD0=82, TOOBIG=2, VNEED=4) C/ DATA HLIM/0.1D+0/, NEGPT5/-0.5D+0/, ONE/1.D+0/, ZERO/0.D+0/ C C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) IV(COVREQ) = -IABS(IV(COVREQ)) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + P + N*(P+2) CALL DRN2G(X, V, IV, LIV, LV, N, N, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P IV(REGD0) = IV(R) + N IV(J) = IV(REGD0) + N IV(NEXTV) = IV(J) + N*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RN = R1 + N - 1 RD1 = IV(REGD0) C 20 CALL DRN2G(V(D1), V(DR1), IV, LIV, LV, N, N, N1, N2, P, V(R1), 1 V(RD1), V, X) IF (IV(1)-2) 30, 50, 100 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 30 NF = IV(NFCALL) CALL CALCR(N, P, X, NF, V(R1), UIPARM, URPARM, UFPARM) IF (NF .GT. 0) GO TO 40 IV(TOOBIG) = 1 GO TO 20 40 IF (IV(1) .GT. 0) GO TO 20 C C *** COMPUTE FINITE-DIFFERENCE APPROXIMATION TO DR = GRAD. OF R *** C C *** INITIALIZE D IF NECESSARY *** C 50 IF (IV(MODE) .LT. 0 .AND. V(DINIT) .EQ. ZERO) 1 CALL DV7SCP(P, V(D1), ONE) C J1K = DR1 DK = D1 NG = IV(NGCALL) - 1 IF (IV(1) .EQ. (-1)) IV(NGCOV) = IV(NGCOV) - 1 DO 90 K = 1, P XK = X(K) H = V(DLTFDJ) * DMAX1(DABS(XK), ONE/V(DK)) H0 = H DK = DK + 1 60 X(K) = XK + H NF = IV(NFGCAL) CALL CALCR (N, P, X, NF, V(J1K), UIPARM, URPARM, UFPARM) NG = NG + 1 IF (NF .GT. 0) GO TO 70 H = NEGPT5 * H IF (DABS(H/H0) .GE. HLIM) GO TO 60 IV(TOOBIG) = 1 IV(NGCALL) = NG GO TO 20 70 X(K) = XK IV(NGCALL) = NG DO 80 I = R1, RN V(J1K) = (V(J1K) - V(I)) / H J1K = J1K + 1 80 CONTINUE 90 CONTINUE GO TO 20 C 100 IF (IV(REGD) .GT. 0) IV(REGD) = RD1 CALL DN2RDP(IV, LIV, LV, N, V(RD1), V) C 999 RETURN C C *** LAST LINE OF DN2F FOLLOWS *** END PyBDSF-1.10.1/src/port3/dn2fb.f000066400000000000000000000134031420247104600156220ustar00rootroot00000000000000 SUBROUTINE DN2FB(N, P, X, B, CALCR, IV, LIV, LV, V, UI, UR, UF) C C *** MINIMIZE A NONLINEAR SUM OF SQUARES USING RESIDUAL VALUES ONLY.. C *** THIS AMOUNTS TO DN2G WITHOUT THE SUBROUTINE PARAMETER CALCJ. C C *** PARAMETERS *** C INTEGER N, P, LIV, LV C/6 C INTEGER IV(LIV), UI(1) C DOUBLE PRECISION X(P), B(2,P), V(LV), UR(1) C/7 INTEGER IV(LIV), UI(*) DOUBLE PRECISION X(P), B(2,P), V(LV), UR(*) C/ EXTERNAL CALCR, UF C C----------------------------- DISCUSSION ---------------------------- C C THIS AMOUNTS TO SUBROUTINE NL2SNO (REF. 1) MODIFIED TO HANDLE C SIMPLE BOUNDS ON THE VARIABLES... C B(1,I) .LE. X(I) .LE. B(2,I), I = 1(1)P. C THE PARAMETERS FOR DN2FB ARE THE SAME AS THOSE FOR DN2GB C (WHICH SEE), EXCEPT THAT CALCJ IS OMITTED. INSTEAD OF CALLING C CALCJ TO OBTAIN THE JACOBIAN MATRIX OF R AT X, DN2FB COMPUTES C AN APPROXIMATION TO IT BY FINITE (FORWARD) DIFFERENCES -- SEE C V(DLTFDJ) BELOW. DN2FB DOES NOT COMPUTE A COVARIANCE MATRIX. C THE NUMBER OF EXTRA CALLS ON CALCR USED IN COMPUTING THE JACO- C BIAN APPROXIMATION ARE NOT INCLUDED IN THE FUNCTION EVALUATION C COUNT IV(NFCALL), BUT ARE RECORDED IN IV(NGCALL) INSTEAD. C C V(DLTFDJ)... V(43) HELPS CHOOSE THE STEP SIZE USED WHEN COMPUTING THE C FINITE-DIFFERENCE JACOBIAN MATRIX. FOR DIFFERENCES IN- C VOLVING X(I), THE STEP SIZE FIRST TRIED IS C V(DLTFDJ) * MAX(ABS(X(I)), 1/D(I)), C WHERE D IS THE CURRENT SCALE VECTOR (SEE REF. 1). (IF C THIS STEP IS TOO BIG, I.E., IF CALCR SETS NF TO 0, THEN C SMALLER STEPS ARE TRIED UNTIL THE STEP SIZE IS SHRUNK BE- C LOW 1000 * MACHEP, WHERE MACHEP IS THE UNIT ROUNDOFF. C DEFAULT = MACHEP**0.5. C C *** REFERENCE *** C C 1. DENNIS, J.E., GAY, D.M., AND WELSCH, R.E. (1981), AN ADAPTIVE C NONLINEAR LEAST-SQUARES ALGORITHM, ACM TRANS. MATH. C SOFTWARE, VOL. 7, NO. 3. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C+++++++++++++++++++++++++++ DECLARATIONS +++++++++++++++++++++++++++ C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DIVSET, DRN2GB, DV7SCP C C DIVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C DRN2GB... CARRIES OUT OPTIMIZATION ITERATIONS. C DN2RDP... PRINTS REGRESSION DIAGNOSTICS. C DV7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C C *** LOCAL VARIABLES *** C INTEGER D1, DK, DR1, I, IV1, J1K, K, N1, N2, NF, NG, RD1, R1, RN DOUBLE PRECISION H, H0, HLIM, NEGPT5, ONE, T, XK, XK1, ZERO C C *** IV AND V COMPONENTS *** C INTEGER COVREQ, D, DINIT, DLTFDJ, J, MODE, NEXTV, NFCALL, NFGCAL, 1 NGCALL, NGCOV, R, REGD0, TOOBIG, VNEED C/6 C DATA COVREQ/15/, D/27/, DINIT/38/, DLTFDJ/43/, J/70/, MODE/35/, C 1 NEXTV/47/, NFCALL/6/, NFGCAL/7/, NGCALL/30/, NGCOV/53/, C 2 R/61/, REGD0/82/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (COVREQ=15, D=27, DINIT=38, DLTFDJ=43, J=70, MODE=35, 1 NEXTV=47, NFCALL=6, NFGCAL=7, NGCALL=30, NGCOV=53, 2 R=61, REGD0=82, TOOBIG=2, VNEED=4) C/ DATA HLIM/0.1D+0/, NEGPT5/-0.5D+0/, ONE/1.D+0/, ZERO/0.D+0/ C C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) IV(COVREQ) = 0 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + P + N*(P+2) CALL DRN2GB(B, X, V, IV, LIV, LV, N, N, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P IV(REGD0) = IV(R) + N IV(J) = IV(REGD0) + N IV(NEXTV) = IV(J) + N*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RN = R1 + N - 1 RD1 = IV(REGD0) C 20 CALL DRN2GB(B, V(D1), V(DR1), IV, LIV, LV, N, N, N1, N2, P, V(R1), 1 V(RD1), V, X) IF (IV(1)-2) 30, 50, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 30 NF = IV(NFCALL) CALL CALCR(N, P, X, NF, V(R1), UI, UR, UF) IF (NF .GT. 0) GO TO 40 IV(TOOBIG) = 1 GO TO 20 40 IF (IV(1) .GT. 0) GO TO 20 C C *** COMPUTE FINITE-DIFFERENCE APPROXIMATION TO DR = GRAD. OF R *** C C *** INITIALIZE D IF NECESSARY *** C 50 IF (IV(MODE) .LT. 0 .AND. V(DINIT) .EQ. ZERO) 1 CALL DV7SCP(P, V(D1), ONE) C J1K = DR1 DK = D1 NG = IV(NGCALL) - 1 IF (IV(1) .EQ. (-1)) IV(NGCOV) = IV(NGCOV) - 1 DO 120 K = 1, P IF (B(1,K) .GE. B(2,K)) GO TO 110 XK = X(K) H = V(DLTFDJ) * DMAX1(DABS(XK), ONE/V(DK)) H0 = H DK = DK + 1 T = NEGPT5 XK1 = XK + H IF (XK - H .GE. B(1,K)) GO TO 60 T = -T IF (XK1 .GT. B(2,K)) GO TO 80 60 IF (XK1 .LE. B(2,K)) GO TO 70 T = -T H = -H XK1 = XK + H IF (XK1 .LT. B(1,K)) GO TO 80 70 X(K) = XK1 NF = IV(NFGCAL) CALL CALCR (N, P, X, NF, V(J1K), UI, UR, UF) NG = NG + 1 IF (NF .GT. 0) GO TO 90 H = T * H XK1 = XK + H IF (DABS(H/H0) .GE. HLIM) GO TO 70 80 IV(TOOBIG) = 1 IV(NGCALL) = NG GO TO 20 90 X(K) = XK IV(NGCALL) = NG DO 100 I = R1, RN V(J1K) = (V(J1K) - V(I)) / H J1K = J1K + 1 100 CONTINUE GO TO 120 C *** SUPPLY A ZERO DERIVATIVE FOR CONSTANT COMPONENTS... 110 CALL DV7SCP(N, V(J1K), ZERO) J1K = J1K + N 120 CONTINUE GO TO 20 C 999 RETURN C C *** LAST CARD OF DN2FB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dn2g.f000066400000000000000000000173201420247104600154630ustar00rootroot00000000000000 SUBROUTINE DN2G(N, P, X, CALCR, CALCJ, IV, LIV, LV, V, 1 UI, UR, UF) C C *** VERSION OF NL2SOL THAT CALLS DRN2G *** C C *** PARAMETERS *** C INTEGER N, P, LIV, LV C/6 C INTEGER IV(LIV), UI(1) C DOUBLE PRECISION X(P), V(LV), UR(1) C/7 INTEGER IV(LIV), UI(*) DOUBLE PRECISION X(P), V(LV), UR(*) C/ EXTERNAL CALCR, CALCJ, UF C C *** PARAMETER USAGE *** C C N....... TOTAL NUMBER OF RESIDUALS. C P....... NUMBER OF PARAMETERS (COMPONENTS OF X) BEING ESTIMATED. C X....... PARAMETER VECTOR BEING ESTIMATED (INPUT = INITIAL GUESS, C OUTPUT = BEST VALUE FOUND). C CALCR... SUBROUTINE FOR COMPUTING RESIDUAL VECTOR. C CALCJ... SUBROUTINE FOR COMPUTING JACOBIAN MATRIX = MATRIX OF FIRST C PARTIALS OF THE RESIDUAL VECTOR. C IV...... INTEGER VALUES ARRAY. C LIV..... LENGTH OF IV (SEE DISCUSSION BELOW). C LV...... LENGTH OF V (SEE DISCUSSION BELOW). C V....... FLOATING-POINT VALUES ARRAY. C UI...... PASSED UNCHANGED TO CALCR AND CALCJ. C UR...... PASSED UNCHANGED TO CALCR AND CALCJ. C UF...... PASSED UNCHANGED TO CALCR AND CALCJ. C C C *** DISCUSSION *** C C NOTE... NL2SOL (MENTIONED BELOW) IS A CODE FOR SOLVING C NONLINEAR LEAST-SQUARES PROBLEMS. IT IS DESCRIBED IN C ACM TRANS. MATH. SOFTWARE, VOL. 7 (1981), PP. 369-383 C (AN ADAPTIVE NONLINEAR LEAST-SQUARES ALGORITHM, BY J.E. DENNIS, C D.M. GAY, AND R.E. WELSCH). C C LIV GIVES THE LENGTH OF IV. IT MUST BE AT LEAST 82+P. IF NOT, C THEN DN2G RETURNS WITH IV(1) = 15. WHEN DN2G RETURNS, THE C MINIMUM ACCEPTABLE VALUE OF LIV IS STORED IN IV(LASTIV) = IV(44), C (PROVIDED THAT LIV .GE. 44). C C LV GIVES THE LENGTH OF V. THE MINIMUM VALUE FOR LV IS C LV0 = 105 + P*(N + 2*P + 17) + 2*N. IF LV IS SMALLER THAN THIS, C THEN DN2G RETURNS WITH IV(1) = 16. WHEN DN2G RETURNS, THE C MINIMUM ACCEPTABLE VALUE OF LV IS STORED IN IV(LASTV) = IV(45) C (PROVIDED LIV .GE. 45). C C RETURN CODES AND CONVERGENCE TOLERANCES ARE THE SAME AS FOR C NL2SOL, WITH SOME SMALL EXTENSIONS... IV(1) = 15 MEANS LIV WAS C TOO SMALL. IV(1) = 16 MEANS LV WAS TOO SMALL. C C THERE ARE TWO NEW V INPUT COMPONENTS... V(LMAXS) = V(36) AND C V(SCTOL) = V(37) SERVE WHERE V(LMAX0) AND V(RFCTOL) FORMERLY DID C IN THE SINGULAR CONVERGENCE TEST -- SEE THE NL2SOL DOCUMENTATION. C C *** DEFAULT VALUES *** C C DEFAULT VALUES ARE PROVIDED BY SUBROUTINE DIVSET, RATHER THAN C DFAULT. THE CALLING SEQUENCE IS... C CALL DIVSET(1, IV, LIV, LV, V) C THE FIRST PARAMETER IS AN INTEGER 1. IF LIV AND LV ARE LARGE C ENOUGH FOR DIVSET, THEN DIVSET SETS IV(1) TO 12. OTHERWISE IT C SETS IV(1) TO 15 OR 16. CALLING DN2G WITH IV(1) = 0 CAUSES ALL C DEFAULT VALUES TO BE USED FOR THE INPUT COMPONENTS OF IV AND V. C IF YOU FIRST CALL DIVSET, THEN SET IV(1) TO 13 AND CALL DN2G, C THEN STORAGE ALLOCATION ONLY WILL BE PERFORMED. IN PARTICULAR, C IV(D) = IV(27), IV(J) = IV(70), AND IV(R) = IV(61) WILL BE SET C TO THE FIRST SUBSCRIPT IN V OF THE SCALE VECTOR, THE JACOBIAN C MATRIX, AND THE RESIDUAL VECTOR RESPECTIVELY, PROVIDED LIV AND LV C ARE LARGE ENOUGH. IF SO, THEN DN2G RETURNS WITH IV(1) = 14. C WHEN CALLED WITH IV(1) = 14, DN2G ASSUMES THAT STORAGE HAS C BEEN ALLOCATED, AND IT BEGINS THE MINIMIZATION ALGORITHM. C C *** SCALE VECTOR *** C C ONE DIFFERENCE WITH NL2SOL IS THAT THE SCALE VECTOR D IS C STORED IN V, STARTING AT A DIFFERENT SUBSCRIPT. THE STARTING C SUBSCRIPT VALUE IS STILL STORED IN IV(D) = IV(27). THE C DISCUSSION OF DEFAULT VALUES ABOVE TELLS HOW TO HAVE IV(D) SET C BEFORE THE ALGORITHM IS STARTED. C C *** REGRESSION DIAGNOSTICS *** C C IF IV(RDREQ) SO DICTATES, THEN ESTIMATES ARE COMPUTED OF THE C INFLUENCE EACH RESIDUAL COMPONENT HAS ON THE FINAL PARAMETER C ESTIMATE X. THE GENERAL IDEA IS THAT ONE MAY WISH TO EXAMINE C RESIDUAL COMPONENTS (AND THE DATA BEHIND THEM) FOR WHICH THE C INFLUENCE ESTIMATE IS SIGNIFICANTLY LARGER THAN MOST OF THE OTHER C INFLUENCE ESTIMATES. THESE ESTIMATES, HEREAFTER CALLED C REGRESSION DIAGNOSTICS, ARE ONLY COMPUTED IF IV(RDREQ) = 2 OR 3. C IN THIS CASE, FOR I = 1(1)N, C SQRT( G(I)**T * H(I)**-1 * G(I) ) C IS COMPUTED AND STORED IN V, STARTING AT V(IV(REGD)), WHERE C RDREQ = 57 AND REGD = 67. HERE G(I) STANDS FOR THE GRADIENT C RESULTING WHEN THE I-TH OBSERVATION IS DELETED AND H(I) STANDS C FOR AN APPROXIMATION TO THE CORRESPONDING HESSIAN AT X, THE SOLU- C TION CORRESPONDING TO ALL OBSERVATIONS. (THIS APPROXIMATION IS C OBTAINED BY SUBTRACTING THE FIRST-ORDER CONTRIBUTION OF THE I-TH C OBSERVATION TO THE HESSIAN FROM A FINITE-DIFFERENCE HESSIAN C APPROXIMATION. IF H IS INDEFINITE, THEN IV(REGD) IS SET TO -1. C IF H(I) IS INDEFINITE, THEN -1 IS RETURNED AS THE DIAGNOSTIC FOR C OBSERVATION I. IF NO DIAGNOSTICS ARE COMPUTED, PERHAPS BECAUSE C OF A FAILURE TO CONVERGE, THEN IV(REGD) = 0 IS RETURNED.) C PRINTING OF THE REGRESSION DIAGNOSTICS IS CONTROLLED BY C IV(COVPRT) = IV(14)... IF IV(COVPRT) = 3, THEN BOTH THE C COVARIANCE MATRIX AND THE REGRESSION DIAGNOSTICS ARE PRINTED. C IV(COVPRT) = 2 CAUSES ONLY THE REGRESSION DIAGNOSTICS TO BE C PRINTED, IV(COVPRT) = 1 CAUSES ONLY THE COVARIANCE MATRIX TO BE C PRINTED, AND IV(COVPRT) = 0 CAUSES NEITHER TO BE PRINTED. C C RDREQ = 57 AND REGD = 67. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C+++++++++++++++++++++++++++ DECLARATIONS +++++++++++++++++++++++++++ C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DIVSET, DRN2G, DN2RDP C DIVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C DRN2G... CARRIES OUT OPTIMIZATION ITERATIONS. C DN2RDP... PRINTS REGRESSION DIAGNOSTICS. C C *** NO INTRINSIC FUNCTIONS *** C C *** LOCAL VARIABLES *** C INTEGER D1, DR1, IV1, N1, N2, NF, R1, RD1 C C *** IV COMPONENTS *** C INTEGER D, J, NEXTV, NFCALL, NFGCAL, R, REGD, REGD0, TOOBIG, VNEED C/6 C DATA D/27/, J/70/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, R/61/, C 1 REGD/67/, REGD0/82/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (D=27, J=70, NEXTV=47, NFCALL=6, NFGCAL=7, R=61, 1 REGD=67, REGD0=82, TOOBIG=2, VNEED=4) C/ C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + P + N*(P+2) CALL DRN2G(X, V, IV, LIV, LV, N, N, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P IV(REGD0) = IV(R) + N IV(J) = IV(REGD0) + N IV(NEXTV) = IV(J) + N*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RD1 = IV(REGD0) C 20 CALL DRN2G(V(D1), V(DR1), IV, LIV, LV, N, N, N1, N2, P, V(R1), 1 V(RD1), V, X) IF (IV(1)-2) 30, 50, 60 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 30 NF = IV(NFCALL) CALL CALCR(N, P, X, NF, V(R1), UI, UR, UF) IF (NF .GT. 0) GO TO 40 IV(TOOBIG) = 1 GO TO 20 40 IF (IV(1) .GT. 0) GO TO 20 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 50 CALL CALCJ(N, P, X, IV(NFGCAL), V(DR1), UI, UR, UF) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 GO TO 20 C C *** INDICATE WHETHER THE REGRESSION DIAGNOSTIC ARRAY WAS COMPUTED C *** AND PRINT IT IF SO REQUESTED... C 60 IF (IV(REGD) .GT. 0) IV(REGD) = RD1 CALL DN2RDP(IV, LIV, LV, N, V(RD1), V) C 999 RETURN C C *** LAST LINE OF DN2G FOLLOWS *** END PyBDSF-1.10.1/src/port3/dn2gb.f000066400000000000000000000120571420247104600156270ustar00rootroot00000000000000 SUBROUTINE DN2GB(N, P, X, B, CALCR, CALCJ, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** VERSION OF NL2SOL THAT HANDLES SIMPLE BOUNDS ON X *** C C *** PARAMETERS *** C INTEGER N, P, LIV, LV C/6 C INTEGER IV(LIV), UIPARM(1) C DOUBLE PRECISION X(P), B(2,P), V(LV), URPARM(1) C/7 INTEGER IV(LIV), UIPARM(*) DOUBLE PRECISION X(P), B(2,P), V(LV), URPARM(*) C/ EXTERNAL CALCR, CALCJ, UFPARM C C *** DISCUSSION *** C C NOTE... NL2SOL (MENTIONED BELOW) IS A CODE FOR SOLVING C NONLINEAR LEAST-SQUARES PROBLEMS. IT IS DESCRIBED IN C ACM TRANS. MATH. SOFTWARE, VOL. 7 (1981), PP. 369-383 C (AN ADAPTIVE NONLINEAR LEAST-SQUARES ALGORITHM, BY J.E. DENNIS, C D.M. GAY, AND R.E. WELSCH). C C LIV GIVES THE LENGTH OF IV. IT MUST BE AT LEAST 82 + 4*P. C IF NOT, THEN DN2GB RETURNS WITH IV(1) = 15. WHEN DN2GB C RETURNS, THE MINIMUM ACCEPTABLE VALUE OF LIV IS STORED IN C IV(LASTIV) = IV(44), (PROVIDED THAT LIV .GE. 44). C C LV GIVES THE LENGTH OF V. THE MINIMUM VALUE FOR LV IS C LV0 = 105 + P*(N + 2*P + 21) + 2*N. IF LV IS SMALLER THAN THIS, C THEN DN2GB RETURNS WITH IV(1) = 16. WHEN DN2GB RETURNS, THE C MINIMUM ACCEPTABLE VALUE OF LV IS STORED IN IV(LASTV) = IV(45) C (PROVIDED LIV .GE. 45). C C RETURN CODES AND CONVERGENCE TOLERANCES ARE THE SAME AS FOR C NL2SOL, WITH SOME SMALL EXTENSIONS... IV(1) = 15 MEANS LIV WAS C TOO SMALL. IV(1) = 16 MEANS LV WAS TOO SMALL. C C THERE ARE TWO NEW V INPUT COMPONENTS... V(LMAXS) = V(36) AND C V(SCTOL) = V(37) SERVE WHERE V(LMAX0) AND V(RFCTOL) FORMERLY DID C IN THE SINGULAR CONVERGENCE TEST -- SEE THE NL2SOL DOCUMENTATION. C C *** BOUNDS *** C C THE BOUNDS B(1,I) .LE. X(I) .LE. B(2,I), I = 1(1)P, ARE ENFORCED. C C *** DEFAULT VALUES *** C C DEFAULT VALUES ARE PROVIDED BY SUBROUTINE DIVSET, RATHER THAN C DFAULT. THE CALLING SEQUENCE IS... C CALL DIVSET(1, IV, LIV, LV, V) C THE FIRST PARAMETER IS AN INTEGER 1. IF LIV AND LV ARE LARGE C ENOUGH FOR DIVSET, THEN DIVSET SETS IV(1) TO 12. OTHERWISE IT C SETS IV(1) TO 15 OR 16. CALLING DN2GB WITH IV(1) = 0 CAUSES ALL C DEFAULT VALUES TO BE USED FOR THE INPUT COMPONENTS OF IV AND V. C IF YOU FIRST CALL DIVSET, THEN SET IV(1) TO 13 AND CALL DN2GB, C THEN STORAGE ALLOCATION ONLY WILL BE PERFORMED. IN PARTICULAR, C IV(D) = IV(27), IV(J) = IV(70), AND IV(R) = IV(61) WILL BE SET C TO THE FIRST SUBSCRIPT IN V OF THE SCALE VECTOR, THE JACOBIAN C MATRIX, AND THE RESIDUAL VECTOR RESPECTIVELY, PROVIDED LIV AND LV C ARE LARGE ENOUGH. IF SO, THEN DN2GB RETURNS WITH IV(1) = 14. C WHEN CALLED WITH IV(1) = 14, DN2GB ASSUMES THAT STORAGE HAS C BEEN ALLOCATED, AND IT BEGINS THE MINIMIZATION ALGORITHM. C C *** SCALE VECTOR *** C C ONE DIFFERENCE WITH NL2SOL IS THAT THE SCALE VECTOR D IS C STORED IN V, STARTING AT A DIFFERENT SUBSCRIPT. THE STARTING C SUBSCRIPT VALUE IS STILL STORED IN IV(D) = IV(27). THE C DISCUSSION OF DEFAULT VALUES ABOVE TELLS HOW TO HAVE IV(D) SET C BEFORE THE ALGORITHM IS STARTED. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DIVSET, DRN2GB C DIVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C DRN2GB... CARRIES OUT OPTIMIZATION ITERATIONS. C C *** LOCAL VARIABLES *** C INTEGER D1, DR1, IV1, N1, N2, NF, R1, RD1 C C *** IV COMPONENTS *** C INTEGER D, J, NEXTV, NFCALL, NFGCAL, R, REGD0, TOOBIG, VNEED C/6 C DATA D/27/, J/70/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, R/61/, C 1 REGD0/82/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (D=27, J=70, NEXTV=47, NFCALL=6, NFGCAL=7, R=61, 1 REGD0=82, TOOBIG=2, VNEED=4) C/ C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + P + N*(P+2) CALL DRN2GB(B, X, V, IV, LIV, LV, N, N, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P IV(REGD0) = IV(R) + N IV(J) = IV(REGD0) + N IV(NEXTV) = IV(J) + N*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RD1 = IV(REGD0) C 20 CALL DRN2GB(B, V(D1), V(DR1), IV, LIV, LV, N, N, N1, N2, P, V(R1), 1 V(RD1), V, X) IF (IV(1)-2) 30, 50, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 30 NF = IV(NFCALL) CALL CALCR(N, P, X, NF, V(R1), UIPARM, URPARM, UFPARM) IF (NF .GT. 0) GO TO 40 IV(TOOBIG) = 1 GO TO 20 40 IF (IV(1) .GT. 0) GO TO 20 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 50 CALL CALCJ(N, P, X, IV(NFGCAL), V(DR1), UIPARM, URPARM, UFPARM) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 GO TO 20 C 999 RETURN C C *** LAST CARD OF DN2GB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dn2lrd.f000066400000000000000000000043231420247104600160150ustar00rootroot00000000000000 SUBROUTINE DN2LRD(DR, IV, L, LH, LIV, LV, ND, NN, P, R, RD, V) C C *** COMPUTE REGRESSION DIAGNOSTIC AND DEFAULT COVARIANCE MATRIX FOR C DRN2G *** C C *** PARAMETERS *** C INTEGER LH, LIV, LV, ND, NN, P INTEGER IV(LIV) DOUBLE PRECISION DR(ND,P), L(LH), R(NN), RD(NN), V(LV) C C *** CODED BY DAVID M. GAY (WINTER 1982, FALL 1983) *** C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C DOUBLE PRECISION DD7TPR EXTERNAL DD7TPR, DL7ITV, DL7IVM,DO7PRD, DV7SCP C C *** LOCAL VARIABLES *** C INTEGER COV, I, J, M, STEP1 DOUBLE PRECISION A, FF, S, T C C *** CONSTANTS *** C DOUBLE PRECISION NEGONE, ONE, ONEV(1), ZERO C C *** INTRINSIC FUNCTIONS *** C/+ DOUBLE PRECISION DSQRT C/ C C *** IV AND V SUBSCRIPTS *** C INTEGER F, H, MODE, RDREQ, STEP C/6 C DATA F/10/, H/56/, MODE/35/, RDREQ/57/, STEP/40/ C/7 PARAMETER (F=10, H=56, MODE=35, RDREQ=57, STEP=40) C/ C/6 C DATA NEGONE/-1.D+0/, ONE/1.D+0/, ZERO/0.D+0/ C/7 PARAMETER (NEGONE=-1.D+0, ONE=1.D+0, ZERO=0.D+0) C/ DATA ONEV(1)/1.D+0/ C C++++++++++++++++++++++++++++++++ BODY +++++++++++++++++++++++++++++++ C STEP1 = IV(STEP) I = IV(RDREQ) IF (I .LE. 0) GO TO 999 IF (MOD(I,4) .LT. 2) GO TO 30 FF = ONE IF (V(F) .NE. ZERO) FF = ONE / DSQRT(DABS(V(F))) CALL DV7SCP(NN, RD, NEGONE) DO 20 I = 1, NN A = R(I)**2 M = STEP1 DO 10 J = 1, P V(M) = DR(I,J) M = M + 1 10 CONTINUE CALL DL7IVM(P, V(STEP1), L, V(STEP1)) S = DD7TPR(P, V(STEP1), V(STEP1)) T = ONE - S IF (T .LE. ZERO) GO TO 20 A = A * S / T RD(I) = DSQRT(A) * FF 20 CONTINUE C 30 IF (IV(MODE) - P .LT. 2) GO TO 999 C C *** COMPUTE DEFAULT COVARIANCE MATRIX *** C COV = IABS(IV(H)) DO 50 I = 1, NN M = STEP1 DO 40 J = 1, P V(M) = DR(I,J) M = M + 1 40 CONTINUE CALL DL7IVM(P, V(STEP1), L, V(STEP1)) CALL DL7ITV(P, V(STEP1), L, V(STEP1)) CALL DO7PRD(1, LH, P, V(COV), ONEV, V(STEP1), V(STEP1)) 50 CONTINUE C 999 RETURN C *** LAST LINE OF DN2LRD FOLLOWS *** END PyBDSF-1.10.1/src/port3/dn2p.f000066400000000000000000000135501420247104600154750ustar00rootroot00000000000000 SUBROUTINE DN2P(N, ND, P, X, CALCR, CALCJ, IV, LIV, LV, V, 1 UI, UR, UF) C C *** VERSION OF NL2SOL THAT CALLS DRN2G AND HAS EXPANDED CALLING C *** SEQUENCES FOR CALCR, CALCJ, ALLOWING THEM TO PROVIDE R AND J C *** (RESIDUALS AND JACOBIAN) IN CHUNKS. C C *** PARAMETERS *** C INTEGER N, ND, P, LIV, LV C/6 C INTEGER IV(LIV), UI(1) C DOUBLE PRECISION X(P), V(LV), UR(1) C/7 INTEGER IV(LIV), UI(*) DOUBLE PRECISION X(P), V(LV), UR(*) C/ EXTERNAL CALCR, CALCJ, UF C C C *** PARAMETER USAGE *** C C N....... TOTAL NUMBER OF RESIDUALS. C ND...... MAXIMUM NUMBER OF RESIDUAL COMPONENTS PROVIDED BY ANY CALL C ON CALCR. C P....... NUMBER OF PARAMETERS (COMPONENTS OF X) BEING ESTIMATED. C X....... PARAMETER VECTOR BEING ESTIMATED (INPUT = INITIAL GUESS, C OUTPUT = BEST VALUE FOUND). C CALCR... SUBROUTINE FOR COMPUTING RESIDUAL VECTOR. C CALCJ... SUBROUTINE FOR COMPUTING JACOBIAN MATRIX = MATRIX OF FIRST C PARTIALS OF THE RESIDUAL VECTOR. C IV...... INTEGER VALUES ARRAY. C LIV..... LENGTH OF IV (SEE DISCUSSION BELOW). C LV...... LENGTH OF V (SEE DISCUSSION BELOW). C V....... FLOATING-POINT VALUES ARRAY. C UI...... PASSED UNCHANGED TO CALCR AND CALCJ. C UR...... PASSED UNCHANGED TO CALCR AND CALCJ. C UF...... PASSED UNCHANGED TO CALCR AND CALCJ. C C C *** DISCUSSION *** C C THIS ROUTINE IS SIMILAR TO DN2G (WHICH SEE), EXCEPT THAT THE C CALLING SEQUENCE FOR CALCR AND CALCJ IS DIFFERENT -- IT ALLOWS C THE RESIDUAL VECTOR AND JACOBIAN MATRIX TO BE PASSED IN BLOCKS. C C FOR CALCR, THE CALLING SEQUENCE IS... C C CALCR(N, ND1, N1, N2, P, X, NF, R, UI, UR, UF) C C PARAMETERS N, P, X, NF, R, UI, UR, UF ARE AS FOR THE CALCR USED C BY NL2SOL OR DN2G. C PARAMETERS ND1, N1, AND N2 ARE INPUTS TO CALCR. CALCR SHOULD NOT C CHANGE ND1 OR N1 (BUT MAY CHANGE N2). C ND1 = MIN(N,ND) IS THE MAXIMUM NUMBER OF RESIDUAL COMPONENTS THAT C CALCR SHOULD SUPPLY ON ONE CALL. C N1 IS THE INDEX OF THE FIRST RESIDUAL COMPONENT THAT CALCR SHOULD C SUPPLY ON THIS CALL. C N2 HAS THE VALUE MIN(N, N1+ND1-1) WHEN CALCR IS CALLED. CALCR C MAY SET N2 TO A LOWER VALUE (AT LEAST 1) AND FOR N1 .LE. I .LE. N2 C SHOULD RETURN RESIDUAL COMPONENT I IN R(I-N1+1), I.E., IN COMPONENTS C R(1), R(2), ..., R(N2-N1+1). C C FOR CALCJ, THE CALLING SEQUENCE IS... C C CALCJ(N, ND1, N1, N2, P, X, NF, J, UI, UR, UF) C C ALL PARAMETERS EXCEPT N2 AND J ARE AS FOR CALCR. N2 MAY NOT BE C CHANGED, BUT OTHERWISE IS AS FOR CALCR. (WHENEVER CALCJ IS CALLED, C CALCR WILL JUST HAVE BEEN CALLED WITH THE SAME VALUE OF N1 BUT C POSSIBLY A DIFFERENT X -- NF IDENTIFIES THE X PASSED. IF CALCR C CHANGES N2, THEN THIS CHANGED VALUE IS PASSED TO CALCJ.) C J IS A FLOATING-POINT ARRAY DIMENSIONED J(ND1,P). FOR I = N1(1)N2 C AND K = 1(1)P, CALCJ MUST STORE THE PARTIAL DERIVATIVE AT X OF C RESIDUAL COMPONENT I WITH RESPECT TO X(K) IN J(I-N1+1,K). C C LIV MUST BE AT LEAST 82 + P. LV MUST BE AT LEAST C 105 + P*(17 + 2*P) + (P+1)*MIN(ND,N) + N C IF ND .LT. N AND NO REGRESSION DIAGNOSTIC ARRAY IS REQUESTED C (I.E., IV(RDREQ) = 0 OR 1), THEN LV CAN BE N LESS THAN THIS. C C+++++++++++++++++++++++++++ DECLARATIONS +++++++++++++++++++++++++++ C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DIVSET, DN2RDP, DRN2G C DIVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C DN2RDP... PRINTS REGRESSION DIAGNOSTICS. C DRN2G... CARRIES OUT OPTIMIZATION ITERATIONS. C C *** LOCAL VARIABLES *** C LOGICAL ONERD INTEGER D1, DR1, I, IV1, N1, N2, ND1, NF, R1, RD0, RD1, X01 C C *** IV COMPONENTS *** C INTEGER D, J, NEXTV, NF00, NFCALL, NFGCAL, R, RDREQ, REGD, 1 REGD0, TOOBIG, VNEED, X0 C/6 C DATA D/27/, J/70/, NEXTV/47/, NF00/81/, NFCALL/6/, NFGCAL/7/, C 1 R/61/, RDREQ/57/, REGD/67/, REGD0/82/, TOOBIG/2/, VNEED/4/, C 2 X0/43/ C/7 PARAMETER (D=27, J=70, NEXTV=47, NF00=81, NFCALL=6, NFGCAL=7, 1 R=61, RDREQ=57, REGD=67, REGD0=82, TOOBIG=2, VNEED=4, 2 X0=43) C/ C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) ND1 = MIN0(ND, N) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 I = IV(VNEED) + P + ND1*(P+1) ONERD = IV(RDREQ) .GE. 2 .OR. ND .GE. N IF (ONERD) I = I + N IF (IV(1) .EQ. 13) IV(VNEED) = I CALL DRN2G(V, V, IV, LIV, LV, N, ND1, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P I = IV(R) + ND1 IV(REGD0) = I IF (ONERD) I = I + N IV(J) = I IV(NEXTV) = I + ND1*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RD1 = IV(REGD0) RD0 = RD1 - 1 C 20 CALL DRN2G(V(D1), V(DR1), IV, LIV, LV, N, ND1, N1, N2, P, V(R1), 1 V(RD1), V, X) IV1 = IV(1) IF (IV1-2) 40, 30, 80 30 IF (ND .GE. N) GO TO 70 C C *** FIRST COMPUTE RELEVANT PORTION OF R *** C 40 NF = IV(NFCALL) IF (IABS(IV1) .GE. 2) NF = IV(NFGCAL) CALL CALCR(N, ND1, N1, N2, P, X, NF, V(R1), UI, UR, UF) IF (NF .GT. 0) GO TO 50 IV(TOOBIG) = 1 GO TO 20 50 I = IV1 + 4 GO TO (70, 60, 70, 20, 20, 70), I 60 X01 = IV(X0) CALL CALCJ(N, ND1, N1, N2, P, V(X01), IV(NF00), V(DR1), UI, 1 UR, UF) IF (IV(NF00) .LE. 0) IV(TOOBIG) = 1 GO TO 20 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 70 CALL CALCJ(N, ND1, N1, N2, P, X, IV(NFGCAL), V(DR1), UI, UR, UF) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 RD1 = RD0 + N1 GO TO 20 C 80 RD1 = RD0 + 1 IF (IV(REGD) .GT. 0) IV(REGD) = RD1 IF (IV(1) .LE. 8) CALL DN2RDP(IV, LIV, LV, N, V(RD1), V) C 999 RETURN C C *** LAST LINE OF DN2P FOLLOWS *** END PyBDSF-1.10.1/src/port3/dn2pb.f000066400000000000000000000130631420247104600156360ustar00rootroot00000000000000 SUBROUTINE DN2PB(N, ND, P, X, B, CALCR, CALCJ, IV, LIV, LV, V, 1 UI, UR, UF) C C *** SIMPLY BOUNDED VERSION OF NL2SOL THAT HAS EXPANDED CALLING C *** SEQUENCES FOR CALCR, CALCJ, ALLOWING THEM TO PROVIDE R AND J C *** (RESIDUALS AND JACOBIAN) IN CHUNKS. C C *** PARAMETERS *** C INTEGER N, ND, P, LIV, LV C/6 C INTEGER IV(LIV), UI(1) C DOUBLE PRECISION B(2,P), X(P), V(LV), UR(1) C/7 INTEGER IV(LIV), UI(*) DOUBLE PRECISION B(2,P), X(P), V(LV), UR(*) C/ EXTERNAL CALCR, CALCJ, UF C C C *** PARAMETER USAGE *** C C N....... TOTAL NUMBER OF RESIDUALS. C ND...... MAXIMUM NUMBER OF RESIDUAL COMPONENTS PROVIDED BY ANY CALL C ON CALCR. C P....... NUMBER OF PARAMETERS (COMPONENTS OF X) BEING ESTIMATED. C X....... PARAMETER VECTOR BEING ESTIMATED (INPUT = INITIAL GUESS, C OUTPUT = BEST VALUE FOUND). C CALCR... SUBROUTINE FOR COMPUTING RESIDUAL VECTOR. C CALCJ... SUBROUTINE FOR COMPUTING JACOBIAN MATRIX = MATRIX OF FIRST C PARTIALS OF THE RESIDUAL VECTOR. C IV...... INTEGER VALUES ARRAY. C LIV..... LENGTH OF IV (SEE DISCUSSION BELOW). C LV...... LENGTH OF V (SEE DISCUSSION BELOW). C V....... FLOATING-POINT VALUES ARRAY. C UI...... PASSED UNCHANGED TO CALCR AND CALCJ. C UR...... PASSED UNCHANGED TO CALCR AND CALCJ. C UF...... PASSED UNCHANGED TO CALCR AND CALCJ. C C C *** DISCUSSION *** C C THIS ROUTINE IS SIMILAR TO DN2G (WHICH SEE), EXCEPT THAT THE C CALLING SEQUENCE FOR CALCR AND CALCJ IS DIFFERENT -- IT ALLOWS C THE RESIDUAL VECTOR AND JACOBIAN MATRIX TO BE PASSED IN BLOCKS. C C FOR CALCR, THE CALLING SEQUENCE IS... C C CALCR(N, ND1, N1, N2, P, X, NF, R, UI, UR, UF) C C PARAMETERS N, P, X, NF, R, UI, UR, UF ARE AS FOR THE CALCR USED C BY NL2SOL OR DN2G. C PARAMETERS ND1, N1, AND N2 ARE INPUTS TO CALCR. CALCR SHOULD NOT C CHANGE ND1 OR N1 (BUT MAY CHANGE N2). C ND1 = MIN(N,ND) IS THE MAXIMUM NUMBER OF RESIDUAL COMPONENTS THAT C CALCR SHOULD SUPPLY ON ONE CALL. C N1 IS THE INDEX OF THE FIRST RESIDUAL COMPONENT THAT CALCR SHOULD C SUPPLY ON THIS CALL. C N2 HAS THE VALUE MIN(N, N1+ND1-1) WHEN CALCR IS CALLED. CALCR C MAY SET N2 TO A LOWER VALUE (AT LEAST 1) AND FOR N1 .LE. I .LE. N2 C SHOULD RETURN RESIDUAL COMPONENT I IN R(I-N1+1), I.E., IN COMPONENTS C R(1), R(2), ..., R(N2-N1+1). C C FOR CALCJ, THE CALLING SEQUENCE IS... C C CALCJ(N, ND1, N1, N2, P, X, NF, J, UI, UR, UF) C C ALL PARAMETERS EXCEPT N2 AND J ARE AS FOR CALCR. N2 MAY NOT BE C CHANGED, BUT OTHERWISE IS AS FOR CALCR. (WHENEVER CALCJ IS CALLED, C CALCR WILL JUST HAVE BEEN CALLED WITH THE SAME VALUE OF N1 BUT C POSSIBLY A DIFFERENT X -- NF IDENTIFIES THE X PASSED. IF CALCR C CHANGES N2, THEN THIS CHANGED VALUE IS PASSED TO CALCJ.) C J IS A FLOATING-POINT ARRAY DIMENSIONED J(ND1,P). FOR I = N1(1)N2 C AND K = 1(1)P, CALCJ MUST STORE THE PARTIAL DERIVATIVE AT X OF C RESIDUAL COMPONENT I WITH RESPECT TO X(K) IN J(I-N1+1,K). C C LIV MUST BE AT LEAST 82 + P. LV MUST BE AT LEAST C 105 + P*(17 + 2*P) + (P+1)*MIN(ND,N) + N C IF ND .LT. N AND NO REGRESSION DIAGNOSTIC ARRAY IS REQUESTED C (I.E., IV(RDREQ) = 0 OR 1), THEN LV CAN BE N LESS THAN THIS. C C+++++++++++++++++++++++++++ DECLARATIONS +++++++++++++++++++++++++++ C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DIVSET, DRN2GB C DIVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C DRN2GB... CARRIES OUT OPTIMIZATION ITERATIONS. C C *** LOCAL VARIABLES *** C LOGICAL ONERD INTEGER D1, DR1, I, IV1, N1, N2, ND1, NF, R1, RD1, X01 C C *** IV COMPONENTS *** C INTEGER D, J, NEXTV, NF00, NFCALL, NFGCAL, R, 1 REGD0, TOOBIG, VNEED, X0 C/6 C DATA D/27/, J/70/, NEXTV/47/, NF00/81/, NFCALL/6/, NFGCAL/7/, C 1 R/61/, REGD0/82/, TOOBIG/2/, VNEED/4/, X0/43/ C/7 PARAMETER (D=27, J=70, NEXTV=47, NF00=81, NFCALL=6, NFGCAL=7, 1 R=61, REGD0=82, TOOBIG=2, VNEED=4, X0=43) C/ C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) ND1 = MIN0(ND, N) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 I = IV(VNEED) + P + ND1*(P+1) ONERD = ND .GE. N IF (ONERD) I = I + N IF (IV(1) .EQ. 13) IV(VNEED) = I CALL DRN2GB(B, V, V, IV, LIV, LV, N, ND1, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P I = IV(R) + ND1 IV(REGD0) = I IF (ONERD) I = I + N IV(J) = I IV(NEXTV) = I + ND1*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RD1 = IV(REGD0) C 20 CALL DRN2GB(B, V(D1), V(DR1), IV, LIV, LV, N, ND1, N1, N2, P, 1 V(R1), V(RD1), V, X) IV1 = IV(1) IF (IV1-2) 40, 30, 999 30 IF (ND .GE. N) GO TO 70 C C *** FIRST COMPUTE RELEVANT PORTION OF R *** C 40 NF = IV(NFCALL) IF (IABS(IV1) .GE. 2) NF = IV(NFGCAL) CALL CALCR(N, ND1, N1, N2, P, X, NF, V(R1), UI, UR, UF) IF (NF .GT. 0) GO TO 50 IV(TOOBIG) = 1 GO TO 20 50 I = IV1 + 4 GO TO (70, 60, 70, 20, 20, 70), I 60 X01 = IV(X0) CALL CALCJ(N, ND1, N1, N2, P, V(X01), IV(NF00), V(DR1), UI, 1 UR, UF) IF (IV(NF00) .LE. 0) IV(TOOBIG) = 1 GO TO 20 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 70 CALL CALCJ(N, ND1, N1, N2, P, X, IV(NFGCAL), V(DR1), UI, UR, UF) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 GO TO 20 C 999 RETURN C C *** LAST LINE OF DN2PB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dn2rdp.f000066400000000000000000000021371420247104600160220ustar00rootroot00000000000000 SUBROUTINE DN2RDP(IV, LIV, LV, N, RD, V) C C *** PRINT REGRESSION DIAGNOSTICS FOR MLPSL AND NL2S1 *** C INTEGER LIV, LV, N INTEGER IV(LIV) DOUBLE PRECISION RD(N), V(LV) C C *** NOTE -- V IS PASSED FOR POSSIBLE _USE_ BY REVISED VERSIONS OF C *** THIS ROUTINE. C INTEGER PU C C *** IV AND V SUBSCRIPTS *** C INTEGER COVPRT, F, NEEDHD, PRUNIT, REGD C C/6 C DATA COVPRT/14/, F/10/, NEEDHD/36/, PRUNIT/21/, REGD/67/ C/7 PARAMETER (COVPRT=14, F=10, NEEDHD=36, PRUNIT=21, REGD=67) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C PU = IV(PRUNIT) IF (PU .EQ. 0) GO TO 999 IF (IV(COVPRT) .LT. 2) GO TO 999 IF (IV(REGD) .LE. 0) GO TO 999 IV(NEEDHD) = 1 IF (V(F)) 10, 30, 10 10 WRITE(PU,20) RD 20 FORMAT(/70H REGRESSION DIAGNOSTIC = SQRT( G(I)**T * H(I)**-1 * G(I 1) / ABS(F) ).../(6D12.3)) GO TO 999 30 WRITE(PU,40) RD 40 FORMAT(/61H REGRESSION DIAGNOSTIC = SQRT( G(I)**T * H(I)**-1 * G(I 1) ).../(6D12.3)) C 999 RETURN C *** LAST LINE OF DN2RDP FOLLOWS *** END PyBDSF-1.10.1/src/port3/dnsf.f000066400000000000000000000236461420247104600155730ustar00rootroot00000000000000 SUBROUTINE DNSF(N, P, L, ALF, C, Y, CALCA, INC, IINC, IV, 1 LIV, LV, V, UIPARM, URPARM, UFPARM) C C *** SOLVE SEPARABLE NONLINEAR LEAST SQUARES USING C *** FINITE-DIFFERENCE DERIVATIVES. C C *** PARAMETER DECLARATIONS *** C INTEGER IINC, L, LIV, LV, N, P C/6 C INTEGER INC(IINC,P), IV(LIV), UIPARM(1) C DOUBLE PRECISION ALF(P), C(L), URPARM(1), V(LV), Y(N) C/7 INTEGER INC(IINC,P), IV(LIV), UIPARM(*) DOUBLE PRECISION ALF(P), C(L), URPARM(*), V(LV), Y(N) C/ EXTERNAL CALCA, UFPARM C C *** PARAMETERS *** C C N (IN) NUMBER OF OBSERVATIONS. C P (IN) NUMBER OF NONLINEAR PARAMETERS TO BE ESTIMATED. C L (IN) NUMBER OF LINEAR PARAMETERS TO BE ESTIMATED. C ALF (I/O) NONLINEAR PARAMETERS. C INPUT = INITIAL GUESS, C OUTPUT = BEST ESTIMATE FOUND. C C (OUT) LINEAR PARAMETERS (ESTIMATED). C Y (IN) RIGHT-HAND SIDE VECTOR. C CALCA (IN) SUBROUTINE TO COMPUTE A MATRIX. C INC (IN) INCIDENCE MATRIX OF DEPENDENCIES OF COLUMNS OF A ON C COMPONENTS OF ALF -- INC(I,J) = 1 MEANS COLUMN I C OF A DEPENDS ON ALF(J). C IINC (IN) DECLARED LEAD DIMENSION OF INC. MUST BE AT LEAST L+1. C IV (I/O) INTEGER PARAMETER AND SCRATCH VECTOR. C LIV (IN) LENGTH OF IV. MUST BE AT LEAST C 122 + 2*M + 4*P + 2*L + MAX(L+1,6*P), WHERE M IS C THE NUMBER OF ONES IN INC. C LV (IN) LENGTH OF V. MUST BE AT LEAST C 105 + 2*N*(L+3) + JLEN + L*(L+3)/2 + P*(2*P + 18), C WHERE JLEN = (L+P)*(N+L+P+1), UNLESS NEITHER A C COVARIANCE MATRIX NOR REGRESSION DIAGNOSTICS ARE C REQUESTED, IN WHICH CASE JLEN = N*P. IF THE LAST C ROW OF INC CONTAINS ONLY ZEROS, THEN LV CAN BE 4*N C LESS THAN JUST DESCRIBED. C V (I/O) FLOATING-POINT PARAMETER AND SCRATCH VECTOR. C IF A COVARIANCE ESTIMATE IS REQUESTED, IT IS FOR C (ALF,C) -- NONLINEAR PARAMETERS ORDERED FIRST, C FOLLOWED BY LINEAR PARAMETERS. C UIPARM (I/O) INTEGER VECTOR PASSED WITHOUT CHANGE TO CALCA. C URPARM (I/O) FLOATING-POINT VECTOR PASSED WITHOUT CHANGE TO CALCA. C UFPARM (I/O) SUBROUTINE PASSED (WITHOUT HAVING BEEN CALLED) TO CALCA. C C C-------------------------- DECLARATIONS ---------------------------- C C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DIVSET, DSM, DRNSG,DV2AXY,DV7CPY, DV7SCL C C DIVSET.... PROVIDES DEFAULT IV AND V VALUES. C DSM...... DETERMINES EFFICIENT ORDER FOR FINITE DIFFERENCES. C DRNSG... CARRIES OUT NL2SOL ALGORITHM. C DV2AXY.... ADDS A MULTIPLE OF ONE VECTOR TO ANOTHER. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7SCL... SCALES AND COPIES ONE VECTOR TO ANOTHER. C C *** LOCAL VARIABLES *** C LOGICAL PARTJ INTEGER A0, A1, AJ, ALP1, BWA1, D0, DA0, DA1, DAJ, GPTR1, GRP1, 1 GRP2, I, I1, IN0, IN1, IN2, INI, INLEN, IPNTR1, IV1, IWA1, 2 IWALEN, J1, JN1, JPNTR1, K, L1, LP1, M, M0, NF, NG, NGRP0, 3 NGRP1, NGRP2, RSAVE0, RSAVE1, RSVLEN, X0I, XSAVE0, XSAVE1 DOUBLE PRECISION DELTA, DI, H, XI DOUBLE PRECISION NEGONE, ONE, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AMAT, COVREQ, D, DAMAT, DLTFDJ, GPTR, GRP, IN, IVNEED, 1 L1SAV, MAXGRP, MODE, MSAVE, NEXTIV, NEXTV, NFCALL, NFGCAL, 2 PERM, RESTOR, TOOBIG, VNEED, XSAVE C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AMAT/113/, COVREQ/15/, D/27/, DAMAT/114/, DLTFDJ/43/, C 1 GPTR/117/, GRP/118/, IN/112/, IVNEED/3/, L1SAV/111/, C 2 MAXGRP/116/, MODE/35/, MSAVE/115/, NEXTIV/46/, NEXTV/47/, C 3 NFCALL/6/, NFGCAL/7/, PERM/58/, RESTOR/9/, TOOBIG/2/, C 4 VNEED/4/, XSAVE/119/ C/7 PARAMETER (AMAT=113, COVREQ=15, D=27, DAMAT=114, DLTFDJ=43, 1 GPTR=117, GRP=118, IN=112, IVNEED=3, L1SAV=111, 2 MAXGRP=116, MODE=35, MSAVE=115, NEXTIV=46, NEXTV=47, 3 NFCALL=6, NFGCAL=7, PERM=58, RESTOR=9, TOOBIG=2, 4 VNEED=4, XSAVE=119) C/ DATA NEGONE/-1.D+0/, ONE/1.D+0/, ZERO/0.D+0/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C LP1 = L + 1 IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) IF (P .LE. 0 .OR. L .LT. 0 .OR. IINC .LE. L) GO TO 80 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 120 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 120 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 50 C C *** FRESH START *** C IF (IV(PERM) .LE. XSAVE) IV(PERM) = XSAVE + 1 C C *** CHECK INC, COUNT ITS NONZEROS C L1 = 0 M = 0 DO 40 I = 1, P M0 = M IF (L .EQ. 0) GO TO 20 DO 10 K = 1, L IF (INC(K,I) .LT. 0 .OR. INC(K,I) .GT. 1) GO TO 80 IF (INC(K,I) .EQ. 1) M = M + 1 10 CONTINUE 20 IF (INC(LP1,I) .NE. 1) GO TO 30 M = M + 1 L1 = 1 30 IF (M .EQ. M0 .OR. INC(LP1,I) .LT. 0 1 .OR. INC(LP1,I) .GT. 1) GO TO 80 40 CONTINUE C C *** NOW L1 = 1 MEANS A HAS COLUMN L+1 *** C C *** COMPUTE STORAGE REQUIREMENTS *** C IWALEN = MAX0(LP1, 6*P) INLEN = 2 * M IV(IVNEED) = IV(IVNEED) + INLEN + 3*P + L + IWALEN + 3 RSVLEN = 2 * L1 * N L1 = L + L1 IV(VNEED) = IV(VNEED) + 2*N*L1 + RSVLEN + P C 50 CALL DRNSG(V, ALF, C, V, IV, IV, L, 1, N, LIV, LV, N, M, P, V, Y) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IN) = IV(NEXTIV) IV(AMAT) = IV(NEXTV) IV(DAMAT) = IV(AMAT) + N*L1 IV(XSAVE) = IV(DAMAT) + N*L1 IV(NEXTV) = IV(XSAVE) + P + RSVLEN IV(L1SAV) = L1 IV(MSAVE) = M C C *** DETERMINE HOW MANY GROUPS FOR FINITE DIFFERENCES C *** (SET UP TO CALL DSM) C IN1 = IV(IN) JN1 = IN1 + M DO 70 K = 1, P DO 60 I = 1, LP1 IF (INC(I,K) .EQ. 0) GO TO 60 IV(IN1) = I IN1 = IN1 + 1 IV(JN1) = K JN1 = JN1 + 1 60 CONTINUE 70 CONTINUE IN1 = IV(IN) JN1 = IN1 + M IWA1 = IN1 + INLEN NGRP1 = IWA1 + IWALEN BWA1 = NGRP1 + P IPNTR1 = BWA1 + P JPNTR1 = IPNTR1 + L + 2 CALL DSM(LP1, P, M, IV(IN1), IV(JN1), IV(NGRP1), NG, K, I, 1 IV(IPNTR1), IV(JPNTR1), IV(IWA1), IWALEN, IV(BWA1)) IF (I .EQ. 1) GO TO 90 IV(1) = 69 GO TO 50 80 IV(1) = 66 GO TO 50 C C *** SET UP GRP AND GPTR ARRAYS FOR COMPUTING FINITE DIFFERENCES C C *** THERE ARE NG GROUPS. GROUP I CONTAINS ALF(GRP(J)) FOR C *** GPTR(I) .LE. J .LE. GPTR(I+1)-1. C 90 IV(MAXGRP) = NG IV(GPTR) = IN1 + 2*L1 GPTR1 = IV(GPTR) IV(GRP) = GPTR1 + NG + 1 IV(NEXTIV) = IV(GRP) + P GRP1 = IV(GRP) NGRP0 = NGRP1 - 1 NGRP2 = NGRP0 + P DO 110 I = 1, NG IV(GPTR1) = GRP1 GPTR1 = GPTR1 + 1 DO 100 I1 = NGRP1, NGRP2 IF (IV(I1) .NE. I) GO TO 100 IV(GRP1) = I1 - NGRP0 GRP1 = GRP1 + 1 100 CONTINUE 110 CONTINUE IV(GPTR1) = GRP1 IF (IV1 .EQ. 13) GO TO 999 C C *** INITIALIZE POINTERS *** C 120 A1 = IV(AMAT) A0 = A1 - N DA1 = IV(DAMAT) DA0 = DA1 - N IN1 = IV(IN) IN0 = IN1 - 2 L1 = IV(L1SAV) IN2 = IN1 + 2*L1 - 1 D0 = IV(D) - 1 NG = IV(MAXGRP) XSAVE1 = IV(XSAVE) XSAVE0 = XSAVE1 - 1 RSAVE1 = XSAVE1 + P RSAVE0 = RSAVE1 + N ALP1 = A1 + L*N DELTA = V(DLTFDJ) IV(COVREQ) = -IABS(IV(COVREQ)) C 130 CALL DRNSG(V(A1), ALF, C, V(DA1), IV(IN1), IV, L, L1, N, LIV, LV, 1 N, L1, P, V, Y) IF (IV(1)-2) 140, 150, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 140 NF = IV(NFCALL) CALL CALCA(N, P, L, ALF, NF, V(A1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 IF (L1 .LE. L) GO TO 130 IF (IV(RESTOR) .EQ. 2) CALL DV7CPY(N, V(RSAVE0), V(RSAVE1)) CALL DV7CPY(N, V(RSAVE1), V(ALP1)) GO TO 130 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 150 IF (L1 .GT. L .AND. IV(NFGCAL) .EQ. IV(NFCALL)) 1 CALL DV7CPY(N, V(RSAVE0), V(RSAVE1)) GPTR1 = IV(GPTR) DO 230 K = 1, NG CALL DV7CPY(P, V(XSAVE1), ALF) GRP1 = IV(GPTR1) GRP2 = IV(GPTR1+1) - 1 GPTR1 = GPTR1 + 1 DO 160 I1 = GRP1, GRP2 I = IV(I1) XI = ALF(I) J1 = D0 + I DI = V(J1) IF (DI .LE. ZERO) DI = ONE H = DELTA * DMAX1(DABS(XI), ONE/DI) IF (XI .LT. ZERO) H = -H X0I = XSAVE0 + I V(X0I) = XI + H 160 CONTINUE CALL CALCA(N, P, L, V(XSAVE1), IV(NFGCAL), V(DA1), 1 UIPARM, URPARM, UFPARM) IF (IV(NFGCAL) .GT. 0) GO TO 170 IV(TOOBIG) = 1 GO TO 130 170 JN1 = IN1 DO 180 I = IN1, IN2 180 IV(I) = 0 PARTJ = IV(MODE) .LE. P DO 220 I1 = GRP1, GRP2 I = IV(I1) DO 210 J1 = 1, L1 IF (INC(J1,I) .EQ. 0) GO TO 210 INI = IN0 + 2*J1 IV(INI) = I IV(INI+1) = J1 X0I = XSAVE0 + I H = ONE / (V(X0I) - ALF(I)) DAJ = DA0 + J1*N IF (PARTJ) GO TO 190 C *** FULL FINITE DIFFERENCE FOR COV. AND REG. DIAG. *** AJ = A0 + J1*N CALL DV2AXY(N, V(DAJ), NEGONE, V(AJ), V(DAJ)) GO TO 200 190 IF (J1 .GT. L) 1 CALL DV2AXY(N, V(DAJ), NEGONE, V(RSAVE0), V(DAJ)) 200 CALL DV7SCL(N, V(DAJ), H, V(DAJ)) 210 CONTINUE 220 CONTINUE IF (K .GE. NG) GO TO 240 IV(1) = -2 CALL DRNSG(V(A1), ALF, C, V(DA1), IV(IN1), IV, L, L1, N, LIV, 1 LV, N, L1, P, V, Y) IF (-2 .NE. IV(1)) GO TO 999 230 CONTINUE 240 IV(1) = 2 GO TO 130 C 999 RETURN C C *** LAST CARD OF DNSF FOLLOWS *** END PyBDSF-1.10.1/src/port3/dnsfb.f000066400000000000000000000242401420247104600157240ustar00rootroot00000000000000 SUBROUTINE DNSFB(N, P, L, ALF, B, C, Y, CALCA, INC, IINC, IV, 1 LIV, LV, V, UIPARM, URPARM, UFPARM) C C *** SOLVE SEPARABLE NONLINEAR LEAST SQUARES USING C *** FINITE-DIFFERENCE DERIVATIVES. C C *** PARAMETER DECLARATIONS *** C INTEGER IINC, L, LIV, LV, N, P C/6 C INTEGER INC(IINC,P), IV(LIV), UIPARM(1) C DOUBLE PRECISION ALF(P), C(L), B(2,P), URPARM(1), V(LV), Y(N) C/7 INTEGER INC(IINC,P), IV(LIV), UIPARM(*) DOUBLE PRECISION ALF(P), C(L), B(2,P), URPARM(*), V(LV), Y(N) C/ EXTERNAL CALCA, UFPARM C C *** PARAMETERS *** C C N (IN) NUMBER OF OBSERVATIONS. C P (IN) NUMBER OF NONLINEAR PARAMETERS TO BE ESTIMATED. C L (IN) NUMBER OF LINEAR PARAMETERS TO BE ESTIMATED. C ALF (I/O) NONLINEAR PARAMETERS. C INPUT = INITIAL GUESS, C OUTPUT = BEST ESTIMATE FOUND. C B (IN) SIMBLE BOUNDS ON ALF.. B(1,I) .LE. ALF(I) .LE. B(2,I). C C (OUT) LINEAR PARAMETERS (ESTIMATED). C Y (IN) RIGHT-HAND SIDE VECTOR. C CALCA (IN) SUBROUTINE TO COMPUTE A MATRIX. C INC (IN) INCIDENCE MATRIX OF DEPENDENCIES OF COLUMNS OF A ON C COMPONENTS OF ALF -- INC(I,J) = 1 MEANS COLUMN I C OF A DEPENDS ON ALF(J). C IINC (IN) DECLARED LEAD DIMENSION OF INC. MUST BE AT LEAST L+1. C IV (I/O) INTEGER PARAMETER AND SCRATCH VECTOR. C LIV (IN) LENGTH OF IV. MUST BE AT LEAST C 122 + 2*M + 7*P + 2*L + MAX(L+1,6*P), WHERE M IS C THE NUMBER OF ONES IN INC. C LV (IN) LENGTH OF V. MUST BE AT LEAST C 105 + N*(2*L+6+P) + L*(L+3)/2 + P*(2*P + 22). C IF THE LAST ROW OF INC CONTAINS ONLY ZEROS, THEN LV C CAN BE 4*N LESS THAN JUST DESCRIBED. C V (I/O) FLOATING-POINT PARAMETER AND SCRATCH VECTOR. C UIPARM (I/O) INTEGER VECTOR PASSED WITHOUT CHANGE TO CALCA. C URPARM (I/O) FLOATING-POINT VECTOR PASSED WITHOUT CHANGE TO CALCA. C UFPARM (I/O) SUBROUTINE PASSED (WITHOUT HAVING BEEN CALLED) TO CALCA. C C C-------------------------- DECLARATIONS ---------------------------- C C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DIVSET, DSM, DRNSGB,DV2AXY,DV7CPY, DV7SCL C C DIVSET.... PROVIDES DEFAULT IV AND V VALUES. C DSM...... DETERMINES EFFICIENT ORDER FOR FINITE DIFFERENCES. C DRNSGB... CARRIES OUT NL2SOL ALGORITHM. C DV2AXY.... ADDS A MULTIPLE OF ONE VECTOR TO ANOTHER. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7SCL... SCALES AND COPIES ONE VECTOR TO ANOTHER. C C *** LOCAL VARIABLES *** C LOGICAL PARTJ INTEGER A0, A1, AJ, ALP1, BWA1, D0, DA0, DA1, DAJ, GPTR1, GRP1, 1 GRP2, I, I1, IN0, IN1, IN2, INI, INLEN, IPNTR1, IV1, IWA1, 2 IWALEN, J1, JN1, JPNTR1, K, L1, LP1, M, M0, NF, NG, NGRP0, 3 NGRP1, NGRP2, RSAVE0, RSAVE1, RSVLEN, X0I, XSAVE0, XSAVE1 DOUBLE PRECISION DELTA, DI, H, XI, XI1 DOUBLE PRECISION NEGONE, ONE, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AMAT, COVREQ, D, DAMAT, DLTFDJ, GPTR, GRP, IN, IVNEED, 1 L1SAV, MAXGRP, MODE, MSAVE, NEXTIV, NEXTV, NFCALL, NFGCAL, 2 PERM, RESTOR, TOOBIG, VNEED, XSAVE C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AMAT/113/, COVREQ/15/, D/27/, DAMAT/114/, DLTFDJ/43/, C 1 GPTR/117/, GRP/118/, IN/112/, IVNEED/3/, L1SAV/111/, C 2 MAXGRP/116/, MODE/35/, MSAVE/115/, NEXTIV/46/, NEXTV/47/, C 3 NFCALL/6/, NFGCAL/7/, PERM/58/, RESTOR/9/, TOOBIG/2/, C 4 VNEED/4/, XSAVE/119/ C/7 PARAMETER (AMAT=113, COVREQ=15, D=27, DAMAT=114, DLTFDJ=43, 1 GPTR=117, GRP=118, IN=112, IVNEED=3, L1SAV=111, 2 MAXGRP=116, MODE=35, MSAVE=115, NEXTIV=46, NEXTV=47, 3 NFCALL=6, NFGCAL=7, PERM=58, RESTOR=9, TOOBIG=2, 4 VNEED=4, XSAVE=119) C/ DATA NEGONE/-1.D+0/, ONE/1.D+0/, ZERO/0.D+0/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C LP1 = L + 1 IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) IF (P .LE. 0 .OR. L .LT. 0 .OR. IINC .LE. L) GO TO 80 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 120 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 120 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 50 C C *** FRESH START *** C IF (IV(PERM) .LE. XSAVE) IV(PERM) = XSAVE + 1 C C *** CHECK INC, COUNT ITS NONZEROS C L1 = 0 M = 0 DO 40 I = 1, P IF (B(1,I) .GE. B(2,I)) GO TO 40 M0 = M IF (L .EQ. 0) GO TO 20 DO 10 K = 1, L IF (INC(K,I) .LT. 0 .OR. INC(K,I) .GT. 1) GO TO 80 IF (INC(K,I) .EQ. 1) M = M + 1 10 CONTINUE 20 IF (INC(LP1,I) .NE. 1) GO TO 30 M = M + 1 L1 = 1 GO TO 40 30 IF (M .EQ. M0 .OR. INC(LP1,I) .LT. 0 1 .OR. INC(LP1,I) .GT. 1) GO TO 80 40 CONTINUE C C *** NOW L1 = 1 MEANS A HAS COLUMN L+1 *** C C *** COMPUTE STORAGE REQUIREMENTS *** C IWALEN = MAX0(LP1, 6*P) INLEN = 2 * M IV(IVNEED) = IV(IVNEED) + INLEN + 3*P + L + IWALEN + 3 RSVLEN = 2 * L1 * N L1 = L + L1 IV(VNEED) = IV(VNEED) + 2*N*L1 + RSVLEN + P C 50 CALL DRNSGB(V, ALF, B, C, V, IV, IV, L, 1, N, LIV, LV, N, M, P, V, 1 Y) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IN) = IV(NEXTIV) IV(AMAT) = IV(NEXTV) IV(DAMAT) = IV(AMAT) + N*L1 IV(XSAVE) = IV(DAMAT) + N*L1 IV(NEXTV) = IV(XSAVE) + P + RSVLEN IV(L1SAV) = L1 IV(MSAVE) = M C C *** DETERMINE HOW MANY GROUPS FOR FINITE DIFFERENCES C *** (SET UP TO CALL DSM) C IN1 = IV(IN) JN1 = IN1 + M DO 70 K = 1, P IF (B(1,K) .GE. B(2,K)) GO TO 70 DO 60 I = 1, LP1 IF (INC(I,K) .EQ. 0) GO TO 60 IV(IN1) = I IN1 = IN1 + 1 IV(JN1) = K JN1 = JN1 + 1 60 CONTINUE 70 CONTINUE IN1 = IV(IN) JN1 = IN1 + M IWA1 = IN1 + INLEN NGRP1 = IWA1 + IWALEN BWA1 = NGRP1 + P IPNTR1 = BWA1 + P JPNTR1 = IPNTR1 + L + 2 CALL DSM(LP1, P, M, IV(IN1), IV(JN1), IV(NGRP1), NG, K, I, 1 IV(IPNTR1), IV(JPNTR1), IV(IWA1), IWALEN, IV(BWA1)) IF (I .EQ. 1) GO TO 90 IV(1) = 69 GO TO 50 80 IV(1) = 66 GO TO 50 C C *** SET UP GRP AND GPTR ARRAYS FOR COMPUTING FINITE DIFFERENCES C C *** THERE ARE NG GROUPS. GROUP I CONTAINS ALF(GRP(J)) FOR C *** GPTR(I) .LE. J .LE. GPTR(I+1)-1. C 90 IV(MAXGRP) = NG IV(GPTR) = IN1 + 2*L1 GPTR1 = IV(GPTR) IV(GRP) = GPTR1 + NG + 1 IV(NEXTIV) = IV(GRP) + P GRP1 = IV(GRP) NGRP0 = NGRP1 - 1 NGRP2 = NGRP0 + P DO 110 I = 1, NG IV(GPTR1) = GRP1 GPTR1 = GPTR1 + 1 DO 100 I1 = NGRP1, NGRP2 IF (IV(I1) .NE. I) GO TO 100 K = I1 - NGRP0 IF (B(1,K) .GE. B(2,K)) GO TO 100 IV(GRP1) = K GRP1 = GRP1 + 1 100 CONTINUE 110 CONTINUE IV(GPTR1) = GRP1 IF (IV1 .EQ. 13) GO TO 999 C C *** INITIALIZE POINTERS *** C 120 A1 = IV(AMAT) A0 = A1 - N DA1 = IV(DAMAT) DA0 = DA1 - N IN1 = IV(IN) IN0 = IN1 - 2 L1 = IV(L1SAV) IN2 = IN1 + 2*L1 - 1 D0 = IV(D) - 1 NG = IV(MAXGRP) XSAVE1 = IV(XSAVE) XSAVE0 = XSAVE1 - 1 RSAVE1 = XSAVE1 + P RSAVE0 = RSAVE1 + N ALP1 = A1 + L*N DELTA = V(DLTFDJ) IV(COVREQ) = -IABS(IV(COVREQ)) C 130 CALL DRNSGB(V(A1), ALF, B, C, V(DA1), IV(IN1), IV, L, L1, N, LIV, 1 LV, N, L1, P, V, Y) IF (IV(1)-2) 140, 150, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 140 NF = IV(NFCALL) CALL CALCA(N, P, L, ALF, NF, V(A1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 IF (L1 .LE. L) GO TO 130 IF (IV(RESTOR) .EQ. 2) CALL DV7CPY(N, V(RSAVE0), V(RSAVE1)) CALL DV7CPY(N, V(RSAVE1), V(ALP1)) GO TO 130 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 150 IF (L1 .GT. L .AND. IV(NFGCAL) .EQ. IV(NFCALL)) 1 CALL DV7CPY(N, V(RSAVE0), V(RSAVE1)) GPTR1 = IV(GPTR) DO 260 K = 1, NG CALL DV7CPY(P, V(XSAVE1), ALF) GRP1 = IV(GPTR1) GRP2 = IV(GPTR1+1) - 1 GPTR1 = GPTR1 + 1 DO 180 I1 = GRP1, GRP2 I = IV(I1) XI = ALF(I) J1 = D0 + I DI = V(J1) IF (DI .LE. ZERO) DI = ONE H = DELTA * DMAX1(DABS(XI), ONE/DI) IF (XI .LT. ZERO) GO TO 160 XI1 = XI + H IF (XI1 .LE. B(2,I)) GO TO 170 XI1 = XI - H IF (XI1 .GE. B(1,I)) GO TO 170 GO TO 190 160 XI1 = XI - H IF (XI1 .GE. B(1,I)) GO TO 170 XI1 = XI + H IF (XI1 .LE. B(2,I)) GO TO 170 GO TO 190 170 X0I = XSAVE0 + I V(X0I) = XI1 180 CONTINUE CALL CALCA(N, P, L, V(XSAVE1), NF, V(DA1), UIPARM, URPARM, 1 UFPARM) IF (IV(NFGCAL) .GT. 0) GO TO 200 190 IV(TOOBIG) = 1 GO TO 130 200 JN1 = IN1 DO 210 I = IN1, IN2 210 IV(I) = 0 PARTJ = IV(MODE) .LE. P DO 250 I1 = GRP1, GRP2 I = IV(I1) DO 240 J1 = 1, L1 IF (INC(J1,I) .EQ. 0) GO TO 240 INI = IN0 + 2*J1 IV(INI) = I IV(INI+1) = J1 X0I = XSAVE0 + I H = ONE / (V(X0I) - ALF(I)) DAJ = DA0 + J1*N IF (PARTJ) GO TO 220 C *** FULL FINITE DIFFERENCE FOR COV. AND REG. DIAG. *** AJ = A0 + J1*N CALL DV2AXY(N, V(DAJ), NEGONE, V(AJ), V(DAJ)) GO TO 230 220 IF (J1 .GT. L) 1 CALL DV2AXY(N, V(DAJ), NEGONE, V(RSAVE0), V(DAJ)) 230 CALL DV7SCL(N, V(DAJ), H, V(DAJ)) 240 CONTINUE 250 CONTINUE IF (K .GE. NG) GO TO 270 IV(1) = -2 CALL DRNSGB(V(A1), ALF, B, C, V(DA1), IV(IN1), IV, L, L1, N, 1 LIV, LV, N, L1, P, V, Y) IF (-2 .NE. IV(1)) GO TO 999 260 CONTINUE 270 IV(1) = 2 GO TO 130 C 999 RETURN C C *** LAST CARD OF DNSFB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dnsg.f000066400000000000000000000312661420247104600155710ustar00rootroot00000000000000 SUBROUTINE DNSG(N, P, L, ALF, C, Y, CALCA, CALCB, INC, IINC, IV, 1 LIV, LV, V, UIPARM, URPARM, UFPARM) C C *** SOLVE SEPARABLE NONLINEAR LEAST SQUARES USING *** C *** ANALYTICALLY COMPUTED DERIVATIVES. *** C C *** PARAMETER DECLARATIONS *** C INTEGER IINC, L, LIV, LV, N, P C/6 C INTEGER INC(IINC,P), IV(LIV), UIPARM(1) C DOUBLE PRECISION ALF(P), C(L), URPARM(1), V(LV), Y(N) C/7 INTEGER INC(IINC,P), IV(LIV), UIPARM(*) DOUBLE PRECISION ALF(P), C(L), URPARM(*), V(LV), Y(N) C/ EXTERNAL CALCA, CALCB, UFPARM C C *** PURPOSE *** C C GIVEN A SET OF N OBSERVATIONS Y(1)....Y(N) OF A DEPENDENT VARIABLE C T(1)...T(N), DNSG ATTEMPTS TO COMPUTE A LEAST SQUARES FIT C TO A FUNCTION ETA (THE MODEL) WHICH IS A LINEAR COMBINATION C C L C ETA(C,ALF,T) = SUM C * PHI(ALF,T) +PHI (ALF,T) C J=1 J J L+1 C C OF NONLINEAR FUNCTIONS PHI(J) DEPENDENT ON T AND ALF(1),...,ALF(P) C (.E.G. A SUM OF EXPONENTIALS OR GAUSSIANS). THAT IS, IT DETERMINES C NONLINEAR PARAMETERS ALF WHICH MINIMIZE C C 2 N 2 C NORM(RESIDUAL) = SUM (Y - ETA(C,ALF,T )). C I=1 I I C C THE (L+1)ST TERM IS OPTIONAL. C C-------------------------- PARAMETER USAGE ------------------------- C C INPUT PARAMETERS C C N INTEGER NUMBER OF OBSERVATIONS (MUST BE .GE. MAX(L,P)). C C P INTEGER NUMBER OF NONLINEAR PARAMETERS (MUST BE .GE. 1). C C L INTEGER NUMBER OF LINEAR PARAMETERS (MUST BE .GE. 0). C C ALF D.P. ARRAY P VECTOR = INITIAL ESTIMATE OF THE NONLINEAR C PARAMETERS. C C CALCA SUBROUTINE USER PROVIDED FUNCTION TO CALCULATE THE MODEL C (I.E., TO CALCULATE PHI) -- SEE THE NOTE BELOW C ON THE CALLING SEQUENCE FOR CALCA. C CALCA MUST BE DECLARED EXTERNAL IN THE CALLING C PROGRAM. C C CALCB SUBROUTINE USER PROVIDED FUNCTION TO CALCULATE THE DERIVA- C TIVE OF THE MODEL (I.E., OF PHI) WITH RESPECT TO C ALF -- SEE THE NOTE BELOW ON THE CALLING C SEQUENCE FOR CALCB. CALCB MUST BE DECLARED C EXTERNAL IN THE CALLING PROGRAM. C C Y D.P. ARRAY VECTOR OF OBSERVATIONS. C C INC INTEGER ARRAY A 2 DIM. ARRAY OF DIMENSION AT LEAST (L+1,P) C INDICATING THE POSITION OF THE NONLINEAR PARA- C METERS IN THE MODEL. SET INC(J,K) = 1 IF ALF(K) C APPEARS IN PHI(J). OTHERWISE SET INC(J,K) = 0. C IF PHI((L+1)) IS NOT IN THE MODEL, SET THE L+1ST C ROW OF INC TO ALL ZEROS. EVERY COLUMN OF INC C MUST CONTAIN AT LEAST ONE 1. C C IINC INTEGER DECLARED ROW DIMENSION OF INC, WHICH MUST BE AT C LEAST L+1. C C IV INTEGER ARRAY OF LENGTH AT LEAST LIV THAT CONTAINS C VARIOUS PARAMETERS FOR THE SUBROUTINE, SUCH AS C THE ITERATION AND FUNCTION EVALUATION LIMITS AND C SWITCHES THAT CONTROL PRINTING. THE INPUT COM- C PONENTS OF IV ARE DESCRIBED IN DETAIL IN THE C PORT OPTIMIZATION DOCUMENTATION. C IF IV(1)=0 ON INPUT, THEN DEFAULT PARAMETERS C ARE SUPPLIED TO IV AND V. THE CALLER MAY SUPPLY C NONDEFAULT PARAMETERS TO IV AND V BY EXECUTING A C CALL DIVSET(1,IV,LIV,LV,V) AND THEN ASSIGNING C NONDEFAULT VALUES TO THE APPROPRIATE COMPONENTS C OF IV AND V BEFORE CALLING DNSG. C C LIV INTEGER LENGTH OF IV. MUST BE AT LEAST 115+P+L + 2*M, C WHERE M IS THE NUMBER OF ONES IN INC. C C LV INTEGER LENGTH OF V. MUST BE AT LEAST C 105 + N*(L+M+3) + JLEN + L*(L+3)/2 + P*(2*P+17), C WHERE M IS AS FOR LIV (SEE ABOVE) AND C JLEN = (L+P)*(N+L+P+1), UNLESS NEITHER A C COVARIANCE MATRIX NOR REGRESSION DIAGNOSTICS ARE C REQUESTED, IN WHICH CASE JLEN = N*P. IF THE C LAST ROW OF INC CONTAINS ONLY ZEROS, THEN LV C CAN BE N LESS THAN JUST DESCRIBED. C C V D.P. ARRAY WORK AND PARAMETER ARRAY OF LENGTH AT LEAST LV C THAT CONTAINS SUCH INPUT COMPONENTS AS THE C CONVERGENCE TOLERANCES. THE INPUT COMPONENTS OF C V MAY BE SUPPLIED AS FOR IV (SEE ABOVE). NOTE C THAT V(35) CONTAINS THE INITIAL STEP BOUND, C WHICH, IF TOO LARGE, MAY LEAD TO OVERFLOW. C C UIPARM INTEGER ARRAY SCRATCH SPACE FOR USER TO SEND INFORMATION C TO CALCA AND CALCB. C C URPARM D.P. ARRAY SCRATCH SPACE FOR USER TO SEND INFORMATION C TO CALCA AND CALCB. C C UFPARM EXTERNAL SUBROUTINE SENT TO CALCA AND CALCB FOR THEIR C USE. NOTE THAT THE SUBROUTINE PASSED FOR UFPARM C MUST BE DECLARED EXTERNAL IN THE CALLING PROGRAM. C C C OUTPUT PARAMETERS C C ALF D.P. ARRAY FINAL NONLINEAR PARAMETERS. C C C D.P. ARRAY L VECTOR OF LINEAR PARAMETERS -- NOTE THAT NO C INITIAL GUESS FOR C IS REQUIRED. C C IV IV(1) CONTAINS A RETURN CODE DESCRIBED IN THE C PORT OPTIMIZATION DOCUMENTATION. IF IV(1) LIES C BETWEEN 3 AND 7, THEN THE ALGORITHM HAS C CONVERGED (BUT IV(1) = 7 INDICATES POSSIBLE C TROUBLE WITH THE MODEL). IV(1) = 9 OR 10 MEANS C FUNCTION EVALUATION OR ITERATION LIMIT REACHED. C IV(1) = 66 MEANS BAD PARAMETERS (INCLUDING A C COLUMN OF ZEROS IN INC). NOTE THAT THE C ALGORITHM CAN BE RESTARTED AFTER ANY RETURN WITH C IV(1) .LT. 12 -- SEE THE PORT DOCUMENTATION. C C V VARIOUS ITEMS OF INTEREST, INCLUDING THE NORM OF C THE GRADIENT(1) AND THE FUNCTION VALUE(10). SEE C THE PORT DOCUMENTATION FOR A COMPLETE LIST. IF C A COVARIANCE ESTIMATE IS REQUESTED, IT IS FOR C (ALF,C) -- NONLINEAR PARAMETERS ORDERED FIRST, C FOLLOWED BY LINEAR PARAMETERS. C C C C PARAMETERS FOR CALCA(N,P,L,ALF,NF,PHI, UIPARM,URPARM,UFPARM) C C N,L,P,ALF ARE INPUT PARAMETERS AS DESCRIBED ABOVE C C PHI D.P. ARRAY N*(L+1) ARRAY WHOSE COLUMNS CONTAIN THE TERMS OF C THE MODEL. CALCA MUST EVALUATE PHI(ALF) AND STORE C THE RESULT IN PHI. IF THE (L+1)ST TERM IS NOT IN C THE MODEL, THEN NOTHING SHOULD BE STORED IN THE C (L+1)ST COLUMN OF PHI. C C NF INTEGER CURRENT INVOCATION COUNT FOR CALCA. IF PHI CANNOT C BE EVALUATED AT ALF (E.G. BECAUSE AN ARGUMENT TO C AN INTRINSIC FUNCTION IS OUT OF RANGE), THEN CALCA C SHOULD SIMPLY SET NF TO 0 AND RETURN. THIS C TELLS THE ALGORITHM TO TRY A SMALLER STEP. C C UIPARM,URPARM,UFPARM ARE AS DESCRIBED ABOVE C C N.B. THE DEPENDENT VARIABLE T IS NOT EXPLICITLY PASSED. IF REQUIRED, C IT MAY BE PASSED IN UIPARM OR URPARM OR STORED IN NAMED COMMON. C C C PARAMETERS FOR CALCB(N,P,L,ALF,NF,DER, UIPARM,URPARM,UFPARM) C C N,P,L,ALF,NF,UIPARM,URPARM,UFPARM ARE AS FOR CALCA C C DER D.P. ARRAY N*M ARRAY, WHERE M IS THE NUMBER OF ONES IN INC. C CALCB MUST SET DER TO THE DERIVATIVES OF THE MODEL C WITH RESPECT TO ALF. IF THE MODEL HAS K TERMS THAT C DEPEND ON ALF(I), THEN DER WILL HAVE K CONSECUTIVE C COLUMNS OF DERIVATIVES WITH RESPECT TO ALF(I). THE C COLUMNS OF DER CORRESPOND TO THE ONES IN INC WHEN C ONE TRAVELS THROUGH INC BY COLUMNS. FOR EXAMPLE, C IF INC HAS THE FORM... C 1 1 0 C 0 1 0 C 1 0 0 C 0 0 1 C THEN THE FIRST TWO COLUMNS OF DER ARE FOR THE C DERIVATIVES OF COLUMNS 1 AND 3 OF PHI WITH RESPECT C TO ALF(1), COLUMNS 3 AND 4 OF DER ARE FOR THE C DERIVATIVES OF COLUMNS 1 AND 2 OF PHI WITH RESPECT C TO ALF(2), AND COLUMN 5 OF DER IS FOR THE DERIVA- C TIVE OF COLUMN 4 OF PHI WITH RESPECT TO ALF(3). C MORE SPECIFICALLY, DER(I,2) IS FOR THE DERIVATIVE C OF PHI(I,3) WITH RESPECT TO ALF(1) AND DER(I,5) IS C FOR THE DERIVATIVE OF PHI(I,4) WITH RESPECT TO C ALF(3) (FOR I = 1,2,...,N). C THE VALUE OF ALF PASSED TO CALCB IS THE SAME AS C THAT PASSED TO CALCA THE LAST TIME IT WAS CALLED. C (IF DER CANNOT BE EVALUATED, THEN CALCB SHOULD SET C NF TO 0. THIS WILL CAUSE AN ERROR RETURN.) C C N.B. DER IS FOR DERIVATIVES WITH RESPECT TO ALF, NOT T. C C------------------------------ NOTES ------------------------------- C C THIS PROGRAM WAS WRITTEN BY LINDA KAUFMAN AT BELL LABS, MURRAY C HILL, N.J. IN 1977 AND EXTENSIVELY REVISED BY HER AND DAVID GAY IN C 1980, 1981, 1983, 1984. THE WORK OF DAVID GAY WAS SUPPORTED IN PART C BY NATIONAL SCIENCE FOUNDATION GRANT MCS-7906671. C C-------------------------- DECLARATIONS ---------------------------- C C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DIVSET, DRNSG C C DIVSET.... PROVIDES DEFAULT IV AND V VALUES. C DRNSG... CARRIES OUT NL2SOL ALGORITHM. C C *** LOCAL VARIABLES *** C INTEGER A1, DA1, I, IN1, IV1, K, L1, LP1, M, M0, NF C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AMAT, DAMAT, IN, IVNEED, L1SAV, MSAVE, NEXTIV, 1 NEXTV, NFCALL, NFGCAL, PERM, TOOBIG, VNEED C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AMAT/113/, DAMAT/114/, IN/112/, IVNEED/3/, L1SAV/111/, C 1 MSAVE/115/, NEXTIV/46/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, C 2 PERM/58/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (AMAT=113, DAMAT=114, IN=112, IVNEED=3, L1SAV=111, 1 MSAVE=115, NEXTIV=46, NEXTV=47, NFCALL=6, NFGCAL=7, 2 PERM=58, TOOBIG=2, VNEED=4) C/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) IF (P .LE. 0 .OR. L .LT. 0 .OR. IINC .LE. L) GO TO 50 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 90 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 90 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 60 IF (IV(PERM) .LE. MSAVE) IV(PERM) = MSAVE + 1 LP1 = L + 1 L1 = 0 M = 0 DO 40 I = 1, P M0 = M IF (L .EQ. 0) GO TO 20 DO 10 K = 1, L IF (INC(K,I) .LT. 0 .OR. INC(K,I) .GT. 1) GO TO 50 IF (INC(K,I) .EQ. 1) M = M + 1 10 CONTINUE 20 IF (INC(LP1,I) .NE. 1) GO TO 30 M = M + 1 L1 = 1 30 IF (M .EQ. M0 .OR. INC(LP1,I) .LT. 0 1 .OR. INC(LP1,I) .GT. 1) GO TO 50 40 CONTINUE C IV(IVNEED) = IV(IVNEED) + 2*M L1 = L + L1 IV(VNEED) = IV(VNEED) + N*(L1+M) GO TO 60 C 50 IV(1) = 66 C 60 CALL DRNSG(V, ALF, C, V, IV, IV, L, 1, N, LIV, LV, N, M, P, V, Y) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IN) = IV(NEXTIV) IV(NEXTIV) = IV(IN) + 2*M IV(AMAT) = IV(NEXTV) IV(DAMAT) = IV(AMAT) + N*L1 IV(NEXTV) = IV(DAMAT) + N*M IV(L1SAV) = L1 IV(MSAVE) = M C C *** SET UP IN ARRAY *** C IN1 = IV(IN) DO 80 I = 1, P DO 70 K = 1, LP1 IF (INC(K,I) .EQ. 0) GO TO 70 IV(IN1) = I IV(IN1+1) = K IN1 = IN1 + 2 70 CONTINUE 80 CONTINUE IF (IV1 .EQ. 13) GO TO 999 C 90 A1 = IV(AMAT) DA1 = IV(DAMAT) IN1 = IV(IN) L1 = IV(L1SAV) M = IV(MSAVE) C 100 CALL DRNSG(V(A1), ALF, C, V(DA1), IV(IN1), IV, L, L1, N, LIV, LV, 1 N, M, P, V, Y) IF (IV(1)-2) 110, 120, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 110 NF = IV(NFCALL) CALL CALCA(N, P, L, ALF, NF, V(A1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 100 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 120 CALL CALCB(N, P, L, ALF, IV(NFGCAL), V(DA1), UIPARM, URPARM, 1 UFPARM) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 GO TO 100 C 999 RETURN C C *** LAST CARD OF DNSG FOLLOWS *** END PyBDSF-1.10.1/src/port3/dnsgb.f000066400000000000000000000307061420247104600157310ustar00rootroot00000000000000 SUBROUTINE DNSGB(N, P, L, ALF, B, C, Y, CALCA, CALCB, INC, IINC, 1 IV, LIV, LV, V, UIPARM, URPARM, UFPARM) C C *** SOLVE SEPARABLE NONLINEAR LEAST SQUARES USING *** C *** ANALYTICALLY COMPUTED DERIVATIVES. *** C C *** PARAMETER DECLARATIONS *** C INTEGER IINC, L, LIV, LV, N, P C/6 C INTEGER INC(IINC,P), IV(LIV), UIPARM(1) C DOUBLE PRECISION ALF(P), B(2,P), C(L), URPARM(1), V(LV), Y(N) C/7 INTEGER INC(IINC,P), IV(LIV), UIPARM(*) DOUBLE PRECISION ALF(P), B(2,P), C(L), URPARM(*), V(LV), Y(N) C/ EXTERNAL CALCA, CALCB, UFPARM C C *** PURPOSE *** C C GIVEN A SET OF N OBSERVATIONS Y(1)....Y(N) OF A DEPENDENT VARIABLE C T(1)...T(N), DNSGB ATTEMPTS TO COMPUTE A LEAST SQUARES FIT C TO A FUNCTION ETA (THE MODEL) WHICH IS A LINEAR COMBINATION C C L C ETA(C,ALF,T) = SUM C * PHI(ALF,T) +PHI (ALF,T) C J=1 J J L+1 C C OF NONLINEAR FUNCTIONS PHI(J) DEPENDENT ON T AND ALF(1),...,ALF(P) C (.E.G. A SUM OF EXPONENTIALS OR GAUSSIANS). THAT IS, IT DETERMINES C NONLINEAR PARAMETERS ALF WHICH MINIMIZE C C 2 N 2 C NORM(RESIDUAL) = SUM (Y - ETA(C,ALF,T )) , C I=1 I I C C SUBJECT TO THE SIMPLE BOUND CONSTRAINTS C B(1,I) .LE. ALF(I) .LE. B(2,I), C I = 1(1)P. C C THE (L+1)ST TERM IS OPTIONAL. C C-------------------------- PARAMETER USAGE ------------------------- C C INPUT PARAMETERS C C N INTEGER NUMBER OF OBSERVATIONS (MUST BE .GE. MAX(L,P)). C C P INTEGER NUMBER OF NONLINEAR PARAMETERS (MUST BE .GE. 1). C C L INTEGER NUMBER OF LINEAR PARAMETERS (MUST BE .GE. 0). C C ALF D.P. ARRAY P VECTOR = INITIAL ESTIMATE OF THE NONLINEAR C PARAMETERS. C C CALCA SUBROUTINE USER PROVIDED FUNCTION TO CALCULATE THE MODEL C (I.E., TO CALCULATE PHI) -- SEE THE NOTE BELOW C ON THE CALLING SEQUENCE FOR CALCA. C CALCA MUST BE DECLARED EXTERNAL IN THE CALLING C PROGRAM. C C CALCB SUBROUTINE USER PROVIDED FUNCTION TO CALCULATE THE DERIVA- C TIVE OF THE MODEL (I.E., OF PHI) WITH RESPECT TO C ALF -- SEE THE NOTE BELOW ON THE CALLING C SEQUENCE FOR CALCB. CALCB MUST BE DECLARED C EXTERNAL IN THE CALLING PROGRAM. C C Y D.P. ARRAY VECTOR OF OBSERVATIONS. C C INC INTEGER ARRAY A 2 DIM. ARRAY OF DIMENSION AT LEAST (L+1,P) C INDICATING THE POSITION OF THE NONLINEAR PARA- C METERS IN THE MODEL. SET INC(J,K) = 1 IF ALF(K) C APPEARS IN PHI(J). OTHERWISE SET INC(J,K) = 0. C IF PHI((L+1)) IS NOT IN THE MODEL, SET THE L+1ST C ROW OF INC TO ALL ZEROS. EVERY COLUMN OF INC C MUST CONTAIN AT LEAST ONE 1. C C IINC INTEGER DECLARED ROW DIMENSION OF INC, WHICH MUST BE AT C LEAST L+1. C C IV INTEGER ARRAY OF LENGTH AT LEAST LIV THAT CONTAINS C VARIOUS PARAMETERS FOR THE SUBROUTINE, SUCH AS C THE ITERATION AND FUNCTION EVALUATION LIMITS AND C SWITCHES THAT CONTROL PRINTING. THE INPUT COM- C PONENTS OF IV ARE DESCRIBED IN DETAIL IN THE C PORT OPTIMIZATION DOCUMENTATION. C IF IV(1)=0 ON INPUT, THEN DEFAULT PARAMETERS C ARE SUPPLIED TO IV AND V. THE CALLER MAY SUPPLY C NONDEFAULT PARAMETERS TO IV AND V BY EXECUTING A C CALL DIVSET(1,IV,LIV,LV,V) AND THEN ASSIGNING C NONDEFAULT VALUES TO THE APPROPRIATE COMPONENTS C OF IV AND V BEFORE CALLING DNSGB. C C LIV INTEGER LENGTH OF IV. MUST BE AT LEAST C 115 + 4*P + L + 2*M, C WHERE M IS THE NUMBER OF ONES IN INC. C C LV INTEGER LENGTH OF V. MUST BE AT LEAST C 105 + N*(L+M+P+3) + L*(L+3)/2 + P*(2*P+21), C WHERE M IS AS FOR LIV (SEE ABOVE). IF THE C LAST ROW OF INC CONTAINS ONLY ZEROS, THEN LV C CAN BE N LESS THAN JUST DESCRIBED. C C V D.P. ARRAY WORK AND PARAMETER ARRAY OF LENGTH AT LEAST LV C THAT CONTAINS SUCH INPUT COMPONENTS AS THE C CONVERGENCE TOLERANCES. THE INPUT COMPONENTS OF C V MAY BE SUPPLIED AS FOR IV (SEE ABOVE). NOTE C THAT V(35) CONTAINS THE INITIAL STEP BOUND, C WHICH, IF TOO LARGE, MAY LEAD TO OVERFLOW. C C UIPARM INTEGER ARRAY SCRATCH SPACE FOR USER TO SEND INFORMATION C TO CALCA AND CALCB. C C URPARM D.P. ARRAY SCRATCH SPACE FOR USER TO SEND INFORMATION C TO CALCA AND CALCB. C C UFPARM EXTERNAL SUBROUTINE SENT TO CALCA AND CALCB FOR THEIR C USE. NOTE THAT THE SUBROUTINE PASSED FOR UFPARM C MUST BE DECLARED EXTERNAL IN THE CALLING PROGRAM. C C C OUTPUT PARAMETERS C C ALF D.P. ARRAY FINAL NONLINEAR PARAMETERS. C C C D.P. ARRAY L VECTOR OF LINEAR PARAMETERS -- NOTE THAT NO C INITIAL GUESS FOR C IS REQUIRED. C C IV IV(1) CONTAINS A RETURN CODE DESCRIBED IN THE C PORT OPTIMIZATION DOCUMENTATION. IF IV(1) LIES C BETWEEN 3 AND 7, THEN THE ALGORITHM HAS C CONVERGED (BUT IV(1) = 7 INDICATES POSSIBLE C TROUBLE WITH THE MODEL). IV(1) = 9 OR 10 MEANS C FUNCTION EVALUATION OR ITERATION LIMIT REACHED. C IV(1) = 66 MEANS BAD PARAMETERS (INCLUDING A C COLUMN OF ZEROS IN INC). NOTE THAT THE C ALGORITHM CAN BE RESTARTED AFTER ANY RETURN WITH C IV(1) .LT. 12 -- SEE THE PORT DOCUMENTATION. C C V VARIOUS ITEMS OF INTEREST, INCLUDING THE NORM OF C THE GRADIENT(1) AND THE FUNCTION VALUE(10). SEE C THE PORT DOCUMENTATION FOR A COMPLETE LIST. C C C C PARAMETERS FOR CALCA(N,P,L,ALF,NF,PHI, UIPARM,URPARM,UFPARM) C C N,L,P,ALF ARE INPUT PARAMETERS AS DESCRIBED ABOVE C C PHI D.P. ARRAY N*(L+1) ARRAY WHOSE COLUMNS CONTAIN THE TERMS OF C THE MODEL. CALCA MUST EVALUATE PHI(ALF) AND STORE C THE RESULT IN PHI. IF THE (L+1)ST TERM IS NOT IN C THE MODEL, THEN NOTHING SHOULD BE STORED IN THE C (L+1)ST COLUMN OF PHI. C C NF INTEGER CURRENT INVOCATION COUNT FOR CALCA. IF PHI CANNOT C BE EVALUATED AT ALF (E.G. BECAUSE AN ARGUMENT TO C AN INTRINSIC FUNCTION IS OUT OF RANGE), THEN CALCA C SHOULD SIMPLY SET NF TO 0 AND RETURN. THIS C TELLS THE ALGORITHM TO TRY A SMALLER STEP. C C UIPARM,URPARM,UFPARM ARE AS DESCRIBED ABOVE C C N.B. THE DEPENDENT VARIABLE T IS NOT EXPLICITLY PASSED. IF REQUIRED, C IT MAY BE PASSED IN UIPARM OR URPARM OR STORED IN NAMED COMMON. C C C PARAMETERS FOR CALCB(N,P,L,ALF,NF,DER, UIPARM,URPARM,UFPARM) C C N,P,L,ALF,NF,UIPARM,URPARM,UFPARM ARE AS FOR CALCA C C DER D.P. ARRAY N*M ARRAY, WHERE M IS THE NUMBER OF ONES IN INC. C CALCB MUST SET DER TO THE DERIVATIVES OF THE MODEL C WITH RESPECT TO ALF. IF THE MODEL HAS K TERMS THAT C DEPEND ON ALF(I), THEN DER WILL HAVE K CONSECUTIVE C COLUMNS OF DERIVATIVES WITH RESPECT TO ALF(I). THE C COLUMNS OF DER CORRESPOND TO THE ONES IN INC WHEN C ONE TRAVELS THROUGH INC BY COLUMNS. FOR EXAMPLE, C IF INC HAS THE FORM... C 1 1 0 C 0 1 0 C 1 0 0 C 0 0 1 C THEN THE FIRST TWO COLUMNS OF DER ARE FOR THE C DERIVATIVES OF COLUMNS 1 AND 3 OF PHI WITH RESPECT C TO ALF(1), COLUMNS 3 AND 4 OF DER ARE FOR THE C DERIVATIVES OF COLUMNS 1 AND 2 OF PHI WITH RESPECT C TO ALF(2), AND COLUMN 5 OF DER IS FOR THE DERIVA- C TIVE OF COLUMN 4 OF PHI WITH RESPECT TO ALF(3). C MORE SPECIFICALLY, DER(I,2) IS FOR THE DERIVATIVE C OF PHI(I,3) WITH RESPECT TO ALF(1) AND DER(I,5) IS C FOR THE DERIVATIVE OF PHI(I,4) WITH RESPECT TO C ALF(3) (FOR I = 1,2,...,N). C THE VALUE OF ALF PASSED TO CALCB IS THE SAME AS C THAT PASSED TO CALCA THE LAST TIME IT WAS CALLED. C (IF DER CANNOT BE EVALUATED, THEN CALCB SHOULD SET C NF TO 0. THIS WILL CAUSE AN ERROR RETURN.) C C N.B. DER IS FOR DERIVATIVES WITH RESPECT TO ALF, NOT T. C C------------------------------ NOTES ------------------------------- C C THIS PROGRAM WAS WRITTEN BY LINDA KAUFMAN AT BELL LABS, MURRAY C HILL, N.J. IN 1977 AND EXTENSIVELY REVISED BY HER AND DAVID GAY IN C 1980, 1981, 1983, 1984. THE WORK OF DAVID GAY WAS SUPPORTED IN PART C BY NATIONAL SCIENCE FOUNDATION GRANT MCS-7906671. C C-------------------------- DECLARATIONS ---------------------------- C C C *** EXTERNAL SUBROUTINES *** C EXTERNAL DIVSET, DRNSGB C C DIVSET.... PROVIDES DEFAULT IV AND V VALUES. C DRNSGB... CARRIES OUT NL2SOL ALGORITHM. C C *** LOCAL VARIABLES *** C INTEGER A1, DA1, I, IN1, IV1, K, L1, LP1, M, M0, NF C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AMAT, DAMAT, IN, IVNEED, L1SAV, MSAVE, NEXTIV, 1 NEXTV, NFCALL, NFGCAL, PERM, TOOBIG, VNEED C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AMAT/113/, DAMAT/114/, IN/112/, IVNEED/3/, L1SAV/111/, C 1 MSAVE/115/, NEXTIV/46/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, C 2 PERM/58/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (AMAT=113, DAMAT=114, IN=112, IVNEED=3, L1SAV=111, 1 MSAVE=115, NEXTIV=46, NEXTV=47, NFCALL=6, NFGCAL=7, 2 PERM=58, TOOBIG=2, VNEED=4) C/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) IF (P .LE. 0 .OR. L .LT. 0 .OR. IINC .LE. L) GO TO 50 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 90 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 90 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 60 IF (IV(PERM) .LE. MSAVE) IV(PERM) = MSAVE + 1 LP1 = L + 1 L1 = 0 M = 0 DO 40 I = 1, P M0 = M IF (L .EQ. 0) GO TO 20 DO 10 K = 1, L IF (INC(K,I) .LT. 0 .OR. INC(K,I) .GT. 1) GO TO 50 IF (INC(K,I) .EQ. 1) M = M + 1 10 CONTINUE 20 IF (INC(LP1,I) .NE. 1) GO TO 30 M = M + 1 L1 = 1 30 IF (M .EQ. M0 .OR. INC(LP1,I) .LT. 0 1 .OR. INC(LP1,I) .GT. 1) GO TO 50 40 CONTINUE C IV(IVNEED) = IV(IVNEED) + 2*M L1 = L + L1 IV(VNEED) = IV(VNEED) + N*(L1+M) GO TO 60 C 50 IV(1) = 66 C 60 CALL DRNSGB(V, ALF, B, C, V, IV, IV, L, 1, N, LIV, LV, N, M, P, V, 1 Y) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IN) = IV(NEXTIV) IV(NEXTIV) = IV(IN) + 2*M IV(AMAT) = IV(NEXTV) IV(DAMAT) = IV(AMAT) + N*L1 IV(NEXTV) = IV(DAMAT) + N*M IV(L1SAV) = L1 IV(MSAVE) = M C C *** SET UP IN ARRAY *** C IN1 = IV(IN) DO 80 I = 1, P DO 70 K = 1, LP1 IF (INC(K,I) .EQ. 0) GO TO 70 IV(IN1) = I IV(IN1+1) = K IN1 = IN1 + 2 70 CONTINUE 80 CONTINUE IF (IV1 .EQ. 13) GO TO 999 C 90 A1 = IV(AMAT) DA1 = IV(DAMAT) IN1 = IV(IN) L1 = IV(L1SAV) M = IV(MSAVE) C 100 CALL DRNSGB(V(A1), ALF, B, C, V(DA1), IV(IN1), IV, L, L1, N, LIV, 1 LV, N, M, P, V, Y) IF (IV(1)-2) 110, 120, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 110 NF = IV(NFCALL) CALL CALCA(N, P, L, ALF, NF, V(A1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 100 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 120 CALL CALCB(N, P, L, ALF, IV(NFGCAL), V(DA1), UIPARM, URPARM, 1 UFPARM) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 GO TO 100 C 999 RETURN C C *** LAST CARD OF DNSGB FOLLOWS *** END PyBDSF-1.10.1/src/port3/do7prd.f000066400000000000000000000013651420247104600160320ustar00rootroot00000000000000 SUBROUTINE DO7PRD(L, LS, P, S, W, Y, Z) C C *** FOR I = 1..L, SET S = S + W(I)*Y(.,I)*(Z(.,I)**T), I.E., C *** ADD W(I) TIMES THE OUTER PRODUCT OF Y(.,I) AND Z(.,I). C INTEGER L, LS, P DOUBLE PRECISION S(LS), W(L), Y(P,L), Z(P,L) C DIMENSION S(P*(P+1)/2) C INTEGER I, J, K, M DOUBLE PRECISION WK, YI, ZERO DATA ZERO/0.D+0/ C DO 30 K = 1, L WK = W(K) IF (WK .EQ. ZERO) GO TO 30 M = 1 DO 20 I = 1, P YI = WK * Y(I,K) DO 10 J = 1, I S(M) = S(M) + YI*Z(J,K) M = M + 1 10 CONTINUE 20 CONTINUE 30 CONTINUE C 999 RETURN C *** LAST CARD OF DO7PRD FOLLOWS *** END PyBDSF-1.10.1/src/port3/dorthe.f000066400000000000000000000062341420247104600161200ustar00rootroot00000000000000 SUBROUTINE DORTHE(NM,N,LOW,IGH,A,ORT) C INTEGER I,J,M,N,II,JJ,LA,MP,NM,IGH,KP1,LOW DOUBLE PRECISION A(NM,N),ORT(IGH) DOUBLE PRECISION F,G,H,SCALE DOUBLE PRECISION DSQRT C C THIS IS A DOUBLE-PRECISION VERSION OF THE C EISPACK SINGLE-PRECISION ROUTINE ORTHES. C IT WAS ADAPTED BY PHYLLIS FOX, MAY 28, 1975. C C ORTHES IS A TRANSLATION OF THE ALGOL PROCEDURE ORTHES, C NUM. MATH. 12, 349-368(1968) BY MARTIN AND WILKINSON. C HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971). C C GIVEN A REAL (DOUBLE PRECISION) GENERAL MATRIX, THIS SUBROUTINE C REDUCES A SUBMATRIX SITUATED IN ROWS AND COLUMNS C LOW THROUGH IGH TO UPPER HESSENBERG FORM BY C ORTHOGONAL SIMILARITY TRANSFORMATIONS. C C ON INPUT- C C NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL C ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM C DIMENSION STATEMENT, C C N IS THE ORDER OF THE MATRIX, C C LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING C SUBROUTINE BALANC. IF BALANC HAS NOT BEEN USED, C SET LOW=1, IGH=N, C C A CONTAINS THE INPUT MATRIX. C C ON OUTPUT- C C A CONTAINS THE HESSENBERG MATRIX. INFORMATION ABOUT C THE ORTHOGONAL TRANSFORMATIONS USED IN THE REDUCTION C IS STORED IN THE REMAINING TRIANGLE UNDER THE C HESSENBERG MATRIX, C C ORT CONTAINS FURTHER INFORMATION ABOUT THE TRANSFORMATIONS. C ONLY ELEMENTS LOW THROUGH IGH ARE USED. C C C ------------------------------------------------------------------ C LA = IGH - 1 KP1 = LOW + 1 IF (LA .LT. KP1) GO TO 200 C DO 180 M = KP1, LA H = 0.0D0 ORT(M) = 0.0D0 SCALE = 0.0D0 C ********** SCALE COLUMN (ALGOL TOL THEN NOT NEEDED) ********** DO 90 I = M, IGH 90 SCALE = SCALE + DABS(A(I,M-1)) C IF (SCALE .EQ. 0.0D0) GO TO 180 MP = M + IGH C ********** FOR I=IGH STEP -1 UNTIL M DO -- ********** DO 100 II = M, IGH I = MP - II ORT(I) = A(I,M-1) / SCALE H = H + ORT(I) * ORT(I) 100 CONTINUE C G = -DSIGN(DSQRT(H),ORT(M)) H = H - ORT(M) * G ORT(M) = ORT(M) - G C ********** FORM (I-(U*UT)/H) * A ********** DO 130 J = M, N F = 0.0D0 C ********** FOR I=IGH STEP -1 UNTIL M DO -- ********** DO 110 II = M, IGH I = MP - II F = F + ORT(I) * A(I,J) 110 CONTINUE C F = F / H C DO 120 I = M, IGH 120 A(I,J) = A(I,J) - F * ORT(I) C 130 CONTINUE C ********** FORM (I-(U*UT)/H)*A*(I-(U*UT)/H) ********** DO 160 I = 1, IGH F = 0.0D0 C ********** FOR J=IGH STEP -1 UNTIL M DO -- ********** DO 140 JJ = M, IGH J = MP - JJ F = F + ORT(J) * A(I,J) 140 CONTINUE C F = F / H C DO 150 J = M, IGH 150 A(I,J) = A(I,J) - F * ORT(J) C 160 CONTINUE C ORT(M) = SCALE * ORT(M) A(M,M-1) = SCALE * G 180 CONTINUE C 200 RETURN C ********** LAST CARD OF DORTHE ********** END PyBDSF-1.10.1/src/port3/dortra.f000066400000000000000000000050101420247104600161150ustar00rootroot00000000000000 SUBROUTINE DORTRA(NM,N,LOW,IGH,A,ORT,Z) C INTEGER I,J,N,KL,MM,MP,NM,IGH,LOW,MP1 DOUBLE PRECISION A(NM,IGH),ORT(IGH),Z(NM,N) DOUBLE PRECISION G C C THIS IS A DOUBLE-PRECISION VERSION OF THE C EISPACK SINGLE-PRECISION ROUTINE ORTRAN. C IT WAS ADAPTED BY PHYLLIS FOX, MAY 28, 1975. C C ORTRAN IS A TRANSLATION OF THE ALGOL PROCEDURE ORTRANS, C NUM. MATH. 16, 181-204(1970) BY PETERS AND WILKINSON. C HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971). C C THIS SUBROUTINE ACCUMULATES THE ORTHOGONAL SIMILARITY C TRANSFORMATIONS USED IN THE REDUCTION OF A REAL GENERAL C MATRIX TO UPPER HESSENBERG FORM BY DORTHE. C C ON INPUT- C C NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL C ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM C DIMENSION STATEMENT, C C N IS THE ORDER OF THE MATRIX, C C LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING C SUBROUTINE BALANC. IF BALANC HAS NOT BEEN USED, C SET LOW=1, IGH=N, C C A CONTAINS INFORMATION ABOUT THE ORTHOGONAL TRANS- C FORMATIONS USED IN THE REDUCTION BY DORTHE C IN ITS STRICT LOWER TRIANGLE, C C ORT CONTAINS FURTHER INFORMATION ABOUT THE TRANS- C FORMATIONS USED IN THE REDUCTION BY DORTHE. C ONLY ELEMENTS LOW THROUGH IGH ARE USED. C C ON OUTPUT- C C Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED IN THE C REDUCTION BY DORTHE, C C ORT HAS BEEN ALTERED. C C C ------------------------------------------------------------------ C C ********** INITIALIZE Z TO IDENTITY MATRIX ********** DO 80 I = 1, N C DO 60 J = 1, N 60 Z(I,J) = 0.0D0 C Z(I,I) = 1.0D0 80 CONTINUE C KL = IGH - LOW - 1 IF (KL .LT. 1) GO TO 200 C ********** FOR MP=IGH-1 STEP -1 UNTIL LOW+1 DO -- ********** DO 140 MM = 1, KL MP = IGH - MM IF (A(MP,MP-1) .EQ. 0.0D0) GO TO 140 MP1 = MP + 1 C DO 100 I = MP1, IGH 100 ORT(I) = A(I,MP-1) C DO 130 J = MP, IGH G = 0.0D0 C DO 110 I = MP, IGH 110 G = G + ORT(I) * Z(I,J) C ********** DIVISOR BELOW IS NEGATIVE OF H FORMED IN DORTHE. C DOUBLE DIVISION AVOIDS POSSIBLE UNDERFLOW ********** G = (G / ORT(MP)) / A(MP,MP-1) C DO 120 I = MP, IGH 120 Z(I,J) = Z(I,J) + G * ORT(I) C 130 CONTINUE C 140 CONTINUE C 200 RETURN C ********** LAST CARD OF DORTRA ********** END PyBDSF-1.10.1/src/port3/dparck.f000066400000000000000000000273771420247104600161120ustar00rootroot00000000000000 SUBROUTINE DPARCK(ALG, D, IV, LIV, LV, N, V) C C *** CHECK ***SOL (VERSION 2.3) PARAMETERS, PRINT CHANGED VALUES *** C C *** ALG = 1 FOR REGRESSION, ALG = 2 FOR GENERAL UNCONSTRAINED OPT. C INTEGER ALG, LIV, LV, N INTEGER IV(LIV) DOUBLE PRECISION D(N), V(LV) C DOUBLE PRECISION DR7MDC EXTERNAL DIVSET, DR7MDC,DV7CPY,DV7DFL C DIVSET -- SUPPLIES DEFAULT VALUES TO BOTH IV AND V. C DR7MDC -- RETURNS MACHINE-DEPENDENT CONSTANTS. C DV7CPY -- COPIES ONE VECTOR TO ANOTHER. C DV7DFL -- SUPPLIES DEFAULT PARAMETER VALUES TO V ALONE. C C *** LOCAL VARIABLES *** C INTEGER ALG1, I, II, IV1, J, K, L, M, MIV1, MIV2, NDFALT, PARSV1, 1 PU INTEGER IJMP, JLIM(4), MINIV(4), NDFLT(4) C/6S C INTEGER VARNM(2), SH(2) C REAL CNGD(3), DFLT(3), VN(2,34), WHICH(3) C/7S CHARACTER*1 VARNM(2), SH(2) CHARACTER*4 CNGD(3), DFLT(3), VN(2,34), WHICH(3) C/ DOUBLE PRECISION BIG, MACHEP, TINY, VK, VM(34), VX(34), ZERO C C *** IV AND V SUBSCRIPTS *** C INTEGER ALGSAV, DINIT, DTYPE, DTYPE0, EPSLON, INITS, IVNEED, 1 LASTIV, LASTV, LMAT, NEXTIV, NEXTV, NVDFLT, OLDN, 2 PARPRT, PARSAV, PERM, PRUNIT, VNEED C C C/6 C DATA ALGSAV/51/, DINIT/38/, DTYPE/16/, DTYPE0/54/, EPSLON/19/, C 1 INITS/25/, IVNEED/3/, LASTIV/44/, LASTV/45/, LMAT/42/, C 2 NEXTIV/46/, NEXTV/47/, NVDFLT/50/, OLDN/38/, PARPRT/20/, C 3 PARSAV/49/, PERM/58/, PRUNIT/21/, VNEED/4/ C/7 PARAMETER (ALGSAV=51, DINIT=38, DTYPE=16, DTYPE0=54, EPSLON=19, 1 INITS=25, IVNEED=3, LASTIV=44, LASTV=45, LMAT=42, 2 NEXTIV=46, NEXTV=47, NVDFLT=50, OLDN=38, PARPRT=20, 3 PARSAV=49, PERM=58, PRUNIT=21, VNEED=4) SAVE BIG, MACHEP, TINY C/ C DATA BIG/0.D+0/, MACHEP/-1.D+0/, TINY/1.D+0/, ZERO/0.D+0/ C/6S C DATA VN(1,1),VN(2,1)/4HEPSL,4HON../ C DATA VN(1,2),VN(2,2)/4HPHMN,4HFC../ C DATA VN(1,3),VN(2,3)/4HPHMX,4HFC../ C DATA VN(1,4),VN(2,4)/4HDECF,4HAC../ C DATA VN(1,5),VN(2,5)/4HINCF,4HAC../ C DATA VN(1,6),VN(2,6)/4HRDFC,4HMN../ C DATA VN(1,7),VN(2,7)/4HRDFC,4HMX../ C DATA VN(1,8),VN(2,8)/4HTUNE,4HR1../ C DATA VN(1,9),VN(2,9)/4HTUNE,4HR2../ C DATA VN(1,10),VN(2,10)/4HTUNE,4HR3../ C DATA VN(1,11),VN(2,11)/4HTUNE,4HR4../ C DATA VN(1,12),VN(2,12)/4HTUNE,4HR5../ C DATA VN(1,13),VN(2,13)/4HAFCT,4HOL../ C DATA VN(1,14),VN(2,14)/4HRFCT,4HOL../ C DATA VN(1,15),VN(2,15)/4HXCTO,4HL.../ C DATA VN(1,16),VN(2,16)/4HXFTO,4HL.../ C DATA VN(1,17),VN(2,17)/4HLMAX,4H0.../ C DATA VN(1,18),VN(2,18)/4HLMAX,4HS.../ C DATA VN(1,19),VN(2,19)/4HSCTO,4HL.../ C DATA VN(1,20),VN(2,20)/4HDINI,4HT.../ C DATA VN(1,21),VN(2,21)/4HDTIN,4HIT../ C DATA VN(1,22),VN(2,22)/4HD0IN,4HIT../ C DATA VN(1,23),VN(2,23)/4HDFAC,4H..../ C DATA VN(1,24),VN(2,24)/4HDLTF,4HDC../ C DATA VN(1,25),VN(2,25)/4HDLTF,4HDJ../ C DATA VN(1,26),VN(2,26)/4HDELT,4HA0../ C DATA VN(1,27),VN(2,27)/4HFUZZ,4H..../ C DATA VN(1,28),VN(2,28)/4HRLIM,4HIT../ C DATA VN(1,29),VN(2,29)/4HCOSM,4HIN../ C DATA VN(1,30),VN(2,30)/4HHUBE,4HRC../ C DATA VN(1,31),VN(2,31)/4HRSPT,4HOL../ C DATA VN(1,32),VN(2,32)/4HSIGM,4HIN../ C DATA VN(1,33),VN(2,33)/4HETA0,4H..../ C DATA VN(1,34),VN(2,34)/4HBIAS,4H..../ C/7S DATA VN(1,1),VN(2,1)/'EPSL','ON..'/ DATA VN(1,2),VN(2,2)/'PHMN','FC..'/ DATA VN(1,3),VN(2,3)/'PHMX','FC..'/ DATA VN(1,4),VN(2,4)/'DECF','AC..'/ DATA VN(1,5),VN(2,5)/'INCF','AC..'/ DATA VN(1,6),VN(2,6)/'RDFC','MN..'/ DATA VN(1,7),VN(2,7)/'RDFC','MX..'/ DATA VN(1,8),VN(2,8)/'TUNE','R1..'/ DATA VN(1,9),VN(2,9)/'TUNE','R2..'/ DATA VN(1,10),VN(2,10)/'TUNE','R3..'/ DATA VN(1,11),VN(2,11)/'TUNE','R4..'/ DATA VN(1,12),VN(2,12)/'TUNE','R5..'/ DATA VN(1,13),VN(2,13)/'AFCT','OL..'/ DATA VN(1,14),VN(2,14)/'RFCT','OL..'/ DATA VN(1,15),VN(2,15)/'XCTO','L...'/ DATA VN(1,16),VN(2,16)/'XFTO','L...'/ DATA VN(1,17),VN(2,17)/'LMAX','0...'/ DATA VN(1,18),VN(2,18)/'LMAX','S...'/ DATA VN(1,19),VN(2,19)/'SCTO','L...'/ DATA VN(1,20),VN(2,20)/'DINI','T...'/ DATA VN(1,21),VN(2,21)/'DTIN','IT..'/ DATA VN(1,22),VN(2,22)/'D0IN','IT..'/ DATA VN(1,23),VN(2,23)/'DFAC','....'/ DATA VN(1,24),VN(2,24)/'DLTF','DC..'/ DATA VN(1,25),VN(2,25)/'DLTF','DJ..'/ DATA VN(1,26),VN(2,26)/'DELT','A0..'/ DATA VN(1,27),VN(2,27)/'FUZZ','....'/ DATA VN(1,28),VN(2,28)/'RLIM','IT..'/ DATA VN(1,29),VN(2,29)/'COSM','IN..'/ DATA VN(1,30),VN(2,30)/'HUBE','RC..'/ DATA VN(1,31),VN(2,31)/'RSPT','OL..'/ DATA VN(1,32),VN(2,32)/'SIGM','IN..'/ DATA VN(1,33),VN(2,33)/'ETA0','....'/ DATA VN(1,34),VN(2,34)/'BIAS','....'/ C/ C DATA VM(1)/1.0D-3/, VM(2)/-0.99D+0/, VM(3)/1.0D-3/, VM(4)/1.0D-2/, 1 VM(5)/1.2D+0/, VM(6)/1.D-2/, VM(7)/1.2D+0/, VM(8)/0.D+0/, 2 VM(9)/0.D+0/, VM(10)/1.D-3/, VM(11)/-1.D+0/, VM(13)/0.D+0/, 3 VM(15)/0.D+0/, VM(16)/0.D+0/, VM(19)/0.D+0/, VM(20)/-10.D+0/, 4 VM(21)/0.D+0/, VM(22)/0.D+0/, VM(23)/0.D+0/, VM(27)/1.01D+0/, 5 VM(28)/1.D+10/, VM(30)/0.D+0/, VM(31)/0.D+0/, VM(32)/0.D+0/, 6 VM(34)/0.D+0/ DATA VX(1)/0.9D+0/, VX(2)/-1.D-3/, VX(3)/1.D+1/, VX(4)/0.8D+0/, 1 VX(5)/1.D+2/, VX(6)/0.8D+0/, VX(7)/1.D+2/, VX(8)/0.5D+0/, 2 VX(9)/0.5D+0/, VX(10)/1.D+0/, VX(11)/1.D+0/, VX(14)/0.1D+0/, 3 VX(15)/1.D+0/, VX(16)/1.D+0/, VX(19)/1.D+0/, VX(23)/1.D+0/, 4 VX(24)/1.D+0/, VX(25)/1.D+0/, VX(26)/1.D+0/, VX(27)/1.D+10/, 5 VX(29)/1.D+0/, VX(31)/1.D+0/, VX(32)/1.D+0/, VX(33)/1.D+0/, 6 VX(34)/1.D+0/ C C/6S C DATA VARNM(1)/1HP/, VARNM(2)/1HP/, SH(1)/1HS/, SH(2)/1HH/ C DATA CNGD(1),CNGD(2),CNGD(3)/4H---C,4HHANG,4HED V/, C 1 DFLT(1),DFLT(2),DFLT(3)/4HNOND,4HEFAU,4HLT V/ C/7S DATA VARNM(1)/'P'/, VARNM(2)/'P'/, SH(1)/'S'/, SH(2)/'H'/ DATA CNGD(1),CNGD(2),CNGD(3)/'---C','HANG','ED V'/, 1 DFLT(1),DFLT(2),DFLT(3)/'NOND','EFAU','LT V'/ C/ DATA IJMP/33/, JLIM(1)/0/, JLIM(2)/24/, JLIM(3)/0/, JLIM(4)/24/, 1 NDFLT(1)/32/, NDFLT(2)/25/, NDFLT(3)/32/, NDFLT(4)/25/ DATA MINIV(1)/82/, MINIV(2)/59/, MINIV(3)/103/, MINIV(4)/103/ C C............................... BODY ................................ C PU = 0 IF (PRUNIT .LE. LIV) PU = IV(PRUNIT) IF (ALGSAV .GT. LIV) GO TO 20 IF (ALG .EQ. IV(ALGSAV)) GO TO 20 IF (PU .NE. 0) WRITE(PU,10) ALG, IV(ALGSAV) 10 FORMAT(/40H THE FIRST PARAMETER TO DIVSET SHOULD BE,I3, 1 12H RATHER THAN,I3) IV(1) = 67 GO TO 999 20 IF (ALG .LT. 1 .OR. ALG .GT. 4) GO TO 340 MIV1 = MINIV(ALG) IF (IV(1) .EQ. 15) GO TO 360 ALG1 = MOD(ALG-1,2) + 1 IF (IV(1) .EQ. 0) CALL DIVSET(ALG, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .NE. 13 .AND. IV1 .NE. 12) GO TO 30 IF (PERM .LE. LIV) MIV1 = MAX0(MIV1, IV(PERM) - 1) IF (IVNEED .LE. LIV) MIV2 = MIV1 + MAX0(IV(IVNEED), 0) IF (LASTIV .LE. LIV) IV(LASTIV) = MIV2 IF (LIV .LT. MIV1) GO TO 300 IV(IVNEED) = 0 IV(LASTV) = MAX0(IV(VNEED), 0) + IV(LMAT) - 1 IV(VNEED) = 0 IF (LIV .LT. MIV2) GO TO 300 IF (LV .LT. IV(LASTV)) GO TO 320 30 IF (IV1 .LT. 12 .OR. IV1 .GT. 14) GO TO 60 IF (N .GE. 1) GO TO 50 IV(1) = 81 IF (PU .EQ. 0) GO TO 999 WRITE(PU,40) VARNM(ALG1), N 40 FORMAT(/8H /// BAD,A1,2H =,I5) GO TO 999 50 IF (IV1 .NE. 14) IV(NEXTIV) = IV(PERM) IF (IV1 .NE. 14) IV(NEXTV) = IV(LMAT) IF (IV1 .EQ. 13) GO TO 999 K = IV(PARSAV) - EPSLON CALL DV7DFL(ALG1, LV-K, V(K+1)) IV(DTYPE0) = 2 - ALG1 IV(OLDN) = N WHICH(1) = DFLT(1) WHICH(2) = DFLT(2) WHICH(3) = DFLT(3) GO TO 110 60 IF (N .EQ. IV(OLDN)) GO TO 80 IV(1) = 17 IF (PU .EQ. 0) GO TO 999 WRITE(PU,70) VARNM(ALG1), IV(OLDN), N 70 FORMAT(/5H /// ,1A1,14H CHANGED FROM ,I5,4H TO ,I5) GO TO 999 C 80 IF (IV1 .LE. 11 .AND. IV1 .GE. 1) GO TO 100 IV(1) = 80 IF (PU .NE. 0) WRITE(PU,90) IV1 90 FORMAT(/13H /// IV(1) =,I5,28H SHOULD BE BETWEEN 0 AND 14.) GO TO 999 C 100 WHICH(1) = CNGD(1) WHICH(2) = CNGD(2) WHICH(3) = CNGD(3) C 110 IF (IV1 .EQ. 14) IV1 = 12 IF (BIG .GT. TINY) GO TO 120 TINY = DR7MDC(1) MACHEP = DR7MDC(3) BIG = DR7MDC(6) VM(12) = MACHEP VX(12) = BIG VX(13) = BIG VM(14) = MACHEP VM(17) = TINY VX(17) = BIG VM(18) = TINY VX(18) = BIG VX(20) = BIG VX(21) = BIG VX(22) = BIG VM(24) = MACHEP VM(25) = MACHEP VM(26) = MACHEP VX(28) = DR7MDC(5) VM(29) = MACHEP VX(30) = BIG VM(33) = MACHEP 120 M = 0 I = 1 J = JLIM(ALG1) K = EPSLON NDFALT = NDFLT(ALG1) DO 150 L = 1, NDFALT VK = V(K) IF (VK .GE. VM(I) .AND. VK .LE. VX(I)) GO TO 140 M = K IF (PU .NE. 0) WRITE(PU,130) VN(1,I), VN(2,I), K, VK, 1 VM(I), VX(I) 130 FORMAT(/6H /// ,2A4,5H.. V(,I2,3H) =,D11.3,7H SHOULD, 1 11H BE BETWEEN,D11.3,4H AND,D11.3) 140 K = K + 1 I = I + 1 IF (I .EQ. J) I = IJMP 150 CONTINUE C IF (IV(NVDFLT) .EQ. NDFALT) GO TO 170 IV(1) = 51 IF (PU .EQ. 0) GO TO 999 WRITE(PU,160) IV(NVDFLT), NDFALT 160 FORMAT(/13H IV(NVDFLT) =,I5,13H RATHER THAN ,I5) GO TO 999 170 IF ((IV(DTYPE) .GT. 0 .OR. V(DINIT) .GT. ZERO) .AND. IV1 .EQ. 12) 1 GO TO 200 DO 190 I = 1, N IF (D(I) .GT. ZERO) GO TO 190 M = 18 IF (PU .NE. 0) WRITE(PU,180) I, D(I) 180 FORMAT(/8H /// D(,I3,3H) =,D11.3,19H SHOULD BE POSITIVE) 190 CONTINUE 200 IF (M .EQ. 0) GO TO 210 IV(1) = M GO TO 999 C 210 IF (PU .EQ. 0 .OR. IV(PARPRT) .EQ. 0) GO TO 999 IF (IV1 .NE. 12 .OR. IV(INITS) .EQ. ALG1-1) GO TO 230 M = 1 WRITE(PU,220) SH(ALG1), IV(INITS) 220 FORMAT(/22H NONDEFAULT VALUES..../5H INIT,A1,14H..... IV(25) =, 1 I3) 230 IF (IV(DTYPE) .EQ. IV(DTYPE0)) GO TO 250 IF (M .EQ. 0) WRITE(PU,260) WHICH M = 1 WRITE(PU,240) IV(DTYPE) 240 FORMAT(20H DTYPE..... IV(16) =,I3) 250 I = 1 J = JLIM(ALG1) K = EPSLON L = IV(PARSAV) NDFALT = NDFLT(ALG1) DO 290 II = 1, NDFALT IF (V(K) .EQ. V(L)) GO TO 280 IF (M .EQ. 0) WRITE(PU,260) WHICH 260 FORMAT(/1H ,3A4,9HALUES..../) M = 1 WRITE(PU,270) VN(1,I), VN(2,I), K, V(K) 270 FORMAT(1X,2A4,5H.. V(,I2,3H) =,D15.7) 280 K = K + 1 L = L + 1 I = I + 1 IF (I .EQ. J) I = IJMP 290 CONTINUE C IV(DTYPE0) = IV(DTYPE) PARSV1 = IV(PARSAV) CALL DV7CPY(IV(NVDFLT), V(PARSV1), V(EPSLON)) GO TO 999 C 300 IV(1) = 15 IF (PU .EQ. 0) GO TO 999 WRITE(PU,310) LIV, MIV2 310 FORMAT(/10H /// LIV =,I5,17H MUST BE AT LEAST,I5) IF (LIV .LT. MIV1) GO TO 999 IF (LV .LT. IV(LASTV)) GO TO 320 GO TO 999 C 320 IV(1) = 16 IF (PU .NE. 0) WRITE(PU,330) LV, IV(LASTV) 330 FORMAT(/9H /// LV =,I5,17H MUST BE AT LEAST,I5) GO TO 999 C 340 IV(1) = 67 IF (PU .NE. 0) WRITE(PU,350) ALG 350 FORMAT(/10H /// ALG =,I5,21H MUST BE 1 2, 3, OR 4) GO TO 999 360 IF (PU .NE. 0) WRITE(PU,370) LIV, MIV1 370 FORMAT(/10H /// LIV =,I5,17H MUST BE AT LEAST,I5, 1 37H TO COMPUTE TRUE MIN. LIV AND MIN. LV) IF (LASTIV .LE. LIV) IV(LASTIV) = MIV1 IF (LASTV .LE. LIV) IV(LASTV) = 0 C 999 RETURN C *** LAST LINE OF DPARCK FOLLOWS *** END PyBDSF-1.10.1/src/port3/dpostx1.f000066400000000000000000000064171420247104600162400ustar00rootroot00000000000000C$TEST DPOST1 c main program common /cstak/ ds double precision ds(1000) external handle, dpostd, bc, af integer ndx, k, is(1000), nu, nv, nmesh real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision u(100), v(1), mesh(100), dt, ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test dpost on c u sub t = u sub xx + f on (0,1) c where f is chosen so that the solution is c u(x,t) = exp(xt). c the port library stack and its aliases. c initialize the port library stack length. call istkin(1000, 4) nu = 1 nv = 0 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstop = 1 dt = 1d-2 k = 4 c ndx uniform mesh points on (0,1). ndx = 4 call dumb(0d0, 1d0, ndx, k, mesh, nmesh) c initial conditions for u. call setd(nmesh-k, 1d0, u) call dpost(u, nu, k, mesh, nmesh, v, nv, 0d0, tstop, dt, af, bc, 1 dpostd, errpar, handle) c check for errors and stack usage statistics. call wrapup stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nx integer nv double precision t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx( 1 nx, nu) double precision v(1), vt(1), a(nx, nu), au(nx, nu, nu), aux(nx, 1 nu, nu), aut(nx, nu, nu) double precision autx(nx, nu, nu), av(1), avt(1), f(nx, nu), fu( 1 nx, nu, nu), fux(nx, nu, nu) double precision fut(nx, nu, nu), futx(nx, nu, nu), fv(1), fvt(1) integer i double precision dexp do 1 i = 1, nx a(i, 1) = -ux(i, 1) aux(i, 1, 1) = -1 f(i, 1) = (x(i)-t**2)*dexp(x(i)*t)-ut(i, 1) fut(i, 1, 1) = -1 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu integer nv double precision t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) double precision utx(nu, 2), v(1), vt(1), b(nu, 2), bu(nu, nu, 2), 1 bux(nu, nu, 2) double precision but(nu, nu, 2), butx(nu, nu, 2), bv(1), bvt(1) double precision dexp b(1, 1) = u(1, 1)-1d0 b(1, 2) = u(1, 2)-dexp(t) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nx integer nv, k double precision t0, u0(nxmk, nu), v0(1), t, u(nxmk, nu), v(1) double precision x(nx), dt, tstop common /time/ tt double precision tt external uofx integer i1mach double precision deesff, eu integer temp c output and checking routine. if (t0 .eq. t) return c uofx needs time. tt = t eu = deesff(k, x, nx, u, uofx) temp = i1mach(2) write (temp, 1) t, eu 1 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2) return end subroutine uofx(x, nx, u, w) integer nx double precision x(nx), u(nx), w(nx) common /time/ t double precision t integer i double precision dexp do 1 i = 1, nx u(i) = dexp(x(i)*t) 1 continue return end PyBDSF-1.10.1/src/port3/dpostx10.f000066400000000000000000000112161420247104600163110ustar00rootroot00000000000000C$TEST DPOST10 c main program common /cstak/ ds double precision ds(2000) external handle, dpostd, bc, af integer ndx, nxh, i, k, is(1000), nu integer nv, nx, i1mach real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision deebsf, err, dabs, u(100), v(1), x(100) double precision dmax1, dt, ue(100), uh(100), xh(100), ws(500) double precision tstop integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to estimate x and t error as sum. c u sub t = u sub xx + f on (0,1) c where f is chosen so that the solution is c u(x,t) = exp(xt). c the port library stack and its aliases. c initialize the port library stack length. call istkin(2000, 4) nu = 1 nv = 0 errpar(1) = 0 errpar(2) = 1e-2 k = 4 ndx = 4 tstop = 1 dt = 1d-2 c crude mesh. call dumb(0d0, 1d0, ndx, k, x, nx) c initial conditions for u. call setd(nx-k, 1d0, u) temp = i1mach(2) write (temp, 1) 1 format (36h solving on crude mesh using errpar.) call dpost(u, nu, k, x, nx, v, nv, 0d0, tstop, dt, af, bc, dpostd, 1 errpar, handle) c get run-time statistics. call dpostx c halve the mesh spacing. call dumb(0d0, 1d0, 2*ndx-1, k, xh, nxh) c initial conditions for uh. call setd(nxh-k, 1d0, uh) dt = 1d-2 temp = i1mach(2) write (temp, 2) 2 format (38h solving on refined mesh using errpar.) call dpost(uh, nu, k, xh, nxh, v, nv, 0d0, tstop, dt, af, bc, 1 dpostd, errpar, handle) c get run-time statistics. call dpostx c estimate u error. err = deebsf(k, x, nx, u, xh, nxh, uh) write (6, 3) err 3 format (24h u error from u and uh =, 1pe10.2) c initial conditions for ue. call setd(nx-k, 1d0, ue) dt = 1d-2 errpar(1) = errpar(1)/10. errpar(2) = errpar(2)/10. temp = i1mach(2) write (temp, 4) 4 format (39h solving on crude mesh using errpar/10.) call dpost(ue, nu, k, x, nx, v, nv, 0d0, tstop, dt, af, bc, 1 dpostd, errpar, handle) c get run-time statistics. call dpostx err = 0 temp = nx-k do 5 i = 1, temp err = dmax1(err, dabs(u(i)-ue(i))) 5 continue write (6, 6) err 6 format (24h u error from u and ue =, 1pe10.2) stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nx integer nv double precision t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx( 1 nx, nu) double precision v(1), vt(1), a(nx, nu), au(nx, nu, nu), aux(nx, 1 nu, nu), aut(nx, nu, nu) double precision autx(nx, nu, nu), av(1), avt(1), f(nx, nu), fu( 1 nx, nu, nu), fux(nx, nu, nu) double precision fut(nx, nu, nu), futx(nx, nu, nu), fv(1), fvt(1) integer i double precision dexp do 1 i = 1, nx a(i, 1) = -ux(i, 1) aux(i, 1, 1) = -1 f(i, 1) = (x(i)-t**2)*dexp(x(i)*t)-ut(i, 1) fut(i, 1, 1) = -1 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu integer nv double precision t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) double precision utx(nu, 2), v(1), vt(1), b(nu, 2), bu(nu, nu, 2), 1 bux(nu, nu, 2) double precision but(nu, nu, 2), butx(nu, nu, 2), bv(1), bvt(1) double precision dexp b(1, 1) = u(1, 1)-1d0 b(1, 2) = u(1, 2)-dexp(t) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nx integer nv, k double precision t0, u0(nxmk, nu), v0(1), t, u(nxmk, nu), v(1) double precision x(nx), dt, tstop common /time/ tt double precision tt external uofx integer i1mach double precision deesff, eu integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 tt = t eu = deesff(k, x, nx, u, uofx) temp = i1mach(2) write (temp, 3) t, eu 3 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2) return end subroutine uofx(x, nx, u, w) integer nx double precision x(nx), u(nx), w(nx) common /time/ t double precision t integer i double precision dexp do 1 i = 1, nx u(i) = dexp(x(i)*t) 1 continue return end PyBDSF-1.10.1/src/port3/dpostx2.f000066400000000000000000000077351420247104600162450ustar00rootroot00000000000000C$TEST DPOST2 c main program common /cstak/ ds double precision ds(1100) external handle, dpostd, bc, af integer ndx, k, is(1000), nu, nv, nmesh real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision u(200), v(1), mesh(100), dt, ws(500), tstop integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test dpost on c u sub t = u sub xx + f on (0,1) c by setting u1 = u and u2 = u1 sub x and solving c u1 sub t = u1 sub xx + f c on (0,1) c u1 sub x = u2 c where f is chosen so that the solution is c u(x,t) = exp(xt). c the port library stack and its aliases. c initialize the port library stack length. call istkin(1100, 4) nu = 2 nv = 0 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstop = 1 dt = 1d-2 k = 4 c ndx uniform mesh points on (0,1). ndx = 4 call dumb(0d0, 1d0, ndx, k, mesh, nmesh) c initial conditions for u1. call setd(nmesh-k, 1d0, u) c initial conditions for u2. temp = nmesh-k call setd(nmesh-k, 0d0, u(temp+1)) call dpost(u, nu, k, mesh, nmesh, v, nv, 0d0, tstop, dt, af, bc, 1 dpostd, errpar, handle) c check for errors and stack usage statistics. call wrapup stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nx integer nv double precision t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx( 1 nx, nu) double precision v(1), vt(1), a(nx, nu), au(nx, nu, nu), aux(nx, 1 nu, nu), aut(nx, nu, nu) double precision autx(nx, nu, nu), av(1), avt(1), f(nx, nu), fu( 1 nx, nu, nu), fux(nx, nu, nu) double precision fut(nx, nu, nu), futx(nx, nu, nu), fv(1), fvt(1) integer i double precision dexp do 1 i = 1, nx a(i, 1) = -u(i, 2) au(i, 1, 2) = -1 f(i, 1) = (x(i)-t**2)*dexp(x(i)*t)-ut(i, 1) fut(i, 1, 1) = -1 a(i, 2) = u(i, 1) au(i, 2, 1) = 1 f(i, 2) = u(i, 2) fu(i, 2, 2) = 1 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu integer nv double precision t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) double precision utx(nu, 2), v(1), vt(1), b(nu, 2), bu(nu, nu, 2), 1 bux(nu, nu, 2) double precision but(nu, nu, 2), butx(nu, nu, 2), bv(1), bvt(1) double precision dexp b(1, 1) = u(1, 1)-1d0 b(1, 2) = u(1, 2)-dexp(t) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nx integer nv, k double precision t0, u0(nxmk, nu), v0(1), t, u(nxmk, nu), v(1) double precision x(nx), dt, tstop common /time/ tt double precision tt external u1ofx, u2ofx integer i1mach double precision deesff, eu(2) integer temp c output and checking routine. if (t0 .eq. t) return c u1ofx and u2ofx need time. tt = t eu(1) = deesff(k, x, nx, u, u1ofx) eu(2) = deesff(k, x, nx, u(1, 2), u2ofx) temp = i1mach(2) write (temp, 1) t, eu 1 format (14h error in u(x,, 1pe10.2, 4h ) =, 2(1pe10.2)) return end subroutine u1ofx(x, nx, u, w) integer nx double precision x(nx), u(nx), w(nx) common /time/ t double precision t integer i double precision dexp do 1 i = 1, nx u(i) = dexp(x(i)*t) 1 continue return end subroutine u2ofx(x, nx, u, w) integer nx double precision x(nx), u(nx), w(nx) common /time/ t double precision t integer i double precision dexp do 1 i = 1, nx u(i) = t*dexp(x(i)*t) 1 continue return end PyBDSF-1.10.1/src/port3/dpostx3.f000066400000000000000000000107701420247104600162370ustar00rootroot00000000000000C$TEST DPOST3 c main program common /cstak/ ds double precision ds(2000) external dee, handle, bc, af integer ndx, k, is(1000), nu, nv, nmesh real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision u(100), v(1), mesh(100), dt, ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test dpost on c u sub t = u sub xx + v + f on (0,1) c v sub t = u( 1/2, t ) c where f is chosen so that the solution is c u(x,t) = cos(xt) and v(t) = 2 sin(t/2). c the port library stack and its aliases. c initialize the port library stack length. call istkin(2000, 4) nu = 1 nv = 1 errpar(1) = 1e-2 c essentially relative error. errpar(2) = 1e-6 tstop = 1 dt = 1d-6 k = 4 ndx = 4 c ndx uniform mesh points on (0,1). call dumb(0d0, 1d0, ndx, k, mesh, nmesh) c initial conditions for u. call setd(nmesh-k, 1d0, u) c initial value for v. v(1) = 0 call dpost(u, nu, k, mesh, nmesh, v, nv, 0d0, tstop, dt, af, bc, 1 dee, errpar, handle) c check for errors and stack usage statistics. call wrapup stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx double precision t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx( 1 nx, nu) double precision v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, 1 nu, nu), aut(nx, nu, nu) double precision autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv) 1 , f(nx, nu), fu(nx, nu, nu), fux(nx, nu, nu) double precision fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv) 1 , fvt(nx, nu, nv) integer i double precision dcos, dsin do 1 i = 1, nx a(i, 1) = -ux(i, 1) aux(i, 1, 1) = -1 f(i, 1) = v(1)-ut(i, 1)-x(i)*dsin(x(i)*t)+t**2*dcos(x(i)*t)- 1 2d0*dsin(t/2d0) fut(i, 1, 1) = -1 fv(i, 1, 1) = 1 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv double precision t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) double precision utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2 1 ), bux(nu, nu, 2) double precision but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), 1 bvt(nu, nv, 2) double precision dcos b(1, 1) = u(1, 1)-1d0 b(1, 2) = u(1, 2)-dcos(t) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k double precision t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt( 1 nv) double precision d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv( 1 nv, nv), dvt(nv, nv) integer intrvd, i, ileft double precision xi(1), basis(10) integer temp xi(1) = 0.5d0 c find 0.5 in mesh. ileft = intrvd(nx, x, xi(1)) if (k .gt. 10) call seterr( 1 41hdee - k .gt. 10, need more space in basis, 41, 1, 2) c b-spline basis at xi(1). call dbspln(k, x, nx, xi, 1, ileft, basis) d(1) = vt(1) dvt(1, 1) = 1 c vt(1) - u(0.5,t) = 0. do 1 i = 1, k temp = ileft+i-k d(1) = d(1)-u(temp, 1)*basis(i) temp = ileft+i-k du(1, temp, 1) = du(1, temp, 1)-basis(i) 1 continue return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k double precision t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) double precision x(nx), dt, tstop common /time/ tt double precision tt external uofx integer i1mach double precision deesff, dabs, dsin, eu, ev integer temp c output and checking routine. if (t0 .eq. t) return c uofx needs time. tt = t eu = deesff(k, x, nx, u, uofx) ev = dabs(v(1)-2d0*dsin(t/2d0)) temp = i1mach(2) write (temp, 1) t, eu, ev 1 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2, 6h v =, 1p 1 e10.2) return end subroutine uofx(x, nx, u, w) integer nx double precision x(nx), u(nx), w(nx) common /time/ t double precision t integer i double precision dcos do 1 i = 1, nx u(i) = dcos(x(i)*t) 1 continue return end PyBDSF-1.10.1/src/port3/dpostx4.f000066400000000000000000000102561420247104600162370ustar00rootroot00000000000000C$TEST DPOST4 c main program common /cstak/ ds double precision ds(2000) external dee, handle, bc, af integer ndx, k, is(1000), nu, nv, nmesh real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision u(100), v(1), mesh(100), dt, datan, ws(500) double precision tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test dpost on c u sub t = u sub xx - u**3 + f on (-pi,+pi) c subject to periodic boundary conditions, c where f is chosen so that the solution is c u(x,t) = cos(x)*sin(t). c the port library stack and its aliases. c initialize the port library stack length. call istkin(2000, 4) nu = 1 nv = 1 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstop = 8d0*datan(1d0) dt = 0.4 c make a mesh of ndx uniform points on (-pi,+pi). k = 4 ndx = 7 call dumb((-4d0)*datan(1d0), 4d0*datan(1d0), ndx, k, mesh, nmesh) c initial conditions for u. call setd(nmesh-k, 0d0, u) c initial conditions for v. v(1) = 0 call dpost(u, nu, k, mesh, nmesh, v, nv, 0d0, tstop, dt, af, bc, 1 dee, errpar, handle) c check for errors and stack usage statistics. call wrapup stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx double precision t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx( 1 nx, nu) double precision v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, 1 nu, nu), aut(nx, nu, nu) double precision autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv) 1 , f(nx, nu), fu(nx, nu, nu), fux(nx, nu, nu) double precision fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv) 1 , fvt(nx, nu, nv) integer i double precision dcos, dsin do 1 i = 1, nx a(i, 1) = -ux(i, 1) aux(i, 1, 1) = -1 f(i, 1) = (-ut(i, 1))-u(i, 1)**3+dcos(x(i))*(dcos(t)+dsin(t)+ 1 dcos(x(i))**2*dsin(t)**3) fut(i, 1, 1) = -1 fu(i, 1, 1) = (-3d0)*u(i, 1)**2 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv double precision t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) double precision utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2 1 ), bux(nu, nu, 2) double precision but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), 1 bvt(nu, nv, 2) b(1, 1) = ux(1, 1)-v(1) b(1, 2) = ux(1, 2)-v(1) bux(1, 1, 1) = 1 bv(1, 1, 1) = -1 bux(1, 1, 2) = 1 bv(1, 1, 2) = -1 return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k double precision t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt( 1 nv) double precision d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv( 1 nv, nv), dvt(nv, nv) integer temp c u(-pi,t) - u(+pi,t) = 0. temp = nx-k d(1) = u(1, 1)-u(temp, 1) du(1, 1, 1) = 1 temp = nx-k du(1, temp, 1) = -1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k double precision t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) double precision x(nx), dt, tstop common /time/ tt double precision tt external uofx integer i1mach double precision deesff, eu, ev integer temp c output and checking routine. if (t0 .eq. t) return c uofx needs time. tt = t eu = deesff(k, x, nx, u, uofx) ev = v(1) temp = i1mach(2) write (temp, 1) t, eu, ev 1 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2, 6h v =, 1p 1 e10.2) return end subroutine uofx(x, nx, u, w) integer nx double precision x(nx), u(nx), w(nx) common /time/ t double precision t integer i double precision dcos, dsin do 1 i = 1, nx u(i) = dcos(x(i))*dsin(t) 1 continue return end PyBDSF-1.10.1/src/port3/dpostx5.f000066400000000000000000000167631420247104600162510ustar00rootroot00000000000000C$TEST DPOST5 c main program common /cstak/ ds double precision ds(4000) common /time/ t double precision t common /param/ vc, x double precision vc(3), x(3) external dee, handle, uofx, bc, af integer ndx, idlumb, istkgt, k, iu, is(1000) integer nu, nv, immmd, imesh, nmesh real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, v(3), dt, xb(3), ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test dpost on c u sub t = ( k(t,x) * u sub x ) sub x + g on (-1,+2) * (0,+1) c with a moving front x(t) characterized by u(x(t),t) == 1 and c jump across x(t) of k(t,x) u sub x = - 3 * x'(t). c where k(t,x) is piecewise constant, say c 1 for x < x(t) c k(t,x) = c 2 for x > x(t) c and g is chosen so that the solution is c exp(x-x(t)) for x < x(t) c u(x,t) = c exp(x(t)-x) for x > x(t) c and x(1,t) = t. the moving front is tracked c implicitly by forcing u(x(1,t),t) = 1 as a pseudo-rankine-heugoniot re clation. c v(1,2,3) gives the moving mesh. c the port library stack and its aliases. c initialize the port library stack length. call istkin(4000, 4) call enter(1) nu = 1 nv = 3 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstart = 0 tstop = 1 dt = 0.1 k = 4 c ndx uniform mesh points on each interval of xb array. ndx = 6 xb(1) = 0 xb(2) = 1 xb(3) = 2 c get mesh on port stack. imesh = idlumb(xb, 3, ndx, k, nmesh) c make 1 of multiplicity k-1. imesh = immmd(imesh, nmesh, 1d0, k-1) x(1) = -1 x(2) = 0 x(3) = 2 c initial values for v. call dlplmg(3, x, vc) c get u on the port stack. iu = istkgt(nmesh-k, 4) c uofx needs time. t = tstart c uofx needs v for mapping. call movefd(nv, vc, v) c initial conditions for u. call dl2sff(uofx, k, ws(imesh), nmesh, ws(iu)) c output the ics. call handle(t-1d0, ws(iu), v, t, ws(iu), v, nu, nmesh-k, nv, k, 1 ws(imesh), nmesh, dt, tstop) call dpost(ws(iu), nu, k, ws(imesh), nmesh, v, nv, tstart, tstop 1 , dt, af, bc, dee, errpar, handle) call leave call wrapup stop end subroutine af(t, xi, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx double precision t, xi(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), 1 utx(nx, nu) double precision v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, 1 nu, nu), aut(nx, nu, nu) double precision autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv) 1 , f(nx, nu), fu(nx, nu, nu), fux(nx, nu, nu) double precision fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv) 1 , fvt(nx, nu, nv) common /dpostf/ failed logical failed integer i double precision kay, xxi(99), xtv(99), xvv(99), x(99), dexp double precision xxiv(99), ax(99), fx(99), xt(99), xv(99) logical temp temp = v(2) .le. v(1) if (.not. temp) temp = v(2) .ge. v(3) if (.not. temp) goto 1 failed = .true. return c map xi into x. 1 call dlplm(xi, nx, v, 3, x, xxi, xxiv, xv, xvv, xt, xtv) c map u into x system. call dpostu(xi, x, xt, xxi, xv, vt, nx, 3, ux, ut, nu, ax, fx) do 7 i = 1, nx if (xi(i) .gt. 1d0) goto 2 kay = 1 goto 3 2 kay = 2 3 a(i, 1) = kay*ux(i, 1) aux(i, 1, 1) = kay if (xi(i) .gt. 1d0) goto 4 a(i, 1) = a(i, 1)-3d0*vt(2) avt(i, 1, 2) = -3 4 f(i, 1) = ut(i, 1) fut(i, 1, 1) = 1 if (xi(i) .gt. 1d0) goto 5 f(i, 1) = f(i, 1)+2d0*dexp(x(i)-t) fx(i) = 2d0*dexp(x(i)-t) goto 6 5 f(i, 1) = f(i, 1)+dexp(t-x(i)) fx(i) = -dexp(t-x(i)) 6 continue 7 continue c map a and f into xi system. call dposti(xi, x, xt, xxi, xv, xtv, xxiv, xvv, nx, ux, ut, nu, v, 1 vt, nv, 1, 3, a, ax, au, aux, aut, autx, av, avt, f, fx, fu, 2 fux, fut, futx, fv, fvt) return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv double precision t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) double precision utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2 1 ), bux(nu, nu, 2) double precision but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), 1 bvt(nu, nv, 2) double precision dexp b(1, 1) = u(1, 1)-dexp((-1d0)-t) b(1, 2) = u(1, 2)-dexp(t-2d0) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k double precision t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt( 1 nv) double precision d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv( 1 nv, nv), dvt(nv, nv) integer intrvd, i, ileft double precision bx(10), xx(1) integer temp d(1) = v(1)+1d0 c x(0,v) = -1. dv(1, 1) = 1 xx(1) = 1 c find 1 in the mesh. ileft = intrvd(nx, x, xx(1)) c get the b-spline basis at xx. call dbspln(k, x, nx, xx, 1, ileft, bx) c u(x(1,v),t) = 1. d(2) = -1 do 1 i = 1, k temp = ileft+i-k d(2) = d(2)+u(temp, 1)*bx(i) temp = ileft+i-k du(2, temp, 1) = bx(i) 1 continue d(3) = v(3)-2d0 c x(2,v) = +2. dv(3, 3) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k double precision t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) double precision x(nx), dt, tstop common /param/ vc, xx double precision vc(3), xx(3) common /time/ tt double precision tt external uofx integer i1mach double precision deesff, eu, ev(3) integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 tt = t c uofx needs v for mapping. call movefd(nv, v, vc) eu = deesff(k, x, nx, u, uofx) ev(1) = v(1)+1d0 ev(2) = v(2)-t ev(3) = v(3)-2d0 temp = i1mach(2) write (temp, 3) t, eu, ev 3 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2, 6h v =, 3( 1 1pe10.2)) return end subroutine uofx(xi, nx, u, w) integer nx double precision xi(nx), u(nx), w(nx) common /cstak/ ds double precision ds(500) common /param/ vc, x double precision vc(3), x(3) common /time/ t double precision t integer ixv, ixx, istkgt, i, is(1000) real rs(1000) logical ls(1000) complex cs(500) double precision dexp, ws(500), xofxi integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c the port library stack and its aliases. call enter(1) ixx = istkgt(nx, 4) c space for x and xv. ixv = istkgt(3*nx, 4) c map into user system. call dlplmx(xi, nx, vc, 3, ws(ixx), ws(ixv)) do 3 i = 1, nx temp = ixx+i xofxi = ws(temp-1) if (xi(i) .gt. 1d0) goto 1 u(i) = dexp(xofxi-t) goto 2 1 u(i) = dexp(t-xofxi) 2 continue 3 continue call leave return end PyBDSF-1.10.1/src/port3/dpostx6.f000066400000000000000000000172761420247104600162520ustar00rootroot00000000000000C$TEST DPOST6 c main program common /cstak/ ds double precision ds(4000) common /time/ t double precision t common /param/ vc, x double precision vc(4), x(3) external dee, handle, uofx, bc, af integer ndx, idlumb, istkgt, k, iu, is(1000) integer nu, nv, immmd, imesh, nmesh real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, v(4), dt, xb(3), ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test dpost on the hyperbolic problem c u sub t = - u sub x + g on (-pi,+pi) * (0,pi) c with a moving shock x(t) characterized by c u(x(t)+,t) = 0 and c u(x(t)+,t) - u(x(t)-,t) = x'(t) c where g is chosen so that the solution is c sin(x+t) for x < x(t) c u(x,t) = c cos(x+t) for x > x(t) c with x(t) = pi/2 -t . c v(1,2,3) gives the moving mesh and v(4) is the height of the jump. c the port library stack and its aliases. c initialize the port library stack length. call istkin(4000, 4) call enter(1) nu = 1 nv = 4 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstart = 0 tstop = 3.14 dt = 0.4 k = 4 c ndx uniform mesh points on each interval of xb. ndx = 6 xb(1) = 0 xb(2) = 1 xb(3) = 2 c get mesh on port stack. imesh = idlumb(xb, 3, ndx, k, nmesh) c make 1 of multiplicity k-1. imesh = immmd(imesh, nmesh, 1d0, k-1) x(1) = -3.14 x(2) = 3.14/2. x(3) = 3.14 c initial values for v. call dlplmg(3, x, vc) c get u on the port stack. iu = istkgt(nmesh-k, 4) c uofx needs time. t = tstart c the initial height of the jump. vc(4) = 1 c uofx needs v for mapping. call movefd(nv, vc, v) c initial conditions for u. call dl2sff(uofx, k, ws(imesh), nmesh, ws(iu)) c output ics. call handle(t-1d0, ws(iu), v, t, ws(iu), v, nu, nmesh-k, nv, k, 1 ws(imesh), nmesh, dt, tstop) call dpost(ws(iu), nu, k, ws(imesh), nmesh, v, nv, tstart, tstop 1 , dt, af, bc, dee, errpar, handle) call leave call wrapup stop end subroutine af(t, xi, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx double precision t, xi(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), 1 utx(nx, nu) double precision v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, 1 nu, nu), aut(nx, nu, nu) double precision autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv) 1 , f(nx, nu), fu(nx, nu, nu), fux(nx, nu, nu) double precision fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv) 1 , fvt(nx, nu, nv) common /dpostf/ failed logical failed integer i double precision xxi(99), xtv(99), xvv(99), x(99), dcos, dsin double precision xxiv(99), ax(99), fx(99), xt(99), xv(99) logical temp temp = v(2) .le. v(1) if (.not. temp) temp = v(2) .ge. v(3) if (.not. temp) goto 1 failed = .true. return c map xi into x. 1 call dlplm(xi, nx, v, 3, x, xxi, xxiv, xv, xvv, xt, xtv) c map u into x system. call dpostu(xi, x, xt, xxi, xv, vt, nx, 3, ux, ut, nu, ax, fx) do 4 i = 1, nx a(i, 1) = -u(i, 1) au(i, 1, 1) = -1 f(i, 1) = ut(i, 1) fut(i, 1, 1) = 1 if (xi(i) .gt. 1d0) goto 2 f(i, 1) = f(i, 1)-2d0*dcos(x(i)+t) fx(i) = 2d0*dsin(x(i)+t) goto 3 2 f(i, 1) = f(i, 1)-vt(4) fvt(i, 1, 4) = -1 f(i, 1) = f(i, 1)+2d0*dsin(x(i)+t) fx(i) = 2d0*dcos(x(i)+t) 3 continue 4 continue c map a and f into xi system. call dposti(xi, x, xt, xxi, xv, xtv, xxiv, xvv, nx, ux, ut, nu, v, 1 vt, nv, 1, 3, a, ax, au, aux, aut, autx, av, avt, f, fx, fu, 2 fux, fut, futx, fv, fvt) return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv double precision t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) double precision utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2 1 ), bux(nu, nu, 2) double precision but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), 1 bvt(nu, nv, 2) double precision dsin b(1, 1) = u(1, 1)-dsin(t-3.14) c u(-pi,t) = sin(-pi+t). bu(1, 1, 1) = 1 return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k double precision t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt( 1 nv) double precision d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv( 1 nv, nv), dvt(nv, nv) integer intrvd, i, ileft double precision bx(10), xx(1), d1mach integer temp d(1) = v(1)+3.14 c x(0,v) = -pi. dv(1, 1) = 1 c xx(1) = 1 + a rounding error. xx(1) = d1mach(4)+1d0 ileft = intrvd(nx, x, xx(1)) c get the b-spline basis at xx. call dbspln(k, x, nx, xx, 1, ileft, bx) d(2) = -v(4) c u(x(t)+,t) - jump = 0. dv(2, 4) = -1 do 1 i = 1, k temp = ileft+i-k d(2) = d(2)+u(temp, 1)*bx(i) temp = ileft+i-k du(2, temp, 1) = bx(i) 1 continue d(3) = v(3)-3.14 c x(2,v) = +pi. dv(3, 3) = 1 c jump + d( x(1,v(t)) )/dt = 0. d(4) = vt(2)+v(4) dvt(4, 2) = 1 dv(4, 4) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k double precision t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) double precision x(nx), dt, tstop common /param/ vc, xx double precision vc(4), xx(3) common /time/ tt double precision tt external uofx integer i1mach double precision deesff, eu, ev(2) integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t, dt 1 format (16h restart for t =, 1pe10.2, 7h dt =, 1pe10.2) return 2 tt = t c uofx needs v for mapping. call movefd(nv, v, vc) eu = deesff(k, x, nx, u, uofx) c error in position of shock. ev(1) = v(2)-(3.14/2.-t) c error in height of shock. ev(2) = v(4)-1d0 temp = i1mach(2) write (temp, 3) t, eu, ev 3 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2, 6h v =, 2( 1 1pe10.2)) return end subroutine uofx(xi, nx, u, w) integer nx double precision xi(nx), u(nx), w(nx) common /cstak/ ds double precision ds(500) common /param/ vc, x double precision vc(4), x(3) common /time/ t double precision t integer ixv, ixx, istkgt, i, is(1000) real rs(1000) logical ls(1000) complex cs(500) double precision ewe, ws(500) integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c the port library stack and its aliases. call enter(1) ixx = istkgt(nx, 4) c space for x and xv. ixv = istkgt(3*nx, 4) c map into user system. call dlplmx(xi, nx, vc, 3, ws(ixx), ws(ixv)) do 1 i = 1, nx temp = ixx+i u(i) = ewe(t, ws(temp-1), vc(2)) if (xi(i) .gt. 1d0) u(i) = u(i)+1d0 1 continue call leave return end double precision function ewe(t, x, xbreak) double precision t, x, xbreak double precision dcos, dsin if (x .ge. xbreak) goto 1 ewe = dsin(x+t) return 1 if (x .le. xbreak) goto 2 ewe = dcos(x+t) return 2 call seterr(17hewe - x == xbreak, 17, 1, 2) 3 continue 4 stop end PyBDSF-1.10.1/src/port3/dpostx7.f000066400000000000000000000165141420247104600162450ustar00rootroot00000000000000C$TEST DPOST7 c main program common /cstak/ ds double precision ds(4000) common /time/ t double precision t common /param/ vc, x, xi0 double precision vc(4), x(3), xi0 external dee, handle, uofx, bc, af integer ndx, idlumb, istkgt, k, iu, is(1000) integer nu, nv, immmd, imesh, nmesh real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, d, v(4), dt, xb(3), ws(500) double precision tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test dpost on c u sub t = u sub xx + f on (20,10**6) c where f is chosen so that the solution is c u(x,t) = exp(-x*t), c and x(1,t) is chosen so that the boundary-layer is tracked c implicitly by forcing u(x(1,t)/2.3/d,t) = 1/e. c this is the same as requiring the exact solution to have c u(x(1,t),t) = 10 ** -d. c v(1,2,3) gives the moving mesh, v(4) is time. c the port library stack and its aliases. c initialize the port library stack length. call istkin(4000, 4) call enter(1) nu = 1 nv = 4 errpar(1) = 1e-2 c mixed relative and absolute error. errpar(2) = 1e-2 d = 3 c w(xi0,t) = 1/e. xi0 = 1./2.3/d tstart = 20 tstop = 1d+6 dt = 1d-2 k = 4 c ndx uniform mesh points on each interval of xb. ndx = 6 xb(1) = 0 xb(2) = 1 xb(3) = 2 c get mesh on port stack. imesh = idlumb(xb, 3, ndx, k, nmesh) c make 1d0 of multiplicity k-1. imesh = immmd(imesh, nmesh, 1d0, k-1) x(1) = 0 x(2) = 2.3*d/tstart x(3) = 1 c initial values for v. call dlplmg(3, x, vc) c get u on port stack. iu = istkgt(nmesh-k, 4) c uofx needs time. t = tstart vc(4) = tstart c uofx needs v for mapping. call movefd(nv, vc, v) c initial conditions for u. call dl2sff(uofx, k, ws(imesh), nmesh, ws(iu)) c output ics. call handle(t-1d0, ws(iu), v, t, ws(iu), v, nu, nmesh-k, nv, k, 1 ws(imesh), nmesh, dt, tstop) call dpost(ws(iu), nu, k, ws(imesh), nmesh, v, nv, tstart, tstop 1 , dt, af, bc, dee, errpar, handle) call leave call wrapup stop end subroutine af(t, xi, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx double precision t, xi(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), 1 utx(nx, nu) double precision v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, 1 nu, nu), aut(nx, nu, nu) double precision autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv) 1 , f(nx, nu), fu(nx, nu, nu), fux(nx, nu, nu) double precision fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv) 1 , fvt(nx, nu, nv) common /dpostf/ failed logical failed integer i double precision xxi(99), xtv(99), xvv(99), x(99), xxiv(99), ax( 1 99) double precision fx(99), xt(99), xv(99), dexpl logical temp temp = v(2) .le. v(1) if (.not. temp) temp = v(2) .ge. v(3) if (.not. temp) goto 1 failed = .true. return c map xi into x. 1 call dlplm(xi, nx, v, 3, x, xxi, xxiv, xv, xvv, xt, xtv) c map u into x system. call dpostu(xi, x, xt, xxi, xv, vt, nx, 3, ux, ut, nu, ax, fx) do 2 i = 1, nx a(i, 1) = -ux(i, 1) aux(i, 1, 1) = -1 f(i, 1) = (-ut(i, 1))-dexpl((-x(i))*v(4))*(x(i)+v(4)**2) fut(i, 1, 1) = -1 fv(i, 1, 4) = (-dexpl((-x(i))*v(4)))*(2d0*v(4)+(x(i)+v(4)**2)*( 1 -x(i))) fx(i) = (-dexpl((-x(i))*v(4)))*(1d0-v(4)*x(i)-v(4)**3) 2 continue c map a and f into xi system. call dposti(xi, x, xt, xxi, xv, xtv, xxiv, xvv, nx, ux, ut, nu, v, 1 vt, nv, 1, 3, a, ax, au, aux, aut, autx, av, avt, f, fx, fu, 2 fux, fut, futx, fv, fvt) return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv double precision t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) double precision utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2 1 ), bux(nu, nu, 2) double precision but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), 1 bvt(nu, nv, 2) double precision dexpl c u(0,t) = 1 b(1, 1) = u(1, 1)-1d0 c u(1,t) = exp(-t) b(1, 2) = u(1, 2)-dexpl(-v(4)) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 bv(1, 4, 2) = dexpl(-v(4)) return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k double precision t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt( 1 nv) double precision d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv( 1 nv, nv), dvt(nv, nv) common /param/ vc, xc, xi0 double precision vc(4), xc(3), xi0 integer intrvd, i, ileft double precision dexp, bx(10), xx(1) integer temp d(1) = v(1) c x(0,v) = 0. dv(1, 1) = 1 xx(1) = xi0 ileft = intrvd(nx, x, xx(1)) c get the b-spline basis at xx. call dbspln(k, x, nx, xx, 1, ileft, bx) d(2) = -dexp(-1d0) c d(2) = w(xi0,t) - exp(-1). do 1 i = 1, k temp = ileft+i-k d(2) = d(2)+u(temp, 1)*bx(i) temp = ileft+i-k du(2, temp, 1) = bx(i) 1 continue d(3) = v(3)-1d0 c x(2,v) = 1. dv(3, 3) = 1 d(4) = vt(4)-1d0 dvt(4, 4) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k double precision t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) double precision x(nx), dt, tstop common /param/ vc, xx, xi0 double precision vc(4), xx(3), xi0 common /time/ tt double precision tt external uofx integer i1mach double precision deesff, dlplmt, eu, ev integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t, dt 1 format (16h restart for t =, 1pe10.2, 7h dt =, 1pe10.2) return c let dt carry v(2) down by no more than a factor of 10. 2 dt = dlplmt(t, v, nv, t0, v0, 1d-1, dt) tt = t c uofx needs v for mapping. call movefd(nv, v, vc) eu = deesff(k, x, nx, u, uofx) c error in position of boundary layer. ev = v(2)-1d0/xi0/t temp = i1mach(2) write (temp, 3) t, eu, ev 3 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2, 6h v =, 1p 1 e10.2) return end subroutine uofx(xi, nx, u, w) integer nx double precision xi(nx), u(nx), w(nx) common /cstak/ ds double precision ds(500) common /param/ vc, x, xi0 double precision vc(4), x(3), xi0 common /time/ t double precision t integer ixv, ixx, istkgt, i, is(1000) real rs(1000) logical ls(1000) complex cs(500) double precision ws(500), dexpl integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c the port library stack and its aliases. call enter(1) ixx = istkgt(nx, 4) c space for x and xv. ixv = istkgt(3*nx, 4) c map into user system. call dlplmx(xi, nx, vc, 3, ws(ixx), ws(ixv)) do 1 i = 1, nx temp = ixx+i u(i) = dexpl((-ws(temp-1))*t) 1 continue call leave return end PyBDSF-1.10.1/src/port3/dpostx8.f000066400000000000000000000152641420247104600162470ustar00rootroot00000000000000C$TEST DPOST8 c main program common /cstak/ ds double precision ds(5000) common /time/ t double precision t common /kmesh/ k, nmesh integer k, nmesh common /cmesh/ mesh double precision mesh(100) external dee, handle, uofx, bc, af integer ndx, i, is(1000), nu, nv real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision u(100), v(100), dt, ws(500), tstop integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test dpost on the integro-pde c u sub t = 2 * u sub xx - int(0,1) exp(x-y)*u(y) dy on (0,1) c subject to given dirichlet bcs, chosen so that the solution is c u(x,t) = exp(t+x). c the port library stack and its aliases. c initialize the port library stack length. call istkin(5000, 4) nu = 1 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstop = 1 dt = 1d-2 k = 4 c ndx uniform mesh points on (0,1). ndx = 7 call dumb(0d0, 1d0, ndx, k, mesh, nmesh) nv = nmesh-k c uofx needs t. t = 0 c ics for u. call dl2sff(uofx, k, mesh, nmesh, u) temp = nmesh-k do 1 i = 1, temp v(i) = u(i) 1 continue c ics for v. call dpost(u, nu, k, mesh, nmesh, v, nv, 0d0, tstop, dt, af, bc, 1 dee, errpar, handle) call wrapup stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx double precision t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx( 1 nx, nu) double precision v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, 1 nu, nu), aut(nx, nu, nu) double precision autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv) 1 , f(nx, nu), fu(nx, nu, nu), fux(nx, nu, nu) double precision fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv) 1 , fvt(nx, nu, nv) common /kmesh/ k, nmesh integer k, nmesh common /cmesh/ mesh double precision mesh(100) integer i do 1 i = 1, nx a(i, 1) = 2d0*ux(i, 1) aux(i, 1, 1) = 2 f(i, 1) = ut(i, 1) fut(i, 1, 1) = 1 1 continue c get the integral. call intgrl(k, mesh, nmesh, v, x, nx, f, fv) return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv double precision t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) double precision utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2 1 ), bux(nu, nu, 2) double precision but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), 1 bvt(nu, nv, 2) double precision dexp b(1, 1) = u(1, 1)-dexp(t) b(1, 2) = u(1, 2)-dexp(t+1d0) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k double precision t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt( 1 nv) double precision d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv( 1 nv, nv), dvt(nv, nv) integer i do 1 i = 1, nxmk d(i) = u(i, 1)-v(i) du(i, i, 1) = 1 dv(i, i) = -1 1 continue return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k double precision t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) double precision x(nx), dt, tstop common /time/ tt double precision tt external uofx integer i1mach double precision deesff, eu integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t0, dt 1 format (16h restart for t =, 1pe10.2, 7h dt =, 1pe10.2) return 2 tt = t eu = deesff(k, x, nx, u, uofx) temp = i1mach(2) write (temp, 3) t, eu 3 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2) return end subroutine uofx(x, nx, u, w) integer nx double precision x(nx), u(nx), w(nx) common /time/ t double precision t integer i double precision dexp do 1 i = 1, nx u(i) = dexp(t+x(i)) 1 continue return end subroutine intgrl(k, mesh, nmesh, v, x, nx, f, fv) integer nx, nmesh integer k double precision mesh(nmesh), v(1), x(nx), f(nx), fv(nx, 1) integer mgq, i, j, l, ix logical first double precision ewe, ker, wgq(3), xgq(3), b(3, 4, 200), keru double precision xx(3) integer temp, temp1 data first/.true./ c to compute c f = integral from mesh(1) to mesh(nmesh) c kernel(x,y,sum(i=1,...,nmesh-k) v(i)*b(i,y)) dy c and c fv = d(f)/d(v). c assume that call kernel(x,y,u,ker,keru) returns c ker = kernel(x,y,u) and c keru = partial kernel / partial u. c v(nmesh-k),fv(nx,nmesh-k) c the following declaration is specific to k = 4 splines. if (nmesh-k .gt. 200) call seterr(27hintgrl - nmesh-k .gt. nxmax 1 , 27, 1, 2) c need more local space. if (k .ne. 4) call seterr(17hintgrl - k .ne. 4, 17, 2, 2) c use k-1 point gaussian-quadrature rule on each interval. mgq = k-1 if (first) call dgqm11(mgq, xgq, wgq) c only get gq rule once, its expensive. c the gaussian quadrature rule. c do integral interval by interval. temp = nmesh-k do 6 i = k, temp c g.q. points on (mesh(i), mesh(i+1)). do 1 j = 1, mgq xx(j) = 0.5*(mesh(i+1)+mesh(i))+0.5*(mesh(i+1)-mesh(i))*xgq( 1 j) 1 continue if (first) call dbspln(k, mesh, nmesh, xx, mgq, i, b(1, 1, i)) c only get b-spline basis once, its expensive. do 5 j = 1, mgq c get sum() v()*b()(xx). ewe = 0 do 2 l = 1, k temp1 = i+l-k ewe = ewe+v(temp1)*b(j, l, i) 2 continue do 4 ix = 1, nx c get kernel and partial. call kernel(x(ix), xx(j), ewe, ker, keru) f(ix) = f(ix)+0.5*ker*(mesh(i+1)-mesh(i))*wgq(j) do 3 l = 1, k temp1 = i+l-k fv(ix, temp1) = fv(ix, temp1)+0.5*b(j, l, i)*keru*( 1 mesh(i+1)-mesh(i))*wgq(j) 3 continue 4 continue 5 continue 6 continue first = .false. return end subroutine kernel(x, y, u, ker, keru) double precision x, y, u, ker, keru double precision dexp c to evaluate the kernel exp(x-y)*u(y) and its partial wrt. u. keru = dexp(x-y) ker = keru*u return end PyBDSF-1.10.1/src/port3/dpostx9.f000066400000000000000000000111131420247104600162350ustar00rootroot00000000000000C$TEST DPOST9 c main program common /cstak/ ds double precision ds(2000) common /param/ c double precision c external handle, dpostd, bc, af integer ndx, nxc, nxx, i, k, is(1000) integer nu, nv, nx, i1mach real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision deebsf, ewe(1000), err, u(100), v(1), x(100) double precision errr, dt, xc(100), uc(100), ws(500), xx(1000) double precision d1mach, tstop integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test dpost on automatic, static mesh refinement. c u sub t = u sub xx + c * u sub x on (0,1) c the solution is c u(x,t) = exp(-c*x). c the port library stack and its aliases. c initialize the port library stack length. call istkin(2000, 4) c = 50 nu = 1 nv = 0 errpar(1) = 1e-1 errpar(2) = 1e-1 k = 4 ndx = 8 call dumb(0d0, 1d0, ndx, k, xc, nxc) c initial conditions for uc. call setd(nxc-k, 0d0, uc) c infinity. err = d1mach(2) 1 if (err .le. 1d-2) goto 6 c halve the crude x. call dlumb(xc, nxc, 3, k, x, nx) c fitting points for refinement. call dlumd(x, nx, k, xx, nxx) c uc on xx. call dsplne(k, xc, nxc, uc, xx, nxx, ewe) c fit u to uc on mesh. call ddl2sf(xx, ewe, nxx, k, x, nx, u) tstop = 1d0/d1mach(4) dt = 1d-6 i = nx-2*(k-1) temp = i1mach(2) write (temp, 2) i 2 format (18h solving for ndx =, i3) call dpost(u, nu, k, x, nx, v, nv, 0d0, tstop, dt, af, bc, 1 dpostd, errpar, handle) c get run-time statistics. call dpostx c error estimate for uc. err = deebsf(k, xc, nxc, uc, x, nx, u) c error estimate for u. errr = err/16d0 temp = i1mach(2) write (temp, 3) err, errr 3 format (21h error estimates uc =, 1pe10.2, 9h and u =, 1p 1 e10.2) nxc = nx do 4 i = 1, nx xc(i) = x(i) 4 continue temp = nx-k do 5 i = 1, temp uc(i) = u(i) 5 continue goto 1 6 stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nx integer nv double precision t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx( 1 nx, nu) double precision v(1), vt(1), a(nx, nu), au(nx, nu, nu), aux(nx, 1 nu, nu), aut(nx, nu, nu) double precision autx(nx, nu, nu), av(1), avt(1), f(nx, nu), fu( 1 nx, nu, nu), fux(nx, nu, nu) double precision fut(nx, nu, nu), futx(nx, nu, nu), fv(1), fvt(1) common /param/ c double precision c integer i do 1 i = 1, nx a(i, 1) = ux(i, 1)+c*u(i, 1) aux(i, 1, 1) = 1 au(i, 1, 1) = c f(i, 1) = ut(i, 1) fut(i, 1, 1) = 1 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu integer nv double precision t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) double precision utx(nu, 2), v(1), vt(1), b(nu, 2), bu(nu, nu, 2), 1 bux(nu, nu, 2) double precision but(nu, nu, 2), butx(nu, nu, 2), bv(1), bvt(1) common /param/ c double precision c double precision dexp b(1, 1) = u(1, 1)-1d0 b(1, 2) = u(1, 2)-dexp(-c) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nx integer nv, k double precision t0, u0(nxmk, nu), v0(1), t, u(nxmk, nu), v(1) double precision x(nx), dt, tstop common /time/ tt double precision tt external uofx integer i1mach double precision deesff, eu integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 tt = t eu = deesff(k, x, nx, u, uofx) temp = i1mach(2) write (temp, 3) t, eu 3 format (15h error in u(x, , 1pe10.2, 4h ) =, 1pe10.2) return end subroutine uofx(x, nx, u, w) integer nx double precision x(nx), u(nx), w(nx) common /param/ c double precision c common /time/ t double precision t integer i double precision dexp do 1 i = 1, nx u(i) = dexp((-c)*x(i)) 1 continue return end PyBDSF-1.10.1/src/port3/dq7apl.f000066400000000000000000000053501420247104600160210ustar00rootroot00000000000000 SUBROUTINE DQ7APL(NN, N, P, J, R, IERR) C *****PARAMETERS. INTEGER NN, N, P, IERR DOUBLE PRECISION J(NN,P), R(N) C C .................................................................. C .................................................................. C C *****PURPOSE. C THIS SUBROUTINE APPLIES TO R THE ORTHOGONAL TRANSFORMATIONS C STORED IN J BY QRFACT C C *****PARAMETER DESCRIPTION. C ON INPUT. C C NN IS THE ROW DIMENSION OF THE MATRIX J AS DECLARED IN C THE CALLING PROGRAM DIMENSION STATEMENT C C N IS THE NUMBER OF ROWS OF J AND THE SIZE OF THE VECTOR R C C P IS THE NUMBER OF COLUMNS OF J AND THE SIZE OF SIGMA C C J CONTAINS ON AND BELOW ITS DIAGONAL THE COLUMN VECTORS C U WHICH DETERMINE THE HOUSEHOLDER TRANSFORMATIONS C IDENT - U*U.TRANSPOSE C C R IS THE RIGHT HAND SIDE VECTOR TO WHICH THE ORTHOGONAL C TRANSFORMATIONS WILL BE APPLIED C C IERR IF NON-ZERO INDICATES THAT NOT ALL THE TRANSFORMATIONS C WERE SUCCESSFULLY DETERMINED AND ONLY THE FIRST C ABS(IERR) - 1 TRANSFORMATIONS WILL BE USED C C ON OUTPUT. C C R HAS BEEN OVERWRITTEN BY ITS TRANSFORMED IMAGE C C *****APPLICATION AND USAGE RESTRICTIONS. C NONE C C *****ALGORITHM NOTES. C THE VECTORS U WHICH DETERMINE THE HOUSEHOLDER TRANSFORMATIONS C ARE NORMALIZED SO THAT THEIR 2-NORM SQUARED IS 2. THE _USE_ OF C THESE TRANSFORMATIONS HERE IS IN THE SPIRIT OF (1). C C *****SUBROUTINES AND FUNCTIONS CALLED. C C DD7TPR - FUNCTION, RETURNS THE INNER PRODUCT OF VECTORS C C *****REFERENCES. C (1) BUSINGER, P. A., AND GOLUB, G. H. (1965), LINEAR LEAST SQUARES C SOLUTIONS BY HOUSEHOLDER TRANSFORMATIONS, NUMER. MATH. 7, C PP. 269-276. C C *****HISTORY. C DESIGNED BY DAVID M. GAY, CODED BY STEPHEN C. PETERS (WINTER 1977) C CALL ON DV2AXY SUBSTITUTED FOR DO LOOP, FALL 1983. C C *****GENERAL. C C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, AND MCS76-11989. C C .................................................................. C .................................................................. C C *****LOCAL VARIABLES. INTEGER K, L, NL1 C *****FUNCTIONS. DOUBLE PRECISION DD7TPR EXTERNAL DD7TPR,DV2AXY C C *** BODY *** C K = P IF (IERR .NE. 0) K = IABS(IERR) - 1 IF ( K .EQ. 0) GO TO 999 C DO 20 L = 1, K NL1 = N - L + 1 CALL DV2AXY(NL1, R(L), -DD7TPR(NL1,J(L,L),R(L)), J(L,L), R(L)) 20 CONTINUE C 999 RETURN C *** LAST LINE OF DQ7APL FOLLOWS *** END PyBDSF-1.10.1/src/port3/dq7rad.f000066400000000000000000000101361420247104600160110ustar00rootroot00000000000000 SUBROUTINE DQ7RAD(N, NN, P, QTR, QTRSET, RMAT, W, Y) C C *** ADD ROWS W TO QR FACTORIZATION WITH R MATRIX RMAT AND C *** Q**T * RESIDUAL = QTR. Y = NEW COMPONENTS OF RESIDUAL C *** CORRESPONDING TO W. QTR, Y REFERENCED ONLY IF QTRSET = .TRUE. C LOGICAL QTRSET INTEGER N, NN, P DOUBLE PRECISION QTR(P), RMAT(1), W(NN,P), Y(N) C DIMENSION RMAT(P*(P+1)/2) C/+ DOUBLE PRECISION DSQRT C/ DOUBLE PRECISION DD7TPR, DR7MDC, DV2NRM EXTERNAL DD7TPR, DR7MDC,DV2AXY, DV7SCL, DV2NRM C C *** LOCAL VARIABLES *** C INTEGER I, II, IJ, IP1, J, K, NK DOUBLE PRECISION ARI, QRI, RI, S, T, WI DOUBLE PRECISION BIG, BIGRT, ONE, TINY, TINYRT, ZERO C/7 SAVE BIGRT, TINY, TINYRT C/ DATA BIG/-1.D+0/, BIGRT/-1.D+0/, ONE/1.D+0/, TINY/0.D+0/, 1 TINYRT/0.D+0/, ZERO/0.D+0/ C C------------------------------ BODY ----------------------------------- C IF (TINY .GT. ZERO) GO TO 10 TINY = DR7MDC(1) BIG = DR7MDC(6) IF (TINY*BIG .LT. ONE) TINY = ONE / BIG 10 K = 1 NK = N II = 0 DO 180 I = 1, P II = II + I IP1 = I + 1 IJ = II + I IF (NK .LE. 1) T = DABS(W(K,I)) IF (NK .GT. 1) T = DV2NRM(NK, W(K,I)) IF (T .LT. TINY) GOTO 180 RI = RMAT(II) IF (RI .NE. ZERO) GO TO 100 IF (NK .GT. 1) GO TO 30 IJ = II DO 20 J = I, P RMAT(IJ) = W(K,J) IJ = IJ + J 20 CONTINUE IF (QTRSET) QTR(I) = Y(K) W(K,I) = ZERO GO TO 999 30 WI = W(K,I) IF (BIGRT .GT. ZERO) GO TO 40 BIGRT = DR7MDC(5) TINYRT = DR7MDC(2) 40 IF (T .LE. TINYRT) GO TO 50 IF (T .GE. BIGRT) GO TO 50 IF (WI .LT. ZERO) T = -T WI = WI + T S = DSQRT(T * WI) GO TO 70 50 S = DSQRT(T) IF (WI .LT. ZERO) GO TO 60 WI = WI + T S = S * DSQRT(WI) GO TO 70 60 T = -T WI = WI + T S = S * DSQRT(-WI) 70 W(K,I) = WI CALL DV7SCL(NK, W(K,I), ONE/S, W(K,I)) RMAT(II) = -T IF (.NOT. QTRSET) GO TO 80 CALL DV2AXY(NK, Y(K), -DD7TPR(NK,Y(K),W(K,I)), W(K,I), Y(K)) QTR(I) = Y(K) 80 IF (IP1 .GT. P) GO TO 999 DO 90 J = IP1, P CALL DV2AXY(NK, W(K,J), -DD7TPR(NK,W(K,J),W(K,I)), 1 W(K,I), W(K,J)) RMAT(IJ) = W(K,J) IJ = IJ + J 90 CONTINUE IF (NK .LE. 1) GO TO 999 K = K + 1 NK = NK - 1 GO TO 180 C 100 ARI = DABS(RI) IF (ARI .GT. T) GO TO 110 T = T * DSQRT(ONE + (ARI/T)**2) GO TO 120 110 T = ARI * DSQRT(ONE + (T/ARI)**2) 120 IF (RI .LT. ZERO) T = -T RI = RI + T RMAT(II) = -T S = -RI / T IF (NK .LE. 1) GO TO 150 CALL DV7SCL(NK, W(K,I), ONE/RI, W(K,I)) IF (.NOT. QTRSET) GO TO 130 QRI = QTR(I) T = S * ( QRI + DD7TPR(NK, Y(K), W(K,I)) ) QTR(I) = QRI + T 130 IF (IP1 .GT. P) GO TO 999 IF (QTRSET) CALL DV2AXY(NK, Y(K), T, W(K,I), Y(K)) DO 140 J = IP1, P RI = RMAT(IJ) T = S * ( RI + DD7TPR(NK, W(K,J), W(K,I)) ) CALL DV2AXY(NK, W(K,J), T, W(K,I), W(K,J)) RMAT(IJ) = RI + T IJ = IJ + J 140 CONTINUE GO TO 180 C 150 WI = W(K,I) / RI W(K,I) = WI IF (.NOT. QTRSET) GO TO 160 QRI = QTR(I) T = S * ( QRI + Y(K)*WI ) QTR(I) = QRI + T 160 IF (IP1 .GT. P) GO TO 999 IF (QTRSET) Y(K) = T*WI + Y(K) DO 170 J = IP1, P RI = RMAT(IJ) T = S * (RI + W(K,J)*WI) W(K,J) = W(K,J) + T*WI RMAT(IJ) = RI + T IJ = IJ + J 170 CONTINUE 180 CONTINUE C 999 RETURN C *** LAST LINE OF DQ7RAD FOLLOWS *** END PyBDSF-1.10.1/src/port3/dq7rfh.f000066400000000000000000000141711420247104600160250ustar00rootroot00000000000000 SUBROUTINE DQ7RFH(IERR, IPIVOT, N, NN, NOPIVK, P, Q, R, RLEN, W) C C *** COMPUTE QR FACTORIZATION VIA HOUSEHOLDER TRANSFORMATIONS C *** WITH COLUMN PIVOTING *** C C *** PARAMETER DECLARATIONS *** C INTEGER IERR, N, NN, NOPIVK, P, RLEN INTEGER IPIVOT(P) DOUBLE PRECISION Q(NN,P), R(RLEN), W(P) C DIMENSION R(P*(P+1)/2) C C---------------------------- DESCRIPTION ---------------------------- C C THIS ROUTINE COMPUTES A QR FACTORIZATION (VIA HOUSEHOLDER TRANS- C FORMATIONS) OF THE MATRIX A THAT ON INPUT IS STORED IN Q. C IF NOPIVK ALLOWS IT, THIS ROUTINE DOES COLUMN PIVOTING -- IF C K .GT. NOPIVK, THEN ORIGINAL COLUMN K IS ELIGIBLE FOR PIVOTING. C THE Q AND R RETURNED ARE SUCH THAT COLUMN I OF Q*R EQUALS C COLUMN IPIVOT(I) OF THE ORIGINAL MATRIX A. THE UPPER TRIANGULAR C MATRIX R IS STORED COMPACTLY BY COLUMNS, I.E., THE OUTPUT VECTOR R C CONTAINS R(1,1), R(1,2), R(2,2), R(1,3), R(2,3), ..., R(P,P) (IN C THAT ORDER). IF ALL GOES WELL, THEN THIS ROUTINE SETS IERR = 0. C BUT IF (PERMUTED) COLUMN K OF A IS LINEARLY DEPENDENT ON C (PERMUTED) COLUMNS 1,2,...,K-1, THEN IERR IS SET TO K AND THE R C MATRIX RETURNED HAS R(I,J) = 0 FOR I .GE. K AND J .GE. K. C THE ORIGINAL MATRIX A IS AN N BY P MATRIX. NN IS THE LEAD C DIMENSION OF THE ARRAY Q AND MUST SATISFY NN .GE. N. NO C PARAMETER CHECKING IS DONE. C PIVOTING IS DONE AS THOUGH ALL COLUMNS OF Q WERE FIRST C SCALED TO HAVE THE SAME NORM. IF COLUMN K IS ELIGIBLE FOR C PIVOTING AND ITS (SCALED) NORM**2 LOSS IS MORE THAN THE C MINIMUM SUCH LOSS (OVER COLUMNS K THRU P), THEN COLUMN K IS C SWAPPED WITH THE COLUMN OF LEAST NORM**2 LOSS. C C CODED BY DAVID M. GAY (FALL 1979, SPRING 1984). C C-------------------------- LOCAL VARIABLES -------------------------- C INTEGER I, II, J, K, KK, KM1, KP1, NK1 DOUBLE PRECISION AK, QKK, S, SINGTL, T, T1, WK DOUBLE PRECISION DD7TPR, DR7MDC, DV2NRM EXTERNAL DD7TPR, DR7MDC,DV2AXY, DV7SCL, DV7SCP,DV7SWP, DV2NRM C/+ DOUBLE PRECISION DSQRT C/ DOUBLE PRECISION BIG, BIGRT, MEPS10, ONE, TEN, TINY, TINYRT, 1 WTOL, ZERO C/6 C DATA ONE/1.0D+0/, TEN/1.D+1/, WTOL/0.75D+0/, ZERO/0.0D+0/ C/7 PARAMETER (ONE=1.0D+0, TEN=1.D+1, WTOL=0.75D+0, ZERO=0.0D+0) SAVE BIGRT, MEPS10, TINY, TINYRT C/ DATA BIGRT/0.0D+0/, MEPS10/0.0D+0/, TINY/0.D+0/, TINYRT/0.D+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IERR = 0 IF (MEPS10 .GT. ZERO) GO TO 10 BIGRT = DR7MDC(5) MEPS10 = TEN * DR7MDC(3) TINYRT = DR7MDC(2) TINY = DR7MDC(1) BIG = DR7MDC(6) IF (TINY*BIG .LT. ONE) TINY = ONE / BIG 10 SINGTL = FLOAT(MAX0(N,P)) * MEPS10 C C *** INITIALIZE W, IPIVOT, AND DIAG(R) *** C J = 0 DO 40 I = 1, P IPIVOT(I) = I T = DV2NRM(N, Q(1,I)) IF (T .GT. ZERO) GO TO 20 W(I) = ONE GO TO 30 20 W(I) = ZERO 30 J = J + I R(J) = T 40 CONTINUE C C *** MAIN LOOP *** C KK = 0 NK1 = N + 1 DO 130 K = 1, P IF (NK1 .LE. 1) GO TO 999 NK1 = NK1 - 1 KK = KK + K KP1 = K + 1 IF (K .LE. NOPIVK) GO TO 60 IF (K .GE. P) GO TO 60 C C *** FIND COLUMN WITH MINIMUM WEIGHT LOSS *** C T = W(K) IF (T .LE. ZERO) GO TO 60 J = K DO 50 I = KP1, P IF (W(I) .GE. T) GO TO 50 T = W(I) J = I 50 CONTINUE IF (J .EQ. K) GO TO 60 C C *** INTERCHANGE COLUMNS K AND J *** C I = IPIVOT(K) IPIVOT(K) = IPIVOT(J) IPIVOT(J) = I W(J) = W(K) W(K) = T I = J*(J+1)/2 T1 = R(I) R(I) = R(KK) R(KK) = T1 CALL DV7SWP(N, Q(1,K), Q(1,J)) IF (K .LE. 1) GO TO 60 I = I - J + 1 J = KK - K + 1 CALL DV7SWP(K-1, R(I), R(J)) C C *** COLUMN K OF Q SHOULD BE NEARLY ORTHOGONAL TO THE PREVIOUS C *** COLUMNS. NORMALIZE IT, TEST FOR SINGULARITY, AND DECIDE C *** WHETHER TO REORTHOGONALIZE IT. C 60 AK = R(KK) IF (AK .LE. ZERO) GO TO 140 WK = W(K) C C *** SET T TO THE NORM OF (Q(K,K),...,Q(N,K)) C *** AND CHECK FOR SINGULARITY. C IF (WK .LT. WTOL) GO TO 70 T = DV2NRM(NK1, Q(K,K)) IF (T / AK .LE. SINGTL) GO TO 140 GO TO 80 70 T = DSQRT(ONE - WK) IF (T .LE. SINGTL) GO TO 140 T = T * AK C C *** DETERMINE HOUSEHOLDER TRANSFORMATION *** C 80 QKK = Q(K,K) IF (T .LE. TINYRT) GO TO 90 IF (T .GE. BIGRT) GO TO 90 IF (QKK .LT. ZERO) T = -T QKK = QKK + T S = DSQRT(T * QKK) GO TO 110 90 S = DSQRT(T) IF (QKK .LT. ZERO) GO TO 100 QKK = QKK + T S = S * DSQRT(QKK) GO TO 110 100 T = -T QKK = QKK + T S = S * DSQRT(-QKK) 110 Q(K,K) = QKK C C *** SCALE (Q(K,K),...,Q(N,K)) TO HAVE NORM SQRT(2) *** C IF (S .LE. TINY) GO TO 140 CALL DV7SCL(NK1, Q(K,K), ONE/S, Q(K,K)) C R(KK) = -T C C *** COMPUTE R(K,I) FOR I = K+1,...,P AND UPDATE Q *** C IF (K .GE. P) GO TO 999 J = KK + K II = KK DO 120 I = KP1, P II = II + I CALL DV2AXY(NK1, Q(K,I), -DD7TPR(NK1,Q(K,K),Q(K,I)), 1 Q(K,K), Q(K,I)) T = Q(K,I) R(J) = T J = J + I T1 = R(II) IF (T1 .GT. ZERO) W(I) = W(I) + (T/T1)**2 120 CONTINUE 130 CONTINUE C C *** SINGULAR Q *** C 140 IERR = K KM1 = K - 1 J = KK DO 150 I = K, P CALL DV7SCP(I-KM1, R(J), ZERO) J = J + I 150 CONTINUE C 999 RETURN C *** LAST CARD OF DQ7RFH FOLLOWS *** END PyBDSF-1.10.1/src/port3/dq7rsh.f000066400000000000000000000027011420247104600160360ustar00rootroot00000000000000 SUBROUTINE DQ7RSH(K, P, HAVQTR, QTR, R, W) C C *** PERMUTE COLUMN K OF R TO COLUMN P, MODIFY QTR ACCORDINGLY *** C LOGICAL HAVQTR INTEGER K, P DOUBLE PRECISION QTR(P), R(1), W(P) C DIMSNSION R(P*(P+1)/2) C DOUBLE PRECISION DH2RFG EXTERNAL DH2RFA, DH2RFG,DV7CPY C C *** LOCAL VARIABLES *** C INTEGER I, I1, J, JM1, JP1, J1, KM1, K1, PM1 DOUBLE PRECISION A, B, T, WJ, X, Y, Z, ZERO C DATA ZERO/0.0D+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IF (K .GE. P) GO TO 999 KM1 = K - 1 K1 = K * KM1 / 2 CALL DV7CPY(K, W, R(K1+1)) WJ = W(K) PM1 = P - 1 J1 = K1 + KM1 DO 50 J = K, PM1 JM1 = J - 1 JP1 = J + 1 IF (JM1 .GT. 0) CALL DV7CPY(JM1, R(K1+1), R(J1+2)) J1 = J1 + JP1 K1 = K1 + J A = R(J1) B = R(J1+1) IF (B .NE. ZERO) GO TO 10 R(K1) = A X = ZERO Z = ZERO GO TO 40 10 R(K1) = DH2RFG(A, B, X, Y, Z) IF (J .EQ. PM1) GO TO 30 I1 = J1 DO 20 I = JP1, PM1 I1 = I1 + I CALL DH2RFA(1, R(I1), R(I1+1), X, Y, Z) 20 CONTINUE 30 IF (HAVQTR) CALL DH2RFA(1, QTR(J), QTR(JP1), X, Y, Z) 40 T = X * WJ W(J) = WJ + T WJ = T * Z 50 CONTINUE W(P) = WJ CALL DV7CPY(P, R(K1+1), W) 999 RETURN END PyBDSF-1.10.1/src/port3/dr7mdc.f000066400000000000000000000025251420247104600160120ustar00rootroot00000000000000 DOUBLE PRECISION FUNCTION DR7MDC(K) C C *** RETURN MACHINE DEPENDENT CONSTANTS USED BY NL2SOL *** C INTEGER K C C *** THE CONSTANT RETURNED DEPENDS ON K... C C *** K = 1... SMALLEST POS. ETA SUCH THAT -ETA EXISTS. C *** K = 2... SQUARE ROOT OF ETA. C *** K = 3... UNIT ROUNDOFF = SMALLEST POS. NO. MACHEP SUCH C *** THAT 1 + MACHEP .GT. 1 .AND. 1 - MACHEP .LT. 1. C *** K = 4... SQUARE ROOT OF MACHEP. C *** K = 5... SQUARE ROOT OF BIG (SEE K = 6). C *** K = 6... LARGEST MACHINE NO. BIG SUCH THAT -BIG EXISTS. C DOUBLE PRECISION BIG, ETA, MACHEP C/+ DOUBLE PRECISION DSQRT C/ C DOUBLE PRECISION D1MACH, ZERO EXTERNAL D1MACH DATA BIG/0.D+0/, ETA/0.D+0/, MACHEP/0.D+0/, ZERO/0.D+0/ IF (BIG .GT. ZERO) GO TO 1 BIG = D1MACH(2) ETA = D1MACH(1) MACHEP = D1MACH(4) 1 CONTINUE C C------------------------------- BODY -------------------------------- C GO TO (10, 20, 30, 40, 50, 60), K C 10 DR7MDC = ETA GO TO 999 C 20 DR7MDC = DSQRT(256.D+0*ETA)/16.D+0 GO TO 999 C 30 DR7MDC = MACHEP GO TO 999 C 40 DR7MDC = DSQRT(MACHEP) GO TO 999 C 50 DR7MDC = DSQRT(BIG/256.D+0)*16.D+0 GO TO 999 C 60 DR7MDC = BIG C 999 RETURN C *** LAST CARD OF DR7MDC FOLLOWS *** END PyBDSF-1.10.1/src/port3/dr7tvm.f000066400000000000000000000013071420247104600160520ustar00rootroot00000000000000 SUBROUTINE DR7TVM(N, P, Y, D, U, X) C C *** SET Y TO R*X, WHERE R IS THE UPPER TRIANGULAR MATRIX WHOSE C *** DIAGONAL IS IN D AND WHOSE STRICT UPPER TRIANGLE IS IN U. C C *** X AND Y MAY SHARE STORAGE. C INTEGER N, P DOUBLE PRECISION Y(P), D(P), U(N,P), X(P) C DOUBLE PRECISION DD7TPR EXTERNAL DD7TPR C C *** LOCAL VARIABLES *** C INTEGER I, II, PL, PP1 DOUBLE PRECISION T C C *** BODY *** C PL = MIN0(N, P) PP1 = PL + 1 DO 10 II = 1, PL I = PP1 - II T = X(I) * D(I) IF (I .GT. 1) T = T + DD7TPR(I-1, U(1,I), X) Y(I) = T 10 CONTINUE 999 RETURN C *** LAST LINE OF DR7TVM FOLLOWS *** END PyBDSF-1.10.1/src/port3/drldst.f000066400000000000000000000013241420247104600161220ustar00rootroot00000000000000 DOUBLE PRECISION FUNCTION DRLDST(P, D, X, X0) C C *** COMPUTE AND RETURN RELATIVE DIFFERENCE BETWEEN X AND X0 *** C *** NL2SOL VERSION 2.2 *** C INTEGER P DOUBLE PRECISION D(P), X(P), X0(P) C INTEGER I DOUBLE PRECISION EMAX, T, XMAX, ZERO C/6 C DATA ZERO/0.D+0/ C/7 PARAMETER (ZERO=0.D+0) C/ C C *** BODY *** C EMAX = ZERO XMAX = ZERO DO 10 I = 1, P T = DABS(D(I) * (X(I) - X0(I))) IF (EMAX .LT. T) EMAX = T T = D(I) * (DABS(X(I)) + DABS(X0(I))) IF (XMAX .LT. T) XMAX = T 10 CONTINUE DRLDST = ZERO IF (XMAX .GT. ZERO) DRLDST = EMAX / XMAX 999 RETURN C *** LAST CARD OF DRLDST FOLLOWS *** END PyBDSF-1.10.1/src/port3/drmnf.f000066400000000000000000000115361420247104600157420ustar00rootroot00000000000000 SUBROUTINE DRMNF(D, FX, IV, LIV, LV, N, V, X) C C *** ITERATION DRIVER FOR DMNF... C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING C *** FINITE-DIFFERENCE GRADIENTS AND SECANT HESSIAN APPROXIMATIONS. C INTEGER LIV, LV, N INTEGER IV(LIV) DOUBLE PRECISION D(N), FX, X(N), V(LV) C DIMENSION V(77 + N*(N+17)/2) C C *** PURPOSE *** C C THIS ROUTINE INTERACTS WITH SUBROUTINE DRMNG IN AN ATTEMPT C TO FIND AN N-VECTOR X* THAT MINIMIZES THE (UNCONSTRAINED) C OBJECTIVE FUNCTION FX = F(X) COMPUTED BY THE CALLER. (OFTEN C THE X* FOUND IS A LOCAL MINIMIZER RATHER THAN A GLOBAL ONE.) C C *** PARAMETERS *** C C THE PARAMETERS FOR DRMNF ARE THE SAME AS THOSE FOR DMNG C (WHICH SEE), EXCEPT THAT CALCF, CALCG, UIPARM, URPARM, AND UFPARM C ARE OMITTED, AND A PARAMETER FX FOR THE OBJECTIVE FUNCTION C VALUE AT X IS ADDED. INSTEAD OF CALLING CALCG TO OBTAIN THE C GRADIENT OF THE OBJECTIVE FUNCTION AT X, DRMNF CALLS DS7GRD, C WHICH COMPUTES AN APPROXIMATION TO THE GRADIENT BY FINITE C (FORWARD AND CENTRAL) DIFFERENCES USING THE METHOD OF REF. 1. C THE FOLLOWING INPUT COMPONENT IS OF INTEREST IN THIS REGARD C (AND IS NOT DESCRIBED IN DMNG). C C V(ETA0)..... V(42) IS AN ESTIMATED BOUND ON THE RELATIVE ERROR IN THE C OBJECTIVE FUNCTION VALUE COMPUTED BY CALCF... C (TRUE VALUE) = (COMPUTED VALUE) * (1 + E), C WHERE ABS(E) .LE. V(ETA0). DEFAULT = MACHEP * 10**3, C WHERE MACHEP IS THE UNIT ROUNDOFF. C C THE OUTPUT VALUES IV(NFCALL) AND IV(NGCALL) HAVE DIFFERENT C MEANINGS FOR DMNF THAN FOR DMNG... C C IV(NFCALL)... IV(6) IS THE NUMBER OF CALLS SO FAR MADE ON CALCF (I.E., C FUNCTION EVALUATIONS) EXCLUDING THOSE MADE ONLY FOR C COMPUTING GRADIENTS. THE INPUT VALUE IV(MXFCAL) IS A C LIMIT ON IV(NFCALL). C IV(NGCALL)... IV(30) IS THE NUMBER OF FUNCTION EVALUATIONS MADE ONLY C FOR COMPUTING GRADIENTS. THE TOTAL NUMBER OF FUNCTION C EVALUATIONS IS THUS IV(NFCALL) + IV(NGCALL). C C *** REFERENCES *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (AUGUST 1982). C C---------------------------- DECLARATIONS --------------------------- C DOUBLE PRECISION DD7TPR EXTERNAL DIVSET, DD7TPR, DS7GRD, DRMNG, DV7SCP C C DIVSET.... SUPPLIES DEFAULT PARAMETER VALUES. C DD7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C DS7GRD... COMPUTES FINITE-DIFFERENCE GRADIENT APPROXIMATION. C DRMNG.... REVERSE-COMMUNICATION ROUTINE THAT DOES DMNG ALGORITHM. C DV7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C INTEGER ALPHA, G1, I, IV1, J, K, W DOUBLE PRECISION ZERO C C *** SUBSCRIPTS FOR IV *** C INTEGER ETA0, F, G, LMAT, NEXTV, NGCALL, NITER, SGIRC, TOOBIG, 1 VNEED C C/6 C DATA ETA0/42/, F/10/, G/28/, LMAT/42/, NEXTV/47/, NGCALL/30/, C 1 NITER/31/, SGIRC/57/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (ETA0=42, F=10, G=28, LMAT=42, NEXTV=47, NGCALL=30, 1 NITER=31, SGIRC=57, TOOBIG=2, VNEED=4) C/ C/6 C DATA ZERO/0.D+0/ C/7 PARAMETER (ZERO=0.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IV1 = IV(1) IF (IV1 .EQ. 1) GO TO 10 IF (IV1 .EQ. 2) GO TO 50 IF (IV(1) .EQ. 0) CALL DIVSET(2, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 12 .OR. IV1 .EQ. 13) IV(VNEED) = IV(VNEED) + 2*N + 6 IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 G1 = 1 IF (IV1 .EQ. 12) IV(1) = 13 GO TO 20 C 10 G1 = IV(G) C 20 CALL DRMNG(D, FX, V(G1), IV, LIV, LV, N, V, X) IF (IV(1) - 2) 999, 30, 70 C C *** COMPUTE GRADIENT *** C 30 IF (IV(NITER) .EQ. 0) CALL DV7SCP(N, V(G1), ZERO) J = IV(LMAT) K = G1 - N DO 40 I = 1, N V(K) = DD7TPR(I, V(J), V(J)) K = K + 1 J = J + I 40 CONTINUE C *** UNDO INCREMENT OF IV(NGCALL) DONE BY DRMNG *** IV(NGCALL) = IV(NGCALL) - 1 C *** STORE RETURN CODE FROM DS7GRD IN IV(SGIRC) *** IV(SGIRC) = 0 C *** X MAY HAVE BEEN RESTORED, SO COPY BACK FX... *** FX = V(F) GO TO 60 C C *** GRADIENT LOOP *** C 50 IF (IV(TOOBIG) .NE. 0) GO TO 10 C 60 G1 = IV(G) ALPHA = G1 - N W = ALPHA - 6 CALL DS7GRD(V(ALPHA), D, V(ETA0), FX, V(G1), IV(SGIRC), N, V(W),X) IF (IV(SGIRC) .EQ. 0) GO TO 10 IV(NGCALL) = IV(NGCALL) + 1 GO TO 999 C 70 IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(G) = IV(NEXTV) + N + 6 IV(NEXTV) = IV(G) + N IF (IV1 .NE. 13) GO TO 10 C 999 RETURN C *** LAST CARD OF DRMNF FOLLOWS *** END PyBDSF-1.10.1/src/port3/drmnfb.f000066400000000000000000000121141420247104600160750ustar00rootroot00000000000000 SUBROUTINE DRMNFB(B, D, FX, IV, LIV, LV, P, V, X) C C *** ITERATION DRIVER FOR DMNF... C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING C *** FINITE-DIFFERENCE GRADIENTS AND SECANT HESSIAN APPROXIMATIONS. C INTEGER LIV, LV, P INTEGER IV(LIV) DOUBLE PRECISION B(2,P), D(P), FX, X(P), V(LV) C DIMENSION IV(59 + P), V(77 + P*(P+23)/2) C C *** PURPOSE *** C C THIS ROUTINE INTERACTS WITH SUBROUTINE DRMNGB IN AN ATTEMPT C TO FIND AN P-VECTOR X* THAT MINIMIZES THE (UNCONSTRAINED) C OBJECTIVE FUNCTION FX = F(X) COMPUTED BY THE CALLER. (OFTEN C THE X* FOUND IS A LOCAL MINIMIZER RATHER THAN A GLOBAL ONE.) C C *** PARAMETERS *** C C THE PARAMETERS FOR DRMNFB ARE THE SAME AS THOSE FOR DMNG C (WHICH SEE), EXCEPT THAT CALCF, CALCG, UIPARM, URPARM, AND UFPARM C ARE OMITTED, AND A PARAMETER FX FOR THE OBJECTIVE FUNCTION C VALUE AT X IS ADDED. INSTEAD OF CALLING CALCG TO OBTAIN THE C GRADIENT OF THE OBJECTIVE FUNCTION AT X, DRMNFB CALLS DS3GRD, C WHICH COMPUTES AN APPROXIMATION TO THE GRADIENT BY FINITE C (FORWARD AND CENTRAL) DIFFERENCES USING THE METHOD OF REF. 1. C THE FOLLOWING INPUT COMPONENT IS OF INTEREST IN THIS REGARD C (AND IS NOT DESCRIBED IN DMNG). C C V(ETA0)..... V(42) IS AN ESTIMATED BOUND ON THE RELATIVE ERROR IN THE C OBJECTIVE FUNCTION VALUE COMPUTED BY CALCF... C (TRUE VALUE) = (COMPUTED VALUE) * (1 + E), C WHERE ABS(E) .LE. V(ETA0). DEFAULT = MACHEP * 10**3, C WHERE MACHEP IS THE UNIT ROUNDOFF. C C THE OUTPUT VALUES IV(NFCALL) AND IV(NGCALL) HAVE DIFFERENT C MEANINGS FOR DMNF THAN FOR DMNG... C C IV(NFCALL)... IV(6) IS THE NUMBER OF CALLS SO FAR MADE ON CALCF (I.E., C FUNCTION EVALUATIONS) EXCLUDING THOSE MADE ONLY FOR C COMPUTING GRADIENTS. THE INPUT VALUE IV(MXFCAL) IS A C LIMIT ON IV(NFCALL). C IV(NGCALL)... IV(30) IS THE NUMBER OF FUNCTION EVALUATIONS MADE ONLY C FOR COMPUTING GRADIENTS. THE TOTAL NUMBER OF FUNCTION C EVALUATIONS IS THUS IV(NFCALL) + IV(NGCALL). C C *** REFERENCES *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (AUGUST 1982). C C---------------------------- DECLARATIONS --------------------------- C DOUBLE PRECISION DD7TPR EXTERNAL DIVSET, DD7TPR, DS3GRD, DRMNGB, DV7SCP C C DIVSET.... SUPPLIES DEFAULT PARAMETER VALUES. C DD7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C DS3GRD... COMPUTES FINITE-DIFFERENCE GRADIENT APPROXIMATION. C DRMNGB... REVERSE-COMMUNICATION ROUTINE THAT DOES DMNGB ALGORITHM. C DV7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C INTEGER ALPHA, ALPHA0, G1, I, IPI, IV1, J, K, W DOUBLE PRECISION ZERO C C *** SUBSCRIPTS FOR IV *** C INTEGER ETA0, F, G, LMAT, NEXTV, NGCALL, 1 NITER, PERM, SGIRC, TOOBIG, VNEED C C/6 C DATA ETA0/42/, F/10/, G/28/, LMAT/42/, NEXTV/47/, NGCALL/30/, C 1 NITER/31/, PERM/58/, SGIRC/57/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (ETA0=42, F=10, G=28, LMAT=42, NEXTV=47, NGCALL=30, 1 NITER=31, PERM=58, SGIRC=57, TOOBIG=2, VNEED=4) C/ C/6 C DATA ZERO/0.D+0/ C/7 PARAMETER (ZERO=0.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IV1 = IV(1) IF (IV1 .EQ. 1) GO TO 10 IF (IV1 .EQ. 2) GO TO 50 IF (IV(1) .EQ. 0) CALL DIVSET(2, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 12 .OR. IV1 .EQ. 13) IV(VNEED) = IV(VNEED) + 2*P + 6 IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 G1 = 1 IF (IV1 .EQ. 12) IV(1) = 13 GO TO 20 C 10 G1 = IV(G) C 20 CALL DRMNGB(B, D, FX, V(G1), IV, LIV, LV, P, V, X) IF (IV(1) - 2) 999, 30, 80 C C *** COMPUTE GRADIENT *** C 30 IF (IV(NITER) .EQ. 0) CALL DV7SCP(P, V(G1), ZERO) J = IV(LMAT) ALPHA0 = G1 - P - 1 IPI = IV(PERM) DO 40 I = 1, P K = ALPHA0 + IV(IPI) V(K) = DD7TPR(I, V(J), V(J)) IPI = IPI + 1 J = J + I 40 CONTINUE C *** UNDO INCREMENT OF IV(NGCALL) DONE BY DRMNGB *** IV(NGCALL) = IV(NGCALL) - 1 C *** STORE RETURN CODE FROM DS3GRD IN IV(SGIRC) *** IV(SGIRC) = 0 C *** X MAY HAVE BEEN RESTORED, SO COPY BACK FX... *** FX = V(F) GO TO 60 C C *** GRADIENT LOOP *** C 50 IF (IV(TOOBIG) .NE. 0) GO TO 10 C 60 G1 = IV(G) ALPHA = G1 - P W = ALPHA - 6 CALL DS3GRD(V(ALPHA), B, D, V(ETA0), FX, V(G1), IV(SGIRC), P, 1 V(W), X) I = IV(SGIRC) IF (I .EQ. 0) GO TO 10 IF (I .LE. P) GO TO 70 IV(TOOBIG) = 1 GO TO 10 C 70 IV(NGCALL) = IV(NGCALL) + 1 GO TO 999 C 80 IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(G) = IV(NEXTV) + P + 6 IV(NEXTV) = IV(G) + P IF (IV1 .NE. 13) GO TO 10 C 999 RETURN C *** LAST CARD OF DRMNFB FOLLOWS *** END PyBDSF-1.10.1/src/port3/drmng.f000066400000000000000000000335641420247104600157500ustar00rootroot00000000000000 SUBROUTINE DRMNG(D, FX, G, IV, LIV, LV, N, V, X) C C *** CARRY OUT DMNG (UNCONSTRAINED MINIMIZATION) ITERATIONS, USING C *** DOUBLE-DOGLEG/BFGS STEPS. C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, N INTEGER IV(LIV) DOUBLE PRECISION D(N), FX, G(N), V(LV), X(N) C C-------------------------- PARAMETER USAGE -------------------------- C C D.... SCALE VECTOR. C FX... FUNCTION VALUE. C G.... GRADIENT VECTOR. C IV... INTEGER VALUE ARRAY. C LIV.. LENGTH OF IV (AT LEAST 60). C LV... LENGTH OF V (AT LEAST 71 + N*(N+13)/2). C N.... NUMBER OF VARIABLES (COMPONENTS IN X AND G). C V.... FLOATING-POINT VALUE ARRAY. C X.... VECTOR OF PARAMETERS TO BE OPTIMIZED. C C *** DISCUSSION *** C C PARAMETERS IV, N, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO DMNG (WHICH SEE), EXCEPT THAT V CAN BE SHORTER (SINCE C THE PART OF V THAT DMNG USES FOR STORING G IS NOT NEEDED). C MOREOVER, COMPARED WITH DMNG, IV(1) MAY HAVE THE TWO ADDITIONAL C OUTPUT VALUES 1 AND 2, WHICH ARE EXPLAINED BELOW, AS IS THE USE C OF IV(TOOBIG) AND IV(NFGCAL). THE VALUE IV(G), WHICH IS AN C OUTPUT VALUE FROM DMNG (AND DMNF), IS NOT REFERENCED BY C DRMNG OR THE SUBROUTINES IT CALLS. C FX AND G NEED NOT HAVE BEEN INITIALIZED WHEN DRMNG IS CALLED C WITH IV(1) = 12, 13, OR 14. C C IV(1) = 1 MEANS THE CALLER SHOULD SET FX TO F(X), THE FUNCTION VALUE C AT X, AND CALL DRMNG AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) CANNOT BE C (E.G. IF OVERFLOW WOULD OCCUR), WHICH MAY HAPPEN BECAUSE C OF AN OVERSIZED STEP. IN THIS CASE THE CALLER SHOULD SET C IV(TOOBIG) = IV(2) TO 1, WHICH WILL CAUSE DRMNG TO IG- C NORE FX AND TRY A SMALLER STEP. THE PARAMETER NF THAT C DMNG PASSES TO CALCF (FOR POSSIBLE _USE_ BY CALCG) IS A C COPY OF IV(NFCALL) = IV(6). C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT VECTOR C OF F AT X, AND CALL DRMNG AGAIN, HAVING CHANGED NONE OF C THE OTHER PARAMETERS EXCEPT POSSIBLY THE SCALE VECTOR D C WHEN IV(DTYPE) = 0. THE PARAMETER NF THAT DMNG PASSES C TO CALCG IS IV(NFGCAL) = IV(7). IF G(X) CANNOT BE C EVALUATED, THEN THE CALLER MAY SET IV(TOOBIG) TO 0, IN C WHICH CASE DRMNG WILL RETURN WITH IV(1) = 65. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (DECEMBER 1979). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324 AND MCS-7906671. C C (SEE DMNG FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DG1, DUMMY, G01, I, K, L, LSTGST, NWTST1, RSTRST, STEP1, 1 TEMP1, W, X01, Z DOUBLE PRECISION T C C *** CONSTANTS *** C DOUBLE PRECISION HALF, NEGONE, ONE, ONEP2, ZERO C C *** NO INTRINSIC FUNCTIONS *** C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX DOUBLE PRECISION DD7TPR, DRLDST, DV2NRM EXTERNAL DA7SST,DD7DOG,DIVSET, DD7TPR,DITSUM, DL7ITV, DL7IVM, 1 DL7TVM, DL7UPD,DL7VML,DPARCK, DRLDST, STOPX,DV2AXY, 2 DV7CPY, DV7SCP, DV7VMP, DV2NRM, DW7ZBF C C DA7SST.... ASSESSES CANDIDATE STEP. C DD7DOG.... COMPUTES DOUBLE-DOGLEG (CANDIDATE) STEP. C DIVSET.... SUPPLIES DEFAULT IV AND V INPUT COMPONENTS. C DD7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C DITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C DL7ITV... MULTIPLIES INVERSE TRANSPOSE OF LOWER TRIANGLE TIMES VECTOR. C DL7IVM... MULTIPLIES INVERSE OF LOWER TRIANGLE TIMES VECTOR. C DL7TVM... MULTIPLIES TRANSPOSE OF LOWER TRIANGLE TIMES VECTOR. C LUPDT.... UPDATES CHOLESKY FACTOR OF HESSIAN APPROXIMATION. C DL7VML.... MULTIPLIES LOWER TRIANGLE TIMES VECTOR. C DPARCK.... CHECKS VALIDITY OF INPUT IV AND V VALUES. C DRLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C DV2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C DV7VMP... MULTIPLIES VECTOR BY VECTOR RAISED TO POWER (COMPONENTWISE). C DV2NRM... RETURNS THE 2-NORM OF A VECTOR. C DW7ZBF... COMPUTES W AND Z FOR DL7UPD CORRESPONDING TO BFGS UPDATE. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, DG, DGNORM, DINIT, DSTNRM, DST0, F, F0, FDIF, 1 GTHG, GTSTEP, G0, INCFAC, INITH, IRC, KAGQT, LMAT, LMAX0, 2 LMAXS, MODE, MODEL, MXFCAL, MXITER, NEXTV, NFCALL, NFGCAL, 3 NGCALL, NITER, NREDUC, NWTSTP, PREDUC, RADFAC, RADINC, 4 RADIUS, RAD0, RELDX, RESTOR, STEP, STGLIM, STLSTG, TOOBIG, 5 TUNER4, TUNER5, VNEED, XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA CNVCOD/55/, DG/37/, G0/48/, INITH/25/, IRC/29/, KAGQT/33/, C 1 MODE/35/, MODEL/5/, MXFCAL/17/, MXITER/18/, NFCALL/6/, C 2 NFGCAL/7/, NGCALL/30/, NITER/31/, NWTSTP/34/, RADINC/8/, C 3 RESTOR/9/, STEP/40/, STGLIM/11/, STLSTG/41/, TOOBIG/2/, C 4 VNEED/4/, XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, DG=37, G0=48, INITH=25, IRC=29, KAGQT=33, 1 MODE=35, MODEL=5, MXFCAL=17, MXITER=18, NFCALL=6, 2 NFGCAL=7, NGCALL=30, NITER=31, NWTSTP=34, RADINC=8, 3 RESTOR=9, STEP=40, STGLIM=11, STLSTG=41, TOOBIG=2, 4 VNEED=4, XIRC=13, X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DGNORM/1/, DINIT/38/, DSTNRM/2/, DST0/3/, F/10/, F0/13/, C 1 FDIF/11/, GTHG/44/, GTSTEP/4/, INCFAC/23/, LMAT/42/, C 2 LMAX0/35/, LMAXS/36/, NEXTV/47/, NREDUC/6/, PREDUC/7/, C 3 RADFAC/16/, RADIUS/8/, RAD0/9/, RELDX/17/, TUNER4/29/, C 4 TUNER5/30/ C/7 PARAMETER (DGNORM=1, DINIT=38, DSTNRM=2, DST0=3, F=10, F0=13, 1 FDIF=11, GTHG=44, GTSTEP=4, INCFAC=23, LMAT=42, 2 LMAX0=35, LMAXS=36, NEXTV=47, NREDUC=6, PREDUC=7, 3 RADFAC=16, RADIUS=8, RAD0=9, RELDX=17, TUNER4=29, 4 TUNER5=30) C/ C C/6 C DATA HALF/0.5D+0/, NEGONE/-1.D+0/, ONE/1.D+0/, ONEP2/1.2D+0/, C 1 ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, NEGONE=-1.D+0, ONE=1.D+0, ONEP2=1.2D+0, 1 ZERO=0.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 50 IF (I .EQ. 2) GO TO 60 C C *** CHECK VALIDITY OF IV AND V INPUT VALUES *** C IF (IV(1) .EQ. 0) CALL DIVSET(2, IV, LIV, LV, V) IF (IV(1) .EQ. 12 .OR. IV(1) .EQ. 13) 1 IV(VNEED) = IV(VNEED) + N*(N+13)/2 CALL DPARCK(2, D, IV, LIV, LV, N, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 GO TO (190, 190, 190, 190, 190, 190, 120, 90, 120, 10, 10, 20), I C C *** STORAGE ALLOCATION *** C 10 L = IV(LMAT) IV(X0) = L + N*(N+1)/2 IV(STEP) = IV(X0) + N IV(STLSTG) = IV(STEP) + N IV(G0) = IV(STLSTG) + N IV(NWTSTP) = IV(G0) + N IV(DG) = IV(NWTSTP) + N IV(NEXTV) = IV(DG) + N IF (IV(1) .NE. 13) GO TO 20 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 20 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(MODEL) = 1 IV(STGLIM) = 1 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(RADINC) = 0 V(RAD0) = ZERO IF (V(DINIT) .GE. ZERO) CALL DV7SCP(N, D, V(DINIT)) IF (IV(INITH) .NE. 1) GO TO 40 C C *** SET THE INITIAL HESSIAN APPROXIMATION TO DIAG(D)**-2 *** C L = IV(LMAT) CALL DV7SCP(N*(N+1)/2, V(L), ZERO) K = L - 1 DO 30 I = 1, N K = K + I T = D(I) IF (T .LE. ZERO) T = ONE V(K) = T 30 CONTINUE C C *** COMPUTE INITIAL FUNCTION VALUE *** C 40 IV(1) = 1 GO TO 999 C 50 V(F) = FX IF (IV(MODE) .GE. 0) GO TO 190 V(F0) = FX IV(1) = 2 IF (IV(TOOBIG) .EQ. 0) GO TO 999 IV(1) = 63 GO TO 350 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C 60 IF (IV(TOOBIG) .EQ. 0) GO TO 70 IV(1) = 65 GO TO 350 C 70 DG1 = IV(DG) CALL DV7VMP(N, V(DG1), G, D, -1) V(DGNORM) = DV2NRM(N, V(DG1)) C IF (IV(CNVCOD) .NE. 0) GO TO 340 IF (IV(MODE) .EQ. 0) GO TO 300 C C *** ALLOW FIRST STEP TO HAVE SCALED 2-NORM AT MOST V(LMAX0) *** C V(RADIUS) = V(LMAX0) C IV(MODE) = 0 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 80 CALL DITSUM(D, G, IV, LIV, LV, N, V, X) 90 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 100 IV(1) = 10 GO TO 350 C C *** UPDATE RADIUS *** C 100 IV(NITER) = K + 1 IF (K .GT. 0) V(RADIUS) = V(RADFAC) * V(DSTNRM) C C *** INITIALIZE FOR START OF NEXT ITERATION *** C G01 = IV(G0) X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(KAGQT) = -1 C C *** COPY X TO X0, G TO G0 *** C CALL DV7CPY(N, V(X01), X) CALL DV7CPY(N, V(G01), G) C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 110 IF (.NOT. STOPX(DUMMY)) GO TO 130 IV(1) = 11 GO TO 140 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 120 IF (V(F) .GE. V(F0)) GO TO 130 V(RADFAC) = ONE K = IV(NITER) GO TO 100 C 130 IF (IV(NFCALL) .LT. IV(MXFCAL)) GO TO 150 IV(1) = 9 140 IF (V(F) .GE. V(F0)) GO TO 350 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 290 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 150 STEP1 = IV(STEP) DG1 = IV(DG) NWTST1 = IV(NWTSTP) IF (IV(KAGQT) .GE. 0) GO TO 160 L = IV(LMAT) CALL DL7IVM(N, V(NWTST1), V(L), G) V(NREDUC) = HALF * DD7TPR(N, V(NWTST1), V(NWTST1)) CALL DL7ITV(N, V(NWTST1), V(L), V(NWTST1)) CALL DV7VMP(N, V(STEP1), V(NWTST1), D, 1) V(DST0) = DV2NRM(N, V(STEP1)) CALL DV7VMP(N, V(DG1), V(DG1), D, -1) CALL DL7TVM(N, V(STEP1), V(L), V(DG1)) V(GTHG) = DV2NRM(N, V(STEP1)) IV(KAGQT) = 0 160 CALL DD7DOG(V(DG1), LV, N, V(NWTST1), V(STEP1), V) IF (IV(IRC) .NE. 6) GO TO 170 IF (IV(RESTOR) .NE. 2) GO TO 190 RSTRST = 2 GO TO 200 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 170 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 190 IF (IV(IRC) .NE. 5) GO TO 180 IF (V(RADFAC) .LE. ONE) GO TO 180 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 180 IF (IV(RESTOR) .NE. 2) GO TO 190 RSTRST = 0 GO TO 200 C C *** COMPUTE F(X0 + STEP) *** C 180 X01 = IV(X0) STEP1 = IV(STEP) CALL DV2AXY(N, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 999 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 190 RSTRST = 3 200 X01 = IV(X0) V(RELDX) = DRLDST(N, D, X, V(X01)) CALL DA7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = IV(STLSTG) I = IV(RESTOR) + 1 GO TO (240, 210, 220, 230), I 210 CALL DV7CPY(N, X, V(X01)) GO TO 240 220 CALL DV7CPY(N, V(LSTGST), V(STEP1)) GO TO 240 230 CALL DV7CPY(N, V(STEP1), V(LSTGST)) CALL DV2AXY(N, X, ONE, V(STEP1), V(X01)) V(RELDX) = DRLDST(N, D, X, V(X01)) IV(RESTOR) = RSTRST C 240 K = IV(IRC) GO TO (250,280,280,280,250,260,270,270,270,270,270,270,330,300), K C C *** RECOMPUTE STEP WITH CHANGED RADIUS *** C 250 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 110 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST. C 260 V(RADIUS) = V(LMAXS) GO TO 150 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 270 IV(CNVCOD) = K - 4 IF (V(F) .GE. V(F0)) GO TO 340 IF (IV(XIRC) .EQ. 14) GO TO 340 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 280 IF (IV(IRC) .NE. 3) GO TO 290 STEP1 = IV(STEP) TEMP1 = IV(STLSTG) C C *** SET TEMP1 = HESSIAN * STEP FOR _USE_ IN GRADIENT TESTS *** C L = IV(LMAT) CALL DL7TVM(N, V(TEMP1), V(L), V(STEP1)) CALL DL7VML(N, V(TEMP1), V(L), V(TEMP1)) C C *** COMPUTE GRADIENT *** C 290 IV(NGCALL) = IV(NGCALL) + 1 IV(1) = 2 GO TO 999 C C *** INITIALIZATIONS -- G0 = G - G0, ETC. *** C 300 G01 = IV(G0) CALL DV2AXY(N, V(G01), NEGONE, V(G01), G) STEP1 = IV(STEP) TEMP1 = IV(STLSTG) IF (IV(IRC) .NE. 3) GO TO 320 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C C *** SET TEMP1 = DIAG(D)**-1 * (HESSIAN*STEP + (G(X0)-G(X))) *** C CALL DV2AXY(N, V(TEMP1), NEGONE, V(G01), V(TEMP1)) CALL DV7VMP(N, V(TEMP1), V(TEMP1), D, -1) C C *** DO GRADIENT TESTS *** C IF (DV2NRM(N, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) 1 GO TO 310 IF (DD7TPR(N, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 320 310 V(RADFAC) = V(INCFAC) C C *** UPDATE H, LOOP *** C 320 W = IV(NWTSTP) Z = IV(X0) L = IV(LMAT) CALL DW7ZBF(V(L), N, V(STEP1), V(W), V(G01), V(Z)) C C ** _USE_ THE N-VECTORS STARTING AT V(STEP1) AND V(G01) FOR SCRATCH.. CALL DL7UPD(V(TEMP1), V(STEP1), V(L), V(G01), V(L), N, V(W), V(Z)) IV(1) = 2 GO TO 80 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 330 IV(1) = 64 GO TO 350 C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 340 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 350 CALL DITSUM(D, G, IV, LIV, LV, N, V, X) C 999 RETURN C C *** LAST LINE OF DRMNG FOLLOWS *** END PyBDSF-1.10.1/src/port3/drmngb.f000066400000000000000000000376521420247104600161140ustar00rootroot00000000000000 SUBROUTINE DRMNGB(B, D, FX, G, IV, LIV, LV, N, V, X) C C *** CARRY OUT DMNGB (SIMPLY BOUNDED MINIMIZATION) ITERATIONS, C *** USING DOUBLE-DOGLEG/BFGS STEPS. C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, N INTEGER IV(LIV) DOUBLE PRECISION B(2,N), D(N), FX, G(N), V(LV), X(N) C C-------------------------- PARAMETER USAGE -------------------------- C C B.... VECTOR OF LOWER AND UPPER BOUNDS ON X. C D.... SCALE VECTOR. C FX... FUNCTION VALUE. C G.... GRADIENT VECTOR. C IV... INTEGER VALUE ARRAY. C LIV.. LENGTH OF IV (AT LEAST 59) + N. C LV... LENGTH OF V (AT LEAST 71 + N*(N+19)/2). C N.... NUMBER OF VARIABLES (COMPONENTS IN X AND G). C V.... FLOATING-POINT VALUE ARRAY. C X.... VECTOR OF PARAMETERS TO BE OPTIMIZED. C C *** DISCUSSION *** C C PARAMETERS IV, N, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO DMNGB (WHICH SEE), EXCEPT THAT V CAN BE SHORTER (SINCE C THE PART OF V THAT DMNGB USES FOR STORING G IS NOT NEEDED). C MOREOVER, COMPARED WITH DMNGB, IV(1) MAY HAVE THE TWO ADDITIONAL C OUTPUT VALUES 1 AND 2, WHICH ARE EXPLAINED BELOW, AS IS THE USE C OF IV(TOOBIG) AND IV(NFGCAL). THE VALUE IV(G), WHICH IS AN C OUTPUT VALUE FROM DMNGB (AND SMSNOB), IS NOT REFERENCED BY C DRMNGB OR THE SUBROUTINES IT CALLS. C FX AND G NEED NOT HAVE BEEN INITIALIZED WHEN DRMNGB IS CALLED C WITH IV(1) = 12, 13, OR 14. C C IV(1) = 1 MEANS THE CALLER SHOULD SET FX TO F(X), THE FUNCTION VALUE C AT X, AND CALL DRMNGB AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) CANNOT BE C (E.G. IF OVERFLOW WOULD OCCUR), WHICH MAY HAPPEN BECAUSE C OF AN OVERSIZED STEP. IN THIS CASE THE CALLER SHOULD SET C IV(TOOBIG) = IV(2) TO 1, WHICH WILL CAUSE DRMNGB TO IG- C NORE FX AND TRY A SMALLER STEP. THE PARAMETER NF THAT C DMNGB PASSES TO CALCF (FOR POSSIBLE _USE_ BY CALCG) IS A C COPY OF IV(NFCALL) = IV(6). C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT VECTOR C OF F AT X, AND CALL DRMNGB AGAIN, HAVING CHANGED NONE OF C THE OTHER PARAMETERS EXCEPT POSSIBLY THE SCALE VECTOR D C WHEN IV(DTYPE) = 0. THE PARAMETER NF THAT DMNGB PASSES C TO CALCG IS IV(NFGCAL) = IV(7). IF G(X) CANNOT BE C EVALUATED, THEN THE CALLER MAY SET IV(NFGCAL) TO 0, IN C WHICH CASE DRMNGB WILL RETURN WITH IV(1) = 65. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (DECEMBER 1979). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324 AND MCS-7906671. C C (SEE DMNG FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DG1, DSTEP1, DUMMY, G01, I, I1, IPI, IPN, J, K, L, LSTGST, 1 N1, NP1, NWTST1, RSTRST, STEP1, TEMP0, TEMP1, TD1, TG1, 2 W1, X01, Z DOUBLE PRECISION GI, T, XI C C *** CONSTANTS *** C DOUBLE PRECISION NEGONE, ONE, ONEP2, ZERO C C *** NO INTRINSIC FUNCTIONS *** C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX DOUBLE PRECISION DD7TPR, DRLDST, DV2NRM EXTERNAL DA7SST, DD7DGB,DIVSET, DD7TPR, I7SHFT,DITSUM, DL7TVM, 1 DL7UPD,DL7VML,DPARCK, DQ7RSH, DRLDST, STOPX, DV2NRM, 2 DV2AXY,DV7CPY, DV7IPR, DV7SCP, DV7VMP, DW7ZBF C C DA7SST.... ASSESSES CANDIDATE STEP. C DD7DGB... COMPUTES SIMPLY BOUNDED DOUBLE-DOGLEG (CANDIDATE) STEP. C DIVSET.... SUPPLIES DEFAULT IV AND V INPUT COMPONENTS. C DD7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C I7SHFT... CYCLICALLLY SHIFTS AN ARRAY OF INTEGERS. C DITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C DL7TVM... MULTIPLIES TRANSPOSE OF LOWER TRIANGLE TIMES VECTOR. C LUPDT.... UPDATES CHOLESKY FACTOR OF HESSIAN APPROXIMATION. C DL7VML.... MULTIPLIES LOWER TRIANGLE TIMES VECTOR. C DPARCK.... CHECKS VALIDITY OF INPUT IV AND V VALUES. C DQ7RSH... CYCLICALLY SHIFTS CHOLESKY FACTOR. C DRLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C DV2NRM... RETURNS THE 2-NORM OF A VECTOR. C DV2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7IPR... CYCLICALLY SHIFTS A FLOATING-POINT ARRAY. C DV7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C DV7VMP... MULTIPLIES VECTOR BY VECTOR RAISED TO POWER (COMPONENTWISE). C DW7ZBF... COMPUTES W AND Z FOR DL7UPD CORRESPONDING TO BFGS UPDATE. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, DG, DGNORM, DINIT, DSTNRM, F, F0, FDIF, 1 GTSTEP, INCFAC, INITH, IRC, IVNEED, KAGQT, LMAT, 2 LMAX0, LMAXS, MODE, MODEL, MXFCAL, MXITER, NC, NEXTIV, 3 NEXTV, NFCALL, NFGCAL, NGCALL, NITER, NWTSTP, PERM, 4 PREDUC, RADFAC, RADINC, RADIUS, RAD0, RELDX, RESTOR, STEP, 4 STGLIM, STLSTG, TOOBIG, TUNER4, TUNER5, VNEED, XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C *** (NOTE THAT NC IS STORED IN IV(G0)) *** C C/6 C DATA CNVCOD/55/, DG/37/, INITH/25/, IRC/29/, IVNEED/3/, KAGQT/33/, C 1 MODE/35/, MODEL/5/, MXFCAL/17/, MXITER/18/, NC/48/, C 2 NEXTIV/46/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, NGCALL/30/, C 3 NITER/31/, NWTSTP/34/, PERM/58/, RADINC/8/, RESTOR/9/, C 4 STEP/40/, STGLIM/11/, STLSTG/41/, TOOBIG/2/, XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, DG=37, INITH=25, IRC=29, IVNEED=3, KAGQT=33, 1 MODE=35, MODEL=5, MXFCAL=17, MXITER=18, NC=48, 2 NEXTIV=46, NEXTV=47, NFCALL=6, NFGCAL=7, NGCALL=30, 3 NITER=31, NWTSTP=34, PERM=58, RADINC=8, RESTOR=9, 4 STEP=40, STGLIM=11, STLSTG=41, TOOBIG=2, XIRC=13, 5 X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DGNORM/1/, DINIT/38/, DSTNRM/2/, F/10/, F0/13/, FDIF/11/, C 1 GTSTEP/4/, INCFAC/23/, LMAT/42/, LMAX0/35/, LMAXS/36/, C 2 PREDUC/7/, RADFAC/16/, RADIUS/8/, RAD0/9/, RELDX/17/, C 3 TUNER4/29/, TUNER5/30/, VNEED/4/ C/7 PARAMETER (DGNORM=1, DINIT=38, DSTNRM=2, F=10, F0=13, FDIF=11, 1 GTSTEP=4, INCFAC=23, LMAT=42, LMAX0=35, LMAXS=36, 2 PREDUC=7, RADFAC=16, RADIUS=8, RAD0=9, RELDX=17, 3 TUNER4=29, TUNER5=30, VNEED=4) C/ C C/6 C DATA NEGONE/-1.D+0/, ONE/1.D+0/, ONEP2/1.2D+0/, ZERO/0.D+0/ C/7 PARAMETER (NEGONE=-1.D+0, ONE=1.D+0, ONEP2=1.2D+0, ZERO=0.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 70 IF (I .EQ. 2) GO TO 80 C C *** CHECK VALIDITY OF IV AND V INPUT VALUES *** C IF (IV(1) .EQ. 0) CALL DIVSET(2, IV, LIV, LV, V) IF (IV(1) .LT. 12) GO TO 10 IF (IV(1) .GT. 13) GO TO 10 IV(VNEED) = IV(VNEED) + N*(N+19)/2 IV(IVNEED) = IV(IVNEED) + N 10 CALL DPARCK(2, D, IV, LIV, LV, N, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 GO TO (250, 250, 250, 250, 250, 250, 190, 150, 190, 20, 20, 30), I C C *** STORAGE ALLOCATION *** C 20 L = IV(LMAT) IV(X0) = L + N*(N+1)/2 IV(STEP) = IV(X0) + 2*N IV(STLSTG) = IV(STEP) + 2*N IV(NWTSTP) = IV(STLSTG) + N IV(DG) = IV(NWTSTP) + 2*N IV(NEXTV) = IV(DG) + 2*N IV(NEXTIV) = IV(PERM) + N IF (IV(1) .NE. 13) GO TO 30 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 30 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(MODEL) = 1 IV(STGLIM) = 1 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(RADINC) = 0 IV(NC) = N V(RAD0) = ZERO C C *** CHECK CONSISTENCY OF B AND INITIALIZE IP ARRAY *** C IPI = IV(PERM) DO 40 I = 1, N IV(IPI) = I IPI = IPI + 1 IF (B(1,I) .GT. B(2,I)) GO TO 410 40 CONTINUE C IF (V(DINIT) .GE. ZERO) CALL DV7SCP(N, D, V(DINIT)) IF (IV(INITH) .NE. 1) GO TO 60 C C *** SET THE INITIAL HESSIAN APPROXIMATION TO DIAG(D)**-2 *** C L = IV(LMAT) CALL DV7SCP(N*(N+1)/2, V(L), ZERO) K = L - 1 DO 50 I = 1, N K = K + I T = D(I) IF (T .LE. ZERO) T = ONE V(K) = T 50 CONTINUE C C *** GET INITIAL FUNCTION VALUE *** C 60 IV(1) = 1 GO TO 440 C 70 V(F) = FX IF (IV(MODE) .GE. 0) GO TO 250 V(F0) = FX IV(1) = 2 IF (IV(TOOBIG) .EQ. 0) GO TO 999 IV(1) = 63 GO TO 430 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C 80 IF (IV(TOOBIG) .EQ. 0) GO TO 90 IV(1) = 65 GO TO 430 C C *** CHOOSE INITIAL PERMUTATION *** C 90 IPI = IV(PERM) IPN = IPI + N N1 = N NP1 = N + 1 L = IV(LMAT) W1 = IV(NWTSTP) + N K = N - IV(NC) DO 120 I = 1, N IPN = IPN - 1 J = IV(IPN) IF (B(1,J) .GE. B(2,J)) GO TO 100 XI = X(J) GI = G(J) IF (XI .LE. B(1,J) .AND. GI .GT. ZERO) GO TO 100 IF (XI .GE. B(2,J) .AND. GI .LT. ZERO) GO TO 100 C *** DISALLOW CONVERGENCE IF X(J) HAS JUST BEEN FREED *** IF (I .LE. K) IV(CNVCOD) = 0 GO TO 120 100 I1 = NP1 - I IF (I1 .GE. N1) GO TO 110 CALL I7SHFT(N1, I1, IV(IPI)) CALL DQ7RSH(I1, N1, .FALSE., G, V(L), V(W1)) 110 N1 = N1 - 1 120 CONTINUE C IV(NC) = N1 V(DGNORM) = ZERO IF (N1 .LE. 0) GO TO 130 DG1 = IV(DG) CALL DV7VMP(N, V(DG1), G, D, -1) CALL DV7IPR(N, IV(IPI), V(DG1)) V(DGNORM) = DV2NRM(N1, V(DG1)) 130 IF (IV(CNVCOD) .NE. 0) GO TO 420 IF (IV(MODE) .EQ. 0) GO TO 370 C C *** ALLOW FIRST STEP TO HAVE SCALED 2-NORM AT MOST V(LMAX0) *** C V(RADIUS) = V(LMAX0) C IV(MODE) = 0 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 140 CALL DITSUM(D, G, IV, LIV, LV, N, V, X) 150 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 160 IV(1) = 10 GO TO 430 C C *** UPDATE RADIUS *** C 160 IV(NITER) = K + 1 IF (K .EQ. 0) GO TO 170 T = V(RADFAC) * V(DSTNRM) IF (V(RADFAC) .LT. ONE .OR. T .GT. V(RADIUS)) V(RADIUS) = T C C *** INITIALIZE FOR START OF NEXT ITERATION *** C 170 X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(KAGQT) = -1 C C *** COPY X TO X0 *** C CALL DV7CPY(N, V(X01), X) C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 180 IF (.NOT. STOPX(DUMMY)) GO TO 200 IV(1) = 11 GO TO 210 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 190 IF (V(F) .GE. V(F0)) GO TO 200 V(RADFAC) = ONE K = IV(NITER) GO TO 160 C 200 IF (IV(NFCALL) .LT. IV(MXFCAL)) GO TO 220 IV(1) = 9 210 IF (V(F) .GE. V(F0)) GO TO 430 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 360 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 220 STEP1 = IV(STEP) DG1 = IV(DG) NWTST1 = IV(NWTSTP) W1 = NWTST1 + N DSTEP1 = STEP1 + N IPI = IV(PERM) L = IV(LMAT) TG1 = DG1 + N X01 = IV(X0) TD1 = X01 + N CALL DD7DGB(B, D, V(DG1), V(DSTEP1), G, IV(IPI), IV(KAGQT), 1 V(L), LV, N, IV(NC), V(NWTST1), V(STEP1), V(TD1), 2 V(TG1), V, V(W1), V(X01)) IF (IV(IRC) .NE. 6) GO TO 230 IF (IV(RESTOR) .NE. 2) GO TO 250 RSTRST = 2 GO TO 260 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 230 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 250 IF (IV(IRC) .NE. 5) GO TO 240 IF (V(RADFAC) .LE. ONE) GO TO 240 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 240 IF (IV(RESTOR) .NE. 2) GO TO 250 RSTRST = 0 GO TO 260 C C *** COMPUTE F(X0 + STEP) *** C 240 CALL DV2AXY(N, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 440 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 250 RSTRST = 3 260 X01 = IV(X0) V(RELDX) = DRLDST(N, D, X, V(X01)) CALL DA7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = IV(STLSTG) I = IV(RESTOR) + 1 GO TO (300, 270, 280, 290), I 270 CALL DV7CPY(N, X, V(X01)) GO TO 300 280 CALL DV7CPY(N, V(LSTGST), X) GO TO 300 290 CALL DV7CPY(N, X, V(LSTGST)) CALL DV2AXY(N, V(STEP1), NEGONE, V(X01), X) V(RELDX) = DRLDST(N, D, X, V(X01)) IV(RESTOR) = RSTRST C 300 K = IV(IRC) GO TO (310,340,340,340,310,320,330,330,330,330,330,330,400,370), K C C *** RECOMPUTE STEP WITH CHANGED RADIUS *** C 310 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 180 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST. C 320 V(RADIUS) = V(LMAXS) GO TO 220 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 330 IV(CNVCOD) = K - 4 IF (V(F) .GE. V(F0)) GO TO 420 IF (IV(XIRC) .EQ. 14) GO TO 420 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 340 X01 = IV(X0) STEP1 = IV(STEP) CALL DV2AXY(N, V(STEP1), NEGONE, V(X01), X) IF (IV(IRC) .NE. 3) GO TO 360 C C *** SET TEMP1 = HESSIAN * STEP FOR _USE_ IN GRADIENT TESTS *** C C *** _USE_ X0 AS TEMPORARY... C IPI = IV(PERM) CALL DV7CPY(N, V(X01), V(STEP1)) CALL DV7IPR(N, IV(IPI), V(X01)) L = IV(LMAT) CALL DL7TVM(N, V(X01), V(L), V(X01)) CALL DL7VML(N, V(X01), V(L), V(X01)) C C *** UNPERMUTE X0 INTO TEMP1 *** C TEMP1 = IV(STLSTG) TEMP0 = TEMP1 - 1 DO 350 I = 1, N J = IV(IPI) IPI = IPI + 1 K = TEMP0 + J V(K) = V(X01) X01 = X01 + 1 350 CONTINUE C C *** SAVE OLD GRADIENT, COMPUTE NEW ONE *** C 360 G01 = IV(NWTSTP) + N CALL DV7CPY(N, V(G01), G) IV(NGCALL) = IV(NGCALL) + 1 IV(TOOBIG) = 0 IV(1) = 2 GO TO 999 C C *** INITIALIZATIONS -- G0 = G - G0, ETC. *** C 370 G01 = IV(NWTSTP) + N CALL DV2AXY(N, V(G01), NEGONE, V(G01), G) STEP1 = IV(STEP) TEMP1 = IV(STLSTG) IF (IV(IRC) .NE. 3) GO TO 390 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C C *** SET TEMP1 = DIAG(D)**-1 * (HESSIAN*STEP + (G(X0)-G(X))) *** C CALL DV2AXY(N, V(TEMP1), NEGONE, V(G01), V(TEMP1)) CALL DV7VMP(N, V(TEMP1), V(TEMP1), D, -1) C C *** DO GRADIENT TESTS *** C IF (DV2NRM(N, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) 1 GO TO 380 IF (DD7TPR(N, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 390 380 V(RADFAC) = V(INCFAC) C C *** UPDATE H, LOOP *** C 390 W1 = IV(NWTSTP) Z = IV(X0) L = IV(LMAT) IPI = IV(PERM) CALL DV7IPR(N, IV(IPI), V(STEP1)) CALL DV7IPR(N, IV(IPI), V(G01)) CALL DW7ZBF(V(L), N, V(STEP1), V(W1), V(G01), V(Z)) C C ** _USE_ THE N-VECTORS STARTING AT V(STEP1) AND V(G01) FOR SCRATCH.. CALL DL7UPD(V(TEMP1), V(STEP1), V(L), V(G01), V(L), N, V(W1), 1 V(Z)) IV(1) = 2 GO TO 140 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 400 IV(1) = 64 GO TO 430 C C *** INCONSISTENT B *** C 410 IV(1) = 82 GO TO 430 C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 420 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 430 CALL DITSUM(D, G, IV, LIV, LV, N, V, X) GO TO 999 C C *** PROJECT X INTO FEASIBLE REGION (PRIOR TO COMPUTING F OR G) *** C 440 DO 450 I = 1, N IF (X(I) .LT. B(1,I)) X(I) = B(1,I) IF (X(I) .GT. B(2,I)) X(I) = B(2,I) 450 CONTINUE C 999 RETURN C C *** LAST CARD OF DRMNGB FOLLOWS *** END PyBDSF-1.10.1/src/port3/drmnh.f000066400000000000000000000332411420247104600157410ustar00rootroot00000000000000 SUBROUTINE DRMNH(D, FX, G, H, IV, LH, LIV, LV, N, V, X) C C *** CARRY OUT DMNH (UNCONSTRAINED MINIMIZATION) ITERATIONS, USING C *** HESSIAN MATRIX PROVIDED BY THE CALLER. C C *** PARAMETER DECLARATIONS *** C INTEGER LH, LIV, LV, N INTEGER IV(LIV) DOUBLE PRECISION D(N), FX, G(N), H(LH), V(LV), X(N) C C-------------------------- PARAMETER USAGE -------------------------- C C D.... SCALE VECTOR. C FX... FUNCTION VALUE. C G.... GRADIENT VECTOR. C H.... LOWER TRIANGLE OF THE HESSIAN, STORED ROWWISE. C IV... INTEGER VALUE ARRAY. C LH... LENGTH OF H = P*(P+1)/2. C LIV.. LENGTH OF IV (AT LEAST 60). C LV... LENGTH OF V (AT LEAST 78 + N*(N+21)/2). C N.... NUMBER OF VARIABLES (COMPONENTS IN X AND G). C V.... FLOATING-POINT VALUE ARRAY. C X.... PARAMETER VECTOR. C C *** DISCUSSION *** C C PARAMETERS IV, N, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO DMNH (WHICH SEE), EXCEPT THAT V CAN BE SHORTER (SINCE C THE PART OF V THAT DMNH USES FOR STORING G AND H IS NOT NEEDED). C MOREOVER, COMPARED WITH DMNH, IV(1) MAY HAVE THE TWO ADDITIONAL C OUTPUT VALUES 1 AND 2, WHICH ARE EXPLAINED BELOW, AS IS THE USE C OF IV(TOOBIG) AND IV(NFGCAL). THE VALUE IV(G), WHICH IS AN C OUTPUT VALUE FROM DMNH, IS NOT REFERENCED BY DRMNH OR THE C SUBROUTINES IT CALLS. C C IV(1) = 1 MEANS THE CALLER SHOULD SET FX TO F(X), THE FUNCTION VALUE C AT X, AND CALL DRMNH AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) CANNOT BE C COMPUTED (E.G. IF OVERFLOW WOULD OCCUR), WHICH MAY HAPPEN C BECAUSE OF AN OVERSIZED STEP. IN THIS CASE THE CALLER C SHOULD SET IV(TOOBIG) = IV(2) TO 1, WHICH WILL CAUSE C DRMNH TO IGNORE FX AND TRY A SMALLER STEP. THE PARA- C METER NF THAT DMNH PASSES TO CALCF (FOR POSSIBLE _USE_ BY C CALCGH) IS A COPY OF IV(NFCALL) = IV(6). C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT OF F AT C X, AND H TO THE LOWER TRIANGLE OF H(X), THE HESSIAN OF F C AT X, AND CALL DRMNH AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS EXCEPT PERHAPS THE SCALE VECTOR D. C THE PARAMETER NF THAT DMNH PASSES TO CALCG IS C IV(NFGCAL) = IV(7). IF G(X) AND H(X) CANNOT BE EVALUATED, C THEN THE CALLER MAY SET IV(TOOBIG) TO 0, IN WHICH CASE C DRMNH WILL RETURN WITH IV(1) = 65. C NOTE -- DRMNH OVERWRITES H WITH THE LOWER TRIANGLE C OF DIAG(D)**-1 * H(X) * DIAG(D)**-1. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER 1980). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324 AND MCS-7906671. C C (SEE DMNG AND DMNH FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DG1, DUMMY, I, J, K, L, LSTGST, NN1O2, RSTRST, STEP1, 1 TEMP1, W1, X01 DOUBLE PRECISION T C C *** CONSTANTS *** C DOUBLE PRECISION ONE, ONEP2, ZERO C C *** NO INTRINSIC FUNCTIONS *** C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX DOUBLE PRECISION DD7TPR, DRLDST, DV2NRM EXTERNAL DA7SST,DIVSET, DD7TPR,DD7DUP,DG7QTS,DITSUM,DPARCK, 1 DRLDST, DS7LVM, STOPX,DV2AXY,DV7CPY, DV7SCP, DV2NRM C C DA7SST.... ASSESSES CANDIDATE STEP. C DIVSET.... PROVIDES DEFAULT IV AND V INPUT VALUES. C DD7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C DD7DUP.... UPDATES SCALE VECTOR D. C DG7QTS.... COMPUTES OPTIMALLY LOCALLY CONSTRAINED STEP. C DITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C DPARCK.... CHECKS VALIDITY OF INPUT IV AND V VALUES. C DRLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C DS7LVM... MULTIPLIES SYMMETRIC MATRIX TIMES VECTOR, GIVEN THE LOWER C TRIANGLE OF THE MATRIX. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C DV2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C DV2NRM... RETURNS THE 2-NORM OF A VECTOR. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, DG, DGNORM, DINIT, DSTNRM, DTINIT, DTOL, 1 DTYPE, D0INIT, F, F0, FDIF, GTSTEP, INCFAC, IRC, KAGQT, 2 LMAT, LMAX0, LMAXS, MODE, MODEL, MXFCAL, MXITER, NEXTV, 3 NFCALL, NFGCAL, NGCALL, NITER, PHMXFC, PREDUC, RADFAC, 4 RADINC, RADIUS, RAD0, RELDX, RESTOR, STEP, STGLIM, STLSTG, 5 STPPAR, TOOBIG, TUNER4, TUNER5, VNEED, W, XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA CNVCOD/55/, DG/37/, DTOL/59/, DTYPE/16/, IRC/29/, KAGQT/33/, C 1 LMAT/42/, MODE/35/, MODEL/5/, MXFCAL/17/, MXITER/18/, C 2 NEXTV/47/, NFCALL/6/, NFGCAL/7/, NGCALL/30/, NITER/31/, C 3 RADINC/8/, RESTOR/9/, STEP/40/, STGLIM/11/, STLSTG/41/, C 4 TOOBIG/2/, VNEED/4/, W/34/, XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, DG=37, DTOL=59, DTYPE=16, IRC=29, KAGQT=33, 1 LMAT=42, MODE=35, MODEL=5, MXFCAL=17, MXITER=18, 2 NEXTV=47, NFCALL=6, NFGCAL=7, NGCALL=30, NITER=31, 3 RADINC=8, RESTOR=9, STEP=40, STGLIM=11, STLSTG=41, 4 TOOBIG=2, VNEED=4, W=34, XIRC=13, X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DGNORM/1/, DINIT/38/, DSTNRM/2/, DTINIT/39/, D0INIT/40/, C 1 F/10/, F0/13/, FDIF/11/, GTSTEP/4/, INCFAC/23/, LMAX0/35/, C 2 LMAXS/36/, PHMXFC/21/, PREDUC/7/, RADFAC/16/, RADIUS/8/, C 3 RAD0/9/, RELDX/17/, STPPAR/5/, TUNER4/29/, TUNER5/30/ C/7 PARAMETER (DGNORM=1, DINIT=38, DSTNRM=2, DTINIT=39, D0INIT=40, 1 F=10, F0=13, FDIF=11, GTSTEP=4, INCFAC=23, LMAX0=35, 2 LMAXS=36, PHMXFC=21, PREDUC=7, RADFAC=16, RADIUS=8, 3 RAD0=9, RELDX=17, STPPAR=5, TUNER4=29, TUNER5=30) C/ C C/6 C DATA ONE/1.D+0/, ONEP2/1.2D+0/, ZERO/0.D+0/ C/7 PARAMETER (ONE=1.D+0, ONEP2=1.2D+0, ZERO=0.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 30 IF (I .EQ. 2) GO TO 40 C C *** CHECK VALIDITY OF IV AND V INPUT VALUES *** C IF (IV(1) .EQ. 0) CALL DIVSET(2, IV, LIV, LV, V) IF (IV(1) .EQ. 12 .OR. IV(1) .EQ. 13) 1 IV(VNEED) = IV(VNEED) + N*(N+21)/2 + 7 CALL DPARCK(2, D, IV, LIV, LV, N, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 NN1O2 = N * (N + 1) / 2 IF (LH .GE. NN1O2) GO TO (220,220,220,220,220,220,160,120,160, 1 10,10,20), I IV(1) = 66 GO TO 400 C C *** STORAGE ALLOCATION *** C 10 IV(DTOL) = IV(LMAT) + NN1O2 IV(X0) = IV(DTOL) + 2*N IV(STEP) = IV(X0) + N IV(STLSTG) = IV(STEP) + N IV(DG) = IV(STLSTG) + N IV(W) = IV(DG) + N IV(NEXTV) = IV(W) + 4*N + 7 IF (IV(1) .NE. 13) GO TO 20 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 20 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(MODEL) = 1 IV(STGLIM) = 1 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(RADINC) = 0 V(RAD0) = ZERO V(STPPAR) = ZERO IF (V(DINIT) .GE. ZERO) CALL DV7SCP(N, D, V(DINIT)) K = IV(DTOL) IF (V(DTINIT) .GT. ZERO) CALL DV7SCP(N, V(K), V(DTINIT)) K = K + N IF (V(D0INIT) .GT. ZERO) CALL DV7SCP(N, V(K), V(D0INIT)) IV(1) = 1 GO TO 999 C 30 V(F) = FX IF (IV(MODE) .GE. 0) GO TO 220 V(F0) = FX IV(1) = 2 IF (IV(TOOBIG) .EQ. 0) GO TO 999 IV(1) = 63 GO TO 400 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C 40 IF (IV(TOOBIG) .EQ. 0) GO TO 50 IV(1) = 65 GO TO 400 C C *** UPDATE THE SCALE VECTOR D *** C 50 DG1 = IV(DG) IF (IV(DTYPE) .LE. 0) GO TO 70 K = DG1 J = 0 DO 60 I = 1, N J = J + I V(K) = H(J) K = K + 1 60 CONTINUE CALL DD7DUP(D, V(DG1), IV, LIV, LV, N, V) C C *** COMPUTE SCALED GRADIENT AND ITS NORM *** C 70 DG1 = IV(DG) K = DG1 DO 80 I = 1, N V(K) = G(I) / D(I) K = K + 1 80 CONTINUE V(DGNORM) = DV2NRM(N, V(DG1)) C C *** COMPUTE SCALED HESSIAN *** C K = 1 DO 100 I = 1, N T = ONE / D(I) DO 90 J = 1, I H(K) = T * H(K) / D(J) K = K + 1 90 CONTINUE 100 CONTINUE C IF (IV(CNVCOD) .NE. 0) GO TO 390 IF (IV(MODE) .EQ. 0) GO TO 350 C C *** ALLOW FIRST STEP TO HAVE SCALED 2-NORM AT MOST V(LMAX0) *** C V(RADIUS) = V(LMAX0) / (ONE + V(PHMXFC)) C IV(MODE) = 0 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 110 CALL DITSUM(D, G, IV, LIV, LV, N, V, X) 120 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 130 IV(1) = 10 GO TO 400 C 130 IV(NITER) = K + 1 C C *** INITIALIZE FOR START OF NEXT ITERATION *** C DG1 = IV(DG) X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(KAGQT) = -1 C C *** COPY X TO X0 *** C CALL DV7CPY(N, V(X01), X) C C *** UPDATE RADIUS *** C IF (K .EQ. 0) GO TO 150 STEP1 = IV(STEP) K = STEP1 DO 140 I = 1, N V(K) = D(I) * V(K) K = K + 1 140 CONTINUE V(RADIUS) = V(RADFAC) * DV2NRM(N, V(STEP1)) C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 150 IF (.NOT. STOPX(DUMMY)) GO TO 170 IV(1) = 11 GO TO 180 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 160 IF (V(F) .GE. V(F0)) GO TO 170 V(RADFAC) = ONE K = IV(NITER) GO TO 130 C 170 IF (IV(NFCALL) .LT. IV(MXFCAL)) GO TO 190 IV(1) = 9 180 IF (V(F) .GE. V(F0)) GO TO 400 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 340 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 190 STEP1 = IV(STEP) DG1 = IV(DG) L = IV(LMAT) W1 = IV(W) CALL DG7QTS(D, V(DG1), H, IV(KAGQT), V(L), N, V(STEP1), V, V(W1)) IF (IV(IRC) .NE. 6) GO TO 200 IF (IV(RESTOR) .NE. 2) GO TO 220 RSTRST = 2 GO TO 230 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 200 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 220 IF (IV(IRC) .NE. 5) GO TO 210 IF (V(RADFAC) .LE. ONE) GO TO 210 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 210 IF (IV(RESTOR) .NE. 2) GO TO 220 RSTRST = 0 GO TO 230 C C *** COMPUTE F(X0 + STEP) *** C 210 X01 = IV(X0) STEP1 = IV(STEP) CALL DV2AXY(N, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 999 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 220 RSTRST = 3 230 X01 = IV(X0) V(RELDX) = DRLDST(N, D, X, V(X01)) CALL DA7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = IV(STLSTG) I = IV(RESTOR) + 1 GO TO (270, 240, 250, 260), I 240 CALL DV7CPY(N, X, V(X01)) GO TO 270 250 CALL DV7CPY(N, V(LSTGST), V(STEP1)) GO TO 270 260 CALL DV7CPY(N, V(STEP1), V(LSTGST)) CALL DV2AXY(N, X, ONE, V(STEP1), V(X01)) V(RELDX) = DRLDST(N, D, X, V(X01)) IV(RESTOR) = RSTRST C 270 K = IV(IRC) GO TO (280,310,310,310,280,290,300,300,300,300,300,300,380,350), K C C *** RECOMPUTE STEP WITH NEW RADIUS *** C 280 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 150 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST. C 290 V(RADIUS) = V(LMAXS) GO TO 190 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 300 IV(CNVCOD) = K - 4 IF (V(F) .GE. V(F0)) GO TO 390 IF (IV(XIRC) .EQ. 14) GO TO 390 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 310 IF (IV(IRC) .NE. 3) GO TO 340 TEMP1 = LSTGST C C *** PREPARE FOR GRADIENT TESTS *** C *** SET TEMP1 = HESSIAN * STEP + G(X0) C *** = DIAG(D) * (H * STEP + G(X0)) C C _USE_ X0 VECTOR AS TEMPORARY. K = X01 DO 320 I = 1, N V(K) = D(I) * V(STEP1) K = K + 1 STEP1 = STEP1 + 1 320 CONTINUE CALL DS7LVM(N, V(TEMP1), H, V(X01)) DO 330 I = 1, N V(TEMP1) = D(I) * V(TEMP1) + G(I) TEMP1 = TEMP1 + 1 330 CONTINUE C C *** COMPUTE GRADIENT AND HESSIAN *** C 340 IV(NGCALL) = IV(NGCALL) + 1 IV(TOOBIG) = 0 IV(1) = 2 GO TO 999 C 350 IV(1) = 2 IF (IV(IRC) .NE. 3) GO TO 110 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C TEMP1 = IV(STLSTG) STEP1 = IV(STEP) C C *** SET TEMP1 = DIAG(D)**-1 * (HESSIAN*STEP + (G(X0)-G(X))) *** C K = TEMP1 DO 360 I = 1, N V(K) = (V(K) - G(I)) / D(I) K = K + 1 360 CONTINUE C C *** DO GRADIENT TESTS *** C IF (DV2NRM(N, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) GO TO 370 IF (DD7TPR(N, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 110 370 V(RADFAC) = V(INCFAC) GO TO 110 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 380 IV(1) = 64 GO TO 400 C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 390 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 400 CALL DITSUM(D, G, IV, LIV, LV, N, V, X) C 999 RETURN C C *** LAST CARD OF DRMNH FOLLOWS *** END PyBDSF-1.10.1/src/port3/drmnhb.f000066400000000000000000000377761420247104600161240ustar00rootroot00000000000000 SUBROUTINE DRMNHB(B, D, FX, G, H, IV, LH, LIV, LV, N, V, X) C C *** CARRY OUT DMNHB (SIMPLY BOUNDED MINIMIZATION) ITERATIONS, C *** USING HESSIAN MATRIX PROVIDED BY THE CALLER. C C *** PARAMETER DECLARATIONS *** C INTEGER LH, LIV, LV, N INTEGER IV(LIV) DOUBLE PRECISION B(2,N), D(N), FX, G(N), H(LH), V(LV), X(N) C C-------------------------- PARAMETER USAGE -------------------------- C C D.... SCALE VECTOR. C FX... FUNCTION VALUE. C G.... GRADIENT VECTOR. C H.... LOWER TRIANGLE OF THE HESSIAN, STORED ROWWISE. C IV... INTEGER VALUE ARRAY. C LH... LENGTH OF H = P*(P+1)/2. C LIV.. LENGTH OF IV (AT LEAST 59 + 3*N). C LV... LENGTH OF V (AT LEAST 78 + N*(N+27)/2). C N.... NUMBER OF VARIABLES (COMPONENTS IN X AND G). C V.... FLOATING-POINT VALUE ARRAY. C X.... PARAMETER VECTOR. C C *** DISCUSSION *** C C PARAMETERS IV, N, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO DMNHB (WHICH SEE), EXCEPT THAT V CAN BE SHORTER (SINCE C THE PART OF V THAT DMNHB USES FOR STORING G AND H IS NOT NEEDED). C MOREOVER, COMPARED WITH DMNHB, IV(1) MAY HAVE THE TWO ADDITIONAL C OUTPUT VALUES 1 AND 2, WHICH ARE EXPLAINED BELOW, AS IS THE USE C OF IV(TOOBIG) AND IV(NFGCAL). THE VALUE IV(G), WHICH IS AN C OUTPUT VALUE FROM DMNHB, IS NOT REFERENCED BY DRMNHB OR THE C SUBROUTINES IT CALLS. C C IV(1) = 1 MEANS THE CALLER SHOULD SET FX TO F(X), THE FUNCTION VALUE C AT X, AND CALL DRMNHB AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) CANNOT BE C COMPUTED (E.G. IF OVERFLOW WOULD OCCUR), WHICH MAY HAPPEN C BECAUSE OF AN OVERSIZED STEP. IN THIS CASE THE CALLER C SHOULD SET IV(TOOBIG) = IV(2) TO 1, WHICH WILL CAUSE C DRMNHB TO IGNORE FX AND TRY A SMALLER STEP. THE PARA- C METER NF THAT DMNH PASSES TO CALCF (FOR POSSIBLE _USE_ BY C CALCGH) IS A COPY OF IV(NFCALL) = IV(6). C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT OF F AT C X, AND H TO THE LOWER TRIANGLE OF H(X), THE HESSIAN OF F C AT X, AND CALL DRMNHB AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS EXCEPT PERHAPS THE SCALE VECTOR D. C THE PARAMETER NF THAT DMNHB PASSES TO CALCG IS C IV(NFGCAL) = IV(7). IF G(X) AND H(X) CANNOT BE EVALUATED, C THEN THE CALLER MAY SET IV(NFGCAL) TO 0, IN WHICH CASE C DRMNHB WILL RETURN WITH IV(1) = 65. C NOTE -- DRMNHB OVERWRITES H WITH THE LOWER TRIANGLE C OF DIAG(D)**-1 * H(X) * DIAG(D)**-1. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER, SPRING 1983). C C (SEE DMNG AND DMNH FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DG1, DUMMY, I, IPI, IPIV2, IPN, J, K, L, LSTGST, NN1O2, 1 RSTRST, STEP0, STEP1, TD1, TEMP0, TEMP1, TG1, W1, X01, X11 DOUBLE PRECISION GI, T, XI C C *** CONSTANTS *** C DOUBLE PRECISION NEGONE, ONE, ONEP2, ZERO C C *** NO INTRINSIC FUNCTIONS *** C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX DOUBLE PRECISION DD7TPR, DRLDST, DV2NRM EXTERNAL DA7SST,DIVSET, DD7TPR,DD7DUP, DG7QSB, I7PNVR,DITSUM, 1 DPARCK, DRLDST, DS7IPR, DS7LVM, STOPX, DV2NRM,DV2AXY, 2 DV7CPY, DV7IPR, DV7SCP, DV7VMP C C DA7SST.... ASSESSES CANDIDATE STEP. C DIVSET.... PROVIDES DEFAULT IV AND V INPUT VALUES. C DD7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C DD7DUP.... UPDATES SCALE VECTOR D. C DG7QSB... COMPUTES APPROXIMATE OPTIMAL BOUNDED STEP. C I7PNVR... INVERTS PERMUTATION ARRAY. C DITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C DPARCK.... CHECKS VALIDITY OF INPUT IV AND V VALUES. C DRLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C DS7IPR... APPLIES PERMUTATION TO LOWER TRIANG. OF SYM. MATRIX. C DS7LVM... MULTIPLIES SYMMETRIC MATRIX TIMES VECTOR, GIVEN THE LOWER C TRIANGLE OF THE MATRIX. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C DV2NRM... RETURNS THE 2-NORM OF A VECTOR. C DV2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7IPR... APPLIES PERMUTATION TO VECTOR. C DV7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C DV7VMP... MULTIPLIES (OR DIVIDES) TWO VECTORS COMPONENTWISE. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, DG, DGNORM, DINIT, DSTNRM, DTINIT, DTOL, DTYPE, 1 D0INIT, F, F0, FDIF, GTSTEP, INCFAC, IVNEED, IRC, KAGQT, 2 LMAT, LMAX0, LMAXS, MODE, MODEL, MXFCAL, MXITER, N0, NC, 3 NEXTIV, NEXTV, NFCALL, NFGCAL, NGCALL, NITER, PERM, 4 PHMXFC, PREDUC, RADFAC, RADINC, RADIUS, RAD0, RELDX, 5 RESTOR, STEP, STGLIM, STPPAR, TOOBIG, TUNER4, TUNER5, 6 VNEED, W, XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C *** (NOTE THAT NC AND N0 ARE STORED IN IV(G0) AND IV(STLSTG) RESP.) C C/6 C DATA CNVCOD/55/, DG/37/, DTOL/59/, DTYPE/16/, IRC/29/, IVNEED/3/, C 1 KAGQT/33/, LMAT/42/, MODE/35/, MODEL/5/, MXFCAL/17/, C 2 MXITER/18/, N0/41/, NC/48/, NEXTIV/46/, NEXTV/47/, NFCALL/6/, C 3 NFGCAL/7/, NGCALL/30/, NITER/31/, PERM/58/, RADINC/8/, C 4 RESTOR/9/, STEP/40/, STGLIM/11/, TOOBIG/2/, VNEED/4/, W/34/, C 5 XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, DG=37, DTOL=59, DTYPE=16, IRC=29, IVNEED=3, 1 KAGQT=33, LMAT=42, MODE=35, MODEL=5, MXFCAL=17, 2 MXITER=18, N0=41, NC=48, NEXTIV=46, NEXTV=47, NFCALL=6, 3 NFGCAL=7, NGCALL=30, NITER=31, PERM=58, RADINC=8, 4 RESTOR=9, STEP=40, STGLIM=11, TOOBIG=2, VNEED=4, W=34, 5 XIRC=13, X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DGNORM/1/, DINIT/38/, DSTNRM/2/, DTINIT/39/, D0INIT/40/, C 1 F/10/, F0/13/, FDIF/11/, GTSTEP/4/, INCFAC/23/, LMAX0/35/, C 2 LMAXS/36/, PHMXFC/21/, PREDUC/7/, RADFAC/16/, RADIUS/8/, C 3 RAD0/9/, RELDX/17/, STPPAR/5/, TUNER4/29/, TUNER5/30/ C/7 PARAMETER (DGNORM=1, DINIT=38, DSTNRM=2, DTINIT=39, D0INIT=40, 1 F=10, F0=13, FDIF=11, GTSTEP=4, INCFAC=23, LMAX0=35, 2 LMAXS=36, PHMXFC=21, PREDUC=7, RADFAC=16, RADIUS=8, 3 RAD0=9, RELDX=17, STPPAR=5, TUNER4=29, TUNER5=30) C/ C C/6 C DATA NEGONE/-1.D+0/, ONE/1.D+0/, ONEP2/1.2D+0/, ZERO/0.D+0/ C/7 PARAMETER (NEGONE=-1.D+0, ONE=1.D+0, ONEP2=1.2D+0, ZERO=0.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 50 IF (I .EQ. 2) GO TO 60 C C *** CHECK VALIDITY OF IV AND V INPUT VALUES *** C IF (IV(1) .EQ. 0) CALL DIVSET(2, IV, LIV, LV, V) IF (IV(1) .LT. 12) GO TO 10 IF (IV(1) .GT. 13) GO TO 10 IV(VNEED) = IV(VNEED) + N*(N+27)/2 + 7 IV(IVNEED) = IV(IVNEED) + 3*N 10 CALL DPARCK(2, D, IV, LIV, LV, N, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 NN1O2 = N * (N + 1) / 2 IF (LH .GE. NN1O2) GO TO (250,250,250,250,250,250,190,150,190, 1 20,20,30), I IV(1) = 81 GO TO 440 C C *** STORAGE ALLOCATION *** C 20 IV(DTOL) = IV(LMAT) + NN1O2 IV(X0) = IV(DTOL) + 2*N IV(STEP) = IV(X0) + 2*N IV(DG) = IV(STEP) + 3*N IV(W) = IV(DG) + 2*N IV(NEXTV) = IV(W) + 4*N + 7 IV(NEXTIV) = IV(PERM) + 3*N IF (IV(1) .NE. 13) GO TO 30 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 30 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(MODEL) = 1 IV(STGLIM) = 1 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(RADINC) = 0 IV(NC) = N V(RAD0) = ZERO V(STPPAR) = ZERO IF (V(DINIT) .GE. ZERO) CALL DV7SCP(N, D, V(DINIT)) K = IV(DTOL) IF (V(DTINIT) .GT. ZERO) CALL DV7SCP(N, V(K), V(DTINIT)) K = K + N IF (V(D0INIT) .GT. ZERO) CALL DV7SCP(N, V(K), V(D0INIT)) C C *** CHECK CONSISTENCY OF B AND INITIALIZE IP ARRAY *** C IPI = IV(PERM) DO 40 I = 1, N IV(IPI) = I IPI = IPI + 1 IF (B(1,I) .GT. B(2,I)) GO TO 420 40 CONTINUE C C *** GET INITIAL FUNCTION VALUE *** C IV(1) = 1 GO TO 450 C 50 V(F) = FX IF (IV(MODE) .GE. 0) GO TO 250 V(F0) = FX IV(1) = 2 IF (IV(TOOBIG) .EQ. 0) GO TO 999 IV(1) = 63 GO TO 440 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C 60 IF (IV(TOOBIG) .EQ. 0) GO TO 70 IV(1) = 65 GO TO 440 C C *** UPDATE THE SCALE VECTOR D *** C 70 DG1 = IV(DG) IF (IV(DTYPE) .LE. 0) GO TO 90 K = DG1 J = 0 DO 80 I = 1, N J = J + I V(K) = H(J) K = K + 1 80 CONTINUE CALL DD7DUP(D, V(DG1), IV, LIV, LV, N, V) C C *** COMPUTE SCALED GRADIENT AND ITS NORM *** C 90 DG1 = IV(DG) CALL DV7VMP(N, V(DG1), G, D, -1) C C *** COMPUTE SCALED HESSIAN *** C K = 1 DO 110 I = 1, N T = ONE / D(I) DO 100 J = 1, I H(K) = T * H(K) / D(J) K = K + 1 100 CONTINUE 110 CONTINUE C C *** CHOOSE INITIAL PERMUTATION *** C IPI = IV(PERM) IPN = IPI + N IPIV2 = IPN - 1 C *** INVERT OLD PERMUTATION ARRAY *** CALL I7PNVR(N, IV(IPN), IV(IPI)) K = IV(NC) DO 130 I = 1, N IF (B(1,I) .GE. B(2,I)) GO TO 120 XI = X(I) GI = G(I) IF (XI .LE. B(1,I) .AND. GI .GT. ZERO) GO TO 120 IF (XI .GE. B(2,I) .AND. GI .LT. ZERO) GO TO 120 IV(IPI) = I IPI = IPI + 1 J = IPIV2 + I C *** DISALLOW CONVERGENCE IF X(I) HAS JUST BEEN FREED *** IF (IV(J) .GT. K) IV(CNVCOD) = 0 GO TO 130 120 IPN = IPN - 1 IV(IPN) = I 130 CONTINUE IV(NC) = IPN - IV(PERM) C C *** PERMUTE SCALED GRADIENT AND HESSIAN ACCORDINGLY *** C IPI = IV(PERM) CALL DS7IPR(N, IV(IPI), H) CALL DV7IPR(N, IV(IPI), V(DG1)) V(DGNORM) = ZERO IF (IV(NC) .GT. 0) V(DGNORM) = DV2NRM(IV(NC), V(DG1)) C IF (IV(CNVCOD) .NE. 0) GO TO 430 IF (IV(MODE) .EQ. 0) GO TO 380 C C *** ALLOW FIRST STEP TO HAVE SCALED 2-NORM AT MOST V(LMAX0) *** C V(RADIUS) = V(LMAX0) / (ONE + V(PHMXFC)) C IV(MODE) = 0 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 140 CALL DITSUM(D, G, IV, LIV, LV, N, V, X) 150 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 160 IV(1) = 10 GO TO 440 C 160 IV(NITER) = K + 1 C C *** INITIALIZE FOR START OF NEXT ITERATION *** C X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(KAGQT) = -1 C C *** COPY X TO X0 *** C CALL DV7CPY(N, V(X01), X) C C *** UPDATE RADIUS *** C IF (K .EQ. 0) GO TO 180 STEP1 = IV(STEP) K = STEP1 DO 170 I = 1, N V(K) = D(I) * V(K) K = K + 1 170 CONTINUE T = V(RADFAC) * DV2NRM(N, V(STEP1)) IF (V(RADFAC) .LT. ONE .OR. T .GT. V(RADIUS)) V(RADIUS) = T C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 180 IF (.NOT. STOPX(DUMMY)) GO TO 200 IV(1) = 11 GO TO 210 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 190 IF (V(F) .GE. V(F0)) GO TO 200 V(RADFAC) = ONE K = IV(NITER) GO TO 160 C 200 IF (IV(NFCALL) .LT. IV(MXFCAL)) GO TO 220 IV(1) = 9 210 IF (V(F) .GE. V(F0)) GO TO 440 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 370 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 220 STEP1 = IV(STEP) L = IV(LMAT) W1 = IV(W) IPI = IV(PERM) IPN = IPI + N IPIV2 = IPN + N TG1 = IV(DG) TD1 = TG1 + N X01 = IV(X0) X11 = X01 + N CALL DG7QSB(B, D, H, G, IV(IPI), IV(IPN), IV(IPIV2), IV(KAGQT), 1 V(L), LV, N, IV(N0), IV(NC), V(STEP1), V(TD1), V(TG1), 2 V, V(W1), V(X11), V(X01)) IF (IV(IRC) .NE. 6) GO TO 230 IF (IV(RESTOR) .NE. 2) GO TO 250 RSTRST = 2 GO TO 260 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 230 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 250 IF (IV(IRC) .NE. 5) GO TO 240 IF (V(RADFAC) .LE. ONE) GO TO 240 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 240 IF (IV(RESTOR) .NE. 2) GO TO 250 RSTRST = 0 GO TO 260 C C *** COMPUTE F(X0 + STEP) *** C 240 CALL DV2AXY(N, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 450 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 250 RSTRST = 3 260 X01 = IV(X0) V(RELDX) = DRLDST(N, D, X, V(X01)) CALL DA7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = STEP1 + 2*N I = IV(RESTOR) + 1 GO TO (300, 270, 280, 290), I 270 CALL DV7CPY(N, X, V(X01)) GO TO 300 280 CALL DV7CPY(N, V(LSTGST), X) GO TO 300 290 CALL DV7CPY(N, X, V(LSTGST)) CALL DV2AXY(N, V(STEP1), NEGONE, V(X01), X) V(RELDX) = DRLDST(N, D, X, V(X01)) IV(RESTOR) = RSTRST C 300 K = IV(IRC) GO TO (310,340,340,340,310,320,330,330,330,330,330,330,410,380), K C C *** RECOMPUTE STEP WITH NEW RADIUS *** C 310 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 180 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST. C 320 V(RADIUS) = V(LMAXS) GO TO 220 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 330 IV(CNVCOD) = K - 4 IF (V(F) .GE. V(F0)) GO TO 430 IF (IV(XIRC) .EQ. 14) GO TO 430 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 340 IF (IV(IRC) .NE. 3) GO TO 370 TEMP1 = LSTGST C C *** PREPARE FOR GRADIENT TESTS *** C *** SET TEMP1 = HESSIAN * STEP + G(X0) C *** = DIAG(D) * (H * STEP + G(X0)) C K = TEMP1 STEP0 = STEP1 - 1 IPI = IV(PERM) DO 350 I = 1, N J = IV(IPI) IPI = IPI + 1 STEP1 = STEP0 + J V(K) = D(J) * V(STEP1) K = K + 1 350 CONTINUE C _USE_ X0 VECTOR AS TEMPORARY. CALL DS7LVM(N, V(X01), H, V(TEMP1)) TEMP0 = TEMP1 - 1 IPI = IV(PERM) DO 360 I = 1, N J = IV(IPI) IPI = IPI + 1 TEMP1 = TEMP0 + J V(TEMP1) = D(J) * V(X01) + G(J) X01 = X01 + 1 360 CONTINUE C C *** COMPUTE GRADIENT AND HESSIAN *** C 370 IV(NGCALL) = IV(NGCALL) + 1 IV(TOOBIG) = 0 IV(1) = 2 GO TO 450 C 380 IV(1) = 2 IF (IV(IRC) .NE. 3) GO TO 140 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C STEP1 = IV(STEP) C *** TEMP1 = STLSTG *** TEMP1 = STEP1 + 2*N C C *** SET TEMP1 = DIAG(D)**-1 * (HESSIAN*STEP + (G(X0)-G(X))) *** C K = TEMP1 DO 390 I = 1, N V(K) = (V(K) - G(I)) / D(I) K = K + 1 390 CONTINUE C C *** DO GRADIENT TESTS *** C IF (DV2NRM(N, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) GO TO 400 IF (DD7TPR(N, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 140 400 V(RADFAC) = V(INCFAC) GO TO 140 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 410 IV(1) = 64 GO TO 440 C C *** INCONSISTENT B *** C 420 IV(1) = 82 GO TO 440 C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 430 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 440 CALL DITSUM(D, G, IV, LIV, LV, N, V, X) GO TO 999 C C *** PROJECT X INTO FEASIBLE REGION (PRIOR TO COMPUTING F OR G) *** C 450 DO 460 I = 1, N IF (X(I) .LT. B(1,I)) X(I) = B(1,I) IF (X(I) .GT. B(2,I)) X(I) = B(2,I) 460 CONTINUE C 999 RETURN C C *** LAST CARD OF DRMNHB FOLLOWS *** END PyBDSF-1.10.1/src/port3/drn2g.f000066400000000000000000000362571420247104600156570ustar00rootroot00000000000000 SUBROUTINE DRN2G(D, DR, IV, LIV, LV, N, ND, N1, N2, P, R, 1 RD, V, X) C C *** REVISED ITERATION DRIVER FOR NL2SOL (VERSION 2.3) *** C INTEGER LIV, LV, N, ND, N1, N2, P INTEGER IV(LIV) DOUBLE PRECISION D(P), DR(ND,P), R(ND), RD(ND), V(LV), X(P) C C-------------------------- PARAMETER USAGE -------------------------- C C D........ SCALE VECTOR. C DR....... DERIVATIVES OF R AT X. C IV....... INTEGER VALUES ARRAY. C LIV...... LENGTH OF IV... LIV MUST BE AT LEAST P + 82. C LV....... LENGTH OF V... LV MUST BE AT LEAST 105 + P*(2*P+16). C N........ TOTAL NUMBER OF RESIDUALS. C ND....... MAX. NO. OF RESIDUALS PASSED ON ONE CALL. C N1....... LOWEST ROW INDEX FOR RESIDUALS SUPPLIED THIS TIME. C N2....... HIGHEST ROW INDEX FOR RESIDUALS SUPPLIED THIS TIME. C P........ NUMBER OF PARAMETERS (COMPONENTS OF X) BEING ESTIMATED. C R........ RESIDUALS. C RD....... RD(I) = SQRT(G(I)**T * H(I)**-1 * G(I)) ON OUTPUT WHEN C IV(RDREQ) IS NONZERO. DRN2G SETS IV(REGD) = 1 IF RD C IS SUCCESSFULLY COMPUTED, TO 0 IF NO ATTEMPT WAS MADE C TO COMPUTE IT, AND TO -1 IF H (THE FINITE-DIFFERENCE HESSIAN) C WAS INDEFINITE. IF ND .GE. N, THEN RD IS ALSO USED AS C TEMPORARY STORAGE. C V........ FLOATING-POINT VALUES ARRAY. C X........ PARAMETER VECTOR BEING ESTIMATED (INPUT = INITIAL GUESS, C OUTPUT = BEST VALUE FOUND). C C *** DISCUSSION *** C C NOTE... NL2SOL AND NL2ITR (MENTIONED BELOW) ARE DESCRIBED IN C ACM TRANS. MATH. SOFTWARE, VOL. 7, PP. 369-383 (AN ADAPTIVE C NONLINEAR LEAST-SQUARES ALGORITHM, BY J.E. DENNIS, D.M. GAY, C AND R.E. WELSCH). C C THIS ROUTINE CARRIES OUT ITERATIONS FOR SOLVING NONLINEAR C LEAST SQUARES PROBLEMS. WHEN ND = N, IT IS SIMILAR TO NL2ITR C (WITH J = DR), EXCEPT THAT R(X) AND DR(X) NEED NOT BE INITIALIZED C WHEN DRN2G IS CALLED WITH IV(1) = 0 OR 12. DRN2G ALSO ALLOWS C R AND DR TO BE SUPPLIED ROW-WISE -- JUST SET ND = 1 AND CALL C DRN2G ONCE FOR EACH ROW WHEN PROVIDING RESIDUALS AND JACOBIANS. C ANOTHER NEW FEATURE IS THAT CALLING DRN2G WITH IV(1) = 13 C CAUSES STORAGE ALLOCATION ONLY TO BE PERFORMED -- ON RETURN, SUCH C COMPONENTS AS IV(G) (THE FIRST SUBSCRIPT IN G OF THE GRADIENT) C AND IV(S) (THE FIRST SUBSCRIPT IN V OF THE S LOWER TRIANGLE OF C THE S MATRIX) WILL HAVE BEEN SET (UNLESS LIV OR LV IS TOO SMALL), C AND IV(1) WILL HAVE BEEN SET TO 14. CALLING DRN2G WITH IV(1) = 14 C CAUSES EXECUTION OF THE ALGORITHM TO BEGIN UNDER THE ASSUMPTION C THAT STORAGE HAS BEEN ALLOCATED. C C *** SUPPLYING R AND DR *** C C DRN2G USES IV AND V IN THE SAME WAY AS NL2SOL, WITH A SMALL C NUMBER OF OBVIOUS CHANGES. ONE DIFFERENCE BETWEEN DRN2G AND C NL2ITR IS THAT INITIAL FUNCTION AND GRADIENT INFORMATION NEED NOT C BE SUPPLIED IN THE VERY FIRST CALL ON DRN2G, THE ONE WITH C IV(1) = 0 OR 12. ANOTHER DIFFERENCE IS THAT DRN2G RETURNS WITH C IV(1) = -2 WHEN IT WANTS ANOTHER LOOK AT THE OLD JACOBIAN MATRIX C AND THE CURRENT RESIDUAL -- THE ONE CORRESPONDING TO X AND C IV(NFGCAL). IT THEN RETURNS WITH IV(1) = -3 WHEN IT WANTS TO SEE C BOTH THE NEW RESIDUAL AND THE NEW JACOBIAN MATRIX AT ONCE. NOTE C THAT IV(NFGCAL) = IV(7) CONTAINS THE VALUE THAT IV(NFCALL) = IV(6) C HAD WHEN THE CURRENT RESIDUAL WAS EVALUATED. ALSO NOTE THAT THE C VALUE OF X CORRESPONDING TO THE OLD JACOBIAN MATRIX IS STORED IN C V, STARTING AT V(IV(X0)) = V(IV(43)). C ANOTHER NEW RETURN... DRN2G IV(1) = -1 WHEN IT WANTS BOTH THE C RESIDUAL AND THE JACOBIAN TO BE EVALUATED AT X. C A NEW RESIDUAL VECTOR MUST BE SUPPLIED WHEN DRN2G RETURNS WITH C IV(1) = 1 OR -1. THIS TAKES THE FORM OF VALUES OF R(I,X) PASSED C IN R(I-N1+1), I = N1(1)N2. YOU MAY PASS ALL THESE VALUES AT ONCE C (I.E., N1 = 1 AND N2 = N) OR IN PIECES BY MAKING SEVERAL CALLS ON C DRN2G. EACH TIME DRN2G RETURNS WITH IV(1) = 1, N1 WILL HAVE C BEEN SET TO THE INDEX OF THE NEXT RESIDUAL THAT DRN2G EXPECTS TO C SEE, AND N2 WILL BE SET TO THE INDEX OF THE HIGHEST RESIDUAL THAT C COULD BE GIVEN ON THE NEXT CALL, I.E., N2 = N1 + ND - 1. (THUS C WHEN DRN2G FIRST RETURNS WITH IV(1) = 1 FOR A NEW X, IT WILL C HAVE SET N1 TO 1 AND N2 TO MIN(ND,N).) THE CALLER MAY PROVIDE C FEWER THAN N2-N1+1 RESIDUALS ON THE NEXT CALL BY SETTING N2 TO C A SMALLER VALUE. DRN2G ASSUMES IT HAS SEEN ALL THE RESIDUALS C FOR THE CURRENT X WHEN IT IS CALLED WITH N2 .GE. N. C EXAMPLE... SUPPOSE N = 80 AND THAT R IS TO BE PASSED IN 8 C BLOCKS OF SIZE 10. THE FOLLOWING CODE WOULD DO THE JOB. C C N = 80 C ND = 10 C ... C DO 10 K = 1, 8 C *** COMPUTE R(I,X) FOR I = 10*K-9 TO 10*K *** C *** AND STORE THEM IN R(1),...,R(10) *** C CALL DRN2G(..., R, ...) C 10 CONTINUE C C THE SITUATION IS SIMILAR WHEN GRADIENT INFORMATION IS C REQUIRED, I.E., WHEN DRN2G RETURNS WITH IV(1) = 2, -1, OR -2. C NOTE THAT DRN2G OVERWRITES R, BUT THAT IN THE SPECIAL CASE OF C N1 = 1 AND N2 = N ON PREVIOUS CALLS, DRN2G NEVER RETURNS WITH C IV(1) = -2. IT SHOULD BE CLEAR THAT THE PARTIAL DERIVATIVE OF C R(I,X) WITH RESPECT TO X(L) IS TO BE STORED IN DR(I-N1+1,L), C L = 1(1)P, I = N1(1)N2. IT IS ESSENTIAL THAT R(I) AND DR(I,L) C ALL CORRESPOND TO THE SAME RESIDUALS WHEN IV(1) = -1 OR -2. C C *** COVARIANCE MATRIX *** C C IV(RDREQ) = IV(57) TELLS WHETHER TO COMPUTE A COVARIANCE C MATRIX AND/OR REGRESSION DIAGNOSTICS... 0 MEANS NEITHER, C 1 MEANS COVARIANCE MATRIX ONLY, 2 MEANS REG. DIAGNOSTICS ONLY, C 3 MEANS BOTH. AS WITH NL2SOL, IV(COVREQ) = IV(15) TELLS WHAT C HESSIAN APPROXIMATION TO _USE_ IN THIS COMPUTING. C C *** REGRESSION DIAGNOSTICS *** C C SEE THE COMMENTS IN SUBROUTINE DN2G. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C+++++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++ C C *** INTRINSIC FUNCTIONS *** C/+ INTEGER IABS, MOD C/ C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C DOUBLE PRECISION DD7TPR, DV2NRM EXTERNAL DC7VFN,DIVSET, DD7TPR,DD7UPD,DG7LIT,DITSUM,DL7VML, 1 DN2CVP, DN2LRD, DQ7APL,DQ7RAD,DV7CPY, DV7SCP, DV2NRM C C DC7VFN... FINISHES COVARIANCE COMPUTATION. C DIVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C DD7TPR... COMPUTES INNER PRODUCT OF TWO VECTORS. C DD7UPD... UPDATES SCALE VECTOR D. C DG7LIT.... PERFORMS BASIC MINIMIZATION ALGORITHM. C DITSUM.... PRINTS ITERATION SUMMARY, INFO ABOUT INITIAL AND FINAL X. C DL7VML.... COMPUTES L * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C DN2CVP... PRINTS COVARIANCE MATRIX. C DN2LRD... COMPUTES REGRESSION DIAGNOSTICS. C DQ7APL... APPLIES QR TRANSFORMATIONS STORED BY DQ7RAD. C DQ7RAD.... ADDS A NEW BLOCK OF ROWS TO QR DECOMPOSITION. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C C *** LOCAL VARIABLES *** C INTEGER G1, GI, I, IV1, IVMODE, JTOL1, K, L, LH, NN, QTR1, 1 RMAT1, YI, Y1 DOUBLE PRECISION T C DOUBLE PRECISION HALF, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, COVMAT, COVREQ, DINIT, DTYPE, DTINIT, D0INIT, F, 1 FDH, G, H, IPIVOT, IVNEED, JCN, JTOL, LMAT, MODE, 2 NEXTIV, NEXTV, NF0, NF00, NF1, NFCALL, NFCOV, NFGCAL, 3 NGCALL, NGCOV, QTR, RDREQ, REGD, RESTOR, RLIMIT, RMAT, 4 TOOBIG, VNEED, Y C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA CNVCOD/55/, COVMAT/26/, COVREQ/15/, DTYPE/16/, FDH/74/, C 1 G/28/, H/56/, IPIVOT/76/, IVNEED/3/, JCN/66/, JTOL/59/, C 2 LMAT/42/, MODE/35/, NEXTIV/46/, NEXTV/47/, NFCALL/6/, C 3 NFCOV/52/, NF0/68/, NF00/81/, NF1/69/, NFGCAL/7/, NGCALL/30/, C 4 NGCOV/53/, QTR/77/, RESTOR/9/, RMAT/78/, RDREQ/57/, REGD/67/, C 5 TOOBIG/2/, VNEED/4/, Y/48/ C/7 PARAMETER (CNVCOD=55, COVMAT=26, COVREQ=15, DTYPE=16, FDH=74, 1 G=28, H=56, IPIVOT=76, IVNEED=3, JCN=66, JTOL=59, 2 LMAT=42, MODE=35, NEXTIV=46, NEXTV=47, NFCALL=6, 3 NFCOV=52, NF0=68, NF00=81, NF1=69, NFGCAL=7, NGCALL=30, 4 NGCOV=53, QTR=77, RESTOR=9, RMAT=78, RDREQ=57, REGD=67, 5 TOOBIG=2, VNEED=4, Y=48) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DINIT/38/, DTINIT/39/, D0INIT/40/, F/10/, RLIMIT/46/ C/7 PARAMETER (DINIT=38, DTINIT=39, D0INIT=40, F=10, RLIMIT=46) C/ C/6 C DATA HALF/0.5D+0/, ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, ZERO=0.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C LH = P * (P+1) / 2 IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .GT. 2) GO TO 10 NN = N2 - N1 + 1 IV(RESTOR) = 0 I = IV1 + 4 IF (IV(TOOBIG) .EQ. 0) GO TO (150, 130, 150, 120, 120, 150), I IF (I .NE. 5) IV(1) = 2 GO TO 40 C C *** FRESH START OR RESTART -- CHECK INPUT INTEGERS *** C 10 IF (ND .LE. 0) GO TO 210 IF (P .LE. 0) GO TO 210 IF (N .LE. 0) GO TO 210 IF (IV1 .EQ. 14) GO TO 30 IF (IV1 .GT. 16) GO TO 300 IF (IV1 .LT. 12) GO TO 40 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 20 IV(IVNEED) = IV(IVNEED) + P IV(VNEED) = IV(VNEED) + P*(P+13)/2 20 CALL DG7LIT(D, X, IV, LIV, LV, P, P, V, X, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IPIVOT) = IV(NEXTIV) IV(NEXTIV) = IV(IPIVOT) + P IV(Y) = IV(NEXTV) IV(G) = IV(Y) + P IV(JCN) = IV(G) + P IV(RMAT) = IV(JCN) + P IV(QTR) = IV(RMAT) + LH IV(JTOL) = IV(QTR) + P IV(NEXTV) = IV(JTOL) + 2*P IF (IV1 .EQ. 13) GO TO 999 C 30 JTOL1 = IV(JTOL) IF (V(DINIT) .GE. ZERO) CALL DV7SCP(P, D, V(DINIT)) IF (V(DTINIT) .GT. ZERO) CALL DV7SCP(P, V(JTOL1), V(DTINIT)) I = JTOL1 + P IF (V(D0INIT) .GT. ZERO) CALL DV7SCP(P, V(I), V(D0INIT)) IV(NF0) = 0 IV(NF1) = 0 IF (ND .GE. N) GO TO 40 C C *** SPECIAL CASE HANDLING OF FIRST FUNCTION AND GRADIENT EVALUATION C *** -- ASK FOR BOTH RESIDUAL AND JACOBIAN AT ONCE C G1 = IV(G) Y1 = IV(Y) CALL DG7LIT(D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) .NE. 1) GO TO 220 V(F) = ZERO CALL DV7SCP(P, V(G1), ZERO) IV(1) = -1 QTR1 = IV(QTR) CALL DV7SCP(P, V(QTR1), ZERO) IV(REGD) = 0 RMAT1 = IV(RMAT) GO TO 100 C 40 G1 = IV(G) Y1 = IV(Y) CALL DG7LIT(D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) - 2) 50, 60, 220 C 50 V(F) = ZERO IF (IV(NF1) .EQ. 0) GO TO 260 IF (IV(RESTOR) .NE. 2) GO TO 260 IV(NF0) = IV(NF1) CALL DV7CPY(N, RD, R) IV(REGD) = 0 GO TO 260 C 60 CALL DV7SCP(P, V(G1), ZERO) IF (IV(MODE) .GT. 0) GO TO 230 RMAT1 = IV(RMAT) QTR1 = IV(QTR) CALL DV7SCP(P, V(QTR1), ZERO) IV(REGD) = 0 IF (ND .LT. N) GO TO 90 IF (N1 .NE. 1) GO TO 90 IF (IV(MODE) .LT. 0) GO TO 100 IF (IV(NF1) .EQ. IV(NFGCAL)) GO TO 70 IF (IV(NF0) .NE. IV(NFGCAL)) GO TO 90 CALL DV7CPY(N, R, RD) GO TO 80 70 CALL DV7CPY(N, RD, R) 80 CALL DQ7APL(ND, N, P, DR, RD, 0) CALL DL7VML(P, V(Y1), V(RMAT1), RD) GO TO 110 C 90 IV(1) = -2 IF (IV(MODE) .LT. 0) IV(1) = -1 100 CALL DV7SCP(P, V(Y1), ZERO) 110 CALL DV7SCP(LH, V(RMAT1), ZERO) GO TO 260 C C *** COMPUTE F(X) *** C 120 T = DV2NRM(NN, R) IF (T .GT. V(RLIMIT)) GO TO 200 V(F) = V(F) + HALF * T**2 IF (N2 .LT. N) GO TO 270 IF (N1 .EQ. 1) IV(NF1) = IV(NFCALL) GO TO 40 C C *** COMPUTE Y *** C 130 Y1 = IV(Y) YI = Y1 DO 140 L = 1, P V(YI) = V(YI) + DD7TPR(NN, DR(1,L), R) YI = YI + 1 140 CONTINUE IF (N2 .LT. N) GO TO 270 IV(1) = 2 IF (N1 .GT. 1) IV(1) = -3 GO TO 260 C C *** COMPUTE GRADIENT INFORMATION *** C 150 IF (IV(MODE) .GT. P) GO TO 240 G1 = IV(G) IVMODE = IV(MODE) IF (IVMODE .LT. 0) GO TO 170 IF (IVMODE .EQ. 0) GO TO 180 IV(1) = 2 C C *** COMPUTE GRADIENT ONLY (FOR _USE_ IN COVARIANCE COMPUTATION) *** C GI = G1 DO 160 L = 1, P V(GI) = V(GI) + DD7TPR(NN, R, DR(1,L)) GI = GI + 1 160 CONTINUE GO TO 190 C C *** COMPUTE INITIAL FUNCTION VALUE WHEN ND .LT. N *** C 170 IF (N .LE. ND) GO TO 180 T = DV2NRM(NN, R) IF (T .GT. V(RLIMIT)) GO TO 200 V(F) = V(F) + HALF * T**2 C C *** UPDATE D IF DESIRED *** C 180 IF (IV(DTYPE) .GT. 0) 1 CALL DD7UPD(D, DR, IV, LIV, LV, N, ND, NN, N2, P, V) C C *** COMPUTE RMAT AND QTR *** C QTR1 = IV(QTR) RMAT1 = IV(RMAT) CALL DQ7RAD(NN, ND, P, V(QTR1), .TRUE., V(RMAT1), DR, R) IV(NF1) = 0 C 190 IF (N2 .LT. N) GO TO 270 IF (IVMODE .GT. 0) GO TO 40 IV(NF00) = IV(NFGCAL) C C *** COMPUTE G FROM RMAT AND QTR *** C CALL DL7VML(P, V(G1), V(RMAT1), V(QTR1)) IV(1) = 2 IF (IVMODE .EQ. 0) GO TO 40 IF (N .LE. ND) GO TO 40 C C *** FINISH SPECIAL CASE HANDLING OF FIRST FUNCTION AND GRADIENT C Y1 = IV(Y) IV(1) = 1 CALL DG7LIT(D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) .NE. 2) GO TO 220 GO TO 40 C C *** MISC. DETAILS *** C C *** X IS OUT OF RANGE (OVERSIZE STEP) *** C 200 IV(TOOBIG) = 1 GO TO 40 C C *** BAD N, ND, OR P *** C 210 IV(1) = 66 GO TO 300 C C *** CONVERGENCE OBTAINED -- SEE WHETHER TO COMPUTE COVARIANCE *** C 220 IF (IV(COVMAT) .NE. 0) GO TO 290 IF (IV(REGD) .NE. 0) GO TO 290 C C *** SEE IF CHOLESKY FACTOR OF HESSIAN IS AVAILABLE *** C K = IV(FDH) IF (K .LE. 0) GO TO 280 IF (IV(RDREQ) .LE. 0) GO TO 290 C C *** COMPUTE REGRESSION DIAGNOSTICS AND DEFAULT COVARIANCE IF C DESIRED *** C I = 0 IF (MOD(IV(RDREQ),4) .GE. 2) I = 1 IF (MOD(IV(RDREQ),2) .EQ. 1 .AND. IABS(IV(COVREQ)) .LE. 1) I = I+2 IF (I .EQ. 0) GO TO 250 IV(MODE) = P + I IV(NGCALL) = IV(NGCALL) + 1 IV(NGCOV) = IV(NGCOV) + 1 IV(CNVCOD) = IV(1) IF (I .LT. 2) GO TO 230 L = IABS(IV(H)) CALL DV7SCP(LH, V(L), ZERO) 230 IV(NFCOV) = IV(NFCOV) + 1 IV(NFCALL) = IV(NFCALL) + 1 IV(NFGCAL) = IV(NFCALL) IV(1) = -1 GO TO 260 C 240 L = IV(LMAT) CALL DN2LRD(DR, IV, V(L), LH, LIV, LV, ND, NN, P, R, RD, V) IF (N2 .LT. N) GO TO 270 IF (N1 .GT. 1) GO TO 250 C C *** ENSURE WE CAN RESTART -- AND MAKE RETURN STATE OF DR C *** INDEPENDENT OF WHETHER REGRESSION DIAGNOSTICS ARE COMPUTED. C *** _USE_ STEP VECTOR (ALLOCATED BY DG7LIT) FOR SCRATCH. C RMAT1 = IV(RMAT) CALL DV7SCP(LH, V(RMAT1), ZERO) CALL DQ7RAD(NN, ND, P, R, .FALSE., V(RMAT1), DR, R) IV(NF1) = 0 C C *** FINISH COMPUTING COVARIANCE *** C 250 L = IV(LMAT) CALL DC7VFN(IV, V(L), LH, LIV, LV, N, P, V) GO TO 290 C C *** RETURN FOR MORE FUNCTION OR GRADIENT INFORMATION *** C 260 N2 = 0 270 N1 = N2 + 1 N2 = N2 + ND IF (N2 .GT. N) N2 = N GO TO 999 C C *** COME HERE FOR INDEFINITE FINITE-DIFFERENCE HESSIAN *** C 280 IV(COVMAT) = K IV(REGD) = K C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 290 G1 = IV(G) 300 CALL DITSUM(D, V(G1), IV, LIV, LV, P, V, X) IF (IV(1) .LE. 6 .AND. IV(RDREQ) .GT. 0) 1 CALL DN2CVP(IV, LIV, LV, P, V) C 999 RETURN C *** LAST LINE OF DRN2G FOLLOWS *** END PyBDSF-1.10.1/src/port3/drn2gb.f000066400000000000000000000222731420247104600160120ustar00rootroot00000000000000 SUBROUTINE DRN2GB(B, D, DR, IV, LIV, LV, N, ND, N1, N2, P, R, 1 RD, V, X) C C *** REVISED ITERATION DRIVER FOR NL2SOL WITH SIMPLE BOUNDS *** C INTEGER LIV, LV, N, ND, N1, N2, P INTEGER IV(LIV) DOUBLE PRECISION B(2,P), D(P), DR(ND,P), R(ND), RD(ND), V(LV), 1 X(P) C C-------------------------- PARAMETER USAGE -------------------------- C C B........ BOUNDS ON X. C D........ SCALE VECTOR. C DR....... DERIVATIVES OF R AT X. C IV....... INTEGER VALUES ARRAY. C LIV...... LENGTH OF IV... LIV MUST BE AT LEAST 4*P + 82. C LV....... LENGTH OF V... LV MUST BE AT LEAST 105 + P*(2*P+20). C N........ TOTAL NUMBER OF RESIDUALS. C ND....... MAX. NO. OF RESIDUALS PASSED ON ONE CALL. C N1....... LOWEST ROW INDEX FOR RESIDUALS SUPPLIED THIS TIME. C N2....... HIGHEST ROW INDEX FOR RESIDUALS SUPPLIED THIS TIME. C P........ NUMBER OF PARAMETERS (COMPONENTS OF X) BEING ESTIMATED. C R........ RESIDUALS. C V........ FLOATING-POINT VALUES ARRAY. C X........ PARAMETER VECTOR BEING ESTIMATED (INPUT = INITIAL GUESS, C OUTPUT = BEST VALUE FOUND). C C *** DISCUSSION *** C C THIS ROUTINE CARRIES OUT ITERATIONS FOR SOLVING NONLINEAR C LEAST SQUARES PROBLEMS. IT IS SIMILAR TO DRN2G, EXCEPT THAT C THIS ROUTINE ENFORCES THE BOUNDS B(1,I) .LE. X(I) .LE. B(2,I), C I = 1(1)P. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C+++++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++ C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C DOUBLE PRECISION DD7TPR, DV2NRM EXTERNAL DIVSET, DD7TPR,DD7UPD, DG7ITB,DITSUM,DL7VML, DQ7APL, 1 DQ7RAD, DR7TVM,DV7CPY, DV7SCP, DV2NRM C C DIVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C DD7TPR... COMPUTES INNER PRODUCT OF TWO VECTORS. C DD7UPD... UPDATES SCALE VECTOR D. C DG7ITB... PERFORMS BASIC MINIMIZATION ALGORITHM. C DITSUM.... PRINTS ITERATION SUMMARY, INFO ABOUT INITIAL AND FINAL X. C DL7VML.... COMPUTES L * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C DQ7APL... APPLIES QR TRANSFORMATIONS STORED BY DQ7RAD. C DQ7RAD.... ADDS A NEW BLOCK OF ROWS TO QR DECOMPOSITION. C DR7TVM... MULT. VECTOR BY TRANS. OF UPPER TRIANG. MATRIX FROM QR FACT. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C DV2NRM... RETURNS THE 2-NORM OF A VECTOR. C C C *** LOCAL VARIABLES *** C INTEGER G1, GI, I, IV1, IVMODE, JTOL1, L, LH, NN, QTR1, 1 RD1, RMAT1, YI, Y1 DOUBLE PRECISION T C DOUBLE PRECISION HALF, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER DINIT, DTYPE, DTINIT, D0INIT, F, G, JCN, JTOL, MODE, 1 NEXTV, NF0, NF00, NF1, NFCALL, NFCOV, NFGCAL, QTR, RDREQ, 1 REGD, RESTOR, RLIMIT, RMAT, TOOBIG, VNEED C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA DTYPE/16/, G/28/, JCN/66/, JTOL/59/, MODE/35/, NEXTV/47/, C 1 NF0/68/, NF00/81/, NF1/69/, NFCALL/6/, NFCOV/52/, NFGCAL/7/, C 2 QTR/77/, RDREQ/57/, RESTOR/9/, REGD/67/, RMAT/78/, TOOBIG/2/, C 3 VNEED/4/ C/7 PARAMETER (DTYPE=16, G=28, JCN=66, JTOL=59, MODE=35, NEXTV=47, 1 NF0=68, NF00=81, NF1=69, NFCALL=6, NFCOV=52, NFGCAL=7, 2 QTR=77, RDREQ=57, RESTOR=9, REGD=67, RMAT=78, TOOBIG=2, 3 VNEED=4) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DINIT/38/, DTINIT/39/, D0INIT/40/, F/10/, RLIMIT/46/ C/7 PARAMETER (DINIT=38, DTINIT=39, D0INIT=40, F=10, RLIMIT=46) C/ C/6 C DATA HALF/0.5D+0/, ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, ZERO=0.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C LH = P * (P+1) / 2 IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .GT. 2) GO TO 10 NN = N2 - N1 + 1 IV(RESTOR) = 0 I = IV1 + 4 IF (IV(TOOBIG) .EQ. 0) GO TO (150, 130, 150, 120, 120, 150), I IF (I .NE. 5) IV(1) = 2 GO TO 40 C C *** FRESH START OR RESTART -- CHECK INPUT INTEGERS *** C 10 IF (ND .LE. 0) GO TO 220 IF (P .LE. 0) GO TO 220 IF (N .LE. 0) GO TO 220 IF (IV1 .EQ. 14) GO TO 30 IF (IV1 .GT. 16) GO TO 270 IF (IV1 .LT. 12) GO TO 40 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 20 IV(VNEED) = IV(VNEED) + P*(P+15)/2 20 CALL DG7ITB(B, D, X, IV, LIV, LV, P, P, V, X, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(G) = IV(NEXTV) IV(JCN) = IV(G) + 2*P IV(RMAT) = IV(JCN) + P IV(QTR) = IV(RMAT) + LH IV(JTOL) = IV(QTR) + 2*P IV(NEXTV) = IV(JTOL) + 2*P C *** TURN OFF COVARIANCE COMPUTATION *** IV(RDREQ) = 0 IF (IV1 .EQ. 13) GO TO 999 C 30 JTOL1 = IV(JTOL) IF (V(DINIT) .GE. ZERO) CALL DV7SCP(P, D, V(DINIT)) IF (V(DTINIT) .GT. ZERO) CALL DV7SCP(P, V(JTOL1), V(DTINIT)) I = JTOL1 + P IF (V(D0INIT) .GT. ZERO) CALL DV7SCP(P, V(I), V(D0INIT)) IV(NF0) = 0 IV(NF1) = 0 IF (ND .GE. N) GO TO 40 C C *** SPECIAL CASE HANDLING OF FIRST FUNCTION AND GRADIENT EVALUATION C *** -- ASK FOR BOTH RESIDUAL AND JACOBIAN AT ONCE C G1 = IV(G) Y1 = G1 + P CALL DG7ITB(B, D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) .NE. 1) GO TO 260 V(F) = ZERO CALL DV7SCP(P, V(G1), ZERO) IV(1) = -1 QTR1 = IV(QTR) CALL DV7SCP(P, V(QTR1), ZERO) IV(REGD) = 0 RMAT1 = IV(RMAT) GO TO 100 C 40 G1 = IV(G) Y1 = G1 + P CALL DG7ITB(B, D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) - 2) 50, 60, 260 C 50 V(F) = ZERO IF (IV(NF1) .EQ. 0) GO TO 240 IF (IV(RESTOR) .NE. 2) GO TO 240 IV(NF0) = IV(NF1) CALL DV7CPY(N, RD, R) IV(REGD) = 0 GO TO 240 C 60 CALL DV7SCP(P, V(G1), ZERO) IF (IV(MODE) .GT. 0) GO TO 230 RMAT1 = IV(RMAT) QTR1 = IV(QTR) RD1 = QTR1 + P CALL DV7SCP(P, V(QTR1), ZERO) IV(REGD) = 0 IF (ND .LT. N) GO TO 90 IF (N1 .NE. 1) GO TO 90 IF (IV(MODE) .LT. 0) GO TO 100 IF (IV(NF1) .EQ. IV(NFGCAL)) GO TO 70 IF (IV(NF0) .NE. IV(NFGCAL)) GO TO 90 CALL DV7CPY(N, R, RD) GO TO 80 70 CALL DV7CPY(N, RD, R) 80 CALL DQ7APL(ND, N, P, DR, RD, 0) CALL DR7TVM(ND, MIN0(N,P), V(Y1), V(RD1), DR, RD) IV(REGD) = 0 GO TO 110 C 90 IV(1) = -2 IF (IV(MODE) .LT. 0) IV(1) = -3 100 CALL DV7SCP(P, V(Y1), ZERO) 110 CALL DV7SCP(LH, V(RMAT1), ZERO) GO TO 240 C C *** COMPUTE F(X) *** C 120 T = DV2NRM(NN, R) IF (T .GT. V(RLIMIT)) GO TO 210 V(F) = V(F) + HALF * T**2 IF (N2 .LT. N) GO TO 250 IF (N1 .EQ. 1) IV(NF1) = IV(NFCALL) GO TO 40 C C *** COMPUTE Y *** C 130 Y1 = IV(G) + P YI = Y1 DO 140 L = 1, P V(YI) = V(YI) + DD7TPR(NN, DR(1,L), R) YI = YI + 1 140 CONTINUE IF (N2 .LT. N) GO TO 250 IV(1) = 2 IF (N1 .GT. 1) IV(1) = -3 GO TO 240 C C *** COMPUTE GRADIENT INFORMATION *** C 150 G1 = IV(G) IVMODE = IV(MODE) IF (IVMODE .LT. 0) GO TO 170 IF (IVMODE .EQ. 0) GO TO 180 IV(1) = 2 C C *** COMPUTE GRADIENT ONLY (FOR _USE_ IN COVARIANCE COMPUTATION) *** C GI = G1 DO 160 L = 1, P V(GI) = V(GI) + DD7TPR(NN, R, DR(1,L)) GI = GI + 1 160 CONTINUE GO TO 200 C C *** COMPUTE INITIAL FUNCTION VALUE WHEN ND .LT. N *** C 170 IF (N .LE. ND) GO TO 180 T = DV2NRM(NN, R) IF (T .GT. V(RLIMIT)) GO TO 210 V(F) = V(F) + HALF * T**2 C C *** UPDATE D IF DESIRED *** C 180 IF (IV(DTYPE) .GT. 0) 1 CALL DD7UPD(D, DR, IV, LIV, LV, N, ND, NN, N2, P, V) C C *** COMPUTE RMAT AND QTR *** C QTR1 = IV(QTR) RMAT1 = IV(RMAT) CALL DQ7RAD(NN, ND, P, V(QTR1), .TRUE., V(RMAT1), DR, R) IV(NF1) = 0 IF (N1 .GT. 1) GO TO 200 IF (N2 .LT. N) GO TO 250 C C *** SAVE DIAGONAL OF R FOR COMPUTING Y LATER *** C RD1 = QTR1 + P L = RMAT1 - 1 DO 190 I = 1, P L = L + I V(RD1) = V(L) RD1 = RD1 + 1 190 CONTINUE C 200 IF (N2 .LT. N) GO TO 250 IF (IVMODE .GT. 0) GO TO 40 IV(NF00) = IV(NFGCAL) C C *** COMPUTE G FROM RMAT AND QTR *** C CALL DL7VML(P, V(G1), V(RMAT1), V(QTR1)) IV(1) = 2 IF (IVMODE .EQ. 0) GO TO 40 IF (N .LE. ND) GO TO 40 C C *** FINISH SPECIAL CASE HANDLING OF FIRST FUNCTION AND GRADIENT C Y1 = G1 + P IV(1) = 1 CALL DG7ITB(B, D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) .NE. 2) GO TO 260 GO TO 40 C C *** MISC. DETAILS *** C C *** X IS OUT OF RANGE (OVERSIZE STEP) *** C 210 IV(TOOBIG) = 1 GO TO 40 C C *** BAD N, ND, OR P *** C 220 IV(1) = 66 GO TO 270 C C *** RECORD EXTRA EVALUATIONS FOR FINITE-DIFFERENCE HESSIAN *** C 230 IV(NFCOV) = IV(NFCOV) + 1 IV(NFCALL) = IV(NFCALL) + 1 IV(NFGCAL) = IV(NFCALL) IV(1) = -1 C C *** RETURN FOR MORE FUNCTION OR GRADIENT INFORMATION *** C 240 N2 = 0 250 N1 = N2 + 1 N2 = N2 + ND IF (N2 .GT. N) N2 = N GO TO 999 C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 260 G1 = IV(G) 270 CALL DITSUM(D, V(G1), IV, LIV, LV, P, V, X) C 999 RETURN C *** LAST CARD OF DRN2GB FOLLOWS *** END PyBDSF-1.10.1/src/port3/drnsg.f000066400000000000000000000352531420247104600157530ustar00rootroot00000000000000 SUBROUTINE DRNSG(A, ALF, C, DA, IN, IV, L, L1, LA, LIV, LV, 1 N, NDA, P, V, Y) C C *** ITERATION DRIVER FOR SEPARABLE NONLINEAR LEAST SQUARES. C C *** PARAMETER DECLARATIONS *** C INTEGER L, L1, LA, LIV, LV, N, NDA, P INTEGER IN(2,NDA), IV(LIV) C DIMENSION UIPARM(*) DOUBLE PRECISION A(LA,L1), ALF(P), C(L), DA(LA,NDA), V(LV), Y(N) C C *** PURPOSE *** C C GIVEN A SET OF N OBSERVATIONS Y(1)....Y(N) OF A DEPENDENT VARIABLE C T(1)...T(N), DRNSG ATTEMPTS TO COMPUTE A LEAST SQUARES FIT C TO A FUNCTION ETA (THE MODEL) WHICH IS A LINEAR COMBINATION C C L C ETA(C,ALF,T) = SUM C * PHI(ALF,T) +PHI (ALF,T) C J=1 J J L+1 C C OF NONLINEAR FUNCTIONS PHI(J) DEPENDENT ON T AND ALF(1),...,ALF(P) C (.E.G. A SUM OF EXPONENTIALS OR GAUSSIANS). THAT IS, IT DETERMINES C NONLINEAR PARAMETERS ALF WHICH MINIMIZE C C 2 N 2 C NORM(RESIDUAL) = SUM (Y - ETA(C,ALF,T )). C I=1 I I C C THE (L+1)ST TERM IS OPTIONAL. C C C *** PARAMETERS *** C C A (IN) MATRIX PHI(ALF,T) OF THE MODEL. C ALF (I/O) NONLINEAR PARAMETERS. C INPUT = INITIAL GUESS, C OUTPUT = BEST ESTIMATE FOUND. C C (OUT) LINEAR PARAMETERS (ESTIMATED). C DA (IN) DERIVATIVES OF COLUMNS OF A WITH RESPECT TO COMPONENTS C OF ALF, AS SPECIFIED BY THE IN ARRAY... C IN (IN) WHEN DRNSG IS CALLED WITH IV(1) = 2 OR -2, THEN FOR C I = 1(1)NDA, COLUMN I OF DA IS THE PARTIAL C DERIVATIVE WITH RESPECT TO ALF(IN(1,I)) OF COLUMN C IN(2,I) OF A, UNLESS IV(1,I) IS NOT POSITIVE (IN C WHICH CASE COLUMN I OF DA IS IGNORED. IV(1) = -2 C MEANS THERE ARE MORE COLUMNS OF DA TO COME AND C DRNSG SHOULD RETURN FOR THEM. C IV (I/O) INTEGER PARAMETER AND SCRATCH VECTOR. DRNSG RETURNS C WITH IV(1) = 1 WHEN IT WANTS A TO BE EVALUATED AT C ALF AND WITH IV(1) = 2 WHEN IT WANTS DA TO BE C EVALUATED AT ALF. WHEN CALLED WITH IV(1) = -2 C (AFTER A RETURN WITH IV(1) = 2), DRNSG RETURNS C WITH IV(1) = -2 TO GET MORE COLUMNS OF DA. C L (IN) NUMBER OF LINEAR PARAMETERS TO BE ESTIMATED. C L1 (IN) L+1 IF PHI(L+1) IS IN THE MODEL, L IF NOT. C LA (IN) LEAD DIMENSION OF A. MUST BE AT LEAST N. C LIV (IN) LENGTH OF IV. MUST BE AT LEAST 110 + L + P. C LV (IN) LENGTH OF V. MUST BE AT LEAST C 105 + 2*N + JLEN + L*(L+3)/2 + P*(2*P + 17), C WHERE JLEN = (L+P)*(N+L+P+1), UNLESS NEITHER A C COVARIANCE MATRIX NOR REGRESSION DIAGNOSTICS ARE C REQUESTED, IN WHICH CASE JLEN = N*P. C N (IN) NUMBER OF OBSERVATIONS. C NDA (IN) NUMBER OF COLUMNS IN DA AND IN. C P (IN) NUMBER OF NONLINEAR PARAMETERS TO BE ESTIMATED. C V (I/O) FLOATING-POINT PARAMETER AND SCRATCH VECTOR. C IF A COVARIANCE ESTIMATE IS REQUESTED, IT IS FOR C (ALF,C) -- NONLINEAR PARAMETERS ORDERED FIRST, C FOLLOWED BY LINEAR PARAMETERS. C Y (IN) RIGHT-HAND SIDE VECTOR. C C C *** EXTERNAL SUBROUTINES *** C DOUBLE PRECISION DD7TPR, DL7SVX, DL7SVN, DR7MDC EXTERNAL DC7VFN,DIVSET, DD7TPR,DITSUM, DL7ITV,DL7SRT, DL7SVX, 1 DL7SVN, DN2CVP, DN2LRD, DN2RDP, DRN2G, DQ7APL,DQ7RAD, 2 DQ7RFH, DR7MDC, DS7CPR,DV2AXY,DV7CPY,DV7PRM, DV7SCL, 3 DV7SCP C C DC7VFN... FINISHES COVARIANCE COMPUTATION. C DIVSET.... SUPPLIES DEFAULT PARAMETER VALUES. C DD7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C DITSUM.... PRINTS ITERATION SUMMARY, INITIAL AND FINAL ALF. C DL7ITV... APPLIES INVERSE-TRANSPOSE OF COMPACT LOWER TRIANG. MATRIX. C DL7SRT.... COMPUTES (PARTIAL) CHOLESKY FACTORIZATION. C DL7SVX... ESTIMATES LARGEST SING. VALUE OF LOWER TRIANG. MATRIX. C DL7SVN... ESTIMATES SMALLEST SING. VALUE OF LOWER TRIANG. MATRIX. C DN2CVP... PRINTS COVARIANCE MATRIX. C DN2LRD... COMPUTES COVARIANCE AND REGRESSION DIAGNOSTICS. C DN2RDP... PRINTS REGRESSION DIAGNOSTICS. C DRN2G... UNDERLYING NONLINEAR LEAST-SQUARES SOLVER. C DQ7APL... APPLIES HOUSEHOLDER TRANSFORMS STORED BY DQ7RFH. C DQ7RFH.... COMPUTES QR FACT. VIA HOUSEHOLDER TRANSFORMS WITH PIVOTING. C DQ7RAD.... QR FACT., NO PIVOTING. C DR7MDC... RETURNS MACHINE-DEP. CONSTANTS. C DS7CPR... PRINTS LINEAR PARAMETERS AT SOLUTION. C DV2AXY.... ADDS MULTIPLE OF ONE VECTOR TO ANOTHER. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7PRM.... PERMUTES A VECTOR. C DV7SCL... SCALES AND COPIES ONE VECTOR TO ANOTHER. C DV7SCP... SETS ALL COMPONENTS OF A VECTOR TO A SCALAR. C C *** LOCAL VARIABLES *** C LOGICAL NOCOV INTEGER AR1, CSAVE1, D1, DR1, DR1L, DRI, DRI1, FDH0, HSAVE, I, I1, 1 IPIV1, IER, IV1, J1, JLEN, K, LH, LI, LL1O2, MD, N1, N2, 2 NML, NRAN, PP, PP1, R1, R1L, RD1, TEMP1 DOUBLE PRECISION SINGTL, T DOUBLE PRECISION MACHEP, NEGONE, SNGFAC, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AR, CNVCOD, COVMAT, COVREQ, CSAVE, CVRQSV, D, FDH, H, 1 IERS, IPIVS, IV1SAV, IVNEED, J, LMAT, MODE, NEXTIV, NEXTV, 2 NFCALL, NFCOV, NFGCAL, NGCALL, NGCOV, PERM, R, RCOND, 3 RDREQ, RDRQSV, REGD, REGD0, RESTOR, TOOBIG, VNEED C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AR/110/, CNVCOD/55/, COVMAT/26/, COVREQ/15/, CSAVE/105/, C 1 CVRQSV/106/, D/27/, FDH/74/, H/56/, IERS/108/, IPIVS/109/, C 2 IV1SAV/104/, IVNEED/3/, J/70/, LMAT/42/, MODE/35/, C 3 NEXTIV/46/, NEXTV/47/, NFCALL/6/, NFCOV/52/, NFGCAL/7/, C 4 NGCALL/30/, NGCOV/53/, PERM/58/, R/61/, RCOND/53/, RDREQ/57/, C 5 RDRQSV/107/, REGD/67/, REGD0/82/, RESTOR/9/, TOOBIG/2/, C 6 VNEED/4/ C/7 PARAMETER (AR=110, CNVCOD=55, COVMAT=26, COVREQ=15, CSAVE=105, 1 CVRQSV=106, D=27, FDH=74, H=56, IERS=108, IPIVS=109, 2 IV1SAV=104, IVNEED=3, J=70, LMAT=42, MODE=35, 3 NEXTIV=46, NEXTV=47, NFCALL=6, NFCOV=52, NFGCAL=7, 4 NGCALL=30, NGCOV=53, PERM=58, R=61, RCOND=53, RDREQ=57, 5 RDRQSV=107, REGD=67, REGD0=82, RESTOR=9, TOOBIG=2, 6 VNEED=4) C/ DATA MACHEP/-1.D+0/, NEGONE/-1.D+0/, SNGFAC/1.D+2/, ZERO/0.D+0/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C C IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) N1 = 1 NML = N IV1 = IV(1) IF (IV1 .LE. 2) GO TO 20 C C *** CHECK INPUT INTEGERS *** C IF (P .LE. 0) GO TO 370 IF (L .LT. 0) GO TO 370 IF (N .LE. L) GO TO 370 IF (LA .LT. N) GO TO 370 IF (IV1 .LT. 12) GO TO 20 IF (IV1 .EQ. 14) GO TO 20 IF (IV1 .EQ. 12) IV(1) = 13 C C *** FRESH START -- COMPUTE STORAGE REQUIREMENTS *** C IF (IV(1) .GT. 16) GO TO 370 LL1O2 = L*(L+1)/2 JLEN = N*P I = L + P IF (IV(RDREQ) .GT. 0 .AND. IV(COVREQ) .NE. 0) JLEN = I*(N + I + 1) IF (IV(1) .NE. 13) GO TO 10 IV(IVNEED) = IV(IVNEED) + L IV(VNEED) = IV(VNEED) + P + 2*N + JLEN + LL1O2 + L 10 IF (IV(PERM) .LE. AR) IV(PERM) = AR + 1 CALL DRN2G(V, V, IV, LIV, LV, N, N, N1, NML, P, V, V, V, ALF) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IPIVS) = IV(NEXTIV) IV(NEXTIV) = IV(NEXTIV) + L IV(D) = IV(NEXTV) IV(REGD0) = IV(D) + P IV(AR) = IV(REGD0) + N IV(CSAVE) = IV(AR) + LL1O2 IV(J) = IV(CSAVE) + L IV(R) = IV(J) + JLEN IV(NEXTV) = IV(R) + N IV(IERS) = 0 IF (IV1 .EQ. 13) GO TO 999 C C *** SET POINTERS INTO IV AND V *** C 20 AR1 = IV(AR) D1 = IV(D) DR1 = IV(J) DR1L = DR1 + L R1 = IV(R) R1L = R1 + L RD1 = IV(REGD0) CSAVE1 = IV(CSAVE) NML = N - L IF (IV1 .LE. 2) GO TO 50 C C *** IF F.D. HESSIAN WILL BE NEEDED (FOR COVARIANCE OR REG. C *** DIAGNOSTICS), HAVE DRN2G COMPUTE ONLY THE PART CORRESP. C *** TO ALF WITH C FIXED... C IF (L .LE. 0) GO TO 30 IV(CVRQSV) = IV(COVREQ) IF (IABS(IV(COVREQ)) .GE. 3) IV(COVREQ) = 0 IV(RDRQSV) = IV(RDREQ) IF (IV(RDREQ) .GT. 0) IV(RDREQ) = -1 C 30 N2 = NML CALL DRN2G(V(D1), V(DR1L), IV, LIV, LV, NML, N, N1, N2, P, 1 V(R1L), V(RD1), V, ALF) IF (IABS(IV(RESTOR)-2) .EQ. 1 .AND. L .GT. 0) 1 CALL DV7CPY(L, C, V(CSAVE1)) IV1 = IV(1) IF (IV1-2) 40, 150, 230 C C *** NEW FUNCTION VALUE (RESIDUAL) NEEDED *** C 40 IV(IV1SAV) = IV(1) IV(1) = IABS(IV1) IF (IV(RESTOR) .EQ. 2 .AND. L .GT. 0) CALL DV7CPY(L, V(CSAVE1), C) GO TO 999 C C *** COMPUTE NEW RESIDUAL OR GRADIENT *** C 50 IV(1) = IV(IV1SAV) MD = IV(MODE) IF (MD .LE. 0) GO TO 60 NML = N DR1L = DR1 R1L = R1 60 IF (IV(TOOBIG) .NE. 0) GO TO 30 IF (IABS(IV1) .EQ. 2) GO TO 170 C C *** COMPUTE NEW RESIDUAL *** C IF (L1 .LE. L) CALL DV7CPY(N, V(R1), Y) IF (L1 .GT. L) CALL DV2AXY(N, V(R1), NEGONE, A(1,L1), Y) IF (MD .GT. 0) GO TO 120 IER = 0 IF (L .LE. 0) GO TO 110 LL1O2 = L * (L + 1) / 2 IPIV1 = IV(IPIVS) CALL DQ7RFH(IER, IV(IPIV1), N, LA, 0, L, A, V(AR1), LL1O2, C) C C *** DETERMINE NUMERICAL RANK OF A *** C IF (MACHEP .LE. ZERO) MACHEP = DR7MDC(3) SINGTL = SNGFAC * FLOAT(MAX0(L,N)) * MACHEP K = L IF (IER .NE. 0) K = IER - 1 70 IF (K .LE. 0) GO TO 90 T = DL7SVX(K, V(AR1), C, C) IF (T .GT. ZERO) T = DL7SVN(K, V(AR1), C, C) / T IF (T .GT. SINGTL) GO TO 80 K = K - 1 GO TO 70 C C *** RECORD RANK IN IV(IERS)... IV(IERS) = 0 MEANS FULL RANK, C *** IV(IERS) .GT. 0 MEANS RANK IV(IERS) - 1. C 80 IF (K .GE. L) GO TO 100 90 IER = K + 1 CALL DV7SCP(L-K, C(K+1), ZERO) 100 IV(IERS) = IER IF (K .LE. 0) GO TO 110 C C *** APPLY HOUSEHOLDER TRANSFORMATONS TO RESIDUALS... C CALL DQ7APL(LA, N, K, A, V(R1), IER) C C *** COMPUTING C NOW MAY SAVE A FUNCTION EVALUATION AT C *** THE LAST ITERATION. C CALL DL7ITV(K, C, V(AR1), V(R1)) CALL DV7PRM(L, IV(IPIV1), C) C 110 IF(IV(1) .LT. 2) GO TO 220 GO TO 999 C C C *** RESIDUAL COMPUTATION FOR F.D. HESSIAN *** C 120 IF (L .LE. 0) GO TO 140 DO 130 I = 1, L 130 CALL DV2AXY(N, V(R1), -C(I), A(1,I), V(R1)) 140 IF (IV(1) .GT. 0) GO TO 30 IV(1) = 2 GO TO 160 C C *** NEW GRADIENT (JACOBIAN) NEEDED *** C 150 IV(IV1SAV) = IV1 IF (IV(NFGCAL) .NE. IV(NFCALL)) IV(1) = 1 160 CALL DV7SCP(N*P, V(DR1), ZERO) GO TO 999 C C *** COMPUTE NEW JACOBIAN *** C 170 NOCOV = MD .LE. P .OR. IABS(IV(COVREQ)) .GE. 3 FDH0 = DR1 + N*(P+L) IF (NDA .LE. 0) GO TO 370 DO 180 I = 1, NDA I1 = IN(1,I) - 1 IF (I1 .LT. 0) GO TO 180 J1 = IN(2,I) K = DR1 + I1*N T = NEGONE IF (J1 .LE. L) T = -C(J1) CALL DV2AXY(N, V(K), T, DA(1,I), V(K)) IF (NOCOV) GO TO 180 IF (J1 .GT. L) GO TO 180 C *** ADD IN (L,P) PORTION OF SECOND-ORDER PART OF HESSIAN C *** FOR COVARIANCE OR REG. DIAG. COMPUTATIONS... J1 = J1 + P K = FDH0 + J1*(J1-1)/2 + I1 V(K) = V(K) - DD7TPR(N, V(R1), DA(1,I)) 180 CONTINUE IF (IV1 .EQ. 2) GO TO 190 IV(1) = IV1 GO TO 999 190 IF (L .LE. 0) GO TO 30 IF (MD .GT. P) GO TO 240 IF (MD .GT. 0) GO TO 30 K = DR1 IER = IV(IERS) NRAN = L IF (IER .GT. 0) NRAN = IER - 1 IF (NRAN .LE. 0) GO TO 210 DO 200 I = 1, P CALL DQ7APL(LA, N, NRAN, A, V(K), IER) K = K + N 200 CONTINUE 210 CALL DV7CPY(L, V(CSAVE1), C) 220 IF (IER .EQ. 0) GO TO 30 C C *** ADJUST SUBSCRIPTS DESCRIBING R AND DR... C NRAN = IER - 1 DR1L = DR1 + NRAN NML = N - NRAN R1L = R1 + NRAN GO TO 30 C C *** CONVERGENCE OR LIMIT REACHED *** C 230 IF (L .LE. 0) GO TO 350 IV(COVREQ) = IV(CVRQSV) IV(RDREQ) = IV(RDRQSV) IF (IV(1) .GT. 6) GO TO 360 IF (MOD(IV(RDREQ),4) .EQ. 0) GO TO 360 IF (IV(FDH) .LE. 0 .AND. IABS(IV(COVREQ)) .LT. 3) GO TO 360 IF (IV(REGD) .GT. 0) GO TO 360 IF (IV(COVMAT) .GT. 0) GO TO 360 C C *** PREPARE TO FINISH COMPUTING COVARIANCE MATRIX AND REG. DIAG. *** C PP = L + P I = 0 IF (MOD(IV(RDREQ),4) .GE. 2) I = 1 IF (MOD(IV(RDREQ),2) .EQ. 1 .AND. IABS(IV(COVREQ)) .EQ. 1) I = I+2 IV(MODE) = PP + I I = DR1 + N*PP K = P * (P + 1) / 2 I1 = IV(LMAT) CALL DV7CPY(K, V(I), V(I1)) I = I + K CALL DV7SCP(PP*(PP+1)/2 - K, V(I), ZERO) IV(NFCOV) = IV(NFCOV) + 1 IV(NFCALL) = IV(NFCALL) + 1 IV(NFGCAL) = IV(NFCALL) IV(CNVCOD) = IV(1) IV(IV1SAV) = -1 IV(1) = 1 IV(NGCALL) = IV(NGCALL) + 1 IV(NGCOV) = IV(NGCOV) + 1 GO TO 999 C C *** FINISH COVARIANCE COMPUTATION *** C 240 I = DR1 + N*P DO 250 I1 = 1, L CALL DV7SCL(N, V(I), NEGONE, A(1,I1)) I = I + N 250 CONTINUE PP = L + P HSAVE = IV(H) K = DR1 + N*PP LH = PP * (PP + 1) / 2 IF (IABS(IV(COVREQ)) .LT. 3) GO TO 270 I = IV(MODE) - 4 IF (I .GE. PP) GO TO 260 CALL DV7SCP(LH, V(K), ZERO) CALL DQ7RAD(N, N, PP, V, .FALSE., V(K), V(DR1), V) IV(MODE) = I + 8 IV(1) = 2 IV(NGCALL) = IV(NGCALL) + 1 IV(NGCOV) = IV(NGCOV) + 1 GO TO 160 C 260 IV(MODE) = I GO TO 300 C 270 PP1 = P + 1 DRI = DR1 + N*P LI = K + P*PP1/2 DO 290 I = PP1, PP DRI1 = DR1 DO 280 I1 = 1, I V(LI) = V(LI) + DD7TPR(N, V(DRI), V(DRI1)) LI = LI + 1 DRI1 = DRI1 + N 280 CONTINUE DRI = DRI + N 290 CONTINUE CALL DL7SRT(PP1, PP, V(K), V(K), I) IF (I .NE. 0) GO TO 310 300 TEMP1 = K + LH T = DL7SVN(PP, V(K), V(TEMP1), V(TEMP1)) IF (T .LE. ZERO) GO TO 310 T = T / DL7SVX(PP, V(K), V(TEMP1), V(TEMP1)) V(RCOND) = T IF (T .GT. DR7MDC(4)) GO TO 320 310 IV(REGD) = -1 IV(COVMAT) = -1 IV(FDH) = -1 GO TO 340 320 IV(H) = TEMP1 IV(FDH) = IABS(HSAVE) IF (IV(MODE) - PP .LT. 2) GO TO 330 I = IV(H) CALL DV7SCP(LH, V(I), ZERO) 330 CALL DN2LRD(V(DR1), IV, V(K), LH, LIV, LV, N, N, PP, V(R1), 1 V(RD1), V) 340 CALL DC7VFN(IV, V(K), LH, LIV, LV, N, PP, V) IV(H) = HSAVE C 350 IF (IV(REGD) .EQ. 1) IV(REGD) = RD1 360 IF (IV(1) .LE. 11) CALL DS7CPR(C, IV, L, LIV) IF (IV(1) .GT. 6) GO TO 999 CALL DN2CVP(IV, LIV, LV, P+L, V) CALL DN2RDP(IV, LIV, LV, N, V(RD1), V) GO TO 999 C 370 IV(1) = 66 CALL DITSUM(V, V, IV, LIV, LV, P, V, ALF) C 999 RETURN C C *** LAST CARD OF DRNSG FOLLOWS *** END PyBDSF-1.10.1/src/port3/drnsgb.f000066400000000000000000000241321420247104600161070ustar00rootroot00000000000000 SUBROUTINE DRNSGB(A, ALF, B, C, DA, IN, IV, L, L1, LA, LIV, LV, 1 N, NDA, P, V, Y) C C *** ITERATION DRIVER FOR SEPARABLE NONLINEAR LEAST SQUARES, C *** WITH SIMPLE BOUNDS ON THE NONLINEAR VARIABLES. C C *** PARAMETER DECLARATIONS *** C INTEGER L, L1, LA, LIV, LV, N, NDA, P INTEGER IN(2,NDA), IV(LIV) C DIMENSION UIPARM(*) DOUBLE PRECISION A(LA,L1), ALF(P), B(2,P), C(L), DA(LA,NDA), 1 V(LV), Y(N) C C *** PURPOSE *** C C GIVEN A SET OF N OBSERVATIONS Y(1)....Y(N) OF A DEPENDENT VARIABLE C T(1)...T(N), DRNSGB ATTEMPTS TO COMPUTE A LEAST SQUARES FIT C TO A FUNCTION ETA (THE MODEL) WHICH IS A LINEAR COMBINATION C C L C ETA(C,ALF,T) = SUM C * PHI(ALF,T) +PHI (ALF,T) C J=1 J J L+1 C C OF NONLINEAR FUNCTIONS PHI(J) DEPENDENT ON T AND ALF(1),...,ALF(P) C (.E.G. A SUM OF EXPONENTIALS OR GAUSSIANS). THAT IS, IT DETERMINES C NONLINEAR PARAMETERS ALF WHICH MINIMIZE C C 2 N 2 C NORM(RESIDUAL) = SUM (Y - ETA(C,ALF,T )) , C I=1 I I C C SUBJECT TO THE SIMPLE BOUND CONSTRAINTS C B(1,I) .LE. ALF(I) .LE. B(2,I), I = 1(1)P. C C THE (L+1)ST TERM IS OPTIONAL. C C C *** PARAMETERS *** C C A (IN) MATRIX PHI(ALF,T) OF THE MODEL. C ALF (I/O) NONLINEAR PARAMETERS. C INPUT = INITIAL GUESS, C OUTPUT = BEST ESTIMATE FOUND. C C (OUT) LINEAR PARAMETERS (ESTIMATED). C DA (IN) DERIVATIVES OF COLUMNS OF A WITH RESPECT TO COMPONENTS C OF ALF, AS SPECIFIED BY THE IN ARRAY... C IN (IN) WHEN DRNSGB IS CALLED WITH IV(1) = 2 OR -2, THEN FOR C I = 1(1)NDA, COLUMN I OF DA IS THE PARTIAL C DERIVATIVE WITH RESPECT TO ALF(IN(1,I)) OF COLUMN C IN(2,I) OF A, UNLESS IV(1,I) IS NOT POSITIVE (IN C WHICH CASE COLUMN I OF DA IS IGNORED. IV(1) = -2 C MEANS THERE ARE MORE COLUMNS OF DA TO COME AND C DRNSGB SHOULD RETURN FOR THEM. C IV (I/O) INTEGER PARAMETER AND SCRATCH VECTOR. DRNSGB RETURNS C WITH IV(1) = 1 WHEN IT WANTS A TO BE EVALUATED AT C ALF AND WITH IV(1) = 2 WHEN IT WANTS DA TO BE C EVALUATED AT ALF. WHEN CALLED WITH IV(1) = -2 C (AFTER A RETURN WITH IV(1) = 2), DRNSGB RETURNS C WITH IV(1) = -2 TO GET MORE COLUMNS OF DA. C L (IN) NUMBER OF LINEAR PARAMETERS TO BE ESTIMATED. C L1 (IN) L+1 IF PHI(L+1) IS IN THE MODEL, L IF NOT. C LA (IN) LEAD DIMENSION OF A. MUST BE AT LEAST N. C LIV (IN) LENGTH OF IV. MUST BE AT LEAST 110 + L + 4*P. C LV (IN) LENGTH OF V. MUST BE AT LEAST C 105 + 2*N + L*(L+3)/2 + P*(2*P + 21 + N). C N (IN) NUMBER OF OBSERVATIONS. C NDA (IN) NUMBER OF COLUMNS IN DA AND IN. C P (IN) NUMBER OF NONLINEAR PARAMETERS TO BE ESTIMATED. C V (I/O) FLOATING-POINT PARAMETER AND SCRATCH VECTOR. C Y (IN) RIGHT-HAND SIDE VECTOR. C C C *** EXTERNAL SUBROUTINES *** C DOUBLE PRECISION DL7SVX, DL7SVN, DR7MDC EXTERNAL DIVSET,DITSUM, DL7ITV, DL7SVX, DL7SVN, DRN2GB, DQ7APL, 1 DQ7RFH, DR7MDC, DS7CPR,DV2AXY,DV7CPY,DV7PRM, DV7SCP C C DIVSET.... SUPPLIES DEFAULT PARAMETER VALUES. C DITSUM.... PRINTS ITERATION SUMMARY, INITIAL AND FINAL ALF. C DL7ITV... APPLIES INVERSE-TRANSPOSE OF COMPACT LOWER TRIANG. MATRIX. C DL7SVX... ESTIMATES LARGEST SING. VALUE OF LOWER TRIANG. MATRIX. C DL7SVN... ESTIMATES SMALLEST SING. VALUE OF LOWER TRIANG. MATRIX. C DRN2GB... UNDERLYING NONLINEAR LEAST-SQUARES SOLVER. C DQ7APL... APPLIES HOUSEHOLDER TRANSFORMS STORED BY DQ7RFH. C DQ7RFH.... COMPUTES QR FACT. VIA HOUSEHOLDER TRANSFORMS WITH PIVOTING. C DR7MDC... RETURNS MACHINE-DEP. CONSTANTS. C DS7CPR... PRINTS LINEAR PARAMETERS AT SOLUTION. C DV2AXY.... ADDS MULTIPLE OF ONE VECTOR TO ANOTHER. C DV7CPY.... COPIES ONE VECTOR TO ANOTHER. C DV7PRM.... PERMUTES VECTOR. C DV7SCL... SCALES AND COPIES ONE VECTOR TO ANOTHER. C C *** LOCAL VARIABLES *** C INTEGER AR1, CSAVE1, D1, DR1, DR1L, I, I1, 1 IPIV1, IER, IV1, J1, JLEN, K, LL1O2, MD, N1, N2, 2 NML, NRAN, R1, R1L, RD1 DOUBLE PRECISION SINGTL, T DOUBLE PRECISION MACHEP, NEGONE, SNGFAC, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AR, CSAVE, D, IERS, IPIVS, IV1SAV, 2 IVNEED, J, MODE, NEXTIV, NEXTV, 2 NFCALL, NFGCAL, PERM, R, 3 REGD, REGD0, RESTOR, TOOBIG, VNEED C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AR/110/, CSAVE/105/, D/27/, IERS/108/, IPIVS/109/, C 1 IV1SAV/104/, IVNEED/3/, J/70/, MODE/35/, NEXTIV/46/, C 2 NEXTV/47/, NFCALL/6/, NFGCAL/7/, PERM/58/, R/61/, REGD/67/, C 3 REGD0/82/, RESTOR/9/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (AR=110, CSAVE=105, D=27, IERS=108, IPIVS=109, 1 IV1SAV=104, IVNEED=3, J=70, MODE=35, NEXTIV=46, 2 NEXTV=47, NFCALL=6, NFGCAL=7, PERM=58, R=61, REGD=67, 3 REGD0=82, RESTOR=9, TOOBIG=2, VNEED=4) C/ DATA MACHEP/-1.D+0/, NEGONE/-1.D+0/, SNGFAC/1.D+2/, ZERO/0.D+0/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C C IF (IV(1) .EQ. 0) CALL DIVSET(1, IV, LIV, LV, V) N1 = 1 NML = N IV1 = IV(1) IF (IV1 .LE. 2) GO TO 20 C C *** CHECK INPUT INTEGERS *** C IF (P .LE. 0) GO TO 240 IF (L .LT. 0) GO TO 240 IF (N .LE. L) GO TO 240 IF (LA .LT. N) GO TO 240 IF (IV1 .LT. 12) GO TO 20 IF (IV1 .EQ. 14) GO TO 20 IF (IV1 .EQ. 12) IV(1) = 13 C C *** FRESH START -- COMPUTE STORAGE REQUIREMENTS *** C IF (IV(1) .GT. 16) GO TO 240 LL1O2 = L*(L+1)/2 JLEN = N*P I = L + P IF (IV(1) .NE. 13) GO TO 10 IV(IVNEED) = IV(IVNEED) + L IV(VNEED) = IV(VNEED) + P + 2*N + JLEN + LL1O2 + L 10 IF (IV(PERM) .LE. AR) IV(PERM) = AR + 1 CALL DRN2GB(B, V, V, IV, LIV, LV, N, N, N1, NML, P, V, V, V, ALF) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IPIVS) = IV(NEXTIV) IV(NEXTIV) = IV(NEXTIV) + L IV(D) = IV(NEXTV) IV(REGD0) = IV(D) + P IV(AR) = IV(REGD0) + N IV(CSAVE) = IV(AR) + LL1O2 IV(J) = IV(CSAVE) + L IV(R) = IV(J) + JLEN IV(NEXTV) = IV(R) + N IV(IERS) = 0 IF (IV1 .EQ. 13) GO TO 999 C C *** SET POINTERS INTO IV AND V *** C 20 AR1 = IV(AR) D1 = IV(D) DR1 = IV(J) DR1L = DR1 + L R1 = IV(R) R1L = R1 + L RD1 = IV(REGD0) CSAVE1 = IV(CSAVE) NML = N - L IF (IV1 .LE. 2) GO TO 50 C 30 N2 = NML CALL DRN2GB(B, V(D1), V(DR1L), IV, LIV, LV, NML, N, N1, N2, P, 1 V(R1L), V(RD1), V, ALF) IF (IABS(IV(RESTOR)-2) .EQ. 1 .AND. L .GT. 0) 1 CALL DV7CPY(L, C, V(CSAVE1)) IV1 = IV(1) IF (IV1-2) 40, 150, 230 C C *** NEW FUNCTION VALUE (RESIDUAL) NEEDED *** C 40 IV(IV1SAV) = IV(1) IV(1) = IABS(IV1) IF (IV(RESTOR) .EQ. 2 .AND. L .GT. 0) CALL DV7CPY(L, V(CSAVE1), C) GO TO 999 C C *** COMPUTE NEW RESIDUAL OR GRADIENT *** C 50 IV(1) = IV(IV1SAV) MD = IV(MODE) IF (MD .LE. 0) GO TO 60 NML = N DR1L = DR1 R1L = R1 60 IF (IV(TOOBIG) .NE. 0) GO TO 30 IF (IABS(IV1) .EQ. 2) GO TO 170 C C *** COMPUTE NEW RESIDUAL *** C IF (L1 .LE. L) CALL DV7CPY(N, V(R1), Y) IF (L1 .GT. L) CALL DV2AXY(N, V(R1), NEGONE, A(1,L1), Y) IF (MD .GT. 0) GO TO 120 IER = 0 IF (L .LE. 0) GO TO 110 LL1O2 = L * (L + 1) / 2 IPIV1 = IV(IPIVS) CALL DQ7RFH(IER, IV(IPIV1), N, LA, 0, L, A, V(AR1), LL1O2, C) C C *** DETERMINE NUMERICAL RANK OF A *** C IF (MACHEP .LE. ZERO) MACHEP = DR7MDC(3) SINGTL = SNGFAC * FLOAT(MAX0(L,N)) * MACHEP K = L IF (IER .NE. 0) K = IER - 1 70 IF (K .LE. 0) GO TO 90 T = DL7SVX(K, V(AR1), C, C) IF (T .GT. ZERO) T = DL7SVN(K, V(AR1), C, C) / T IF (T .GT. SINGTL) GO TO 80 K = K - 1 GO TO 70 C C *** RECORD RANK IN IV(IERS)... IV(IERS) = 0 MEANS FULL RANK, C *** IV(IERS) .GT. 0 MEANS RANK IV(IERS) - 1. C 80 IF (K .GE. L) GO TO 100 90 IER = K + 1 CALL DV7SCP(L-K, C(K+1), ZERO) 100 IV(IERS) = IER IF (K .LE. 0) GO TO 110 C C *** APPLY HOUSEHOLDER TRANSFORMATONS TO RESIDUALS... C CALL DQ7APL(LA, N, K, A, V(R1), IER) C C *** COMPUTING C NOW MAY SAVE A FUNCTION EVALUATION AT C *** THE LAST ITERATION. C CALL DL7ITV(K, C, V(AR1), V(R1)) CALL DV7PRM(L, IV(IPIV1), C) C 110 IF(IV(1) .LT. 2) GO TO 220 GO TO 999 C C C *** RESIDUAL COMPUTATION FOR F.D. HESSIAN *** C 120 IF (L .LE. 0) GO TO 140 DO 130 I = 1, L 130 CALL DV2AXY(N, V(R1), -C(I), A(1,I), V(R1)) 140 IF (IV(1) .GT. 0) GO TO 30 IV(1) = 2 GO TO 160 C C *** NEW GRADIENT (JACOBIAN) NEEDED *** C 150 IV(IV1SAV) = IV1 IF (IV(NFGCAL) .NE. IV(NFCALL)) IV(1) = 1 160 CALL DV7SCP(N*P, V(DR1), ZERO) GO TO 999 C C *** COMPUTE NEW JACOBIAN *** C 170 IF (NDA .LE. 0) GO TO 240 DO 180 I = 1, NDA I1 = IN(1,I) - 1 IF (I1 .LT. 0) GO TO 180 J1 = IN(2,I) K = DR1 + I1*N T = NEGONE IF (J1 .LE. L) T = -C(J1) CALL DV2AXY(N, V(K), T, DA(1,I), V(K)) 180 CONTINUE IF (IV1 .EQ. 2) GO TO 190 IV(1) = IV1 GO TO 999 190 IF (L .LE. 0) GO TO 30 IF (MD .GT. 0) GO TO 30 K = DR1 IER = IV(IERS) NRAN = L IF (IER .GT. 0) NRAN = IER - 1 IF (NRAN .LE. 0) GO TO 210 DO 200 I = 1, P CALL DQ7APL(LA, N, NRAN, A, V(K), IER) K = K + N 200 CONTINUE 210 CALL DV7CPY(L, V(CSAVE1), C) 220 IF (IER .EQ. 0) GO TO 30 C C *** ADJUST SUBSCRIPTS DESCRIBING R AND DR... C NRAN = IER - 1 DR1L = DR1 + NRAN NML = N - NRAN R1L = R1 + NRAN GO TO 30 C C *** CONVERGENCE OR LIMIT REACHED *** C 230 IF (IV(REGD) .EQ. 1) IV(REGD) = RD1 IF (IV(1) .LE. 11) CALL DS7CPR(C, IV, L, LIV) GO TO 999 C 240 IV(1) = 66 CALL DITSUM(V, V, IV, LIV, LV, P, V, ALF) C 999 RETURN C C *** LAST CARD OF DRNSGB FOLLOWS *** END PyBDSF-1.10.1/src/port3/ds3grd.f000066400000000000000000000221641420247104600160210ustar00rootroot00000000000000 SUBROUTINE DS3GRD(ALPHA, B, D, ETA0, FX, G, IRC, P, W, X) C C *** COMPUTE FINITE DIFFERENCE GRADIENT BY STWEART*S SCHEME *** C C *** PARAMETERS *** C INTEGER IRC, P DOUBLE PRECISION ALPHA(P), B(2,P), D(P), ETA0, FX, G(P), W(6), 1 X(P) C C....................................................................... C C *** PURPOSE *** C C THIS SUBROUTINE USES AN EMBELLISHED FORM OF THE FINITE-DIFFER- C ENCE SCHEME PROPOSED BY STEWART (REF. 1) TO APPROXIMATE THE C GRADIENT OF THE FUNCTION F(X), WHOSE VALUES ARE SUPPLIED BY C REVERSE COMMUNICATION. C C *** PARAMETER DESCRIPTION *** C C ALPHA IN (APPROXIMATE) DIAGONAL ELEMENTS OF THE HESSIAN OF F(X). C B IN ARRAY OF SIMPLE LOWER AND UPPER BOUNDS ON X. X MUST C SATISFY B(1,I) .LE. X(I) .LE. B(2,I), I = 1(1)P. C FOR ALL I WITH B(1,I) .GE. B(2,I), DS3GRD SIMPLY C SETS G(I) TO 0. C D IN SCALE VECTOR SUCH THAT D(I)*X(I), I = 1,...,P, ARE IN C COMPARABLE UNITS. C ETA0 IN ESTIMATED BOUND ON RELATIVE ERROR IN THE FUNCTION VALUE... C (TRUE VALUE) = (COMPUTED VALUE)*(1+E), WHERE C ABS(E) .LE. ETA0. C FX I/O ON INPUT, FX MUST BE THE COMPUTED VALUE OF F(X). ON C OUTPUT WITH IRC = 0, FX HAS BEEN RESTORED TO ITS ORIGINAL C VALUE, THE ONE IT HAD WHEN DS3GRD WAS LAST CALLED WITH C IRC = 0. C G I/O ON INPUT WITH IRC = 0, G SHOULD CONTAIN AN APPROXIMATION C TO THE GRADIENT OF F NEAR X, E.G., THE GRADIENT AT THE C PREVIOUS ITERATE. WHEN DS3GRD RETURNS WITH IRC = 0, G IS C THE DESIRED FINITE-DIFFERENCE APPROXIMATION TO THE C GRADIENT AT X. C IRC I/O INPUT/RETURN CODE... BEFORE THE VERY FIRST CALL ON DS3GRD, C THE CALLER MUST SET IRC TO 0. WHENEVER DS3GRD RETURNS A C NONZERO VALUE (OF AT MOST P) FOR IRC, IT HAS PERTURBED C SOME COMPONENT OF X... THE CALLER SHOULD EVALUATE F(X) C AND CALL DS3GRD AGAIN WITH FX = F(X). IF B PREVENTS C ESTIMATING G(I) I.E., IF THERE IS AN I WITH C B(1,I) .LT. B(2,I) BUT WITH B(1,I) SO CLOSE TO B(2,I) C THAT THE FINITE-DIFFERENCING STEPS CANNOT BE CHOSEN, C THEN DS3GRD RETURNS WITH IRC .GT. P. C P IN THE NUMBER OF VARIABLES (COMPONENTS OF X) ON WHICH F C DEPENDS. C X I/O ON INPUT WITH IRC = 0, X IS THE POINT AT WHICH THE C GRADIENT OF F IS DESIRED. ON OUTPUT WITH IRC NONZERO, X C IS THE POINT AT WHICH F SHOULD BE EVALUATED. ON OUTPUT C WITH IRC = 0, X HAS BEEN RESTORED TO ITS ORIGINAL VALUE C (THE ONE IT HAD WHEN DS3GRD WAS LAST CALLED WITH IRC = 0) C AND G CONTAINS THE DESIRED GRADIENT APPROXIMATION. C W I/O WORK VECTOR OF LENGTH 6 IN WHICH DS3GRD SAVES CERTAIN C QUANTITIES WHILE THE CALLER IS EVALUATING F(X) AT A C PERTURBED X. C C *** APPLICATION AND USAGE RESTRICTIONS *** C C THIS ROUTINE IS INTENDED FOR _USE_ WITH QUASI-NEWTON ROUTINES C FOR UNCONSTRAINED MINIMIZATION (IN WHICH CASE ALPHA COMES FROM C THE DIAGONAL OF THE QUASI-NEWTON HESSIAN APPROXIMATION). C C *** ALGORITHM NOTES *** C C THIS CODE DEPARTS FROM THE SCHEME PROPOSED BY STEWART (REF. 1) C IN ITS GUARDING AGAINST OVERLY LARGE OR SMALL STEP SIZES AND ITS C HANDLING OF SPECIAL CASES (SUCH AS ZERO COMPONENTS OF ALPHA OR G). C C *** REFERENCES *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C C *** HISTORY *** C C DESIGNED AND CODED BY DAVID M. GAY (SUMMER 1977/SUMMER 1980). C C *** GENERAL *** C C THIS ROUTINE WAS PREPARED IN CONNECTION WITH WORK SUPPORTED BY C THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS MCS76-00324 AND C MCS-7906671. C C....................................................................... C C ***** EXTERNAL FUNCTION ***** C DOUBLE PRECISION DR7MDC EXTERNAL DR7MDC C DR7MDC... RETURNS MACHINE-DEPENDENT CONSTANTS. C C ***** INTRINSIC FUNCTIONS ***** C/+ DOUBLE PRECISION DSQRT C/ C ***** LOCAL VARIABLES ***** C LOGICAL HIT INTEGER FH, FX0, HSAVE, I, XISAVE DOUBLE PRECISION AAI, AFX, AFXETA, AGI, ALPHAI, AXI, AXIBAR, 1 DISCON, ETA, GI, H, HMIN, XI, XIH DOUBLE PRECISION C2000, FOUR, HMAX0, HMIN0, H0, MACHEP, ONE, P002, 1 THREE, TWO, ZERO C C/6 C DATA C2000/2.0D+3/, FOUR/4.0D+0/, HMAX0/0.02D+0/, HMIN0/5.0D+1/, C 1 ONE/1.0D+0/, P002/0.002D+0/, THREE/3.0D+0/, C 2 TWO/2.0D+0/, ZERO/0.0D+0/ C/7 PARAMETER (C2000=2.0D+3, FOUR=4.0D+0, HMAX0=0.02D+0, HMIN0=5.0D+1, 1 ONE=1.0D+0, P002=0.002D+0, THREE=3.0D+0, 2 TWO=2.0D+0, ZERO=0.0D+0) C/ C/6 C DATA FH/3/, FX0/4/, HSAVE/5/, XISAVE/6/ C/7 PARAMETER (FH=3, FX0=4, HSAVE=5, XISAVE=6) C/ C C--------------------------------- BODY ------------------------------ C IF (IRC) 80, 10, 210 C C *** FRESH START -- GET MACHINE-DEPENDENT CONSTANTS *** C C STORE MACHEP IN W(1) AND H0 IN W(2), WHERE MACHEP IS THE UNIT C ROUNDOFF (THE SMALLEST POSITIVE NUMBER SUCH THAT C 1 + MACHEP .GT. 1 AND 1 - MACHEP .LT. 1), AND H0 IS THE C SQUARE-ROOT OF MACHEP. C 10 W(1) = DR7MDC(3) W(2) = DSQRT(W(1)) C W(FX0) = FX C C *** INCREMENT I AND START COMPUTING G(I) *** C 20 I = IABS(IRC) + 1 IF (I .GT. P) GO TO 220 IRC = I IF (B(1,I) .LT. B(2,I)) GO TO 30 G(I) = ZERO GO TO 20 30 AFX = DABS(W(FX0)) MACHEP = W(1) H0 = W(2) HMIN = HMIN0 * MACHEP XI = X(I) W(XISAVE) = XI AXI = DABS(XI) AXIBAR = DMAX1(AXI, ONE/D(I)) GI = G(I) AGI = DABS(GI) ETA = DABS(ETA0) IF (AFX .GT. ZERO) ETA = DMAX1(ETA, AGI*AXI*MACHEP/AFX) ALPHAI = ALPHA(I) IF (ALPHAI .EQ. ZERO) GO TO 130 IF (GI .EQ. ZERO .OR. FX .EQ. ZERO) GO TO 140 AFXETA = AFX*ETA AAI = DABS(ALPHAI) C C *** COMPUTE H = STEWART*S FORWARD-DIFFERENCE STEP SIZE. C IF (GI**2 .LE. AFXETA*AAI) GO TO 40 H = TWO*DSQRT(AFXETA/AAI) H = H*(ONE - AAI*H/(THREE*AAI*H + FOUR*AGI)) GO TO 50 C40 H = TWO*(AFXETA*AGI/(AAI**2))**(ONE/THREE) 40 H = TWO * (AFXETA*AGI)**(ONE/THREE) * AAI**(-TWO/THREE) H = H*(ONE - TWO*AGI/(THREE*AAI*H + FOUR*AGI)) C C *** ENSURE THAT H IS NOT INSIGNIFICANTLY SMALL *** C 50 H = DMAX1(H, HMIN*AXIBAR) C C *** _USE_ FORWARD DIFFERENCE IF BOUND ON TRUNCATION ERROR IS AT C *** MOST 10**-3. C IF (AAI*H .LE. P002*AGI) GO TO 120 C C *** COMPUTE H = STEWART*S STEP FOR CENTRAL DIFFERENCE. C DISCON = C2000*AFXETA H = DISCON/(AGI + DSQRT(GI**2 + AAI*DISCON)) C C *** ENSURE THAT H IS NEITHER TOO SMALL NOR TOO BIG *** C H = DMAX1(H, HMIN*AXIBAR) IF (H .GE. HMAX0*AXIBAR) H = AXIBAR * H0**(TWO/THREE) C C *** COMPUTE CENTRAL DIFFERENCE *** C XIH = XI + H IF (XI - H .LT. B(1,I)) GO TO 60 IRC = -I IF (XIH .LE. B(2,I)) GO TO 200 H = -H XIH = XI + H IF (XI + TWO*H .LT. B(1,I)) GO TO 190 GO TO 70 60 IF (XI + TWO*H .GT. B(2,I)) GO TO 190 C *** MUST DO OFF-SIDE CENTRAL DIFFERENCE *** 70 IRC = -(I + P) GO TO 200 C 80 I = -IRC IF (I .LE. P) GO TO 100 I = I - P IF (I .GT. P) GO TO 90 W(FH) = FX H = TWO * W(HSAVE) XIH = W(XISAVE) + H IRC = IRC - P GO TO 200 C C *** FINISH OFF-SIDE CENTRAL DIFFERENCE *** C 90 I = I - P G(I) = (FOUR*W(FH) - FX - THREE*W(FX0)) / W(HSAVE) IRC = I X(I) = W(XISAVE) GO TO 20 C 100 H = -W(HSAVE) IF (H .GT. ZERO) GO TO 110 W(FH) = FX XIH = W(XISAVE) + H GO TO 200 C 110 G(I) = (W(FH) - FX) / (TWO * H) X(I) = W(XISAVE) GO TO 20 C C *** COMPUTE FORWARD DIFFERENCES IN VARIOUS CASES *** C 120 IF (H .GE. HMAX0*AXIBAR) H = H0 * AXIBAR IF (ALPHAI*GI .LT. ZERO) H = -H GO TO 150 130 H = AXIBAR GO TO 150 140 H = H0 * AXIBAR C 150 HIT = .FALSE. 160 XIH = XI + H IF (H .GT. ZERO) GO TO 170 IF (XIH .GE. B(1,I)) GO TO 200 GO TO 180 170 IF (XIH .LE. B(2,I)) GO TO 200 180 IF (HIT) GO TO 190 HIT = .TRUE. H = -H GO TO 160 C C *** ERROR RETURN... 190 IRC = I + P GO TO 230 C C *** RETURN FOR NEW FUNCTION VALUE... 200 X(I) = XIH W(HSAVE) = H GO TO 999 C C *** COMPUTE ACTUAL FORWARD DIFFERENCE *** C 210 G(IRC) = (FX - W(FX0)) / W(HSAVE) X(IRC) = W(XISAVE) GO TO 20 C C *** RESTORE FX AND INDICATE THAT G HAS BEEN COMPUTED *** C 220 IRC = 0 230 FX = W(FX0) C 999 RETURN C *** LAST LINE OF DS3GRD FOLLOWS *** END PyBDSF-1.10.1/src/port3/ds7bqn.f000066400000000000000000000103021420247104600160200ustar00rootroot00000000000000 SUBROUTINE DS7BQN(B, D, DST, IPIV, IPIV1, IPIV2, KB, L, LV, NS, 1 P, P1, STEP, TD, TG, V, W, X, X0) C C *** COMPUTE BOUNDED MODIFIED NEWTON STEP *** C INTEGER KB, LV, NS, P, P1 INTEGER IPIV(P), IPIV1(P), IPIV2(P) DOUBLE PRECISION B(2,P), D(P), DST(P), L(1), 1 STEP(P), TD(P), TG(P), V(LV), W(P), X(P), 2 X0(P) C DIMENSION L(P*(P+1)/2) C DOUBLE PRECISION DD7TPR, DR7MDC, DV2NRM EXTERNAL DD7TPR, I7SHFT, DL7ITV, DL7IVM, DQ7RSH, DR7MDC, DV2NRM, 1 DV2AXY,DV7CPY, DV7IPR, DV7SCP, DV7SHF C C *** LOCAL VARIABLES *** C INTEGER I, J, K, P0, P1M1 DOUBLE PRECISION ALPHA, DST0, DST1, DSTMAX, DSTMIN, DX, GTS, T, 1 TI, T1, XI DOUBLE PRECISION FUDGE, HALF, MEPS2, ONE, TWO, ZERO C C *** V SUBSCRIPTS *** C INTEGER DSTNRM, GTSTEP, PHMNFC, PHMXFC, PREDUC, RADIUS, STPPAR C C/6 C DATA DSTNRM/2/, GTSTEP/4/, PHMNFC/20/, PHMXFC/21/, PREDUC/7/, C 1 RADIUS/8/, STPPAR/5/ C/7 PARAMETER (DSTNRM=2, GTSTEP=4, PHMNFC=20, PHMXFC=21, PREDUC=7, 1 RADIUS=8, STPPAR=5) SAVE MEPS2 C/ C DATA FUDGE/1.0001D+0/, HALF/0.5D+0/, MEPS2/0.D+0/, 1 ONE/1.0D+0/, TWO/2.D+0/, ZERO/0.D+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C DSTMAX = FUDGE * (ONE + V(PHMXFC)) * V(RADIUS) DSTMIN = (ONE + V(PHMNFC)) * V(RADIUS) DST1 = ZERO IF (MEPS2 .LE. ZERO) MEPS2 = TWO * DR7MDC(3) P0 = P1 NS = 0 DO 10 I = 1, P IPIV1(I) = I IPIV2(I) = I 10 CONTINUE DO 20 I = 1, P1 20 W(I) = -STEP(I) * TD(I) ALPHA = DABS(V(STPPAR)) V(PREDUC) = ZERO GTS = -V(GTSTEP) IF (KB .LT. 0) CALL DV7SCP(P, DST, ZERO) KB = 1 C C *** -W = D TIMES RESTRICTED NEWTON STEP FROM X + DST/D. C C *** FIND T SUCH THAT X - T*W IS STILL FEASIBLE. C 30 T = ONE K = 0 DO 60 I = 1, P1 J = IPIV(I) DX = W(I) / D(J) XI = X(J) - DX IF (XI .LT. B(1,J)) GO TO 40 IF (XI .LE. B(2,J)) GO TO 60 TI = ( X(J) - B(2,J) ) / DX K = I GO TO 50 40 TI = ( X(J) - B(1,J) ) / DX K = -I 50 IF (T .LE. TI) GO TO 60 T = TI 60 CONTINUE C IF (P .GT. P1) CALL DV7CPY(P-P1, STEP(P1+1), DST(P1+1)) CALL DV2AXY(P1, STEP, -T, W, DST) DST0 = DST1 DST1 = DV2NRM(P, STEP) C C *** CHECK FOR OVERSIZE STEP *** C IF (DST1 .LE. DSTMAX) GO TO 80 IF (P1 .GE. P0) GO TO 70 IF (DST0 .LT. DSTMIN) KB = 0 GO TO 110 C 70 K = 0 C C *** UPDATE DST, TG, AND V(PREDUC) *** C 80 V(DSTNRM) = DST1 CALL DV7CPY(P1, DST, STEP) T1 = ONE - T DO 90 I = 1, P1 90 TG(I) = T1 * TG(I) IF (ALPHA .GT. ZERO) CALL DV2AXY(P1, TG, T*ALPHA, W, TG) V(PREDUC) = V(PREDUC) + T*((ONE - HALF*T)*GTS + 1 HALF*ALPHA*T*DD7TPR(P1,W,W)) IF (K .EQ. 0) GO TO 110 C C *** PERMUTE L, ETC. IF NECESSARY *** C P1M1 = P1 - 1 J = IABS(K) IF (J .EQ. P1) GO TO 100 NS = NS + 1 IPIV2(P1) = J CALL DQ7RSH(J, P1, .FALSE., TG, L, W) CALL I7SHFT(P1, J, IPIV) CALL I7SHFT(P1, J, IPIV1) CALL DV7SHF(P1, J, TG) CALL DV7SHF(P1, J, DST) 100 IF (K .LT. 0) IPIV(P1) = -IPIV(P1) P1 = P1M1 IF (P1 .LE. 0) GO TO 110 CALL DL7IVM(P1, W, L, TG) GTS = DD7TPR(P1, W, W) CALL DL7ITV(P1, W, L, W) GO TO 30 C C *** UNSCALE STEP *** C 110 DO 120 I = 1, P J = IABS(IPIV(I)) STEP(J) = DST(I) / D(J) 120 CONTINUE C C *** FUDGE STEP TO ENSURE THAT IT FORCES APPROPRIATE COMPONENTS C *** TO THEIR BOUNDS *** C IF (P1 .GE. P0) GO TO 150 K = P1 + 1 DO 140 I = K, P0 J = IPIV(I) T = MEPS2 IF (J .GT. 0) GO TO 130 T = -T J = -J IPIV(I) = J 130 T = T * DMAX1(DABS(X(J)), DABS(X0(J))) STEP(J) = STEP(J) + T 140 CONTINUE C 150 CALL DV2AXY(P, X, ONE, STEP, X0) IF (NS .GT. 0) CALL DV7IPR(P0, IPIV1, TD) 999 RETURN C *** LAST LINE OF DS7BQN FOLLOWS *** END PyBDSF-1.10.1/src/port3/ds7cpr.f000066400000000000000000000011451420247104600160310ustar00rootroot00000000000000 SUBROUTINE DS7CPR(C, IV, L, LIV) C C *** PRINT C FOR DNSG (ETC.) *** C INTEGER L, LIV INTEGER IV(LIV) DOUBLE PRECISION C(L) C INTEGER I, PU C INTEGER PRUNIT, SOLPRT C C/6 C DATA PRUNIT/21/, SOLPRT/22/ C/7 PARAMETER (PRUNIT=21, SOLPRT=22) C/ C *** BODY *** C IF (IV(1) .GT. 11) GO TO 999 IF (IV(SOLPRT) .EQ. 0) GO TO 999 PU = IV(PRUNIT) IF (PU .EQ. 0) GO TO 999 IF (L .GT. 0) WRITE(PU,10) (I, C(I), I = 1, L) 10 FORMAT(/21H LINEAR PARAMETERS...//(1X,I5,D16.6)) C 999 RETURN C *** LAST LINE OF DS7CPR FOLLOWS *** END PyBDSF-1.10.1/src/port3/ds7dmp.f000066400000000000000000000014371420247104600160310ustar00rootroot00000000000000 SUBROUTINE DS7DMP(N, X, Y, Z, K) C C *** SET X = DIAG(Z)**K * Y * DIAG(Z)**K C *** FOR X, Y = COMPACTLY STORED LOWER TRIANG. MATRICES C *** K = 1 OR -1. C INTEGER N, K C/6S C DOUBLE PRECISION X(1), Y(1), Z(N) C/7S DOUBLE PRECISION X(*), Y(*), Z(N) C/ INTEGER I, J, L DOUBLE PRECISION ONE, T DATA ONE/1.D+0/ C L = 1 IF (K .GE. 0) GO TO 30 DO 20 I = 1, N T = ONE / Z(I) DO 10 J = 1, I X(L) = T * Y(L) / Z(J) L = L + 1 10 CONTINUE 20 CONTINUE GO TO 999 C 30 DO 50 I = 1, N T = Z(I) DO 40 J = 1, I X(L) = T * Y(L) * Z(J) L = L + 1 40 CONTINUE 50 CONTINUE 999 RETURN C *** LAST CARD OF DS7DMP FOLLOWS *** END PyBDSF-1.10.1/src/port3/ds7grd.f000066400000000000000000000165441420247104600160320ustar00rootroot00000000000000 SUBROUTINE DS7GRD (ALPHA, D, ETA0, FX, G, IRC, N, W, X) C C *** COMPUTE FINITE DIFFERENCE GRADIENT BY STWEART*S SCHEME *** C C *** PARAMETERS *** C INTEGER IRC, N DOUBLE PRECISION ALPHA(N), D(N), ETA0, FX, G(N), W(6), X(N) C C....................................................................... C C *** PURPOSE *** C C THIS SUBROUTINE USES AN EMBELLISHED FORM OF THE FINITE-DIFFER- C ENCE SCHEME PROPOSED BY STEWART (REF. 1) TO APPROXIMATE THE C GRADIENT OF THE FUNCTION F(X), WHOSE VALUES ARE SUPPLIED BY C REVERSE COMMUNICATION. C C *** PARAMETER DESCRIPTION *** C C ALPHA IN (APPROXIMATE) DIAGONAL ELEMENTS OF THE HESSIAN OF F(X). C D IN SCALE VECTOR SUCH THAT D(I)*X(I), I = 1,...,N, ARE IN C COMPARABLE UNITS. C ETA0 IN ESTIMATED BOUND ON RELATIVE ERROR IN THE FUNCTION VALUE... C (TRUE VALUE) = (COMPUTED VALUE)*(1+E), WHERE C ABS(E) .LE. ETA0. C FX I/O ON INPUT, FX MUST BE THE COMPUTED VALUE OF F(X). ON C OUTPUT WITH IRC = 0, FX HAS BEEN RESTORED TO ITS ORIGINAL C VALUE, THE ONE IT HAD WHEN DS7GRD WAS LAST CALLED WITH C IRC = 0. C G I/O ON INPUT WITH IRC = 0, G SHOULD CONTAIN AN APPROXIMATION C TO THE GRADIENT OF F NEAR X, E.G., THE GRADIENT AT THE C PREVIOUS ITERATE. WHEN DS7GRD RETURNS WITH IRC = 0, G IS C THE DESIRED FINITE-DIFFERENCE APPROXIMATION TO THE C GRADIENT AT X. C IRC I/O INPUT/RETURN CODE... BEFORE THE VERY FIRST CALL ON DS7GRD, C THE CALLER MUST SET IRC TO 0. WHENEVER DS7GRD RETURNS A C NONZERO VALUE FOR IRC, IT HAS PERTURBED SOME COMPONENT OF C X... THE CALLER SHOULD EVALUATE F(X) AND CALL DS7GRD C AGAIN WITH FX = F(X). C N IN THE NUMBER OF VARIABLES (COMPONENTS OF X) ON WHICH F C DEPENDS. C X I/O ON INPUT WITH IRC = 0, X IS THE POINT AT WHICH THE C GRADIENT OF F IS DESIRED. ON OUTPUT WITH IRC NONZERO, X C IS THE POINT AT WHICH F SHOULD BE EVALUATED. ON OUTPUT C WITH IRC = 0, X HAS BEEN RESTORED TO ITS ORIGINAL VALUE C (THE ONE IT HAD WHEN DS7GRD WAS LAST CALLED WITH IRC = 0) C AND G CONTAINS THE DESIRED GRADIENT APPROXIMATION. C W I/O WORK VECTOR OF LENGTH 6 IN WHICH DS7GRD SAVES CERTAIN C QUANTITIES WHILE THE CALLER IS EVALUATING F(X) AT A C PERTURBED X. C C *** APPLICATION AND USAGE RESTRICTIONS *** C C THIS ROUTINE IS INTENDED FOR _USE_ WITH QUASI-NEWTON ROUTINES C FOR UNCONSTRAINED MINIMIZATION (IN WHICH CASE ALPHA COMES FROM C THE DIAGONAL OF THE QUASI-NEWTON HESSIAN APPROXIMATION). C C *** ALGORITHM NOTES *** C C THIS CODE DEPARTS FROM THE SCHEME PROPOSED BY STEWART (REF. 1) C IN ITS GUARDING AGAINST OVERLY LARGE OR SMALL STEP SIZES AND ITS C HANDLING OF SPECIAL CASES (SUCH AS ZERO COMPONENTS OF ALPHA OR G). C C *** REFERENCES *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C C *** HISTORY *** C C DESIGNED AND CODED BY DAVID M. GAY (SUMMER 1977/SUMMER 1980). C C *** GENERAL *** C C THIS ROUTINE WAS PREPARED IN CONNECTION WITH WORK SUPPORTED BY C THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS MCS76-00324 AND C MCS-7906671. C C....................................................................... C C ***** EXTERNAL FUNCTION ***** C DOUBLE PRECISION DR7MDC EXTERNAL DR7MDC C DR7MDC... RETURNS MACHINE-DEPENDENT CONSTANTS. C C ***** INTRINSIC FUNCTIONS ***** C/+ DOUBLE PRECISION DSQRT C/ C ***** LOCAL VARIABLES ***** C INTEGER FH, FX0, HSAVE, I, XISAVE DOUBLE PRECISION AAI, AFX, AFXETA, AGI, ALPHAI, AXI, AXIBAR, 1 DISCON, ETA, GI, H, HMIN DOUBLE PRECISION C2000, FOUR, HMAX0, HMIN0, H0, MACHEP, ONE, P002, 1 THREE, TWO, ZERO C C/6 C DATA C2000/2.0D+3/, FOUR/4.0D+0/, HMAX0/0.02D+0/, HMIN0/5.0D+1/, C 1 ONE/1.0D+0/, P002/0.002D+0/, THREE/3.0D+0/, C 2 TWO/2.0D+0/, ZERO/0.0D+0/ C/7 PARAMETER (C2000=2.0D+3, FOUR=4.0D+0, HMAX0=0.02D+0, HMIN0=5.0D+1, 1 ONE=1.0D+0, P002=0.002D+0, THREE=3.0D+0, 2 TWO=2.0D+0, ZERO=0.0D+0) C/ C/6 C DATA FH/3/, FX0/4/, HSAVE/5/, XISAVE/6/ C/7 PARAMETER (FH=3, FX0=4, HSAVE=5, XISAVE=6) C/ C C--------------------------------- BODY ------------------------------ C IF (IRC) 140, 100, 210 C C *** FRESH START -- GET MACHINE-DEPENDENT CONSTANTS *** C C STORE MACHEP IN W(1) AND H0 IN W(2), WHERE MACHEP IS THE UNIT C ROUNDOFF (THE SMALLEST POSITIVE NUMBER SUCH THAT C 1 + MACHEP .GT. 1 AND 1 - MACHEP .LT. 1), AND H0 IS THE C SQUARE-ROOT OF MACHEP. C 100 W(1) = DR7MDC(3) W(2) = DSQRT(W(1)) C W(FX0) = FX C C *** INCREMENT I AND START COMPUTING G(I) *** C 110 I = IABS(IRC) + 1 IF (I .GT. N) GO TO 300 IRC = I AFX = DABS(W(FX0)) MACHEP = W(1) H0 = W(2) HMIN = HMIN0 * MACHEP W(XISAVE) = X(I) AXI = DABS(X(I)) AXIBAR = DMAX1(AXI, ONE/D(I)) GI = G(I) AGI = DABS(GI) ETA = DABS(ETA0) IF (AFX .GT. ZERO) ETA = DMAX1(ETA, AGI*AXI*MACHEP/AFX) ALPHAI = ALPHA(I) IF (ALPHAI .EQ. ZERO) GO TO 170 IF (GI .EQ. ZERO .OR. FX .EQ. ZERO) GO TO 180 AFXETA = AFX*ETA AAI = DABS(ALPHAI) C C *** COMPUTE H = STEWART*S FORWARD-DIFFERENCE STEP SIZE. C IF (GI**2 .LE. AFXETA*AAI) GO TO 120 H = TWO*DSQRT(AFXETA/AAI) H = H*(ONE - AAI*H/(THREE*AAI*H + FOUR*AGI)) GO TO 130 C120 H = TWO*(AFXETA*AGI/(AAI**2))**(ONE/THREE) 120 H = TWO * (AFXETA*AGI)**(ONE/THREE) * AAI**(-TWO/THREE) H = H*(ONE - TWO*AGI/(THREE*AAI*H + FOUR*AGI)) C C *** ENSURE THAT H IS NOT INSIGNIFICANTLY SMALL *** C 130 H = DMAX1(H, HMIN*AXIBAR) C C *** _USE_ FORWARD DIFFERENCE IF BOUND ON TRUNCATION ERROR IS AT C *** MOST 10**-3. C IF (AAI*H .LE. P002*AGI) GO TO 160 C C *** COMPUTE H = STEWART*S STEP FOR CENTRAL DIFFERENCE. C DISCON = C2000*AFXETA H = DISCON/(AGI + DSQRT(GI**2 + AAI*DISCON)) C C *** ENSURE THAT H IS NEITHER TOO SMALL NOR TOO BIG *** C H = DMAX1(H, HMIN*AXIBAR) IF (H .GE. HMAX0*AXIBAR) H = AXIBAR * H0**(TWO/THREE) C C *** COMPUTE CENTRAL DIFFERENCE *** C IRC = -I GO TO 200 C 140 H = -W(HSAVE) I = IABS(IRC) IF (H .GT. ZERO) GO TO 150 W(FH) = FX GO TO 200 C 150 G(I) = (W(FH) - FX) / (TWO * H) X(I) = W(XISAVE) GO TO 110 C C *** COMPUTE FORWARD DIFFERENCES IN VARIOUS CASES *** C 160 IF (H .GE. HMAX0*AXIBAR) H = H0 * AXIBAR IF (ALPHAI*GI .LT. ZERO) H = -H GO TO 200 170 H = AXIBAR GO TO 200 180 H = H0 * AXIBAR C 200 X(I) = W(XISAVE) + H W(HSAVE) = H GO TO 999 C C *** COMPUTE ACTUAL FORWARD DIFFERENCE *** C 210 G(IRC) = (FX - W(FX0)) / W(HSAVE) X(IRC) = W(XISAVE) GO TO 110 C C *** RESTORE FX AND INDICATE THAT G HAS BEEN COMPUTED *** C 300 FX = W(FX0) IRC = 0 C 999 RETURN C *** LAST CARD OF DS7GRD FOLLOWS *** END PyBDSF-1.10.1/src/port3/ds7ipr.f000066400000000000000000000035541420247104600160450ustar00rootroot00000000000000 SUBROUTINE DS7IPR(P, IP, H) C C APPLY THE PERMUTATION DEFINED BY IP TO THE ROWS AND COLUMNS OF THE C P X P SYMMETRIC MATRIX WHOSE LOWER TRIANGLE IS STORED COMPACTLY IN H. C THUS H.OUTPUT(I,J) = H.INPUT(IP(I), IP(J)). C INTEGER P INTEGER IP(P) DOUBLE PRECISION H(1) C INTEGER I, J, J1, JM, K, K1, KK, KM, KMJ, L, M DOUBLE PRECISION T C C *** BODY *** C DO 90 I = 1, P J = IP(I) IF (J .EQ. I) GO TO 90 IP(I) = IABS(J) IF (J .LT. 0) GO TO 90 K = I 10 J1 = J K1 = K IF (J .LE. K) GO TO 20 J1 = K K1 = J 20 KMJ = K1-J1 L = J1-1 JM = J1*L/2 KM = K1*(K1-1)/2 IF (L .LE. 0) GO TO 40 DO 30 M = 1, L JM = JM+1 T = H(JM) KM = KM+1 H(JM) = H(KM) H(KM) = T 30 CONTINUE 40 KM = KM+1 KK = KM+KMJ JM = JM+1 T = H(JM) H(JM) = H(KK) H(KK) = T J1 = L L = KMJ-1 IF (L .LE. 0) GO TO 60 DO 50 M = 1, L JM = JM+J1+M T = H(JM) KM = KM+1 H(JM) = H(KM) H(KM) = T 50 CONTINUE 60 IF (K1 .GE. P) GO TO 80 L = P-K1 K1 = K1-1 KM = KK DO 70 M = 1, L KM = KM+K1+M JM = KM-KMJ T = H(JM) H(JM) = H(KM) H(KM) = T 70 CONTINUE 80 K = J J = IP(K) IP(K) = -J IF (J .GT. I) GO TO 10 90 CONTINUE 999 RETURN C *** LAST LINE OF DS7IPR FOLLOWS *** END PyBDSF-1.10.1/src/port3/ds7lup.f000066400000000000000000000032321420247104600160440ustar00rootroot00000000000000 SUBROUTINE DS7LUP(A, COSMIN, P, SIZE, STEP, U, W, WCHMTD, WSCALE, 1 Y) C C *** UPDATE SYMMETRIC A SO THAT A * STEP = Y *** C *** (LOWER TRIANGLE OF A STORED ROWWISE *** C C *** PARAMETER DECLARATIONS *** C INTEGER P DOUBLE PRECISION A(1), COSMIN, SIZE, STEP(P), U(P), W(P), 1 WCHMTD(P), WSCALE, Y(P) C DIMENSION A(P*(P+1)/2) C C *** LOCAL VARIABLES *** C INTEGER I, J, K DOUBLE PRECISION DENMIN, SDOTWM, T, UI, WI C C *** CONSTANTS *** DOUBLE PRECISION HALF, ONE, ZERO C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C DOUBLE PRECISION DD7TPR, DV2NRM EXTERNAL DD7TPR, DS7LVM, DV2NRM C C/6 C DATA HALF/0.5D+0/, ONE/1.D+0/, ZERO/0.D+0/ C/7 PARAMETER (HALF=0.5D+0, ONE=1.D+0, ZERO=0.D+0) C/ C C----------------------------------------------------------------------- C SDOTWM = DD7TPR(P, STEP, WCHMTD) DENMIN = COSMIN * DV2NRM(P,STEP) * DV2NRM(P,WCHMTD) WSCALE = ONE IF (DENMIN .NE. ZERO) WSCALE = DMIN1(ONE, DABS(SDOTWM/DENMIN)) T = ZERO IF (SDOTWM .NE. ZERO) T = WSCALE / SDOTWM DO 10 I = 1, P 10 W(I) = T * WCHMTD(I) CALL DS7LVM(P, U, A, STEP) T = HALF * (SIZE * DD7TPR(P, STEP, U) - DD7TPR(P, STEP, Y)) DO 20 I = 1, P 20 U(I) = T*W(I) + Y(I) - SIZE*U(I) C C *** SET A = A + U*(W**T) + W*(U**T) *** C K = 1 DO 40 I = 1, P UI = U(I) WI = W(I) DO 30 J = 1, I A(K) = SIZE*A(K) + UI*W(J) + WI*U(J) K = K + 1 30 CONTINUE 40 CONTINUE C 999 RETURN C *** LAST CARD OF DS7LUP FOLLOWS *** END PyBDSF-1.10.1/src/port3/ds7lvm.f000066400000000000000000000017351420247104600160500ustar00rootroot00000000000000 SUBROUTINE DS7LVM(P, Y, S, X) C C *** SET Y = S * X, S = P X P SYMMETRIC MATRIX. *** C *** LOWER TRIANGLE OF S STORED ROWWISE. *** C C *** PARAMETER DECLARATIONS *** C INTEGER P DOUBLE PRECISION S(1), X(P), Y(P) C DIMENSION S(P*(P+1)/2) C C *** LOCAL VARIABLES *** C INTEGER I, IM1, J, K DOUBLE PRECISION XI C C *** NO INTRINSIC FUNCTIONS *** C C *** EXTERNAL FUNCTION *** C DOUBLE PRECISION DD7TPR EXTERNAL DD7TPR C C----------------------------------------------------------------------- C J = 1 DO 10 I = 1, P Y(I) = DD7TPR(I, S(J), X) J = J + I 10 CONTINUE C IF (P .LE. 1) GO TO 999 J = 1 DO 40 I = 2, P XI = X(I) IM1 = I - 1 J = J + 1 DO 30 K = 1, IM1 Y(K) = Y(K) + S(J)*XI J = J + 1 30 CONTINUE 40 CONTINUE C 999 RETURN C *** LAST CARD OF DS7LVM FOLLOWS *** END PyBDSF-1.10.1/src/port3/dsm.f000066400000000000000000000163331420247104600154170ustar00rootroot00000000000000 SUBROUTINE DSM(M,N,NPAIRS,INDROW,INDCOL,NGRP,MAXGRP,MINGRP, * INFO,IPNTR,JPNTR,IWA,LIWA,BWA) INTEGER M,N,NPAIRS,MAXGRP,MINGRP,INFO,LIWA INTEGER INDROW(NPAIRS),INDCOL(NPAIRS),NGRP(N), * IPNTR(1),JPNTR(1),IWA(LIWA) LOGICAL BWA(N) C ********** C C SUBROUTINE DSM C C THE PURPOSE OF DSM IS TO DETERMINE AN OPTIMAL OR NEAR- C OPTIMAL CONSISTENT PARTITION OF THE COLUMNS OF A SPARSE C M BY N MATRIX A. C C THE SPARSITY PATTERN OF THE MATRIX A IS SPECIFIED BY C THE ARRAYS INDROW AND INDCOL. ON INPUT THE INDICES C FOR THE NON-ZERO ELEMENTS OF A ARE C C INDROW(K),INDCOL(K), K = 1,2,...,NPAIRS. C C THE (INDROW,INDCOL) PAIRS MAY BE SPECIFIED IN ANY ORDER. C DUPLICATE INPUT PAIRS ARE PERMITTED, BUT THE SUBROUTINE C ELIMINATES THEM. C C THE SUBROUTINE PARTITIONS THE COLUMNS OF A INTO GROUPS C SUCH THAT COLUMNS IN THE SAME GROUP DO NOT HAVE A C NON-ZERO IN THE SAME ROW POSITION. A PARTITION OF THE C COLUMNS OF A WITH THIS PROPERTY IS CONSISTENT WITH THE C DIRECT DETERMINATION OF A. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE DSM(M,N,NPAIRS,INDROW,INDCOL,NGRP,MAXGRP,MINGRP, C INFO,IPNTR,JPNTR,IWA,LIWA,BWA) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF ROWS OF A. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C NPAIRS IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE C NUMBER OF (INDROW,INDCOL) PAIRS USED TO DESCRIBE THE C SPARSITY PATTERN OF A. C C INDROW IS AN INTEGER ARRAY OF LENGTH NPAIRS. ON INPUT INDROW C MUST CONTAIN THE ROW INDICES OF THE NON-ZERO ELEMENTS OF A. C ON OUTPUT INDROW IS PERMUTED SO THAT THE CORRESPONDING C COLUMN INDICES ARE IN NON-DECREASING ORDER. THE COLUMN C INDICES CAN BE RECOVERED FROM THE ARRAY JPNTR. C C INDCOL IS AN INTEGER ARRAY OF LENGTH NPAIRS. ON INPUT INDCOL C MUST CONTAIN THE COLUMN INDICES OF THE NON-ZERO ELEMENTS OF C A. ON OUTPUT INDCOL IS PERMUTED SO THAT THE CORRESPONDING C ROW INDICES ARE IN NON-DECREASING ORDER. THE ROW INDICES C CAN BE RECOVERED FROM THE ARRAY IPNTR. C C NGRP IS AN INTEGER OUTPUT ARRAY OF LENGTH N WHICH SPECIFIES C THE PARTITION OF THE COLUMNS OF A. COLUMN JCOL BELONGS C TO GROUP NGRP(JCOL). C C MAXGRP IS AN INTEGER OUTPUT VARIABLE WHICH SPECIFIES THE C NUMBER OF GROUPS IN THE PARTITION OF THE COLUMNS OF A. C C MINGRP IS AN INTEGER OUTPUT VARIABLE WHICH SPECIFIES A LOWER C BOUND FOR THE NUMBER OF GROUPS IN ANY CONSISTENT PARTITION C OF THE COLUMNS OF A. C C INFO IS AN INTEGER OUTPUT VARIABLE SET AS FOLLOWS. FOR C NORMAL TERMINATION INFO = 1. IF M, N, OR NPAIRS IS NOT C POSITIVE OR LIWA IS LESS THAN MAX(M,6*N), THEN INFO = 0. C IF THE K-TH ELEMENT OF INDROW IS NOT AN INTEGER BETWEEN C 1 AND M OR THE K-TH ELEMENT OF INDCOL IS NOT AN INTEGER C BETWEEN 1 AND N, THEN INFO = -K. C C IPNTR IS AN INTEGER OUTPUT ARRAY OF LENGTH M + 1 WHICH C SPECIFIES THE LOCATIONS OF THE COLUMN INDICES IN INDCOL. C THE COLUMN INDICES FOR ROW I ARE C C INDCOL(K), K = IPNTR(I),...,IPNTR(I+1)-1. C C NOTE THAT IPNTR(M+1)-1 IS THEN THE NUMBER OF NON-ZERO C ELEMENTS OF THE MATRIX A. C C JPNTR IS AN INTEGER OUTPUT ARRAY OF LENGTH N + 1 WHICH C SPECIFIES THE LOCATIONS OF THE ROW INDICES IN INDROW. C THE ROW INDICES FOR COLUMN J ARE C C INDROW(K), K = JPNTR(J),...,JPNTR(J+1)-1. C C NOTE THAT JPNTR(N+1)-1 IS THEN THE NUMBER OF NON-ZERO C ELEMENTS OF THE MATRIX A. C C IWA IS AN INTEGER WORK ARRAY OF LENGTH LIWA. C C LIWA IS A POSITIVE INTEGER INPUT VARIABLE NOT LESS THAN C MAX(M,6*N). C C BWA IS A LOGICAL WORK ARRAY OF LENGTH N. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ...D7EGR,I7DO,N7MSRT,M7SEQ,S7ETR,M7SLO,S7RTDT C C FORTRAN-SUPPLIED ... MAX0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. JUNE 1982. C THOMAS F. COLEMAN, BURTON S. GARBOW, JORGE J. MORE C C ********** INTEGER I,IR,J,JP,JPL,JPU,K,MAXCLQ,NNZ,NUMGRP C C CHECK THE INPUT DATA. C INFO = 0 IF (M .LT. 1 .OR. N .LT. 1 .OR. NPAIRS .LT. 1 .OR. * LIWA .LT. MAX0(M,6*N)) GO TO 130 DO 10 K = 1, NPAIRS INFO = -K IF (INDROW(K) .LT. 1 .OR. INDROW(K) .GT. M .OR. * INDCOL(K) .LT. 1 .OR. INDCOL(K) .GT. N) GO TO 130 10 CONTINUE INFO = 1 C C SORT THE DATA STRUCTURE BY COLUMNS. C CALL S7RTDT(N,NPAIRS,INDROW,INDCOL,JPNTR,IWA(1)) C C COMPRESS THE DATA AND DETERMINE THE NUMBER OF C NON-ZERO ELEMENTS OF A. C DO 20 I = 1, M IWA(I) = 0 20 CONTINUE NNZ = 0 DO 70 J = 1, N JPL = JPNTR(J) JPU = JPNTR(J+1) - 1 JPNTR(J) = NNZ + 1 IF (JPU .LT. JPL) GO TO 60 DO 40 JP = JPL, JPU IR = INDROW(JP) IF (IWA(IR) .NE. 0) GO TO 30 NNZ = NNZ + 1 INDROW(NNZ) = IR IWA(IR) = 1 30 CONTINUE 40 CONTINUE JPL = JPNTR(J) DO 50 JP = JPL, NNZ IR = INDROW(JP) IWA(IR) = 0 50 CONTINUE 60 CONTINUE 70 CONTINUE JPNTR(N+1) = NNZ + 1 C C EXTEND THE DATA STRUCTURE TO ROWS. C CALL S7ETR(M,N,INDROW,JPNTR,INDCOL,IPNTR,IWA(1)) C C DETERMINE A LOWER BOUND FOR THE NUMBER OF GROUPS. C MINGRP = 0 DO 80 I = 1, M MINGRP = MAX0(MINGRP,IPNTR(I+1)-IPNTR(I)) 80 CONTINUE C C DETERMINE THE DEGREE SEQUENCE FOR THE INTERSECTION C GRAPH OF THE COLUMNS OF A. C CALL D7EGR(N,INDROW,JPNTR,INDCOL,IPNTR,IWA(5*N+1),IWA(N+1),BWA) C C COLOR THE INTERSECTION GRAPH OF THE COLUMNS OF A C WITH THE SMALLEST-LAST (SL) ORDERING. C CALL M7SLO(N,INDROW,JPNTR,INDCOL,IPNTR,IWA(5*N+1),IWA(4*N+1), * MAXCLQ,IWA(1),IWA(N+1),IWA(2*N+1),IWA(3*N+1),BWA) CALL M7SEQ(N,INDROW,JPNTR,INDCOL,IPNTR,IWA(4*N+1),NGRP,MAXGRP, * IWA(N+1),BWA) MINGRP = MAX0(MINGRP,MAXCLQ) IF (MAXGRP .EQ. MINGRP) GO TO 130 C C COLOR THE INTERSECTION GRAPH OF THE COLUMNS OF A C WITH THE INCIDENCE-DEGREE (ID) ORDERING. C CALL I7DO(M,N,INDROW,JPNTR,INDCOL,IPNTR,IWA(5*N+1),IWA(4*N+1), * MAXCLQ,IWA(1),IWA(N+1),IWA(2*N+1),IWA(3*N+1),BWA) CALL M7SEQ(N,INDROW,JPNTR,INDCOL,IPNTR,IWA(4*N+1),IWA(1),NUMGRP, * IWA(N+1),BWA) MINGRP = MAX0(MINGRP,MAXCLQ) IF (NUMGRP .GE. MAXGRP) GO TO 100 MAXGRP = NUMGRP DO 90 J = 1, N NGRP(J) = IWA(J) 90 CONTINUE IF (MAXGRP .EQ. MINGRP) GO TO 130 100 CONTINUE C C COLOR THE INTERSECTION GRAPH OF THE COLUMNS OF A C WITH THE LARGEST-FIRST (LF) ORDERING. C CALL N7MSRT(N,N-1,IWA(5*N+1),-1,IWA(4*N+1),IWA(2*N+1),IWA(N+1)) CALL M7SEQ(N,INDROW,JPNTR,INDCOL,IPNTR,IWA(4*N+1),IWA(1),NUMGRP, * IWA(N+1),BWA) IF (NUMGRP .GE. MAXGRP) GO TO 120 MAXGRP = NUMGRP DO 110 J = 1, N NGRP(J) = IWA(J) 110 CONTINUE 120 CONTINUE C C EXIT FROM PROGRAM. C 130 CONTINUE RETURN C C LAST CARD OF SUBROUTINE DSM. C END PyBDSF-1.10.1/src/port3/dsmnfb.f000066400000000000000000000050531420247104600161020ustar00rootroot00000000000000 SUBROUTINE DSMNFB( P, X,B, CALCF, MXFCAL, ACC ) C C ** SIMPLIED VERSION OF DMNF C C INPUT PARAMETERS C P NUMBER OF UNKNOWNS C X APPROXIMATE SOLUTION C B FIRST ROW OF B GIVES LOWER BOUNDS ON X AND SECOND GIVES UPPER C BOUNDS C CALCF SUBROUTINE TO EVALUATE FUNCTION C MXFCAL MAXIMUM NUMBER OF PERMITTED FUNCTION EVALUATIONS C ACC ACCURACY IN X C OUTPUT PARAMETERS C X SOLUTION INTEGER P, MXFCAL DOUBLE PRECISION X(P), ACC ,B(2,P) EXTERNAL CALCF, DC6LCF C C C C *** LOCAL VARIABLES *** C INTEGER IV, LIV, LV, V1 INTEGER IDI,IDM1,ID,J DOUBLE PRECISION UR DOUBLE PRECISION DSTAK(500) COMMON /CSTAK/ DSTAK INTEGER ISTAK(1000) EQUIVALENCE (DSTAK(1), ISTAK(1)) C C *** BODY *** C CALL ENTER(0) C/6S C IF (P.LT.1) C 1CALL SETERR(14HDSMNFB- P.LT.1,14,1,2) C IF (MXFCAL.LT.1) C 1CALL SETERR(19HDSMNFB- MXFCAL.LT.1,19,2,2) C IF (ACC.LT.0.0D0) C 1CALL SETERR(18HDSMNFB-ACC .LT.0.0,18,3,2) C/7S IF (P.LT.1) 1CALL SETERR('DSMNFB- P.LT.1',14,1,2) IF (MXFCAL.LT.1) 1CALL SETERR('DSMNFB- MXFCAL.LT.1',19,2,2) IF (ACC.LT.0.0D0) 1CALL SETERR('DSMNFB-ACC .LT.0.0',18,3,2) C/ LIV =59+P LV=77+P*(P+23)/2 IV=ISTKGT(LIV,2) V1=ISTKGT(LV, 4) CALL DIVSET(2,ISTAK(IV),LIV,LV,DSTAK(V1)) ISTAK(IV+20)=0 ISTAK(IV+16)=MXFCAL ISTAK(IV+17)=MXFCAL DSTAK(V1+32)=ACC DSTAK(V1+31)=ACC ID=ISTKGT(P, 4) IDM1=ID-1 DO 10 I=1,P IDI=IDM1+I DSTAK(IDI)=1.0 IF (X(I).NE.0.0)DSTAK(IDI)=1.0/DABS(X(I)) 10 CONTINUE CALL DMNFB( P, DSTAK(ID),X,B, DC6LCF, ISTAK(IV), LIV, LV, 1 DSTAK(V1), IU, UR, CALCF) J=ISTAK(IV) IF(J.LT.7) GO TO 20 C/6S C IF (J.EQ.82)CALL SETERR(26HDSMNFB-INCONSISTENT BOUNDS,26,4,1) C IF (J.EQ.7)CALL SETERR(27HDSMNFB-SINGULAR CONVERGENCE,27,5,1) C IF(J.EQ.8)CALL SETERR(24HDSMNFB-FALSE CONVERGENCE,24,6,1) C IF(J.EQ.9)CALL SETERR(32HDSMNFB-FUNCTION EVALUATION LIMIT,32,7,1) C IF (J.EQ.63) C 1CALL SETERR(43HDSMNFB-F(X) CANNOT BE COMPUTED AT INITIAL X,43,8,1) C/7S IF (J.EQ.82)CALL SETERR('DSMNFB-INCONSISTENT BOUNDS',26,4,1) IF (J.EQ.7)CALL SETERR('DSMNFB-SINGULAR CONVERGENCE',27,5,1) IF(J.EQ.8)CALL SETERR('DSMNFB-FALSE CONVERGENCE',24,6,1) IF(J.EQ.9)CALL SETERR('DSMNFB-FUNCTION EVALUATION LIMIT',32,7,1) IF (J.EQ.63) 1CALL SETERR('DSMNFB-F(X) CANNOT BE COMPUTED AT INITIAL X',43,8,1) C/ 20 CALL LEAVE C RETURN C *** LAST LINE OF DSMNFB FOLLOWS *** END PyBDSF-1.10.1/src/port3/dttgrx1.f000066400000000000000000000141421420247104600162250ustar00rootroot00000000000000C$TEST DTTGR1 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, istkgt, is(1000), iu, ix integer iy, nu, kx, nx, ky, ny integer idumb real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, dt, lx, ly, rx, ry double precision ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve the heat equation with solution u == t*x*y, c grad . ( u + ux + .1 * uy, u + uy + .1 * ux ) = ut + ux + uy +g(x,t) c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 ly = 0 ry = 1 kx = 2 ky = 2 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ix = idumb(lx, rx, ndx, kx, nx) c uniform grid. iy = idumb(ly, ry, ndy, ky, ny) c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 4) c initial conditions for u. call setd(nu*(nx-kx)*(ny-ky), 0d0, ws(iu)) call dttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i)+.1*uy(p, q, i)+u(p, q, i) a(p, q, i, 2) = uy(p, q, i)+.1*ux(p, q, i)+u(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 auy(p, q, i, i, 1) = .1 aux(p, q, i, i, 2) = .1 au(p, q, i, i, 1) = 1 au(p, q, i, i, 2) = 1 f(p, q, i) = ut(p, q, i)+ux(p, q, i)+uy(p, q, i) fut(p, q, i, i) = 1 fux(p, q, i, i) = 1 fuy(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)+.2*t-x(p)*y(q) 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-t*x(i)*y(j) 1 continue 2 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /d7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c u(nx-kx,ny0ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 4) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) t, erru 2 format (14h error in u(.,, 1pe10.2, 3h) =, 1pe10.2) call leave return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p c the exact solution. do 3 p = 1, nu do 2 i = 1, nx do 1 j = 1, ny u(i, j, p) = t*x(i)*y(j) 1 continue 2 continue 3 continue return end PyBDSF-1.10.1/src/port3/dttgrx1p.f000066400000000000000000000133641420247104600164120ustar00rootroot00000000000000C$TEST DTTGR1P c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, istkgt, is(1000), iu, ix integer iy, nu, kx, nx, ky, ny integer idumb real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, dt, lx, ly, rx, ry double precision ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve the heat equation with solution u == t*x*y, c grad . ( u + ux + .1 * uy, u + uy + .1 * ux ) = ut + ux + uy +g(x,t) c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 ly = 0 ry = 1 kx = 2 ky = 2 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ix = idumb(lx, rx, ndx, kx, nx) c uniform grid. iy = idumb(ly, ry, ndy, ky, ny) c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 4) c initial conditions for u. call setd(nu*(nx-kx)*(ny-ky), 0d0, ws(iu)) call dttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i)+.1*uy(p, q, i)+u(p, q, i) a(p, q, i, 2) = uy(p, q, i)+.1*ux(p, q, i)+u(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 auy(p, q, i, i, 1) = .1 aux(p, q, i, i, 2) = .1 au(p, q, i, i, 1) = 1 au(p, q, i, i, 2) = 1 f(p, q, i) = ut(p, q, i)+ux(p, q, i)+uy(p, q, i) fut(p, q, i, i) = 1 fux(p, q, i, i) = 1 fuy(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)+.2*t-x(p)*y(q) 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-t*x(i)*y(j) 1 continue 2 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /d7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return c print results. 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision ws(500) integer temp, temp1 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to print the solution at each time-step. c u(nx-kx,ny,ky,nu). c the port library stack and its aliases. call enter(1) c find the solution at 2 * 2 points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2, nys) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) temp1 = ifa+nxs*nys-1 temp = i1mach(2) write (temp, 1) t, (ws(i), i = ifa, temp1) 1 format (3h u(, 1pe10.2, 7h,.,.) =, (1p5e10.2/20x,1p4e10.2)) call leave return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p c the exact solution. do 3 p = 1, nu do 2 i = 1, nx do 1 j = 1, ny u(i, j, p) = t*x(i)*y(j) 1 continue 2 continue 3 continue return end PyBDSF-1.10.1/src/port3/dttgrx2.f000066400000000000000000000145641420247104600162360ustar00rootroot00000000000000C$TEST DTTGR2 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, istkgt, is(1000), iu, ix integer iy, nu, kx, nx, ky, ny integer idumb real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, dt, lx, ly, rx, ry double precision ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve two coupled, nonlinear heat equations. c u1 sub t = div . ( u1x, u1y ) - u1*u2 + g1 c u2 sub t = div . ( u2x, u2y ) - u1*u2 + g2 c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 2 lx = 0 rx = 1 ly = 0 ry = 1 kx = 4 ky = 4 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1e-2 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ix = idumb(lx, rx, ndx, kx, nx) c uniform grid. iy = idumb(ly, ry, ndy, ky, ny) c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 4) call setd(nu*(nx-kx)*(ny-ky), 1d0, ws(iu)) call dttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer p, q double precision dexp do 2 q = 1, ny do 1 p = 1, nx a(p, q, 1, 1) = ux(p, q, 1) aux(p, q, 1, 1, 1) = 1 a(p, q, 1, 2) = uy(p, q, 1) auy(p, q, 1, 1, 2) = 1 f(p, q, 1) = ut(p, q, 1)+u(p, q, 1)*u(p, q, 2) fu(p, q, 1, 1) = u(p, q, 2) fu(p, q, 1, 2) = u(p, q, 1) fut(p, q, 1, 1) = 1 a(p, q, 2, 1) = ux(p, q, 2) aux(p, q, 2, 2, 1) = 1 a(p, q, 2, 2) = uy(p, q, 2) auy(p, q, 2, 2, 2) = 1 f(p, q, 2) = ut(p, q, 2)+u(p, q, 1)*u(p, q, 2) fu(p, q, 2, 1) = u(p, q, 2) fu(p, q, 2, 2) = u(p, q, 1) fut(p, q, 2, 2) = 1 f(p, q, 1) = f(p, q, 1)-(dexp(t*(x(p)-y(q)))*(x(p)-y(q)-2d0* 1 t*t)+1d0) f(p, q, 2) = f(p, q, 2)-(dexp(t*(y(q)-x(p)))*(y(q)-x(p)-2d0* 1 t*t)+1d0) 1 continue 2 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j double precision dexp do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-dexp(t*(x(i)-y(j))) bu(i, j, 2, 2) = 1 b(i, j, 2) = u(i, j, 2)-dexp(t*(y(j)-x(i))) 1 continue 2 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /cstak/ ds double precision ds(500) common /d7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /d7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer j, iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c the port library stack and its aliases. if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nu*nxs*nys, 4) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) do 5 j = 1, nu c evaluate them. temp = (j-1)*(nx-kx)*(ny-ky) call dtsd1(2, ka, ws, ita, nta, u(temp+1), ws, ixa, nxa, ma, 1 ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 3 i = 1, temp temp2 = iewe+i-1+(j-1)*nxs*nys temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2)-ws(temp1-1))) 3 continue temp = i1mach(2) write (temp, 4) t, j, erru 4 format (14h error in u(.,, 1pe10.2, 1h,, i2, 3h) =, 1pe10.2) 5 continue call leave return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p real float double precision dble, dexp c the exact solution. do 3 p = 1, nu do 2 i = 1, nx do 1 j = 1, ny u(i, j, p) = dexp(dble(float((-1)**(p+1)))*t*(x(i)-y(j))) 1 continue 2 continue 3 continue return end PyBDSF-1.10.1/src/port3/dttgrx3.f000066400000000000000000000163351420247104600162350ustar00rootroot00000000000000C$TEST DTTGR3 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, idlumb, istkgt, i, is(1000) integer iu, ix, iy, nu, kx, nx integer ky, ny, idumb, immmd real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, dt, yb(4), lx, rx, ws(500) double precision tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve the layered heat equation, with kappa = 1, 1/2, 1/3, c div . ( kappa(x,y) * grad u ) = ut + g c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 do 1 i = 1, 4 yb(i) = i-1 1 continue kx = 2 ky = 2 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ix = idumb(lx, rx, ndx, kx, nx) c uniform grid. iy = idlumb(yb, 4, ndy, ky, ny) c make mult = ky-1. iy = immmd(iy, ny, yb(2), ky-1) c make mult = ky-1. iy = immmd(iy, ny, yb(3), ky-1) c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 4) call setd(nu*(nx-kx)*(ny-ky), 0d0, ws(iu)) call dttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q double precision kappa logical temp do 7 i = 1, nu do 6 q = 1, ny do 5 p = 1, nx if (y(q) .ge. 1d0) goto 1 kappa = 1 goto 4 1 if (y(q) .ge. 2d0) goto 2 kappa = 0.5 goto 3 2 kappa = 1d0/3d0 3 continue 4 a(p, q, i, 1) = kappa*ux(p, q, i) aux(p, q, i, i, 1) = kappa a(p, q, i, 2) = kappa*uy(p, q, i) auy(p, q, i, i, 2) = kappa f(p, q, i) = ut(p, q, i) fut(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)-y(q)/kappa temp = 1d0 .lt. y(q) if (temp) temp = y(q) .lt. 2d0 if (temp) f(p, q, i) = f(p, q, i)+1d0 temp = 2d0 .lt. y(q) if (temp) temp = y(q) .lt. 3d0 if (temp) f(p, q, i) = f(p, q, i)+3d0 5 continue 6 continue 7 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j logical temp do 6 j = 1, ny do 5 i = 1, nx temp = x(i) .eq. lx if (.not. temp) temp = x(i) .eq. rx if (.not. temp) goto 1 bux(i, j, 1, 1) = 1 c left or right. c neumann bcs. b(i, j, 1) = ux(i, j, 1) goto 4 1 if (y(j) .ne. ly) goto 2 b(i, j, 1) = u(i, j, 1) c bottom. bu(i, j, 1, 1) = 1 goto 3 2 b(i, j, 1) = u(i, j, 1)-6d0*t c top. bu(i, j, 1, 1) = 1 3 continue 4 continue 5 continue 6 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /d7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c u(nx-kx,ny,ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 4) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) t, erru 2 format (14h error in u(.,, 1pe10.2, 3h) =, 1pe10.2) call leave return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p c the exact solution. do 7 p = 1, nu do 6 i = 1, nx do 5 j = 1, ny if (y(j) .ge. 1d0) goto 1 u(i, j, p) = t*y(j) goto 4 1 if (y(j) .ge. 2d0) goto 2 u(i, j, p) = 2d0*t*y(j)-t goto 3 2 u(i, j, p) = 3d0*t*y(j)-3d0*t 3 continue 4 continue 5 continue 6 continue 7 continue return end PyBDSF-1.10.1/src/port3/dttgrx4.f000066400000000000000000000202531420247104600162300ustar00rootroot00000000000000C$TEST DTTGR4 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, istkgt, is(1000), iu, ix integer iy, nu, kx, nx, ky, ny integer idumb real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, dt, lx, ly, rx, ry double precision ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve the linear heat equation c grad . ( ux - 0.1 * uy , 0.1*ux + uy ) = ut - x*y c with solution u == t*x*y on [0,+1]**2, exact for k = 4, c with tilted top and bottom, normal bcs there. c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 ly = 0 ry = 1 kx = 4 ky = 4 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ix = idumb(lx, rx, ndx, kx, nx) c uniform grid. iy = idumb(ly, ry, ndy, ky, ny) c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 4) call setd(nu*(nx-kx)*(ny-ky), 0d0, ws(iu)) call dttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, xi, nx, yi, ny, nu, u, ut, ux, uy, uxt, 1 uyt, a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, 2 fuxt, fuyt) integer nu, nx, ny double precision t, xi(nx), yi(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) external bt, lr integer i, p, q double precision d(600), x, y, xx(100), yy(100) integer temp if (nx*ny .gt. 100) call seterr(19haf - nx*ny .gt. 100, 19, 1, 2) call dbtmap(t, xi, yi, nx, ny, lr, bt, xx, yy, d) c map into (x,y). call dttgru(nx, ny, d, ux, uy, ut, nu) do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx temp = p+(q-1)*nx x = xx(temp) temp = p+(q-1)*nx y = yy(temp) a(p, q, i, 1) = ux(p, q, i)-.1*uy(p, q, i) a(p, q, i, 2) = uy(p, q, i)+.1*ux(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 auy(p, q, i, i, 1) = -.1 aux(p, q, i, i, 2) = .1 f(p, q, 1) = ut(p, q, 1)-x*y fut(p, q, 1, 1) = 1 1 continue 2 continue 3 continue c map into (xi,eta). call dttgrg(nx, ny, d, nu, a, au, aux, auy, f, fu, fux, fuy) return end subroutine bc(t, xi, nx, yi, ny, lx, rx, ly, ry, u, ut, ux 1 , uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, xi(nx), yi(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) external bt, lr integer i, j double precision d(600), x, y, xx(100), yy(100) integer temp1 logical temp if (nx*ny .gt. 100) call seterr(19hbc - nx*ny .gt. 100, 19, 1, 2) call dbtmap(t, xi, yi, nx, ny, lr, bt, xx, yy, d) c map into (x,y). call dttgru(nx, ny, d, ux, uy, ut, nu) do 6 j = 1, ny do 5 i = 1, nx temp1 = i+(j-1)*nx x = xx(temp1) temp1 = i+(j-1)*nx y = yy(temp1) temp = xi(i) .eq. lx if (.not. temp) temp = xi(i) .eq. rx if (.not. temp) goto 1 bu(i, j, 1, 1) = 1 c left or right. b(i, j, 1) = u(i, j, 1)-t*x*y goto 4 1 if (yi(j) .ne. ly) goto 2 b(i, j, 1) = (ux(i, j, 1)-t*y)-(uy(i, j, 1)-t*x) c bottom. bux(i, j, 1, 1) = 1 c normal is (1,-1). buy(i, j, 1, 1) = -1 goto 3 2 b(i, j, 1) = (uy(i, j, 1)-t*x)-(ux(i, j, 1)-t*y) c top. bux(i, j, 1, 1) = -1 c normal is (-1,1). buy(i, j, 1, 1) = 1 3 continue 4 continue 5 continue 6 continue c map into (xi,eta). call dttgrb(nx, ny, d, nu, bux, buy, but) return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /d7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c u(nx-kx,ny-ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 4) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) t, erru 2 format (14h error in u(.,, 1pe10.2, 3h) =, 1pe10.2) call leave return end subroutine ewe(t, xi, nx, yi, ny, u, nu) integer nu, nx, ny double precision t, xi(nx), yi(ny), u(nx, ny, nu) external bt, lr integer i, j, p double precision d(6000), x, y, xx(1000), yy(1000) c the exact solution. if (ny .gt. 1000) call seterr(18hewe - ny .gt. 1000, 18, 1, 2) do 3 p = 1, nu do 2 i = 1, nx call dbtmap(t, xi(i), yi, 1, ny, lr, bt, xx, yy, d) do 1 j = 1, ny x = xx(j) y = yy(j) u(i, j, p) = t*x*y 1 continue 2 continue 3 continue return end subroutine lr(t, lx, rx, lxt, rxt) double precision t, lx, rx, lxt, rxt c to get the l and r end-points of the mapping in x. lx = 0 rx = 1 lxt = 0 rxt = 0 return end subroutine bt(t, x, f, g, fx, gx, ft, gt) double precision t, x, f, g, fx, gx double precision ft, gt c to get the bottom and top of mapping in y. f = x-1d0 g = x ft = 0 gt = 0 fx = 1 gx = 1 return end PyBDSF-1.10.1/src/port3/dttgrx5.f000066400000000000000000000162751420247104600162420ustar00rootroot00000000000000C$TEST DTTGR5 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, istkgt, i, is(1000), iu integer ix, iy, nu, kx, nx, ky integer ny real errpar(2), rs(1000), float logical ls(1000) complex cs(500) double precision tstart, dble, dt, lx, ly, rx double precision ry, ws(500), tstop integer temp, temp1 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve laplaces equation with real ( z*log(z) ) as solution. c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 ly = 0 ry = 1 kx = 4 ky = 4 ndx = 2 ndy = 2 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 nx = ndx+2*(kx-1) c space for x mesh. ix = istkgt(nx, 4) do 1 i = 1, kx temp = ix+i ws(temp-1) = 0 temp = ix+nx-i ws(temp) = rx 1 continue c 0 and rx mult = kx. temp = ndx-1 do 2 i = 1, temp temp1 = ix+kx-2+i ws(temp1) = rx*(dble(float(i-1))/(dble(float(ndx))-1d0))**kx 2 continue ny = ndy+2*(ky-1) c space for y mesh. iy = istkgt(ny, 4) do 3 i = 1, ky temp = iy+i ws(temp-1) = 0 temp = iy+ny-i ws(temp) = ry 3 continue c 0 and ry mult = ky. temp = ndy-1 do 4 i = 1, temp temp1 = iy+ky-2+i ws(temp1) = ry*(dble(float(i-1))/(dble(float(ndy))-1d0))**ky 4 continue c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 4) call setd(nu*(nx-kx)*(ny-ky), 0d0, ws(iu)) call dttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, xi, nx, yi, ny, nu, u, ut, ux, uy, uxt, 1 uyt, a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, 2 fuxt, fuyt) integer nu, nx, ny double precision t, xi(nx), yi(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i) a(p, q, i, 2) = uy(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j double precision r, dcos, dlog, dsin, datan, theta double precision dsqrt do 6 j = 1, ny do 5 i = 1, nx if (y(j) .ne. ly) goto 1 b(i, j, 1) = uy(i, j, 1) c neumann data on bottom. buy(i, j, 1, 1) = 1 goto 4 1 r = dsqrt(x(i)**2+y(j)**2) c dirichlet data. if (x(i) .le. 0d0) goto 2 theta = datan(y(j)/x(i)) goto 3 2 theta = 2d0*datan(1d0) 3 b(i, j, 1) = u(i, j, 1)-r*(dcos(theta)*dlog(r)-theta* 1 dsin(theta)) bu(i, j, 1, 1) = 1 4 continue 5 continue 6 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /d7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c u(nx-kx,ny-ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 4) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) t, erru 2 format (14h error in u(.,, 1pe10.2, 3h) =, 1pe10.2) call leave return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p double precision r, dcos, dlog, dsin, datan, theta double precision dsqrt c the exact solution. do 7 p = 1, nu do 6 i = 1, nx do 5 j = 1, ny r = dsqrt(x(i)**2+y(j)**2) if (x(i) .le. 0d0) goto 1 theta = datan(y(j)/x(i)) goto 2 1 theta = 2d0*datan(1d0) 2 if (r .le. 0d0) goto 3 u(i, j, p) = r*(dcos(theta)*dlog(r)-theta*dsin(theta)) goto 4 3 u(i, j, p) = 0 4 continue 5 continue 6 continue 7 continue return end PyBDSF-1.10.1/src/port3/dttgrx6.f000066400000000000000000000266461420247104600162460ustar00rootroot00000000000000C$TEST DTTGR6 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer iue, ndx, ndy, iur, ixr, iyr integer nxr, nyr, istkgt, i, is(1000), iu integer ix, iy, nu, kx, nx, ky integer ny, i1mach real errpar(2), rs(1000), float logical ls(1000) complex cs(500) double precision tstart, dble, dabs, eerr, erre, errr double precision dmax1, dt, lx, ly, rx, ry double precision ws(500), tstop integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get error estimates for laplaces equation with real ( z*log(z) ) as c solution. c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 ly = 0 ry = 1 kx = 4 ky = 4 ndx = 2 ndy = 2 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 nx = ndx+2*(kx-1) c space for x mesh. ix = istkgt(nx, 4) do 1 i = 1, kx temp = ix+i ws(temp-1) = 0 temp = ix+nx-i ws(temp) = rx 1 continue c 0 and rx mult = kx. temp = ndx-1 do 2 i = 1, temp temp2 = ix+kx-2+i ws(temp2) = rx*(dble(float(i-1))/(dble(float(ndx))-1d0))**kx 2 continue ny = ndy+2*(ky-1) c space for y mesh. iy = istkgt(ny, 4) do 3 i = 1, ky temp = iy+i ws(temp-1) = 0 temp = iy+ny-i ws(temp) = ry 3 continue c 0 and ry mult = ky. temp = ndy-1 do 4 i = 1, temp temp2 = iy+ky-2+i ws(temp2) = ry*(dble(float(i-1))/(dble(float(ndy))-1d0))**ky 4 continue c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 4) call setd(nu*(nx-kx)*(ny-ky), 0d0, ws(iu)) temp = i1mach(2) write (temp, 5) 5 format (23h solving on crude mesh.) call dttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) dt = 1 ndx = 2*ndx-1 c refine mesh. ndy = 2*ndy-1 nxr = ndx+2*(kx-1) c space for x mesh. ixr = istkgt(nxr, 4) do 6 i = 1, kx temp = ixr+i ws(temp-1) = 0 temp = ixr+nxr-i ws(temp) = rx 6 continue c 0 and rx mult = kx. temp = ndx-1 do 7 i = 1, temp temp2 = ixr+kx-2+i ws(temp2) = rx*(dble(float(i-1))/(dble(float(ndx))-1d0))**kx 7 continue nyr = ndy+2*(ky-1) c space for y mesh. iyr = istkgt(nyr, 4) do 8 i = 1, ky temp = iyr+i ws(temp-1) = 0 temp = iyr+nyr-i ws(temp) = ry 8 continue c 0 and ry mult = ky. temp = ndy-1 do 9 i = 1, temp temp2 = iyr+ky-2+i ws(temp2) = ry*(dble(float(i-1))/(dble(float(ndy))-1d0))**ky 9 continue c space for the solution. iur = istkgt(nu*(nxr-kx)*(nyr-ky), 4) call setd(nu*(nxr-kx)*(nyr-ky), 0d0, ws(iur)) temp = i1mach(2) write (temp, 10) 10 format (25h solving on refined mesh.) call dttgr(ws(iur), nu, kx, ws(ixr), nxr, ky, ws(iyr), nyr, 1 tstart, tstop, dt, af, bc, errpar, handle) dt = 1 errpar(1) = errpar(1)/10. errpar(2) = errpar(2)/10. c space for the solution. iue = istkgt(nu*(nx-kx)*(ny-ky), 4) call setd(nu*(nx-kx)*(ny-ky), 0d0, ws(iue)) temp = i1mach(2) write (temp, 11) 11 format (24h solving with errpar/10.) call dttgr(ws(iue), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) errr = eerr(kx, ix, nx, ky, iy, ny, ws(iu), nu, ixr, nxr, iyr, 1 nyr, ws(iur), tstop) erre = 0 temp = nu*(nx-kx)*(ny-ky) do 12 i = 1, temp temp2 = iu+i temp1 = iue+i erre = dmax1(erre, dabs(ws(temp2-1)-ws(temp1-1))) 12 continue temp = i1mach(2) write (temp, 13) erre 13 format (24h u error from u and ue =, 1pe10.2) temp = i1mach(2) write (temp, 14) errr 14 format (24h u error from u and ur =, 1pe10.2) call leave call wrapup stop end subroutine af(t, xi, nx, yi, ny, nu, u, ut, ux, uy, uxt, 1 uyt, a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, 2 fuxt, fuyt) integer nu, nx, ny double precision t, xi(nx), yi(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i) a(p, q, i, 2) = uy(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j double precision r, dcos, dlog, dsin, datan, theta double precision dsqrt do 6 j = 1, ny do 5 i = 1, nx if (y(j) .ne. ly) goto 1 b(i, j, 1) = uy(i, j, 1) c neumann data on bottom. buy(i, j, 1, 1) = 1 goto 4 1 r = dsqrt(x(i)**2+y(j)**2) c dirichlet data. if (x(i) .le. 0d0) goto 2 theta = datan(y(j)/x(i)) goto 3 2 theta = 2d0*datan(1d0) 3 b(i, j, 1) = u(i, j, 1)-r*(dcos(theta)*dlog(r)-theta* 1 dsin(theta)) bu(i, j, 1, 1) = 1 4 continue 5 continue 6 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /d7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c u(nx-kx,ny-ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 4) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) t, erru 2 format (14h error in u(.,, 1pe10.2, 3h) =, 1pe10.2) call leave return end double precision function eerr(kx, ix, nx, ky, iy, ny, u, 1 nu, ixr, nxr, iyr, nyr, ur, t) integer kx, ix, nx, ky, iy, ny integer nu, ixr, nxr, iyr, nyr double precision u(1), ur(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer ifar, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error estimate at each time-step. c u(nx-kx,ny-ky,nu), ur(nxr-kx,nyr-ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / fine mesh recta cngle. c x search grid. ixs = idlumd(ws(ixr), nxr, 2*kx, nxs) c y search grid. iys = idlumd(ws(iyr), nyr, 2*ky, nys) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) ka(1) = kx ka(2) = ky ita(1) = ixr ita(2) = iyr nta(1) = nxr nta(2) = nyr ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifar = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, ur, ws, ixa, nxa, ma, ws(ifar)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = ifar+i temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2-1)-ws(temp1-1))) 1 continue call leave eerr = erru return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p double precision r, dcos, dlog, dsin, datan, theta double precision dsqrt c the exact solution. do 7 p = 1, nu do 6 i = 1, nx do 5 j = 1, ny r = dsqrt(x(i)**2+y(j)**2) if (x(i) .le. 0d0) goto 1 theta = datan(y(j)/x(i)) goto 2 1 theta = 2d0*datan(1d0) 2 if (r .le. 0d0) goto 3 u(i, j, p) = r*(dcos(theta)*dlog(r)-theta*dsin(theta)) goto 4 3 u(i, j, p) = 0 4 continue 5 continue 6 continue 7 continue return end PyBDSF-1.10.1/src/port3/dttgux1.f000066400000000000000000000163371420247104600162400ustar00rootroot00000000000000C$TEST DTTGU1 c main program c to solve the heat equation with solution u == t*x*y, c grad . ( u + ux + .1 * uy, u + uy + .1 * ux ) = ut + ux + uy +g(x,t) common /cstak/ ds double precision ds(350000) integer ixb(4), iyb(4), nxr(4), nyr(4), kxr(4), kyr(4) external handlu, bc, af integer ndx, ndy, istkgt, is(1000), iu, nu, kx, ky, idumb real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, dt, tstop, ws(500) c the port library stack and its aliases. equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 kx = 2 ky = 2 ndx = 3 ndy = 3 nr=4 tstart = 0.d0 tstop = 1.d0 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. c c make grid for t-shaped region c ixb(1) = idumb(-1.0d0, 0.0d0, ndx, kx, nxr(1)) ixb(2) = idumb(0.0d0, 1.0d0, ndx, kx, nxr(2)) ixb(3) = idumb(1.0d0, 2.0d0, ndx, kx, nxr(3)) ixb(4) = idumb(0.0d0, 1.0d0, ndx, kx, nxr(4)) iyb(1) = idumb(0.0d0, 1.0d0, ndy, ky, nyr(1)) iyb(2) = idumb(0.0d0, 1.0d0, ndy, ky, nyr(2)) iyb(3) = idumb(0.0d0, 1.0d0, ndy, ky, nyr(3)) iyb(4) = idumb(-1.0d0, 0.0d0, ndy, ky, nyr(4)) nnu =nu*((nxr(1)-kx)*(nyr(1)+nyr(3)-2*ky)+ 1 (nxr(2)-kx)*(nyr(2)-ky)+ 4 (nxr(4)-kx)*(nyr(4)-ky)) nr=4 c space for the solution. iu = istkgt(nnu, 4) do 1 i=1,nr kxr(i)=kx kyr(i)=ky 1 continue c initial conditions for u. call setd(nnu, 0.d0,ws(iu)) c since idumb places the meshes in the port stack, the name of c the port stack, ws, is used as the x and y arrays call dttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i)+.1*uy(p, q, i)+u(p, q, i) a(p, q, i, 2) = uy(p, q, i)+.1*ux(p, q, i)+u(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 auy(p, q, i, i, 1) = .1 aux(p, q, i, i, 2) = .1 au(p, q, i, i, 1) = 1 au(p, q, i, i, 2) = 1 f(p, q, i) = ut(p, q, i)+ux(p, q, i)+uy(p, q, i) fut(p, q, i, i) = 1 fux(p, q, i, i) = 1 fuy(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)+.2*t-x(p)*y(q) 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-t*x(i)*y(j) 1 continue 2 continue return end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /d7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) integer kx, ix, nx, ky, iy, ny, inu, ir double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c for variable inu for rectangle ir c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 4) c the exact solution. call ewe2(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), inu, ir) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) ir, inu, erru 2 format(9h for rect,i3,14h error in u(.,, i2, 1 3h) =, 1pe10.2) call leave return end subroutine ewe2(t, x, nx, y, ny, u, inu, ir) integer inu, ir, nx, ny double precision t, x(nx), y(ny), u(nx, ny) integer i, j c the exact solution. do 2 i = 1, nx do 1 j = 1, ny u(i, j) = t*x(i)*y(j) 1 continue 2 continue return end PyBDSF-1.10.1/src/port3/dttgux1p.f000066400000000000000000000153761420247104600164220ustar00rootroot00000000000000C$TEST DTTGU1P c main program c to solve the heat equation with solution u == t*x*y, c grad . ( u + ux + .1 * uy, u + uy + .1 * ux ) = ut + ux + uy +g(x,t) common /cstak/ ds double precision ds(350000) integer ixb(4), iyb(4), nxr(4), nyr(4), kxr(4), kyr(4) external handlu, bc, af integer ndx, ndy, istkgt, is(1000), iu, nu, kx, ky, idumb real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, dt, tstop, ws(500) c the port library stack and its aliases. equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 kx = 2 ky = 2 ndx = 3 ndy = 3 nr=4 tstart = 0.d0 tstop = 1.d0 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. c c make grid for t-shaped region c ixb(1) = idumb(-1.0d0, 0.0d0, ndx, kx, nxr(1)) ixb(2) = idumb(0.0d0, 1.0d0, ndx, kx, nxr(2)) ixb(3) = idumb(1.0d0, 2.0d0, ndx, kx, nxr(3)) ixb(4) = idumb(0.0d0, 1.0d0, ndx, kx, nxr(4)) iyb(1) = idumb(0.0d0, 1.0d0, ndy, ky, nyr(1)) iyb(2) = idumb(0.0d0, 1.0d0, ndy, ky, nyr(2)) iyb(3) = idumb(0.0d0, 1.0d0, ndy, ky, nyr(3)) iyb(4) = idumb(-1.0d0, 0.0d0, ndy, ky, nyr(4)) nnu =nu*((nxr(1)-kx)*(nyr(1)+nyr(3)-2*ky)+ 1 (nxr(2)-kx)*(nyr(2)-ky)+ 4 (nxr(4)-kx)*(nyr(4)-ky)) nr=4 c space for the solution. iu = istkgt(nnu, 4) do 1 i=1,nr kxr(i)=kx kyr(i)=ky 1 continue c initial conditions for u. call setd(nnu, 0.d0,ws(iu)) call dttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i)+.1*uy(p, q, i)+u(p, q, i) a(p, q, i, 2) = uy(p, q, i)+.1*ux(p, q, i)+u(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 auy(p, q, i, i, 1) = .1 aux(p, q, i, i, 2) = .1 au(p, q, i, i, 1) = 1 au(p, q, i, i, 2) = 1 f(p, q, i) = ut(p, q, i)+ux(p, q, i)+uy(p, q, i) fut(p, q, i, i) = 1 fux(p, q, i, i) = 1 fuy(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)+.2*t-x(p)*y(q) 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-t*x(i)*y(j) 1 continue 2 continue return end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /d7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) c to print the solution at each time-step integer kx, ix, nx, ky, iy, ny integer inu, ir double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision ws(500) integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c x search grid. c find the solution at 2 * 2 points / mesh rectangle. ixs = idlumd(ws(ix), nx, 2, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2, nys) c u search grid values. ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 ma(2) = 0 c get solution. c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) temp = i1mach(2) write(temp,9001)ir,inu,(ws(i),i=iFA,IFa+nxs*nys-1) 9001 format(" for rect",i3," u(.,",i2,")=", 1((1p5e10.2/20x,1p4d10.2))) call leave return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p c the exact solution. do 3 p = 1, nu do 2 i = 1, nx do 1 j = 1, ny u(i, j, p) = t*x(i)*y(j) 1 continue 2 continue 3 continue return end PyBDSF-1.10.1/src/port3/dttgux2.f000066400000000000000000000166431420247104600162410ustar00rootroot00000000000000C$TEST DTTGU2 c main program common /cstak/ ds double precision ds(350000) external handlu, bc, af integer ndx, ndy, istkgt, is(1000), iu integer nu, nr, iyb(3), ixb(3), kx, ky integer nxr(3), nyr(3), kxr(3), kyr(3) integer idumb real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, dt double precision ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve two coupled, nonlinear heat equations. c u1 sub t = div . ( u1x, u1y ) - u1*u2 + g1 c u2 sub t = div . ( u2x, u2y ) - u1*u2 + g2 c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 2 kx = 4 ky = 4 ndx = 3 ndy = 3 nr = 3 tstart = 0 dt = 1e-2 tstop =1.d0 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ixb(1) = idumb(0.0d0, 1.0d0, ndx, kx, nxr(1)) ixb(2) = idumb(0.0d0, 1.0d0, ndx, kx, nxr(2)) ixb(3) = idumb(1.0d0, 2.0d0, ndx, kx, nxr(3)) iyb(1) = idumb(0.0d0, 1.0d0, ndy, ky, nyr(1)) iyb(2) = idumb(1.0d0, 2.0d0, ndy, ky, nyr(2)) iyb(3) = idumb(0.0d0, 1.0d0, ndy, ky, nyr(3)) c uniform grid. c space for the solution. nnu=0 do 1 i=1,nr nnu=nnu+nu*((nxr(i)-kx)*(nyr(i)-ky)) 1 continue iu = istkgt(nnu, 4) do 2 i=1,nr kxr(i)=kx kyr(i)=ky 2 continue call setd(nnu, 1.d0,ws(iu)) call dttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /d7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) integer kx, ix, nx, ky, iy, ny, inu, ir double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c for variable inu for rectangle ir c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 4) c the exact solution. call ewe2(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), inu, ir) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) ir, inu, erru 2 format(9h for rect,i3,14h error in u(.,, i2, 1 3h) =, 1pe10.2) call leave return end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer p, q double precision dexp do 2 q = 1, ny do 1 p = 1, nx a(p, q, 1, 1) = ux(p, q, 1) aux(p, q, 1, 1, 1) = 1 a(p, q, 1, 2) = uy(p, q, 1) auy(p, q, 1, 1, 2) = 1 f(p, q, 1) = ut(p, q, 1)+u(p, q, 1)*u(p, q, 2) fu(p, q, 1, 1) = u(p, q, 2) fu(p, q, 1, 2) = u(p, q, 1) fut(p, q, 1, 1) = 1 a(p, q, 2, 1) = ux(p, q, 2) aux(p, q, 2, 2, 1) = 1 a(p, q, 2, 2) = uy(p, q, 2) auy(p, q, 2, 2, 2) = 1 f(p, q, 2) = ut(p, q, 2)+u(p, q, 1)*u(p, q, 2) fu(p, q, 2, 1) = u(p, q, 2) fu(p, q, 2, 2) = u(p, q, 1) fut(p, q, 2, 2) = 1 f(p, q, 1) = f(p, q, 1)-(dexp(t*(x(p)-y(q)))*(x(p)-y(q)-2d0* 1 t*t)+1d0) f(p, q, 2) = f(p, q, 2)-(dexp(t*(y(q)-x(p)))*(y(q)-x(p)-2d0* 1 t*t)+1d0) 1 continue 2 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j double precision dexp do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-dexp(t*(x(i)-y(j))) bu(i, j, 2, 2) = 1 b(i, j, 2) = u(i, j, 2)-dexp(t*(y(j)-x(i))) 1 continue 2 continue return end subroutine ewe2(t, x, nx, y, ny, u, inu, ir) integer inu, ir, nx, ny double precision t, x(nx), y(ny), u(nx, ny) integer i, j real float double precision dble, dexp c the exact solution. do 2 i = 1, nx do 1 j = 1, ny u(i, j) = dexp(dble(float((-1)**(inu+1)))*t*(x(i)-y(j))) 1 continue 2 continue return end PyBDSF-1.10.1/src/port3/dttgux3.f000066400000000000000000000174141420247104600162370ustar00rootroot00000000000000C$TEST DTTGU3 c main program common /cstak/ ds double precision ds(350000) external handlu, bc, af integer ndx, ndy, istkgt, is(1000), iu integer nu, nr, iyb(3), ixb(3), kx, ky integer nxr(3), nyr(3), kxr(3), kyr(3) integer idumb real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, dt, ws(500) double precision tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve the layered heat equation, with kappa = 1, 1/2, 1/3, c div . ( kappa(x,y) * grad u ) = ut + g c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 nr = 3 kx = 2 ky = 2 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ixb(1) = idumb(0.0d0, 1.0d0, ndx, kx, nxr(1)) ixb(2) = idumb(0.0d0, 1.0d0, ndx, kx, nxr(2)) ixb(3) = idumb(0.0d0, 1.0d0, ndx, kx, nxr(3)) iyb(1) = idumb(0.0d0, 1.0d0, ndy, ky, nyr(1)) iyb(2) = idumb(1.0d0, 2.0d0, ndy, ky, nyr(2)) iyb(3) = idumb(2.0d0, 3.0d0, ndy, ky, nyr(3)) c space for the solution. nnu=0 do 1 i=1,nr nnu=nnu+nu*((nxr(i)-kx)*(nyr(i)-ky)) 1 continue iu = istkgt(nnu, 4) do 2 i=1,nr kxr(i)=kx kyr(i)=ky 2 continue call setd(nnu, 0.d0,ws(iu)) call dttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q double precision kappa logical temp do 7 i = 1, nu do 6 q = 1, ny do 5 p = 1, nx if (y(q) .ge. 1d0) goto 1 kappa = 1 goto 4 1 if (y(q) .ge. 2d0) goto 2 kappa = 0.5 goto 3 2 kappa = 1d0/3d0 3 continue 4 a(p, q, i, 1) = kappa*ux(p, q, i) aux(p, q, i, i, 1) = kappa a(p, q, i, 2) = kappa*uy(p, q, i) auy(p, q, i, i, 2) = kappa f(p, q, i) = ut(p, q, i) fut(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)-y(q)/kappa temp = 1d0 .lt. y(q) if (temp) temp = y(q) .lt. 2d0 if (temp) f(p, q, i) = f(p, q, i)+1d0 temp = 2d0 .lt. y(q) if (temp) temp = y(q) .lt. 3d0 if (temp) f(p, q, i) = f(p, q, i)+3d0 5 continue 6 continue 7 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j logical temp do 6 j = 1, ny do 5 i = 1, nx temp = x(i) .eq. lx if (.not. temp) temp = x(i) .eq. rx if (.not. temp) goto 1 bux(i, j, 1, 1) = 1 c left or right. c neumann bcs. b(i, j, 1) = ux(i, j, 1) goto 4 1 if (y(j) .ne. ly) goto 2 b(i, j, 1) = u(i, j, 1) c bottom. bu(i, j, 1, 1) = 1 goto 3 2 b(i, j, 1) = u(i, j, 1)-6d0*t c top. bu(i, j, 1, 1) = 1 3 continue 4 continue 5 continue 6 continue return end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /d7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) integer kx, ix, nx, ky, iy, ny, inu, ir double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c for variable inu for rectangle ir c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 4) c the exact solution. call ewe2(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), inu, ir) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) ir, inu, erru 2 format(9h for rect,i3,14h error in u(.,, i2, 1 3h) =, 1pe10.2) call leave return end subroutine ewe2(t, x, nx, y, ny, u, inu, ir) integer inu, ir, nx, ny double precision t, x(nx), y(ny), u(nx, ny), dble integer i, j c the exact solution. do 6 i = 1, nx do 5 j = 1, ny u(i, j) = dble(float(ir))*t*y(j)-dble(float(ir-1))*t if(ir.eq.3) u(i,j)=u(i,j)-t 5 continue 6 continue return end PyBDSF-1.10.1/src/port3/dttgux4.f000066400000000000000000000201761420247104600162370ustar00rootroot00000000000000C$TEST DTTGU4 c main program common /cstak/ ds double precision ds(350000) external handlu, bc, af, ic integer ndx, ndy, istkgt, is(1000), iu integer nu, nr, iyb(3), ixb(3), kx, ky integer nxr(3), nyr(3), kxr(3), kyr(3) integer idumb real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, dt double precision ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve two coupled, nonlinear heat equations. c u1 sub t = div . ( u1x, u1y ) - u1*u2 + g1 c u2 sub t = div . ( u2x, u2y ) - u1*u2 + g2 c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 2 kx = 4 ky = 4 ndx = 3 ndy = 3 nr = 3 tstart = 1.0d0 dt = 1e-2 tstop =1.01d0 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ixb(1) = idumb(0.0d0, 1.0d0, ndx, kx, nxr(1)) ixb(2) = idumb(0.0d0, 1.0d0, ndx, kx, nxr(2)) ixb(3) = idumb(1.0d0, 2.0d0, ndx, kx, nxr(3)) iyb(1) = idumb(0.0d0, 1.0d0, ndy, ky, nyr(1)) iyb(2) = idumb(1.0d0, 2.0d0, ndy, ky, nyr(2)) iyb(3) = idumb(0.0d0, 1.0d0, ndy, ky, nyr(3)) c uniform grid. c space for the solution. nnu=0 do 1 i=1,nr nnu=nnu+nu*((nxr(i)-kx)*(nyr(i)-ky)) 1 continue iu = istkgt(nnu, 4) do 2 i=1,nr kxr(i)=kx kyr(i)=ky 2 continue call dicon(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,ic) iu1=iu iwrite=i1mach(2) write(iwrite,3) 3 format(10h initially) do 5 inu=1,nu do 4 i=1,nr call gerr(kxr(i),ixb(i),nxr(i),kyr(i),iyb(i),nyr(i), 1 ws(iu1),inu,1.0d0,i) iu1=iu1+(nxr(i)-kxr(i))*(nyr(i)-kyr(i)) 4 continue 5 continue call dttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny double precision t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer p, q double precision dexp do 2 q = 1, ny do 1 p = 1, nx a(p, q, 1, 1) = ux(p, q, 1) aux(p, q, 1, 1, 1) = 1 a(p, q, 1, 2) = uy(p, q, 1) auy(p, q, 1, 1, 2) = 1 f(p, q, 1) = ut(p, q, 1)+u(p, q, 1)*u(p, q, 2) fu(p, q, 1, 1) = u(p, q, 2) fu(p, q, 1, 2) = u(p, q, 1) fut(p, q, 1, 1) = 1 a(p, q, 2, 1) = ux(p, q, 2) aux(p, q, 2, 2, 1) = 1 a(p, q, 2, 2) = uy(p, q, 2) auy(p, q, 2, 2, 2) = 1 f(p, q, 2) = ut(p, q, 2)+u(p, q, 1)*u(p, q, 2) fu(p, q, 2, 1) = u(p, q, 2) fu(p, q, 2, 2) = u(p, q, 1) fut(p, q, 2, 2) = 1 f(p, q, 1) = f(p, q, 1)-(dexp(t*(x(p)-y(q)))*(x(p)-y(q)-2d0* 1 t*t)+1d0) f(p, q, 2) = f(p, q, 2)-(dexp(t*(y(q)-x(p)))*(y(q)-x(p)-2d0* 1 t*t)+1d0) 1 continue 2 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j double precision dexp do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-dexp(t*(x(i)-y(j))) bu(i, j, 2, 2) = 1 b(i, j, 2) = u(i, j, 2)-dexp(t*(y(j)-x(i))) 1 continue 2 continue return end subroutine ic(nu,ir,xq,nxq,yq,nyq,ui) integer nu, ir, nxq, nyq double precision xq(nxq), yq(nyq), ui(nxq, nyq,nu) double precision dble, dexp integer p do 30 p=1,nu do 20 j=1,nyq do 10 i=1, nxq ui(i, j, p) = dexp(dble(float((-1)**(p+1)))*(xq(i)-yq(j))) 10 continue 20 continue 30 continue return end subroutine ewe2(t, x, nx, y, ny, u, inu, ir) integer inu, nx, ny, ir double precision t, x(nx), y(ny), u(nx, ny) integer i, j real float double precision dble, dexp c the exact solution. do 2 i = 1, nx do 1 j = 1, ny u(i, j) = dexp(dble(float((-1)**(inu+1)))*t*(x(i)-y(j))) 1 continue 2 continue return end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /d7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) integer kx, ix, nx, ky, iy, ny, inu, ir double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c for variable inu for rectangle ir c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 4) c the exact solution. call ewe2(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), inu, ir) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) ir, inu, erru 2 format(9h for rect,i3,14h error in u(.,, i2, 1 3h) =, 1pe10.2) call leave return end PyBDSF-1.10.1/src/port3/dttgux5.f000066400000000000000000000207041420247104600162350ustar00rootroot00000000000000C$TEST DTTGU5 c main program5 common /cstak/ ds double precision ds(350000) external handlu, bc, af integer ndx, ndy, istkgt, is(1000), iu, ix, temp, temp1 integer nu, nr, iyb(5), ixb(5), kx, ky integer nxr(5), nyr(5), kxr(5), kyr(5) integer idumb real errpar(2), rs(1000) logical ls(1000) complex cs(500) double precision tstart, dt, rx double precision ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve laplaces equation with real ( z*log(z) ) as solution. c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 kx = 4 ky = 4 ndx = 3 ndy = 3 nr = 5 tstart = 0 dt = 1.d0 tstop =1.d0 errpar(1) = 1e-2 errpar(2) = 1e-4 nx = ndx+2*(kx-1) rx=1.0d0 c space for x mesh for rectangle 1 ix = istkgt(nx, 4) c 0 and rx mult = kx. ixb(1)=ix do 1 i = 1, kx temp = ix+i ws(temp-1) = 0 temp = ix+nx-i ws(temp) = rx 1 continue temp = ndx-1 do 2 i = 1, temp temp1 = ix+kx-2+i ws(temp1) = rx*(dble(float(i-1))/(dble(float(ndx))-1d0))**kx 2 continue c rectangle 2 has same grid in x direction as rectanlge 1 ixb(2)=istkgt(nx, 4) call dcopy(nx, ws(ix), 1, ws(ixb(2)), 1) c uniform grid for rectanlges 3,4, and 5 in x direction ixb(3) = idumb(1.0d0, 2.0d0, ndx, kx, nxr(3)) ixb(4) = idumb(2.0d0, 3.0d0, ndx, kx, nxr(4)) ixb(5) = idumb(2.0d0, 3.0d0, ndx, kx, nxr(5)) ny = ndy+2*(ky-1) c rectangles 1,3, and 4 use the same grid in the y direction as c is used for the x direction in rectangle 1 c space for y mesh. iyb(1) = istkgt(ny, 4) call dcopy( nx, ws(ix), 1, ws(iyb(1)), 1) iyb(3) =istkgt(ny, 4) call dcopy( nx, ws(ix), 1, ws(iyb(3)), 1) iyb(4) =istkgt(ny, 4) call dcopy( nx, ws(ix), 1, ws(iyb(4)), 1) c rectangles 2 and 5 use uniform mesh in y direction iyb(2) = idumb(1.0d0, 2.0d0, ndy, ky, nyr(2)) iyb(5) = idumb(1.0d0, 2.0d0, ndy, ky, nyr(5)) c space for the solution. nnu=0 do 3 i=1,nr nxr(i)=nx nyr(i)=ny nnu=nnu+nu*((nxr(i)-kx)*(nyr(i)-ky)) 3 continue iu = istkgt(nnu, 4) do 4 i=1,nr kxr(i)=kx kyr(i)=ky 4 continue call setd(nnu, 0.0d0,ws(iu)) call dttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine af(t, xi, nx, yi, ny, nu, u, ut, ux, uy, uxt, 1 uyt, a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, 2 fuxt, fuyt) integer nu, nx, ny double precision t, xi(nx), yi(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) double precision uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) double precision aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) double precision fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i) a(p, q, i, 2) = uy(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny double precision t, x(nx), y(ny), lx, rx, ly double precision ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) double precision uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) double precision buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j double precision r, dcos, dlog, dsin, datan, theta double precision dsqrt do 6 j = 1, ny do 5 i = 1, nx if (y(j) .ne. ly) goto 1 b(i, j, 1) = uy(i, j, 1) c neumann data on bottom. buy(i, j, 1, 1) = 1 goto 4 1 r = dsqrt(x(i)**2+y(j)**2) c dirichlet data. if (x(i) .le. 0d0) goto 2 theta = datan(y(j)/x(i)) goto 3 2 theta = 2d0*datan(1d0) 3 b(i, j, 1) = u(i, j, 1)-r*(dcos(theta)*dlog(r)-theta* 1 dsin(theta)) bu(i, j, 1, 1) = 1 4 continue 5 continue 6 continue return end subroutine ewe2(t, x, nx, y, ny, u, inu, ir) integer inu,ir, nx, ny double precision t, x(nx), y(ny), u(nx, ny) integer i, j double precision r, dcos, dlog, dsin, datan, theta double precision dsqrt c the exact solution. do 6 i = 1, nx do 5 j = 1, ny r = dsqrt(x(i)**2+y(j)**2) if (x(i) .le. 0d0) goto 1 theta = datan(y(j)/x(i)) goto 2 1 theta = 2d0*datan(1d0) 2 if (r .le. 0d0) goto 3 u(i, j) = r*(dcos(theta)*dlog(r)-theta*dsin(theta)) goto 4 3 u(i, j) = 0 4 continue 5 continue 6 continue return end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv double precision t0, u0(nv), t, u(nv), dt, tstop common /d7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /d7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) integer kx, ix, nx, ky, iy, ny, inu, ir double precision u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), idlumd integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) double precision dabs, erru, dmax1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c for variable inu for rectangle ir c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = idlumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = idlumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 4) c the exact solution. call ewe2(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), inu, ir) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 4) c evaluate them. call dtsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = dmax1(erru, dabs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) ir, inu, erru 2 format(9h for rect,i3,14h error in u(.,, i2, 1 3h) =, 1pe10.2) call leave return end PyBDSF-1.10.1/src/port3/dv2axy.f000066400000000000000000000004061420247104600160430ustar00rootroot00000000000000 SUBROUTINE DV2AXY(P, W, A, X, Y) C C *** SET W = A*X + Y -- W, X, Y = P-VECTORS, A = SCALAR *** C INTEGER P DOUBLE PRECISION A, W(P), X(P), Y(P) C INTEGER I C DO 10 I = 1, P 10 W(I) = A*X(I) + Y(I) RETURN END PyBDSF-1.10.1/src/port3/dv2nrm.f000066400000000000000000000027351420247104600160450ustar00rootroot00000000000000 DOUBLE PRECISION FUNCTION DV2NRM(P, X) C C *** RETURN THE 2-NORM OF THE P-VECTOR X, TAKING *** C *** CARE TO AVOID THE MOST LIKELY UNDERFLOWS. *** C INTEGER P DOUBLE PRECISION X(P) C INTEGER I, J DOUBLE PRECISION ONE, R, SCALE, SQTETA, T, XI, ZERO C/+ DOUBLE PRECISION DSQRT C/ DOUBLE PRECISION DR7MDC EXTERNAL DR7MDC C C/6 C DATA ONE/1.D+0/, ZERO/0.D+0/ C/7 PARAMETER (ONE=1.D+0, ZERO=0.D+0) SAVE SQTETA C/ DATA SQTETA/0.D+0/ C IF (P .GT. 0) GO TO 10 DV2NRM = ZERO GO TO 999 10 DO 20 I = 1, P IF (X(I) .NE. ZERO) GO TO 30 20 CONTINUE DV2NRM = ZERO GO TO 999 C 30 SCALE = DABS(X(I)) IF (I .LT. P) GO TO 40 DV2NRM = SCALE GO TO 999 40 T = ONE IF (SQTETA .EQ. ZERO) SQTETA = DR7MDC(2) C C *** SQTETA IS (SLIGHTLY LARGER THAN) THE SQUARE ROOT OF THE C *** SMALLEST POSITIVE FLOATING POINT NUMBER ON THE MACHINE. C *** THE TESTS INVOLVING SQTETA ARE DONE TO PREVENT UNDERFLOWS. C J = I + 1 DO 60 I = J, P XI = DABS(X(I)) IF (XI .GT. SCALE) GO TO 50 R = XI / SCALE IF (R .GT. SQTETA) T = T + R*R GO TO 60 50 R = SCALE / XI IF (R .LE. SQTETA) R = ZERO T = ONE + T * R*R SCALE = XI 60 CONTINUE C DV2NRM = SCALE * DSQRT(T) 999 RETURN C *** LAST LINE OF DV2NRM FOLLOWS *** END PyBDSF-1.10.1/src/port3/dv7cpy.f000066400000000000000000000003401420247104600160370ustar00rootroot00000000000000 SUBROUTINE DV7CPY(P, Y, X) C C *** SET Y = X, WHERE X AND Y ARE P-VECTORS *** C INTEGER P DOUBLE PRECISION X(P), Y(P) C INTEGER I C DO 10 I = 1, P 10 Y(I) = X(I) RETURN END PyBDSF-1.10.1/src/port3/dv7dfl.f000066400000000000000000000061721420247104600160220ustar00rootroot00000000000000 SUBROUTINE DV7DFL(ALG, LV, V) C C *** SUPPLY ***SOL (VERSION 2.3) DEFAULT VALUES TO V *** C C *** ALG = 1 MEANS REGRESSION CONSTANTS. C *** ALG = 2 MEANS GENERAL UNCONSTRAINED OPTIMIZATION CONSTANTS. C INTEGER ALG, LV DOUBLE PRECISION V(LV) C DOUBLE PRECISION DR7MDC EXTERNAL DR7MDC C DR7MDC... RETURNS MACHINE-DEPENDENT CONSTANTS C DOUBLE PRECISION MACHEP, MEPCRT, ONE, SQTEPS, THREE C C *** SUBSCRIPTS FOR V *** C INTEGER AFCTOL, BIAS, COSMIN, DECFAC, DELTA0, DFAC, DINIT, DLTFDC, 1 DLTFDJ, DTINIT, D0INIT, EPSLON, ETA0, FUZZ, HUBERC, 2 INCFAC, LMAX0, LMAXS, PHMNFC, PHMXFC, RDFCMN, RDFCMX, 3 RFCTOL, RLIMIT, RSPTOL, SCTOL, SIGMIN, TUNER1, TUNER2, 4 TUNER3, TUNER4, TUNER5, XCTOL, XFTOL C C/6 C DATA ONE/1.D+0/, THREE/3.D+0/ C/7 PARAMETER (ONE=1.D+0, THREE=3.D+0) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA AFCTOL/31/, BIAS/43/, COSMIN/47/, DECFAC/22/, DELTA0/44/, C 1 DFAC/41/, DINIT/38/, DLTFDC/42/, DLTFDJ/43/, DTINIT/39/, C 2 D0INIT/40/, EPSLON/19/, ETA0/42/, FUZZ/45/, HUBERC/48/, C 3 INCFAC/23/, LMAX0/35/, LMAXS/36/, PHMNFC/20/, PHMXFC/21/, C 4 RDFCMN/24/, RDFCMX/25/, RFCTOL/32/, RLIMIT/46/, RSPTOL/49/, C 5 SCTOL/37/, SIGMIN/50/, TUNER1/26/, TUNER2/27/, TUNER3/28/, C 6 TUNER4/29/, TUNER5/30/, XCTOL/33/, XFTOL/34/ C/7 PARAMETER (AFCTOL=31, BIAS=43, COSMIN=47, DECFAC=22, DELTA0=44, 1 DFAC=41, DINIT=38, DLTFDC=42, DLTFDJ=43, DTINIT=39, 2 D0INIT=40, EPSLON=19, ETA0=42, FUZZ=45, HUBERC=48, 3 INCFAC=23, LMAX0=35, LMAXS=36, PHMNFC=20, PHMXFC=21, 4 RDFCMN=24, RDFCMX=25, RFCTOL=32, RLIMIT=46, RSPTOL=49, 5 SCTOL=37, SIGMIN=50, TUNER1=26, TUNER2=27, TUNER3=28, 6 TUNER4=29, TUNER5=30, XCTOL=33, XFTOL=34) C/ C C------------------------------- BODY -------------------------------- C MACHEP = DR7MDC(3) V(AFCTOL) = 1.D-20 IF (MACHEP .GT. 1.D-10) V(AFCTOL) = MACHEP**2 V(DECFAC) = 0.5D+0 SQTEPS = DR7MDC(4) V(DFAC) = 0.6D+0 V(DTINIT) = 1.D-6 MEPCRT = MACHEP ** (ONE/THREE) V(D0INIT) = 1.D+0 V(EPSLON) = 0.1D+0 V(INCFAC) = 2.D+0 V(LMAX0) = 1.D+0 V(LMAXS) = 1.D+0 V(PHMNFC) = -0.1D+0 V(PHMXFC) = 0.1D+0 V(RDFCMN) = 0.1D+0 V(RDFCMX) = 4.D+0 V(RFCTOL) = DMAX1(1.D-10, MEPCRT**2) V(SCTOL) = V(RFCTOL) V(TUNER1) = 0.1D+0 V(TUNER2) = 1.D-4 V(TUNER3) = 0.75D+0 V(TUNER4) = 0.5D+0 V(TUNER5) = 0.75D+0 V(XCTOL) = SQTEPS V(XFTOL) = 1.D+2 * MACHEP C IF (ALG .GE. 2) GO TO 10 C C *** REGRESSION VALUES C V(COSMIN) = DMAX1(1.D-6, 1.D+2 * MACHEP) V(DINIT) = 0.D+0 V(DELTA0) = SQTEPS V(DLTFDC) = MEPCRT V(DLTFDJ) = SQTEPS V(FUZZ) = 1.5D+0 V(HUBERC) = 0.7D+0 V(RLIMIT) = DR7MDC(5) V(RSPTOL) = 1.D-3 V(SIGMIN) = 1.D-4 GO TO 999 C C *** GENERAL OPTIMIZATION VALUES C 10 V(BIAS) = 0.8D+0 V(DINIT) = -1.0D+0 V(ETA0) = 1.0D+3 * MACHEP C 999 RETURN C *** LAST CARD OF DV7DFL FOLLOWS *** END PyBDSF-1.10.1/src/port3/dv7ipr.f000066400000000000000000000011621420247104600160410ustar00rootroot00000000000000 SUBROUTINE DV7IPR(N, IP, X) C C PERMUTE X SO THAT X.OUTPUT(I) = X.INPUT(IP(I)). C IP IS UNCHANGED ON OUTPUT. C INTEGER N INTEGER IP(N) DOUBLE PRECISION X(N) C INTEGER I, J, K DOUBLE PRECISION T DO 30 I = 1, N J = IP(I) IF (J .EQ. I) GO TO 30 IF (J .GT. 0) GO TO 10 IP(I) = -J GO TO 30 10 T = X(I) K = I 20 X(K) = X(J) K = J J = IP(K) IP(K) = -J IF (J .GT. I) GO TO 20 X(K) = T 30 CONTINUE 999 RETURN C *** LAST LINE OF DV7IPR FOLLOWS *** END PyBDSF-1.10.1/src/port3/dv7prm.f000066400000000000000000000012041420247104600160420ustar00rootroot00000000000000 SUBROUTINE DV7PRM(N, IP, X) C C PERMUTE X SO THAT X.OUTPUT(IP(I)) = X.INPUT(I). C IP IS UNCHANGED ON OUTPUT. C INTEGER N INTEGER IP(N) DOUBLE PRECISION X(N) C INTEGER I, J, K DOUBLE PRECISION S, T DO 30 I = 1, N J = IP(I) IF (J .EQ. I) GO TO 30 IF (J .GT. 0) GO TO 10 IP(I) = -J GO TO 30 10 T = X(I) 20 S = X(J) X(J) = T T = S K = J J = IP(K) IP(K) = -J IF (J .GT. I) GO TO 20 X(J) = T 30 CONTINUE 999 RETURN C *** LAST LINE OF DV7PRM FOLLOWS *** END PyBDSF-1.10.1/src/port3/dv7scl.f000066400000000000000000000004141420247104600160270ustar00rootroot00000000000000 SUBROUTINE DV7SCL(N, X, A, Y) C C *** SET X(I) = A*Y(I), I = 1(1)N *** C INTEGER N DOUBLE PRECISION A, X(N), Y(N) C INTEGER I C DO 10 I = 1, N 10 X(I) = A * Y(I) 999 RETURN C *** LAST LINE OF DV7SCL FOLLOWS *** END PyBDSF-1.10.1/src/port3/dv7scp.f000066400000000000000000000003161420247104600160340ustar00rootroot00000000000000 SUBROUTINE DV7SCP(P, Y, S) C C *** SET P-VECTOR Y TO SCALAR S *** C INTEGER P DOUBLE PRECISION S, Y(P) C INTEGER I C DO 10 I = 1, P 10 Y(I) = S RETURN END PyBDSF-1.10.1/src/port3/dv7shf.f000066400000000000000000000005271420247104600160330ustar00rootroot00000000000000 SUBROUTINE DV7SHF(N, K, X) C C *** SHIFT X(K),...,X(N) LEFT CIRCULARLY ONE POSITION *** C INTEGER N, K DOUBLE PRECISION X(N) C INTEGER I, NM1 DOUBLE PRECISION T C IF (K .GE. N) GO TO 999 NM1 = N - 1 T = X(K) DO 10 I = K, NM1 10 X(I) = X(I+1) X(N) = T 999 RETURN END PyBDSF-1.10.1/src/port3/dv7swp.f000066400000000000000000000005201420247104600160550ustar00rootroot00000000000000 SUBROUTINE DV7SWP(N, X, Y) C C *** INTERCHANGE N-VECTORS X AND Y. *** C INTEGER N DOUBLE PRECISION X(N), Y(N) C INTEGER I DOUBLE PRECISION T C DO 10 I = 1, N T = X(I) X(I) = Y(I) Y(I) = T 10 CONTINUE 999 RETURN C *** LAST CARD OF DV7SWP FOLLOWS *** END PyBDSF-1.10.1/src/port3/dv7vmp.f000066400000000000000000000006221420247104600160510ustar00rootroot00000000000000 SUBROUTINE DV7VMP(N, X, Y, Z, K) C C *** SET X(I) = Y(I) * Z(I)**K, 1 .LE. I .LE. N (FOR K = 1 OR -1) *** C INTEGER N, K DOUBLE PRECISION X(N), Y(N), Z(N) INTEGER I C IF (K .GE. 0) GO TO 20 DO 10 I = 1, N 10 X(I) = Y(I) / Z(I) GO TO 999 C 20 DO 30 I = 1, N 30 X(I) = Y(I) * Z(I) 999 RETURN C *** LAST CARD OF DV7VMP FOLLOWS *** END PyBDSF-1.10.1/src/port3/dw7zbf.f000066400000000000000000000052321420247104600160330ustar00rootroot00000000000000 SUBROUTINE DW7ZBF (L, N, S, W, Y, Z) C C *** COMPUTE Y AND Z FOR DL7UPD CORRESPONDING TO BFGS UPDATE. C INTEGER N DOUBLE PRECISION L(1), S(N), W(N), Y(N), Z(N) C DIMENSION L(N*(N+1)/2) C C-------------------------- PARAMETER USAGE -------------------------- C C L (I/O) CHOLESKY FACTOR OF HESSIAN, A LOWER TRIANG. MATRIX STORED C COMPACTLY BY ROWS. C N (INPUT) ORDER OF L AND LENGTH OF S, W, Y, Z. C S (INPUT) THE STEP JUST TAKEN. C W (OUTPUT) RIGHT SINGULAR VECTOR OF RANK 1 CORRECTION TO L. C Y (INPUT) CHANGE IN GRADIENTS CORRESPONDING TO S. C Z (OUTPUT) LEFT SINGULAR VECTOR OF RANK 1 CORRECTION TO L. C C------------------------------- NOTES ------------------------------- C C *** ALGORITHM NOTES *** C C WHEN S IS COMPUTED IN CERTAIN WAYS, E.G. BY GQTSTP OR C DBLDOG, IT IS POSSIBLE TO SAVE N**2/2 OPERATIONS SINCE (L**T)*S C OR L*(L**T)*S IS THEN KNOWN. C IF THE BFGS UPDATE TO L*(L**T) WOULD REDUCE ITS DETERMINANT TO C LESS THAN EPS TIMES ITS OLD VALUE, THEN THIS ROUTINE IN EFFECT C REPLACES Y BY THETA*Y + (1 - THETA)*L*(L**T)*S, WHERE THETA C (BETWEEN 0 AND 1) IS CHOSEN TO MAKE THE REDUCTION FACTOR = EPS. C C *** GENERAL *** C C CODED BY DAVID M. GAY (FALL 1979). C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS MCS-7600324 AND C MCS-7906671. C C------------------------ EXTERNAL QUANTITIES ------------------------ C C *** FUNCTIONS AND SUBROUTINES CALLED *** C DOUBLE PRECISION DD7TPR EXTERNAL DD7TPR, DL7IVM, DL7TVM C DD7TPR RETURNS INNER PRODUCT OF TWO VECTORS. C DL7IVM MULTIPLIES L**-1 TIMES A VECTOR. C DL7TVM MULTIPLIES L**T TIMES A VECTOR. C C *** INTRINSIC FUNCTIONS *** C/+ DOUBLE PRECISION DSQRT C/ C-------------------------- LOCAL VARIABLES -------------------------- C INTEGER I DOUBLE PRECISION CS, CY, EPS, EPSRT, ONE, SHS, YS, THETA C C *** DATA INITIALIZATIONS *** C C/6 C DATA EPS/0.1D+0/, ONE/1.D+0/ C/7 PARAMETER (EPS=0.1D+0, ONE=1.D+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C CALL DL7TVM(N, W, L, S) SHS = DD7TPR(N, W, W) YS = DD7TPR(N, Y, S) IF (YS .GE. EPS*SHS) GO TO 10 THETA = (ONE - EPS) * SHS / (SHS - YS) EPSRT = DSQRT(EPS) CY = THETA / (SHS * EPSRT) CS = (ONE + (THETA-ONE)/EPSRT) / SHS GO TO 20 10 CY = ONE / (DSQRT(YS) * DSQRT(SHS)) CS = ONE / SHS 20 CALL DL7IVM(N, Z, L, Y) DO 30 I = 1, N 30 Z(I) = CY * Z(I) - CS * W(I) C 999 RETURN C *** LAST CARD OF DW7ZBF FOLLOWS *** END PyBDSF-1.10.1/src/port3/dxtrap.f000066400000000000000000000104121420247104600161260ustar00rootroot00000000000000 SUBROUTINE DXTRAP(TM,M,NVAR,NG,KMAX,XPOLY,T,ERROR,EBEST) C C ASSUME AN EXPANSION FOR THE VECTOR VALUED FUNCTION T(H) OF THE FORM C C T(H) = T(0) + SUM(J=1,2,3,...)(A(J)*H**(J*GAMMA)) C C WHERE THE A(J) ARE CONSTANT VECTORS AND GAMMA IS A POSITIVE CONSTANT. C C GIVEN T(H(M)), WHERE H(M)=H0/N(M), M=1,2,3,..., THIS ROUTINE USES C POLYNOMIAL (XPOLY), OR RATIONAL (.NOT.XPOLY), EXTRAPOLATION TO C SEQUENTIALLY APPROXIMATE T(0). C C INPUT C C TM - TM = T(H(M)) FOR THIS CALL. C M - H(M) WAS USED TO OBTAIN TM. C NVAR - THE LENGTH OF THE VECTOR TM. C NG - THE DOUBLE PRECISION VALUES C C NG(I) = N(I)**GAMMA C C FOR I=1,...,M. NG MUST BE A MONOTONE INCREASING ARRAY. C KMAX - THE MAXIMUM NUMBER OF COLUMNS TO BE USED IN THE C EXTRAPOLATION PROCESS. C XPOLY - IF XPOLY=.TRUE., THEN _USE_ POLYNOMIAL EXTRAPOLATION. C IF XPOLY=.FALSE., THEN _USE_ RATIONAL EXTRAPOLATION. C T - THE BOTTOM EDGE OF THE EXTRAPOLATION LOZENGE. C T(I,J) SHOULD CONTAIN THE J-TH EXTRAPOLATE OF THE I-TH C COMPONENT OF T(H) BASED ON THE SEQUENCE H(1),...,H(M-1), C FOR I=1,...,NVAR AND J=1,...,MIN(M-1,KMAX). C C WHEN M=1, T MAY CONTAIN ANYTHING. C C FOR M.GT.1, NOTE THAT THE OUTPUT VALUE OF T AT THE C (M-1)-ST CALL IS THE INPUT FOR THE M-TH CALL. C THUS, THE USER NEED NEVER PUT ANYTHING INTO T, C BUT HE CAN NOT ALTER ANY ELEMENT OF T BETWEEN C CALLS TO DXTRAP. C C OUTPUT C C TM - TM(I)=THE MOST ACCURATE APPROXIMATION IN THE LOZENGE C FOR THE I-TH VARIABLE, I=1,...,NVAR. C T - T(I,J) CONTAINS THE J-TH EXTRAPOLATE OF THE I-TH C COMPONENT OF T(H) BASED ON THE SEQUENCE H(1),...,H(M), C FOR I=1,...,NVAR AND J=1,...,MIN(M,KMAX). C ERROR - ERROR(I,J) GIVES THE SIGNED BULIRSCH-STOER ESTIMATE OF THE C ERROR IN THE J-TH EXTRAPOLATE OF THE I-TH COMPONENT OF C T(H) BASED ON THE SEQUENCE H(1),...,H(M-1), C FOR I=1,...,NVAR AND J=1,...,MIN(M-1,KMAX). C IF ERROR=EBEST AS ARRAYS, THEN THE ABOVE ELEMENTS C ARE NOT STORED. RATHER, EBEST=ERROR IS LOADED AS DESCRIBED C BELOW. C EBEST - EBEST(I)=THE ABSOLUTE VALUE OF THE ERROR IN TM(I), C I=1,...,NVAR. THIS ARRAY IS FULL OF GARBAGE WHEN M=1. C C SCRATCH SPACE ALLOCATED - MIN(M-1,KMAX) DOUBLE PRECISION WORDS + C C MIN(M-1,KMAX) INTEGER WORDS. C C ERROR STATES - C C 1 - M.LT.1. C 2 - NVAR.LT.1. C 3 - NG(1).LT.1. C 4 - KMAX.LT.1. C 5 - NG IS NOT MONOTONE INCREASING. C DOUBLE PRECISION TM(NVAR),NG(M),T(NVAR,1) C DOUBLE PRECISION T(NVAR,MIN(M,KMAX)) REAL ERROR(NVAR,1),EBEST(NVAR) C REAL ERROR(NVAR,MIN(M-1,KMAX)) LOGICAL XPOLY C LOGICAL ESAVE C COMMON /CSTAK/DS DOUBLE PRECISION DS(500) DOUBLE PRECISION WS(1) REAL RS(1000) EQUIVALENCE (DS(1),WS(1)),(DS(1),RS(1)) C C ... CHECK THE INPUT. C C/6S C IF (M.LT.1) CALL SETERR(15HDXTRAP - M.LT.1,15,1,2) C IF (NVAR.LT.1) CALL SETERR(18HDXTRAP - NVAR.LT.1,18,2,2) C IF (NG(1).LT.1.0D0) CALL SETERR(19HDXTRAP - NG(1).LT.1,19,3,2) C IF (KMAX.LT.1) CALL SETERR(18HDXTRAP - KMAX.LT.1,18,4,2) C/7S IF (M.LT.1) CALL SETERR('DXTRAP - M.LT.1',15,1,2) IF (NVAR.LT.1) CALL SETERR('DXTRAP - NVAR.LT.1',18,2,2) IF (NG(1).LT.1.0D0) CALL SETERR('DXTRAP - NG(1).LT.1',19,3,2) IF (KMAX.LT.1) CALL SETERR('DXTRAP - KMAX.LT.1',18,4,2) C/ C IF (M.EQ.1) GO TO 20 C DO 10 I=2,M C/6S C IF (NG(I-1).GE.NG(I)) CALL SETERR C 1 (38HDXTRAP - NG IS NOT MONOTONE INCREASING,38,5,2) C/7S IF (NG(I-1).GE.NG(I)) CALL SETERR 1 ('DXTRAP - NG IS NOT MONOTONE INCREASING',38,5,2) C/ 10 CONTINUE C C ... SEE IF ERROR=EBEST AS ARRAYS. IF (ESAVE), THEN LOAD ERROR. C 20 ERROR(1,1)=1.0E0 EBEST(1)=2.0E0 ESAVE=ERROR(1,1).NE.EBEST(1) C C ... ALLOCATE SCRATCH SPACE. C IRHG=1 IEMAG=1 IF (M.GT.1) IRHG=ISTKGT(MIN0(M-1,KMAX),4) IF (M.GT.1) IEMAG=ISTKGT(MIN0(M-1,KMAX),3) C CALL D0XTRP(TM,M,NVAR,NG,KMAX,XPOLY,T,ERROR,EBEST,WS(IRHG), 1 RS(IEMAG),ESAVE) C IF (M.GT.1) CALL ISTKRL(2) C RETURN C END PyBDSF-1.10.1/src/port3/dzero.f000066400000000000000000000066451420247104600157640ustar00rootroot00000000000000 DOUBLE PRECISION FUNCTION DZERO(F,A,B,T) C C FINDS THE REAL ROOT OF THE FUNCTION F LYING BETWEEN A AND B C TO WITHIN A TOLERANCE OF C C 6*D1MACH(3) * DABS(DZERO) + 2 * T C C F(A) AND F(B) MUST HAVE OPPOSITE SIGNS C C THIS IS BRENTS ALGORITHM C C A, STORED IN SA, IS THE PREVIOUS BEST APPROXIMATION (I.E. THE OLD B) C B, STORED IN SB, IS THE CURRENT BEST APPROXIMATION C C IS THE MOST RECENTLY COMPUTED POINT SATISFYING F(B)*F(C) .LT. 0 C D CONTAINS THE CORRECTION TO THE APPROXIMATION C E CONTAINS THE PREVIOUS VALUE OF D C M CONTAINS THE BISECTION QUANTITY (C-B)/2 C DOUBLE PRECISION F,A,B,T,TT,SA,SB,C,D,E,FA,FB,FC,TOL,M,P,Q,R,S EXTERNAL F DOUBLE PRECISION D1MACH C TT = T IF (T .LE. 0.0D0) TT = 10.D0*D1MACH(1) C SA = A SB = B FA = F(SA) FB = F(SB) IF (FA .NE. 0.0D0) GO TO 5 DZERO = SA RETURN 5 IF (FB .EQ. 0.0D0) GO TO 140 C/6S C IF (DSIGN(FA,FB) .EQ. FA) CALL SETERR( C 1 47H DZERO - F(A) AND F(B) ARE NOT OF OPPOSITE SIGN, 47, 1, 1) C/7S IF (DSIGN(FA,FB) .EQ. FA) CALL SETERR( 1 ' DZERO - F(A) AND F(B) ARE NOT OF OPPOSITE SIGN', 47, 1, 1) C/ C 10 C = SA FC = FA E = SB-SA D = E C C INTERCHANGE B AND C IF DABS F(C) .LT. DABS F(B) C 20 IF (DABS(FC).GE.DABS(FB)) GO TO 30 SA = SB SB = C C = SA FA = FB FB = FC FC = FA C 30 TOL = 2.0D0*D1MACH(4)*DABS(SB)+TT M = 0.5D0*(C-SB) C C SUCCESS INDICATED BY M REDUCES TO UNDER TOLERANCE OR C BY F(B) = 0 C IF ((DABS(M).LE.TOL).OR.(FB.EQ.0.0D0)) GO TO 140 C C A BISECTION IS FORCED IF E, THE NEXT-TO-LAST CORRECTION C WAS LESS THAN THE TOLERANCE OR IF THE PREVIOUS B GAVE C A SMALLER F(B). OTHERWISE GO TO 40. C IF ((DABS(E).GE.TOL).AND.(DABS(FA).GE.DABS(FB))) GO TO 40 E = M D = E GO TO 100 40 S = FB/FA C C QUADRATIC INTERPOLATION CAN ONLY BE DONE IF A (IN SA) C AND C ARE DIFFERENT POINTS. C OTHERWISE DO THE FOLLOWING LINEAR INTERPOLATION C IF (SA.NE.C) GO TO 50 P = 2.0D0*M*S Q = 1.0D0-S GO TO 60 C C INVERSE QUADRATIC INTERPOLATION C 50 Q = FA/FC R = FB/FC P = S*(2.0D0*M*Q*(Q-R)-(SB-SA)*(R-1.0D0)) Q = (Q-1.0D0)*(R-1.0D0)*(S-1.0D0) 60 IF (P.LE.0.0D0) GO TO 70 Q = -Q GO TO 80 70 P = -P C C UPDATE THE QUANTITIES USING THE NEWLY COMPUTED C INTERPOLATE UNLESS IT WOULD EITHER FORCE THE C NEW POINT TOO FAR TO ONE SIDE OF THE INTERVAL C OR WOULD REPRESENT A CORRECTION GREATER THAN C HALF THE PREVIOUS CORRECTION. C C IN THESE LAST TWO CASES - DO THE BISECTION C BELOW (FROM STATEMENT 90 TO 100) C 80 S = E E = D IF ((2.0D0*P.GE.3.0D0*M*Q-DABS(TOL*Q)).OR. 1 (P.GE.DABS(0.5D0*S*Q))) GO TO 90 D = P/Q GO TO 100 90 E = M D = E C C SET A TO THE PREVIOUS B C 100 SA = SB FA = FB C C IF THE CORRECTION TO BE MADE IS SMALLER THAN C THE TOLERANCE, JUST TAKE A DELTA STEP (DELTA=TOLERANCE) C B = B + DELTA * SIGN(M) C IF (DABS(D).LE.TOL) GO TO 110 SB = SB+D GO TO 130 C 110 IF (M.LE.0.0D0) GO TO 120 SB = SB+TOL GO TO 130 C 120 SB = SB-TOL 130 FB = F(SB) C C IF F(B) AND F(C) HAVE THE SAME SIGN ONLY C LINEAR INTERPOLATION (NOT INVERSE QUADRATIC) C CAN BE DONE C IF ((FB.GT.0.0D0).AND.(FC.GT.0.0D0)) GO TO 10 IF ((FB.LE.0.0D0).AND.(FC.LE.0.0D0)) GO TO 10 GO TO 20 C C***SUCCESS*** 140 DZERO = SB RETURN END PyBDSF-1.10.1/src/port3/e9rint.f000066400000000000000000000054231420247104600160440ustar00rootroot00000000000000 SUBROUTINE E9RINT(MESSG,NW,NERR,SAVE) C C THIS ROUTINE STORES THE CURRENT ERROR MESSAGE OR PRINTS THE OLD ONE, C IF ANY, DEPENDING ON WHETHER OR NOT SAVE = .TRUE. . C C CHANGED, BY P.FOX, MAY 18, 1983, FROM THE ORIGINAL VERSION IN ORDER C TO GET RID OF THE FORTRAN CARRIAGE CONTROL LINE OVERWRITE C CHARACTER +, WHICH HAS ALWAYS CAUSED TROUBLE. C FOR THE RECORD, THE PREVIOUS VERSION HAD THE FOLLOWING ARRAY C AND CALLS - (WHERE CCPLUS WAS DECLARED OF TYPE INTEGER) C C DATA CCPLUS / 1H+ / C C DATA FMT( 1) / 1H( / C DATA FMT( 2) / 1HA / C DATA FMT( 3) / 1H1 / C DATA FMT( 4) / 1H, / C DATA FMT( 5) / 1H1 / C DATA FMT( 6) / 1H4 / C DATA FMT( 7) / 1HX / C DATA FMT( 8) / 1H, / C DATA FMT( 9) / 1H7 / C DATA FMT(10) / 1H2 / C DATA FMT(11) / 1HA / C DATA FMT(12) / 1HX / C DATA FMT(13) / 1HX / C DATA FMT(14) / 1H) / C C CALL S88FMT(2,I1MACH(6),FMT(12)) C WRITE(IWUNIT,FMT) CCPLUS,(MESSGP(I),I=1,NWP) C C/6S C INTEGER MESSG(NW) C/7S CHARACTER*1 MESSG(NW) C/ LOGICAL SAVE C C MESSGP STORES AT LEAST THE FIRST 72 CHARACTERS OF THE PREVIOUS C MESSAGE. ITS LENGTH IS MACHINE DEPENDENT AND MUST BE AT LEAST C C 1 + 71/(THE NUMBER OF CHARACTERS STORED PER INTEGER WORD). C C/6S C INTEGER MESSGP(36),FMT(10), FMT10(10) C EQUIVALENCE (FMT(1),FMT10(1)) C/7S CHARACTER*1 MESSGP(72),FMT(10) CHARACTER*10 FMT10 EQUIVALENCE (FMT(1),FMT10) C/ C C START WITH NO PREVIOUS MESSAGE. C C/6S C DATA MESSGP(1)/1H1/, NWP/0/, NERRP/0/ C/7S DATA MESSGP(1)/'1'/, NWP/0/, NERRP/0/ C/ C C SET UP THE FORMAT FOR PRINTING THE ERROR MESSAGE. C THE FORMAT IS SIMPLY (A1,14X,72AXX) WHERE XX=I1MACH(6) IS THE C NUMBER OF CHARACTERS STORED PER INTEGER WORD. C C/6S C DATA FMT( 1) / 1H( / C DATA FMT( 2) / 1H3 / C DATA FMT( 3) / 1HX / C DATA FMT( 4) / 1H, / C DATA FMT( 5) / 1H7 / C DATA FMT( 6) / 1H2 / C DATA FMT( 7) / 1HA / C DATA FMT( 8) / 1HX / C DATA FMT( 9) / 1HX / C DATA FMT(10) / 1H) / C/7S DATA FMT( 1) / '(' / DATA FMT( 2) / '3' / DATA FMT( 3) / 'X' / DATA FMT( 4) / ',' / DATA FMT( 5) / '7' / DATA FMT( 6) / '2' / DATA FMT( 7) / 'A' / DATA FMT( 8) / 'X' / DATA FMT( 9) / 'X' / DATA FMT(10) / ')' / C/ C IF (.NOT.SAVE) GO TO 20 C C SAVE THE MESSAGE. C NWP=NW NERRP=NERR DO 10 I=1,NW 10 MESSGP(I)=MESSG(I) C GO TO 30 C 20 IF (I8SAVE(1,0,.FALSE.).EQ.0) GO TO 30 C C PRINT THE MESSAGE. C IWUNIT=I1MACH(4) WRITE(IWUNIT,9000) NERRP 9000 FORMAT(7H ERROR ,I4,4H IN ) C C/6S C CALL S88FMT(2,I1MACH(6),FMT( 8)) C/7S CALL S88FMT(2, 1, FMT(8)) C/ WRITE(IWUNIT,FMT10) (MESSGP(I),I=1,NWP) C 30 RETURN C END PyBDSF-1.10.1/src/port3/eigen.f000066400000000000000000000056201420247104600157200ustar00rootroot00000000000000 SUBROUTINE EIGEN(NM,N,A,WR,WI,Z) COMMON/CSTAK/DSTAK(500) C REAL A(NM,N),WR(N),WI(N),Z(NM,N) REAL RSTAK(1000) C EQUIVALENCE (DSTAK(1),RSTAK(1)) C C EIGEN FINDS THE EIGENVALUES AND EIGENVECTORS C OF A REAL MATRIX (NOT IMAGINARY) BY C CALLING THE SEQUENCE OF SUBROUTINES C ORTHE,ORTRA, AND HQR2, WHICH, IN TURN, ARE C THE EISPACK ROUTINES ORTHES, ORTRAN, AND HQR2, C ADJUSTED FOR _USE_ IN THE PORT LIBRARY. C C ON INPUT - C C NM - AN INTEGER INPUT VARIABLE SET EQUAL TO C THE ROW DIMENSION OF THE TWO-DIMENSIONAL ARRAYS C A AND Z AS SPECIFIED IN THE DIMENSION STATEMENTS C FOR A AND Z IN THE CALLING PROGRAM. C C N - AN INTEGER INPUT VARIABLE SET EQUAL TO THE C ORDER OF THE MATRIX A. C C N MUST NOT BE GREATER THAN NM. C C A - THE MATRIX, A REAL TWO-DIMENSIONAL C ARRAY WITH ROW DIMENSION NM AND COLUMN C DIMENSION AT LEAST N. C C A IS OVERWRITTEN. C C C C ON OUTPUT - C C WR - A REAL ARRAY OF DIMENSION C AT LEAST N CONTAINING THE REAL PARTS OF THE EIGENVALUES C C WI - A REAL ARRAY OF DIMENSION C AT LEAST N CONTAINING THE IMAGINARY PARTS OF THE EIGENVALUES. C C THE EIGENVALUES ARE UNORDERED EXCEPT THAT C COMPLEX CONJUGATE PAIRS OF EIGENVALUES C APPEAR CONSECUTIVELY WITH THE EIGENVALUE HAVING C THE POSITIVE IMAGINARY PART FIRST. C C Z - A REAL TWO-DIMENSIONAL ARRAY C WITH ROW DIMENSION NM AND COLUMN DIMENSION C AT LEAST N CONTAINING THE REAL AND IMAGINARY PARTS C OF THE EIGENVECTORS. C C IF THE J-TH EIGENVALUE IS REAL, THE J-TH C COLUMN OF Z CONTAINS ITS EIGENVECTOR. C C IF THE J-TH EIGENVALUE IS COMPLEX WITH C POSITIVE REAL PART, THE J-TH AND (J+1)-TH C COLUMNS OF Z CONTAIN THE REAL AND IMAGINARY C PARTS OF ITS EIGENVECTOR. C C THE CONJUGATE OF THIS VECTOR IS THE C EIGENVECTOR FOR THE CONJUGATE EIGENVALUE. C THE EIGENVECTORS ARE NOT NORMALIZED. C C C ERROR STATES - C C 1 - N IS GREATER THAN NM C C K - THE K-TH EIGENVALUE COULD NOT BE COMPUTED C WITHIN 30 ITERATIONS. C C THE EIGENVALUES IN THE WR AND WRI ARRAYS C SHOULD BE CORRECT FOR INDICES C K+1, K+2,...,N, BUT NO EIGENVECTORS ARE COMPUTED. C C C C C CHECK FOR INPUT ERROR IN N C C/6S C IF (N .GT. NM) CALL SETERR( C 1 29H EIGEN - N IS GREATER THAN NM,29,1,2) C/7S IF (N .GT. NM) CALL SETERR( 1 ' EIGEN - N IS GREATER THAN NM',29,1,2) C/ C C ALLOCATE A SCRATCH VECTOR IORT = ISTKGT(N,3) C CALL ORTHE (NM,N,1,N,A,RSTAK(IORT)) CALL ORTRA (NM,N,1,N,A,RSTAK(IORT),Z) CALL HQR2 (NM,N,1,N,A,WR,WI,Z,IERR) C IF (IERR .NE. 0) GO TO 10 CALL ISTKRL(1) RETURN C/6S C 10 CALL SETERR( C 1 34H EIGEN - FAILED ON THAT EIGENVALUE,34,IERR,1) C/7S 10 CALL SETERR( 1 ' EIGEN - FAILED ON THAT EIGENVALUE',34,IERR,1) C/ C CALL ISTKRL(1) RETURN END PyBDSF-1.10.1/src/port3/enter.f000066400000000000000000000023641420247104600157500ustar00rootroot00000000000000 SUBROUTINE ENTER(IRNEW) C C THIS ROUTINE SAVES C C 1) THE CURRENT NUMBER OF OUTSTANDING STORAGE ALLOCATIONS, LOUT, AND C 2) THE CURRENT RECOVERY LEVEL, LRECOV, C C IN AN ENTER-BLOCK IN THE STACK. C C IT ALSO SETS LRECOV = IRNEW IF IRNEW = 1 OR 2. C IF IRNEW = 0, THEN THE RECOVERY LEVEL IS NOT ALTERED. C C SCRATCH SPACE ALLOCATED - 3 INTEGER WORDS ARE LEFT ON THE STACK. C C ERROR STATES - C C 1 - MUST HAVE IRNEW = 0, 1 OR 2. C COMMON /CSTAK/DSTACK DOUBLE PRECISION DSTACK(500) INTEGER ISTACK(1000) EQUIVALENCE (DSTACK(1),ISTACK(1)) EQUIVALENCE (ISTACK(1),LOUT) C C/6S C IF (0.GT.IRNEW .OR. IRNEW.GT.2) C 1 CALL SETERR(35HENTER - MUST HAVE IRNEW = 0, 1 OR 2,35,1,2) C/7S IF (0.GT.IRNEW .OR. IRNEW.GT.2) 1 CALL SETERR('ENTER - MUST HAVE IRNEW = 0, 1 OR 2',35,1,2) C/ C C ALLOCATE SPACE FOR SAVING THE ABOVE 2 ITEMS C AND A BACK-POINTER FOR CHAINING THE ENTER-BLOCKS TOGETHER. C INOW=ISTKGT(3,2) C C SAVE THE CURRENT NUMBER OF OUTSTANDING ALLOCATIONS. C ISTACK(INOW)=LOUT C C SAVE THE CURRENT RECOVERY LEVEL. C CALL ENTSRC(ISTACK(INOW+1),IRNEW) C C SAVE A BACK-POINTER TO THE START OF THE PREVIOUS ENTER-BLOCK. C ISTACK(INOW+2)=I8TSEL(INOW) C RETURN C END PyBDSF-1.10.1/src/port3/entsrc.f000066400000000000000000000017041420247104600161260ustar00rootroot00000000000000 SUBROUTINE ENTSRC(IROLD,IRNEW) C C THIS ROUTINE RETURNS IROLD = LRECOV AND SETS LRECOV = IRNEW. C C IF THERE IS AN ACTIVE ERROR STATE, THE MESSAGE IS PRINTED C AND EXECUTION STOPS. C C IRNEW = 0 LEAVES LRECOV UNCHANGED, WHILE C IRNEW = 1 GIVES RECOVERY AND C IRNEW = 2 TURNS RECOVERY OFF. C C ERROR STATES - C C 1 - ILLEGAL VALUE OF IRNEW. C 2 - CALLED WHILE IN AN ERROR STATE. C C/6S C IF (IRNEW.LT.0 .OR. IRNEW.GT.2) C 1 CALL SETERR(31HENTSRC - ILLEGAL VALUE OF IRNEW,31,1,2) C/7S IF (IRNEW.LT.0 .OR. IRNEW.GT.2) 1 CALL SETERR('ENTSRC - ILLEGAL VALUE OF IRNEW',31,1,2) C/ C IROLD=I8SAVE(2,IRNEW,IRNEW.NE.0) C C IF HAVE AN ERROR STATE, STOP EXECUTION. C C/6S C IF (I8SAVE(1,0,.FALSE.) .NE. 0) CALL SETERR C 1 (39HENTSRC - CALLED WHILE IN AN ERROR STATE,39,2,2) C/7S IF (I8SAVE(1,0,.FALSE.) .NE. 0) CALL SETERR 1 ('ENTSRC - CALLED WHILE IN AN ERROR STATE',39,2,2) C/ C RETURN C END PyBDSF-1.10.1/src/port3/eprint.f000066400000000000000000000003251420247104600161270ustar00rootroot00000000000000 SUBROUTINE EPRINT C C THIS SUBROUTINE PRINTS THE LAST ERROR MESSAGE, IF ANY. C C/6S C INTEGER MESSG(1) C/7S CHARACTER*1 MESSG(1) C/ C CALL E9RINT(MESSG,1,1,.FALSE.) RETURN C END PyBDSF-1.10.1/src/port3/erroff.f000066400000000000000000000002061420247104600161070ustar00rootroot00000000000000 SUBROUTINE ERROFF C C TURNS OFF THE ERROR STATE OFF BY SETTING LERROR=0. C I=I8SAVE(1,0,.TRUE.) RETURN C END PyBDSF-1.10.1/src/port3/ex/000077500000000000000000000000001420247104600150735ustar00rootroot00000000000000PyBDSF-1.10.1/src/port3/ex/README000066400000000000000000000003211420247104600157470ustar00rootroot00000000000000File links added so "send dpostx1 from port" works as described in Norm's memos. These files are compiled into /usr/local/lib/libportP/ex.a, so that the ldM and lib programs will work properly. What a hack! PyBDSF-1.10.1/src/port3/ex/apnr.f000066400000000000000000000021301420247104600161760ustar00rootroot00000000000000C$TEST APNR C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE APNR C*********************************************************************** C C EXAMPLE OF USE OF THE PORT APRNTX ROUTINES C C*********************************************************************** LOGICAL A(25) INTEGER B(25), IWRITE, I1MACH REAL C(25) DOUBLE PRECISION D(25) COMPLEX E(25) C IWRITE = I1MACH(2) WRITE(IWRITE, 10) 10 FORMAT(14H0LOGICAL ARRAY ) CALL SETL(25, .FALSE., A) CALL APRNTL(A, 25, IWRITE, 80) C WRITE(IWRITE, 20) 20 FORMAT(14H0INTEGER ARRAY ) CALL SETI(25, -1, B) CALL APRNTI(B, 25, IWRITE, 80, 4) C WRITE(IWRITE, 30) 30 FORMAT(11H0REAL ARRAY ) CALL SETR(25, 1.0, C) CALL APRNTR(C, 25, IWRITE, 80, 12, 4) C WRITE(IWRITE, 40) 40 FORMAT(23H0DOUBLE PRECISION ARRAY ) CALL SETD(25, 1.0D0, D) CALL APRNTD(D, 25, IWRITE, 80, 12, 4) C WRITE(IWRITE, 50) 50 FORMAT(14H0COMPLEX ARRAY ) CALL SETC(25, CMPLX(1.0, -1.0), E) CALL APRNTC(E, 25, IWRITE, 80, 12, 4) C STOP END PyBDSF-1.10.1/src/port3/ex/bura.f000066400000000000000000000023031420247104600161710ustar00rootroot00000000000000C$TEST BURA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE BURA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BURAM C C*********************************************************************** INTEGER IWRITE,I,M,N,NPTS REAL XMESH(11), F(11), P(3), Q(3), DELTA, STEP, X, XL, XR, 1 ERROR(11), TCHBP C IWRITE = I1MACH(2) C NPTS = 11 M = 2 N = 2 XL = -1.0E0 XR = 1.0E0 STEP = (XR-XL)/FLOAT(10) C DO 10 I=1,11 XMESH(I) = XL + FLOAT(I-1)*STEP F(I) = EXP(XMESH(I)) 10 CONTINUE C C C COMPUTE THE APPROXIMATION. C CALL BURAM(NPTS, XMESH, F, M, N, P, Q, DELTA) C C PRINT OUT THE ERRORS. C WRITE (IWRITE,99) 99 FORMAT (7H MESH, 4X, 3HEXP, 7X, 5HERROR) DO 20 I=1,NPTS X = XMESH(I) C C NOTE THAT TO EVALUATE THE APPROXIMATION WE MUST USE THE C FUNCTION TCHBP, WHICH EVALUATES A POLYNOMIAL GIVEN IN C TERMS OF ITS TCHEBYCHEFF EXPANSION. C ERROR(I) = F(I) - TCHBP(M,P,X,XL,XR)/TCHBP(N,Q,X,XL,XR) WRITE (IWRITE,98) XMESH(I), F(I), ERROR(I) 98 FORMAT (2F8.4,1PE12.2) 20 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/burb.f000066400000000000000000000030041420247104600161710ustar00rootroot00000000000000C$TEST BURB C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE BURB C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BURM1 C C*********************************************************************** INTEGER IWRITE,I,ITOL,MAXITR REAL XMESH(11), F(11), P(3), Q(3), DELTA, STEP, X, XL, XR, 1 ERR1(11), ERR2(11), TCHBP C DATAP(1)/ 25.0/, P(2)/ 12.0/, P(3)/ 1.0/ DATAQ(1)/ 25.0/, Q(2)/-12.0/, Q(3)/ 1.0/ C IWRITE = I1MACH(2) C XL = -1.0E0 XR = 1.0E0 STEP = (XR-XL)/FLOAT(10) DO 10 I=1,11 XMESH(I) = XL + FLOAT(I-1)*STEP F(I) = EXP(XMESH(I)) 10 CONTINUE C C COMPUTE THE ERROR IN THE INITIAL APPROXIMATION. C USE THE FUNCTION TCHBP TO EVALUATE A POLYNOMIAL C GIVEN IN TERMS OF ITS TCHEBYCHEFF EXPANSION. C DO 20 I=1,11 X = XMESH(I) 20 ERR1(I) = F(I) - TCHBP(2,P,X,XL,XR)/TCHBP(2,Q,X,XL,XR) C C COMPUTE THE APPROXIMATION. USE NO MORE THAN 10 ITERATIONS C AND STOP WHEN THE EXTREMALS AGREE TO 10 PER CENT. C MAXITR = 10 ITOL = 1 CALL BURM1(11, XMESH, F, MAXITR, ITOL, 2, 2, P, Q, DELTA) C C PRINT OUT THE ERRORS. C WRITE (IWRITE,99) 99 FORMAT (7H MESH, 4X, 3HEXP, 7X, 4HERR1, 8X, 4HERR2) DO 30 I=1,11 X = XMESH(I) ERR2(I) = F(I) - TCHBP(2,P,X,XL,XR)/TCHBP(2,Q,X,XL,XR) WRITE (IWRITE,98) XMESH(I), F(I), ERR1(I), ERR2(I) 98 FORMAT (2F8.4,1P2E12.2) 30 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/cdex.f000066400000000000000000000011041420247104600161610ustar00rootroot00000000000000C$TEST CDEX C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE CDEX C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM CDEXP C C*********************************************************************** DOUBLE PRECISION A(2),EXPON(2) IWRITE = I1MACH(2) C A(1) = 3.D0 A(2) = -1.D0 CALL CDEXP(A,EXPON) C WRITE(IWRITE,9999) A, EXPON 9999 FORMAT (18H THE EXPONENTIAL (,1PD10.4,2H, ,1PD11.4,8H) IS // 1 4H (,2PD25.18,2H, ,2PD26.18,1H)) C STOP END PyBDSF-1.10.1/src/port3/ex/cdlg.f000066400000000000000000000010711420247104600161520ustar00rootroot00000000000000C$TEST CDLG C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE CDLG C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM CDLOG C C*********************************************************************** DOUBLE PRECISION A(2),LOG(2) IWRITE = I1MACH(2) C A(1) = 2.D0 A(2) = -1.D0 CALL CDLOG(A,LOG) C WRITE(IWRITE,9999) A, LOG 9999 FORMAT (13H THE LOG OF (,1PD10.4,2H, ,1PD11.4,8H) IS // 1 4H (,1PD24.18,2H, ,1PD25.18,1H)) C STOP END PyBDSF-1.10.1/src/port3/ex/cpla.f000066400000000000000000000012231420247104600161570ustar00rootroot00000000000000C$TEST CPLA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE CPLA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM CPOLY C C*********************************************************************** INTEGER IWRITE,I1MACH,K REAL CR(4), CI(4), ZR(3), ZI(3) C CR(1) = 2.0 CI(1) = 0.0 C CR(2) = -8.0 CI(2) = 13.0 C CR(3) = 3.0 CI(3) = 74.0 C CR(4) = 135.0 CI(4) = 105.0 C CALL CPOLY(3, CR, CI, ZR, ZI) C IWRITE = I1MACH(2) WRITE(IWRITE,99) (ZR(K),ZI(K),K = 1,3) 99 FORMAT(1H ,1P2E15.7) C STOP END PyBDSF-1.10.1/src/port3/ex/cspa.f000066400000000000000000000016071420247104600161740ustar00rootroot00000000000000C$TEST CSPA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE CSPA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM CSPQU C C*********************************************************************** INTEGER NPTS,J,IWRITE,I1MACH REAL PI,X(65),Y(65),ANS,ZZI PI=3.14159265 C NPTS=9 C C COMPUTE THE POINTS AT WHICH THE SPLINE IS TO BE FITTED C DO 10 J=1,NPTS X(J)=FLOAT(J-1)/FLOAT(NPTS-1) Y(J)=SIN(X(J)*PI/2.) 10 CONTINUE C C THE INTEGRATION: C CALL CSPQU(X,Y,NPTS,X(1),X(NPTS),ANS) C C ERROR IN INTEGRATION C ZZI=ANS-2./PI C C C SET THE OUTPUT UNIT C IWRITE=I1MACH(2) C WRITE (IWRITE,9998) ANS 9998 FORMAT(48H THE INTEGRAL OF SINE(X*PI/2) FROM X=0 TO X=1 IS,E16.8) C WRITE (IWRITE,9999) ZZI 9999 FORMAT(17H WITH AN ERROR OF,1PE10.2) C STOP END PyBDSF-1.10.1/src/port3/ex/cspe.f000066400000000000000000000025741420247104600162040ustar00rootroot00000000000000C$TEST CSPE C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE CSPE C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM CSPDI C C*********************************************************************** INTEGER IWRITE,I1MACH,J,K REAL PI,X(9),Y(9),YY(9),XX(4),YYP(4),ZZ(4),ZZD(4) C PI=3.14159265 C C COMPUTE THE POINTS AT WHICH THE SPLINE IS TO BE FITTED C DO 10 J=1,9 X(J)=FLOAT(J-1)/8. Y(J)=SIN(X(J)*PI/2.) 10 CONTINUE C C C SET THE POINTS AT WHICH THE INTERPOLATION AND C DIFFERENTIATION ARE TO BE DONE C XX(1)=.1 XX(2)=.3 XX(3)=.6 XX(4)=.9 C C THE INTERPOLATION: C CALL CSPIN(X,Y,9,XX,YY,4) C C COMPUTE THE INTERPOLATION ERROR C DO 20 K=1,4 20 ZZ(K)=YY(K)-SIN(XX(K)*PI/2.) C C THE DIFFERENTIATION: C CALL CSPDI(X,Y,9,XX,YY,YYP,4) C C COMPUTE THE DIFFERENTIATION ERROR C DO 30 K=1,4 30 ZZD(K)=(2./PI)*YYP(K)-COS(XX(K)*PI/2.) C C C SET THE OUTPUT UNIT C IWRITE=I1MACH(2) C WRITE (IWRITE,9997) 9997 FORMAT(2X,2HXX,10X,13HINTERPOLATION,9X,15HDIFFERENTIATION/) C WRITE (IWRITE,9998) 9998 FORMAT(12X,5HVALUE,6X,5HERROR,7X,5HVALUE,6X,6H ERROR//) C WRITE (IWRITE,9999)(XX(K),YY(K),ZZ(K),YYP(K),ZZD(K), K=1,4) 9999 FORMAT(0PF6.3,0PF12.6,1PE12.3,0PF12.6,1PE12.3/) C STOP END PyBDSF-1.10.1/src/port3/ex/cspg.f000066400000000000000000000015631420247104600162030ustar00rootroot00000000000000C$TEST CSPG C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE CSPG C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM CSPIN C C*********************************************************************** C INTEGER IWRITE,I1MACH,I REAL X(9),Y(9),YY(9),XX(9) C C COMPUTED THE POINTS AT WHICH THE SPLINE IS TO BE FITTED C DO 10 J=1,9 X(J)=FLOAT(J-1)/8. Y(J)=X(J)**3 10 CONTINUE C C SET THE POINTS AT WHICH INTERPOLATION IS TO BE DONE C XX(1)=.3 XX(2)=.6 XX(3)=.9 C C PERFORM THE INTERPOLATION C CALL CSPIN(X,Y,9,XX,YY,3) C C SET THE OUTPUT UNIT C IWRITE=I1MACH(2) C WRITE (IWRITE,9998) 9998 FORMAT(2X,2HXX,5X,11HINTERPOLATE//) C WRITE (IWRITE,9999) (XX(J), YY(J), J=1,3) 9999 FORMAT(F6.3,F12.6) C STOP END PyBDSF-1.10.1/src/port3/ex/cspq.f000066400000000000000000000025521420247104600162140ustar00rootroot00000000000000C$TEST CSPQ C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE CSPQ C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM CSPFE C C*********************************************************************** INTEGER I1MACH,J,IWRITE REAL X(9),Y(9),YP(9),YPP(9),BC(6),XX(4),YY(4),ERR(4),PI C PI=4.0*ATAN(1.0) C C COMPUTE THE POINTS AT WHICH THE SPLINE IS TO BE FITTED C DO 10 J=1,9 X(J)=FLOAT(J-1)/8.0 10 Y(J)=SIN(X(J)*PI/2.0) C C SET THE END CONDITIONS FOR THE INTERPOLATION C (SPECIFY FIRST DERIVATIVE AT X=0, SECOND AT X=1) C BC(1)=1.0 BC(2)=0.0 BC(3)=PI/2.0 BC(4)=0.0 BC(5)=1.0 BC(6)=-X(9)*(PI/2.0)**2 C C DO THE CUBIC SPLINE FIT C CALL CSPFI(X,Y,9,BC,YP,YPP) C C SET THE POINTS AT WHICH TO INTERPOLATE C XX(1)=0.1 XX(2)=0.3 XX(3)=0.6 XX(4)=0.9 C C DO THE INTERPOLATION C CALL CSPFE(X,Y,YP,YPP,9,XX,YY,4) C C COMPUTE THE INTERPOLATION ERROR C DO 20 K=1,4 20 ERR(K)=YY(K)-SIN(XX(K)*PI/2.0) C C SET THE OUTPUT UNIT C IWRITE=I1MACH(2) C WRITE(IWRITE,9997) 9997 FORMAT(2X,2HXX,10X,13HINTERPOLATION) WRITE(IWRITE,9998) 9998 FORMAT(12X,5HVALUE,6X,5HERROR//) C WRITE(IWRITE,9999) (XX(K),YY(K),ERR(K),K=1,4) 9999 FORMAT(0PF6.3,0PF12.6,1PE12.3/) C STOP END PyBDSF-1.10.1/src/port3/ex/ddea.f000066400000000000000000000030471420247104600161430ustar00rootroot00000000000000C$TEST DDEA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DDEA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM IODE C C*********************************************************************** REAL TSTOP,V(2),DT REAL ERRPAR(2) INTEGER NV EXTERNAL DEE,HANDLE C NV = 2 C C SET FOR 1E-2 ABSOLUTE ERROR. C ERRPAR(1) = 0 ERRPAR(2) = 1E-2 C TSTOP = 1E+20 DT = 1E-7 C C INITIAL CONDITIONS FOR V. C V(1) = 1 V(2) = 1 C CALL IODE (V,NV, * 0E0,TSTOP,DT, * DEE, * ERRPAR, * HANDLE) C STOP C END SUBROUTINE DEE(T, * V,VT,NV, * D,DV,DVT) C REAL T,V(NV),VT(NV),D(NV),DV(NV,NV),DVT(NV,NV) INTEGER NV C D(1) = VT(1)+2E0*VT(2) + V(1) + 2E+6*V(2) D(2) = 3E0*VT(1)+VT(2) + 3E0*V(1) + 1E+6*V(2) C DVT(1,1) = 1 DVT(1,2) = 2 DV(1,1) = 1 DV(1,2) = 2E+6 C DVT(2,1) = 3 DVT(2,2) = 1 DV(2,1) = 3 DV(2,2) = 1E+6 C RETURN C END SUBROUTINE HANDLE(T0,V0,T,V,NV,DT,TSTOP) C C OUTPUT AND CHECKING ROUTINE. C REAL T0,V0(NV),T,V(NV),DT,TSTOP INTEGER NV C REAL EV(2) INTEGER I1MACH C IF ( T0 .EQ. T ) RETURN C EV(1) = V(1) - EXP(-T) EV(2) = V(2) - EXP(-1E+6*T) C IWUNIT = I1MACH(2) WRITE(IWUNIT,9000) T,EV(1),EV(2) 9000 FORMAT(13H ERROR IN V( ,1P1E10.2,4H ) =,1P2E10.2) C RETURN C END PyBDSF-1.10.1/src/port3/ex/desa.f000066400000000000000000000044731420247104600161660ustar00rootroot00000000000000C$TEST DESA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DESA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM ODES C C*********************************************************************** EXTERNAL EQNS, PRINT COMMON /NMBR/NMFNS COMMON /DATA/ERRPAR,DT,X,TSTART C INTEGER KASE,NMFNS REAL X(2),DX,DT,TSTART REAL ERRPAR(2) C DO 1 KASE=1,3 X(1) = 1.E0 X(2) = -1.E0 CALL CASE(KASE) C CALL ODES (EQNS, X, 2, TSTART, 2.0E0, DT, ERRPAR, PRINT) C 1 CONTINUE C STOP END SUBROUTINE EQNS (T, X, N, DX) COMMON /NMBR/NMFNS C INTEGER NMFNS,N REAL T,X(2),DX(2) C DX(1) = X(2) DX(2) = X(1) NMFNS = NMFNS + 1 C RETURN END SUBROUTINE CASE(KASE) COMMON /NMBR/NMFNS COMMON /DATA/ERRPAR,DT,X,TSTART C INTEGER IWRITE,I1MACH,NMFNS,KASE REAL X(2),DT,TSTART REAL ERRPAR(2) C IWRITE = I1MACH(2) NMFNS = 0 TSTART = 0.0E0 GO TO (10, 20, 30), KASE C C SET UP CASE 1 10 ERRPAR(1) = 1.E-2 ERRPAR(2) = 1.E-3 DT = 1.E0 GO TO 40 C C SET UP CASE 2 20 ERRPAR(1) = 1.E-4 ERRPAR(2) = 1.E-6 DT = 1.E-7 GO TO 40 C C SET UP CASE 3 30 ERRPAR(1) = 1.E-4 ERRPAR(2) = 1.E-6 DT = 1.E0 C C WRITE OUT ERRPAR AND DT 40 WRITE (IWRITE, 9997) ERRPAR(1), ERRPAR(2), DT 9997 FORMAT(15X,28H FOR THE VALUES, ERRPAR(1) =, 1PE9.2, * 16H AND ERRPAR(2) =,1PE9.2 //16X,22HWITH INITIAL DT SET TO, * 1PE10.2//) C C WRITE OUT COLUMN HEADINGS FOR THE SOLUTION WRITE (IWRITE,9998) 9998 FORMAT(12X, 5H TIME,14X, 5H X(1),15X, 5H X(2),14X, 3H DT//) C C WRITE OUT THE INITIAL VALUES OF T AND X WRITE (IWRITE,9999) TSTART, X(1), X(2), DT 9999 FORMAT(2X,1P3E20.8,1PE14.2) C RETURN END SUBROUTINE PRINT (T0, X0, T1, X1, N, DT, TSTOP, E) COMMON /NMBR/NMFNS C INTEGER IWRITE,I1MACH,N,NMFNS REAL T0,X0(N),T1,X1(N),DT,TSTOP,E(N) C IF(T0 .EQ. T1) RETURN C IWRITE = I1MACH(2) WRITE (IWRITE,9998) T1,X1(1),X1(2),DT 9998 FORMAT (2X,1P3E20.8,1PE14.2) C IF (T1 .LT. TSTOP) RETURN C WRITE (IWRITE,9999) NMFNS 9999 FORMAT (1H0,15X, 39H THE NUMBER OF FUNCTION EVALUATIONS WAS,I4) C RETURN C END PyBDSF-1.10.1/src/port3/ex/dpostx1.f000066400000000000000000000067741420247104600166620ustar00rootroot00000000000000C$TEST DPT1 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT1 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(1000) EXTERNAL HANDLE, DPOSTD, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION U(100), V(1), MESH(100), DT, WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = U SUB XX + F ON (0,1) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(1000, 4) NU = 1 NV = 0 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1D-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 4 CALL DUMB(0D0, 1D0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETD(NMESH-K, 1D0, U) CALL DPOST(U, NU, K, MESH, NMESH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DPOSTD, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU( 1 NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (X(I)-T**2)*DEXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), 1 BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-1D0 B(1, 2) = U(1, 2)-DEXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K DOUBLE PRECISION T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = DEESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = DEXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dpostx10.f000066400000000000000000000115721420247104600167320ustar00rootroot00000000000000C$TEST DPTT C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPTT C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL HANDLE, DPOSTD, BC, AF INTEGER NDX, NXH, I, K, IS(1000), NU INTEGER NV, NX, I1MACH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DEEBSF, ERR, DABS, U(100), V(1), X(100) DOUBLE PRECISION DMAX1, DT, UE(100), UH(100), XH(100), WS(500) DOUBLE PRECISION TSTOP INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO ESTIMATE X AND T ERROR AS SUM. C U SUB T = U SUB XX + F ON (0,1) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 0 ERRPAR(1) = 0 ERRPAR(2) = 1E-2 K = 4 NDX = 4 TSTOP = 1 DT = 1D-2 C CRUDE MESH. CALL DUMB(0D0, 1D0, NDX, K, X, NX) C INITIAL CONDITIONS FOR U. CALL SETD(NX-K, 1D0, U) TEMP = I1MACH(2) WRITE (TEMP, 1) 1 FORMAT (36H SOLVING ON CRUDE MESH USING ERRPAR.) CALL DPOST(U, NU, K, X, NX, V, NV, 0D0, TSTOP, DT, AF, BC, DPOSTD, 1 ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL DPOSTX C HALVE THE MESH SPACING. CALL DUMB(0D0, 1D0, 2*NDX-1, K, XH, NXH) C INITIAL CONDITIONS FOR UH. CALL SETD(NXH-K, 1D0, UH) DT = 1D-2 TEMP = I1MACH(2) WRITE (TEMP, 2) 2 FORMAT (38H SOLVING ON REFINED MESH USING ERRPAR.) CALL DPOST(UH, NU, K, XH, NXH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DPOSTD, ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL DPOSTX C ESTIMATE U ERROR. ERR = DEEBSF(K, X, NX, U, XH, NXH, UH) WRITE (6, 3) ERR 3 FORMAT (24H U ERROR FROM U AND UH =, 1PE10.2) C INITIAL CONDITIONS FOR UE. CALL SETD(NX-K, 1D0, UE) DT = 1D-2 ERRPAR(1) = ERRPAR(1)/10. ERRPAR(2) = ERRPAR(2)/10. TEMP = I1MACH(2) WRITE (TEMP, 4) 4 FORMAT (39H SOLVING ON CRUDE MESH USING ERRPAR/10.) CALL DPOST(UE, NU, K, X, NX, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DPOSTD, ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL DPOSTX ERR = 0 TEMP = NX-K DO 5 I = 1, TEMP ERR = DMAX1(ERR, DABS(U(I)-UE(I))) 5 CONTINUE WRITE (6, 6) ERR 6 FORMAT (24H U ERROR FROM U AND UE =, 1PE10.2) STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU( 1 NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (X(I)-T**2)*DEXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), 1 BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-1D0 B(1, 2) = U(1, 2)-DEXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K DOUBLE PRECISION T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T EU = DEESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = DEXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dpostx2.f000066400000000000000000000103121420247104600166420ustar00rootroot00000000000000C$TEST DPT2 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT2 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(1100) EXTERNAL HANDLE, DPOSTD, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION U(200), V(1), MESH(100), DT, WS(500), TSTOP INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = U SUB XX + F ON (0,1) C BY SETTING U1 = U AND U2 = U1 SUB X AND SOLVING C U1 SUB T = U1 SUB XX + F C ON (0,1) C U1 SUB X = U2 C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(1100, 4) NU = 2 NV = 0 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1D-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 4 CALL DUMB(0D0, 1D0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U1. CALL SETD(NMESH-K, 1D0, U) C INITIAL CONDITIONS FOR U2. TEMP = NMESH-K CALL SETD(NMESH-K, 0D0, U(TEMP+1)) CALL DPOST(U, NU, K, MESH, NMESH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DPOSTD, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU( 1 NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX A(I, 1) = -U(I, 2) AU(I, 1, 2) = -1 F(I, 1) = (X(I)-T**2)*DEXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 A(I, 2) = U(I, 1) AU(I, 2, 1) = 1 F(I, 2) = U(I, 2) FU(I, 2, 2) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), 1 BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-1D0 B(1, 2) = U(1, 2)-DEXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K DOUBLE PRECISION T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL U1OFX, U2OFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU(2) INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C U1OFX AND U2OFX NEED TIME. TT = T EU(1) = DEESFF(K, X, NX, U, U1OFX) EU(2) = DEESFF(K, X, NX, U(1, 2), U2OFX) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 2(1PE10.2)) RETURN END SUBROUTINE U1OFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = DEXP(X(I)*T) 1 CONTINUE RETURN END SUBROUTINE U2OFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = T*DEXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dpostx3.f000066400000000000000000000113451420247104600166520ustar00rootroot00000000000000C$TEST DPT3 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT3 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL DEE, HANDLE, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION U(100), V(1), MESH(100), DT, WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = U SUB XX + V + F ON (0,1) C V SUB T = U( 1/2, T ) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = COS(XT) AND V(T) = 2 SIN(T/2). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 1 ERRPAR(1) = 1E-2 C ESSENTIALLY RELATIVE ERROR. ERRPAR(2) = 1E-6 TSTOP = 1 DT = 1D-6 K = 4 NDX = 4 C NDX UNIFORM MESH POINTS ON (0,1). CALL DUMB(0D0, 1D0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETD(NMESH-K, 1D0, U) C INITIAL VALUE FOR V. V(1) = 0 CALL DPOST(U, NU, K, MESH, NMESH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) INTEGER I DOUBLE PRECISION DCOS, DSIN DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = V(1)-UT(I, 1)-X(I)*DSIN(X(I)*T)+T**2*DCOS(X(I)*T)- 1 2D0*DSIN(T/2D0) FUT(I, 1, 1) = -1 FV(I, 1, 1) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) DOUBLE PRECISION DCOS B(1, 1) = U(1, 1)-1D0 B(1, 2) = U(1, 2)-DCOS(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) INTEGER INTRVD, I, ILEFT DOUBLE PRECISION XI(1), BASIS(10) INTEGER TEMP XI(1) = 0.5D0 C FIND 0.5 IN MESH. ILEFT = INTRVD(NX, X, XI(1)) IF (K .GT. 10) CALL SETERR( 1 41HDEE - K .GT. 10, NEED MORE SPACE IN BASIS, 41, 1, 2) C B-SPLINE BASIS AT XI(1). CALL DBSPLN(K, X, NX, XI, 1, ILEFT, BASIS) D(1) = VT(1) DVT(1, 1) = 1 C VT(1) - U(0.5,T) = 0. DO 1 I = 1, K TEMP = ILEFT+I-K D(1) = D(1)-U(TEMP, 1)*BASIS(I) TEMP = ILEFT+I-K DU(1, TEMP, 1) = DU(1, TEMP, 1)-BASIS(I) 1 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, DABS, DSIN, EU, EV INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = DEESFF(K, X, NX, U, UOFX) EV = DABS(V(1)-2D0*DSIN(T/2D0)) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU, EV 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DCOS DO 1 I = 1, NX U(I) = DCOS(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dpostx4.f000066400000000000000000000106331420247104600166520ustar00rootroot00000000000000C$TEST DPT4 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT4 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL DEE, HANDLE, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION U(100), V(1), MESH(100), DT, DATAN, WS(500) DOUBLE PRECISION TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = U SUB XX - U**3 + F ON (-PI,+PI) C SUBJECT TO PERIODIC BOUNDARY CONDITIONS, C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = COS(X)*SIN(T). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 1 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 8D0*DATAN(1D0) DT = 0.4 C MAKE A MESH OF NDX UNIFORM POINTS ON (-PI,+PI). K = 4 NDX = 7 CALL DUMB((-4D0)*DATAN(1D0), 4D0*DATAN(1D0), NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETD(NMESH-K, 0D0, U) C INITIAL CONDITIONS FOR V. V(1) = 0 CALL DPOST(U, NU, K, MESH, NMESH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) INTEGER I DOUBLE PRECISION DCOS, DSIN DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (-UT(I, 1))-U(I, 1)**3+DCOS(X(I))*(DCOS(T)+DSIN(T)+ 1 DCOS(X(I))**2*DSIN(T)**3) FUT(I, 1, 1) = -1 FU(I, 1, 1) = (-3D0)*U(I, 1)**2 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) B(1, 1) = UX(1, 1)-V(1) B(1, 2) = UX(1, 2)-V(1) BUX(1, 1, 1) = 1 BV(1, 1, 1) = -1 BUX(1, 1, 2) = 1 BV(1, 1, 2) = -1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) INTEGER TEMP C U(-PI,T) - U(+PI,T) = 0. TEMP = NX-K D(1) = U(1, 1)-U(TEMP, 1) DU(1, 1, 1) = 1 TEMP = NX-K DU(1, TEMP, 1) = -1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU, EV INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = DEESFF(K, X, NX, U, UOFX) EV = V(1) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU, EV 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DCOS, DSIN DO 1 I = 1, NX U(I) = DCOS(X(I))*DSIN(T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dpostx5.f000066400000000000000000000173401420247104600166550ustar00rootroot00000000000000C$TEST DPT5 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT5 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T DOUBLE PRECISION T COMMON /PARAM/ VC, X DOUBLE PRECISION VC(3), X(3) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, IDLUMB, ISTKGT, K, IU, IS(1000) INTEGER NU, NV, IMMMD, IMESH, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, V(3), DT, XB(3), WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = ( K(T,X) * U SUB X ) SUB X + G ON (-1,+2) * (0,+1) C WITH A MOVING FRONT X(T) CHARACTERIZED BY U(X(T),T) == 1 AND C JUMP ACROSS X(T) OF K(T,X) U SUB X = - 3 * X'(T). C WHERE K(T,X) IS PIECEWISE CONSTANT, SAY C 1 FOR X < X(T) C K(T,X) = C 2 FOR X > X(T) C AND G IS CHOSEN SO THAT THE SOLUTION IS C EXP(X-X(T)) FOR X < X(T) C U(X,T) = C EXP(X(T)-X) FOR X > X(T) C AND X(1,T) = T. THE MOVING FRONT IS TRACKED C IMPLICITLY BY FORCING U(X(1,T),T) = 1 AS A PSEUDO-RANKINE-HEUGONIOT RE CLATION. C V(1,2,3) GIVES THE MOVING MESH. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 3 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTART = 0 TSTOP = 1 DT = 0.1 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB ARRAY. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = IDLUMB(XB, 3, NDX, K, NMESH) C MAKE 1 OF MULTIPLICITY K-1. IMESH = IMMMD(IMESH, NMESH, 1D0, K-1) X(1) = -1 X(2) = 0 X(3) = 2 C INITIAL VALUES FOR V. CALL DLPLMG(3, X, VC) C GET U ON THE PORT STACK. IU = ISTKGT(NMESH-K, 4) C UOFX NEEDS TIME. T = TSTART C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL DL2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT THE ICS. CALL HANDLE(T-1D0, WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, 1 WS(IMESH), NMESH, DT, TSTOP) CALL DPOST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP 1 , DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), 1 UTX(NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) COMMON /DPOSTF/ FAILED LOGICAL FAILED INTEGER I DOUBLE PRECISION KAY, XXI(99), XTV(99), XVV(99), X(99), DEXP DOUBLE PRECISION XXIV(99), AX(99), FX(99), XT(99), XV(99) LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL DLPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL DPOSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 7 I = 1, NX IF (XI(I) .GT. 1D0) GOTO 2 KAY = 1 GOTO 3 2 KAY = 2 3 A(I, 1) = KAY*UX(I, 1) AUX(I, 1, 1) = KAY IF (XI(I) .GT. 1D0) GOTO 4 A(I, 1) = A(I, 1)-3D0*VT(2) AVT(I, 1, 2) = -3 4 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 IF (XI(I) .GT. 1D0) GOTO 5 F(I, 1) = F(I, 1)+2D0*DEXP(X(I)-T) FX(I) = 2D0*DEXP(X(I)-T) GOTO 6 5 F(I, 1) = F(I, 1)+DEXP(T-X(I)) FX(I) = -DEXP(T-X(I)) 6 CONTINUE 7 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL DPOSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V, 1 VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU, 2 FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-DEXP((-1D0)-T) B(1, 2) = U(1, 2)-DEXP(T-2D0) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) INTEGER INTRVD, I, ILEFT DOUBLE PRECISION BX(10), XX(1) INTEGER TEMP D(1) = V(1)+1D0 C X(0,V) = -1. DV(1, 1) = 1 XX(1) = 1 C FIND 1 IN THE MESH. ILEFT = INTRVD(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL DBSPLN(K, X, NX, XX, 1, ILEFT, BX) C U(X(1,V),T) = 1. D(2) = -1 DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-2D0 C X(2,V) = +2. DV(3, 3) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /PARAM/ VC, XX DOUBLE PRECISION VC(3), XX(3) COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU, EV(3) INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, V, VC) EU = DEESFF(K, X, NX, U, UOFX) EV(1) = V(1)+1D0 EV(2) = V(2)-T EV(3) = V(3)-2D0 TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 3( 1 1PE10.2)) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX DOUBLE PRECISION XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X DOUBLE PRECISION VC(3), X(3) COMMON /TIME/ T DOUBLE PRECISION T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DEXP, WS(500), XOFXI INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 4) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 4) C MAP INTO USER SYSTEM. CALL DLPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 3 I = 1, NX TEMP = IXX+I XOFXI = WS(TEMP-1) IF (XI(I) .GT. 1D0) GOTO 1 U(I) = DEXP(XOFXI-T) GOTO 2 1 U(I) = DEXP(T-XOFXI) 2 CONTINUE 3 CONTINUE CALL LEAVE RETURN END PyBDSF-1.10.1/src/port3/ex/dpostx6.f000066400000000000000000000176531420247104600166650ustar00rootroot00000000000000C$TEST DPT6 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT6 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T DOUBLE PRECISION T COMMON /PARAM/ VC, X DOUBLE PRECISION VC(4), X(3) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, IDLUMB, ISTKGT, K, IU, IS(1000) INTEGER NU, NV, IMMMD, IMESH, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, V(4), DT, XB(3), WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON THE HYPERBOLIC PROBLEM C U SUB T = - U SUB X + G ON (-PI,+PI) * (0,PI) C WITH A MOVING SHOCK X(T) CHARACTERIZED BY C U(X(T)+,T) = 0 AND C U(X(T)+,T) - U(X(T)-,T) = X'(T) C WHERE G IS CHOSEN SO THAT THE SOLUTION IS C SIN(X+T) FOR X < X(T) C U(X,T) = C COS(X+T) FOR X > X(T) C WITH X(T) = PI/2 -T . C V(1,2,3) GIVES THE MOVING MESH AND V(4) IS THE HEIGHT OF THE JUMP. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 4 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTART = 0 TSTOP = 3.14 DT = 0.4 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = IDLUMB(XB, 3, NDX, K, NMESH) C MAKE 1 OF MULTIPLICITY K-1. IMESH = IMMMD(IMESH, NMESH, 1D0, K-1) X(1) = -3.14 X(2) = 3.14/2. X(3) = 3.14 C INITIAL VALUES FOR V. CALL DLPLMG(3, X, VC) C GET U ON THE PORT STACK. IU = ISTKGT(NMESH-K, 4) C UOFX NEEDS TIME. T = TSTART C THE INITIAL HEIGHT OF THE JUMP. VC(4) = 1 C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL DL2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT ICS. CALL HANDLE(T-1D0, WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, 1 WS(IMESH), NMESH, DT, TSTOP) CALL DPOST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP 1 , DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), 1 UTX(NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) COMMON /DPOSTF/ FAILED LOGICAL FAILED INTEGER I DOUBLE PRECISION XXI(99), XTV(99), XVV(99), X(99), DCOS, DSIN DOUBLE PRECISION XXIV(99), AX(99), FX(99), XT(99), XV(99) LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL DLPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL DPOSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 4 I = 1, NX A(I, 1) = -U(I, 1) AU(I, 1, 1) = -1 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 IF (XI(I) .GT. 1D0) GOTO 2 F(I, 1) = F(I, 1)-2D0*DCOS(X(I)+T) FX(I) = 2D0*DSIN(X(I)+T) GOTO 3 2 F(I, 1) = F(I, 1)-VT(4) FVT(I, 1, 4) = -1 F(I, 1) = F(I, 1)+2D0*DSIN(X(I)+T) FX(I) = 2D0*DCOS(X(I)+T) 3 CONTINUE 4 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL DPOSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V, 1 VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU, 2 FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) DOUBLE PRECISION DSIN B(1, 1) = U(1, 1)-DSIN(T-3.14) C U(-PI,T) = SIN(-PI+T). BU(1, 1, 1) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) INTEGER INTRVD, I, ILEFT DOUBLE PRECISION BX(10), XX(1), D1MACH INTEGER TEMP D(1) = V(1)+3.14 C X(0,V) = -PI. DV(1, 1) = 1 C XX(1) = 1 + A ROUNDING ERROR. XX(1) = D1MACH(4)+1D0 ILEFT = INTRVD(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL DBSPLN(K, X, NX, XX, 1, ILEFT, BX) D(2) = -V(4) C U(X(T)+,T) - JUMP = 0. DV(2, 4) = -1 DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-3.14 C X(2,V) = +PI. DV(3, 3) = 1 C JUMP + D( X(1,V(T)) )/DT = 0. D(4) = VT(2)+V(4) DVT(4, 2) = 1 DV(4, 4) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /PARAM/ VC, XX DOUBLE PRECISION VC(4), XX(3) COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU, EV(2) INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN 2 TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, V, VC) EU = DEESFF(K, X, NX, U, UOFX) C ERROR IN POSITION OF SHOCK. EV(1) = V(2)-(3.14/2.-T) C ERROR IN HEIGHT OF SHOCK. EV(2) = V(4)-1D0 TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 2( 1 1PE10.2)) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX DOUBLE PRECISION XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X DOUBLE PRECISION VC(4), X(3) COMMON /TIME/ T DOUBLE PRECISION T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION EWE, WS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 4) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 4) C MAP INTO USER SYSTEM. CALL DLPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 1 I = 1, NX TEMP = IXX+I U(I) = EWE(T, WS(TEMP-1), VC(2)) IF (XI(I) .GT. 1D0) U(I) = U(I)+1D0 1 CONTINUE CALL LEAVE RETURN END DOUBLE PRECISION FUNCTION EWE(T, X, XBREAK) DOUBLE PRECISION T, X, XBREAK DOUBLE PRECISION DCOS, DSIN IF (X .GE. XBREAK) GOTO 1 EWE = DSIN(X+T) RETURN 1 IF (X .LE. XBREAK) GOTO 2 EWE = DCOS(X+T) RETURN 2 CALL SETERR(17HEWE - X == XBREAK, 17, 1, 2) 3 CONTINUE 4 STOP END PyBDSF-1.10.1/src/port3/ex/dpostx7.f000066400000000000000000000170711420247104600166600ustar00rootroot00000000000000C$TEST DPT7 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT7 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T DOUBLE PRECISION T COMMON /PARAM/ VC, X, XI0 DOUBLE PRECISION VC(4), X(3), XI0 EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, IDLUMB, ISTKGT, K, IU, IS(1000) INTEGER NU, NV, IMMMD, IMESH, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, D, V(4), DT, XB(3), WS(500) DOUBLE PRECISION TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = U SUB XX + F ON (20,10**6) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(-X*T), C AND X(1,T) IS CHOSEN SO THAT THE BOUNDARY-LAYER IS TRACKED C IMPLICITLY BY FORCING U(X(1,T)/2.3/D,T) = 1/E. C THIS IS THE SAME AS REQUIRING THE EXACT SOLUTION TO HAVE C U(X(1,T),T) = 10 ** -D. C V(1,2,3) GIVES THE MOVING MESH, V(4) IS TIME. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 4 ERRPAR(1) = 1E-2 C MIXED RELATIVE AND ABSOLUTE ERROR. ERRPAR(2) = 1E-2 D = 3 C W(XI0,T) = 1/E. XI0 = 1./2.3/D TSTART = 20 TSTOP = 1D+6 DT = 1D-2 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = IDLUMB(XB, 3, NDX, K, NMESH) C MAKE 1D0 OF MULTIPLICITY K-1. IMESH = IMMMD(IMESH, NMESH, 1D0, K-1) X(1) = 0 X(2) = 2.3*D/TSTART X(3) = 1 C INITIAL VALUES FOR V. CALL DLPLMG(3, X, VC) C GET U ON PORT STACK. IU = ISTKGT(NMESH-K, 4) C UOFX NEEDS TIME. T = TSTART VC(4) = TSTART C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL DL2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT ICS. CALL HANDLE(T-1D0, WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, 1 WS(IMESH), NMESH, DT, TSTOP) CALL DPOST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP 1 , DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), 1 UTX(NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) COMMON /DPOSTF/ FAILED LOGICAL FAILED INTEGER I DOUBLE PRECISION XXI(99), XTV(99), XVV(99), X(99), XXIV(99), AX( 1 99) DOUBLE PRECISION FX(99), XT(99), XV(99), DEXPL LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL DLPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL DPOSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 2 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (-UT(I, 1))-DEXPL((-X(I))*V(4))*(X(I)+V(4)**2) FUT(I, 1, 1) = -1 FV(I, 1, 4) = (-DEXPL((-X(I))*V(4)))*(2D0*V(4)+(X(I)+V(4)**2)*( 1 -X(I))) FX(I) = (-DEXPL((-X(I))*V(4)))*(1D0-V(4)*X(I)-V(4)**3) 2 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL DPOSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V, 1 VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU, 2 FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) DOUBLE PRECISION DEXPL C U(0,T) = 1 B(1, 1) = U(1, 1)-1D0 C U(1,T) = EXP(-T) B(1, 2) = U(1, 2)-DEXPL(-V(4)) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 BV(1, 4, 2) = DEXPL(-V(4)) RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) COMMON /PARAM/ VC, XC, XI0 DOUBLE PRECISION VC(4), XC(3), XI0 INTEGER INTRVD, I, ILEFT DOUBLE PRECISION DEXP, BX(10), XX(1) INTEGER TEMP D(1) = V(1) C X(0,V) = 0. DV(1, 1) = 1 XX(1) = XI0 ILEFT = INTRVD(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL DBSPLN(K, X, NX, XX, 1, ILEFT, BX) D(2) = -DEXP(-1D0) C D(2) = W(XI0,T) - EXP(-1). DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-1D0 C X(2,V) = 1. DV(3, 3) = 1 D(4) = VT(4)-1D0 DVT(4, 4) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /PARAM/ VC, XX, XI0 DOUBLE PRECISION VC(4), XX(3), XI0 COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, DLPLMT, EU, EV INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN C LET DT CARRY V(2) DOWN BY NO MORE THAN A FACTOR OF 10. 2 DT = DLPLMT(T, V, NV, T0, V0, 1D-1, DT) TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, V, VC) EU = DEESFF(K, X, NX, U, UOFX) C ERROR IN POSITION OF BOUNDARY LAYER. EV = V(2)-1D0/XI0/T TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX DOUBLE PRECISION XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X, XI0 DOUBLE PRECISION VC(4), X(3), XI0 COMMON /TIME/ T DOUBLE PRECISION T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION WS(500), DEXPL INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 4) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 4) C MAP INTO USER SYSTEM. CALL DLPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 1 I = 1, NX TEMP = IXX+I U(I) = DEXPL((-WS(TEMP-1))*T) 1 CONTINUE CALL LEAVE RETURN END PyBDSF-1.10.1/src/port3/ex/dpostx8.f000066400000000000000000000156411420247104600166620ustar00rootroot00000000000000C$TEST DPT8 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT8 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(5000) COMMON /TIME/ T DOUBLE PRECISION T COMMON /KMESH/ K, NMESH INTEGER K, NMESH COMMON /CMESH/ MESH DOUBLE PRECISION MESH(100) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, I, IS(1000), NU, NV REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION U(100), V(100), DT, WS(500), TSTOP INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON THE INTEGRO-PDE C U SUB T = 2 * U SUB XX - INT(0,1) EXP(X-Y)*U(Y) DY ON (0,1) C SUBJECT TO GIVEN DIRICHLET BCS, CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(T+X). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(5000, 4) NU = 1 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1D-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 7 CALL DUMB(0D0, 1D0, NDX, K, MESH, NMESH) NV = NMESH-K C UOFX NEEDS T. T = 0 C ICS FOR U. CALL DL2SFF(UOFX, K, MESH, NMESH, U) TEMP = NMESH-K DO 1 I = 1, TEMP V(I) = U(I) 1 CONTINUE C ICS FOR V. CALL DPOST(U, NU, K, MESH, NMESH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) COMMON /KMESH/ K, NMESH INTEGER K, NMESH COMMON /CMESH/ MESH DOUBLE PRECISION MESH(100) INTEGER I DO 1 I = 1, NX A(I, 1) = 2D0*UX(I, 1) AUX(I, 1, 1) = 2 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 1 CONTINUE C GET THE INTEGRAL. CALL INTGRL(K, MESH, NMESH, V, X, NX, F, FV) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-DEXP(T) B(1, 2) = U(1, 2)-DEXP(T+1D0) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) INTEGER I DO 1 I = 1, NXMK D(I) = U(I, 1)-V(I) DU(I, I, 1) = 1 DV(I, I) = -1 1 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T0, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN 2 TT = T EU = DEESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = DEXP(T+X(I)) 1 CONTINUE RETURN END SUBROUTINE INTGRL(K, MESH, NMESH, V, X, NX, F, FV) INTEGER NX, NMESH INTEGER K DOUBLE PRECISION MESH(NMESH), V(1), X(NX), F(NX), FV(NX, 1) INTEGER MGQ, I, J, L, IX LOGICAL FIRST DOUBLE PRECISION EWE, KER, WGQ(3), XGQ(3), B(3, 4, 200), KERU DOUBLE PRECISION XX(3) INTEGER TEMP, TEMP1 DATA FIRST/.TRUE./ C TO COMPUTE C F = INTEGRAL FROM MESH(1) TO MESH(NMESH) C KERNEL(X,Y,SUM(I=1,...,NMESH-K) V(I)*B(I,Y)) DY C AND C FV = D(F)/D(V). C ASSUME THAT CALL KERNEL(X,Y,U,KER,KERU) RETURNS C KER = KERNEL(X,Y,U) AND C KERU = PARTIAL KERNEL / PARTIAL U. C V(NMESH-K),FV(NX,NMESH-K) C THE FOLLOWING DECLARATION IS SPECIFIC TO K = 4 SPLINES. IF (NMESH-K .GT. 200) CALL SETERR(27HINTGRL - NMESH-K .GT. NXMAX 1 , 27, 1, 2) C NEED MORE LOCAL SPACE. IF (K .NE. 4) CALL SETERR(17HINTGRL - K .NE. 4, 17, 2, 2) C USE K-1 POINT GAUSSIAN-QUADRATURE RULE ON EACH INTERVAL. MGQ = K-1 IF (FIRST) CALL DGQM11(MGQ, XGQ, WGQ) C ONLY GET GQ RULE ONCE, ITS EXPENSIVE. C THE GAUSSIAN QUADRATURE RULE. C DO INTEGRAL INTERVAL BY INTERVAL. TEMP = NMESH-K DO 6 I = K, TEMP C G.Q. POINTS ON (MESH(I), MESH(I+1)). DO 1 J = 1, MGQ XX(J) = 0.5*(MESH(I+1)+MESH(I))+0.5*(MESH(I+1)-MESH(I))*XGQ( 1 J) 1 CONTINUE IF (FIRST) CALL DBSPLN(K, MESH, NMESH, XX, MGQ, I, B(1, 1, I)) C ONLY GET B-SPLINE BASIS ONCE, ITS EXPENSIVE. DO 5 J = 1, MGQ C GET SUM() V()*B()(XX). EWE = 0 DO 2 L = 1, K TEMP1 = I+L-K EWE = EWE+V(TEMP1)*B(J, L, I) 2 CONTINUE DO 4 IX = 1, NX C GET KERNEL AND PARTIAL. CALL KERNEL(X(IX), XX(J), EWE, KER, KERU) F(IX) = F(IX)+0.5*KER*(MESH(I+1)-MESH(I))*WGQ(J) DO 3 L = 1, K TEMP1 = I+L-K FV(IX, TEMP1) = FV(IX, TEMP1)+0.5*B(J, L, I)*KERU*( 1 MESH(I+1)-MESH(I))*WGQ(J) 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE FIRST = .FALSE. RETURN END SUBROUTINE KERNEL(X, Y, U, KER, KERU) DOUBLE PRECISION X, Y, U, KER, KERU DOUBLE PRECISION DEXP C TO EVALUATE THE KERNEL EXP(X-Y)*U(Y) AND ITS PARTIAL WRT. U. KERU = DEXP(X-Y) KER = KERU*U RETURN END PyBDSF-1.10.1/src/port3/ex/dpostx9.f000066400000000000000000000114701420247104600166570ustar00rootroot00000000000000C$TEST DPT9 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT9 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) COMMON /PARAM/ C DOUBLE PRECISION C EXTERNAL HANDLE, DPOSTD, BC, AF INTEGER NDX, NXC, NXX, I, K, IS(1000) INTEGER NU, NV, NX, I1MACH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DEEBSF, EWE(1000), ERR, U(100), V(1), X(100) DOUBLE PRECISION ERRR, DT, XC(100), UC(100), WS(500), XX(1000) DOUBLE PRECISION D1MACH, TSTOP INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON AUTOMATIC, STATIC MESH REFINEMENT. C U SUB T = U SUB XX + C * U SUB X ON (0,1) C THE SOLUTION IS C U(X,T) = EXP(-C*X). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) C = 50 NU = 1 NV = 0 ERRPAR(1) = 1E-1 ERRPAR(2) = 1E-1 K = 4 NDX = 8 CALL DUMB(0D0, 1D0, NDX, K, XC, NXC) C INITIAL CONDITIONS FOR UC. CALL SETD(NXC-K, 0D0, UC) C INFINITY. ERR = D1MACH(2) 1 IF (ERR .LE. 1D-2) GOTO 6 C HALVE THE CRUDE X. CALL DLUMB(XC, NXC, 3, K, X, NX) C FITTING POINTS FOR REFINEMENT. CALL DLUMD(X, NX, K, XX, NXX) C UC ON XX. CALL DSPLNE(K, XC, NXC, UC, XX, NXX, EWE) C FIT U TO UC ON MESH. CALL DDL2SF(XX, EWE, NXX, K, X, NX, U) TSTOP = 1D0/D1MACH(4) DT = 1D-6 I = NX-2*(K-1) TEMP = I1MACH(2) WRITE (TEMP, 2) I 2 FORMAT (18H SOLVING FOR NDX =, I3) CALL DPOST(U, NU, K, X, NX, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DPOSTD, ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL DPOSTX C ERROR ESTIMATE FOR UC. ERR = DEEBSF(K, XC, NXC, UC, X, NX, U) C ERROR ESTIMATE FOR U. ERRR = ERR/16D0 TEMP = I1MACH(2) WRITE (TEMP, 3) ERR, ERRR 3 FORMAT (21H ERROR ESTIMATES UC =, 1PE10.2, 9H AND U =, 1P 1 E10.2) NXC = NX DO 4 I = 1, NX XC(I) = X(I) 4 CONTINUE TEMP = NX-K DO 5 I = 1, TEMP UC(I) = U(I) 5 CONTINUE GOTO 1 6 STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU( 1 NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) COMMON /PARAM/ C DOUBLE PRECISION C INTEGER I DO 1 I = 1, NX A(I, 1) = UX(I, 1)+C*U(I, 1) AUX(I, 1, 1) = 1 AU(I, 1, 1) = C F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), 1 BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) COMMON /PARAM/ C DOUBLE PRECISION C DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-1D0 B(1, 2) = U(1, 2)-DEXP(-C) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K DOUBLE PRECISION T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T EU = DEESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (15H ERROR IN U(X, , 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /PARAM/ C DOUBLE PRECISION C COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = DEXP((-C)*X(I)) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dpt1.f000066400000000000000000000067741420247104600161300ustar00rootroot00000000000000C$TEST DPT1 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT1 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(1000) EXTERNAL HANDLE, DPOSTD, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION U(100), V(1), MESH(100), DT, WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = U SUB XX + F ON (0,1) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(1000, 4) NU = 1 NV = 0 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1D-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 4 CALL DUMB(0D0, 1D0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETD(NMESH-K, 1D0, U) CALL DPOST(U, NU, K, MESH, NMESH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DPOSTD, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU( 1 NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (X(I)-T**2)*DEXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), 1 BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-1D0 B(1, 2) = U(1, 2)-DEXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K DOUBLE PRECISION T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = DEESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = DEXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dpt2.f000066400000000000000000000103121420247104600161100ustar00rootroot00000000000000C$TEST DPT2 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT2 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(1100) EXTERNAL HANDLE, DPOSTD, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION U(200), V(1), MESH(100), DT, WS(500), TSTOP INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = U SUB XX + F ON (0,1) C BY SETTING U1 = U AND U2 = U1 SUB X AND SOLVING C U1 SUB T = U1 SUB XX + F C ON (0,1) C U1 SUB X = U2 C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(1100, 4) NU = 2 NV = 0 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1D-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 4 CALL DUMB(0D0, 1D0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U1. CALL SETD(NMESH-K, 1D0, U) C INITIAL CONDITIONS FOR U2. TEMP = NMESH-K CALL SETD(NMESH-K, 0D0, U(TEMP+1)) CALL DPOST(U, NU, K, MESH, NMESH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DPOSTD, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU( 1 NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX A(I, 1) = -U(I, 2) AU(I, 1, 2) = -1 F(I, 1) = (X(I)-T**2)*DEXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 A(I, 2) = U(I, 1) AU(I, 2, 1) = 1 F(I, 2) = U(I, 2) FU(I, 2, 2) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), 1 BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-1D0 B(1, 2) = U(1, 2)-DEXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K DOUBLE PRECISION T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL U1OFX, U2OFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU(2) INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C U1OFX AND U2OFX NEED TIME. TT = T EU(1) = DEESFF(K, X, NX, U, U1OFX) EU(2) = DEESFF(K, X, NX, U(1, 2), U2OFX) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 2(1PE10.2)) RETURN END SUBROUTINE U1OFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = DEXP(X(I)*T) 1 CONTINUE RETURN END SUBROUTINE U2OFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = T*DEXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dpt3.f000066400000000000000000000113451420247104600161200ustar00rootroot00000000000000C$TEST DPT3 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT3 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL DEE, HANDLE, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION U(100), V(1), MESH(100), DT, WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = U SUB XX + V + F ON (0,1) C V SUB T = U( 1/2, T ) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = COS(XT) AND V(T) = 2 SIN(T/2). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 1 ERRPAR(1) = 1E-2 C ESSENTIALLY RELATIVE ERROR. ERRPAR(2) = 1E-6 TSTOP = 1 DT = 1D-6 K = 4 NDX = 4 C NDX UNIFORM MESH POINTS ON (0,1). CALL DUMB(0D0, 1D0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETD(NMESH-K, 1D0, U) C INITIAL VALUE FOR V. V(1) = 0 CALL DPOST(U, NU, K, MESH, NMESH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) INTEGER I DOUBLE PRECISION DCOS, DSIN DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = V(1)-UT(I, 1)-X(I)*DSIN(X(I)*T)+T**2*DCOS(X(I)*T)- 1 2D0*DSIN(T/2D0) FUT(I, 1, 1) = -1 FV(I, 1, 1) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) DOUBLE PRECISION DCOS B(1, 1) = U(1, 1)-1D0 B(1, 2) = U(1, 2)-DCOS(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) INTEGER INTRVD, I, ILEFT DOUBLE PRECISION XI(1), BASIS(10) INTEGER TEMP XI(1) = 0.5D0 C FIND 0.5 IN MESH. ILEFT = INTRVD(NX, X, XI(1)) IF (K .GT. 10) CALL SETERR( 1 41HDEE - K .GT. 10, NEED MORE SPACE IN BASIS, 41, 1, 2) C B-SPLINE BASIS AT XI(1). CALL DBSPLN(K, X, NX, XI, 1, ILEFT, BASIS) D(1) = VT(1) DVT(1, 1) = 1 C VT(1) - U(0.5,T) = 0. DO 1 I = 1, K TEMP = ILEFT+I-K D(1) = D(1)-U(TEMP, 1)*BASIS(I) TEMP = ILEFT+I-K DU(1, TEMP, 1) = DU(1, TEMP, 1)-BASIS(I) 1 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, DABS, DSIN, EU, EV INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = DEESFF(K, X, NX, U, UOFX) EV = DABS(V(1)-2D0*DSIN(T/2D0)) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU, EV 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DCOS DO 1 I = 1, NX U(I) = DCOS(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dpt4.f000066400000000000000000000106331420247104600161200ustar00rootroot00000000000000C$TEST DPT4 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT4 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL DEE, HANDLE, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION U(100), V(1), MESH(100), DT, DATAN, WS(500) DOUBLE PRECISION TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = U SUB XX - U**3 + F ON (-PI,+PI) C SUBJECT TO PERIODIC BOUNDARY CONDITIONS, C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = COS(X)*SIN(T). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 1 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 8D0*DATAN(1D0) DT = 0.4 C MAKE A MESH OF NDX UNIFORM POINTS ON (-PI,+PI). K = 4 NDX = 7 CALL DUMB((-4D0)*DATAN(1D0), 4D0*DATAN(1D0), NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETD(NMESH-K, 0D0, U) C INITIAL CONDITIONS FOR V. V(1) = 0 CALL DPOST(U, NU, K, MESH, NMESH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) INTEGER I DOUBLE PRECISION DCOS, DSIN DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (-UT(I, 1))-U(I, 1)**3+DCOS(X(I))*(DCOS(T)+DSIN(T)+ 1 DCOS(X(I))**2*DSIN(T)**3) FUT(I, 1, 1) = -1 FU(I, 1, 1) = (-3D0)*U(I, 1)**2 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) B(1, 1) = UX(1, 1)-V(1) B(1, 2) = UX(1, 2)-V(1) BUX(1, 1, 1) = 1 BV(1, 1, 1) = -1 BUX(1, 1, 2) = 1 BV(1, 1, 2) = -1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) INTEGER TEMP C U(-PI,T) - U(+PI,T) = 0. TEMP = NX-K D(1) = U(1, 1)-U(TEMP, 1) DU(1, 1, 1) = 1 TEMP = NX-K DU(1, TEMP, 1) = -1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU, EV INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = DEESFF(K, X, NX, U, UOFX) EV = V(1) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU, EV 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DCOS, DSIN DO 1 I = 1, NX U(I) = DCOS(X(I))*DSIN(T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dpt5.f000066400000000000000000000173401420247104600161230ustar00rootroot00000000000000C$TEST DPT5 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT5 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T DOUBLE PRECISION T COMMON /PARAM/ VC, X DOUBLE PRECISION VC(3), X(3) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, IDLUMB, ISTKGT, K, IU, IS(1000) INTEGER NU, NV, IMMMD, IMESH, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, V(3), DT, XB(3), WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = ( K(T,X) * U SUB X ) SUB X + G ON (-1,+2) * (0,+1) C WITH A MOVING FRONT X(T) CHARACTERIZED BY U(X(T),T) == 1 AND C JUMP ACROSS X(T) OF K(T,X) U SUB X = - 3 * X'(T). C WHERE K(T,X) IS PIECEWISE CONSTANT, SAY C 1 FOR X < X(T) C K(T,X) = C 2 FOR X > X(T) C AND G IS CHOSEN SO THAT THE SOLUTION IS C EXP(X-X(T)) FOR X < X(T) C U(X,T) = C EXP(X(T)-X) FOR X > X(T) C AND X(1,T) = T. THE MOVING FRONT IS TRACKED C IMPLICITLY BY FORCING U(X(1,T),T) = 1 AS A PSEUDO-RANKINE-HEUGONIOT RE CLATION. C V(1,2,3) GIVES THE MOVING MESH. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 3 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTART = 0 TSTOP = 1 DT = 0.1 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB ARRAY. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = IDLUMB(XB, 3, NDX, K, NMESH) C MAKE 1 OF MULTIPLICITY K-1. IMESH = IMMMD(IMESH, NMESH, 1D0, K-1) X(1) = -1 X(2) = 0 X(3) = 2 C INITIAL VALUES FOR V. CALL DLPLMG(3, X, VC) C GET U ON THE PORT STACK. IU = ISTKGT(NMESH-K, 4) C UOFX NEEDS TIME. T = TSTART C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL DL2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT THE ICS. CALL HANDLE(T-1D0, WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, 1 WS(IMESH), NMESH, DT, TSTOP) CALL DPOST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP 1 , DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), 1 UTX(NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) COMMON /DPOSTF/ FAILED LOGICAL FAILED INTEGER I DOUBLE PRECISION KAY, XXI(99), XTV(99), XVV(99), X(99), DEXP DOUBLE PRECISION XXIV(99), AX(99), FX(99), XT(99), XV(99) LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL DLPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL DPOSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 7 I = 1, NX IF (XI(I) .GT. 1D0) GOTO 2 KAY = 1 GOTO 3 2 KAY = 2 3 A(I, 1) = KAY*UX(I, 1) AUX(I, 1, 1) = KAY IF (XI(I) .GT. 1D0) GOTO 4 A(I, 1) = A(I, 1)-3D0*VT(2) AVT(I, 1, 2) = -3 4 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 IF (XI(I) .GT. 1D0) GOTO 5 F(I, 1) = F(I, 1)+2D0*DEXP(X(I)-T) FX(I) = 2D0*DEXP(X(I)-T) GOTO 6 5 F(I, 1) = F(I, 1)+DEXP(T-X(I)) FX(I) = -DEXP(T-X(I)) 6 CONTINUE 7 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL DPOSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V, 1 VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU, 2 FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-DEXP((-1D0)-T) B(1, 2) = U(1, 2)-DEXP(T-2D0) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) INTEGER INTRVD, I, ILEFT DOUBLE PRECISION BX(10), XX(1) INTEGER TEMP D(1) = V(1)+1D0 C X(0,V) = -1. DV(1, 1) = 1 XX(1) = 1 C FIND 1 IN THE MESH. ILEFT = INTRVD(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL DBSPLN(K, X, NX, XX, 1, ILEFT, BX) C U(X(1,V),T) = 1. D(2) = -1 DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-2D0 C X(2,V) = +2. DV(3, 3) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /PARAM/ VC, XX DOUBLE PRECISION VC(3), XX(3) COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU, EV(3) INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, V, VC) EU = DEESFF(K, X, NX, U, UOFX) EV(1) = V(1)+1D0 EV(2) = V(2)-T EV(3) = V(3)-2D0 TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 3( 1 1PE10.2)) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX DOUBLE PRECISION XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X DOUBLE PRECISION VC(3), X(3) COMMON /TIME/ T DOUBLE PRECISION T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DEXP, WS(500), XOFXI INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 4) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 4) C MAP INTO USER SYSTEM. CALL DLPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 3 I = 1, NX TEMP = IXX+I XOFXI = WS(TEMP-1) IF (XI(I) .GT. 1D0) GOTO 1 U(I) = DEXP(XOFXI-T) GOTO 2 1 U(I) = DEXP(T-XOFXI) 2 CONTINUE 3 CONTINUE CALL LEAVE RETURN END PyBDSF-1.10.1/src/port3/ex/dpt6.f000066400000000000000000000176531420247104600161330ustar00rootroot00000000000000C$TEST DPT6 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT6 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T DOUBLE PRECISION T COMMON /PARAM/ VC, X DOUBLE PRECISION VC(4), X(3) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, IDLUMB, ISTKGT, K, IU, IS(1000) INTEGER NU, NV, IMMMD, IMESH, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, V(4), DT, XB(3), WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON THE HYPERBOLIC PROBLEM C U SUB T = - U SUB X + G ON (-PI,+PI) * (0,PI) C WITH A MOVING SHOCK X(T) CHARACTERIZED BY C U(X(T)+,T) = 0 AND C U(X(T)+,T) - U(X(T)-,T) = X'(T) C WHERE G IS CHOSEN SO THAT THE SOLUTION IS C SIN(X+T) FOR X < X(T) C U(X,T) = C COS(X+T) FOR X > X(T) C WITH X(T) = PI/2 -T . C V(1,2,3) GIVES THE MOVING MESH AND V(4) IS THE HEIGHT OF THE JUMP. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 4 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTART = 0 TSTOP = 3.14 DT = 0.4 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = IDLUMB(XB, 3, NDX, K, NMESH) C MAKE 1 OF MULTIPLICITY K-1. IMESH = IMMMD(IMESH, NMESH, 1D0, K-1) X(1) = -3.14 X(2) = 3.14/2. X(3) = 3.14 C INITIAL VALUES FOR V. CALL DLPLMG(3, X, VC) C GET U ON THE PORT STACK. IU = ISTKGT(NMESH-K, 4) C UOFX NEEDS TIME. T = TSTART C THE INITIAL HEIGHT OF THE JUMP. VC(4) = 1 C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL DL2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT ICS. CALL HANDLE(T-1D0, WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, 1 WS(IMESH), NMESH, DT, TSTOP) CALL DPOST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP 1 , DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), 1 UTX(NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) COMMON /DPOSTF/ FAILED LOGICAL FAILED INTEGER I DOUBLE PRECISION XXI(99), XTV(99), XVV(99), X(99), DCOS, DSIN DOUBLE PRECISION XXIV(99), AX(99), FX(99), XT(99), XV(99) LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL DLPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL DPOSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 4 I = 1, NX A(I, 1) = -U(I, 1) AU(I, 1, 1) = -1 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 IF (XI(I) .GT. 1D0) GOTO 2 F(I, 1) = F(I, 1)-2D0*DCOS(X(I)+T) FX(I) = 2D0*DSIN(X(I)+T) GOTO 3 2 F(I, 1) = F(I, 1)-VT(4) FVT(I, 1, 4) = -1 F(I, 1) = F(I, 1)+2D0*DSIN(X(I)+T) FX(I) = 2D0*DCOS(X(I)+T) 3 CONTINUE 4 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL DPOSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V, 1 VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU, 2 FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) DOUBLE PRECISION DSIN B(1, 1) = U(1, 1)-DSIN(T-3.14) C U(-PI,T) = SIN(-PI+T). BU(1, 1, 1) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) INTEGER INTRVD, I, ILEFT DOUBLE PRECISION BX(10), XX(1), D1MACH INTEGER TEMP D(1) = V(1)+3.14 C X(0,V) = -PI. DV(1, 1) = 1 C XX(1) = 1 + A ROUNDING ERROR. XX(1) = D1MACH(4)+1D0 ILEFT = INTRVD(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL DBSPLN(K, X, NX, XX, 1, ILEFT, BX) D(2) = -V(4) C U(X(T)+,T) - JUMP = 0. DV(2, 4) = -1 DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-3.14 C X(2,V) = +PI. DV(3, 3) = 1 C JUMP + D( X(1,V(T)) )/DT = 0. D(4) = VT(2)+V(4) DVT(4, 2) = 1 DV(4, 4) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /PARAM/ VC, XX DOUBLE PRECISION VC(4), XX(3) COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU, EV(2) INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN 2 TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, V, VC) EU = DEESFF(K, X, NX, U, UOFX) C ERROR IN POSITION OF SHOCK. EV(1) = V(2)-(3.14/2.-T) C ERROR IN HEIGHT OF SHOCK. EV(2) = V(4)-1D0 TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 2( 1 1PE10.2)) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX DOUBLE PRECISION XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X DOUBLE PRECISION VC(4), X(3) COMMON /TIME/ T DOUBLE PRECISION T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION EWE, WS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 4) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 4) C MAP INTO USER SYSTEM. CALL DLPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 1 I = 1, NX TEMP = IXX+I U(I) = EWE(T, WS(TEMP-1), VC(2)) IF (XI(I) .GT. 1D0) U(I) = U(I)+1D0 1 CONTINUE CALL LEAVE RETURN END DOUBLE PRECISION FUNCTION EWE(T, X, XBREAK) DOUBLE PRECISION T, X, XBREAK DOUBLE PRECISION DCOS, DSIN IF (X .GE. XBREAK) GOTO 1 EWE = DSIN(X+T) RETURN 1 IF (X .LE. XBREAK) GOTO 2 EWE = DCOS(X+T) RETURN 2 CALL SETERR(17HEWE - X == XBREAK, 17, 1, 2) 3 CONTINUE 4 STOP END PyBDSF-1.10.1/src/port3/ex/dpt7.f000066400000000000000000000170711420247104600161260ustar00rootroot00000000000000C$TEST DPT7 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT7 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T DOUBLE PRECISION T COMMON /PARAM/ VC, X, XI0 DOUBLE PRECISION VC(4), X(3), XI0 EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, IDLUMB, ISTKGT, K, IU, IS(1000) INTEGER NU, NV, IMMMD, IMESH, NMESH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, D, V(4), DT, XB(3), WS(500) DOUBLE PRECISION TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON C U SUB T = U SUB XX + F ON (20,10**6) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(-X*T), C AND X(1,T) IS CHOSEN SO THAT THE BOUNDARY-LAYER IS TRACKED C IMPLICITLY BY FORCING U(X(1,T)/2.3/D,T) = 1/E. C THIS IS THE SAME AS REQUIRING THE EXACT SOLUTION TO HAVE C U(X(1,T),T) = 10 ** -D. C V(1,2,3) GIVES THE MOVING MESH, V(4) IS TIME. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 4 ERRPAR(1) = 1E-2 C MIXED RELATIVE AND ABSOLUTE ERROR. ERRPAR(2) = 1E-2 D = 3 C W(XI0,T) = 1/E. XI0 = 1./2.3/D TSTART = 20 TSTOP = 1D+6 DT = 1D-2 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = IDLUMB(XB, 3, NDX, K, NMESH) C MAKE 1D0 OF MULTIPLICITY K-1. IMESH = IMMMD(IMESH, NMESH, 1D0, K-1) X(1) = 0 X(2) = 2.3*D/TSTART X(3) = 1 C INITIAL VALUES FOR V. CALL DLPLMG(3, X, VC) C GET U ON PORT STACK. IU = ISTKGT(NMESH-K, 4) C UOFX NEEDS TIME. T = TSTART VC(4) = TSTART C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL DL2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT ICS. CALL HANDLE(T-1D0, WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, 1 WS(IMESH), NMESH, DT, TSTOP) CALL DPOST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP 1 , DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), 1 UTX(NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) COMMON /DPOSTF/ FAILED LOGICAL FAILED INTEGER I DOUBLE PRECISION XXI(99), XTV(99), XVV(99), X(99), XXIV(99), AX( 1 99) DOUBLE PRECISION FX(99), XT(99), XV(99), DEXPL LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL DLPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL DPOSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 2 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (-UT(I, 1))-DEXPL((-X(I))*V(4))*(X(I)+V(4)**2) FUT(I, 1, 1) = -1 FV(I, 1, 4) = (-DEXPL((-X(I))*V(4)))*(2D0*V(4)+(X(I)+V(4)**2)*( 1 -X(I))) FX(I) = (-DEXPL((-X(I))*V(4)))*(1D0-V(4)*X(I)-V(4)**3) 2 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL DPOSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V, 1 VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU, 2 FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) DOUBLE PRECISION DEXPL C U(0,T) = 1 B(1, 1) = U(1, 1)-1D0 C U(1,T) = EXP(-T) B(1, 2) = U(1, 2)-DEXPL(-V(4)) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 BV(1, 4, 2) = DEXPL(-V(4)) RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) COMMON /PARAM/ VC, XC, XI0 DOUBLE PRECISION VC(4), XC(3), XI0 INTEGER INTRVD, I, ILEFT DOUBLE PRECISION DEXP, BX(10), XX(1) INTEGER TEMP D(1) = V(1) C X(0,V) = 0. DV(1, 1) = 1 XX(1) = XI0 ILEFT = INTRVD(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL DBSPLN(K, X, NX, XX, 1, ILEFT, BX) D(2) = -DEXP(-1D0) C D(2) = W(XI0,T) - EXP(-1). DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-1D0 C X(2,V) = 1. DV(3, 3) = 1 D(4) = VT(4)-1D0 DVT(4, 4) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /PARAM/ VC, XX, XI0 DOUBLE PRECISION VC(4), XX(3), XI0 COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, DLPLMT, EU, EV INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN C LET DT CARRY V(2) DOWN BY NO MORE THAN A FACTOR OF 10. 2 DT = DLPLMT(T, V, NV, T0, V0, 1D-1, DT) TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFD(NV, V, VC) EU = DEESFF(K, X, NX, U, UOFX) C ERROR IN POSITION OF BOUNDARY LAYER. EV = V(2)-1D0/XI0/T TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX DOUBLE PRECISION XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X, XI0 DOUBLE PRECISION VC(4), X(3), XI0 COMMON /TIME/ T DOUBLE PRECISION T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION WS(500), DEXPL INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 4) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 4) C MAP INTO USER SYSTEM. CALL DLPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 1 I = 1, NX TEMP = IXX+I U(I) = DEXPL((-WS(TEMP-1))*T) 1 CONTINUE CALL LEAVE RETURN END PyBDSF-1.10.1/src/port3/ex/dpt8.f000066400000000000000000000156411420247104600161300ustar00rootroot00000000000000C$TEST DPT8 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT8 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(5000) COMMON /TIME/ T DOUBLE PRECISION T COMMON /KMESH/ K, NMESH INTEGER K, NMESH COMMON /CMESH/ MESH DOUBLE PRECISION MESH(100) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, I, IS(1000), NU, NV REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION U(100), V(100), DT, WS(500), TSTOP INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON THE INTEGRO-PDE C U SUB T = 2 * U SUB XX - INT(0,1) EXP(X-Y)*U(Y) DY ON (0,1) C SUBJECT TO GIVEN DIRICHLET BCS, CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(T+X). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(5000, 4) NU = 1 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1D-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 7 CALL DUMB(0D0, 1D0, NDX, K, MESH, NMESH) NV = NMESH-K C UOFX NEEDS T. T = 0 C ICS FOR U. CALL DL2SFF(UOFX, K, MESH, NMESH, U) TEMP = NMESH-K DO 1 I = 1, TEMP V(I) = U(I) 1 CONTINUE C ICS FOR V. CALL DPOST(U, NU, K, MESH, NMESH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV) 1 , F(NX, NU), FU(NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV) 1 , FVT(NX, NU, NV) COMMON /KMESH/ K, NMESH INTEGER K, NMESH COMMON /CMESH/ MESH DOUBLE PRECISION MESH(100) INTEGER I DO 1 I = 1, NX A(I, 1) = 2D0*UX(I, 1) AUX(I, 1, 1) = 2 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 1 CONTINUE C GET THE INTEGRAL. CALL INTGRL(K, MESH, NMESH, V, X, NX, F, FV) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2 1 ), BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), 1 BVT(NU, NV, 2) DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-DEXP(T) B(1, 2) = U(1, 2)-DEXP(T+1D0) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT( 1 NV) DOUBLE PRECISION D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV( 1 NV, NV), DVT(NV, NV) INTEGER I DO 1 I = 1, NXMK D(I) = U(I, 1)-V(I) DU(I, I, 1) = 1 DV(I, I) = -1 1 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K DOUBLE PRECISION T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T0, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN 2 TT = T EU = DEESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = DEXP(T+X(I)) 1 CONTINUE RETURN END SUBROUTINE INTGRL(K, MESH, NMESH, V, X, NX, F, FV) INTEGER NX, NMESH INTEGER K DOUBLE PRECISION MESH(NMESH), V(1), X(NX), F(NX), FV(NX, 1) INTEGER MGQ, I, J, L, IX LOGICAL FIRST DOUBLE PRECISION EWE, KER, WGQ(3), XGQ(3), B(3, 4, 200), KERU DOUBLE PRECISION XX(3) INTEGER TEMP, TEMP1 DATA FIRST/.TRUE./ C TO COMPUTE C F = INTEGRAL FROM MESH(1) TO MESH(NMESH) C KERNEL(X,Y,SUM(I=1,...,NMESH-K) V(I)*B(I,Y)) DY C AND C FV = D(F)/D(V). C ASSUME THAT CALL KERNEL(X,Y,U,KER,KERU) RETURNS C KER = KERNEL(X,Y,U) AND C KERU = PARTIAL KERNEL / PARTIAL U. C V(NMESH-K),FV(NX,NMESH-K) C THE FOLLOWING DECLARATION IS SPECIFIC TO K = 4 SPLINES. IF (NMESH-K .GT. 200) CALL SETERR(27HINTGRL - NMESH-K .GT. NXMAX 1 , 27, 1, 2) C NEED MORE LOCAL SPACE. IF (K .NE. 4) CALL SETERR(17HINTGRL - K .NE. 4, 17, 2, 2) C USE K-1 POINT GAUSSIAN-QUADRATURE RULE ON EACH INTERVAL. MGQ = K-1 IF (FIRST) CALL DGQM11(MGQ, XGQ, WGQ) C ONLY GET GQ RULE ONCE, ITS EXPENSIVE. C THE GAUSSIAN QUADRATURE RULE. C DO INTEGRAL INTERVAL BY INTERVAL. TEMP = NMESH-K DO 6 I = K, TEMP C G.Q. POINTS ON (MESH(I), MESH(I+1)). DO 1 J = 1, MGQ XX(J) = 0.5*(MESH(I+1)+MESH(I))+0.5*(MESH(I+1)-MESH(I))*XGQ( 1 J) 1 CONTINUE IF (FIRST) CALL DBSPLN(K, MESH, NMESH, XX, MGQ, I, B(1, 1, I)) C ONLY GET B-SPLINE BASIS ONCE, ITS EXPENSIVE. DO 5 J = 1, MGQ C GET SUM() V()*B()(XX). EWE = 0 DO 2 L = 1, K TEMP1 = I+L-K EWE = EWE+V(TEMP1)*B(J, L, I) 2 CONTINUE DO 4 IX = 1, NX C GET KERNEL AND PARTIAL. CALL KERNEL(X(IX), XX(J), EWE, KER, KERU) F(IX) = F(IX)+0.5*KER*(MESH(I+1)-MESH(I))*WGQ(J) DO 3 L = 1, K TEMP1 = I+L-K FV(IX, TEMP1) = FV(IX, TEMP1)+0.5*B(J, L, I)*KERU*( 1 MESH(I+1)-MESH(I))*WGQ(J) 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE FIRST = .FALSE. RETURN END SUBROUTINE KERNEL(X, Y, U, KER, KERU) DOUBLE PRECISION X, Y, U, KER, KERU DOUBLE PRECISION DEXP C TO EVALUATE THE KERNEL EXP(X-Y)*U(Y) AND ITS PARTIAL WRT. U. KERU = DEXP(X-Y) KER = KERU*U RETURN END PyBDSF-1.10.1/src/port3/ex/dpt9.f000066400000000000000000000114701420247104600161250ustar00rootroot00000000000000C$TEST DPT9 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPT9 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) COMMON /PARAM/ C DOUBLE PRECISION C EXTERNAL HANDLE, DPOSTD, BC, AF INTEGER NDX, NXC, NXX, I, K, IS(1000) INTEGER NU, NV, NX, I1MACH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DEEBSF, EWE(1000), ERR, U(100), V(1), X(100) DOUBLE PRECISION ERRR, DT, XC(100), UC(100), WS(500), XX(1000) DOUBLE PRECISION D1MACH, TSTOP INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST DPOST ON AUTOMATIC, STATIC MESH REFINEMENT. C U SUB T = U SUB XX + C * U SUB X ON (0,1) C THE SOLUTION IS C U(X,T) = EXP(-C*X). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) C = 50 NU = 1 NV = 0 ERRPAR(1) = 1E-1 ERRPAR(2) = 1E-1 K = 4 NDX = 8 CALL DUMB(0D0, 1D0, NDX, K, XC, NXC) C INITIAL CONDITIONS FOR UC. CALL SETD(NXC-K, 0D0, UC) C INFINITY. ERR = D1MACH(2) 1 IF (ERR .LE. 1D-2) GOTO 6 C HALVE THE CRUDE X. CALL DLUMB(XC, NXC, 3, K, X, NX) C FITTING POINTS FOR REFINEMENT. CALL DLUMD(X, NX, K, XX, NXX) C UC ON XX. CALL DSPLNE(K, XC, NXC, UC, XX, NXX, EWE) C FIT U TO UC ON MESH. CALL DDL2SF(XX, EWE, NXX, K, X, NX, U) TSTOP = 1D0/D1MACH(4) DT = 1D-6 I = NX-2*(K-1) TEMP = I1MACH(2) WRITE (TEMP, 2) I 2 FORMAT (18H SOLVING FOR NDX =, I3) CALL DPOST(U, NU, K, X, NX, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DPOSTD, ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL DPOSTX C ERROR ESTIMATE FOR UC. ERR = DEEBSF(K, XC, NXC, UC, X, NX, U) C ERROR ESTIMATE FOR U. ERRR = ERR/16D0 TEMP = I1MACH(2) WRITE (TEMP, 3) ERR, ERRR 3 FORMAT (21H ERROR ESTIMATES UC =, 1PE10.2, 9H AND U =, 1P 1 E10.2) NXC = NX DO 4 I = 1, NX XC(I) = X(I) 4 CONTINUE TEMP = NX-K DO 5 I = 1, TEMP UC(I) = U(I) 5 CONTINUE GOTO 1 6 STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU( 1 NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) COMMON /PARAM/ C DOUBLE PRECISION C INTEGER I DO 1 I = 1, NX A(I, 1) = UX(I, 1)+C*U(I, 1) AUX(I, 1, 1) = 1 AU(I, 1, 1) = C F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), 1 BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) COMMON /PARAM/ C DOUBLE PRECISION C DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-1D0 B(1, 2) = U(1, 2)-DEXP(-C) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K DOUBLE PRECISION T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T EU = DEESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (15H ERROR IN U(X, , 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /PARAM/ C DOUBLE PRECISION C COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = DEXP((-C)*X(I)) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dptt.f000066400000000000000000000115721420247104600162230ustar00rootroot00000000000000C$TEST DPTT C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DPTT C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DPOST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL HANDLE, DPOSTD, BC, AF INTEGER NDX, NXH, I, K, IS(1000), NU INTEGER NV, NX, I1MACH REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DEEBSF, ERR, DABS, U(100), V(1), X(100) DOUBLE PRECISION DMAX1, DT, UE(100), UH(100), XH(100), WS(500) DOUBLE PRECISION TSTOP INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO ESTIMATE X AND T ERROR AS SUM. C U SUB T = U SUB XX + F ON (0,1) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 0 ERRPAR(1) = 0 ERRPAR(2) = 1E-2 K = 4 NDX = 4 TSTOP = 1 DT = 1D-2 C CRUDE MESH. CALL DUMB(0D0, 1D0, NDX, K, X, NX) C INITIAL CONDITIONS FOR U. CALL SETD(NX-K, 1D0, U) TEMP = I1MACH(2) WRITE (TEMP, 1) 1 FORMAT (36H SOLVING ON CRUDE MESH USING ERRPAR.) CALL DPOST(U, NU, K, X, NX, V, NV, 0D0, TSTOP, DT, AF, BC, DPOSTD, 1 ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL DPOSTX C HALVE THE MESH SPACING. CALL DUMB(0D0, 1D0, 2*NDX-1, K, XH, NXH) C INITIAL CONDITIONS FOR UH. CALL SETD(NXH-K, 1D0, UH) DT = 1D-2 TEMP = I1MACH(2) WRITE (TEMP, 2) 2 FORMAT (38H SOLVING ON REFINED MESH USING ERRPAR.) CALL DPOST(UH, NU, K, XH, NXH, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DPOSTD, ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL DPOSTX C ESTIMATE U ERROR. ERR = DEEBSF(K, X, NX, U, XH, NXH, UH) WRITE (6, 3) ERR 3 FORMAT (24H U ERROR FROM U AND UH =, 1PE10.2) C INITIAL CONDITIONS FOR UE. CALL SETD(NX-K, 1D0, UE) DT = 1D-2 ERRPAR(1) = ERRPAR(1)/10. ERRPAR(2) = ERRPAR(2)/10. TEMP = I1MACH(2) WRITE (TEMP, 4) 4 FORMAT (39H SOLVING ON CRUDE MESH USING ERRPAR/10.) CALL DPOST(UE, NU, K, X, NX, V, NV, 0D0, TSTOP, DT, AF, BC, 1 DPOSTD, ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL DPOSTX ERR = 0 TEMP = NX-K DO 5 I = 1, TEMP ERR = DMAX1(ERR, DABS(U(I)-UE(I))) 5 CONTINUE WRITE (6, 6) ERR 6 FORMAT (24H U ERROR FROM U AND UE =, 1PE10.2) STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV DOUBLE PRECISION T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX( 1 NX, NU) DOUBLE PRECISION V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, 1 NU, NU), AUT(NX, NU, NU) DOUBLE PRECISION AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU( 1 NX, NU, NU), FUX(NX, NU, NU) DOUBLE PRECISION FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (X(I)-T**2)*DEXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV DOUBLE PRECISION T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) DOUBLE PRECISION UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), 1 BUX(NU, NU, 2) DOUBLE PRECISION BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) DOUBLE PRECISION DEXP B(1, 1) = U(1, 1)-1D0 B(1, 2) = U(1, 2)-DEXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K DOUBLE PRECISION T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) DOUBLE PRECISION X(NX), DT, TSTOP COMMON /TIME/ TT DOUBLE PRECISION TT EXTERNAL UOFX INTEGER I1MACH DOUBLE PRECISION DEESFF, EU INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T EU = DEESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX DOUBLE PRECISION X(NX), U(NX), W(NX) COMMON /TIME/ T DOUBLE PRECISION T INTEGER I DOUBLE PRECISION DEXP DO 1 I = 1, NX U(I) = DEXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dtg1.f000066400000000000000000000145171420247104600161110ustar00rootroot00000000000000C$TEST DTG1 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG1 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IS(1000), IU, IX INTEGER IY, NU, KX, NX, KY, NY INTEGER IDUMB REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DT, LX, LY, RX, RY DOUBLE PRECISION WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE HEAT EQUATION WITH SOLUTION U == T*X*Y, C GRAD . ( U + UX + .1 * UY, U + UY + .1 * UX ) = UT + UX + UY +G(X,T) C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IDUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IDUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) C INITIAL CONDITIONS FOR U. CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I)+.1*UY(P, Q, I)+U(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I)+U(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = .1 AUX(P, Q, I, I, 2) = .1 AU(P, Q, I, I, 1) = 1 AU(P, Q, I, I, 2) = 1 F(P, Q, I) = UT(P, Q, I)+UX(P, Q, I)+UY(P, Q, I) FUT(P, Q, I, I) = 1 FUX(P, Q, I, I) = 1 FUY(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)+.2*T-X(P)*Y(Q) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN C GET AND PRINT THE ERROR. 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY0KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dtg2.f000066400000000000000000000151411420247104600161040ustar00rootroot00000000000000C$TEST DTG2 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG2 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IS(1000), IU, IX INTEGER IY, NU, KX, NX, KY, NY INTEGER IDUMB REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DT, LX, LY, RX, RY DOUBLE PRECISION WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE TWO COUPLED, NONLINEAR HEAT EQUATIONS. C U1 SUB T = DIV . ( U1X, U1Y ) - U1*U2 + G1 C U2 SUB T = DIV . ( U2X, U2Y ) - U1*U2 + G2 C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 2 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1E-2 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IDUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IDUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 1D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER P, Q DOUBLE PRECISION DEXP DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, 1, 1) = UX(P, Q, 1) AUX(P, Q, 1, 1, 1) = 1 A(P, Q, 1, 2) = UY(P, Q, 1) AUY(P, Q, 1, 1, 2) = 1 F(P, Q, 1) = UT(P, Q, 1)+U(P, Q, 1)*U(P, Q, 2) FU(P, Q, 1, 1) = U(P, Q, 2) FU(P, Q, 1, 2) = U(P, Q, 1) FUT(P, Q, 1, 1) = 1 A(P, Q, 2, 1) = UX(P, Q, 2) AUX(P, Q, 2, 2, 1) = 1 A(P, Q, 2, 2) = UY(P, Q, 2) AUY(P, Q, 2, 2, 2) = 1 F(P, Q, 2) = UT(P, Q, 2)+U(P, Q, 1)*U(P, Q, 2) FU(P, Q, 2, 1) = U(P, Q, 2) FU(P, Q, 2, 2) = U(P, Q, 1) FUT(P, Q, 2, 2) = 1 F(P, Q, 1) = F(P, Q, 1)-(DEXP(T*(X(P)-Y(Q)))*(X(P)-Y(Q)-2D0* 1 T*T)+1D0) F(P, Q, 2) = F(P, Q, 2)-(DEXP(T*(Y(Q)-X(P)))*(Y(Q)-X(P)-2D0* 1 T*T)+1D0) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DOUBLE PRECISION DEXP DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-DEXP(T*(X(I)-Y(J))) BU(I, J, 2, 2) = 1 B(I, J, 2) = U(I, J, 2)-DEXP(T*(Y(J)-X(I))) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER J, IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NU*NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) DO 5 J = 1, NU C EVALUATE THEM. TEMP = (J-1)*(NX-KX)*(NY-KY) CALL DTSD1(2, KA, WS, ITA, NTA, U(TEMP+1), WS, IXA, NXA, MA, 1 WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 3 I = 1, TEMP TEMP2 = IEWE+I-1+(J-1)*NXS*NYS TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2)-WS(TEMP1-1))) 3 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 4) T, J, ERRU 4 FORMAT (14H ERROR IN U(.,, 1PE10.2, 1H,, I2, 3H) =, 1PE10.2) 5 CONTINUE CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P REAL FLOAT DOUBLE PRECISION DBLE, DEXP C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = DEXP(DBLE(FLOAT((-1)**(P+1)))*T*(X(I)-Y(J))) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dtg3.f000066400000000000000000000167121420247104600161120ustar00rootroot00000000000000C$TEST DTG3 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG3 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, IDLUMB, ISTKGT, I, IS(1000) INTEGER IU, IX, IY, NU, KX, NX INTEGER KY, NY, IDUMB, IMMMD REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DT, YB(4), LX, RX, WS(500) DOUBLE PRECISION TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE LAYERED HEAT EQUATION, WITH KAPPA = 1, 1/2, 1/3, C DIV . ( KAPPA(X,Y) * GRAD U ) = UT + G C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 DO 1 I = 1, 4 YB(I) = I-1 1 CONTINUE KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IDUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IDLUMB(YB, 4, NDY, KY, NY) C MAKE MULT = KY-1. IY = IMMMD(IY, NY, YB(2), KY-1) C MAKE MULT = KY-1. IY = IMMMD(IY, NY, YB(3), KY-1) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DOUBLE PRECISION KAPPA LOGICAL TEMP DO 7 I = 1, NU DO 6 Q = 1, NY DO 5 P = 1, NX IF (Y(Q) .GE. 1D0) GOTO 1 KAPPA = 1 GOTO 4 1 IF (Y(Q) .GE. 2D0) GOTO 2 KAPPA = 0.5 GOTO 3 2 KAPPA = 1D0/3D0 3 CONTINUE 4 A(P, Q, I, 1) = KAPPA*UX(P, Q, I) AUX(P, Q, I, I, 1) = KAPPA A(P, Q, I, 2) = KAPPA*UY(P, Q, I) AUY(P, Q, I, I, 2) = KAPPA F(P, Q, I) = UT(P, Q, I) FUT(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)-Y(Q)/KAPPA TEMP = 1D0 .LT. Y(Q) IF (TEMP) TEMP = Y(Q) .LT. 2D0 IF (TEMP) F(P, Q, I) = F(P, Q, I)+1D0 TEMP = 2D0 .LT. Y(Q) IF (TEMP) TEMP = Y(Q) .LT. 3D0 IF (TEMP) F(P, Q, I) = F(P, Q, I)+3D0 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J LOGICAL TEMP DO 6 J = 1, NY DO 5 I = 1, NX TEMP = X(I) .EQ. LX IF (.NOT. TEMP) TEMP = X(I) .EQ. RX IF (.NOT. TEMP) GOTO 1 BUX(I, J, 1, 1) = 1 C LEFT OR RIGHT. C NEUMANN BCS. B(I, J, 1) = UX(I, J, 1) GOTO 4 1 IF (Y(J) .NE. LY) GOTO 2 B(I, J, 1) = U(I, J, 1) C BOTTOM. BU(I, J, 1, 1) = 1 GOTO 3 2 B(I, J, 1) = U(I, J, 1)-6D0*T C TOP. BU(I, J, 1, 1) = 1 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY,KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY IF (Y(J) .GE. 1D0) GOTO 1 U(I, J, P) = T*Y(J) GOTO 4 1 IF (Y(J) .GE. 2D0) GOTO 2 U(I, J, P) = 2D0*T*Y(J)-T GOTO 3 2 U(I, J, P) = 3D0*T*Y(J)-3D0*T 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dtg4.f000066400000000000000000000206301420247104600161050ustar00rootroot00000000000000C$TEST DTG4 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG4 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IS(1000), IU, IX INTEGER IY, NU, KX, NX, KY, NY INTEGER IDUMB REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DT, LX, LY, RX, RY DOUBLE PRECISION WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE LINEAR HEAT EQUATION C GRAD . ( UX - 0.1 * UY , 0.1*UX + UY ) = UT - X*Y C WITH SOLUTION U == T*X*Y ON [0,+1]**2, EXACT FOR K = 4, C WITH TILTED TOP AND BOTTOM, NORMAL BCS THERE. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IDUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IDUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) EXTERNAL BT, LR INTEGER I, P, Q DOUBLE PRECISION D(600), X, Y, XX(100), YY(100) INTEGER TEMP IF (NX*NY .GT. 100) CALL SETERR(19HAF - NX*NY .GT. 100, 19, 1, 2) CALL DBTMAP(T, XI, YI, NX, NY, LR, BT, XX, YY, D) C MAP INTO (X,Y). CALL DTTGRU(NX, NY, D, UX, UY, UT, NU) DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX TEMP = P+(Q-1)*NX X = XX(TEMP) TEMP = P+(Q-1)*NX Y = YY(TEMP) A(P, Q, I, 1) = UX(P, Q, I)-.1*UY(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = -.1 AUX(P, Q, I, I, 2) = .1 F(P, Q, 1) = UT(P, Q, 1)-X*Y FUT(P, Q, 1, 1) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE C MAP INTO (XI,ETA). CALL DTTGRG(NX, NY, D, NU, A, AU, AUX, AUY, F, FU, FUX, FUY) RETURN END SUBROUTINE BC(T, XI, NX, YI, NY, LX, RX, LY, RY, U, UT, UX 1 , UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, XI(NX), YI(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) EXTERNAL BT, LR INTEGER I, J DOUBLE PRECISION D(600), X, Y, XX(100), YY(100) INTEGER TEMP1 LOGICAL TEMP IF (NX*NY .GT. 100) CALL SETERR(19HBC - NX*NY .GT. 100, 19, 1, 2) CALL DBTMAP(T, XI, YI, NX, NY, LR, BT, XX, YY, D) C MAP INTO (X,Y). CALL DTTGRU(NX, NY, D, UX, UY, UT, NU) DO 6 J = 1, NY DO 5 I = 1, NX TEMP1 = I+(J-1)*NX X = XX(TEMP1) TEMP1 = I+(J-1)*NX Y = YY(TEMP1) TEMP = XI(I) .EQ. LX IF (.NOT. TEMP) TEMP = XI(I) .EQ. RX IF (.NOT. TEMP) GOTO 1 BU(I, J, 1, 1) = 1 C LEFT OR RIGHT. B(I, J, 1) = U(I, J, 1)-T*X*Y GOTO 4 1 IF (YI(J) .NE. LY) GOTO 2 B(I, J, 1) = (UX(I, J, 1)-T*Y)-(UY(I, J, 1)-T*X) C BOTTOM. BUX(I, J, 1, 1) = 1 C NORMAL IS (1,-1). BUY(I, J, 1, 1) = -1 GOTO 3 2 B(I, J, 1) = (UY(I, J, 1)-T*X)-(UX(I, J, 1)-T*Y) C TOP. BUX(I, J, 1, 1) = -1 C NORMAL IS (-1,1). BUY(I, J, 1, 1) = 1 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE C MAP INTO (XI,ETA). CALL DTTGRB(NX, NY, D, NU, BUX, BUY, BUT) RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, XI, NX, YI, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, XI(NX), YI(NY), U(NX, NY, NU) EXTERNAL BT, LR INTEGER I, J, P DOUBLE PRECISION D(6000), X, Y, XX(1000), YY(1000) C THE EXACT SOLUTION. IF (NY .GT. 1000) CALL SETERR(18HEWE - NY .GT. 1000, 18, 1, 2) DO 3 P = 1, NU DO 2 I = 1, NX CALL DBTMAP(T, XI(I), YI, 1, NY, LR, BT, XX, YY, D) DO 1 J = 1, NY X = XX(J) Y = YY(J) U(I, J, P) = T*X*Y 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE LR(T, LX, RX, LXT, RXT) DOUBLE PRECISION T, LX, RX, LXT, RXT C TO GET THE L AND R END-POINTS OF THE MAPPING IN X. LX = 0 RX = 1 LXT = 0 RXT = 0 RETURN END SUBROUTINE BT(T, X, F, G, FX, GX, FT, GT) DOUBLE PRECISION T, X, F, G, FX, GX DOUBLE PRECISION FT, GT C TO GET THE BOTTOM AND TOP OF MAPPING IN Y. F = X-1D0 G = X FT = 0 GT = 0 FX = 1 GX = 1 RETURN END PyBDSF-1.10.1/src/port3/ex/dtg5.f000066400000000000000000000166521420247104600161170ustar00rootroot00000000000000C$TEST DTG5 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG5 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, I, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), RS(1000), FLOAT LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DBLE, DT, LX, LY, RX DOUBLE PRECISION RY, WS(500), TSTOP INTEGER TEMP, TEMP1 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE LAPLACES EQUATION WITH REAL ( Z*LOG(Z) ) AS SOLUTION. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 2 NDY = 2 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 NX = NDX+2*(KX-1) C SPACE FOR X MESH. IX = ISTKGT(NX, 4) DO 1 I = 1, KX TEMP = IX+I WS(TEMP-1) = 0 TEMP = IX+NX-I WS(TEMP) = RX 1 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 2 I = 1, TEMP TEMP1 = IX+KX-2+I WS(TEMP1) = RX*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDX))-1D0))**KX 2 CONTINUE NY = NDY+2*(KY-1) C SPACE FOR Y MESH. IY = ISTKGT(NY, 4) DO 3 I = 1, KY TEMP = IY+I WS(TEMP-1) = 0 TEMP = IY+NY-I WS(TEMP) = RY 3 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 4 I = 1, TEMP TEMP1 = IY+KY-2+I WS(TEMP1) = RY*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDY))-1D0))**KY 4 CONTINUE C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DOUBLE PRECISION R, DCOS, DLOG, DSIN, DATAN, THETA DOUBLE PRECISION DSQRT DO 6 J = 1, NY DO 5 I = 1, NX IF (Y(J) .NE. LY) GOTO 1 B(I, J, 1) = UY(I, J, 1) C NEUMANN DATA ON BOTTOM. BUY(I, J, 1, 1) = 1 GOTO 4 1 R = DSQRT(X(I)**2+Y(J)**2) C DIRICHLET DATA. IF (X(I) .LE. 0D0) GOTO 2 THETA = DATAN(Y(J)/X(I)) GOTO 3 2 THETA = 2D0*DATAN(1D0) 3 B(I, J, 1) = U(I, J, 1)-R*(DCOS(THETA)*DLOG(R)-THETA* 1 DSIN(THETA)) BU(I, J, 1, 1) = 1 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P DOUBLE PRECISION R, DCOS, DLOG, DSIN, DATAN, THETA DOUBLE PRECISION DSQRT C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY R = DSQRT(X(I)**2+Y(J)**2) IF (X(I) .LE. 0D0) GOTO 1 THETA = DATAN(Y(J)/X(I)) GOTO 2 1 THETA = 2D0*DATAN(1D0) 2 IF (R .LE. 0D0) GOTO 3 U(I, J, P) = R*(DCOS(THETA)*DLOG(R)-THETA*DSIN(THETA)) GOTO 4 3 U(I, J, P) = 0 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dtg6.f000066400000000000000000000272231420247104600161140ustar00rootroot00000000000000C$TEST DTG6 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG6 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER IUE, NDX, NDY, IUR, IXR, IYR INTEGER NXR, NYR, ISTKGT, I, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY, I1MACH REAL ERRPAR(2), RS(1000), FLOAT LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DBLE, DABS, EERR, ERRE, ERRR DOUBLE PRECISION DMAX1, DT, LX, LY, RX, RY DOUBLE PRECISION WS(500), TSTOP INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET ERROR ESTIMATES FOR LAPLACES EQUATION WITH REAL ( Z*LOG(Z) ) AS C SOLUTION. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 2 NDY = 2 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 NX = NDX+2*(KX-1) C SPACE FOR X MESH. IX = ISTKGT(NX, 4) DO 1 I = 1, KX TEMP = IX+I WS(TEMP-1) = 0 TEMP = IX+NX-I WS(TEMP) = RX 1 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 2 I = 1, TEMP TEMP2 = IX+KX-2+I WS(TEMP2) = RX*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDX))-1D0))**KX 2 CONTINUE NY = NDY+2*(KY-1) C SPACE FOR Y MESH. IY = ISTKGT(NY, 4) DO 3 I = 1, KY TEMP = IY+I WS(TEMP-1) = 0 TEMP = IY+NY-I WS(TEMP) = RY 3 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 4 I = 1, TEMP TEMP2 = IY+KY-2+I WS(TEMP2) = RY*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDY))-1D0))**KY 4 CONTINUE C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) TEMP = I1MACH(2) WRITE (TEMP, 5) 5 FORMAT (23H SOLVING ON CRUDE MESH.) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) DT = 1 NDX = 2*NDX-1 C REFINE MESH. NDY = 2*NDY-1 NXR = NDX+2*(KX-1) C SPACE FOR X MESH. IXR = ISTKGT(NXR, 4) DO 6 I = 1, KX TEMP = IXR+I WS(TEMP-1) = 0 TEMP = IXR+NXR-I WS(TEMP) = RX 6 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 7 I = 1, TEMP TEMP2 = IXR+KX-2+I WS(TEMP2) = RX*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDX))-1D0))**KX 7 CONTINUE NYR = NDY+2*(KY-1) C SPACE FOR Y MESH. IYR = ISTKGT(NYR, 4) DO 8 I = 1, KY TEMP = IYR+I WS(TEMP-1) = 0 TEMP = IYR+NYR-I WS(TEMP) = RY 8 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 9 I = 1, TEMP TEMP2 = IYR+KY-2+I WS(TEMP2) = RY*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDY))-1D0))**KY 9 CONTINUE C SPACE FOR THE SOLUTION. IUR = ISTKGT(NU*(NXR-KX)*(NYR-KY), 4) CALL SETD(NU*(NXR-KX)*(NYR-KY), 0D0, WS(IUR)) TEMP = I1MACH(2) WRITE (TEMP, 10) 10 FORMAT (25H SOLVING ON REFINED MESH.) CALL DTTGR(WS(IUR), NU, KX, WS(IXR), NXR, KY, WS(IYR), NYR, 1 TSTART, TSTOP, DT, AF, BC, ERRPAR, HANDLE) DT = 1 ERRPAR(1) = ERRPAR(1)/10. ERRPAR(2) = ERRPAR(2)/10. C SPACE FOR THE SOLUTION. IUE = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IUE)) TEMP = I1MACH(2) WRITE (TEMP, 11) 11 FORMAT (24H SOLVING WITH ERRPAR/10.) CALL DTTGR(WS(IUE), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) ERRR = EERR(KX, IX, NX, KY, IY, NY, WS(IU), NU, IXR, NXR, IYR, 1 NYR, WS(IUR), TSTOP) ERRE = 0 TEMP = NU*(NX-KX)*(NY-KY) DO 12 I = 1, TEMP TEMP2 = IU+I TEMP1 = IUE+I ERRE = DMAX1(ERRE, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 12 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 13) ERRE 13 FORMAT (24H U ERROR FROM U AND UE =, 1PE10.2) TEMP = I1MACH(2) WRITE (TEMP, 14) ERRR 14 FORMAT (24H U ERROR FROM U AND UR =, 1PE10.2) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DOUBLE PRECISION R, DCOS, DLOG, DSIN, DATAN, THETA DOUBLE PRECISION DSQRT DO 6 J = 1, NY DO 5 I = 1, NX IF (Y(J) .NE. LY) GOTO 1 B(I, J, 1) = UY(I, J, 1) C NEUMANN DATA ON BOTTOM. BUY(I, J, 1, 1) = 1 GOTO 4 1 R = DSQRT(X(I)**2+Y(J)**2) C DIRICHLET DATA. IF (X(I) .LE. 0D0) GOTO 2 THETA = DATAN(Y(J)/X(I)) GOTO 3 2 THETA = 2D0*DATAN(1D0) 3 B(I, J, 1) = U(I, J, 1)-R*(DCOS(THETA)*DLOG(R)-THETA* 1 DSIN(THETA)) BU(I, J, 1, 1) = 1 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END DOUBLE PRECISION FUNCTION EERR(KX, IX, NX, KY, IY, NY, U, 1 NU, IXR, NXR, IYR, NYR, UR, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU, IXR, NXR, IYR, NYR DOUBLE PRECISION U(1), UR(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IFAR, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR ESTIMATE AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU), UR(NXR-KX,NYR-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / FINE MESH RECTA CNGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IXR), NXR, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IYR), NYR, 2*KY, NYS) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) KA(1) = KX KA(2) = KY ITA(1) = IXR ITA(2) = IYR NTA(1) = NXR NTA(2) = NYR IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFAR = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, UR, WS, IXA, NXA, MA, WS(IFAR)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IFAR+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE CALL LEAVE EERR = ERRU RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P DOUBLE PRECISION R, DCOS, DLOG, DSIN, DATAN, THETA DOUBLE PRECISION DSQRT C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY R = DSQRT(X(I)**2+Y(J)**2) IF (X(I) .LE. 0D0) GOTO 1 THETA = DATAN(Y(J)/X(I)) GOTO 2 1 THETA = 2D0*DATAN(1D0) 2 IF (R .LE. 0D0) GOTO 3 U(I, J, P) = R*(DCOS(THETA)*DLOG(R)-THETA*DSIN(THETA)) GOTO 4 3 U(I, J, P) = 0 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dtgp.f000066400000000000000000000137401420247104600162050ustar00rootroot00000000000000C$TEST DTGP C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTGP C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IS(1000), IU, IX INTEGER IY, NU, KX, NX, KY, NY INTEGER IDUMB REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DT, LX, LY, RX, RY DOUBLE PRECISION WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE HEAT EQUATION WITH SOLUTION U == T*X*Y, C GRAD . ( U + UX + .1 * UY, U + UY + .1 * UX ) = UT + UX + UY +G(X,T) C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IDUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IDUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) C INITIAL CONDITIONS FOR U. CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I)+.1*UY(P, Q, I)+U(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I)+U(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = .1 AUX(P, Q, I, I, 2) = .1 AU(P, Q, I, I, 1) = 1 AU(P, Q, I, I, 2) = 1 F(P, Q, I) = UT(P, Q, I)+UX(P, Q, I)+UY(P, Q, I) FUT(P, Q, I, I) = 1 FUX(P, Q, I, I) = 1 FUY(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)+.2*T-X(P)*Y(Q) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN C PRINT RESULTS. 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION WS(500) INTEGER TEMP, TEMP1 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO PRINT THE SOLUTION AT EACH TIME-STEP. C U(NX-KX,NY,KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE SOLUTION AT 2 * 2 POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2, NYS) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) TEMP1 = IFA+NXS*NYS-1 TEMP = I1MACH(2) WRITE (TEMP, 1) T, (WS(I), I = IFA, TEMP1) 1 FORMAT (3H U(, 1PE10.2, 7H,.,.) =, (1P5E10.2/20X,1P4E10.2)) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dttgrx1.f000066400000000000000000000145171420247104600166470ustar00rootroot00000000000000C$TEST DTG1 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG1 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IS(1000), IU, IX INTEGER IY, NU, KX, NX, KY, NY INTEGER IDUMB REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DT, LX, LY, RX, RY DOUBLE PRECISION WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE HEAT EQUATION WITH SOLUTION U == T*X*Y, C GRAD . ( U + UX + .1 * UY, U + UY + .1 * UX ) = UT + UX + UY +G(X,T) C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IDUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IDUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) C INITIAL CONDITIONS FOR U. CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I)+.1*UY(P, Q, I)+U(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I)+U(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = .1 AUX(P, Q, I, I, 2) = .1 AU(P, Q, I, I, 1) = 1 AU(P, Q, I, I, 2) = 1 F(P, Q, I) = UT(P, Q, I)+UX(P, Q, I)+UY(P, Q, I) FUT(P, Q, I, I) = 1 FUX(P, Q, I, I) = 1 FUY(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)+.2*T-X(P)*Y(Q) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN C GET AND PRINT THE ERROR. 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY0KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dttgrx1p.f000066400000000000000000000137401420247104600170240ustar00rootroot00000000000000C$TEST DTGP C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTGP C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IS(1000), IU, IX INTEGER IY, NU, KX, NX, KY, NY INTEGER IDUMB REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DT, LX, LY, RX, RY DOUBLE PRECISION WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE HEAT EQUATION WITH SOLUTION U == T*X*Y, C GRAD . ( U + UX + .1 * UY, U + UY + .1 * UX ) = UT + UX + UY +G(X,T) C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IDUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IDUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) C INITIAL CONDITIONS FOR U. CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I)+.1*UY(P, Q, I)+U(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I)+U(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = .1 AUX(P, Q, I, I, 2) = .1 AU(P, Q, I, I, 1) = 1 AU(P, Q, I, I, 2) = 1 F(P, Q, I) = UT(P, Q, I)+UX(P, Q, I)+UY(P, Q, I) FUT(P, Q, I, I) = 1 FUX(P, Q, I, I) = 1 FUY(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)+.2*T-X(P)*Y(Q) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN C PRINT RESULTS. 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION WS(500) INTEGER TEMP, TEMP1 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO PRINT THE SOLUTION AT EACH TIME-STEP. C U(NX-KX,NY,KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE SOLUTION AT 2 * 2 POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2, NYS) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) TEMP1 = IFA+NXS*NYS-1 TEMP = I1MACH(2) WRITE (TEMP, 1) T, (WS(I), I = IFA, TEMP1) 1 FORMAT (3H U(, 1PE10.2, 7H,.,.) =, (1P5E10.2/20X,1P4E10.2)) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dttgrx2.f000066400000000000000000000151411420247104600166420ustar00rootroot00000000000000C$TEST DTG2 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG2 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IS(1000), IU, IX INTEGER IY, NU, KX, NX, KY, NY INTEGER IDUMB REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DT, LX, LY, RX, RY DOUBLE PRECISION WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE TWO COUPLED, NONLINEAR HEAT EQUATIONS. C U1 SUB T = DIV . ( U1X, U1Y ) - U1*U2 + G1 C U2 SUB T = DIV . ( U2X, U2Y ) - U1*U2 + G2 C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 2 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1E-2 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IDUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IDUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 1D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER P, Q DOUBLE PRECISION DEXP DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, 1, 1) = UX(P, Q, 1) AUX(P, Q, 1, 1, 1) = 1 A(P, Q, 1, 2) = UY(P, Q, 1) AUY(P, Q, 1, 1, 2) = 1 F(P, Q, 1) = UT(P, Q, 1)+U(P, Q, 1)*U(P, Q, 2) FU(P, Q, 1, 1) = U(P, Q, 2) FU(P, Q, 1, 2) = U(P, Q, 1) FUT(P, Q, 1, 1) = 1 A(P, Q, 2, 1) = UX(P, Q, 2) AUX(P, Q, 2, 2, 1) = 1 A(P, Q, 2, 2) = UY(P, Q, 2) AUY(P, Q, 2, 2, 2) = 1 F(P, Q, 2) = UT(P, Q, 2)+U(P, Q, 1)*U(P, Q, 2) FU(P, Q, 2, 1) = U(P, Q, 2) FU(P, Q, 2, 2) = U(P, Q, 1) FUT(P, Q, 2, 2) = 1 F(P, Q, 1) = F(P, Q, 1)-(DEXP(T*(X(P)-Y(Q)))*(X(P)-Y(Q)-2D0* 1 T*T)+1D0) F(P, Q, 2) = F(P, Q, 2)-(DEXP(T*(Y(Q)-X(P)))*(Y(Q)-X(P)-2D0* 1 T*T)+1D0) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DOUBLE PRECISION DEXP DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-DEXP(T*(X(I)-Y(J))) BU(I, J, 2, 2) = 1 B(I, J, 2) = U(I, J, 2)-DEXP(T*(Y(J)-X(I))) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER J, IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NU*NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) DO 5 J = 1, NU C EVALUATE THEM. TEMP = (J-1)*(NX-KX)*(NY-KY) CALL DTSD1(2, KA, WS, ITA, NTA, U(TEMP+1), WS, IXA, NXA, MA, 1 WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 3 I = 1, TEMP TEMP2 = IEWE+I-1+(J-1)*NXS*NYS TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2)-WS(TEMP1-1))) 3 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 4) T, J, ERRU 4 FORMAT (14H ERROR IN U(.,, 1PE10.2, 1H,, I2, 3H) =, 1PE10.2) 5 CONTINUE CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P REAL FLOAT DOUBLE PRECISION DBLE, DEXP C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = DEXP(DBLE(FLOAT((-1)**(P+1)))*T*(X(I)-Y(J))) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dttgrx3.f000066400000000000000000000167121420247104600166500ustar00rootroot00000000000000C$TEST DTG3 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG3 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, IDLUMB, ISTKGT, I, IS(1000) INTEGER IU, IX, IY, NU, KX, NX INTEGER KY, NY, IDUMB, IMMMD REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DT, YB(4), LX, RX, WS(500) DOUBLE PRECISION TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE LAYERED HEAT EQUATION, WITH KAPPA = 1, 1/2, 1/3, C DIV . ( KAPPA(X,Y) * GRAD U ) = UT + G C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 DO 1 I = 1, 4 YB(I) = I-1 1 CONTINUE KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IDUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IDLUMB(YB, 4, NDY, KY, NY) C MAKE MULT = KY-1. IY = IMMMD(IY, NY, YB(2), KY-1) C MAKE MULT = KY-1. IY = IMMMD(IY, NY, YB(3), KY-1) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DOUBLE PRECISION KAPPA LOGICAL TEMP DO 7 I = 1, NU DO 6 Q = 1, NY DO 5 P = 1, NX IF (Y(Q) .GE. 1D0) GOTO 1 KAPPA = 1 GOTO 4 1 IF (Y(Q) .GE. 2D0) GOTO 2 KAPPA = 0.5 GOTO 3 2 KAPPA = 1D0/3D0 3 CONTINUE 4 A(P, Q, I, 1) = KAPPA*UX(P, Q, I) AUX(P, Q, I, I, 1) = KAPPA A(P, Q, I, 2) = KAPPA*UY(P, Q, I) AUY(P, Q, I, I, 2) = KAPPA F(P, Q, I) = UT(P, Q, I) FUT(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)-Y(Q)/KAPPA TEMP = 1D0 .LT. Y(Q) IF (TEMP) TEMP = Y(Q) .LT. 2D0 IF (TEMP) F(P, Q, I) = F(P, Q, I)+1D0 TEMP = 2D0 .LT. Y(Q) IF (TEMP) TEMP = Y(Q) .LT. 3D0 IF (TEMP) F(P, Q, I) = F(P, Q, I)+3D0 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J LOGICAL TEMP DO 6 J = 1, NY DO 5 I = 1, NX TEMP = X(I) .EQ. LX IF (.NOT. TEMP) TEMP = X(I) .EQ. RX IF (.NOT. TEMP) GOTO 1 BUX(I, J, 1, 1) = 1 C LEFT OR RIGHT. C NEUMANN BCS. B(I, J, 1) = UX(I, J, 1) GOTO 4 1 IF (Y(J) .NE. LY) GOTO 2 B(I, J, 1) = U(I, J, 1) C BOTTOM. BU(I, J, 1, 1) = 1 GOTO 3 2 B(I, J, 1) = U(I, J, 1)-6D0*T C TOP. BU(I, J, 1, 1) = 1 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY,KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY IF (Y(J) .GE. 1D0) GOTO 1 U(I, J, P) = T*Y(J) GOTO 4 1 IF (Y(J) .GE. 2D0) GOTO 2 U(I, J, P) = 2D0*T*Y(J)-T GOTO 3 2 U(I, J, P) = 3D0*T*Y(J)-3D0*T 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dttgrx4.f000066400000000000000000000206301420247104600166430ustar00rootroot00000000000000C$TEST DTG4 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG4 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IS(1000), IU, IX INTEGER IY, NU, KX, NX, KY, NY INTEGER IDUMB REAL ERRPAR(2), RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DT, LX, LY, RX, RY DOUBLE PRECISION WS(500), TSTOP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE LINEAR HEAT EQUATION C GRAD . ( UX - 0.1 * UY , 0.1*UX + UY ) = UT - X*Y C WITH SOLUTION U == T*X*Y ON [0,+1]**2, EXACT FOR K = 4, C WITH TILTED TOP AND BOTTOM, NORMAL BCS THERE. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IDUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IDUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) EXTERNAL BT, LR INTEGER I, P, Q DOUBLE PRECISION D(600), X, Y, XX(100), YY(100) INTEGER TEMP IF (NX*NY .GT. 100) CALL SETERR(19HAF - NX*NY .GT. 100, 19, 1, 2) CALL DBTMAP(T, XI, YI, NX, NY, LR, BT, XX, YY, D) C MAP INTO (X,Y). CALL DTTGRU(NX, NY, D, UX, UY, UT, NU) DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX TEMP = P+(Q-1)*NX X = XX(TEMP) TEMP = P+(Q-1)*NX Y = YY(TEMP) A(P, Q, I, 1) = UX(P, Q, I)-.1*UY(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = -.1 AUX(P, Q, I, I, 2) = .1 F(P, Q, 1) = UT(P, Q, 1)-X*Y FUT(P, Q, 1, 1) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE C MAP INTO (XI,ETA). CALL DTTGRG(NX, NY, D, NU, A, AU, AUX, AUY, F, FU, FUX, FUY) RETURN END SUBROUTINE BC(T, XI, NX, YI, NY, LX, RX, LY, RY, U, UT, UX 1 , UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, XI(NX), YI(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) EXTERNAL BT, LR INTEGER I, J DOUBLE PRECISION D(600), X, Y, XX(100), YY(100) INTEGER TEMP1 LOGICAL TEMP IF (NX*NY .GT. 100) CALL SETERR(19HBC - NX*NY .GT. 100, 19, 1, 2) CALL DBTMAP(T, XI, YI, NX, NY, LR, BT, XX, YY, D) C MAP INTO (X,Y). CALL DTTGRU(NX, NY, D, UX, UY, UT, NU) DO 6 J = 1, NY DO 5 I = 1, NX TEMP1 = I+(J-1)*NX X = XX(TEMP1) TEMP1 = I+(J-1)*NX Y = YY(TEMP1) TEMP = XI(I) .EQ. LX IF (.NOT. TEMP) TEMP = XI(I) .EQ. RX IF (.NOT. TEMP) GOTO 1 BU(I, J, 1, 1) = 1 C LEFT OR RIGHT. B(I, J, 1) = U(I, J, 1)-T*X*Y GOTO 4 1 IF (YI(J) .NE. LY) GOTO 2 B(I, J, 1) = (UX(I, J, 1)-T*Y)-(UY(I, J, 1)-T*X) C BOTTOM. BUX(I, J, 1, 1) = 1 C NORMAL IS (1,-1). BUY(I, J, 1, 1) = -1 GOTO 3 2 B(I, J, 1) = (UY(I, J, 1)-T*X)-(UX(I, J, 1)-T*Y) C TOP. BUX(I, J, 1, 1) = -1 C NORMAL IS (-1,1). BUY(I, J, 1, 1) = 1 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE C MAP INTO (XI,ETA). CALL DTTGRB(NX, NY, D, NU, BUX, BUY, BUT) RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, XI, NX, YI, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, XI(NX), YI(NY), U(NX, NY, NU) EXTERNAL BT, LR INTEGER I, J, P DOUBLE PRECISION D(6000), X, Y, XX(1000), YY(1000) C THE EXACT SOLUTION. IF (NY .GT. 1000) CALL SETERR(18HEWE - NY .GT. 1000, 18, 1, 2) DO 3 P = 1, NU DO 2 I = 1, NX CALL DBTMAP(T, XI(I), YI, 1, NY, LR, BT, XX, YY, D) DO 1 J = 1, NY X = XX(J) Y = YY(J) U(I, J, P) = T*X*Y 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE LR(T, LX, RX, LXT, RXT) DOUBLE PRECISION T, LX, RX, LXT, RXT C TO GET THE L AND R END-POINTS OF THE MAPPING IN X. LX = 0 RX = 1 LXT = 0 RXT = 0 RETURN END SUBROUTINE BT(T, X, F, G, FX, GX, FT, GT) DOUBLE PRECISION T, X, F, G, FX, GX DOUBLE PRECISION FT, GT C TO GET THE BOTTOM AND TOP OF MAPPING IN Y. F = X-1D0 G = X FT = 0 GT = 0 FX = 1 GX = 1 RETURN END PyBDSF-1.10.1/src/port3/ex/dttgrx5.f000066400000000000000000000166521420247104600166550ustar00rootroot00000000000000C$TEST DTG5 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG5 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, I, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), RS(1000), FLOAT LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DBLE, DT, LX, LY, RX DOUBLE PRECISION RY, WS(500), TSTOP INTEGER TEMP, TEMP1 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE LAPLACES EQUATION WITH REAL ( Z*LOG(Z) ) AS SOLUTION. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 2 NDY = 2 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 NX = NDX+2*(KX-1) C SPACE FOR X MESH. IX = ISTKGT(NX, 4) DO 1 I = 1, KX TEMP = IX+I WS(TEMP-1) = 0 TEMP = IX+NX-I WS(TEMP) = RX 1 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 2 I = 1, TEMP TEMP1 = IX+KX-2+I WS(TEMP1) = RX*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDX))-1D0))**KX 2 CONTINUE NY = NDY+2*(KY-1) C SPACE FOR Y MESH. IY = ISTKGT(NY, 4) DO 3 I = 1, KY TEMP = IY+I WS(TEMP-1) = 0 TEMP = IY+NY-I WS(TEMP) = RY 3 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 4 I = 1, TEMP TEMP1 = IY+KY-2+I WS(TEMP1) = RY*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDY))-1D0))**KY 4 CONTINUE C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DOUBLE PRECISION R, DCOS, DLOG, DSIN, DATAN, THETA DOUBLE PRECISION DSQRT DO 6 J = 1, NY DO 5 I = 1, NX IF (Y(J) .NE. LY) GOTO 1 B(I, J, 1) = UY(I, J, 1) C NEUMANN DATA ON BOTTOM. BUY(I, J, 1, 1) = 1 GOTO 4 1 R = DSQRT(X(I)**2+Y(J)**2) C DIRICHLET DATA. IF (X(I) .LE. 0D0) GOTO 2 THETA = DATAN(Y(J)/X(I)) GOTO 3 2 THETA = 2D0*DATAN(1D0) 3 B(I, J, 1) = U(I, J, 1)-R*(DCOS(THETA)*DLOG(R)-THETA* 1 DSIN(THETA)) BU(I, J, 1, 1) = 1 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P DOUBLE PRECISION R, DCOS, DLOG, DSIN, DATAN, THETA DOUBLE PRECISION DSQRT C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY R = DSQRT(X(I)**2+Y(J)**2) IF (X(I) .LE. 0D0) GOTO 1 THETA = DATAN(Y(J)/X(I)) GOTO 2 1 THETA = 2D0*DATAN(1D0) 2 IF (R .LE. 0D0) GOTO 3 U(I, J, P) = R*(DCOS(THETA)*DLOG(R)-THETA*DSIN(THETA)) GOTO 4 3 U(I, J, P) = 0 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/dttgrx6.f000066400000000000000000000272231420247104600166520ustar00rootroot00000000000000C$TEST DTG6 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE DTG6 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM DTTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER IUE, NDX, NDY, IUR, IXR, IYR INTEGER NXR, NYR, ISTKGT, I, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY, I1MACH REAL ERRPAR(2), RS(1000), FLOAT LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION TSTART, DBLE, DABS, EERR, ERRE, ERRR DOUBLE PRECISION DMAX1, DT, LX, LY, RX, RY DOUBLE PRECISION WS(500), TSTOP INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET ERROR ESTIMATES FOR LAPLACES EQUATION WITH REAL ( Z*LOG(Z) ) AS C SOLUTION. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 2 NDY = 2 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 NX = NDX+2*(KX-1) C SPACE FOR X MESH. IX = ISTKGT(NX, 4) DO 1 I = 1, KX TEMP = IX+I WS(TEMP-1) = 0 TEMP = IX+NX-I WS(TEMP) = RX 1 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 2 I = 1, TEMP TEMP2 = IX+KX-2+I WS(TEMP2) = RX*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDX))-1D0))**KX 2 CONTINUE NY = NDY+2*(KY-1) C SPACE FOR Y MESH. IY = ISTKGT(NY, 4) DO 3 I = 1, KY TEMP = IY+I WS(TEMP-1) = 0 TEMP = IY+NY-I WS(TEMP) = RY 3 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 4 I = 1, TEMP TEMP2 = IY+KY-2+I WS(TEMP2) = RY*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDY))-1D0))**KY 4 CONTINUE C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IU)) TEMP = I1MACH(2) WRITE (TEMP, 5) 5 FORMAT (23H SOLVING ON CRUDE MESH.) CALL DTTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) DT = 1 NDX = 2*NDX-1 C REFINE MESH. NDY = 2*NDY-1 NXR = NDX+2*(KX-1) C SPACE FOR X MESH. IXR = ISTKGT(NXR, 4) DO 6 I = 1, KX TEMP = IXR+I WS(TEMP-1) = 0 TEMP = IXR+NXR-I WS(TEMP) = RX 6 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 7 I = 1, TEMP TEMP2 = IXR+KX-2+I WS(TEMP2) = RX*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDX))-1D0))**KX 7 CONTINUE NYR = NDY+2*(KY-1) C SPACE FOR Y MESH. IYR = ISTKGT(NYR, 4) DO 8 I = 1, KY TEMP = IYR+I WS(TEMP-1) = 0 TEMP = IYR+NYR-I WS(TEMP) = RY 8 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 9 I = 1, TEMP TEMP2 = IYR+KY-2+I WS(TEMP2) = RY*(DBLE(FLOAT(I-1))/(DBLE(FLOAT(NDY))-1D0))**KY 9 CONTINUE C SPACE FOR THE SOLUTION. IUR = ISTKGT(NU*(NXR-KX)*(NYR-KY), 4) CALL SETD(NU*(NXR-KX)*(NYR-KY), 0D0, WS(IUR)) TEMP = I1MACH(2) WRITE (TEMP, 10) 10 FORMAT (25H SOLVING ON REFINED MESH.) CALL DTTGR(WS(IUR), NU, KX, WS(IXR), NXR, KY, WS(IYR), NYR, 1 TSTART, TSTOP, DT, AF, BC, ERRPAR, HANDLE) DT = 1 ERRPAR(1) = ERRPAR(1)/10. ERRPAR(2) = ERRPAR(2)/10. C SPACE FOR THE SOLUTION. IUE = ISTKGT(NU*(NX-KX)*(NY-KY), 4) CALL SETD(NU*(NX-KX)*(NY-KY), 0D0, WS(IUE)) TEMP = I1MACH(2) WRITE (TEMP, 11) 11 FORMAT (24H SOLVING WITH ERRPAR/10.) CALL DTTGR(WS(IUE), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) ERRR = EERR(KX, IX, NX, KY, IY, NY, WS(IU), NU, IXR, NXR, IYR, 1 NYR, WS(IUR), TSTOP) ERRE = 0 TEMP = NU*(NX-KX)*(NY-KY) DO 12 I = 1, TEMP TEMP2 = IU+I TEMP1 = IUE+I ERRE = DMAX1(ERRE, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 12 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 13) ERRE 13 FORMAT (24H U ERROR FROM U AND UE =, 1PE10.2) TEMP = I1MACH(2) WRITE (TEMP, 14) ERRR 14 FORMAT (24H U ERROR FROM U AND UR =, 1PE10.2) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), 1 UX(NX, NY, NU) DOUBLE PRECISION UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), 1 A(NX, NY, NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) DOUBLE PRECISION AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), 1 AUXT(NX, NY, NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU) 2 , FU(NX, NY, NU, NU) DOUBLE PRECISION FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, 1 NY, NU, NU), FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), LX, RX, LY DOUBLE PRECISION RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU) 1 , UY(NX, NY, NU), UXT(NX, NY, NU) DOUBLE PRECISION UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, 1 NU), BUT(NX, NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU 2 , NU) DOUBLE PRECISION BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DOUBLE PRECISION R, DCOS, DLOG, DSIN, DATAN, THETA DOUBLE PRECISION DSQRT DO 6 J = 1, NY DO 5 I = 1, NX IF (Y(J) .NE. LY) GOTO 1 B(I, J, 1) = UY(I, J, 1) C NEUMANN DATA ON BOTTOM. BUY(I, J, 1, 1) = 1 GOTO 4 1 R = DSQRT(X(I)**2+Y(J)**2) C DIRICHLET DATA. IF (X(I) .LE. 0D0) GOTO 2 THETA = DATAN(Y(J)/X(I)) GOTO 3 2 THETA = 2D0*DATAN(1D0) 3 B(I, J, 1) = U(I, J, 1)-R*(DCOS(THETA)*DLOG(R)-THETA* 1 DSIN(THETA)) BU(I, J, 1, 1) = 1 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV DOUBLE PRECISION T0, U0(NV), T, U(NV), DT, TSTOP COMMON /D7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /D7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU DOUBLE PRECISION U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IEWE, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 4) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END DOUBLE PRECISION FUNCTION EERR(KX, IX, NX, KY, IY, NY, U, 1 NU, IXR, NXR, IYR, NYR, UR, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU, IXR, NXR, IYR, NYR DOUBLE PRECISION U(1), UR(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IDLUMD INTEGER IXS, IYS, NXS, NYS, ISTKGT, I INTEGER IFAR, KA(2), MA(2), IS(1000), I1MACH REAL RS(1000) LOGICAL LS(1000) COMPLEX CS(500) DOUBLE PRECISION DABS, ERRU, DMAX1, WS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR ESTIMATE AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU), UR(NXR-KX,NYR-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / FINE MESH RECTA CNGLE. C X SEARCH GRID. IXS = IDLUMD(WS(IXR), NXR, 2*KX, NXS) C Y SEARCH GRID. IYS = IDLUMD(WS(IYR), NYR, 2*KY, NYS) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) KA(1) = KX KA(2) = KY ITA(1) = IXR ITA(2) = IYR NTA(1) = NXR NTA(2) = NYR IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFAR = ISTKGT(NXS*NYS, 4) C EVALUATE THEM. CALL DTSD1(2, KA, WS, ITA, NTA, UR, WS, IXA, NXA, MA, WS(IFAR)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IFAR+I TEMP1 = IFA+I ERRU = DMAX1(ERRU, DABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE CALL LEAVE EERR = ERRU RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY DOUBLE PRECISION T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P DOUBLE PRECISION R, DCOS, DLOG, DSIN, DATAN, THETA DOUBLE PRECISION DSQRT C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY R = DSQRT(X(I)**2+Y(J)**2) IF (X(I) .LE. 0D0) GOTO 1 THETA = DATAN(Y(J)/X(I)) GOTO 2 1 THETA = 2D0*DATAN(1D0) 2 IF (R .LE. 0D0) GOTO 3 U(I, J, P) = R*(DCOS(THETA)*DLOG(R)-THETA*DSIN(THETA)) GOTO 4 3 U(I, J, P) = 0 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ebea.f000066400000000000000000000021701420247104600161360ustar00rootroot00000000000000C$TEST EBEA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE EBEA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM EEBSF C C*********************************************************************** INTEGER I1MACH,IWRITE,K,NT1,NT2 EXTERNAL F REAL EESFF,EEBSF,T1(100),A1(100),T2(100),A2(100), 1 ERROR(2),ERREST(2) C C MAKE THE MESH C K = 4 CALL UMB(0.0E0,3.14E0,16,K,T1,NT1) CALL UMB(0.0E0,3.14E0,21,K,T2,NT2) C C DO THE FITTING C CALL L2SFF(F,K,T1,NT1,A1) CALL L2SFF(F,K,T2,NT2,A2) C C GET THE ERROR C ERROR(1) = EESFF(K,T1,NT1,A1,F) ERROR(2) = EESFF(K,T2,NT2,A2,F) C ERREST(1) = EEBSF(K,T1,NT1,A1,T2,NT2,A2) ERREST(2) = ERREST(1)*(FLOAT(NT1-2*K+1)/FLOAT( 1 NT2-2*K-1))**K IWRITE = I1MACH(2) WRITE(IWRITE,99)ERROR(1),ERROR(2),ERREST(1),ERREST(2) 99 FORMAT(8H ERROR = ,2E10.2,8H ESTER = ,2E10.2) C STOP C END SUBROUTINE F(X,NX,FX,WX) C REAL X(NX),FX(NX),WX(NX) C DO 10 I = 1,NX FX(I) = SIN(X(I)) 10 CONTINUE C RETURN C END PyBDSF-1.10.1/src/port3/ex/errk.f000066400000000000000000000022461420247104600162110ustar00rootroot00000000000000C$TEST ERRK C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE ERRK C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM STKDMP C C*********************************************************************** C SAMPLE USE OF THE STACK DUMP INTEGER IPTR, ISTKGT C COMMON /CSTAK/ DSTAK DOUBLE PRECISION DSTAK(500) INTEGER ISTAK(1000) LOGICAL LSTAK(1000) REAL RSTAK(1000) COMPLEX CMSTAK(500) EQUIVALENCE (DSTAK(1), ISTAK(1)) EQUIVALENCE (DSTAK(1), LSTAK(1)) EQUIVALENCE (DSTAK(1), RSTAK(1)) EQUIVALENCE (DSTAK(1), CMSTAK(1)) C IPTR = ISTKGT(25, 1) CALL SETL(25, .FALSE., LSTAK(IPTR)) IPTR = ISTKGT(25, 2) CALL SETI(25, -1, ISTAK(IPTR)) IPTR = ISTKGT(25, 3) CALL SETR(25, 1.0, RSTAK(IPTR)) IPTR = ISTKGT(25, 4) CALL SETD(25, 1.0D0, DSTAK(IPTR)) IPTR = ISTKGT(25, 5) CALL SETC(25, CMPLX(1.0, -1.0), CMSTAK(IPTR)) IPTR = ISTKGT(25, 5) CALL SETC(25, CMPLX(1.0, -1.0), CMSTAK(IPTR)) CALL ISTKRL(1) C CALL STKDMP STOP END PyBDSF-1.10.1/src/port3/ex/evaa.f000066400000000000000000000021521420247104600161560ustar00rootroot00000000000000C$TEST EVAA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE EVAA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM EIGEN C C*********************************************************************** REAL A(4,4),ORT(4),Z(4,4) REAL H(4,4),WR(4),WI(4) C DATA A(1,1),A(1,2),A(1,3),A(1,4) / 3., 1., 2., 5. / DATA A(2,1),A(2,2),A(2,3),A(2,4) / 2., 1., 3., 7. / DATA A(3,1),A(3,2),A(3,3),A(3,4) / 3., 1., 2., 4. / DATA A(4,1),A(4,2),A(4,3),A(4,4) / 4., 1., 3., 2. / C NM=4 N=4 C C SET OUTPUT WRITE UNIT C IWUNIT=I1MACH(2) C CALL EIGEN(NM,N,A,WR,WI,Z) C WRITE (IWUNIT,96) 96 FORMAT (22H0THE EIGENVALUES ARE -/) C WRITE (IWUNIT,97) (WR(J),WI(J),J=1,N) 97 FORMAT (/1X,2E20.8) C DO 20 K=1,N SCALE=AMAX1(ABS(Z(1,K)),ABS(Z(2,K)),ABS(Z(3,K)),ABS(Z(4,K))) DO 20 J=1,N 20 Z(J,K)=Z(J,K)/SCALE C WRITE (IWUNIT,98) 98 FORMAT (30H0THE SCALED EIGENVECTORS ARE -//) C WRITE (IWUNIT,99) ((Z(J,K),K=1,N),J=1,N) 99 FORMAT (1X,1P4E18.8/) C STOP END PyBDSF-1.10.1/src/port3/ex/extr.f000066400000000000000000000014701420247104600162260ustar00rootroot00000000000000C$TEST EXTR C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE EXTR C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM EXTRMX C C*********************************************************************** INTEGER IWRITE,IEXT(100),NEX,IMAX,IMIN,IMAG INTEGER I1MACH,I,J REAL PI,STEP,X,F(100) C IWRITE = I1MACH(2) PI = 3.1415926532 STEP = 2.0*PI/99.0 DO 10 I=1,100 X = STEP*FLOAT(I-1) 10 F(I) = EXP(-X)*COS(X) C CALL EXTRMR(100,F,NEX,IEXT,IMAX,IMIN,IMAG) C WRITE(IWRITE,20) 20 FORMAT(6X,9HEXTREMALS/5X,1HX,10X,4HF(X)) DO 30 J=1,NEX I =IEXT(J) X = STEP*FLOAT(I-1) 30 WRITE(IWRITE,40) X,F(I) 40 FORMAT(2F10.5) STOP END PyBDSF-1.10.1/src/port3/ex/ffta000066400000000000000000000025031420247104600157360ustar00rootroot00000000000000C$TEST FFTA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE FTRA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM FFTR C C*********************************************************************** REAL A(34),B(17),C(32) C C SET UP THE INPUT DATA FOR E**(-T) C AND SAVE IT IN THE VECTOR C FOR LATER COMPARISON. C A(1) = .5 C(1) = A(1) DO 10 K=2,32 A(K) = EXP(-.25*FLOAT(K-1)) 10 C(K) = A(K) C C CALL FOR THE TRANSFORM AND PRINT THE FOURIER COEFFICIENTS C CALL FFTR(34,A,B) C IWRITE = I1MACH(2) WRITE (IWRITE, 997) 997 FORMAT (1X,9HFREQUENCY,5X,20HFOURIER COEFFICIENTS//) WRITE (IWRITE, 998) 998 FORMAT (1X,7H(=N/NT),5X,9HREAL PART,6X,9HIMAGINARY///) C ENT = 1.0/(32. * 0.25) DO 20 K=1,17 FREQ = FLOAT(K-1) * ENT 20 WRITE (IWRITE,98) FREQ, A(K), B(K) 98 FORMAT (2X,F6.3,2F15.8) C C DO THE INVERSE TRANSFORM C CALL FFTRI(32,A,B) C C SCALE THE RESULTS, FIND THE ERROR, AND PRINT C WRITE (IWRITE, 999) 999 FORMAT (///4X,1HT,9X,5HINPUT,10X,5HERROR//) C EN = 4*16 ENI = 1./EN DO 30 K=1,32 A(K) = ENI*A(K) ERR = A(K) - C(K) T = .25*FLOAT(K-1) 30 WRITE (IWRITE,99) T,C(K),ERR 99 FORMAT (2X,F4.2,1X,F15.8,4X,1PE10.2) C STOP END PyBDSF-1.10.1/src/port3/ex/fftc000066400000000000000000000030271420247104600157420ustar00rootroot00000000000000C$TEST FFTC C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE FTRC C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM FFTC C C*********************************************************************** REAL A(32),B(32),C(32),D(32) C C THE REAL DATA IS ALL ZERO AND THE C IMAGINARY PART IS E**(-T). C C SAVE THE IMAGINARY DATA IN THE VECTOR C FOR LATER COMPARISON C DO 5 K=1,32 5 A(K) = 0. C B(1) = .5 C(1) = B(1) DO 10 K=2,32 B(K) = EXP(-.25*FLOAT(K-1)) 10 C(K) = B(K) C C CALL FOR THE TRANSFORM AND PRINT THE FOURIER COEFFICIENTS C CALL FFTC(32,A,B) C IWRITE = I1MACH(2) WRITE (IWRITE, 997) 997 FORMAT (1X,9HFREQUENCY,5X,20HFOURIER COEFFICIENTS//) WRITE (IWRITE, 998) 998 FORMAT (1X,7H(=N/NT),5X,9HREAL PART,6X,9HIMAGINARY///) C ENT = 1.0/(32. * 0.25) DO 20 K=1,32 FREQ = FLOAT(K-1) * ENT IF (FREQ .GT. 2.) FREQ = -4.0 + FREQ 20 WRITE (IWRITE,98) FREQ, A(K), B(K) 98 FORMAT (2X,F6.3,2F15.8) C C DO THE INVERSE TRANSFORM C CALL FFTCI(32,A,B) C C SCALE THE RESULTS, FIND THE ERROR, AND PRINT C WRITE (IWRITE, 999) 999 FORMAT (///4X,1HT,7X,18HERROR IN REAL PART, 1 4X,23HERROR IN IMAGINARY PART//) C ENI = 1./FLOAT(32) DO 30 K=1,32 A(K) = ENI*A(K) B(K) = ENI*B(K) ERR1 = A(K) - 0.0 ERR2 = B(K) - C(K) T = .25*FLOAT(K-1) 30 WRITE (IWRITE,99) T,ERR1,ERR2 99 FORMAT (2X,F4.2,8X,1PE10.2,14X,1PE10.2) C STOP END PyBDSF-1.10.1/src/port3/ex/fmtr.f000066400000000000000000000020731420247104600162140ustar00rootroot00000000000000C$TEST FMTR C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE FMTR C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM FRMATT C C*********************************************************************** C EXAMPLE PROGRAM TO FIND THE CORRECT FORMAT SPECIFICATIONS C AND THEN PRINT OUT AN INTEGER, REAL AND DOUBLE-PRECISION ARRAY. C INTEGER K, XINT(9), IWIDTH, IWRITE INTEGER WSP, MANTSP, WDP, MANTDP REAL XREAL(9) DOUBLE PRECISION DFLOAT, XDP(9) C IWRITE = I1MACH(2) C DO 10 K=1,9 XINT(K) = K XREAL(K) = FLOAT(K) XDP(K) = DFLOAT(K) 10 CONTINUE C CALL FRMATI(IWIDTH) CALL FRMATR(WSP, MANTSP) CALL FRMATD(WDP, MANTDP) C C TAKE ONE OFF THE MANTISSA WIDTH TO ALLOW FOR 1PEW.D FORMAT. C MANTSP = MANTSP - 1 MANTDP = MANTDP - 1 C CALL APRNTI(XINT, 9, IWRITE, 80, IWIDTH) CALL APRNTR(XREAL, 9, IWRITE, 80, WSP, MANTSP) CALL APRNTD(XDP, 9, IWRITE, 80, WDP, MANTDP) C STOP END PyBDSF-1.10.1/src/port3/ex/ftra.f000066400000000000000000000025031420247104600161760ustar00rootroot00000000000000C$TEST FFTA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE FTRA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM FFTR C C*********************************************************************** REAL A(34),B(17),C(32) C C SET UP THE INPUT DATA FOR E**(-T) C AND SAVE IT IN THE VECTOR C FOR LATER COMPARISON. C A(1) = .5 C(1) = A(1) DO 10 K=2,32 A(K) = EXP(-.25*FLOAT(K-1)) 10 C(K) = A(K) C C CALL FOR THE TRANSFORM AND PRINT THE FOURIER COEFFICIENTS C CALL FFTR(34,A,B) C IWRITE = I1MACH(2) WRITE (IWRITE, 997) 997 FORMAT (1X,9HFREQUENCY,5X,20HFOURIER COEFFICIENTS//) WRITE (IWRITE, 998) 998 FORMAT (1X,7H(=N/NT),5X,9HREAL PART,6X,9HIMAGINARY///) C ENT = 1.0/(32. * 0.25) DO 20 K=1,17 FREQ = FLOAT(K-1) * ENT 20 WRITE (IWRITE,98) FREQ, A(K), B(K) 98 FORMAT (2X,F6.3,2F15.8) C C DO THE INVERSE TRANSFORM C CALL FFTRI(32,A,B) C C SCALE THE RESULTS, FIND THE ERROR, AND PRINT C WRITE (IWRITE, 999) 999 FORMAT (///4X,1HT,9X,5HINPUT,10X,5HERROR//) C EN = 4*16 ENI = 1./EN DO 30 K=1,32 A(K) = ENI*A(K) ERR = A(K) - C(K) T = .25*FLOAT(K-1) 30 WRITE (IWRITE,99) T,C(K),ERR 99 FORMAT (2X,F4.2,1X,F15.8,4X,1PE10.2) C STOP END PyBDSF-1.10.1/src/port3/ex/ftrc.f000066400000000000000000000030271420247104600162020ustar00rootroot00000000000000C$TEST FFTC C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE FTRC C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM FFTC C C*********************************************************************** REAL A(32),B(32),C(32),D(32) C C THE REAL DATA IS ALL ZERO AND THE C IMAGINARY PART IS E**(-T). C C SAVE THE IMAGINARY DATA IN THE VECTOR C FOR LATER COMPARISON C DO 5 K=1,32 5 A(K) = 0. C B(1) = .5 C(1) = B(1) DO 10 K=2,32 B(K) = EXP(-.25*FLOAT(K-1)) 10 C(K) = B(K) C C CALL FOR THE TRANSFORM AND PRINT THE FOURIER COEFFICIENTS C CALL FFTC(32,A,B) C IWRITE = I1MACH(2) WRITE (IWRITE, 997) 997 FORMAT (1X,9HFREQUENCY,5X,20HFOURIER COEFFICIENTS//) WRITE (IWRITE, 998) 998 FORMAT (1X,7H(=N/NT),5X,9HREAL PART,6X,9HIMAGINARY///) C ENT = 1.0/(32. * 0.25) DO 20 K=1,32 FREQ = FLOAT(K-1) * ENT IF (FREQ .GT. 2.) FREQ = -4.0 + FREQ 20 WRITE (IWRITE,98) FREQ, A(K), B(K) 98 FORMAT (2X,F6.3,2F15.8) C C DO THE INVERSE TRANSFORM C CALL FFTCI(32,A,B) C C SCALE THE RESULTS, FIND THE ERROR, AND PRINT C WRITE (IWRITE, 999) 999 FORMAT (///4X,1HT,7X,18HERROR IN REAL PART, 1 4X,23HERROR IN IMAGINARY PART//) C ENI = 1./FLOAT(32) DO 30 K=1,32 A(K) = ENI*A(K) B(K) = ENI*B(K) ERR1 = A(K) - 0.0 ERR2 = B(K) - C(K) T = .25*FLOAT(K-1) 30 WRITE (IWRITE,99) T,ERR1,ERR2 99 FORMAT (2X,F4.2,8X,1PE10.2,14X,1PE10.2) C STOP END PyBDSF-1.10.1/src/port3/ex/index.html000066400000000000000000000630451420247104600171000ustar00rootroot00000000000000 port/ex

port/ex

Click here to see the number of accesses to this library.


#	Index for port/ex
file	apnr.f  apnr.f plus dependencies
for	testing APRNTX

file	lban.f  lban.f plus dependencies
for	testing BABS

file	lbab.f  lbab.f plus dependencies
for	testing BACE

file	lbaj.f  lbaj.f plus dependencies
for	testing BADC

file	lbaf.f  lbaf.f plus dependencies
for	testing BALE

file	lbal.f  lbal.f plus dependencies
for	testing BALU

file	lbap.f  lbap.f plus dependencies
for	testing BAML

file	lbak.f  lbak.f plus dependencies
for	testing BANM

file	lbaa.f  lbaa.f plus dependencies
for	testing BASS

file	lpsb.f  lpsb.f plus dependencies
for	testing BPCE

file	lpsg.f  lpsg.f plus dependencies
for	testing BPDC

file	lpsk.f  lpsk.f plus dependencies
for	testing BPFS

file	lpsj.f  lpsj.f plus dependencies
for	testing BPLD

file	lpsf.f  lpsf.f plus dependencies
for	testing BPLE

file	lpsm.f  lpsm.f plus dependencies
for	testing BPML

file	lpsa.f  lpsa.f plus dependencies
for	testing BPSS

file	qblc.f  qblc.f plus dependencies
for	testing BQUAD

file	bura.f  bura.f plus dependencies
for	testing BURAM

file	burb.f  burb.f plus dependencies
for	testing BURM1

file	cdex.f  cdex.f plus dependencies
for	testing CDEXP

file	cdlg.f  cdlg.f plus dependencies
for	testing CDLOG

file	cpla.f  cpla.f plus dependencies
for	testing CPOLY

file	cspe.f  cspe.f plus dependencies
for	testing CSPDI

file	cspq.f  cspq.f plus dependencies
for	testing CSPFE

file	cspg.f  cspg.f plus dependencies
for	testing CSPIN

file	cspa.f  cspa.f plus dependencies
for	testing CSPQU

file	sdba.f  sdba.f plus dependencies
for	testing DL2SF

file	qodd.f  qodd.f plus dependencies
for	testing DODEQ

file	rpad.f  rpad.f plus dependencies
for	testing DRPOLY

file	xkhd.f  xkhd.f plus dependencies
for	testing DXKTH

file	ebea.f  ebea.f plus dependencies
for	testing EEBSF

file	evaa.f  evaa.f plus dependencies
for	testing EIGEN

file	extr.f  extr.f plus dependencies
for	testing EXTRMX

file	lrpe.f  lrpe.f plus dependencies
for	testing FEAS

file	lrpf.f  lrpf.f plus dependencies
for	testing FEASA

file	ftrc.f  ftrc.f plus dependencies
for	testing FFTC

file	ftra.f  ftra.f plus dependencies
for	testing FFTR

file	mnna.f  mnna.f plus dependencies
for	testing FMIN

file	fmtr.f  fmtr.f plus dependencies
for	testing FRMATT

file	lgel.f  lgel.f plus dependencies
for	testing GEBS

file	lgeb.f  lgeb.f plus dependencies
for	testing GECE

file	lgef.f  lgef.f plus dependencies
for	testing GELE

file	lgej.f  lgej.f plus dependencies
for	testing GELU

file	lgem.f  lgem.f plus dependencies
for	testing GEML

file	lgeh.f  lgeh.f plus dependencies
for	testing GENM

file	lgea.f  lgea.f plus dependencies
for	testing GESS

file	qgsg.f  qgsg.f plus dependencies
for	testing GQ1

file	qgsh.f  qgsh.f plus dependencies
for	testing GQEX

file	qgsj.f  qgsj.f plus dependencies
for	testing GQEX2

file	qgsm.f  qgsm.f plus dependencies
for	testing GQEXA

file	qgsp.f  qgsp.f plus dependencies
for	testing GQLOG

file	qgsr.f  qgsr.f plus dependencies
for	testing GQXA

file	qgst.f  qgst.f plus dependencies
for	testing GQXAB

file	ddea.f  ddea.f plus dependencies
for	testing IODE

file	qpra.f  qpra.f plus dependencies
for	testing IQP

file	xkhi.f  xkhi.f plus dependencies
for	testing IXKTH

file	lsfa.f  lsfa.f plus dependencies
for	testing L2SFF

file	lrpb.f  lrpb.f plus dependencies
for	testing LINPA

file	lrpg.f  lrpg.f plus dependencies
for	testing LINPA

file	lrpa.f  lrpa.f plus dependencies
for	testing LINPR

file	lnab.f  lnab.f plus dependencies
for	testing LSTSQ

file	llza.f  llza.f plus dependencies
for	testing LZ

file	mfte.f  mfte.f plus dependencies
for	testing MFTCC

file	mftg.f  mftg.f plus dependencies
for	testing MFTCR

file	mftf.f  mftf.f plus dependencies
for	testing MFTRC

file	nlsa.f  nlsa.f plus dependencies
for	testing MNF

file	nlsb.f  nlsb.f plus dependencies
for	testing MNFB

file	mllr.f  mllr.f plus dependencies
for	testing MULLR

file	nlsj.f  nlsj.f plus dependencies
for	testing N2F

file	nlsk.f  nlsk.f plus dependencies
for	testing N2FB

file	nlsp.f  nlsp.f plus dependencies
for	testing N2PB

file	nsfa.f  nsfa.f plus dependencies
for	testing NSF1

file	nlsr.f  nlsr.f plus dependencies
for	testing NSG

file	nmsk.f  nmsk.f plus dependencies
for	testing NSGB

file	desa.f  desa.f plus dependencies
for	testing ODES

file	pdea.f  pdea.f plus dependencies
for	testing POST

file	pdew.f  pdew.f plus dependencies
for	testing POSTU

file	qblg.f  qblg.f plus dependencies
for	testing QUAD

file	ranc.f  ranc.f plus dependencies
for	testing RANBYT

file	rnrm.f  rnrm.f plus dependencies
for	testing RNORM

file	qbla.f  qbla.f plus dependencies
for	testing RQUAD

file	ntle.f  ntle.f plus dependencies
for	testing SMNFB

file	ntlf.f  ntlf.f plus dependencies
for	testing SMNG

file	ntlh.f  ntlh.f plus dependencies
for	testing SMNGB

file	ntlk.f  ntlk.f plus dependencies
for	testing SMNH

file	ntlm.f  ntlm.f plus dependencies
for	testing SMNHB

file	nsnm.f  nsnm.f plus dependencies
for	testing SMNSX

file	np2a.f  np2a.f plus dependencies
for	testing SN2F

file	np2b.f  np2b.f plus dependencies
for	testing SN2FB

file	np2e.f  np2e.f plus dependencies
for	testing SN2G

file	np2f.f  np2f.f plus dependencies
for	testing SN2GB

file	ntlp.f  ntlp.f plus dependencies
for	testing SNSF

file	ntlt.f  ntlt.f plus dependencies
for	testing SNSFB

file	ntlr.f  ntlr.f plus dependencies
for	testing SNSG

file	ntlu.f  ntlu.f plus dependencies
for	testing SNSGB

file	prsm.f  prsm.f plus dependencies
for	testing SPFCE

file	prsf.f  prsf.f plus dependencies
for	testing SPFLE

file	prst.f  prst.f plus dependencies
for	testing SPFLU

file	prsz.f  prsz.f plus dependencies
for	testing SPFML

file	prsy.f  prsy.f plus dependencies
for	testing SPFNF

file	prea.f  prea.f plus dependencies
for	testing SPFOR

file	splf.f  splf.f plus dependencies
for	testing SPLNI

file	prsj.f  prsj.f plus dependencies
for	testing SPMCE

file	prsa.f  prsa.f plus dependencies
for	testing SPMLE

file	prsp.f  prsp.f plus dependencies
for	testing SPMLU

file	prs1.f  prs1.f plus dependencies
for	testing SPMML

file	prs3.f  prs3.f plus dependencies
for	testing SPMNF

file	prma.f  prma.f plus dependencies
for	testing SPMSF

file	errk.f  errk.f plus dependencies
for	testing STKDMP

file	lymb.f  lymb.f plus dependencies
for	testing SYCE

file	lymp.f  lymp.f plus dependencies
for	testing SYML

file	lymk.f  lymk.f plus dependencies
for	testing SYNM

file	lyma.f  lyma.f plus dependencies
for	testing SYSS

file	vdsa.f  vdsa.f plus dependencies
for	testing VDSS1

file	vdsb.f  vdsb.f plus dependencies
for	testing VDSS2

file	vdse.f  vdse.f plus dependencies
for	testing VDSS3

file	xkt.f  xkt.f plus dependencies
for	testing XKTH

file	zera.f  zera.f plus dependencies
for	testing ZERO

file	zona.f  zona.f plus dependencies
for	testing ZONE

file	zonb.f  zonb.f plus dependencies
for	testing ZONEJ

file	README

file	dpostx1.f  dpostx1.f plus dependencies

file	dpostx10.f  dpostx10.f plus dependencies

file	dpostx2.f  dpostx2.f plus dependencies

file	dpostx3.f  dpostx3.f plus dependencies

file	dpostx4.f  dpostx4.f plus dependencies

file	dpostx5.f  dpostx5.f plus dependencies

file	dpostx6.f  dpostx6.f plus dependencies

file	dpostx7.f  dpostx7.f plus dependencies

file	dpostx8.f  dpostx8.f plus dependencies

file	dpostx9.f  dpostx9.f plus dependencies

file	dpt1.f  dpt1.f plus dependencies

file	dpt2.f  dpt2.f plus dependencies

file	dpt3.f  dpt3.f plus dependencies

file	dpt4.f  dpt4.f plus dependencies

file	dpt5.f  dpt5.f plus dependencies

file	dpt6.f  dpt6.f plus dependencies

file	dpt7.f  dpt7.f plus dependencies

file	dpt8.f  dpt8.f plus dependencies

file	dpt9.f  dpt9.f plus dependencies

file	dptt.f  dptt.f plus dependencies

file	dtg1.f  dtg1.f plus dependencies

file	dtg2.f  dtg2.f plus dependencies

file	dtg3.f  dtg3.f plus dependencies

file	dtg4.f  dtg4.f plus dependencies

file	dtg5.f  dtg5.f plus dependencies

file	dtg6.f  dtg6.f plus dependencies

file	dtgp.f  dtgp.f plus dependencies

file	dttgrx1.f  dttgrx1.f plus dependencies

file	dttgrx1p.f  dttgrx1p.f plus dependencies

file	dttgrx2.f  dttgrx2.f plus dependencies

file	dttgrx3.f  dttgrx3.f plus dependencies

file	dttgrx4.f  dttgrx4.f plus dependencies

file	dttgrx5.f  dttgrx5.f plus dependencies

file	dttgrx6.f  dttgrx6.f plus dependencies

file	ffta

file	fftc

file	postx1.f  postx1.f plus dependencies

file	postx10.f  postx10.f plus dependencies

file	postx2.f  postx2.f plus dependencies

file	postx3.f  postx3.f plus dependencies

file	postx4.f  postx4.f plus dependencies

file	postx5.f  postx5.f plus dependencies

file	postx6.f  postx6.f plus dependencies

file	postx7.f  postx7.f plus dependencies

file	postx8.f  postx8.f plus dependencies

file	postx9.f  postx9.f plus dependencies

file	pst1.f  pst1.f plus dependencies

file	pst2.f  pst2.f plus dependencies

file	pst3.f  pst3.f plus dependencies

file	pst4.f  pst4.f plus dependencies

file	pst5.f  pst5.f plus dependencies

file	pst6.f  pst6.f plus dependencies

file	pst7.f  pst7.f plus dependencies

file	pst8.f  pst8.f plus dependencies

file	pst9.f  pst9.f plus dependencies

file	pstt.f  pstt.f plus dependencies

file	ttg1.f  ttg1.f plus dependencies

file	ttg2.f  ttg2.f plus dependencies

file	ttg3.f  ttg3.f plus dependencies

file	ttg4.f  ttg4.f plus dependencies

file	ttg5.f  ttg5.f plus dependencies

file	ttg6.f  ttg6.f plus dependencies

file	ttgp.f  ttgp.f plus dependencies

file	ttgrx1.f  ttgrx1.f plus dependencies

file	ttgrx1p.f  ttgrx1p.f plus dependencies

file	ttgrx2.f  ttgrx2.f plus dependencies

file	ttgrx3.f  ttgrx3.f plus dependencies

file	ttgrx4.f  ttgrx4.f plus dependencies

file	ttgrx5.f  ttgrx5.f plus dependencies

file	ttgrx6.f  ttgrx6.f plus dependencies

file	xkth

file	zap.ed

file	zap.ex

file	zap.head

file	zap.t

file	zip.ed

PyBDSF-1.10.1/src/port3/ex/lbaa.f000066400000000000000000000033561420247104600161500ustar00rootroot00000000000000C$TEST LBAA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LBAA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BASS C C*********************************************************************** INTEGER N, IG, ML, M, I, J, IWRITE, I1MACH REAL G(13,80), B(80,2), X(80) REAL START, FLOAT, ERR, ERR2, ABS, COND IG=13 N=80 DO 60 ML=2,6 C C CONSTRUCT THE MATRIX A(I,J)=I+J AND PACK IT INTO G C M=2*ML-1 START=-FLOAT(M-ML) DO 20 I=1,N G(1,I)=START+FLOAT(2*I) IF(M.EQ.1) GO TO 20 DO 10 J=2,M G(J,I)=G(J-1,I)+1. 10 CONTINUE 20 CONTINUE C CONSTRUCT FIRST RIGHT-HAND SIDE SO SOLUTION IS ALL 1S DO 30 I=1,N 30 X(I)=1 CALL BAML(N,ML,M,G,IG,X,B) C CONSTRUCT THE SECOND COLUMN SO X(I)=I DO 40 I=1,N 40 X(I)=I CALL BAML(N,ML,M,G,IG,X,B(1,2)) C SOLVE THE SYSTEM CALL BASS(N,ML,M,G,IG,B,80,2,COND) C COMPUTE THE ERRORS IN THE SOLUTION ERR=0.0 ERR2=0.0 DO 50 I=1,N ERR=ERR+ABS(B(I,1)-1.0) ERR2=ERR2+ABS(B(I,2)-FLOAT(I)) 50 CONTINUE ERR=ERR/FLOAT(N) ERR2=ERR2/FLOAT(N*(N+1))*2.0 IWRITE=I1MACH(2) WRITE(IWRITE,51)ML,COND 51 FORMAT(/9H WHEN ML=,I4,21H THE CONDITION NO. IS,1PE15.7) WRITE(IWRITE,52)ERR 52 FORMAT(38H REL. ERROR IN THE FIRST SOLUTION IS ,1PE15.7) WRITE(IWRITE,53)ERR2 53 FORMAT(38H REL. ERROR IN THE SECOND SOLUTION IS ,1PE15.7) 60 CONTINUE 70 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/lbab.f000066400000000000000000000037401420247104600161460ustar00rootroot00000000000000C$TEST LBAB C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LBAB C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BACE C C*********************************************************************** INTEGER IG, IGL, N, ML, M, I, J, MU, IWRITE, I1MACH INTEGER INTER(80) REAL G(13, 80), B(80), X(80), GL(6, 80) REAL START, FLOAT, AINNO, COND, CONDNO, ABS, AINNOI IG=13 IGL=6 N=80 IWRITE=I1MACH(2) DO 60 ML=2,6 C C CONSTRUCT THE MATRIX A(I,J)=I+J AND PACK IT INTO G M=2*ML - 1 START=-FLOAT(M-ML) DO 20 I=1,N G(1,I)=START+FLOAT(2*I) DO 10 J=2,M G(J,I)=G(J-1,I)+1. 10 CONTINUE 20 CONTINUE C C DETERMINE AN ESTIMATE OF THE CONDITION NUMBER C AND COMPUTE THE LU DECOMPOSITION C CALL BACE(N,ML,M,G,IG,GL,IGL,INTER,MU,COND) C C DETERMINE THE NORM OF THE INVERSE MATRIX BY C SOLVING FOR ONE COLUMN OF THE INVERSE MATRIX C AT A TIME C AINNO=0.0 DO 50 I=1,N C C FIND THE ITH COLUMN OF THE INVERSE MATRIX BY C SETTING THE RIGHT HAND SIDE TO THE ITH COLUMN C OF THE IDENTITY MATRIX C DO 30 J=1,N B(J)=0.0 30 CONTINUE B(I)=1.0 CALL BAFS(N,ML,GL,IGL,INTER,B,80,1) CALL BABS(N,G,IG,B,80,1,MU) C FIND THE NORM OF THE ITH COLUMN AINNOI=0.0 DO 40 J=1,N AINNOI=AINNOI+ABS(B(J)) 40 CONTINUE IF(AINNOI.GT.AINNO)AINNO=AINNOI 50 CONTINUE WRITE(IWRITE,51)ML 51 FORMAT(/6H ML IS ,I4) WRITE(IWRITE,52)COND 52 FORMAT(22H CONDITION ESTIMATE IS,1PE15.7) CONDNO=AINNO*FLOAT(M*(N-ML+1)*2) WRITE(IWRITE,53)CONDNO 53 FORMAT(22H TRUE CONDITION NO. IS,1PE15.7) 60 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/lbaf.f000066400000000000000000000047711420247104600161570ustar00rootroot00000000000000C$TEST LBAF C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LBAF C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BALE C C*********************************************************************** INTEGER IG, IWRITE, I1MACH, N, ML, II, MP1, I, K INTEGER IB, NB, IT, ILAPSZ REAL G(19, 100), B(100, 10), BB(100, 10), GG(19, 100) REAL COND, TIME1, TIME2, UNI C C THIS PROGRAM SOLVES BANDED SYSTEMS USING BALE AND C BASS AND COMPARES THE TIME FOR EACH OF THEM. THE C SYSTEMS HAVE VARIOUS BANDWIDTHS,DIMENSIONS, AND C NUMBERS OF RIGHT-HAND SIDES DOUBLE PRECISION D(600) COMMON /CSTAK/ D C MAKE SURE THE STACK MECHANISM HAS SUFFICIENT SPACE C FOR BASS CALL ISTKIN(1200,3) IG=19 IWRITE=I1MACH(2) IB=100 DO 70 N=50,100,50 DO 60 ML=2,10,8 M=2*ML - 1 MP1=M+1 DO 50 NB=1,10,9 WRITE(IWRITE,1)N,M,NB 1 FORMAT(/5H N IS,I4,6H M IS ,I3,7H NB IS ,I3) C C CONSTRUCT THE MATRIX A(I,J)=ABS(I-J) AND PACK IT INTO G C AND MAKE A COPY OF THE MATRIX SO THE SYSTEM CAN BE C SOLVED WITH BOTH BALE AND BASS C K=ML - 1 DO 20 I=1,ML II=MP1 - I DO 10 J=1,N G(I,J)=K GG(I,J)=K G(II,J)=K GG(II,J)=K 10 CONTINUE K=K - 1 20 CONTINUE C C CONSTRUCT RANDOM RIGHT-HAND SIDES C AND MAKE A COPY C DO 40 I=1,NB DO 30 II=1,N B(II,I)=UNI(0) BB(II,I)=B(II,I) 30 CONTINUE 40 CONTINUE C C SOLVE THE SYSTEM USING BOTH BASS AND BALE C IT=ILAPSZ(0) CALL BASS(N,ML,M,G,IG,B,IB,NB,COND) TIME1=(ILAPSZ(0)-IT)/64.0 WRITE(IWRITE,41)TIME1 41 FORMAT(34H TIME FOR BASS IN MILLISECONDS IS ,F10.1) IT=ILAPSZ(0) CALL BALE(N,ML,M,GG,IG,BB,IB,NB) TIME2=(ILAPSZ(0)-IT)/64.0 WRITE(IWRITE,42)TIME2 42 FORMAT(34H TIME FOR BALE IN MIILISECONDS IS ,F10.1) 50 CONTINUE 60 CONTINUE 70 CONTINUE STOP END INTEGER FUNCTION ILAPSZ(N) INTEGER N ILAPSZ = 0 RETURN END PyBDSF-1.10.1/src/port3/ex/lbaj.f000066400000000000000000000027601420247104600161570ustar00rootroot00000000000000C$TEST LBAJ C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BADC C C*********************************************************************** SUBROUTINE NEWTON(N,M,ML,X,EPS,FUN,JAC,LIMIT,F) C C THIS SUBROUTINE IMPLEMENTS A LINEARIZED FORM OF NEWTONS C METHOD TO FIND THE ZERO OF A FUNCTION F DEFINED BY C FUN, WHOSE BAND JACOBIAN (WITH BANDWIDTH M AND ML C LOWER DIAGONALS) IS EVALUATED IN JAC. LIMIT GIVES C A BOUND ON THE NUMBER OF ITERATIONS AND IN F THE C FINAL FUNCTION VALUE IS RETURNED. C INTEGER N, ML, M, LIMIT INTEGER JG, JAL, JINTER, ISTKGT, MU, LIM, I INTEGER IST(1000) REAL EPS, X(N), F(N) REAL FU, SNRM2, R(1000) DOUBLE PRECISION D(500) EXTERNAL FUN,JAC COMMON /CSTAK/ D EQUIVALENCE (D(1),R(1)),(D(1),IST(1)) C C GET SPACE FOR G,INTER, AND AL FROM C THE STORAGE STACK C JG= ISTKGT(M*N,3) JAL = ISTKGT ((ML-1)*N,3) JINTER = ISTKGT(N,2) CALL JAC(N,M,ML,X,R(JG),M) CALL BADC(N,ML,M,R(JH),M,R(JAL),ML-1,IST(JINTER),MU) LIM=0 10 CALL FUN(N,X,F) FU=SNRM2(N,F,1) C C CHECK FOR CONVERGENCE OR IF ITERATION LIMIT IS REACHED C IF (FU.LE.EPS.OR.LIM.GT.LIMIT) RETURN LIM=LIM+1 C SOLVE THE LINEAR SYSTEM CALL BAFS(N,ML,R(JAL),ML-1,IST(JINTER),F,N,1) CALL BABS(N,R(JG),M,F,N,1,MU) C CORRECT THE CURRENT ESTIMATE OF THE SOLUTION DO 20 I=1,N X(I)=X(I)-F(I) 20 CONTINUE GO TO 10 END PyBDSF-1.10.1/src/port3/ex/lbak.f000066400000000000000000000017521420247104600161600ustar00rootroot00000000000000C$TEST LBAK C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LBAK C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BANM C C*********************************************************************** INTEGER IG, ML, M, N, I, J, IWRITE, I1MACH REAL G(13, 80), START, BANM, TRNORM IG=13 N=80 DO 30 ML=2,6 C C CONSTRUCT THE MATRIX A(I,J)=I+J AND PACK IT INTO G C M=2*ML-1 START=-FLOAT(M-ML) DO 20 I=1,N G(1,I)=START+FLOAT(2*I) DO 10 J=2,M G(J,I)=G(J-1,I)+1.0 10 CONTINUE 20 CONTINUE C C PRINT OUT THE NORM CALCULATED FROM BANM AND THE TRUE NORM C TRNORM=M*(N-ML+1)*2 IWRITE=I1MACH(2) WRITE(IWRITE,21)ML 21 FORMAT(/6H ML IS ,I4) WRITE(IWRITE,22)TRNORM,BANM(N,ML,M,G,IG) 22 FORMAT(15H THE TRUE NORM=,E15.5,15H COMPUTED NORM=,E15.5) 30 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/lbal.f000066400000000000000000000031251420247104600161550ustar00rootroot00000000000000C$TEST LBAL C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BALU C C*********************************************************************** SUBROUTINE BADET(N,ML,M,A,IA,DETMAN,IDETEX) C C THIS SUBROUTINE COMPUTES THE DETERMINANT OF A C BANDED MATRIX STORED IN PACKED FORM IN A C THE DETERMINANT IS COMPUTED AS DETMAN*BETA**IDETEX, C WHERE BETA IS THE BASE OF THE MACHINE AND C DETMAN IS BETWEEN 1/BETA AND 1 IN ABSOLUTE VALUE C INTEGER ML, M, N, IA, IDETEX INTEGER E, ISPAC, IALOW, ISTKGT, ISIGN, INTER, I, MU INTEGER IN(1000) REAL A(IA,1), DETMAN, BETA, ONOVBE, S REAL R(1000) DOUBLE PRECISION D(500) COMMON /CSTAK/D EQUIVALENCE(D(1),R(1)),(D(1),IN(1)) C C ALLOCATE SPACE FROM THE STACK FOR THE PIVOT ARRAY C AND THE EXTRA SPACE TO HOLD THE LOWER TRIANGLE C ISPAC=(ML-1)*N IALOW=ISTKGT(ISPAC,3) INTER=ISTKGT(N,2) CALL BALU(N,ML,M,A,IA,R(IALOW),ML-1,IN(INTER),MU,0.0) C C THE DETERMINANT IS THE PRODUCT OF THE ELEMENTS OF C ROW 1 OF A TIMES THE LAST ELEMENT IN THE ARRAY INTER. C WE TRY TO COMPUTE THIS PRODUCT IN A WAY THAT WILL C AVOID UNDERFLOW AND OVERFLOW. C BETA=FLOAT(I1MACH(10)) ONOVBE=1.0/BETA ISIGN=INTER+N-1 DETMAN=IN(ISIGN)*ONOVBE IDETEX=1 DO 10 I=1,N CALL UMKFL(A(1,I),E,S) DETMAN=DETMAN*S IDETEX=IDETEX+E IF (ABS(DETMAN).GE.ONOVBE) GO TO 10 IDETEX=IDETEX-1 DETMAN=DETMAN*BETA 10 CONTINUE CALL ISTKRL(2) RETURN END PyBDSF-1.10.1/src/port3/ex/lban.f000066400000000000000000000054461420247104600161670ustar00rootroot00000000000000C$TEST LBAN C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LBAN C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BABS C C*********************************************************************** INTEGER N, I, IWRITE, I1MACH REAL G(3, 200), EVEC(100) N=10 DO 10 I=1,N G(1,I)=-1.0 G(2,I)=1.0 G(3,I)=-1.0 10 CONTINUE G(2,1)=-.75 G(2,N)=-.75 G(3,1)=-.5 G(1,2)=-.5 G(1,N)=-.5 G(3,N-1)=-.5 IWRITE=I1MACH(2) CALL EIGVEC(N,3,2,G,3,-1.0,EVEC,2) DO 20 I=1,N WRITE(IWRITE,21)EVEC(I) 20 CONTINUE 21 FORMAT(12H EIGENVECTOR,F16.8) STOP END SUBROUTINE EIGVEC(N,M,ML,G,IG,EVAL,EVEC,LIMIT) C C GIVEN A BANDED MATRIX PACKED INTO G WITH C N ROWS, M NONZERO DIAGONALS AND ML NONZERO DIAGONALS C ON AND BELOW THE DIAGONAL AND GIVEN AN EIGENVALUE OF THE C MATRIX IN EVAL, THIS SUBROUTINE USES INVERSE ITERATION TO C DETERMINE THE CORRESPONDING EIGENVECTOR AND RETURNS IT C IN EVEC. C LIMIT IS A BOUND ON THE NUMBER OF ITERATIONS C INTEGER N, M, ML, IG, LIMIT INTEGER I, JAL, ISTKGT, JINTER, JX, MU, IERR, NERROR INTEGER LIM, JJ, ISAMAX, JXI, IST(1000) REAL G(IG, N), EVEC(N), EVAL REAL SIZE, R1MACH, EPS, SC, BET, D1, SC2, ABS REAL R(1000) DOUBLE PRECISION D(500) COMMON /CSTAK/ D EQUIVALENCE (D(1),IST(1)),(R(1),D(1)) CALL ENTER(1) C DETERMINE ITERATION TOLERANCE SIZE = BANM(N,ML,M,G,IG) EPS=SIZE*R1MACH(4) C SUBTRACT EIGENVALUE FROM DIAGONAL OF G DO 10 I=1,N G(ML,I)=G(ML,I) - EVAL 10 CONTINUE C GET SPACE FROM STACK FOR AL,INTER, AND SCRATCH VECTOR JAL =ISTKGT(N*(ML-1),3) JINTER=ISTKGT(N,2) JX=ISTKGT(N,3) C GET LU DECOMPOSITION OF MATRIX CALL BALU(N,ML,M,G,IG,R(JAL),ML-1,IST(JINTER),MU,EPS) C OBTAIN INITIAL RIGHT HAND SIDE IF (NERROR(IERR).NE.0) CALL ERROFF DO 20 I=1,N EVEC(I)=1.0 20 CONTINUE CALL BABS(N,G,IG,EVEC,N,1,MU) LIM=0 JJ=ISAMAX(N,EVEC,1) SC=1.0/EVEC(JJ) C SCALE FIRST RHS TO HAVE INFINITY NORM OF 1 CALL SSCAL(N,SC,EVEC,1) C ITERATIVE PHASE BEGINS HERE 30 LIM=LIM+1 C MAKE A COPY OF OLD APPROXIMATION CALL MOVEFR(N,EVEC,R(JX)) C GET NEW APPROXIMATION OF EIGNVECTOR CALL BAFS(N,ML,R(JAL),ML-1,IST(JINTER),EVEC,N,1) CALL BABS(N,G,IG,EVEC,N,1,MU) BET=1.0/EVEC(JJ) JJ=ISAMAX(N,EVEC,1) SC2=1.0/EVEC(JJ) C COMPUTE CONVERGENCE CRITERIA D1=0.0 DO 40 I=1,N JXI=JX-1+I D1=AMAX1(D1,ABS((R(JXI)-BET*EVEC(I))*SC2)) 40 CONTINUE SC=SC2 CALL SSCAL(N,SC,EVEC,1) C TEST FOR CONVERGENCE AND IF ITERATION LIMIT EXCEEDED IF (D1.GT.EPS.AND.LIM.LT.LIMIT) GO TO 30 CALL LEAVE RETURN END PyBDSF-1.10.1/src/port3/ex/lbap.f000066400000000000000000000026731420247104600161700ustar00rootroot00000000000000C$TEST LBAP C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LBAP C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BAML C C*********************************************************************** INTEGER IG, M, ML, N, I, IWRITE, I1MACH REAL G(5,20), X(20), B(20), UNI, ERR, SASUM, ABS, COND IG=5 M=5 N=10 ML=3 C C CONSTRUCT THE A MATRIX AND PACK IT INTO G C DO 10 I=1,N G(1,I)=2.0 G(2,I)=1.0 G(3,I)=0.0 G(4,I)=1.0 G(5,I)=2.0 10 CONTINUE C C CONSTRUCT A RANDOM VECTOR C DO 20 I=1,N X(I)=UNI(0) 20 CONTINUE C C CONSTRUCT B=AX C CALL BAML(N,ML,M,G,IG,X,B) C C SOLVE THE SYSTEM AX=B C CALL BASS(N,ML,M,G,IG,B,N,1,COND) C C PRINT OUT THE TRUE SOLUTION AND THE COMPUTED SOLUTION C IWRITE=I1MACH(2) WRITE(IWRITE,21) 21 FORMAT(34H TRUE SOLUTION COMPUTED SOLUTION) WRITE(IWRITE,22)(X(I),B(I),I=1,N) 22 FORMAT(1H ,2E17.8) C C COMPUTE THE RELATIVE ERROR C ERR=0.0 DO 30 I=1,N ERR=ERR+ABS(B(I)-X(I)) 30 CONTINUE ERR=ERR/SASUM(N,X,1) WRITE(IWRITE,31)ERR 31 FORMAT(19H RELATIVE ERROR IS ,1PE15.7) WRITE(IWRITE,32)COND 32 FORMAT(20H CONDITION NUMBER IS,1PE15.7) STOP END PyBDSF-1.10.1/src/port3/ex/lgea.f000066400000000000000000000030061420247104600161510ustar00rootroot00000000000000C$TEST LGEA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LGEA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GESS C C*********************************************************************** INTEGER N, IREAD, I1MACH, I, NB, IWRITE, J REAL A(5,5), B(5,2), COND N=5 IREAD=I1MACH(1) C DO 10 I=1,N READ(IREAD,1) (A(I,J),J=1,N) 1 FORMAT(1X,5F10.0) 10 CONTINUE C NB=2 DO 20 I=1,N READ(IREAD,11) (B(I,J),J=1,NB) 11 FORMAT(1X,2F10.3) 20 CONTINUE C C SOLVE AX = B BY CALLING GESS C CALL GESS(N,A,N,B,N,NB,COND) IWRITE=I1MACH(2) WRITE(IWRITE,21) COND 21 FORMAT(52H AN ESTIMATE OF THE CONDITION NUMBER OF THE MATRIX =, 1 E14.7) C WRITE(IWRITE,22) 22 FORMAT(27H THE COMPUTED SOLUTION X IS,//) DO 30 I=1,N WRITE(IWRITE,23) (B(I,J),J=1,NB) 23 FORMAT(1H ,5F20.7) 30 CONTINUE C STOP END C C DATA FOR THE EXAMPLE IN THE PORT SHEET... (REMOVE THE C C IN COLUMN 1 BEFORE FEEDING THIS DATA TO THE PROGRAM ABOVE.) C$DATA C 1. -2. 3. 7. -9. C -2. 8. -6. 9. 50. C 11. -6. 18. -15. -18. C 7. 2. -15. 273. 173. C -9. 50. -18. 6. 1667. C 30. 29.419 C -191. -190.994 C 133. 133.072 C -986. -985.775 C -6496. -6495.553 PyBDSF-1.10.1/src/port3/ex/lgeb.f000066400000000000000000000063131420247104600161560ustar00rootroot00000000000000C$TEST LGEB C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LGEB C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GECE C C*********************************************************************** INTEGER N, IA, IB, NB, INTER(5), IREAD, I1MACH INTEGER I, J, IWRITE, ITER, IEND REAL A(5, 5), SAVEA(5, 5), B(5), SAVEB(5), R(5) REAL COND, BNORM, R1MACH, ABS, RNORM DOUBLE PRECISION DSDOT C N=5 IA=5 IB=5 NB=1 IREAD=I1MACH(1) C DO 10 I=1,N 10 READ(IREAD,11) (A(I,J),J=1,N) 11 FORMAT(1X,5F8.0) DO 20 I=1,IB 20 READ(IREAD,21) B(I) 21 FORMAT(F8.0) C C SAVE THE MATRIX AND RIGHT-HAND SIDE (WHICH WILL BE OVERWRITTEN) C DO 40 I=1,N SAVEB(I)=B(I) DO 30 J=1,N 30 SAVEA(I,J)=A(I,J) 40 CONTINUE C C SOLVE AX = B USING SEPARATE CALLS TO GECE, GEFS, GEBS C CALL GECE(N,A,IA,INTER,COND) IWRITE=I1MACH(2) IF (COND.GE.1.0/R1MACH(4)) WRITE(IWRITE,41) 41 FORMAT(49H CONDITION NUMBER HIGH,ACCURATE SOLUTION UNLIKELY) C CALL GEFS(N,A,IA,B,IB,NB,INTER) C CALL GEBS(N,A,IA,B,IB,NB) WRITE(IWRITE,42) 42 FORMAT(44H ESTIMATED CONDITION NUMBER OF THE MATRIX A,) WRITE(IWRITE,43) COND 43 FORMAT(27H USING ONE CALL TO GECE = ,E15.7) BNORM=0.0 WRITE(IWRITE,44) 44 FORMAT(/22H THE FIRST SOLUTION X,) WRITE(IWRITE,45) 45 FORMAT(41H (USING CALLS TO GECE, GEFS, AND GEBS) = ) C C COMPUTE NORM OF SOLUTION C DO 50 I=1,N BNORM=BNORM + ABS(B(I)) 50 WRITE(IWRITE,51) B(I) 51 FORMAT(1X, 5F20.7) C C REFINE THE SOLUTION DEPENDING ON THE LENGTH OF THE MANTISSA C IEND=I1MACH(11)*IFIX(R1MACH(5)/ALOG10(2.0) + 1.0) DO 90 ITER=1,IEND C COMPUTE RESIDUAL R = B - AX, IN DOUBLE PRECISION C WRITE(IWRITE,52) 52 FORMAT(/27H THE RESIDUAL R = B - AX = ) DO 70 I=1,IA DSDOT=0.0 DO 60 J=1,N 60 DSDOT = DSDOT + DBLE(SAVEA(I,J))*B(J) R(I) = SAVEB(I) - DSDOT 70 WRITE(IWRITE,51) R(I) C C SOLVE LU*(DELTA X) = R USING SEPARATE CALLS TO GEFS AND GEBS C CALL GEFS(N,A,IA,R,IB,NB,INTER) CALL GEBS(N,A,IA,R,IB,NB) C C THE NEW SOLUTION X = X + DELTA X C WRITE(IWRITE,71) 71 FORMAT(/38H THE NEW SOLUTION X = X + DELTA X = ) C C DETERMINE NORM OF CORRECTION AND ADD IN CORRECTION C RNORM=0.0 DO 80 I=1,N B(I) = B(I) + R(I) RNORM=RNORM + ABS(R(I)) 80 WRITE(IWRITE,51) B(I) C C TEST FOR CONVERGENCE C IF(RNORM.LT.R1MACH(4)*BNORM) GO TO 100 90 CONTINUE WRITE(IWRITE,91) 91 FORMAT(/29H ITERATIVE IMPROVEMENT FAILED) 100 CONTINUE STOP END C C DATA FOR THE EXAMPLE IN THE PORT SHEET... (REMOVE THE C C IN COLUMN 1 BEFORE FEEDING THIS DATA TO THE PROGRAM ABOVE.) C$DATA C 1. -2. 3. 7. -9. C -2. 8. -6. 2. 50. C 3. -6. 18. -15. -18. C 7. 2. -15. 273. 174. C -9. 50. -18. 173. 1667. C 78. C -320. C -81. C 215. C-10856. PyBDSF-1.10.1/src/port3/ex/lgef.f000066400000000000000000000033671420247104600161700ustar00rootroot00000000000000C$TEST LGEF C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LGEF C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GELE C C*********************************************************************** INTEGER IA, IB, I1MACH, N, I, J, IT, ILAPSZ, IWRITE REAL A(100, 100), AA(100, 100), B(100), BB(100) REAL SUM, ERR, COND, ABS, TIME, TIMES, AMAX1 IA=100 IB =100 C C GENERATE THE MATRIX AND RIGHT-HAND SIDE C DO 40 N=10,90,40 DO 20 I=1,N SUM=0.0 DO 10 J=1,N A(I,J)=IABS(I-J) IF (I.GE.J) A(I,J)=A(I,J) + 1.0 AA(I,J)=A(I,J) SUM=SUM + AA(I,J) 10 CONTINUE B(I)=SUM BB(I)=SUM 20 CONTINUE C C CALL GELE AND TIME IT IT =ILAPSZ(0) CALL GELE(N,A,IA,B,IB,1) TIME=FLOAT(ILAPSZ(0)-IT)/64.0 C C COMPUTE THE MAXIMUM ERROR C ERR=0.0 DO 30 I=1,N ERR=AMAX1(ERR, ABS(B(I)-1.0)) 30 CONTINUE C C CALL GESS C IT =ILAPSZ(0) CALL GESS(N,AA,IA,BB,IB,1,COND) TIMES=FLOAT(ILAPSZ(0)-IT)/64.0 IWRITE=I1MACH(2) WRITE(IWRITE,31)N,COND 31 FORMAT(8H FOR N= ,I4,20H CONDITION NUMBER = ,E15.7) WRITE(IWRITE,32)ERR 32 FORMAT(30H MAXIMUM ERROR IN SOLUTION IS ,F15.7) WRITE(IWRITE,33)TIME 33 FORMAT(34H TIME IN MILLISECONDS FOR GELE IS ,F10.2) WRITE(IWRITE,34)TIMES 34 FORMAT(34H TIME IN MILLISECONDS FOR GESS IS ,F10.2) 40 CONTINUE STOP END INTEGER FUNCTION ILAPSZ(N) INTEGER N ILAPSZ = 0 RETURN END PyBDSF-1.10.1/src/port3/ex/lgeh.f000066400000000000000000000025561420247104600161710ustar00rootroot00000000000000C$TEST LGEH C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LGEH C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GENM C C*********************************************************************** INTEGER I, J, L, N, IA, IWRITE, I1MACH REAL A(50, 50), AA(50, 50), B(50), X(50) REAL RELERR, RELRES, XNORM, RNORM, ERR, R(50) REAL GENM, SAMAX IA = 50 C C GENERATE MATRIX C N=50 DO 20 I=1,N DO 10 J=I,N A(I,J)=J-I A(J,I)=J-I + 1 AA(I,J)=A(I,J) AA(J,I)=A(J,I) 10 CONTINUE B(I)=I 20 CONTINUE C C GENERATE RIGHT HAND SIDE C CALL GEML(N,A,IA,B,X) C C MAKE COPY OF RIGHT HAND SIDE C CALL MOVEFR(N,X,B) C C SOLVE THE SYSTEM C CALL GELE(N,A,IA,B,N,1) C C COMPUTE THE RELATIVE ERROR AND THE RELATIVE RESIDUAL C CALL GEML(N,AA,IA,B,R) ERR=0.0 DO 30 I=1,N ERR=AMAX1(ERR,ABS(B(I)-FLOAT(I))) R(I)=R(I)-X(I) 30 CONTINUE XNORM=SAMAX(N,X,1) RNORM=SAMAX(N,R,1) RELERR=ERR/XNORM RELRES=RNORM/(XNORM*GENM(N,AA,IA)) IWRITE=I1MACH(2) WRITE(IWRITE,31)RELERR,RELRES 31 FORMAT(16H RELATIVE ERROR=,E15.5,19H RELATIVE RESIDUAL=, 1 E15.5) STOP END PyBDSF-1.10.1/src/port3/ex/lgej.f000066400000000000000000000025311420247104600161640ustar00rootroot00000000000000C$TEST LGEJ C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GELU C C*********************************************************************** SUBROUTINE DET(N,A,IA,DETMAN,IDETEX) C C THIS SUBROUTINE COMPUTES THE DETERMINANT OF A C THE RESULT IS GIVEN BY DETMAN*BETA**IDETEX C WHERE BETA IS THE BASE OF THE MACHINE C AND DETMAN IS BETWEEN 1/BETA AND 1 C INTEGER N, IA, IDETEX INTEGER E, IPOINT, ISTKGT, I1MACH, ISIGN, I INTEGER IN(1000) REAL A(IA, N), DETMAN, BETA, FLOAT, ONOVBE, M, ABS DOUBLE PRECISION D(500) COMMON /CSTAK/ D EQUIVALENCE(D(1),IN(1)) C C ALLOCATE SPACE FROM THE STACK FOR THE PIVOT ARRAY C IPOINT=ISTKGT(N,2) CALL GELU(N,A,IA,IN(IPOINT),0.0) C C THE DETERMINANT IS THE PRODUCT OF THE DIAGONAL ELEMENTS C AND THE LAST ELEMENT OF THE INTERCHANGE ARRAY C WE TRY TO COMPUTE THIS PRODUCT IN A WAY THAT WILL C AVOID UNDERFLOW AND OVERFLOW C BETA=FLOAT(I1MACH(10)) ONOVBE=1.0/BETA ISIGN=IPOINT + N-1 DETMAN=IN(ISIGN)*ONOVBE IDETEX=1 DO 10 I=1,N CALL UMKFL(A(I,I),E,M) DETMAN=DETMAN*M IDETEX=IDETEX+E IF(ABS(DETMAN).GE.ONOVBE) GO TO 10 IDETEX=IDETEX-1 DETMAN=DETMAN*BETA 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/lgel.f000066400000000000000000000014651420247104600161730ustar00rootroot00000000000000C$TEST LGEL C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LGEL C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GEBS C C*********************************************************************** INTEGER N, I, J, IWRITE, I1MACH REAL A(15,15), B(15) N=15 C C FORM THE MATRIX AND SET THE RIGHT-HAND SIDE C TO THE LAST COLUMN OF THE IDENTITY MATRIX DO 20 I=1,N DO 10 J=I,N A(I,J) = -1.0 10 CONTINUE A(I,I) = 1.0 B(I) = 0.0 20 CONTINUE B(N)=1.0 C FIND THE LAST COLUMN OF THE INVERSE MATRIX CALL GEBS(N,A,15,B,N,1) IWRITE=I1MACH(2) WRITE(IWRITE,21)(I,B(I),I=1,N) 21 FORMAT(3H B(,I3,3H )=,F15.4) STOP END PyBDSF-1.10.1/src/port3/ex/lgem.f000066400000000000000000000024151420247104600161700ustar00rootroot00000000000000C$TEST LGEM C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LGEM C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GEML C C*********************************************************************** INTEGER I, J, IWRITE, I1MACH, N REAL A(10, 10), X(10), B(10) REAL ERR, SASUM, UNI, COND N=10 C C CONSTRUCT A MATRIX C DO 20 I=1,N DO 10 J=I,N A(I,J)=J-I A(J,I)=J-I + 1 10 CONTINUE 20 CONTINUE C C CONSTRUCT A RANDOM VECTOR X C DO 30 I=1,N X(I)=UNI(0) 30 CONTINUE C C FIND THE VECTOR B=AX C CALL GEML(N,A,10,X,B) C C SOLVE THE SYSTEM AX=B C CALL GESS(N,A,10,B,N,1,COND) C C PRINT THE COMPUTED AND TRUE SOLUTION C IWRITE=I1MACH(2) WRITE(IWRITE,31) 31 FORMAT(34H TRUE SOLUTION COMPUTED SOLUTION) WRITE(IWRITE,32)(X(I),B(I),I=1,N) 32 FORMAT(1H ,2E17.8) C C COMPUTE THE RELATIVE ERROR C ERR=0.0 DO 40 I=1,N ERR=ERR + ABS(B(I)-X(I)) 40 CONTINUE ERR=ERR/SASUM(N,X,1) WRITE(IWRITE,41)ERR 41 FORMAT(19H RELATIVE ERROR IS ,1PE15.7) WRITE(6,42)COND 42 FORMAT(21H CONDITION NUMBER IS ,1PE15.7) STOP END PyBDSF-1.10.1/src/port3/ex/llza.f000066400000000000000000000036201420247104600162050ustar00rootroot00000000000000C$TEST LLZA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LLZA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM LZ C C*********************************************************************** COMPLEX B(5,5),A(5,5),EIGA(5),EIGB(5),X,EIG IIN=I1MACH(1) IOUT=I1MACH(2) C C READ IN MATRICES C READ(IIN,10)((A(I,J),J=1,5),I=1,5) READ(IIN,10)((B(I,J),J=1,5),I=1,5) 10 FORMAT(10F6.0) C C PRINT MATRICES C WRITE(IOUT,20) 20 FORMAT(13H THE A MATRIX) WRITE(IOUT,30)((A(I,J),J=1,5),I=1,5) 30 FORMAT(5(F6.0,2H+ ,F6.0,1HI)) WRITE(IOUT,40) 40 FORMAT(13H THE B MATRIX) WRITE(IOUT,30)((B(I,J),J=1,5), I=1,5) C C SOLVE THE EIGENVALUE PROBLEM C CALL LZ(5,A,5,B,5,X,1,.FALSE.,EIGA,EIGB) WRITE(IOUT,50) 50 FORMAT(10X,4HEIGA,16X,4HEIGB,22X,10HEIGENVALUE) DO 60 I=1,5 EIG=CMPLX(R1MACH(2),R1MACH(2)) IF(REAL(EIGB(I)).NE.0.0.OR.AIMAG(EIGB(I)).NE.0.0) 1 EIG=EIGA(I)/EIGB(I) WRITE(IOUT,70)EIGA(I),EIGB(I),EIG 60 CONTINUE 70 FORMAT(1H ,2E10.3,2X,2E10.3,2X,2E16.8) STOP END C C DATA FOR THE EXAMPLE IN THE PORT SHEET... (REMOVE THE C C IN COLUMN 1 BEFORE FEEDING THIS DATA TO THE PROGRAM ABOVE.) C$DATA C 41. -369. -143. -747. -20.-1368. 20. 486. 104. -432. C 148. 261. 144. 666. -6.-1152. -78. 45. 8. -540. C -19. 819. 87. 243. 4. 1548. -56. -954. -164. 180. C -60. -945. -81. -279. 99. 171. 34. 441. 84. -144. C 1. -468. 133. 747. 132. 774. -46. -45. -12. -216. C 90. 161. 180. 335. 36. 182. -90. -162. -72. -36. C -105. -169. -210. -322. -42. 24. 105. 167. 84. 204. C -90. -211. -180. -307. -36. -160. 90. 186. 72. 36. C 75. 205. 150. 215. 30. 45. -75. -165. -60. -80. C -75. -48. -150. -299. -30. -102. 75. 89. 60. 88. PyBDSF-1.10.1/src/port3/ex/lnab.f000066400000000000000000000026741420247104600161670ustar00rootroot00000000000000C$TEST LNAB C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LNAB C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM LSTSQ C C*********************************************************************** REAL X(10,2), Y(10), C(2), XX(10,2), YY(10) C C SET THE FIRST COLUMN OF THE X ARRAY TO THE ACTUAL X, C AND THE SECOND COLUMN TO 1.0 C DO 10 K=1,6 X(K,1) = FLOAT(K) 10 X(K,2) = 1. C C SET THE VALUES OF THE RIGHT-HAND SIDE, Y C Y(1) = .3 Y(2) = .95 Y(3) = 2.6 Y(4) = 2.5 Y(5) = 2.3 Y(6) = 3.95 C C SINCE LSTSQ WRITES OVER THE ARRAYS X AND Y, C SAVE THEM FOR LATER DEMONSTRATION COMPUTATION. C DO 15 K=1,6 YY(K) = Y(K) DO 15 J=1,2 15 XX(K,J)=X(K,J) C CALL LSTSQ (10,2,6,2,X,Y,1,C) C IWRITE = I1MACH(2) WRITE(IWRITE,97) C(1), C(2) 97 FORMAT (8H0C(1) = ,E16.8, 11H C(2) = ,E16.8) C C COMPUTE THE SUM OF THE SQUARES OF THE ERROR C USING BRUTE FORCE. C ERR = 0. DO 20 J=1,6 ADD = (C(1)*XX(J,1)+C(2)-YY(J))**2 20 ERR = ERR + ADD C WRITE(IWRITE,98) ERR 98 FORMAT(35H0LEAST-SQUARES ERROR (VERSION 1) = ,E16.8) C C COMPUTE THE LEAST-SQUARES ERROR USING THE PROGRAM SOLUTION. C ERR = 0. DO 30 L=3,6 ERR = ERR + Y(L)*Y(L) 30 CONTINUE C WRITE(IWRITE,99) ERR 99 FORMAT(35H0LEAST-SQUARES ERROR (VERSION 2) = ,E16.8) C STOP END PyBDSF-1.10.1/src/port3/ex/lpsa.f000066400000000000000000000022611420247104600162020ustar00rootroot00000000000000C$TEST LPSA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LPSA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BPSS C C*********************************************************************** INTEGER N, K, I, IWRITE, I1MACH, MU REAL G(2,100), B(200) REAL X, COND, ERR, AMAX1 C CONSTRUCT MATRIX AND RIGHT-HAND SIDE SO TRUE SOLUTION IS C COMPOSED ENTIRELY OF ONES N=100 X=1 DO 30 K=1,3 DO 10 I=1,N G(1,I)=2.0 G(2,I)=-1.0 B(I)=0.0 10 CONTINUE G(1,1)=1.0+X G(1,N)=1.0+X B(1)=X B(N)=X C SOLVE THE SYSTEM MU=2 CALL BPSS(N,MU,G,2,B,N,1,COND) IWRITE=I1MACH(2) WRITE(IWRITE,11)X 11 FORMAT(/5H X IS,F15.7) WRITE(IWRITE,12)COND 12 FORMAT(20H CONDITION NUMBER IS,1PE15.7) C COMPUTE THE ERROR ERR=0.0 DO 20 I=1,N ERR=AMAX1(ERR,ABS(B(I)-1.0)) 20 CONTINUE WRITE(IWRITE,21)ERR 21 FORMAT(22H FOR BPSS THE ERROR IS,F16.8) X=X/100. 30 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/lpsb.f000066400000000000000000000034121420247104600162020ustar00rootroot00000000000000C$TEST LPSB C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LPSB C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BPCE C C*********************************************************************** INTEGER N, MU, IG, K, I, IWRITE, I1MACH, J REAL G(2,100), B(200) REAL X, COND, AINVNO, AINORM, ABS N=100 X=1.0 MU=2 IG=2 DO 50 K=1,3 C CONSTRUCT MATRIX DO 10 I=1,N G(1,I)=2.0 G(2,I)=-1.0 10 CONTINUE G(1,1)=1.0+X G(1,N)=1.0+X C GET ESTIMATE OF CONDITION NUMBER FROM BPCE CALL BPCE(N,MU,G,IG,COND) IWRITE=I1MACH(2) WRITE(IWRITE,11)X 11 FORMAT(/10H WHEN X IS,E14.6) WRITE(IWRITE,12)COND 12 FORMAT(25H CONDITION ESTIMATE IS ,E15.8) C SINCE CONDITION NUMBER IS NORM(A)*NORM(INVERSE(A)), C FIND THE NORM OF EACH COLUMN OF INVERSE(A). GENERATE C THE COLUMNS ONE AT A TIME AND REUSE SPACE AINVNO=0.0 DO 40 I=1,N C GENERATE ITH COLUMN OF IDENTITY MATRIX AS RIGHT HAND SIDE DO 20 J=1,N B(J)=0.0 20 CONTINUE B(I)=1.0 C SOLVE AX=B TO GET ITH COLUMN OF A(INVERSE) CALL BPFS(N,MU,G,IG,B,N,1) CALL BPBS(N,MU,G,IG,B,N,1) C FIND NORM OF COLUMN AINORM=0.0 DO 30 J=1,N AINORM=AINORM+ABS(B(J)) 30 CONTINUE IF(AINVNO.LT.AINORM)AINVNO=AINORM 40 CONTINUE COND=4.0*AINVNO WRITE(IWRITE,41)COND 41 FORMAT(25H TRUE CONDITION NUMBER IS,E15.8) X=X/100.0 50 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/lpsf.f000066400000000000000000000025551420247104600162150ustar00rootroot00000000000000C$TEST LPSF C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LPSF C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BPLE C C*********************************************************************** INTEGER IG, N, MU, MLM1, I, KBLOK, KK, J INTEGER IWRITE, I1MACH REAL G(11,100), B(100), X(100) REAL ERR, AMAX1 IG=11 N=100 MU=11 C C SET UP MATRIX FOR ELLIPTIC PDE IN 2 DIMENSIONS C MLM1=MU-1 I=0 DO 30 KBLOK=1,MLM1 DO 20 KK=1,MLM1 I=I+1 G(1,I)=4.0 G(2,I)=-1.0 DO 10 J=3,MLM1 G(J,I)=0.0 10 CONTINUE G(MU,I)=-1.0 20 CONTINUE G(2,I)=0.0 30 CONTINUE C C SET UP RIGHT HAND SIDE SO SOLUTION IS ALL 1'S C DO 40 I=1,N X(I)=1.0 40 CONTINUE CALL BPML(N,MU,G,IG,X,B) C C SOLVE THE SYSTEM C CALL BPLE(N,MU,G,IG,B,100,1) C C COMPUTE THE ERROR C ERR=0.0 DO 50 I=1,N ERR=AMAX1(ERR,ABS(B(I)-1.0)) 50 CONTINUE IWRITE=I1MACH(2) WRITE(IWRITE,51)ERR 51 FORMAT(31H ERROR IN SOLUTION FROM BPLE IS,F15.8) STOP END PyBDSF-1.10.1/src/port3/ex/lpsg.f000066400000000000000000000040031420247104600162040ustar00rootroot00000000000000C$TEST LPSG C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LPSG C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BPDC C C*********************************************************************** INTEGER IG, MLM1, IWRITE, I1MACH, K, N, MU INTEGER NBLOK, KBLOK, KK, I, J, IT, ILAPSZ, IT2 REAL G(17, 100), G2(17, 100), G3(17, 100) REAL COND IG=17 MLM1=4 IWRITE=I1MACH(2) DO 70 K=1,3 DO 60 N=48,96,48 MU=MLM1+1 I=0 NBLOK=N/MLM1 C C SET UP THREE MATRICES FOR ELLIPTIC PDE IN 2 DIMENSION C DO 30 KBLOK=1,NBLOK DO 20 KK=1,MLM1 I=I+1 G(1,I)=4.0 G(2,I)=-1.0 G(MU,I)=-1.0 DO 10 J=3,MLM1 G(J,I)=0.0 10 CONTINUE 20 CONTINUE G(2,I)=0.0 30 CONTINUE DO 50 I=1,N DO 40 J=1,MU G2(J,I)=G(J,I) G3(J,I)=G(J,I) 40 CONTINUE 50 CONTINUE WRITE(IWRITE,51)N,MU 51 FORMAT(/6H N IS ,I4,30H ,NUMBER OF UPPER DIAGONALS IS,I3) C TIME DECOMPOSITION BY BPLD IT=ILAPSZ(0) CALL BPLD(N,MU,G,IG,0.0) IT=ILAPSZ(0)-IT WRITE(IWRITE,52)IT 52 FORMAT(14H TIME FOR BPLD,I7) C TIME DECOMPOSITION BY BPDC IT2=ILAPSZ(0) CALL BPDC(N,MU,G2,IG) IT2=ILAPSZ(0)-IT2 WRITE(IWRITE,53)IT2 53 FORMAT(14H TIME FOR BPDC,I7) C TIME DECOMPOSITION BY BPCE IT3=ILAPSZ(0) CALL BPCE(N,MU,G3,IG,COND) IT3=ILAPSZ(0)-IT3 WRITE(IWRITE,54)IT3 54 FORMAT(14H TIME FOR BPCE,I7) 60 CONTINUE MLM1=MLM1*2 70 CONTINUE STOP END INTEGER FUNCTION ILAPSZ(N) INTEGER N ILAPSZ = 0 RETURN END PyBDSF-1.10.1/src/port3/ex/lpsj.f000066400000000000000000000021131420247104600162070ustar00rootroot00000000000000C$TEST LPSJ C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BPLD C C*********************************************************************** SUBROUTINE BPDET(N,MU,G,IG,DETMAN,IDETEX) C C THIS SUBROUTINE COMPUTES THE DETERMINANT OF A C BAND SYMMETRIC POSITIVE DEFINITE MATRIX STORED IN G. C IT IS GIVEN BY DETMAN*BETA**IDETEX C WHERE BETA IS THE BASE OF THE MACHINE C AND DETMAN IS BETWEEN 1/BETA AND 1 C REAL G(IG,N),DETMAN REAL ONOVBE,M INTEGER E INTEGER IDETEX CALL BPLD(N,MU,G,IG,0.0) C C THE DETERMINANT IS THE PRODUCT OF THE ELEMENTS OF ROW 1 OF G C WE TRY TO COMPUTE THIS PRODUCT IN A WAY THAT WILL C AVOID UNDERFLOW AND OVERFLOW C ONOVBE=1.0/FLOAT(I1MACH(10)) DETMAN=ONOVBE BETA=FLOAT(I1MACH(10)) IDETEX=1 DO 10 I=1,N CALL UMKFL(G(1,I),E,M) DETMAN=DETMAN*M IDETEX=IDETEX+E IF(DETMAN.GE.ONOVBE) GO TO 10 IDETEX=IDETEX-1 DETMAN=DETMAN*BETA 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/lpsk.f000066400000000000000000000045261420247104600162220ustar00rootroot00000000000000C$TEST LPSK C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LPSK C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BPFS C C*********************************************************************** INTEGER N, ML, IG, NM1, K, I, IWRITE, I1MACH, IT, IEND, ITER REAL G(2,100), B(200), R(200) REAL X, ERR, AMAX1, RNORM, BNORM, R1MACH, ABS DOUBLE PRECISION DBLE C CONSTRUCT MATRIX AND RIGHT HAND SIDE SO TRUE SOLUTION IS C COMPOSED ENTIRELY OF 1S N=100 X=1 ML=2 IG=2 NM1=N-1 DO 90 K=1,3 DO 10 I=1,N G(1,I)=2.0 G(2,I)=-1.0 B(I)=0.0 10 CONTINUE G(1,1)=1.0+X G(1,N)=1.0+X B(1)=X B(N)=X C SOLVE THE SYSTEM CALL BPLE(N,ML,G,IG,B,N,1) IWRITE=I1MACH(2) WRITE(IWRITE,11)X 11 FORMAT(/5H X IS,F16.8) C COMPUTE THE ERROR ERR=0.0 DO 20 I=1,N ERR=AMAX1(ERR,ABS(B(I)-1.0)) 20 CONTINUE WRITE(IWRITE,21)ERR 21 FORMAT(22H FOR BPLE THE ERROR IS,F16.8) IEND=I1MACH(11)*IFIX(R1MACH(5)/ALOG10(2.0)+1.0) C FIND THE NORM OF THE SOLUTION BNORM=0.0 DO 30 I=1,N BNORM=AMAX1(BNORM,ABS(B(I))) 30 CONTINUE C REFINE THE SOLUTION DO 60 ITER=1,IEND IT=ITER C COMPUTE THE RESIDUAL R=B-AX, IN DOUBLE PRECISION DO 40 I=2,NM1 R(I)=DBLE(B(I-1))+DBLE(B(I+1))-2.D0*DBLE(B(I)) 40 CONTINUE R(1)=X+B(2)-DBLE(1.0+X)*DBLE(B(1)) R(N)=X+B(N-1)-DBLE(1.+X)*DBLE(B(N)) C SOLVE A(DELTAX)=R CALL BPFS(N,ML,G,IG,R,N,1) CALL BPBS(N,ML,G,IG,R,N,1) C DETERMINE NORM OF CORRECTION AND ADD IN CORRECTION RNORM=0.0 DO 50 I=1,N B(I)=B(I)+R(I) RNORM=RNORM+ABS(R(I)) 50 CONTINUE IF(RNORM.LT.R1MACH(4)*BNORM) GO TO 70 60 CONTINUE WRITE(IWRITE,61) 61 FORMAT(18H REFINEMENT FAILED) C COMPUTE NEW ERROR 70 ERR=0.0 DO 80 I=1,N ERR=AMAX1(ERR,ABS(B(I)-1.0)) 80 CONTINUE WRITE(IWRITE,81)IT,ERR 81 FORMAT(24H ERROR AFTER REFINEMENT ,I4,3H IS,E14.7) X=X/100.0 90 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/lpsm.f000066400000000000000000000025421420247104600162200ustar00rootroot00000000000000C$TEST LPSM C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LPSM C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BPML C C*********************************************************************** INTEGER IG, N, MU, I, IWRITE, I1MACH REAL G(3,20), X(20), B(20) REAL UNI, ERR, COND, SASUM, ABS IG=3 N=10 MU=3 C C CONSTRUCT MATRIX A AND PACK IT INTO G C DO 10 I=1,N G(1,I)=4.0 G(2,I)=-1.0 G(3,I)=-1.0 10 CONTINUE C C CONSTRUCT A RANDOM VECTOR C DO 20 I=1,N X(I)=UNI(0) 20 CONTINUE C C CONSTRUCT B=AX C CALL BPML(N,MU,G,IG,X,B) C C SOLVE THE SYSTEM AX=B C CALL BPSS(N,MU,G,IG,B,N,1,COND) C C PRINT OUT THE TRUE SOLUTION AND THE COMPUTED SOLUTION C IWRITE=I1MACH(2) WRITE(IWRITE,21) 21 FORMAT(34H TRUE SOLUTION COMPUTED SOLUTION) WRITE(IWRITE,22)(X(I),B(I),I=1,N) 22 FORMAT(1H ,2E16.8) ERR=0.0 DO 30 I=1,N ERR=ERR+ABS(B(I)-X(I)) 30 CONTINUE ERR=ERR/SASUM(N,X,1) WRITE(IWRITE,31)ERR 31 FORMAT(19H RELATIVE ERROR IS ,1PE15.7) WRITE(IWRITE,32)COND 32 FORMAT(20H CONDITION NUMBER IS,1PE15.7) STOP END PyBDSF-1.10.1/src/port3/ex/lrpa.f000066400000000000000000000022271420247104600162030ustar00rootroot00000000000000C$TEST LRPA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LRPA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM LINPR C C*********************************************************************** REAL X(4),B(3),C(4),A(3,4),SIMP(8) INTEGER ISIMP(8) N=4 IA=3 M=3 IE=1 C C SET UP GENERAL CONSTRAINTS C DO 10 J=1,N A(1,J)=FLOAT(J) A(2,J)=0.0 A(3,J)=0.0 10 CONTINUE A(2,1)=1.0 A(2,2)=1.0 A(3,2)=-1.0 A(3,4)=-1.0 B(1)=5 B(2)=1.0 B(3)=-5.0 C C SET UP SIMPLE CONSTRAINTS C IS=8 DO 20 I=1,N SIMP(I)=FLOAT(-I) ISIMP(I)=I SIMP(I+N)=10.0 ISIMP(I+N)=-I 20 CONTINUE C C SET UP COST VECTOR AND INITIAL GUESS C DO 30 I=1,N C(I)=FLOAT(I+1) X(I)=1.0 30 CONTINUE C C CALL LINEAR PROGRAMMING PACKAGE C CALL LINPR(A,M,N,IA,B,C,X,15,CTX,IS,SIMP,ISIMP,IE) WRITE(6,21)(X(I),I=1,N) 21 FORMAT(11H SOLUTION: ,4E15.6) WRITE(6,22)CTX 22 FORMAT(17H FUNCTION VALUE: ,E15.5) STOP END PyBDSF-1.10.1/src/port3/ex/lrpb.f000066400000000000000000000050531420247104600162040ustar00rootroot00000000000000C$TEST LRPB C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LRPB C*********************************************************************** C C FIRST EXAMPLE OF USE OF THE PORT PROGRAM LINPA C C*********************************************************************** REAL X(4),B(3),C(4),A(3,4),SIMP(8) EXTERNAL LPMAN, PRINT INTEGER ISIMP(8),IPTG(3) REAL U(4) N=4 IA=3 M=3 IE=1 C C SET UP GENERAL CONSTRAINTS C DO 10 J=1,N A(1,J)=FLOAT(J) A(2,J)=0.0 A(3,J)=0.0 10 CONTINUE A(2,1)=1.0 A(2,2)=1.0 A(3,2)=-1.0 A(3,4)=-1.0 B(1)=5 B(2)=1.0 B(3)=-5.0 C C SET UP SIMPLE CONSTRAINTS C IS=8 DO 20 I=1,N SIMP(I)=FLOAT(-I) ISIMP(I)=I SIMP(I+N)=10.0 ISIMP(I+N)=-I 20 CONTINUE C C SET UP COST VECTOR AND INITIAL GUESS C DO 30 I=1,N C(I)=FLOAT(I+1) X(I)=1.0 30 CONTINUE C C CALL LINEAR PROGRAMMING PACKAGE C CALL LINPA(A,M,N,LPMAN,IA,B,C,X,15,CTX,IS,SIMP,ISIMP,IE, 1PRINT,IAG,IAS,IPTG,U) IWRITE=I1MACH(2) WRITE(IWRITE,21)(X(I),I=1,N) 21 FORMAT(11H SOLUTION: ,4E15.6) WRITE(IWRITE,22)CTX 22 FORMAT(17H FUNCTION VALUE: ,E15.5) STOP END SUBROUTINE PRINT(A,M,N,AMAN,IA,B,C,X,CTX,IS,SIMP,ISIMP,IE, 1 ITER,IPTG,IAG,IAS,U,IEND) C C THIS IS A PRINT ROUTINE C REAL CTX,A(1),X(N),B(1) LOGICAL IEND EXTERNAL AMAN INTEGER IA(1),IPTG(N),ISIMP(1),S REAL SIMP(1),C(1),U(1) IEND = .FALSE. IWRITE=I1MACH(2) TOL = -R1MACH(4)*(5.0+4.0*SASUM(N,X,1))*10.0 IAGPE=IAG+IE WRITE(IWRITE,1)ITER,CTX,IAGPE,IAS 1 FORMAT(/14H AT ITERATION ,I5,6H CTX= ,E15.5, 1 /18H NO.OF ACT. GEN.= ,I5,15H NO.OF ACT.SIM=,I5) WRITE(IWRITE,2)(X(I),I=1,N) 2 FORMAT(3H X ,5E15.5) DO 10 I=1,M CALL AMAN(.TRUE.,A,IA,N,I,X,TOUT) TOUT=TOUT-B(I) IF (TOUT .LT. TOL)IEND=.TRUE. WRITE(IWRITE,9)I,TOUT 9 FORMAT(15H AT CONSTRAINT ,I5,11H RESIDUAL= ,E15.5) 10 CONTINUE IF (IAGPE .EQ. 0)GO TO 12 WRITE(IWRITE,11)(IPTG(I),I=1,IAGPE) 11 FORMAT(29H ACTIVE GENERAL CONSTRAINTS ,10I4) 12 IF (IAS .LT. 1)RETURN DO 15 I=1,IAS IP=IABS(ISIMP(I)) IF (ISIMP(I) .GT. 0)WRITE(IWRITE,13)IP 13 FORMAT(18H LOWER BOUND ON X(,I2,11H) IS ACTIVE) IF (ISIMP(I) .LT. 0)WRITE(IWRITE,14)IP 14 FORMAT(18H UPPER BOUND ON X(,I2,11H) IS ACTIVE) 15 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/lrpe.f000066400000000000000000000025111420247104600162030ustar00rootroot00000000000000C$TEST LRPE C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LRPE C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM FEAS C C*********************************************************************** REAL X(4),B(5),A(5,4),SIMP(8) INTEGER ISIMP(8) DATA B(1)/5.0/,B(2)/9.0/,B(3)/9.0/,B(4)/1.0/,B(5)/-5.0/ N=4 IA=5 M=5 IE=2 IWRITE=I1MACH(2) C C SET UP GENERAL CONSTRAINTS C DO 10 J=1,N A(1,J)=FLOAT(J) A(2,J)=FLOAT(J+1) A(3,J)=FLOAT(J*J) A(4,J)=0.0 A(5,J)=0.0 10 CONTINUE A(4,1)=1.0 A(4,2)=1.0 A(5,2)=-1.0 A(5,4)=-1.0 C C SET UP SIMPLE CONSTRAINTS C IS=8 DO 20 I=1,N SIMP(I)=FLOAT(-I) ISIMP(I)=I SIMP(I+N)=FLOAT(I+2) ISIMP(I+N)=-I 20 CONTINUE C C SET UP INITIAL GUESS C DO 30 I=1,N X(I)=1.0 30 CONTINUE C C CALL FEASIBLE POINT ALGORITHM C CALL FEAS(A,M,N,IA,B,X,15,IS,SIMP,ISIMP,IE) WRITE(IWRITE,31)(X(I),I=1,N) 31 FORMAT(11H SOLUTION: ,4E15.6) C C CHECK ANSWER C DO 40 I=1,M S = SDOT(N, A(I,1), IA, X, 1) -B(I) WRITE(IWRITE,41)I, S 40 CONTINUE 41 FORMAT(28H THE RESIDUAL AT CONSTRAINT ,I4,4H IS ,E15.5) STOP END PyBDSF-1.10.1/src/port3/ex/lrpf.f000066400000000000000000000050671420247104600162150ustar00rootroot00000000000000C$TEST LRPF C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LRPF C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM FEASA C C*********************************************************************** REAL X(4),B(5),A(5,4),SIMP(8) EXTERNAL LPMAN, FPRNT INTEGER ISIMP(8), IPTG(10) DATA B(1)/5.0/,B(2)/9.0/,B(3)/9.0/,B(4)/1.0/,B(5)/-5.0/ N=4 IA=5 M=5 IE=2 IWRITE=I1MACH(2) C C SET UP GENERAL CONSTRAINTS C DO 10 J=1,N A(1,J)=FLOAT(J) A(2,J)=FLOAT(J+1) A(3,J)=FLOAT(J*J) A(4,J)=0.0 A(5,J)=0.0 10 CONTINUE A(4,1)=1.0 A(4,2)=1.0 A(5,2)=-1.0 A(5,4)=-1.0 C C SET UP SIMPLE CONSTRAINTS C IS=8 DO 20 I=1,N SIMP(I)=FLOAT(-I) ISIMP(I)=I SIMP(I+N)=FLOAT(I+2) ISIMP(I+N)=-I 20 CONTINUE C C SET UP INITIAL GUESS C DO 30 I=1,N X(I)=1.0 30 CONTINUE C C CALL FEASIBLE POINT ALGORITHM C CALL FEASA(A,M,N,LPMAN,IA,B,X,15,IS,SIMP,ISIMP,IE, 1 FPRNT,IAG,IAS,IPTG) WRITE(IWRITE,31)(X(I),I=1,N) 31 FORMAT(11H SOLUTION: ,4E15.6) C C CHECK ANSWER C DO 40 I=1,M S = SDOT(N, A(I,1), IA, X, 1) -B(I) WRITE(IWRITE,41)I, S 40 CONTINUE 41 FORMAT(28H THE RESIDUAL AT CONSTRAINT ,I4,4H IS ,E15.5) STOP END SUBROUTINE FPRNT(A,M,N,AMAN,IA,B,C,X,CTX,IS,SIMP,ISIMP,IE, 1 ITER,IPTG,IAG,IAS,U,IEND,IPHAS) C C THIS IS A PRINT ROUTINE C REAL CTX,A(1),X(N),B(1) LOGICAL IEND EXTERNAL AMAN INTEGER IA(1),IPTG(N),ISIMP(1),S REAL SIMP(1),C(1),U(1) IEND = .FALSE. IWRITE=I1MACH(2) IAGPE=IAG+IE WRITE(IWRITE,1)ITER,IAGPE,IAS 1 FORMAT(/14H AT ITERATION ,I5, 1 /18H NO.OF ACT. GEN.= ,I5,15H NO.OF ACT.SIM= I5) WRITE(IWRITE,2)(X(I),I=1,N) 2 FORMAT(3H X ,5E15.5) DO 10 I=1,M CALL AMAN(.TRUE.,A,IA,N,I,X,TOUT) TOUT=TOUT-B(I) WRITE(IWRITE,9)I,TOUT 9 FORMAT(15H AT CONSTRAINT ,I5,11H RESIDUAL= ,E15.5) 10 CONTINUE IF (IAGPE.EQ.0)GO TO 12 WRITE(IWRITE,11)(IPTG(I),I=1,IAGPE) 11 FORMAT(29H ACTIVE GENERAL CONSTRAINTS ,10I4) 12 IF (IAS.LT.1)RETURN DO 15 I=1,IAS IP=IABS(ISIMP(I)) IF (ISIMP(I).GT.0)WRITE(IWRITE,13)IP 13 FORMAT(18H LOWER BOUND ON X(,I2,11H) IS ACTIVE) IF (ISIMP(I).LT.0)WRITE(IWRITE,14)IP 14 FORMAT(18H UPPER BOUND ON X(,I2,11H) IS ACTIVE) 15 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/lrpg.f000066400000000000000000000034741420247104600162160ustar00rootroot00000000000000C$TEST LRPG C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LRPG C*********************************************************************** C C SECOND EXAMPLE OF USE OF THE PORT PROGRAM LINPA C C*********************************************************************** REAL X(30), C(30), B(29), SIMP(31), U(30) INTEGER ISIMP(31), IPTG(30) EXTERNAL LPRNT,AMAN COMMON /CSTAK/DSTAK DOUBLE PRECISION DSTAK(2000) C C GET WORK SPACE FROM THE STACK C CALL ISTKIN(2000,4) N=30 M=29 IE=0 IS=31 C C SET UP RIGHT HAND SIDE C DO 10 I =1,M B(I) = FLOAT(I)/10.0 10 CONTINUE C C SET UP INITIAL GUESS, OBJECTIVE FUNCTION AND SIMPLE CONSTRAINTS C SIGN=-1.0 DO 20 I=1,N X(I)=3.0*FLOAT(I) C(I)=SIGN*FLOAT(I) SIGN=-SIGN ISIMP(I)=I SIMP(I)=FLOAT(I) 20 CONTINUE ISIMP(N+1)=-N SIMP(N+1)=3.0*FLOAT(N) C C SOLVE THE PROBLEM AND PRINT OUT THE RESULTS C CALL LINPA(A,M,N,AMAN,IA,B,C,X,100,CTX,IS,SIMP,ISIMP,IE, 1 LPRNT,IAG,IAS,IPTG,U) IWRITE=I1MACH(2) WRITE(IWRITE,21)(X(I),I=1,N) 21 FORMAT(10H SOLUTION ,5E15.5) C IF(IAG .GT. 1)WRITE(IWRITE,22)(IPTG(I),I=1,IAG) 22 FORMAT( 28H ACTIVE GENERAL CONSTRAINTS ,15I3) C IF (IAS .EQ. 0)STOP DO 30 I=1,IAS IP=IABS(ISIMP(I)) WRITE(IWRITE,23)IP 23 FORMAT(12H BOUND ON X(,I2,11H) IS ACTIVE) 30 CONTINUE STOP END SUBROUTINE AMAN(L,A,IA,N,I,TVEC,T) LOGICAL L REAL TVEC(N) IF (L) GOTO 20 C C THE ITH ROW IS REQUESTED C DO 10 J=1,N TVEC(J)=0.0 10 CONTINUE TVEC(I+1)=1.0 TVEC(I)=-1.0 RETURN C C THIS IS INNERPRODUCT REQUEST C 20 T=TVEC(I+1)-TVEC(I) RETURN END PyBDSF-1.10.1/src/port3/ex/lsfa.f000066400000000000000000000015131420247104600161670ustar00rootroot00000000000000C$TEST LSFA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LSFA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM L2SFF C C*********************************************************************** EXTERNAL F INTEGER K,IWRITE,I1MACH,NT REAL EESFF, T(100), A(100), ERROR C C MAKE THE MESH C K = 4 CALL UMB (0.0E0,3.14E0,21,K,T,NT) C C DO THE FITTING C CALL L2SFF (F, K, T, NT, A) C C GET THE ERROR C ERROR = EESFF (K, T, NT, A, F) C IWRITE = I1MACH(2) WRITE (IWRITE, 1000) ERROR 1000 FORMAT (9H ERROR = ,E10.2) C STOP C END SUBROUTINE F(X, NX, FX, WX) C INTEGER I,NX REAL X(NX), FX(NX), WX(NX) C DO 1000 I = 1,NX FX(I) = SIN(X(I)) 1000 CONTINUE C RETURN C END PyBDSF-1.10.1/src/port3/ex/lyma.f000066400000000000000000000025001420247104600162010ustar00rootroot00000000000000C$TEST LYMA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LYMA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SYSS C C*********************************************************************** INTEGER N, L, I, IWRITE, I1MACH REAL C(5000), B(100) REAL SUM, FLOAT, ABS, ERR, COND DO 40 N=10,90,40 C C CREATE THE MATRIX A(I,J)=ABS(I-J), PACK IT INTO C THE VECTOR C AND FORM THE RIGHT-HAND SIDE SO THE C SOLUTION HAS ALL ONES. C L=1 SUM=(N*(N-1))/2 DO 20 I=1,N DO 10 J=I,N C(L)=J-I L=L+1 10 CONTINUE B(I)=SUM SUM=SUM+FLOAT(I-(N-I)) 20 CONTINUE C C SOLVE THE SYSTEM AND GET THE CONDITION NUMBER OF THE MATRIX CALL SYSS(N,C,B,100,1,COND) C C COMPUTE THE ERROR IN THE SOLUTION ERR=0.0 DO 30 I=1,N 30 ERR=ERR+ABS(B(I)-1.0) ERR=ERR/FLOAT(N) IWRITE=I1MACH(2) WRITE(IWRITE,31)N 31 FORMAT(/8H FOR N= ,I5) WRITE(IWRITE,32)COND 32 FORMAT(23H CONDITION ESTIMATE IS 1PE15.7) WRITE(IWRITE,33)ERR 33 FORMAT(30H RELATIVE ERROR IN SOLUTION IS,1PE15.7) 40 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/lymb.f000066400000000000000000000056731420247104600162200ustar00rootroot00000000000000C$TEST LYMB C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LYMB C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SYCE C C*********************************************************************** INTEGER N, JEND, IREAD, I1MACH, I, JBEGIN, J, IWRITE INTEGER INTER(6), IEND, ITER, L, IFIX REAL C(20), SAVEC(36), B(6), SAVEB(6), R(6) REAL COND, R1MACH, BNORM, RNORM, ABS, ALOG10 DOUBLE PRECISION D(6) N=5 C C READ IN A SYMMETRIC MATRIX WHOSE UPPER TRIANGULAR C PORTION IS STORED ONE ROW PER CARD. MAKE A C COPY OF THE MATRIX SO THAT IT CAN BE USED LATER C JEND=0 IREAD=I1MACH(1) DO 20 I=1,N JBEGIN=JEND+1 JEND=JBEGIN+N - I READ(IREAD,1)(C(J),J=JBEGIN,JEND) 1 FORMAT(5F8.0) DO 10 J=JBEGIN,JEND SAVEC(J)=C(J) 10 CONTINUE 20 CONTINUE C READ IN RIGHT HAND SIDE AND SAVE IT DO 30 I=1,N READ(IREAD,1)B(I) SAVEB(I)=B(I) 30 CONTINUE C C SOLVE AX = B USING SEPARATE CALLS TO SYCE AND SYFBS C CALL SYCE(N,C,INTER,COND) CALL SYFBS(N,C,B,6,1,INTER) IWRITE=I1MACH(2) IF(COND.GE.1.0/R1MACH(4))WRITE(IWRITE,31) 31 FORMAT(49H CONDITION NUMBER HIGH,ACCURATE SOLUTION UNLIKELY) WRITE(IWRITE,32) COND 32 FORMAT(21H CONDITION NUMBER IS ,1PE16.8) C COMPUTE NORM OF SOLUTION BNORM=0.0 WRITE(IWRITE,33) 33 FORMAT(43H THE FIRST SOLUTION X, FROM SYCE AND SYFBS=) DO 40 I=1,N BNORM=BNORM+ABS(B(I)) 40 WRITE(IWRITE,41)B(I) 41 FORMAT(1H ,F20.7) C C IEND IS THE UPPER BOUND ON THE NUMBER OF BITS PER WORD C IEND=I1MACH(11)*IFIX(R1MACH(5)/ALOG10(2.0)+1.0) C C REFINE SOLUTION C DO 90 ITER=1,IEND C C COMPUTE RESIDUAL R = B - AX, IN DOUBLE PRECISION C DO 50 I=1,N 50 D(I)=DBLE(SAVEB(I)) L=1 DO 70 I=1,N DO 60 J=I,N IF (I.NE.J) D(J)=D(J) - DBLE(SAVEC(L))*B(I) D(I) = D(I) - DBLE(SAVEC(L))*B(J) 60 L=L+1 R(I) = D(I) 70 CONTINUE C C SOLVE A(DELTAX) =R C CALL SYFBS(N,C,R,8,1,INTER) C C DETERMINE NORM OF CORRECTION AND ADD IN CORRECTION C WRITE(IWRITE,71)ITER 71 FORMAT(30H THE SOLUTION AFTER ITERATION ,I5) RNORM=0.0 DO 80 I=1,N B(I) = B(I) + R(I) RNORM=RNORM+ABS(R(I)) WRITE(IWRITE,41)B(I) 80 CONTINUE IF(RNORM.LT.R1MACH(4)*BNORM) STOP 90 CONTINUE WRITE(IWRITE,91) 91 FORMAT(29H ITERATIVE IMPROVEMENT FAILED) STOP END C C DATA FOR THE EXAMPLE IN THE PORT SHEET... (REMOVE THE C C IN COLUMN 1 BEFORE FEEDING THIS DATA TO THE PROGRAM ABOVE.) C$DATA C -4. 0. -16. -32. 28. C 1. 5. 10. -6. C -37. -66. 64. C -85. 53. C -15. C 448. C -111. C 1029. C 1207. C -719. PyBDSF-1.10.1/src/port3/ex/lymk.f000066400000000000000000000024521420247104600162210ustar00rootroot00000000000000C$TEST LYMK C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LYMK C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SYNM C C*********************************************************************** INTEGER I, J, L, N, I1MACH, IWRITE REAL C(1300), CC(1300), B(50), X(50) REAL RELERR, RELRES, XNORM, RNORM, ERR, R(50) REAL SYNM, SAMAX L=0 C C GENERATE MATRIX C N=50 DO 20 I=1,N DO 10 J=I,N L=L+1 C(L)=J-I CC(L)=C(L) 10 CONTINUE B(I)=I 20 CONTINUE C C GENERATE RIGHT HAND SIDE C CALL SYML(N,C,B,X) C C MAKE COPY OF RIGHT HAND SIDE C CALL MOVEFR(N,X,B) C C SOLVE THE SYSTEM C CALL SYLE(N,C,B,N,1) C C COMPUTE THE RELATIVE ERROR AND THE RELATIVE RESIDUAL C CALL SYML(N,CC,B,R) ERR=0.0 DO 30 I=1,N ERR=AMAX1(ERR,ABS(B(I)-FLOAT(I))) R(I)=R(I)-X(I) 30 CONTINUE XNORM=SAMAX(N,X,1) RNORM=SAMAX(N,R,1) RELERR=ERR/XNORM RELRES=RNORM/(XNORM*SYNM(N,CC)) IWRITE=I1MACH(2) WRITE(IWRITE,31)RELERR,RELRES 31 FORMAT(16H RELATIVE ERROR=,E15.5,19H RELATIVE RESIDUAL=, 1 E15.5) STOP END PyBDSF-1.10.1/src/port3/ex/lymp.f000066400000000000000000000023321420247104600162230ustar00rootroot00000000000000C$TEST LYMP C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE LYMP C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SYML C C*********************************************************************** INTEGER N, L, I, J, IWRITE, I1MACH REAL C(55), X(10), B(10) REAL UNI, ERR, SASUM, ABS N=10 C C CONSTRUCT THE MATRIX A(I,J)=ABS(J-I) AND PACK INTO C C L=0 DO 20 I=1,N DO 10 J=I,N L=L+1 C(L)=J-I 10 CONTINUE 20 CONTINUE C C CONSTRUCT A RANDOM VECTOR X C DO 30 I=1,N X(I)=UNI(0) 30 CONTINUE C C FIND THE VECTOR B=AX C CALL SYML(N,C,X,B) C C SOLVE THE SYSTEM AX=B C CALL SYLE(N,C,B,N,1) C C PRINT THE COMPUTED AND TRUE SOLUTION C IWRITE=I1MACH(2) WRITE(IWRITE,31) 31 FORMAT(34H TRUE SOLUTION COMPUTED SOLUTION) WRITE(IWRITE,32)(X(I),B(I),I=1,N) 32 FORMAT(1H ,2E17.8) C C COMPUTE THE RELATIVE ERROR C ERR=0.0 DO 40 I=1,N ERR=ERR+ABS(B(I)-X(I)) 40 CONTINUE ERR=ERR/SASUM(N,X,1) WRITE(IWRITE,41)ERR 41 FORMAT(19H RELATIVE ERROR IS ,1PE15.7) STOP END PyBDSF-1.10.1/src/port3/ex/mfte.f000066400000000000000000000050511420247104600161760ustar00rootroot00000000000000C$TEST MFTE C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE MFTE C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM MFTCC C C*********************************************************************** REAL A(25,25,25),B(25,25,25),T(50) REAL AA(25,25,25),BB(25,25,25) REAL RSTAK(1262) REAL SUM,FN1 INTEGER IFX(25) INTEGER I,J,K,L,IFB DOUBLE PRECISION DSTAK(631) COMMON /CSTAK/DSTAK EQUIVALENCE (RSTAK(1),DSTAK(1)) C C N IS THE DIMENSION OF THE COMPLEX CUBE C N = 25 C C GET ONE PLANE OF WORKSPACE C NWK = 2*N*N + 12 CALL ISTKIN(NWK,3) C C SET REAL AND IMAGINARY PARTS TO YOUR FAVORITE VALUES HERE C AA AND BB ARE COPIES TO COMPARE WITH UNNORMALIZED OUTPUT C THIS EXAMPLE USES RANDOM DATA, SEE THE UTILITY CHAPTER OF PORT 3. C DO 1 K = 1,N DO 1 J = 1,N DO 1 I = 1,N A(I,J,K) = UNI(0) AA(I,J,K) = A(I,J,K) B(I,J,K) = UNI(0) BB(I,J,K) = B(I,J,K) 1 CONTINUE C C INITIALIZE TRIGONOMETRIC TABLES AND FACTOR N C CALL MFTCI(N,IFX,T) C C OUTER LOOP COMPUTES A FORWARD (SIGN=1.0), THEN BACKWARD (SIGN=-1.0) C TRANSFORM. FIRST X, THEN Y, THEN Z. C SIGN = 1.0E0 N2 = N*N NT = N C C DO 2 IFB = 1,2 C X-DIRECTION TRANSFORMS FOR EACH X-Y PLANE DO 3 L = 1,N CALL MFTCC(NT,NT,A(1,1,L),B(1,1,L),1,NT, * A(1,1,L),B(1,1,L),1,NT,IFX,T,SIGN) 3 CONTINUE C Y-DIRECTION TRANSFORMS FOR EACH X-Y PLANE DO 4 L = 1,N CALL MFTCC(NT,NT,A(1,1,L),B(1,1,L),NT,1, * A(1,1,L),B(1,1,L),NT,1,IFX,T,SIGN) 4 CONTINUE C Z-DIRECTION TRANSFORMS FOR EACH Y-Z PLANE DO 5 L = 1,N CALL MFTCC(NT,NT,A(L,1,1),B(L,1,1),NT,N2, * A(L,1,1),B(L,1,1),NT,N2,IFX,T,SIGN) 5 CONTINUE C SIGN = -1.0E0 2 CONTINUE C C C COMPARE INPUT TO UNNORMALIZED OUTPUT FROM FORWARD/BACKWARD FFT C FN1 = 1.0E0/FLOAT(N*N*N) DO 6 K = 1,N DO 6 J = 1,N DO 6 I = 1,N AA(I,J,K) = AA(I,J,K) - FN1*A(I,J,K) BB(I,J,K) = BB(I,J,K) - FN1*B(I,J,K) 6 CONTINUE C C ERR IS THE RMS ERROR, SDOT COMPUTES THE SUM OF SQUARES, SEE THE C LINEAR ALGEBRA CHAPTER OF PORT 3 C ERR = SDOT(N2,AA,1,AA,1) + SDOT(N2,BB,1,BB,1) ERR = SQRT(FN1*ERR) C C PRINT RESULTS C IWRITE = I1MACH(2) WRITE(IWRITE,1000)N,N,N,ERR 1000 FORMAT(1X,18H FOR LATTICE SIZE ,I3,2(2H X,I3),9H ERROR = ,E11.5) STOP END PyBDSF-1.10.1/src/port3/ex/mftf.f000066400000000000000000000037531420247104600162060ustar00rootroot00000000000000C$TEST MFTF C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE MFTF C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM MFTRC C C*********************************************************************** REAL A(200,100) REAL AA(200,100) REAL TX(200),TY(200) REAL RSTAK(20014) REAL FN2,RMSERR,SIGN,SUM INTEGER IFX(25),IFY(25) INTEGER I,J,N,N2,NP2,NP3,N2MK DOUBLE PRECISION DSTAK(10007) COMMON /CSTAK/DSTAK EQUIVALENCE (RSTAK(1),DSTAK(1)) C C CALL ISTKIN(20014,3) C N = 100 NP2 = 102 N2 = 200 C C SET INPUT VECTORS TO YOUR FAVORITE VALUES HERE, THIS EXAMPLE C USES RANDOM INITIAL VALUES. C DO 1 J = 1,N DO 2 I = 1,N A(I,J) = UNI(0) AA(I,J) = A(I,J) 2 CONTINUE 1 CONTINUE C SIGN = 1.0E0 CALL MFTRI(N,IFX,TX) CALL MFTCI(N,IFY,TY) C C X-DIMENSION C CALL MFTRC(N,N,A,1,N2,A(1,1),A(2,1),2,N2,IFX,TX,SIGN) C C FILL-IN FROM CONJUGATION OF TERMS C NP3 = N+3 N2MK = N-1 DO 3 I = NP3,N2,2 DO 4 J = 1,N A(I,J) = A(N2MK,J) A(I+1,J) = - A(N2MK+1,J) 4 CONTINUE N2MK = N2MK - 2 3 CONTINUE C C DO COMPLEX PART IN Y-DIRECTION C CALL MFTCC(N,N,A(1,1),A(2,1),N2,2,A(1,1),A(2,1),N2,2,IFY,TY,SIGN) C C NOW GO BACKWARDS, COMPLEX TO COMPLEX FIRST C SIGN = -1.0E0 CALL MFTCC(N,N,A(1,1),A(2,1),N2,2,A(1,1),A(2,1),N2,2,IFY,TY,SIGN) C C AND BACK TO REAL C CALL MFTCR(N,N,A(1,1),A(2,1),2,N2,A,1,N2,IFX,TX,SIGN) C C COMPARE TO INPUT C FN2 = 1./FLOAT(N*N) SUM = 0.0E0 DO 5 J = 1,N DO 6 I = 1,N SUM = SUM + (AA(I,J) - FN2*A(I,J))**2 6 CONTINUE 5 CONTINUE C C PRINT ROOT MEAN SQUARE ERROR C RMSERR = SQRT(SUM*FN2) IWRITE = I1MACH(2) WRITE(IWRITE,1000) N,N,RMSERR 1000 FORMAT(1X,5H FOR ,I3,1HX,I3,20H ARRAY, RMS ERROR = ,1PE12.3) STOP END PyBDSF-1.10.1/src/port3/ex/mftg.f000066400000000000000000000052351420247104600162040ustar00rootroot00000000000000C$TEST MFTG C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE MFTG C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM MFTCR C C*********************************************************************** REAL A(200,100) REAL AA(200,100) REAL TX(200),TY(200) REAL RSTAK(3212) REAL FN2,RMSERR,SIGN,SUM INTEGER IFX(25),IFY(25) INTEGER I,J,N,N2,NP2,NP3,N2MK,NNS0,NNS,NSEGS DOUBLE PRECISION DSTAK(1606) COMMON /CSTAK/DSTAK EQUIVALENCE (RSTAK(1),DSTAK(1)) C C CALL ISTKIN(3212,3) C N = 100 NP2 = 102 N2 = 200 C C THE SEGMENT SIZE IS ARBITRARILY CHOSEN TO BE 16 X N - I.E. USING C MFTCC, MFTRC, MFTCR TO COMPUTE UP TO 16 INDEPENDENT VECTORS AT A C TIME. C NSEGS = (N-1)/16 + 1 NNS0 = MOD(N-1,16) + 1 C C EXAMPLE USES RANDOM INPUT DATA C DO 1 J = 1,N DO 2 I = 1,N A(I,J) = UNI(0) AA(I,J) = A(I,J) 2 CONTINUE 1 CONTINUE C SIGN = 1.0E0 CALL MFTRI(N,IFX,TX) CALL MFTCI(N,IFY,TY) C C X-DIMENSION C NNS = NNS0 L = 1 DO 3 LL = 1,NSEGS CALL MFTRC(N,NNS,A(1,L),1,N2,A(1,L),A(2,L),2,N2,IFX,TX,SIGN) L = L + NNS NNS = 16 3 CONTINUE C C FILL-IN FROM CONJUGATION OF TERMS C NP3 = N+3 N2MK = N-1 DO 4 I = NP3,N2,2 DO 5 J = 1,N A(I,J) = A(N2MK,J) A(I+1,J) = - A(N2MK+1,J) 5 CONTINUE N2MK = N2MK - 2 4 CONTINUE C C DO COMPLEX PART IN Y-DIRECTION C NNS = NNS0 L = 1 DO 6 LL = 1,NSEGS CALL MFTCC(N,NNS,A(L,1),A(L+1,1),N2,2, * A(L,1),A(L+1,1),N2,2,IFY,TY,SIGN) L = L + 2*NNS NNS = 16 6 CONTINUE C C NOW GO BACKWARDS, COMPLEX TO COMPLEX FIRST C SIGN = -1.0E0 NNS = NNS0 L = 1 DO 7 LL = 1,NSEGS CALL MFTCC(N,NNS,A(L,1),A(L+1,1),N2,2, * A(L,1),A(L+1,1),N2,2,IFY,TY,SIGN) L = L + 2*NNS NNS = 16 7 CONTINUE C C AND BACK TO REAL C NNS = NNS0 L = 1 DO 8 LL = 1,NSEGS CALL MFTCR(N,NNS,A(1,L),A(2,L),2,N2,A(1,L),1,N2,IFX,TX,SIGN) L = L + NNS NNS = 16 8 CONTINUE C C COMPARE TO INPUT C FN2 = 1./FLOAT(N*N) SUM = 0.0E0 DO 9 J = 1,N DO 10 I = 1,N SUM = SUM + (AA(I,J) - FN2*A(I,J))**2 10 CONTINUE 9 CONTINUE C C PRINT ROOT MEAN SQUARE ERROR C RMSERR = SQRT(SUM*FN2) IWRITE = I1MACH(2) WRITE(IWRITE,1000) N,N,RMSERR 1000 FORMAT(1X,5H FOR ,I3,1HX,I3,20H ARRAY, RMS ERROR = ,1PE12.3) STOP END PyBDSF-1.10.1/src/port3/ex/mllr.f000066400000000000000000000017751420247104600162220ustar00rootroot00000000000000C$TEST MLLR C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE MLLR C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM MULLR C C*********************************************************************** INTEGER ITER, MAXITR, IWRITE REAL EPSF, EPSZ COMPLEX MULLR, TESTF, Z1, Z2, Z3, ZANS COMPLEX CEXP, CSIN EXTERNAL TESTF C C SET UP THE INITIAL GUESSES AND TOLERANCES C Z1 = CMPLX(2.0, 1.0) Z2 = CMPLX(5.0, 4.0) Z3 = CMPLX(3.0, 2.0) C EPSZ = .00001 EPSF = .000001 MAXITR = 50 C ZANS = MULLR(TESTF, Z1, Z2, Z3, EPSZ, EPSF, MAXITR, ITER) C C WRITE IWRITE THE ANSWER AND THE NUMBER OF ITERATIONS C IWRITE = I1MACH(2) WRITE (IWRITE, 999) ZANS, ITER 999 FORMAT(1H ,12HTHE ZERO IS ,2F11.8, 3X, 1 I3,21H ITERATIONS WERE USED) C C STOP END COMPLEX FUNCTION TESTF(Z) C COMPLEX Z C TESTF = Z*CEXP(Z) - CSIN(Z) C RETURN END PyBDSF-1.10.1/src/port3/ex/mnna.f000066400000000000000000000014401420247104600161720ustar00rootroot00000000000000C$TEST MNNA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE MNNA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM FMIN C C*********************************************************************** EXTERNAL F INTEGER IWRITE,I1MACH REAL A,B,T,ANS,X IWRITE = I1MACH(2) A = .8 B = 1.2 T = .0000001 ANS = FMIN(F,X,A,B,T) WRITE (IWRITE,9999) A,B,T 9999 FORMAT (5H A = ,1PE14.8,5H B = ,1PE14.8,5H T = ,1PE9.3) WRITE (IWRITE,9998) ANS 9998 FORMAT(16H THE MINIMUM IS ,1PE16.8) WRITE (IWRITE,9997) X 9997 FORMAT(14H IT OCCURS AT ,1PE18.8) STOP END FUNCTION F(X) F = -X * EXP(-X) RETURN END PyBDSF-1.10.1/src/port3/ex/nlsa.f000066400000000000000000000064561420247104600162120ustar00rootroot00000000000000C$TEST NLSA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NLSA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAMS MNF, MNG AND MNH C C*********************************************************************** C *** MNF, MNG, MNH EXAMPLE PROGRAM C C *** MINIMIZE F(X) = 0.1*S(X)**4 + SUM(I = 1(1)3) (I * (X(I) - 10)**2), C *** WHERE S(X) = SUM(I = 1(1)3) X(I), C *** STARTING FROM X = (2, 30, 9), C *** WITH SCALE VECTOR D = (1, 2, 3). C INTEGER LIV, LV INTEGER IV(59), P, UI(1) REAL D(3), UR(1), V(123), X(3) EXTERNAL DUMMY, QF, QGH C DATA LIV/59/, LV/123/, P/3/ C DATA X(1)/2.E+0/, X(2)/3.E+1/, X(3)/9.E+0/ DATA D(1)/1.E+0/, D(2)/2.E+0/, D(3)/3.E+0/ C C *** BODY *** C C *** SET IV(1) TO 0 TO USE ALL DEFAULT INPUTS... C IV(1) = 0 C C ... HINDSIGHT (THE PRINTED OUTPUT FROM THIS EXAMPLE) SUGGESTS THAT C ... THE ALGORITHM MIGHT TAKE FEWER FUNCTION EVALUATIONS ON THIS C ... PROBLEM IF THE INITIAL STEP BOUND, V(LMAX0), WERE INCREASED C ... FROM ITS DEFAULT VALUE OF 1.0 TO 10.0 . WE WOULD DO THIS BY C ... REPLACING THE ABOVE ASSIGNMENT OF 0 TO IV(1) WITH THE TWO LINES... C C CALL IVSET(2, IV, LIV, LV, V) C V(35) = 10.0 C C C *** SOLVE THE PROBLEM -- MNH WILL PRINT THE SOLUTION FOR US... C CALL MNH(P, D, X, QF, QGH, IV, LIV, LV, V, UI, UR, DUMMY) C C *** FOR MNF AND MNG, THE CORRESPONDING CALLS WOULD BE... C C CALL MNF(P, D, X, QF, IV, LIV, LV, V, UI, UR, DUMMY) C CALL MNG(P, D, X, QF, QG, IV, LIV, LV, V, UI, UR, DUMMY) C C *** QG WOULD BE A SUBROUTINE, DECLARED EXTERNAL IN PLACE OF QGH ABOVE, C *** THAT WOULD BE THE SAME AS QGH (SEE BELOW) EXCEPT FOR HAVING C *** THE PARAMETER H OMITTED. C C *** NOTE -- ON MOST SYSTEMS, WE COULD SIMPLY PASS QF OR QGH C *** AS THE LAST PARAMETER TO MNH, SINCE QF AND QGH IGNORE C *** THEIR UF PARAMETER. BUT THERE EXIST SYSTEMS (E.G. UNIVAC) C *** THAT WOULD GIVE A RUN-TIME ERROR IF WE DID THIS. HENCE WE C *** PASS THE IMMEDIATELY FOLLOWING DUMMY SUBROUTINE AS UF. C 999 STOP END SUBROUTINE DUMMY RETURN END SUBROUTINE QF(P, X, NF, F, UI, UR, UF) C C *** THIS ROUTINE COMPUTES THE OBJECTIVE FUNCTION, F(X) C INTEGER P, NF, UI(1) REAL X(P), F, UR(1) EXTERNAL UF C INTEGER I REAL PT1, TEN, ZERO C DATA PT1 /0.1E+0/, TEN/1.E+1/, ZERO/0.E+0/ C C F = ZERO DO 10 I = 1, P 10 F = F + X(I) F = PT1 * F**4 DO 20 I = 1, P 20 F = F + I*(X(I) - TEN)**2 999 RETURN END SUBROUTINE QGH(P, X, NF, G, H, UI, UR, UF) C C *** THIS ROUTINE COMPUTES THE GRADIENT, G(X), AND THE LOWER TRIANGLE C *** OF THE HESSIAN, H(X). C INTEGER P, NF, UI(1) REAL X(P), G(P), H(1), UR(1) EXTERNAL UF C INTEGER I, K REAL S, S34 REAL ONEPT2, PT4, TEN, TWO, ZERO C DATA ONEPT2/1.2E+0/,PT4/0.4E+0/,TEN/1.E+1/,TWO/2.E+0/,ZERO/0.E+0/ C C S = ZERO DO 10 I = 1, P 10 S = S + X(I) C C *** INITIALIZE H TO 1.2*S**2 *** C CALL SETR(P*(P+1)/2, ONEPT2*S**2, H) C C *** NOW COMPUTE G AND ADD (2, 4, ..., 2*P) TO THE DIAGONAL OF H C S34 = PT4 * S**3 K = 0 DO 20 I = 1, P G(I) = S34 + TWO * I * (X(I) - TEN) K = K + I H(K) = H(K) + TWO*I 20 CONTINUE 999 RETURN END PyBDSF-1.10.1/src/port3/ex/nlsb.f000066400000000000000000000066551420247104600162140ustar00rootroot00000000000000C$TEST NLSB C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NLSB C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAMS MNFB, MNGB, AND MNHB C C*********************************************************************** C *** MNFB, MNGB, MNHB EXAMPLE PROGRAM C C *** MINIMIZE F(X) = 0.1*S(X)**4 + SUM(I = 1(1)3) (I * (X(I) - 10)**2), C *** WHERE S(X) = SUM(I = 1(1)3) X(I) C *** SUBJECT TO C *** 1 .LE. X(1) .LE. 3, C *** -2 .LE. X(2) .LE. 10, C *** 1 .LE. X(3) .LE. 21, C *** STARTING FROM X = (2, 30, 9), C *** WITH SCALE VECTOR D = (1, 2, 3) C INTEGER LIV, LV INTEGER IV(68), P, UI(1) REAL B(2,3), D(3), UR(1), V(132), X(3) EXTERNAL DUMMY, QF, QGH C DATA LIV/68/, LV/132/, P/3/ C DATA B(1,1)/1.E+0/, B(2,1)/3.E+0/, 1 B(1,2)/-2.E+0/, B(2,2)/1.E+1/, 2 B(1,3)/1.E+0/, B(2,3)/2.1E+1/ C DATA X(1)/2.E+0/, X(2)/3.E+1/, X(3)/9.E+0/ DATA D(1)/1.E+0/, D(2)/2.E+0/, D(3)/3.E+0/ C C *** BODY *** C C *** SET IV(1) TO 0 TO USE ALL DEFAULT INPUTS... C IV(1) = 0 C C ... WE COULD HAVE MNHB INITIALIZE THE SCALE VECTOR D TO ALL ONES C ... BY SETTING V(DINIT) TO 1.0 . WE WOULD DO THIS BY REPLACING C ... THE ABOVE ASSIGNMENT OF 0 TO IV(1) WITH THE FOLLOWING TWO LINES... C C CALL IVSET(2, IV, LIV, LV, V) C V(38) = 1.0 C C C *** SOLVE THE PROBLEM -- MNHB WILL PRINT THE SOLUTION FOR US... C CALL MNHB(P, D, X, B, QF, QGH, IV, LIV, LV, V, UI, UR, DUMMY) C C *** FOR MNFB AND MNGB, THE CORRESPONDING CALLS WOULD BE... C C CALL MNFB(P, D, X, B, QF, IV, LIV, LV, V, UI, UR, DUMMY) C CALL MNGB(P, D, X, B, QF, QG, IV, LIV, LV, V, UI, UR, DUMMY) C C *** QG WOULD BE A SUBROUTINE, DECLARED EXTERNAL IN PLACE OF QGH ABOVE, C *** THAT WOULD BE THE SAME AS QGH (SEE BELOW) EXCEPT FOR HAVING C *** THE PARAMETER H OMITTED. C C *** NOTE -- ON MOST SYSTEMS, WE COULD SIMPLY PASS QF OR QGH C *** AS THE LAST PARAMETER TO MNHB, SINCE QF AND QGH IGNORE C *** THEIR UF PARAMETER. BUT THERE EXIST SYSTEMS (E.G. UNIVAC) C *** THAT WOULD GIVE A RUN-TIME ERROR IF WE DID THIS. HENCE WE C *** PASS THE IMMEDIATELY FOLLOWING DUMMY SUBROUTINE AS UF. C 999 STOP END SUBROUTINE DUMMY RETURN END SUBROUTINE QF(P, X, NF, F, UI, UR, UF) C C *** THIS ROUTINE COMPUTES THE OBJECTIVE FUNCTION, F(X) C INTEGER P, NF, UI(1) REAL X(P), F, UR(1) EXTERNAL UF C INTEGER I REAL PT1, TEN, ZERO C DATA PT1 /0.1E+0/, TEN/1.E+1/, ZERO/0.E+0/ C C F = ZERO DO 10 I = 1, P 10 F = F + X(I) F = PT1 * F**4 DO 20 I = 1, P 20 F = F + I*(X(I) - TEN)**2 999 RETURN END SUBROUTINE QGH(P, X, NF, G, H, UI, UR, UF) C C *** THIS ROUTINE COMPUTES THE GRADIENT, G(X), AND THE LOWER TRIANGLE C *** OF THE HESSIAN, H(X). C INTEGER P, NF, UI(1) REAL X(P), G(P), H(1), UR(1) EXTERNAL UF C INTEGER I, K REAL S, S34 REAL ONEPT2, PT4, TEN, TWO, ZERO C DATA ONEPT2/1.2E+0/,PT4/0.4E+0/,TEN/1.E+1/,TWO/2.E+0/,ZERO/0.E+0/ C C S = ZERO DO 10 I = 1, P 10 S = S + X(I) C C *** INITIALIZE H TO 1.2*S**2 *** C CALL SETR(P*(P+1)/2, ONEPT2*S**2, H) C C *** NOW COMPUTE G AND ADD (2, 4, ..., 2*P) TO THE DIAGONAL OF H C S34 = PT4 * S**3 K = 0 DO 20 I = 1, P G(I) = S34 + TWO * I * (X(I) - TEN) K = K + I H(K) = H(K) + TWO*I 20 CONTINUE 999 RETURN END PyBDSF-1.10.1/src/port3/ex/nlsj.f000066400000000000000000000074021420247104600162130ustar00rootroot00000000000000C$TEST NLSJ C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NLSJ C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAMS N2F AND N2G C C*********************************************************************** C *** N2F AND N2G, EXAMPLE PROGRAM *** C C *** FIT N = 33 DATA POINTS (T,Y) TO THE CURVE C *** X(1) + X(2)*EXP(T*X(4)) + X(3)*EXP(T*X(5)) C C *** THE FOLLOWING CODE IS FOR CALLING N2G. DIFFERENCES FOR C *** CALLING N2F ARE EXPLAINED IN COMMENTS. C INTEGER I, IV(87), LIV, LTY, LV, UI(1) REAL TY(50,2), V(471), X(5) EXTERNAL DUMMY, OSB1J, OSB1R DATA LIV/87/, LTY/50/, LV/471/ C C *** FOR N2F, OMIT OSB1J FROM THE EXTERNAL STATEMENT. C C C *** TO MAKE THIS EXAMPLE SELF-CONTAINED, WE USE A DATA STATEMENT C *** AND DO LOOP TO SUPPLY (T,Y) PAIRS TO THE ARRAY TY. C C *** Y VALUES... C DATA TY(1,2) /8.44E-1/, TY(2,2) /9.08E-1/, TY(3,2)/9.32E-1/, 1 TY(4,2) /9.36E-1/, TY(5,2) /9.25E-1/, TY(6,2)/9.08E-1/, 2 TY(7,2) /8.81E-1/, TY(8,2) /8.50E-1/, TY(9,2)/8.18E-1/, 3 TY(10,2)/7.84E-1/, TY(11,2)/7.51E-1/, TY(12,2)/7.18E-1/, 4 TY(13,2)/6.85E-1/, TY(14,2)/6.58E-1/, TY(15,2)/6.28E-1/, 5 TY(16,2)/6.03E-1/, TY(17,2)/5.80E-1/, TY(18,2)/5.58E-1/, 6 TY(19,2)/5.38E-1/, TY(20,2)/5.22E-1/, TY(21,2)/5.06E-1/, 7 TY(22,2)/4.90E-1/, TY(23,2)/4.78E-1/, TY(24,2)/4.67E-1/, 8 TY(25,2)/4.57E-1/, TY(26,2)/4.48E-1/, TY(27,2)/4.38E-1/, 9 TY(28,2)/4.31E-1/, TY(29,2)/4.24E-1/, TY(30,2)/4.20E-1/, A TY(31,2)/4.14E-1/, TY(32,2)/4.11E-1/, TY(33,2)/4.06E-1/ C C *** T VALUES... C DO 10 I = 1, 33 TY(I,1) = -10.E+0 * FLOAT(I-1) 10 CONTINUE C C *** SUPPLY LEAD DIMENSION OF TY IN UI(1)... C *** (MOST COMPILERS WOULD LET US SIMPLY PASS LTY FOR UI, C *** BUT SOME, E.G. WATFIV, WILL NOT.) C UI(1) = LTY C C *** SPECIFY ALL DEFAULT IV AND V INPUT COMPONENTS (N2G AND N2F C *** ONLY)... C IV(1) = 0 C C *** SUPPLY INITIAL GUESS... C X(1) = 0.5E+0 X(2) = 1.5E+0 X(3) = -1.E+0 X(4) = 1.E-2 X(5) = 2.E-2 C C *** SOLVE THE PROBLEM -- N2G WILL PRINT THE SOLUTION FOR US... C CALL N2G(33, 5, X, OSB1R, OSB1J, IV, LIV, LV, V, UI, TY, DUMMY) C C *** FOR N2F, THE CORRESPONDING CALLS WOULD BE... C C CALL N2F(33, 5, X, OSB1R, IV, LIV, LV, V, UI, TY, DUMMY) C C C *** NOTE -- ON MOST SYSTEMS, WE COULD SIMPLY PASS OSB1R (OR OSB1J) C *** AS THE UF PARAMETER, SINCE OSB1R AND OSB1J IGNORE THIS C *** PARAMETER. BUT THERE EXIST SYSTEMS (E.G. UNIVAC) THAT WOULD C *** GIVE A RUN-TIME ERROR IF WE DID THIS. HENCE WE PASS THE C *** IMMEDIATELY FOLLOWING DUMMY SUBROUTINE AS UF. C STOP END SUBROUTINE DUMMY RETURN END SUBROUTINE OSB1R(N, P, X, NF, R, LTY, TY, UF) C C *** THIS ROUTINE COMPUTES THE RESIDUAL VECTOR, R = R(X), C *** FOR TEST PROBLEM OSBORNE1. C INTEGER N, P, NF, LTY REAL X(P), R(N), TY(LTY,2) EXTERNAL UF C INTEGER I REAL TI, YI C DO 10 I = 1, N TI = TY(I,1) YI = TY(I,2) R(I) = YI - (X(1) + X(2)* EXP(X(4)*TI) + X(3)* EXP(X(5)*TI)) 10 CONTINUE RETURN END SUBROUTINE OSB1J(N, P, X, NF, J, LTY, TY, UF) C C *** THIS ROUTINE COMPUTES THE JACOBIAN MATRIX, J = J(X), C *** FOR TEST PROBLEM OSBORNE1. J(I,K) IS SET TO THE PARTIAL C *** DERIVATIVE OF COMPONENT I OF R WITH RESPECT TO X(K). C INTEGER N, P, NF, LTY REAL X(P), J(N,P), TY(LTY,2) EXTERNAL UF C INTEGER I REAL NEGONE, TI DATA NEGONE/-1.E+0/ C DO 10 I = 1, N TI = TY(I,1) J(I,1) = NEGONE J(I,2) = - EXP(X(4)*TI) J(I,3) = - EXP(X(5)*TI) J(I,4) = TI*X(2)*J(I,2) J(I,5) = TI*X(3)*J(I,3) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/nlsk.f000066400000000000000000000102331420247104600162100ustar00rootroot00000000000000C$TEST NLSK C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NLSK C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAMS N2FB AND N2GB C C*********************************************************************** C *** N2FB AND N2GB EXAMPLE PROGRAM *** C C *** FIT N = 33 DATA POINTS (T,Y) TO THE CURVE C *** X(1) + X(2)*EXP(T*X(4)) + X(3)*EXP(T*X(5)) C C *** THE FOLLOWING CODE IS FOR CALLING N2GB. DIFFERENCES FOR C *** CALLING N2FB ARE EXPLAINED IN COMMENTS. C INTEGER I, IV(102), LIV, LTY, LV, UI(1) REAL B(2,5), BIG, TY(50,2), V(491), X(5) EXTERNAL DUMMY, OSB1J, OSB1R, R1MACH REAL R1MACH DATA LIV/102/, LTY/50/, LV/491/ C C *** FOR N2FB, OMIT OSB1J FROM THE EXTERNAL STATEMENT. C C C *** TO MAKE THIS EXAMPLE SELF-CONTAINED, WE USE A DATA STATEMENT C *** AND DO LOOP TO SUPPLY (T,Y) PAIRS TO THE ARRAY TY. C C *** Y VALUES... C DATA TY(1,2) /8.44E-1/, TY(2,2) /9.08E-1/, TY(3,2)/9.32E-1/, 1 TY(4,2) /9.36E-1/, TY(5,2) /9.25E-1/, TY(6,2)/9.08E-1/, 2 TY(7,2) /8.81E-1/, TY(8,2) /8.50E-1/, TY(9,2)/8.18E-1/, 3 TY(10,2)/7.84E-1/, TY(11,2)/7.51E-1/, TY(12,2)/7.18E-1/, 4 TY(13,2)/6.85E-1/, TY(14,2)/6.58E-1/, TY(15,2)/6.28E-1/, 5 TY(16,2)/6.03E-1/, TY(17,2)/5.80E-1/, TY(18,2)/5.58E-1/, 6 TY(19,2)/5.38E-1/, TY(20,2)/5.22E-1/, TY(21,2)/5.06E-1/, 7 TY(22,2)/4.90E-1/, TY(23,2)/4.78E-1/, TY(24,2)/4.67E-1/, 8 TY(25,2)/4.57E-1/, TY(26,2)/4.48E-1/, TY(27,2)/4.38E-1/, 9 TY(28,2)/4.31E-1/, TY(29,2)/4.24E-1/, TY(30,2)/4.20E-1/, A TY(31,2)/4.14E-1/, TY(32,2)/4.11E-1/, TY(33,2)/4.06E-1/ C C *** T VALUES... C DO 10 I = 1, 33 TY(I,1) = -10.E+0 * FLOAT(I-1) 10 CONTINUE C C *** SUPPLY LEAD DIMENSION OF TY IN UI(1)... C *** (MOST COMPILERS WOULD LET US SIMPLY PASS LTY FOR UI, C *** BUT SOME, E.G. WATFIV, WILL NOT.) C UI(1) = LTY C C *** SPECIFY ALL DEFAULT IV AND V INPUT COMPONENTS (N2GB AND N2FB C *** ONLY)... C IV(1) = 0 C C *** SUPPLY INITIAL GUESS... C X(1) = 0.5E+0 X(2) = 1.5E+0 X(3) = -1.E+0 X(4) = 1.E-2 X(5) = 2.E-2 C C *** SET BIG TO LARGEST POSITIVE (MODEL) NUMBER... C BIG = R1MACH(2) C C *** SUPPLY BOUNDS -- INCLUDING LOWER BOUNDS OF -BIG AND UPPER C *** BOUNDS OF BIG WHERE WE DO NOT WISH TO IMPOSE BOUNDS... C DO 20 I = 1, 5 B(1,I) = -BIG B(2,I) = BIG 20 CONTINUE C B(2,4) = .0125 B(1,5) = .03 C C *** SOLVE THE PROBLEM -- N2GB WILL PRINT THE SOLUTION FOR US... C CALL N2GB(33, 5, X, B, OSB1R, OSB1J, IV, LIV, LV, V, UI, TY, 1 DUMMY) C C *** FOR N2FB, THE CORRESPONDING CALL WOULD BE... C C CALL N2FB(33, 5, X, B, OSB1R, IV, LIV, LV, V, UI, TY, DUMMY) C C C *** NOTE -- ON MOST SYSTEMS, WE COULD SIMPLY PASS OSB1R (OR OSB1J) C *** AS THE UF PARAMETER, SINCE OSB1R AND OSB1J IGNORE THIS C *** PARAMETER. BUT THERE EXIST SYSTEMS (E.G. UNIVAC) THAT WOULD C *** GIVE A RUN-TIME ERROR IF WE DID THIS. HENCE WE PASS THE C *** IMMEDIATELY FOLLOWING DUMMY SUBROUTINE AS UF. C STOP END SUBROUTINE DUMMY RETURN END SUBROUTINE OSB1R(N, P, X, NF, R, LTY, TY, UF) C C *** THIS ROUTINE COMPUTES THE RESIDUAL VECTOR, R = R(X), C *** FOR TEST PROBLEM OSBORNE1. C INTEGER N, P, NF, LTY REAL X(P), R(N), TY(LTY,2) EXTERNAL UF C INTEGER I REAL TI, YI C DO 10 I = 1, N TI = TY(I,1) YI = TY(I,2) R(I) = YI - (X(1) + X(2)* EXP(X(4)*TI) + X(3)* EXP(X(5)*TI)) 10 CONTINUE RETURN END SUBROUTINE OSB1J(N, P, X, NF, J, LTY, TY, UF) C C *** THIS ROUTINE COMPUTES THE JACOBIAN MATRIX, J = J(X), C *** FOR TEST PROBLEM OSBORNE1. J(I,K) IS SET TO THE PARTIAL C *** DERIVATIVE OF COMPONENT I OF R WITH RESPECT TO X(K). C INTEGER N, P, NF, LTY REAL X(P), J(N,P), TY(LTY,2) EXTERNAL UF C INTEGER I REAL NEGONE, TI DATA NEGONE/-1.E+0/ C DO 10 I = 1, N TI = TY(I,1) J(I,1) = NEGONE J(I,2) = - EXP(X(4)*TI) J(I,3) = - EXP(X(5)*TI) J(I,4) = TI*X(2)*J(I,2) J(I,5) = TI*X(3)*J(I,3) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/nlsp.f000066400000000000000000000102531420247104600162170ustar00rootroot00000000000000C$TEST NLSP C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NLSP C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM N2PB C C*********************************************************************** C *** N2PB EXAMPLE PROGRAM *** C C *** FIT N = 33 DATA POINTS (T,Y) TO THE CURVE C *** X(1) + X(2)*EXP(T*X(4)) + X(3)*EXP(T*X(5)) C INTEGER I, IV(102), LIV, LTY, LV, UI(1) REAL B(2,5), BIG, TY(50,2), V(302), X(5) EXTERNAL DUMMY, OSB1J, OSB1R, R1MACH REAL R1MACH DATA LIV/102/, LTY/50/, LV/302/ C C *** TO MAKE THIS EXAMPLE SELF-CONTAINED, WE USE A DATA STATEMENT C *** AND DO LOOP TO SUPPLY (T,Y) PAIRS TO THE ARRAY TY. C C *** Y VALUES... C DATA TY(1,2) /8.44E-1/, TY(2,2) /9.08E-1/, TY(3,2)/9.32E-1/, 1 TY(4,2) /9.36E-1/, TY(5,2) /9.25E-1/, TY(6,2)/9.08E-1/, 2 TY(7,2) /8.81E-1/, TY(8,2) /8.50E-1/, TY(9,2)/8.18E-1/, 3 TY(10,2)/7.84E-1/, TY(11,2)/7.51E-1/, TY(12,2)/7.18E-1/, 4 TY(13,2)/6.85E-1/, TY(14,2)/6.58E-1/, TY(15,2)/6.28E-1/, 5 TY(16,2)/6.03E-1/, TY(17,2)/5.80E-1/, TY(18,2)/5.58E-1/, 6 TY(19,2)/5.38E-1/, TY(20,2)/5.22E-1/, TY(21,2)/5.06E-1/, 7 TY(22,2)/4.90E-1/, TY(23,2)/4.78E-1/, TY(24,2)/4.67E-1/, 8 TY(25,2)/4.57E-1/, TY(26,2)/4.48E-1/, TY(27,2)/4.38E-1/, 9 TY(28,2)/4.31E-1/, TY(29,2)/4.24E-1/, TY(30,2)/4.20E-1/, A TY(31,2)/4.14E-1/, TY(32,2)/4.11E-1/, TY(33,2)/4.06E-1/ C C *** T VALUES... C DO 10 I = 1, 33 TY(I,1) = -10.E+0 * FLOAT(I-1) 10 CONTINUE C C *** SUPPLY LEAD DIMENSION OF TY IN UI(1)... C *** (MOST COMPILERS WOULD LET US SIMPLY PASS LTY FOR UI, C *** BUT SOME, E.G. WATFIV, WILL NOT.) C UI(1) = LTY C C *** SPECIFY ALL DEFAULT IV AND V INPUT COMPONENTS... C IV(1) = 0 C C ... TO LIMIT THE NUMBER OF ITERATIONS TO 100, WE WOULD REPLACE THE C ... ABOVE ASSIGNMENT OF 0 TO IV(1) WITH THE FOLLOWING TWO LINES... C C CALL IVSET(1, IV, LIV, LV, V) C IV(18) = 100 C C C *** SUPPLY INITIAL GUESS... C X(1) = 0.5E+0 X(2) = 1.5E+0 X(3) = -1.E+0 X(4) = 1.E-2 X(5) = 2.E-2 C C *** SET BIG TO LARGEST POSITIVE (MODEL) NUMBER... C BIG = R1MACH(2) C C *** SUPPLY BOUNDS -- INCLUDING LOWER BOUNDS OF -BIG AND UPPER C *** BOUNDS OF BIG WHERE WE DO NOT WISH TO IMPOSE BOUNDS... C DO 20 I = 1, 5 B(1,I) = -BIG B(2,I) = BIG 20 CONTINUE C B(2,4) = .0125 B(1,5) = .03 C C *** SOLVE THE PROBLEM -- N2PB WILL PRINT THE SOLUTION FOR US. C *** WE COMPUTE 7 RESIDUAL COMPONENTS OR JACOBIAN ROWS PER CALL... C CALL N2PB(33, 7, 5, X, B, OSB1R, OSB1J, IV, LIV, LV, V, UI, TY, 1 DUMMY) C C C *** NOTE -- ON MOST SYSTEMS, WE COULD SIMPLY PASS OSB1R OR OSB1J C *** AS THE LAST PARAMETER TO N2PB, SINCE OSB1R AND OSB1J IGNORE C *** THEIR UF PARAMETER. BUT THERE EXIST SYSTEMS (E.G. UNIVAC) C *** THAT WOULD GIVE A RUN-TIME ERROR IF WE DID THIS. HENCE WE C *** PASS THE IMMEDIATELY FOLLOWING DUMMY SUBROUTINE AS UF. C STOP END SUBROUTINE DUMMY RETURN END SUBROUTINE OSB1R(N, ND1, N1, N2, P, X, NF, R, LTY, TY, UF) C C *** THIS ROUTINE COMPUTES CHUNKS OF THE RESIDUAL VECTOR, R = R(X), C *** FOR TEST PROBLEM OSBORNE1. C INTEGER N, ND1, N1, N2, P, NF, LTY REAL X(P), R(ND1), TY(LTY,2) EXTERNAL UF C INTEGER I, I1 REAL TI, YI C I1 = 1 DO 10 I = N1, N2 TI = TY(I,1) YI = TY(I,2) R(I1) = YI - (X(1) + X(2)* EXP(X(4)*TI) + X(3)* EXP(X(5)*TI)) I1 = I1 + 1 10 CONTINUE RETURN END SUBROUTINE OSB1J(N, ND1, N1, N2, P, X, NF, J, LTY, TY, UF) C C *** THIS ROUTINE COMPUTES CHUNKS OF THE JACOBIAN MATRIX, J = J(X), C *** FOR TEST PROBLEM OSBORNE1. C INTEGER N, ND1, N1, N2, P, NF, LTY REAL X(P), J(ND1,P), TY(LTY,2) EXTERNAL UF C INTEGER I, I1 REAL NEGONE, TI DATA NEGONE/-1.E+0/ C I1 = 1 DO 10 I = N1, N2 TI = TY(I,1) J(I1,1) = NEGONE J(I1,2) = - EXP(X(4)*TI) J(I1,3) = - EXP(X(5)*TI) J(I1,4) = TI*X(2)*J(I1,2) J(I1,5) = TI*X(3)*J(I1,3) I1 = I1 + 1 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/nlsr.f000066400000000000000000000076241420247104600162310ustar00rootroot00000000000000C$TEST NLSR C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NLSR C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAMS NSG AND NSF C C*********************************************************************** C *** NSG AND NSF EXAMPLE PROGRAM *** C C *** FIT N = 33 DATA POINTS (T,Y) TO THE CURVE C *** X(1) + X(2)*DEXP(T*X(4)) + X(3)*DEXP(T*X(5)) C C *** THE FOLLOWING CODE IS FOR CALLING NSG. DIFFERENCES FOR C *** CALLING NSF ARE EXPLAINED IN COMMENTS. C INTEGER I, J, INC(4,2), IV(124), LIV, LTY, LV, UI(1) DOUBLE PRECISION C(3), T(33), Y(33), V(612), X(5) EXTERNAL DUMMY, OSB1A, OSB1B DATA LIV/124/, LTY/50/, LV/612/ C C *** FOR NSF, OMIT OSB1B FROM THE EXTERNAL STATEMENT. C C C *** TO MAKE THIS EXAMPLE SELF-CONTAINED, WE USE A DATA STATEMENT C *** AND DO LOOP TO SUPPLY (T(I),Y(I)) PAIRS. C C *** Y VALUES... C DATA Y(1) /8.44D-1/, Y(2) /9.08D-1/, Y(3)/9.32D-1/, 1 Y(4) /9.36D-1/, Y(5) /9.25D-1/, Y(6)/9.08D-1/, 2 Y(7) /8.81D-1/, Y(8) /8.50D-1/, Y(9)/8.18D-1/, 3 Y(10)/7.84D-1/, Y(11)/7.51D-1/, Y(12)/7.18D-1/, 4 Y(13)/6.85D-1/, Y(14)/6.58D-1/, Y(15)/6.28D-1/, 5 Y(16)/6.03D-1/, Y(17)/5.80D-1/, Y(18)/5.58D-1/, 6 Y(19)/5.38D-1/, Y(20)/5.22D-1/, Y(21)/5.06D-1/, 7 Y(22)/4.90D-1/, Y(23)/4.78D-1/, Y(24)/4.67D-1/, 8 Y(25)/4.57D-1/, Y(26)/4.48D-1/, Y(27)/4.38D-1/, 9 Y(28)/4.31D-1/, Y(29)/4.24D-1/, Y(30)/4.20D-1/, A Y(31)/4.14D-1/, Y(32)/4.11D-1/, Y(33)/4.06D-1/ C C *** T VALUES... C DO 10 I = 1, 33 T(I) = -10.D+0 *FLOAT(I-1) 10 CONTINUE C C *** SET UP INC *** C DO 30 J = 1, 2 DO 20 I = 1, 4 20 INC(I,J) = 0 30 CONTINUE INC(2,1) = 1 INC(3,2) = 1 C C *** SPECIFY ALL DEFAULT IV AND V INPUT COMPONENTS *** C IV(1) = 0 C C ... TO TURN OFF THE DEFAULT COMPUTATION AND PRINTING OF THE C ... REGRESSION DIAGNOSTIC VECTOR, WE WOULD REPLACE THE ABOVE C ... ASSIGNMENT OF 0 TO IV(1) WITH THE FOLLOWING THREE LINES... C C CALL IVSET(1, IV, LIV, LV, V) C IV(57) = 1 C IV(14) = 1 C C ... THAT IS, WE SET IV(RDREQ) AND IV(COVPRT) TO 1, THUS REQUESTING C ... COMPUTATION AND PRINTING OF JUST A COVARIANCE MATRIX. C C C *** SUPPLY INITIAL GUESS... C X(1) = 1.D-2 X(2) = 2.D-2 C C *** SOLVE THE PROBLEM -- NSG WILL PRINT THE SOLUTION FOR US... C CALL DNSG(33, 2, 3, X, C, Y, OSB1A, OSB1B, INC, 4, 1 IV, LIV, LV, V, UI, T, DUMMY) C C *** FOR NSF, THE CORRESPONDING CALL WOULD BE... C C CALL NSF(33, 2, 3, X, C, Y, OSB1A, INC, 4, C 1 IV, LIV, LV, V, UI, T, DUMMY) C C C *** NOTE -- ON MOST SYSTEMS, WE COULD SIMPLY PASS OSB1A (OR OSB1B) C *** AS THE UF PARAMETER, SINCE OSB1A AND OSB1B IGNORE THIS C *** PARAMETER. BUT THERE EXIST SYSTEMS (E.G. UNIVAC) THAT WOULD C *** GIVE A RUN-TIME ERROR IF WE DID THIS. HENCE WE PASS THE C *** IMMEDIATELY FOLLOWING DUMMY SUBROUTINE AS UF. C STOP END SUBROUTINE DUMMY RETURN END SUBROUTINE OSB1A(N, P, L, X, NF, A, UI, T, UF) C C *** THIS ROUTINE COMPUTES THE A MATRIX, A = A(X), C *** FOR TEST PROBLEM OSBORNE1. C INTEGER L, N, NF, P, UI(1) DOUBLE PRECISION A(N,1), T(N), X(P) EXTERNAL UF C INTEGER I DOUBLE PRECISION ONE, TI DATA ONE/1.D+0/ C DO 10 I = 1, N TI = T(I) A(I,1) = ONE A(I,2) = DEXP(TI*X(1)) A(I,3) = DEXP(TI*X(2)) 10 CONTINUE RETURN END SUBROUTINE OSB1B(N, P, L, X, NF, B, UI, T, UF) C C *** THIS ROUTINE COMPUTES THE JACOBIAN TENSOR, B = B(X), C *** FOR TEST PROBLEM OSBORNE1. C INTEGER L, N, NF, P, UI(1) DOUBLE PRECISION B(N,2), T(N), X(P) EXTERNAL UF C INTEGER I DOUBLE PRECISION TI C DO 10 I = 1, N TI = T(I) B(I,1) = TI * DEXP(TI*X(1)) B(I,2) = TI * DEXP(TI*X(2)) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/nmsk.f000066400000000000000000000101051420247104600162070ustar00rootroot00000000000000C$TEST NMSK C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NMSK C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAMS NSGB AND NSFB C C*********************************************************************** C *** NSGB AND NSFB EXAMPLE PROGRAM *** C C *** FIT N = 33 DATA POINTS (T,Y) TO THE CURVE C *** X(1) + X(2)*EXP(T*X(4)) + X(3)*EXP(T*X(5)) C C *** THE FOLLOWING CODE IS FOR CALLING NSGB. DIFFERENCES FOR C *** CALLING NSFB ARE EXPLAINED IN COMMENTS. C INTEGER I, J, INC(4,2), IV(130), LIV, LTY, LV, UI(1) REAL BX(2,2), BIG, C(3), T(33), Y(33), V(461), X(5) EXTERNAL DUMMY, OSB1A, OSB1B, R1MACH REAL R1MACH C C *** FOR NSFB, OMIT OSB1B FROM THE EXTERNAL STATEMENT. C DATA LIV/130/, LTY/50/, LV/461/ C C *** TO MAKE THIS EXAMPLE SELF-CONTAINED, WE USE A DATA STATEMENT C *** AND DO LOOP TO SUPPLY (T(I),Y(I)) PAIRS. C C *** Y VALUES... C DATA Y(1) /8.44E-1/, Y(2) /9.08E-1/, Y(3)/9.32E-1/, 1 Y(4) /9.36E-1/, Y(5) /9.25E-1/, Y(6)/9.08E-1/, 2 Y(7) /8.81E-1/, Y(8) /8.50E-1/, Y(9)/8.18E-1/, 3 Y(10)/7.84E-1/, Y(11)/7.51E-1/, Y(12)/7.18E-1/, 4 Y(13)/6.85E-1/, Y(14)/6.58E-1/, Y(15)/6.28E-1/, 5 Y(16)/6.03E-1/, Y(17)/5.80E-1/, Y(18)/5.58E-1/, 6 Y(19)/5.38E-1/, Y(20)/5.22E-1/, Y(21)/5.06E-1/, 7 Y(22)/4.90E-1/, Y(23)/4.78E-1/, Y(24)/4.67E-1/, 8 Y(25)/4.57E-1/, Y(26)/4.48E-1/, Y(27)/4.38E-1/, 9 Y(28)/4.31E-1/, Y(29)/4.24E-1/, Y(30)/4.20E-1/, A Y(31)/4.14E-1/, Y(32)/4.11E-1/, Y(33)/4.06E-1/ C C *** T VALUES... C DO 10 I = 1, 33 T(I) = -10.E+0 * FLOAT(I-1) 10 CONTINUE C C *** SET UP INC *** C DO 30 J = 1, 2 DO 20 I = 1, 4 20 INC(I,J) = 0 30 CONTINUE INC(2,1) = 1 INC(3,2) = 1 C C *** SPECIFY ALL DEFAULT IV AND V INPUT COMPONENTS *** C IV(1) = 0 C C ... TO SET THE MAXIMUM NUMBER OF ITERATIONS TO 100 AND TURN OFF C ... THE PRINTING OF THE ITERATION SUMMARY, WE WOULD REPLACE THE C ... ABOVE ASSIGNMENT OF 0 TO IV(1) WITH THE FOLLOWING THREE LINES... C C CALL IVSET(1, IV, LIV, LV, V) C IV(18) = 100 C IV(19) = 0 C C C *** SUPPLY INITIAL GUESS... C X(1) = 1.E-2 X(2) = 2.E-2 C C *** SET BIG TO LARGEST POSITIVE (MODEL) NUMBER... C BIG = R1MACH(2) C C *** SUPPLY BOUNDS -- INCLUDING LOWER BOUNDS OF -BIG AND UPPER C *** BOUNDS OF BIG WHERE WE DO NOT WISH TO IMPOSE BOUNDS... C BX(1,1) = -BIG BX(2,1) = .0125E+0 BX(1,2) = .03E+0 BX(2,2) = BIG C C *** SOLVE THE PROBLEM -- NSGB WILL PRINT THE SOLUTION FOR US... C CALL NSGB(33, 2, 3, X, BX, C, Y, OSB1A, OSB1B, INC, 4, 1 IV, LIV, LV, V, UI, T, DUMMY) C C *** FOR NSFB, THE CORRESPONDING CALL WOULD BE... C C CALL NSFB(33, 2, 3, X, BX, C, Y, OSB1A, INC, 4, C 1 IV, LIV, LV, V, UI, T, DUMMY) C C C *** NOTE -- ON MOST SYSTEMS, WE COULD SIMPLY PASS OSB1A (OR OSB1B) C *** AS THE UF PARAMETER, SINCE OSB1A AND OSB1B IGNORE THIS C *** PARAMETER. BUT THERE EXIST SYSTEMS (E.G. UNIVAC) THAT WOULD C *** GIVE A RUN-TIME ERROR IF WE DID THIS. HENCE WE PASS THE C *** IMMEDIATELY FOLLOWING DUMMY SUBROUTINE AS UF. C STOP END SUBROUTINE DUMMY RETURN END SUBROUTINE OSB1A(N, P, L, X, NF, A, UI, T, UF) C C *** THIS ROUTINE COMPUTES THE A MATRIX, A = A(X), C *** FOR TEST PROBLEM OSBORNE1. C INTEGER L, N, NF, P, UI(1) REAL A(N,1), T(N), X(P) EXTERNAL UF C INTEGER I REAL ONE, TI DATA ONE/1.E+0/ C DO 10 I = 1, N TI = T(I) A(I,1) = ONE A(I,2) = EXP(TI*X(1)) A(I,3) = EXP(TI*X(2)) 10 CONTINUE RETURN END SUBROUTINE OSB1B(N, P, L, X, NF, B, UI, T, UF) C C *** THIS ROUTINE COMPUTES THE JACOBIAN TENSOR, B = B(X), C *** FOR TEST PROBLEM OSBORNE1. C INTEGER L, N, NF, P, UI(1) REAL B(N,2), T(N), X(P) EXTERNAL UF C INTEGER I REAL TI C DO 10 I = 1, N TI = T(I) B(I,1) = TI * EXP(TI*X(1)) B(I,2) = TI * EXP(TI*X(2)) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/np2a.f000066400000000000000000000024701420247104600161050ustar00rootroot00000000000000C$TEST NP2A C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NP2A C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SN2F C C*********************************************************************** INTEGER N,P EXTERNAL OSBN REAL Y(10),T(10),YY(10),X(5) COMMON /YT/YY,T C GENERATE DATA FOR PROBLEM DATA Y(1)/8.44E-1/, Y(2) /9.36E-1/, Y(3) /8.81E-1/ 1 Y(4)/7.84E-1/, Y(5)/ 6.85E-1/, Y(6)/6.03E-1/, 2 Y(7) /5.38E-1/ , Y(8) /4.90E-1/, Y(9)/4.57E-1/ P=5 N=9 DO 10 I=1,9 YY(I) = Y(I) T(I)=-30.E0*FLOAT(I-1) 10 CONTINUE C INITIALIZE X X(1)=0.5 X(2)=1.5 X(3)=-1. X(4)=.01 X(5)=.02 C C SOLVE THE PROBLEM C CALL SN2F(N, P, X, OSBN, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE = I1MACH(2) WRITE(IWRITE, 20)(X(I),I=1,P) 20 FORMAT(10H SOLUTION-,5E15.5) STOP END SUBROUTINE OSBN(N,P,X,NF,R) C THIS SUBROUTINE COMPUTES THE MODEL INTEGER P, N, NF REAL X(P), R(N) REAL Y(10), T(10) COMMON /YT/ Y, T DO 10 I=1,N R(I)=Y(I)-(X(1)+X(2)*EXP(X(4)*T(I))+X(3)*EXP(X(5)*T(I))) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/np2b.f000066400000000000000000000030451420247104600161050ustar00rootroot00000000000000C$TEST NP2B C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NP2B C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SN2FB C C*********************************************************************** INTEGER N,P EXTERNAL OSBN REAL Y(10),YY(10),T(10),X(5),B(2,5) COMMON /YT/YY,T C GENERATE DATA FOR PROBLEM DATA Y(1)/8.44E-1/, Y(2) /9.36E-1/, Y(3) /8.81E-1/ 1 Y(4)/7.84E-1/, Y(5)/ 6.85E-1/, Y(6)/6.03E-1/, 2 Y(7) /5.38E-1/ , Y(8) /4.90E-1/, Y(9)/4.57E-1/ P=5 N=9 DO 10 I=1,9 YY(I) = Y(I) T(I)=-30.E0*FLOAT(I-1) 10 CONTINUE C INITIALIZE X X(1)=0.5 X(2)=1.5 X(3)=-1. X(4)=.01 X(5)=.03 C SUPPLY BOUNDS C C SET VARIABLES WE DO NOT WANT TO BE BOUNDED TO BIGGEST AND C AND SMALLEST NUMBERS IN THE MACHINE BIG=R1MACH(2) DO 20 I=1, P B(1,I)=-BIG B(2,I)=BIG 20 CONTINUE B(2,4)=0.125 B(1,5)=0.03 C C SOLVE THE PROBLEM C CALL SN2FB(N, P, X, B, OSBN, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE = I1MACH(2) WRITE(IWRITE, 30)(X(I),I=1,P) 30 FORMAT(10H SOLUTION-,5E15.5) STOP END SUBROUTINE OSBN(N,P,X,NF,R) INTEGER P, N, NF REAL X(P), R(N) REAL Y(10), T(10) COMMON /YT/ Y, T DO 10 I=1,N R(I)=Y(I)-(X(1)+X(2)*EXP(X(4)*T(I))+X(3)*EXP(X(5)*T(I))) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/np2e.f000066400000000000000000000033731420247104600161140ustar00rootroot00000000000000C$TEST NP2E C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NP2E C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SN2G C C*********************************************************************** INTEGER N,P EXTERNAL OSBN, OSBNJ REAL Y(10),YY(10),T(10),X(5) COMMON /YT/YY,T C GENERATE DATA FOR PROBLEM DATA Y(1)/8.44E-1/, Y(2) /9.36E-1/, Y(3) /8.81E-1/ 1 Y(4)/7.84E-1/, Y(5)/ 6.85E-1/, Y(6)/6.03E-1/, 2 Y(7) /5.38E-1/ , Y(8) /4.90E-1/, Y(9)/4.57E-1/ P=5 N=9 DO 10 I=1,9 YY(I) = Y(I) T(I)=-30.E0*FLOAT(I-1) 10 CONTINUE C INITIALIZE X X(1)=0.5 X(2)=1.5 X(3)=-1. X(4)=.01 X(5)=.02 C C SOLVE THE PROBLEM C CALL SN2G(N, P, X, OSBN, OSBNJ, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE = I1MACH(2) WRITE(IWRITE, 20)(X(I),I=1,P) 20 FORMAT(10H SOLUTION-,5E15.5) STOP END SUBROUTINE OSBN(N,P,X,NF,R) C THIS SUBROUTINE COMPUTES THE MODEL INTEGER P, N, NF REAL X(P), R(N) REAL Y(10), T(10) COMMON /YT/ Y, T DO 10 I=1,N R(I)=Y(I)-(X(1)+X(2)*EXP(X(4)*T(I))+X(3)*EXP(X(5)*T(I))) 10 CONTINUE RETURN END SUBROUTINE OSBNJ(N,P,X,NF,J) C THIS SUBROUTINE COMPUTES THE JACOBIAN OF THE MODEL INTEGER P, N, NF REAL X(P), J(N,P) REAL Y(10), T(10) COMMON /YT/ Y, T DO 10 I=1,N J(I,1)=-1.0E0 J(I,2)=-EXP(X(4)*T(I)) J(I,3)=-EXP(X(5)*T(I)) J(I,4)=-T(I)*X(2)*EXP(X(4)*T(I)) J(I,5)=-T(I)*X(3)*EXP(X(5)*T(I)) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/np2f.f000066400000000000000000000040141420247104600161060ustar00rootroot00000000000000C$TEST NP2F C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NP2F C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SN2GB C C*********************************************************************** INTEGER N,P EXTERNAL OSBN,OSBNJ REAL Y(10),YY(10),T(10),X(5),B(2,5) COMMON /YT/YY,T C GENERATE DATA FOR PROBLEM DATA Y(1)/8.44E-1/, Y(2) /9.36E-1/, Y(3) /8.81E-1/ 1 Y(4)/7.84E-1/, Y(5)/ 6.85E-1/, Y(6)/6.03E-1/, 2 Y(7) /5.38E-1/ , Y(8) /4.90E-1/, Y(9)/4.57E-1/ P=5 N=9 DO 10 I=1,9 YY(I) = Y(I) T(I)=-30.E0*FLOAT(I-1) 10 CONTINUE C INITIALIZE X X(1)=0.5 X(2)=1.5 X(3)=-1. X(4)=.01 X(5)=.03 C SUPPLY BOUNDS C C SET VARIABLES WE DO NOT WANT TO BE BOUNDED TO BIGGEST AND C AND SMALLEST NUMBERS IN THE MACHINE BIG=R1MACH(2) DO 20 I=1, P B(1,I)=-BIG B(2,I)=BIG 20 CONTINUE B(2,4)=0.125 B(1,5)=0.03 C C SOLVE THE PROBLEM C CALL SN2GB(N, P, X, B, OSBN, OSBNJ, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE = I1MACH(2) WRITE(IWRITE, 30)(X(I),I=1,P) 30 FORMAT(10H SOLUTION-,5E15.5) STOP END SUBROUTINE OSBN(N,P,X,NF,R) C THIS SUBROUTINE COMPUTES THE MODEL INTEGER P, N, NF REAL X(P), R(N) REAL Y(10), T(10) COMMON /YT/ Y, T DO 10 I=1,N R(I)=Y(I)-(X(1)+X(2)*EXP(X(4)*T(I))+X(3)*EXP(X(5)*T(I))) 10 CONTINUE RETURN END SUBROUTINE OSBNJ(N,P,X,NF,J) C THIS SUBROUTINE COMPUTES THE JACOBIAN OF THE MODEL INTEGER P, N, NF REAL X(P), J(N,P) REAL Y(10), T(10) COMMON /YT/ Y, T DO 10 I=1,N J(I,1)=-1.0E0 J(I,2)=-EXP(X(4)*T(I)) J(I,3)=-EXP(X(5)*T(I)) J(I,4)=-T(I)*X(2)*EXP(X(4)*T(I)) J(I,5)=-T(I)*X(3)*EXP(X(5)*T(I)) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/nsfa.f000066400000000000000000000034531420247104600161760ustar00rootroot00000000000000C$TEST NSFA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NSFA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM NSF1 C C*********************************************************************** C EXAMPLE PROGRAM FOR NSF1 TO FIT C N DATA POINTS (T,Y) TO CURVE C C(1)*EXP(T*X) + C(2) C INTEGER IWRITE REAL C(2), T(8), Y(8), TT(8), YY(8) DOUBLE PRECISION S EXTERNAL GETAY COMMON /DATBLK/TT,YY DATA T(1) /12.0/, T(2) /20.0/ ,T(3) /28.0/, T(4) /48.0/, 1 T(5)/120.0/, T(6) /240.0/, T(7) /900.0/, T(8) /2400.0/ DATA Y(1) /0.2342/, Y(2) /0.2244/ , Y(3) /0.2204/, 1 Y(4) /0.2149/, Y(5) /0.2063/, Y(6) /0.1983/, 2 Y(7) /0.1842/, Y(8)/0.1761/ C C SET UP OUTPUT UNIT C IWRITE = I1MACH(2) C C MOVE T AND Y VECTORS TO COMMON C DO 2 I=1,8 TT(I) = T(I) YY(I) = Y(I) 2 CONTINUE C N = 8 L = 2 X1 = -10.0 X2 = 0.001 C C DO THE FIT C CALL NSF1(N, L, X, X1, X2, 1.E-6, C) WRITE(IWRITE, 4) X, C(1), C(2) 4 FORMAT(5H X = , E20.10/8H C(1) = ,E20.10/8H C(2) = , E20.10) C WRITE(IWRITE, 5) 5 FORMAT(//,19X,1HT,14X,6HREAL Y,14X,5HEST.Y,15X,5HERROR,/) DO 100 I=1,N YEST = C(1)*EXP(T(I)*X)+C(2) YERR = ABS(Y(I)-YEST) WRITE(IWRITE, 6) T(I), Y(I), YEST, YERR 100 S = S + YERR*YERR 6 FORMAT (4E20.10) WRITE(IWRITE, 7) S 7 FORMAT(//,24HSUM OF ERRORS SQUARED = ,D20.10) STOP END SUBROUTINE GETAY(N,L,X,A,Y) INTEGER N,L REAL A(N,L),X,Y(N) REAL T(8),YY(8) COMMON /DATBLK/T,YY DO 100 I=1,N A(I,1)=EXP(X*T(I)) A(I,2)=1.0 Y(I)=YY(I) 100 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/nsnm.f000066400000000000000000000046271420247104600162260ustar00rootroot00000000000000C$TEST NSNM C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NSNM C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SMNSX C C*********************************************************************** C *** SMNSX EXAMPLE PROGRAM *** C C *** MINIMIZE F(X) = 0.1*S(X)**4 + SUM(I = 1(1)3) (I * (X(I) - 10)**2), C *** WHERE S(X) = SUM(I = 1(1)3) X(I), C *** STARTING FROM X = (2, 30, 9). C INTEGER I, J, IWRITE, P REAL FX, S(3,4), STEP, TOL, X(3) EXTERNAL I1MACH, MNSX, QF, SMNSX INTEGER I1MACH REAL MNSX, SMNSX C C *** USE COMMON TO FIND NUMBER OF TIMES F(X) IS EVALUATED... C INTEGER NF COMMON /SXCOMN/ NF C DATA P/3/ C C *** BODY *** C C C *** FIRST SOLVE THE PROBLEM USING SMNSX... C X(1) = 2.E0 X(2) = 3.E1 X(3) = 9.E0 C NF = 0 C *** STEP AND TOL ARE USED AS BOTH INPUT AND OUTPUT PARAMETERS, C *** SO WE MUST NOT PASS CONSTANTS FOR THEM. STEP = 1.E0 TOL = 1.E-10 C FX = SMNSX(QF, P, STEP, TOL, X) C C *** PRINT OUT THE SOLUTION (ON THE STANDARD OUTPUT UNIT) *** C IWRITE = I1MACH(2) WRITE(IWRITE,10) FX, TOL, STEP, X, NF 10 FORMAT(21H SMNSX RETURNS F(X) =, E13.6,7H, TOL =, E10.3/ 1 11H AND STEP =, E10.3/7H AT X =, 3E14.6/6H AFTER, I5, 2 21H FUNCTION EVALUATIONS) C C *** SOLVE THE PROBLEM AGAIN, THIS TIME USING MNSX... C X(1) = 2.0E0 X(2) = 30.0E0 X(3) = 9.0E0 C C C *** CREATE INITIAL SIMPLEX... C DO 30 J = 1, 4 DO 20 I = 1, 3 S(I,J) = X(I) - 0.5E0 20 CONTINUE IF (J .LE. 3) S(J,J) = X(J) + 0.5E0 30 CONTINUE C NF = 0 TOL = 1.E-10 C FX = MNSX(QF, 1000, P, P, S, TOL, X) C C *** PRINT OUT THE SOLUTION *** C WRITE(IWRITE,40) FX, TOL, X, NF 40 FORMAT(/20H MNSX RETURNS F(X) =, E13.6,10H AND TOL =, E10.3/ 1 7H AT X =,3E14.6/6H AFTER, I5, 21H FUNCTION EVALUATIONS) 999 STOP END REAL FUNCTION QF(P, X) C C *** THIS ROUTINE COMPUTES THE OBJECTIVE FUNCTION, F(X) C INTEGER P REAL X(P) C INTEGER NF COMMON /SXCOMN/ NF C INTEGER I REAL PT1, TEN, ZERO C DATA PT1 /0.1E0/, TEN/1.E1/, ZERO/0.E0/ C C NF = NF + 1 QF = ZERO DO 10 I = 1, P 10 QF = QF + X(I) QF = PT1 * QF**4 DO 20 I = 1, P 20 QF = QF + I*(X(I) - TEN)**2 999 RETURN END PyBDSF-1.10.1/src/port3/ex/ntle.f000066400000000000000000000017521420247104600162110ustar00rootroot00000000000000C$TEST NTLE C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NTLE C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SMNFB C C*********************************************************************** INTEGER N EXTERNAL ROSN REAL X(2), B(2,2) N=2 C INITIALIZE X X(1)=-1.2 X(2)=1.0 C SET UP THE BOUND ARRAY C R1MACH(2) CONTAINS THE LARGEST NUMBER IN THE MACHINE B(1,1)=-R1MACH(2) B(2,1)=0.5 B(1,2)=0.0 B(2,2)=1.0 C C SOLVE THE PROBLEM C CALL SMNFB(N, X, B, ROSN, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE=I1MACH(2) WRITE(IWRITE,10)(X(I),I=1,N) 10 FORMAT(10H SOLUTION-,5E15.5) STOP END SUBROUTINE ROSN(N,X,NF,F) C THIS SUBROUTINE COMPUTES THE FUNCTION INTEGER N, NF REAL X(N), F F=100.0*(X(2)-X(1)*X(1))**2 + (1.0 - X(1))**2 RETURN END PyBDSF-1.10.1/src/port3/ex/ntlf.f000066400000000000000000000020721420247104600162060ustar00rootroot00000000000000C$TEST NTLF C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NTLF C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SMNG C C*********************************************************************** INTEGER N EXTERNAL ROSN,ROSG REAL X(2) N=2 C INITIALIZE X X(1)=-1.2 X(2)=1.0 C C SOLVE THE PROBLEM C CALL SMNG(N, X, ROSN, ROSG, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE=I1MACH(2) WRITE(IWRITE,10)(X(I),I=1,N) 10 FORMAT(10H SOLUTION-,5E15.5) STOP END SUBROUTINE ROSN(N,X,NF,F) C THIS SUBROUTINE COMPUTES THE FUNCTION INTEGER N, NF REAL X(N), F F=100.0*(X(2)-X(1)*X(1))**2 + (1.0 - X(1))**2 RETURN END SUBROUTINE ROSG(N,X,NF,G) C THIS SUBROUTINE COMPUTES THE GRADIENT INTEGER N,NF REAL X(N), G(N) G(1)=200.0*(X(2)-X(1)*X(1))*(-2.0)*X(1) - 2.0*(1-X(1)) G(2)=200.0*(X(2)-X(1)*X(1)) RETURN END PyBDSF-1.10.1/src/port3/ex/ntlh.f000066400000000000000000000023531420247104600162120ustar00rootroot00000000000000C$TEST NTLH C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NTLH C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SMNGB C C*********************************************************************** INTEGER N EXTERNAL ROSN, ROSG REAL X(2), B(2,2) N=2 C INITIALIZE X X(1)=-1.2 X(2)=1.0 C SET UP THE BOUND ARRAY C R1MACH(2) CONTAINS THE LARGEST NUMBER IN THE MACHINE B(1,1)=-R1MACH(2) B(2,1)=0.5 B(1,2)=0.0 B(2,2)=1.0 C C SOLVE THE PROBLEM C CALL SMNGB(N, X, B, ROSN, ROSG, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE=I1MACH(2) WRITE(IWRITE,10)(X(I),I=1,N) 10 FORMAT(10H SOLUTION-,5E15.5) STOP END SUBROUTINE ROSN(N,X,NF,F) C THIS SUBROUTINE COMPUTES THE FUNCTION INTEGER N, NF REAL X(N), F F=100.0*(X(2)-X(1)*X(1))**2 + (1.0 - X(1))**2 RETURN END SUBROUTINE ROSG(N,X,NF,G) C THIS SUBROUTINE COMPUTES THE GRADIENT INTEGER N,NF REAL X(N), G(N) G(1)=200.0*(X(2)-X(1)*X(1))*(-2.0)*X(1) - 2.0*(1-X(1)) G(2)=200.0*(X(2)-X(1)*X(1)) RETURN END PyBDSF-1.10.1/src/port3/ex/ntlk.f000066400000000000000000000024701420247104600162150ustar00rootroot00000000000000C$TEST NTLK C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NTLK C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SMNH C C*********************************************************************** INTEGER N EXTERNAL ROSN,ROSGH REAL X(2) N=2 C INITIALIZE X X(1)=-1.2 X(2)=1.0 C C SOLVE THE PROBLEM C CALL SMNH(N, X, ROSN, ROSGH, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE=I1MACH(2) WRITE(IWRITE,10)(X(I),I=1,N) 10 FORMAT(10H SOLUTION-,5E15.5) STOP END SUBROUTINE ROSN(N,X,NF,F) C THIS SUBROUTINE COMPUTES THE FUNCTION INTEGER N, NF REAL X(N), F F=100.0*(X(2)-X(1)*X(1))**2 + (1.0 - X(1))**2 RETURN END SUBROUTINE ROSGH(N,X,NF,G,H) C THIS SUBROUTINE COMPUTES THE GRADIENT AND THE HESSIAN INTEGER N,NF REAL X(N), G(N), H(1) G(1)=200.0*(X(2)-X(1)*X(1))*(-2.0)*X(1) - 2.0*(1-X(1)) G(2)=200.0*(X(2)-X(1)*X(1)) C H(1) HAS THE (1,1) ELEMENT, H(2) HAS THE (2,1) ELEMENT, C H(3) HAS THE (2,2) ELEMENT OF THE MATRIX OF SECOND PARTIALS H(1)=200.0*(X(2)-X(1)*X(1))*(-2.0)+800.0*X(1)*X(1)+2.0 H(2)=-400.0*X(1) H(3)=200.0 RETURN END PyBDSF-1.10.1/src/port3/ex/ntlm.f000066400000000000000000000027511420247104600162210ustar00rootroot00000000000000C$TEST NTLM C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NTLM C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SMNHB C C*********************************************************************** INTEGER N EXTERNAL ROSN, ROSGH REAL X(2), B(2,2) N=2 C INITIALIZE X X(1)=-1.2 X(2)=1.0 C SET UP THE BOUND ARRAY C R1MACH(2) CONTAINS THE LARGEST NUMBER IN THE MACHINE B(1,1)=-R1MACH(2) B(2,1)=0.5 B(1,2)=0.0 B(2,2)=1.0 C C SOLVE THE PROBLEM C CALL SMNHB(N, X, B, ROSN, ROSGH, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE=I1MACH(2) WRITE(IWRITE,10)(X(I),I=1,N) 10 FORMAT(10H SOLUTION-,5E15.5) STOP END SUBROUTINE ROSN(N,X,NF,F) C THIS SUBROUTINE COMPUTES THE FUNCTION INTEGER N, NF REAL X(N), F F=100.0*(X(2)-X(1)*X(1))**2 + (1.0 - X(1))**2 RETURN END SUBROUTINE ROSGH(N,X,NF,G,H) C THIS SUBROUTINE COMPUTES THE GRADIENT AND THE HESSIAN INTEGER N,NF REAL X(N), G(N), H(1) G(1)=200.0*(X(2)-X(1)*X(1))*(-2.0)*X(1) - 2.0*(1-X(1)) G(2)=200.0*(X(2)-X(1)*X(1)) C H(1) HAS THE (1,1) ELEMENT, H(2) HAS THE (2,1) ELEMENT, C H(3) HAS THE (2,2) ELEMENT OF THE MATRIX OF SECOND PARTIALS H(1)=200.0*(X(2)-X(1)*X(1))*(-2.0)+800.0*X(1)*X(1)+2.0 H(2)=-400.0*X(1) H(3)=200.0 RETURN END PyBDSF-1.10.1/src/port3/ex/ntlp.f000066400000000000000000000031631420247104600162220ustar00rootroot00000000000000C$TEST NTLP C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NTLP C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SNSF C C*********************************************************************** INTEGER N,P,L INTEGER LP1, IINC,INC(4,2) EXTERNAL OSBA REAL Y(10),T(10),X(2),C(3) COMMON /TT/T C GENERATE DATA FOR PROBLEM DATA Y(1)/8.44E-1/, Y(2) /9.36E-1/, Y(3) /8.81E-1/ 1 Y(4)/7.84E-1/, Y(5)/ 6.85E-1/, Y(6)/6.03E-1/, 2 Y(7) /5.38E-1/ , Y(8) /4.90E-1/, Y(9)/4.57E-1/ P=2 N=9 L=3 DO 10 I=1,9 T(I)=-30.E0*FLOAT(I-1) 10 CONTINUE C INITIALIZE X X(1)=.01 X(2)=.02 C GENERATE THE INCIDENCE MATRIX LP1=L+1 DO 30 J=1,P DO 20 I=1,LP1 INC(I,J)=0 20 CONTINUE 30 CONTINUE INC(2,1)=1 INC(3,2)=1 IINC=LP1 C C SOLVE THE PROBLEM C CALL SNSF(N, P, L, X, C, Y, OSBA, INC, IINC, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE = I1MACH(2) WRITE(IWRITE, 40)(X(I),I=1,P) 40 FORMAT(22H NONLINEAR PARAMETERS-,2E15.5) WRITE(IWRITE, 50)(C(I),I=1,L) 50 FORMAT(19H LINEAR PARAMETERS-, 3E15.5) STOP END SUBROUTINE OSBA(N,P,L,X,NF,A) C THIS SUBROUTINE COMPUTES THE MODEL INTEGER P, N, NF, L REAL X(P), A(N,L) REAL T(10) COMMON /TT/ T DO 10 I=1,N A(I,1)=1.0 A(I,2)=EXP(X(1)*T(I)) A(I,3)=EXP(X(2)*T(I)) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ntlr.f000066400000000000000000000036721420247104600162310ustar00rootroot00000000000000C$TEST NTLR C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NTLR C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SNSG C C*********************************************************************** INTEGER N,P,L INTEGER LP1, IINC,INC(4,2) EXTERNAL OSBA, OSBB REAL Y(10),T(10),X(2),C(3) COMMON /TT/T C GENERATE DATA FOR PROBLEM DATA Y(1)/8.44E-1/, Y(2) /9.36E-1/, Y(3) /8.81E-1/ 1 Y(4)/7.84E-1/, Y(5)/ 6.85E-1/, Y(6)/6.03E-1/, 2 Y(7) /5.38E-1/ , Y(8) /4.90E-1/, Y(9)/4.57E-1/ P=2 N=9 L=3 DO 10 I=1,9 T(I)=-30.E0*FLOAT(I-1) 10 CONTINUE C INITIALIZE X X(1)=.01 X(2)=.02 C GENERATE THE INCIDENCE MATRIX LP1=L+1 DO 30 J=1,P DO 20 I=1,LP1 INC(I,J)=0 20 CONTINUE 30 CONTINUE INC(2,1)=1 INC(3,2)=1 IINC=LP1 C C SOLVE THE PROBLEM C CALL SNSG(N, P, L, X, C, Y, OSBA, OSBB, INC, IINC, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE = I1MACH(2) WRITE(IWRITE, 40)(X(I),I=1,P) 40 FORMAT(22H NONLINEAR PARAMETERS-,2E15.5) WRITE(IWRITE, 50)(C(I),I=1,L) 50 FORMAT(19H LINEAR PARAMETERS-, 3E15.5) STOP END SUBROUTINE OSBA(N,P,L,X,NF,A) C THIS SUBROUTINE COMPUTES THE MODEL INTEGER P, N, NF, L REAL X(P), A(N,L) REAL T(10) COMMON /TT/ T DO 10 I=1,N A(I,1)=1.0 A(I,2)=EXP(X(1)*T(I)) A(I,3)=EXP(X(2)*T(I)) 10 CONTINUE RETURN END SUBROUTINE OSBB(N,P,L,X,NF,B) C THIS SUBROUTINE COMPUTES THE NONZERO DERIVATIVES OF B INTEGER N,P,L,NF REAL X(P), B(N,L) REAL T(10) COMMON /TT/ T DO 10 I=1,N B(I,1)=T(I)*EXP(T(I)*X(1)) B(I,2)=T(I)*EXP(T(I)*X(2)) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ntlt.f000066400000000000000000000033521420247104600162260ustar00rootroot00000000000000C$TEST NTLT C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NTLT C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SNSFB C C*********************************************************************** INTEGER N,P,L INTEGER LP1, IINC,INC(4,2) EXTERNAL OSBA REAL Y(10),T(10),X(2),C(3),B(2,2) COMMON /TT/T C GENERATE DATA FOR PROBLEM DATA Y(1)/8.44E-1/, Y(2) /9.36E-1/, Y(3) /8.81E-1/ 1 Y(4)/7.84E-1/, Y(5)/ 6.85E-1/, Y(6)/6.03E-1/, 2 Y(7) /5.38E-1/ , Y(8) /4.90E-1/, Y(9)/4.57E-1/ P=2 N=9 L=3 DO 10 I=1,9 T(I)=-30.E0*FLOAT(I-1) 10 CONTINUE C INITIALIZE X X(1)=.01 X(2)=.03 C GENERATE THE INCIDENCE MATRIX LP1=L+1 DO 30 J=1,P DO 20 I=1,LP1 INC(I,J)=0 20 CONTINUE 30 CONTINUE INC(2,1)=1 INC(3,2)=1 IINC=LP1 C SUPPLY BOUNDS B(1,1)=-R1MACH(2) B(2,1)=0.125 B(1,2)=.03 B(2,2)=R1MACH(2) C C SOLVE THE PROBLEM C CALL SNSFB(N, P, L, X, B, C, Y, OSBA, INC, IINC, 100, 1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE = I1MACH(2) WRITE(IWRITE, 40)(X(I),I=1,P) 40 FORMAT(22H NONLINEAR PARAMETERS-,2E15.5) WRITE(IWRITE, 50)(C(I),I=1,L) 50 FORMAT(19H LINEAR PARAMETERS-, 3E15.5) STOP END SUBROUTINE OSBA(N,P,L,X,NF,A) C THIS SUBROUTINE COMPUTES THE MODEL INTEGER P, N, NF, L REAL X(P), A(N,L) REAL T(10) COMMON /TT/ T DO 10 I=1,N A(I,1)=1.0 A(I,2)=EXP(X(1)*T(I)) A(I,3)=EXP(X(2)*T(I)) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ntlu.f000066400000000000000000000040461420247104600162300ustar00rootroot00000000000000C$TEST NTLU C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE NTLU C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SNSGB C C*********************************************************************** INTEGER N,P,L INTEGER LP1, IINC,INC(4,2) EXTERNAL OSBA, OSBB REAL Y(10),T(10),X(2),C(3),B(2,2) COMMON /TT/T C GENERATE DATA FOR PROBLEM DATA Y(1)/8.44E-1/, Y(2) /9.36E-1/, Y(3) /8.81E-1/ 1 Y(4)/7.84E-1/, Y(5)/ 6.85E-1/, Y(6)/6.03E-1/, 2 Y(7) /5.38E-1/ , Y(8) /4.90E-1/, Y(9)/4.57E-1/ P=2 N=9 L=3 DO 10 I=1,9 T(I)=-30.E0*FLOAT(I-1) 10 CONTINUE C INITIALIZE X X(1)=.01 X(2)=.03 C GENERATE THE INCIDENCE MATRIX LP1=L+1 DO 30 J=1,P DO 20 I=1,LP1 INC(I,J)=0 20 CONTINUE 30 CONTINUE INC(2,1)=1 INC(3,2)=1 IINC=LP1 C SPECIFY BOUNDS B(1,1)=-R1MACH(2) B(2,1)=0.125 B(1,2)=.03 B(2,2)=R1MACH(2) C C SOLVE THE PROBLEM C CALL SNSGB(N,P,L,X,B,C,Y,OSBA,OSBB,INC,IINC,100,1.E-4) C PRINT RESULTS ON STANDARD OUTPUT UNIT IWRITE = I1MACH(2) WRITE(IWRITE, 40)(X(I),I=1,P) 40 FORMAT(22H NONLINEAR PARAMETERS-,2E15.5) WRITE(IWRITE, 50)(C(I),I=1,L) 50 FORMAT(19H LINEAR PARAMETERS-, 3E15.5) STOP END SUBROUTINE OSBA(N,P,L,X,NF,A) C THIS SUBROUTINE COMPUTES THE MODEL INTEGER P, N, NF, L REAL X(P), A(N,L) REAL T(10) COMMON /TT/ T DO 10 I=1,N A(I,1)=1.0 A(I,2)=EXP(X(1)*T(I)) A(I,3)=EXP(X(2)*T(I)) 10 CONTINUE RETURN END SUBROUTINE OSBB(N,P,L,X,NF,B) C THIS SUBROUTINE COMPUTES THE NONZERO DERIVATIVES OF B INTEGER N,P,L,NF REAL X(P), B(N,L) REAL T(10) COMMON /TT/ T DO 10 I=1,N B(I,1)=T(I)*EXP(T(I)*X(1)) B(I,2)=T(I)*EXP(T(I)*X(2)) 10 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/pdea.f000066400000000000000000000073151420247104600161610ustar00rootroot00000000000000C$TEST PDEA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PDEA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM POST C C*********************************************************************** REAL TSTOP,V( 1 ),DT,MESH( 100 ),U( 100 ) REAL ERRPAR( 2 ) INTEGER K,NMESH,NDX,NU,NV EXTERNAL AF,BC,DEE,HANDLE,UOFX C COMMON/TIME/TT REAL TT COMMON/CSTAK/DS( 2000 ) DOUBLEPRECISION DS REAL WS( 1000 ) REAL RS( 1000 ) INTEGER IS( 1000 ) LOGICAL LS( 1000 ) EQUIVALENCE( DS( 1 ),WS( 1 ),RS( 1 ),IS( 1 ),LS( 1 ) ) C C INITIALIZE THE PORT STACK LENGTH C CALL ISTKIN( 2000,4 ) C NU = 1 NV = 1 C C SET THE ERROR CRITERION FOR ABSOLUTE ERROR C ERRPAR( 1 ) = 0 ERRPAR( 2 ) = 1.E-2 C TSTOP = 8.*ATAN( 1.E0 ) DT = 0.4 C C MAKE A MESH OF NDX UNIFORM POINTS ON (-PI, +PI) C K = 4 NDX = 7 CALL UMB( - 4.*ATAN( 1.E0 ), + 4.*ATAN( 1.E0 ),NDX,K,MESH,NMESH ) TT = 0 C C SET THE INITIAL CONDITIONS FOR U C CALL L2SFF( UOFX,K,MESH,NMESH,U ) C C SET THE INITIAL CONDITIONS FOR V C V( 1 ) = - 1. C CALL POST( U,NU,K,MESH,NMESH,V,NV,0E0,TSTOP,DT,AF,BC,DEE,ERRPAR,HA *NDLE ) C STOP END SUBROUTINE AF( T,X,NX,U,UX,UT,UTX,NU,V,VT,NV,A,AU,AUX,AUT,AUTX,AV, *AVT,F,FU,FUX,FUT,FUTX,FV,FVT ) REAL T,X( NX ),U( NX,NU ),UX( NX,NU ),UT( NX,NU ),UTX( NX,NU ),V( *NV ),VT( NV ),A( NX,NU ),AU( NX,NU,NU ),AUX( NX,NU,NU ),AUT( NX,NU *,NU ),AUTX( NX,NU,NU ),AV( NX,NU,NV ),AVT( NX,NU,NV ),F( NX,NU ),F *U( NX,NU,NU ),FUX( NX,NU,NU ),FUT( NX,NU,NU ),FUTX( NX,NU,NU ),FV( * NX,NU,NV ),FVT( NX,NU,NV ) INTEGER NU,NV,NX INTEGER I DO 23000 I = 1,NX A( I,1 ) = - UX( I,1 ) AUX( I,1,1 ) = - 1 F( I,1 ) = - UT( I,1 ) - U( I,1 )**3 + SIN( X( I ) )*( COS( T ) - * SIN( T ) + SIN( X( I ) )**2*COS( T )**3 ) FUT( I,1,1 ) = - 1 FU( I,1,1 ) = - 3*U( I,1 )**2 23000 CONTINUE RETURN END SUBROUTINE BC( T,L,R,U,UX,UT,UTX,NU,V,VT,NV,B,BU,BUX,BUT,BUTX,BV,B *VT ) REAL T,L,R,U( NU,2 ),UX( NU,2 ),UT( NU,2 ),UTX( NU,2 ),V( NV ),VT( * NV ),B( NU,2 ),BU( NU,NU,2 ),BUX( NU,NU,2 ),BUT( NU,NU,2 ),BUTX( *NU,NU,2 ),BV( NU,NV,2 ),BVT( NU,NV,2 ) INTEGER NU,NV B( 1,1 ) = UX( 1,1 ) - V( 1 ) B( 1,2 ) = UX( 1,2 ) - V( 1 ) BUX( 1,1,1 ) = 1 BV( 1,1,1 ) = - 1 BUX( 1,1,2 ) = 1 BV( 1,1,2 ) = - 1 RETURN END SUBROUTINE DEE( T,K,X,NX,U,UT,NU,NXMK,V,VT,NV,D,DU,DUT,DV,DVT ) REAL T,X( NX ),U( NXMK,NU ),UT( NXMK,NU ),V( NV ),VT( NV ),D( NV ) *,DU( NV,NXMK,NU ),DUT( NV,NXMK,NU ),DV( NV,NV ),DVT( NV,NV ) INTEGER K,NX,NU,NXMK,NV D( 1 ) = U( 1,1 ) - U( NX - K,1 ) DU( 1,1,1 ) = 1 DU( 1,NX - K,1 ) = - 1 RETURN END SUBROUTINE HANDLE( T0,U0,V0,T,U,V,NU,NXMK,NV,K,X,NX,DT,TSTOP ) REAL T0,U0( NXMK,NU ),V0( NV ),T,U( NXMK,NU ),V( NV ),X( NX ),DT,T *STOP INTEGER NU,NXMK,NV,K,NX COMMON/TIME/TT REAL TT REAL EU,EESFF,EV INTEGER I1MACH EXTERNAL UOFX IF( T0 .EQ. T )GO TO 23002 GO TO 23003 23002 CONTINUE RETURN 23003 CONTINUE TT = T EU = EESFF( K,X,NX,U,UOFX ) EV = V( 1 ) + COS( T ) IWUNIT = I1MACH( 2 ) WRITE( IWUNIT,9001 )T,EU,EV 9001 FORMAT( 14H ERROR IN U(X,,1P1E10.2,4H ) =,1P1E10.2,6H V =,1P4E10 *.2 ) RETURN END SUBROUTINE UOFX( X,NX,U,W ) REAL X( NX ),U( NX ),W( NX ) INTEGER NX COMMON/TIME/T REAL T INTEGER I DO 23005 I = 1,NX U( I ) = SIN( X( I ) )*COS( T ) 23005 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/pdew.f000066400000000000000000000157771420247104600162220ustar00rootroot00000000000000C$TEST PDEW C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PDEW C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM POSTU C C*********************************************************************** C THE PORT STACK C COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) REAL WS(1000) EQUIVALENCE (DS(1),WS(1)) C C TIME FOR THE FUNCTION UOFX. C COMMON /TIME/ T REAL T C C MAPPING PARAMETERS FOR UOFX. C COMMON /PARAM/ VC, X REAL VC(4), X(3) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, K, IMMM, ISTKGT INTEGER NU, NV, IMESH, ILUMB, NMESH REAL ERRPAR(2), TSTART, TSTOP, V(4), DT, XB(3), U(1000) C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 4 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTART = 0 TSTOP = 3.14 DT = 0.4 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = ILUMB(XB, 3, NDX, K, NMESH) C MAKE 1 OF MULTIPLICITY K-1. IMESH = IMMM(IMESH, NMESH, 1E0, K-1) X(1) = -3.14 X(2) = 3.14/2. X(3) = 3.14 C INITIAL VALUES FOR V. CALL LPLMG(3, X, VC) C GET U ON THE PORT STACK. IU = ISTKGT(NMESH-K, 3) C UOFX NEEDS TIME. T = TSTART C THE INITIAL HEIGHT OF THE JUMP. VC(4) = 1 C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL L2SFF(UOFX, K, WS(IMESH), NMESH, U) C OUTPUT ICS. CALL HANDLE(T-1., U, V, T, U, V, NU, NMESH-K, NV, K, WS( 1 IMESH), NMESH, DT, TSTOP) CALL POST(U, NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP, 1 DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, * A, AU, AUX, AUT, AUTX, AV, AVT, * F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), * A(NX,NU),AU(NX,NU,NU),AUX(NX,NU,NU),AUT(NX,NU,NU), * AUTX(NX,NU,NU),AV(NX,NU,NV),AVT(NX,NU,NV), * F(NX,NU),FU(NX,NU,NU),FUX(NX,NU,NU),FUT(NX,NU,NU), * FUTX(NX,NU,NU),FV(NX,NU,NV),FVT(NX,NU,NV) COMMON /POSTF/ FAILED LOGICAL FAILED INTEGER I REAL COS, SIN, XXI(99), XTV(99), XVV(99), X(99) REAL XXIV(99), AX(99), FX(99), XT(99), XV(99) LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL LPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL POSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 4 I = 1, NX A(I, 1) = -U(I, 1) AU(I, 1, 1) = -1 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 IF (XI(I) .GT. 1.) GOTO 2 F(I, 1) = F(I, 1)-2.*COS(X(I)+T) FX(I) = 2.*SIN(X(I)+T) GOTO 3 2 F(I, 1) = F(I, 1)-VT(4) FVT(I, 1, 4) = -1 F(I, 1) = F(I, 1)+2.*SIN(X(I)+T) FX(I) = 2.*COS(X(I)+T) 3 CONTINUE 4 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL POSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V 1 , VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU 2 , FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, * B, BU, BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T,L,R,U(NU,2),UX(NU,2),UT(NU,2),UTX(NU,2),V(NV),VT(NV) REAL B(NU,2),BU(NU,NU,2),BUX(NU,NU,2),BUT(NU,NU,2),BUTX(NU,NU,2), * BV(NU,NV,2),BVT(NU,NV,2) B(1, 1) = U(1, 1)-SIN(T-3.14) C U(-PI,T) = SIN(-PI+T). BU(1, 1, 1) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, * D, DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX, K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV),DU(NV,NXMK,NU),DUT(NV,NXMK,NU),DV(NV,NV),DVT(NV,NV) INTEGER INTRVR, I, ILEFT REAL BX(10), XX(1), R1MACH INTEGER TEMP D(1) = V(1)+3.14 C X(0,V) = -PI. DV(1, 1) = 1 C XX(1) = 1 + A ROUNDING ERROR. XX(1) = R1MACH(4)+1. ILEFT = INTRVR(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL BSPLN(K, X, NX, XX, 1, ILEFT, BX) D(2) = -V(4) C U(X(T)+,T) - JUMP = 0. DV(2, 4) = -1 DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-3.14 C X(2,V) = +PI. DV(3, 3) = 1 C JUMP + D( X(1,V(T)) )/DT = 0. D(4) = VT(2)+V(4) DVT(4, 2) = 1 DV(4, 4) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, * K, X, NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX, K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV), * X(NX), DT, TSTOP COMMON /PARAM/ VC, XX REAL VC(4), XX(3) COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF, EV(2) INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN 2 TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, V, VC) EU = EESFF(K, X, NX, U, UOFX) C ERROR IN POSITION OF SHOCK. EV(1) = V(2)-(3.14/2.-T) C ERROR IN HEIGHT OF SHOCK. EV(2) = V(4)-1. TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 2( 1 1PE10.2)) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX REAL XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /PARAM/ VC, X REAL VC(4), X(3) COMMON /TIME/ T REAL T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL EWE, RS(1000), WS(1000) LOGICAL LS(1000) INTEGER TEMP EQUIVALENCE (DS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 3) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 3) C MAP INTO USER SYSTEM. CALL LPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 1 I = 1, NX TEMP = IXX+I U(I) = EWE(T, WS(TEMP-1), VC(2)) IF (XI(I) .GT. 1.) U(I) = U(I)+1. 1 CONTINUE CALL LEAVE RETURN END REAL FUNCTION EWE(T, X, XBREAK) REAL T, X, XBREAK REAL COS, SIN IF (X .GE. XBREAK) GOTO 1 EWE = SIN(X+T) RETURN 1 IF (X .LE. XBREAK) GOTO 2 EWE = COS(X+T) RETURN C/6S 2 CALL SETERR(17HEWE - X == XBREAK, 17, 1, 2) C/7S C 2 CALL SETERR('EWE - X == XBREAK', 17, 1, 2) C/ 3 CONTINUE 4 STOP END PyBDSF-1.10.1/src/port3/ex/postx1.f000066400000000000000000000064311420247104600165040ustar00rootroot00000000000000C$TEST PST1 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST1 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(1000) EXTERNAL HANDLE, BC, AF, POSTD INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), U(100), V(1), MESH(100), DT, RS(1000) REAL WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = U SUB XX + F ON (0,1) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(1000, 4) NU = 1 NV = 0 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1E-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 4 CALL UMB(0E0, 1E0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETR(NMESH-K, 1E0, U) CALL POST(U, NU, K, MESH, NMESH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 POSTD, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), AUT( 1 NX, NU, NU) REAL AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU(NX, NU, NU), 1 FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I REAL EXP DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (X(I)-T**2)*EXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), BUX(NU, NU, 1 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) REAL EXP B(1, 1) = U(1, 1)-1. B(1, 2) = U(1, 2)-EXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K REAL T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = EESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = EXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/postx10.f000066400000000000000000000111521420247104600165600ustar00rootroot00000000000000C$TEST PSTT C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PSTT C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL HANDLE, BC, AF, POSTD INTEGER NDX, NXH, I, K, IS(1000), NU INTEGER NV, NX, I1MACH REAL ABS, ERR, ERRPAR(2), U(100), V(1), X(100) REAL AMAX1, DT, UE(100), EEBSF, UH(100), XH(100) REAL RS(1000), WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO ESTIMATE X AND T ERROR AS SUM. C U SUB T = U SUB XX + F ON (0,1) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 0 ERRPAR(1) = 0 ERRPAR(2) = 1E-2 K = 4 NDX = 4 TSTOP = 1 DT = 1E-2 C CRUDE MESH. CALL UMB(0E0, 1E0, NDX, K, X, NX) C INITIAL CONDITIONS FOR U. CALL SETR(NX-K, 1E0, U) TEMP = I1MACH(2) WRITE (TEMP, 1) 1 FORMAT (36H SOLVING ON CRUDE MESH USING ERRPAR.) CALL POST(U, NU, K, X, NX, V, NV, 0E0, TSTOP, DT, AF, BC, POSTD, 1 ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL POSTX C HALVE THE MESH SPACING. CALL UMB(0E0, 1E0, 2*NDX-1, K, XH, NXH) C INITIAL CONDITIONS FOR UH. CALL SETR(NXH-K, 1E0, UH) DT = 1E-2 TEMP = I1MACH(2) WRITE (TEMP, 2) 2 FORMAT (38H SOLVING ON REFINED MESH USING ERRPAR.) CALL POST(UH, NU, K, XH, NXH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 POSTD, ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL POSTX C ESTIMATE U ERROR. ERR = EEBSF(K, X, NX, U, XH, NXH, UH) WRITE (6, 3) ERR 3 FORMAT (24H U ERROR FROM U AND UH =, 1PE10.2) C INITIAL CONDITIONS FOR UE. CALL SETR(NX-K, 1E0, UE) DT = 1E-2 ERRPAR(1) = ERRPAR(1)/10. ERRPAR(2) = ERRPAR(2)/10. TEMP = I1MACH(2) WRITE (TEMP, 4) 4 FORMAT (39H SOLVING ON CRUDE MESH USING ERRPAR/10.) CALL POST(UE, NU, K, X, NX, V, NV, 0E0, TSTOP, DT, AF, BC, POSTD 1 , ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL POSTX ERR = 0 TEMP = NX-K DO 5 I = 1, TEMP ERR = AMAX1(ERR, ABS(U(I)-UE(I))) 5 CONTINUE WRITE (6, 6) ERR 6 FORMAT (24H U ERROR FROM U AND UE =, 1PE10.2) STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), AUT( 1 NX, NU, NU) REAL AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU(NX, NU, NU), 1 FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I REAL EXP DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (X(I)-T**2)*EXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), BUX(NU, NU, 1 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) REAL EXP B(1, 1) = U(1, 1)-1. B(1, 2) = U(1, 2)-EXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K REAL T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T EU = EESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = EXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/postx2.f000066400000000000000000000077001420247104600165050ustar00rootroot00000000000000C$TEST PST2 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST2 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(1100) EXTERNAL HANDLE, BC, AF, POSTD INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), U(200), V(1), MESH(100), DT, RS(1000) REAL WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = U SUB XX + F ON (0,1) C BY SETTING U1 = U AND U2 = U1 SUB X AND SOLVING C U1 SUB T = U1 SUB XX + F C ON (0,1) C U1 SUB X = U2 C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(1100, 4) NU = 2 NV = 0 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1E-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 4 CALL UMB(0E0, 1E0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U1. CALL SETR(NMESH-K, 1E0, U) C INITIAL CONDITIONS FOR U2. TEMP = NMESH-K CALL SETR(NMESH-K, 0E0, U(TEMP+1)) CALL POST(U, NU, K, MESH, NMESH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 POSTD, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), AUT( 1 NX, NU, NU) REAL AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU(NX, NU, NU), 1 FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I REAL EXP DO 1 I = 1, NX A(I, 1) = -U(I, 2) AU(I, 1, 2) = -1 F(I, 1) = (X(I)-T**2)*EXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 A(I, 2) = U(I, 1) AU(I, 2, 1) = 1 F(I, 2) = U(I, 2) FU(I, 2, 2) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), BUX(NU, NU, 1 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) REAL EXP B(1, 1) = U(1, 1)-1. B(1, 2) = U(1, 2)-EXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K REAL T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL U1OFX, U2OFX INTEGER I1MACH REAL EU(2), EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C U1OFX AND U2OFX NEED TIME. TT = T EU(1) = EESFF(K, X, NX, U, U1OFX) EU(2) = EESFF(K, X, NX, U(1, 2), U2OFX) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 2(1PE10.2)) RETURN END SUBROUTINE U1OFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = EXP(X(I)*T) 1 CONTINUE RETURN END SUBROUTINE U2OFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = T*EXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/postx3.f000066400000000000000000000107121420247104600165030ustar00rootroot00000000000000C$TEST PST3 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST3 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL DEE, HANDLE, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), U(100), V(1), MESH(100), DT, RS(1000) REAL WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = U SUB XX + V + F ON (0,1) C V SUB T = U( 1/2, T ) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = COS(XT) AND V(T) = 2 SIN(T/2). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 1 ERRPAR(1) = 1E-2 C ESSENTIALLY RELATIVE ERROR. ERRPAR(2) = 1E-6 TSTOP = 1 DT = 1E-6 K = 4 NDX = 4 C NDX UNIFORM MESH POINTS ON (0,1). CALL UMB(0E0, 1E0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETR(NMESH-K, 1E0, U) C INITIAL VALUE FOR V. V(1) = 0 CALL POST(U, NU, K, MESH, NMESH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) INTEGER I REAL COS, SIN DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = V(1)-UT(I, 1)-X(I)*SIN(X(I)*T)+T**2*COS(X(I)*T)-2.* 1 SIN(T/2.) FUT(I, 1, 1) = -1 FV(I, 1, 1) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) REAL COS B(1, 1) = U(1, 1)-1. B(1, 2) = U(1, 2)-COS(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) INTEGER INTRVR, I, ILEFT REAL XI(1), BASIS(10) INTEGER TEMP XI(1) = 0.5E0 C FIND 0.5 IN MESH. ILEFT = INTRVR(NX, X, XI(1)) IF (K .GT. 10) CALL SETERR( 1 41HDEE - K .GT. 10, NEED MORE SPACE IN BASIS, 41, 1, 2) C B-SPLINE BASIS AT XI(1). CALL BSPLN(K, X, NX, XI, 1, ILEFT, BASIS) D(1) = VT(1) DVT(1, 1) = 1 C VT(1) - U(0.5,T) = 0. DO 1 I = 1, K TEMP = ILEFT+I-K D(1) = D(1)-U(TEMP, 1)*BASIS(I) TEMP = ILEFT+I-K DU(1, TEMP, 1) = DU(1, TEMP, 1)-BASIS(I) 1 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL ABS, SIN, EU, EV, EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = EESFF(K, X, NX, U, UOFX) EV = ABS(V(1)-2.*SIN(T/2.)) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU, EV 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL COS DO 1 I = 1, NX U(I) = COS(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/postx4.f000066400000000000000000000102021420247104600164760ustar00rootroot00000000000000C$TEST PST4 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST4 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL DEE, HANDLE, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), U(100), V(1), ATAN, MESH(100), DT REAL RS(1000), WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = U SUB XX - U**3 + F ON (-PI,+PI) C SUBJECT TO PERIODIC BOUNDARY CONDITIONS, C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = COS(X)*SIN(T). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 1 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 8.*ATAN(1E0) DT = 0.4 C MAKE A MESH OF NDX UNIFORM POINTS ON (-PI,+PI). K = 4 NDX = 7 CALL UMB((-4.)*ATAN(1E0), 4.*ATAN(1E0), NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETR(NMESH-K, 0E0, U) C INITIAL CONDITIONS FOR V. V(1) = 0 CALL POST(U, NU, K, MESH, NMESH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) INTEGER I REAL COS, SIN DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (-UT(I, 1))-U(I, 1)**3+COS(X(I))*(COS(T)+SIN(T)+COS(X 1 (I))**2*SIN(T)**3) FUT(I, 1, 1) = -1 FU(I, 1, 1) = (-3.)*U(I, 1)**2 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) B(1, 1) = UX(1, 1)-V(1) B(1, 2) = UX(1, 2)-V(1) BUX(1, 1, 1) = 1 BV(1, 1, 1) = -1 BUX(1, 1, 2) = 1 BV(1, 1, 2) = -1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) INTEGER TEMP C U(-PI,T) - U(+PI,T) = 0. TEMP = NX-K D(1) = U(1, 1)-U(TEMP, 1) DU(1, 1, 1) = 1 TEMP = NX-K DU(1, TEMP, 1) = -1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF, EV INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = EESFF(K, X, NX, U, UOFX) EV = V(1) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU, EV 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL COS, SIN DO 1 I = 1, NX U(I) = COS(X(I))*SIN(T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/postx5.f000066400000000000000000000165601420247104600165140ustar00rootroot00000000000000C$TEST PST5 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST5 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T REAL T COMMON /PARAM/ VC, X REAL VC(3), X(3) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, ISTKGT, K, IMMM, IU, IS(1000) INTEGER NU, NV, IMESH, ILUMB, NMESH REAL ERRPAR(2), TSTART, V(3), DT, XB(3), RS(1000) REAL WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = ( K(T,X) * U SUB X ) SUB X + G ON (-1,+2) * (0,+1) C WITH A MOVING FRONT X(T) CHARACTERIZED BY U(X(T),T) == 1 AND C JUMP ACROSS X(T) OF K(T,X) U SUB X = - 3 * X'(T). C WHERE K(T,X) IS PIECEWISE CONSTANT, SAY C 1 FOR X < X(T) C K(T,X) = C 2 FOR X > X(T) C AND G IS CHOSEN SO THAT THE SOLUTION IS C EXP(X-X(T)) FOR X < X(T) C U(X,T) = C EXP(X(T)-X) FOR X > X(T) C AND X(1,T) = T. THE MOVING FRONT IS TRACKED C IMPLICITLY BY FORCING U(X(1,T),T) = 1 AS A PSEUDO-RANKINE-HEUGONIOT RE CLATION. C V(1,2,3) GIVES THE MOVING MESH. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 3 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTART = 0 TSTOP = 1 DT = 0.1 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB ARRAY. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = ILUMB(XB, 3, NDX, K, NMESH) C MAKE 1 OF MULTIPLICITY K-1. IMESH = IMMM(IMESH, NMESH, 1E0, K-1) X(1) = -1 X(2) = 0 X(3) = 2 C INITIAL VALUES FOR V. CALL LPLMG(3, X, VC) C GET U ON THE PORT STACK. IU = ISTKGT(NMESH-K, 3) C UOFX NEEDS TIME. T = TSTART C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL L2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT THE ICS. CALL HANDLE(T-1., WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, WS( 1 IMESH), NMESH, DT, TSTOP) CALL POST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP, 1 DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) COMMON /POSTF/ FAILED LOGICAL FAILED INTEGER I REAL KAY, EXP, XXI(99), XTV(99), XVV(99), X(99) REAL XXIV(99), AX(99), FX(99), XT(99), XV(99) LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL LPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL POSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 7 I = 1, NX IF (XI(I) .GT. 1.) GOTO 2 KAY = 1 GOTO 3 2 KAY = 2 3 A(I, 1) = KAY*UX(I, 1) AUX(I, 1, 1) = KAY IF (XI(I) .GT. 1.) GOTO 4 A(I, 1) = A(I, 1)-3.*VT(2) AVT(I, 1, 2) = -3 4 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 IF (XI(I) .GT. 1.) GOTO 5 F(I, 1) = F(I, 1)+2.*EXP(X(I)-T) FX(I) = 2.*EXP(X(I)-T) GOTO 6 5 F(I, 1) = F(I, 1)+EXP(T-X(I)) FX(I) = -EXP(T-X(I)) 6 CONTINUE 7 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL POSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V 1 , VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU 2 , FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) REAL EXP B(1, 1) = U(1, 1)-EXP((-1.)-T) B(1, 2) = U(1, 2)-EXP(T-2.) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) INTEGER INTRVR, I, ILEFT REAL BX(10), XX(1) INTEGER TEMP D(1) = V(1)+1. C X(0,V) = -1. DV(1, 1) = 1 XX(1) = 1 C FIND 1 IN THE MESH. ILEFT = INTRVR(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL BSPLN(K, X, NX, XX, 1, ILEFT, BX) C U(X(1,V),T) = 1. D(2) = -1 DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-2. C X(2,V) = +2. DV(3, 3) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /PARAM/ VC, XX REAL VC(3), XX(3) COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF, EV(3) INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, V, VC) EU = EESFF(K, X, NX, U, UOFX) EV(1) = V(1)+1. EV(2) = V(2)-T EV(3) = V(3)-2. TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 3( 1 1PE10.2)) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX REAL XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X REAL VC(3), X(3) COMMON /TIME/ T REAL T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL EXP, RS(1000), WS(1000), XOFXI LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 3) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 3) C MAP INTO USER SYSTEM. CALL LPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 3 I = 1, NX TEMP = IXX+I XOFXI = WS(TEMP-1) IF (XI(I) .GT. 1.) GOTO 1 U(I) = EXP(XOFXI-T) GOTO 2 1 U(I) = EXP(T-XOFXI) 2 CONTINUE 3 CONTINUE CALL LEAVE RETURN END PyBDSF-1.10.1/src/port3/ex/postx6.f000066400000000000000000000170321420247104600165100ustar00rootroot00000000000000C$TEST PST6 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST6 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T REAL T COMMON /PARAM/ VC, X REAL VC(4), X(3) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, ISTKGT, K, IMMM, IU, IS(1000) INTEGER NU, NV, IMESH, ILUMB, NMESH REAL ERRPAR(2), TSTART, V(4), DT, XB(3), RS(1000) REAL WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON THE HYPERBOLIC PROBLEM C U SUB T = - U SUB X + G ON (-PI,+PI) * (0,PI) C WITH A MOVING SHOCK X(T) CHARACTERIZED BY C U(X(T)+,T) = 0 AND C U(X(T)+,T) - U(X(T)-,T) = X'(T) C WHERE G IS CHOSEN SO THAT THE SOLUTION IS C SIN(X+T) FOR X < X(T) C U(X,T) = C COS(X+T) FOR X > X(T) C WITH X(T) = PI/2 -T . C V(1,2,3) GIVES THE MOVING MESH AND V(4) IS THE HEIGHT OF THE JUMP. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 4 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTART = 0 TSTOP = 3.14 DT = 0.4 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = ILUMB(XB, 3, NDX, K, NMESH) C MAKE 1 OF MULTIPLICITY K-1. IMESH = IMMM(IMESH, NMESH, 1E0, K-1) X(1) = -3.14 X(2) = 3.14/2. X(3) = 3.14 C INITIAL VALUES FOR V. CALL LPLMG(3, X, VC) C GET U ON THE PORT STACK. IU = ISTKGT(NMESH-K, 3) C UOFX NEEDS TIME. T = TSTART C THE INITIAL HEIGHT OF THE JUMP. VC(4) = 1 C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL L2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT ICS. CALL HANDLE(T-1., WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, WS( 1 IMESH), NMESH, DT, TSTOP) CALL POST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP, 1 DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) COMMON /POSTF/ FAILED LOGICAL FAILED INTEGER I REAL COS, SIN, XXI(99), XTV(99), XVV(99), X(99) REAL XXIV(99), AX(99), FX(99), XT(99), XV(99) LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL LPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL POSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 4 I = 1, NX A(I, 1) = -U(I, 1) AU(I, 1, 1) = -1 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 IF (XI(I) .GT. 1.) GOTO 2 F(I, 1) = F(I, 1)-2.*COS(X(I)+T) FX(I) = 2.*SIN(X(I)+T) GOTO 3 2 F(I, 1) = F(I, 1)-VT(4) FVT(I, 1, 4) = -1 F(I, 1) = F(I, 1)+2.*SIN(X(I)+T) FX(I) = 2.*COS(X(I)+T) 3 CONTINUE 4 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL POSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V 1 , VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU 2 , FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) REAL SIN B(1, 1) = U(1, 1)-SIN(T-3.14) C U(-PI,T) = SIN(-PI+T). BU(1, 1, 1) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) INTEGER INTRVR, I, ILEFT REAL BX(10), XX(1), R1MACH INTEGER TEMP D(1) = V(1)+3.14 C X(0,V) = -PI. DV(1, 1) = 1 C XX(1) = 1 + A ROUNDING ERROR. XX(1) = R1MACH(4)+1. ILEFT = INTRVR(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL BSPLN(K, X, NX, XX, 1, ILEFT, BX) D(2) = -V(4) C U(X(T)+,T) - JUMP = 0. DV(2, 4) = -1 DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-3.14 C X(2,V) = +PI. DV(3, 3) = 1 C JUMP + D( X(1,V(T)) )/DT = 0. D(4) = VT(2)+V(4) DVT(4, 2) = 1 DV(4, 4) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /PARAM/ VC, XX REAL VC(4), XX(3) COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF, EV(2) INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN 2 TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, V, VC) EU = EESFF(K, X, NX, U, UOFX) C ERROR IN POSITION OF SHOCK. EV(1) = V(2)-(3.14/2.-T) C ERROR IN HEIGHT OF SHOCK. EV(2) = V(4)-1. TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 2( 1 1PE10.2)) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX REAL XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X REAL VC(4), X(3) COMMON /TIME/ T REAL T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL EWE, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 3) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 3) C MAP INTO USER SYSTEM. CALL LPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 1 I = 1, NX TEMP = IXX+I U(I) = EWE(T, WS(TEMP-1), VC(2)) IF (XI(I) .GT. 1.) U(I) = U(I)+1. 1 CONTINUE CALL LEAVE RETURN END REAL FUNCTION EWE(T, X, XBREAK) REAL T, X, XBREAK REAL COS, SIN IF (X .GE. XBREAK) GOTO 1 EWE = SIN(X+T) RETURN 1 IF (X .LE. XBREAK) GOTO 2 EWE = COS(X+T) RETURN 2 CALL SETERR(17HEWE - X == XBREAK, 17, 1, 2) 3 CONTINUE 4 STOP END PyBDSF-1.10.1/src/port3/ex/postx7.f000066400000000000000000000162421420247104600165130ustar00rootroot00000000000000C$TEST PST7 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST7 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T REAL T COMMON /PARAM/ VC, X, XI0 REAL VC(4), X(3), XI0 EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, ISTKGT, K, IMMM, IU, IS(1000) INTEGER NU, NV, IMESH, ILUMB, NMESH REAL ERRPAR(2), TSTART, D, V(4), DT, XB(3) REAL RS(1000), WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = U SUB XX + F ON (20,10**6) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(-X*T), C AND X(1,T) IS CHOSEN SO THAT THE BOUNDARY-LAYER IS TRACKED C IMPLICITLY BY FORCING U(X(1,T)/2.3/D,T) = 1/E. C THIS IS THE SAME AS REQUIRING THE EXACT SOLUTION TO HAVE C U(X(1,T),T) = 10 ** -D. C V(1,2,3) GIVES THE MOVING MESH, V(4) IS TIME. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 4 ERRPAR(1) = 1E-2 C MIXED RELATIVE AND ABSOLUTE ERROR. ERRPAR(2) = 1E-2 D = 3 C W(XI0,T) = 1/E. XI0 = 1./2.3/D TSTART = 20 TSTOP = 1E+6 DT = 1E-2 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = ILUMB(XB, 3, NDX, K, NMESH) C MAKE 1D0 OF MULTIPLICITY K-1. IMESH = IMMM(IMESH, NMESH, 1E0, K-1) X(1) = 0 X(2) = 2.3*D/TSTART X(3) = 1 C INITIAL VALUES FOR V. CALL LPLMG(3, X, VC) C GET U ON PORT STACK. IU = ISTKGT(NMESH-K, 3) C UOFX NEEDS TIME. T = TSTART VC(4) = TSTART C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL L2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT ICS. CALL HANDLE(T-1., WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, WS( 1 IMESH), NMESH, DT, TSTOP) CALL POST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP, 1 DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) COMMON /POSTF/ FAILED LOGICAL FAILED INTEGER I REAL XXI(99), XTV(99), XVV(99), X(99), EXPL, XXIV(99) REAL AX(99), FX(99), XT(99), XV(99) LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL LPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL POSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 2 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (-UT(I, 1))-EXPL((-X(I))*V(4))*(X(I)+V(4)**2) FUT(I, 1, 1) = -1 FV(I, 1, 4) = (-EXPL((-X(I))*V(4)))*(2.*V(4)+(X(I)+V(4)**2)*(-X 1 (I))) FX(I) = (-EXPL((-X(I))*V(4)))*(1.-V(4)*X(I)-V(4)**3) 2 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL POSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V 1 , VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU 2 , FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) REAL EXPL C U(0,T) = 1 B(1, 1) = U(1, 1)-1. C U(1,T) = EXP(-T) B(1, 2) = U(1, 2)-EXPL(-V(4)) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 BV(1, 4, 2) = EXPL(-V(4)) RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) COMMON /PARAM/ VC, XC, XI0 REAL VC(4), XC(3), XI0 INTEGER INTRVR, I, ILEFT REAL EXP, BX(10), XX(1) INTEGER TEMP D(1) = V(1) C X(0,V) = 0. DV(1, 1) = 1 XX(1) = XI0 ILEFT = INTRVR(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL BSPLN(K, X, NX, XX, 1, ILEFT, BX) D(2) = -EXP(-1E0) C D(2) = W(XI0,T) - EXP(-1). DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-1. C X(2,V) = 1. DV(3, 3) = 1 D(4) = VT(4)-1. DVT(4, 4) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /PARAM/ VC, XX, XI0 REAL VC(4), XX(3), XI0 COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF, EV, LPLMT INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN C LET DT CARRY V(2) DOWN BY NO MORE THAN A FACTOR OF 10. 2 DT = LPLMT(T, V, NV, T0, V0, 1E-1, DT) TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, V, VC) EU = EESFF(K, X, NX, U, UOFX) C ERROR IN POSITION OF BOUNDARY LAYER. EV = V(2)-1./XI0/T TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX REAL XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X, XI0 REAL VC(4), X(3), XI0 COMMON /TIME/ T REAL T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL EXPL, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 3) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 3) C MAP INTO USER SYSTEM. CALL LPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 1 I = 1, NX TEMP = IXX+I U(I) = EXPL((-WS(TEMP-1))*T) 1 CONTINUE CALL LEAVE RETURN END PyBDSF-1.10.1/src/port3/ex/postx8.f000066400000000000000000000151051420247104600165110ustar00rootroot00000000000000C$TEST PST8 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST8 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(5000) COMMON /TIME/ T REAL T COMMON /KMESH/ K, NMESH INTEGER K, NMESH COMMON /CMESH/ MESH REAL MESH(100) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, I, IS(1000), NU, NV REAL ERRPAR(2), U(100), V(100), DT, RS(1000), WS(1000) REAL TSTOP LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON THE INTEGRO-PDE C U SUB T = 2 * U SUB XX - INT(0,1) EXP(X-Y)*U(Y) DY ON (0,1) C SUBJECT TO GIVEN DIRICHLET BCS, CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(T+X). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(5000, 4) NU = 1 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1E-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 7 CALL UMB(0E0, 1E0, NDX, K, MESH, NMESH) NV = NMESH-K C UOFX NEEDS T. T = 0 C ICS FOR U. CALL L2SFF(UOFX, K, MESH, NMESH, U) TEMP = NMESH-K DO 1 I = 1, TEMP V(I) = U(I) 1 CONTINUE C ICS FOR V. CALL POST(U, NU, K, MESH, NMESH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) COMMON /KMESH/ K, NMESH INTEGER K, NMESH COMMON /CMESH/ MESH REAL MESH(100) INTEGER I DO 1 I = 1, NX A(I, 1) = 2.*UX(I, 1) AUX(I, 1, 1) = 2 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 1 CONTINUE C GET THE INTEGRAL. CALL INTGRL(K, MESH, NMESH, V, X, NX, F, FV) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) REAL EXP B(1, 1) = U(1, 1)-EXP(T) B(1, 2) = U(1, 2)-EXP(T+1.) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) INTEGER I DO 1 I = 1, NXMK D(I) = U(I, 1)-V(I) DU(I, I, 1) = 1 DV(I, I) = -1 1 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T0, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN 2 TT = T EU = EESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = EXP(T+X(I)) 1 CONTINUE RETURN END SUBROUTINE INTGRL(K, MESH, NMESH, V, X, NX, F, FV) INTEGER NX, NMESH INTEGER K REAL MESH(NMESH), V(1), X(NX), F(NX), FV(NX, 1) INTEGER MGQ, I, J, L, IX REAL EWE, KER, WGQ(3), XGQ(3), B(3, 4, 200), KERU REAL XX(3) LOGICAL FIRST INTEGER TEMP, TEMP1 DATA FIRST/.TRUE./ C TO COMPUTE C F = INTEGRAL FROM MESH(1) TO MESH(NMESH) C KERNEL(X,Y,SUM(I=1,...,NMESH-K) V(I)*B(I,Y)) DY C AND C FV = D(F)/D(V). C ASSUME THAT CALL KERNEL(X,Y,U,KER,KERU) RETURNS C KER = KERNEL(X,Y,U) AND C KERU = PARTIAL KERNEL / PARTIAL U. C V(NMESH-K),FV(NX,NMESH-K) C THE FOLLOWING DECLARATION IS SPECIFIC TO K = 4 SPLINES. IF (NMESH-K .GT. 200) CALL SETERR(27HINTGRL - NMESH-K .GT. NXMAX 1 , 27, 1, 2) C NEED MORE LOCAL SPACE. IF (K .NE. 4) CALL SETERR(17HINTGRL - K .NE. 4, 17, 2, 2) C USE K-1 POINT GAUSSIAN-QUADRATURE RULE ON EACH INTERVAL. MGQ = K-1 IF (FIRST) CALL GQM11(MGQ, XGQ, WGQ) C ONLY GET GQ RULE ONCE, ITS EXPENSIVE. C THE GAUSSIAN QUADRATURE RULE. C DO INTEGRAL INTERVAL BY INTERVAL. TEMP = NMESH-K DO 6 I = K, TEMP C G.Q. POINTS ON (MESH(I), MESH(I+1)). DO 1 J = 1, MGQ XX(J) = 0.5*(MESH(I+1)+MESH(I))+0.5*(MESH(I+1)-MESH(I))*XGQ( 1 J) 1 CONTINUE IF (FIRST) CALL BSPLN(K, MESH, NMESH, XX, MGQ, I, B(1, 1, I)) C ONLY GET B-SPLINE BASIS ONCE, ITS EXPENSIVE. DO 5 J = 1, MGQ C GET SUM() V()*B()(XX). EWE = 0 DO 2 L = 1, K TEMP1 = I+L-K EWE = EWE+V(TEMP1)*B(J, L, I) 2 CONTINUE DO 4 IX = 1, NX C GET KERNEL AND PARTIAL. CALL KERNEL(X(IX), XX(J), EWE, KER, KERU) F(IX) = F(IX)+0.5*KER*(MESH(I+1)-MESH(I))*WGQ(J) DO 3 L = 1, K TEMP1 = I+L-K FV(IX, TEMP1) = FV(IX, TEMP1)+0.5*B(J, L, I)*KERU*( 1 MESH(I+1)-MESH(I))*WGQ(J) 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE FIRST = .FALSE. RETURN END SUBROUTINE KERNEL(X, Y, U, KER, KERU) REAL X, Y, U, KER, KERU REAL EXP C TO EVALUATE THE KERNEL EXP(X-Y)*U(Y) AND ITS PARTIAL WRT. U. KERU = EXP(X-Y) KER = KERU*U RETURN END PyBDSF-1.10.1/src/port3/ex/postx9.f000066400000000000000000000110101420247104600165010ustar00rootroot00000000000000C$TEST PST9 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST9 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) COMMON /PARAM/ C REAL C EXTERNAL HANDLE, BC, AF, POSTD INTEGER NDX, NXC, NXX, I, K, IS(1000) INTEGER NU, NV, NX, I1MACH REAL EWE(1000), ERR, ERRPAR(2), U(100), V(1), X(100) REAL ERRR, DT, XC(100), UC(100), EEBSF, RS(1000) REAL WS(1000), XX(1000), TSTOP, R1MACH LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON AUTOMATIC, STATIC MESH REFINEMENT. C U SUB T = U SUB XX + C * U SUB X ON (0,1) C THE SOLUTION IS C U(X,T) = EXP(-C*X). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) C = 50 NU = 1 NV = 0 ERRPAR(1) = 1E-1 ERRPAR(2) = 1E-1 K = 4 NDX = 8 CALL UMB(0E0, 1E0, NDX, K, XC, NXC) C INITIAL CONDITIONS FOR UC. CALL SETR(NXC-K, 0E0, UC) C INFINITY. ERR = R1MACH(2) 1 IF (ERR .LE. 1E-2) GOTO 6 C HALVE THE CRUDE X. CALL LUMB(XC, NXC, 3, K, X, NX) C FITTING POINTS FOR REFINEMENT. CALL LUMD(X, NX, K, XX, NXX) C UC ON XX. CALL SPLNE(K, XC, NXC, UC, XX, NXX, EWE) C FIT U TO UC ON MESH. CALL DL2SF(XX, EWE, NXX, K, X, NX, U) TSTOP = 1./R1MACH(4) DT = 1E-6 I = NX-2*(K-1) TEMP = I1MACH(2) WRITE (TEMP, 2) I 2 FORMAT (18H SOLVING FOR NDX =, I3) CALL POST(U, NU, K, X, NX, V, NV, 0E0, TSTOP, DT, AF, BC, 1 POSTD, ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL POSTX C ERROR ESTIMATE FOR UC. ERR = EEBSF(K, XC, NXC, UC, X, NX, U) C ERROR ESTIMATE FOR U. ERRR = ERR/16. TEMP = I1MACH(2) WRITE (TEMP, 3) ERR, ERRR 3 FORMAT (21H ERROR ESTIMATES UC =, 1PE10.2, 9H AND U =, 1P 1 E10.2) NXC = NX DO 4 I = 1, NX XC(I) = X(I) 4 CONTINUE TEMP = NX-K DO 5 I = 1, TEMP UC(I) = U(I) 5 CONTINUE GOTO 1 6 STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), AUT( 1 NX, NU, NU) REAL AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU(NX, NU, NU), 1 FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) COMMON /PARAM/ C REAL C INTEGER I DO 1 I = 1, NX A(I, 1) = UX(I, 1)+C*U(I, 1) AUX(I, 1, 1) = 1 AU(I, 1, 1) = C F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), BUX(NU, NU, 1 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) COMMON /PARAM/ C REAL C REAL EXP B(1, 1) = U(1, 1)-1. B(1, 2) = U(1, 2)-EXP(-C) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K REAL T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T EU = EESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (15H ERROR IN U(X, , 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /PARAM/ C REAL C COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = EXP((-C)*X(I)) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/prea.f000066400000000000000000000047411420247104600161770ustar00rootroot00000000000000C$TEST PREA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PREA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPFOR C C*********************************************************************** INTEGER N1, N2, N, MCP(500), MRP(500), MAXIW, IW, I INTEGER I1MACH, IREAD, IWRITE, ISTAK(19000) EXTERNAL QUEI COMMON /QUE/ A1, A2, N1, N2, N COMMON /CSTAK/ ISTAK IREAD = I1MACH(1) IWRITE = I1MACH(2) CALL ISTKIN(19000, 2) 10 READ(IREAD,11)N1, N2 11 FORMAT(2I3) IF (N1. EQ. 0) STOP WRITE(IWRITE,12)N1, N2 12 FORMAT(4H N1=,I3,4H N2=,I3) N = (N1+1)*(N2+1) C C DETERMINE THE ORDERING C CALL SPFOR(N, QUEI, MCP) C C GET THE WORK SPACE FROM THE STORAGE STACK C MAXIW = ISTKQU(2)-3*N-50 IW = ISTKGT(MAXIW, 2) C C DETERMINE THE SYMBOLIC FACTORIZATION C DO 20 I=1,N MRP(I) = MCP(I) 20 CONTINUE CALL SPFSF(N, MRP, MCP, QUEI, ISTAK(IW), MAXIW, ISIZE) WRITE(IWRITE,21)ISIZE 21 FORMAT(34H SPACE NEEDED FOR DECOMPOSITION - ,I8) C C REDO THE FACTORIZATION WITHOUT PIVOTING C DO 30 I = 1,N MCP(I) = I MRP(I) = I 30 CONTINUE CALL SPFSF(N, MRP, MCP, QUEI, ISTAK(IW), MAXIW, ISIZE) WRITE(IWRITE, 31) ISIZE 31 FORMAT(34H SPACE NEEDED WITHOUT ORDERING - ,I8) CALL ISTKRL(1) GO TO 10 END SUBROUTINE QUEI(I, JCOL, NUM) INTEGER I, NUM, JCOL(100), N, N1, N2, II, JJ, J COMMON /QUE/ A1, A2, N1, N2, N IF (I.NE.N) GO TO 20 C PROCESS LAST ROW DO 10 J=1, N JCOL(J) = J 10 CONTINUE NUM = N RETURN 20 N2P1=N2+1 C DETERMINE WHICH BLOCK II=(I-1)/N2P1 C DETERMINE THE POSITION IN THE BLOCK JJ = MOD(I-1, N2P1) JCOL(1) = I C INSERT THE DIAGONAL ELEMENT NUM = 1 IF (II .EQ. 0) GO TO 30 C THIS IS NOT THE FIRST ROW OF THE CURRENT BLOCK JCOL(2) = I-N2P1 NUM = 2 30 IF (JJ.EQ.0) GO TO 40 C THIS IS NOT THE FIRST ROW OF THE CURRENT BLOCK NUM = NUM+1 JCOL(NUM) = I-1 40 IF (JJ.EQ. N2) GO TO 50 C THIS IS NOT THE LAST ROW OF THE CURRENT BLOCK NUM=NUM+1 JCOL(NUM)= I+1 50 IF (II .EQ. N1) RETURN NUM = NUM +1 JCOL(NUM) = I+N2P1 RETURN END C C DATA FOR THE EXAMPLE IN THE PORT SHEET... (REMOVE THE C C IN COLUMN 1 BEFORE FEEDING THIS DATA TO THE PROGRAM ABOVE.) C$DATA C10 10 C15 15 C19 19 C 0 0 PyBDSF-1.10.1/src/port3/ex/prma.f000066400000000000000000000025221420247104600162020ustar00rootroot00000000000000C$TEST PRMA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PRMA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPMSF C C*********************************************************************** INTEGER MRP(32), MCP(32), INMCP(32) INTEGER IROW(33), JA(200), IWORK(500) IREAD = I1MACH(1) IWRITE = I1MACH(2) N = 32 MAXIW = 500 C C READ IN THE VECTORS DEFINING THE NONZERO BLOCKS C READ(IREAD,11)(IROW(I),I=1,33) 11 FORMAT(20I3) IEND=IROW(33) - 1 READ(IREAD,11)(JA(I),I=1,IEND) WRITE(IWRITE,12)IEND 12 FORMAT(29H NUMBER OF NONZEROS IN MATRIX,I5) C C SET UP THE PERMUTATION VECTORS TO REFLECT NO REORDERING C DO 20 I=1, N MRP(I) = I MCP(I) = I INMCP(I) = I 20 CONTINUE C C DETERMINE THE SYMBOLIC FACTORIZATION C CALL SPMSF(N, MRP, INMCP, IROW, JA, IWORK, MAXIW, ISIZE) WRITE(IWRITE,21)ISIZE 21 FORMAT(35H BLOCKS NEEDED WITHOUT PERMUTATIONS,I5) C C FIND AN ORDERING WHICH WOULD DECREASE FILL-IN AND RECOMPUTE THE C SYMBOLIC FACTORIZATION C CALL SPMOR(N, IROW, JA, MCP, INMCP) CALL SPMSF(N, MCP, INMCP, IROW, JA, IWORK, MAXIW, ISIZE) WRITE(IWRITE,22)ISIZE 22 FORMAT(32H BLOCKS NEEDED WITH PERMUTATIONS,I5) STOP END PyBDSF-1.10.1/src/port3/ex/prs1.f000066400000000000000000000030751420247104600161340ustar00rootroot00000000000000C$TEST PRS1 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PRS1 C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPMML C C*********************************************************************** INTEGER I, IWRITE, I1MACH, NEQ, J, NX, L INTEGER IROW(101), JCOL(500) REAL A(500) REAL X(100), B(100), ERR, SASUM REAL RSTACK(1800) COMMON/CSTAK/ RSTACK CALL ISTKIN(1800,3) NX = 10 C C CONSTRUCT THE MATRIX C L=1 NEQ=1 DO 20 I=1, NX DO 10 J= 1,NX IROW(NEQ)=L JCOL(L)=NEQ A(L)=-4.0 L=L+1 JCOL(L)=NEQ-1 A(L)=1.0 IF (J.GT.1)L=L+1 JCOL(L)=NEQ+1 A(L)=1.0 IF (J.LT.NX)L=L+1 JCOL(L)=NEQ-NX A(L)=1.0 IF (I.GT.1)L=L+1 JCOL(L)=NEQ+NX A(L)=1.0 IF(I.LT.NX)L=L+1 NEQ=NEQ+1 10 CONTINUE 20 CONTINUE IROW(NEQ)=L NEQ=NEQ-1 C C CONSTRUCT A RANDOM VECTOR FOR X C DO 30 I=1,NEQ X(I)=UNI(0) 30 CONTINUE C C FIND THE VECTOR B=AX C CALL SPMML(NEQ,IROW,JCOL,A,X,B) C C SOLVE THE SYSTEM AX=B C CALL SPMLE(NEQ,.TRUE.,IROW,JCOL,A,ISIZE,B,NEQ,1) C C FIND THE NORM OF THE ERROR OF THE SOLUTION C ERR=0.0 IWRITE = I1MACH(2) DO 40 I=1,NEQ ERR=ERR + ABS(B(I)-X(I)) 40 CONTINUE ERR=ERR/SASUM(NEQ,X,1) WRITE(IWRITE,41)ERR 41 FORMAT(19H RELATIVE ERROR IS ,1PE15.7) STOP END PyBDSF-1.10.1/src/port3/ex/prs3.f000066400000000000000000000060041420247104600161310ustar00rootroot00000000000000C$TEST PRS3 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PRS3 C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPMNF C C*********************************************************************** INTEGER IROW(301), JCOL(2500), ISTAK(23000), I1MACH, IWRITE INTEGER MRP(300), MCP(300), ITEMP, INMCP(300), N INTEGER ILAPSZ, IT, IT2, IT3, IT4, IT5, IT6, I, NUMBER INTEGER NUM, IPOINT, NP1 REAL RSTAK(23000), A(2500), GROWTH DOUBLE PRECISION DSTAK(11500) COMMON /CSTAK/DSTAK EQUIVALENCE(ISTAK(1), RSTAK(1), DSTAK(1)) IWRITE = I1MACH(2) CALL ISTKIN(23000,2) DO 40 N=100,300,100 CALL SETUP(N, IROW, JCOL, A) NUMBER = IROW(N+1)-1 WRITE(IWRITE,11)N,NUMBER 11 FORMAT(/5H N = ,I4,22H NUMBER OF NONZEROS = ,I7) C C ORDER THE ROWS AND COLUMNS OF THE MATRIX C TO DECREASE FILL-IN C CALL SPMOR(N, IROW, JCOL, MRP, INMCP) C C ALLOCATE THE AVAILABLE SPACE FOR THE WORK VECTOR IN SPMSF C BUT MAKE SURE THERE IS ENOUGH FOR SPMSF'S ALLOCATIONS C MAXIW = ISTKQU(2)-3*N-5 IW = ISTKGT(MAXIW,2) C C TIME THE SYMBOLIC FACTORIZATION C IT = ILAPSZ(0) CALL SPMSF(N, MRP, INMCP, IROW, JCOL, ISTAK(IW), MAXIW, ISIZE) IT2=ILAPSZ(0)-IT WRITE(IWRITE, 12)ISIZE 12 FORMAT(37H NUMBER OF NONZEROS IN DECOMPOSITION=,I5) WRITE(IWRITE,13)IT2 13 FORMAT(23H ELAPSED TIME FOR SPMSF,I7) C C MODIFY THE WORK STACK TO REFLECT THE AMOUNT NEEDED BY SPMSF C AND ALLOCATE SPACE FOR THE NUMERICAL FACTORIZATION C ISPAC= 2*N+2+ISIZE IW = ISTKMD(ISPAC,2) IUL = ISTKGT(ISIZE, 3) C C COMPUTE THE TIME NEEDED TO INSERT THE NUMERICAL ELEMENTS C IN THEIR PROPER PLACES C IT3 = ILAPSZ(0) DO 20 I=1, N MCP(I) = MRP(I) IR = MRP(I) NUM = IROW(IR+1)-IROW(IR) IPOINT = IROW(IR) CALL SPMIN(N, INMCP, ISTAK(IW), I, A(IPOINT), 1 JCOL(IPOINT), NUM, I, RSTAK(IUL)) 20 CONTINUE IT4 = ILAPSZ(0)-IT3 WRITE(IWRITE,21)IT4 21 FORMAT(23H ELAPSED TIME FOR SPMIN,I7) C C TIME THE SUBROUTINE WHICH COMPUTES THE NUMERICAL C FACTORIZATION C IT5 =ILAPSZ(0) CALL SPMNF(N, ISTAK(IW), RSTAK(IUL), 0.0, GROWTH) IT6 =ILAPSZ(0)-IT5 WRITE(IWRITE, 22)IT6 22 FORMAT(23H ELAPSED TIME FOR SPMNF,I7) IT6 = IT2 + IT4 +IT6 WRITE(6,23)IT6 23 FORMAT(26H ELAPSED TIME FOR SF-IN-NF,I7) C C REDO THE FACTORIZATION WITH THE SUBROUTINE THAT PERMITS C PIVOTING FOR STABILITY AND TIME IT C CALL MOVEFR(NUMBER,A,RSTAK(IUL)) CALL MOVEFI(NUMBER,JCOL,ISTAK(IW)) IL = ISTKGT(N+1,2) IT5 =ILAPSZ(0) CALL SPMLU(N, MRP, MCP, IROW, ISTAK(IW), RSTAK(IUL), ISPAC, 1 ISTAK(IL), 0.0, 0.0, ISIZE, GROWTH) IT6 = ILAPSZ(0)-IT5 WRITE(IWRITE, 31)IT6 31 FORMAT(23H ELAPSED TIME FOR SPMLU, I7) CALL ISTKRL(3) 40 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/prsa.f000066400000000000000000000036161420247104600162150ustar00rootroot00000000000000C$TEST PRSA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PRSA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPMLE C C*********************************************************************** INTEGER JCOL(5000),ISTAK(18000),IROW(626), IREAD, IWRITE, M INTEGER I1MACH, I, J, K, L, ISIZE, MP1 REAL AROW(5000), B(625), SASUM, A1 COMMON /CSTAK/ ISTAK CALL ISTKIN(18000,2) IREAD=I1MACH(1) IWRITE=I1MACH(2) 10 READ(IREAD,11)M,A1 11 FORMAT(I3,E15.5) IF (M .EQ. 0) STOP MP1=M+1 N= MP1*MP1 C C SET UP MATRIX OF SIZE N C IROW(1) = 1 K=1 L=0 DO 70 I=1,MP1 DO 60 J = 1, MP1 L=L+1 AROW(K) = -2.0*A1 - FLOAT(I+J-2) JCOL(K) = L K=K+1 IF (J .EQ. 1) GO TO 20 AROW(K) = A1 JCOL(K) = L - 1 K=K+1 20 IF (J .EQ. MP1) GO TO 30 AROW(K) = J JCOL(K) = L+1 K=K+1 30 IF (I.EQ.1) GO TO 40 AROW(K) = A1 JCOL(K) = L - MP1 K=K+1 40 IF (I.EQ.MP1) GO TO 50 AROW(K) = I JCOL(K) = L+MP1 K=K+1 50 IROW(L+1)=K 60 CONTINUE 70 CONTINUE C C SET UP RIGHT HAND SIDE AND LAST ROW OF THE MATRIX C L=IROW(N) DO 80 I=1,N AROW(L)=1.0 JCOL(L)=I L=L+1 B(I)=0.0 80 CONTINUE IROW(N+1)=L B(N)=1.0 C C SOLVE THE SYSTEM C CALL SPMLE(N,.TRUE.,IROW,JCOL,AROW,ISIZE,B,625,1) C C PRINT RESULTS C WRITE(IWRITE,81)N,L 81 FORMAT(/19HNO. OF EQUATIONS = ,I3,19HNO. OF NONZEROES = ,I5) WRITE(IWRITE,82)ISIZE 82 FORMAT(9H ISIZE = , I5) WRITE(IWRITE,83)B(N),SASUM(M,B(M),M) 83 FORMAT(6H L1 = ,E15.5,6H L2 = ,E15.5) GO TO 10 END PyBDSF-1.10.1/src/port3/ex/prsf.f000066400000000000000000000064011420247104600162150ustar00rootroot00000000000000C$TEST PRSF C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PRSF C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPFLE C C*********************************************************************** INTEGER N1, N2, N, I, ITIME, ITIME1, ITIME2, ILAPSZ INTEGER I1MACH, IREAD, IWRITE, ISTAK(25000), ISIZE, ISIZE2 REAL RSTAK(25000), B(500), A1, A2 EXTERNAL QUEA COMMON /QUE/ A1, A2, N1, N2, N COMMON /CSTAK/ ISTAK EQUIVALENCE (ISTAK(1),RSTAK(1)) IREAD = I1MACH(1) IWRITE = I1MACH(2) CALL ISTKIN(25000,2) 10 READ(IREAD, 11)N1, N2, A1, A2 11 FORMAT(2I3,2E15.5) IF (N1 .EQ. 0) STOP WRITE(IWRITE,12)N1, N2, A1, A2 12 FORMAT(/4H N1=,I3,4H N2=,I3,4H A1=,E15.5,4H A2=,E15.5) N = (N1+1)*(N2+1) C C GENERATE THE RIGHT HAND SIDE C DO 20 I=1, N B(I) = 0.0 20 CONTINUE B(N) = 1.0 C C SOLVE THE SYSTEM WITH PIVOTING FOR SPARSITY AND TIME IT C ITIME=ILAPSZ(0) CALL SPFLE(N, .TRUE., QUEA, ISIZE, B, 500, 1) ITIME1=ILAPSZ(0)-ITIME C C FIND THE PROBABILITIES C IT = (N2+1)*N1+1 WRITE(IWRITE,21)B(N),SASUM(N1+1,B(N2+1),N2+1),SASUM(N2,B(IT),1) 21 FORMAT(6H L1 = ,E15.5,6H L2 = ,E15.5,7H I12 = ,E15.5) WRITE(IWRITE,22) 22 FORMAT(22H PIVOTING FOR SPARSITY) WRITE(IWRITE,23)ISIZE 23 FORMAT(34H SPACE NEEDED FOR DECOMPOSITION - ,I8) WRITE(IWRITE,24)ITIME1 24 FORMAT(15H TIME NEEDED - ,I8) C C FOR COMPARISON, REDO PROBLEM WITHOUT REQUESTING PIVOTING C DO 30 I= 1,N B(I)=0.0 30 CONTINUE B(N)=1.0 ITIM=ILAPSZ(0) CALL SPFLE(N,.FALSE.,QUEA, ISIZE2, B, 500, 1) ITIME2=ILAPSZ(0)-ITIME WRITE(IWRITE, 31) 31 FORMAT(25H NO PIVOTING FOR SPARSITY) WRITE(IWRITE,23)ISIZE2 WRITE(IWRITE, 24)ITIME2 GO TO 10 END SUBROUTINE QUEA(I, ROW, JCOL, NUM) INTEGER I, NUM, JCOL(100), N, N1, N2, II, JJ, J REAL ROW(100) COMMON /QUE/ A1,A2, N1,N2, N IF (I.NE.N) GO TO 20 C TREAT LAST ROW AS SPECIAL CASE DO 10 J=1, N JCOL(J) = J ROW(J) = 1.0 10 CONTINUE NUM = N RETURN 20 N2P1=N2+1 C DETERMINE WHICH MAJOR BLOCK II=(I-1)/N2P1 C DETERMINE POSITION IN BLOCK JJ = MOD(I-1, N2P1) C FILL IN DIAGONAL JCOL(1) = I ROW(1) = -A1-A2-FLOAT(II+JJ) IF (JJ.EQ.N2) ROW(1)=ROW(1)+A2 NUM = 1 IF (II .EQ. 0) GO TO 30 C THIS IS NOT THE FIRST BLOCK JCOL(2) = I-N2P1 ROW(2) = A1 NUM = 2 30 IF (JJ.EQ.0) GO TO 40 C THIS IS NOT FIRST ROW IN THE BLOCK NUM = NUM+1 JCOL(NUM) = I-1 ROW(NUM) = A2 40 IF (JJ.EQ. N2) GO TO 50 C THIS IS NOT LAST ROW IN THE BLOCK NUM=NUM+1 JCOL(NUM)= I+1 ROW(NUM) = JJ+1 50 IF (II .EQ. N1) RETURN C THIS IS NOT THE LAST BLOCK NUM = NUM +1 JCOL(NUM) = I+N2P1 ROW(NUM)= II+1 RETURN END INTEGER FUNCTION ILAPSZ(N) INTEGER N ILAPSZ = 0 RETURN END C C DATA FOR THE EXAMPLE IN THE PORT SHEET... (REMOVE THE C C IN COLUMN 1 BEFORE FEEDING THIS DATA TO THE PROGRAM ABOVE.) C$DATA C10 10 9. 9. C20 20 19. 19. C 0 0 0. 0. PyBDSF-1.10.1/src/port3/ex/prsj.f000066400000000000000000000041201420247104600162150ustar00rootroot00000000000000C$TEST PRSJ C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PRSJ C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPMCE C C*********************************************************************** INTEGER JCOL(10000),IROW(626), IREAD, IWRITE, M INTEGER I1MACH, I, J, K, L, ISIZE, MP1 INTEGER MRP(625), MCP(625), IL(625) REAL AROW(10000), A1, Z(625) COMMON /CSTAK/ D DOUBLE PRECISION D(3000) CALL ISTKIN(3000,4) IREAD=I1MACH(1) IWRITE=I1MACH(2) 10 READ(IREAD,11)M,A1 11 FORMAT(I3,E15.5) IF (M .EQ. 0) STOP MP1=M+1 N= MP1*MP1-1 C C SET UP MATRIX OF SIZE N C IROW(1) = 1 K=1 L=0 DO 70 I=1,MP1 DO 60 J = 1, MP1 L=L+1 AROW(K) = -2.0*A1 - FLOAT(I+J-2) IF (J. EQ. MP1)AROW(K)=AROW(K) + A1 JCOL(K) = L K=K+1 IF (J .EQ. 1) GO TO 20 AROW(K) = A1 JCOL(K) = L-1 K=K+1 20 IF (J .EQ. MP1 .OR. J.EQ.M. AND .I.EQ.MP1) GO TO 30 AROW(K) = J JCOL(K) = L+1 K=K+1 30 IF (I.EQ.1) GO TO 40 AROW(K) = A1 JCOL(K) = L-MP1 K=K+1 40 IF (I.EQ.MP1.OR.J.EQ.MP1. AND. I.EQ.M) GO TO 50 AROW(K) = I JCOL(K) = L+MP1 K=K+1 50 IROW(L+1)=K 60 CONTINUE 70 CONTINUE C C REORDER ROWS OF THE MATRIX C CALL SPMOR(N,IROW,JCOL,MRP,MCP) C C SOLVE THE SYSTEM C CALL SPMCE(N,MRP,MCP,AROW,IROW,JCOL,10000,IL,ISIZE,COND,Z) C C PRINT RESULTS C WRITE(IWRITE,71)N,IROW(N+1) 71 FORMAT(/19HNO. OF EQUATIONS = ,I3,20H NO. OF NONZEROES = ,I5) WRITE(IWRITE,72)A1,ISIZE 72 FORMAT(6H A1 = ,E15.5,9H ISIZE = , I5) WRITE(IWRITE,73)COND 73 FORMAT(16H CONDITION NO = ,E15.5) GO TO 10 END C C DATA FOR THE EXAMPLE IN THE PORT SHEET... (REMOVE THE C C IN COLUMN 1 BEFORE FEEDING THIS DATA TO THE PROGRAM ABOVE.) C$DATA C10 2.0 C20 2.0 C22 3.0 C 0 0.0 PyBDSF-1.10.1/src/port3/ex/prsm.f000066400000000000000000000026151420247104600162270ustar00rootroot00000000000000C$TEST PRSM C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PRSM C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPFCE C C*********************************************************************** INTEGER N1, N2, N, MCP(500), MRP(500), MAXIW, IW, I INTEGER I1MACH, IREAD, IWRITE, TEMP, ISTAK(20000) REAL A1, RSTAK(20000) DOUBLE PRECISION DSTAK(10000) EXTERNAL QUEI, QUEA COMMON /QUE/ A1, K COMMON /CSTAK/ DSTAK EQUIVALENCE(RSTAK(1),DSTAK(1),ISTAK(1)) CALL ISTKIN(10000,4) IREAD = I1MACH(1) IWRITE = I1MACH(2) CALL ISTKIN(20000, 2) READ(IREAD,11)K 11 FORMAT(I3) IF (K. EQ. 0) STOP N = K*K - 1 WRITE(IWRITE,12)N 12 FORMAT(20H NO. OF EQUATIONS = ,I3) C C DETERMINE THE ORDERING C CALL SPFOR(N, QUEI, MRP) C C GET THE WORK SPACE FROM THE STORAGE STACK C MAXIW = (ISTKQU(2)-3*N-50)/2 IW = ISTKGT(MAXIW, 2) IUL = ISTKGT(MAXIW, 3) C C READ IN PARAMETER C 20 READ(IREAD, 21)A1 21 FORMAT(E15.7) IF (A1.EQ.0.0E0) STOP WRITE(IWRITE, 22)A1 22 FORMAT(/4H A1=, E15.5) C C GET THE CONDITION NUMBER C CALL SPFCE(N, MRP, MCP, QUEA, ISTAK(IW), RSTAK(IUL), MAXIW, 1 ISIZE, COND) WRITE(IWRITE,23)COND 23 FORMAT(20H CONDITION NUMBER = ,E15.5) GO TO 20 END PyBDSF-1.10.1/src/port3/ex/prsp.f000066400000000000000000000057701420247104600162370ustar00rootroot00000000000000C$TEST PRSP C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PRSP C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPMLU C C*********************************************************************** INTEGER IA(401), JA(2500), ISTAK(18500), I1MACH, IWRITE, N INTEGER MRP(400), MCP(400), ITEMP, INMCP(400) INTEGER ILAPSZ, IT, IT2, IT3, IT4, IT5, IT6, I, NUMBER INTEGER NUM, IPOINT, NP1 REAL RSTAK(18500), A(2500), GROWTH DOUBLE PRECISION DSTAK(9250) COMMON /CSTAK/DSTAK EQUIVALENCE(ISTAK(1), RSTAK(1), DSTAK(1)) IWRITE = I1MACH(2) CALL ISTKIN(18500,2) CALL ENTSRC(NEW,1) DO 40 K = 9,19,5 N = (K+1)*(K+1) CALL SETUP(K, N, IA, JA, A) NUMBER = IA(N+1)-1 WRITE(IWRITE,11)N,NUMBER 11 FORMAT(5H N = ,I4,22H NUMBER OF NONZEROS = ,I7) C C ORDER THE ROWS AND COLUMNS OF THE MATRIX C TO DECREASE FILL-IN C CALL SPMOR(N, IA, JA, MRP, INMCP) C ALLOCATE THE AVAILABLE SPACE FOR THE WORK SPACE IN SPMSF C BUT MAKE SURE THERE IS EMOUGH FOR SPMSF'S ALLOCATIONS C MAXIW = ISTKQU(2)-3*N-5 IW = ISTKGT(MAXIW,2) C C TIME THE SYMBOLIC FACTORIZATION C IT = ILAPSZ(0) CALL SPMSF(N, MRP, INMCP, IA, JA, ISTAK(IW), MAXIW, ISIZE) IT2= ILAPSZ(0)-IT WRITE(IWRITE, 12)ISIZE 12 FORMAT(37H NUMBER OF NONZEROS IN DECOMPOSITION=,I5) WRITE(IWRITE,13)IT2 13 FORMAT(23H ELAPSED TIME FOR SPMSF,I7) C C MODIFY THE WORK STACK TO REFLECT THE AMOUNT NEEDED BY C SPMSF AND ALLOCATE SPACE FOR THE NUMERICAL FACTORIZATION C ISPAC= 2*N+2+ISIZE IW = ISTKMD(ISPAC,2) IUL = ISTKGT(ISIZE, 3) C C COMPUTE THE TIME NEEDED TO INSERT THE NUMERICAL ELEMENTS C IN THEIR PROPER PLACES C IT3 = ILAPSZ(0) DO 20 I=1, N MCP(I) = MRP(I) IR = MRP(I) NUM = IA(IR+1)-IA(IR) IPOINT = IA(IR) CALL SPMIN(N, INMCP, ISTAK(IW), I, A(IPOINT), 1 JA(IPOINT), NUM, I, RSTAK(IUL)) 20 CONTINUE IT4 = ILAPSZ(0)-IT3 WRITE(IWRITE,21)IT4 21 FORMAT(23H ELAPSED TIME FOR SPMIN,I7) C C TIME THE SUBROUTINE WHICH COMPUTES THE NUMERICAL C FACTORIZATION C IT5 =ILAPSZ(0) CALL SPMNF(N, ISTAK(IW), RSTAK(IUL), 0.0, GROWTH) IT6 =ILAPSZ(0)-IT5 WRITE(IWRITE, 22)IT6 22 FORMAT(23H ELAPSED TIME FOR SPMNF,I7) IT6 = IT2 + IT4 +IT6 WRITE(6,23)IT6 23 FORMAT(26H ELAPSED TIME FOR SF-IN-NF,I7) NP1 = N+1 C C REDO THE FACTORIZATION WITH SPMLU AND TIME IT C CALL MOVEFR(NUMBER,A,RSTAK(IUL)) CALL MOVEFI(NUMBER,JA,ISTAK(IW)) IL = ISTKGT(N+1,2) IT5 =ILAPSZ(0) CALL SPMLU(N, MRP, MCP, IA, ISTAK(IW), RSTAK(IUL), ISPAC, 1 ISTAK(IL), 0.0, 0.0, ISIZE, GROWTH) IT6 = ILAPSZ(0)-IT5 WRITE(IWRITE, 31)IT6 31 FORMAT(23H ELAPSED TIME FOR SPMLU, I7) CALL ISTKRL(3) 40 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/prst.f000066400000000000000000000052771420247104600162450ustar00rootroot00000000000000C$TEST PRST C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PRST C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPFLU C C*********************************************************************** INTEGER K, N, I1MACH, IWRITE, MAXUL, I, NEW, IREAD, IERR INTEGER MRP(101), MCP(101), IWORK(5000), ISIZE, NERROR DOUBLE PRECISION UL(5000), THRESH, EPS, GROWTH DOUBLE PRECISION B(101), ERROR, X EXTERNAL TOY COMMON /TOYS/ X, N, K MAXUL = 4000 IREAD = I1MACH(1) IWRITE = I1MACH(2) C SET THE RECOVERY MODE CALL ENTSRC(NEW, 1) 10 READ(IREAD,11)K 11 FORMAT(I2) IF (K .EQ. 0) STOP N = K*K + 1 C READ(IREAD,12)X, THRESH, EPS 12 FORMAT(3D10.2) WRITE(IWRITE,13)K, N, X, THRESH, EPS 13 FORMAT(3H K=,I3,3H N=,I3,3H X=,D10.2,8H THRESH=,D10.2, 1 5H EPS=,D10.2) C SET UP PERMUTATION VECTORS TO INDICATE NO PRIOR PIVOTING DO 20 I=1,N MRP(I) = I MCP(I) = I 20 CONTINUE CALL DSPFLU(N, MRP, MCP, TOY, IWORK, UL, MAXUL, THRESH, EPS, 1 ISIZE, GROWTH) IF (NERROR(IERR) .EQ. 0) GO TO 30 C C TEST FOR SINGULARITY C CALL ERROFF WRITE(IWRITE,21) 21 FORMAT(16H SINGULAR MATRIX) GO TO 10 C 30 WRITE(IWRITE,31) ISIZE, GROWTH 31 FORMAT(7H ISIZE=,I5,8H GROWTH=,1PD25.15) CALL GETB(N, K, B, X) C C GENERATE THE RIGHT HAND SIDE AND SOLVE THE SYSTEM C CALL DSPFSL(N, MRP, MCP, IWORK, UL, B, N, 1) ERROR = 0.0D0 C C COMPUTE THE ERROR IN THE SOLUTION C DO 40 I = 1, N ERROR = DMAX1(ERROR, DABS(B(I)-1.D0)) 40 CONTINUE WRITE(IWRITE,41)ERROR 41 FORMAT(19H ERROR IN SOLUTION=,1PD25.15) GO TO 10 END SUBROUTINE TOY(I, ROW, JCOL, NUM) INTEGER I, NUM, JCOL(101) INTEGER N, K, J, MODK DOUBLE PRECISION ROW(101) DOUBLE PRECISION X COMMON /TOYS/ X, N, K IF (I .LT. N) GO TO 20 C LAST ROW DO 10 J=1,N ROW(J) = 1.D0 JCOL(J) = J 10 CONTINUE NUM = N RETURN 20 JCOL(1) = I JCOL(2) = N ROW(1) = 2.D0 ROW(2) = 1.D0 MODK = MOD(I, K) JCOL(3) = I-1 ROW(3) = -1.D0 JCOL(4) = I+1 ROW(4) = -1.D0 NUM = 4 IF (MODK .GT. 1) GO TO 30 ROW(1) = 1.D0 + X IF (MODK .EQ. 1) JCOL(3) = I+1 NUM = 3 30 IF (I .LE. K) RETURN IF ((I-1)/K .EQ. 1) GO TO 40 NUM = NUM + 1 JCOL(NUM) = I-K ROW(NUM) = 1.D0 40 IF (I .GE. N-K) RETURN NUM = NUM + 1 JCOL(NUM) = I+K ROW(NUM) = 2.D0 RETURN END PyBDSF-1.10.1/src/port3/ex/prsy.f000066400000000000000000000044211420247104600162400ustar00rootroot00000000000000C$TEST PRSY C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PRSY C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPFNF C C*********************************************************************** INTEGER N1, N2, N, MCP(500), MRP(500) INTEGER I1MACH, IREAD, IWRITE, TEMP, ISTAK(19000) REAL A1, A2, GROWTH INTEGER ISPAC,IW,MAXIW, IUL REAL EL1, EL2, TR, SASUM, RSTAK(19000), B(500) EXTERNAL QUEI, QUEA DOUBLE PRECISION DSTAK(9500) COMMON /CSTAK/ DSTAK COMMON /QUE/ A1, A2, N1, N2, N EQUIVALENCE(RSTAK(1), ISTAK(1), DSTAK(1)) IREAD = I1MACH(1) IWRITE = I1MACH(2) CALL ISTKIN(19000, 2) 10 READ(IREAD,11)N1, N2 11 FORMAT(2I3) IF (N1. EQ. 0) STOP WRITE(IWRITE,12)N1, N2 12 FORMAT(/4H N1=,I3,4H N2=,I3) N = (N1+1)*(N2+1) C C DETERMINE THE ORDERING C CALL SPFOR(N, QUEI, MCP) C C GET THE WORK SPACE FROM THE STORAGE STACK C MAXIW = ISTKQU(2)-3*N-50 IW = ISTKGT(MAXIW, 2) C C DETERMINE THE SYMBOLIC FACTORIZATION C DO 20 I=1,N MRP(I) = MCP(I) 20 CONTINUE CALL SPFSF(N, MRP, MCP, QUEI, ISTAK(IW), MAXIW, ISIZE) C C DETERMINE THE ACTUAL AMOUNT OF SPACE USED, MODIFY THE C INTEGER WORK SPACE AND ALLOCATE SPACE TO SAVE THE C FACTORIZATION C ISPAC = 2*N+1+ISIZE IW = ISTKMD(ISPAC,2) IUL= ISTKGT(ISIZE,3) 30 READ(IREAD,31)A1, A2 31 FORMAT(2F10.3) IF (A1.EQ.0.0)GO TO 50 WRITE(IWRITE,32)A1, A2 32 FORMAT(/4H A1=,F10.3,4H A2=,F10.3) C C COMPUTE THE NUMERICAL FACTORIZATION C CALL SPFNF(N, MRP, MCP, QUEA, ISTAK(IW), RSTAK(IUL), 1 GROWTH, 0.0) WRITE(IWRITE,33)GROWTH 33 FORMAT(7H GROWTH,E25.7) C C GENERATE RIGHT HAND SIDE C DO 40 I=1,N B(I) = 0.0 40 CONTINUE B(N) = 1.0 C C SOLVE THE PROBLEM C CALL SPSOL(N, MRP, MCP, ISTAK(IW), RSTAK(IUL), B, N, 1) C C FIND PROBABILITY OF BEING LOST C EL1 = B(N) EL2 = SASUM(N1+1,B(N2+1),N2+1) TEMP = (N2+1)*N1+1 TR = SASUM(N2,B(TEMP),1) WRITE(IWRITE,41)EL1,EL2,TR 41 FORMAT(6H L1 = ,E15.5,6H L2 = ,E15.5,7H I12 = ,E15.5) GO TO 30 C RELEASE STACK SPACE 50 CALL ISTKRL(2) GO TO 10 END PyBDSF-1.10.1/src/port3/ex/prsz.f000066400000000000000000000034531420247104600162450ustar00rootroot00000000000000C$TEST PRSZ C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PRSZ C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPFML C C*********************************************************************** INTEGER I, IWRITE, I1MACH, NEQ REAL X(100), B(100), ERR, SASUM EXTERNAL AROW REAL RSTACK(2500) COMMON/CSTAK/ RSTACK COMMON /NN/ NX CALL ISTKIN(2500,3) NX = 10 NEQ = 100 C C CONSTRUCT A RANDOM VECTOR FOR X C DO 10 I=1,NEQ X(I)=UNI(0) 10 CONTINUE C C FIND THE VECTOR B=AX C CALL SPFML(NEQ,AROW,X,B) C C SOLVE THE SYSTEM AX=B C CALL SPFLE(NEQ,.TRUE.,AROW,ISIZE,B,NEQ,1) C C FIND THE NORM OF THE ERROR OF THE SOLUTION C ERR=0.0 IWRITE = I1MACH(2) DO 20 I=1,NEQ ERR=ERR + ABS(B(I)-X(I)) 20 CONTINUE ERR=ERR/SASUM(NEQ,X,1) WRITE(IWRITE,21)ERR 21 FORMAT(19H RELATIVE ERROR IS ,1PE15.7) STOP END SUBROUTINE AROW(I, ROW, JCOL, NUM) REAL ROW(5) INTEGER JCOL(5) COMMON /NN/ N C C IN THE BLOCK TRIDIAGONAL MATRIX THERE ARE AT MOST 5 C NONZERO ELEMENTS PER ROW AND EACH ROW HAS A DIAGONAL C OF -4. C THE VARIABLE IN INDICATES WHICH BLOCK ONE IS IN AND C THE VARIABLE JN INDICATES WHERE IN THE BLOCK ONE IS AT C IN = (I-1)/N+1 JN = I - (IN-1) * N JCOL(1)=I ROW(1)=-4.0 NUM=2 C C DO THE OFF DIAGONAL ELEMENTS IN THE CURRENT BLOCK C JCOL(2)=I-1 ROW(2)=1.0 IF (JN.GT.1) NUM=NUM+1 JCOL(NUM)=I+1 ROW(NUM)=1.0 IF (JN.LT.N)NUM=NUM+1 C C DO THE BLOCK TO THE LEFT C JCOL(NUM)=I-N ROW(NUM)=1.0 IF (IN.GT.1)NUM=NUM+1 C C DO THE BLOCK TO THE RIGHT C JCOL(NUM)=I+N ROW(NUM)=1.0 IF(IN.EQ.N) NUM=NUM-1 RETURN END PyBDSF-1.10.1/src/port3/ex/pst1.f000066400000000000000000000064311420247104600161350ustar00rootroot00000000000000C$TEST PST1 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST1 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(1000) EXTERNAL HANDLE, BC, AF, POSTD INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), U(100), V(1), MESH(100), DT, RS(1000) REAL WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = U SUB XX + F ON (0,1) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(1000, 4) NU = 1 NV = 0 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1E-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 4 CALL UMB(0E0, 1E0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETR(NMESH-K, 1E0, U) CALL POST(U, NU, K, MESH, NMESH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 POSTD, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), AUT( 1 NX, NU, NU) REAL AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU(NX, NU, NU), 1 FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I REAL EXP DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (X(I)-T**2)*EXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), BUX(NU, NU, 1 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) REAL EXP B(1, 1) = U(1, 1)-1. B(1, 2) = U(1, 2)-EXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K REAL T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = EESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = EXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/pst2.f000066400000000000000000000077001420247104600161360ustar00rootroot00000000000000C$TEST PST2 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST2 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(1100) EXTERNAL HANDLE, BC, AF, POSTD INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), U(200), V(1), MESH(100), DT, RS(1000) REAL WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = U SUB XX + F ON (0,1) C BY SETTING U1 = U AND U2 = U1 SUB X AND SOLVING C U1 SUB T = U1 SUB XX + F C ON (0,1) C U1 SUB X = U2 C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(1100, 4) NU = 2 NV = 0 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1E-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 4 CALL UMB(0E0, 1E0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U1. CALL SETR(NMESH-K, 1E0, U) C INITIAL CONDITIONS FOR U2. TEMP = NMESH-K CALL SETR(NMESH-K, 0E0, U(TEMP+1)) CALL POST(U, NU, K, MESH, NMESH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 POSTD, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), AUT( 1 NX, NU, NU) REAL AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU(NX, NU, NU), 1 FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I REAL EXP DO 1 I = 1, NX A(I, 1) = -U(I, 2) AU(I, 1, 2) = -1 F(I, 1) = (X(I)-T**2)*EXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 A(I, 2) = U(I, 1) AU(I, 2, 1) = 1 F(I, 2) = U(I, 2) FU(I, 2, 2) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), BUX(NU, NU, 1 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) REAL EXP B(1, 1) = U(1, 1)-1. B(1, 2) = U(1, 2)-EXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K REAL T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL U1OFX, U2OFX INTEGER I1MACH REAL EU(2), EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C U1OFX AND U2OFX NEED TIME. TT = T EU(1) = EESFF(K, X, NX, U, U1OFX) EU(2) = EESFF(K, X, NX, U(1, 2), U2OFX) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 2(1PE10.2)) RETURN END SUBROUTINE U1OFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = EXP(X(I)*T) 1 CONTINUE RETURN END SUBROUTINE U2OFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = T*EXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/pst3.f000066400000000000000000000107121420247104600161340ustar00rootroot00000000000000C$TEST PST3 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST3 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL DEE, HANDLE, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), U(100), V(1), MESH(100), DT, RS(1000) REAL WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = U SUB XX + V + F ON (0,1) C V SUB T = U( 1/2, T ) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = COS(XT) AND V(T) = 2 SIN(T/2). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 1 ERRPAR(1) = 1E-2 C ESSENTIALLY RELATIVE ERROR. ERRPAR(2) = 1E-6 TSTOP = 1 DT = 1E-6 K = 4 NDX = 4 C NDX UNIFORM MESH POINTS ON (0,1). CALL UMB(0E0, 1E0, NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETR(NMESH-K, 1E0, U) C INITIAL VALUE FOR V. V(1) = 0 CALL POST(U, NU, K, MESH, NMESH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) INTEGER I REAL COS, SIN DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = V(1)-UT(I, 1)-X(I)*SIN(X(I)*T)+T**2*COS(X(I)*T)-2.* 1 SIN(T/2.) FUT(I, 1, 1) = -1 FV(I, 1, 1) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) REAL COS B(1, 1) = U(1, 1)-1. B(1, 2) = U(1, 2)-COS(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) INTEGER INTRVR, I, ILEFT REAL XI(1), BASIS(10) INTEGER TEMP XI(1) = 0.5E0 C FIND 0.5 IN MESH. ILEFT = INTRVR(NX, X, XI(1)) IF (K .GT. 10) CALL SETERR( 1 41HDEE - K .GT. 10, NEED MORE SPACE IN BASIS, 41, 1, 2) C B-SPLINE BASIS AT XI(1). CALL BSPLN(K, X, NX, XI, 1, ILEFT, BASIS) D(1) = VT(1) DVT(1, 1) = 1 C VT(1) - U(0.5,T) = 0. DO 1 I = 1, K TEMP = ILEFT+I-K D(1) = D(1)-U(TEMP, 1)*BASIS(I) TEMP = ILEFT+I-K DU(1, TEMP, 1) = DU(1, TEMP, 1)-BASIS(I) 1 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL ABS, SIN, EU, EV, EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = EESFF(K, X, NX, U, UOFX) EV = ABS(V(1)-2.*SIN(T/2.)) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU, EV 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL COS DO 1 I = 1, NX U(I) = COS(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/pst4.f000066400000000000000000000102021420247104600161270ustar00rootroot00000000000000C$TEST PST4 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST4 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL DEE, HANDLE, BC, AF INTEGER NDX, K, IS(1000), NU, NV, NMESH REAL ERRPAR(2), U(100), V(1), ATAN, MESH(100), DT REAL RS(1000), WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = U SUB XX - U**3 + F ON (-PI,+PI) C SUBJECT TO PERIODIC BOUNDARY CONDITIONS, C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = COS(X)*SIN(T). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 1 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 8.*ATAN(1E0) DT = 0.4 C MAKE A MESH OF NDX UNIFORM POINTS ON (-PI,+PI). K = 4 NDX = 7 CALL UMB((-4.)*ATAN(1E0), 4.*ATAN(1E0), NDX, K, MESH, NMESH) C INITIAL CONDITIONS FOR U. CALL SETR(NMESH-K, 0E0, U) C INITIAL CONDITIONS FOR V. V(1) = 0 CALL POST(U, NU, K, MESH, NMESH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) C CHECK FOR ERRORS AND STACK USAGE STATISTICS. CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) INTEGER I REAL COS, SIN DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (-UT(I, 1))-U(I, 1)**3+COS(X(I))*(COS(T)+SIN(T)+COS(X 1 (I))**2*SIN(T)**3) FUT(I, 1, 1) = -1 FU(I, 1, 1) = (-3.)*U(I, 1)**2 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) B(1, 1) = UX(1, 1)-V(1) B(1, 2) = UX(1, 2)-V(1) BUX(1, 1, 1) = 1 BV(1, 1, 1) = -1 BUX(1, 1, 2) = 1 BV(1, 1, 2) = -1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) INTEGER TEMP C U(-PI,T) - U(+PI,T) = 0. TEMP = NX-K D(1) = U(1, 1)-U(TEMP, 1) DU(1, 1, 1) = 1 TEMP = NX-K DU(1, TEMP, 1) = -1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF, EV INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .EQ. T) RETURN C UOFX NEEDS TIME. TT = T EU = EESFF(K, X, NX, U, UOFX) EV = V(1) TEMP = I1MACH(2) WRITE (TEMP, 1) T, EU, EV 1 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL COS, SIN DO 1 I = 1, NX U(I) = COS(X(I))*SIN(T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/pst5.f000066400000000000000000000165601420247104600161450ustar00rootroot00000000000000C$TEST PST5 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST5 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T REAL T COMMON /PARAM/ VC, X REAL VC(3), X(3) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, ISTKGT, K, IMMM, IU, IS(1000) INTEGER NU, NV, IMESH, ILUMB, NMESH REAL ERRPAR(2), TSTART, V(3), DT, XB(3), RS(1000) REAL WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = ( K(T,X) * U SUB X ) SUB X + G ON (-1,+2) * (0,+1) C WITH A MOVING FRONT X(T) CHARACTERIZED BY U(X(T),T) == 1 AND C JUMP ACROSS X(T) OF K(T,X) U SUB X = - 3 * X'(T). C WHERE K(T,X) IS PIECEWISE CONSTANT, SAY C 1 FOR X < X(T) C K(T,X) = C 2 FOR X > X(T) C AND G IS CHOSEN SO THAT THE SOLUTION IS C EXP(X-X(T)) FOR X < X(T) C U(X,T) = C EXP(X(T)-X) FOR X > X(T) C AND X(1,T) = T. THE MOVING FRONT IS TRACKED C IMPLICITLY BY FORCING U(X(1,T),T) = 1 AS A PSEUDO-RANKINE-HEUGONIOT RE CLATION. C V(1,2,3) GIVES THE MOVING MESH. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 3 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTART = 0 TSTOP = 1 DT = 0.1 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB ARRAY. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = ILUMB(XB, 3, NDX, K, NMESH) C MAKE 1 OF MULTIPLICITY K-1. IMESH = IMMM(IMESH, NMESH, 1E0, K-1) X(1) = -1 X(2) = 0 X(3) = 2 C INITIAL VALUES FOR V. CALL LPLMG(3, X, VC) C GET U ON THE PORT STACK. IU = ISTKGT(NMESH-K, 3) C UOFX NEEDS TIME. T = TSTART C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL L2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT THE ICS. CALL HANDLE(T-1., WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, WS( 1 IMESH), NMESH, DT, TSTOP) CALL POST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP, 1 DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) COMMON /POSTF/ FAILED LOGICAL FAILED INTEGER I REAL KAY, EXP, XXI(99), XTV(99), XVV(99), X(99) REAL XXIV(99), AX(99), FX(99), XT(99), XV(99) LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL LPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL POSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 7 I = 1, NX IF (XI(I) .GT. 1.) GOTO 2 KAY = 1 GOTO 3 2 KAY = 2 3 A(I, 1) = KAY*UX(I, 1) AUX(I, 1, 1) = KAY IF (XI(I) .GT. 1.) GOTO 4 A(I, 1) = A(I, 1)-3.*VT(2) AVT(I, 1, 2) = -3 4 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 IF (XI(I) .GT. 1.) GOTO 5 F(I, 1) = F(I, 1)+2.*EXP(X(I)-T) FX(I) = 2.*EXP(X(I)-T) GOTO 6 5 F(I, 1) = F(I, 1)+EXP(T-X(I)) FX(I) = -EXP(T-X(I)) 6 CONTINUE 7 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL POSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V 1 , VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU 2 , FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) REAL EXP B(1, 1) = U(1, 1)-EXP((-1.)-T) B(1, 2) = U(1, 2)-EXP(T-2.) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) INTEGER INTRVR, I, ILEFT REAL BX(10), XX(1) INTEGER TEMP D(1) = V(1)+1. C X(0,V) = -1. DV(1, 1) = 1 XX(1) = 1 C FIND 1 IN THE MESH. ILEFT = INTRVR(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL BSPLN(K, X, NX, XX, 1, ILEFT, BX) C U(X(1,V),T) = 1. D(2) = -1 DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-2. C X(2,V) = +2. DV(3, 3) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /PARAM/ VC, XX REAL VC(3), XX(3) COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF, EV(3) INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, V, VC) EU = EESFF(K, X, NX, U, UOFX) EV(1) = V(1)+1. EV(2) = V(2)-T EV(3) = V(3)-2. TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 3( 1 1PE10.2)) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX REAL XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X REAL VC(3), X(3) COMMON /TIME/ T REAL T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL EXP, RS(1000), WS(1000), XOFXI LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 3) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 3) C MAP INTO USER SYSTEM. CALL LPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 3 I = 1, NX TEMP = IXX+I XOFXI = WS(TEMP-1) IF (XI(I) .GT. 1.) GOTO 1 U(I) = EXP(XOFXI-T) GOTO 2 1 U(I) = EXP(T-XOFXI) 2 CONTINUE 3 CONTINUE CALL LEAVE RETURN END PyBDSF-1.10.1/src/port3/ex/pst6.f000066400000000000000000000170321420247104600161410ustar00rootroot00000000000000C$TEST PST6 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST6 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T REAL T COMMON /PARAM/ VC, X REAL VC(4), X(3) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, ISTKGT, K, IMMM, IU, IS(1000) INTEGER NU, NV, IMESH, ILUMB, NMESH REAL ERRPAR(2), TSTART, V(4), DT, XB(3), RS(1000) REAL WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON THE HYPERBOLIC PROBLEM C U SUB T = - U SUB X + G ON (-PI,+PI) * (0,PI) C WITH A MOVING SHOCK X(T) CHARACTERIZED BY C U(X(T)+,T) = 0 AND C U(X(T)+,T) - U(X(T)-,T) = X'(T) C WHERE G IS CHOSEN SO THAT THE SOLUTION IS C SIN(X+T) FOR X < X(T) C U(X,T) = C COS(X+T) FOR X > X(T) C WITH X(T) = PI/2 -T . C V(1,2,3) GIVES THE MOVING MESH AND V(4) IS THE HEIGHT OF THE JUMP. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 4 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTART = 0 TSTOP = 3.14 DT = 0.4 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = ILUMB(XB, 3, NDX, K, NMESH) C MAKE 1 OF MULTIPLICITY K-1. IMESH = IMMM(IMESH, NMESH, 1E0, K-1) X(1) = -3.14 X(2) = 3.14/2. X(3) = 3.14 C INITIAL VALUES FOR V. CALL LPLMG(3, X, VC) C GET U ON THE PORT STACK. IU = ISTKGT(NMESH-K, 3) C UOFX NEEDS TIME. T = TSTART C THE INITIAL HEIGHT OF THE JUMP. VC(4) = 1 C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL L2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT ICS. CALL HANDLE(T-1., WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, WS( 1 IMESH), NMESH, DT, TSTOP) CALL POST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP, 1 DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) COMMON /POSTF/ FAILED LOGICAL FAILED INTEGER I REAL COS, SIN, XXI(99), XTV(99), XVV(99), X(99) REAL XXIV(99), AX(99), FX(99), XT(99), XV(99) LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL LPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL POSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 4 I = 1, NX A(I, 1) = -U(I, 1) AU(I, 1, 1) = -1 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 IF (XI(I) .GT. 1.) GOTO 2 F(I, 1) = F(I, 1)-2.*COS(X(I)+T) FX(I) = 2.*SIN(X(I)+T) GOTO 3 2 F(I, 1) = F(I, 1)-VT(4) FVT(I, 1, 4) = -1 F(I, 1) = F(I, 1)+2.*SIN(X(I)+T) FX(I) = 2.*COS(X(I)+T) 3 CONTINUE 4 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL POSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V 1 , VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU 2 , FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) REAL SIN B(1, 1) = U(1, 1)-SIN(T-3.14) C U(-PI,T) = SIN(-PI+T). BU(1, 1, 1) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) INTEGER INTRVR, I, ILEFT REAL BX(10), XX(1), R1MACH INTEGER TEMP D(1) = V(1)+3.14 C X(0,V) = -PI. DV(1, 1) = 1 C XX(1) = 1 + A ROUNDING ERROR. XX(1) = R1MACH(4)+1. ILEFT = INTRVR(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL BSPLN(K, X, NX, XX, 1, ILEFT, BX) D(2) = -V(4) C U(X(T)+,T) - JUMP = 0. DV(2, 4) = -1 DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-3.14 C X(2,V) = +PI. DV(3, 3) = 1 C JUMP + D( X(1,V(T)) )/DT = 0. D(4) = VT(2)+V(4) DVT(4, 2) = 1 DV(4, 4) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /PARAM/ VC, XX REAL VC(4), XX(3) COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF, EV(2) INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN 2 TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, V, VC) EU = EESFF(K, X, NX, U, UOFX) C ERROR IN POSITION OF SHOCK. EV(1) = V(2)-(3.14/2.-T) C ERROR IN HEIGHT OF SHOCK. EV(2) = V(4)-1. TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 2( 1 1PE10.2)) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX REAL XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X REAL VC(4), X(3) COMMON /TIME/ T REAL T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL EWE, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 3) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 3) C MAP INTO USER SYSTEM. CALL LPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 1 I = 1, NX TEMP = IXX+I U(I) = EWE(T, WS(TEMP-1), VC(2)) IF (XI(I) .GT. 1.) U(I) = U(I)+1. 1 CONTINUE CALL LEAVE RETURN END REAL FUNCTION EWE(T, X, XBREAK) REAL T, X, XBREAK REAL COS, SIN IF (X .GE. XBREAK) GOTO 1 EWE = SIN(X+T) RETURN 1 IF (X .LE. XBREAK) GOTO 2 EWE = COS(X+T) RETURN 2 CALL SETERR(17HEWE - X == XBREAK, 17, 1, 2) 3 CONTINUE 4 STOP END PyBDSF-1.10.1/src/port3/ex/pst7.f000066400000000000000000000162421420247104600161440ustar00rootroot00000000000000C$TEST PST7 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST7 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(4000) COMMON /TIME/ T REAL T COMMON /PARAM/ VC, X, XI0 REAL VC(4), X(3), XI0 EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, ISTKGT, K, IMMM, IU, IS(1000) INTEGER NU, NV, IMESH, ILUMB, NMESH REAL ERRPAR(2), TSTART, D, V(4), DT, XB(3) REAL RS(1000), WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON C U SUB T = U SUB XX + F ON (20,10**6) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(-X*T), C AND X(1,T) IS CHOSEN SO THAT THE BOUNDARY-LAYER IS TRACKED C IMPLICITLY BY FORCING U(X(1,T)/2.3/D,T) = 1/E. C THIS IS THE SAME AS REQUIRING THE EXACT SOLUTION TO HAVE C U(X(1,T),T) = 10 ** -D. C V(1,2,3) GIVES THE MOVING MESH, V(4) IS TIME. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(4000, 4) CALL ENTER(1) NU = 1 NV = 4 ERRPAR(1) = 1E-2 C MIXED RELATIVE AND ABSOLUTE ERROR. ERRPAR(2) = 1E-2 D = 3 C W(XI0,T) = 1/E. XI0 = 1./2.3/D TSTART = 20 TSTOP = 1E+6 DT = 1E-2 K = 4 C NDX UNIFORM MESH POINTS ON EACH INTERVAL OF XB. NDX = 6 XB(1) = 0 XB(2) = 1 XB(3) = 2 C GET MESH ON PORT STACK. IMESH = ILUMB(XB, 3, NDX, K, NMESH) C MAKE 1D0 OF MULTIPLICITY K-1. IMESH = IMMM(IMESH, NMESH, 1E0, K-1) X(1) = 0 X(2) = 2.3*D/TSTART X(3) = 1 C INITIAL VALUES FOR V. CALL LPLMG(3, X, VC) C GET U ON PORT STACK. IU = ISTKGT(NMESH-K, 3) C UOFX NEEDS TIME. T = TSTART VC(4) = TSTART C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, VC, V) C INITIAL CONDITIONS FOR U. CALL L2SFF(UOFX, K, WS(IMESH), NMESH, WS(IU)) C OUTPUT ICS. CALL HANDLE(T-1., WS(IU), V, T, WS(IU), V, NU, NMESH-K, NV, K, WS( 1 IMESH), NMESH, DT, TSTOP) CALL POST(WS(IU), NU, K, WS(IMESH), NMESH, V, NV, TSTART, TSTOP, 1 DT, AF, BC, DEE, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, XI(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) COMMON /POSTF/ FAILED LOGICAL FAILED INTEGER I REAL XXI(99), XTV(99), XVV(99), X(99), EXPL, XXIV(99) REAL AX(99), FX(99), XT(99), XV(99) LOGICAL TEMP TEMP = V(2) .LE. V(1) IF (.NOT. TEMP) TEMP = V(2) .GE. V(3) IF (.NOT. TEMP) GOTO 1 FAILED = .TRUE. RETURN C MAP XI INTO X. 1 CALL LPLM(XI, NX, V, 3, X, XXI, XXIV, XV, XVV, XT, XTV) C MAP U INTO X SYSTEM. CALL POSTU(XI, X, XT, XXI, XV, VT, NX, 3, UX, UT, NU, AX, FX) DO 2 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (-UT(I, 1))-EXPL((-X(I))*V(4))*(X(I)+V(4)**2) FUT(I, 1, 1) = -1 FV(I, 1, 4) = (-EXPL((-X(I))*V(4)))*(2.*V(4)+(X(I)+V(4)**2)*(-X 1 (I))) FX(I) = (-EXPL((-X(I))*V(4)))*(1.-V(4)*X(I)-V(4)**3) 2 CONTINUE C MAP A AND F INTO XI SYSTEM. CALL POSTI(XI, X, XT, XXI, XV, XTV, XXIV, XVV, NX, UX, UT, NU, V 1 , VT, NV, 1, 3, A, AX, AU, AUX, AUT, AUTX, AV, AVT, F, FX, FU 2 , FUX, FUT, FUTX, FV, FVT) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) REAL EXPL C U(0,T) = 1 B(1, 1) = U(1, 1)-1. C U(1,T) = EXP(-T) B(1, 2) = U(1, 2)-EXPL(-V(4)) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 BV(1, 4, 2) = EXPL(-V(4)) RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) COMMON /PARAM/ VC, XC, XI0 REAL VC(4), XC(3), XI0 INTEGER INTRVR, I, ILEFT REAL EXP, BX(10), XX(1) INTEGER TEMP D(1) = V(1) C X(0,V) = 0. DV(1, 1) = 1 XX(1) = XI0 ILEFT = INTRVR(NX, X, XX(1)) C GET THE B-SPLINE BASIS AT XX. CALL BSPLN(K, X, NX, XX, 1, ILEFT, BX) D(2) = -EXP(-1E0) C D(2) = W(XI0,T) - EXP(-1). DO 1 I = 1, K TEMP = ILEFT+I-K D(2) = D(2)+U(TEMP, 1)*BX(I) TEMP = ILEFT+I-K DU(2, TEMP, 1) = BX(I) 1 CONTINUE D(3) = V(3)-1. C X(2,V) = 1. DV(3, 3) = 1 D(4) = VT(4)-1. DVT(4, 4) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /PARAM/ VC, XX, XI0 REAL VC(4), XX(3), XI0 COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF, EV, LPLMT INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN C LET DT CARRY V(2) DOWN BY NO MORE THAN A FACTOR OF 10. 2 DT = LPLMT(T, V, NV, T0, V0, 1E-1, DT) TT = T C UOFX NEEDS V FOR MAPPING. CALL MOVEFR(NV, V, VC) EU = EESFF(K, X, NX, U, UOFX) C ERROR IN POSITION OF BOUNDARY LAYER. EV = V(2)-1./XI0/T TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU, EV 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2, 6H V =, 1P 1 E10.2) RETURN END SUBROUTINE UOFX(XI, NX, U, W) INTEGER NX REAL XI(NX), U(NX), W(NX) COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /PARAM/ VC, X, XI0 REAL VC(4), X(3), XI0 COMMON /TIME/ T REAL T INTEGER IXV, IXX, ISTKGT, I, IS(1000) REAL EXPL, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) IXX = ISTKGT(NX, 3) C SPACE FOR X AND XV. IXV = ISTKGT(3*NX, 3) C MAP INTO USER SYSTEM. CALL LPLMX(XI, NX, VC, 3, WS(IXX), WS(IXV)) DO 1 I = 1, NX TEMP = IXX+I U(I) = EXPL((-WS(TEMP-1))*T) 1 CONTINUE CALL LEAVE RETURN END PyBDSF-1.10.1/src/port3/ex/pst8.f000066400000000000000000000151051420247104600161420ustar00rootroot00000000000000C$TEST PST8 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST8 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(5000) COMMON /TIME/ T REAL T COMMON /KMESH/ K, NMESH INTEGER K, NMESH COMMON /CMESH/ MESH REAL MESH(100) EXTERNAL DEE, HANDLE, UOFX, BC, AF INTEGER NDX, I, IS(1000), NU, NV REAL ERRPAR(2), U(100), V(100), DT, RS(1000), WS(1000) REAL TSTOP LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON THE INTEGRO-PDE C U SUB T = 2 * U SUB XX - INT(0,1) EXP(X-Y)*U(Y) DY ON (0,1) C SUBJECT TO GIVEN DIRICHLET BCS, CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(T+X). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(5000, 4) NU = 1 ERRPAR(1) = 0 C ABSOLUTE ERROR. ERRPAR(2) = 1E-2 TSTOP = 1 DT = 1E-2 K = 4 C NDX UNIFORM MESH POINTS ON (0,1). NDX = 7 CALL UMB(0E0, 1E0, NDX, K, MESH, NMESH) NV = NMESH-K C UOFX NEEDS T. T = 0 C ICS FOR U. CALL L2SFF(UOFX, K, MESH, NMESH, U) TEMP = NMESH-K DO 1 I = 1, TEMP V(I) = U(I) 1 CONTINUE C ICS FOR V. CALL POST(U, NU, K, MESH, NMESH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 DEE, ERRPAR, HANDLE) CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NV, NX REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(NV), VT(NV), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), 1 AUT(NX, NU, NU) REAL AUTX(NX, NU, NU), AV(NX, NU, NV), AVT(NX, NU, NV), F(NX, NU), 1 FU(NX, NU, NU), FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(NX, NU, NV), FVT(NX, 1 NU, NV) COMMON /KMESH/ K, NMESH INTEGER K, NMESH COMMON /CMESH/ MESH REAL MESH(100) INTEGER I DO 1 I = 1, NX A(I, 1) = 2.*UX(I, 1) AUX(I, 1, 1) = 2 F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 1 CONTINUE C GET THE INTEGRAL. CALL INTGRL(K, MESH, NMESH, V, X, NX, F, FV) RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU, NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(NV), VT(NV), B(NU, 2), BU(NU, NU, 2), BUX(NU, 1 NU, 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(NU, NV, 2), BVT(NU, NV, 2 1 ) REAL EXP B(1, 1) = U(1, 1)-EXP(T) B(1, 2) = U(1, 2)-EXP(T+1.) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE DEE(T, K, X, NX, U, UT, NU, NXMK, V, VT, NV, D, 1 DU, DUT, DV, DVT) INTEGER NXMK, NU, NV, NX INTEGER K REAL T, X(NX), U(NXMK, NU), UT(NXMK, NU), V(NV), VT(NV) REAL D(NV), DU(NV, NXMK, NU), DUT(NV, NXMK, NU), DV(NV, NV), DVT( 1 NV, NV) INTEGER I DO 1 I = 1, NXMK D(I) = U(I, 1)-V(I) DU(I, I, 1) = 1 DV(I, I) = -1 1 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NV, NX INTEGER K REAL T0, U0(NXMK, NU), V0(NV), T, U(NXMK, NU), V(NV) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T0, DT 1 FORMAT (16H RESTART FOR T =, 1PE10.2, 7H DT =, 1PE10.2) RETURN 2 TT = T EU = EESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = EXP(T+X(I)) 1 CONTINUE RETURN END SUBROUTINE INTGRL(K, MESH, NMESH, V, X, NX, F, FV) INTEGER NX, NMESH INTEGER K REAL MESH(NMESH), V(1), X(NX), F(NX), FV(NX, 1) INTEGER MGQ, I, J, L, IX REAL EWE, KER, WGQ(3), XGQ(3), B(3, 4, 200), KERU REAL XX(3) LOGICAL FIRST INTEGER TEMP, TEMP1 DATA FIRST/.TRUE./ C TO COMPUTE C F = INTEGRAL FROM MESH(1) TO MESH(NMESH) C KERNEL(X,Y,SUM(I=1,...,NMESH-K) V(I)*B(I,Y)) DY C AND C FV = D(F)/D(V). C ASSUME THAT CALL KERNEL(X,Y,U,KER,KERU) RETURNS C KER = KERNEL(X,Y,U) AND C KERU = PARTIAL KERNEL / PARTIAL U. C V(NMESH-K),FV(NX,NMESH-K) C THE FOLLOWING DECLARATION IS SPECIFIC TO K = 4 SPLINES. IF (NMESH-K .GT. 200) CALL SETERR(27HINTGRL - NMESH-K .GT. NXMAX 1 , 27, 1, 2) C NEED MORE LOCAL SPACE. IF (K .NE. 4) CALL SETERR(17HINTGRL - K .NE. 4, 17, 2, 2) C USE K-1 POINT GAUSSIAN-QUADRATURE RULE ON EACH INTERVAL. MGQ = K-1 IF (FIRST) CALL GQM11(MGQ, XGQ, WGQ) C ONLY GET GQ RULE ONCE, ITS EXPENSIVE. C THE GAUSSIAN QUADRATURE RULE. C DO INTEGRAL INTERVAL BY INTERVAL. TEMP = NMESH-K DO 6 I = K, TEMP C G.Q. POINTS ON (MESH(I), MESH(I+1)). DO 1 J = 1, MGQ XX(J) = 0.5*(MESH(I+1)+MESH(I))+0.5*(MESH(I+1)-MESH(I))*XGQ( 1 J) 1 CONTINUE IF (FIRST) CALL BSPLN(K, MESH, NMESH, XX, MGQ, I, B(1, 1, I)) C ONLY GET B-SPLINE BASIS ONCE, ITS EXPENSIVE. DO 5 J = 1, MGQ C GET SUM() V()*B()(XX). EWE = 0 DO 2 L = 1, K TEMP1 = I+L-K EWE = EWE+V(TEMP1)*B(J, L, I) 2 CONTINUE DO 4 IX = 1, NX C GET KERNEL AND PARTIAL. CALL KERNEL(X(IX), XX(J), EWE, KER, KERU) F(IX) = F(IX)+0.5*KER*(MESH(I+1)-MESH(I))*WGQ(J) DO 3 L = 1, K TEMP1 = I+L-K FV(IX, TEMP1) = FV(IX, TEMP1)+0.5*B(J, L, I)*KERU*( 1 MESH(I+1)-MESH(I))*WGQ(J) 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE FIRST = .FALSE. RETURN END SUBROUTINE KERNEL(X, Y, U, KER, KERU) REAL X, Y, U, KER, KERU REAL EXP C TO EVALUATE THE KERNEL EXP(X-Y)*U(Y) AND ITS PARTIAL WRT. U. KERU = EXP(X-Y) KER = KERU*U RETURN END PyBDSF-1.10.1/src/port3/ex/pst9.f000066400000000000000000000110101420247104600161320ustar00rootroot00000000000000C$TEST PST9 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PST9 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) COMMON /PARAM/ C REAL C EXTERNAL HANDLE, BC, AF, POSTD INTEGER NDX, NXC, NXX, I, K, IS(1000) INTEGER NU, NV, NX, I1MACH REAL EWE(1000), ERR, ERRPAR(2), U(100), V(1), X(100) REAL ERRR, DT, XC(100), UC(100), EEBSF, RS(1000) REAL WS(1000), XX(1000), TSTOP, R1MACH LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO TEST POST ON AUTOMATIC, STATIC MESH REFINEMENT. C U SUB T = U SUB XX + C * U SUB X ON (0,1) C THE SOLUTION IS C U(X,T) = EXP(-C*X). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) C = 50 NU = 1 NV = 0 ERRPAR(1) = 1E-1 ERRPAR(2) = 1E-1 K = 4 NDX = 8 CALL UMB(0E0, 1E0, NDX, K, XC, NXC) C INITIAL CONDITIONS FOR UC. CALL SETR(NXC-K, 0E0, UC) C INFINITY. ERR = R1MACH(2) 1 IF (ERR .LE. 1E-2) GOTO 6 C HALVE THE CRUDE X. CALL LUMB(XC, NXC, 3, K, X, NX) C FITTING POINTS FOR REFINEMENT. CALL LUMD(X, NX, K, XX, NXX) C UC ON XX. CALL SPLNE(K, XC, NXC, UC, XX, NXX, EWE) C FIT U TO UC ON MESH. CALL DL2SF(XX, EWE, NXX, K, X, NX, U) TSTOP = 1./R1MACH(4) DT = 1E-6 I = NX-2*(K-1) TEMP = I1MACH(2) WRITE (TEMP, 2) I 2 FORMAT (18H SOLVING FOR NDX =, I3) CALL POST(U, NU, K, X, NX, V, NV, 0E0, TSTOP, DT, AF, BC, 1 POSTD, ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL POSTX C ERROR ESTIMATE FOR UC. ERR = EEBSF(K, XC, NXC, UC, X, NX, U) C ERROR ESTIMATE FOR U. ERRR = ERR/16. TEMP = I1MACH(2) WRITE (TEMP, 3) ERR, ERRR 3 FORMAT (21H ERROR ESTIMATES UC =, 1PE10.2, 9H AND U =, 1P 1 E10.2) NXC = NX DO 4 I = 1, NX XC(I) = X(I) 4 CONTINUE TEMP = NX-K DO 5 I = 1, TEMP UC(I) = U(I) 5 CONTINUE GOTO 1 6 STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), AUT( 1 NX, NU, NU) REAL AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU(NX, NU, NU), 1 FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) COMMON /PARAM/ C REAL C INTEGER I DO 1 I = 1, NX A(I, 1) = UX(I, 1)+C*U(I, 1) AUX(I, 1, 1) = 1 AU(I, 1, 1) = C F(I, 1) = UT(I, 1) FUT(I, 1, 1) = 1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), BUX(NU, NU, 1 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) COMMON /PARAM/ C REAL C REAL EXP B(1, 1) = U(1, 1)-1. B(1, 2) = U(1, 2)-EXP(-C) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K REAL T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T EU = EESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (15H ERROR IN U(X, , 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /PARAM/ C REAL C COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = EXP((-C)*X(I)) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/pstt.f000066400000000000000000000111521420247104600162340ustar00rootroot00000000000000C$TEST PSTT C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE PSTT C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM POST C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(2000) EXTERNAL HANDLE, BC, AF, POSTD INTEGER NDX, NXH, I, K, IS(1000), NU INTEGER NV, NX, I1MACH REAL ABS, ERR, ERRPAR(2), U(100), V(1), X(100) REAL AMAX1, DT, UE(100), EEBSF, UH(100), XH(100) REAL RS(1000), WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO ESTIMATE X AND T ERROR AS SUM. C U SUB T = U SUB XX + F ON (0,1) C WHERE F IS CHOSEN SO THAT THE SOLUTION IS C U(X,T) = EXP(XT). C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(2000, 4) NU = 1 NV = 0 ERRPAR(1) = 0 ERRPAR(2) = 1E-2 K = 4 NDX = 4 TSTOP = 1 DT = 1E-2 C CRUDE MESH. CALL UMB(0E0, 1E0, NDX, K, X, NX) C INITIAL CONDITIONS FOR U. CALL SETR(NX-K, 1E0, U) TEMP = I1MACH(2) WRITE (TEMP, 1) 1 FORMAT (36H SOLVING ON CRUDE MESH USING ERRPAR.) CALL POST(U, NU, K, X, NX, V, NV, 0E0, TSTOP, DT, AF, BC, POSTD, 1 ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL POSTX C HALVE THE MESH SPACING. CALL UMB(0E0, 1E0, 2*NDX-1, K, XH, NXH) C INITIAL CONDITIONS FOR UH. CALL SETR(NXH-K, 1E0, UH) DT = 1E-2 TEMP = I1MACH(2) WRITE (TEMP, 2) 2 FORMAT (38H SOLVING ON REFINED MESH USING ERRPAR.) CALL POST(UH, NU, K, XH, NXH, V, NV, 0E0, TSTOP, DT, AF, BC, 1 POSTD, ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL POSTX C ESTIMATE U ERROR. ERR = EEBSF(K, X, NX, U, XH, NXH, UH) WRITE (6, 3) ERR 3 FORMAT (24H U ERROR FROM U AND UH =, 1PE10.2) C INITIAL CONDITIONS FOR UE. CALL SETR(NX-K, 1E0, UE) DT = 1E-2 ERRPAR(1) = ERRPAR(1)/10. ERRPAR(2) = ERRPAR(2)/10. TEMP = I1MACH(2) WRITE (TEMP, 4) 4 FORMAT (39H SOLVING ON CRUDE MESH USING ERRPAR/10.) CALL POST(UE, NU, K, X, NX, V, NV, 0E0, TSTOP, DT, AF, BC, POSTD 1 , ERRPAR, HANDLE) C GET RUN-TIME STATISTICS. CALL POSTX ERR = 0 TEMP = NX-K DO 5 I = 1, TEMP ERR = AMAX1(ERR, ABS(U(I)-UE(I))) 5 CONTINUE WRITE (6, 6) ERR 6 FORMAT (24H U ERROR FROM U AND UE =, 1PE10.2) STOP END SUBROUTINE AF(T, X, NX, U, UX, UT, UTX, NU, V, VT, NV, A, 1 AU, AUX, AUT, AUTX, AV, AVT, F, FU, FUX, FUT, FUTX, FV, FVT) INTEGER NU, NX INTEGER NV REAL T, X(NX), U(NX, NU), UX(NX, NU), UT(NX, NU), UTX(NX, NU) REAL V(1), VT(1), A(NX, NU), AU(NX, NU, NU), AUX(NX, NU, NU), AUT( 1 NX, NU, NU) REAL AUTX(NX, NU, NU), AV(1), AVT(1), F(NX, NU), FU(NX, NU, NU), 1 FUX(NX, NU, NU) REAL FUT(NX, NU, NU), FUTX(NX, NU, NU), FV(1), FVT(1) INTEGER I REAL EXP DO 1 I = 1, NX A(I, 1) = -UX(I, 1) AUX(I, 1, 1) = -1 F(I, 1) = (X(I)-T**2)*EXP(X(I)*T)-UT(I, 1) FUT(I, 1, 1) = -1 1 CONTINUE RETURN END SUBROUTINE BC(T, L, R, U, UX, UT, UTX, NU, V, VT, NV, B, BU, 1 BUX, BUT, BUTX, BV, BVT) INTEGER NU INTEGER NV REAL T, L, R, U(NU, 2), UX(NU, 2), UT(NU, 2) REAL UTX(NU, 2), V(1), VT(1), B(NU, 2), BU(NU, NU, 2), BUX(NU, NU, 1 2) REAL BUT(NU, NU, 2), BUTX(NU, NU, 2), BV(1), BVT(1) REAL EXP B(1, 1) = U(1, 1)-1. B(1, 2) = U(1, 2)-EXP(T) BU(1, 1, 1) = 1 BU(1, 1, 2) = 1 RETURN END SUBROUTINE HANDLE(T0, U0, V0, T, U, V, NU, NXMK, NV, K, X, 1 NX, DT, TSTOP) INTEGER NXMK, NU, NX INTEGER NV, K REAL T0, U0(NXMK, NU), V0(1), T, U(NXMK, NU), V(1) REAL X(NX), DT, TSTOP COMMON /TIME/ TT REAL TT EXTERNAL UOFX INTEGER I1MACH REAL EU, EESFF INTEGER TEMP C OUTPUT AND CHECKING ROUTINE. IF (T0 .NE. T) GOTO 2 TEMP = I1MACH(2) WRITE (TEMP, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 TT = T EU = EESFF(K, X, NX, U, UOFX) TEMP = I1MACH(2) WRITE (TEMP, 3) T, EU 3 FORMAT (14H ERROR IN U(X,, 1PE10.2, 4H ) =, 1PE10.2) RETURN END SUBROUTINE UOFX(X, NX, U, W) INTEGER NX REAL X(NX), U(NX), W(NX) COMMON /TIME/ T REAL T INTEGER I REAL EXP DO 1 I = 1, NX U(I) = EXP(X(I)*T) 1 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/qbla.f000066400000000000000000000022201420247104600161550ustar00rootroot00000000000000C$TEST QBLA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QBLA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM RQUAD C C*********************************************************************** EXTERNAL F COMMON /COUNTS/NMEVAL INTEGER NMEVAL,IWRITE,I1MACH REAL F,RESULT,ERROR C C INITIALIZE COUNT TO ZERO NMEVAL = 0 C C SET OUTPUT UNIT TO IWRITE IWRITE = I1MACH(2) C CALL RQUAD(F, 0.0, 1.0, 0.0, 1.0E-7, RESULT, ERROR) C WRITE (IWRITE, 9996) 9996 FORMAT(13X, 42H THE INTEGRAL OF EXP(X) BETWEEN 0 AND 1 IS) WRITE (IWRITE, 9997) RESULT, ERROR 9997 FORMAT(1H0,11X, 1PE15.8, 20H WITH RELATIVE ERROR, 1PE9.2) WRITE (IWRITE,9998) NMEVAL 9998 FORMAT(1H0, 13X,1H(,I2,38H FUNCTION EVALUATIONS WERE REQUIRED TO) WRITE (IWRITE,9999) 9999 FORMAT(17X, 26H PERFORM THE QUADRATURE) ) STOP END REAL FUNCTION F(X) COMMON /COUNTS/NMEVAL INTEGER NMEVAL REAL X C C COMPUTE THE INTEGRAND F = EXP( X ) C C COUNT THE NUMBER OF TIMES F WAS CALLED NMEVAL = NMEVAL + 1 RETURN END PyBDSF-1.10.1/src/port3/ex/qblc.f000066400000000000000000000016541420247104600161710ustar00rootroot00000000000000C$TEST QBLC C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QBLC C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM BQUAD C C*********************************************************************** INTEGER NCALL,IWRITE,I1MACH REAL SFUNC,X(3),ANS,ERREST,TRUERR EXTERNAL SFUNC COMMON/COUNT/NCALL NCALL=0 X(1) = -1.0E0 X(2) = 0.0E0 X(3) = +1.0E0 C C BQUAD WILL TAKE INTO ACCOUNT THE BREAK AT X=0 C CALL BQUAD (SFUNC,3,X,1.E-6,ANS,ERREST) TRUERR=EXP(1.E0) - ANS IWRITE=I1MACH(2) WRITE(IWRITE, 99) ANS, ERREST, TRUERR, NCALL 99 FORMAT(1X,4HANS=,1PE15.7,10H ERREST=,1PE12.3, 1 10H TRUERR=,1PE12.3/1X,6HNCALL=,I4) STOP END REAL FUNCTION SFUNC(X) REAL X COMMON/COUNT/NCALL NCALL = NCALL+1 SFUNC = AMAX1(1.E0, EXP(X)) RETURN END PyBDSF-1.10.1/src/port3/ex/qblg.f000066400000000000000000000021621420247104600161700ustar00rootroot00000000000000C$TEST QBLG C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QBLG C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM QUAD C C*********************************************************************** EXTERNAL F COMMON /COUNTS/NMEVAL INTEGER NMEVAL,IWRITE,I1MACH REAL ERROR,RESULT C C INITIALIZE COUNT TO ZERO NMEVAL = 0 C CALL QUAD(F, 0.0, 1.0, 1.0E-4, RESULT, ERROR) C IWRITE = I1MACH(2) WRITE (IWRITE, 10) 10 FORMAT(11X, 48H THE INTEGRAL OF X**0.5(LOGX) BETWEEN 0 AND 1 IS) WRITE (IWRITE, 20) RESULT, ERROR 20 FORMAT(1H0,10X, E15.7, 21H WITH ESTIMATED ERROR, 1PE9.2) WRITE (IWRITE, 30) NMEVAL 30 FORMAT(1H0, 14X,1H(,I2,38H FUNCTION EVALUATIONS WERE REQUIRED TO 1 /17X, 26H PERFORM THE QUADRATURE) ) STOP END REAL FUNCTION F(X) COMMON /COUNTS/NMEVAL INTEGER NMEVAL REAL X C C COMPUTE THE INTEGRAND F = 0.0 IF (X .NE. 0.0) F = SQRT(X)*ALOG(X) C C COUNT THE NUMBER OF TIMES F WAS CALLED NMEVAL = NMEVAL + 1 RETURN END PyBDSF-1.10.1/src/port3/ex/qgsg.f000066400000000000000000000014461420247104600162100ustar00rootroot00000000000000C$TEST QGSG C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QGSG C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GQ1 C C*********************************************************************** REAL X(5),W(5),CALC,TRUE,ERR C CALL GQ1(5,X,W) IWRITE=I1MACH(2) WRITE(IWRITE,30) DO 10 J=1,5 10 WRITE(IWRITE,40) J, X(J),W(J) CALC = 0.E0 DO 20 J=1,5 20 CALC = CALC+W(J)*(1.0/(2.0+X(J))) TRUE = ALOG(3.E0) ERR = TRUE-CALC WRITE(IWRITE,50) TRUE,CALC,ERR STOP 30 FORMAT(///13H TEST OF GQ1//30H0ABSCISSAS AND WEIGHTS FOR N=5) 40 FORMAT(I4,0P2E16.7) 50 FORMAT(15H0SAMPLE PROBLEM/6H TRUE=,1PE16.7/ X 6H CALC=,1PE16.7/6H ERR =,1PE11.2) END PyBDSF-1.10.1/src/port3/ex/qgsh.f000066400000000000000000000015301420247104600162030ustar00rootroot00000000000000C$TEST QGSH C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QGSH C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GQEX C C*********************************************************************** REAL X(5),W(5),CALC,TRUE,PI,ERR C CALL GQEX(5,X,W) IWRITE=I1MACH(2) WRITE(IWRITE,30) DO 10 J=1,5 10 WRITE(IWRITE,40) J, X(J),W(J) CALC = 0.E0 DO 20 J=1,5 20 CALC = CALC+W(J)*X(J)/(1.0 - EXP(-X(J))) PI = 2.E0*ATAN2(1.E0,0.E0) TRUE = PI**2/6.E0 ERR = TRUE - CALC WRITE(IWRITE,50) TRUE,CALC,ERR STOP 30 FORMAT(///14H TEST OF GQEX//30H0ABSCISSAS AND WEIGHTS FOR N=5) 40 FORMAT(I4,0P2E16.7) 50 FORMAT(15H0SAMPLE PROBLEM/6H TRUE=,1PE16.7/ X 6H CALC=,1PE16.7/6H ERR =,1PE11.2) END PyBDSF-1.10.1/src/port3/ex/qgsj.f000066400000000000000000000016371420247104600162150ustar00rootroot00000000000000C$TEST QGSJ C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QGSJ C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GQEX2 C C*********************************************************************** REAL X(5),W(5),FEX2,CALC,TRUE,PI,ERR C CALL GQEX2(5,X,W) IWRITE=I1MACH(2) WRITE(IWRITE,1) DO 10 J=1,5 10 WRITE(IWRITE,2) J, X(J),W(J) CALC=0.E0 DO 20 J=1,5 20 CALC=CALC+W(J)*FEX2(X(J)) PI=2.E0*ATAN2(1.E0,0.E0) TRUE=SQRT(PI)*EXP(-.25E0) ERR=TRUE - CALC WRITE(IWRITE,3) TRUE,CALC,ERR STOP 1 FORMAT(///15H TEST OF GQEX2//30H0ABSCISSAS AND WEIGHTS FOR N=5) 2 FORMAT(I4,0P2E16.7) 3 FORMAT(15H0SAMPLE PROBLEM/6H TRUE=,1PE16.7/ X 6H CALC=,1PE16.7/6H ERR =,1PE11.2) END REAL FUNCTION FEX2(X) REAL X FEX2=COS(X) RETURN END PyBDSF-1.10.1/src/port3/ex/qgsm.f000066400000000000000000000017251420247104600162160ustar00rootroot00000000000000C$TEST QGSM C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QGSM C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GQEXA C C*********************************************************************** REAL X(5),W(5),FEXA,CALC,TRUE,PI,ERR C CALL GQEXA(5,-0.5E0,X,W) IWRITE=I1MACH(2) WRITE(IWRITE,1) DO 10 J=1,5 10 WRITE(IWRITE,2) J, X(J),W(J) CALC = 0.E0 DO 20 J=1,5 20 CALC = CALC+W(J)*FEXA(X(J)) PI = 2.E0*ATAN2(1.E0,0.E0) TRUE = 0.5E0*SQRT(PI)*(1.E0-1.E0/SQRT(3.E0)) ERR = TRUE-CALC WRITE(IWRITE,3) TRUE,CALC,ERR STOP 1 FORMAT(///15H TEST OF GQEXA//30H0ABSCISSAS AND WEIGHTS FOR N=5) 2 FORMAT(I4,0P2E16.7) 3 FORMAT(15H0SAMPLE PROBLEM/6H TRUE=,1PE16.7/ X 6H CALC=,1PE16.7/6H ERR =,1PE11.2) END REAL FUNCTION FEXA(X) REAL X FEXA=0.5E0*(1.E0-EXP(-2.E0*X)) RETURN END PyBDSF-1.10.1/src/port3/ex/qgsp.f000066400000000000000000000016621420247104600162210ustar00rootroot00000000000000C$TEST QGSP C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QGSP C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GQLOG C C*********************************************************************** REAL X(5),W(5),FLOG,CALC,TRUE,PI2,ERR C CALL GQLOG(5,X,W) IWRITE = I1MACH(2) WRITE(IWRITE,1) DO 10 J = 1,5 10 WRITE(IWRITE,2) J, X(J),W(J) CALC = 0.E0 DO 20 J = 1,5 20 CALC = CALC+W(J)*FLOG(X(J)) PI2 = ATAN2(1.E0,0.E0) TRUE = -(PI2**2/3.E0) ERR = TRUE - CALC WRITE(IWRITE,3) TRUE,CALC,ERR STOP 1 FORMAT(///15H TEST OF GQLOG//30H0ABSCISSAS AND WEIGHTS FOR N=5) 2 FORMAT(I4,0P2E16.7) 3 FORMAT(15H0SAMPLE PROBLEM/6H TRUE=,1PE16.7/ X 6H CALC=,1PE16.7/6H ERR =,1PE11.2) END REAL FUNCTION FLOG(X) REAL X FLOG = -1.E0/(1.E0+X) RETURN END PyBDSF-1.10.1/src/port3/ex/qgsr.f000066400000000000000000000017161420247104600162230ustar00rootroot00000000000000C$TEST QGSR C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QGSR C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GQXA C C*********************************************************************** REAL X(5),W(5),FXA,CALC,TRUE,B(1),PI2,ERR C CALL GQXA(5,-0.5E0,X,W) IWRITE = I1MACH(2) WRITE(IWRITE,1) DO 10 J=1,5 10 WRITE(IWRITE,2) J, X(J),W(J) CALC = 0.E0 DO 20 J=1,5 20 CALC = CALC+W(J)*FXA(X(J)) CALL BESRJ(1.E0,1,B) PI2 = ATAN2(1.E0,0.E0) TRUE = PI2*B(1) ERR = TRUE-CALC WRITE(IWRITE,3) TRUE,CALC,ERR STOP 1 FORMAT(///14H TEST OF GQXA//30H0ABSCISSAS AND WEIGHTS FOR N=5) 2 FORMAT(I4,0P2E16.7) 3 FORMAT(15H0SAMPLE PROBLEM/6H TRUE=,1PE16.7/ X 6H CALC=,1PE16.7/6H ERR =,1PE11.2) END REAL FUNCTION FXA(X) REAL X FXA=COS(1.E0-X)/SQRT(2.E0-X) RETURN END PyBDSF-1.10.1/src/port3/ex/qgst.f000066400000000000000000000017071420247104600162250ustar00rootroot00000000000000C$TEST QGST C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QGST C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM GQXAB C C*********************************************************************** REAL X(5),W(5),FXAB,CALC,TRUE,PI,ERR C CALL GQXAB(5,-0.5E0,0.5E0,X,W) IWRITE=I1MACH(2) WRITE(IWRITE,1) DO 10 J=1,5 10 WRITE(IWRITE,2) J, X(J),W(J) CALC = 0.E0 DO 20 J=1,5 20 CALC = CALC+W(J)*FXAB(X(J)) PI = 2.E0*ATAN2(1.E0,0.E0) TRUE = PI*(1.E0-1.E0/SQRT(3.E0)) ERR = TRUE - CALC WRITE(IWRITE,3) TRUE,CALC,ERR STOP 1 FORMAT(///15H TEST OF GQXAB//30H0ABSCISSAS AND WEIGHTS FOR N=5) 2 FORMAT(I4,0P2E16.7) 3 FORMAT(15H0SAMPLE PROBLEM/6H TRUE=,1PE16.7/ X 6H CALC=,1PE16.7/6H ERR =,1PE11.2) END REAL FUNCTION FXAB(X) REAL X FXAB = 1.E0/(2.E0+X) RETURN END PyBDSF-1.10.1/src/port3/ex/qodd.f000066400000000000000000000031411420247104600161700ustar00rootroot00000000000000C$TEST QODD C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QODD C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM DODEQ C C*********************************************************************** C EXTERNAL F C INTEGER I1MACH,K,IWRITE DOUBLE PRECISION TWOPI,EM1,ANS(10),EPS DOUBLE PRECISION CHK1,CHK2,DK,DTEMP DOUBLE PRECISION DATAN, DEXP, DSIN, DCOSP C C INITIALIZE 2*PI AND EXP - 1 C TWOPI = 8.0D0*DATAN(1.0D0) EM1 = DEXP(1.0D0) - 1.0D0 C C SET OUTPUT WRITE UNIT C IWRITE = I1MACH(2) C C SET ACCURACY PARAMETER C EPS = 1.0D-10 C WRITE(IWRITE,97) EPS 97 FORMAT(11H FOR EPS = ,1PD10.2,21H THE COEFFICIENTS ARE) WRITE(IWRITE,98) 98 FORMAT(/7X,1HK,11X,9HSIN COEFF,16X,9HCOS COEFF,10X,9HMAX ERROR) C CALL DODEQ(10,F,0.0D0,1.0D0,EPS,ANS) C DO 10 K=1,5 DK=K DTEMP = 1.D0 + (TWOPI*DK)**2 CHK1 = TWOPI*DK*(-EM1)/DTEMP - ANS(2*K-1) CHK2 = EM1/DTEMP - ANS(2*K) C DTEMP = DMAX1( DABS(CHK1), DABS(CHK2) ) C 10 WRITE(IWRITE,99) K, ANS(2*K-1), ANS(2*K), DTEMP 99 FORMAT (1H0,2X,I5,2D25.14,1PD15.4) STOP END SUBROUTINE F(X,Y,N,FVAL) C INTEGER J, N DOUBLE PRECISION TWOPI,X,Y,EXPX,ANGL,FVAL(10) C C INITIALIZE 2*PI AND E**X C TWOPI = 8.0D0*DATAN(1.0D0) EXPX = DEXP(X) C C COMPUTE THE TWO INTEGRANDS, E**X * SIN AND E**X * COS, C DO 20 J=1,5 ANGL = J ANGL = TWOPI*ANGL*X FVAL(2*J-1) = EXPX*DSIN(ANGL) 20 FVAL(2*J) = EXPX*DCOS(ANGL) C RETURN END PyBDSF-1.10.1/src/port3/ex/qpra.f000066400000000000000000000042531420247104600162110ustar00rootroot00000000000000C$TEST QPRA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE QPRA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM IQP C C*********************************************************************** C TEST PROGRAM FOR IQP REAL X(10), Q(10,10), A(10,10), BL(10), BU(10) REAL C(10), B(10) REAL SUM(10), FUNCT INTEGER N, I, J, IPRINT, MAXITR, IQ, M, IA INTEGER IEQ DOUBLE PRECISION DSTAK(2000) COMMON /CSTAK/DSTAK C IWRITE = I1MACH(2) CALL ISTKIN(2000,4) N = 4 M = 3 C SET UP INITIAL GUESS AND QUADRATIC FUNCTION DO 1 I=1,N X(I) = I + 1. C(I) = 8. - I DO 2 J=1,N Q(I,J) = FLOAT(IABS(I-J)) 2 CONTINUE Q(I,I) = 1.69 C SET UP GENERAL CONSTRAINTS DO 16 J=1,M A(J,I) = 0. 16 CONTINUE 1 CONTINUE DO 3 I=1,M B(I) = -1. - (I - 1.) * .05 A(I,I) = -1. A(I,I+1) = 1. 3 CONTINUE IQ = 10 IA = 10 IEQ = 1 C SET UP SIMPLE CONSTRAINTS DO 4 I=1,N BL(I) = -I - (I - 1.) * .1 BU(I) = I 4 CONTINUE C GET MACHINE INFINITY FROM PORT BU(1) = R1MACH(2) IPRINT = 1 MAXITR = 3*N C CALL THE QUADRATIC PROGRAMMING PACKAGE CALL IQP(N, X, Q, IQ, C, M, A, IA, B, BL, BU, IPRINT, 1 MAXITR, IEQ) C COMPUTE FINAL FUNCTION VALUE DO 6 J=1,N SUM(J) = X(J) * Q(J,J) 6 CONTINUE DO 7 I=2,N DO 9 J=1,I-1 SUM(I) = SUM(I) + X(J)*Q(J,I) SUM(J) = SUM(J) + X(I)*Q(J,I) 9 CONTINUE 7 CONTINUE FUNCT = 0. DO 10 I=1,N FUNCT = SUM(I) * X(I)/2. + FUNCT + C(I) * X(I) 10 CONTINUE WRITE (IWRITE,1000) 1000 FORMAT (16H FINAL SOLUTION:) DO 11 I=1,N WRITE (IWRITE, 1001) I, X(I) 1001 FORMAT (I5,D14.4) 11 CONTINUE WRITE (IWRITE,1002) 1002 FORMAT (22H FINAL FUNCTION VALUE:) WRITE (IWRITE,1003) FUNCT 1003 FORMAT (D14.4) STOP END PyBDSF-1.10.1/src/port3/ex/ranc.f000066400000000000000000000016601420247104600161700ustar00rootroot00000000000000C$TEST RANC C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE RANC C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM RANBYT C C*********************************************************************** INTEGER IBYTE(4),IWRITE,I1MACH,K REAL R,RAND,UNI C C SET THE CORRECT OUTPUT UNIT C IWRITE = I1MACH(2) C C PRINT OUT THE FIRST FIVE UNIFORM RANDOM VARIATES C DO 1 K = 1,5 RAND = UNI(0) 1 WRITE (IWRITE, 9997) RAND 9997 FORMAT(1H , E15.8) C C NOW RESET TO THE ORIGINAL SEEDS C AND SEE HOW THE VARIATES LOOK AS BIT PATTERNS C (WRITTEN IN OCTAL WITH INTEGER VALUES GIVEN UNDERNEATH) C CALL RANSET(12345,1073) DO 2 K = 1,5 CALL RANBYT(R,IBYTE) WRITE (IWRITE, 9998) R, IBYTE 9998 FORMAT(1H0, E15.8, 4(3X, O3)) C WRITE(IWRITE, 9999) IBYTE 9999 FORMAT(16X, 4(3X, I3)) 2 CONTINUE C STOP END PyBDSF-1.10.1/src/port3/ex/rnrm.f000066400000000000000000000007361420247104600162260ustar00rootroot00000000000000C$TEST RNRM C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE RNRM C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM RNORM C C*********************************************************************** C RNORM - FIRST 10 RANDOM DEVIATES C REAL X IWRITE = I1MACH(2) C DO 10 K=1,10 X = RNORM(0) WRITE (IWRITE,99) X 99 FORMAT(1H ,F11.8) 10 CONTINUE C STOP END PyBDSF-1.10.1/src/port3/ex/rpad.f000066400000000000000000000012221420247104600161650ustar00rootroot00000000000000C$TEST RPAD C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE RPAD C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM DRPOLY C C*********************************************************************** INTEGER IWRITE,I1MACH,K DOUBLE PRECISION COEFF(6), ZR(5), ZI(5) C COEFF(1) = 8.D0 COEFF(2) = -84.D0 COEFF(3) = 9.D0 COEFF(4) = - 589.D0 COEFF(5) = 331.D0 COEFF(6) = -2915.D0 C CALL DRPOLY( 5, COEFF, ZR, ZI ) C IWRITE = I1MACH(2) WRITE(IWRITE,99) (ZR(K),ZI(K),K = 1,5) 99 FORMAT(1H0,1P2E27.18) STOP END PyBDSF-1.10.1/src/port3/ex/sdba.f000066400000000000000000000022361420247104600161560ustar00rootroot00000000000000C$TEST SDBA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE SDBA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM DL2SF C C*********************************************************************** INTEGER I,I1MACH,IWRITE,K,N,NT REAL X(51),Y(51),T(100),A(100), 1 XCHECK(101),YCHECK(101,2),ERR(2) C K = 4 C C MAKE THE ABSCISSAE FOR THE FIT. C CALL UMD(0.0E0,3.14E0,51,X) C C MAKE THE DATA. C DO 1000 I = 1, 51 Y(I) = SIN(X(I)) 1000 CONTINUE C C MAKE THE CHECK POINTS C CALL UMD(X(1),X(51),101,XCHECK) C C MAKE THE MESH. C N = 2 C CALL MNPB(X,51,N,K,T,NT) C C DO THE FIT. C CALL DL2SF(X,Y,51,K,T,NT,A) C C EVALUATE THE ERROR IN THE FIT AND ITS DERIVATIVES C AT THE CHECK POINTS C CALL SPLND(K,T,NT,A,XCHECK,101,2,YCHECK) C CALL SETR(2,0.0E0,ERR) DO 1001 I = 1, 101 ERR(1) = AMAX1(ERR(1),ABS(YCHECK(I,1)-SIN(XCHECK(I)))) ERR(2) = AMAX1(ERR(2),ABS(YCHECK(I,2)-COS(XCHECK(I)))) 1001 CONTINUE C IWRITE = I1MACH(2) WRITE(IWRITE,1006) ERR(1),ERR(2) 1006 FORMAT(9H ERROR = ,2E10.2) C STOP C END PyBDSF-1.10.1/src/port3/ex/splf.f000066400000000000000000000016561420247104600162160ustar00rootroot00000000000000C$TEST SPLF C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE SPLF C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM SPLNI C C*********************************************************************** INTEGER K,I,N,IWRITE,I1MACH,NT REAL X(51),Y(51),T(100),A(100),SINT,TINT C K = 4 C C MAKE THE ABSCISSAE FOR THE FIT. C CALL UMD(0.0E0,3.14E0,51,X) C C MAKE THE DATA. C DO 1000 I = 1, 51 Y(I) = SIN(X(I)) 1000 CONTINUE C C MAKE THE MESH. C N = 2 C CALL MNPB(X,51,N,K,T,NT) C C DO THE FIT. C CALL DL2SF(X,Y,51,K,T,NT,A) C C EVALUATE THE SPLINE INTEGRAL AND THE TRUE INTEGRAL. C CALL SPLNI(K,T,NT,A,T(NT),1,SINT) C TINT = 1.0E0-COS(3.14E0) C IWRITE = I1MACH(2) WRITE(IWRITE,1003) SINT,TINT 1003 FORMAT(18H SPLINE INTEGRAL =,E20.8// 1 18H TRUE INTEGRAL =,E20.8) C STOP C END PyBDSF-1.10.1/src/port3/ex/ttg1.f000066400000000000000000000142011420247104600161170ustar00rootroot00000000000000C$TEST TTG1 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG1 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IUMB, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), TSTART, DT, LX, LY, RX REAL RY, WS(1000), RS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE HEAT EQUATION WITH SOLUTION U == T*X*Y, C GRAD . ( U + UX + .1 * UY, U + UY + .1 * UX ) = UT + UX + UY +G(X,T) C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) C INITIAL CONDITIONS FOR U. CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, 1 NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I)+.1*UY(P, Q, I)+U(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I)+U(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = .1 AUX(P, Q, I, I, 2) = .1 AU(P, Q, I, I, 1) = 1 AU(P, Q, I, I, 2) = 1 F(P, Q, I) = UT(P, Q, I)+UX(P, Q, I)+UY(P, Q, I) FUT(P, Q, I, I) = 1 FUX(P, Q, I, I) = 1 FUY(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)+.2*T-X(P)*Y(Q) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN C GET AND PRINT THE ERROR. 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IEWE INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY0KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ttg2.f000066400000000000000000000145311420247104600161260ustar00rootroot00000000000000C$TEST TTG2 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG2 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IUMB, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), TSTART, DT, LX, LY, RX REAL RY, WS(1000), RS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE TWO COUPLED, NONLINEAR HEAT EQUATIONS. C U1 SUB T = DIV . ( U1X, U1Y ) - U1*U2 + G1 C U2 SUB T = DIV . ( U2X, U2Y ) - U1*U2 + G2 C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 2 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1E-2 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 1E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, 1 NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER P, Q REAL EXP DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, 1, 1) = UX(P, Q, 1) AUX(P, Q, 1, 1, 1) = 1 A(P, Q, 1, 2) = UY(P, Q, 1) AUY(P, Q, 1, 1, 2) = 1 F(P, Q, 1) = UT(P, Q, 1)+U(P, Q, 1)*U(P, Q, 2) FU(P, Q, 1, 1) = U(P, Q, 2) FU(P, Q, 1, 2) = U(P, Q, 1) FUT(P, Q, 1, 1) = 1 A(P, Q, 2, 1) = UX(P, Q, 2) AUX(P, Q, 2, 2, 1) = 1 A(P, Q, 2, 2) = UY(P, Q, 2) AUY(P, Q, 2, 2, 2) = 1 F(P, Q, 2) = UT(P, Q, 2)+U(P, Q, 1)*U(P, Q, 2) FU(P, Q, 2, 1) = U(P, Q, 2) FU(P, Q, 2, 2) = U(P, Q, 1) FUT(P, Q, 2, 2) = 1 F(P, Q, 1) = F(P, Q, 1)-(EXP(T*(X(P)-Y(Q)))*(X(P)-Y(Q)-2.*T* 1 T)+1.) F(P, Q, 2) = F(P, Q, 2)-(EXP(T*(Y(Q)-X(P)))*(Y(Q)-X(P)-2.*T* 1 T)+1.) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J REAL EXP DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-EXP(T*(X(I)-Y(J))) BU(I, J, 2, 2) = 1 B(I, J, 2) = U(I, J, 2)-EXP(T*(Y(J)-X(I))) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, J INTEGER IEWE, KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NU*NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) DO 5 J = 1, NU C EVALUATE THEM. TEMP = (J-1)*(NX-KX)*(NY-KY) CALL TSD1(2, KA, WS, ITA, NTA, U(TEMP+1), WS, IXA, NXA, MA, WS( 1 IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 3 I = 1, TEMP TEMP2 = IEWE+I-1+(J-1)*NXS*NYS TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2)-WS(TEMP1-1))) 3 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 4) T, J, ERRU 4 FORMAT (14H ERROR IN U(.,, 1PE10.2, 1H,, I2, 3H) =, 1PE10.2) 5 CONTINUE CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P REAL EXP, FLOAT C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = EXP(FLOAT((-1)**(P+1))*T*(X(I)-Y(J))) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ttg3.f000066400000000000000000000163351420247104600161330ustar00rootroot00000000000000C$TEST TTG3 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG3 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, I, IUMB, IMMM INTEGER IS(1000), IU, IX, IY, NU, KX INTEGER NX, KY, NY, ILUMB REAL ERRPAR(2), TSTART, DT, YB(4), LX, RS(1000) REAL RX, WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE LAYERED HEAT EQUATION, WITH KAPPA = 1, 1/2, 1/3, C DIV . ( KAPPA(X,Y) * GRAD U ) = UT + G C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 DO 1 I = 1, 4 YB(I) = I-1 1 CONTINUE KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = ILUMB(YB, 4, NDY, KY, NY) C MAKE MULT = KY-1. IY = IMMM(IY, NY, YB(2), KY-1) C MAKE MULT = KY-1. IY = IMMM(IY, NY, YB(3), KY-1) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, 1 NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q REAL KAPPA LOGICAL TEMP DO 7 I = 1, NU DO 6 Q = 1, NY DO 5 P = 1, NX IF (Y(Q) .GE. 1.) GOTO 1 KAPPA = 1 GOTO 4 1 IF (Y(Q) .GE. 2.) GOTO 2 KAPPA = 0.5 GOTO 3 2 KAPPA = 1./3E0 3 CONTINUE 4 A(P, Q, I, 1) = KAPPA*UX(P, Q, I) AUX(P, Q, I, I, 1) = KAPPA A(P, Q, I, 2) = KAPPA*UY(P, Q, I) AUY(P, Q, I, I, 2) = KAPPA F(P, Q, I) = UT(P, Q, I) FUT(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)-Y(Q)/KAPPA TEMP = 1. .LT. Y(Q) IF (TEMP) TEMP = Y(Q) .LT. 2. IF (TEMP) F(P, Q, I) = F(P, Q, I)+1. TEMP = 2. .LT. Y(Q) IF (TEMP) TEMP = Y(Q) .LT. 3. IF (TEMP) F(P, Q, I) = F(P, Q, I)+3. 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J LOGICAL TEMP DO 6 J = 1, NY DO 5 I = 1, NX TEMP = X(I) .EQ. LX IF (.NOT. TEMP) TEMP = X(I) .EQ. RX IF (.NOT. TEMP) GOTO 1 BUX(I, J, 1, 1) = 1 C LEFT OR RIGHT. C NEUMANN BCS. B(I, J, 1) = UX(I, J, 1) GOTO 4 1 IF (Y(J) .NE. LY) GOTO 2 B(I, J, 1) = U(I, J, 1) C BOTTOM. BU(I, J, 1, 1) = 1 GOTO 3 2 B(I, J, 1) = U(I, J, 1)-6.*T C TOP. BU(I, J, 1, 1) = 1 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IEWE INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY,KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY IF (Y(J) .GE. 1.) GOTO 1 U(I, J, P) = T*Y(J) GOTO 4 1 IF (Y(J) .GE. 2.) GOTO 2 U(I, J, P) = 2.*T*Y(J)-T GOTO 3 2 U(I, J, P) = 3.*T*Y(J)-3.*T 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ttg4.f000066400000000000000000000201731420247104600161270ustar00rootroot00000000000000C$TEST TTG4 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG4 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IUMB, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), TSTART, DT, LX, LY, RX REAL RY, WS(1000), RS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE LINEAR HEAT EQUATION C GRAD . ( UX - 0.1 * UY , 0.1*UX + UY ) = UT - X*Y C WITH SOLUTION U == T*X*Y ON [0,+1]**2, EXACT FOR K = 4, C WITH TILTED TOP AND BOTTOM, NORMAL BCS THERE. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY REAL T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY 1 , NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) EXTERNAL BT, LR INTEGER I, P, Q REAL D(600), X, Y, XX(100), YY(100) INTEGER TEMP IF (NX*NY .GT. 100) CALL SETERR(19HAF - NX*NY .GT. 100, 19, 1, 2) CALL BTMAP(T, XI, YI, NX, NY, LR, BT, XX, YY, D) C MAP INTO (X,Y). CALL TTGRU(NX, NY, D, UX, UY, UT, NU) DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX TEMP = P+(Q-1)*NX X = XX(TEMP) TEMP = P+(Q-1)*NX Y = YY(TEMP) A(P, Q, I, 1) = UX(P, Q, I)-.1*UY(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = -.1 AUX(P, Q, I, I, 2) = .1 F(P, Q, 1) = UT(P, Q, 1)-X*Y FUT(P, Q, 1, 1) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE C MAP INTO (XI,ETA). CALL TTGRG(NX, NY, D, NU, A, AU, AUX, AUY, F, FU, FUX, FUY) RETURN END SUBROUTINE BC(T, XI, NX, YI, NY, LX, RX, LY, RY, U, UT, UX 1 , UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, XI(NX), YI(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) EXTERNAL BT, LR INTEGER I, J REAL D(600), X, Y, XX(100), YY(100) INTEGER TEMP1 LOGICAL TEMP IF (NX*NY .GT. 100) CALL SETERR(19HBC - NX*NY .GT. 100, 19, 1, 2) CALL BTMAP(T, XI, YI, NX, NY, LR, BT, XX, YY, D) C MAP INTO (X,Y). CALL TTGRU(NX, NY, D, UX, UY, UT, NU) DO 6 J = 1, NY DO 5 I = 1, NX TEMP1 = I+(J-1)*NX X = XX(TEMP1) TEMP1 = I+(J-1)*NX Y = YY(TEMP1) TEMP = XI(I) .EQ. LX IF (.NOT. TEMP) TEMP = XI(I) .EQ. RX IF (.NOT. TEMP) GOTO 1 BU(I, J, 1, 1) = 1 C LEFT OR RIGHT. B(I, J, 1) = U(I, J, 1)-T*X*Y GOTO 4 1 IF (YI(J) .NE. LY) GOTO 2 B(I, J, 1) = (UX(I, J, 1)-T*Y)-(UY(I, J, 1)-T*X) C BOTTOM. BUX(I, J, 1, 1) = 1 C NORMAL IS (1,-1). BUY(I, J, 1, 1) = -1 GOTO 3 2 B(I, J, 1) = (UY(I, J, 1)-T*X)-(UX(I, J, 1)-T*Y) C TOP. BUX(I, J, 1, 1) = -1 C NORMAL IS (-1,1). BUY(I, J, 1, 1) = 1 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE C MAP INTO (XI,ETA). CALL TTGRB(NX, NY, D, NU, BUX, BUY, BUT) RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IEWE INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, XI, NX, YI, NY, U, NU) INTEGER NU, NX, NY REAL T, XI(NX), YI(NY), U(NX, NY, NU) EXTERNAL BT, LR INTEGER I, J, P REAL D(6000), X, Y, XX(1000), YY(1000) C THE EXACT SOLUTION. IF (NY .GT. 1000) CALL SETERR(18HEWE - NY .GT. 1000, 18, 1, 2) DO 3 P = 1, NU DO 2 I = 1, NX CALL BTMAP(T, XI(I), YI, 1, NY, LR, BT, XX, YY, D) DO 1 J = 1, NY X = XX(J) Y = YY(J) U(I, J, P) = T*X*Y 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE LR(T, LX, RX, LXT, RXT) REAL T, LX, RX, LXT, RXT C TO GET THE L AND R END-POINTS OF THE MAPPING IN X. LX = 0 RX = 1 LXT = 0 RXT = 0 RETURN END SUBROUTINE BT(T, X, F, G, FX, GX, FT, GT) REAL T, X, F, G, FX, GX REAL FT, GT C TO GET THE BOTTOM AND TOP OF MAPPING IN Y. F = X-1. G = X FT = 0 GT = 0 FX = 1 GX = 1 RETURN END PyBDSF-1.10.1/src/port3/ex/ttg5.f000066400000000000000000000161731420247104600161350ustar00rootroot00000000000000C$TEST TTG5 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG5 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, I, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), TSTART, DT, LX, LY, RX REAL RY, WS(1000), RS(1000), FLOAT, TSTOP LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE LAPLACES EQUATION WITH REAL ( Z*LOG(Z) ) AS SOLUTION. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 2 NDY = 2 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 NX = NDX+2*(KX-1) C SPACE FOR X MESH. IX = ISTKGT(NX, 3) DO 1 I = 1, KX TEMP = IX+I WS(TEMP-1) = 0 TEMP = IX+NX-I WS(TEMP) = RX 1 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 2 I = 1, TEMP TEMP1 = IX+KX-2+I WS(TEMP1) = RX*(FLOAT(I-1)/(FLOAT(NDX)-1E0))**KX 2 CONTINUE NY = NDY+2*(KY-1) C SPACE FOR Y MESH. IY = ISTKGT(NY, 3) DO 3 I = 1, KY TEMP = IY+I WS(TEMP-1) = 0 TEMP = IY+NY-I WS(TEMP) = RY 3 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 4 I = 1, TEMP TEMP1 = IY+KY-2+I WS(TEMP1) = RY*(FLOAT(I-1)/(FLOAT(NDY)-1E0))**KY 4 CONTINUE C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY REAL T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY 1 , NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J REAL COS, SIN, R, ALOG, ATAN, SQRT REAL THETA DO 6 J = 1, NY DO 5 I = 1, NX IF (Y(J) .NE. LY) GOTO 1 B(I, J, 1) = UY(I, J, 1) C NEUMANN DATA ON BOTTOM. BUY(I, J, 1, 1) = 1 GOTO 4 1 R = SQRT(X(I)**2+Y(J)**2) C DIRICHLET DATA. IF (X(I) .LE. 0.) GOTO 2 THETA = ATAN(Y(J)/X(I)) GOTO 3 2 THETA = 2.*ATAN(1E0) 3 B(I, J, 1) = U(I, J, 1)-R*(COS(THETA)*ALOG(R)-THETA*SIN( 1 THETA)) BU(I, J, 1, 1) = 1 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IEWE INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P REAL COS, SIN, R, ALOG, ATAN, SQRT REAL THETA C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY R = SQRT(X(I)**2+Y(J)**2) IF (X(I) .LE. 0.) GOTO 1 THETA = ATAN(Y(J)/X(I)) GOTO 2 1 THETA = 2.*ATAN(1E0) 2 IF (R .LE. 0.) GOTO 3 U(I, J, P) = R*(COS(THETA)*ALOG(R)-THETA*SIN(THETA)) GOTO 4 3 U(I, J, P) = 0 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ttg6.f000066400000000000000000000264071420247104600161370ustar00rootroot00000000000000C$TEST TTG6 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG6 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER IUE, NDX, NDY, IUR, IXR, IYR INTEGER NXR, NYR, ISTKGT, I, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY, I1MACH REAL ABS, ERRPAR(2), TSTART, EERR, ERRE, ERRR REAL AMAX1, DT, LX, LY, RX, RY REAL WS(1000), RS(1000), FLOAT, TSTOP LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET ERROR ESTIMATES FOR LAPLACES EQUATION WITH REAL ( Z*LOG(Z) ) AS C SOLUTION. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 2 NDY = 2 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 NX = NDX+2*(KX-1) C SPACE FOR X MESH. IX = ISTKGT(NX, 3) DO 1 I = 1, KX TEMP = IX+I WS(TEMP-1) = 0 TEMP = IX+NX-I WS(TEMP) = RX 1 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 2 I = 1, TEMP TEMP2 = IX+KX-2+I WS(TEMP2) = RX*(FLOAT(I-1)/(FLOAT(NDX)-1E0))**KX 2 CONTINUE NY = NDY+2*(KY-1) C SPACE FOR Y MESH. IY = ISTKGT(NY, 3) DO 3 I = 1, KY TEMP = IY+I WS(TEMP-1) = 0 TEMP = IY+NY-I WS(TEMP) = RY 3 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 4 I = 1, TEMP TEMP2 = IY+KY-2+I WS(TEMP2) = RY*(FLOAT(I-1)/(FLOAT(NDY)-1E0))**KY 4 CONTINUE C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) TEMP = I1MACH(2) WRITE (TEMP, 5) 5 FORMAT (23H SOLVING ON CRUDE MESH.) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) DT = 1 NDX = 2*NDX-1 C REFINE MESH. NDY = 2*NDY-1 NXR = NDX+2*(KX-1) C SPACE FOR X MESH. IXR = ISTKGT(NXR, 3) DO 6 I = 1, KX TEMP = IXR+I WS(TEMP-1) = 0 TEMP = IXR+NXR-I WS(TEMP) = RX 6 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 7 I = 1, TEMP TEMP2 = IXR+KX-2+I WS(TEMP2) = RX*(FLOAT(I-1)/(FLOAT(NDX)-1E0))**KX 7 CONTINUE NYR = NDY+2*(KY-1) C SPACE FOR Y MESH. IYR = ISTKGT(NYR, 3) DO 8 I = 1, KY TEMP = IYR+I WS(TEMP-1) = 0 TEMP = IYR+NYR-I WS(TEMP) = RY 8 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 9 I = 1, TEMP TEMP2 = IYR+KY-2+I WS(TEMP2) = RY*(FLOAT(I-1)/(FLOAT(NDY)-1E0))**KY 9 CONTINUE C SPACE FOR THE SOLUTION. IUR = ISTKGT(NU*(NXR-KX)*(NYR-KY), 3) CALL SETR(NU*(NXR-KX)*(NYR-KY), 0E0, WS(IUR)) TEMP = I1MACH(2) WRITE (TEMP, 10) 10 FORMAT (25H SOLVING ON REFINED MESH.) CALL TTGR(WS(IUR), NU, KX, WS(IXR), NXR, KY, WS(IYR), NYR, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) DT = 1 ERRPAR(1) = ERRPAR(1)/10. ERRPAR(2) = ERRPAR(2)/10. C SPACE FOR THE SOLUTION. IUE = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IUE)) TEMP = I1MACH(2) WRITE (TEMP, 11) 11 FORMAT (24H SOLVING WITH ERRPAR/10.) CALL TTGR(WS(IUE), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) ERRR = EERR(KX, IX, NX, KY, IY, NY, WS(IU), NU, IXR, NXR, IYR, 1 NYR, WS(IUR), TSTOP) ERRE = 0 TEMP = NU*(NX-KX)*(NY-KY) DO 12 I = 1, TEMP TEMP2 = IU+I TEMP1 = IUE+I ERRE = AMAX1(ERRE, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 12 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 13) ERRE 13 FORMAT (24H U ERROR FROM U AND UE =, 1PE10.2) TEMP = I1MACH(2) WRITE (TEMP, 14) ERRR 14 FORMAT (24H U ERROR FROM U AND UR =, 1PE10.2) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY REAL T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY 1 , NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J REAL COS, SIN, R, ALOG, ATAN, SQRT REAL THETA DO 6 J = 1, NY DO 5 I = 1, NX IF (Y(J) .NE. LY) GOTO 1 B(I, J, 1) = UY(I, J, 1) C NEUMANN DATA ON BOTTOM. BUY(I, J, 1, 1) = 1 GOTO 4 1 R = SQRT(X(I)**2+Y(J)**2) C DIRICHLET DATA. IF (X(I) .LE. 0.) GOTO 2 THETA = ATAN(Y(J)/X(I)) GOTO 3 2 THETA = 2.*ATAN(1E0) 3 B(I, J, 1) = U(I, J, 1)-R*(COS(THETA)*ALOG(R)-THETA*SIN( 1 THETA)) BU(I, J, 1, 1) = 1 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IEWE INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END REAL FUNCTION EERR(KX, IX, NX, KY, IY, NY, U, NU, IXR, NXR 1 , IYR, NYR, UR, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU, IXR, NXR, IYR, NYR REAL U(1), UR(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IFAR INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR ESTIMATE AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU), UR(NXR-KX,NYR-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / FINE MESH RECTA CNGLE. C X SEARCH GRID. IXS = ILUMD(WS(IXR), NXR, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IYR), NYR, 2*KY, NYS) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) KA(1) = KX KA(2) = KY ITA(1) = IXR ITA(2) = IYR NTA(1) = NXR NTA(2) = NYR IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFAR = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, UR, WS, IXA, NXA, MA, WS(IFAR)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IFAR+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE CALL LEAVE EERR = ERRU RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P REAL COS, SIN, R, ALOG, ATAN, SQRT REAL THETA C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY R = SQRT(X(I)**2+Y(J)**2) IF (X(I) .LE. 0.) GOTO 1 THETA = ATAN(Y(J)/X(I)) GOTO 2 1 THETA = 2.*ATAN(1E0) 2 IF (R .LE. 0.) GOTO 3 U(I, J, P) = R*(COS(THETA)*ALOG(R)-THETA*SIN(THETA)) GOTO 4 3 U(I, J, P) = 0 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ttgp.f000066400000000000000000000134241420247104600162240ustar00rootroot00000000000000C$TEST TTGP C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTGP C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IUMB, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), TSTART, DT, LX, LY, RX REAL RY, WS(1000), RS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE HEAT EQUATION WITH SOLUTION U == T*X*Y, C GRAD . ( U + UX + .1 * UY, U + UY + .1 * UX ) = UT + UX + UY +G(X,T) C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) C INITIAL CONDITIONS FOR U. CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, 1 NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I)+.1*UY(P, Q, I)+U(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I)+U(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = .1 AUX(P, Q, I, I, 2) = .1 AU(P, Q, I, I, 1) = 1 AU(P, Q, I, I, 2) = 1 F(P, Q, I) = UT(P, Q, I)+UX(P, Q, I)+UY(P, Q, I) FUT(P, Q, I, I) = 1 FUX(P, Q, I, I) = 1 FUY(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)+.2*T-X(P)*Y(Q) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN C PRINT RESULTS. 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, KA(2) INTEGER MA(2), IS(1000), ILUMD, I1MACH REAL RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO PRINT THE SOLUTION AT EACH TIME-STEP. C U(NX-KX,NY,KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE SOLUTION AT 2 * 2 POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2, NYS) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) TEMP1 = IFA+NXS*NYS-1 TEMP = I1MACH(2) WRITE (TEMP, 1) T, (WS(I), I = IFA, TEMP1) 1 FORMAT (3H U(, 1PE10.2, 7H,.,.) =, (1P5E10.2/20X,1P4E10.2)) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ttgrx1.f000066400000000000000000000142011420247104600164710ustar00rootroot00000000000000C$TEST TTG1 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG1 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IUMB, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), TSTART, DT, LX, LY, RX REAL RY, WS(1000), RS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE HEAT EQUATION WITH SOLUTION U == T*X*Y, C GRAD . ( U + UX + .1 * UY, U + UY + .1 * UX ) = UT + UX + UY +G(X,T) C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) C INITIAL CONDITIONS FOR U. CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, 1 NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I)+.1*UY(P, Q, I)+U(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I)+U(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = .1 AUX(P, Q, I, I, 2) = .1 AU(P, Q, I, I, 1) = 1 AU(P, Q, I, I, 2) = 1 F(P, Q, I) = UT(P, Q, I)+UX(P, Q, I)+UY(P, Q, I) FUT(P, Q, I, I) = 1 FUX(P, Q, I, I) = 1 FUY(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)+.2*T-X(P)*Y(Q) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN C GET AND PRINT THE ERROR. 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IEWE INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY0KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ttgrx1p.f000066400000000000000000000134241420247104600166570ustar00rootroot00000000000000C$TEST TTGP C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTGP C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IUMB, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), TSTART, DT, LX, LY, RX REAL RY, WS(1000), RS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE HEAT EQUATION WITH SOLUTION U == T*X*Y, C GRAD . ( U + UX + .1 * UY, U + UY + .1 * UX ) = UT + UX + UY +G(X,T) C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) C INITIAL CONDITIONS FOR U. CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, 1 NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I)+.1*UY(P, Q, I)+U(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I)+U(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = .1 AUX(P, Q, I, I, 2) = .1 AU(P, Q, I, I, 1) = 1 AU(P, Q, I, I, 2) = 1 F(P, Q, I) = UT(P, Q, I)+UX(P, Q, I)+UY(P, Q, I) FUT(P, Q, I, I) = 1 FUX(P, Q, I, I) = 1 FUY(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)+.2*T-X(P)*Y(Q) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN C PRINT RESULTS. 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, KA(2) INTEGER MA(2), IS(1000), ILUMD, I1MACH REAL RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO PRINT THE SOLUTION AT EACH TIME-STEP. C U(NX-KX,NY,KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE SOLUTION AT 2 * 2 POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2, NYS) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) TEMP1 = IFA+NXS*NYS-1 TEMP = I1MACH(2) WRITE (TEMP, 1) T, (WS(I), I = IFA, TEMP1) 1 FORMAT (3H U(, 1PE10.2, 7H,.,.) =, (1P5E10.2/20X,1P4E10.2)) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = T*X(I)*Y(J) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ttgrx2.f000066400000000000000000000145311420247104600165000ustar00rootroot00000000000000C$TEST TTG2 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG2 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IUMB, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), TSTART, DT, LX, LY, RX REAL RY, WS(1000), RS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE TWO COUPLED, NONLINEAR HEAT EQUATIONS. C U1 SUB T = DIV . ( U1X, U1Y ) - U1*U2 + G1 C U2 SUB T = DIV . ( U2X, U2Y ) - U1*U2 + G2 C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 2 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1E-2 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 1E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, 1 NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER P, Q REAL EXP DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, 1, 1) = UX(P, Q, 1) AUX(P, Q, 1, 1, 1) = 1 A(P, Q, 1, 2) = UY(P, Q, 1) AUY(P, Q, 1, 1, 2) = 1 F(P, Q, 1) = UT(P, Q, 1)+U(P, Q, 1)*U(P, Q, 2) FU(P, Q, 1, 1) = U(P, Q, 2) FU(P, Q, 1, 2) = U(P, Q, 1) FUT(P, Q, 1, 1) = 1 A(P, Q, 2, 1) = UX(P, Q, 2) AUX(P, Q, 2, 2, 1) = 1 A(P, Q, 2, 2) = UY(P, Q, 2) AUY(P, Q, 2, 2, 2) = 1 F(P, Q, 2) = UT(P, Q, 2)+U(P, Q, 1)*U(P, Q, 2) FU(P, Q, 2, 1) = U(P, Q, 2) FU(P, Q, 2, 2) = U(P, Q, 1) FUT(P, Q, 2, 2) = 1 F(P, Q, 1) = F(P, Q, 1)-(EXP(T*(X(P)-Y(Q)))*(X(P)-Y(Q)-2.*T* 1 T)+1.) F(P, Q, 2) = F(P, Q, 2)-(EXP(T*(Y(Q)-X(P)))*(Y(Q)-X(P)-2.*T* 1 T)+1.) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J REAL EXP DO 2 J = 1, NY DO 1 I = 1, NX BU(I, J, 1, 1) = 1 B(I, J, 1) = U(I, J, 1)-EXP(T*(X(I)-Y(J))) BU(I, J, 2, 2) = 1 B(I, J, 2) = U(I, J, 2)-EXP(T*(Y(J)-X(I))) 1 CONTINUE 2 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, J INTEGER IEWE, KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C THE PORT LIBRARY STACK AND ITS ALIASES. IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NU*NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) DO 5 J = 1, NU C EVALUATE THEM. TEMP = (J-1)*(NX-KX)*(NY-KY) CALL TSD1(2, KA, WS, ITA, NTA, U(TEMP+1), WS, IXA, NXA, MA, WS( 1 IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 3 I = 1, TEMP TEMP2 = IEWE+I-1+(J-1)*NXS*NYS TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2)-WS(TEMP1-1))) 3 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 4) T, J, ERRU 4 FORMAT (14H ERROR IN U(.,, 1PE10.2, 1H,, I2, 3H) =, 1PE10.2) 5 CONTINUE CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P REAL EXP, FLOAT C THE EXACT SOLUTION. DO 3 P = 1, NU DO 2 I = 1, NX DO 1 J = 1, NY U(I, J, P) = EXP(FLOAT((-1)**(P+1))*T*(X(I)-Y(J))) 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ttgrx3.f000066400000000000000000000163351420247104600165050ustar00rootroot00000000000000C$TEST TTG3 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG3 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, I, IUMB, IMMM INTEGER IS(1000), IU, IX, IY, NU, KX INTEGER NX, KY, NY, ILUMB REAL ERRPAR(2), TSTART, DT, YB(4), LX, RS(1000) REAL RX, WS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE LAYERED HEAT EQUATION, WITH KAPPA = 1, 1/2, 1/3, C DIV . ( KAPPA(X,Y) * GRAD U ) = UT + G C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 DO 1 I = 1, 4 YB(I) = I-1 1 CONTINUE KX = 2 KY = 2 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = ILUMB(YB, 4, NDY, KY, NY) C MAKE MULT = KY-1. IY = IMMM(IY, NY, YB(2), KY-1) C MAKE MULT = KY-1. IY = IMMM(IY, NY, YB(3), KY-1) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, X, NX, Y, NY, NU, U, UT, UX, UY, UXT, UYT 1 , A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, FUXT, 2 FUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, 1 NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q REAL KAPPA LOGICAL TEMP DO 7 I = 1, NU DO 6 Q = 1, NY DO 5 P = 1, NX IF (Y(Q) .GE. 1.) GOTO 1 KAPPA = 1 GOTO 4 1 IF (Y(Q) .GE. 2.) GOTO 2 KAPPA = 0.5 GOTO 3 2 KAPPA = 1./3E0 3 CONTINUE 4 A(P, Q, I, 1) = KAPPA*UX(P, Q, I) AUX(P, Q, I, I, 1) = KAPPA A(P, Q, I, 2) = KAPPA*UY(P, Q, I) AUY(P, Q, I, I, 2) = KAPPA F(P, Q, I) = UT(P, Q, I) FUT(P, Q, I, I) = 1 F(P, Q, I) = F(P, Q, I)-Y(Q)/KAPPA TEMP = 1. .LT. Y(Q) IF (TEMP) TEMP = Y(Q) .LT. 2. IF (TEMP) F(P, Q, I) = F(P, Q, I)+1. TEMP = 2. .LT. Y(Q) IF (TEMP) TEMP = Y(Q) .LT. 3. IF (TEMP) F(P, Q, I) = F(P, Q, I)+3. 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J LOGICAL TEMP DO 6 J = 1, NY DO 5 I = 1, NX TEMP = X(I) .EQ. LX IF (.NOT. TEMP) TEMP = X(I) .EQ. RX IF (.NOT. TEMP) GOTO 1 BUX(I, J, 1, 1) = 1 C LEFT OR RIGHT. C NEUMANN BCS. B(I, J, 1) = UX(I, J, 1) GOTO 4 1 IF (Y(J) .NE. LY) GOTO 2 B(I, J, 1) = U(I, J, 1) C BOTTOM. BU(I, J, 1, 1) = 1 GOTO 3 2 B(I, J, 1) = U(I, J, 1)-6.*T C TOP. BU(I, J, 1, 1) = 1 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IEWE INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY,KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY IF (Y(J) .GE. 1.) GOTO 1 U(I, J, P) = T*Y(J) GOTO 4 1 IF (Y(J) .GE. 2.) GOTO 2 U(I, J, P) = 2.*T*Y(J)-T GOTO 3 2 U(I, J, P) = 3.*T*Y(J)-3.*T 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ttgrx4.f000066400000000000000000000201731420247104600165010ustar00rootroot00000000000000C$TEST TTG4 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG4 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, IUMB, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), TSTART, DT, LX, LY, RX REAL RY, WS(1000), RS(1000), TSTOP LOGICAL LS(1000) COMPLEX CS(500) EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE THE LINEAR HEAT EQUATION C GRAD . ( UX - 0.1 * UY , 0.1*UX + UY ) = UT - X*Y C WITH SOLUTION U == T*X*Y ON [0,+1]**2, EXACT FOR K = 4, C WITH TILTED TOP AND BOTTOM, NORMAL BCS THERE. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 3 NDY = 3 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 C UNIFORM GRID. IX = IUMB(LX, RX, NDX, KX, NX) C UNIFORM GRID. IY = IUMB(LY, RY, NDY, KY, NY) C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY REAL T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY 1 , NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) EXTERNAL BT, LR INTEGER I, P, Q REAL D(600), X, Y, XX(100), YY(100) INTEGER TEMP IF (NX*NY .GT. 100) CALL SETERR(19HAF - NX*NY .GT. 100, 19, 1, 2) CALL BTMAP(T, XI, YI, NX, NY, LR, BT, XX, YY, D) C MAP INTO (X,Y). CALL TTGRU(NX, NY, D, UX, UY, UT, NU) DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX TEMP = P+(Q-1)*NX X = XX(TEMP) TEMP = P+(Q-1)*NX Y = YY(TEMP) A(P, Q, I, 1) = UX(P, Q, I)-.1*UY(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I)+.1*UX(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 AUY(P, Q, I, I, 1) = -.1 AUX(P, Q, I, I, 2) = .1 F(P, Q, 1) = UT(P, Q, 1)-X*Y FUT(P, Q, 1, 1) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE C MAP INTO (XI,ETA). CALL TTGRG(NX, NY, D, NU, A, AU, AUX, AUY, F, FU, FUX, FUY) RETURN END SUBROUTINE BC(T, XI, NX, YI, NY, LX, RX, LY, RY, U, UT, UX 1 , UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, XI(NX), YI(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) EXTERNAL BT, LR INTEGER I, J REAL D(600), X, Y, XX(100), YY(100) INTEGER TEMP1 LOGICAL TEMP IF (NX*NY .GT. 100) CALL SETERR(19HBC - NX*NY .GT. 100, 19, 1, 2) CALL BTMAP(T, XI, YI, NX, NY, LR, BT, XX, YY, D) C MAP INTO (X,Y). CALL TTGRU(NX, NY, D, UX, UY, UT, NU) DO 6 J = 1, NY DO 5 I = 1, NX TEMP1 = I+(J-1)*NX X = XX(TEMP1) TEMP1 = I+(J-1)*NX Y = YY(TEMP1) TEMP = XI(I) .EQ. LX IF (.NOT. TEMP) TEMP = XI(I) .EQ. RX IF (.NOT. TEMP) GOTO 1 BU(I, J, 1, 1) = 1 C LEFT OR RIGHT. B(I, J, 1) = U(I, J, 1)-T*X*Y GOTO 4 1 IF (YI(J) .NE. LY) GOTO 2 B(I, J, 1) = (UX(I, J, 1)-T*Y)-(UY(I, J, 1)-T*X) C BOTTOM. BUX(I, J, 1, 1) = 1 C NORMAL IS (1,-1). BUY(I, J, 1, 1) = -1 GOTO 3 2 B(I, J, 1) = (UY(I, J, 1)-T*X)-(UX(I, J, 1)-T*Y) C TOP. BUX(I, J, 1, 1) = -1 C NORMAL IS (-1,1). BUY(I, J, 1, 1) = 1 3 CONTINUE 4 CONTINUE 5 CONTINUE 6 CONTINUE C MAP INTO (XI,ETA). CALL TTGRB(NX, NY, D, NU, BUX, BUY, BUT) RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IEWE INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, XI, NX, YI, NY, U, NU) INTEGER NU, NX, NY REAL T, XI(NX), YI(NY), U(NX, NY, NU) EXTERNAL BT, LR INTEGER I, J, P REAL D(6000), X, Y, XX(1000), YY(1000) C THE EXACT SOLUTION. IF (NY .GT. 1000) CALL SETERR(18HEWE - NY .GT. 1000, 18, 1, 2) DO 3 P = 1, NU DO 2 I = 1, NX CALL BTMAP(T, XI(I), YI, 1, NY, LR, BT, XX, YY, D) DO 1 J = 1, NY X = XX(J) Y = YY(J) U(I, J, P) = T*X*Y 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE LR(T, LX, RX, LXT, RXT) REAL T, LX, RX, LXT, RXT C TO GET THE L AND R END-POINTS OF THE MAPPING IN X. LX = 0 RX = 1 LXT = 0 RXT = 0 RETURN END SUBROUTINE BT(T, X, F, G, FX, GX, FT, GT) REAL T, X, F, G, FX, GX REAL FT, GT C TO GET THE BOTTOM AND TOP OF MAPPING IN Y. F = X-1. G = X FT = 0 GT = 0 FX = 1 GX = 1 RETURN END PyBDSF-1.10.1/src/port3/ex/ttgrx5.f000066400000000000000000000161731420247104600165070ustar00rootroot00000000000000C$TEST TTG5 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG5 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER NDX, NDY, ISTKGT, I, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY REAL ERRPAR(2), TSTART, DT, LX, LY, RX REAL RY, WS(1000), RS(1000), FLOAT, TSTOP LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO SOLVE LAPLACES EQUATION WITH REAL ( Z*LOG(Z) ) AS SOLUTION. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 2 NDY = 2 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 NX = NDX+2*(KX-1) C SPACE FOR X MESH. IX = ISTKGT(NX, 3) DO 1 I = 1, KX TEMP = IX+I WS(TEMP-1) = 0 TEMP = IX+NX-I WS(TEMP) = RX 1 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 2 I = 1, TEMP TEMP1 = IX+KX-2+I WS(TEMP1) = RX*(FLOAT(I-1)/(FLOAT(NDX)-1E0))**KX 2 CONTINUE NY = NDY+2*(KY-1) C SPACE FOR Y MESH. IY = ISTKGT(NY, 3) DO 3 I = 1, KY TEMP = IY+I WS(TEMP-1) = 0 TEMP = IY+NY-I WS(TEMP) = RY 3 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 4 I = 1, TEMP TEMP1 = IY+KY-2+I WS(TEMP1) = RY*(FLOAT(I-1)/(FLOAT(NDY)-1E0))**KY 4 CONTINUE C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY REAL T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY 1 , NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J REAL COS, SIN, R, ALOG, ATAN, SQRT REAL THETA DO 6 J = 1, NY DO 5 I = 1, NX IF (Y(J) .NE. LY) GOTO 1 B(I, J, 1) = UY(I, J, 1) C NEUMANN DATA ON BOTTOM. BUY(I, J, 1, 1) = 1 GOTO 4 1 R = SQRT(X(I)**2+Y(J)**2) C DIRICHLET DATA. IF (X(I) .LE. 0.) GOTO 2 THETA = ATAN(Y(J)/X(I)) GOTO 3 2 THETA = 2.*ATAN(1E0) 3 B(I, J, 1) = U(I, J, 1)-R*(COS(THETA)*ALOG(R)-THETA*SIN( 1 THETA)) BU(I, J, 1, 1) = 1 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IEWE INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P REAL COS, SIN, R, ALOG, ATAN, SQRT REAL THETA C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY R = SQRT(X(I)**2+Y(J)**2) IF (X(I) .LE. 0.) GOTO 1 THETA = ATAN(Y(J)/X(I)) GOTO 2 1 THETA = 2.*ATAN(1E0) 2 IF (R .LE. 0.) GOTO 3 U(I, J, P) = R*(COS(THETA)*ALOG(R)-THETA*SIN(THETA)) GOTO 4 3 U(I, J, P) = 0 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/ttgrx6.f000066400000000000000000000264071420247104600165110ustar00rootroot00000000000000C$TEST TTG6 C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE TTG6 C*********************************************************************** C C EXAMPLE OF USE OF PORT PROGRAM TTGR C C*********************************************************************** COMMON /CSTAK/ DS DOUBLE PRECISION DS(350000) EXTERNAL HANDLE, BC, AF INTEGER IUE, NDX, NDY, IUR, IXR, IYR INTEGER NXR, NYR, ISTKGT, I, IS(1000), IU INTEGER IX, IY, NU, KX, NX, KY INTEGER NY, I1MACH REAL ABS, ERRPAR(2), TSTART, EERR, ERRE, ERRR REAL AMAX1, DT, LX, LY, RX, RY REAL WS(1000), RS(1000), FLOAT, TSTOP LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET ERROR ESTIMATES FOR LAPLACES EQUATION WITH REAL ( Z*LOG(Z) ) AS C SOLUTION. C THE PORT LIBRARY STACK AND ITS ALIASES. C INITIALIZE THE PORT LIBRARY STACK LENGTH. CALL ISTKIN(350000, 4) CALL ENTER(1) NU = 1 LX = 0 RX = 1 LY = 0 RY = 1 KX = 4 KY = 4 NDX = 2 NDY = 2 TSTART = 0 TSTOP = 1 DT = 1 ERRPAR(1) = 1E-2 ERRPAR(2) = 1E-4 NX = NDX+2*(KX-1) C SPACE FOR X MESH. IX = ISTKGT(NX, 3) DO 1 I = 1, KX TEMP = IX+I WS(TEMP-1) = 0 TEMP = IX+NX-I WS(TEMP) = RX 1 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 2 I = 1, TEMP TEMP2 = IX+KX-2+I WS(TEMP2) = RX*(FLOAT(I-1)/(FLOAT(NDX)-1E0))**KX 2 CONTINUE NY = NDY+2*(KY-1) C SPACE FOR Y MESH. IY = ISTKGT(NY, 3) DO 3 I = 1, KY TEMP = IY+I WS(TEMP-1) = 0 TEMP = IY+NY-I WS(TEMP) = RY 3 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 4 I = 1, TEMP TEMP2 = IY+KY-2+I WS(TEMP2) = RY*(FLOAT(I-1)/(FLOAT(NDY)-1E0))**KY 4 CONTINUE C SPACE FOR THE SOLUTION. IU = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IU)) TEMP = I1MACH(2) WRITE (TEMP, 5) 5 FORMAT (23H SOLVING ON CRUDE MESH.) CALL TTGR(WS(IU), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) DT = 1 NDX = 2*NDX-1 C REFINE MESH. NDY = 2*NDY-1 NXR = NDX+2*(KX-1) C SPACE FOR X MESH. IXR = ISTKGT(NXR, 3) DO 6 I = 1, KX TEMP = IXR+I WS(TEMP-1) = 0 TEMP = IXR+NXR-I WS(TEMP) = RX 6 CONTINUE C 0 AND RX MULT = KX. TEMP = NDX-1 DO 7 I = 1, TEMP TEMP2 = IXR+KX-2+I WS(TEMP2) = RX*(FLOAT(I-1)/(FLOAT(NDX)-1E0))**KX 7 CONTINUE NYR = NDY+2*(KY-1) C SPACE FOR Y MESH. IYR = ISTKGT(NYR, 3) DO 8 I = 1, KY TEMP = IYR+I WS(TEMP-1) = 0 TEMP = IYR+NYR-I WS(TEMP) = RY 8 CONTINUE C 0 AND RY MULT = KY. TEMP = NDY-1 DO 9 I = 1, TEMP TEMP2 = IYR+KY-2+I WS(TEMP2) = RY*(FLOAT(I-1)/(FLOAT(NDY)-1E0))**KY 9 CONTINUE C SPACE FOR THE SOLUTION. IUR = ISTKGT(NU*(NXR-KX)*(NYR-KY), 3) CALL SETR(NU*(NXR-KX)*(NYR-KY), 0E0, WS(IUR)) TEMP = I1MACH(2) WRITE (TEMP, 10) 10 FORMAT (25H SOLVING ON REFINED MESH.) CALL TTGR(WS(IUR), NU, KX, WS(IXR), NXR, KY, WS(IYR), NYR, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) DT = 1 ERRPAR(1) = ERRPAR(1)/10. ERRPAR(2) = ERRPAR(2)/10. C SPACE FOR THE SOLUTION. IUE = ISTKGT(NU*(NX-KX)*(NY-KY), 3) CALL SETR(NU*(NX-KX)*(NY-KY), 0E0, WS(IUE)) TEMP = I1MACH(2) WRITE (TEMP, 11) 11 FORMAT (24H SOLVING WITH ERRPAR/10.) CALL TTGR(WS(IUE), NU, KX, WS(IX), NX, KY, WS(IY), NY, TSTART, 1 TSTOP, DT, AF, BC, ERRPAR, HANDLE) ERRR = EERR(KX, IX, NX, KY, IY, NY, WS(IU), NU, IXR, NXR, IYR, 1 NYR, WS(IUR), TSTOP) ERRE = 0 TEMP = NU*(NX-KX)*(NY-KY) DO 12 I = 1, TEMP TEMP2 = IU+I TEMP1 = IUE+I ERRE = AMAX1(ERRE, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 12 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 13) ERRE 13 FORMAT (24H U ERROR FROM U AND UE =, 1PE10.2) TEMP = I1MACH(2) WRITE (TEMP, 14) ERRR 14 FORMAT (24H U ERROR FROM U AND UR =, 1PE10.2) CALL LEAVE CALL WRAPUP STOP END SUBROUTINE AF(T, XI, NX, YI, NY, NU, U, UT, UX, UY, UXT, 1 UYT, A, AU, AUT, AUX, AUY, AUXT, AUYT, F, FU, FUT, FUX, FUY, 2 FUXT, FUYT) INTEGER NU, NX, NY REAL T, XI(NX), YI(NY), U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY 1 , NU) REAL UY(NX, NY, NU), UXT(NX, NY, NU), UYT(NX, NY, NU), A(NX, NY, 1 NU, 2), AU(NX, NY, NU, NU, 2), AUT(NX, NY, NU, NU, 2) REAL AUX(NX, NY, NU, NU, 2), AUY(NX, NY, NU, NU, 2), AUXT(NX, NY 1 , NU, NU, 2), AUYT(NX, NY, NU, NU, 2), F(NX, NY, NU), FU(NX, 2 NY, NU, NU) REAL FUT(NX, NY, NU, NU), FUX(NX, NY, NU, NU), FUY(NX, NY, NU, NU) 1 , FUXT(NX, NY, NU, NU), FUYT(NX, NY, NU, NU) INTEGER I, P, Q DO 3 I = 1, NU DO 2 Q = 1, NY DO 1 P = 1, NX A(P, Q, I, 1) = UX(P, Q, I) A(P, Q, I, 2) = UY(P, Q, I) AUX(P, Q, I, I, 1) = 1 AUY(P, Q, I, I, 2) = 1 1 CONTINUE 2 CONTINUE 3 CONTINUE RETURN END SUBROUTINE BC(T, X, NX, Y, NY, LX, RX, LY, RY, U, UT, UX, 1 UY, UXT, UYT, NU, B, BU, BUT, BUX, BUY, BUXT, BUYT) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), LX, RX, LY REAL RY, U(NX, NY, NU), UT(NX, NY, NU), UX(NX, NY, NU), UY(NX, NY, 1 NU), UXT(NX, NY, NU) REAL UYT(NX, NY, NU), B(NX, NY, NU), BU(NX, NY, NU, NU), BUT(NX, 1 NY, NU, NU), BUX(NX, NY, NU, NU), BUY(NX, NY, NU, NU) REAL BUXT(NX, NY, NU, NU), BUYT(NX, NY, NU, NU) INTEGER I, J REAL COS, SIN, R, ALOG, ATAN, SQRT REAL THETA DO 6 J = 1, NY DO 5 I = 1, NX IF (Y(J) .NE. LY) GOTO 1 B(I, J, 1) = UY(I, J, 1) C NEUMANN DATA ON BOTTOM. BUY(I, J, 1, 1) = 1 GOTO 4 1 R = SQRT(X(I)**2+Y(J)**2) C DIRICHLET DATA. IF (X(I) .LE. 0.) GOTO 2 THETA = ATAN(Y(J)/X(I)) GOTO 3 2 THETA = 2.*ATAN(1E0) 3 B(I, J, 1) = U(I, J, 1)-R*(COS(THETA)*ALOG(R)-THETA*SIN( 1 THETA)) BU(I, J, 1, 1) = 1 4 CONTINUE 5 CONTINUE 6 CONTINUE RETURN END SUBROUTINE HANDLE(T0, U0, T, U, NV, DT, TSTOP) INTEGER NV REAL T0, U0(NV), T, U(NV), DT, TSTOP COMMON /A7TGRP/ ERRPAR, NU, MXQ, MYQ INTEGER NU, MXQ, MYQ REAL ERRPAR(2) COMMON /A7TGRM/ KX, IX, NX, KY, IY, NY INTEGER KX, IX, NX, KY, IY, NY IF (T0 .NE. T) GOTO 2 WRITE (6, 1) T 1 FORMAT (16H RESTART FOR T =, 1PE10.2) RETURN 2 CALL GERR(KX, IX, NX, KY, IY, NY, U, NU, T) RETURN END SUBROUTINE GERR(KX, IX, NX, KY, IY, NY, U, NU, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU REAL U(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IEWE INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / MESH RECTANGLE. C X SEARCH GRID. IXS = ILUMD(WS(IX), NX, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IY), NY, 2*KY, NYS) C U SEARCH GRID VALUES. IEWE = ISTKGT(NXS*NYS, 3) C THE EXACT SOLUTION. CALL EWE(T, WS(IXS), NXS, WS(IYS), NYS, WS(IEWE), NU) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IEWE+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE TEMP = I1MACH(2) WRITE (TEMP, 2) T, ERRU 2 FORMAT (14H ERROR IN U(.,, 1PE10.2, 3H) =, 1PE10.2) CALL LEAVE RETURN END REAL FUNCTION EERR(KX, IX, NX, KY, IY, NY, U, NU, IXR, NXR 1 , IYR, NYR, UR, T) INTEGER KX, IX, NX, KY, IY, NY INTEGER NU, IXR, NXR, IYR, NYR REAL U(1), UR(1), T COMMON /CSTAK/ DS DOUBLE PRECISION DS(500) INTEGER IFA, ITA(2), IXA(2), NTA(2), NXA(2), IXS INTEGER IYS, NXS, NYS, ISTKGT, I, IFAR INTEGER KA(2), MA(2), IS(1000), ILUMD, I1MACH REAL ABS, ERRU, AMAX1, RS(1000), WS(1000) LOGICAL LS(1000) COMPLEX CS(500) INTEGER TEMP, TEMP1, TEMP2 EQUIVALENCE (DS(1), CS(1), WS(1), RS(1), IS(1), LS(1)) C TO GET AND PRINT THE ERROR ESTIMATE AT EACH TIME-STEP. C U(NX-KX,NY-KY,NU), UR(NXR-KX,NYR-KY,NU). C THE PORT LIBRARY STACK AND ITS ALIASES. CALL ENTER(1) C FIND THE ERROR IN THE SOLUTION AT 2*KX * 2*KY POINTS / FINE MESH RECTA CNGLE. C X SEARCH GRID. IXS = ILUMD(WS(IXR), NXR, 2*KX, NXS) C Y SEARCH GRID. IYS = ILUMD(WS(IYR), NYR, 2*KY, NYS) KA(1) = KX KA(2) = KY ITA(1) = IX ITA(2) = IY NTA(1) = NX NTA(2) = NY IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFA = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, U, WS, IXA, NXA, MA, WS(IFA)) KA(1) = KX KA(2) = KY ITA(1) = IXR ITA(2) = IYR NTA(1) = NXR NTA(2) = NYR IXA(1) = IXS IXA(2) = IYS NXA(1) = NXS NXA(2) = NYS MA(1) = 0 C GET SOLUTION. MA(2) = 0 C APPROXIMATE SOLUTION VALUES. IFAR = ISTKGT(NXS*NYS, 3) C EVALUATE THEM. CALL TSD1(2, KA, WS, ITA, NTA, UR, WS, IXA, NXA, MA, WS(IFAR)) C ERROR IN SOLUTION VALUES. ERRU = 0 TEMP = NXS*NYS DO 1 I = 1, TEMP TEMP2 = IFAR+I TEMP1 = IFA+I ERRU = AMAX1(ERRU, ABS(WS(TEMP2-1)-WS(TEMP1-1))) 1 CONTINUE CALL LEAVE EERR = ERRU RETURN END SUBROUTINE EWE(T, X, NX, Y, NY, U, NU) INTEGER NU, NX, NY REAL T, X(NX), Y(NY), U(NX, NY, NU) INTEGER I, J, P REAL COS, SIN, R, ALOG, ATAN, SQRT REAL THETA C THE EXACT SOLUTION. DO 7 P = 1, NU DO 6 I = 1, NX DO 5 J = 1, NY R = SQRT(X(I)**2+Y(J)**2) IF (X(I) .LE. 0.) GOTO 1 THETA = ATAN(Y(J)/X(I)) GOTO 2 1 THETA = 2.*ATAN(1E0) 2 IF (R .LE. 0.) GOTO 3 U(I, J, P) = R*(COS(THETA)*ALOG(R)-THETA*SIN(THETA)) GOTO 4 3 U(I, J, P) = 0 4 CONTINUE 5 CONTINUE 6 CONTINUE 7 CONTINUE RETURN END PyBDSF-1.10.1/src/port3/ex/vdsa.f000066400000000000000000000020671420247104600162040ustar00rootroot00000000000000C$TEST VDSA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE VDSA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM VDSS1 C C*********************************************************************** C SIN(X) + X**2 + 3 C REAL X, A(10), F, FPRIME, PT, H, SOL INTEGER IWRITE, N, I REAL U, L, DIST, DSOL C IWRITE = I1MACH(2) N = 10 X = 1.3 H = 1./ FLOAT(N-1) L = 1.0 U = 5.0 DIST = U - L C SET UP THE MESH AND DATA VALUES DO 100 I=1,N PT = L + DIST*FLOAT(I-1)*H A(I) = SIN(PT) + PT**2 + 3.0 100 CONTINUE CALL VDSS1 (X,N,U,L,A,F,FPRIME) C CHECK THE SOLUTION SOL = SIN(X) + X**2 + 3.0 DSOL = COS(X) + 2.0*X WRITE (IWRITE,101) 101 FORMAT (45H ACTUAL COMPUTED//) WRITE (IWRITE,102) SOL,F 102 FORMAT (17H F(X) = ,2E16.8) WRITE (IWRITE,103) DSOL,FPRIME 103 FORMAT (17H DERIVATIVE = ,2E16.8) STOP END PyBDSF-1.10.1/src/port3/ex/vdsb.f000066400000000000000000000027771420247104600162150ustar00rootroot00000000000000C$TEST VDSB C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE VDSB C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM VDSS2 C C*********************************************************************** C SIN(X(1)) + X(2)**2 + 3 C REAL X(2), A(10,10), F, FPRIME(2), PT1, PT2, H1, H2, SOL REAL DSOL1, DSOL2 INTEGER IWRITE, N1, N2, NA1, I, J REAL U(2),L(2),DIST(2) C IWRITE = I1MACH(2) N1 = 10 N2 = 10 X(1) = 1.7 X(2) = 1.7 H1 = 1./ FLOAT(N1-1) H2 = 1./ FLOAT(N2-1) L(1) = 1.0 U(1) = 5.0 L(2) = 1.0 U(2) = 5.0 DIST(1) = U(1) - L(1) DIST(2) = U(2) - L(2) C SET UP THE MESH AND DATA VALUES DO 100 I=1,N1 PT1 = L(1) + DIST(1)*FLOAT(I-1)*H1 DO 100 J=1,N2 PT2 = L(2) + DIST(2)*FLOAT(J-1)*H2 A(I,J) = SIN(PT1) + PT2**2 + 3.0 100 CONTINUE NA1 = 10 CALL VDSS2 (X,N1,N2,U,L,A,NA1,F,FPRIME) C CHECK THE SOLUTION SOL = SIN(X(1)) + X(2)**2 + 3.0 DSOL1 = COS(X(1)) DSOL2 = 2.0*X(2) WRITE (IWRITE,101) 101 FORMAT (45H ACTUAL COMPUTED//) WRITE (IWRITE,102) SOL,F 102 FORMAT (17H F(X) = ,2E16.8) WRITE (IWRITE,103) DSOL1,FPRIME(1) 103 FORMAT (17H PARTIAL X = ,2E16.8) WRITE (IWRITE,104) DSOL2,FPRIME(2) 104 FORMAT (17H PARTIAL Y = ,2E16.8) STOP END PyBDSF-1.10.1/src/port3/ex/vdse.f000066400000000000000000000036701420247104600162110ustar00rootroot00000000000000C$TEST VDSE C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE VDSE C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM VDSS3 C C*********************************************************************** C X(1)*X(2) + EXP(X(2)) + X(3)**2 C REAL X(3), A(10,10,10), F, FPRIME(3), PT1, PT2, PT3 REAL H1, H2, H3, SOL REAL DSOL1, DSOL2, DSOL3 INTEGER IWRITE, N1, N2, N3, NA1, NA2 INTEGER I,J,K REAL U(3),L(3),DIST(3) C IWRITE = I1MACH(2) N1 = 10 N2 = 10 N3 = 10 X(1) = 2.3 X(2) = 2.3 X(3) = 2.3 H1 = 1./ FLOAT(N1-1) H2 = 1./ FLOAT(N2-1) H3 = 1./ FLOAT(N3-1) L(1) = 1.0 U(1) = 3.0 L(2) = 2.0 U(2) = 4.0 L(3) = 1.5 U(3) = 3.5 DIST(1) = U(1) - L(1) DIST(2) = U(2) - L(2) DIST(3) = U(3) - L(3) C SET UP THE MESH AND DATA VALUES DO 100 I=1,N1 PT1 = L(1) + DIST(1)*FLOAT(I-1)*H1 DO 100 J=1,N2 PT2 = L(2) + DIST(2)*FLOAT(J-1)*H2 DO 100 K=1,N3 PT3 = L(3) + DIST(3)*FLOAT(K-1)*H3 A(I,J,K) = PT1*PT2 + EXP(PT2) + PT3**2 100 CONTINUE NA1 = 10 NA2 = 10 CALL VDSS3 (X,N1,N2,N3,U,L,A,NA1,NA2,F,FPRIME) C CHECK THE SOLUTION SOL = X(1)*X(2) + EXP(X(2)) + X(3)**2 DSOL1 = X(2) DSOL2 = X(1) + EXP(X(2)) DSOL3 = 2.0*X(3) WRITE (IWRITE,101) 101 FORMAT (45H ACTUAL COMPUTED//) WRITE (IWRITE,102) SOL,F 102 FORMAT (17H F(X) = ,2E16.8) WRITE (IWRITE,103) DSOL1,FPRIME(1) 103 FORMAT (17H PARTIAL X = ,2E16.8) WRITE (IWRITE,104) DSOL2,FPRIME(2) 104 FORMAT (17H PARTIAL Y = ,2E16.8) WRITE (IWRITE,105) DSOL3,FPRIME(3) 105 FORMAT (17H PARTIAL Z = ,2E16.8) STOP END PyBDSF-1.10.1/src/port3/ex/xkhd.f000066400000000000000000000014441420247104600162030ustar00rootroot00000000000000C$TEST XKHD C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE XKHD C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM DXKTH C C*********************************************************************** C COMMON/CSTAK/DSTAK(500) INTEGER IWRITE, N, K DOUBLE PRECISION X(10), XK, DXKTH DOUBLE PRECISION DSTAK C C SET OUTPUT UNIT TO IWRITE . IWRITE = I1MACH(2) C N = 8 X(1) = 3. X(2) = 2. X(3) = 9. X(4) = 7. X(5) = 8. X(6) = 8. X(7) = 5. X(8) = 8. C WRITE (IWRITE,98) 98 FORMAT(1H0,14H K XKTH//) C DO 10 K=1,8 XK = DXKTH(N,K,X) WRITE (IWRITE,99) K, XK 99 FORMAT(1H ,I3,D25.14) 10 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/xkhi.f000066400000000000000000000015251420247104600162100ustar00rootroot00000000000000C$TEST XKHI C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE XKHI C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM IXKTH C C*********************************************************************** C COMMON/CSTAK/DSTAK(500) INTEGER IWRITE, N, K INTEGER X(10), XK INTEGER ISTAK(1000) DOUBLE PRECISION DSTAK C EQUIVALENCE (DSTAK(1),ISTAK(1)) C C SET OUTPUT UNIT TO IWRITE . IWRITE = I1MACH(2) C N = 8 X(1) = 3. X(2) = 2. X(3) = 9. X(4) = 7. X(5) = 8. X(6) = 8. X(7) = 5. X(8) = 8. C WRITE (IWRITE,98) 98 FORMAT(1H0,15H K IXKTH,//) C DO 10 K=1,8 XK = IXKTH(N,K,X) WRITE (IWRITE,99) K, XK 99 FORMAT(1H ,I3,I10) 10 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/xkt.f000066400000000000000000000015321420247104600160510ustar00rootroot00000000000000C$TEST XKTH C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE XKT C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM XKTH C C*********************************************************************** C COMMON/CSTAK/DSTAK(500) INTEGER IWRITE, I1MACH, N, K REAL X(10), XK, XKTH REAL RSTAK(1000) DOUBLE PRECISION DSTAK C EQUIVALENCE (DSTAK(1),RSTAK(1)) C C SET OUTPUT UNIT TO IWRITE . IWRITE = I1MACH(2) C N = 8 X(1) = 3. X(2) = 2. X(3) = 9. X(4) = 7. X(5) = 8. X(6) = 8. X(7) = 5. X(8) = 8. C WRITE (IWRITE,98) 98 FORMAT(1H0,14H K XKTH//) C DO 10 K=1,8 XK = XKTH(N,K,X) WRITE (IWRITE,99) K, XK 99 FORMAT(1H ,I3,F10.1) 10 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/xkth000066400000000000000000000015321420247104600157750ustar00rootroot00000000000000C$TEST XKTH C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE XKT C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM XKTH C C*********************************************************************** C COMMON/CSTAK/DSTAK(500) INTEGER IWRITE, I1MACH, N, K REAL X(10), XK, XKTH REAL RSTAK(1000) DOUBLE PRECISION DSTAK C EQUIVALENCE (DSTAK(1),RSTAK(1)) C C SET OUTPUT UNIT TO IWRITE . IWRITE = I1MACH(2) C N = 8 X(1) = 3. X(2) = 2. X(3) = 9. X(4) = 7. X(5) = 8. X(6) = 8. X(7) = 5. X(8) = 8. C WRITE (IWRITE,98) 98 FORMAT(1H0,14H K XKTH//) C DO 10 K=1,8 XK = XKTH(N,K,X) WRITE (IWRITE,99) K, XK 99 FORMAT(1H ,I3,F10.1) 10 CONTINUE STOP END PyBDSF-1.10.1/src/port3/ex/zap.ed000066400000000000000000000000631420247104600161760ustar00rootroot000000000000001s/ DTTGR/DTG/ 2d 1r zap.head w 4d .-1r zap.ex w q PyBDSF-1.10.1/src/port3/ex/zap.ex000066400000000000000000000000501420247104600162160ustar00rootroot00000000000000C EXAMPLE OF USE OF PORT PROGRAM DTTGR PyBDSF-1.10.1/src/port3/ex/zap.head000066400000000000000000000003021420247104600165030ustar00rootroot00000000000000C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM POSTU C C*********************************************************************** PyBDSF-1.10.1/src/port3/ex/zap.t000066400000000000000000000004051420247104600160510ustar00rootroot00000000000000mv dttgr1.f dtg1.f mv dttgr1p.f dtgp.f mv dttgr2.f dtg2.f mv dttgr3.f dtg3.f mv dttgr4.f dtg4.f mv dttgr5.f dtg5.f mv dttgr6.f dtg6.f mv ttgr1.f ttg1.f mv ttgr1p.f ttgp.f mv ttgr2.f ttg2.f mv ttgr3.f ttg3.f mv ttgr4.f ttg4.f mv ttgr5.f ttg5.f mv ttgr6.f ttg6.f PyBDSF-1.10.1/src/port3/ex/zera.f000066400000000000000000000011451420247104600162040ustar00rootroot00000000000000C$TEST ZERA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE ZERA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM ZERO C C*********************************************************************** EXTERNAL F INTEGER IWRITE,I1MACH REAL A,B,F,T,X,ZERO C IWRITE = I1MACH(2) A = 1.0 B = 3.0 T = 1.0E-7 X=ZERO(F,A,B,T) C WRITE (IWRITE,9999) X 9999 FORMAT (17H THE ROOT IS X = ,1PE15.8) C STOP END C REAL FUNCTION F(X) REAL X F=X*X - 4. RETURN END PyBDSF-1.10.1/src/port3/ex/zip.ed000066400000000000000000000000201420247104600161770ustar00rootroot000000000000004s/DTT/TT/p w q PyBDSF-1.10.1/src/port3/ex/zona.f000066400000000000000000000013111420247104600162050ustar00rootroot00000000000000C$TEST ZONA C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE ZONA C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM ZONE C C*********************************************************************** EXTERNAL ROSEN INTEGER IWRITE, I1MACH REAL X(2), FNORM IWRITE = I1MACH(2) C X(1) = -1.2 X(2) = +1.0 C CALL ZONE( ROSEN, 2, X, 1.E-2, 100, FNORM ) C WRITE ( IWRITE, 9999 ) X(1), X(2), FNORM 9999 FORMAT ( 1P3E15.6 ) STOP END SUBROUTINE ROSEN ( N, X, F ) INTEGER N REAL X(2), F(2) F(1) = 10.0* ( X(2) - X(1)**2 ) F(2) = 1.0 - X(1) RETURN END PyBDSF-1.10.1/src/port3/ex/zonb.f000066400000000000000000000020231420247104600162070ustar00rootroot00000000000000C$TEST ZONB C TO RUN AS A MAIN PROGRAM REMOVE NEXT LINE SUBROUTINE ZONB C*********************************************************************** C C EXAMPLE OF USE OF THE PORT PROGRAM ZONEJ C C*********************************************************************** EXTERNAL ROSEN,MYJAC INTEGER IWRITE,I1MACH REAL X(2), FNORM IWRITE = I1MACH(2) C X(1) = -1.2 X(2) = +1.0 C CALL ZONEJ( ROSEN, MYJAC, 2, X, 1.E-2, 100, FNORM ) C WRITE ( IWRITE, 9999 ) X(1), X(2), FNORM 9999 FORMAT ( 1P3E15.6 ) STOP END SUBROUTINE ROSEN ( N, X, F ) INTEGER N REAL X(2), F(2) F(1) = 10.0 * ( X(2) - X(1)**2 ) F(2) = 1.0 - X(1) RETURN END SUBROUTINE MYJAC(ROSEN, N, X, F, DFDX, JUSED) EXTERNAL ROSEN INTEGER N,JUSED REAL X(2), F(2), DFDX(2,2) C C JACOBIAN OF ROSEN AT X C DFDX(1,1) = -20.0*X(1) DFDX(1,2) = 10.0 DFDX(2,1) = -1.0 DFDX(2,2) = 0.0 JUSED = 1 RETURN END PyBDSF-1.10.1/src/port3/f7dhb.f000066400000000000000000000163471420247104600156330ustar00rootroot00000000000000 SUBROUTINE F7DHB(B, D, G, IRT, IV, LIV, LV, P, V, X) C C *** COMPUTE FINITE-DIFFERENCE HESSIAN, STORE IT IN V STARTING C *** AT V(IV(FDH)) = V(-IV(H)). HONOR SIMPLE BOUNDS IN B. C C *** IF IV(COVREQ) .GE. 0 THEN F7DHB USES GRADIENT DIFFERENCES, C *** OTHERWISE FUNCTION DIFFERENCES. STORAGE IN V IS AS IN G7LIT. C C IRT VALUES... C 1 = COMPUTE FUNCTION VALUE, I.E., V(F). C 2 = COMPUTE G. C 3 = DONE. C C C *** PARAMETER DECLARATIONS *** C INTEGER IRT, LIV, LV, P INTEGER IV(LIV) REAL B(2,P), D(P), G(P), V(LV), X(P) C C *** LOCAL VARIABLES *** C LOGICAL OFFSID INTEGER GSAVE1, HES, HMI, HPI, HPM, I, K, KIND, L, M, MM1, MM1O2, 1 NEWM1, PP1O2, STPI, STPM, STP0 REAL DEL, DEL0, T, XM, XM1 REAL HALF, HLIM, ONE, TWO, ZERO C C *** EXTERNAL SUBROUTINES *** C EXTERNAL V7CPY, V7SCP C C V7CPY.... COPY ONE VECTOR TO ANOTHER. C V7SCP... COPY SCALAR TO ALL COMPONENTS OF A VECTOR. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER COVREQ, DELTA, DELTA0, DLTFDC, F, FDH, FX, H, KAGQT, MODE, 1 NFGCAL, SAVEI, SWITCH, TOOBIG, W, XMSAVE C C/6 C DATA HALF/0.5E+0/, HLIM/0.1E+0/, ONE/1.E+0/, TWO/2.E+0/, C 1 ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, HLIM=0.1E+0, ONE=1.E+0, TWO=2.E+0, 1 ZERO=0.E+0) C/ C C/6 C DATA COVREQ/15/, DELTA/52/, DELTA0/44/, DLTFDC/42/, F/10/, C 1 FDH/74/, FX/53/, H/56/, KAGQT/33/, MODE/35/, NFGCAL/7/, C 2 SAVEI/63/, SWITCH/12/, TOOBIG/2/, W/65/, XMSAVE/51/ C/7 PARAMETER (COVREQ=15, DELTA=52, DELTA0=44, DLTFDC=42, F=10, 1 FDH=74, FX=53, H=56, KAGQT=33, MODE=35, NFGCAL=7, 2 SAVEI=63, SWITCH=12, TOOBIG=2, W=65, XMSAVE=51) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IRT = 4 KIND = IV(COVREQ) M = IV(MODE) IF (M .GT. 0) GO TO 10 HES = IABS(IV(H)) IV(H) = -HES IV(FDH) = 0 IV(KAGQT) = -1 V(FX) = V(F) C *** SUPPLY ZEROS IN CASE B(1,I) = B(2,I) FOR SOME I *** CALL V7SCP(P*(P+1)/2, V(HES), ZERO) 10 IF (M .GT. P) GO TO 999 IF (KIND .LT. 0) GO TO 120 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN USING BOTH FUNCTION AND C *** GRADIENT VALUES. C GSAVE1 = IV(W) + P IF (M .GT. 0) GO TO 20 C *** FIRST CALL ON F7DHB. SET GSAVE = G, TAKE FIRST STEP *** CALL V7CPY(P, V(GSAVE1), G) IV(SWITCH) = IV(NFGCAL) GO TO 80 C 20 DEL = V(DELTA) X(M) = V(XMSAVE) IF (IV(TOOBIG) .EQ. 0) GO TO 30 C C *** HANDLE OVERSIZE V(DELTA) *** C DEL0 = V(DELTA0) * AMAX1(ONE/D(M), ABS(X(M))) DEL = HALF * DEL IF ( ABS(DEL/DEL0) .LE. HLIM) GO TO 140 C 30 HES = -IV(H) C C *** SET G = (G - GSAVE)/DEL *** C DEL = ONE / DEL DO 40 I = 1, P G(I) = DEL * (G(I) - V(GSAVE1)) GSAVE1 = GSAVE1 + 1 40 CONTINUE C C *** ADD G AS NEW COL. TO FINITE-DIFF. HESSIAN MATRIX *** C K = HES + M*(M-1)/2 L = K + M - 2 IF (M .EQ. 1) GO TO 60 C C *** SET H(I,M) = 0.5 * (H(I,M) + G(I)) FOR I = 1 TO M-1 *** C MM1 = M - 1 DO 50 I = 1, MM1 IF (B(1,I) .LT. B(2,I)) V(K) = HALF * (V(K) + G(I)) K = K + 1 50 CONTINUE C C *** ADD H(I,M) = G(I) FOR I = M TO P *** C 60 L = L + 1 DO 70 I = M, P IF (B(1,I) .LT. B(2,I)) V(L) = G(I) L = L + I 70 CONTINUE C 80 M = M + 1 IV(MODE) = M IF (M .GT. P) GO TO 340 IF (B(1,M) .GE. B(2,M)) GO TO 80 C C *** CHOOSE NEXT FINITE-DIFFERENCE STEP, RETURN TO GET G THERE *** C DEL = V(DELTA0) * AMAX1(ONE/D(M), ABS(X(M))) XM = X(M) IF (XM .LT. ZERO) GO TO 90 XM1 = XM + DEL IF (XM1 .LE. B(2,M)) GO TO 110 XM1 = XM - DEL IF (XM1 .GE. B(1,M)) GO TO 100 GO TO 280 90 XM1 = XM - DEL IF (XM1 .GE. B(1,M)) GO TO 100 XM1 = XM + DEL IF (XM1 .LE. B(2,M)) GO TO 110 GO TO 280 C 100 DEL = -DEL 110 V(XMSAVE) = XM X(M) = XM1 V(DELTA) = DEL IRT = 2 GO TO 999 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN USING FUNCTION VALUES ONLY. C 120 STP0 = IV(W) + P - 1 MM1 = M - 1 MM1O2 = M*MM1/2 HES = -IV(H) IF (M .GT. 0) GO TO 130 C *** FIRST CALL ON F7DHB. *** IV(SAVEI) = 0 GO TO 240 C 130 IF (IV(TOOBIG) .EQ. 0) GO TO 150 C *** PUNT IN THE EVENT OF AN OVERSIZE STEP *** 140 IV(FDH) = -2 GO TO 350 150 I = IV(SAVEI) IF (I .GT. 0) GO TO 190 C C *** SAVE F(X + STP(M)*E(M)) IN H(P,M) *** C PP1O2 = P * (P-1) / 2 HPM = HES + PP1O2 + MM1 V(HPM) = V(F) C C *** START COMPUTING ROW M OF THE FINITE-DIFFERENCE HESSIAN H. *** C NEWM1 = 1 GO TO 260 160 HMI = HES + MM1O2 IF (MM1 .EQ. 0) GO TO 180 HPI = HES + PP1O2 DO 170 I = 1, MM1 T = ZERO IF (B(1,I) .LT. B(2,I)) T = V(FX) - (V(F) + V(HPI)) V(HMI) = T HMI = HMI + 1 HPI = HPI + 1 170 CONTINUE 180 V(HMI) = V(F) - TWO*V(FX) IF (OFFSID) V(HMI) = V(FX) - TWO*V(F) C C *** COMPUTE FUNCTION VALUES NEEDED TO COMPLETE ROW M OF H. *** C I = 0 GO TO 200 C 190 X(I) = V(DELTA) C C *** FINISH COMPUTING H(M,I) *** C STPI = STP0 + I HMI = HES + MM1O2 + I - 1 STPM = STP0 + M V(HMI) = (V(HMI) + V(F)) / (V(STPI)*V(STPM)) 200 I = I + 1 IF (I .GT. M) GO TO 230 IF (B(1,I) .LT. B(2,I)) GO TO 210 GO TO 200 C 210 IV(SAVEI) = I STPI = STP0 + I V(DELTA) = X(I) X(I) = X(I) + V(STPI) IRT = 1 IF (I .LT. M) GO TO 999 NEWM1 = 2 GO TO 260 220 X(M) = V(XMSAVE) - DEL IF (OFFSID) X(M) = V(XMSAVE) + TWO*DEL GO TO 999 C 230 IV(SAVEI) = 0 X(M) = V(XMSAVE) C 240 M = M + 1 IV(MODE) = M IF (M .GT. P) GO TO 330 IF (B(1,M) .LT. B(2,M)) GO TO 250 GO TO 240 C C *** PREPARE TO COMPUTE ROW M OF THE FINITE-DIFFERENCE HESSIAN H. C *** COMPUTE M-TH STEP SIZE STP(M), THEN RETURN TO OBTAIN C *** F(X + STP(M)*E(M)), WHERE E(M) = M-TH STD. UNIT VECTOR. C 250 V(XMSAVE) = X(M) NEWM1 = 3 260 XM = V(XMSAVE) DEL = V(DLTFDC) * AMAX1(ONE/D(M), ABS(XM)) XM1 = XM + DEL OFFSID = .FALSE. IF (XM1 .LE. B(2,M)) GO TO 270 OFFSID = .TRUE. XM1 = XM - DEL IF (XM - TWO*DEL .GE. B(1,M)) GO TO 300 GO TO 280 270 IF (XM-DEL .GE. B(1,M)) GO TO 290 OFFSID = .TRUE. IF (XM + TWO*DEL .LE. B(2,M)) GO TO 310 C 280 IV(FDH) = -2 GO TO 350 C 290 IF (XM .GE. ZERO) GO TO 310 XM1 = XM - DEL 300 DEL = -DEL 310 GO TO (160, 220, 320), NEWM1 320 X(M) = XM1 STPM = STP0 + M V(STPM) = DEL IRT = 1 GO TO 999 C C *** HANDLE SPECIAL CASE OF B(1,P) = B(2,P) -- CLEAR SCRATCH VALUES C *** FROM LAST ROW OF FDH... C 330 IF (B(1,P) .LT. B(2,P)) GO TO 340 I = HES + P*(P-1)/2 CALL V7SCP(P, V(I), ZERO) C C *** RESTORE V(F), ETC. *** C 340 IV(FDH) = HES 350 V(F) = V(FX) IRT = 3 IF (KIND .LT. 0) GO TO 999 IV(NFGCAL) = IV(SWITCH) GSAVE1 = IV(W) + P CALL V7CPY(P, G, V(GSAVE1)) GO TO 999 C 999 RETURN C *** LAST LINE OF F7DHB FOLLOWS *** END PyBDSF-1.10.1/src/port3/f7hes.f000066400000000000000000000141551420247104600156500ustar00rootroot00000000000000 SUBROUTINE F7HES(D, G, IRT, IV, LIV, LV, P, V, X) C C *** COMPUTE FINITE-DIFFERENCE HESSIAN, STORE IT IN V STARTING C *** AT V(IV(FDH)) = V(-IV(H)). C C *** IF IV(COVREQ) .GE. 0 THEN F7HES USES GRADIENT DIFFERENCES, C *** OTHERWISE FUNCTION DIFFERENCES. STORAGE IN V IS AS IN G7LIT. C C IRT VALUES... C 1 = COMPUTE FUNCTION VALUE, I.E., V(F). C 2 = COMPUTE G. C 3 = DONE. C C C *** PARAMETER DECLARATIONS *** C INTEGER IRT, LIV, LV, P INTEGER IV(LIV) REAL D(P), G(P), V(LV), X(P) C C *** LOCAL VARIABLES *** C INTEGER GSAVE1, HES, HMI, HPI, HPM, I, K, KIND, L, M, MM1, MM1O2, 1 PP1O2, STPI, STPM, STP0 REAL DEL, HALF, NEGPT5, ONE, TWO, ZERO C C *** EXTERNAL SUBROUTINES *** C EXTERNAL V7CPY C C V7CPY.... COPY ONE VECTOR TO ANOTHER. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER COVREQ, DELTA, DELTA0, DLTFDC, F, FDH, FX, H, KAGQT, MODE, 1 NFGCAL, SAVEI, SWITCH, TOOBIG, W, XMSAVE C C/6 C DATA HALF/0.5E+0/, NEGPT5/-0.5E+0/, ONE/1.E+0/, TWO/2.E+0/, C 1 ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, NEGPT5=-0.5E+0, ONE=1.E+0, TWO=2.E+0, 1 ZERO=0.E+0) C/ C C/6 C DATA COVREQ/15/, DELTA/52/, DELTA0/44/, DLTFDC/42/, F/10/, C 1 FDH/74/, FX/53/, H/56/, KAGQT/33/, MODE/35/, NFGCAL/7/, C 2 SAVEI/63/, SWITCH/12/, TOOBIG/2/, W/65/, XMSAVE/51/ C/7 PARAMETER (COVREQ=15, DELTA=52, DELTA0=44, DLTFDC=42, F=10, 1 FDH=74, FX=53, H=56, KAGQT=33, MODE=35, NFGCAL=7, 2 SAVEI=63, SWITCH=12, TOOBIG=2, W=65, XMSAVE=51) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IRT = 4 KIND = IV(COVREQ) M = IV(MODE) IF (M .GT. 0) GO TO 10 IV(H) = -IABS(IV(H)) IV(FDH) = 0 IV(KAGQT) = -1 V(FX) = V(F) 10 IF (M .GT. P) GO TO 999 IF (KIND .LT. 0) GO TO 110 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN USING BOTH FUNCTION AND C *** GRADIENT VALUES. C GSAVE1 = IV(W) + P IF (M .GT. 0) GO TO 20 C *** FIRST CALL ON F7HES. SET GSAVE = G, TAKE FIRST STEP *** CALL V7CPY(P, V(GSAVE1), G) IV(SWITCH) = IV(NFGCAL) GO TO 90 C 20 DEL = V(DELTA) X(M) = V(XMSAVE) IF (IV(TOOBIG) .EQ. 0) GO TO 40 C C *** HANDLE OVERSIZE V(DELTA) *** C IF (DEL*X(M) .GT. ZERO) GO TO 30 C *** WE ALREADY TRIED SHRINKING V(DELTA), SO QUIT *** IV(FDH) = -2 GO TO 220 C C *** TRY SHRINKING V(DELTA) *** 30 DEL = NEGPT5 * DEL GO TO 100 C 40 HES = -IV(H) C C *** SET G = (G - GSAVE)/DEL *** C DO 50 I = 1, P G(I) = (G(I) - V(GSAVE1)) / DEL GSAVE1 = GSAVE1 + 1 50 CONTINUE C C *** ADD G AS NEW COL. TO FINITE-DIFF. HESSIAN MATRIX *** C K = HES + M*(M-1)/2 L = K + M - 2 IF (M .EQ. 1) GO TO 70 C C *** SET H(I,M) = 0.5 * (H(I,M) + G(I)) FOR I = 1 TO M-1 *** C MM1 = M - 1 DO 60 I = 1, MM1 V(K) = HALF * (V(K) + G(I)) K = K + 1 60 CONTINUE C C *** ADD H(I,M) = G(I) FOR I = M TO P *** C 70 L = L + 1 DO 80 I = M, P V(L) = G(I) L = L + I 80 CONTINUE C 90 M = M + 1 IV(MODE) = M IF (M .GT. P) GO TO 210 C C *** CHOOSE NEXT FINITE-DIFFERENCE STEP, RETURN TO GET G THERE *** C DEL = V(DELTA0) * AMAX1(ONE/D(M), ABS(X(M))) IF (X(M) .LT. ZERO) DEL = -DEL V(XMSAVE) = X(M) 100 X(M) = X(M) + DEL V(DELTA) = DEL IRT = 2 GO TO 999 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN USING FUNCTION VALUES ONLY. C 110 STP0 = IV(W) + P - 1 MM1 = M - 1 MM1O2 = M*MM1/2 IF (M .GT. 0) GO TO 120 C *** FIRST CALL ON F7HES. *** IV(SAVEI) = 0 GO TO 200 C 120 I = IV(SAVEI) HES = -IV(H) IF (I .GT. 0) GO TO 180 IF (IV(TOOBIG) .EQ. 0) GO TO 140 C C *** HANDLE OVERSIZE STEP *** C STPM = STP0 + M DEL = V(STPM) IF (DEL*X(XMSAVE) .GT. ZERO) GO TO 130 C *** WE ALREADY TRIED SHRINKING THE STEP, SO QUIT *** IV(FDH) = -2 GO TO 220 C C *** TRY SHRINKING THE STEP *** 130 DEL = NEGPT5 * DEL X(M) = X(XMSAVE) + DEL V(STPM) = DEL IRT = 1 GO TO 999 C C *** SAVE F(X + STP(M)*E(M)) IN H(P,M) *** C 140 PP1O2 = P * (P-1) / 2 HPM = HES + PP1O2 + MM1 V(HPM) = V(F) C C *** START COMPUTING ROW M OF THE FINITE-DIFFERENCE HESSIAN H. *** C HMI = HES + MM1O2 IF (MM1 .EQ. 0) GO TO 160 HPI = HES + PP1O2 DO 150 I = 1, MM1 V(HMI) = V(FX) - (V(F) + V(HPI)) HMI = HMI + 1 HPI = HPI + 1 150 CONTINUE 160 V(HMI) = V(F) - TWO*V(FX) C C *** COMPUTE FUNCTION VALUES NEEDED TO COMPLETE ROW M OF H. *** C I = 1 C 170 IV(SAVEI) = I STPI = STP0 + I V(DELTA) = X(I) X(I) = X(I) + V(STPI) IF (I .EQ. M) X(I) = V(XMSAVE) - V(STPI) IRT = 1 GO TO 999 C 180 X(I) = V(DELTA) IF (IV(TOOBIG) .EQ. 0) GO TO 190 C *** PUNT IN THE EVENT OF AN OVERSIZE STEP *** IV(FDH) = -2 GO TO 220 C C *** FINISH COMPUTING H(M,I) *** C 190 STPI = STP0 + I HMI = HES + MM1O2 + I - 1 STPM = STP0 + M V(HMI) = (V(HMI) + V(F)) / (V(STPI)*V(STPM)) I = I + 1 IF (I .LE. M) GO TO 170 IV(SAVEI) = 0 X(M) = V(XMSAVE) C 200 M = M + 1 IV(MODE) = M IF (M .GT. P) GO TO 210 C C *** PREPARE TO COMPUTE ROW M OF THE FINITE-DIFFERENCE HESSIAN H. C *** COMPUTE M-TH STEP SIZE STP(M), THEN RETURN TO OBTAIN C *** F(X + STP(M)*E(M)), WHERE E(M) = M-TH STD. UNIT VECTOR. C DEL = V(DLTFDC) * AMAX1(ONE/D(M), ABS(X(M))) IF (X(M) .LT. ZERO) DEL = -DEL V(XMSAVE) = X(M) X(M) = X(M) + DEL STPM = STP0 + M V(STPM) = DEL IRT = 1 GO TO 999 C C *** RESTORE V(F), ETC. *** C 210 IV(FDH) = HES 220 V(F) = V(FX) IRT = 3 IF (KIND .LT. 0) GO TO 999 IV(NFGCAL) = IV(SWITCH) GSAVE1 = IV(W) + P CALL V7CPY(P, G, V(GSAVE1)) GO TO 999 C 999 RETURN C *** LAST CARD OF F7HES FOLLOWS *** END PyBDSF-1.10.1/src/port3/fdump.f000066400000000000000000000001641420247104600157420ustar00rootroot00000000000000 SUBROUTINE FDUMP C THIS IS A DUMMY ROUTINE TO BE SENT OUT ON C THE PORT SEDIT TAPE C RETURN END PyBDSF-1.10.1/src/port3/frmatd.f000066400000000000000000000020471420247104600161060ustar00rootroot00000000000000 SUBROUTINE FRMATD(WWIDTH, EWIDTH) C C THIS SUBROUTINE COMPUTES, FOR THE FORMAT SPECIFICATION, DW.E, THE C NUMBER OF DIGITS TO THE RIGHT OF THE DECIMAL POINT, E=EWIDTH, AND C THE FIELD WIDTH, W=WWIDTH. C C WWIDTH INCLUDES THE FIVE POSITIONS NEEDED FOR THE SIGN OF THE C MANTISSA, THE SIGN OF THE EXPONENT, THE 0, THE DECIMAL POINT AND THE C CHARACTER IN THE OUTPUT - +0.XXXXXXXXXD+YYYY C C THE FOLLOWING MACHINE-DEPENDENT VALUES ARE USED - C C I1MACH(10) - THE BASE, B C I1MACH(14) - THE NUMBER OF BASE-B DIGITS IN THE MANTISSA C I1MACH(15) - THE SMALLEST EXPONENT, EMIN C I1MACH(16) - THE LARGEST EXPONENT, EMAX C INTEGER I1MACH, ICEIL, IFLR, EWIDTH, WWIDTH INTEGER DEMIN, DEMAX, EXPWID REAL BASE C BASE = I1MACH(10) C EWIDTH = ICEIL( ALOG10(BASE)*FLOAT(I1MACH(14)) ) C DEMIN = IFLR( ALOG10(BASE)*FLOAT(I1MACH(15)-1) ) + 1 DEMAX = ICEIL( ALOG10(BASE)*FLOAT(I1MACH(16)) ) EXPWID = IFLR( ALOG10(FLOAT(MAX0(IABS(DEMIN),IABS(DEMAX)))) ) + 1 WWIDTH = EWIDTH + EXPWID + 5 C RETURN END PyBDSF-1.10.1/src/port3/frmati.f000066400000000000000000000010341420247104600161060ustar00rootroot00000000000000 SUBROUTINE FRMATI(IWIDTH) C C THIS SUBROUTINE COMPUTES THE WIDTH, W=IWIDTH, IN THE FORMAT C SPECIFICATION FOR INTEGER VARIABLES. C C FRMATI SETS IWIDTH TO THE NUMBER OF CHARACTER POSITIONS NEEDED C FOR WRITING OUT THE LARGEST INTEGER PLUS ONE POSITION FOR THE SIGN. C C I1MACH(7) IS THE BASE, A, FOR INTEGER REPRESENTATION IN THE MACHINE. C I1MACH(8) IS THE (MAXIMUM) NUMBER OF BASE A DIGITS. C INTEGER I1MACH, ICEIL, IWIDTH C IWIDTH = ICEIL( ALOG10(FLOAT(I1MACH(7)))*FLOAT(I1MACH(8)) ) + 1 C RETURN END PyBDSF-1.10.1/src/port3/frmatr.f000066400000000000000000000020471420247104600161240ustar00rootroot00000000000000 SUBROUTINE FRMATR(WWIDTH, EWIDTH) C C THIS SUBROUTINE COMPUTES, FOR THE FORMAT SPECIFICATION, EW.E, THE C NUMBER OF DIGITS TO THE RIGHT OF THE DECIMAL POINT, E=EWIDTH, AND C THE FIELD WIDTH, W=WWIDTH. C C WWIDTH INCLUDES THE FIVE POSITIONS NEEDED FOR THE SIGN OF THE C MANTISSA, THE SIGN OF THE EXPONENT, THE 0, THE DECIMAL POINT AND THE C CHARACTER IN THE OUTPUT - +0.XXXXXXXXXE+YYYY C C THE FOLLOWING MACHINE-DEPENDENT VALUES ARE USED - C C I1MACH(10) - THE BASE, B C I1MACH(11) - THE NUMBER OF BASE-B DIGITS IN THE MANTISSA C I1MACH(12) - THE SMALLEST EXPONENT, EMIN C I1MACH(13) - THE LARGEST EXPONENT, EMAX C INTEGER I1MACH, ICEIL, IFLR, EWIDTH, WWIDTH INTEGER DEMIN, DEMAX, EXPWID REAL BASE C BASE = I1MACH(10) C EWIDTH = ICEIL( ALOG10(BASE)*FLOAT(I1MACH(11)) ) C DEMIN = IFLR( ALOG10(BASE)*FLOAT(I1MACH(12)-1) ) + 1 DEMAX = ICEIL( ALOG10(BASE)*FLOAT(I1MACH(13)) ) EXPWID = IFLR( ALOG10(FLOAT(MAX0(IABS(DEMIN),IABS(DEMAX)))) ) + 1 WWIDTH = EWIDTH + EXPWID + 5 C RETURN END PyBDSF-1.10.1/src/port3/g7itb.f000066400000000000000000000700171420247104600156470ustar00rootroot00000000000000 SUBROUTINE G7ITB(B, D, G, IV, LIV, LV, P, PS, V, X, Y) C C *** CARRY OUT NL2SOL-LIKE ITERATIONS FOR GENERALIZED LINEAR *** C *** REGRESSION PROBLEMS (AND OTHERS OF SIMILAR STRUCTURE) *** C *** HAVING SIMPLE BOUNDS ON THE PARAMETERS BEING ESTIMATED. *** C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, P, PS INTEGER IV(LIV) REAL B(2,P), D(P), G(P), V(LV), X(P), Y(P) C C-------------------------- PARAMETER USAGE -------------------------- C C B.... VECTOR OF LOWER AND UPPER BOUNDS ON X. C D.... SCALE VECTOR. C IV... INTEGER VALUE ARRAY. C LIV.. LENGTH OF IV. MUST BE AT LEAST 80. C LH... LENGTH OF H = P*(P+1)/2. C LV... LENGTH OF V. MUST BE AT LEAST P*(3*P + 19)/2 + 7. C G.... GRADIENT AT X (WHEN IV(1) = 2). C HC... GAUSS-NEWTON HESSIAN AT X (WHEN IV(1) = 2). C P.... NUMBER OF PARAMETERS (COMPONENTS IN X). C PS... NUMBER OF NONZERO ROWS AND COLUMNS IN S. C V.... FLOATING-POINT VALUE ARRAY. C X.... PARAMETER VECTOR. C Y.... PART OF YIELD VECTOR (WHEN IV(1)= 2, SCRATCH OTHERWISE). C C *** DISCUSSION *** C C G7ITB IS SIMILAR TO G7LIT, EXCEPT FOR THE EXTRA PARAMETER B C -- G7ITB ENFORCES THE BOUNDS B(1,I) .LE. X(I) .LE. B(2,I), C I = 1(1)P. C G7ITB PERFORMS NL2SOL-LIKE ITERATIONS FOR A VARIETY OF C REGRESSION PROBLEMS THAT ARE SIMILAR TO NONLINEAR LEAST-SQUARES C IN THAT THE HESSIAN IS THE SUM OF TWO TERMS, A READILY-COMPUTED C FIRST-ORDER TERM AND A SECOND-ORDER TERM. THE CALLER SUPPLIES C THE FIRST-ORDER TERM OF THE HESSIAN IN HC (LOWER TRIANGLE, STORED C COMPACTLY BY ROWS), AND G7ITB BUILDS AN APPROXIMATION, S, TO THE C SECOND-ORDER TERM. THE CALLER ALSO PROVIDES THE FUNCTION VALUE, C GRADIENT, AND PART OF THE YIELD VECTOR USED IN UPDATING S. C G7ITB DECIDES DYNAMICALLY WHETHER OR NOT TO _USE_ S WHEN CHOOSING C THE NEXT STEP TO TRY... THE HESSIAN APPROXIMATION USED IS EITHER C HC ALONE (GAUSS-NEWTON MODEL) OR HC + S (AUGMENTED MODEL). C IF PS .LT. P, THEN ROWS AND COLUMNS PS+1...P OF S ARE KEPT C CONSTANT. THEY WILL BE ZERO UNLESS THE CALLER SETS IV(INITS) TO C 1 OR 2 AND SUPPLIES NONZERO VALUES FOR THEM, OR THE CALLER SETS C IV(INITS) TO 3 OR 4 AND THE FINITE-DIFFERENCE INITIAL S THEN C COMPUTED HAS NONZERO VALUES IN THESE ROWS. C C IF IV(INITS) IS 3 OR 4, THEN THE INITIAL S IS COMPUTED BY C FINITE DIFFERENCES. 3 MEANS _USE_ FUNCTION DIFFERENCES, 4 MEANS C _USE_ GRADIENT DIFFERENCES. FINITE DIFFERENCING IS DONE THE SAME C WAY AS IN COMPUTING A COVARIANCE MATRIX (WITH IV(COVREQ) = -1, -2, C 1, OR 2). C C FOR UPDATING S, G7ITB ASSUMES THAT THE GRADIENT HAS THE FORM C OF A SUM OVER I OF RHO(I,X)*GRAD(R(I,X)), WHERE GRAD DENOTES THE C GRADIENT WITH RESPECT TO X. THE TRUE SECOND-ORDER TERM THEN IS C THE SUM OVER I OF RHO(I,X)*HESSIAN(R(I,X)). IF X = X0 + STEP, C THEN WE WISH TO UPDATE S SO THAT S*STEP IS THE SUM OVER I OF C RHO(I,X)*(GRAD(R(I,X)) - GRAD(R(I,X0))). THE CALLER MUST SUPPLY C PART OF THIS IN Y, NAMELY THE SUM OVER I OF C RHO(I,X)*GRAD(R(I,X0)), WHEN CALLING G7ITB WITH IV(1) = 2 AND C IV(MODE) = 0 (WHERE MODE = 38). G THEN CONTANS THE OTHER PART, C SO THAT THE DESIRED YIELD VECTOR IS G - Y. IF PS .LT. P, THEN C THE ABOVE DISCUSSION APPLIES ONLY TO THE FIRST PS COMPONENTS OF C GRAD(R(I,X)), STEP, AND Y. C C PARAMETERS IV, P, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO N2GB (AND NL2SOL), EXCEPT THAT V CAN BE SHORTER C (SINCE THE PART OF V THAT N2GB USES FOR STORING D, J, AND R IS C NOT NEEDED). MOREOVER, COMPARED WITH N2GB (AND NL2SOL), IV(1) C MAY HAVE THE TWO ADDITIONAL OUTPUT VALUES 1 AND 2, WHICH ARE C EXPLAINED BELOW, AS IS THE _USE_ OF IV(TOOBIG) AND IV(NFGCAL). C THE VALUES IV(D), IV(J), AND IV(R), WHICH ARE OUTPUT VALUES FROM C N2GB (AND N2FB), ARE NOT REFERENCED BY G7ITB OR THE C SUBROUTINES IT CALLS. C C WHEN G7ITB IS FIRST CALLED, I.E., WHEN G7ITB IS CALLED WITH C IV(1) = 0 OR 12, V(F), G, AND HC NEED NOT BE INITIALIZED. TO C OBTAIN THESE STARTING VALUES, G7ITB RETURNS FIRST WITH IV(1) = 1, C THEN WITH IV(1) = 2, WITH IV(MODE) = -1 IN BOTH CASES. ON C SUBSEQUENT RETURNS WITH IV(1) = 2, IV(MODE) = 0 IMPLIES THAT C Y MUST ALSO BE SUPPLIED. (NOTE THAT Y IS USED FOR SCRATCH -- ITS C INPUT CONTENTS ARE LOST. BY CONTRAST, HC IS NEVER CHANGED.) C ONCE CONVERGENCE HAS BEEN OBTAINED, IV(RDREQ) AND IV(COVREQ) MAY C IMPLY THAT A FINITE-DIFFERENCE HESSIAN SHOULD BE COMPUTED FOR USE C IN COMPUTING A COVARIANCE MATRIX. IN THIS CASE G7ITB WILL MAKE C A NUMBER OF RETURNS WITH IV(1) = 1 OR 2 AND IV(MODE) POSITIVE. C WHEN IV(MODE) IS POSITIVE, Y SHOULD NOT BE CHANGED. C C IV(1) = 1 MEANS THE CALLER SHOULD SET V(F) (I.E., V(10)) TO F(X), THE C FUNCTION VALUE AT X, AND CALL G7ITB AGAIN, HAVING CHANGED C NONE OF THE OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) C CANNOT BE EVALUATED (E.G. IF OVERFLOW WOULD OCCUR), WHICH C MAY HAPPEN BECAUSE OF AN OVERSIZED STEP. IN THIS CASE C THE CALLER SHOULD SET IV(TOOBIG) = IV(2) TO 1, WHICH WILL C CAUSE G7ITB TO IGNORE V(F) AND TRY A SMALLER STEP. NOTE C THAT THE CURRENT FUNCTION EVALUATION COUNT IS AVAILABLE C IN IV(NFCALL) = IV(6). THIS MAY BE USED TO IDENTIFY C WHICH COPY OF SAVED INFORMATION SHOULD BE USED IN COM- C PUTING G, HC, AND Y THE NEXT TIME G7ITB RETURNS WITH C IV(1) = 2. SEE MLPIT FOR AN EXAMPLE OF THIS. C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT OF F AT C X. THE CALLER SHOULD ALSO SET HC TO THE GAUSS-NEWTON C HESSIAN AT X. IF IV(MODE) = 0, THEN THE CALLER SHOULD C ALSO COMPUTE THE PART OF THE YIELD VECTOR DESCRIBED ABOVE. C THE CALLER SHOULD THEN CALL G7ITB AGAIN (WITH IV(1) = 2). C THE CALLER MAY ALSO CHANGE D AT THIS TIME, BUT SHOULD NOT C CHANGE X. NOTE THAT IV(NFGCAL) = IV(7) CONTAINS THE C VALUE THAT IV(NFCALL) HAD DURING THE RETURN WITH C IV(1) = 1 IN WHICH X HAD THE SAME VALUE AS IT NOW HAS. C IV(NFGCAL) IS EITHER IV(NFCALL) OR IV(NFCALL) - 1. MLPIT C IS AN EXAMPLE WHERE THIS INFORMATION IS USED. IF G OR HC C CANNOT BE EVALUATED AT X, THEN THE CALLER MAY SET C IV(NFGCAL) TO 0, IN WHICH CASE G7ITB WILL RETURN WITH C IV(1) = 15. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C (SEE NL2SOL FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C LOGICAL HAVQTR, HAVRM INTEGER DUMMY, DIG1, G01, H1, HC1, I, I1, IPI, IPIV0, IPIV1, 1 IPIV2, IPN, J, K, L, LMAT1, LSTGST, P1, P1LEN, PP1, PP1O2, 2 QTR1, RMAT1, RSTRST, STEP1, STPMOD, S1, TD1, TEMP1, TEMP2, 3 TG1, W1, WLM1, X01 REAL E, GI, STTSST, T, T1, XI C C *** CONSTANTS *** C REAL HALF, NEGONE, ONE, ONEP2, ZERO C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX REAL D7TPR, RLDST, V2NRM EXTERNAL A7SST, D7TPR, F7DHB, G7QSB,I7COPY, I7PNVR, I7SHFT, 1 ITSUM, L7MSB, L7SQR, L7TVM, L7VML, PARCK, Q7RSH, 2 RLDST, S7DMP, S7IPR, S7LUP, S7LVM, STOPX, V2NRM, 3 V2AXY, V7CPY, V7IPR, V7SCP, V7VMP C C A7SST.... ASSESSES CANDIDATE STEP. C D7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C F7DHB... COMPUTE FINITE-DIFFERENCE HESSIAN (FOR INIT. S MATRIX). C G7QSB... COMPUTES GOLDFELD-QUANDT-TROTTER STEP (AUGMENTED MODEL). C I7COPY.... COPIES ONE INTEGER VECTOR TO ANOTHER. C I7PNVR... INVERTS PERMUTATION ARRAY. C I7SHFT... SHIFTS AN INTEGER VECTOR. C ITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C L7MSB... COMPUTES LEVENBERG-MARQUARDT STEP (GAUSS-NEWTON MODEL). C L7SQR... COMPUTES L * L**T FROM LOWER TRIANGULAR MATRIX L. C L7TVM... COMPUTES L**T * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C L7VML.... COMPUTES L * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C PARCK.... CHECK VALIDITY OF IV AND V INPUT COMPONENTS. C Q7RSH... SHIFTS A QR FACTORIZATION. C RLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C S7DMP... MULTIPLIES A SYM. MATRIX FORE AND AFT BY A DIAG. MATRIX. C S7IPR... APPLIES PERMUTATION TO (LOWER TRIANG. OF) SYM. MATRIX. C S7LUP... PERFORMS QUASI-NEWTON UPDATE ON COMPACTLY STORED LOWER TRI- C ANGLE OF A SYMMETRIC MATRIX. C S7LVM... MULTIPLIES COMPACTLY STORED SYM. MATRIX TIMES VECTOR. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C V2NRM... RETURNS THE 2-NORM OF A VECTOR. C V2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7IPR... APPLIES A PERMUTATION TO A VECTOR. C V7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C V7VMP... MULTIPLIES (DIVIDES) VECTORS COMPONENTWISE. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, COSMIN, COVMAT, COVREQ, DGNORM, DIG, 1 DSTNRM, F, FDH, FDIF, FUZZ, F0, GTSTEP, H, HC, IERR, 2 INCFAC, INITS, IPIVOT, IRC, IVNEED, KAGQT, KALM, LMAT, 3 LMAX0, LMAXS, MODE, MODEL, MXFCAL, MXITER, NEXTIV, NEXTV, 4 NFCALL, NFGCAL, NFCOV, NGCOV, NGCALL, NITER, NVSAVE, P0, 5 PC, PERM, PHMXFC, PREDUC, QTR, RADFAC, RADINC, RADIUS, 6 RAD0, RDREQ, REGD, RELDX, RESTOR, RMAT, S, SIZE, STEP, 7 STGLIM, STPPAR, SUSED, SWITCH, TOOBIG, TUNER4, TUNER5, 8 VNEED, VSAVE, W, WSCALE, XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C *** (NOTE THAT P0 AND PC ARE STORED IN IV(G0) AND IV(STLSTG) RESP.) C C/6 C DATA CNVCOD/55/, COVMAT/26/, COVREQ/15/, DIG/37/, FDH/74/, H/56/, C 1 HC/71/, IERR/75/, INITS/25/, IPIVOT/76/, IRC/29/, IVNEED/3/, C 2 KAGQT/33/, KALM/34/, LMAT/42/, MODE/35/, MODEL/5/, C 3 MXFCAL/17/, MXITER/18/, NEXTIV/46/, NEXTV/47/, NFCALL/6/, C 4 NFGCAL/7/, NFCOV/52/, NGCOV/53/, NGCALL/30/, NITER/31/, C 5 P0/48/, PC/41/, PERM/58/, QTR/77/, RADINC/8/, RDREQ/57/, C 6 REGD/67/, RESTOR/9/, RMAT/78/, S/62/, STEP/40/, STGLIM/11/, C 7 SUSED/64/, SWITCH/12/, TOOBIG/2/, VNEED/4/, VSAVE/60/, W/65/, C 8 XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, COVMAT=26, COVREQ=15, DIG=37, FDH=74, H=56, 1 HC=71, IERR=75, INITS=25, IPIVOT=76, IRC=29, IVNEED=3, 2 KAGQT=33, KALM=34, LMAT=42, MODE=35, MODEL=5, 3 MXFCAL=17, MXITER=18, NEXTIV=46, NEXTV=47, NFCALL=6, 4 NFGCAL=7, NFCOV=52, NGCOV=53, NGCALL=30, NITER=31, 5 P0=48, PC=41, PERM=58, QTR=77, RADINC=8, RDREQ=57, 6 REGD=67, RESTOR=9, RMAT=78, S=62, STEP=40, STGLIM=11, 7 SUSED=64, SWITCH=12, TOOBIG=2, VNEED=4, VSAVE=60, W=65, 8 XIRC=13, X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA COSMIN/47/, DGNORM/1/, DSTNRM/2/, F/10/, FDIF/11/, FUZZ/45/, C 1 F0/13/, GTSTEP/4/, INCFAC/23/, LMAX0/35/, LMAXS/36/, C 2 NVSAVE/9/, PHMXFC/21/, PREDUC/7/, RADFAC/16/, RADIUS/8/, C 3 RAD0/9/, RELDX/17/, SIZE/55/, STPPAR/5/, TUNER4/29/, C 4 TUNER5/30/, WSCALE/56/ C/7 PARAMETER (COSMIN=47, DGNORM=1, DSTNRM=2, F=10, FDIF=11, FUZZ=45, 1 F0=13, GTSTEP=4, INCFAC=23, LMAX0=35, LMAXS=36, 2 NVSAVE=9, PHMXFC=21, PREDUC=7, RADFAC=16, RADIUS=8, 3 RAD0=9, RELDX=17, SIZE=55, STPPAR=5, TUNER4=29, 4 TUNER5=30, WSCALE=56) C/ C C C/6 C DATA HALF/0.5E+0/, NEGONE/-1.E+0/, ONE/1.E+0/, ONEP2/1.2E+0/, C 1 ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, NEGONE=-1.E+0, ONE=1.E+0, ONEP2=1.2E+0, 1 ZERO=0.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 50 IF (I .EQ. 2) GO TO 60 C IF (I .LT. 12) GO TO 10 IF (I .GT. 13) GO TO 10 IV(VNEED) = IV(VNEED) + P*(3*P + 25)/2 + 7 IV(IVNEED) = IV(IVNEED) + 4*P 10 CALL PARCK(1, D, IV, LIV, LV, P, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 GO TO (360, 360, 360, 360, 360, 360, 240, 190, 240, 20, 20, 30), I C C *** STORAGE ALLOCATION *** C 20 PP1O2 = P * (P + 1) / 2 IV(S) = IV(LMAT) + PP1O2 IV(X0) = IV(S) + PP1O2 IV(STEP) = IV(X0) + 2*P IV(DIG) = IV(STEP) + 3*P IV(W) = IV(DIG) + 2*P IV(H) = IV(W) + 4*P + 7 IV(NEXTV) = IV(H) + PP1O2 IV(IPIVOT) = IV(PERM) + 3*P IV(NEXTIV) = IV(IPIVOT) + P IF (IV(1) .NE. 13) GO TO 30 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 30 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(STGLIM) = 2 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(COVMAT) = 0 IV(NFCOV) = 0 IV(NGCOV) = 0 IV(RADINC) = 0 IV(PC) = P V(RAD0) = ZERO V(STPPAR) = ZERO V(RADIUS) = V(LMAX0) / (ONE + V(PHMXFC)) C C *** CHECK CONSISTENCY OF B AND INITIALIZE IP ARRAY *** C IPI = IV(IPIVOT) DO 40 I = 1, P IV(IPI) = I IPI = IPI + 1 IF (B(1,I) .GT. B(2,I)) GO TO 680 40 CONTINUE C C *** SET INITIAL MODEL AND S MATRIX *** C IV(MODEL) = 1 IV(1) = 1 IF (IV(S) .LT. 0) GO TO 710 IF (IV(INITS) .GT. 1) IV(MODEL) = 2 S1 = IV(S) IF (IV(INITS) .EQ. 0 .OR. IV(INITS) .GT. 2) 1 CALL V7SCP(P*(P+1)/2, V(S1), ZERO) GO TO 710 C C *** NEW FUNCTION VALUE *** C 50 IF (IV(MODE) .EQ. 0) GO TO 360 IF (IV(MODE) .GT. 0) GO TO 590 C IF (IV(TOOBIG) .EQ. 0) GO TO 690 IV(1) = 63 GO TO 999 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C 60 IF (IV(TOOBIG) .EQ. 0) GO TO 70 IV(1) = 65 GO TO 999 C C *** NEW GRADIENT *** C 70 IV(KALM) = -1 IV(KAGQT) = -1 IV(FDH) = 0 IF (IV(MODE) .GT. 0) GO TO 590 IF (IV(HC) .LE. 0 .AND. IV(RMAT) .LE. 0) GO TO 670 C C *** CHOOSE INITIAL PERMUTATION *** C IPI = IV(IPIVOT) IPN = IPI + P - 1 IPIV2 = IV(PERM) - 1 K = IV(PC) P1 = P PP1 = P + 1 RMAT1 = IV(RMAT) HAVRM = RMAT1 .GT. 0 QTR1 = IV(QTR) HAVQTR = QTR1 .GT. 0 C *** MAKE SURE V(QTR1) IS LEGAL (EVEN WHEN NOT REFERENCED) *** W1 = IV(W) IF (.NOT. HAVQTR) QTR1 = W1 + P C DO 100 I = 1, P I1 = IV(IPN) IPN = IPN - 1 IF (B(1,I1) .GE. B(2,I1)) GO TO 80 XI = X(I1) GI = G(I1) IF (XI .LE. B(1,I1) .AND. GI .GT. ZERO) GO TO 80 IF (XI .GE. B(2,I1) .AND. GI .LT. ZERO) GO TO 80 C *** DISALLOW CONVERGENCE IF X(I1) HAS JUST BEEN FREED *** J = IPIV2 + I1 IF (IV(J) .GT. K) IV(CNVCOD) = 0 GO TO 100 80 IF (I1 .GE. P1) GO TO 90 I1 = PP1 - I CALL I7SHFT(P1, I1, IV(IPI)) IF (HAVRM) 1 CALL Q7RSH(I1, P1, HAVQTR, V(QTR1), V(RMAT1), V(W1)) 90 P1 = P1 - 1 100 CONTINUE IV(PC) = P1 C C *** COMPUTE V(DGNORM) (AN OUTPUT VALUE IF WE STOP NOW) *** C V(DGNORM) = ZERO IF (P1 .LE. 0) GO TO 110 DIG1 = IV(DIG) CALL V7VMP(P, V(DIG1), G, D, -1) CALL V7IPR(P, IV(IPI), V(DIG1)) V(DGNORM) = V2NRM(P1, V(DIG1)) 110 IF (IV(CNVCOD) .NE. 0) GO TO 580 IF (IV(MODE) .EQ. 0) GO TO 510 IV(MODE) = 0 V(F0) = V(F) IF (IV(INITS) .LE. 2) GO TO 170 C C *** ARRANGE FOR FINITE-DIFFERENCE INITIAL S *** C IV(XIRC) = IV(COVREQ) IV(COVREQ) = -1 IF (IV(INITS) .GT. 3) IV(COVREQ) = 1 IV(CNVCOD) = 70 GO TO 600 C C *** COME TO NEXT STMT AFTER COMPUTING F.D. HESSIAN FOR INIT. S *** C 120 H1 = IV(FDH) IF (H1 .LE. 0) GO TO 660 IV(CNVCOD) = 0 IV(MODE) = 0 IV(NFCOV) = 0 IV(NGCOV) = 0 IV(COVREQ) = IV(XIRC) S1 = IV(S) PP1O2 = PS * (PS + 1) / 2 HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 130 CALL V2AXY(PP1O2, V(S1), NEGONE, V(HC1), V(H1)) GO TO 140 130 RMAT1 = IV(RMAT) LMAT1 = IV(LMAT) CALL L7SQR(P, V(LMAT1), V(RMAT1)) IPI = IV(IPIVOT) IPIV1 = IV(PERM) + P CALL I7PNVR(P, IV(IPIV1), IV(IPI)) CALL S7IPR(P, IV(IPIV1), V(LMAT1)) CALL V2AXY(PP1O2, V(S1), NEGONE, V(LMAT1), V(H1)) C C *** ZERO PORTION OF S CORRESPONDING TO FIXED X COMPONENTS *** C 140 DO 160 I = 1, P IF (B(1,I) .LT. B(2,I)) GO TO 160 K = S1 + I*(I-1)/2 CALL V7SCP(I, V(K), ZERO) IF (I .GE. P) GO TO 170 K = K + 2*I - 1 I1 = I + 1 DO 150 J = I1, P V(K) = ZERO K = K + J 150 CONTINUE 160 CONTINUE C 170 IV(1) = 2 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 180 CALL ITSUM(D, G, IV, LIV, LV, P, V, X) 190 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 200 IV(1) = 10 GO TO 999 200 IV(NITER) = K + 1 C C *** UPDATE RADIUS *** C IF (K .EQ. 0) GO TO 220 STEP1 = IV(STEP) DO 210 I = 1, P V(STEP1) = D(I) * V(STEP1) STEP1 = STEP1 + 1 210 CONTINUE STEP1 = IV(STEP) T = V(RADFAC) * V2NRM(P, V(STEP1)) IF (V(RADFAC) .LT. ONE .OR. T .GT. V(RADIUS)) V(RADIUS) = T C C *** INITIALIZE FOR START OF NEXT ITERATION *** C 220 X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(MODEL) C C *** COPY X TO X0 *** C CALL V7CPY(P, V(X01), X) C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 230 IF (.NOT. STOPX(DUMMY)) GO TO 250 IV(1) = 11 GO TO 260 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 240 IF (V(F) .GE. V(F0)) GO TO 250 V(RADFAC) = ONE K = IV(NITER) GO TO 200 C 250 IF (IV(NFCALL) .LT. IV(MXFCAL) + IV(NFCOV)) GO TO 270 IV(1) = 9 260 IF (V(F) .GE. V(F0)) GO TO 999 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 500 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 270 STEP1 = IV(STEP) TG1 = IV(DIG) TD1 = TG1 + P X01 = IV(X0) W1 = IV(W) H1 = IV(H) P1 = IV(PC) IPI = IV(PERM) IPIV1 = IPI + P IPIV2 = IPIV1 + P IPIV0 = IV(IPIVOT) IF (IV(MODEL) .EQ. 2) GO TO 280 C C *** COMPUTE LEVENBERG-MARQUARDT STEP IF POSSIBLE... C RMAT1 = IV(RMAT) IF (RMAT1 .LE. 0) GO TO 280 QTR1 = IV(QTR) IF (QTR1 .LE. 0) GO TO 280 LMAT1 = IV(LMAT) WLM1 = W1 + P CALL L7MSB(B, D, G, IV(IERR), IV(IPIV0), IV(IPIV1), 1 IV(IPIV2), IV(KALM), V(LMAT1), LV, P, IV(P0), 2 IV(PC), V(QTR1), V(RMAT1), V(STEP1), V(TD1), 3 V(TG1), V, V(W1), V(WLM1), X, V(X01)) C *** H IS STORED IN THE END OF W AND HAS JUST BEEN OVERWRITTEN, C *** SO WE MARK IT INVALID... IV(H) = -IABS(H1) C *** EVEN IF H WERE STORED ELSEWHERE, IT WOULD BE NECESSARY TO C *** MARK INVALID THE INFORMATION G7QTS MAY HAVE STORED IN V... IV(KAGQT) = -1 GO TO 330 C 280 IF (H1 .GT. 0) GO TO 320 C C *** SET H TO D**-1 * (HC + T1*S) * D**-1. *** C P1LEN = P1*(P1+1)/2 H1 = -H1 IV(H) = H1 IV(FDH) = 0 IF (P1 .LE. 0) GO TO 320 C *** MAKE TEMPORARY PERMUTATION ARRAY *** CALL I7COPY(P, IV(IPI), IV(IPIV0)) J = IV(HC) IF (J .GT. 0) GO TO 290 J = H1 RMAT1 = IV(RMAT) CALL L7SQR(P1, V(H1), V(RMAT1)) GO TO 300 290 CALL V7CPY(P*(P+1)/2, V(H1), V(J)) CALL S7IPR(P, IV(IPI), V(H1)) 300 IF (IV(MODEL) .EQ. 1) GO TO 310 LMAT1 = IV(LMAT) S1 = IV(S) CALL V7CPY(P*(P+1)/2, V(LMAT1), V(S1)) CALL S7IPR(P, IV(IPI), V(LMAT1)) CALL V2AXY(P1LEN, V(H1), ONE, V(LMAT1), V(H1)) 310 CALL V7CPY(P, V(TD1), D) CALL V7IPR(P, IV(IPI), V(TD1)) CALL S7DMP(P1, V(H1), V(H1), V(TD1), -1) IV(KAGQT) = -1 C C *** COMPUTE ACTUAL GOLDFELD-QUANDT-TROTTER STEP *** C 320 LMAT1 = IV(LMAT) CALL G7QSB(B, D, V(H1), G, IV(IPI), IV(IPIV1), IV(IPIV2), 1 IV(KAGQT), V(LMAT1), LV, P, IV(P0), P1, V(STEP1), 2 V(TD1), V(TG1), V, V(W1), X, V(X01)) IF (IV(KALM) .GT. 0) IV(KALM) = 0 C 330 IF (IV(IRC) .NE. 6) GO TO 340 IF (IV(RESTOR) .NE. 2) GO TO 360 RSTRST = 2 GO TO 370 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 340 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 360 IF (IV(IRC) .NE. 5) GO TO 350 IF (V(RADFAC) .LE. ONE) GO TO 350 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 350 STEP1 = IV(STEP) X01 = IV(X0) CALL V2AXY(P, V(STEP1), NEGONE, V(X01), X) IF (IV(RESTOR) .NE. 2) GO TO 360 RSTRST = 0 GO TO 370 C C *** COMPUTE F(X0 + STEP) *** C 350 X01 = IV(X0) STEP1 = IV(STEP) CALL V2AXY(P, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 710 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 360 RSTRST = 3 370 X01 = IV(X0) V(RELDX) = RLDST(P, D, X, V(X01)) CALL A7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = X01 + P I = IV(RESTOR) + 1 GO TO (410, 380, 390, 400), I 380 CALL V7CPY(P, X, V(X01)) GO TO 410 390 CALL V7CPY(P, V(LSTGST), V(STEP1)) GO TO 410 400 CALL V7CPY(P, V(STEP1), V(LSTGST)) CALL V2AXY(P, X, ONE, V(STEP1), V(X01)) V(RELDX) = RLDST(P, D, X, V(X01)) IV(RESTOR) = RSTRST C C *** IF NECESSARY, SWITCH MODELS *** C 410 IF (IV(SWITCH) .EQ. 0) GO TO 420 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(SUSED) + 2 L = IV(VSAVE) CALL V7CPY(NVSAVE, V, V(L)) 420 L = IV(IRC) - 4 STPMOD = IV(MODEL) IF (L .GT. 0) GO TO (440,450,460,460,460,460,460,460,570,510), L C C *** DECIDE WHETHER TO CHANGE MODELS *** C E = V(PREDUC) - V(FDIF) S1 = IV(S) CALL S7LVM(PS, Y, V(S1), V(STEP1)) STTSST = HALF * D7TPR(PS, V(STEP1), Y) IF (IV(MODEL) .EQ. 1) STTSST = -STTSST IF ( ABS(E + STTSST) * V(FUZZ) .GE. ABS(E)) GO TO 430 C C *** SWITCH MODELS *** C IV(MODEL) = 3 - IV(MODEL) IF (-2 .LT. L) GO TO 470 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(SUSED) + 2 L = IV(VSAVE) CALL V7CPY(NVSAVE, V(L), V) GO TO 230 C 430 IF (-3 .LT. L) GO TO 470 C C *** RECOMPUTE STEP WITH DIFFERENT RADIUS *** C 440 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 230 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST C 450 V(RADIUS) = V(LMAXS) GO TO 270 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 460 IV(CNVCOD) = L IF (V(F) .GE. V(F0)) GO TO 580 IF (IV(XIRC) .EQ. 14) GO TO 580 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 470 IV(COVMAT) = 0 IV(REGD) = 0 C C *** SEE WHETHER TO SET V(RADFAC) BY GRADIENT TESTS *** C IF (IV(IRC) .NE. 3) GO TO 500 STEP1 = IV(STEP) TEMP1 = STEP1 + P TEMP2 = IV(X0) C C *** SET TEMP1 = HESSIAN * STEP FOR _USE_ IN GRADIENT TESTS *** C HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 480 CALL S7LVM(P, V(TEMP1), V(HC1), V(STEP1)) GO TO 490 480 RMAT1 = IV(RMAT) IPIV0 = IV(IPIVOT) CALL V7CPY(P, V(TEMP1), V(STEP1)) CALL V7IPR(P, IV(IPIV0), V(TEMP1)) CALL L7TVM(P, V(TEMP1), V(RMAT1), V(TEMP1)) CALL L7VML(P, V(TEMP1), V(RMAT1), V(TEMP1)) IPIV1 = IV(PERM) + P CALL I7PNVR(P, IV(IPIV1), IV(IPIV0)) CALL V7IPR(P, IV(IPIV1), V(TEMP1)) C 490 IF (STPMOD .EQ. 1) GO TO 500 S1 = IV(S) CALL S7LVM(PS, V(TEMP2), V(S1), V(STEP1)) CALL V2AXY(PS, V(TEMP1), ONE, V(TEMP2), V(TEMP1)) C C *** SAVE OLD GRADIENT AND COMPUTE NEW ONE *** C 500 IV(NGCALL) = IV(NGCALL) + 1 G01 = IV(W) CALL V7CPY(P, V(G01), G) GO TO 690 C C *** INITIALIZATIONS -- G0 = G - G0, ETC. *** C 510 G01 = IV(W) CALL V2AXY(P, V(G01), NEGONE, V(G01), G) STEP1 = IV(STEP) TEMP1 = STEP1 + P TEMP2 = IV(X0) IF (IV(IRC) .NE. 3) GO TO 540 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C C *** SET TEMP1 = D**-1 * (HESSIAN * STEP + (G(X0) - G(X))) *** C K = TEMP1 L = G01 DO 520 I = 1, P V(K) = (V(K) - V(L)) / D(I) K = K + 1 L = L + 1 520 CONTINUE C C *** DO GRADIENT TESTS *** C IF ( V2NRM(P, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) GO TO 530 IF ( D7TPR(P, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 540 530 V(RADFAC) = V(INCFAC) C C *** COMPUTE Y VECTOR NEEDED FOR UPDATING S *** C 540 CALL V2AXY(PS, Y, NEGONE, Y, G) C C *** DETERMINE SIZING FACTOR V(SIZE) *** C C *** SET TEMP1 = S * STEP *** S1 = IV(S) CALL S7LVM(PS, V(TEMP1), V(S1), V(STEP1)) C T1 = ABS( D7TPR(PS, V(STEP1), V(TEMP1))) T = ABS( D7TPR(PS, V(STEP1), Y)) V(SIZE) = ONE IF (T .LT. T1) V(SIZE) = T / T1 C C *** SET G0 TO WCHMTD CHOICE OF FLETCHER AND AL-BAALI *** C HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 550 CALL S7LVM(PS, V(G01), V(HC1), V(STEP1)) GO TO 560 C 550 RMAT1 = IV(RMAT) IPIV0 = IV(IPIVOT) CALL V7CPY(P, V(G01), V(STEP1)) I = G01 + PS IF (PS .LT. P) CALL V7SCP(P-PS, V(I), ZERO) CALL V7IPR(P, IV(IPIV0), V(G01)) CALL L7TVM(P, V(G01), V(RMAT1), V(G01)) CALL L7VML(P, V(G01), V(RMAT1), V(G01)) IPIV1 = IV(PERM) + P CALL I7PNVR(P, IV(IPIV1), IV(IPIV0)) CALL V7IPR(P, IV(IPIV1), V(G01)) C 560 CALL V2AXY(PS, V(G01), ONE, Y, V(G01)) C C *** UPDATE S *** C CALL S7LUP(V(S1), V(COSMIN), PS, V(SIZE), V(STEP1), V(TEMP1), 1 V(TEMP2), V(G01), V(WSCALE), Y) IV(1) = 2 GO TO 180 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 570 IV(1) = 64 GO TO 999 C C C *** CONVERGENCE OBTAINED -- SEE WHETHER TO COMPUTE COVARIANCE *** C 580 IF (IV(RDREQ) .EQ. 0) GO TO 660 IF (IV(FDH) .NE. 0) GO TO 660 IF (IV(CNVCOD) .GE. 7) GO TO 660 IF (IV(REGD) .GT. 0) GO TO 660 IF (IV(COVMAT) .GT. 0) GO TO 660 IF (IABS(IV(COVREQ)) .GE. 3) GO TO 640 IF (IV(RESTOR) .EQ. 0) IV(RESTOR) = 2 GO TO 600 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN FOR COMPUTING COVARIANCE *** C 590 IV(RESTOR) = 0 600 CALL F7DHB(B, D, G, I, IV, LIV, LV, P, V, X) GO TO (610, 620, 630), I 610 IV(NFCOV) = IV(NFCOV) + 1 IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 710 C 620 IV(NGCOV) = IV(NGCOV) + 1 IV(NGCALL) = IV(NGCALL) + 1 IV(NFGCAL) = IV(NFCALL) + IV(NGCOV) GO TO 690 C 630 IF (IV(CNVCOD) .EQ. 70) GO TO 120 GO TO 660 C 640 H1 = IABS(IV(H)) IV(FDH) = H1 IV(H) = -H1 HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 650 CALL V7CPY(P*(P+1)/2, V(H1), V(HC1)) GO TO 660 650 RMAT1 = IV(RMAT) CALL L7SQR(P, V(H1), V(RMAT1)) C 660 IV(MODE) = 0 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 GO TO 999 C C *** SPECIAL RETURN FOR MISSING HESSIAN INFORMATION -- BOTH C *** IV(HC) .LE. 0 AND IV(RMAT) .LE. 0 C 670 IV(1) = 1400 GO TO 999 C C *** INCONSISTENT B *** C 680 IV(1) = 82 GO TO 999 C C *** SAVE, THEN INITIALIZE IPIVOT ARRAY BEFORE COMPUTING G *** C 690 IV(1) = 2 J = IV(IPIVOT) IPI = IV(PERM) CALL I7PNVR(P, IV(IPI), IV(J)) DO 700 I = 1, P IV(J) = I J = J + 1 700 CONTINUE C C *** PROJECT X INTO FEASIBLE REGION (PRIOR TO COMPUTING F OR G) *** C 710 DO 720 I = 1, P IF (X(I) .LT. B(1,I)) X(I) = B(1,I) IF (X(I) .GT. B(2,I)) X(I) = B(2,I) 720 CONTINUE IV(TOOBIG) = 0 C 999 RETURN C C *** LAST LINE OF G7ITB FOLLOWS *** END PyBDSF-1.10.1/src/port3/g7lit.f000066400000000000000000000607041420247104600156630ustar00rootroot00000000000000 SUBROUTINE G7LIT(D, G, IV, LIV, LV, P, PS, V, X, Y) C C *** CARRY OUT NL2SOL-LIKE ITERATIONS FOR GENERALIZED LINEAR *** C *** REGRESSION PROBLEMS (AND OTHERS OF SIMILAR STRUCTURE) *** C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, P, PS INTEGER IV(LIV) REAL D(P), G(P), V(LV), X(P), Y(P) C C-------------------------- PARAMETER USAGE -------------------------- C C D.... SCALE VECTOR. C IV... INTEGER VALUE ARRAY. C LIV.. LENGTH OF IV. MUST BE AT LEAST 82. C LH... LENGTH OF H = P*(P+1)/2. C LV... LENGTH OF V. MUST BE AT LEAST P*(3*P + 19)/2 + 7. C G.... GRADIENT AT X (WHEN IV(1) = 2). C P.... NUMBER OF PARAMETERS (COMPONENTS IN X). C PS... NUMBER OF NONZERO ROWS AND COLUMNS IN S. C V.... FLOATING-POINT VALUE ARRAY. C X.... PARAMETER VECTOR. C Y.... PART OF YIELD VECTOR (WHEN IV(1)= 2, SCRATCH OTHERWISE). C C *** DISCUSSION *** C C G7LIT PERFORMS NL2SOL-LIKE ITERATIONS FOR A VARIETY OF C REGRESSION PROBLEMS THAT ARE SIMILAR TO NONLINEAR LEAST-SQUARES C IN THAT THE HESSIAN IS THE SUM OF TWO TERMS, A READILY-COMPUTED C FIRST-ORDER TERM AND A SECOND-ORDER TERM. THE CALLER SUPPLIES C THE FIRST-ORDER TERM OF THE HESSIAN IN HC (LOWER TRIANGLE, STORED C COMPACTLY BY ROWS IN V, STARTING AT IV(HC)), AND G7LIT BUILDS AN C APPROXIMATION, S, TO THE SECOND-ORDER TERM. THE CALLER ALSO C PROVIDES THE FUNCTION VALUE, GRADIENT, AND PART OF THE YIELD C VECTOR USED IN UPDATING S. G7LIT DECIDES DYNAMICALLY WHETHER OR C NOT TO _USE_ S WHEN CHOOSING THE NEXT STEP TO TRY... THE HESSIAN C APPROXIMATION USED IS EITHER HC ALONE (GAUSS-NEWTON MODEL) OR C HC + S (AUGMENTED MODEL). C C IF PS .LT. P, THEN ROWS AND COLUMNS PS+1...P OF S ARE KEPT C CONSTANT. THEY WILL BE ZERO UNLESS THE CALLER SETS IV(INITS) TO C 1 OR 2 AND SUPPLIES NONZERO VALUES FOR THEM, OR THE CALLER SETS C IV(INITS) TO 3 OR 4 AND THE FINITE-DIFFERENCE INITIAL S THEN C COMPUTED HAS NONZERO VALUES IN THESE ROWS. C C IF IV(INITS) IS 3 OR 4, THEN THE INITIAL S IS COMPUTED BY C FINITE DIFFERENCES. 3 MEANS _USE_ FUNCTION DIFFERENCES, 4 MEANS C _USE_ GRADIENT DIFFERENCES. FINITE DIFFERENCING IS DONE THE SAME C WAY AS IN COMPUTING A COVARIANCE MATRIX (WITH IV(COVREQ) = -1, -2, C 1, OR 2). C C FOR UPDATING S, G7LIT ASSUMES THAT THE GRADIENT HAS THE FORM C OF A SUM OVER I OF RHO(I,X)*GRAD(R(I,X)), WHERE GRAD DENOTES THE C GRADIENT WITH RESPECT TO X. THE TRUE SECOND-ORDER TERM THEN IS C THE SUM OVER I OF RHO(I,X)*HESSIAN(R(I,X)). IF X = X0 + STEP, C THEN WE WISH TO UPDATE S SO THAT S*STEP IS THE SUM OVER I OF C RHO(I,X)*(GRAD(R(I,X)) - GRAD(R(I,X0))). THE CALLER MUST SUPPLY C PART OF THIS IN Y, NAMELY THE SUM OVER I OF C RHO(I,X)*GRAD(R(I,X0)), WHEN CALLING G7LIT WITH IV(1) = 2 AND C IV(MODE) = 0 (WHERE MODE = 38). G THEN CONTANS THE OTHER PART, C SO THAT THE DESIRED YIELD VECTOR IS G - Y. IF PS .LT. P, THEN C THE ABOVE DISCUSSION APPLIES ONLY TO THE FIRST PS COMPONENTS OF C GRAD(R(I,X)), STEP, AND Y. C C PARAMETERS IV, P, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO NL2SOL (WHICH SEE), EXCEPT THAT V CAN BE SHORTER C (SINCE THE PART OF V THAT NL2SOL USES FOR STORING D, J, AND R IS C NOT NEEDED). MOREOVER, COMPARED WITH NL2SOL, IV(1) MAY HAVE THE C TWO ADDITIONAL OUTPUT VALUES 1 AND 2, WHICH ARE EXPLAINED BELOW, C AS IS THE _USE_ OF IV(TOOBIG) AND IV(NFGCAL). THE VALUES IV(D), C IV(J), AND IV(R), WHICH ARE OUTPUT VALUES FROM NL2SOL (AND C NL2SNO), ARE NOT REFERENCED BY G7LIT OR THE SUBROUTINES IT CALLS. C C WHEN G7LIT IS FIRST CALLED, I.E., WHEN G7LIT IS CALLED WITH C IV(1) = 0 OR 12, V(F), G, AND HC NEED NOT BE INITIALIZED. TO C OBTAIN THESE STARTING VALUES, G7LIT RETURNS FIRST WITH IV(1) = 1, C THEN WITH IV(1) = 2, WITH IV(MODE) = -1 IN BOTH CASES. ON C SUBSEQUENT RETURNS WITH IV(1) = 2, IV(MODE) = 0 IMPLIES THAT C Y MUST ALSO BE SUPPLIED. (NOTE THAT Y IS USED FOR SCRATCH -- ITS C INPUT CONTENTS ARE LOST. BY CONTRAST, HC IS NEVER CHANGED.) C ONCE CONVERGENCE HAS BEEN OBTAINED, IV(RDREQ) AND IV(COVREQ) MAY C IMPLY THAT A FINITE-DIFFERENCE HESSIAN SHOULD BE COMPUTED FOR USE C IN COMPUTING A COVARIANCE MATRIX. IN THIS CASE G7LIT WILL MAKE A C NUMBER OF RETURNS WITH IV(1) = 1 OR 2 AND IV(MODE) POSITIVE. C WHEN IV(MODE) IS POSITIVE, Y SHOULD NOT BE CHANGED. C C IV(1) = 1 MEANS THE CALLER SHOULD SET V(F) (I.E., V(10)) TO F(X), THE C FUNCTION VALUE AT X, AND CALL G7LIT AGAIN, HAVING CHANGED C NONE OF THE OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) C CANNOT BE EVALUATED (E.G. IF OVERFLOW WOULD OCCUR), WHICH C MAY HAPPEN BECAUSE OF AN OVERSIZED STEP. IN THIS CASE C THE CALLER SHOULD SET IV(TOOBIG) = IV(2) TO 1, WHICH WILL C CAUSE G7LIT TO IGNORE V(F) AND TRY A SMALLER STEP. NOTE C THAT THE CURRENT FUNCTION EVALUATION COUNT IS AVAILABLE C IN IV(NFCALL) = IV(6). THIS MAY BE USED TO IDENTIFY C WHICH COPY OF SAVED INFORMATION SHOULD BE USED IN COM- C PUTING G, HC, AND Y THE NEXT TIME G7LIT RETURNS WITH C IV(1) = 2. SEE MLPIT FOR AN EXAMPLE OF THIS. C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT OF F AT C X. THE CALLER SHOULD ALSO SET HC TO THE GAUSS-NEWTON C HESSIAN AT X. IF IV(MODE) = 0, THEN THE CALLER SHOULD C ALSO COMPUTE THE PART OF THE YIELD VECTOR DESCRIBED ABOVE. C THE CALLER SHOULD THEN CALL G7LIT AGAIN (WITH IV(1) = 2). C THE CALLER MAY ALSO CHANGE D AT THIS TIME, BUT SHOULD NOT C CHANGE X. NOTE THAT IV(NFGCAL) = IV(7) CONTAINS THE C VALUE THAT IV(NFCALL) HAD DURING THE RETURN WITH C IV(1) = 1 IN WHICH X HAD THE SAME VALUE AS IT NOW HAS. C IV(NFGCAL) IS EITHER IV(NFCALL) OR IV(NFCALL) - 1. MLPIT C IS AN EXAMPLE WHERE THIS INFORMATION IS USED. IF G OR HC C CANNOT BE EVALUATED AT X, THEN THE CALLER MAY SET C IV(TOOBIG) TO 1, IN WHICH CASE G7LIT WILL RETURN WITH C IV(1) = 15. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED IN PART BY D.O.E. GRANT EX-76-A-01-2295 TO MIT/CCREMS. C C (SEE NL2SOL FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DUMMY, DIG1, G01, H1, HC1, I, IPIV1, J, K, L, LMAT1, 1 LSTGST, PP1O2, QTR1, RMAT1, RSTRST, STEP1, STPMOD, S1, 2 TEMP1, TEMP2, W1, X01 REAL E, STTSST, T, T1 C C *** CONSTANTS *** C REAL HALF, NEGONE, ONE, ONEP2, ZERO C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX REAL D7TPR, L7SVX, L7SVN, RLDST, R7MDC, V2NRM EXTERNAL A7SST, D7TPR, F7HES, G7QTS, ITSUM, L7MST, L7SRT, 1 L7SQR, L7SVX, L7SVN, L7TVM, L7VML, PARCK, RLDST, 2 R7MDC, S7LUP, S7LVM, STOPX, V2AXY, V7CPY, V7SCP, 3 V2NRM C C A7SST.... ASSESSES CANDIDATE STEP. C D7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C F7HES.... COMPUTE FINITE-DIFFERENCE HESSIAN (FOR COVARIANCE). C G7QTS.... COMPUTES GOLDFELD-QUANDT-TROTTER STEP (AUGMENTED MODEL). C ITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C L7MST... COMPUTES LEVENBERG-MARQUARDT STEP (GAUSS-NEWTON MODEL). C L7SRT.... COMPUTES CHOLESKY FACTOR OF (LOWER TRIANG. OF) SYM. MATRIX. C L7SQR... COMPUTES L * L**T FROM LOWER TRIANGULAR MATRIX L. C L7TVM... COMPUTES L**T * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C L7SVX... ESTIMATES LARGEST SING. VALUE OF LOWER TRIANG. MATRIX. C L7SVN... ESTIMATES SMALLEST SING. VALUE OF LOWER TRIANG. MATRIX. C L7VML.... COMPUTES L * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C PARCK.... CHECK VALIDITY OF IV AND V INPUT COMPONENTS. C RLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C R7MDC... RETURNS MACHINE-DEPENDENT CONSTANTS. C S7LUP... PERFORMS QUASI-NEWTON UPDATE ON COMPACTLY STORED LOWER TRI- C ANGLE OF A SYMMETRIC MATRIX. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C V2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C V2NRM... RETURNS THE 2-NORM OF A VECTOR. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, COSMIN, COVMAT, COVREQ, DGNORM, DIG, DSTNRM, F, 1 FDH, FDIF, FUZZ, F0, GTSTEP, H, HC, IERR, INCFAC, INITS, 2 IPIVOT, IRC, KAGQT, KALM, LMAT, LMAX0, LMAXS, MODE, MODEL, 3 MXFCAL, MXITER, NEXTV, NFCALL, NFGCAL, NFCOV, NGCOV, 4 NGCALL, NITER, NVSAVE, PHMXFC, PREDUC, QTR, RADFAC, 5 RADINC, RADIUS, RAD0, RCOND, RDREQ, REGD, RELDX, RESTOR, 6 RMAT, S, SIZE, STEP, STGLIM, STLSTG, STPPAR, SUSED, 7 SWITCH, TOOBIG, TUNER4, TUNER5, VNEED, VSAVE, W, WSCALE, 8 XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA CNVCOD/55/, COVMAT/26/, COVREQ/15/, DIG/37/, FDH/74/, H/56/, C 1 HC/71/, IERR/75/, INITS/25/, IPIVOT/76/, IRC/29/, KAGQT/33/, C 2 KALM/34/, LMAT/42/, MODE/35/, MODEL/5/, MXFCAL/17/, C 3 MXITER/18/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, NFCOV/52/, C 4 NGCOV/53/, NGCALL/30/, NITER/31/, QTR/77/, RADINC/8/, C 5 RDREQ/57/, REGD/67/, RESTOR/9/, RMAT/78/, S/62/, STEP/40/, C 6 STGLIM/11/, STLSTG/41/, SUSED/64/, SWITCH/12/, TOOBIG/2/, C 7 VNEED/4/, VSAVE/60/, W/65/, XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, COVMAT=26, COVREQ=15, DIG=37, FDH=74, H=56, 1 HC=71, IERR=75, INITS=25, IPIVOT=76, IRC=29, KAGQT=33, 2 KALM=34, LMAT=42, MODE=35, MODEL=5, MXFCAL=17, 3 MXITER=18, NEXTV=47, NFCALL=6, NFGCAL=7, NFCOV=52, 4 NGCOV=53, NGCALL=30, NITER=31, QTR=77, RADINC=8, 5 RDREQ=57, REGD=67, RESTOR=9, RMAT=78, S=62, STEP=40, 6 STGLIM=11, STLSTG=41, SUSED=64, SWITCH=12, TOOBIG=2, 7 VNEED=4, VSAVE=60, W=65, XIRC=13, X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA COSMIN/47/, DGNORM/1/, DSTNRM/2/, F/10/, FDIF/11/, FUZZ/45/, C 1 F0/13/, GTSTEP/4/, INCFAC/23/, LMAX0/35/, LMAXS/36/, C 2 NVSAVE/9/, PHMXFC/21/, PREDUC/7/, RADFAC/16/, RADIUS/8/, C 3 RAD0/9/, RCOND/53/, RELDX/17/, SIZE/55/, STPPAR/5/, C 4 TUNER4/29/, TUNER5/30/, WSCALE/56/ C/7 PARAMETER (COSMIN=47, DGNORM=1, DSTNRM=2, F=10, FDIF=11, FUZZ=45, 1 F0=13, GTSTEP=4, INCFAC=23, LMAX0=35, LMAXS=36, 2 NVSAVE=9, PHMXFC=21, PREDUC=7, RADFAC=16, RADIUS=8, 3 RAD0=9, RCOND=53, RELDX=17, SIZE=55, STPPAR=5, 4 TUNER4=29, TUNER5=30, WSCALE=56) C/ C C C/6 C DATA HALF/0.5E+0/, NEGONE/-1.E+0/, ONE/1.E+0/, ONEP2/1.2E+0/, C 1 ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, NEGONE=-1.E+0, ONE=1.E+0, ONEP2=1.2E+0, 1 ZERO=0.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 40 IF (I .EQ. 2) GO TO 50 C IF (I .EQ. 12 .OR. I .EQ. 13) 1 IV(VNEED) = IV(VNEED) + P*(3*P + 19)/2 + 7 CALL PARCK(1, D, IV, LIV, LV, P, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 GO TO (290, 290, 290, 290, 290, 290, 170, 120, 170, 10, 10, 20), I C C *** STORAGE ALLOCATION *** C 10 PP1O2 = P * (P + 1) / 2 IV(S) = IV(LMAT) + PP1O2 IV(X0) = IV(S) + PP1O2 IV(STEP) = IV(X0) + P IV(STLSTG) = IV(STEP) + P IV(DIG) = IV(STLSTG) + P IV(W) = IV(DIG) + P IV(H) = IV(W) + 4*P + 7 IV(NEXTV) = IV(H) + PP1O2 IF (IV(1) .NE. 13) GO TO 20 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 20 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(STGLIM) = 2 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(COVMAT) = 0 IV(NFCOV) = 0 IV(NGCOV) = 0 IV(RADINC) = 0 IV(RESTOR) = 0 IV(FDH) = 0 V(RAD0) = ZERO V(STPPAR) = ZERO V(RADIUS) = V(LMAX0) / (ONE + V(PHMXFC)) C C *** SET INITIAL MODEL AND S MATRIX *** C IV(MODEL) = 1 IF (IV(S) .LT. 0) GO TO 999 IF (IV(INITS) .GT. 1) IV(MODEL) = 2 S1 = IV(S) IF (IV(INITS) .EQ. 0 .OR. IV(INITS) .GT. 2) 1 CALL V7SCP(P*(P+1)/2, V(S1), ZERO) IV(1) = 1 J = IV(IPIVOT) IF (J .LE. 0) GO TO 999 DO 30 I = 1, P IV(J) = I J = J + 1 30 CONTINUE GO TO 999 C C *** NEW FUNCTION VALUE *** C 40 IF (IV(MODE) .EQ. 0) GO TO 290 IF (IV(MODE) .GT. 0) GO TO 520 C IV(1) = 2 IF (IV(TOOBIG) .EQ. 0) GO TO 999 IV(1) = 63 GO TO 999 C C *** NEW GRADIENT *** C 50 IV(KALM) = -1 IV(KAGQT) = -1 IV(FDH) = 0 IF (IV(MODE) .GT. 0) GO TO 520 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C IF (IV(TOOBIG) .EQ. 0) GO TO 60 IV(1) = 65 GO TO 999 60 IF (IV(HC) .LE. 0 .AND. IV(RMAT) .LE. 0) GO TO 610 C C *** COMPUTE D**-1 * GRADIENT *** C DIG1 = IV(DIG) K = DIG1 DO 70 I = 1, P V(K) = G(I) / D(I) K = K + 1 70 CONTINUE V(DGNORM) = V2NRM(P, V(DIG1)) C IF (IV(CNVCOD) .NE. 0) GO TO 510 IF (IV(MODE) .EQ. 0) GO TO 440 IV(MODE) = 0 V(F0) = V(F) IF (IV(INITS) .LE. 2) GO TO 100 C C *** ARRANGE FOR FINITE-DIFFERENCE INITIAL S *** C IV(XIRC) = IV(COVREQ) IV(COVREQ) = -1 IF (IV(INITS) .GT. 3) IV(COVREQ) = 1 IV(CNVCOD) = 70 GO TO 530 C C *** COME TO NEXT STMT AFTER COMPUTING F.D. HESSIAN FOR INIT. S *** C 80 IV(CNVCOD) = 0 IV(MODE) = 0 IV(NFCOV) = 0 IV(NGCOV) = 0 IV(COVREQ) = IV(XIRC) S1 = IV(S) PP1O2 = PS * (PS + 1) / 2 HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 90 CALL V2AXY(PP1O2, V(S1), NEGONE, V(HC1), V(H1)) GO TO 100 90 RMAT1 = IV(RMAT) CALL L7SQR(PS, V(S1), V(RMAT1)) CALL V2AXY(PP1O2, V(S1), NEGONE, V(S1), V(H1)) 100 IV(1) = 2 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 110 CALL ITSUM(D, G, IV, LIV, LV, P, V, X) 120 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 130 IV(1) = 10 GO TO 999 130 IV(NITER) = K + 1 C C *** UPDATE RADIUS *** C IF (K .EQ. 0) GO TO 150 STEP1 = IV(STEP) DO 140 I = 1, P V(STEP1) = D(I) * V(STEP1) STEP1 = STEP1 + 1 140 CONTINUE STEP1 = IV(STEP) T = V(RADFAC) * V2NRM(P, V(STEP1)) IF (V(RADFAC) .LT. ONE .OR. T .GT. V(RADIUS)) V(RADIUS) = T C C *** INITIALIZE FOR START OF NEXT ITERATION *** C 150 X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(MODEL) C C *** COPY X TO X0 *** C CALL V7CPY(P, V(X01), X) C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 160 IF (.NOT. STOPX(DUMMY)) GO TO 180 IV(1) = 11 GO TO 190 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 170 IF (V(F) .GE. V(F0)) GO TO 180 V(RADFAC) = ONE K = IV(NITER) GO TO 130 C 180 IF (IV(NFCALL) .LT. IV(MXFCAL) + IV(NFCOV)) GO TO 200 IV(1) = 9 190 IF (V(F) .GE. V(F0)) GO TO 999 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 430 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 200 STEP1 = IV(STEP) W1 = IV(W) H1 = IV(H) T1 = ONE IF (IV(MODEL) .EQ. 2) GO TO 210 T1 = ZERO C C *** COMPUTE LEVENBERG-MARQUARDT STEP IF POSSIBLE... C RMAT1 = IV(RMAT) IF (RMAT1 .LE. 0) GO TO 210 QTR1 = IV(QTR) IF (QTR1 .LE. 0) GO TO 210 IPIV1 = IV(IPIVOT) CALL L7MST(D, G, IV(IERR), IV(IPIV1), IV(KALM), P, V(QTR1), 1 V(RMAT1), V(STEP1), V, V(W1)) C *** H IS STORED IN THE END OF W AND HAS JUST BEEN OVERWRITTEN, C *** SO WE MARK IT INVALID... IV(H) = -IABS(H1) C *** EVEN IF H WERE STORED ELSEWHERE, IT WOULD BE NECESSARY TO C *** MARK INVALID THE INFORMATION G7QTS MAY HAVE STORED IN V... IV(KAGQT) = -1 GO TO 260 C 210 IF (H1 .GT. 0) GO TO 250 C C *** SET H TO D**-1 * (HC + T1*S) * D**-1. *** C H1 = -H1 IV(H) = H1 IV(FDH) = 0 J = IV(HC) IF (J .GT. 0) GO TO 220 J = H1 RMAT1 = IV(RMAT) CALL L7SQR(P, V(H1), V(RMAT1)) 220 S1 = IV(S) DO 240 I = 1, P T = ONE / D(I) DO 230 K = 1, I V(H1) = T * (V(J) + T1*V(S1)) / D(K) J = J + 1 H1 = H1 + 1 S1 = S1 + 1 230 CONTINUE 240 CONTINUE H1 = IV(H) IV(KAGQT) = -1 C C *** COMPUTE ACTUAL GOLDFELD-QUANDT-TROTTER STEP *** C 250 DIG1 = IV(DIG) LMAT1 = IV(LMAT) CALL G7QTS(D, V(DIG1), V(H1), IV(KAGQT), V(LMAT1), P, V(STEP1), 1 V, V(W1)) IF (IV(KALM) .GT. 0) IV(KALM) = 0 C 260 IF (IV(IRC) .NE. 6) GO TO 270 IF (IV(RESTOR) .NE. 2) GO TO 290 RSTRST = 2 GO TO 300 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 270 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 290 IF (IV(IRC) .NE. 5) GO TO 280 IF (V(RADFAC) .LE. ONE) GO TO 280 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 280 STEP1 = IV(STEP) X01 = IV(X0) CALL V2AXY(P, V(STEP1), NEGONE, V(X01), X) IF (IV(RESTOR) .NE. 2) GO TO 290 RSTRST = 0 GO TO 300 C C *** COMPUTE F(X0 + STEP) *** C 280 X01 = IV(X0) STEP1 = IV(STEP) CALL V2AXY(P, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 999 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 290 RSTRST = 3 300 X01 = IV(X0) V(RELDX) = RLDST(P, D, X, V(X01)) CALL A7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = IV(STLSTG) I = IV(RESTOR) + 1 GO TO (340, 310, 320, 330), I 310 CALL V7CPY(P, X, V(X01)) GO TO 340 320 CALL V7CPY(P, V(LSTGST), V(STEP1)) GO TO 340 330 CALL V7CPY(P, V(STEP1), V(LSTGST)) CALL V2AXY(P, X, ONE, V(STEP1), V(X01)) V(RELDX) = RLDST(P, D, X, V(X01)) IV(RESTOR) = RSTRST C C *** IF NECESSARY, SWITCH MODELS *** C 340 IF (IV(SWITCH) .EQ. 0) GO TO 350 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(SUSED) + 2 L = IV(VSAVE) CALL V7CPY(NVSAVE, V, V(L)) 350 L = IV(IRC) - 4 STPMOD = IV(MODEL) IF (L .GT. 0) GO TO (370,380,390,390,390,390,390,390,500,440), L C C *** DECIDE WHETHER TO CHANGE MODELS *** C E = V(PREDUC) - V(FDIF) S1 = IV(S) CALL S7LVM(PS, Y, V(S1), V(STEP1)) STTSST = HALF * D7TPR(PS, V(STEP1), Y) IF (IV(MODEL) .EQ. 1) STTSST = -STTSST IF ( ABS(E + STTSST) * V(FUZZ) .GE. ABS(E)) GO TO 360 C C *** SWITCH MODELS *** C IV(MODEL) = 3 - IV(MODEL) IF (-2 .LT. L) GO TO 400 IV(H) = -IABS(IV(H)) IV(SUSED) = IV(SUSED) + 2 L = IV(VSAVE) CALL V7CPY(NVSAVE, V(L), V) GO TO 160 C 360 IF (-3 .LT. L) GO TO 400 C C *** RECOMPUTE STEP WITH NEW RADIUS *** C 370 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 160 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST C 380 V(RADIUS) = V(LMAXS) GO TO 200 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 390 IV(CNVCOD) = L IF (V(F) .GE. V(F0)) GO TO 510 IF (IV(XIRC) .EQ. 14) GO TO 510 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 400 IV(COVMAT) = 0 IV(REGD) = 0 C C *** SEE WHETHER TO SET V(RADFAC) BY GRADIENT TESTS *** C IF (IV(IRC) .NE. 3) GO TO 430 STEP1 = IV(STEP) TEMP1 = IV(STLSTG) TEMP2 = IV(W) C C *** SET TEMP1 = HESSIAN * STEP FOR _USE_ IN GRADIENT TESTS *** C HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 410 CALL S7LVM(P, V(TEMP1), V(HC1), V(STEP1)) GO TO 420 410 RMAT1 = IV(RMAT) CALL L7TVM(P, V(TEMP1), V(RMAT1), V(STEP1)) CALL L7VML(P, V(TEMP1), V(RMAT1), V(TEMP1)) C 420 IF (STPMOD .EQ. 1) GO TO 430 S1 = IV(S) CALL S7LVM(PS, V(TEMP2), V(S1), V(STEP1)) CALL V2AXY(PS, V(TEMP1), ONE, V(TEMP2), V(TEMP1)) C C *** SAVE OLD GRADIENT AND COMPUTE NEW ONE *** C 430 IV(NGCALL) = IV(NGCALL) + 1 G01 = IV(W) CALL V7CPY(P, V(G01), G) IV(1) = 2 IV(TOOBIG) = 0 GO TO 999 C C *** INITIALIZATIONS -- G0 = G - G0, ETC. *** C 440 G01 = IV(W) CALL V2AXY(P, V(G01), NEGONE, V(G01), G) STEP1 = IV(STEP) TEMP1 = IV(STLSTG) TEMP2 = IV(W) IF (IV(IRC) .NE. 3) GO TO 470 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C C *** SET TEMP1 = D**-1 * (HESSIAN * STEP + (G(X0) - G(X))) *** C K = TEMP1 L = G01 DO 450 I = 1, P V(K) = (V(K) - V(L)) / D(I) K = K + 1 L = L + 1 450 CONTINUE C C *** DO GRADIENT TESTS *** C IF ( V2NRM(P, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) GO TO 460 IF ( D7TPR(P, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 470 460 V(RADFAC) = V(INCFAC) C C *** COMPUTE Y VECTOR NEEDED FOR UPDATING S *** C 470 CALL V2AXY(PS, Y, NEGONE, Y, G) C C *** DETERMINE SIZING FACTOR V(SIZE) *** C C *** SET TEMP1 = S * STEP *** S1 = IV(S) CALL S7LVM(PS, V(TEMP1), V(S1), V(STEP1)) C T1 = ABS( D7TPR(PS, V(STEP1), V(TEMP1))) T = ABS( D7TPR(PS, V(STEP1), Y)) V(SIZE) = ONE IF (T .LT. T1) V(SIZE) = T / T1 C C *** SET G0 TO WCHMTD CHOICE OF FLETCHER AND AL-BAALI *** C HC1 = IV(HC) IF (HC1 .LE. 0) GO TO 480 CALL S7LVM(PS, V(G01), V(HC1), V(STEP1)) GO TO 490 C 480 RMAT1 = IV(RMAT) CALL L7TVM(PS, V(G01), V(RMAT1), V(STEP1)) CALL L7VML(PS, V(G01), V(RMAT1), V(G01)) C 490 CALL V2AXY(PS, V(G01), ONE, Y, V(G01)) C C *** UPDATE S *** C CALL S7LUP(V(S1), V(COSMIN), PS, V(SIZE), V(STEP1), V(TEMP1), 1 V(TEMP2), V(G01), V(WSCALE), Y) IV(1) = 2 GO TO 110 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 500 IV(1) = 64 GO TO 999 C C C *** CONVERGENCE OBTAINED -- SEE WHETHER TO COMPUTE COVARIANCE *** C 510 IF (IV(RDREQ) .EQ. 0) GO TO 600 IF (IV(FDH) .NE. 0) GO TO 600 IF (IV(CNVCOD) .GE. 7) GO TO 600 IF (IV(REGD) .GT. 0) GO TO 600 IF (IV(COVMAT) .GT. 0) GO TO 600 IF (IABS(IV(COVREQ)) .GE. 3) GO TO 560 IF (IV(RESTOR) .EQ. 0) IV(RESTOR) = 2 GO TO 530 C C *** COMPUTE FINITE-DIFFERENCE HESSIAN FOR COMPUTING COVARIANCE *** C 520 IV(RESTOR) = 0 530 CALL F7HES(D, G, I, IV, LIV, LV, P, V, X) GO TO (540, 550, 580), I 540 IV(NFCOV) = IV(NFCOV) + 1 IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 999 C 550 IV(NGCOV) = IV(NGCOV) + 1 IV(NGCALL) = IV(NGCALL) + 1 IV(NFGCAL) = IV(NFCALL) + IV(NGCOV) IV(1) = 2 GO TO 999 C 560 H1 = IABS(IV(H)) IV(H) = -H1 PP1O2 = P * (P + 1) / 2 RMAT1 = IV(RMAT) IF (RMAT1 .LE. 0) GO TO 570 LMAT1 = IV(LMAT) CALL V7CPY(PP1O2, V(LMAT1), V(RMAT1)) V(RCOND) = ZERO GO TO 590 570 HC1 = IV(HC) IV(FDH) = H1 CALL V7CPY(P*(P+1)/2, V(H1), V(HC1)) C C *** COMPUTE CHOLESKY FACTOR OF FINITE-DIFFERENCE HESSIAN C *** FOR _USE_ IN CALLER*S COVARIANCE CALCULATION... C 580 LMAT1 = IV(LMAT) H1 = IV(FDH) IF (H1 .LE. 0) GO TO 600 IF (IV(CNVCOD) .EQ. 70) GO TO 80 CALL L7SRT(1, P, V(LMAT1), V(H1), I) IV(FDH) = -1 V(RCOND) = ZERO IF (I .NE. 0) GO TO 600 C 590 IV(FDH) = -1 STEP1 = IV(STEP) T = L7SVN(P, V(LMAT1), V(STEP1), V(STEP1)) IF (T .LE. ZERO) GO TO 600 T = T / L7SVX(P, V(LMAT1), V(STEP1), V(STEP1)) IF (T .GT. R7MDC(4)) IV(FDH) = H1 V(RCOND) = T C 600 IV(MODE) = 0 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 GO TO 999 C C *** SPECIAL RETURN FOR MISSING HESSIAN INFORMATION -- BOTH C *** IV(HC) .LE. 0 AND IV(RMAT) .LE. 0 C 610 IV(1) = 1400 C 999 RETURN C C *** LAST LINE OF G7LIT FOLLOWS *** END PyBDSF-1.10.1/src/port3/g7qsb.f000066400000000000000000000043541420247104600156570ustar00rootroot00000000000000 SUBROUTINE G7QSB(B, D, DIHDI, G, IPIV, IPIV1, IPIV2, KA, L, LV, 1 P, P0, PC, STEP, TD, TG, V, W, X, X0) C C *** COMPUTE HEURISTIC BOUNDED NEWTON STEP *** C INTEGER KA, LV, P, P0, PC INTEGER IPIV(P), IPIV1(P), IPIV2(P) REAL B(2,P), D(P), DIHDI(1), G(P), L(1), 1 STEP(P,2), TD(P), TG(P), V(LV), W(P), X0(P), X(P) C DIMENSION DIHDI(P*(P+1)/2), L(P*(P+1)/2) C REAL D7TPR EXTERNAL D7TPR, G7QTS, S7BQN, S7IPR, V7CPY, V7IPR, 1 V7SCP, V7VMP C C *** LOCAL VARIABLES *** C INTEGER K, KB, KINIT, NS, P1, P10 REAL DS0, NRED, PRED, RAD REAL ZERO C C *** V SUBSCRIPTS *** C INTEGER DST0, DSTNRM, GTSTEP, NREDUC, PREDUC, RADIUS C C/6 C DATA DST0/3/, DSTNRM/2/, GTSTEP/4/, NREDUC/6/, PREDUC/7/, C 1 RADIUS/8/ C/7 PARAMETER (DST0=3, DSTNRM=2, GTSTEP=4, NREDUC=6, PREDUC=7, 1 RADIUS=8) C/ DATA ZERO/0.E+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C P1 = PC IF (KA .LT. 0) GO TO 10 NRED = V(NREDUC) DS0 = V(DST0) GO TO 20 10 P0 = 0 KA = -1 C 20 KINIT = -1 IF (P0 .EQ. P1) KINIT = KA CALL V7CPY(P, X, X0) PRED = ZERO RAD = V(RADIUS) KB = -1 V(DSTNRM) = ZERO IF (P1 .GT. 0) GO TO 30 NRED = ZERO DS0 = ZERO CALL V7SCP(P, STEP, ZERO) GO TO 60 C 30 CALL V7CPY(P, TD, D) CALL V7IPR(P, IPIV, TD) CALL V7VMP(P, TG, G, D, -1) CALL V7IPR(P, IPIV, TG) 40 K = KINIT KINIT = -1 V(RADIUS) = RAD - V(DSTNRM) CALL G7QTS(TD, TG, DIHDI, K, L, P1, STEP, V, W) P0 = P1 IF (KA .GE. 0) GO TO 50 NRED = V(NREDUC) DS0 = V(DST0) C 50 KA = K V(RADIUS) = RAD P10 = P1 CALL S7BQN(B, D, STEP(1,2), IPIV, IPIV1, IPIV2, KB, L, LV, 1 NS, P, P1, STEP, TD, TG, V, W, X, X0) IF (NS .GT. 0) CALL S7IPR(P10, IPIV1, DIHDI) PRED = PRED + V(PREDUC) IF (NS .NE. 0) P0 = 0 IF (KB .LE. 0) GO TO 40 C 60 V(DST0) = DS0 V(NREDUC) = NRED V(PREDUC) = PRED V(GTSTEP) = D7TPR(P, G, STEP) C 999 RETURN C *** LAST LINE OF G7QSB FOLLOWS *** END PyBDSF-1.10.1/src/port3/g7qts.f000066400000000000000000000525351420247104600157050ustar00rootroot00000000000000 SUBROUTINE G7QTS(D, DIG, DIHDI, KA, L, P, STEP, V, W) C C *** COMPUTE GOLDFELD-QUANDT-TROTTER STEP BY MORE-HEBDEN TECHNIQUE *** C *** (NL2SOL VERSION 2.2), MODIFIED A LA MORE AND SORENSEN *** C C *** PARAMETER DECLARATIONS *** C INTEGER KA, P REAL D(P), DIG(P), DIHDI(1), L(1), V(21), STEP(P), 1 W(1) C DIMENSION DIHDI(P*(P+1)/2), L(P*(P+1)/2), W(4*P+7) C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** PURPOSE *** C C GIVEN THE (COMPACTLY STORED) LOWER TRIANGLE OF A SCALED C HESSIAN (APPROXIMATION) AND A NONZERO SCALED GRADIENT VECTOR, C THIS SUBROUTINE COMPUTES A GOLDFELD-QUANDT-TROTTER STEP OF C APPROXIMATE LENGTH V(RADIUS) BY THE MORE-HEBDEN TECHNIQUE. IN C OTHER WORDS, STEP IS COMPUTED TO (APPROXIMATELY) MINIMIZE C PSI(STEP) = (G**T)*STEP + 0.5*(STEP**T)*H*STEP SUCH THAT THE C 2-NORM OF D*STEP IS AT MOST (APPROXIMATELY) V(RADIUS), WHERE C G IS THE GRADIENT, H IS THE HESSIAN, AND D IS A DIAGONAL C SCALE MATRIX WHOSE DIAGONAL IS STORED IN THE PARAMETER D. C (G7QTS ASSUMES DIG = D**-1 * G AND DIHDI = D**-1 * H * D**-1.) C C *** PARAMETER DESCRIPTION *** C C D (IN) = THE SCALE VECTOR, I.E. THE DIAGONAL OF THE SCALE C MATRIX D MENTIONED ABOVE UNDER PURPOSE. C DIG (IN) = THE SCALED GRADIENT VECTOR, D**-1 * G. IF G = 0, THEN C STEP = 0 AND V(STPPAR) = 0 ARE RETURNED. C DIHDI (IN) = LOWER TRIANGLE OF THE SCALED HESSIAN (APPROXIMATION), C I.E., D**-1 * H * D**-1, STORED COMPACTLY BY ROWS., I.E., C IN THE ORDER (1,1), (2,1), (2,2), (3,1), (3,2), ETC. C KA (I/O) = THE NUMBER OF HEBDEN ITERATIONS (SO FAR) TAKEN TO DETER- C MINE STEP. KA .LT. 0 ON INPUT MEANS THIS IS THE FIRST C ATTEMPT TO DETERMINE STEP (FOR THE PRESENT DIG AND DIHDI) C -- KA IS INITIALIZED TO 0 IN THIS CASE. OUTPUT WITH C KA = 0 (OR V(STPPAR) = 0) MEANS STEP = -(H**-1)*G. C L (I/O) = WORKSPACE OF LENGTH P*(P+1)/2 FOR CHOLESKY FACTORS. C P (IN) = NUMBER OF PARAMETERS -- THE HESSIAN IS A P X P MATRIX. C STEP (I/O) = THE STEP COMPUTED. C V (I/O) CONTAINS VARIOUS CONSTANTS AND VARIABLES DESCRIBED BELOW. C W (I/O) = WORKSPACE OF LENGTH 4*P + 6. C C *** ENTRIES IN V *** C C V(DGNORM) (I/O) = 2-NORM OF (D**-1)*G. C V(DSTNRM) (OUTPUT) = 2-NORM OF D*STEP. C V(DST0) (I/O) = 2-NORM OF D*(H**-1)*G (FOR POS. DEF. H ONLY), OR C OVERESTIMATE OF SMALLEST EIGENVALUE OF (D**-1)*H*(D**-1). C V(EPSLON) (IN) = MAX. REL. ERROR ALLOWED FOR PSI(STEP). FOR THE C STEP RETURNED, PSI(STEP) WILL EXCEED ITS OPTIMAL VALUE C BY LESS THAN -V(EPSLON)*PSI(STEP). SUGGESTED VALUE = 0.1. C V(GTSTEP) (OUT) = INNER PRODUCT BETWEEN G AND STEP. C V(NREDUC) (OUT) = PSI(-(H**-1)*G) = PSI(NEWTON STEP) (FOR POS. DEF. C H ONLY -- V(NREDUC) IS SET TO ZERO OTHERWISE). C V(PHMNFC) (IN) = TOL. (TOGETHER WITH V(PHMXFC)) FOR ACCEPTING STEP C (MORE*S SIGMA). THE ERROR V(DSTNRM) - V(RADIUS) MUST LIE C BETWEEN V(PHMNFC)*V(RADIUS) AND V(PHMXFC)*V(RADIUS). C V(PHMXFC) (IN) (SEE V(PHMNFC).) C SUGGESTED VALUES -- V(PHMNFC) = -0.25, V(PHMXFC) = 0.5. C V(PREDUC) (OUT) = PSI(STEP) = PREDICTED OBJ. FUNC. REDUCTION FOR STEP. C V(RADIUS) (IN) = RADIUS OF CURRENT (SCALED) TRUST REGION. C V(RAD0) (I/O) = VALUE OF V(RADIUS) FROM PREVIOUS CALL. C V(STPPAR) (I/O) IS NORMALLY THE MARQUARDT PARAMETER, I.E. THE ALPHA C DESCRIBED BELOW UNDER ALGORITHM NOTES. IF H + ALPHA*D**2 C (SEE ALGORITHM NOTES) IS (NEARLY) SINGULAR, HOWEVER, C THEN V(STPPAR) = -ALPHA. C C *** USAGE NOTES *** C C IF IT IS DESIRED TO RECOMPUTE STEP USING A DIFFERENT VALUE OF C V(RADIUS), THEN THIS ROUTINE MAY BE RESTARTED BY CALLING IT C WITH ALL PARAMETERS UNCHANGED EXCEPT V(RADIUS). (THIS EXPLAINS C WHY STEP AND W ARE LISTED AS I/O). ON AN INITIAL CALL (ONE WITH C KA .LT. 0), STEP AND W NEED NOT BE INITIALIZED AND ONLY COMPO- C NENTS V(EPSLON), V(STPPAR), V(PHMNFC), V(PHMXFC), V(RADIUS), AND C V(RAD0) OF V MUST BE INITIALIZED. C C *** ALGORITHM NOTES *** C C THE DESIRED G-Q-T STEP (REF. 2, 3, 4, 6) SATISFIES C (H + ALPHA*D**2)*STEP = -G FOR SOME NONNEGATIVE ALPHA SUCH THAT C H + ALPHA*D**2 IS POSITIVE SEMIDEFINITE. ALPHA AND STEP ARE C COMPUTED BY A SCHEME ANALOGOUS TO THE ONE DESCRIBED IN REF. 5. C ESTIMATES OF THE SMALLEST AND LARGEST EIGENVALUES OF THE HESSIAN C ARE OBTAINED FROM THE GERSCHGORIN CIRCLE THEOREM ENHANCED BY A C SIMPLE FORM OF THE SCALING DESCRIBED IN REF. 7. CASES IN WHICH C H + ALPHA*D**2 IS NEARLY (OR EXACTLY) SINGULAR ARE HANDLED BY C THE TECHNIQUE DISCUSSED IN REF. 2. IN THESE CASES, A STEP OF C (EXACT) LENGTH V(RADIUS) IS RETURNED FOR WHICH PSI(STEP) EXCEEDS C ITS OPTIMAL VALUE BY LESS THAN -V(EPSLON)*PSI(STEP). THE TEST C SUGGESTED IN REF. 6 FOR DETECTING THE SPECIAL CASE IS PERFORMED C ONCE TWO MATRIX FACTORIZATIONS HAVE BEEN DONE -- DOING SO SOONER C SEEMS TO DEGRADE THE PERFORMANCE OF OPTIMIZATION ROUTINES THAT C CALL THIS ROUTINE. C C *** FUNCTIONS AND SUBROUTINES CALLED *** C C D7TPR - RETURNS INNER PRODUCT OF TWO VECTORS. C L7ITV - APPLIES INVERSE-TRANSPOSE OF COMPACT LOWER TRIANG. MATRIX. C L7IVM - APPLIES INVERSE OF COMPACT LOWER TRIANG. MATRIX. C L7SRT - FINDS CHOLESKY FACTOR (OF COMPACTLY STORED LOWER TRIANG.). C L7SVN - RETURNS APPROX. TO MIN. SING. VALUE OF LOWER TRIANG. MATRIX. C R7MDC - RETURNS MACHINE-DEPENDENT CONSTANTS. C V2NRM - RETURNS 2-NORM OF A VECTOR. C C *** REFERENCES *** C C 1. DENNIS, J.E., GAY, D.M., AND WELSCH, R.E. (1981), AN ADAPTIVE C NONLINEAR LEAST-SQUARES ALGORITHM, ACM TRANS. MATH. C SOFTWARE, VOL. 7, NO. 3. C 2. GAY, D.M. (1981), COMPUTING OPTIMAL LOCALLY CONSTRAINED STEPS, C SIAM J. SCI. STATIST. COMPUTING, VOL. 2, NO. 2, PP. C 186-197. C 3. GOLDFELD, S.M., QUANDT, R.E., AND TROTTER, H.F. (1966), C MAXIMIZATION BY QUADRATIC HILL-CLIMBING, ECONOMETRICA 34, C PP. 541-551. C 4. HEBDEN, M.D. (1973), AN ALGORITHM FOR MINIMIZATION USING EXACT C SECOND DERIVATIVES, REPORT T.P. 515, THEORETICAL PHYSICS C DIV., A.E.R.E. HARWELL, OXON., ENGLAND. C 5. MORE, J.J. (1978), THE LEVENBERG-MARQUARDT ALGORITHM, IMPLEMEN- C TATION AND THEORY, PP.105-116 OF SPRINGER LECTURE NOTES C IN MATHEMATICS NO. 630, EDITED BY G.A. WATSON, SPRINGER- C VERLAG, BERLIN AND NEW YORK. C 6. MORE, J.J., AND SORENSEN, D.C. (1981), COMPUTING A TRUST REGION C STEP, TECHNICAL REPORT ANL-81-83, ARGONNE NATIONAL LAB. C 7. VARGA, R.S. (1965), MINIMAL GERSCHGORIN SETS, PACIFIC J. MATH. 15, C PP. 719-729. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, AND C MCS-7906671. C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C LOGICAL RESTRT INTEGER DGGDMX, DIAG, DIAG0, DSTSAV, EMAX, EMIN, I, IM1, INC, IRC, 1 J, K, KALIM, KAMIN, K1, LK0, PHIPIN, Q, Q0, UK0, X REAL ALPHAK, AKI, AKK, DELTA, DST, EPS, GTSTA, LK, 1 OLDPHI, PHI, PHIMAX, PHIMIN, PSIFAC, RAD, RADSQ, 2 ROOT, SI, SK, SW, T, TWOPSI, T1, T2, UK, WI C C *** CONSTANTS *** REAL BIG, DGXFAC, EPSFAC, FOUR, HALF, KAPPA, NEGONE, 1 ONE, P001, SIX, THREE, TWO, ZERO C C *** INTRINSIC FUNCTIONS *** C/+ REAL SQRT C/ C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C REAL D7TPR, L7SVN, R7MDC, V2NRM EXTERNAL D7TPR, L7ITV, L7IVM, L7SRT, L7SVN, R7MDC, V2NRM C C *** SUBSCRIPTS FOR V *** C INTEGER DGNORM, DSTNRM, DST0, EPSLON, GTSTEP, STPPAR, NREDUC, 1 PHMNFC, PHMXFC, PREDUC, RADIUS, RAD0 C/6 C DATA DGNORM/1/, DSTNRM/2/, DST0/3/, EPSLON/19/, GTSTEP/4/, C 1 NREDUC/6/, PHMNFC/20/, PHMXFC/21/, PREDUC/7/, RADIUS/8/, C 2 RAD0/9/, STPPAR/5/ C/7 PARAMETER (DGNORM=1, DSTNRM=2, DST0=3, EPSLON=19, GTSTEP=4, 1 NREDUC=6, PHMNFC=20, PHMXFC=21, PREDUC=7, RADIUS=8, 2 RAD0=9, STPPAR=5) C/ C C/6 C DATA EPSFAC/50.0E+0/, FOUR/4.0E+0/, HALF/0.5E+0/, C 1 KAPPA/2.0E+0/, NEGONE/-1.0E+0/, ONE/1.0E+0/, P001/1.0E-3/, C 2 SIX/6.0E+0/, THREE/3.0E+0/, TWO/2.0E+0/, ZERO/0.0E+0/ C/7 PARAMETER (EPSFAC=50.0E+0, FOUR=4.0E+0, HALF=0.5E+0, 1 KAPPA=2.0E+0, NEGONE=-1.0E+0, ONE=1.0E+0, P001=1.0E-3, 2 SIX=6.0E+0, THREE=3.0E+0, TWO=2.0E+0, ZERO=0.0E+0) SAVE DGXFAC C/ DATA BIG/0.E+0/, DGXFAC/0.E+0/ C C *** BODY *** C IF (BIG .LE. ZERO) BIG = R7MDC(6) C C *** STORE LARGEST ABS. ENTRY IN (D**-1)*H*(D**-1) AT W(DGGDMX). DGGDMX = P + 1 C *** STORE GERSCHGORIN OVER- AND UNDERESTIMATES OF THE LARGEST C *** AND SMALLEST EIGENVALUES OF (D**-1)*H*(D**-1) AT W(EMAX) C *** AND W(EMIN) RESPECTIVELY. EMAX = DGGDMX + 1 EMIN = EMAX + 1 C *** FOR _USE_ IN RECOMPUTING STEP, THE FINAL VALUES OF LK, UK, DST, C *** AND THE INVERSE DERIVATIVE OF MORE*S PHI AT 0 (FOR POS. DEF. C *** H) ARE STORED IN W(LK0), W(UK0), W(DSTSAV), AND W(PHIPIN) C *** RESPECTIVELY. LK0 = EMIN + 1 PHIPIN = LK0 + 1 UK0 = PHIPIN + 1 DSTSAV = UK0 + 1 C *** STORE DIAG OF (D**-1)*H*(D**-1) IN W(DIAG),...,W(DIAG0+P). DIAG0 = DSTSAV DIAG = DIAG0 + 1 C *** STORE -D*STEP IN W(Q),...,W(Q0+P). Q0 = DIAG0 + P Q = Q0 + 1 C *** ALLOCATE STORAGE FOR SCRATCH VECTOR X *** X = Q + P RAD = V(RADIUS) RADSQ = RAD**2 C *** PHITOL = MAX. ERROR ALLOWED IN DST = V(DSTNRM) = 2-NORM OF C *** D*STEP. PHIMAX = V(PHMXFC) * RAD PHIMIN = V(PHMNFC) * RAD PSIFAC = BIG T1 = TWO * V(EPSLON) / (THREE * (FOUR * (V(PHMNFC) + ONE) * 1 (KAPPA + ONE) + KAPPA + TWO) * RAD) IF (T1 .LT. BIG*AMIN1(RAD,ONE)) PSIFAC = T1 / RAD C *** OLDPHI IS USED TO DETECT LIMITS OF NUMERICAL ACCURACY. IF C *** WE RECOMPUTE STEP AND IT DOES NOT CHANGE, THEN WE ACCEPT IT. OLDPHI = ZERO EPS = V(EPSLON) IRC = 0 RESTRT = .FALSE. KALIM = KA + 50 C C *** START OR RESTART, DEPENDING ON KA *** C IF (KA .GE. 0) GO TO 290 C C *** FRESH START *** C K = 0 UK = NEGONE KA = 0 KALIM = 50 V(DGNORM) = V2NRM(P, DIG) V(NREDUC) = ZERO V(DST0) = ZERO KAMIN = 3 IF (V(DGNORM) .EQ. ZERO) KAMIN = 0 C C *** STORE DIAG(DIHDI) IN W(DIAG0+1),...,W(DIAG0+P) *** C J = 0 DO 10 I = 1, P J = J + I K1 = DIAG0 + I W(K1) = DIHDI(J) 10 CONTINUE C C *** DETERMINE W(DGGDMX), THE LARGEST ELEMENT OF DIHDI *** C T1 = ZERO J = P * (P + 1) / 2 DO 20 I = 1, J T = ABS(DIHDI(I)) IF (T1 .LT. T) T1 = T 20 CONTINUE W(DGGDMX) = T1 C C *** TRY ALPHA = 0 *** C 30 CALL L7SRT(1, P, L, DIHDI, IRC) IF (IRC .EQ. 0) GO TO 50 C *** INDEF. H -- UNDERESTIMATE SMALLEST EIGENVALUE, _USE_ THIS C *** ESTIMATE TO INITIALIZE LOWER BOUND LK ON ALPHA. J = IRC*(IRC+1)/2 T = L(J) L(J) = ONE DO 40 I = 1, IRC 40 W(I) = ZERO W(IRC) = ONE CALL L7ITV(IRC, W, L, W) T1 = V2NRM(IRC, W) LK = -T / T1 / T1 V(DST0) = -LK IF (RESTRT) GO TO 210 GO TO 70 C C *** POSITIVE DEFINITE H -- COMPUTE UNMODIFIED NEWTON STEP. *** 50 LK = ZERO T = L7SVN(P, L, W(Q), W(Q)) IF (T .GE. ONE) GO TO 60 IF (V(DGNORM) .GE. T*T*BIG) GO TO 70 60 CALL L7IVM(P, W(Q), L, DIG) GTSTA = D7TPR(P, W(Q), W(Q)) V(NREDUC) = HALF * GTSTA CALL L7ITV(P, W(Q), L, W(Q)) DST = V2NRM(P, W(Q)) V(DST0) = DST PHI = DST - RAD IF (PHI .LE. PHIMAX) GO TO 260 IF (RESTRT) GO TO 210 C C *** PREPARE TO COMPUTE GERSCHGORIN ESTIMATES OF LARGEST (AND C *** SMALLEST) EIGENVALUES. *** C 70 K = 0 DO 100 I = 1, P WI = ZERO IF (I .EQ. 1) GO TO 90 IM1 = I - 1 DO 80 J = 1, IM1 K = K + 1 T = ABS(DIHDI(K)) WI = WI + T W(J) = W(J) + T 80 CONTINUE 90 W(I) = WI K = K + 1 100 CONTINUE C C *** (UNDER-)ESTIMATE SMALLEST EIGENVALUE OF (D**-1)*H*(D**-1) *** C K = 1 T1 = W(DIAG) - W(1) IF (P .LE. 1) GO TO 120 DO 110 I = 2, P J = DIAG0 + I T = W(J) - W(I) IF (T .GE. T1) GO TO 110 T1 = T K = I 110 CONTINUE C 120 SK = W(K) J = DIAG0 + K AKK = W(J) K1 = K*(K-1)/2 + 1 INC = 1 T = ZERO DO 150 I = 1, P IF (I .EQ. K) GO TO 130 AKI = ABS(DIHDI(K1)) SI = W(I) J = DIAG0 + I T1 = HALF * (AKK - W(J) + SI - AKI) T1 = T1 + SQRT(T1*T1 + SK*AKI) IF (T .LT. T1) T = T1 IF (I .LT. K) GO TO 140 130 INC = I 140 K1 = K1 + INC 150 CONTINUE C W(EMIN) = AKK - T UK = V(DGNORM)/RAD - W(EMIN) IF (V(DGNORM) .EQ. ZERO) UK = UK + P001 + P001*UK IF (UK .LE. ZERO) UK = P001 C C *** COMPUTE GERSCHGORIN (OVER-)ESTIMATE OF LARGEST EIGENVALUE *** C K = 1 T1 = W(DIAG) + W(1) IF (P .LE. 1) GO TO 170 DO 160 I = 2, P J = DIAG0 + I T = W(J) + W(I) IF (T .LE. T1) GO TO 160 T1 = T K = I 160 CONTINUE C 170 SK = W(K) J = DIAG0 + K AKK = W(J) K1 = K*(K-1)/2 + 1 INC = 1 T = ZERO DO 200 I = 1, P IF (I .EQ. K) GO TO 180 AKI = ABS(DIHDI(K1)) SI = W(I) J = DIAG0 + I T1 = HALF * (W(J) + SI - AKI - AKK) T1 = T1 + SQRT(T1*T1 + SK*AKI) IF (T .LT. T1) T = T1 IF (I .LT. K) GO TO 190 180 INC = I 190 K1 = K1 + INC 200 CONTINUE C W(EMAX) = AKK + T LK = AMAX1(LK, V(DGNORM)/RAD - W(EMAX)) C C *** ALPHAK = CURRENT VALUE OF ALPHA (SEE ALG. NOTES ABOVE). WE C *** _USE_ MORE*S SCHEME FOR INITIALIZING IT. ALPHAK = ABS(V(STPPAR)) * V(RAD0)/RAD ALPHAK = AMIN1(UK, AMAX1(ALPHAK, LK)) C IF (IRC .NE. 0) GO TO 210 C C *** COMPUTE L0 FOR POSITIVE DEFINITE H *** C CALL L7IVM(P, W, L, W(Q)) T = V2NRM(P, W) W(PHIPIN) = RAD / T / T LK = AMAX1(LK, PHI*W(PHIPIN)) C C *** SAFEGUARD ALPHAK AND ADD ALPHAK*I TO (D**-1)*H*(D**-1) *** C 210 KA = KA + 1 IF (-V(DST0) .GE. ALPHAK .OR. ALPHAK .LT. LK .OR. ALPHAK .GE. UK) 1 ALPHAK = UK * AMAX1(P001, SQRT(LK/UK)) IF (ALPHAK .LE. ZERO) ALPHAK = HALF * UK IF (ALPHAK .LE. ZERO) ALPHAK = UK K = 0 DO 220 I = 1, P K = K + I J = DIAG0 + I DIHDI(K) = W(J) + ALPHAK 220 CONTINUE C C *** TRY COMPUTING CHOLESKY DECOMPOSITION *** C CALL L7SRT(1, P, L, DIHDI, IRC) IF (IRC .EQ. 0) GO TO 240 C C *** (D**-1)*H*(D**-1) + ALPHAK*I IS INDEFINITE -- OVERESTIMATE C *** SMALLEST EIGENVALUE FOR _USE_ IN UPDATING LK *** C J = (IRC*(IRC+1))/2 T = L(J) L(J) = ONE DO 230 I = 1, IRC 230 W(I) = ZERO W(IRC) = ONE CALL L7ITV(IRC, W, L, W) T1 = V2NRM(IRC, W) LK = ALPHAK - T/T1/T1 V(DST0) = -LK IF (UK .LT. LK) UK = LK IF (ALPHAK .LT. LK) GO TO 210 C C *** NASTY CASE -- EXACT GERSCHGORIN BOUNDS. FUDGE LK, UK... C T = P001 * ALPHAK IF (T .LE. ZERO) T = P001 LK = ALPHAK + T IF (UK .LE. LK) UK = LK + T GO TO 210 C C *** ALPHAK MAKES (D**-1)*H*(D**-1) POSITIVE DEFINITE. C *** COMPUTE Q = -D*STEP, CHECK FOR CONVERGENCE. *** C 240 CALL L7IVM(P, W(Q), L, DIG) GTSTA = D7TPR(P, W(Q), W(Q)) CALL L7ITV(P, W(Q), L, W(Q)) DST = V2NRM(P, W(Q)) PHI = DST - RAD IF (PHI .LE. PHIMAX .AND. PHI .GE. PHIMIN) GO TO 270 IF (PHI .EQ. OLDPHI) GO TO 270 OLDPHI = PHI IF (PHI .LT. ZERO) GO TO 330 C C *** UNACCEPTABLE ALPHAK -- UPDATE LK, UK, ALPHAK *** C 250 IF (KA .GE. KALIM) GO TO 270 C *** THE FOLLOWING AMIN1 IS NECESSARY BECAUSE OF RESTARTS *** IF (PHI .LT. ZERO) UK = AMIN1(UK, ALPHAK) C *** KAMIN = 0 ONLY IFF THE GRADIENT VANISHES *** IF (KAMIN .EQ. 0) GO TO 210 CALL L7IVM(P, W, L, W(Q)) C *** THE FOLLOWING, COMMENTED CALCULATION OF ALPHAK IS SOMETIMES C *** SAFER BUT WORSE IN PERFORMANCE... C T1 = DST / V2NRM(P, W) C ALPHAK = ALPHAK + T1 * (PHI/RAD) * T1 T1 = V2NRM(P, W) ALPHAK = ALPHAK + (PHI/T1) * (DST/T1) * (DST/RAD) LK = AMAX1(LK, ALPHAK) ALPHAK = LK GO TO 210 C C *** ACCEPTABLE STEP ON FIRST TRY *** C 260 ALPHAK = ZERO C C *** SUCCESSFUL STEP IN GENERAL. COMPUTE STEP = -(D**-1)*Q *** C 270 DO 280 I = 1, P J = Q0 + I STEP(I) = -W(J)/D(I) 280 CONTINUE V(GTSTEP) = -GTSTA V(PREDUC) = HALF * ( ABS(ALPHAK)*DST*DST + GTSTA) GO TO 410 C C C *** RESTART WITH NEW RADIUS *** C 290 IF (V(DST0) .LE. ZERO .OR. V(DST0) - RAD .GT. PHIMAX) GO TO 310 C C *** PREPARE TO RETURN NEWTON STEP *** C RESTRT = .TRUE. KA = KA + 1 K = 0 DO 300 I = 1, P K = K + I J = DIAG0 + I DIHDI(K) = W(J) 300 CONTINUE UK = NEGONE GO TO 30 C 310 KAMIN = KA + 3 IF (V(DGNORM) .EQ. ZERO) KAMIN = 0 IF (KA .EQ. 0) GO TO 50 C DST = W(DSTSAV) ALPHAK = ABS(V(STPPAR)) PHI = DST - RAD T = V(DGNORM)/RAD UK = T - W(EMIN) IF (V(DGNORM) .EQ. ZERO) UK = UK + P001 + P001*UK IF (UK .LE. ZERO) UK = P001 IF (RAD .GT. V(RAD0)) GO TO 320 C C *** SMALLER RADIUS *** LK = ZERO IF (ALPHAK .GT. ZERO) LK = W(LK0) LK = AMAX1(LK, T - W(EMAX)) IF (V(DST0) .GT. ZERO) LK = AMAX1(LK, (V(DST0)-RAD)*W(PHIPIN)) GO TO 250 C C *** BIGGER RADIUS *** 320 IF (ALPHAK .GT. ZERO) UK = AMIN1(UK, W(UK0)) LK = AMAX1(ZERO, -V(DST0), T - W(EMAX)) IF (V(DST0) .GT. ZERO) LK = AMAX1(LK, (V(DST0)-RAD)*W(PHIPIN)) GO TO 250 C C *** DECIDE WHETHER TO CHECK FOR SPECIAL CASE... IN PRACTICE (FROM C *** THE STANDPOINT OF THE CALLING OPTIMIZATION CODE) IT SEEMS BEST C *** NOT TO CHECK UNTIL A FEW ITERATIONS HAVE FAILED -- HENCE THE C *** TEST ON KAMIN BELOW. C 330 DELTA = ALPHAK + AMIN1(ZERO, V(DST0)) TWOPSI = ALPHAK*DST*DST + GTSTA IF (KA .GE. KAMIN) GO TO 340 C *** IF THE TEST IN REF. 2 IS SATISFIED, FALL THROUGH TO HANDLE C *** THE SPECIAL CASE (AS SOON AS THE MORE-SORENSEN TEST DETECTS C *** IT). IF (PSIFAC .GE. BIG) GO TO 340 IF (DELTA .GE. PSIFAC*TWOPSI) GO TO 370 C C *** CHECK FOR THE SPECIAL CASE OF H + ALPHA*D**2 (NEARLY) C *** SINGULAR. _USE_ ONE STEP OF INVERSE POWER METHOD WITH START C *** FROM L7SVN TO OBTAIN APPROXIMATE EIGENVECTOR CORRESPONDING C *** TO SMALLEST EIGENVALUE OF (D**-1)*H*(D**-1). L7SVN RETURNS C *** X AND W WITH L*W = X. C 340 T = L7SVN(P, L, W(X), W) C C *** NORMALIZE W *** DO 350 I = 1, P 350 W(I) = T*W(I) C *** COMPLETE CURRENT INV. POWER ITER. -- REPLACE W BY (L**-T)*W. CALL L7ITV(P, W, L, W) T2 = ONE/ V2NRM(P, W) DO 360 I = 1, P 360 W(I) = T2*W(I) T = T2 * T C C *** NOW W IS THE DESIRED APPROXIMATE (UNIT) EIGENVECTOR AND C *** T*X = ((D**-1)*H*(D**-1) + ALPHAK*I)*W. C SW = D7TPR(P, W(Q), W) T1 = (RAD + DST) * (RAD - DST) ROOT = SQRT(SW*SW + T1) IF (SW .LT. ZERO) ROOT = -ROOT SI = T1 / (SW + ROOT) C C *** THE ACTUAL TEST FOR THE SPECIAL CASE... C IF ((T2*SI)**2 .LE. EPS*(DST**2 + ALPHAK*RADSQ)) GO TO 380 C C *** UPDATE UPPER BOUND ON SMALLEST EIGENVALUE (WHEN NOT POSITIVE) C *** (AS RECOMMENDED BY MORE AND SORENSEN) AND CONTINUE... C IF (V(DST0) .LE. ZERO) V(DST0) = AMIN1(V(DST0), T2**2 - ALPHAK) LK = AMAX1(LK, -V(DST0)) C C *** CHECK WHETHER WE CAN HOPE TO DETECT THE SPECIAL CASE IN C *** THE AVAILABLE ARITHMETIC. ACCEPT STEP AS IT IS IF NOT. C C *** IF NOT YET AVAILABLE, OBTAIN MACHINE DEPENDENT VALUE DGXFAC. 370 IF (DGXFAC .EQ. ZERO) DGXFAC = EPSFAC * R7MDC(3) C IF (DELTA .GT. DGXFAC*W(DGGDMX)) GO TO 250 GO TO 270 C C *** SPECIAL CASE DETECTED... NEGATE ALPHAK TO INDICATE SPECIAL CASE C 380 ALPHAK = -ALPHAK V(PREDUC) = HALF * TWOPSI C C *** ACCEPT CURRENT STEP IF ADDING SI*W WOULD LEAD TO A C *** FURTHER RELATIVE REDUCTION IN PSI OF LESS THAN V(EPSLON)/3. C T1 = ZERO T = SI*(ALPHAK*SW - HALF*SI*(ALPHAK + T* D7TPR(P,W(X),W))) IF (T .LT. EPS*TWOPSI/SIX) GO TO 390 V(PREDUC) = V(PREDUC) + T DST = RAD T1 = -SI 390 DO 400 I = 1, P J = Q0 + I W(J) = T1*W(I) - W(J) STEP(I) = W(J) / D(I) 400 CONTINUE V(GTSTEP) = D7TPR(P, DIG, W(Q)) C C *** SAVE VALUES FOR _USE_ IN A POSSIBLE RESTART *** C 410 V(DSTNRM) = DST V(STPPAR) = ALPHAK W(LK0) = LK W(UK0) = UK V(RAD0) = RAD W(DSTSAV) = DST C C *** RESTORE DIAGONAL OF DIHDI *** C J = 0 DO 420 I = 1, P J = J + I K = DIAG0 + I DIHDI(J) = W(K) 420 CONTINUE C 999 RETURN C C *** LAST CARD OF G7QTS FOLLOWS *** END PyBDSF-1.10.1/src/port3/h2rfa.f000066400000000000000000000006201420247104600156260ustar00rootroot00000000000000 SUBROUTINE H2RFA(N, A, B, X, Y, Z) C C *** APPLY 2X2 HOUSEHOLDER REFLECTION DETERMINED BY X, Y, Z TO C *** N-VECTORS A, B *** C INTEGER N REAL A(N), B(N), X, Y, Z INTEGER I REAL T DO 10 I = 1, N T = A(I)*X + B(I)*Y A(I) = A(I) + T B(I) = B(I) + T*Z 10 CONTINUE 999 RETURN C *** LAST LINE OF H2RFA FOLLOWS *** END PyBDSF-1.10.1/src/port3/h2rfg.f000066400000000000000000000014321420247104600156360ustar00rootroot00000000000000 REAL FUNCTION H2RFG(A, B, X, Y, Z) C C *** DETERMINE X, Y, Z SO I + (1,Z)**T * (X,Y) IS A 2X2 C *** HOUSEHOLDER REFLECTION SENDING (A,B)**T INTO (C,0)**T, C *** WHERE C = -SIGN(A)*SQRT(A**2 + B**2) IS THE VALUE H2RFG C *** RETURNS. C REAL A, B, X, Y, Z C REAL A1, B1, C, T C/+ REAL SQRT C/ REAL ZERO DATA ZERO/0.E+0/ C C *** BODY *** C IF (B .NE. ZERO) GO TO 10 X = ZERO Y = ZERO Z = ZERO H2RFG = A GO TO 999 10 T = ABS(A) + ABS(B) A1 = A / T B1 = B / T C = SQRT(A1**2 + B1**2) IF (A1 .GT. ZERO) C = -C A1 = A1 - C Z = B1 / A1 X = A1 / C Y = B1 / C H2RFG = T * C 999 RETURN C *** LAST LINE OF H2RFG FOLLOWS *** END PyBDSF-1.10.1/src/port3/hqr2.f000066400000000000000000000336321420247104600155110ustar00rootroot00000000000000 SUBROUTINE HQR2(NM,N,LOW,IGH,H,WR,WI,Z,IERR) C INTEGER I,J,K,L,M,N,EN,II,JJ,LL,MM,NA,NM,NN, X IGH,ITN,ITS,LOW,MP2,ENM2,IERR REAL H(NM,N),WR(N),WI(N),Z(NM,N) REAL P,Q,R,S,T,W,X,Y,RA,SA,VI,VR,ZZ,NORM,TST1,TST2 COMPLEX Z3 LOGICAL NOTLAS C C THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE HQR2, C NUM. MATH. 16, 181-204(1970) BY PETERS AND WILKINSON. C HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971). C C THIS SUBROUTINE FINDS THE EIGENVALUES AND EIGENVECTORS C OF A REAL UPPER HESSENBERG MATRIX BY THE QR METHOD. THE C EIGENVECTORS OF A REAL GENERAL MATRIX CAN ALSO BE FOUND C IF ELMHES AND ELTRAN OR ORTHES AND ORTRAN HAVE C BEEN USED TO REDUCE THIS GENERAL MATRIX TO HESSENBERG FORM C AND TO ACCUMULATE THE SIMILARITY TRANSFORMATIONS. C C ON INPUT C C NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL C ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM C DIMENSION STATEMENT. C C N IS THE ORDER OF THE MATRIX. C C LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING C SUBROUTINE BALANC. IF BALANC HAS NOT BEEN USED, C SET LOW=1, IGH=N. C C H CONTAINS THE UPPER HESSENBERG MATRIX. C C Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED BY ELTRAN C AFTER THE REDUCTION BY ELMHES, OR BY ORTRAN AFTER THE C REDUCTION BY ORTHES, IF PERFORMED. IF THE EIGENVECTORS C OF THE HESSENBERG MATRIX ARE DESIRED, Z MUST CONTAIN THE C IDENTITY MATRIX. C C ON OUTPUT C C H HAS BEEN DESTROYED. C C WR AND WI CONTAIN THE REAL AND IMAGINARY PARTS, C RESPECTIVELY, OF THE EIGENVALUES. THE EIGENVALUES C ARE UNORDERED EXCEPT THAT COMPLEX CONJUGATE PAIRS C OF VALUES APPEAR CONSECUTIVELY WITH THE EIGENVALUE C HAVING THE POSITIVE IMAGINARY PART FIRST. IF AN C ERROR EXIT IS MADE, THE EIGENVALUES SHOULD BE CORRECT C FOR INDICES IERR+1,...,N. C C Z CONTAINS THE REAL AND IMAGINARY PARTS OF THE EIGENVECTORS. C IF THE I-TH EIGENVALUE IS REAL, THE I-TH COLUMN OF Z C CONTAINS ITS EIGENVECTOR. IF THE I-TH EIGENVALUE IS COMPLEX C WITH POSITIVE IMAGINARY PART, THE I-TH AND (I+1)-TH C COLUMNS OF Z CONTAIN THE REAL AND IMAGINARY PARTS OF ITS C EIGENVECTOR. THE EIGENVECTORS ARE UNNORMALIZED. IF AN C ERROR EXIT IS MADE, NONE OF THE EIGENVECTORS HAS BEEN FOUND. C C IERR IS SET TO C ZERO FOR NORMAL RETURN, C J IF THE LIMIT OF 30*N ITERATIONS IS EXHAUSTED C WHILE THE J-TH EIGENVALUE IS BEING SOUGHT. C C THIS ROUTINE IS FROM EISPACK (VERSION DATED AUGUST 1983), WITH C CALLS ON CDIV REPLACED BY COMPLEX DIVISION. C C ------------------------------------------------------------------ C IERR = 0 NORM = 0.0E0 K = 1 C .......... STORE ROOTS ISOLATED BY BALANC C AND COMPUTE MATRIX NORM .......... DO 50 I = 1, N C DO 40 J = K, N 40 NORM = NORM + ABS(H(I,J)) C K = I IF (I .GE. LOW .AND. I .LE. IGH) GO TO 50 WR(I) = H(I,I) WI(I) = 0.0E0 50 CONTINUE C EN = IGH T = 0.0E0 ITN = 30*N C .......... SEARCH FOR NEXT EIGENVALUES .......... 60 IF (EN .LT. LOW) GO TO 340 ITS = 0 NA = EN - 1 ENM2 = NA - 1 C .......... LOOK FOR SINGLE SMALL SUB-DIAGONAL ELEMENT C FOR L=EN STEP -1 UNTIL LOW DO -- .......... 70 DO 80 LL = LOW, EN L = EN + LOW - LL IF (L .EQ. LOW) GO TO 100 S = ABS(H(L-1,L-1)) + ABS(H(L,L)) IF (S .EQ. 0.0E0) S = NORM TST1 = S TST2 = TST1 + ABS(H(L,L-1)) IF (TST2 .EQ. TST1) GO TO 100 80 CONTINUE C .......... FORM SHIFT .......... 100 X = H(EN,EN) IF (L .EQ. EN) GO TO 270 Y = H(NA,NA) W = H(EN,NA) * H(NA,EN) IF (L .EQ. NA) GO TO 280 IF (ITN .EQ. 0) GO TO 1000 IF (ITS .NE. 10 .AND. ITS .NE. 20) GO TO 130 C .......... FORM EXCEPTIONAL SHIFT .......... T = T + X C DO 120 I = LOW, EN 120 H(I,I) = H(I,I) - X C S = ABS(H(EN,NA)) + ABS(H(NA,ENM2)) X = 0.75E0 * S Y = X W = -0.4375E0 * S * S 130 ITS = ITS + 1 ITN = ITN - 1 C .......... LOOK FOR TWO CONSECUTIVE SMALL C SUB-DIAGONAL ELEMENTS. C FOR M=EN-2 STEP -1 UNTIL L DO -- .......... DO 140 MM = L, ENM2 M = ENM2 + L - MM ZZ = H(M,M) R = X - ZZ S = Y - ZZ P = (R * S - W) / H(M+1,M) + H(M,M+1) Q = H(M+1,M+1) - ZZ - R - S R = H(M+2,M+1) S = ABS(P) + ABS(Q) + ABS(R) P = P / S Q = Q / S R = R / S IF (M .EQ. L) GO TO 150 TST1 = ABS(P)*(ABS(H(M-1,M-1)) + ABS(ZZ) + ABS(H(M+1,M+1))) TST2 = TST1 + ABS(H(M,M-1))*(ABS(Q) + ABS(R)) IF (TST2 .EQ. TST1) GO TO 150 140 CONTINUE C 150 MP2 = M + 2 C DO 160 I = MP2, EN H(I,I-2) = 0.0E0 IF (I .EQ. MP2) GO TO 160 H(I,I-3) = 0.0E0 160 CONTINUE C .......... DOUBLE QR STEP INVOLVING ROWS L TO EN AND C COLUMNS M TO EN .......... DO 260 K = M, NA NOTLAS = K .NE. NA IF (K .EQ. M) GO TO 170 P = H(K,K-1) Q = H(K+1,K-1) R = 0.0E0 IF (NOTLAS) R = H(K+2,K-1) X = ABS(P) + ABS(Q) + ABS(R) IF (X .EQ. 0.0E0) GO TO 260 P = P / X Q = Q / X R = R / X 170 S = SIGN(SQRT(P*P+Q*Q+R*R),P) IF (K .EQ. M) GO TO 180 H(K,K-1) = -S * X GO TO 190 180 IF (L .NE. M) H(K,K-1) = -H(K,K-1) 190 P = P + S X = P / S Y = Q / S ZZ = R / S Q = Q / P R = R / P IF (NOTLAS) GO TO 225 C .......... ROW MODIFICATION .......... DO 200 J = K, N P = H(K,J) + Q * H(K+1,J) H(K,J) = H(K,J) - P * X H(K+1,J) = H(K+1,J) - P * Y 200 CONTINUE C J = MIN0(EN,K+3) C .......... COLUMN MODIFICATION .......... DO 210 I = 1, J P = X * H(I,K) + Y * H(I,K+1) H(I,K) = H(I,K) - P H(I,K+1) = H(I,K+1) - P * Q 210 CONTINUE C .......... ACCUMULATE TRANSFORMATIONS .......... DO 220 I = LOW, IGH P = X * Z(I,K) + Y * Z(I,K+1) Z(I,K) = Z(I,K) - P Z(I,K+1) = Z(I,K+1) - P * Q 220 CONTINUE GO TO 255 225 CONTINUE C .......... ROW MODIFICATION .......... DO 230 J = K, N P = H(K,J) + Q * H(K+1,J) + R * H(K+2,J) H(K,J) = H(K,J) - P * X H(K+1,J) = H(K+1,J) - P * Y H(K+2,J) = H(K+2,J) - P * ZZ 230 CONTINUE C J = MIN0(EN,K+3) C .......... COLUMN MODIFICATION .......... DO 240 I = 1, J P = X * H(I,K) + Y * H(I,K+1) + ZZ * H(I,K+2) H(I,K) = H(I,K) - P H(I,K+1) = H(I,K+1) - P * Q H(I,K+2) = H(I,K+2) - P * R 240 CONTINUE C .......... ACCUMULATE TRANSFORMATIONS .......... DO 250 I = LOW, IGH P = X * Z(I,K) + Y * Z(I,K+1) + ZZ * Z(I,K+2) Z(I,K) = Z(I,K) - P Z(I,K+1) = Z(I,K+1) - P * Q Z(I,K+2) = Z(I,K+2) - P * R 250 CONTINUE 255 CONTINUE C 260 CONTINUE C GO TO 70 C .......... ONE ROOT FOUND .......... 270 H(EN,EN) = X + T WR(EN) = H(EN,EN) WI(EN) = 0.0E0 EN = NA GO TO 60 C .......... TWO ROOTS FOUND .......... 280 P = (Y - X) / 2.0E0 Q = P * P + W ZZ = SQRT(ABS(Q)) H(EN,EN) = X + T X = H(EN,EN) H(NA,NA) = Y + T IF (Q .LT. 0.0E0) GO TO 320 C .......... REAL PAIR .......... ZZ = P + SIGN(ZZ,P) WR(NA) = X + ZZ WR(EN) = WR(NA) IF (ZZ .NE. 0.0E0) WR(EN) = X - W / ZZ WI(NA) = 0.0E0 WI(EN) = 0.0E0 X = H(EN,NA) S = ABS(X) + ABS(ZZ) P = X / S Q = ZZ / S R = SQRT(P*P+Q*Q) P = P / R Q = Q / R C .......... ROW MODIFICATION .......... DO 290 J = NA, N ZZ = H(NA,J) H(NA,J) = Q * ZZ + P * H(EN,J) H(EN,J) = Q * H(EN,J) - P * ZZ 290 CONTINUE C .......... COLUMN MODIFICATION .......... DO 300 I = 1, EN ZZ = H(I,NA) H(I,NA) = Q * ZZ + P * H(I,EN) H(I,EN) = Q * H(I,EN) - P * ZZ 300 CONTINUE C .......... ACCUMULATE TRANSFORMATIONS .......... DO 310 I = LOW, IGH ZZ = Z(I,NA) Z(I,NA) = Q * ZZ + P * Z(I,EN) Z(I,EN) = Q * Z(I,EN) - P * ZZ 310 CONTINUE C GO TO 330 C .......... COMPLEX PAIR .......... 320 WR(NA) = X + P WR(EN) = X + P WI(NA) = ZZ WI(EN) = -ZZ 330 EN = ENM2 GO TO 60 C .......... ALL ROOTS FOUND. BACKSUBSTITUTE TO FIND C VECTORS OF UPPER TRIANGULAR FORM .......... 340 IF (NORM .EQ. 0.0E0) GO TO 1001 C .......... FOR EN=N STEP -1 UNTIL 1 DO -- .......... DO 800 NN = 1, N EN = N + 1 - NN P = WR(EN) Q = WI(EN) NA = EN - 1 IF (Q) 710, 600, 800 C .......... REAL VECTOR .......... 600 M = EN H(EN,EN) = 1.0E0 IF (NA .EQ. 0) GO TO 800 C .......... FOR I=EN-1 STEP -1 UNTIL 1 DO -- .......... DO 700 II = 1, NA I = EN - II W = H(I,I) - P R = 0.0E0 C DO 610 J = M, EN 610 R = R + H(I,J) * H(J,EN) C IF (WI(I) .GE. 0.0E0) GO TO 630 ZZ = W S = R GO TO 700 630 M = I IF (WI(I) .NE. 0.0E0) GO TO 640 T = W IF (T .NE. 0.0E0) GO TO 635 TST1 = NORM T = TST1 632 T = 0.01E0 * T TST2 = NORM + T IF (TST2 .GT. TST1) GO TO 632 635 H(I,EN) = -R / T GO TO 680 C .......... SOLVE REAL EQUATIONS .......... 640 X = H(I,I+1) Y = H(I+1,I) Q = (WR(I) - P) * (WR(I) - P) + WI(I) * WI(I) T = (X * S - ZZ * R) / Q H(I,EN) = T IF (ABS(X) .LE. ABS(ZZ)) GO TO 650 H(I+1,EN) = (-R - W * T) / X GO TO 680 650 H(I+1,EN) = (-S - Y * T) / ZZ C C .......... OVERFLOW CONTROL .......... 680 T = ABS(H(I,EN)) IF (T .EQ. 0.0E0) GO TO 700 TST1 = T TST2 = TST1 + 1.0E0/TST1 IF (TST2 .GT. TST1) GO TO 700 DO 690 J = I, EN H(J,EN) = H(J,EN)/T 690 CONTINUE C 700 CONTINUE C .......... END REAL VECTOR .......... GO TO 800 C .......... COMPLEX VECTOR .......... 710 M = NA C .......... LAST VECTOR COMPONENT CHOSEN IMAGINARY SO THAT C EIGENVECTOR MATRIX IS TRIANGULAR .......... IF (ABS(H(EN,NA)) .LE. ABS(H(NA,EN))) GO TO 720 H(NA,NA) = Q / H(EN,NA) H(NA,EN) = -(H(EN,EN) - P) / H(EN,NA) GO TO 730 720 Z3 = CMPLX(0.0,-H(NA,EN)) / CMPLX(H(NA,NA)-P,Q) H(NA,NA) = REAL(Z3) H(NA,EN) = AIMAG(Z3) 730 H(EN,NA) = 0.0E0 H(EN,EN) = 1.0E0 ENM2 = NA - 1 IF (ENM2 .EQ. 0) GO TO 800 C .......... FOR I=EN-2 STEP -1 UNTIL 1 DO -- .......... DO 795 II = 1, ENM2 I = NA - II W = H(I,I) - P RA = 0.0E0 SA = 0.0E0 C DO 760 J = M, EN RA = RA + H(I,J) * H(J,NA) SA = SA + H(I,J) * H(J,EN) 760 CONTINUE C IF (WI(I) .GE. 0.0E0) GO TO 770 ZZ = W R = RA S = SA GO TO 795 770 M = I IF (WI(I) .NE. 0.0E0) GO TO 780 Z3 = CMPLX(-RA,-SA) / CMPLX(W,Q) H(I,NA) = REAL(Z3) H(I,EN) = AIMAG(Z3) GO TO 790 C .......... SOLVE COMPLEX EQUATIONS .......... 780 X = H(I,I+1) Y = H(I+1,I) VR = (WR(I) - P) * (WR(I) - P) + WI(I) * WI(I) - Q * Q VI = (WR(I) - P) * 2.0E0 * Q IF (VR .NE. 0.0E0 .OR. VI .NE. 0.0E0) GO TO 784 TST1 = NORM * (ABS(W) + ABS(Q) + ABS(X) X + ABS(Y) + ABS(ZZ)) VR = TST1 783 VR = 0.01E0 * VR TST2 = TST1 + VR IF (TST2 .GT. TST1) GO TO 783 784 Z3 = CMPLX(X*R-ZZ*RA+Q*SA,X*S-ZZ*SA-Q*RA) / CMPLX(VR,VI) H(I,NA) = REAL(Z3) H(I,EN) = AIMAG(Z3) IF (ABS(X) .LE. ABS(ZZ) + ABS(Q)) GO TO 785 H(I+1,NA) = (-RA - W * H(I,NA) + Q * H(I,EN)) / X H(I+1,EN) = (-SA - W * H(I,EN) - Q * H(I,NA)) / X GO TO 790 785 Z3 = CMPLX(-R-Y*H(I,NA),-S-Y*H(I,EN)) / CMPLX(ZZ,Q) H(I+1,NA) = REAL(Z3) H(I+1,EN) = AIMAG(Z3) C C .......... OVERFLOW CONTROL .......... 790 T = AMAX1(ABS(H(I,NA)), ABS(H(I,EN))) IF (T .EQ. 0.0E0) GO TO 795 TST1 = T TST2 = TST1 + 1.0E0/TST1 IF (TST2 .GT. TST1) GO TO 795 DO 792 J = I, EN H(J,NA) = H(J,NA)/T H(J,EN) = H(J,EN)/T 792 CONTINUE C 795 CONTINUE C .......... END COMPLEX VECTOR .......... 800 CONTINUE C .......... END BACK SUBSTITUTION. C VECTORS OF ISOLATED ROOTS .......... DO 840 I = 1, N IF (I .GE. LOW .AND. I .LE. IGH) GO TO 840 C DO 820 J = I, N 820 Z(I,J) = H(I,J) C 840 CONTINUE C .......... MULTIPLY BY TRANSFORMATION MATRIX TO GIVE C VECTORS OF ORIGINAL FULL MATRIX. C FOR J=N STEP -1 UNTIL LOW DO -- .......... DO 880 JJ = LOW, N J = N + LOW - JJ M = MIN0(J,IGH) C DO 880 I = LOW, IGH ZZ = 0.0E0 C DO 860 K = LOW, M 860 ZZ = ZZ + Z(I,K) * H(K,J) C Z(I,J) = ZZ 880 CONTINUE C GO TO 1001 C .......... SET ERROR -- ALL EIGENVALUES HAVE NOT C CONVERGED AFTER 30*N ITERATIONS .......... 1000 IERR = EN 1001 RETURN END PyBDSF-1.10.1/src/port3/i0tk00.f000066400000000000000000000020331420247104600156330ustar00rootroot00000000000000 SUBROUTINE I0TK00(LARG,NITEMS,ITYPE) C C INITIALIZES THE STACK TO NITEMS OF TYPE ITYPE C COMMON /CSTAK/DSTAK C DOUBLE PRECISION DSTAK(500) INTEGER ISTAK(1000) LOGICAL LARG,INIT INTEGER ISIZE(5) C EQUIVALENCE (DSTAK(1),ISTAK(1)) EQUIVALENCE (ISTAK(1),LOUT) EQUIVALENCE (ISTAK(2),LNOW) EQUIVALENCE (ISTAK(3),LUSED) EQUIVALENCE (ISTAK(4),LMAX) EQUIVALENCE (ISTAK(5),LBOOK) EQUIVALENCE (ISTAK(6),ISIZE(1)) C DATA INIT/.FALSE./ C LARG = .FALSE. IF (INIT) RETURN C C HERE TO INITIALIZE C INIT = .TRUE. C C SET DATA SIZES APPROPRIATE FOR A STANDARD CONFORMING C FORTRAN SYSTEM USING THE FORTRAN STORAGE UNIT AS THE C MEASURE OF SIZE. C C LOGICAL ISIZE(1) = 1 C INTEGER ISIZE(2) = 1 C REAL ISIZE(3) = 1 C DOUBLE PRECISION ISIZE(4) = 2 C COMPLEX ISIZE(5) = 2 C LBOOK = 10 LNOW = LBOOK LUSED = LBOOK LMAX = MAX0( (NITEMS*ISIZE(ITYPE))/ISIZE(2), 12 ) LOUT = 0 C RETURN C END PyBDSF-1.10.1/src/port3/i0tk01.f000066400000000000000000000056061420247104600156450ustar00rootroot00000000000000 SUBROUTINE I0TK01 C LOGICAL DONE C DATA DONE /.FALSE./ C IF(DONE) RETURN DONE = .TRUE. IUNIT = I1MACH(4) C WRITE( IUNIT, 100) WRITE( IUNIT, 200) WRITE( IUNIT, 300) C RETURN C 100 FORMAT (1H1, *62H YOU HAVE USED, DIRECTLY OR INDIRECTLY, ONE OF THE STORAGE AL-/ *62H LOCATION PROGRAMS IALLOC, DALLOC, STINIT, NIRALL, MTSTAK OR/ *62H SRECAP. THESE ARE BASED ON THE ASSUMPTION THAT ONE -UNIT- OF/ *62H STORAGE IS ALLOCATED TO DATA OF TYPE LOGICAL, INTEGER AND/ *62H REAL AND THAT TWO -UNITS- OF STORAGE ARE ALLOCATED TO DATA OF/ *62H TYPE DOUBLE PRECISION AND COMPLEX. THIS ASSUMPTION PREVENTS/ *62H MOVING PORT TO MANY MINI-COMPUTERS. / *62H / *62H TO OVERCOME THIS DIFFICULTY, THE PACKAGE HAS BEEN REWRITTEN/ *62H WITH NEW NAMES AND SIMILAR CALLING SEQUENCES. CALLS TO THE/ *62H OLD SUBPROGRAMS SHOULD BE REPLACED BY CALLS TO THE NEW/ *62H PACKAGE WHEN CONVENIENT. TO AVOID OBSOLETING OLD PROGRAMS/ *62H THE OLD CALLING SEQUENCES WILL CONTINUE TO BE SUPPORTED. / *62H / *) C 200 FORMAT( *62H THE OLD AND NEW CALLING SEQUENCES ARE AS FOLLOWS- / *62H / *62H FUNCTION OLD NEW / *62H / *62H GET IX = IALLOC(NDATA,ISIZE) IX = ISTKGT(NDATA,ITYPE)/ *62H RELEASE CALL DALLOC(NFRAMES) CALL ISTKRL(NFRAMES) / *62H INITIALIZE CALL STINIT(NDATA,ISIZE) CALL ISTKIN(NDATA,ITYPE)/ *62H MODIFY IX = MTSTAK(NDATA) IX = ISTKMD(NDATA) / *62H STATISTICS CALL SRECAP(IUNIT) - NO EQUIVALENT - / *62H QUERY N = NIRALL(ISIZE) N = ISTKQU(ITYPE) / *62H / *) C 300 FORMAT( *62H IN THE ABOVE ITYPE IS AS FOLLOWS- / *62H / *62H 1 LOGICAL / *62H 2 INTEGER / *62H 3 REAL / *62H 4 DOUBLE PRECISION / *62H 5 COMPLEX / *62H / *62H NOTE ALSO THAT ALLOCATIONS SHOULD NOT BE SPLIT INTO SUBAL-/ *62H LOCATIONS OF DIFFERENT TYPE AS THIS ALSO COMPROMISES POR-/ *62H TABILITY. / *) C END PyBDSF-1.10.1/src/port3/i10wid.f000066400000000000000000000005471420247104600157310ustar00rootroot00000000000000 INTEGER FUNCTION I10WID(IX) INTEGER IX INTEGER IABS, IY, DIGITS C THIS FUNCTION RETURNS THE NUMBER OF DECIMAL C DIGITS REQUIRED TO REPRESENT THE INTEGER, IX. DIGITS = 0 IY = IABS(IX) 1 IF (IY .LT. 1) GOTO 2 DIGITS = DIGITS+1 IY = IY/10 GOTO 1 2 I10WID = DIGITS RETURN END PyBDSF-1.10.1/src/port3/i1mach.f000066400000000000000000000227431420247104600160000ustar00rootroot00000000000000 INTEGER FUNCTION I1MACH(I) INTEGER I C C I1MACH( 1) = THE STANDARD INPUT UNIT. C I1MACH( 2) = THE STANDARD OUTPUT UNIT. C I1MACH( 3) = THE STANDARD PUNCH UNIT. C I1MACH( 4) = THE STANDARD ERROR MESSAGE UNIT. C I1MACH( 5) = THE NUMBER OF BITS PER INTEGER STORAGE UNIT. C I1MACH( 6) = THE NUMBER OF CHARACTERS PER CHARACTER STORAGE UNIT. C INTEGERS HAVE FORM SIGN ( X(S-1)*A**(S-1) + ... + X(1)*A + X(0) ) C I1MACH( 7) = A, THE BASE. C I1MACH( 8) = S, THE NUMBER OF BASE-A DIGITS. C I1MACH( 9) = A**S - 1, THE LARGEST MAGNITUDE. C FLOATS HAVE FORM SIGN (B**E)*( (X(1)/B) + ... + (X(T)/B**T) ) C WHERE EMIN .LE. E .LE. EMAX. C I1MACH(10) = B, THE BASE. C SINGLE-PRECISION C I1MACH(11) = T, THE NUMBER OF BASE-B DIGITS. C I1MACH(12) = EMIN, THE SMALLEST EXPONENT E. C I1MACH(13) = EMAX, THE LARGEST EXPONENT E. C DOUBLE-PRECISION C I1MACH(14) = T, THE NUMBER OF BASE-B DIGITS. C I1MACH(15) = EMIN, THE SMALLEST EXPONENT E. C I1MACH(16) = EMAX, THE LARGEST EXPONENT E. C INTEGER IMACH(16), OUTPUT, SC, SMALL(2) SAVE IMACH, SC REAL RMACH EQUIVALENCE (IMACH(4),OUTPUT), (RMACH,SMALL(1)) INTEGER I3, J, K, T3E(3) DATA T3E(1) / 9777664 / DATA T3E(2) / 5323660 / DATA T3E(3) / 46980 / C THIS VERSION ADAPTS AUTOMATICALLY TO MOST CURRENT MACHINES, C INCLUDING AUTO-DOUBLE COMPILERS. C TO COMPILE ON OLDER MACHINES, ADD A C IN COLUMN 1 C ON THE NEXT LINE DATA SC/0/ C AND REMOVE THE C FROM COLUMN 1 IN ONE OF THE SECTIONS BELOW. C CONSTANTS FOR EVEN OLDER MACHINES CAN BE OBTAINED BY C mail netlib@research.bell-labs.com C send old1mach from blas C PLEASE SEND CORRECTIONS TO dmg OR ehg@bell-labs.com. C C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 43 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 35 / C DATA IMACH( 9) / O377777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 27 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 63 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SC/987/ C C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING C 32-BIT INTEGER ARITHMETIC. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 32 / C DATA IMACH( 6) / 4 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 31 / C DATA IMACH( 9) / 2147483647 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 24 / C DATA IMACH(12) / -127 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 56 / C DATA IMACH(15) / -127 / C DATA IMACH(16) / 127 /, SC/987/ C C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. C C NOTE THAT THE PUNCH UNIT, I1MACH(3), HAS BEEN SET TO 7 C WHICH IS APPROPRIATE FOR THE UNIVAC-FOR SYSTEM. C IF YOU HAVE THE UNIVAC-FTN SYSTEM, SET IT TO 1. C C DATA IMACH( 1) / 5 / C DATA IMACH( 2) / 6 / C DATA IMACH( 3) / 7 / C DATA IMACH( 4) / 6 / C DATA IMACH( 5) / 36 / C DATA IMACH( 6) / 6 / C DATA IMACH( 7) / 2 / C DATA IMACH( 8) / 35 / C DATA IMACH( 9) / O377777777777 / C DATA IMACH(10) / 2 / C DATA IMACH(11) / 27 / C DATA IMACH(12) / -128 / C DATA IMACH(13) / 127 / C DATA IMACH(14) / 60 / C DATA IMACH(15) /-1024 / C DATA IMACH(16) / 1023 /, SC/987/ C IF (SC .NE. 987) THEN * *** CHECK FOR AUTODOUBLE *** SMALL(2) = 0 RMACH = 1E13 IF (SMALL(2) .NE. 0) THEN * *** AUTODOUBLED *** IF ( (SMALL(1) .EQ. 1117925532 * .AND. SMALL(2) .EQ. -448790528) * .OR. (SMALL(2) .EQ. 1117925532 * .AND. SMALL(1) .EQ. -448790528)) THEN * *** IEEE *** IMACH(10) = 2 IMACH(14) = 53 IMACH(15) = -1021 IMACH(16) = 1024 ELSE IF ( SMALL(1) .EQ. -2065213935 * .AND. SMALL(2) .EQ. 10752) THEN * *** VAX WITH D_FLOATING *** IMACH(10) = 2 IMACH(14) = 56 IMACH(15) = -127 IMACH(16) = 127 ELSE IF ( SMALL(1) .EQ. 1267827943 * .AND. SMALL(2) .EQ. 704643072) THEN * *** IBM MAINFRAME *** IMACH(10) = 16 IMACH(14) = 14 IMACH(15) = -64 IMACH(16) = 63 ELSE WRITE(*,9010) STOP 777 END IF IMACH(11) = IMACH(14) IMACH(12) = IMACH(15) IMACH(13) = IMACH(16) ELSE RMACH = 1234567. IF (SMALL(1) .EQ. 1234613304) THEN * *** IEEE *** IMACH(10) = 2 IMACH(11) = 24 IMACH(12) = -125 IMACH(13) = 128 IMACH(14) = 53 IMACH(15) = -1021 IMACH(16) = 1024 SC = 987 ELSE IF (SMALL(1) .EQ. -1271379306) THEN * *** VAX *** IMACH(10) = 2 IMACH(11) = 24 IMACH(12) = -127 IMACH(13) = 127 IMACH(14) = 56 IMACH(15) = -127 IMACH(16) = 127 SC = 987 ELSE IF (SMALL(1) .EQ. 1175639687) THEN * *** IBM MAINFRAME *** IMACH(10) = 16 IMACH(11) = 6 IMACH(12) = -64 IMACH(13) = 63 IMACH(14) = 14 IMACH(15) = -64 IMACH(16) = 63 SC = 987 ELSE IF (SMALL(1) .EQ. 1251390520) THEN * *** CONVEX C-1 *** IMACH(10) = 2 IMACH(11) = 24 IMACH(12) = -128 IMACH(13) = 127 IMACH(14) = 53 IMACH(15) = -1024 IMACH(16) = 1023 ELSE DO 10 I3 = 1, 3 J = SMALL(1) / 10000000 K = SMALL(1) - 10000000*J IF (K .NE. T3E(I3)) GO TO 20 SMALL(1) = J 10 CONTINUE * *** CRAY T3E *** IMACH( 1) = 5 IMACH( 2) = 6 IMACH( 3) = 0 IMACH( 4) = 0 IMACH( 5) = 64 IMACH( 6) = 8 IMACH( 7) = 2 IMACH( 8) = 63 CALL I1MCR1(IMACH(9), K, 32767, 16777215, 16777215) IMACH(10) = 2 IMACH(11) = 53 IMACH(12) = -1021 IMACH(13) = 1024 IMACH(14) = 53 IMACH(15) = -1021 IMACH(16) = 1024 GO TO 35 20 CALL I1MCR1(J, K, 16405, 9876536, 0) IF (SMALL(1) .NE. J) THEN WRITE(*,9020) STOP 777 END IF * *** CRAY 1, XMP, 2, AND 3 *** IMACH(1) = 5 IMACH(2) = 6 IMACH(3) = 102 IMACH(4) = 6 IMACH(5) = 46 IMACH(6) = 8 IMACH(7) = 2 IMACH(8) = 45 CALL I1MCR1(IMACH(9), K, 0, 4194303, 16777215) IMACH(10) = 2 IMACH(11) = 47 IMACH(12) = -8188 IMACH(13) = 8189 IMACH(14) = 94 IMACH(15) = -8141 IMACH(16) = 8189 GO TO 35 END IF END IF IMACH( 1) = 5 IMACH( 2) = 6 IMACH( 3) = 7 IMACH( 4) = 6 IMACH( 5) = 32 IMACH( 6) = 4 IMACH( 7) = 2 IMACH( 8) = 31 IMACH( 9) = 2147483647 35 SC = 987 END IF 9010 FORMAT(/' Adjust autodoubled I1MACH by uncommenting data'/ * ' statements appropriate for your machine and setting'/ * ' IMACH(I) = IMACH(I+3) for I = 11, 12, and 13.') 9020 FORMAT(/' Adjust I1MACH by uncommenting data statements'/ * ' appropriate for your machine.') IF (I .LT. 1 .OR. I .GT. 16) GO TO 40 I1MACH = IMACH(I) RETURN 40 WRITE(*,*) 'I1MACH(I): I =',I,' is out of bounds.' STOP * /* C source for I1MACH -- remove the * in column 1 */ * /* Note that some values may need changing. */ *#include *#include *#include *#include * *long i1mach_(long *i) *{ * switch(*i){ * case 1: return 5; /* standard input */ * case 2: return 6; /* standard output */ * case 3: return 7; /* standard punch */ * case 4: return 0; /* standard error */ * case 5: return 32; /* bits per integer */ * case 6: return sizeof(int); * case 7: return 2; /* base for integers */ * case 8: return 31; /* digits of integer base */ * case 9: return LONG_MAX; * case 10: return FLT_RADIX; * case 11: return FLT_MANT_DIG; * case 12: return FLT_MIN_EXP; * case 13: return FLT_MAX_EXP; * case 14: return DBL_MANT_DIG; * case 15: return DBL_MIN_EXP; * case 16: return DBL_MAX_EXP; * } * fprintf(stderr, "invalid argument: i1mach(%ld)\n", *i); * exit(1);return 0; /* some compilers demand return values */ *} END SUBROUTINE I1MCR1(A, A1, B, C, D) **** SPECIAL COMPUTATION FOR OLD CRAY MACHINES **** INTEGER A, A1, B, C, D A1 = 16777216*B + C A = 16777216*A1 + D END PyBDSF-1.10.1/src/port3/i7copy.f000066400000000000000000000003371420247104600160430ustar00rootroot00000000000000 SUBROUTINE I7COPY(P, Y, X) C C *** SET Y = X, WHERE X AND Y ARE INTEGER P-VECTORS *** C INTEGER P INTEGER X(P), Y(P) C INTEGER I C DO 10 I = 1, P 10 Y(I) = X(I) 999 RETURN END PyBDSF-1.10.1/src/port3/i7do.f000066400000000000000000000201641420247104600154730ustar00rootroot00000000000000 SUBROUTINE I7DO(M,N,INDROW,JPNTR,INDCOL,IPNTR,NDEG,LIST, * MAXCLQ,IWA1,IWA2,IWA3,IWA4,BWA) INTEGER M,N,MAXCLQ INTEGER INDROW(1),JPNTR(1),INDCOL(1),IPNTR(1),NDEG(N),LIST(N), * IWA1(N),IWA2(N),IWA3(N),IWA4(N) LOGICAL BWA(N) C ********** C C SUBROUTINE I7DO C C GIVEN THE SPARSITY PATTERN OF AN M BY N MATRIX A, THIS C SUBROUTINE DETERMINES AN INCIDENCE-DEGREE ORDERING OF THE C COLUMNS OF A. C C THE INCIDENCE-DEGREE ORDERING IS DEFINED FOR THE LOOPLESS C GRAPH G WITH VERTICES A(J), J = 1,2,...,N WHERE A(J) IS THE C J-TH COLUMN OF A AND WITH EDGE (A(I),A(J)) IF AND ONLY IF C COLUMNS I AND J HAVE A NON-ZERO IN THE SAME ROW POSITION. C C AT EACH STAGE OF I7DO, A COLUMN OF MAXIMAL INCIDENCE IS C CHOSEN AND ORDERED. IF JCOL IS AN UN-ORDERED COLUMN, THEN C THE INCIDENCE OF JCOL IS THE NUMBER OF ORDERED COLUMNS C ADJACENT TO JCOL IN THE GRAPH G. AMONG ALL THE COLUMNS OF C MAXIMAL INCIDENCE,I7DO CHOOSES A COLUMN OF MAXIMAL DEGREE. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE I7DO(M,N,INDROW,JPNTR,INDCOL,IPNTR,NDEG,LIST, C MAXCLQ,IWA1,IWA2,IWA3,IWA4,BWA) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF ROWS OF A. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C INDROW IS AN INTEGER INPUT ARRAY WHICH CONTAINS THE ROW C INDICES FOR THE NON-ZEROES IN THE MATRIX A. C C JPNTR IS AN INTEGER INPUT ARRAY OF LENGTH N + 1 WHICH C SPECIFIES THE LOCATIONS OF THE ROW INDICES IN INDROW. C THE ROW INDICES FOR COLUMN J ARE C C INDROW(K), K = JPNTR(J),...,JPNTR(J+1)-1. C C NOTE THAT JPNTR(N+1)-1 IS THEN THE NUMBER OF NON-ZERO C ELEMENTS OF THE MATRIX A. C C INDCOL IS AN INTEGER INPUT ARRAY WHICH CONTAINS THE C COLUMN INDICES FOR THE NON-ZEROES IN THE MATRIX A. C C IPNTR IS AN INTEGER INPUT ARRAY OF LENGTH M + 1 WHICH C SPECIFIES THE LOCATIONS OF THE COLUMN INDICES IN INDCOL. C THE COLUMN INDICES FOR ROW I ARE C C INDCOL(K), K = IPNTR(I),...,IPNTR(I+1)-1. C C NOTE THAT IPNTR(M+1)-1 IS THEN THE NUMBER OF NON-ZERO C ELEMENTS OF THE MATRIX A. C C NDEG IS AN INTEGER INPUT ARRAY OF LENGTH N WHICH SPECIFIES C THE DEGREE SEQUENCE. THE DEGREE OF THE J-TH COLUMN C OF A IS NDEG(J). C C LIST IS AN INTEGER OUTPUT ARRAY OF LENGTH N WHICH SPECIFIES C THE INCIDENCE-DEGREE ORDERING OF THE COLUMNS OF A. THE J-TH C COLUMN IN THIS ORDER IS LIST(J). C C MAXCLQ IS AN INTEGER OUTPUT VARIABLE SET TO THE SIZE C OF THE LARGEST CLIQUE FOUND DURING THE ORDERING. C C IWA1,IWA2,IWA3, AND IWA4 ARE INTEGER WORK ARRAYS OF LENGTH N. C C BWA IS A LOGICAL WORK ARRAY OF LENGTH N. C C SUBPROGRAMS CALLED C C MINPACK-SUPPLIED ... N7MSRT C C FORTRAN-SUPPLIED ... MAX0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. JUNE 1982. C THOMAS F. COLEMAN, BURTON S. GARBOW, JORGE J. MORE C C ********** INTEGER DEG,HEAD,IC,IP,IPL,IPU,IR,JCOL,JP,JPL,JPU,L,MAXINC, * MAXLST,NCOMP,NUMINC,NUMLST,NUMORD,NUMWGT C C SORT THE DEGREE SEQUENCE. C CALL N7MSRT(N,N-1,NDEG,-1,IWA4,IWA1,IWA3) C C INITIALIZATION BLOCK. C C CREATE A DOUBLY-LINKED LIST TO ACCESS THE INCIDENCES OF THE C COLUMNS. THE POINTERS FOR THE LINKED LIST ARE AS FOLLOWS. C C EACH UN-ORDERED COLUMN JCOL IS IN A LIST (THE INCIDENCE LIST) C OF COLUMNS WITH THE SAME INCIDENCE. C C IWA1(NUMINC+1) IS THE FIRST COLUMN IN THE NUMINC LIST C UNLESS IWA1(NUMINC+1) = 0. IN THIS CASE THERE ARE C NO COLUMNS IN THE NUMINC LIST. C C IWA2(JCOL) IS THE COLUMN BEFORE JCOL IN THE INCIDENCE LIST C UNLESS IWA2(JCOL) = 0. IN THIS CASE JCOL IS THE FIRST C COLUMN IN THIS INCIDENCE LIST. C C IWA3(JCOL) IS THE COLUMN AFTER JCOL IN THE INCIDENCE LIST C UNLESS IWA3(JCOL) = 0. IN THIS CASE JCOL IS THE LAST C COLUMN IN THIS INCIDENCE LIST. C C IF JCOL IS AN UN-ORDERED COLUMN, THEN LIST(JCOL) IS THE C INCIDENCE OF JCOL IN THE GRAPH. IF JCOL IS AN ORDERED COLUMN, C THEN LIST(JCOL) IS THE INCIDENCE-DEGREE ORDER OF COLUMN JCOL. C MAXINC = 0 DO 10 JP = 1, N LIST(JP) = 0 BWA(JP) = .FALSE. IWA1(JP) = 0 L = IWA4(JP) IF (JP .NE. 1) IWA2(L) = IWA4(JP-1) IF (JP .NE. N) IWA3(L) = IWA4(JP+1) 10 CONTINUE IWA1(1) = IWA4(1) L = IWA4(1) IWA2(L) = 0 L = IWA4(N) IWA3(L) = 0 C C DETERMINE THE MAXIMAL SEARCH LENGTH FOR THE LIST C OF COLUMNS OF MAXIMAL INCIDENCE. C MAXLST = 0 DO 20 IR = 1, M MAXLST = MAXLST + (IPNTR(IR+1) - IPNTR(IR))**2 20 CONTINUE MAXLST = MAXLST/N MAXCLQ = 1 C C BEGINNING OF ITERATION LOOP. C DO 140 NUMORD = 1, N C C CHOOSE A COLUMN JCOL OF MAXIMAL DEGREE AMONG THE C COLUMNS OF MAXIMAL INCIDENCE. C JP = IWA1(MAXINC+1) NUMLST = 1 NUMWGT = -1 30 CONTINUE IF (NDEG(JP) .LE. NUMWGT) GO TO 40 NUMWGT = NDEG(JP) JCOL = JP 40 CONTINUE JP = IWA3(JP) NUMLST = NUMLST + 1 IF (JP .GT. 0 .AND. NUMLST .LE. MAXLST) GO TO 30 LIST(JCOL) = NUMORD C C DELETE COLUMN JCOL FROM THE LIST OF COLUMNS OF C MAXIMAL INCIDENCE. C L = IWA2(JCOL) IF (L .EQ. 0) IWA1(MAXINC+1) = IWA3(JCOL) IF (L .GT. 0) IWA3(L) = IWA3(JCOL) L = IWA3(JCOL) IF (L .GT. 0) IWA2(L) = IWA2(JCOL) C C UPDATE THE SIZE OF THE LARGEST CLIQUE C FOUND DURING THE ORDERING. C IF (MAXINC .EQ. 0) NCOMP = 0 NCOMP = NCOMP + 1 IF (MAXINC + 1 .EQ. NCOMP) MAXCLQ = MAX0(MAXCLQ,NCOMP) C C UPDATE THE MAXIMAL INCIDENCE COUNT. C 50 CONTINUE IF (IWA1(MAXINC+1) .GT. 0) GO TO 60 MAXINC = MAXINC - 1 IF (MAXINC .GE. 0) GO TO 50 60 CONTINUE C C FIND ALL COLUMNS ADJACENT TO COLUMN JCOL. C BWA(JCOL) = .TRUE. DEG = 0 C C DETERMINE ALL POSITIONS (IR,JCOL) WHICH CORRESPOND C TO NON-ZEROES IN THE MATRIX. C JPL = JPNTR(JCOL) JPU = JPNTR(JCOL+1) - 1 IF (JPU .LT. JPL) GO TO 100 DO 90 JP = JPL, JPU IR = INDROW(JP) C C FOR EACH ROW IR, DETERMINE ALL POSITIONS (IR,IC) C WHICH CORRESPOND TO NON-ZEROES IN THE MATRIX. C IPL = IPNTR(IR) IPU = IPNTR(IR+1) - 1 DO 80 IP = IPL, IPU IC = INDCOL(IP) C C ARRAY BWA MARKS COLUMNS WHICH ARE ADJACENT TO C COLUMN JCOL. ARRAY IWA4 RECORDS THE MARKED COLUMNS. C IF (BWA(IC)) GO TO 70 BWA(IC) = .TRUE. DEG = DEG + 1 IWA4(DEG) = IC 70 CONTINUE 80 CONTINUE 90 CONTINUE 100 CONTINUE C C UPDATE THE POINTERS TO THE INCIDENCE LISTS. C IF (DEG .LT. 1) GO TO 130 DO 120 JP = 1, DEG IC = IWA4(JP) IF (LIST(IC) .GT. 0) GO TO 110 NUMINC = -LIST(IC) + 1 LIST(IC) = -NUMINC MAXINC = MAX0(MAXINC,NUMINC) C C DELETE COLUMN IC FROM THE NUMINC-1 LIST. C L = IWA2(IC) IF (L .EQ. 0) IWA1(NUMINC) = IWA3(IC) IF (L .GT. 0) IWA3(L) = IWA3(IC) L = IWA3(IC) IF (L .GT. 0) IWA2(L) = IWA2(IC) C C ADD COLUMN IC TO THE NUMINC LIST. C HEAD = IWA1(NUMINC+1) IWA1(NUMINC+1) = IC IWA2(IC) = 0 IWA3(IC) = HEAD IF (HEAD .GT. 0) IWA2(HEAD) = IC 110 CONTINUE C C UN-MARK COLUMN IC IN THE ARRAY BWA. C BWA(IC) = .FALSE. 120 CONTINUE 130 CONTINUE BWA(JCOL) = .FALSE. C C END OF ITERATION LOOP. C 140 CONTINUE C C INVERT THE ARRAY LIST. C DO 150 JCOL = 1, N NUMORD = LIST(JCOL) IWA1(NUMORD) = JCOL 150 CONTINUE DO 160 JP = 1, N LIST(JP) = IWA1(JP) 160 CONTINUE RETURN C C LAST CARD OF SUBROUTINE I7DO. C END PyBDSF-1.10.1/src/port3/i7mdcn.f000066400000000000000000000014701420247104600160110ustar00rootroot00000000000000 INTEGER FUNCTION I7MDCN(K) C INTEGER K C C *** RETURN INTEGER MACHINE-DEPENDENT CONSTANTS *** C C *** K = 1 MEANS RETURN STANDARD OUTPUT UNIT NUMBER. *** C *** K = 2 MEANS RETURN ALTERNATE OUTPUT UNIT NUMBER. *** C *** K = 3 MEANS RETURN INPUT UNIT NUMBER. *** C (NOTE -- K = 2, 3 ARE USED ONLY BY TEST PROGRAMS.) C C +++ PORT VERSION FOLLOWS... INTEGER I1MACH EXTERNAL I1MACH INTEGER MDPERM(3) DATA MDPERM(1)/2/, MDPERM(2)/4/, MDPERM(3)/1/ I7MDCN = I1MACH(MDPERM(K)) C +++ END OF PORT VERSION +++ C C +++ NON-PORT VERSION FOLLOWS... C INTEGER MDCON(3) C DATA MDCON(1)/6/, MDCON(2)/8/, MDCON(3)/5/ C I7MDCN = MDCON(K) C +++ END OF NON-PORT VERSION +++ C 999 RETURN C *** LAST CARD OF I7MDCN FOLLOWS *** END PyBDSF-1.10.1/src/port3/i7pnvr.f000066400000000000000000000004461420247104600160570ustar00rootroot00000000000000 SUBROUTINE I7PNVR(N, X, Y) C C *** SET PERMUTATION VECTOR X TO INVERSE OF Y *** C INTEGER N INTEGER X(N), Y(N) C INTEGER I, J DO 10 I = 1, N J = Y(I) X(J) = I 10 CONTINUE C 999 RETURN C *** LAST LINE OF I7PNVR FOLLOWS *** END PyBDSF-1.10.1/src/port3/i7shft.f000066400000000000000000000012341420247104600160320ustar00rootroot00000000000000 SUBROUTINE I7SHFT(N, K, X) C C *** SHIFT X(K),...,X(N) LEFT CIRCULARLY ONE POSITION IF K .GT. 0. C *** SHIFT X(-K),...,X(N) RIGHT CIRCULARLY ONE POSITION IF K .LT. 0. C INTEGER N, K INTEGER X(N) C INTEGER I, II, K1, NM1, T C IF (K .LT. 0) GO TO 20 IF (K .GE. N) GO TO 999 NM1 = N - 1 T = X(K) DO 10 I = K, NM1 10 X(I) = X(I+1) X(N) = T GO TO 999 C 20 K1 = -K IF (K1 .GE. N) GO TO 999 T = X(N) NM1 = N - K1 DO 30 II = 1, NM1 I = N - II X(I+1) = X(I) 30 CONTINUE X(K1) = T 999 RETURN C *** LAST LINE OF I7SHFT FOLLOWS *** END PyBDSF-1.10.1/src/port3/i8save.f000066400000000000000000000010661420247104600160300ustar00rootroot00000000000000 INTEGER FUNCTION I8SAVE(ISW,IVALUE,SET) C C IF (ISW = 1) I8SAVE RETURNS THE CURRENT ERROR NUMBER AND C SETS IT TO IVALUE IF SET = .TRUE. . C C IF (ISW = 2) I8SAVE RETURNS THE CURRENT RECOVERY SWITCH AND C SETS IT TO IVALUE IF SET = .TRUE. . C LOGICAL SET C INTEGER IPARAM(2) EQUIVALENCE (IPARAM(1),LERROR) , (IPARAM(2),LRECOV) C C START EXECUTION ERROR FREE AND WITH RECOVERY TURNED OFF. C DATA LERROR/0/ , LRECOV/2/ C I8SAVE=IPARAM(ISW) IF (SET) IPARAM(ISW)=IVALUE C RETURN C END PyBDSF-1.10.1/src/port3/i8tsel.f000066400000000000000000000004251420247104600160370ustar00rootroot00000000000000 INTEGER FUNCTION I8TSEL(INOW) C C TO RETURN I8TSEL = THE POINTER TO THE CURRENT ENTER-BLOCK AND C SET THE CURRENT POINTER TO INOW. C C START WITH NO BACK-POINTER. C DATA IENTER/0/ C I8TSEL=IENTER IF (INOW.GE.0) IENTER=INOW C RETURN C END PyBDSF-1.10.1/src/port3/ialloc.f000066400000000000000000000002011420247104600160620ustar00rootroot00000000000000 INTEGER FUNCTION IALLOC(NITEMS,ISIZE) C CALL I0TK01 IALLOC = ISTKGT(NITEMS,ISIZE+2) C RETURN C END PyBDSF-1.10.1/src/port3/iceil.f000066400000000000000000000002711420247104600157130ustar00rootroot00000000000000 INTEGER FUNCTION ICEIL(X) C C ICEIL RETURNS CEIL(X) C ICEIL = INT(X) IF (X .LE. 0.0) RETURN IF (FLOAT(ICEIL) .NE. X) ICEIL = ICEIL + 1 C RETURN END PyBDSF-1.10.1/src/port3/iflr.f000066400000000000000000000002621420247104600155620ustar00rootroot00000000000000 INTEGER FUNCTION IFLR(X) C C IFLR RETURNS FLR(X) C IFLR = INT(X) IF (X .GE. 0.0) RETURN IF (FLOAT(IFLR) .NE. X) IFLR = IFLR - 1 C RETURN END PyBDSF-1.10.1/src/port3/index.html000066400000000000000000001042371420247104600164630ustar00rootroot00000000000000 port

port

Click here to see the number of accesses to this library.


file	readme
for	important notes on the PORT library
,	Note that dxxxxx.f is the double-precision version of xxxxx.f.
,	To get routine xxx.f and all the PORT library routines it calls,
,	send the E-mail message
,		send xxx from port
,	to netlib@netlib.bell-labs.com
,	Also: points to "Usage Summary for Selected Optimization Routines"
,	sometimes known as PORT OPTIMIZATION DOCUMENTATION in
,		http://netlib.bell-labs.com/cm/cs/cstr/153.ps.gz
,	or	http://netlib.bell-labs.com/cm/cs/cstr/153.pdf

file	a0xtrp.f

file	a7sst.f

file	a9rntc.f  a9rntc.f plus dependencies

file	a9rntd.f  a9rntd.f plus dependencies

file	a9rnti.f  a9rnti.f plus dependencies

file	a9rntl.f  a9rntl.f plus dependencies

file	a9rntr.f  a9rntr.f plus dependencies

file	aprntc.f  aprntc.f plus dependencies
for	complex array print

file	aprntd.f  aprntd.f plus dependencies
for	double precision array print

file	aprnti.f  aprnti.f plus dependencies
for	integer array print

file	aprntl.f  aprntl.f plus dependencies
for	logical array print

file	aprntr.f  aprntr.f plus dependencies
for	single precision array print

file	c7vfn.f  c7vfn.f plus dependencies

file	call.f  call.f plus dependencies

file	cddiv.f

file	changes
for	errata

file	d0xtrp.f

file	d1mach.f
for	double-precision machine constants

file	d4sqr.f  d4sqr.f plus dependencies

file	d7dgb.f  d7dgb.f plus dependencies

file	d7dog.f

file	d7dup.f

file	d7egr.f

file	d7mlp.f

file	d7tpr.f  d7tpr.f plus dependencies

file	d7upd.f  d7upd.f plus dependencies

file	da7sst.f

file	dalloc.f  dalloc.f plus dependencies

file	dc7vfn.f  dc7vfn.f plus dependencies

file	dd4sqr.f  dd4sqr.f plus dependencies

file	dd7dgb.f  dd7dgb.f plus dependencies

file	dd7dog.f

file	dd7dup.f

file	dd7mlp.f

file	dd7tpr.f  dd7tpr.f plus dependencies

file	dd7upd.f  dd7upd.f plus dependencies

file	deigen.f  deigen.f plus dependencies

file	df7dhb.f  df7dhb.f plus dependencies

file	df7hes.f  df7hes.f plus dependencies

file	dg7itb.f  dg7itb.f plus dependencies

file	dg7lit.f  dg7lit.f plus dependencies

file	dg7qsb.f  dg7qsb.f plus dependencies

file	dg7qts.f  dg7qts.f plus dependencies

file	dh2rfa.f

file	dh2rfg.f

file	dhqr2.f  dhqr2.f plus dependencies

file	ditsum.f

file	divset.f  divset.f plus dependencies

file	dl7itv.f

file	dl7ivm.f  dl7ivm.f plus dependencies

file	dl7msb.f  dl7msb.f plus dependencies

file	dl7mst.f  dl7mst.f plus dependencies

file	dl7nvr.f

file	dl7sqr.f

file	dl7srt.f

file	dl7svn.f  dl7svn.f plus dependencies

file	dl7svx.f  dl7svx.f plus dependencies

file	dl7tsq.f

file	dl7tvm.f

file	dl7upd.f

file	dl7vml.f

file	dmnf.f  dmnf.f plus dependencies

file	dmnfb.f  dmnfb.f plus dependencies

file	dmng.f  dmng.f plus dependencies

file	dmngb.f  dmngb.f plus dependencies

file	dmnh.f  dmnh.f plus dependencies

file	dmnhb.f  dmnhb.f plus dependencies

file	dn2cvp.f

file	dn2f.f  dn2f.f plus dependencies

file	dn2fb.f  dn2fb.f plus dependencies

file	dn2g.f  dn2g.f plus dependencies

file	dn2gb.f  dn2gb.f plus dependencies

file	dn2lrd.f  dn2lrd.f plus dependencies

file	dn2p.f  dn2p.f plus dependencies

file	dn2pb.f  dn2pb.f plus dependencies

file	dn2rdp.f

file	dnsf.f  dnsf.f plus dependencies

file	dnsfb.f  dnsfb.f plus dependencies

file	dnsg.f  dnsg.f plus dependencies

file	dnsgb.f  dnsgb.f plus dependencies

file	do7prd.f

file	dorthe.f  dorthe.f plus dependencies

file	dortra.f

file	dparck.f  dparck.f plus dependencies

file	dpostx1.f  dpostx1.f plus dependencies

file	dpostx10.f  dpostx10.f plus dependencies

file	dpostx2.f  dpostx2.f plus dependencies

file	dpostx3.f  dpostx3.f plus dependencies

file	dpostx4.f  dpostx4.f plus dependencies

file	dpostx5.f  dpostx5.f plus dependencies

file	dpostx6.f  dpostx6.f plus dependencies

file	dpostx7.f  dpostx7.f plus dependencies

file	dpostx8.f  dpostx8.f plus dependencies

file	dpostx9.f  dpostx9.f plus dependencies

file	dq7apl.f  dq7apl.f plus dependencies

file	dq7rad.f  dq7rad.f plus dependencies

file	dq7rfh.f  dq7rfh.f plus dependencies

file	dq7rsh.f  dq7rsh.f plus dependencies

file	dr7mdc.f  dr7mdc.f plus dependencies

file	dr7tvm.f  dr7tvm.f plus dependencies

file	drldst.f

file	drmnf.f  drmnf.f plus dependencies

file	drmnfb.f  drmnfb.f plus dependencies

file	drmng.f  drmng.f plus dependencies

file	drmngb.f  drmngb.f plus dependencies

file	drmnh.f  drmnh.f plus dependencies

file	drmnhb.f  drmnhb.f plus dependencies

file	drn2g.f  drn2g.f plus dependencies

file	drn2gb.f  drn2gb.f plus dependencies

file	drnsg.f  drnsg.f plus dependencies

file	drnsgb.f  drnsgb.f plus dependencies

file	ds3grd.f  ds3grd.f plus dependencies

file	ds7bqn.f  ds7bqn.f plus dependencies

file	ds7cpr.f

file	ds7dmp.f

file	ds7grd.f  ds7grd.f plus dependencies

file	ds7ipr.f

file	ds7lup.f  ds7lup.f plus dependencies

file	ds7lvm.f  ds7lvm.f plus dependencies

file	dsm.f  dsm.f plus dependencies

file	dttgrx1.f  dttgrx1.f plus dependencies

file	dttgrx1p.f  dttgrx1p.f plus dependencies

file	dttgrx2.f  dttgrx2.f plus dependencies

file	dttgrx3.f  dttgrx3.f plus dependencies

file	dttgrx4.f  dttgrx4.f plus dependencies

file	dttgrx5.f  dttgrx5.f plus dependencies

file	dttgrx6.f  dttgrx6.f plus dependencies

file	dttgux1.f  dttgux1.f plus dependencies

file	dttgux1p.f  dttgux1p.f plus dependencies

file	dttgux2.f  dttgux2.f plus dependencies

file	dttgux3.f  dttgux3.f plus dependencies

file	dttgux4.f  dttgux4.f plus dependencies

file	dttgux5.f  dttgux5.f plus dependencies

file	dv2axy.f

file	dv2nrm.f  dv2nrm.f plus dependencies

file	dv7cpy.f

file	dv7dfl.f  dv7dfl.f plus dependencies

file	dv7ipr.f

file	dv7prm.f

file	dv7scl.f

file	dv7scp.f

file	dv7shf.f

file	dv7swp.f

file	dv7vmp.f

file	dw7zbf.f  dw7zbf.f plus dependencies

file	dxtrap.f  dxtrap.f plus dependencies

file	dzero.f  dzero.f plus dependencies

file	e9rint.f  e9rint.f plus dependencies

file	eigen.f  eigen.f plus dependencies
for	eigenvalues and eigenvectors of a general real matrix

file	enter.f  enter.f plus dependencies
for	save current error recovery mode and storage allocation status

file	entsrc.f  entsrc.f plus dependencies
for	test and set recovery mode (entry)

file	eprint.f  eprint.f plus dependencies
for	print error message

file	erroff.f  erroff.f plus dependencies
for	cancel error state

file	f7dhb.f  f7dhb.f plus dependencies

file	f7hes.f  f7hes.f plus dependencies

file	fdump.f

file	frmatd.f  frmatd.f plus dependencies

file	frmati.f  frmati.f plus dependencies

file	frmatr.f  frmatr.f plus dependencies

file	g7itb.f  g7itb.f plus dependencies

file	g7lit.f  g7lit.f plus dependencies

file	g7qsb.f  g7qsb.f plus dependencies

file	g7qts.f  g7qts.f plus dependencies

file	h2rfa.f

file	h2rfg.f

file	hqr2.f

file	i0tk00.f

file	i0tk01.f  i0tk01.f plus dependencies

file	i10wid.f

file	i1mach.f
for	integer machine constants

file	i7copy.f

file	i7do.f  i7do.f plus dependencies

file	i7mdcn.f  i7mdcn.f plus dependencies

file	i7pnvr.f

file	i7shft.f

file	i8save.f

file	i8tsel.f

file	ialloc.f  ialloc.f plus dependencies

file	iceil.f

file	iflr.f

file	istkgt.f  istkgt.f plus dependencies
for	get storage from stack

file	istkin.f  istkin.f plus dependencies
for	initialize stack

file	istkmd.f  istkmd.f plus dependencies
for	modify length of last stack allocation

file	istkqu.f  istkqu.f plus dependencies
for	query the amount of space left in the stack

file	istkrl.f  istkrl.f plus dependencies
for	release stack storage

file	istkst.f  istkst.f plus dependencies
for	obtain stack statistics

file	itsum.f

file	ivset.f  ivset.f plus dependencies

file	l5stp.f  l5stp.f plus dependencies

file	l7itv.f

file	l7ivm.f  l7ivm.f plus dependencies

file	l7msb.f  l7msb.f plus dependencies

file	l7mst.f  l7mst.f plus dependencies

file	l7nvr.f

file	l7sqr.f

file	l7srt.f

file	l7svn.f  l7svn.f plus dependencies

file	l7svx.f  l7svx.f plus dependencies

file	l7tsq.f

file	l7tvm.f

file	l7upd.f

file	l7vml.f

file	leave.f  leave.f plus dependencies
for	restore prior error recovery mode and reset stack

file	m7seq.f

file	m7slo.f

file	mnf.f  mnf.f plus dependencies
for	general optimization

file	mnfb.f  mnfb.f plus dependencies
for	general optimization, simple bounds

file	mng.f  mng.f plus dependencies
for	general optimization, needs gradient

file	mngb.f  mngb.f plus dependencies
for	general optimization, needs gradient, simple bounds

file	mnh.f  mnh.f plus dependencies
for	general optimization, needs gradient and Hessian

file	mnhb.f  mnhb.f plus dependencies
for	general optimization, needs gradient and Hessian, simple bounds

file	movebc.f

file	movebd.f

file	movebi.f

file	movebl.f

file	movebr.f

file	movefc.f

file	movefd.f

file	movefi.f

file	movefl.f

file	movefr.f

file	mtstak.f  mtstak.f plus dependencies

file	n2cvp.f

file	n2f.f  n2f.f plus dependencies

file	n2fb.f  n2fb.f plus dependencies

file	n2g.f  n2g.f plus dependencies

file	n2gb.f  n2gb.f plus dependencies

file	n2lrd.f  n2lrd.f plus dependencies

file	n2p.f  n2p.f plus dependencies

file	n2pb.f  n2pb.f plus dependencies

file	n2rdp.f

file	n7msrt.f

file	nerror.f  nerror.f plus dependencies
for	get error number

file	nirall.f  nirall.f plus dependencies

file	nsf.f  nsf.f plus dependencies
for	nonlinear separable least squares  (update of nl2sno)
keywords	optimization

file	nsfb.f  nsfb.f plus dependencies
for	nonlinear separable least squares, simple bounds
keywords	optimization

file	nsg.f  nsg.f plus dependencies
for	nonlinear separable least squares, needs Jacobian  (update of nl2sol)
keywords	optimization

file	nsgb.f  nsgb.f plus dependencies
for	nonlinear separable least squares, needs Jacobian, simple bounds
keywords	optimization

file	o7prd.f

file	orthe.f  orthe.f plus dependencies

file	ortra.f

file	parck.f  parck.f plus dependencies

file	postx1.f  postx1.f plus dependencies

file	postx10.f  postx10.f plus dependencies

file	postx2.f  postx2.f plus dependencies

file	postx3.f  postx3.f plus dependencies

file	postx4.f  postx4.f plus dependencies

file	postx5.f  postx5.f plus dependencies

file	postx6.f  postx6.f plus dependencies

file	postx7.f  postx7.f plus dependencies

file	postx8.f  postx8.f plus dependencies

file	postx9.f  postx9.f plus dependencies

file	q7apl.f  q7apl.f plus dependencies

file	q7rad.f  q7rad.f plus dependencies

file	q7rfh.f  q7rfh.f plus dependencies

file	q7rsh.f  q7rsh.f plus dependencies

file	r1mach.f
for	real (single-precision) machine constants

file	r7mdc.f  r7mdc.f plus dependencies

file	r7tvm.f  r7tvm.f plus dependencies

file	retsrc.f  retsrc.f plus dependencies
for	test and reset recovery mode (return)

file	rldst.f

for	storage economizing FFT for real data

file	rmnf.f  rmnf.f plus dependencies
for	reverse communication version of MNF
keywords	optimization

file	rmnfb.f  rmnfb.f plus dependencies
for	reverse communication version of MNFB
keywords	optimization

file	rmng.f  rmng.f plus dependencies
for	reverse communication version of MNG
keywords	optimization

file	rmngb.f  rmngb.f plus dependencies
for	reverse communication version of MNGB
keywords	optimization

file	rmnh.f  rmnh.f plus dependencies
for	reverse communication version of MNH
keywords	optimization

file	rmnhb.f  rmnhb.f plus dependencies
for	reverse communication version of MNHB
keywords	optimization

file	rn2g.f  rn2g.f plus dependencies
for	reverse communication version of N2G
keywords	optimization

file	rn2gb.f  rn2gb.f plus dependencies
for	reverse communication version of N2GB
keywords	optimization

file	rnsg.f  rnsg.f plus dependencies
for	reverse communication version of NSG
keywords	optimization

file	rnsgb.f  rnsgb.f plus dependencies
for	reverse communication version of NSGB
keywords	optimization

for	zeros of real polynomials

file	s1mach.f  s1mach.f plus dependencies

file	s2mach.f

file	s3grd.f  s3grd.f plus dependencies

file	s3mach.f

file	s7bqn.f  s7bqn.f plus dependencies

file	s7cpr.f

file	s7dmp.f

file	s7etr.f

file	s7grd.f  s7grd.f plus dependencies

file	s7ipr.f

file	s7lup.f  s7lup.f plus dependencies

file	s7lvm.f  s7lvm.f plus dependencies

file	s7rtdt.f

file	s88fmt.f

file	sdump.f  sdump.f plus dependencies

file	setc.f

file	setd.f

file	seterr.f  seterr.f plus dependencies
for	error handling

file	seti.f

file	setl.f

file	setr.f

file	srecap.f  srecap.f plus dependencies

for	apply a plane rotation to a vector

for	construct Givens plane rotation

file	stinit.f  stinit.f plus dependencies

file	stkdmp.f  stkdmp.f plus dependencies
for	stack dump

file	stopx.f

file	ttgrx1.f  ttgrx1.f plus dependencies

file	ttgrx1p.f  ttgrx1p.f plus dependencies

file	ttgrx2.f  ttgrx2.f plus dependencies

file	ttgrx3.f  ttgrx3.f plus dependencies

file	ttgrx4.f  ttgrx4.f plus dependencies

file	ttgrx5.f  ttgrx5.f plus dependencies

file	ttgrx6.f  ttgrx6.f plus dependencies

file	ttgux1.f  ttgux1.f plus dependencies

file	ttgux1p.f  ttgux1p.f plus dependencies

file	ttgux2.f  ttgux2.f plus dependencies

file	ttgux3.f  ttgux3.f plus dependencies

file	ttgux4.f  ttgux4.f plus dependencies

file	ttgux5.f  ttgux5.f plus dependencies

file	u9dmp.f  u9dmp.f plus dependencies

file	v2axy.f

file	v2nrm.f  v2nrm.f plus dependencies

file	v7cpy.f

file	v7dfl.f  v7dfl.f plus dependencies

file	v7ipr.f

file	v7prm.f

file	v7scl.f

file	v7scp.f

file	v7shf.f

file	v7swp.f

file	v7vmp.f

file	w7zbf.f  w7zbf.f plus dependencies

file	xtrap.f  xtrap.f plus dependencies

file	zero.f  zero.f plus dependencies
for	single real root

lib	Mach
for	obsolete versions of machine constants

lib	chk
for	drivers to verify proper installation of port

lib	ex
for	example drivers

lib	prop.upd
for	updated versions of some routines in the proprietary portion of
,	the PORT3 subroutine library -- for the convenience of people who
,	got the whole PORT3 library before these routines were updated.

file	c6lcf.f

file	dc6lcf.f

file	c6lcf.f

file	dc6lcf.f

file	smnfb.f

file	dsmnfb.f

PyBDSF-1.10.1/src/port3/istkgt.f000066400000000000000000000076721420247104600161470ustar00rootroot00000000000000 INTEGER FUNCTION ISTKGT(NITEMS,ITYPE) C C ALLOCATES SPACE OUT OF THE INTEGER ARRAY ISTAK (IN COMMON C BLOCK CSTAK) FOR AN ARRAY OF LENGTH NITEMS AND OF TYPE C DETERMINED BY ITYPE AS FOLLOWS C C 1 - LOGICAL C 2 - INTEGER C 3 - REAL C 4 - DOUBLE PRECISION C 5 - COMPLEX C C ON RETURN, THE ARRAY WILL OCCUPY C C STAK(ISTKGT), STAK(ISTKGT+1), ..., STAK(ISTKGT-NITEMS+1) C C WHERE STAK IS AN ARRAY OF TYPE ITYPE EQUIVALENCED TO ISTAK. C C (FOR THOSE WANTING TO MAKE MACHINE DEPENDENT MODIFICATIONS C TO SUPPORT OTHER TYPES, CODES 6,7,8,9,10,11 AND 12 HAVE C BEEN RESERVED FOR 1/4 LOGICAL, 1/2 LOGICAL, 1/4 INTEGER, C 1/2 INTEGER, QUAD PRECISION, DOUBLE COMPLEX AND QUAD C COMPLEX, RESPECTIVELY.) C C THE ALLOCATOR RESERVES THE FIRST TEN INTEGER WORDS OF THE STACK C FOR ITS OWN INTERNAL BOOK-KEEPING. THESE ARE INITIALIZED BY C THE INITIALIZING SUBPROGRAM I0TK00 UPON THE FIRST CALL C TO A SUBPROGRAM IN THE ALLOCATION PACKAGE. C C THE _USE_ OF THE FIRST FIVE WORDS IS DESCRIBED BELOW. C C ISTAK( 1) - LOUT, THE NUMBER OF CURRENT ALLOCATIONS. C ISTAK( 2) - LNOW, THE CURRENT ACTIVE LENGTH OF THE STACK. C ISTAK( 3) - LUSED, THE MAXIMUM VALUE OF ISTAK(2) ACHIEVED. C ISTAK( 4) - LMAX, THE MAXIMUM LENGTH THE STACK. C ISTAK( 5) - LBOOK, THE NUMBER OF WORDS USED FOR BOOKEEPING. C C THE NEXT FIVE WORDS CONTAIN INTEGERS DESCRIBING THE AMOUNT C OF STORAGE ALLOCATED BY THE FORTRAN SYSTEM TO THE VARIOUS C DATA TYPES. THE UNIT OF MEASUREMENT IS ARBITRARY AND MAY C BE WORDS, BYTES OR BITS OR WHATEVER IS CONVENIENT. THE C VALUES CURRENTLY ASSUMED CORRESPOND TO AN ANS FORTRAN C ENVIRONMENT. FOR SOME MINI-COMPUTER SYSTEMS THE VALUES MAY C HAVE TO BE CHANGED (SEE I0TK00). C C ISTAK( 6) - THE NUMBER OF UNITS ALLOCATED TO LOGICAL C ISTAK( 7) - THE NUMBER OF UNITS ALLOCATED TO INTEGER C ISTAK( 8) - THE NUMBER OF UNITS ALLOCATED TO REAL C ISTAK( 9) - THE NUMBER OF UNITS ALLOCATED TO DOUBLE PRECISION C ISTAK(10) - THE NUMBER OF UNITS ALLOCATED TO COMPLEX C C ERROR STATES - C C 1 - NITEMS .LT. 0 C 2 - ITYPE .LE. 0 .OR. ITYPE .GE. 6 C 3 - LNOW, LUSED, LMAX OR LBOOK OVERWRITTEN C 4 - STACK OVERFLOW C COMMON /CSTAK/DSTAK C DOUBLE PRECISION DSTAK(500) INTEGER ISTAK(1000) INTEGER ISIZE(5) C LOGICAL INIT C EQUIVALENCE (DSTAK(1),ISTAK(1)) EQUIVALENCE (ISTAK(1),LOUT) EQUIVALENCE (ISTAK(2),LNOW) EQUIVALENCE (ISTAK(3),LUSED) EQUIVALENCE (ISTAK(4),LMAX) EQUIVALENCE (ISTAK(5),LBOOK) EQUIVALENCE (ISTAK(6),ISIZE(1)) C DATA INIT/.TRUE./ C IF (INIT) CALL I0TK00(INIT,500,4) C C/6S C IF (NITEMS.LT.0) CALL SETERR(20HISTKGT - NITEMS.LT.0,20,1,2) C/7S IF (NITEMS.LT.0) CALL SETERR('ISTKGT - NITEMS.LT.0',20,1,2) C/ C C/6S C IF (ITYPE.LE.0 .OR. ITYPE.GE.6) CALL SETERR C 1 (33HISTKGT - ITYPE.LE.0.OR.ITYPE.GE.6,33,2,2) C/7S IF (ITYPE.LE.0 .OR. ITYPE.GE.6) CALL SETERR 1 ('ISTKGT - ITYPE.LE.0.OR.ITYPE.GE.6',33,2,2) C/ C C/6S C IF (LNOW.LT.LBOOK.OR.LNOW.GT.LUSED.OR.LUSED.GT.LMAX) CALL SETERR C 1 (47HISTKGT - LNOW, LUSED, LMAX OR LBOOK OVERWRITTEN, C 2 47,3,2) C/7S IF (LNOW.LT.LBOOK.OR.LNOW.GT.LUSED.OR.LUSED.GT.LMAX) CALL SETERR 1 ('ISTKGT - LNOW, LUSED, LMAX OR LBOOK OVERWRITTEN', 2 47,3,2) C/ C ISTKGT = (LNOW*ISIZE(2)-1)/ISIZE(ITYPE) + 2 I = ( (ISTKGT-1+NITEMS)*ISIZE(ITYPE) - 1 )/ISIZE(2) + 3 C C STACK OVERFLOW IS AN UNRECOVERABLE ERROR. C C/6S C IF (I.GT.LMAX) CALL SETERR(69HISTKGT - STACK TOO SHORT. ENLARGE IT C 1 AND CALL ISTKIN IN MAIN PROGRAM.,69,4,2) C/7S IF (I.GT.LMAX) CALL SETERR('ISTKGT - STACK TOO SHORT. ENLARGE IT A *ND CALL ISTKIN IN MAIN PROGRAM.',69,4,2) C/ C C ISTAK(I-1) CONTAINS THE TYPE FOR THIS ALLOCATION. C ISTAK(I ) CONTAINS A POINTER TO THE END OF THE PREVIOUS C ALLOCATION. C ISTAK(I-1) = ITYPE ISTAK(I ) = LNOW LOUT = LOUT+1 LNOW = I LUSED = MAX0(LUSED,LNOW) C RETURN C END PyBDSF-1.10.1/src/port3/istkin.f000066400000000000000000000012551420247104600161320ustar00rootroot00000000000000 SUBROUTINE ISTKIN(NITEMS,ITYPE) C C INITIALIZES THE STACK ALLOCATOR, SETTING THE LENGTH OF THE STACK. C C ERROR STATES - C C 1 - NITEMS .LE. 0 C 2 - ITYPE .LE. 0 .OR. ITYPE .GE. 6 C LOGICAL INIT C DATA INIT/.TRUE./ C C/6S C IF (NITEMS.LE.0) CALL SETERR(20HISTKIN - NITEMS.LE.0,20,1,2) C/7S IF (NITEMS.LE.0) CALL SETERR('ISTKIN - NITEMS.LE.0',20,1,2) C/ C C/6S C IF (ITYPE.LE.0.OR.ITYPE.GE.6) CALL SETERR C 1 (33HISTKIN - ITYPE.LE.0.OR.ITYPE.GE.6,33,2,2) C/7S IF (ITYPE.LE.0.OR.ITYPE.GE.6) CALL SETERR 1 ('ISTKIN - ITYPE.LE.0.OR.ITYPE.GE.6',33,2,2) C/ C IF (INIT) CALL I0TK00(INIT,NITEMS,ITYPE) C RETURN C END PyBDSF-1.10.1/src/port3/istkmd.f000066400000000000000000000013231420247104600161200ustar00rootroot00000000000000 INTEGER FUNCTION ISTKMD(NITEMS) C C CHANGES THE LENGTH OF THE FRAME AT THE TOP OF THE STACK C TO NITEMS. C C ERROR STATES - C C 1 - LNOW OVERWRITTEN C 2 - ISTAK(LNOWO-1) OVERWRITTEN C COMMON /CSTAK/DSTAK C DOUBLE PRECISION DSTAK(500) INTEGER ISTAK(1000) C EQUIVALENCE (DSTAK(1),ISTAK(1)) EQUIVALENCE (ISTAK(2),LNOW) C LNOWO = LNOW CALL ISTKRL(1) C ITYPE = ISTAK(LNOWO-1) C C/6S C IF (ITYPE.LE.0.OR.ITYPE.GE.6) CALL SETERR C 1 (35HISTKMD - ISTAK(LNOWO-1) OVERWRITTEN,35,1,2) C/7S IF (ITYPE.LE.0.OR.ITYPE.GE.6) CALL SETERR 1 ('ISTKMD - ISTAK(LNOWO-1) OVERWRITTEN',35,1,2) C/ C ISTKMD = ISTKGT(NITEMS,ITYPE) C RETURN C END PyBDSF-1.10.1/src/port3/istkqu.f000066400000000000000000000025161420247104600161520ustar00rootroot00000000000000 INTEGER FUNCTION ISTKQU(ITYPE) C C RETURNS THE NUMBER OF ITEMS OF TYPE ITYPE THAT REMAIN C TO BE ALLOCATED IN ONE REQUEST. C C ERROR STATES - C C 1 - LNOW, LUSED, LMAX OR LBOOK OVERWRITTEN C 2 - ITYPE .LE. 0 .OR. ITYPE .GE. 6 C COMMON /CSTAK/DSTAK C DOUBLE PRECISION DSTAK(500) INTEGER ISTAK(1000) INTEGER ISIZE(5) C LOGICAL INIT C EQUIVALENCE (DSTAK(1),ISTAK(1)) EQUIVALENCE (ISTAK(2),LNOW) EQUIVALENCE (ISTAK(3),LUSED) EQUIVALENCE (ISTAK(4),LMAX) EQUIVALENCE (ISTAK(5),LBOOK) EQUIVALENCE (ISTAK(6),ISIZE(1)) C DATA INIT/.TRUE./ C IF (INIT) CALL I0TK00(INIT,500,4) C C/6S C IF (LNOW.LT.LBOOK.OR.LNOW.GT.LUSED.OR.LUSED.GT.LMAX) CALL SETERR C 1 (47HISTKQU - LNOW, LUSED, LMAX OR LBOOK OVERWRITTEN, C 2 47,1,2) C/7S IF (LNOW.LT.LBOOK.OR.LNOW.GT.LUSED.OR.LUSED.GT.LMAX) CALL SETERR 1 ('ISTKQU - LNOW, LUSED, LMAX OR LBOOK OVERWRITTEN', 2 47,1,2) C/ C C/6S C IF (ITYPE.LE.0.OR.ITYPE.GE.6) CALL SETERR C 1 (33HISTKQU - ITYPE.LE.0.OR.ITYPE.GE.6,33,2,2) C/7S IF (ITYPE.LE.0.OR.ITYPE.GE.6) CALL SETERR 1 ('ISTKQU - ITYPE.LE.0.OR.ITYPE.GE.6',33,2,2) C/ C ISTKQU = MAX0( ((LMAX-2)*ISIZE(2))/ISIZE(ITYPE) 1 - (LNOW*ISIZE(2)-1)/ISIZE(ITYPE) 2 - 1, 0 ) C RETURN C END PyBDSF-1.10.1/src/port3/istkrl.f000066400000000000000000000036501420247104600161420ustar00rootroot00000000000000 SUBROUTINE ISTKRL(NUMBER) C C DE-ALLOCATES THE LAST (NUMBER) ALLOCATIONS MADE IN THE STACK C BY ISTKGT. C C ERROR STATES - C C 1 - NUMBER .LT. 0 C 2 - LNOW, LUSED, LMAX OR LBOOK OVERWRITTEN C 3 - ATTEMPT TO DE-ALLOCATE NON-EXISTENT ALLOCATION C 4 - THE POINTER AT ISTAK(LNOW) OVERWRITTEN C COMMON /CSTAK/DSTAK C DOUBLE PRECISION DSTAK(500) INTEGER ISTAK(1000) LOGICAL INIT C EQUIVALENCE (DSTAK(1),ISTAK(1)) EQUIVALENCE (ISTAK(1),LOUT) EQUIVALENCE (ISTAK(2),LNOW) EQUIVALENCE (ISTAK(3),LUSED) EQUIVALENCE (ISTAK(4),LMAX) EQUIVALENCE (ISTAK(5),LBOOK) C DATA INIT/.TRUE./ C IF (INIT) CALL I0TK00(INIT,500,4) C C/6S C IF (NUMBER.LT.0) CALL SETERR(20HISTKRL - NUMBER.LT.0,20,1,2) C/7S IF (NUMBER.LT.0) CALL SETERR('ISTKRL - NUMBER.LT.0',20,1,2) C/ C C/6S C IF (LNOW.LT.LBOOK.OR.LNOW.GT.LUSED.OR.LUSED.GT.LMAX) CALL SETERR C 1 (47HISTKRL - LNOW, LUSED, LMAX OR LBOOK OVERWRITTEN, C 2 47,2,2) C/7S IF (LNOW.LT.LBOOK.OR.LNOW.GT.LUSED.OR.LUSED.GT.LMAX) CALL SETERR 1 ('ISTKRL - LNOW, LUSED, LMAX OR LBOOK OVERWRITTEN', 2 47,2,2) C/ C IN = NUMBER 10 IF (IN.EQ.0) RETURN C C/6S C IF (LNOW.LE.LBOOK) CALL SETERR C 1 (55HISTKRL - ATTEMPT TO DE-ALLOCATE NON-EXISTENT ALLOCATION, C 2 55,3,2) C/7S IF (LNOW.LE.LBOOK) CALL SETERR 1 ('ISTKRL - ATTEMPT TO DE-ALLOCATE NON-EXISTENT ALLOCATION', 2 55,3,2) C/ C C CHECK TO MAKE SURE THE BACK POINTERS ARE MONOTONE. C C/6S C IF (ISTAK(LNOW).LT.LBOOK.OR.ISTAK(LNOW).GE.LNOW-1) CALL SETERR C 1 (47HISTKRL - THE POINTER AT ISTAK(LNOW) OVERWRITTEN, C 2 47,4,2) C/7S IF (ISTAK(LNOW).LT.LBOOK.OR.ISTAK(LNOW).GE.LNOW-1) CALL SETERR 1 ('ISTKRL - THE POINTER AT ISTAK(LNOW) OVERWRITTEN', 2 47,4,2) C/ C LOUT = LOUT-1 LNOW = ISTAK(LNOW) IN = IN-1 GO TO 10 C END PyBDSF-1.10.1/src/port3/istkst.f000066400000000000000000000015261420247104600161530ustar00rootroot00000000000000 INTEGER FUNCTION ISTKST(NFACT) C C RETURNS CONTROL INFORMATION AS FOLLOWS C C NFACT ITEM RETURNED C C 1 LOUT, THE NUMBER OF CURRENT ALLOCATIONS C 2 LNOW, THE CURRENT ACTIVE LENGTH C 3 LUSED, THE MAXIMUM USED C 4 LMAX, THE MAXIMUM ALLOWED C COMMON /CSTAK/DSTAK C DOUBLE PRECISION DSTAK(500) INTEGER ISTAK(1000) INTEGER ISTATS(4) LOGICAL INIT C EQUIVALENCE (DSTAK(1),ISTAK(1)) EQUIVALENCE (ISTAK(1),ISTATS(1)) C DATA INIT/.TRUE./ C IF (INIT) CALL I0TK00(INIT,500,4) C C/6S C IF (NFACT.LE.0.OR.NFACT.GE.5) CALL SETERR C 1 (33HISTKST - NFACT.LE.0.OR.NFACT.GE.5,33,1,2) C/7S IF (NFACT.LE.0.OR.NFACT.GE.5) CALL SETERR 1 ('ISTKST - NFACT.LE.0.OR.NFACT.GE.5',33,1,2) C/ C ISTKST = ISTATS(NFACT) C RETURN C END PyBDSF-1.10.1/src/port3/itsum.f000066400000000000000000000173521420247104600157770ustar00rootroot00000000000000 SUBROUTINE ITSUM(D, G, IV, LIV, LV, P, V, X) C C *** PRINT ITERATION SUMMARY FOR ***SOL (VERSION 2.3) *** C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, P INTEGER IV(LIV) REAL D(P), G(P), V(LV), X(P) C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER ALG, I, IV1, M, NF, NG, OL, PU C/6S C REAL MODEL1(6), MODEL2(6) C/7S CHARACTER*4 MODEL1(6), MODEL2(6) C/ REAL NRELDF, OLDF, PRELDF, RELDF, ZERO C C *** NO EXTERNAL FUNCTIONS OR SUBROUTINES *** C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER ALGSAV, DSTNRM, F, FDIF, F0, NEEDHD, NFCALL, NFCOV, NGCOV, 1 NGCALL, NITER, NREDUC, OUTLEV, PREDUC, PRNTIT, PRUNIT, 2 RELDX, SOLPRT, STATPR, STPPAR, SUSED, X0PRT C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA ALGSAV/51/, NEEDHD/36/, NFCALL/6/, NFCOV/52/, NGCALL/30/, C 1 NGCOV/53/, NITER/31/, OUTLEV/19/, PRNTIT/39/, PRUNIT/21/, C 2 SOLPRT/22/, STATPR/23/, SUSED/64/, X0PRT/24/ C/7 PARAMETER (ALGSAV=51, NEEDHD=36, NFCALL=6, NFCOV=52, NGCALL=30, 1 NGCOV=53, NITER=31, OUTLEV=19, PRNTIT=39, PRUNIT=21, 2 SOLPRT=22, STATPR=23, SUSED=64, X0PRT=24) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DSTNRM/2/, F/10/, F0/13/, FDIF/11/, NREDUC/6/, PREDUC/7/, C 1 RELDX/17/, STPPAR/5/ C/7 PARAMETER (DSTNRM=2, F=10, F0=13, FDIF=11, NREDUC=6, PREDUC=7, 1 RELDX=17, STPPAR=5) C/ C C/6 C DATA ZERO/0.E+0/ C/7 PARAMETER (ZERO=0.E+0) C/ C/6S C DATA MODEL1(1)/4H /, MODEL1(2)/4H /, MODEL1(3)/4H /, C 1 MODEL1(4)/4H /, MODEL1(5)/4H G /, MODEL1(6)/4H S /, C 2 MODEL2(1)/4H G /, MODEL2(2)/4H S /, MODEL2(3)/4HG-S /, C 3 MODEL2(4)/4HS-G /, MODEL2(5)/4H-S-G/, MODEL2(6)/4H-G-S/ C/7S DATA MODEL1/' ',' ',' ',' ',' G ',' S '/, 1 MODEL2/' G ',' S ','G-S ','S-G ','-S-G','-G-S'/ C/ C C------------------------------- BODY -------------------------------- C PU = IV(PRUNIT) IF (PU .EQ. 0) GO TO 999 IV1 = IV(1) IF (IV1 .GT. 62) IV1 = IV1 - 51 OL = IV(OUTLEV) ALG = MOD(IV(ALGSAV)-1,2) + 1 IF (IV1 .LT. 2 .OR. IV1 .GT. 15) GO TO 370 IF (IV1 .GE. 12) GO TO 120 IF (IV1 .EQ. 2 .AND. IV(NITER) .EQ. 0) GO TO 390 IF (OL .EQ. 0) GO TO 120 IF (IV1 .GE. 10 .AND. IV(PRNTIT) .EQ. 0) GO TO 120 IF (IV1 .GT. 2) GO TO 10 IV(PRNTIT) = IV(PRNTIT) + 1 IF (IV(PRNTIT) .LT. IABS(OL)) GO TO 999 10 NF = IV(NFCALL) - IABS(IV(NFCOV)) IV(PRNTIT) = 0 RELDF = ZERO PRELDF = ZERO OLDF = AMAX1( ABS(V(F0)), ABS(V(F))) IF (OLDF .LE. ZERO) GO TO 20 RELDF = V(FDIF) / OLDF PRELDF = V(PREDUC) / OLDF 20 IF (OL .GT. 0) GO TO 60 C C *** PRINT SHORT SUMMARY LINE *** C IF (IV(NEEDHD) .EQ. 1 .AND. ALG .EQ. 1) WRITE(PU,30) 30 FORMAT(/10H IT NF,6X,1HF,7X,5HRELDF,3X,6HPRELDF,3X,5HRELDX, 1 2X,13HMODEL STPPAR) IF (IV(NEEDHD) .EQ. 1 .AND. ALG .EQ. 2) WRITE(PU,40) 40 FORMAT(/11H IT NF,7X,1HF,8X,5HRELDF,4X,6HPRELDF,4X,5HRELDX, 1 3X,6HSTPPAR) IV(NEEDHD) = 0 IF (ALG .EQ. 2) GO TO 50 M = IV(SUSED) WRITE(PU,100) IV(NITER), NF, V(F), RELDF, PRELDF, V(RELDX), 1 MODEL1(M), MODEL2(M), V(STPPAR) GO TO 120 C 50 WRITE(PU,110) IV(NITER), NF, V(F), RELDF, PRELDF, V(RELDX), 1 V(STPPAR) GO TO 120 C C *** PRINT LONG SUMMARY LINE *** C 60 IF (IV(NEEDHD) .EQ. 1 .AND. ALG .EQ. 1) WRITE(PU,70) 70 FORMAT(/11H IT NF,6X,1HF,7X,5HRELDF,3X,6HPRELDF,3X,5HRELDX, 1 2X,13HMODEL STPPAR,2X,6HD*STEP,2X,7HNPRELDF) IF (IV(NEEDHD) .EQ. 1 .AND. ALG .EQ. 2) WRITE(PU,80) 80 FORMAT(/11H IT NF,7X,1HF,8X,5HRELDF,4X,6HPRELDF,4X,5HRELDX, 1 3X,6HSTPPAR,3X,6HD*STEP,3X,7HNPRELDF) IV(NEEDHD) = 0 NRELDF = ZERO IF (OLDF .GT. ZERO) NRELDF = V(NREDUC) / OLDF IF (ALG .EQ. 2) GO TO 90 M = IV(SUSED) WRITE(PU,100) IV(NITER), NF, V(F), RELDF, PRELDF, V(RELDX), 1 MODEL1(M), MODEL2(M), V(STPPAR), V(DSTNRM), NRELDF GO TO 120 C 90 WRITE(PU,110) IV(NITER), NF, V(F), RELDF, PRELDF, 1 V(RELDX), V(STPPAR), V(DSTNRM), NRELDF 100 FORMAT(I6,I5,E10.3,2E9.2,E8.1,A3,A4,2E8.1,E9.2) 110 FORMAT(I6,I5,E11.3,2E10.2,3E9.1,E10.2) C 120 IF (IV1 .LE. 2) GO TO 999 I = IV(STATPR) IF (I .EQ. (-1)) GO TO 460 IF (I + IV1 .LT. 0) GO TO 460 GO TO (999, 999, 130, 150, 170, 190, 210, 230, 250, 270, 290, 310, 1 330, 350, 500), IV1 C 130 WRITE(PU,140) 140 FORMAT(/26H ***** X-CONVERGENCE *****) GO TO 430 C 150 WRITE(PU,160) 160 FORMAT(/42H ***** RELATIVE FUNCTION CONVERGENCE *****) GO TO 430 C 170 WRITE(PU,180) 180 FORMAT(/49H ***** X- AND RELATIVE FUNCTION CONVERGENCE *****) GO TO 430 C 190 WRITE(PU,200) 200 FORMAT(/42H ***** ABSOLUTE FUNCTION CONVERGENCE *****) GO TO 430 C 210 WRITE(PU,220) 220 FORMAT(/33H ***** SINGULAR CONVERGENCE *****) GO TO 430 C 230 WRITE(PU,240) 240 FORMAT(/30H ***** FALSE CONVERGENCE *****) GO TO 430 C 250 WRITE(PU,260) 260 FORMAT(/38H ***** FUNCTION EVALUATION LIMIT *****) GO TO 430 C 270 WRITE(PU,280) 280 FORMAT(/28H ***** ITERATION LIMIT *****) GO TO 430 C 290 WRITE(PU,300) 300 FORMAT(/18H ***** STOPX *****) GO TO 430 C 310 WRITE(PU,320) 320 FORMAT(/44H ***** INITIAL F(X) CANNOT BE COMPUTED *****) C GO TO 390 C 330 WRITE(PU,340) 340 FORMAT(/37H ***** BAD PARAMETERS TO ASSESS *****) GO TO 999 C 350 WRITE(PU,360) 360 FORMAT(/43H ***** GRADIENT COULD NOT BE COMPUTED *****) IF (IV(NITER) .GT. 0) GO TO 460 GO TO 390 C 370 WRITE(PU,380) IV(1) 380 FORMAT(/14H ***** IV(1) =,I5,6H *****) GO TO 999 C C *** INITIAL CALL ON ITSUM *** C 390 IF (IV(X0PRT) .NE. 0) WRITE(PU,400) (I, X(I), D(I), I = 1, P) 400 FORMAT(/23H I INITIAL X(I),8X,4HD(I)//(1X,I5,E17.6,E14.3)) C *** THE FOLLOWING ARE TO AVOID UNDEFINED VARIABLES WHEN THE C *** FUNCTION EVALUATION LIMIT IS 1... V(DSTNRM) = ZERO V(FDIF) = ZERO V(NREDUC) = ZERO V(PREDUC) = ZERO V(RELDX) = ZERO IF (IV1 .GE. 12) GO TO 999 IV(NEEDHD) = 0 IV(PRNTIT) = 0 IF (OL .EQ. 0) GO TO 999 IF (OL .LT. 0 .AND. ALG .EQ. 1) WRITE(PU,30) IF (OL .LT. 0 .AND. ALG .EQ. 2) WRITE(PU,40) IF (OL .GT. 0 .AND. ALG .EQ. 1) WRITE(PU,70) IF (OL .GT. 0 .AND. ALG .EQ. 2) WRITE(PU,80) IF (ALG .EQ. 1) WRITE(PU,410) IV(NFCALL), V(F) IF (ALG .EQ. 2) WRITE(PU,420) IV(NFCALL), V(F) 410 FORMAT(/6H 0,I5,E10.3) 420 FORMAT(/6H 0,I5,E11.3) GO TO 999 C C *** PRINT VARIOUS INFORMATION REQUESTED ON SOLUTION *** C 430 IV(NEEDHD) = 1 IF (IV(STATPR) .LE. 0) GO TO 460 OLDF = AMAX1( ABS(V(F0)), ABS(V(F))) PRELDF = ZERO NRELDF = ZERO IF (OLDF .LE. ZERO) GO TO 440 PRELDF = V(PREDUC) / OLDF NRELDF = V(NREDUC) / OLDF 440 NF = IV(NFCALL) - IV(NFCOV) NG = IV(NGCALL) - IV(NGCOV) WRITE(PU,450) V(F), V(RELDX), NF, NG, PRELDF, NRELDF 450 FORMAT(/9H FUNCTION,E17.6,8H RELDX,E17.3/12H FUNC. EVALS, 1 I8,9X,11HGRAD. EVALS,I8/7H PRELDF,E16.3,6X,7HNPRELDF,E15.3) C 460 IF (IV(SOLPRT) .EQ. 0) GO TO 999 IV(NEEDHD) = 1 IF (IV(ALGSAV) .GT. 2) GO TO 999 WRITE(PU,470) 470 FORMAT(/22H I FINAL X(I),8X,4HD(I),10X,4HG(I)/) DO 480 I = 1, P 480 WRITE(PU,490) I, X(I), D(I), G(I) 490 FORMAT(1X,I5,E16.6,2E14.3) GO TO 999 C 500 WRITE(PU,510) 510 FORMAT(/24H INCONSISTENT DIMENSIONS) 999 RETURN C *** LAST CARD OF ITSUM FOLLOWS *** END PyBDSF-1.10.1/src/port3/ivset.f000066400000000000000000000065621420247104600157710ustar00rootroot00000000000000 SUBROUTINE IVSET(ALG, IV, LIV, LV, V) C C *** SUPPLY ***SOL (VERSION 2.3) DEFAULT VALUES TO IV AND V *** C C *** ALG = 1 MEANS REGRESSION CONSTANTS. C *** ALG = 2 MEANS GENERAL UNCONSTRAINED OPTIMIZATION CONSTANTS. C INTEGER LIV, LV INTEGER ALG, IV(LIV) REAL V(LV) C INTEGER I7MDCN EXTERNAL I7MDCN, V7DFL C I7MDCN... RETURNS MACHINE-DEPENDENT INTEGER CONSTANTS. C V7DFL.... PROVIDES DEFAULT VALUES TO V. C INTEGER ALG1, MIV, MV INTEGER MINIV(4), MINV(4) C C *** SUBSCRIPTS FOR IV *** C INTEGER ALGSAV, COVPRT, COVREQ, DRADPR, DTYPE, HC, IERR, INITH, 1 INITS, IPIVOT, IVNEED, LASTIV, LASTV, LMAT, MXFCAL, 2 MXITER, NFCOV, NGCOV, NVDFLT, NVSAVE, OUTLEV, PARPRT, 3 PARSAV, PERM, PRUNIT, QRTYP, RDREQ, RMAT, SOLPRT, STATPR, 4 VNEED, VSAVE, X0PRT C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA ALGSAV/51/, COVPRT/14/, COVREQ/15/, DRADPR/101/, DTYPE/16/, C 1 HC/71/, IERR/75/, INITH/25/, INITS/25/, IPIVOT/76/, C 2 IVNEED/3/, LASTIV/44/, LASTV/45/, LMAT/42/, MXFCAL/17/, C 3 MXITER/18/, NFCOV/52/, NGCOV/53/, NVDFLT/50/, NVSAVE/9/, C 4 OUTLEV/19/, PARPRT/20/, PARSAV/49/, PERM/58/, PRUNIT/21/, C 5 QRTYP/80/, RDREQ/57/, RMAT/78/, SOLPRT/22/, STATPR/23/, C 6 VNEED/4/, VSAVE/60/, X0PRT/24/ C/7 PARAMETER (ALGSAV=51, COVPRT=14, COVREQ=15, DRADPR=101, DTYPE=16, 1 HC=71, IERR=75, INITH=25, INITS=25, IPIVOT=76, 2 IVNEED=3, LASTIV=44, LASTV=45, LMAT=42, MXFCAL=17, 3 MXITER=18, NFCOV=52, NGCOV=53, NVDFLT=50, NVSAVE=9, 4 OUTLEV=19, PARPRT=20, PARSAV=49, PERM=58, PRUNIT=21, 5 QRTYP=80, RDREQ=57, RMAT=78, SOLPRT=22, STATPR=23, 6 VNEED=4, VSAVE=60, X0PRT=24) C/ DATA MINIV(1)/82/, MINIV(2)/59/, MINIV(3)/103/, MINIV(4)/103/, 1 MINV(1)/98/, MINV(2)/71/, MINV(3)/101/, MINV(4)/85/ C C------------------------------- BODY -------------------------------- C IF (PRUNIT .LE. LIV) IV(PRUNIT) = I7MDCN(1) IF (ALGSAV .LE. LIV) IV(ALGSAV) = ALG IF (ALG .LT. 1 .OR. ALG .GT. 4) GO TO 40 MIV = MINIV(ALG) IF (LIV .LT. MIV) GO TO 20 MV = MINV(ALG) IF (LV .LT. MV) GO TO 30 ALG1 = MOD(ALG-1,2) + 1 CALL V7DFL(ALG1, LV, V) IV(1) = 12 IF (ALG .GT. 2) IV(DRADPR) = 1 IV(IVNEED) = 0 IV(LASTIV) = MIV IV(LASTV) = MV IV(LMAT) = MV + 1 IV(MXFCAL) = 200 IV(MXITER) = 150 IV(OUTLEV) = 1 IV(PARPRT) = 1 IV(PERM) = MIV + 1 IV(SOLPRT) = 1 IV(STATPR) = 1 IV(VNEED) = 0 IV(X0PRT) = 1 C IF (ALG1 .GE. 2) GO TO 10 C C *** REGRESSION VALUES C IV(COVPRT) = 3 IV(COVREQ) = 1 IV(DTYPE) = 1 IV(HC) = 0 IV(IERR) = 0 IV(INITS) = 0 IV(IPIVOT) = 0 IV(NVDFLT) = 32 IV(VSAVE) = 58 IF (ALG .GT. 2) IV(VSAVE) = IV(VSAVE) + 3 IV(PARSAV) = IV(VSAVE) + NVSAVE IV(QRTYP) = 1 IV(RDREQ) = 3 IV(RMAT) = 0 GO TO 999 C C *** GENERAL OPTIMIZATION VALUES C 10 IV(DTYPE) = 0 IV(INITH) = 1 IV(NFCOV) = 0 IV(NGCOV) = 0 IV(NVDFLT) = 25 IV(PARSAV) = 47 IF (ALG .GT. 2) IV(PARSAV) = 61 GO TO 999 C 20 IV(1) = 15 GO TO 999 C 30 IV(1) = 16 GO TO 999 C 40 IV(1) = 67 C 999 RETURN C *** LAST CARD OF IVSET FOLLOWS *** END PyBDSF-1.10.1/src/port3/l5stp.f000066400000000000000000000044751420247104600157070ustar00rootroot00000000000000 SUBROUTINE L5STP(NPTS, MESH, FN, QK, DELK, M, N, P, Q) INTEGER NPTS INTEGER M, N REAL MESH(NPTS), FN(NPTS), QK(NPTS), DELK, P(1), Q(1) COMMON /CSTAK/ DSTAK DOUBLE PRECISION DSTAK(500) INTEGER APTR, XPTR, ISTKGT, ISTAK(1000) INTEGER BC, BX, C, G, IW, LIW, LW, MM, NN, W REAL WS(500) EQUIVALENCE (DSTAK(1), ISTAK(1)) EQUIVALENCE (DSTAK(1), WS(1)) C THIS ROUTINE ALLOCATES STORAGE SO THAT C L9STP CAN DEFINE THE LINEAR PROGRAMMING SUBPROBLEM OF C THE DIFFERENTIAL CORRECTION ALGORITHM AND CALL A GENERAL C PURPOSE LINEAR PROGRAMMING PACKAGE. C INPUT... C NPTS - THE NUMBER OF MESH POINTS. C MESH - THE ARRAY OF MESH POINTS. C FN - THE ARRAY OF FUNCTION VALUES. C QK - THE ARRAY OF CURRENT DENOMINATOR VALUES. C DELK - THE CURRENT MINIMAX ERROR. C M - THE DEGREE OF THE NUMERATOR POLYNOMIAL. C N - THE DEGREE OF THE DENOMINATOR POLYNOMIAL. C P - THE CURRENT NUMERATOR POLYNOMIAL. C Q - THE CURRENT DENOMINATOR POLYNOMIAL. C OUTPUT... C P - THE ARRAY OF COEFFICIENTS FOR THE NUMERATOR POLYNOMIAL. C Q - THE ARRAY OF COEFFICIENTS FOR THE DENOMINATOR POLYNOMIAL. C ERROR STATES (ASTERISK INDICATES FATAL)... C 1* - INVALID DEGREE C 2* - TOO FEW MESH POINTS C 3* - NONPOSITIVE DELK C 4 - NO IMPROVEMENT IN THE LP SUBPROBLEM C C *** BODY *** C CALL ENTER(1) C/6S C IF (M .LT. 0 .OR. N .LT. 0) CALL SETERR( C 1 23H L5STP - INVALID DEGREE, 23, 1, 2) C IF (NPTS .LT. M+N+2) CALL SETERR(28H L5STP - TOO FEW MESH POINTS, C 1 28, 2, 2) C/7S IF (M .LT. 0 .OR. N .LT. 0) CALL SETERR( 1 ' L5STP - INVALID DEGREE', 23, 1, 2) IF (NPTS .LT. M+N+2) CALL SETERR(' L5STP - TOO FEW MESH POINTS', 1 28, 2, 2) C/ MM = 2 * NPTS NN = M + N + 3 LIW = MM + NN + 7 LW = NN*(3*NN+17)/2 + MM + 2 G = ISTKGT(NN, 3) C = ISTKGT(NN*MM, 3) BC = ISTKGT(2*MM, 3) BX = ISTKGT(2*NN, 3) W = ISTKGT(LW, 3) IW = ISTKGT(LIW, 2) APTR = ISTKGT(3*NPTS+1, 3) XPTR = ISTKGT(NN, 3) CALL L9STP(NPTS, MESH, FN, QK, DELK, M, N, P, Q, WS(APTR), 1 WS(BC), WS(BX), WS(C), WS(G), ISTAK(IW), LIW, LW, 2 MM, NN, WS(W), WS(XPTR)) CALL LEAVE RETURN C *** LAST LINE OF L5STP FOLLOWS *** END PyBDSF-1.10.1/src/port3/l7itv.f000066400000000000000000000015171420247104600156770ustar00rootroot00000000000000 SUBROUTINE L7ITV(N, X, L, Y) C C *** SOLVE (L**T)*X = Y, WHERE L IS AN N X N LOWER TRIANGULAR C *** MATRIX STORED COMPACTLY BY ROWS. X AND Y MAY OCCUPY THE SAME C *** STORAGE. *** C INTEGER N REAL X(N), L(1), Y(N) INTEGER I, II, IJ, IM1, I0, J, NP1 REAL XI, ZERO C/6 C DATA ZERO/0.E+0/ C/7 PARAMETER (ZERO=0.E+0) C/ C DO 10 I = 1, N 10 X(I) = Y(I) NP1 = N + 1 I0 = N*(N+1)/2 DO 30 II = 1, N I = NP1 - II XI = X(I)/L(I0) X(I) = XI IF (I .LE. 1) GO TO 999 I0 = I0 - I IF (XI .EQ. ZERO) GO TO 30 IM1 = I - 1 DO 20 J = 1, IM1 IJ = I0 + J X(J) = X(J) - XI*L(IJ) 20 CONTINUE 30 CONTINUE 999 RETURN C *** LAST CARD OF L7ITV FOLLOWS *** END PyBDSF-1.10.1/src/port3/l7ivm.f000066400000000000000000000014161420247104600156660ustar00rootroot00000000000000 SUBROUTINE L7IVM(N, X, L, Y) C C *** SOLVE L*X = Y, WHERE L IS AN N X N LOWER TRIANGULAR C *** MATRIX STORED COMPACTLY BY ROWS. X AND Y MAY OCCUPY THE SAME C *** STORAGE. *** C INTEGER N REAL X(N), L(1), Y(N) REAL D7TPR EXTERNAL D7TPR INTEGER I, J, K REAL T, ZERO C/6 C DATA ZERO/0.E+0/ C/7 PARAMETER (ZERO=0.E+0) C/ C DO 10 K = 1, N IF (Y(K) .NE. ZERO) GO TO 20 X(K) = ZERO 10 CONTINUE GO TO 999 20 J = K*(K+1)/2 X(K) = Y(K) / L(J) IF (K .GE. N) GO TO 999 K = K + 1 DO 30 I = K, N T = D7TPR(I-1, L(J+1), X) J = J + I X(I) = (Y(I) - T)/L(J) 30 CONTINUE 999 RETURN C *** LAST CARD OF L7IVM FOLLOWS *** END PyBDSF-1.10.1/src/port3/l7msb.f000066400000000000000000000062361420247104600156610ustar00rootroot00000000000000 SUBROUTINE L7MSB(B, D, G, IERR, IPIV, IPIV1, IPIV2, KA, LMAT, 1 LV, P, P0, PC, QTR, RMAT, STEP, TD, TG, V, 2 W, WLM, X, X0) C C *** COMPUTE HEURISTIC BOUNDED NEWTON STEP *** C INTEGER IERR, KA, LV, P, P0, PC INTEGER IPIV(P), IPIV1(P), IPIV2(P) REAL B(2,P), D(P), G(P), LMAT(1), QTR(P), RMAT(1), 1 STEP(P,3), TD(P), TG(P), V(LV), W(P), WLM(1), 2 X0(P), X(P) C DIMENSION LMAT(P*(P+1)/2), RMAT(P*(P+1)/2), WLM(P*(P+5)/2 + 4) C REAL D7TPR EXTERNAL D7MLP, D7TPR, L7MST, L7TVM, Q7RSH, S7BQN, 1 V2AXY, V7CPY, V7IPR, V7SCP, V7VMP C C *** LOCAL VARIABLES *** C INTEGER I, J, K, K0, KB, KINIT, L, NS, P1, P10, P11 REAL DS0, NRED, PRED, RAD REAL ONE, ZERO C C *** V SUBSCRIPTS *** C INTEGER DST0, DSTNRM, GTSTEP, NREDUC, PREDUC, RADIUS C C/6 C DATA DST0/3/, DSTNRM/2/, GTSTEP/4/, NREDUC/6/, PREDUC/7/, C 1 RADIUS/8/ C/7 PARAMETER (DST0=3, DSTNRM=2, GTSTEP=4, NREDUC=6, PREDUC=7, 1 RADIUS=8) C/ DATA ONE/1.E+0/, ZERO/0.E+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C P1 = PC IF (KA .LT. 0) GO TO 10 NRED = V(NREDUC) DS0 = V(DST0) GO TO 20 10 P0 = 0 KA = -1 C 20 KINIT = -1 IF (P0 .EQ. P1) KINIT = KA CALL V7CPY(P, X, X0) CALL V7CPY(P, TD, D) C *** _USE_ STEP(1,3) AS TEMP. COPY OF QTR *** CALL V7CPY(P, STEP(1,3), QTR) CALL V7IPR(P, IPIV, TD) PRED = ZERO RAD = V(RADIUS) KB = -1 V(DSTNRM) = ZERO IF (P1 .GT. 0) GO TO 30 NRED = ZERO DS0 = ZERO CALL V7SCP(P, STEP, ZERO) GO TO 90 C 30 CALL V7VMP(P, TG, G, D, -1) CALL V7IPR(P, IPIV, TG) P10 = P1 40 K = KINIT KINIT = -1 V(RADIUS) = RAD - V(DSTNRM) CALL V7VMP(P1, TG, TG, TD, 1) DO 50 I = 1, P1 50 IPIV1(I) = I K0 = MAX0(0, K) CALL L7MST(TD, TG, IERR, IPIV1, K, P1, STEP(1,3), RMAT, STEP, 1 V, WLM) CALL V7VMP(P1, TG, TG, TD, -1) P0 = P1 IF (KA .GE. 0) GO TO 60 NRED = V(NREDUC) DS0 = V(DST0) C 60 KA = K V(RADIUS) = RAD L = P1 + 5 IF (K .LE. K0) CALL D7MLP(P1, LMAT, TD, RMAT, -1) IF (K .GT. K0) CALL D7MLP(P1, LMAT, TD, WLM(L), -1) CALL S7BQN(B, D, STEP(1,2), IPIV, IPIV1, IPIV2, KB, LMAT, 1 LV, NS, P, P1, STEP, TD, TG, V, W, X, X0) PRED = PRED + V(PREDUC) IF (NS .EQ. 0) GO TO 80 P0 = 0 C C *** UPDATE RMAT AND QTR *** C P11 = P1 + 1 L = P10 + P11 DO 70 K = P11, P10 J = L - K I = IPIV2(J) IF (I .LT. J) CALL Q7RSH(I, J, .TRUE., QTR, RMAT, W) 70 CONTINUE C 80 IF (KB .GT. 0) GO TO 90 C C *** UPDATE LOCAL COPY OF QTR *** C CALL V7VMP(P10, W, STEP(1,2), TD, -1) CALL L7TVM(P10, W, LMAT, W) CALL V2AXY(P10, STEP(1,3), ONE, W, QTR) GO TO 40 C 90 V(DST0) = DS0 V(NREDUC) = NRED V(PREDUC) = PRED V(GTSTEP) = D7TPR(P, G, STEP) C 999 RETURN C *** LAST LINE OF L7MSB FOLLOWS *** END PyBDSF-1.10.1/src/port3/l7mst.f000066400000000000000000000400031420247104600156710ustar00rootroot00000000000000 SUBROUTINE L7MST(D, G, IERR, IPIVOT, KA, P, QTR, R, STEP, V, W) C C *** COMPUTE LEVENBERG-MARQUARDT STEP USING MORE-HEBDEN TECHNIQUE ** C *** NL2SOL VERSION 2.2. *** C C *** PARAMETER DECLARATIONS *** C INTEGER IERR, KA, P INTEGER IPIVOT(P) REAL D(P), G(P), QTR(P), R(1), STEP(P), V(21), W(1) C DIMENSION W(P*(P+5)/2 + 4) C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** PURPOSE *** C C GIVEN THE R MATRIX FROM THE QR DECOMPOSITION OF A JACOBIAN C MATRIX, J, AS WELL AS Q-TRANSPOSE TIMES THE CORRESPONDING C RESIDUAL VECTOR, RESID, THIS SUBROUTINE COMPUTES A LEVENBERG- C MARQUARDT STEP OF APPROXIMATE LENGTH V(RADIUS) BY THE MORE- C TECHNIQUE. C C *** PARAMETER DESCRIPTION *** C C D (IN) = THE SCALE VECTOR. C G (IN) = THE GRADIENT VECTOR (J**T)*R. C IERR (I/O) = RETURN CODE FROM QRFACT OR Q7RGS -- 0 MEANS R HAS C FULL RANK. C IPIVOT (I/O) = PERMUTATION ARRAY FROM QRFACT OR Q7RGS, WHICH COMPUTE C QR DECOMPOSITIONS WITH COLUMN PIVOTING. C KA (I/O). KA .LT. 0 ON INPUT MEANS THIS IS THE FIRST CALL ON C L7MST FOR THE CURRENT R AND QTR. ON OUTPUT KA CON- C TAINS THE NUMBER OF HEBDEN ITERATIONS NEEDED TO DETERMINE C STEP. KA = 0 MEANS A GAUSS-NEWTON STEP. C P (IN) = NUMBER OF PARAMETERS. C QTR (IN) = (Q**T)*RESID = Q-TRANSPOSE TIMES THE RESIDUAL VECTOR. C R (IN) = THE R MATRIX, STORED COMPACTLY BY COLUMNS. C STEP (OUT) = THE LEVENBERG-MARQUARDT STEP COMPUTED. C V (I/O) CONTAINS VARIOUS CONSTANTS AND VARIABLES DESCRIBED BELOW. C W (I/O) = WORKSPACE OF LENGTH P*(P+5)/2 + 4. C C *** ENTRIES IN V *** C C V(DGNORM) (I/O) = 2-NORM OF (D**-1)*G. C V(DSTNRM) (I/O) = 2-NORM OF D*STEP. C V(DST0) (I/O) = 2-NORM OF GAUSS-NEWTON STEP (FOR NONSING. J). C V(EPSLON) (IN) = MAX. REL. ERROR ALLOWED IN TWONORM(R)**2 MINUS C TWONORM(R - J*STEP)**2. (SEE ALGORITHM NOTES BELOW.) C V(GTSTEP) (OUT) = INNER PRODUCT BETWEEN G AND STEP. C V(NREDUC) (OUT) = HALF THE REDUCTION IN THE SUM OF SQUARES PREDICTED C FOR A GAUSS-NEWTON STEP. C V(PHMNFC) (IN) = TOL. (TOGETHER WITH V(PHMXFC)) FOR ACCEPTING STEP C (MORE*S SIGMA). THE ERROR V(DSTNRM) - V(RADIUS) MUST LIE C BETWEEN V(PHMNFC)*V(RADIUS) AND V(PHMXFC)*V(RADIUS). C V(PHMXFC) (IN) (SEE V(PHMNFC).) C V(PREDUC) (OUT) = HALF THE REDUCTION IN THE SUM OF SQUARES PREDICTED C BY THE STEP RETURNED. C V(RADIUS) (IN) = RADIUS OF CURRENT (SCALED) TRUST REGION. C V(RAD0) (I/O) = VALUE OF V(RADIUS) FROM PREVIOUS CALL. C V(STPPAR) (I/O) = MARQUARDT PARAMETER (OR ITS NEGATIVE IF THE SPECIAL C CASE MENTIONED BELOW IN THE ALGORITHM NOTES OCCURS). C C NOTE -- SEE DATA STATEMENT BELOW FOR VALUES OF ABOVE SUBSCRIPTS. C C *** USAGE NOTES *** C C IF IT IS DESIRED TO RECOMPUTE STEP USING A DIFFERENT VALUE OF C V(RADIUS), THEN THIS ROUTINE MAY BE RESTARTED BY CALLING IT C WITH ALL PARAMETERS UNCHANGED EXCEPT V(RADIUS). (THIS EXPLAINS C WHY MANY PARAMETERS ARE LISTED AS I/O). ON AN INTIIAL CALL (ONE C WITH KA = -1), THE CALLER NEED ONLY HAVE INITIALIZED D, G, KA, P, C QTR, R, V(EPSLON), V(PHMNFC), V(PHMXFC), V(RADIUS), AND V(RAD0). C C *** APPLICATION AND USAGE RESTRICTIONS *** C C THIS ROUTINE IS CALLED AS PART OF THE NL2SOL (NONLINEAR LEAST- C SQUARES) PACKAGE (REF. 1). C C *** ALGORITHM NOTES *** C C THIS CODE IMPLEMENTS THE STEP COMPUTATION SCHEME DESCRIBED IN C REFS. 2 AND 4. FAST GIVENS TRANSFORMATIONS (SEE REF. 3, PP. 60- C 62) ARE USED TO COMPUTE STEP WITH A NONZERO MARQUARDT PARAMETER. C A SPECIAL CASE OCCURS IF J IS (NEARLY) SINGULAR AND V(RADIUS) C IS SUFFICIENTLY LARGE. IN THIS CASE THE STEP RETURNED IS SUCH C THAT TWONORM(R)**2 - TWONORM(R - J*STEP)**2 DIFFERS FROM ITS C OPTIMAL VALUE BY LESS THAN V(EPSLON) TIMES THIS OPTIMAL VALUE, C WHERE J AND R DENOTE THE ORIGINAL JACOBIAN AND RESIDUAL. (SEE C REF. 2 FOR MORE DETAILS.) C C *** FUNCTIONS AND SUBROUTINES CALLED *** C C D7TPR - RETURNS INNER PRODUCT OF TWO VECTORS. C L7ITV - APPLY INVERSE-TRANSPOSE OF COMPACT LOWER TRIANG. MATRIX. C L7IVM - APPLY INVERSE OF COMPACT LOWER TRIANG. MATRIX. C V7CPY - COPIES ONE VECTOR TO ANOTHER. C V2NRM - RETURNS 2-NORM OF A VECTOR. C C *** REFERENCES *** C C 1. DENNIS, J.E., GAY, D.M., AND WELSCH, R.E. (1981), AN ADAPTIVE C NONLINEAR LEAST-SQUARES ALGORITHM, ACM TRANS. MATH. C SOFTWARE, VOL. 7, NO. 3. C 2. GAY, D.M. (1981), COMPUTING OPTIMAL LOCALLY CONSTRAINED STEPS, C SIAM J. SCI. STATIST. COMPUTING, VOL. 2, NO. 2, PP. C 186-197. C 3. LAWSON, C.L., AND HANSON, R.J. (1974), SOLVING LEAST SQUARES C PROBLEMS, PRENTICE-HALL, ENGLEWOOD CLIFFS, N.J. C 4. MORE, J.J. (1978), THE LEVENBERG-MARQUARDT ALGORITHM, IMPLEMEN- C TATION AND THEORY, PP.105-116 OF SPRINGER LECTURE NOTES C IN MATHEMATICS NO. 630, EDITED BY G.A. WATSON, SPRINGER- C VERLAG, BERLIN AND NEW YORK. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, AND C MCS-7906671. C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DSTSAV, I, IP1, I1, J1, K, KALIM, L, LK0, PHIPIN, 1 PP1O2, RES, RES0, RMAT, RMAT0, UK0 REAL A, ADI, ALPHAK, B, DFACSQ, DST, DTOL, D1, D2, 1 LK, OLDPHI, PHI, PHIMAX, PHIMIN, PSIFAC, RAD, 2 SI, SJ, SQRTAK, T, TWOPSI, UK, WL C C *** CONSTANTS *** REAL DFAC, EIGHT, HALF, NEGONE, ONE, P001, THREE, 1 TTOL, ZERO REAL BIG C C *** INTRINSIC FUNCTIONS *** C/+ REAL SQRT C/ C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C REAL D7TPR, L7SVN, R7MDC, V2NRM EXTERNAL D7TPR, L7ITV, L7IVM, L7SVN, R7MDC, V7CPY, V2NRM C C *** SUBSCRIPTS FOR V *** C INTEGER DGNORM, DSTNRM, DST0, EPSLON, GTSTEP, NREDUC, PHMNFC, 1 PHMXFC, PREDUC, RADIUS, RAD0, STPPAR C/6 C DATA DGNORM/1/, DSTNRM/2/, DST0/3/, EPSLON/19/, GTSTEP/4/, C 1 NREDUC/6/, PHMNFC/20/, PHMXFC/21/, PREDUC/7/, RADIUS/8/, C 2 RAD0/9/, STPPAR/5/ C/7 PARAMETER (DGNORM=1, DSTNRM=2, DST0=3, EPSLON=19, GTSTEP=4, 1 NREDUC=6, PHMNFC=20, PHMXFC=21, PREDUC=7, RADIUS=8, 2 RAD0=9, STPPAR=5) C/ C C/6 C DATA DFAC/256.E+0/, EIGHT/8.E+0/, HALF/0.5E+0/, NEGONE/-1.E+0/, C 1 ONE/1.E+0/, P001/1.E-3/, THREE/3.E+0/, TTOL/2.5E+0/, C 2 ZERO/0.E+0/ C/7 PARAMETER (DFAC=256.E+0, EIGHT=8.E+0, HALF=0.5E+0, NEGONE=-1.E+0, 1 ONE=1.E+0, P001=1.E-3, THREE=3.E+0, TTOL=2.5E+0, 2 ZERO=0.E+0) SAVE BIG C/ DATA BIG/0.E+0/ C C *** BODY *** C C *** FOR _USE_ IN RECOMPUTING STEP, THE FINAL VALUES OF LK AND UK, C *** THE INVERSE DERIVATIVE OF MORE*S PHI AT 0 (FOR NONSING. J) C *** AND THE VALUE RETURNED AS V(DSTNRM) ARE STORED AT W(LK0), C *** W(UK0), W(PHIPIN), AND W(DSTSAV) RESPECTIVELY. LK0 = P + 1 PHIPIN = LK0 + 1 UK0 = PHIPIN + 1 DSTSAV = UK0 + 1 RMAT0 = DSTSAV C *** A COPY OF THE R-MATRIX FROM THE QR DECOMPOSITION OF J IS C *** STORED IN W STARTING AT W(RMAT), AND A COPY OF THE RESIDUAL C *** VECTOR IS STORED IN W STARTING AT W(RES). THE LOOPS BELOW C *** THAT UPDATE THE QR DECOMP. FOR A NONZERO MARQUARDT PARAMETER C *** WORK ON THESE COPIES. RMAT = RMAT0 + 1 PP1O2 = P * (P + 1) / 2 RES0 = PP1O2 + RMAT0 RES = RES0 + 1 RAD = V(RADIUS) IF (RAD .GT. ZERO) 1 PSIFAC = V(EPSLON)/((EIGHT*(V(PHMNFC) + ONE) + THREE) * RAD**2) IF (BIG .LE. ZERO) BIG = R7MDC(6) PHIMAX = V(PHMXFC) * RAD PHIMIN = V(PHMNFC) * RAD C *** DTOL, DFAC, AND DFACSQ ARE USED IN RESCALING THE FAST GIVENS C *** REPRESENTATION OF THE UPDATED QR DECOMPOSITION. DTOL = ONE/DFAC DFACSQ = DFAC*DFAC C *** OLDPHI IS USED TO DETECT LIMITS OF NUMERICAL ACCURACY. IF C *** WE RECOMPUTE STEP AND IT DOES NOT CHANGE, THEN WE ACCEPT IT. OLDPHI = ZERO LK = ZERO UK = ZERO KALIM = KA + 12 C C *** START OR RESTART, DEPENDING ON KA *** C IF (KA) 10, 20, 370 C C *** FRESH START -- COMPUTE V(NREDUC) *** C 10 KA = 0 KALIM = 12 K = P IF (IERR .NE. 0) K = IABS(IERR) - 1 V(NREDUC) = HALF* D7TPR(K, QTR, QTR) C C *** SET UP TO TRY INITIAL GAUSS-NEWTON STEP *** C 20 V(DST0) = NEGONE IF (IERR .NE. 0) GO TO 90 T = L7SVN(P, R, STEP, W(RES)) IF (T .GE. ONE) GO TO 30 IF ( V2NRM(P, QTR) .GE. BIG*T) GO TO 90 C C *** COMPUTE GAUSS-NEWTON STEP *** C C *** NOTE -- THE R-MATRIX IS STORED COMPACTLY BY COLUMNS IN C *** R(1), R(2), R(3), ... IT IS THE TRANSPOSE OF A C *** LOWER TRIANGULAR MATRIX STORED COMPACTLY BY ROWS, AND WE C *** TREAT IT AS SUCH WHEN USING L7ITV AND L7IVM. 30 CALL L7ITV(P, W, R, QTR) C *** TEMPORARILY STORE PERMUTED -D*STEP IN STEP. DO 60 I = 1, P J1 = IPIVOT(I) STEP(I) = D(J1)*W(I) 60 CONTINUE DST = V2NRM(P, STEP) V(DST0) = DST PHI = DST - RAD IF (PHI .LE. PHIMAX) GO TO 410 C *** IF THIS IS A RESTART, GO TO 110 *** IF (KA .GT. 0) GO TO 110 C C *** GAUSS-NEWTON STEP WAS UNACCEPTABLE. COMPUTE L0 *** C DO 70 I = 1, P J1 = IPIVOT(I) STEP(I) = D(J1)*(STEP(I)/DST) 70 CONTINUE CALL L7IVM(P, STEP, R, STEP) T = ONE / V2NRM(P, STEP) W(PHIPIN) = (T/RAD)*T LK = PHI*W(PHIPIN) C C *** COMPUTE U0 *** C 90 DO 100 I = 1, P 100 W(I) = G(I)/D(I) V(DGNORM) = V2NRM(P, W) UK = V(DGNORM)/RAD IF (UK .LE. ZERO) GO TO 390 C C *** ALPHAK WILL BE USED AS THE CURRENT MARQUARDT PARAMETER. WE C *** _USE_ MORE*S SCHEME FOR INITIALIZING IT. C ALPHAK = ABS(V(STPPAR)) * V(RAD0)/RAD ALPHAK = AMIN1(UK, AMAX1(ALPHAK, LK)) C C C *** TOP OF LOOP -- INCREMENT KA, COPY R TO RMAT, QTR TO RES *** C 110 KA = KA + 1 CALL V7CPY(PP1O2, W(RMAT), R) CALL V7CPY(P, W(RES), QTR) C C *** SAFEGUARD ALPHAK AND INITIALIZE FAST GIVENS SCALE VECTOR. *** C IF (ALPHAK .LE. ZERO .OR. ALPHAK .LT. LK .OR. ALPHAK .GE. UK) 1 ALPHAK = UK * AMAX1(P001, SQRT(LK/UK)) IF (ALPHAK .LE. ZERO) ALPHAK = HALF * UK SQRTAK = SQRT(ALPHAK) DO 120 I = 1, P 120 W(I) = ONE C C *** ADD ALPHAK*D AND UPDATE QR DECOMP. USING FAST GIVENS TRANS. *** C DO 270 I = 1, P C *** GENERATE, APPLY 1ST GIVENS TRANS. FOR ROW I OF ALPHAK*D. C *** (USE STEP TO STORE TEMPORARY ROW) *** L = I*(I+1)/2 + RMAT0 WL = W(L) D2 = ONE D1 = W(I) J1 = IPIVOT(I) ADI = SQRTAK*D(J1) IF (ADI .GE. ABS(WL)) GO TO 150 130 A = ADI/WL B = D2*A/D1 T = A*B + ONE IF (T .GT. TTOL) GO TO 150 W(I) = D1/T D2 = D2/T W(L) = T*WL A = -A DO 140 J1 = I, P L = L + J1 STEP(J1) = A*W(L) 140 CONTINUE GO TO 170 C 150 B = WL/ADI A = D1*B/D2 T = A*B + ONE IF (T .GT. TTOL) GO TO 130 W(I) = D2/T D2 = D1/T W(L) = T*ADI DO 160 J1 = I, P L = L + J1 WL = W(L) STEP(J1) = -WL W(L) = A*WL 160 CONTINUE C 170 IF (I .EQ. P) GO TO 280 C C *** NOW _USE_ GIVENS TRANS. TO ZERO ELEMENTS OF TEMP. ROW *** C IP1 = I + 1 DO 260 I1 = IP1, P SI = STEP(I1-1) IF (SI .EQ. ZERO) GO TO 260 L = I1*(I1+1)/2 + RMAT0 WL = W(L) D1 = W(I1) C C *** RESCALE ROW I1 IF NECESSARY *** C IF (D1 .GE. DTOL) GO TO 190 D1 = D1*DFACSQ WL = WL/DFAC K = L DO 180 J1 = I1, P K = K + J1 W(K) = W(K)/DFAC 180 CONTINUE C C *** _USE_ GIVENS TRANS. TO ZERO NEXT ELEMENT OF TEMP. ROW C 190 IF ( ABS(SI) .GT. ABS(WL)) GO TO 220 200 A = SI/WL B = D2*A/D1 T = A*B + ONE IF (T .GT. TTOL) GO TO 220 W(L) = T*WL W(I1) = D1/T D2 = D2/T DO 210 J1 = I1, P L = L + J1 WL = W(L) SJ = STEP(J1) W(L) = WL + B*SJ STEP(J1) = SJ - A*WL 210 CONTINUE GO TO 240 C 220 B = WL/SI A = D1*B/D2 T = A*B + ONE IF (T .GT. TTOL) GO TO 200 W(I1) = D2/T D2 = D1/T W(L) = T*SI DO 230 J1 = I1, P L = L + J1 WL = W(L) SJ = STEP(J1) W(L) = A*WL + SJ STEP(J1) = B*SJ - WL 230 CONTINUE C C *** RESCALE TEMP. ROW IF NECESSARY *** C 240 IF (D2 .GE. DTOL) GO TO 260 D2 = D2*DFACSQ DO 250 K = I1, P 250 STEP(K) = STEP(K)/DFAC 260 CONTINUE 270 CONTINUE C C *** COMPUTE STEP *** C 280 CALL L7ITV(P, W(RES), W(RMAT), W(RES)) C *** RECOVER STEP AND STORE PERMUTED -D*STEP AT W(RES) *** DO 290 I = 1, P J1 = IPIVOT(I) K = RES0 + I T = W(K) STEP(J1) = -T W(K) = T*D(J1) 290 CONTINUE DST = V2NRM(P, W(RES)) PHI = DST - RAD IF (PHI .LE. PHIMAX .AND. PHI .GE. PHIMIN) GO TO 430 IF (OLDPHI .EQ. PHI) GO TO 430 OLDPHI = PHI C C *** CHECK FOR (AND HANDLE) SPECIAL CASE *** C IF (PHI .GT. ZERO) GO TO 310 IF (KA .GE. KALIM) GO TO 430 TWOPSI = ALPHAK*DST*DST - D7TPR(P, STEP, G) IF (ALPHAK .GE. TWOPSI*PSIFAC) GO TO 310 V(STPPAR) = -ALPHAK GO TO 440 C C *** UNACCEPTABLE STEP -- UPDATE LK, UK, ALPHAK, AND TRY AGAIN *** C 300 IF (PHI .LT. ZERO) UK = AMIN1(UK, ALPHAK) GO TO 320 310 IF (PHI .LT. ZERO) UK = ALPHAK 320 DO 330 I = 1, P J1 = IPIVOT(I) K = RES0 + I STEP(I) = D(J1) * (W(K)/DST) 330 CONTINUE CALL L7IVM(P, STEP, W(RMAT), STEP) DO 340 I = 1, P 340 STEP(I) = STEP(I) / SQRT(W(I)) T = ONE / V2NRM(P, STEP) ALPHAK = ALPHAK + T*PHI*T/RAD LK = AMAX1(LK, ALPHAK) ALPHAK = LK GO TO 110 C C *** RESTART *** C 370 LK = W(LK0) UK = W(UK0) IF (V(DST0) .GT. ZERO .AND. V(DST0) - RAD .LE. PHIMAX) GO TO 20 ALPHAK = ABS(V(STPPAR)) DST = W(DSTSAV) PHI = DST - RAD T = V(DGNORM)/RAD IF (RAD .GT. V(RAD0)) GO TO 380 C C *** SMALLER RADIUS *** UK = T IF (ALPHAK .LE. ZERO) LK = ZERO IF (V(DST0) .GT. ZERO) LK = AMAX1(LK, (V(DST0)-RAD)*W(PHIPIN)) GO TO 300 C C *** BIGGER RADIUS *** 380 IF (ALPHAK .LE. ZERO .OR. UK .GT. T) UK = T LK = ZERO IF (V(DST0) .GT. ZERO) LK = AMAX1(LK, (V(DST0)-RAD)*W(PHIPIN)) GO TO 300 C C *** SPECIAL CASE -- RAD .LE. 0 OR (G = 0 AND J IS SINGULAR) *** C 390 V(STPPAR) = ZERO DST = ZERO LK = ZERO UK = ZERO V(GTSTEP) = ZERO V(PREDUC) = ZERO DO 400 I = 1, P 400 STEP(I) = ZERO GO TO 450 C C *** ACCEPTABLE GAUSS-NEWTON STEP -- RECOVER STEP FROM W *** C 410 ALPHAK = ZERO DO 420 I = 1, P J1 = IPIVOT(I) STEP(J1) = -W(I) 420 CONTINUE C C *** SAVE VALUES FOR _USE_ IN A POSSIBLE RESTART *** C 430 V(STPPAR) = ALPHAK 440 V(GTSTEP) = AMIN1( D7TPR(P,STEP,G), ZERO) V(PREDUC) = HALF * (ALPHAK*DST*DST - V(GTSTEP)) 450 V(DSTNRM) = DST W(DSTSAV) = DST W(LK0) = LK W(UK0) = UK V(RAD0) = RAD C 999 RETURN C C *** LAST CARD OF L7MST FOLLOWS *** END PyBDSF-1.10.1/src/port3/l7nvr.f000066400000000000000000000021271420247104600157000ustar00rootroot00000000000000 SUBROUTINE L7NVR(N, LIN, L) C C *** COMPUTE LIN = L**-1, BOTH N X N LOWER TRIANG. STORED *** C *** COMPACTLY BY ROWS. LIN AND L MAY SHARE THE SAME STORAGE. *** C C *** PARAMETERS *** C INTEGER N REAL L(1), LIN(1) C DIMENSION L(N*(N+1)/2), LIN(N*(N+1)/2) C C *** LOCAL VARIABLES *** C INTEGER I, II, IM1, JJ, J0, J1, K, K0, NP1 REAL ONE, T, ZERO C/6 C DATA ONE/1.E+0/, ZERO/0.E+0/ C/7 PARAMETER (ONE=1.E+0, ZERO=0.E+0) C/ C C *** BODY *** C NP1 = N + 1 J0 = N*(NP1)/2 DO 30 II = 1, N I = NP1 - II LIN(J0) = ONE/L(J0) IF (I .LE. 1) GO TO 999 J1 = J0 IM1 = I - 1 DO 20 JJ = 1, IM1 T = ZERO J0 = J1 K0 = J1 - JJ DO 10 K = 1, JJ T = T - L(K0)*LIN(J0) J0 = J0 - 1 K0 = K0 + K - I 10 CONTINUE LIN(J0) = T/L(K0) 20 CONTINUE J0 = J0 - 1 30 CONTINUE 999 RETURN C *** LAST CARD OF L7NVR FOLLOWS *** END PyBDSF-1.10.1/src/port3/l7sqr.f000066400000000000000000000016351420247104600157030ustar00rootroot00000000000000 SUBROUTINE L7SQR(N, A, L) C C *** COMPUTE A = LOWER TRIANGLE OF L*(L**T), WITH BOTH C *** L AND A STORED COMPACTLY BY ROWS. (BOTH MAY OCCUPY THE C *** SAME STORAGE. C C *** PARAMETERS *** C INTEGER N REAL A(1), L(1) C DIMENSION A(N*(N+1)/2), L(N*(N+1)/2) C C *** LOCAL VARIABLES *** C INTEGER I, II, IJ, IK, IP1, I0, J, JJ, JK, J0, K, NP1 REAL T C NP1 = N + 1 I0 = N*(N+1)/2 DO 30 II = 1, N I = NP1 - II IP1 = I + 1 I0 = I0 - I J0 = I*(I+1)/2 DO 20 JJ = 1, I J = IP1 - JJ J0 = J0 - J T = 0.0E0 DO 10 K = 1, J IK = I0 + K JK = J0 + K T = T + L(IK)*L(JK) 10 CONTINUE IJ = I0 + J A(IJ) = T 20 CONTINUE 30 CONTINUE 999 RETURN END PyBDSF-1.10.1/src/port3/l7srt.f000066400000000000000000000031601420247104600157010ustar00rootroot00000000000000 SUBROUTINE L7SRT(N1, N, L, A, IRC) C C *** COMPUTE ROWS N1 THROUGH N OF THE CHOLESKY FACTOR L OF C *** A = L*(L**T), WHERE L AND THE LOWER TRIANGLE OF A ARE BOTH C *** STORED COMPACTLY BY ROWS (AND MAY OCCUPY THE SAME STORAGE). C *** IRC = 0 MEANS ALL WENT WELL. IRC = J MEANS THE LEADING C *** PRINCIPAL J X J SUBMATRIX OF A IS NOT POSITIVE DEFINITE -- C *** AND L(J*(J+1)/2) CONTAINS THE (NONPOS.) REDUCED J-TH DIAGONAL. C C *** PARAMETERS *** C INTEGER N1, N, IRC REAL L(1), A(1) C DIMENSION L(N*(N+1)/2), A(N*(N+1)/2) C C *** LOCAL VARIABLES *** C INTEGER I, IJ, IK, IM1, I0, J, JK, JM1, J0, K REAL T, TD, ZERO C C *** INTRINSIC FUNCTIONS *** C/+ REAL SQRT C/ C/6 C DATA ZERO/0.E+0/ C/7 PARAMETER (ZERO=0.E+0) C/ C C *** BODY *** C I0 = N1 * (N1 - 1) / 2 DO 50 I = N1, N TD = ZERO IF (I .EQ. 1) GO TO 40 J0 = 0 IM1 = I - 1 DO 30 J = 1, IM1 T = ZERO IF (J .EQ. 1) GO TO 20 JM1 = J - 1 DO 10 K = 1, JM1 IK = I0 + K JK = J0 + K T = T + L(IK)*L(JK) 10 CONTINUE 20 IJ = I0 + J J0 = J0 + J T = (A(IJ) - T) / L(J0) L(IJ) = T TD = TD + T*T 30 CONTINUE 40 I0 = I0 + I T = A(I0) - TD IF (T .LE. ZERO) GO TO 60 L(I0) = SQRT(T) 50 CONTINUE C IRC = 0 GO TO 999 C 60 L(I0) = T IRC = I C 999 RETURN C C *** LAST CARD OF L7SRT *** END PyBDSF-1.10.1/src/port3/l7svn.f000066400000000000000000000130771420247104600157070ustar00rootroot00000000000000 REAL FUNCTION L7SVN(P, L, X, Y) C C *** ESTIMATE SMALLEST SING. VALUE OF PACKED LOWER TRIANG. MATRIX L C C *** PARAMETER DECLARATIONS *** C INTEGER P REAL L(1), X(P), Y(P) C DIMENSION L(P*(P+1)/2) C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** PURPOSE *** C C THIS FUNCTION RETURNS A GOOD OVER-ESTIMATE OF THE SMALLEST C SINGULAR VALUE OF THE PACKED LOWER TRIANGULAR MATRIX L. C C *** PARAMETER DESCRIPTION *** C C P (IN) = THE ORDER OF L. L IS A P X P LOWER TRIANGULAR MATRIX. C L (IN) = ARRAY HOLDING THE ELEMENTS OF L IN ROW ORDER, I.E. C L(1,1), L(2,1), L(2,2), L(3,1), L(3,2), L(3,3), ETC. C X (OUT) IF L7SVN RETURNS A POSITIVE VALUE, THEN X IS A NORMALIZED C APPROXIMATE LEFT SINGULAR VECTOR CORRESPONDING TO THE C SMALLEST SINGULAR VALUE. THIS APPROXIMATION MAY BE VERY C CRUDE. IF L7SVN RETURNS ZERO, THEN SOME COMPONENTS OF X C ARE ZERO AND THE REST RETAIN THEIR INPUT VALUES. C Y (OUT) IF L7SVN RETURNS A POSITIVE VALUE, THEN Y = (L**-1)*X IS AN C UNNORMALIZED APPROXIMATE RIGHT SINGULAR VECTOR CORRESPOND- C ING TO THE SMALLEST SINGULAR VALUE. THIS APPROXIMATION C MAY BE CRUDE. IF L7SVN RETURNS ZERO, THEN Y RETAINS ITS C INPUT VALUE. THE CALLER MAY PASS THE SAME VECTOR FOR X C AND Y (NONSTANDARD FORTRAN USAGE), IN WHICH CASE Y OVER- C WRITES X (FOR NONZERO L7SVN RETURNS). C C *** ALGORITHM NOTES *** C C THE ALGORITHM IS BASED ON (1), WITH THE ADDITIONAL PROVISION THAT C L7SVN = 0 IS RETURNED IF THE SMALLEST DIAGONAL ELEMENT OF L C (IN MAGNITUDE) IS NOT MORE THAN THE UNIT ROUNDOFF TIMES THE C LARGEST. THE ALGORITHM USES A RANDOM NUMBER GENERATOR PROPOSED C IN (4), WHICH PASSES THE SPECTRAL TEST WITH FLYING COLORS -- SEE C (2) AND (3). C C *** SUBROUTINES AND FUNCTIONS CALLED *** C C V2NRM - FUNCTION, RETURNS THE 2-NORM OF A VECTOR. C C *** REFERENCES *** C C (1) CLINE, A., MOLER, C., STEWART, G., AND WILKINSON, J.H.(1977), C AN ESTIMATE FOR THE CONDITION NUMBER OF A MATRIX, REPORT C TM-310, APPLIED MATH. DIV., ARGONNE NATIONAL LABORATORY. C C (2) HOAGLIN, D.C. (1976), THEORETICAL PROPERTIES OF CONGRUENTIAL C RANDOM-NUMBER GENERATORS -- AN EMPIRICAL VIEW, C MEMORANDUM NS-340, DEPT. OF STATISTICS, HARVARD UNIV. C C (3) KNUTH, D.E. (1969), THE ART OF COMPUTER PROGRAMMING, VOL. 2 C (SEMINUMERICAL ALGORITHMS), ADDISON-WESLEY, READING, MASS. C C (4) SMITH, C.S. (1971), MULTIPLICATIVE PSEUDO-RANDOM NUMBER C GENERATORS WITH PRIME MODULUS, J. ASSOC. COMPUT. MACH. 18, C PP. 586-593. C C *** HISTORY *** C C DESIGNED AND CODED BY DAVID M. GAY (WINTER 1977/SUMMER 1978). C C *** GENERAL *** C C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, AND MCS76-11989. C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER I, II, IX, J, JI, JJ, JJJ, JM1, J0, PM1 REAL B, SMINUS, SPLUS, T, XMINUS, XPLUS C C *** CONSTANTS *** C REAL HALF, ONE, R9973, ZERO C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C REAL D7TPR, V2NRM EXTERNAL D7TPR, V2NRM, V2AXY C C/6 C DATA HALF/0.5E+0/, ONE/1.E+0/, R9973/9973.E+0/, ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, ONE=1.E+0, R9973=9973.E+0, ZERO=0.E+0) C/ C C *** BODY *** C IX = 2 PM1 = P - 1 C C *** FIRST CHECK WHETHER TO RETURN L7SVN = 0 AND INITIALIZE X *** C II = 0 J0 = P*PM1/2 JJ = J0 + P IF (L(JJ) .EQ. ZERO) GO TO 110 IX = MOD(3432*IX, 9973) B = HALF*(ONE + FLOAT(IX)/R9973) XPLUS = B / L(JJ) X(P) = XPLUS IF (P .LE. 1) GO TO 60 DO 10 I = 1, PM1 II = II + I IF (L(II) .EQ. ZERO) GO TO 110 JI = J0 + I X(I) = XPLUS * L(JI) 10 CONTINUE C C *** SOLVE (L**T)*X = B, WHERE THE COMPONENTS OF B HAVE RANDOMLY C *** CHOSEN MAGNITUDES IN (.5,1) WITH SIGNS CHOSEN TO MAKE X LARGE. C C DO J = P-1 TO 1 BY -1... DO 50 JJJ = 1, PM1 J = P - JJJ C *** DETERMINE X(J) IN THIS ITERATION. NOTE FOR I = 1,2,...,J C *** THAT X(I) HOLDS THE CURRENT PARTIAL SUM FOR ROW I. IX = MOD(3432*IX, 9973) B = HALF*(ONE + FLOAT(IX)/R9973) XPLUS = (B - X(J)) XMINUS = (-B - X(J)) SPLUS = ABS(XPLUS) SMINUS = ABS(XMINUS) JM1 = J - 1 J0 = J*JM1/2 JJ = J0 + J XPLUS = XPLUS/L(JJ) XMINUS = XMINUS/L(JJ) IF (JM1 .EQ. 0) GO TO 30 DO 20 I = 1, JM1 JI = J0 + I SPLUS = SPLUS + ABS(X(I) + L(JI)*XPLUS) SMINUS = SMINUS + ABS(X(I) + L(JI)*XMINUS) 20 CONTINUE 30 IF (SMINUS .GT. SPLUS) XPLUS = XMINUS X(J) = XPLUS C *** UPDATE PARTIAL SUMS *** IF (JM1 .GT. 0) CALL V2AXY(JM1, X, XPLUS, L(J0+1), X) 50 CONTINUE C C *** NORMALIZE X *** C 60 T = ONE/ V2NRM(P, X) DO 70 I = 1, P 70 X(I) = T*X(I) C C *** SOLVE L*Y = X AND RETURN L7SVN = 1/TWONORM(Y) *** C DO 100 J = 1, P JM1 = J - 1 J0 = J*JM1/2 JJ = J0 + J T = ZERO IF (JM1 .GT. 0) T = D7TPR(JM1, L(J0+1), Y) Y(J) = (X(J) - T) / L(JJ) 100 CONTINUE C L7SVN = ONE/ V2NRM(P, Y) GO TO 999 C 110 L7SVN = ZERO 999 RETURN C *** LAST CARD OF L7SVN FOLLOWS *** END PyBDSF-1.10.1/src/port3/l7svx.f000066400000000000000000000120511420247104600157100ustar00rootroot00000000000000 REAL FUNCTION L7SVX(P, L, X, Y) C C *** ESTIMATE LARGEST SING. VALUE OF PACKED LOWER TRIANG. MATRIX L C C *** PARAMETER DECLARATIONS *** C INTEGER P REAL L(1), X(P), Y(P) C DIMENSION L(P*(P+1)/2) C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** PURPOSE *** C C THIS FUNCTION RETURNS A GOOD UNDER-ESTIMATE OF THE LARGEST C SINGULAR VALUE OF THE PACKED LOWER TRIANGULAR MATRIX L. C C *** PARAMETER DESCRIPTION *** C C P (IN) = THE ORDER OF L. L IS A P X P LOWER TRIANGULAR MATRIX. C L (IN) = ARRAY HOLDING THE ELEMENTS OF L IN ROW ORDER, I.E. C L(1,1), L(2,1), L(2,2), L(3,1), L(3,2), L(3,3), ETC. C X (OUT) IF L7SVX RETURNS A POSITIVE VALUE, THEN X = (L**T)*Y IS AN C (UNNORMALIZED) APPROXIMATE RIGHT SINGULAR VECTOR C CORRESPONDING TO THE LARGEST SINGULAR VALUE. THIS C APPROXIMATION MAY BE CRUDE. C Y (OUT) IF L7SVX RETURNS A POSITIVE VALUE, THEN Y = L*X IS A C NORMALIZED APPROXIMATE LEFT SINGULAR VECTOR CORRESPOND- C ING TO THE LARGEST SINGULAR VALUE. THIS APPROXIMATION C MAY BE VERY CRUDE. THE CALLER MAY PASS THE SAME VECTOR C FOR X AND Y (NONSTANDARD FORTRAN USAGE), IN WHICH CASE X C OVER-WRITES Y. C C *** ALGORITHM NOTES *** C C THE ALGORITHM IS BASED ON ANALOGY WITH (1). IT USES A C RANDOM NUMBER GENERATOR PROPOSED IN (4), WHICH PASSES THE C SPECTRAL TEST WITH FLYING COLORS -- SEE (2) AND (3). C C *** SUBROUTINES AND FUNCTIONS CALLED *** C C V2NRM - FUNCTION, RETURNS THE 2-NORM OF A VECTOR. C C *** REFERENCES *** C C (1) CLINE, A., MOLER, C., STEWART, G., AND WILKINSON, J.H.(1977), C AN ESTIMATE FOR THE CONDITION NUMBER OF A MATRIX, REPORT C TM-310, APPLIED MATH. DIV., ARGONNE NATIONAL LABORATORY. C C (2) HOAGLIN, D.C. (1976), THEORETICAL PROPERTIES OF CONGRUENTIAL C RANDOM-NUMBER GENERATORS -- AN EMPIRICAL VIEW, C MEMORANDUM NS-340, DEPT. OF STATISTICS, HARVARD UNIV. C C (3) KNUTH, D.E. (1969), THE ART OF COMPUTER PROGRAMMING, VOL. 2 C (SEMINUMERICAL ALGORITHMS), ADDISON-WESLEY, READING, MASS. C C (4) SMITH, C.S. (1971), MULTIPLICATIVE PSEUDO-RANDOM NUMBER C GENERATORS WITH PRIME MODULUS, J. ASSOC. COMPUT. MACH. 18, C PP. 586-593. C C *** HISTORY *** C C DESIGNED AND CODED BY DAVID M. GAY (WINTER 1977/SUMMER 1978). C C *** GENERAL *** C C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, AND MCS76-11989. C C+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER I, IX, J, JI, JJ, JJJ, JM1, J0, PM1, PPLUS1 REAL B, BLJI, SMINUS, SPLUS, T, YI C C *** CONSTANTS *** C REAL HALF, ONE, R9973, ZERO C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C REAL D7TPR, V2NRM EXTERNAL D7TPR, V2NRM, V2AXY C C/6 C DATA HALF/0.5E+0/, ONE/1.E+0/, R9973/9973.E+0/, ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, ONE=1.E+0, R9973=9973.E+0, ZERO=0.E+0) C/ C C *** BODY *** C IX = 2 PPLUS1 = P + 1 PM1 = P - 1 C C *** FIRST INITIALIZE X TO PARTIAL SUMS *** C J0 = P*PM1/2 JJ = J0 + P IX = MOD(3432*IX, 9973) B = HALF*(ONE + FLOAT(IX)/R9973) X(P) = B * L(JJ) IF (P .LE. 1) GO TO 40 DO 10 I = 1, PM1 JI = J0 + I X(I) = B * L(JI) 10 CONTINUE C C *** COMPUTE X = (L**T)*B, WHERE THE COMPONENTS OF B HAVE RANDOMLY C *** CHOSEN MAGNITUDES IN (.5,1) WITH SIGNS CHOSEN TO MAKE X LARGE. C C DO J = P-1 TO 1 BY -1... DO 30 JJJ = 1, PM1 J = P - JJJ C *** DETERMINE X(J) IN THIS ITERATION. NOTE FOR I = 1,2,...,J C *** THAT X(I) HOLDS THE CURRENT PARTIAL SUM FOR ROW I. IX = MOD(3432*IX, 9973) B = HALF*(ONE + FLOAT(IX)/R9973) JM1 = J - 1 J0 = J*JM1/2 SPLUS = ZERO SMINUS = ZERO DO 20 I = 1, J JI = J0 + I BLJI = B * L(JI) SPLUS = SPLUS + ABS(BLJI + X(I)) SMINUS = SMINUS + ABS(BLJI - X(I)) 20 CONTINUE IF (SMINUS .GT. SPLUS) B = -B X(J) = ZERO C *** UPDATE PARTIAL SUMS *** CALL V2AXY(J, X, B, L(J0+1), X) 30 CONTINUE C C *** NORMALIZE X *** C 40 T = V2NRM(P, X) IF (T .LE. ZERO) GO TO 80 T = ONE / T DO 50 I = 1, P 50 X(I) = T*X(I) C C *** COMPUTE L*X = Y AND RETURN SVMAX = TWONORM(Y) *** C DO 60 JJJ = 1, P J = PPLUS1 - JJJ JI = J*(J-1)/2 + 1 Y(J) = D7TPR(J, L(JI), X) 60 CONTINUE C C *** NORMALIZE Y AND SET X = (L**T)*Y *** C T = ONE / V2NRM(P, Y) JI = 1 DO 70 I = 1, P YI = T * Y(I) X(I) = ZERO CALL V2AXY(I, X, YI, L(JI), X) JI = JI + I 70 CONTINUE L7SVX = V2NRM(P, X) GO TO 999 C 80 L7SVX = ZERO C 999 RETURN C *** LAST CARD OF L7SVX FOLLOWS *** END PyBDSF-1.10.1/src/port3/l7tsq.f000066400000000000000000000015511420247104600157020ustar00rootroot00000000000000 SUBROUTINE L7TSQ(N, A, L) C C *** SET A TO LOWER TRIANGLE OF (L**T) * L *** C C *** L = N X N LOWER TRIANG. MATRIX STORED ROWWISE. *** C *** A IS ALSO STORED ROWWISE AND MAY SHARE STORAGE WITH L. *** C INTEGER N REAL A(1), L(1) C DIMENSION A(N*(N+1)/2), L(N*(N+1)/2) C INTEGER I, II, IIM1, I1, J, K, M REAL LII, LJ C II = 0 DO 50 I = 1, N I1 = II + 1 II = II + I M = 1 IF (I .EQ. 1) GO TO 30 IIM1 = II - 1 DO 20 J = I1, IIM1 LJ = L(J) DO 10 K = I1, J A(M) = A(M) + LJ*L(K) M = M + 1 10 CONTINUE 20 CONTINUE 30 LII = L(II) DO 40 J = I1, II 40 A(J) = LII * L(J) 50 CONTINUE C 999 RETURN C *** LAST CARD OF L7TSQ FOLLOWS *** END PyBDSF-1.10.1/src/port3/l7tvm.f000066400000000000000000000012441420247104600157000ustar00rootroot00000000000000 SUBROUTINE L7TVM(N, X, L, Y) C C *** COMPUTE X = (L**T)*Y, WHERE L IS AN N X N LOWER C *** TRIANGULAR MATRIX STORED COMPACTLY BY ROWS. X AND Y MAY C *** OCCUPY THE SAME STORAGE. *** C INTEGER N REAL X(N), L(1), Y(N) C DIMENSION L(N*(N+1)/2) INTEGER I, IJ, I0, J REAL YI, ZERO C/6 C DATA ZERO/0.E+0/ C/7 PARAMETER (ZERO=0.E+0) C/ C I0 = 0 DO 20 I = 1, N YI = Y(I) X(I) = ZERO DO 10 J = 1, I IJ = I0 + J X(J) = X(J) + YI*L(IJ) 10 CONTINUE I0 = I0 + I 20 CONTINUE 999 RETURN C *** LAST CARD OF L7TVM FOLLOWS *** END PyBDSF-1.10.1/src/port3/l7upd.f000066400000000000000000000102401420247104600156560ustar00rootroot00000000000000 SUBROUTINE L7UPD(BETA, GAMMA, L, LAMBDA, LPLUS, N, W, Z) C C *** COMPUTE LPLUS = SECANT UPDATE OF L *** C C *** PARAMETER DECLARATIONS *** C INTEGER N REAL BETA(N), GAMMA(N), L(1), LAMBDA(N), LPLUS(1), 1 W(N), Z(N) C DIMENSION L(N*(N+1)/2), LPLUS(N*(N+1)/2) C C-------------------------- PARAMETER USAGE -------------------------- C C BETA = SCRATCH VECTOR. C GAMMA = SCRATCH VECTOR. C L (INPUT) LOWER TRIANGULAR MATRIX, STORED ROWWISE. C LAMBDA = SCRATCH VECTOR. C LPLUS (OUTPUT) LOWER TRIANGULAR MATRIX, STORED ROWWISE, WHICH MAY C OCCUPY THE SAME STORAGE AS L. C N (INPUT) LENGTH OF VECTOR PARAMETERS AND ORDER OF MATRICES. C W (INPUT, DESTROYED ON OUTPUT) RIGHT SINGULAR VECTOR OF RANK 1 C CORRECTION TO L. C Z (INPUT, DESTROYED ON OUTPUT) LEFT SINGULAR VECTOR OF RANK 1 C CORRECTION TO L. C C------------------------------- NOTES ------------------------------- C C *** APPLICATION AND USAGE RESTRICTIONS *** C C THIS ROUTINE UPDATES THE CHOLESKY FACTOR L OF A SYMMETRIC C POSITIVE DEFINITE MATRIX TO WHICH A SECANT UPDATE IS BEING C APPLIED -- IT COMPUTES A CHOLESKY FACTOR LPLUS OF C L * (I + Z*W**T) * (I + W*Z**T) * L**T. IT IS ASSUMED THAT W C AND Z HAVE BEEN CHOSEN SO THAT THE UPDATED MATRIX IS STRICTLY C POSITIVE DEFINITE. C C *** ALGORITHM NOTES *** C C THIS CODE USES RECURRENCE 3 OF REF. 1 (WITH D(J) = 1 FOR ALL J) C TO COMPUTE LPLUS OF THE FORM L * (I + Z*W**T) * Q, WHERE Q C IS AN ORTHOGONAL MATRIX THAT MAKES THE RESULT LOWER TRIANGULAR. C LPLUS MAY HAVE SOME NEGATIVE DIAGONAL ELEMENTS. C C *** REFERENCES *** C C 1. GOLDFARB, D. (1976), FACTORIZED VARIABLE METRIC METHODS FOR UNCON- C STRAINED OPTIMIZATION, MATH. COMPUT. 30, PP. 796-811. C C *** GENERAL *** C C CODED BY DAVID M. GAY (FALL 1979). C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS MCS-7600324 AND C MCS-7906671. C C------------------------ EXTERNAL QUANTITIES ------------------------ C C *** INTRINSIC FUNCTIONS *** C/+ REAL SQRT C/ C-------------------------- LOCAL VARIABLES -------------------------- C INTEGER I, IJ, J, JJ, JP1, K, NM1, NP1 REAL A, B, BJ, ETA, GJ, LJ, LIJ, LJJ, NU, S, THETA, 1 WJ, ZJ REAL ONE, ZERO C C *** DATA INITIALIZATIONS *** C C/6 C DATA ONE/1.E+0/, ZERO/0.E+0/ C/7 PARAMETER (ONE=1.E+0, ZERO=0.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C NU = ONE ETA = ZERO IF (N .LE. 1) GO TO 30 NM1 = N - 1 C C *** TEMPORARILY STORE S(J) = SUM OVER K = J+1 TO N OF W(K)**2 IN C *** LAMBDA(J). C S = ZERO DO 10 I = 1, NM1 J = N - I S = S + W(J+1)**2 LAMBDA(J) = S 10 CONTINUE C C *** COMPUTE LAMBDA, GAMMA, AND BETA BY GOLDFARB*S RECURRENCE 3. C DO 20 J = 1, NM1 WJ = W(J) A = NU*Z(J) - ETA*WJ THETA = ONE + A*WJ S = A*LAMBDA(J) LJ = SQRT(THETA**2 + A*S) IF (THETA .GT. ZERO) LJ = -LJ LAMBDA(J) = LJ B = THETA*WJ + S GAMMA(J) = B * NU / LJ BETA(J) = (A - B*ETA) / LJ NU = -NU / LJ ETA = -(ETA + (A**2)/(THETA - LJ)) / LJ 20 CONTINUE 30 LAMBDA(N) = ONE + (NU*Z(N) - ETA*W(N))*W(N) C C *** UPDATE L, GRADUALLY OVERWRITING W AND Z WITH L*W AND L*Z. C NP1 = N + 1 JJ = N * (N + 1) / 2 DO 60 K = 1, N J = NP1 - K LJ = LAMBDA(J) LJJ = L(JJ) LPLUS(JJ) = LJ * LJJ WJ = W(J) W(J) = LJJ * WJ ZJ = Z(J) Z(J) = LJJ * ZJ IF (K .EQ. 1) GO TO 50 BJ = BETA(J) GJ = GAMMA(J) IJ = JJ + J JP1 = J + 1 DO 40 I = JP1, N LIJ = L(IJ) LPLUS(IJ) = LJ*LIJ + BJ*W(I) + GJ*Z(I) W(I) = W(I) + LIJ*WJ Z(I) = Z(I) + LIJ*ZJ IJ = IJ + I 40 CONTINUE 50 JJ = JJ - J 60 CONTINUE C 999 RETURN C *** LAST CARD OF L7UPD FOLLOWS *** END PyBDSF-1.10.1/src/port3/l7vml.f000066400000000000000000000013161420247104600156700ustar00rootroot00000000000000 SUBROUTINE L7VML(N, X, L, Y) C C *** COMPUTE X = L*Y, WHERE L IS AN N X N LOWER TRIANGULAR C *** MATRIX STORED COMPACTLY BY ROWS. X AND Y MAY OCCUPY THE SAME C *** STORAGE. *** C INTEGER N REAL X(N), L(1), Y(N) C DIMENSION L(N*(N+1)/2) INTEGER I, II, IJ, I0, J, NP1 REAL T, ZERO C/6 C DATA ZERO/0.E+0/ C/7 PARAMETER (ZERO=0.E+0) C/ C NP1 = N + 1 I0 = N*(N+1)/2 DO 20 II = 1, N I = NP1 - II I0 = I0 - I T = ZERO DO 10 J = 1, I IJ = I0 + J T = T + L(IJ)*Y(J) 10 CONTINUE X(I) = T 20 CONTINUE 999 RETURN C *** LAST CARD OF L7VML FOLLOWS *** END PyBDSF-1.10.1/src/port3/leave.f000066400000000000000000000044261420247104600157300ustar00rootroot00000000000000 SUBROUTINE LEAVE C C THIS ROUTINE C C 1) DE-ALLOCATES ALL SCRATCH SPACE ALLOCATED SINCE THE LAST ENTER, C INCLUDING THE LAST ENTER-BLOCK. C 2) RESTORES THE RECOVERY LEVEL TO ITS VALUE C AT THE TIME OF THE LAST CALL TO ENTER. C C ERROR STATES - C C 1 - CANNOT LEAVE BEYOND THE FIRST ENTER. C 2 - ISTACK(INOW) HAS BEEN OVERWRITTEN. C 3 - TOO MANY ISTKRLS OR ISTACK(1 AND/OR INOW) CLOBBERED. C 4 - ISTACK(INOW+1) HAS BEEN OVERWRITTEN. C 5 - ISTACK(INOW+2) HAS BEEN OVERWRITTEN. C COMMON /CSTAK/DSTACK DOUBLE PRECISION DSTACK(500) INTEGER ISTACK(1000) EQUIVALENCE (DSTACK(1),ISTACK(1)) EQUIVALENCE (ISTACK(1),LOUT) C C GET THE POINTER TO THE CURRENT ENTER-BLOCK. C INOW=I8TSEL(-1) C C/6S C IF (INOW.EQ.0) C 1 CALL SETERR(43HLEAVE - CANNOT LEAVE BEYOND THE FIRST ENTER,43, C 2 1,2) C IF (ISTACK(INOW).LT.1) C 1 CALL SETERR(41HLEAVE - ISTACK(INOW) HAS BEEN OVERWRITTEN,41,2,2) C IF (LOUT.LT.ISTACK(INOW)) CALL SETERR( C 1 59HLEAVE - TOO MANY ISTKRLS OR ISTACK(1 AND/OR INOW) CLOBBERED, C 2 59,3,2) C IF (ISTACK(INOW+1).LT.1 .OR. ISTACK(INOW+1).GT.2) C 1 CALL SETERR(43HLEAVE - ISTACK(INOW+1) HAS BEEN OVERWRITTEN, C 2 43,4,2) C IF (ISTACK(INOW+2).GT.INOW-3 .OR. ISTACK(INOW+2).LT.0) C 1 CALL SETERR(43HLEAVE - ISTACK(INOW+2) HAS BEEN OVERWRITTEN, C 2 43,5,2) C/7S IF (INOW.EQ.0) 1 CALL SETERR('LEAVE - CANNOT LEAVE BEYOND THE FIRST ENTER',43, 2 1,2) IF (ISTACK(INOW).LT.1) 1 CALL SETERR('LEAVE - ISTACK(INOW) HAS BEEN OVERWRITTEN',41,2,2) IF (LOUT.LT.ISTACK(INOW)) CALL SETERR( 1 'LEAVE - TOO MANY ISTKRLS OR ISTACK(1 AND/OR INOW) CLOBBERED', 2 59,3,2) IF (ISTACK(INOW+1).LT.1 .OR. ISTACK(INOW+1).GT.2) 1 CALL SETERR('LEAVE - ISTACK(INOW+1) HAS BEEN OVERWRITTEN', 2 43,4,2) IF (ISTACK(INOW+2).GT.INOW-3 .OR. ISTACK(INOW+2).LT.0) 1 CALL SETERR('LEAVE - ISTACK(INOW+2) HAS BEEN OVERWRITTEN', 2 43,5,2) C/ C C DE-ALLOCATE THE SCRATCH SPACE. C CALL ISTKRL(LOUT-ISTACK(INOW)+1) C C RESTORE THE RECOVERY LEVEL. C CALL RETSRC(ISTACK(INOW+1)) C C LOWER THE BACK-POINTER. C ITEMP=I8TSEL(ISTACK(INOW+2)) C RETURN C END PyBDSF-1.10.1/src/port3/m7seq.f000066400000000000000000000116241420247104600156660ustar00rootroot00000000000000 SUBROUTINE M7SEQ(N,INDROW,JPNTR,INDCOL,IPNTR,LIST,NGRP,MAXGRP, * IWA,BWA) INTEGER N,MAXGRP INTEGER INDROW(1),JPNTR(1),INDCOL(1),IPNTR(1),LIST(N),NGRP(N), * IWA(N) LOGICAL BWA(N) C ********** C C SUBROUTINE M7SEQ C C GIVEN THE SPARSITY PATTERN OF AN M BY N MATRIX A, THIS C SUBROUTINE DETERMINES A CONSISTENT PARTITION OF THE C COLUMNS OF A BY A SEQUENTIAL ALGORITHM. C C A CONSISTENT PARTITION IS DEFINED IN TERMS OF THE LOOPLESS C GRAPH G WITH VERTICES A(J), J = 1,2,...,N WHERE A(J) IS THE C J-TH COLUMN OF A AND WITH EDGE (A(I),A(J)) IF AND ONLY IF C COLUMNS I AND J HAVE A NON-ZERO IN THE SAME ROW POSITION. C C A PARTITION OF THE COLUMNS OF A INTO GROUPS IS CONSISTENT C IF THE COLUMNS IN ANY GROUP ARE NOT ADJACENT IN THE GRAPH G. C IN GRAPH-THEORY TERMINOLOGY, A CONSISTENT PARTITION OF THE C COLUMNS OF A CORRESPONDS TO A COLORING OF THE GRAPH G. C C THE SUBROUTINE EXAMINES THE COLUMNS IN THE ORDER SPECIFIED C BY THE ARRAY LIST, AND ASSIGNS THE CURRENT COLUMN TO THE C GROUP WITH THE SMALLEST POSSIBLE NUMBER. C C NOTE THAT THE VALUE OF M IS NOT NEEDED BY M7SEQ AND IS C THEREFORE NOT PRESENT IN THE SUBROUTINE STATEMENT. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE M7SEQ(N,INDROW,JPNTR,INDCOL,IPNTR,LIST,NGRP,MAXGRP, C IWA,BWA) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C INDROW IS AN INTEGER INPUT ARRAY WHICH CONTAINS THE ROW C INDICES FOR THE NON-ZEROES IN THE MATRIX A. C C JPNTR IS AN INTEGER INPUT ARRAY OF LENGTH N + 1 WHICH C SPECIFIES THE LOCATIONS OF THE ROW INDICES IN INDROW. C THE ROW INDICES FOR COLUMN J ARE C C INDROW(K), K = JPNTR(J),...,JPNTR(J+1)-1. C C NOTE THAT JPNTR(N+1)-1 IS THEN THE NUMBER OF NON-ZERO C ELEMENTS OF THE MATRIX A. C C INDCOL IS AN INTEGER INPUT ARRAY WHICH CONTAINS THE C COLUMN INDICES FOR THE NON-ZEROES IN THE MATRIX A. C C IPNTR IS AN INTEGER INPUT ARRAY OF LENGTH M + 1 WHICH C SPECIFIES THE LOCATIONS OF THE COLUMN INDICES IN INDCOL. C THE COLUMN INDICES FOR ROW I ARE C C INDCOL(K), K = IPNTR(I),...,IPNTR(I+1)-1. C C NOTE THAT IPNTR(M+1)-1 IS THEN THE NUMBER OF NON-ZERO C ELEMENTS OF THE MATRIX A. C C LIST IS AN INTEGER INPUT ARRAY OF LENGTH N WHICH SPECIFIES C THE ORDER TO BE USED BY THE SEQUENTIAL ALGORITHM. C THE J-TH COLUMN IN THIS ORDER IS LIST(J). C C NGRP IS AN INTEGER OUTPUT ARRAY OF LENGTH N WHICH SPECIFIES C THE PARTITION OF THE COLUMNS OF A. COLUMN JCOL BELONGS C TO GROUP NGRP(JCOL). C C MAXGRP IS AN INTEGER OUTPUT VARIABLE WHICH SPECIFIES THE C NUMBER OF GROUPS IN THE PARTITION OF THE COLUMNS OF A. C C IWA IS AN INTEGER WORK ARRAY OF LENGTH N. C C BWA IS A LOGICAL WORK ARRAY OF LENGTH N. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. JUNE 1982. C THOMAS F. COLEMAN, BURTON S. GARBOW, JORGE J. MORE C C ********** INTEGER DEG,IC,IP,IPL,IPU,IR,J,JCOL,JP,JPL,JPU,L,NUMGRP C C INITIALIZATION BLOCK. C MAXGRP = 0 DO 10 JP = 1, N NGRP(JP) = N BWA(JP) = .FALSE. 10 CONTINUE BWA(N) = .TRUE. C C BEGINNING OF ITERATION LOOP. C DO 100 J = 1, N JCOL = LIST(J) C C FIND ALL COLUMNS ADJACENT TO COLUMN JCOL. C DEG = 0 C C DETERMINE ALL POSITIONS (IR,JCOL) WHICH CORRESPOND C TO NON-ZEROES IN THE MATRIX. C JPL = JPNTR(JCOL) JPU = JPNTR(JCOL+1) - 1 IF (JPU .LT. JPL) GO TO 50 DO 40 JP = JPL, JPU IR = INDROW(JP) C C FOR EACH ROW IR, DETERMINE ALL POSITIONS (IR,IC) C WHICH CORRESPOND TO NON-ZEROES IN THE MATRIX. C IPL = IPNTR(IR) IPU = IPNTR(IR+1) - 1 DO 30 IP = IPL, IPU IC = INDCOL(IP) L = NGRP(IC) C C ARRAY BWA MARKS THE GROUP NUMBERS OF THE C COLUMNS WHICH ARE ADJACENT TO COLUMN JCOL. C ARRAY IWA RECORDS THE MARKED GROUP NUMBERS. C IF (BWA(L)) GO TO 20 BWA(L) = .TRUE. DEG = DEG + 1 IWA(DEG) = L 20 CONTINUE 30 CONTINUE 40 CONTINUE 50 CONTINUE C C ASSIGN THE SMALLEST UN-MARKED GROUP NUMBER TO JCOL. C DO 60 JP = 1, N NUMGRP = JP IF (.NOT. BWA(JP)) GO TO 70 60 CONTINUE 70 CONTINUE NGRP(JCOL) = NUMGRP MAXGRP = MAX0(MAXGRP,NUMGRP) C C UN-MARK THE GROUP NUMBERS. C IF (DEG .LT. 1) GO TO 90 DO 80 JP = 1, DEG L = IWA(JP) BWA(L) = .FALSE. 80 CONTINUE 90 CONTINUE 100 CONTINUE C C END OF ITERATION LOOP. C RETURN C C LAST CARD OF SUBROUTINE M7SEQ. C END PyBDSF-1.10.1/src/port3/m7slo.f000066400000000000000000000162271420247104600156770ustar00rootroot00000000000000 SUBROUTINE M7SLO(N,INDROW,JPNTR,INDCOL,IPNTR,NDEG,LIST, * MAXCLQ,IWA1,IWA2,IWA3,IWA4,BWA) INTEGER N,MAXCLQ INTEGER INDROW(1),JPNTR(1),INDCOL(1),IPNTR(1),NDEG(N), * LIST(N),IWA1(N),IWA2(N),IWA3(N),IWA4(N) LOGICAL BWA(N) C ********** C C SUBROUTINE M7SLO C C GIVEN THE SPARSITY PATTERN OF AN M BY N MATRIX A, THIS C SUBROUTINE DETERMINES THE SMALLEST-LAST ORDERING OF THE C COLUMNS OF A. C C THE SMALLEST-LAST ORDERING IS DEFINED FOR THE LOOPLESS C GRAPH G WITH VERTICES A(J), J = 1,2,...,N WHERE A(J) IS THE C J-TH COLUMN OF A AND WITH EDGE (A(I),A(J)) IF AND ONLY IF C COLUMNS I AND J HAVE A NON-ZERO IN THE SAME ROW POSITION. C C THE SMALLEST-LAST ORDERING IS DETERMINED RECURSIVELY BY C LETTING LIST(K), K = N,...,1 BE A COLUMN WITH LEAST DEGREE C IN THE SUBGRAPH SPANNED BY THE UN-ORDERED COLUMNS. C C NOTE THAT THE VALUE OF M IS NOT NEEDED BY M7SLO AND IS C THEREFORE NOT PRESENT IN THE SUBROUTINE STATEMENT. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE M7SLO(N,INDROW,JPNTR,INDCOL,IPNTR,NDEG,LIST, C MAXCLQ,IWA1,IWA2,IWA3,IWA4,BWA) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C INDROW IS AN INTEGER INPUT ARRAY WHICH CONTAINS THE ROW C INDICES FOR THE NON-ZEROES IN THE MATRIX A. C C JPNTR IS AN INTEGER INPUT ARRAY OF LENGTH N + 1 WHICH C SPECIFIES THE LOCATIONS OF THE ROW INDICES IN INDROW. C THE ROW INDICES FOR COLUMN J ARE C C INDROW(K), K = JPNTR(J),...,JPNTR(J+1)-1. C C NOTE THAT JPNTR(N+1)-1 IS THEN THE NUMBER OF NON-ZERO C ELEMENTS OF THE MATRIX A. C C INDCOL IS AN INTEGER INPUT ARRAY WHICH CONTAINS THE C COLUMN INDICES FOR THE NON-ZEROES IN THE MATRIX A. C C IPNTR IS AN INTEGER INPUT ARRAY OF LENGTH M + 1 WHICH C SPECIFIES THE LOCATIONS OF THE COLUMN INDICES IN INDCOL. C THE COLUMN INDICES FOR ROW I ARE C C INDCOL(K), K = IPNTR(I),...,IPNTR(I+1)-1. C C NOTE THAT IPNTR(M+1)-1 IS THEN THE NUMBER OF NON-ZERO C ELEMENTS OF THE MATRIX A. C C NDEG IS AN INTEGER INPUT ARRAY OF LENGTH N WHICH SPECIFIES C THE DEGREE SEQUENCE. THE DEGREE OF THE J-TH COLUMN C OF A IS NDEG(J). C C LIST IS AN INTEGER OUTPUT ARRAY OF LENGTH N WHICH SPECIFIES C THE SMALLEST-LAST ORDERING OF THE COLUMNS OF A. THE J-TH C COLUMN IN THIS ORDER IS LIST(J). C C MAXCLQ IS AN INTEGER OUTPUT VARIABLE SET TO THE SIZE C OF THE LARGEST CLIQUE FOUND DURING THE ORDERING. C C IWA1,IWA2,IWA3, AND IWA4 ARE INTEGER WORK ARRAYS OF LENGTH N. C C BWA IS A LOGICAL WORK ARRAY OF LENGTH N. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... MIN0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. JUNE 1982. C THOMAS F. COLEMAN, BURTON S. GARBOW, JORGE J. MORE C C ********** INTEGER DEG,HEAD,IC,IP,IPL,IPU,IR,JCOL,JP,JPL,JPU, * L,MINDEG,NUMDEG,NUMORD C C INITIALIZATION BLOCK. C MINDEG = N DO 10 JP = 1, N IWA1(JP) = 0 BWA(JP) = .FALSE. LIST(JP) = NDEG(JP) MINDEG = MIN0(MINDEG,NDEG(JP)) 10 CONTINUE C C CREATE A DOUBLY-LINKED LIST TO ACCESS THE DEGREES OF THE C COLUMNS. THE POINTERS FOR THE LINKED LIST ARE AS FOLLOWS. C C EACH UN-ORDERED COLUMN JCOL IS IN A LIST (THE DEGREE C LIST) OF COLUMNS WITH THE SAME DEGREE. C C IWA1(NUMDEG+1) IS THE FIRST COLUMN IN THE NUMDEG LIST C UNLESS IWA1(NUMDEG+1) = 0. IN THIS CASE THERE ARE C NO COLUMNS IN THE NUMDEG LIST. C C IWA2(JCOL) IS THE COLUMN BEFORE JCOL IN THE DEGREE LIST C UNLESS IWA2(JCOL) = 0. IN THIS CASE JCOL IS THE FIRST C COLUMN IN THIS DEGREE LIST. C C IWA3(JCOL) IS THE COLUMN AFTER JCOL IN THE DEGREE LIST C UNLESS IWA3(JCOL) = 0. IN THIS CASE JCOL IS THE LAST C COLUMN IN THIS DEGREE LIST. C C IF JCOL IS AN UN-ORDERED COLUMN, THEN LIST(JCOL) IS THE C DEGREE OF JCOL IN THE GRAPH INDUCED BY THE UN-ORDERED C COLUMNS. IF JCOL IS AN ORDERED COLUMN, THEN LIST(JCOL) C IS THE SMALLEST-LAST ORDER OF COLUMN JCOL. C DO 20 JP = 1, N NUMDEG = NDEG(JP) HEAD = IWA1(NUMDEG+1) IWA1(NUMDEG+1) = JP IWA2(JP) = 0 IWA3(JP) = HEAD IF (HEAD .GT. 0) IWA2(HEAD) = JP 20 CONTINUE MAXCLQ = 0 NUMORD = N C C BEGINNING OF ITERATION LOOP. C 30 CONTINUE C C MARK THE SIZE OF THE LARGEST CLIQUE C FOUND DURING THE ORDERING. C IF (MINDEG + 1 .EQ. NUMORD .AND. MAXCLQ .EQ. 0) * MAXCLQ = NUMORD C C CHOOSE A COLUMN JCOL OF MINIMAL DEGREE MINDEG. C 40 CONTINUE JCOL = IWA1(MINDEG+1) IF (JCOL .GT. 0) GO TO 50 MINDEG = MINDEG + 1 GO TO 40 50 CONTINUE LIST(JCOL) = NUMORD NUMORD = NUMORD - 1 C C TERMINATION TEST. C IF (NUMORD .EQ. 0) GO TO 120 C C DELETE COLUMN JCOL FROM THE MINDEG LIST. C L = IWA3(JCOL) IWA1(MINDEG+1) = L IF (L .GT. 0) IWA2(L) = 0 C C FIND ALL COLUMNS ADJACENT TO COLUMN JCOL. C BWA(JCOL) = .TRUE. DEG = 0 C C DETERMINE ALL POSITIONS (IR,JCOL) WHICH CORRESPOND C TO NON-ZEROES IN THE MATRIX. C JPL = JPNTR(JCOL) JPU = JPNTR(JCOL+1) - 1 IF (JPU .LT. JPL) GO TO 90 DO 80 JP = JPL, JPU IR = INDROW(JP) C C FOR EACH ROW IR, DETERMINE ALL POSITIONS (IR,IC) C WHICH CORRESPOND TO NON-ZEROES IN THE MATRIX. C IPL = IPNTR(IR) IPU = IPNTR(IR+1) - 1 DO 70 IP = IPL, IPU IC = INDCOL(IP) C C ARRAY BWA MARKS COLUMNS WHICH ARE ADJACENT TO C COLUMN JCOL. ARRAY IWA4 RECORDS THE MARKED COLUMNS. C IF (BWA(IC)) GO TO 60 BWA(IC) = .TRUE. DEG = DEG + 1 IWA4(DEG) = IC 60 CONTINUE 70 CONTINUE 80 CONTINUE 90 CONTINUE C C UPDATE THE POINTERS TO THE CURRENT DEGREE LISTS. C IF (DEG .LT. 1) GO TO 110 DO 100 JP = 1, DEG IC = IWA4(JP) NUMDEG = LIST(IC) LIST(IC) = LIST(IC) - 1 MINDEG = MIN0(MINDEG,LIST(IC)) C C DELETE COLUMN IC FROM THE NUMDEG LIST. C L = IWA2(IC) IF (L .EQ. 0) IWA1(NUMDEG+1) = IWA3(IC) IF (L .GT. 0) IWA3(L) = IWA3(IC) L = IWA3(IC) IF (L .GT. 0) IWA2(L) = IWA2(IC) C C ADD COLUMN IC TO THE NUMDEG-1 LIST. C HEAD = IWA1(NUMDEG) IWA1(NUMDEG) = IC IWA2(IC) = 0 IWA3(IC) = HEAD IF (HEAD .GT. 0) IWA2(HEAD) = IC C C UN-MARK COLUMN IC IN THE ARRAY BWA. C BWA(IC) = .FALSE. 100 CONTINUE 110 CONTINUE C C END OF ITERATION LOOP. C GO TO 30 120 CONTINUE C C INVERT THE ARRAY LIST. C DO 130 JCOL = 1, N NUMORD = LIST(JCOL) IWA1(NUMORD) = JCOL 130 CONTINUE DO 140 JP = 1, N LIST(JP) = IWA1(JP) 140 CONTINUE RETURN C C LAST CARD OF SUBROUTINE M7SLO. C END PyBDSF-1.10.1/src/port3/mnf.f000066400000000000000000000064551420247104600154200ustar00rootroot00000000000000 SUBROUTINE MNF(N, D, X, CALCF, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING C *** FINITE-DIFFERENCE GRADIENTS AND SECANT HESSIAN APPROXIMATIONS. C INTEGER N, LIV, LV INTEGER IV(LIV), UIPARM(1) REAL D(N), X(N), V(LV), URPARM(1) C DIMENSION V(77 + N*(N+17)/2), UIPARM(*), URPARM(*) EXTERNAL CALCF, UFPARM C C *** PURPOSE *** C C THIS ROUTINE INTERACTS WITH SUBROUTINE RMNF IN AN ATTEMPT C TO FIND AN N-VECTOR X* THAT MINIMIZES THE (UNCONSTRAINED) C OBJECTIVE FUNCTION COMPUTED BY CALCF. (OFTEN THE X* FOUND IS C A LOCAL MINIMIZER RATHER THAN A GLOBAL ONE.) C C *** PARAMETERS *** C C THE PARAMETERS FOR MNF ARE THE SAME AS THOSE FOR MNG C (WHICH SEE), EXCEPT THAT CALCG IS OMITTED. INSTEAD OF CALLING C CALCG TO OBTAIN THE GRADIENT OF THE OBJECTIVE FUNCTION AT X, C MNF CALLS S7GRD, WHICH COMPUTES AN APPROXIMATION TO THE C GRADIENT BY FINITE (FORWARD AND CENTRAL) DIFFERENCES USING THE C METHOD OF REF. 1. THE FOLLOWING INPUT COMPONENT IS OF INTEREST C IN THIS REGARD (AND IS NOT DESCRIBED IN MNG). C C V(ETA0)..... V(42) IS AN ESTIMATED BOUND ON THE RELATIVE ERROR IN THE C OBJECTIVE FUNCTION VALUE COMPUTED BY CALCF... C (TRUE VALUE) = (COMPUTED VALUE) * (1 + E), C WHERE ABS(E) .LE. V(ETA0). DEFAULT = MACHEP * 10**3, C WHERE MACHEP IS THE UNIT ROUNDOFF. C C THE OUTPUT VALUES IV(NFCALL) AND IV(NGCALL) HAVE DIFFERENT C MEANINGS FOR MNF THAN FOR MNG... C C IV(NFCALL)... IV(6) IS THE NUMBER OF CALLS SO FAR MADE ON CALCF (I.E., C FUNCTION EVALUATIONS) EXCLUDING THOSE MADE ONLY FOR C COMPUTING GRADIENTS. THE INPUT VALUE IV(MXFCAL) IS A C LIMIT ON IV(NFCALL). C IV(NGCALL)... IV(30) IS THE NUMBER OF FUNCTION EVALUATIONS MADE ONLY C FOR COMPUTING GRADIENTS. THE TOTAL NUMBER OF FUNCTION C EVALUATIONS IS THUS IV(NFCALL) + IV(NGCALL). C C *** REFERENCE *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER 1980). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER C GRANTS MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, C AND MCS-7906671. C C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL RMNF C C RMNF.... OVERSEES COMPUTATION OF FINITE-DIFFERENCE GRADIENT AND C CALLS RMNG TO CARRY OUT MNG ALGORITHM. C INTEGER NF REAL FX C C *** SUBSCRIPTS FOR IV *** C INTEGER NFCALL, TOOBIG C C/6 C DATA NFCALL/6/, TOOBIG/2/ C/7 PARAMETER (NFCALL=6, TOOBIG=2) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C 10 CALL RMNF(D, FX, IV, LIV, LV, N, V, X) IF (IV(1) .GT. 2) GO TO 999 C C *** COMPUTE FUNCTION *** C NF = IV(NFCALL) CALL CALCF(N, X, NF, FX, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 10 C C 999 RETURN C *** LAST CARD OF MNF FOLLOWS *** END PyBDSF-1.10.1/src/port3/mnfb.f000066400000000000000000000066661420247104600155660ustar00rootroot00000000000000 SUBROUTINE MNFB(P, D, X, B, CALCF, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING C *** FINITE-DIFFERENCE GRADIENTS AND SECANT HESSIAN APPROXIMATIONS. C INTEGER P, LIV, LV C/6S C INTEGER IV(LIV), UIPARM(1) C REAL B(2,P), D(P), X(P), V(LV), URPARM(1) C/7S INTEGER IV(LIV), UIPARM(*) REAL B(2,P), D(P), X(P), V(LV), URPARM(*) C/ C DIMENSION V(59 + P), V(77 + P*(P+23)/2), UIPARM(*), URPARM(*) EXTERNAL CALCF, UFPARM C C *** PURPOSE *** C C THIS ROUTINE INTERACTS WITH SUBROUTINE RMNF IN AN ATTEMPT C TO FIND AN P-VECTOR X* THAT MINIMIZES THE (UNCONSTRAINED) C OBJECTIVE FUNCTION COMPUTED BY CALCF. (OFTEN THE X* FOUND IS C A LOCAL MINIMIZER RATHER THAN A GLOBAL ONE.) C C *** PARAMETERS *** C C THE PARAMETERS FOR MNFB ARE THE SAME AS THOSE FOR MNGB C (WHICH SEE), EXCEPT THAT CALCG IS OMITTED. INSTEAD OF CALLING C CALCG TO OBTAIN THE GRADIENT OF THE OBJECTIVE FUNCTION AT X, C MNFB CALLS S3GRD, WHICH COMPUTES AN APPROXIMATION TO THE C GRADIENT BY FINITE (FORWARD AND CENTRAL) DIFFERENCES USING THE C METHOD OF REF. 1. THE FOLLOWING INPUT COMPONENT IS OF INTEREST C IN THIS REGARD (AND IS NOT DESCRIBED IN MNG OR MNGB). C C V(ETA0)..... V(42) IS AN ESTIMATED BOUND ON THE RELATIVE ERROR IN THE C OBJECTIVE FUNCTION VALUE COMPUTED BY CALCF... C (TRUE VALUE) = (COMPUTED VALUE) * (1 + E), C WHERE ABS(E) .LE. V(ETA0). DEFAULT = MACHEP * 10**3, C WHERE MACHEP IS THE UNIT ROUNDOFF. C C THE OUTPUT VALUES IV(NFCALL) AND IV(NGCALL) HAVE DIFFERENT C MEANINGS FOR MNFB THAN FOR MNG... C C IV(NFCALL)... IV(6) IS THE NUMBER OF CALLS SO FAR MADE ON CALCF (I.E., C FUNCTION EVALUATIONS) EXCLUDING THOSE MADE ONLY FOR C COMPUTING GRADIENTS. THE INPUT VALUE IV(MXFCAL) IS A C LIMIT ON IV(NFCALL). C IV(NGCALL)... IV(30) IS THE NUMBER OF FUNCTION EVALUATIONS MADE ONLY C FOR COMPUTING GRADIENTS. THE TOTAL NUMBER OF FUNCTION C EVALUATIONS IS THUS IV(NFCALL) + IV(NGCALL). C C *** REFERENCE *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER 1980). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER C GRANTS MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, C AND MCS-7906671. C C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL RMNFB C C RMNFB... OVERSEES COMPUTATION OF FINITE-DIFFERENCE GRADIENT AND C CALLS RMNG TO CARRY OUT MNG ALGORITHM. C INTEGER NF REAL FX C C *** SUBSCRIPTS FOR IV *** C INTEGER NFCALL, TOOBIG C C/6 C DATA NFCALL/6/, TOOBIG/2/ C/7 PARAMETER (NFCALL=6, TOOBIG=2) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C 10 CALL RMNFB(B, D, FX, IV, LIV, LV, P, V, X) IF (IV(1) .GT. 2) GO TO 999 C C *** COMPUTE FUNCTION *** C NF = IV(NFCALL) CALL CALCF(P, X, NF, FX, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 10 C C 999 RETURN C *** LAST CARD OF MNFB FOLLOWS *** END PyBDSF-1.10.1/src/port3/mng.f000066400000000000000000000635261420247104600154230ustar00rootroot00000000000000 SUBROUTINE MNG(N, D, X, CALCF, CALCG, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING *** C *** ANALYTIC GRADIENT AND HESSIAN APPROX. FROM SECANT UPDATE *** C INTEGER N, LIV, LV INTEGER IV(LIV), UIPARM(1) REAL D(N), X(N), V(LV), URPARM(1) C DIMENSION V(71 + N*(N+15)/2), UIPARM(*), URPARM(*) EXTERNAL CALCF, CALCG, UFPARM C C *** PURPOSE *** C C THIS ROUTINE INTERACTS WITH SUBROUTINE RMNG IN AN ATTEMPT C TO FIND AN N-VECTOR X* THAT MINIMIZES THE (UNCONSTRAINED) C OBJECTIVE FUNCTION COMPUTED BY CALCF. (OFTEN THE X* FOUND IS C A LOCAL MINIMIZER RATHER THAN A GLOBAL ONE.) C C-------------------------- PARAMETER USAGE -------------------------- C C N........ (INPUT) THE NUMBER OF VARIABLES ON WHICH F DEPENDS, I.E., C THE NUMBER OF COMPONENTS IN X. C D........ (INPUT/OUTPUT) A SCALE VECTOR SUCH THAT D(I)*X(I), C I = 1,2,...,N, ARE ALL IN COMPARABLE UNITS. C D CAN STRONGLY AFFECT THE BEHAVIOR OF MNG. C FINDING THE BEST CHOICE OF D IS GENERALLY A TRIAL- C AND-ERROR PROCESS. CHOOSING D SO THAT D(I)*X(I) C HAS ABOUT THE SAME VALUE FOR ALL I OFTEN WORKS WELL. C THE DEFAULTS PROVIDED BY SUBROUTINE IVSET (SEE IV C BELOW) REQUIRE THE CALLER TO SUPPLY D. C X........ (INPUT/OUTPUT) BEFORE (INITIALLY) CALLING MNG, THE CALL- C ER SHOULD SET X TO AN INITIAL GUESS AT X*. WHEN C MNG RETURNS, X CONTAINS THE BEST POINT SO FAR C FOUND, I.E., THE ONE THAT GIVES THE LEAST VALUE SO C FAR SEEN FOR F(X). C CALCF.... (INPUT) A SUBROUTINE THAT, GIVEN X, COMPUTES F(X). CALCF C MUST BE DECLARED EXTERNAL IN THE CALLING PROGRAM. C IT IS INVOKED BY C CALL CALCF(N, X, NF, F, UIPARM, URPARM, UFPARM) C WHEN CALCF IS CALLED, NF IS THE INVOCATION C COUNT FOR CALCF. NF IS INCLUDED FOR POSSIBLE USE C WITH CALCG. IF X IS OUT OF BOUNDS (E.G., IF IT C WOULD CAUSE OVERFLOW IN COMPUTING F(X)), THEN CALCF C SHOULD SET NF TO 0. THIS WILL CAUSE A SHORTER STEP C TO BE ATTEMPTED. (IF X IS IN BOUNDS, THEN CALCF C SHOULD NOT CHANGE NF.) THE OTHER PARAMETERS ARE AS C DESCRIBED ABOVE AND BELOW. CALCF SHOULD NOT CHANGE C N, P, OR X. C CALCG.... (INPUT) A SUBROUTINE THAT, GIVEN X, COMPUTES G(X), THE GRA- C DIENT OF F AT X. CALCG MUST BE DECLARED EXTERNAL IN C THE CALLING PROGRAM. IT IS INVOKED BY C CALL CALCG(N, X, NF, G, UIPARM, URPARM, UFAPRM) C WHEN CALCG IS CALLED, NF IS THE INVOCATION C COUNT FOR CALCF AT THE TIME F(X) WAS EVALUATED. THE C X PASSED TO CALCG IS USUALLY THE ONE PASSED TO CALCF C ON EITHER ITS MOST RECENT INVOCATION OR THE ONE C PRIOR TO IT. IF CALCF SAVES INTERMEDIATE RESULTS C FOR _USE_ BY CALCG, THEN IT IS POSSIBLE TO TELL FROM C NF WHETHER THEY ARE VALID FOR THE CURRENT X (OR C WHICH COPY IS VALID IF TWO COPIES ARE KEPT). IF G C CANNOT BE COMPUTED AT X, THEN CALCG SHOULD SET NF TO C 0. IN THIS CASE, MNG WILL RETURN WITH IV(1) = 65. C (IF G CAN BE COMPUTED AT X, THEN CALCG SHOULD NOT C CHANGED NF.) THE OTHER PARAMETERS TO CALCG ARE AS C DESCRIBED ABOVE AND BELOW. CALCG SHOULD NOT CHANGE C N OR X. C IV....... (INPUT/OUTPUT) AN INTEGER VALUE ARRAY OF LENGTH LIV (SEE C BELOW) THAT HELPS CONTROL THE MNG ALGORITHM AND C THAT IS USED TO STORE VARIOUS INTERMEDIATE QUANTI- C TIES. OF PARTICULAR INTEREST ARE THE INITIALIZATION/ C RETURN CODE IV(1) AND THE ENTRIES IN IV THAT CONTROL C PRINTING AND LIMIT THE NUMBER OF ITERATIONS AND FUNC- C TION EVALUATIONS. SEE THE SECTION ON IV INPUT C VALUES BELOW. C LIV...... (INPUT) LENGTH OF IV ARRAY. MUST BE AT LEAST 60. IF LIV C IS TOO SMALL, THEN MNG RETURNS WITH IV(1) = 15. C WHEN MNG RETURNS, THE SMALLEST ALLOWED VALUE OF C LIV IS STORED IN IV(LASTIV) -- SEE THE SECTION ON C IV OUTPUT VALUES BELOW. (THIS IS INTENDED FOR USE C WITH EXTENSIONS OF MNG THAT HANDLE CONSTRAINTS.) C LV....... (INPUT) LENGTH OF V ARRAY. MUST BE AT LEAST 71+N*(N+15)/2. C (AT LEAST 77+N*(N+17)/2 FOR MNF, AT LEAST C 78+N*(N+12) FOR MNH). IF LV IS TOO SMALL, THEN C MNG RETURNS WITH IV(1) = 16. WHEN MNG RETURNS, C THE SMALLEST ALLOWED VALUE OF LV IS STORED IN C IV(LASTV) -- SEE THE SECTION ON IV OUTPUT VALUES C BELOW. C V........ (INPUT/OUTPUT) A FLOATING-POINT VALUE ARRAY OF LENGTH LV C (SEE BELOW) THAT HELPS CONTROL THE MNG ALGORITHM C AND THAT IS USED TO STORE VARIOUS INTERMEDIATE C QUANTITIES. OF PARTICULAR INTEREST ARE THE ENTRIES C IN V THAT LIMIT THE LENGTH OF THE FIRST STEP C ATTEMPTED (LMAX0) AND SPECIFY CONVERGENCE TOLERANCES C (AFCTOL, LMAXS, RFCTOL, SCTOL, XCTOL, XFTOL). C UIPARM... (INPUT) USER INTEGER PARAMETER ARRAY PASSED WITHOUT CHANGE C TO CALCF AND CALCG. C URPARM... (INPUT) USER FLOATING-POINT PARAMETER ARRAY PASSED WITHOUT C CHANGE TO CALCF AND CALCG. C UFPARM... (INPUT) USER EXTERNAL SUBROUTINE OR FUNCTION PASSED WITHOUT C CHANGE TO CALCF AND CALCG. C C *** IV INPUT VALUES (FROM SUBROUTINE IVSET) *** C C IV(1)... ON INPUT, IV(1) SHOULD HAVE A VALUE BETWEEN 0 AND 14...... C 0 AND 12 MEAN THIS IS A FRESH START. 0 MEANS THAT C IVSET(2, IV, LIV, LV, V) C IS TO BE CALLED TO PROVIDE ALL DEFAULT VALUES TO IV AND C V. 12 (THE VALUE THAT IVSET ASSIGNS TO IV(1)) MEANS THE C CALLER HAS ALREADY CALLED IVSET AND HAS POSSIBLY CHANGED C SOME IV AND/OR V ENTRIES TO NON-DEFAULT VALUES. C 13 MEANS IVSET HAS BEEN CALLED AND THAT MNG (AND C RMNG) SHOULD ONLY DO THEIR STORAGE ALLOCATION. THAT IS, C THEY SHOULD SET THE OUTPUT COMPONENTS OF IV THAT TELL C WHERE VARIOUS SUBARRAYS ARRAYS OF V BEGIN, SUCH AS IV(G) C (AND, FOR MNH AND RMNH ONLY, IV(DTOL)), AND RETURN. C 14 MEANS THAT A STORAGE HAS BEEN ALLOCATED (BY A CALL C WITH IV(1) = 13) AND THAT THE ALGORITHM SHOULD BE C STARTED. WHEN CALLED WITH IV(1) = 13, MNG RETURNS C IV(1) = 14 UNLESS LIV OR LV IS TOO SMALL (OR N IS NOT C POSITIVE). DEFAULT = 12. C IV(INITH).... IV(25) TELLS WHETHER THE HESSIAN APPROXIMATION H SHOULD C BE INITIALIZED. 1 (THE DEFAULT) MEANS RMNG SHOULD C INITIALIZE H TO THE DIAGONAL MATRIX WHOSE I-TH DIAGONAL C ELEMENT IS D(I)**2. 0 MEANS THE CALLER HAS SUPPLIED A C CHOLESKY FACTOR L OF THE INITIAL HESSIAN APPROXIMATION C H = L*(L**T) IN V, STARTING AT V(IV(LMAT)) = V(IV(42)) C (AND STORED COMPACTLY BY ROWS). NOTE THAT IV(LMAT) MAY C BE INITIALIZED BY CALLING MNG WITH IV(1) = 13 (SEE C THE IV(1) DISCUSSION ABOVE). DEFAULT = 1. C IV(MXFCAL)... IV(17) GIVES THE MAXIMUM NUMBER OF FUNCTION EVALUATIONS C (CALLS ON CALCF) ALLOWED. IF THIS NUMBER DOES NOT SUF- C FICE, THEN MNG RETURNS WITH IV(1) = 9. DEFAULT = 200. C IV(MXITER)... IV(18) GIVES THE MAXIMUM NUMBER OF ITERATIONS ALLOWED. C IT ALSO INDIRECTLY LIMITS THE NUMBER OF GRADIENT EVALUA- C TIONS (CALLS ON CALCG) TO IV(MXITER) + 1. IF IV(MXITER) C ITERATIONS DO NOT SUFFICE, THEN MNG RETURNS WITH C IV(1) = 10. DEFAULT = 150. C IV(OUTLEV)... IV(19) CONTROLS THE NUMBER AND LENGTH OF ITERATION SUM- C MARY LINES PRINTED (BY ITSUM). IV(OUTLEV) = 0 MEANS DO C NOT PRINT ANY SUMMARY LINES. OTHERWISE, PRINT A SUMMARY C LINE AFTER EACH ABS(IV(OUTLEV)) ITERATIONS. IF IV(OUTLEV) C IS POSITIVE, THEN SUMMARY LINES OF LENGTH 78 (PLUS CARRI- C AGE CONTROL) ARE PRINTED, INCLUDING THE FOLLOWING... THE C ITERATION AND FUNCTION EVALUATION COUNTS, F = THE CURRENT C FUNCTION VALUE, RELATIVE DIFFERENCE IN FUNCTION VALUES C ACHIEVED BY THE LATEST STEP (I.E., RELDF = (F0-V(F))/F01, C WHERE F01 IS THE MAXIMUM OF ABS(V(F)) AND ABS(V(F0)) AND C V(F0) IS THE FUNCTION VALUE FROM THE PREVIOUS ITERA- C TION), THE RELATIVE FUNCTION REDUCTION PREDICTED FOR THE C STEP JUST TAKEN (I.E., PRELDF = V(PREDUC) / F01, WHERE C V(PREDUC) IS DESCRIBED BELOW), THE SCALED RELATIVE CHANGE C IN X (SEE V(RELDX) BELOW), THE STEP PARAMETER FOR THE C STEP JUST TAKEN (STPPAR = 0 MEANS A FULL NEWTON STEP, C BETWEEN 0 AND 1 MEANS A RELAXED NEWTON STEP, BETWEEN 1 C AND 2 MEANS A DOUBLE DOGLEG STEP, GREATER THAN 2 MEANS C A SCALED DOWN CAUCHY STEP -- SEE SUBROUTINE DBLDOG), THE C 2-NORM OF THE SCALE VECTOR D TIMES THE STEP JUST TAKEN C (SEE V(DSTNRM) BELOW), AND NPRELDF, I.E., C V(NREDUC)/F01, WHERE V(NREDUC) IS DESCRIBED BELOW -- IF C NPRELDF IS POSITIVE, THEN IT IS THE RELATIVE FUNCTION C REDUCTION PREDICTED FOR A NEWTON STEP (ONE WITH C STPPAR = 0). IF NPRELDF IS NEGATIVE, THEN IT IS THE C NEGATIVE OF THE RELATIVE FUNCTION REDUCTION PREDICTED C FOR A STEP COMPUTED WITH STEP BOUND V(LMAXS) FOR _USE_ IN C TESTING FOR SINGULAR CONVERGENCE. C IF IV(OUTLEV) IS NEGATIVE, THEN LINES OF LENGTH 50 C ARE PRINTED, INCLUDING ONLY THE FIRST 6 ITEMS LISTED C ABOVE (THROUGH RELDX). C DEFAULT = 1. C IV(PARPRT)... IV(20) = 1 MEANS PRINT ANY NONDEFAULT V VALUES ON A C FRESH START OR ANY CHANGED V VALUES ON A RESTART. C IV(PARPRT) = 0 MEANS SKIP THIS PRINTING. DEFAULT = 1. C IV(PRUNIT)... IV(21) IS THE OUTPUT UNIT NUMBER ON WHICH ALL PRINTING C IS DONE. IV(PRUNIT) = 0 MEANS SUPPRESS ALL PRINTING. C DEFAULT = STANDARD OUTPUT UNIT (UNIT 6 ON MOST SYSTEMS). C IV(SOLPRT)... IV(22) = 1 MEANS PRINT OUT THE VALUE OF X RETURNED (AS C WELL AS THE GRADIENT AND THE SCALE VECTOR D). C IV(SOLPRT) = 0 MEANS SKIP THIS PRINTING. DEFAULT = 1. C IV(STATPR)... IV(23) = 1 MEANS PRINT SUMMARY STATISTICS UPON RETURN- C ING. THESE CONSIST OF THE FUNCTION VALUE, THE SCALED C RELATIVE CHANGE IN X CAUSED BY THE MOST RECENT STEP (SEE C V(RELDX) BELOW), THE NUMBER OF FUNCTION AND GRADIENT C EVALUATIONS (CALLS ON CALCF AND CALCG), AND THE RELATIVE C FUNCTION REDUCTIONS PREDICTED FOR THE LAST STEP TAKEN AND C FOR A NEWTON STEP (OR PERHAPS A STEP BOUNDED BY V(LMAXS) C -- SEE THE DESCRIPTIONS OF PRELDF AND NPRELDF UNDER C IV(OUTLEV) ABOVE). C IV(STATPR) = 0 MEANS SKIP THIS PRINTING. C IV(STATPR) = -1 MEANS SKIP THIS PRINTING AS WELL AS THAT C OF THE ONE-LINE TERMINATION REASON MESSAGE. DEFAULT = 1. C IV(X0PRT).... IV(24) = 1 MEANS PRINT THE INITIAL X AND SCALE VECTOR D C (ON A FRESH START ONLY). IV(X0PRT) = 0 MEANS SKIP THIS C PRINTING. DEFAULT = 1. C C *** (SELECTED) IV OUTPUT VALUES *** C C IV(1)........ ON OUTPUT, IV(1) IS A RETURN CODE.... C 3 = X-CONVERGENCE. THE SCALED RELATIVE DIFFERENCE (SEE C V(RELDX)) BETWEEN THE CURRENT PARAMETER VECTOR X AND C A LOCALLY OPTIMAL PARAMETER VECTOR IS VERY LIKELY AT C MOST V(XCTOL). C 4 = RELATIVE FUNCTION CONVERGENCE. THE RELATIVE DIFFER- C ENCE BETWEEN THE CURRENT FUNCTION VALUE AND ITS LO- C CALLY OPTIMAL VALUE IS VERY LIKELY AT MOST V(RFCTOL). C 5 = BOTH X- AND RELATIVE FUNCTION CONVERGENCE (I.E., THE C CONDITIONS FOR IV(1) = 3 AND IV(1) = 4 BOTH HOLD). C 6 = ABSOLUTE FUNCTION CONVERGENCE. THE CURRENT FUNCTION C VALUE IS AT MOST V(AFCTOL) IN ABSOLUTE VALUE. C 7 = SINGULAR CONVERGENCE. THE HESSIAN NEAR THE CURRENT C ITERATE APPEARS TO BE SINGULAR OR NEARLY SO, AND A C STEP OF LENGTH AT MOST V(LMAXS) IS UNLIKELY TO YIELD C A RELATIVE FUNCTION DECREASE OF MORE THAN V(SCTOL). C 8 = FALSE CONVERGENCE. THE ITERATES APPEAR TO BE CONVERG- C ING TO A NONCRITICAL POINT. THIS MAY MEAN THAT THE C CONVERGENCE TOLERANCES (V(AFCTOL), V(RFCTOL), C V(XCTOL)) ARE TOO SMALL FOR THE ACCURACY TO WHICH C THE FUNCTION AND GRADIENT ARE BEING COMPUTED, THAT C THERE IS AN ERROR IN COMPUTING THE GRADIENT, OR THAT C THE FUNCTION OR GRADIENT IS DISCONTINUOUS NEAR X. C 9 = FUNCTION EVALUATION LIMIT REACHED WITHOUT OTHER CON- C VERGENCE (SEE IV(MXFCAL)). C 10 = ITERATION LIMIT REACHED WITHOUT OTHER CONVERGENCE C (SEE IV(MXITER)). C 11 = STOPX RETURNED .TRUE. (EXTERNAL INTERRUPT). SEE THE C USAGE NOTES BELOW. C 14 = STORAGE HAS BEEN ALLOCATED (AFTER A CALL WITH C IV(1) = 13). C 17 = RESTART ATTEMPTED WITH N CHANGED. C 18 = D HAS A NEGATIVE COMPONENT AND IV(DTYPE) .LE. 0. C 19...43 = V(IV(1)) IS OUT OF RANGE. C 63 = F(X) CANNOT BE COMPUTED AT THE INITIAL X. C 64 = BAD PARAMETERS PASSED TO ASSESS (WHICH SHOULD NOT C OCCUR). C 65 = THE GRADIENT COULD NOT BE COMPUTED AT X (SEE CALCG C ABOVE). C 67 = BAD FIRST PARAMETER TO IVSET. C 80 = IV(1) WAS OUT OF RANGE. C 81 = N IS NOT POSITIVE. C IV(G)........ IV(28) IS THE STARTING SUBSCRIPT IN V OF THE CURRENT C GRADIENT VECTOR (THE ONE CORRESPONDING TO X). C IV(LASTIV)... IV(44) IS THE LEAST ACCEPTABLE VALUE OF LIV. (IT IS C ONLY SET IF LIV IS AT LEAST 44.) C IV(LASTV).... IV(45) IS THE LEAST ACCEPTABLE VALUE OF LV. (IT IS C ONLY SET IF LIV IS LARGE ENOUGH, AT LEAST IV(LASTIV).) C IV(NFCALL)... IV(6) IS THE NUMBER OF CALLS SO FAR MADE ON CALCF (I.E., C FUNCTION EVALUATIONS). C IV(NGCALL)... IV(30) IS THE NUMBER OF GRADIENT EVALUATIONS (CALLS ON C CALCG). C IV(NITER).... IV(31) IS THE NUMBER OF ITERATIONS PERFORMED. C C *** (SELECTED) V INPUT VALUES (FROM SUBROUTINE IVSET) *** C C V(BIAS)..... V(43) IS THE BIAS PARAMETER USED IN SUBROUTINE DBLDOG -- C SEE THAT SUBROUTINE FOR DETAILS. DEFAULT = 0.8. C V(AFCTOL)... V(31) IS THE ABSOLUTE FUNCTION CONVERGENCE TOLERANCE. C IF MNG FINDS A POINT WHERE THE FUNCTION VALUE IS LESS C THAN V(AFCTOL) IN ABSOLUTE VALUE, AND IF MNG DOES NOT C RETURN WITH IV(1) = 3, 4, OR 5, THEN IT RETURNS WITH C IV(1) = 6. THIS TEST CAN BE TURNED OFF BY SETTING C V(AFCTOL) TO ZERO. DEFAULT = MAX(10**-20, MACHEP**2), C WHERE MACHEP IS THE UNIT ROUNDOFF. C V(DINIT).... V(38), IF NONNEGATIVE, IS THE VALUE TO WHICH THE SCALE C VECTOR D IS INITIALIZED. DEFAULT = -1. C V(LMAX0).... V(35) GIVES THE MAXIMUM 2-NORM ALLOWED FOR D TIMES THE C VERY FIRST STEP THAT MNG ATTEMPTS. THIS PARAMETER CAN C MARKEDLY AFFECT THE PERFORMANCE OF MNG. C V(LMAXS).... V(36) IS USED IN TESTING FOR SINGULAR CONVERGENCE -- IF C THE FUNCTION REDUCTION PREDICTED FOR A STEP OF LENGTH C BOUNDED BY V(LMAXS) IS AT MOST V(SCTOL) * ABS(F0), WHERE C F0 IS THE FUNCTION VALUE AT THE START OF THE CURRENT C ITERATION, AND IF MNG DOES NOT RETURN WITH IV(1) = 3, C 4, 5, OR 6, THEN IT RETURNS WITH IV(1) = 7. DEFAULT = 1. C V(RFCTOL)... V(32) IS THE RELATIVE FUNCTION CONVERGENCE TOLERANCE. C IF THE CURRENT MODEL PREDICTS A MAXIMUM POSSIBLE FUNCTION C REDUCTION (SEE V(NREDUC)) OF AT MOST V(RFCTOL)*ABS(F0) C AT THE START OF THE CURRENT ITERATION, WHERE F0 IS THE C THEN CURRENT FUNCTION VALUE, AND IF THE LAST STEP ATTEMPT- C ED ACHIEVED NO MORE THAN TWICE THE PREDICTED FUNCTION C DECREASE, THEN MNG RETURNS WITH IV(1) = 4 (OR 5). C DEFAULT = MAX(10**-10, MACHEP**(2/3)), WHERE MACHEP IS C THE UNIT ROUNDOFF. C V(SCTOL).... V(37) IS THE SINGULAR CONVERGENCE TOLERANCE -- SEE THE C DESCRIPTION OF V(LMAXS) ABOVE. C V(TUNER1)... V(26) HELPS DECIDE WHEN TO CHECK FOR FALSE CONVERGENCE. C THIS IS DONE IF THE ACTUAL FUNCTION DECREASE FROM THE C CURRENT STEP IS NO MORE THAN V(TUNER1) TIMES ITS PREDICT- C ED VALUE. DEFAULT = 0.1. C V(XCTOL).... V(33) IS THE X-CONVERGENCE TOLERANCE. IF A NEWTON STEP C (SEE V(NREDUC)) IS TRIED THAT HAS V(RELDX) .LE. V(XCTOL) C AND IF THIS STEP YIELDS AT MOST TWICE THE PREDICTED FUNC- C TION DECREASE, THEN MNG RETURNS WITH IV(1) = 3 (OR 5). C (SEE THE DESCRIPTION OF V(RELDX) BELOW.) C DEFAULT = MACHEP**0.5, WHERE MACHEP IS THE UNIT ROUNDOFF. C V(XFTOL).... V(34) IS THE FALSE CONVERGENCE TOLERANCE. IF A STEP IS C TRIED THAT GIVES NO MORE THAN V(TUNER1) TIMES THE PREDICT- C ED FUNCTION DECREASE AND THAT HAS V(RELDX) .LE. V(XFTOL), C AND IF MNG DOES NOT RETURN WITH IV(1) = 3, 4, 5, 6, OR C 7, THEN IT RETURNS WITH IV(1) = 8. (SEE THE DESCRIPTION C OF V(RELDX) BELOW.) DEFAULT = 100*MACHEP, WHERE C MACHEP IS THE UNIT ROUNDOFF. C V(*)........ IVSET SUPPLIES TO V A NUMBER OF TUNING CONSTANTS, WITH C WHICH IT SHOULD ORDINARILY BE UNNECESSARY TO TINKER. SEE C SECTION 17 OF VERSION 2.2 OF THE NL2SOL USAGE SUMMARY C (I.E., THE APPENDIX TO REF. 1) FOR DETAILS ON V(I), C I = DECFAC, INCFAC, PHMNFC, PHMXFC, RDFCMN, RDFCMX, C TUNER2, TUNER3, TUNER4, TUNER5. C C *** (SELECTED) V OUTPUT VALUES *** C C V(DGNORM)... V(1) IS THE 2-NORM OF (DIAG(D)**-1)*G, WHERE G IS THE C MOST RECENTLY COMPUTED GRADIENT. C V(DSTNRM)... V(2) IS THE 2-NORM OF DIAG(D)*STEP, WHERE STEP IS THE C CURRENT STEP. C V(F)........ V(10) IS THE CURRENT FUNCTION VALUE. C V(F0)....... V(13) IS THE FUNCTION VALUE AT THE START OF THE CURRENT C ITERATION. C V(NREDUC)... V(6), IF POSITIVE, IS THE MAXIMUM FUNCTION REDUCTION C POSSIBLE ACCORDING TO THE CURRENT MODEL, I.E., THE FUNC- C TION REDUCTION PREDICTED FOR A NEWTON STEP (I.E., C STEP = -H**-1 * G, WHERE G IS THE CURRENT GRADIENT AND C H IS THE CURRENT HESSIAN APPROXIMATION). C IF V(NREDUC) IS NEGATIVE, THEN IT IS THE NEGATIVE OF C THE FUNCTION REDUCTION PREDICTED FOR A STEP COMPUTED WITH C A STEP BOUND OF V(LMAXS) FOR _USE_ IN TESTING FOR SINGULAR C CONVERGENCE. C V(PREDUC)... V(7) IS THE FUNCTION REDUCTION PREDICTED (BY THE CURRENT C QUADRATIC MODEL) FOR THE CURRENT STEP. THIS (DIVIDED BY C V(F0)) IS USED IN TESTING FOR RELATIVE FUNCTION C CONVERGENCE. C V(RELDX).... V(17) IS THE SCALED RELATIVE CHANGE IN X CAUSED BY THE C CURRENT STEP, COMPUTED AS C MAX(ABS(D(I)*(X(I)-X0(I)), 1 .LE. I .LE. P) / C MAX(D(I)*(ABS(X(I))+ABS(X0(I))), 1 .LE. I .LE. P), C WHERE X = X0 + STEP. C C------------------------------- NOTES ------------------------------- C C *** ALGORITHM NOTES *** C C THIS ROUTINE USES A HESSIAN APPROXIMATION COMPUTED FROM THE C BFGS UPDATE (SEE REF 3). ONLY A CHOLESKY FACTOR OF THE HESSIAN C APPROXIMATION IS STORED, AND THIS IS UPDATED USING IDEAS FROM C REF. 4. STEPS ARE COMPUTED BY THE DOUBLE DOGLEG SCHEME DESCRIBED C IN REF. 2. THE STEPS ARE ASSESSED AS IN REF. 1. C C *** USAGE NOTES *** C C AFTER A RETURN WITH IV(1) .LE. 11, IT IS POSSIBLE TO RESTART, C I.E., TO CHANGE SOME OF THE IV AND V INPUT VALUES DESCRIBED ABOVE C AND CONTINUE THE ALGORITHM FROM THE POINT WHERE IT WAS INTERRUPT- C ED. IV(1) SHOULD NOT BE CHANGED, NOR SHOULD ANY ENTRIES OF IV C AND V OTHER THAN THE INPUT VALUES (THOSE SUPPLIED BY IVSET). C THOSE WHO DO NOT WISH TO WRITE A CALCG WHICH COMPUTES THE C GRADIENT ANALYTICALLY SHOULD CALL MNF RATHER THAN MNG. C MNF USES FINITE DIFFERENCES TO COMPUTE AN APPROXIMATE GRADIENT. C THOSE WHO WOULD PREFER TO PROVIDE F AND G (THE FUNCTION AND C GRADIENT) BY REVERSE COMMUNICATION RATHER THAN BY WRITING SUBROU- C TINES CALCF AND CALCG MAY CALL ON RMNG DIRECTLY. SEE THE COM- C MENTS AT THE BEGINNING OF RMNG. C THOSE WHO _USE_ MNG INTERACTIVELY MAY WISH TO SUPPLY THEIR C OWN STOPX FUNCTION, WHICH SHOULD RETURN .TRUE. IF THE BREAK KEY C HAS BEEN PRESSED SINCE STOPX WAS LAST INVOKED. THIS MAKES IT C POSSIBLE TO EXTERNALLY INTERRUPT MNG (WHICH WILL RETURN WITH C IV(1) = 11 IF STOPX RETURNS .TRUE.). C STORAGE FOR G IS ALLOCATED AT THE END OF V. THUS THE CALLER C MAY MAKE V LONGER THAN SPECIFIED ABOVE AND MAY ALLOW CALCG TO USE C ELEMENTS OF G BEYOND THE FIRST N AS SCRATCH STORAGE. C C *** PORTABILITY NOTES *** C C THE MNG DISTRIBUTION TAPE CONTAINS BOTH SINGLE- AND DOUBLE- C PRECISION VERSIONS OF THE MNG SOURCE CODE, SO IT SHOULD BE UN- C NECESSARY TO CHANGE PRECISIONS. C ONLY THE FUNCTIONS I7MDCN AND R7MDC CONTAIN MACHINE-DEPENDENT C CONSTANTS. TO CHANGE FROM ONE MACHINE TO ANOTHER, IT SHOULD C SUFFICE TO CHANGE THE (FEW) RELEVANT LINES IN THESE FUNCTIONS. C INTRINSIC FUNCTIONS ARE EXPLICITLY DECLARED. ON CERTAIN COM- C PUTERS (E.G. UNIVAC), IT MAY BE NECESSARY TO COMMENT OUT THESE C DECLARATIONS. SO THAT THIS MAY BE DONE AUTOMATICALLY BY A SIMPLE C PROGRAM, SUCH DECLARATIONS ARE PRECEDED BY A COMMENT HAVING C/+ C IN COLUMNS 1-3 AND BLANKS IN COLUMNS 4-72 AND ARE FOLLOWED BY C A COMMENT HAVING C/ IN COLUMNS 1 AND 2 AND BLANKS IN COLUMNS 3-72. C THE MNG SOURCE CODE IS EXPRESSED IN 1966 ANSI STANDARD C FORTRAN. IT MAY BE CONVERTED TO FORTRAN 77 BY COMMENTING OUT ALL C LINES THAT FALL BETWEEN A LINE HAVING C/6 IN COLUMNS 1-3 AND A C LINE HAVING C/7 IN COLUMNS 1-3 AND BY REMOVING (I.E., REPLACING C BY A BLANK) THE C IN COLUMN 1 OF THE LINES THAT FOLLOW THE C/7 C LINE AND PRECEDE A LINE HAVING C/ IN COLUMNS 1-2 AND BLANKS IN C COLUMNS 3-72. THESE CHANGES CONVERT SOME DATA STATEMENTS INTO C PARAMETER STATEMENTS, CONVERT SOME VARIABLES FROM REAL TO C CHARACTER*4, AND MAKE THE DATA STATEMENTS THAT INITIALIZE THESE C VARIABLES _USE_ CHARACTER STRINGS DELIMITED BY PRIMES INSTEAD C OF HOLLERITH CONSTANTS. (SUCH VARIABLES AND DATA STATEMENTS C APPEAR ONLY IN MODULES ITSUM AND PARCK. PARAMETER STATEMENTS C APPEAR NEARLY EVERYWHERE.) THESE CHANGES ALSO ADD SAVE STATE- C MENTS FOR VARIABLES GIVEN MACHINE-DEPENDENT CONSTANTS BY R7MDC. C C *** REFERENCES *** C C 1. DENNIS, J.E., GAY, D.M., AND WELSCH, R.E. (1981), ALGORITHM 573 -- C AN ADAPTIVE NONLINEAR LEAST-SQUARES ALGORITHM, ACM TRANS. C MATH. SOFTWARE 7, PP. 369-383. C C 2. DENNIS, J.E., AND MEI, H.H.W. (1979), TWO NEW UNCONSTRAINED OPTI- C MIZATION ALGORITHMS WHICH _USE_ FUNCTION AND GRADIENT C VALUES, J. OPTIM. THEORY APPLIC. 28, PP. 453-482. C C 3. DENNIS, J.E., AND MORE, J.J. (1977), QUASI-NEWTON METHODS, MOTIVA- C TION AND THEORY, SIAM REV. 19, PP. 46-89. C C 4. GOLDFARB, D. (1976), FACTORIZED VARIABLE METRIC METHODS FOR UNCON- C STRAINED OPTIMIZATION, MATH. COMPUT. 30, PP. 796-811. C C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER 1980). REVISED SUMMER 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER C GRANTS MCS-7600324, DCR75-10143, 76-14311DSS, MCS76-11989, C AND MCS-7906671. C. C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL IVSET, RMNG C C IVSET... SUPPLIES DEFAULT IV AND V INPUT COMPONENTS. C RMNG... REVERSE-COMMUNICATION ROUTINE THAT CARRIES OUT MNG ALGO- C RITHM. C INTEGER G1, IV1, NF REAL F C C *** SUBSCRIPTS FOR IV *** C INTEGER NEXTV, NFCALL, NFGCAL, G, TOOBIG, VNEED C C/6 C DATA NEXTV/47/, NFCALL/6/, NFGCAL/7/, G/28/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (NEXTV=47, NFCALL=6, NFGCAL=7, G=28, TOOBIG=2, VNEED=4) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IF (IV(1) .EQ. 0) CALL IVSET(2, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 12 .OR. IV1 .EQ. 13) IV(VNEED) = IV(VNEED) + N IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 G1 = 1 IF (IV1 .EQ. 12) IV(1) = 13 GO TO 20 C 10 G1 = IV(G) C 20 CALL RMNG(D, F, V(G1), IV, LIV, LV, N, V, X) IF (IV(1) - 2) 30, 40, 50 C 30 NF = IV(NFCALL) CALL CALCF(N, X, NF, F, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 40 NF = IV(NFGCAL) CALL CALCG(N, X, NF, V(G1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 50 IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION C IV(G) = IV(NEXTV) IV(NEXTV) = IV(G) + N IF (IV1 .NE. 13) GO TO 10 C 999 RETURN C *** LAST CARD OF MNG FOLLOWS *** END PyBDSF-1.10.1/src/port3/mngb.f000066400000000000000000000044611420247104600155560ustar00rootroot00000000000000 SUBROUTINE MNGB(N, D, X, B, CALCF, CALCG, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL SIMPLY BOUNDED OBJECTIVE FUNCTION USING *** C *** ANALYTIC GRADIENT AND HESSIAN APPROX. FROM SECANT UPDATE *** C INTEGER N, LIV, LV C/6S C INTEGER IV(LIV), UIPARM(1) C REAL D(N), X(N), B(2,N), V(LV), URPARM(1) C/7S INTEGER IV(LIV), UIPARM(*) REAL D(N), X(N), B(2,N), V(LV), URPARM(*) C/ C DIMENSION IV(59 + N), V(71 + N*(N+21)/2), UIPARM(*), URPARM(*) EXTERNAL CALCF, CALCG, UFPARM C C *** DISCUSSION *** C C THIS ROUTINE IS LIKE MNG, EXCEPT FOR THE EXTRA PARAMETER B, C AN ARRAY OF LOWER AND UPPER BOUNDS ON X... MNGB ENFORCES THE C CONSTRAINTS THAT B(1,I) .LE. X(I) .LE. B(2,I), I = 1(1)N. C (INSTEAD OF CALLING RMNG, MNGB CALLS RMNGB.) C. C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL IVSET, RMNGB C C IVSET.... SUPPLIES DEFAULT IV AND V INPUT COMPONENTS. C RMNGB... REVERSE-COMMUNICATION ROUTINE THAT CARRIES OUT MNG ALGO- C RITHM. C INTEGER G1, IV1, NF REAL F C C *** SUBSCRIPTS FOR IV *** C INTEGER NEXTV, NFCALL, NFGCAL, G, TOOBIG, VNEED C C/6 C DATA NEXTV/47/, NFCALL/6/, NFGCAL/7/, G/28/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (NEXTV=47, NFCALL=6, NFGCAL=7, G=28, TOOBIG=2, VNEED=4) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IF (IV(1) .EQ. 0) CALL IVSET(2, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + N CALL RMNGB(B, D, F, V, IV, LIV, LV, N, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION C IV(G) = IV(NEXTV) IV(NEXTV) = IV(G) + N IF (IV1 .EQ. 13) GO TO 999 C 10 G1 = IV(G) C 20 CALL RMNGB(B, D, F, V(G1), IV, LIV, LV, N, V, X) IF (IV(1) - 2) 30, 40, 999 C 30 NF = IV(NFCALL) CALL CALCF(N, X, NF, F, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 40 NF = IV(NFGCAL) CALL CALCG(N, X, NF, V(G1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 999 RETURN C *** LAST CARD OF MNGB FOLLOWS *** END PyBDSF-1.10.1/src/port3/mnh.f000066400000000000000000000131451420247104600154140ustar00rootroot00000000000000 SUBROUTINE MNH(N, D, X, CALCF, CALCGH, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING *** C *** (ANALYTIC) GRADIENT AND HESSIAN PROVIDED BY THE CALLER. *** C INTEGER LIV, LV, N INTEGER IV(LIV), UIPARM(1) REAL D(N), X(N), V(LV), URPARM(1) C DIMENSION V(78 + N*(N+12)), UIPARM(*), URPARM(*) EXTERNAL CALCF, CALCGH, UFPARM C C------------------------------ DISCUSSION --------------------------- C C THIS ROUTINE IS LIKE MNG, EXCEPT THAT THE SUBROUTINE PARA- C METER CALCG OF MNG (WHICH COMPUTES THE GRADIENT OF THE OBJEC- C TIVE FUNCTION) IS REPLACED BY THE SUBROUTINE PARAMETER CALCGH, C WHICH COMPUTES BOTH THE GRADIENT AND (LOWER TRIANGLE OF THE) C HESSIAN OF THE OBJECTIVE FUNCTION. THE CALLING SEQUENCE IS... C CALL CALCGH(N, X, NF, G, H, UIPARM, URPARM, UFPARM) C PARAMETERS N, X, NF, G, UIPARM, URPARM, AND UFPARM ARE THE SAME C AS FOR MNG, WHILE H IS AN ARRAY OF LENGTH N*(N+1)/2 IN WHICH C CALCGH MUST STORE THE LOWER TRIANGLE OF THE HESSIAN AT X. START- C ING AT H(1), CALCGH MUST STORE THE HESSIAN ENTRIES IN THE ORDER C (1,1), (2,1), (2,2), (3,1), (3,2), (3,3), ... C THE VALUE PRINTED (BY ITSUM) IN THE COLUMN LABELLED STPPAR C IS THE LEVENBERG-MARQUARDT USED IN COMPUTING THE CURRENT STEP. C ZERO MEANS A FULL NEWTON STEP. IF THE SPECIAL CASE DESCRIBED IN C REF. 1 IS DETECTED, THEN STPPAR IS NEGATED. THE VALUE PRINTED C IN THE COLUMN LABELLED NPRELDF IS ZERO IF THE CURRENT HESSIAN C IS NOT POSITIVE DEFINITE. C IT SOMETIMES PROVES WORTHWHILE TO LET D BE DETERMINED FROM THE C DIAGONAL OF THE HESSIAN MATRIX BY SETTING IV(DTYPE) = 1 AND C V(DINIT) = 0. THE FOLLOWING IV AND V COMPONENTS ARE RELEVANT... C C IV(DTOL)..... IV(59) GIVES THE STARTING SUBSCRIPT IN V OF THE DTOL C ARRAY USED WHEN D IS UPDATED. (IV(DTOL) CAN BE C INITIALIZED BY CALLING MNH WITH IV(1) = 13.) C IV(DTYPE).... IV(16) TELLS HOW THE SCALE VECTOR D SHOULD BE CHOSEN. C IV(DTYPE) .LE. 0 MEANS THAT D SHOULD NOT BE UPDATED, AND C IV(DTYPE) .GE. 1 MEANS THAT D SHOULD BE UPDATED AS C DESCRIBED BELOW WITH V(DFAC). DEFAULT = 0. C V(DFAC)..... V(41) AND THE DTOL AND D0 ARRAYS (SEE V(DTINIT) AND C V(D0INIT)) ARE USED IN UPDATING THE SCALE VECTOR D WHEN C IV(DTYPE) .GT. 0. (D IS INITIALIZED ACCORDING TO C V(DINIT), DESCRIBED IN MNG.) LET C D1(I) = MAX(SQRT(ABS(H(I,I))), V(DFAC)*D(I)), C WHERE H(I,I) IS THE I-TH DIAGONAL ELEMENT OF THE CURRENT C HESSIAN. IF IV(DTYPE) = 1, THEN D(I) IS SET TO D1(I) C UNLESS D1(I) .LT. DTOL(I), IN WHICH CASE D(I) IS SET TO C MAX(D0(I), DTOL(I)). C IF IV(DTYPE) .GE. 2, THEN D IS UPDATED DURING THE FIRST C ITERATION AS FOR IV(DTYPE) = 1 (AFTER ANY INITIALIZATION C DUE TO V(DINIT)) AND IS LEFT UNCHANGED THEREAFTER. C DEFAULT = 0.6. C V(DTINIT)... V(39), IF POSITIVE, IS THE VALUE TO WHICH ALL COMPONENTS C OF THE DTOL ARRAY (SEE V(DFAC)) ARE INITIALIZED. IF C V(DTINIT) = 0, THEN IT IS ASSUMED THAT THE CALLER HAS C STORED DTOL IN V STARTING AT V(IV(DTOL)). C DEFAULT = 10**-6. C V(D0INIT)... V(40), IF POSITIVE, IS THE VALUE TO WHICH ALL COMPONENTS C OF THE D0 VECTOR (SEE V(DFAC)) ARE INITIALIZED. IF C V(DFAC) = 0, THEN IT IS ASSUMED THAT THE CALLER HAS C STORED D0 IN V STARTING AT V(IV(DTOL)+N). DEFAULT = 1.0. C C *** REFERENCE *** C C 1. GAY, D.M. (1981), COMPUTING OPTIMAL LOCALLY CONSTRAINED STEPS, C SIAM J. SCI. STATIST. COMPUT. 2, PP. 186-197. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER 1980). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324 AND MCS-7906671. C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL IVSET, RMNH C C IVSET... PROVIDES DEFAULT INPUT VALUES FOR IV AND V. C RMNH... REVERSE-COMMUNICATION ROUTINE THAT DOES MNH ALGORITHM. C INTEGER G1, H1, IV1, LH, NF REAL F C C *** SUBSCRIPTS FOR IV *** C INTEGER G, H, NEXTV, NFCALL, NFGCAL, TOOBIG, VNEED C C/6 C DATA NEXTV/47/, NFCALL/6/, NFGCAL/7/, G/28/, H/56/, TOOBIG/2/, C 1 VNEED/4/ C/7 PARAMETER (NEXTV=47, NFCALL=6, NFGCAL=7, G=28, H=56, TOOBIG=2, 1 VNEED=4) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C LH = N * (N + 1) / 2 IF (IV(1) .EQ. 0) CALL IVSET(2, IV, LIV, LV, V) IF (IV(1) .EQ. 12 .OR. IV(1) .EQ. 13) 1 IV(VNEED) = IV(VNEED) + N*(N+3)/2 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 G1 = 1 H1 = 1 IF (IV1 .EQ. 12) IV(1) = 13 GO TO 20 C 10 G1 = IV(G) H1 = IV(H) C 20 CALL RMNH(D, F, V(G1), V(H1), IV, LH, LIV, LV, N, V, X) IF (IV(1) - 2) 30, 40, 50 C 30 NF = IV(NFCALL) CALL CALCF(N, X, NF, F, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 40 NF = IV(NFGCAL) CALL CALCGH(N, X, NF, V(G1), V(H1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 50 IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION C IV(G) = IV(NEXTV) IV(H) = IV(G) + N IV(NEXTV) = IV(H) + N*(N+1)/2 IF (IV1 .NE. 13) GO TO 10 C 999 RETURN C *** LAST CARD OF MNH FOLLOWS *** END PyBDSF-1.10.1/src/port3/mnhb.f000066400000000000000000000130241420247104600155520ustar00rootroot00000000000000 SUBROUTINE MNHB(N, D, X, B, CALCF, CALCGH, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE GENERAL SIMPLY BOUNDED OBJECTIVE FUNCTION USING *** C *** (ANALYTIC) GRADIENT AND HESSIAN PROVIDED BY THE CALLER. *** C INTEGER LIV, LV, N C/6S C INTEGER IV(LIV), UIPARM(1) C REAL B(2,N), D(N), X(N), V(LV), URPARM(1) C/7S INTEGER IV(LIV), UIPARM(*) REAL B(2,N), D(N), X(N), V(LV), URPARM(*) C/ C DIMENSION IV(59 + 3*N), V(78 + N*(N+15)) EXTERNAL CALCF, CALCGH, UFPARM C C------------------------------ DISCUSSION --------------------------- C C THIS ROUTINE IS LIKE MNGB, EXCEPT THAT THE SUBROUTINE PARA- C METER CALCG OF MNGB (WHICH COMPUTES THE GRADIENT OF THE OBJEC- C TIVE FUNCTION) IS REPLACED BY THE SUBROUTINE PARAMETER CALCGH, C WHICH COMPUTES BOTH THE GRADIENT AND (LOWER TRIANGLE OF THE) C HESSIAN OF THE OBJECTIVE FUNCTION. THE CALLING SEQUENCE IS... C CALL CALCGH(N, X, NF, G, H, UIPARM, URPARM, UFPARM) C PARAMETERS N, X, NF, G, UIPARM, URPARM, AND UFPARM ARE THE SAME C AS FOR MNGB, WHILE H IS AN ARRAY OF LENGTH N*(N+1)/2 IN WHICH C CALCGH MUST STORE THE LOWER TRIANGLE OF THE HESSIAN AT X. START- C ING AT H(1), CALCGH MUST STORE THE HESSIAN ENTRIES IN THE ORDER C (1,1), (2,1), (2,2), (3,1), (3,2), (3,3), ... C THE VALUE PRINTED (BY ITSUM) IN THE COLUMN LABELLED STPPAR C IS THE LEVENBERG-MARQUARDT USED IN COMPUTING THE CURRENT STEP. C ZERO MEANS A FULL NEWTON STEP. IF THE SPECIAL CASE DESCRIBED IN C REF. 1 IS DETECTED, THEN STPPAR IS NEGATED. THE VALUE PRINTED C IN THE COLUMN LABELLED NPRELDF IS ZERO IF THE CURRENT HESSIAN C IS NOT POSITIVE DEFINITE. C IT SOMETIMES PROVES WORTHWHILE TO LET D BE DETERMINED FROM THE C DIAGONAL OF THE HESSIAN MATRIX BY SETTING IV(DTYPE) = 1 AND C V(DINIT) = 0. THE FOLLOWING IV AND V COMPONENTS ARE RELEVANT... C C IV(DTOL)..... IV(59) GIVES THE STARTING SUBSCRIPT IN V OF THE DTOL C ARRAY USED WHEN D IS UPDATED. (IV(DTOL) CAN BE C INITIALIZED BY CALLING MNHB WITH IV(1) = 13.) C IV(DTYPE).... IV(16) TELLS HOW THE SCALE VECTOR D SHOULD BE CHOSEN. C IV(DTYPE) .LE. 0 MEANS THAT D SHOULD NOT BE UPDATED, AND C IV(DTYPE) .GE. 1 MEANS THAT D SHOULD BE UPDATED AS C DESCRIBED BELOW WITH V(DFAC). DEFAULT = 0. C V(DFAC)..... V(41) AND THE DTOL AND D0 ARRAYS (SEE V(DTINIT) AND C V(D0INIT)) ARE USED IN UPDATING THE SCALE VECTOR D WHEN C IV(DTYPE) .GT. 0. (D IS INITIALIZED ACCORDING TO C V(DINIT), DESCRIBED IN MNG.) LET C D1(I) = MAX(SQRT(ABS(H(I,I))), V(DFAC)*D(I)), C WHERE H(I,I) IS THE I-TH DIAGONAL ELEMENT OF THE CURRENT C HESSIAN. IF IV(DTYPE) = 1, THEN D(I) IS SET TO D1(I) C UNLESS D1(I) .LT. DTOL(I), IN WHICH CASE D(I) IS SET TO C MAX(D0(I), DTOL(I)). C IF IV(DTYPE) .GE. 2, THEN D IS UPDATED DURING THE FIRST C ITERATION AS FOR IV(DTYPE) = 1 (AFTER ANY INITIALIZATION C DUE TO V(DINIT)) AND IS LEFT UNCHANGED THEREAFTER. C DEFAULT = 0.6. C V(DTINIT)... V(39), IF POSITIVE, IS THE VALUE TO WHICH ALL COMPONENTS C OF THE DTOL ARRAY (SEE V(DFAC)) ARE INITIALIZED. IF C V(DTINIT) = 0, THEN IT IS ASSUMED THAT THE CALLER HAS C STORED DTOL IN V STARTING AT V(IV(DTOL)). C DEFAULT = 10**-6. C V(D0INIT)... V(40), IF POSITIVE, IS THE VALUE TO WHICH ALL COMPONENTS C OF THE D0 VECTOR (SEE V(DFAC)) ARE INITIALIZED. IF C V(DFAC) = 0, THEN IT IS ASSUMED THAT THE CALLER HAS C STORED D0 IN V STARTING AT V(IV(DTOL)+N). DEFAULT = 1.0. C C *** REFERENCE *** C C 1. GAY, D.M. (1981), COMPUTING OPTIMAL LOCALLY CONSTRAINED STEPS, C SIAM J. SCI. STATIST. COMPUT. 2, PP. 186-197. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER, SPRING 1983). C C---------------------------- DECLARATIONS --------------------------- C EXTERNAL IVSET, RMNHB C C IVSET.... PROVIDES DEFAULT INPUT VALUES FOR IV AND V. C RMNHB... REVERSE-COMMUNICATION ROUTINE THAT DOES MNHB ALGORITHM. C INTEGER G1, H1, IV1, LH, NF REAL F C C *** SUBSCRIPTS FOR IV *** C INTEGER G, H, NEXTV, NFCALL, NFGCAL, TOOBIG, VNEED C C/6 C DATA NEXTV/47/, NFCALL/6/, NFGCAL/7/, G/28/, H/56/, TOOBIG/2/, C 1 VNEED/4/ C/7 PARAMETER (NEXTV=47, NFCALL=6, NFGCAL=7, G=28, H=56, TOOBIG=2, 1 VNEED=4) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C LH = N * (N + 1) / 2 IF (IV(1) .EQ. 0) CALL IVSET(2, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + N*(N+3)/2 CALL RMNHB(B, D, F, V, V, IV, LH, LIV, LV, N, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION C IV(G) = IV(NEXTV) IV(H) = IV(G) + N IV(NEXTV) = IV(H) + N*(N+1)/2 IF (IV1 .EQ. 13) GO TO 999 C 10 G1 = IV(G) H1 = IV(H) C 20 CALL RMNHB(B, D, F, V(G1), V(H1), IV, LH, LIV, LV, N, V, X) IF (IV(1) - 2) 30, 40, 999 C 30 NF = IV(NFCALL) CALL CALCF(N, X, NF, F, UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 40 NF = IV(NFGCAL) CALL CALCGH(N, X, NF, V(G1), V(H1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 20 C 999 RETURN C *** LAST CARD OF MNHB FOLLOWS *** END PyBDSF-1.10.1/src/port3/movebc.f000066400000000000000000000005271420247104600161050ustar00rootroot00000000000000 SUBROUTINE MOVEBC(N,A,B) C C MOVEBC MOVES N COMPLEX ITEMS FROM A TO B C USING A BACKWARDS DO LOOP C C/R C REAL A(2,N), B(2,N) C/C COMPLEX A(1),B(1) C/ C I = N C 10 IF(I .LE. 0) RETURN C/R C B(2,I) = A(2,I) C B(1,I) = A(1,I) C/C B(I) = A(I) C/ I = I - 1 GO TO 10 C END PyBDSF-1.10.1/src/port3/movebd.f000066400000000000000000000004111420247104600160760ustar00rootroot00000000000000 SUBROUTINE MOVEBD(N,A,B) C C MOVEBD MOVES N DOUBLE PRECISION ITEMS FROM A TO B C USING A BACKWARDS DO LOOP C DOUBLE PRECISION A(1),B(1) C I = N C 10 IF(I .LE. 0) RETURN B(I) = A(I) I = I - 1 GO TO 10 C END PyBDSF-1.10.1/src/port3/movebi.f000066400000000000000000000003671420247104600161150ustar00rootroot00000000000000 SUBROUTINE MOVEBI(N,A,B) C C MOVEBI MOVES N INTEGER ITEMS FROM A TO B C USING A BACKWARDS DO LOOP C INTEGER A(1),B(1) C I = N C 10 IF(I .LE. 0) RETURN B(I) = A(I) I = I - 1 GO TO 10 C END PyBDSF-1.10.1/src/port3/movebl.f000066400000000000000000000003671420247104600161200ustar00rootroot00000000000000 SUBROUTINE MOVEBL(N,A,B) C C MOVEBL MOVES N LOGICAL ITEMS FROM A TO B C USING A BACKWARDS DO LOOP C LOGICAL A(1),B(1) C I = N C 10 IF(I .LE. 0) RETURN B(I) = A(I) I = I - 1 GO TO 10 C END PyBDSF-1.10.1/src/port3/movebr.f000066400000000000000000000003611420247104600161200ustar00rootroot00000000000000 SUBROUTINE MOVEBR(N,A,B) C C MOVEBR MOVES N REAL ITEMS FROM A TO B C USING A BACKWARDS DO LOOP C REAL A(1),B(1) C I = N C 10 IF(I .LE. 0) RETURN B(I) = A(I) I = I - 1 GO TO 10 C END PyBDSF-1.10.1/src/port3/movefc.f000066400000000000000000000005131420247104600161040ustar00rootroot00000000000000 SUBROUTINE MOVEFC(N,A,B) C C MOVEFC MOVES N COMPLEX ITEMS FROM A TO B C USING A FORWARDS DO LOOP C C/R C REAL A(2,N), B(2,N) C/C COMPLEX A(1),B(1) C/ C IF(N .LE. 0) RETURN C DO 10 I = 1, N C/R C B(1,I) = A(1,I) C10 B(2,I) = A(2,I) C/C 10 B(I) = A(I) C/ C RETURN C END PyBDSF-1.10.1/src/port3/movefd.f000066400000000000000000000003751420247104600161130ustar00rootroot00000000000000 SUBROUTINE MOVEFD(N,A,B) C C MOVEFD MOVES N DOUBLE PRECISION ITEMS FROM A TO B C USING A FORWARDS DO LOOP C DOUBLE PRECISION A(1),B(1) C IF(N .LE. 0) RETURN C DO 10 I = 1, N 10 B(I) = A(I) C RETURN C END PyBDSF-1.10.1/src/port3/movefi.f000066400000000000000000000003531420247104600161140ustar00rootroot00000000000000 SUBROUTINE MOVEFI(N,A,B) C C MOVEFI MOVES N INTEGER ITEMS FROM A TO B C USING A FORWARDS DO LOOP C INTEGER A(1),B(1) C IF(N .LE. 0) RETURN C DO 10 I = 1, N 10 B(I) = A(I) C RETURN C END PyBDSF-1.10.1/src/port3/movefl.f000066400000000000000000000003531420247104600161170ustar00rootroot00000000000000 SUBROUTINE MOVEFL(N,A,B) C C MOVEFL MOVES N LOGICAL ITEMS FROM A TO B C USING A FORWARDS DO LOOP C LOGICAL A(1),B(1) C IF(N .LE. 0) RETURN C DO 10 I = 1, N 10 B(I) = A(I) C RETURN C END PyBDSF-1.10.1/src/port3/movefr.f000066400000000000000000000003451420247104600161260ustar00rootroot00000000000000 SUBROUTINE MOVEFR(N,A,B) C C MOVEFR MOVES N REAL ITEMS FROM A TO B C USING A FORWARDS DO LOOP C REAL A(1),B(1) C IF(N .LE. 0) RETURN C DO 10 I = 1, N 10 B(I) = A(I) C RETURN C END PyBDSF-1.10.1/src/port3/mtstak.f000066400000000000000000000001631420247104600161310ustar00rootroot00000000000000 INTEGER FUNCTION MTSTAK(NITEMS) C CALL I0TK01 MTSTAK = ISTKMD(NITEMS) C RETURN C END PyBDSF-1.10.1/src/port3/n2cvp.f000066400000000000000000000047661420247104600156730ustar00rootroot00000000000000 SUBROUTINE N2CVP(IV, LIV, LV, P, V) C C *** PRINT COVARIANCE MATRIX FOR RN2G *** C INTEGER LIV, LV, P INTEGER IV(LIV) REAL V(LV) C C *** LOCAL VARIABLES *** C INTEGER COV1, I, II, I1, J, PU REAL T C C *** IV SUBSCRIPTS *** C INTEGER COVMAT, COVPRT, COVREQ, NEEDHD, NFCOV, NGCOV, PRUNIT, 1 RCOND, REGD, STATPR C C/6 C DATA COVMAT/26/, COVPRT/14/, COVREQ/15/, NEEDHD/36/, NFCOV/52/, C 1 NGCOV/53/, PRUNIT/21/, RCOND/53/, REGD/67/, STATPR/23/ C/7 PARAMETER (COVMAT=26, COVPRT=14, COVREQ=15, NEEDHD=36, NFCOV=52, 1 NGCOV=53, PRUNIT=21, RCOND=53, REGD=67, STATPR=23) C/ C *** BODY *** C IF (IV(1) .GT. 8) GO TO 999 PU = IV(PRUNIT) IF (PU .EQ. 0) GO TO 999 IF (IV(STATPR) .EQ. 0) GO TO 30 IF (IV(NFCOV) .GT. 0) WRITE(PU,10) IV(NFCOV) 10 FORMAT(/1X,I4,50H EXTRA FUNC. EVALS FOR COVARIANCE AND DIAGNOST 1ICS.) IF (IV(NGCOV) .GT. 0) WRITE(PU,20) IV(NGCOV) 20 FORMAT(1X,I4,50H EXTRA GRAD. EVALS FOR COVARIANCE AND DIAGNOSTI 1CS.) C 30 IF (IV(COVPRT) .LE. 0) GO TO 999 COV1 = IV(COVMAT) IF (IV(REGD) .LE. 0 .AND. COV1 .LE. 0) GO TO 70 IV(NEEDHD) = 1 T = V(RCOND)**2 IF (IABS(IV(COVREQ)) .GT. 2) GO TO 50 C WRITE(PU,40) T 40 FORMAT(/47H RECIPROCAL CONDITION OF F.D. HESSIAN = AT MOST,E10.2) GO TO 70 C 50 WRITE(PU,60) T 60 FORMAT(/44H RECIPROCAL CONDITION OF (J**T)*J = AT LEAST,E10.2) C 70 IF (MOD(IV(COVPRT),2) .EQ. 0) GO TO 999 IV(NEEDHD) = 1 IF (COV1) 80,110,130 80 IF (-1 .EQ. COV1) WRITE(PU,90) 90 FORMAT(/43H ++++++ INDEFINITE COVARIANCE MATRIX ++++++) IF (-2 .EQ. COV1) WRITE(PU,100) 100 FORMAT(/52H ++++++ OVERSIZE STEPS IN COMPUTING COVARIANCE +++++) GO TO 999 C 110 WRITE(PU,120) 120 FORMAT(/45H ++++++ COVARIANCE MATRIX NOT COMPUTED ++++++) GO TO 999 C 130 I = IABS(IV(COVREQ)) IF (I .LE. 1) WRITE(PU,140) 140 FORMAT(/48H COVARIANCE = SCALE * H**-1 * (J**T * J) * H**-1/ 1 23H WHERE H = F.D. HESSIAN/) IF (I .EQ. 2) WRITE(PU,150) 150 FORMAT(/56H COVARIANCE = H**-1, WHERE H = FINITE-DIFFERENCE HESSIA 1N/) IF (I .GT. 2) WRITE(PU,160) 160 FORMAT(/30H COVARIANCE = SCALE * J**T * J/) II = COV1 - 1 DO 170 I = 1, P I1 = II + 1 II = II + I WRITE(PU,180) I, (V(J), J = I1, II) 170 CONTINUE 180 FORMAT(4H ROW,I3,2X,5E12.3/(9X,5E12.3)) C 999 RETURN C *** LAST CARD OF N2CVP FOLLOWS *** END PyBDSF-1.10.1/src/port3/n2f.f000066400000000000000000000131561420247104600153210ustar00rootroot00000000000000 SUBROUTINE N2F(N, P, X, CALCR, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** MINIMIZE A NONLINEAR SUM OF SQUARES USING RESIDUAL VALUES ONLY.. C *** THIS AMOUNTS TO N2G WITHOUT THE SUBROUTINE PARAMETER CALCJ. C C *** PARAMETERS *** C INTEGER N, P, LIV, LV C/6 C INTEGER IV(LIV), UIPARM(1) C REAL X(P), V(LV), URPARM(1) C/7 INTEGER IV(LIV), UIPARM(*) REAL X(P), V(LV), URPARM(*) C/ EXTERNAL CALCR, UFPARM C C----------------------------- DISCUSSION ---------------------------- C C THIS AMOUNTS TO SUBROUTINE NL2SNO (REF. 1) MODIFIED TO CALL C RN2G. C THE PARAMETERS FOR N2F ARE THE SAME AS THOSE FOR N2G C (WHICH SEE), EXCEPT THAT CALCJ IS OMITTED. INSTEAD OF CALLING C CALCJ TO OBTAIN THE JACOBIAN MATRIX OF R AT X, N2F COMPUTES C AN APPROXIMATION TO IT BY FINITE (FORWARD) DIFFERENCES -- SEE C V(DLTFDJ) BELOW. N2F USES FUNCTION VALUES ONLY WHEN COMPUT- C THE COVARIANCE MATRIX (RATHER THAN THE FUNCTIONS AND GRADIENTS C THAT N2G MAY USE). TO DO SO, N2F SETS IV(COVREQ) TO MINUS C ITS ABSOLUTE VALUE. THUS V(DELTA0) IS NEVER REFERENCED AND ONLY C V(DLTFDC) MATTERS -- SEE NL2SOL FOR A DESCRIPTION OF V(DLTFDC). C THE NUMBER OF EXTRA CALLS ON CALCR USED IN COMPUTING THE JACO- C BIAN APPROXIMATION ARE NOT INCLUDED IN THE FUNCTION EVALUATION C COUNT IV(NFCALL), BUT ARE RECORDED IN IV(NGCALL) INSTEAD. C C V(DLTFDJ)... V(43) HELPS CHOOSE THE STEP SIZE USED WHEN COMPUTING THE C FINITE-DIFFERENCE JACOBIAN MATRIX. FOR DIFFERENCES IN- C VOLVING X(I), THE STEP SIZE FIRST TRIED IS C V(DLTFDJ) * MAX(ABS(X(I)), 1/D(I)), C WHERE D IS THE CURRENT SCALE VECTOR (SEE REF. 1). (IF C THIS STEP IS TOO BIG, I.E., IF CALCR SETS NF TO 0, THEN C SMALLER STEPS ARE TRIED UNTIL THE STEP SIZE IS SHRUNK BE- C LOW 1000 * MACHEP, WHERE MACHEP IS THE UNIT ROUNDOFF. C DEFAULT = MACHEP**0.5. C C *** REFERENCE *** C C 1. DENNIS, J.E., GAY, D.M., AND WELSCH, R.E. (1981), AN ADAPTIVE C NONLINEAR LEAST-SQUARES ALGORITHM, ACM TRANS. MATH. C SOFTWARE, VOL. 7, NO. 3. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C+++++++++++++++++++++++++++ DECLARATIONS +++++++++++++++++++++++++++ C C *** EXTERNAL SUBROUTINES *** C EXTERNAL IVSET, RN2G, N2RDP, V7SCP C C IVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C RN2G... CARRIES OUT OPTIMIZATION ITERATIONS. C N2RDP... PRINTS REGRESSION DIAGNOSTICS. C V7SCP... SETS ALL COMPONENTS OF A VECTOR TO A SCALAR. C C *** LOCAL VARIABLES *** C INTEGER D1, DK, DR1, I, IV1, J1K, K, N1, N2, NF, NG, RD1, R1, RN REAL H, H0, HLIM, NEGPT5, ONE, XK, ZERO C C *** IV AND V COMPONENTS *** C INTEGER COVREQ, D, DINIT, DLTFDJ, J, MODE, NEXTV, NFCALL, NFGCAL, 1 NGCALL, NGCOV, R, REGD, REGD0, TOOBIG, VNEED C/6 C DATA COVREQ/15/, D/27/, DINIT/38/, DLTFDJ/43/, J/70/, MODE/35/, C 1 NEXTV/47/, NFCALL/6/, NFGCAL/7/, NGCALL/30/, NGCOV/53/, C 2 R/61/, REGD/67/, REGD0/82/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (COVREQ=15, D=27, DINIT=38, DLTFDJ=43, J=70, MODE=35, 1 NEXTV=47, NFCALL=6, NFGCAL=7, NGCALL=30, NGCOV=53, 2 R=61, REGD=67, REGD0=82, TOOBIG=2, VNEED=4) C/ DATA HLIM/0.1E+0/, NEGPT5/-0.5E+0/, ONE/1.E+0/, ZERO/0.E+0/ C C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) IV(COVREQ) = -IABS(IV(COVREQ)) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + P + N*(P+2) CALL RN2G(X, V, IV, LIV, LV, N, N, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P IV(REGD0) = IV(R) + N IV(J) = IV(REGD0) + N IV(NEXTV) = IV(J) + N*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RN = R1 + N - 1 RD1 = IV(REGD0) C 20 CALL RN2G(V(D1), V(DR1), IV, LIV, LV, N, N, N1, N2, P, V(R1), 1 V(RD1), V, X) IF (IV(1)-2) 30, 50, 100 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 30 NF = IV(NFCALL) CALL CALCR(N, P, X, NF, V(R1), UIPARM, URPARM, UFPARM) IF (NF .GT. 0) GO TO 40 IV(TOOBIG) = 1 GO TO 20 40 IF (IV(1) .GT. 0) GO TO 20 C C *** COMPUTE FINITE-DIFFERENCE APPROXIMATION TO DR = GRAD. OF R *** C C *** INITIALIZE D IF NECESSARY *** C 50 IF (IV(MODE) .LT. 0 .AND. V(DINIT) .EQ. ZERO) 1 CALL V7SCP(P, V(D1), ONE) C J1K = DR1 DK = D1 NG = IV(NGCALL) - 1 IF (IV(1) .EQ. (-1)) IV(NGCOV) = IV(NGCOV) - 1 DO 90 K = 1, P XK = X(K) H = V(DLTFDJ) * AMAX1( ABS(XK), ONE/V(DK)) H0 = H DK = DK + 1 60 X(K) = XK + H NF = IV(NFGCAL) CALL CALCR (N, P, X, NF, V(J1K), UIPARM, URPARM, UFPARM) NG = NG + 1 IF (NF .GT. 0) GO TO 70 H = NEGPT5 * H IF ( ABS(H/H0) .GE. HLIM) GO TO 60 IV(TOOBIG) = 1 IV(NGCALL) = NG GO TO 20 70 X(K) = XK IV(NGCALL) = NG DO 80 I = R1, RN V(J1K) = (V(J1K) - V(I)) / H J1K = J1K + 1 80 CONTINUE 90 CONTINUE GO TO 20 C 100 IF (IV(REGD) .GT. 0) IV(REGD) = RD1 CALL N2RDP(IV, LIV, LV, N, V(RD1), V) C 999 RETURN C C *** LAST LINE OF N2F FOLLOWS *** END PyBDSF-1.10.1/src/port3/n2fb.f000066400000000000000000000133341420247104600154610ustar00rootroot00000000000000 SUBROUTINE N2FB(N, P, X, B, CALCR, IV, LIV, LV, V, UI, UR, UF) C C *** MINIMIZE A NONLINEAR SUM OF SQUARES USING RESIDUAL VALUES ONLY.. C *** THIS AMOUNTS TO N2G WITHOUT THE SUBROUTINE PARAMETER CALCJ. C C *** PARAMETERS *** C INTEGER N, P, LIV, LV C/6 C INTEGER IV(LIV), UI(1) C REAL X(P), B(2,P), V(LV), UR(1) C/7 INTEGER IV(LIV), UI(*) REAL X(P), B(2,P), V(LV), UR(*) C/ EXTERNAL CALCR, UF C C----------------------------- DISCUSSION ---------------------------- C C THIS AMOUNTS TO SUBROUTINE NL2SNO (REF. 1) MODIFIED TO HANDLE C SIMPLE BOUNDS ON THE VARIABLES... C B(1,I) .LE. X(I) .LE. B(2,I), I = 1(1)P. C THE PARAMETERS FOR N2FB ARE THE SAME AS THOSE FOR N2GB C (WHICH SEE), EXCEPT THAT CALCJ IS OMITTED. INSTEAD OF CALLING C CALCJ TO OBTAIN THE JACOBIAN MATRIX OF R AT X, N2FB COMPUTES C AN APPROXIMATION TO IT BY FINITE (FORWARD) DIFFERENCES -- SEE C V(DLTFDJ) BELOW. N2FB DOES NOT COMPUTE A COVARIANCE MATRIX. C THE NUMBER OF EXTRA CALLS ON CALCR USED IN COMPUTING THE JACO- C BIAN APPROXIMATION ARE NOT INCLUDED IN THE FUNCTION EVALUATION C COUNT IV(NFCALL), BUT ARE RECORDED IN IV(NGCALL) INSTEAD. C C V(DLTFDJ)... V(43) HELPS CHOOSE THE STEP SIZE USED WHEN COMPUTING THE C FINITE-DIFFERENCE JACOBIAN MATRIX. FOR DIFFERENCES IN- C VOLVING X(I), THE STEP SIZE FIRST TRIED IS C V(DLTFDJ) * MAX(ABS(X(I)), 1/D(I)), C WHERE D IS THE CURRENT SCALE VECTOR (SEE REF. 1). (IF C THIS STEP IS TOO BIG, I.E., IF CALCR SETS NF TO 0, THEN C SMALLER STEPS ARE TRIED UNTIL THE STEP SIZE IS SHRUNK BE- C LOW 1000 * MACHEP, WHERE MACHEP IS THE UNIT ROUNDOFF. C DEFAULT = MACHEP**0.5. C C *** REFERENCE *** C C 1. DENNIS, J.E., GAY, D.M., AND WELSCH, R.E. (1981), AN ADAPTIVE C NONLINEAR LEAST-SQUARES ALGORITHM, ACM TRANS. MATH. C SOFTWARE, VOL. 7, NO. 3. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C+++++++++++++++++++++++++++ DECLARATIONS +++++++++++++++++++++++++++ C C *** EXTERNAL SUBROUTINES *** C EXTERNAL IVSET, RN2GB, V7SCP C C IVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C RN2GB... CARRIES OUT OPTIMIZATION ITERATIONS. C N2RDP... PRINTS REGRESSION DIAGNOSTICS. C V7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C C *** LOCAL VARIABLES *** C INTEGER D1, DK, DR1, I, IV1, J1K, K, N1, N2, NF, NG, RD1, R1, RN REAL H, H0, HLIM, NEGPT5, ONE, T, XK, XK1, ZERO C C *** IV AND V COMPONENTS *** C INTEGER COVREQ, D, DINIT, DLTFDJ, J, MODE, NEXTV, NFCALL, NFGCAL, 1 NGCALL, NGCOV, R, REGD0, TOOBIG, VNEED C/6 C DATA COVREQ/15/, D/27/, DINIT/38/, DLTFDJ/43/, J/70/, MODE/35/, C 1 NEXTV/47/, NFCALL/6/, NFGCAL/7/, NGCALL/30/, NGCOV/53/, C 2 R/61/, REGD0/82/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (COVREQ=15, D=27, DINIT=38, DLTFDJ=43, J=70, MODE=35, 1 NEXTV=47, NFCALL=6, NFGCAL=7, NGCALL=30, NGCOV=53, 2 R=61, REGD0=82, TOOBIG=2, VNEED=4) C/ DATA HLIM/0.1E+0/, NEGPT5/-0.5E+0/, ONE/1.E+0/, ZERO/0.E+0/ C C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) IV(COVREQ) = 0 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + P + N*(P+2) CALL RN2GB(B, X, V, IV, LIV, LV, N, N, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P IV(REGD0) = IV(R) + N IV(J) = IV(REGD0) + N IV(NEXTV) = IV(J) + N*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RN = R1 + N - 1 RD1 = IV(REGD0) C 20 CALL RN2GB(B, V(D1), V(DR1), IV, LIV, LV, N, N, N1, N2, P, V(R1), 1 V(RD1), V, X) IF (IV(1)-2) 30, 50, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 30 NF = IV(NFCALL) CALL CALCR(N, P, X, NF, V(R1), UI, UR, UF) IF (NF .GT. 0) GO TO 40 IV(TOOBIG) = 1 GO TO 20 40 IF (IV(1) .GT. 0) GO TO 20 C C *** COMPUTE FINITE-DIFFERENCE APPROXIMATION TO DR = GRAD. OF R *** C C *** INITIALIZE D IF NECESSARY *** C 50 IF (IV(MODE) .LT. 0 .AND. V(DINIT) .EQ. ZERO) 1 CALL V7SCP(P, V(D1), ONE) C J1K = DR1 DK = D1 NG = IV(NGCALL) - 1 IF (IV(1) .EQ. (-1)) IV(NGCOV) = IV(NGCOV) - 1 DO 120 K = 1, P IF (B(1,K) .GE. B(2,K)) GO TO 110 XK = X(K) H = V(DLTFDJ) * AMAX1( ABS(XK), ONE/V(DK)) H0 = H DK = DK + 1 T = NEGPT5 XK1 = XK + H IF (XK - H .GE. B(1,K)) GO TO 60 T = -T IF (XK1 .GT. B(2,K)) GO TO 80 60 IF (XK1 .LE. B(2,K)) GO TO 70 T = -T H = -H XK1 = XK + H IF (XK1 .LT. B(1,K)) GO TO 80 70 X(K) = XK1 NF = IV(NFGCAL) CALL CALCR (N, P, X, NF, V(J1K), UI, UR, UF) NG = NG + 1 IF (NF .GT. 0) GO TO 90 H = T * H XK1 = XK + H IF ( ABS(H/H0) .GE. HLIM) GO TO 70 80 IV(TOOBIG) = 1 IV(NGCALL) = NG GO TO 20 90 X(K) = XK IV(NGCALL) = NG DO 100 I = R1, RN V(J1K) = (V(J1K) - V(I)) / H J1K = J1K + 1 100 CONTINUE GO TO 120 C *** SUPPLY A ZERO DERIVATIVE FOR CONSTANT COMPONENTS... 110 CALL V7SCP(N, V(J1K), ZERO) J1K = J1K + N 120 CONTINUE GO TO 20 C 999 RETURN C C *** LAST CARD OF N2FB FOLLOWS *** END PyBDSF-1.10.1/src/port3/n2g.f000066400000000000000000000172601420247104600153220ustar00rootroot00000000000000 SUBROUTINE N2G(N, P, X, CALCR, CALCJ, IV, LIV, LV, V, 1 UI, UR, UF) C C *** VERSION OF NL2SOL THAT CALLS RN2G *** C C *** PARAMETERS *** C INTEGER N, P, LIV, LV C/6 C INTEGER IV(LIV), UI(1) C REAL X(P), V(LV), UR(1) C/7 INTEGER IV(LIV), UI(*) REAL X(P), V(LV), UR(*) C/ EXTERNAL CALCR, CALCJ, UF C C *** PARAMETER USAGE *** C C N....... TOTAL NUMBER OF RESIDUALS. C P....... NUMBER OF PARAMETERS (COMPONENTS OF X) BEING ESTIMATED. C X....... PARAMETER VECTOR BEING ESTIMATED (INPUT = INITIAL GUESS, C OUTPUT = BEST VALUE FOUND). C CALCR... SUBROUTINE FOR COMPUTING RESIDUAL VECTOR. C CALCJ... SUBROUTINE FOR COMPUTING JACOBIAN MATRIX = MATRIX OF FIRST C PARTIALS OF THE RESIDUAL VECTOR. C IV...... INTEGER VALUES ARRAY. C LIV..... LENGTH OF IV (SEE DISCUSSION BELOW). C LV...... LENGTH OF V (SEE DISCUSSION BELOW). C V....... FLOATING-POINT VALUES ARRAY. C UI...... PASSED UNCHANGED TO CALCR AND CALCJ. C UR...... PASSED UNCHANGED TO CALCR AND CALCJ. C UF...... PASSED UNCHANGED TO CALCR AND CALCJ. C C C *** DISCUSSION *** C C NOTE... NL2SOL (MENTIONED BELOW) IS A CODE FOR SOLVING C NONLINEAR LEAST-SQUARES PROBLEMS. IT IS DESCRIBED IN C ACM TRANS. MATH. SOFTWARE, VOL. 7 (1981), PP. 369-383 C (AN ADAPTIVE NONLINEAR LEAST-SQUARES ALGORITHM, BY J.E. DENNIS, C D.M. GAY, AND R.E. WELSCH). C C LIV GIVES THE LENGTH OF IV. IT MUST BE AT LEAST 82+P. IF NOT, C THEN N2G RETURNS WITH IV(1) = 15. WHEN N2G RETURNS, THE C MINIMUM ACCEPTABLE VALUE OF LIV IS STORED IN IV(LASTIV) = IV(44), C (PROVIDED THAT LIV .GE. 44). C C LV GIVES THE LENGTH OF V. THE MINIMUM VALUE FOR LV IS C LV0 = 105 + P*(N + 2*P + 17) + 2*N. IF LV IS SMALLER THAN THIS, C THEN N2G RETURNS WITH IV(1) = 16. WHEN N2G RETURNS, THE C MINIMUM ACCEPTABLE VALUE OF LV IS STORED IN IV(LASTV) = IV(45) C (PROVIDED LIV .GE. 45). C C RETURN CODES AND CONVERGENCE TOLERANCES ARE THE SAME AS FOR C NL2SOL, WITH SOME SMALL EXTENSIONS... IV(1) = 15 MEANS LIV WAS C TOO SMALL. IV(1) = 16 MEANS LV WAS TOO SMALL. C C THERE ARE TWO NEW V INPUT COMPONENTS... V(LMAXS) = V(36) AND C V(SCTOL) = V(37) SERVE WHERE V(LMAX0) AND V(RFCTOL) FORMERLY DID C IN THE SINGULAR CONVERGENCE TEST -- SEE THE NL2SOL DOCUMENTATION. C C *** DEFAULT VALUES *** C C DEFAULT VALUES ARE PROVIDED BY SUBROUTINE IVSET, RATHER THAN C DFAULT. THE CALLING SEQUENCE IS... C CALL IVSET(1, IV, LIV, LV, V) C THE FIRST PARAMETER IS AN INTEGER 1. IF LIV AND LV ARE LARGE C ENOUGH FOR IVSET, THEN IVSET SETS IV(1) TO 12. OTHERWISE IT C SETS IV(1) TO 15 OR 16. CALLING N2G WITH IV(1) = 0 CAUSES ALL C DEFAULT VALUES TO BE USED FOR THE INPUT COMPONENTS OF IV AND V. C IF YOU FIRST CALL IVSET, THEN SET IV(1) TO 13 AND CALL N2G, C THEN STORAGE ALLOCATION ONLY WILL BE PERFORMED. IN PARTICULAR, C IV(D) = IV(27), IV(J) = IV(70), AND IV(R) = IV(61) WILL BE SET C TO THE FIRST SUBSCRIPT IN V OF THE SCALE VECTOR, THE JACOBIAN C MATRIX, AND THE RESIDUAL VECTOR RESPECTIVELY, PROVIDED LIV AND LV C ARE LARGE ENOUGH. IF SO, THEN N2G RETURNS WITH IV(1) = 14. C WHEN CALLED WITH IV(1) = 14, N2G ASSUMES THAT STORAGE HAS C BEEN ALLOCATED, AND IT BEGINS THE MINIMIZATION ALGORITHM. C C *** SCALE VECTOR *** C C ONE DIFFERENCE WITH NL2SOL IS THAT THE SCALE VECTOR D IS C STORED IN V, STARTING AT A DIFFERENT SUBSCRIPT. THE STARTING C SUBSCRIPT VALUE IS STILL STORED IN IV(D) = IV(27). THE C DISCUSSION OF DEFAULT VALUES ABOVE TELLS HOW TO HAVE IV(D) SET C BEFORE THE ALGORITHM IS STARTED. C C *** REGRESSION DIAGNOSTICS *** C C IF IV(RDREQ) SO DICTATES, THEN ESTIMATES ARE COMPUTED OF THE C INFLUENCE EACH RESIDUAL COMPONENT HAS ON THE FINAL PARAMETER C ESTIMATE X. THE GENERAL IDEA IS THAT ONE MAY WISH TO EXAMINE C RESIDUAL COMPONENTS (AND THE DATA BEHIND THEM) FOR WHICH THE C INFLUENCE ESTIMATE IS SIGNIFICANTLY LARGER THAN MOST OF THE OTHER C INFLUENCE ESTIMATES. THESE ESTIMATES, HEREAFTER CALLED C REGRESSION DIAGNOSTICS, ARE ONLY COMPUTED IF IV(RDREQ) = 2 OR 3. C IN THIS CASE, FOR I = 1(1)N, C SQRT( G(I)**T * H(I)**-1 * G(I) ) C IS COMPUTED AND STORED IN V, STARTING AT V(IV(REGD)), WHERE C RDREQ = 57 AND REGD = 67. HERE G(I) STANDS FOR THE GRADIENT C RESULTING WHEN THE I-TH OBSERVATION IS DELETED AND H(I) STANDS C FOR AN APPROXIMATION TO THE CORRESPONDING HESSIAN AT X, THE SOLU- C TION CORRESPONDING TO ALL OBSERVATIONS. (THIS APPROXIMATION IS C OBTAINED BY SUBTRACTING THE FIRST-ORDER CONTRIBUTION OF THE I-TH C OBSERVATION TO THE HESSIAN FROM A FINITE-DIFFERENCE HESSIAN C APPROXIMATION. IF H IS INDEFINITE, THEN IV(REGD) IS SET TO -1. C IF H(I) IS INDEFINITE, THEN -1 IS RETURNED AS THE DIAGNOSTIC FOR C OBSERVATION I. IF NO DIAGNOSTICS ARE COMPUTED, PERHAPS BECAUSE C OF A FAILURE TO CONVERGE, THEN IV(REGD) = 0 IS RETURNED.) C PRINTING OF THE REGRESSION DIAGNOSTICS IS CONTROLLED BY C IV(COVPRT) = IV(14)... IF IV(COVPRT) = 3, THEN BOTH THE C COVARIANCE MATRIX AND THE REGRESSION DIAGNOSTICS ARE PRINTED. C IV(COVPRT) = 2 CAUSES ONLY THE REGRESSION DIAGNOSTICS TO BE C PRINTED, IV(COVPRT) = 1 CAUSES ONLY THE COVARIANCE MATRIX TO BE C PRINTED, AND IV(COVPRT) = 0 CAUSES NEITHER TO BE PRINTED. C C RDREQ = 57 AND REGD = 67. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C+++++++++++++++++++++++++++ DECLARATIONS +++++++++++++++++++++++++++ C C *** EXTERNAL SUBROUTINES *** C EXTERNAL IVSET, RN2G, N2RDP C IVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C RN2G... CARRIES OUT OPTIMIZATION ITERATIONS. C N2RDP... PRINTS REGRESSION DIAGNOSTICS. C C *** NO INTRINSIC FUNCTIONS *** C C *** LOCAL VARIABLES *** C INTEGER D1, DR1, IV1, N1, N2, NF, R1, RD1 C C *** IV COMPONENTS *** C INTEGER D, J, NEXTV, NFCALL, NFGCAL, R, REGD, REGD0, TOOBIG, VNEED C/6 C DATA D/27/, J/70/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, R/61/, C 1 REGD/67/, REGD0/82/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (D=27, J=70, NEXTV=47, NFCALL=6, NFGCAL=7, R=61, 1 REGD=67, REGD0=82, TOOBIG=2, VNEED=4) C/ C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + P + N*(P+2) CALL RN2G(X, V, IV, LIV, LV, N, N, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P IV(REGD0) = IV(R) + N IV(J) = IV(REGD0) + N IV(NEXTV) = IV(J) + N*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RD1 = IV(REGD0) C 20 CALL RN2G(V(D1), V(DR1), IV, LIV, LV, N, N, N1, N2, P, V(R1), 1 V(RD1), V, X) IF (IV(1)-2) 30, 50, 60 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 30 NF = IV(NFCALL) CALL CALCR(N, P, X, NF, V(R1), UI, UR, UF) IF (NF .GT. 0) GO TO 40 IV(TOOBIG) = 1 GO TO 20 40 IF (IV(1) .GT. 0) GO TO 20 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 50 CALL CALCJ(N, P, X, IV(NFGCAL), V(DR1), UI, UR, UF) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 GO TO 20 C C *** INDICATE WHETHER THE REGRESSION DIAGNOSTIC ARRAY WAS COMPUTED C *** AND PRINT IT IF SO REQUESTED... C 60 IF (IV(REGD) .GT. 0) IV(REGD) = RD1 CALL N2RDP(IV, LIV, LV, N, V(RD1), V) C 999 RETURN C C *** LAST LINE OF N2G FOLLOWS *** END PyBDSF-1.10.1/src/port3/n2gb.f000066400000000000000000000120171420247104600154570ustar00rootroot00000000000000 SUBROUTINE N2GB(N, P, X, B, CALCR, CALCJ, IV, LIV, LV, V, 1 UIPARM, URPARM, UFPARM) C C *** VERSION OF NL2SOL THAT HANDLES SIMPLE BOUNDS ON X *** C C *** PARAMETERS *** C INTEGER N, P, LIV, LV C/6 C INTEGER IV(LIV), UIPARM(1) C REAL X(P), B(2,P), V(LV), URPARM(1) C/7 INTEGER IV(LIV), UIPARM(*) REAL X(P), B(2,P), V(LV), URPARM(*) C/ EXTERNAL CALCR, CALCJ, UFPARM C C *** DISCUSSION *** C C NOTE... NL2SOL (MENTIONED BELOW) IS A CODE FOR SOLVING C NONLINEAR LEAST-SQUARES PROBLEMS. IT IS DESCRIBED IN C ACM TRANS. MATH. SOFTWARE, VOL. 7 (1981), PP. 369-383 C (AN ADAPTIVE NONLINEAR LEAST-SQUARES ALGORITHM, BY J.E. DENNIS, C D.M. GAY, AND R.E. WELSCH). C C LIV GIVES THE LENGTH OF IV. IT MUST BE AT LEAST 82 + 4*P. C IF NOT, THEN N2GB RETURNS WITH IV(1) = 15. WHEN N2GB C RETURNS, THE MINIMUM ACCEPTABLE VALUE OF LIV IS STORED IN C IV(LASTIV) = IV(44), (PROVIDED THAT LIV .GE. 44). C C LV GIVES THE LENGTH OF V. THE MINIMUM VALUE FOR LV IS C LV0 = 105 + P*(N + 2*P + 21) + 2*N. IF LV IS SMALLER THAN THIS, C THEN N2GB RETURNS WITH IV(1) = 16. WHEN N2GB RETURNS, THE C MINIMUM ACCEPTABLE VALUE OF LV IS STORED IN IV(LASTV) = IV(45) C (PROVIDED LIV .GE. 45). C C RETURN CODES AND CONVERGENCE TOLERANCES ARE THE SAME AS FOR C NL2SOL, WITH SOME SMALL EXTENSIONS... IV(1) = 15 MEANS LIV WAS C TOO SMALL. IV(1) = 16 MEANS LV WAS TOO SMALL. C C THERE ARE TWO NEW V INPUT COMPONENTS... V(LMAXS) = V(36) AND C V(SCTOL) = V(37) SERVE WHERE V(LMAX0) AND V(RFCTOL) FORMERLY DID C IN THE SINGULAR CONVERGENCE TEST -- SEE THE NL2SOL DOCUMENTATION. C C *** BOUNDS *** C C THE BOUNDS B(1,I) .LE. X(I) .LE. B(2,I), I = 1(1)P, ARE ENFORCED. C C *** DEFAULT VALUES *** C C DEFAULT VALUES ARE PROVIDED BY SUBROUTINE IVSET, RATHER THAN C DFAULT. THE CALLING SEQUENCE IS... C CALL IVSET(1, IV, LIV, LV, V) C THE FIRST PARAMETER IS AN INTEGER 1. IF LIV AND LV ARE LARGE C ENOUGH FOR IVSET, THEN IVSET SETS IV(1) TO 12. OTHERWISE IT C SETS IV(1) TO 15 OR 16. CALLING N2GB WITH IV(1) = 0 CAUSES ALL C DEFAULT VALUES TO BE USED FOR THE INPUT COMPONENTS OF IV AND V. C IF YOU FIRST CALL IVSET, THEN SET IV(1) TO 13 AND CALL N2GB, C THEN STORAGE ALLOCATION ONLY WILL BE PERFORMED. IN PARTICULAR, C IV(D) = IV(27), IV(J) = IV(70), AND IV(R) = IV(61) WILL BE SET C TO THE FIRST SUBSCRIPT IN V OF THE SCALE VECTOR, THE JACOBIAN C MATRIX, AND THE RESIDUAL VECTOR RESPECTIVELY, PROVIDED LIV AND LV C ARE LARGE ENOUGH. IF SO, THEN N2GB RETURNS WITH IV(1) = 14. C WHEN CALLED WITH IV(1) = 14, N2GB ASSUMES THAT STORAGE HAS C BEEN ALLOCATED, AND IT BEGINS THE MINIMIZATION ALGORITHM. C C *** SCALE VECTOR *** C C ONE DIFFERENCE WITH NL2SOL IS THAT THE SCALE VECTOR D IS C STORED IN V, STARTING AT A DIFFERENT SUBSCRIPT. THE STARTING C SUBSCRIPT VALUE IS STILL STORED IN IV(D) = IV(27). THE C DISCUSSION OF DEFAULT VALUES ABOVE TELLS HOW TO HAVE IV(D) SET C BEFORE THE ALGORITHM IS STARTED. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C *** EXTERNAL SUBROUTINES *** C EXTERNAL IVSET, RN2GB C IVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C RN2GB... CARRIES OUT OPTIMIZATION ITERATIONS. C C *** LOCAL VARIABLES *** C INTEGER D1, DR1, IV1, N1, N2, NF, R1, RD1 C C *** IV COMPONENTS *** C INTEGER D, J, NEXTV, NFCALL, NFGCAL, R, REGD0, TOOBIG, VNEED C/6 C DATA D/27/, J/70/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, R/61/, C 1 REGD0/82/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (D=27, J=70, NEXTV=47, NFCALL=6, NFGCAL=7, R=61, 1 REGD0=82, TOOBIG=2, VNEED=4) C/ C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .EQ. 13) IV(VNEED) = IV(VNEED) + P + N*(P+2) CALL RN2GB(B, X, V, IV, LIV, LV, N, N, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P IV(REGD0) = IV(R) + N IV(J) = IV(REGD0) + N IV(NEXTV) = IV(J) + N*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RD1 = IV(REGD0) C 20 CALL RN2GB(B, V(D1), V(DR1), IV, LIV, LV, N, N, N1, N2, P, V(R1), 1 V(RD1), V, X) IF (IV(1)-2) 30, 50, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 30 NF = IV(NFCALL) CALL CALCR(N, P, X, NF, V(R1), UIPARM, URPARM, UFPARM) IF (NF .GT. 0) GO TO 40 IV(TOOBIG) = 1 GO TO 20 40 IF (IV(1) .GT. 0) GO TO 20 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 50 CALL CALCJ(N, P, X, IV(NFGCAL), V(DR1), UIPARM, URPARM, UFPARM) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 GO TO 20 C 999 RETURN C C *** LAST CARD OF N2GB FOLLOWS *** END PyBDSF-1.10.1/src/port3/n2lrd.f000066400000000000000000000042261420247104600156530ustar00rootroot00000000000000 SUBROUTINE N2LRD(DR, IV, L, LH, LIV, LV, ND, NN, P, R, RD, V) C C *** COMPUTE REGRESSION DIAGNOSTIC AND DEFAULT COVARIANCE MATRIX FOR C RN2G *** C C *** PARAMETERS *** C INTEGER LH, LIV, LV, ND, NN, P INTEGER IV(LIV) REAL DR(ND,P), L(LH), R(NN), RD(NN), V(LV) C C *** CODED BY DAVID M. GAY (WINTER 1982, FALL 1983) *** C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C REAL D7TPR EXTERNAL D7TPR, L7ITV, L7IVM, O7PRD, V7SCP C C *** LOCAL VARIABLES *** C INTEGER COV, I, J, M, STEP1 REAL A, FF, S, T C C *** CONSTANTS *** C REAL NEGONE, ONE, ONEV(1), ZERO C C *** INTRINSIC FUNCTIONS *** C/+ REAL SQRT C/ C C *** IV AND V SUBSCRIPTS *** C INTEGER F, H, MODE, RDREQ, STEP C/6 C DATA F/10/, H/56/, MODE/35/, RDREQ/57/, STEP/40/ C/7 PARAMETER (F=10, H=56, MODE=35, RDREQ=57, STEP=40) C/ C/6 C DATA NEGONE/-1.E+0/, ONE/1.E+0/, ZERO/0.E+0/ C/7 PARAMETER (NEGONE=-1.E+0, ONE=1.E+0, ZERO=0.E+0) C/ DATA ONEV(1)/1.E+0/ C C++++++++++++++++++++++++++++++++ BODY +++++++++++++++++++++++++++++++ C STEP1 = IV(STEP) I = IV(RDREQ) IF (I .LE. 0) GO TO 999 IF (MOD(I,4) .LT. 2) GO TO 30 FF = ONE IF (V(F) .NE. ZERO) FF = ONE / SQRT( ABS(V(F))) CALL V7SCP(NN, RD, NEGONE) DO 20 I = 1, NN A = R(I)**2 M = STEP1 DO 10 J = 1, P V(M) = DR(I,J) M = M + 1 10 CONTINUE CALL L7IVM(P, V(STEP1), L, V(STEP1)) S = D7TPR(P, V(STEP1), V(STEP1)) T = ONE - S IF (T .LE. ZERO) GO TO 20 A = A * S / T RD(I) = SQRT(A) * FF 20 CONTINUE C 30 IF (IV(MODE) - P .LT. 2) GO TO 999 C C *** COMPUTE DEFAULT COVARIANCE MATRIX *** C COV = IABS(IV(H)) DO 50 I = 1, NN M = STEP1 DO 40 J = 1, P V(M) = DR(I,J) M = M + 1 40 CONTINUE CALL L7IVM(P, V(STEP1), L, V(STEP1)) CALL L7ITV(P, V(STEP1), L, V(STEP1)) CALL O7PRD(1, LH, P, V(COV), ONEV, V(STEP1), V(STEP1)) 50 CONTINUE C 999 RETURN C *** LAST LINE OF N2LRD FOLLOWS *** END PyBDSF-1.10.1/src/port3/n2p.f000066400000000000000000000135151420247104600153320ustar00rootroot00000000000000 SUBROUTINE N2P(N, ND, P, X, CALCR, CALCJ, IV, LIV, LV, V, 1 UI, UR, UF) C C *** VERSION OF NL2SOL THAT CALLS RN2G AND HAS EXPANDED CALLING C *** SEQUENCES FOR CALCR, CALCJ, ALLOWING THEM TO PROVIDE R AND J C *** (RESIDUALS AND JACOBIAN) IN CHUNKS. C C *** PARAMETERS *** C INTEGER N, ND, P, LIV, LV C/6 C INTEGER IV(LIV), UI(1) C REAL X(P), V(LV), UR(1) C/7 INTEGER IV(LIV), UI(*) REAL X(P), V(LV), UR(*) C/ EXTERNAL CALCR, CALCJ, UF C C C *** PARAMETER USAGE *** C C N....... TOTAL NUMBER OF RESIDUALS. C ND...... MAXIMUM NUMBER OF RESIDUAL COMPONENTS PROVIDED BY ANY CALL C ON CALCR. C P....... NUMBER OF PARAMETERS (COMPONENTS OF X) BEING ESTIMATED. C X....... PARAMETER VECTOR BEING ESTIMATED (INPUT = INITIAL GUESS, C OUTPUT = BEST VALUE FOUND). C CALCR... SUBROUTINE FOR COMPUTING RESIDUAL VECTOR. C CALCJ... SUBROUTINE FOR COMPUTING JACOBIAN MATRIX = MATRIX OF FIRST C PARTIALS OF THE RESIDUAL VECTOR. C IV...... INTEGER VALUES ARRAY. C LIV..... LENGTH OF IV (SEE DISCUSSION BELOW). C LV...... LENGTH OF V (SEE DISCUSSION BELOW). C V....... FLOATING-POINT VALUES ARRAY. C UI...... PASSED UNCHANGED TO CALCR AND CALCJ. C UR...... PASSED UNCHANGED TO CALCR AND CALCJ. C UF...... PASSED UNCHANGED TO CALCR AND CALCJ. C C C *** DISCUSSION *** C C THIS ROUTINE IS SIMILAR TO N2G (WHICH SEE), EXCEPT THAT THE C CALLING SEQUENCE FOR CALCR AND CALCJ IS DIFFERENT -- IT ALLOWS C THE RESIDUAL VECTOR AND JACOBIAN MATRIX TO BE PASSED IN BLOCKS. C C FOR CALCR, THE CALLING SEQUENCE IS... C C CALCR(N, ND1, N1, N2, P, X, NF, R, UI, UR, UF) C C PARAMETERS N, P, X, NF, R, UI, UR, UF ARE AS FOR THE CALCR USED C BY NL2SOL OR N2G. C PARAMETERS ND1, N1, AND N2 ARE INPUTS TO CALCR. CALCR SHOULD NOT C CHANGE ND1 OR N1 (BUT MAY CHANGE N2). C ND1 = MIN(N,ND) IS THE MAXIMUM NUMBER OF RESIDUAL COMPONENTS THAT C CALCR SHOULD SUPPLY ON ONE CALL. C N1 IS THE INDEX OF THE FIRST RESIDUAL COMPONENT THAT CALCR SHOULD C SUPPLY ON THIS CALL. C N2 HAS THE VALUE MIN(N, N1+ND1-1) WHEN CALCR IS CALLED. CALCR C MAY SET N2 TO A LOWER VALUE (AT LEAST 1) AND FOR N1 .LE. I .LE. N2 C SHOULD RETURN RESIDUAL COMPONENT I IN R(I-N1+1), I.E., IN COMPONENTS C R(1), R(2), ..., R(N2-N1+1). C C FOR CALCJ, THE CALLING SEQUENCE IS... C C CALCJ(N, ND1, N1, N2, P, X, NF, J, UI, UR, UF) C C ALL PARAMETERS EXCEPT N2 AND J ARE AS FOR CALCR. N2 MAY NOT BE C CHANGED, BUT OTHERWISE IS AS FOR CALCR. (WHENEVER CALCJ IS CALLED, C CALCR WILL JUST HAVE BEEN CALLED WITH THE SAME VALUE OF N1 BUT C POSSIBLY A DIFFERENT X -- NF IDENTIFIES THE X PASSED. IF CALCR C CHANGES N2, THEN THIS CHANGED VALUE IS PASSED TO CALCJ.) C J IS A FLOATING-POINT ARRAY DIMENSIONED J(ND1,P). FOR I = N1(1)N2 C AND K = 1(1)P, CALCJ MUST STORE THE PARTIAL DERIVATIVE AT X OF C RESIDUAL COMPONENT I WITH RESPECT TO X(K) IN J(I-N1+1,K). C C LIV MUST BE AT LEAST 82 + P. LV MUST BE AT LEAST C 105 + P*(17 + 2*P) + (P+1)*MIN(ND,N) + N C IF ND .LT. N AND NO REGRESSION DIAGNOSTIC ARRAY IS REQUESTED C (I.E., IV(RDREQ) = 0 OR 1), THEN LV CAN BE N LESS THAN THIS. C C+++++++++++++++++++++++++++ DECLARATIONS +++++++++++++++++++++++++++ C C *** EXTERNAL SUBROUTINES *** C EXTERNAL IVSET, N2RDP, RN2G C IVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C N2RDP... PRINTS REGRESSION DIAGNOSTICS. C RN2G... CARRIES OUT OPTIMIZATION ITERATIONS. C C *** LOCAL VARIABLES *** C LOGICAL ONERD INTEGER D1, DR1, I, IV1, N1, N2, ND1, NF, R1, RD0, RD1, X01 C C *** IV COMPONENTS *** C INTEGER D, J, NEXTV, NF00, NFCALL, NFGCAL, R, RDREQ, REGD, 1 REGD0, TOOBIG, VNEED, X0 C/6 C DATA D/27/, J/70/, NEXTV/47/, NF00/81/, NFCALL/6/, NFGCAL/7/, C 1 R/61/, RDREQ/57/, REGD/67/, REGD0/82/, TOOBIG/2/, VNEED/4/, C 2 X0/43/ C/7 PARAMETER (D=27, J=70, NEXTV=47, NF00=81, NFCALL=6, NFGCAL=7, 1 R=61, RDREQ=57, REGD=67, REGD0=82, TOOBIG=2, VNEED=4, 2 X0=43) C/ C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) ND1 = MIN0(ND, N) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 I = IV(VNEED) + P + ND1*(P+1) ONERD = IV(RDREQ) .GE. 2 .OR. ND .GE. N IF (ONERD) I = I + N IF (IV(1) .EQ. 13) IV(VNEED) = I CALL RN2G(V, V, IV, LIV, LV, N, ND1, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P I = IV(R) + ND1 IV(REGD0) = I IF (ONERD) I = I + N IV(J) = I IV(NEXTV) = I + ND1*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RD1 = IV(REGD0) RD0 = RD1 - 1 C 20 CALL RN2G(V(D1), V(DR1), IV, LIV, LV, N, ND1, N1, N2, P, V(R1), 1 V(RD1), V, X) IV1 = IV(1) IF (IV1-2) 40, 30, 80 30 IF (ND .GE. N) GO TO 70 C C *** FIRST COMPUTE RELEVANT PORTION OF R *** C 40 NF = IV(NFCALL) IF (IABS(IV1) .GE. 2) NF = IV(NFGCAL) CALL CALCR(N, ND1, N1, N2, P, X, NF, V(R1), UI, UR, UF) IF (NF .GT. 0) GO TO 50 IV(TOOBIG) = 1 GO TO 20 50 I = IV1 + 4 GO TO (70, 60, 70, 20, 20, 70), I 60 X01 = IV(X0) CALL CALCJ(N, ND1, N1, N2, P, V(X01), IV(NF00), V(DR1), UI, 1 UR, UF) IF (IV(NF00) .LE. 0) IV(TOOBIG) = 1 GO TO 20 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 70 CALL CALCJ(N, ND1, N1, N2, P, X, IV(NFGCAL), V(DR1), UI, UR, UF) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 RD1 = RD0 + N1 GO TO 20 C 80 RD1 = RD0 + 1 IF (IV(REGD) .GT. 0) IV(REGD) = RD1 IF (IV(1) .LE. 8) CALL N2RDP(IV, LIV, LV, N, V(RD1), V) C 999 RETURN C C *** LAST LINE OF N2P FOLLOWS *** END PyBDSF-1.10.1/src/port3/n2pb.f000066400000000000000000000130301420247104600154640ustar00rootroot00000000000000 SUBROUTINE N2PB(N, ND, P, X, B, CALCR, CALCJ, IV, LIV, LV, V, 1 UI, UR, UF) C C *** SIMPLY BOUNDED VERSION OF NL2SOL THAT HAS EXPANDED CALLING C *** SEQUENCES FOR CALCR, CALCJ, ALLOWING THEM TO PROVIDE R AND J C *** (RESIDUALS AND JACOBIAN) IN CHUNKS. C C *** PARAMETERS *** C INTEGER N, ND, P, LIV, LV C/6 C INTEGER IV(LIV), UI(1) C REAL B(2,P), X(P), V(LV), UR(1) C/7 INTEGER IV(LIV), UI(*) REAL B(2,P), X(P), V(LV), UR(*) C/ EXTERNAL CALCR, CALCJ, UF C C C *** PARAMETER USAGE *** C C N....... TOTAL NUMBER OF RESIDUALS. C ND...... MAXIMUM NUMBER OF RESIDUAL COMPONENTS PROVIDED BY ANY CALL C ON CALCR. C P....... NUMBER OF PARAMETERS (COMPONENTS OF X) BEING ESTIMATED. C X....... PARAMETER VECTOR BEING ESTIMATED (INPUT = INITIAL GUESS, C OUTPUT = BEST VALUE FOUND). C CALCR... SUBROUTINE FOR COMPUTING RESIDUAL VECTOR. C CALCJ... SUBROUTINE FOR COMPUTING JACOBIAN MATRIX = MATRIX OF FIRST C PARTIALS OF THE RESIDUAL VECTOR. C IV...... INTEGER VALUES ARRAY. C LIV..... LENGTH OF IV (SEE DISCUSSION BELOW). C LV...... LENGTH OF V (SEE DISCUSSION BELOW). C V....... FLOATING-POINT VALUES ARRAY. C UI...... PASSED UNCHANGED TO CALCR AND CALCJ. C UR...... PASSED UNCHANGED TO CALCR AND CALCJ. C UF...... PASSED UNCHANGED TO CALCR AND CALCJ. C C C *** DISCUSSION *** C C THIS ROUTINE IS SIMILAR TO N2G (WHICH SEE), EXCEPT THAT THE C CALLING SEQUENCE FOR CALCR AND CALCJ IS DIFFERENT -- IT ALLOWS C THE RESIDUAL VECTOR AND JACOBIAN MATRIX TO BE PASSED IN BLOCKS. C C FOR CALCR, THE CALLING SEQUENCE IS... C C CALCR(N, ND1, N1, N2, P, X, NF, R, UI, UR, UF) C C PARAMETERS N, P, X, NF, R, UI, UR, UF ARE AS FOR THE CALCR USED C BY NL2SOL OR N2G. C PARAMETERS ND1, N1, AND N2 ARE INPUTS TO CALCR. CALCR SHOULD NOT C CHANGE ND1 OR N1 (BUT MAY CHANGE N2). C ND1 = MIN(N,ND) IS THE MAXIMUM NUMBER OF RESIDUAL COMPONENTS THAT C CALCR SHOULD SUPPLY ON ONE CALL. C N1 IS THE INDEX OF THE FIRST RESIDUAL COMPONENT THAT CALCR SHOULD C SUPPLY ON THIS CALL. C N2 HAS THE VALUE MIN(N, N1+ND1-1) WHEN CALCR IS CALLED. CALCR C MAY SET N2 TO A LOWER VALUE (AT LEAST 1) AND FOR N1 .LE. I .LE. N2 C SHOULD RETURN RESIDUAL COMPONENT I IN R(I-N1+1), I.E., IN COMPONENTS C R(1), R(2), ..., R(N2-N1+1). C C FOR CALCJ, THE CALLING SEQUENCE IS... C C CALCJ(N, ND1, N1, N2, P, X, NF, J, UI, UR, UF) C C ALL PARAMETERS EXCEPT N2 AND J ARE AS FOR CALCR. N2 MAY NOT BE C CHANGED, BUT OTHERWISE IS AS FOR CALCR. (WHENEVER CALCJ IS CALLED, C CALCR WILL JUST HAVE BEEN CALLED WITH THE SAME VALUE OF N1 BUT C POSSIBLY A DIFFERENT X -- NF IDENTIFIES THE X PASSED. IF CALCR C CHANGES N2, THEN THIS CHANGED VALUE IS PASSED TO CALCJ.) C J IS A FLOATING-POINT ARRAY DIMENSIONED J(ND1,P). FOR I = N1(1)N2 C AND K = 1(1)P, CALCJ MUST STORE THE PARTIAL DERIVATIVE AT X OF C RESIDUAL COMPONENT I WITH RESPECT TO X(K) IN J(I-N1+1,K). C C LIV MUST BE AT LEAST 82 + P. LV MUST BE AT LEAST C 105 + P*(17 + 2*P) + (P+1)*MIN(ND,N) + N C IF ND .LT. N AND NO REGRESSION DIAGNOSTIC ARRAY IS REQUESTED C (I.E., IV(RDREQ) = 0 OR 1), THEN LV CAN BE N LESS THAN THIS. C C+++++++++++++++++++++++++++ DECLARATIONS +++++++++++++++++++++++++++ C C *** EXTERNAL SUBROUTINES *** C EXTERNAL IVSET, RN2GB C IVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C RN2GB... CARRIES OUT OPTIMIZATION ITERATIONS. C C *** LOCAL VARIABLES *** C LOGICAL ONERD INTEGER D1, DR1, I, IV1, N1, N2, ND1, NF, R1, RD1, X01 C C *** IV COMPONENTS *** C INTEGER D, J, NEXTV, NF00, NFCALL, NFGCAL, R, 1 REGD0, TOOBIG, VNEED, X0 C/6 C DATA D/27/, J/70/, NEXTV/47/, NF00/81/, NFCALL/6/, NFGCAL/7/, C 1 R/61/, REGD0/82/, TOOBIG/2/, VNEED/4/, X0/43/ C/7 PARAMETER (D=27, J=70, NEXTV=47, NF00=81, NFCALL=6, NFGCAL=7, 1 R=61, REGD0=82, TOOBIG=2, VNEED=4, X0=43) C/ C--------------------------------- BODY ------------------------------ C IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) ND1 = MIN0(ND, N) IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 IF (IV1 .EQ. 12) IV(1) = 13 I = IV(VNEED) + P + ND1*(P+1) ONERD = ND .GE. N IF (ONERD) I = I + N IF (IV(1) .EQ. 13) IV(VNEED) = I CALL RN2GB(B, V, V, IV, LIV, LV, N, ND1, N1, N2, P, V, V, V, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(D) = IV(NEXTV) IV(R) = IV(D) + P I = IV(R) + ND1 IV(REGD0) = I IF (ONERD) I = I + N IV(J) = I IV(NEXTV) = I + ND1*P IF (IV1 .EQ. 13) GO TO 999 C 10 D1 = IV(D) DR1 = IV(J) R1 = IV(R) RD1 = IV(REGD0) C 20 CALL RN2GB(B, V(D1), V(DR1), IV, LIV, LV, N, ND1, N1, N2, P, 1 V(R1), V(RD1), V, X) IV1 = IV(1) IF (IV1-2) 40, 30, 999 30 IF (ND .GE. N) GO TO 70 C C *** FIRST COMPUTE RELEVANT PORTION OF R *** C 40 NF = IV(NFCALL) IF (IABS(IV1) .GE. 2) NF = IV(NFGCAL) CALL CALCR(N, ND1, N1, N2, P, X, NF, V(R1), UI, UR, UF) IF (NF .GT. 0) GO TO 50 IV(TOOBIG) = 1 GO TO 20 50 I = IV1 + 4 GO TO (70, 60, 70, 20, 20, 70), I 60 X01 = IV(X0) CALL CALCJ(N, ND1, N1, N2, P, V(X01), IV(NF00), V(DR1), UI, 1 UR, UF) IF (IV(NF00) .LE. 0) IV(TOOBIG) = 1 GO TO 20 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 70 CALL CALCJ(N, ND1, N1, N2, P, X, IV(NFGCAL), V(DR1), UI, UR, UF) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 GO TO 20 C 999 RETURN C C *** LAST LINE OF N2PB FOLLOWS *** END PyBDSF-1.10.1/src/port3/n2rdp.f000066400000000000000000000021231420247104600156510ustar00rootroot00000000000000 SUBROUTINE N2RDP(IV, LIV, LV, N, RD, V) C C *** PRINT REGRESSION DIAGNOSTICS FOR MLPSL AND NL2S1 *** C INTEGER LIV, LV, N INTEGER IV(LIV) REAL RD(N), V(LV) C C *** NOTE -- V IS PASSED FOR POSSIBLE _USE_ BY REVISED VERSIONS OF C *** THIS ROUTINE. C INTEGER PU C C *** IV AND V SUBSCRIPTS *** C INTEGER COVPRT, F, NEEDHD, PRUNIT, REGD C C/6 C DATA COVPRT/14/, F/10/, NEEDHD/36/, PRUNIT/21/, REGD/67/ C/7 PARAMETER (COVPRT=14, F=10, NEEDHD=36, PRUNIT=21, REGD=67) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C PU = IV(PRUNIT) IF (PU .EQ. 0) GO TO 999 IF (IV(COVPRT) .LT. 2) GO TO 999 IF (IV(REGD) .LE. 0) GO TO 999 IV(NEEDHD) = 1 IF (V(F)) 10, 30, 10 10 WRITE(PU,20) RD 20 FORMAT(/70H REGRESSION DIAGNOSTIC = SQRT( G(I)**T * H(I)**-1 * G(I 1) / ABS(F) ).../(6E12.3)) GO TO 999 30 WRITE(PU,40) RD 40 FORMAT(/61H REGRESSION DIAGNOSTIC = SQRT( G(I)**T * H(I)**-1 * G(I 1) ).../(6E12.3)) C 999 RETURN C *** LAST LINE OF N2RDP FOLLOWS *** END PyBDSF-1.10.1/src/port3/n7msrt.f000066400000000000000000000061621420247104600160650ustar00rootroot00000000000000 SUBROUTINE N7MSRT(N,NMAX,NUM,MODE,INDEX,LAST,NEXT) INTEGER N,NMAX,MODE INTEGER NUM(N),INDEX(N),LAST(1),NEXT(N) C **********. C C SUBROUTINE N7MSRT C C GIVEN A SEQUENCE OF INTEGERS, THIS SUBROUTINE GROUPS C TOGETHER THOSE INDICES WITH THE SAME SEQUENCE VALUE C AND, OPTIONALLY, SORTS THE SEQUENCE INTO EITHER C ASCENDING OR DESCENDING ORDER. C C THE SEQUENCE OF INTEGERS IS DEFINED BY THE ARRAY NUM, C AND IT IS ASSUMED THAT THE INTEGERS ARE EACH FROM THE SET C 0,1,...,NMAX. ON OUTPUT THE INDICES K SUCH THAT NUM(K) = L C FOR ANY L = 0,1,...,NMAX CAN BE OBTAINED FROM THE ARRAYS C LAST AND NEXT AS FOLLOWS. C C K = LAST(L+1) C WHILE (K .NE. 0) K = NEXT(K) C C OPTIONALLY, THE SUBROUTINE PRODUCES AN ARRAY INDEX SO THAT C THE SEQUENCE NUM(INDEX(I)), I = 1,2,...,N IS SORTED. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE N7MSRT(N,NMAX,NUM,MODE,INDEX,LAST,NEXT) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE. C C NMAX IS A POSITIVE INTEGER INPUT VARIABLE. C C NUM IS AN INPUT ARRAY OF LENGTH N WHICH CONTAINS THE C SEQUENCE OF INTEGERS TO BE GROUPED AND SORTED. IT C IS ASSUMED THAT THE INTEGERS ARE EACH FROM THE SET C 0,1,...,NMAX. C C MODE IS AN INTEGER INPUT VARIABLE. THE SEQUENCE NUM IS C SORTED IN ASCENDING ORDER IF MODE IS POSITIVE AND IN C DESCENDING ORDER IF MODE IS NEGATIVE. IF MODE IS 0, C NO SORTING IS DONE. C C INDEX IS AN INTEGER OUTPUT ARRAY OF LENGTH N SET SO C THAT THE SEQUENCE C C NUM(INDEX(I)), I = 1,2,...,N C C IS SORTED ACCORDING TO THE SETTING OF MODE. IF MODE C IS 0, INDEX IS NOT REFERENCED. C C LAST IS AN INTEGER OUTPUT ARRAY OF LENGTH NMAX + 1. THE C INDEX OF NUM FOR THE LAST OCCURRENCE OF L IS LAST(L+1) C FOR ANY L = 0,1,...,NMAX UNLESS LAST(L+1) = 0. IN C THIS CASE L DOES NOT APPEAR IN NUM. C C NEXT IS AN INTEGER OUTPUT ARRAY OF LENGTH N. IF C NUM(K) = L, THEN THE INDEX OF NUM FOR THE PREVIOUS C OCCURRENCE OF L IS NEXT(K) FOR ANY L = 0,1,...,NMAX C UNLESS NEXT(K) = 0. IN THIS CASE THERE IS NO PREVIOUS C OCCURRENCE OF L IN NUM. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. JUNE 1982. C THOMAS F. COLEMAN, BURTON S. GARBOW, JORGE J. MORE C C ********** INTEGER I,J,JP,K,L,NMAXP1,NMAXP2 C C DETERMINE THE ARRAYS NEXT AND LAST. C NMAXP1 = NMAX + 1 DO 10 I = 1, NMAXP1 LAST(I) = 0 10 CONTINUE DO 20 K = 1, N L = NUM(K) NEXT(K) = LAST(L+1) LAST(L+1) = K 20 CONTINUE IF (MODE .EQ. 0) GO TO 60 C C STORE THE POINTERS TO THE SORTED ARRAY IN INDEX. C I = 1 NMAXP2 = NMAXP1 + 1 DO 50 J = 1, NMAXP1 JP = J IF (MODE .LT. 0) JP = NMAXP2 - J K = LAST(JP) 30 CONTINUE IF (K .EQ. 0) GO TO 40 INDEX(I) = K I = I + 1 K = NEXT(K) GO TO 30 40 CONTINUE 50 CONTINUE 60 CONTINUE RETURN C C LAST CARD OF SUBROUTINE N7MSRT. C END PyBDSF-1.10.1/src/port3/nerror.f000066400000000000000000000002631420247104600161360ustar00rootroot00000000000000 INTEGER FUNCTION NERROR(NERR) C C RETURNS NERROR = NERR = THE VALUE OF THE ERROR FLAG LERROR. C NERROR=I8SAVE(1,0,.FALSE.) NERR=NERROR RETURN C END PyBDSF-1.10.1/src/port3/nirall.f000066400000000000000000000001631420247104600161070ustar00rootroot00000000000000 INTEGER FUNCTION NIRALL(ISIZE) C CALL I0TK01 NIRALL = ISTKQU(ISIZE+2) C RETURN C END PyBDSF-1.10.1/src/port3/nsf.f000066400000000000000000000235531420247104600154240ustar00rootroot00000000000000 SUBROUTINE NSF(N, P, L, ALF, C, Y, CALCA, INC, IINC, IV, 1 LIV, LV, V, UIPARM, URPARM, UFPARM) C C *** SOLVE SEPARABLE NONLINEAR LEAST SQUARES USING C *** FINITE-DIFFERENCE DERIVATIVES. C C *** PARAMETER DECLARATIONS *** C INTEGER IINC, L, LIV, LV, N, P C/6 C INTEGER INC(IINC,P), IV(LIV), UIPARM(1) C REAL ALF(P), C(L), URPARM(1), V(LV), Y(N) C/7 INTEGER INC(IINC,P), IV(LIV), UIPARM(*) REAL ALF(P), C(L), URPARM(*), V(LV), Y(N) C/ EXTERNAL CALCA, UFPARM C C *** PARAMETERS *** C C N (IN) NUMBER OF OBSERVATIONS. C P (IN) NUMBER OF NONLINEAR PARAMETERS TO BE ESTIMATED. C L (IN) NUMBER OF LINEAR PARAMETERS TO BE ESTIMATED. C ALF (I/O) NONLINEAR PARAMETERS. C INPUT = INITIAL GUESS, C OUTPUT = BEST ESTIMATE FOUND. C C (OUT) LINEAR PARAMETERS (ESTIMATED). C Y (IN) RIGHT-HAND SIDE VECTOR. C CALCA (IN) SUBROUTINE TO COMPUTE A MATRIX. C INC (IN) INCIDENCE MATRIX OF DEPENDENCIES OF COLUMNS OF A ON C COMPONENTS OF ALF -- INC(I,J) = 1 MEANS COLUMN I C OF A DEPENDS ON ALF(J). C IINC (IN) DECLARED LEAD DIMENSION OF INC. MUST BE AT LEAST L+1. C IV (I/O) INTEGER PARAMETER AND SCRATCH VECTOR. C LIV (IN) LENGTH OF IV. MUST BE AT LEAST C 122 + 2*M + 4*P + 2*L + MAX(L+1,6*P), WHERE M IS C THE NUMBER OF ONES IN INC. C LV (IN) LENGTH OF V. MUST BE AT LEAST C 105 + 2*N*(L+3) + JLEN + L*(L+3)/2 + P*(2*P + 18), C WHERE JLEN = (L+P)*(N+L+P+1), UNLESS NEITHER A C COVARIANCE MATRIX NOR REGRESSION DIAGNOSTICS ARE C REQUESTED, IN WHICH CASE JLEN = N*P. IF THE LAST C ROW OF INC CONTAINS ONLY ZEROS, THEN LV CAN BE 4*N C LESS THAN JUST DESCRIBED. C V (I/O) FLOATING-POINT PARAMETER AND SCRATCH VECTOR. C IF A COVARIANCE ESTIMATE IS REQUESTED, IT IS FOR C (ALF,C) -- NONLINEAR PARAMETERS ORDERED FIRST, C FOLLOWED BY LINEAR PARAMETERS. C UIPARM (I/O) INTEGER VECTOR PASSED WITHOUT CHANGE TO CALCA. C URPARM (I/O) FLOATING-POINT VECTOR PASSED WITHOUT CHANGE TO CALCA. C UFPARM (I/O) SUBROUTINE PASSED (WITHOUT HAVING BEEN CALLED) TO CALCA. C C C-------------------------- DECLARATIONS ---------------------------- C C C *** EXTERNAL SUBROUTINES *** C EXTERNAL IVSET, DSM, RNSG, V2AXY, V7CPY, V7SCL C C IVSET.... PROVIDES DEFAULT IV AND V VALUES. C DSM...... DETERMINES EFFICIENT ORDER FOR FINITE DIFFERENCES. C RNSG... CARRIES OUT NL2SOL ALGORITHM. C V2AXY.... ADDS A MULTIPLE OF ONE VECTOR TO ANOTHER. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7SCL... SCALES AND COPIES ONE VECTOR TO ANOTHER. C C *** LOCAL VARIABLES *** C LOGICAL PARTJ INTEGER A0, A1, AJ, ALP1, BWA1, D0, DA0, DA1, DAJ, GPTR1, GRP1, 1 GRP2, I, I1, IN0, IN1, IN2, INI, INLEN, IPNTR1, IV1, IWA1, 2 IWALEN, J1, JN1, JPNTR1, K, L1, LP1, M, M0, NF, NG, NGRP0, 3 NGRP1, NGRP2, RSAVE0, RSAVE1, RSVLEN, X0I, XSAVE0, XSAVE1 REAL DELTA, DI, H, XI REAL NEGONE, ONE, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AMAT, COVREQ, D, DAMAT, DLTFDJ, GPTR, GRP, IN, IVNEED, 1 L1SAV, MAXGRP, MODE, MSAVE, NEXTIV, NEXTV, NFCALL, NFGCAL, 2 PERM, RESTOR, TOOBIG, VNEED, XSAVE C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AMAT/113/, COVREQ/15/, D/27/, DAMAT/114/, DLTFDJ/43/, C 1 GPTR/117/, GRP/118/, IN/112/, IVNEED/3/, L1SAV/111/, C 2 MAXGRP/116/, MODE/35/, MSAVE/115/, NEXTIV/46/, NEXTV/47/, C 3 NFCALL/6/, NFGCAL/7/, PERM/58/, RESTOR/9/, TOOBIG/2/, C 4 VNEED/4/, XSAVE/119/ C/7 PARAMETER (AMAT=113, COVREQ=15, D=27, DAMAT=114, DLTFDJ=43, 1 GPTR=117, GRP=118, IN=112, IVNEED=3, L1SAV=111, 2 MAXGRP=116, MODE=35, MSAVE=115, NEXTIV=46, NEXTV=47, 3 NFCALL=6, NFGCAL=7, PERM=58, RESTOR=9, TOOBIG=2, 4 VNEED=4, XSAVE=119) C/ DATA NEGONE/-1.E+0/, ONE/1.E+0/, ZERO/0.E+0/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C LP1 = L + 1 IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) IF (P .LE. 0 .OR. L .LT. 0 .OR. IINC .LE. L) GO TO 80 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 120 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 120 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 50 C C *** FRESH START *** C IF (IV(PERM) .LE. XSAVE) IV(PERM) = XSAVE + 1 C C *** CHECK INC, COUNT ITS NONZEROS C L1 = 0 M = 0 DO 40 I = 1, P M0 = M IF (L .EQ. 0) GO TO 20 DO 10 K = 1, L IF (INC(K,I) .LT. 0 .OR. INC(K,I) .GT. 1) GO TO 80 IF (INC(K,I) .EQ. 1) M = M + 1 10 CONTINUE 20 IF (INC(LP1,I) .NE. 1) GO TO 30 M = M + 1 L1 = 1 30 IF (M .EQ. M0 .OR. INC(LP1,I) .LT. 0 1 .OR. INC(LP1,I) .GT. 1) GO TO 80 40 CONTINUE C C *** NOW L1 = 1 MEANS A HAS COLUMN L+1 *** C C *** COMPUTE STORAGE REQUIREMENTS *** C IWALEN = MAX0(LP1, 6*P) INLEN = 2 * M IV(IVNEED) = IV(IVNEED) + INLEN + 3*P + L + IWALEN + 3 RSVLEN = 2 * L1 * N L1 = L + L1 IV(VNEED) = IV(VNEED) + 2*N*L1 + RSVLEN + P C 50 CALL RNSG(V, ALF, C, V, IV, IV, L, 1, N, LIV, LV, N, M, P, V, Y) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IN) = IV(NEXTIV) IV(AMAT) = IV(NEXTV) IV(DAMAT) = IV(AMAT) + N*L1 IV(XSAVE) = IV(DAMAT) + N*L1 IV(NEXTV) = IV(XSAVE) + P + RSVLEN IV(L1SAV) = L1 IV(MSAVE) = M C C *** DETERMINE HOW MANY GROUPS FOR FINITE DIFFERENCES C *** (SET UP TO CALL DSM) C IN1 = IV(IN) JN1 = IN1 + M DO 70 K = 1, P DO 60 I = 1, LP1 IF (INC(I,K) .EQ. 0) GO TO 60 IV(IN1) = I IN1 = IN1 + 1 IV(JN1) = K JN1 = JN1 + 1 60 CONTINUE 70 CONTINUE IN1 = IV(IN) JN1 = IN1 + M IWA1 = IN1 + INLEN NGRP1 = IWA1 + IWALEN BWA1 = NGRP1 + P IPNTR1 = BWA1 + P JPNTR1 = IPNTR1 + L + 2 CALL DSM(LP1, P, M, IV(IN1), IV(JN1), IV(NGRP1), NG, K, I, 1 IV(IPNTR1), IV(JPNTR1), IV(IWA1), IWALEN, IV(BWA1)) IF (I .EQ. 1) GO TO 90 IV(1) = 69 GO TO 50 80 IV(1) = 66 GO TO 50 C C *** SET UP GRP AND GPTR ARRAYS FOR COMPUTING FINITE DIFFERENCES C C *** THERE ARE NG GROUPS. GROUP I CONTAINS ALF(GRP(J)) FOR C *** GPTR(I) .LE. J .LE. GPTR(I+1)-1. C 90 IV(MAXGRP) = NG IV(GPTR) = IN1 + 2*L1 GPTR1 = IV(GPTR) IV(GRP) = GPTR1 + NG + 1 IV(NEXTIV) = IV(GRP) + P GRP1 = IV(GRP) NGRP0 = NGRP1 - 1 NGRP2 = NGRP0 + P DO 110 I = 1, NG IV(GPTR1) = GRP1 GPTR1 = GPTR1 + 1 DO 100 I1 = NGRP1, NGRP2 IF (IV(I1) .NE. I) GO TO 100 IV(GRP1) = I1 - NGRP0 GRP1 = GRP1 + 1 100 CONTINUE 110 CONTINUE IV(GPTR1) = GRP1 IF (IV1 .EQ. 13) GO TO 999 C C *** INITIALIZE POINTERS *** C 120 A1 = IV(AMAT) A0 = A1 - N DA1 = IV(DAMAT) DA0 = DA1 - N IN1 = IV(IN) IN0 = IN1 - 2 L1 = IV(L1SAV) IN2 = IN1 + 2*L1 - 1 D0 = IV(D) - 1 NG = IV(MAXGRP) XSAVE1 = IV(XSAVE) XSAVE0 = XSAVE1 - 1 RSAVE1 = XSAVE1 + P RSAVE0 = RSAVE1 + N ALP1 = A1 + L*N DELTA = V(DLTFDJ) IV(COVREQ) = -IABS(IV(COVREQ)) C 130 CALL RNSG(V(A1), ALF, C, V(DA1), IV(IN1), IV, L, L1, N, LIV, LV, 1 N, L1, P, V, Y) IF (IV(1)-2) 140, 150, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 140 NF = IV(NFCALL) CALL CALCA(N, P, L, ALF, NF, V(A1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 IF (L1 .LE. L) GO TO 130 IF (IV(RESTOR) .EQ. 2) CALL V7CPY(N, V(RSAVE0), V(RSAVE1)) CALL V7CPY(N, V(RSAVE1), V(ALP1)) GO TO 130 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 150 IF (L1 .GT. L .AND. IV(NFGCAL) .EQ. IV(NFCALL)) 1 CALL V7CPY(N, V(RSAVE0), V(RSAVE1)) GPTR1 = IV(GPTR) DO 230 K = 1, NG CALL V7CPY(P, V(XSAVE1), ALF) GRP1 = IV(GPTR1) GRP2 = IV(GPTR1+1) - 1 GPTR1 = GPTR1 + 1 DO 160 I1 = GRP1, GRP2 I = IV(I1) XI = ALF(I) J1 = D0 + I DI = V(J1) IF (DI .LE. ZERO) DI = ONE H = DELTA * AMAX1( ABS(XI), ONE/DI) IF (XI .LT. ZERO) H = -H X0I = XSAVE0 + I V(X0I) = XI + H 160 CONTINUE CALL CALCA(N, P, L, V(XSAVE1), IV(NFGCAL), V(DA1), 1 UIPARM, URPARM, UFPARM) IF (IV(NFGCAL) .GT. 0) GO TO 170 IV(TOOBIG) = 1 GO TO 130 170 JN1 = IN1 DO 180 I = IN1, IN2 180 IV(I) = 0 PARTJ = IV(MODE) .LE. P DO 220 I1 = GRP1, GRP2 I = IV(I1) DO 210 J1 = 1, L1 IF (INC(J1,I) .EQ. 0) GO TO 210 INI = IN0 + 2*J1 IV(INI) = I IV(INI+1) = J1 X0I = XSAVE0 + I H = ONE / (V(X0I) - ALF(I)) DAJ = DA0 + J1*N IF (PARTJ) GO TO 190 C *** FULL FINITE DIFFERENCE FOR COV. AND REG. DIAG. *** AJ = A0 + J1*N CALL V2AXY(N, V(DAJ), NEGONE, V(AJ), V(DAJ)) GO TO 200 190 IF (J1 .GT. L) 1 CALL V2AXY(N, V(DAJ), NEGONE, V(RSAVE0), V(DAJ)) 200 CALL V7SCL(N, V(DAJ), H, V(DAJ)) 210 CONTINUE 220 CONTINUE IF (K .GE. NG) GO TO 240 IV(1) = -2 CALL RNSG(V(A1), ALF, C, V(DA1), IV(IN1), IV, L, L1, N, LIV, 1 LV, N, L1, P, V, Y) IF (-2 .NE. IV(1)) GO TO 999 230 CONTINUE 240 IV(1) = 2 GO TO 130 C 999 RETURN C C *** LAST CARD OF NSF FOLLOWS *** END PyBDSF-1.10.1/src/port3/nsfb.f000066400000000000000000000241451420247104600155640ustar00rootroot00000000000000 SUBROUTINE NSFB(N, P, L, ALF, B, C, Y, CALCA, INC, IINC, IV, 1 LIV, LV, V, UIPARM, URPARM, UFPARM) C C *** SOLVE SEPARABLE NONLINEAR LEAST SQUARES USING C *** FINITE-DIFFERENCE DERIVATIVES. C C *** PARAMETER DECLARATIONS *** C INTEGER IINC, L, LIV, LV, N, P C/6 C INTEGER INC(IINC,P), IV(LIV), UIPARM(1) C REAL ALF(P), C(L), B(2,P), URPARM(1), V(LV), Y(N) C/7 INTEGER INC(IINC,P), IV(LIV), UIPARM(*) REAL ALF(P), C(L), B(2,P), URPARM(*), V(LV), Y(N) C/ EXTERNAL CALCA, UFPARM C C *** PARAMETERS *** C C N (IN) NUMBER OF OBSERVATIONS. C P (IN) NUMBER OF NONLINEAR PARAMETERS TO BE ESTIMATED. C L (IN) NUMBER OF LINEAR PARAMETERS TO BE ESTIMATED. C ALF (I/O) NONLINEAR PARAMETERS. C INPUT = INITIAL GUESS, C OUTPUT = BEST ESTIMATE FOUND. C B (IN) SIMBLE BOUNDS ON ALF.. B(1,I) .LE. ALF(I) .LE. B(2,I). C C (OUT) LINEAR PARAMETERS (ESTIMATED). C Y (IN) RIGHT-HAND SIDE VECTOR. C CALCA (IN) SUBROUTINE TO COMPUTE A MATRIX. C INC (IN) INCIDENCE MATRIX OF DEPENDENCIES OF COLUMNS OF A ON C COMPONENTS OF ALF -- INC(I,J) = 1 MEANS COLUMN I C OF A DEPENDS ON ALF(J). C IINC (IN) DECLARED LEAD DIMENSION OF INC. MUST BE AT LEAST L+1. C IV (I/O) INTEGER PARAMETER AND SCRATCH VECTOR. C LIV (IN) LENGTH OF IV. MUST BE AT LEAST C 122 + 2*M + 7*P + 2*L + MAX(L+1,6*P), WHERE M IS C THE NUMBER OF ONES IN INC. C LV (IN) LENGTH OF V. MUST BE AT LEAST C 105 + N*(2*L+6+P) + L*(L+3)/2 + P*(2*P + 22). C IF THE LAST ROW OF INC CONTAINS ONLY ZEROS, THEN LV C CAN BE 4*N LESS THAN JUST DESCRIBED. C V (I/O) FLOATING-POINT PARAMETER AND SCRATCH VECTOR. C UIPARM (I/O) INTEGER VECTOR PASSED WITHOUT CHANGE TO CALCA. C URPARM (I/O) FLOATING-POINT VECTOR PASSED WITHOUT CHANGE TO CALCA. C UFPARM (I/O) SUBROUTINE PASSED (WITHOUT HAVING BEEN CALLED) TO CALCA. C C C-------------------------- DECLARATIONS ---------------------------- C C C *** EXTERNAL SUBROUTINES *** C EXTERNAL IVSET, DSM, RNSGB, V2AXY, V7CPY, V7SCL C C IVSET.... PROVIDES DEFAULT IV AND V VALUES. C DSM...... DETERMINES EFFICIENT ORDER FOR FINITE DIFFERENCES. C RNSGB... CARRIES OUT NL2SOL ALGORITHM. C V2AXY.... ADDS A MULTIPLE OF ONE VECTOR TO ANOTHER. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7SCL... SCALES AND COPIES ONE VECTOR TO ANOTHER. C C *** LOCAL VARIABLES *** C LOGICAL PARTJ INTEGER A0, A1, AJ, ALP1, BWA1, D0, DA0, DA1, DAJ, GPTR1, GRP1, 1 GRP2, I, I1, IN0, IN1, IN2, INI, INLEN, IPNTR1, IV1, IWA1, 2 IWALEN, J1, JN1, JPNTR1, K, L1, LP1, M, M0, NF, NG, NGRP0, 3 NGRP1, NGRP2, RSAVE0, RSAVE1, RSVLEN, X0I, XSAVE0, XSAVE1 REAL DELTA, DI, H, XI, XI1 REAL NEGONE, ONE, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AMAT, COVREQ, D, DAMAT, DLTFDJ, GPTR, GRP, IN, IVNEED, 1 L1SAV, MAXGRP, MODE, MSAVE, NEXTIV, NEXTV, NFCALL, NFGCAL, 2 PERM, RESTOR, TOOBIG, VNEED, XSAVE C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AMAT/113/, COVREQ/15/, D/27/, DAMAT/114/, DLTFDJ/43/, C 1 GPTR/117/, GRP/118/, IN/112/, IVNEED/3/, L1SAV/111/, C 2 MAXGRP/116/, MODE/35/, MSAVE/115/, NEXTIV/46/, NEXTV/47/, C 3 NFCALL/6/, NFGCAL/7/, PERM/58/, RESTOR/9/, TOOBIG/2/, C 4 VNEED/4/, XSAVE/119/ C/7 PARAMETER (AMAT=113, COVREQ=15, D=27, DAMAT=114, DLTFDJ=43, 1 GPTR=117, GRP=118, IN=112, IVNEED=3, L1SAV=111, 2 MAXGRP=116, MODE=35, MSAVE=115, NEXTIV=46, NEXTV=47, 3 NFCALL=6, NFGCAL=7, PERM=58, RESTOR=9, TOOBIG=2, 4 VNEED=4, XSAVE=119) C/ DATA NEGONE/-1.E+0/, ONE/1.E+0/, ZERO/0.E+0/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C LP1 = L + 1 IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) IF (P .LE. 0 .OR. L .LT. 0 .OR. IINC .LE. L) GO TO 80 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 120 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 120 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 50 C C *** FRESH START *** C IF (IV(PERM) .LE. XSAVE) IV(PERM) = XSAVE + 1 C C *** CHECK INC, COUNT ITS NONZEROS C L1 = 0 M = 0 DO 40 I = 1, P IF (B(1,I) .GE. B(2,I)) GO TO 40 M0 = M IF (L .EQ. 0) GO TO 20 DO 10 K = 1, L IF (INC(K,I) .LT. 0 .OR. INC(K,I) .GT. 1) GO TO 80 IF (INC(K,I) .EQ. 1) M = M + 1 10 CONTINUE 20 IF (INC(LP1,I) .NE. 1) GO TO 30 M = M + 1 L1 = 1 GO TO 40 30 IF (M .EQ. M0 .OR. INC(LP1,I) .LT. 0 1 .OR. INC(LP1,I) .GT. 1) GO TO 80 40 CONTINUE C C *** NOW L1 = 1 MEANS A HAS COLUMN L+1 *** C C *** COMPUTE STORAGE REQUIREMENTS *** C IWALEN = MAX0(LP1, 6*P) INLEN = 2 * M IV(IVNEED) = IV(IVNEED) + INLEN + 3*P + L + IWALEN + 3 RSVLEN = 2 * L1 * N L1 = L + L1 IV(VNEED) = IV(VNEED) + 2*N*L1 + RSVLEN + P C 50 CALL RNSGB(V, ALF, B, C, V, IV, IV, L, 1, N, LIV, LV, N, M, P, V, 1 Y) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IN) = IV(NEXTIV) IV(AMAT) = IV(NEXTV) IV(DAMAT) = IV(AMAT) + N*L1 IV(XSAVE) = IV(DAMAT) + N*L1 IV(NEXTV) = IV(XSAVE) + P + RSVLEN IV(L1SAV) = L1 IV(MSAVE) = M C C *** DETERMINE HOW MANY GROUPS FOR FINITE DIFFERENCES C *** (SET UP TO CALL DSM) C IN1 = IV(IN) JN1 = IN1 + M DO 70 K = 1, P IF (B(1,K) .GE. B(2,K)) GO TO 70 DO 60 I = 1, LP1 IF (INC(I,K) .EQ. 0) GO TO 60 IV(IN1) = I IN1 = IN1 + 1 IV(JN1) = K JN1 = JN1 + 1 60 CONTINUE 70 CONTINUE IN1 = IV(IN) JN1 = IN1 + M IWA1 = IN1 + INLEN NGRP1 = IWA1 + IWALEN BWA1 = NGRP1 + P IPNTR1 = BWA1 + P JPNTR1 = IPNTR1 + L + 2 CALL DSM(LP1, P, M, IV(IN1), IV(JN1), IV(NGRP1), NG, K, I, 1 IV(IPNTR1), IV(JPNTR1), IV(IWA1), IWALEN, IV(BWA1)) IF (I .EQ. 1) GO TO 90 IV(1) = 69 GO TO 50 80 IV(1) = 66 GO TO 50 C C *** SET UP GRP AND GPTR ARRAYS FOR COMPUTING FINITE DIFFERENCES C C *** THERE ARE NG GROUPS. GROUP I CONTAINS ALF(GRP(J)) FOR C *** GPTR(I) .LE. J .LE. GPTR(I+1)-1. C 90 IV(MAXGRP) = NG IV(GPTR) = IN1 + 2*L1 GPTR1 = IV(GPTR) IV(GRP) = GPTR1 + NG + 1 IV(NEXTIV) = IV(GRP) + P GRP1 = IV(GRP) NGRP0 = NGRP1 - 1 NGRP2 = NGRP0 + P DO 110 I = 1, NG IV(GPTR1) = GRP1 GPTR1 = GPTR1 + 1 DO 100 I1 = NGRP1, NGRP2 IF (IV(I1) .NE. I) GO TO 100 K = I1 - NGRP0 IF (B(1,K) .GE. B(2,K)) GO TO 100 IV(GRP1) = K GRP1 = GRP1 + 1 100 CONTINUE 110 CONTINUE IV(GPTR1) = GRP1 IF (IV1 .EQ. 13) GO TO 999 C C *** INITIALIZE POINTERS *** C 120 A1 = IV(AMAT) A0 = A1 - N DA1 = IV(DAMAT) DA0 = DA1 - N IN1 = IV(IN) IN0 = IN1 - 2 L1 = IV(L1SAV) IN2 = IN1 + 2*L1 - 1 D0 = IV(D) - 1 NG = IV(MAXGRP) XSAVE1 = IV(XSAVE) XSAVE0 = XSAVE1 - 1 RSAVE1 = XSAVE1 + P RSAVE0 = RSAVE1 + N ALP1 = A1 + L*N DELTA = V(DLTFDJ) IV(COVREQ) = -IABS(IV(COVREQ)) C 130 CALL RNSGB(V(A1), ALF, B, C, V(DA1), IV(IN1), IV, L, L1, N, LIV, 1 LV, N, L1, P, V, Y) IF (IV(1)-2) 140, 150, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 140 NF = IV(NFCALL) CALL CALCA(N, P, L, ALF, NF, V(A1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 IF (L1 .LE. L) GO TO 130 IF (IV(RESTOR) .EQ. 2) CALL V7CPY(N, V(RSAVE0), V(RSAVE1)) CALL V7CPY(N, V(RSAVE1), V(ALP1)) GO TO 130 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 150 IF (L1 .GT. L .AND. IV(NFGCAL) .EQ. IV(NFCALL)) 1 CALL V7CPY(N, V(RSAVE0), V(RSAVE1)) GPTR1 = IV(GPTR) DO 260 K = 1, NG CALL V7CPY(P, V(XSAVE1), ALF) GRP1 = IV(GPTR1) GRP2 = IV(GPTR1+1) - 1 GPTR1 = GPTR1 + 1 DO 180 I1 = GRP1, GRP2 I = IV(I1) XI = ALF(I) J1 = D0 + I DI = V(J1) IF (DI .LE. ZERO) DI = ONE H = DELTA * AMAX1( ABS(XI), ONE/DI) IF (XI .LT. ZERO) GO TO 160 XI1 = XI + H IF (XI1 .LE. B(2,I)) GO TO 170 XI1 = XI - H IF (XI1 .GE. B(1,I)) GO TO 170 GO TO 190 160 XI1 = XI - H IF (XI1 .GE. B(1,I)) GO TO 170 XI1 = XI + H IF (XI1 .LE. B(2,I)) GO TO 170 GO TO 190 170 X0I = XSAVE0 + I V(X0I) = XI1 180 CONTINUE CALL CALCA(N, P, L, V(XSAVE1), NF, V(DA1), UIPARM, URPARM, 1 UFPARM) IF (IV(NFGCAL) .GT. 0) GO TO 200 190 IV(TOOBIG) = 1 GO TO 130 200 JN1 = IN1 DO 210 I = IN1, IN2 210 IV(I) = 0 PARTJ = IV(MODE) .LE. P DO 250 I1 = GRP1, GRP2 I = IV(I1) DO 240 J1 = 1, L1 IF (INC(J1,I) .EQ. 0) GO TO 240 INI = IN0 + 2*J1 IV(INI) = I IV(INI+1) = J1 X0I = XSAVE0 + I H = ONE / (V(X0I) - ALF(I)) DAJ = DA0 + J1*N IF (PARTJ) GO TO 220 C *** FULL FINITE DIFFERENCE FOR COV. AND REG. DIAG. *** AJ = A0 + J1*N CALL V2AXY(N, V(DAJ), NEGONE, V(AJ), V(DAJ)) GO TO 230 220 IF (J1 .GT. L) 1 CALL V2AXY(N, V(DAJ), NEGONE, V(RSAVE0), V(DAJ)) 230 CALL V7SCL(N, V(DAJ), H, V(DAJ)) 240 CONTINUE 250 CONTINUE IF (K .GE. NG) GO TO 270 IV(1) = -2 CALL RNSGB(V(A1), ALF, B, C, V(DA1), IV(IN1), IV, L, L1, N, 1 LIV, LV, N, L1, P, V, Y) IF (-2 .NE. IV(1)) GO TO 999 260 CONTINUE 270 IV(1) = 2 GO TO 130 C 999 RETURN C C *** LAST CARD OF NSFB FOLLOWS *** END PyBDSF-1.10.1/src/port3/nsg.f000066400000000000000000000312321420247104600154160ustar00rootroot00000000000000 SUBROUTINE NSG(N, P, L, ALF, C, Y, CALCA, CALCB, INC, IINC, IV, 1 LIV, LV, V, UIPARM, URPARM, UFPARM) C C *** SOLVE SEPARABLE NONLINEAR LEAST SQUARES USING *** C *** ANALYTICALLY COMPUTED DERIVATIVES. *** C C *** PARAMETER DECLARATIONS *** C INTEGER IINC, L, LIV, LV, N, P C/6 C INTEGER INC(IINC,P), IV(LIV), UIPARM(1) C REAL ALF(P), C(L), URPARM(1), V(LV), Y(N) C/7 INTEGER INC(IINC,P), IV(LIV), UIPARM(*) REAL ALF(P), C(L), URPARM(*), V(LV), Y(N) C/ EXTERNAL CALCA, CALCB, UFPARM C C *** PURPOSE *** C C GIVEN A SET OF N OBSERVATIONS Y(1)....Y(N) OF A DEPENDENT VARIABLE C T(1)...T(N), NSG ATTEMPTS TO COMPUTE A LEAST SQUARES FIT C TO A FUNCTION ETA (THE MODEL) WHICH IS A LINEAR COMBINATION C C L C ETA(C,ALF,T) = SUM C * PHI(ALF,T) +PHI (ALF,T) C J=1 J J L+1 C C OF NONLINEAR FUNCTIONS PHI(J) DEPENDENT ON T AND ALF(1),...,ALF(P) C (.E.G. A SUM OF EXPONENTIALS OR GAUSSIANS). THAT IS, IT DETERMINES C NONLINEAR PARAMETERS ALF WHICH MINIMIZE C C 2 N 2 C NORM(RESIDUAL) = SUM (Y - ETA(C,ALF,T )). C I=1 I I C C THE (L+1)ST TERM IS OPTIONAL. C C-------------------------- PARAMETER USAGE ------------------------- C C INPUT PARAMETERS C C N INTEGER NUMBER OF OBSERVATIONS (MUST BE .GE. MAX(L,P)). C C P INTEGER NUMBER OF NONLINEAR PARAMETERS (MUST BE .GE. 1). C C L INTEGER NUMBER OF LINEAR PARAMETERS (MUST BE .GE. 0). C C ALF D.P. ARRAY P VECTOR = INITIAL ESTIMATE OF THE NONLINEAR C PARAMETERS. C C CALCA SUBROUTINE USER PROVIDED FUNCTION TO CALCULATE THE MODEL C (I.E., TO CALCULATE PHI) -- SEE THE NOTE BELOW C ON THE CALLING SEQUENCE FOR CALCA. C CALCA MUST BE DECLARED EXTERNAL IN THE CALLING C PROGRAM. C C CALCB SUBROUTINE USER PROVIDED FUNCTION TO CALCULATE THE DERIVA- C TIVE OF THE MODEL (I.E., OF PHI) WITH RESPECT TO C ALF -- SEE THE NOTE BELOW ON THE CALLING C SEQUENCE FOR CALCB. CALCB MUST BE DECLARED C EXTERNAL IN THE CALLING PROGRAM. C C Y D.P. ARRAY VECTOR OF OBSERVATIONS. C C INC INTEGER ARRAY A 2 DIM. ARRAY OF DIMENSION AT LEAST (L+1,P) C INDICATING THE POSITION OF THE NONLINEAR PARA- C METERS IN THE MODEL. SET INC(J,K) = 1 IF ALF(K) C APPEARS IN PHI(J). OTHERWISE SET INC(J,K) = 0. C IF PHI((L+1)) IS NOT IN THE MODEL, SET THE L+1ST C ROW OF INC TO ALL ZEROS. EVERY COLUMN OF INC C MUST CONTAIN AT LEAST ONE 1. C C IINC INTEGER DECLARED ROW DIMENSION OF INC, WHICH MUST BE AT C LEAST L+1. C C IV INTEGER ARRAY OF LENGTH AT LEAST LIV THAT CONTAINS C VARIOUS PARAMETERS FOR THE SUBROUTINE, SUCH AS C THE ITERATION AND FUNCTION EVALUATION LIMITS AND C SWITCHES THAT CONTROL PRINTING. THE INPUT COM- C PONENTS OF IV ARE DESCRIBED IN DETAIL IN THE C PORT OPTIMIZATION DOCUMENTATION. C IF IV(1)=0 ON INPUT, THEN DEFAULT PARAMETERS C ARE SUPPLIED TO IV AND V. THE CALLER MAY SUPPLY C NONDEFAULT PARAMETERS TO IV AND V BY EXECUTING A C CALL IVSET(1,IV,LIV,LV,V) AND THEN ASSIGNING C NONDEFAULT VALUES TO THE APPROPRIATE COMPONENTS C OF IV AND V BEFORE CALLING NSG. C C LIV INTEGER LENGTH OF IV. MUST BE AT LEAST 115+P+L + 2*M, C WHERE M IS THE NUMBER OF ONES IN INC. C C LV INTEGER LENGTH OF V. MUST BE AT LEAST C 105 + N*(L+M+3) + JLEN + L*(L+3)/2 + P*(2*P+17), C WHERE M IS AS FOR LIV (SEE ABOVE) AND C JLEN = (L+P)*(N+L+P+1), UNLESS NEITHER A C COVARIANCE MATRIX NOR REGRESSION DIAGNOSTICS ARE C REQUESTED, IN WHICH CASE JLEN = N*P. IF THE C LAST ROW OF INC CONTAINS ONLY ZEROS, THEN LV C CAN BE N LESS THAN JUST DESCRIBED. C C V D.P. ARRAY WORK AND PARAMETER ARRAY OF LENGTH AT LEAST LV C THAT CONTAINS SUCH INPUT COMPONENTS AS THE C CONVERGENCE TOLERANCES. THE INPUT COMPONENTS OF C V MAY BE SUPPLIED AS FOR IV (SEE ABOVE). NOTE C THAT V(35) CONTAINS THE INITIAL STEP BOUND, C WHICH, IF TOO LARGE, MAY LEAD TO OVERFLOW. C C UIPARM INTEGER ARRAY SCRATCH SPACE FOR USER TO SEND INFORMATION C TO CALCA AND CALCB. C C URPARM D.P. ARRAY SCRATCH SPACE FOR USER TO SEND INFORMATION C TO CALCA AND CALCB. C C UFPARM EXTERNAL SUBROUTINE SENT TO CALCA AND CALCB FOR THEIR C USE. NOTE THAT THE SUBROUTINE PASSED FOR UFPARM C MUST BE DECLARED EXTERNAL IN THE CALLING PROGRAM. C C C OUTPUT PARAMETERS C C ALF D.P. ARRAY FINAL NONLINEAR PARAMETERS. C C C D.P. ARRAY L VECTOR OF LINEAR PARAMETERS -- NOTE THAT NO C INITIAL GUESS FOR C IS REQUIRED. C C IV IV(1) CONTAINS A RETURN CODE DESCRIBED IN THE C PORT OPTIMIZATION DOCUMENTATION. IF IV(1) LIES C BETWEEN 3 AND 7, THEN THE ALGORITHM HAS C CONVERGED (BUT IV(1) = 7 INDICATES POSSIBLE C TROUBLE WITH THE MODEL). IV(1) = 9 OR 10 MEANS C FUNCTION EVALUATION OR ITERATION LIMIT REACHED. C IV(1) = 66 MEANS BAD PARAMETERS (INCLUDING A C COLUMN OF ZEROS IN INC). NOTE THAT THE C ALGORITHM CAN BE RESTARTED AFTER ANY RETURN WITH C IV(1) .LT. 12 -- SEE THE PORT DOCUMENTATION. C C V VARIOUS ITEMS OF INTEREST, INCLUDING THE NORM OF C THE GRADIENT(1) AND THE FUNCTION VALUE(10). SEE C THE PORT DOCUMENTATION FOR A COMPLETE LIST. IF C A COVARIANCE ESTIMATE IS REQUESTED, IT IS FOR C (ALF,C) -- NONLINEAR PARAMETERS ORDERED FIRST, C FOLLOWED BY LINEAR PARAMETERS. C C C C PARAMETERS FOR CALCA(N,P,L,ALF,NF,PHI, UIPARM,URPARM,UFPARM) C C N,L,P,ALF ARE INPUT PARAMETERS AS DESCRIBED ABOVE C C PHI D.P. ARRAY N*(L+1) ARRAY WHOSE COLUMNS CONTAIN THE TERMS OF C THE MODEL. CALCA MUST EVALUATE PHI(ALF) AND STORE C THE RESULT IN PHI. IF THE (L+1)ST TERM IS NOT IN C THE MODEL, THEN NOTHING SHOULD BE STORED IN THE C (L+1)ST COLUMN OF PHI. C C NF INTEGER CURRENT INVOCATION COUNT FOR CALCA. IF PHI CANNOT C BE EVALUATED AT ALF (E.G. BECAUSE AN ARGUMENT TO C AN INTRINSIC FUNCTION IS OUT OF RANGE), THEN CALCA C SHOULD SIMPLY SET NF TO 0 AND RETURN. THIS C TELLS THE ALGORITHM TO TRY A SMALLER STEP. C C UIPARM,URPARM,UFPARM ARE AS DESCRIBED ABOVE C C N.B. THE DEPENDENT VARIABLE T IS NOT EXPLICITLY PASSED. IF REQUIRED, C IT MAY BE PASSED IN UIPARM OR URPARM OR STORED IN NAMED COMMON. C C C PARAMETERS FOR CALCB(N,P,L,ALF,NF,DER, UIPARM,URPARM,UFPARM) C C N,P,L,ALF,NF,UIPARM,URPARM,UFPARM ARE AS FOR CALCA C C DER D.P. ARRAY N*M ARRAY, WHERE M IS THE NUMBER OF ONES IN INC. C CALCB MUST SET DER TO THE DERIVATIVES OF THE MODEL C WITH RESPECT TO ALF. IF THE MODEL HAS K TERMS THAT C DEPEND ON ALF(I), THEN DER WILL HAVE K CONSECUTIVE C COLUMNS OF DERIVATIVES WITH RESPECT TO ALF(I). THE C COLUMNS OF DER CORRESPOND TO THE ONES IN INC WHEN C ONE TRAVELS THROUGH INC BY COLUMNS. FOR EXAMPLE, C IF INC HAS THE FORM... C 1 1 0 C 0 1 0 C 1 0 0 C 0 0 1 C THEN THE FIRST TWO COLUMNS OF DER ARE FOR THE C DERIVATIVES OF COLUMNS 1 AND 3 OF PHI WITH RESPECT C TO ALF(1), COLUMNS 3 AND 4 OF DER ARE FOR THE C DERIVATIVES OF COLUMNS 1 AND 2 OF PHI WITH RESPECT C TO ALF(2), AND COLUMN 5 OF DER IS FOR THE DERIVA- C TIVE OF COLUMN 4 OF PHI WITH RESPECT TO ALF(3). C MORE SPECIFICALLY, DER(I,2) IS FOR THE DERIVATIVE C OF PHI(I,3) WITH RESPECT TO ALF(1) AND DER(I,5) IS C FOR THE DERIVATIVE OF PHI(I,4) WITH RESPECT TO C ALF(3) (FOR I = 1,2,...,N). C THE VALUE OF ALF PASSED TO CALCB IS THE SAME AS C THAT PASSED TO CALCA THE LAST TIME IT WAS CALLED. C (IF DER CANNOT BE EVALUATED, THEN CALCB SHOULD SET C NF TO 0. THIS WILL CAUSE AN ERROR RETURN.) C C N.B. DER IS FOR DERIVATIVES WITH RESPECT TO ALF, NOT T. C C------------------------------ NOTES ------------------------------- C C THIS PROGRAM WAS WRITTEN BY LINDA KAUFMAN AT BELL LABS, MURRAY C HILL, N.J. IN 1977 AND EXTENSIVELY REVISED BY HER AND DAVID GAY IN C 1980, 1981, 1983, 1984. THE WORK OF DAVID GAY WAS SUPPORTED IN PART C BY NATIONAL SCIENCE FOUNDATION GRANT MCS-7906671. C C-------------------------- DECLARATIONS ---------------------------- C C C *** EXTERNAL SUBROUTINES *** C EXTERNAL IVSET, RNSG C C IVSET.... PROVIDES DEFAULT IV AND V VALUES. C RNSG... CARRIES OUT NL2SOL ALGORITHM. C C *** LOCAL VARIABLES *** C INTEGER A1, DA1, I, IN1, IV1, K, L1, LP1, M, M0, NF C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AMAT, DAMAT, IN, IVNEED, L1SAV, MSAVE, NEXTIV, 1 NEXTV, NFCALL, NFGCAL, PERM, TOOBIG, VNEED C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AMAT/113/, DAMAT/114/, IN/112/, IVNEED/3/, L1SAV/111/, C 1 MSAVE/115/, NEXTIV/46/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, C 2 PERM/58/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (AMAT=113, DAMAT=114, IN=112, IVNEED=3, L1SAV=111, 1 MSAVE=115, NEXTIV=46, NEXTV=47, NFCALL=6, NFGCAL=7, 2 PERM=58, TOOBIG=2, VNEED=4) C/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) IF (P .LE. 0 .OR. L .LT. 0 .OR. IINC .LE. L) GO TO 50 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 90 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 90 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 60 IF (IV(PERM) .LE. MSAVE) IV(PERM) = MSAVE + 1 LP1 = L + 1 L1 = 0 M = 0 DO 40 I = 1, P M0 = M IF (L .EQ. 0) GO TO 20 DO 10 K = 1, L IF (INC(K,I) .LT. 0 .OR. INC(K,I) .GT. 1) GO TO 50 IF (INC(K,I) .EQ. 1) M = M + 1 10 CONTINUE 20 IF (INC(LP1,I) .NE. 1) GO TO 30 M = M + 1 L1 = 1 30 IF (M .EQ. M0 .OR. INC(LP1,I) .LT. 0 1 .OR. INC(LP1,I) .GT. 1) GO TO 50 40 CONTINUE C IV(IVNEED) = IV(IVNEED) + 2*M L1 = L + L1 IV(VNEED) = IV(VNEED) + N*(L1+M) GO TO 60 C 50 IV(1) = 66 C 60 CALL RNSG(V, ALF, C, V, IV, IV, L, 1, N, LIV, LV, N, M, P, V, Y) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IN) = IV(NEXTIV) IV(NEXTIV) = IV(IN) + 2*M IV(AMAT) = IV(NEXTV) IV(DAMAT) = IV(AMAT) + N*L1 IV(NEXTV) = IV(DAMAT) + N*M IV(L1SAV) = L1 IV(MSAVE) = M C C *** SET UP IN ARRAY *** C IN1 = IV(IN) DO 80 I = 1, P DO 70 K = 1, LP1 IF (INC(K,I) .EQ. 0) GO TO 70 IV(IN1) = I IV(IN1+1) = K IN1 = IN1 + 2 70 CONTINUE 80 CONTINUE IF (IV1 .EQ. 13) GO TO 999 C 90 A1 = IV(AMAT) DA1 = IV(DAMAT) IN1 = IV(IN) L1 = IV(L1SAV) M = IV(MSAVE) C 100 CALL RNSG(V(A1), ALF, C, V(DA1), IV(IN1), IV, L, L1, N, LIV, LV, 1 N, M, P, V, Y) IF (IV(1)-2) 110, 120, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 110 NF = IV(NFCALL) CALL CALCA(N, P, L, ALF, NF, V(A1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 100 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 120 CALL CALCB(N, P, L, ALF, IV(NFGCAL), V(DA1), UIPARM, URPARM, 1 UFPARM) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 GO TO 100 C 999 RETURN C C *** LAST CARD OF NSG FOLLOWS *** END PyBDSF-1.10.1/src/port3/nsgb.f000066400000000000000000000306521420247104600155650ustar00rootroot00000000000000 SUBROUTINE NSGB(N, P, L, ALF, B, C, Y, CALCA, CALCB, INC, IINC, 1 IV, LIV, LV, V, UIPARM, URPARM, UFPARM) C C *** SOLVE SEPARABLE NONLINEAR LEAST SQUARES USING *** C *** ANALYTICALLY COMPUTED DERIVATIVES. *** C C *** PARAMETER DECLARATIONS *** C INTEGER IINC, L, LIV, LV, N, P C/6 C INTEGER INC(IINC,P), IV(LIV), UIPARM(1) C REAL ALF(P), B(2,P), C(L), URPARM(1), V(LV), Y(N) C/7 INTEGER INC(IINC,P), IV(LIV), UIPARM(*) REAL ALF(P), B(2,P), C(L), URPARM(*), V(LV), Y(N) C/ EXTERNAL CALCA, CALCB, UFPARM C C *** PURPOSE *** C C GIVEN A SET OF N OBSERVATIONS Y(1)....Y(N) OF A DEPENDENT VARIABLE C T(1)...T(N), NSGB ATTEMPTS TO COMPUTE A LEAST SQUARES FIT C TO A FUNCTION ETA (THE MODEL) WHICH IS A LINEAR COMBINATION C C L C ETA(C,ALF,T) = SUM C * PHI(ALF,T) +PHI (ALF,T) C J=1 J J L+1 C C OF NONLINEAR FUNCTIONS PHI(J) DEPENDENT ON T AND ALF(1),...,ALF(P) C (.E.G. A SUM OF EXPONENTIALS OR GAUSSIANS). THAT IS, IT DETERMINES C NONLINEAR PARAMETERS ALF WHICH MINIMIZE C C 2 N 2 C NORM(RESIDUAL) = SUM (Y - ETA(C,ALF,T )) , C I=1 I I C C SUBJECT TO THE SIMPLE BOUND CONSTRAINTS C B(1,I) .LE. ALF(I) .LE. B(2,I), C I = 1(1)P. C C THE (L+1)ST TERM IS OPTIONAL. C C-------------------------- PARAMETER USAGE ------------------------- C C INPUT PARAMETERS C C N INTEGER NUMBER OF OBSERVATIONS (MUST BE .GE. MAX(L,P)). C C P INTEGER NUMBER OF NONLINEAR PARAMETERS (MUST BE .GE. 1). C C L INTEGER NUMBER OF LINEAR PARAMETERS (MUST BE .GE. 0). C C ALF D.P. ARRAY P VECTOR = INITIAL ESTIMATE OF THE NONLINEAR C PARAMETERS. C C CALCA SUBROUTINE USER PROVIDED FUNCTION TO CALCULATE THE MODEL C (I.E., TO CALCULATE PHI) -- SEE THE NOTE BELOW C ON THE CALLING SEQUENCE FOR CALCA. C CALCA MUST BE DECLARED EXTERNAL IN THE CALLING C PROGRAM. C C CALCB SUBROUTINE USER PROVIDED FUNCTION TO CALCULATE THE DERIVA- C TIVE OF THE MODEL (I.E., OF PHI) WITH RESPECT TO C ALF -- SEE THE NOTE BELOW ON THE CALLING C SEQUENCE FOR CALCB. CALCB MUST BE DECLARED C EXTERNAL IN THE CALLING PROGRAM. C C Y D.P. ARRAY VECTOR OF OBSERVATIONS. C C INC INTEGER ARRAY A 2 DIM. ARRAY OF DIMENSION AT LEAST (L+1,P) C INDICATING THE POSITION OF THE NONLINEAR PARA- C METERS IN THE MODEL. SET INC(J,K) = 1 IF ALF(K) C APPEARS IN PHI(J). OTHERWISE SET INC(J,K) = 0. C IF PHI((L+1)) IS NOT IN THE MODEL, SET THE L+1ST C ROW OF INC TO ALL ZEROS. EVERY COLUMN OF INC C MUST CONTAIN AT LEAST ONE 1. C C IINC INTEGER DECLARED ROW DIMENSION OF INC, WHICH MUST BE AT C LEAST L+1. C C IV INTEGER ARRAY OF LENGTH AT LEAST LIV THAT CONTAINS C VARIOUS PARAMETERS FOR THE SUBROUTINE, SUCH AS C THE ITERATION AND FUNCTION EVALUATION LIMITS AND C SWITCHES THAT CONTROL PRINTING. THE INPUT COM- C PONENTS OF IV ARE DESCRIBED IN DETAIL IN THE C PORT OPTIMIZATION DOCUMENTATION. C IF IV(1)=0 ON INPUT, THEN DEFAULT PARAMETERS C ARE SUPPLIED TO IV AND V. THE CALLER MAY SUPPLY C NONDEFAULT PARAMETERS TO IV AND V BY EXECUTING A C CALL IVSET(1,IV,LIV,LV,V) AND THEN ASSIGNING C NONDEFAULT VALUES TO THE APPROPRIATE COMPONENTS C OF IV AND V BEFORE CALLING NSGB. C C LIV INTEGER LENGTH OF IV. MUST BE AT LEAST C 115 + 4*P + L + 2*M, C WHERE M IS THE NUMBER OF ONES IN INC. C C LV INTEGER LENGTH OF V. MUST BE AT LEAST C 105 + N*(L+M+P+3) + L*(L+3)/2 + P*(2*P+21), C WHERE M IS AS FOR LIV (SEE ABOVE). IF THE C LAST ROW OF INC CONTAINS ONLY ZEROS, THEN LV C CAN BE N LESS THAN JUST DESCRIBED. C C V D.P. ARRAY WORK AND PARAMETER ARRAY OF LENGTH AT LEAST LV C THAT CONTAINS SUCH INPUT COMPONENTS AS THE C CONVERGENCE TOLERANCES. THE INPUT COMPONENTS OF C V MAY BE SUPPLIED AS FOR IV (SEE ABOVE). NOTE C THAT V(35) CONTAINS THE INITIAL STEP BOUND, C WHICH, IF TOO LARGE, MAY LEAD TO OVERFLOW. C C UIPARM INTEGER ARRAY SCRATCH SPACE FOR USER TO SEND INFORMATION C TO CALCA AND CALCB. C C URPARM D.P. ARRAY SCRATCH SPACE FOR USER TO SEND INFORMATION C TO CALCA AND CALCB. C C UFPARM EXTERNAL SUBROUTINE SENT TO CALCA AND CALCB FOR THEIR C USE. NOTE THAT THE SUBROUTINE PASSED FOR UFPARM C MUST BE DECLARED EXTERNAL IN THE CALLING PROGRAM. C C C OUTPUT PARAMETERS C C ALF D.P. ARRAY FINAL NONLINEAR PARAMETERS. C C C D.P. ARRAY L VECTOR OF LINEAR PARAMETERS -- NOTE THAT NO C INITIAL GUESS FOR C IS REQUIRED. C C IV IV(1) CONTAINS A RETURN CODE DESCRIBED IN THE C PORT OPTIMIZATION DOCUMENTATION. IF IV(1) LIES C BETWEEN 3 AND 7, THEN THE ALGORITHM HAS C CONVERGED (BUT IV(1) = 7 INDICATES POSSIBLE C TROUBLE WITH THE MODEL). IV(1) = 9 OR 10 MEANS C FUNCTION EVALUATION OR ITERATION LIMIT REACHED. C IV(1) = 66 MEANS BAD PARAMETERS (INCLUDING A C COLUMN OF ZEROS IN INC). NOTE THAT THE C ALGORITHM CAN BE RESTARTED AFTER ANY RETURN WITH C IV(1) .LT. 12 -- SEE THE PORT DOCUMENTATION. C C V VARIOUS ITEMS OF INTEREST, INCLUDING THE NORM OF C THE GRADIENT(1) AND THE FUNCTION VALUE(10). SEE C THE PORT DOCUMENTATION FOR A COMPLETE LIST. C C C C PARAMETERS FOR CALCA(N,P,L,ALF,NF,PHI, UIPARM,URPARM,UFPARM) C C N,L,P,ALF ARE INPUT PARAMETERS AS DESCRIBED ABOVE C C PHI D.P. ARRAY N*(L+1) ARRAY WHOSE COLUMNS CONTAIN THE TERMS OF C THE MODEL. CALCA MUST EVALUATE PHI(ALF) AND STORE C THE RESULT IN PHI. IF THE (L+1)ST TERM IS NOT IN C THE MODEL, THEN NOTHING SHOULD BE STORED IN THE C (L+1)ST COLUMN OF PHI. C C NF INTEGER CURRENT INVOCATION COUNT FOR CALCA. IF PHI CANNOT C BE EVALUATED AT ALF (E.G. BECAUSE AN ARGUMENT TO C AN INTRINSIC FUNCTION IS OUT OF RANGE), THEN CALCA C SHOULD SIMPLY SET NF TO 0 AND RETURN. THIS C TELLS THE ALGORITHM TO TRY A SMALLER STEP. C C UIPARM,URPARM,UFPARM ARE AS DESCRIBED ABOVE C C N.B. THE DEPENDENT VARIABLE T IS NOT EXPLICITLY PASSED. IF REQUIRED, C IT MAY BE PASSED IN UIPARM OR URPARM OR STORED IN NAMED COMMON. C C C PARAMETERS FOR CALCB(N,P,L,ALF,NF,DER, UIPARM,URPARM,UFPARM) C C N,P,L,ALF,NF,UIPARM,URPARM,UFPARM ARE AS FOR CALCA C C DER D.P. ARRAY N*M ARRAY, WHERE M IS THE NUMBER OF ONES IN INC. C CALCB MUST SET DER TO THE DERIVATIVES OF THE MODEL C WITH RESPECT TO ALF. IF THE MODEL HAS K TERMS THAT C DEPEND ON ALF(I), THEN DER WILL HAVE K CONSECUTIVE C COLUMNS OF DERIVATIVES WITH RESPECT TO ALF(I). THE C COLUMNS OF DER CORRESPOND TO THE ONES IN INC WHEN C ONE TRAVELS THROUGH INC BY COLUMNS. FOR EXAMPLE, C IF INC HAS THE FORM... C 1 1 0 C 0 1 0 C 1 0 0 C 0 0 1 C THEN THE FIRST TWO COLUMNS OF DER ARE FOR THE C DERIVATIVES OF COLUMNS 1 AND 3 OF PHI WITH RESPECT C TO ALF(1), COLUMNS 3 AND 4 OF DER ARE FOR THE C DERIVATIVES OF COLUMNS 1 AND 2 OF PHI WITH RESPECT C TO ALF(2), AND COLUMN 5 OF DER IS FOR THE DERIVA- C TIVE OF COLUMN 4 OF PHI WITH RESPECT TO ALF(3). C MORE SPECIFICALLY, DER(I,2) IS FOR THE DERIVATIVE C OF PHI(I,3) WITH RESPECT TO ALF(1) AND DER(I,5) IS C FOR THE DERIVATIVE OF PHI(I,4) WITH RESPECT TO C ALF(3) (FOR I = 1,2,...,N). C THE VALUE OF ALF PASSED TO CALCB IS THE SAME AS C THAT PASSED TO CALCA THE LAST TIME IT WAS CALLED. C (IF DER CANNOT BE EVALUATED, THEN CALCB SHOULD SET C NF TO 0. THIS WILL CAUSE AN ERROR RETURN.) C C N.B. DER IS FOR DERIVATIVES WITH RESPECT TO ALF, NOT T. C C------------------------------ NOTES ------------------------------- C C THIS PROGRAM WAS WRITTEN BY LINDA KAUFMAN AT BELL LABS, MURRAY C HILL, N.J. IN 1977 AND EXTENSIVELY REVISED BY HER AND DAVID GAY IN C 1980, 1981, 1983, 1984. THE WORK OF DAVID GAY WAS SUPPORTED IN PART C BY NATIONAL SCIENCE FOUNDATION GRANT MCS-7906671. C C-------------------------- DECLARATIONS ---------------------------- C C C *** EXTERNAL SUBROUTINES *** C EXTERNAL IVSET, RNSGB C C IVSET.... PROVIDES DEFAULT IV AND V VALUES. C RNSGB... CARRIES OUT NL2SOL ALGORITHM. C C *** LOCAL VARIABLES *** C INTEGER A1, DA1, I, IN1, IV1, K, L1, LP1, M, M0, NF C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AMAT, DAMAT, IN, IVNEED, L1SAV, MSAVE, NEXTIV, 1 NEXTV, NFCALL, NFGCAL, PERM, TOOBIG, VNEED C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AMAT/113/, DAMAT/114/, IN/112/, IVNEED/3/, L1SAV/111/, C 1 MSAVE/115/, NEXTIV/46/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, C 2 PERM/58/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (AMAT=113, DAMAT=114, IN=112, IVNEED=3, L1SAV=111, 1 MSAVE=115, NEXTIV=46, NEXTV=47, NFCALL=6, NFGCAL=7, 2 PERM=58, TOOBIG=2, VNEED=4) C/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) IF (P .LE. 0 .OR. L .LT. 0 .OR. IINC .LE. L) GO TO 50 IV1 = IV(1) IF (IV1 .EQ. 14) GO TO 90 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 90 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 60 IF (IV(PERM) .LE. MSAVE) IV(PERM) = MSAVE + 1 LP1 = L + 1 L1 = 0 M = 0 DO 40 I = 1, P M0 = M IF (L .EQ. 0) GO TO 20 DO 10 K = 1, L IF (INC(K,I) .LT. 0 .OR. INC(K,I) .GT. 1) GO TO 50 IF (INC(K,I) .EQ. 1) M = M + 1 10 CONTINUE 20 IF (INC(LP1,I) .NE. 1) GO TO 30 M = M + 1 L1 = 1 30 IF (M .EQ. M0 .OR. INC(LP1,I) .LT. 0 1 .OR. INC(LP1,I) .GT. 1) GO TO 50 40 CONTINUE C IV(IVNEED) = IV(IVNEED) + 2*M L1 = L + L1 IV(VNEED) = IV(VNEED) + N*(L1+M) GO TO 60 C 50 IV(1) = 66 C 60 CALL RNSGB(V, ALF, B, C, V, IV, IV, L, 1, N, LIV, LV, N, M, P, V, 1 Y) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IN) = IV(NEXTIV) IV(NEXTIV) = IV(IN) + 2*M IV(AMAT) = IV(NEXTV) IV(DAMAT) = IV(AMAT) + N*L1 IV(NEXTV) = IV(DAMAT) + N*M IV(L1SAV) = L1 IV(MSAVE) = M C C *** SET UP IN ARRAY *** C IN1 = IV(IN) DO 80 I = 1, P DO 70 K = 1, LP1 IF (INC(K,I) .EQ. 0) GO TO 70 IV(IN1) = I IV(IN1+1) = K IN1 = IN1 + 2 70 CONTINUE 80 CONTINUE IF (IV1 .EQ. 13) GO TO 999 C 90 A1 = IV(AMAT) DA1 = IV(DAMAT) IN1 = IV(IN) L1 = IV(L1SAV) M = IV(MSAVE) C 100 CALL RNSGB(V(A1), ALF, B, C, V(DA1), IV(IN1), IV, L, L1, N, LIV, 1 LV, N, M, P, V, Y) IF (IV(1)-2) 110, 120, 999 C C *** NEW FUNCTION VALUE (R VALUE) NEEDED *** C 110 NF = IV(NFCALL) CALL CALCA(N, P, L, ALF, NF, V(A1), UIPARM, URPARM, UFPARM) IF (NF .LE. 0) IV(TOOBIG) = 1 GO TO 100 C C *** COMPUTE DR = GRADIENT OF R COMPONENTS *** C 120 CALL CALCB(N, P, L, ALF, IV(NFGCAL), V(DA1), UIPARM, URPARM, 1 UFPARM) IF (IV(NFGCAL) .EQ. 0) IV(TOOBIG) = 1 GO TO 100 C 999 RETURN C C *** LAST CARD OF NSGB FOLLOWS *** END PyBDSF-1.10.1/src/port3/o7prd.f000066400000000000000000000013331420247104600156610ustar00rootroot00000000000000 SUBROUTINE O7PRD(L, LS, P, S, W, Y, Z) C C *** FOR I = 1..L, SET S = S + W(I)*Y(.,I)*(Z(.,I)**T), I.E., C *** ADD W(I) TIMES THE OUTER PRODUCT OF Y(.,I) AND Z(.,I). C INTEGER L, LS, P REAL S(LS), W(L), Y(P,L), Z(P,L) C DIMENSION S(P*(P+1)/2) C INTEGER I, J, K, M REAL WK, YI, ZERO DATA ZERO/0.E+0/ C DO 30 K = 1, L WK = W(K) IF (WK .EQ. ZERO) GO TO 30 M = 1 DO 20 I = 1, P YI = WK * Y(I,K) DO 10 J = 1, I S(M) = S(M) + YI*Z(J,K) M = M + 1 10 CONTINUE 20 CONTINUE 30 CONTINUE C 999 RETURN C *** LAST CARD OF O7PRD FOLLOWS *** END PyBDSF-1.10.1/src/port3/orthe.f000066400000000000000000000063511420247104600157540ustar00rootroot00000000000000 SUBROUTINE ORTHE(NM,N,LOW,IGH,A,ORT) C INTEGER I,J,M,N,II,JJ,LA,MP,NM,IGH,KP1,LOW REAL A(NM,N),ORT(IGH) REAL F,G,H,SCALE REAL SQRT,ABS,SIGN C C THIS IS THE EISPACK ROUTINE, ORTHES, PUT INTO PORT C AUGUST 18, 1976. C C THE NAME CHANGE IS DUE TO THE PORT CONVENTION THAT ALL DOUBLE C PRECISION NAMES HAVE A D PUT IN FRONT OF THE SINGLE-PRECISION C ONES, WHICH THEREFORE HAVE TO HAVE ONLY 5 CHARACTERS. C C C THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE ORTHES, C NUM. MATH. 12, 349-368(1968) BY MARTIN AND WILKINSON. C HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 339-358(1971). C C GIVEN A REAL GENERAL MATRIX, THIS SUBROUTINE C REDUCES A SUBMATRIX SITUATED IN ROWS AND COLUMNS C LOW THROUGH IGH TO UPPER HESSENBERG FORM BY C ORTHOGONAL SIMILARITY TRANSFORMATIONS. C C ON INPUT- C C NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL C ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM C DIMENSION STATEMENT, C C N IS THE ORDER OF THE MATRIX, C C LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING C SUBROUTINE BALANC. IF BALANC HAS NOT BEEN USED, C SET LOW=1, IGH=N, C C A CONTAINS THE INPUT MATRIX. C C ON OUTPUT- C C A CONTAINS THE HESSENBERG MATRIX. INFORMATION ABOUT C THE ORTHOGONAL TRANSFORMATIONS USED IN THE REDUCTION C IS STORED IN THE REMAINING TRIANGLE UNDER THE C HESSENBERG MATRIX, C C ORT CONTAINS FURTHER INFORMATION ABOUT THE TRANSFORMATIONS. C ONLY ELEMENTS LOW THROUGH IGH ARE USED. C C ------------------------------------------------------------------ C LA = IGH - 1 KP1 = LOW + 1 IF (LA .LT. KP1) GO TO 200 C DO 180 M = KP1, LA H = 0.0 ORT(M) = 0.0 SCALE = 0.0 C ********** SCALE COLUMN (ALGOL TOL THEN NOT NEEDED) ********** DO 90 I = M, IGH 90 SCALE = SCALE + ABS(A(I,M-1)) C IF (SCALE .EQ. 0.0) GO TO 180 MP = M + IGH C ********** FOR I=IGH STEP -1 UNTIL M DO -- ********** DO 100 II = M, IGH I = MP - II ORT(I) = A(I,M-1) / SCALE H = H + ORT(I) * ORT(I) 100 CONTINUE C G = -SIGN(SQRT(H),ORT(M)) H = H - ORT(M) * G ORT(M) = ORT(M) - G C ********** FORM (I-(U*UT)/H) * A ********** DO 130 J = M, N F = 0.0 C ********** FOR I=IGH STEP -1 UNTIL M DO -- ********** DO 110 II = M, IGH I = MP - II F = F + ORT(I) * A(I,J) 110 CONTINUE C F = F / H C DO 120 I = M, IGH 120 A(I,J) = A(I,J) - F * ORT(I) C 130 CONTINUE C ********** FORM (I-(U*UT)/H)*A*(I-(U*UT)/H) ********** DO 160 I = 1, IGH F = 0.0 C ********** FOR J=IGH STEP -1 UNTIL M DO -- ********** DO 140 JJ = M, IGH J = MP - JJ F = F + ORT(J) * A(I,J) 140 CONTINUE C F = F / H C DO 150 J = M, IGH 150 A(I,J) = A(I,J) - F * ORT(J) C 160 CONTINUE C ORT(M) = SCALE * ORT(M) A(M,M-1) = SCALE * G 180 CONTINUE C 200 RETURN C ********** LAST CARD OF ORTHE ********** END PyBDSF-1.10.1/src/port3/ortra.f000066400000000000000000000051431420247104600157600ustar00rootroot00000000000000 SUBROUTINE ORTRA(NM,N,LOW,IGH,A,ORT,Z) C INTEGER I,J,N,KL,MM,MP,NM,IGH,LOW,MP1 REAL A(NM,IGH),ORT(IGH),Z(NM,N) REAL G C C THIS IS THE EISPACK ROUTINE, ORTRAN, PUT INTO PORT C AUGUST 18, 1976. C C THE NAME CHANGE IS DUE TO THE PORT CONVENTION THAT ALL DOUBLE C PRECISION NAMES HAVE A D PUT IN FRONT OF THE SINGLE- C PRECISION ONES, WHICH THEREFORE CAN HAVE ONLY 5 CHARACTERS. C C THIS SUBROUTINE IS A TRANSLATION OF THE ALGOL PROCEDURE ORTRANS, C NUM. MATH. 16, 181-204(1970) BY PETERS AND WILKINSON. C HANDBOOK FOR AUTO. COMP., VOL.II-LINEAR ALGEBRA, 372-395(1971). C C THIS SUBROUTINE ACCUMULATES THE ORTHOGONAL SIMILARITY C TRANSFORMATIONS USED IN THE REDUCTION OF A REAL GENERAL C MATRIX TO UPPER HESSENBERG FORM BY ORTHE. C C ON INPUT- C C NM MUST BE SET TO THE ROW DIMENSION OF TWO-DIMENSIONAL C ARRAY PARAMETERS AS DECLARED IN THE CALLING PROGRAM C DIMENSION STATEMENT, C C N IS THE ORDER OF THE MATRIX, C C LOW AND IGH ARE INTEGERS DETERMINED BY THE BALANCING C SUBROUTINE BALANC. IF BALANC HAS NOT BEEN USED, C SET LOW=1, IGH=N, C C A CONTAINS INFORMATION ABOUT THE ORTHOGONAL TRANS- C FORMATIONS USED IN THE REDUCTION BY ORTHE C IN ITS STRICT LOWER TRIANGLE, C C ORT CONTAINS FURTHER INFORMATION ABOUT THE TRANS- C FORMATIONS USED IN THE REDUCTION BY ORTHE. C ONLY ELEMENTS LOW THROUGH IGH ARE USED. C C ON OUTPUT- C C Z CONTAINS THE TRANSFORMATION MATRIX PRODUCED IN THE C REDUCTION BY ORTHE, C C ORT HAS BEEN ALTERED. C C ------------------------------------------------------------------ C C ********** INITIALIZE Z TO IDENTITY MATRIX ********** DO 80 I = 1, N C DO 60 J = 1, N 60 Z(I,J) = 0.0 C Z(I,I) = 1.0 80 CONTINUE C KL = IGH - LOW - 1 IF (KL .LT. 1) GO TO 200 C ********** FOR MP=IGH-1 STEP -1 UNTIL LOW+1 DO -- ********** DO 140 MM = 1, KL MP = IGH - MM IF (A(MP,MP-1) .EQ. 0.0) GO TO 140 MP1 = MP + 1 C DO 100 I = MP1, IGH 100 ORT(I) = A(I,MP-1) C DO 130 J = MP, IGH G = 0.0 C DO 110 I = MP, IGH 110 G = G + ORT(I) * Z(I,J) C ********** DIVISOR BELOW IS NEGATIVE OF H FORMED IN ORTHE. C DOUBLE DIVISION AVOIDS POSSIBLE UNDERFLOW ********** G = (G / ORT(MP)) / A(MP,MP-1) C DO 120 I = MP, IGH 120 Z(I,J) = Z(I,J) + G * ORT(I) C 130 CONTINUE C 140 CONTINUE C 200 RETURN C ********** LAST CARD OF ORTRA ********** END PyBDSF-1.10.1/src/port3/parck.f000066400000000000000000000273221420247104600157340ustar00rootroot00000000000000 SUBROUTINE PARCK(ALG, D, IV, LIV, LV, N, V) C C *** CHECK ***SOL (VERSION 2.3) PARAMETERS, PRINT CHANGED VALUES *** C C *** ALG = 1 FOR REGRESSION, ALG = 2 FOR GENERAL UNCONSTRAINED OPT. C INTEGER ALG, LIV, LV, N INTEGER IV(LIV) REAL D(N), V(LV) C REAL R7MDC EXTERNAL IVSET, R7MDC, V7CPY, V7DFL C IVSET -- SUPPLIES DEFAULT VALUES TO BOTH IV AND V. C R7MDC -- RETURNS MACHINE-DEPENDENT CONSTANTS. C V7CPY -- COPIES ONE VECTOR TO ANOTHER. C V7DFL -- SUPPLIES DEFAULT PARAMETER VALUES TO V ALONE. C C *** LOCAL VARIABLES *** C INTEGER ALG1, I, II, IV1, J, K, L, M, MIV1, MIV2, NDFALT, PARSV1, 1 PU INTEGER IJMP, JLIM(4), MINIV(4), NDFLT(4) C/6S C INTEGER VARNM(2), SH(2) C REAL CNGD(3), DFLT(3), VN(2,34), WHICH(3) C/7S CHARACTER*1 VARNM(2), SH(2) CHARACTER*4 CNGD(3), DFLT(3), VN(2,34), WHICH(3) C/ REAL BIG, MACHEP, TINY, VK, VM(34), VX(34), ZERO C C *** IV AND V SUBSCRIPTS *** C INTEGER ALGSAV, DINIT, DTYPE, DTYPE0, EPSLON, INITS, IVNEED, 1 LASTIV, LASTV, LMAT, NEXTIV, NEXTV, NVDFLT, OLDN, 2 PARPRT, PARSAV, PERM, PRUNIT, VNEED C C C/6 C DATA ALGSAV/51/, DINIT/38/, DTYPE/16/, DTYPE0/54/, EPSLON/19/, C 1 INITS/25/, IVNEED/3/, LASTIV/44/, LASTV/45/, LMAT/42/, C 2 NEXTIV/46/, NEXTV/47/, NVDFLT/50/, OLDN/38/, PARPRT/20/, C 3 PARSAV/49/, PERM/58/, PRUNIT/21/, VNEED/4/ C/7 PARAMETER (ALGSAV=51, DINIT=38, DTYPE=16, DTYPE0=54, EPSLON=19, 1 INITS=25, IVNEED=3, LASTIV=44, LASTV=45, LMAT=42, 2 NEXTIV=46, NEXTV=47, NVDFLT=50, OLDN=38, PARPRT=20, 3 PARSAV=49, PERM=58, PRUNIT=21, VNEED=4) SAVE BIG, MACHEP, TINY C/ C DATA BIG/0.E+0/, MACHEP/-1.E+0/, TINY/1.E+0/, ZERO/0.E+0/ C/6S C DATA VN(1,1),VN(2,1)/4HEPSL,4HON../ C DATA VN(1,2),VN(2,2)/4HPHMN,4HFC../ C DATA VN(1,3),VN(2,3)/4HPHMX,4HFC../ C DATA VN(1,4),VN(2,4)/4HDECF,4HAC../ C DATA VN(1,5),VN(2,5)/4HINCF,4HAC../ C DATA VN(1,6),VN(2,6)/4HRDFC,4HMN../ C DATA VN(1,7),VN(2,7)/4HRDFC,4HMX../ C DATA VN(1,8),VN(2,8)/4HTUNE,4HR1../ C DATA VN(1,9),VN(2,9)/4HTUNE,4HR2../ C DATA VN(1,10),VN(2,10)/4HTUNE,4HR3../ C DATA VN(1,11),VN(2,11)/4HTUNE,4HR4../ C DATA VN(1,12),VN(2,12)/4HTUNE,4HR5../ C DATA VN(1,13),VN(2,13)/4HAFCT,4HOL../ C DATA VN(1,14),VN(2,14)/4HRFCT,4HOL../ C DATA VN(1,15),VN(2,15)/4HXCTO,4HL.../ C DATA VN(1,16),VN(2,16)/4HXFTO,4HL.../ C DATA VN(1,17),VN(2,17)/4HLMAX,4H0.../ C DATA VN(1,18),VN(2,18)/4HLMAX,4HS.../ C DATA VN(1,19),VN(2,19)/4HSCTO,4HL.../ C DATA VN(1,20),VN(2,20)/4HDINI,4HT.../ C DATA VN(1,21),VN(2,21)/4HDTIN,4HIT../ C DATA VN(1,22),VN(2,22)/4HD0IN,4HIT../ C DATA VN(1,23),VN(2,23)/4HDFAC,4H..../ C DATA VN(1,24),VN(2,24)/4HDLTF,4HDC../ C DATA VN(1,25),VN(2,25)/4HDLTF,4HDJ../ C DATA VN(1,26),VN(2,26)/4HDELT,4HA0../ C DATA VN(1,27),VN(2,27)/4HFUZZ,4H..../ C DATA VN(1,28),VN(2,28)/4HRLIM,4HIT../ C DATA VN(1,29),VN(2,29)/4HCOSM,4HIN../ C DATA VN(1,30),VN(2,30)/4HHUBE,4HRC../ C DATA VN(1,31),VN(2,31)/4HRSPT,4HOL../ C DATA VN(1,32),VN(2,32)/4HSIGM,4HIN../ C DATA VN(1,33),VN(2,33)/4HETA0,4H..../ C DATA VN(1,34),VN(2,34)/4HBIAS,4H..../ C/7S DATA VN(1,1),VN(2,1)/'EPSL','ON..'/ DATA VN(1,2),VN(2,2)/'PHMN','FC..'/ DATA VN(1,3),VN(2,3)/'PHMX','FC..'/ DATA VN(1,4),VN(2,4)/'DECF','AC..'/ DATA VN(1,5),VN(2,5)/'INCF','AC..'/ DATA VN(1,6),VN(2,6)/'RDFC','MN..'/ DATA VN(1,7),VN(2,7)/'RDFC','MX..'/ DATA VN(1,8),VN(2,8)/'TUNE','R1..'/ DATA VN(1,9),VN(2,9)/'TUNE','R2..'/ DATA VN(1,10),VN(2,10)/'TUNE','R3..'/ DATA VN(1,11),VN(2,11)/'TUNE','R4..'/ DATA VN(1,12),VN(2,12)/'TUNE','R5..'/ DATA VN(1,13),VN(2,13)/'AFCT','OL..'/ DATA VN(1,14),VN(2,14)/'RFCT','OL..'/ DATA VN(1,15),VN(2,15)/'XCTO','L...'/ DATA VN(1,16),VN(2,16)/'XFTO','L...'/ DATA VN(1,17),VN(2,17)/'LMAX','0...'/ DATA VN(1,18),VN(2,18)/'LMAX','S...'/ DATA VN(1,19),VN(2,19)/'SCTO','L...'/ DATA VN(1,20),VN(2,20)/'DINI','T...'/ DATA VN(1,21),VN(2,21)/'DTIN','IT..'/ DATA VN(1,22),VN(2,22)/'D0IN','IT..'/ DATA VN(1,23),VN(2,23)/'DFAC','....'/ DATA VN(1,24),VN(2,24)/'DLTF','DC..'/ DATA VN(1,25),VN(2,25)/'DLTF','DJ..'/ DATA VN(1,26),VN(2,26)/'DELT','A0..'/ DATA VN(1,27),VN(2,27)/'FUZZ','....'/ DATA VN(1,28),VN(2,28)/'RLIM','IT..'/ DATA VN(1,29),VN(2,29)/'COSM','IN..'/ DATA VN(1,30),VN(2,30)/'HUBE','RC..'/ DATA VN(1,31),VN(2,31)/'RSPT','OL..'/ DATA VN(1,32),VN(2,32)/'SIGM','IN..'/ DATA VN(1,33),VN(2,33)/'ETA0','....'/ DATA VN(1,34),VN(2,34)/'BIAS','....'/ C/ C DATA VM(1)/1.0E-3/, VM(2)/-0.99E+0/, VM(3)/1.0E-3/, VM(4)/1.0E-2/, 1 VM(5)/1.2E+0/, VM(6)/1.E-2/, VM(7)/1.2E+0/, VM(8)/0.E+0/, 2 VM(9)/0.E+0/, VM(10)/1.E-3/, VM(11)/-1.E+0/, VM(13)/0.E+0/, 3 VM(15)/0.E+0/, VM(16)/0.E+0/, VM(19)/0.E+0/, VM(20)/-10.E+0/, 4 VM(21)/0.E+0/, VM(22)/0.E+0/, VM(23)/0.E+0/, VM(27)/1.01E+0/, 5 VM(28)/1.E+10/, VM(30)/0.E+0/, VM(31)/0.E+0/, VM(32)/0.E+0/, 6 VM(34)/0.E+0/ DATA VX(1)/0.9E+0/, VX(2)/-1.E-3/, VX(3)/1.E+1/, VX(4)/0.8E+0/, 1 VX(5)/1.E+2/, VX(6)/0.8E+0/, VX(7)/1.E+2/, VX(8)/0.5E+0/, 2 VX(9)/0.5E+0/, VX(10)/1.E+0/, VX(11)/1.E+0/, VX(14)/0.1E+0/, 3 VX(15)/1.E+0/, VX(16)/1.E+0/, VX(19)/1.E+0/, VX(23)/1.E+0/, 4 VX(24)/1.E+0/, VX(25)/1.E+0/, VX(26)/1.E+0/, VX(27)/1.E+10/, 5 VX(29)/1.E+0/, VX(31)/1.E+0/, VX(32)/1.E+0/, VX(33)/1.E+0/, 6 VX(34)/1.E+0/ C C/6S C DATA VARNM(1)/1HP/, VARNM(2)/1HP/, SH(1)/1HS/, SH(2)/1HH/ C DATA CNGD(1),CNGD(2),CNGD(3)/4H---C,4HHANG,4HED V/, C 1 DFLT(1),DFLT(2),DFLT(3)/4HNOND,4HEFAU,4HLT V/ C/7S DATA VARNM(1)/'P'/, VARNM(2)/'P'/, SH(1)/'S'/, SH(2)/'H'/ DATA CNGD(1),CNGD(2),CNGD(3)/'---C','HANG','ED V'/, 1 DFLT(1),DFLT(2),DFLT(3)/'NOND','EFAU','LT V'/ C/ DATA IJMP/33/, JLIM(1)/0/, JLIM(2)/24/, JLIM(3)/0/, JLIM(4)/24/, 1 NDFLT(1)/32/, NDFLT(2)/25/, NDFLT(3)/32/, NDFLT(4)/25/ DATA MINIV(1)/82/, MINIV(2)/59/, MINIV(3)/103/, MINIV(4)/103/ C C............................... BODY ................................ C PU = 0 IF (PRUNIT .LE. LIV) PU = IV(PRUNIT) IF (ALGSAV .GT. LIV) GO TO 20 IF (ALG .EQ. IV(ALGSAV)) GO TO 20 IF (PU .NE. 0) WRITE(PU,10) ALG, IV(ALGSAV) 10 FORMAT(/40H THE FIRST PARAMETER TO IVSET SHOULD BE,I3, 1 12H RATHER THAN,I3) IV(1) = 67 GO TO 999 20 IF (ALG .LT. 1 .OR. ALG .GT. 4) GO TO 340 MIV1 = MINIV(ALG) IF (IV(1) .EQ. 15) GO TO 360 ALG1 = MOD(ALG-1,2) + 1 IF (IV(1) .EQ. 0) CALL IVSET(ALG, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .NE. 13 .AND. IV1 .NE. 12) GO TO 30 IF (PERM .LE. LIV) MIV1 = MAX0(MIV1, IV(PERM) - 1) IF (IVNEED .LE. LIV) MIV2 = MIV1 + MAX0(IV(IVNEED), 0) IF (LASTIV .LE. LIV) IV(LASTIV) = MIV2 IF (LIV .LT. MIV1) GO TO 300 IV(IVNEED) = 0 IV(LASTV) = MAX0(IV(VNEED), 0) + IV(LMAT) - 1 IV(VNEED) = 0 IF (LIV .LT. MIV2) GO TO 300 IF (LV .LT. IV(LASTV)) GO TO 320 30 IF (IV1 .LT. 12 .OR. IV1 .GT. 14) GO TO 60 IF (N .GE. 1) GO TO 50 IV(1) = 81 IF (PU .EQ. 0) GO TO 999 WRITE(PU,40) VARNM(ALG1), N 40 FORMAT(/8H /// BAD,A1,2H =,I5) GO TO 999 50 IF (IV1 .NE. 14) IV(NEXTIV) = IV(PERM) IF (IV1 .NE. 14) IV(NEXTV) = IV(LMAT) IF (IV1 .EQ. 13) GO TO 999 K = IV(PARSAV) - EPSLON CALL V7DFL(ALG1, LV-K, V(K+1)) IV(DTYPE0) = 2 - ALG1 IV(OLDN) = N WHICH(1) = DFLT(1) WHICH(2) = DFLT(2) WHICH(3) = DFLT(3) GO TO 110 60 IF (N .EQ. IV(OLDN)) GO TO 80 IV(1) = 17 IF (PU .EQ. 0) GO TO 999 WRITE(PU,70) VARNM(ALG1), IV(OLDN), N 70 FORMAT(/5H /// ,1A1,14H CHANGED FROM ,I5,4H TO ,I5) GO TO 999 C 80 IF (IV1 .LE. 11 .AND. IV1 .GE. 1) GO TO 100 IV(1) = 80 IF (PU .NE. 0) WRITE(PU,90) IV1 90 FORMAT(/13H /// IV(1) =,I5,28H SHOULD BE BETWEEN 0 AND 14.) GO TO 999 C 100 WHICH(1) = CNGD(1) WHICH(2) = CNGD(2) WHICH(3) = CNGD(3) C 110 IF (IV1 .EQ. 14) IV1 = 12 IF (BIG .GT. TINY) GO TO 120 TINY = R7MDC(1) MACHEP = R7MDC(3) BIG = R7MDC(6) VM(12) = MACHEP VX(12) = BIG VX(13) = BIG VM(14) = MACHEP VM(17) = TINY VX(17) = BIG VM(18) = TINY VX(18) = BIG VX(20) = BIG VX(21) = BIG VX(22) = BIG VM(24) = MACHEP VM(25) = MACHEP VM(26) = MACHEP VX(28) = R7MDC(5) VM(29) = MACHEP VX(30) = BIG VM(33) = MACHEP 120 M = 0 I = 1 J = JLIM(ALG1) K = EPSLON NDFALT = NDFLT(ALG1) DO 150 L = 1, NDFALT VK = V(K) IF (VK .GE. VM(I) .AND. VK .LE. VX(I)) GO TO 140 M = K IF (PU .NE. 0) WRITE(PU,130) VN(1,I), VN(2,I), K, VK, 1 VM(I), VX(I) 130 FORMAT(/6H /// ,2A4,5H.. V(,I2,3H) =,E11.3,7H SHOULD, 1 11H BE BETWEEN,E11.3,4H AND,E11.3) 140 K = K + 1 I = I + 1 IF (I .EQ. J) I = IJMP 150 CONTINUE C IF (IV(NVDFLT) .EQ. NDFALT) GO TO 170 IV(1) = 51 IF (PU .EQ. 0) GO TO 999 WRITE(PU,160) IV(NVDFLT), NDFALT 160 FORMAT(/13H IV(NVDFLT) =,I5,13H RATHER THAN ,I5) GO TO 999 170 IF ((IV(DTYPE) .GT. 0 .OR. V(DINIT) .GT. ZERO) .AND. IV1 .EQ. 12) 1 GO TO 200 DO 190 I = 1, N IF (D(I) .GT. ZERO) GO TO 190 M = 18 IF (PU .NE. 0) WRITE(PU,180) I, D(I) 180 FORMAT(/8H /// D(,I3,3H) =,E11.3,19H SHOULD BE POSITIVE) 190 CONTINUE 200 IF (M .EQ. 0) GO TO 210 IV(1) = M GO TO 999 C 210 IF (PU .EQ. 0 .OR. IV(PARPRT) .EQ. 0) GO TO 999 IF (IV1 .NE. 12 .OR. IV(INITS) .EQ. ALG1-1) GO TO 230 M = 1 WRITE(PU,220) SH(ALG1), IV(INITS) 220 FORMAT(/22H NONDEFAULT VALUES..../5H INIT,A1,14H..... IV(25) =, 1 I3) 230 IF (IV(DTYPE) .EQ. IV(DTYPE0)) GO TO 250 IF (M .EQ. 0) WRITE(PU,260) WHICH M = 1 WRITE(PU,240) IV(DTYPE) 240 FORMAT(20H DTYPE..... IV(16) =,I3) 250 I = 1 J = JLIM(ALG1) K = EPSLON L = IV(PARSAV) NDFALT = NDFLT(ALG1) DO 290 II = 1, NDFALT IF (V(K) .EQ. V(L)) GO TO 280 IF (M .EQ. 0) WRITE(PU,260) WHICH 260 FORMAT(/1H ,3A4,9HALUES..../) M = 1 WRITE(PU,270) VN(1,I), VN(2,I), K, V(K) 270 FORMAT(1X,2A4,5H.. V(,I2,3H) =,E15.7) 280 K = K + 1 L = L + 1 I = I + 1 IF (I .EQ. J) I = IJMP 290 CONTINUE C IV(DTYPE0) = IV(DTYPE) PARSV1 = IV(PARSAV) CALL V7CPY(IV(NVDFLT), V(PARSV1), V(EPSLON)) GO TO 999 C 300 IV(1) = 15 IF (PU .EQ. 0) GO TO 999 WRITE(PU,310) LIV, MIV2 310 FORMAT(/10H /// LIV =,I5,17H MUST BE AT LEAST,I5) IF (LIV .LT. MIV1) GO TO 999 IF (LV .LT. IV(LASTV)) GO TO 320 GO TO 999 C 320 IV(1) = 16 IF (PU .NE. 0) WRITE(PU,330) LV, IV(LASTV) 330 FORMAT(/9H /// LV =,I5,17H MUST BE AT LEAST,I5) GO TO 999 C 340 IV(1) = 67 IF (PU .NE. 0) WRITE(PU,350) ALG 350 FORMAT(/10H /// ALG =,I5,21H MUST BE 1 2, 3, OR 4) GO TO 999 360 IF (PU .NE. 0) WRITE(PU,370) LIV, MIV1 370 FORMAT(/10H /// LIV =,I5,17H MUST BE AT LEAST,I5, 1 37H TO COMPUTE TRUE MIN. LIV AND MIN. LV) IF (LASTIV .LE. LIV) IV(LASTIV) = MIV1 IF (LASTV .LE. LIV) IV(LASTV) = 0 C 999 RETURN C *** LAST LINE OF PARCK FOLLOWS *** END PyBDSF-1.10.1/src/port3/postx1.f000066400000000000000000000060361420247104600160710ustar00rootroot00000000000000c main program common /cstak/ ds double precision ds(1000) external handle, bc, af, postd integer ndx, k, is(1000), nu, nv, nmesh real errpar(2), u(100), v(1), mesh(100), dt, rs(1000) real ws(1000), tstop logical ls(1000) complex cs(500) equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test post on c u sub t = u sub xx + f on (0,1) c where f is chosen so that the solution is c u(x,t) = exp(xt). c the port library stack and its aliases. c initialize the port library stack length. call istkin(1000, 4) nu = 1 nv = 0 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstop = 1 dt = 1e-2 k = 4 c ndx uniform mesh points on (0,1). ndx = 4 call umb(0e0, 1e0, ndx, k, mesh, nmesh) c initial conditions for u. call setr(nmesh-k, 1e0, u) call post(u, nu, k, mesh, nmesh, v, nv, 0e0, tstop, dt, af, bc, 1 postd, errpar, handle) c check for errors and stack usage statistics. call wrapup stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nx integer nv real t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx(nx, nu) real v(1), vt(1), a(nx, nu), au(nx, nu, nu), aux(nx, nu, nu), aut( 1 nx, nu, nu) real autx(nx, nu, nu), av(1), avt(1), f(nx, nu), fu(nx, nu, nu), 1 fux(nx, nu, nu) real fut(nx, nu, nu), futx(nx, nu, nu), fv(1), fvt(1) integer i real exp do 1 i = 1, nx a(i, 1) = -ux(i, 1) aux(i, 1, 1) = -1 f(i, 1) = (x(i)-t**2)*exp(x(i)*t)-ut(i, 1) fut(i, 1, 1) = -1 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu integer nv real t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) real utx(nu, 2), v(1), vt(1), b(nu, 2), bu(nu, nu, 2), bux(nu, nu, 1 2) real but(nu, nu, 2), butx(nu, nu, 2), bv(1), bvt(1) real exp b(1, 1) = u(1, 1)-1. b(1, 2) = u(1, 2)-exp(t) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nx integer nv, k real t0, u0(nxmk, nu), v0(1), t, u(nxmk, nu), v(1) real x(nx), dt, tstop common /time/ tt real tt external uofx integer i1mach real eu, eesff integer temp c output and checking routine. if (t0 .eq. t) return c uofx needs time. tt = t eu = eesff(k, x, nx, u, uofx) temp = i1mach(2) write (temp, 1) t, eu 1 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2) return end subroutine uofx(x, nx, u, w) integer nx real x(nx), u(nx), w(nx) common /time/ t real t integer i real exp do 1 i = 1, nx u(i) = exp(x(i)*t) 1 continue return end PyBDSF-1.10.1/src/port3/postx10.f000066400000000000000000000105571420247104600161540ustar00rootroot00000000000000c main program common /cstak/ ds double precision ds(2000) external handle, bc, af, postd integer ndx, nxh, i, k, is(1000), nu integer nv, nx, i1mach real abs, err, errpar(2), u(100), v(1), x(100) real amax1, dt, ue(100), eebsf, uh(100), xh(100) real rs(1000), ws(1000), tstop logical ls(1000) complex cs(500) integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to estimate x and t error as sum. c u sub t = u sub xx + f on (0,1) c where f is chosen so that the solution is c u(x,t) = exp(xt). c the port library stack and its aliases. c initialize the port library stack length. call istkin(2000, 4) nu = 1 nv = 0 errpar(1) = 0 errpar(2) = 1e-2 k = 4 ndx = 4 tstop = 1 dt = 1e-2 c crude mesh. call umb(0e0, 1e0, ndx, k, x, nx) c initial conditions for u. call setr(nx-k, 1e0, u) temp = i1mach(2) write (temp, 1) 1 format (36h solving on crude mesh using errpar.) call post(u, nu, k, x, nx, v, nv, 0e0, tstop, dt, af, bc, postd, 1 errpar, handle) c get run-time statistics. call postx c halve the mesh spacing. call umb(0e0, 1e0, 2*ndx-1, k, xh, nxh) c initial conditions for uh. call setr(nxh-k, 1e0, uh) dt = 1e-2 temp = i1mach(2) write (temp, 2) 2 format (38h solving on refined mesh using errpar.) call post(uh, nu, k, xh, nxh, v, nv, 0e0, tstop, dt, af, bc, 1 postd, errpar, handle) c get run-time statistics. call postx c estimate u error. err = eebsf(k, x, nx, u, xh, nxh, uh) write (6, 3) err 3 format (24h u error from u and uh =, 1pe10.2) c initial conditions for ue. call setr(nx-k, 1e0, ue) dt = 1e-2 errpar(1) = errpar(1)/10. errpar(2) = errpar(2)/10. temp = i1mach(2) write (temp, 4) 4 format (39h solving on crude mesh using errpar/10.) call post(ue, nu, k, x, nx, v, nv, 0e0, tstop, dt, af, bc, postd 1 , errpar, handle) c get run-time statistics. call postx err = 0 temp = nx-k do 5 i = 1, temp err = amax1(err, abs(u(i)-ue(i))) 5 continue write (6, 6) err 6 format (24h u error from u and ue =, 1pe10.2) stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nx integer nv real t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx(nx, nu) real v(1), vt(1), a(nx, nu), au(nx, nu, nu), aux(nx, nu, nu), aut( 1 nx, nu, nu) real autx(nx, nu, nu), av(1), avt(1), f(nx, nu), fu(nx, nu, nu), 1 fux(nx, nu, nu) real fut(nx, nu, nu), futx(nx, nu, nu), fv(1), fvt(1) integer i real exp do 1 i = 1, nx a(i, 1) = -ux(i, 1) aux(i, 1, 1) = -1 f(i, 1) = (x(i)-t**2)*exp(x(i)*t)-ut(i, 1) fut(i, 1, 1) = -1 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu integer nv real t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) real utx(nu, 2), v(1), vt(1), b(nu, 2), bu(nu, nu, 2), bux(nu, nu, 1 2) real but(nu, nu, 2), butx(nu, nu, 2), bv(1), bvt(1) real exp b(1, 1) = u(1, 1)-1. b(1, 2) = u(1, 2)-exp(t) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nx integer nv, k real t0, u0(nxmk, nu), v0(1), t, u(nxmk, nu), v(1) real x(nx), dt, tstop common /time/ tt real tt external uofx integer i1mach real eu, eesff integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 tt = t eu = eesff(k, x, nx, u, uofx) temp = i1mach(2) write (temp, 3) t, eu 3 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2) return end subroutine uofx(x, nx, u, w) integer nx real x(nx), u(nx), w(nx) common /time/ t real t integer i real exp do 1 i = 1, nx u(i) = exp(x(i)*t) 1 continue return end PyBDSF-1.10.1/src/port3/postx2.f000066400000000000000000000073051420247104600160720ustar00rootroot00000000000000c main program common /cstak/ ds double precision ds(1100) external handle, bc, af, postd integer ndx, k, is(1000), nu, nv, nmesh real errpar(2), u(200), v(1), mesh(100), dt, rs(1000) real ws(1000), tstop logical ls(1000) complex cs(500) integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test post on c u sub t = u sub xx + f on (0,1) c by setting u1 = u and u2 = u1 sub x and solving c u1 sub t = u1 sub xx + f c on (0,1) c u1 sub x = u2 c where f is chosen so that the solution is c u(x,t) = exp(xt). c the port library stack and its aliases. c initialize the port library stack length. call istkin(1100, 4) nu = 2 nv = 0 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstop = 1 dt = 1e-2 k = 4 c ndx uniform mesh points on (0,1). ndx = 4 call umb(0e0, 1e0, ndx, k, mesh, nmesh) c initial conditions for u1. call setr(nmesh-k, 1e0, u) c initial conditions for u2. temp = nmesh-k call setr(nmesh-k, 0e0, u(temp+1)) call post(u, nu, k, mesh, nmesh, v, nv, 0e0, tstop, dt, af, bc, 1 postd, errpar, handle) c check for errors and stack usage statistics. call wrapup stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nx integer nv real t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx(nx, nu) real v(1), vt(1), a(nx, nu), au(nx, nu, nu), aux(nx, nu, nu), aut( 1 nx, nu, nu) real autx(nx, nu, nu), av(1), avt(1), f(nx, nu), fu(nx, nu, nu), 1 fux(nx, nu, nu) real fut(nx, nu, nu), futx(nx, nu, nu), fv(1), fvt(1) integer i real exp do 1 i = 1, nx a(i, 1) = -u(i, 2) au(i, 1, 2) = -1 f(i, 1) = (x(i)-t**2)*exp(x(i)*t)-ut(i, 1) fut(i, 1, 1) = -1 a(i, 2) = u(i, 1) au(i, 2, 1) = 1 f(i, 2) = u(i, 2) fu(i, 2, 2) = 1 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu integer nv real t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) real utx(nu, 2), v(1), vt(1), b(nu, 2), bu(nu, nu, 2), bux(nu, nu, 1 2) real but(nu, nu, 2), butx(nu, nu, 2), bv(1), bvt(1) real exp b(1, 1) = u(1, 1)-1. b(1, 2) = u(1, 2)-exp(t) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nx integer nv, k real t0, u0(nxmk, nu), v0(1), t, u(nxmk, nu), v(1) real x(nx), dt, tstop common /time/ tt real tt external u1ofx, u2ofx integer i1mach real eu(2), eesff integer temp c output and checking routine. if (t0 .eq. t) return c u1ofx and u2ofx need time. tt = t eu(1) = eesff(k, x, nx, u, u1ofx) eu(2) = eesff(k, x, nx, u(1, 2), u2ofx) temp = i1mach(2) write (temp, 1) t, eu 1 format (14h error in u(x,, 1pe10.2, 4h ) =, 2(1pe10.2)) return end subroutine u1ofx(x, nx, u, w) integer nx real x(nx), u(nx), w(nx) common /time/ t real t integer i real exp do 1 i = 1, nx u(i) = exp(x(i)*t) 1 continue return end subroutine u2ofx(x, nx, u, w) integer nx real x(nx), u(nx), w(nx) common /time/ t real t integer i real exp do 1 i = 1, nx u(i) = t*exp(x(i)*t) 1 continue return end PyBDSF-1.10.1/src/port3/postx3.f000066400000000000000000000103171420247104600160700ustar00rootroot00000000000000c main program common /cstak/ ds double precision ds(2000) external dee, handle, bc, af integer ndx, k, is(1000), nu, nv, nmesh real errpar(2), u(100), v(1), mesh(100), dt, rs(1000) real ws(1000), tstop logical ls(1000) complex cs(500) equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test post on c u sub t = u sub xx + v + f on (0,1) c v sub t = u( 1/2, t ) c where f is chosen so that the solution is c u(x,t) = cos(xt) and v(t) = 2 sin(t/2). c the port library stack and its aliases. c initialize the port library stack length. call istkin(2000, 4) nu = 1 nv = 1 errpar(1) = 1e-2 c essentially relative error. errpar(2) = 1e-6 tstop = 1 dt = 1e-6 k = 4 ndx = 4 c ndx uniform mesh points on (0,1). call umb(0e0, 1e0, ndx, k, mesh, nmesh) c initial conditions for u. call setr(nmesh-k, 1e0, u) c initial value for v. v(1) = 0 call post(u, nu, k, mesh, nmesh, v, nv, 0e0, tstop, dt, af, bc, 1 dee, errpar, handle) c check for errors and stack usage statistics. call wrapup stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx real t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx(nx, nu) real v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, nu, nu), 1 aut(nx, nu, nu) real autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv), f(nx, nu), 1 fu(nx, nu, nu), fux(nx, nu, nu) real fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv), fvt(nx, 1 nu, nv) integer i real cos, sin do 1 i = 1, nx a(i, 1) = -ux(i, 1) aux(i, 1, 1) = -1 f(i, 1) = v(1)-ut(i, 1)-x(i)*sin(x(i)*t)+t**2*cos(x(i)*t)-2.* 1 sin(t/2.) fut(i, 1, 1) = -1 fv(i, 1, 1) = 1 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv real t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) real utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2), bux(nu, 1 nu, 2) real but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), bvt(nu, nv, 2 1 ) real cos b(1, 1) = u(1, 1)-1. b(1, 2) = u(1, 2)-cos(t) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k real t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt(nv) real d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv(nv, nv), dvt( 1 nv, nv) integer intrvr, i, ileft real xi(1), basis(10) integer temp xi(1) = 0.5e0 c find 0.5 in mesh. ileft = intrvr(nx, x, xi(1)) if (k .gt. 10) call seterr( 1 41hdee - k .gt. 10, need more space in basis, 41, 1, 2) c b-spline basis at xi(1). call bspln(k, x, nx, xi, 1, ileft, basis) d(1) = vt(1) dvt(1, 1) = 1 c vt(1) - u(0.5,t) = 0. do 1 i = 1, k temp = ileft+i-k d(1) = d(1)-u(temp, 1)*basis(i) temp = ileft+i-k du(1, temp, 1) = du(1, temp, 1)-basis(i) 1 continue return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k real t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) real x(nx), dt, tstop common /time/ tt real tt external uofx integer i1mach real abs, sin, eu, ev, eesff integer temp c output and checking routine. if (t0 .eq. t) return c uofx needs time. tt = t eu = eesff(k, x, nx, u, uofx) ev = abs(v(1)-2.*sin(t/2.)) temp = i1mach(2) write (temp, 1) t, eu, ev 1 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2, 6h v =, 1p 1 e10.2) return end subroutine uofx(x, nx, u, w) integer nx real x(nx), u(nx), w(nx) common /time/ t real t integer i real cos do 1 i = 1, nx u(i) = cos(x(i)*t) 1 continue return end PyBDSF-1.10.1/src/port3/postx4.f000066400000000000000000000076071420247104600161010ustar00rootroot00000000000000c main program common /cstak/ ds double precision ds(2000) external dee, handle, bc, af integer ndx, k, is(1000), nu, nv, nmesh real errpar(2), u(100), v(1), atan, mesh(100), dt real rs(1000), ws(1000), tstop logical ls(1000) complex cs(500) equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test post on c u sub t = u sub xx - u**3 + f on (-pi,+pi) c subject to periodic boundary conditions, c where f is chosen so that the solution is c u(x,t) = cos(x)*sin(t). c the port library stack and its aliases. c initialize the port library stack length. call istkin(2000, 4) nu = 1 nv = 1 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstop = 8.*atan(1e0) dt = 0.4 c make a mesh of ndx uniform points on (-pi,+pi). k = 4 ndx = 7 call umb((-4.)*atan(1e0), 4.*atan(1e0), ndx, k, mesh, nmesh) c initial conditions for u. call setr(nmesh-k, 0e0, u) c initial conditions for v. v(1) = 0 call post(u, nu, k, mesh, nmesh, v, nv, 0e0, tstop, dt, af, bc, 1 dee, errpar, handle) c check for errors and stack usage statistics. call wrapup stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx real t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx(nx, nu) real v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, nu, nu), 1 aut(nx, nu, nu) real autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv), f(nx, nu), 1 fu(nx, nu, nu), fux(nx, nu, nu) real fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv), fvt(nx, 1 nu, nv) integer i real cos, sin do 1 i = 1, nx a(i, 1) = -ux(i, 1) aux(i, 1, 1) = -1 f(i, 1) = (-ut(i, 1))-u(i, 1)**3+cos(x(i))*(cos(t)+sin(t)+cos(x 1 (i))**2*sin(t)**3) fut(i, 1, 1) = -1 fu(i, 1, 1) = (-3.)*u(i, 1)**2 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv real t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) real utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2), bux(nu, 1 nu, 2) real but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), bvt(nu, nv, 2 1 ) b(1, 1) = ux(1, 1)-v(1) b(1, 2) = ux(1, 2)-v(1) bux(1, 1, 1) = 1 bv(1, 1, 1) = -1 bux(1, 1, 2) = 1 bv(1, 1, 2) = -1 return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k real t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt(nv) real d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv(nv, nv), dvt( 1 nv, nv) integer temp c u(-pi,t) - u(+pi,t) = 0. temp = nx-k d(1) = u(1, 1)-u(temp, 1) du(1, 1, 1) = 1 temp = nx-k du(1, temp, 1) = -1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k real t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) real x(nx), dt, tstop common /time/ tt real tt external uofx integer i1mach real eu, eesff, ev integer temp c output and checking routine. if (t0 .eq. t) return c uofx needs time. tt = t eu = eesff(k, x, nx, u, uofx) ev = v(1) temp = i1mach(2) write (temp, 1) t, eu, ev 1 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2, 6h v =, 1p 1 e10.2) return end subroutine uofx(x, nx, u, w) integer nx real x(nx), u(nx), w(nx) common /time/ t real t integer i real cos, sin do 1 i = 1, nx u(i) = cos(x(i))*sin(t) 1 continue return end PyBDSF-1.10.1/src/port3/postx5.f000066400000000000000000000161651420247104600161010ustar00rootroot00000000000000c main program common /cstak/ ds double precision ds(4000) common /time/ t real t common /param/ vc, x real vc(3), x(3) external dee, handle, uofx, bc, af integer ndx, istkgt, k, immm, iu, is(1000) integer nu, nv, imesh, ilumb, nmesh real errpar(2), tstart, v(3), dt, xb(3), rs(1000) real ws(1000), tstop logical ls(1000) complex cs(500) equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test post on c u sub t = ( k(t,x) * u sub x ) sub x + g on (-1,+2) * (0,+1) c with a moving front x(t) characterized by u(x(t),t) == 1 and c jump across x(t) of k(t,x) u sub x = - 3 * x'(t). c where k(t,x) is piecewise constant, say c 1 for x < x(t) c k(t,x) = c 2 for x > x(t) c and g is chosen so that the solution is c exp(x-x(t)) for x < x(t) c u(x,t) = c exp(x(t)-x) for x > x(t) c and x(1,t) = t. the moving front is tracked c implicitly by forcing u(x(1,t),t) = 1 as a pseudo-rankine-heugoniot re clation. c v(1,2,3) gives the moving mesh. c the port library stack and its aliases. c initialize the port library stack length. call istkin(4000, 4) call enter(1) nu = 1 nv = 3 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstart = 0 tstop = 1 dt = 0.1 k = 4 c ndx uniform mesh points on each interval of xb array. ndx = 6 xb(1) = 0 xb(2) = 1 xb(3) = 2 c get mesh on port stack. imesh = ilumb(xb, 3, ndx, k, nmesh) c make 1 of multiplicity k-1. imesh = immm(imesh, nmesh, 1e0, k-1) x(1) = -1 x(2) = 0 x(3) = 2 c initial values for v. call lplmg(3, x, vc) c get u on the port stack. iu = istkgt(nmesh-k, 3) c uofx needs time. t = tstart c uofx needs v for mapping. call movefr(nv, vc, v) c initial conditions for u. call l2sff(uofx, k, ws(imesh), nmesh, ws(iu)) c output the ics. call handle(t-1., ws(iu), v, t, ws(iu), v, nu, nmesh-k, nv, k, ws( 1 imesh), nmesh, dt, tstop) call post(ws(iu), nu, k, ws(imesh), nmesh, v, nv, tstart, tstop, 1 dt, af, bc, dee, errpar, handle) call leave call wrapup stop end subroutine af(t, xi, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx real t, xi(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx(nx, nu) real v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, nu, nu), 1 aut(nx, nu, nu) real autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv), f(nx, nu), 1 fu(nx, nu, nu), fux(nx, nu, nu) real fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv), fvt(nx, 1 nu, nv) common /postf/ failed logical failed integer i real kay, exp, xxi(99), xtv(99), xvv(99), x(99) real xxiv(99), ax(99), fx(99), xt(99), xv(99) logical temp temp = v(2) .le. v(1) if (.not. temp) temp = v(2) .ge. v(3) if (.not. temp) goto 1 failed = .true. return c map xi into x. 1 call lplm(xi, nx, v, 3, x, xxi, xxiv, xv, xvv, xt, xtv) c map u into x system. call postu(xi, x, xt, xxi, xv, vt, nx, 3, ux, ut, nu, ax, fx) do 7 i = 1, nx if (xi(i) .gt. 1.) goto 2 kay = 1 goto 3 2 kay = 2 3 a(i, 1) = kay*ux(i, 1) aux(i, 1, 1) = kay if (xi(i) .gt. 1.) goto 4 a(i, 1) = a(i, 1)-3.*vt(2) avt(i, 1, 2) = -3 4 f(i, 1) = ut(i, 1) fut(i, 1, 1) = 1 if (xi(i) .gt. 1.) goto 5 f(i, 1) = f(i, 1)+2.*exp(x(i)-t) fx(i) = 2.*exp(x(i)-t) goto 6 5 f(i, 1) = f(i, 1)+exp(t-x(i)) fx(i) = -exp(t-x(i)) 6 continue 7 continue c map a and f into xi system. call posti(xi, x, xt, xxi, xv, xtv, xxiv, xvv, nx, ux, ut, nu, v 1 , vt, nv, 1, 3, a, ax, au, aux, aut, autx, av, avt, f, fx, fu 2 , fux, fut, futx, fv, fvt) return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv real t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) real utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2), bux(nu, 1 nu, 2) real but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), bvt(nu, nv, 2 1 ) real exp b(1, 1) = u(1, 1)-exp((-1.)-t) b(1, 2) = u(1, 2)-exp(t-2.) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k real t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt(nv) real d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv(nv, nv), dvt( 1 nv, nv) integer intrvr, i, ileft real bx(10), xx(1) integer temp d(1) = v(1)+1. c x(0,v) = -1. dv(1, 1) = 1 xx(1) = 1 c find 1 in the mesh. ileft = intrvr(nx, x, xx(1)) c get the b-spline basis at xx. call bspln(k, x, nx, xx, 1, ileft, bx) c u(x(1,v),t) = 1. d(2) = -1 do 1 i = 1, k temp = ileft+i-k d(2) = d(2)+u(temp, 1)*bx(i) temp = ileft+i-k du(2, temp, 1) = bx(i) 1 continue d(3) = v(3)-2. c x(2,v) = +2. dv(3, 3) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k real t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) real x(nx), dt, tstop common /param/ vc, xx real vc(3), xx(3) common /time/ tt real tt external uofx integer i1mach real eu, eesff, ev(3) integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 tt = t c uofx needs v for mapping. call movefr(nv, v, vc) eu = eesff(k, x, nx, u, uofx) ev(1) = v(1)+1. ev(2) = v(2)-t ev(3) = v(3)-2. temp = i1mach(2) write (temp, 3) t, eu, ev 3 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2, 6h v =, 3( 1 1pe10.2)) return end subroutine uofx(xi, nx, u, w) integer nx real xi(nx), u(nx), w(nx) common /cstak/ ds double precision ds(500) common /param/ vc, x real vc(3), x(3) common /time/ t real t integer ixv, ixx, istkgt, i, is(1000) real exp, rs(1000), ws(1000), xofxi logical ls(1000) complex cs(500) integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c the port library stack and its aliases. call enter(1) ixx = istkgt(nx, 3) c space for x and xv. ixv = istkgt(3*nx, 3) c map into user system. call lplmx(xi, nx, vc, 3, ws(ixx), ws(ixv)) do 3 i = 1, nx temp = ixx+i xofxi = ws(temp-1) if (xi(i) .gt. 1.) goto 1 u(i) = exp(xofxi-t) goto 2 1 u(i) = exp(t-xofxi) 2 continue 3 continue call leave return end PyBDSF-1.10.1/src/port3/postx6.f000066400000000000000000000164371420247104600161040ustar00rootroot00000000000000c main program common /cstak/ ds double precision ds(4000) common /time/ t real t common /param/ vc, x real vc(4), x(3) external dee, handle, uofx, bc, af integer ndx, istkgt, k, immm, iu, is(1000) integer nu, nv, imesh, ilumb, nmesh real errpar(2), tstart, v(4), dt, xb(3), rs(1000) real ws(1000), tstop logical ls(1000) complex cs(500) equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test post on the hyperbolic problem c u sub t = - u sub x + g on (-pi,+pi) * (0,pi) c with a moving shock x(t) characterized by c u(x(t)+,t) = 0 and c u(x(t)+,t) - u(x(t)-,t) = x'(t) c where g is chosen so that the solution is c sin(x+t) for x < x(t) c u(x,t) = c cos(x+t) for x > x(t) c with x(t) = pi/2 -t . c v(1,2,3) gives the moving mesh and v(4) is the height of the jump. c the port library stack and its aliases. c initialize the port library stack length. call istkin(4000, 4) call enter(1) nu = 1 nv = 4 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstart = 0 tstop = 3.14 dt = 0.4 k = 4 c ndx uniform mesh points on each interval of xb. ndx = 6 xb(1) = 0 xb(2) = 1 xb(3) = 2 c get mesh on port stack. imesh = ilumb(xb, 3, ndx, k, nmesh) c make 1 of multiplicity k-1. imesh = immm(imesh, nmesh, 1e0, k-1) x(1) = -3.14 x(2) = 3.14/2. x(3) = 3.14 c initial values for v. call lplmg(3, x, vc) c get u on the port stack. iu = istkgt(nmesh-k, 3) c uofx needs time. t = tstart c the initial height of the jump. vc(4) = 1 c uofx needs v for mapping. call movefr(nv, vc, v) c initial conditions for u. call l2sff(uofx, k, ws(imesh), nmesh, ws(iu)) c output ics. call handle(t-1., ws(iu), v, t, ws(iu), v, nu, nmesh-k, nv, k, ws( 1 imesh), nmesh, dt, tstop) call post(ws(iu), nu, k, ws(imesh), nmesh, v, nv, tstart, tstop, 1 dt, af, bc, dee, errpar, handle) call leave call wrapup stop end subroutine af(t, xi, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx real t, xi(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx(nx, nu) real v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, nu, nu), 1 aut(nx, nu, nu) real autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv), f(nx, nu), 1 fu(nx, nu, nu), fux(nx, nu, nu) real fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv), fvt(nx, 1 nu, nv) common /postf/ failed logical failed integer i real cos, sin, xxi(99), xtv(99), xvv(99), x(99) real xxiv(99), ax(99), fx(99), xt(99), xv(99) logical temp temp = v(2) .le. v(1) if (.not. temp) temp = v(2) .ge. v(3) if (.not. temp) goto 1 failed = .true. return c map xi into x. 1 call lplm(xi, nx, v, 3, x, xxi, xxiv, xv, xvv, xt, xtv) c map u into x system. call postu(xi, x, xt, xxi, xv, vt, nx, 3, ux, ut, nu, ax, fx) do 4 i = 1, nx a(i, 1) = -u(i, 1) au(i, 1, 1) = -1 f(i, 1) = ut(i, 1) fut(i, 1, 1) = 1 if (xi(i) .gt. 1.) goto 2 f(i, 1) = f(i, 1)-2.*cos(x(i)+t) fx(i) = 2.*sin(x(i)+t) goto 3 2 f(i, 1) = f(i, 1)-vt(4) fvt(i, 1, 4) = -1 f(i, 1) = f(i, 1)+2.*sin(x(i)+t) fx(i) = 2.*cos(x(i)+t) 3 continue 4 continue c map a and f into xi system. call posti(xi, x, xt, xxi, xv, xtv, xxiv, xvv, nx, ux, ut, nu, v 1 , vt, nv, 1, 3, a, ax, au, aux, aut, autx, av, avt, f, fx, fu 2 , fux, fut, futx, fv, fvt) return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv real t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) real utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2), bux(nu, 1 nu, 2) real but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), bvt(nu, nv, 2 1 ) real sin b(1, 1) = u(1, 1)-sin(t-3.14) c u(-pi,t) = sin(-pi+t). bu(1, 1, 1) = 1 return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k real t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt(nv) real d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv(nv, nv), dvt( 1 nv, nv) integer intrvr, i, ileft real bx(10), xx(1), r1mach integer temp d(1) = v(1)+3.14 c x(0,v) = -pi. dv(1, 1) = 1 c xx(1) = 1 + a rounding error. xx(1) = r1mach(4)+1. ileft = intrvr(nx, x, xx(1)) c get the b-spline basis at xx. call bspln(k, x, nx, xx, 1, ileft, bx) d(2) = -v(4) c u(x(t)+,t) - jump = 0. dv(2, 4) = -1 do 1 i = 1, k temp = ileft+i-k d(2) = d(2)+u(temp, 1)*bx(i) temp = ileft+i-k du(2, temp, 1) = bx(i) 1 continue d(3) = v(3)-3.14 c x(2,v) = +pi. dv(3, 3) = 1 c jump + d( x(1,v(t)) )/dt = 0. d(4) = vt(2)+v(4) dvt(4, 2) = 1 dv(4, 4) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k real t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) real x(nx), dt, tstop common /param/ vc, xx real vc(4), xx(3) common /time/ tt real tt external uofx integer i1mach real eu, eesff, ev(2) integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t, dt 1 format (16h restart for t =, 1pe10.2, 7h dt =, 1pe10.2) return 2 tt = t c uofx needs v for mapping. call movefr(nv, v, vc) eu = eesff(k, x, nx, u, uofx) c error in position of shock. ev(1) = v(2)-(3.14/2.-t) c error in height of shock. ev(2) = v(4)-1. temp = i1mach(2) write (temp, 3) t, eu, ev 3 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2, 6h v =, 2( 1 1pe10.2)) return end subroutine uofx(xi, nx, u, w) integer nx real xi(nx), u(nx), w(nx) common /cstak/ ds double precision ds(500) common /param/ vc, x real vc(4), x(3) common /time/ t real t integer ixv, ixx, istkgt, i, is(1000) real ewe, rs(1000), ws(1000) logical ls(1000) complex cs(500) integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c the port library stack and its aliases. call enter(1) ixx = istkgt(nx, 3) c space for x and xv. ixv = istkgt(3*nx, 3) c map into user system. call lplmx(xi, nx, vc, 3, ws(ixx), ws(ixv)) do 1 i = 1, nx temp = ixx+i u(i) = ewe(t, ws(temp-1), vc(2)) if (xi(i) .gt. 1.) u(i) = u(i)+1. 1 continue call leave return end real function ewe(t, x, xbreak) real t, x, xbreak real cos, sin if (x .ge. xbreak) goto 1 ewe = sin(x+t) return 1 if (x .le. xbreak) goto 2 ewe = cos(x+t) return 2 call seterr(17hewe - x == xbreak, 17, 1, 2) 3 continue 4 stop end PyBDSF-1.10.1/src/port3/postx7.f000066400000000000000000000156471420247104600161070ustar00rootroot00000000000000c main program common /cstak/ ds double precision ds(4000) common /time/ t real t common /param/ vc, x, xi0 real vc(4), x(3), xi0 external dee, handle, uofx, bc, af integer ndx, istkgt, k, immm, iu, is(1000) integer nu, nv, imesh, ilumb, nmesh real errpar(2), tstart, d, v(4), dt, xb(3) real rs(1000), ws(1000), tstop logical ls(1000) complex cs(500) equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test post on c u sub t = u sub xx + f on (20,10**6) c where f is chosen so that the solution is c u(x,t) = exp(-x*t), c and x(1,t) is chosen so that the boundary-layer is tracked c implicitly by forcing u(x(1,t)/2.3/d,t) = 1/e. c this is the same as requiring the exact solution to have c u(x(1,t),t) = 10 ** -d. c v(1,2,3) gives the moving mesh, v(4) is time. c the port library stack and its aliases. c initialize the port library stack length. call istkin(4000, 4) call enter(1) nu = 1 nv = 4 errpar(1) = 1e-2 c mixed relative and absolute error. errpar(2) = 1e-2 d = 3 c w(xi0,t) = 1/e. xi0 = 1./2.3/d tstart = 20 tstop = 1e+6 dt = 1e-2 k = 4 c ndx uniform mesh points on each interval of xb. ndx = 6 xb(1) = 0 xb(2) = 1 xb(3) = 2 c get mesh on port stack. imesh = ilumb(xb, 3, ndx, k, nmesh) c make 1d0 of multiplicity k-1. imesh = immm(imesh, nmesh, 1e0, k-1) x(1) = 0 x(2) = 2.3*d/tstart x(3) = 1 c initial values for v. call lplmg(3, x, vc) c get u on port stack. iu = istkgt(nmesh-k, 3) c uofx needs time. t = tstart vc(4) = tstart c uofx needs v for mapping. call movefr(nv, vc, v) c initial conditions for u. call l2sff(uofx, k, ws(imesh), nmesh, ws(iu)) c output ics. call handle(t-1., ws(iu), v, t, ws(iu), v, nu, nmesh-k, nv, k, ws( 1 imesh), nmesh, dt, tstop) call post(ws(iu), nu, k, ws(imesh), nmesh, v, nv, tstart, tstop, 1 dt, af, bc, dee, errpar, handle) call leave call wrapup stop end subroutine af(t, xi, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx real t, xi(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx(nx, nu) real v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, nu, nu), 1 aut(nx, nu, nu) real autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv), f(nx, nu), 1 fu(nx, nu, nu), fux(nx, nu, nu) real fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv), fvt(nx, 1 nu, nv) common /postf/ failed logical failed integer i real xxi(99), xtv(99), xvv(99), x(99), expl, xxiv(99) real ax(99), fx(99), xt(99), xv(99) logical temp temp = v(2) .le. v(1) if (.not. temp) temp = v(2) .ge. v(3) if (.not. temp) goto 1 failed = .true. return c map xi into x. 1 call lplm(xi, nx, v, 3, x, xxi, xxiv, xv, xvv, xt, xtv) c map u into x system. call postu(xi, x, xt, xxi, xv, vt, nx, 3, ux, ut, nu, ax, fx) do 2 i = 1, nx a(i, 1) = -ux(i, 1) aux(i, 1, 1) = -1 f(i, 1) = (-ut(i, 1))-expl((-x(i))*v(4))*(x(i)+v(4)**2) fut(i, 1, 1) = -1 fv(i, 1, 4) = (-expl((-x(i))*v(4)))*(2.*v(4)+(x(i)+v(4)**2)*(-x 1 (i))) fx(i) = (-expl((-x(i))*v(4)))*(1.-v(4)*x(i)-v(4)**3) 2 continue c map a and f into xi system. call posti(xi, x, xt, xxi, xv, xtv, xxiv, xvv, nx, ux, ut, nu, v 1 , vt, nv, 1, 3, a, ax, au, aux, aut, autx, av, avt, f, fx, fu 2 , fux, fut, futx, fv, fvt) return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv real t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) real utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2), bux(nu, 1 nu, 2) real but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), bvt(nu, nv, 2 1 ) real expl c u(0,t) = 1 b(1, 1) = u(1, 1)-1. c u(1,t) = exp(-t) b(1, 2) = u(1, 2)-expl(-v(4)) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 bv(1, 4, 2) = expl(-v(4)) return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k real t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt(nv) real d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv(nv, nv), dvt( 1 nv, nv) common /param/ vc, xc, xi0 real vc(4), xc(3), xi0 integer intrvr, i, ileft real exp, bx(10), xx(1) integer temp d(1) = v(1) c x(0,v) = 0. dv(1, 1) = 1 xx(1) = xi0 ileft = intrvr(nx, x, xx(1)) c get the b-spline basis at xx. call bspln(k, x, nx, xx, 1, ileft, bx) d(2) = -exp(-1e0) c d(2) = w(xi0,t) - exp(-1). do 1 i = 1, k temp = ileft+i-k d(2) = d(2)+u(temp, 1)*bx(i) temp = ileft+i-k du(2, temp, 1) = bx(i) 1 continue d(3) = v(3)-1. c x(2,v) = 1. dv(3, 3) = 1 d(4) = vt(4)-1. dvt(4, 4) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k real t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) real x(nx), dt, tstop common /param/ vc, xx, xi0 real vc(4), xx(3), xi0 common /time/ tt real tt external uofx integer i1mach real eu, eesff, ev, lplmt integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t, dt 1 format (16h restart for t =, 1pe10.2, 7h dt =, 1pe10.2) return c let dt carry v(2) down by no more than a factor of 10. 2 dt = lplmt(t, v, nv, t0, v0, 1e-1, dt) tt = t c uofx needs v for mapping. call movefr(nv, v, vc) eu = eesff(k, x, nx, u, uofx) c error in position of boundary layer. ev = v(2)-1./xi0/t temp = i1mach(2) write (temp, 3) t, eu, ev 3 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2, 6h v =, 1p 1 e10.2) return end subroutine uofx(xi, nx, u, w) integer nx real xi(nx), u(nx), w(nx) common /cstak/ ds double precision ds(500) common /param/ vc, x, xi0 real vc(4), x(3), xi0 common /time/ t real t integer ixv, ixx, istkgt, i, is(1000) real expl, rs(1000), ws(1000) logical ls(1000) complex cs(500) integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c the port library stack and its aliases. call enter(1) ixx = istkgt(nx, 3) c space for x and xv. ixv = istkgt(3*nx, 3) c map into user system. call lplmx(xi, nx, vc, 3, ws(ixx), ws(ixv)) do 1 i = 1, nx temp = ixx+i u(i) = expl((-ws(temp-1))*t) 1 continue call leave return end PyBDSF-1.10.1/src/port3/postx8.f000066400000000000000000000145121420247104600160760ustar00rootroot00000000000000c main program common /cstak/ ds double precision ds(5000) common /time/ t real t common /kmesh/ k, nmesh integer k, nmesh common /cmesh/ mesh real mesh(100) external dee, handle, uofx, bc, af integer ndx, i, is(1000), nu, nv real errpar(2), u(100), v(100), dt, rs(1000), ws(1000) real tstop logical ls(1000) complex cs(500) integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test post on the integro-pde c u sub t = 2 * u sub xx - int(0,1) exp(x-y)*u(y) dy on (0,1) c subject to given dirichlet bcs, chosen so that the solution is c u(x,t) = exp(t+x). c the port library stack and its aliases. c initialize the port library stack length. call istkin(5000, 4) nu = 1 errpar(1) = 0 c absolute error. errpar(2) = 1e-2 tstop = 1 dt = 1e-2 k = 4 c ndx uniform mesh points on (0,1). ndx = 7 call umb(0e0, 1e0, ndx, k, mesh, nmesh) nv = nmesh-k c uofx needs t. t = 0 c ics for u. call l2sff(uofx, k, mesh, nmesh, u) temp = nmesh-k do 1 i = 1, temp v(i) = u(i) 1 continue c ics for v. call post(u, nu, k, mesh, nmesh, v, nv, 0e0, tstop, dt, af, bc, 1 dee, errpar, handle) call wrapup stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nv, nx real t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx(nx, nu) real v(nv), vt(nv), a(nx, nu), au(nx, nu, nu), aux(nx, nu, nu), 1 aut(nx, nu, nu) real autx(nx, nu, nu), av(nx, nu, nv), avt(nx, nu, nv), f(nx, nu), 1 fu(nx, nu, nu), fux(nx, nu, nu) real fut(nx, nu, nu), futx(nx, nu, nu), fv(nx, nu, nv), fvt(nx, 1 nu, nv) common /kmesh/ k, nmesh integer k, nmesh common /cmesh/ mesh real mesh(100) integer i do 1 i = 1, nx a(i, 1) = 2.*ux(i, 1) aux(i, 1, 1) = 2 f(i, 1) = ut(i, 1) fut(i, 1, 1) = 1 1 continue c get the integral. call intgrl(k, mesh, nmesh, v, x, nx, f, fv) return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu, nv real t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) real utx(nu, 2), v(nv), vt(nv), b(nu, 2), bu(nu, nu, 2), bux(nu, 1 nu, 2) real but(nu, nu, 2), butx(nu, nu, 2), bv(nu, nv, 2), bvt(nu, nv, 2 1 ) real exp b(1, 1) = u(1, 1)-exp(t) b(1, 2) = u(1, 2)-exp(t+1.) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine dee(t, k, x, nx, u, ut, nu, nxmk, v, vt, nv, d, 1 du, dut, dv, dvt) integer nxmk, nu, nv, nx integer k real t, x(nx), u(nxmk, nu), ut(nxmk, nu), v(nv), vt(nv) real d(nv), du(nv, nxmk, nu), dut(nv, nxmk, nu), dv(nv, nv), dvt( 1 nv, nv) integer i do 1 i = 1, nxmk d(i) = u(i, 1)-v(i) du(i, i, 1) = 1 dv(i, i) = -1 1 continue return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nv, nx integer k real t0, u0(nxmk, nu), v0(nv), t, u(nxmk, nu), v(nv) real x(nx), dt, tstop common /time/ tt real tt external uofx integer i1mach real eu, eesff integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t0, dt 1 format (16h restart for t =, 1pe10.2, 7h dt =, 1pe10.2) return 2 tt = t eu = eesff(k, x, nx, u, uofx) temp = i1mach(2) write (temp, 3) t, eu 3 format (14h error in u(x,, 1pe10.2, 4h ) =, 1pe10.2) return end subroutine uofx(x, nx, u, w) integer nx real x(nx), u(nx), w(nx) common /time/ t real t integer i real exp do 1 i = 1, nx u(i) = exp(t+x(i)) 1 continue return end subroutine intgrl(k, mesh, nmesh, v, x, nx, f, fv) integer nx, nmesh integer k real mesh(nmesh), v(1), x(nx), f(nx), fv(nx, 1) integer mgq, i, j, l, ix real ewe, ker, wgq(3), xgq(3), b(3, 4, 200), keru real xx(3) logical first integer temp, temp1 data first/.true./ c to compute c f = integral from mesh(1) to mesh(nmesh) c kernel(x,y,sum(i=1,...,nmesh-k) v(i)*b(i,y)) dy c and c fv = d(f)/d(v). c assume that call kernel(x,y,u,ker,keru) returns c ker = kernel(x,y,u) and c keru = partial kernel / partial u. c v(nmesh-k),fv(nx,nmesh-k) c the following declaration is specific to k = 4 splines. if (nmesh-k .gt. 200) call seterr(27hintgrl - nmesh-k .gt. nxmax 1 , 27, 1, 2) c need more local space. if (k .ne. 4) call seterr(17hintgrl - k .ne. 4, 17, 2, 2) c use k-1 point gaussian-quadrature rule on each interval. mgq = k-1 if (first) call gqm11(mgq, xgq, wgq) c only get gq rule once, its expensive. c the gaussian quadrature rule. c do integral interval by interval. temp = nmesh-k do 6 i = k, temp c g.q. points on (mesh(i), mesh(i+1)). do 1 j = 1, mgq xx(j) = 0.5*(mesh(i+1)+mesh(i))+0.5*(mesh(i+1)-mesh(i))*xgq( 1 j) 1 continue if (first) call bspln(k, mesh, nmesh, xx, mgq, i, b(1, 1, i)) c only get b-spline basis once, its expensive. do 5 j = 1, mgq c get sum() v()*b()(xx). ewe = 0 do 2 l = 1, k temp1 = i+l-k ewe = ewe+v(temp1)*b(j, l, i) 2 continue do 4 ix = 1, nx c get kernel and partial. call kernel(x(ix), xx(j), ewe, ker, keru) f(ix) = f(ix)+0.5*ker*(mesh(i+1)-mesh(i))*wgq(j) do 3 l = 1, k temp1 = i+l-k fv(ix, temp1) = fv(ix, temp1)+0.5*b(j, l, i)*keru*( 1 mesh(i+1)-mesh(i))*wgq(j) 3 continue 4 continue 5 continue 6 continue first = .false. return end subroutine kernel(x, y, u, ker, keru) real x, y, u, ker, keru real exp c to evaluate the kernel exp(x-y)*u(y) and its partial wrt. u. keru = exp(x-y) ker = keru*u return end PyBDSF-1.10.1/src/port3/postx9.f000066400000000000000000000104151420247104600160750ustar00rootroot00000000000000c main program common /cstak/ ds double precision ds(2000) common /param/ c real c external handle, bc, af, postd integer ndx, nxc, nxx, i, k, is(1000) integer nu, nv, nx, i1mach real ewe(1000), err, errpar(2), u(100), v(1), x(100) real errr, dt, xc(100), uc(100), eebsf, rs(1000) real ws(1000), xx(1000), tstop, r1mach logical ls(1000) complex cs(500) integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to test post on automatic, static mesh refinement. c u sub t = u sub xx + c * u sub x on (0,1) c the solution is c u(x,t) = exp(-c*x). c the port library stack and its aliases. c initialize the port library stack length. call istkin(2000, 4) c = 50 nu = 1 nv = 0 errpar(1) = 1e-1 errpar(2) = 1e-1 k = 4 ndx = 8 call umb(0e0, 1e0, ndx, k, xc, nxc) c initial conditions for uc. call setr(nxc-k, 0e0, uc) c infinity. err = r1mach(2) 1 if (err .le. 1e-2) goto 6 c halve the crude x. call lumb(xc, nxc, 3, k, x, nx) c fitting points for refinement. call lumd(x, nx, k, xx, nxx) c uc on xx. call splne(k, xc, nxc, uc, xx, nxx, ewe) c fit u to uc on mesh. call dl2sf(xx, ewe, nxx, k, x, nx, u) tstop = 1./r1mach(4) dt = 1e-6 i = nx-2*(k-1) temp = i1mach(2) write (temp, 2) i 2 format (18h solving for ndx =, i3) call post(u, nu, k, x, nx, v, nv, 0e0, tstop, dt, af, bc, 1 postd, errpar, handle) c get run-time statistics. call postx c error estimate for uc. err = eebsf(k, xc, nxc, uc, x, nx, u) c error estimate for u. errr = err/16. temp = i1mach(2) write (temp, 3) err, errr 3 format (21h error estimates uc =, 1pe10.2, 9h and u =, 1p 1 e10.2) nxc = nx do 4 i = 1, nx xc(i) = x(i) 4 continue temp = nx-k do 5 i = 1, temp uc(i) = u(i) 5 continue goto 1 6 stop end subroutine af(t, x, nx, u, ux, ut, utx, nu, v, vt, nv, a, 1 au, aux, aut, autx, av, avt, f, fu, fux, fut, futx, fv, fvt) integer nu, nx integer nv real t, x(nx), u(nx, nu), ux(nx, nu), ut(nx, nu), utx(nx, nu) real v(1), vt(1), a(nx, nu), au(nx, nu, nu), aux(nx, nu, nu), aut( 1 nx, nu, nu) real autx(nx, nu, nu), av(1), avt(1), f(nx, nu), fu(nx, nu, nu), 1 fux(nx, nu, nu) real fut(nx, nu, nu), futx(nx, nu, nu), fv(1), fvt(1) common /param/ c real c integer i do 1 i = 1, nx a(i, 1) = ux(i, 1)+c*u(i, 1) aux(i, 1, 1) = 1 au(i, 1, 1) = c f(i, 1) = ut(i, 1) fut(i, 1, 1) = 1 1 continue return end subroutine bc(t, l, r, u, ux, ut, utx, nu, v, vt, nv, b, bu, 1 bux, but, butx, bv, bvt) integer nu integer nv real t, l, r, u(nu, 2), ux(nu, 2), ut(nu, 2) real utx(nu, 2), v(1), vt(1), b(nu, 2), bu(nu, nu, 2), bux(nu, nu, 1 2) real but(nu, nu, 2), butx(nu, nu, 2), bv(1), bvt(1) common /param/ c real c real exp b(1, 1) = u(1, 1)-1. b(1, 2) = u(1, 2)-exp(-c) bu(1, 1, 1) = 1 bu(1, 1, 2) = 1 return end subroutine handle(t0, u0, v0, t, u, v, nu, nxmk, nv, k, x, 1 nx, dt, tstop) integer nxmk, nu, nx integer nv, k real t0, u0(nxmk, nu), v0(1), t, u(nxmk, nu), v(1) real x(nx), dt, tstop common /time/ tt real tt external uofx integer i1mach real eu, eesff integer temp c output and checking routine. if (t0 .ne. t) goto 2 temp = i1mach(2) write (temp, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 tt = t eu = eesff(k, x, nx, u, uofx) temp = i1mach(2) write (temp, 3) t, eu 3 format (15h error in u(x, , 1pe10.2, 4h ) =, 1pe10.2) return end subroutine uofx(x, nx, u, w) integer nx real x(nx), u(nx), w(nx) common /param/ c real c common /time/ t real t integer i real exp do 1 i = 1, nx u(i) = exp((-c)*x(i)) 1 continue return end PyBDSF-1.10.1/src/port3/q7apl.f000066400000000000000000000053161420247104600156570ustar00rootroot00000000000000 SUBROUTINE Q7APL(NN, N, P, J, R, IERR) C *****PARAMETERS. INTEGER NN, N, P, IERR REAL J(NN,P), R(N) C C .................................................................. C .................................................................. C C *****PURPOSE. C THIS SUBROUTINE APPLIES TO R THE ORTHOGONAL TRANSFORMATIONS C STORED IN J BY QRFACT C C *****PARAMETER DESCRIPTION. C ON INPUT. C C NN IS THE ROW DIMENSION OF THE MATRIX J AS DECLARED IN C THE CALLING PROGRAM DIMENSION STATEMENT C C N IS THE NUMBER OF ROWS OF J AND THE SIZE OF THE VECTOR R C C P IS THE NUMBER OF COLUMNS OF J AND THE SIZE OF SIGMA C C J CONTAINS ON AND BELOW ITS DIAGONAL THE COLUMN VECTORS C U WHICH DETERMINE THE HOUSEHOLDER TRANSFORMATIONS C IDENT - U*U.TRANSPOSE C C R IS THE RIGHT HAND SIDE VECTOR TO WHICH THE ORTHOGONAL C TRANSFORMATIONS WILL BE APPLIED C C IERR IF NON-ZERO INDICATES THAT NOT ALL THE TRANSFORMATIONS C WERE SUCCESSFULLY DETERMINED AND ONLY THE FIRST C ABS(IERR) - 1 TRANSFORMATIONS WILL BE USED C C ON OUTPUT. C C R HAS BEEN OVERWRITTEN BY ITS TRANSFORMED IMAGE C C *****APPLICATION AND USAGE RESTRICTIONS. C NONE C C *****ALGORITHM NOTES. C THE VECTORS U WHICH DETERMINE THE HOUSEHOLDER TRANSFORMATIONS C ARE NORMALIZED SO THAT THEIR 2-NORM SQUARED IS 2. THE _USE_ OF C THESE TRANSFORMATIONS HERE IS IN THE SPIRIT OF (1). C C *****SUBROUTINES AND FUNCTIONS CALLED. C C D7TPR - FUNCTION, RETURNS THE INNER PRODUCT OF VECTORS C C *****REFERENCES. C (1) BUSINGER, P. A., AND GOLUB, G. H. (1965), LINEAR LEAST SQUARES C SOLUTIONS BY HOUSEHOLDER TRANSFORMATIONS, NUMER. MATH. 7, C PP. 269-276. C C *****HISTORY. C DESIGNED BY DAVID M. GAY, CODED BY STEPHEN C. PETERS (WINTER 1977) C CALL ON V2AXY SUBSTITUTED FOR DO LOOP, FALL 1983. C C *****GENERAL. C C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH C SUPPORTED BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324, DCR75-10143, 76-14311DSS, AND MCS76-11989. C C .................................................................. C .................................................................. C C *****LOCAL VARIABLES. INTEGER K, L, NL1 C *****FUNCTIONS. REAL D7TPR EXTERNAL D7TPR, V2AXY C C *** BODY *** C K = P IF (IERR .NE. 0) K = IABS(IERR) - 1 IF ( K .EQ. 0) GO TO 999 C DO 20 L = 1, K NL1 = N - L + 1 CALL V2AXY(NL1, R(L), - D7TPR(NL1,J(L,L),R(L)), J(L,L), R(L)) 20 CONTINUE C 999 RETURN C *** LAST LINE OF Q7APL FOLLOWS *** END PyBDSF-1.10.1/src/port3/q7rad.f000066400000000000000000000100341420247104600156420ustar00rootroot00000000000000 SUBROUTINE Q7RAD(N, NN, P, QTR, QTRSET, RMAT, W, Y) C C *** ADD ROWS W TO QR FACTORIZATION WITH R MATRIX RMAT AND C *** Q**T * RESIDUAL = QTR. Y = NEW COMPONENTS OF RESIDUAL C *** CORRESPONDING TO W. QTR, Y REFERENCED ONLY IF QTRSET = .TRUE. C LOGICAL QTRSET INTEGER N, NN, P REAL QTR(P), RMAT(1), W(NN,P), Y(N) C DIMENSION RMAT(P*(P+1)/2) C/+ REAL SQRT C/ REAL D7TPR, R7MDC, V2NRM EXTERNAL D7TPR, R7MDC, V2AXY, V7SCL, V2NRM C C *** LOCAL VARIABLES *** C INTEGER I, II, IJ, IP1, J, K, NK REAL ARI, QRI, RI, S, T, WI REAL BIG, BIGRT, ONE, TINY, TINYRT, ZERO C/7 SAVE BIGRT, TINY, TINYRT C/ DATA BIG/-1.E+0/, BIGRT/-1.E+0/, ONE/1.E+0/, TINY/0.E+0/, 1 TINYRT/0.E+0/, ZERO/0.E+0/ C C------------------------------ BODY ----------------------------------- C IF (TINY .GT. ZERO) GO TO 10 TINY = R7MDC(1) BIG = R7MDC(6) IF (TINY*BIG .LT. ONE) TINY = ONE / BIG 10 K = 1 NK = N II = 0 DO 180 I = 1, P II = II + I IP1 = I + 1 IJ = II + I IF (NK .LE. 1) T = ABS(W(K,I)) IF (NK .GT. 1) T = V2NRM(NK, W(K,I)) IF (T .LT. TINY) GOTO 180 RI = RMAT(II) IF (RI .NE. ZERO) GO TO 100 IF (NK .GT. 1) GO TO 30 IJ = II DO 20 J = I, P RMAT(IJ) = W(K,J) IJ = IJ + J 20 CONTINUE IF (QTRSET) QTR(I) = Y(K) W(K,I) = ZERO GO TO 999 30 WI = W(K,I) IF (BIGRT .GT. ZERO) GO TO 40 BIGRT = R7MDC(5) TINYRT = R7MDC(2) 40 IF (T .LE. TINYRT) GO TO 50 IF (T .GE. BIGRT) GO TO 50 IF (WI .LT. ZERO) T = -T WI = WI + T S = SQRT(T * WI) GO TO 70 50 S = SQRT(T) IF (WI .LT. ZERO) GO TO 60 WI = WI + T S = S * SQRT(WI) GO TO 70 60 T = -T WI = WI + T S = S * SQRT(-WI) 70 W(K,I) = WI CALL V7SCL(NK, W(K,I), ONE/S, W(K,I)) RMAT(II) = -T IF (.NOT. QTRSET) GO TO 80 CALL V2AXY(NK, Y(K), - D7TPR(NK,Y(K),W(K,I)), W(K,I), Y(K)) QTR(I) = Y(K) 80 IF (IP1 .GT. P) GO TO 999 DO 90 J = IP1, P CALL V2AXY(NK, W(K,J), - D7TPR(NK,W(K,J),W(K,I)), 1 W(K,I), W(K,J)) RMAT(IJ) = W(K,J) IJ = IJ + J 90 CONTINUE IF (NK .LE. 1) GO TO 999 K = K + 1 NK = NK - 1 GO TO 180 C 100 ARI = ABS(RI) IF (ARI .GT. T) GO TO 110 T = T * SQRT(ONE + (ARI/T)**2) GO TO 120 110 T = ARI * SQRT(ONE + (T/ARI)**2) 120 IF (RI .LT. ZERO) T = -T RI = RI + T RMAT(II) = -T S = -RI / T IF (NK .LE. 1) GO TO 150 CALL V7SCL(NK, W(K,I), ONE/RI, W(K,I)) IF (.NOT. QTRSET) GO TO 130 QRI = QTR(I) T = S * ( QRI + D7TPR(NK, Y(K), W(K,I)) ) QTR(I) = QRI + T 130 IF (IP1 .GT. P) GO TO 999 IF (QTRSET) CALL V2AXY(NK, Y(K), T, W(K,I), Y(K)) DO 140 J = IP1, P RI = RMAT(IJ) T = S * ( RI + D7TPR(NK, W(K,J), W(K,I)) ) CALL V2AXY(NK, W(K,J), T, W(K,I), W(K,J)) RMAT(IJ) = RI + T IJ = IJ + J 140 CONTINUE GO TO 180 C 150 WI = W(K,I) / RI W(K,I) = WI IF (.NOT. QTRSET) GO TO 160 QRI = QTR(I) T = S * ( QRI + Y(K)*WI ) QTR(I) = QRI + T 160 IF (IP1 .GT. P) GO TO 999 IF (QTRSET) Y(K) = T*WI + Y(K) DO 170 J = IP1, P RI = RMAT(IJ) T = S * (RI + W(K,J)*WI) W(K,J) = W(K,J) + T*WI RMAT(IJ) = RI + T IJ = IJ + J 170 CONTINUE 180 CONTINUE C 999 RETURN C *** LAST LINE OF Q7RAD FOLLOWS *** END PyBDSF-1.10.1/src/port3/q7rfh.f000066400000000000000000000140701420247104600156570ustar00rootroot00000000000000 SUBROUTINE Q7RFH(IERR, IPIVOT, N, NN, NOPIVK, P, Q, R, RLEN, W) C C *** COMPUTE QR FACTORIZATION VIA HOUSEHOLDER TRANSFORMATIONS C *** WITH COLUMN PIVOTING *** C C *** PARAMETER DECLARATIONS *** C INTEGER IERR, N, NN, NOPIVK, P, RLEN INTEGER IPIVOT(P) REAL Q(NN,P), R(RLEN), W(P) C DIMENSION R(P*(P+1)/2) C C---------------------------- DESCRIPTION ---------------------------- C C THIS ROUTINE COMPUTES A QR FACTORIZATION (VIA HOUSEHOLDER TRANS- C FORMATIONS) OF THE MATRIX A THAT ON INPUT IS STORED IN Q. C IF NOPIVK ALLOWS IT, THIS ROUTINE DOES COLUMN PIVOTING -- IF C K .GT. NOPIVK, THEN ORIGINAL COLUMN K IS ELIGIBLE FOR PIVOTING. C THE Q AND R RETURNED ARE SUCH THAT COLUMN I OF Q*R EQUALS C COLUMN IPIVOT(I) OF THE ORIGINAL MATRIX A. THE UPPER TRIANGULAR C MATRIX R IS STORED COMPACTLY BY COLUMNS, I.E., THE OUTPUT VECTOR R C CONTAINS R(1,1), R(1,2), R(2,2), R(1,3), R(2,3), ..., R(P,P) (IN C THAT ORDER). IF ALL GOES WELL, THEN THIS ROUTINE SETS IERR = 0. C BUT IF (PERMUTED) COLUMN K OF A IS LINEARLY DEPENDENT ON C (PERMUTED) COLUMNS 1,2,...,K-1, THEN IERR IS SET TO K AND THE R C MATRIX RETURNED HAS R(I,J) = 0 FOR I .GE. K AND J .GE. K. C THE ORIGINAL MATRIX A IS AN N BY P MATRIX. NN IS THE LEAD C DIMENSION OF THE ARRAY Q AND MUST SATISFY NN .GE. N. NO C PARAMETER CHECKING IS DONE. C PIVOTING IS DONE AS THOUGH ALL COLUMNS OF Q WERE FIRST C SCALED TO HAVE THE SAME NORM. IF COLUMN K IS ELIGIBLE FOR C PIVOTING AND ITS (SCALED) NORM**2 LOSS IS MORE THAN THE C MINIMUM SUCH LOSS (OVER COLUMNS K THRU P), THEN COLUMN K IS C SWAPPED WITH THE COLUMN OF LEAST NORM**2 LOSS. C C CODED BY DAVID M. GAY (FALL 1979, SPRING 1984). C C-------------------------- LOCAL VARIABLES -------------------------- C INTEGER I, II, J, K, KK, KM1, KP1, NK1 REAL AK, QKK, S, SINGTL, T, T1, WK REAL D7TPR, R7MDC, V2NRM EXTERNAL D7TPR, R7MDC, V2AXY, V7SCL, V7SCP, V7SWP, V2NRM C/+ REAL SQRT C/ REAL BIG, BIGRT, MEPS10, ONE, TEN, TINY, TINYRT, 1 WTOL, ZERO C/6 C DATA ONE/1.0E+0/, TEN/1.E+1/, WTOL/0.75E+0/, ZERO/0.0E+0/ C/7 PARAMETER (ONE=1.0E+0, TEN=1.E+1, WTOL=0.75E+0, ZERO=0.0E+0) SAVE BIGRT, MEPS10, TINY, TINYRT C/ DATA BIGRT/0.0E+0/, MEPS10/0.0E+0/, TINY/0.E+0/, TINYRT/0.E+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IERR = 0 IF (MEPS10 .GT. ZERO) GO TO 10 BIGRT = R7MDC(5) MEPS10 = TEN * R7MDC(3) TINYRT = R7MDC(2) TINY = R7MDC(1) BIG = R7MDC(6) IF (TINY*BIG .LT. ONE) TINY = ONE / BIG 10 SINGTL = FLOAT(MAX0(N,P)) * MEPS10 C C *** INITIALIZE W, IPIVOT, AND DIAG(R) *** C J = 0 DO 40 I = 1, P IPIVOT(I) = I T = V2NRM(N, Q(1,I)) IF (T .GT. ZERO) GO TO 20 W(I) = ONE GO TO 30 20 W(I) = ZERO 30 J = J + I R(J) = T 40 CONTINUE C C *** MAIN LOOP *** C KK = 0 NK1 = N + 1 DO 130 K = 1, P IF (NK1 .LE. 1) GO TO 999 NK1 = NK1 - 1 KK = KK + K KP1 = K + 1 IF (K .LE. NOPIVK) GO TO 60 IF (K .GE. P) GO TO 60 C C *** FIND COLUMN WITH MINIMUM WEIGHT LOSS *** C T = W(K) IF (T .LE. ZERO) GO TO 60 J = K DO 50 I = KP1, P IF (W(I) .GE. T) GO TO 50 T = W(I) J = I 50 CONTINUE IF (J .EQ. K) GO TO 60 C C *** INTERCHANGE COLUMNS K AND J *** C I = IPIVOT(K) IPIVOT(K) = IPIVOT(J) IPIVOT(J) = I W(J) = W(K) W(K) = T I = J*(J+1)/2 T1 = R(I) R(I) = R(KK) R(KK) = T1 CALL V7SWP(N, Q(1,K), Q(1,J)) IF (K .LE. 1) GO TO 60 I = I - J + 1 J = KK - K + 1 CALL V7SWP(K-1, R(I), R(J)) C C *** COLUMN K OF Q SHOULD BE NEARLY ORTHOGONAL TO THE PREVIOUS C *** COLUMNS. NORMALIZE IT, TEST FOR SINGULARITY, AND DECIDE C *** WHETHER TO REORTHOGONALIZE IT. C 60 AK = R(KK) IF (AK .LE. ZERO) GO TO 140 WK = W(K) C C *** SET T TO THE NORM OF (Q(K,K),...,Q(N,K)) C *** AND CHECK FOR SINGULARITY. C IF (WK .LT. WTOL) GO TO 70 T = V2NRM(NK1, Q(K,K)) IF (T / AK .LE. SINGTL) GO TO 140 GO TO 80 70 T = SQRT(ONE - WK) IF (T .LE. SINGTL) GO TO 140 T = T * AK C C *** DETERMINE HOUSEHOLDER TRANSFORMATION *** C 80 QKK = Q(K,K) IF (T .LE. TINYRT) GO TO 90 IF (T .GE. BIGRT) GO TO 90 IF (QKK .LT. ZERO) T = -T QKK = QKK + T S = SQRT(T * QKK) GO TO 110 90 S = SQRT(T) IF (QKK .LT. ZERO) GO TO 100 QKK = QKK + T S = S * SQRT(QKK) GO TO 110 100 T = -T QKK = QKK + T S = S * SQRT(-QKK) 110 Q(K,K) = QKK C C *** SCALE (Q(K,K),...,Q(N,K)) TO HAVE NORM SQRT(2) *** C IF (S .LE. TINY) GO TO 140 CALL V7SCL(NK1, Q(K,K), ONE/S, Q(K,K)) C R(KK) = -T C C *** COMPUTE R(K,I) FOR I = K+1,...,P AND UPDATE Q *** C IF (K .GE. P) GO TO 999 J = KK + K II = KK DO 120 I = KP1, P II = II + I CALL V2AXY(NK1, Q(K,I), - D7TPR(NK1,Q(K,K),Q(K,I)), 1 Q(K,K), Q(K,I)) T = Q(K,I) R(J) = T J = J + I T1 = R(II) IF (T1 .GT. ZERO) W(I) = W(I) + (T/T1)**2 120 CONTINUE 130 CONTINUE C C *** SINGULAR Q *** C 140 IERR = K KM1 = K - 1 J = KK DO 150 I = K, P CALL V7SCP(I-KM1, R(J), ZERO) J = J + I 150 CONTINUE C 999 RETURN C *** LAST CARD OF Q7RFH FOLLOWS *** END PyBDSF-1.10.1/src/port3/q7rsh.f000066400000000000000000000026321420247104600156750ustar00rootroot00000000000000 SUBROUTINE Q7RSH(K, P, HAVQTR, QTR, R, W) C C *** PERMUTE COLUMN K OF R TO COLUMN P, MODIFY QTR ACCORDINGLY *** C LOGICAL HAVQTR INTEGER K, P REAL QTR(P), R(1), W(P) C DIMSNSION R(P*(P+1)/2) C REAL H2RFG EXTERNAL H2RFA, H2RFG, V7CPY C C *** LOCAL VARIABLES *** C INTEGER I, I1, J, JM1, JP1, J1, KM1, K1, PM1 REAL A, B, T, WJ, X, Y, Z, ZERO C DATA ZERO/0.0E+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IF (K .GE. P) GO TO 999 KM1 = K - 1 K1 = K * KM1 / 2 CALL V7CPY(K, W, R(K1+1)) WJ = W(K) PM1 = P - 1 J1 = K1 + KM1 DO 50 J = K, PM1 JM1 = J - 1 JP1 = J + 1 IF (JM1 .GT. 0) CALL V7CPY(JM1, R(K1+1), R(J1+2)) J1 = J1 + JP1 K1 = K1 + J A = R(J1) B = R(J1+1) IF (B .NE. ZERO) GO TO 10 R(K1) = A X = ZERO Z = ZERO GO TO 40 10 R(K1) = H2RFG(A, B, X, Y, Z) IF (J .EQ. PM1) GO TO 30 I1 = J1 DO 20 I = JP1, PM1 I1 = I1 + I CALL H2RFA(1, R(I1), R(I1+1), X, Y, Z) 20 CONTINUE 30 IF (HAVQTR) CALL H2RFA(1, QTR(J), QTR(JP1), X, Y, Z) 40 T = X * WJ W(J) = WJ + T WJ = T * Z 50 CONTINUE W(P) = WJ CALL V7CPY(P, R(K1+1), W) 999 RETURN END PyBDSF-1.10.1/src/port3/r1mach.f000066400000000000000000000172651420247104600160140ustar00rootroot00000000000000 REAL FUNCTION R1MACH(I) INTEGER I C C SINGLE-PRECISION MACHINE CONSTANTS C R1MACH(1) = B**(EMIN-1), THE SMALLEST POSITIVE MAGNITUDE. C R1MACH(2) = B**EMAX*(1 - B**(-T)), THE LARGEST MAGNITUDE. C R1MACH(3) = B**(-T), THE SMALLEST RELATIVE SPACING. C R1MACH(4) = B**(1-T), THE LARGEST RELATIVE SPACING. C R1MACH(5) = LOG10(B) C INTEGER SMALL(2) INTEGER LARGE(2) INTEGER RIGHT(2) INTEGER DIVER(2) INTEGER LOG10(2) C needs to be (2) for AUTODOUBLE, HARRIS SLASH 6, ... INTEGER SC SAVE SMALL, LARGE, RIGHT, DIVER, LOG10, SC REAL RMACH(5) EQUIVALENCE (RMACH(1),SMALL(1)) EQUIVALENCE (RMACH(2),LARGE(1)) EQUIVALENCE (RMACH(3),RIGHT(1)) EQUIVALENCE (RMACH(4),DIVER(1)) EQUIVALENCE (RMACH(5),LOG10(1)) INTEGER J, K, L, T3E(3) DATA T3E(1) / 9777664 / DATA T3E(2) / 5323660 / DATA T3E(3) / 46980 / C THIS VERSION ADAPTS AUTOMATICALLY TO MOST CURRENT MACHINES, C INCLUDING AUTO-DOUBLE COMPILERS. C TO COMPILE ON OLDER MACHINES, ADD A C IN COLUMN 1 C ON THE NEXT LINE DATA SC/0/ C AND REMOVE THE C FROM COLUMN 1 IN ONE OF THE SECTIONS BELOW. C CONSTANTS FOR EVEN OLDER MACHINES CAN BE OBTAINED BY C mail netlib@research.bell-labs.com C send old1mach from blas C PLEASE SEND CORRECTIONS TO dmg OR ehg@bell-labs.com. C C MACHINE CONSTANTS FOR THE HONEYWELL DPS 8/70 SERIES. C DATA RMACH(1) / O402400000000 / C DATA RMACH(2) / O376777777777 / C DATA RMACH(3) / O714400000000 / C DATA RMACH(4) / O716400000000 / C DATA RMACH(5) / O776464202324 /, SC/987/ C C MACHINE CONSTANTS FOR PDP-11 FORTRANS SUPPORTING C 32-BIT INTEGERS (EXPRESSED IN INTEGER AND OCTAL). C DATA SMALL(1) / 8388608 / C DATA LARGE(1) / 2147483647 / C DATA RIGHT(1) / 880803840 / C DATA DIVER(1) / 889192448 / C DATA LOG10(1) / 1067065499 /, SC/987/ C DATA RMACH(1) / O00040000000 / C DATA RMACH(2) / O17777777777 / C DATA RMACH(3) / O06440000000 / C DATA RMACH(4) / O06500000000 / C DATA RMACH(5) / O07746420233 /, SC/987/ C C MACHINE CONSTANTS FOR THE UNIVAC 1100 SERIES. C DATA RMACH(1) / O000400000000 / C DATA RMACH(2) / O377777777777 / C DATA RMACH(3) / O146400000000 / C DATA RMACH(4) / O147400000000 / C DATA RMACH(5) / O177464202324 /, SC/987/ C IF (SC .NE. 987) THEN * *** CHECK FOR AUTODOUBLE *** SMALL(2) = 0 RMACH(1) = 1E13 IF (SMALL(2) .NE. 0) THEN * *** AUTODOUBLED *** IF ( SMALL(1) .EQ. 1117925532 * .AND. SMALL(2) .EQ. -448790528) THEN * *** IEEE BIG ENDIAN *** SMALL(1) = 1048576 SMALL(2) = 0 LARGE(1) = 2146435071 LARGE(2) = -1 RIGHT(1) = 1017118720 RIGHT(2) = 0 DIVER(1) = 1018167296 DIVER(2) = 0 LOG10(1) = 1070810131 LOG10(2) = 1352628735 ELSE IF ( SMALL(2) .EQ. 1117925532 * .AND. SMALL(1) .EQ. -448790528) THEN * *** IEEE LITTLE ENDIAN *** SMALL(2) = 1048576 SMALL(1) = 0 LARGE(2) = 2146435071 LARGE(1) = -1 RIGHT(2) = 1017118720 RIGHT(1) = 0 DIVER(2) = 1018167296 DIVER(1) = 0 LOG10(2) = 1070810131 LOG10(1) = 1352628735 ELSE IF ( SMALL(1) .EQ. -2065213935 * .AND. SMALL(2) .EQ. 10752) THEN * *** VAX WITH D_FLOATING *** SMALL(1) = 128 SMALL(2) = 0 LARGE(1) = -32769 LARGE(2) = -1 RIGHT(1) = 9344 RIGHT(2) = 0 DIVER(1) = 9472 DIVER(2) = 0 LOG10(1) = 546979738 LOG10(2) = -805796613 ELSE IF ( SMALL(1) .EQ. 1267827943 * .AND. SMALL(2) .EQ. 704643072) THEN * *** IBM MAINFRAME *** SMALL(1) = 1048576 SMALL(2) = 0 LARGE(1) = 2147483647 LARGE(2) = -1 RIGHT(1) = 856686592 RIGHT(2) = 0 DIVER(1) = 873463808 DIVER(2) = 0 LOG10(1) = 1091781651 LOG10(2) = 1352628735 ELSE WRITE(*,9010) STOP 777 END IF ELSE RMACH(1) = 1234567. IF (SMALL(1) .EQ. 1234613304) THEN * *** IEEE *** SMALL(1) = 8388608 LARGE(1) = 2139095039 RIGHT(1) = 864026624 DIVER(1) = 872415232 LOG10(1) = 1050288283 ELSE IF (SMALL(1) .EQ. -1271379306) THEN * *** VAX *** SMALL(1) = 128 LARGE(1) = -32769 RIGHT(1) = 13440 DIVER(1) = 13568 LOG10(1) = 547045274 ELSE IF (SMALL(1) .EQ. 1175639687) THEN * *** IBM MAINFRAME *** SMALL(1) = 1048576 LARGE(1) = 2147483647 RIGHT(1) = 990904320 DIVER(1) = 1007681536 LOG10(1) = 1091781651 ELSE IF (SMALL(1) .EQ. 1251390520) THEN * *** CONVEX C-1 *** SMALL(1) = 8388608 LARGE(1) = 2147483647 RIGHT(1) = 880803840 DIVER(1) = 889192448 LOG10(1) = 1067065499 ELSE DO 10 L = 1, 3 J = SMALL(1) / 10000000 K = SMALL(1) - 10000000*J IF (K .NE. T3E(L)) GO TO 20 SMALL(1) = J 10 CONTINUE * *** CRAY T3E *** CALL I1MCRA(SMALL, K, 16, 0, 0) CALL I1MCRA(LARGE, K, 32751, 16777215, 16777215) CALL I1MCRA(RIGHT, K, 15520, 0, 0) CALL I1MCRA(DIVER, K, 15536, 0, 0) CALL I1MCRA(LOG10, K, 16339, 4461392, 10451455) GO TO 30 20 CALL I1MCRA(J, K, 16405, 9876536, 0) IF (SMALL(1) .NE. J) THEN WRITE(*,9020) STOP 777 END IF * *** CRAY 1, XMP, 2, AND 3 *** CALL I1MCRA(SMALL(1), K, 8195, 8388608, 1) CALL I1MCRA(LARGE(1), K, 24574, 16777215, 16777214) CALL I1MCRA(RIGHT(1), K, 16338, 8388608, 0) CALL I1MCRA(DIVER(1), K, 16339, 8388608, 0) CALL I1MCRA(LOG10(1), K, 16383, 10100890, 8715216) END IF END IF 30 SC = 987 END IF * SANITY CHECK IF (RMACH(4) .GE. 1.0) STOP 776 IF (I .LT. 1 .OR. I .GT. 5) THEN WRITE(*,*) 'R1MACH(I): I =',I,' is out of bounds.' STOP END IF R1MACH = RMACH(I) RETURN 9010 FORMAT(/' Adjust autodoubled R1MACH by getting data'/ *' appropriate for your machine from D1MACH.') 9020 FORMAT(/' Adjust R1MACH by uncommenting data statements'/ *' appropriate for your machine.') * /* C source for R1MACH -- remove the * in column 1 */ *#include *#include *#include *float r1mach_(long *i) *{ * switch(*i){ * case 1: return FLT_MIN; * case 2: return FLT_MAX; * case 3: return FLT_EPSILON/FLT_RADIX; * case 4: return FLT_EPSILON; * case 5: return log10((double)FLT_RADIX); * } * fprintf(stderr, "invalid argument: r1mach(%ld)\n", *i); * exit(1); return 0; /* else complaint of missing return value */ *} END SUBROUTINE I1MCRA(A, A1, B, C, D) **** SPECIAL COMPUTATION FOR CRAY MACHINES **** INTEGER A, A1, B, C, D A1 = 16777216*B + C A = 16777216*A1 + D END PyBDSF-1.10.1/src/port3/r7mdc.f000066400000000000000000000024371420247104600156500ustar00rootroot00000000000000 REAL FUNCTION R7MDC(K) C C *** RETURN MACHINE DEPENDENT CONSTANTS USED BY NL2SOL *** C INTEGER K C C *** THE CONSTANT RETURNED DEPENDS ON K... C C *** K = 1... SMALLEST POS. ETA SUCH THAT -ETA EXISTS. C *** K = 2... SQUARE ROOT OF ETA. C *** K = 3... UNIT ROUNDOFF = SMALLEST POS. NO. MACHEP SUCH C *** THAT 1 + MACHEP .GT. 1 .AND. 1 - MACHEP .LT. 1. C *** K = 4... SQUARE ROOT OF MACHEP. C *** K = 5... SQUARE ROOT OF BIG (SEE K = 6). C *** K = 6... LARGEST MACHINE NO. BIG SUCH THAT -BIG EXISTS. C REAL BIG, ETA, MACHEP C/+ REAL SQRT C/ REAL R1MACH, ZERO EXTERNAL R1MACH DATA BIG/0.E+0/, ETA/0.E+0/, MACHEP/0.E+0/, ZERO/0.E+0/ IF (BIG .GT. ZERO) GO TO 1 BIG = R1MACH(2) ETA = R1MACH(1) MACHEP = R1MACH(4) 1 CONTINUE C C------------------------------- BODY -------------------------------- C GO TO (10, 20, 30, 40, 50, 60), K C 10 R7MDC = ETA GO TO 999 C 20 R7MDC = SQRT(256.E+0*ETA)/16.E+0 GO TO 999 C 30 R7MDC = MACHEP GO TO 999 C 40 R7MDC = SQRT(MACHEP) GO TO 999 C 50 R7MDC = SQRT(BIG/256.E+0)*16.E+0 GO TO 999 C 60 R7MDC = BIG C 999 RETURN C *** LAST CARD OF R7MDC FOLLOWS *** END PyBDSF-1.10.1/src/port3/r7tvm.f000066400000000000000000000012431420247104600157050ustar00rootroot00000000000000 SUBROUTINE R7TVM(N, P, Y, D, U, X) C C *** SET Y TO R*X, WHERE R IS THE UPPER TRIANGULAR MATRIX WHOSE C *** DIAGONAL IS IN D AND WHOSE STRICT UPPER TRIANGLE IS IN U. C C *** X AND Y MAY SHARE STORAGE. C INTEGER N, P REAL Y(P), D(P), U(N,P), X(P) C REAL D7TPR EXTERNAL D7TPR C C *** LOCAL VARIABLES *** C INTEGER I, II, PL, PP1 REAL T C C *** BODY *** C PL = MIN0(N, P) PP1 = PL + 1 DO 10 II = 1, PL I = PP1 - II T = X(I) * D(I) IF (I .GT. 1) T = T + D7TPR(I-1, U(1,I), X) Y(I) = T 10 CONTINUE 999 RETURN C *** LAST LINE OF R7TVM FOLLOWS *** END PyBDSF-1.10.1/src/port3/retsrc.f000066400000000000000000000012061420247104600161270ustar00rootroot00000000000000 SUBROUTINE RETSRC(IROLD) C C THIS ROUTINE SETS LRECOV = IROLD. C C IF THE CURRENT ERROR BECOMES UNRECOVERABLE, C THE MESSAGE IS PRINTED AND EXECUTION STOPS. C C ERROR STATES - C C 1 - ILLEGAL VALUE OF IROLD. C C/6S C IF (IROLD.LT.1 .OR. IROLD.GT.2) C 1 CALL SETERR(31HRETSRC - ILLEGAL VALUE OF IROLD,31,1,2) C/7S IF (IROLD.LT.1 .OR. IROLD.GT.2) 1 CALL SETERR('RETSRC - ILLEGAL VALUE OF IROLD',31,1,2) C/ C ITEMP=I8SAVE(2,IROLD,.TRUE.) C C IF THE CURRENT ERROR IS NOW UNRECOVERABLE, PRINT AND STOP. C IF (IROLD.EQ.1 .OR. I8SAVE(1,0,.FALSE.).EQ.0) RETURN C CALL EPRINT STOP C END PyBDSF-1.10.1/src/port3/rldst.f000066400000000000000000000012601420247104600157550ustar00rootroot00000000000000 REAL FUNCTION RLDST(P, D, X, X0) C C *** COMPUTE AND RETURN RELATIVE DIFFERENCE BETWEEN X AND X0 *** C *** NL2SOL VERSION 2.2 *** C INTEGER P REAL D(P), X(P), X0(P) C INTEGER I REAL EMAX, T, XMAX, ZERO C/6 C DATA ZERO/0.E+0/ C/7 PARAMETER (ZERO=0.E+0) C/ C C *** BODY *** C EMAX = ZERO XMAX = ZERO DO 10 I = 1, P T = ABS(D(I) * (X(I) - X0(I))) IF (EMAX .LT. T) EMAX = T T = D(I) * ( ABS(X(I)) + ABS(X0(I))) IF (XMAX .LT. T) XMAX = T 10 CONTINUE RLDST = ZERO IF (XMAX .GT. ZERO) RLDST = EMAX / XMAX 999 RETURN C *** LAST CARD OF RLDST FOLLOWS *** END PyBDSF-1.10.1/src/port3/rmnf.f000066400000000000000000000114671420247104600156010ustar00rootroot00000000000000 SUBROUTINE RMNF(D, FX, IV, LIV, LV, N, V, X) C C *** ITERATION DRIVER FOR MNF... C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING C *** FINITE-DIFFERENCE GRADIENTS AND SECANT HESSIAN APPROXIMATIONS. C INTEGER LIV, LV, N INTEGER IV(LIV) REAL D(N), FX, X(N), V(LV) C DIMENSION V(77 + N*(N+17)/2) C C *** PURPOSE *** C C THIS ROUTINE INTERACTS WITH SUBROUTINE RMNG IN AN ATTEMPT C TO FIND AN N-VECTOR X* THAT MINIMIZES THE (UNCONSTRAINED) C OBJECTIVE FUNCTION FX = F(X) COMPUTED BY THE CALLER. (OFTEN C THE X* FOUND IS A LOCAL MINIMIZER RATHER THAN A GLOBAL ONE.) C C *** PARAMETERS *** C C THE PARAMETERS FOR RMNF ARE THE SAME AS THOSE FOR MNG C (WHICH SEE), EXCEPT THAT CALCF, CALCG, UIPARM, URPARM, AND UFPARM C ARE OMITTED, AND A PARAMETER FX FOR THE OBJECTIVE FUNCTION C VALUE AT X IS ADDED. INSTEAD OF CALLING CALCG TO OBTAIN THE C GRADIENT OF THE OBJECTIVE FUNCTION AT X, RMNF CALLS S7GRD, C WHICH COMPUTES AN APPROXIMATION TO THE GRADIENT BY FINITE C (FORWARD AND CENTRAL) DIFFERENCES USING THE METHOD OF REF. 1. C THE FOLLOWING INPUT COMPONENT IS OF INTEREST IN THIS REGARD C (AND IS NOT DESCRIBED IN MNG). C C V(ETA0)..... V(42) IS AN ESTIMATED BOUND ON THE RELATIVE ERROR IN THE C OBJECTIVE FUNCTION VALUE COMPUTED BY CALCF... C (TRUE VALUE) = (COMPUTED VALUE) * (1 + E), C WHERE ABS(E) .LE. V(ETA0). DEFAULT = MACHEP * 10**3, C WHERE MACHEP IS THE UNIT ROUNDOFF. C C THE OUTPUT VALUES IV(NFCALL) AND IV(NGCALL) HAVE DIFFERENT C MEANINGS FOR MNF THAN FOR MNG... C C IV(NFCALL)... IV(6) IS THE NUMBER OF CALLS SO FAR MADE ON CALCF (I.E., C FUNCTION EVALUATIONS) EXCLUDING THOSE MADE ONLY FOR C COMPUTING GRADIENTS. THE INPUT VALUE IV(MXFCAL) IS A C LIMIT ON IV(NFCALL). C IV(NGCALL)... IV(30) IS THE NUMBER OF FUNCTION EVALUATIONS MADE ONLY C FOR COMPUTING GRADIENTS. THE TOTAL NUMBER OF FUNCTION C EVALUATIONS IS THUS IV(NFCALL) + IV(NGCALL). C C *** REFERENCES *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (AUGUST 1982). C C---------------------------- DECLARATIONS --------------------------- C REAL D7TPR EXTERNAL IVSET, D7TPR, S7GRD, RMNG, V7SCP C C IVSET.... SUPPLIES DEFAULT PARAMETER VALUES. C D7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C S7GRD... COMPUTES FINITE-DIFFERENCE GRADIENT APPROXIMATION. C RMNG.... REVERSE-COMMUNICATION ROUTINE THAT DOES MNG ALGORITHM. C V7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C INTEGER ALPHA, G1, I, IV1, J, K, W REAL ZERO C C *** SUBSCRIPTS FOR IV *** C INTEGER ETA0, F, G, LMAT, NEXTV, NGCALL, NITER, SGIRC, TOOBIG, 1 VNEED C C/6 C DATA ETA0/42/, F/10/, G/28/, LMAT/42/, NEXTV/47/, NGCALL/30/, C 1 NITER/31/, SGIRC/57/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (ETA0=42, F=10, G=28, LMAT=42, NEXTV=47, NGCALL=30, 1 NITER=31, SGIRC=57, TOOBIG=2, VNEED=4) C/ C/6 C DATA ZERO/0.E+0/ C/7 PARAMETER (ZERO=0.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IV1 = IV(1) IF (IV1 .EQ. 1) GO TO 10 IF (IV1 .EQ. 2) GO TO 50 IF (IV(1) .EQ. 0) CALL IVSET(2, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 12 .OR. IV1 .EQ. 13) IV(VNEED) = IV(VNEED) + 2*N + 6 IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 G1 = 1 IF (IV1 .EQ. 12) IV(1) = 13 GO TO 20 C 10 G1 = IV(G) C 20 CALL RMNG(D, FX, V(G1), IV, LIV, LV, N, V, X) IF (IV(1) - 2) 999, 30, 70 C C *** COMPUTE GRADIENT *** C 30 IF (IV(NITER) .EQ. 0) CALL V7SCP(N, V(G1), ZERO) J = IV(LMAT) K = G1 - N DO 40 I = 1, N V(K) = D7TPR(I, V(J), V(J)) K = K + 1 J = J + I 40 CONTINUE C *** UNDO INCREMENT OF IV(NGCALL) DONE BY RMNG *** IV(NGCALL) = IV(NGCALL) - 1 C *** STORE RETURN CODE FROM S7GRD IN IV(SGIRC) *** IV(SGIRC) = 0 C *** X MAY HAVE BEEN RESTORED, SO COPY BACK FX... *** FX = V(F) GO TO 60 C C *** GRADIENT LOOP *** C 50 IF (IV(TOOBIG) .NE. 0) GO TO 10 C 60 G1 = IV(G) ALPHA = G1 - N W = ALPHA - 6 CALL S7GRD(V(ALPHA), D, V(ETA0), FX, V(G1), IV(SGIRC), N, V(W),X) IF (IV(SGIRC) .EQ. 0) GO TO 10 IV(NGCALL) = IV(NGCALL) + 1 GO TO 999 C 70 IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(G) = IV(NEXTV) + N + 6 IV(NEXTV) = IV(G) + N IF (IV1 .NE. 13) GO TO 10 C 999 RETURN C *** LAST CARD OF RMNF FOLLOWS *** END PyBDSF-1.10.1/src/port3/rmnfb.f000066400000000000000000000120451420247104600157340ustar00rootroot00000000000000 SUBROUTINE RMNFB(B, D, FX, IV, LIV, LV, P, V, X) C C *** ITERATION DRIVER FOR MNF... C *** MINIMIZE GENERAL UNCONSTRAINED OBJECTIVE FUNCTION USING C *** FINITE-DIFFERENCE GRADIENTS AND SECANT HESSIAN APPROXIMATIONS. C INTEGER LIV, LV, P INTEGER IV(LIV) REAL B(2,P), D(P), FX, X(P), V(LV) C DIMENSION IV(59 + P), V(77 + P*(P+23)/2) C C *** PURPOSE *** C C THIS ROUTINE INTERACTS WITH SUBROUTINE RMNGB IN AN ATTEMPT C TO FIND AN P-VECTOR X* THAT MINIMIZES THE (UNCONSTRAINED) C OBJECTIVE FUNCTION FX = F(X) COMPUTED BY THE CALLER. (OFTEN C THE X* FOUND IS A LOCAL MINIMIZER RATHER THAN A GLOBAL ONE.) C C *** PARAMETERS *** C C THE PARAMETERS FOR RMNFB ARE THE SAME AS THOSE FOR MNG C (WHICH SEE), EXCEPT THAT CALCF, CALCG, UIPARM, URPARM, AND UFPARM C ARE OMITTED, AND A PARAMETER FX FOR THE OBJECTIVE FUNCTION C VALUE AT X IS ADDED. INSTEAD OF CALLING CALCG TO OBTAIN THE C GRADIENT OF THE OBJECTIVE FUNCTION AT X, RMNFB CALLS S3GRD, C WHICH COMPUTES AN APPROXIMATION TO THE GRADIENT BY FINITE C (FORWARD AND CENTRAL) DIFFERENCES USING THE METHOD OF REF. 1. C THE FOLLOWING INPUT COMPONENT IS OF INTEREST IN THIS REGARD C (AND IS NOT DESCRIBED IN MNG). C C V(ETA0)..... V(42) IS AN ESTIMATED BOUND ON THE RELATIVE ERROR IN THE C OBJECTIVE FUNCTION VALUE COMPUTED BY CALCF... C (TRUE VALUE) = (COMPUTED VALUE) * (1 + E), C WHERE ABS(E) .LE. V(ETA0). DEFAULT = MACHEP * 10**3, C WHERE MACHEP IS THE UNIT ROUNDOFF. C C THE OUTPUT VALUES IV(NFCALL) AND IV(NGCALL) HAVE DIFFERENT C MEANINGS FOR MNF THAN FOR MNG... C C IV(NFCALL)... IV(6) IS THE NUMBER OF CALLS SO FAR MADE ON CALCF (I.E., C FUNCTION EVALUATIONS) EXCLUDING THOSE MADE ONLY FOR C COMPUTING GRADIENTS. THE INPUT VALUE IV(MXFCAL) IS A C LIMIT ON IV(NFCALL). C IV(NGCALL)... IV(30) IS THE NUMBER OF FUNCTION EVALUATIONS MADE ONLY C FOR COMPUTING GRADIENTS. THE TOTAL NUMBER OF FUNCTION C EVALUATIONS IS THUS IV(NFCALL) + IV(NGCALL). C C *** REFERENCES *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (AUGUST 1982). C C---------------------------- DECLARATIONS --------------------------- C REAL D7TPR EXTERNAL IVSET, D7TPR, S3GRD, RMNGB, V7SCP C C IVSET.... SUPPLIES DEFAULT PARAMETER VALUES. C D7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C S3GRD... COMPUTES FINITE-DIFFERENCE GRADIENT APPROXIMATION. C RMNGB... REVERSE-COMMUNICATION ROUTINE THAT DOES MNGB ALGORITHM. C V7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C INTEGER ALPHA, ALPHA0, G1, I, IPI, IV1, J, K, W REAL ZERO C C *** SUBSCRIPTS FOR IV *** C INTEGER ETA0, F, G, LMAT, NEXTV, NGCALL, 1 NITER, PERM, SGIRC, TOOBIG, VNEED C C/6 C DATA ETA0/42/, F/10/, G/28/, LMAT/42/, NEXTV/47/, NGCALL/30/, C 1 NITER/31/, PERM/58/, SGIRC/57/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (ETA0=42, F=10, G=28, LMAT=42, NEXTV=47, NGCALL=30, 1 NITER=31, PERM=58, SGIRC=57, TOOBIG=2, VNEED=4) C/ C/6 C DATA ZERO/0.E+0/ C/7 PARAMETER (ZERO=0.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C IV1 = IV(1) IF (IV1 .EQ. 1) GO TO 10 IF (IV1 .EQ. 2) GO TO 50 IF (IV(1) .EQ. 0) CALL IVSET(2, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .EQ. 12 .OR. IV1 .EQ. 13) IV(VNEED) = IV(VNEED) + 2*P + 6 IF (IV1 .EQ. 14) GO TO 10 IF (IV1 .GT. 2 .AND. IV1 .LT. 12) GO TO 10 G1 = 1 IF (IV1 .EQ. 12) IV(1) = 13 GO TO 20 C 10 G1 = IV(G) C 20 CALL RMNGB(B, D, FX, V(G1), IV, LIV, LV, P, V, X) IF (IV(1) - 2) 999, 30, 80 C C *** COMPUTE GRADIENT *** C 30 IF (IV(NITER) .EQ. 0) CALL V7SCP(P, V(G1), ZERO) J = IV(LMAT) ALPHA0 = G1 - P - 1 IPI = IV(PERM) DO 40 I = 1, P K = ALPHA0 + IV(IPI) V(K) = D7TPR(I, V(J), V(J)) IPI = IPI + 1 J = J + I 40 CONTINUE C *** UNDO INCREMENT OF IV(NGCALL) DONE BY RMNGB *** IV(NGCALL) = IV(NGCALL) - 1 C *** STORE RETURN CODE FROM S3GRD IN IV(SGIRC) *** IV(SGIRC) = 0 C *** X MAY HAVE BEEN RESTORED, SO COPY BACK FX... *** FX = V(F) GO TO 60 C C *** GRADIENT LOOP *** C 50 IF (IV(TOOBIG) .NE. 0) GO TO 10 C 60 G1 = IV(G) ALPHA = G1 - P W = ALPHA - 6 CALL S3GRD(V(ALPHA), B, D, V(ETA0), FX, V(G1), IV(SGIRC), P, 1 V(W), X) I = IV(SGIRC) IF (I .EQ. 0) GO TO 10 IF (I .LE. P) GO TO 70 IV(TOOBIG) = 1 GO TO 10 C 70 IV(NGCALL) = IV(NGCALL) + 1 GO TO 999 C 80 IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(G) = IV(NEXTV) + P + 6 IV(NEXTV) = IV(G) + P IF (IV1 .NE. 13) GO TO 10 C 999 RETURN C *** LAST CARD OF RMNFB FOLLOWS *** END PyBDSF-1.10.1/src/port3/rmng.f000066400000000000000000000334531420247104600156010ustar00rootroot00000000000000 SUBROUTINE RMNG(D, FX, G, IV, LIV, LV, N, V, X) C C *** CARRY OUT MNG (UNCONSTRAINED MINIMIZATION) ITERATIONS, USING C *** DOUBLE-DOGLEG/BFGS STEPS. C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, N INTEGER IV(LIV) REAL D(N), FX, G(N), V(LV), X(N) C C-------------------------- PARAMETER USAGE -------------------------- C C D.... SCALE VECTOR. C FX... FUNCTION VALUE. C G.... GRADIENT VECTOR. C IV... INTEGER VALUE ARRAY. C LIV.. LENGTH OF IV (AT LEAST 60). C LV... LENGTH OF V (AT LEAST 71 + N*(N+13)/2). C N.... NUMBER OF VARIABLES (COMPONENTS IN X AND G). C V.... FLOATING-POINT VALUE ARRAY. C X.... VECTOR OF PARAMETERS TO BE OPTIMIZED. C C *** DISCUSSION *** C C PARAMETERS IV, N, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO MNG (WHICH SEE), EXCEPT THAT V CAN BE SHORTER (SINCE C THE PART OF V THAT MNG USES FOR STORING G IS NOT NEEDED). C MOREOVER, COMPARED WITH MNG, IV(1) MAY HAVE THE TWO ADDITIONAL C OUTPUT VALUES 1 AND 2, WHICH ARE EXPLAINED BELOW, AS IS THE USE C OF IV(TOOBIG) AND IV(NFGCAL). THE VALUE IV(G), WHICH IS AN C OUTPUT VALUE FROM MNG (AND MNF), IS NOT REFERENCED BY C RMNG OR THE SUBROUTINES IT CALLS. C FX AND G NEED NOT HAVE BEEN INITIALIZED WHEN RMNG IS CALLED C WITH IV(1) = 12, 13, OR 14. C C IV(1) = 1 MEANS THE CALLER SHOULD SET FX TO F(X), THE FUNCTION VALUE C AT X, AND CALL RMNG AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) CANNOT BE C (E.G. IF OVERFLOW WOULD OCCUR), WHICH MAY HAPPEN BECAUSE C OF AN OVERSIZED STEP. IN THIS CASE THE CALLER SHOULD SET C IV(TOOBIG) = IV(2) TO 1, WHICH WILL CAUSE RMNG TO IG- C NORE FX AND TRY A SMALLER STEP. THE PARAMETER NF THAT C MNG PASSES TO CALCF (FOR POSSIBLE _USE_ BY CALCG) IS A C COPY OF IV(NFCALL) = IV(6). C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT VECTOR C OF F AT X, AND CALL RMNG AGAIN, HAVING CHANGED NONE OF C THE OTHER PARAMETERS EXCEPT POSSIBLY THE SCALE VECTOR D C WHEN IV(DTYPE) = 0. THE PARAMETER NF THAT MNG PASSES C TO CALCG IS IV(NFGCAL) = IV(7). IF G(X) CANNOT BE C EVALUATED, THEN THE CALLER MAY SET IV(TOOBIG) TO 0, IN C WHICH CASE RMNG WILL RETURN WITH IV(1) = 65. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (DECEMBER 1979). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324 AND MCS-7906671. C C (SEE MNG FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DG1, DUMMY, G01, I, K, L, LSTGST, NWTST1, RSTRST, STEP1, 1 TEMP1, W, X01, Z REAL T C C *** CONSTANTS *** C REAL HALF, NEGONE, ONE, ONEP2, ZERO C C *** NO INTRINSIC FUNCTIONS *** C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX REAL D7TPR, RLDST, V2NRM EXTERNAL A7SST, D7DOG, IVSET, D7TPR, ITSUM, L7ITV, L7IVM, 1 L7TVM, L7UPD, L7VML, PARCK, RLDST, STOPX, V2AXY, 2 V7CPY, V7SCP, V7VMP, V2NRM, W7ZBF C C A7SST.... ASSESSES CANDIDATE STEP. C D7DOG.... COMPUTES DOUBLE-DOGLEG (CANDIDATE) STEP. C IVSET.... SUPPLIES DEFAULT IV AND V INPUT COMPONENTS. C D7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C ITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C L7ITV... MULTIPLIES INVERSE TRANSPOSE OF LOWER TRIANGLE TIMES VECTOR. C L7IVM... MULTIPLIES INVERSE OF LOWER TRIANGLE TIMES VECTOR. C L7TVM... MULTIPLIES TRANSPOSE OF LOWER TRIANGLE TIMES VECTOR. C LUPDT.... UPDATES CHOLESKY FACTOR OF HESSIAN APPROXIMATION. C L7VML.... MULTIPLIES LOWER TRIANGLE TIMES VECTOR. C PARCK.... CHECKS VALIDITY OF INPUT IV AND V VALUES. C RLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C V2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C V7VMP... MULTIPLIES VECTOR BY VECTOR RAISED TO POWER (COMPONENTWISE). C V2NRM... RETURNS THE 2-NORM OF A VECTOR. C W7ZBF... COMPUTES W AND Z FOR L7UPD CORRESPONDING TO BFGS UPDATE. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, DG, DGNORM, DINIT, DSTNRM, DST0, F, F0, FDIF, 1 GTHG, GTSTEP, G0, INCFAC, INITH, IRC, KAGQT, LMAT, LMAX0, 2 LMAXS, MODE, MODEL, MXFCAL, MXITER, NEXTV, NFCALL, NFGCAL, 3 NGCALL, NITER, NREDUC, NWTSTP, PREDUC, RADFAC, RADINC, 4 RADIUS, RAD0, RELDX, RESTOR, STEP, STGLIM, STLSTG, TOOBIG, 5 TUNER4, TUNER5, VNEED, XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA CNVCOD/55/, DG/37/, G0/48/, INITH/25/, IRC/29/, KAGQT/33/, C 1 MODE/35/, MODEL/5/, MXFCAL/17/, MXITER/18/, NFCALL/6/, C 2 NFGCAL/7/, NGCALL/30/, NITER/31/, NWTSTP/34/, RADINC/8/, C 3 RESTOR/9/, STEP/40/, STGLIM/11/, STLSTG/41/, TOOBIG/2/, C 4 VNEED/4/, XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, DG=37, G0=48, INITH=25, IRC=29, KAGQT=33, 1 MODE=35, MODEL=5, MXFCAL=17, MXITER=18, NFCALL=6, 2 NFGCAL=7, NGCALL=30, NITER=31, NWTSTP=34, RADINC=8, 3 RESTOR=9, STEP=40, STGLIM=11, STLSTG=41, TOOBIG=2, 4 VNEED=4, XIRC=13, X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DGNORM/1/, DINIT/38/, DSTNRM/2/, DST0/3/, F/10/, F0/13/, C 1 FDIF/11/, GTHG/44/, GTSTEP/4/, INCFAC/23/, LMAT/42/, C 2 LMAX0/35/, LMAXS/36/, NEXTV/47/, NREDUC/6/, PREDUC/7/, C 3 RADFAC/16/, RADIUS/8/, RAD0/9/, RELDX/17/, TUNER4/29/, C 4 TUNER5/30/ C/7 PARAMETER (DGNORM=1, DINIT=38, DSTNRM=2, DST0=3, F=10, F0=13, 1 FDIF=11, GTHG=44, GTSTEP=4, INCFAC=23, LMAT=42, 2 LMAX0=35, LMAXS=36, NEXTV=47, NREDUC=6, PREDUC=7, 3 RADFAC=16, RADIUS=8, RAD0=9, RELDX=17, TUNER4=29, 4 TUNER5=30) C/ C C/6 C DATA HALF/0.5E+0/, NEGONE/-1.E+0/, ONE/1.E+0/, ONEP2/1.2E+0/, C 1 ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, NEGONE=-1.E+0, ONE=1.E+0, ONEP2=1.2E+0, 1 ZERO=0.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 50 IF (I .EQ. 2) GO TO 60 C C *** CHECK VALIDITY OF IV AND V INPUT VALUES *** C IF (IV(1) .EQ. 0) CALL IVSET(2, IV, LIV, LV, V) IF (IV(1) .EQ. 12 .OR. IV(1) .EQ. 13) 1 IV(VNEED) = IV(VNEED) + N*(N+13)/2 CALL PARCK(2, D, IV, LIV, LV, N, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 GO TO (190, 190, 190, 190, 190, 190, 120, 90, 120, 10, 10, 20), I C C *** STORAGE ALLOCATION *** C 10 L = IV(LMAT) IV(X0) = L + N*(N+1)/2 IV(STEP) = IV(X0) + N IV(STLSTG) = IV(STEP) + N IV(G0) = IV(STLSTG) + N IV(NWTSTP) = IV(G0) + N IV(DG) = IV(NWTSTP) + N IV(NEXTV) = IV(DG) + N IF (IV(1) .NE. 13) GO TO 20 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 20 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(MODEL) = 1 IV(STGLIM) = 1 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(RADINC) = 0 V(RAD0) = ZERO IF (V(DINIT) .GE. ZERO) CALL V7SCP(N, D, V(DINIT)) IF (IV(INITH) .NE. 1) GO TO 40 C C *** SET THE INITIAL HESSIAN APPROXIMATION TO DIAG(D)**-2 *** C L = IV(LMAT) CALL V7SCP(N*(N+1)/2, V(L), ZERO) K = L - 1 DO 30 I = 1, N K = K + I T = D(I) IF (T .LE. ZERO) T = ONE V(K) = T 30 CONTINUE C C *** COMPUTE INITIAL FUNCTION VALUE *** C 40 IV(1) = 1 GO TO 999 C 50 V(F) = FX IF (IV(MODE) .GE. 0) GO TO 190 V(F0) = FX IV(1) = 2 IF (IV(TOOBIG) .EQ. 0) GO TO 999 IV(1) = 63 GO TO 350 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C 60 IF (IV(TOOBIG) .EQ. 0) GO TO 70 IV(1) = 65 GO TO 350 C 70 DG1 = IV(DG) CALL V7VMP(N, V(DG1), G, D, -1) V(DGNORM) = V2NRM(N, V(DG1)) C IF (IV(CNVCOD) .NE. 0) GO TO 340 IF (IV(MODE) .EQ. 0) GO TO 300 C C *** ALLOW FIRST STEP TO HAVE SCALED 2-NORM AT MOST V(LMAX0) *** C V(RADIUS) = V(LMAX0) C IV(MODE) = 0 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 80 CALL ITSUM(D, G, IV, LIV, LV, N, V, X) 90 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 100 IV(1) = 10 GO TO 350 C C *** UPDATE RADIUS *** C 100 IV(NITER) = K + 1 IF (K .GT. 0) V(RADIUS) = V(RADFAC) * V(DSTNRM) C C *** INITIALIZE FOR START OF NEXT ITERATION *** C G01 = IV(G0) X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(KAGQT) = -1 C C *** COPY X TO X0, G TO G0 *** C CALL V7CPY(N, V(X01), X) CALL V7CPY(N, V(G01), G) C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 110 IF (.NOT. STOPX(DUMMY)) GO TO 130 IV(1) = 11 GO TO 140 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 120 IF (V(F) .GE. V(F0)) GO TO 130 V(RADFAC) = ONE K = IV(NITER) GO TO 100 C 130 IF (IV(NFCALL) .LT. IV(MXFCAL)) GO TO 150 IV(1) = 9 140 IF (V(F) .GE. V(F0)) GO TO 350 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 290 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 150 STEP1 = IV(STEP) DG1 = IV(DG) NWTST1 = IV(NWTSTP) IF (IV(KAGQT) .GE. 0) GO TO 160 L = IV(LMAT) CALL L7IVM(N, V(NWTST1), V(L), G) V(NREDUC) = HALF * D7TPR(N, V(NWTST1), V(NWTST1)) CALL L7ITV(N, V(NWTST1), V(L), V(NWTST1)) CALL V7VMP(N, V(STEP1), V(NWTST1), D, 1) V(DST0) = V2NRM(N, V(STEP1)) CALL V7VMP(N, V(DG1), V(DG1), D, -1) CALL L7TVM(N, V(STEP1), V(L), V(DG1)) V(GTHG) = V2NRM(N, V(STEP1)) IV(KAGQT) = 0 160 CALL D7DOG(V(DG1), LV, N, V(NWTST1), V(STEP1), V) IF (IV(IRC) .NE. 6) GO TO 170 IF (IV(RESTOR) .NE. 2) GO TO 190 RSTRST = 2 GO TO 200 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 170 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 190 IF (IV(IRC) .NE. 5) GO TO 180 IF (V(RADFAC) .LE. ONE) GO TO 180 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 180 IF (IV(RESTOR) .NE. 2) GO TO 190 RSTRST = 0 GO TO 200 C C *** COMPUTE F(X0 + STEP) *** C 180 X01 = IV(X0) STEP1 = IV(STEP) CALL V2AXY(N, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 999 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 190 RSTRST = 3 200 X01 = IV(X0) V(RELDX) = RLDST(N, D, X, V(X01)) CALL A7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = IV(STLSTG) I = IV(RESTOR) + 1 GO TO (240, 210, 220, 230), I 210 CALL V7CPY(N, X, V(X01)) GO TO 240 220 CALL V7CPY(N, V(LSTGST), V(STEP1)) GO TO 240 230 CALL V7CPY(N, V(STEP1), V(LSTGST)) CALL V2AXY(N, X, ONE, V(STEP1), V(X01)) V(RELDX) = RLDST(N, D, X, V(X01)) IV(RESTOR) = RSTRST C 240 K = IV(IRC) GO TO (250,280,280,280,250,260,270,270,270,270,270,270,330,300), K C C *** RECOMPUTE STEP WITH CHANGED RADIUS *** C 250 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 110 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST. C 260 V(RADIUS) = V(LMAXS) GO TO 150 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 270 IV(CNVCOD) = K - 4 IF (V(F) .GE. V(F0)) GO TO 340 IF (IV(XIRC) .EQ. 14) GO TO 340 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 280 IF (IV(IRC) .NE. 3) GO TO 290 STEP1 = IV(STEP) TEMP1 = IV(STLSTG) C C *** SET TEMP1 = HESSIAN * STEP FOR _USE_ IN GRADIENT TESTS *** C L = IV(LMAT) CALL L7TVM(N, V(TEMP1), V(L), V(STEP1)) CALL L7VML(N, V(TEMP1), V(L), V(TEMP1)) C C *** COMPUTE GRADIENT *** C 290 IV(NGCALL) = IV(NGCALL) + 1 IV(1) = 2 GO TO 999 C C *** INITIALIZATIONS -- G0 = G - G0, ETC. *** C 300 G01 = IV(G0) CALL V2AXY(N, V(G01), NEGONE, V(G01), G) STEP1 = IV(STEP) TEMP1 = IV(STLSTG) IF (IV(IRC) .NE. 3) GO TO 320 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C C *** SET TEMP1 = DIAG(D)**-1 * (HESSIAN*STEP + (G(X0)-G(X))) *** C CALL V2AXY(N, V(TEMP1), NEGONE, V(G01), V(TEMP1)) CALL V7VMP(N, V(TEMP1), V(TEMP1), D, -1) C C *** DO GRADIENT TESTS *** C IF ( V2NRM(N, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) 1 GO TO 310 IF ( D7TPR(N, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 320 310 V(RADFAC) = V(INCFAC) C C *** UPDATE H, LOOP *** C 320 W = IV(NWTSTP) Z = IV(X0) L = IV(LMAT) CALL W7ZBF(V(L), N, V(STEP1), V(W), V(G01), V(Z)) C C ** _USE_ THE N-VECTORS STARTING AT V(STEP1) AND V(G01) FOR SCRATCH.. CALL L7UPD(V(TEMP1), V(STEP1), V(L), V(G01), V(L), N, V(W), V(Z)) IV(1) = 2 GO TO 80 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 330 IV(1) = 64 GO TO 350 C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 340 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 350 CALL ITSUM(D, G, IV, LIV, LV, N, V, X) C 999 RETURN C C *** LAST LINE OF RMNG FOLLOWS *** END PyBDSF-1.10.1/src/port3/rmngb.f000066400000000000000000000375411420247104600157450ustar00rootroot00000000000000 SUBROUTINE RMNGB(B, D, FX, G, IV, LIV, LV, N, V, X) C C *** CARRY OUT MNGB (SIMPLY BOUNDED MINIMIZATION) ITERATIONS, C *** USING DOUBLE-DOGLEG/BFGS STEPS. C C *** PARAMETER DECLARATIONS *** C INTEGER LIV, LV, N INTEGER IV(LIV) REAL B(2,N), D(N), FX, G(N), V(LV), X(N) C C-------------------------- PARAMETER USAGE -------------------------- C C B.... VECTOR OF LOWER AND UPPER BOUNDS ON X. C D.... SCALE VECTOR. C FX... FUNCTION VALUE. C G.... GRADIENT VECTOR. C IV... INTEGER VALUE ARRAY. C LIV.. LENGTH OF IV (AT LEAST 59) + N. C LV... LENGTH OF V (AT LEAST 71 + N*(N+19)/2). C N.... NUMBER OF VARIABLES (COMPONENTS IN X AND G). C V.... FLOATING-POINT VALUE ARRAY. C X.... VECTOR OF PARAMETERS TO BE OPTIMIZED. C C *** DISCUSSION *** C C PARAMETERS IV, N, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO MNGB (WHICH SEE), EXCEPT THAT V CAN BE SHORTER (SINCE C THE PART OF V THAT MNGB USES FOR STORING G IS NOT NEEDED). C MOREOVER, COMPARED WITH MNGB, IV(1) MAY HAVE THE TWO ADDITIONAL C OUTPUT VALUES 1 AND 2, WHICH ARE EXPLAINED BELOW, AS IS THE USE C OF IV(TOOBIG) AND IV(NFGCAL). THE VALUE IV(G), WHICH IS AN C OUTPUT VALUE FROM MNGB (AND SMSNOB), IS NOT REFERENCED BY C RMNGB OR THE SUBROUTINES IT CALLS. C FX AND G NEED NOT HAVE BEEN INITIALIZED WHEN RMNGB IS CALLED C WITH IV(1) = 12, 13, OR 14. C C IV(1) = 1 MEANS THE CALLER SHOULD SET FX TO F(X), THE FUNCTION VALUE C AT X, AND CALL RMNGB AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) CANNOT BE C (E.G. IF OVERFLOW WOULD OCCUR), WHICH MAY HAPPEN BECAUSE C OF AN OVERSIZED STEP. IN THIS CASE THE CALLER SHOULD SET C IV(TOOBIG) = IV(2) TO 1, WHICH WILL CAUSE RMNGB TO IG- C NORE FX AND TRY A SMALLER STEP. THE PARAMETER NF THAT C MNGB PASSES TO CALCF (FOR POSSIBLE _USE_ BY CALCG) IS A C COPY OF IV(NFCALL) = IV(6). C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT VECTOR C OF F AT X, AND CALL RMNGB AGAIN, HAVING CHANGED NONE OF C THE OTHER PARAMETERS EXCEPT POSSIBLY THE SCALE VECTOR D C WHEN IV(DTYPE) = 0. THE PARAMETER NF THAT MNGB PASSES C TO CALCG IS IV(NFGCAL) = IV(7). IF G(X) CANNOT BE C EVALUATED, THEN THE CALLER MAY SET IV(NFGCAL) TO 0, IN C WHICH CASE RMNGB WILL RETURN WITH IV(1) = 65. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (DECEMBER 1979). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324 AND MCS-7906671. C C (SEE MNG FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DG1, DSTEP1, DUMMY, G01, I, I1, IPI, IPN, J, K, L, LSTGST, 1 N1, NP1, NWTST1, RSTRST, STEP1, TEMP0, TEMP1, TD1, TG1, 2 W1, X01, Z REAL GI, T, XI C C *** CONSTANTS *** C REAL NEGONE, ONE, ONEP2, ZERO C C *** NO INTRINSIC FUNCTIONS *** C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX REAL D7TPR, RLDST, V2NRM EXTERNAL A7SST, D7DGB, IVSET, D7TPR, I7SHFT, ITSUM, L7TVM, 1 L7UPD, L7VML, PARCK, Q7RSH, RLDST, STOPX, V2NRM, 2 V2AXY, V7CPY, V7IPR, V7SCP, V7VMP, W7ZBF C C A7SST.... ASSESSES CANDIDATE STEP. C D7DGB... COMPUTES SIMPLY BOUNDED DOUBLE-DOGLEG (CANDIDATE) STEP. C IVSET.... SUPPLIES DEFAULT IV AND V INPUT COMPONENTS. C D7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C I7SHFT... CYCLICALLLY SHIFTS AN ARRAY OF INTEGERS. C ITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C L7TVM... MULTIPLIES TRANSPOSE OF LOWER TRIANGLE TIMES VECTOR. C LUPDT.... UPDATES CHOLESKY FACTOR OF HESSIAN APPROXIMATION. C L7VML.... MULTIPLIES LOWER TRIANGLE TIMES VECTOR. C PARCK.... CHECKS VALIDITY OF INPUT IV AND V VALUES. C Q7RSH... CYCLICALLY SHIFTS CHOLESKY FACTOR. C RLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C V2NRM... RETURNS THE 2-NORM OF A VECTOR. C V2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7IPR... CYCLICALLY SHIFTS A FLOATING-POINT ARRAY. C V7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C V7VMP... MULTIPLIES VECTOR BY VECTOR RAISED TO POWER (COMPONENTWISE). C W7ZBF... COMPUTES W AND Z FOR L7UPD CORRESPONDING TO BFGS UPDATE. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, DG, DGNORM, DINIT, DSTNRM, F, F0, FDIF, 1 GTSTEP, INCFAC, INITH, IRC, IVNEED, KAGQT, LMAT, 2 LMAX0, LMAXS, MODE, MODEL, MXFCAL, MXITER, NC, NEXTIV, 3 NEXTV, NFCALL, NFGCAL, NGCALL, NITER, NWTSTP, PERM, 4 PREDUC, RADFAC, RADINC, RADIUS, RAD0, RELDX, RESTOR, STEP, 4 STGLIM, STLSTG, TOOBIG, TUNER4, TUNER5, VNEED, XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C *** (NOTE THAT NC IS STORED IN IV(G0)) *** C C/6 C DATA CNVCOD/55/, DG/37/, INITH/25/, IRC/29/, IVNEED/3/, KAGQT/33/, C 1 MODE/35/, MODEL/5/, MXFCAL/17/, MXITER/18/, NC/48/, C 2 NEXTIV/46/, NEXTV/47/, NFCALL/6/, NFGCAL/7/, NGCALL/30/, C 3 NITER/31/, NWTSTP/34/, PERM/58/, RADINC/8/, RESTOR/9/, C 4 STEP/40/, STGLIM/11/, STLSTG/41/, TOOBIG/2/, XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, DG=37, INITH=25, IRC=29, IVNEED=3, KAGQT=33, 1 MODE=35, MODEL=5, MXFCAL=17, MXITER=18, NC=48, 2 NEXTIV=46, NEXTV=47, NFCALL=6, NFGCAL=7, NGCALL=30, 3 NITER=31, NWTSTP=34, PERM=58, RADINC=8, RESTOR=9, 4 STEP=40, STGLIM=11, STLSTG=41, TOOBIG=2, XIRC=13, 5 X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DGNORM/1/, DINIT/38/, DSTNRM/2/, F/10/, F0/13/, FDIF/11/, C 1 GTSTEP/4/, INCFAC/23/, LMAT/42/, LMAX0/35/, LMAXS/36/, C 2 PREDUC/7/, RADFAC/16/, RADIUS/8/, RAD0/9/, RELDX/17/, C 3 TUNER4/29/, TUNER5/30/, VNEED/4/ C/7 PARAMETER (DGNORM=1, DINIT=38, DSTNRM=2, F=10, F0=13, FDIF=11, 1 GTSTEP=4, INCFAC=23, LMAT=42, LMAX0=35, LMAXS=36, 2 PREDUC=7, RADFAC=16, RADIUS=8, RAD0=9, RELDX=17, 3 TUNER4=29, TUNER5=30, VNEED=4) C/ C C/6 C DATA NEGONE/-1.E+0/, ONE/1.E+0/, ONEP2/1.2E+0/, ZERO/0.E+0/ C/7 PARAMETER (NEGONE=-1.E+0, ONE=1.E+0, ONEP2=1.2E+0, ZERO=0.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 70 IF (I .EQ. 2) GO TO 80 C C *** CHECK VALIDITY OF IV AND V INPUT VALUES *** C IF (IV(1) .EQ. 0) CALL IVSET(2, IV, LIV, LV, V) IF (IV(1) .LT. 12) GO TO 10 IF (IV(1) .GT. 13) GO TO 10 IV(VNEED) = IV(VNEED) + N*(N+19)/2 IV(IVNEED) = IV(IVNEED) + N 10 CALL PARCK(2, D, IV, LIV, LV, N, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 GO TO (250, 250, 250, 250, 250, 250, 190, 150, 190, 20, 20, 30), I C C *** STORAGE ALLOCATION *** C 20 L = IV(LMAT) IV(X0) = L + N*(N+1)/2 IV(STEP) = IV(X0) + 2*N IV(STLSTG) = IV(STEP) + 2*N IV(NWTSTP) = IV(STLSTG) + N IV(DG) = IV(NWTSTP) + 2*N IV(NEXTV) = IV(DG) + 2*N IV(NEXTIV) = IV(PERM) + N IF (IV(1) .NE. 13) GO TO 30 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 30 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(MODEL) = 1 IV(STGLIM) = 1 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(RADINC) = 0 IV(NC) = N V(RAD0) = ZERO C C *** CHECK CONSISTENCY OF B AND INITIALIZE IP ARRAY *** C IPI = IV(PERM) DO 40 I = 1, N IV(IPI) = I IPI = IPI + 1 IF (B(1,I) .GT. B(2,I)) GO TO 410 40 CONTINUE C IF (V(DINIT) .GE. ZERO) CALL V7SCP(N, D, V(DINIT)) IF (IV(INITH) .NE. 1) GO TO 60 C C *** SET THE INITIAL HESSIAN APPROXIMATION TO DIAG(D)**-2 *** C L = IV(LMAT) CALL V7SCP(N*(N+1)/2, V(L), ZERO) K = L - 1 DO 50 I = 1, N K = K + I T = D(I) IF (T .LE. ZERO) T = ONE V(K) = T 50 CONTINUE C C *** GET INITIAL FUNCTION VALUE *** C 60 IV(1) = 1 GO TO 440 C 70 V(F) = FX IF (IV(MODE) .GE. 0) GO TO 250 V(F0) = FX IV(1) = 2 IF (IV(TOOBIG) .EQ. 0) GO TO 999 IV(1) = 63 GO TO 430 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C 80 IF (IV(TOOBIG) .EQ. 0) GO TO 90 IV(1) = 65 GO TO 430 C C *** CHOOSE INITIAL PERMUTATION *** C 90 IPI = IV(PERM) IPN = IPI + N N1 = N NP1 = N + 1 L = IV(LMAT) W1 = IV(NWTSTP) + N K = N - IV(NC) DO 120 I = 1, N IPN = IPN - 1 J = IV(IPN) IF (B(1,J) .GE. B(2,J)) GO TO 100 XI = X(J) GI = G(J) IF (XI .LE. B(1,J) .AND. GI .GT. ZERO) GO TO 100 IF (XI .GE. B(2,J) .AND. GI .LT. ZERO) GO TO 100 C *** DISALLOW CONVERGENCE IF X(J) HAS JUST BEEN FREED *** IF (I .LE. K) IV(CNVCOD) = 0 GO TO 120 100 I1 = NP1 - I IF (I1 .GE. N1) GO TO 110 CALL I7SHFT(N1, I1, IV(IPI)) CALL Q7RSH(I1, N1, .FALSE., G, V(L), V(W1)) 110 N1 = N1 - 1 120 CONTINUE C IV(NC) = N1 V(DGNORM) = ZERO IF (N1 .LE. 0) GO TO 130 DG1 = IV(DG) CALL V7VMP(N, V(DG1), G, D, -1) CALL V7IPR(N, IV(IPI), V(DG1)) V(DGNORM) = V2NRM(N1, V(DG1)) 130 IF (IV(CNVCOD) .NE. 0) GO TO 420 IF (IV(MODE) .EQ. 0) GO TO 370 C C *** ALLOW FIRST STEP TO HAVE SCALED 2-NORM AT MOST V(LMAX0) *** C V(RADIUS) = V(LMAX0) C IV(MODE) = 0 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 140 CALL ITSUM(D, G, IV, LIV, LV, N, V, X) 150 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 160 IV(1) = 10 GO TO 430 C C *** UPDATE RADIUS *** C 160 IV(NITER) = K + 1 IF (K .EQ. 0) GO TO 170 T = V(RADFAC) * V(DSTNRM) IF (V(RADFAC) .LT. ONE .OR. T .GT. V(RADIUS)) V(RADIUS) = T C C *** INITIALIZE FOR START OF NEXT ITERATION *** C 170 X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(KAGQT) = -1 C C *** COPY X TO X0 *** C CALL V7CPY(N, V(X01), X) C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 180 IF (.NOT. STOPX(DUMMY)) GO TO 200 IV(1) = 11 GO TO 210 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 190 IF (V(F) .GE. V(F0)) GO TO 200 V(RADFAC) = ONE K = IV(NITER) GO TO 160 C 200 IF (IV(NFCALL) .LT. IV(MXFCAL)) GO TO 220 IV(1) = 9 210 IF (V(F) .GE. V(F0)) GO TO 430 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 360 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 220 STEP1 = IV(STEP) DG1 = IV(DG) NWTST1 = IV(NWTSTP) W1 = NWTST1 + N DSTEP1 = STEP1 + N IPI = IV(PERM) L = IV(LMAT) TG1 = DG1 + N X01 = IV(X0) TD1 = X01 + N CALL D7DGB(B, D, V(DG1), V(DSTEP1), G, IV(IPI), IV(KAGQT), 1 V(L), LV, N, IV(NC), V(NWTST1), V(STEP1), V(TD1), 2 V(TG1), V, V(W1), V(X01)) IF (IV(IRC) .NE. 6) GO TO 230 IF (IV(RESTOR) .NE. 2) GO TO 250 RSTRST = 2 GO TO 260 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 230 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 250 IF (IV(IRC) .NE. 5) GO TO 240 IF (V(RADFAC) .LE. ONE) GO TO 240 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 240 IF (IV(RESTOR) .NE. 2) GO TO 250 RSTRST = 0 GO TO 260 C C *** COMPUTE F(X0 + STEP) *** C 240 CALL V2AXY(N, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 440 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 250 RSTRST = 3 260 X01 = IV(X0) V(RELDX) = RLDST(N, D, X, V(X01)) CALL A7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = IV(STLSTG) I = IV(RESTOR) + 1 GO TO (300, 270, 280, 290), I 270 CALL V7CPY(N, X, V(X01)) GO TO 300 280 CALL V7CPY(N, V(LSTGST), X) GO TO 300 290 CALL V7CPY(N, X, V(LSTGST)) CALL V2AXY(N, V(STEP1), NEGONE, V(X01), X) V(RELDX) = RLDST(N, D, X, V(X01)) IV(RESTOR) = RSTRST C 300 K = IV(IRC) GO TO (310,340,340,340,310,320,330,330,330,330,330,330,400,370), K C C *** RECOMPUTE STEP WITH CHANGED RADIUS *** C 310 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 180 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST. C 320 V(RADIUS) = V(LMAXS) GO TO 220 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 330 IV(CNVCOD) = K - 4 IF (V(F) .GE. V(F0)) GO TO 420 IF (IV(XIRC) .EQ. 14) GO TO 420 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 340 X01 = IV(X0) STEP1 = IV(STEP) CALL V2AXY(N, V(STEP1), NEGONE, V(X01), X) IF (IV(IRC) .NE. 3) GO TO 360 C C *** SET TEMP1 = HESSIAN * STEP FOR _USE_ IN GRADIENT TESTS *** C C *** _USE_ X0 AS TEMPORARY... C IPI = IV(PERM) CALL V7CPY(N, V(X01), V(STEP1)) CALL V7IPR(N, IV(IPI), V(X01)) L = IV(LMAT) CALL L7TVM(N, V(X01), V(L), V(X01)) CALL L7VML(N, V(X01), V(L), V(X01)) C C *** UNPERMUTE X0 INTO TEMP1 *** C TEMP1 = IV(STLSTG) TEMP0 = TEMP1 - 1 DO 350 I = 1, N J = IV(IPI) IPI = IPI + 1 K = TEMP0 + J V(K) = V(X01) X01 = X01 + 1 350 CONTINUE C C *** SAVE OLD GRADIENT, COMPUTE NEW ONE *** C 360 G01 = IV(NWTSTP) + N CALL V7CPY(N, V(G01), G) IV(NGCALL) = IV(NGCALL) + 1 IV(TOOBIG) = 0 IV(1) = 2 GO TO 999 C C *** INITIALIZATIONS -- G0 = G - G0, ETC. *** C 370 G01 = IV(NWTSTP) + N CALL V2AXY(N, V(G01), NEGONE, V(G01), G) STEP1 = IV(STEP) TEMP1 = IV(STLSTG) IF (IV(IRC) .NE. 3) GO TO 390 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C C *** SET TEMP1 = DIAG(D)**-1 * (HESSIAN*STEP + (G(X0)-G(X))) *** C CALL V2AXY(N, V(TEMP1), NEGONE, V(G01), V(TEMP1)) CALL V7VMP(N, V(TEMP1), V(TEMP1), D, -1) C C *** DO GRADIENT TESTS *** C IF ( V2NRM(N, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) 1 GO TO 380 IF ( D7TPR(N, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 390 380 V(RADFAC) = V(INCFAC) C C *** UPDATE H, LOOP *** C 390 W1 = IV(NWTSTP) Z = IV(X0) L = IV(LMAT) IPI = IV(PERM) CALL V7IPR(N, IV(IPI), V(STEP1)) CALL V7IPR(N, IV(IPI), V(G01)) CALL W7ZBF(V(L), N, V(STEP1), V(W1), V(G01), V(Z)) C C ** _USE_ THE N-VECTORS STARTING AT V(STEP1) AND V(G01) FOR SCRATCH.. CALL L7UPD(V(TEMP1), V(STEP1), V(L), V(G01), V(L), N, V(W1), 1 V(Z)) IV(1) = 2 GO TO 140 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 400 IV(1) = 64 GO TO 430 C C *** INCONSISTENT B *** C 410 IV(1) = 82 GO TO 430 C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 420 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 430 CALL ITSUM(D, G, IV, LIV, LV, N, V, X) GO TO 999 C C *** PROJECT X INTO FEASIBLE REGION (PRIOR TO COMPUTING F OR G) *** C 440 DO 450 I = 1, N IF (X(I) .LT. B(1,I)) X(I) = B(1,I) IF (X(I) .GT. B(2,I)) X(I) = B(2,I) 450 CONTINUE C 999 RETURN C C *** LAST CARD OF RMNGB FOLLOWS *** END PyBDSF-1.10.1/src/port3/rmnh.f000066400000000000000000000331331420247104600155750ustar00rootroot00000000000000 SUBROUTINE RMNH(D, FX, G, H, IV, LH, LIV, LV, N, V, X) C C *** CARRY OUT MNH (UNCONSTRAINED MINIMIZATION) ITERATIONS, USING C *** HESSIAN MATRIX PROVIDED BY THE CALLER. C C *** PARAMETER DECLARATIONS *** C INTEGER LH, LIV, LV, N INTEGER IV(LIV) REAL D(N), FX, G(N), H(LH), V(LV), X(N) C C-------------------------- PARAMETER USAGE -------------------------- C C D.... SCALE VECTOR. C FX... FUNCTION VALUE. C G.... GRADIENT VECTOR. C H.... LOWER TRIANGLE OF THE HESSIAN, STORED ROWWISE. C IV... INTEGER VALUE ARRAY. C LH... LENGTH OF H = P*(P+1)/2. C LIV.. LENGTH OF IV (AT LEAST 60). C LV... LENGTH OF V (AT LEAST 78 + N*(N+21)/2). C N.... NUMBER OF VARIABLES (COMPONENTS IN X AND G). C V.... FLOATING-POINT VALUE ARRAY. C X.... PARAMETER VECTOR. C C *** DISCUSSION *** C C PARAMETERS IV, N, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO MNH (WHICH SEE), EXCEPT THAT V CAN BE SHORTER (SINCE C THE PART OF V THAT MNH USES FOR STORING G AND H IS NOT NEEDED). C MOREOVER, COMPARED WITH MNH, IV(1) MAY HAVE THE TWO ADDITIONAL C OUTPUT VALUES 1 AND 2, WHICH ARE EXPLAINED BELOW, AS IS THE USE C OF IV(TOOBIG) AND IV(NFGCAL). THE VALUE IV(G), WHICH IS AN C OUTPUT VALUE FROM MNH, IS NOT REFERENCED BY RMNH OR THE C SUBROUTINES IT CALLS. C C IV(1) = 1 MEANS THE CALLER SHOULD SET FX TO F(X), THE FUNCTION VALUE C AT X, AND CALL RMNH AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) CANNOT BE C COMPUTED (E.G. IF OVERFLOW WOULD OCCUR), WHICH MAY HAPPEN C BECAUSE OF AN OVERSIZED STEP. IN THIS CASE THE CALLER C SHOULD SET IV(TOOBIG) = IV(2) TO 1, WHICH WILL CAUSE C RMNH TO IGNORE FX AND TRY A SMALLER STEP. THE PARA- C METER NF THAT MNH PASSES TO CALCF (FOR POSSIBLE _USE_ BY C CALCGH) IS A COPY OF IV(NFCALL) = IV(6). C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT OF F AT C X, AND H TO THE LOWER TRIANGLE OF H(X), THE HESSIAN OF F C AT X, AND CALL RMNH AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS EXCEPT PERHAPS THE SCALE VECTOR D. C THE PARAMETER NF THAT MNH PASSES TO CALCG IS C IV(NFGCAL) = IV(7). IF G(X) AND H(X) CANNOT BE EVALUATED, C THEN THE CALLER MAY SET IV(TOOBIG) TO 0, IN WHICH CASE C RMNH WILL RETURN WITH IV(1) = 65. C NOTE -- RMNH OVERWRITES H WITH THE LOWER TRIANGLE C OF DIAG(D)**-1 * H(X) * DIAG(D)**-1. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER 1980). REVISED SEPT. 1982. C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C IN PART BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS C MCS-7600324 AND MCS-7906671. C C (SEE MNG AND MNH FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DG1, DUMMY, I, J, K, L, LSTGST, NN1O2, RSTRST, STEP1, 1 TEMP1, W1, X01 REAL T C C *** CONSTANTS *** C REAL ONE, ONEP2, ZERO C C *** NO INTRINSIC FUNCTIONS *** C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX REAL D7TPR, RLDST, V2NRM EXTERNAL A7SST, IVSET, D7TPR, D7DUP, G7QTS, ITSUM, PARCK, 1 RLDST, S7LVM, STOPX, V2AXY, V7CPY, V7SCP, V2NRM C C A7SST.... ASSESSES CANDIDATE STEP. C IVSET.... PROVIDES DEFAULT IV AND V INPUT VALUES. C D7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C D7DUP.... UPDATES SCALE VECTOR D. C G7QTS.... COMPUTES OPTIMALLY LOCALLY CONSTRAINED STEP. C ITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C PARCK.... CHECKS VALIDITY OF INPUT IV AND V VALUES. C RLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C S7LVM... MULTIPLIES SYMMETRIC MATRIX TIMES VECTOR, GIVEN THE LOWER C TRIANGLE OF THE MATRIX. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C V2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C V2NRM... RETURNS THE 2-NORM OF A VECTOR. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, DG, DGNORM, DINIT, DSTNRM, DTINIT, DTOL, 1 DTYPE, D0INIT, F, F0, FDIF, GTSTEP, INCFAC, IRC, KAGQT, 2 LMAT, LMAX0, LMAXS, MODE, MODEL, MXFCAL, MXITER, NEXTV, 3 NFCALL, NFGCAL, NGCALL, NITER, PHMXFC, PREDUC, RADFAC, 4 RADINC, RADIUS, RAD0, RELDX, RESTOR, STEP, STGLIM, STLSTG, 5 STPPAR, TOOBIG, TUNER4, TUNER5, VNEED, W, XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA CNVCOD/55/, DG/37/, DTOL/59/, DTYPE/16/, IRC/29/, KAGQT/33/, C 1 LMAT/42/, MODE/35/, MODEL/5/, MXFCAL/17/, MXITER/18/, C 2 NEXTV/47/, NFCALL/6/, NFGCAL/7/, NGCALL/30/, NITER/31/, C 3 RADINC/8/, RESTOR/9/, STEP/40/, STGLIM/11/, STLSTG/41/, C 4 TOOBIG/2/, VNEED/4/, W/34/, XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, DG=37, DTOL=59, DTYPE=16, IRC=29, KAGQT=33, 1 LMAT=42, MODE=35, MODEL=5, MXFCAL=17, MXITER=18, 2 NEXTV=47, NFCALL=6, NFGCAL=7, NGCALL=30, NITER=31, 3 RADINC=8, RESTOR=9, STEP=40, STGLIM=11, STLSTG=41, 4 TOOBIG=2, VNEED=4, W=34, XIRC=13, X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DGNORM/1/, DINIT/38/, DSTNRM/2/, DTINIT/39/, D0INIT/40/, C 1 F/10/, F0/13/, FDIF/11/, GTSTEP/4/, INCFAC/23/, LMAX0/35/, C 2 LMAXS/36/, PHMXFC/21/, PREDUC/7/, RADFAC/16/, RADIUS/8/, C 3 RAD0/9/, RELDX/17/, STPPAR/5/, TUNER4/29/, TUNER5/30/ C/7 PARAMETER (DGNORM=1, DINIT=38, DSTNRM=2, DTINIT=39, D0INIT=40, 1 F=10, F0=13, FDIF=11, GTSTEP=4, INCFAC=23, LMAX0=35, 2 LMAXS=36, PHMXFC=21, PREDUC=7, RADFAC=16, RADIUS=8, 3 RAD0=9, RELDX=17, STPPAR=5, TUNER4=29, TUNER5=30) C/ C C/6 C DATA ONE/1.E+0/, ONEP2/1.2E+0/, ZERO/0.E+0/ C/7 PARAMETER (ONE=1.E+0, ONEP2=1.2E+0, ZERO=0.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 30 IF (I .EQ. 2) GO TO 40 C C *** CHECK VALIDITY OF IV AND V INPUT VALUES *** C IF (IV(1) .EQ. 0) CALL IVSET(2, IV, LIV, LV, V) IF (IV(1) .EQ. 12 .OR. IV(1) .EQ. 13) 1 IV(VNEED) = IV(VNEED) + N*(N+21)/2 + 7 CALL PARCK(2, D, IV, LIV, LV, N, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 NN1O2 = N * (N + 1) / 2 IF (LH .GE. NN1O2) GO TO (220,220,220,220,220,220,160,120,160, 1 10,10,20), I IV(1) = 66 GO TO 400 C C *** STORAGE ALLOCATION *** C 10 IV(DTOL) = IV(LMAT) + NN1O2 IV(X0) = IV(DTOL) + 2*N IV(STEP) = IV(X0) + N IV(STLSTG) = IV(STEP) + N IV(DG) = IV(STLSTG) + N IV(W) = IV(DG) + N IV(NEXTV) = IV(W) + 4*N + 7 IF (IV(1) .NE. 13) GO TO 20 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 20 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(MODEL) = 1 IV(STGLIM) = 1 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(RADINC) = 0 V(RAD0) = ZERO V(STPPAR) = ZERO IF (V(DINIT) .GE. ZERO) CALL V7SCP(N, D, V(DINIT)) K = IV(DTOL) IF (V(DTINIT) .GT. ZERO) CALL V7SCP(N, V(K), V(DTINIT)) K = K + N IF (V(D0INIT) .GT. ZERO) CALL V7SCP(N, V(K), V(D0INIT)) IV(1) = 1 GO TO 999 C 30 V(F) = FX IF (IV(MODE) .GE. 0) GO TO 220 V(F0) = FX IV(1) = 2 IF (IV(TOOBIG) .EQ. 0) GO TO 999 IV(1) = 63 GO TO 400 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C 40 IF (IV(TOOBIG) .EQ. 0) GO TO 50 IV(1) = 65 GO TO 400 C C *** UPDATE THE SCALE VECTOR D *** C 50 DG1 = IV(DG) IF (IV(DTYPE) .LE. 0) GO TO 70 K = DG1 J = 0 DO 60 I = 1, N J = J + I V(K) = H(J) K = K + 1 60 CONTINUE CALL D7DUP(D, V(DG1), IV, LIV, LV, N, V) C C *** COMPUTE SCALED GRADIENT AND ITS NORM *** C 70 DG1 = IV(DG) K = DG1 DO 80 I = 1, N V(K) = G(I) / D(I) K = K + 1 80 CONTINUE V(DGNORM) = V2NRM(N, V(DG1)) C C *** COMPUTE SCALED HESSIAN *** C K = 1 DO 100 I = 1, N T = ONE / D(I) DO 90 J = 1, I H(K) = T * H(K) / D(J) K = K + 1 90 CONTINUE 100 CONTINUE C IF (IV(CNVCOD) .NE. 0) GO TO 390 IF (IV(MODE) .EQ. 0) GO TO 350 C C *** ALLOW FIRST STEP TO HAVE SCALED 2-NORM AT MOST V(LMAX0) *** C V(RADIUS) = V(LMAX0) / (ONE + V(PHMXFC)) C IV(MODE) = 0 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 110 CALL ITSUM(D, G, IV, LIV, LV, N, V, X) 120 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 130 IV(1) = 10 GO TO 400 C 130 IV(NITER) = K + 1 C C *** INITIALIZE FOR START OF NEXT ITERATION *** C DG1 = IV(DG) X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(KAGQT) = -1 C C *** COPY X TO X0 *** C CALL V7CPY(N, V(X01), X) C C *** UPDATE RADIUS *** C IF (K .EQ. 0) GO TO 150 STEP1 = IV(STEP) K = STEP1 DO 140 I = 1, N V(K) = D(I) * V(K) K = K + 1 140 CONTINUE V(RADIUS) = V(RADFAC) * V2NRM(N, V(STEP1)) C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 150 IF (.NOT. STOPX(DUMMY)) GO TO 170 IV(1) = 11 GO TO 180 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 160 IF (V(F) .GE. V(F0)) GO TO 170 V(RADFAC) = ONE K = IV(NITER) GO TO 130 C 170 IF (IV(NFCALL) .LT. IV(MXFCAL)) GO TO 190 IV(1) = 9 180 IF (V(F) .GE. V(F0)) GO TO 400 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 340 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 190 STEP1 = IV(STEP) DG1 = IV(DG) L = IV(LMAT) W1 = IV(W) CALL G7QTS(D, V(DG1), H, IV(KAGQT), V(L), N, V(STEP1), V, V(W1)) IF (IV(IRC) .NE. 6) GO TO 200 IF (IV(RESTOR) .NE. 2) GO TO 220 RSTRST = 2 GO TO 230 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 200 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 220 IF (IV(IRC) .NE. 5) GO TO 210 IF (V(RADFAC) .LE. ONE) GO TO 210 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 210 IF (IV(RESTOR) .NE. 2) GO TO 220 RSTRST = 0 GO TO 230 C C *** COMPUTE F(X0 + STEP) *** C 210 X01 = IV(X0) STEP1 = IV(STEP) CALL V2AXY(N, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 999 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 220 RSTRST = 3 230 X01 = IV(X0) V(RELDX) = RLDST(N, D, X, V(X01)) CALL A7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = IV(STLSTG) I = IV(RESTOR) + 1 GO TO (270, 240, 250, 260), I 240 CALL V7CPY(N, X, V(X01)) GO TO 270 250 CALL V7CPY(N, V(LSTGST), V(STEP1)) GO TO 270 260 CALL V7CPY(N, V(STEP1), V(LSTGST)) CALL V2AXY(N, X, ONE, V(STEP1), V(X01)) V(RELDX) = RLDST(N, D, X, V(X01)) IV(RESTOR) = RSTRST C 270 K = IV(IRC) GO TO (280,310,310,310,280,290,300,300,300,300,300,300,380,350), K C C *** RECOMPUTE STEP WITH NEW RADIUS *** C 280 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 150 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST. C 290 V(RADIUS) = V(LMAXS) GO TO 190 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 300 IV(CNVCOD) = K - 4 IF (V(F) .GE. V(F0)) GO TO 390 IF (IV(XIRC) .EQ. 14) GO TO 390 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 310 IF (IV(IRC) .NE. 3) GO TO 340 TEMP1 = LSTGST C C *** PREPARE FOR GRADIENT TESTS *** C *** SET TEMP1 = HESSIAN * STEP + G(X0) C *** = DIAG(D) * (H * STEP + G(X0)) C C _USE_ X0 VECTOR AS TEMPORARY. K = X01 DO 320 I = 1, N V(K) = D(I) * V(STEP1) K = K + 1 STEP1 = STEP1 + 1 320 CONTINUE CALL S7LVM(N, V(TEMP1), H, V(X01)) DO 330 I = 1, N V(TEMP1) = D(I) * V(TEMP1) + G(I) TEMP1 = TEMP1 + 1 330 CONTINUE C C *** COMPUTE GRADIENT AND HESSIAN *** C 340 IV(NGCALL) = IV(NGCALL) + 1 IV(TOOBIG) = 0 IV(1) = 2 GO TO 999 C 350 IV(1) = 2 IF (IV(IRC) .NE. 3) GO TO 110 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C TEMP1 = IV(STLSTG) STEP1 = IV(STEP) C C *** SET TEMP1 = DIAG(D)**-1 * (HESSIAN*STEP + (G(X0)-G(X))) *** C K = TEMP1 DO 360 I = 1, N V(K) = (V(K) - G(I)) / D(I) K = K + 1 360 CONTINUE C C *** DO GRADIENT TESTS *** C IF ( V2NRM(N, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) GO TO 370 IF ( D7TPR(N, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 110 370 V(RADFAC) = V(INCFAC) GO TO 110 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 380 IV(1) = 64 GO TO 400 C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 390 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 400 CALL ITSUM(D, G, IV, LIV, LV, N, V, X) C 999 RETURN C C *** LAST CARD OF RMNH FOLLOWS *** END PyBDSF-1.10.1/src/port3/rmnhb.f000066400000000000000000000376721420247104600157530ustar00rootroot00000000000000 SUBROUTINE RMNHB(B, D, FX, G, H, IV, LH, LIV, LV, N, V, X) C C *** CARRY OUT MNHB (SIMPLY BOUNDED MINIMIZATION) ITERATIONS, C *** USING HESSIAN MATRIX PROVIDED BY THE CALLER. C C *** PARAMETER DECLARATIONS *** C INTEGER LH, LIV, LV, N INTEGER IV(LIV) REAL B(2,N), D(N), FX, G(N), H(LH), V(LV), X(N) C C-------------------------- PARAMETER USAGE -------------------------- C C D.... SCALE VECTOR. C FX... FUNCTION VALUE. C G.... GRADIENT VECTOR. C H.... LOWER TRIANGLE OF THE HESSIAN, STORED ROWWISE. C IV... INTEGER VALUE ARRAY. C LH... LENGTH OF H = P*(P+1)/2. C LIV.. LENGTH OF IV (AT LEAST 59 + 3*N). C LV... LENGTH OF V (AT LEAST 78 + N*(N+27)/2). C N.... NUMBER OF VARIABLES (COMPONENTS IN X AND G). C V.... FLOATING-POINT VALUE ARRAY. C X.... PARAMETER VECTOR. C C *** DISCUSSION *** C C PARAMETERS IV, N, V, AND X ARE THE SAME AS THE CORRESPONDING C ONES TO MNHB (WHICH SEE), EXCEPT THAT V CAN BE SHORTER (SINCE C THE PART OF V THAT MNHB USES FOR STORING G AND H IS NOT NEEDED). C MOREOVER, COMPARED WITH MNHB, IV(1) MAY HAVE THE TWO ADDITIONAL C OUTPUT VALUES 1 AND 2, WHICH ARE EXPLAINED BELOW, AS IS THE USE C OF IV(TOOBIG) AND IV(NFGCAL). THE VALUE IV(G), WHICH IS AN C OUTPUT VALUE FROM MNHB, IS NOT REFERENCED BY RMNHB OR THE C SUBROUTINES IT CALLS. C C IV(1) = 1 MEANS THE CALLER SHOULD SET FX TO F(X), THE FUNCTION VALUE C AT X, AND CALL RMNHB AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS. AN EXCEPTION OCCURS IF F(X) CANNOT BE C COMPUTED (E.G. IF OVERFLOW WOULD OCCUR), WHICH MAY HAPPEN C BECAUSE OF AN OVERSIZED STEP. IN THIS CASE THE CALLER C SHOULD SET IV(TOOBIG) = IV(2) TO 1, WHICH WILL CAUSE C RMNHB TO IGNORE FX AND TRY A SMALLER STEP. THE PARA- C METER NF THAT MNH PASSES TO CALCF (FOR POSSIBLE _USE_ BY C CALCGH) IS A COPY OF IV(NFCALL) = IV(6). C IV(1) = 2 MEANS THE CALLER SHOULD SET G TO G(X), THE GRADIENT OF F AT C X, AND H TO THE LOWER TRIANGLE OF H(X), THE HESSIAN OF F C AT X, AND CALL RMNHB AGAIN, HAVING CHANGED NONE OF THE C OTHER PARAMETERS EXCEPT PERHAPS THE SCALE VECTOR D. C THE PARAMETER NF THAT MNHB PASSES TO CALCG IS C IV(NFGCAL) = IV(7). IF G(X) AND H(X) CANNOT BE EVALUATED, C THEN THE CALLER MAY SET IV(NFGCAL) TO 0, IN WHICH CASE C RMNHB WILL RETURN WITH IV(1) = 65. C NOTE -- RMNHB OVERWRITES H WITH THE LOWER TRIANGLE C OF DIAG(D)**-1 * H(X) * DIAG(D)**-1. C. C *** GENERAL *** C C CODED BY DAVID M. GAY (WINTER, SPRING 1983). C C (SEE MNG AND MNH FOR REFERENCES.) C C+++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++++ C C *** LOCAL VARIABLES *** C INTEGER DG1, DUMMY, I, IPI, IPIV2, IPN, J, K, L, LSTGST, NN1O2, 1 RSTRST, STEP0, STEP1, TD1, TEMP0, TEMP1, TG1, W1, X01, X11 REAL GI, T, XI C C *** CONSTANTS *** C REAL NEGONE, ONE, ONEP2, ZERO C C *** NO INTRINSIC FUNCTIONS *** C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C LOGICAL STOPX REAL D7TPR, RLDST, V2NRM EXTERNAL A7SST, IVSET, D7TPR, D7DUP, G7QSB, I7PNVR, ITSUM, 1 PARCK, RLDST, S7IPR, S7LVM, STOPX, V2NRM, V2AXY, 2 V7CPY, V7IPR, V7SCP, V7VMP C C A7SST.... ASSESSES CANDIDATE STEP. C IVSET.... PROVIDES DEFAULT IV AND V INPUT VALUES. C D7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C D7DUP.... UPDATES SCALE VECTOR D. C G7QSB... COMPUTES APPROXIMATE OPTIMAL BOUNDED STEP. C I7PNVR... INVERTS PERMUTATION ARRAY. C ITSUM.... PRINTS ITERATION SUMMARY AND INFO ON INITIAL AND FINAL X. C PARCK.... CHECKS VALIDITY OF INPUT IV AND V VALUES. C RLDST... COMPUTES V(RELDX) = RELATIVE STEP SIZE. C S7IPR... APPLIES PERMUTATION TO LOWER TRIANG. OF SYM. MATRIX. C S7LVM... MULTIPLIES SYMMETRIC MATRIX TIMES VECTOR, GIVEN THE LOWER C TRIANGLE OF THE MATRIX. C STOPX.... RETURNS .TRUE. IF THE BREAK KEY HAS BEEN PRESSED. C V2NRM... RETURNS THE 2-NORM OF A VECTOR. C V2AXY.... COMPUTES SCALAR TIMES ONE VECTOR PLUS ANOTHER. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7IPR... APPLIES PERMUTATION TO VECTOR. C V7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C V7VMP... MULTIPLIES (OR DIVIDES) TWO VECTORS COMPONENTWISE. C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, DG, DGNORM, DINIT, DSTNRM, DTINIT, DTOL, DTYPE, 1 D0INIT, F, F0, FDIF, GTSTEP, INCFAC, IVNEED, IRC, KAGQT, 2 LMAT, LMAX0, LMAXS, MODE, MODEL, MXFCAL, MXITER, N0, NC, 3 NEXTIV, NEXTV, NFCALL, NFGCAL, NGCALL, NITER, PERM, 4 PHMXFC, PREDUC, RADFAC, RADINC, RADIUS, RAD0, RELDX, 5 RESTOR, STEP, STGLIM, STPPAR, TOOBIG, TUNER4, TUNER5, 6 VNEED, W, XIRC, X0 C C *** IV SUBSCRIPT VALUES *** C C *** (NOTE THAT NC AND N0 ARE STORED IN IV(G0) AND IV(STLSTG) RESP.) C C/6 C DATA CNVCOD/55/, DG/37/, DTOL/59/, DTYPE/16/, IRC/29/, IVNEED/3/, C 1 KAGQT/33/, LMAT/42/, MODE/35/, MODEL/5/, MXFCAL/17/, C 2 MXITER/18/, N0/41/, NC/48/, NEXTIV/46/, NEXTV/47/, NFCALL/6/, C 3 NFGCAL/7/, NGCALL/30/, NITER/31/, PERM/58/, RADINC/8/, C 4 RESTOR/9/, STEP/40/, STGLIM/11/, TOOBIG/2/, VNEED/4/, W/34/, C 5 XIRC/13/, X0/43/ C/7 PARAMETER (CNVCOD=55, DG=37, DTOL=59, DTYPE=16, IRC=29, IVNEED=3, 1 KAGQT=33, LMAT=42, MODE=35, MODEL=5, MXFCAL=17, 2 MXITER=18, N0=41, NC=48, NEXTIV=46, NEXTV=47, NFCALL=6, 3 NFGCAL=7, NGCALL=30, NITER=31, PERM=58, RADINC=8, 4 RESTOR=9, STEP=40, STGLIM=11, TOOBIG=2, VNEED=4, W=34, 5 XIRC=13, X0=43) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DGNORM/1/, DINIT/38/, DSTNRM/2/, DTINIT/39/, D0INIT/40/, C 1 F/10/, F0/13/, FDIF/11/, GTSTEP/4/, INCFAC/23/, LMAX0/35/, C 2 LMAXS/36/, PHMXFC/21/, PREDUC/7/, RADFAC/16/, RADIUS/8/, C 3 RAD0/9/, RELDX/17/, STPPAR/5/, TUNER4/29/, TUNER5/30/ C/7 PARAMETER (DGNORM=1, DINIT=38, DSTNRM=2, DTINIT=39, D0INIT=40, 1 F=10, F0=13, FDIF=11, GTSTEP=4, INCFAC=23, LMAX0=35, 2 LMAXS=36, PHMXFC=21, PREDUC=7, RADFAC=16, RADIUS=8, 3 RAD0=9, RELDX=17, STPPAR=5, TUNER4=29, TUNER5=30) C/ C C/6 C DATA NEGONE/-1.E+0/, ONE/1.E+0/, ONEP2/1.2E+0/, ZERO/0.E+0/ C/7 PARAMETER (NEGONE=-1.E+0, ONE=1.E+0, ONEP2=1.2E+0, ZERO=0.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C I = IV(1) IF (I .EQ. 1) GO TO 50 IF (I .EQ. 2) GO TO 60 C C *** CHECK VALIDITY OF IV AND V INPUT VALUES *** C IF (IV(1) .EQ. 0) CALL IVSET(2, IV, LIV, LV, V) IF (IV(1) .LT. 12) GO TO 10 IF (IV(1) .GT. 13) GO TO 10 IV(VNEED) = IV(VNEED) + N*(N+27)/2 + 7 IV(IVNEED) = IV(IVNEED) + 3*N 10 CALL PARCK(2, D, IV, LIV, LV, N, V) I = IV(1) - 2 IF (I .GT. 12) GO TO 999 NN1O2 = N * (N + 1) / 2 IF (LH .GE. NN1O2) GO TO (250,250,250,250,250,250,190,150,190, 1 20,20,30), I IV(1) = 81 GO TO 440 C C *** STORAGE ALLOCATION *** C 20 IV(DTOL) = IV(LMAT) + NN1O2 IV(X0) = IV(DTOL) + 2*N IV(STEP) = IV(X0) + 2*N IV(DG) = IV(STEP) + 3*N IV(W) = IV(DG) + 2*N IV(NEXTV) = IV(W) + 4*N + 7 IV(NEXTIV) = IV(PERM) + 3*N IF (IV(1) .NE. 13) GO TO 30 IV(1) = 14 GO TO 999 C C *** INITIALIZATION *** C 30 IV(NITER) = 0 IV(NFCALL) = 1 IV(NGCALL) = 1 IV(NFGCAL) = 1 IV(MODE) = -1 IV(MODEL) = 1 IV(STGLIM) = 1 IV(TOOBIG) = 0 IV(CNVCOD) = 0 IV(RADINC) = 0 IV(NC) = N V(RAD0) = ZERO V(STPPAR) = ZERO IF (V(DINIT) .GE. ZERO) CALL V7SCP(N, D, V(DINIT)) K = IV(DTOL) IF (V(DTINIT) .GT. ZERO) CALL V7SCP(N, V(K), V(DTINIT)) K = K + N IF (V(D0INIT) .GT. ZERO) CALL V7SCP(N, V(K), V(D0INIT)) C C *** CHECK CONSISTENCY OF B AND INITIALIZE IP ARRAY *** C IPI = IV(PERM) DO 40 I = 1, N IV(IPI) = I IPI = IPI + 1 IF (B(1,I) .GT. B(2,I)) GO TO 420 40 CONTINUE C C *** GET INITIAL FUNCTION VALUE *** C IV(1) = 1 GO TO 450 C 50 V(F) = FX IF (IV(MODE) .GE. 0) GO TO 250 V(F0) = FX IV(1) = 2 IF (IV(TOOBIG) .EQ. 0) GO TO 999 IV(1) = 63 GO TO 440 C C *** MAKE SURE GRADIENT COULD BE COMPUTED *** C 60 IF (IV(TOOBIG) .EQ. 0) GO TO 70 IV(1) = 65 GO TO 440 C C *** UPDATE THE SCALE VECTOR D *** C 70 DG1 = IV(DG) IF (IV(DTYPE) .LE. 0) GO TO 90 K = DG1 J = 0 DO 80 I = 1, N J = J + I V(K) = H(J) K = K + 1 80 CONTINUE CALL D7DUP(D, V(DG1), IV, LIV, LV, N, V) C C *** COMPUTE SCALED GRADIENT AND ITS NORM *** C 90 DG1 = IV(DG) CALL V7VMP(N, V(DG1), G, D, -1) C C *** COMPUTE SCALED HESSIAN *** C K = 1 DO 110 I = 1, N T = ONE / D(I) DO 100 J = 1, I H(K) = T * H(K) / D(J) K = K + 1 100 CONTINUE 110 CONTINUE C C *** CHOOSE INITIAL PERMUTATION *** C IPI = IV(PERM) IPN = IPI + N IPIV2 = IPN - 1 C *** INVERT OLD PERMUTATION ARRAY *** CALL I7PNVR(N, IV(IPN), IV(IPI)) K = IV(NC) DO 130 I = 1, N IF (B(1,I) .GE. B(2,I)) GO TO 120 XI = X(I) GI = G(I) IF (XI .LE. B(1,I) .AND. GI .GT. ZERO) GO TO 120 IF (XI .GE. B(2,I) .AND. GI .LT. ZERO) GO TO 120 IV(IPI) = I IPI = IPI + 1 J = IPIV2 + I C *** DISALLOW CONVERGENCE IF X(I) HAS JUST BEEN FREED *** IF (IV(J) .GT. K) IV(CNVCOD) = 0 GO TO 130 120 IPN = IPN - 1 IV(IPN) = I 130 CONTINUE IV(NC) = IPN - IV(PERM) C C *** PERMUTE SCALED GRADIENT AND HESSIAN ACCORDINGLY *** C IPI = IV(PERM) CALL S7IPR(N, IV(IPI), H) CALL V7IPR(N, IV(IPI), V(DG1)) V(DGNORM) = ZERO IF (IV(NC) .GT. 0) V(DGNORM) = V2NRM(IV(NC), V(DG1)) C IF (IV(CNVCOD) .NE. 0) GO TO 430 IF (IV(MODE) .EQ. 0) GO TO 380 C C *** ALLOW FIRST STEP TO HAVE SCALED 2-NORM AT MOST V(LMAX0) *** C V(RADIUS) = V(LMAX0) / (ONE + V(PHMXFC)) C IV(MODE) = 0 C C C----------------------------- MAIN LOOP ----------------------------- C C C *** PRINT ITERATION SUMMARY, CHECK ITERATION LIMIT *** C 140 CALL ITSUM(D, G, IV, LIV, LV, N, V, X) 150 K = IV(NITER) IF (K .LT. IV(MXITER)) GO TO 160 IV(1) = 10 GO TO 440 C 160 IV(NITER) = K + 1 C C *** INITIALIZE FOR START OF NEXT ITERATION *** C X01 = IV(X0) V(F0) = V(F) IV(IRC) = 4 IV(KAGQT) = -1 C C *** COPY X TO X0 *** C CALL V7CPY(N, V(X01), X) C C *** UPDATE RADIUS *** C IF (K .EQ. 0) GO TO 180 STEP1 = IV(STEP) K = STEP1 DO 170 I = 1, N V(K) = D(I) * V(K) K = K + 1 170 CONTINUE T = V(RADFAC) * V2NRM(N, V(STEP1)) IF (V(RADFAC) .LT. ONE .OR. T .GT. V(RADIUS)) V(RADIUS) = T C C *** CHECK STOPX AND FUNCTION EVALUATION LIMIT *** C 180 IF (.NOT. STOPX(DUMMY)) GO TO 200 IV(1) = 11 GO TO 210 C C *** COME HERE WHEN RESTARTING AFTER FUNC. EVAL. LIMIT OR STOPX. C 190 IF (V(F) .GE. V(F0)) GO TO 200 V(RADFAC) = ONE K = IV(NITER) GO TO 160 C 200 IF (IV(NFCALL) .LT. IV(MXFCAL)) GO TO 220 IV(1) = 9 210 IF (V(F) .GE. V(F0)) GO TO 440 C C *** IN CASE OF STOPX OR FUNCTION EVALUATION LIMIT WITH C *** IMPROVED V(F), EVALUATE THE GRADIENT AT X. C IV(CNVCOD) = IV(1) GO TO 370 C C. . . . . . . . . . . . . COMPUTE CANDIDATE STEP . . . . . . . . . . C 220 STEP1 = IV(STEP) L = IV(LMAT) W1 = IV(W) IPI = IV(PERM) IPN = IPI + N IPIV2 = IPN + N TG1 = IV(DG) TD1 = TG1 + N X01 = IV(X0) X11 = X01 + N CALL G7QSB(B, D, H, G, IV(IPI), IV(IPN), IV(IPIV2), IV(KAGQT), 1 V(L), LV, N, IV(N0), IV(NC), V(STEP1), V(TD1), V(TG1), 2 V, V(W1), V(X11), V(X01)) IF (IV(IRC) .NE. 6) GO TO 230 IF (IV(RESTOR) .NE. 2) GO TO 250 RSTRST = 2 GO TO 260 C C *** CHECK WHETHER EVALUATING F(X0 + STEP) LOOKS WORTHWHILE *** C 230 IV(TOOBIG) = 0 IF (V(DSTNRM) .LE. ZERO) GO TO 250 IF (IV(IRC) .NE. 5) GO TO 240 IF (V(RADFAC) .LE. ONE) GO TO 240 IF (V(PREDUC) .GT. ONEP2 * V(FDIF)) GO TO 240 IF (IV(RESTOR) .NE. 2) GO TO 250 RSTRST = 0 GO TO 260 C C *** COMPUTE F(X0 + STEP) *** C 240 CALL V2AXY(N, X, ONE, V(STEP1), V(X01)) IV(NFCALL) = IV(NFCALL) + 1 IV(1) = 1 GO TO 450 C C. . . . . . . . . . . . . ASSESS CANDIDATE STEP . . . . . . . . . . . C 250 RSTRST = 3 260 X01 = IV(X0) V(RELDX) = RLDST(N, D, X, V(X01)) CALL A7SST(IV, LIV, LV, V) STEP1 = IV(STEP) LSTGST = STEP1 + 2*N I = IV(RESTOR) + 1 GO TO (300, 270, 280, 290), I 270 CALL V7CPY(N, X, V(X01)) GO TO 300 280 CALL V7CPY(N, V(LSTGST), X) GO TO 300 290 CALL V7CPY(N, X, V(LSTGST)) CALL V2AXY(N, V(STEP1), NEGONE, V(X01), X) V(RELDX) = RLDST(N, D, X, V(X01)) IV(RESTOR) = RSTRST C 300 K = IV(IRC) GO TO (310,340,340,340,310,320,330,330,330,330,330,330,410,380), K C C *** RECOMPUTE STEP WITH NEW RADIUS *** C 310 V(RADIUS) = V(RADFAC) * V(DSTNRM) GO TO 180 C C *** COMPUTE STEP OF LENGTH V(LMAXS) FOR SINGULAR CONVERGENCE TEST. C 320 V(RADIUS) = V(LMAXS) GO TO 220 C C *** CONVERGENCE OR FALSE CONVERGENCE *** C 330 IV(CNVCOD) = K - 4 IF (V(F) .GE. V(F0)) GO TO 430 IF (IV(XIRC) .EQ. 14) GO TO 430 IV(XIRC) = 14 C C. . . . . . . . . . . . PROCESS ACCEPTABLE STEP . . . . . . . . . . . C 340 IF (IV(IRC) .NE. 3) GO TO 370 TEMP1 = LSTGST C C *** PREPARE FOR GRADIENT TESTS *** C *** SET TEMP1 = HESSIAN * STEP + G(X0) C *** = DIAG(D) * (H * STEP + G(X0)) C K = TEMP1 STEP0 = STEP1 - 1 IPI = IV(PERM) DO 350 I = 1, N J = IV(IPI) IPI = IPI + 1 STEP1 = STEP0 + J V(K) = D(J) * V(STEP1) K = K + 1 350 CONTINUE C _USE_ X0 VECTOR AS TEMPORARY. CALL S7LVM(N, V(X01), H, V(TEMP1)) TEMP0 = TEMP1 - 1 IPI = IV(PERM) DO 360 I = 1, N J = IV(IPI) IPI = IPI + 1 TEMP1 = TEMP0 + J V(TEMP1) = D(J) * V(X01) + G(J) X01 = X01 + 1 360 CONTINUE C C *** COMPUTE GRADIENT AND HESSIAN *** C 370 IV(NGCALL) = IV(NGCALL) + 1 IV(TOOBIG) = 0 IV(1) = 2 GO TO 450 C 380 IV(1) = 2 IF (IV(IRC) .NE. 3) GO TO 140 C C *** SET V(RADFAC) BY GRADIENT TESTS *** C STEP1 = IV(STEP) C *** TEMP1 = STLSTG *** TEMP1 = STEP1 + 2*N C C *** SET TEMP1 = DIAG(D)**-1 * (HESSIAN*STEP + (G(X0)-G(X))) *** C K = TEMP1 DO 390 I = 1, N V(K) = (V(K) - G(I)) / D(I) K = K + 1 390 CONTINUE C C *** DO GRADIENT TESTS *** C IF ( V2NRM(N, V(TEMP1)) .LE. V(DGNORM) * V(TUNER4)) GO TO 400 IF ( D7TPR(N, G, V(STEP1)) 1 .GE. V(GTSTEP) * V(TUNER5)) GO TO 140 400 V(RADFAC) = V(INCFAC) GO TO 140 C C. . . . . . . . . . . . . . MISC. DETAILS . . . . . . . . . . . . . . C C *** BAD PARAMETERS TO ASSESS *** C 410 IV(1) = 64 GO TO 440 C C *** INCONSISTENT B *** C 420 IV(1) = 82 GO TO 440 C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 430 IV(1) = IV(CNVCOD) IV(CNVCOD) = 0 440 CALL ITSUM(D, G, IV, LIV, LV, N, V, X) GO TO 999 C C *** PROJECT X INTO FEASIBLE REGION (PRIOR TO COMPUTING F OR G) *** C 450 DO 460 I = 1, N IF (X(I) .LT. B(1,I)) X(I) = B(1,I) IF (X(I) .GT. B(2,I)) X(I) = B(2,I) 460 CONTINUE C 999 RETURN C C *** LAST CARD OF RMNHB FOLLOWS *** END PyBDSF-1.10.1/src/port3/rn2g.f000066400000000000000000000361501420247104600155030ustar00rootroot00000000000000 SUBROUTINE RN2G(D, DR, IV, LIV, LV, N, ND, N1, N2, P, R, 1 RD, V, X) C C *** REVISED ITERATION DRIVER FOR NL2SOL (VERSION 2.3) *** C INTEGER LIV, LV, N, ND, N1, N2, P INTEGER IV(LIV) REAL D(P), DR(ND,P), R(ND), RD(ND), V(LV), X(P) C C-------------------------- PARAMETER USAGE -------------------------- C C D........ SCALE VECTOR. C DR....... DERIVATIVES OF R AT X. C IV....... INTEGER VALUES ARRAY. C LIV...... LENGTH OF IV... LIV MUST BE AT LEAST P + 82. C LV....... LENGTH OF V... LV MUST BE AT LEAST 105 + P*(2*P+16). C N........ TOTAL NUMBER OF RESIDUALS. C ND....... MAX. NO. OF RESIDUALS PASSED ON ONE CALL. C N1....... LOWEST ROW INDEX FOR RESIDUALS SUPPLIED THIS TIME. C N2....... HIGHEST ROW INDEX FOR RESIDUALS SUPPLIED THIS TIME. C P........ NUMBER OF PARAMETERS (COMPONENTS OF X) BEING ESTIMATED. C R........ RESIDUALS. C RD....... RD(I) = SQRT(G(I)**T * H(I)**-1 * G(I)) ON OUTPUT WHEN C IV(RDREQ) IS NONZERO. RN2G SETS IV(REGD) = 1 IF RD C IS SUCCESSFULLY COMPUTED, TO 0 IF NO ATTEMPT WAS MADE C TO COMPUTE IT, AND TO -1 IF H (THE FINITE-DIFFERENCE HESSIAN) C WAS INDEFINITE. IF ND .GE. N, THEN RD IS ALSO USED AS C TEMPORARY STORAGE. C V........ FLOATING-POINT VALUES ARRAY. C X........ PARAMETER VECTOR BEING ESTIMATED (INPUT = INITIAL GUESS, C OUTPUT = BEST VALUE FOUND). C C *** DISCUSSION *** C C NOTE... NL2SOL AND NL2ITR (MENTIONED BELOW) ARE DESCRIBED IN C ACM TRANS. MATH. SOFTWARE, VOL. 7, PP. 369-383 (AN ADAPTIVE C NONLINEAR LEAST-SQUARES ALGORITHM, BY J.E. DENNIS, D.M. GAY, C AND R.E. WELSCH). C C THIS ROUTINE CARRIES OUT ITERATIONS FOR SOLVING NONLINEAR C LEAST SQUARES PROBLEMS. WHEN ND = N, IT IS SIMILAR TO NL2ITR C (WITH J = DR), EXCEPT THAT R(X) AND DR(X) NEED NOT BE INITIALIZED C WHEN RN2G IS CALLED WITH IV(1) = 0 OR 12. RN2G ALSO ALLOWS C R AND DR TO BE SUPPLIED ROW-WISE -- JUST SET ND = 1 AND CALL C RN2G ONCE FOR EACH ROW WHEN PROVIDING RESIDUALS AND JACOBIANS. C ANOTHER NEW FEATURE IS THAT CALLING RN2G WITH IV(1) = 13 C CAUSES STORAGE ALLOCATION ONLY TO BE PERFORMED -- ON RETURN, SUCH C COMPONENTS AS IV(G) (THE FIRST SUBSCRIPT IN G OF THE GRADIENT) C AND IV(S) (THE FIRST SUBSCRIPT IN V OF THE S LOWER TRIANGLE OF C THE S MATRIX) WILL HAVE BEEN SET (UNLESS LIV OR LV IS TOO SMALL), C AND IV(1) WILL HAVE BEEN SET TO 14. CALLING RN2G WITH IV(1) = 14 C CAUSES EXECUTION OF THE ALGORITHM TO BEGIN UNDER THE ASSUMPTION C THAT STORAGE HAS BEEN ALLOCATED. C C *** SUPPLYING R AND DR *** C C RN2G USES IV AND V IN THE SAME WAY AS NL2SOL, WITH A SMALL C NUMBER OF OBVIOUS CHANGES. ONE DIFFERENCE BETWEEN RN2G AND C NL2ITR IS THAT INITIAL FUNCTION AND GRADIENT INFORMATION NEED NOT C BE SUPPLIED IN THE VERY FIRST CALL ON RN2G, THE ONE WITH C IV(1) = 0 OR 12. ANOTHER DIFFERENCE IS THAT RN2G RETURNS WITH C IV(1) = -2 WHEN IT WANTS ANOTHER LOOK AT THE OLD JACOBIAN MATRIX C AND THE CURRENT RESIDUAL -- THE ONE CORRESPONDING TO X AND C IV(NFGCAL). IT THEN RETURNS WITH IV(1) = -3 WHEN IT WANTS TO SEE C BOTH THE NEW RESIDUAL AND THE NEW JACOBIAN MATRIX AT ONCE. NOTE C THAT IV(NFGCAL) = IV(7) CONTAINS THE VALUE THAT IV(NFCALL) = IV(6) C HAD WHEN THE CURRENT RESIDUAL WAS EVALUATED. ALSO NOTE THAT THE C VALUE OF X CORRESPONDING TO THE OLD JACOBIAN MATRIX IS STORED IN C V, STARTING AT V(IV(X0)) = V(IV(43)). C ANOTHER NEW RETURN... RN2G IV(1) = -1 WHEN IT WANTS BOTH THE C RESIDUAL AND THE JACOBIAN TO BE EVALUATED AT X. C A NEW RESIDUAL VECTOR MUST BE SUPPLIED WHEN RN2G RETURNS WITH C IV(1) = 1 OR -1. THIS TAKES THE FORM OF VALUES OF R(I,X) PASSED C IN R(I-N1+1), I = N1(1)N2. YOU MAY PASS ALL THESE VALUES AT ONCE C (I.E., N1 = 1 AND N2 = N) OR IN PIECES BY MAKING SEVERAL CALLS ON C RN2G. EACH TIME RN2G RETURNS WITH IV(1) = 1, N1 WILL HAVE C BEEN SET TO THE INDEX OF THE NEXT RESIDUAL THAT RN2G EXPECTS TO C SEE, AND N2 WILL BE SET TO THE INDEX OF THE HIGHEST RESIDUAL THAT C COULD BE GIVEN ON THE NEXT CALL, I.E., N2 = N1 + ND - 1. (THUS C WHEN RN2G FIRST RETURNS WITH IV(1) = 1 FOR A NEW X, IT WILL C HAVE SET N1 TO 1 AND N2 TO MIN(ND,N).) THE CALLER MAY PROVIDE C FEWER THAN N2-N1+1 RESIDUALS ON THE NEXT CALL BY SETTING N2 TO C A SMALLER VALUE. RN2G ASSUMES IT HAS SEEN ALL THE RESIDUALS C FOR THE CURRENT X WHEN IT IS CALLED WITH N2 .GE. N. C EXAMPLE... SUPPOSE N = 80 AND THAT R IS TO BE PASSED IN 8 C BLOCKS OF SIZE 10. THE FOLLOWING CODE WOULD DO THE JOB. C C N = 80 C ND = 10 C ... C DO 10 K = 1, 8 C *** COMPUTE R(I,X) FOR I = 10*K-9 TO 10*K *** C *** AND STORE THEM IN R(1),...,R(10) *** C CALL RN2G(..., R, ...) C 10 CONTINUE C C THE SITUATION IS SIMILAR WHEN GRADIENT INFORMATION IS C REQUIRED, I.E., WHEN RN2G RETURNS WITH IV(1) = 2, -1, OR -2. C NOTE THAT RN2G OVERWRITES R, BUT THAT IN THE SPECIAL CASE OF C N1 = 1 AND N2 = N ON PREVIOUS CALLS, RN2G NEVER RETURNS WITH C IV(1) = -2. IT SHOULD BE CLEAR THAT THE PARTIAL DERIVATIVE OF C R(I,X) WITH RESPECT TO X(L) IS TO BE STORED IN DR(I-N1+1,L), C L = 1(1)P, I = N1(1)N2. IT IS ESSENTIAL THAT R(I) AND DR(I,L) C ALL CORRESPOND TO THE SAME RESIDUALS WHEN IV(1) = -1 OR -2. C C *** COVARIANCE MATRIX *** C C IV(RDREQ) = IV(57) TELLS WHETHER TO COMPUTE A COVARIANCE C MATRIX AND/OR REGRESSION DIAGNOSTICS... 0 MEANS NEITHER, C 1 MEANS COVARIANCE MATRIX ONLY, 2 MEANS REG. DIAGNOSTICS ONLY, C 3 MEANS BOTH. AS WITH NL2SOL, IV(COVREQ) = IV(15) TELLS WHAT C HESSIAN APPROXIMATION TO _USE_ IN THIS COMPUTING. C C *** REGRESSION DIAGNOSTICS *** C C SEE THE COMMENTS IN SUBROUTINE N2G. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C+++++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++ C C *** INTRINSIC FUNCTIONS *** C/+ INTEGER IABS, MOD C/ C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C REAL D7TPR, V2NRM EXTERNAL C7VFN, IVSET, D7TPR, D7UPD, G7LIT, ITSUM, L7VML, 1 N2CVP, N2LRD, Q7APL, Q7RAD, V7CPY, V7SCP, V2NRM C C C7VFN... FINISHES COVARIANCE COMPUTATION. C IVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C D7TPR... COMPUTES INNER PRODUCT OF TWO VECTORS. C D7UPD... UPDATES SCALE VECTOR D. C G7LIT.... PERFORMS BASIC MINIMIZATION ALGORITHM. C ITSUM.... PRINTS ITERATION SUMMARY, INFO ABOUT INITIAL AND FINAL X. C L7VML.... COMPUTES L * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C N2CVP... PRINTS COVARIANCE MATRIX. C N2LRD... COMPUTES REGRESSION DIAGNOSTICS. C Q7APL... APPLIES QR TRANSFORMATIONS STORED BY Q7RAD. C Q7RAD.... ADDS A NEW BLOCK OF ROWS TO QR DECOMPOSITION. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C C *** LOCAL VARIABLES *** C INTEGER G1, GI, I, IV1, IVMODE, JTOL1, K, L, LH, NN, QTR1, 1 RMAT1, YI, Y1 REAL T C REAL HALF, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER CNVCOD, COVMAT, COVREQ, DINIT, DTYPE, DTINIT, D0INIT, F, 1 FDH, G, H, IPIVOT, IVNEED, JCN, JTOL, LMAT, MODE, 2 NEXTIV, NEXTV, NF0, NF00, NF1, NFCALL, NFCOV, NFGCAL, 3 NGCALL, NGCOV, QTR, RDREQ, REGD, RESTOR, RLIMIT, RMAT, 4 TOOBIG, VNEED, Y C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA CNVCOD/55/, COVMAT/26/, COVREQ/15/, DTYPE/16/, FDH/74/, C 1 G/28/, H/56/, IPIVOT/76/, IVNEED/3/, JCN/66/, JTOL/59/, C 2 LMAT/42/, MODE/35/, NEXTIV/46/, NEXTV/47/, NFCALL/6/, C 3 NFCOV/52/, NF0/68/, NF00/81/, NF1/69/, NFGCAL/7/, NGCALL/30/, C 4 NGCOV/53/, QTR/77/, RESTOR/9/, RMAT/78/, RDREQ/57/, REGD/67/, C 5 TOOBIG/2/, VNEED/4/, Y/48/ C/7 PARAMETER (CNVCOD=55, COVMAT=26, COVREQ=15, DTYPE=16, FDH=74, 1 G=28, H=56, IPIVOT=76, IVNEED=3, JCN=66, JTOL=59, 2 LMAT=42, MODE=35, NEXTIV=46, NEXTV=47, NFCALL=6, 3 NFCOV=52, NF0=68, NF00=81, NF1=69, NFGCAL=7, NGCALL=30, 4 NGCOV=53, QTR=77, RESTOR=9, RMAT=78, RDREQ=57, REGD=67, 5 TOOBIG=2, VNEED=4, Y=48) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DINIT/38/, DTINIT/39/, D0INIT/40/, F/10/, RLIMIT/46/ C/7 PARAMETER (DINIT=38, DTINIT=39, D0INIT=40, F=10, RLIMIT=46) C/ C/6 C DATA HALF/0.5E+0/, ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, ZERO=0.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C LH = P * (P+1) / 2 IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .GT. 2) GO TO 10 NN = N2 - N1 + 1 IV(RESTOR) = 0 I = IV1 + 4 IF (IV(TOOBIG) .EQ. 0) GO TO (150, 130, 150, 120, 120, 150), I IF (I .NE. 5) IV(1) = 2 GO TO 40 C C *** FRESH START OR RESTART -- CHECK INPUT INTEGERS *** C 10 IF (ND .LE. 0) GO TO 210 IF (P .LE. 0) GO TO 210 IF (N .LE. 0) GO TO 210 IF (IV1 .EQ. 14) GO TO 30 IF (IV1 .GT. 16) GO TO 300 IF (IV1 .LT. 12) GO TO 40 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 20 IV(IVNEED) = IV(IVNEED) + P IV(VNEED) = IV(VNEED) + P*(P+13)/2 20 CALL G7LIT(D, X, IV, LIV, LV, P, P, V, X, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IPIVOT) = IV(NEXTIV) IV(NEXTIV) = IV(IPIVOT) + P IV(Y) = IV(NEXTV) IV(G) = IV(Y) + P IV(JCN) = IV(G) + P IV(RMAT) = IV(JCN) + P IV(QTR) = IV(RMAT) + LH IV(JTOL) = IV(QTR) + P IV(NEXTV) = IV(JTOL) + 2*P IF (IV1 .EQ. 13) GO TO 999 C 30 JTOL1 = IV(JTOL) IF (V(DINIT) .GE. ZERO) CALL V7SCP(P, D, V(DINIT)) IF (V(DTINIT) .GT. ZERO) CALL V7SCP(P, V(JTOL1), V(DTINIT)) I = JTOL1 + P IF (V(D0INIT) .GT. ZERO) CALL V7SCP(P, V(I), V(D0INIT)) IV(NF0) = 0 IV(NF1) = 0 IF (ND .GE. N) GO TO 40 C C *** SPECIAL CASE HANDLING OF FIRST FUNCTION AND GRADIENT EVALUATION C *** -- ASK FOR BOTH RESIDUAL AND JACOBIAN AT ONCE C G1 = IV(G) Y1 = IV(Y) CALL G7LIT(D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) .NE. 1) GO TO 220 V(F) = ZERO CALL V7SCP(P, V(G1), ZERO) IV(1) = -1 QTR1 = IV(QTR) CALL V7SCP(P, V(QTR1), ZERO) IV(REGD) = 0 RMAT1 = IV(RMAT) GO TO 100 C 40 G1 = IV(G) Y1 = IV(Y) CALL G7LIT(D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) - 2) 50, 60, 220 C 50 V(F) = ZERO IF (IV(NF1) .EQ. 0) GO TO 260 IF (IV(RESTOR) .NE. 2) GO TO 260 IV(NF0) = IV(NF1) CALL V7CPY(N, RD, R) IV(REGD) = 0 GO TO 260 C 60 CALL V7SCP(P, V(G1), ZERO) IF (IV(MODE) .GT. 0) GO TO 230 RMAT1 = IV(RMAT) QTR1 = IV(QTR) CALL V7SCP(P, V(QTR1), ZERO) IV(REGD) = 0 IF (ND .LT. N) GO TO 90 IF (N1 .NE. 1) GO TO 90 IF (IV(MODE) .LT. 0) GO TO 100 IF (IV(NF1) .EQ. IV(NFGCAL)) GO TO 70 IF (IV(NF0) .NE. IV(NFGCAL)) GO TO 90 CALL V7CPY(N, R, RD) GO TO 80 70 CALL V7CPY(N, RD, R) 80 CALL Q7APL(ND, N, P, DR, RD, 0) CALL L7VML(P, V(Y1), V(RMAT1), RD) GO TO 110 C 90 IV(1) = -2 IF (IV(MODE) .LT. 0) IV(1) = -1 100 CALL V7SCP(P, V(Y1), ZERO) 110 CALL V7SCP(LH, V(RMAT1), ZERO) GO TO 260 C C *** COMPUTE F(X) *** C 120 T = V2NRM(NN, R) IF (T .GT. V(RLIMIT)) GO TO 200 V(F) = V(F) + HALF * T**2 IF (N2 .LT. N) GO TO 270 IF (N1 .EQ. 1) IV(NF1) = IV(NFCALL) GO TO 40 C C *** COMPUTE Y *** C 130 Y1 = IV(Y) YI = Y1 DO 140 L = 1, P V(YI) = V(YI) + D7TPR(NN, DR(1,L), R) YI = YI + 1 140 CONTINUE IF (N2 .LT. N) GO TO 270 IV(1) = 2 IF (N1 .GT. 1) IV(1) = -3 GO TO 260 C C *** COMPUTE GRADIENT INFORMATION *** C 150 IF (IV(MODE) .GT. P) GO TO 240 G1 = IV(G) IVMODE = IV(MODE) IF (IVMODE .LT. 0) GO TO 170 IF (IVMODE .EQ. 0) GO TO 180 IV(1) = 2 C C *** COMPUTE GRADIENT ONLY (FOR _USE_ IN COVARIANCE COMPUTATION) *** C GI = G1 DO 160 L = 1, P V(GI) = V(GI) + D7TPR(NN, R, DR(1,L)) GI = GI + 1 160 CONTINUE GO TO 190 C C *** COMPUTE INITIAL FUNCTION VALUE WHEN ND .LT. N *** C 170 IF (N .LE. ND) GO TO 180 T = V2NRM(NN, R) IF (T .GT. V(RLIMIT)) GO TO 200 V(F) = V(F) + HALF * T**2 C C *** UPDATE D IF DESIRED *** C 180 IF (IV(DTYPE) .GT. 0) 1 CALL D7UPD(D, DR, IV, LIV, LV, N, ND, NN, N2, P, V) C C *** COMPUTE RMAT AND QTR *** C QTR1 = IV(QTR) RMAT1 = IV(RMAT) CALL Q7RAD(NN, ND, P, V(QTR1), .TRUE., V(RMAT1), DR, R) IV(NF1) = 0 C 190 IF (N2 .LT. N) GO TO 270 IF (IVMODE .GT. 0) GO TO 40 IV(NF00) = IV(NFGCAL) C C *** COMPUTE G FROM RMAT AND QTR *** C CALL L7VML(P, V(G1), V(RMAT1), V(QTR1)) IV(1) = 2 IF (IVMODE .EQ. 0) GO TO 40 IF (N .LE. ND) GO TO 40 C C *** FINISH SPECIAL CASE HANDLING OF FIRST FUNCTION AND GRADIENT C Y1 = IV(Y) IV(1) = 1 CALL G7LIT(D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) .NE. 2) GO TO 220 GO TO 40 C C *** MISC. DETAILS *** C C *** X IS OUT OF RANGE (OVERSIZE STEP) *** C 200 IV(TOOBIG) = 1 GO TO 40 C C *** BAD N, ND, OR P *** C 210 IV(1) = 66 GO TO 300 C C *** CONVERGENCE OBTAINED -- SEE WHETHER TO COMPUTE COVARIANCE *** C 220 IF (IV(COVMAT) .NE. 0) GO TO 290 IF (IV(REGD) .NE. 0) GO TO 290 C C *** SEE IF CHOLESKY FACTOR OF HESSIAN IS AVAILABLE *** C K = IV(FDH) IF (K .LE. 0) GO TO 280 IF (IV(RDREQ) .LE. 0) GO TO 290 C C *** COMPUTE REGRESSION DIAGNOSTICS AND DEFAULT COVARIANCE IF C DESIRED *** C I = 0 IF (MOD(IV(RDREQ),4) .GE. 2) I = 1 IF (MOD(IV(RDREQ),2) .EQ. 1 .AND. IABS(IV(COVREQ)) .LE. 1) I = I+2 IF (I .EQ. 0) GO TO 250 IV(MODE) = P + I IV(NGCALL) = IV(NGCALL) + 1 IV(NGCOV) = IV(NGCOV) + 1 IV(CNVCOD) = IV(1) IF (I .LT. 2) GO TO 230 L = IABS(IV(H)) CALL V7SCP(LH, V(L), ZERO) 230 IV(NFCOV) = IV(NFCOV) + 1 IV(NFCALL) = IV(NFCALL) + 1 IV(NFGCAL) = IV(NFCALL) IV(1) = -1 GO TO 260 C 240 L = IV(LMAT) CALL N2LRD(DR, IV, V(L), LH, LIV, LV, ND, NN, P, R, RD, V) IF (N2 .LT. N) GO TO 270 IF (N1 .GT. 1) GO TO 250 C C *** ENSURE WE CAN RESTART -- AND MAKE RETURN STATE OF DR C *** INDEPENDENT OF WHETHER REGRESSION DIAGNOSTICS ARE COMPUTED. C *** _USE_ STEP VECTOR (ALLOCATED BY G7LIT) FOR SCRATCH. C RMAT1 = IV(RMAT) CALL V7SCP(LH, V(RMAT1), ZERO) CALL Q7RAD(NN, ND, P, R, .FALSE., V(RMAT1), DR, R) IV(NF1) = 0 C C *** FINISH COMPUTING COVARIANCE *** C 250 L = IV(LMAT) CALL C7VFN(IV, V(L), LH, LIV, LV, N, P, V) GO TO 290 C C *** RETURN FOR MORE FUNCTION OR GRADIENT INFORMATION *** C 260 N2 = 0 270 N1 = N2 + 1 N2 = N2 + ND IF (N2 .GT. N) N2 = N GO TO 999 C C *** COME HERE FOR INDEFINITE FINITE-DIFFERENCE HESSIAN *** C 280 IV(COVMAT) = K IV(REGD) = K C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 290 G1 = IV(G) 300 CALL ITSUM(D, V(G1), IV, LIV, LV, P, V, X) IF (IV(1) .LE. 6 .AND. IV(RDREQ) .GT. 0) 1 CALL N2CVP(IV, LIV, LV, P, V) C 999 RETURN C *** LAST LINE OF RN2G FOLLOWS *** END PyBDSF-1.10.1/src/port3/rn2gb.f000066400000000000000000000221731420247104600156450ustar00rootroot00000000000000 SUBROUTINE RN2GB(B, D, DR, IV, LIV, LV, N, ND, N1, N2, P, R, 1 RD, V, X) C C *** REVISED ITERATION DRIVER FOR NL2SOL WITH SIMPLE BOUNDS *** C INTEGER LIV, LV, N, ND, N1, N2, P INTEGER IV(LIV) REAL B(2,P), D(P), DR(ND,P), R(ND), RD(ND), V(LV), 1 X(P) C C-------------------------- PARAMETER USAGE -------------------------- C C B........ BOUNDS ON X. C D........ SCALE VECTOR. C DR....... DERIVATIVES OF R AT X. C IV....... INTEGER VALUES ARRAY. C LIV...... LENGTH OF IV... LIV MUST BE AT LEAST 4*P + 82. C LV....... LENGTH OF V... LV MUST BE AT LEAST 105 + P*(2*P+20). C N........ TOTAL NUMBER OF RESIDUALS. C ND....... MAX. NO. OF RESIDUALS PASSED ON ONE CALL. C N1....... LOWEST ROW INDEX FOR RESIDUALS SUPPLIED THIS TIME. C N2....... HIGHEST ROW INDEX FOR RESIDUALS SUPPLIED THIS TIME. C P........ NUMBER OF PARAMETERS (COMPONENTS OF X) BEING ESTIMATED. C R........ RESIDUALS. C V........ FLOATING-POINT VALUES ARRAY. C X........ PARAMETER VECTOR BEING ESTIMATED (INPUT = INITIAL GUESS, C OUTPUT = BEST VALUE FOUND). C C *** DISCUSSION *** C C THIS ROUTINE CARRIES OUT ITERATIONS FOR SOLVING NONLINEAR C LEAST SQUARES PROBLEMS. IT IS SIMILAR TO RN2G, EXCEPT THAT C THIS ROUTINE ENFORCES THE BOUNDS B(1,I) .LE. X(I) .LE. B(2,I), C I = 1(1)P. C C *** GENERAL *** C C CODED BY DAVID M. GAY. C C+++++++++++++++++++++++++++++ DECLARATIONS ++++++++++++++++++++++++++ C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C REAL D7TPR, V2NRM EXTERNAL IVSET, D7TPR, D7UPD, G7ITB, ITSUM, L7VML, Q7APL, 1 Q7RAD, R7TVM, V7CPY, V7SCP, V2NRM C C IVSET.... PROVIDES DEFAULT IV AND V INPUT COMPONENTS. C D7TPR... COMPUTES INNER PRODUCT OF TWO VECTORS. C D7UPD... UPDATES SCALE VECTOR D. C G7ITB... PERFORMS BASIC MINIMIZATION ALGORITHM. C ITSUM.... PRINTS ITERATION SUMMARY, INFO ABOUT INITIAL AND FINAL X. C L7VML.... COMPUTES L * V, V = VECTOR, L = LOWER TRIANGULAR MATRIX. C Q7APL... APPLIES QR TRANSFORMATIONS STORED BY Q7RAD. C Q7RAD.... ADDS A NEW BLOCK OF ROWS TO QR DECOMPOSITION. C R7TVM... MULT. VECTOR BY TRANS. OF UPPER TRIANG. MATRIX FROM QR FACT. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7SCP... SETS ALL ELEMENTS OF A VECTOR TO A SCALAR. C V2NRM... RETURNS THE 2-NORM OF A VECTOR. C C C *** LOCAL VARIABLES *** C INTEGER G1, GI, I, IV1, IVMODE, JTOL1, L, LH, NN, QTR1, 1 RD1, RMAT1, YI, Y1 REAL T C REAL HALF, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER DINIT, DTYPE, DTINIT, D0INIT, F, G, JCN, JTOL, MODE, 1 NEXTV, NF0, NF00, NF1, NFCALL, NFCOV, NFGCAL, QTR, RDREQ, 1 REGD, RESTOR, RLIMIT, RMAT, TOOBIG, VNEED C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA DTYPE/16/, G/28/, JCN/66/, JTOL/59/, MODE/35/, NEXTV/47/, C 1 NF0/68/, NF00/81/, NF1/69/, NFCALL/6/, NFCOV/52/, NFGCAL/7/, C 2 QTR/77/, RDREQ/57/, RESTOR/9/, REGD/67/, RMAT/78/, TOOBIG/2/, C 3 VNEED/4/ C/7 PARAMETER (DTYPE=16, G=28, JCN=66, JTOL=59, MODE=35, NEXTV=47, 1 NF0=68, NF00=81, NF1=69, NFCALL=6, NFCOV=52, NFGCAL=7, 2 QTR=77, RDREQ=57, RESTOR=9, REGD=67, RMAT=78, TOOBIG=2, 3 VNEED=4) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA DINIT/38/, DTINIT/39/, D0INIT/40/, F/10/, RLIMIT/46/ C/7 PARAMETER (DINIT=38, DTINIT=39, D0INIT=40, F=10, RLIMIT=46) C/ C/6 C DATA HALF/0.5E+0/, ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, ZERO=0.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C LH = P * (P+1) / 2 IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) IV1 = IV(1) IF (IV1 .GT. 2) GO TO 10 NN = N2 - N1 + 1 IV(RESTOR) = 0 I = IV1 + 4 IF (IV(TOOBIG) .EQ. 0) GO TO (150, 130, 150, 120, 120, 150), I IF (I .NE. 5) IV(1) = 2 GO TO 40 C C *** FRESH START OR RESTART -- CHECK INPUT INTEGERS *** C 10 IF (ND .LE. 0) GO TO 220 IF (P .LE. 0) GO TO 220 IF (N .LE. 0) GO TO 220 IF (IV1 .EQ. 14) GO TO 30 IF (IV1 .GT. 16) GO TO 270 IF (IV1 .LT. 12) GO TO 40 IF (IV1 .EQ. 12) IV(1) = 13 IF (IV(1) .NE. 13) GO TO 20 IV(VNEED) = IV(VNEED) + P*(P+15)/2 20 CALL G7ITB(B, D, X, IV, LIV, LV, P, P, V, X, X) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(G) = IV(NEXTV) IV(JCN) = IV(G) + 2*P IV(RMAT) = IV(JCN) + P IV(QTR) = IV(RMAT) + LH IV(JTOL) = IV(QTR) + 2*P IV(NEXTV) = IV(JTOL) + 2*P C *** TURN OFF COVARIANCE COMPUTATION *** IV(RDREQ) = 0 IF (IV1 .EQ. 13) GO TO 999 C 30 JTOL1 = IV(JTOL) IF (V(DINIT) .GE. ZERO) CALL V7SCP(P, D, V(DINIT)) IF (V(DTINIT) .GT. ZERO) CALL V7SCP(P, V(JTOL1), V(DTINIT)) I = JTOL1 + P IF (V(D0INIT) .GT. ZERO) CALL V7SCP(P, V(I), V(D0INIT)) IV(NF0) = 0 IV(NF1) = 0 IF (ND .GE. N) GO TO 40 C C *** SPECIAL CASE HANDLING OF FIRST FUNCTION AND GRADIENT EVALUATION C *** -- ASK FOR BOTH RESIDUAL AND JACOBIAN AT ONCE C G1 = IV(G) Y1 = G1 + P CALL G7ITB(B, D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) .NE. 1) GO TO 260 V(F) = ZERO CALL V7SCP(P, V(G1), ZERO) IV(1) = -1 QTR1 = IV(QTR) CALL V7SCP(P, V(QTR1), ZERO) IV(REGD) = 0 RMAT1 = IV(RMAT) GO TO 100 C 40 G1 = IV(G) Y1 = G1 + P CALL G7ITB(B, D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) - 2) 50, 60, 260 C 50 V(F) = ZERO IF (IV(NF1) .EQ. 0) GO TO 240 IF (IV(RESTOR) .NE. 2) GO TO 240 IV(NF0) = IV(NF1) CALL V7CPY(N, RD, R) IV(REGD) = 0 GO TO 240 C 60 CALL V7SCP(P, V(G1), ZERO) IF (IV(MODE) .GT. 0) GO TO 230 RMAT1 = IV(RMAT) QTR1 = IV(QTR) RD1 = QTR1 + P CALL V7SCP(P, V(QTR1), ZERO) IV(REGD) = 0 IF (ND .LT. N) GO TO 90 IF (N1 .NE. 1) GO TO 90 IF (IV(MODE) .LT. 0) GO TO 100 IF (IV(NF1) .EQ. IV(NFGCAL)) GO TO 70 IF (IV(NF0) .NE. IV(NFGCAL)) GO TO 90 CALL V7CPY(N, R, RD) GO TO 80 70 CALL V7CPY(N, RD, R) 80 CALL Q7APL(ND, N, P, DR, RD, 0) CALL R7TVM(ND, MIN0(N,P), V(Y1), V(RD1), DR, RD) IV(REGD) = 0 GO TO 110 C 90 IV(1) = -2 IF (IV(MODE) .LT. 0) IV(1) = -3 100 CALL V7SCP(P, V(Y1), ZERO) 110 CALL V7SCP(LH, V(RMAT1), ZERO) GO TO 240 C C *** COMPUTE F(X) *** C 120 T = V2NRM(NN, R) IF (T .GT. V(RLIMIT)) GO TO 210 V(F) = V(F) + HALF * T**2 IF (N2 .LT. N) GO TO 250 IF (N1 .EQ. 1) IV(NF1) = IV(NFCALL) GO TO 40 C C *** COMPUTE Y *** C 130 Y1 = IV(G) + P YI = Y1 DO 140 L = 1, P V(YI) = V(YI) + D7TPR(NN, DR(1,L), R) YI = YI + 1 140 CONTINUE IF (N2 .LT. N) GO TO 250 IV(1) = 2 IF (N1 .GT. 1) IV(1) = -3 GO TO 240 C C *** COMPUTE GRADIENT INFORMATION *** C 150 G1 = IV(G) IVMODE = IV(MODE) IF (IVMODE .LT. 0) GO TO 170 IF (IVMODE .EQ. 0) GO TO 180 IV(1) = 2 C C *** COMPUTE GRADIENT ONLY (FOR _USE_ IN COVARIANCE COMPUTATION) *** C GI = G1 DO 160 L = 1, P V(GI) = V(GI) + D7TPR(NN, R, DR(1,L)) GI = GI + 1 160 CONTINUE GO TO 200 C C *** COMPUTE INITIAL FUNCTION VALUE WHEN ND .LT. N *** C 170 IF (N .LE. ND) GO TO 180 T = V2NRM(NN, R) IF (T .GT. V(RLIMIT)) GO TO 210 V(F) = V(F) + HALF * T**2 C C *** UPDATE D IF DESIRED *** C 180 IF (IV(DTYPE) .GT. 0) 1 CALL D7UPD(D, DR, IV, LIV, LV, N, ND, NN, N2, P, V) C C *** COMPUTE RMAT AND QTR *** C QTR1 = IV(QTR) RMAT1 = IV(RMAT) CALL Q7RAD(NN, ND, P, V(QTR1), .TRUE., V(RMAT1), DR, R) IV(NF1) = 0 IF (N1 .GT. 1) GO TO 200 IF (N2 .LT. N) GO TO 250 C C *** SAVE DIAGONAL OF R FOR COMPUTING Y LATER *** C RD1 = QTR1 + P L = RMAT1 - 1 DO 190 I = 1, P L = L + I V(RD1) = V(L) RD1 = RD1 + 1 190 CONTINUE C 200 IF (N2 .LT. N) GO TO 250 IF (IVMODE .GT. 0) GO TO 40 IV(NF00) = IV(NFGCAL) C C *** COMPUTE G FROM RMAT AND QTR *** C CALL L7VML(P, V(G1), V(RMAT1), V(QTR1)) IV(1) = 2 IF (IVMODE .EQ. 0) GO TO 40 IF (N .LE. ND) GO TO 40 C C *** FINISH SPECIAL CASE HANDLING OF FIRST FUNCTION AND GRADIENT C Y1 = G1 + P IV(1) = 1 CALL G7ITB(B, D, V(G1), IV, LIV, LV, P, P, V, X, V(Y1)) IF (IV(1) .NE. 2) GO TO 260 GO TO 40 C C *** MISC. DETAILS *** C C *** X IS OUT OF RANGE (OVERSIZE STEP) *** C 210 IV(TOOBIG) = 1 GO TO 40 C C *** BAD N, ND, OR P *** C 220 IV(1) = 66 GO TO 270 C C *** RECORD EXTRA EVALUATIONS FOR FINITE-DIFFERENCE HESSIAN *** C 230 IV(NFCOV) = IV(NFCOV) + 1 IV(NFCALL) = IV(NFCALL) + 1 IV(NFGCAL) = IV(NFCALL) IV(1) = -1 C C *** RETURN FOR MORE FUNCTION OR GRADIENT INFORMATION *** C 240 N2 = 0 250 N1 = N2 + 1 N2 = N2 + ND IF (N2 .GT. N) N2 = N GO TO 999 C C *** PRINT SUMMARY OF FINAL ITERATION AND OTHER REQUESTED ITEMS *** C 260 G1 = IV(G) 270 CALL ITSUM(D, V(G1), IV, LIV, LV, P, V, X) C 999 RETURN C *** LAST CARD OF RN2GB FOLLOWS *** END PyBDSF-1.10.1/src/port3/rnsg.f000066400000000000000000000351441420247104600156060ustar00rootroot00000000000000 SUBROUTINE RNSG(A, ALF, C, DA, IN, IV, L, L1, LA, LIV, LV, 1 N, NDA, P, V, Y) C C *** ITERATION DRIVER FOR SEPARABLE NONLINEAR LEAST SQUARES. C C *** PARAMETER DECLARATIONS *** C INTEGER L, L1, LA, LIV, LV, N, NDA, P INTEGER IN(2,NDA), IV(LIV) C DIMENSION UIPARM(*) REAL A(LA,L1), ALF(P), C(L), DA(LA,NDA), V(LV), Y(N) C C *** PURPOSE *** C C GIVEN A SET OF N OBSERVATIONS Y(1)....Y(N) OF A DEPENDENT VARIABLE C T(1)...T(N), RNSG ATTEMPTS TO COMPUTE A LEAST SQUARES FIT C TO A FUNCTION ETA (THE MODEL) WHICH IS A LINEAR COMBINATION C C L C ETA(C,ALF,T) = SUM C * PHI(ALF,T) +PHI (ALF,T) C J=1 J J L+1 C C OF NONLINEAR FUNCTIONS PHI(J) DEPENDENT ON T AND ALF(1),...,ALF(P) C (.E.G. A SUM OF EXPONENTIALS OR GAUSSIANS). THAT IS, IT DETERMINES C NONLINEAR PARAMETERS ALF WHICH MINIMIZE C C 2 N 2 C NORM(RESIDUAL) = SUM (Y - ETA(C,ALF,T )). C I=1 I I C C THE (L+1)ST TERM IS OPTIONAL. C C C *** PARAMETERS *** C C A (IN) MATRIX PHI(ALF,T) OF THE MODEL. C ALF (I/O) NONLINEAR PARAMETERS. C INPUT = INITIAL GUESS, C OUTPUT = BEST ESTIMATE FOUND. C C (OUT) LINEAR PARAMETERS (ESTIMATED). C DA (IN) DERIVATIVES OF COLUMNS OF A WITH RESPECT TO COMPONENTS C OF ALF, AS SPECIFIED BY THE IN ARRAY... C IN (IN) WHEN RNSG IS CALLED WITH IV(1) = 2 OR -2, THEN FOR C I = 1(1)NDA, COLUMN I OF DA IS THE PARTIAL C DERIVATIVE WITH RESPECT TO ALF(IN(1,I)) OF COLUMN C IN(2,I) OF A, UNLESS IV(1,I) IS NOT POSITIVE (IN C WHICH CASE COLUMN I OF DA IS IGNORED. IV(1) = -2 C MEANS THERE ARE MORE COLUMNS OF DA TO COME AND C RNSG SHOULD RETURN FOR THEM. C IV (I/O) INTEGER PARAMETER AND SCRATCH VECTOR. RNSG RETURNS C WITH IV(1) = 1 WHEN IT WANTS A TO BE EVALUATED AT C ALF AND WITH IV(1) = 2 WHEN IT WANTS DA TO BE C EVALUATED AT ALF. WHEN CALLED WITH IV(1) = -2 C (AFTER A RETURN WITH IV(1) = 2), RNSG RETURNS C WITH IV(1) = -2 TO GET MORE COLUMNS OF DA. C L (IN) NUMBER OF LINEAR PARAMETERS TO BE ESTIMATED. C L1 (IN) L+1 IF PHI(L+1) IS IN THE MODEL, L IF NOT. C LA (IN) LEAD DIMENSION OF A. MUST BE AT LEAST N. C LIV (IN) LENGTH OF IV. MUST BE AT LEAST 110 + L + P. C LV (IN) LENGTH OF V. MUST BE AT LEAST C 105 + 2*N + JLEN + L*(L+3)/2 + P*(2*P + 17), C WHERE JLEN = (L+P)*(N+L+P+1), UNLESS NEITHER A C COVARIANCE MATRIX NOR REGRESSION DIAGNOSTICS ARE C REQUESTED, IN WHICH CASE JLEN = N*P. C N (IN) NUMBER OF OBSERVATIONS. C NDA (IN) NUMBER OF COLUMNS IN DA AND IN. C P (IN) NUMBER OF NONLINEAR PARAMETERS TO BE ESTIMATED. C V (I/O) FLOATING-POINT PARAMETER AND SCRATCH VECTOR. C IF A COVARIANCE ESTIMATE IS REQUESTED, IT IS FOR C (ALF,C) -- NONLINEAR PARAMETERS ORDERED FIRST, C FOLLOWED BY LINEAR PARAMETERS. C Y (IN) RIGHT-HAND SIDE VECTOR. C C C *** EXTERNAL SUBROUTINES *** C REAL D7TPR, L7SVX, L7SVN, R7MDC EXTERNAL C7VFN, IVSET, D7TPR, ITSUM, L7ITV, L7SRT, L7SVX, 1 L7SVN, N2CVP, N2LRD, N2RDP, RN2G, Q7APL, Q7RAD, 2 Q7RFH, R7MDC, S7CPR, V2AXY, V7CPY, V7PRM, V7SCL, 3 V7SCP C C C7VFN... FINISHES COVARIANCE COMPUTATION. C IVSET.... SUPPLIES DEFAULT PARAMETER VALUES. C D7TPR... RETURNS INNER PRODUCT OF TWO VECTORS. C ITSUM.... PRINTS ITERATION SUMMARY, INITIAL AND FINAL ALF. C L7ITV... APPLIES INVERSE-TRANSPOSE OF COMPACT LOWER TRIANG. MATRIX. C L7SRT.... COMPUTES (PARTIAL) CHOLESKY FACTORIZATION. C L7SVX... ESTIMATES LARGEST SING. VALUE OF LOWER TRIANG. MATRIX. C L7SVN... ESTIMATES SMALLEST SING. VALUE OF LOWER TRIANG. MATRIX. C N2CVP... PRINTS COVARIANCE MATRIX. C N2LRD... COMPUTES COVARIANCE AND REGRESSION DIAGNOSTICS. C N2RDP... PRINTS REGRESSION DIAGNOSTICS. C RN2G... UNDERLYING NONLINEAR LEAST-SQUARES SOLVER. C Q7APL... APPLIES HOUSEHOLDER TRANSFORMS STORED BY Q7RFH. C Q7RFH.... COMPUTES QR FACT. VIA HOUSEHOLDER TRANSFORMS WITH PIVOTING. C Q7RAD.... QR FACT., NO PIVOTING. C R7MDC... RETURNS MACHINE-DEP. CONSTANTS. C S7CPR... PRINTS LINEAR PARAMETERS AT SOLUTION. C V2AXY.... ADDS MULTIPLE OF ONE VECTOR TO ANOTHER. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7PRM.... PERMUTES A VECTOR. C V7SCL... SCALES AND COPIES ONE VECTOR TO ANOTHER. C V7SCP... SETS ALL COMPONENTS OF A VECTOR TO A SCALAR. C C *** LOCAL VARIABLES *** C LOGICAL NOCOV INTEGER AR1, CSAVE1, D1, DR1, DR1L, DRI, DRI1, FDH0, HSAVE, I, I1, 1 IPIV1, IER, IV1, J1, JLEN, K, LH, LI, LL1O2, MD, N1, N2, 2 NML, NRAN, PP, PP1, R1, R1L, RD1, TEMP1 REAL SINGTL, T REAL MACHEP, NEGONE, SNGFAC, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AR, CNVCOD, COVMAT, COVREQ, CSAVE, CVRQSV, D, FDH, H, 1 IERS, IPIVS, IV1SAV, IVNEED, J, LMAT, MODE, NEXTIV, NEXTV, 2 NFCALL, NFCOV, NFGCAL, NGCALL, NGCOV, PERM, R, RCOND, 3 RDREQ, RDRQSV, REGD, REGD0, RESTOR, TOOBIG, VNEED C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AR/110/, CNVCOD/55/, COVMAT/26/, COVREQ/15/, CSAVE/105/, C 1 CVRQSV/106/, D/27/, FDH/74/, H/56/, IERS/108/, IPIVS/109/, C 2 IV1SAV/104/, IVNEED/3/, J/70/, LMAT/42/, MODE/35/, C 3 NEXTIV/46/, NEXTV/47/, NFCALL/6/, NFCOV/52/, NFGCAL/7/, C 4 NGCALL/30/, NGCOV/53/, PERM/58/, R/61/, RCOND/53/, RDREQ/57/, C 5 RDRQSV/107/, REGD/67/, REGD0/82/, RESTOR/9/, TOOBIG/2/, C 6 VNEED/4/ C/7 PARAMETER (AR=110, CNVCOD=55, COVMAT=26, COVREQ=15, CSAVE=105, 1 CVRQSV=106, D=27, FDH=74, H=56, IERS=108, IPIVS=109, 2 IV1SAV=104, IVNEED=3, J=70, LMAT=42, MODE=35, 3 NEXTIV=46, NEXTV=47, NFCALL=6, NFCOV=52, NFGCAL=7, 4 NGCALL=30, NGCOV=53, PERM=58, R=61, RCOND=53, RDREQ=57, 5 RDRQSV=107, REGD=67, REGD0=82, RESTOR=9, TOOBIG=2, 6 VNEED=4) C/ DATA MACHEP/-1.E+0/, NEGONE/-1.E+0/, SNGFAC/1.E+2/, ZERO/0.E+0/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C C IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) N1 = 1 NML = N IV1 = IV(1) IF (IV1 .LE. 2) GO TO 20 C C *** CHECK INPUT INTEGERS *** C IF (P .LE. 0) GO TO 370 IF (L .LT. 0) GO TO 370 IF (N .LE. L) GO TO 370 IF (LA .LT. N) GO TO 370 IF (IV1 .LT. 12) GO TO 20 IF (IV1 .EQ. 14) GO TO 20 IF (IV1 .EQ. 12) IV(1) = 13 C C *** FRESH START -- COMPUTE STORAGE REQUIREMENTS *** C IF (IV(1) .GT. 16) GO TO 370 LL1O2 = L*(L+1)/2 JLEN = N*P I = L + P IF (IV(RDREQ) .GT. 0 .AND. IV(COVREQ) .NE. 0) JLEN = I*(N + I + 1) IF (IV(1) .NE. 13) GO TO 10 IV(IVNEED) = IV(IVNEED) + L IV(VNEED) = IV(VNEED) + P + 2*N + JLEN + LL1O2 + L 10 IF (IV(PERM) .LE. AR) IV(PERM) = AR + 1 CALL RN2G(V, V, IV, LIV, LV, N, N, N1, NML, P, V, V, V, ALF) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IPIVS) = IV(NEXTIV) IV(NEXTIV) = IV(NEXTIV) + L IV(D) = IV(NEXTV) IV(REGD0) = IV(D) + P IV(AR) = IV(REGD0) + N IV(CSAVE) = IV(AR) + LL1O2 IV(J) = IV(CSAVE) + L IV(R) = IV(J) + JLEN IV(NEXTV) = IV(R) + N IV(IERS) = 0 IF (IV1 .EQ. 13) GO TO 999 C C *** SET POINTERS INTO IV AND V *** C 20 AR1 = IV(AR) D1 = IV(D) DR1 = IV(J) DR1L = DR1 + L R1 = IV(R) R1L = R1 + L RD1 = IV(REGD0) CSAVE1 = IV(CSAVE) NML = N - L IF (IV1 .LE. 2) GO TO 50 C C *** IF F.D. HESSIAN WILL BE NEEDED (FOR COVARIANCE OR REG. C *** DIAGNOSTICS), HAVE RN2G COMPUTE ONLY THE PART CORRESP. C *** TO ALF WITH C FIXED... C IF (L .LE. 0) GO TO 30 IV(CVRQSV) = IV(COVREQ) IF (IABS(IV(COVREQ)) .GE. 3) IV(COVREQ) = 0 IV(RDRQSV) = IV(RDREQ) IF (IV(RDREQ) .GT. 0) IV(RDREQ) = -1 C 30 N2 = NML CALL RN2G(V(D1), V(DR1L), IV, LIV, LV, NML, N, N1, N2, P, 1 V(R1L), V(RD1), V, ALF) IF (IABS(IV(RESTOR)-2) .EQ. 1 .AND. L .GT. 0) 1 CALL V7CPY(L, C, V(CSAVE1)) IV1 = IV(1) IF (IV1-2) 40, 150, 230 C C *** NEW FUNCTION VALUE (RESIDUAL) NEEDED *** C 40 IV(IV1SAV) = IV(1) IV(1) = IABS(IV1) IF (IV(RESTOR) .EQ. 2 .AND. L .GT. 0) CALL V7CPY(L, V(CSAVE1), C) GO TO 999 C C *** COMPUTE NEW RESIDUAL OR GRADIENT *** C 50 IV(1) = IV(IV1SAV) MD = IV(MODE) IF (MD .LE. 0) GO TO 60 NML = N DR1L = DR1 R1L = R1 60 IF (IV(TOOBIG) .NE. 0) GO TO 30 IF (IABS(IV1) .EQ. 2) GO TO 170 C C *** COMPUTE NEW RESIDUAL *** C IF (L1 .LE. L) CALL V7CPY(N, V(R1), Y) IF (L1 .GT. L) CALL V2AXY(N, V(R1), NEGONE, A(1,L1), Y) IF (MD .GT. 0) GO TO 120 IER = 0 IF (L .LE. 0) GO TO 110 LL1O2 = L * (L + 1) / 2 IPIV1 = IV(IPIVS) CALL Q7RFH(IER, IV(IPIV1), N, LA, 0, L, A, V(AR1), LL1O2, C) C C *** DETERMINE NUMERICAL RANK OF A *** C IF (MACHEP .LE. ZERO) MACHEP = R7MDC(3) SINGTL = SNGFAC * FLOAT(MAX0(L,N)) * MACHEP K = L IF (IER .NE. 0) K = IER - 1 70 IF (K .LE. 0) GO TO 90 T = L7SVX(K, V(AR1), C, C) IF (T .GT. ZERO) T = L7SVN(K, V(AR1), C, C) / T IF (T .GT. SINGTL) GO TO 80 K = K - 1 GO TO 70 C C *** RECORD RANK IN IV(IERS)... IV(IERS) = 0 MEANS FULL RANK, C *** IV(IERS) .GT. 0 MEANS RANK IV(IERS) - 1. C 80 IF (K .GE. L) GO TO 100 90 IER = K + 1 CALL V7SCP(L-K, C(K+1), ZERO) 100 IV(IERS) = IER IF (K .LE. 0) GO TO 110 C C *** APPLY HOUSEHOLDER TRANSFORMATONS TO RESIDUALS... C CALL Q7APL(LA, N, K, A, V(R1), IER) C C *** COMPUTING C NOW MAY SAVE A FUNCTION EVALUATION AT C *** THE LAST ITERATION. C CALL L7ITV(K, C, V(AR1), V(R1)) CALL V7PRM(L, IV(IPIV1), C) C 110 IF(IV(1) .LT. 2) GO TO 220 GO TO 999 C C C *** RESIDUAL COMPUTATION FOR F.D. HESSIAN *** C 120 IF (L .LE. 0) GO TO 140 DO 130 I = 1, L 130 CALL V2AXY(N, V(R1), -C(I), A(1,I), V(R1)) 140 IF (IV(1) .GT. 0) GO TO 30 IV(1) = 2 GO TO 160 C C *** NEW GRADIENT (JACOBIAN) NEEDED *** C 150 IV(IV1SAV) = IV1 IF (IV(NFGCAL) .NE. IV(NFCALL)) IV(1) = 1 160 CALL V7SCP(N*P, V(DR1), ZERO) GO TO 999 C C *** COMPUTE NEW JACOBIAN *** C 170 NOCOV = MD .LE. P .OR. IABS(IV(COVREQ)) .GE. 3 FDH0 = DR1 + N*(P+L) IF (NDA .LE. 0) GO TO 370 DO 180 I = 1, NDA I1 = IN(1,I) - 1 IF (I1 .LT. 0) GO TO 180 J1 = IN(2,I) K = DR1 + I1*N T = NEGONE IF (J1 .LE. L) T = -C(J1) CALL V2AXY(N, V(K), T, DA(1,I), V(K)) IF (NOCOV) GO TO 180 IF (J1 .GT. L) GO TO 180 C *** ADD IN (L,P) PORTION OF SECOND-ORDER PART OF HESSIAN C *** FOR COVARIANCE OR REG. DIAG. COMPUTATIONS... J1 = J1 + P K = FDH0 + J1*(J1-1)/2 + I1 V(K) = V(K) - D7TPR(N, V(R1), DA(1,I)) 180 CONTINUE IF (IV1 .EQ. 2) GO TO 190 IV(1) = IV1 GO TO 999 190 IF (L .LE. 0) GO TO 30 IF (MD .GT. P) GO TO 240 IF (MD .GT. 0) GO TO 30 K = DR1 IER = IV(IERS) NRAN = L IF (IER .GT. 0) NRAN = IER - 1 IF (NRAN .LE. 0) GO TO 210 DO 200 I = 1, P CALL Q7APL(LA, N, NRAN, A, V(K), IER) K = K + N 200 CONTINUE 210 CALL V7CPY(L, V(CSAVE1), C) 220 IF (IER .EQ. 0) GO TO 30 C C *** ADJUST SUBSCRIPTS DESCRIBING R AND DR... C NRAN = IER - 1 DR1L = DR1 + NRAN NML = N - NRAN R1L = R1 + NRAN GO TO 30 C C *** CONVERGENCE OR LIMIT REACHED *** C 230 IF (L .LE. 0) GO TO 350 IV(COVREQ) = IV(CVRQSV) IV(RDREQ) = IV(RDRQSV) IF (IV(1) .GT. 6) GO TO 360 IF (MOD(IV(RDREQ),4) .EQ. 0) GO TO 360 IF (IV(FDH) .LE. 0 .AND. IABS(IV(COVREQ)) .LT. 3) GO TO 360 IF (IV(REGD) .GT. 0) GO TO 360 IF (IV(COVMAT) .GT. 0) GO TO 360 C C *** PREPARE TO FINISH COMPUTING COVARIANCE MATRIX AND REG. DIAG. *** C PP = L + P I = 0 IF (MOD(IV(RDREQ),4) .GE. 2) I = 1 IF (MOD(IV(RDREQ),2) .EQ. 1 .AND. IABS(IV(COVREQ)) .EQ. 1) I = I+2 IV(MODE) = PP + I I = DR1 + N*PP K = P * (P + 1) / 2 I1 = IV(LMAT) CALL V7CPY(K, V(I), V(I1)) I = I + K CALL V7SCP(PP*(PP+1)/2 - K, V(I), ZERO) IV(NFCOV) = IV(NFCOV) + 1 IV(NFCALL) = IV(NFCALL) + 1 IV(NFGCAL) = IV(NFCALL) IV(CNVCOD) = IV(1) IV(IV1SAV) = -1 IV(1) = 1 IV(NGCALL) = IV(NGCALL) + 1 IV(NGCOV) = IV(NGCOV) + 1 GO TO 999 C C *** FINISH COVARIANCE COMPUTATION *** C 240 I = DR1 + N*P DO 250 I1 = 1, L CALL V7SCL(N, V(I), NEGONE, A(1,I1)) I = I + N 250 CONTINUE PP = L + P HSAVE = IV(H) K = DR1 + N*PP LH = PP * (PP + 1) / 2 IF (IABS(IV(COVREQ)) .LT. 3) GO TO 270 I = IV(MODE) - 4 IF (I .GE. PP) GO TO 260 CALL V7SCP(LH, V(K), ZERO) CALL Q7RAD(N, N, PP, V, .FALSE., V(K), V(DR1), V) IV(MODE) = I + 8 IV(1) = 2 IV(NGCALL) = IV(NGCALL) + 1 IV(NGCOV) = IV(NGCOV) + 1 GO TO 160 C 260 IV(MODE) = I GO TO 300 C 270 PP1 = P + 1 DRI = DR1 + N*P LI = K + P*PP1/2 DO 290 I = PP1, PP DRI1 = DR1 DO 280 I1 = 1, I V(LI) = V(LI) + D7TPR(N, V(DRI), V(DRI1)) LI = LI + 1 DRI1 = DRI1 + N 280 CONTINUE DRI = DRI + N 290 CONTINUE CALL L7SRT(PP1, PP, V(K), V(K), I) IF (I .NE. 0) GO TO 310 300 TEMP1 = K + LH T = L7SVN(PP, V(K), V(TEMP1), V(TEMP1)) IF (T .LE. ZERO) GO TO 310 T = T / L7SVX(PP, V(K), V(TEMP1), V(TEMP1)) V(RCOND) = T IF (T .GT. R7MDC(4)) GO TO 320 310 IV(REGD) = -1 IV(COVMAT) = -1 IV(FDH) = -1 GO TO 340 320 IV(H) = TEMP1 IV(FDH) = IABS(HSAVE) IF (IV(MODE) - PP .LT. 2) GO TO 330 I = IV(H) CALL V7SCP(LH, V(I), ZERO) 330 CALL N2LRD(V(DR1), IV, V(K), LH, LIV, LV, N, N, PP, V(R1), 1 V(RD1), V) 340 CALL C7VFN(IV, V(K), LH, LIV, LV, N, PP, V) IV(H) = HSAVE C 350 IF (IV(REGD) .EQ. 1) IV(REGD) = RD1 360 IF (IV(1) .LE. 11) CALL S7CPR(C, IV, L, LIV) IF (IV(1) .GT. 6) GO TO 999 CALL N2CVP(IV, LIV, LV, P+L, V) CALL N2RDP(IV, LIV, LV, N, V(RD1), V) GO TO 999 C 370 IV(1) = 66 CALL ITSUM(V, V, IV, LIV, LV, P, V, ALF) C 999 RETURN C C *** LAST CARD OF RNSG FOLLOWS *** END PyBDSF-1.10.1/src/port3/rnsgb.f000066400000000000000000000240271420247104600157460ustar00rootroot00000000000000 SUBROUTINE RNSGB(A, ALF, B, C, DA, IN, IV, L, L1, LA, LIV, LV, 1 N, NDA, P, V, Y) C C *** ITERATION DRIVER FOR SEPARABLE NONLINEAR LEAST SQUARES, C *** WITH SIMPLE BOUNDS ON THE NONLINEAR VARIABLES. C C *** PARAMETER DECLARATIONS *** C INTEGER L, L1, LA, LIV, LV, N, NDA, P INTEGER IN(2,NDA), IV(LIV) C DIMENSION UIPARM(*) REAL A(LA,L1), ALF(P), B(2,P), C(L), DA(LA,NDA), 1 V(LV), Y(N) C C *** PURPOSE *** C C GIVEN A SET OF N OBSERVATIONS Y(1)....Y(N) OF A DEPENDENT VARIABLE C T(1)...T(N), RNSGB ATTEMPTS TO COMPUTE A LEAST SQUARES FIT C TO A FUNCTION ETA (THE MODEL) WHICH IS A LINEAR COMBINATION C C L C ETA(C,ALF,T) = SUM C * PHI(ALF,T) +PHI (ALF,T) C J=1 J J L+1 C C OF NONLINEAR FUNCTIONS PHI(J) DEPENDENT ON T AND ALF(1),...,ALF(P) C (.E.G. A SUM OF EXPONENTIALS OR GAUSSIANS). THAT IS, IT DETERMINES C NONLINEAR PARAMETERS ALF WHICH MINIMIZE C C 2 N 2 C NORM(RESIDUAL) = SUM (Y - ETA(C,ALF,T )) , C I=1 I I C C SUBJECT TO THE SIMPLE BOUND CONSTRAINTS C B(1,I) .LE. ALF(I) .LE. B(2,I), I = 1(1)P. C C THE (L+1)ST TERM IS OPTIONAL. C C C *** PARAMETERS *** C C A (IN) MATRIX PHI(ALF,T) OF THE MODEL. C ALF (I/O) NONLINEAR PARAMETERS. C INPUT = INITIAL GUESS, C OUTPUT = BEST ESTIMATE FOUND. C C (OUT) LINEAR PARAMETERS (ESTIMATED). C DA (IN) DERIVATIVES OF COLUMNS OF A WITH RESPECT TO COMPONENTS C OF ALF, AS SPECIFIED BY THE IN ARRAY... C IN (IN) WHEN RNSGB IS CALLED WITH IV(1) = 2 OR -2, THEN FOR C I = 1(1)NDA, COLUMN I OF DA IS THE PARTIAL C DERIVATIVE WITH RESPECT TO ALF(IN(1,I)) OF COLUMN C IN(2,I) OF A, UNLESS IV(1,I) IS NOT POSITIVE (IN C WHICH CASE COLUMN I OF DA IS IGNORED. IV(1) = -2 C MEANS THERE ARE MORE COLUMNS OF DA TO COME AND C RNSGB SHOULD RETURN FOR THEM. C IV (I/O) INTEGER PARAMETER AND SCRATCH VECTOR. RNSGB RETURNS C WITH IV(1) = 1 WHEN IT WANTS A TO BE EVALUATED AT C ALF AND WITH IV(1) = 2 WHEN IT WANTS DA TO BE C EVALUATED AT ALF. WHEN CALLED WITH IV(1) = -2 C (AFTER A RETURN WITH IV(1) = 2), RNSGB RETURNS C WITH IV(1) = -2 TO GET MORE COLUMNS OF DA. C L (IN) NUMBER OF LINEAR PARAMETERS TO BE ESTIMATED. C L1 (IN) L+1 IF PHI(L+1) IS IN THE MODEL, L IF NOT. C LA (IN) LEAD DIMENSION OF A. MUST BE AT LEAST N. C LIV (IN) LENGTH OF IV. MUST BE AT LEAST 110 + L + 4*P. C LV (IN) LENGTH OF V. MUST BE AT LEAST C 105 + 2*N + L*(L+3)/2 + P*(2*P + 21 + N). C N (IN) NUMBER OF OBSERVATIONS. C NDA (IN) NUMBER OF COLUMNS IN DA AND IN. C P (IN) NUMBER OF NONLINEAR PARAMETERS TO BE ESTIMATED. C V (I/O) FLOATING-POINT PARAMETER AND SCRATCH VECTOR. C Y (IN) RIGHT-HAND SIDE VECTOR. C C C *** EXTERNAL SUBROUTINES *** C REAL L7SVX, L7SVN, R7MDC EXTERNAL IVSET, ITSUM, L7ITV, L7SVX, L7SVN, RN2GB, Q7APL, 1 Q7RFH, R7MDC, S7CPR, V2AXY, V7CPY, V7PRM, V7SCP C C IVSET.... SUPPLIES DEFAULT PARAMETER VALUES. C ITSUM.... PRINTS ITERATION SUMMARY, INITIAL AND FINAL ALF. C L7ITV... APPLIES INVERSE-TRANSPOSE OF COMPACT LOWER TRIANG. MATRIX. C L7SVX... ESTIMATES LARGEST SING. VALUE OF LOWER TRIANG. MATRIX. C L7SVN... ESTIMATES SMALLEST SING. VALUE OF LOWER TRIANG. MATRIX. C RN2GB... UNDERLYING NONLINEAR LEAST-SQUARES SOLVER. C Q7APL... APPLIES HOUSEHOLDER TRANSFORMS STORED BY Q7RFH. C Q7RFH.... COMPUTES QR FACT. VIA HOUSEHOLDER TRANSFORMS WITH PIVOTING. C R7MDC... RETURNS MACHINE-DEP. CONSTANTS. C S7CPR... PRINTS LINEAR PARAMETERS AT SOLUTION. C V2AXY.... ADDS MULTIPLE OF ONE VECTOR TO ANOTHER. C V7CPY.... COPIES ONE VECTOR TO ANOTHER. C V7PRM.... PERMUTES VECTOR. C V7SCL... SCALES AND COPIES ONE VECTOR TO ANOTHER. C C *** LOCAL VARIABLES *** C INTEGER AR1, CSAVE1, D1, DR1, DR1L, I, I1, 1 IPIV1, IER, IV1, J1, JLEN, K, LL1O2, MD, N1, N2, 2 NML, NRAN, R1, R1L, RD1 REAL SINGTL, T REAL MACHEP, NEGONE, SNGFAC, ZERO C C *** SUBSCRIPTS FOR IV AND V *** C INTEGER AR, CSAVE, D, IERS, IPIVS, IV1SAV, 2 IVNEED, J, MODE, NEXTIV, NEXTV, 2 NFCALL, NFGCAL, PERM, R, 3 REGD, REGD0, RESTOR, TOOBIG, VNEED C C *** IV SUBSCRIPT VALUES *** C C/6 C DATA AR/110/, CSAVE/105/, D/27/, IERS/108/, IPIVS/109/, C 1 IV1SAV/104/, IVNEED/3/, J/70/, MODE/35/, NEXTIV/46/, C 2 NEXTV/47/, NFCALL/6/, NFGCAL/7/, PERM/58/, R/61/, REGD/67/, C 3 REGD0/82/, RESTOR/9/, TOOBIG/2/, VNEED/4/ C/7 PARAMETER (AR=110, CSAVE=105, D=27, IERS=108, IPIVS=109, 1 IV1SAV=104, IVNEED=3, J=70, MODE=35, NEXTIV=46, 2 NEXTV=47, NFCALL=6, NFGCAL=7, PERM=58, R=61, REGD=67, 3 REGD0=82, RESTOR=9, TOOBIG=2, VNEED=4) C/ DATA MACHEP/-1.E+0/, NEGONE/-1.E+0/, SNGFAC/1.E+2/, ZERO/0.E+0/ C C++++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++ C C IF (IV(1) .EQ. 0) CALL IVSET(1, IV, LIV, LV, V) N1 = 1 NML = N IV1 = IV(1) IF (IV1 .LE. 2) GO TO 20 C C *** CHECK INPUT INTEGERS *** C IF (P .LE. 0) GO TO 240 IF (L .LT. 0) GO TO 240 IF (N .LE. L) GO TO 240 IF (LA .LT. N) GO TO 240 IF (IV1 .LT. 12) GO TO 20 IF (IV1 .EQ. 14) GO TO 20 IF (IV1 .EQ. 12) IV(1) = 13 C C *** FRESH START -- COMPUTE STORAGE REQUIREMENTS *** C IF (IV(1) .GT. 16) GO TO 240 LL1O2 = L*(L+1)/2 JLEN = N*P I = L + P IF (IV(1) .NE. 13) GO TO 10 IV(IVNEED) = IV(IVNEED) + L IV(VNEED) = IV(VNEED) + P + 2*N + JLEN + LL1O2 + L 10 IF (IV(PERM) .LE. AR) IV(PERM) = AR + 1 CALL RN2GB(B, V, V, IV, LIV, LV, N, N, N1, NML, P, V, V, V, ALF) IF (IV(1) .NE. 14) GO TO 999 C C *** STORAGE ALLOCATION *** C IV(IPIVS) = IV(NEXTIV) IV(NEXTIV) = IV(NEXTIV) + L IV(D) = IV(NEXTV) IV(REGD0) = IV(D) + P IV(AR) = IV(REGD0) + N IV(CSAVE) = IV(AR) + LL1O2 IV(J) = IV(CSAVE) + L IV(R) = IV(J) + JLEN IV(NEXTV) = IV(R) + N IV(IERS) = 0 IF (IV1 .EQ. 13) GO TO 999 C C *** SET POINTERS INTO IV AND V *** C 20 AR1 = IV(AR) D1 = IV(D) DR1 = IV(J) DR1L = DR1 + L R1 = IV(R) R1L = R1 + L RD1 = IV(REGD0) CSAVE1 = IV(CSAVE) NML = N - L IF (IV1 .LE. 2) GO TO 50 C 30 N2 = NML CALL RN2GB(B, V(D1), V(DR1L), IV, LIV, LV, NML, N, N1, N2, P, 1 V(R1L), V(RD1), V, ALF) IF (IABS(IV(RESTOR)-2) .EQ. 1 .AND. L .GT. 0) 1 CALL V7CPY(L, C, V(CSAVE1)) IV1 = IV(1) IF (IV1-2) 40, 150, 230 C C *** NEW FUNCTION VALUE (RESIDUAL) NEEDED *** C 40 IV(IV1SAV) = IV(1) IV(1) = IABS(IV1) IF (IV(RESTOR) .EQ. 2 .AND. L .GT. 0) CALL V7CPY(L, V(CSAVE1), C) GO TO 999 C C *** COMPUTE NEW RESIDUAL OR GRADIENT *** C 50 IV(1) = IV(IV1SAV) MD = IV(MODE) IF (MD .LE. 0) GO TO 60 NML = N DR1L = DR1 R1L = R1 60 IF (IV(TOOBIG) .NE. 0) GO TO 30 IF (IABS(IV1) .EQ. 2) GO TO 170 C C *** COMPUTE NEW RESIDUAL *** C IF (L1 .LE. L) CALL V7CPY(N, V(R1), Y) IF (L1 .GT. L) CALL V2AXY(N, V(R1), NEGONE, A(1,L1), Y) IF (MD .GT. 0) GO TO 120 IER = 0 IF (L .LE. 0) GO TO 110 LL1O2 = L * (L + 1) / 2 IPIV1 = IV(IPIVS) CALL Q7RFH(IER, IV(IPIV1), N, LA, 0, L, A, V(AR1), LL1O2, C) C C *** DETERMINE NUMERICAL RANK OF A *** C IF (MACHEP .LE. ZERO) MACHEP = R7MDC(3) SINGTL = SNGFAC * FLOAT(MAX0(L,N)) * MACHEP K = L IF (IER .NE. 0) K = IER - 1 70 IF (K .LE. 0) GO TO 90 T = L7SVX(K, V(AR1), C, C) IF (T .GT. ZERO) T = L7SVN(K, V(AR1), C, C) / T IF (T .GT. SINGTL) GO TO 80 K = K - 1 GO TO 70 C C *** RECORD RANK IN IV(IERS)... IV(IERS) = 0 MEANS FULL RANK, C *** IV(IERS) .GT. 0 MEANS RANK IV(IERS) - 1. C 80 IF (K .GE. L) GO TO 100 90 IER = K + 1 CALL V7SCP(L-K, C(K+1), ZERO) 100 IV(IERS) = IER IF (K .LE. 0) GO TO 110 C C *** APPLY HOUSEHOLDER TRANSFORMATONS TO RESIDUALS... C CALL Q7APL(LA, N, K, A, V(R1), IER) C C *** COMPUTING C NOW MAY SAVE A FUNCTION EVALUATION AT C *** THE LAST ITERATION. C CALL L7ITV(K, C, V(AR1), V(R1)) CALL V7PRM(L, IV(IPIV1), C) C 110 IF(IV(1) .LT. 2) GO TO 220 GO TO 999 C C C *** RESIDUAL COMPUTATION FOR F.D. HESSIAN *** C 120 IF (L .LE. 0) GO TO 140 DO 130 I = 1, L 130 CALL V2AXY(N, V(R1), -C(I), A(1,I), V(R1)) 140 IF (IV(1) .GT. 0) GO TO 30 IV(1) = 2 GO TO 160 C C *** NEW GRADIENT (JACOBIAN) NEEDED *** C 150 IV(IV1SAV) = IV1 IF (IV(NFGCAL) .NE. IV(NFCALL)) IV(1) = 1 160 CALL V7SCP(N*P, V(DR1), ZERO) GO TO 999 C C *** COMPUTE NEW JACOBIAN *** C 170 IF (NDA .LE. 0) GO TO 240 DO 180 I = 1, NDA I1 = IN(1,I) - 1 IF (I1 .LT. 0) GO TO 180 J1 = IN(2,I) K = DR1 + I1*N T = NEGONE IF (J1 .LE. L) T = -C(J1) CALL V2AXY(N, V(K), T, DA(1,I), V(K)) 180 CONTINUE IF (IV1 .EQ. 2) GO TO 190 IV(1) = IV1 GO TO 999 190 IF (L .LE. 0) GO TO 30 IF (MD .GT. 0) GO TO 30 K = DR1 IER = IV(IERS) NRAN = L IF (IER .GT. 0) NRAN = IER - 1 IF (NRAN .LE. 0) GO TO 210 DO 200 I = 1, P CALL Q7APL(LA, N, NRAN, A, V(K), IER) K = K + N 200 CONTINUE 210 CALL V7CPY(L, V(CSAVE1), C) 220 IF (IER .EQ. 0) GO TO 30 C C *** ADJUST SUBSCRIPTS DESCRIBING R AND DR... C NRAN = IER - 1 DR1L = DR1 + NRAN NML = N - NRAN R1L = R1 + NRAN GO TO 30 C C *** CONVERGENCE OR LIMIT REACHED *** C 230 IF (IV(REGD) .EQ. 1) IV(REGD) = RD1 IF (IV(1) .LE. 11) CALL S7CPR(C, IV, L, LIV) GO TO 999 C 240 IV(1) = 66 CALL ITSUM(V, V, IV, LIV, LV, P, V, ALF) C 999 RETURN C C *** LAST CARD OF RNSGB FOLLOWS *** END PyBDSF-1.10.1/src/port3/s1mach.f000066400000000000000000000520441420247104600160070ustar00rootroot00000000000000 SUBROUTINE S1MACH C C S1MACH TESTS THE CONSISTENCY OF THE MACHINE CONSTANTS IN C I1MACH, R1MACH AND D1MACH. C INTEGER IMACH(16),I1MACH INTEGER STDOUT INTEGER DIGINT, DIGSP, DIGDP REAL RMACH(5),R1MACH REAL S2MACH, XR, YR REAL SBASE, SBASEM REAL ALOG10, SQRT DOUBLE PRECISION DLOG10, DSQRT DOUBLE PRECISION DMACH(5),D1MACH DOUBLE PRECISION S3MACH, XD, YD DOUBLE PRECISION DBASE, DBASEM C C/6S C INTEGER IFMT(12) C INTEGER EFMT(15) C INTEGER DFMT(15) C INTEGER CCPLUS C/7S CHARACTER*1 IFMT1(12), EFMT1(15), DFMT1(15), CCPLUS CHARACTER*12 IFMT CHARACTER*15 EFMT, DFMT EQUIVALENCE (IFMT1(1),IFMT), (EFMT1(1),EFMT), (DFMT1(1),DFMT) C/ INTEGER DWIDTH, WWIDTH, EWIDTH INTEGER DEMAX, DEMIN C EQUIVALENCE ( STDOUT, IMACH(2) ) EQUIVALENCE ( DIGINT, IMACH(8) ) EQUIVALENCE ( DIGSP, IMACH(11) ) EQUIVALENCE ( DIGDP, IMACH(14) ) C C/6S C DATA CCPLUS / 1H+ / C/7S DATA CCPLUS / '+' / C/ C C/6S C DATA IFMT(1 ) / 1H( / C DATA IFMT(2 ) / 1HA / C DATA IFMT(3 ) / 1H1 / C DATA IFMT(4 ) / 1H, / C DATA IFMT(5 ) / 1H5 / C DATA IFMT(6 ) / 1H1 / C DATA IFMT(7 ) / 1HX / C DATA IFMT(8 ) / 1H, / C DATA IFMT(9 ) / 1HI / C DATA IFMT(10) / 1H / C DATA IFMT(11) / 1H / C DATA IFMT(12) / 1H) / C/7S DATA IFMT1(1 ) / '(' / DATA IFMT1(2 ) / 'A' / DATA IFMT1(3 ) / '1' / DATA IFMT1(4 ) / ',' / DATA IFMT1(5 ) / '5' / DATA IFMT1(6 ) / '1' / DATA IFMT1(7 ) / 'X' / DATA IFMT1(8 ) / ',' / DATA IFMT1(9 ) / 'I' / DATA IFMT1(10) / ' ' / DATA IFMT1(11) / ' ' / DATA IFMT1(12) / ')' / C/ C C/6S C DATA EFMT( 1) / 1H( /, DFMT( 1) / 1H( / C DATA EFMT( 2) / 1HA /, DFMT( 2) / 1HA / C DATA EFMT( 3) / 1H1 /, DFMT( 3) / 1H1 / C DATA EFMT( 4) / 1H, /, DFMT( 4) / 1H, / C DATA EFMT( 5) / 1H3 /, DFMT( 5) / 1H3 / C DATA EFMT( 6) / 1H2 /, DFMT( 6) / 1H2 / C DATA EFMT( 7) / 1HX /, DFMT( 7) / 1HX / C DATA EFMT( 8) / 1H, /, DFMT( 8) / 1H, / C DATA EFMT( 9) / 1HE /, DFMT( 9) / 1HD / C DATA EFMT(10) / 1H /, DFMT(10) / 1H / C DATA EFMT(11) / 1H /, DFMT(11) / 1H / C DATA EFMT(12) / 1H. /, DFMT(12) / 1H. / C DATA EFMT(13) / 1H /, DFMT(13) / 1H / C DATA EFMT(14) / 1H /, DFMT(14) / 1H / C DATA EFMT(15) / 1H) /, DFMT(15) / 1H) / C/7S DATA EFMT1( 1) / '(' /, DFMT1( 1) / '(' / DATA EFMT1( 2) / 'A' /, DFMT1( 2) / 'A' / DATA EFMT1( 3) / '1' /, DFMT1( 3) / '1' / DATA EFMT1( 4) / ',' /, DFMT1( 4) / ',' / DATA EFMT1( 5) / '3' /, DFMT1( 5) / '3' / DATA EFMT1( 6) / '2' /, DFMT1( 6) / '2' / DATA EFMT1( 7) / 'X' /, DFMT1( 7) / 'X' / DATA EFMT1( 8) / ',' /, DFMT1( 8) / ',' / DATA EFMT1( 9) / 'E' /, DFMT1( 9) / 'D' / DATA EFMT1(10) / ' ' /, DFMT1(10) / ' ' / DATA EFMT1(11) / ' ' /, DFMT1(11) / ' ' / DATA EFMT1(12) / '.' /, DFMT1(12) / '.' / DATA EFMT1(13) / ' ' /, DFMT1(13) / ' ' / DATA EFMT1(14) / ' ' /, DFMT1(14) / ' ' / DATA EFMT1(15) / ')' /, DFMT1(15) / ')' / C/ C C FETCH ALL CONSTANTS INTO LOCAL ARRAYS C DO 10 I = 1,16 IMACH(I) = I1MACH(I) 10 CONTINUE C DO 20 I = 1,5 RMACH(I) = R1MACH(I) DMACH(I) = D1MACH(I) 20 CONTINUE C C COMPUTE NUMBER OF CHARACTER POSITIONS NEEDED FOR WRITING C OUT THE LARGEST INTEGER ALLOWING FOR ONE SPACE AND A SIGN C AND PLUG THE FIELD WIDTH IN THE FORMAT. C WWIDTH = ICEIL( ALOG10(FLOAT(IMACH(7)))*FLOAT(IMACH(8)) ) + 2 C/6S C CALL S88FMT( 2, WWIDTH, IFMT(10) ) C WRITE( STDOUT, 900 ) ( IFMT(I), I = 9, 11 ) C/7S CALL S88FMT( 2, WWIDTH, IFMT1(10) ) WRITE( STDOUT, 900 ) ( IFMT1(I), I = 9, 11 ) C/ 900 FORMAT(//37H FORMAT CONVERSION FOR INTEGERS IS - ,3A1 1 / 25H INTEGER CONSTANTS FOLLOW///) C C NOW WRITE OUT THE INTEGER CONSTANTS C WRITE( STDOUT, 1001 ) 1001 FORMAT(24H THE STANDARD INPUT UNIT) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(1) C WRITE( STDOUT, 1002 ) 1002 FORMAT(25H THE STANDARD OUTPUT UNIT) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(2) C WRITE( STDOUT, 1003 ) 1003 FORMAT(24H THE STANDARD PUNCH UNIT) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(3) C WRITE( STDOUT, 1004 ) 1004 FORMAT(32H THE STANDARD ERROR MESSAGE UNIT) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(4) C WRITE( STDOUT, 1005 ) 1005 FORMAT(28H THE NUMBER OF BITS PER WORD) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(5) C WRITE( STDOUT, 1006 ) 1006 FORMAT(34H THE NUMBER OF CHARACTERS PER WORD) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(6) C WRITE( STDOUT, 1007 ) 1007 FORMAT(34H A, THE BASE OF AN S-DIGIT INTEGER) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(7) C WRITE( STDOUT, 1008 ) 1008 FORMAT(31H S, THE NUMBER OF BASE-A DIGITS) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(8) C WRITE( STDOUT, 1009 ) 1009 FORMAT(32H A**S - 1, THE LARGEST MAGNITUDE) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(9) C WRITE( STDOUT, 1010 ) 1010 FORMAT(47H B, THE BASE OF A T-DIGIT FLOATING-POINT NUMBER) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(10) C WRITE( STDOUT, 1011 ) 1011 FORMAT(51H T, THE NUMBER OF BASE-B DIGITS IN SINGLE-PRECISION) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(11) C WRITE( STDOUT, 1012 ) 1012 FORMAT(45H EMIN, THE SMALLEST SINGLE-PRECISION EXPONENT) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(12) C WRITE( STDOUT, 1013 ) 1013 FORMAT(44H EMAX, THE LARGEST SINGLE-PRECISION EXPONENT) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(13) C WRITE( STDOUT, 1014 ) 1014 FORMAT(51H T, THE NUMBER OF BASE-B DIGITS IN DOUBLE-PRECISION) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(14) C WRITE( STDOUT, 1015 ) 1015 FORMAT(45H EMIN, THE SMALLEST DOUBLE-PRECISION EXPONENT) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(15) C WRITE( STDOUT, 1016 ) 1016 FORMAT(44H EMAX, THE LARGEST DOUBLE-PRECISION EXPONENT) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(16) C C COMPUTE THE NUMBER OF CHARACTER POSITIONS NEEDED FOR WRITING C OUT A SINGLE-PRECISION NUMBER ALLOWING FOR ONE SPACE AND C A SIGN AND PLUG THE FIELDS IN THE FORMAT. C DWIDTH = ICEIL( ALOG10(FLOAT(IMACH(10)))*FLOAT(IMACH(11)) ) C/6S C CALL S88FMT( 2, DWIDTH, EFMT(13) ) C/7S CALL S88FMT( 2, DWIDTH, EFMT1(13) ) C/ DEMIN = IFLR( ALOG10(FLOAT(IMACH(10)))*FLOAT(IMACH(12)-1) ) + 1 DEMAX = ICEIL( ALOG10(FLOAT(IMACH(10)))*FLOAT(IMACH(13)) ) EWIDTH = IFLR( ALOG10(FLOAT(MAX0(IABS(DEMIN),IABS(DEMAX)))) ) + 1 WWIDTH = DWIDTH + EWIDTH + 6 C/6S C CALL S88FMT( 2, WWIDTH, EFMT(10) ) C WRITE( STDOUT, 1900 ) ( EFMT(I), I = 9, 14 ) C/7S CALL S88FMT( 2, WWIDTH, EFMT1(10) ) WRITE( STDOUT, 1900 ) ( EFMT1(I), I = 9, 14 ) C/ 1900 FORMAT(//45H FORMAT CONVERSION FOR SINGLE-PRECISION IS - ,6A1 1 / 34H SINGLE-PRECISION CONSTANTS FOLLOW///) C C NOW WRITE OUT THE SINGLE-PRECISION CONSTANTS C WRITE( STDOUT, 2001 ) 2001 FORMAT(32H THE SMALLEST POSITIVE MAGNITUDE) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(1) C WRITE( STDOUT, 2002 ) 2002 FORMAT(22H THE LARGEST MAGNITUDE) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(2) C WRITE( STDOUT, 2003 ) 2003 FORMAT(30H THE SMALLEST RELATIVE SPACING) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(3) C WRITE( STDOUT, 2004 ) 2004 FORMAT(29H THE LARGEST RELATIVE SPACING) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(4) C WRITE( STDOUT, 2005 ) 2005 FORMAT(18H LOG10 OF THE BASE) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(5) C/6S C CALL S88FMT( 2, WWIDTH+1, EFMT(10) ) C CALL S88FMT( 2, DWIDTH+1, EFMT(13) ) C/7S CALL S88FMT( 2, WWIDTH+1, EFMT1(10) ) CALL S88FMT( 2, DWIDTH+1, EFMT1(13) ) C/ C COMPUTE THE NUMBER OF CHARACTER POSITIONS NEEDED FOR WRITING C OUT A DOUBLE-PRECISION NUMBER ALLOWING FOR ONE SPACE AND C A SIGN AND PLUG THE FIELDS IN THE FORMAT. C DWIDTH = ICEIL( ALOG10(FLOAT(IMACH(10)))*FLOAT(IMACH(14)) ) C/6S C CALL S88FMT( 2, DWIDTH, DFMT(13) ) C/7S CALL S88FMT( 2, DWIDTH, DFMT1(13) ) C/ DEMIN = IFLR( ALOG10(FLOAT(IMACH(10)))*FLOAT(IMACH(15)-1) ) + 1 DEMAX = ICEIL( ALOG10(FLOAT(IMACH(10)))*FLOAT(IMACH(16)) ) EWIDTH = IFLR( ALOG10(FLOAT(MAX0(IABS(DEMIN),IABS(DEMAX)))) ) + 1 WWIDTH = DWIDTH + EWIDTH + 6 C/6S C CALL S88FMT( 2, WWIDTH, DFMT(10) ) C WRITE( STDOUT, 2900 ) ( DFMT(I), I = 9, 14 ) C/7S CALL S88FMT( 2, WWIDTH, DFMT1(10) ) WRITE( STDOUT, 2900 ) ( DFMT1(I), I = 9, 14 ) C/ 2900 FORMAT(//45H FORMAT CONVERSION FOR DOUBLE-PRECISION IS - ,6A1 1 / 34H DOUBLE-PRECISION CONSTANTS FOLLOW///) C C NOW WRITE OUT THE DOUBLE-PRECISION CONSTANTS C WRITE( STDOUT, 3001 ) 3001 FORMAT(32H THE SMALLEST POSITIVE MAGNITUDE) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(1) C WRITE( STDOUT, 3002 ) 3002 FORMAT(22H THE LARGEST MAGNITUDE) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(2) C WRITE( STDOUT, 3003 ) 3003 FORMAT(30H THE SMALLEST RELATIVE SPACING) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(3) C WRITE( STDOUT, 3004 ) 3004 FORMAT(29H THE LARGEST RELATIVE SPACING) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(4) C WRITE( STDOUT, 3005 ) 3005 FORMAT(18H LOG10 OF THE BASE) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(5) C/6S C CALL S88FMT( 2, WWIDTH+1, DFMT(10) ) C CALL S88FMT( 2, DWIDTH+1, DFMT(13) ) C/7S CALL S88FMT( 2, WWIDTH+1, DFMT1(10) ) CALL S88FMT( 2, DWIDTH+1, DFMT1(13) ) C/ C NOW CHECK CONSISTENCY OF INTEGER CONSTANTS C/6S C CALL S88FMT( 2, 14, IFMT(5) ) C/7S CALL S88FMT( 2, 14, IFMT1(5) ) C/ IF( IMACH(11) .LE. IMACH(14) ) GOTO 4009 WRITE( STDOUT, 4001 ) 4001 FORMAT(30H0I1MACH(11) EXCEEDS I1MACH(14) ) WRITE( STDOUT, 4002 ) 4002 FORMAT(13H I1MACH(11) = ) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(11) WRITE( STDOUT, 4003 ) 4003 FORMAT(13H I1MACH(14) = ) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(14) 4009 CONTINUE C IF( IMACH(13) .LE. IMACH(16) ) GOTO 4019 WRITE( STDOUT, 4011 ) 4011 FORMAT(40H0WARNING - I1MACH(13) EXCEEDS I1MACH(16) ) WRITE( STDOUT, 4012 ) 4012 FORMAT(13H I1MACH(13) = ) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(13) WRITE( STDOUT, 4013 ) 4013 FORMAT(13H I1MACH(16) = ) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(16) 4019 CONTINUE C IF( IMACH(16)-IMACH(15) .GE. IMACH(13)-IMACH(12) ) GOTO 4029 WRITE( STDOUT, 4021 ) 4021 FORMAT(34H0WARNING - I1MACH(13) - I1MACH(12) ) WRITE( STDOUT, 4022 ) 4022 FORMAT(32H EXCEEDS I1MACH(16) - I1MACH(15) ) WRITE( STDOUT, 4023 ) 4023 FORMAT(13H I1MACH(12) = ) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(12) WRITE( STDOUT, 4024 ) 4024 FORMAT(13H I1MACH(13) = ) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(13) WRITE( STDOUT, 4025 ) 4025 FORMAT(13H I1MACH(15) = ) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(15) WRITE( STDOUT, 4026 ) 4026 FORMAT(13H I1MACH(16) = ) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(16) 4029 CONTINUE C N = 0 IBASEM = IMACH(7) - 1 DO 4030 I = 1, DIGINT N = N*IMACH(7) + IBASEM 4030 CONTINUE C IF( IMACH(9) .EQ. N) GOTO 4039 WRITE( STDOUT, 4031 ) 4031 FORMAT(39H1IMACH(9) IS NOT IMACH(7)**IMACH(8) - 1 ) WRITE( STDOUT, 4032 ) 4032 FORMAT(12H I1MACH(7) = ) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(7) WRITE( STDOUT, 4034 ) 4034 FORMAT(12H I1MACH(8) = ) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(8) WRITE( STDOUT, 4035 ) 4035 FORMAT(12H I1MACH(9) = ) WRITE( STDOUT, IFMT ) CCPLUS, IMACH(9) 4039 CONTINUE C C NOW CHECK CONSISTENCY OF SINGLE-PRECISION CONSTANTS C/6S C CALL S88FMT( 2, 19, EFMT(5) ) C/7S CALL S88FMT( 2, 19, EFMT1(5) ) C/ XR = S2MACH( 1.0, IMACH(10), IMACH(12)-1 ) IF( XR .EQ. RMACH(1) ) GOTO 5009 WRITE( STDOUT, 5001 ) 5001 FORMAT(47H0R1MACH(1) DOES NOT AGREE WITH CALCULATED VALUE) WRITE( STDOUT, 5002 ) 5002 FORMAT(12H R1MACH(1) = ) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(1) WRITE( STDOUT, 5003 ) 5003 FORMAT(19H CALCULATED VALUE = ) WRITE( STDOUT, EFMT ) CCPLUS, XR WRITE( STDOUT, 5004 ) 5004 FORMAT(14H DIFFERENCE = ) XR = RMACH(1) - XR WRITE( STDOUT, EFMT ) CCPLUS, XR 5009 CONTINUE C XR = 0.0 SBASE = FLOAT( IMACH(10) ) SBASEM = FLOAT( IMACH(10)-1 ) DO 5010 I = 1, DIGSP XR = (XR + SBASEM)/SBASE 5010 CONTINUE C XR = S2MACH( XR, IMACH(10), IMACH(13) ) IF( XR .EQ. RMACH(2) ) GOTO 5019 WRITE( STDOUT, 5011 ) 5011 FORMAT(47H0R1MACH(2) DOES NOT AGREE WITH CALCULATED VALUE) WRITE( STDOUT, 5012 ) 5012 FORMAT(12H R1MACH(2) = ) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(2) WRITE( STDOUT, 5013 ) 5013 FORMAT(19H CALCULATED VALUE = ) WRITE( STDOUT, EFMT ) CCPLUS, XR WRITE( STDOUT, 5014 ) 5014 FORMAT(14H DIFFERENCE = ) XR = RMACH(2) - XR WRITE( STDOUT, EFMT ) CCPLUS, XR 5019 CONTINUE C XR = S2MACH( 1.0, IMACH(10), -IMACH(11) ) IF( XR .EQ. RMACH(3) ) GOTO 5029 WRITE( STDOUT, 5021 ) 5021 FORMAT(47H0R1MACH(3) DOES NOT AGREE WITH CALCULATED VALUE) WRITE( STDOUT, 5022 ) 5022 FORMAT(12H R1MACH(3) = ) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(3) WRITE( STDOUT, 5023 ) 5023 FORMAT(19H CALCULATED VALUE = ) WRITE( STDOUT, EFMT ) CCPLUS, XR WRITE( STDOUT, 5024 ) 5024 FORMAT(14H DIFFERENCE = ) XR = RMACH(3) - XR WRITE( STDOUT, EFMT ) CCPLUS, XR 5029 CONTINUE C XR = S2MACH( 1.0, IMACH(10), 1-IMACH(11) ) IF( XR .EQ. RMACH(4) ) GOTO 5039 WRITE( STDOUT, 5031 ) 5031 FORMAT(47H0R1MACH(4) DOES NOT AGREE WITH CALCULATED VALUE) WRITE( STDOUT, 5032 ) 5032 FORMAT(12H R1MACH(4) = ) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(4) WRITE( STDOUT, 5033 ) 5033 FORMAT(19H CALCULATED VALUE = ) WRITE( STDOUT, EFMT ) CCPLUS, XR WRITE( STDOUT, 5034 ) 5034 FORMAT(14H DIFFERENCE = ) XR = RMACH(4) - XR WRITE( STDOUT, EFMT ) CCPLUS, XR 5039 CONTINUE C XR = ALOG10( FLOAT(IMACH(10)) ) IF( XR .EQ. RMACH(5) ) GOTO 5049 WRITE( STDOUT, 5041 ) 5041 FORMAT(47H0R1MACH(5) DOES NOT AGREE WITH CALCULATED VALUE) WRITE( STDOUT, 5042 ) 5042 FORMAT(12H R1MACH(5) = ) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(5) WRITE( STDOUT, 5043 ) 5043 FORMAT(19H CALCULATED VALUE = ) WRITE( STDOUT, EFMT ) CCPLUS, XR WRITE( STDOUT, 5044 ) 5044 FORMAT(14H DIFFERENCE = ) XR = RMACH(5) - XR WRITE( STDOUT, EFMT ) CCPLUS, XR 5049 CONTINUE C C NOW CHECK CONSISTENCY OF DOUBLE-PRECISION CONSTANTS C/6S C CALL S88FMT( 2, 19, DFMT(5) ) C/7S CALL S88FMT( 2, 19, DFMT1(5) ) C/ XD = S3MACH( 1.0D0, IMACH(10), IMACH(15)-1 ) IF( XD .EQ. DMACH(1) ) GOTO 6009 WRITE( STDOUT, 6001 ) 6001 FORMAT(47H0D1MACH(1) DOES NOT AGREE WITH CALCULATED VALUE) WRITE( STDOUT, 6002 ) 6002 FORMAT(12H D1MACH(1) = ) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(1) WRITE( STDOUT, 6003 ) 6003 FORMAT(19H CALCULATED VALUE = ) WRITE( STDOUT, DFMT ) CCPLUS, XD WRITE( STDOUT, 6004 ) 6004 FORMAT(14H DIFFERENCE = ) XD = DMACH(1) - XD WRITE( STDOUT, DFMT ) CCPLUS, XD 6009 CONTINUE C XD = 0.0D0 DBASE = DBLE ( FLOAT( IMACH(10) ) ) DBASEM = DBLE ( FLOAT( IMACH(10)-1 ) ) DO 6010 I = 1, DIGDP XD = (XD + DBASEM)/DBASE 6010 CONTINUE C XD = S3MACH( XD, IMACH(10), IMACH(16) ) IF( XD .EQ. DMACH(2) ) GOTO 6019 WRITE( STDOUT, 6011 ) 6011 FORMAT(47H0D1MACH(2) DOES NOT AGREE WITH CALCULATED VALUE) WRITE( STDOUT, 6012 ) 6012 FORMAT(12H D1MACH(2) = ) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(2) WRITE( STDOUT, 6013 ) 6013 FORMAT(19H CALCULATED VALUE = ) WRITE( STDOUT, DFMT ) CCPLUS, XD WRITE( STDOUT, 6014 ) 6014 FORMAT(14H DIFFERENCE = ) XD = DMACH(2) - XD WRITE( STDOUT, DFMT ) CCPLUS, XD 6019 CONTINUE C XD = S3MACH( 1.0D0, IMACH(10), -IMACH(14) ) IF( XD .EQ. DMACH(3) ) GOTO 6029 WRITE( STDOUT, 6021 ) 6021 FORMAT(47H0D1MACH(3) DOES NOT AGREE WITH CALCULATED VALUE) WRITE( STDOUT, 6022 ) 6022 FORMAT(12H D1MACH(3) = ) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(3) WRITE( STDOUT, 6023 ) 6023 FORMAT(19H CALCULATED VALUE = ) WRITE( STDOUT, DFMT ) CCPLUS, XD WRITE( STDOUT, 6024 ) 6024 FORMAT(14H DIFFERENCE = ) XD = DMACH(3) - XD WRITE( STDOUT, DFMT ) CCPLUS, XD 6029 CONTINUE C XD = S3MACH( 1.0D0, IMACH(10), 1-IMACH(14) ) IF( XD .EQ. DMACH(4) ) GOTO 6039 WRITE( STDOUT, 6031 ) 6031 FORMAT(47H0D1MACH(4) DOES NOT AGREE WITH CALCULATED VALUE) WRITE( STDOUT, 6032 ) 6032 FORMAT(12H D1MACH(4) = ) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(4) WRITE( STDOUT, 6033 ) 6033 FORMAT(19H CALCULATED VALUE = ) WRITE( STDOUT, DFMT ) CCPLUS, XD WRITE( STDOUT, 6034 ) 6034 FORMAT(14H DIFFERENCE = ) XD = DMACH(4) - XD WRITE( STDOUT, DFMT ) CCPLUS, XD 6039 CONTINUE C XD = DLOG10( DBLE(FLOAT(IMACH(10))) ) IF( XD .EQ. DMACH(5) ) GOTO 6049 WRITE( STDOUT, 6041 ) 6041 FORMAT(47H0D1MACH(5) DOES NOT AGREE WITH CALCULATED VALUE) WRITE( STDOUT, 6042 ) 6042 FORMAT(12H D1MACH(5) = ) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(5) WRITE( STDOUT, 6043 ) 6043 FORMAT(19H CALCULATED VALUE = ) WRITE( STDOUT, DFMT ) CCPLUS, XD WRITE( STDOUT, 6044 ) 6044 FORMAT(14H DIFFERENCE = ) XD = DMACH(5) - XD WRITE( STDOUT, DFMT ) CCPLUS, XD 6049 CONTINUE C C NOW SEE IF SINGLE-PRECISION IS CLOSED UNDER NEGATION C XR = -RMACH(1) XR = -XR IF( XR .EQ. RMACH(1) ) GOTO 7009 WRITE( STDOUT, 7001 ) 7001 FORMAT(29H0-(-R1MACH(1)) .NE. R1MACH(1)) WRITE( STDOUT, 7002 ) 7002 FORMAT(16H R1MACH(1) = ) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(1) WRITE( STDOUT, 7003 ) 7003 FORMAT(16H -(-R1MACH(1)) = ) WRITE( STDOUT, EFMT ) CCPLUS, XR 7009 CONTINUE C XR = -RMACH(2) XR = -XR IF( XR .EQ. RMACH(2) ) GOTO 7019 WRITE( STDOUT, 7011 ) 7011 FORMAT(29H0-(-R1MACH(2)) .NE. R1MACH(2)) WRITE( STDOUT, 7012 ) 7012 FORMAT(16H R1MACH(2) = ) WRITE( STDOUT, EFMT ) CCPLUS, RMACH(2) WRITE( STDOUT, 7013 ) 7013 FORMAT(16H -(-R1MACH(2)) = ) WRITE( STDOUT, EFMT ) CCPLUS, XR 7019 CONTINUE C C NOW SEE IF DOUBLE-PRECISION IS CLOSED UNDER NEGATION C XD = -DMACH(1) XD = -XD IF( XD .EQ. DMACH(1) ) GOTO 8009 WRITE( STDOUT, 8001 ) 8001 FORMAT(29H0-(-D1MACH(1)) .NE. D1MACH(1)) WRITE( STDOUT, 8002 ) 8002 FORMAT(16H D1MACH(1) = ) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(1) WRITE( STDOUT, 8003 ) 8003 FORMAT(16H -(-D1MACH(1)) = ) WRITE( STDOUT, DFMT ) CCPLUS, XD 8009 CONTINUE C XD = -DMACH(2) XD = -XD IF( XD .EQ. DMACH(2) ) GOTO 8019 WRITE( STDOUT, 8011 ) 8011 FORMAT(29H0-(-D1MACH(2)) .NE. D1MACH(2)) WRITE( STDOUT, 8012 ) 8012 FORMAT(16H D1MACH(2) = ) WRITE( STDOUT, DFMT ) CCPLUS, DMACH(2) WRITE( STDOUT, 8013 ) 8013 FORMAT(16H -(-D1MACH(2)) = ) WRITE( STDOUT, DFMT ) CCPLUS, XD 8019 CONTINUE C C CHECK THAT SQRT AND DSQRT WORK NEAR OVER- AND UNDERFLOW LIMITS. C N = IMACH(11)/2 + 1 XR = SQRT(RMACH(1)) IF (XR .GT. 0.0) GO TO 9002 WRITE( STDOUT, 9001 ) 9001 FORMAT(18H SQRT(R1MACH(1)) =) WRITE( STDOUT, EFMT ) CCPLUS, XR GO TO 9004 C SCALE TO AVOID TROUBLE FROM UNDERFLOW... 9002 XR = S2MACH( XR, IMACH(10), N) YR = S2MACH( RMACH(1), IMACH(10), 2*N) YR = ABS(XR*XR - YR) / YR IF (YR .LT. 2.*RMACH(4)) GO TO 9004 WRITE( STDOUT, 9003 ) 9003 FORMAT(35H EXCESSIVE ERROR IN SQRT(R1MACH(1))/13H REL. ERROR =) WRITE( STDOUT, EFMT ) CCPLUS, YR 9004 XR = SQRT(RMACH(2)) IF (XR .GT. 0.0) GO TO 9006 WRITE( STDOUT, 9005 ) 9005 FORMAT(18H SQRT(R1MACH(2)) =) WRITE( STDOUT, EFMT ) CCPLUS, XR GO TO 9008 C SCALE TO AVOID TROUBLE FROM OVERFLOW... 9006 XR = S2MACH( XR, IMACH(10), -N) YR = S2MACH( RMACH(2), IMACH(10), -2*N) YR = ABS(XR*XR - YR) / YR IF (YR .LT. 2.*RMACH(4)) GO TO 9008 WRITE( STDOUT, 9007 ) 9007 FORMAT(35H EXCESSIVE ERROR IN SQRT(R1MACH(2))/13H REL. ERROR =) WRITE( STDOUT, EFMT ) CCPLUS, YR C 9008 N = IMACH(14)/2 + 1 XD = DSQRT(DMACH(1)) IF (XD .GT. 0.D0) GO TO 9010 WRITE( STDOUT, 9009 ) 9009 FORMAT(19H DSQRT(D1MACH(1)) =) WRITE( STDOUT, DFMT ) CCPLUS, XD GO TO 9012 C AGAIN SCALE TO AVOID TROUBLE FROM UNDERFLOW... 9010 XD = S3MACH( XD, IMACH(10), N) YD = S3MACH( DMACH(1), IMACH(10), 2*N) YD = DABS(XD*XD - YD) / YD IF (YD .LT. 2.D0*DMACH(4)) GO TO 9012 WRITE( STDOUT, 9011 ) 9011 FORMAT(36H EXCESSIVE ERROR IN DSQRT(D1MACH(1))/13H REL. ERROR =) WRITE( STDOUT, EFMT ) CCPLUS, YD 9012 XD = DSQRT(DMACH(2)) IF (XD .GT. 0.0D0) GO TO 9014 WRITE( STDOUT, 9013 ) 9013 FORMAT(19H DSQRT(D1MACH(2)) =) WRITE( STDOUT, EFMT ) CCPLUS, XD GO TO 9016 C AGAIN SCALE TO AVOID TROUBLE FROM OVERFLOW... 9014 XD = S3MACH( XD, IMACH(10), -N) YD = S3MACH( DMACH(2), IMACH(10), -2*N) YD = DABS(XD*XD - YD) / YD IF (YD .LT. 2.D0*DMACH(4)) GO TO 9016 WRITE( STDOUT, 9015 ) 9015 FORMAT(36H EXCESSIVE ERROR IN DSQRT(D1MACH(2))/13H REL. ERROR =) WRITE( STDOUT, EFMT ) CCPLUS, YD 9016 RETURN C END PyBDSF-1.10.1/src/port3/s2mach.f000066400000000000000000000010201420247104600157740ustar00rootroot00000000000000 REAL FUNCTION S2MACH( XR, BASE, EXP ) C C S2MACH = XR * BASE**EXP C C (17-JUN-85) -- REVISED TO MAKE OVERFLOW LESS LIKELY INTEGER BASE, EXP REAL TBASE, XR C TBASE = FLOAT(BASE) S2MACH = XR C N = EXP IF( N .GE. 0 ) GO TO 20 C N = -N TBASE = 1.0/TBASE C 20 IF( MOD(N,2) .NE. 0 ) S2MACH = S2MACH*TBASE N = N/2 IF( N .LT. 2 ) GO TO 30 TBASE = TBASE * TBASE GO TO 20 C 30 IF (N .EQ. 1) S2MACH = (S2MACH * TBASE) * TBASE RETURN C END PyBDSF-1.10.1/src/port3/s3grd.f000066400000000000000000000220701420247104600156510ustar00rootroot00000000000000 SUBROUTINE S3GRD(ALPHA, B, D, ETA0, FX, G, IRC, P, W, X) C C *** COMPUTE FINITE DIFFERENCE GRADIENT BY STWEART*S SCHEME *** C C *** PARAMETERS *** C INTEGER IRC, P REAL ALPHA(P), B(2,P), D(P), ETA0, FX, G(P), W(6), 1 X(P) C C....................................................................... C C *** PURPOSE *** C C THIS SUBROUTINE USES AN EMBELLISHED FORM OF THE FINITE-DIFFER- C ENCE SCHEME PROPOSED BY STEWART (REF. 1) TO APPROXIMATE THE C GRADIENT OF THE FUNCTION F(X), WHOSE VALUES ARE SUPPLIED BY C REVERSE COMMUNICATION. C C *** PARAMETER DESCRIPTION *** C C ALPHA IN (APPROXIMATE) DIAGONAL ELEMENTS OF THE HESSIAN OF F(X). C B IN ARRAY OF SIMPLE LOWER AND UPPER BOUNDS ON X. X MUST C SATISFY B(1,I) .LE. X(I) .LE. B(2,I), I = 1(1)P. C FOR ALL I WITH B(1,I) .GE. B(2,I), S3GRD SIMPLY C SETS G(I) TO 0. C D IN SCALE VECTOR SUCH THAT D(I)*X(I), I = 1,...,P, ARE IN C COMPARABLE UNITS. C ETA0 IN ESTIMATED BOUND ON RELATIVE ERROR IN THE FUNCTION VALUE... C (TRUE VALUE) = (COMPUTED VALUE)*(1+E), WHERE C ABS(E) .LE. ETA0. C FX I/O ON INPUT, FX MUST BE THE COMPUTED VALUE OF F(X). ON C OUTPUT WITH IRC = 0, FX HAS BEEN RESTORED TO ITS ORIGINAL C VALUE, THE ONE IT HAD WHEN S3GRD WAS LAST CALLED WITH C IRC = 0. C G I/O ON INPUT WITH IRC = 0, G SHOULD CONTAIN AN APPROXIMATION C TO THE GRADIENT OF F NEAR X, E.G., THE GRADIENT AT THE C PREVIOUS ITERATE. WHEN S3GRD RETURNS WITH IRC = 0, G IS C THE DESIRED FINITE-DIFFERENCE APPROXIMATION TO THE C GRADIENT AT X. C IRC I/O INPUT/RETURN CODE... BEFORE THE VERY FIRST CALL ON S3GRD, C THE CALLER MUST SET IRC TO 0. WHENEVER S3GRD RETURNS A C NONZERO VALUE (OF AT MOST P) FOR IRC, IT HAS PERTURBED C SOME COMPONENT OF X... THE CALLER SHOULD EVALUATE F(X) C AND CALL S3GRD AGAIN WITH FX = F(X). IF B PREVENTS C ESTIMATING G(I) I.E., IF THERE IS AN I WITH C B(1,I) .LT. B(2,I) BUT WITH B(1,I) SO CLOSE TO B(2,I) C THAT THE FINITE-DIFFERENCING STEPS CANNOT BE CHOSEN, C THEN S3GRD RETURNS WITH IRC .GT. P. C P IN THE NUMBER OF VARIABLES (COMPONENTS OF X) ON WHICH F C DEPENDS. C X I/O ON INPUT WITH IRC = 0, X IS THE POINT AT WHICH THE C GRADIENT OF F IS DESIRED. ON OUTPUT WITH IRC NONZERO, X C IS THE POINT AT WHICH F SHOULD BE EVALUATED. ON OUTPUT C WITH IRC = 0, X HAS BEEN RESTORED TO ITS ORIGINAL VALUE C (THE ONE IT HAD WHEN S3GRD WAS LAST CALLED WITH IRC = 0) C AND G CONTAINS THE DESIRED GRADIENT APPROXIMATION. C W I/O WORK VECTOR OF LENGTH 6 IN WHICH S3GRD SAVES CERTAIN C QUANTITIES WHILE THE CALLER IS EVALUATING F(X) AT A C PERTURBED X. C C *** APPLICATION AND USAGE RESTRICTIONS *** C C THIS ROUTINE IS INTENDED FOR _USE_ WITH QUASI-NEWTON ROUTINES C FOR UNCONSTRAINED MINIMIZATION (IN WHICH CASE ALPHA COMES FROM C THE DIAGONAL OF THE QUASI-NEWTON HESSIAN APPROXIMATION). C C *** ALGORITHM NOTES *** C C THIS CODE DEPARTS FROM THE SCHEME PROPOSED BY STEWART (REF. 1) C IN ITS GUARDING AGAINST OVERLY LARGE OR SMALL STEP SIZES AND ITS C HANDLING OF SPECIAL CASES (SUCH AS ZERO COMPONENTS OF ALPHA OR G). C C *** REFERENCES *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C C *** HISTORY *** C C DESIGNED AND CODED BY DAVID M. GAY (SUMMER 1977/SUMMER 1980). C C *** GENERAL *** C C THIS ROUTINE WAS PREPARED IN CONNECTION WITH WORK SUPPORTED BY C THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS MCS76-00324 AND C MCS-7906671. C C....................................................................... C C ***** EXTERNAL FUNCTION ***** C REAL R7MDC EXTERNAL R7MDC C R7MDC... RETURNS MACHINE-DEPENDENT CONSTANTS. C C ***** INTRINSIC FUNCTIONS ***** C/+ REAL SQRT C/ C ***** LOCAL VARIABLES ***** C LOGICAL HIT INTEGER FH, FX0, HSAVE, I, XISAVE REAL AAI, AFX, AFXETA, AGI, ALPHAI, AXI, AXIBAR, 1 DISCON, ETA, GI, H, HMIN, XI, XIH REAL C2000, FOUR, HMAX0, HMIN0, H0, MACHEP, ONE, P002, 1 THREE, TWO, ZERO C C/6 C DATA C2000/2.0E+3/, FOUR/4.0E+0/, HMAX0/0.02E+0/, HMIN0/5.0E+1/, C 1 ONE/1.0E+0/, P002/0.002E+0/, THREE/3.0E+0/, C 2 TWO/2.0E+0/, ZERO/0.0E+0/ C/7 PARAMETER (C2000=2.0E+3, FOUR=4.0E+0, HMAX0=0.02E+0, HMIN0=5.0E+1, 1 ONE=1.0E+0, P002=0.002E+0, THREE=3.0E+0, 2 TWO=2.0E+0, ZERO=0.0E+0) C/ C/6 C DATA FH/3/, FX0/4/, HSAVE/5/, XISAVE/6/ C/7 PARAMETER (FH=3, FX0=4, HSAVE=5, XISAVE=6) C/ C C--------------------------------- BODY ------------------------------ C IF (IRC) 80, 10, 210 C C *** FRESH START -- GET MACHINE-DEPENDENT CONSTANTS *** C C STORE MACHEP IN W(1) AND H0 IN W(2), WHERE MACHEP IS THE UNIT C ROUNDOFF (THE SMALLEST POSITIVE NUMBER SUCH THAT C 1 + MACHEP .GT. 1 AND 1 - MACHEP .LT. 1), AND H0 IS THE C SQUARE-ROOT OF MACHEP. C 10 W(1) = R7MDC(3) W(2) = SQRT(W(1)) C W(FX0) = FX C C *** INCREMENT I AND START COMPUTING G(I) *** C 20 I = IABS(IRC) + 1 IF (I .GT. P) GO TO 220 IRC = I IF (B(1,I) .LT. B(2,I)) GO TO 30 G(I) = ZERO GO TO 20 30 AFX = ABS(W(FX0)) MACHEP = W(1) H0 = W(2) HMIN = HMIN0 * MACHEP XI = X(I) W(XISAVE) = XI AXI = ABS(XI) AXIBAR = AMAX1(AXI, ONE/D(I)) GI = G(I) AGI = ABS(GI) ETA = ABS(ETA0) IF (AFX .GT. ZERO) ETA = AMAX1(ETA, AGI*AXI*MACHEP/AFX) ALPHAI = ALPHA(I) IF (ALPHAI .EQ. ZERO) GO TO 130 IF (GI .EQ. ZERO .OR. FX .EQ. ZERO) GO TO 140 AFXETA = AFX*ETA AAI = ABS(ALPHAI) C C *** COMPUTE H = STEWART*S FORWARD-DIFFERENCE STEP SIZE. C IF (GI**2 .LE. AFXETA*AAI) GO TO 40 H = TWO* SQRT(AFXETA/AAI) H = H*(ONE - AAI*H/(THREE*AAI*H + FOUR*AGI)) GO TO 50 C40 H = TWO*(AFXETA*AGI/(AAI**2))**(ONE/THREE) 40 H = TWO * (AFXETA*AGI)**(ONE/THREE) * AAI**(-TWO/THREE) H = H*(ONE - TWO*AGI/(THREE*AAI*H + FOUR*AGI)) C C *** ENSURE THAT H IS NOT INSIGNIFICANTLY SMALL *** C 50 H = AMAX1(H, HMIN*AXIBAR) C C *** _USE_ FORWARD DIFFERENCE IF BOUND ON TRUNCATION ERROR IS AT C *** MOST 10**-3. C IF (AAI*H .LE. P002*AGI) GO TO 120 C C *** COMPUTE H = STEWART*S STEP FOR CENTRAL DIFFERENCE. C DISCON = C2000*AFXETA H = DISCON/(AGI + SQRT(GI**2 + AAI*DISCON)) C C *** ENSURE THAT H IS NEITHER TOO SMALL NOR TOO BIG *** C H = AMAX1(H, HMIN*AXIBAR) IF (H .GE. HMAX0*AXIBAR) H = AXIBAR * H0**(TWO/THREE) C C *** COMPUTE CENTRAL DIFFERENCE *** C XIH = XI + H IF (XI - H .LT. B(1,I)) GO TO 60 IRC = -I IF (XIH .LE. B(2,I)) GO TO 200 H = -H XIH = XI + H IF (XI + TWO*H .LT. B(1,I)) GO TO 190 GO TO 70 60 IF (XI + TWO*H .GT. B(2,I)) GO TO 190 C *** MUST DO OFF-SIDE CENTRAL DIFFERENCE *** 70 IRC = -(I + P) GO TO 200 C 80 I = -IRC IF (I .LE. P) GO TO 100 I = I - P IF (I .GT. P) GO TO 90 W(FH) = FX H = TWO * W(HSAVE) XIH = W(XISAVE) + H IRC = IRC - P GO TO 200 C C *** FINISH OFF-SIDE CENTRAL DIFFERENCE *** C 90 I = I - P G(I) = (FOUR*W(FH) - FX - THREE*W(FX0)) / W(HSAVE) IRC = I X(I) = W(XISAVE) GO TO 20 C 100 H = -W(HSAVE) IF (H .GT. ZERO) GO TO 110 W(FH) = FX XIH = W(XISAVE) + H GO TO 200 C 110 G(I) = (W(FH) - FX) / (TWO * H) X(I) = W(XISAVE) GO TO 20 C C *** COMPUTE FORWARD DIFFERENCES IN VARIOUS CASES *** C 120 IF (H .GE. HMAX0*AXIBAR) H = H0 * AXIBAR IF (ALPHAI*GI .LT. ZERO) H = -H GO TO 150 130 H = AXIBAR GO TO 150 140 H = H0 * AXIBAR C 150 HIT = .FALSE. 160 XIH = XI + H IF (H .GT. ZERO) GO TO 170 IF (XIH .GE. B(1,I)) GO TO 200 GO TO 180 170 IF (XIH .LE. B(2,I)) GO TO 200 180 IF (HIT) GO TO 190 HIT = .TRUE. H = -H GO TO 160 C C *** ERROR RETURN... 190 IRC = I + P GO TO 230 C C *** RETURN FOR NEW FUNCTION VALUE... 200 X(I) = XIH W(HSAVE) = H GO TO 999 C C *** COMPUTE ACTUAL FORWARD DIFFERENCE *** C 210 G(IRC) = (FX - W(FX0)) / W(HSAVE) X(IRC) = W(XISAVE) GO TO 20 C C *** RESTORE FX AND INDICATE THAT G HAS BEEN COMPUTED *** C 220 IRC = 0 230 FX = W(FX0) C 999 RETURN C *** LAST LINE OF S3GRD FOLLOWS *** END PyBDSF-1.10.1/src/port3/s3mach.f000066400000000000000000000010521420247104600160020ustar00rootroot00000000000000 DOUBLE PRECISION FUNCTION S3MACH( XD, BASE, EXP ) C C S3MACH = XD * BASE**EXP C C (17-JUN-85) -- REVISED TO MAKE OVERFLOW LESS LIKELY INTEGER BASE, EXP DOUBLE PRECISION TBASE, XD C TBASE = FLOAT(BASE) S3MACH = XD C N = EXP IF( N .GE. 0 ) GO TO 20 C N = -N TBASE = 1.0D0/TBASE C 20 IF( MOD(N,2) .NE. 0 ) S3MACH = S3MACH*TBASE N = N/2 IF( N .LT. 2 ) GO TO 30 TBASE = TBASE * TBASE GO TO 20 C 30 IF (N .EQ. 1) S3MACH = (S3MACH * TBASE) * TBASE RETURN C END PyBDSF-1.10.1/src/port3/s7bqn.f000066400000000000000000000102151420247104600156570ustar00rootroot00000000000000 SUBROUTINE S7BQN(B, D, DST, IPIV, IPIV1, IPIV2, KB, L, LV, NS, 1 P, P1, STEP, TD, TG, V, W, X, X0) C C *** COMPUTE BOUNDED MODIFIED NEWTON STEP *** C INTEGER KB, LV, NS, P, P1 INTEGER IPIV(P), IPIV1(P), IPIV2(P) REAL B(2,P), D(P), DST(P), L(1), 1 STEP(P), TD(P), TG(P), V(LV), W(P), X(P), 2 X0(P) C DIMENSION L(P*(P+1)/2) C REAL D7TPR, R7MDC, V2NRM EXTERNAL D7TPR, I7SHFT, L7ITV, L7IVM, Q7RSH, R7MDC, V2NRM, 1 V2AXY, V7CPY, V7IPR, V7SCP, V7SHF C C *** LOCAL VARIABLES *** C INTEGER I, J, K, P0, P1M1 REAL ALPHA, DST0, DST1, DSTMAX, DSTMIN, DX, GTS, T, 1 TI, T1, XI REAL FUDGE, HALF, MEPS2, ONE, TWO, ZERO C C *** V SUBSCRIPTS *** C INTEGER DSTNRM, GTSTEP, PHMNFC, PHMXFC, PREDUC, RADIUS, STPPAR C C/6 C DATA DSTNRM/2/, GTSTEP/4/, PHMNFC/20/, PHMXFC/21/, PREDUC/7/, C 1 RADIUS/8/, STPPAR/5/ C/7 PARAMETER (DSTNRM=2, GTSTEP=4, PHMNFC=20, PHMXFC=21, PREDUC=7, 1 RADIUS=8, STPPAR=5) SAVE MEPS2 C/ C DATA FUDGE/1.0001E+0/, HALF/0.5E+0/, MEPS2/0.E+0/, 1 ONE/1.0E+0/, TWO/2.E+0/, ZERO/0.E+0/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C DSTMAX = FUDGE * (ONE + V(PHMXFC)) * V(RADIUS) DSTMIN = (ONE + V(PHMNFC)) * V(RADIUS) DST1 = ZERO IF (MEPS2 .LE. ZERO) MEPS2 = TWO * R7MDC(3) P0 = P1 NS = 0 DO 10 I = 1, P IPIV1(I) = I IPIV2(I) = I 10 CONTINUE DO 20 I = 1, P1 20 W(I) = -STEP(I) * TD(I) ALPHA = ABS(V(STPPAR)) V(PREDUC) = ZERO GTS = -V(GTSTEP) IF (KB .LT. 0) CALL V7SCP(P, DST, ZERO) KB = 1 C C *** -W = D TIMES RESTRICTED NEWTON STEP FROM X + DST/D. C C *** FIND T SUCH THAT X - T*W IS STILL FEASIBLE. C 30 T = ONE K = 0 DO 60 I = 1, P1 J = IPIV(I) DX = W(I) / D(J) XI = X(J) - DX IF (XI .LT. B(1,J)) GO TO 40 IF (XI .LE. B(2,J)) GO TO 60 TI = ( X(J) - B(2,J) ) / DX K = I GO TO 50 40 TI = ( X(J) - B(1,J) ) / DX K = -I 50 IF (T .LE. TI) GO TO 60 T = TI 60 CONTINUE C IF (P .GT. P1) CALL V7CPY(P-P1, STEP(P1+1), DST(P1+1)) CALL V2AXY(P1, STEP, -T, W, DST) DST0 = DST1 DST1 = V2NRM(P, STEP) C C *** CHECK FOR OVERSIZE STEP *** C IF (DST1 .LE. DSTMAX) GO TO 80 IF (P1 .GE. P0) GO TO 70 IF (DST0 .LT. DSTMIN) KB = 0 GO TO 110 C 70 K = 0 C C *** UPDATE DST, TG, AND V(PREDUC) *** C 80 V(DSTNRM) = DST1 CALL V7CPY(P1, DST, STEP) T1 = ONE - T DO 90 I = 1, P1 90 TG(I) = T1 * TG(I) IF (ALPHA .GT. ZERO) CALL V2AXY(P1, TG, T*ALPHA, W, TG) V(PREDUC) = V(PREDUC) + T*((ONE - HALF*T)*GTS + 1 HALF*ALPHA*T* D7TPR(P1,W,W)) IF (K .EQ. 0) GO TO 110 C C *** PERMUTE L, ETC. IF NECESSARY *** C P1M1 = P1 - 1 J = IABS(K) IF (J .EQ. P1) GO TO 100 NS = NS + 1 IPIV2(P1) = J CALL Q7RSH(J, P1, .FALSE., TG, L, W) CALL I7SHFT(P1, J, IPIV) CALL I7SHFT(P1, J, IPIV1) CALL V7SHF(P1, J, TG) CALL V7SHF(P1, J, DST) 100 IF (K .LT. 0) IPIV(P1) = -IPIV(P1) P1 = P1M1 IF (P1 .LE. 0) GO TO 110 CALL L7IVM(P1, W, L, TG) GTS = D7TPR(P1, W, W) CALL L7ITV(P1, W, L, W) GO TO 30 C C *** UNSCALE STEP *** C 110 DO 120 I = 1, P J = IABS(IPIV(I)) STEP(J) = DST(I) / D(J) 120 CONTINUE C C *** FUDGE STEP TO ENSURE THAT IT FORCES APPROPRIATE COMPONENTS C *** TO THEIR BOUNDS *** C IF (P1 .GE. P0) GO TO 150 K = P1 + 1 DO 140 I = K, P0 J = IPIV(I) T = MEPS2 IF (J .GT. 0) GO TO 130 T = -T J = -J IPIV(I) = J 130 T = T * AMAX1( ABS(X(J)), ABS(X0(J))) STEP(J) = STEP(J) + T 140 CONTINUE C 150 CALL V2AXY(P, X, ONE, STEP, X0) IF (NS .GT. 0) CALL V7IPR(P0, IPIV1, TD) 999 RETURN C *** LAST LINE OF S7BQN FOLLOWS *** END PyBDSF-1.10.1/src/port3/s7cpr.f000066400000000000000000000011311420247104600156600ustar00rootroot00000000000000 SUBROUTINE S7CPR(C, IV, L, LIV) C C *** PRINT C FOR NSG (ETC.) *** C INTEGER L, LIV INTEGER IV(LIV) REAL C(L) C INTEGER I, PU C INTEGER PRUNIT, SOLPRT C C/6 C DATA PRUNIT/21/, SOLPRT/22/ C/7 PARAMETER (PRUNIT=21, SOLPRT=22) C/ C *** BODY *** C IF (IV(1) .GT. 11) GO TO 999 IF (IV(SOLPRT) .EQ. 0) GO TO 999 PU = IV(PRUNIT) IF (PU .EQ. 0) GO TO 999 IF (L .GT. 0) WRITE(PU,10) (I, C(I), I = 1, L) 10 FORMAT(/21H LINEAR PARAMETERS...//(1X,I5,E16.6)) C 999 RETURN C *** LAST LINE OF S7CPR FOLLOWS *** END PyBDSF-1.10.1/src/port3/s7dmp.f000066400000000000000000000013731420247104600156640ustar00rootroot00000000000000 SUBROUTINE S7DMP(N, X, Y, Z, K) C C *** SET X = DIAG(Z)**K * Y * DIAG(Z)**K C *** FOR X, Y = COMPACTLY STORED LOWER TRIANG. MATRICES C *** K = 1 OR -1. C INTEGER N, K C/6S C REAL X(1), Y(1), Z(N) C/7S REAL X(*), Y(*), Z(N) C/ INTEGER I, J, L REAL ONE, T DATA ONE/1.E+0/ C L = 1 IF (K .GE. 0) GO TO 30 DO 20 I = 1, N T = ONE / Z(I) DO 10 J = 1, I X(L) = T * Y(L) / Z(J) L = L + 1 10 CONTINUE 20 CONTINUE GO TO 999 C 30 DO 50 I = 1, N T = Z(I) DO 40 J = 1, I X(L) = T * Y(L) * Z(J) L = L + 1 40 CONTINUE 50 CONTINUE 999 RETURN C *** LAST CARD OF S7DMP FOLLOWS *** END PyBDSF-1.10.1/src/port3/s7etr.f000066400000000000000000000054611420247104600157000ustar00rootroot00000000000000 SUBROUTINE S7ETR(M,N,INDROW,JPNTR,INDCOL,IPNTR,IWA) INTEGER M,N INTEGER INDROW(1),JPNTR(1),INDCOL(1),IPNTR(1),IWA(M) C ********** C C SUBROUTINE S7ETR C C GIVEN A COLUMN-ORIENTED DEFINITION OF THE SPARSITY PATTERN C OF AN M BY N MATRIX A, THIS SUBROUTINE DETERMINES A C ROW-ORIENTED DEFINITION OF THE SPARSITY PATTERN OF A. C C ON INPUT THE COLUMN-ORIENTED DEFINITION IS SPECIFIED BY C THE ARRAYS INDROW AND JPNTR. ON OUTPUT THE ROW-ORIENTED C DEFINITION IS SPECIFIED BY THE ARRAYS INDCOL AND IPNTR. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE S7ETR(M,N,INDROW,JPNTR,INDCOL,IPNTR,IWA) C C WHERE C C M IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF ROWS OF A. C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C INDROW IS AN INTEGER INPUT ARRAY WHICH CONTAINS THE ROW C INDICES FOR THE NON-ZEROES IN THE MATRIX A. C C JPNTR IS AN INTEGER INPUT ARRAY OF LENGTH N + 1 WHICH C SPECIFIES THE LOCATIONS OF THE ROW INDICES IN INDROW. C THE ROW INDICES FOR COLUMN J ARE C C INDROW(K), K = JPNTR(J),...,JPNTR(J+1)-1. C C NOTE THAT JPNTR(N+1)-1 IS THEN THE NUMBER OF NON-ZERO C ELEMENTS OF THE MATRIX A. C C INDCOL IS AN INTEGER OUTPUT ARRAY WHICH CONTAINS THE C COLUMN INDICES FOR THE NON-ZEROES IN THE MATRIX A. C C IPNTR IS AN INTEGER OUTPUT ARRAY OF LENGTH M + 1 WHICH C SPECIFIES THE LOCATIONS OF THE COLUMN INDICES IN INDCOL. C THE COLUMN INDICES FOR ROW I ARE C C INDCOL(K), K = IPNTR(I),...,IPNTR(I+1)-1. C C NOTE THAT IPNTR(1) IS SET TO 1 AND THAT IPNTR(M+1)-1 IS C THEN THE NUMBER OF NON-ZERO ELEMENTS OF THE MATRIX A. C C IWA IS AN INTEGER WORK ARRAY OF LENGTH M. C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. JUNE 1982. C THOMAS F. COLEMAN, BURTON S. GARBOW, JORGE J. MORE C C ********** INTEGER IR,JCOL,JP,JPL,JPU,L,NNZ C C DETERMINE THE NUMBER OF NON-ZEROES IN THE ROWS. C DO 10 IR = 1, M IWA(IR) = 0 10 CONTINUE NNZ = JPNTR(N+1) - 1 DO 20 JP = 1, NNZ IR = INDROW(JP) IWA(IR) = IWA(IR) + 1 20 CONTINUE C C SET POINTERS TO THE START OF THE ROWS IN INDCOL. C IPNTR(1) = 1 DO 30 IR = 1, M IPNTR(IR+1) = IPNTR(IR) + IWA(IR) IWA(IR) = IPNTR(IR) 30 CONTINUE C C FILL INDCOL. C DO 60 JCOL = 1, N JPL = JPNTR(JCOL) JPU = JPNTR(JCOL+1) - 1 IF (JPU .LT. JPL) GO TO 50 DO 40 JP = JPL, JPU IR = INDROW(JP) L = IWA(IR) INDCOL(L) = JCOL IWA(IR) = IWA(IR) + 1 40 CONTINUE 50 CONTINUE 60 CONTINUE RETURN C C LAST CARD OF SUBROUTINE S7ETR. C END PyBDSF-1.10.1/src/port3/s7grd.f000066400000000000000000000164501420247104600156620ustar00rootroot00000000000000 SUBROUTINE S7GRD (ALPHA, D, ETA0, FX, G, IRC, N, W, X) C C *** COMPUTE FINITE DIFFERENCE GRADIENT BY STWEART*S SCHEME *** C C *** PARAMETERS *** C INTEGER IRC, N REAL ALPHA(N), D(N), ETA0, FX, G(N), W(6), X(N) C C....................................................................... C C *** PURPOSE *** C C THIS SUBROUTINE USES AN EMBELLISHED FORM OF THE FINITE-DIFFER- C ENCE SCHEME PROPOSED BY STEWART (REF. 1) TO APPROXIMATE THE C GRADIENT OF THE FUNCTION F(X), WHOSE VALUES ARE SUPPLIED BY C REVERSE COMMUNICATION. C C *** PARAMETER DESCRIPTION *** C C ALPHA IN (APPROXIMATE) DIAGONAL ELEMENTS OF THE HESSIAN OF F(X). C D IN SCALE VECTOR SUCH THAT D(I)*X(I), I = 1,...,N, ARE IN C COMPARABLE UNITS. C ETA0 IN ESTIMATED BOUND ON RELATIVE ERROR IN THE FUNCTION VALUE... C (TRUE VALUE) = (COMPUTED VALUE)*(1+E), WHERE C ABS(E) .LE. ETA0. C FX I/O ON INPUT, FX MUST BE THE COMPUTED VALUE OF F(X). ON C OUTPUT WITH IRC = 0, FX HAS BEEN RESTORED TO ITS ORIGINAL C VALUE, THE ONE IT HAD WHEN S7GRD WAS LAST CALLED WITH C IRC = 0. C G I/O ON INPUT WITH IRC = 0, G SHOULD CONTAIN AN APPROXIMATION C TO THE GRADIENT OF F NEAR X, E.G., THE GRADIENT AT THE C PREVIOUS ITERATE. WHEN S7GRD RETURNS WITH IRC = 0, G IS C THE DESIRED FINITE-DIFFERENCE APPROXIMATION TO THE C GRADIENT AT X. C IRC I/O INPUT/RETURN CODE... BEFORE THE VERY FIRST CALL ON S7GRD, C THE CALLER MUST SET IRC TO 0. WHENEVER S7GRD RETURNS A C NONZERO VALUE FOR IRC, IT HAS PERTURBED SOME COMPONENT OF C X... THE CALLER SHOULD EVALUATE F(X) AND CALL S7GRD C AGAIN WITH FX = F(X). C N IN THE NUMBER OF VARIABLES (COMPONENTS OF X) ON WHICH F C DEPENDS. C X I/O ON INPUT WITH IRC = 0, X IS THE POINT AT WHICH THE C GRADIENT OF F IS DESIRED. ON OUTPUT WITH IRC NONZERO, X C IS THE POINT AT WHICH F SHOULD BE EVALUATED. ON OUTPUT C WITH IRC = 0, X HAS BEEN RESTORED TO ITS ORIGINAL VALUE C (THE ONE IT HAD WHEN S7GRD WAS LAST CALLED WITH IRC = 0) C AND G CONTAINS THE DESIRED GRADIENT APPROXIMATION. C W I/O WORK VECTOR OF LENGTH 6 IN WHICH S7GRD SAVES CERTAIN C QUANTITIES WHILE THE CALLER IS EVALUATING F(X) AT A C PERTURBED X. C C *** APPLICATION AND USAGE RESTRICTIONS *** C C THIS ROUTINE IS INTENDED FOR _USE_ WITH QUASI-NEWTON ROUTINES C FOR UNCONSTRAINED MINIMIZATION (IN WHICH CASE ALPHA COMES FROM C THE DIAGONAL OF THE QUASI-NEWTON HESSIAN APPROXIMATION). C C *** ALGORITHM NOTES *** C C THIS CODE DEPARTS FROM THE SCHEME PROPOSED BY STEWART (REF. 1) C IN ITS GUARDING AGAINST OVERLY LARGE OR SMALL STEP SIZES AND ITS C HANDLING OF SPECIAL CASES (SUCH AS ZERO COMPONENTS OF ALPHA OR G). C C *** REFERENCES *** C C 1. STEWART, G.W. (1967), A MODIFICATION OF DAVIDON*S MINIMIZATION C METHOD TO ACCEPT DIFFERENCE APPROXIMATIONS OF DERIVATIVES, C J. ASSOC. COMPUT. MACH. 14, PP. 72-83. C C *** HISTORY *** C C DESIGNED AND CODED BY DAVID M. GAY (SUMMER 1977/SUMMER 1980). C C *** GENERAL *** C C THIS ROUTINE WAS PREPARED IN CONNECTION WITH WORK SUPPORTED BY C THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS MCS76-00324 AND C MCS-7906671. C C....................................................................... C C ***** EXTERNAL FUNCTION ***** C REAL R7MDC EXTERNAL R7MDC C R7MDC... RETURNS MACHINE-DEPENDENT CONSTANTS. C C ***** INTRINSIC FUNCTIONS ***** C/+ REAL SQRT C/ C ***** LOCAL VARIABLES ***** C INTEGER FH, FX0, HSAVE, I, XISAVE REAL AAI, AFX, AFXETA, AGI, ALPHAI, AXI, AXIBAR, 1 DISCON, ETA, GI, H, HMIN REAL C2000, FOUR, HMAX0, HMIN0, H0, MACHEP, ONE, P002, 1 THREE, TWO, ZERO C C/6 C DATA C2000/2.0E+3/, FOUR/4.0E+0/, HMAX0/0.02E+0/, HMIN0/5.0E+1/, C 1 ONE/1.0E+0/, P002/0.002E+0/, THREE/3.0E+0/, C 2 TWO/2.0E+0/, ZERO/0.0E+0/ C/7 PARAMETER (C2000=2.0E+3, FOUR=4.0E+0, HMAX0=0.02E+0, HMIN0=5.0E+1, 1 ONE=1.0E+0, P002=0.002E+0, THREE=3.0E+0, 2 TWO=2.0E+0, ZERO=0.0E+0) C/ C/6 C DATA FH/3/, FX0/4/, HSAVE/5/, XISAVE/6/ C/7 PARAMETER (FH=3, FX0=4, HSAVE=5, XISAVE=6) C/ C C--------------------------------- BODY ------------------------------ C IF (IRC) 140, 100, 210 C C *** FRESH START -- GET MACHINE-DEPENDENT CONSTANTS *** C C STORE MACHEP IN W(1) AND H0 IN W(2), WHERE MACHEP IS THE UNIT C ROUNDOFF (THE SMALLEST POSITIVE NUMBER SUCH THAT C 1 + MACHEP .GT. 1 AND 1 - MACHEP .LT. 1), AND H0 IS THE C SQUARE-ROOT OF MACHEP. C 100 W(1) = R7MDC(3) W(2) = SQRT(W(1)) C W(FX0) = FX C C *** INCREMENT I AND START COMPUTING G(I) *** C 110 I = IABS(IRC) + 1 IF (I .GT. N) GO TO 300 IRC = I AFX = ABS(W(FX0)) MACHEP = W(1) H0 = W(2) HMIN = HMIN0 * MACHEP W(XISAVE) = X(I) AXI = ABS(X(I)) AXIBAR = AMAX1(AXI, ONE/D(I)) GI = G(I) AGI = ABS(GI) ETA = ABS(ETA0) IF (AFX .GT. ZERO) ETA = AMAX1(ETA, AGI*AXI*MACHEP/AFX) ALPHAI = ALPHA(I) IF (ALPHAI .EQ. ZERO) GO TO 170 IF (GI .EQ. ZERO .OR. FX .EQ. ZERO) GO TO 180 AFXETA = AFX*ETA AAI = ABS(ALPHAI) C C *** COMPUTE H = STEWART*S FORWARD-DIFFERENCE STEP SIZE. C IF (GI**2 .LE. AFXETA*AAI) GO TO 120 H = TWO* SQRT(AFXETA/AAI) H = H*(ONE - AAI*H/(THREE*AAI*H + FOUR*AGI)) GO TO 130 C120 H = TWO*(AFXETA*AGI/(AAI**2))**(ONE/THREE) 120 H = TWO * (AFXETA*AGI)**(ONE/THREE) * AAI**(-TWO/THREE) H = H*(ONE - TWO*AGI/(THREE*AAI*H + FOUR*AGI)) C C *** ENSURE THAT H IS NOT INSIGNIFICANTLY SMALL *** C 130 H = AMAX1(H, HMIN*AXIBAR) C C *** _USE_ FORWARD DIFFERENCE IF BOUND ON TRUNCATION ERROR IS AT C *** MOST 10**-3. C IF (AAI*H .LE. P002*AGI) GO TO 160 C C *** COMPUTE H = STEWART*S STEP FOR CENTRAL DIFFERENCE. C DISCON = C2000*AFXETA H = DISCON/(AGI + SQRT(GI**2 + AAI*DISCON)) C C *** ENSURE THAT H IS NEITHER TOO SMALL NOR TOO BIG *** C H = AMAX1(H, HMIN*AXIBAR) IF (H .GE. HMAX0*AXIBAR) H = AXIBAR * H0**(TWO/THREE) C C *** COMPUTE CENTRAL DIFFERENCE *** C IRC = -I GO TO 200 C 140 H = -W(HSAVE) I = IABS(IRC) IF (H .GT. ZERO) GO TO 150 W(FH) = FX GO TO 200 C 150 G(I) = (W(FH) - FX) / (TWO * H) X(I) = W(XISAVE) GO TO 110 C C *** COMPUTE FORWARD DIFFERENCES IN VARIOUS CASES *** C 160 IF (H .GE. HMAX0*AXIBAR) H = H0 * AXIBAR IF (ALPHAI*GI .LT. ZERO) H = -H GO TO 200 170 H = AXIBAR GO TO 200 180 H = H0 * AXIBAR C 200 X(I) = W(XISAVE) + H W(HSAVE) = H GO TO 999 C C *** COMPUTE ACTUAL FORWARD DIFFERENCE *** C 210 G(IRC) = (FX - W(FX0)) / W(HSAVE) X(IRC) = W(XISAVE) GO TO 110 C C *** RESTORE FX AND INDICATE THAT G HAS BEEN COMPUTED *** C 300 FX = W(FX0) IRC = 0 C 999 RETURN C *** LAST CARD OF S7GRD FOLLOWS *** END PyBDSF-1.10.1/src/port3/s7ipr.f000066400000000000000000000035241420247104600156760ustar00rootroot00000000000000 SUBROUTINE S7IPR(P, IP, H) C C APPLY THE PERMUTATION DEFINED BY IP TO THE ROWS AND COLUMNS OF THE C P X P SYMMETRIC MATRIX WHOSE LOWER TRIANGLE IS STORED COMPACTLY IN H. C THUS H.OUTPUT(I,J) = H.INPUT(IP(I), IP(J)). C INTEGER P INTEGER IP(P) REAL H(1) C INTEGER I, J, J1, JM, K, K1, KK, KM, KMJ, L, M REAL T C C *** BODY *** C DO 90 I = 1, P J = IP(I) IF (J .EQ. I) GO TO 90 IP(I) = IABS(J) IF (J .LT. 0) GO TO 90 K = I 10 J1 = J K1 = K IF (J .LE. K) GO TO 20 J1 = K K1 = J 20 KMJ = K1-J1 L = J1-1 JM = J1*L/2 KM = K1*(K1-1)/2 IF (L .LE. 0) GO TO 40 DO 30 M = 1, L JM = JM+1 T = H(JM) KM = KM+1 H(JM) = H(KM) H(KM) = T 30 CONTINUE 40 KM = KM+1 KK = KM+KMJ JM = JM+1 T = H(JM) H(JM) = H(KK) H(KK) = T J1 = L L = KMJ-1 IF (L .LE. 0) GO TO 60 DO 50 M = 1, L JM = JM+J1+M T = H(JM) KM = KM+1 H(JM) = H(KM) H(KM) = T 50 CONTINUE 60 IF (K1 .GE. P) GO TO 80 L = P-K1 K1 = K1-1 KM = KK DO 70 M = 1, L KM = KM+K1+M JM = KM-KMJ T = H(JM) H(JM) = H(KM) H(KM) = T 70 CONTINUE 80 K = J J = IP(K) IP(K) = -J IF (J .GT. I) GO TO 10 90 CONTINUE 999 RETURN C *** LAST LINE OF S7IPR FOLLOWS *** END PyBDSF-1.10.1/src/port3/s7lup.f000066400000000000000000000031521420247104600157010ustar00rootroot00000000000000 SUBROUTINE S7LUP(A, COSMIN, P, SIZE, STEP, U, W, WCHMTD, WSCALE, 1 Y) C C *** UPDATE SYMMETRIC A SO THAT A * STEP = Y *** C *** (LOWER TRIANGLE OF A STORED ROWWISE *** C C *** PARAMETER DECLARATIONS *** C INTEGER P REAL A(1), COSMIN, SIZE, STEP(P), U(P), W(P), 1 WCHMTD(P), WSCALE, Y(P) C DIMENSION A(P*(P+1)/2) C C *** LOCAL VARIABLES *** C INTEGER I, J, K REAL DENMIN, SDOTWM, T, UI, WI C C *** CONSTANTS *** REAL HALF, ONE, ZERO C C *** EXTERNAL FUNCTIONS AND SUBROUTINES *** C REAL D7TPR, V2NRM EXTERNAL D7TPR, S7LVM, V2NRM C C/6 C DATA HALF/0.5E+0/, ONE/1.E+0/, ZERO/0.E+0/ C/7 PARAMETER (HALF=0.5E+0, ONE=1.E+0, ZERO=0.E+0) C/ C C----------------------------------------------------------------------- C SDOTWM = D7TPR(P, STEP, WCHMTD) DENMIN = COSMIN * V2NRM(P,STEP) * V2NRM(P,WCHMTD) WSCALE = ONE IF (DENMIN .NE. ZERO) WSCALE = AMIN1(ONE, ABS(SDOTWM/DENMIN)) T = ZERO IF (SDOTWM .NE. ZERO) T = WSCALE / SDOTWM DO 10 I = 1, P 10 W(I) = T * WCHMTD(I) CALL S7LVM(P, U, A, STEP) T = HALF * (SIZE * D7TPR(P, STEP, U) - D7TPR(P, STEP, Y)) DO 20 I = 1, P 20 U(I) = T*W(I) + Y(I) - SIZE*U(I) C C *** SET A = A + U*(W**T) + W*(U**T) *** C K = 1 DO 40 I = 1, P UI = U(I) WI = W(I) DO 30 J = 1, I A(K) = SIZE*A(K) + UI*W(J) + WI*U(J) K = K + 1 30 CONTINUE 40 CONTINUE C 999 RETURN C *** LAST CARD OF S7LUP FOLLOWS *** END PyBDSF-1.10.1/src/port3/s7lvm.f000066400000000000000000000016711420247104600157030ustar00rootroot00000000000000 SUBROUTINE S7LVM(P, Y, S, X) C C *** SET Y = S * X, S = P X P SYMMETRIC MATRIX. *** C *** LOWER TRIANGLE OF S STORED ROWWISE. *** C C *** PARAMETER DECLARATIONS *** C INTEGER P REAL S(1), X(P), Y(P) C DIMENSION S(P*(P+1)/2) C C *** LOCAL VARIABLES *** C INTEGER I, IM1, J, K REAL XI C C *** NO INTRINSIC FUNCTIONS *** C C *** EXTERNAL FUNCTION *** C REAL D7TPR EXTERNAL D7TPR C C----------------------------------------------------------------------- C J = 1 DO 10 I = 1, P Y(I) = D7TPR(I, S(J), X) J = J + I 10 CONTINUE C IF (P .LE. 1) GO TO 999 J = 1 DO 40 I = 2, P XI = X(I) IM1 = I - 1 J = J + 1 DO 30 K = 1, IM1 Y(K) = Y(K) + S(J)*XI J = J + 1 30 CONTINUE 40 CONTINUE C 999 RETURN C *** LAST CARD OF S7LVM FOLLOWS *** END PyBDSF-1.10.1/src/port3/s7rtdt.f000066400000000000000000000067301420247104600160630ustar00rootroot00000000000000 SUBROUTINE S7RTDT(N,NNZ,INDROW,INDCOL,JPNTR,IWA) INTEGER N,NNZ INTEGER INDROW(NNZ),INDCOL(NNZ),JPNTR(1),IWA(N) C ********** C C SUBROUTINE S7RTDT C C GIVEN THE NON-ZERO ELEMENTS OF AN M BY N MATRIX A IN C ARBITRARY ORDER AS SPECIFIED BY THEIR ROW AND COLUMN C INDICES, THIS SUBROUTINE PERMUTES THESE ELEMENTS SO C THAT THEIR COLUMN INDICES ARE IN NON-DECREASING ORDER. C C ON INPUT IT IS ASSUMED THAT THE ELEMENTS ARE SPECIFIED IN C C INDROW(K),INDCOL(K), K = 1,...,NNZ. C C ON OUTPUT THE ELEMENTS ARE PERMUTED SO THAT INDCOL IS C IN NON-DECREASING ORDER. IN ADDITION, THE ARRAY JPNTR C IS SET SO THAT THE ROW INDICES FOR COLUMN J ARE C C INDROW(K), K = JPNTR(J),...,JPNTR(J+1)-1. C C NOTE THAT THE VALUE OF M IS NOT NEEDED BY S7RTDT AND IS C THEREFORE NOT PRESENT IN THE SUBROUTINE STATEMENT. C C THE SUBROUTINE STATEMENT IS C C SUBROUTINE S7RTDT(N,NNZ,INDROW,INDCOL,JPNTR,IWA) C C WHERE C C N IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF COLUMNS OF A. C C NNZ IS A POSITIVE INTEGER INPUT VARIABLE SET TO THE NUMBER C OF NON-ZERO ELEMENTS OF A. C C INDROW IS AN INTEGER ARRAY OF LENGTH NNZ. ON INPUT INDROW C MUST CONTAIN THE ROW INDICES OF THE NON-ZERO ELEMENTS OF A. C ON OUTPUT INDROW IS PERMUTED SO THAT THE CORRESPONDING C COLUMN INDICES OF INDCOL ARE IN NON-DECREASING ORDER. C C INDCOL IS AN INTEGER ARRAY OF LENGTH NNZ. ON INPUT INDCOL C MUST CONTAIN THE COLUMN INDICES OF THE NON-ZERO ELEMENTS C OF A. ON OUTPUT INDCOL IS PERMUTED SO THAT THESE INDICES C ARE IN NON-DECREASING ORDER. C C JPNTR IS AN INTEGER OUTPUT ARRAY OF LENGTH N + 1 WHICH C SPECIFIES THE LOCATIONS OF THE ROW INDICES IN THE OUTPUT C INDROW. THE ROW INDICES FOR COLUMN J ARE C C INDROW(K), K = JPNTR(J),...,JPNTR(J+1)-1. C C NOTE THAT JPNTR(1) IS SET TO 1 AND THAT JPNTR(N+1)-1 C IS THEN NNZ. C C IWA IS AN INTEGER WORK ARRAY OF LENGTH N. C C SUBPROGRAMS CALLED C C FORTRAN-SUPPLIED ... MAX0 C C ARGONNE NATIONAL LABORATORY. MINPACK PROJECT. JUNE 1982. C THOMAS F. COLEMAN, BURTON S. GARBOW, JORGE J. MORE C C ********** INTEGER I,J,K,L C C DETERMINE THE NUMBER OF NON-ZEROES IN THE COLUMNS. C DO 10 J = 1, N IWA(J) = 0 10 CONTINUE DO 20 K = 1, NNZ J = INDCOL(K) IWA(J) = IWA(J) + 1 20 CONTINUE C C SET POINTERS TO THE START OF THE COLUMNS IN INDROW. C JPNTR(1) = 1 DO 30 J = 1, N JPNTR(J+1) = JPNTR(J) + IWA(J) IWA(J) = JPNTR(J) 30 CONTINUE K = 1 C C BEGIN IN-PLACE SORT. C 40 CONTINUE J = INDCOL(K) IF (K .LT. JPNTR(J) .OR. K .GE. JPNTR(J+1)) GO TO 50 C C CURRENT ELEMENT IS IN POSITION. NOW EXAMINE THE C NEXT ELEMENT OR THE FIRST UN-SORTED ELEMENT IN C THE J-TH GROUP. C K = MAX0(K+1,IWA(J)) GO TO 60 50 CONTINUE C C CURRENT ELEMENT IS NOT IN POSITION. PLACE ELEMENT C IN POSITION AND MAKE THE DISPLACED ELEMENT THE C CURRENT ELEMENT. C L = IWA(J) IWA(J) = IWA(J) + 1 I = INDROW(K) INDROW(K) = INDROW(L) INDCOL(K) = INDCOL(L) INDROW(L) = I INDCOL(L) = J 60 CONTINUE IF (K .LE. NNZ) GO TO 40 RETURN C C LAST CARD OF SUBROUTINE S7RTDT. C END PyBDSF-1.10.1/src/port3/s88fmt.f000066400000000000000000000021501420247104600157550ustar00rootroot00000000000000 SUBROUTINE S88FMT( N, W, IFMT ) C C S88FMT REPLACES IFMT(1), ... , IFMT(N) WITH C THE CHARACTERS CORRESPONDING TO THE N LEAST SIGNIFICANT C DIGITS OF W. C INTEGER N,W C/6S C INTEGER IFMT(N) C/7S CHARACTER*1 IFMT(N) C/ C INTEGER NT,WT C C/6S C INTEGER DIGITS(10) C DATA DIGITS( 1) / 1H0 / C DATA DIGITS( 2) / 1H1 / C DATA DIGITS( 3) / 1H2 / C DATA DIGITS( 4) / 1H3 / C DATA DIGITS( 5) / 1H4 / C DATA DIGITS( 6) / 1H5 / C DATA DIGITS( 7) / 1H6 / C DATA DIGITS( 8) / 1H7 / C DATA DIGITS( 9) / 1H8 / C DATA DIGITS(10) / 1H9 / C/7S CHARACTER*1 DIGITS(10) DATA DIGITS( 1) / '0' / DATA DIGITS( 2) / '1' / DATA DIGITS( 3) / '2' / DATA DIGITS( 4) / '3' / DATA DIGITS( 5) / '4' / DATA DIGITS( 6) / '5' / DATA DIGITS( 7) / '6' / DATA DIGITS( 8) / '7' / DATA DIGITS( 9) / '8' / DATA DIGITS(10) / '9' / C/ C NT = N WT = W C 10 IF (NT .LE. 0) RETURN IDIGIT = MOD( WT, 10 ) IFMT(NT) = DIGITS(IDIGIT+1) WT = WT/10 NT = NT - 1 GO TO 10 C END PyBDSF-1.10.1/src/port3/sdump.f000066400000000000000000000004071420247104600157570ustar00rootroot00000000000000 SUBROUTINE SDUMP C THIS IS THE STANDARD DUMP ROUTINE FOR THE PORT LIBRARY. C FIRST IT PROVIDES A FORMATTED DUMP OF THE PORT STACK. C THEN IT CALLS THE LOCAL (PREFERABLY SYMBOLIC) DUMP ROUTINE. CALL STKDMP CALL FDUMP RETURN END PyBDSF-1.10.1/src/port3/setc.f000066400000000000000000000005011420247104600155600ustar00rootroot00000000000000 SUBROUTINE SETC(N,V,B) C C SETC SETS THE N COMPLEX ITEMS IN B TO V C C/R C REAL B(2,N), V(2), V1, V2 C V1 = V(1) C V2 = V(2) C/C COMPLEX B(1),V C/ C IF(N .LE. 0) RETURN C DO 10 I = 1, N C/R C B(1,I) = V1 C10 B(2,I) = V2 C/C 10 B(I) = V C/ C RETURN C END PyBDSF-1.10.1/src/port3/setd.f000066400000000000000000000003251420247104600155650ustar00rootroot00000000000000 SUBROUTINE SETD(N,V,B) C C SETD SETS THE N DOUBLE PRECISION ITEMS IN B TO V C DOUBLE PRECISION B(1),V C IF(N .LE. 0) RETURN C DO 10 I = 1, N 10 B(I) = V C RETURN C END PyBDSF-1.10.1/src/port3/seterr.f000066400000000000000000000054261420247104600161410ustar00rootroot00000000000000 SUBROUTINE SETERR(MESSG,NMESSG,NERR,IOPT) C C SETERR SETS LERROR = NERR, OPTIONALLY PRINTS THE MESSAGE AND DUMPS C ACCORDING TO THE FOLLOWING RULES... C C IF IOPT = 1 AND RECOVERING - JUST REMEMBER THE ERROR. C IF IOPT = 1 AND NOT RECOVERING - PRINT AND STOP. C IF IOPT = 2 - PRINT, DUMP AND STOP. C C INPUT C C MESSG - THE ERROR MESSAGE. C NMESSG - THE LENGTH OF THE MESSAGE, IN CHARACTERS. C NERR - THE ERROR NUMBER. MUST HAVE NERR NON-ZERO. C IOPT - THE OPTION. MUST HAVE IOPT=1 OR 2. C C ERROR STATES - C C 1 - MESSAGE LENGTH NOT POSITIVE. C 2 - CANNOT HAVE NERR=0. C 3 - AN UNRECOVERED ERROR FOLLOWED BY ANOTHER ERROR. C 4 - BAD VALUE FOR IOPT. C C ONLY THE FIRST 72 CHARACTERS OF THE MESSAGE ARE PRINTED. C C THE ERROR HANDLER CALLS A SUBROUTINE NAMED SDUMP TO PRODUCE A C SYMBOLIC DUMP. C C/6S C INTEGER MESSG(1) C/7S CHARACTER*1 MESSG(NMESSG) C/ C C THE UNIT FOR ERROR MESSAGES. C IWUNIT=I1MACH(4) C IF (NMESSG.GE.1) GO TO 10 C C A MESSAGE OF NON-POSITIVE LENGTH IS FATAL. C WRITE(IWUNIT,9000) 9000 FORMAT(52H1ERROR 1 IN SETERR - MESSAGE LENGTH NOT POSITIVE.) GO TO 60 C C NW IS THE NUMBER OF WORDS THE MESSAGE OCCUPIES. C (I1MACH(6) IS THE NUMBER OF CHARACTERS PER WORD.) C C/6S C10 NW=(MIN0(NMESSG,72)-1)/I1MACH(6)+1 C/7S 10 NW= MIN0(NMESSG,72) C/ C IF (NERR.NE.0) GO TO 20 C C CANNOT TURN THE ERROR STATE OFF USING SETERR. C (I8SAVE SETS A FATAL ERROR HERE.) C WRITE(IWUNIT,9001) 9001 FORMAT(42H1ERROR 2 IN SETERR - CANNOT HAVE NERR=0// 1 34H THE CURRENT ERROR MESSAGE FOLLOWS///) CALL E9RINT(MESSG,NW,NERR,.TRUE.) ITEMP=I8SAVE(1,1,.TRUE.) GO TO 50 C C SET LERROR AND TEST FOR A PREVIOUS UNRECOVERED ERROR. C 20 IF (I8SAVE(1,NERR,.TRUE.).EQ.0) GO TO 30 C WRITE(IWUNIT,9002) 9002 FORMAT(23H1ERROR 3 IN SETERR -, 1 48H AN UNRECOVERED ERROR FOLLOWED BY ANOTHER ERROR.// 2 48H THE PREVIOUS AND CURRENT ERROR MESSAGES FOLLOW.///) CALL EPRINT CALL E9RINT(MESSG,NW,NERR,.TRUE.) GO TO 50 C C SAVE THIS MESSAGE IN CASE IT IS NOT RECOVERED FROM PROPERLY. C 30 CALL E9RINT(MESSG,NW,NERR,.TRUE.) C IF (IOPT.EQ.1 .OR. IOPT.EQ.2) GO TO 40 C C MUST HAVE IOPT = 1 OR 2. C WRITE(IWUNIT,9003) 9003 FORMAT(42H1ERROR 4 IN SETERR - BAD VALUE FOR IOPT// 1 34H THE CURRENT ERROR MESSAGE FOLLOWS///) GO TO 50 C C IF THE ERROR IS FATAL, PRINT, DUMP, AND STOP C 40 IF (IOPT.EQ.2) GO TO 50 C C HERE THE ERROR IS RECOVERABLE C C IF THE RECOVERY MODE IS IN EFFECT, OK, JUST RETURN C IF (I8SAVE(2,0,.FALSE.).EQ.1) RETURN C C OTHERWISE PRINT AND STOP C CALL EPRINT STOP C 50 CALL EPRINT 60 CALL SDUMP STOP C END PyBDSF-1.10.1/src/port3/seti.f000066400000000000000000000003031420247104600155660ustar00rootroot00000000000000 SUBROUTINE SETI(N,V,B) C C SETI SETS THE N INTEGER ITEMS IN B TO V C INTEGER B(1),V C IF(N .LE. 0) RETURN C DO 10 I = 1, N 10 B(I) = V C RETURN C END PyBDSF-1.10.1/src/port3/setl.f000066400000000000000000000003031420247104600155710ustar00rootroot00000000000000 SUBROUTINE SETL(N,V,B) C C SETL SETS THE N LOGICAL ITEMS IN B TO V C LOGICAL B(1),V C IF(N .LE. 0) RETURN C DO 10 I = 1, N 10 B(I) = V C RETURN C END PyBDSF-1.10.1/src/port3/setr.f000066400000000000000000000002751420247104600156070ustar00rootroot00000000000000 SUBROUTINE SETR(N,V,B) C C SETR SETS THE N REAL ITEMS IN B TO V C REAL B(1),V C IF(N .LE. 0) RETURN C DO 10 I = 1, N 10 B(I) = V C RETURN C END PyBDSF-1.10.1/src/port3/smnfb.f000066400000000000000000000047571420247104600157500ustar00rootroot00000000000000 SUBROUTINE SMNFB( P, X,B, CALCF, MXFCAL, ACC ) C C ** SIMPLIED VERSION OF MNF C C INPUT PARAMETERS C P NUMBER OF UNKNOWNS C X APPROXIMATE SOLUTION C B FIRST ROW OF B GIVES LOWER BOUNDS ON X AND SECOND GIVES UPPER C BOUNDS C CALCF SUBROUTINE TO EVALUATE FUNCTION C MXFCAL MAXIMUM NUMBER OF PERMITTED FUNCTION EVALUATIONS C ACC ACCURACY IN X C OUTPUT PARAMETERS C X SOLUTION INTEGER P, MXFCAL REAL X(P), ACC ,B(2,P) EXTERNAL CALCF, C6LCF C C C C *** LOCAL VARIABLES *** C INTEGER IV, LIV, LV, V1 INTEGER IDI,IDM1,ID,J REAL DSTAK(1000) COMMON /CSTAK/ DSTAK INTEGER ISTAK(1000) EQUIVALENCE (DSTAK(1), ISTAK(1)) C C *** BODY *** C CALL ENTER(0) C/6S C IF (P.LT.1) C 1CALL SETERR(14H SMNFB- P.LT.1,14,1,2) C IF (MXFCAL.LT.1) C 1CALL SETERR(19H SMNFB- MXFCAL.LT.1,19,2,2) C IF (ACC.LT.0.0) C 1CALL SETERR(18H SMNFB-ACC .LT.0.0,18,3,2) C/7S IF (P.LT.1) 1CALL SETERR(' SMNFB- P.LT.1',14,1,2) IF (MXFCAL.LT.1) 1CALL SETERR(' SMNFB- MXFCAL.LT.1',19,2,2) IF (ACC.LT.0.0) 1CALL SETERR(' SMNFB-ACC .LT.0.0',18,3,2) C/ LIV =59+P LV=77+P*(P+23)/2 IV=ISTKGT(LIV,2) V1=ISTKGT(LV, 3) CALL IVSET(2,ISTAK(IV),LIV,LV,DSTAK(V1)) ISTAK(IV+20)=0 ISTAK(IV+16)=MXFCAL ISTAK(IV+17)=MXFCAL DSTAK(V1+32)=ACC DSTAK(V1+31)=ACC ID=ISTKGT(P, 3) IDM1=ID-1 DO 10 I=1,P IDI=IDM1+I DSTAK(IDI)=1.0 IF (X(I).NE.0.0)DSTAK(IDI)=1.0/ABS(X(I)) 10 CONTINUE CALL MNFB( P, DSTAK(ID),X,B, C6LCF, ISTAK(IV), LIV, LV, 1 DSTAK(V1), IU, UR, CALCF) J=ISTAK(IV) IF(J.LT.7) GO TO 20 C/6S C IF (J.EQ.82)CALL SETERR(26H SMNFB-INCONSISTENT BOUNDS,26,4,1) C IF (J.EQ.7)CALL SETERR(27H SMNFB-SINGULAR CONVERGENCE,27,5,1) C IF(J.EQ.8)CALL SETERR(24H SMNFB-FALSE CONVERGENCE,24,6,1) C IF(J.EQ.9)CALL SETERR(32H SMNFB-FUNCTION EVALUATION LIMIT,32,7,1) C IF (J.EQ.63) C 1CALL SETERR(43H SMNFB-F(X) CANNOT BE COMPUTED AT INITIAL X,43,8,1) C/7S IF (J.EQ.82)CALL SETERR(' SMNFB-INCONSISTENT BOUNDS',26,4,1) IF (J.EQ.7)CALL SETERR(' SMNFB-SINGULAR CONVERGENCE',27,5,1) IF(J.EQ.8)CALL SETERR(' SMNFB-FALSE CONVERGENCE',24,6,1) IF(J.EQ.9)CALL SETERR(' SMNFB-FUNCTION EVALUATION LIMIT',32,7,1) IF (J.EQ.63) 1CALL SETERR(' SMNFB-F(X) CANNOT BE COMPUTED AT INITIAL X',43,8,1) C/ 20 CALL LEAVE C RETURN C *** LAST LINE OF SMNFB FOLLOWS *** END PyBDSF-1.10.1/src/port3/srecap.f000066400000000000000000000012431420247104600161030ustar00rootroot00000000000000 SUBROUTINE SRECAP(IWUNIT) C C WRITES LOUT, LNOW, LUSED AND LMAX ON LOGICAL UNIT IWUNIT. C COMMON /CSTAK/DSTAK C DOUBLE PRECISION DSTAK(500) INTEGER ISTAK(1000) INTEGER ISTATS(4) LOGICAL INIT C EQUIVALENCE (DSTAK(1),ISTAK(1)) EQUIVALENCE (ISTAK(1),ISTATS(1)) C DATA INIT/.TRUE./ C CALL I0TK01 IF (INIT) CALL I0TK00(INIT,500,4) C WRITE(IWUNIT,9000) ISTATS C 9000 FORMAT(20H0STACK STATISTICS...// 1 24H OUTSTANDING ALLOCATIONS,I8/ 1 24H CURRENT ACTIVE LENGTH ,I8/ 3 24H MAXIMUM LENGTH USED ,I8/ 4 24H MAXIMUM LENGTH ALLOWED ,I8) C RETURN C END PyBDSF-1.10.1/src/port3/stinit.f000066400000000000000000000001671420247104600161440ustar00rootroot00000000000000 SUBROUTINE STINIT(NITEMS,ISIZE) C CALL I0TK01 CALL ISTKIN(NITEMS,ISIZE+2) C RETURN C END PyBDSF-1.10.1/src/port3/stkdmp.f000066400000000000000000000226551420247104600161420ustar00rootroot00000000000000 SUBROUTINE STKDMP C C THIS PROCEDURE PROVIDES A DUMP OF THE PORT STACK. C C WRITTEN BY D. D. WARNER. C C MOSTLY REWRITTEN BY P. A. FOX, OCTOBER 13, 1982 C AND COMMENTS ADDED. C C ALLOCATED REGIONS OF THE STACK ARE PRINTED OUT IN THE APPROPRIATE C FORMAT, EXCEPT IF THE STACK APPEARS TO HAVE BEEN OVERWRITTEN. C IF OVERWRITE SEEMS TO HAVE HAPPENED, THE ENTIRE STACK IS PRINTED OUT C IN UNSTRUCTURED FORM, ONCE FOR EACH OF THE POSSIBLE C (LOGICAL, INTEGER, REAL, DOUBLE PRECISION, OR COMPLEX) FORMATS. C COMMON /CSTAK/ DSTAK DOUBLE PRECISION DSTAK(500) REAL RSTAK(1000) C/R C REAL CMSTAK(2,500) C/C COMPLEX CMSTAK(500) C/ INTEGER ISTAK(1000) LOGICAL LSTAK(1000) C INTEGER LOUT, LNOW, LUSED, LMAX, LBOOK INTEGER LLOUT, BPNTR INTEGER IPTR, ERROUT, MCOL, NITEMS INTEGER WR, DR, WD, DD, WI INTEGER LNG(5), ISIZE(5) INTEGER I, LNEXT, ITYPE, I1MACH C LOGICAL INIT, TRBL1, TRBL2 C EQUIVALENCE (DSTAK(1), ISTAK(1)) EQUIVALENCE (DSTAK(1), LSTAK(1)) EQUIVALENCE (DSTAK(1), RSTAK(1)) C/R C EQUIVALENCE (DSTAK(1), CMSTAK(1,1)) C/C EQUIVALENCE (DSTAK(1), CMSTAK(1)) C/ EQUIVALENCE (ISTAK(1), LOUT) EQUIVALENCE (ISTAK(2), LNOW) EQUIVALENCE (ISTAK(3), LUSED) EQUIVALENCE (ISTAK(4), LMAX) EQUIVALENCE (ISTAK(5), LBOOK) EQUIVALENCE (ISTAK(6), ISIZE(1)) C DATA MCOL/132/ DATA INIT/.TRUE./ C C I0TK00 CHECKS TO SEE IF THE FIRST TEN, BOOKKEEPING, LOCATIONS OF C THE STACK HAVE BEEN INITIALIZED (AND DOES IT, IF NEEDED). C IF (INIT) CALL I0TK00(INIT, 500, 4) C C C I1MACH(4) IS THE STANDARD ERROR MESSAGE WRITE UNIT. C ERROUT = I1MACH(4) WRITE (ERROUT, 9901) 9901 FORMAT (11H1STACK DUMP) C C C FIND THE MACHINE-DEPENDENT FORMATS FOR PRINTING - BUT ADD 1 TO C THE WIDTH TO GET SEPARATION BETWEEN ITEMS, AND SUBTRACT 1 FROM C THE NUMBER OF DIGITS AFTER THE DECIMAL POINT TO ALLOW FOR THE C 1P IN THE DUMP FORMAT OF 1PEW.D C C (NOTE, THAT ALTHOUGH IT IS NOT NECESSARY, 2 HAS BEEN ADDED TO C THE INTEGER WIDTH, WI, TO CONFORM WITH DAN WARNERS PREVIOUS C USAGE - SO PEOPLE CAN COMPARE DUMPS WITH ONES THEY HAVE HAD C AROUND FOR A LONG TIME.) C CALL FRMATR(WR,DR) CALL FRMATD(WD,DD) CALL FRMATI(WI) C WR = WR+1 WD = WD+1 WI = WI+2 DR = DR-1 DD = DD-1 C C CHECK, IN VARIOUS WAYS, THE BOOKKEEPING PART OF THE STACK TO SEE C IF THINGS WERE OVERWRITTEN. C C LOUT IS THE NUMBER OF CURRENT ALLOCATIONS C LNOW IS THE CURRENT ACTIVE LENGTH OF THE STACK C LUSED IS THE MAXIMUM VALUE OF LNOW ACHIEVED C LMAX IS THE MAXIMUM LENGTH OF THE STACK C LBOOK IS THE NUMBER OF WORDS USED FOR BOOK-KEEPING C TRBL1 = LBOOK .NE. 10 IF (.NOT. TRBL1) TRBL1 = LMAX .LT. 12 IF (.NOT. TRBL1) TRBL1 = LMAX .LT. LUSED IF (.NOT. TRBL1) TRBL1 = LUSED .LT. LNOW IF (.NOT. TRBL1) TRBL1 = LNOW .LT. LBOOK IF (.NOT. TRBL1) TRBL1 = LOUT .LT. 0 IF (.NOT. TRBL1) GO TO 10 C WRITE (ERROUT, 9902) 9902 FORMAT (29H0STACK HEADING IS OVERWRITTEN) WRITE (ERROUT, 9903) 9903 FORMAT (47H UNSTRUCTURED DUMP OF THE DEFAULT STACK FOLLOWS) C C SINCE INFORMATION IS LOST, SIMPLY SET THE USUAL DEFAULT VALUES FOR C THE LENGTH OF THE ENTIRE STACK IN TERMS OF EACH (LOGICAL, INTEGER, C ETC.,) TYPE. C LNG(1) = 1000 LNG(2) = 1000 LNG(3) = 1000 LNG(4) = 500 LNG(5) = 500 C C CALL U9DMP(LNG, MCOL, WI, WR, DR, WD, DD) GO TO 110 C C WRITE OUT THE STORAGE UNITS USED BY EACH TYPE OF VARIABLE C 10 WRITE (ERROUT, 9904) 9904 FORMAT (19H0STORAGE PARAMETERS) WRITE (ERROUT, 9905) ISIZE(1) 9905 FORMAT (18H LOGICAL , I7, 14H STORAGE UNITS) WRITE (ERROUT, 9906) ISIZE(2) 9906 FORMAT (18H INTEGER , I7, 14H STORAGE UNITS) WRITE (ERROUT, 9907) ISIZE(3) 9907 FORMAT (18H REAL , I7, 14H STORAGE UNITS) WRITE (ERROUT, 9908) ISIZE(4) 9908 FORMAT (18H DOUBLE PRECISION , I7, 14H STORAGE UNITS) WRITE (ERROUT, 9909) ISIZE(5) 9909 FORMAT (18H COMPLEX , I7, 14H STORAGE UNITS) C C WRITE OUT THE CURRENT STACK STATISTICS (I.E. USAGE) C WRITE (ERROUT, 9910) 9910 FORMAT (17H0STACK STATISTICS) WRITE (ERROUT, 9911) LMAX 9911 FORMAT (23H STACK SIZE , I7) WRITE (ERROUT, 9912) LUSED 9912 FORMAT (23H MAXIMUM STACK USED , I7) WRITE (ERROUT, 9913) LNOW 9913 FORMAT (23H CURRENT STACK USED , I7) WRITE (ERROUT, 9914) LOUT 9914 FORMAT (23H NUMBER OF ALLOCATIONS , I7) C C HERE AT LEAST THE BOOKKEEPING PART OF THE STACK HAS NOT BEEN C OVERWRITTEN. C C STACKDUMP WORKS BACKWARDS FROM THE END (MOST RECENT ALLOCATION) OF C THE STACK, PRINTING INFORMATION, BUT ALWAYS CHECKING TO SEE IF C THE POINTERS FOR AN ALLOCATION HAVE BEEN OVERWRITTEN. C C LLOUT COUNTS THE NUMBER OF ALLOCATIONS STILL LEFT TO PRINT C SO LLOUT IS INITIALLY LOUT OR ISTAK(1). C C THE STACK ALLOCATION ROUTINE PUTS, AT THE END OF EACH ALLOCATION, C TWO EXTRA SPACES - ONE FOR THE TYPE OF THE ALLOCATION AND THE NEXT C TO HOLD A BACK POINTER TO THE PREVIOUS ALLOCATION. C THE BACK POINTER IS THEREFORE INITIALLY LOCATED AT THE INITIAL END, C LNOW, OF THE STACK. C CALL THIS LOCATION BPNTR. C LLOUT = LOUT BPNTR = LNOW C C IF WE ARE DONE, THE BACK POINTER POINTS BACK INTO THE BOOKKEEPING C PART OF THE STACK. C C IF WE ARE NOT DONE, OBTAIN THE NEXT REGION TO PRINT AND GET ITS TYPE. C 20 IF (BPNTR .LE. LBOOK) GO TO 110 C LNEXT = ISTAK(BPNTR) ITYPE = ISTAK(BPNTR-1) C C SEE IF ANY OF THESE NEW DATA ARE INCONSISTENT - WHICH WOULD SIGNAL C AN OVERWRITE. C TRBL2 = LNEXT .LT. LBOOK IF (.NOT. TRBL2) TRBL2 = BPNTR .LE. LNEXT IF (.NOT. TRBL2) TRBL2 = ITYPE .LT. 0 IF (.NOT. TRBL2) TRBL2 = 5 .LT. ITYPE IF (.NOT. TRBL2) GO TO 40 C C HERE THERE SEEMS TO HAVE BEEN A PARTIAL OVERWRITE. C COMPUTE THE LENGTH OF THE ENTIRE STACK IN TERMS OF THE VALUES GIVEN C IN THE BOOKKEEPING PART OF THE STACK (WHICH, AT LEAST, SEEMS NOT TO C HAVE BEEN OVERWRITTEN), AND DO AN UNFORMATTED DUMP, AND RETURN. C WRITE (ERROUT, 9915) 9915 FORMAT (28H0STACK PARTIALLY OVERWRITTEN) WRITE (ERROUT, 9916) 9916 FORMAT (45H UNSTRUCTURED DUMP OF REMAINING STACK FOLLOWS) C DO 30 I = 1, 5 LNG(I) = (BPNTR*ISIZE(2)-1)/ISIZE(I)+1 30 CONTINUE C CALL U9DMP(LNG, MCOL, WI, WR, DR, WD, DD) GO TO 110 C C C COMES HERE EACH TIME TO PRINT NEXT (BACK) ALLOCATION. C C AT THIS POINT BPNTR POINTS TO THE END OF THE ALLOCATION ABOUT TO C BE PRINTED, LNEXT = ISTAK(BPNTR) POINTS BACK TO THE END OF THE C PREVIOUS ALLOCATION, AND ITYPE = ISTAK(BPNTR-1) GIVES THE TYPE OF C THE ALLOCATION ABOUT TO BE PRINTED. C C THE PRINTING ROUTINES NEED TO KNOW THE START OF THE ALLOCATION AND C THE NUMBER OF ITEMS. C THESE ARE COMPUTED FROM THE EQUATIONS USED WHEN THE FUNCTION ISTKGT C COMPUTED THE ORIGINAL ALLOCATION - THE POINTER TO THE C START OF THE ALLOCATION WAS COMPUTED BY ISTKGT FROM THE (THEN) C END OF THE PREVIOUS ALLOCATION VIA THE FORMULA, C C ISTKGT = (LNOW*ISIZE(2)-1)/ISIZE(ITYPE) + 2 C 40 IPTR = (LNEXT*ISIZE(2)-1)/ISIZE(ITYPE) + 2 C C THE FUNCTION ISTKGT THEN FOUND NEW END OF THE STACK, LNOW, FROM THE C FORMULA C C I = ( (ISTKGT-1+NITEMS)*ISIZE(ITYPE) - 1 )/ISIZE(2) + 3 C C HERE WE SOLVE THIS FOR NITEMS TO DETERMINE THE NUMBER OF LOCATIONS C IN THIS ALLOCATION. C NITEMS = 1-IPTR + ((BPNTR-3)*ISIZE(2)+1)/ISIZE(ITYPE) C C C _USE_ THE TYPE (INTEGER, REAL, ETC.) TO DTERMINE WHICH PRINTING C ROUTINE TO USE. C IF (ITYPE .EQ. 1) GO TO 50 IF (ITYPE .EQ. 2) GO TO 60 IF (ITYPE .EQ. 3) GO TO 70 IF (ITYPE .EQ. 4) GO TO 80 IF (ITYPE .EQ. 5) GO TO 90 C 50 WRITE (ERROUT, 9917) LLOUT, IPTR 9917 FORMAT (13H0ALLOCATION =, I7, 20H, POINTER =, 1 I7, 23H, TYPE LOGICAL) CALL A9RNTL(LSTAK(IPTR), NITEMS, ERROUT, MCOL) GO TO 100 C 60 WRITE (ERROUT, 9918) LLOUT, IPTR 9918 FORMAT (13H0ALLOCATION =, I7, 20H, POINTER =, 1 I7, 23H, TYPE INTEGER) CALL A9RNTI(ISTAK(IPTR), NITEMS, ERROUT, MCOL, WI) GO TO 100 C 70 WRITE (ERROUT, 9919) LLOUT, IPTR 9919 FORMAT (13H0ALLOCATION =, I7, 20H, POINTER =, 1 I7, 20H, TYPE REAL) CALL A9RNTR(RSTAK(IPTR), NITEMS, ERROUT, MCOL, WR, DR) GO TO 100 C 80 WRITE (ERROUT, 9920) LLOUT, IPTR 9920 FORMAT (13H0ALLOCATION =, I7, 20H, POINTER =, 1 I7, 32H, TYPE DOUBLE PRECISION) CALL A9RNTD(DSTAK(IPTR), NITEMS, ERROUT, MCOL, WD, DD) GO TO 100 C 90 WRITE (ERROUT, 9921) LLOUT, IPTR 9921 FORMAT (13H0ALLOCATION =, I7, 20H, POINTER =, 1 I7, 23H, TYPE COMPLEX) C/R C CALL A9RNTC(CMSTAK(1,IPTR), NITEMS, ERROUT, MCOL, WR,DR) C/C CALL A9RNTC(CMSTAK(IPTR), NITEMS, ERROUT, MCOL, WR, DR) C/ C 100 BPNTR = LNEXT LLOUT = LLOUT-1 GO TO 20 C 110 WRITE (ERROUT, 9922) 9922 FORMAT (18H0END OF STACK DUMP) RETURN END PyBDSF-1.10.1/src/port3/stopx.f000066400000000000000000000014401420247104600160020ustar00rootroot00000000000000 LOGICAL FUNCTION STOPX(IDUMMY) C *****PARAMETERS... INTEGER IDUMMY C C .................................................................. C C *****PURPOSE... C THIS FUNCTION MAY SERVE AS THE STOPX (ASYNCHRONOUS INTERRUPTION) C FUNCTION FOR THE NL2SOL (NONLINEAR LEAST-SQUARES) PACKAGE AT C THOSE INSTALLATIONS WHICH DO NOT WISH TO IMPLEMENT A C DYNAMIC STOPX. C C *****ALGORITHM NOTES... C AT INSTALLATIONS WHERE THE NL2SOL SYSTEM IS USED C INTERACTIVELY, THIS DUMMY STOPX SHOULD BE REPLACED BY A C FUNCTION THAT RETURNS .TRUE. IF AND ONLY IF THE INTERRUPT C (BREAK) KEY HAS BEEN PRESSED SINCE THE LAST CALL ON STOPX. C C .................................................................. C STOPX = .FALSE. RETURN END PyBDSF-1.10.1/src/port3/ttgrx1.f000066400000000000000000000136241420247104600160650ustar00rootroot00000000000000C$TEST TTGR1 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, istkgt, iumb, is(1000), iu integer ix, iy, nu, kx, nx, ky integer ny real errpar(2), tstart, dt, lx, ly, rx real ry, ws(1000), rs(1000), tstop logical ls(1000) complex cs(500) equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve the heat equation with solution u == t*x*y, c grad . ( u + ux + .1 * uy, u + uy + .1 * ux ) = ut + ux + uy +g(x,t) c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 ly = 0 ry = 1 kx = 2 ky = 2 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ix = iumb(lx, rx, ndx, kx, nx) c uniform grid. iy = iumb(ly, ry, ndy, ky, ny) c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 3) c initial conditions for u. call setr(nu*(nx-kx)*(ny-ky), 0e0, ws(iu)) call ttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, 1 nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), a(nx, ny, 1 nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), auxt(nx, ny 1 , nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu), fu(nx, 2 ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, ny, nu, nu) 1 , fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i)+.1*uy(p, q, i)+u(p, q, i) a(p, q, i, 2) = uy(p, q, i)+.1*ux(p, q, i)+u(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 auy(p, q, i, i, 1) = .1 aux(p, q, i, i, 2) = .1 au(p, q, i, i, 1) = 1 au(p, q, i, i, 2) = 1 f(p, q, i) = ut(p, q, i)+ux(p, q, i)+uy(p, q, i) fut(p, q, i, i) = 1 fux(p, q, i, i) = 1 fuy(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)+.2*t-x(p)*y(q) 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu), uy(nx, ny, 1 nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, nu), but(nx, 1 ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu, nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-t*x(i)*y(j) 1 continue 2 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /a7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu real u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ixs integer iys, nxs, nys, istkgt, i, iewe integer ka(2), ma(2), is(1000), ilumd, i1mach real abs, erru, amax1, rs(1000), ws(1000) logical ls(1000) complex cs(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c u(nx-kx,ny0ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = ilumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = ilumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 3) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = amax1(erru, abs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) t, erru 2 format (14h error in u(.,, 1pe10.2, 3h) =, 1pe10.2) call leave return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p c the exact solution. do 3 p = 1, nu do 2 i = 1, nx do 1 j = 1, ny u(i, j, p) = t*x(i)*y(j) 1 continue 2 continue 3 continue return end PyBDSF-1.10.1/src/port3/ttgrx1p.f000066400000000000000000000130501420247104600162360ustar00rootroot00000000000000C$TEST TTGR1P c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, istkgt, iumb, is(1000), iu integer ix, iy, nu, kx, nx, ky integer ny real errpar(2), tstart, dt, lx, ly, rx real ry, ws(1000), rs(1000), tstop logical ls(1000) complex cs(500) equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve the heat equation with solution u == t*x*y, c grad . ( u + ux + .1 * uy, u + uy + .1 * ux ) = ut + ux + uy +g(x,t) c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 ly = 0 ry = 1 kx = 2 ky = 2 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ix = iumb(lx, rx, ndx, kx, nx) c uniform grid. iy = iumb(ly, ry, ndy, ky, ny) c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 3) c initial conditions for u. call setr(nu*(nx-kx)*(ny-ky), 0e0, ws(iu)) call ttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, 1 nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), a(nx, ny, 1 nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), auxt(nx, ny 1 , nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu), fu(nx, 2 ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, ny, nu, nu) 1 , fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i)+.1*uy(p, q, i)+u(p, q, i) a(p, q, i, 2) = uy(p, q, i)+.1*ux(p, q, i)+u(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 auy(p, q, i, i, 1) = .1 aux(p, q, i, i, 2) = .1 au(p, q, i, i, 1) = 1 au(p, q, i, i, 2) = 1 f(p, q, i) = ut(p, q, i)+ux(p, q, i)+uy(p, q, i) fut(p, q, i, i) = 1 fux(p, q, i, i) = 1 fuy(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)+.2*t-x(p)*y(q) 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu), uy(nx, ny, 1 nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, nu), but(nx, 1 ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu, nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-t*x(i)*y(j) 1 continue 2 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /a7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return c print results. 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu real u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ixs integer iys, nxs, nys, istkgt, i, ka(2) integer ma(2), is(1000), ilumd, i1mach real rs(1000), ws(1000) logical ls(1000) complex cs(500) integer temp, temp1 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to print the solution at each time-step. c u(nx-kx,ny,ky,nu). c the port library stack and its aliases. call enter(1) c find the solution at 2 * 2 points / mesh rectangle. c x search grid. ixs = ilumd(ws(ix), nx, 2, nxs) c y search grid. iys = ilumd(ws(iy), ny, 2, nys) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) temp1 = ifa+nxs*nys-1 temp = i1mach(2) write (temp, 1) t, (ws(i), i = ifa, temp1) 1 format (3h u(, 1pe10.2, 7h,.,.) =, (1p5e10.2/20x,1p4e10.2)) call leave return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p c the exact solution. do 3 p = 1, nu do 2 i = 1, nx do 1 j = 1, ny u(i, j, p) = t*x(i)*y(j) 1 continue 2 continue 3 continue return end PyBDSF-1.10.1/src/port3/ttgrx2.f000066400000000000000000000141541420247104600160650ustar00rootroot00000000000000C$TEST TTGR2 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, istkgt, iumb, is(1000), iu integer ix, iy, nu, kx, nx, ky integer ny real errpar(2), tstart, dt, lx, ly, rx real ry, ws(1000), rs(1000), tstop logical ls(1000) complex cs(500) equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve two coupled, nonlinear heat equations. c u1 sub t = div . ( u1x, u1y ) - u1*u2 + g1 c u2 sub t = div . ( u2x, u2y ) - u1*u2 + g2 c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 2 lx = 0 rx = 1 ly = 0 ry = 1 kx = 4 ky = 4 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1e-2 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ix = iumb(lx, rx, ndx, kx, nx) c uniform grid. iy = iumb(ly, ry, ndy, ky, ny) c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 3) call setr(nu*(nx-kx)*(ny-ky), 1e0, ws(iu)) call ttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, 1 nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), a(nx, ny, 1 nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), auxt(nx, ny 1 , nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu), fu(nx, 2 ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, ny, nu, nu) 1 , fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer p, q real exp do 2 q = 1, ny do 1 p = 1, nx a(p, q, 1, 1) = ux(p, q, 1) aux(p, q, 1, 1, 1) = 1 a(p, q, 1, 2) = uy(p, q, 1) auy(p, q, 1, 1, 2) = 1 f(p, q, 1) = ut(p, q, 1)+u(p, q, 1)*u(p, q, 2) fu(p, q, 1, 1) = u(p, q, 2) fu(p, q, 1, 2) = u(p, q, 1) fut(p, q, 1, 1) = 1 a(p, q, 2, 1) = ux(p, q, 2) aux(p, q, 2, 2, 1) = 1 a(p, q, 2, 2) = uy(p, q, 2) auy(p, q, 2, 2, 2) = 1 f(p, q, 2) = ut(p, q, 2)+u(p, q, 1)*u(p, q, 2) fu(p, q, 2, 1) = u(p, q, 2) fu(p, q, 2, 2) = u(p, q, 1) fut(p, q, 2, 2) = 1 f(p, q, 1) = f(p, q, 1)-(exp(t*(x(p)-y(q)))*(x(p)-y(q)-2.*t* 1 t)+1.) f(p, q, 2) = f(p, q, 2)-(exp(t*(y(q)-x(p)))*(y(q)-x(p)-2.*t* 1 t)+1.) 1 continue 2 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu), uy(nx, ny, 1 nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, nu), but(nx, 1 ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu, nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j real exp do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-exp(t*(x(i)-y(j))) bu(i, j, 2, 2) = 1 b(i, j, 2) = u(i, j, 2)-exp(t*(y(j)-x(i))) 1 continue 2 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /cstak/ ds double precision ds(500) common /a7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /a7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny integer ifa, ita(2), ixa(2), nta(2), nxa(2), ixs integer iys, nxs, nys, istkgt, i, j integer iewe, ka(2), ma(2), is(1000), ilumd, i1mach real abs, erru, amax1, rs(1000), ws(1000) logical ls(1000) complex cs(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c the port library stack and its aliases. if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = ilumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = ilumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nu*nxs*nys, 3) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) do 5 j = 1, nu c evaluate them. temp = (j-1)*(nx-kx)*(ny-ky) call tsd1(2, ka, ws, ita, nta, u(temp+1), ws, ixa, nxa, ma, ws( 1 ifa)) c error in solution values. erru = 0 temp = nxs*nys do 3 i = 1, temp temp2 = iewe+i-1+(j-1)*nxs*nys temp1 = ifa+i erru = amax1(erru, abs(ws(temp2)-ws(temp1-1))) 3 continue temp = i1mach(2) write (temp, 4) t, j, erru 4 format (14h error in u(.,, 1pe10.2, 1h,, i2, 3h) =, 1pe10.2) 5 continue call leave return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p real exp, float c the exact solution. do 3 p = 1, nu do 2 i = 1, nx do 1 j = 1, ny u(i, j, p) = exp(float((-1)**(p+1))*t*(x(i)-y(j))) 1 continue 2 continue 3 continue return end PyBDSF-1.10.1/src/port3/ttgrx3.f000066400000000000000000000157601420247104600160720ustar00rootroot00000000000000C$TEST TTGR3 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, istkgt, i, iumb, immm integer is(1000), iu, ix, iy, nu, kx integer nx, ky, ny, ilumb real errpar(2), tstart, dt, yb(4), lx, rs(1000) real rx, ws(1000), tstop logical ls(1000) complex cs(500) equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve the layered heat equation, with kappa = 1, 1/2, 1/3, c div . ( kappa(x,y) * grad u ) = ut + g c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 do 1 i = 1, 4 yb(i) = i-1 1 continue kx = 2 ky = 2 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ix = iumb(lx, rx, ndx, kx, nx) c uniform grid. iy = ilumb(yb, 4, ndy, ky, ny) c make mult = ky-1. iy = immm(iy, ny, yb(2), ky-1) c make mult = ky-1. iy = immm(iy, ny, yb(3), ky-1) c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 3) call setr(nu*(nx-kx)*(ny-ky), 0e0, ws(iu)) call ttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, 1 nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), a(nx, ny, 1 nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), auxt(nx, ny 1 , nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu), fu(nx, 2 ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, ny, nu, nu) 1 , fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q real kappa logical temp do 7 i = 1, nu do 6 q = 1, ny do 5 p = 1, nx if (y(q) .ge. 1.) goto 1 kappa = 1 goto 4 1 if (y(q) .ge. 2.) goto 2 kappa = 0.5 goto 3 2 kappa = 1./3e0 3 continue 4 a(p, q, i, 1) = kappa*ux(p, q, i) aux(p, q, i, i, 1) = kappa a(p, q, i, 2) = kappa*uy(p, q, i) auy(p, q, i, i, 2) = kappa f(p, q, i) = ut(p, q, i) fut(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)-y(q)/kappa temp = 1. .lt. y(q) if (temp) temp = y(q) .lt. 2. if (temp) f(p, q, i) = f(p, q, i)+1. temp = 2. .lt. y(q) if (temp) temp = y(q) .lt. 3. if (temp) f(p, q, i) = f(p, q, i)+3. 5 continue 6 continue 7 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu), uy(nx, ny, 1 nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, nu), but(nx, 1 ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu, nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j logical temp do 6 j = 1, ny do 5 i = 1, nx temp = x(i) .eq. lx if (.not. temp) temp = x(i) .eq. rx if (.not. temp) goto 1 bux(i, j, 1, 1) = 1 c left or right. c neumann bcs. b(i, j, 1) = ux(i, j, 1) goto 4 1 if (y(j) .ne. ly) goto 2 b(i, j, 1) = u(i, j, 1) c bottom. bu(i, j, 1, 1) = 1 goto 3 2 b(i, j, 1) = u(i, j, 1)-6.*t c top. bu(i, j, 1, 1) = 1 3 continue 4 continue 5 continue 6 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /a7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu real u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ixs integer iys, nxs, nys, istkgt, i, iewe integer ka(2), ma(2), is(1000), ilumd, i1mach real abs, erru, amax1, rs(1000), ws(1000) logical ls(1000) complex cs(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c u(nx-kx,ny,ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = ilumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = ilumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 3) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = amax1(erru, abs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) t, erru 2 format (14h error in u(.,, 1pe10.2, 3h) =, 1pe10.2) call leave return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p c the exact solution. do 7 p = 1, nu do 6 i = 1, nx do 5 j = 1, ny if (y(j) .ge. 1.) goto 1 u(i, j, p) = t*y(j) goto 4 1 if (y(j) .ge. 2.) goto 2 u(i, j, p) = 2.*t*y(j)-t goto 3 2 u(i, j, p) = 3.*t*y(j)-3.*t 3 continue 4 continue 5 continue 6 continue 7 continue return end PyBDSF-1.10.1/src/port3/ttgrx4.f000066400000000000000000000176161420247104600160750ustar00rootroot00000000000000C$TEST TTGR4 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, istkgt, iumb, is(1000), iu integer ix, iy, nu, kx, nx, ky integer ny real errpar(2), tstart, dt, lx, ly, rx real ry, ws(1000), rs(1000), tstop logical ls(1000) complex cs(500) equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve the linear heat equation c grad . ( ux - 0.1 * uy , 0.1*ux + uy ) = ut - x*y c with solution u == t*x*y on [0,+1]**2, exact for k = 4, c with tilted top and bottom, normal bcs there. c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 ly = 0 ry = 1 kx = 4 ky = 4 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ix = iumb(lx, rx, ndx, kx, nx) c uniform grid. iy = iumb(ly, ry, ndy, ky, ny) c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 3) call setr(nu*(nx-kx)*(ny-ky), 0e0, ws(iu)) call ttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, xi, nx, yi, ny, nu, u, ut, ux, uy, uxt, 1 uyt, a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, 2 fuxt, fuyt) integer nu, nx, ny real t, xi(nx), yi(ny), u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny 1 , nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), a(nx, ny, 1 nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), auxt(nx, ny 1 , nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu), fu(nx, 2 ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, ny, nu, nu) 1 , fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) external bt, lr integer i, p, q real d(600), x, y, xx(100), yy(100) integer temp if (nx*ny .gt. 100) call seterr(19haf - nx*ny .gt. 100, 19, 1, 2) call btmap(t, xi, yi, nx, ny, lr, bt, xx, yy, d) c map into (x,y). call ttgru(nx, ny, d, ux, uy, ut, nu) do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx temp = p+(q-1)*nx x = xx(temp) temp = p+(q-1)*nx y = yy(temp) a(p, q, i, 1) = ux(p, q, i)-.1*uy(p, q, i) a(p, q, i, 2) = uy(p, q, i)+.1*ux(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 auy(p, q, i, i, 1) = -.1 aux(p, q, i, i, 2) = .1 f(p, q, 1) = ut(p, q, 1)-x*y fut(p, q, 1, 1) = 1 1 continue 2 continue 3 continue c map into (xi,eta). call ttgrg(nx, ny, d, nu, a, au, aux, auy, f, fu, fux, fuy) return end subroutine bc(t, xi, nx, yi, ny, lx, rx, ly, ry, u, ut, ux 1 , uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, xi(nx), yi(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu), uy(nx, ny, 1 nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, nu), but(nx, 1 ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu, nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) external bt, lr integer i, j real d(600), x, y, xx(100), yy(100) integer temp1 logical temp if (nx*ny .gt. 100) call seterr(19hbc - nx*ny .gt. 100, 19, 1, 2) call btmap(t, xi, yi, nx, ny, lr, bt, xx, yy, d) c map into (x,y). call ttgru(nx, ny, d, ux, uy, ut, nu) do 6 j = 1, ny do 5 i = 1, nx temp1 = i+(j-1)*nx x = xx(temp1) temp1 = i+(j-1)*nx y = yy(temp1) temp = xi(i) .eq. lx if (.not. temp) temp = xi(i) .eq. rx if (.not. temp) goto 1 bu(i, j, 1, 1) = 1 c left or right. b(i, j, 1) = u(i, j, 1)-t*x*y goto 4 1 if (yi(j) .ne. ly) goto 2 b(i, j, 1) = (ux(i, j, 1)-t*y)-(uy(i, j, 1)-t*x) c bottom. bux(i, j, 1, 1) = 1 c normal is (1,-1). buy(i, j, 1, 1) = -1 goto 3 2 b(i, j, 1) = (uy(i, j, 1)-t*x)-(ux(i, j, 1)-t*y) c top. bux(i, j, 1, 1) = -1 c normal is (-1,1). buy(i, j, 1, 1) = 1 3 continue 4 continue 5 continue 6 continue c map into (xi,eta). call ttgrb(nx, ny, d, nu, bux, buy, but) return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /a7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu real u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ixs integer iys, nxs, nys, istkgt, i, iewe integer ka(2), ma(2), is(1000), ilumd, i1mach real abs, erru, amax1, rs(1000), ws(1000) logical ls(1000) complex cs(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c u(nx-kx,ny-ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = ilumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = ilumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 3) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = amax1(erru, abs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) t, erru 2 format (14h error in u(.,, 1pe10.2, 3h) =, 1pe10.2) call leave return end subroutine ewe(t, xi, nx, yi, ny, u, nu) integer nu, nx, ny real t, xi(nx), yi(ny), u(nx, ny, nu) external bt, lr integer i, j, p real d(6000), x, y, xx(1000), yy(1000) c the exact solution. if (ny .gt. 1000) call seterr(18hewe - ny .gt. 1000, 18, 1, 2) do 3 p = 1, nu do 2 i = 1, nx call btmap(t, xi(i), yi, 1, ny, lr, bt, xx, yy, d) do 1 j = 1, ny x = xx(j) y = yy(j) u(i, j, p) = t*x*y 1 continue 2 continue 3 continue return end subroutine lr(t, lx, rx, lxt, rxt) real t, lx, rx, lxt, rxt c to get the l and r end-points of the mapping in x. lx = 0 rx = 1 lxt = 0 rxt = 0 return end subroutine bt(t, x, f, g, fx, gx, ft, gt) real t, x, f, g, fx, gx real ft, gt c to get the bottom and top of mapping in y. f = x-1. g = x ft = 0 gt = 0 fx = 1 gx = 1 return end PyBDSF-1.10.1/src/port3/ttgrx5.f000066400000000000000000000156161420247104600160740ustar00rootroot00000000000000C$TEST TTGR5 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer ndx, ndy, istkgt, i, is(1000), iu integer ix, iy, nu, kx, nx, ky integer ny real errpar(2), tstart, dt, lx, ly, rx real ry, ws(1000), rs(1000), float, tstop logical ls(1000) complex cs(500) integer temp, temp1 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve laplaces equation with real ( z*log(z) ) as solution. c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 ly = 0 ry = 1 kx = 4 ky = 4 ndx = 2 ndy = 2 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 nx = ndx+2*(kx-1) c space for x mesh. ix = istkgt(nx, 3) do 1 i = 1, kx temp = ix+i ws(temp-1) = 0 temp = ix+nx-i ws(temp) = rx 1 continue c 0 and rx mult = kx. temp = ndx-1 do 2 i = 1, temp temp1 = ix+kx-2+i ws(temp1) = rx*(float(i-1)/(float(ndx)-1e0))**kx 2 continue ny = ndy+2*(ky-1) c space for y mesh. iy = istkgt(ny, 3) do 3 i = 1, ky temp = iy+i ws(temp-1) = 0 temp = iy+ny-i ws(temp) = ry 3 continue c 0 and ry mult = ky. temp = ndy-1 do 4 i = 1, temp temp1 = iy+ky-2+i ws(temp1) = ry*(float(i-1)/(float(ndy)-1e0))**ky 4 continue c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 3) call setr(nu*(nx-kx)*(ny-ky), 0e0, ws(iu)) call ttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) call leave call wrapup stop end subroutine af(t, xi, nx, yi, ny, nu, u, ut, ux, uy, uxt, 1 uyt, a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, 2 fuxt, fuyt) integer nu, nx, ny real t, xi(nx), yi(ny), u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny 1 , nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), a(nx, ny, 1 nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), auxt(nx, ny 1 , nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu), fu(nx, 2 ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, ny, nu, nu) 1 , fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i) a(p, q, i, 2) = uy(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu), uy(nx, ny, 1 nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, nu), but(nx, 1 ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu, nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j real cos, sin, r, alog, atan, sqrt real theta do 6 j = 1, ny do 5 i = 1, nx if (y(j) .ne. ly) goto 1 b(i, j, 1) = uy(i, j, 1) c neumann data on bottom. buy(i, j, 1, 1) = 1 goto 4 1 r = sqrt(x(i)**2+y(j)**2) c dirichlet data. if (x(i) .le. 0.) goto 2 theta = atan(y(j)/x(i)) goto 3 2 theta = 2.*atan(1e0) 3 b(i, j, 1) = u(i, j, 1)-r*(cos(theta)*alog(r)-theta*sin( 1 theta)) bu(i, j, 1, 1) = 1 4 continue 5 continue 6 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /a7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu real u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ixs integer iys, nxs, nys, istkgt, i, iewe integer ka(2), ma(2), is(1000), ilumd, i1mach real abs, erru, amax1, rs(1000), ws(1000) logical ls(1000) complex cs(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c u(nx-kx,ny-ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = ilumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = ilumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 3) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = amax1(erru, abs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) t, erru 2 format (14h error in u(.,, 1pe10.2, 3h) =, 1pe10.2) call leave return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p real cos, sin, r, alog, atan, sqrt real theta c the exact solution. do 7 p = 1, nu do 6 i = 1, nx do 5 j = 1, ny r = sqrt(x(i)**2+y(j)**2) if (x(i) .le. 0.) goto 1 theta = atan(y(j)/x(i)) goto 2 1 theta = 2.*atan(1e0) 2 if (r .le. 0.) goto 3 u(i, j, p) = r*(cos(theta)*alog(r)-theta*sin(theta)) goto 4 3 u(i, j, p) = 0 4 continue 5 continue 6 continue 7 continue return end PyBDSF-1.10.1/src/port3/ttgrx6.f000066400000000000000000000260321420247104600160670ustar00rootroot00000000000000C$TEST TTGR6 c main program common /cstak/ ds double precision ds(350000) external handle, bc, af integer iue, ndx, ndy, iur, ixr, iyr integer nxr, nyr, istkgt, i, is(1000), iu integer ix, iy, nu, kx, nx, ky integer ny, i1mach real abs, errpar(2), tstart, eerr, erre, errr real amax1, dt, lx, ly, rx, ry real ws(1000), rs(1000), float, tstop logical ls(1000) complex cs(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get error estimates for laplaces equation with real ( z*log(z) ) as c solution. c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 4) call enter(1) nu = 1 lx = 0 rx = 1 ly = 0 ry = 1 kx = 4 ky = 4 ndx = 2 ndy = 2 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 nx = ndx+2*(kx-1) c space for x mesh. ix = istkgt(nx, 3) do 1 i = 1, kx temp = ix+i ws(temp-1) = 0 temp = ix+nx-i ws(temp) = rx 1 continue c 0 and rx mult = kx. temp = ndx-1 do 2 i = 1, temp temp2 = ix+kx-2+i ws(temp2) = rx*(float(i-1)/(float(ndx)-1e0))**kx 2 continue ny = ndy+2*(ky-1) c space for y mesh. iy = istkgt(ny, 3) do 3 i = 1, ky temp = iy+i ws(temp-1) = 0 temp = iy+ny-i ws(temp) = ry 3 continue c 0 and ry mult = ky. temp = ndy-1 do 4 i = 1, temp temp2 = iy+ky-2+i ws(temp2) = ry*(float(i-1)/(float(ndy)-1e0))**ky 4 continue c space for the solution. iu = istkgt(nu*(nx-kx)*(ny-ky), 3) call setr(nu*(nx-kx)*(ny-ky), 0e0, ws(iu)) temp = i1mach(2) write (temp, 5) 5 format (23h solving on crude mesh.) call ttgr(ws(iu), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) dt = 1 ndx = 2*ndx-1 c refine mesh. ndy = 2*ndy-1 nxr = ndx+2*(kx-1) c space for x mesh. ixr = istkgt(nxr, 3) do 6 i = 1, kx temp = ixr+i ws(temp-1) = 0 temp = ixr+nxr-i ws(temp) = rx 6 continue c 0 and rx mult = kx. temp = ndx-1 do 7 i = 1, temp temp2 = ixr+kx-2+i ws(temp2) = rx*(float(i-1)/(float(ndx)-1e0))**kx 7 continue nyr = ndy+2*(ky-1) c space for y mesh. iyr = istkgt(nyr, 3) do 8 i = 1, ky temp = iyr+i ws(temp-1) = 0 temp = iyr+nyr-i ws(temp) = ry 8 continue c 0 and ry mult = ky. temp = ndy-1 do 9 i = 1, temp temp2 = iyr+ky-2+i ws(temp2) = ry*(float(i-1)/(float(ndy)-1e0))**ky 9 continue c space for the solution. iur = istkgt(nu*(nxr-kx)*(nyr-ky), 3) call setr(nu*(nxr-kx)*(nyr-ky), 0e0, ws(iur)) temp = i1mach(2) write (temp, 10) 10 format (25h solving on refined mesh.) call ttgr(ws(iur), nu, kx, ws(ixr), nxr, ky, ws(iyr), nyr, tstart, 1 tstop, dt, af, bc, errpar, handle) dt = 1 errpar(1) = errpar(1)/10. errpar(2) = errpar(2)/10. c space for the solution. iue = istkgt(nu*(nx-kx)*(ny-ky), 3) call setr(nu*(nx-kx)*(ny-ky), 0e0, ws(iue)) temp = i1mach(2) write (temp, 11) 11 format (24h solving with errpar/10.) call ttgr(ws(iue), nu, kx, ws(ix), nx, ky, ws(iy), ny, tstart, 1 tstop, dt, af, bc, errpar, handle) errr = eerr(kx, ix, nx, ky, iy, ny, ws(iu), nu, ixr, nxr, iyr, 1 nyr, ws(iur), tstop) erre = 0 temp = nu*(nx-kx)*(ny-ky) do 12 i = 1, temp temp2 = iu+i temp1 = iue+i erre = amax1(erre, abs(ws(temp2-1)-ws(temp1-1))) 12 continue temp = i1mach(2) write (temp, 13) erre 13 format (24h u error from u and ue =, 1pe10.2) temp = i1mach(2) write (temp, 14) errr 14 format (24h u error from u and ur =, 1pe10.2) call leave call wrapup stop end subroutine af(t, xi, nx, yi, ny, nu, u, ut, ux, uy, uxt, 1 uyt, a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, 2 fuxt, fuyt) integer nu, nx, ny real t, xi(nx), yi(ny), u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny 1 , nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), a(nx, ny, 1 nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), auxt(nx, ny 1 , nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu), fu(nx, 2 ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, ny, nu, nu) 1 , fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i) a(p, q, i, 2) = uy(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu), uy(nx, ny, 1 nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, nu), but(nx, 1 ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu, nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j real cos, sin, r, alog, atan, sqrt real theta do 6 j = 1, ny do 5 i = 1, nx if (y(j) .ne. ly) goto 1 b(i, j, 1) = uy(i, j, 1) c neumann data on bottom. buy(i, j, 1, 1) = 1 goto 4 1 r = sqrt(x(i)**2+y(j)**2) c dirichlet data. if (x(i) .le. 0.) goto 2 theta = atan(y(j)/x(i)) goto 3 2 theta = 2.*atan(1e0) 3 b(i, j, 1) = u(i, j, 1)-r*(cos(theta)*alog(r)-theta*sin( 1 theta)) bu(i, j, 1, 1) = 1 4 continue 5 continue 6 continue return end subroutine handle(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgrp/ errpar, nu, mxq, myq integer nu, mxq, myq real errpar(2) common /a7tgrm/ kx, ix, nx, ky, iy, ny integer kx, ix, nx, ky, iy, ny if (t0 .ne. t) goto 2 write (6, 1) t 1 format (16h restart for t =, 1pe10.2) return 2 call gerr(kx, ix, nx, ky, iy, ny, u, nu, t) return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, nu, t) integer kx, ix, nx, ky, iy, ny integer nu real u(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ixs integer iys, nxs, nys, istkgt, i, iewe integer ka(2), ma(2), is(1000), ilumd, i1mach real abs, erru, amax1, rs(1000), ws(1000) logical ls(1000) complex cs(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c u(nx-kx,ny-ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = ilumd(ws(ix), nx, 2*kx, nxs) c y search grid. iys = ilumd(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 3) c the exact solution. call ewe(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), nu) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = amax1(erru, abs(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) t, erru 2 format (14h error in u(.,, 1pe10.2, 3h) =, 1pe10.2) call leave return end real function eerr(kx, ix, nx, ky, iy, ny, u, nu, ixr, nxr 1 , iyr, nyr, ur, t) integer kx, ix, nx, ky, iy, ny integer nu, ixr, nxr, iyr, nyr real u(1), ur(1), t common /cstak/ ds double precision ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ixs integer iys, nxs, nys, istkgt, i, ifar integer ka(2), ma(2), is(1000), ilumd, i1mach real abs, erru, amax1, rs(1000), ws(1000) logical ls(1000) complex cs(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error estimate at each time-step. c u(nx-kx,ny-ky,nu), ur(nxr-kx,nyr-ky,nu). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / fine mesh recta cngle. c x search grid. ixs = ilumd(ws(ixr), nxr, 2*kx, nxs) c y search grid. iys = ilumd(ws(iyr), nyr, 2*ky, nys) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) ka(1) = kx ka(2) = ky ita(1) = ixr ita(2) = iyr nta(1) = nxr nta(2) = nyr ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifar = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, ur, ws, ixa, nxa, ma, ws(ifar)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = ifar+i temp1 = ifa+i erru = amax1(erru, abs(ws(temp2-1)-ws(temp1-1))) 1 continue call leave eerr = erru return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p real cos, sin, r, alog, atan, sqrt real theta c the exact solution. do 7 p = 1, nu do 6 i = 1, nx do 5 j = 1, ny r = sqrt(x(i)**2+y(j)**2) if (x(i) .le. 0.) goto 1 theta = atan(y(j)/x(i)) goto 2 1 theta = 2.*atan(1e0) 2 if (r .le. 0.) goto 3 u(i, j, p) = r*(cos(theta)*alog(r)-theta*sin(theta)) goto 4 3 u(i, j, p) = 0 4 continue 5 continue 6 continue 7 continue return end PyBDSF-1.10.1/src/port3/ttgux1.f000066400000000000000000000156661420247104600161000ustar00rootroot00000000000000C$TEST TTGU1 c main program c to solve the heat equation with solution u == t*x*y, c grad . ( u + ux + .1 * uy, u + uy + .1 * ux ) = ut + ux + uy +g(x,t) common /cstak/ ds real ds(350000) integer ixb(4), iyb(4), nxr(4), nyr(4), kxr(4), kyr(4) external handlu, bc, af integer ndx, ndy, istkgt, is(1000), iu, nu, kx, ky, IUMB real errpar(2), rs(1000) logical ls(1000) complex cs(500) real tstart, dt, tstop, ws(500) c the port library stack and its aliases. equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c initialize the port library stack length. call istkin(350000, 3) call enter(1) nu = 1 kx = 2 ky = 2 ndx = 3 ndy = 3 nr=4 tstart = 0.e0 tstop = 1.e0 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. c c make grid for t-shaped region c ixb(1) = IUMB(-1.0e0, 0.0e0, ndx, kx, nxr(1)) ixb(2) = IUMB(0.0e0, 1.0e0, ndx, kx, nxr(2)) ixb(3) = IUMB(1.0e0, 2.0e0, ndx, kx, nxr(3)) ixb(4) = IUMB(0.0e0, 1.0e0, ndx, kx, nxr(4)) iyb(1) = IUMB(0.0e0, 1.0e0, ndy, ky, nyr(1)) iyb(2) = IUMB(0.0e0, 1.0e0, ndy, ky, nyr(2)) iyb(3) = IUMB(0.0e0, 1.0e0, ndy, ky, nyr(3)) iyb(4) = IUMB(-1.0e0, 0.0e0, ndy, ky, nyr(4)) nnu =nu*((nxr(1)-kx)*(nyr(1)+nyr(3)-2*ky)+ 1 (nxr(2)-kx)*(nyr(2)-ky)+ 4 (nxr(4)-kx)*(nyr(4)-ky)) nr=4 c space for the solution. iu = istkgt(nnu, 3) do 1 i=1,nr kxr(i)=kx kyr(i)=ky 1 continue c initial conditions for u. call SETR(nnu, 0.e0,ws(iu)) call ttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i)+.1*uy(p, q, i)+u(p, q, i) a(p, q, i, 2) = uy(p, q, i)+.1*ux(p, q, i)+u(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 auy(p, q, i, i, 1) = .1 aux(p, q, i, i, 2) = .1 au(p, q, i, i, 1) = 1 au(p, q, i, i, 2) = 1 f(p, q, i) = ut(p, q, i)+ux(p, q, i)+uy(p, q, i) fut(p, q, i, i) = 1 fux(p, q, i, i) = 1 fuy(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)+.2*t-x(p)*y(q) 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-t*x(i)*y(j) 1 continue 2 continue return end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /a7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine ewe2(t, x, nx, y, ny, u, inu, ir) integer inu, ir, nx, ny real t, x(nx), y(ny), u(nx, ny) integer i, j c the exact solution. do 2 i = 1, nx do 1 j = 1, ny u(i, j) = t*x(i)*y(j) 1 continue 2 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) integer kx, ix, nx, ky, iy, ny, inu, ir real u(1), t common /cstak/ ds real ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ILUMD integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) real ABS, erru, AMAX1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c for variable inu for rectangle ir c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = ILUMD(ws(ix), nx, 2*kx, nxs) c y search grid. iys = ILUMD(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 3) c the exact solution. call ewe2(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), inu, ir) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = AMAX1(erru, ABS(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) ir, inu, erru 2 format(9h for rect,i3,14h error in u(.,, i2, 1 3h) =, 1pe10.2) call leave return end PyBDSF-1.10.1/src/port3/ttgux1p.f000066400000000000000000000151101420247104600162400ustar00rootroot00000000000000C$TEST TTGU1P c main program c to solve the heat equation with solution u == t*x*y, c grad . ( u + ux + .1 * uy, u + uy + .1 * ux ) = ut + ux + uy +g(x,t) common /cstak/ ds real ds(350000) integer ixb(4), iyb(4), nxr(4), nyr(4), kxr(4), kyr(4) external handlu, bc, af integer ndx, ndy, istkgt, is(1000), iu, nu, kx, ky, IUMB real errpar(2), rs(1000) logical ls(1000) complex cs(500) real tstart, dt, tstop, ws(500) c the port library stack and its aliases. equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c initialize the port library stack length. call istkin(350000, 3) call enter(1) nu = 1 kx = 2 ky = 2 ndx = 3 ndy = 3 nr=4 tstart = 0.e0 tstop = 1.e0 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. c c make grid for t-shaped region c ixb(1) = IUMB(-1.0e0, 0.0e0, ndx, kx, nxr(1)) ixb(2) = IUMB(0.0e0, 1.0e0, ndx, kx, nxr(2)) ixb(3) = IUMB(1.0e0, 2.0e0, ndx, kx, nxr(3)) ixb(4) = IUMB(0.0e0, 1.0e0, ndx, kx, nxr(4)) iyb(1) = IUMB(0.0e0, 1.0e0, ndy, ky, nyr(1)) iyb(2) = IUMB(0.0e0, 1.0e0, ndy, ky, nyr(2)) iyb(3) = IUMB(0.0e0, 1.0e0, ndy, ky, nyr(3)) iyb(4) = IUMB(-1.0e0, 0.0e0, ndy, ky, nyr(4)) nnu =nu*((nxr(1)-kx)*(nyr(1)+nyr(3)-2*ky)+ 1 (nxr(2)-kx)*(nyr(2)-ky)+ 4 (nxr(4)-kx)*(nyr(4)-ky)) nr=4 c space for the solution. iu = istkgt(nnu, 3) do 1 i=1,nr kxr(i)=kx kyr(i)=ky 1 continue c initial conditions for u. call SETR(nnu, 0.e0,ws(iu)) call ttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i)+.1*uy(p, q, i)+u(p, q, i) a(p, q, i, 2) = uy(p, q, i)+.1*ux(p, q, i)+u(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 auy(p, q, i, i, 1) = .1 aux(p, q, i, i, 2) = .1 au(p, q, i, i, 1) = 1 au(p, q, i, i, 2) = 1 f(p, q, i) = ut(p, q, i)+ux(p, q, i)+uy(p, q, i) fut(p, q, i, i) = 1 fux(p, q, i, i) = 1 fuy(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)+.2*t-x(p)*y(q) 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)-t*x(i)*y(j) 1 continue 2 continue return end subroutine ewe(t, x, nx, y, ny, u, nu) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu) integer i, j, p c the exact solution. do 3 p = 1, nu do 2 i = 1, nx do 1 j = 1, ny u(i, j, p) = t*x(i)*y(j) 1 continue 2 continue 3 continue return end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /a7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) c to print the solution at each time-step integer kx, ix, nx, ky, iy, ny integer inu, ir real u(1), t common /cstak/ ds real ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ILUMD integer ixs, iys, nxs, nys, istkgt, i integer ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) real ws(500) integer temp equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c x search grid. c find the solution at 2 * 2 points / mesh rectangle. ixs = ILUMD(ws(ix), nx, 2, nxs) c y search grid. iys = ILUMD(ws(iy), ny, 2, nys) c u search grid values. ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 ma(2) = 0 c get solution. c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) temp = i1mach(2) write(temp,9001)ir,inu,(ws(i),i=iFA,IFa+nxs*nys-1) 9001 format(" for rect",i3," u(.,",i2,")=", 1((1p5e10.2/20x,1p4d10.2))) call leave return end PyBDSF-1.10.1/src/port3/ttgux2.f000066400000000000000000000162701420247104600160710ustar00rootroot00000000000000C$TEST TTGU2 c main program common /cstak/ ds real ds(350000) external handlu, bc, af integer ndx, ndy, istkgt, is(1000), iu integer nu, nr, iyb(3), ixb(3), kx, ky integer nxr(3), nyr(3), kxr(3), kyr(3) integer IUMB real errpar(2), rs(1000) logical ls(1000) complex cs(500) real tstart, dt real ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve two coupled, nonlinear heat equations. c u1 sub t = div . ( u1x, u1y ) - u1*u2 + g1 c u2 sub t = div . ( u2x, u2y ) - u1*u2 + g2 c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 3) call enter(1) nu = 2 kx = 4 ky = 4 ndx = 3 ndy = 3 nr = 3 tstart = 0 dt = 1e-2 tstop =1.e0 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ixb(1) = IUMB(0.0e0, 1.0e0, ndx, kx, nxr(1)) ixb(2) = IUMB(0.0e0, 1.0e0, ndx, kx, nxr(2)) ixb(3) = IUMB(1.0e0, 2.0e0, ndx, kx, nxr(3)) iyb(1) = IUMB(0.0e0, 1.0e0, ndy, ky, nyr(1)) iyb(2) = IUMB(1.0e0, 2.0e0, ndy, ky, nyr(2)) iyb(3) = IUMB(0.0e0, 1.0e0, ndy, ky, nyr(3)) c uniform grid. c space for the solution. nnu=0 do 1 i=1,nr nnu=nnu+nu*((nxr(i)-kx)*(nyr(i)-ky)) 1 continue iu = istkgt(nnu, 3) do 2 i=1,nr kxr(i)=kx kyr(i)=ky 2 continue call SETR(nnu, 1.e0,ws(iu)) call ttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer p, q real EXP do 2 q = 1, ny do 1 p = 1, nx a(p, q, 1, 1) = ux(p, q, 1) aux(p, q, 1, 1, 1) = 1 a(p, q, 1, 2) = uy(p, q, 1) auy(p, q, 1, 1, 2) = 1 f(p, q, 1) = ut(p, q, 1)+u(p, q, 1)*u(p, q, 2) fu(p, q, 1, 1) = u(p, q, 2) fu(p, q, 1, 2) = u(p, q, 1) fut(p, q, 1, 1) = 1 a(p, q, 2, 1) = ux(p, q, 2) aux(p, q, 2, 2, 1) = 1 a(p, q, 2, 2) = uy(p, q, 2) auy(p, q, 2, 2, 2) = 1 f(p, q, 2) = ut(p, q, 2)+u(p, q, 1)*u(p, q, 2) fu(p, q, 2, 1) = u(p, q, 2) fu(p, q, 2, 2) = u(p, q, 1) fut(p, q, 2, 2) = 1 f(p, q, 1) = f(p, q, 1)-( EXP(t*(x(p)-y(q)))*(x(p)-y(q)-2e0* 1 t*t)+1e0) f(p, q, 2) = f(p, q, 2)-( EXP(t*(y(q)-x(p)))*(y(q)-x(p)-2e0* 1 t*t)+1e0) 1 continue 2 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j real EXP do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)- EXP(t*(x(i)-y(j))) bu(i, j, 2, 2) = 1 b(i, j, 2) = u(i, j, 2)- EXP(t*(y(j)-x(i))) 1 continue 2 continue return end subroutine ewe2(t, x, nx, y, ny, u, inu, ir) integer inu, ir, nx, ny real t, x(nx), y(ny), u(nx, ny) integer i, j real float real dble, EXP c the exact solution. do 2 i = 1, nx do 1 j = 1, ny u(i, j) = EXP((float((-1)**(inu+1)))*t*(x(i)-y(j))) 1 continue 2 continue return end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /a7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) integer kx, ix, nx, ky, iy, ny, inu, ir real u(1), t common /cstak/ ds real ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ILUMD integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) real ABS, erru, AMAX1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c for variable inu for rectangle ir c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = ILUMD(ws(ix), nx, 2*kx, nxs) c y search grid. iys = ILUMD(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 3) c the exact solution. call ewe2(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), inu, ir) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = AMAX1(erru, ABS(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) ir, inu, erru 2 format(9h for rect,i3,14h error in u(.,, i2, 1 3h) =, 1pe10.2) call leave return end PyBDSF-1.10.1/src/port3/ttgux3.f000066400000000000000000000170651420247104600160750ustar00rootroot00000000000000C$TEST TTGU3 c main program common /cstak/ ds real ds(350000) external handlu, bc, af integer ndx, ndy, istkgt, is(1000), iu integer nu, nr, iyb(3), ixb(3), kx, ky integer nxr(3), nyr(3), kxr(3), kyr(3) integer IUMB real errpar(2), rs(1000) logical ls(1000) complex cs(500) real tstart, dt, ws(500) real tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve the layered heat equation, with kappa = 1, 1/2, 1/3, c div . ( kappa(x,y) * grad u ) = ut + g c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 3) call enter(1) nu = 1 nr = 3 kx = 2 ky = 2 ndx = 3 ndy = 3 tstart = 0 tstop = 1 dt = 1 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ixb(1) = IUMB(0.0e0, 1.0e0, ndx, kx, nxr(1)) ixb(2) = IUMB(0.0e0, 1.0e0, ndx, kx, nxr(2)) ixb(3) = IUMB(0.0e0, 1.0e0, ndx, kx, nxr(3)) iyb(1) = IUMB(0.0e0, 1.0e0, ndy, ky, nyr(1)) iyb(2) = IUMB(1.0e0, 2.0e0, ndy, ky, nyr(2)) iyb(3) = IUMB(2.0e0, 3.0e0, ndy, ky, nyr(3)) c space for the solution. nnu=0 do 1 i=1,nr nnu=nnu+nu*((nxr(i)-kx)*(nyr(i)-ky)) 1 continue iu = istkgt(nnu, 3) do 2 i=1,nr kxr(i)=kx kyr(i)=ky 2 continue call SETR(nnu, 0.e0,ws(iu)) call ttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q real kappa logical temp do 7 i = 1, nu do 6 q = 1, ny do 5 p = 1, nx if (y(q) .ge. 1e0) goto 1 kappa = 1 goto 4 1 if (y(q) .ge. 2e0) goto 2 kappa = 0.5 goto 3 2 kappa = 1e0/3e0 3 continue 4 a(p, q, i, 1) = kappa*ux(p, q, i) aux(p, q, i, i, 1) = kappa a(p, q, i, 2) = kappa*uy(p, q, i) auy(p, q, i, i, 2) = kappa f(p, q, i) = ut(p, q, i) fut(p, q, i, i) = 1 f(p, q, i) = f(p, q, i)-y(q)/kappa temp = 1e0 .lt. y(q) if (temp) temp = y(q) .lt. 2e0 if (temp) f(p, q, i) = f(p, q, i)+1e0 temp = 2e0 .lt. y(q) if (temp) temp = y(q) .lt. 3e0 if (temp) f(p, q, i) = f(p, q, i)+3e0 5 continue 6 continue 7 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j logical temp do 6 j = 1, ny do 5 i = 1, nx temp = x(i) .eq. lx if (.not. temp) temp = x(i) .eq. rx if (.not. temp) goto 1 bux(i, j, 1, 1) = 1 c left or right. c neumann bcs. b(i, j, 1) = ux(i, j, 1) goto 4 1 if (y(j) .ne. ly) goto 2 b(i, j, 1) = u(i, j, 1) c bottom. bu(i, j, 1, 1) = 1 goto 3 2 b(i, j, 1) = u(i, j, 1)-6e0*t c top. bu(i, j, 1, 1) = 1 3 continue 4 continue 5 continue 6 continue return end subroutine ewe2(t, x, nx, y, ny, u, inu, ir) integer inu, ir, nx, ny real t, x(nx), y(ny), u(nx, ny), dble integer i, j c the exact solution. do 6 i = 1, nx do 5 j = 1, ny u(i, j) = (float(ir))*t*y(j)-(float(ir-1))*t if(ir.eq.3) u(i,j)=u(i,j)-t 5 continue 6 continue return end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /a7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) integer kx, ix, nx, ky, iy, ny, inu, ir real u(1), t common /cstak/ ds real ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ILUMD integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) real ABS, erru, AMAX1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c for variable inu for rectangle ir c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = ILUMD(ws(ix), nx, 2*kx, nxs) c y search grid. iys = ILUMD(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 3) c the exact solution. call ewe2(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), inu, ir) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = AMAX1(erru, ABS(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) ir, inu, erru 2 format(9h for rect,i3,14h error in u(.,, i2, 1 3h) =, 1pe10.2) call leave return end PyBDSF-1.10.1/src/port3/ttgux4.f000066400000000000000000000175511420247104600160760ustar00rootroot00000000000000c main program common /cstak/ ds real ds(350000) external handlu, bc, af, ic integer ndx, ndy, istkgt, is(1000), iu integer nu, nr, iyb(3), ixb(3), kx, ky integer nxr(3), nyr(3), kxr(3), kyr(3) integer IUMB real errpar(2), rs(1000) logical ls(1000) complex cs(500) real tstart, dt real ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve two coupled, nonlinear heat equations. c u1 sub t = div . ( u1x, u1y ) - u1*u2 + g1 c u2 sub t = div . ( u2x, u2y ) - u1*u2 + g2 c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 3) call enter(1) nu = 2 kx = 4 ky = 4 ndx = 3 ndy = 3 nr = 3 tstart = 1.0e0 dt = 1e-2 tstop =1.01e0 errpar(1) = 1e-2 errpar(2) = 1e-4 c uniform grid. ixb(1) = IUMB(0.0e0, 1.0e0, ndx, kx, nxr(1)) ixb(2) = IUMB(0.0e0, 1.0e0, ndx, kx, nxr(2)) ixb(3) = IUMB(1.0e0, 2.0e0, ndx, kx, nxr(3)) iyb(1) = IUMB(0.0e0, 1.0e0, ndy, ky, nyr(1)) iyb(2) = IUMB(1.0e0, 2.0e0, ndy, ky, nyr(2)) iyb(3) = IUMB(0.0e0, 1.0e0, ndy, ky, nyr(3)) c uniform grid. c space for the solution. nnu=0 do 1 i=1,nr nnu=nnu+nu*((nxr(i)-kx)*(nyr(i)-ky)) 1 continue iu = istkgt(nnu, 3) do 2 i=1,nr kxr(i)=kx kyr(i)=ky 2 continue call icon(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,ic) iu1=iu iwrite=i1mach(2) write(iwrite,3) 3 format(10h initially) do 5 inu=1,nu do 4 i=1,nr call gerr(kxr(i),ixb(i),nxr(i),kyr(i),iyb(i),nyr(i), 1 ws(iu1),inu,1.0e0,i) iu1=iu1+(nxr(i)-kxr(i))*(nyr(i)-kyr(i)) 4 continue 5 continue call ttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine af(t, x, nx, y, ny, nu, u, ut, ux, uy, uxt, uyt 1 , a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, fuxt, 2 fuyt) integer nu, nx, ny real t, x(nx), y(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer p, q real EXP do 2 q = 1, ny do 1 p = 1, nx a(p, q, 1, 1) = ux(p, q, 1) aux(p, q, 1, 1, 1) = 1 a(p, q, 1, 2) = uy(p, q, 1) auy(p, q, 1, 1, 2) = 1 f(p, q, 1) = ut(p, q, 1)+u(p, q, 1)*u(p, q, 2) fu(p, q, 1, 1) = u(p, q, 2) fu(p, q, 1, 2) = u(p, q, 1) fut(p, q, 1, 1) = 1 a(p, q, 2, 1) = ux(p, q, 2) aux(p, q, 2, 2, 1) = 1 a(p, q, 2, 2) = uy(p, q, 2) auy(p, q, 2, 2, 2) = 1 f(p, q, 2) = ut(p, q, 2)+u(p, q, 1)*u(p, q, 2) fu(p, q, 2, 1) = u(p, q, 2) fu(p, q, 2, 2) = u(p, q, 1) fut(p, q, 2, 2) = 1 f(p, q, 1) = f(p, q, 1)-( EXP(t*(x(p)-y(q)))*(x(p)-y(q)-2e0* 1 t*t)+1e0) f(p, q, 2) = f(p, q, 2)-( EXP(t*(y(q)-x(p)))*(y(q)-x(p)-2e0* 1 t*t)+1e0) 1 continue 2 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j real EXP do 2 j = 1, ny do 1 i = 1, nx bu(i, j, 1, 1) = 1 b(i, j, 1) = u(i, j, 1)- EXP(t*(x(i)-y(j))) bu(i, j, 2, 2) = 1 b(i, j, 2) = u(i, j, 2)- EXP(t*(y(j)-x(i))) 1 continue 2 continue return end subroutine ic(nu,ir,xq,nxq,yq,nyq,ui) integer nu, ir, nxq, nyq real xq(nxq), yq(nyq), ui(nxq, nyq,nu) real dble, EXP integer p do 30 p=1,nu do 20 j=1,nyq do 10 i=1, nxq ui(i, j, p) = EXP((float((-1)**(p+1)))*(xq(i)-yq(j))) 10 continue 20 continue 30 continue return end subroutine ewe2(t, x, nx, y, ny, u, inu, ir) integer inu, nx, ny, ir real t, x(nx), y(ny), u(nx, ny) integer i, j real float real dble, EXP c the exact solution. do 2 i = 1, nx do 1 j = 1, ny u(i, j) = EXP((float((-1)**(inu+1)))*t*(x(i)-y(j))) 1 continue 2 continue return end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /a7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) integer kx, ix, nx, ky, iy, ny, inu, ir real u(1), t common /cstak/ ds real ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ILUMD integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) real ABS, erru, AMAX1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c for variable inu for rectangle ir c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = ILUMD(ws(ix), nx, 2*kx, nxs) c y search grid. iys = ILUMD(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 3) c the exact solution. call ewe2(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), inu, ir) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = AMAX1(erru, ABS(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) ir, inu, erru 2 format(9h for rect,i3,14h error in u(.,, i2, 1 3h) =, 1pe10.2) call leave return end PyBDSF-1.10.1/src/port3/ttgux5.f000066400000000000000000000203141420247104600160660ustar00rootroot00000000000000C$TEST TTGU5 c main program common /cstak/ ds real ds(350000) external handlu, bc, af integer ndx, ndy, istkgt, is(1000), iu, ix, temp, temp1 integer nu, nr, iyb(5), ixb(5), kx, ky integer nxr(5), nyr(5), kxr(5), kyr(5) integer IUMB real errpar(2), rs(1000) logical ls(1000) complex cs(500) real tstart, dt, rx real ws(500), tstop equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to solve laplaces equation with real ( z*log(z) ) as solution. c the port library stack and its aliases. c initialize the port library stack length. call istkin(350000, 3) call enter(1) nu = 1 kx = 4 ky = 4 ndx = 3 ndy = 3 nr = 5 tstart = 0 dt = 1.e0 tstop =1.e0 errpar(1) = 1e-2 errpar(2) = 1e-4 nx = ndx+2*(kx-1) rx=1.0e0 c space for x mesh for rectangle 1 ix = istkgt(nx, 3) c 0 and rx mult = kx. ixb(1)=ix do 1 i = 1, kx temp = ix+i ws(temp-1) = 0 temp = ix+nx-i ws(temp) = rx 1 continue temp = ndx-1 do 2 i = 1, temp temp1 = ix+kx-2+i ws(temp1) = rx*((float(i-1))/((float(ndx))-1e0))**kx 2 continue c rectangle 2 has same grid in x direction as rectanlge 1 ixb(2)=istkgt(nx, 3) call SCOPY(nx, ws(ix), 1, ws(ixb(2)), 1) c uniform grid for rectanlges 3,4, and 5 in x direction ixb(3) = IUMB(1.0e0, 2.0e0, ndx, kx, nxr(3)) ixb(4) = IUMB(2.0e0, 3.0e0, ndx, kx, nxr(4)) ixb(5) = IUMB(2.0e0, 3.0e0, ndx, kx, nxr(5)) ny = ndy+2*(ky-1) c rectangles 1,3, and 4 use the same grid in the y direction as c is used for the x direction in rectangle 1 c space for y mesh. iyb(1) = istkgt(ny, 3) call SCOPY( nx, ws(ix), 1, ws(iyb(1)), 1) iyb(3) =istkgt(ny, 3) call SCOPY( nx, ws(ix), 1, ws(iyb(3)), 1) iyb(4) =istkgt(ny, 3) call SCOPY( nx, ws(ix), 1, ws(iyb(4)), 1) c rectangles 2 and 5 use uniform mesh in y direction iyb(2) = IUMB(1.0e0, 2.0e0, ndy, ky, nyr(2)) iyb(5) = IUMB(1.0e0, 2.0e0, ndy, ky, nyr(5)) c space for the solution. nnu=0 do 3 i=1,nr nxr(i)=nx nyr(i)=ny nnu=nnu+nu*((nxr(i)-kx)*(nyr(i)-ky)) 3 continue iu = istkgt(nnu, 3) do 4 i=1,nr kxr(i)=kx kyr(i)=ky 4 continue call SETR(nnu, 0.0e0,ws(iu)) call ttgu(ws(iu),nu,nr,kxr,ws,nxr,ixb,kyr,ws,nyr,iyb,tstart, 1 tstop, dt, af, bc, errpar, handlu) call leave call wrapup stop end subroutine af(t, xi, nx, yi, ny, nu, u, ut, ux, uy, uxt, 1 uyt, a, au, aut, aux, auy, auxt, auyt, f, fu, fut, fux, fuy, 2 fuxt, fuyt) integer nu, nx, ny real t, xi(nx), yi(ny), u(nx, ny, nu), ut(nx, ny, nu), 1 ux(nx, ny, nu) real uy(nx, ny, nu), uxt(nx, ny, nu), uyt(nx, ny, nu), 1 a(nx, ny, nu, 2), au(nx, ny, nu, nu, 2), aut(nx, ny, nu, nu, 2) real aux(nx, ny, nu, nu, 2), auy(nx, ny, nu, nu, 2), 1 auxt(nx, ny, nu, nu, 2), auyt(nx, ny, nu, nu, 2), f(nx, ny, nu) 2 , fu(nx, ny, nu, nu) real fut(nx, ny, nu, nu), fux(nx, ny, nu, nu), fuy(nx, 1 ny, nu, nu), fuxt(nx, ny, nu, nu), fuyt(nx, ny, nu, nu) integer i, p, q do 3 i = 1, nu do 2 q = 1, ny do 1 p = 1, nx a(p, q, i, 1) = ux(p, q, i) a(p, q, i, 2) = uy(p, q, i) aux(p, q, i, i, 1) = 1 auy(p, q, i, i, 2) = 1 1 continue 2 continue 3 continue return end subroutine bc(t, x, nx, y, ny, lx, rx, ly, ry, u, ut, ux, 1 uy, uxt, uyt, nu, b, bu, but, bux, buy, buxt, buyt) integer nu, nx, ny real t, x(nx), y(ny), lx, rx, ly real ry, u(nx, ny, nu), ut(nx, ny, nu), ux(nx, ny, nu) 1 , uy(nx, ny, nu), uxt(nx, ny, nu) real uyt(nx, ny, nu), b(nx, ny, nu), bu(nx, ny, nu, 1 nu), but(nx, ny, nu, nu), bux(nx, ny, nu, nu), buy(nx, ny, nu 2 , nu) real buxt(nx, ny, nu, nu), buyt(nx, ny, nu, nu) integer i, j real r, COS, ALOG, SIN, ATAN, theta real SQRT do 6 j = 1, ny do 5 i = 1, nx if (y(j) .ne. ly) goto 1 b(i, j, 1) = uy(i, j, 1) c neumann data on bottom. buy(i, j, 1, 1) = 1 goto 4 1 r = SQRT(x(i)**2+y(j)**2) c dirichlet data. if (x(i) .le. 0e0) goto 2 theta = ATAN(y(j)/x(i)) goto 3 2 theta = 2e0* ATAN(1e0) 3 b(i, j, 1) = u(i, j, 1)-r*( COS(theta)*ALOG(r)-theta* 1 SIN(theta)) bu(i, j, 1, 1) = 1 4 continue 5 continue 6 continue return end subroutine ewe2(t, x, nx, y, ny, u, inu, ir) integer inu,ir, nx, ny real t, x(nx), y(ny), u(nx, ny) integer i, j real r, COS, ALOG, SIN, ATAN, theta real SQRT c the exact solution. do 6 i = 1, nx do 5 j = 1, ny r = SQRT(x(i)**2+y(j)**2) if (x(i) .le. 0e0) goto 1 theta = ATAN(y(j)/x(i)) goto 2 1 theta = 2e0* ATAN(1e0) 2 if (r .le. 0e0) goto 3 u(i, j) = r*( COS(theta)*ALOG(r)-theta* SIN(theta)) goto 4 3 u(i, j) = 0 4 continue 5 continue 6 continue return end subroutine handlu(t0, u0, t, u, nv, dt, tstop) integer nv real t0, u0(nv), t, u(nv), dt, tstop common /a7tgup/ errpar, nu, mxp, myp integer nu real errpar(2) common /a7tgum/ kxp,ix,nxp,kyp,iy,nyp,nxnyt,nr,iup integer kx, ix, nx, ky, iy, ny common /cstak/is integer is(1000) iwrite=i1mach(2) if (t0 .ne. t) goto 2 write (iwrite, 1) t 1 format (16h restart for t =, 1pe10.2) return c get and print the error. 2 continue write(iwrite, 3)t 3 format(6h at t=,1pe10.2) ius=1 do 5 inu = 1, nu iyr=iy ixr=ix do 4 ir=1,nr ir1=ir-1 nx=is(nxp+ir1) ny=is(nyp+ir1) kx=is(kxp+ir1) ky=is(kyp+ir1) call gerr(kx, ixr, nx, ky, iyr, ny, u(ius), inu, t, ir) ixr=ixr+nx iyr=iyr+ny ius=ius+(nx-kx)*(ny-ky) 4 continue 5 continue return end subroutine gerr(kx, ix, nx, ky, iy, ny, u, inu, t, ir) integer kx, ix, nx, ky, iy, ny, inu, ir real u(1), t common /cstak/ ds real ds(500) integer ifa, ita(2), ixa(2), nta(2), nxa(2), ILUMD integer ixs, iys, nxs, nys, istkgt, i integer iewe, ka(2), ma(2), is(1000), i1mach real rs(1000) logical ls(1000) complex cs(500) real ABS, erru, AMAX1, ws(500) integer temp, temp1, temp2 equivalence (ds(1), cs(1), ws(1), rs(1), is(1), ls(1)) c to get and print the error at each time-step. c for variable inu for rectangle ir c u(nx-kx,ny-ky). c the port library stack and its aliases. call enter(1) c find the error in the solution at 2*kx * 2*ky points / mesh rectangle. c x search grid. ixs = ILUMD(ws(ix), nx, 2*kx, nxs) c y search grid. iys = ILUMD(ws(iy), ny, 2*ky, nys) c u search grid values. iewe = istkgt(nxs*nys, 3) c the exact solution. call ewe2(t, ws(ixs), nxs, ws(iys), nys, ws(iewe), inu, ir) ka(1) = kx ka(2) = ky ita(1) = ix ita(2) = iy nta(1) = nx nta(2) = ny ixa(1) = ixs ixa(2) = iys nxa(1) = nxs nxa(2) = nys ma(1) = 0 c get solution. ma(2) = 0 c approximate solution values. ifa = istkgt(nxs*nys, 3) c evaluate them. call tsd1(2, ka, ws, ita, nta, u, ws, ixa, nxa, ma, ws(ifa)) c error in solution values. erru = 0 temp = nxs*nys do 1 i = 1, temp temp2 = iewe+i temp1 = ifa+i erru = AMAX1(erru, ABS(ws(temp2-1)-ws(temp1-1))) 1 continue temp = i1mach(2) write (temp, 2) ir, inu, erru 2 format(9h for rect,i3,14h error in u(.,, i2, 1 3h) =, 1pe10.2) call leave return end PyBDSF-1.10.1/src/port3/u9dmp.f000066400000000000000000000044251420247104600156710ustar00rootroot00000000000000 SUBROUTINE U9DMP(LNG, NCOL, WI, WR, DR, WD, DD) C C THIS SUBROUTINE ASSUMES THAT THE TYPE (INTEGER, ETC.) OF THE DATA C IN THE PORT STACK IS NOT KNOWN - SO IT PRINTS OUT, IN ALL FORMATS C THE STACK CONTENTS, USING THE ARRAY OUTPUT ROUTINES APRNTX. C C WRITTEN BY DAN WARNER, REVISED BY PHYL FOX, NOVEMBER 8, 1982. C C INPUT PARAMETERS - C C LNG - AN INTEGER VECTOR ARRAY CONTAINING IN C LNG(1) THE LENGTH OF THE ARRAY IF LOGICAL C LNG(2) THE LENGTH OF THE ARRAY IF INTEGER C LNG(3) THE LENGTH OF THE ARRAY IF REAL C LNG(4) THE LENGTH OF THE ARRAY IF DOUBLE PRECISION C LNG(5) THE LENGTH OF THE ARRAY IF COMPLEX C C NCOL - THE NUMBER OF SPACES ACROSS A PRINTED LINE C C WI - THE FORMAT WIDTH FOR AN INTEGER C C WR - THE FORMAT WIDTH FOR A REAL (W IN 1PEW.D) C C DR - THE NUMBER OF DIGITS AFTER THE DECIMAL POINT C (THE D IN THE 1PEW.D FORMULA) C C WD - THE FORMAT WIDTH FOR A REAL (W IN 1PDW.D) C C DD - THE NUMBER OF DIGITS AFTER THE DECIMAL POINT C (THE D IN THE 1PDW.D FORMULA) C C C ERROR STATES - NONE. U9DMP IS CALLED BY SETERR, C SO IT CANNOT CALL SETERR. C C INTEGER LNG(5), NCOL, WI, WR, DR, WD INTEGER DD COMMON /CSTAK/ DSTAK DOUBLE PRECISION DSTAK(500) INTEGER ERROUT, ISTAK(1000), I1MACH REAL RSTAK(1000) LOGICAL LSTAK(1000) C/R C REAL CMSTAK(2,500) C EQUIVALENCE (DSTAK(1), CMSTAK(1,1)) C/C COMPLEX CMSTAK(500) EQUIVALENCE (DSTAK(1), CMSTAK(1)) C/ EQUIVALENCE (DSTAK(1), ISTAK(1)) EQUIVALENCE (DSTAK(1), LSTAK(1)) EQUIVALENCE (DSTAK(1), RSTAK(1)) C ERROUT = I1MACH(4) C WRITE (ERROUT, 1) 1 FORMAT (14H0LOGICAL STACK) CALL A9RNTL(LSTAK, LNG(1), ERROUT, NCOL) WRITE (ERROUT, 2) 2 FORMAT (14H0INTEGER STACK) CALL A9RNTI(ISTAK, LNG(2), ERROUT, NCOL, WI) WRITE (ERROUT, 3) 3 FORMAT (11H0REAL STACK) CALL A9RNTR(RSTAK, LNG(3), ERROUT, NCOL, WR, DR) WRITE (ERROUT, 4) 4 FORMAT (23H0DOUBLE PRECISION STACK) CALL A9RNTD(DSTAK, LNG(4), ERROUT, NCOL, WD, DD) WRITE (ERROUT, 5) 5 FORMAT (14H0COMPLEX STACK) CALL A9RNTC(CMSTAK, LNG(5), ERROUT, NCOL, WR, DR) C RETURN END PyBDSF-1.10.1/src/port3/v2axy.f000066400000000000000000000003711420247104600157000ustar00rootroot00000000000000 SUBROUTINE V2AXY(P, W, A, X, Y) C C *** SET W = A*X + Y -- W, X, Y = P-VECTORS, A = SCALAR *** C INTEGER P REAL A, W(P), X(P), Y(P) C INTEGER I C DO 10 I = 1, P 10 W(I) = A*X(I) + Y(I) RETURN END PyBDSF-1.10.1/src/port3/v2nrm.f000066400000000000000000000026411420247104600156750ustar00rootroot00000000000000 REAL FUNCTION V2NRM(P, X) C C *** RETURN THE 2-NORM OF THE P-VECTOR X, TAKING *** C *** CARE TO AVOID THE MOST LIKELY UNDERFLOWS. *** C INTEGER P REAL X(P) C INTEGER I, J REAL ONE, R, SCALE, SQTETA, T, XI, ZERO C/+ REAL SQRT C/ REAL R7MDC EXTERNAL R7MDC C C/6 C DATA ONE/1.E+0/, ZERO/0.E+0/ C/7 PARAMETER (ONE=1.E+0, ZERO=0.E+0) SAVE SQTETA C/ DATA SQTETA/0.E+0/ C IF (P .GT. 0) GO TO 10 V2NRM = ZERO GO TO 999 10 DO 20 I = 1, P IF (X(I) .NE. ZERO) GO TO 30 20 CONTINUE V2NRM = ZERO GO TO 999 C 30 SCALE = ABS(X(I)) IF (I .LT. P) GO TO 40 V2NRM = SCALE GO TO 999 40 T = ONE IF (SQTETA .EQ. ZERO) SQTETA = R7MDC(2) C C *** SQTETA IS (SLIGHTLY LARGER THAN) THE SQUARE ROOT OF THE C *** SMALLEST POSITIVE FLOATING POINT NUMBER ON THE MACHINE. C *** THE TESTS INVOLVING SQTETA ARE DONE TO PREVENT UNDERFLOWS. C J = I + 1 DO 60 I = J, P XI = ABS(X(I)) IF (XI .GT. SCALE) GO TO 50 R = XI / SCALE IF (R .GT. SQTETA) T = T + R*R GO TO 60 50 R = SCALE / XI IF (R .LE. SQTETA) R = ZERO T = ONE + T * R*R SCALE = XI 60 CONTINUE C V2NRM = SCALE * SQRT(T) 999 RETURN C *** LAST LINE OF V2NRM FOLLOWS *** END PyBDSF-1.10.1/src/port3/v7cpy.f000066400000000000000000000003231420247104600156740ustar00rootroot00000000000000 SUBROUTINE V7CPY(P, Y, X) C C *** SET Y = X, WHERE X AND Y ARE P-VECTORS *** C INTEGER P REAL X(P), Y(P) C INTEGER I C DO 10 I = 1, P 10 Y(I) = X(I) RETURN END PyBDSF-1.10.1/src/port3/v7dfl.f000066400000000000000000000061241420247104600156530ustar00rootroot00000000000000 SUBROUTINE V7DFL(ALG, LV, V) C C *** SUPPLY ***SOL (VERSION 2.3) DEFAULT VALUES TO V *** C C *** ALG = 1 MEANS REGRESSION CONSTANTS. C *** ALG = 2 MEANS GENERAL UNCONSTRAINED OPTIMIZATION CONSTANTS. C INTEGER ALG, LV REAL V(LV) C REAL R7MDC EXTERNAL R7MDC C R7MDC... RETURNS MACHINE-DEPENDENT CONSTANTS C REAL MACHEP, MEPCRT, ONE, SQTEPS, THREE C C *** SUBSCRIPTS FOR V *** C INTEGER AFCTOL, BIAS, COSMIN, DECFAC, DELTA0, DFAC, DINIT, DLTFDC, 1 DLTFDJ, DTINIT, D0INIT, EPSLON, ETA0, FUZZ, HUBERC, 2 INCFAC, LMAX0, LMAXS, PHMNFC, PHMXFC, RDFCMN, RDFCMX, 3 RFCTOL, RLIMIT, RSPTOL, SCTOL, SIGMIN, TUNER1, TUNER2, 4 TUNER3, TUNER4, TUNER5, XCTOL, XFTOL C C/6 C DATA ONE/1.E+0/, THREE/3.E+0/ C/7 PARAMETER (ONE=1.E+0, THREE=3.E+0) C/ C C *** V SUBSCRIPT VALUES *** C C/6 C DATA AFCTOL/31/, BIAS/43/, COSMIN/47/, DECFAC/22/, DELTA0/44/, C 1 DFAC/41/, DINIT/38/, DLTFDC/42/, DLTFDJ/43/, DTINIT/39/, C 2 D0INIT/40/, EPSLON/19/, ETA0/42/, FUZZ/45/, HUBERC/48/, C 3 INCFAC/23/, LMAX0/35/, LMAXS/36/, PHMNFC/20/, PHMXFC/21/, C 4 RDFCMN/24/, RDFCMX/25/, RFCTOL/32/, RLIMIT/46/, RSPTOL/49/, C 5 SCTOL/37/, SIGMIN/50/, TUNER1/26/, TUNER2/27/, TUNER3/28/, C 6 TUNER4/29/, TUNER5/30/, XCTOL/33/, XFTOL/34/ C/7 PARAMETER (AFCTOL=31, BIAS=43, COSMIN=47, DECFAC=22, DELTA0=44, 1 DFAC=41, DINIT=38, DLTFDC=42, DLTFDJ=43, DTINIT=39, 2 D0INIT=40, EPSLON=19, ETA0=42, FUZZ=45, HUBERC=48, 3 INCFAC=23, LMAX0=35, LMAXS=36, PHMNFC=20, PHMXFC=21, 4 RDFCMN=24, RDFCMX=25, RFCTOL=32, RLIMIT=46, RSPTOL=49, 5 SCTOL=37, SIGMIN=50, TUNER1=26, TUNER2=27, TUNER3=28, 6 TUNER4=29, TUNER5=30, XCTOL=33, XFTOL=34) C/ C C------------------------------- BODY -------------------------------- C MACHEP = R7MDC(3) V(AFCTOL) = 1.E-20 IF (MACHEP .GT. 1.E-10) V(AFCTOL) = MACHEP**2 V(DECFAC) = 0.5E+0 SQTEPS = R7MDC(4) V(DFAC) = 0.6E+0 V(DTINIT) = 1.E-6 MEPCRT = MACHEP ** (ONE/THREE) V(D0INIT) = 1.E+0 V(EPSLON) = 0.1E+0 V(INCFAC) = 2.E+0 V(LMAX0) = 1.E+0 V(LMAXS) = 1.E+0 V(PHMNFC) = -0.1E+0 V(PHMXFC) = 0.1E+0 V(RDFCMN) = 0.1E+0 V(RDFCMX) = 4.E+0 V(RFCTOL) = AMAX1(1.E-10, MEPCRT**2) V(SCTOL) = V(RFCTOL) V(TUNER1) = 0.1E+0 V(TUNER2) = 1.E-4 V(TUNER3) = 0.75E+0 V(TUNER4) = 0.5E+0 V(TUNER5) = 0.75E+0 V(XCTOL) = SQTEPS V(XFTOL) = 1.E+2 * MACHEP C IF (ALG .GE. 2) GO TO 10 C C *** REGRESSION VALUES C V(COSMIN) = AMAX1(1.E-6, 1.E+2 * MACHEP) V(DINIT) = 0.E+0 V(DELTA0) = SQTEPS V(DLTFDC) = MEPCRT V(DLTFDJ) = SQTEPS V(FUZZ) = 1.5E+0 V(HUBERC) = 0.7E+0 V(RLIMIT) = R7MDC(5) V(RSPTOL) = 1.E-3 V(SIGMIN) = 1.E-4 GO TO 999 C C *** GENERAL OPTIMIZATION VALUES C 10 V(BIAS) = 0.8E+0 V(DINIT) = -1.0E+0 V(ETA0) = 1.0E+3 * MACHEP C 999 RETURN C *** LAST CARD OF V7DFL FOLLOWS *** END PyBDSF-1.10.1/src/port3/v7ipr.f000066400000000000000000000011321420247104600156720ustar00rootroot00000000000000 SUBROUTINE V7IPR(N, IP, X) C C PERMUTE X SO THAT X.OUTPUT(I) = X.INPUT(IP(I)). C IP IS UNCHANGED ON OUTPUT. C INTEGER N INTEGER IP(N) REAL X(N) C INTEGER I, J, K REAL T DO 30 I = 1, N J = IP(I) IF (J .EQ. I) GO TO 30 IF (J .GT. 0) GO TO 10 IP(I) = -J GO TO 30 10 T = X(I) K = I 20 X(K) = X(J) K = J J = IP(K) IP(K) = -J IF (J .GT. I) GO TO 20 X(K) = T 30 CONTINUE 999 RETURN C *** LAST LINE OF V7IPR FOLLOWS *** END PyBDSF-1.10.1/src/port3/v7prm.f000066400000000000000000000011521420247104600157000ustar00rootroot00000000000000 SUBROUTINE V7PRM(N, IP, X) C C PERMUTE X SO THAT X.OUTPUT(IP(I)) = X.INPUT(I). C IP IS UNCHANGED ON OUTPUT. C INTEGER N INTEGER IP(N) REAL X(N) C INTEGER I, J, K REAL S, T DO 30 I = 1, N J = IP(I) IF (J .EQ. I) GO TO 30 IF (J .GT. 0) GO TO 10 IP(I) = -J GO TO 30 10 T = X(I) 20 S = X(J) X(J) = T T = S K = J J = IP(K) IP(K) = -J IF (J .GT. I) GO TO 20 X(J) = T 30 CONTINUE 999 RETURN C *** LAST LINE OF V7PRM FOLLOWS *** END PyBDSF-1.10.1/src/port3/v7scl.f000066400000000000000000000004001420247104600156560ustar00rootroot00000000000000 SUBROUTINE V7SCL(N, X, A, Y) C C *** SET X(I) = A*Y(I), I = 1(1)N *** C INTEGER N REAL A, X(N), Y(N) C INTEGER I C DO 10 I = 1, N 10 X(I) = A * Y(I) 999 RETURN C *** LAST LINE OF V7SCL FOLLOWS *** END PyBDSF-1.10.1/src/port3/v7scp.f000066400000000000000000000003021420247104600156630ustar00rootroot00000000000000 SUBROUTINE V7SCP(P, Y, S) C C *** SET P-VECTOR Y TO SCALAR S *** C INTEGER P REAL S, Y(P) C INTEGER I C DO 10 I = 1, P 10 Y(I) = S RETURN END PyBDSF-1.10.1/src/port3/v7shf.f000066400000000000000000000004771420247104600156730ustar00rootroot00000000000000 SUBROUTINE V7SHF(N, K, X) C C *** SHIFT X(K),...,X(N) LEFT CIRCULARLY ONE POSITION *** C INTEGER N, K REAL X(N) C INTEGER I, NM1 REAL T C IF (K .GE. N) GO TO 999 NM1 = N - 1 T = X(K) DO 10 I = K, NM1 10 X(I) = X(I+1) X(N) = T 999 RETURN END PyBDSF-1.10.1/src/port3/v7swp.f000066400000000000000000000004661420247104600157220ustar00rootroot00000000000000 SUBROUTINE V7SWP(N, X, Y) C C *** INTERCHANGE N-VECTORS X AND Y. *** C INTEGER N REAL X(N), Y(N) C INTEGER I REAL T C DO 10 I = 1, N T = X(I) X(I) = Y(I) Y(I) = T 10 CONTINUE 999 RETURN C *** LAST CARD OF V7SWP FOLLOWS *** END PyBDSF-1.10.1/src/port3/v7vmp.f000066400000000000000000000006061420247104600157070ustar00rootroot00000000000000 SUBROUTINE V7VMP(N, X, Y, Z, K) C C *** SET X(I) = Y(I) * Z(I)**K, 1 .LE. I .LE. N (FOR K = 1 OR -1) *** C INTEGER N, K REAL X(N), Y(N), Z(N) INTEGER I C IF (K .GE. 0) GO TO 20 DO 10 I = 1, N 10 X(I) = Y(I) / Z(I) GO TO 999 C 20 DO 30 I = 1, N 30 X(I) = Y(I) * Z(I) 999 RETURN C *** LAST CARD OF V7VMP FOLLOWS *** END PyBDSF-1.10.1/src/port3/w7zbf.f000066400000000000000000000051521420247104600156700ustar00rootroot00000000000000 SUBROUTINE W7ZBF (L, N, S, W, Y, Z) C C *** COMPUTE Y AND Z FOR L7UPD CORRESPONDING TO BFGS UPDATE. C INTEGER N REAL L(1), S(N), W(N), Y(N), Z(N) C DIMENSION L(N*(N+1)/2) C C-------------------------- PARAMETER USAGE -------------------------- C C L (I/O) CHOLESKY FACTOR OF HESSIAN, A LOWER TRIANG. MATRIX STORED C COMPACTLY BY ROWS. C N (INPUT) ORDER OF L AND LENGTH OF S, W, Y, Z. C S (INPUT) THE STEP JUST TAKEN. C W (OUTPUT) RIGHT SINGULAR VECTOR OF RANK 1 CORRECTION TO L. C Y (INPUT) CHANGE IN GRADIENTS CORRESPONDING TO S. C Z (OUTPUT) LEFT SINGULAR VECTOR OF RANK 1 CORRECTION TO L. C C------------------------------- NOTES ------------------------------- C C *** ALGORITHM NOTES *** C C WHEN S IS COMPUTED IN CERTAIN WAYS, E.G. BY GQTSTP OR C DBLDOG, IT IS POSSIBLE TO SAVE N**2/2 OPERATIONS SINCE (L**T)*S C OR L*(L**T)*S IS THEN KNOWN. C IF THE BFGS UPDATE TO L*(L**T) WOULD REDUCE ITS DETERMINANT TO C LESS THAN EPS TIMES ITS OLD VALUE, THEN THIS ROUTINE IN EFFECT C REPLACES Y BY THETA*Y + (1 - THETA)*L*(L**T)*S, WHERE THETA C (BETWEEN 0 AND 1) IS CHOSEN TO MAKE THE REDUCTION FACTOR = EPS. C C *** GENERAL *** C C CODED BY DAVID M. GAY (FALL 1979). C THIS SUBROUTINE WAS WRITTEN IN CONNECTION WITH RESEARCH SUPPORTED C BY THE NATIONAL SCIENCE FOUNDATION UNDER GRANTS MCS-7600324 AND C MCS-7906671. C C------------------------ EXTERNAL QUANTITIES ------------------------ C C *** FUNCTIONS AND SUBROUTINES CALLED *** C REAL D7TPR EXTERNAL D7TPR, L7IVM, L7TVM C D7TPR RETURNS INNER PRODUCT OF TWO VECTORS. C L7IVM MULTIPLIES L**-1 TIMES A VECTOR. C L7TVM MULTIPLIES L**T TIMES A VECTOR. C C *** INTRINSIC FUNCTIONS *** C/+ REAL SQRT C/ C-------------------------- LOCAL VARIABLES -------------------------- C INTEGER I REAL CS, CY, EPS, EPSRT, ONE, SHS, YS, THETA C C *** DATA INITIALIZATIONS *** C C/6 C DATA EPS/0.1E+0/, ONE/1.E+0/ C/7 PARAMETER (EPS=0.1E+0, ONE=1.E+0) C/ C C+++++++++++++++++++++++++++++++ BODY ++++++++++++++++++++++++++++++++ C CALL L7TVM(N, W, L, S) SHS = D7TPR(N, W, W) YS = D7TPR(N, Y, S) IF (YS .GE. EPS*SHS) GO TO 10 THETA = (ONE - EPS) * SHS / (SHS - YS) EPSRT = SQRT(EPS) CY = THETA / (SHS * EPSRT) CS = (ONE + (THETA-ONE)/EPSRT) / SHS GO TO 20 10 CY = ONE / ( SQRT(YS) * SQRT(SHS)) CS = ONE / SHS 20 CALL L7IVM(N, Z, L, Y) DO 30 I = 1, N 30 Z(I) = CY * Z(I) - CS * W(I) C 999 RETURN C *** LAST CARD OF W7ZBF FOLLOWS *** END PyBDSF-1.10.1/src/port3/xtrap.f000066400000000000000000000103141420247104600157630ustar00rootroot00000000000000 SUBROUTINE XTRAP(TM,M,NVAR,NG,KMAX,XPOLY,T,ERROR,EBEST) C C ASSUME AN EXPANSION FOR THE VECTOR VALUED FUNCTION T(H) OF THE FORM C C T(H) = T(0) + SUM(J=1,2,3,...)(A(J)*H**(J*GAMMA)) C C WHERE THE A(J) ARE CONSTANT VECTORS AND GAMMA IS A POSITIVE CONSTANT. C C GIVEN T(H(M)), WHERE H(M)=H0/N(M), M=1,2,3,..., THIS ROUTINE USES C POLYNOMIAL (XPOLY), OR RATIONAL (.NOT.XPOLY), EXTRAPOLATION TO C SEQUENTIALLY APPROXIMATE T(0). C C INPUT C C TM - TM = T(H(M)) FOR THIS CALL. C M - H(M) WAS USED TO OBTAIN TM. C NVAR - THE LENGTH OF THE VECTOR TM. C NG - THE REAL VALUES C C NG(I) = N(I)**GAMMA C C FOR I=1,...,M. NG MUST BE A MONOTONE INCREASING ARRAY. C KMAX - THE MAXIMUM NUMBER OF COLUMNS TO BE USED IN THE C EXTRAPOLATION PROCESS. C XPOLY - IF XPOLY=.TRUE., THEN _USE_ POLYNOMIAL EXTRAPOLATION. C IF XPOLY=.FALSE., THEN _USE_ RATIONAL EXTRAPOLATION. C T - THE BOTTOM EDGE OF THE EXTRAPOLATION LOZENGE. C T(I,J) SHOULD CONTAIN THE J-TH EXTRAPOLATE OF THE I-TH C COMPONENT OF T(H) BASED ON THE SEQUENCE H(1),...,H(M-1), C FOR I=1,...,NVAR AND J=1,...,MIN(M-1,KMAX). C C WHEN M=1, T MAY CONTAIN ANYTHING. C C FOR M.GT.1, NOTE THAT THE OUTPUT VALUE OF T AT THE C (M-1)-ST CALL IS THE INPUT FOR THE M-TH CALL. C THUS, THE USER NEED NEVER PUT ANYTHING INTO T, C BUT HE CAN NOT ALTER ANY ELEMENT OF T BETWEEN C CALLS TO XTRAP. C C OUTPUT C C TM - TM(I)=THE MOST ACCURATE APPROXIMATION IN THE LOZENGE C FOR THE I-TH VARIABLE, I=1,...,NVAR. C T - T(I,J) CONTAINS THE J-TH EXTRAPOLATE OF THE I-TH C COMPONENT OF T(H) BASED ON THE SEQUENCE H(1),...,H(M), C FOR I=1,...,NVAR AND J=1,...,MIN(M,KMAX). C ERROR - ERROR(I,J) GIVES THE SIGNED BULIRSCH-STOER ESTIMATE OF THE C ERROR IN THE J-TH EXTRAPOLATE OF THE I-TH COMPONENT OF C T(H) BASED ON THE SEQUENCE H(1),...,H(M-1), C FOR I=1,...,NVAR AND J=1,...,MIN(M-1,KMAX). C IF ERROR=EBEST AS ARRAYS, THEN THE ABOVE ELEMENTS C ARE NOT STORED. RATHER, EBEST=ERROR IS LOADED AS DESCRIBED C BELOW. C EBEST - EBEST(I)=THE ABSOLUTE VALUE OF THE ERROR IN TM(I), C I=1,...,NVAR. THIS ARRAY IS FULL OF GARBAGE WHEN M=1. C C SCRATCH SPACE ALLOCATED - MIN(M-1,KMAX) REAL WORDS + C C MIN(M-1,KMAX) INTEGER WORDS. C C ERROR STATES - C C 1 - M.LT.1. C 2 - NVAR.LT.1. C 3 - NG(1).LT.1. C 4 - KMAX.LT.1. C 5 - NG IS NOT MONOTONE INCREASING. C REAL TM(NVAR),NG(M),T(NVAR,1) C REAL T(NVAR,MIN(M,KMAX)) REAL ERROR(NVAR,1),EBEST(NVAR) C REAL ERROR(NVAR,MIN(M-1,KMAX)) LOGICAL XPOLY C LOGICAL ESAVE C COMMON /CSTAK/DS DOUBLE PRECISION DS(500) REAL WS(1) REAL RS(1000) EQUIVALENCE (DS(1),WS(1)),(DS(1),RS(1)) C C ... CHECK THE INPUT. C C/6S C IF (M.LT.1) CALL SETERR(15H XTRAP - M.LT.1,15,1,2) C IF (NVAR.LT.1) CALL SETERR(18H XTRAP - NVAR.LT.1,18,2,2) C IF (NG(1).LT.1.0E0) CALL SETERR(19H XTRAP - NG(1).LT.1,19,3,2) C IF (KMAX.LT.1) CALL SETERR(18H XTRAP - KMAX.LT.1,18,4,2) C/7S IF (M.LT.1) CALL SETERR(' XTRAP - M.LT.1',15,1,2) IF (NVAR.LT.1) CALL SETERR(' XTRAP - NVAR.LT.1',18,2,2) IF (NG(1).LT.1.0E0) CALL SETERR(' XTRAP - NG(1).LT.1',19,3,2) IF (KMAX.LT.1) CALL SETERR(' XTRAP - KMAX.LT.1',18,4,2) C/ C IF (M.EQ.1) GO TO 20 C DO 10 I=2,M C/6S C IF (NG(I-1).GE.NG(I)) CALL SETERR C 1 (38H XTRAP - NG IS NOT MONOTONE INCREASING,38,5,2) C/7S IF (NG(I-1).GE.NG(I)) CALL SETERR 1 (' XTRAP - NG IS NOT MONOTONE INCREASING',38,5,2) C/ 10 CONTINUE C C ... SEE IF ERROR=EBEST AS ARRAYS. IF (ESAVE), THEN LOAD ERROR. C 20 ERROR(1,1)=1.0E0 EBEST(1)=2.0E0 ESAVE=ERROR(1,1).NE.EBEST(1) C C ... ALLOCATE SCRATCH SPACE. C IRHG=1 IEMAG=1 IF (M.GT.1) IRHG=ISTKGT(MIN0(M-1,KMAX),3) IF (M.GT.1) IEMAG=ISTKGT(MIN0(M-1,KMAX),3) C CALL A0XTRP(TM,M,NVAR,NG,KMAX,XPOLY,T,ERROR,EBEST,WS(IRHG), 1 RS(IEMAG),ESAVE) C IF (M.GT.1) CALL ISTKRL(2) C RETURN C END PyBDSF-1.10.1/src/port3/zero.f000066400000000000000000000064521420247104600156140ustar00rootroot00000000000000 REAL FUNCTION ZERO(F,A,B,T) C C FINDS THE REAL ROOT OF THE FUNCTION F LYING BETWEEN A AND B C TO WITHIN A TOLERANCE OF C C 6*R1MACH(3) * ABS(ZERO) + 2 * T C C F(A) AND F(B) MUST HAVE OPPOSITE SIGNS C C THIS IS BRENTS ALGORITHM C C A, STORED IN SA, IS THE PREVIOUS BEST APPROXIMATION (I.E. THE OLD B) C B, STORED IN SB, IS THE CURRENT BEST APPROXIMATION C C IS THE MOST RECENTLY COMPUTED POINT SATISFYING F(B)*F(C) .LT. 0 C D CONTAINS THE CORRECTION TO THE APPROXIMATION C E CONTAINS THE PREVIOUS VALUE OF D C M CONTAINS THE BISECTION QUANTITY (C-B)/2 C REAL A,B,T,TT,SA,SB,C,D,E,FA,FB,FC,TOL,M,P,Q,R,S EXTERNAL F C TT = T IF (T .LE. 0.0) TT = 10.*R1MACH(1) C SA = A SB = B FA = F(SA) FB = F(SB) IF (FA .NE. 0.0) GO TO 5 ZERO = SA RETURN 5 IF (FB .EQ. 0.0) GO TO 140 C/6S C IF (SIGN(FA,FB) .EQ. FA) CALL SETERR( C 1 46H ZERO - F(A) AND F(B) ARE NOT OF OPPOSITE SIGN, 46, 1, 1) C/7S IF (SIGN(FA,FB) .EQ. FA) CALL SETERR( 1 ' ZERO - F(A) AND F(B) ARE NOT OF OPPOSITE SIGN', 46, 1, 1) C/ C 10 C = SA FC = FA E = SB-SA D = E C C INTERCHANGE B AND C IF ABS F(C) .LT. ABS F(B) C 20 IF (ABS(FC).GE.ABS(FB)) GO TO 30 SA = SB SB = C C = SA FA = FB FB = FC FC = FA C 30 TOL = 2.0*R1MACH(4)*ABS(SB)+TT M = 0.5*(C-SB) C C SUCCESS INDICATED BY M REDUCES TO UNDER TOLERANCE OR C BY F(B) = 0 C IF ((ABS(M).LE.TOL).OR.(FB.EQ.0.0)) GO TO 140 C C A BISECTION IS FORCED IF E, THE NEXT-TO-LAST CORRECTION C WAS LESS THAN THE TOLERANCE OR IF THE PREVIOUS B GAVE C A SMALLER F(B). OTHERWISE GO TO 40. C IF ((ABS(E).GE.TOL).AND.(ABS(FA).GE.ABS(FB))) GO TO 40 E = M D = E GO TO 100 40 S = FB/FA C C QUADRATIC INTERPOLATION CAN ONLY BE DONE IF A (IN SA) C AND C ARE DIFFERENT POINTS. C OTHERWISE DO THE FOLLOWING LINEAR INTERPOLATION C IF (SA.NE.C) GO TO 50 P = 2.0*M*S Q = 1.0-S GO TO 60 C C INVERSE QUADRATIC INTERPOLATION C 50 Q = FA/FC R = FB/FC P = S*(2.0*M*Q*(Q-R)-(SB-SA)*(R-1.0)) Q = (Q-1.0)*(R-1.0)*(S-1.0) 60 IF (P.LE.0.0) GO TO 70 Q = -Q GO TO 80 70 P = -P C C UPDATE THE QUANTITIES USING THE NEWLY COMPUTED C INTERPOLATE UNLESS IT WOULD EITHER FORCE THE C NEW POINT TOO FAR TO ONE SIDE OF THE INTERVAL C OR WOULD REPRESENT A CORRECTION GREATER THAN C HALF THE PREVIOUS CORRECTION. C C IN THESE LAST TWO CASES - DO THE BISECTION C BELOW (FROM STATEMENT 90 TO 100) C 80 S = E E = D IF ((2.0*P.GE.3.0*M*Q-ABS(TOL*Q)).OR. 1 (P.GE.ABS(0.5*S*Q))) GO TO 90 D = P/Q GO TO 100 90 E = M D = E C C SET A TO THE PREVIOUS B C 100 SA = SB FA = FB C C IF THE CORRECTION TO BE MADE IS SMALLER THAN C THE TOLERANCE, JUST TAKE A DELTA STEP (DELTA=TOLERANCE) C B = B + DELTA * SIGN(M) C IF (ABS(D).LE.TOL) GO TO 110 SB = SB+D GO TO 130 C 110 IF (M.LE.0.0) GO TO 120 SB = SB+TOL GO TO 130 C 120 SB = SB-TOL 130 FB = F(SB) C C IF F(B) AND F(C) HAVE THE SAME SIGN ONLY C LINEAR INTERPOLATION (NOT INVERSE QUADRATIC) C CAN BE DONE C IF ((FB.GT.0.0).AND.(FC.GT.0.0)) GO TO 10 IF ((FB.LE.0.0).AND.(FC.LE.0.0)) GO TO 10 GO TO 20 C C***SUCCESS*** 140 ZERO = SB RETURN END PyBDSF-1.10.1/test/000077500000000000000000000000001420247104600136005ustar00rootroot00000000000000PyBDSF-1.10.1/test/Ateammodels.py000066400000000000000000000036141420247104600164110ustar00rootroot00000000000000 import pylab as pl import bdsf, pyfits import numpy as N import os, subprocess from bdsf.FITS import Op_loadFITS from bdsf.collapse import Op_collapse from bdsf.preprocess import Op_preprocess from bdsf.rmsimage import Op_rmsimage from bdsf.threshold import Op_threshold from bdsf.islands import Op_islands import bdsf.functions as func from bdsf.analysis import plotresults """ Try blindly running bdsf to see if boxsize is ok, so fitting doesnt hang. Then try various segmenting algorithms which dont depend on rms ? """ directory = "A-team/" ls = subprocess.Popen(["ls",directory], stdout=subprocess.PIPE).communicate()[0] ls = ls.split('\n') files = []; rmsbox = [] chain = [Op_loadFITS(), Op_collapse(), Op_preprocess(), Op_rmsimage(), Op_threshold(), Op_islands()] #ls = ['subim.fits'] bms = [(0.0015, 0.0015, 0.0)] directory='' for ifile, filename in enumerate(ls): op = subprocess.Popen(["file",directory+filename], stdout=subprocess.PIPE).communicate()[0] if "FITS image data" in op: print 'Processing ', filename img = bdsf.execute(chain, {'fits_name': filename, 'thresh':"hard", 'solnname' : 'new', 'beam' : bms[ifile]), 'indir' : directory}) files.append(filename) rmsbox.append(img.opts.rms_box) thr = img.clipped_rms op1, markers1 = func.watershed(img.image, thr=thr*3.) pl.figure() pl.suptitle(img.filename) pl.subplot(2,2,1); pl.imshow(N.transpose(img.image), origin='lower', interpolation='nearest', vmin=-7*thr, vmax=15*thr); pl.title('Image') pl.subplot(2,2,2); pl.imshow(N.transpose(op1), origin='lower', interpolation='nearest'), pl.title('watershed1') pl.subplot(2,2,3); pl.imshow(N.transpose(markers1), origin='lower', interpolation='nearest'), pl.title('markers1') pl.subplot(2,2,4); plotresults(img, newfig=False, cbar=False) pl.savefig(directory+filename+'_watershed.png') else: print directory+filename+' is not a FITS file !!' PyBDSF-1.10.1/test/colourcorrection.py000066400000000000000000000062161420247104600175520ustar00rootroot00000000000000""" This is for pybdsm for calculating spectral index. We assume a linear spectral index in log(freq) and then each channel has a flux which is bit wrong because of the colour correction problem within that band. Now we average n such channels. There will be another error made, partly because of the colour correction now for channels (including discretisation) and the colour correction of the earlier 2nd order colour correction. This is to see how much they differ. Refer notebook for forumlae. """ import numpy as N import pylab as pl import math nchan = N.array([9, 17]) alpha_arr = N.arange(-1.3, -0.3, 0.1) deltanu = N.array([0.05e6, 0.1e6, 0.2e6]) freq = N.arange(40.0e6, 200.0e6, 10.0e6) pl1 = pl.figure() pl2 = pl.figure() pl3 = pl.figure() k = 0 for inchan, n in enumerate(nchan): for ibw, bw in enumerate(deltanu): k += 1 for ia, alpha in enumerate(alpha_arr): f_diff1 = N.zeros(len(freq)) f_diff2 = N.zeros(len(freq)) for ifreq, f in enumerate(freq): f_arr = N.arange(f-(n-1)/2*bw, f+(n+1)/2*bw, bw) f_naive = N.mean(f_arr) f1 = N.power(f_arr, alpha) f2 = N.power(f_arr, alpha-2.0) f1 = 1.0/n*N.sum(f1) f2 = 1.0/n*N.sum(f2)*bw*bw*alpha*(alpha-1.0)/24.0 f_eff1 = N.power(f1, 1.0/alpha) f_eff2 = N.power(f1+f2, 1.0/alpha) f_diff1[ifreq] = f_naive - f_eff2 f_diff2[ifreq] = f_eff1 - f_eff2 fig = pl.figure(pl1.number) adjustprops = dict(wspace=0.5, hspace=0.5) fig.subplots_adjust(**adjustprops) ax = pl.subplot(2,3,k) pl.plot(freq/1e6, f_diff1/1e3) pl.title('n='+str(n)+'; bw='+str(bw/1e6)+' MHz') pl.xlabel('Freq(MHz)') pl.ylabel('Diff in freq (kHz)') pl.setp(ax.get_xticklabels(), rotation='vertical', fontsize=12) fig = pl.figure(pl2.number) adjustprops = dict(wspace=0.5, hspace=0.5) fig.subplots_adjust(**adjustprops) ax = pl.subplot(2,3,k) pl.plot(freq/1e6, f_diff2) pl.title('n='+str(n)+'; bw='+str(bw/1e6)+' MHz') pl.xlabel('Freq(MHz)') pl.ylabel('Diff due to 2nd order (Hz)') pl.setp(ax.get_xticklabels(), rotation='vertical', fontsize=12) fig = pl.figure(pl3.number) adjustprops = dict(wspace=0.9, hspace=0.5) fig.subplots_adjust(**adjustprops) ax = pl.subplot(2,3,k) f2 = f_naive+5e6 y = f_diff1*alpha/f_naive/math.log(f_naive/(f2)) pl.plot(freq/1e6, y) pl.title('n='+str(n)+'; bw='+str(bw/1e6)+' MHz') pl.xlabel('Freq(MHz)') pl.ylabel('Error in sp.in. for f2=f1+10MHz') pl.setp(ax.get_xticklabels(), rotation='vertical', fontsize=12) pl.figure(pl1.number) pl.savefig('colourcorr_full.png') pl.figure(pl2.number) pl.savefig('colourcorr_order1-2.png') pl.figure(pl3.number) pl.savefig('colourcorr_delta_spin.png') PyBDSF-1.10.1/test/do_stuff.py000066400000000000000000000041511420247104600157640ustar00rootroot00000000000000 """make watershed images for each island in isls """ def do_ws(isls, crms): import bdsm.functions as func import os, subprocess import pylab as pl import numpy as N thr = crms for isl in isls: image = isl.image*~isl.mask_active op1, markers1 = func.watershed(image, thr=thr*3.) pl.figure() pl.suptitle('Island '+str(isl.island_id)) pl.subplot(2,2,1); pl.imshow(N.transpose(image), origin='lower', interpolation='nearest', vmin=-7*thr, vmax=15*thr); pl.title('Image') pl.subplot(2,2,2); pl.imshow(N.transpose(op1*~isl.mask_active), origin='lower', interpolation='nearest'); pl.title('watershed1') pl.subplot(2,2,3); pl.imshow(N.transpose(markers1*~isl.mask_active), origin='lower', interpolation='nearest'); pl.title('markers1') def open_isl(isls, crms): import pylab as pl import scipy.ndimage as nd import numpy as N thr = crms ft1 = N.array(((1,0,1), (0,1,0), (1,0,1)), int) ft2 = N.array(((0,1,0), (1,1,1), (0,1,0)), int) ft3 = N.ones((3,3), int) ft5 = N.ones((5,5), int) for isl in isls: ma = ~isl.mask_active open1 = nd.binary_opening(ma, ft1) open2 = nd.binary_opening(ma, ft2) open3 = nd.binary_opening(ma, ft3) open5 = nd.binary_opening(ma, ft5) pl.figure() pl.suptitle('Island '+str(isl.island_id)) pl.subplot(2,2,1); pl.imshow(N.transpose(isl.image), origin='lower', interpolation='nearest'); pl.title('Image') pl.subplot(2,2,2); pl.imshow(N.transpose(ma), origin='lower', interpolation='nearest'); pl.title('mask') pl.subplot(2,2,3); pl.imshow(N.transpose(open3), origin='lower', interpolation='nearest'); pl.title('open 3x3') pl.subplot(2,2,4); pl.imshow(N.transpose(open5), origin='lower', interpolation='nearest'); pl.title('open 5x5') #pl.subplot(2,2,3); pl.imshow(N.transpose(open1), origin='lower', interpolation='nearest'); pl.title('open diag') #pl.subplot(2,2,4); pl.imshow(N.transpose(open2), origin='lower', interpolation='nearest'); pl.title('open str') pl.savefig('cyga_p_w12_bigisl_'+str(isl.island_id)+'_open.png') PyBDSF-1.10.1/test/tbdsf_process_image.in000066400000000000000000000067431420247104600201440ustar00rootroot00000000000000(dp0 Vadvanced_opts p1 I00 sVatrous_do p2 I01 sVbeam p3 (F0.015 F0.015 F0.0 tp4 sVfilename p5 Vtbdsf_process_image.in_fits p6 sVflagging_opts p7 I00 sVfrequency p8 NsVinteractive p9 I00 sVmean_map p10 Vdefault p11 sVmultichan_opts p12 I00 sVoutput_opts p13 I00 sVpolarisation_do p14 I01 sVpsf_vary_do p15 I01 sVrm_do p16 I00 sVrms_box p17 NsVrms_map p18 NsVrmsmean_map_filename p19 (lp20 sVshapelet_do p21 I01 sVspectralindex_do p22 I01 sVthresh p23 NsVthresh_isl p24 F3.0 sVthresh_pix p25 F5.0 sVadaptive_rms_box p26 I01 sVsplit_isl p27 I01 sVsplitisl_maxsize p28 F50.0 sVsplitisl_size_extra5 p29 F0.1 sVsplitisl_frac_bigisl3 p30 F0.8 sVpeak_fit p31 I01 sVpeak_maxsize p32 F30.0 sVfdr_alpha p33 F0.05 sVfdr_ratio p34 F0.1 sVkappa_clip p35 F3.0 sVbmpersrc_th p36 NsVspline_rank p37 L3L sVminpix_isl p38 NsVrms_value p39 NsVaperture p40 NsVaperture_posn p41 Vcentroid p42 sVsrc_ra_dec p43 NsVsrc_radius_pix p44 NsVini_gausfit p45 g11 sVini_method p46 Vintensity p47 sVfix_to_beam p48 I00 sVfittedimage_clip p49 F0.1 sVcheck_outsideuniv p50 I00 sVtrim_box p51 NsVstop_at p52 NsVgroup_by_isl p53 I00 sVgroup_method p54 g47 sVgroup_tol p55 F1.0 sVblank_limit p56 NsVdetection_image p57 V p58 sVdo_mc_errors p59 I00 sVncores p60 NsVdo_cache p61 I00 sVrms_box_bright p62 NsVadaptive_thresh p63 NsVatrous_jmax p64 L0L sVatrous_lpf p65 Vb3 p66 sVatrous_bdsm_do p67 I01 sVatrous_orig_isl p68 I00 sVatrous_sum p69 I01 sVuse_scipy_fft p70 I01 sVflag_smallsrc p71 I00 sVflag_minsnr p72 F0.6 sVflag_maxsnr p73 F1.5 sVflag_maxsize_isl p74 F1.0 sVflag_maxsize_fwhm p75 F0.5 sVflag_bordersize p76 L0L sVflag_maxsize_bm p77 F25.0 sVflag_minsize_bm p78 F0.7 sVbeam_spectrum p79 NsVfrequency_sp p80 NsVbeam_sp_derive p81 I00 sVcollapse_mode p82 Vaverage p83 sVcollapse_ch0 p84 L0L sVcollapse_av p85 (lp86 sVcollapse_wt p87 Vunity p88 sVplot_islands p89 I00 sVplot_allgaus p90 I00 sVoutput_all p91 I00 sVopdir_overwrite p92 Voverwrite p93 sVbbs_patches p94 NsVbbs_patches_mask p95 NsVsolnname p96 NsVindir p97 NsVsavefits_residim p98 I00 sVsavefits_rmsim p99 I00 sVsavefits_meanim p100 I00 sVsavefits_rankim p101 I00 sVsavefits_normim p102 I00 sVprint_timing p103 I00 sVverbose_fitting p104 I00 sVquiet p105 I00 sVpi_fit p106 I01 sVpi_thresh_isl p107 NsVpi_thresh_pix p108 NsVpsf_generators p109 Vcalibrators p110 sVpsf_nsig p111 F3.0 sVpsf_over p112 L2L sVpsf_kappa2 p113 F2.0 sVpsf_smooth p114 NsVpsf_snrcut p115 F10.0 sVpsf_snrtop p116 F1.0 sVpsf_snrbot p117 F0.2 sVpsf_snrcutstack p118 F15.0 sVpsf_gencode p119 Vlist p120 sVpsf_primarygen p121 g58 sVpsf_itess_method p122 L0L sVpsf_tess_sc p123 Vs p124 sVpsf_tess_fuzzy p125 F0.05 sVpsf_use_shap p126 I00 sVpsf_high_snr p127 NsVpsf_stype_only p128 I01 sVpsf_fwhm p129 NsVshapelet_basis p130 Vcartesian p131 sVshapelet_fitmode p132 Vfit p133 sVshapelet_gresid p134 I00 sVflagchan_rms p135 I01 sVflagchan_snr p136 I01 sVspecind_maxchan p137 L0L sVspecind_snr p138 F3.0 sVdebug p139 I00 sVoutfile p140 NsVbroadcast p141 I00 sVclobber p142 I00 sVformat p143 Vbbs p144 sVsrcroot p145 NsVincl_chan p146 I00 sVincl_empty p147 I00 sVforce_output p148 I00 sVcatalog_type p149 Vgaul p150 sVcorrect_proj p151 I01 sVimg_format p152 Vfits p153 sVimg_type p154 Vgaus_resid p155 sVmask_dilation p156 L0L sVpad_image p157 I00 sVch0_image p158 I01 sVrms_image p159 I01 sVmean_image p160 I01 sVch0_islands p161 I01 sVch0_flagged p162 I00 sVgresid_image p163 I01 sVsresid_image p164 I00 sVgmodel_image p165 I01 sVsmodel_image p166 I00 sVpi_image p167 I00 sVsource_seds p168 I00 sVpsf_major p169 I00 sVpsf_minor p170 I00 sVpsf_pa p171 I00 s.PyBDSF-1.10.1/test/tbdsf_process_image.in_fits000066400000000000000000242614001420247104600211700ustar00rootroot00000000000000SIMPLE = T / file does conform to FITS standard BITPIX = -64 / number of bits per data pixel NAXIS = 4 / number of data axes NAXIS1 = 129 / length of data axis NAXIS2 = 129 / length of data axis NAXIS3 = 10 / length of data axis NAXIS4 = 4 / length of data axis EXTEND = T / FITS dataset may contain extensions COMMENT FITS (Flexible Image Transport System) format is defined in 'AstronomyCOMMENT and Astrophysics', volume 376, page 359; bibcode: 2001A&A...376..359H HDUNAME = 'PRIMARY_IMAGE' / ASCDM block name LONGSTRN= 'OGIP 1.0' / The HEASARC Long String Convention may be used.COMMENT This FITS file may contain long string keyword values that are COMMENT continued over multiple keywords. The HEASARC convention uses the & COMMENT character at the end of each substring which is then continued COMMENT on the next keyword which has the name CONTINUE. MAPTYP = 'MAP ' POL = 'I ' BSCALE = 1.0000000000000E+00 / REAL = TAPE *BSCALE + BZERO BZERO = 0.0000000000000E+00 DATE = '17/03/10' ORIGIN = 'DWINGELOO (NL) PGM=NMAP(6.27)' EPOCH = 2.0000000000000E+03 / EPOCH OF MAP INSTRUME= 'WSRT ' CRESL3 = 5.0000000000000E+00 / BANDWIDTH (HERTZ) OBJECT = 'ABELL2255' DATE-OBS= 2.0063700000000E+03 BANDW = 7.8125000000000E+04 / TOTAL BANDWIDTH OF OBS(HERTZ) VEL = 0.0000000000000E+00 / CENTRE VELOCITY (M/S) PCRA = 2.5825000000000E+02 / POINTING CENTRE R.A. (DEG) PCDEC = 6.4133330000000E+01 / POINTING CENTRE DEC (DEG) NBLANK = 0 / NUMBER OF UNDEF. VALUES BLGRAD = 'GAUSSIAN' / TAPER TYPE UVGRID = 'EXP*SINC' / CONVOLUTION TYPE CORGRID = 1 / CORRECT FOR CONVOLUTION CLIP = 0 / CLIPPING DONE SUBTR = 0 / SOURCE SUBTRACTION DATTYP = 'NORMAL ' / DATA TYPE UVCDT = 'NORMAL ' / UV COORDINATE TYPE DEBEAM = 0 / DE-BEAM COUNT DATAMAX = 1.6682890000000E+00 / MAX. INTENSITY DATAMIN = -1.0766400000000E-02 / MIN. INTENSITY NINTF = 2400 / TOTAL INTERFEROMETERS NFREQ = 1 / TOTAL # OF FREQUENCY POINTS HISTNUM = 7 NOISE = 1.9603400000000E-03 / NOISE IN MAP NORM = 1.0712860000000E+05 / NORM. FACTOR IN FFT FFTRA = 4096 / FFT SIZE IN R.A. FFTDEC = 4096 / FFT SIZE IN DEC. SETNR = 0 / # OF SET. INSECT = 60 / INPUT SECTORS. INPTS = 332600 / INPUT POINTS. MAPLAB = '429496729*' / LABEL OF THIS MAP CTYPE1P = 'X ' CRVAL1P = 5.1150000000000E+02 CRPIX1P = 5.0000000000000E-01 CDELT1P = 1.0000000000000E+00 WCSTY1P = 'PHYSICAL' LTV1 = -5.1100000000000E+02 LTM1_1 = 1.0000000000000E+00 CTYPE2P = 'Y ' CRVAL2P = 5.1150000000000E+02 CRPIX2P = 5.0000000000000E-01 CDELT2P = 1.0000000000000E+00 WCSTY2P = 'PHYSICAL' LTV2 = -5.1100000000000E+02 LTM2_2 = 1.0000000000000E+00 MTYPE1 = 'EQPOS ' / DM Keyword: Descriptor name. MFORM1 = 'RA,DEC ' / DM Keyword: Descriptor value. CTYPE1 = 'RA---NCP' CRVAL1 = 2.5825000000000E+02 CRPIX1 = 2.0000000000000E+00 CDELT1 = -5.8593700000000E-03 CTYPE2 = 'DEC--NCP' CRVAL2 = 6.4133330000000E+01 CRPIX2 = 2.0000000000000E+00 CDELT2 = 5.8593700000000E-03 CTYPE3 = 'FREQ ' CRVAL3 = 1.0000000000000E+00 CRPIX3 = 1.0000000000000E+00 CDELT3 = 5.0000000000000E+00 CTYPE4 = 'STOKES ' CRVAL4 = 0.0000000000000E+00 CRPIX4 = 0.0000000000000E+00 CDELT4 = 1.0000000000000E+00 HISTORY TOOL :dmcopy 2012-05-07T19:44:51 ASC00001HISTORY PARM :infile=test.fits[bin x=512:640,y=512:640,z=::,#axis4=::]ASC00002HISTORY PARM :outfile=test_sm.fits ASC00003HISTORY PARM :kernel=default ASC00004HISTORY PARM :option= ASC00005HISTORY PARM :verbose=0 ASC00006HISTORY PARM :clobber=yes ASC00007END ?0?Q?O?Tp@@4p@?`F@?^ `?a9?h4?j?t?qb@?G_-?> `?dsG?pF@?u?s2?[`> `?]6?a?Z?c2?[`@OS2ca9Qb@N `R]UY;[`TDp@OY;X4Tp@JR]dsGa N `Qb@Y;_P?4p@?Dp@I @[`I @> `LaI4p@?> `?Dp@? > `4p@Y;S2?7_-?*S2\aIR]Dp@N `Dp@?7_-?> `?7_-?Dp@LaIW_-`F@U?0?> `@G_-?$p@?N `?I @I @04p@0ES2:B]]6P?R]?B][`N `]6T?B]?E?Dp@?J??N `I @Qb@TDp@7_-?y?X44p@?G_-\aIO?`F@?c?g@?j?i @?u?zK`?oM/`?b@?k  ?q?q?h4?Y @?4p@?Dp@?f?d?:?J?N `[`b]B]> `R]Qb@Qb@^ `g_-f~@Y @G_-Tp@b]_: Dp@O[`T?:^ `[`US24p@?$p@> `[`ab@LaIOV~@ ?@*:B]X4\aIOTp@ca:4p@V~@J? ? :Y @V~@P`F@_?]6?_?R]?P?ab@?b]?4p@7_-?X4?_OB]> ` ?*? J> `?Y;?Dp@Z4p@?I @4p@? ?> `?E?4p@TJPX4PE> `@?sh,?@?G_-?OJ ?Y @?Tp@?\aI?^ `?S2?pF@??{r?laI?a?b]?Tp@?0?P?LaI?W_-?[`> `@0ab@ab@4p@0N `PUab@hc7_- b]l!`Y;?G_-?0S2S2S2Dp@?LaI?7_-Y @W_-7_-$p@ 0?G_-> `g_-ab@*Qb@`F@EG_-OLaIS2Y @[`ab@fV_? [`S2> `UUQb@_`TTT4p@?R]?\aI?LaI?4p@?Y @?^WI @?E?N `0? ?G_-??$p@?Qb@?Qb@\aIR]?LaI? [`:?P?LaI?G_-*Qb@?:JTOI @*?0$p@PV~@??|+?i @?0?@?B]?7_-?Dp@?d?|+?}@?l!`?Tp@?Qb@? N `?*?4p@J??N `4p@Dp@> `LaI4p@B]a9b]^Wc2dsGdp@Y;?:?g_-n `P?G_-G_-aW_-R]P?7_-?I @B]I @*G_-Qb@J$p@?Tp@?Jab@i @S2B]S2OLaIR]R]J?$p@?I @*X4`F@W_-??$p@S2EZdV~@LaIY @^WU0?4p@?7_-? EP0?*G_-ZX4LaI?*?Z?Tp@0?*?Y @?B]X4cTp@?:Tp@Dp@?E?JN `O?*?X4?TI @?$p@?P?LaI X4]6?? ?%B@?d?E?OLaI0E?I @?k`?r'?kr?a9?X4? V~@Tp@I @B]?:?G_- 7_-G_-@?4p@Qb@jK`g_-fkrf^ `Tp@?0 b]^W?4p@?:S2]6Tp@Qb@\aIV~@:Dp@OO]6`Qb@I @4p@?Dp@> `c2Y;0I @ZY;TX4S2?R]?e?LaIOPI @7_-> `Y @P?4p@I @e^ `@a9ab@ ?Tp@?:Qb@S27_-??> `B]?U?Y @V~@?Y @?7_-X4\aIB]?Dp@?E7_-G_-N `O?Dp@?X4?Z Dp@?E?B]0> `PQb@?V.?@?@?y? ?N `4p@ ?U?Qb@:B]0*?N `?c?^W?$p@Tp@ab@c2W_- ?*JJ?**S2Tp@`F@fVcfVi;\aIOR]4p@B]U?*?X4?B]*I @JX4d`F@S2X4UUY @I @TcI @?:PT$p@O`X4S2`]6?E?]60\aIB]?$p@*R]eH@dsG4p@?7_-N `R]$p@> `^W\aI?7_-?[` b]P?W_-?V~@?@?LaI?J?Dp@?X4?Y;X4Y @4p@?G_-?Dp@B]4p@?E?Tp@?4p@I @G_-G_-V~@J? :@E\aIE?PB]_I @0?ŀ?1?:?s` ?[`?laI?a9?:?B]?$p@R]B]?LaI_ab@`F@b@W_-S2i;_?W_-?a> `eH@g@cc2fV`@Dp@S2I @S2Y;$p@?4p@7_-?B]?@TN `@dsGeH@S2X4S2@R]I @JcU?I @4p@S27_-LaIR]? *Y @S2?$p@V~@[`0?J?G_-0]6b]G_-?N `?P?0@TT ?Y @?ZEc ?iud?eH@?Dp@0Tp@S2?Dp@?JI @P ? *?0?> `7_-G_-?0?T?J7_-PTX4R]OY;UY;b]*?TS2`?@?B]?jH?s ?sG?^ `?$p@?B]?\aI?dsG?Y;?B]?Dp@?0*?0?0R]^ `PR]`U0[`l!``?]6?kr?I @dp@dY @adsGT@S2V~@I @Tb]_]6^WI @R]jK`ab@Dp@dp@f~@G_-JN `Dp@^ `Y @$p@O@?S2*_W_-R]0?W_-?LaI:N `O@7_-?Dp@?I @?7_-$p@:?*?J[``F@I @?I @?Y @?O> `I @?V~@?iud?b]?U?JPaG_-? @?S2?I @B]> `?B]R]?I @?G_-?*Dp@V~@ZZ]6R]?@?4p@R]?0]6P?W_-?N `?*?laI?sh,?p?i @?a9?LaI?4p@?:?:Dp@E?*?G_- OG_-0Tp@b]T4p@Tp@aT?B]?[`? b]X4 N `Y @PU\aITDp@Ob@eH@]6^ `b@i;q9jK`W_-dfDp@ *7_-_]6*E> `?P> `f~@dsG\aII @?> `? Dp@?$p@Qb@Dp@Qb@W_-Dp@?$p@?J?> `$p@?S2?a9B]i @`7_-?*?*7_-S2I @?4p@N `?:?ab@?R]Dp@LaIDp@G_-:?> `?:EE?$p@> `TDp@$p@?J?PTp@\aI\aI$p@?_?UEDp@I @_ ?_?0I @?`?a9?qb@?r}`?_ 7_-?4p@Dp@7_-?4p@@**JY @Y;JI @[`ZI @0PcQb@?> `*I @O^ `ZI @G_-Uef~@E> `cg_-dp@aY @_b]P$p@?$p@?*JP@W_-W_-? @b]^WPOPW_-T??Dp@4p@Dp@G_-W_-X4Qb@PEI @?E?{`?`?iudf[`0:4p@S2fVdp@R]Y;f\aI0:JQb@PB]$p@Dp@:?> `7_-Y @I @> `Dp@?X4?laI?b]Qb@R]?Qb@?R]4p@? > `?J?UEQb@?Y @?Y @?k  ?eH@> `?0? ?$p@?G_-?T?B]G_- ?S2?*P> `?*Jaab@N `?Dp@^WTp@0JN `LaIZP> `X4hh ?JTp@Qb@?0B]Y;Y;Y;Y;TE0> `V~@Y;> `*PJ?*?0@OE?:?O?4p@> `S2ZQb@O\aI]6[`?W_-?4@?9@?|UU@> `?B]*ab@V~@?P?^ `?G_-B]\aIa9LaI?B]?0> `> `? ::?0:S2? ?*E?X4?qb@?jK`?Dp@* ?*?OS2?@?X4?V~@?_?R]G_-?G_-?@?\aI?V~@?@?T?U*I @?0?X4?Z?0J?0?V~@?B]?Dp@?O?4p@? LaI[`R]B]> `G_-UQb@LaI]6Y;I @Qb@E?4p@LaI``?I @?f?S2R]b]\aIR]V~@]6Y @@? 7_-B]LaIDp@EY;> `?N `?E?*? 7_-I @E> `Ta9Y;T`ZS2?4p@?|!`?T?r@Qb@PLaI:?R]?O?7_-?T?d?laI?j?[`? O$p@?\aI?Y @? $p@?*?$p@@LaI4p@*0?N `?G_-I @?7_-?dsG?X47_-?G_-?N `?7_-Dp@Dp@?> `?J?T?dp@?X4*?> `?R]?B]?U?^ `?a9?f~@?^W??LaI?Qb@?7_- 0? ?> `*4p@?Dp@?I @:J`F@`Y @LaILaIacUQb@N `:EPN `@?]6?t= ?q9?@``Y @Tp@Dp@B]PR]@0E> `JS24p@Ed`F@??:Dp@\aIeH@`I @N ``F@UI @Y;O4p@U?^W?4p@G_-:O:?*?O?Tp@?P?p?wq ?g@?V~@?T?G_-?Z?[`$p@N `> `> `N `TLaI0?Dp@?7_-LaIB]?::V~@E?7_-?I @?@? ?0?4p@Dp@ ?^W?X4?0?P??4p@?J?X4?a?`?T?G_-?J?0@?> `?\aI?G_-0?G_-?Tp@4p@^ `O?0@E?Qb@?EY;`R]:4p@Y;f~@b@W_-PP]6`F@O*?Tp@?t= ?y @?Y @b@P?@7_-I @4p@*:Dp@B]EPI @OY;B] Y;[`$p@G_-U[`]6[`O:G_-$p@?4p@LaIS2J_^ `7_-?*?:*E?0Ea> `?:?r]?O?@?4@?b@?\aI?Dp@?LaI?Y @*Tp@B]> `JTY @R]G_- ?7_-B]@N `TTp@R]G_-$p@?*?N `?Dp@OJ?N `?G_-7_-??*@E4p@?0?R]?a?^W?7_-$p@$p@@?J?f?Z?7_-?Z?ZQb@cDp@?:OI @?^ `?a$p@N `$p@?$p@?*> `[`]6I @> `W_-^WV~@N `4p@?dsG?rU ?^WU0?G_-JY;J$p@ G_-LaIDp@OG_-0I @7_-?:*> `?:?J? Qb@J?0:Tp@0B]B]Ucfc2@?S2?O T*?a?dP?T?ud?N?@?j?r@?[`?0?7_-?Y @?Dp@?:?4p@:R]^ `]6Qb@ ?O?N `0TV~@N `V~@c2^ `@??@?0LaIJ?$p@*N `*?Dp@?0?*?G_-?J?Y @?^W?> ` ?Dp@?P?B]B]??G_-:Qb@? ?G_-7_-:?Tp@?X4 E ??$p@?$p@?> `?*EPTp@^ `]6R]?Qb@?:X4[`T^ ``X4@? $p@$p@$p@Qb@LaI?*??*? ?$p@?O?Y;?LaIN `Dp@?W_-?G_-LaI*EdsGdsG`fiudab@?EG_-adp@? ?m6?aDp@?*?\aI?ud?ũ?j?? ?t?^W $p@?Tp@? 4p@?J?7_-7_-:LaIR]G_-$p@?G_-?T?$p@[`_Dp@G_-^WTp@?*?**4p@G_-G_-*@Tp@U?^W?V~@?:?LaI?Y;?B]?> `?]6?X4?J?V~@?EPPJ]6Y @?I @?c?Z?:$p@@0?7_-?:0EB]JT@?O?R]?4p@R]cY;G_-a9eH@TX4^ `Tp@^ `g_-b@Y;^W`O?*?0> `_]6@7_-*?*?7_-?J?Tp@?Qb@?$p@V~@I @?[`?W_-*4p@S2dsG^ `Tp@V~@I @ I @^ `a^W?$p@?k`?g@?O?Z?[`?v ?=?@??h4?_0:?R]? G_-*E7_-?I @?B]4p@Dp@I @ ?U?Tp@ET?4p@:??J?$p@$p@?**N `Dp@?$p@X4?g_-?^ `?@?S2?c2?S2?:?Z?W_-?0?O?S2:O*G_-O?]6?r}`?laI?I @I @P> `4p@I @U^WO?E?0Qb@_dR]?0ZfTp@^Wg@V~@Qb@aS2> `]6ab@E4p@:TdsGaV~@T> `?> `?G_-?R]?G_-> `S2Y @I @?N `?G_-B]N `Qb@7_-?I @? ?[`?[`7_-Y;S2*?> `?`F@?Y;?N `?a9?g@?x4?z?f?W_-?V~@B]4p@?S2?$p@R]V~@Y;@?N `?> `Dp@JJ ?Y;?_?@*?$p@?$p@?$p@?Dp@?*@?4p@?Tp@?V~@N `?R]?^W?n `?f~@?Y;?[`?dp@?_?X4?Y;?@> `?G_-?`F@?Qb@?0?J?B]*?T?j?e?U?@?$p@?LaILaIDp@Qb@R]Dp@?:?Qb@:[`S2P4p@?G_-I @_N `\aIfVQb@> `Tp@?0X4X4? 0TOP[`UQb@Qb@ ?@?0?G_-`^ `N `:0Dp@E> `?I @?V~@?4p@?b]?P]6b@Qb@?$p@?O?LaI?Dp@4p@^WU?V~@?i;?jK`?^ `?0?7_-?0N `I @?$p@ELaITp@O> `EE7_-:?N `?LaI?$p@G_-R]?G_-Dp@R]?Dp@?U*R]7_-?U?c?Qb@?nW?m?eH@?Qb@?4p@?Dp@?W_-?Tp@?T?eH@?a9?I @?*J4p@?I @?G_-?N `?R]?G_-?R]?JQb@X4JP7_-?Tp@?b@?`F@TI @N `Qb@> `Qb@X4Dp@V~@c2Qb@Dp@Qb@?7_-R]V~@EY @a9JDp@J4p@?$p@?B]?7_-$p@> `Y @cV~@?4p@?J?@?@?Qb@?O?*B]LaI?> `?W_-:_V~@O@?Dp@?:I @S2US2?N `?7_-LaIX4G_-?*0TS20?B]?LaI?0I @X4O?> `?G_-ER]Dp@N `LaI7_-T^ `? ?PEP?LaI?O> `4p@?Dp@?G_-?LaI?B]?l!`?oM/`?dsG?X4Qb@?> `?4p@J> `?I @?`F@?`? Qb@> `Dp@I @? ? > `E7_-?Qb@?U:Dp@?4p@?T?Y;?R]?*JV~@^ `ZOV~@X4B]JW_-Dp@$p@> ` W_-cdsGfVdp@G_-?*B]P?J?:$p@? ?0I @Y;G_-?N `?[`?U?Tp@?[`?Tp@ Uab@X47_-V~@*?Qb@?04p@J_LaI?O?W_-?G_-:[`b@`F@@?Tp@?LaIOX40?I @?Tp@?PQb@G_-?S2?Y @7_-V~@R]ULaI? JV~@?7_-?P@Dp@?P?N `@0?Dp@JJ?rU ?r'?b@?LaI7_-?:V~@V~@> `?G_-?I @UT?^ `?a?$p@?4p@?@O`F@R]?@?Dp@B]7_-?4p@7_-N `G_-Qb@S2B]G_-Y @W_-4p@ PTp@Dp@> `7_-?$p@?> `?*B]X4dsGf~@c^WO:OS2$p@?0EN `?0?E$p@PQb@$p@?: > `Dp@Qb@N `EV~@UTda9?7_-?T?:?4p@?$p@PY @7_-?Tp@?^W?V~@?4p@**?Dp@?@ER]JJG_- ?4p@7_-S2?X4?Qb@?$p@7_-LaI$p@?G_- > `?B]?E4p@7_-?B]?B]G_-Qb@*\aIc2?wq ?s`?b]?a9?a9?N `?N `?J:OE > `a9*?u`?x4?ab@?J?S2?Dp@? ?@7_-X4UI @S2^Wab@ab@^WTp@PTI @:ODp@EJ$p@@G_-E@@S2[`[`[`V~@OPOG_-Qb@Y;J?0?0$p@J^ `^ `OOT`f~@T?B]?$p@Dp@X4hcI @Tp@P?E?N `? 0@:?0?4p@?4p@?T?LaI@ODp@@I @T^Wab@Y @? W_-[`?N `?4p@OU??Qb@?Dp@?J?Qb@?0?$p@$p@4p@I @R]*ah?r'?pF@?a9?d?b@?@?G_-?Y;?E0@7_-> `T?4p@?t?|!`?q9?^W?V~@?R]?J?E? LaITV~@TQb@X4[`N `@N `S2R]JQb@^WR]S2^ `B]Jb@`F@G_-B]U^W`F@Y;UOEV~@c2^W: ?@?$p@^ ``*?J?I @B]b@U?> `?*> `^W[`Tp@cX4?O?U?@:Y;O?I @?:S2Qb@?:?J$p@N `I @4p@0Dp@N `V~@Z@?:Dp@``X4Y;dp@`F@?$p@?P?P?a9?Y @Dp@0?G_-0J7_-$p@?4p@^W^ `?Y;?f?g_-?g@?Z? ?LaI?^ `?I @4p@B]?G_-?> `> `?J?pF@?rU ?a9?J?T?G_-LaI\aIW_-JPW_-OQb@O?7_-?B]G_-Qb@@*LaI^WN `aeDp@LaIeH@_0Dp@ON `OPU^WR]R]dsGZJW_-N `?S2?S2R]U?J?_?Y @\aIY @JO$p@$p@Y @R]@U> `?R]?N `?*S2dp@:?b@?V~@N `S2?E?:> `Tp@Qb@0?*? B]O7_-?> `?*Oa`F@W_-[`Qb@?:?$p@?7_-?b]?Qb@`F@S2?O?@?@?E?7_-:O?$p@?`F@?kr?i @?U?Dp@?^ `?a9?N `? ?:?U?UOa9?B]?f?J?4p@?`?LaI_fa9^ `a9eH@aS2?:?a?N `W_-W_-*?7_- UTLaIa9`F@:`[`I @LaIS2I @?$p@?G_-?> `PdsGQb@?N `4p@Y @@Og@b]?> `?Qb@@I @?*?J\aI_S2T]6OR]a9S2$p@@?*?I @?*?7_-:^W:?Z?I @Dp@0?> `?Dp@?4p@I @b]b@Dp@?:0O> `?7_-?@?Dp@?Dp@? ??Dp@?7_-?Dp@?G_-Tp@Y;?B]*dU?J?P?LaI?LaI?I @?I @?0?B] ?U?fV?a9?LaI?V~@?dp@?_?N `?:?*? ?@?4p@> `?0?Dp@G_-?G_-?k  ?X4R]U_iudi;g_-b]*?j?tp@?V~@eH@dp@R]EG_-Y;ZJLaI*?LaI$p@_eg_-b]Qb@?7_-?B]?> `E_:?Tp@*E?N `? b@`?E?*$p@G_-_i @j_0> `Y @Za9dsGTOQb@?> `?Dp@@?0?Dp@LaIDp@?G_-?7_-> `?B]?B]?*:[`aI @OW_-4p@?@?> `?J?T?LaI?B]?7_-?*?U?N `c2i;S2T`F@E? ?LaI?G_-? ?0?J?_?S2?I @?a9?b@?B]$p@4p@B]I @X4O?P?Z?Dp@LaIU?Tp@?i @?G_-Dp@?$p@PeH@^WN `E?N `?r'?v?N `g@c2]6aY;Tp@I @$p@$p@?B]?V~@?0Y @iudp|GhR]$p@:?: ?4p@?@I @@?P?4p@PDp@?:?Qb@?S2?4p@R]en `l!`Z?@?G_-B]\aIeH@b]X4b]Y;?T?UOI @? LaII @?P?U*LaI? Dp@Dp@EOJOX4S2B]Dp@7_-?> `?4p@B]Dp@I @J?LaI?G_-c2f~@N `UV~@*J\aITLaI0?0*B]?07_-?Dp@?Qb@?*?Dp@?e?ab@*Dp@?S2a9I @?*I @^WT?O?V~@LaIW_-4p@EI @?:?O?@?:?]6?`F@I @`F@G_-TcTp@ B]V~@4p@?R]?B]EY;a9`X4> `?@?0?7_-?U?Qb@G_-Qb@@*R]Tp@?J?W_-?U?$p@Tfl!`f~@Dp@?T?V~@Y;b@Y;Ub@N `?c2?`EQb@:LaILaI?@?Qb@@U7_-Of~@dP? U_LaIE[`U$p@G_-P?O?Y @$p@00[`I @?EET0J^ `V~@? ?R]?W_-J?E?B]?$p@LaI*?^ `?_?Dp@?G_-?U?\aI?^Wc2c2W_-UV~@Dp@?Dp@?:R]\aIX4G_-?J?[`?Tp@?B]*G_-Qb@[`Dp@?:Uc2E?*4p@W_-a9N `?04p@B]?*?E V~@Dp@?W_-?N `4p@?4p@?:LaIW_-G_-*Qb@`[`E?$p@?J?> `0J_dp@Qb@?G_-?T?Dp@:UT07_-S2?$p@?ab@?W_-$p@4p@??> `JB]I @@?7_-LaIi;i @P?U?a`F@N ` Qb@Tp@0*?P?s2?tsG?@^WTI @?7_-?N `EU> `> `UV~@?I @?f?G_-W_-@? ?0?P?Dp@*?@?X4?^W?Y;?Qb@?V~@?[`?7_-S2P0?7_-?O?LaI?*B]V~@LaI?G_-?LaI?$p@?0?:PS2b@c2:$p@JTp@W_-I @Dp@S2Dp@?B]?T?EQb@O?@:`R] @B]?*?*JS2G_-B]$p@?7_- 4p@ G_-R]?> `0PPG_- ?E? J?@:@*$p@?:V~@R]*?0?Dp@7_-ZW_-> `?U?eH@?G_-Y;G_-?G_-?$p@I @0?LaI?g_-?v ?rU ab@B]?0Dp@V~@Qb@:*Pc2G_-?ab@?R]G_-Dp@Y;??W_-?Z?X4?Dp@4p@?J?b]?R]0?0?J?4p@?:?S2?Tp@?I @?@?J?U?S2?P?J0R]Qb@V~@V~@Dp@$p@:E?07_-c2[`$p@Dp@Qb@S2X4TR]E?$p@ :0S2\aIS2ZaJ?*?0?E?V~@?O$p@?7_-?4p@?Dp@?S2?J?0$p@LaIR]N `Qb@Z]6Qb@> `?@$p@Tp@@:W_-PI @X4I @0ODp@ *0LaITp@JJ@?**E?:?X4?EPP?LaI?d?i @?[`Dp@G_-?G_-?JQb@UE0?$p@0ddp@?B]?Qb@$p@Tg@4p@?LaI?N `?LaIV~@0?\aI?W_-?O?_?Z?> `?LaI?W_-?Qb@?I @?B]?Dp@?G_-?7_-?:?J?:E`F@g_-c]6U@7_-?Qb@?7_-Tp@Dp@*S2UY;a9\aIP$p@?4p@R]`F@Qb@Tp@`^ `TE:@?E?_?\aI?B]??:?E?P?[`?`F@?R]LaI_Y @W_-TOQb@@$p@G_-$p@?$p@Dp@? ?I @> `LaIO_U$p@0> `G_-LaI@R][`Qb@LaITW_-J?I @?_?Z?EB]O?*?P?B]$p@Dp@4p@?$p@?P?EEN `@?:?G_-W_-b]??S2?Zf*?B]@Qb@a9Z?> `?`F@?kr?qQ`?c2?$p@? ?*?> `?T?Qb@@Dp@B]7_-?$p@Qb@dsGb]^ `Z@?*?N `?[`?> `Dp@?$p@$p@Tp@I @JS2B]B]Dp@@Y;`F@JG_-Tp@R]J> `G_-Y;T?7_-?\aI?Y;?B]$p@$p@?? ?0?W_-?Tp@V~@c2Qb@JB]*?`?pF@?V~@ ?Dp@?G_-?a9?> `V~@TQb@0?J?> `@R]Dp@LaIY;E?7_-?Z?^ `?> `?> `?S2?I @E> `7_-T^ `B]?ab@?a@Y @I @?@?OB]S2?:?J$p@W_-V~@?I @?G_-?4p@*Y @ab@N `?P?g_-?i @?P:B]J$p@?S2?I @LaIY @N `@R]S2*J`Tp@ES2Dp@?:?Qb@?I @OP?B]?$p@B]?0?4p@?$p@?:4p@*?O?4p@Qb@R]Dp@*N `R]S2R]?Tp@?W_-?> `:JN `B]G_-V~@7_-?@T^ `@N `UR]? ?}6?K`?~B@?N ` P4p@?Y @7_-dsGLaI?G_-?O?JJE?TT ?> `?I @?E?*?@?$p@N `??a?_0\aI:?U?G_-JT$p@?[`?Y @4p@E? ?N `?R]*B]?: PS27_-P7_-?E?S2?LaI7_-W_-S2 ?E?7_-:7_-4p@N `B]?4p@ Qb@Y @LaI?4p@TV~@^W^W?$p@?I @O[`G_-?$p@:^WW_-? 04p@?7_-7_-7_-LaI?T?rU ?nW^WQb@? :W_-Tp@E7_-?:?T?R]OS2W_-I @TTp@?*B]R]> `ZdsGc20? ?b@??V~@I @Y @P?0Y @`F@?Y;?j?TEW_-R]??U?G_-Dp@7_-?7_-?0?E?B]LaIUI @:??E?:EY @ ?_?V~@?0?4p@?$p@?Dp@?R]?G_-?LaI?R]4p@N `?:UO> `Y @]6LaI?*?0@PB]?$p@?*4p@4p@?4p@?$p@4p@? ?0$p@7_-PS2?@?U?$p@I @UO?I @?Qb@LaI^WR]? ?$p@EN `PX4B]? JJN `\aI?I @?tsG?s2?OLaI$p@X4`O@Qb@Y @LaI?@?Dp@@R]@?J7_-U$p@N `Dp@Y @a\aIQb@?s2?.A`?x ?4p@??:?7_-? W_-??q?q9?JUUE?*?X4?`F@?V~@?P?Dp@?$p@?J?B]UY;? ?U?I @Qb@[`G_-@ ?J?4p@?> `$p@ZS2?N `?Y @ 7_-?*V~@b]@ Dp@0$p@Tp@S24p@@Y;^ `E?I @?G_-?$p@?J?B]?0?Dp@?04p@? 0T7_-?P?S2?U?O*EDp@OO?Tp@?^W?Tp@Y @a@?*7_-?`W_-?Tp@?`F@?Qb@?Qb@?Y;?4p@`ab@E@X4g_-e? ?V~@?7_-:?LaI@aN `LaI\aIR]Tp@Tp@4p@E?U0J?Y @?eH@?Z$p@Qb@?W_-?q?g@?7_-$p@?> `?4p@Dp@> `?LaI?Y;?Tp@? @?4p@?:@?T?^W?Tp@EV~@$p@4p@0?$p@0W_-U?*?LaI:PDp@`F@eH@B]?4p@?LaI?J?E> `> `?07_-^Wb@Dp@?Qb@?@E0?J?J?* EO?$p@?I @:Tp@I @?:?_?]6> `ab@`W_-O??_?eH@?Y @?$p@S2\aIDp@?$p@?$p@?Dp@?$p@Tp@TG_-LaIE?:?T_U 0T`F@ ?I @Qb@U:?7_-N `dsG\aIY;a9V~@OO?7_-?O?TcR]?Y;?eH@?S2PT?LaI?]6?LaI?> `?:?@?B]G_-]6Qb@?$p@?LaI?0E7_-$p@?J?S2?I @?Qb@?Qb@?> `I @E?E?R]?Dp@? 4p@4p@$p@? ?G_-?B]4p@I @R]LaI?> `?Dp@?LaI?T*TE?:?*EDp@?I @?V~@0]6Tp@? ?> `EPG_-?Dp@?Z?B]S2Y;> `?B]?0EN `O\aIb@N `?U?Y;?$p@> `B]OE?:?$p@Dp@ ?W_-?Dp@^Wh`@J\aI7_-?E ?4p@?:LaI:4p@c2cJ@0B]Y @W_-Tp@X4J7_-B]?*?U?JS2dsGW_-?> `?V~@?Dp@OP?4p@?B]T`F@0PQb@> `?I @?S2?*0O> `0?@?[`?T> `aV~@?G_-?X4?EI @Y @$p@?R]?Dp@?@?I @*P7_-?B]?O?> `*?*?Dp@@X4G_-?4p@?J?R]?T?W_-?> `U^ `UO$p@?07_-$p@?:?P?B]@Dp@$p@B]R]4p@?J?$p@\aIdW_-Qb@O 0??ES2?b]?Tp@^WjK`a7_-:Qb@?7_-?JR]J?:ELaIOQb@4p@JO*Dp@TQb@I @> `?$p@?$p@0_eH@X4:?4p@?E?$p@??$p@*?> ` e^W?LaI?$p@N `7_-B]Dp@0Dp@*U[`E* ?:?B]> `^W[` ?LaI?G_-I @b@O?T?J0> `LaI ?4p@*?4p@?I @$p@B]*?4p@?P?V~@?PY @`E:V~@G_-?> `?4p@7_-N `Qb@:? ?@? > `?0ETp@EB]JLaIQb@LaI?B]?* ?7_-UP?7_-TR]?E?$p@7_-?N `?I @^ `^ `ELaI?N `?T?N `?R]?J$p@@^ `Y @> `4p@? ?@4p@B][`Z> `@> `?7_-?Dp@?N `?P?4p@?LaIJ?q9?~?dp@N `?@? Z`F@c2[`$p@0I @*EO$p@?4p@Dp@Qb@?*?]6?b]?N `UW_-?4p@?@4p@ ?:?7_-?B]Tp@P ?Dp@?Y @B]Dp@4p@?0?B]?$p@0N `^ `Tp@?@? Y @U:0S2[`I @$p@EDp@?@?W_-?V~@?E> `Tp@4p@?LaI?I @4p@ B]0?7_-?*$p@?$p@Y;^WG_-0?> `?B]ON `?:?> `Y;ZG_-J?Qb@?Y @?P?]6?X4Y @U??> `?G_-?J*@7_-TI @?B]7_-?$p@?0?E?@T?T?`??{V.?4p@?O?EG_-> `N `ZB]?:?4p@ES2S2*?4p@B]J?P?eH@?b@?R]4p@R]> `?0?4p@?I @?Qb@?E?I @?@N `U@? ?N `B]LaI7_-?@?4p@Dp@B]7_-I @?B]E^ `]6\aIE?I @?0:?0V~@S2?$p@?X4?_?X4?Dp@$p@0*B]7_-?B]?@*$p@0 ?B]$p@^W\aI??E?*?4p@? O`F@a9O$p@LaIO:OO?:?:?O?Tp@?7_-?P*J??I @?W_-?Qb@I @Y;^Wg_-]6?7_-?7_-?0?B]7_-JDp@N `I @S2?$p@?À? ?xjHG_-Y @Y @S2?LaI?U4p@?$p@G_-TS2@ E]6R]?P?V~@0I @:?@?R]?O4p@$p@?Qb@TJB]> `?> `*??I @J0Dp@[`O@Y;UN `_P?LaI?G_-?@?E@P? ?7_-?7_-?R]?V~@?> `Qb@]6Tp@$p@?0 ?**PDp@?E^WJ?S2?G_-N `LaI? ?R]dsG`F@7_-@JPE?*?7_- :N `?G_-?a?B]PI @? ?P?ER]`F@fVpo`b]?*?7_-4p@LaIN `O B]ab@?$p@?h4?$p@krk  cY @?@?> `?J?JDp@LaII @ Y;dp@B]?V~@?@UQb@?:?B]$p@?Tp@?Z7_-J?Qb@?@TB]G_-?E?*?$p@LaIG_-?Dp@G_-iudc2V~@^ `> `?Dp@JUG_-LaI?> `I @ ?`F@?Qb@I @Dp@??0:7_- EPDp@ G_-R]R]Y @[`?R]7_-c2_$p@?G_-:cab@?Dp@@R]J$p@?@?7_-4p@LaIY;U?O?`F@?TB]?B]?LaITp@PX4cE?N `@Y @G_-@> `$p@? ?Dp@b@f~@`F@a9Z?7_-?^ `?\aI?EB]> `?V~@?dp@?Tp@ER]G_-7_-^ `a9?4p@?_?O?*?:?**$p@E?I @?ab@?$p@Tp@?0Y @?Qb@4p@??I @?:I @? ?dsG?X4X4Y;Qb@Y;7_-?O? O\aI`7_-?0Qb@*?^W?R] ?$p@*Qb@4p@?S2?a?Y @? JLaIS2I @?LaI?U$p@UZY @0?0Ue`LaI$p@Eab@]6? ?*R]Y;N `??J?$p@Qb@X4W_-LaI?4p@?0PLaI?N `?ab@?UG_-X47_-@Tp@?@?^W?$p@Tp@N `LaIN ` ?J?Dp@4p@I @EB]?0?Z?h?qb@?qb@?f~@?7_-T? ?d?^W:W_-\aITp@4p@R]Y @?7_-?Tp@?B]?N `?JOX4 ?N `?Tp@0`F@R]OZ?Y @?B]?_?a9?I @?@?dsG?fV?Dp@:> `G_-4p@?*?$p@S2]64p@?7_-Qb@U ?*?0?> `:Tp@Dp@?> `?S2?LaI$p@7_-I @B]?^ `?dp@?@4p@@S2> `?R][`I @@7_-*OP7_-N `^ `ZR] ?O? W_-T0*I @W_-U?Y;?_?JJR]:R]^ `?`F@?W_-?7_-? B]T:?P?E*?:?N `?N `?\aI?c?{r?k?Ņ?v ?Tp@V~@[`?Qb@?`F@*UR]E?4p@?0*?4p@J?*R]S2?$p@?7_-0 ?0J^ `UPT> `?B]?*?Tp@?c2?Tp@B]7_-?ER]@?> `?*> `$p@?0B]Y @B]?B]7_-[`S2$p@*G_-@ Jab@Z:EI @ ?Tp@?J7_-?G_-?T?4p@?Tp@??P?B]?07_-G_-\aI^ `Tp@X4R]?$p@?$p@Dp@$p@?E?0I @Qb@? ?W_-?V~@?> `$p@?$p@W_-ab@> `?V~@?Y @?O?E?Dp@$p@?P?Dp@ ?0??> `?b]?a ?' ?"! ? ?`?eH@@^ ` ?b@?P*B]*?G_-?LaI?Dp@:Y;J? ? ??0:PI @4p@*EUR]:UR]?*?0U^WDp@> `[`LaI?G_-V~@J?$p@R]N `?:?7_-LaI7_-?J0[`7_-?Qb@Ei @`*P_J $p@ G_-E?Y;?dp@?O?R]?^ `?O?T?b]?R]4p@> `:7_-EV~@Tp@Qb@`b]O* ?? $p@$p@?0?W_-?b]?V~@? ? ?G_-?O?7_-LaIU> `?0?7_-?> `?J?G_-*?4p@0R]S2Qb@?B]?q?u?(?sY?=? ?x?PJN `?^W?V~@*7_-Y @`:?E?7_-J\aIN `?*?:?:JEJ\aIY @:> `X4[`:?Tp@Y;LaI$p@4p@4p@?N `?R]> `7_-?B]B]^WTp@?E?$p@B]?7_-$p@?B]?Y @ ]6Dp@?B]B]ZB]?T`LaI 0?$p@??R]?^ `?U?Qb@?LaI?B]?Y @?b]?N `> `I @PPI @B]> `S2`W_-:> `I @Qb@]6\aIDp@?:?Qb@?V~@?I @?$p@?@?J?:@B]> `EE?0?Y @?R]ES20I @^W]6G_-?Y @?sh,?Ġ?$= ?Æ9`?`?|?~W?a9 V~@?Tp@?I @PI @Y @dp@P?$p@$p@Qb@T7_-?*?4p@?4p@I @Y @[`ZJ0ELaIJN `G_-7_-?> `$p@ ? ?:?7_-?Qb@?V~@?4p@?> `?X4?J*7_-? ?S2?U?$p@?0?0G_-[`W_-ODp@??7_-> `V~@Qb@??I @?O?Y @?X4?Dp@?:?X4?N `$p@ ?I @?> `7_-$p@?0@[`[`:? Tp@Z?0?R]B]adp@feH@Y @7_-?7_-?:4p@$p@B]I @JI @B]I @Qb@??a?[`N `Y;??0J:?> `?V~@?dp@??`?0o@?0 ?M/`?u?dp@?4p@B]?Y @?ELaI 0R]:? 7_-:??Dp@?Dp@? ?E:UI @?7_-?O?TX4S2N `> `J4p@ ?LaI?:?$p@?0I @J?*?0?G_-?ab@?fV?b@?P?*?G_-?O?@?B]?> `4p@N `Qb@S2S2W_-W_-7_-?N `?I @@Tp@LaI?*?X4?a?a?V~@N `?7_-?X4?0LaI0$p@\aIc2@?R]?4p@^WeH@N `? T`F@0?> `W_-hdY @UY @N `?$p@?E?4p@B]Qb@OLaIS2Y;T7_-I @4p@?\aI?ab@?B]?G_-?I @?4p@?0I @?k  ?6?Q?V?)?iud?^ `?> `?*?Tp@?0@?4p@?*> `:JO?0?U?G_-JV~@0?7_-4p@B] ?B]?JLaI@@PPZI @?G_- ?> `Dp@7_-?\aI?ab@?N `?N `?`?a9?Qb@?4p@?*?0?S2?I @$p@4p@$p@ :I @Dp@?*?P?> `R]\aIB]?Qb@?Y;?Qb@?I @?Dp@?G_-?Tp@?G_-N `X4> `:_dp@@?U?@\aIdsGTp@7_-Tp@`[`V~@^WaP?@?@LaIV~@@?0?7_-@UN `Dp@X4]6E?@?Dp@07_-?Qb@?`F@?R]?:?B]B] Edp@Tp@?f~@?y @?Ԡ??qQ`?Y @?R]?Dp@*:B]B] $p@@N `^W[`?0?Tp@$p@ZS2?*?4p@$p@ Dp@TB]? ?> `?U?LaI00I @@?> `?G_-> `7_-?4p@? ?Y;?t?v?_4p@? ?$p@? ?P?G_-J?W_-?O?4p@?J?R]?J?4p@?4p@?4p@JQb@?Dp@?G_-U^ `7_-?7_-?$p@?*?@?B]?N `?Tp@?Dp@7_-> `4p@> `O?O Y;V~@N `Qb@G_-*PN `?O?\aI?R]Dp@TPOI @JR]@> `ZR]?LaI?X4?> `::?7_-?J?:$p@ ?0?B]?*EDp@?P?h?po`?f~@?*$p@?Z?TN `P$p@4p@ @Tp@Tp@ ?::G_-?0?R]?> `*JX44p@?Dp@?LaI?Z?Tp@? ?B]?B]O?> `?R]?B]EB]?V~@?tsG?x4?e?Dp@*?b@?`F@JG_-?N `?E?*?:?:? 7_-?:?Z?B]G_-Tp@4p@?JE?:?0R]G_-?I @?Z?d?`7_-JLaIN `?$p@EU$p@@\aI*?c2?a9? Dp@?> `?X4?U?*E?Qb@UEJI @LaIY;Dp@?Tp@?P0N `LaI@4p@EQb@O?0?]6?Z?U?a?TPO?I @`:?dsG?Tp@O?4p@?V~@$p@Dp@? ?$p@?*:I @@ ?B]?O?I @?> `> `::?$p@ G_-?*?G_-:4p@X4 ?S2?O$p@N `I @?^W?h?\aI?N `?S2? ??f~@?a9R]Y @7_-7_-4p@4p@4p@*G_- ?`F@?b]?LaIG_-4p@?X4?W_-I @N `?LaI? aU?0?G_-?dp@?dG_-W_-N `B]?W_-?@Dp@?Ja*?a?Y @LaI_I @?7_-? Dp@> `?N `?Tp@7_-B]?:> `\aIW_-LaI*?*4p@B]Tp@N ` ?$p@G_- ?V~@?I @??^ `?[`V~@V~@?Y @?W_-E ?S20I @?V~@?S2Tp@V~@Dp@B]?> `?JJ]6Qb@?Dp@? 4p@?7_-?7_-4p@Dp@I @0?**? ?LaIQb@V~@P0?$p@JG_-? 7_-??*?G_-?\aI?P?Dp@?_?N `X4Y;Qb@P*?4p@?> `?:> `G_-?> `?V~@?S2?7_- ?Tp@?d?Tp@N `I @?I @?4p@P4p@> ``*?Y @I @S2?J?S2?k  ?x ?l!`? G_-^ `_? ?G_-B]_a9Qb@@LaI@?4p@?O?I @7_-?$p@?Y;?0[`P?0?@0?*$p@W_-N `?B]?Y;?_?LaI4p@? 4p@R]?0?@]6W_-?[`?a9? Tp@V~@U0?J*\aIY @V~@J?S2?I @^ `_:? ? G_-B]?W_-?^W?$p@S2Y;?T?x?w?^ `?Dp@?E:U ?$p@Qb@b@eH@W_-?$p@ Qb@I @: ?S2?[`?Y @?W_-?N `7_-$p@:??J?I @ JB]G_-R]*?G_-?R]?b]?c?I @> `:?B]?G_-?4p@4p@c2E?Y @> `U?> `?]6?v ?ׄ?tsG?*S2`F@T?Dp@?4p@N `UP0Dp@Tp@?LaI?> `? 7_-??Y @?R]*4p@?@?O?B]$p@Tp@\aII @ ?*?X4?T7_-:0I @?$p@?7_-\aIdT@S2c2b]Dp@?@PI @P]6:?^W?@aQb@?@?*? 4p@$p@?[`?\aIUS2?p??q ?dY;$p@Y @?> `?PJcc2W_-B]N `U:G_-?Y @?b]?^ `?@0?*?I @?$p@E?7_-?]6?0O?: b]W_-?> `?S2?]6?U:*?G_-?P0?I @Dp@4p@?EV~@b@PE?a?u?jK`?> `?000?Dp@?$p@@JO7_-7_-G_-?4p@?7_-I @I @EP7_-?@?@B][`0?^W?R]Tp@aJ?@Dp@a9R]4p@O> `*S2> `?Dp@$p@X4b@ab@W_-]6W_-?4p@ZP?*> `V~@ ?X4?$p@V~@$p@?B]?:?> `?*?Qb@?:N `G_-> `?jK`???Qb@h4I @$p@Y;? ?P?$p@*?4p@?*:PN `?7_-?JB]O?B]?]6?Y;?G_-:E?@?$p@Z?a?l@?{V.?W_-?O?EY @Y @@4p@?@?B]> `G_-?P?LaIQb@B]?I @OT?0S2`F@B]S2U?@?J?LaI?Z?Qb@?:?0> `G_-OY @J? ?4p@?G_-0ab@c2aeH@c2S2:T`F@?*?d?PTI @?W_-?dsG?Dp@\aIZR]Tp@$p@ [`Y;$p@?> `?0N `W_-Dp@JLaI?:$p@\aIP? ?4p@?> `$p@?> `?7_-?I @?LaI?Dp@?Qb@?E?E?> `?dsG?iud4p@\aI0?Dp@?*J0?I @?^W?T?*? ?LaI?X4?0G_-?0?LaI?7_-?*B]U?0?7_-S2?w_-?l@? ?s2?0?@B]LaIR]?:?R]G_- ?J?4p@TLaIB]Z?d?B[?}<?e?Z?R]4p@Dp@*?0?> `?7_-?> `JTI @N `G_- ?*?> `ZfdsG[`Qb@Qb@R]Qb@:?Y @?a?7_-?Tp@?b@?dp@?Y;?7_-B]Dp@?> `?E:@*4p@EO?ER]N `B]B]**0?0?I @?J?> `?B]?:?$p@?G_-?* ?]6?`@^ `P4p@> `J?@?`4p@@LaI?Tp@?N `?B]?Qb@?I @?> `?P?E??O?N `*?$p@?*LaI?$p@?G_-> `?w)?? `?q9N `LaI?LaI?E?4p@?]6?b@?B]@0?$p@Dp@I @Tp@?G_-?0]`?Z??X?,%@?b]?LaI0I @@LaIW_-$p@?Dp@Qb@`G_-B]Qb@V~@N ` ODp@?P?X4?I @4p@?:?N `?N `?4p@?[`?G_-?7_-?S2?:OO?N `?I @?7_-?J?@ER]Tp@Dp@?Qb@?Qb@@G_-7_-7_-Dp@`F@cY;> `:Dp@?B]?U?00:Qb@I @4p@?T?dsG?R]PQb@?@?*Y @4p@?W_-?Y @?P> `Dp@?E?G_-?4p@?LaI?@0? ?*? ?R]?T?4p@?O?U7_-@?B]?$p@?b]?zV?vV?OTY @E?V~@?b]?]6?b@?c?LaI07_-$p@> `B]?i @? ?jZ?S?s?V?q9LaIU?:G_-B]X4dsGG_-?G_-?$p@JZZE0?7_-?T?@Tp@V~@?> `*LaI@?LaI?N `JB]?U?4p@b]^ `?Dp@?[`?@E0?*0LaIO?Y;?T@J ?@?Qb@?:]6h4Tp@?:B]V~@?B]?S2Dp@I @0UW_-4p@?$p@?Qb@?JG_-O?G_-?Qb@ ?$p@?$p@?`?`? G_-?E?J> `E@E$p@B]$p@?4p@?B]?]6?ab@?4p@:?G_-?T?N `?E:4p@^ ``F@?7_-?Y;?E?B]?Qb@?Dp@?*B]0?$p@*?@?f~@?9\?3`?n@?G`?G?wǀ$p@Qb@T?@?Z?E4p@Qb@Y;?W_-?S2?:$p@@I @W_-Y @G_-> `X4fVd7_-?P?B]?7_-?N `?JN `? ?`F@?R]W_-S2?Tp@?`?ER]V~@*?> `:??EB]??LaI?J?R]?T?4p@$p@?R]?^W?*0?W_-?OG_-?0?N `@@?:? ? ?::\aI\aI7_-?> `?G_-?N `*?@?Y @?0I @?> `?I @I @Y @TP4p@O^WZ0?[`?c?\aI?Qb@?N `?T?Tp@ B]?G_-?@]6b@> `?N `N `*0*E ?I @?0?Tp@?b@?g_-?%f?|`?Ζ?!? ?7_-Dp@R]@*N `E?$p@4p@?4p@?Dp@?*$p@0?$p@\aIb]U?T?G_-Y;S2?S2?W_-?R]?U?4p@> `?7_-?O?O?*?4p@?I @?7_-*Dp@G_-?4p@?Qb@?7_-$p@I @\aII @?J?G_-*0?B]?V~@?[`?`F@?]6?I @?LaI?Z?@?$p@?`?Y;: LaI?:?X4 TPTp@\aIN `?:$p@I @?P?I @0?0?LaI?4p@$p@LaIX4J$p@Pdg_-U?G_-?^W?c2?_?0B]??*?I @ W_-Tp@0 0??:0Dp@B]J?4p@?]6?G_-?B]?`F@?S2?x4?'??@?q?Dp@LaIUb@ab@> `?7_-7_-G_-X4Y @UW_-B]N `S2E?Qb@?v?y @?LaIY @?B]?B]$p@?E?Dp@?:?P?*J4p@?J?T?*Y @ZE4p@??> `$p@$p@[`dE?Dp@> `TE?*?> `?@?:Dp@?*?ab@?JTI @Tab@?*?_?Dp@?$p@?@G_-c2]6?*?> `R]?7_-?Dp@ ?:?Qb@?Qb@:Y;E?0:Za9Y @?R]?Y;?Tp@N `G_-B]7_-:S2Qb@4p@*?N `?Z?[`?S2?G_-?4p@:? ?U?B]@?:?X4?d?v ?{`?nW?W_-?*> `7_-[`ZB]B]R]N `Uab@Qb@?Dp@O> `*?Dp@?:?4p@?p?w@?TP?B]:[`?4p@?]6?Y @?Tp@W_-P?B]?T?W_-Tp@7_-B]LaI7_-$p@B]^W`?ER]Tp@?0?*JP7_-P_W_-V~@Tp@:[`R]Qb@V~@?E??> `?@Dp@UJ?E?R]JEG_-@B]G_-? OS2?:?P?$p@4p@J?T?Tp@?@?I @?V~@?LaI0@S2> `?*@B]?@?P?V~@?ab@?b@?Z?7_-N `O?4p@0??_?eH@?Y @?V~@?[`?N `?Dp@?N `?0Dp@OR]Y @[`PJR]?$p@?X4?@B]G_-?ab@?c??0?T7_-B]?G_-Dp@^ `?*?]6?OI @UP? ?$p@OTp@?@?0?:?N `Qb@W_-P?4p@?B]OO?Dp@?@G_-Qb@*?:N `]6$p@$p@ab@^ `JTI @?:?I @?*G_-:?4p@G_-Y;N `G_-?O?4p@@N `4p@*I @OLaIN `4p@?Dp@?$p@G_-?7_-?Tp@?$p@?U?T?7_-?R]?b]?W_-?:?Dp@?0Dp@?$p@?LaI$p@:?> `?B]?@?T?Y;?U?Dp@Tp@dp@*?c2?N `R]?*?`F@?^W?U?E?LaI?Z?> `Qb@PS2Y @Tp@UO 0B]*4p@ER]I @?_?m?[`$p@B]LaI> `? :B]?4p@?E4p@Tp@Qb@Qb@Qb@0I @dp@`F@4p@?B]?S2?W_-?\aI?\aIU:$p@Dp@7_-:0?B]?> `:TQb@ :Dp@?X4?Y @S2X44p@JG_-?LaI?W_-V~@@?:OW_-Dp@UTp@?@?N `?I @?@?> `?B]?B]?$p@??J?N `\aIb@7_-?W_-?@B]? ?:?*?:?7_-?O?$p@G_-?$p@?O?*? ?W_-?^ `?J?4p@?0??7_-Tp@?4p@?eH@?W_-OR]4p@?4p@?*G_-? ?PQb@eH@X4UT> `PI @?O?:X4]6J> `Za? ?_?W_-?@?4p@?:?$p@$p@?@?U?G_-? 7_-E*N ` 7_-_Tp@? ?T?]6?V~@?UI @?LaI?Dp@TJ?@?P?O?7_-Dp@_cP@P?$p@?O?0I @O ?*> `X4O$p@?0?Dp@Qb@Y @?:?Dp@?N `?$p@?4p@?V~@?S2?N `?`?_]6b]X4$p@*V~@Y @Dp@7_-N `*?S2?PB]Qb@ ?> `4p@E?N `?b]?R]?*?G_-?*E$p@?G_-?R]?Qb@?4p@ > `S2$p@?N `$p@Dp@7_-\aIaR]S2B]R] ?^ `?R]?:?P?Qb@?7_-UaDp@$p@PG_-?$p@?J?LaI?B]?W_-?]6?:?*?G_-?4p@?I @?7_-G_-? ?$p@G_-?> `?J0?7_-?@?J?N `?:?Y;?S2> `? ?P?LaI?:7_-R]\aI\aI> `4p@`F@ab@N ` ?Dp@?0I @LaII @Dp@7_-LaILaI?$p@?J?Y;?X4:N `\aIG_- G_-> `?G_-?0*?Tp@?]6?B] G_-`F@ab@W_-Y;ZB]?4p@7_-Qb@?7_-?^W?Dp@N `7_-?@?:4p@S24p@?Tp@?B]?U?Tp@N `P?@?N `:?Dp@?> `S2:?R]UE$p@PT?@?:N `?> `?U?iud??ud?w_-?O0G_-?7_-^W[`G_-*?> `?I @?LaI?*I @?:?Z?@ @Tp@$p@? G_-?:?EG_-@G_-O?G_-?X4?J?N `?7_-??O?:EI @PQb@G_-*?I @?B]R]ZP4p@?4p@$p@OI @Dp@: 0?:?Y;?U?S2?Qb@?4p@?OEDp@4p@@B]*G_-O??Dp@? ?S2\aITp@J@?7_-?Dp@> `T ?LaI$p@@?J?Qb@?@?B]?$p@?7_-?Y @?I @@?@?R]4p@Tp@PB]4p@*?:`F@a9S2X4V~@?*?]6?TW_-W_-?Y;?Qb@4p@?I @?E??`?]?B@?Y;?> `@?*Tp@O4p@G_-0? B]O?*?S2Tp@^ `a> `?*LaIG_-7_-E4p@@Dp@?$p@?$p@ 4p@ULaI?> `$p@G_-? ?*7_-*?E?J??*?* G_-Y;O$p@ EG_-?T?aG_-??*?W_-?c?[`?S2?:? :G_-7_-?0?07_-Qb@R]:?4p@?B]?4p@?$p@?B]?Qb@?J$p@I @0B] ?LaI?@?> `?O?R]?_?U$p@4p@ @Z[`B]7_-7_-> `]6dp@_V~@Dp@??R]?OX4T?Y @?@0?R]?R]? ??c?y?c2?:`dp@O[`LaI?:$p@:@B]?Dp@G_-OR]Y @_B]?@B]Y @J?7_-?Dp@?*?*7_-X4G_-7_-`F@^WB]> `?B]?`?Y @?*Qb@Y @0?7_-?*?:*:PU ?O?7_-TW_-?N `?S2]6ab@7_-? ?O?Z?g@?b@?4p@B]PS2?4p@?Z?G_-7_-Dp@N `I @?:?R]?E?0?B]?N `?G_-?7_-?:?E?07_-*N `W_-B]?0?0?0?$p@Dp@I @*I @Qb@G_-TV~@B]> `::\aIZ0ON `?EOU?R]?R]??0o@?9?0 ?^Wg@g_-Te^ `?*$p@G_-R]T?$p@X4^WI @? ?7_-?Dp@7_-\aIDp@?Tp@?E*?> `*Z@S2J:LaI?Dp@?`F@?Qb@0\aI`F@7_-*Tp@E0EG_-B]?@?ab@?ab@?JEN `?I @?OR]Tp@ *?$p@?4p@?`F@?S2R]\aIY @W_-?0?Y;?B]?*?Tp@?JB]OB]*?$p@?0?4p@?J?Tp@?Dp@4p@:? 7_-:> `ER]V~@?Tp@ S24p@?7_-?$p@Dp@^ `_S2G_-?0?J?$p@G_-b@dG_-Dp@Dp@?Dp@V~@eH@?0?G_-?w?VR@?'? ?U?*]6B]e`F@N `V~@Tp@W_-> `0Y @R]?:?O?P?N `?J?N `Tp@?Y;?$p@O?:?7_-N `G_-I @0?_?UQb@:?I @?4p@*R]U4p@Qb@:*G_-> `?:?a9?h4?T?*?7_-?*?G_-?U?E?$p@Dp@ ?4p@0LaI^WX4LaIN ` ?E ??Y @?X4$p@V~@O?4p@?B] ?$p@?Dp@?> `?G_-?O?4p@7_-?*?Y @?`F@?S2?*$p@@W_-7_-?Y;?P@$p@?E?> `4p@N `LaIV~@^WE?0*$p@@LaI:E?Qb@$p@eB]?S2?S2?q?w?i @?`F@?G_-@?Tp@?Dp@a9P?4p@X4\aI:? ?Dp@?UG_-?N `?P?Dp@?B]?> `?4p@*LaI?7_-?]6?E ?Qb@?J@T^ `?0?oM/`?dp@UTp@?4p@?G_-?LaI?@7_-LaIO$p@:?$p@?P?`F@?TPLaI?LaI?::?$p@?4p@*@I @@]6Tp@E*$p@ Dp@G_-?Dp@?@? ?Dp@?^W?\aI?J?R]?Y;?P?J?E@?@?^ `?_?Qb@?> `4p@@?W_-?T$p@:? $p@4p@?4p@?G_-> `^ `S2*?7_-?> `?*?I @S2?B]?R]N `Dp@?U?W_-?P?R]?Z?^ `? I @?B]*^ `0?> `V~@Y @?R]?]6?G_-X4X4?0?O?7_-0JTp@[`Y @??Z?V~@?R]?V~@?@> `R][`?0?h?T_Z?J?Qb@?: G_-LaI> `E7_-?> `?B]?B]Y @I @?B]Dp@`Y @PDp@?7_-?0LaIOS2?> `?Qb@:? ?*$p@EJ??R]?N `?I @?Tp@?S2?P?S2?J?4p@?Dp@?@> `P:?0?*? ? :N `:??@?S2?I @G_-O> `ELaI?:*UV~@E :?P? [`I @?Qb@?N `? ? ?I @?P?4p@R][`N `Qb@R]?4p@?E@I @0?0?I @?4p@LaIP??P?J?:Tp@`F@X4?0?T?Qb@?B]B]@EUE?:> `]6W_-Dp@0> `P:?G_-?J?*@Qb@@B]Dp@ > `_d[`S2E?@?7_-LaIB]$p@?Y @?TLaIR]? ?0?0?I @?*G_-?@$p@OP:?7_-? UQb@?Dp@?LaI7_-R]N `@B]B]??:?> `?@?Dp@?4p@B]@?$p@*TUE:LaITp@E7_-G_-?> `?R]7_-]6Y;> `?@?$p@PI @?*B][`W_-V~@ZY @Tp@?Y @?[`?@07_-*7_-7_-?> `?N `?> `?4p@?> `?LaI?U?G_-7_-?Qb@?P?0Dp@Y @V~@00V~@]6V~@OG_-Dp@ELaI[`cX4?:?X4?T?4p@@@> `OP ?> `OV~@Tp@I @Qb@_a^WY @*?G_-?Dp@E@?**$p@?G_-UN `> `R][`]6Qb@?$p@> `ab@Qb@?U?Y @?@ ?Dp@?*N `I @?@?Qb@?J?4p@*?B]?G_-?I @?T?G_-EG_-?:?I @?$p@*?4p@?Dp@0*?W_-?OTW_-O_Z@LaIJ?$p@PX4]6Y;TQb@?7_-?c2?b]? \aIT?4p@?:?I @?S2$p@Qb@Dp@?4p@?W_-?T?4p@?E?Qb@?*0Dp@X4Qb@?7_-?0PY;UG_-$p@??4p@Tp@^ `Y @I @?4p@?R]?S2?Dp@ $p@7_-$p@?4p@?LaI?E4p@S2cg@_E?> `?$p@?R]?LaI?@?$p@I @JG_-V~@> `?*4p@PJ?:? S2*?U?R]?7_-??B]?W_-?R]Dp@U ?O?J?0*? ?T?Z?O?Qb@?N ` ?@?b]?_?@?7_-?O?Dp@G_-J?G_-?0[`N `?0R]^WE:Dp@?$p@?O?:\aIkreW_-Qb@?U?LaILaIdp@a?4p@?Y;?B]4p@G_-Z^ `UJ? ?4p@*?0?Dp@::?*B]E?> `?4p@Dp@B]7_-B]0?N `?Y;?> `Dp@::LaI@?:?Tp@?R]?*?*?J?@?4p@?0> ` ?Tp@?> `JI @B]? ?^ `?c2?N `7_-?O?dsG?^W?:*> `4p@?? ?4p@?V~@?]6?V~@?E:> `?G_-?B]:0 ?B]?@?:?O?7_-@> `?*?Dp@?E?B]?G_-?V~@?Qb@> `Dp@? 7_-??X4?@N `:?4p@ PY;G_-N `LaI?7_-?E?0? B]UJ?E?LaIW_-krfV[`P*> `@?_?m6?[`?@?S2?B]O[`]6W_-Tp@U@Dp@$p@?G_-$p@?E G_-$p@Dp@S2$p@?4p@7_-$p@?U?Y;0Tp@4p@?? ?0?*?4p@?I @?:?Dp@?B]JTI @TT0?0?Tp@?h4?g_-?I @Dp@?T?d?X4*?> `?E?I @?P?U?Y;?U?N `?B] ??J?0@Dp@J0?P?Dp@I @J?0?LaITLaI?7_-?J?B]?4p@?> `^ `cR]G_-B]0Y @c2Qb@7_-@4p@I @J?> `?4p@X4Y @?*?O?$p@I @W_-W_-4p@?:7_-S2:?EI @? ?r?  ?l@?[`$p@7_-I @> `04p@@P> `R]R]?:?0?B]ODp@OW_-*?B]?:? S2X4O:?J?V~@$p@W_-Qb@0?4p@E?4p@4p@B]R]]6I @?$p@7_-$p@?N `?EP@?:?I @?@? ?$p@?B]?> `?7_-?> `?4p@*?:?> `?B]?@> `LaI:7_-?$p@?N `?$p@JI @*?@Y;Tp@?:?G_-?$p@7_-7_- Tf~@ab@I @ X4^ `*?0*??*??S2?PY;h4X40::@PR]J?@?d?]6G_-?]6?7_-?W_-?Mv??]?Y @OUP??> `?4p@?0B]G_-$p@S2\aI7_-$p@> `?04p@W_-E *?4p@?N `?I @?Dp@N `Dp@B]R]E?P?V~@4p@ULaI?N `^WR]*?N `?\aI X4?*?R]?> `?O?W_-?I @P?P? LaI?E?:? ?$p@?:0*?$p@?J?J?7_-$p@LaIOB]> `??B]?$p@> `??O? ?N `?Qb@?I @?* ?Qb@?PV~@eU?:?LaI$p@Dp@?E?W_-?@?*?@?LaI?I @0Tp@P7_-?$p@?B]?4p@@W_-_@?^W?OV~@0?\aI?U?a?v~@?xjH?a90Dp@]6dsGU: ?$p@LaIU? E$p@$p@> `?$p@> `^ `O?B]?I @?Dp@?R]?\aI?P0?N `W_-*?T?:Dp@?04p@\aId]6I @?O?ZN `?$p@?y? ?~?y?@?zK`?g@?O?a?$p@N `?0?P?E?0?*?R]?[`?J?*?0?@?S2?Qb@?$p@00B]U\aI> `?J?J?Qb@?EO4p@?Z?W_-?E?N `?P?S2?N `?7_-?Y;?eH@?7_-ab@^W$p@?Dp@B]?*?T?G_-4p@?> `$p@?X4?Z?:?*?N `?R]?> `4p@Tp@`F@P?> `@]67_-?Qb@?W_-?dp@?a@\aI$p@?$p@c2po`_?*?@0\aI]6??B]> `?4p@> `UN `?LaI?`?T??U?`F@B]_?B]?_? B]?Dp@?> ` Tdp@`F@S2?$p@*P?sG? ?+?`? ?`?{?nW?7_-E:?Dp@?I @?LaI?G_-?*?S2?^W?B]7_-4p@?LaI?T?7_-? ?@]6fO?S2?X4?Qb@?$p@TJ?B]?4p@?7_-?$p@?*?:?B]?[`?ODp@I @$p@LaIJ ?*:LaI?*?ELaIB]?b]?cDp@4p@> `R]Y;Dp@?0B]O?*?@?LaI?ab@?Y @?:?Z?4p@fVlaI?> `?q9?nw?EV~@TDp@aP?B]Qb@R]@$p@@R]LaI?Dp@?]6?B]E?LaI?\aIEY @?Qb@?b@?I @?0?Dp@?O\aI_Qb@?7_-4p@?a9???. ?h>? u`?'? ?`\aI]60?4p@?0?0G_- ?I @B]:Dp@ ?> `?$p@?O?B]I @W_-0?S2?ODp@OG_-@J ?G_-B]$p@*E0?@?G_-?E?Dp@:R]?Dp@?a9?LaITU?@?OQb@N `?\aI?X4N `S2LaI[`Y @LaIR]V~@B] B]B]7_-4p@?G_-?N `?P?_?Y;0a9]6?f~@?}@?wq ?_*?7_-0ZI @?I @*c2b@4p@?E0UP?> `?X4?$p@Y @J OP?:?O?> `?4p@?0* ?7_-:X4[`J?N `?B]?nw?98? ? ?;@???8E?7Qb@P?$p@?$p@N `G_-4p@I @7_-?*?$p@S2S2G_-Dp@?7_-?T?R]?P?V~@?Y;?U?:> `E7_-*7_-?7_-?LaI?00 LaILaI?B]?P$p@4p@?i @?u:?g_-Dp@LaI?LaI?POT?LaI?LaI> ` 7_-^W\aIJJI @> `EPG_-B]R]Qb@*??0?*> `LaIR]T?R]?pF@?j?Qb@$p@Dp@?7_-?[`?V~@?E?7_-G_-b]`F@ ?P?$p@OO? ?N `? U]6aaQb@7_-N `]6_LaI?$p@0Y @_W_-R]Dp@?J?N `?[`??O?n@?DT??$? ?:?0 ?E?Dp@JS2?I @?B]B]EW_-^WLaI4p@7_-?Dp@?T?N `?Y @?dp@?a?P?*$p@?*?J?P?E?$p@? ?*$p@4p@7_-?Y @?S2W_-Y;? ?Qb@?j?rU ?b@$p@?O?N `@Qb@?:?LaI? ?$p@0O4p@I @:?$p@0E?:0G_-*?$p@ N `[`TQb@^W]6I @B]Dp@Tc2P?`?h?UEW_-R]:?4p@?Dp@B]0?4p@?*Dp@I @7_-U_> `?:N `k  p|G[`?Dp@:c2`OB]0?I @?Y @?V~@?pF@?wǀ??;@?<?%0`?e?`@P? ?Dp@Dp@Qb@?G_-?b]?Tp@I @Y;_dW_-?P?P$p@??:??@?G_-?$p@? *> `?S2?^W?X4?4p@7_-?7_-?G_-7_-:?4p@?N `?a9?^ `JR]?G_-?Qb@?T?Tp@7_-Dp@?Dp@?LaI?Dp@ B]?7_-?I @$p@I @N `4p@?R]?G_-R]J?B]?4p@*?I @?^W?P@@?$p@?0*PW_-V~@Y @^W`X4I @Y @g_-^W?@?_?TJ^ `LaI 7_-Dp@E4p@?B]?R]\aIJ?[`?W_-0?7_-?Y;?:af~@:?LaIN `]6B]7_-LaI4p@?@?Y @?b]?]6?`?q?|?Հ??M/`?b@Y @^ `:?$p@G_-G_-?P?a9?PJS2N `R]??^W?I @PG_-??> `7_-S2$p@?7_-LaI`F@Tp@?4p@?R]?V~@?T?O?S2?Qb@$p@7_-?Dp@?O?[`?`?G_-?> `?U?LaI?Dp@?7_-PB]?S2?Qb@?4p@$p@E0?4p@7_-7_-0?B]?@@$p@?EI @?:?Y @?:Qb@I @?4p@?:$p@TS27_-@Qb@> ` OY @Tp@R]4p@?I @0_Y @OUR]Dp@B]4p@?*@c2]6?Qb@?\aI? ? ?Tp@?N `4p@$p@?Qb@?> `\aIW_-?7_-S2G_-: ?B]> `?dsG?u~c ?q?dsG?c2?V~@B]Dp@?E?E:Dp@ ?@?@7_-Dp@?*?B]EY @B]?Dp@?Z?I @:?B]?ON `cY;7_-*?0?V~@?S2?I @?Qb@?7_-B] ?Dp@?J?LaI?B]?S2?]6?S2?W_-?Y;*B]?Tp@?X4?:4p@N `LaIDp@:?Dp@?P7_-Tp@7_-?N `?Z?P> `J?4p@?B]OY @*?> `? ? 4p@Tp@P0> `B]?7_-?7_-B]::b]dsG@7_-\aIW_-EG_-?B]B]a9ab@W_-_a9R]ER]> `?E?I @?*? ?4p@V~@T?$p@7_-Dp@N `ON `_c ?c2?`?P?I @?0? ?X4?Tp@7_-X4b]X4?7_-UPJI @ *7_-?4p@??`?b]?@?:?JI @??I @*?:4p@I @?P?UELaI?:?> `> `@?O?`F@?R]?J?ODp@W_-?7_-?W_-?G_- ?:?$p@?R]?$p@X4O?Qb@?_?G_-:?$p@?U?JLaIR]?$p@?Dp@? *Dp@PLaIEDp@? ?LaI?7_-Dp@*ZcLaI4p@J0?4p@?:?Tp@?`dsGTp@7_-> `P\aI\aIB]?@?N `?> `G_-P?$p@?> `JP?:?N `0N `$p@G_-> `?N `?Tp@ PTR]I @P?@?7_-Tp@c2i @\aI?O?Dp@TR]LaIE?LaI?W_-?N `?O?$p@*?]6?eH@?E?E?Dp@?*?N `?[`?N `*W_-^ `?E?_LaI JI @?7_-?Tp@?0E$p@7_-Qb@?LaI?@?4p@?J?\aI?_?7_-O?P? Dp@? ?4p@::?B]?Tp@?N `? 0?@?LaI?B]$p@?7_-?R]?J4p@PB]?@?B]?*00OP?$p@?B]0E?O?\aI?PG_-Y;UDp@?@?O$p@B]?Qb@?Z> `V~@?E?W_-:Qb@?$p@?@?0?T?dp@?Y @@Tp@Dp@4p@Dp@V~@> `LaI^ `X4Qb@*?S2?@B]?0?7_-*?G_-?U?J?Qb@?LaI?B]?]6?_?4p@?*?R]?@JJ?$p@?*> `B]Tp@_7_-?T?B]:JR]I @B]LaI4p@ :?:?S2?:?0? ?> `?W_-?b]?PQb@I @?Dp@?0:$p@> `R]Dp@? $p@4p@??7_-?:?S2?ab@?Y @?@?G_-?LaI?@?R]?Y;?@B]OI @?G_-?]6?J $p@OX4PUY @4p@?@?4p@??*?N `?_?Y;W_-_Y;?N `?@?0?P?LaI7_-4p@?S2?PB]I @$p@?> `?N `? W_-T?0?@?> `> `@TY; ?LaI?7_-0TY @?4p@B]7_-?*?7_-?> `?4p@?7_-?LaI?*E?$p@?J*X4ZS2PTp@E:S2J?> `?:4p@Qb@UDp@G_-[`E?LaI?G_-?B]?J?*?$p@? **?7_-?:4p@7_-@[`W_-?$p@?PDp@?$p@> `S27_-?G_-?Tp@?Z?^W?Qb@?:?J?J?0?E?Qb@?G_-?B]?4p@0?7_-?S2?B]$p@LaIV~@4p@?$p@??I @?I @> `*?0?J?B]Dp@Qb@E?> `?> `$p@? ?7_-*0?E?J*B]?0?> `??@?:$p@Qb@P???*:Dp@V~@X44p@?*B]Y @c2f~@`F@LaI7_-?Dp@?E7_-ZW_-G_-Tp@W_-> `> `O@4p@ELaILaI> `$p@> `?> `Dp@$p@0I @LaI?:?W_-?0OOE ?B]?Dp@?7_-*PQb@:?7_-?Dp@JheH@0R]G_-?:LaI?S2?Tp@?:**?*?E?> ` 7_-0?4p@?S2?T?7_-*?4p@?Tp@?N `?7_-?G_-?E?> `?Qb@?PEE> `* ?0?$p@> `?*?W_-?> `I @?$p@?LaI :B]W_-7_-?P?> `7_-?0?Qb@?U?U?J?@?4p@> `Qb@E:TY;V~@Tp@LaI@LaI^Wa9Qb@?4p@?LaI?P?LaI> `a_N `JE7_-OP?:$p@B]Qb@O?@@J?B]?G_-@E?:?N `? V~@]6I @? ?0?:?J?G_-4p@R]O0?@?I @4p@`F@`F@OPY;LaI@G_-?@?V~@?:R][`J?$p@?7_-?4p@ X4`P?Dp@?@JY;7_-?J?P?R]?R]?7_-I @R]7_-?:?:0Qb@UP4p@?@?$p@N `0?P?$p@@?Qb@?`F@?B]B]ES2U? ?PQb@4p@?B]?I @?@?*?> `?0O[`??E> `JQb@Tp@ ?I @?Dp@E0?**?4p@?:> `Dp@??4p@?4p@> `4p@7_-?Dp@?7_-N `]6Y;B]?$p@$p@?:P4p@?J?Y;b@W_-?> `B]LaI?> `?LaI4p@G_- ??$p@? 7_-7_-4p@TW_-7_-S2S2?4p@?E7_-Tp@X4O4p@$p@?*4p@ceH@Qb@N `> `?> `O\aI?E?R]PP?B]Y @W_-N `$p@?7_-G_-Qb@P> `?0?*4p@$p@Qb@I @?Qb@?Y;?0:*EQb@?E4p@G_-?4p@?P?> `LaI\aIE?0> `[`?:?R]?*?4p@O?$p@Qb@N `?@?I @JS2$p@?N `?> `?E?LaI? ?4p@?*?> `?Tp@?R]Qb@R]E> `?N `?Tp@?4p@Dp@7_-?@?Dp@4p@R]TP7_-7_-X4W_-?0?E?*?O?Qb@$p@B]$p@?O?J@G_-?I @?U7_-U: ?*ETDp@?> `@eY;?4p@Tp@Z?7_-?B]?s`?r]Dp@aN `Qb@N `*:? ?7_-*@$p@?0?O?LaIG_-`F@S2?*?*Dp@@O`N `?$p@@@?O?]6?U?LaI??[`?TX40?> `??@W_-PJ`W_-?B]?O?$p@Dp@Tp@Dp@?7_-?$p@ ?G_-?P?:?:?I @?@?@?X4?Y;?S2T7_-?: @?J?[`?7_-?S2?V~@?$p@?> `?: ?$p@0?7_-> `?:?h4?_PB]?Dp@G_-U? ?J?0?0?^ `?d?B]O:?> `?Z?_J?> `?Qb@?LaI4p@^ `0?N `_dsG?0?> `?c2?|G?,%@?[`TQb@O7_-?0?@?> `JX4?Dp@@G_-*??O?Qb@*LaI> `07_-Dp@EB]W_-a9JS2S2??0?$p@?B]?Dp@?V~@?eH@?_PDp@? 4p@R]Tp@Qb@V~@LaI4p@> `Dp@P^WY @0?4p@?4p@?*? ?@?R]?LaI?*?:?LaI?S2X4Qb@4p@?B]*]6I @?E ?V~@?O@4p@?E?J?J?Tp@?P?@?LaI?> `V~@*?i @?]6[`O?7_-Ub@R]?:?Qb@?ab@?a9?7_-@?$p@?O?a9?c2?:?*?]6?W_-?> ` E?:?E^ `W_-?O?I @?u:?v~@?S2J@?*?:?OOa> `@`F@Qb@?7_-?*?0?:?> `?J?TJ?4p@Dp@@4p@?7_-Y @J?$p@S2`F@E?0?G_-?V~@?LaIQb@LaI??*?:?B]EY @Dp@?0G_-^ `W_-Y @c^ `$p@?O?O@Y;7_-?I @?4p@??:Dp@Dp@@J@?:7_-c`F@0@J 0LaI7_-? ??Qb@?P00?> `4p@$p@?\aI?S2I @::__N `B]? ?O?Y @?R]*? 4p@?:?T?0?7_-?Y @?J? *?:?I @*?I @?^W:S2?G_-?0TG_-?7_-?S2?O ?@?S2I @V~@?4p@Dp@eH@T?> `?$p@0?J7_-f]6?:?04p@?4p@?J?@I @Tp@?E?Z@^ `Dp@?$p@?4p@^ `_0?E?7_-?Qb@?W_-G_-c2:?UX4I @JY @I @?0?J?R] U> `?7_-?:?Qb@?I @G_-E?7_-$p@TO:]6Z0$p@N `TV~@I @?7_-?I @$p@4p@?h4?wq ?j?B]?Y;?I @?G_-?S2?N `?> `Dp@X4G_-$p@4p@?4p@?Dp@?B]$p@*> `]6Qb@?EI @? ?@?@? G_-?O?N `?Z?Z$p@@0Z]60?:?E?:$p@?B]?B]Tp@I @?T? _U@JDp@JS20:a9^W? ?0@$p@?0> ` ?T?W_-7_-?:?7_-:B]?*X4a> `?Qb@?E?$p@?*R]ab@4p@?R]7_-U7_-B]Qb@?4p@?J?R]??*?N `?Y @?`F@?7_-_Qb@?LaI?0PR]LaIG_-Dp@Dp@ ?Dp@?4p@OW_-7_-?S2?\aI?Dp@?S2?ׄ??@?a?*?_?R]?@?U?P*G_-$p@?* ?7_-?O?$p@? ?G_-Dp@I @Y;G_-?Qb@ab@X4??Dp@*O?J?I @?U?U?@?LaI?B]ON `$p@:B]G_-I @? *\aIN `?I @? S2PQb@V~@E@V~@O? 7_-LaIG_-@?*?B]?I @?O?Dp@?$p@?Dp@?7_-$p@> `I @@?04p@?G_-?R]PDp@G_-4p@0\aI`F@G_-S2^ `> ` N `?I @04p@?Qb@?^W?V~@B]b@J?^ `?`?G_-B]V~@@?B] @?J?Tp@$p@@?J?\aI?X4?4p@?[`?~@?#& ?P@?_I @?P?Dp@?> `?Qb@7_-_J?T?R]?O?`?B]?LaI?0JDp@PDp@?J4p@dab@Dp@*@0?4p@@?I @?Y @?N `?G_-?4p@G_-JDp@B]*ER]:0Qb@G_-?$p@@@> `Dp@*?7_-7_-TG_-*4p@ *LaI0?J?N `?B]?$p@B]:?O?V~@? 4p@?B]?0J?N `?O? R]LaI?*? @LaI\aIW_-B]^WP*N `E:W_-LaI?P?Qb@ LaIX4I @?T?`F@?EI @P? ?EDp@X40?$p@J$p@?]6?^W?4p@O?wq ??w_-OS2?4p@ ?4p@?EPb]@?`?_?$p@?O?_B]]6?4p@?I @EO?4p@^WY @7_-0*?0Y;a94p@?J?$p@$p@Dp@S2R]?R]?*O> `?0? *??7_-7_-LaI0$p@7_-?@?B]N `W_-I @*?*7_-W_-G_-?B]? OV~@Y;LaI?G_-?P? ?0?Z?W_-*B]?*4p@?0B]Dp@> `I @ ?LaI?@N `I @? $p@7_-:I @?*?X4?:G_-> `V~@a9Dp@? V~@Y;$p@?4p@7_-V~@_[`]6cV~@?Dp@?LaI:Qb@E?LaI?[` Tp@**I @?7_-> `O@?Qb@?Z??4p@?X4Ec7_-?N `?Dp@?J?:?0?T?> `TI @?:?4p@*Dp@Y @\aI> `?@@? 4p@W_-Y @?S2?7_-B]?J?:@@N `]6I @0I @?N `?> `??? ?@X4T*7_-I @LaIX4]6TG_-> `$p@?4p@?:$p@_Qb@N `$p@?0G_-LaI7_-JI @?:?I @?$p@??4p@ ?I @?J?$p@0 ?P?S24p@ETW_-?^W?g_-> `?N `?*JER]`a9c2c2Y;JE7_-?4p@?Dp@?P?Y @?Qb@Dp@Qb@? 4p@S2G_-?0@$p@?]6?Dp@U ?O?7_-?Dp@?T?^W?b]?Dp@Tp@E?*$p@I @Qb@LaI0?> `?I @?$p@4p@4p@TX4@? 04p@?@?T?ELaIW_-JLaIS27_-> `$p@?7_-?J?V~@?I @?Dp@?Qb@B]@7_-?*?> `G_-`F@b@[`I @LaIY;UG_-R]Tp@]6Qb@0E:?0> `?$p@*LaIE??E?R]?Tp@?*N `Dp@?B]?*Tp@@?Qb@?LaI?h4??'?p|G?U?P ?Qb@V~@LaIG_-`eH@ZI @Dp@> `?$p@?Qb@?]6?a?X4? > `*7_-:Dp@W_-TDp@Qb@$p@?`F@?X4?$p@?T?X4 4p@?Dp@?V~@?Tp@Dp@?$p@G_-:N `W_-G_-EN `?$p@?E4p@E7_-EN `EDp@I @@?> `?Z?W_-$p@S27_-?E?LaI?> `7_-:G_-@? 4p@Dp@?I @?_?U?I @LaI?*JV~@UQb@0LaIP> `?@@a9[`*? ??> `?> `$p@I @> `G_-> `?E?G_-?:?I @[`V~@?@?:Qb@?f~@?n `?u:?'??q?R]0I @?B]?Z?@*?0Zab@V~@N `TS27_-7_-?R]?T?EI @LaIE$p@ Dp@O?*?T?Dp@?G_-?ab@?\aI@$p@4p@O?U?@?7_-?Y;?$p@Y;> `G_-g_-_G_-W_-G_-> `B]7_-> `G_-Dp@?7_-?[`?]6?0B]?:?]6?[`?7_-B]E7_-*:LaIN `?S2?V~@?> `B]US2*I @E0> `?*?T?J? ?*?O?*Tp@LaI?4p@?4p@:Dp@?Dp@> `E4p@?E? > `?> `? a9c2? ?Qb@? ?LaI?n `?qQ`?h?g_-?h4?a?EJP?0?P?N `?P?@Dp@PE@JO4p@?@? TS2?Dp@?Tp@0OB]G_-0?X4?X47_-:?J?> `*?N `?]6?G_-?$p@0B]]6Qb@?LaI?I @?Tp@?eH@?E? ?sh,?w@?ETp@?0Dp@_UJ@> `$p@?G_-?Y;?U?> `?$p@?@$p@> ` ??Y @?]6?0?N `?LaI> `OX4Qb@?4p@?P?*0*:??Qb@?Dp@?0?:?B]?*?$p@*:?$p@?B]?$p@4p@N `7_-?0> `*?U?Eb]k  T?G_-?G_-?J?ab@?b]?7_-I @?*?Z?Qb@:7_-?B]?G_-?N `?O > `?Dp@?T?E$p@> `??LaI?:Dp@LaI$p@$p@Qb@I @?$p@> `4p@?\aI?Y @Dp@?Qb@$p@?Y @?S2B]?E ?*\aIc24p@?*?7_-?S2$p@?V~@?Mv?%B@?w_-?W_-?Z[`S2G_-4p@?@LaI$p@?> `?J?J?0Tp@dT?S2?J*?V~@?b@?N `?Dp@?G_-:Dp@?:?4p@OX4 ?X4?N `> `B]??$p@4p@B]0? 4p@@?@?\aI?[`?Qb@?J?J?@7_-E?? I @??]6?PS2aQb@?> `?G_-4p@G_-? ?7_-?G_-0I @?N `?`?J:JLaI?4p@?\aI?[`?Qb@?B]4p@LaIE> `@Dp@G_-PX4LaI?B]P?*U*?J7_-$p@?Z?Qb@> `?$p@?J$p@?$p@?R]7_-U?0?:B]4p@P?x??m?I @?Qb@0P 4p@:UY @N `G_-7_-?0?7_-?0?0OfTp@?]6?S2S2G_-?0??B]?W_-I @?Tp@?TB]a9U?O?ODp@7_-?I @?G_-? 7_-?4p@JLaIOT?*?a9?`?LaI?Dp@?J?0I @:?J?0Qb@@?7_- *?7_-?B]?B]?4p@LaIX4?Tp@?Dp@Dp@W_-`F@J?a?i @?G_-Y;Z$p@?U?Tp@?$p@?7_-?R]?0S2Tp@4p@4p@00T]6N `ES2R]V~@V~@?G_-:> `?O?V~@?E?> `?7_-$p@??Qb@?G_-?7_-?X4?R]7_-7_-JZ4p@? ^ `]6G_-Qb@4p@?J?G_-OV~@S2OTp@J4p@I @I @?Tp@Dp@?Z?W_-EODp@@?$p@PLaI4p@0I @a\aI?E?O:?0?Y;?Qb@?0?:?4p@ ?Qb@OI @:V~@N `?7_-?0 ?Dp@?J7_-W_-Dp@?LaI?LaI4p@I @S2*?Qb@?N ` :4p@?Dp@?eH@?jK`?S2I @N `@?$p@?W_-?[`?4p@I @$p@?U?`F@?P7_-*?Tp@?W_-?S2?P?0?Qb@> `c2\aI4p@0OP ?Qb@?N `$p@> `?> `?Z?V~@*R]Qb@Qb@@?$p@?7_-?E?G_-?$p@> `TU\aIb@V~@Dp@Dp@?0?I @ G_-R]R]:7_-7_-?$p@> `_]6B]*N `I @?E?R]?@?I @?G_-0I @> `:`F@^W@OR]?B]?Dp@@?7_-?Tp@?E$p@$p@??[`E$p@?Dp@EJ?0 ?LaI?P N `N ` ?V~@?dp@?^W?B]? ?:?I @?@4p@B]?7_-?a9?p?p?`?B]?R]?W_-Y @U?7_-?7_-?> `?E?N `?@*?B]?\aI?G_-?S2?LaIB]?0?]6?:\aIY;?*> `?X4?^ `?:7_- ?B]?W_-?Tp@I @ab@b]eH@`F@4p@4p@UE?B]?0J> `?B]?00?B]?O?> `?4p@? $p@7_-TX4Dp@0?> `?T V~@E0PY;UB]:0?Qb@?]6?$p@Y;Tp@?4p@?*W_-N `?N `?@?J?0Dp@?$p@?:N `Y;J0?*?TQb@> `?Dp@?:?_?S2?0?Qb@?X4?Qb@Dp@X4?N `?m?iud?Y;?Z?W_-?E?G_-?G_-?4p@?:?O?^W?c?W_-?$p@?4p@?@TjK``?*?$p@4p@?0?7_-*?Qb@?@7_-?4p@?G_-?:?Z?G_-Dp@G_- E?W_-?R]Dp@@?I @?I @?:?@N `Y @`S2?@ab@Y @?O?OJB]?> `> `LaI?N `?[`?@4p@7_-*W_-Y;N `J??N `*0?R]?Dp@LaIR]Dp@4p@S2`F@@?P?*Qb@P*$p@?:?Qb@?B]?J?W_-?@ ?B]?4p@B]G_-?B]?7_-?*^ `UB]?W_-?Dp@Qb@O?J?i;?l!`?I @W_-?0?dp@?T?$p@?Qb@?LaI$p@?0?P?I @?Dp@4p@?I @?> `Tp@Y @@G_-R]?E?W_-$p@?a9?~w?wX4*?$p@?7_-?7_-?:?J?4p@?E?E? ?$p@?:?B]?0@> `?*7_-N `?B]?^ `?> `Qb@4p@?Qb@?LaI?@?S2?:TT?LaI?X4 :0]6]6?I @?U> `LaI? ?7_-0J:> `Tp@J4p@J?$p@?X4?Dp@4p@ ?> `?N `0`F@X4@I @$p@?> `$p@7_-?0Y @X4?B]?Y;?@??> `?$p@?0?I @?I @?P?Dp@> `b@X4? JY @JB]T\aI$p@?i @?r}`?f?B]?Dp@?G_-G_-LaI?G_-?B]I @G_-@?W_-?OLaIN `?*?4p@?J?g_-?a ?}@? ?o`?i @Z?E?JDp@4p@?S2?Y @?@?*?4p@B]LaI? ?G_-?O?I @ 4p@7_-O$p@?`F@?`F@@`F@:?W_-?I @> `? ?G_-?7_-?0G_-?R]?@? ?N `J?LaI?7_-X4I @?I @?7_-:? ?B]:X4ODp@Dp@?B]?Qb@*?$p@?J?4p@LaIDp@Tc7_-?\aI?G_-??G_-G_-jK`d?@?W_- EEJ?0?S2?B]?B]?JN `eU?@X4X47_-:a9a?LaI?h4?f~@?^W?O*Qb@?`F@?^ `?*G_-Qb@B]?$p@?:?Y;?Qb@?> `?B]B]$p@?`F@?U?o`???t4p@?I @? ^ `T?Dp@?J*$p@? I @Qb@G_-Dp@?07_-?4p@?G_-?a9?Qb@Tp@V~@?> `?Y @0a9V~@*@*? OLaI?I @?J ? ?@:Y @7_-?@:Dp@?B]?> `PS2?$p@?$p@?P?J? ?$p@0$p@?N `> `eLaI?W_-?G_-?4p@?Tp@?@R]Dp@?U?Tp@@R]R]R]??R]?4p@?*?N `Tp@eT?0?$p@:I @*> `eH@i;S2? ?Dp@?S2?@Dp@P? ?\aI?^W?@JW_-> `?B]*G_-?$p@?OY;S2?$p@?@?R]?w_-?T?]?jK`?@0V~@]6N `?$p@O:?Dp@?0> `Y @b@R] B]?U?LaI?E?V~@?I @$p@?$p@?Tp@?Y;a^W:*Dp@O\aIR]?J?LaII @T@?*?B]> `? O7_-?G_-? O4p@?I @?G_-?:?E?:$p@? ?I @?U?LaI: ?Y;?G_-O4p@?4p@G_-Dp@?LaI?Z?U?N `?I @ Tp@O**?*?N `?B]?:?I @Qb@Z> `4p@B]Qb@Qb@]6^ `W_-ZG_-?Dp@?::R]U:? EX4X4?I @@ZR]:?> `?I @B]N ` :?7_-?r@?~B@?u`?X4?B]?4p@TY;> `??E?B]E@?LaI?LaIY @eH@Tp@?@???R]?:@?> `?Z?[`?U?P?Tp@?S2$p@N `?$p@?I @7_-TQb@:?*Tp@^WQb@?:?R]?B]?7_-?00 ?4p@*?:?@?:?7_-?0? 0@?Dp@?b]?[`$p@0?G_-?Dp@?E?N `$p@V~@O?$p@?O?I @:U[`_I @?J?@> `*?0?> `?:Dp@B]?: G_-4p@R]E?$p@?:B]X4$p@?P?: I @Y @LaI7_-PQb@7_-?B]?I @> `S2:?*?@ W_-7_-?X4??y @?X?vV? JDp@UE4p@?@?V~@E?4p@?0*> `TI @?E?7_-7_-JX4?^ `?_?Qb@?7_-?E?[`?R]$p@?> `?V~@?0$p@?O?I @EJ7_-LaIS24p@?$p@G_-S2?O?EN `I @?7_-?::?> `?4p@?@?$p@P@?Qb@?EB]@B]> `?LaI?V~@?:??**S2b]`F@TS2?W_-?B]X4\aIDp@? ?$p@0? > `Tp@E> `E ?Qb@?[`?@> `?:?@B]7_-7_-E?:?Dp@I @@?LaI?V~@?I @4p@:?0?0I @Y @0?\aI?> `Dp@?f~@?y @?po`V~@I @$p@?7_-:]6G_-?JI @:G_-B]?B]?:$p@?*I @:Dp@O?I @?:?4p@?4p@?> `?U?P0?0?U?Dp@?G_-?b]?Y @> `?Y;?N `N `Y;[`cc2E?B]?:*Dp@*?Dp@X4LaI??*?J?JEP7_-LaIQb@7_-I @P?*$p@?:?R]?J$p@]6c2LaI?0?:?Y @?@\aIb@T@@?]6?$p@LaITZ\aIW_-OG_-??Z?Y;?4p@? B]V~@I @EG_-?LaI?N `OQb@?@?Tp@?E*?B]? ?4p@? ?Dp@?PQb@*@B]?B]?Y;?Tp@0ZW_-Dp@Dp@JN `Y @U?G_-?@?*$p@?$p@?Qb@?O?:?@?4p@? ?Dp@?Dp@?*?G_-?:E?LaI?> `?B]?V~@?G_-?P?ab@?U> `Y @\aI]6X4I @JQb@*?J?S2?N `@`X40??Dp@?B]B]POW_-LaI?7_-Dp@TT*?G_-?T?EQb@V~@??Dp@?$p@?Qb@?7_-S2[`S2JN `? ??Q?:@4?*@?d?f?ino?e`?U`?fV`?k@?T?E`?X.@`?`#?h.@`?i*@?a?Q?RX ?c-?a?Q?Y*@?VV` @BX RX U`GX`X.@``#GX`:@[@gX`a?*@?0#^ ]. J@QBX 0#P#WX`[@Q?>s ?0#J@J@D? @?Y@?\Y@?$VV`Y@GX`0#44:@4@#Y@_] S-*@4Y@`#U`LY@@#?@@@#?@?4BX VV`U`E`?0#? @?D?P#?E`?@GX`LY@?:@?Ns 4J@?*@?RX ?P#?O] ?Ns *@J@?*@0#WX`?$?I@RX LY@?LY@?Q?@WX`[@?4?I@*@?BX ?Q4Ns *@?#n ?k?LY@?^s @?c=?i*@?m. ?eC&?E`?bX ?s͚@?rj?j@?dm?dm?h?f?a?S-?D?WX`?\Y@?Z@?dl`?^s 7X`QO] BX $VV``#Ns RX ab[@?DTl`c=dmc-Q7X`P#Y*@da@?@D?7X`?7X`O] D @@#0# @QWX`7X`?BX ?0#I@WX``Bih.@`fO] @:@*@@#Y@Q*@J@Tl`[@X.@`TLY@ @?E`?Tl`?U`?O] ?U`?Y@?4Ns U`J@?GX`?Ns J@:@?bX ?dm?@#?@#?Tl`:@[@DNs _] *@?Ns 7X`D?E`?Q*@^s RX ? @U`aS? @?Y*@?DGX`P#?qM;@?[@?^ ?a?@#?P#?c-?_] ?dm?e`?S-?gX`?|?]?u ɠ?^ ?P#?U`?RX ?T?RX ?@#?J@?Tl`?Tl`?^ ?T7X`LY@TO] *@U`bX \Y@a`#I@QWX`E`S-e`kgX`S-BX LY@>s Q\Y@I@LY@S-?E`?J@Tl`\Y@[@`#D?0#P#Q?:@?LY@TY*@Tl`bhRX ?>s ?7X`?7X`DaU`4QX.@`U`VV`TI@?4?Y*@?VV`?J@?GX`?$?:@?Ns 0#\Y@\Y@J@?4\Y@O] ?`Bi?^ O] Y*@0#J@`BiWX`Ns U`LY@*@P#TJ@Tl`Q?P#?LY@c=h.@`>s ?I@?:@:@J@?g?`?lC?4?BX ?b?Z@>s ?J@?fV`?`Bi?gÅ?y*@?}. ?p ?J@?BX ?P#?:@?D?T?RX ?Y*@?Y@RX Ns ?@?:@WX`aSI@O] `#afV`c-BX WX`jCc=TZ@c=bY*@Y@Tl`@$P#Q_] b?Q@#U``Bii@aE`@#?:@?Q*@Tl`Y@RX ?$?$Q4?I@?@:@LY@X.@`O] P#aS`BiE`@#U`>s ?T?J@BX P#X.@`T*@D_] bX VV`*@:@aaS? @?P#E`aX.@`>s I@Q7X`*@S-T@#RX [@QQ@?aS?RX _] Z@0#>s :@E`I@?p?4?no?\Y@?RX ?f?GX``BiBX ?[@?Q?Q?gÅ?kY?]. ?GX`?RX ?S-?@$?4?J@?^ ?]. GX`i@f7X`?BX X.@`fTI@X.@`[@eC&gX`WX`X.@`fV`aJ@GX`TY@]. ^ WX`GX`J@TTl`bdl`@?WX`@U`VV`^s Y*@BX ?BX \Y@_] VV`O] ?D?Z@?4 @?BX $QO] LY@S-^ c-\Y@LY@>s Ns a]. ?@?D*@BX GX`4?J@?O] *@S-LY@?0#?>s GX`[@RX ? @?$LY@LY@?@#?J@$?*@?J@>s T:@E`I@?4?7X`?>s ?VV`$]. 4?0#:@0#LY@RX ?$,? ??u ɠ?O] ?]. ?GX`I@?Ns ?$$?@#?Q?Tl`?Q?D?*@7X`LY@Ns @#?>s ?I@4RX QGX`BX S-`#]. Tl`RX O] Y@bX \Y@P#RX P#GX`LY@P#TX.@`TI@Ns Tl`RX T`Bi_] @?P#>s Z@@#?4$RX bX dY*@TX.@`4?GX`$BX ?7X`?0#BX I@P#Z@`BiU`@#J@X.@`Y*@Y@E`?I@?O] ?$? @?GX`?Y@?`#?[@?>s D:@?LY@?\Y@?Z@?I@I@X.@`E`? @?7X`?Ns ?Ns ?*@?BX ?VV`?>s :@$@#D?D?GX`?*@WX`^ @?BX ?7X`?@#E`LY@?u?D ?3J?qO] :@?GX`?T?Y*@?Z@?P#?:@?:@?Tl`?a?T0#4 @Ns Z@S-GX`RX I@?VV`?c=?4S-GX`U`c-X.@`BX D@#LY@Y@U`Tl`Z@WX`P#LY@QX.@`Q>s J@I@@DWX`TGX`7X`I@VV`4?@#I@Z@Y@dmi*@`#Ns P#X.@`VV`TU`GX`?7X`?D?*@0#LY@U`VV`O] 47X`TWX`*@?Y*@?_] ?@Z@Tl`?E`?^ ?T@S-]. RX ?E`?aS?gÅ?dm?:@Z@VV`?7X`?O] ?7X` @@?$?D?@>s 0#@#Ns $? @4BX S-S-@?$?4?:@:@???m?[@U`U`?$?T?VV`?Y*@?Tl`?:@?*@?VV`?c-?P#D @?0#WX`bX I@@]. c-?Ns ?lC?TU`O] Y@dmI@TGX`$VV`\Y@^s eC&_] E`:@O] `#aSWX`X.@`J@?:@4RX E`Tl`Y@E`O] O] >s bX ns dm^ aSVV`BX >s BX Y@dm[@ @?@7X`$BX O] WX``#_] Tl`S-Q?@#?eC&?`#O] fZ@?GX`?WX`Tl`VV`Y*@U`? @?Tl`?Z@?WX`?J@$:@?4?GX`? @4@#P#QE`@#*@@#TE` @44 @@>s BX :@@#?$?no-?p ?gÅ?c-?Ns >s 0#?$?$?*@:@:@?*@?GX`0#X.@`LY@:@^ c-@?RX GX`dl`E`?`Bi?BX a`#`#a*@7X`eC&]. >s VV`RX GX`^ Z@BX BX Ns _] e`bdm[@I@\Y@DNs U`4P#Y*@?@@#f`Bi>s Ns VV`O] 0#? @Qdl`Tl`?I@?@X.@`P#@I@Z@U`@? @VV`aNs ?O] ?b?VV`Ns [@4?GX` @Y@X.@`7X`@#S-J@$7X`D?I@?7X` @?7X`?I@?:@E`a\Y@?@?Tl`?P#>s ^s Q?$$?*@?$*@I@RX QLY@>s ?dl`?Y*@?eC&?lY@?[@4E` @?7X`?0#? @?*@ @Ns P#VV`daGX`I@P#?$?GX`BX ]. LY@?GX`*@dbX WX`X.@`Ns Z@lCe`WX``BiQBX :@4RX GX`@#VV`_] e``#7X`Y@i@VV`7X`@#P#Z@?RX ?`BiI@Y*@$4TTl`I@@@#]. RX ?J@?@#O] @#?>s E`aS?@#?}d[`?r ?dmbX O] ?O] ?S-?*@P#O] ? @? @P#_] Y*@O] VV`^s VV`J@GX`E`?J@?@#@?BX ?WX`?LY@DZ@GX`?Y*@?i@?c-$_] O] ?:@DJ@LY@>s >s P#RX P#I@?c=?`Bi?f?bX ?BX >s J@?Y*@?^ ?Y@?Y*@?BX RX P#D^ `Bi?E`Ns c=aD?>s S-@#?7X`P#bX c-h.@`e``Bib]. Ns 0#?Y@?[@E`Ns ?7X`? @P#^s X.@`@#_] lC]. @>s :@LY@VV`?*@?TGX``BiGX`?*@ @BX GX` @?@S-[@@?>s $?4?S-[@?b?*@?'`?xc^s RX ?$7X`O] Y@P#?@?BX ?J@?GX` @RX ^s X.@`@#7X`$?:@?>s ?:@?7X`?@?GX`?S-?7X`*@?7X`?P#?`#?\Y@@RX @?BX @I@WX`Y*@>s ?@4:@@#>s ?E`?T?`#?O] ?@#?E`7X`@?a?gÅ?a?WX`?:@>s ?@?:@O] O] ?E`?*@Ns 7X`RX fV``BiBX $ @?D?RX S-gX`Y@S-\Y@S-LY@Tl`\Y@I@?f?r?TVV`@#? @7X`7X`:@Q`#aE`?*@Ns Y*@I@BX RX RX X.@``BiS-?@?4*@BX ?0#LY@Y*@GX`@#Ns 4?D?0#T?Q?X ?X`?m. \Y@D0#O] O] J@@?0#?7X`?_] ?eC&?Q? @?@?:@ @7X`?@7X`P#E`0#?0#?D @? @?Ns ?0#E`?@?:@E`GX`?0#?*@*@?@@E`?@?LY@?Q?VV`?E`7X`4?@#?T?4?Ns ?Y@4?Z@?c-?T?0#?0#?J@?Ns ?@LY@*@?E`Ns a7X`?$:@?D?:@WX`Z@S-GX`$Y*@c-$?@#@#? @?D*@Y*@]. ?\Y@?w ?p BX T*@?*@?Q?@#[@^ $?J@?GX`D]. 4?P#GX`aU`RX U`P#O] VV`X.@`P#BX @#*@$X.@`bX U`*@VV`[@?Z@?h.@`0#Ns ?GX`?0#0#*@ @?>s GX`LY@?pw@?x?Z@ @?Ns ?:@?@0#0#VV`c=[@P#7X`?*@7X`DI@S-?4?DE`D?@>s GX`?E`?Tl`?@#?4?P#?a?f?X.@`>s >s ?@?BX @?>s ?Ns 0#@#?:@?GX`@#?>s ?]. ?O] :@@#@Y*@`Bi:@?*@?O] ?h?[@ai@dl`c-VV`Y@`Bi>s ? @BX $@#O] bBX ?s=?v?S-BX ?*@?@#?T?BX ^ VV`?LY@?J@?>s ?7X`E`?*@?^s @bX T@#RX WX`[@_] bX c-Z@4?E`?0#X.@`_] I@? @ @]. inoTl`?@D?@?Q?D?GX`I@:@U`?lY@?-?.@`?͚@?@ @BX *@?LY@?Ns ?GX`>s Z@P#J@RX J@S-WX`Ns S-J@?GX`?I@0#?0#E`S-$?@#BX @?S-?Y@?7X`BX ? @?:@?D?0#?GX`?I@?$ @ @0#J@?@?X.@`?:@>s ?@0#WX`^ WX`LY@RX ?f?^s [@dm`#^ J@RX ffV``Bi]. X.@`Y@LY@? @VV`\Y@?c-?q?O] >s ?>s ?$@@#\Y@Ns ?:@@#BX ?@#4@#?>s LY@dY*@GX`E`DGX`LY@Y@aSZ@>s ?*@?$>s 7X`?4?>s *@aSi@E`?LY@@7X`@?>s ?^ ?@#Y@S-$??E?4?>?dmE`O] ?S-?Ns ?Tl`?O] *@*@Z@`BiX.@`D?$$GX`J@S-I@?@ @BX BX GX`J@Ns Tl`RX I@S-\Y@Ns ?Z@?[@?Ns ?BX ?U`?T?O] ?T?LY@?J@?GX`4@?GX`7X`O] @4I@>s @#P#WX`BX ?Tl`?LY@QY@Tl`J@?$Ns klCbX `BiaY*@0#?DD]. $?@#X.@`^s @@TY*@[@S-LY@X.@`S->s Y*@bY@Y*@[@S-P#I@4BX GX`I@LY@@#:@4?*@?@#?BX ?44P#aSbX $?4RX RX D?:@?dl`?VV`J@4?I@??b? ?VF@?no-I@0#? @:@?Ns ?VV`$$?$RX Z@:@?P#?WX`?E`@#_] dl`S-:@TE`?D?$@#0#7X`O] X.@`^s ^s LY@?kY?eC&?4?@?Y@?S-?BX ?T?VV`?VV`?Tl`?*@? @?7X`J@Z@J@?E`?e`?h.@`?I@I@I@7X`0#Ns [@_] `BiO] ?0#GX`aS-? @I@^s RX *@I@[@\Y@Y*@_] e`c=D?0#J@]. ^s ]. Y*@P#BX U`fV`h.@``BiO] ? @?0#E`J@@#T_] U` @?$GX`LY@?*@?$*@WX`]. Q*@?*@Ns [@?@#?S-?LY@ @?VV`?Y*@?r%@?G ?sz?H?ino?VV`>s D0#4?U`?Y@DD?@#$GX`?@?O] ?BX $4LY@S-$@T:@?LY@?>s ?4?Q?Ns $J@0#?4? @?p ?f?0#?Q?gX`?T>s ? @?0# @DS-J@?Y@?t?s͚@?X.@`BX I@RX `#eC&c=de`X.@`@@? @?RX ?RX 4Y@S-RX e`fV`VV`Y@`#Z@\Y@O] ?D?$VV`]. [@T$Tl`bX ^ Q?U`?Y@?>s ?@?:@@#aS`#0#$]. ^s O] LY@40#^ `Bi?7X`?[@?@#WX`S-?VV`?VV`LY@I@7X`D?Y@?h.@`?_] ?h?q?i@?ino?bX 0#0#?E`?GX`?U`?Ns GX`@#?@#LY@@#>s RX D?*@?$?7X`?@7X`?>s ?Y@?U`?7X`0#?D?Y*@?7X`?pw@?f?RX ?eC&?ns ?LY@Ns @0#TI@?@?7X` @:@?P#?m. ?j@?O] 0#Q]. `#_] Y@]. aRX *@?7X`?Y@?Tl`0#Ns RX TY@dm_] @#T^s RX \Y@^s ?$?DDP#P#LY@:@@#GX`E`J@BX ?>s ?X.@`?\Y@?T?Ns ?U`?E`X.@`a:@7X`_] ^s O] J@$7X`c=aS?@#?U`*@Y*@GX`?X.@`?X.@`>s @#$U`BX ?aS?f?S-?0#?S-?c-?QLY@7X`?GX`?*@>s Ns S-GX` @ @:@>s @$LY@O] 4$GX`Ns ?D*@4?O] ?T?J@?E`?@?*@?J@7X`?pw@?gÅ?T?[@?VV`P#Ns ?O] ?:@GX`?@?[@?^ ?E`>s ?@?U`?GX` @O] P# @?$$O] U`@#7X`?[@?P#P#I@DY*@Y*@Tl`Ns >s S-]. [@eC&e`LY@?*@?$*@RX Z@Y*@T?:@LY@LY@?E`?RX ?I@?@#?0#?:@?*@RX VV`?$?:@>s *@?0#? @ @S-h.@`dBX 4O] J@?T?Y*@?GX`?D?LY@E`^s *@?RX J@?7X`>s U`P#*@>s Y*@_] WX`Tl`J@?>s ?T?:@@#BX >s D7X`J@_] Tl`$ @?GX`?Y@?>s @?E`?7X`$?$E`?rX ?ns ?VV`?GX`*@^s @#?X.@`?GX`$?I@?a?_] @S-BX 7X`$? @DE`0#E`*@?>s :@I@LY@0#Ns VV`?>s ?O] $@J@c-^s Ns VV`Y*@P#GX`WX`c=aSX.@`I@?4@`#c=[@S-?@?0#Y@S-?LY@?I@0#*@4@#DI@@?D?7X`?4?GX`?BX ?7X`?@RX bX aY@TD?*@?E`?LY@?LY@?@:@?0#?>s *@4E`aSaSLY@40#@#S-D? @E`RX GX`Ns LY@?@#?VV`? @[@Y@?4:@0#GX`QE`*@?BX ?LY@*@>s ?:@ @GX`@?v?s-?c-?b?^ ? @?7X`?Tl`?@#?*@?BX ? @aaS?LY@?b?Q4QE`$WX`f[@BX I@DU`bX O] ?*@$BX WX`aSVV`Ns ac-D?>s >s TGX`QWX`@@#dl`aI@QNs J@\Y@J@?Ns ?@#*@?0#?7X`@:@? @?I@TBX ? @4?>s ?U`?4O] ^s aSWX`GX`7X`?@? @BX Tl`_] U`?7X`?VV`?RX :@`#Z@E`LY@$?7X`I@I@?40#Ns @?4?$? @7X`S-Y*@:@?Y*@?Tl`WX`a?X.@`?P#E`@# @$?$?D@#[@E`?0#?w(?rX ?dl`?m?oD?Y*@?GX`?O] ?GX`?7X`7X`0#@^ P#?rj?~ ?s-?GX`E`?GX`?E`*@fo] \Y@7X`RX S-Ns U`P#E`T]. [@P#BX LY@Z@]. BX ?>s 7X`LY@?@*@P#>s Qdl`^s RX `#_] P#E`?@#?@?Ns ?Q?GX`?4?@#?LY@D`#Ns :@O] ?J@?c=?GX`U`de`\Y@\Y@\Y@$?0#J@Ns RX WX`*@?T?Q4Tl`E`O] bS-?@#>s Q4J@X.@`@#?GX`?T?7X`Tl`[@BX ?P#?b?U`^s i@0#?dl`?a? @S-P#0#?@?>s ?RX ?$Y*@O] ?E`?qM;@?kY?bX ?jC?h.@`?Q?BX ?BX ?7X`$Q?*@?c-?LY@?BX ?w ? ? ?h?BX ?E`?I@?4:@^ aI@Ns aY*@D@#DI@Y@aWX`:@LY@Tl`LY@S-RX 0#I@Y@BX 7X`I@\Y@c-aeC&i@X.@`?4?J@?E`@Ns GX`?GX`?U`?J@?*@*@J@ @>s Y@?@?RX QfV`gÅdmZ@[@T?P#?WX`@Ns @?LY@?$Ns Q0#D`BiRX ?4:@Q0#@I@Ns 4?E`?DLY@Y*@E`?$?:@?*@I@X.@`?@?_] ?J@U`]. LY@@44?O] ?RX :@:@?Ns ?d?fV`?i@?jC?[@?BX ?O] ?>s 7X`Q[@?BX ?oD?dm?c-?zyB?{Y?m. ?Y*@?VV`?D@#LY@LY@7X`@#bX gÅY*@I@RX Tl`RX Tl`Y*@QE`X.@`VV`:@WX`aI@GX``BiY@0#O] `BiX.@`TeC&fV`BX ?P#?RX ?BX >s Z@a\Y@@?Y*@?J@QGX`?*@? @LY@aSY*@Tl`fgX`bbWX`>s ?7X`?]. ?Y*@?@4QU`?*@?BX I@T@#?D?S-?:@$$BX D?$?E`?7X`7X`Ns E`0#DP#LY@LY@O] @?4>s $?I@BX aS\Y@D$7X`:@?GX`?RX @4?T?`Bi?i*@?h.@`?J@?7X`?\Y@?X.@`?>s *@P#?*@?b?QZ@WX`?P#?d?^ ?_] ?dm?U`@>s >s *@J@fV`fD?E`?0#I@VV`U`S-E`DVV`D?*@Y@bX >s 0#X.@`VV`7X`?$E`WX`$?GX`E`^s S-4@DWX`dmdl`BX ?VV`?7X`]. U`? @>s QRX ^s aSaSaSTl`Tl`eC&aS4?GX`?RX ?I@@P#`BiRX ?GX`Z@Ns ?D?Y*@?c-?]. ?$:@?@?0#$4@? @@I@Q>s $BX LY@ @?WX`?Ns X.@`VV`?4>s Y*@I@*@*@? @?0#?E`?>s 7X`E`RX ?BX ?BX ?X.@`?\Y@?@?$?a?e`?_] ?J@@#D$Ns [@WX`D?@#?aS?ino?Z@?D?GX` @>s 7X`WX`Y*@?Q?qS?s͚@?^ J@Tl`LY@4DWX`7X`?GX`DI@?@#J@E`E`40#I@?$?Y@?LY@Qb[@BX BX GX`DU`Y*@@?Tl`?DO] J@ @P#^s RX J@P#O] BX ?$*@aSgX`Y*@$?E`?BX 7X`U`T?>s ?\Y@?*@S- @?U`?Y@?Y*@?Q? @?*@?Q?BX J@VV`S-@#? @E`U`4? @U`]. ?4?e`?RX c=]. ?E`*@U`*@? @:@:@:@@*@7X`Q?O] ?0#?7X`?Q?BX ?I@?a?d?WX`$Tl`O] O] VV`@#?BX ?BX ?7X`?bX ?fV`?J@?4?RX ?$0#?E`?0#D?X.@`?wX`?z?aSO] I@7X`4LY@aX.@`$0#?@#?Tl`@E`:@WX`Z@I@E`7X`?E`?S-Z@S-? @4>s ?7X`?$$?D?WX`?Tl`?$>s 0#O] `BiY@7X`?BX ?P#?GX`?E`?I@>s bX b>s ?T?I@O] Y@$?Tl`?U`?0#7X`$?0#?4$@#4?$P#WX`I@DJ@J@\Y@`Bi7X`X.@``Bi7X`?VV`? @c=Ns ?VV`$X.@`0#?@:@O] U`E`? @7X`O] ?WX`?BX ?J@?WX`?[@?_] ?VV`?4GX`D?>s ?*@E`?T?S-?0#?4?_] ?`#@#?$*@?RX ?E`Ns >s ?bX ?bTa @@#D`Bie`a\Y@@?I@I@RX >s Y*@dl`^s QO] E`?>s ?Ns $0#?>s ? @?RX ?E` @?@?>s ?:@:@Q40#Y*@^s :@?VV`?`Bi?Ns ? @?@#?*@U`X.@`?:@?\Y@?@#TO] ?7X`?*@LY@QQ^ Z@BX P#Y*@I@BX ^ e`Y@? @?@#?7X`*@[@]. @?P#?WX`?U`O] Y*@_] ? @?`Bi?D:@@@?$?0#?GX`?>s BX X.@`a?>s @@#?D?]. ?_] ?Z@?Tl`?P#?P#?^s ?dl`?WX`4BX ? @?0# @?0#?VV`?Ns E`O] J@BX ?7X`?Ns ?@U`aQNs gX`_] ?>s *@J@S-fV`h.@`fVV`0#Y@]. :@E`aSf^ ]. dmWX`?4 @D@0#@?BX @RX TO] P#X.@`Q?BX ?Ns @#S->s ?:@?GX`DBX I@S- @?Z@?X.@`@#$$P#^s WX`S-aSZ@?0#@Tl`>s @RX T7X`*@@?RX ?Z@?4?O] ?bX ?r"@?rX ?:@aU`:@?I@?\Y@?P#?E`?:@E`4?S-?a?bX ?GX`O] _] fV`DNs @#?Y@?eC&?[@?RX ?X.@`?Z@?]. ?c=?c-?RX 4Tl`Tl`I@0#?D?J@J@Z@DDE`?4?0#4J@[@RX 0#TP# @TRX ?4GX``#^s _] X.@`GX`[@bI@$^ i*@bc-pBii*@I@I@T0#*@LY@DDRX LY@ @$LY@0#?Q?Ns 7X`J@VV`S-GX`:@:@J@I@?LY@?a?I@>s @D^s U`>s ?*@@#>s ?O] ?@#P#7X`?GX`?D?I@?E`O] ^s ?Y*@?S-?RX ?Y*@?aS?pBi?k@@#X.@`?E`?T?Ns ?:@E`0#?4DI@?*@?T?\Y@?J@$I@\Y@DVV`@#?bX ?f?D @?BX ?:@?7X`?LY@?E`?@#?@#@#TNs :@?D?:@^s Z@?I@?7X`J@7X`BX GX`4RX Q @I@VV`Y@c-Tl`?@#$LY@0#J@S->s QaU`Dah.@`X.@`VV`jCd$DQ?E`?S-@4?7X`?4?I@?aS?`Bi?$E`LY@RX GX`@#WX`^s Y@TI@?$?I@?Y@?0#E`O] a0#?O] ?$?*@?$7X`?>s ?:@QGX`?I@?D*@P#Y@>s ?7X`?*@?J@?VV`?b?TO] $?T?BX ?>s $c-[@?D?GX`4O] E`?GX`?WX`?O] $Q4Y@Tl`?J@?Ns QWX`BX 7X`?@#?RX ?$?@#?]. ?O] @D @?0#RX 4?]. ?:@T@#DI@7X`T\Y@QP#RX Z@eC&U`?LY@?LY@?*@?@J@Tl`*@$X.@`WX`I@]. `Bi?@#J@@?S- @J@?U`?f?Y*@?P#?Z@?S-?P#?c-?a[@e`eC&Y*@]. aSS-Ns \Y@^s TBX :@4?BX ?BX 0#$*@?Y@?X.@`J@LY@?@?@?P#?Tl`0#@?Z@?O] P#RX ?I@?RX ?LY@$E`:@?>s ?X.@`?J@*@?$@#X.@`?7X`?GX`^s U`?X.@`?^ ?4Tl`Tl`?E`?_] ?O] U`a0#BX BX @BX Z@WX`E`?4?dl`?gÅ?>s ?*@?[@?T?I@?I@DGX`?4?*@?BX S-X.@`?*@?4@?@:@J@@?E`?O] 0#`#U`?@#?D@0#>s GX` @?:@:@J@7X`J@LY@?E`?S-?:@?GX`?QBX ?GX`?^s ?RX ?E`?RX ?@#?GX`?@#>s I@S-Tl`Z@k@i*@P#BX ?:@?a?0#^ [@RX ?7X`?Y@?@Ns 4?>s ?Y@?Tl`BX BX ?GX`?T?[@?T0#?>s ?f?b?$ @?T?`Bi?a?^s ?Ns *@QGX`?@#?GX`?@4\Y@^ ?BX ?LY@Q:@?Y@?Y@?$TQ?D?Tl`? @aSh0#?I@?RX ?:@4I@J@E`?7X`?dm?c=@@#?:@? @?BX ?S-$4?E`?0#7X`RX bX U`?4?*@?$?D?4?4?S-?`Bi?Y@*@WX`Ns @#U`Z@0#?Q?:@*@?RX ?\Y@?BX @4*@?0#?0#@$0#?>s ?$BX U`Tl`:@:@:@?*@*@:@?J@?U`?GX`Tmdl`I@4?xX??}>s T*@?Q?aS]. >s $I@0#?4?LY@?E`*@VV`^ 4?Z@?X.@`?7X`?>s ?RX ?P#?J@?Ns ?Ns ?4LY@Tl`@?I@?*@DQBX ?*@>s Q?D?D?4I@D?BX ?47X`U`a0#?BX ?7X`BX >s 4J@TLY@@QJ@>s I@?4?RX ?7X`?>s ?LY@? @4BX P#>s 7X`Ns 7X`? @7X`:@?:@?P# @Y@Ns ?@LY@aS_] ? @?_] ?@#Q?[@?q?dm?@@?0#I@P#U`Y*@?X.@`?@#S-`Bi\Y@S-S-:@?Ns ?4:@?D?T?I@GX`^s J@?? + ?.@`?Tl`?7X`?U`?X.@`?[@:@D?d?Y@aSd>s ?BX ?D>s _] bX T?4:@QLY@0#*@:@DD$0#E`?7X`?Z@?Ns :@D*@DO] ?@?I@*@?$?O] *@0#?O] ?:@$$GX`?0#?0#Tl`bX O] 7X`S-Y*@Y@Y@X.@`P#>s E`J@? @?:@?0#?GX`?7X`:@?@?D?>s ?D?@BX @#GX`RX O] @?Ns X.@`0#?J@7X`J@:@?GX`BX `Bi?Q?q?h.@`?D?@#?J@ @TX.@`^ c-J@?LY@?E`?@$BX Q]. I@?Tl`?P#4@#I@D>s >s ?P#@dl`?p?@?}. ?$?D?P#?4?@Q?Ns ?v?p#X.@`fGX`?J@?I@E`X.@`?Z@?T?$0#I@S-Ns >s @#U`[@>s ?>s ?*@?WX`?Tl` @I@Ns T@#?WX`?WX`:@?Ns DNs ?J@?LY@?*@?$4?WX`?[@0#Q @4WX`RX E`O] Ns 0#?@$@#DI@*@?:@7X`O] $? @? @?O] ?U`?GX`:@Tl`J@4?0#?`Bi?\Y@0#?7X`GX`@?>s E`Ns RX ^s 7X`?Tl`?Ns ?GX`?Q?@#DVV`Tl`Y@_] S-:@ @?O] ?O] 7X`QU`D?Ns ?Ns @QbX ^ I@O] DRX gX`:@?eC&?$X.@`@E`RX E`Tl`?7X`?no-?fV`@#U`:@?>s ?0#X.@`^s ?@#?^ ?*@Ns ?$?Ns ?:@@#WX`WX`?4?WX`S-4?J@?GX`4S-Tl`J@?$?>s 0#?4S-]. $?J@?GX`?:@0#?VV`?`Bi?S-?Tl`?U`>s X.@`? @?O] ?$$?*@?:@?44TT@?4@#LY@DO] D?E`?P#?4S-`BiO] @#>s ?Y@?]. :@@#>s aZ@7X`Ns S-Ns O] E`S-\Y@:@?7X`I@^ Y*@GX`GX`Ns @#J@I@?D?7X`TO] @ @@0#@#Td`#Ns WX`Z@O] LY@I@Tl``#E`?@TNs ? @DJ@ @?$?7X`$VV`TJ@`#eC&E`?E`GX``BiGX`?O] ?S-?E`?0#$I@@#?I@?T0#WX`I@?GX`?Tl` @Tl`J@I@Y@S-:@0#@J@GX`?7X`?Q?J@?@?*@$? @?Z@?[@E`Q?VV`?`Bi?0#0#$7X`LY@U`E`?0#?*@$@DP#?@?LY@I@Y@c-\Y@TNs ?E`?@#X.@`S-E`c-fS-4DVV`J@?*@U`i*@^ @#U`c-[@>s @#Ns >s GX`S-47X`WX`E`?:@$S-Tl`P#U`]. RX DNs BX ?*@?$GX``#U`?Q?Q4? @?:@>s P#GX`?J@?^ 0#fV`aLY@Tl`\Y@J@?GX`?BX P#Q?$?0#0#?BX ?>s >s QQ@?D?P#?O] I@`#0#?LY@I@Y*@J@D?@?X.@`?Ns @#*@?E`?D?4? @TT?:@?Ns LY@Tl`?D?E`I@4?*@GX`U`VV`T>s @?4?:@LY@S-?E`?Tl`@>s D]. ^ GX`?*@?O] ?4TRX 4J@X.@`Ns ?$4`#RX ?I@Ns i*@^s ?*@?@O] RX 4BX X.@`QNs ]. Y@I@I@>s 7X`J@DGX`X.@`RX @>s E`?4?7X`E`^ eC&D?a?U`@?*@7X`S-@#?J@?fV`?d>s BX ?WX`?7X`Tl`RX Ns 7X`@QNs ?$0#TE`?:@?I@]. h\Y@?BX ?S-?O] ?RX 7X`aSBX ?\Y@?J@E`7X`?@?J@?^ ?RX BX @#?$?7X`$QP#@#Y@d[@\Y@[@?7X`?U`>s >s Ns P#Ns BX ?4?$Y*@_] ?J@ @$ @S-VV`$?0#?*@?0#7X`4?@#?*@BX ? @Tl`7X`?LY@LY@^ ?@?]. ?X.@`?*@BX @$P#GX`>s Z@_] D? @7X`0#?:@?E`?>s >s _] WX`?*@4?$@#Y@bgX`4?c=?J@I@? @*@BX ?:@?WX`?a?J@?0#?w(?=?qJ@7X`:@]. de`Z@4@#I@BX GX`@#*@Tl`aSTl`? @?@#?`Bi?X.@`O] X.@`?0#?I@?$?D?X.@`?X.@`?P#?$D*@?@7X`47X`?4DX.@`O] Tl`a_] `#VV`?E`?Q?$?@#?7X`Ns TJ@E`>s J@`Bi`#@#?@DLY@@#DE`>s U``#4?VV`?*@I@?>s ?:@D?4?J@ @?I@?S-@#*@?^s ?\Y@?@#7X`LY@>s $@#$?*@BX O] ?$?J@$7X`?I@?J@J@aS_] ?@?P#?O] ?4TY@`BikYP#?a?BX GX`?E`?LY@?I@?T?GX`Tl`?>s ?S@?5?"@?Y@?RX ?J@E`P#O] T^s [@? @?@#TZ@>s 4@#$*@BX ?Q?U`? @Tl`Q @?$?7X`?LY@?GX`?$0#7X`@D@J@?*@:@?0#?$4@I@P#7X`Ns T@>s Y@@#?>s 7X`U`Z@\Y@Tl`0#?$7X`D?4$DTl`[@0#?Q*@T$0#BX ?S-?Tl`*@?D?RX *@?0#?Tl`?$O] QO] :@*@J@J@@4? @?I@? @E`@4P#Ns U`WX`@?S-?]. ?I@P#Ns TjC[@?U`?@# @?P#?D?:@?I@D]. T?y*@?no?] ?RX @#J@:@?VV`?aS?@#`#aS?>s ?U`BX Tl`DE`7X`?>s ?GX`?>s $U`RX ?@J@E`BX QO] 0#?$? @47X`>s BX ?BX ?@#?P#?:@?@#7X`I@VV`T[@Q?@Ns \Y@?$?T @QO] O] J@@?BX ?J@?P#?U`?GX`>s :@?@#?>s ?@@QS-0#E`BX ?Tl`?J@O] *@?:@E`J@E`S-O] D@?Q?Q>s Tl`I@0#QY*@7X`?*@@#BX @#J@D@#:@?@?E`?VV`?RX $? @?0#S-GX`?BX *@$?:@DD?@?0#J@gÅ>s ?gX`?LY@aSfV`e`X.@`?@#?U`?@#@#7X`?J@?GX`:@I@Ns VV`O] ?0#?S-?U`?@^s _] ?@?LY@BX Y@Y*@\Y@Tl`?I@?@D@?:@?4?O] ?]. ?Z@0#Tl`E`RX X.@`LY@TY@S-Ns ?BX ?`Bi?4Tl`7X`?@:@44@#@?D?U`?Y*@?P#*@S-0#?T?P#@DLY@:@?>s $J@$P#:@@#X.@`\Y@`Bi[@E`LY@>s ?Y*@?^ ?$E`BX BX Z@dmTl`@#>s ?4? @I@LY@?@?RX ?O] ?RX ?T?$?E`?BX ?:@ @Tl`Ns $@#$?0#?0#?GX`0#c=b[@bTl`?E`?O] ?BX @TT?:@?[@?O] BX TS-Tl`S-QJ@*@?*@?*@@>s ?BX 4\Y@^s WX`J@?0#?@#DNs ?GX`?\Y@?J@?X.@`?O] Tl`]. ?@*@?@:@TZ@WX`?>s ?aS?P#Ns WX`TI@7X`DI@$?4?@#?I@?7X`E`VV`S-*@?@#? @@#4?D?Z@?O] @#O] O] J@:@T[@RX Y*@Z@I@]. bX :@ @Ns DBX O] O] QI@E`VV`O] ?0#U`WX`?*@?Z@?Tl`?I@?DBX Z@RX $?7X`GX`@#?@?@#?E`?*@ @*@TT?4?7X`?*@?b?qS?r?ino?J@RX U`?>s ?a?RX I@Tl`VV`T:@J@^ \Y@T4?J@P#?*@?LY@:@QP#TJ@DVV`S-?BX ?U`?$Tl`?BX ?$T@#?\Y@?]. ?S-?S-?$U`bX `#>s ?LY@?D:@RX LY@@GX`bX _] @?D?7X`?*@7X`U`WX`J@>s 4@#J@D@?Ns ?_] ?Tl` @:@I@I@0#Ns P#?0#E`@RX bX [@`#dTP#U` @?GX`? @LY@Z@S-4GX`VV`GX`?I@?S-? @@#4QddRX ?@?J@?P#?Ns ?O] ?T?E`:@BX Tl`dl`P#?[@?a?`Bi?k@?Ҥ`?)?c?o] ?*@?7X`?Ns ?\Y@?]. ?E`E`J@@E`Y*@QLY@D?4I@`#? @?[@?D?@T[@VV`Y@S->s :@GX`Q?@GX`? @?P#?7X`?:@$TVV`>s ?>s ?BX ?>s ?@#?$?@?>s LY@f`Bi?>s ? @?@>s O] RX RX LY@GX`RX X.@`Q? @?D47X`?I@?*@@#?:@?*@7X`?Ns ?WX`?I@?LY@?$E`4Ns \Y@LY@@#D?7X`?BX *@>s 4@@GX`J@?GX`?a?S-LY@U`47X`Y@Z@BX ?0#?I@?S-?Tl`?WX`?Y@?BX 7X`7X`WX`e`Q?@#?E`?^ ?G ??Y?4`? + ?_] ?U`?U`?S-?aS?[@?BX 4P#LY@I@BX ?7X`? @DD\Y@0#?E`?D?RX 0#Tl`Tl`LY@0#DZ@T7X`@$D@#LY@Tl`>s ?>s ?:@@@?GX`?T?:@@?7X`?7X` @7X`U``BiJ@?D?D @? @?BX ? @P#U`O] LY@S-WX`Y@VV`J@I@Z@O] ?LY@?0#BX ?Ns ?Ns :@?I@?b?\Y@?I@7X`I@?BX ?I@0#4?@?:@?@#@#VV`>s ?$?@ @*@?Tl`?h.@`?^s >s D?D?7X`I@BX ?7X`?*@>s >s ?*@?Q?Tl`?440#WX`_] DJ@O] ?fV`??l@?@?x^`?@?v?Tl`?BX *@?U`?P#@#WX`Y@GX`*@?$4E`?D?LY@:@7X`*@GX`?@#:@>s ?@?O] @`BiY*@*@GX`LY@BX :@I@@?Tl`?\Y@?WX`?I@?@#4WX`Q4@#S-[@U`*@?BX ?@#?@?@?:@$S-GX`?0#0#WX`VV`GX`GX`D@:@D4I@D?S-?T$?E`?aS?Z@Z@_] $?GX` @E`BX ?@?E`*@S-J@Q\Y@D?@#?*@?>s ?Z@?QE`BX ?BX ? @J@@?J@?0#O] U`@#?E`?BX O] Y@LY@U`S- @P#T?h?`?ۀ?Þ?z ?3 ?'`?Z@7X`Y@?7X`?7X`@J@I@?*@@I@O] 4?Z@?b?J@?*@?4>s TT>s ?>s ?>s ?BX ?O] :@bX X.@`?:@Tl`T?$?I@?>s ?P#?X.@`?Q?GX`?47X`?Tl`?J@P#U` @?:@0#LY@D:@GX`GX`0# @? @@D$?>s 4TLY@@?$?BX ?WX`?X.@`? @O] E`?BX ?Z@?Tl`?@#?D?GX`? @BX S-S-0#?$$E`S-E`?Ns ?U`?7X`E`ahVV`?I@?BX BX DJ@\Y@Y*@GX`DD?*@?LY@?>s *@I@:@?E`?4`Bie`P#BX >s ?:@$*@?c=?X`?VF@?R?8T?`?w(?[@Ns VV`?D?D?GX`?Q?:@?Y*@?7X`I@>s ?7X`?^s ?c=?RX ?BX ?D>s \Y@[@:@?@#?*@$J@`#U`?BX GX`?Z@?^ ?LY@ @J@J@$ @$?Q?h?gX`?J@?@?Q?Y@?D@?@T[@Ns BX D*@7X`P#U`E`@?@?LY@?VV`?VV`?T?*@>s ?D?Y*@?D*@ @7X`VV`\Y@E`?:@?@#? @0#?*@0#4?I@?VV`?>s LY@adRX ?E`?DP#_] Y*@Y*@^ \Y@S-4?E`?O] ?I@?@#$:@?I@?Ns U`b@#4?>s ?BX ?E`?eC&?t?s ?g@?? ɠ?a?4Tl`E`?D?BX ?T?U` @?>s ?Z@?@#*@?:@?E`?LY@?Ns ?*@@Ns RX @#4DNs >s ?:@?*@O] [@Tl`?0#?WX`?`Bi?Y@?@#TbX 4?^s ?X.@`?:@?Q?dm?b?O] ?J@?Y@?T?@BX ?*@?RX ?$LY@>s BX VV`Q0#@#Y*@Y*@@?0#@?GX`?O] ? @? @?*@?@?O] ?E`Y@c-X.@`Tl`Z@T?0#?Tl`?4Tl`Tl`4?0#?4?@0#DNs U`Y*@T:@?:@?4Q`BiRX 7X`P#]. VV`?VV`?_] ?Y@?J@ @>s ?E`?Y@? @P#0#0#I@0#?]. ?p#?x??'`?h? @>s Ns O] E`@?Q?O] :@7X`?0#0#4?E`?I@? @@#GX`4*@@#*@?*@0#LY@>s ?GX`?\Y@?T7X`Z@dm$?O] ?0#4?@O] U`?a?t ?n ?S-?BX ?Ns ?@E`?$?Ns ?7X`7X`I@?U`?Ns ? @?4QTl`:@?>s ?0#$?7X`?$I@0#?@@?7X`?@#?$?@# @VV`WX`QLY@@?7X`?GX`?E`WX`h.@`Y*@4E`:@@O] X.@`O] GX`GX`@?7X`?:@?$DRX :@?*@BX VV`O] ?:@?aS?gX`?]. ?>s $4?>s ?\Y@?VV` @GX`Ns J@@#Tl`]. @?Y*@?dl`?oD?i*@?$:@?S-?0#`#_] 7X`?:@?*@:@E`@#J@RX @?O] ?@#>s >s ?4?GX`?$:@4?*@?D?D?I@?O] ?*@D0#@#Y*@>s WX`Y@? @$@?kY?v?ns ?O] ?@#?GX`DVV` @?BX ?*@?4?@?$4@#$?>s ?Z@?_] ?LY@?E`?@#@#I@*@?:@?O] ?:@?*@?J@?7X`?4?QD?@#?$D:@[@aS?:@P#BX ?>s ?*@? @?*@*@>s ?$?GX`?BX ?$?*@O] Q@?O] ?^ ?_] ?@#@#>s :@?@?^ ?dm?GX`P#P#0#GX`^ Tl`?$:@[@LY@I@^s ?d?$fVV`? @LY@O] 0#*@?0#_] ^s ?7X`?Ns ?4?7X`?GX`?J@? @Tl`RX ?@#?P#:@[@Tl`D$?Ns ?RX _] P#Tl`P#?@0#? @?f?m. ?U`>s @?>s 7X`:@?RX ?P#?D?Q?*@GX`TGX`$:@?0#?RX ?P#?U`?RX ?@?I@?Z@?GX`@$?0#?7X` @?GX`?U`7X`4?S-7X`T?@E`LY@?S-?Ns ? @?LY@ @RX ?D?_] ?Y*@?Ns >s [@WX`D?@?@#? @4? @?7X`4U`LY@?BX ?Tl`?RX ?BX @#Ns E`Ns @#?^s ?k@?_] @?>s @#X.@` @?WX`?@Y*@RX LY@[@E`?4Y@aS?*@?0#^ U`@?X.@`?Tl`aSgÅBX ?$?@?>s ? @@QQ?$@#S-GX`?D?O] ?4$QJ@:@@0#T>s ?\Y@?]. P#I@4$?P#?c=?Tl`0#?*@7X`:@?:@?@#$?BX ?S-?0#?$:@?P#?`#?T?E`?@*@ @ @?P#?P#[@[@?@#E`VV`@0#?^ ?v?o] ?>s @#^ WX`?X.@`?`#?I@4ac-TVV`S-?0#TP#? @BX @?Q?WX`?S-?I@ @I@Ns WX`Q?RX ?h?f?Y*@?Q?I@@#? @?D? @4?@TaSb`#GX`?BX @#Y@$$Ns ?O] ?RX _] `#*@DD$Ns BX ?7X` @@#:@?Tl`?tm?w(?h.@`?Y@?GX`T_] @?:@?BX 0#WX`D?O] ?Ns ?@*@BX BX ?7X`?`#?a?0#GX`DBX ?$?D?$?4?@@?S-?O] @#?$?Ns ?GX`?X.@`?Tl`?@#?O] ?>s $?7X`? @?*@?>s QGX`?P# @I@>s I@?i@?~s ?no-RX [@`#S-?P#?>s QZ@^s @?QU`dm0#?0#RX O] ?>s ?T?RX ?S-?VV`?T?VV`?Y@?7X`QWX`U`O] ?O] ?X.@`?WX`?GX`?@? @? @$7X`@@E`Ns Q^ _] J@4O] WX`0#?LY@I@bD*@Y*@0#?Ns 7X`E`>s Q@?D@:@0#?kY??`?uC&?7X`E``Bi`#?:@?Y@?`#?Y@?@#>s 4?@:@E`:@E`E`?I@?b?Tl`DJ@BX 0#?Q?P#?*@?I@O] ?E`?GX`GX`?D?`Bi?U`?Q?:@?4?VV`?>s 0#?D:@S-@@#E`?$4 @a?0#?pw@?U`Z@>s 4@#?>s :@[@[@J@?\Y@?c-Tl`h.@`I@?0#*@? @?E`?S-?Y@?X.@`?P#?D?RX ?\Y@?E`LY@RX BX :@J@S-BX 7X`@# @*@D @?Q?E`RX Z@I@J@GX` @J@^s Ns ?@#?@#P#^s E`>s Ns ?@#?S-$7X`:@?LY@?:@S-D?d?Ҥ`??m. 4E`VV`Y*@?:@?h.@`?h.@`?X.@`?BX *@BX X.@`[@Ns DJ@?0#?^ ?Y*@?:@*@Ns $?VV`?GX`?e`?] ?x.@`D?*@E`?$?LY@$0#?*@?S-?]. J@?0#DY@O] _] [@?0#?4?Ns ?X.@`RX ^ ?*@*@?I@*@J@?7X`? @T[@O] ?O] ?Tl`P#[@>s $4>s O] I@?*@? @?0#?S-?`#?]. ?LY@?*@GX`X.@`LY@0#D@?>s >s VV`>s ?RX ?QE`\Y@Y*@WX`E`?$4@#?$@@#@?$?7X`@#?$?GX`?@0#E`?[@?@#WX`@?BX ?@?_] ?e`?E`?@?@BX LY@?O] ?h?^ ?*@$0#*@ @DJ@?0#?LY@@:@?P#?b?bX ?4`BiP#?>s @?y???k@LY@?@@#E`7X`TRX ?*@?Z@?Z@7X`LY@?@#?4BX WX`_] ?i*@??2?lC?[@?:@LY@@#? @?>s @]. WX`?BX ?*@WX`^ P#?$?0#0#?*@?@#0#P#^s dmZ@@#>s 0#?BX ?VV`?^ ?a?^s ?I@? @?E`?E` @?$? @J@ @?RX ?@RX J@? @?@#@Y*@d`Bi0#?O] ?BX ?0# @Y*@U`?BX ?LY@E`Q$?J@?0#GX`RX 4?T?@#LY@?7X`?U`I@D$?$:@@#?@?c=?b?*@:@?*@?$?0#?Ns ?BX ?LY@?Z@?@#E`*@?T?`#?*@c=WX`E`?w ??_Q@?oD>s ?@#@#Ns ?*@E`@?Ns ?LY@7X`:@?LY@?T?0#T?I@?Y?@?|?p?wX`?I@?I@?:@:@GX`QZ@D?:@@#[@Q? @?BX ?@0#?4?GX`?@I@[@^ E`?*@?@?@#?U`?VV`?Ns ?Ns ?P#?@#?BX ?`Bi?aS?J@?@DY@:@?P#?*@:@?4?I@?J@>s VV`D?LY@?S-DI@Y*@Q?7X` @QVV`VV`?Tl`?>s @#E`E`@? @BX 4?D?I@?0#?4?Ns ?4J@?LY@?gX`?U`GX`$?Ns ?:@?>s Tl`Q?$?0#>s S-Ns ?:@?*@X.@`E`?E`4?`#?~ ?yno?BX 4?E`GX`J@?Q?RX 0#@#?@?$4:@?:@?T?DBX ?c-?g?5Ϡ? ?w`?a?q?Y*@?P#WX``#D?4?7X`7X`TE`?>s ?J@?BX ? @LY@Q4 @E`WX`Z@U`LY@$?RX ?`Bi?VV`?:@?*@?BX ?Ns ?Y@?b?Y*@ @J@Ns 4?VV`?U`I@P#?4?E`?J@?O] ?4 @?7X`?Ns ?4S-Tl`?$?>s ?@?@0#@#40#?@#?Ns ?*@?*@?7X`DE`?*@0#TLY@0#0#?0#?Y*@?T?4?S-?O] ?Z@?0#Ns 0#?7X`@#X.@`O] Ns aSc=Ns ?@ @TZ@@?GX`*@?RX ?@#*@?$*@D?0#?@#@#>s ?E`?>s @#BX :@>s @#Ns :@?RX ?T?7X`?X.@`? ɠ?p?X@?>?Å?S@?VV`?>s `BibX @?I@$VV`T?:@?Tl`?0#?>s >s Y@RX RX afgÅfbX T?>s ?Y@?O] ?*@?0#?BX ?P#?QX.@`^s Q?@?dm?q?_] ^ _] @ @0#0#BX :@RX P#?Q?[@?@#?*@?:@?4?@#?J@?LY@?0#? @?J@?BX >s ?$?Q?*@GX`J@Tl``BiS-?Ns ?Tl`?>s ?J@?:@?7X`@#BX *@LY@_] RX $T[@:@?7X`?*@:@:@?GX`?RX ?7X`?:@?J@?0#>s D?$?P#?BX $ @? @4:@>s TWX`J@QGX`?VV`?[@?J@?LY@?h?N?F??A?b?*@@#Z@Y*@DE`QTP#?$?GX`>s @#?O] ?7X`RX QY@h.@`kb @?RX ?@@#>s J@@?$GX`gX`p#dl`BX ?J@?h.@`?o] ?LY@aRX ?0#:@I@:@J@VV`Tl`0#?:@E`RX ?>s ?LY@@?*@?D4BX ?0#?>s @?@?E` @*@?O] ?I@ @?E`?LY@DWX`D?E`?4S-Q>s ?*@BX ?$?:@BX ?0#?Tl`7X`VV`4?0#?@#?J@?T?]. ?Tl`?E`?RX ?BX E`BX ?*@?P#?P#BX S-? @?:@?@?0#?$>s \Y@`BiLY@GX`0#?[@?T0#?I@?]. ?{@??,`??rX $7X`*@7X`P#Z@Ns 0#I@@#?*@J@P#?E`?>s I@DJ@^s ^ ?0#?t?|$,?ino:@I@X.@`[@?D$VV`jCmWX`?4?BX ?P#?Ns J@S-?D?J@BX BX @DO] I@?>s E`O] ?>s ?>s >s ?$?>s J@Y@I@0#E`GX`:@4?:@?DS-S-?Y@?X.@`>s ?@?WX`?Q4_] ]. :@@#@J@?4?RX ?7X`?WX`?`Bi>s \Y@I@ @?LY@?Y@?X.@`?^ ?Z@?Q?T?@Ns ?$?J@?@BX VV`O] ?>s ?I@?P#?U`?4>s J@Q@#@?:@?[@?DY*@$?dl`?jC?rj?yno?s͚@?aS?4?$?P#?@#I@Tl`GX`$DBX S-Y*@?*@?GX`$7X`:@*@?$?VV`?u`?~9`?m. 0#Tl`Y*@?I@?`Bi?LY@BX [@X.@`?@?O] ?4:@J@I@?BX ?]. ?DGX`4 @?0#?4?$E`@?WX`?RX ?$?:@@E`D*@LY@`#Y*@? @?RX @dVV`?X.@`?@_] ?7X`?aS?DGX`RX D?BX Ns >s :@RX 4?$4?RX ?[@DU`BX @#?0#?44?P#?a?Tl`?:@GX`BX ?Z@?\Y@$D$?7X`?Ns ?Ns ?Y*@?Z@0#?J@?>s ?4?BX ?J@?7X`Ns E`?Z@?gX`?X.@`?J@?a?Y*@D0#?J@>s E`Tl`P#I@Ns Ns Z@Y*@?D?0#7X`O] ?7X`?Y@?@#?S-?gX`?Y*@?@?$O] VV`?>s ?Z@?Ns :@*@? @?@*@LY@Q? @?^ ?aS?I@?*@?D?7X`?7X`?RX ?E`@*@>s ?O] ?GX`?@?*@?0#?:@?4?*@?O] ?@#Y@U`?D?O] >s Y@7X`?LY@S-dm?BX ?a@T:@?>s ?RX J@D>s QJ@LY@Tl`?$?Ns DI@@#TLY@T^ ?4?a?RX ?4@#:@?WX`?Tl`0#?*@?O] ?D?*@? @?Ns ?X.@`?$?$?[@?U`?4?BX ?$@#?0#?S-?@#?>s ?Y@?S-?GX`?U` @]. :@RX 4 @X.@`TNs `#aP#@#Ns T7X`>s Z@?[@BX `#4?E`?E`?7X`E`U`P#GX`@#4@VV`^s LY@:@@#?4?[@?^s ?O] ?P#?S-?@@?:@*@D? @*@I@@#:@? @?@#? @? @? @?*@?Z@?]. ?O] ?*@:@@?$?$P#Y*@?E`?_] ? @RX 4?E`?Ns I@Ns I@P#BX :@Q*@?E`*@I@Ns TBX GX`RX ?@#?P#?0#?Ns ?D@#? @? @D?:@?O] GX`Q0#?S-?P#?GX`?\Y@?^s ?Q?I@Ns ?:@?c-?[@?@#?GX`?@BX @DJ@?4>s Z@4 @O] :@I@c-Y@?J@?Tl`Tl`hP#4aS-?@`Bie`$?WX`?X.@`?J@$O] \Y@^ TGX` @4c-gX`BX ?P#?J@?@#?LY@?O] ?0#P#Tl`DQJ@?>s P#LY@>s ?$?BX @>s @#:@?>s ?BX 7X`?0#?J@$7X`0# @ @RX Ns ?4?$GX`BX ?*@?BX 7X`E`LY@Q?LY@$:@?O] ?O] @E`>s ?0#?@?BX 4O] ?GX`?BX O] ?J@?@?D?P#?4*@LY@J@?BX ?P#?E`?Y*@?dm?^ ?LY@? @4?@#?VV`?E`?4?LY@?$@# @*@@#7X`RX WX`J@Ns :@?:@7X`S-0#?a?q?`#VV`>s $e`c=Z@gX`Y*@?P#?T?J@?7X`BX P#LY@@?7X`0#40#]. a?WX`?P#$?0#7X`P#LY@Tl`RX $@#>s ?E`O] *@?4?*@?@>s J@>s P#^ LY@? @7X`@#@#@#?:@?I@Ns bX WX`4:@GX`D*@?P#?D>s X.@`:@?TTl`?7X`?\Y@?O] $BX BX LY@DJ@RX ? @GX`Y*@?Ns ?c=?Ns ?>s ?LY@?D?>s ? @4? @?*@?*@?T?`Bi?U`?4$4$@#U`Ns @Y@d^ O] BX WX`Z@?0#?LY@?*@$?k?? ?s-?BX dmbX Tl`]. ?0#?\Y@@QRX ^ VV`?7X`?`Bi?aS?GX`? @?$J@T>s 4LY@Y@VV`0#4LY@DJ@7X`?I@?*@4?BX ?$E`?4?P#?40#J@RX 0#?S-?VV`$U`P#I@O] Ns D?J@?P#?7X`I@VV`J@4LY@Y*@WX`?b?Z@@#c=Y@?>s 4_] I@?O] ?O] *@Tl`\Y@^s Tl`:@DD @LY@P#?VV`?a?0#7X`0#*@?:@?LY@?LY@?D?GX`?P#?7X`>s @#BX O] Ns P#X.@`TNs GX`*@Ns eC&c-@#?J@?E`RX S-?P#?E`?@?J@7X`?j? ??9?[@?I@P#O] ? @@#?P#?]. E`Z@Y*@_] E`?O] ?VV`?RX ?D?I@?DE`S-S-_] b`BiWX`DE`P#RX Y*@P#?44RX ?>s ?@?E`?O] ?*@0#@#QJ@?BX ?T?>s ?@J@U`Ns 0#?:@?7X`?>s ?Y@?QP#Y@Ns [@dl`aS?dl`?Y@Ns _] Ns ?4*@TLY@?0#@E`D:@7X`4I@O] $? @?7X`?Y@?Tl`$7X`0#S-Tl`?$?[@?`Bi?Z@?[@?Tl`BX Z@Ns DLY@>s *@4? @?@? @RX ^s ?7X`?aS?^s ?P#$ @?RX *@7X`?J@?*@?O`?$`? ?4?dm?Tl`@>s ?*@Ns ?WX`?0#7X`GX`O] ?4?BX P#^s O] ?E`?Ns E`RX LY@\Y@]. 7X`?@>s S-X.@`[@`BiU`7X`Ns WX`@#?*@?4?0#$D$?:@4Y*@Z@U`S-@?:@*@?D?:@BX 4?U`?S-O] Y@Tac=X.@`?d?QJ@? @?WX`?LY@*@$ @4? @?GX`?O] ?Tl`?Q?:@? @E`Tl`>s ?7X`?E`?T?P#?*@?@P#X.@`:@?J@?Ns ?BX ?Q?S-0#TI@@#>s *@@#?4?LY@?GX`?*@Y@\Y@?Tl`?`#?@?7X`?0#?>s P#Tl`?:@?I@?9`?e@?g ?r`?WX`? @S-S-:@[@BX ?X.@`?Ns @J@RX *@4\Y@dm_] ?S-?*@? @?BX DJ@?O] ?Tl`0#QQP#@#$$?:@?44DQZ@S-? @?Q?BX P#^s `Bi^ GX`? @?:@?aS?i*@?U`DP#:@?J@?P#?0#?0#@P#@#?4?aS?>s T?J@?c=?BX Ns $?$0#?0#?S-?X.@`?U`?BX ?*@?E`?:@*@0#J@ @?>s 4@#@BX U`QDO] S-@?J@?40#4>s BX DTl`Y*@I@7X`$Y@a?$?*@]. P#0#LY@0#P#a*@?RX ?}d[`??恠? 4VV`aVV`I@Y@?*@?`Bi?7X`WX``Bi]. Ns >s 4DU`>s ?O] ?LY@?Tl`?^s ?44?P#?E`E`@#>s GX`?7X`?DE`?>s ?ino?c=0#WX`^s \Y@BX ?4?BX ?>s ?@?*@?@0#?@?4?b?kY?P#O] D?4?J@?Q?Tl`?Tl`?7X`$?D?Ns ?Y*@$_] *@?S-0#T>s @@?:@?BX ?4? @>s 4?GX`?I@?7X`?7X`O] aSP#*@U`Y@7X`@#Z@VV`@#DD?@#?S-?I@?7X`?$$I@WX`Z@QLY@Y*@Q?BX ?$LY@?$X.@`LY@Ns aSJ@@#eC&O] ?Y@?X.@`?o] ?x?fV`$I@RX DBX GX`?S-?a@_] Y@:@?$?@?@@GX`*@?:@?0#?O] ?WX`4?>s 0#D?D @VV`4@]. ?lC?eC&>s U`O] >s ?*@@I@:@?D?U`?P#?4?BX ?@#7X`$?$E`O] ?$?Ns ?D?@$7X`D?Q?*@LY@$?:@0#D4?BX ?I@$D4E`J@0#:@>s $Tl``#:@?7X`O] U`7X`LY@_] O] ?D?GX`?GX`?X.@`?WX`?I@?@#?7X`?$0#RX O] ?$ @Y*@T?GX`?P#?$?J@?Tl`?E`?J@]. GX`aVV`?S-0#^ $?Q?LY@?BX $>s ?E`?WX`?U`?@7X`?@#?X.@`?X.@`?@#I@Y*@Ns ?BX ?D?7X`@[@S- @7X`?BX ?bX ?GX`Tl`:@*@WX`7X`?VV`]. Q?7X`?LY@?4LY@VV`BX ?BX ?LY@ @BX ?7X`?E`E`_] `BiTl`4?7X`?>s LY@Tl`@#?Ns ?LY@I@WX`?@#?RX ?RX ?O] ?BX $$?*@?Tl`?S-*@4?>s *@S-QLY@>s @#>s ?P#?Y*@?4>s >s RX Y*@4?LY@?0#? @?LY@?>s ?7X`?>s ?GX`?Ns :@?0#*@Y*@Y@D@#>s ?O] ?f?f?a?O] @#0#?:@GX`P#I@U`?E`?@#?:@P#Y*@?>s ?_] ?RX ?4?7X`?I@?Tl`?S-?>s O] aTl`?E`?LY@?7X`?>s Ns e`[@>s 0#?U`?eC&?LY@@#? @?$$?@4\Y@bX Q?E`?S- @O] I@7X`? @? @BX :@?:@?0#DQD?0#?0#DJ@>s BX Ns 7X`?LY@?GX`@#$J@?BX ?S-?I@0#? @?$?LY@?D:@ @?LY@?$LY@GX`$?BX ?S-?T?Y@?`Bi?Y*@?LY@?4@I@Ns @?*@O] GX`?D@O] ?@?O] ?Y@?`Bi?I@4*@LY@Y*@QI@QGX`?O] ?i*@?i*@?Ns BX J@>s ?@DI@LY@:@?$7X`D:@^s c-?@?^s ?RX ?BX ?$4@:@VV`LY@$RX VV`?@#?7X`?7X`E`Y*@J@>s D?E`?S-@4? @@#7X`>s @#@#P#7X`P#RX BX TY@QGX`?@?4LY@S- @?Q?T$Y*@RX $4T_] aSdm`#?4aSP#BX 0#?GX`?BX :@E`J@U`O] *@0#BX BX 0#?7X`?RX ?_] ?eC&?\Y@?@?@?LY@?BX >s RX BX *@P#?^ ?E`Q @?O] ?U`?X.@`?4@#0#QY*@@?GX`?*@$?7X`?[@?VV`VV`gX`^s Ns I@J@I@*@ @7X`0#BX P#Ns U`X.@`$?S-?`#?aSdm_] J@S-J@?@@#LY@?>s ?S-?BX ?*@?:@$I@? @GX`@Tl`Y@Ns *@?Y@?Z@7X`LY@QaY*@QeC&h.@`_] VV`DE`^s ^s BX ?:@?4Ns RX ?$Y*@c=c=c-e`c-$\Y@T?$?D$$?GX`?:@P#Y*@TRX RX RX P#Ns RX LY@ @?:@?S-?a?J@U`O] ?BX ?DBX VV`E`? @>s ?7X`?b?U`:@:@:@E`P#`#7X`?Ns ?0#:@BX *@7X`^ eC&Z@Ns QTl`BX ?RX ?S-7X`*@?:@Ns _] S-@#?RX ?d?d?4^s [@0#?*@ @E`S->s ?U`?a?VV`?LY@?Ns ?I@?D?7X`?*@D @?@T^s S-? @?_] ?a?I@?4I@c-Z@Tl`fV`dmQP#S-RX TTl`Tl`E` @D:@?BX J@gÅc=$?[@?^ ?@#?7X` @?S-?X.@`?@E`0#*@DBX ?E`?D:@I@S-*@?U`?Q?>s ?P#?BX O] LY@$@?:@?BX *@@?P#?E`?@?:@I@^ GX`@*@?:@>s _] O] $O] Ns $7X`P#U`Tl`U`U`J@>s ?*@?^ ?Y*@>s @?O] Ns dX.@`I@7X`?GX`?E`?0#?d?r?f?7X`?4 @^s bS-*@?$?:@?O] ?Q0#?E`?I@?0#>s @#@#VV`Y*@>s ?>s ?I@?@#?E`?Q0#^s RX I@Y*@J@?>s ?$@#:@?4?@RX D?D$Ns DX.@`^s >s ?LY@?a?fV`?Tl`? @?GX`?GX`?T?QE`BX @?D?I@?GX`?WX`?]. ?S-?O] ?D>s ?@?a?Z@ @?$?O] ?GX`?7X`4?7X`?T?RX ?>s @?*@4$?BX BX [@4?0#@?D?>s I@:@0#X.@`O] ?GX`?>s P#WX`S-[@_] J@@?LY@?E`I@:@?0#GX`I@?@E`O] @Tl`P#?z?N?v?Y*@:@BX `Bi^ WX`dgX`]. 7X` @U`X.@`?0#?D @?7X`?@#*@LY@Y@VV` @?7X`J@Z@J@GX`Y*@Ns @?$?D?E`?4@ @?LY@?E`GX`>s ?4E`Tl`Ns BX ?GX`?Z@?>s 7X` @DVV`?*@?I@?J@?@#?>s ?BX ?7X`?>s ?S-?LY@?$?GX`?O] ?7X`?Q?Y*@0#S-?0#?7X`O] BX ?LY@?Q?@#*@BX @?BX ?>s ? @? @?@#?:@E`P#@GX`0#@#Q? @?GX`?*@?@Tl`RX ?BX ?J@4LY@LY@QQ7X`$GX`J@GX`O] LY@Ns D?VV`?dm?E`E`*@D?LY@?M;@??8T?a*@>s Q @? @_] f\Y@GX`>s VV`Y*@$?$*@?Q?`Bi?Ns 7X`@# @? @O] [@P#*@>s S-O] ?4?Z@?S-*@:@7X`@# @ @GX`E`O] U`BX @#@#?S-?`Bi?Tl`?Tl`?S-?0#0#? @?RX ?RX ?D?Ns ?Z@?S-?7X`?E`?BX ?E`?GX`BX @?O] DaP#>s TJ@? @:@S-LY@BX I@GX`$?*@? @?0#?E`@S-D?0#?@>s X.@`\Y@:@?:@?$LY@BX ?@#?GX`?BX ?>s ?@?0#?LY@?S-?J@Ns Tl`O] O] Y@Ns ?T?c=?VV`? @$?S-?m?w(?wÅ?j@?Ns ?7X`7X`LY@?D?Tl`7X`RX @?GX`?J@0#RX :@@@#?E`?\Y@?LY@?:@?O] ?I@?0#?D?E`?@?4?RX ?LY@@#RX ?4?[@?>s S-I@*@BX Ns U`O] @#U`RX 4Y@?s=?w#n ?wX`?S?y?m?e`?>s ?WX`?U`?*@? @?Tl`?Tl`?0#?O] ?>s ?E`?T?$7X`?*@>s Q?:@7X`7X`0#WX``#O] @@#Ns @#0#I@:@?I@?DGX`BX ?E`?LY@ @S-VV`:@0#? @ @7X`?D?S-?$?@#?7X`?D?Y*@?_] ?]. ?U`RX O] LY@VV`Ns @?$?GX`?>s >s ?[@?t8T?gX`Y@^s ?*@?:@P#Y*@?7X`?a?DLY@?$?]. ?Z@0#]. Tl`I@VV`J@?$7X`BX ?GX`?Ns ?4?U`?a?>s *@?Q?RX DVV`0#?4GX`U`BX ?$:@[@S-*@E`@D[@?X ??M?$`?`?z?y?xc4?BX ?BX LY@Y*@?*@?S- @?4?\Y@?7X`J@?:@?LY@?0#?>s ?:@?*@?P#?P#$ @BX D @?@? @*@P#`Bi`#D?P#?GX`I@GX`?D?Q?>s :@E`7X`P#Y@@?E`? @?@#?Ns >s P#@?*@?:@?O] ?J@?D?@#>s WX`LY@@#Ns 7X`@Ns @?GX`>s ?J@?q?fO] 7X`?T[@Z@?Tl`?rX ?i@4$?Y*@?P#RX c-]. Tl``Bi\Y@BX LY@VV`4@E`?O] ?`BiI@dD?*@S-]. S-O] S-J@:@*@?E`?I@BX >s ? @*@?Q?0#?Tl`?H?@?d`?!? ?BC@?a?`BiE` @VV`dmJ@?D@#$?^s ?BX Y*@J@@4?E`?S-?BX ?GX`?GX`0#:@?$?D?P#?E`?BX ?P#E`c-]. @?RX ?DE`Ns 0#?0#?:@ @?$VV`dl`?7X`?h?TBX @?$?4?>s ?:@?$DNs Ns `BidmO] GX`4?D7X`BX ?BX $7X`?^s ?b?X.@`?a?U`O] ^s Q?`#?y9?vV`?VV`?$?J@? @E`D:@E`Z@^s GX`@#Q@#I@\Y@$?U`J@dl`Ns RX [@VV`RX RX J@>s *@?:@?GX`?7X`?P#?I@@?^s ?a?lY@? `?g@?y`?IҀ?G?Ѡ?a+`?^`#@#?@I@aU`@RX U`?BX ?J@7X`E`Y@_] ?Q?7X`?D?LY@@*@?>s ?BX ?D?:@?$?RX ?Z@?*@BX @? @?BX ?S-?E`>s S-I@?$?$?7X`?Tl`? @Tl`?bX ?x.@`?j@I@D?S-?VV`?BX ?*@?0#0#O] BX >s aj@]. 7X`S-Ns ?P#?I@BX @*@VV`Ns ?@?LY@?Tl`4`#Y@I@?J@?p ?q?[@E`LY@?@#?[@?S-?:@@#WX`O] $*@$GX``BiQ?I@?0#@#?4?0#J@J@? @?$Tl``#>s ?D@GX`?X.@`?RX 4?Tl`?f?e`?I??A`?]??a? ?>:@?:@?$>s Tl`T*@>s Tl`E` @:@[@c-I@?*@?O] ?WX`?*@?*@?E`@#S-0#?GX`?S-?>s :@?:@?J@I@GX`?X.@`?_] ?$S-LY@?*@?0#?0#?VV`?Tl`?@#?i@?wÅ?lC7X`Ns ?@#?BX :@7X`?7X`@BX ?4?I@GX`c-aSY@`BiRX ?Y@?a?@#?4? @VV`]. RX :@$Tl`_] BX ? @4?:@?Tl`?@#Qc-]. ?D?^s ?S-?J@?BX @#E`?$?$0#E`TJ@?7X`?@#?>s ?Ns ?4GX`?a?bX GX`c=?Tl`J@[@4?BX ?0#GX`*@?Y@?`#?s͚@?͚@?? ?Kt? ? ??$Ns S-P#P#@?LY@?BX E`WX`Tl`QU`Ns D>s ?J@?VV`?4?0#?>s T`Bi>s ?Ns ?I@E`VV`?4?RX Ns U`?J@?U`?$0#?*@?D?7X`?$?D?D?:@?WX`?bX ?Tl`@D:@E`S->s ?BX D?*@ @GX``BidNs ?Z@?dm?]. ?X.@`?DP#WX`P#E`4J@RX ?7X`?U`J@$$\Y@gX``Bi0#?7X`?0#?@#?D4?@@#>s @?7X`?BX @7X`?@#?D*@?*@?aS?f?7X`P#?D?:@aVV`?BX *@LY@E`Q@?`Bi?h?no-?sb?{@?h??|C?Ns P#LY@\Y@Y*@LY@TQ?4?U`?S-0#`Bi[@$$LY@Ns I@?I@?:@?:@?*@P#Tl`*@?7X`?>s ? @>s ?E`?^s ?E`0#?7X`?$7X`?:@?T?GX`?@?4?:@*@0#?$*@@#? @?:@?7X`? @GX`LY@@#Ns O] DS-I@?Q?O] Tl`aGX`?O] ?VV`?RX ?O] TTD0#>s LY@?0#?P#0#Tl`D7X`WX`^s WX`X.@`P#@0#I@GX`E`>s @@$?@#?>s O] aI@?I@?D? @?:@?J@?@*@?BX BX fLY@?X.@`Q*@I@O] ?:@?D?LY@?ns ?w#n ?rX ?h?c-?U`LY@Ns RX J@@#Y@eC&_] GX` @:@Tl`I@?E`?BX 4J@WX`WX`7X`?:@?GX`?>s @#D*@0#?4?Ns ?$?0#?Z@?Z@?I@?BX @J@? @?S-?$Q4?:@@?LY@?@LY@*@?J@?Z@?Y*@? @U`\Y@Y*@E`$Y@`Bi@?GX`>s O] ?@?RX ?GX`>s QS-RX I@?@?LY@?D4@#:@Z@^ QE`@#? @E`eC&`#@#^ VV`J@E`?@?@#4U`TDX.@`h.@`bX 4?:@$Ns O] J@D?0#? @Y@O] ?O] ?>s D*@0#DNs bX a?O] ?h?^s ?J@?RX ?S-?0#:@7X`:@I@\Y@gÅh.@`c-[@I@7X`*@?7X`?Ns ?I@@#dfVV`7X`?@#?Ns E`*@? @?BX ?BX E`O] ?*@?0#4?@?0#BX 4?D:@aU`?*@?@?4?U`?I@GX`J@?4?Z@?`Bi?J@7X`BX 4?*@?$O] \Y@Q*@?@?GX`?[@?dm?Z@LY@aSRX *@@#?0#?\Y@?Q@?D?J@Ns \Y@Ns I@P# @?RX @dl``Bi?7X`U`P#GX`I@? @?D4[@`BiNs 4P#Y@Tl`O] O] RX I@*@$?:@?Ns >s Y@*@?E`$D?4GX`^s BX ?Z@?VV`GX`Y*@P#*@?@>s $I@U`X.@``Bi`BiTl`7X`?D?>s P#WX`?0#?Y*@b^s DNs 7X`?O] ?:@>s ?GX`?GX`? @GX`0#?@TbO] ?GX`?I@?@4Tl`_] I@?BX ?0#?BX ?D$BX ?P#?Y@?Q?D?LY@?S-?D>s GX`?@?D?U`?]. ?c=?^s D^ 7X`?@X.@`O] ?P#?@J@?U`?^s 4?Y@?:@TI@?0#*@WX`Tl` @? @7X`@#QX.@`D?:@?@#4?@#?_] ?c-?VV`$Tl`WX`P# @?P#?T?I@VV`^ :@?GX` @LY@?GX`4BX ?X.@`?eC&?P#GX`S-Q:@Ns 0#?:@@#GX`>s T:@?P#?Z@?7X``BifBX ?[@?GX`GX`?BX ?WX`4J@?7X`?:@0#7X`>s BX @#?@?Y@?X.@`LY@dS-?S-?a?D\Y@dmTl`?0#?I@?4 @? @?@#?:@*@:@?0#?J@?I@?7X`?:@?P#?BX J@BX ?P#?Q?@?@?:@?E`4RX 40#_] X.@`?@TaS?@#?Y@?$?Y@?kY?Y@@#GX`BX 4@Ns Z@Q?$E`WX`J@?>s ?P#?J@?Ns ?\Y@?fV`?j@?f?U`? @:@:@@?@#?U`?I@Tl`bX LY@?GX`?J@@LY@7X`?0#*@0#?I@?>s DE`GX`VV`P#D?I@?X.@`?0#?4?\Y@?Ns RX S-? @?$Ns \Y@Z@*@?VV`?P#?Ns ?Z@?D? @?@*@@#S-aS`BiRX 4?S-?\Y@?0#O] :@?T?`#?:@_] `Bi>s ? @@?7X`?I@?:@?4?*@GX`Tl`D?7X`?J@?7X`@?:@?E`@*@?7X` @J@P#QNs 0#?:@?@#*@BX :@LY@@#?$TbE`?@@?WX`?dl`?Tl`?GX`?P#?D?GX`?P#E`c=Y*@?*@?RX ?Ns 7X`?:@?7X`7X`?*@?Z@?^ ?WX`?RX ?J@?@#?>s ?BX LY@$?>s Ns T?I@?Z@?LY@?7X`4I@0#@*@BX TLY@VV`fa?4?VV`?X.@`$:@?Q?O] @#I@$GX`Y@Ns ?7X`?J@?:@Ns Tl`7X`?LY@?]. ?Ns BX DI@Y@P#:@LY@>s ?I@?GX`*@:@?4?GX`0#?E`?I@BX Ns ?GX`?\Y@?I@? @0#I@@#?4?S-?O] ?7X`?@$GX`U`Ns >s @#?0#?P#?Ns ?J@?4:@0#$7X` @DLY@RX P#@$?LY@?`Bi?]. ?Y*@?VV`$U`D?@?>s ?Ns ?4@# @U`J@?GX`?GX`? @@*@>s @?Q?RX E`Q @@#E`?D?LY@?E`?U`?LY@BX WX`BX ?$4I@T`#[@ @?@#? @Z@aRX :@$?D?U`?E`BX J@BX 4?$ @VV``#Tl`?BX ?bX ?X.@`4@?@#?$?>s ?LY@ @BX ?4?>s J@Z@O] 0#?S-?`#?Ns D@#?E`?Q?4 @?@#?O] ?D?@?:@?RX ?@#I@I@@#D:@LY@VV`@?D?7X`?X.@`?a?@#:@@*@7X`DRX E`?D?J@4S-TVV`X.@`E`?:@?LY@?I@?D?:@ @4@BX U`Ns P#Y*@D?@O] WX`J@BX $?*@$J@BX ?RX ?a?DE`:@Ns WX`J@:@?@?Q?Q?RX ?Tl`BX c=T?7X`7X`VV`GX`7X`J@O] @#Qa^s QO] @#?D?X.@`?Y*@?E`LY@\Y@Q? @BX :@?7X`?O] ?GX`$?4?S-?7X`@?GX`?P#?*@?@?4Ns bY@?LY@?U`?I@4$?@GX`TD?:@?E`?$*@?BX ?Tl`$Y@Ns E`P#$@Q4?4 @?S-?c-?@#O] 4@#>s @#GX`4? @$$4X.@`VV`?0#?E`*@DE`?*@?WX`?Ns 0#DP#S-VV``#WX`7X`O] _] `BiX.@`7X`?*@$@#@?O] ?Y*@?BX 0#>s S-Ns D@#BX BX ?D?\Y@?I@:@?@?LY@ @S-4?*@RX O] :@O] Y*@ @?Q?*@7X`? @?D?O] $Tl`GX`?0#?$$?@#?RX ?D?@?@ @?7X`?RX ?0#I@?4?WX`?*@BX ?7X`? @Y*@T?J@?^s ?Tl`@BX ?E`?>s `BifNs ?>s ?>s DE`?D?Y@?4GX`@0#J@?>s ?J@J@P#:@GX`?:@?b?[@?>s ?@#?0#0#?>s ?O] 7X`\Y@Y*@D?>s ?$]. ]. ?@?@Ns RX O] ?`Bi?w ?qM;@?*@@?I@?7X`@O] WX`S-VV`\Y@Tl`I@@#E`S-RX 7X`?@#?@#@#E`?0#?@#?@@:@LY@Y@\Y@O] ?@?Q?\Y@?WX`?Q?Q?E`?I@?GX`LY@LY@?*@ @Tl`@?T?40#? @>s D?$? @:@0#?@?4?@?*@?Ns ?Q?I@?Ns ?D?*@?D?@#@?>s ?TO] ? @?0#QNs ?E`?RX ?BX ?@?7X`?P#?7X`[@a7X`?T?\Y@?U`?:@?*@?BX ?BX ?:@?4*@4?GX`?J@>s E`$>s ?VV`?Z@?Tl`?S-?D?$?Ns ?Y@?7X`LY@LY@@#? @*@`BiaSNs VV`\Y@WX`Y*@?dl`?=^?}. ?@#O] ?*@?@?:@?BX @DP#O] @? @E`RX WX`]. T?4?J@7X`O] 7X`?@?@@E`E`:@>s U`aGX`?P#?$D?GX`?Y@?Y*@?\Y@?E`[@?*@?GX`O] U`GX`VV`T@@#U`RX GX`>s >s $?P#?Y@?I@?GX`?LY@?LY@?Y@?VV`:@$ @?7X`:@7X`GX`VV`I@ @I@U`@#?@>s I@I@4?J@?_] ?[@?GX`?4*@E`?@?E`?@?@?GX`?7X`BX @#?@?*@?0#?$$?*@?O] ?LY@?0#?7X`?P#?WX`?Z@?S-0#GX`@#? @S-[@VV`eC&$?w ?uC&I@fV``#[@@?T?P#?:@7X`GX` @*@U`RX BX Tl`WX`?:@?VV`S-Tl`RX BX *@:@?$?WX`?Y@7X`fV`bX $O] ?LY@?U`?bX ?_] `#7X`?LY@GX`Ns ]. \Y@GX`J@TTS-E`DGX`?J@?a?[@?Ns BX ?>s ?RX @LY@>s :@DBX 0#*@J@Ns @?0#GX`[@Tl`Ns TP#@?@D:@?RX ?RX *@?7X`*@?@?>s ?P#?]. 7X`aSGX`?D?@?@#?U`?*@P# @?Tl`?Q$E`?@?X.@`?`Bi?Q@?$?J@?7X`?P#?a?BX GX`:@^ c=?*@?7X`ae`aS^ 7X`?GX`?@#?4 @0#?:@WX`X.@`DP#VV`7X`*@Y*@_] VV`Tl`GX`?$?LY@?`#?aS?>s abX ?*@?Y@?J@?:@?:@?GX`?U`?VV`J@0#?I@?S-?RX ?D>s GX`BX I@7X`*@Ns LY@I@U`Ns ?@?D?E`>s [@I@?@$0#?@?:@?0#BX RX BX ?*@?0#?>s ?P#?RX ?@LY@TQ:@?E`?P#7X`0#?pBi?{Y?m. ?Q?T?D? @?*@?S-?Tl`Tc=?VV`?GX`?X.@`?d?LY@7X`?Ns ?a?RX >s P#*@?D?$E`4?LY@?GX`J@$?`#?X.@`*@?0#?7X`P#[@]. X.@`E`>s @#$BX :@@?D?]. ?Tl`GX`\Y@VV`S-Tl`Tc-lCdE`BX J@@#$?7X`?RX ?Y@?O] DTl`?7X`?Y@?BX :@44E`4?D?I@?Ns ?U`?Y@?J@ @$:@J@? @Y@^s Ns RX _] bX X.@`0#7X`QGX`7X`0#?$?0#?D?P#? @Ns GX`*@?*@?7X`?:@?S-?J@:@P#:@?>s ?VV`?Z@?Ns ??S?@?f?:@$LY@@?E`?D$VV`LY@?X.@`?c-?^ ?c=?bX ?7X`4?P#?\Y@?Ns $>s ?$?>s >s P#? @?P#@a]. ?E`?RX 4?X.@`?S-4D?4?I@?4*@LY@QLY@E`?:@?Z@?RX >s TJ@44GX`_] fX.@`?>s ?4I@P#BX *@ @?@#?S-?GX`?$?BX ?@Y@_] O] S-aSTl`?E`?J@?$?7X`@#:@QX.@`0#4ddmD$Tc-bX Q7X`$?@?$:@BX ?$?:@?BX ?BX 0#I@@#@#DBX *@ @7X`$?I@?Y*@?X.@`7X`?@#?#n ?l`?@?X.@`U`Ns O] ?4?Tl`?7X`E`7X`?T?f?fV`?aS?a?T7X`I@?@#?7X`$D$?0#:@I@? @?E`S-Z@GX`DBX ?I@?S-?4?7X`?Tl`?Ns 0#LY@Y@S-RX [@O] ? @ @BX 0#?@#?I@?:@?@*@J@4?P#?Q@E` @?$4 @?E`?D?D?Q? @WX`P#GX``BiLY@DO] Z@Tl`*@$7X`:@Y@_] @?*@Y*@Y@@*@Ns RX QGX`7X`?@?>s ?*@?@?7X`$Ns P#:@?E`?I@>s U`Q>s DVV`>s ?Tl`?GX`$?GX`?VV`?J@GX`J@?ux ?>?vV`S-Ns ?0#@?@#?Q?$7X`?4?]. ?f?dm?Y*@?Q?@#*@@#*@?@I@VV`P#GX`X.@`Y*@0#?E`?GX`?0#J@Y@QGX`>s ?*@?:@@?@?I@?:@? @GX`Y@QQ_] [@I@@#4?:@?Ns ?>s @?4?I@>s ?4?I@ @Ns >s ?$@?0#BX I@?0#?@4?BX ?LY@7X`Tl`>s Y*@aSbO] ?*@4E`:@WX`\Y@?0#?RX ?@?0#RX Y@*@?>s ?0#? @?0#?7X`@>s ?7X`4S-Ns >s P#WX`U`Y@P#7X`RX @?aS?RX E`?7X`?I@0#DD?7X`?S-BX J@?Y@?Y@$$?0#*@7X`?S-?\Y@?RX ?>s ?0#0#? @?BX ? @GX`DBX a^ @?BX ?$?*@? @*@?4?7X`?BX ?@#? @@$0#?4?P#?4I@E`>s QU`P#J@:@?7X`?>s @#LY@?@#?Y@?4O] I@7X`\Y@`#RX LY@>s ?$I@]. P#@#0#?BX ?*@QS->s LY@QO] ?7X`?LY@I@VV`DQX.@`?I@?@#?Ns ?@#S-S-?>s ?P#?E`?@#?>s ?:@? @E`BX ?@?@?:@?a?`BiJ@^ U`a[@*@P#I@?WX`?@#Tl`@VV`D?D?>s >s O] ?GX`?f?U`Ns GX`?4?7X`4Tl`Y@4?RX ?VV`?GX`?@4@#?>s @?P#?^ ?BX VV`RX BX X.@`D?J@?Z@?Y*@?P#?E`?D?:@?$*@LY@LY@?$?Q?D0#0#?$GX`P#P#D?$?4P#Y@?4?[@?I@@#I@? @?E`J@aS\Y@`#aS>s QLY@0#?@#?@J@GX`$?:@?0#:@?7X`?DBX GX`@#LY@*@ @?@#?4:@?@?LY@?D?GX`?Q?:@?$?E`?*@*@?>s ?Tl`?k?~9`?~s ?`BiVV`X.@`^s E`?Ns E`Y@?>s ?4TDDY*@LY@?@#?P#?:@J@$?\Y@?TDD?>s ?$P#U`BX ?7X`?VV`?\Y@?J@@4*@?4?P#?U`?4Ns J@E`Z@^s LY@$?*@ @Ns >s ?7X` @GX`Ns U`S-@?4$BX ?J@?GX`?>s ?E`?GX`?@#Ns aNs ?@#?BX ? @*@?GX`?a?O] GX`@#Y*@k@Y*@?40#$?>s ?$?BX ?Q?GX`?:@?0#?>s @QBX 4*@?E`?BX 7X`4BX I@7X`:@0#?GX`?I@?@?Q?[@*@Tl`?@?@#?7X`?]. ?i*@?t?/`?t?dWX`VV`D?RX ?c=?>s LY@?>s ?E`:@GX`J@O] P#P#$?@WX`Y*@?I@?[@GX` @LY@dWX`?S-?`Bi?Y@?O] @#?$?LY@?D?7X`?GX`?D$BX E`J@DE`I@ @>s [@Ns LY@f^s ?I@?$X.@`Y@WX`RX @?@DD?@#?WX`?RX ?>s ?LY@?`Bi?a?T?E`0#Z@Y*@BX *@:@D?7X`?a?VV`@?D*@fV`Z@?:@?@?>s I@GX`?Ns ?Z@?U`?BX 4Ns BX ? @I@@#?Q?@#GX` @?*@Ns TE`Ns GX`?7X`?0#7X`?I@?TS-c-D?@?@?_] ?ino?i@?p#?oD?BX U`D?$?RX ?`Bi?U`?:@?BX ?LY@?O] ?E`?0#? @P#aRX ? @DLY@?0#?D7X`E`@QgÅ\Y@?T?]. ?7X`@#J@@#?E`?X.@`?O] ?BX ?P#?GX`BX I@7X`0#?0#?D?J@?T@0#?q?u>0#^s ?U`?LY@U`RX P#Tl`$?D@4?BX ?Q?E`?*@?$?GX`?Ns ?0#?0#?D0#Ns @#GX`WX`Z@BX ?S-?O] *@?7X` @^s BX ?T?@#?4?*@Z@^ $?O] ?WX`?GX`E`T?BX ?Y@*@*@?Z@?Q0#?:@?E`>s D@GX`T:@0#LY@@#7X`Y*@Tl`?BX ?I@? @?D?D4? @?O] ?D?0#?4@4?4?O] ?E` @?:@?_] ?b?^ ?S-E`]. D?0#?@?@@#T@#?BX ?Ns @Z@VV`?4?>s I@S-7X`?7X`?J@?Q?D*@44:@4I@?:@?U`?Q?Ns ? @?dl`?>?9?k@RX ?T?E`Q@*@Z@Ns ?7X`? @:@@0#:@7X`P#I@BX ?J@?@J@>s E`WX`WX`P#@?4@*@J@VV`?GX`?b?J@ @$TU`E`:@?$4I@_] @?Q?@?GX`?dm?^ ?:@?I@?X.@`?Q?I@?>s BX VV`Ns 7X`DP#VV`T?$?WX`?S-?@#?@QbY*@?*@?VV`?T?@J@P#J@@#E`Q4?J@?Ns ?Tl`?T>s LY@?*@4I@BX P#?J@?^ ?O] ?@>s GX` @?*@40#?J@?S-?BX ?GX`?I@@#X.@`Tl`@#$Y@c-0#?O] ?7X`?E`?D?c=?G ??fBX ?O] Ns ?GX`?>s Y*@^ O] E`>s $Ns Tl`?*@?J@?>s ?E`?I@:@X.@`I@0#$?*@LY@`#Tl`0#$Ns O] ?VV`?fV`?DI@:@4@7X`Tl`[@dmE`aVV`4*@?:@?U`?I@7X` @?T?\Y@?P#I@I@:@*@*@@#QO] 4>s GX`?7X`?WX`?DNs Z@P#?4?>s E`LY@7X`O] ^s X.@`4?E`Y*@Ns ?*@I@Ns P#[@$?:@?BX ?[@?T:@@# @4?LY@?P#?GX`?Q?LY@?GX`?]. ?GX`DBX $7X`Z@^ ?0#?I@7X`?BX ?LY@@#?E`?Y@7X`@?Ns :@D?P#?Ns LY@aSbX.@`4?BX 4[@$?^ ?[@?Tl`?U`?RX ?Ns 0#Tl`BX ? @?GX`?VV`:@e`\Y@?@?BX :@T?>s ?a?I@:@?$?0#? @I@agX`?7X`GX`GX`7X`DTTQVV`S-?BX 4RX E`?:@?BX *@:@$@#Ns S-abX @?e`?ns ?dl`?4LY@?BX *@:@DTl`*@?]. ?h?]. J@VV`:@I@TO] X.@`Z@7X`?@#?J@?I@:@T4?D?>s ?D?X.@`?Z@?BX ? @@BX ?7X`?^s ?S-?$?*@?*@*@?0#?[@?I@VV`>s ?*@aSlCfY*@$ @Q>s ?GX`?O] ?*@Y@c-Y*@D?7X`Z@J@?Y*@?WX`?@?@#?O] ?47X`?*@?:@?4?BX 0#Ns ?4?VV`?Tl`? @\Y@Q?T?Q?*@?D? @I@*@?0#I@J@?VV`?>s ?$?0#BX ]. Y*@GX`Ns RX :@*@J@J@? @?RX ?Q7X`? @@:@$4GX` @?]. ?lY@?ns ?b?RX ?WX`?[@?@#BX >s @? @?D?WX`?bX ?d?P#E`J@*@:@RX Y@S-D @?@#?0#E`I@? @?P#?\Y@?`Bi?a?Y*@I@@#Ns E`?$7X`O] 4?@?*@?0#?BX ?Tl`?4Z@Ns ?$Tc-^ RX E`U`^s LY@?@?Ns ?S-*@P#BX O] I@@P#E`?RX ?7X`Y@U`?*@?RX ?@#?P#?S- @LY@Ns ?U`?P#?I@?GX`I@I@?U`?S-$? @$RX :@?J@?@#?E`?I@@@?7X`4?@#?J@4I@?$?E`?GX`?LY@?GX`?>s ?BX ?@#?7X`?0#*@ @?Tl`?a?T @$?@#?Q?VV`?Y*@?[@?U`VV`O] ?$?0#?7X`?I@?*@$*@RX Y@?O] ?@BX 0#$? @?J@?J@?4@D?@?a?f?a?Tl` @>s ?@GX`]. X.@`Z@^ I@? @?*@4QE`*@>s ?:@?Tl`?0#@#DJ@GX`RX Z@Q$?LY@?Y*@?Ns ?E`?E`E`Ns ?$@ @?LY@ @Tl`:@?P#?WX`?47X`?I@?U`RX VV`E`4U`P#?E`?BX ?:@?]. ?S-:@?$?J@@?O] ?RX ?:@E`GX`@?:@?7X`?J@?[@?S-7X`I@?4?Y@?a?\Y@?0#J@@#?4?7X`@#T7X`?[@?dl`?RX BX J@BX E`$?E`?I@?4J@\Y@D?:@?@?ino?'`?wÅ@`BiRX RX D?I@?O] ?BX ?GX`?D?4?*@ @@0#TJ@?VV`?`#?RX ?E`?0#?BX ?U`^ X.@`I@I@@#*@?*@TS- @?@#?T?VV`?0#>s $ @LY@J@?@#?P#?T?Tl`?DBX *@?LY@?>s ? @?4$ @?LY@?S-?Q?0#GX`:@@E`BX 0#4J@aaD@?$?Tl`?O] ?LY@?Y@?7X`4?J@?Tl`*@U`BX ?0#?*@@?@?>s ?:@@#4?Q?^ ?Ns GX`WX`Ns @LY@VV`$?]. ?bX ?BX Ns >s ?@#?@#?:@?GX`?J@?D7X`RX ?4?4?/`?͚@?)?pw@Z@?:@TO] ?0#?BX ?D?BX ? @Ns `Bi^ Ns Ns E`?GX`?Ns ? @?0#?O] ?^ ?LY@I@>s ?E`?I@:@U`$?O] ?@$?>s ?0#?@ @D?*@?RX ?7X`? @? @I@E`?@@?I@?@#E`O] ?0#?Q?@#*@0#?I@?RX ?$?@?>s $I@U`X.@`@?RX ?RX ?Ns @Y@^ U`4?GX`?BX ?$?@#? @VV`Z@?J@0#Y@Ns $:@I@J@Ns *@?BX 0#LY@?E`?Y*@?*@Ns D@?4?GX`?BX ?*@?>s ?Tl`?\Y@?O] @#GX`?BX ?U`?GX`?*@?D?P#?0#7X`:@?0#?H1 ?C&?"@?t8T]. 0#?LY@Ns X.@`4@*@?$?:@*@Y*@bX U`@#0#?4?:@@7X`4?0#?WX`?Y*@?J@?D?Tl`?X.@`$`BiI@?I@*@?7X`0#GX`DGX`?E`?a?Q? @@I@@#? @:@4?7X`D^s I@?P#?RX ?0#@@#:@?LY@?P#>s @#?>s ?>s ? @BX Ns ? @?Q?S-?]. ?\Y@U`E`?BX ?I@? @?@?$RX c=^ BX \Y@\Y@I@0#0#4D>s @I@I@?Q?^ ?BX @?4?:@?0#?GX`?RX ?O] ?@>s ?*@?O] RX 0#?BX @#X.@`E`? @@DS-?T?`?S ?"@?]. `#VV`?4?*@?7X`0#LY@$?GX`?Ns ?$O] O] $? @?*@?:@?$>s I@4?GX`?[@?^s ?T?Q?\Y@?I@Tl`Q>s VV`S-@7X`*@?4 @?@#?]. ?Tl`?D?@#?@?0#?@#?@?7X`?7X`X.@`aS @?`Bi?[@?:@*@E`I@?*@?E`4GX`4$?@?*@@?@?0#?$?RX ?a?WX`?:@?J@?RX @P#?J@:@S-7X`*@7X`?7X`RX [@:@?E`?>s ?>s ?BX $QRX $?RX ?VV`?I@?@#?4$GX`QLY@>s J@Y@Ns ?*@0#Tl`4?>s O] ^s P#LY@J@ @RX U`?pw@?b?] ?gÅ?J@ @0#?E`?LY@?D?BX 7X`TE` @? @?@0#$?GX`?Tl`?RX ?Ns ?:@7X`>s ?@?>s ?LY@?U`?Ns ?E`?[@?Y@>s Tl`QWX`LY@4? @?I@? @$?D?LY@?P#?Tl`?T?Y@?U`?BX ?E`?*@]. c->s ?X.@`?\Y@?I@?$DD?@?@>s O] TE` @7X`BX :@7X`?7X`?X.@`?Y@?T?T?E`Ns Z@ @?Q7X`?>s @#?@#? @U`>s ?I@? @ @?I@?*@O] D?4?4?@?GX`?Ns ? @>s GX`[@c-Z@Ns D?$?4RX _] 4?J@$@#J@Ns ?>s DT?sb?x ?E`?c=?S-?S-?Q?RX $LY@$DU`D7X`LY@GX`4?*@?X.@`?dl`?dm?\Y@?I@? @?7X`?Q?E`@? @? @?T?Y*@*@U`LY@7X`?$?0#@#BX $>s BX 4?:@?BX ?LY@?\Y@?VV`? @ @0#VV``BiZ@@#?@#?7X`?*@?DLY@*@?D?>s >s TBX ?7X`4TRX LY@GX`@#>s @?GX`?LY@?*@$?4?BX 4BX ?@:@LY@?*@?GX`X.@`X.@` @BX T>s @7X`?@?BX 0#?E`?Q? @*@?$>s VV`U`P#$?Z@?Y@P#a:@?GX`?0#?>s ?Ns @4?S-?:@Q?\Y@?ux ?p ?O] *@7X`?:@?4Y@Y@?0#J@?7X`:@GX`>s ?@?RX ?a?b?[@?Ns ?D?P#?WX`?LY@ @0#47X`?E`?VV`?@LY@@#@? @I@U`TI@7X`J@S-Ns RX J@?D?I@7X`E`@#@#GX`WX`Z@Ns Ns J@@LY@@#?>s ?O] ? @RX ?]. ?Ns LY@S-P#Tl`_] eC&\Y@? @?RX ?VV`?RX ?I@?D?0# @@E`RX >s ?BX U`]. *@U`\Y@GX`?*@?>s ?>s ?7X`?$?7X`4J@0#@4BX Y*@X.@`?Ns ?\Y@*@E`?J@?Ns ? @?:@?RX ?>s $?*@?0#0#*@4LY@LY@LY@Ns @:@Y*@$?\Y@?LY@@?4? @I@RX LY@@?0#?@?$?:@?D?LY@?Ns ?GX`?I@?Ns ?I@D? @?Ns ?:@$0#7X`0#4QTl`4?$O] ^ [@_] \Y@*@?@#?@@*@? @?E`?0#DQY*@Y@LY@J@QO] :@?D?4Q?a?X.@`?*@I@aX.@`?*@?>s ? @?7X`?O] ?RX ?4$0#E`GX`?a`?@?d?^`?`BY?RY?_?gr?h05?_?j`?r`?lƘ?eDߠ?a@`?`}@?gZ`?c ?RY?T@?]1[ ?`}@?a@`?Z`?I0}@J`c/eDߠT@RYa@`]1[ L[BYOY[NU4@?`@}@N`V) `}@T@$@*`?BY?T0}@`C aQ$@N`S/*`RYaƠOBYWZ`N` `?`?GZ`?Q?E?@}@?`P}@]1[ ^g^gV) @}@$@`IJ`N``C YB ? `?0}@>`P}@P}@0}@7Z`UTS/YWZ`YWZ`D@J`U@}@?@}@?:`P}@]1[ *`?D@`:`D@BY? `@}@I? `>`7Z`?N` `O?0}@?BY?*`?@}@?7Z`??p}@?eDߠ?pC ?N`J`?I?aƠ?ip?f) ?YB ?h?x05?{N?u?kN?fe?d@?P}@?:`?N`?O?E?@}@?L[?D@$@O_[N@}@Te`}@T@\[`}@X05GZ`@}@IU[NO@}@WZ`^gT7Z`?BY?@}@O`C Z`BY? `BYYB Z`^`\[D@*`BY `*`T@E?@}@? `:`0}@GZ`OS/d@bL4@`ID@S/YL[P}@TGZ``?7Z`?:`? `?GZ`?J`P}@aƠWZ`*`Yc :`?WZ`?GZ``?D@?>`^gc/?:`BY0}@$@$@P}@Q?*`$@GZ`D@RY?$@?`C ?T?J`?O4@?q?S/?f) ?pX?X050}@? `?I?`C ?c ?YB ?ip?~`0}@?$@7Z`E>`?>`?$@QS/J`:`? `RYeDߠ`}@TZ`YB QJ`O]1[ gZ`f) UBYRYYB WZ`TP}@@}@:`@}@4@ `7Z`RY\[[NQ4@ `*`RYbYRY?@}@@}@_T@}@*`:`eDߠj`OE`}@X05ED@`?*`?0}@?E?N`?RY?I?*`?S/?_? `_Y `?`V) aƠ7Z`?a?doY`?L[`:`YY `>`?>`?I?:`4@[NS/?@}@?GZ`?0}@ES/?O?`}@D@*`Y?|&s`?w%M?f@?BY?*`L[E?[N?ip?a?gr?{N?X?j`$@?Y?f@?T@?E?O?D@?L[?J`?$@?$@0}@T@I>`J`D@J`[NYB TS/EIX05[N^gc aƠYB YT>`Ea@`dRY?$@?$@? `?0}@4@0}@GZ`T@TP}@BY7Z`N`X05V) `?RY>`c WZ`*``0}@^ggZ`UT@f) `}@`?>`?*`0}@?7Z`?_?a?O>`T@*`?L[`^ga@`RYD@N`UU?*`?d@?^g7Z`D@ `*`@}@7Z`?BY?N`?:`I_T0}@? `?E?$@:`?L[?BYYX05N`X05?ֆ`?R8 ?) ?J`:`? `L[$@?a?eDߠ?P}@?I?gr?m@?L[BY?Y?d?T?P}@?T?X05?fe?fe?I`4@OGZ`E\[^gI*`:`N`T@OP}@Z`YB T@TT@X05\[E?>`@}@ek^`4@7Z`0}@?BY?$@@}@ `OS/N`D@ERYO:` `?4@>`]1[ S/0}@:`0}@@}@S/J`S/d@a@`@}@?7Z`?$@E0}@?YB ?aƠ?OBYT@GZ` `>`YYB :`?4@?4@`YX05?P}@?X057Z``?N`N`I>` `?*` `S/]1[ QGZ`:`?GZ`?D@`? `D@V) >`*`$@?P ?]`?{?uzA@?`? `?7Z`?\[?a?@}@EP}@J`? `?J`?P}@?V) ?S/?@}@?D@?N`?T@?`}@?Y?*`?D@O[NGZ`T@c WZ``4@OWZ`Z`V) T@S/QS/WZ`YB T@$@*`^`ikNeS/N`J`?4@?`GZ``4@V) @}@?BY?`J`RY>`@}@[NT@ `D@Q@}@0}@?` ` `BYTP}@BY0}@*`0}@?@}@?P}@?GZ`?*`?$@?:`?$@J`\[RY?O?_?RY?7Z`BYUL[J`S/?:`QT4@ `4@7Z`IYB Y:`?7Z`?N`?Y?E4@ `*` `?E?7Z`?E?`?`?,`?yB ?$@@}@?GZ`?bL?RYBY?$@?*`U4@?bL?bL?GZ`?*`?``?:`?`L[O?U?d@D@gZ`N`*``}@_T@_Z`D@N`T@S/TN`O[N_TJ`Z`doY``C a@`doY`WZ`RY\[I4@GZ`J`eDߠS/?I*`]1[ U?`0}@aY?GZ`?@}@I>`? `:`RYGZ`@}@P}@4@?$@? ` `$@`?`?L[?WZ`?@}@O\[T@?>`?WZ`?:`$@?`@}@]1[ aƠRY?4@ `T@GZ`?0}@?:`?`@}@T@YT:`?@}@?WZ`?YB ?*`@}@?BY?T?L[?@}@?0}@?>`?`?Ơ??p?J`GZ`7Z`?GZ`$@:`?YB ?WZ`E?`?`}@?J`D@?`]1[ ]1[ 0}@0}@TP}@?V) ?ip?:`f@Y0}@X05T@WZ`j`a@`?@}@?$@V) bLbYJ`*`T@^`]1[ ^`^`N`?7Z`$@YP}@Q`C RYBYO`N`l[f@L[\[grWZ`?P}@?N`RYS/?:`?*`E0}@*`YB e\[I[Nc/T@$@?>`?O?I?D@?@}@? `*`?N`?U? `BY?4@N`E>`4@?4@T@P}@?7Z`?EBYTI>`? `?D@E@}@D@QO `?:`@}@S/?:`?]1[ ?L[$@ ``?l[?j`?j`?ng?e `L[?E? `L[7Z`EdbY?0}@?`f) gr7Z`?@}@`I4@?\[?WZ`Y`}@N`O `:`graƠ?*`0}@`C iiUEX05V) X05a@`T?@}@?U?7Z`I:`:`L[ `4@YB J`GZ`f@h[N_d@P}@?N`?IOV) J`RYP}@>`N`^g]1[ P}@X05bYE?D@D@*`?^g?`C ?WZ`?V) ?GZ`? `?$@?:`0}@`}@U?^`?YB V) YB `?:`?BYGZ`?N`^gc a^gD@?Q?T@?J`?J`?`OT:`?:`:`Z`GZ`?E?0}@*`?0}@*`?U?D@?doY`?o?c `7Z`?S/?Z`?D@:`E?0}@?:`\[m@c/?@}@?N`T@X05?>`?IP}@_*`?UJ``}@OE?*`YB `C QTUZ`^gP}@TaƠP}@D@_\[@}@4@N`S/4@?4@?4@?7Z`GZ`aYGZ`WZ`YI4@>`BY>`T@aƠYRY^gZ`OTN`?@}@?>`\[>`?{?$(@?^g[N?P}@?_?T@?O4@RY>`0}@Tf@`C ?O?L[S/>`?GZ`?4@?7Z`P}@GZ`J`bYf) bL[NBY?Q?a?`C ?P}@ `:`?*`?T@?Y?:`QRY:`?E?T@?7Z`?N`?T?c/?\[?7Z`@}@`?X05?a?O4@?4@?d?f@?>`UV) ?T@?:`?0}@?T? `YYB a@`U?0}@N`Z`:`GZ`L[?$@4@V) YQ? `?*`?P}@?EOID@agrda@`a@`a@`O?@}@?>`E\[]1[ P}@E@}@:`0}@?BY?L[7Z`UadRY:`YB `C WZ`Q?WZ`?I^g?O?H?̞?t_ `?J`?>`?0}@Z`a@`>``?$@?>`BYQ?E?EE? `?:`QV) @}@*`>`J`7Z`D@$@?\[?_?$@L[7Z`?L[?YB ?O`$@@}@?T@?V) ?:`?0}@?O?Q?*`?D@?>`7Z`?7Z`?U?L[$@?$@?c ?k?`C ?`UN`?:`0}@7Z`?P}@EfeX05U]1[ @}@>`GZ`0}@X05^g?$@N`O>`>`4@?bL?pC ?bYT@af) eDߠYB V) aU?BY?@}@Ua@`GZ`?4@$@0}@7Z`P}@4@?`RYS/J`V) E?$@IZ`V) >`?$@?*`7Z`a@}@?O? ?pXBY?N`?E?>`?GZ`P}@N`?4@:`?Y?WZ`?BYL[U?*`?$@GZ`?D@?L[GZ`O*`?>`?RY?S/?T?IUY?O?WZ`4@N`4@?0}@?`RYV) ?*`?L[``?BYJ`?7Z`?GZ`?$@?4@?c/?[N>`?$@?\[?X05 `J`?GZ`?a?RY:`RY4@?*`Z`^`?4@L[c/0}@>`c/O?>`? `Ic/a`*`P}@@}@@}@S/[NU?X05?uDߠ?uzA@?^`N`T@TT7Z`4@V) I?I?GZ`J`Y`?I0}@BYBYWZ`RYTdU?0}@BYD@?BY?@}@BYT@@}@*`WZ`^ga@`bY?>`?a?*`?O?doY`?GZ`?D@?U? `?$@P}@?aƠ?r?X05$@*`UJ`? `?0}@?IT@:`?P}@?WZ`?S/?*`\[Z`?D@?GZ`BY>``*`I`}@^g?`?N`?0}@? ``N`WZ``?`D@?*`?doY`?U>`?S/?f@?`}@?7Z`E?:`?V) ? `@}@?D@?Y?>``C ]1[ ?$@QY?T@?`h[N?0}@`S/`C U`IT@BYRYYBY`?GZ`?oG*?w?kN?`4@*`L[IL[S/>`? ` `BYN`?7Z`RYU7Z`:`4@OdoY`YB 7Z`UO?I?RY`^``C S/^`bYYB YQP}@RY?Q?\[$@?E?Z`?*`:`J`?oG*??u` ?G ?S/?Q>`O?$@? `D@Z`]1[ *`J``?7Z`D@X05T:`J`T@EBYBYD@TT@}@$@?*`?>` `4@4@L[7Z`BY?7Z`?`C ?BY:`?X05?`}@?O?0}@?P}@?WZ`? `?Z`?V) @}@_OYB S/?]1[ ?>`f@bYGZ`D@D@L[IBYRYRYS/aƠ\[?D@?Z`?N`?Z`?lƘ?gZ`?:``L[Y]1[ YOTT@@}@:`?*`?0}@X05YB ?0}@?>`?4@IGZ`P}@aƠS/?7Z`?0}@>`a@`h05Y>`P}@V) D@?L[?E:`?*`@}@?Z`?bYUL[??܍ ?D: ?,`?r`?\[E `T@]1[ V) S/0}@*`TT@J`P}@S/T@WZ`^g`C S/J`RYD@4@N`YX05*`?4@*`?*`?GZ`? `?@}@?7Z`?P}@?]1[ ?7Z`0}@?GZ`?0}@7Z`?*`?E?YB ?^g?>`?4@*`D@J`GZ`J`]1[ S/?L[?4@YB YB E?`GZ`UUP}@J`^`gra:`?J`?L[?0}@?I?T?4@?4@$@IOP}@T^`RY4@*`RYL[?0}@7Z`@}@7Z`0}@EY4@?7Z`BY4@7Z`Z`L[?GZ`^gY?I?Q$@?:`?doY`?`C @}@X05L[??"`?=?`?rL?OGZ`J` `Q:`?GZ`4@GZ`*`N`UIEL[IQ\[Q?4@?`:`?:`?N`?$@EWZ`V) 7Z`7Z`I?*`?L[?`C ?U?$@?@}@?RY`>`?$@@}@D@?@}@?T@?`C ?a?GZ`BYS/ `?c ?a*`J`ERYO:`>`BY?$@?N`$@Z`WZ`E? `Z``}@T@_Y?4@? `D@?`? ``?0}@? `*`$@Q[N7Z`?IE[NS/P}@`?D@@}@P}@S/`C U0}@*`?E?BYN`*`?RY?$@D@7Z`P}@c/_*` `@}@?D@?RY?N`?UX05BY*`?pC ?e?MV?;`?c ?OI@}@?GZ`?GZ`?^g?`}@>`RY?4@E?*`?BY `$@*`7Z`?GZ`?]1[ ?S/?N`?\[?V) ?*`?`?7Z`?*`4@T@O?>`?T?ip?L[L[?`?GZ`GZ`D@?4@@}@I?`?D@?O?E>`V) [N?J`?s ?qN?O?O?TTeDߠO*`P}@0}@?@}@T`C ?N`?J`?:`RYD@?:`a@`ip4@UQRYTIOTJ`BYT@^gD@?IGZ`doY``C RY `?O?J`?BY@}@d@_ `?$@?*`4@^`X05?`? `Tc dYB 7Z`GZ`L[?GZ`?U?0}@7Z`UZ`?>`?X05?GZ`?c ?py?c ?^g?YB ? `?*`?T@?[N?d@?YP}@N`?GZ`N`?D@?0}@?*`?`?U?]1[ ?O?T@?]1[ ?E `?T@?c ?YB @}@[NO?0}@?O?m1[ ?E4@?V) ?RYRY>`?P}@?`@}@$@0}@>`Ta@`^g\[0}@?eDߠ?e?U?bL?^`YB doY`4@7Z`c ]1[ 7Z`X05RY?T?N`>`J`[NE?GZ`\[iB J`@}@`}@bYc aƠX05YB ^`]1[ X05WZ`bY]1[ ?`7Z``}@[NOBY?:`?S/?WZ`?EP}@S/`GZ`UbYbLX05S/]1[ febL:`?GZ`?`GZ`D@?>`?P}@N`P}@L[?*`?V) ?J` `?>`?S/?J` `$@?7Z`?:`?D@?T?>`QD@?>`:`X05T@D@?$@?BY4@:`?N`?J`*`?4@?I`0}@?T@?bL?T>`I4@L[J`?n`?^`?Y?fe?P}@Z`0}@?YB ?L[?E?J`?`GZ`Z`N`N`[NQ4@?4@?T@?4@WZ`I?ED@ipeDߠ>`0}@?L[:`\[^`e^`RYaƠP}@O]1[ ]1[ [NX05X05X05L[OUIWZ`_0}@`\[WZ`GZ`T@QD@*`?4@ `L[GZ`BYL[L[GZ`J`U_^`YT@4@@}@$@?@}@?J`?O?$@T@S/>`BY0}@$@@}@?0}@?BYV) bLGZ` `N`O ``OBY?E?GZ`*`T@X050}@?:`IJ`?:`*`T7Z`?>`?`:`E7Z`*`*`?GZ`?D@WZ`^g?oG*?lƘ?f) ?f@?QP}@?$@?U?BY?RY?T?7Z`?GZ`?@}@*`?P}@?TL[\[L[*`BYT@BY?BY?0}@Qc aƠ7Z`?@}@?`4@BY*`Edc :`7Z`V) X05T@E4@4@BY_c/>`L[? `GZ`?*`?`Z`U>`U`C `C V) `TUN`P}@:`?>`?@}@@}@\[X05BYD@L[GZ`@}@?@}@?T@?:`?` `]1[ c/P}@7Z`$@:`T@:`?7Z`OV) 4@\[^`J`4@L[GZ`?P}@?^g?N`@}@YT@IUO `GZ`O?4@?RY?P}@:`eDߠeDߠS/@}@?*`?*`RYRY?sdq?rL?eDߠ?d@?a@`?D@?GZ`?BY0}@?BY?E7Z``>`7Z`?e?p}@?\[?*` `T@U?*`?@}@L[O@}@S/J`? `GZ`YB 7Z`?T?7Z`a@`c E*`V) c ]1[ :`:`IGZ`aƠgZ`L[:`YD@? `:`?7Z`?:`L[@}@?$@GZ`V) P}@?J`J` `:`[NP}@ `4@BYP}@P}@$@@}@Q:`$@? `?4@L[RYS/f) Z`?I?*`P}@0}@?Q?BY?7Z`?GZ`7Z`[N\[GZ`?4@4@L[?7Z`?GZ`$@BYRY\[YS/D@*``?N`?]1[ ?V) ?S/bY[N?$@BYYB T@QE?v?r`?^g?_?c ?RY?@}@?`*`?E?L[?*`$@YGZ`?p?{?q?\[?:`EV) O?*`O?P}@*`OD@X05doY`X05*`L[bLd@V) @}@Qc/a@`RY]1[ bYT@RYT@>`T@eDߠbL`C aN`$@?0}@?BY `*`?7Z`?T?S/7Z` `?_?E^gTIZ`L[D@TBYD@T@4@*`E`EO?BY_T?@}@?O$@WZ`D@?@}@?$@?7Z`?E*`QRY `?T@?4@O7Z`@}@P}@`N`GZ`$@ `?$@?T@?fe?a@`?*`I?@}@?doY`?L[T@OD@Q?s4?q@`?c/?`C ?]1[ ?J`?@}@?*`? `?N`?T@?V) ?QI?`?t9?}?u`?f@?:`S/S/E0}@4@BY?`?E`IOYB a@``C a@`aƠa@`c/aE `T@^`YadoY`YB 4@?>`? `Z`dekm1[ a@`E?4@? `$@?$@?BY?P}@?EP}@BY?]1[ ?D@\[J`I_J`OdoY`T@@}@V) 0}@?:`?$@?V) ?T? `?:`4@[N4@?]1[ ?Z``YQ>`E?@}@*`EE?L[`TBY4@`?P}@?L[?*`?$@$@?7Z`?\[?doY`?J`V) Q0}@D@?D@?doY`?]1[ ?@}@?O?O>`?jF@?qe?r$(@?k?^g?Z`?Z`?$@7Z`?@}@?@}@?D@?I7Z`?:`?nq?toY`?q@`?j`?YB ?0}@?`$@BYJ`QS/QN`IN`OD@N`^`[NO\[c J`?0}@J`\[UP}@Ya@`S/?4@4@]1[ T@J`a@`dY>`?4@?*`EI?`?:`?EEU? `:`^gRYQ[NEZ`jF@RYRY?7Z`?^g?]1[ ?h05?eDߠ?4@BYRYX05?$@?\[?YB ?E*`4@4@BY*`*`L[D@*`7Z`ET@UL[N` `?T?I? `?4@$@GZ`?J`?D@@}@T@@}@ `>`4@?0}@?7Z`?E?[N?_?E?^`?pC ?u`?pC ?`}@?c ?a4@E?O?>`BYGZ`O?^g?a@`?^g?d?e?_?J`0}@J`WZ`a@``}@^`X05*`?Q?T?7Z`L[^`V) 0}@I[NJ`7Z`Y[NE`Ia@`YB ?`@}@WZ`?0}@?V) ?$@D@D@`?L[?D@N`T@4@0}@0}@?:` `S/D@E`C _X05S/>`]1[ h05L[`Q?BY?_?^g?iB ?eDߠ7Z`T:`?:`?L[$@L[?@}@?0}@?`0}@IV) V) `?BYD@\[T0}@I_J`?I?$@>` `@}@:`4@GZ`Q7Z`?D@?O?P}@?`V) V) `?GZ`?L[?$@?D@?`C ?kN?e?T@?\[?Y@}@?_?RY@}@P}@O?*`?YB ?T@?GZ`?V) ?aƠ?YB 7Z`S/EV) aƠT@IP}@?U?toY`?s/?D@bYe^g@}@$@GZ`BYO^gN`?7Z`J`S/0}@?O?$@BY?J`?YB ?I `I:`?P}@?GZ`QU4@>`P}@7Z`?`7Z`$@7Z`^`aƠWZ`GZ``N`_S/QT? `?7Z`?E?gZ`?aƠV) `}@?7Z`?d?bYL[feT@?$@?:`?$@IX05N`?@}@?J`D@YB :`?N`V) @}@?`RY^`N`$@GZ`BY:`J`:`?0}@?BY?RY?`a@`Y?7Z`?4@EX05*`? `?GZ`?P}@?GZ`?U?YB ?E?N`?WZ`?4@BYL[N`?*`?X05?T?E?J`?Y?ON`N`? `P}@\[?>`GZ`?YB ?y?w?>`a@`[N[NT@GZ`S/T@Y\[?*`?Z`RY$@?T@?Y?>`*`? ` `4@>`UI?J`? `Z`S/?*`?`BY?J`?>``J`]1[ \[T@O?:`D@V) T4@?BY$@?`?bY?T_doY`D@?X05?`}@ ``C YB O>`?7Z`?4@D@T@ID@I `?*`@}@J`:`Q`}@a@`[NJ`BYRY4@?E$@BYEV) S/V) bYE?RY?>`GZ`Y7Z`@}@@}@?7Z`?RY?\[?bY?aƠ?]1[ ?GZ`$@0}@J`WZ`@}@?>`?:`?`?7Z`?T@?U?4@?4@?0}@T@U?D@?GZ`S/GZ`?doY`?f) `>`?$@WZ`bL]1[ bLc bY_?@}@?`}@ `WZ`?U?QGZ`S/[NP}@BYYN`?ED@a@`>`?U?O?4@?L[?WZ`?GZ`>`UT@>`IY7Z`?GZ`:`X05@}@?T@?^`?L[?D@?RYS/S/YB T`*`S/Z`[NP}@7Z`ET@TJ`:`7Z`0}@?`RY_S/IQ?7Z`?Y0}@X05P}@O?P}@?4@? `$@]1[ aWZ`P}@? `?7Z``?0}@`*``:`?E?]1[ ?\[?YB ?_?a@`?X05?X05?WZ``S/:`? `7Z`GZ`BY? `?@}@?BY?>`@}@WZ`7Z`?J`?:`S/d]1[ @}@@}@?`? `c/i^`^g`}@`}@bLD@?BYO_I?0}@?0}@@}@V) _`C BY?`V) S/?>`Ia@`?$@?`C ?L[`?*`?BY?7Z` `D@`?J``Z`IT@YB ? `?\[?_?X05?T@?0}@I*`Y_L[D@N`QQEETRYBY`?7Z`?0}@ `?`?`N`Z`GZ`?`?U?t@?xZ@?[NYO7Z`?$@?BY?`?@}@?GZ`:`@}@?`?*`QQ?D@?$@?*`?GZ`?0}@?T?c/?U?4@?S/?X05?a?`}@?7Z`0}@?>`?>`0}@L[YZ`GZ`*`T@O?O?RY?>`?$@Yc O:`EQc c/O@}@4@L[bY_T__V) P}@7Z`>`V) ^g[N?RY@}@Q?>`:`_4@?Q `QJ`7Z`?D@?T@?:`?*`?GZ`0}@T@$@?$@QP}@?D@?YB ?S/?O?T@?*`T@QT`}@N`? `ED@$@7Z`BYGZ``?$@?*`?$@BYI*``>`?RY?f) ?vOǀ?v?WZ`TGZ`?:`?:`*` `?$@?4@ `BY4@N`J`?$@Q?J`?O?@}@?Z`?GZ`J`D@?>`?>``?7Z`?N`?BY?O?X05?7Z`X05aD@?7Z`P}@J`?X05?X05?I?RY4@V) $@*`T@OJ`OGZ`$@?BY4@^gV) J`S/GZ`N`[NN`0}@J`V) YB 0}@?X05?:`GZ`?D@?BYUV) >`GZ`GZ`>`*`?RY?^g?>`:`$@N`J`?D@?>`QT@?S/?O?4@?GZ`?:`T`}@c/a@`0}@YO? `J`UGZ`?GZ`?0}@N`TP}@OL[7Z`? `$@7Z`?7Z`?T?\[?U?0}@0}@4@?L[?D@@}@ED@>`0}@V) V) ?D@?Q?>`$@`}@?L[?7Z`WZ`\[BY@}@Q>`?$@? `?*` `?P}@?T@?E?^`?gr?Z`4@J`?J`?X05N`\[?E?V) ?@}@T@X05?`?*`GZ`@}@$@@}@P}@4@?>`L[[N?:`?U?*`?*`>``}@[NJ`P}@RYV) I?GZ`?0}@I?E?^`?*`T@S/>`?0}@E?$@?GZ`@}@N`>`N`BY$@[Nf) c/^`*`?I `? `?:`N`TBY:`:`[NP}@*`TY0}@?I?U?O7Z`[N]1[ E?*`?4@?E?I0}@0}@L[P}@?D@?`?D@?Y?$@T@>`? `$@O?c/?bL?O7Z`aƠ?BYX05d@]1[ S/Q? `?T@?YB ?]1[ ?P}@?7Z`?RY?U?L[?^g?d@?T@7Z`?>`?J`T@bY:`?BY0}@U`}@T@?E?V) ?@}@ITL[E?EN`YB ?J`?WZ` `BYc c/]1[ `C Q`*``:`O?7Z`?`}@?U:`P}@7Z`?:`4@[NS/7Z`P}@RYGZ`J`7Z`YB n`RY?a@`?4@I?4@`? `?D@L[P}@?@}@?4@$@?4@?0}@?:`?@}@$@7Z`?$@?D@?T@?[N?P}@J`]1[ :`?J`?E?S/?bL?YB N`V) Q0}@0}@`?Z`?`C I_? `?T@?L[?@}@? `?P}@?a@`?O?`7Z``}@?*`?*`QQGZ`E?:`?X05?V) ?U?GZ`4@$@?4@?:`?E?:`$@@}@V) ]1[ QOT@E$@`0}@>` `?O?_?UQ`C E*`?`?S/?>`GZ`:`J`L[?I?:`YWZ`T@a@`I?T?L[0}@7Z`:`0}@?:`?BY0}@P}@N` ``P}@:`?BYN`WZ`RY `X05_?z??.?S/?7Z`?>`?P}@?V) P}@Z`?:`RY?0}@?V) ?T@?Q?BY7Z`L[I`?E?@}@J`X05*`?@}@ `?7Z`?^g?YBY`C Y0}@*`S/>`?_?]1[ L[U?:`?L[?D@?:`*` `J`7Z`X05J``?>`IP}@BY@}@?@}@?N`0}@@}@0}@RYYD@? `0}@QRYRYaƠf@Y `?7Z`? `?`?J`?S/?GZ`?`?`?RY?QS/\[*`7Z`GZ`?N`?[N?BYRYa?k?doY`?0}@?N`?P}@GZ`7Z`?U?E:`?*`?7Z`IS/@}@0}@J`X05O? `?:`?RY?_?P}@:`UP}@?$@J`$@?~ ?"`? ?d@?:`?E?V) ?X05I7Z`?h05?`}@UV) ?D@?J``YX05E7Z`*`:`QGZ`?7Z`?4@>`0}@?*`0}@X05aN`?T@?T0}@?X05?RY`?0}@?BY4@*`P}@V) P}@L[?*`P}@a@`D@0}@\[Z`N`P}@? `?EBY>`?4@L[[N0}@?L[?*`IN`U_U`?BY?O?P}@?I?BY$@OP}@`?V) ?T@P}@Y*`>`RY0}@?BY?BY@}@T@?V) ?p}@?doY`?GZ`?_?`}@D@0}@OP}@?7Z`?@}@BYL[:`RY]1[ GZ`?7Z`?N`?P}@?$@:`>`>`0}@WZ`^`?sdq? ?~`?L[?0}@@}@ `?@}@`*`?4@BYYB T@J`? `?^`?`C ?E?BY?Q?>`? `?GZ`?4@J`BY4@V) Z`GZ``?4@? `EU? `0}@X05J`EYB >`?E?`?BY?N`O[N?*`?T@?:`?`EI?GZ`?S/?$@?$@?E?$@L[a@`dX05?GZ`?h05?f) ? `RY4@`:`OT7Z`? `*`?Q?_?*`@}@?@}@?*`L[RYYB aƠU?`?4@?4@?D@0}@?E?`X05T@ `? `GZ`[NT4@IWZ`a@`h05O?bY?a?O?4@P}@[NYB [N?@}@?py?l[?4@:`?E?Q*`d@eDߠ`?@}@OJ`BY7Z`?*`BY>`?0}@L[]1[ I7Z`:`?:`?GZ`?`?4@?E`L[4@? `4@EP}@\[YB :`?$@?$@?0}@? `?O?Q0}@?GZ``\[>`?D@*```[NYB ?*`?4@I0}@?O?GZ`?7Z`?Q?IBYL[N`V) TL[L[I?>`?fe?jF@?RY0}@`7Z`I?*`>`0}@7Z`Y\[YB _V) BYS/\[J` `? `?L[?V) `GZ`?N`?S/D@N`?`Yd@Z`P}@`C c \[V) D@?@}@?RY?Y?OD@T@GZ`J`I? `?GZ`?L[?N`?GZ`?7Z``P}@S/`4@[NX05J`V) J`?7Z`$@J`EP}@L[0}@P}@X054@?0}@0}@>`0}@ES/GZ`?0}@P}@WZ`X05RY? `?:`7Z` `?BY?]1[ ?RY?`?:`?V) `Z`$@?4@RYQ@}@O7Z`?ES/O?@}@?T?BY `0}@7Z`D@X05_BY?P}@?Q$@O?$@?S/?0}@4@@}@L[`?E?L[ `RYRYV) abLeDߠd@I?:` `D@>`@}@@}@?`?7Z`7Z`4@?Q?J`RYY0}@>`aƠdoY`UYdaƠV) E?4@?@}@?4@?BY$@4@?>`?BYBYP}@?@}@?Y?0}@OD@?D@?WZ`?N`?4@?E?ED@P}@@}@?0}@IJ`$@?P}@?L[OU?7Z`?T?>`EQ>`?`?7Z`?>`0}@O:`$@:`?I?J`YB _*`?:`?N`?GZ`?J`?T0}@[NBY*`L[?`?P}@?L[?L[?I?@}@ `T@P}@?0}@P}@D@?@}@?IBY4@?*`P}@QBYRYT@>`O`}@WZ`$@?`7Z`D@J`[NbY^g^`YB @}@? ` `:`P}@WZ`TT@V) O? `?GZ`0}@c gZ`RYGZ`eDߠgZ`UYB _N`S/\[GZ`BYWZ`J`?``:`?*`BYI?GZ`?EO4@?RY?I?E?7Z`BY?:`?Y?4@BY?`?`L[WZ`RYD@?*`?T?Q7Z`E?D@?Z`?Y?4@BY?*`?T@?I`D@$@?P}@?D@E?@}@?OaipJ`O?J`?T@?J`?P}@X05UJ`? `?[N?^g?T@?@}@@}@*`?4@WZ`c/E$@J`>`?BY?T@?U?O$@YT@?$@? `:`? `7Z`V) S/P}@^`aƠ\[P}@?*`?T@?@}@T@Y7Z`BYS/V) P}@N`Y\[Y^`aƠY4@?*`:`aƠgrJ`?BYUc/QJ`E?*`J`]1[ BY0}@BY?0}@?BY@}@IIN`L[0}@J`? `?wr??grBY>`YYB GZ`YX05?0}@?0}@WZ`aƠYB ON`J`4@$@0}@?`?WZ`?d@?\[?7Z`?4@?7Z`>`N`7Z`?7Z`?L[ `X054@?J`T@a@`4@S/?*`?E?@}@?Q?@}@L[QD@?:`?P}@`>``S/S/>`^`aƠ0}@?0}@>`E0}@?:`?GZ`?:`D@E? ``:`?P}@?X05>`YB I4@J`RY>`?Q?bL?X05@}@L[?:`?N``YB `}@UD@@}@J`T@YX05RY@}@?0}@?:`J`_7Z`?Y?4@L[? `?>`?`*`RYE?L[?I?E?V) ?GZ`? `?`GZ`P}@0}@?0}@?*`D@?aƠ?r?̞?@?Y?V) $@^`V) T@S/D@@}@BYD@OQU[NN` `?T?a@`?WZ`?:``J`V) GZ`?4@BYD@J`7Z`?>`*`I `BY$@?*`?L[?X05?0}@O@}@?*`EdoY`Z`?@}@?`>`>`YT?>`?@}@>`L[@}@?`@}@Z`D@?D@? `@}@N`S/?0}@?YB ?:`L[ `?GZ`?7Z`?`?0}@?4@?E?D@D@V) BY?`0}@TYB I?BY?U?:`TX05D@BYD@? `?:``I>`?0}@0}@?>`?I `Z``}@?`?^`?N`?I?T?*`? `?@}@J`U?`?V) ?Y?Q?>?@?~g?_?V) ?`T@>`?7Z`U[N?L[0}@BY? `? `:`$@?@}@BY$@$@N`RY `?GZ``O?L[?>`?$@ `?$@?0}@?*`?:`?U?UP}@aƠI?`? `L[`C >`?Y?L[?*`?0}@GZ`I?0}@?*`$@7Z`4@?7Z`0}@Z`BY?BYD@S/BYN`L[?@}@?P}@?>`?D@?J`?4@?4@? `T@Z`N`T@^`UD@:`D@Q@}@?RY?a@`?D@Z`Z`EQT@}@:``?E `WZ`S/:`0}@ `0}@^gbL?*`?^`?O?O?S/?`?BYIU@}@?0}@?J`BY_?V) ?qe?UX05P}@GZ`I@}@:`>`N`Q?`?BY:`4@?N`?WZ`?OD@0}@4@YY`ORY4@?BY?GZ`?$@?:`?O?>`?*`?L[?Y?BY?BY?>`?N`?IT_:`?$@*`BY0}@?U?Z`:`I?7Z`BY4@?D@?:`GZ`BY?BY?O?T@?7Z`YB Z` ` `D@?4@?Q?4@? `?@}@?E?N`?:`V) aYB X05S/D@I>``OS/?*`?O$@YUN`Z`T$@D@>`?S/?0}@a@`V) ? `>`0}@?GZ`7Z`\[E?:`?:`?J`?BY>``?:` `*`GZ`TBYGZ``C WZ`N`^gU?:`?RY?T?@}@T@WZ`?$@?V) ?RY?`>`*`?@}@?P}@?GZ` `?0}@`J`4@?@}@?$@IQO`?T?Q:`L[:`$@ `?I?^g?`?BY?*`?*`?J`?E?J`?T?>`L[Y>`?Z`?WZ`S/YB `?*`?O?N`S/`C ?`?a@`?]1[ *`_^`BY?`?$@?>`?*`P}@T@?`?S/?YB ?OD@V) WZ`X057Z`? `T@J`?>`J`bYUEP}@RYOP}@V) @}@?N``X05:`GZ`d@Q?L[? `?*`?^`?RYO[NV) E$@EQ:`$@`?*`0}@I`?$@$@D@?`?doY`?m@?iB ?gr?d@?>`RY?*`?doY`?bL?GZ`?` `7Z`$@BYL[?:`?4@?L[?N`?O?N`?4@GZ`P}@?`?4@T@[N7Z` `P}@I?0}@?*`?P}@?4@7Z`?BY?_?d@?]1[ ?4@Tc/YB ?GZ`?U0}@N`>`0}@?:`?GZ`? `?$@?D@@}@]1[ N`?4@0}@Y\[UI? `?4@*`BYL[L[7Z`? `?@}@?7Z`ERYRYRY?$@?:`V) I?RY>`c Z`QO@}@D@P}@WZ`L[?Ea^gYdoY`P}@?P}@?0}@ `?RY?P}@`L[N`? `?BY7Z`BY7Z`J`D@:`?0}@?J`?>`:`:`?Y?qƠ? ? ? ?vOǀ?\[:`Q?I?a@`?Y?L[`OS/c/feGZ` `D@?$@?@}@?*`?WZ`?d@?YB ?$@RYX05P}@QD@?BY?*`WZ`V) $@?V) ?\[?@}@P}@N`?7Z`?E`@}@GZ`UT`?7Z`$@ES/U`?J`GZ``?4@0}@J`L[U[NP}@@}@@}@ `$@O7Z`?J`?BYD@RY@}@`OUI7Z`?GZ`?Q7Z` `?RY*`RY? `4@?$@? `D@\[a@`*`?BYQS/EWZ`0}@?]1[ ?J`D@BY`?0}@?4@?BY?a?fe?O?7Z`?0}@4@OS/7Z` `@}@OYD@?`}@??R݀?ՠ???eDߠ?4@RYT@?>`?T@?QIN`fekNJ``Q4@BYX05?$@?WZ`?O?L[ `\[Z`E?:`7Z`WZ`7Z`?T@?]1[ ?V) ?BYL[^gV) QT@E ` ` `*`OWZ`S/T@WZ`I?`? `D@D@?$@?:``*`*`EGZ`ERYN`BYI?N`?>`0}@`?@}@?@}@@}@Q$@?>`?N`?T?:`?$@7Z`?Y?Q`? `?0}@$@U^`?$@?YB ?4@`?*`*`?S/?jF@?_:`S/J`$@$@? `?a@`?h05?J`N`:`?GZ`?BYOa@`ac `C T@T@?:`?pX?`?$@E:`?$@` `?0}@:`OO[N[N>`? `:`I?7Z`?Z`?T?GZ`?:`?`?I?U?L[?BYD@@}@D@>`?>`?:`@}@I7Z`? `$@?GZ`?O*`>` ` `?T?doY`?QJ`P}@:`$@OT?7Z`?T:`_RY?@}@?4@Z`bL`}@grdTT@?7Z`?py?oY`?U ?Ҋ?@?i?z{f?d@?c/$@S/X05E?*`?X05?X05 `? `?T?0}@^gP}@ED@BY@}@?L[?S/?*`?*`*`RY$@?L[^`S/?GZ`?ID@J`?*`?U?J`J`4@?^`?\[$@J`?4@7Z`J`?$@?WZ`?J`GZ`I7Z`BY? ``? `GZ`O?$@?GZ`?>`7Z`?I?Y?$@?`?Y?U?RY?Z`?O:`:`?:`?*`V) YB @}@BYP}@@}@?BY?T@?L[4@YB `C T@EE7Z`E^`aƠT@?`?GZ``E?$@?0}@P}@]1[ J`?J`?7Z`YB Q?BY7Z`O7Z`WZ`Q?`}@?Oǀ?^?k? @?a۠?n`?:`?@}@?>`?0}@N`@}@ `I?7Z`?_?P}@? `?`?RY?d?X05L[E `RY[NY@}@?RY?GZ`@}@?BY?U? `J`N`T@@}@?*`@}@I$@?S/?J`GZ`?4@?c ?YB >`I? `? `N`O?L[?aƠ?P}@J`J`7Z`BY?I?Y?V) ?RY?0}@?`?L[?N`?S/?X05?@}@?0}@?7Z`E?$@?`C ?L[`?I?GZ`? `?`?I?a?^`J`[N:`:`J``?I?S/?>`Z`ipdoY`V) RYQYeDߠgrbYU? `?Q?I?GZ`?Q?*`OT:`?V) ?[N `?0}@?a@`?Z`?S/?\[$@WZ`?Y?vOǀ? ?L ?3 ?u` ?Z`X05^`*`?@}@`?E?IS/L[?Q?GZ`@}@>`?I?a@`?TN`WZ`P}@S/J`:`7Z`0}@T@`}@BY?N`?7Z`P}@a?BY?*`L[P}@:`L[N`?P}@?a?WZ`?\[?`}@?4@UV) @}@?`BYT@$@?O?7Z`GZ`@}@?`7Z`>`?S/?bY?Y?4@7Z`?$@?O?E?N`?WZ`?$@@}@``?E?RY7Z`I?0}@?*`?*`?J`?T?bY?`}@`D@L[WZ`BY4@>`@}@X05`C RYL[T@J`N`\[X05P}@O`?BY?4@?I?RY? `D@IL[?E?bY?U?0}@?@}@?@}@?S/?bL?ET?P}@?rY?ve?xZ@?yB ?r$(@?WZ`D@UY[NJ`?RY?T@EGZ`?@}@7Z`a@``}@E?@}@?$@X05^gRY7Z`?BY?O `N`P}@QI0}@?`?*`L[?BY4@^gYB 4@J`P}@?`C ?t@?s4?kN?X05>`P}@S/?$@V) aYB S/Q@}@? `BYO?7Z`?Z`?O>`P}@*`?BY?>`?E?Q?7Z`*``?`?7Z` `:`?I?S/?`?:` `?7Z`?7Z`IBY`QS/BYT@Z`QI*`?E?4@7Z`IGZ`GZ`I?$@?D@?$@?:`?4@@}@``Z`T?RY?\[?0}@P}@P}@?`?L[ `WZ`GZ`?RY?X05?N`?P}@?J`?GZ`?\[?ObLlƘT?BY?4@:`? `?L[7Z`bY_7Z`?0}@>`]1[ Z`7Z`?7Z` `:`?:`?Q?@}@7Z``?V) ?T@QN`Z`WZ`*` `?`?fe?w%M?w?lƘ?N`?@}@?WZ`?:`V) L[?*`>`[N`}@bYaT@:`N`YB *`?Z`?WZ``@}@?4@?E?BY?Q?\[?Y?7Z`E7Z``S/>`?[N?P}@BY0}@N`_I0}@S/N`:` `?RY?T@0}@N`L[I?$@?T?Q?@}@?0}@:`QN`L[D@?@}@?T@?U?X05?7Z`E?$@?`bYfe?a?TN`S/? `? `GZ`IOV) Z`YB URY?`?c ?T@d@doY` `?`EBY? `?O?D@E?X05?P}@Ea@`]1[ >`@}@T@D@4@N`J` `?@}@?0}@@}@?D@Z``7Z`RY:`?O?X05?^g?gZ`?ip?\[?YB ?YB >`T@?0}@?Z`?WZ`? `YB bLYB IS/\[7Z`?\[?UID@?T?WZ`?@}@?D@?O?GZ`@}@Y4@*`d@^`?7Z`GZ`YB BYV) O?^`?]1[ $@GZ`RY?doY`?doY`?I?`:`I?4@ ` `>`V) T$@?4@?`?0}@?P}@?doY`?k?]1[ ?*`?:`$@aƠc ?c/?^gD@RY?:`?7Z`EED@ID@:`*`7Z`*`?BY>`aJ`?:`D@GZ`4@GZ`?7Z`BY?*`?[N?N`D@[N^gO@}@BY*`TV) L[?0}@?RY:`a@`U>`?O?BYRYT?>`?S/?0}@ `?4@?7Z`7Z`RY `?[N?RY0}@?L[?gr?gZ`?V) `L[J`GZ`J`P}@E?4@0}@c Y?YB ?\[?`@}@P}@UYV) ?4@? `e[N?@}@OZ`E>`?jF@?}f?r$(@?@}@BYa\[?T@?X05?$@?$@?*`?GZ`GZ`a@`UL[YS/?D@?]1[ ?S/?*`?`}@?kN?d@?L[?4@>`V) N`?:`?[N?[NGZ`?4@?4@N`Z`V) 4@?@}@?*`$@J`WZ`N`L[WZ`P}@U_7Z`?4@RYQN``C Q?:` `0}@`D@:`?4@?I?L[?*`?WZ`?s ?t@?c/?WZ`?`_Y?D@?V) ?S/4@YB RY:`7Z``?*`?BY?4@P}@O?Q?U? `?L[?]1[ ?N`?D@?N`?BY>`V) GZ`?$@ET@Q_S/?RY?O``GZ`L[>`D@?:`?ID@?D@?`}@ `RYO7Z`?u`?dq?r`*`>``C eDߠ>`4@O:`?RY?\[:`aƠT@4@L[U4@?T?X05?7Z` `?D@?U?N`@}@BY$@?D@?J`?J`?T@?RY?D@?`GZ`X05WZ`@}@?GZ`?BYIYB a@``}@*`?BYOaƠdoY`_ `?@}@EN`U`}@E?*`BY? `?T@?O?E?@}@?7Z`?*`?qe?05??q?0}@?$@J`V) ?N`?T@?YB ?S/4@UN`?`?L[?D@?:`?BY `$@?J`?*`I `O?$@?YB ?\[?N`ORY?>`*`WZ`:`?`?$@?D@?`?T?P}@?N`?BYTJ`?O?>`?7Z`?7Z`S/O@}@T@?bY?v) ?_S/7Z`J`X05P}@\[_P}@@}@?E?Y?BY4@`? `*`T@YB 0}@?GZ`?@}@?`? `? `7Z`RYRY0}@?GZ`?YB ?X05?BY?7Z`?P}@?RYZ`aƠJ`?X05?e?Y$@GZ`S/S/?D@?P}@UbYP}@0}@7Z`>`N`I?E?D@>`?4@?T?RY?L[*`QL[L[?e??T?f@@}@?I?4@Z`?E?I?L[?T?GZ`:`D@?`?D@?4@?`?L[?WZ`?`I*`IO?E?^g?r$(@?G*?toY`?0}@0}@ `GZ`?D@?@}@?@}@?`?>`?T@?E?>`4@gZ`c :`YaU`C L[?T@$@S/? `7Z`YB V) L[:`Oc/aƠT@GZ`?BY?L[?S/?7Z`7Z`GZ`_T@?*`?:`?O?S/?4@ID@?*`?BY?T@?\[?I7Z`:`?`?*`I`}@Y?GZ`?_?RY?$@D@Q`V) Q?BY?E:`I7Z`7Z`N`:`?GZ`?7Z`?L[?D@*` `L[Z`GZ`L[I?]1[ ?bL?$@?D@?d@?^`*`?$@?$@4@?`?BY*`ON``?J`?L[$@D@?N`?bL?WZ`?@}@?7Z`:`4@?:`?RY?~q?^j?6<@?m@:`?$@?7Z`?$@$@$@?BY?E?7Z``OJ`N`bL_YB eDߠ?T?|6?uzA@?X05?`C ?`C :`S/BY[Nh^``@}@S/ID@*`?7Z`` `?I? `@}@?$@BY_N`?@}@?D@?I?[N?a?Q$@?*`:``?I?:`>`N`D@?GZ`?T@4@WZ`I `*`GZ`V) ]1[ WZ`GZ`BYJ`D@*`OL[?*`?>`BYGZ`?*`?7Z`?GZ`?UYJ`D@T@0}@?*`GZ`[N`}@S/?L[?_?^`?V) 0}@D@0}@?:`*`V) WZ`*`?WZ`?Z`4@U?BY?d@?^g?L[?BY?*`?`7Z``?{@?O?N?r$(@?*`?BY?S/?P}@?`>`?`?4@4@OUN`0}@?`?>`@}@?4@?Z`?S]?@?AI?z*?fe?U?$@`WZ`doY`RY:`?4@?P}@0}@:`?>`4@T@L[J`$@?I7Z`Z`0}@?WZ`?X05?Q?RY?S/?BY?`?0}@$@P}@GZ`@}@OE0}@:`?>`?V) ?I?`?`? `?4@? `TWZ` `?0}@4@J`UT@BYIJ`?I?[N?*`@}@?@}@?P}@?P}@?RY$@WZ`7Z`?:`EN`?>`?S/0}@`}@^`TT@?L[? `?0}@EJ`? `? `BY@}@ `?7Z`?0}@GZ`J`?N`?^g?E7Z`?E?BY>`7Z`?k?{N?t9?[N?D@?0}@?>`?X05?UD@GZ`OJ`J`Q@}@?N`?Z`?L[?gr?}@?|?.?x@??s ?J` `ORY*`?GZ`4@Y?L[L[Y7Z`4@Q^gaƠGZ`?GZ`$@S/:`?BY?L[?N`?GZ`?4@?:`?N`?GZ`:`EJ`bLWZ`?4@?D@?4@ `0}@?E?N`? `?GZ`?Y?:`?$@?T?O4@RYYB E?IQ?>`?]1[ ?GZ`? `?L[?O?D@?GZ`D@?D@?X054@`C J`?L[?$@X05_c bL:`?`?@}@?0}@UbLO?$@?7Z`?BY? `N`N`*`?@}@?WZ`?RY4@L[?RY?N``?$@?S/?$@U4@?>`IL[?Q?^`?0}@S/TI`US/?4@?GZ`?D@?_? @?f ?`Ud@YB ?0}@?BYP}@bLYGZ`QV) N``?$@ThbLN`T@V) :` ``?D@?RY?BY?>`?U?Q0}@0}@?BY:`bL\[?E?aƠ?\[`O?$@?4@P}@>`?Q?BY `?4@?$@0}@D@J`?4@?V) ?*`D@?>`?RY?GZ`?I?D@0}@$@?@}@$@GZ`?J`?]1[ $@aYB 7Z`GZ`UOL[*`?RY?*`$@?0}@N`bYN`?7Z`?*`?:`?`J`*`?L[?L[?I?BY?4@?BY?S/?[N?X05?$@`?>`0}@Q>`BYV) GZ`?P}@?YZ`X05 `?RY?J`@}@0}@?I` `?P}@?e?W@???R8 ? ?:`T@f@c/YB X05P}@RYa`}@4@?0}@GZ`>`?D@0}@c/f@eDߠgZ`S/?c ?l[?T?*`?E `L[?*`?RY?@}@?$@`QRY?@}@?c/?bL?>`D@?4@4@?GZ`OQ@}@? `? `0}@*`@}@GZ`?GZ`?Z`?>`? `?Q?$@YB N`?0}@D@Q?E?U@}@]1[ N`0}@I7Z`?0}@?S/?Y:`V) ?E?I7Z`?>`?ED@7Z`?`*`?@}@?J`:`7Z`?J`?Z`?`C ?\[?\[?`}@?BYS/D@?I?EObYS/?E?U?P}@4@_Z`? `?T@?L[`?>`?V) `>`?YB ?X05?w?`?t?"`?t?Y7Z`^`\[c/doY`BY^gbY?0}@?RY@}@S/0}@$@T@]1[ `C aƠ?>`?z*??oG*>`J`YB doY`E?Z`?Z`?$@:`?$@?*`7Z``?>`?0}@:`P}@L[?*`?V) ?YB ?L[? `:`E7Z`? `? ` `IeDߠa?V) ?c 0}@Q?D@?4@V) N`?>`?0}@?`?P}@?@}@TX05`?O?D@D@S/:`?D@?D@P}@X05?GZ`?T@?0}@?E?*`T@}@?:` `?0}@`\[D@?^`?bY?X05?I?I?Z`?N`S/O?T?WZ`S/d@@}@?O?E?D@TT@7Z`$@:`N`@}@?:`7Z`Q?GZ`?^g?]1[ ?ng?v) ?pX?fe?Z`4@I4@L[V) GZ`:`RYN`?:`?E*`L[J`:`@}@@}@?0}@?E?_?yB ?.?lƘL[S/\[c *`?aƠ?YB D@RY?0}@*`4@J`X05T@U]1[ @}@?V) ?O>`:`?*`7Z`7Z`*`?D@?BYZ`_?P}@?`}@*`S/?7Z`?Q? ``?T@?a@`?^`?S/$@S/N` `?I?L[E`}@\[GZ``$@O? `?4@4@@}@YB 0}@?I `:``C D@?a@`?[N?`4@*`?4@?@}@7Z`$@?Y?^`?`E$@7Z`?J`?P}@$@>`TP}@D@L[E>`N`I?4@?N`?:`?7Z`?YB ?\[?$@@}@*``?0}@T@U`?D@?0}@ `?$@@}@*`*``?`}@?jF@?X05?RY?a@`?N` `?`O[N?4@?`}@?EY[NOQD@?7Z`:`V) @}@4@RY0}@?ID@aƠRY?$@7Z`L[BY4@?J`?`}@?S/?$@?J`?V) ?I?$@?@}@?U?N`? `?N`?^g?V) ?>`?`0}@E?T?EUd@`C @}@?IN`@}@? `?`?@}@UBY?BY*`4@*`WZ`N`?Q?GZ`EIID@:`?0}@?RY?Q?I?`J`?_?^g?I?J`?:`:`?`?O?>`0}@?$@?J`?4@0}@ `?:`?S/?TD@X05?` `U`?4@WZ`X05 `D@@}@?*`?`>`0}@D@I?^g?k?4@c Y? `?P}@?>`WZ`^`?$@?YB ?BYJ`IQa@`I?O `P}@?$@?@}@ `?:`?EE]1[ GZ`?0}@BYO*`4@7Z`?N`?_?WZ`?7Z`?$@?J`?D@`?0}@?:`@}@@}@0}@GZ`0}@?N`?ID@]1[ I?Z`?aƠ`c/^g?$@?RY@}@:`?0}@?:`?L[?Q>`P}@? `4@L[ `:`?:`?7Z`J`T@S/D@?>`?`WZ`WZ`?L[?J`?*`?`?[N?h05?]1[ ?GZ`?T?Z`?V) ?V) ?X05?T@?D@?I?_?aƠ?I>`0}@?GZ`?``C Q?U$@`}@@}@`UP}@L[YRY7Z` `0}@E^`aƠ?4@?]1[ 0}@X05?U?J`P}@eDߠ^g?*`?T?E?0}@?O?$@Y>`?N`:`Q?$@?BY?*`?$@?*`?$@0}@$@?:`7Z`?4@4@Z`Q?0}@?0}@N`U>`:`Q:`?*`BYP}@T@X057Z`?RY?D@O^gT?:`?T `YB 0}@?_?X05?D@?``P}@BY?T?D@I?`U$@?Q?>`?@}@?J``OO?WZ`?N`P}@L[?I?O?` `?J`?bY?a@`?@}@? `?J`?WZ`?^`?X05?D@?I?RY?I?N`?T@?:`EBY?:`?`N`?:`?Z`:`Y7Z`D@J`$@OU4@? `?Q?bY?U@}@c/f) @}@?E*`?>`?a@`?YB 7Z`bYfeT?7Z`?E`?V) ?N`L[>`?*`J`P}@*`?4@?I?$@0}@?D@?7Z`>`?0}@?>`?7Z`*`V) N`7Z`N`YB X05N`L[L[?0}@?J``@}@4@BY0}@?D@?J`?0}@4@N`RY@}@4@@}@?L[?bL?O?QIaƠ`}@?I?U*`?4@?7Z`UJ`?4@:`$@?Q?N`?4@?*`?@}@?V) ?T?*`?N`?bL?UERY?J` `P}@>``7Z`?4@?I?*`?>`?RY?D@>`N`IJ`N`@}@@}@D@?>`?GZ`L[T@GZ`D@?4@?@}@BY$@?`?bY???w?`S/T?:`?WZ`?BY?P}@?\[?7Z`N`]1[ bLU ``L[>`?I?$@UL[$@D@P}@X05L[?L[?:`BY?$@:`Y7Z`?`7Z`?`7Z`?I?L[@}@P}@BY>`ID@?:`?@}@GZ`L[?`?`>`?P}@?U?RY?:`BY:`?:`?4@?:`?E7Z`?OD@U^ga@`?RY?`?0}@J`GZ`IaY?*`?@}@?BY?E?$@?0}@?E?E?U?a?QN`YD@`N`P}@?$@?$@P}@N`?`?:`?:`?E?:`GZ`T@`?7Z`L[Z`X05RY*` `P}@YB X05?Y?$@O`$@?L?? w`?`?D@ `? `?RY?bY?P}@?GZ`?I ` `EbY^`D@ORY? `?D@J`\[D@?*`?`:``C a@`*``N`I_f) V) P}@T@?0}@? `?T?V) `D@7Z`D@UYB L[I^`_@}@?*`0}@7Z`?$@?4@?L[?Z`?S/?@}@?GZ`?0}@4@4@BY?a@`@}@Z`S/UGZ`? `4@>`:`$@?J`?0}@[NZ`GZ`QO0}@7Z`:`?0}@?GZ`?L[?L[?4@@}@>`?:`?J`?4@?>`?X05?Y?>`7Z` `?@}@?:`?0}@?7Z`:`@}@?Z`?c/?$@J``?`?$@? `EX05YB ?*`?S/U\[*`? `?.?}`???N`0}@7Z`? `?O4@4@?@}@?7Z`?L[`C Q `YB Y?D@?GZ`RYT? `?7Z`?4@?E4@X05RYL[@}@7Z`^gfeYWZ`V) $@*`?7Z`?$@D@:`>`Ya@`X05S/^g`C D@?N`?Q?*`@}@P}@$@?X05?WZ`? `4@4@?@}@?BY?nq?J`L[$@OOOQQ?^g?Z`0}@E@}@WZ`^`N``?`?E?E `D@@}@?4@?Y?a@`?\[?V) ?T@?WZ`?U?$@0}@?I?N`?:`?@}@*`@}@?[N?d@?4@ `?Q?N`?:`? `7Z`IS/EEeDߠYB ?E?D@? ?) ?@?,?Q*`J`@}@BYc U?@}@?0}@?@}@*`X05?4@?P}@V) U?I?>`GZ``?>`4@@}@?E?N`:`Z`YB `?P}@?`E `?@}@?@}@ `N`I@}@QI?BY?U?D@L[U@}@@}@TQ?0}@?a@`?e?WZ`? `IN``?4@*`BY4@?@}@?T@?P}@?iB ?X05?BY?V) ?J`IX05T@BY$@?*`?J`?:`>``?@}@QL[?0}@?*`GZ`:`BYQI`?P}@?`C ?a@`?RY*``?>`BYE?T@?V) ?` `D@?D@?N`IP}@7Z`@}@*``D@ET_\[aQ?RY?I?x? ???GZ`?*` `?@}@>`doY`D@?N`7Z`BYJ`V) ?4@?EQBY?E?$@?7Z`?V) ?J`BYP}@4@? `L[abLP}@?D@?T?J`?RY?gZ`?k?J`X05OEU:`?U?_?ET@T@D@V) :`?J`?]1[ ?aƠ?V) ?J`?7Z`N`S/?`?L[?:`0}@4@$@?E?`?I?T@RYTBY?N`?\[?O0}@P}@L[?P}@?P}@>`T@$@0}@^`]1[ J`E*`? `:`*`?O?]1[ ?J`IBY?`GZ`>`?V) ?IRYGZ`4@? `GZ`L[RYV) ?:`J`T\[c/T@ET@0}@?*`?$@?h05?qƠ?Y` `?@}@?Y?`O?S/?X05EL[N`WZ`@}@D@YB I4@$@?YB ?c ?GZ`BYGZ`D@D@N`RYTYB I?>`?$@?c ?o?TP}@7Z`*`L[7Z`?@}@?GZ`7Z`bY_D@X05[N?`?E?*`?$@?`?J`?YB ?BY`?J`?V) ?D@>`T@WZ`YB IT0}@[NX05D@? `?T?^g?O0}@4@?*`?*`?0}@?D@*`UGZ`I`}@\[E*`?J`?V) ?`GZ`? `?P}@?>`BY*`?BY?4@?:`?L[4@WZ`:`?@}@?`*`*`? `?D@?$@7Z`?J`?V) `P}@WZ`^`E?`YbYUT@N`?*`?`ID@?L[?Y?$@? `?Y?GZ`BY`D@X05GZ`L[YT@UBY?[N?Z`>`V) N`$@?0}@?$@?I?S/? `D@:`T[N?$@?U `GZ`?>`?J`?0}@`BY:`:`YB X05D@V) Q?GZ`?4@OGZ`7Z`?:`?YB ?V) ?L[?I?$@ `?0}@?`@}@V) IS/$@J`Z`BY?$@`?*`$@7Z`?$@?@}@>`S/ `?7Z`:`D@OWZ`0}@?E?0}@?D@?T?I `4@$@0}@>`:`?E?Q?$@J`$@?Q?V) ?J``GZ`0}@?D@?BY? `?D@?[N?U?7Z``GZ`EL[eDߠfeY?S/?>`N`4@?WZ`?X05?7Z`?7Z`?0}@N`@}@?I:`\[N`>`:`$@IE?0}@0}@X05]1[ T?0}@?RY?4@?@}@?YB ?T?`QaWZ`:`YB RY?7Z`?U?V) ?4@L[@}@?0}@?0}@0}@?D@BYT@?*`:`EGZ`4@EBY?BY?P}@?BY>`S/E `D@:`?@}@?$@IBY ``L[WZ`X05]1[ Z` `?GZ` `D@L[7Z`?T?\[?:`>` `?E?L[`RYGZ`?0}@L[ `?O@}@?L[?Y?V) ?X05?D@BYGZ`>`0}@0}@?X05?bL?T?J`?D@7Z`>`$@X05c/T@ `$@N`T@0}@?P}@?RY?D@?BY4@Z`E?J`$@YV) S/0}@?N`?7Z`GZ`TV) E:`BY?D@?OGZ`RY? `?D@?*`WZ`c/*`?X05?0}@S/TE?:`?ID@4@`?:`?@}@?>`$@YT?7Z`?>`P}@bLdU`@}@RYS/RYN`N`]1[ >`$@GZ`0}@?$@IU7Z`?O?U7Z`doY`eDߠYD@?0}@?0}@GZ`Q:`?N`?^g?T@0}@TWZ`*`?RY?7Z`TO?P}@?T@D@N`?4@? `*`?7Z`$@$@?S/?Q?$@ `D@E*`0}@?I?^g?J`?>`?P}@I4@P}@V) $@>`a@`bYX05S/>`?$@?$@?7Z` `Y]1[ GZ`BYD@Oa@`[N?$@?>`BYTJ`?E?I`?BY?GZ`EJ`?7Z`?BYE[N?`?X05?BY*`N`UGZ`IRY>`:`TYB U>`?>`?@}@0}@P}@N`*`$@>`IBY7Z`QZ`[N\[YB WZ`T@?*`?D@`4@@}@S/TGZ`?:`?YB ?L[GZ`GZ` `0}@OU*`?YB ?[N`ORY[NL[?RY?QO\[?P}@7Z`V) D@>`EL[`C YB ?>`?I?4@?4@ERYBYL[7Z`?J`?$@0}@?:`0}@P}@S/?4@ `[NV) N`YRY*`0}@\[dYP}@:`Z`f@V) `$@:`$@?GZ`?7Z`E?*`?P}@?7Z`?I?S/?GZ`?GZ`?`BY`L[BYD@I7Z`S/Z`GZ`O`C `}@]1[ L[?:`?BY?7Z`?>``J`>`?D@?T@?BYGZ`_d@V) ?4@?P}@?D@$@>`?E?[N?T?:`7Z`7Z`@}@J`?:`?X05?Y?X05?EJ`S/7Z`0}@S/L[?P}@?X05*`? `L[D@?U?X05D@a@`YB BYEP}@L[RYUWZ`a@`WZ`?>`?E? `$@T@Z`N`OGZ`?*`4@? `?*`?L[?V) N`?$@?D@`*`7Z`BY?`?7Z`?:`?`S/?E?l[?YB D@? `D@daE `:`N`:`>`V) *`?T@?GZ`?GZ`?T?D@*`BY4@?`N`^gRY@}@`?7Z`7Z`OOZ`WZ`BYD@`?J`?@}@?D@?RY?0}@D@7Z`0}@OYB ]1[ X05:`?J`?T?O?0}@I*`?P}@?WZ`?E>``?T@?P}@`?L[?U?RY?$@P}@T@*`?:`@}@V) ?Y?Y?WZ`?O@}@@}@?P}@?O4@QV) V) D@?0}@?0}@D@OIN`@}@?@}@?:`4@IX05X05:`?*`?:`?*`7Z`*`?7Z`?:`?GZ`?T?D@`?4@?N`?7Z`I>`?Y?c ?I `?L[?4@?>`?z*?05?|6?`:`? `X05`C O`E`}@Z`N`\[Q?7Z`*`@}@?D@?ED@X05I? `EV) GZ`>`@}@ `?*`?`EWZ``?J`? `?0}@?J`?0}@?:`?@}@`? `?4@>`TX05@}@?O?X05?RY?0}@7Z`$@:`EGZ`$@?4@ `S/P}@?GZ`?[N?L[$@`$@?*`?BY?$@ `?BY?:`L[E?Q?_?Z`?D@L[P}@?`?7Z`?$@?>`$@RY4@?S/?T@?7Z`?`? `?`BYQT@WZ`S/? `?U?X05?$@O:`?>`?$@@}@D@4@$@*`?`:`^gBY?k?p}@?D@O? `?4@?\[?@`?6<@?}@?@}@E?D@`V) T@? `\[`C L[U[NN`QS/? `?IJ`BY `4@*`?:` `OGZ`?7Z`?GZ`7Z`I?@}@?:`L[BY? `?7Z`?N`? `D@?4@?7Z``?`0}@?WZ`?^`?a?c/?[N?Z`?E?@}@?0}@$@`*`J`O0}@?:`? `BYBY$@? `?Q?`C ?RY0}@?*`?O?$@>`?0}@?E?0}@ `BYJ` `?E?O?Q?$@I$@?GZ`?D@?:`?>`?4@?>`?EL[P}@L[N`BY?7Z`?RY?L[0}@O7Z`?*`D@S/N`J`YB Z`WZ`aƠI?gr?lƘ?:`X05L[?J`?gZ`?u~ ?xZ@?k$@E?E?>`P}@V) ?BYN`Z`4@RYYP}@GZ`E>` `?*`?7Z`?7Z`?O?X05?7Z`I7Z`?:`?`P}@J`L[]1[ S/GZ`?BY?YB `I?$@GZ`:`?L[D@?`?p?r`?u?e??rL?c ?I?7Z``*``?7Z`?J`?4@@}@QTBY?BY?RY?X05?X05?>`D@*`?N`?Q?7Z`@}@P}@@}@?$@? `?*`?L[?O?>`$@>``*`E4@?*`?0}@?E?RY?GZ`?*`?$@? `? `?GZ`?O?0}@D@O@}@?`?*`?$@?$@0}@@}@J`aeDߠZ`V) RY?@}@?Y?T@?*`0}@?`C ?r$(@?f) ?*`*`@}@?0}@?0}@4@?4@?L[?$@J`O?BYI[N:`?0}@P}@WZ`D@*`?*`?GZ`?GZ`?U?Z`?*`I*`RY`}@S/7Z`RYS/J`S/?*`?T@BY7Z`?BYX05L[?>`@}@??c?F@?/?ƽ???rEUQJ`I?BY?a?X050}@P}@S/O`?BY?D@BYE0}@?E?Z`?V) ?$@IYWZ`*`?D@?:`?*`? `*`@}@>`7Z`IS/L[*`?:`?GZ`?BY?E?RY?L[?0}@?I?Y?IOYP}@7Z`?4@?BY?*`$@@}@BY@}@WZ``}@I?$@4@7Z`?O?gr?h?RY?_?q?fe?0}@?@}@? `E?0}@?\[?s4?qN?I`?*`$@4@P}@X05?`?BYN`L[$@J`BY?0}@?:`?S/RYJ`L[[N^`J`4@N`GZ`EU*`?7Z`O?4@?RYX05>`?Q?c/?,`??,?@d?ؠ?3??&s`U_TN`U0}@?YB ?U$@>`4@N`WZ`S/GZ`N`P}@>`*`?*`?X05?Y?4@0}@P}@_E?U?RY ` `? `D@N`@}@*`0}@BY@}@?4@?`P}@4@?T?N`?>`?\[?^g>`a@`N`?$@*`? `?N`?4@EE@}@:`OU?U?S/?L[?YB ?h?jF@?O? `?^`?d@?]1[ ?L[S/X05?$@?>`?h?y?|6?^`?P}@?V) :`J`*``?:`7Z`Z`7Z`?7Z`S/OD@0}@?O?E4@L[RYL[>`BYYZ`OJ`? `?7Z`@}@?BY?:`bY:`?\[?l[? ?>? ?-??_@?}`?/:`@}@ `N`GZ`?4@?0}@7Z`?`?J`?`U\[N`BYBY? `?`4@?*`?E?*`?0}@ `O?*`?d@?[N?D@?O>`L[?$@?L[?O?0}@:`BY`}@D@?Y?RY?Z`?oG*?h05J`aƠ?$@?[N?$@:`?BY?`:`?:`?BY*`OWZ`@}@?L[?X05?]1[ ?T?0}@? `D@U? `?`}@?bL?>``}@Z`?*`0}@?RY?v) ?s4?J`?BY?EO0}@?T@?P}@?`Z`doY`>`?7Z`S/N`?*`*`$@?E?T@?`C ?Y `D@>`@}@J``C a>`?7Z`?D@?P}@?BY?7Z`If@N`?U?S/?;`?@?m`???`?'^@?% ?u` ?GZ`?P}@?0}@7Z`@}@7Z`4@?`?P}@?T?:`IP}@? `?J`?@}@?L[?S/ `L[>`*`0}@4@$@?RY?aƠ?GZ`:`?P}@?X05*`4@?E?BY?@}@?:`*`? ``N`?>`?\[?I?_?rY?jF@@}@`C `?Y?4@J`7Z`IN`?>`?GZ` `BYY]1[ >`?O?`C ?OYa@`WZ`T`?Y?]1[ ?GZ`BY@}@S/WZ`?:`?*`RYGZ`P}@WZ`?0}@?V) ?>`>`Z`\[?`?EJ`S/:`0}@>`I? `?a@`?^`7Z`S/GZ`4@ `RYY?`?D@?`?T@?Y?`OX057Z`?O?*`?d@?̀?~ ?,?I ??[`?D@?GZ`?L[$@0}@:`>`?N`?`C ?L[D@S/I?@}@?U?E?GZ`?^g?T>`L[J`X05WZ`$@?J`?@}@@}@0}@?YB ?\[$@?$@GZ`J`7Z`BY?$@?Q?P}@?X05?P}@BY?@}@?fe?]1[ EbL^``N`J`T@YB GZ`7Z``?*`T@d@Q?N`?c/?_*`OBYGZ`*`?4@ `?7Z`4@ERYX05[NRYIUGZ`?L[?I `*`E>`?J`?N`>`V) UORY]1[ T@?*``Z`Z`BY?@}@?RY$@U>`D@T?E?\[*`O?D@?RY?O?N`?ip?u?{?oY`?u` ?|&s`?aRY?4@?@}@E:`?7Z`0}@D@?Q?_?$@RYL[D@$@?*`EN`?Q?a?GZ`>`J`Z`V) ?`?0}@GZ`BY?J`?a@`?^g?@}@ `7Z`@}@GZ`T@`?T?S/?I$@WZ`$@?\[?T0}@aƠgrT:`P}@IBYGZ`$@$@$@?`N`YB 4@?J`?X05?[N?E*`:`?`X05Y:`7Z`0}@?@}@?E7Z`L[*`4@L[ `?GZ`?0}@?7Z`?>`>`4@?D@?0}@@}@IJ`P}@RYOIQYB WZ`I?S/?[N?$@WZ`QQZ``?T `S/0}@?GZ`?T?BYGZ`?I?q?toY`?ip?^g?U?BYYB 0}@?`J`E?`4@D@?4@?*`QD@?GZ`?7Z`:`D@YB a7Z`?V) ?J` ``BY@}@?:`Q0}@?L[?J`?L[?J`?:`?D@?Q?J`7Z`T:`?7Z`0}@@}@BYQ `?Z`?\[?D@TbYL[`J`GZ`4@?0}@?X05?T@7Z`S/I?E?Z`?J`?`? `IYV) >`?N`?N`N`\[E?4@?:`?7Z`?D@?>` `$@@}@QJ`GZ`BY?7Z`?`RY:`?@}@7Z`L[$@`QT*`S/P}@?$@4@?@}@?S/?:`4@?`?>`>`D@?I?RY0}@O?`?T@0}@gZ`a?Q?a?Q?>`? `BY`C RY7Z`@}@GZ`BYJ`BY*`Z`eD@?V) ?O?`4@RYWZ`E`4@?J`?7Z`>`? `>``X05Q?7Z`?:`?4@?I?E `>` `BY`?@}@7Z`N`*`?0}@?`@}@D@?4@?E?`?0}@?X05?V) D@^g0}@?fe?l[?\[?E? `YdoY`^`D@?BY?GZ`@}@WZ`7Z`?X05?P}@RYP}@?:`?$@>`@}@P}@WZ`UI@}@T@? `?IET@:`E\[\[@}@*`E?0}@?OBY[NL[$@?`?I?WZ`?[N?D@E?4@?^`?GZ`S/I?$@I_>`?YB ?S/:`RYRYI^gYB BY*`BYRYYB I?`TaƠ>`?@}@?*`?@}@?$@GZ`$@?`OT?7Z`?_?S/@}@>`?:`?@}@?I?$@\[\[*`*`L[D@? `?BY?D@?@}@?>`?@}@?T@?Z`?`Y^`YN``?4@?@}@?D@?E?P}@?Q?>`?$@?*`0}@N`?*`?eDߠ?iB ?aƠ?_?RYGZ`P}@*``0}@4@P}@a@`U?U?X05UT@?L[?:`D@7Z`L[S/4@? ``@}@@}@?0}@?$@QP}@7Z`OYO$@?$@?BY?T@?>`UYB IN`D@?:`?GZ`?BY?:`? `? `?>` `QTT@V) >`?WZ`?bY?O@}@BY?0}@?IP}@O7Z`>`GZ`P}@]1[ Q?I?E?`?BY*`GZ`?I?GZ`4@?GZ`?P}@IJ`?V) ?e?Z``?D@?I?P}@?Q*`?*`@}@U>`?N`?V) ?J`?@}@?J`?O?P}@?P}@?$@>`4@>`GZ`7Z`>`QJ``?E?S/?7Z`P}@N` `:`>`?E?P}@?O?T@?0}@GZ`?0}@?RY?4@$@? `7Z``C a?D@?a?@}@?BY?a@`?Q4@BYYB WZ`?*`?$@GZ`>`? `7Z`P}@4@?@}@$@BY?`?D@?S/?_?T7Z`I?7Z`?O?`@}@7Z`GZ`V) >`?T@?J`N`T7Z``@}@@}@? `?7Z`*`S/T$@?P}@?L[ `? `? `N`O`GZ`L[?O?Z`?N`?>`J`T@?J`?V) ?>`?T?U0}@?*`?a@`?`C ?I?`?*`?>`?*`?$@?BY?O?YB ?X05 `J`?@}@?X05?@}@:`?`?I?:`?`?$@`?0}@?Y?V) `S/`}@c/T@0}@:`D@P}@[NUN`[N[N>`S/[N$@?4@D@D@?*`?@}@0}@N`?0}@?Z`?RY?T@?aƠ?Y?:`:`\[T?7Z` `L[?>`?7Z`?*`:``?L[?*`I:`? `?J`?U0}@Z`0}@?T?YB ?WZ`?D@$@I_T@?Z`?^gD@GZ`?P}@?Y?WZ`?T?D@ `@}@QRY:`E?BY?D@?7Z`L[N`?@}@?0}@>`?I?O>`QYB [N?L[?:`?O?N`$@?:`?V) ?*`J`7Z`?$@?*`? `:`GZ`? `?\[?`}@?:`*`?P}@?N`S/]1[ *`?BY? `?7Z`?E4@BY?O?Z`?BYIYB Q?E?T*`\[_S/IYB c T?0}@?@}@?I?EL[^gQP}@`C a@`X057Z`?P}@?P}@`D@I:`?BY?O?GZ`?`>`?`?Q?@}@?$@?O?N`?BY?BY>`GZ`?BY? `UQE:`4@_d>`?7Z`?0}@?WZ`?U?4@?*`J`U?O?Y$@?:`?]1[ ?YB ?V) ?L[$@?0}@?X05?S/?7Z`?*`4@YB ?N`?7Z`?*`>`O7Z`@}@O?`RYT@QYL[$@7Z`?*`?D@`0}@$@S/YBY*`0}@?``TU?$@?P}@?*` `?O?OIX05@}@`0}@?7Z`?4@T@^`4@?S/?WZ`?J`?7Z`?RY?a@`?YB ? `OJ`0}@YB S/?I?T@?GZ`?WZ`?^g?0}@S/P}@Q^gd@e\[?D@?WZ`>`^g[NUD@?`?0}@?BY?E?4@?`?:`?7Z`? `*`S/N`?GZ`?7Z`J``?$@0}@$@T_0}@? `:`?J`?N`?`?J`?7Z`D@?>`?:`BY?J`?\[?@}@GZ`\[D@?J`?*`0}@?:`?$@Y?O` `N`X05Z`[NRYJ`@}@?@}@?>`E@}@? `4@?I?7Z`>`EP}@O4@7Z`BY?0}@?D@D@X05L[4@J`T@*`?T@?Q4@QJ`4@>`\[gZ`c/J`?D@?U?L[?E?Y?T:`P}@*`?BY?BYN``C ?_?I7Z`?L[?^`?I7Z`:`:`P}@WZ`]1[ aN`?>``GZ`0}@7Z`:`$@IBY?4@?`?O `V) I>`S/D@?@}@GZ`?:`?L[?@}@?U?IE?@}@?`?>`? `BY?0}@?*`4@?@}@?$@@}@?J`?RY4@>`4@I>`E^gYB ?D@>`?7Z`7Z`*`?`7Z`GZ`BYGZ`YB `C @}@?T?EL[7Z`?>``7Z`?4@?:`?*`?:`?0}@ `?$@?4@?Q?V) ?>`$@? ``UdoY`_?7Z`?X05$@]1[ N`?@}@`}@feX050}@?:`?D@0}@D@?:`?`YX05`?D@?7Z`UbL0}@?P}@BYU?`?O?BY?``@}@:`:`WZ`T?7Z`?D@?$@?*`0}@@}@BYYB J`?N`?GZ`?d@?w?m@QO?L[?:`@}@J`OY\[GZ`?*`?V) ?T>`N`0}@?*`4@O>`IS/?:``?`4@S/4@?P}@?U?O? `E>`?*`?J`?IQGZ`GZ`N`BY?7Z`?N`?@}@ObLT?0}@E`}@X05GZ`OP}@D@0}@?:`?T@?P}@?`?$@?N`?U?WZ`?RY?@}@?E?T?GZ`E]1[ ]1[ 7Z`?>`BY[NJ`?E?J`4@GZ`?4@?T?X05?RY?`>`$@0}@>`*`D@$@@}@X05BYQP}@?`?0}@*`7Z``?0}@?@}@?@}@?^g?QBYEBY:`IbLT@?RY?P}@?pC ?9?O?BYE?T@?O? `P}@`}@_^gYD@:`@}@7Z`L[]1[ _N`?`$@E4@IYD@?0}@*`RYZ`U `?S/?Y?RY?N`?S/?L[?*`c QV) doY`[N? `?:`?`7Z`V) UBYS/^`X05T@ID@@}@?$@?*`4@?O?P}@?4@$@>`?D@?$@`?$@4@?`$@BYBY$@?N`?a@`?a?U?GZ`?BY?`4@?BY?U7Z`^gL[0}@GZ` `?:``?4@?P}@?7Z`4@D@I:`0}@*`?$@?@}@?Y?a@`?`U*`?E?L[?4@[NWZ`?0}@N`?E?yB ?vOǀ7Z`S/?@}@?BY?D@`S/GZ`L[S/?$@? `aaƠIX05eDߠX05`7Z`D@? `D@`?@}@`S/P}@$@?$@?:`?O?P}@?O?T?J`? `0}@ObLN`RYbLY:`I*`L[GZ`E4@?`?I?`}@?Y4@V) OBYJ`:`?E?BY0}@D@D@@}@BYL[`?N`?*`GZ`$@?P}@?WZ`?@}@IL[0}@$@?`?Q?Z`?N`?*`?@}@?GZ`?7Z`?L[?T@`S/J`RYS/?BY?YB ?S/?[N?a@`?O? `?$@?`D@[N_RYD@4@>`YP}@?Q?S/?BY?N`$@O>`^gc/?0}@c/Y:`7Z`?J`?N`$@:`N`?Q?RYc/ipIJ`a@`WZ`J`S/L[7Z`:`*`?D@?RY?GZ`?4@?E?GZ`7Z`BY?N`?\[?S/?D@?I?Y?WZ`*`RYE0}@:`?`?OE?0}@?*`GZ`OE? `?BY?`?4@?Q?ED@Q0}@? `P}@T@?$@?J`?7Z`? `?``D@? `?:`OYB BY?$@?E?P}@?>`? `?GZ`?GZ`7Z`?0}@?pC ?xe ?iB ?>`?J`?V) ?O?:`?@}@?O?``C ]1[ ?L[?`C ?Z`?bL?d@?J`?N`?V) __D@EZ`_WZ`?*`?S/OdBY?:`D@E7Z`GZ`J`X05\[L[V) [N? `?D@4@ `7Z`N`?L[?S/aƠkO4@QP}@T@S/4@GZ`YB L[?0}@?I?Q?O?J`?4@L[Q?0}@?P}@?4@:`?`?]1[ ?a@`?N``E?`?@}@?:`?EBY? `GZ`RYO>`BYZ`aƠ^g[NV) >`?L[?J`S/`}@>`?N`?N`?*`?*`?S/?S/`0}@YYB P}@Z`V) ?$@?:`?N`?U@}@?I?oY`?AI? ?Y:`?L[?D@ `?GZ`?U:`c/I?^`?^g?Y?d@?`}@? `J`?`?RY?GZ`7Z`?T?N`>`BY?*`?Q?I`C py^`?7Z`@}@P}@?>`?N`? ``?7Z`4@bLdoY`J`>`L[?$@E? `?*`bYf) *`?GZ`4@QV) >`?E$@TD@*` `?BY? `GZ``?:` `D@IL[S/Q*`?$@?7Z`?0}@0}@?`0}@RYJ`D@N`D@$@>`N`GZ`0}@N`c/f) bL\[S/>`?>`?>`P}@\[@}@?J`?P}@?`? `?YB ?UJ`V) RYYT@TaS/?:`*`T@`?OBY?E?u` ?ր?[?\[`}@@}@?4@?@}@?GZ`*`bY]1[ ?`C ?py?eDߠ?`}@?fe?YB 7Z`S/O? `?O?BY?4@?O?GZ`*` `?$@?`?@}@4@bY^` `7Z`S/0}@@}@?>`?UBYd@^`OV) O?@}@?BY@}@:`0}@YO?YB ?\[GZ`a@`[NBY?`0}@$@?7Z`*`$@?GZ`7Z`Z``?X05?EL[Q4@0}@P}@T@P}@7Z`? `?>`?`WZ`aP}@:`QRY0}@BY:`?$@7Z`TO*`?*`@}@>` `7Z`D@0}@?7Z`?E?RY?@}@WZ`\[Z`]1[ T@WZ`X05?I?`C ?4@GZ`?4@?Y?D@ `?u~ ???@}@^gN`?0}@?T?S/EaƠ?qƠ?ve?k?i?h?OBYL[O? `?S/? `T@ORY\[V) TY*`?IOc T>`J`BY@}@BY?BY?EU^`@}@GZ`Y7Z`?RY?E7Z`$@?0}@ `?L[?f@?Z`Z`bLL[GZ`YB WZ`?>`7Z`?4@?Z`?4@P}@4@OX05I?*`?`EE:`BY `?S/?*`[NWZ` `$@V) YB 7Z`?BY?`0}@$@7Z`>`? `?:`?GZ`?J`?`4@ `BYQV) TJ`?`?P}@?:`? `?7Z`IZ`D@OT@?P}@?^g?*`$@?GZ`?X05?YB ? `BY?GZ`?N`?*`4@:`?:`?Q?7Z`:`?P}@?m1[ ?m@?eDߠ?j`?fe?`J`>`>`?@}@?RYBYYEL[]1[ T@L[X05D@?EBYbLV) *`D@:`$@$@S/bLRY?7Z`7Z`N`?BY?X05?E?7Z`?GZ`?BY?P}@?^g?4@_J`?T@c a@``?*`*`?L[?Z`?:`*`4@^`graƠUQS/T@BY7Z`S/?7Z`?X05?0}@P}@ `?>`L[`C YB *`?N`?J`? `$@?*`J`7Z`?O?RY?@}@?`@}@P}@X05d@gZ`N`?aƠ?jF@?]1[ ?]1[ ?bL?4@D@?O?7Z`U*`?7Z`RY[NWZ`RY`?$@IT@>`?L[?Y?4@S/P}@?7Z`?E*` `?I?>`?GZ`?aƠ?UJ`>`?E?4@?4@?*`J`0}@?Y?Q`?>`?BYD@*`?T@?I>`?$@?WZ`?GZ`N`TQ\[eaƠ:`?7Z`4@4@?D@?BY `? `?7Z`?:`? `*`S/]1[ ?`?_? `c Z`?:`?I?BY?T@?IBY?@}@Tc YV) [NTIBYOZ`?D@?GZ`*`BY?D@?@}@RYYBY?4@?GZ`?BY?0}@?GZ`?Y?Y?`V) I?T@?]1[ ?O? `GZ`BY?0}@BY?`}@?yB ?z`?f) ?O?U?7Z`?7Z`?bL?YB J`@}@?0}@P}@bLc/c/aP}@ `:`?0}@?Q?0}@V) U?$@ `\[V) ? `? `?>`?U0}@^`?$@?aƠ?V) ? `7Z`@}@?GZ`?aƠ?X05?@}@?N`?*`Q$@?V) ?N``?*`?Q?GZ`D@TV) ]1[ Z`>`GZ`RY7Z``J`QN`P}@$@?ITYB T`?EEa@`S/?>`?GZ`?GZ`?T?>`P}@? `?[N?D@>`? ``D@?>` `GZ`J`$@QWZ`T`?:`0}@*`?GZ`?L[?$@BY:`?T@?e?a@`?4@D@?*`?[N?]1[ ?L[? `D@7Z`?YB ?ip?k?u?^j?{?_OGZ`$@?D@?a@`?^g0}@?I?7Z`@}@?$@?4@Y`C @}@7Z`UQ@}@Uc/WZ`?4@EgZ`WZ`?WZ`?^`?\[?Z`:`^`?`?a@`?T?4@?N`?U?@}@? `?7Z`D@Y@}@$@N`4@?0}@GZ`S/7Z`?$@`BY?>`D@`}@[N>`7Z`P}@P}@S/^`I?P}@?7Z`T@O$@:`J`IBYGZ`4@?Q?RYBY7Z`?Y?X05?D@?S/?P}@?$@?0}@4@`?>`N`a]1[ ]1[ RY?0}@?:`?$@?E?GZ`P}@Q?@}@?^g?Q? `?4@?RY?V) ?J`?$@EYB *`?d?q@`?s ?t9?l[?N`J`S/D@?0}@?V) ?`C ?L[4@?7Z`?L[?7Z`?WZ`?^g@}@X05? `GZ`EV) gZ`k`}@ `GZ`d@L[?\[?_?[N?YB ?:`BY `?@}@?$@?@}@?BY?7Z`?BY?4@?7Z` `:``X05Q?p}@?y?N`d@GZ`?D@ `GZ`@}@BYTWZ`J`7Z`:`BY0}@4@V) T?`Q>`?:`?`0}@?0}@?GZ` `V) ^`P}@?L[?X05D@^g$@?N`?GZ`?RY?I4@4@>`RY*`?N`O_J`D@>`?:`?0}@7Z`0}@$@BY:`? `*` `?GZ`?E`L[N`$@>`c/e4@?YB ?YB ?D@?*`?P}@?RY4@I?0}@?T@?^`?T@ `?0}@?D@>`7Z`T@}@?[N?Z`?N`?GZ`@}@YB Z`YJ`BYL[? `?Q?GZ`?`4@7Z` `?*`?D@?GZ`:`?BY?L[?$@?7Z`?BY?GZ`?EQ?Q??N?veI4@ `T@UQT@E?0}@ `UYQ*`?E?*`L[I7Z`:`?`D@S/4@?O?7Z`TX05D@?:`?N`QipYB ?D@?I?*`BYI?``UP}@*`RYaBY?E?P}@?D@4@BYD@Q$@?U?GZ`J`UJ`?0}@?BYD@\[^gX050}@?`Uc/YD@ETO?Q?_?$@:`?L[?J`?`?`?0}@?N`?BYQWZ`T^g:`?Z`?S/?BY?I?:`?N`?S/@}@YBY?GZ`?U?T@?J`*`adoY`Q7Z`?0}@?U?X05?O `@}@?J`?Q0}@0}@?$@?E?T@?$@?^g?_@?#@?uDߠ?Q?RY`Q `?0}@:`*`?0}@P}@eDߠ`}@QD@?GZ`?V) P}@7Z`?E?IET@N`?0}@?*`I>``4@?`IdoY`S/?U?T0}@UE?D@?*`OWZ`\[Uc/X05?>`?V) ?$@I? `WZ`I?X05?V) EYBY?GZ`?:`RY]1[ RY@}@`? `:`D@`?` `BYJ`?0}@?RY?*`?`?GZ`IbLO?P}@?Y?:`I@}@7Z`TJ` `J`N`4@ `?N`?QJ`\[*`?U?WZ`?P}@?V) ?D@`C gZ`YB N`?O?E?>`?$@0}@?:`?7Z`N`GZ``?0}@?V) ?P}@?L[?iB ?f@?@}@?[N?0}@?T@?T@?$@BYJ`WZ`YB *`?7Z`BY*`?P}@?:`N`GZ`?BY?I? `?`?`:``0}@?0}@?*`D@$@0}@WZ`7Z`?YB ?RY$@BY `?*`7Z`>`EX05@}@RYV) ?GZ`:`:`?Q?GZ`S/RY?D@?Q? `@}@?D@?@}@4@E?BY `IE?4@?^g?h05?eDߠ?U?` `?0}@?*`? `7Z`^gc `?a@`?]1[ ?:`*`$@7Z`D@0}@>`S/QGZ`J`D@J`WZ`GZ`?N`?Y?E?I?:`\[`C GZ`IGZ`@}@QBY`J`E>`O7Z`?`?GZ`?J`?*`0}@a@`gZ`:`?N`?4@?:`?>`?$@?`7Z`>`?$@?GZ`?Y?V) :`N`?@}@?Q?`BY$@7Z`?*`?E `7Z`? `?>`?*`:`0}@O? `?GZ`4@@}@? `@}@N`?:`?`?*`?@}@?@}@?7Z`:`?>`?Y?:`J`E?@}@?GZ`?@}@*`?:`?D@4@:`?$@7Z`P}@BY?:`?doY`?qƠ?oG*?`}@?P}@?0}@0}@4@@}@IL[GZ`?:`?T@?@}@$@0}@P}@YB *`?T@?GZ`4@7Z`7Z`>`@}@QP}@?BY?aƠ?a?L[?$@?>`Ef) _`GZ`IO:`:`YX05L[L[0}@? `$@?`?`P}@T@? `?4@?7Z`?@}@BYGZ`?>`?:`?@}@?S/?I?D@?O?`>`?@}@?YB ?X05?D@?`? `0}@`?`@}@L[:``*`IE? `` `?T@?@}@V) O0}@N`RYBY?0}@?GZ`?L[`?BY?E?O?$@0}@?RY?Q@}@BY?`?0}@?D@?L[?>`@}@O?$@?J`L[^gJ`0}@?@}@?0}@?N`?bL?X05?7Z`?Q?BYOUJ`?`?J`$@@}@?D@?*`ON`U]1[ ?[N?L[`$@`?7Z`?D@7Z`O?@}@?aƠ?bY?V) ?S/?QIf) [N?:`?0}@7Z`?D@?J`$@TOL[WZ`Q>``:`D@`? `?@}@?J`?`?*`?>`4@?L[?>`?D@?D@N`L[?O?X05?GZ`?`?$@?I?I?0}@?@}@?GZ`?4@$@L[WZ`S/D@P}@`C T?4@?0}@?@}@?_?N`L[0}@`TGZ`?GZ`?RY?O?E7Z`0}@*`D@0}@?O?`Q7Z`?:`?N`?Z`?S/?7Z``:`?$@?>`T@_@}@?>`?RY?T*`N`@}@WZ`U?J`?D@V) \[E?N`?V) $@?`}@?y?~`7Z`? `$@`?`?`?BY?IE[N4@?T?RY?:`?BY?D@0}@L[?O?BY7Z`$@?O?Q`0}@?EYV) >``*`RY^`[NP}@? `?E?``?*`?@}@?P}@?@}@ `?Q?ORYI?X05?bL?Y*`YB L[0}@GZ` `?T@?P}@ `J`UQ0}@GZ``C RY?@}@0}@L[?>`?:`0}@?BY?D@:`?$@?Z`?`C ?U?4@? `I^`_U? `?>`J`P}@$@?S/?gZ`?bY?T?T?>`7Z`D@P}@@}@?GZ`?RY?T?L[GZ`UGZ`T@O?BY?$@QQ@}@?D@?O?J`??oY`??x050}@?D@?BYP}@WZ`BY?>`?>`?4@?>`L[^`@}@?E? `BY4@:`:`?0}@?BY?BY?D@ `D@?*`?7Z`BY?0}@?a?Z` `$@?0}@:`Y`C `}@a^gI?4@?>`?$@?4@?P}@?O>`*`?bY?bY`>`?D@?T@?V) ?4@L[ `?>`E4@?X05?YBY`?>`?O?*`Q0}@?D@UfeRY`0}@?*`?@}@ `*`?@}@?T@?BY@}@?`N`ef) J`?O? `YBY?`GZ`?BY?f) ?d?^`?[N?*`Y^`J`?D@?T?O?J`?0}@N`D@?J`?O?4@ `D@>`$@I>`?4@?[N?oY`??/?yBY?`?:`N`T?ID@?`?GZ`$@RY>`?>`?*`?7Z`?I:`GZ`O?BY?P}@?$@?0}@? `N`$@?^`?`}@?GZ`?0}@?>`E^gV) GZ`X05^`J`?7Z`?O?P}@?O?O? `S/`?`C ?YB `@}@>`4@?4@?4@?7Z`?\[?bY?J`?E?bY?`C `@}@?E?U?T@?:``?I?N`TbYBY?0}@*`7Z`$@D@X05RY?`0}@S/`Qc `C ?*`?Y `WZ` `? `WZ`I?I?GZ`?BY?>`>`WZ`YD@?GZ`?O?BY?D@?`GZ`4@?T?_?GZ`J`P}@? `WZ`\[?e?}f? ??_S/I?`?` `?7Z`?GZ`? `4@?*``I@}@?D@?S/?Z`?^g?L[?$@X05^`?7Z`?[N?T@?I?$@EGZ`?$@?I*`Q@}@:`GZ`?4@?>`X05`C 4@?N`?S/?T@?Q?>`EP}@ `?`J`D@?0}@?$@BYT@X05D@?O?\[?RY?RY?aƠ?]1[ *`N`4@7Z`@}@?N`?^g?WZ`*`:`?@}@?4@:`@}@7Z`J`X05I?GZ`?4@BY?$@RY^`RY?$@?GZ`0}@J``E^`UGZ`J`D@@}@7Z`?$@ `>` `?4@?@}@?@}@>`:`?7Z`?N`QJ`$@>`X05_?@}@?u`?^j?wZ`?]1[ EL[?4@?S/?>`? `?E?RY?J`E\[S/D@`?T@?_?Y?O?0}@?7Z`?GZ`4@Q0}@?BY?GZ`?4@7Z`E?$@*`Z`Q$@`?I?BY\[^g?:`?Z`?T@?D@?:`? `E@}@T@aƠ@}@?T?U]1[ doY`[NGZ``?$@?4@?L[?GZ`*`>`Oc bL7Z`?U?`C ?T?*`?GZ`?S/P}@N`EGZ`GZ`?$@?U?O?$@?J`GZ`S/GZ`BY7Z`:`EL[WZ`S/?$@$@`? `?I?*`QT@0}@?BY?:` `? `? ` `@}@ID@T@V) D@I?L[?{?G ?xZ@?UJ`T?4@?S/$@RY>`?J`?QP}@eDߠU?$@?J`?_?bL?U?$@>`? `?V) ?U?$@QYJ`:``?I?`N`?@}@?RY>`BY4@P}@$@?D@:`D@?I?\[?X05?7Z` `?$@0}@@}@>`Y]1[ 4@?GZ`?P}@?GZ`BYTL[GZ`BY4@4@$@4@?T@?D@]1[ bLJ`?0}@?E@}@?GZ`?^`?IL[WZ`L[:`E>`?0}@?D@?:`?RY?*`? `?0}@ `? `GZ`X05T? `?WZ`?Q?>`?I?GZ`?$@*`O\[Z`@}@?BY?7Z`?`?GZ`?I?4@?$@`? `X05^`?*`?*`?k?vOǀ?jF@?*`Tc/`C $@?0}@O`C a@`N`?>` `O*`?J`?Z`?bL?_?T@?GZ`?4@?]1[ ?bY?RYP}@dZ`*`?@}@?P}@0}@\[ `?Q$@BYGZ`YB @}@?RY?Q?7Z`? `?J`?Z`?E?D@?4@EQUI$@?0}@?V) ?O`@}@>`7Z`D@@}@`I>`?^g?bY `S/P}@D@ `BYS/?`?\[?WZ`$@P}@?D@D@YB D@?D@?N`?GZ`?GZ`?P}@?U?P}@?Q?D@J`YB O?$@?D@0}@J`?GZ`?*`N`YS/D@?4@0}@7Z`?:`?D@?GZ`?L[?7Z`?>`?P}@`RY7Z`0}@@}@S/YL[RY_T``@}@Q]1[ T?4@?O?7Z`:` `?^`?bL?>`?J`?BY?L[?^`?^`?WZ`?0}@UJ`?E?P}@?L[4@[NL[$@N`P}@J`I?`?GZ`?0}@:`RY4@?Q?7Z`4@?GZ`?Q?*`BYL[?$@?P}@?$@?`?X05?V) 4@V) L[@}@Q4@?L[BYX05?J`?^g?:`7Z`0}@?4@?O?0}@@}@?7Z`?>`?0}@?N`?WZ`*`T$@?RY?S/?@ ?H?`@?U*:?Y?\^J?Z?\^J?f?u|?qP!?J?T ?c?]3?c0?a?*?$R`?V?`E"?Z?7\$R`E`E"\^J> {JVR[ O IO W\DR`?> {0@[@N {?L^J?:W\T :ZYL^JB[ O ]3`@VN {:?R[ ?[@?B[ ?:?DR`7\G\G\ZTR`?7\?I?$R`N {`E"U JdR`b[ E? 0@G\DR`?4R`?P@?*7\?0@T ]3U?E*O ? EEG\^`a7\?*JT DR`?> {?TR`?@@$R`O O ?7\0@R[ ?> {?G\E@@?> {S0US0L^J??k@?dq?i?**?Y?Y?[@?W\?Q ?j?s ?p?p?p?j?i?[@ ?P@?h2N@?g\?O @@??4R`Ya TR`Y_ Z[@^`]3YG\?4R`?7\7\ ?R[ dq_ @@P@?$R`?:N {`E"aTYEEL^J$R`? @@ ?G\?$R`@@IZ`E"E?N {?JIa ]34R`> {dR`dqDR`Q fP@a UP@??B[ ET W\G\B[ ?Z?R[ DR`?$R`?_ ?S0G\YX2N@@@?*:TR`Y_ P@?:?*?4R`?W\?P@?J?]3?I:?J?L^JP@U0@ B[ B[ **?h?L^J?l`?qP!?Y?Q ?]3?S0?Z?Z?0@?b@?{@?z?tR`?dq?dR`?f?S0??\^J?ir`?c?G\ ?E?> {V^`V^`b@aTdqeF^ {Q N {O B[ > {0@?I?*^`^`EL^J0@?W\?JQ YUO ?0@IZa dR`^`N {G\O N {JUQ ?4R`?B[ P@dR`a7\c0iN {YntHb@0@> {$R`?O ?V?L^J:I?*? ?S0?Q E> {?N {?> {O VE?I?W\? TR`S0UR[ > {4R`?> {?Z?I?*?S0?G\7\?4R`?I7\N {?*B[ DR`?$R`J?z?w'O@?ntH?[@?G\?B[ $R`?b[ ?ntH?`@?g\?|(?|`?f?7\?^ {?i?_ ?Q ?Y?]3?\^J?Y?TR`?N {?4R`@@G\TR`a b@b@d `@L^J> {Ye`E"Q P@@@*TR`YR[ T 7\?IJ?4R`?N {?B[ B[ X2N@ZaTdq`@Z[@P@?$R`W\TR`DR`TR``@]3:?$R`[@fP@G\0@[@E?R[ ?N {?4R`?*?> {?J?$R`DR`0@4R`J0@*V`E"[@UG\7\7\?L^J?d ?\^J?7\?$R` ? ? N {X2N@IDR`T G\?E?G\0@0@Q P@B[ S0??? ?b@?JaQ ?a ?l`?]3?]3?p?l^J?O ?E?_ ?dq?c?]3?$R`J?O ?DR`0@B[ *0@V`E"YX2N@W\> {?> {\^JfZB[ W\b[ ^ {R[ > {:R[ Q EYP@?T ?S0> {$R`YO ?4R`7\P@DR`P@^`U??$R`YaTUL^JR[ T E?7\T DR`? *0@?*?> {:X2N@P@DR`Q Q :??7\?*:R[ VB[ ?E?E> {?Z?Z?7\?:?G\?*? G\Q IG\IO YTR`?7\?O *@@> {?*L^JO ?8?l̠? A?y?B[ R[ X2N@? ?T ?DR`7\?$R`?T ?TR`?U?Z?7\> {?P@?W\R[ gǁa P@IL^JL^JIO UVTR`R[ I?@@$R`Z\^J$R`?*\^JntHkO ?S0?R[ J^`Y^`\^J?$R`?I ?*JfO ?Q $R`:?N {[@YG\:N {W\P@@@EJ7\?4R`?B[ *TR`U:B[ E?O VW\]3Y?$R`?`E"?a?P@?$R` ?:?Y?`@?O @@R[ O J$R`?I?*O N {B[ L^J7\?N {?Q ?*7\G\G\?4R`?> {DR`DR`0@?$R`?S0E?=M ? ?D\?uQ`7\Q ?7\?_ ?S04R`0@?B[ ?G\?I?[@?T Yd $R`?G\P@a a[@> {?J?DR`G\R[ *0@Y`E"YT G\O _ TR`?@@?4R`\^JntHn`T ?S0?P@Ue\^JT ^`S04R`4R`?*N {f@@?UT `E"?$R`*T G\IL^J*G\IJ> {?*?*? T b[ I?X2N@?[@?> {?DR`?J7\`@eFY?G\?e?`E" TR`S0 ?W\?]3?JN {b[ c0?Y?7\VX2N@L^J0@?E?S0?> {7\@@DR`:?7\?*JG\B[ Q IB[ O ?r`??u?P@T O ?O ?a ?U?I?J?> {?$R`?DR`X2N@V$R`$R`?4R`4R`R[ ?^`?\^J$R`G\?N {?L^JTR``@a c0VTR`c0V?$R`P@b[ ir`a O S0_ b@VDR`UT DR`G\$R`DR``E"?*?`@Yl`VN {O ?:?$R`DR`??N {TR`O *?4R`@@R[ 0@IdqY?U?aT?I?G\?[@?DR`Zb@J?T ?a?0@Z\^JYZO ?:?> { T T ?B[ ?X2N@? TR`S0J ?E?O S0R[ X2N@TR` ?0@> {DR`> {JE7\ ?I?oI?m3?`@?Q G\?:?TR`?U?T ?O DR`*IUI?*4R`U?X2N@?> {I0@?N {?S0$R`R[ ??L^JDR`[@c0L^JDR`a YJR[ G\S0b@[@]3cR[ *4R`N {O > {J:4R`Y$R`?]3P@jW\JR[ ?7\?B[ @@ ?:> {UR[ ?*N {T 0@S0fDR`?`@?G\N {*?J?W\?W\?0@L^J@@?DR`?4R`^`fP@L^JX2N@d Y0@4R`> {? ?I?$R`UX2N@DR`II?0@?G\?$R`> {N {YY7\?G\?0@@@:? ?0@? ?DR`?a ?X2N@?dq?e?*O ?I?Y?U4R`@@?N {?L^JB[ R[ *?7\L^J^`4R`?L^J:?7\?DR`?G\$R`]3Y$R`?@@?0@U`@4R` W\W\Z]3B[ Ub@:0@X2N@?0@?VJT ZR[ S0O DR`\^JV?:DR`_ > { O ?$R`TR`N {?E?4R`VY*?*G\DR`7\dq^ {?v?0?jHL TR`?0@?DR` ?L^J?N {O ]3O L^Jb@eFDR`?G\$R`UT N {R[ S0:?:?B[ :[@T I]3?eF?c0?I$R`?*?S0?JJTR`*?B[ ?E> {?[@?W\?c?[@> {:?4R`?4R`?TR`?X2N@?DR`?U?b@?X2N@?G\?J?DR`? P@W\*V@@?T ?Q ?*> {Z^`L^J7\YY$R` JJX2N@L^J?O > {c0> {? P@??*^ {`@\^Ja YT ^``E"b[ ^`4R`I7\? ?> {? ^`b[ 0@?0@TR`Y> {:T B[ 4R`e ? ?m/?{SK ?P@?4R`[@P@P@dR`b[ E?*4R`$R`? ?@@?L^J?*O VE? ?*?*?:7\?4R`IdqI?fP@?dqEU?I?V?@@?G\?DR`L^J[@I?B[ ?L^JE?V?L^J?Y?I?$R`?X2N@?O @@?0@?Q ?L^J?T ?I ?R[ ?_ ?@@EQ L^J?:b@W\?N {?> {X2N@^ {S0JL^JT YX2N@O 7\DR`G\> {N {??f?b@L^JY[@4R`P@ib@S0U@@$R`]3h2N@dq[@7\?ET I?:?DR`$R`YdR`Y4R`:J\^Jb[ G\?:S0?> {?%??n`$R`?\^J?IT ]3eb[ *?@@?E?Q ?O ?:*? ?T ?N {DR`G\?7\?B[ 0@> {?*?*$R`DR`b[ \^J?E?TR`L^J[@ ?E$R`4R`? > {:?@@?Z?Y?7\?_ ?S0?]3?Q ?J?_ ?G\L^J? ?I?DR`?@@IS0?E?P@DR`O G\:?@@? ^ {TR`?P@g\g\IO _ ]3Q G\L^JR[ J> {R[ L^J?]3?qT?p@?O ^`W\?4R`:]3O *?7\?N {@@^`YS0N {?> {?@@T X2N@@@S0[@N {N {TR` ?U?DR`W\b@Z$R`?E0@?ir`?fP@N {?dR`?TR` O ^`? ?\^J?S0?h2N@?q@?[@?$R`?$R`B[ $R`?@@*?$R`$R`I@@0@JB[ 7\S0^ {O ?:?0@Q W\L^JB[ 0@?4R`?L^J?E**?N {?V?G\?X2N@?N {?_ ?T ?DR`?O ?0@?J?G\?G\?S0?*?N {?0@> {?$R`? 7\?0@?J?*?`@?:d c4R`$R`U[@O :B[ JDR`*4R`T a :?o ?yr`?k@0@?4R`7\G\? *$R`?:?7\0@0@IY$R`?Q 0@UX2N@g\h2N@J?0@?G\?Y?$R`^ {W\?*?*Q \^J7\?V? G\?a ?e0@4R`0@?a?d ?v?-? ?F?R[ ?EDR`T ??> {IT DR`?:?$R`JS0N {JL^JS0R[ ? ?J7\YQ ?G\?P@?J?$R`DR`@@?* E?$R`?$R`?^ {?aT?\^J?V?L^J?S0?Q ?7\?Y?W\?Y?X2N@?*?4R`?S0?S0Q R[ P@?B[ ?\^J?0@^`[@@@Q ^ {TR`0@:4R`?:?G\$R`U]3I?_ ?n`?eF?P@?7\Q `@Q 7\:@@I> {?:L^JO TR` ?O 4R`[@]3b[ aTR[ *?> {?P@?G\B[ V$R`?P@> {jHL m DR`?^`?J?I?ir`?YW\> {?7\?E?b[ ?dR`?3?,?na ?2N@?j?> {@@V ?0@*JW\B[ ?B[ $R`UO N {^ {ZDR`:@@*:B[ 0@?*?J?E:T R[ ?B[ G\_ ?*?7\?[@?fP@?e?Y?J?X2N@?G\L^J$R`?P@?TR`?^`?V7\?N {?S0`@dqY? ?EQ O B[ U^ {Q B[ L^JL^J@@?0@?N {4R`b[ `E"0@?4R`$R`?DR`?4R`_ eO 4R`E7\:0@X2N@d Y:?$R` Yc\^JJ> {L^JQ ?DR`G\G\? UjHL i4R`?X2N@?$R`??^ {?*X2N@?B[ ?P@? ?G\?O ??Kl?{?g`?gǁ B[ N {$R`:> {4R`TR`VIT X2N@7\:a`@*?*EP@B[ @@4R`B[ Y[@UDR`?> {Q ?U?J?G\?U?P@B[ > {?S0?E@@?$R`?@@?> {?X2N@?O N {B[ ?V?aT?O W\dR`O ?4R`?4R`? ?$R`?::TR`N {O W\TR`T R[ ?*4R`l^Jo P@$R`UT :`E"`@@@*J> {$R`T eF\^J4R`0@N {W\UO > {?*DR`:$R`DR`R[ TR`I> {S0^ {P@?B[ ?L^J:?T $R`R[ ?L^J?:\^JP@?q?ա`?(@??U?7\?0@?@@:G\E\^JaYVI?7\YY?E?:? 0@ITR`R[ TR`R[ :Q `@B[ ?J?> {?eF?S0?$R`?B[ $R`]3E?V?@@0@?G\?*:?E?@@L^J*?c0?q?h2N@7\Y?7\0@4R`?7\?G\0@UJ> {G\4R`O b[ L^J*jr\^J:G\P@ZaTa UP@VO @@DR`::R[ T JE4R`?B[ ?Q ?*E?G\?7\@@JN {Y^`E?0@:L^J?E?@@?@@?Z? U :dR`U?J?TR`?g\?q ?f?Z?P@?7\?R[ ?TR`?$R`:R[ a ]3I0@?$R`?7\> {VN {?$R`?N {?X2N@?X2N@?> {ES0P@E@@? ?IB[ b[ G\?N {?m ?^`?TR`?[@?B[ L^J?@@?Y0@@@?G\? @@?:? R[ J?Q ?f?`@$R`E?*EEIIG\Y_ @@?4R`?$R`?B[ `@^`L^JaTeJ$R`DR`O [@\^JW\_ ]3TR`YX2N@IP@O 0@:L^JDR`?I?X2N@?U?:@@@@?:?:DR`G\7\O U0@?IE?:?Q P@?7\?S0$R`[@L^JN {I?S0?]3?J?P@?a?Y$R`:?:?$R` ?7\4R`X2N@O ?$R`?B[ ?7\7\VV:?:?DR`?E?:4R`N {L^J7\?$R`?4R`?> {?> {:I?> {?DR`X2N@?m ?g\?c0?`E"?> {DR`?DR`?Q > {4R`?B[ ??E?Y? [@]3O  @@$R`?7\?> {?E?E0@T \^J]3I?I?N { R[ ^ {^ {\^J> {?> {L^J`E"\^JV4R`?*G\@@?UaI$R`0@$R`:7\?$R`?> {?DR`?4R`4R` EB[ B[ R[ E0@> {DR`^`cDR`?O ?0@I ?N {?DR`N {c0]3?$R`?B[ :*?7\?$R`?G\?U?$R`P@G\N {`@U?G\?N {B[ N {?*?O ?:ET L^J?4R`Va ^`Q B[ $R`?0@> {?N {?Y?> {S0?k}?p?fP@?UP@0@?@@?:?7\$R`:?W\?b[ ?0@N {:7\IQ Q B[ ?0@?TR`?Z?P@L^JVE?Q ?_ ?G\N {T E7\J]3Z?0@?DR`U`E"Q > {?*?$R`I?*?Q UfJ?J?J?*7\?EE@@B[ ?0@?:JS0V`E"TR`> {E0@Ig\f$R`?TR`?DR`?B[ ?`@?e?L^JVd eFTR`??$R`4R`Q ^`T ?$R`?4R`?$R`UfP@^`?4R`?Q > {Y:?L^J?> {4R`:4R`:@@I]3dqZB[ > {> {@@P@S0B[ ?E?[@?TR`??q ?r?e?Y?O @@P@??R[ ?B[ R[ U?B[ ?O ?*?Y?j?c?:JVR[ ? ?L^JUR[ @@L^JB[ ?E?JB[ ZZR[ > {7\Q P@7\YJ?*7\P@[@a 7\?B[ ]3h2N@L^J?E?B[ $R`I> {O a U??B[ ?Q ?B[ DR`7\N {c0YG\R[ $R`? W\R[ ?B[ ?J?$R`?:?^`?eF?ETR`UY`E"Q ?B[ ?O DR`b@]30@?I?R[ ?7\G\P@L^J*?7\I_ P@?$R`?4R`?0@?$R`> {O B[ ? 7\?@@?J*G\EQ O ?N {?N {*O :?tR`?p@?aT?`E"?\^J*T ?N {?7\JG\$R`DR`?0@?pU?{?s ?Z$R`O J?7\?7\YeP@?0@:S0O R[ \^JZQ O P@I> { 0@Y^`7\X2N@b@caTE ^ {b[ B[ @@IQ O T ]3DR`?@@?@@?B[ :?N {?:\^JQ J$R`?$R`O DR`?:?$R`4R`4R`?> {?P@> {[@7\? TR`U?*?G\G\[@O @@7\? ? ?*?E? @@0@JVE?E?TR`?> {IP@$R`?I?J?G\?\^J?\^JL^J$R`?*?0@?7\?B[ T VS0?pz ?n {?f?dR`?W\0@?*?$R`?$R`?B[ $R`V?r%?~`?xҀ?eF?@@**?B[ ?7\TR`S0?> {?P@? O Y\^JYN {4R`:L^JG\?:@@`E"Z@@W\fP@aTR`T G\> {VTR`0@EN {*0@G\DR`7\?*? B[ B[ R[ T ?G\?O R[ P@B[ :O dR`[@0@0@$R`?> {?P@?G\VeT $R`DR`@@:VN {? G\Y0@?J?I?:$R`::N {B[ ?> {?I?X2N@?`@?I@@> {$R`**?N {?S0@@W\4R`?N {?P@?0@G\UP@?fP@?pz ?rS`?m ?X2N@?O ?Y?G\E@@?B[ ?J7\[@Q ?`@?vQ?v?f?T ?N {?4R`?*L^JB[ ?7\?7\@@UYP@7\ *4R`$R`7\U[@0@`@fIX2N@`@T Q G\@@W\TR`?@@?> {G\E?**JO ^`fP@N {?0@R[ [@N {E@@YfP@U? 0@? ?X2N@?aT?T L^Ja\^JT G\? ?*7\E?4R`?T TR`?0@?V?*J7\?4R`L^J ?G\?> {?Q ?Y?: ?4R`EDR`7\? ?$R`IX2N@E?E?L^JG\P@4R`?T ?W\?T ?i?tq?pz ?X2N@?Y?aT?B[ I ?L^J?B[ :S0V4R`?a?h?^ {?b[ ?h2N@?T *> {V`@YL^J4R`??> {?::@@L^JG\DR`Uac0W\?I?L^JY\^J?DR`?E`E"jHL `E"Q IO a `E"??7\R[ R[ > {4R`7\G\L^JT aT R[ `E"X2N@O N {X2N@X2N@? ?J  ?S0?_ ?Z?EJVG\? $R`?:?S0?4R`I? ?DR`@@N {??E4R`?7\ L^J?0@P@L^J?> {?DR`??4R`?G\?0@::*?$R`?Q ?O :7\*?I?Q ?TR`?k}?ir`?Q ?R[ ?Y?@@?> {?S0?N {?:4R`*@@?@@?E?g\?p@?UI0@P@feFV@@?V?r[ ?s ?Z:G\X2N@]3\^Jdqg\d X2N@?B[ ?L^JP@Q ?N {?L^JW\cT IN {G\X2N@]3*?> {7\7\@@Q P@R[ I?7\?@@?4R`?:E^ {^ {]3^`ZN {?$R`??O ?^ {?aT?Z?0@T Y7\ JN {O R[ 7\B[ 0@4R`?0@0@DR`?:?L^JDR`R[ ? B[ ffG\?L^J?I?7\?G\?$R`N {4R`?L^J?V?]3?L^JDR`7\?$R`7\DR`E ?G\?a?^`?N {?V?X2N@?Q ?[@?W\ N {TR`DR`?4R`> {*?4R`?aT?g\?$R`T ?0@?:TR`[@YY?Q ?y?{SK ?YJ*UdR``@`E"`@_ V??:Q TR`? ?4R`EJ?$R`? J7\G\?N {?TR`?Q :\^JTR`G\$R`?TR`?Y?N {?G\*Y`E"aT_ N {4R`B[ G\?N {?W\?a?a ?ET b@\^J$R`$R`Y`E"_ aTYI@@$R`? ??**S0J?G\?DR`L^JDR`?P@dR`eF[@ ? L^J::\^JR[ ?E?X2N@?U4R`[@:?@@:T X2N@?@@?L^J?I?$R`?B[ ?`E"?^`?TR`?[@?O 7\DR`R[ S07\N {$R`?4R`?N {?T P@?N {?DR`$R`VdR`G\?i?eFX2N@\^J?0@Q dqVB[ Q \^JTR`?4R`?$R`UV> {4R`G\@@?DR`?7\UTR`$R`B[ I?7\?\^J?\^J4R`Y$R`?I?@@?@@? 7\ ITR`W\N {?*?B[ ?O ?W\?S0?N {VUG\I@@G\`E"b@YVYTR`G\*? ?*?@@T J?*O JVU?S0?]3DR`TR`G\Q ::a ]3?0@?W\?Q O `@0@?> {@@G\4R`$R`G\U?^`?Z?J?W\?U?P@?Y?IN {X2N@:$R`*?N {?P@E[@B[ ?J?> {B[ N {> {Vir`Y?0@R[ b[ JP@aTT ?@@YP@*> {Q VDR`B[ b[ c0IEVE?O ?Y?$R`@@?B[ ?Q ?7\4R`II:N {O 0@?4R`?J?U?]3?V?7\B[ `@e$R`?X2N@7\\^JW\^ {Y? ?0@O S0:?*?DR`?B[ $R`O Q > {0@4R`L^Jb@4R`?u ?x?DR`\^JE?O ?DR`X2N@Y?*?\^J?`E"?$R`N {?7\?B[ 0@?0@?P@P@DR`IJ??V?T ?P@?Z?W\?W\?a ?\^J?N {?:O U0@G\TR`?0@?N {R[ ic04R`$R`?S0?T *T T > {*Q YP@> {O aW\L^J_ L^J4R`O Y`E"^`]3b@W\?0@? O J?7\?Q ?DR`4R`> {?J?S0?0@N {> {?J?$R`Z`@U:?E?V?]3?W\?DR`?VfJ?G\S0b@W\YI?T ?P@N {N {? ?*?*?G\?N {?EB[ ?B[ ?@@4R`Q ?U?w?s X2N@4R`?0@?Z?Z4R`I ?N {?`E"?Q ?J?T ?G\?:?0@0@ ??7\?J?S0?X2N@?W\?@@??E?E?@@R[ 7\?R[ ZN {0@Q a\^JB[ :4R`?J?@@P@G\?7\N {B[ > {S0L^J4R`R[ U@@UaTR`R[ _ ^ {VV[@T ?B[ ?[@?@@> {$R`?:?E?7\7\S0P@??R[ ?R[ ? N {?*?^ {?0@`E"]3O JE:?J?^ {?W\?T ?0@c0dR`IL^JQ O ^`R[ ?O ?> {T N {*:0@?$R`?P@?TR`?B[ ?@@?EDR` ?Z?d ?:U*4R`O ?L^J?Z?0@@@L^J*O ?0@?\^J?W\7\^ {?TR`?0@7\4R` ?> {?P@?TR`?P@?7\?4R`?7\$R`*B[ V?*?b[ ?N {P@R[ B[ ?0@?DR`? ?$R`?@@E\^JcE?U?:O $R`?> {4R`?DR`*E? @@ZX2N@Yc0`E":?0@DR`J?J?TR`$R`7\?E?R[ ?I?DR`N { ?G\? O W\V?*?\^J?$R`VG\DR`S0^`d B[ ?[@?I\^Jd Q 4R`4R`J_ T ?4R`I*:B[ N {R[ *?DR`?> {?0@?$R`DR`P@4R`?@@YI?IL^J`@?*?IB[ 0@4R`W\W\]3b@O ?L^J?Q N {fP@?Y?$R`@@B[ ?DR`?J?G\?Q ?Y?^`?R[ :B[ 7\Q ?X2N@?I0@:0@?O ?^ {?7\$R`?J?> {O \^JW\?I?ir`?a:> {?I?N {?N {?J? ?> {?[@?S0 :L^JaTd DR`?N {*U: E?TR`?\^J?U?$R`P@TR`0@?4R`B[ S0P@[@\^JG\G\N {N {O ?T ?gǁ?:*?P@O d S0Q ^ {[@^ {X2N@B[ > {*?7\?*??> {?0@ 7\X2N@_ TR`: ?$R`?0@@@7\*4R`?4R`?*^ {_ ?7\[@J?:L^JZ`@T *?DR`Y$R`?0@$R`?0@??0@?V?`@?^ {?B[ P@L^J? 0@7\? **$R`I??Q :U ?4R`:B[ 4R`?O ?gǁ?a G\V?0@?P@?> {$R`?S0?^ {?Y?^ {?c0?S0X2N@hZEUB[ 7\@@? ?> {?N {?R[ YaYE*?> {?JQ ieTR`L^J^`7\?@?b@?`?dR`?:_ hQ :JN {^ {]3 ?B[ ?4R`?@@?:*:4R`@@@@ @@\^JW\ ?*??B[ ?7\> {> {?:?N {?B[ Ia S0?B[ T E?*?:O G\*?N {?[@ ^`N {?B[ O Q S04R`?T ?U?0@B[ Q @@?7\?0@? 4R`$R`0@T N {?0@4R`O ?*7\L^J\^J\^J ?Y[@0@? G\P@*?> {B[ L^J?a ?t;?m ?*YP@@@P@B[ ?: > {4R`JL^J7\N {YVQ G\:?$R`?G\4R`^ {YB[ L^Jdq?B`?Vk?d`?m $R`[@Y7\*?T ?ntH?dq0@N {I> {?> {?7\S0[@L^JQ X2N@ ?J*> {?0@DR`JQ N {*?:?G\?4R`G\S07\?:?4R` ??> {4R`V*?J?:?\^Jc0N {?> {L^JU]3L^J?J?I> {I0@?0@?* ?$R`?4R`? ?4R`DR`Q *?> {?J?J$R`U]3eFeFL^JJI $R`> {DR`> {Efl`?B[ ?t;?q@?Z?G\?L^JR[ > {?@@:J\^JadR`W\?> {?P@?4R`L^J[@T :*4R`EX2N@eTR`?xg`?B`?}iI?U7\L^JIII?i?F?vQB[ gǁ_ DR`?*$R`VT 7\JTR`?:?X2N@?0@L^JTR`R[ DR`R[ b@U?4R`?:?  4R`?:?@@?4R`: ?B[ 4R`Y:?EDR`N {? JX2N@*?@@?G\?G\ T N {?> {?E4R`J4R`?$R`7\L^J> {7\G\? ?T ?JB[ E?I?`E"?O Vc0W\J$R`?X2N@?^`?DR`??:?@@?L^J?4R`DR`DR`[@h2N@@@?fP@?c0?G\?G\?N { VT :7\$R`?B[ ?0@N {afW\?P@?]3?O $R`X2N@^ {L^JN {cf`@R[ ?DR`?U*@@?4R`7\V]3R[ ?dR`?v?fb[ g\> {?:DR`W\N { L^JE?G\?L^J:Yb[ Y?B[ ?*`E"V?G\?O ?7\B[ ?J?I? N {V:?DR`?7\*?*?B[ 0@I4R`ETR`G\:?J?^`?G\JDR`?$R`?**L^JO IQ O 4R`DR`S0?[@?W\G\?> {?V?[@U?0@?B[ ?DR`?_ ?`@?:??DR`?E?N {?0@I? ?B[ E> {?:B[ YT S0U\^J^ {O > {@@?@@?0@7\O B[ ?4R`?0@?7\ R[ IT k}k}T ?DR`?S0S0*?JDR`b[ ]3:?E?E> {S04R`?R[ ?JS0Z?$R`?O *O *?> {$R`L^JEL^JDR`?N {?EW\V?@@?Y?Y?B[ E:?4R`?DR`?0@L^JYO @@?DR`?G\?L^J?TR`?O ?G\?4R`\^Ja `E"?$R`?]3?:Q DR`> {G\7\*> {N {X2N@@@?L^J?*J$R`?DR`?7\$R`? > {0@?Q ?Z?$R`P@ ?*G\*?B[ > {> {J?@@7\G\O c0d ^ {`E"^`W\VI:Q L^J???@@?:0@T W\4R`4R`X2N@G\?G\B[ hhP@?P@?aT?\^J?7\? ?*J]3DR`?I*[@B[ ?J?$R`?DR`4R`E?Q ?Y?4R`? ?B[ ?B[ 7\?$R`?> {?*?0@EO ?TR`?a?T 0@G\DR`? ?L^J TR`Ya]3G\:?@@?]3?R[ ?> {?DR`Ya^`?T 7\aYS0R[ $R`?B[ ?J? S0:?P@? S0JN {TR`0@?G\?> {0@0@?G\?Y?P@DR`YI@@R[ 7\?$R`P@W\G\G\IO YTR`X2N@f`@0@> {O @@B[ DR`EQ > {$R`Y`E"@@?B[ UT 7\@@^ {O ?G\B[ d \^J*?4R`?I?R[ ?L^J?4R` ?:?N { R[ `E":?g\?VP@? ?O ?4R`? ?$R`?S0?L^J$R`@@7\?*EG\? ?TR`?U?::O 0@?I O ER[ [@[@Z? ?U@@P@?:IDR`:??@@S0g\aTJ?$R`?E?B[ ?S0?TR`*> {W\aTP@N {X2N@> {?O ?R[ ?@@?7\?7\$R`JN {@@:O G\IYS00@> {L^JP@S0IR[ cV?J?@@DR`0@> {L^JI> {h2N@m \^JIJ@@?B[ ?DR`EDR`?7\B[ Y?R[ ?E*?TR`?Q *?B[ $R`4R`?7\?@@?[@`@?pE"?[ ?pz ^ {O ?> {:W\cY?P@?V*T ^ {U7\IUN {> {?@@?Y?W\?4R`B[ > {*G\$R`?Y?\^J?G\7\O ?E?YL^JU?DR`E$R`?4R`?*? S0aTU?7\?Z?Q :?R[ ?4R` *^`a?B[ G\O ?0@?0@?4R`S0YJ*N {L^JB[ S0\^JQ > {B[ *?0@?0@? DR`YG\?I*_ TR`?$R`?7\:> {Q ca EEI  ? ?G\?7\?0@?0@?@@?T ?R[ 0@J?N {?R[ T [@N {a `@?> {?\^J?G\V ??ʀ?{R[ L^J?*L^JYaTa:? > {R[ b@aN {VW\*? ?@@?^ {?^`?G\EP@E?O ?b[ ?[@?O ?DR`??Q ?\^J? :?0@TR`Q ?:?0@G\Q 4R`?4R`?DR`$R`W\L^J?0@??@@?JEQ ?G\?O DR`S0IG\P@O IL^JR[ I> {V@@?G\ W\^ {\^JS0?L^J?O ?L^JL^J?*?DR`Q gǁ_ ?0@?W\?X2N@?B[ @@O O $R`?E? 7\? > {P@0@7\Q G\? ?4R`?$R`?B[ ?S0*Z?E[@dR``@ir`c0?0@?R[ ?:O DR`?w?Q?w'O@Va Y[@:?0@*ETR`IQ J?I?DR`?$R`?G\?$R`0@?@@?E?$R`*N {TR`$R`?P@?:X2N@Y?$R`??> {?0@?4R`0@Q [@I?$R`Q TR`DR`Q [@ZQ ?$R`?B[ ?B[ ?TR`?@@> {U7\?E? JP@O IQ S0 ?N {??_ ?R[ L^Ja cV:??G\ W\G\?DR`?*TR``E"R[ ?:?X2N@?_ ?Y?DR`?$R`:@@?> {?DR`?*?4R`? ?4R`V^`T 0@?0@?L^J?Z?> {P@?0@?R[ 4R`G\N {^ {I?:@@JS0c0?0@?pz ?ZdR`dR`YTR`?I?I?B[ :@@?4R`?$R`?@@?b@?c?S0?:DR`YYO @@L^J\^JY:L^Jb[ `@DR`4R`P@TR`0@?N {?> { G\> {0@S0S0IU`E"X2N@??[@?W\? *4R`4R`@@YX2N@?DR`?\^J?@@0@7\P@R[ Q W\*?L^J?$R`?B[ ?X2N@?> {:B[ E*ETR`:aS0? G\R[ :??4R`?G\?Q ?TR`?L^JJ\^J? ?Q 0@@@?E?TR`?P@?> {4R`N {G\?B[ ?W\?TR`?TR`?J?7\?L^J?E?7\?4R`*?L^J?IUTR`:YT ? @@> {?]3?e?Y?L^J? ?N {?Q ?$R` ?B[ ?E7\O P@Y]3EUc0UDR`J> { :IR[ W\DR`?O ?TR`?@@?J?O ?I?E?DR`?> {? *@@@@?@@?Y?N {> {Y]3I?4R`? G\0@?T ?P@TR`[@R[ ^`Y> {P@:?S0?Q ?G\? Q ?W\?X2N@?U0@`E"N {N {fP@[@*J@@?7\*JJG\7\?$R`? X2N@^`?:?Q S0\^J7\0@O DR`?@@?O ?R[ ?aT?b@?> {> {?*?J?> {Q ^`G\ ?L^J?0@VO ?  0@@@:?]3?s?t ?i?c0?\^J 7\?I?@@4R`0@B[ V[@`@\^J:$R`@@?I?TR`JV?*?$R`J4R`?E?> {B[ O * E0@?0@?$R`?TR`?Y?R[ ?U?aT?Y?$R`? ?0@ ?> {?O ?0@G\]3^ { ?I? ?O ?_ ?O ^ {fP@`@fP@^`? @@I?E?O ?> {> {TR`?:?[@?Q ?W\?B[ UB[ :aTR[ ?DR`?:?E?> {O T IN {Q N {P@ZTR`?> {?4R`W\S0:[@h2N@]3?@@?T ?P@?`E"?c0?7\DR`?:?R[ ?B[ L^J^`YP@> {G\X2N@P@DR`*?4R`0@?`E"?@m? ?g?v?ntH?UX2N@O 0@?B[ ?L^JEZ\^JP@?B[ ?G\?R[ ?V4R` ?TR`?> {B[ EE0@0@@@?DR`?R[ > {TR`:?0@?> {?$R`4R`?*?X2N@?DR`P@B[ 0@?I?V?DR`G\@@?Q ?> {S0> {?I?Z?[@$R`R[ E[@X2N@?: R[ : ?O ?> {I?E?P@G\?G\4R`?@@?\^J?T ?P@?*O @@@@N {N {L^JJ7\?*0@I?$R`?7\Q ^`N {?G\?B[ G\?4R`?_ ?U?L^J?\^J?_ ?X2N@?L^J$R`Q T DR`> {TR`UN {L^J0@?> {?I?W\?F??@?$?R`?r@?c0I`E"N {DR`?J?]3?$R`J:?7\?TR`?7\N {?$R`N {7\L^J@@> {TR` ?EB[ :?@@4R`I?:?R[ 0@S0X2N@L^J?*> {VDR`G\R[ ?0@?G\ :?X2N@?$R`ZG\0@4R`?DR`?0@?0@?U?I?I?@@S0W\N {4R`?$R`?:?L^J$R`O ?G\?B[ ZJ?J?P@?^`?_ ?DR`?$R`4R`J0@*O R[ L^J*?> {?7\7\4R`*G\J*?*?N {?@@S0B[ ?V?T ?Q ?a?a?TR`?:7\I> {> {VQ DR`B[ ?7\?Z?r%?sy`?:? ?79 ?|?w?h2N@?VUR[ L^J??IDR`L^J?B[ ?X2N@?S0N {a@@*W\O N {YB[ > {T ?0@?N {X2N@aTB[ ?@@?IJQ E7\> {@@Q [@> {O aTR`G\$R`?R[ ?$R`J?$R`7\X2N@JG\ ?Z?7\P@?DR`?N {N {X2N@I ?:?G\?I? ?4R`?]3?@@`@U?7\?P@?[@?O 7\*4R`Q UZ\^JYX2N@0@?N {?::*S0d V?7\? ??@@:*?P@?4R` ?W\?^`?@@S0^`I?P@?TR`4R`YQ G\Q T W\?:?rS`?F?,`?É*?z ?S ?w?ir`?dR`> {> {> {$R` S0G\?R[ ?^`?I]3a?L^J?S0L^J7\?B[ @@TR`Y?4R`?L^JT ]3?E4R`P@L^JX2N@> {?@@?> { E?4R`G\B[ ?IDR`aTE?> {?@@?N {? B[ ?$R`*E$R`DR`B[ ?DR`:V?7\?L^J> {E4R` ?P@?`E"?X2N@?$R`?L^J?f?^`??> {?4R`?::L^J?:?G\@@Z`E"W\TR`[@E?> {*R[ @@?0@G\b[ N {?J> {V:0@?$R`?P@?$R`:?I?Y?Q *W\B[ ?[@?_ *YL^JG\W\`E"d J?h2N@?'O@? A?O[??ɀ?i?\^J?J> {@@@@*J?T ?[@?L^JR[ G\?dR`?b@DR`$R`?\^J?R[ > {T J?G\?O ?Q ?V@@aTUYG\?> {?E@@[@DR`?DR`?4R`?Q ?dR`?P@B[ ?E?]3?W\?I4R`S0P@E?*?R[ ?4R`:*IB[ ?DR`?> { ?:@@?R[ ?h?a?> {?f?gǁ?X2N@?G\ B[ :L^JG\?L^J?W\?DR`0@G\> {B[ TR`J$R`N {]3YB[ @@V:?IS0fV4R`? ?B[ ?*?4R`?7\?TR`?Z*T ?0@?S00@T DR`> {O P@YB[ ?d ?t ?$.?"?e`?@?Y?0@JB[ > {YR[ > {G\ ?J?P@?O ?0@?aT?VVN {?N {?DR`:4R`?4R`?@@?0@?$R`?7\?Q ?*V$R`G\S00@?B[ G\a 4R`?b@?aT?U?U?G\0@?@@?G\?0@ET Q > {?7\?J?@@?*> {??4R`DR`0@?O ?4R`I?4R`?_ ?Y$R`?TR`?W\?*DR`P@L^J$R`  ?7\?0@? ?4R`JTR`N {B[ O [@b[ ]3R[ UI$R`ajHL R[ ?0@*G\@@?:?> {J4R`?G\Q gǁV?7\$R`L^J> {:B[ 7\JG\?Y?n`?w'O@?z ?~ {?qP!?aT?G\ Q ]3DR`7\R[ DR`? ?? ?4R`?J$R`X2N@G\?:?4R`?0@?0@> {> {?4R`DR`?B[ ?T ??0@ DR`*?> {:Q ?Z?uF?s0?S0DR`*B[ ]3V?$R`?0@DR`G\?4R`*E?J?> {? ?7\*U@@?L^J?B[ $R`?@@?N {?$R`S0R[ B[ G\B[ IU_ aTU7\B[ VYS0E@@O ZTR`@@E@@@@b@e*?L^J> {[@R[ ?DR`?O P@\^JR[ c0jHL T ?:?:B[ @@0@*G\O 7\?I?^`?c?_ ?Z?`E"?_ ?S0*T :?IS0I0@B[ O :?B[ ?4R`N {Q $R`?:?B[ ?@@?0@4R`O @@?G\?G\ ?$R`?J?$R`R[ > {?B[ ?E?**?*?g\?xg`?u?UB[ ?E?@@T DR`?V?R[ *:> {\^J`@E?7\?0@?E?Y?O ?0@?J?DR`?E?G\?B[ ?Q ?7\]3]30@?> {?Q ?> {7\Ykib@fP@b[ DR`> {R[ S0N {DR`@@TR`X2N@7\?4R` 0@_ a? ?N {*L^J> {?7\?Y^ {IS0[@7\?> {?4R`G\N {?*?E?4R`?0@4R`S0S0R[ S0$R`?TR`?Y?> {N {DR`?I?@@@@@@?0@$R`T DR`?R[ ?DR`P@VS0L^J? ?B[ ?*7\Q TR`E?0@?E*P@P@dR`Z?L^J?P@7\> {?0@?W\?gǁ?f?J?0@?Y?W\?B[ ?Y?b@?S0?  DR`_ eY$R`@@P@?@@?f?h2N@?[@?TR`?S0?DR`?J?R[ ?J?P@?@@I ?P@*N {$R`?$R`_ p@Y?^`?> {VJE@@?0@? @@R[ dR`dR`G\7\O :*^ {aT?S0?O ?O ?P@?$R`W\fZ?DR`?E4R`*??G\?S0> {]30@?R[ ?Q ?I> {??0@?$R`?J?G\4R`R[ P@?0@?7\Z\^J?$R`?I?L^J?0@\^JX2N@?J?IDR`VaT_ 0@?DR`?> { 7\:L^J:?N {? YN {^ {a? ?:JL^J> {@@?7\?4R`?@@?Y?c0?R[ 0@??O ?:R[ W\?:?[@?7\O ?]3?b[ ?R[ ?I?S0?DR`?7\?E???I?I?S0?N {W\d W\??T 4R`X2N@?pz ?T?rEUTR`0@?Y?P@7\TR`c_ 0@EY7\?7\T `@?`E"?a?`E"?`E"?JTR`dR`V?> {?B[ $R`0@$R`?O ?dR`?I^ {W\? DR`W\E?P@?P@?E?I@@^`X2N@ES0ia ?4R`?B[ ?DR`c0c0??G\?$R`:X2N@O ?DR`?Q ?DR`?0@?aT?v?t?\^J?Q ?J ?G\$R`TR`@@*JJE:?4R`?@@B[ S0@@?Y?^ {$R`L^J?$R`?X2N@?a?N {:?@@?_ ?^ {?L^J*B[  ?*?L^J?4R`?*?N {> {?N {?O ?DR`N {> {?7\?T $R`?{@??sT S0G\$R`?S0?B[ B[ JS0?T V?R[ *T ?4R`?a?]3?X2N@?`E"?Y?@@*$R`0@? ?0@E4R`?`E"?`E":X2N@US0Q T ETR`ZO [@^ {B[ J[@`E"aTO ?0@?4R`?*\^JZ??7\?:?$R`B[ ??P@?E4R`?oI?\?wh?p? ?B[ ?O ?TR`?:4R`B[ EI@@*?@@?W\?R[ ?$R`B[ S00@?T ?P@?$R`?*0@?Y?TR`0@?@@?V?TR`?R[ 0@^ {P@?:?N {?DR`4R`?4R`?Z?@@> {?> {0@W\7\?@@?0@ ?7\O ^ {?d ?vQ?Q ^`??IEQ L^JN {?$R`?Q :[@B[ ?> {DR`?0@?I? ?:?Y?X2N@?V?^ {?TR`? ?N {?JX2N@c0?$R`?[@?E4R`Q U$R`?N {?S0?4R`UX2N@N {]3T ?$R`O c0V4R`?4R`?7\?E?I@@7\?4R`?*?*0@?$R`?> {O ^`?U? ??_ Y? ?J?0@?**L^JI??:?I?DR`?$R`*4R`?:?L^J?> {?Q ?R[ Vb[ 4R`?0@?c?}iI?zHL ?VDR`L^JYJ?J?U?B[ 4R`? ?N {O B[ V[@@@EJ?:?N {?L^J?$R`_ c0UYO ?O ?S0?**EG\L^JS0:?ITR`DR`@@DR`?G\*T ?S0?G\?O ?^`?P@$R`?$R`?P@?DR`X2N@c04R`?O ?4R`?:?4R`> {?S0?V?I?$R`?4R`0@a ^ { G\\^JL^J*$R`? ?4R`?E? L^J$R`?G\?@@?G\?B[ ? ?$R`7\N {L^J_ T ?`@?]3[@[@?B[ ?G\4R`?N {?@@4R`0@?:?7\0@0@?> {?L^J?4R`? ?DR`?DR`?> {?V?G\]3^ {B[ $R`?y??$.?o X2N@O IJ ?:?J?L^J? S0_ YR[ VJB[ S0?eF? ?@?r?aT?*cdR`7\?: 0@??4R`?4R`?> {B[ ?> {?L^J?4R`?4R`?$R`DR`7\?X2N@?b@?:L^J?4R`?G\> {?$R`?Q 0@R[ 4R`?4R`?7\7\I?> {?G\DR`?R[ ?7\:**JcaTDR`DR`TR`Q VW\4R`?G\?*[@b[ ?]3?Z?P@?*0@*:??:?DR`? `@hS0?G\?I> {?DR`?W\?Q ?> {?4R`?@@?IE?I?W\?@@ ?*?7\?G\?T ?$R`O ?7\?I$R`?x2N@?E"? ?qP!L^J*7\$R`$R`?J?a?> {cd O :4R`?$R`:?Q ?Ҁ??Ȁ?I ?@?^`7\*?V?7\^`]3B[ ?4R`?*DR`$R`?U?U?$R`> {O V?dq?h2N@?N {?4R`?Y?B[ ZDR`?J@@? ?DR`?DR`> {?4R`N {J?@@?E7\ 0@B[ DR`@@G\B[ 0@B[ B[ R[ X2N@ ?Y?7\eFeF?:?^ {?N {G\S0G\?7\?\^J?h2N@?VYcW\??U*?TR`?TR`?I?DR`?4R`@@R[ P@? ?I?> {0@4R`?DR`?W\?> {4R`?G\?I*?aT?y?u?R[ ?0@?:?R[ 4R`?U?@@]3Y*??DR`?> {J?^ {?ʢ`?1?N@?JC?@?vP@?4R`?@@?G\Q dqYIJ?I7\?EZfjdq$R`?Z?N {@@?B[ ?dq?R[ W\I?N {?S0?W\?O *?*?4R`Y\^J ?$R`? ?*> {E?$R`?4R`0@E> {?:?O ?J?G\?@@?> {?I?*J?_ ?N {`E"\^J?4R`*VDR`*L^JG\?$R`?:? ?P@?B[ B[ N {TR`?$R`?c?0@?Z?L^J??0@@@L^JR[ L^J?DR`?@@@@L^J?DR`?a ?Y$R`R[ P@7\B[ R[ 4R`?ER[ ? ?V4R`\^J:P@G\EB[ ?@@Y?8??X@??;@?F?G\? G\`E"^`0@?4R`?@@?B[ ?$R`?4R`EY`E"d ^`?YX2N@?P@?c?TR`*4R`??O ?_ ?N {TR`UP@a ^ {?4R`?Y?[@?L^J0@ ?:DR`\^JZJ??> {?*??0@?B[ ?TR`?L^JDR`> {?W\?T DR`: `@b[ ?7\?R[ 7\?4R`?B[ :^`_ L^J?> {?EDR`? ?^`@@?Z?L^J7\I4R`?4R`?*$R`:B[ ?I?@@@@:?R[ ?e?dq?@@X2N@\^JB[ > {UB[ ?Q ?Q > {X2N@I?*B[ X2N@L^JJO EUQ ?> {*L^J?E?o ?F?[?–?}?q?TR`P@]3Z ?TR`?O ?4R`??> {?L^J?:*?4R`?DR`:B[ ?@@4R`W\?X2N@?r@?g\?0@?0@$R`X2N@B[ ?T ?ITR`^`ZZI?G\?Y?V P@??IG\]3UDR`  ETR`TR`:?G\?G\> {B[ ?N {?X2N@?B[ ?:YN {?W\?R[ 0@4R`4R`:DR`[@[@? ?W\?G\S0Q ? [@?TR`?B[ O Z> {?DR`?* ?7\?$R`?4R` 7\?:?T ?^ {?`E"?TR`?*4R`JT B[ ?S0?Z?I@@4R`0@0@ IP@:I:?O ?4R`?DR`?k?m3??/?!h?sy`?s ?X2N@?$R`B[ T a P@?J?0@R[ I?7\?> {$R`4R`?> {?> {O O ?N {?E?J?y??qP!@@$R`EdR`Q ?U?TR`0@4R`B[ 7\??7\$R`aiT ?7\?$R`? ?$R`?$R`?@@?B[ :\^Ja Q @@0@?B[ ?T ?O ?B[ ?0@$R`?> {?[@?N {??$R`O Y@@?> {?Y?Q G\^`W\:?JS0U0@ L^J4R`?L^J?$R`G\G\N {:?DR`?> {?4R`?E?P@?DR`L^JY4R`?R[ ?JEG\?B[ ?R[ ?B[ ? ?0@?:0@@@?$R`?  ?B[ ?4R`?:?a ?dR`?c0?u ?{}?o ?b@?[@?:?*G\c0V?L^JZ?E7\L^J@@DR`W\eF\^J?X2N@?dR`?eF?|@??ntHDR`:S0b@4R`?Y?J?0@?T ?Z?> {B[ G\:@@\^JeF[@@@?$R`4R`> {?> {?JN {VN {IVN {?DR`?N {?B[ ?N {?Q ?O ?V?V?R[ ?IL^JT ?:?Q ?S0?W\VR[ :?I?[@B[ DR`? O ]3 ?W\*`@a_ N {?7\L^J> {?> {?:> {@@?4R`?I?L^J?*@@?7\?^ {?Z?7\0@$R`*0@?*?$R`EL^J0@7\T W\$R`?L^J?L^J?V?]3?I?DR`?TR`7\a S00@S0O ?@@?$R`UN {7\T ]3^`L^J?b@?ntH?g\?n {?m3?:I4R`Y_ ?L^J:?S0?a?IB[ G\E:? ?:?> {DR`O [@P@?@@?:?B[ ?:JY@@?@@?0@?E?@@?Y?`@?G\?*?7\?*? @@?S0?G\$R`@@I?$R`?G\?\^JS0N {*?0@O V?0@?[@^`aTaL^J?J?@@4R`??:?@@?$R`?:?> {?*?T ?W\:B[ ?T ?]3?L^J? 4R`7\B[ B[ *@@O ?$R`?N {N {`@7\?E?:?0@JY?4R`?UIc0X2N@B[ IN {N {\^J`E"JG\[@O ?> {?c?i?]3?G\E]3DR`4R`[@Y: $R`0@?B[ ?R[ :?4R`4R`Q ?X2N@?^`?E:EI?0@?S04R`E?V?]3?IL^J ?O ?7\?$R`$R`G\?L^J?^` X2N@VR[ @@*?4R`?J> {]3R[ @@0@?4R`?:?G\?JI$R`$R`?7\$R`?T ?TR`?:J?[@?W\?:?4R`?*?> {?N {?I?@@*J?DR`?W\4R`J?@@?N {?Q ?R[ ?> {?:?*L^JB[ ?E?J?Y?dR`?T ?:?U?N {@@Yh2N@fP@:?0@TR`b[ _ B[ ?0@Jaa TR`0@L^JY ?L^J?R[ ?`@?S0> {*7\J?$R`7\YI@@I$R`$R`? ?> {G\@@?T ?JO P@?*?O ?@@?7\?N {?Q ?:`E"b[ ?7\?U?N {?:Q V*> {Ua0@?JQ a S07\*?> {E]3Q 4R`?> {?O ?R[ ??@@?G\? 4R`?7\?T ?0@G\?E?^`?U?:4R`?S0?O ?DR`?N {?*7\?4R`?L^J?G\*S0$R`?N {? ?@@?4R`?N {?\^J?T ?\^J?^`4R`S0?J?_ ?_ ?Z?7\?$R`?T ?O 7\X2N@b@`E"O G\G\U[@? ?TR`O DR`?0@?a?^ {??4R`?G\?S0?aTfP@E?L^J??*B[ W\ N {JR[ 7\?J:I?TR`?X2N@?B[ *?0@DR`TR`?4R`?O $R`W\gǁfP@:??ER[ cX2N@Q UYT ?*?`E"^`?7\> {J??JE?:?O ?L^J?> {E?> {*E4R` G\P@?4R`?Q S0[@TR`4R`0@?> {?^ {?JS0O ?0@?P@?E:?E???N {?J?S0?]3?TR`?X2N@?^`$R`Z4R`?O ?R[ ?:V_ E:U^`YR[ DR`? ER[ ?B[ ?E7\? ?f?wh?b@?q@4R`?I?c0?*fO ?*S0IG\Y4R`?0@4R`B[ S0:?P@B[ ?N {?P@?*? ?> {:X2N@7\U^ {YP@G\V> {?W\?B[ L^JJTR`\^JR[ ?0@?T 4R`eF\^J? B[ ]3J?Q ?II$R`?@@4R` ?DR`4R`:?W\Y0@N {^ {TR`0@?0@T _ _ R[ 0@??[@?O T [@J?4R`?L^J?*?7\DR`O ?> {?S0?V?[@?P@?$R` JUN {:?4R`?B[ @@T O G\N {\^Jb@X2N@G\ ?0@G\> {?EQ Z?$R`0@?0??[ ?1L^JJ?V?P@S0B[ JfP@X2N@@@YJ:0@E$R`?TR`?@@4R`*0@*Q G\B[ W\W\G\?*?0@S0DR`?^ {?^ {?> {EW\N {?4R`?IO c0O ?4R`@@S0?$R`?W\> {aT?O YaG\E$R`?> {?_ $R`I?7\DR`V?B[ *:?4R`?$R`?@@?U?N {?$R`L^JR[ VL^J?:?0@*$R`TR``@E?:?B[ ?TR`?S0$R`S0P@:B[ J ?@@?:?G\?E?@@S0G\7\*$R`DR`?4R`?G\c0dR`? ?m/?@?< ?ِ?? ?Q IeFW\@@TR`:B[ \^JG\JVX2N@$R`?TR`?:*IS0E> {7\7\IY`E"I?0@IB[ ?T ?R[ $R`$R`> {@@ Q U? ?S0?TR`?E?4R`? Zb[ ?J?[@^`jHL V0@?0@?p?b[ ?I?O ?  ?P@?R[ ??_ ?b[ ?U?G\?TR`?W\?4R`P@U?I7\N {?0@?P@JO [@Q 7\:??G\O B[ ?$R`::J?> {?S0?E?J?G\?  B[ P@DR`4R`?B[ ?@@dR`c??}?v@? ??N {?Y?::?DR`?*?YUP@P@?:0@c0U:VW\I?B[ ?*?$R`?4R`P@`E"O ?*?4R`?4R`N {a I?> {DR`E?> {> {??4R`?$R`?*?0@G\J?N {?c0?_ :W\X2N@TR`?Q ?a $R`V0@?O ?O N {?l`?fP@?V?O ?$R`?*?@@L^JU?@@?W\?I DR`$R`?N {?EP@[@?7\?a?J4R`?0@:^ {Q B[ DR`$R`> {DR`4R`@@O 4R`?@@? 0@ P@^`DR`?0@?$R`?$R`?*7\W\L^J0@? ?0@Y]3?B[ ?DR`?xҀ?w@?(@?_?> {?`@?J?:0@?> {?JDR`N {R[ Q ?> {Y7\? S0@@?E?DR`?7\?$R`?$R`U\^JB[ ?7\?4R`?:?I??`E"?aT4R`S0DR`J?N {?@@?$R`?:P@P@G\?*?fP@?ir`?0@L^J7\J ?Z?^ {?S0?E?Q ?W\*?Z?S0?J?E??*?$R`G\@@?I[@TR`L^J> {?:?J0@TR`*?N {?$R`> {0@R[ ^ {4R`?I7\?$R`?4R`0@> {N {4R`?DR`?EEO UDR`$R`0@?  ?O ?7\UN {$R`: @@P@?S0?c?b[ ?s?t ?O ?TR`?B[ ?@@?E?4R`?G\*EX2N@:0@P@? ?7\DR`??Q ?DR` @@IO S0@@?B[ ?DR`$R`0@ 4R`?P@?pz ?n`?*VX2N@[@0@?N {?0@0@Q \^J[@J*?0@?b@?jHL ?S0?0@?B[ B[ O ?@@?^ {?[@? :?@@$R` @@> {:0@?0@?:?? Ia ^ {:?* *?*?B[ $R`S0UQ @@7\S0P@?E?Q 7\?$R`?*?0@?L^J?P@?**4R`@@G\@@*7\?G\?N {?O ?U?$R`W\> {?E:P@JQ ??[@?O ? *?*?: ?B[ ?TR`?B[ @@ZV? DR`a Q $R`G\DR`*?B[ ?DR`TR``@]3R[ E?7\?U?@@G\JG\X2N@@@?e?i?7\B[ B[ Q :4R`?$R`[@`E"P@?7\?$R`?@@4R`*?::S0N { ?G\*L^J?B[ W\TR`YaT ?*?4R`?$R`Q Y ?N {?DR`7\X2N@J?P@?L^JP@Z7\?N {?DR`B[ 7\?@@?*7\? ?7\? ?0@?R[ ?Z?S0L^J$R`?P@?G\$R` IL^J?I?R[ ?7\R[ V?B[ ?[@]3VTR`^ {]3UR[ Q B[ ?DR`?E:?V?O O _ G\?DR`> {`@T ?$R`?7\*7\?@@?Q ?@@ Q `E"R[ *> {?$R`?P@?R[ N {> {VZ?4R`?L^J> { ?O ?:N {T ?$R`?0@R[ E?> {?> { S0^`_ _ Q 7\S0]3^`Y7\?R[ ?7\`E"IR[ a R[ > {*?0@> {0@?P@?J7\TR`^`Q ?L^J?P@? ?[@?dq?V$R`@@> {G\?G\?:?:?DR`?@@?G\?$R`N {$R`?X2N@?L^J0@?$R`?0@N {\^JY:?:DR`^`I?TR`?YT I7\^`ib[ ]3d Z?TR`?^ {7\J?G\?EDR`:?DR`?G\? DR`TR`E?N {?TR`?> {?G\?L^J?> {?E?4R`7\?:?B[ B[ $R`?I?O N {*:L^J$R`YDR`?N {?@@P@Y? ?G\0@?*?P@?7\0@L^JR[ O N {7\0@Y\^JIG\JG\?L^J?7\[@$R`:?4R`?$R`TR`O ?* ?DR`0@^`a S0??G\?0@?*?TR`?a ?a ?P@7\JG\$R`?O ?O 7\4R`?L^J?DR`7\$R`?*0@?::J?0@?$R`Q YYI? O ]30@?DR`?4R`7\ DR`S0ET d N {?b@?b@> {U$R` B[ $R`VJ?DR`> {_ 7\?R[ ?E?7\?$R`? ?J?B[ 7\?? I?O ?@@$R`??$R`?IZJ?*> {?B[ ?> {?U?*? ?:?E?B[ ?G\?:?I?O EN {?L^J?N {4R`4R`?@@?@@Q N {0@?0@?@@?:E^`P@?> {?B[ > {cfDR`?S0?B[ B[ $R`?DR`?@@?DR`?@@$R`> {?Q ?^`?@@VJ?I?DR`4R`7\??*DR`$R`?G\S0I*? JP@0@O $R` R[ R[ 0@?0@?P@Q ?T ?gǁ?VP@X2N@> {:Y^`]3d a ?*?7\_ b@L^J0@0@B[ 7\?@@0@]3Q :DR`?7\?0@?I?O ?E?*$R`?0@P@ ?$R`S0?R[ ?*?R[ ?4R`:N {E?Q ?W\?> {?:?:?P@?YB[ ^`?I ?L^J?f?b@:?$R` ?0@?4R`O a ]3$R`?R[ ?:I ?DR`N {`E"4R`?TR`?4R`G\> {ER[ ?N {?B[ ?$R`?@@?P@?N {4R`TR`@@???7\?@@?0@?7\?N {?T ?DR`*?$R`?I?DR`?4R`? ?7\?DR`> {L^J?0@X2N@U? ?E7\Z> {?^`?`E"?E0@N {@@0@dqh?S0?l`?J:?*R[ e_ G\EX2N@T G\^ {G\? G\R[ Q > {?DR`?L^J?@@*W\Q 7\7\?:? \^JJ?:EDR`?$R`$R`Q T ?G\?G\I?DR`?N {?J^`m3R[ ?7\B[ $R`?`@?g\?L^J?I?I?R[ ?B[ W\`@L^J?$R`?N {?DR`@@ ?S0?J?> {?I?7\?*UW\?0@?W\?I?7\?7\$R`II$R`?$R`0@?Y?^`?I$R`E*?@@?7\?7\?Q ?L^J?? ?0@?:?J?TR`?DR`B[ @@?7\N {> {?B[ ?N {*YL^J?$R`?0@?\^J?gǁ?I@@aTV? ?@?} ?7\4R`:T B[ ?0@*[@a W\W\W\*0@agǁb[ E?$R`B[ N {Q aTY?4R`?G\?L^J? ^`Y> {G\> {> {DR`?0@B[ Z*@@Z??TR`?J?B[ X2N@dq?:?^ {S0?V?4R`?7\?S0?^ {?T :B[ ?4R`4R`?4R`?  ?7\?E?P@?L^J?$R`?> {?P@UB[ ?U?X2N@? ?:7\O ?B[ B[ ?B[ ?c0?aT?J*O @@?:@@S0?0@?@@P@W\:?7\?E?7\:I0@ DR`L^JIDR`? DR`G\Q N {?f?v?cE$R`@@?X2N@?F?F?T?V?$R`?> {?7\?E?I?7\:V_ aZN {X2N@egǁ`@$R`?4R`YaT \^JN {?T ?^ {?\^J?O N {U7\?0@?7\IQ ?B[ VG\W\^`? ?0@??[@?I4R`?[@?c?X2N@?X2N@?]3?b[ ?J ?G\?W\?R[ ?B[ 7\J$R`?$R`? 4R`$R`?L^J?@@DR`??J> {TR`?0@?`@?VIG\?L^J?G\?$R`?N {?G\DR`E?O ?\^J?L^J?7\?4R`4R`? ?T ?$R`X2N@L^J> {VR[ ?4R`?R[ ?EB[ S04R`?B[ ? G\L^JX2N@a V> {*?$R`0@P@?V?pz ?^`Q B[ ?Q ?l`?|`?~>?k}?N {?S0?S0?DR`?$R`$R`? ?4R`$R`N {X2N@X2N@UR[ @@7\I?$R`?DR`W\`@B[ @@?W\?\^J?\^J?Y*Q *?B[ ?0@Q O ?DR`? N {> {T TR`*ZO ?b[ ?Y?^ {?wǁ?x2N@?v?j?F?q@?b[ 0@*?B[ ?DR`IL^J?*?::B[ $R` ?J?4R`L^J> {O L^J?*?R[ ?DR`T R[ ?R[ ?Y?E?Q ?N {* ?N {?E*?$R`?L^J?0@?0@?W\?O DR`P@L^J4R`?N {?]3?^ {?P@DR`S0?:?\^J?P@:R[ ZQ G\B[ ?DR`?S0$R`:?E?4R`Q TR`?O ?m ?ir`?$R`S0$R`?G\?@@?O ?N {DR`R[ @@L^JYV4R`?U?V$R`*?X2N@\^J? ?:?B[ ?W\?Q ?E?@@JX2N@B[ ?$R`N {B[ O Q *E?cT ?W\?U?|?}@?m ? ???Y)@?x ?m3EQ ?$R`?L^JB[ TR`*?:?@@N {DR`??4R`?7\DR`JS0L^J? 4R`O DR`R[ TR`?DR`?S0?*?@@?P@?B[ ?:?DR`?@@?$R`?*?7\$R`:?0@?I?B[ *L^J?:?c0?`E"?I?:@@S0?7\?_ ?T B[ DR`@@*DR`I?G\?`E"?U?0@?7\?*L^J*?`E"?YB[ L^JL^JUQ L^J?T ?vP@?rS`L^JeO T aTX2N@> {?0@?$R`IIL^JaY??:?E?W\?B[ @@O W\W\E?*7\G\O ^ {T 0@7\?DR`?7\\^J?R[ ?a ?$?@?85?c,`? A?;@?;@? @@R[ ??U?@@ 7\? ?L^JJ> {> {JE*J^`DR`?TR`0@aJDR`?7\?*?I?@@??R[ ?U?$R`EDR`DR`:?7\?W\?J> {?R[ ?m3?`E"> {$R`$R`Q ?TR`?$R`UP@$R`DR`R[ :?W\?c0?c0?b[ ?V?P@?X2N@?7\B[ ?> {?I?@@?EQ d \^JX2N@?T ?z?~tH?B[ ^ {4R`R[ Y?*?7\IR[ G\4R`N {]3N {?*$R`?0@4R`VYR[ G\I?G\$R`Q DR`B[ > {$R`?> {$R`TR`?V?Y?^ {?r`? ?R`?^@?9?@?K?\?0@L^JG\?7\?@@?G\?DR`IB[ ?R[ ?EP@S0N {Q :?> {0@Y$R`?^ {?> {TR`?$R`?V?4R`7\ ?0@?> {?@@?$R`:$R`?V?[@?*@@B[ 0@?O ?R[ ?DR`?f?u?i?4R`?@@G\4R`?4R`R[ `E"0@?Q ?4R`TR`]3$R`?`E"?aT?a?f?Y?I?G\0@?*?4R`?*?J> {YEX2N@DR`?s0?v?O 4R`?B[ @@?a?Z4R`N {0@?4R`$R`E$R`? :JR[ UUP@0@R[ DR`?DR`> {N {?R[ ?X2N@ DR`0@L^JV?R[ ?TR`0@?3?7`?D?UB?w`? ??y ?> {T aP@7\??:DR`L^J?> {?*VU4R`? ?0@?DR`?4R`?J?Y?@@0@?DR`?R[ ?0@@@$R`?I?Q ?B[ ?*$R`4R`?:?E?*?0@?**EN {> {?:?U?k}?s ?fP@?:?J?DR`L^JG\7\VS0?I?V?*L^JV> {?O ?S0?]3?h?O [@L^J0@G\?7\?::?@@?E?B[ 7\S0?R[ ?Z:4R`?4R`0@?*?O ?> {*JS0J@@:> {I:*R[ VDR`0@? UN {?R[ N {?]3?VX2N@^ {IB[ P@TR`$R`O ?d ?5n?F??cb@?rP`?!h?[ ?7\N {\^J7\?7\?$R`G\Q ?$R`P@T ?B[ ?> {$R`?O ?T ?G\*? DR`TR`TR`*?Y?]3?> {0@@@O O E4R` B[ > {?> {N {4R`?O ?]3?Y?0@*?> {? N {JB[ E?@@:Q > {7\IB[ ? ?b@?pz ?P@cYP@Z?B[ B[ ?:?P@?4R`?> {$R`E[@J?$R`?> {?*R[ V4R`_ dqa TR`N {V:?J P@EEEIT I@@a[@?DR`b[ Y:E> {:> {??O ?W\?dq?y???{}?P@?I?I?$R`?O ?\^J?X2N@?@@N {Y4R`?DR`:V> {?G\?0@R[ P@?B[ ?@@Y^ { ? Zdq`@7\?^`?`E"$R`VS0R[ O DR`B[ S0Y? ?aT?Y> {:?B[ ?4R`DR`O :0@> {@@> {?$R`?E*YYG\$R`*@@?c?pU?N {dqYN {Y$R`?:> {?7\?B[ IG\:G\IV\^JL^J?B[ ?$R`^ {W\?R[ ?S0Ea gǁYDR`> {?Q ?EO YX2N@S0P@N {4R`L^JfP@dR`@@$R`*?G\?I??I?B[ ?$R`?DR`X2N@?7\?o ?s ?pz ?k@?^ {?N {?> {?@@?W\?P@J]3E?@@N {? ?\^J?[@ R[ 4R`*ZU?G\?G\TR`b[ ^ {:?U?R[ N {[@E? ?$R`4R`X2N@Y?> {?a?P@7\?I?7\> {> {@@L^JB[ JJ?> {?J0@DR`EW\N {?G\?N {?$R`?U?fP@?E`@^ {P@L^J$R`0@> {?B[ ?:EL^JYaTW\P@P@O [@[@TR`^ {Q ?L^J?R[ ?> {Ec0R[ ?R[ ?P@?$R`?@@G\T B[ ? 0@B[ G\ccE?R[ ?b@?^ {?B[ ?4R`?:?> {?P@?IN {fP@hN {?`@?i?k?m3?dR`b[ TR`EY[@4R`?*B[ Q B[ ?0@?@@?:?Q ?b[ ?b@?B[ P@DR`?0@ ??T ?P@:P@G\ ?@@? Q O ?@@?P@::R[ R[ ?0@?I? ?L^J?J?$R`7\4R`$R`JT O YY?7\?O @@`@R[ ?Y?^`?DR`?J?]3?TR`@@\^J\^JN {DR`S0:?N {?@@TR`Y ?7\? B[ dqiX2N@G\B[ :DR`0@ZG\?O 4R`]3L^J*?0@?X2N@?]3?4R`N {::W\W\?_ ?h?L^JR[ ?B[ ??J?G\V_ ?[@?^`?G\??E?L^JfP@c0G\B[ O O Q B[ ?*?S0?TR`?I?O ?T ?0@O *?TR`?S0?I?Q ?R[ ?> { ?0@?$R`@@> {?B[ ?L^JN {\^JDR`:E?*?@@?$R`?O ?V?$R`JO 4R`?:? :$R`O \^J$R`?DR`EVYY?> {?c?]3?U?a?aT?Y?> {T `@S0JI?7\?O ?*?0@?B[ *?7\?`E"?Y?I?:Q TR`?I?T ?*DR`P@> {:S0:?> {IYL^J7\?*?T ?`E"?]3?TR`DR`$R`B[ ?B[ ?X2N@?b[ ?:ZDR`?E?@@?O ?B[ R[ :?`E"?fP@?YQ B[ ? JR[ $R`?B[ ?O ZG\?DR`?$R`?> {?$R`@@?I?4R`DR`? ?TR`?I?0@?P@?Q ?7\?*?@@?*?4R`?> {7\ ?I@@U?$R`?4R`:?B[ ?L^J*?@@> {VTR` ?U?O ?$R`?J?@@Q O > {[@dR`^ {$R`?b@?f?V?b[ ?p?fP@?I?$R`B[ R[ G\?I?X2N@?B[ > {??: ?O ?aT?W\?G\?7\DR`0@?U?L^J@@I0@?4R`? B[ ?*?I:E?*?J?V?O ?G\?4R`*? E?0@?DR`*?:?P@*B[ ?$R`?DR`?P@?> {DR` ?B[ :O EE@@@@?$R`?0@DR`L^J?DR`?:T > {?L^J?4R`:JTR`N {?DR`?*DR`:@@O DR`?*?G\?7\?> {?J?*?:?T ?$R`$R`?V?P@??L^J?0@B[ ?J?E^`a @@0@P@V4R`?T ?G\G\ ?E:N {N {^ {_ I?:?^ {?`E"?S0?c?n`?a ?  ?*?$R`? ?O ?P@4R`E?$R`?$R`$R`?> {?O ?O ?O $R`^ {YDR`P@W\N { ?N {?L^J??J?Y?@@?*?E?R[ ?S0*?@@?G\?B[ 7\U$R`?`@\^J?I?I*?$R`?DR`?:@@ 0@[@\^JDR`:@@J@@?IG\c0I? E$R`?G\?G\?$R`Q W\7\*7\G\O P@B[ 4R`$R`??4R`?I??Y?I? ?Y?\^J?> {?IO ?L^J?B[ a b[ 0@?4R`7\R[ > {?V?R[ S0Y@@4R` L^JE?*??Q ?S0?R[ ?S0?0@@@@@$R`?0@L^JJEG\?@@?0@?@@?> {?O ?]3?0@UUP@DR`?7\?B[ ?DR`?O ?$R`?G\?^ {?@@J0@?*?B[ ?B[ G\V@@??0@B[ ??$R`^`a ??T ?\^J?DR`@@TR`J:B[ $R`? ?*7\W\?E?YN { 4R`7\*?7\?B[ EN {*L^JG\?P@?W\?0@B[ 7\?G\?R[ ?DR`?4R`4R`G\  ?$R`?T ?E:?@@?I4R`IUN {?J?G\G\B[ * ?0@?`E"?`@7\X2N@I:?*?DR`*4R`?7\ $R`?Q ?TR`0@Y\^JUY[@E0@T ]3U0@?I?B[ ?> {?T ?B[ B[ ?DR`?Y?DR`?7\?4R`> {?$R`?\^J?T $R`?:@@4R`?Q ?DR`IB[ $R`P@b@]3L^J?S0?U?I?4R`7\: L^JE?Y?dq?Y?*R[ TR`$R`R[ P@??EIY?*?DR`7\> {*7\ITR`DR`?0@:G\^ {> {?dq?dR`?E?N {?V?J?:@@W\:?DR`?DR`?G\ S0JG\Q DR`7\$R`?B[ ?B[ ?7\?4R`P@_ :?E?B[ ?U?TR`> {@@?I?:4R`4R`P@Q ?4R`?L^J?J?W\?R[ B[ `E"_ P@Q YJ0@N {P@> {?4R`?@@DR`V$R`4R`?I?B[ B[ ?0@?N {> {TR`?7\IX2N@7\N {I$R` ?$R`> {]3ZO :?Q ?Y?$R`B[ ?4R`N {R[ ?O ?U?N {??R[ ?$R`acB[ ? \^JL^J?0@?B[ *B[ B[ G\L^JS0Q > {?*L^Jb@I?T ?7\E0@0@0@*DR`7\0@G\?*?R[ ?7\:L^JT S0UR[ ? ?B[ ?0@?0@?0@?:?0@YfP@G\?L^J?@@?> {? TR`4R`?`E"?\^J$R`W\dR``@?7\?[@?TR`?R[ ?P@R[ S0?B[ ?4R`?$R`> {T 4R`?E?> {EJW\dR`^ {:L^JG\?G\?7\?R[ ?pU?jHL JY?@@?U? YW\ER[ O ??*?*@@G\N {W\B[ ?L^JUL^JS0S0:B[ VR[ ?$R`?J?b[ ?R[ [@d N {?N {> {?:?*G\O IO L^JEO O ?::ZR[ B[ T L^J?4R`$R`O T ZDR`?:??$R`?$R`P@]3W\I$R`B[ G\?:?G\ :$R`IX2N@?T ?P@?Q ?N {@@G\?P@?Z?4R`X2N@ir`c?> {?X2N@?B[ ?I?V?DR`ETR`B[ ?0@?J?L^J@@^ {7\?V?J$R`DR`S0`E"b@O ?:?4R`?S0?$R`?i?u?~`?G\V?0@?TR`?B[ TR`[@:7\> {?0@> {? ?$R`7\R[ ^ {S00@IQ TR`d d > {?R[ T EL^JP@?S0?DR`U_ 0@?P@?7\Q G\L^JYU@@JJ*B[ O @@? ? ? ?J?R[ ? EO TR`? ?TR`?4R`B[ L^JZaZ7\?O ?:G\??E? ? @@[@L^J?7\?4R`?DR`?S0?G\?J?V?:G\> {? $R`UfP@\^J?E?N {? ?P@?^`?Q O YV0@?N {?0@R[ 7\?TR`?Q ?$R`B[ G\$R`?$R`?:?4R`0@?@@?B[ Y?G\?|(?yr`?$R``@R[ 0@TR`Y?:?4R`? Q DR`? B[ N {7\?4R`:T T ]3`E"I4R`$R`0@E4R`?7\?J?> {E@@?V?Z*Z]3TR`[@TR`> {N {$R`4R`0@@@?$R`?T ?V?T ?T ?J?0@? :N {?> {?^ {?J4R`0@:N {R[ ?Y?@@YE?J?@@?0@:[@I?TR`?V?@@*7\?@@?P@?7\$R`B[ P@S0Q ? ?T ?DR`? ?O ?U?L^J?J?0@L^JU@@?I?P@?4R`??$R`@@I??\^J?Y?0@0@EB[ @@b@aT?L^J?N {X2N@^ {UP@7\L^JR[ *O ^`4R`?> {JQ $R`?> {?@@$R`?> {4R`_ [@@@0@B[ > {?*?I?*?E?V?^`?^ {?DR`?I?f?]3UJB[ ?4R`DR`I?4R`@@UE> {*J:?G\?Q ?P@?$R`US0?0@?L^J?E?:?\^J?O ??0@?*?B[ ?]3?> {_ P@?G\?0@ ? *??V?Y? O ?a?zHL ?uF?Q ?4R`?T ?> {I@@?B[ ?U?T ?DR`?DR`?L^J?0@? ?B[ ?4R`0@*?@@?P@?J*P@N {B[ ?:?X2N@?0@TR`:DR`$R`P@Q P@Q @@@@I> {DR`> {$R`\^JfP@B[ ?J7\T DR`?> {?E@@Q ?4R`?B[ T _ E?**?7\?Q ?L^J?4R`???O ?Y?$R`?\^J?UN {?7\?S0?Z7\Q G\T JT UG\R[ T O :? Q b[ I?E?@@?4R`?7\?DR`?I7\W\TR`> {?@@?P@?R[ ?Y?DR`O :?> {> {L^J?$R`?B[ ? ?4R`?U?DR`?DR`?j?ա`?1?i?$R`?^ {?\^J?0@$R`?$R`?*?*?TR`?d ?b[ ?G\ DR`UN {7\N {0@?E?L^J?> {*$R` R[ [@?*?TR`?$R`?:?U?DR`**:JN {JN {T B[ ?G\P@?4R`?G\:N {:?* Y`E"0@?O UT *?@@? 7\?B[ ?X2N@?O 4R`T O > {V^`:?4R`?@@?TR`?Q Q \^JIL^J> {U`E"R[ ETR`a[@DR`VV?E?*[@DR`?P@?I0@[@b[ YDR`?> {?R[ ?G\?@@?*:*@@@@?*?0@IN {?Q ?[@?c0?B`?aj?z?ntH?T ?[@?@@N {^ {]3?i?u?q?_ ?4R`X2N@cR[ $R`G\E4R`7\?*EG\EE?$R`?> {> {> {?*? ?*I_ UB[ ]3Q ?4R`?J> {?4R`?P@?I@@`@c0V> {4R`@@?4R`?S0V0@?TR`?J? B[ G\@@JP@@@??:?B[ > {L^JO TR`4R`?R[ ZI? *YV4R`R[ B[ ?Y$R`hX2N@?> {?*:P@L^J??4R` 0@$R`*N {T P@0@?DR`?L^J?7\B[ N {?@@?Y?`@?} ?=M ?@?`E"?> {?7\?*4R`\^JcT ?V?tq?yr`?n`?T ^ {`@:J ?*S0YE> {7\ 0@*?$R`EV^ {X2N@I*?0@?7\B[ V$R`?V?*W\I@@T E? B[ $R`?W\?a?V*YZ\^J`E"Q ? ?@@?U?X2N@7\Y?DR`> {?T ?L^J?7\?W\?S0B[ J*?*?G\?O ?L^J4R`T N {O TR`G\:*? 0@?4R`?Q 7\0@?\^J?@@X2N@DR`*DR`*B[ G\?@@?N {N {O ?*DR`Z`E"J?O ?U?J?:7\G\*?G\?eF?g\?DR`?7\?Q *S0R[ U:?S0?e?qT?qP!?W\7\B[ T P@?4R` R[ @@0@S0IN {ZJ0@4R`$R`:L^JO O I7\*7\DR`G\?B[ N {Z? aT[@$R`4R`?E?E?: > {4R`JYQ :??TR`?Q JS0?@@?IG\@@?P@?N {?DR`?Z?Q IDR`?$R`?$R`7\?$R`?O ?:$R`B[ X2N@G\?O ?0@R[ DR`?4R`?TR`?V7\?O ?G\?0@?@@7\EQ b[ 7\?c?fP@?:U> {?J?G\$R`TR`O ?DR`?P@?:?7\$R`Y\^J?U:cDR`?S0S0S0> {?U?b[ ?\^J?a?`E"?*:?4R`?:?E?T ?> {Q UL^J:?B[ ?IP@d aTUL^JB[ $R`?*?G\?N {?4R`G\T YX2N@Q P@R[ Ud b[ ?E?P@T L^J?DR` EG\VT > {? ?*7\@@ EJ?I?P@L^JV??TR`?G\? ?4R`?> {?> {?DR` G\?0@?@@7\b[ a :?> {?L^J?4R`R[ ?eF?X2N@S0L^J?> {?@@*J> {0@?$R`?E$R`?N {?$R`E?Y?w\?{@?eX2N@T ?@@?P@?I?*? ?E?*JE0@P@Y?S0IhW\?L^J?E@@N { ?S0?I? ?TR`?^`?G\?G\?W\?]3?^`?L^JL^JYG\?0@?> {P@]3_ TR` IN {4R`?@@?E$R`O Q B[ > {O JY]3?> {?T *? ?DR`DR`I ER[ E @@?L^J4R`O ?I?U:[@L^J?N {?Y?7\*?:?@@7\?0@?U?@@Q L^Jd dqO *?> {?7\O 0@?aT?ZDR`*?O TR`DR`?7\E?I??S0?g\?p?uQ`?} ?~ {?ir`JDR`?0@7\> {?4R`?I?B[ :W\VG\B[ G\?$R`?P@:b[ T ?@@?7\G\B[ ?J?G\O :?b@?h2N@?O G\B[ ?E?V?P@?S0W\??Q TR`G\ ?7\?TR`?0@TR`O @@N {7\?:?4R`? ?@@?O ?0@*?I?:P@@@?7\$R`> {T ?Y?S0?:7\ ?0@?DR`@@L^J?E?S0 VW\??I> {@@?E?:4R` ?P@?[@?*ZN {UL^J> {P@E? > {E?E?I7\?JI?B[ ?U?0@4R`?DR`?U?7\Q :?g\?uQ`?tR`?r?q?a ?E?N {? YV?@@? 7\> {O YU@@?B[ ?R[ ?0@DR`0@ O \^J$R`?a?Q V?j?k@?L^JUY?4R`?S0?4R`7\L^JG\?G\?Y?0@I0@?*??L^J?T > {$R`?q@?v?UL^J?0@?4R`IDR`?$R`0@DR`?I?P@O V* @@P@O ?:?R[ ?:?$R`7\??E?> {4R`S0DR`?J?Q ?0@Q ]3B[ ?*@@?P@?:?4R`?G\?R[ P@L^JL^J$R`0@US0?*?G\??$R`?@@ > {:O I?B[ ?DR`> {:?:?O ?> {Q W\?E?a?V?S0?Y?V?S0?> {O S0? ?E?$R`0@?0@?I:a `@E?:?@@ ?*4R`X2N@^`7\?[@?P@B[ ?L^J?h?d ?IP@TR`?J?]3?E?0@?> {?*?:?DR`?4R`?*O Y? ?N {L^J?V???vQ?*?:YV:L^JV?G\L^JU ? EN {0@?*N {^ {4R`?DR` ?J?I*J? ?Q ?Q ?B[ Q dR`L^J?L^J?DR`?E?J?0@?DR`?G\$R`I$R`N {TR`B[ :P@S0?P@?J?> {?J?4R`JTR`S0P@G\Q W\L^J: ?B[ ?DR`?4R`?@@?$R`$R`?B[ ?O ?:TR`^`*?TR`?7\DR`*?DR`?@@R[ c0]3J> {ITR`E?0@?4R`EO $R`?@@?J?^ {?`E"?P@?0@IS0?> {?S0?$R`?$R`?G\?> {@@> {?4R`?0@W\b@?Z4R`?J?ʢ`? ?sf?DR`?I?0@B[ $R`?L^J\^JL^JL^JI?*P@L^JZ^`?0@?S0*E?> {?Q ?> {$R`? ?4R`?4R`?:N {dR`J?V?R[ ?4R` ?I?I4R`TR`]3G\O :0@Q O ?$R`?@@?0@?DR`?0@O J? $R`TR`^ {X2N@DR`:> {?0@?T ?\^J?\^J?U?W\?Y?:L^JJG\> {?> {ZTR`?@@?Q 4R`a aE4R`JR[ W\O ?B[ ?I?> {B[ DR`?DR`?]3?a ?Q $R`0@7\DR`$R`> {T O 7\?> {?*4R` O ]3 ?Y*S0?Y?cJ*7\$R`?$R`G\VZW\S0?J?**?$R`?0@$R`N {:?R[ ?ER[ TR`$R`?*$R`IE4R`4R`@@X2N@@@?G\DR`0@ *P@U 4R`4R`?*?B[ ?7\@@S0DR`  ?@@?DR`B[ @@?E?@@B[ Q DR`?*?E?@@@@ ?O ?d ?k@?b[ ?G\?*?T ?X2N@?DR`S0a:?Y?Y? TR`J?DR`?N {?$R`4R`N {T R[ TR`I?*?@@?@@?N {?T ?T ?B[ 7\7\?7\?E?*N {VN {J> {?N {?Y?DR`:G\JR[ EIYT ]3c0[@TR`L^J*G\L^J?4R`?7\O [@L^J?N {?Z?R[ ?X2N@?`E"?T ?B[ ? ?Q ZR[ IW\\^JX2N@B[ ?> {?7\4R`B[ *$R`T U? W\\^J@@@@ 0@::?$R`?B[ ?E?::L^JDR`*?I?Y?@@DR`7\??4R`?7\?7\?P@?^ {?L^JN {`E"aTE?d ?oI?a ?I?G\?N {?N {?DR`:7\?4R`?E?* ? ?*?I?TR`?L^JL^JV]3d b@:?P@?R[ ?J?> {?@@?> {4R`I?L^J?E*0@?0@G\?N {?7\IO 4R`? $R`0@ @@G\EDR`?@@?P@:> {?Y?^ {?$R`J*?R[ ?S0?B[ ?S0?Z?P@?*I@@?I? S0B[ Ja \^JI0@?> {?> {$R`7\*? UX2N@ 0@b@dR`IE$R`EE@@?$R`?> {?DR`?Q ?4R`G\@@ ?*?R[ ?O ET $R`?Q ?Q ?:?L^J?^ {?P@B[ W\aN {?b[ ?i?W\?Q ?P@$R`S0X2N@L^J?0@?*$R`?$R`DR`U:L^JG\4R`DR`IG\G\?> {?R[ ?O ?R[ ?S0?J?*JW\G\?7\?G\?4R`?7\?7\0@> {4R`EP@> {?> {?N {?O ?O ?N {?I?7\?$R`?7\ ?T ?]3?> {?*?Q ?N {?*0@0@?0@N {G\L^JO :O S0?4R`?Q 7\:U*?@@JW\E$R`*0@?0@?B[ > {Q $R` P@DR`?4R`JUO 4R`?$R`?L^J?B[ ? ?DR`?:*?B[ ?I:7\?$R`DR`P@?*?R[ ?7\E*?N {?E$R`I[@L^J?]3?aT?J?DR`? P@O R[ I?$R`*?a?} ?wǁ?$R`Q > {`E"f^ {P@?V?\^J?S0?R[ ?W\?P@?I?]3?c?W\$R`VTR`?$R`?TR`?S0?*L^JI?0@?I?G\?7\B[ O *?*4R`?0@?J?7\JTR`> {4R`DR`?DR`?L^J?I4R`?:?*DR`4R`0@DR`@@X2N@b[ Q N {X2N@@@G\]3IB[ ?> {?P@O a L^J?4R`?7\?*?O ?:> { ?@@?J?]3?\^JB[ ^ {Q ? ?@@?L^J?$R`JB[ 7\7\?Q ?\^J?0@0@?0@$R`:?7\?::N {> {?0@?> {? J`E"TR`?T ?^`?N {?4R`E7\?R[ ?@@$R`?4R`?B[ ?z?X@??rS`$R`?B[ Ic0^ {E?E?U?E*0@0@??T ?`E"?VX2N@G\?W\?a ?O B[ YS0?DR`?S0?W\?*I@@B[ U]3V?:O c0X2N@$R`:O *?R[ ?L^JDR`:?S0?B[ P@L^J*?7\?V?B[ P@E0@JEP@^`Q 0@G\0@?@@:?*?> {*?E?W\?N {4R`?$R`?N {?[@?S0IYQ ::0@DR`T TR`S0P@?0@?T ?Q ?U?Z?G\ $R`DR`DR`?*?@@?7\?7\?4R`7\Q :?W\?^`?O J?$R`?W\0@R[ ?> {?\^J??n ?@?w?> {?Y?EQ VDR`?DR`?DR`P@aTb@`E"U@@? ?B[ ?N {?0@S0J?O ?O B[ UDR`?:?4R`E*?L^J?4R`B[ > {* 0@I ?Q 4R`fP@^`?B[ ?G\0@?*?N {$R`V@@?I$R`[@YL^J ?Y?^ {?:? ?G\?> {?*L^JP@L^JS0R[ 4R`?@@?R[ ?P@? B[ ? ?Q ?U?I0@J> {??$R`> {VT Q X2N@R[ EEG\JS0J?$R`?4R`?S0?Y?IL^JX2N@L^J?E?O ?4R`??$R`?7\?DR`?O ?[@?Z?4R`EE?ceF?@@?f?{}?X@? ?aT??T ?J:US0?*?7\R[ \^JTR`G\0@$R`$R`?*?E:?*DR`ZI?S0?c0?R[ Q P@?$R`?$R`??4R`?0@?P@?^`?S0?J?TR`:fP@Y?R[ ?N {$R`?> {?7\S0V7\*L^JT L^J4R`*?7\?P@?4R` ?P@?W\?DR`?:?4R`@@R[ S0US0? ?Y?\^J?@@4R`?$R`?@@?0@ B[ Q B[ 4R`P@VQ S0b[ I?$R`$R`:P@ ?JJ4R`?4R`?7\EUP@? *?4R`?R[ ?N {?J?I*DR`? ? L^Ja]3?U?u|??~`?jHL @@*?E?DR`?:> {S0:7\UI?N {?[@?S0?B[ ?@@?7\$R`> {?G\?7\N {P@??TR`?Z?J7\0@?$R`?4R`?S0?TR`7\@@?P@?X2N@?R[ ?N {0@T ?*?Y*V? ?$R`L^J?7\B[ G\$R`?:?S0?L^J? ?$R`7\N {?@@?X2N@?4R`??O ?E$R`G\[@b[ R[ ?N {?_ ?P@? ?*? 4R`Q I 0@B[ > {G\^`4R`?7\4R`$R`P@?P@? J@@?$R`?L^J?P@?@@0@EQ E$R`?0@?N {?$R`B[ 7\> {?I*L^J ?0@?\^J?zHL ?? ?fQ N {$R`?4R`?TR`?N {7\ITR`^`N {?V?b@?P@?*?R[ ?Y?@@ ?@@?JB[ ?$R`L^JUJ$R`? 0@?Z?X2N@TR`d R[ ?4R`?B[ ?> {?:?O ?a ?X2N@YdR`4R`?*@@$R`S0I::?@@?DR` J\^J$R`?N {7\N {?0@?S0?O 4R`aThaT> {?7\0@G\??J?Q ?U?E@@Q I?I?@@?> {?P@? > {TR` ?> {@@7\? ::?4R`?T ?`E"?\^J?Q ?0@G\YX2N@@@? ?:?J? L^JI:?0@?EER[ ?4R`?> {?0@?jHL ?{}?y=M ?Z_ `@Q @@?> {?P@?0@0@@@Q E?Q ?[@?7\?W\?^ {?P@?L^J?I? 0@?*?N {?0@YcT ?  R[ DR`?S0?O TR`b@U*$R`@@??Z?a ?:aTc00@?$R`DR`EO Q *B[ YTR`L^J> {?L^J`E"G\?$R`J[@U ?L^J? X2N@^`UEL^J\^JTR`?4R`?N {?P@?W\?X2N@?O N { ?W\?T ?J?fP@?b[ ?EG\X2N@0@?B[ $R`7\:E0@0@DR`?0@?Y?Z?G\*:ES0DR`? *4R`$R`$R`??7\?@@*L^JL^JQ R[ DR`4R`4R`Q aTZ@@II? ?0@?L^J?: ?L^J?X2N@?J?Q ?Y?4R`7\?> {?B[ ?0@?P@?W\?Q ?P@?DR`?$R`?P@?$R`T E?L^J?@@DR`E?B[ W\X2N@?B[ DR`^ {U> {?0@?N {?]3?R[ JQ $R`?B[ G\ZJ7\7\E\^JX2N@? ?:?$R`?DR`?TR`?W\?*VE?I?4R`0@?0@?U?c0?Z4R`?X2N@?V?DR`?a@??N G]`Ej? ?k@?eG?Qՠ?R[r?f`?u||?q<?TG`?YU?eG?Z?^ߜ?l^ǀ?is$?a`?_9`?Y ?S1?YU?S1B[r^ߜ`9 ^ TL^ǀG]? ?> $DO9`O9`4ER[r*Eb[rZDN TTG`4?L^ǀDg]b@@UYUN ?4?:G]S1?B[r> P9 > ?D?W]?EIUUX2@G]? IUY `Ejk\i N ?$?@9 ?V`?\^ǀ?Qՠ@9 T:aՠN ?E? Db@@a`?U?7]a`a`? $S17]09 :?> 7]Z@9 ?D?:IUG]?09 ?P9 ?G]?09 [+ k@d*?$:??dqy@?U?TG`N ?J?nߜ?iU?Y ?T?`9 ?r[r?v`?qPn?q`?sfu?k+ ?]4d?\^ǀ?[+ ?TG`?^ ?a`?IU?:?[+ ?O9`[+ f`X2@J\^ǀ^ > *E?$?B[r7]N W]S1?*B[ris$is$^ \^ǀV`IU09 ?$QՠeGW]?* D$? :O9`L^ǀIUG]@9 B[r09 ?IU?@9 P9 Y YUV`JG]U^ߜb@@X2@?*?D09 ?R[r?@9 c1h2@EEY ?$?Qՠ?E?R[r7]4?TG`?N L^ǀY $?T?B[r09 7]?:O9``9 *?\^ǀ?U @9 ?7]?4?:?: UdW]?B[r?B[r@9 ?g]?R[r?g]?W]O9`?IU?fN?[+ ?J?S1?]4d?p?|ɕ??wR ?r[r?fN?:4?:?B[r?N ?X2@?*D?T?]4dB[r\^ǀ> *Zb[r[+ ^ߜ]4d?B[rB[rY b@@_9`??@9 V`^ߜQՠE?4?J7]X2@af U?@9 ?4G]D?09 *W]^ N 09 L^ǀT7]?$DS1P9 QՠTR[rX2@_9`TG`?:?@9 ?> ?G]?[+ ?Z 09 ?> O9`[+ ?B[r?R[r4?09 ?O9`*B[r4B[r?@9 ?^ ?aՠ?V`?B[r?4?> ?IU?*P9 W]?Y ?TG`B[rJ?09 > ?E?R[r?O9`[+ R[r *N ?y?|ɕ?r`@9 `9 $?> > ?TG`?^ߜ?k@?|)``?9`?r ?a`?Y ?@9 ??E? ?S1?J09 ?D?Y ?7]O9`N EL^ǀT\^ǀa`ZIUIUQՠQՠ[+ ^ߜ ?U?> *??7]?Qՠ?TG`$W]]4ddG`c1QՠQՠY TG]4> Z\^ǀ7]?:O9`P9 09 ? IUR[rG]O9`TW]^ߜTG`47]?L^ǀ?`Ej?c1?`Ej?YU?a?\^ǀTG`dG`:?09 P9 TG`JR[rTG`P9 @9 ?> ?U?U?TG`?YU?N ?4?IU?**EP9 ? ?EJL^ǀ?D?4?S1?W]L^ǀR[rN 4@9 Qՠ?tΠ?l?@?\^ǀS1> EJ$?D?O9`?`Ej?r ?u?fN?U?`Ej?c1?b@@?YU@9 S1?7]?J$4?09 W]b@@`9 L^ǀ*B[rE:N Y IU?:R[r:?L^ǀ?:4*@9 *44 O9`W]DL^ǀZX2@Y YUT]4dY *? ?$?09 IUD?7]P9 b[rUO9`QՠG]UYU4*O9`7]?IU?L^ǀ$D?B[r?EW]`Ej?DD]4dW]?D?@9 ?09 ?09 IUP9 ? ?4L^ǀS1E09 ?> ? TG`D?:L^ǀTG`:N ? ?*7]*??*?:?*4? ?#??w'4G]??S1?D??J?`9 ?eG?^ߜ?X2@?\^ǀ?a`?d?TG`O9`]4dTN O9`L^ǀL^ǀR[rYUaՠf aՠE?$?$G]T? ?R[r? Y W]4> O9`> IU_9`^ R[r7]?> ?4?7]?W]?N @9 EO9`TO9`^ _9`7]?09 ?O9`09 O9` V`f`YUG]B[r Qՠ\^ǀ?P9 ? JJP9 `Eja`N N ]4dG]?U?\^ǀ?4X2@V`?E?b@@?c1?P9 DP9 P9 ^ߜTG`?44[+ ZJ?*?G]? ? ?*N UEL^ǀUTV`S1 ?L^ǀ?L^ǀ?09 ???ܝ ?R@?qՠY V`?Qՠ?c?L^ǀ ?> ?D?IU?L^ǀ?B[r?$> :?4 L^ǀN W]^ߜL^ǀ?4?$JP9 L^ǀaՠh2@W]7]B[r7]DG]?E?P9 N dqy@b[rUV`W]@9 :YU[+ X2@TG`4 ?U?S1 ??$*:^ߜa ?7]*?7]4YUTY ]4d> ?4X2@W]?@9 ?YU?O9`?$B[rUW] ?JO9`c09 ?`Ej?aՠ?O9`JYUB[r?G]?^ߜ?W]D:?O9`09 IU?V`?TIUR[rO9`O9`?G]?$4?@9 ?@9 ?7]?B[rUa`V`??E*G]?Ml?<?C?P9 V`IU?P9 ?Qՠ$?09 ?> 4?*?D:TUN DL^ǀ7]?D? B[r?> ?a?a` S17]O9`_9`O9`P9 \^ǀJJR[r?IU?UN `9 Y Y aՠb[rTG`DG]@9 EQՠ> B[rT:*IU?7]D_9`a ?4O9`D4V``9 [+ D?4?$09 O9`Y :?G]?$?09 E4?]4d?dG`4a*?V`?Qՠ?D:DP9 ?$?T ?09 ?c1?U?*?Z?TG`@9 7]D`EjYU4EE?R[r?_9`?J?L^ǀ?b@@?`9 09 b@@cG]?B[r?4?pz?u||?h?W]?IU?@9 ?G]4B[r?E> _9`?*?X2@:T?IU?*D09 ?> ?4?09 ?T?f ?f`^ > ? 7]4]4ddDN _9`?> ?X2@ER[rDU`Ejaa`YUIU? ?$4*:UUUV`?> *G]W]\^ǀ@9 $QՠG]?$4[+ \^ǀ4?G]O9`QՠP9 ?@9 ?:?O9`?IU? ?*?7]?O9`?V`$S1$4V`V`IU?D?TG`:R[r$B[r?[+ ?TG`?4?L^ǀ?*G]? ?09 R[rY D?4?Qՠ?DQՠN ?TG`?^ ?$W]\^ǀJ$?D?7]?lɕ?m2@?h2@?b[r?R[r?G]?B[r:?TG`B[r^ ?IU?]4d$4?P9 ?R[r? G]P9 W]X2@> ?IU?^ ?[+ P9 c:?> $B[radG`ETG`c1$?7]V`R[rDW]QՠIUV`W]QՠG]:DJO9`W]^ߜ`9 U?7]?T?B[r :D47]D4T`EjE?$G]R[rN QՠO9`?IU?vN?<?t?J?S1?O9`DL^ǀJG]> W]aՠ`Ej^ $?YU]4d[+ ZO9`?4?* ?4??E?TG`?@9 E ?^ ?^ߜ?> > UV`?G]?7]> B[rR[rV`:?f ?g]?a?P9 ?@9 ?P9 ?B[rJ?U?:09 ?@9 ?09 $?J?R[rL^ǀR[r\^ǀedqy@Qՠ? ?IUf jIU? DEX2@aՠZaՠb@@JP9 [+ 09 X2@P9 09 > 7]J]4dX2@L^ǀTG`\^ǀa`f`eQՠ?> ?S1?P9 ?09 4447]7]W]`EjR[rX2@eYU?*$TG`YU\^ǀaՠ?P9 ???9 ?J?E?> \^ǀc`EjU> 09 ?7]?D> > ? IUR[rL^ǀW]UEL^ǀE ? ?*?B[r?T?JTG`P9 ?_9`?^ߜ09 ?$?P9 ?$??D?4?09 ?$DO9`@9 ?L^ǀ?G]?4?$?YU?dqy@?ES14?S1?S1?@9 DX2@?V`?G]09 $> X2@_9`V`E4L^ǀjm2@U4> D`EjfNfN[+ L^ǀY G]?aՠ?f ?B[rN TB[r?> YUQՠ?$$S1a`i f IU?D?4L^ǀTG`W][+ X2@`Ejc1TQՠcb[rJJb[rf`_9`]4d?:?9`?w`?v @9 IUP9 b[rf`fNY ?> ?W]?Z?B[r?B[r? P9 ?> ?[+ S1N TQՠG]EB[r> ?4?4aՠd?B[r?> X2@? ?Y ?$$?G]?B[r?N ?a`?YU$D?^ ?G]$ ?Y ?aՠ?44?O9`?W]?Qՠ?D@9 L^ǀ?> ?E:?O9`?S1P9 * 7]09 E^ߜaS109 *O9``9 f _9`47]YU4?k+ ?w?r[r?L^ǀV`J?09 L^ǀ@9 ?@9 ?J? W]iUdG`$?09 4?G]?S14X2@^ߜb[r^ߜUJ G]X2@]4d]4dei Y :$?aՠ?n ?Y 4Qՠ`Ej_9`a`b@@B[r?$?09 ?jH`?p@?Qՠ?L^ǀ?P9 D?L^ǀ?dG`?7]QՠB[rIUN IUL^ǀR[rW]B[r?4R[r[+ ?4^ N QՠE?D?J?B[r?*? ?G]?N > ?e?W]?:?$E?> ?YU?@9 ?L^ǀ?R[r?S1?R[rO9`$R[rY N 4? ?*@9 @9 > L^ǀD09 Qՠ[+ UP9 *?G]ZR[r?[+ ?uG?vN?a> DL^ǀUV`\^ǀT?> ?S1@9 f`aՠ?D?U?09 ?L^ǀ?\^ǀ?B[rIUR[rR[rR[rB[r?*?*?$?J?09 UV`V`b@@X2@? ?09 ?@9 ?R[r?X2@?R[rP9 c1TS1N ?O9`?E?q`??_s?K ?W]?QՠG]> ?P9 *L^ǀ*D47]L^ǀ\^ǀW]@9 ?09 ?4G]E7]B[r? ?L^ǀ?P9 ?T?G]N ^ߜUB[r09 ?E?N ?[+ ?\^ǀ?JB[rL^ǀ?> ?B[rS1R[r?IU?[+ ?U?E? ?*YUb[rTG`JS17]?L^ǀ?4O9`E09 TG`YUQՠ\^ǀY ?4?09 ?7]D[+ Y B[r?X2@?c?L^ǀ$B[r^ߜaX2@deG?$?`Ej?7][+ T?J?S1?E?09 JL^ǀ*7]7]?**B[r?IU?G]P9 J*W][+ > ?> ?T?W]?U?4b[re@9 > ??\^ǀ?R[r?0`?G?➠?D?n ?G]IUX2@09 409 ?@9 E $G]V`\^ǀIUEP9 :? ?09 ?@9 ?D?@9 ?@9 ?D?P9 ?Qՠ*]4dX2@$? *?Qՠ?h2@?oJk ?g]?N ?4?V`?S1IUS1??> $@9 ?$?V`?R[r09 09 ?> :]4dL^ǀ?N ?B[rO9`QՠN ]4d\^ǀT^ U?4?E> JTG`QՠS1R[rEDB[rR[rb@@W]?09 E]4d?V`?*IU4G]TP9 $?4> O9`$? ?4? > ?09 *[+ Qՠ:TG`T@9 ?7]$L^ǀUeGaՠ ?*?V`?B[r???as?e ?q`?EG]?$EZR[r 4EDQՠG]?409 [+ Qՠ?$?> ?D?@9 :G]09 ?09 ?R[r?O9`47]?7]?Z?a`?b[r?dG`?b[r?Qՠ?L^ǀ?e?k\?S1G]D09 > B[r?O9`?b@@?jH`?jH`?^ 09 TG`> ?B[r?@9 7]T\^ǀIU*US1?> YUE*O9`TR[rP9 > IUa`eGL^ǀ?W]?R[rEN DR[rJ O9`a`Y G]?:?_9`?W]* ?:??*$? DTG`44O9`? ?G]? @9 YUY :JTG`*:D?B[r?D?r`?@?w`?➠?[+ ?7]?@9 ?B[r?@9 ? 7]YUdG`Z4:G]DL^ǀ4?Qՠ?EIU?O9`?:?09 ?*L^ǀUIU??V`?S1*?09 D?g?^ߜ?*??G]?$?[+ ?jH`?[+ B[rL^ǀ*?09 ?09 09 ?*?g?u?q`?TG`:?D?$?J?EP9 X2@?*?Qՠ*IU E[+ E?7]G]_9`X2@4?D?B[rL^ǀb[rb@@U??@9 IUY V`YUL^ǀ?*B[rZL^ǀ$?IU?e?a`09 @9 ?7]?:? G]TIUD? ?R[r?$E?O9`?]4d?E*N 7]?TG`?EQՠO9`L^ǀYU7]?]4d?e?i ?is$?YU? > ? ?N ?*D> L^ǀY UB[r4EUW]4?IU? > ?R[r?\^ǀ?7]?09 N P9 ?YU?L^ǀ:?4?@9 P9 ?dqy@?R[r09 ?:?YU?> R[r:?TG`?TG`?7]4$B[r?dG`?pz?b[r B[r?4?J@9 ?J?P9 DO9`?B[r?V`?B[r:EP9 ^ߜV`?*?R[rS109 ?7]? L^ǀR[rG]R[rTG`L^ǀS1Qՠ4G]G]?7]O9`D7]?$?V`?09 _9`\^ǀ*?L^ǀ?Qՠ> b[rb[rTG`?:R[rYU?> ?TG`?: ?:?YU?O9`@9 > S1X2@?L^ǀ?e?V`?4?L^ǀ?09 R[r> ?09 IUN ??@9 ?**09 ?7]? TG`T?09 ?4S1L^ǀ?T?R[rP9 V`*?$B[rY O9`?G]?B[r?TG`?O9`O9`?g?`9 ?T?`9 ?e?QՠE@9 ?> ?R[r?Y ?P9 7]G]@9 S1N ?L^ǀ?TG` G]L^ǀE? 7]?*?4D7]?@9 ?IU?B[r:YUZ_9`b[rE?O9`?D4IUG]DJ> DUV`Y O9`? @9 O9`$> R[rJD ?B[rJdqy@b[rU?*?[+ ?DZb@@X2@G]V`gc1*?:?@9 ?R[r?V`?L^ǀ?09 ?09 ?IU?4W]`Ej7]?R[r?^ߜ?X2@4P9 B[rX2@> ?> ?09 ?*4?B[r?:N D?IU?09 P9 *?QՠZV`@9 :YU[+ $?> ?7]?O9`?@9 @9 ?t< ?r@@?fN?b@@?a?IU?*?L^ǀ?E?4?J?D ?09 ?@9 B[rP9 DO9`TEL^ǀT09 ?09 7]DQՠY IU ?09 W]TR[rc`Ej?> IU^ Y IUIUTR[rO9`L^ǀQՠ^ߜY @9 B[rIUDP9 QՠG]O9`7]?D?JX2@b[rY ?$?> 4IU4?*E]4dN ?4?@9 ?D?J?Qՠ?U?D09 :@9 ?R[r?*c1gG]?Qՠ?X2@> ?EG]TG`?UX2@TG`QՠDO9`\^ǀTG`:B[r> ?D?EEJ?*?**@9 N ?L^ǀ?7]:> ?z?y ?h?^ ?[+ ?$??U?B[rD> :?R[r?_9`?`Ej?]4d?@9 V`\^ǀB[r09 > P9 X2@TG`Zd]4dJE IU$?*[+ g]4dS1`Ejf `9 G]DYU[+ J 09 TG`X2@B[r? ES1B[rD]4dYU?$?N ?7]L^ǀ^ߜ]4dTB[r? ? ?S1?P9 ?7]?N ?IU?> ?U?W]?B[r?N _9`[+ Y V`?7]?Y ?$]4dT?B[rS1?N *B[r09 R[rZTL^ǀDO9`_9`a^ ^ YU@9 ?$:N ??S1?G]?$?**?Qՠ?B[rR[rT09 ?w'?uK?aՠ?Y ?]4d> ?G]?409 $D> ?7]?YU?q`?y=?p9 ]4dB[r?TG`?J]4dk@dG`N EYUZQՠL^ǀJN P9 ?EJaՠ\^ǀTG`[+ b@@aS1ER[rP9 09 ?*?@9 QՠE? $TG`Y IUJ_9`]4d*?L^ǀ?09 QՠG]?*@9 O9`09 JQՠ? 4?7]09 J?J?W]?G]U`Ej^ \^ǀ^ E?W]?^ :W]?:?Qՠ? ?D?7]Qՠ[+ 4?B[r?D?S1?DIUO9`N YUR[r4IUYUN ??$$? ?4? L^ǀR[r?7]?O9`B[rTS1?fN?i ?Y ?Z?Y ? ??D$$?@9 > > *?k@?~tΠ?x?V`TG`*?`9 ?N g]oJk [+ *$ER[rW]]4d`Ej\^ǀG]B[rB[r?EX2@aՠ^ߜX2@[+ ZTG`US1N TW]QՠR[r^ߜ`9 X2@QՠO9`J?N ?7]R[r?Z?09 QՠB[rIUR[rR[rc1dIUP9 [+ ?$?Z?G]4JV``9 aZ@9 ?Qՠ?\^ǀ4\^ǀ?P9 ?$?4?B[r:IU?E?IU?09 ?R[r?P9  *N > QՠZ@9 U[+ 7]?*7]W]_9`:?S1?B[r$Qՠ?D?a`?b[r?a?W]?N ?^ߜ?V`DG]:J$U?IU?r& ?q?[+ ?E?a`?E`9 W]?> B[r:X2@acc1^ߜTG`N J ?B[r N QՠUX2@[+ b@@eGeh2@dG`TO9`ZY R[rR[rV`X2@R[r@9 G]J?:?B[rG]?Y ?09 TG`B[r?4?09 R[rjH`dqy@?*?:B[r?7]?Y ?N G]^ a`b@@aL^ǀ?:?N ?J4B[r?J?G]:7]> D?B[r?Qՠ?D?@9 09 R[rL^ǀL^ǀIU:TE B[rN ?7]Tb[rR[r:EL^ǀS1B[r?G]?Qՠ?O9`?4?09 ?Z?f ?h2@?`9 ?]4d?g]?^ߜ$* E?$?@9 IU09 ?YU?^ ?X2@?Y ?Z?W]?4:?@9 ?R[rG]> ?7]X2@a`_9`TG]IUG]EUT??E JTUYU`9 Z09 QՠT@9 :L^ǀQՠW]ZJ7]G]? ?W]?DO9`D?E?@9 X2@g]P9 ?]4d?aՠ?O9`?B[r?N ?IUN eaՠJ*?09 ?> EJ?E?b[r?O9`G]09 > TG` ?Qՠ?> *> L^ǀY [+ $?JE^ J?B[r?IU??4?T?09 UR[rEG]$@9 ?$?D?@9 ?7]?@9 ?D?Z?h2@?g?c?eG?]4d?4?*?$:?$?L^ǀ?:?@9 ?O9`?L^ǀ?V`?d?`Ej?7]7]4? ?4 ?W]?r& ?q<?QՠW]]4dN *EUUR[r?]4d?]4dE?> ? :09 ?7]?JR[rIU:?7]?N 09 Y TJYU[+ N ?N ?L^ǀB[rUDG]]4dX2@?7]?]4d?^ߜ?N *?$?X2@?IUR[rL^ǀ?E?L^ǀ? :B[rR[rW]?W]?$X2@J09 E09 ?$09 > ??*B[r7]?X2@?V`X2@f IU?V`?^ ?B[r?T?TG`* @9 *$:?@9 ?G]ER[r?E? ?7]?_9`?g?iU?h?^ߜR[rP9 IU?IU?B[r??09 ?> ?R[r?b[r?_9` N :S1Y ??E4?`9 ?zH`?zH`?dqy@09 IU> @9 TG`YUL^ǀ ?L^ǀ?Z?> [+ [+ ?*:B[r:7]:G]L^ǀR[rYU4?W]?*^ߜIU?*UYU? ?@9 Dc1b@@\^ǀG]?N ?U?D?B[r? R[r:?X2@?U$E7]ETG`L^ǀ?*?4DJG]\^ǀf`a`D?*? ?4?B[r?> ?B[r?@9 ?:?N ?> W]`9 E?IU?L^ǀ:P9 ?09 > ? ?> > O9`G]*?O9`?L^ǀL^ǀU?> ?7]??:?Y ?jH`?pz?dG`4Y IU ?$?DX2@X2@$?J?_9`?b@@?EEDO9`N ? 7]U?> ?h2@?f`?TG`?B[r?09 09 R[r\^ǀW]L^ǀD*S1d\^ǀ> L^ǀX2@O9`O9`TG`J4*@9 [+ U?G]?$`9 T$W]D?W]?::?B[r7]eGhb[r ?a?TE ?4D7]G]P9 L^ǀW]^ V`> ?4?@9 ?:R[ra`aՠ\^ǀG]?$:IU?IU?Y ?B[r?IU?YUV`?7]?g]?eG?DB[rP9 YUYUO9`TZB[r?:7]TG`L^ǀ? :E?*D? ?@9 ?`Ej?lɕ?dqy@?> ?B[r?_9`?W]?4?7]TG`^ @9 ?@9 ?X2@?c1?U7]IU$?B[r?09 N J O9`YU?@9 $EJN P9 ]4dc1W]7]IUUIUDYUW]> L^ǀW]G]4 ?7]IUZ ?^ [+ L^ǀW]*?X2@?$:?N ?09 X2@b[rdG`IU?]4d?L^ǀJ?:?V`?D?> > \^ǀJ?7]7]N ::V`YU?R[r?$@9 ?$?7]?$V``Ej ?S1?$?> ?[+ B[rf ?_9`?9 ?}i ?`9 EQՠO9`> 7]TG`^ N ?@9 ?@9 @9 4?4B[r[+ IU?O9`U@9 ?09 ? 4??TG`?YU?Qՠ?^ߜ?f`?R[rP9 4?TG`?@9 G]IU> ?$?O9`?B[r> G]?$?R[r?@9 *?T?Y TG`b[r09 > _9`U$Da`eGN ?E?:$*O9``EjU7]N S17]B[rD?> ?IU?4?7]Z_9`N D?> ?V`G]?$?7]L^ǀa`G]?a?`Ej?D?V`?Y ?@9 ?@9 ?7]@9 ?IU?: IUb@@f O9`?G]?7]?> ?J?> ?*@9 S1 ?Qՠ J?$J`9 ?d?~5?v ?R[r?D?G]?09 ?G]?L^ǀ O9`N ?@9 ?U? 7]?IU?B[r@9 > ?? ?09 ?L^ǀ?T?4IU?S1?U?P9 ?N *Y N ?IU?J4S1W]QՠB[r@9 > $? ?> ?4??X2@?ZJ\^ǀB[rX2@f`W]*:@9 IUN ?N ?G]?7]?$L^ǀ`Ej[+ R[rTB[r?09 > L^ǀ ??E?`9 ?O9`\^ǀcT? ?^ ?f`?TG`DL^ǀ? ?> DW]?7]?fN?dG`?T?Qՠ?@9 G]B[r?409 W]T4?? 7]TG`^ߜX2@IUIUTG`V`E?$?G]?P9 ?L^ǀ?T?a`?N TG`P9 *4?W]?dG`? @9 ?_9`?\^ǀ ?:?R[r?G]$L^ǀ??T*U?S1?J09 Qՠ?]4d?\^ǀ?S1?R[r?> IU*?V`?W]?D?D?7]@9 L^ǀB[r@9 B[r@9 N O9`B[r> ?44JB[rIUN L^ǀZZ@9 JY P9 JR[r?L^ǀ?09 7]$?09 ?E?G]> ^ _9`X2@L^ǀ?09 ?E*@9 > 4?[+ ?k+ ?W]T^ߜY 7]?^ ?h2@?[+ B[rU$[+ T?G]?U?P9 ?D@9 O9`O9`7]N eeGN ?$?: O9`YUYUTYU^ߜD?IU?J?IU?J?L^ǀ?^ߜ?_9`?*?Qՠ?N ?J?$Z> ?a`?DZL^ǀ??$? 7]?*?O9`7]YUIU? ? N Y ?X2@?`Ej?@9 > 09 ?D?N ?V`?b[r?^ ?47]B[rO9`:?D?09 > ?4?4?*Qՠa`V`Ta``EjV`B[r?O9`?S17]QՠL^ǀB[r?D?UTG`Qՠ:?7]?J4^ ^ UE?7]?7] ?09 *E?W]?f ?IU09 $TT?$:S1X2@L^ǀW]b@@E?: ?c?t@?e*DE@9 UV`QՠY N ?D?::DIUJS1V`??W]?7]DDE?P9 ?R[r?W]?V`?7]?:?IU?09 ?N G]^ R[rS1T7]?09 ?S1?R[r:EDIUIUO9`?:?S1$G]*> 4?4?]4d?f ?X2@ ?$?G]$4?N ?@9 O9`E?7]?D?$Uc1N ?4:*?Z?]4dIU[+ :?> ?O9`?Qՠ?4B[rUE?P9 ?G]B[rDL^ǀT@9 ??JTG`?DIU7]?4R[rTG`E^ `EjIUQՠ`9 f`aՠ ?> ?ՠ?ߜ?K ?^ $O9`O9` ? a`b[r09 ?*?$?IU?4EU]4dP9 ? > R[rJEJB[r?*?O9`? TG`7]?P9 ?D? 7]J ?$T\^ǀIU?:?Z?IUW]O9`?:*$?G]?*? ?@9 ?7]D> ?E?^ ?[+ ?:$?D?TG`?44?D?> X2@]4d ?R[r?JDT?09 ?[+ ?^ߜ?QՠR[r`Ej?4?JZ`Ej09 ?4?B[r?Qՠ?W]?^ ?@9 a`V`?`Ej?fN?^ ?YU?09 V`P9 $?> *]4dS1@9 X2@TG`L^ǀ]4dG]?B[rJO9`?N ?dk\b[rIUS1?B[r?R@?#?h `?cEYUV`JP9 ?P9 ?m4d?V`[+ Y B[r?09 ?R[r?09 JJT^ߜW]JL^ǀD$O9`JD_9`dD?> ? *IUB[r?TG`?Y 09 ?$?09 ?O9`? c1`Ej*> *?R[r?D@9 ?4?G]?J?B[r4TIU?P9 ?^ ?G]??> ?@9 ?09 09 ?:?B[rO9`[+ ?^ߜ?Z?$?:?? ]4da?E?UQՠX2@:7]?B[r?R[r?_9`?IU[+ IU?a?fN?b@@?dG`?YU *4P9 7]?*JN DTQՠV`$?UG]?N ?DY dqy@aX2@V`?w??x?EIUUU\^ǀb@@?Z?|^ǀ?t@@9 a`G]?> ?DIUYU ?> N U4:L^ǀ?09 G]P9 Zk\e$?*09 B[rIU?O9`?W]?7]?L^ǀ?W]?*:B[rV`R[r4P9 U?W]?4?P9 ?DL^ǀ`Ej[+ ?@9 ?YU?09 $?:JD> *? B[rQՠ?*?a`?^ ?$4L^ǀf f`IU4?> ?h2@?f IU09 09 $G]Qՠ?*$?G]?S1?$?*?TG`?U?N ?E> ^ߜO9`?N ?B[r ?G]?> 4?> ?G]?*?09 O9`dG`YU09 B[rO9`S1G]?> ?P9 ?W]?YU?JIUTV`^ aՠ?R[r?uG?lɕEU?$?P9 ?G]S1dqy@P9 ?7]EW]:$?IU?> O9`N Tf`^ߜ?4?**?: B[r?7]?TG`D?IU$[+ V`*?E?IU> YUIU?S1?*B[r@9 G]\^ǀY ?09 ?T?09 @9 @9 > :4> 7] @9 TG`IU?L^ǀ?V`$V``Ejis$dqy@??Qՠ?Qՠ?`9 ?Z$IU@9 $ R[r[+ J09 ?> ?Y ?4\^ǀW]:09 ?$4TQՠ:?B[r?G]??U?]4dIUTG`i i V`G]D:?V`?aՠ?W]?7]7]G]O9`UUS1R[r4?09 @9 S1IUB[r?L^ǀ_9`^ߜEQՠ_9`W]> ?E?Y ?09 \^ǀQՠB[r@9 ?4?*?*?: 09 G]c1eR[r4TG`Y 7]?L^ǀ?U?DD4?> 09 YUP9 ?:? S1L^ǀ?4?L^ǀ?IUIU$?J?:? ?L^ǀ?R[rW]aՠG]?R[r?4YU\^ǀR[r4?IU`9 `9 L^ǀEU^ R[r **P9 IU?L^ǀ]4dW]N V`TG`E?4?> IUX2@X2@W]$?D? ?B[r?JIUJ? TG`b[rW]YUZB[r? ?:?J?P9 ?D:P9 D*$7]P9 ]4dX2@G]X2@dqy@V`?@9 ?J*J7]7]UZL^ǀ?09 ?7]V`f S1?E?B[r7]L^ǀ$?IU?QՠQՠJ> :]4d`9 ?IU4E?P9 ?O9`$09 ?$?7]P9 c> ?`Ej?EY R[r?L^ǀ?P9 ?09 ?Qՠ?4?O9`?W]?B[r> \^ǀV`?O9`?V`:B[r?4?09 $\^ǀpzm2@O9`^ is$[+ ?4?09 ?*U`Ej?TO9`@9 O9`P9 D?> ?QՠQՠP9 V`IU?> ?$09 $L^ǀD?G]?:7]> X2@a`B[r?@9 09 QՠL^ǀ?DD?E?::$?*B[r^ 7]?a`?YU?09 ?7]?$*$JTG`4?*P9 g]f`IU?09 7]\^ǀdIU?T?4TW]X2@ ?a`?B[r^ 09 ?YU?:JD?:?D@9 J> S1dG`J?\^ǀ?B[r]4dW]B[rJ?S1?N ?B[r?$Qՠ\^ǀQՠ:?:?TT?*?V`?7]?$?:DW]^ߜeGW]?E?7]^ d7]?S14X2@ O9`$?*N IU09 EDB[rO9`G]$?09 ?$JG]?B[r?$J09 7]TD?> ?D?7]B[rU$?U?Qՠ G]*?Qՠ?R[r$4?409 G]??R[r?EYUJ?yU?,b ?tG`?$?E?B[rE@9 L^ǀTG`??P9 4^ߜTG`?$YUb[ra`:?[+ ?Y ?D?$P9 B[r?^ߜ?UTN JYUTG`> ?> P9 L^ǀ:`Ej`9 ?$JJDTS1??P9 ?09 L^ǀTW]`EjYU?D?b@@?P9 QՠG]?*$$? L^ǀUO9`IU?$?J09 S1> ?J?JV`c1?7]?^ߜ?47]@9 TG`G]09 TP9 JceJ L^ǀR[r? ?P9 4\^ǀB[r*cf`B[r?**B[rG]?T?X2@?N ?*??U?Y E?$> 4G]dG`4?@?5?Jk ?N ?TG`?L^ǀ:?@9 ?> D*?@9 ?:?$?*?*DZS14?7]?YU?`9 ?^ ?T> W]09 ?:$JZW]R[rG]?09 ?4DQՠ?> ?DE]4dW]> :TG`\^ǀ_9`O9`?09 DY ??P9 > @9 ?U?^ߜ?@9 @9 $? G]N 444$7]09 > L^ǀ? ?O9`?$R[ra]4d?IU?^ߜ? QՠYUa`N *TG]? X2@^ 7]R[rf`Y ?O9`?W]Da`D dqy@is$O9`B[rY W]IU??S1?Qՠ?B[r?09 ?*?*IUB[r?D?N ?@9 L^ǀa`[+ b[rT?y?R@?t7]?09 *L^ǀ?O9`?YU?D?> ?N ?P9 R[rN 4?4?*?09 ?E?> EX2@ZE?IU?TG`?*> ?*??J?L^ǀ09 L^ǀ?D?D?7]*W]X2@$> ^ߜ^ YUQՠ$L^ǀS1?X2@?d?09 $?J?7]*?B[r?X2@?S1N D?D?B[r$EG]*?S1?UEa`^ߜN ?*?09 @9 B[rP9 `EjTG`7]D?09 ?Qՠ$?B[rO9`eGT?IU?QՠIU?$?EJP9 ?:W]X2@E?IU?aՠ?YU?@9 ?7]? > Qՠ[+ P9 ?IU?TG`:cS1L^ǀaՠ?IU?iUB[rd> EV`:4?4?W]?> 09 ?4Ja`L^ǀ?7]?*4DDO9`W]O9`G]X2@YU? ?TG`?R[r?E?E?IU?IU?D?$4*B[r?IUO9`c1ETP9 B[rB[r?09 ?7]?$?V`?TIUTG`JP9 $?TG`?Y ?T?D*:?09 ?N ?J?7]?4?@9 ?D?J?D > 4 7]S1N ?09 S1UP9 G]??09 D@9 G]TG`N 7]?:?G]?$?7]?J?:?L^ǀ?_9`?S17]L^ǀ> ?U?h2@?^ߜ?*?09 ?B[r? R[raՠ`9 YU> ?P9 ?09 TG`09 ^ ]4d\^ǀiUQՠ?a`?X2@?09 ZTG`?W]?Z4L^ǀYU09 ?P9 ?>  :EJUT> L^ǀY J?7]?IU?09 > 09 ?7]D@9 ?4L^ǀTG`B[r?IU*^ߜIU?09 7]:09 > ?D?V`?4DN QՠT\^ǀV`?4?L^ǀ*?4? ?> ?4?B[r?]4d?Z?09 L^ǀD?@9 ?N ?B[r?D \^ǀ]4dEEO9`JO9`G]> QՠP9 O9`N L^ǀYUV`?09 ?EDD??7]?TG`?G]DS1B[r?YU?h?W]IUL^ǀ??09 J`9 b@@`EjS1 D09 09 L^ǀS1a`YU?^ߜ?nߜ?b@@?V`?\^ǀ?*U09 ?D09 > ?4D:B[rB[r?$:IUX2@D$IU@9 DV`S109 *@9 :$:7]?D?J$*JP9 L^ǀ@9 ?E?O9`P9 g`EjTG`E?L^ǀ?*W]V`D@9 ?:IUZ?:?dqy@?V`IU\^ǀT*:B[r?J?O9`S1aՠ^ _9`R[r?$?*?*?D?> ?7]?B[rG]L^ǀ_9`X2@?7]X2@JG]P9 @9 JW]TG`4?W]?dG`?UEQՠ$?$B[rW][+ TG`DDJ@9 JT*?*D?> ?l^ǀ?@?~'?a@?s?aՠ?*UJ09 ?T?QՠQՠ_9`\^ǀTG`? ?7]?B[r? Qՠ*?09 09 ?$?O9`R[rG]D@9 > 7]09 09 ?D?@9 ??7]?R[r?U?O9`? R[r`Ej^ B[r?G]?@9 X2@g]W]?B[r?09 D?:?TG`?R[rX2@\^ǀY 4?09 S1\^ǀ?E?a`?7]L^ǀ7]4Tda`?B[r?\^ǀ$V`UX2@@9 ?P9 ?P9 ?7]?4?7]?> ?$@9 B[rDV`T4B[rJ P9 S1QՠUIU?09 ?D?E?T?W]?J?@9 ?L^ǀ?> 7]L^ǀTG`N :G]? L^ǀ_9`:?09 *?V`?ՠ?du ??;? ?nߜ?X2@N P9 ?@9 ? ?:?L^ǀ> R[rQՠQՠ?$?E?4?R[r?L^ǀ09 ? E?> ?:V`R[r?G]?O9`? > :*?$?09 ?4?4 ?N ?X2@?R[r\^ǀcR[r?*?7]09 D ?09 > 7]?O9`?R[r?*R[rdG`b[rB[rE:?P9 ?N > ?*?_9`?V`D^ߜ\^ǀ?N *R[rG]7]?4?W]?TG]T]4d_9`ZS1E:IUW]R[r? \^ǀ`9 D7]J?7]?`Ej?X2@*7]?L^ǀ?V`?YU?Y ?7]IUJS1P9 EO9`?@9 09 \^ǀDDO9`?a? ??b?>g`?_s?}ԙ`?^ߜJS1?S1P9 $4?*09 N ?7]?L^ǀ > Qՠ?:?G]O9`> ?Z?a`?R[r?7]?*??4IU:?B[rS1L^ǀ? ?J?O9`*YUUE4??B[r?IU?@9 **?4 *?4IUc1Z7]@9 :?B[r?G]> L^ǀ?R[r?i ?f ?V`?G] G]@9 G]TG`G]?$?@9 ?S1?]4d?U?7]Qՠf eW]TG`Qՠ?7]?@9 TX2@@9 g]f 4?*D??]4d?X2@B[r? ?4?D> V`L^ǀN B[r?09 Tb@@*?E?G]T?fN?,b ?Q?Ä?~?`?`?V`^ ^ ?TG`?09 R[r*@9 P9 7]?4?*W]c1@9 ?@9 ?09 ?G]? Qՠ*?09 7]? ?O9`?O9`?E?D?L^ǀ?:7]R[rD?J?J@9 X2@^ߜU?09 ?L^ǀ?:EL^ǀD ?J?Y ?QՠN W]Qՠ4N W]09 ?09 G]D?B[r? UR[r?O9`?g?iU?c?aՠ?QՠB[rE:?> 44?YU?dqy@?]4d?*X2@Qՠ?7]:V`?D?`9 ?ZJ4[+ ^ߜ?@9 G]N ?09 ?IU?> ?09 09 TG`V`L^ǀR[rP9 $09 ?:?Y B[rfNS1? ?L^ǀ:O9`?f ?H`??O??O?q?7]c1\^ǀ?N > ?B[r4Qՠ?R[r?G]JR[r?*?B[r?IU?\^ǀ?G]R[rN $ IUTL^ǀ09 ?@9 ?4S1$?E?V`?W]eGhIU?G]?> ?$?$$IUL^ǀ?7]?]4d?T@9 TN JQՠV`P9 ?*?@9 > > ?4$S1O9`?:?`Ej?a`?Qՠ?S1?V`?$09 ?$$?09 TG`^ ??S1?4B[rQՠ09 ?N *\^ǀ4?YU?@9 ^ `EjDIUR[r?4?IUJV`@9 * ?:?*B[rS1[+ ]4d@9 ?D?$?IU?dqy@?P9 X2@N ? ?DB[rP9 ?a?x?8 ??Ŕ?S?X2@?> QՠJ09 T@9 ?P9 ?N ?J?T?N ?4?*?N ?L^ǀ7]?X2@?B[rIU$?7]J[+ X2@D4?4?B[rJ?R[r?O9`??P9 ?c?G]b@@^ ?R[r?\^ǀ? @9 ?7]?IU$P9 09 ?B[r4TG`4?R[r?G]DP9 > 09 ? ?: IUE?09 ?P9 ?09 IU?*?X2@?:G]JTG`O9`*L^ǀP9 ?*Y `EjV`@9 J]4d[+ JB[rYU`EjW]YUU?B[r?IUO9`J?$B[rS109 ?O9`?Y ?EYUdO9`?7]?*?\^ǀ?Y ? ?7]?4?7]:J?T?j?vR@?Pn?~5?k+ ?Z?U?09 IUX2@YU> ?7]?P9 ?\^ǀ?O9`IUV`7]?E09 `9 U?:?4?4?T?G]B[rTT??T?B[r?:?R[r?09 ?T?S14? ?Y ^ ?T?w'?t@?N R[r ?R[r?4E09 $S1Qՠ?IU?aՠ?W]$4?@9 ?7]> ?L^ǀ?J IUB[r?09 ?:JR[r?B[r?TB[r> QՠP9 ?> ?J?Qՠ[+ a`TG`B[rIUL^ǀG]X2@b[rU@9 EQՠ[+ TG`?4S1?7]?^ߜ?> O9`E?J?a?W]P9 aՠTG`44> ?*?Qՠ?IU? ?7]?:??*?:?*?S1?lɕ?o9`?`Ej?Qՠ?Qՠ$[+ R[r?@9 ?:N B[r?D?TG`Y L^ǀ:Ta`TG`?4?Qՠ?T09 V`TG`P9 ??TG`?@9 4?> ? ?DB[rIU?7]@9 P9 ?iU?~?g?y=?ZL^ǀ ?U?J?IU?L^ǀ??Qՠ?P9 ?*IUJ?@9 ?J$?7]?[+ ?R[r? 09 *?7]?@9 :09 ?@9 > ?IU?R[r? $?@9 ?P9 ?G]:TG`X2@\^ǀUB[rE4?D$[+ V`@9 09 $@9 IUJYUR[r?T?dG`?[+ ?*JB[r?> TP9 @9 B[rB[rO9`J?J?S1EW]> $$?E?G]P9 `9 L^ǀ?4?*?$W]]4d?> ?aՠ?:^ߜZ?L^ǀ?B[r? *B[rEEN B[r?> ?4Qՠ[+ W]\^ǀZ09 ?G]B[rJN ?09 > P9  ??eG?q`?d?D??U?R[r?D?Y ?\^ǀ?> ?*?09 09 09 T:?:$?@9 ?Y ?D?7]?TG`?N ?D?Qՠ?IU?> $YUIU?L^ǀ?$N 09 ?@9 ?L^ǀ ^ߜTG`?D?$J@9 > ?L^ǀ?:IUV`Y R[r?4D^ ^ ?V`?X2@?\^ǀ?P9 R[rX2@7]N Y :? @9 ES1R[r?N ?YUN b@@TIUN ?Qՠ?B[rEG]?7]?O9`?@9 :TD?J?DJS1@9 ?IU?`Ej?U?*?B[r?*?*4\^ǀ`EjJ?09 UT:> ?IU?09 4> ?: @9 $?$?O9`?`9 ?N W]Y :?*?Qՠ?V`?J?S1?N L^ǀUG]09 ?T?]4d4?4> 4?*J?4?g]?`Ej?E?U?V`?JUJ:^ ^ *?@9 ?G]B[r?g?z~'?r& ?L^ǀ$:09 ?09 ?$$JYUD?E?> IUYU*?_9`?Y ?@9 ?[+ ?Y N P9 ?IU?$O9`> *> $> D?J?U> W]L^ǀL^ǀTL^ǀ? ?E?09 ?> ?IU?$?$?*N c1V`?N ?U?U?\^ǀ09 `Ej*?Qՠ?4?B[r?EIUa`[+ ?4?N J?E?v`?x2@?dqy@?S1?N ?7]?:?D?$??$47]?L^ǀ?a`?E]4dY $?IU?^ ?S1?:09 `9 `9 7]?$?S1?a`?J?> ?Qՠ4S1P9 Y ??f ?YU??IU?G]?7]?7]::D ?@9 D?uK?K ?x?R[rB[rL^ǀ>  ?:? > ?IU?\^ǀ?DG]IU?N ?f ?Z?@9 ?`9 ?aՠ*7]?TG`?L^ǀ> IUG]4?B[r?D??:?> $7]V`]4dY UN Qՠ\^ǀ[+ Y X2@ ?S1?$b@@k\L^ǀ?]4d?W]?P9 ?TQՠc1?4?V`?B[r?[+ ?N IUZ?*?V`4?h2@?'??q<?@9 ?D?4$?*> ??::J?P9 ?G]N UEE?7]?`9 ?V`? @9 W]G]?O9`??a`?^ ?J?P9 $UP9 L^ǀ?IU09 @9 ?09 7]E09 J*?T?R[r?4EV`ER[rZ?[+ ?r& ?aՠEX2@S1$@9 ?7]?09 G]?$?S1?::D? ?Qՠ?B[r?*?YU?[+ ?$*?> ?*N V`J ?7]?47]*?> ?$S1_9`^ߜ^ R[rDP9 W]^ߜ_9`4?R[r?> O9`Y D?09 *?$?R[r7]S1?IU?O9`4?$?IU?B[rQՠ$?O9`@9 ?a`?) ?C?f`$?7]09 S1*:?*?09 47]DIU7]S1R[rN ?YU?S1? :?*?R[r?a`??9`?c1@9 N @9 ? JW]:?:7]JT`9 G]?EJ^ߜR[r7]?E?B[rS1a`9 YUL^ǀP9 B[r?O9`?$X2@7]?7]QՠV`7]4L^ǀJ7]4?E?D?4?09 R[rZ$?4> EJIU?09 ?:?J?@9 7]R[rYUD?G]?J?09 @9 V`N ?09 ?L^ǀ?N ?7]> O9`UE?*G]W]*?4?09 ?> DUDJE?O9`G]?c?b@@> D4V`R[r* ?4?$?7]> U? ?N :?$?R[r?U?E?409 > > > ?x?F?9`?tqy@IUB[r*?D?@9 4> ?*?7]? ? Qՠb[rQՠP9 dG`?P9 ??9 ?r& ?a?L^ǀ^ n Z?@9 7]:?V`?$b[rS1?D$Qՠ> T]4dD?7]?B[r?S1?X2@?IU? 7]??EB[rL^ǀ?Qՠ?P9 > ? 7]?> ?@9 7]??P9 ?O9`?09 G]B[r?:?09 $*IUP9 @9 ?4?> ?09 JQՠL^ǀ]4ddL^ǀ?IU?Z?Y @9 b@@W]G]P9 EB[rO9`R[rYUTG`4O9`a`O9`DQՠ4?7]?09 ?09 @9 T?4?W]?4 ?4?4?S1?^ߜ?R[r?$G]TG`X2@B[r?ys$?]?tΠ?tIU*?09 ?09 ?S1?YU?T?Qՠ?4@9 *?*EV`EP9 ?l?~'??@?~?g?`9 :eGX2@UW]G]dqy@^ > ::?@9 ?09 c1i 09 ?^ߜ?^ ?`9 ?`Ej?S1?:JT09 7]?\^ǀ?O9`09 ?U?W]7]?09 N N $?09 ?D?09 ?*4D4@9 V`Y :?> ?:7]09 V`^ߜ?$?\^ǀ?W]?S1?ZT?7]P9 ?@9 4E?09 ?J?:09 N [+ dqy@IU?IU?7]G]YUN @9 L^ǀJG]?> ?[+ ?N 09 N P9 4?G]?i ?z?w?V`IU4$?@9 ?[+ ?Z?U?L^ǀ@9 P9 09 $G]B[r09 $?fN??d`?L`?E?ۜ?v?[+ `9 [+ ZUR[rY Z^ cc1O9`?O9`?R[r]4dk\09 ?a?X2@?> $?> > \^ǀQՠ7]?$?O9`09 N ?P9 ?E\^ǀTG`?? ?7]?4> 09 ?*?*? 4?> W]]4d7]?*09 ?L^ǀ?S1B[r?TG`?\^ǀ*@9 ?IU@9 ?TG`?N J@9 ?*7]> ?4?G]?^ ?b@@E_9`^ ?> ?Y ?E?> ?4S1]4dIU09 IU\^ǀ`9 @9 ?T?T?> 09 @9 ?P9 ?e?Y :TIU$G]R[r?4?V`?E?7]T*?P9 :?*@9 *?c1?R@??>h@?A?`?G?D*JJ$QՠS1Db[rb[rO9`?:?R[r:`9 > ?TG`?*UV`7]?E?$E$?*??G]R[r4TeT?D?Qՠ?a`?`9 R[r> > Z`9 D?G]B[rP9 L^ǀ?D?4D?*?W]?TG`?09 ?L^ǀ?L^ǀJIU?409 @9 ?N ?Qՠ$:*L^ǀS1UX2@?> ?_9`N L^ǀ?4?`9 ?]4d?IU?W]?[+ O9`?*?TG`?DJV`4?TG`?b[r?a?L^ǀ7]?IU?dG`?UV`Y ?7]?QՠD[+ *?@9 ?D?$S1?:?]4d??4?TG`JIU?_9`?r@@?o#?2@?Q??[r?:?Qՠ?T?IU? L^ǀV`G]?:?09 > ? D@9 09 N D? L^ǀP9 ?\^ǀ?m4d?_9`09 > ?7]?@9 ?:?E?D? E_9``Ej??R[r?4?E?TG`$TG`09 aՠjW]$IU4?*O9`G]?T?Qՠ?09 ?G]?G]?$09 *?:?O9`?*JIU09 ? ?:?J?IU[+ dG`S1?*U? ?IU?TG`?> ?09 ?S1?S1? $?D?S1?N ?B[r?@9 ?> ?B[r?X2@?c1?V`09 09 ?> D?*?]4d?^ 7][+ D?R[r?IUO9`?IUD?B[r?a`IUT?d?l^ǀ?Pn?@?P?Q@?j?P9 ?Z?P9 QՠdG``9 R[r> ?$R[r]4d> ?$ $R[r?uG?@?is$TTG`> ?O9`?^ߜ?\^ǀ?G]B[rX2@P9 ?B[r?O9`B[rUDDN ?4?UZD?D? ?O9`:IU?O9`?W]?N ?B[r4> ?B[r?> 7]09 ?*?E?P9 ?G]> [+ U4?IU?]4d?JP9 V`:?4$B[rD> ??09 > :?7]?*7]*?G]?Z?L^ǀL^ǀG]?P9 ?TG`?09 4O9`X2@G]?@9 ?V`?TG`7]Z:?@9 4P9 :09 S1?$?V`JX2@?T?eG?is$?{\??p@?N ?D?4?B[r?E@9 W]UZTG`O9`aՠL^ǀ@9 U?S1?J?S1?B[r?:?qՠ?ys$?`9 R[rO9`R[rE?T?^ߜ?P9 IUIU> ?4O9`E 7]7]?IU?P9 ?*?09 ? TE?T?DD? ?IU?B[rD09 ?O9`?U?N ?7]4*?> ?B[r$P9 @9 ?$D@9 ?L^ǀ?*Qՠ> ? ?4?S1B[rIU4?> ?L^ǀ R[r ?W]?G]DG]?*?[+ ?Z@9 P9 ?L^ǀ?[+ ?Qՠ?@9 > TB[r ??@9 :W]?*?Z?$YUW]7]?09 09 J7]:G] ?09 ?B[r?YU?X2@?J?> ?*09 B[r$?@9 ?D:`9 X2@?*V`m4d[+ 09 R[r*?E?@9 ?d?k+ ?Y ?U?U> B[r*YUS1?@9 ?$DE@9 ? ?44$?7]09 ?4*YUN ?:?4?*?09 R[rS1?O9`?QՠG]L^ǀ ?4?T?b[r?TG`IUIU? $:?$?T?[+ ?4B[r?*$P9 :G]P9 ?J09 ?> ?TG`?V`?G]7]N ?7]?^ߜ?U?09 ?Qՠ?dqy@?Y ?G]?^ ?a`?S1?L^ǀ?*7]4ED?4P9 ?4?\^ǀ?L^ǀB[r7]?Qՠ?V`? *$O9`?*?f`?ZP9 L^ǀ?B[r?N $ZTG`4O9`V`@9 *S1b@@Z*V`iU^ TG``EjL^ǀ7]B[r?a?pz?_9`? L^ǀYUB[rJdqy@[+ E_9`a`D ?4?D*?7]?$7]TG`Qՠ @9 > ?D:?Qՠ?P9 EL^ǀ> D ?@9 L^ǀ ?Y ?N QՠE?47]09 ?J?V`?Y ?L^ǀ09 4> G]> N ?4?:?R[r?> G]QՠL^ǀ? ?Qՠ?IU?> ?B[r:7]?Y ?_9`?T?X2@?S1?4?447]QՠJ?> ?$G]*?> ?N ?S1?P9 ?\^ǀ?aՠ?IU?4?P9 ?E?V`?h?ZIUO9`*QՠdU?09 $IUR[r`Ej_9`YUX2@L^ǀN [+ [+ `9 \^ǀ??:?Z?`9 ?*?7]?G]7]G]Y f U@9 a`cP9 :*?> ?E?4?4?> *YU^ߜ@9 ?$?Qՠ?7]B[r$IU[+ > ?B[r4\^ǀ^ B[r*L^ǀ ?E?*:> B[rN P9 L^ǀ? ?D?@9 ?EP9 V`7]:W]TG`G]?B[r?09 ?*G]\^ǀD? $? @9 7]@9 :09 TO9`?7]:09 ?4?W]?> ?4?_9`?YU?> ?U?]4d?P9 UTG`7]$4N S1*?*?> ?W]?7]YUL^ǀ09 Qՠ> 7]??$?4?[+ ?TG`?E?]4d?09 \^ǀ?IU?f ?N 7]L^ǀW]?U?DN YUP9 7]09 ?@9 ?IU?J?G]?B[r?B[r?> ?09 4\^ǀd^ߜS1?*?IUL^ǀP9 ?:D_9`> ?*L^ǀ]4db@@]4d> ?*?B[r?4G]R[rP9 YUTG`7]$7]B[rB[r?*?L^ǀ?IU?B[rZdG`O9`? JR[rJ$?J?$N > G]]4dW]R[rS14 :EP9 7]V`W]*?R[r?09 ?G]EW]?E?R[r$?E7]aՠdN ?@9 ?E$YUTG`G]7]?[+ ?J@9 ?@9 *TG`?*?7]?dG`?qy@?w`?uG?a?^ߜ?V`?]4d aՠ?7]?dqy@?L^ǀ J??dG`?iU?IUV`O9`? $?*?X2@?TG`?$4DG]4?09 ?G]TG`[+ V`?B[r?L^ǀYUU?R[r?> J?QՠB[rG]TG`09 ?IU?B[r:\^ǀ`9 O9` 09 ?@9 ?D?*?**ZB[r?D09 R[rUJ?B[r?7]P9 O9`JO9`7]@9 J?09 ?N ?4B[rY N W]]4d7]09 ? ?V`?:7]?:09 W]D09 IUE> IUL^ǀ09 ?> ?L^ǀ?X2@?B[rb@@aIUW]*G]*?UL^ǀ^ ? ?qy@??3d?P?g?eG?^ߜ?R[r^ߜP9 ?:$IU^ߜE?Y ?^ ?$S1G]$N 4?^ ?`Ej?$JU`EjW]??@9 :T]4d?N O9`J?Y ?Qՠ> *7]@9 ?J?N EQՠ09 ? 4P9 J?D?YU?IU:L^ǀR[rZR[r?* ??c?@9 ?: DR[rTG`?:DO9`QՠIU?@9 ?B[r?B[r?R[r?JX2@W]IUZL^ǀEB[r?> IU?4?EG]S1B[r?*??4?D@9 ?R[r?Y V`_9`?7]09 YUP9 P9 ?B[r?`9 P9 `EjDIU?(a ?V ?l!`??h?dG`?^ߜ?@9 ?V``9 X2@J> ^ fNL^ǀ?$U_9`TIUJX2@TG`?D?U?$09 7][+ ]4d?@9 **O9`dqy@W]?*::?N ? ^ߜZB[r?:?4O9``EjW]09 ?:?L^ǀ?V`?X2@?N @9 > ^ `EjL^ǀ@9 G]:?o9`?`9 ?? ? ?7]G]$?*7]:EIU?B[r?P9 ?$ ?@9 ?R[r?D?4?$O9`S1R[rN IUN B[r?$?B[r?IU? L^ǀ$?L^ǀ?N ?> *JW]`9 B[r?S1:W]09 P9 Y 7]*?J?ZTa`TY ?4d?5?@?C?T?Qՠ?P9 ?> ?B[r@9 U[+ YUEY a`c1`9 EP9 D?*$4$G]7]?$O9`[+ 09 ?7]??D?*P9 B[r?> $?:@9 a^ *7]ZY P9 TR[r@9 ?4?\^ǀ?c?JL^ǀP9 ?U?YU*TG`D*G]N ?is$?X2@09 * ?B[r?G]7]J?*?@9 :? ?L^ǀ?09 DS1$?_9`?aՠ?G]?7]?4$B[r@9  > 09 $?@9 ?E ? ?B[r?B[rS1W]B[rS1X2@? ?47]B[rZ^ @9 JN *\^ǀ`9 G]P9 ?y ???fu?L^ǀ?O9`?P9 ?R[r?D?$J`9 G]B[r?:?09 O9`??:U$?f ?c?B[r09 JG]09 JTG`B[r?7]?G]?IU?YU?h2@?e?R[r?G]?P9 ?::$?@9 @9 eGa4?*09 N G]?S1?`9 UIU09 ?:?Qՠ? N ?L^ǀ?@9 *?S14L^ǀ09 *?$?> ?*? O9`X2@?4?Qՠ> D?@9 ?D$O9`7]?\^ǀ?d?L^ǀ@9 :?7]?> ?$?J?QՠL^ǀG]B[r??G]?B[r?@9 ?09 :Qՠ\^ǀQՠ?IU?:N ??YU?U?> O9`[+ QՠYUaZ]4dX2@?$?> ?X2@?v`?{@?q<?h2@?b[r?Y ?Z?:$?O9`09 b[rE?N ?$ ??V`?N S1?g?iU?TG`?7]4:7]*47]@9 N ?_9`?u?pz?W]?IU?E?4?@9 ?J?IU$YUX2@$?> QՠS1?@9 ?S1$09 ?> 7]N *@9 R[r ?P9 ?N ??$O9`E?$??$?09 EU? ?:QՠN ?7]?E?: $?J?S1$X2@S1?09 ?@9 4?7]?UZP9 4? ?D?IU?B[r$W]_9`Y G]?4?7]4?$?P9 ?P9 ?@9 B[rTG`B[r*P9 Y [+ TG`::IU?X2@?g]?iU?U??> ?* ?:D^ > ?G] > ?:?IU?> 4?R[r?V`?@9 :E@9 > ?09 ?Qՠ?409 ?$R[rdqy@?> ?p?d7]L^ǀN P9 *?*4O9`L^ǀ*> 4?B[r?B[r??O9`?UL^ǀ09 7]E?09 $IU?D7]?:?@9 $?IU?:09 4P9 09 ?09 09 *? ??B[r?@9 B[rZW]*?N E?@9 *S1?4 ?B[r?Qՠ?7]J^ߜYU??@9 $ ?$@9 QՠG]7]G]J?09 ?S1?7]R[rZS1Y iUiUP9 ?D?Qՠ?G]J`9 TG`09 :P9 V`O9`?09 *4?B[r?P9 ?7]?4?4*?*? X2@`EjTG`L^ǀ? ?L^ǀ:?4Ea> ?Z?4^ [+ G]> @9 O9`R[r*?*B[rL^ǀ$?? ?B[r?J?> ?L^ǀ?Y ?B[rX2@a`W]R[rO9`EEL^ǀS1?P9 ? TG`TG`?09 ?N $?P9 ?U?DIUD?> ?*N > ?7]?D?U?YU?*R[rYUD?:G]> B[r*?V`?O9`E? ?TG`?:P9 ]4dL^ǀ?TG`?X2@$ ?L^ǀ4V`@9 B[r> ?09 ?IU?@9 :IUB[riUl^ǀJ?E?09 > UTIUT\^ǀQՠ7]?*?E?S1?$G]?@9 ?G]> ?4R[rX2@G]EG]IUUO9`$EW]B[r?J?:N > ?W]?YU@9 aՠ^ߜ$?L^ǀ?> ?$?D?> ??4???S1?W]09 c1hb@@V`W]^ߜV`B[rD?4G]aՠZ?:?R[r?09 ?B[r?Qՠ?D4S1L^ǀ?*?7]?$?S1?W]?E?V`?c?W]4V`L^ǀ?E?N DJ?YU?N W]R[r?09 09 U]4dYU* X2@S1?4> ?09 R[rL^ǀ4*?7]?> $?:?N IUZ?*?X2@?N ?@9 ?@9 ?7] N V`E*Qՠ[+ B[rV`X2@?@9 ?L^ǀ?S1:B[r$> ??N ?> B[rW]V`> DJ7]?L^ǀ?X2@?*?]4d?X2@R[rdYU?09 ?Y ?T?B[r?N ?Qՠ?7]DTG`G]?@9 ?L^ǀ?:09 O9` ?V`?B[rL^ǀ4?:7]EL^ǀL^ǀ$?IU?IU J@9 ?*? B[rO9`P9 :?> ?Y ?dG`?Y B[r09 ?Y ?]4d?D7]B[r?$?B[r?7]?7]4L^ǀ?$?$Y ^ QՠYU`Ej^ a`^ߜX2@`9 `9 O9`JTG`QՠTG`_9`Y QՠO9`?:O9`TG`*09 > ?J?\^ǀ?S1?$$?$09 Y R[r? Da`aTG`N YU[+ L^ǀIU@9 ?J?G]O9`X2@P9 7]?L^ǀ?Z?S1?7]$?09 ?N ?@9 $> ?4?R[r4S1O9`G]? ?P9 ?^ߜ?Qՠ$?:?YU?EW]`Ej7]?> ??IU?P9 ?G]?g?c1?P9 ?Y ?R[rG]E?$?S1?U?:*EYUT@9 09 D??U?`9 ?JYU[+ ? ?O9`?O9`?L^ǀ?> ?G]?Y ?> R[rB[r?EN G]TG`X2@P9 S1P9 ?$:> L^ǀb[raG]*N ]4d`9 N W]dqy@`9 TG`*?N ?Qՠ?D?4?:?> QՠdG`V`N _9`? ?g?TG`V`TB[rQՠYUJO9`caT4?B[r?E???L^ǀ?Z?S1?$?09 ? QՠL^ǀ*TG`]4dN B[r?R[r?U?\^ǀ?a?JJ7]?IU`EjYU?Qՠ?U:> EaU?J?E?> ?T[+ ?4?T?^ ?S1@9 S1S1\^ǀJ?L^ǀ?44?4?E> ?7]?V`?U*O9`:?:?P9 ?IU*E?B[r?]4d?E@9 ?> ?S1?@9 ?:?J?:09 $?O9`?Y ?N ?G]?7]TG`X2@?L^ǀ?_9`?B[rR[r`EjR[r?$ U`9 YU?*?U?@9 ?$?Y ?k+ ?h7]dQՠUV`?v`?כ?yUEO9`?*JY G]7]]4dh2@cTG`:$QՠaՠZ?4?YU?09 IU?*?$TG`Qՠ@9 S1N :IU:?7]?IU?^ ?aՠ?IU7]G]N U`EjQՠ?T?R[r@9 IUR[ra`T:?$?G]L^ǀ`9 ?Qՠ?V`?T?7]R[rYUTG`U? ?[+ ?L^ǀ:G]@9 ?TG`?b[r?S1?*?4?*??$*V`^ߜ*?YU?IU?*?W]?Z?D?G]?R[r?IU?*4N R[r@9 09 ? ?IUL^ǀ ?IU?Qՠ?Qՠ?$$?E?L^ǀW]^ 7]?J?$$?X2@?p9 ?q<?JV`? ?09 ?Qՠ??ct?{+ 09 D?B[r09 R[r@9 EX2@X2@N $09 [+ g]c1:?G]@9 TL^ǀ?4?G]09 ??4Qՠ]4dV`$?S1?J?$?:B[r`9 ZO9`G]:> ?L^ǀ? > ?B[r?E?O9`?g?g]?G]:?7]?:?E?@9 G]TG`O9`E?7]?Qՠ?@9 ?:?@9 ? G]? ?P9 ?*? ?R[r?V`?D*G]W]^ ?aՠ?Y ?> ?G]?> ?:?4$4IUYU^ߜW]IUO9`P9 ?$?G]09 Y Y ?B[r?dG`?]4d?7]??*?$B[r^ߜ]4dD*?Y ?h2@?R[rN ?7]?`9 ?h?v?x?`9 D?L^ǀ?09 G]E *?B[r?> B[rP9 J4? DS1N \^ǀU?X2@?`9 ?*?7]?G]EZP9 ?*?09 S1J?IU7]^ߜIU?4*Y ]4d?G]?^ߜ*?P9 ?v ?vR@?w'???f`?TS1T?> ?Y ?:EG]> 4B[r?> ?D?09 ?U?JV`W]JW]G]?N ?U?E ?:?*?Qՠ?f`?a`?09 09 09 ?*?IU?* ?@9 ?4G]T> ?B[r? IU? ?S1?J> R[r??U?L^ǀ? @9 IU??DDV`E?7]?:D:?X2@?R[rO9`09 ?dqy@?oJk ?c O9`*?4?7]? $?G]?G]P9 U> 4?7]?L^ǀ?4?7]?*D4?09 Tgd?N ?]4d09 > ?09 7]J?G]> `9 N ?:DO9`?$?:YUc1?@9 ?V`???ct?8`?B ??]?nw?ntΠ\^ǀ`9 ?> ?b@@?TIUIU*IUW]09 ?> ?E?\^ǀ?L^ǀUUL^ǀV`J ??R[r?V`?TG`?^ߜ?TG` ?G]?X2@?R[r??:?[+ ?^ ?D09 ?$?IU?*?$?U?TG`?@9 ?G]?JG]> ?09 :ZJ? 7]$?L^ǀ?X2@?O9`:@9 ?T?TG`G]D?`9 ?k\?TG`B[r?7]?S1?DG]?N ?sfu?qEe^ߜ`EjJ?IU?*09 G]Y G]?D?IU?4R[raՠ@9 ?W]^ N JQՠD*N R[r? N ??@9 7]?Jc?N ?g??Y?(?5?\ ???@L^ǀR[r?B[r?Z?IU> > ?> Y R[r09 ?7]*S1> *D*:D?7]?09 E?:?*?E?B[r7] ?Z?b[r?EL^ǀ:?P9 ?]4d?TG`?4?$7]?_9`?r& ?b@@D?7]?]4d?4R[r09 ?L^ǀ4`Ej\^ǀ]4db@@G]?Y ?`9 ?O9`$? ?W]?N L^ǀJ?G]?Qՠ$$?X2@?TG`*G]R[r?V`?~tΠ?~5?N ^ߜ[+ eS1?Qՠ? S1TG`Y O9`:*?TG`?Y @9 YUT]4daՠTG`> L^ǀ\^ǀ\^ǀR[r?B[r> N ?7]*W]?*?*U?G]?V`?l^ǀ?nw??I??@?O@?9??09 ?09 ?4?> 4? ?> ?R[r?$YUX2@R[rYUW]UR[r4409 ?> 7]?L^ǀ?EJE ?G]?TG`$P9 ?> ?U TG`R[r:?B[r?L^ǀ?09 ?4?$?4?pEj?}i ?pz?> ?\^ǀ?:B[r?$?E7]R[r@9 S1eYU?J?V`?B[r?$?O9`?Z?09 V`Qՠ09 L^ǀ]4dO9`?*:L^ǀ09 R[r? ?tqy@?u||?D> *]4dJ?L^ǀ7]Qՠ47]J`Ejdqy@? ?aՠ?B[rTQՠO9`UD?L^ǀ?7]]4dc1R[r$? @9 JIUaf`4?B[r ?]4d?\^ǀ?N ??9`??2@?0 `?*`??K?O9`?B[r7]JP9 E?E?DDX2@R[rY c\^ǀJB[r> D?G]$J$L^ǀ??E ?G]?`Ej?:]4dYU> 09 ? ?4??09 09 ?> ?S1?P9 ?k@?v?h?7]?J?L^ǀ4E7]09 :$?L^ǀ?O9`09 > ?09 ?*?> ?V`?T7]TG`:?*:S1E4X2@YU4O9`TG`?@9 \^ǀ*?EIU@9 R[rG]?4?$7]YUcIU?Qՠ?E09 7]:J*?U?L^ǀW]^ߜD09 ?7] Y jH`jH`V`7]7]?B[r?E$?g?`?@?=?Ml?' @???TG`?4$?$?$4 *P9 N > YU`Ej09 ?EED? ?*S1[+ N V`Z?*?N DD?O9`?@9 V``EjU ?X2@?YU?B[r?D?7]7]?:?R[r?7]?IU?S17]J> P9 JO9`IU7]E?TG`?R[r?@9 ?7] $?@9 ?G]*P9 B[r?> ?O9`?> *??4N YUE> G]QՠegB[r?@9 ? :O9`$?*$??$* ? 7]O9`L^ǀ ?N ?@9 L^ǀD?:??09 ?Y ?X2@$X2@]4dV`L^ǀQՠ\^ǀYU4?P9 ?aՠ?l^ǀ?z??s$?x2@?O9`?E??Qՠ?^ߜ?^ߜ?V`?409 $409 09 R[rD?V`?V`$E$?7]W]Y IU\^ǀc:?JB[rX2@:? B[rQՠP9 09 ?G]?E?:?L^ǀ?E?@9 ?E?**Y V`B[rIU@9 *G]:4V`N ?G]?D??E?G]?:?G]?$R[rR[r> ?4? L^ǀD?09 IU:? ?09 :^ߜ^ D7]09 $P9 P9 ??09 ? ?:?7]?@9 ?> IUS1*B[rV`D?B[r?IU?$ ?B[r?E> @9 ?Qՠ?aՠ?\^ǀ?L^ǀ ::\^ǀa`YUW]4?b@@?p?p?lɕ?f ?b@@J7]?X2@?X2@?O9`?Z?N *?$?@9 ?$$> ?:?]4d?N @9 ?L^ǀ?R[r?D@9 JD^ߜeD?S1?:B[r*?$7]EQՠW]TG`*?B[r? $?:?7]?@9 ?V`?N > :09 $ ?@9 ?R[r4?R[r?:?TG`?W]?@9 ?B[r?:09 7]N W]4?S1U?4?$?$ 4D$V`YUX2@b@@\^ǀ?7]?47]YUE?B[rIUZ?4D? ?P9 ?*@9 ??E:a`aՠ> ?T?^ߜ?R[r?D?> ?09 `Ejn a`?R[r?`Ej?^ ?fN?f`?U^ S1?@9 L^ǀ`9 $?09 G]? ?J?@9 ?D?> ?> ?N ?*G]?P9 ?T?N ?4@9 `Ejc1*?T?> ?@9 ?B[r :> P9 _9`\^ǀ09 ? E4?:??4?R[r?D$?09 ?> 09 P9 O9`? ?S1?:N 4?G]?:?J?a`?W]*?IU?G]? V`\^ǀ?7]?TG` 09 ?@9 ?> ?@9 ?> 4@9 7]?Qՠ?G]T[+ R[rW]O9`?*?4@9 b@@m2@Y ?R[r?7]D?O9`?X2@?:?G]?O9`B[rV`$?09 QՠaՠX2@$?L^ǀ?S1?7]:??B[r?:?P9 ?JY f`?*?jH`?`Ej@9 G]E^ߜW]Qՠ?*X2@h2@T> O9`?4??O9`?J4QՠU7]?*?09 ?> ?P9 ?EQՠZ?:JJ?4?N L^ǀ?09 ?N ?E:> D?:?IU4D$09 ?:?*EYUX2@:? DS1N :?$?YU?dG`?Z?*?7]?N ?@9 > YUO9`?T?]4d?J?L^ǀ?E09 ? :?@9 ?> ?U?W]$D?> ?E?> ?B[r?O9`f l^ǀS1?[+ ?U?@9 ?YU?YU?E?S1?T7]L^ǀ?$?4> :?IU?[+ ?YU?N ?* ?7]?@9 ?B[r?L^ǀ*dqy@a`?W]?ntΠ?a`TcZ^ G]:?O9`?09 J7]> E? EYU?4P9 IU?O9``9 S1 ?09 ?X2@?YU> Y :09 ZTG`B[r]4dV`?IU?f ?`9 N @9 ?$?P9 ?@9 JP9 @9 ?:?EIUB[r4:YUcW]09 ?:?TG`?a`?c1?`Ej?X2@?J O9`V`:?R[r?W]?Qՠ?L^ǀ:W]@9 *D?@9 ?TG`?:?D?U?N :EO9`D @9 V`7]?R[r?G]?*?N ?G]?4?T?T?*?4?B[r? ? ?@9 ?Qՠ?X2@?P9 ?09 ??*?*?4?N ?R[rL^ǀiUaՠ*?7]? QՠZB[r@9 N 4?N ?O9`?B[r?*JO9`Qՠb[rIU?> DO9`?> ?:?4?$?E?> TG`aJ$O9`B[r?G]?7]R[rZ ?aՠ?[+ 7]7]?Qՠ?U?> :E47]> $EUE?*?N ?L^ǀP9 g]\^ǀ?:?T?N ?@9 ?Qՠ?b@@?dG`?U?4DN @9 ?:?O9`?TG`?EP9 P9 ?B[r?> @9 ?09 ?IU44?E\^ǀ`9 W]YUa`U?B[r?O9`09 :?$DS109 ? ?G]?**?> J?$?E*EO9`TG`E? *?@9 ?V`ZG]N P9 EL^ǀG]S1X2@B[r 7] ? T^ N EN ?7]?Y ?7]S1B[r?O9`?X2@?G]?$?4?::TG`]4dE?4 ?W]?_9`?09 ]4dX2@?D?B[rG]?G]?g]?_9`*G]?09 ?J09 W]P9 :* *?:?\^ǀ?L^ǀYU]4d??S1?G]? ?4?R[r?T?09 @9 :*:@9 4?$?L^ǀ?IU?B[r?[+ ?Qՠ?EE??$L^ǀP9 ?*?J09 N QՠL^ǀ? IU[+ N 7] ?:7]G]? G]V`?:?V`? R[r^ߜ^ߜG]?@9 ?IU > ?J?P9 :?S1?*B[r ? DZ]4d$W]IU?> 7]\^ǀZN *?L^ǀ?V`X2@J?T?_9`?> G] ?B[r??$> B[r? :?G]?^ ?@9 `Ej^ ?7]?*R[r?09 ?aՠ?S109 ?E?E4V`O9`?4?S1?B[rO9`R[r?D?P9 @9 L^ǀ?7]?IU?4?:?> 09 ? 7]*?*?09 7]G]? ?P9 ?U?U?IU?*?4?4 * $?Qՠ?\^ǀ?G]@9 G]IUS1E?7] IUDIU:?G]?@9 ?09 09 O9`??TG`?T?09 JB[r?IU?Z?^ ?> W]*?U09 R[r?4?$P9 @9 ?B[r?*P9 `9 ?7]?B[rTN ?D?> J\^ǀ^ R[r09 D^ߜ^ߜ09 ?T?S1 O9`4?*09 ?IUQՠJDN *?D4_9`T?G]?7]TN ???:?G] IUB[rG]UJ?09 ?$S1YU> $G]?T?E ?J?N G]R[r?09 ?J??IU?Qՠ? J*?P9 ?Z?P9 7]B[r?4?$09 ?$?7] > G]09 ?B[r?09 G]N 7]?:?> 7]@9 B[rG]V`Qՠ?D?T?> ?09 ?4IU@9 ?E?G]*?B[r?_9`?^ ?Y ?*aV`?R[r?*S1?S1T?Jd?$?QՠER[r$@9 S1]4dTG`@9 V`g]^ߜ?*?IU?7]> $> > ?DG]D:O9`U@9 ?7]?09 7]@9 4?N ?Qՠ@9 W]*?*U^ߜ> ?$DIU D??T?:> ?@9 ?IUO9`[+ :?E?G]?:?> ?@9 *IU09 ?G]?X2@?S1? ?@9 P9 N 09 ?> E?V`?p@?gE?*?U?YU? W]\^ǀ\^ǀ^ߜ_9`Y B[r?*G]4? O9`\^ǀDJ ?J?4?**_9`YU?G]?O9`?*?G]?J09 L^ǀ:> c:?L^ǀ4QՠDB[rJL^ǀJ*?:$S1E?7]?7]??> ?4?> ?B[r:?09 ?P9 ?G]?$?@9 ?@9 G]V`E7]E$?@9 ?7] ?$?> 09 ?N ?Y B[r?L^ǀ?U? @9 ??:? ?:?T?L^ǀ??> ?@9 > TR[r ?O9`?E*B[rQՠV`@9 ?IU?\^ǀ?YU?4$?09 ?*E`Ej[+ ?D?L^ǀ:?is$? ?~tΠ?b[r ?09 ?J?O9`?@9 EZb@@X2@S1[+ R[r@9 W]]4dJJYUP9 DO9`QՠS1YUL^ǀ09 D7]?IU?W]?V`?L^ǀ?> E4?4?$`EjTEQՠ?IUN ?@9 ?4?:?P9 ?TG`?G]?$?7]?T?YU?D?4?P9 ?> N $?X2@?T?7]?D\^ǀ[+ *D_9`P9 ?*09 G]IUR[r@9 ?D?O9`?S1?P9 7]?@9 ?O9`?7]> N E?P9 ?`Ej?`Ej?X2@?S1?J?G]?:EE?@9 ?7]:> S1]4dB[r?TG`?_9`?JL^ǀV`:?L^ǀ?N TG`b[r?09 ?R[rN ?T?ys$?vR@?EL^ǀ?> ?:?:?T?]4d?4N ?YUS1?$Jc`9 W]X2@V`O9`> G][+ ]4dP9 @9 ?B[r?G]?W]?a`?QՠB[rR[rIU@9 4$Y _9`V`W]T?4?O9`B[r?D?JDB[r?TG`?Z?E?D?P9 ?S1?T? N TG`N ?**DG]_9`N ?DB[rb@@U4V`\^ǀP9 O9`:?P9 ?W]?$X2@[+ L^ǀR[rT?09 ?B[rTG`_9`7]?TG`?]4d?U?TG`?U?IU?R[r?V`7]TG`*09 ?09 @9 Y 7]?S1?J> R[rIU*?IU?\^ǀ?7]W]?T$> ?Qՠ?$a`9 09 ?@9 ?:??G]?X2@?IU?@9 ?09 TG`J?G]YU^ X2@V`^ _9`B[rIUE*> ??E?:?^ߜ?_9`?G]$DTG`IUDV`V`S1E?4?IU?$$?E?IUL^ǀU@9 ?E?IU7]09 UIU:$7]^ߜ^ :4J?$?P9 U7]?4Qՠ^ߜIU?09 ?E?S1?X2@ ]4d?TG`?w]?k\O9` ?U7]P9 ?@9 ?T?09 D?*?N $ ?G]J]4d> 7]E?09 J? ?> IUS1?4?W]?B[r*?L^ǀ?V` B[r?IU?Y ?T?DR[rZT09 ?*09 QՠTTG`TG]Qՠ`9 S1?*E> $UdO9`?: ? ?@9 ?*?IU?R[r$G]?:?X2@?Z?O9`?4$J09 ?IU?:09 :?> 09 7]D7]@9 B[r4W][+ ?:?B[rO9`$?E7]:?*?> ?P9 eGd ?N ?@9 ? $? ?J?R[rR[r@9 ?R[r?W]?IU?Qՠ?D?B[r?Pn?J? ?`EjD?B[r?$?IU?]4d?G]O9`E?_9`?f O9`?> E[+ :G]YU$?> ? ?B[r?4P9 O9`?IU?]4d?DL^ǀ$?W]?L^ǀN G]?R[r?^ߜ?Y ?]4d?S1QՠdYU$?$G]_9`dqy@a`V`Zc1TG`EO9`? ?L^ǀ?JD^ 09 ?S1?4 ?*?@9 ?O9`?$:> ?E?:?4?@9 ?E?P9 ?U?G] @9 X2@B[r7]Y V`*?> ?4T[+ ? ?09 > ?O9`?W]4J4??Qՠ?4aՠ`Ej?> ?\^ǀ?N B[rU@9 ?@9 ?D?@9 ?E?*?P9 ?X2@?4?:?G]?W]?G`?,??cT09 ?N ?R[rB[rT?TG`?wR ?z?^ *?Y ?ES1JU\^ǀ??O9`?*?4?> 4$? IUP9 ?$S1]4dE* ?R[r?P9 R[r_9`Qՠ*?E?O9`4_9`a`G]7]TB[r?D:W]4?B[r?P9 S1?E?Z?7]7]> QՠTG`N 09 ?@9 ?E?7]?7]?J?R[r?L^ǀ:?4O9`:IU\^ǀEP9 E?7]?7]JR[r:EE?P9 ?JYUZ> ??T?QՠG]IU?IU?Qՠ?409 D> @9 O9`?*?O9`09 @9 ?@9 ?$ ? ?sfu?̗?{@7]U4E:> O9`:?a?z?~ ?b[r:?Y ?X2@DS1T@9 ?R[r?L^ǀ7]@9 4 ?> J7]Jaea`[+ S1JW]W]?*@9 ?:?N ?4?Y ?IUW]aՠE?4> 09 ?Qՠ?09 R[r:?47]QՠE?:?D09 09 O9`Y ^ߜO9`?G]?> J ?T?P9 ?7]$\^ǀG]?@9 *J`9 \^ǀS1O9`?@9 ?R[r@9 W]Qՠ> IUN ?B[r?4X2@N ?E?Qՠ?W]?N : ?S1?7]E??@9 B[rN JX2@D?B[rUg]Qՠ@9 @9 B[r?B[r?aՠ?09 ^ N B[rW]T4?J?W]?S1?dG`?is$4dqy@> ?O9`?*:$?R[r?YU?> $N P9 ? JL^ǀL^ǀ^ߜh2@gZ? TG`X2@* ?[+ ?Y > 4?TG`?N DX2@QՠEV`S1?:?7]J:?B[r?B[r?> ?> ?* ?4?4?$D4?G]R[r? ?R[rZ_9`ZZD?P9 ?4:J^ߜeg]_9`?B[r?TO9``9 P9 ??IU?7] ?> ?B[r?E?Z?V`?> Qՠa`?$?jH`?b[r4?> S1R[r?4*?EQՠgQՠ?09 N Qՠ?@9 ? P9 S1DS1YU:?R[r?eG?dS1J^ߜiU^ ?4?R[r?> ?09 ?U?IUJ?4?W]> X2@?TG`X2@7]?$> TIU?09 Z`EjL^ǀIUD?B[r]4dL^ǀ?P9 ?R[r?IU?> :V``9 \^ǀ7]*W]U??T?\^ǀ?W]?B[r?> ?O9`?G]??$?**?$?IU4P9 ?4?:^ߜh2@a`X2@T> ?09 N N ?7]?7]Ja`^ߜ?@9 S1[+ D?:?G]?7]?E?U?W]?N ? V`[+ ?`9 ?{@?xh `?Z?$?$QՠE?TG`?T?IU?TG`?O9`?B[r?W]09 P9 ?$?N P9 E7]R[rJ?J?]4d?\^ǀ?R[rL^ǀ@9 7]QՠX2@? ?\^ǀ?G]B[r4N ?Qՠ?aՠ09 W] W]W]09 ?@9 ?DB[r4*T]4dR[rR[rT> P9 b[rQՠ?G]?IU?IU?R[r?*IUN @9 Dac1IU?B[r?O9`?D?7]?N ?S1?E@9 N V`4?B[r4G]?D?7]\^ǀ_9`09 ?$W]B[r@9 \^ǀD?a?g?X2@*N 09 QՠP9 4DE D]4dT?$?E?4?> ?U?^ ?b[r?t??|?eG?7]?09 :7]?D?B[r?09 ?*@9 E?IU?Z?B[r7]?$?L^ǀ?*B[r IU4?T?V` G]?7]?U?Qՠ?IUS1?a?S1S1TG`B[r? ?X2@?V`L^ǀX2@4$B[r@9 P9 P9 ?IU?W]EYU ?EIUS1Z@9 ?*7]$?B[r? > 09 44?:?S1?O9`7]_9`^ D$:D:?*?4G]P9 @9 P9 X2@7]?@9 $D?:?J09 4?IU?JT> :YUE?Y ?`Ej?IU09 D*$DE> \^ǀV`09 :Qՠ:?[+ ?p?r[r?r ?u?p@?V`$EG]7]:G]TZW]J ?4?*?S1?N ?09 ?409 P9 ?V`?U$G]?N ?a`?Qՠ G]TG`?09 ?dG`?\^ǀIUV`7]?B[r?P9 ?09 P9 Qՠ> 7]?$?:O9`*?t?{@?ZY ??DJS1[+ c1E?Z?\^ǀ?N ?J?:4@9 @9 > ?09 ?S1?R[rE?B[r:*09 $4DDJB[r?09 ?D?7]?4?W]?O9`?$?*409 S1YUIUB[rN G]$?$?:?B[r?7]$D4?7]? L^ǀIU09 G]TO9`?*?]4d?_9`?Qՠ?Qՠ?R[r?09 09 ETIUG]G] 09 Y YU:4? ?Qՠ?@9 7]EZYU?D?`9 ?Z?L^ǀ?E?R[r?U?7]DQՠN ?7]?\^ǀ?S14L^ǀ@9 7]G]P9 G]$@9 ?$?O9`?*?dG`?@?=?tqy@09 ?:?*TO9`Qՠ_9`N ?P9 ?V`?D?D?O9`?O9`?N ?D7]O9`@9 ?09 ?TG`?TG`?4?@9 ?T?$N *?D?$QՠX2@7]?D?E?@9 ?*?G]?`Ej?Y ? :L^ǀ?09 : 7]P9 O9`EB[r? ?J?> 4:@9 JL^ǀB[r09 :P9 L^ǀ*??:?D@9 7]D ?409 *? 4$?*7]L^ǀ?> ?c?YUTYU> IU4?J09 W]W]c1^ߜ?O9`?a`?S1?TG`?Y ?L^ǀ?*ES1O9`*?  4Qՠ_9`\^ǀE?$?*> 7]?D?> ?c1?ՠ??r@@? :B[r?G]?G]:O9`L^ǀ@9 09 ? ?E?P9 ?TG`?S1 [+ `9 S1> ?$?L^ǀ?E??P9 ?^ aV`?D?L^ǀB[rW]7]?J?R[r?T?N ?IU?X2@?Qՠ7]O9`P9 ?7]@9 ?G]?G]?G]?D??P9 ?:S1ZS1D09 > DIUV`TG`*?G]?W]?N :?T?S1?ES1:?V`?R[r7]QՠX2@Qՠ?V`?m2@?a`N N $TG]?JJ09 R[rYU?$?IU?*?O9`?Z?L^ǀ > R[r[+ UIUIU> ?*?> ?4*O9`J4$> P9 7]@9 B[r?b@@?pEj?UN X2@\^ǀ> ?R[r?J*T`EjU09 ?*?> ?*?*TG`^ N 09 4 ?@9 ?TG`?YUTG`?@9 G]@9 ?7]?S1?\^ǀ?V`?:? > Qՠ> ?> 4?$?R[r?T?S1?IU> IU?> ?> DIU ?D?E?$G]R[r7]?7]?$D?Qՠ?p?k@?TO9`7]?V`?G]YU`EjL^ǀ?7]?c?o9`?b@@09 4? P9 IU?B[rB[r?4?:$?L^ǀ?Z?\^ǀ?X2@?@9 DO9`4$B[r09 ?*? ?09 ?@9 ?4?B[r?> > DDTP9 L^ǀW]IU?@9 V``Ej`9 IU@9 IUR[rTG`4? *?D?S1O9`B[r> :?7]?E7]G]? E?IU?L^ǀ?B[r7]QՠEES1Qՠ4?G]?S1?7]> ?E?J?> ?7]?O9`?:?:?IUE?$?7]?4?J?P9 ?:B[r?P9 ? G]4D: G]?O9`?p@?l^ǀ?TG`?T?L^ǀ09 TG`c1O9`?IU?P9 ?U?`Ej?W]? ?*$09 DYUT??S1?N ?09 ?B[r?S1?Y ?dqy@?h2@?[+ ?7]?B[r?R[r?@9 :*? 4?$? ?D?IUEUJO9`Qՠ7]? ? 7]S1UIU? ?> :?$?:?J@9 ?Qՠ?\^ǀ*[+ O9`?$?G]?Qՠ?G]4> ?: YUU?09 ?YU?UG]aՠQՠ EUV`G]?@9 ?E?B[r?Z?IU?S1UY ?7]?O9`*?T?IU09 7]:> ? ?* E?$?P9 @9 ?09 ? ? ?:D$?`9 ?[+ ?E?Z?TG`E^ cZ?4?G]EIU09 ?::Ja`Qՠ?N ?O9`?09 ?O9`?X2@?TG`?^ߜ?`9 ?D09 ?7]?N ?> ?$?B[r?4?:?@9 @9 V`JIUS17]?N ?L^ǀ> ^ߜ^ ?^ ?[+ ?> ?:?O9`?N ?P9 ?G]> @9 ?E?> R[r\^ǀN ??@9 ?**B[r> :O9`IU*?> ?G]@9 YU7]?O9`?J?EJ?4?E:09 ?> :*eg]09 ?B[rG]D?> R[rTD?09 ?B[r?E?IU?4QՠE?TG`?W]?B[rP9 N ?* > > UV`R[r??N ?^ ?zH`?uK\^ǀ> N Y D?Y ?Y G]R[r? ?X2@?]4d?G]?@9 ?09 L^ǀS1> ?$?@9 ?@9 ?@9 ?O9`?P9 ?@9 ?* ?B[rB[rL^ǀT*?T?P9 4X2@^ IU?E?B[r ?$?44O9`@9 G]Qՠ@9 4@9 IUQՠP9 B[rETJ?@9 ?P9 ?:?:?O9`?7]D4?> ?J?B[r$$?O9`?IUS1\^ǀQՠTIU_9`dG`L^ǀL^ǀUR[rV`Y L^ǀ?4?[+ ?b[r?V`?E?R[r?U?@9 N `EjG]?^ ?b@@?EEO9`?7]4G]JR[r4?:?7]?TG`?N ?|?h?ꠀ?n aՠP9 :\^ǀaՠ> ?^ߜ?a`?@9 ?09 ?@9 4?4?c?`Ej?4??> ?> ?J?IU?$?D?S1?4?4 E7]? $G]J?:?Y ?L^ǀ$4IUX2@Y S1D7]L^ǀTG`JIUR[rE ? ?E?V`?DG]QՠL^ǀIU@9 J[+ G]?V`?X2@?4?B[r?T?> EP9 @9 ?$J?[+ ?TG`N \^ǀN $?B[r? JE??IUYUT*?E?N ?Y ?f ?d?R[r?@9 ?*IU\^ǀY $?U?Z?B[r:?U?W]?7] 09 4?@9 ?:7]?D?> *?`?VŠ? ?q<dqy@^ N YUV`?G]?$?4?^ ?^ ?4?P9 ?fN?Y D ?V`?YU?YU?R[r?:?IU?P9 ?7]?O9`?Z? P9 ? ?S1S1?$*> ?$?E7]T4?Ub@@TG` > Y Y @9 @9 > ?E?Z?^ ?_9`?W]?7]?@9 ?P9 ? O9`R[rR[r?YU?DL^ǀ7]? @9 G]D?G]? UE?S1?U? E> ?7]?T?J? $?E?T?:E@9 ?L^ǀ?^ ?L^ǀ?IU?[+ ?L^ǀ09 O9`Y U$?:09 ?4?S1?S1?7]*B[rG]YU^ߜ:?7]?D?vR@?N?<?[+ Y S17]7]4G]Z09 ?b[r?b[r?B[r?O9`?b@@?P9 G]?S1?O9`?7]> N ?> ?^ߜ?X2@?Z?`9 ? Y *?L^ǀ4Qՠ?IU?:@9 IUIUY `EjD?7]L^ǀ[+ $?DL^ǀ_9`T09 ? $?X2@?`9 ?IU?D?U?O9`?V`?aՠ?@9 TG`L^ǀ?IU?Y ?7]P9 L^ǀQՠT*? ?:[+ ]4dG]?> ?09 DIU$09 @9 ?$?L^ǀ?L^ǀ?E? E?X2@?P9 B[r:?E?> EX2@V`4?B[r?S1TG`*?09 $7]4:TG``9 ]4dG]?O9`?qPn?Jk ?z?b[r?4?09 ?09 ?L^ǀ?T?@9 D`EjdG`J?S1?S1?4?G]?V`?D> 09 ?4R[raՠa`?Y ?E?7]?TG`?@9 Qՠ7]?R[r?IU? ?L^ǀ?Y ?B[r:* EG]?*?09 UW]?D?IUV`[+ > B[rR[rN $?S1?R[rEJJJ?: D?:?L^ǀ?G]?IU@9 4R[rW]> DTG`JL^ǀ^ߜc1aՠT?09 ?G]7]UTG`TG`N ?J?IU7]? ?@9 P9 ]4d*?G]?7]?> ?J?> @9 UB[r?J?EDR[r*?R[r?W]?7]DN L^ǀ:$O9`Z? ?a?R[r?@9 ?xh `?`?~ ?P9 *? B[r?7]?[+ ?N R[rg]eN *@9 *?7]?> IUO9`B[r7]G]Y [+ DB[r`9 ^ߜ?> ?Z?09 IU?@9 ?E?\^ǀ?^ߜ? ?Z?^ߜ?J?J?N B[rd]4d?D?@9 W]O9`?47]W]V`O9`?$EJP9 ek+ c1U?V`?Qՠ?$EZT$IU[+ ]4d`9 W]? ?4B[rN IU> ?09 B[rJB[r09 ?T?B[rP9 *?JIUaZ:?L^ǀ?[+ ?R[r?G]?7]:?$?Y ?IUJ> ?Qՠ?b[r?b[r?P9 $DG]B[r7]N T?IU?iU?S1S1?eG?|?pzP9 X2@UcZ?$?*Y h2@Z?B[rYUE? JZY > ?@9 ?D? 4DX2@b@@V`?L^ǀ?aՠ?EV`Qՠ? ?:?TG`?V`$??a`?Z?7]?N ?JTcN ?O9`?7]R[rB[r?E?E?7]*V`TG`?B[r?09 E^ߜeg^ߜ?G]?7]?7]B[ra^ :7]TG`cf`E?`9 ?b[r?J?D?X2@?T*J*??@9 ?$?D? G]??G]4R[rUN ?L^ǀ?Y ?*?09 ?TG`?44?:? G]$?E?TG`?W]?D? ?$G]P9 S1Qՠ ?TG`?@9 X2@G]?DUf`L^ǀ YU^ߜO9`J`Ejd$?X2@ R[r? ?J?:B[r[+ U? ?N ?S1?R[r?IU?4?*?D?R[r?R[r?N *Y G]?G]?$$?:?09 ?:?@9 JO9`?L^ǀ?P9 @9 @9 ?P9 ?Y ?09 J7]?7]?S1?_9`?P9 L^ǀR[r?7]?X2@?N $*:UG]?:09 09 ?W]?QՠJQՠ4?$?*Qՠb[rIU?YU?YU $?Y ?^ߜ O9`4*?$?Ϡ?il?S,T>a` ?:`?I+?*`?>?eA`?t$`?k@?J`?bV?g?b?n?j`?Q?X,?a?RV?U@?^?N0 LW TOj7W\D`Ai a0 ?BVP dlp^P Y+^S,TOjZ`Z`D `P ` ^P ?`?J`7W\]-3Z`GW\?:`?D>E@$LW X,TGW\?*`?:`:`4$NRVS,TbVhwb>?J`?@ @ S,TP >E@YדV E@^hwRV?S,T?0 T$`LW D\W bVRV>LW 4I+?S,T?RVYד[c@NYדI+`NGW\>7W\?T$`?` ?LW :`[c@`Ai X,Y+LW I+?`?c?4?GW\Z`_j?J`?f@ ?dlp?Q?Y+?pv ?q?l?sb?t?k@?gW\?a?N?P ?GW\0 @ ?E@?4X,aJ`?$*`S,TZ`P $7W\T$`V BV0 E@J`S,T` bV_j^WW\GW\NOj?7W\?V ?E@4TWW\0 TU@N^a8T$`*`?D?>I+TI+LW T$`TU@]-3V *`$J`S,Ta8c,TD4[c@S,T`OjRV?Oj?a?GW\E@D?`?D?*`>J`P D`QP ?D4` BV? `Q `?Oj`GW\GW\BV?*`?$DE@BVLW Z`` GW\?7W\ `?f ?@ ?^?_jBV?BV?a?gW\?Yד?GW\?h,?xw?|?y7?pw ?a?N?GW\?S,T?QJ`[c@Yד?:`?LW T^S,TYדX,BVE@V RV>BVP BV?0 ?0 0 P [c@^aa87W\?T$`Z`N?$?$I+T$` `?*`I+J`N^Z`@ ?>?T$`?S,T? `E@4:`OjNI+$?D0 T$`>7W\J`?*`?:`>?4?LW @ BV?Oj?U@?:`@ RV@ ?I+?T$`?U@?Q?$?0 :`E@0 WW\^?0 ?Oj7W\$?DOj[c@YדE@7W\7W\?0 ?P ?E@E@WW\D`4?vN?zBG?pw ?I+?*`?`QQ?P ?` ?U@?dlp?w?{M @?p ?^?S,T?:`?BV?Y+?D*`?7W\4J`?T?^?7W\`U@niדBVS,TZ`LW `@ RVE@`0 DD7W\GW\RV?`?S,T4[c@S,TOjLW :`NJ`?GW\?Oj?`*`P X,7W\?I+?T?U@?E@ `7W\0 ?*`?`J`N>?`?D?` `?Q?Oj?`?D?>$?I+?LW P \W P I+GW\N[c@`Ai Yד`?a?d?`LW ? `4*`DGW\?7W\?I+`LW >?*`0 U@J`?D?Q?E@?>?GW\?E@?$?$RVT$`?mN? ?w`?^?$?:`X,a?0 ?d$`?c,T?` ?l?lW ?T?I+?V ?BV?J`?X,4J`?U@?Q?T?RV `?4Dk@ilߠJ`$S,TbV^40 [c@^S,TLW >?>?Q?D7W\DDT$`Q`4LW LW Q@ ?I+?J`?40 [c@\W ?`?T?T$`?BVOjU@NS,TJ`*`NWW\QP Oj*`?T?^T?0 @ `?*`E@LW 7W\*`0 :`:`E@V D?RV? `eA`dP TT*`?0 $?0 ?:`>BV?BV?4E@? `?T$`?LW 7W\QGW\4?`?Q?7W\WW\P ?\`??:@?t7?$?>?*`?0 ?RV?c,T?eA`?\W ?Y+?Q? `?>?BV>?E@?]-30 I+?Oj? `P ?7W\`^GW\?$V aOj:`U@f e@GW\ `V ` [c@Z`RV? `?E@?0 >RVZ``Ai V ?7W\4NQ@ ? `? `E@a8`Ai :`?0 ?D?0 TU@I+\W \W 4BV[c@[c@Z`]-34?bV?c,TGW\c,TOj0 NQRVE@?N?a?^?>BV?I+?@ ?Q?NamU@BVbV^0 DQ:`?LW ?>7W\ `4J`$?*`>Y+^RVE@>?7W\0 Z`@ ?_ ?xE?t?qBV?`?X,?]-3?J`?T?a8?WW\?>?0 $Q\W ?4?Z``>?*`\W bV?J`?U@S,TT?`J``Ai Q7W\S,Ta[c@$?BV4U@U@Y+^[c@[c@X,NGW\RV_jaGW\?@ `TTI+GW\BV@ WW\c,TZ`NT:`?7W\4:`@ _j\W ?0 ?4QS,T>*`?J`?f?d$X,S,TQI+N` WW\?S,T?gW\?c?7W\S,TE@?`?4?`Ai ?bJ`[c@?J`?:`YדE@?>$I+T$`Q?:`?E@7W\D>7W\4BV0 I+RVS,TN `DY+E@?R2?I`?lp?V D$?I+?4P `?T?0 :`?*`?$E@\W ]-37W\*`Z`RV0 `Ai ^?a?oB?OjDJ`_jLW :`T$`LW $$?*` `N@ 4Y+fkc@hw\W I+BVRV^Oj?:`0 WW\QLW P >BV_jbVOjRVbVWW\ ``>S,TaT?D?@ E@@ ?>?J`?U@?a8?T>*` `GW\?0 ?I+J`I+?Q?Y+?I+$>?BV?0 V 4?Y+?4GW\?$`@ ?I+?Q?4?`@ Oj `?>?*`?*`?:`?:`4N?I+?bV?BV]-3bP ?@ ? `LW E@?pAi ?t`?f@ ?RV?BV$:`T$`Z``?>I+@ ?Oj?GW\E@WW\U@P \W dlpU@E@GW\?_j?k@?LW I+?4?$QE@LW Yד:`0 Z`T$`DJ`?$?:`V dlpe@f cZ`>? `I+RV@ LW TI+P Q?0 ?@ QY+DRVbV\W I+@ E@TX,@ ? `DTI+0 @ ?@ ?hw?c,T0 ?:`?X,?0 ?E@?Y+?:`?$?>Oja_jI+?X,?WW\^iדT7W\RVWW\GW\?@ ?Q?D?BV?E@`BV?D?WW\?Y+?BVE@T$`?E@?f ?S,T^e@N?LW ?:`GW\D?m-3?g?a?`Ai ?Q?`:`Oj$?V ?Oj`?J`?a?T0 J`LW RVWW\Oj?`?I+?7W\0 ?4?I+RVdlpGW\?$OjOjGW\N7W\OjaS,T7W\*`?I+ `dlpbLW Q` aI+?:`@ ]-3]-3YדS,TS,Ta[c@?E@?Y+?`GW\>@ LW RVWW\TDE@D0 I+\W _jT$`S,T_j?P ?w ??m-3?Q?\W I+ `GW\LW GW\ah,e@` ?QJ`c,TU@*`N`?P ?:`*`?GW\?J`$4*`?7W\?a8?` 4N@ LW ?Yד?NS,Ta8Oj?E@?7W\I+I+?g?` ?V ?P ?RV?WW\?@ 4?Q?eA`?]-3?J`?WW\?^?S,T?$$:`RVWW\0 ?GW\?D?$>J`7W\Y+m-3gY+^S,T?*`?*`E@S,T:`?GW\?7W\?4?X,?*`c,Ta>BVV RVGW\TZ`YדV NYדf^?$?BV4NE@?`?:`I+ccT$`NQTY+\W ^V LW T$`?e@?BG?&@?|W ?LW ?7W\WW\` S,T^Y+ `*``4? `?$ `?GW\?WW\?T$`?I+$:`0 RVOj?LW ?WW\?J`?4GW\4?a?^GW\J`?*`0 >?*`? `Oj\W Oj?J`?S,T>?7W\?7W\?`?[c@?f ?BVI+?RV?c?T?*`?0 ?I+?N?*`0 `Qc,T[c@BVGW\BVDS,T4ai+_jV D?GW\?*`Z`Z`?4?LW :``?` ?gW\?X,DZ`4?J`?`Oj^\W *`?$:`*`I+WW\4? `RVV RVS,T:`? `Tgf@ X,RVX,`Ai ` S,TP S,T*`$?`Ai ?a??r!:`GW\`Ai ]-3GW\V @ ?S,T?N?I+?T$`?\W ?` ?$S,T?RV?b?BV*`DYדac]-3?$?Yד?` ?TI+J`?S,T?LW E@`?>0 >?*` `D4?RV?X,?$BV?Q?D*`?WW\?[c@TZ`?Oj?X,?*`7W\0 ?D?Q7W\P ?$$`Ai ^RVZ`S,T@ Y+T?D?`TI+7W\D*`D_j_jNS,T[c@E@?Z`?t7?x?Yדhw[c@?J`?BVE@a[c@?RV?V 7W\0 `?`?WW\?0 \W D?4RV[c@RVWW\^S,T7W\4BVV `Ai I+? `D0 4?Z`?c$GW\:`\W TBVS,T7W\0 BV?f ?r?f@ ?c,T?@ cE@?OjJ`T>WW\a8a_jP ?0 ?U@?NI+RV4I+Q?7W\``?D?X,?Yד?J`?:`?D? `TZ`?I+?c,T?V `?GW\0 gYד?P ?D?:`?@ ?P ?OjE@I+?N?DOj:`?$T$`X,@ Yדb>?:`DP T$`` ]-3LW GW\Oj[c@c,TY+BV`?k@?zw`?a8lW dlp>NT$`a^?N?I+X,U@E@?TBVa?GW\?a@ ]-3J`:`:`?*`?444@ Y+BV?LW 4LW Nc,TdlpU@?*`:`Z`7W\0 RVE@Y+?hw?dC@?_`?A`?dlp?V WW\P ?LW *`>?:`>TP QT$`Q@ 7W\S,T\W [c@\W Y+E@?4?BV0 $?T$`?X,?@ ?$7W\U@^Z`?0 ?Z`?T?I+?X,*`b7W\?T?N?BV?@ ?:`*`?BV?\W ?:`Q `?I+BVT$`7W\BVX,LW 4Q` f@ g_j>?0 ?0 GW\^T$`Oja$?kc@?S,TeA`\W N`Ai ]-3` ` $@ aT$`@ `?7W\_jgW\?@ ?Z`E@P ?0 ?4?7W\ `Z`[c@LW V J`?BVJ`\W ?@ ?J`]-3d$`>?4[c@WW\?Yד?T$``?:`?*`?L ??`??pv ?` `@ ?Z`?X,?D?:`4$?*`4LW RVS,TI+RV` _jQTWW\?4?S,TS,Ta`? `LW DQ]-3P 4:`?0 ?BV?T?bV?J`BV?T$`?a?$:`*`? ` `?LW ?[c@?I+7W\@ 7W\E@J`0 ?7W\?4`7W\>OjY+T$`7W\ `?>?DLW ^[c@`Ai T?Q?BVT$`7W\?0 GW\J`QV J`TT?@ ?P ?GW\?$a8f@ `?`WW\Q7W\E@E@ `4_jcYד]-3V `U@]-3?X,?f $[c@ `c,TT?c?Z`? `?WW\?]-3?U?Q@?f`?/X?l?T$`>Q?WW\?b?OjE@N?J`?T$`7W\QJ`GW\*`7W\V S,T? `D^?T$`]-3ilߠ4?:`D@ U@` Q4`@ @ ? `?U@?N?4?b?ilߠ?E@OjJ`0 ?*` `D`?V ?gW\?e@?*`[c@X,P RV7W\?:`*`J`? `?E@?7W\?BV?N?`J``?Q`` S,T? `? `?J`?I+J`GW\?D?@ 0 :`DN? `?^?Z`?E@$Z`RV?I+?7W\J`S,T_jaQ7W\4NY+Z`_jQ?:`0 BV?a8?kc@?I+LW ?$?@ X,]-3? `BVX,?J`?WW\?qL+? z??1 ?WW\?:`J`J`?T?_j?:``Ai a?D?U@J`Z`P I+0 ?`*`*`?>7W\]-37W\?NY+e@?*`?Yד?BVGW\RVP Yד?GW\4J`J`?4?@ ?*`?a?jBG?LW Oj*`?D?:` `:`$?\W ?rF?s?X,X,^\W b\W DYדd$`S,T? `? `?4?:`4P BV?:`$X,:`?J`?`?7W\?NP ` 7W\?*`@ :`?$?*`?`?GW\?T$`?@ *`GW\S,T `?Y+?Y+?Q`Ai `Ai BV@ BV$DY+Yד$?WW\?Q?>?\W ?bV?J`7W\ `?BVDeA`d$`aa8E@?@ ?4?c,T?r?gW\?LW ? `*`?I+?T$`?BV@ aa8`?>LW V T$`T$`I+?`?7W\?4?D?:`D7W\?DBV\W 0 ?LW ?4`?7W\?T$`?DYד?V ?N?E@?*`>?T$`?d$`?BVD?I+?T$`?@ ?D?Oj?LW ?a8?p ?l?T$`7W\S,T^bVV E@albOjND:`I+J`GW\@ E@Q@ :`U@:`?Oj@ [c@0 ?*`BV4?@ ?P ?P ?7W\0 >0 7W\I+BV?GW\?[c@?OjS,TT:`@ ? `GW\^V `?D?:`?0 ?BV?7W\4E@4:`a8eA`OjP aRV?7W\?I+?WW\?_j?E@Q>?S,T?BVOjRV@ ?`?BV?0 0 TV :`? ` `?:`?T$`?P ?*`?>?4LW Oj*`*`*`?LW ?a8?X,D?^?dlp?e@?T$`? `LW Q?E@?Z` `J`?@ ?Oj?I+?Yד?Y+?E@?Z`?c?GW\7W\4T$`S,T0 WW\a8N`@ 0 `GW\NP S,TJ`>:`QZ`0 ?RV?*`*`?J`?E@$0 ? `?GW\?DN[c@J`` `*`Oj^S,T?E@?BVTV :`D:`RV^J`7W\OjLW ?0 >>?4?`>0 J`T?4?:`` c,T? `?U@?U@?RV7W\]-3Q?*`? `OjS,T?$?Y+?Oj?0 ?RV?NOjQ?*`J`N>?GW\?Yד?N?4? `J`N?$?E@?>?@ ?:``0 ?kc@?oj?lW ?_j?:`I+E@?D?GW\I+U@>`?`?N?@ $?LW ?QQ\W *`?`DLW 7W\*`?Q?Q?$?$RVZ`\W ]-3S,T0 *`NP ? `?D`*`?*`*`I+QT$`D>Z`Z`DI+GW\?>?4QI+?GW\?*`X,U@:`P U@I+QE@?N?GW\J`@ ?J`?P 4?P ?U@>P BVJ`$?GW\:`T$`*`?4$>>47W\4?BV?DNT$`>NGW\?V ?X,E@LW ?:`?$>>GW\*`?U@?[c@?@ E@V D?N?V ?N? `WW\^0 ?xw?s?i+?c?WW\?*`?7W\?P ?7W\GW\OjDGW\T$`D?Oj?a?bV?E@YדZ`?0 ?P `U@Oj?7W\?N?Oj?Oj?7W\*`0 Oj^Z`V ^`Ai T$`P YדYדI+:`LW QP QOjT$`]-3V J`I+ `?0 OjRV?J`?X,?GW\?T$`?a?E@RV`?QE@c^Oj?>?d?^?7W\?WW\?U@?4BV? `?>[c@f WW\X,_j:`?@ `@ J`TT$`7W\?J`?0 @ ?E@?T$`D`Ai ac,TT$`?N?RVBVLW ?0 ?GW\?I+?I+ `*`?T$`?a?Q0 N:`?@ ?@ ?4X,_j4?{@?rF?d$`?eA`?[c@?7W\?N?X,?BV0 >`Y+GW\?n?|W ?t$`?RVS,TD?U@?^X,>?RV?RV?*`GW\V I+7W\T$`Y+$?*`RVa8^Y+`Ai c,T_jV P QOj$?4$LW P GW\$?7W\?`NOj?$?$?Z`?dlp?DP ?BV?a8?`a8^LW ?7W\?]-3?E@Oj?P ?E@?`J`RVOja8fYד`Ai gT?BV`Yד^WW\Y+S,T? `D?`J`QP P *`?BV?`NT$`>?>?D?`BV@ ?7W\?BV?0 ?@ ?7W\7W\>`?>?E@BVV :`?qL+?m?ilߠ?i+?X,?:`?WW\?WW\?*`@ I+?:`N `?t7?p ?w?_j? `?0 ?V ?WW\:`Q?D?Q7W\S,T_jeA`U@ `BV@ ?@ ?7W\Q\W P BVQZ``Ai `Ai U@NBV?4?>$4DRVT\W c,T^OjRV]-3S,T?E@?X,?`RV?V ?*`Q@ ?*`?:`S,Ta8`?P ?*`?$?`BVOjU@S,TGW\X,^`?RV `\W X,@ P Z`J``GW\U@E@$?`?:``J`S,T\W Y+GW\I+WW\Z`S,TNZ`Y+?4?GW\J`N?GW\?`Ai ?^?0 @ `?V ?k@?q?kc@?Yד?Y+?bV?N4$ `?0 ?$RV:`?e@?p ?k@?eA`?` ?T?N?:`J`:`?S,T?*``Ai ]-3Yדd^GW\E@DDT$`_jWW\4$D:`Oja^RVJ`DV ^E@LW ^kc@p cJ`T$`WW\?Q?E@$BV*`?0 *`?4?I+?E@V Q?X,?^ ` `?RV?>LW S,T>? ``? `?J`?BV>E@?@ ?Q0 T$`BV?4?@ 4QE@0 `7W\WW\T7W\NY+Oj@ >>*`OjX, `?`U@GW\?V ?a?Z`?J`?@ ?>?GW\?ilߠ?n?a?Oj?`Ai ?a8?4?`?Yד?` ?Yד?$S,T:`?BV?`?I+?f@ ?k ?d$`?V ?0 GW\0 ?J`7W\b[c@:`? `E@YדWW\TWW\[c@V DQY+?`?BVX,_jNGW\QbgW\LW ?I+?:`BV` d$`N `Oj:`?^?a8?0 D?$?*`0 LW >? `0 BV?N?g?\W QP ?J`?GW\LW T$`0 ?BV?N?LW *`\W Z`?$?a?]-3:`Oj?7W\?E@?`7W\:`? `?0 Qa8S,T?7W\D?T$`?^?U@?Q?]-3?S,T$0 BVWW\D?*`0 ?N?P ?>?T?dlp?bV?E@?$?V ?U@?`?Oj?b?` ?X,?@ `?E@?7W\I+?Z`?e@?h,?` ?@ BVI+`4Z`^?>?pAi ?s?V ]-3\W D*`N[c@QU@]-3?GW\?`Ai D]-3GW\>BVU@dWW\?:`?N?BV0 4?N?LW P T?Oj?Z`0 Oj?$?$7W\`S,Ti+f Q*`?BV?a?d$`?:`_jYד?4?Oj?$*`?$?:`?>? `T$``Ai N?J`?`Ai ?S,TJ`J`?Oj?X,?@ @ T$`N `?$J`X,J`7W\P P ?0 ?^?` ?@ ? `?T?N>GW\LW T$`OjWW\c,TP ?I+?4>?WW\?` ?^?N?LW ?` ?^?E@?P ?Oj*`*`?@ ?N?GW\7W\@ ?4? `?*`?Yד?WW\?*`DQ4?>GW\`Ai ?>?w"?|?dlpWW\X,@ >\W eA`P >RV?Q?c,T>[c@DE@@ >^bRV? `?@ $?LW ?S,T@ `Ai S,T? `:`J`?$T$`WW\alf 4?T$`?bV?f@ ?X,E@Z`N?4?N?>4DE@J`J`@ ?:`?P ?D?:`?*`GW\Oj? `?P ?T?$V \W U@S,TJ`:`$0 S,T^X,4?P ?I+P U@4GW\WW\BVE@V \W [c@@ ?0 N[c@?N?WW\?Yד?RV?]-3?n?n?Z`?RV?RV4?BV?GW\Na4?T>U@? `E@LW E@?D?Y+ `[c@0 ?h,?n?J`P BV@ RVadGW\$S,T?*`?QOjS,T? `DJ`0 T$`b^BV?I+?DI+RV?0 NWW\:`4Q4?*`P bVdlpc,TT$`?@ ?^?f ?eA`?GW\OjLW 4 `I+aaTRVOj?$?WW\?NBVE@?`*`RVT$`0 ?Q?Oj>T$`T$`RVI+0 ?$?`?0 ?T$`?RV`?*`NTGW\T$`Y+*`?J``Z`T? `?`7W\QYד0 ?`?*`?S,T?k ?m-3?Y+?V ?f@ ?bV?LW ?BV`Ai d$`?7W\?` ?*`@ ? `J`[c@U@4?T$`?V >T$`LW BVE@QE@?`$BVP 7W\>YדQGW\YדBV?@ DQ7W\DT$`[c@Q?Oj?]-3@ gc,T>*`J`:`DaX,?GW\?:`^d[c@X,U@*`?V ?a?RV`$>S,TJ`QaX,`BVV E@?$0 E@?*`?I+J`N0 ?E@?LW ?*`$ `?*`?`0 4?d?x,?t7?>GW\?$>T$`T$`Yד_jV 0 aV ?E@?`4?@ ? `S,TND$?0 ?GW\?>$?I+?bV?[c@?4? `$Y+Yד?E@?X,?@ ?Oj?QLW ^T$?LW ?*`QD@ Z`^YדV N7W\?4?*`E@@ $NTT$`T `? `T$`WW\E@40 V c,TD?S,T? `a8eA`X,OjWW\TLW Z`RV?T?TX,aS,TbVj`]-3?@ ?_j?^?U@?S,T`\W Oj `E@`?LW :`` \W P E@?I+?0 LW Oj*`?4?:`?4?>?@ ?:`?7W\>7W\?dlp?xw?r?`@ ?E@0 X,[c@Z`_ja8J`0 a\W ?`0 ? `?[c@?OjP Oj0 ?I+?0 V _jOj?>?I+ `@ `*`S,TV 0 `?P ?RV>LW `?4?D?$ `?@ `U@TV bbU@4@ V I+?0 `@ 0 ?0 ?GW\$WW\TD `?:`P j`f E@?7W\?I+?>7W\Ta8bE@?D?Oj?X,?7W\]-3Q?:`Q` @ ?@ ?@ ?4?@ ?Y+?LW TOj `P LW ?7W\`RVU@Y+U@GW\J`Y+[c@TGW\$ `0 ?4?Q?GW\ `GW\E@?$?LW ?c,T?QBV?I+?WW\@ >:`$:`?$?>S,TT*`Oj7W\?N? `*``?`?BVRVOj?:`?WW\?T?LW ?I+?$GW\X,^V I+GW\*`?$$`?4?7W\?>?GW\?S,T?NBVP `$QTD:`T$`I+$>$?D?N?GW\0 TRVGW\$?7W\NfeA`Oj?N?h,?h,?Oj>Z`dlpP ?RV?T?:`GW\\W `?X,?$*`?@ >U@Y+_j>?E@DN@ `Ai bBV?>?LW ?0 WW\]-3T\W `Ai LW >J`0 P I+?Oj?X,?E@`>>@ `?4@ :`?RV?4Oj?`?7W\?Oj?RV?@ I+0 `\W S,T?$$?BV?Oj?7W\>BV?`?Oj?X,?Z`?\W ?bV?[c@:`T$`J`TU@:`:`J`0 ?`4E@J`J`>?*`NBV?J`?WW\?Q?7W\?$?E@?4E@I+E@I+ `?*`4:`I+[c@^T$`I+I+V Y+D?4?T$`?d?` ?40 [c@^S,T\W [c@LW E@? `?0 E@0 GW\?\W ?n?>V 4LW LW `T$`aT$?S,T?V >LW ?0 4T@ *`@ ?>?DZ`` ?0 ?U@?Oj?P ?4U@` D?J`?>?` `^bV*`:`T? `?:`J`X,V $$_jRV?J`?J`?>?I+?`J`@ ?@ ?I+?@ ?>?D?T$`?BVYדS,T?N?>BV?$?0 :`?>$QZ`bVcU@$0 GW\`?N?Oj4J`?`@ *`?*`?7W\?*`I+T$`$T$`X,BVBVWW\WW\*`?E@?>?$?:`? `BV?@ >U@a8m-3f@ $?:`:`Y+^:`?Oj?q?R?L+?T>]-3Y+DRV@ J`$?P ?*`*`?LW ?4TTNLW ?:`?E@Yד_jD?D?GW\V dlpRV?D?Q?7W\NaS,T?4GW\WW\?`OjWW\YדNGW\Z`>?X,?Oj:`OjQE@?*`?4D@ ? ` `?*`YדLW ?WW\?S,T? `?BV?E@0 >?0 ?I+?4E@Yד^LW ?GW\?0 _jc,T4?7W\RV]-3J`4 `?J`?X,?T0 \W BV?`Ai ?a?E@?I+?Z`?E@S,TQ?4?:`LW Z`T$`E@7W\?0 ?$?:`? `YדZ`? `?@ :`[c@Yד?7W\?D?Y+?9@?dC@?ܼ?hw0 c,Ta8OjX,?e@?S,TI+I+BVGW\Oj?`?>4? `?4OjI+?4S,Tb@ TU@J`0 ?BV?>I+P ?BV?T$`$4?Q?N?0 ?`NY+U@WW\$?T$`?`DU@U@@ ?GW\?7W\TJ`?$ `?4?E@GW\S,T `?$?*`?GW\?0 Oj]-3E@?U@?Y+?D?BV?4 `?>`bV^?RV?` Y+Q$?D?Oj?J`?*`V a?$?f@ ?d?[c@?a?bV?GW\U@[c@D*`LW Z`]-3S,TD>:`$?LW ?^?NBVGW\*`GW\Oj?GW\?N?q8??w?QLW c,T^U@` ?T$`?w"?lW DD?`DU@[c@:`?bV?f ?J`?0 ?:`0 ?0 ?J`Q]-3*`BVV $?*`$?E@?J`BVI+?BV?I+>7W\?J`?I+?D?P ? `RVX,\W D?N?` `?@ ? `>?*` `YדT0 4?7W\?I+:`S,TP I+?`?>:`Y+c,TYד?4?GW\?D?Z`?OjRVU@E@E@?J`?k ?k ?DYדWW\?$?P ?*`@ BVS,TRV?D?U@?E@?N?Q?$@ V bVZ` `?GW\?*`NV TLW 7W\>:`?I+?J`N]-3GW\?0 @ U@?$?T$`0 @ ?E@?$7W\N`Ai T$`I+T$`?WW\?rF?bVGW\0 ?D?BV `V RV?P ?WW\$>$?LW ?X,4@ ?T?>LW ?>?:`?S,T?I+E@I+? `NQ?@ ?>?Oj?I+*`S,T` X,?:`?GW\`?V ?J`GW\I+Oj^Oj?*`?7W\?GW\?7W\>`*`?7W\?4GW\T$`_jaTD? `?N>dlp`Ai 7W\?7W\?S,T?_j?WW\7W\^U@?BV?Q `:` `4? `?P ?:`$?@ `YדN`GW\LW ?`?J`?>4DLW GW\?$0 [c@P 0 \W c,TJ`S,T_j0 ?Z`?OjE@RV0 ?J`?$U@Q:`:`?>?LW `?BV?$?GW\?WW\?$T$`S,TT[c@TNJ`?D?TBVI+?V ?Z`?4*`0 ?:`?P 0 T$`E@``7W\?:`?Q?E@?:`?*`@ J`T$`Yד7W\?@ >?E@?7W\DBVRVY+?$?Y+?T$`?P ?$:`?BV?RV?J`?N?0 DGW\WW\bV^D?:`_jcQ0 0 E@T$`S,TP V D?D?:`$? `0 WW\P ?*``?D$U@4?P ?N?0 BVWW\]-3T$`>I+RV `4aYד>_jeA`LW $T$`Yד4?T?T:`V *`?S,T?>NOj>0 7W\N0 ?T?@ Oj `?T?LW *`TY+J`$DP BVGW\]-3WW\?7W\?T?LW :`?BV?J`NZ`QRV*`?S,T?N?D?J`?*`4OjZ`BV?0 E@GW\?$BV?0 ?4?:`?DDT$`?:`?RV?$? `? `$?*`?BV?I+?E@@ P >DS,TI+?>?WW\?`^[c@P V NLW ` [c@DE@:` `GW\E@Tiדf RVDBV? ``?*`?@ ?44U@ac,TaV [c@a8NBVaX,U@d$`LW ?@ ?*``?:`?BVJ`aT$J`TI+I+P RVN?0 ?BVD?4?`Ai ?4Q>OjU@?$?J` `E@V c,TaBV?0 ?*`?@ ?E@?0 ?E@?N?*`?`:`[c@7W\?`Ai ?WW\ `:`BV7W\DU@$?Oj7W\I+?4U@0 ?I+?T@ Y+?$QN?*`$D0 @ ^^7W\?7W\?@ ?BV?Oj?\W ?J`I+LW V aBV?*`T$`U@*`4:`DT$`E@?4LW d$``Ai 7W\? `>@ ?>?:`LW X,I+?>?*`QWW\Yד]-3@ X,U@?>`YדBV?T?`Ai ?\W ?BV$BVU@@ 7W\\W X,4I+\W [c@E@TD?y7??g` I+I+V ?*`?7W\QRVS,T]-3S,T? `?`4?*`?N?7W\*`?0 ?[c@?f?Y+GW\?]-3?P *`>J`*`?J`?D?BV?7W\S,TX,` Z`Z``?T0 S,T?*`?GW\$BV:`7W\X,TOja^*`?D?J`?>?0 ?Oj?LW ? `?*`$Oj `? `Y+X,?0 $S,T^GW\?E@RV:`?T$`?Yד?>*`?$?4>RV?>?c?Z``0 `7W\?4?GW\DQ?*`?BV47W\?D?^?d$`?WW\`>:`?T?E@WW\P ?I+?:`GW\N$^?*`?1 ? ? \? `?:`$S,T?:`?4[c@_jJ``0 S,TWW\E@?0 ?@ 7W\Y+P ?T$`?hw?`Ai $?:`?*`?BV?I+I+Q?N?_j?Q$Y+aS,TJ`\W d$`BV?Y+?@ :`?4?E@?>0 T$`D$WW\S,T@ J`? `?*`$*`?D?> `?E@?V ?I+?`DYדU@?$?P `dk Y+?BV?0 S,TOj?BV?P ?*`?$40 ?7W\?*`? `?Q?U@7W\?>?@ ?*`?0 >S,TI+? `?0 $BV?:`?bV?eA`?Oj7W\D?$?X,?D[c@RV?U@?_j?S,T?:`?*`^N?B?BG?y7$0 RVc,TN?$4GW\4?GW\?0 `Ai c,T:`?:``I+WW\T?$?RV?I+`>E@@ ?E@?T$`7W\WW\?7W\?\W ?LW `E@Yד^?BV0 V *`?T?>4>P D>V 0 ?NBVI+?N?GW\?GW\?D*`?`?Oj?U@?LW *`0 ?LW ?U@?E@?*`*`GW\?`?U@?`fk P ?T$`?NRV` U@QT$`@ ?0 ? `0 :`>?0 ?OjP 7W\@ ?E@? `I+TYדI+?BV?E@0 ? `?a?jBG?]-3 `D*`?7W\@ f eA` `?Y+?V ?*`BVE@^d$`?I+?f@ RVk X,LW bVfZ`?BV?X,?@ ?:`?DE@S,T?0 7W\@ :`7W\$$?*`?*``BV:`?7W\?D?*`?BV?P ?:`?`?>$N`?E@?*`? `BV44U@N*`D?E@?_jOj?:`?*`>?I+?T$`?@ ?GW\?RV?U@?Z`?>TBV?RV?U@?T?N7W\4?Q?:`T$`N?P ?a?TE@YדWW\Z`^X,E@? `P Y+:`?D?4`*`U@[c@?GW\?c?N>LW X,Q?D?U@?LW ?P ?c,T?e@?J`I+D4>P dk@_j `? `P [c@X,V U@T$`frhw?GW\?f@ ?^BV^$?Yד?E@$?D?J``J`N@ ?$@ P GW\?*`?J`?I+ `TE@?T?V ?*`?$?:`?4?I+?LW ?>N?@ ?RV?GW\4?D?P 7W\7W\D?BV?X,7W\V *`:`T$?D?*`$GW\0 ?Y+?P V P ?J`?D?$?7W\:`J``$0 ?GW\?WW\?Oj7W\V LW `7W\P Y+X,4?$I+T$`E@?0 ?Oj?DP eA`^?Oj?bV?GW\7W\BVX,Yד*`?>?7W\?N?^?Z`:`WW\ `?7W\J`LW GW\`Ai ^0 *`TV WW\N?GW\?@ YדWW\?GW\?a?m-3?rV?ilߠ?DBV>:`$?I+?V ?`_ja8I+?7W\?BV?`Oj_jZ`4?:`?BV?:`@ D?I+?GW\E@4?D?$?GW\?Oj:`? `?RV?X,?WW\?Yד?Z`?Q`P U@N?0 ?E@@ I+?7W\?*`D>$>S,T` T$`?GW\?4X,N`Y+aLW DTV P :` `$4T`Ai D?GW\?>?*`$?0 ?0 *``7W\7W\?GW\?7W\\W bVLW ? `7W\TNBV[c@a8P :`E@4?E@?N4E@?T?X,LW Q?>0 GW\?I+?D4? `>P ?:`?BV `?_j?nmN?{ ?BG?R2?y+?a^X,?0 ?P ?T$`?GW\P \W I+?0 ?I+?D7W\X,TBV?`?7W\>*`?0 *`?0 NWW\*`?GW\?$:`?0 ?P ?^?eA`?X,@ Z``Ai Z`7W\?BV?*`7W\?*`?RV?Q?I+?GW\?BV?*`BVT$`BV?`LW Y+I+RVd$`cP E@TT$`7W\OjN?LW ?I+RVOj? `?E@?T$`?Q?LW ?4`?$DT$` `$[c@Oj?7W\7W\]-3bY+@ OjWW\*`?I+?@ ? `?*`? `? `?X,?[c@I+T?GW\?> `?T$`?LW $?LW ?BVLW E@N@ ?f?i?Y? @?W ?a?bV?:`OjQ?GW\?:`?I+?@ 4>4`?4?:`?BV*`Yד>?*`[c@` ?*`?RV?0 I+`Ai bP ?0 ?BV>:`$?BV?Y+?4Yד\W TI+`$NGW\?7W\?I+?D?P ?U@?T?Q?7W\4`@ V GW\`OjP ? `?7W\`@ *`?J`?I+J`:`?c,T?cBV^T7W\?@ ?BV`? `?0 0 E@TU@7W\J`^J`?7W\? `>X,a8Q?$?Q?c,T?e@?_j?:`4?$?>?E@@ J`?BV?4$?J`T?`LW DLW 7W\?iד?Q@??r?N ?@?q?I+?D?*`?WW\$\W >?0 `@ WW\RV?*`?> `:`T?*`?Ddj` `?T$`$S,TWW\\W U@?Oj``0 $?0 E@WW\7W\?@ ?`DS,TT@ ?0 ?0 `? `? ` `?7W\?$E@I+NI+?:`?4@ ?@ ?_j?Z`?LW ?@ ?E@?U@?LW 7W\?]-3?]-30 X,Oj?$?D@ [c@BV?DBV_jU@`U@aP `?$?@ LW hwa?`?LW ?RV?[c@?c,T?d$`?S,T0 ?*`?BV`4:`D*`4$?>E@^P T\W 7W\?*`?GW\?k@?|[?Ѐ?Æ\?@?_ ?yד?Oj?:`?7W\?` ?0 \W P I+I+?0 ?0 TX,? `?4I+I+4`?WW\?^LW ^?:`?N4$?`QY+ `?4$?7W\?D?E@?0 QT$`?$?RV?@ @ 0 ?J`?Oj?D?:`>S,T[c@I+$OjQ4?7W\?BV7W\N?`?RV?T$`?T?Oj?V ?^?Oj?$?@ ?LW ?T$`?X,?LW ?@ ?D?*`I+RV?$?I+Y+j`WW\?E@YדT$`?`?*`>DY+ilߠc`?LW ?I+?4?>?[c@?X,? `?4?LW *`LW @ GW\P E@?4?I+@ T$`7W\P \W 0 ?*`?E@?hw??&?W\?3?x?t$`?GW\YדT$`?S,T?7W\LW 4@ BV?D?P 0 ?BV?4OjI+ `?GW\?Yד?@ ?`?Oj?> `?I+?>WW\[c@?`E@>?`?GW\?X,?J`TYד0 ?BV?$>?I+?d?X,?0 ?:`?`>OjY+>?BV7W\J`?7W\?J`7W\Z`T7W\*`?7W\?E@?7W\?Yד?bV?D?0 ?N?4?GW\?`Ai ?Yד?E@LW GW\?*`?LW ?:``Ai kc@WW\T_jI+?@ ?4Q`Ai ce@Yד?`?Oj?N?0 ?Q?Yד?$*`?7W\$D`0 I+4?P ?V ? `*`?Q?D4?0 4D?c?zBG? z??w`?@?l?P ac,TBVGW\N?@ ?I+?Oj?E@?4?*`?7W\ `P BV?0 *`E@7W\:`7W\ `:`*`?@ 4^Oj?N0 *`E@:`?S,T?J`S,TN?E@?Oj4Yד0 ?T`I+?0 `BV0 :`?D?_j?7W\V 7W\?@ OjaI+?*`*`$0 >?P ?U@>? `?NDQ7W\I+:`*`LW $?N?LW ?E@7W\T$`BVE@^[c@NOjLW NX,bdlpU@?`?:`?7W\?:`?:`?Q?WW\?*`>?$?@ ?0 ?0 @ 7W\?D?U@?E@?:`?V ?RV?`?:`? `Oj?I+?qL+?}@?F?{@?k@?gW\?dlp? `\W [c@TLW 0 ?N?[c@?N*`>BV@ J`:`?I+?Q? `RV]-3X,J`E@>BVP ?:`?]-3?>7W\WW\U@?>?:`GW\?S,T?p @?j`c,TT`TD?OjBV?0 ?J`?c,T?>c[c@?0 $T$`7W\?>7W\P RV@ ?N?@ E@?@ ?GW\S,TX,V ^:`?BV?$?E@?@ 4?4?J`?7W\?0 BVRVZ`]-3@ $WW\dX,0 BVJ``?:`?E@?I+?:`?0 ?J`?Q?7W\I+U@TT$`J`?7W\?I+?:`?E@?7W\J`@ ?I+?7W\J`*`?` ?iד?Yד?`?Z`?k ?[c@WW\`Ai >? ` `?D?Oj?4? `DGW\ `0 ?N?a8?S,TQ_jJ`?*`*`Oj@ $?BV?U@*`TU@J`?*` `0 ?f?x,?q8?*`[c@7W\?`BV?LW ?_j?`7W\?D7W\@ ?P ?*`aa80 ?BV? `? `?$DY+WW\? `?WW\?@ 0 ?BVGW\?>?4BV?*`?*``?>J`eA`[c@@ $? `@ 0 ?WW\?Y+4X,P 7W\S,TaS,T*`GW\LW $?0 *`?7W\?Q?RV?I+0 ^aQS,TZ`D?*`` `?`J`T?>?TI+d$`^NZ`^?7W\?c,T?NWW\RV?*`?` `@ 7W\?J`?J`0 7W\?4?`GW\*`?N_j]-3 `?E@BVbVV ?7W\7W\S,T@ P WW\*`?0 `>?d?q?e@7W\N?4?BV?GW\?bV?_j>>?>LW ^BV?7W\4WW\Y+7W\?D?J`?BV?7W\*`I+?`?RV?`E@:`LW 4?Oj?0 `?7W\J`Oj?`Oj\W BV7W\4? `:`?X,?Z`?DOja[c@]-3aJ`?`?0 ?GW\?E@ `Oj$?P ?E@?7W\?4J`Oj?$4X,I+BV@ ?>?7W\@ 0 ?47W\Oj7W\DLW *`?:`?`?*`?N?`Q4N`?Q?*`E@:`*`@ V \W P U@` RV`?>?BVI+J`?GW\@ bU@>@ ?GW\?DGW\E@?>?Yד?^?GW\E@I+*`?:`?^?f?T$`I+BV?$BVWW\Oj?>?RV$]-3U@?:`?RV?RV?\W ?[c@?$`?BV$I+0 44I+Z``?S,T`0 ?7W\?BV?n?xw?k ?I+?`7W\?>?S,T?BV?7W\@ \W U@X,` GW\?0 ?7W\?Q?Yד?Yד?I+GW\@ ?*`D$?U@?E@`?*`E@Y+7W\?@ `7W\?:`?LW ?0 ` `?$?I+?P ?E@4U@P ? `?T?U@BVYד?4?T?BV?RV?BVY+U@*`7W\>Qa]-3T>?BV?7W\?a8?zw`?wi?_j?Oj?`S,T `? `?J`?:`T$`P ?BV?Q?@ $E@QP ?7W\?a8?`Ai ?BV?`?$?*`?@ ? `LW :`?>?7W\`4?$?E@?GW\?V ?[c@?4?P ?E@?7W\?Oj?D$I+I+?GW\?Oj?4:`?*`?{@? ~`?t$`? `U@U@?4?I+4*`?Oj?4RV0 ?7W\?0 ?RV?^?a?Yד? `0 >aX,?>LW E@S,TRV? `?D?4?$?$BV@ ?:`?LW ?0 >:`*`V eA`\W E@NTV E@?WW\?a?[c@?^ `bVE@?LW ?0 ?7W\$Z`YדLW ?:`?[c@?N?qL+?w??m-3?0 ?D?$?:`:` `?P ?J`P T?`?:`>S,TT$`WW\S,T?D?[c@?0 `?RV?GW\?0 ?T?>>?D?LW ?:`?S,T?Oj? `?0 ?:`?4?@ ? `?:`?X,?RV?D?>>`?Z`?^?`bVbV$T\W ?nmN?zBG?^Yדa_jBV>T0 ?4?c,T?_j? `?7W\?7W\?Q?Z`?V ?I+$$YדY+I+WW\S,T*`$? `LW E@?*`?4>^c,TGW\?J`?BV44`YדgW\YדRVf@ f@ P ?0 ?U@?RV?:`?@ DX,?BV?Y+?:`?:` `TJ`E@?T$`?7W\?f?QÀ?G?Z`Oj?7W\? `:`N? `?U@?U@ `7W\?:`?:`@ QD4`?U@?Z` `?*`?V $?Oj`?a?p ?}?` ?E@?BV `?I+?Oj``?4?E@?N?:` `P a$?f ?\W U@f\W ?>?*`LW ?:`?BVJ`4 `J`DU@\W 4:`:`?Y+?Z`?>?BV? ``?P ?RV?*`@ Q>?4?@ ?@ E@Z`$?I+?$?0 @ a8X,?$?>U@e@a8LW ? `?BV?J`?>RVa8BV?7W\LW P ?4?@ *`YדWW\RVP ?7W\?GW\0 :`OjX,0 $?E@` `?ilߠ?gW\GW\S,T4GW\4D? `?E@?@ ?*`?I+?S,T?I+?@ ?LW ?Z`?WW\?LW ?_j?d?T?V ?V D7W\?@ BV?w?L+? \?rV7W\4?7W\?`Ai ?_j$?D?BV?4?`N]-3$?S,T?$?d$`?j?p ?q?Yד?NY+>?[c@?Oj*`?`E@RV:`U@@ 0 0 ? `4 `?N?J`?7W\?`>BV?P ?RVOjX,?Oj?OjOjE@>U@>?@ ?`?$?40 OjS,T7W\?BV?47W\TWW\?:`?a?T$`?$*`0 ?BV?`Z`Y+GW\RVJ`4GW\Oj\W bGW\?7W\$``I+J`I+7W\ `RVRV?BV:`@ :`I+7W\?J`?BV4?0 ?X,?^?N?*`?Y+?c,T?U@?U@?T$`4 `?0 LW ?v ? ?}9?oBQE@?GW\?f?f@ ?>`?7W\?$?`?:`?*`BVTLW LW ?N?? ?B?QÀ?zBG?BVN]-30 ?>V X,?$$I+$J`ad`Ai RVBV>?>?RV?LW ?S,T?U@?DBVBVJ`bVWW\?Z`?S,TTGW\?0 ?4?0 @ $?LW ?T$`?I+?$?@ *`E@I+P ?*`?]-3?P @ TLW ?@ ?N*`?>BVN7W\DI+S,T`Ai N?D@ ^LW $TN?T$`?RVP E@?*`QN7W\7W\?BV$Z`P $J`>?N?Q0 ?$?T$`?>? `? `J`?a?~mN?y+?LW QQ4?^?d$`?GW\0 0 :`?$?I+`T[c@^U@?e@?>Ԁ? ~`?< `?e!?@?iד^Y+E@Y+hw`Ai 0 DTS,T[c@cdlpZ`BVD0 ?U@?^?P ?GW\?`@ 7W\J`X,Z`_jI+?T$`?I+GW\?D:`J`N?I+?I+?40 *`` `?I+?BVRVP ?4 `OjRVX,P ?`?4?>?P ?D?7W\?4:`:`? `7W\?`?U@>hw\W N:`?a?[c@?$?GW\@ [c@BV?Y+?P ?`?I+?4NJ`:`E@@ ?4?Q?7W\D?@ ?` ?T?`?7W\?P ?D?$ `V ^? `?Oj4LW @ @ ?BV?[c@?7W\QTV 4?d$`?N??y? ?b?q@ `$X,_jQBVI+RVYד\W V P `?BV$$?X,?]-3?BV `E@T$`U@U@Q4 `:`RVLW ?`?$`0 OjT$`4?:`?0 @ T$`Z`]-3E@?Z`?Z`LW Y+BVI+@ YדeA`N*`GW\?$?U@?T$`?>:` `?N?I+?N?\W ?0 \W GW\?>7W\?*`?]-3?LW ?E@?\W :`S,T?`?`Ai ?P *`?*`?*`$? `? `?>?J`?N?>?@ ?_j?f?]-3?D?7W\?@ ?:`?`?GW\?*`TZ`>7W\X,P ? `?N?dlp?S,T7W\?`? `?E@?^?m-3? ?U6`?K ?p?q?LW ?U@?:`I+S,TX,WW\D7W\OjI+4D*`?@ `>?*`N? `?d$`?f@ `aT?$?>S,TZ`*`?@ $?*`?T?>T[c@Oj7W\DRVY+aY+?J`?Yד?$*`$LW ?0 ?Yד:`aBV@ ^BV?WW\?Q*`BV?4?T$`?LW ?0 ?GW\?D?*`?LW ?N?*`?I+?J`LW 7W\?WW\`?4?E@7W\BVRVLW 47W\0 ``?0 ?BV?J`?[c@?a?Z`?T$`?LW ?7W\?``*`:`OjP >`E@?LW ?$?Yד?4Q?4?E@?4?U@?Yד?}@?_ ?1~??m?S,T?Yד?@ @ Y+f eA`RV7W\0 ?`7W\Y+T? `?7W\$@ Ta8?*`?y9?Ai ?adlp\W E@D?*`?BV?BV?Y+?T$`7W\`?X,?X,`X,\W T$`S,TLW `>T:`?BV?GW\?T?RV?*`?WW\?gW\?J`J`?0 `Z`>?T?BVLW RV?*`?Z`?OjBVE@? `?BV?GW\?$0 ?`>`Ai T$`?@ $?BV0 P :`?I+? `Y+T@ GW\:`7W\E@?*`?D$?J`?S,T?WW\?U@?BV`DLW P LW *` `4?:`?Oj?GW\?*`NP ? `J`]-3?@ GW\`?WW\?f ?wi?}-3?m-3?T?Yד?T$`?$J`Yדcdlp\W N `? `P X,4?RV?Z`?T?J`?>J`?v ?B?]-3dlpT$`J`T?E@?` ?Z`?T$`?>LW LW ?:`?GW\?@ 0 LW RVGW\?GW\?S,T `BV*` `?Oj?\W ?T?]-3?c?7W\N?@ ?E@I+GW\?$?:`7W\V :`?[c@?V >N:`44DP OjNS,TN:`7W\? `N\W 7W\?Y+?@ Y+U@D7W\?E@?BV@ ?`?D@ :`?LW ?U@?WW\?V ?D0 GW\$?I+?X,?Yד?7W\LW ?*`?T`Yד[c@Oj$7W\GW\?`?:`I+T?T$`?X,?S,T?Q?Q?N?DLW c`Ai TV U@J`BVV aD?Y+?` ?_j?]-3?` ?h,?]-3?^?gW\DaGW\?>?OjI+P NBVOjY+@ ?D?@ ?*`?*`? `?E@?S,T?@ ?$*`Q*`?S,T?>?`?DGW\WW\?>?T$`7W\^Yד?*`?E@P Oj?S,T?Z`?GW\?@ D4$LW T$`:`?@ `P DDBVE@?*`?N7W\bbX,>?RV?QE@D?4?`?>?V ?X,?Y+?Q0 U@T$` `?X,?bV?b?V `?E@BV[c@GW\?4? `?0 `?`*`*`?I+?U@?RV?0 T$`P ?7W\U@ncI+I+D>U@f h,>?Z`?U@?GW\?D?T?g?a8@ LW I+` S,T?J`?D `I+U@P I+:`I+bVa8P 7W\?7W\?Q?>$*`7W\ `:`Y+7W\?LW J`WW\?$0 S,T?`?I+I+da? `?OjBVP ?:`?V ?^?\W ?4:`?0 ?7W\DRV?T$`?E@BV7W\BV?*`?RV?X,?OjU@]-3T@ ?@ ?J`4E@?`?7W\?0 ?*`?V ?S,TI+[c@Y+S,T>?@ ?T?N?7W\?LW ?P ?BV?Q?U@:`?:` `GW\?$?E@?GW\?T$`?T$`?BVLW gW\Z`?P 4cV I+T$`LW NWW\^aD?Q?Q?>$?X,?@ abV^bN?7W\?$?*`NJ`?`?7W\ `4>TY+D?$?E@?J`*`S,TU@V LW I+RV?BV?X,P V ?Q?E@NDDWW\WW\@ ?GW\?GW\7W\I+>?`?Oj?@ I+BV? `4J`N7W\?N?S,T?*``*`?P ?\W ?X,?Yד?Q?4?>?`$?@ ?E@?``7W\T$`d]-3?LW ?Y+? `0 @ Z`Z`TV *`?N?I+?X,?gW\?c?U@?Oj?$? `?RV?Oj$BVE@?N?GW\?:`Y+Q?E@I+*`Oj^^]-3BV?*`7W\?S,T?j`?gW\?[c@?*`4?LW 0 f@ ` Y+dYדGW\Oj`?BV?$$?4?0 $$?GW\?Yד?U@?D:`J`DI+4? `?S,T?X,DBV?T$`?>LW I+T$`Y+0 ?Q?V ?E@?$OjY+QY+Yד>DX,LW BVD?GW\?WW\? `E@?*`\W P ?`?4?S,T?T?@ ?BV `LW $?D?4*`Ojaiדc?0 ?U@?>?@ ?$P :`?*`QQ?>?GW\?S,T?e@?a?`0 ?>?RV?]-3?]-3?RV$Z`WW\>BV$?0 NWW\I+OjD$J`T\W Yד?BV?Oj?e@?@?"q ?|?b?J`BV? `$[c@J`BV_jX,S,T_jT?*`?GW\? `J`0 ?I+?BV?D?@ 0 `?D?BV?0 ?$?@ ?BV `?0 ?LW ?$?`?7W\*`?`?D4BV*`E@E@$?*`?>?7W\?GW\?Oj>Z`T$`Oj`?E@N`Ai J`GW\N?J`?WW\4J`?E@a`Ai LW N7W\$E@GW\RVY+P :`?`?0 BVV YדS,T?0 :` `?*` `?I+?V ? `@ ?0 ?$?T?U@*`N? `?Oj?LW ?LW ?X,?S,T>TQTJ`J`[c@S,T0 @ 0 ?0 ?4?4GW\:`?RV?E@?w`????eA`?\W 4N`I+7W\GW\7W\J`b` P 0 E@4?@ ?$?:`?LW 7W\Y+TGW\> `?I+?DGW\I+0 V ]-3GW\? `?4*`I+*`?4?P $_jV 7W\?>?T?7W\7W\?7W\?Oj?Yד?X,4QDZ`\W ?0 ?GW\7W\?>?^NQ `:`0 ?4LW ^^X,S,T `?E@*`BV?`?`*`BVI+?J`?D?0 ?4?4?7W\? `E@GW\?4?S,T?@ DGW\?`?Q?U@?*`E@N@ ?$GW\Yד?*`?Yד?GW\?D?P ?Q?J`D0 ?D?$??N`?,?`?jBG?g?I+GW\?>7W\GW\ ` `$RV_jS,TS,TV @ :`BV>Q:`?P ]-3X,@ LW T `?4LW T$`WW\f@ dJ`*`@ RVN `?RV?f?:`f ` GW\4?7W\?4?7W\?S,T?Q?I+?I+?@ ?J`?0 \W [c@ `*`D?LW ?ilߠ `:`?E@?0 ?>?Y+?Y+`^^T$`S,T:`?`7W\ `?J`?7W\0 $? `?I+?P `WW\U@? `?GW\7W\P 0 ?>?LW ?E@>P 0 ?BV?P ?Q?4@ NQ?V ? `WW\?*`?U@?4?0 ?4 `TS,T0 E@??J?@?ԏ?i+?e@?LW `?Oj*`GW\? `7W\Q\W Q?GW\?`T$`GW\GW\RVBV>?P ?`X,N? `N_jE@?:`? `E@^D?D4P N>?0 ?7W\?WW\?g?LW ^T$`DOj@ `?>?S,T? `QGW\?0 ?V ?NE@4?BV`@ `?e@>@ ?BV? `?$?T$`?WW\?$RVLW $7W\7W\`?GW\?E@*`?J`?I+?BV$[c@c,TWW\?`?@ @ E@?7W\?BV?`$DI+ `?J`?Y+?P 4E@4I+*`?RV`aRV*`GW\:`I+X,E@QY+$4?uw2@? ? X?+?f@ ?\W $:`?$NGW\$TX,P ? `?V ?7W\N7W\BVN?BV?Yד?U@?RV?>40 `I+Q$$?BV?:`?7W\?e@?i+?> `?BV?`?D?J`?T?:`I+J`QQ0 ?*`?RV?]-3?0 S,TRVI+$? `$?4?D?*`?*`:`?DS,T0 ?4@ *`?D?D?$? `?E@?P ?BV?4?7W\?GW\?U@?*`RV?Oj:`E@X,RV`?7W\?:`?`?*`?$7W\LW GW\$` `?>?$I+*`?I+?0 ?D:`` X,GW\GW\@ \W I+>T$`?7W\?U@?J`?r?p ?w"?i+?Y+@ @ 0 TU@\W dS,T?$?:`?@ BVV > ` `?T$`?a8?U@?4?>?Oj?@ 4? `?S,T?QE@Z`>?:`?^?sb?q?:`?`?Q>GW\?>GW\7W\@ U@[c@7W\?P ?P ?X,?`Ai ?LW ?0 ?>>T$`N@ *`$$?4`@ J`?$:`WW\:`?>?`?@ ?P ?LW ?>?BV?$ `?J`?`X,>?*`P BV?I+?>?$?4?:`?RV?>0 $BVWW\LW ?4?$>*`@ Q4?E@?GW\?BV?@ 4TRVLW BV?@ ?:`S,TTE@WW\GW\?LW ?>?BV?bV?gW\?b?J`E@?Oj?`Y+h,fJ``@ `$QN`?*`?>?GW\?`WW\Z` `?0 *`?Q?d$`?[c@BV`Ai X,0 ?[c@?p ?dYדX,S,TS,T?:`:`^V Q]-3WW\?D?[c@?D?*`?I+?E@?V ?a8?J`LW LW > `?$?*`?*`0 ?:`?@ S,T`Ai BV?*` `?4?>? `*`?`I+Z`? `?GW\NBV?4@ ?4?` ?P @ P S,T*`?I+ `D?`@ aU@?D?D?*`$D0 ?0 ?BV?`0 4GW\QBV?BV?J`@ WW\P YדcY+0 ?@ ?P ?N?:`E@Yד4?X,?GW\X,c,TT$`$J`V ?S,T?0 LW @ `GW\GW\`\W lW `Ai *`?$?N?S,T?>N\W Q?>?Yד?$d$`a7W\LW OjLW cbV\W Y+I+?@ ?GW\J`YדE@?*`?Q?Y+?7W\GW\@ 0 ?BV?LW ?D `?`?P ?I+I+Q0 *`?BV?@ ?7W\`NE@Q^$?Q7W\?Y+?RV?Q?X,U@X,\W V NZ`RV?I+?`` U@?@ ?$7W\?$?``4*`?$0 ?0 ?T?0 GW\?BV?D? `NS,TS,T\W Z`J`:``?*`?*`DWW\J``Q]-3LW ?0 ?>`GW\0 ?J`?LW 0 7W\?`NT$`?>? `aT$`?E@?BV:`WW\P ?E@?0 Y+T$``?*`E@7W\?47W\QJ`T$`aaWW\@ 4:`7W\S,T_jP :`LW E@`>QI+ `?:`?7W\S,T?4?>0 ? `I+7W\?GW\?BV?7W\`\W ^NN$?D`?7W\?`Ai ?]-3?Q?:`D0 ?0 LW WW\Ta8Z`?N?P OjLW ?`NY+:`$@ @ GW\>$D?@ ?a8?DQ*`?4? `LW Z`N?$?DOj@ ?LW ?Oj?``WW\bP ? `7W\4?:`Oj@ ?>*`?D0 WW\?$?RV?>?Yד?`^bGW\?X,?I+WW\RV`?BV?P ?J`?>:`LW BVDOjJ`?Oj?:`GW\:`0 P GW\ `:`GW\>$ `DP BV?:`?4]-3`? `@ ? `?0 OjQ``?*`?7W\Z`cGW\0 7W\?7W\?7W\?4?Oj?S,T?OjLW ?D?T$`>BV?4S,T` ?LW 7W\BV$QS,T?*`? `RVTGW\*`7W\X,E@?RV0 c,TV *`>GW\U@Z`E@?@ ?Oj?4BV?`?Oj`Oj?`?*`WW\Q?LW ?4S,T>?4DS,T0 ?*`GW\Q?*`?$WW\I+?>?>?U@0 Z`J`?BV?RV0 a\W I+>?*`$?$?I+?>?4?D?RV?]-3?RVDI+4I+@ `$?$? `OjV D?D?^?a8?X,?$Q?0 ?BV?I+?Y+?`OjDBV?7W\?Y+?`Q0 7W\BV?GW\?J```?E@?P 4X,`?7W\S,T7W\?TE@dS,T `@ @ *`*`?>?Y+?>S,TN?`?7W\7W\_j^ `@ aY+7W\I+WW\V >?`BVP 4?7W\?I+?$X,[c@7W\DWW\? `?T?*`?\W ?t7?hwND?I+$YדY+ `?$U@T$`0 J`7W\?Q?47W\?E@?LW 0 WW\a8^N0 @ T$`Oj?`?>?J`?:`?I+?T?E@?D?4RVZ`RVGW\0 ?$:`a8a0 ?Q?\W ?\W ?RV$P ?$?T$`?T?_j?eA`?T:`?Y+?S,T?0 ? `J`D?Oj?:`N:`?7W\?$OjZ`7W\RV0 ?J`GW\\W GW\ ` `BV:`?I+?T$`S,T@ ?7W\?4$P P ?*`?:`BVE@:`Oj[c@RV?:`?@ WW\a$?V ?P ` `?T?V GW\]-3:`*`?:`?}?`? ?BV?J`I+RV `?E@?0 WW\Z`@ OjOj?@ ?7W\0 ?0 `P NBV7W\?0 ?J`*`]-3Oj?@ E@@ 4?I+?P I+YדRVV S,T7W\?7W\?N? `E@?$?`Oj>?D?@ $? `:`Y+BV?S,T?WW\?V ?WW\?I+?J`?U@?0 >?0 ?@ ?7W\Oj `?V S,T? `OjTGW\?4?@ :`?GW\?7W\?E@?RV?LW ?T$`?NT` E@BVJ`>*`?0 ?4?@ ?N?BV `7W\GW\RVU@P WW\Y+?@ ?[c@?LW ?7W\?bV?s?pAi ?:`Y+P @ ?]-3????T$`?*`?:`:`?$?I+?:``X,Z``7W\T@ >QNI+BV? `?7W\?0 ?@ ?I+7W\^D?QV Oj$?J`?@ WW\` U@J`?`?N?T?Q:`Oj?E@?Q?4?@ ?@ ?I+?\W ?\W ?WW\?I+QD?I+?E@0 @ ?Yד?f ?Yד? `?*`?I+?N?0 GW\?>?^?$GW\?BV?7W\BV7W\$$OjD?E@?Z`?c?Z`?D?^?` I+bT$`D7W\7W\BV?4?Oj?Oj?S,T?J`:`OjOjTQNS,TBV? `@ D?7W\?Oj?7W\?]-3?q?oj?S,TI+I+?Q?n?wi?w?f@ ?:`?:`?4J`Z`RVOj@ ?J`?>E@0 ? `BVP D?`?$:`I+BV:`Z`GW\?S,T?7W\N@ ?*`D:`*`0 ?`?`?$T$`P ?:`?X,?tlp?sa?uw2@?4?D?$OjOj `?U@?d$`?a?I+?Q?a8?bV?DOj`?S,T? `GW\?0 ?J`?J`?:`LW TJ`WW\WW\ `?S,T?Y+?$I+?T$`?gW\?Q0 `@ E@ `DP ?`?Oj?Oj?P ?`V Z`Y+\W S,TRV\W @ ?S,T?Oj?0 ?0 ?0 $RVGW\?N?X,?Q?$0 ?bV?t?e@E@Oj40 ? `?7W\?`@ OjOjD?$?E@? `? `?T$`?X,?$N@ ?BV?:`:`I+D?@ ?P GW\RV?D?BVI+QU@X,GW\?0 ?N?LW ?BV `T$`P @ U@7W\?$`? ~`??@?w`??b`?-3?q@ @ ?*`? `I+D@ BV?BV?T?0 ?BV?a?_j$Z`Q?`J`@ ?GW\?X,?0 YדRV?`7W\Oj@ ?4?J`J`?J`?eA`?_j?Q?J`4RVDGW\[c@S,T?BV?^?V @ YדOjRV\W P S,T` 7W\?[c@?WW\?LW ?E@?4*`WW\_jT$`I+?0 ?J`?Yד?p @?[c@GW\?@ ?N4E@@ ?S,T?q8?qL+?DP 7W\GW\T?7W\?`Ai ?RVJ`^T? `?D?BV?*`4?I+?]-3$U@?4?E@I+\W d$`dlpJ`?E@?N?T$`?a?TJ`:`?$GW\?GW\?S,T?c,T?$???il?i?i?y?"q @ $? `*`0 Oj^@ ?I+4D?@ `V T>?BV?T?4$?Q?\W ?`Q`?GW\? `E@>?I+?a?_j?D?I+?V ?BV`?4?4:``?0 P T?_j?sa?iד0 J`?>`Q`7W\WW\$?Oj?>?D?J`?>?:` `DJ`YדQ?$:` `?U@?7W\?X,?I+:`@ RV?Z`?Ā?~?S,TYד:`GW\I+?T?[c@7W\` c,T`Ai T$`D*`U@LW ?0 BVI+?LW ?N*`DT$`U@?`?Oj?0 ?@ ?bV?^*`?4?DQ?BV?Y+?eA`?@?B?x?H?@?O?;- ?lߠ?RV*`BV?7W\?J`?I+ `Q$?DI+Q>WW\V ?:`?Oj?S,T?` ?V ?D?[c@?^?7W\?:`J`TD?U@?i+?eA`?Q?>?7W\@ Y+E@?LW ?I+?BV?S,T?4?0 ?q?~?s?BV?`?N*`GW\?BV?4D? `?4*`?@ ?GW\?*`?@ ?E@?LW ?P >Z`TT$`I+*`RVI+?0 J`>?I+P *`?sb?sa`Q?D?I+?Q?^?I+S,T^]-3]-3\W YדP >J`S,TQP `?Oj?$>?>?E@?*`?GW\?RV`Q? `?:`LW `?0 _jOj?@ ? `?9?p ?G??n?(g?@?N?TGW\T$`?BV?[c@?Yד?I+0 >GW\[c@Q*`RV>?U@?D$?E@?@ ?`?N?J`?`?BV?E@4D4?RV?Z`?J`?:`?0 ?7W\?0 NS,T?@ ?Oj?7W\?GW\?*`?`?n?y9?m?:`:`\W S,T?0 $J`?*`?*`?T$`?TGW\Oj?4?a?RVLW WW\S,T?$?I+@ 4?*`S,T*`?]-30 ]-3?*`?@ BV?*`?Oj?LW ?RV?BVI+TV [c@T$`BVLW I+?I+?\W ?DOjT$`*`?`T$`_jE@?$?*`?Q?0 YדU@:`RVGW\ `[c@Yד?$*`?k@?7?\@??a ?@?"`??>V U@?I+?Y+?Q?4DP Y+` E@?7W\7W\$?7W\RV`Ai LW :`BV7W\>`?E@?@ ?7W\?N?E@?:`?:`DI+?E@?D?0 ?U@?@ Q?Oj?:`?$GW\X,?D?c,T?GW\GW\DT$`aRV$QX,*`?7W\?E@?Yד?WW\_jilߠT$`?S,T?E@E@I+7W\?T?`Ai ?:`?7W\?NE@BV?T$`?4T$`RVJ`?*`?Oj4 `S,TY+BVP _jOjGW\N?E@?[c@?7W\U@X,D0 QbVc,TX,LW $?S,T?U@*`4?@ >RV:`GW\GW\?>?GW\?Y+?k ?k@?rF?QÀ?<?xw?bV0 T`?U@?N?`@ LW 0 7W\TBV?4$>I+[c@Y+7W\?`4@ ?4?I+*`BV?*`?>?44\W E@?Yד?E@BV?P ?P E@?*`?X,?D `J`Z`@ ?@ BVT$`@ @ P >`P S,T?I+?GW\?:`?*`?`RVf@ Y+ `RVYדE@:`?BV?QI+T `E@Oj `*`E@QS,T?0 S,TP :`T$`LW ?`GW\WW\NQY+S,TDQ`Ai ]-3LW :`? `?0 N`Ai V E@4?I+?V ?GW\?GW\?LW 4TI+7W\ `? `I+Q?7W\?bV?iד?d$`?S,T?S,T?^RVQ?J`?WW\?`DP J`?D?E@LW RV*`?$?$$7W\?0 ?E@?D?J`?BV `?0 ?D$E@>*`:`RV?`?Y+T?4?E@$?I+?T$`7W\S,TJ`BV?`?E@4Q7W\`I+D?` `?D?T$`?P :`S,T?7W\?Q0 0 ?0 OjV LW T$`GW\7W\dilߠU@0 $7W\NLW QZ`P J`Z`P $7W\$*`LW J`T$`aJ`?LW ?`Yד^BV?0 ?`?>4BV?`7W\TD ``?$BV@ 7W\0 ?7W\$c,Tk@\W ?GW\?]-3?N?*`?P ?RVX,U@?@ ?@ OjU@V LW ?GW\?I+E@P 0 ?GW\?WW\?N?>?J`?BV?$?P ?T`J`?$?RV?N?$ `?*`?`?BV?D7W\BV?*`?0 ?7W\? `TY+I+:`*`?`$GW\>GW\\W V ?$?J`?GW\?BV?GW\?T?*`Oj?I+?f@ ?Y+?E@?S,T?D`DV I+4^dlpLW ?D?Q?7W\D$? `I+I+BVN@ ?4?BV?0 >E@@ ^^?WW\?j`?U@?@ ?E@?4?:`?GW\N?*`?X,7W\_jLW :`I+0 4BV? `?*`?7W\?V ?@ _j` ?7W\?a?V @ P ?*`?BV0 Q`>]-3^Y+GW\?D?I+?4?0 0 *`?E@?0 E@@ 7W\`?S,T?]-3?0 P ? `?Y+?GW\LW LW `? `?7W\?>?`?0 ?E@?@ ?0 J`Q`?E@?>7W\J`*`?0 `7W\LW [c@V :`?:`$Oj?0 ?P ?J`?e@?]-3?D?I+?:``7W\D?@ $:`? `?BV?Oj?:`7W\?@ ?U@?>? `?@ ?:`?0 ?BV?GW\?$4?0 ]-3N?e@?f@ `?S,TBV?V ?d$`?>X,?4?aT$`?BV?N$BV$?:`?S,T?a?@ ` T?[c@?gW\?Z` `$?Oj?Y+?I+LW >>U@[c@Y+I+?7W\?@ Tf@ ` Y+_j]-3N?`?WW\?` ?T$`?:`?GW\?BVY+i+` I+4?*`?0 ?E@?S,T?D?@ ?$WW\T$`?T?d$`?\W ?BV?*`?N?RVI+I+E@BVP S,T?` `Z`@ ?S,T?7W\?$?T?N?`:`S,TOj$?4?E@?E@?I+?>?`?$@ V >?@ ?N?GW\:`J`LW WW\S,T?` `V ?d?RVZ`QS,TQ?]-3?i+?7W\`Ai 7W\?Z`?*`J`?E@?Q$GW\$?BV?S,T?V E@g]-3?@ ?LW ?$?$?E@?N?LW Y+GW\?`*`S,T^V J`TOj`TjBGiד[c@OjRVE@?E@?Z`?^?^?]-3?X,?*`Yדa8TE@4?@ ?7W\>? `?J`?@ ?:`?4:`0 ?I+?P ?Oj?T$`?V ?Yד?RV:`U@Oj$?$DJ`?J`?S,T? `?N?Z`?0 *`?0 ?`$Oj[c@I+?`?`?0 ?$?@ ?D?*`*`RV^T$`DI+ `?RV?7W\\W d`Ai ` Yד@ I+T$`?$?^?S,TDQNV Oj?I+?S,TE@bVS,T?:` `S,TNBVBV7W\GW\E@?:`?E@? `*`T$`bVN?I+?*`ND4>S,T_jLW `RVaWW\*`GW\S,T? `?E@I+^BV?N?D?`?Oj?[c@?WW\?V ?Y+?U@?I+?7W\?4*`RVBV?LW ?7W\P BV?GW\?@ :``?RV?T:`[c@>?S,T?Q?>?4?`*`:`?>?*`?*`?T$`?Y+?_j?j`?b?0 ?Q?>`LW S,T`?$`?0 `Q@ ?@ ?*`E@N:`4BV?:`?^?RVQ\W N>?$?@ >Q`?Q?X,?GW\DOjGW\D4$J`S,T@ ?4?0 @ U@Z`Oj$7W\0 ?BVTI+`>?U@?QI+YדND4T$`N:`NS,TV \W 4?X,?LW @ ?`?WW\?GW\NGW\?P ?X,?BV?4?E@?BV? `?:`?D?D?7W\OjbVP ?BV$WW\E@?I+?@ QLW ?U@?[c@E@`Ai :`?N?$LW 0 ?Q?T$`?4?7W\?0 ?4?:`?`?Y+?lW ?]-3@ ?GW\?` ?Q*`S,TRV `?@ :`\W J`?BV? `N7W\?Oj?Oj$E@?0 ?^?a?>7W\:`BV?@ ?Yד?:`>?7W\?GW\?BV44?$0 7W\`?$?Q?T$`?I+?4D^Y+?*`?LW ?>?7W\@ X,`?Z`?I+E@$?GW\:`_jX,J`P Q?4?:`T]-3T$`J`?D?^?J`J`Q@ 7W\T^E@?Oj?@ J`N>RVU@*`E@@ J`V 4?7W\I+U@:`?:`?0 I+Oj?*`?E@?BV?4>S,TLW ?0 ?4GW\E@?$?4?:`?`GW\?*`?^?DJ`?*`?N?$>QN? `?$>I+?GW\?D?*`?7W\?BV4U@U@I+?>?RV?7W\?:`?4X,Yד?*`?4?`?I+?7W\0 0 4?`?@ 4E@47W\?`?WW\?T:`GW\` a?$?V ?D?`0 N?^?X,I+U@?4?I+:`E@RVgY+ `?7W\GW\S,TI+*`?D?@ GW\TX,` U@J`aa `?>OjT@ QU@4DU@? `?Q?>?7W\OjD? ` ``*`DDBV?`?WW\?P >E@>I+J`T$`aY+$?E@?S,T?RV?@ ?E@?LW ?`*`4RVP ?*`?:`?`?4?*`>LW 4?E@?0 *`?LW ?Z`?GW\D\W ^S,TN47W\GW\?bV?u@?dlpV U@7W\?>?V ?0 S,TP J`:`?`BVWW\RVE@4?`J`LW @ P S,T? `?0 I+@ ?*`:`E@?LW ?_j?>Q?V ?S,T?J`4fY+Y+S,TI+:`0 `? `Oj^E@$U@LW V bGW\?7W\*`:` `>E@:`T$`WW\?E@?Z`?*`I+U@X,*`?7W\44$0 7W\T$`V ?:`?J`>*`?E@?4@ P T$`S,TE@?0 ?P ?T$`?a?d$`?T?$?BV$[c@E@?WW\?Y+?>`GW\WW\0 ?RV4Z`?N0 OjQLW :`$?4@ Yד?kc@?w`?p ?S,TV BV?BV?J`J`_jT$`RVP QE@?@ `Y+T$`*`? `?$?$?$?4:`WW\J`?*`$D?:`?^?U@I+WW\D `?>?*`V :`ad$`Q?`?4?*`0 Y+]-3? `?Oj `*`?`GW\S,T@ ? `0 GW\GW\7W\@ TOj?:`?>N`Ai f@ bV:``LW D:`?E@T$`k Yד?GW\?@ ?*`?GW\?@ BVRV0 ?`:`0 ? `?*`?a?k ?V `?D? `J`?*`?Oj?4*`4$V N?E@RV>N[c@BV?$$*`?`?J`*`b?P ?~7?{ ?QT$`4?:`7W\` ` E@E@N?`?>4?P :`gW\` ?`?$GW\J`4?>?E@?*` `*`7W\0 `?D?WW\?>U@a\W GW\4J`?I+P ^4?D?D?0 7W\QI+?BV?S,T?D?`47W\?4?`D0 4T$`TBV7W\ `?4?`>DRVd` 4LW ` U@I+?RVGW\lW a?N?WW\?$>?4Y+N?J`?E@?0 ?*`?$?[c@?d$`?BV:`?4`?0 P [c@0 ?0 ? ` `V Yד?4?P ?>RVU@? `:`?*`?D?>:`aV ?WW\?Yד:`N? `?4P bVU@*`E@QBV@ OjLW @ X,f ^4I+^a8X,?$?WW\?RV `QI+7W\WW\X,?LW ?` ?>NI+ ``@ ?J``$?BV?*`0 4:`0 ?4?I+?GW\?@ ?$I+D?E@WW\>?D$P Q>?GW\?LW :`Oj?$?>NLW ?*`OjcYדOjE@?`@ ]-3RV?D?Z`?4>?n?}b?iדGW\?*`?T?P ?T?Yד?`Ai ?RVBV$?GW\?4?:`^[c@?Q?DV U@U@Q?@ ?N?`?`?7W\?@ ?*`OjE@?[c@?b?DGW\P LW E@@ $*` `?$Oj\W D@ \W YדQY+^^\W Y+T$`>?$0 OjT$`N?0 ?E@4V Y+:`]-3b?*`?Yד?> `?E@?RV?BV`?*`0 ?*`?`V YדBV?*`?BV?:`0 BV>OjQ0 LW _j@ ?X,?QDV @ ?E@?7W\NQ?:`?WW\?>>4I+RV:`0 BVBVBV:`I+GW\?P ?GW\?D?|[??Gp?OjP ?GW\?S,T?[c@?dlp?bV?$LW ?T?b?J`?LW ?NQ*`?c,T?:`e@`Ai >?4?N `T `?WW\?T `T$`@ ?_j?g?P NOj:`LW GW\NT$``DY+@ I+a8V $>LW NNI+D?4?T$`?LW `4?:`?S,T?>P Y+Q `?7W\LW RV?:`?4LW 0 ?LW ?Q?D`0 DGW\a8Y+?$?>? `?$?*`DZ`V I+NT$`Z`Z`:`?N?N0 E@?$?E@? `DJ`? `?X,?QJ`X,@ ?D?LW ?BV?GW\?>$LW ^?:`?$?i?$`? ?I+bV?7W\?[c@?_j?`Ai ?RV@ ?lW ?rF?`Ai ?LW ?E@I+?`?bV?LW S,T7W\?I+?Q?I+>N?BV?RV? `>:`E@BV? `4]-3`Ai S,TU@T$`LW ` `Ai ?*``^LW N@ ?GW\?N?>?*`?`E@Yד*`?Yד?:`X,RV?BV?Z`?S,T?4:`>:`P D?E@?`GW\?*`?LW ?I+?I+7W\:`?40 U@GW\?$0 I+$?I+?7W\U@Z`0 $Y+[c@> `0 ?`?@ ?@ ?>?*``E@YדU@?>?J`@ LW ?0 ?T?E@? `?Oj?T$`0 DYדBV`I+?q? ~`?wi[c@d?4?`Ai ?`Ai ?J`@ Oj?LW ?rF?uw2@?a:`S,TE@?Q?Y+?T?X,?Y+?S,T?7W\E@$?Q?*`RV4?E@E@f@ i+dd$`aI+>D>U@T?E@?$aS,T?Oj?LW ?*`*`BV$LW bVD?T$`@ d$`Y+?BV?Oj?RV?N?*`*`D\W [c@0 *`?*`?$?RV?>*`$?D?BV `:`N[c@[c@GW\?GW\?RV:`U@?$?LW I+LW ?Q?GW\S,TBV?S,T?J`GW\T$`J`T$`d[c@?`?4?`?E@?GW\?>?`@ ?$?J`>Q>I+I+? `?7W\?N?J`V cS,T?I+?OjOjJ`?@ ?dlp?g?NI+OjNJ` `?I+?RV?RV?WW\?[c@?@ TN?44RV `?LW ?*`P _j^U@GW\? `?7W\?$?7W\@ `V P ?LW ?V ?*`NV acN7W\X,>?OjBVZ`>`0 ?>?GW\?>?D?P ?@ P [c@LW 7W\0 BV[c@T?GW\?BVD0 ?0 ?7W\0 RVYדYדT$`4?E@? `J`?@ ?Yד?*`?`?a?U@V RV?Oj?GW\WW\aLW :``?a?i+?E@*`?E@`@ ?GW\?J`?@ ?LW $T$`I+BVP `?Yד?V QdI+?I+?:`$$*`$`:`@ *`4OjJ`?`0 7W\BVBV?GW\?a?S,TT$`^@ 0 E@$?7W\?RV?[c@?D?N?I+4D:`?$?GW\$N0 ?$4>? `?`DU@abV>?7W\P N?7W\$@ ?:`?0 ?$?J`?:`7W\?BV?4*`7W\*`*`? `0 `Ai `Ai ? `?@ @ WW\YדI+ `*`4:`NTGW\?`D?*`?Q?0 ?*`?Yד?S,TDJ`?>?S,T?$LW ?$?^?p ?~mN?|W ?Z`NI+Q?RV?`Ai ?T$`?RV?>DD7W\LW Oj?$?I+7W\U@`?Yד?\W ?@ 0 ?>?7W\4S,TQBVP N?D?V ?GW\I+Oj? `?X,?U@BVYד@ `BV7W\$?>?U@? `I+?N?RVGW\S,TI+?U@?ND `?S,T?$YדY+>`?`?$?GW\?:`WW\Y+?*`?7W\?E@?@ ?4E@NRVS,T0 ?BV?7W\*`?7W\?BVT$`_j`?@ T\W ^TI+BV? `? `I+GW\ `7W\E@>*`*`?`?:`?0 `?Oj?X,?BV?V ?m?w"?\ ?|?]-3E@?@ `U@`?N?@ `@ BV4``DRVJ`:`GW\E@?BV?WW\?GW\?$?BV?@ ?:`?I+?47W\DT$`P ?J`?_j?]-3?T?BV?$?0 ?GW\$S,T>$BV*`GW\LW ?LW ?@ Y+J`?$:`40 4?P ?Y+?$$?@ ?`S,TZ`P @ ?4?Yד?\W ?I+:`Y+LW ?Oj?RV?D?Q?7W\U@S,T? `GW\S,TGW\?*`?Oj?E@*`?$?GW\N]-3?BVRVX,V P RVJ`?0 ?0 D4?$*`0 `@ J`?$?N@ WW\?7W\?P DD?7W\?@ ?a?pAi ?oj?q?pv ?S,T`?LW ?*`S,TD?D?:`Q]-3GW\$D?I+?`D:`0 BVGW\OjP ?`?Q?7W\?4?WW\?Oj:`OjT$`E@?GW\?U@?V ?T?N?P ?7W\> `J`*`0 V LW ?t$`?B?f DBV4?`$P *`?I+?47W\@ `?$7W\LW I+?RV?NGW\WW\GW\?E@?Z`?Q?GW\?V ?7W\YדLW ?T?OjD7W\?I+?J`?N?T?:`?7W\?P 7W\U@?>?I+DWW\TLW N:`?BV?>0 :`E@D?E@?S,T*`Oj?I+?_j*`bVBV?N7W\U@P `?a?h,?T?Oj?^?LW *`*`DBV?GW\?]-3?WW\$LW ?$?0 S,TOj?LW ?V ?4>@ 4Na^?0 ?RV?*`?BV?U@TOjGW\4?`? ` ` `?LW ?7W\RVBV?0 ?0 ?GW\?$*`?*`U@?*`?|[?,?}?E@BV@ ? `?$BV@ ?$$E@? `?P ?44?$?BV?>7W\\W Y+?*`?Y+?U@?*`? `?LW ?>>?0 ?T$`? `WW\0 ?RV?0 ?`?T$`?J`?>?T?`N?D?GW\BVX,Q@ *`?`?`7W\>I+WW\:`?\W ?YדE@U@?0 ?T$` `\W RV?4?@ `E@0 ?V ?U@BV7W\?T?N:`RVQ `?J`?D?:`?>?:`?I+?@ LW X,D?0 ?0 DTD? `0 ?Q?LW ?:`?V ?S,TNWW\>BVE@7W\:`@ S,TRV?D?:`YדRV?7W\?Q?QBVRV?:`7W\?4?~mN?w2@?rF `E@LW `?LW ?D? `7W\7W\$7W\?4?P :`?N?S,T?`DLW 7W\?@ ?N?7W\:`D*`$GW\V ]-3U@?:`?U@? `$?S,T?I+?7W\@ T` `4N7W\?*`?@ ?7W\GW\WW\J`DP ?4?`Ai ?J`QOj$`*`7W\GW\@ ?*`?@ `?S,T?WW\$BV?BV?@ @ ND7W\Q` P ?J`?Oj?$`LW Z`WW\7W\GW\0 ?V ?`Ai ?\W ?Yד?Q?S,T?_j?I+U@P `I+LW `?*` `T$`T?J`?J`RVS,T0 ?7W\?>X,a?7W\?>:`?^?c:`N>S,T@ ?>?4`I+Oj>7W\?$?BV>Oj? `?`LW J`?0 ?J`?*`BVDE@RVU@>$_jj`_j$?Oj?V ?>?$?V ?V ?>J`QGW\@ ?GW\ `? `?4?`$DGW\7W\7W\4?D?Oj`>?@ ?0 LW >?7W\*`RVLW 0 >@ ?U@?iד?^ `?4?E@:`I+7W\N\W T?E@?` ?S,T?`?47W\S,TYדN?`?0 ?E@?`Ai ?a?S,T?U@?^?]-3?QE@\W D?4?`?@ ?BV?>4:`?N?N ``4 `?BVJ`[c@?:`?N@ :`@ N?0 ?@ >0 7W\:`E@D ``*`? `4NLW NV S,T?`?LW @ `Ai X,E@QT?*`?P D]-3I+>J` `0 ?P ?^?T?7W\`DBV?Y+?*``0 TT?0 ?Q? `N:`?$@ Oj?7W\?Y+?@ OjJ` ` `0 4:`LW T$`?4?f?a8?4?V ?a? `I+:`LW :`?T?^?Q? `?Oj?7W\NBV$OjP $?I+?Z`?Oj `?N?c,T?WW\@ ^]-34?N?T$`?V ?GW\?:`?Oj?LW ?E@?0 ?>?Oj?:`?7W\?T?4@ ?J`?T$`?*`?`?`0 ?:`?I+?S,T?BV`$:`:`?`?`0 0 ?`?`4`? `DBV?$OjdZ`:`:`*`?P ?Z`?E@?`X,bNBVQ?Oj?D?`?*`?E@0 E@?T0 >@ [c@T?T$`?aU@$?7W\OjS,T?>?Y+?D>GW\D? `?X,?[c@?@ 7W\S,TT? `?:`?:`?c?f@ ?0 7W\? `0 ?4?I+ `4@ GW\?:`? `\W GW\?T? `V I+?4?P ?D`?J`?_j?J`I+TQ7W\?>?P ?T$`?BVD0 ?S,T?WW\?40 ?4?J`?$ `?>?` `?Oj?T$`?BV?@ ?`YדdLW ?V ?^?D0 7W\J`T$`P 4`>?GW\?*`?:`?T?0 BV? `BV[c@J`? `$ `?0 *`?:`?@ I+N?$7W\RV47W\4? `?N?J`?*`?0 U@T$`LW Q?\W ?WW\*`4?T?^?J`?7W\?Q?P ?*`0 7W\?BV?c?b?4$LW N `?J`?Z`?GW\I+`?GW\?:`?>*`?V ?z ?wW\4]-3`U@T$`?T?T$`?4?BV?BV?E@?4?D?V ?N?0 ?`7W\@ 0 7W\?D:`T$``?E@`?7W\ `QWW\QBV? `?D?:`?4?$X,dI+?U@?S,T0 OjJ`J`WW\^Oj0 P J`?:` `D?4?7W\? `?:`7W\Oj?4?GW\:`NRVYדOj?>?I+?>?P `GW\ `0 @ `?$?T?b?^$^bV]-3@ ?Q?RV0 >?I+?^?eA`?iד?a8?4?4?LW D? `?P ?]-3?QGW\4?T?N?E@?WW\?RV*`[c@^BV?0 ?GW\?J`?@ ?|%?F?&@?bVh,?4?*`Y+$?LW ?T?`Ai ?S,T?`?:`?4?:`?Y+?\W ?J`? `BV0 ?4@ D?GW\? `YדP $:`? `?@ 0 OjWW\WW\4?@ J`LW $?>?*`$?`?7W\BVQOj$0 T$`RVLW ` [c@?4?4LW >?:`?J`?0 X,[c@?>?T `QWW\WW\7W\?E@?$D?`?N?*` `?*`0 4?``?@ ?^?^?0 U@` T$`?BV?^?@ U@BV?Q?I+?P ?j`?j`?7W\>?*`OjZ``?E@?:`>?@ ?`Ai ?^?^?`Ai ?0 Yד\W T$`RVLW ?`?@ ?D? ?)?f?kc@a?LW ?QQP `?V ?f@ ?U@$?7W\?>?@ ?^?`Ai ?:`DOj*`?P ?*`E@?4?0 GW\`?`@ 0 `?0 7W\S,T`?D>U@S,TJ`7W\?7W\?J` `U@LW J`Yד7W\?>`@ LW ]-3T$`?LW ?WW\?0 ?P ?WW\? `a8dlp:`?Oj?E@ `I+N*`?7W\? `:`?$?LW ?>?`?0 ? `?`?47W\I+$?7W\?:`RVU@?D?c,T?c?N>?T?`Q?Oj?d$`?@ D`RV_jE@*`LW E@?:`?Z`?_j?T?RV?I+P X,*`*`TV J`7W\?N?wi? ?L+?YדI+?:`?:`:`@ $?X,?f ?T$`?J`?N?@ ?T$`?LW 0 *`E@T7W\0 Oj> `?E@?@ 7W\E@QBV?I+T$?4NT@ :`D?*`?V ?*`]-3N?:`Qc,TOj?:`?BV?@ ?E@?:`?0 ?J`?RV?*`$?I+?RV?0 >J`N:`?7W\?@ *`E@7W\?BV?X,?V ?GW\? `I+S,T:`?*`?BV?GW\S,TYד>^Yד?RV?` ?T$`?Oj?>?$?T?J`Y+Q?T$`?GW\J`E@I+WW\QOjX,S,T?`?S,T?Oj?*`?$GW\0 ?7W\:`I+:`V J`?oj?v ?zBG?]-347W\BV>$:`0 ?U@?c?S,T?$?LW ?J`?$? `E@GW\?N?4bVdT$`OjD:`>```$RVLW ?:`$D?E@?7W\S,TP ?*`?J`?BV?N?a8?U@J`0 ?BVTa8J`?`?$?BV?[c@?a?P ?$?`LW U@0 `? `?\W ?]-3GW\aP *`*``?0 ?T$`?c?]-3 `T^a8T$`*`?$RV_jI+?@ TWW\0 RV*`I+?7W\?S,TGW\RV?LW ?BVY+YדE@NT$`P OjP D ` ``?*`?>?D?BVBVWW\?NY+WW\?vN?@?zU`?`U@LW Oj>>U@S,T?0 ?S,T?E@ ` `OjI+?V ?TYדa8I+0 *`@ P Oj@ ?0 ?D ``?0 *`?7W\?V ? `S,T@ ?:`?Q?LW ?4?I+?>GW\?`?I+NZ`GW\GW\U@S,T?`?N0 ?7W\J`Y+4DI+?\W ?c,TBVc,T^T$`BV?*`?>?J`?S,TWW\N0 LW GW\4GW\E@Q\W T?S,T?:`$>V [c@GW\BVV BV?> ` `?Oj?*`X,S,T`>RVE@$7W\>7W\0 ?0 ?LW ?N?GW\*`^\W ?BV?TTYד?k@?{@?k@V _jQBV`J`Z`RV@ `?7W\?`7W\7W\? `?@ *`E@?LW ?Y+?*`?`?GW\E@J`E@? `?D?BV?7W\?0 ?4*`J`?$?:`QI+?>`4GW\RVTT?*`?Oj4OjGW\J`WW\bV^NP *`?LW BVV ?*`I+?D?RV*`I+P TBV `:`7W\$QWW\?0 ?U@?7W\?4?S,T?>@ 4`@ J`? `? `? `*`4?`?0 *`I+NGW\$?BV?E@?`? `?GW\?GW\*`GW\?:`*`@ 7W\*`?D?U@?D@ Y+`Ai N?$`D?V ?TQc,TT$`@ 7W\$@ 4?*`:`@ ?GW\?T?N?D?7W\?7W\$LW ?$?V ?V ?]-3?Yד@ [c@P ?*`?\W ?` ?>J`7W\?`LW WW\4BVY+? `?OjTaD`7W\E@GW\?*`?E@?`?*`?I+?I+LW Z`>? `?`X,^`?:`?$?$?D?U@?>`?@ ?0 GW\>?`0 :`?E@?J`0 ?*`?[c@?Q?`?GW\?T$`?J`?$?@?, ?Y=?QX.R`Y?S-?a?h ?i?km?vĀ?rX ?T`?X.R`?a?^?d`?Vg ?Ot?^?Z ?Y=?RX ?7X* P0bX `Bu INP000>Ya``\Y`4`?4`? * J 4`?Q?D`: @0J J @0LY`7X? IUOt7X?* LY`a``S-: @0?* 00S-?>?QVg `07XQm/km: ?P0?$`?@0?^?BX U? ?_t infg @000Q ?J : T`00?GX?D`4`@0* X.R``0>P0]/?J ?N^S-?00 ?: ? GX?Q?`0 UI 4`T`Z Y=T|00? * ?|?_t?\Y`?eC6P0Y=?GX?_t?fg ?^?Z ?sͩ?w×?p ?m?k(?d`?a?Q?@0?T`?Vg ?a?h ?_t?E? IUVg Y]/YLY`RX a`0^ bX T`?* ?E? RX GX?U?WX? 7XBX $`? OtLY`LY`T` ?* 00YieC6UJ  WXJ QGX?ELY`f!]/>7X00?7X* ]/Y=?$`>cKX.R`?LY`?LY`$`?* 7XEI* ?T`?LY`OtUBX ?J ?[(4`^ 00 WXEBX S-? ?$`GX?GX?^?GX* D`QJ  @0]/Ot?Z ?]/$`?pBu ?00?`0?d`$`@0?00?BX ?Z ?Ot?: ?m/?{(?|$@?ux ?fg ?T|?Ot?GX?RX ?GXD`?>?a?J @0EJ 00?00LY`d|d|Y=bX km^ D`[(_t@0?:  ^^?$`?>4`?$`?: ?4` WXT|? >J ?E?LY`EbX h.R`aT|?$`?Vg ? LY`? IRX ba``4`* E?7X?00@0? 7X`0Z ?J ?Z ?]/?>BX IS-LY`: LY`?* \Y`[(? ?Y=?_t?00WXYWXLY`P0\Y`00? E@0? ?$`00P0E?RX ?[(?^ ?X.R`GX? ?y ?m?S-?E?J @0N?T|?a``?Vg ?h.R`?y ?}/?p`?I?7X?P0?T`?T`GXe@0?X.R`? I?BX ?Ot?@0Uh.R`g×Z Z d`Q? Ydm S- D`]/Z 00>S-: 7XRX T`X.R`Q?* : ?D`?@0$`T|d|Z E?7X?`Bu ?T`7X?>?4`bX oDlY Z ?@0?@0?: ?\Y`?ND`?7X?BX [(d`D`?T|?]/?: UX.R`U_tVg ? $`YVg >4`EQLY`$`ET|N?00?$`Vg X.R`00? 7XIGX4`00*  ?LY`?bX ?Y?BX ?>7XP0?`?@`?a?m/?_t?T|T`WX?X.R`?in?bX ?`0?n ?q?Vg LY`?* ?Y?X.R`?D`^ fg ?7X?`Bu ?>?4`?RX ?GX P0^eh _tT|_tT|GXc-eC6J : RX P0$`?BX P0RX ]/gXaLY`BX ? ?D`?BX ?4`D`I?7X@0`Bu @0?GX?00?BX ?* N$` d`km^ >?>?D`?I?X.R`?BX LY`IOt_t`Bu U: ? GXU* ?00: 4`?BX ?4`T`^?U7Xdm a``QIGX>?E?Y=?$`WXJ $`00? ?7X?@0? Q@0?P0?00>?E?S-?00UcKS-?)I?4<`?c?zyU?Y=?@0BX ?4`?`0?dm ?[(?D`?E?Q I?$`?@0?: ? UT`?LY`?BX : ?Ot?WXIcK^ LY`X.R`inh.R`bX c-UGXaZ GXY>? ? $`@0T|a``U?4`?4`? ?RX ?Y=?4`Vg P0?LY`?7XY* ?Y?$`RX UZ QGXVg GX?E?N?I?> * $`7XT|b\Y`NX.R`U>NBX ?S-?U?7X?* ?7X?: 7XT`?00?[(BX _t?$`?J J T|@0?LY`?^ ?@0D`?4`?4`BX ? ?T`?WX?$`U$`?[(?>Ot$`?BX $`bm^?d? ?`?qJ GX?I?e?f`?]/?S-00Vg BX ?7X?GX?: J Q4` ?00c-d`?Q?aIeC6S-?@07Xd`h eC6_t?EGXEVg Z 00S-d|S-?00?: ?7X0000?S-?X.R`?7X?: ?LY` [(Y?$`aZ ?>X.R`X.R`S-P0T`U7X?GX?T|?]/?T|* J ?$`?QVg : ? YZ P0aT|?I? QJ I$`?4`7X?D`?a?00BX ?^?aILY`00?LY`?* D`?@0?E>00?D`?>IRX ?@0?U>?: ?J ?: WXh ]/? ?er?o?J YT`?@0?d|?d`?Y?J J `Bu P0?7X?Ot?4`T`\Y`N?J * jC`i?Q?h ?IRX 7X?GX? T|^^ Ot?E?I: IRX b\Y`: `Bu noD`_t? ?00?>BX ?I?\Y`?* RX NIWX^ S-P0f!kmWX4`LY`S-GX4`LY`[(Z RX ?Z ?[(?D`?00?N?Y=?: Ot?7X?P0RX ^ \Y`eC6N?RX BX ^ QQ* ?RX ?* ?7X?a?P0J  ?E?D`?>BX N* P0`0J ?$`: E7XIYOt?7X?$`D`?$`?E?D`?RX ?* Vg LY`?m/?r3`?i=?X.R`?: ID`?Ot?`0?]/?BX ED`00ENVg WXT`D`?GX?IRX [(?@0?`0?IND`?00J UX.R`LY`7XGXRX T|^cKaVg ]/bX S-7XOtP0OtU4`?BX D``Bu Y=E>E00 WXd|Z * 7X\Y`[(?7XJ Y=]/RX ?7X?E?N?S-?dm ?`0D`?^? T|P0I?P0?]/GXY7XD`?T| N?7X^`0D`?LY`?Ot004`[(cKQ?4`?>$`D`BX @0* ? >4`?@0* E?I?N>E?Y?S-?a``?dm ?WX@0?@0?cK?e?T`?Ot?c-?b?4`RX Z X.R`LY`J Q?S-?J $` ?00J c-Y=* GXYY=YVg UUS-YZ QY=c-Y00? @0^bX YND`LY`]/^ N00 ?D`?Z ?WX?* 7X ?$`@0eC6g×7X?J @0UP0ELY`LY`?$`?BX ?\Y`?|?H??n?7X?Z ?D`BX ?* ?J ?T`?4`Z Ot?4`7X4`?4`D`T|LY`OtS-GX?7X?P0?00?GX? QD`?: ?X.R`?a``?Q: ? ?Q?Q?7X4`?* T|]/? ?Ot?* 4`?Ot?J ?WX?Ot?@0?J ?7X?4`?`0?fg ?X.R`?Z ?j ?g×?RX ? GXP0* : Z Vg ? ?E$`LY`EWXgXaLY`^bT|S-[(T|>BX Y=P0?Q?LY`UY ?@04`\Y`bT| YeC6^: 00Ot$`?T`?7XOt ?: >RX ac-@0$`acKBX ?@07XN?4`?>?a?N ?j{@??N? BX J ?* ?$` ET`?GX * >E?00?4`7X?00?P0?T`?EE00?S-?: 00?BX ?: ?LY`?eC6?YLY`: ?RX ?X.R`?J 004`WX[(?T`?RX ?GX* ?7X?BX * ?: ?[(?GX* ?Q?Z : ?N?Ot? ?  ?: 7XbX dm T`@0Vg cKZ IX.R`X.R`Uf`d`: : WXGX?$`* Ot ?dm ?p`?bD`Ot? $`UX.R`IUd|`Bu : WX[(* RX f!WXBX [(Vg >> Id|cK ?RX 00Ot?J ?J ?I?}, ?.R`?x WX^ S-GXT`* ?7X00? 4`Ot? $`N?I?U?* ?00?4`?00?$`OtE?J ?4`* $`YT`?P0?: YOt?$`?E?I?4`? ?$`BX GX?@0?RX ?>?* E?7X?BX ?$`?P0?]/?GX?4`?Vg ?NWX`000?7XEJ ?E?LY`4`^ aVg IWXjC`f!: ?* 7XQeeC6: 7X?: ?: 00?$`?>?[(?uO?y9%`?YVg : >Vg GX>J BX I]/_t>?D`LY`a00? ^\Y`T`^I?D`?7X? * NBX ?N?YN?E?D`RX ?BX ?aQUY=7XLY`]/?4`?E$`?fg ?i=$`?7X?P0RX Ot?00? >S-J ? GXOt? 4`OtT`bX [(7XT|[($`?00 ?$`?N?Vg ?: ? ?S-?IY=a@0?$`?7X?: ?LY`?E?D`?Z ?_t?BX P0N?N?Z ?00* ?E?P0?: 4`7X$`@0 ?7XYd|>?E? 4`Z d|T` ?BX ?WX?4`P0 J ?k?{ ?eT`BX N^ LY`J Y=LY`7XRX Z GX?D`>`0* ?S-7XRX OtRX > E:  4`? ?RX ?bX ?]/?7X?* P0S-^a>EI?X.R`?IJ ?@0?$`?pwҀ?'@?#`?ͩ?bX ?c-7X]/* ?>$`S-N IN$`J [([(X.R`BX LY`e]/?J ?Q* QP0?4`?Q$`?Ot?: c-h ? ?GX?>GX?$`?`Bu ?P0@0 ?GX?S-?T`?GX?J ?Vg ?GX>D`?BX ?T`? ?WX?EN* ?* 00?* 00[(S-* ? ?J 00c-Z Ot^?GX?oD?UT|>N`Bu Y[(^ J @0QUOt : ^UBX QLY`BX QU[([(LY`Q]/T|? ?`0?g×?X.R`4`?: ?ENS-? QOt?eC6?d`?>?I?J ?: ?@?'??t`?eC6?E>?Q?[(?J D`LY`Q7X?4`4`RX X.R`U00Ie]/?@0?Ot WX^E* OtS-BX >X.R`Z ?E?* ?X.R`?J S-?a?00T|?4`?RX ? 4`$`?$`?  >?LY` LY`?7X?I? 7XT`4`J * T|J @0d|eC600?$`? ?E$`Ot>LY`[(^aY=J UY=T|S-BX  N^ d`\Y` * ^c-`0Q7X\Y`g×Y=?J ?S-?D` ? ?GX?@0NJ ? Y=Y=?Z ?Z ?4`?P0?Vg ?c?H?O?p?sb ?Vg ?>?D`?`Bu ?\Y`?LY`?* GXS-E? ?4`?00?7XBX Z E? NQ7X 4`OtP07X: ELY`YT`: 00?Ot00?[(?T|I? ?a?GXI?* ?E  4`WX[(?00?a?LY`BX  >[(T|@04`EZ T`QT` ^ U?* T``Bu ?LY`?bX ?: @0$`7XQYY=Y=WXE@0UYT|T`GX 00T`]/00?WX b`Bu LY`? ?7XY=eC67X?T`?: @07X?7X?@000T`Y@0?$`P0T`7X* ?WX?T|?t?r?;?=?h.R`?>: ?BX ?Vg ?7X7XLY`U@0?@0? P0D`?E? T|D`?D`?: 7XJ LY`IJ 7X? * ? ?>>: ?4` ?Vg ? ?T`?T`$` ?S-?P0? $`:  ?GX?: UY=?Y=?q?cK?$`?* D`bX `Bu S-OtILY`NGXRX T`* >\Y`J ?I* Q?GX?WXBX Vg : GX^ ^ S-I4`?4`?>?4` EJ D`LY`J @0 ?U?\Y`BX ^ >?00?$`?4`LY`_t$`?]/?T`? ?: ?T`?LY`D`T|BX 7XI@0D`J ?00?Y=?T`?RX ?k(?tm ?pBu ?bX * T|?$`?D`>RX ^[(?$`?S-00`0^ 7X?$`7X> >IBX 7XEBX : E?LY`?GX?I?D`BX ?^ ?Q?P0?J ?E?00?>?U?S-* RX 00?LY`?I$` ?c-?ot?`0?N?T|@0cKX.R`D`T`]/WX?P0?E?D`?ELY`_tLY`$`GXD`?$`4`]/`Bu WXY=Z @0?: ?7X?$`?$`?J ?]/?T|00BX Z T`? ?E?RX ?GXP0S-?$`00Vg : ? QJ ?N?Vg ?LY`?P0?T|?LY`?$` ?* 00X.R`Q4`OtBX ?>: GX?LY`?RX ?J ?^?Q[(_t ? 7X: LY`E?7X?>4`NVg S-$`?4` : >GXLY`$`?E?7X>E7X? ?7X?>?LY`?BX E?X.R`?`0?bX ?J ? ?>?N?T`?^ ?[($`GX?E?P0?: ? ? ?U?]/?$`? ?T`* Y7X? Ot`0`0 ?WX?U?_t?a>bX Y=\Y`^$`?BX @0T`QS-U@0?J ?Vg ?GX>T|>?N?E* * Ot_tBX ?Q?I?00?* : J I\Y`f`U?GX?: 7X?: ?I?4`?$` ?00?LY`?4`007XGX00>^N g×lY`$`?D`4`? D``Bu S-7XIBX ? ?4`?4`* I?J 4`Y=LY`? ?4`?BX ?BX >T|: ?T|?U7XN?00?J ?$`$`?4`?D` ?[(?i?in?WX? ?P0?T`?RX ?@0N>?T`?00RX GX@000?$`LY`Ot?: ? > 7XNZ D`?4`7X?BX ?`0a]/a``a? ?Ot4`BX * >@000? * T|aZ GXGXBX 00U^ ? ?Y?GX?BX ?LY`00Vg Z bX `Bu ?00?Vg ?LY`?N?I?*  Ot@0?OtOt?00?LY`?00Qc-Ot eh.R`@0N`Bu QD` ?GX T`P0GX7X: UT`?@0?T`7XZ T`D`? ?T|?UI?Z ?X.R`S-c-D`?00* 4`? ?BX ?4`?r"?sK?noD`?b?: GX : BX UP0$``Bu e?4`?Vg ? * : ?>?BX  @0E?$`?>BX 7X ^\Y`?>$`^Vg WX[( ?@0J Vg J 7X7XT`^T|D`D`IGXIGX ? P0Vg ?LY`?E?* ?D`?X.R`?J $`?00IeU?GX?Ot?Q?LY`?GX?I@0E?I T`? ? Z cK`Bu 7XX.R`GX?: QX.R`7X ?GX?WX?: $`: T|X.R`Y^ I?J ?D`: $`?$`BX BX ?BX ?E?$`?E?Y=?a``?S-^ inY=OtRX 7X00 ?4`?zC`?vN ?m?h.R`?P0J ?7X4`? 00P0T`gXX.R`?rx?zC`?e?>?: ?>?P0?OtBX @0?* ?7X4`? ?7X]/f`LY`I^T`OtY=I P0^^Q7XERX BX ? ?I?S-?E  ?$`00OtGX00$`?@0?BX ? ?Ot?WX?Ot?T`00h.R`a``$`?00?: ? ?LY`?*  ?N? RX D`Z kmf`Q?*  Q ?4`I ?$`T`J ?: ?D`?Q?BX OtP0OtVg >?@0? ?P0?T| I4`@0>?J ?[(?X.R`?* [(Y? : Q: LY`RX ?* ?q?ot?j ?noD`?`Bu ?00?^?`0?4`?>?: >BX T|?D`?|$@?r?rx?T`?LY`?BX ?D`?E? BX S-LY`?$`?00Z d`OtBX [(Z Y=bX ^NOtWXZ T`4`? ?$`?  ?D`?X.R`?I4`: >X.R`\Y`BX 4`J ?$`?LY`?4`?E  J `Bu I?@0?* ?$`: P0 ?4`?7X?T`?BX >BX X.R`aU7X?BX ?I? ? 7XE?GX?00^ Y=7X?* ?P0?4`Ot00?* J Q>$`: @000@0E00ET`BX $`P0X.R`?: ?cK?RX 4`4`U]/7X?Y?b?i?q``?g×?RX ?dm ?aBX E? ? ?007X?n ?w#`?k?`0?b?X.R`?: 7X* $`X.R`c-Q?7X? T|Y=00?* N`Bu cKea``[(X.R`OtGXQT|OtBX RX aT|?>?BX >GXJ ^ d`S->Ot ?Q?@0? 7XY=^Vg : ?Y=?^?$`? BX 4`* ?N?LY`?$`00J E@0P0 ?S-?LY` Ot7X?T`?D`I* ?BX 00Vg 4`?@0IaX.R`00P0c-Z D`4`?>?GX: 004`P0RX ?Ot?d`?N00* IS-LY`?Z ?a``?c-?noD`?gX?Ot?X.R`?QS-S-?7X?LY`?BX BX T`? ?S-?P0?^ ?n ?m?\Y`? LY`LY`4`Ot\Y`D`?I?T`?Ot? 00?00 WXd`bX WXT`S-? ?N@0d|g×`Bu ajC`dm  ?Ot?00* LY`b_tIBX ? ?J @000N\Y`^7X?`Bu ?WXRX P0?D`?ILY`RX : ? 4`NIS-c-\Y`4`>Vg Y* ?Ot?00?Ot?D`?00?GX* Vg D`?00GXdm `Bu BX Z * ?I?* ?GX?`Bu ?`0?S-?D`?@0 $`?T|?T|D`J ?00?D`?E? ?eC6?b?RX ?`0?a``?P0?U?Y=?$`@0?7X?S-?N?*  ? $`?>?h.R`?r"?i?LY`IT| ?BX $`?Ot?i=?p0?Vg Y=LY`?E* _t`0D`?X.R`?eC6?7XgXm/aWXa^ * ?GX?7X?00?EY=Z BX  ?4`? Y=Z ?: ?RX >`Bu S-?D`7XeC6U?Vg ?[(?00LY`WXYU> LY`S-U^ [(LY`ELY`GX? ? P0E?BX ?D`?E?D`D`U: ?>$`_tZ ? 7XI?Ot?X.R`?* ?Ot?Y?E00? ?D`?^ ?EY=LY`?E?P0?U?Q?Z ?Y?$`?E?]/?_t?d`?h ?_tD`?* ?I?P0?Ot?7X>Ot?BX ?f!?e?RX D`^E?N?E? ?Ot?m?sK?P0h \Y`?S-?IYaBX ?* * ?J ?a``?>bf!Y>>D`004`>? ?D`$`J ?4`* 7Xa```Bu ?GX?_t?@0J * ?@0P0a?: ?h.R`?a?$`>BX U]/J 7XVg [(E? ?$`?4`?P0?S-?GX?: @0^ X.R`: $`?00$`T|Ot?4`?T`?GXJ ILY`LY`?@0?BX 7XJ ERX ^Q: ?4`?WX ^: ?4`D`>$`?4`GXD`?T|?f!?in?h ?dm ?J 4` ?00?: T`T|IYP0?J ?U?IBX aWX  ?E?`0?eC6 fg S-?Q?ELY`WX>00Y=T|?: ?$`U[(Q$`?$`4`IN P0E?P0?J GXBX P0S-?$`?J ?4`?@0?]/?_tBX ?]/?j ?]/00NEOtUGXQfg d|4`?Ot?7X ?BX ?GX * @0RX LY`IOt@0BX E?* ?P0?U?N00>: : ?U?_t? ?00ILY`NX.R`LY`GXD`S-Y?: * bX ]/S-T`EX.R`S-?T`?i?c-?T|?Z ?^?Z ?U?>* T`T`GXY=Y=4`? GXX.R`E00I$`?7X?$`?>? BX ?* ? 00: I`0^ * ? D`RX Ot ?* : J J NBX IZ RX ?$` P0E$`>IJ E: ?: ?a``?f!?N>?* ?S-?T`? WX[(X.R`S-00GXc-^Z `0P0LY`X.R`I?* ?7X?* @0S-N7X?D`?Vg ?GX? $`NS-RX ?J ?uC6?t8c?$`LY`?: ? ?4`?00ED`P0T`D`T`@0?T|Ed|Ot@0Y=J GX?$`?`0?eC6?LY`>?00?T|?]/?^ ?N?: ?J ?D`?4`00]/_tNINT`Q?: ?J ? ?BX ?00LY`$`?Ot?P0?7XD`00?LY`Vg Y=\Y`U: @0NT`U7X? NY=S-OtRX X.R`YQS-[(T`LY`WXT|D`ILY`LY`@0?X.R`?gX?QS-Y=4`?[(?Vg IT|P0T|00?: 00?* ?NEcK]/4`* Ot: ?E?D`7XVg Vg J 7X?J ?Vg ? NVg Z S-RX ?LY`?v!?t$`RX ?>?00?00E00GXQ4`D`?$`?UP0a``? ?: S->?4`?WX?^ ?OtD`I?>?E?4`?E?BX ?00?: ?4`?>X.R`^QE: P0Y=00?P0?U?U* [(BX ?I?D`$`Ot00?EEbX `0Y=T|RX X.R`T|OtULY`@0T|Ot: GXYP0?$`BX ^ WXYeU?J ?BX 00OtOt?T`?e?ENI?* ?\Y`?IWX4`?NBX I?00? ?D`?RX  Ot00?>?007X4`?00$``0in^ @0D`* ?@0?007XQOt?7X?4`? ?a?_t$`?E?X.R`?* 7XI* ?U?BX E>N7X?D`EOt?>?>?: ?7X?* BX WX: ?`Bu ?a``?BX ? BX Ot ?D`00P0I?Q?: Y=]/>?E?GXLY`^@0?4`4`J I7XNX.R`S-NBX D`T`N4`OtT|4`?>?* ? ?BX ?00RX E?\Y`?\Y`* J WXbX * ?_t?J GXWXT|?E?U$`?* ?RX ?: ?: OtkP0?bX ?GXJ : NP0* ?$`?007XD`@0D`007X`0km`0: LY`WXJ ?4`?RX ?P000>J @0?T`?Vg ?$`00I?7X?d|?UEIT`P0?$`?J ?Ot? ?c-?P000ND`4`Vg RX ?`Bu ?n?a``?BX ?$`?4`?* ? ?P0?\Y`?LY` 7X ?Ot?OtGX^Z LY`$`: 4`?I?Q?@0?* : QNBX 4`?BX ?U?P04`J GXRX U: ?J ?P0?>?>?: EBX ?\Y`?f!?Vg ?: $`J ? ?@0UbX \Y`T|: BX Ot?S-?X.R`>?[(?lY 00T`?X.R`?LY`4`?* D``0aU ?7X* $`? D`QEP0a^ LY`P0Z [(U00?@0?$`D`J 00T``0Y=Vg E* T`>?X.R`?D`@0? ELY`* ?X.R`?S-BX ?d`?_t?EGX* ?OtEa?4`?h.R`?d|?RX ?00?: ?T|?^ ?a``?]/?I?@0?7X: GXBX GXJ RX P0? ?I?GX?RX ?WX?J 004`$` * ? ?Y=?d|?WX: IP0: ?00?@0?7X 7X 00LY`7X?LY`?S-?N?BX  BX Vg ih T`00* QLY`?X.R`?LY`>?|$@?tM?wҀ?E$`D`E?GX?* UWXRX @0?00?: ?D`?@0E[(UGXOtT`P0GX>IYLY`?GX f!h.R`? ?^?$`ai=h.R`X.R`P0aWX>4`?Ot?N00^ ^?GX?OtOt?GX?Y?LY`OtBX ?S- ^4`?WX?T|?GX ?J ?X.R`?U?E?4`?Ot?* S-^ YE@0@0?4`?>BX >?J ?@0IE?00?D`?4`: : ?T`?Z ? ?\Y`?Vg ?: ?P0?Vg ?00>00* * 00[(h \Y`BX J IJ `Bu d`LY`?GX?Ot$`@0?Ot?E?BX ?'@?g?3[?X.R`S-^ \Y`>@0?4`?fg ?e?: GXGXBX >@0: $`? ?* ?  ?4`?4`J I?BX 4`id|?J ?c-?RX  IRX NWX`0LY`00S-P0* $`D``0bX ?$`?Ot>?J  ^ P0?D`@0WX? ?@04`7X7X ?>?$` ? 7XJ  ?: P0UQP0RX D`J _tP0?[(?^ 7XS-BX  ?4` Ot>7XT|?7X?jC`?in?X.R`?WX?Y=?4`E ?00: J `Bu k(^ $`S-a[(BX ?D`\Y`U?7X?P0?7X>? ?GX?Ot?s-?`?t`?BX @0X.R`^ Z Z ?X.R`?yn?w: ?Vg RX UT`RX >?GX?T|?GX?: ?Ot?N? ? ? LY`Ot? 00X.R`E?J ?BX ?@0?N?E?4`>LY`$`* S-X.R`Y=X.R`INS-? ?E?$`?Ot?Q@0WX? ?>`Bu c- S-T`GX?7X?P000GX?D`?00[(`Bu E?: ?I?: BX Z `Bu WXRX X.R`?j ?noD`?D`X.R`^WX ? YaY=T|$`?T|?X.R`?LY`?@0?@0? ID`: UUNOt?$`?@0U^ Q>?I?D`Vg U ?* ?@0?007X?* * 00?$`?T`?RX D`T`QT`?RX ?q?lY`?E?7X?4`7XT|Ot00BX J  ?$`? ?4` T`Q?: ?N?@0?7X$`P0P0> ?D`?T|?GX@0N7X4`QS-> 004` ?7X?RX ?Ot$`* ?T`?$`i=f!? ?* OtT`RX ?$`?T|? 4`?T|?T|D`Z RX ?$`?]/?_t?$`X.R`]/T`NT`4`?c-?f!$`_tX.R`QBX 4`S-Z Ot>GXS->?: $`IBX P0T|S-^Vg ?00?RX ?Vg ?: Ot4`?4`7X?  Y=E?>* ?@0?X.R` RX IX.R`]/?* ?b?T`P0N?* ?$`? LY`@0?@0?E?GX?>P0a```Bu Vg D`4`BX ?T`?D`OtD`?T|?c-?\Y`T`00?GX$`LY`?00?WX?EVg a00?X.R`?LY` 7XBX : * P0LY`?7XBX ?$`?EJ iY=?P0?BX : D`Q* ?U?T|?J ?T`?U?P0?4`@0 ?WX?X.R`00Vg T`P0T|^ Y?* ?7X^ `Bu ?7X?>RX U7X7X@0D`Ot* ?I* Vg S-QI00S-WX ?E?4`GXQ?* ?7XNJ WXeC6GX?EGX4`?S-$`WXGXEP0?ED`^LY`?J ?RX ? UY=GXP0`Bu S-?$`?00: N$`?Z ?[( 4`?J ?* P0>?Q?_t?S-RX `Bu ?BX ?d`?P0$`?00?>S-[(?Vg ?7X ?4`: : WXZ `0GX?7X: Ydm GX?ND`00@0?X.R`?a?S-00 ?T|?Ot>$`?I? S-UP0T|Vg S-J 7X]/LY`?Y=?J acK>U[(>? 4`J OtJ ?* ?J @0X.R`P0LY`Vg ]/S-? 4`[(]/dm iN?00QJ ?4`>D`?E?@0EOtP0Y=Y=D`?>?N?>* * Ndm `Bu  * 7X?>? ?]/?`Bu 00S-BX IRX : ?$`?7X^eC67X?Vg ?P0?J ?7XBX ? ?LY`? ?00I4`?P0?BX ?D`?OtN[(* `Bu >?@0@0WXcKWXBX RX Ot4` ?7X?N?P0: eC6\Y`?Q?IJ ? ?LY`* I@0J RX : ?7X?4`$`00?>?QBX d`^ D`QaZ ? ?7XP0[(GX? 7XE?4`?BX : GX>S-`0`0J ?BX ?* T`acKVg ?: ? J ?GX?WX$`* ?T|?Ot4`BX D`QOt>* $`>D`Z Q?rx?]#?h.R`U ?00I00 WX`0T|: ? ?00? ?$`Ua``WX00?N?a``?RX I?4`?^ ?E$`* WXT`?>?I?S-?Z I?>LY` ? ?4`GXc-aYWXJ >00? $`BX Y=jC`X.R`?^ ?QGX?@0?S- E@0?7X?4`D`Q4`?GX?RX ?00Vg [( ?>LY`WX ?N?4`WXbRX @0LY` ? ? ?I?@0GXZ Y=@0?E?D`: Y=Y=?I?a Q?]/?fg ?$`Ot $`I4`4`Ot>?4`: NZ YU?[(?`?Bu ??4`?J 7XLY`GXS-^ X.R`?>?[(?I?$`?N?Ot$`IGXBX ?N?h ?`0@07X?7X@0: Z a``BX ?$`?>?I* D`?>?* ?* 00?00?Vg ? \Y`Y=P0I4`GXD`D`LY`J ]/7X?c-?P0P0?4`?J 4`* 00I? ?BX I^RX ?* ?P0?T`?Ot$`S-?T`?* E? ?>LY`]/[(IGXGX ?>?S-?T|J EJ E4`@0D`OtQ?S-?eC6 `Bu ? ?Y Vg OtLY`T`OtS-X.R`?00?_t?S-?* 7XUP0* ?]/?2?a? ?@0Ot: EJ ?I>Y=?00?^?4`GX?BX ?RX ?00?00?: :  ?]/?Z 00NP0Y=LY` LY`I?BX ?I?* $`T|\Y`D`?* ?7X ?7X?Vg ?* RX BX  4`Q7X?LY`* P0* E4`?T|Y=$`?7X>D`? ?>NT`?$`?RX ?E?D`?^?RX ^ `Bu ?J ?P0GXOtINLY`X.R`\Y`@0?$`?* ?P0?X.R`?$`Z Q? >I: LY`J ES-?_t?OtRX Q?4`?@0: E00BX T|bX cK ?^ ?U?N?Ot$`: 4`?U?k(?T|[(`0S-J RX >?T`?IS-@0?T`?00WXN 4`? ?J * N?7X?GX: GXLY`Z Z GX?>?`Bu ?cK?X.R`?N?: OtY7XOt? ?7X?* * : ?: ?>: Vg ^?* ?cK?BX T|00: Ot? 7XX.R`: * ?Q?T`BX LY` 004`?00?: @0I?E?@0cKd|?J ?WX@0EBX UVg T|J ?@0?Q?7X?* ?E?>RX c-N? T`P0?D`?00LY`S-X.R`N?E?Y?N?: ?Y?a``?7XN* 00[(h k`Bu > ?LY`?Z ?7XD`ES-Y=]/]/>?RX ?^ ?]/?BX E* ?00LY`T|?7X?QI`Bu Vg P0D`?: ? * ?I?@0LY`OtJ Z a``U?N?b?P0 ?Ot?T`?U]/? ?RX ? 4`?$`?P0?Y=?BX Vg f`d`?7X?e?LY`E?BX ?$`U> T`S-J @0?T`?Z I`0LY`$`@0OtT`X.R`[(RX IYI?T|?LY`7X?@0?J IWXE?4`?S-?LY`?00?* >T`^QLY`bX ]/?: ?* ]/bS-: 7X?4`?T|?X.R`?a?a00[(: * [(d|d|b^ P0?@0?RX ? J P0LY`GXOt? ?e?p`?p0?m?gX?RX BX P0S-[(>?WX? a``[(NOt00$` ?S-?NIP0LY`T|WXLY`?BX ?OtS-]/?00?: D`?BX ?aQ?7X?X.R`?BX ?$`?RX ?_t?\Y`?$`[(aS-?7X?N7X4`?U?* ^ GX?* T|[(J >?: ?LY`D`\Y`T|QUX.R`X.R`T`J E: ?D`?E@0LY`?D`?UJ $`?N?RX ?BX ?GX?LY` >$`OtZ WX]/^ J LY`bX `Bu ?00?T`?RX ?LY`>Vg T`?>?N : 7XT`I?4`D`D`LY`P0I* ?RX ?km??9?S?x ?g×?@0URX J : ?N? ]/Q4`ID`RX X.R`?* ?P0?004`4`?00? ?>?RX 4`P0LY`^ ?4`?_t?E?@0?* : ?J ?BX BX Q00?N?GXE[(D`?IBX `Bu 00?IED`?Ot?D`7X00* EU`0[(: $`?BX ?WX?Vg ?P0?: @0RX N ?LY`?LY`00?>?J ?D`?S-?P04`$`?E@0^Q@0P0NBX P0E?P0?[(?Q?]/?eC6?I[(bX.R`* ?LY`?T|?N?>?D`?00NOt IWXJ @0LY`RX >?T`?]#??~~@?Uw?S?k?D`N>?N?>?* LY`4`$`GX@0T|`0@0?I?J ?D`$`? ?RX 7X?Z ?Y=? 7XVg ]/?7X?_t?c-?ES-^ES-X.R`>00? ?Ot?ED`P0 ?>>J ?7X?D`$`?J ?a?IT|T`7XBX U]/Q?GX?Vg ?D`?N?`0?^?J 4`P0D`00BX ?4`?Z ?ID`00?4`?00?4`00S-: ?00OtZ D`4`I00IN ?7X?T`?g×?h ?IVg Z >? @0> J P04`OtWXD`J Y=Vg D`* >?$`?in?: ?l?U?w`?O?qMH 004`?Z ?BX BX $` $`>GX7XIQ? ?GX?E?* I ?RX Na?: ?YOtWXX.R`00?J ?d`?OtD`RX ? ?ID`E?J ?E4`$`?  ?00?N?GX?$`?*  T`Ot?D`?NGX^ Ot00QT|@000?4`?RX ?J ?GX?S-?D`$`BX I$`? GX ?X.R`?LY`BX * ?4` J ]/`0NJ _tZ @0GXJ  Ea``^ >?: ?Y=?a``?IEGX: ?00^ bX NT|T|?: ?@0D`: >S-T`>7X?7X?pwҀ?&?@?S?4?%"@?r3`?$`?E? ?LY`4`T`004`I00?00?$`BX 4`?Ot?Vg ?P0?* Q$`?T`Nf!Ot?: $`EQ\Y`]/Ot?D`?LY`?Ot?7X?P0?^?D`?$`?U?T|?@0?BX ?> ?* ?GX>?$`If`^ * @0Vg N?@0?OtBX P0?* * T|@0?@0?T`?T| J ?00?7X?>7X>?>?4`$`?: ?GX?* D`^`Bu LY`LY`^ Y: ?$`?00P0`0E?S-?a?fg ?_tBX T|*  ? bX eC6>* BX ?LY`?WX?@0?* ?D`?OtS-LY`D`?in?`?F|?A?? ?m?Y=?N: J Q* J T`?00?WX?D`IBX ?LY`?[(?Y?* WX@0?P000^ Vg NE?* ?4`P0`Bu UGX?E?Y?$`?I LY`?J ?Vg ?_t?WX?$`? ?: IVg ?4`?* ]/WX4`D`4`?: ?P0?Vg ? I?$`* ^WX?* ?\Y`?_tE?N?Y?GX?:  EBX 00?* ?J ?GX?BX ?* IT`: GXS->?E?RX ?>BX 00?Q?Y=?[(?f`?cK?>? ?4`>7X$``Bu b ?* OtJ ?>?@0?@0?T`?N:  ?: ?>?cK?w#`?D? ? ?3[?gX?[(00U@07X$`?004`GX?00EZ T|?RX ?T`00[(GX?: 00INaa``?00?^ ?@0P07X00?Ot?T`D`S-ET|LY`?J ?T|?GX?GX?N?: ?7X?Ot? E?J ?S-@0D`4`D`?>?LY`4`I? ? RX J ?* ?Ot?Q$`00?X.R`?Y* GX$`7XOtBX ?BX ?J ?* ? ?* 7XI* ?: QJ ?7X?@0@0LY`?7X?RX 00?WX?a``?U?D`4`T`4`?4`OtS-?* ?$`NVg P0?4` ?: ?E ?00?J ? ?BX ?cK?ot?w: ?w?oD?c-?RX IZ GX? ?7X?>?>? I^ d`a``YE?BX ?S-?004`?4`P0$`?D`T`d`? ?c-?IP0?  ?BX ?E7X7X: BX ?`Bu ?u?q``?4`Z BX ? $`?E?Q?* ?7X?00BX * >T`?D`ET|RX E?7XLY` ?BX ? $`4`? ?RX ?@0UT|?GX?P0GXP0? J GXNWXOt ?* : QBX : Vg U? ?GX7X* ?Y?^ ?Ot Vg Vg ?7X?N ? ?7X?: $` ?$` ? ?0000D`GXX.R`^I?: ?N?N?J ?WX?^ ?EOtGX?7X?00* ?$`@0Vg YOtBX >?4`?RX ?Q?T`?S-00U?4`?a?IP0?4`?^4``Bu Vg T|@000?4`? ?k(?~oD`?y9%`?GX`0>?>@0 ?LY`?004`>4`?4`4`YJ ?$`: QLY`?4`?T|? P0?LY`?4`? ? ?$`ND`?]/?c-* Vg P0`0aIT`bS-?@0?: LY`LY`?4`?4`NYRX ? ?I?4`?N?a?Y?BX ? D`? ?Z ?S-?* LY`RX ?* ?J ? ?4`?7X? GX^^Vg Ot>: OtE?Ot?c-?Vg >00?I? P0S-7X?LY`?U?GX?D`?GX? 00* ?>?4`>7X?@0?P0?7XD`?7X?WXD``0c-eC6YQD`GXRX ?E?noD`?k?$`S-?E?^?LY`?: ?E?4`?00?@0?D`?E? @0$`?00: ?\Y`?c-?E: ? ?D`?BX ?7X LY`N00BX LY`?Q?`Bu ? LY`Uf`Q?a?US-J ?J ?BX RX Ot?E? ^ `Bu N? ?BX ?$`?I?X.R`?BX ?* ?GX?GX?]/?fg ?Vg ?>?4`Q^ T|S-LY`?* ?Q?N4`D`?I?EOtP0?I?WX?T`? : ?: ?$`00?4`?E NVg BX ?[(?a?7X? ?N?: BX X.R`\Y`P0GX ?Ot? Q ?BX ?LY`?WX? Ot?>`Bu aQU[(T|Vg T|4`LY`N?BX ?`0?a``?Vg ?D`?BX ?P0?Q?J ?>?$`?GX?X.R`?WX?J ?: ?bX ?bX ?@0? ?@0?BX ?D`ILY`LY`NX.R`[(? ?T|?*  IT|?f`?|?s-?* J ? ? UX.R` J gXa ?LY`?I?4`?LY`?Q ?E?BX ?Y?b?N?GX?Vg ?00GXUbX Vg ?BX ?X.R`?S-7XQ?GX?Y=?00BX GX7X?LY`?T`T`^Y=E ?$`$`BX >J D`?Ot?: [(RX ?4`?* J YQGX?4`?Vg BX @0?q``?x.R`?e?J ?00 ?OtWXU$`GX[(N BX P0QGX ?RX ?`Bu ?T`?* ?: ?* : ? ?7X ?4`?S-?X.R`?S-? ?_t?UE ?Vg ?`0?Z $`7X?Vg ?NNUBX ?I?Ot 4`QE?r3`?2?rxBX ^ S->S-^ RX Yf`N?[(?bX ?X.R`?RX ?[(?T`* ?@0* ?00?EJ BX ?LY`?I?BX ?$`RX N?00?: 4`RX $`?7XGXX.R`GX4`S-^ `0Q$`4` ? 7XJ * J Z * ?4`: ?00?00INI?: ?X.R` ?a``??g ?n:  ?* ?BX T|T|* 4`P04`?LY`?LY`* RX E?* ?BX ?Vg ?a``?T`?4`?4`T`a``00?GX?4`?P0?N?* ?7X4`* ?\Y`?QS-00?b?n?d|$`?4`?h.R`?]/: ?* ?J ?4`7XJ >QT|?b?s-?Y\Y`cK]/ELY`_tZ Y=^ ?b?a``?P0?LY`?T|?7XOt00?00D`4`4`_t_tE00?D`?Q?$`4`GXS-D`GXT`OtX.R`Y=?$`?LY`?00?>?@0? 007X?@0?J * ?4`?\Y`?Vg ?D`? D`D`BX ?U?I>?>?EIT`P0?@0?a``?RX ?gX?x?=l?`0Ot? ?BX ? IN>?7X?I?J ? IJ ?00?S-?RX ?^ ?fg ?^?RX ?GXYa`` ?I?k(?<?}?_t?* * BX ?Q?QGX ?a?g×?X.R`D`? ?T|BX LY`?N$`Y>?$`?4`?7X>4`?: ? @0T`\Y`RX RX \Y`T|RX Y7X?J ?BX ? ?7X?BX @0Y=LY`4`I@0D`WXS-NOt?00?J ? ? : * GXOt4`Vg dm Q?* ?: ?J ?Ot?Ot?I?4`?P0?T`? ?RX ?f`?T|? ?@0? 00?7X?Q?I?7X?T`?GXOtP0BX ?4`?]/?T|?P0?f!?a4`7X?00?>?D`  4`?@0?\Y`?]/?>IBX ?LY`?^ ?RX ?GX?[(?T`?Y?Vg D`I?$`? ?z?ұ?wҀ?w?T`?4`P0$`?BX : $`?N?LY`7X?7XGXiVg ?BX Ot?Y?Bu ? ?km?WX?P07XP0?$`?LY`@0Z S-QRX @0GXVg P0@0>?GX?GX GX:  * @0S-Ot @0LY`?: ?* LY`?Q?Q?Ot? $`?J ?* T|WXX.R`YOtLY`@0$`00?N?Y=  ?J @0S-? @0 ? ?4`?>?D`?P0$`\Y`GX?4`: @0?* ?$`LY`Z E?* GX4`?Z : 4`$`?>?RX ?LY`>U* ?[(?`0?7XN7X $`?U?[($`?* ?BX Ot?u???sͩ?N?>S-: ?I00D`?* ?00?GX?X.R`: b: ?D`?J ?`?yU?W? 9`?|?`Bu ?: J : $`UU$`00 GXVg N@04`?$`?>?00? ?4`?: ?* ?$`* RX N: S-E?S-?4`X.R`7X?P0?GX?: ?$`? ?I?N?BX ? OtVg ENS-J >?Q?^GXaJ NUBX OtZ GX?: ?N?: 7X: Yf!Ot?OtGX`0 ?QBX T`?>?: Y@0?]/^ T|  ILY`NOt>?$`?4`? ?@0 00?Y?UP0?S-S-?P0?|?uC64`4`?4`LY`?4`?T|7XP0? ?BX ?7X?J ?RX  GX?GX?Q?dm ?5?r?G`? @??uO?J 4`T`Y=^ Ot?: ?: ? D`P0* ?: ?@0?7X$`D`4`?00 OtQ00?* ? N`Bu : ?^ ?IT|BX ?$`IRX D`4`? ?BX ?RX ?RX  4`?N?J 00J N?E?a \Y` ?BX BX EJ [(WX?* ?Vg ?7XRX J P0aE?P0@0Y?@0?QJ GX?Ot?4`Q* ?Ea``RX ?@0 X.R`Q? ?BX J BX ?@0?T`?T`?>?E?a?GX`Bu 4`?^ * Q?>J `0$`?$`Ot4` S-RX   BX Z RX ?D`?[(?d`??*@?>=?@?_`?H??LY`UWXWXWXE7X:  * $`?GX?Y=?Z ?S-?4`4`: 7XJ UWX: ?T`?T`Qb00?\Y`?ELY`GXD`WXVg J : ?* ?>?@0@0Ot?4`?I$`RX [(* ?`0?T`* ?J ?J OtE?I?00Ot@0?@0 J ?$`?D`$`?4`?BX J @0?P000aI?GX? : : U ?7X?J D`* ?BX ?U?Ot00 ?LY`?E?4`?7X?RX ?a?IU?7X?cK?EE$`BX E? 4`Vg _tbX WXQJ Otd|^?4`?d`?f`?k?`???$?wҀ?J X.R`P0S-aUD`J E* ?4`?T`?[(?[(?Y=?LY`ET`: ?`0?f`?P0?BX ?: WX`0? ?Vg ?E : P0T`E>>$`: GX * QI* 7XIUBX ?S-?N$`?$`@0aOt?Y=?\Y`?* 7X 00* ?BX ?BX ?* ?I?* LY`?7X?UGXZ ?$`?D`* ?$`7XbX ?^?S-4`?4`BX ?4`?E ? ?> ?: ?E?Y?Y?D`?T|?a``?P0* : D`J GX0000X.R``0$`?T|? ]/Y$`Vg I?E?_t?cK?Ot?y9%`?S?{?r?g×?U?BX RX J RX Y=00?$`LY`UN ?J ?I?I?WX?N4`IT|?7X?w×?t?g×OtS-ULY`?Q?^?U?Q?@0: @0? : 4`P0^E?BX ? 4` 0000?$`* E4`RX a``N?I?P0?GX?@0?* ? ?4`* @0?4`?00 ?P0?T`00$`?J $`N?* ? Vg ?T`?D`LY`: ?I U@07X? 4`?: ?E00?>?a?]/?GX?I?LY`RX WXP04`?S-?]/?4`: ?7X?: D`\Y`_tI4`?$`?GX? 4`* ?WX?y ? ?gX?00?Y?RX : P0BX ?D`?* P0Y=[(GX?E?>?: ?^ ?X.R`? ?LY`?P0?Q?t|?}?a``cK`0LY` ?U?]/?T`?P0?LY`?>?@0?P0?GX$`E[(S-?00?: ?BX ?$`007X? D`4`?: IY=4`? : ? ?0000D`00?>?E?* ?$`?00?* ?: >? * ^ aQBX >7X? D`?BX @0S-BX 4` ?: $`N$`? LY`4`?Y=?UD`LY`?: ?7XGX>?: ?P0?_t?^ ?> D`]/YGXRX LY`BX E?007Xc-cK4`?T|?S-?00 ?>?7XLY`Vg 00?00@0RX ^eC6Q?Vg ?RX ?4`?Z ?WX?7X?dm ?n?Y?Z ?e* h.R`a``OtBX ?* ? ?4`?* ?: ?T|?RX : P07X4`IN7X?E?I4`WXVg ? ?BX I$`?T`* T`? QGXOt^ ^ S-?* ?\Y`?Z ?E?00? EWXJ Ota```Bu ^U? : ? ?: QP0NI?00?J 7XWXRX 7X$`$`?$`? II?4`?4`$`?: ?GX?4`?7XBX 4`N`0N?D`?*  ?$`LY`Y?$`?QNbP0?00?N?P0>Y00* `0]/ ? 4`LY`cKkmN?bX ?Y=EBX 7XBX ?Z ?h ?LY`>* T`aX.R`GX>GXLY`7X?7X?: EVg 00?4`Vg bE?Ot?@0GXBX ?: ?$`N^Z ?7X?IWXLY`?X.R`?@0LY`$`IX.R`GXT`b_tYJ ?GX?WX?I?@0?>BX Z E?>$`I>D` ?T|?E?$`?P0?: $`$`J @0?N?E4`007X ?S-?EP0Ot?$`?P0?P0@0BX WXP0I>?@0?: $`?D`?T|?D`* $`?LY`?[(?I$` ?00RX ^4`BX aU?$`? Nd`a``?$`?c-?YOt]/S-E?00?00EIEOtBX  ?00?GX?00@0$`?J ?OtJ fg `0@0P0Y ?Y=?Vg 4`?$`7XJ P0Ot?BX ?LY`YT`?T`?GX@0@0[(]/ LY`@0J Y=Ot  ?00?N? YN?I?E $`?J ?WX?Q: ?4`?bX ?_t?Vg ?P0* ?: ?^ ?00E?Q?I4`?RX ?QUY=?00?X.R`?P0D`S-BX P0T`00 ?$`?T|?WX?T`?X.R`?S-?GX?4` ?E?_t?[(?E? ?: ?BX : J BX ^ eC6URX X.R`OtI@0BX Z T`?BX ?\Y`?h.R`?i=?RX * ? ?>?00J UGXRX S-?: ?J ? ?D`?P0?* >7X?* >a`0>? ? ?4`?LY`?LY`? ?$`?D`?* ?00?4`@0?D`EGX?: 4`LY`GX[(Vg ?>?J ?7X?: @0[(X.R`J J : ?: 00^RX ?LY`?Ot00GXBX * 4`?GXD`?BX ?d|?[(?I?: J ? ?\Y`@0_t?>?BX Q? ?LY`IS-: $`RX WXGXBX ? ?P0?* ?S-?X.R`?T|?P0?: ?RX ?_t?N?BX ?Z ?Y=?* ILY`IOt>00_th.R`bX \Y`WXVg U: N^ ?* ?c-?s-?g ?@?{(?]/?N?4`: GXGX]/X.R`?Ot?IX.R`Q?>?@0BX Vg I$`ED`? ?$`00GXGX: 4`?4`?J ?@0?E?BX IN  7XVg X.R`S-T|>?7X?$`?4`?* OtZ Ot>EGX>RX \Y`: ?S-?I?$`? 00GX?GXJ ?RX D`X.R`GXWXP0?@0RX fg BX ?E?E?P0? ?* N> * $`00?7X?Ot00BX ?P0?[(?S-?$`I?J ?h ?^BX GX?: ?D`D`^ `Bu Q?4`?@04`$` P0Z \Y`GX?ELY``Bu ?* ?`Bu ??j{@?!@??i?NGXP0 GX^WX?BX $`c-Y=00: D`BX ?>?: ?BX ?BX : T|S-LY`S-T`7XEEGXY=WX: D`UVg YLY`?D`?7XD`? ? T`Vg BX 4`D`J NUN?7X?>D` ?T|?T|?: ?7X?UOtN ^b ? E>Z 4`?T`?Z ?a?Y=?J ?Y?LY`D`?>?a?[(?D`* 7X* I>?T`?`Bu ?WX?$`Q$`?^?T`S-]/* ?@0I^ X.R`7X?@0?00?I?h ?eC6>^Z E d`inOt?GX?0 ?F??+?lY ?J T|X.R`?>?00: T`]/T|^ a: Id`Z ? ?LY`?Q?LY`?E?00ELY`?* ?4`X.R`a: ?00EQYaU: * : D`BX P0$`?Z ?LY`7X?7X?4`LY`Ot>7XBX GXD`D`00? Na``P0?LY`?LY`$` ?cK?  ?ELY`Y=?D`?Y=?: ?: ?BX   ?00?E?Y=?U?GX?WX?II?E?fg ?]/?004`OtS-E?00?T`?X.R`?U?N @0? ?7X* >? QLY`* ?$`E ?eC6?]/]/a``Y]/a``qp Q?$`??|@?M(`?B?fg ?4`aZ ?D`?: ?* 7X]/a``d`Z ?$`Qj `000? ?I?NJ P0$`?Ot? eC6e?@0?`0?T|?BX D`WX> >$`?* ?00?T`?BX ? ?Ot?D`@0GX$`?J ?RX ?>?$`4`: OtZ Ot?4`?E GX?j ?\Y`?U?Y? U@0?>?$`?$`?@0D`S-T|$`?* * ?00S-? ?[(?00LY`$`$`D`?$`?Q?LY`?4`?>?Ot?GX* 4`?@0?I?4`?* * : ?@0?4`>? @0S-?@0* g×`Bu Q`Bu `0jC`f!?BX ?P0?y ?@?v??a``?$`d|Z D` Ot7X: J 00T|c-QD`T` ?LY`4`[(S-? ?* WXkmb?J ?`Bu ?Y?WX?E?GX?`0?S-D`4`? ?BX ?D` BX J ?$`?Vg ?J 00I? ?cK?jC`?WX?* $`BX  ?: ? * ?J ?Q* ?dm ?Y=?N?7X: UY=NENLY`J D`00: : D`T`I4`Ot: ?D`4`J ?GX?T|?D`?J ?RX ?7X>: ?$`?BX ?00?00?J ?$`J 00?$`?* ?I$`T|? ?$`T|00: bS-00P0* GXWX?Vg ?_t?D`?pwҀ?y9%`?n ?f`?P0UGXNa``Vg T|T|?I?RX * : RX [(D`: RX 7X?E7X^P0?4`00\Y`\Y`@0?00* : ?7X?Ot?eC6?r?fg D`RX @0* ?GX?QT|WX?* ?U?@07XN4`?`0?dm ?: BX : ?Ot?U?EEBX S-?4`* >S-RX LY`P0@0BX [(`0WX?\Y`?Y= S-X.R`Ot: RX WX7X? ?Ot?Q?$`?: ?4` >>?* ?I?N?@0P0Y=?4`?S-4`NZ * ? RX ?00WXGX?$`BX * U?>?T|>$`?P0?T|?]/?J 00?$`LY`a``Z ad|QGXLY`? 00X.R`Ot?$`?00 E`Bu T`?> E?I?Y?$`T`T`@0?00?a?oD?bEYQ>?>?Ot?D`00GX?$`?@000@0D`BX ?7X?4`BX 00? ?@0?Vg ?E4`? * Vg \Y`d|QOt* BX D`>@0?7X?7XRX YLY`?$`?\Y`?S-QZ GX4`>U^I? D`\Y`X.R`00?E?Ot?00E>?: ?J ?7XNJ ?Z ?b?00@0@0RX : ?4`?N?P0BX ?I: OtLY`LY`? >?E?GX>>EGX?00* S-GXJ [(afg a``>* J $`?S-?S-00OtNY=LY`?N?>?Y?^ ?4`7X: E>?00?GX?$`IQP0D`: : ? ?: * EOtOt? ?GX?* ? ?* ?BX ?N? 00?@0BX _tD`?00@0J T|J * ?LY`?E?00$`: ?@0?J ?$` ?4`: `0Vg ?4`?4`>I ?E? @0 Idm a``BX ?4`?N?J D`Z RX * ?00 7X?N?^ ?T|?P0?D`E@0?GX?Vg ?^?Z ?E?Ot?T|$`RX E?: ?Ot00N?00$`Vg IBX : ?LY`?* ]/Vg ?* ?>D``Bu d`c-aGX?Ot?X.R`?EP0Y=GXBX ?RX ?BX 7X?4`?4` ?>? J 4`?0000E7X: GXGXT``Bu RX ?7XY=bT|?N?_t?T|?LY`?T`?Y?NGXN?: * a^GX>  7X ?@0?BX ?>?00?* ?00? ?@0?: @0GXNVg @0?BX T`N?T`?a* RX ?Q?LY`\Y`Y=$`@0* ?Ot?* Y_tWXBX ? : Ot?Y=?b?T`ERX ?BX ?I?I?J ?P0?: IJ ?$`?U?Y=RX >7X ?LY`?>?4`?Y= lY j Ot4`D`OtY=eC6f!Ot?BX ?* ET`RX 00 >@0LY`T`RX UE?E? Ot?$`?T`?@0?$` BX 7X>WXVg ?4`?J I`0T`?BX ?X.R`?Q?I?I?>00? ?Ot?I>OtBX @0OtUEE? ?@0?>?GX?GXBX $`?@0?$`NT|I00?$`?4`7X^a``? ?Z IVg ?^?]/T|D`?T`$`I?Ot?T|? @0T|WX? ?D`QU?E?^?N@0S-P0E: 7X RX ^ D`?U?a?Z ? I?$`?S-?Vg ?IJ J ?D`GXinf``Bu bX YGX>$`00>IY=Y=E ?00T``0\Y`RX RX [(RX D`WXGX ? ? 00D`?Q?>P04`?T|?P0: : ?4`? 4`@0?J UOt? ?4`?: ?00J Z I00?X.R`?^ ?N?Ot?P0 D`? ?J ?: IUBX ?4`?D`?I?EGXaGX?Q4`D`?`0?X.R`WX00?^?: >?J ?Ot?BX ?N Vg ?$`?Y00Z : ?BX ?004`LY`J ?$`?J ?00D`LY`X.R``Bu 4`?`0?d|?X.R`?$` ?X.R`?cK?P0RX c-Z : ED`?4`?LY`?lY ?fg ?BX ?T|?]/? U^ Z 7X?4`?4`?4` >? ?BX ? ES-Vg ^`0bX bX Q @0OtQ@0?U?WXP0X.R`?7X?T|?X.R`?J GXJ * BX 00?* ?$`aqh.R`D`D`Ot: >E?Q?f`?c-?LY`?N?LY` 4`? ?: ?7X7XE?>?GX?T|?Vg ?4`D`?* ?Vg ?E?>?`0?Vg P0LY`E@0?: : Ot?4`?00S-GX? Ot\Y`N4`>RX [(N?P0?a?OtP0Vg J LY`4`?Ot?Q?@0?>?LY`?^ ?]/7XWX ?Q?GX? ?I?\Y`?f!?D?1`?2?P0 ?Q?4` 7XOtBX 4`BX ?J ?WX?[(?T|?D`? D`WXWXT|a``bX ?QIX.R`OtOt?* ?NIVg BX : ?D`?T`$`D`: D`>ELY`^ cKBX ?BX BX Q ?$`BX ?N?a?_t?@0 ?E?E? J N ?7X004`?BX LY`?RX ?RX ?>?00?RX ?T`$`WX_t`Bu J S-^ D` U`Bu [(Vg GX* * @0Y=cKRX ?E?P0 `Bu a``>?00 * D`00?Q?Y=?U?@0GX?4`?i=?n?^?7X?D`?k(?}?Y`?T@?00Vg ?@0?S-?T|?GX: BX IUOt* ?* ?>?* * >7X?* ? YY=?U?`0J P0?GXI4`E>7XWXBX ?P0?: $`>P0]/]/ ?LY`?RX ?a?a?`0?noD`?rx?i?$`?Q?_t?: Vg N?@0?BX ?BX ?: RX T`?>?D`?4`?00T`X.R`4`T|`Bu ?$`?T|?004`BX >?$`? LY`T`LY`EELY`@0?: ?7XP0`Bu Y* ?J ?I?@0?BX >Q?7X?N>WXaa``@0?I?Ot?Q?BX ?BX ?]/?Z ?7X00 ?X.R`?h.R`?^?00: T`00?f`?vN ?y?iEI?GX?GX?00?  00@0D`@0RX Vg 4`?>RX Vg >?7XZ ^?I?Vg UE?a``?J Z \Y`WXI$`I4`?D`? 00?$`?* Nfg ^ ?S-?[(?fg ?x.R`?xc?{ ?s@?`?wX?\Y` ?: @0^Q?00? ?00?BX @0$`?WX?GX?>GXT`?* @0?J ?I* >X.R`GX?* ?00?E?J 4`RX 4`?P0?^?WX? OtOt00?7X?BX ?I?Ot? ? ?[(?N[(^ P0RX GX?$`?Y?i=?fg ?Y=?_t?YD` ?S-?P0RX Y=IT|? ?g×?c-?00* *  >]/Y?GX?[(?00I? ?@0@0E?Ot?^ ?D`T|^RX IEQWX?00?IZ RX ?X.R` eC6a[([(Ot7X: Vg S-?Ot* dm Ot?X.R`?Y?C6?7?&@?yU?D ?? ?z@?q``RX LY`BX T`P0$`GXP04`7X?* ?Q$`BX ?Ot?@04`?Ot?^ ?WX?>J @0?LY`? X.R`>?T`?T|?I?@0 4`?* ?GX?Q?U?GX>X.R``0X.R`:  : @0?7X?S-@0f!]/00RX Q?BX ?e?_t?: ?Q?X.R`?* J BX ?N?P0OtQ? 4`?LY`?lY`?d|?: ?>?BX X.R`h.R`7X?sb ?t|?D`[(00?E?4`?LY`?\Y`?S- J E>LY`: @0?00?OtILY`?ENeQ QX.R`I* RX aY00?GX [(?$`?Z ?j ?d?.?9?S"`????`00 ?: 00@0EWXI7X ?$`II?Ot?LY`7X?BX ?a``?X.R`RX b00?X.R`? X.R`* ?[(?S-@0GX?D`?WX?EEGX?4`?7XD`Y=aX.R`BX RX WX?D`?e?\Y`NaJ ?00$`P0Q? ?Q* S-?* ?OtLY`E?Q?a?>$`?E?BX ?U?g×?a``?GX? 4`? 4`[(?Y=?}?y? aBX ?4`?D`?U?BX OtP0$`?7X?007X4`$`P0D`?E?* ?7X?T|4`\Y`?U?00Ot@0?D`? E ? EX.R`?BX ?Z ?m/?[??7?F??1?!`?@?Y?N?J ?7X? ?BX ?@0? ? 00> * * ?E?E: $`?RX ?: `Bu `0?>?U7X[(T` 7XZ J ?Y?`0?4`RX LY`? OtGX* 00Vg E?lY ?w×?h ? $` D`GX ?E?Y=?S-D`D`?J ?7XNLY`: ?I?Z ?4`LY`> ?E?T|?: BX X.R`\Y`?00?OtOt?D`?sͩ?nEY=4`?00?4`OtY00?:  4`GXLY`WXT`7X7X?* ?S-T|00?I?4`7X?>?`0?Y?GX?Vg ?N>T`\Y`00?N?T|?`?t??Y ??!?1?0֠?[( >$`7X?P0?Y?J D`RX 4`?@0?J ? : ?* ? T`Ot?4`? ES-`Bu `0X.R`Vg  ?U?D`>4`?4`?IQ7X?E?BX I?$`?oD?tm ?[(7XOtd`]/?$`?^ ?f`?Vg : ?GX?cK?GXS-GX* ? ?@000WX]/]/P0>E: D`Vg  ?J J LY`?X.R`?[(GXEGXNWX[(@0?Ot?: D`$`BX 7X* ET``Bu Y=$`00UT`E>7X?GX?]/?J ?* ?[(?Vg BX QYY* ?: ?i=? ???: ?(h@?aK ?| [(T|IX.R`WX? ?X.R`?NLY`Y=QE: ? ?@0D`?* ?Ot?$`>EOt$`?4`LY`T`4` ?00?00GX: ?I?N?P0?E@07X?D`?GX?J ?D`?$`?RX ?U>RX : Vg fg `000?S-?Y=? RX ?I?e?LY`RX E  ? $`LY`X.R`a``^ QE?@0?T`00Q? ?7X4`? ?Ot?EGXWXT|\Y`a``S-?>?LY`$`BX ?00?* :  $`OtZ eC6d|>?4`RX ^P07X00? GX@0?Vg ?S-D`7X00^X.R`?>?[(?c-?g×?vg ?>.?m?~9?bT`N?*  WX]/N?D`?P07XY=YP0BX 004`E@0?J ?\Y`?GX>E$`?RX ?X.R`?>?@0?Ot?4`$`7XBX ?BX ?RX ?* ?>?Q?$`?LY`?N?U?Y=?* GX7X7X>?$`? J N? ?E?$`J LY`?@0?P0LY`a``P0?$`? * IGX@0QP07X@0 ?LY`* ^D`?Ot U> Vg [(OtY^>?>ILY`@0>: BX ]/bT|Y^ ?4`?P0Vg a00?E? GXQS-@0?GX?>D`?* ?RX @0\Y`I?00?]/?n ?sb ?pwҀ?d`?UJ ?I?Z ?D` D`Y=GX?E00\Y`X.R`I: $`* 7X?$`?T`?Q4`N? ?Vg ?a?[(?P0?Ot?: D`E* ? ?I?* Ot4`?E?00?@0?P0? ?RX ?E>4`* LY`>?: $`4`?WX?^? 00?Ot?RX BX egXN?@0?00N^ WX4`@0LY`00@0Q4` QD`?: Ia``UIY=U>QYLY`>@0LY`Z [(>?D`? \Y`Z ?: ?4`@0?D`?$`d|a?BX ?T`?00>LY`IBX 7X00D`$`?P0?N7XWX_tY? ?^?eC6?dm ?Z ?D`$`?E?I?I?@0^]/D`YGX@0LY` ?GX?BX ?I?T`?4`S-S-?00?Y=?`Bu ?]/?Z ?Q7XN?4`$`OtX.R`BX ?$`?7X?Ot?D`QVg ?* ?N? * LY`a``^ IWXRX ?`0?gX?4`?[(?LY`T`\Y`P0 ?4`* T|_tT` I`0Vg 7X@000?I?Q?I?4`BX J  LY`GX 00NUP0* D`^ T`?Q?_t?I4`?E?a?Z ?RX ?UJ iU?N?D`?@0?P0?BX 007X$`Ot7X?P0?LY`D`Ot?I?b?Y=? D`D`4`@0BX IRX ?7X?LY`OtT`* 00?: @0Z 4`?LY`?* ?* ?T`?P0 @0?E?RX ?Vg ?[(?J E ?T`?D`: D`GX>? ?00?N?T`T|I?$`?* ?4`?$`OtP0: T`Ot?Z ?`Bu 4`00?GXIZ ?* ?U?00EOtVg WX7X?E: c-\Y`?BX ?RX ?4`?GX?\Y`?U? ?BX ?E7X7X* : S-J @0U?^?RX J BX ?Y?_t?Q?a?eC64``Bu ? ?N* ?E?bX ?Z ?D`?E?Q?T`?@0BX 7X?N?P07X4`?`Bu ?in?RX NS-NEVg QOtX.R`@0?D`?0000* 00? ?: >RX $`? QP0?D`?U?J >00 00 IZ  ?X.R`?>: ? ?GX?Q?I?7X?Q?GXT`T`?: ?4`J @0?I?U?BX ? ?* ?GX?U?00P0$`?>T`\Y`?D`?[(? P0LY`Vg Z 4`?I Vg BX ?^?c-?7XI00: P0 ?N? D`$`: T|T`T`Z RX 7X00?D`?J 4`aWX?Q?J I?Ot?dm ?4`BX ?T`?Q: ?00?X.R`?LY`? ?BX ?Vg ?T`?GX?N?Y=?]/?Q7XLY`? $`]/X.R`?$`UWXE4`NGX?00?00Ot^X.R`LY`: ?* ?GX?ENT`J 00? $`ID`IZ Y=Z aJ ?@0  ?LY`?U?Vg ?E?J ?4`^ Y?: ? NGX00$`RX [(4`?WX?QBX N?4`?RX ?* LY` ?N?$`* ? J [(D`EJ ? ?X.R`?^`Bu dm c-WX?I?Z ? >?E?* UY=X.R`\Y`UBX ?I?`Bu ?P0* ? : J ?Q?LY`]/P0?S-?: ?U?WX?4`00ID` $`? ?X.R`?b?]/?LY`* E* S-f!]/?: ?@0GXBX ?   ? 7X^dm YE$`?Q?Y=?J ?@0?IY^BX ?$`$` 4`T|Ot$`>GXEJ ?E?>?7X?  ?N?OtELY`?  * RX RX ?$`>d|\Y`?E?>@0?BX ?N?T|?$`: ?@0?004`?7XLY`4`$`BX  $`?* * _tg×cKGX?T`?Y=?7X?7X?Z ?X.R`?4`? $`BX $`?: ?Z ?gX?RX E?I?RX @0?>?RX Vg Y?E?: BX ?: ?WX?RX ?$`4`004`>: BX * ?@0?4` >@0?E?7X[(a``N?@0?Vg @0?00?* $`EGX ?: ?@0?BX >?: ?Y?OtLY`^BX ?LY`?GX?@0?: D`D`?J ?T`S-S- ?* @0D`$`?00?Q?T`?D`?GX?I?* ?00?$`J 7X?a?a``ES-?>* ?Vg ?P0? ?N?BX  ?E [(@0?> ?$`?E?U?* Q* ?: IZ RX : 00* ?D`?X.R`?Vg ?@0?$`* >?D`?U?P0?U?D`J ?* Z S-?4`GXOt?@000^ Ot?D`?D`00D`4`?4`?P0?LY`? 4`WXRX ?>?: ?>\Y`fg a?\Y`Z D`BX GX? ?7X?: $`?00BX Y=RX ?>?J [(WX?7X?@0? ?* GXY ?Vg ?BX GX@0?7X?* EOt4`?BX ?LY`?$`? ?Vg ?[(?>0000GXI?P0?_t?* 00?E  ?a``?]/ ?00?@0? ?J * _tE?I?$`>* ?J ?X.R`? LY`?: ?WX?I?00?@0UT`? ?D`?: T|U@0BX ?$`?Q BX ?>? BX GX_t`0@0>N@0YgX[(00LY`Z YU* ?WX?QBX BX @0U* ?a?dm ?\Y`?II^]/T`?@0d`YUWX7X00RX IJ ]/RX ?$`>T`00>?: ?BX Vg ]/* 00T`GXEWX: ?RX ?E* ? ?D`?: GXLY`?$`?E: J ?GX?Z ?4`P0EBX ^\Y`* 4`D`?00? ?00?b?a : 4`@0? 4`RX ?GX J S-EEN?* ?S-?WX?X.R`?WX?GXEJ ?4`?: ? BX `Bu 00?n?in?: ?7X* LY`?GX?P04`>Ot]/J 00RX T`T|\Y`N$`T|_tVg Vg I?J ?$`]/Y=J J ?@0?a``?c-?a``?X.R`$`GX ?$`?: ?7X`Bu `0_t^ E@0^ bX `0bQ?@0 LY`? >?$`?D`$` ?>BX ^P0? ?D`?T`?00I@0? ?: ?@0: YLY`?00 E? ?I4`Vg * ?EN[(? ?E$`?7X?Q?X.R`?dm ?a``? QT`RX OtYY: $`D`GXQQ@0@0GX>?$`?Ot?GX?* ?4`7XT`D`? ?> Z ?\Y`?2?~?P0: ?* @0 P0BX >Vg EOtLY`?* ?* ?00?>D`P0 * : ?GX?GXEQQLY`?>?P0?* ?4`?GX7X* 4` ?4`LY`]/]/`Bu T|4`P0_t_tZ GXNX.R`D` >J : ?LY`?Z ?EBX E?E?P0?U?T`$`[(X.R`7X?: ?@04`WXX.R`D`4`4`? ?4`D`P0?@0?X.R` S-?* ?WX?U?X.R`?^ ?a?eC6?cK?GXLY`N @0c-d`OtBX I4`$`$`?$`?4`?00? ?4`?>J Z 7X7X^U? LY`a?E?yn?uOJ ?D`7XT`X.R`_tQ7XE?: J N?4`?BX ?7X?00GXN?7X?>$`?GX?\Y`?RX ? IJ ?4`?I 00?$`$`J NIOtOt RX GXT`WX?* Vg `Bu T`D`LY`T|GX? ? I`Bu WX?T`?Z D`Ot?BX ?N?GX?P0?T`?I@0^Vg ?* ?E D`BX GXQRX D`?7X?BX ?$`?S-?J 4`J J ? ?[(?`0?S-?Ot?\Y`?a?OtD`@0?Q?IWX\Y`$`?00? ?  * ?D`?Ot?J ?4`T`]/?7XRX J  U`0U ?P0? U00?OtT`WXRX @0* ?GX?EIZ P04`>YX.R`?00D`* ?BX ? 7X@0@0?D`?J ?N?J P0>?D`* Z 4`P0?4`? GX?: ?BX X.R`a``LY`7XRX N?E?T`?$`P0]/LY`?Vg ?J ]/Y?00?$`?$`?RX ?LY`4`T|Z J ?@0?@0D`N?* IYLY`?>?@0? ?S-?]/?LY`?in?y ?noD`?@0?WX?_t?>?4`?Vg ?Y?: OtJ ?GX?N$`?J ?N?E?7X$`EOtJ ?007XN00I* ? Z X.R`?T`?^: [(N? ?@0?4`GXN?$`?00GX: ?@0?* IUP07X00LY`T|N4`BX T`QRX ]/Z D`$`* ?E?RX ?P0RX ?`Bu ?S-J QS-?BX ?>>?7X?D`LY`RX 4`^aE OtUN ?J ^ X.R`@0N00?P0?* WXYI@0BX >IN ?@04`Vg I?BX ? J ?J ?\Y`?^ ?W??iz?lY`?T|?`0?WX?\Y`?b?X.R`? @0?* ?U?Q?E?N?I?@0?GX?7X*  >GXRX S-?D`GX_tZ J ?4`?P07X?S-?Y= @0 N>?P0 T`?: ?BX Vg Ot?4`: Ot ?@0S-WX$`?4`J \Y`T`: : P0T|LY`?: * ?4`?I?4`@0?00?b?_t? P07X?D`* S-* ?>? ?$`?>4``0k(g×[(T|T|P0D`* LY`Y>?4`BX D`?0000T|7X?LY`Z UEJ  ?Q?@0NGX?E? Vg  ?N?Y?O?B?D?k?7X?^ ?d`?eC6?a``?N? ?D`?gX?pBu ?d`?Ot?D`?@0?* ? ?S-?U? P0Y=S-?: ?T`7XaVg ?7X?P0?RX ?GXD`YWXJ ?4`?$`Z D`?bX ?NT`?: ?EWX: ?QD`Y=? ?S-4`d|bX ?4`?GXU^00?E?E?I?$`LY`$`?J 4`YI?00?BX ?>?I?^?]/?4` ?Q?S-4`T|J D`I00?00?: [(a``7X?I00T|J ? 4`GX?LY`?^  \Y`LY`00BX ?7X?Vg ? WXGX7XQ$`?WX?Q4`BX ?7X?@0D`4`?4`?q?@?{ ?:  ?[(?bX ?[(?7XBX @0?D`?km?sb ?eC6? GXI?I?* ?00?X.R`?T|$`OtP0J ? ?N?@0: ?$`?Y?LY`D`LY`Q^\Y`E?@0?>P0D`?Y?GXGX?GX?J P0? ?[(: bX RX ? @0`0]/T|D`?I?7X* ?E?P0$`4`? Z jC`bX Ot$`?@0?00? ?@0?* ?@0?WX?T`?4`$`D`^f`^ @0?GX?WX?4`4`?Y=?e?LY`BX ?7X?Y?GX$`?T`?^Oth.R`U 7X?* ?LY`* D`?>? Q: ?$`?: ?* 00?00?* 4`4`E? ?00?[(?b?a?U: T`GX?Vg ?c-?NP0X.R`GX?J ?X.R`?7X$`?4`? 4`00BX T`RX * ?>? ?I?7XWX[(>?$`?BX T|Vg T|LY`?GX?J BX ? ?T| \Y`^N  : 7XLY`P0? ?BX BX S-?$`?X.R`?GX00@0[(g×d|Z 7X?E4`Y=LY`? $`?$`? ? ?00 WXeaOt4`?00 ?T`?`Bu ?P0?BX ?RX ?U?* BX ?: ?J Uc-I? ?@0?eC6?j ?Q?@0? ?$`S-Vg ?T`?URX OtOtN OtX.R` ?a?i=?d`?^?Vg N* ?>?GX?GXI@0?E?^ ?^?00QVg Q00?* E]/\Y`P0@0J WXD`?: * BX ?$`? @04` ?4`?$`T|b`Bu T` ?@0?$`?7X?I?@0@0BX  >>E@0* @0?N?X.R`?D`>?BX 00T|N?E?X.R`? UIT|QNE00?7X?$`GXBX * GXI: 4`? ?7X?I?T|?D`@0OtP000?7X7XI?I?i=?}dq`?D?m?: 4`7X?D`?RX NY=?RX ?P0aa``P0^_tLY`GX$`?P0?Y?Y?RX ?4` D`T`7X?T`?Y=?Ot?0000?7X?]/?a?Ot4`T`\Y`WX> Q^ UNJ GXT|Q?00?$`@000IWX ?E @07X$`: RX Q?D`?: ? ?00?J ?Ot?BX D`a`Bu 7X?: ?BX ?BX ?P0?T`?BX $`* ?Q?`Bu ?J BX 00?LY`?I: J 00 X.R`OtBX >00?GX?RX ?@0?E?Q?@0? ?  ?J ?T|$`WXP0LY`GX $`?RX ?in?w: ?ޠ?}, ?lY`?E* BX ? ?LY`$`T|D`J a_tY_tY=WXY? ?Ot@0I?00@0X.R`T|Vg GX?P0?U?D`? D`$`?[(?WXBX N : >@0RX Y=P0E4`?$`EN?P0?LY`URX 00>?D`?S-GX]/7X?Ot?>QRX ?00?E00NN7X?4`?@0Ed|a?00?RX ?P0?U?D`7X? ?4`@0E?D`?X.R`?7XT`P0?$`?7XJ ]/U>$`E@0? ?: ?@0? ?D`?U?U?LY` J @0? ?E?D`BX Ot7XLY`S-7X@07X?eC6?w?yn?q?`0?D`?4`?: ?$` ?00?00Qc-_tGX7XUWX4`GXY?00?LY`X.R`Y?I?D`@07X>?Ot? I7X: ?Y=?Vg S-S-?J ?Vg ?@0007X: D`>4`Y: ?t?x.R`?@0Y=? ? ?7XLY`^P0 4`P0$`?Vg ?IOtS-D`OtVg GX : ?RX ?N?4`?Q?IOtT`>P0S-?E?Ot`0lY`P0?Q?GX7XP0N7X 4`BX ? ? >ENOt>? ?N?S-7X\Y`S-0000E$`? LY`J ?00* >?c-?ux ?pwҀ?D`NGXE00?E?N?GX?: OtcK[(?* LY`P0? $`?J ?GXWXT|?P0?X.R`?BX ?$`? ?T|?_tD`^ ?>?Q?00?^ ?aBX T|?4`?N?0000 ?>?J ?Ot?>? @0a?7X?=l?s`?p Vg BX BX 7X: D`ED`D`P0 ?Y?7XZ @0?T|?: WXVg ?$`?Ot?N?Q?D` ?BX ?S-7XY=OtRX [(? ?N`0j : ?RX ?BX ?BX ?> * EOtE?BX ?D`EVg Z \Y`U?@0?^?BX NP0ID`7X ?D`?J ?* ?S-?D`D`* ?RX ?P0Y=\Y`?4`?T|?$`NT`OtNT|LY` @0RX 4`?S-?Z ?>E?S-?LY` GX: ?\Y`?dm EbX ?@0?Y=?00?T|?a? RX > ?$`?7X?D`?U?`Bu ?S-?* ? D`?N?}??r" ? ?I?4`BX S-D` ? Y=X.R`?@0* a``BX ?^?T`7XE D`@0* ?$`?Z ?NUU@0RX ?[(Y ?: 7X ? 00N[(U7X?U?]/?\Y`?Q$`NX.R`Vg ? ?P0?BX ?4`J E? ?: ?J ?Q?BX ?* ?BX ?I* UGX?$`? ?$` X.R`WX?* ? [(cKE?Y?LY`^\Y`?@0? `0WX?U?^?$`?4`?`0?a?>EQD`?Q?[(: Y?00?I@0 ?P0?4`: 7X4`?7X?T`?Ot? ?$`?P0?LY`? ?@0?P0?N?^ ?e?`Bu ?Y=?Y=?Vg ?J Qdm WX?Ec-d`?>?: ]/LY`?D`* ?00 RX `0`0P0OtN?LY`?WXEI?I$`BX ?Y?T|: ?: 00BX >7XU\Y`E>?@0?T|?^ ?Y=?J ?I?BX ?* 00WXU?BX ?Ot007X?4`?7X? * BX QLY`?: ?J ?7X?U?[( RX OtQ$`?: EUBX ?S-?i=?d|00T` T`P0?J ?RX 7X?* ?d`?cK?@0: BX D`: $`007X? ?007X>? ?4`?00$`?I?^?X.R`?00@000?4`* GX?* ?GXI^ ?_t?T`$`RX `Bu J ?* ?@0_t^ ?LY`?P0N: ?00E>?@0?4`7XQY=RX S-[(: ?LY`?$`?T`Ea?* ?T| ?BX ?$`00?@0>D`4`QJ $`?  ?: ?\Y`?bX ?\Y`? b`0?>?T`?: ?$`?* ?00: ]/aZ Q?00?Ot?S-?dm ?c-?00: GXX.R`BX >?RX ?cK?T`?D`?LY`?00IZ P0?7X?E?GX?I$`?Y?T| >@0Q[(Y@0* 7X?>?Ot?* > ?>?: ?00?Q?Y?S-?Ot?7X00?4`? _t]/?7X?$`T|00?Q00Y=J >BX * 4`$`?@000T`4` I?LY`?00$`?$`?E?I?* $`?00?* IGX? ?$`?: Yf`7X?RX ?4`?$`?004`: ?00?P0?7XD`RX E D`S-$`?N?Q?U?LY`@0@0?* ?00?BX ?@000? Z [(: ?00? * ?D`?N?LY`?[(?* `0Ot$`BX ?Vg ?`0: UOtQT|a[(?4`?J ?>?P0?P0?S-?[(?: P0LY`D`P0WXT`>BX I?J ?`0?LY`EI?4`?S-?U?X.R`?J * ?* ?@0* ?BX ?S-T|d`$`?S-?E?GX?@0J U@000IT`]/Q?Ot?S-N]/@0?7X?>?J ?OtBX ?4`?>: ?$`?Y=?RX 4`BX 4`: $`P0Y7X?* ?00?I?: @04`?: ?GX?>* 4`* ?* * @000NY* ?J ?I?J J ?7X?: Vg P0? >?$`?T|?>$`IBX * ?E?^ ?* X.R`?BX ?P0OtI$`?^ ?yn?t`BX _tRX [(]/S-$`?P0?Z ?d`?fg ?BX RX @0 4`BX > 00?N?\Y`?J : N?$`?\Y`?]/?S-? WXWXLY`P0?7X?]/ ^ LY`?7X?Q?WX?@0GXBX ? * T|`Bu aT|?@0?QEVg ?RX ?gX?Y?GX?T`S-$`: ]/?`0?00]/T|7X ?7X?>* EGXN4`?GX?7X4`?7X?LY`?4` 00?Q?4`LY`J 00?7X?$`[(bX 7X?7X?$`?P0?GX>?4`? bX a00?@0?[(?`Bu ?* 00?* ?  ?: 00@0?Vg ?T`Ot]/I?}, ?݄??cKa: Y=k(`0?$`?RX ?Vg ?eC6?h.R`?I@0?* ?: $`IP0* ?4`?* ?7X?00? D`? ?\Y`?Vg ?00BX J P0Vg  ?RX $`X.R`UN? ?Q?$`N: ?@0?: IYRX @0*  E@0?Y=?gX?Y?N?Z ?>J ? 4`^ ? ?`Bu >eC6WX?@0?RX ?I7XD` ILY`?7X?I$`NGX?[(?@0T|U4`?N?RX 00: ?Ot?: I?D`?Z ?@0?00?* T`Vg ?P0?^ ?X.R`?>? ?BX ?7XNBX ? 7XBX BX 7X: 00? ?8c?MH ?p0N?* Na``00?X.R`?U?Vg ?d|?c-?BX ? ?: >P0\Y`S-: 0000D`@0: ?X.R`?S-* $`?GX?Vg ?D`LY`D`GXQOtWXGX?4` I: ?7X?D`@0T|* ?GX? J BX ?$`?4` ?>?Q?@0?J ?7XS-7X?Ot4`T|?LY`?P0?Vg ?EGX@0?Ot?U?7XD`WXT`?: $`@0: ?LY`QJ : ?00?T|?S-?LY`?U?>Ot ?Vg ?D` ?E?I?* ?4`?GX?J ?00$`?>?BX ?@0? Z J ?I>`Bu Q?J ?Y?Vg ?uC6?`?``?fg ?S-?Z ?@0?7X?Z ?WX?>?RX ?c-?WX?* ?D`?* LY`4`RX YWXS-00* D`>E@0?GX?LY`: Vg @0?Y?UIQ7X@04`00OtE?* ?: ?$`* 00: J ?4`?Z ?Ot: ? ?Vg ?00S-E7XOtBX ?00?GX?@0BX QEI7X?P0?Y?T`?U?I>D`?7X?4`GXP0NN00?$`?00?D`?> UY=QY=^7X?BX $`? 7X4`?E?* I?00?X.R`?D`7X >>?4`?7X$`? * U00?N@0Ot?I?U?[(?s-?\?xj?Y$`?T`?]/?Vg ?^?_t?: BX ?: ?T|? * ?N?00Ot? ?I: S-YX.R`* ?7X4`GXLY`N: ? >ab?@0P0RX 7X4`? ?* 00 ?00?@0?GX?$`00? ?00?00?LY`?N? ?4`?U?BX 7X?00D`bRX ? 4` GXS-Vg RX ?* ?Q?GX?I?LY`$`P0ENZ QD`S-J 004`? * \Y`\Y`RX ^eZ 7XIQ? ?D`?$`?BX \Y`T`?BX T`D`?* 7X? BX J * ?BX ?WX?J J ?Z 4`P0?t|?]?{mD`gXT`?LY`?Y=?T|?$`* ?7X?4`J D`?LY`?@07X?00?* GXD`>LY`7X?00D`J GXD` ?4`GXX.R`* ? J LY`LY`I?4`?E?00?4`* ?* ?: ?J ?S-?@0* LY`RX ?: >OtP0D`?$`IVg ?: ?>UJ ?7X?*  J Vg >? BX 4`?: 4`T`7X?$`>4`* N4`? S-[([(EE$`$`BX : ?* ? 4`?E?T|?7X? 4`a`0* 00S->?@0?7X? ?* @0RX ?* ?a``?c-?7XQ?J ]/km?S-?x.R`?oDT`inbX LY`?7X?N?D`?00?@0?Ot?@0BX 4`?D`?>?$`? LY`T|?Ot?BX ? ?* ? J S-7X?$`?LY`?BX  ?: ?@0 7XP0E?Ot?Q?* ?00E@0?7X?^ ?_t QT|\Y`@0?BX Ia[(OtRX Z ?a``?P0RX >?: ?4`?@0?* * ?$`4`X.R`P0? @0WX ?T`?D`?>?Ot?N?Z ?Z @0[([($` *  ?@0?T`?S-?N?GX?4`?I?P04`P0>EJ * ?$`? >I>?00?BX ?: ?Q?]/?ELY`LY`? ?* IYP0: GXOtJ E* ?BX ?LY`?: ?7X?Vg ?S-?>?I?J ?* ?00$`Z X.R`?* ?RX ?T`?LY`?: T`\Y`>:  GX? ?Q?RX ?I?7X?Z ?J BX $`?007XP0BX ?U?YBX GX?: 4`E? 7XI?* ?00Yb?`0?Ot?GX?BX ?$`?7X?$`?: ?LY`P07X?007XRX  ?P0?>?BX ?[(?]/?Z ?X.R`?7X?4`?GX?@ 7XRW@T`N@ Ya4RW@?0 $`I*qD`TI@ 4`N@ 0 ?BW@?$`@ EEP [`_'@X.@LYYI$`?TI?N@ QzT`BW@T`E?@ q?IE].̀ q?>@ RW@D`?D`BW@UD`\YYf0 RW@?4`?@ ?7XJqaX.@?7XBW@:q?Y?S-a].̀bW@@ O'@c-aYI^@ T`?P ?0 ].̀LYY*qY^@ ZqP ?:q*q`BM`Y`QzUJq*qq>@ \YYdm `BM`T`@ *q7X?;`?oDm?c-a?\YYYO'@?N@ ?7X?X.@?fv@?`BM`?oDm?x?r?nٳ?sb?qz?b¨ ?LYY?T`?a?].̀?^@ ?fv@?\YY4`QzN@ ED`T`^ٳ].̀_'@dm a4T`QzV0 P EBW@GXQzS-a@ q@ E?4`?P *qa4bW@7X?N@ ? qS-aLYYIY`Y`[`bW@Qz?0 0 0 ?LYY0 aQz0 Y`Qz?*qO'@D`?Uq^@ 0 ?4` q?>@ GXf0 _'@?7X?Zq?TI?E?Y?`BM`? qS-a>@ *q@ 4`TIg]`TI?\YY?Y`?7X?$`S-aY?qBW@].̀ q?>@ N@ T`WXWX*q?*q:qN@ X.@_'@V0 q?4`BW@TI?m.̀?RW@?az?X.@BW@BW@O'@\YY?LYY?h?Y`?dm ?{+?~ٳ?sx?f0 ?a?P ?q?P ?^@ ?N@ ?RW@?inD?h?7XX.@WXP QzV0 Y`afv@fd``BM`[``BM`b¨ Qz?:q?$`N@ O'@IU`BM`Y?@ ?].̀?*q].̀U?TI?jq?^@ N@ WX@ :qT`dIh.@TI?q q q?I?@ Qz].̀].̀].̀*q?LYYGX q?f0 ?WXD`?D`?D`@ $`O'@[`?N@ ?GX?Jq? q>@ ?:q?:q7X*q?q?0 ?GX?$`X.@Qz?P ?Y?LYY7Xa4T`?TI?>@ Jq?N@ ?].̀?4`Qz_'@\YYBW@$`4` q?$`?q?D`?^ٳ?V0 TI` ?|?zC ?k@? q*qq`BM`e?0 ?c-a?LYY?TI?wX?}.̀?gX>@ ?$`?N@ ?:q?Jq?Qz?q?*q?_'@?b¨ ?>@ 4`?@ `BM`cTI\YYfv@^@ GXRW@[`azdIT`?D`?*qBW@*q>@ TI[`WX*q?@ 4`QzLYY?:q?az?X.@IN@ ?4`?:qJqc-ac-aQz7X4`7X q?N@ ?BW@Y`d`RW@?Qz?Y`7X q?a4?LYYJq?>@ ?>@ 7XqP I?Y?P O'@N@ ZqiazGXIP Jq4`?LYY?S-a>@ X.@7X?D`?4`BW@N@ ?q?D`EE?P ?U?0 :qILYYQzQz?RW@?U?GX?O'@?eC?`BM`].̀dI?@??+?_'@BW@GXV0 D`?S-a?[`?>@ ?7X?i?pw@?N@ Qz?7X?V0 ?E?4`?:q?*q?*q?D`?@ 4`?q?Y`?*qik@TIJqX.@@ ?@ :qYYS-a4`?qBW@7X?:q0 LYY>@ GXRW@T`RW@D`LYYRW@ q0 ZqS-a q qEX.@UIV0 \YY].̀[`?q?JqX.@a4? q?_'@?X.@7X0 ?V0 ?>@ Jq*qIQzEGX?T`?GXJq q0 ZqO'@?0 ? qGXN@ *q?BW@?7XLYY].̀X.@BW@$`?P ?Zq0 cZq*qBW@N@ *q?@ ?7XN@ S-a?@ ?Y?BW@N@ O'@?S-a?U`BM`fv@?[@??J@?xIU?GX?k@?inD?V0 ?0 E>@ ?:q?0 ?>@ ?V0 ?P BW@E@ >@ :q qqqYlYYk+Zq>@ >@ IEP Y`RW@ q?0 BW@WX>@ ?qV0 ^ٳJqP \YY[`TIBW@GXO'@0 D`X.@I4`D`Jq[`WX:qX.@edm a4Jq:qb¨ `BM`?@ ?].̀?U0 ?TI?U?4`? qQz[`D`JqLYY?$`7XE?LYY?RW@?BW@?Qz?U?Eq q?P ?LYYGXQzO'@` _'@GX@ ?Qz? q].̀V0 >@ O'@TIJq?$`D`@ ?Jq?LYY@ ^@ [` qb¨ d`?=@?נ??zyO'@`BM`?S-a?pd?fv@?@ qWXb¨ T`? q?Qz?TI?qO'@WXYY` `BM`*q?V0 ?P Jqdm d`a4c-aT`IbW@b¨ T`WXTI*qqS-aZqD`@ dm h[`V0 UIJqN@ I:q?$`0 4`?I?>@ :qP f0 dm 4`I` V0 N@ N@ X.@d`U?*q?>@ ?GXqN@ ?D`?TI?*q?7X?>@ 7XP WXGX4`^@ _'@:q q?q?>@ 0 BW@0 ?BW@?c?_'@BW@@ azc-aqLYYeO'@?Jq? qBW@$`$`D`O'@E*q7X0 ?q q:q>@ ?BW@Ea4T`?h???q$`a4N@ ?GXBW@:qN@ @ ?0 q?qBW@\YY^@ GX0 `BM`inDQz?`BM`?f0 ?D`TID`Jqd``BM`Zqi`a4$`N@ V0 :q>@ RW@TIGXIc-ah.@V0 *q?0 ?0 BW@O'@D`:q:qIq?Qz?I?4`$`a4b¨ :qJqX.@4`D`T`Jq?Jq?GXJqIV0 a7X[`N@ ?LYY?IEY`BW@7Xaz^ٳ*q?7X[`T`?:q?T`?dI?bW@0 :q?*qV0 N@ ?].̀?@ fv@_'@?@ ?BW@@ @ $`7XBW@q?*qqBW@GX:q?0 ?4`?>@ ?N@ 0 U?d`?h?jq?i`?V0 N@ TILYYI:q:q?4`?eC?fv@qU:q@ \YYY?I?` qbW@X.@?E?az?V0 q?$`$`\YYX.@].̀jqY`?*qP V0 >@ IQzRW@QzE[`fv@O'@?T`?UO'@D` q7XIO'@Jq:q?Qz?X.@ qBW@*qV0 Y`D`EJqE?0 ?b¨ ?^@ EY`BM`].̀? q?*qBW@?q? q:q>@ O'@EBW@ZqGX?Qz?RW@?T`?0 ` T`?T`?WX?T`?>@ UQz?4`?*q?GX?` ?ULYY\YYLYY? q?*q?E?>@ ?$`?:q?7X$`@ I:q?$`GXS-a?*q?7XGXq?$`7X?LYY?az?WX?I?O'@?D`?7XI?@ ?jq?fv@$`GX?7X?$`O'@P ?E?Zq?4`IJqO'@>@ ?q7XD`QzZqLYYWXjC ` BW@X.@Y`U^@ TIP TI4`D`b¨ TI?Qz?GXT`X.@$` qO'@I:qT`^ٳN@ ?RW@?Y?4`?0 ?$`LYYN@ O'@\YYRW@JqN@ ?BW@?TI?0 7XJq*q?T`?dI?y8?ǵ?hT`:q7XN@ EX.@RW@?$`? q?0 qa^ٳ?$`?I?$`TIdm U?D`?U?E:q0 ? qU\YY?O'@?V0 ?eC?e?Y?LYY?$`q?4`qLYYES-aU?D`?RW@IT` qBW@?7X?BW@?[`?`BM`?O'@?@ ? qO'@7X?LYY?$`>@ ?D`?P JqS-aRW@QzWXN@ BW@^@ ` D`BW@Y`dm fv@URW@fv@c-aLYYO'@U^ٳ_'@ q?GX$`?7X?BW@P TI:q`BM`U?*qD`bW@Y>@ TIbW@S-a?>@ ?*qLYY>@ $`?0 BW@\YYN@ GX[`RW@q?E?O'@?q?q?GX?i?? ?}`@ 7XETI7XUZq$`*q>@ ? q7XRW@RW@q?D`LYY` >@ ?O'@?N@ >@ cZq?0 BW@I?P ?E?*q?d`?lYY?dm ?].̀?Jq?4`?S-a?BW@O'@E?BW@?a?].̀N@ \YY?I?0 q?S-a?c-a?P @ ?:q?Qz*qQzTIZqGX?BW@QzTI[`aza4c_'@T`ZqTI?$` qY`f0 i``BM`JqYY7X4`N@ LYY?:q?h.@?pw@?bW@?I?E?q>@ qD`azY`?4`4`a4\YYD`LYYTIGX?*qO'@RW@RW@GX?:q?$`Jq:q?q?@ ?Jq?q?BW@?Qz:qN@ E?:q?~V?-?u`LYYLYYZqZq4`TII?].̀?RW@GX*q?O'@?IQzP ?Jq?*qGX?GX?O'@*qRW@_'@S-a?$`$`?GX?bW@?qY?7X?Y`?U?Zq?N@ ?BW@?E? q?D`?S-a?U?a4?Y`JqU?b¨ ?].̀?q7X?Zq?eC?$`RW@?Qz?b¨ ?:qRW@N@ *q?q$`IID`S-aT`EV0 `BM`Qz:q$`?7X$`TIZq` \YYBW@>@ D`*qN@ U?4`?c-a?qz?y?t`?S-a0 ?4`?:q?D`?*qazfv@0 ?BW@>@ @ $`?$`? q?*q?0 :qT``BM`].̀@ 4`:q?q?c?k+?O'@?4`?JqQzYIZq?:q?f0 ? qZqP ].̀RW@7X\YY4`?bW@?Y?Y`?f0 ?az?[`X.@ q?0 @ ?7X?$`RW@QzI7X$`D`?BW@?`BM`?7XN@ $`$`>@ ?q7XTIP 7X?BW@?Y`?P ?4`?Qz?N@ GXGX?_'@?_'@7XY?E?a?*qI?Jq?U$`LYY?I?dm ?^ٳ?*q? q?N@ ?GX7X*q?D`4`Qz?4`?Jq>@ LYYLYYP BW@GXX.@RW@BW@*q$`Yaq?O'@?Zq?t`?xct ?ZqS-a4`?$`?>@ ?D`X.@eBW@?GX?*qq0 ?D`?0 4`ITIUUY`X.@UQzRW@Qz?P ?b¨ ?4`?0 ?V0 BW@U$`S-a\YYIE*q>@ Qz?BW@?EO'@? q?TI?sb?^`?  ?;`?m`?_'@:q4`?7XN@ UT`WXP GX7X7X0 ?*q qq? q*qGXP T`Y`@ ?D`?q4`?7X? qRW@BW@?4`?RW@$`N@ ?D`?X.@?7X0 $`*q7X$`?Qz?f?eC?TI?P ?WX?I@ >@ ?:q? q?q?_'@?WXWX^ٳID`*q*qY`azWX:q?*qJqa4].̀` az?X.@?pBM`?Jq^ٳT`UWX*q7XI?$`?*qIS-aT`LYY*q$`D`Y`BM`GX?0 4`Yd`a4Y`[`I?$`7X?E?a?$`TI@ D`D`?>@ ?V0 ?RW@JqO'@?`BM`?a?E?S-a?U?;`?Y`??`?y8?jq?LYY?0 ?TI7X^ٳUIQzZqN@ ?E?RW@?7XBW@O'@N@ Qz4`?Y`?Zq?BW@?Jq?4`UY`QzN@ >@ *qT`` N@ ?E?GX?S-a?[`?N@ ?:q?Jq?4`q?E?BW@q?E?[`?V0 ?GX?Jq?N@ qN@ 4`?$`?O'@?dI?TI^ٳ[` q:q7X? qP `BM`\YYQzq0 `BM`ik@jC LYY?JqE].̀RW@].̀eCY`BW@?BW@*qYZqN@ :q@ >@ >@ LYY?4`?I$`IX.@` [`UJq*q$`?I?X.@*q[`V0 T`Jq?q?LYY?0 _'@WX?].̀?Y`?:q?Qz?LYY?0 ?H@?4?;n`?tm ?c?BW@?:q?^@ ?BW@D`?$`?7XLYYazY`?*q?V0 ?U?:q0 Jq\YYP ?U?].̀?LYY?T`?Qz*qRW@\YYY`BW@E\YY` Qz?O'@?$`?*q?Zq?^@ ?7X?E?b¨ ?V0 ?BW@?:qO'@Jq?4`?q>@ ?P ?k@?eGX0 ?:q?WX?0 `BM`T`LYYI?7X?q@ O'@Y`Qz:q\YYhcV0 D`$`:q@ q>@ U[`^ٳX.@>@ BW@ULYY?BW@?P >@ ?7X?>@ ? q?$`GXX.@$`?:qS-aaV0 @ 4`4`?*q?*qRW@\YYTIQzO'@GX4`:q\YYRW@?O'@?qJq?BW@?:q?q?҆ ??]@?a?P *q?GX?].̀?:q?O'@?GX>@ V0 UGX?LYY?TI?O'@?BW@4`Jq*q$`>@ ?0 >@ US-a qD`JqJq?\YY>@ ?O'@?WX?:q?S-a?dm ?RW@LYYJq7XEILYY].̀^@ ?Y?w#F?u ?Y`7XP Qz0 I_'@RW@7XTIUq?@ ?E?qLYYGX qP ` T`$`?4`?@ ? q$`?$`?:q7X^@ c-aV0 LYYO'@*q?GX?0 JqE?4`?4`$`@ Zq` q?IT`dITIq4`0 ?E?BW@IQz0 ?*q?7X?7X?q qD`@ ?:q? q*q?U?^@ ?Qz?c?o'@?i?az?$`GX?V0 ?WXD`I q$`0 :q@ EJq?$`?U?O'@?@ ?I?@ >@ TIS-a>@ :qI q?I?I?@ qN@ ?].̀?GX?D`?P ?N@ ?:q?N@ ?V0 ?7XGXO'@@ q:qYec-a?I?qz?p ?ZqTI[`JqIX.@RW@GXP T`I?*q?Qz?GX?*q?7X?qJqT`N@ RW@T`:q qN@ TI7X?GX?LYYqS-aV0 V0 N@ ?*q0 dm fD`?GX?0 *q*q7X4`?:q? q^@ a4?U?Jq?P ?bW@?_'@?q@ ?4`?I?D`?@ ?*qq7X*q?4`?@ ?I?X.@?RW@? q?I?gX?`BM`Y^@ ?BW@?0 T`P O'@P 7X7X7X qD`0 ?RW@?:qQz q?RW@?*qP LYYq?BW@?GX?q q?:q?BW@?E?Jq*qS-a?V0 ?^@ ?`BM`?GX7X>@ ? q?q?4`? q?$`?D`$`X.@].̀WX4`?P ?N@ EX.@U4`D`S-aP 0 q7X?@ ?TI?BW@?q?qLYYYED`afv@].̀WXWX@ ? q? q?BW@?E7XYaRW@?E7Xlh?$`?Qz?q0 ?I?WX?S-a*q`BM`[`?I?`BM`?X.@?Zq?c-a?Zq0 O'@?$`?4`QzU4`?*q?4`$`Jq@ LYY` \YYD`>@ ?I4`bW@azUT`>@ ?qJqQz0 :q0 ?>@ BW@S-a?0 `BM`TI?*q7XP D`4`?4`?RW@?I? q4`D`?*q?RW@? qO'@?a?i?d`?*qJq>@ q0 :q*q$`?I?X.@0 ].̀GX?$`4`7Xq@ WX^@ RW@0 ?qN@ P ?>@ ?LYY q?4`?N@ qJqO'@\YYZqq q\YYa4WXYN@ ?Qz?QzJqN@ $`D`UY`RW@?7X?q].̀RW@?BW@QzP Jq?N@ ?LYY0 ^@ [`?$`?GX?q?:q?LYY?>@ N@ [`4`?$`adm *q?E?$`$`@ RW@c-ajC c-aQzJqLYYT`P $`EaTI?GX?N@ :qGX? q?7X?O'@*qWX>@ :qX.@Jq>@ ZqRW@?0 *qJq0 0 O'@Y`Y q?Qz?$`LYY?q?r?i`?V0 ?Jq?LYY?LYY?qRW@ZqLYY?Qz?\YYO'@c?D`?h?[`?@ ?S-a?N@ IYO'@I:q?q>@ I?@ ?@ S-aV0 :qD`TITIQzBW@BW@YN@ qLYYLYY?LYY?BW@YV0 *q:q$`?qEGX*q:qqqS-aV0 QzUQz>@ 0 BW@YV0 $`:qQz@ ?@ ? qX.@LYY?0 X.@b¨ >@ :qZqN@ ?*qBW@ca47X?*q?7X?I4`@ ?Jq*q[`0 ?Jq? q$`? q?*q?7X?7X?7X?*q?0 ?:q7XGX?D`?4`U0 ?X.@?7XZqd`dIa4YO'@$`?$`0 E?sb?t ?qz?k`?bW@?S-a?RW@?BW@ILYY?$`?WX?T`UX.@?lYY?}.̀?s-a?T`?Qz?TI qE>@ P T`@ D`D`D`a4cTIEO'@RW@D`*qBW@X.@_'@O'@BW@LYY?$`$`U7X?@ 0 ?E@ X.@P IE@ :q$`JqLYYN@ N@ IUO'@?4`? q@ 7XBW@?7X?QzLYYWX?0 *qWXU` f0 U?7X$`].̀T`Jq@ ?T`qY`GXT`X.@GX^@ q?Jq?4`?>@ qU@ ?WX?Y`:qP ?GX?Qz? q?I?WX?$`Zqi`l^@ ? q?E?>@ ? q?0 ?a?lYY?t`?rK ?`BM`?4`?RW@?O'@?GX?Y?Qz?4`GX?$`?t`?M?v?BW@I$`>@ >@ 4`U^ٳV0 QzIETIV0 I0 q>@ T`WXRW@JqO'@[`^ٳUN@ *q?D`qRW@0 ?$`O'@P @ T`[`UX.@Qz?$`?P ?I4`D`q@ QzLYYX.@T`?BW@?P ?:q:q\YYJq?N@ 7XTI?@ ?T`? qRW@].̀TI>@ 4`>@ BW@?4`?:q_'@a40 V0 c-aBW@D`Qz:q` iI?4`?q?I qaz].̀?>@ ?N@ O'@^@ @ ?$`?@ ?T`?D`7XLYY`BM`a4*q?Qz?T`?V0 ?Qz?GX?:q0 ?^@ ?rK ?rW@?WX?:q?` ?U>@ ?0 ?LYY4`*q$`?^ٳ?rK ?n@ ?:qBW@?$`>@ Qza4a4TIN@ IN@ O'@?@ ?^ٳ?S-a?$`4`Qz`BM`^ٳ>@ ?4`GX` aTI?q?LYY4`[`UJqLYYD`LYY^@ ].̀UY`P ?BW@?T`Y`P ?>@ $`T`IQzS-a?BW@?V0 ?>@ Jq\YYE?Jq:q?N@ ?Y?LYY:qJq?7X?7XN@ E?BW@?].̀?\YY:qS-a@ [`TI?U?N@ 7XT`e[`D`?q?GX*qY`X.@:q qLYYLYY4`E q?T`?>@ q?*q7X?WX?BW@7X?P ?WXP ?4`?TI?inD?jq?S-a?S-a?f0 ?S-aUS-a>@ >@ q*qY].̀?0 ?_'@?^@ ?b¨ ?inD?^ٳ$``BM`f0 X.@*qD`Jq$`?N@ ?e?h?LYYP RW@N@ X.@X.@q?D`$`GXGXGX*q?qEYTID`?$`?EqV0 V0 GXII? q?GX*q^@ RW@?Jq? qS-a?@ q?D`?ID`TI7X?P ?LYY7X$`?:q$`BW@?0 ?:qBW@7X?7X?BW@?E?*q?7X?4`TILYY?P ?:q*q?N@ ?:qRW@RW@?0 ?T`?*qRW@Jq4`7X4`q?RW@?Zq0 Jq?7Xq4`?:q?*q?WX?fv@? q_'@ q?GXO'@^ٳ?[`?TI?Zq?^@ ?Jq?V0 ?eC?TIBW@LYY:q?$`?>@ qV0 ^ٳ:q?Zq?d`?k`?qM?fv@\YYZq?q?D`N@ Qz?V0 ?p ?s-a?d`LYYdm `BM`O'@@ $`?*q q4`?GX?T`JqLYYLYYGX4`qq$`*q7X0 ?BW@?P ?*q*q?E?ES-aU?@ ?0 I?BW@?U?$`0 @ X.@T`?E?[`].̀P :qS-a4`?@ 7X7X?4`?*q?q0 T`YE?I?BW@T`ZqS-a\YYLYY?LYY?D`$`?7X?^ٳ?a4RW@q7XT`P @ ?RW@?`BM`0 WXLYY\YYY*q7X?I?bW@? q].̀@ qQzP ?U?WX?X.@?T`?I?^ٳ?h?b¨ ?WX?I?q?0 ?*q7XEJq$`?I?Jq?V0 ?eC?^ٳ?$`7X?@ ?Y`?EYY`?X.@?t`?t`?U[`^ٳRW@:q?@ ?RW@?>@ JqJq?LYY?U4`].̀` ].̀YRW@D`Qz\YYBW@?E?0 ?E?` ?V0 q?4`?@ TI].̀?:q? q?LYY?EO'@V0 GX4`?$`?LYY?LYYP f^ٳD`BW@?@ ?QzETI?@ ?7X qQzZq>@ ?P ?*qY[``BM`gX].̀:q4`?$`?P ?X.@?Qzq?$`?D`Qz\YYILYY*q?0 TIUD`az_'@7XT`V0 ?q qEBW@O'@N@ 7X? q?V0 ?\YY?Jq?GX?e?nٳ?h.@?c-a?[`?D`?0 qD`D`IIBW@Jq*q?U?X.@?D`?@ ?V0 ?Zq?$`Zq_'@BW@?^ٳ?fv@?BW@I? q?4`? q?N@ ?V0 ? qV0 O'@?:q?>@ GX\YYbW@fv@k@i`RW@:qQz?4`?UBW@RW@?GX?Jq>@ BW@GX[`X.@0 ?*q?O'@?_'@?N@ ID`?BW@?Y`?WX?7X$`O'@d`aBW@?@ qa4c-aBW@?$`?qqQzY`*q?P 4`Y:q4`].̀].̀P @ ?>@ ?D` q7X q?LYY?E7X?S-a?dI?GXq4`Y4`?N@ JqQz*q^ٳf0 P ?4`?7XIZqD`4`>@ ?BW@?O'@?7X?E?dm ?g]`?].̀?X.@?Y?X.@?].̀?V0 ?7X?$`ETI:q?S-a?Y?>@ :q?BW@*qJqRW@[`GX?D`?qq?7X7XO'@q?$`IS-a0 ?>@ ?$` q@ Y`jqlLYY?GX?q?Jq?QzWXa4@ 7XJqBW@QzX.@>@ 4`Jq?I?gX?c-a?S-a?Qz?T`?V0 ?GXBW@BW@4`T`TI>@ @ EYg]`a4>@ q*qE_'@a4D`?@ 4`D`?N@ ?V0 ?q>@ 0 ?*q?E?q7X?7X?>@ ?$`?Zq?vv@?vM@?Y`?>@ ?@ E?:q?X.@qBW@@ ` `BM`? q?WX?QzGXP ?I?:q0 @ q?D`?V0 ?WX?GX?4`?GX?P ?\YY?i?i?Y`?N@ ?\YY?\YYqX.@@ ?O'@?U`BM`Y`?q?:q?:q?GX? qq*qV0 Y`UbW@cX.@T`RW@:q?4`?$`>@ ?Qz?RW@?0 T`aD`?:q*q?$`?$`V0 Jq?I? q0 ?7XJqY?$`?$`Y`GX?Y`?bW@?a?Y`?:q? q>@ q?$`*q?4`?0 QzV0 Y`` GX?@ ? q:qN@ Y`O'@?$`?7X?q?*q?>@ ?>@ ?@ ?D`?BW@?D`?BW@? q?$`?:qBW@0 ?f0 ?y`?pd4`$`?GXq?:q?>@ LYY:q*qT`@ ?I?T`?LYY0 ?0 ?a4?U?0 O'@Qz?E?Zq?$`LYY?4`?Y?S-a?LYY?Y?^@ ?P ?@ ?Y`?_'@ qT`*q?I?O'@0 dm ^@ ?GX?U?T`?X.@?V0 ?N@ N@ k@jqbW@c-a`BM`[`[`Iq0 >@ O'@O'@? q?BW@?@ N@ I:q@ ?$`Qz?D`?h?^@ ?>@ ?>@ V0 c?4`?Zq@ Y:q?D`?Y?O'@7X?q?Qz?Jq?BW@0 I?Jq?LYYS-aX.@WX^ٳ*q?P LYYTIP ?GX?U?q?qS-a].̀@ ?@ ?BW@?4`?>@ qWXZqBW@?az?p ?O'@_'@E?q*q?BW@*qY? q?O'@?*q?*q$`@ ? q?$`?Jq?^@ ?S-a?X.@4`^@ >@ ?IEV0 ?GX?dm ?az?GXD`GX*qq?D`?Qz0 ?:q?4`? qJqd`X.@?D`?I?7X?*q?q?@ EeC` S-aV0 QzUV0 q@ U? q?0 S-aX.@S-aGX*qGXS-aGX q?LYY?:qRW@?:q?lYY?eC?7X*q].̀e? q?` ?D`BW@:q?*q?TI?7XTI?WX?GX?E$`\YY>@ ?:qRW@T`S-aa4TI>@ X.@[`].̀\YY?q?O'@4`$`?4`O'@[`E?qGXYE?O'@?:qUY`:q?V0 ?_'@4`[`>@ BW@@ ?LYY*q[`?S-a?Jq?E4`Qz@ $`?q?7X?$`?e?GX].̀Qz?D`qT`:q?RW@?c?^ٳ@ WX$`?>@ ?D`?GX*q$`JqLYYTI` O'@0 P N@ JqRW@?*q?O'@?D`?N@ X.@UX.@LYY?EGX\YY?Jq?T`S-a^ٳ^ٳ[`@ >@ RW@E$`?$`? qI? q?c-a?].̀$`4`EYE*q?GX?T`?O'@?YqgX[`:qBW@?h?ux_?X.@@ ? qI:q?>@ Iaim.̀_'@P ^@ S-a q$`?0 ?Jq?0 $`0 >@ @ X.@fY?X.@?`BM`?*qBW@q?O'@?P Jq^@ S-aTIJq?:q@ \YYIq?*q?U?S-a qT`\YYI$`E?b¨ ?LYYTID`?X.@?UE^ٳU?GX?\YY?qE?>@ ?S-a?Qz?E4`LYYS-aS-a q? qIqS-aD`qBW@?0 ?Qz?X.@?].̀q`BM`YT`7X?Qz>@ X.@?0 7X].̀4`$`TI*q?4`4` qRW@O'@$`?:q?O'@?4`D`?0 D`UazY?TI?` ?N@ ?[`?4`g]`cZqD`??b ?נ?Y?:q@ q?`BM`?T`RW@d`d`E?:qBW@S-aD`?q?GX?>@ q4`ITIJqJq\YYP ?T`?\YY?7X4` q?7X?*qQzaz^ٳV0 GX*qGXRW@O'@P 7X?Qz?X.@?*qazhI?EE?RW@?:qN@ I?P ?ZqYWX@ 0 N@ GX?:q?O'@?P ?@ *q4`>@ 0 ?Y`?^@ q q?N@ ?GX?D`?4`$`*qGX4`?N@ 7X\YYD` q?$`?E7XD`q^ٳTI?gX?h.@? q?q?I?*q?LYY?JqRW@Y`$`?7XqBW@BW@ q$`IRW@^@ TI?S-a?T` q?Y`?YT`RW@LYY??P?ހ?a4?>@ GXE?T`?RW@?O'@?dI?dI?O'@?4`?4`qI0 ?I?7XGXGXBW@O'@GX? qq?*q?*q@ BW@ q0 $`BW@QzI*q0 N@ P 7X$`0 BW@\YYaz q?RW@*q?I?Jq*qTI7X?E$`?GX?*qY`c-aS-a?$`?4`? q$`?@ ?7X0 ?RW@?Y`LYY\YY?4`?Zq?EJqGX qBW@?V0 X.@*q?E?7X*qO'@?BW@Qz?$`?q4?qz?Qz?7X?>@ *q?7X?JqJq^ٳI$`D`4`?$`BW@IBW@Jq@ ?I?7XGX?N@ ?V0 I@ $`?u ?R?u`?GX?4`JqRW@*q7X?^@ ?x?u?JqGX?RW@?[`0 S-a? q?@ 7X4`?7X? qE@ 4`O'@O'@$`0 0 ?:q? q*q?N@ ?T` q@ ?@ ?E0 YQz$`GXS-a4`?$`?*q?>@ ?4`*q?4`?RW@?GXJq@ ?qE?_'@?S-aWX`BM`@ IJqEP 7XqRW@D`?>@ P fv@X.@?7X qYI?LYY?T`?a?eC?4`X.@@ ?4` qQz].̀D`?4`>@ ?` ?b¨ ?RW@?@ ?*q7XBW@@ [`eZqED`?$`?D`? qqILYY q?S-a?Qz?$`YQz?>@ ?*q?4`?I?*q?LYY?IO'@IqLYY?D`?jC ?` D`7X?`BM`?f0 ?D`UP >@ P RW@7X$`IO'@S-a`BM`Y`?$`?:q q?@ ?*q>@ ?BW@?T`? q0 ?0 ?7X?qN@ ].̀LYY?$`? q?0 ?RW@?[`?[`?I$` qE?4`?7X7X?q?qQz*q?Y?ERW@Jq?D`?$`X.@S-aqJqS-a:qIP ?7X?IQzaGX?4`*q4`?0 ?D`?\YY?a?0 D`?qGXTIX.@UV0 Y`V0 LYY q?7X0 0 ?q:qS-aa4jqdIUP 0 qBW@?qY`T`?LYY?c-a?e?WX?q q>@ Jq?q?O'@T`?q?` ?0 ^ٳ@ ?GX7XO'@Y`7X?GX?BW@?I?ID`N@ UZqTID`4`4`>@ RW@P ?*q?:qq?$`0 RW@7X?7X?$`?D`?Qz?*qEQzN@ *q? q?>@ ?Y`?].̀?WX?X.@?Jq?$`?@ 7X q@ @ ?7X qO'@?*q?RW@$`S-a:q?E?$`P ?].̀?Jq>@ ? qGX?4`?_'@?LYYQz:q?T`?JqBW@X.@U?q?Jq?*q?@ ?TI?*qRW@Qz:qJqbW@c-aT`GX7XN@ d`].̀$`BW@O'@ef\YYZqTIS-aU$`*q^ٳN@ ?V0 ?` ?az?X.@?$`?I?Zq$`Y$`?@ ?E?LYYX.@c-a0 ?Jq?BW@?qQzI?Qz? qca$`?E?>@ ?4`?4`?@ ?>@ 4`GXGXBW@?q?E?7X*qTI\YYBW@?*q?$`?N@ ?Y`?GX0 D`:q$`D`@ ?D`?Jq?@ ?Jq?7X?:q?GX?BW@7X?N@ qQz? q?>@ :qGX@ q?:q?E?V0 ?].̀?BW@>@ 7XD`Qz*q?Qz?Jq*q?q?N@ ?*qJqTIO'@?*q?I? q?:q?P V0 X.@BW@7XY`Zq?$`?TI?E[`oDmc7XGX$`?@ QzYBW@RW@[`YRW@?4`?4`S-aE?0 7X*q?$`7X?GX?a4fv@\YY?*q?:q$`S-aaP ?:q?q q?>@ ?E?S-a?BW@[`Y`?0 0 Qz:q q?>@ ?X.@?V0 ?Qz?BW@P a4aV0 q?N@ ?:qJq_'@^@ 0 ?D`?q?:q?GX?D`7XS-aIN@ Y`TID`?$`?Jq?q7X$`7X$`?Jq?\YY?*qT`O'@O'@GX q7X7X?P ?az?V0 IazYP V0 O'@*qq0 0 ? q?$`*q?q?@ ?4`?D`?E$`0 ? qBW@V0 ].̀X.@>@ 0 7X?GX?a?Y`S-ah.@S-a?$`Jq7X?>@ >@ ?T`[`[`E?Jq?JqERW@RW@YI q4`?E?_'@?>@ ].̀Y` q?0 D`YRW@?0 ?D`0 BW@*q?GX?T`RW@[`?s-a?נ?i`[`O'@$`q?7X q@ *q>@ TI_'@Zq q?@ ETIN@ I?Qz?P *qT`E?:q@ ^ٳS-aEZq`BM`T`?O'@?BW@?qf^@ Qz?$`?S-a?:q:qIWXQz4`II?>@ ?V0 ?7Xa4inDQz qE:q$`@ @ :q0 ?$`?:q?LYY?E@ GX*q0 ?$`?4`D`JqBW@D`?*q?O'@?*q$`?N@ ?TIEbW@O'@?4`q*q:qRW@?T`Zq[`GX?*qP Y`U$`?O'@?@ ?U?a4?LYYP Y`O'@7XERW@GX? qN@ *q?LYYV0 @ ?¨ ?@?}d)?0 ?0 ?BW@ qqIYQz?$`?T`?BW@7X?0 ?qX.@Jq?U?O'@*q?BW@?^@ ?LYYV0 [`0 7XV0 RW@LYYT`I>@ @ ?q?$`*q?0 h.@a4\YYS-a*q?$`?LYY?P GXQz[`Y`TIQzBW@LYYO'@?@ ?Qz? qGXO'@0 ?@ $`E?q?0 4`T`a4].̀Eq?Qz?U>@ LYY?BW@?O'@?Jq?Jq:qZqJq?qT`heCI?@ ?I*qTIO'@>@ JqP GX7X:qJqIGX>@ ?Qz?[`7XS-a?O'@?` ?*q`BM`fazRW@P X.@T`D`>@ ?$`?0 T`RW@?BW@P S-a?x-??u`7XN@ D`@ q?$`D`$`?[`?_'@?@ ?0 qY`GX?^ٳ?ZqIRW@?D`?Qz4`O'@q?q4`D`O'@0 ?WX?O'@JqRW@T`Zq4`N@ @ UWX:q? q?RW@?a?WX?0 IV0 QzU].̀D`?D`?E?E?D`N@ N@ ?I?\YY? qI qD`[`` bW@V0 0 ?*q?U?Y`Jq` *q?GX$`LYYZqbW@YI[`hgXU?>@ ?U?D`7XQzV0 I? qqD`GX?D`?WX?I?P ?LYYY`dI*q?TIqbW@f0 ].̀P U].̀TI@ GXBW@qT`\YYD`Y`f0 ?0 ?c>@ idm N@ ? q q?q?U?U?@ ?Qz?U?7X q4`WXZq q?EJq_'@P qqq?$`?$`?$`? q?S-a?dI?UIS-aY`^@ ?*q?P ?QzBW@@ ?E?q? q?TI?V0 ?@ qq?>@ ?D`?q?$`?:q qEGX>@ >@ ?0 ?^@ ?Y`*q4`?*q>@ E7XRW@T`q?BW@?TI?V0 D`` GX?qQz^@ Y`YV0 S-aX.@WXJq7X?0 ?q q0 7X? qqP S-aS-aO'@?LYY?b¨ ?Y?Qz?IJq^@ BW@?P ?GXEQzEP ZqYLYYD`O'@BW@?:q$`V0 WX^ٳc^@ ` fv@WX?O'@?gX?i?LYYN@ ?q?`BM`?az?RW@?>@ ?BW@?@ ?q>@ Y`\YY>@ $`IBW@@ I7X$`>@ >@ ?Jq?\YY?X.@LYYGXQzI?WX?c-a?`BM`q?4`?Y`S-a?*qGXI*q?*q?N@ ?TI?BW@BW@V0 Y`T`N@ I?>@ ?Y?>@ >@ ?:q?E?:q?EGX\YYLYY?q?E?N@ ?BW@?q?Jq?O'@>@ O'@*qD`YX.@Qz?TI?RW@?qIV0 Jq?@ ?O'@?$`ZqgXbW@Zq[`D`?I?S-a?T`?O'@?$`@ :q?GX?U?D`4`TI\YYO'@EQzGX?GX?V0 ?7XD`JqRW@P TIcWX?^@ ?pw@?rK ?k`?O'@O'@WX?$`?].̀?GX7X?LYY?U?:q?0 @ Y`D`?0 ?7X?O'@?@ BW@7XqLYYY`TI?*q?QzqP BW@JqY`I?N@ ?dI?` *q?>@ ?^@ ?$`T`7X@ `BM`^ٳO'@RW@Jq?0 ?qP YP $`>@ V0 7X?Iq?I?*qLYYT`T`QzTIZqT`@ ?0 ?S-a?Zq?[`?T` qq?GX0 YO'@*q?@ ?].̀?`BM`?P 0 WXGX?S-a?RW@RW@iinD\YYLYYN@ Jq0 ?BW@?N@ ?7X7X?P ?LYY?4`?$`7XBW@0 P $`?TI?7XTILYY0 GXBW@N@ azN@ ?bW@? ??C?h.@?D`qLYY?7X?4`GX?E?QzELYYIP ?$`?@ ?P ?WX?BW@?E?E0 X.@` D`?:q:q0 ?E@ ^ٳRW@q?T`?GXQz q?Zq?N@ 0 q0 [`Zq@ LYYU>@ 0 @ ?WX?U*q? q?Jq? q?q?BW@0 YjC jq>@ ?BW@TIY7X?$`?Jq?P ?BW@?qBW@0 ?D`q>@ ?D`?E? q?>@ ?Jq?I?>@ q?4`?P >@ gXjC aT`>@ ?D`?P ?BW@?GX?LYY? q?0 ?RW@?7X*q?GX?Qz?D`?I?Qz?Jq?D`?*q4`? q?*q[`fRW@>@ RW@BW@GXWX?$`?~9?Sɀ?>??eE?n@ ?d`?0 ?7X?WX?*q?BW@?GXV0 bW@].̀Jq?RW@?GXRW@$`?S-a?RW@?RW@?Qz?GX qTIGX?:q?@ ?WX?$`N@ @ ? q7XN@ ].̀BW@?Qz?V0 ?BW@?7X?BW@7XLYY?q?0 :q4`?*q?GX?0 $`?Qz?].̀?O'@?U?U$`0 ?$` qD`dm dI?RW@?` 4`?$`?\YY?P ?>@ ?4`$`@ LYY@ ?7X?7X?N@ ?].̀?>@ RW@TIUO'@?@ ?>@ BW@g]`n@ _'@RW@` [`?BW@?\YY?P ?N@ ?O'@?0 ?LYY?bW@?V0 $`?*q?GXq?GX?LYY?7X?*q?7X?>@ Y`[`$`IY>@ IBW@?i`?\ ?#``??P&? @?y8?f?I?0 ?az?I?0 ?S-a4`[`V0 0 ?RW@_'@LYY?GX?GX?D`?BW@?I?>@ P N@ ?@ ?7X?*q?GX qN@ Jq?$`N@ WXU0 ?GX?U?P ?N@ ?Y`?E@ ?$`?@ *q@ ?N@ ?0 X.@Y`P D`?P ?TI>@ D` qUWX?U?WX4`?X.@?jC ?Zq?>@ ?7X@ N@ q?Qz?T`?Zq?[`*qYTIYWX:q?q4`` nٳd`?4`?$`azdm E?*q?E?P q?Y?WX$`JqIWX].̀GX?q0 7X?0 ?S-a?Qz7XBW@?>@ EY`Jq[`E?s?k?+ ?èȠ??~"?xct ?` ?$`E?S-aBW@Qz?Qz?7XO'@7X?*q?*qP ].̀$`?LYY?>@ ?7Xq>@ E[`S-a?GX?BW@*q qGXb¨ eC:qEJq7X?>@ ?I?O'@?Jq?Qz?^ٳ?N@ *q?@ ?I$`>@ q?BW@?$`YeCk+i@ ?EBW@E*q7X>@ [`a4>@ >@ T`?LYY?e?Zq?>@ 0 I?:q?^ٳ?X.@?T`?Qz:qLYY? q?$`q*q@ ETI\YY? q?b¨ ?YJq[`S-aN@ 7X?N@ ?O'@ET`?4`?WX?D`N@ X.@WX\YYTI>@ GXT`D`?O'@?TILYY^@ $`7XZqV0 ^ٳ7X?qM?8?h??\ ?4?r"`?h.@?>@ D`?>@ ^ٳbW@?0 :q[`D`:qN@ BW@?Jq?S-a?E?@ @ ZqV0 RW@0 ?P ?4`D`?$`azgX7X7Xq?$`?D`?4`0 D`?0 ?WX?>@ @ ?D`?S-a?D`?7X?$`?*q?0 q:qZqeP ?*qD`LYY@ 7X$`TIc-aZqX.@[`q?[`?^@ ?@ BW@?0 ?O'@?q?P ?*q?GX?q$`?I?TI?I0 Qz>@ ?0 ?@ ?TI?`BM`?UJqN@ BW@?>@ ?TI?4`QzP ?$`?WX?Y`?0 $`?D`?$`O'@P JqRW@Qz?qa4h0 ?4`\YYY`>@ ?D`?h?tI?9?b ?ƙ?x_?nn?nn?RW@?$`?>@ [`^@ ? qIaYP D`0 ?E?O'@?D`?4`BW@Qz7X?*q?I?T`E?Jq?WX$`O'@GX$`?@ ?GXD`a4az?4`?dI?TILYY:q?E?N@ ?BW@ q q? q?N@ ?LYY7X7XqE@ 0 0 ?7X?@ qD`T`S-a q?T`?_'@?JqBW@?LYY?b¨ ?@ GX0 >@ $`?N@ ?I?:q?TI?^ٳ?O'@BW@S-aGX0 ?$`$`*q0 0 ?q?RW@?P JqY@ *q?O'@?P ?P ?^ٳ?UBW@Qzq?:q7XGX^ٳ^ٳ?BW@?O'@WXT`?GX?:q?*q?a4?w#F?4?}.̀?h?b¨ ?gX?V0 ?4`?*qD`BW@?7XRW@\YY\YYGX4`LYY4`?E?0 :q q?E?@ 7X? q?V0 ?Qz?>@ ?V0 ?[`?D`?q4`].̀S-a?Jq?UId`U?e?xct ?qנ?7XI?4`?GX*q?4`7XY>@ ?I?qJqTIP ?0 ?D`:q7X?RW@?].̀?7XQz4`?Jq?Jq?T`?S-a? q?E?].̀?4`I?:q?RW@?GX?@ ?q?T`?b¨ ?O'@D`GXS-ac_'@JqN@ T`BW@?4`?7X?q?LYY?RW@BW@V0 >@ O'@Y`$`?>@ q?q?q@ $`?P ?Zq?P *qE>@ 7X?4`?GX*q7X?E0 `BM`D`?a?d`?BW@D`?BW@?d`?^ٳ q?GX?>@ ?q?0 $`QzO'@$`T`GX?7XBW@WX?:q?_'@? qc-aY`?I?WX?Qz?S-a?E0 *q@ aza?@ ?U$`I?D`?p ?|YY?wX?Zq q?N@ ?RW@?q?E?[`? q`BM`S-a$`RW@b¨ f0 `BM`?*q?RW@4`Qz?4`?T`4`WX?@ ?`BM`?I?BW@?Y?Jq?0 ?O'@?0 :q?Qz?_'@?*qT`[`^ٳ0 ?[`?BW@N@ 7XO'@fv@].̀:q\YYY`$`?$`D`?0 ?^ٳ?O'@>@ :qIN@ ?q q\YYb¨ [`GX?BW@?TI?N@ ? qBW@*q?LYY?>@ Jq*q?N@ ?7X?4`>@ T`RW@Y`azT`?I?d`?V0 I$`?TI?$`N@ *q? q q?:q?LYY?D` q0 7X^@ c-a?$`?YEc[`GXILYY*qBW@4`?4`TI[`$`?qq?D`?N@ ?TI?f0 ?e?@ *q?P ?Y?T`?a4?dm ?@ D`?7X q\YY`BM`].̀X.@q?Jq?*q7Xq0 WXX.@?GX?az?LYY?0 ?S-a?O'@?I?Y?@ TID`WX_'@Y`az0 ?h.@?^@ O'@GX4`Jq?4`?TI_'@dITI0 I? q?az?Y`7XGXq?BW@?N@ qV0 Y`TIE?:q?I7XX.@T`?*q?_'@?[`BW@GX?JqJq?N@ ?WXqE0 ? q?D`?I?>@ D`X.@*q?7XV0 ].̀:q?$`?E?LYY?4`?I?Qz qX.@eCc4`? qS-aD` qLYYO'@JqI?7X?@ ?Y`D`BW@qE4`?Qz?7XV0 V0 BW@@ 7X?@ ?V0 ?az?gX?^ٳ?q?RW@ qRW@?$`?N@ ?0 ?$`?0 ?$`?*q qLYYS-aJq q?@ ?7X?*q?>@ ?RW@?[`?0 ].̀WXJqTI0 ?>@ 4`?fv@??v0 0 ^ٳD`?BW@?X.@?N@ 0 P V0 0 ?N@ ?BW@?I?_'@?O'@QzT`? q?RW@?Iq?D`?:q*q? q?BW@>@ ].̀U? q?X.@?a?D`D`4`N@ RW@?E?@ Qz*q?X.@?TI? qRW@YS-aD`Ea4Zq$`?4`?P ?BW@BW@?@ ?V0 0 ].̀bW@X.@ qGXX.@?*q?N@ ?Y`?t82@?u?V0 ? q?LYY?GX?V0 Jqq?@ qq?Jq?:qN@ U>@ ?GX?O'@?@ ?P ?c-a?dI?IJq:q? qGXD`?Jq?P ?q$`0 D`>@ 7X:q?*q?7XEO'@q?*q?$`?:q?>@ ?7X? qq?4`?$`$`?I?0 RW@?jC ?`?|YY7XjC ^@ ?$`?@ LYYTI*q?@ ?^@ ?f?].̀?V0 ?_'@?JqQzTI? q?Qz?:q@ 0 ?:q?7X$`q?@ P GX4`7X?4`?BW@4`Qz[`P ?E q\YYE?>@ D``BM`aO'@?7X?BW@?0 :qTIQzD`*q?Jq?>@ 7X?GX?Qz@ T`V0 I?D`*qS-aq? q?inD?`?@?lYY:q?4`7XLYYI?q?T`?LYY7X$`0 ?q?^@ ?` ?7X?7X?`BM`?` ?qS-aO'@:q:q>@ ?$`?Jq?*qD`IJqLYY:q?4`?TI?WX? qJq?Jq?O'@?>@ GXI?@ ?I*qO'@BW@?7XP jC :q?q4?jqT`g]`^@ >@ LYYeeCRW@?$`?az?i?V0 ?BW@?V0 ?LYYBW@RW@@ ?7X?0 D`T`TIJq:q*q?:q?4`>@ ?*qO'@RW@q? qGX^@ WX?4`?E?0 TI].̀Uq?E?$` q?qBW@X.@^ٳTI q>@ ?4`? qJq@ GXGX?4`$`E4`WX?O'@?g@??`BM`RW@Qzdm 0 ?LYY?^ٳ?Y`?$`V0 V0 *q:q@ ?S-a?[`q?\YY?_'@?4`P RW@?7X7X?b¨ ??}`?_'@D`7X4`? q?I?Qz?V0 ?P ?O'@?P BW@` Jq?D`RW@f0 S-a?BW@?O'@?7XP Y`ID`O'@Jq*q?*qP gXeCY`Jq?T`?c?I4`?$`?4` qQz_'@S-a? q qP TILYYE4`?N@ ?P :q:q?I?0 D`*q?:q?qQz[`N@ q?@ ?Jq?$`:q@ Jq@ q>@ *q?*qGX\YY].̀TIIV0 Zq@ 4`I*qq@ GXWXN@ ?$`TIP ?fv@?eN@ TI? q$`>@ 7X?T`?\YY?V0 ?:qO'@P ?$`I?*q?RW@?>@ ?D`?`BM`?c-a?U4`T`q?qGX?v?M?% ?w]`*q qq?7X?RW@?:q?BW@?U?:q$`?Jq?GXYc:qq`BM`?T`??=??p ?^@ ?bW@?P O'@P 0 q?:q?LYYBW@` O'@? qq?D`?[`?Qz7X? q?Jq7XeC^ٳ?BW@?I@ LYYJqV0 @ ?a?d`BW@^@ ?E7XD`$`$`>@ GXS-aX.@GXq7X4`*q>@ q?q4`$`D`:q?$` qI`BM`^ٳ?4`?Qz0 @ ?7X?D`:qY@ ?Jq?*q?$`?EGX\YYI$`?O'@?gXQz?q?$`7X:q0 ?0 ?Qz?D`GXE?D`?WX?^@ ?a?_'@?^@ ?ES-aLYYBW@Y`?rW@?X? ?ux_$`?$`:q?0 ?WX?$`? q?WX?E0 ?E?JqGXP qGX?D`?~"?[?݀??y`?az?].̀?D` qLYYY`D`?qX.@d`:q?V0 ?D`0 ?0 ?T`?N@ 0 ?Y?>@ aT`?WX?QzN@ V0 WX^ٳ:q?e?fv@N@ eCGXTIY`P S-aLYY?$`*qTIO'@7XBW@:q$`?$`?O'@?@ JqE q?Jq?S-a?*qN@ ^@ LYY?`BM`?b¨ 4`RW@?BW@?Zq?P ?BW@?S-a?P ?@ ?V0 ?QzO'@N@ $`E?N@ ?jqWXN@ O'@].̀[`*q?LYY?IP U0 ?TI?az?Y`?BW@?RW@?TIGXRW@$`Y` q?y8?{N?X.@?>@ ?S-a7X? q?T` q q?U?BW@>@ ? qq?7X?0 4`?h????G?{?m.̀0 ?4`0 _'@bW@LYYJqh.@m.̀S-a?GX?$`P :q?WX?X.@BW@Jq?N@ ?:qYGX?P ?7XLYYO'@QzP ?7X?^ٳ?QzV0 ^@ ? q?4`TITI:qLYYLYY?0 N@ BW@0 >@ $`*qq?EV0 >@ ?I?D`?:q?0 4`P Y`0 ?^@ ?O'@UN@ ?I?Qz?LYY?X.@?_'@?:qN@ qT`:qO'@$`?GXQz4`?*qIRW@?>@ ?T`N@ ID`0 ?BW@?^@ ?Y` q?0 ?[`?7X:q?O'@0 b¨ E?7X? q?Y`?\YY*q? q?LYY$`q?BW@$`BW@D`YWX?E?S-a?i`???W?@?T?BM`^@ N@ Qz_'@P ?0 GXh.@gXJq?*qq:q?BW@?b¨ ?[`RW@Zq?q? qJq?0 @ $`?*qID`?N@ ?QzqO'@@ ?E?LYY? q?I?>@ ?7X?:qGXWXGXEI q:qQz7X0 E?D`?[`?D`4`?@ ? qE?*q?JqTIa4?N@ 0 N@ 4`?BW@V0 S-aGXI?*q?:qN@ TI].̀7X?RW@?`BM`?Qz?BW@?[`?WXBW@T`0 ?D`?D`?>@ ?Y?a?:q?$`?_'@?X.@?D`?].̀?O'@V0 O'@?*q?@ ?P ?BW@4`?>@ ?Qz?E?@ qI? q`BM`f0 RW@?E?c?g]`?q4? ?@?L?x_? ZqS-aQzT`>@ ?qJqa4U?7X?:q q?0 ?T`?a?RW@UX.@?$`? q?7X?dI?az4`0 qaza?*q?LYY?:q?E?:q?*q?BW@?GX?E?E?Qz?@ U[`7X4`I? q? qLYYBW@ q q?BW@?E>@ D`?E?Zq?LYY?O'@?N@ Zq` ?*q?D`>@ RW@[`I?7X q q?BW@?GX?X.@?YV0 eC?WX?\YY?N@ ?LYY?Y?D`P S-a:q?D`?P ?*q?BW@?Y`?:q0 ?TI?Y?O'@?\YY?RW@@ 4`?0 $`>@ 7X?$`?RW@?WX?U?RW@D`?:q?D`RW@bW@U? q?T`?\YY?^@ ?Dm?~"? ?`?o'@q*q0 V0 ].̀].̀cY?$`>@ ?q?:q?@ ?0 GX0 ?LYY?q?Qz?vM@?w#F?O'@JqBW@azdm >@ ?>@ ?GX?WX?LYY>@ :q?7X?@ ? q?E?*qS-aP ?D`?Jq*q?@ 0 *q0 0 GXV0 I?>@ ?E0 D`?D`?O'@GXRW@?*q?E?ELYYI?BW@?:q?I?WX?BW@?N@ ?^@ ?@ LYY[`BW@?7X?qD`4`O'@WXGX@ ?D`IY*q$`GX?:q?O'@?>@ ?D`?*qGXN@ LYYN@ @ ?*q?T`?X.@?Jq?D`?D`? q$`q*q@ N@ Jq7XBW@BW@?GX?b¨ ?q4?w@?q?a4?Iq?D`?0 afv@_'@dm az>@ @ I?>@ ?:q*q?0 ?@ ?RW@?a4?O'@?P ?u ?xct ?TII?GX?D`7X*qqq?4`?4`? q?0 $`? q?0 ? q$`? q?Qz?WX? qI$`?$`0 @ 4`?q?q*q? q?*q>@ QzS-aI>@ GX:q?$`?:q?TI?Y? q*qE?*q?GXY].̀$`IO'@?qX.@@ JqZqTIO'@^ٳ[`>@ @ *q?4`].̀lYY[`$` q?LYY?T`? qD`BW@ITIT`@ ?BW@?T`?GX4`$`?$` q q:qBW@?q*qLYY?*q?:qP I?*qq? q?T`?O'@GXRW@7Xa4`BM`JqURW@EGX?S-a?Qz4`?D`?X.@?jq?dI?GX?^ٳ?a4BW@RW@?P ?Zq?E?$`?q>@ BW@?4`?O'@?:qED`0 >@ ?0 ?>@ ?BW@?S-a?*qV0 Qz?4`$`?>@ ?TI?S-a?LYY?D`?$`>@ X.@_'@Y`BW@?:q?@ ?:q?:q?*q?>@ qWX7X?0 azh.@^ٳazJq?^@ TI4`BW@V0 LYY0 N@ P @ O'@BW@?0 Yjq[`?q?@ ?T`?UD` q0 T`O'@ q?7XBW@T`?4`?P q$`?0 ?@ ?Qz?qRW@?LYY?e?D`UO'@0 ?4`? qWX^@ D`7XX.@` U@ IEqGXD`?N@ ?>@ WXZqRW@? q?dm ?d`?q@ LYYaz` P E:q q?@ ?LYYJq?$`?U?D`QzS-a$`GXX.@E:q>@ ?>@ ?qV0 TI?*q?Y?WX q:q?:q? q:q?*q?GX?D` qRW@Y`].̀X.@4`@ 7X?7X?O'@?*qT`BW@?@ @ UTIU?>@ ?dI$`?*q? q?D`?U?Qz?N@ ?EBW@Jq?q0 T`Jq4`4`? q?$`4`?0 ?U?7XTIBW@?GX?*q? q?@ LYYY?I?[`? q?S-a?V0 ?TI?@ @ ?D`?az?LYYJqE?qN@ ].̀7X?GXGXY`N@ N@ U\YY_'@S-aq?@ ?LYY0 adm cU?GX?D`E7XBW@Zq^@ azazE q4`*qN@ 4`?D`?$`T`Qz?7X?*qGXGXRW@TI$`? qLYYQz0 ?T`?^@ ?0 BW@4`V0 ` @ ?@ ? q@ 4`?*qE^@ P q0 ? q?@ ?:qGX7X?E?BW@$`:q? q?U?Y?LYY? q q?P ?Zq?T`?Qz?[`?`BM`?O'@4`BW@?$`0 JqI7XBW@Jq?:q?].̀?BW@O'@?q?TI?:q?@ ?Y`?D`BW@?0 ?I? q?BW@?Zq?T`?D`?D`?7X?$`?*q*q4`?*q?>@ ?*q:qBW@?$`Ec-aRW@?@ 7XX.@` d`Jq?WX?dm ?i`?bW@N@ V0 U*q>@ Qz*qT`JqQzWX?*q?>@ P T`JqN@ GXBW@QzYLYY?>@ ?S-a?V0 ?Qz:qTI0 ?4`GXZqRW@?q?q?@ EV0 q?E?0 $`?7X?U?7XP 7X?@ ?4`?:q?4`7X>@ *q?4`?LYY?*qGX@ ?BW@?LYY4`?^ٳBW@S-a?N@ ?TI7XP @ ?>@ ?U?>@ RW@Jq?*q0 ?:q?Jq?$`E4`?LYY?Eq?BW@?GXD`:q?Y?c?WX?*q q?:q?P ?V0 ?T`?BW@?qq$`$`q? qqBW@>@ :qagX>@ ?GX@ LYYP O'@?N@ ?bW@?u?O??w?T`?0 QzI0 N@ RW@ac>@ *qU q?Jq qq?q$`q>@ T`QzBW@D` q?Zq?a?$`P >@ ?4`WX^@ QzJq q?GX?q:q q?7X?GX?>@ ?q?:q?$`0 ?:q?D`4`@ *q*q0 ?q?O'@?P 4`Qz$`?LYY?@ P ?h.@GX`BM`?D`?RW@D`Y`dm dm ?RW@>@ E?7X?:q?LYY?Zq?TI?@ BW@T`?LYY?>@ ?BW@?4`P X.@?`BM`?c-a?LYY?BW@?V0 ?GX?0 ?WX?U>@ UBW@?D`?>@ LYYV0 @ @ U4`?TI?>@ @ ?*q:qX.@@ 0 ?*q?Zq?^@ ?h?l?S?BM`?eC?S-aRW@Y`?0 $`^@ jC hE$`X.@D`?>@ ?>@ ?P ?O'@?4`?I?LYY?q?7X?7XS-a[`?P ?$`:qD`LYY$`?I?@ ?:q?7X:qBW@0 BW@N@ S-aGX?:q?qP LYY@ >@ :qY`].̀I?*q?*q?*q?Qz?O'@4`7X?4`?*q$`Jq?k+4`Zq?LYY?WX?4`[`g]`4`?\YY?D`?q?:q?*q?RW@?Y`?:qD`Zq:q?P ?:q?4`?N@ Y`].̀ q?T`?Jq?S-a?Y`0 O'@?RW@?Zq0 RW@>@ GXaz].̀?q?qQz?D`?lYY?e?E?$`U_'@q q?BW@?V0 ??l@?g ??jC ?\YYGX^@ ?I?JqEY``BM`O'@$`$`?0 $`O'@0 $`E?:q?V0 ?I?GX?Jq7XV0 P 4`?:q?Jq$`P ?Qz?T`?[`?Y`?@ *qEN@ JqP @ ?>@ 0 UI@ P S-aS-aTIQzBW@?$`?q?Qz?O'@q?*q?qT`TIGX?fv@GX?LYY?BW@:q:qQz?GX?].̀?@ @ RW@?0 ?Qz?q?4`WX4`?TI?*q*q?EqazeCQz?$` q? q?4`P U?7X?GX*q:q>@ Qz^ٳa4P ?D`?7XGX?E?dm ?ES-a@ U`BM`?:q?JqBW@@ ?T`?g@?@?+`? ?e?\YYD`\YY?@ ?7X*q? qJqT`$`?N@ ?P BW@].̀RW@O'@WX4`?GX?:q?$`?@ ?BW@ qQzRW@?:q?P :qE?O'@?S-a?7X?O'@?U?@ $`GX7X?:q?*q?0 ?JqBW@?$`0 WXY`Jq?E?Y?N@ ?qIN@ ?D`?GX@ ?7XE>@ ?a?>@ ? q?7XJq`BM`U>@ ?q?S-a?Qz?q? q>@ X.@>@ ?*q$`?I?JqI?0 ?` ?GXBW@0 QzdIa q?GX>@ TIJqII4`>@ N@ S-aV0 V0 S-aI$`:q@ ?>@ ?P O'@a4GXTIdm ?q?[`*q:q?[`?V?#F??`?bW@?V0 TI^@ >@ V0 WX?q? q7X?q?@ ?$`BW@E qq:q? q?D`?GX?BW@?D`?P ?BW@S-aX.@?$``BM`U?RW@?RW@?I?bW@?d`?EJqZqGX?GX?*q4`?*q? q? q?BW@7XV0 S-a0 ?\YY?jC ?b¨ ?:qV0 ].̀?0 X.@Jq?O'@?P ?I?0 ?Y`?P ?LYY qY``BM`T`4`? q? q$`?q?U?Y?4`7XN@ U q?BW@4`?BW@?az?Qz0 ?$`?$`JqI?GX?TI7XZqI?$`*qGX@ EZqZqD`7X7X*qGXGX?$`?D`?GX$`WXT`\YYg]`BW@?].̀?7X? q?` ?k`?tI?v?nٳ?h?YUX.@GX\YY\YYq?GX?LYY?@ 7XGX*q?*q q q?E?LYY?E?Qz?Jq?4`?*qS-aO'@?E0 e_'@?*q?>@ ?Y`?p ?n@ ?GXWXeC].̀? qqGXq q?>@ >@ S-aBW@*q?D`?`BM`?_'@?LYY:qJq?BW@?@ \YYV0 ?N@ ?JqIY`?>@ ?N@ ?WX7X` WXq?>@ O'@Qz$`?WX?dm ?Y`*qTIV0 BW@?*qq?I?7X$`?LYY?^@ ?Jq:q?$`?O'@>@ _'@LYY?:qqGX?*q?E0 *q?*qP ZqJqLYY7X?GX qGX0 WXdm az` D`?X.@?GX>@ ?0 ?7X@ q?WX?c?QzLYYN@ 4`EN@ @ ?$`?E?0 @ BW@0 YS-a?@ ?BW@ q?0 Eb¨ X.@0 BW@q?N@ $`` X.@4`D`?$`?az?V0 JqX.@` `BM`:q?:q?:q?>@ >@ GX?*q4`Qz$`qLYY7X?D`?O'@?I?@ ?Qz?@ Y`U?Ec-afJq q?U0 ^ٳS-a?BW@?4`4`>@ @ q?T`?LYYGXE?0 ?7X?$` q7X q? q4`*q?4`$`P q?O'@7Xa4X.@qq0 ?7X?GX?7X?@ ? qY`[`>@ Jq@ ?N@ 7X`BM`N@ QzdIaS-a>@ ?RW@?P T`c-a].̀US-aLYYD`JqT`P D`IUYP $`?4`GXLYYJqWXRW@ q@ N@ 4`[`m`bW@? q?>@ ?$`0 U_'@P $`LYYWXN@ YbW@N@ :qYQz?*q?GX?7XRW@\YY:q>@ O'@?BW@?LYYP U?:q?4`?qEa4_'@UT`ZqTI?GX?7X:q$`*q*q?0 ?I?P I?q?*qLYYq?TI?GX*q4`?4`?TI?WX?qUX.@N@ >@ ?7X?O'@QzJq4`?:q? qD`@ *q>@ @ ?>@ ?JqJqRW@?Jq?BW@S-a*q?EN@ `BM`\YYN@ ?D`?T`D`c-a_'@QzX.@b¨ c-aaZqJqI\YYc-a`BM`YGX?I?E\YYeCI?4`?q*qO'@N@ Jqa4Qz?GX?P ?qS-a].̀TI>@ ?*q*qTIS-aU_'@BW@?@ LYYY`I7X4`RW@_'@QzD`@ ?WX?`BM`0 I?0 q>@ q? q7X\YYazI7XO'@7X].̀Zq?*q?GX?GX?IqN@ E?0 ?RW@?D`@ 0 ?q0 ?I?BW@4`@ ?Jq?dm ?bW@?D`BW@>@ ?BW@?O'@?@ ?q?q?BW@?Iq?D`0 UBW@?O'@?^ٳ?RW@GXY:qLYY0 ?RW@? q_'@azS-a?Jq?7X:q0 qD`P O'@T`P $`\YY\YYO'@`BM`d`:q?7X^ٳf>@ ?RW@?E>@ @ q:q? q?>@ ?:q qE$`?GX?BW@?:qQzI:q\YYTI?:qqN@ GXLYY4`? qN@ I q*q?GX?U? q?q?LYY?$`?N@ ?WX?WX?>@ $`?GX?$`ZqT`X.@LYY?4`?4`?$`?:q qJqS-aLYY?*q?EBW@YLYYq*q?*q?V0 ?JqI?Y`?P ?$`?7X?E?RW@?P ? q0 ?*q?O'@?S-a?q*q?7XD`TI?7X?RW@?D`?Qz?O'@?qqLYY^@ ].̀YQz$`:qS-aJq4`0 ? q?0 ? q?0 ?>@ ?$`?q?4`*qD`*qEY@ ?4`Yh.@Zq0 @ GX q?4`?*q?$` q>@ 7X*q?7X?0 *q4`?>@ ?U?GX?*q qUUIa`BM`?$`?4`4`:qJq? q?S-a?$`?$`?P 7XT`7X? q?D`?O'@?>@ ?@ ?7X q?@ ?E?N@ ?dI?_'@EEGX q?D`?q:q*q0 :qBW@>@ ?BW@?U*qb¨ ].̀7X@ $`?].̀?RW@].̀Y`?q$`$`?BW@ qEBW@4`?BW@?O'@?:q?7X?>@ ?BW@?Jq0 P ?q?7X4`?*q?q$`?Jq?:qX.@X.@*qES-aq?U?I4`q7X$`?0 qBW@$`>@ RW@\YY\YY>@ ?O'@?bW@?i?^@ ?$`?>@ ?N@ qBW@? q? qEN@ BW@>@ 4`?BW@?N@ ?7X$`JqLYY4`:q*q?4`BW@O'@>@ WXWX?:q?@ @ ILYY?0 ?TI?4`?I?^ٳ qY$`?N@ ?GX? q$` qYfX.@LYYQz?@ ?P q?@ q?0 ?GX?7X*qGXE?D`?Y?` ?BW@RW@@ ?:q:qI?@ 4`fv@_'@ q0 ? q?LYY*qTITILYY?BW@?TI?*q?E?Qz?Y?S-a?$`D`[`^@ *q?BW@?@ ?O'@?:q@ ?$`?X.@?Y*qZq?q?c-a?U7X*q q q?:q?7XD`S-a0 ?N@ ?E>@ O'@O'@LYY?T`?~@ ?HŠ?Dm?I7X?BW@BW@I?7XTIV0 IGXE?0 ?E qBW@T`].̀S-aGX7X?D`?4`0 ?$`0 BW@?GX?LYY7XI>@ ?:q?E:q?*q?Y?@ ?7X?`BM`?az?>@ TIT`$`S-a^@ ? q?qX.@LYYq q?BW@?$`?Jq?Qz?GX?:qqP Jq?$`?GX?RW@?T`?7X? q?Qz?V0 ? qI>@ JqUq?GXq?q?TI?P ?4`7XTIGX?>@ ?0 q$`$`?I?` ?\YY$`^ٳWX?*q?I?E?0 @ *q?LYY?Qz?N@ qX.@0 ?^@ ?T`@ LYY?Qz?$`O'@GX?GX?bW@?az?LYY?7X?q:q?X.@? ?`?X?*qU*qP O'@4`QzRW@N@ GXD`0 BW@TIS-aT`WX>@ q:q?>@ ?7XE q?0 q?E?N@ q>@ $`? q7XV0 LYY?q?U?dI?\YY q^@ X.@?*q*q$`?` ?`BM`?T`?eC?f0 ?^@ ?S-a q?S-a?WX?Jq?7X0 ?0 ?D` q0 :q>@ ?>@ ?Jq?0 q?>@ ?S-a?Y?P ?q?*q?T`?V0 ?Jq?*qD`LYY*q7XLYYQz:q?O'@?WX?qGX?:q?RW@?q*q7XP ? q?V0 ?7X7X$`GX>@ ?BW@?N@ ?S-a?0 TI>@ ?D`GX\YYJq?Jq?b¨ ?c-a?Qz0 ?D`?c-a?r?w@?jC *qD`BW@^ٳZqBW@IO'@E:q$`4`>@ @ EBW@N@ P q*qI?BW@?GXJq4`?@ ?*q?$`LYYO'@@ @ JqQzQzUP ?7X?LYY?q>@ Qz:q?*qT`?Jq?y`?y`?x.@? ?҆ ?qנ?d`Qz*q?0 ?0 ?0 ?:q?GX?T`?JqLYYU:qEV0 Qz@ ? q?>@ ?>@ ?O'@?U?:q q?4`?GX?P ?@ D`BW@?$` qD`BW@4`?$`*q@ 7XLYYN@ ?Qz?_'@qUT`Y`:q?U?*qRW@GX0 q?$`?E?_'@?^@ ?0 ?4`?BW@LYY].̀U*q?TI?^ٳ?P @ P ?V0 ?m.̀?^ٳ*qq?BW@?@ T`gXLYY?Zq?GXO'@D`?7X?qQzN@ ?@ ?N@ ? qJqE?*q>@ RW@?D`?Qz4`$`N@ :q$`QzIq?4`?BW@*qUQz?q?$`4`7X0 ?N@ ?4`N@ ??[??`?@?[?@?ux_].̀^ٳV0 BW@?$`?I?GX?BW@?7XN@ YEIY`Y`T`:q?7X?0 ? q>@ ^ٳ\YY$`?:q?E?>@ O'@TI0 @ WXQz q?Jq?V0 ?@ O'@V0 [`aq?_'@?:qZqX.@WXU*q4`WXX.@BW@?Jq?U?D`?N@ ?^@ ?].̀?WX?Jqq@ D`*q?I?S-a?T`?>@ @ ?WX?nn?X.@LYY?q?Qz?4`[`dm ?`BM`?|?t82@? q:q?O'@qa4U?Qz?P N@ Zq7X?LYYT`>@ q?4`D`].̀>@ ?>@ q?0 ?Jq?LYY?WX?[`?E@ 0 ?I?N@ ?D`$`BW@?T`?@ ?Zq???Z?*?? ??nD`RW@T`GX?Jq?:q*q?*q? qLYYQzUX.@RW@V0 T`q?q:qS-aaz\YYD`>@ ? q?O'@?4`IO'@UYGX?*q?BW@?7XJqT`O'@X.@E?U?@ P ?O'@?c-a?4`QzGXIUI?V0 ?e?O'@>@ ?>@ ?V0 ?E0 *q?:q?I?T`?P q?q?I?E?a?O'@?0 ?LYY?q:qN@ V0 ?k+?`?}`?T`?q?TIq^ٳBW@?X.@?EY`azI?>@ qYaY`?X.@?:qI?$`?4`D`*q?7X?4`?GX?TI?Qz?0 $`?>@ ?N@ qQz?N@ ?N@ ?a4?w?F@?b?(T@?|?Z?W?`?V0 ?I$`0 q?D`?BW@0 ?*q?GXIV0 RW@*qBW@Qzq?>@ q@ LYYD` q7X@ ?$`?>@ qBW@@ q?$`?$`$`*qET`?I?D`?Jq7XE?pw@?|o?jC E>@ ? qEN@ ?LYY?f0 ?].̀? q?$`?*qN@ WXLYY4`?@ ?^@ ?UO'@YBW@E>@ qE?*q?JqN@ Jq? qS-a?GX?tI?pd?>@ ?4`?N@ *qP *q?O'@?N@ 4`V0 WXGXI^@ eCa4>@ ?S-a?P ?:q?7XN@ dm `BM`N@ D`7X?>@ ?V0 ?Jq:qN@ Jq$`4`O'@?O'@?a?T`?y?.J?@??? ??#F?` ?D`:qq7X?>@ $`$`?D`?GX?0 EE?I?TI?@ ?Jq?T`?Jq?$`@ @ ?>@ ?D`EY`N@ q?:q?E?4`?D`?N@ ?:q?4`:qY q?^@ ?Y?7XUTI?m.̀?zC ?bW@S-a4`?qLYYRW@?4`?d`?fv@?Y`?I:qUBW@*qS-aN@ ?N@ ?TIBW@\YYV0 P ERW@_'@@ ?:qRW@N@ ?$`UY`?q:qTI*q? q4`@ S-aLYY?7X?4`N@ TI:q*qS-a^ٳ_'@^ٳWXJq$`?qIazb¨ TI>@ :q?O'@?GX?$`?0 EX.@S-aU?c?` ?m.̀?2o`?R???R`???RW@JqRW@?q4`@ ? q0 q?I?Qz?I*qGX?GX?^ٳ?S-a?Jq?Y`?^ٳ?O'@D`RW@?$`?Qz4`` Y*q? q?$`:q?GX?^@ ?N@ ?7X?$`P @ ?N@ ?D`JqO'@?V0 ?_'@S-aZq?BW@?7XP O'@?7X?bW@?eC?Y`?I$`0 ?N@ ?LYYEI?@ ?LYY4`TILYY?>@ *qT`BW@?$`IN@ 0 LYYJq>@ \YYaN@ 4`?:q?EN@ Y@ D`X.@Jq?E?I7XQzWXa4d`^@ Qz?IY`WXq$`D`*q q?BW@?[`?*q^@ X.@\YYa4?].̀?\YY?dI?p ?w]`?82@?0 ?y?_'@$`V0 E?GX? q7X:qN@ *q?BW@?q qD`?BW@4`D`?LYY?_'@?S-a:qO'@ q?Jq?*qP LYY qq q7X?:q?Qz?q?@ *q>@ ?$`q?D`?Jq?T`aD`?\YY?GXE>@ ?@ ?[`?X.@?E?S-a?Y`?RW@?D`?q?*q?O'@?P ?*qN@ Y>@ ?Jq?RW@?LYY?*q$`:qIGXE?q?@ N@ ^ٳWX>@ ?Qz?].̀?BW@q*qRW@WXE q q@ LYYO'@O'@BW@:qP GX?:q q_'@\YY qUV0 LYY$`?@ *qI?7X*qca@ 7X?>@ ?h?rW@?k@?\YY?T`?TIO'@T`0 ?BW@?*qqRW@aS-aO'@` RW@?@ ?>@ ?0 ?$`P U?BW@ qBW@>@ q?7X?>@ ? q?q q?q?E?BW@?$`4`N@ :q?$`BW@I?$`?BW@?LYY?T`?TI?X.@?7XP q?BW@D`I? q?D`?T`?O'@?>@ ?[`?fv@?WXJqX.@?$`?WX?BW@7XN@ RW@$`?:q?0 ?$`>@ 0 *qGXIGX>@ ?$`0 TIWXBW@?BW@?N@ ?D`?BW@JqIS-aaz[`D`D`I>@ ?q?0 D`Y`Zq^@ b¨ TI?:q?$`WXZqGXJq[`X.@?E?dm ?Y:qJqRW@_'@U?I?` ?WX?GX?P ?QzRW@UE$`0 Y`^ٳJq[`iRW@?P ?LYY?P ?V0 ?*q@ $`GXV0 N@ >@ 4`?BW@?I?LYY?E?q q?D`?N@ ?$`GXJqqN@ WX@ ?LYY?Y?E7X q@ >@ RW@aO'@?BW@?O'@?X.@?X.@?>@ ? q?4` qRW@T`? q?4`IE?*q?E?qO'@GXEN@ ? qLYY4`? qD`$`?7X:qN@ 7X*q4`$`EN@ D`YdIS-a?:q?*q$`4`>@ ?4`?P WXZqP $`?GX?D`@ GX?4``BM`^@ ?E?Y?4`?4`?LYY4`Uq?TI?IP ^@ D`?EJqP EqO'@[`q?T`BW@_'@4`?7XE?0 ?Zq?Jq q7XS-aS-a7X7X>@ ?q?E?RW@?Y?TI?4`>@ 0 ?*q0 ? q?BW@?I?BW@D`Y:q?N@ q[`U4`? q>@ S-aD`?0 ?D`?U?\YY?$`a4fU?7X?4`0 LYY7X?$`?>@ ?P ?4`GX0 *q*q?S-a?N@ GX0 ?0 7X?7X?WX?:qE7X q0 >@ D`P Jq*q@ GX?D`?T`?>@ ?E?RW@?Jq?^ٳ?m`?f?D`?$`?>@ ?0 ?7X?LYY?Jq?I?WX?P JqYLYYX.@` q?O'@Jq[`?RW@?qY`azE?JqGX$`?q?@ ^@ `BM`?@ ?X.@$`D`?4`@ `BM`O'@?BW@?4`$`GXYGX?7X$`7X?4`?@ ?@ ?GX?BW@?4` q7X:qE:q?0 ?q?@ ?a?YRW@\YY:qGX\YYS-aq?q4`LYYGXq?I?T`?*qY].̀0 ?E?:q? q? q?0 ?qJqP $`E?4`?LYY?O'@?_'@?Y:qS-aT`LYY?O'@?az?LYYERW@LYY:q:qIN@ 4`?LYY?TI?LYY?P ?D`:q?0 ?a4?fv@?h?n@ ?e?N@ ?>@ ?7X? q?q?@ ?P ?Zq?].̀?RW@O'@^ٳgXa?BW@?TIP azUV0 \YYTIE? q?qJq?:q?:q?BW@` `BM`*q0 LYY?*q?RW@?$`N@ I q?4`?>@ @ ^ٳO'@?>@ ?qq?>@ ?0 :qN@ Jq?*q?LYY?BW@O'@RW@@ X.@^@ ?LYY?c-a?*qUO'@RW@ZqTIGXRW@ZqTIP T`BW@?I?T`?E?$`?@ ?X.@?U qJq7X?*q?I?7XUaRW@LYYS-a*q?O'@?S-a?S-a?E:qY`BM`LYY?RW@?^@ ?P *qV0 X.@GX>@ EJq>@ ?O'@?\YY?@ q? qN@ Qz?Qz?b¨ ?X.@?I?0 0 EJq*q?4`4`7X?N@ ?U?E?4`0 U_'@P ?O'@?X.@*qLYY:qRW@X.@BW@$`ELYY?*q*qqqTILYY?$`@ D`?O'@?\YY?U?I7X?4`?P ?$`T`N@ ?0 ?>@ ?D`?O'@?:qEX.@P ?@ ?TI?Qz?LYY4`TIO'@ainDN@ ?Qz?7X0 7XT`ZqTIQzV0 S-a>@ q?O'@?c-a?`BM`?*qJq?0 ?_'@?T`GXJq?q?4`GXX.@LYY7XO'@Qz?q?LYYN@ E$`? q?>@ ?BW@?BW@?O'@?N@ qBW@4`$`*qJq$`?BW@@ Jq?BW@ qZq0 ?N@ 4`RW@D`@ RW@Y>@ ?@ BW@X.@:q?:q?:q?:q?q$`:qS-aI?0 $`:q?I?S-a?BW@ qIN@ D`I qN@ O'@$`4`?*q?U?D`*q?$`?D`?LYY?JqBW@7X?:q?LYY?4`4`4`?I?T`?@ @ Jq q?O'@?LYY?BW@?I$`TIN@ P T`? qJq?T`?LYY qGX0 ?BW@?D`?Jq?X.@?WX?WX?\YY?Uq[`Y?:qq?4`?4`LYYN@ q q7X? q?D`0 \YYO'@?GX? qX.@I?WX?c?T`4`0 ?Qz?].̀?T`?>@ q4`?:q?I7XN@ *q4`q?Y?O'@S-aE?4`JqRW@*q*qIQzBW@?4`? qN@ Qz>@ ?4`?7Xq?GX?P WXb¨ q?*qN@ *q?N@ ?>@ JqY`S-aD`@ ?4`N@ Y`?@ ?0 ?P ?BW@TI^ٳQz7Xq$`GX0 ?TI?X.@T`U0 ?@ @ q?D`?LYY?@ ?*q$`TI[`LYY*q?N@ ?az?@ TI?$`?\YY?P ?4`?:q?O'@?Qz?D`?O'@?^@ ?U?:q?7X?E?4`P ^@ GX?:q?E?D`@ ` ].̀I0 ?q?D`?LYY^@ [`?I?WX7XE?RW@?].̀?$`BW@?:q?RW@?RW@?Qz?@ ?$`?LYY?Y`?S-a$`P q?O'@?RW@?[`?QzGXEN@ LYY4`:qqBW@@ ?*qN@ N@ ?4`?4`:q?N@ ?^@ LYY_'@?P ?_'@qN@ D`N@ TIN@ ? q7X?JqE` ?$`?U0 EBW@^@ `BM`BW@0 E q?0 BW@BW@?LYY?WX?>@ ETII q7X:q?>@ ?I?:q?D`?EBW@^@ U7X$`?S-a?f0 ?T`@ ?N@ ?^@ ? qJq?$`?LYY? qLYY q?S-a?BW@?O'@?\YY?TI? qGX$`?:q?4` qUc\YYJq@ ?7X?:q?0 GXRW@?LYY?e?TIEEGXWXq?V0 ?4`7X?0 ?0 ?bW@?x-?v?X.@P T`?$`?Y?S-a?:q qLYY:q?$`EBW@?>@ ?q0 GXYE?*q*qD`?q?$`I?Qz:qN@ ?WX?bW@?EBW@P LYY0 ?@ ?\YY?aO'@?4`GXa4$`?S-aP aQzGX?Qz?4`N@ BW@ qD`N@ q?LYY?U?Qz?:q?4`?>@ 0 GX?*q?I?0 ?7X?@ >@ S-a4`?4` q?BW@?_'@?N@ 7X?LYY?Y`@ ].̀GXO'@X.@?$`?Zq?GX?:q?az?f?WX?*q?q?4`$`E>@ O'@\YYJq?0 0 q q?$`? q@ ?>@ ?d`?\YYD`WX].̀az0 ?LYYJqJq?$`7X?l?x_?K ?YY`Jq?4`?Qz? qUZqU?O'@0 Jq?>@ ?>@ :q4`BW@[`Zq$`?BW@$`0 S-aTI*q?D`?I?qBW@I?BW@?@ ?Zq?hY`Jq@ V0 Iq].̀dIN@ ?:q?N@ ?I@ WXP 4`4`Jq>@ ?O'@?[`?N@ ?4`?GX?Qz? qT`:q?P ?Jq4`Jq@ ?q$`@ q?E qWX@ ?GX*qQz7X>@ ` d`0 ?\YY?Qz?7X?[`?` ?BW@?@ ?4`EP :q@ V0 :q?RW@?@ >@ 0 4`IEE0 ?LYY?GX@ 0 0 Y`Qz*qP q?:qY`?U?X?{B`?4`RW@ q*qN@ TITI? q?T`>@ a4UBW@LYY4`?qI[`D`?LYY?D`7XTIY` q?Qz?I?*q?*q?:q$`?D`?BW@@ ?q?X.@T`WX? q? qGXN@ [`` GX?BW@?:qN@ az`BM`P ?q?GX?WX?RW@P ^@ GX?Jq?P *q*q?T`?QzETI?*q?WX?:qRW@[`WXEE^ٳWX?0 ?4`?4`?T`?:qWX].̀@ ?LYY?Jq?0 ?N@ ?P ? q?D`IJq>@ @ TIO'@?:q?0 E*qqRW@N@ $`@ JqJq?>@ ?LYYGXRW@4`>@ q`BM`N@ ?c?TIS-a7X0 `BM`].̀?Qz?E>@ q?IEf0 f0 \YYO'@*q?:q? qN@ D`?BW@?LYY?@ S-aO'@?P ?`BM`?O'@? q?7X?P ?N@ ?>@ ?:q qLYY:qqLYY^@ q?BW@:qD`JqTIGX?0 ?*qUdm ^@ Jq?4`?WX?GX?q?S-a?GXY`e].̀?:q?bW@?Zq?7X?0 qLYY@ ?S-a?a4?JqP ^@ azV0 BW@UP ?@ ?7X?:q?Zq?^@ ?lYY?y`?u ?a?BW@?BW@?WX?T`? q?7X?I0 BW@$`0 *qEV0 BW@?*qBW@I0 7X?4`?U?:qQzX.@UGX4`E7X?@ ?*q:qIP EBW@Y`S-aV0 k@f0 @ ?Qz?LYY4`4`?@ TI\YYQzD`O'@GX?0 ?7X?$`?:q?D`?*qP I?O'@?X.@?E4`?$`?I?0 ELYY*q?@ qTIa4I$`@ 4`*qBW@Jq:q?0 4`WXN@ 4`? q?Qz?I0 ?$`?@ 7XT`TI?0 ?` ?Zq?qO'@X.@P 7X? q?>@ ? qBW@D`N@ I>@ WXP ?:q*qGX?q?\YY?}m ?¨ ?TK?tm ?7X?Jq?d`?` ?$`?4`?N@ ?$`?I?].̀?O'@?@ ?*qRW@:q?X.@?>@ Y`U4`?*q?:q4`P ED`Zq`BM`Qz? q?E?EqN@ E0 RW@Y$`?*qT`[`N@ GXN@ T`Qz q?GX?BW@? q$`@ bW@c-a q?S-a?E? q0 ?$`@ GXq?4`?*qI@ ?I?qX.@N@ ?LYY?U?7XTIT`>@ BW@IBW@*q?7X$`RW@?Jqq?:q?*q?:q>@ BW@?$`?7X q0 ?$`?0 q0 I>@ RW@a4ZqS-aP ? q?7X qBW@].̀V0 ?$`$`BW@E?H@?k`??Ơ?tm ? q?Qz?h?dm ?*q0 ?:q?BW@?eC?q4?e?LYY?>@ I$`?c?].̀RW@[`LYYT`Y`S-aE?$`?GX0 WXO'@@ D` qUZqN@ S-aJq?BW@?@ 4`?E?X.@?$`Y`azP ?@ ?GX?*q? q*q:qO'@dm dm :q?I?GX?:q:qIq? q q0 >@ ? q?*qBW@?q?X.@^ٳGX?N@ ?@ q?E?D`:qJqRW@GX?S-a?GXY`:q?].̀?Jq?*q?LYY?4`0 q7X4`?0 ?4`?$`?4` qTIRW@?D`?Qz?D`?7XTIcRW@O'@Zq>@ $`Jq7X:q4`?@ ?>@ ?LYY?JqN@ ?k`??W@?^ٳ?7X?^@ ?gX?d`?BW@@ >@ ?$`?g]`?s-a?b¨ ?$`?>@ qBW@?S-a?`BM`?:q:q4`O'@T`>@ D`N@ ?4`?P ? qBW@N@ X.@RW@O'@`BM`^ٳ@ @ GX?*q?$`BW@?$`?Qz?:qGXP q?E?q0 IY`S-aO'@GXq?*q?:qD`V0 E?7X?I?D`?7X qD`?D`P d`TID`Y`RW@?GX?Y`?I>@ @ T`X.@?D`?:qd`V0 ?[`?N@ BW@?q?:qq$`?$`?E?E?7X@ ^ٳTI?0 ?7X?D`?T`qGX?>@ 4`U7XRW@_'@?4`?\YY?P ?E? q?BW@?X.@7XJq?` ?_'@?:q?Y`?d`?].̀?V0 ?LYY?*qq?:q?bW@?e?*qO'@?E?Qz7X*q?T`?T`?7X?4`?0 RW@dm X.@?0 ?q@ :q>@ EP YGX?BW@?qS-aRW@IQzJq4`7X@ 0 ?0 ?$`BW@7X?:qE^ٳD`?RW@?T`?4`@ GXIX.@Y@ $`$`?:q?N@ ?LYY?:q>@ RW@TI\YY].̀N@ S-abW@RW@?D`?RW@Jq7XYBW@EinDeC?*q q^@ V0 0 ?$`?LYY?V0 ?:qP LYY@ X.@V0 Qz@ ?^@ ?k+?[`?>@ ?>@ D`*q?V0 4`Y`?P ?^@ ?q:qTI^@ 7X*qS-aq?I?O'@?az?bW@?7XE?GX?LYY?X.@?b¨ ?X.@D`T`?0 ?WX?BW@$`?>@ ?D`*q$`EO'@P [`Y`GXBW@D` q?*q7X>@ 4`?qJqWXQz$`?@ ?0 EQzGX$`? q4`$`?D`?qI?4`?^@ ?U*qS-aY`].̀^@ LYY?E?IGXY`N@ ?@ ?V0 ?:qV0 ZqD`?$`?D`?4`>@ ? q?:q@ RW@?$`?LYY4`JqGX^@ bW@S-aRW@_'@YGX@ *q?E?RW@$`[`TI?q?@ ?q:q4`?az?w?xct ?f?Jq?$`D`?GX?b¨ ?:qBW@?O'@0 c-aV0 X.@h`BM`GXP *q?LYY?GX?S-a?Zq0 azRW@?4`?:q?P ?` ?Y?*qGXI?0 ?LYY@ 4`4`q7XV0 TIq? q>@ BW@:qD`N@ O'@T`UQzV0 Y q?O'@E?:q?Y?EO'@[`X.@I?:q?GX?$`?O'@?E?7X?@ qRW@UO'@JqO'@@ ?LYY?WX7Xd`a4?WX?EE7X?E?D`?7X?E?D`?@ @ *qGXU$`?Y?RW@0 q?7X:qT`TIELYYS-a7X?7XID`?4`?RW@?Y`?\YY?h?x-?\?w?a?O'@?LYY?0 ?>@ ?>@ D`0 ?:q\YYh.@Jq>@ b¨ ^@ BW@LYY7X?BW@q?P ?qZqD`?BW@D`Qz?4`@ T`7X?D`@ [`I?7X?BW@>@ :q7XEGXqQzZq0 X.@^@ Zq\YY*q?V0 ?0 S-aGXqGXY`\YYZqRW@?>@ ?S-a4`D`?N@ ?IJqO'@D`I4`?D`?Jq$`T`GX?7XWXS-a?7X?I*q>@ ?GX?RW@*qRW@7X?0 ?7XLYYP N@ N@ 0 ?V0 ?Y*q?I?:qLYYS-a*q?Jq?>@ D`P >@ ?q?7X?$`0 4`?$`?TI?h?t82@?x-?tI?eC?O'@?LYY?N@ ?:q7XT`Qz?0 ?:qQzP ?:q4`azY?q?:q?E?RW@LYY?0 ?Eq?GX?Y`$`^@ _'@].̀RW@4`$`?@ ?O'@:qYI?q?$`?$`?@ \YYeCWX?qq^ٳ>@ ?vv@??f7X?q0 LYYIYaz[`TIRW@LYYD`BW@@ ?4`?D`N@ U?$`0 _'@P ?@ ?:q?D`?X.@?Qz7XWXV0 BW@4`LYY:q?Jq?BW@LYYI?Jq?S-aqE?q?>@ ? qBW@ZqLYY?q?$`?D`?Jq*qO'@BW@0 ETIS-aD`BW@D`?7X?4`?7X?$`7XD`D`$`?Y`?k`?dm ?4`?Jq?:q0 q0 E? q?O'@?7Xq?@ ?EN@ b¨ V0 ?O'@?a4?^@ ?S-a qS-a4`?P ?E?7X?RW@?P >@ ac-aBW@?P ?Qz?O'@?LYY?7X q@ QzD`?BW@?RW@Y\YYGX?$`7X^@ ?TI? ?I{?}.̀?RW@?TI?P GX[`` Y`I7X?$`?*q?*q0 QzP ?$`4`WX?U?>@ ?>@ ?U?4`O'@GX*q q*qTIX.@?0 ?P 7XO'@?:q?q?D`?Y`?JqRW@Zq@ ?TI?LYYq qqJqQz*q?*qI[`].̀\YYT`$`?q$`? q?4`?*q?0 4`[`RW@?LYY?0 `BM`WX?4` q>@ ?7X?0 :q?4`$`7X*q@ S-aX.@>@ ?^ٳ?i?Y`qBW@GX q?U?O'@GX0 ?WX?E\YYY?U?eC?Qz0 *q?D`?P *qX.@q?` ?`BM`?E?@ ?O'@?7X4`*qD`?V0 ???vM@? q?>@ ?Qz?>@ ?0 q?*q?qqN@ ZqLYY$`BW@GX7X?4`?TI?N@ q?4`?:qI*q?QzU:q?4`?@ ?D`P dIE?TI?4`E7X4`4`?E?Y`? qbW@? qT`?` ?[`?q?>@ q4`?N@ ?T`4`S-aP X.@ZqQzRW@YGX?7X?>@ ?$`Edm ` ?T`?_'@O'@a4RW@0 ?Qz?^ٳ?0 WXRW@ q?BW@?qQzX.@T`Qz?b¨ ?i?O'@Jq$`?BW@?4`?LYY?Qz0 @ ?LYY?0 ^@ Qz?^ٳ?c?0 P BW@?D`?S-a?qGX?LYY?fv@?az?S-a?`BM`?dI?IN@ *q?*q$`?Zq?i`?LYYN@ ? q?GX?N@ ?WX?N@ ?$`$`JqbW@i``BM`EGXBW@?>@ ?U?^ٳ?X.@?*q7XO'@ZqBW@?O'@?*qO'@D`7X? q?LYYBW@dm RW@?Jq?7X*q?$`?LYY?O'@BW@Qz0 LYY?].̀?^ٳ?D`?D`?RW@?0 ?T`?LYYLYYJqD`T`D`>@ X.@[`E@ S-aV0 X.@?oDm?sx?WXS-aT`*q?[`?bW@?:qE q?RW@?bW@?Y`qBW@P `BM`I?_'@?dI?E@ ?@ ?V0 ? qD`?>@ ?BW@7XEN@ S-a*q?N@ ?E4`>@ ?q?BW@?:q?P ?[`?TI?S-a?a?dm ?P LYYLYY0 S-a^@ QzBW@ q?Jq?I?7X?7XqE0 ?4`? qP ZqI?q0 :q?@ ?T`?O'@?:qqBW@RW@YGX?@ ?D`? q$`EEIZq:q?LYY?GX?4`?N@ ?Y?I@ ?D`*qLYYE?E?BW@7X?7X?TI?$`:q?BW@?qRW@:q?@ q:q?O'@?` ?D`X.@YO'@S-a>@ ?D`?^ٳ?pw@?q4?bW@?N@ ?qI q?BW@?:q?RW@?O'@? q?D`?E?q?N@ b¨ RW@?].̀?^@ ?$`BW@?*q?O'@*qWX4`?:qRW@dm Y?E?Zq?D`4`0 q0 P TI>@ ?7X?:q?7X?LYY?X.@?].̀?QzGXYBW@0 @ ?$`?E?0 ?7X?E?4` q@ Iq?I?Jq?>@ ?>@ ?LYY?GX4`LYY q?@ 0 I?0 :qP O'@7X?4`?@ ? qD`I>@ @ 7X?E?Y`?].̀?S-a:qI?I?TI?4`@ ?*q?7XJqGX?qJq`BM`@ ?Qz?0 0 ?E?D`? q?BW@?GX?q?O'@?c?_'@0 Jq? q?@ ?LYY?BW@?N@ ?P ?GX?T`?7XY`YI?S-aD`fTII[`?7X?T`O'@BW@?Y?Qzq?q?BW@?$`>@ ?$`?BW@Jq` D`?a?fv@?P ?4`?>@ 0 LYYN@ Y``BM`TI:q:qE*q?BW@?O'@?7XN@ S-a?q?I?E?Y?V0 BW@S-a?0 ?P ?I?4`$`0 q:q*q?BW@?E? q:qD`$`? qIN@ ?0 ?BW@? qBW@YS-a:qBW@BW@? q?D`?>@ ?*q?4`?I?Zq?Y`?$`? q?T`?I$`4`E?GX0 ?0 ?JqE\YY7X?I?$`?$`?S-a?U?RW@?O'@?$` qBW@ q?Jq?>@ ?7X?D`$`EZqP *q7X4`JqT`q?0 ?7X?IP ?$`?x-?t`[`^ٳ?O'@?q>@ ?BW@?@ ?Jq?X.@?RW@?>@ ? q?$`?N@ ?S-a?BW@?*q?BW@?U?RW@?>@ ?P ?X.@?$`E7X$`4`7X>@ O'@[`WX? q?GXqJq q?BW@7XP ?*q?JqGXTI?0 ?WX?U?GX q@ JqV0 P q7XD`?BW@?S-a?@ *q*q*q?>@ ?az?RW@_'@eCT`@ ?q?U?\YY?Jq7XLYYLYY4`?:q?Jq?].̀?bW@?4`Jq? q$`?LYY?@ ?I?@ 7X4`?E?:qID`?7X?I?RW@?N@ 4`:qRW@\YY@ ?@ ?P ?E0 :qLYYY`?X.@?7XQzT` q?Y?WX?O'@?P ?GX?~ٳ?\ ?)?ZqjC >@ @ ?q?D`?WX?` ?T` qLYYBW@?:q?D`?7X?>@ ?qGXULYY?I?[`?LYYq?@ ?Zq?\YY?D`0 O'@Jq?E?T`? q*q?D` qafv@U$`*q4`?4`?P ?O'@?*q:qq?$`4`7X$`QzP ?U?az?4`*q?N@ ?Qz*qS-a?>@ ?i`?a4U` *q?E?LYY?Y?UI0 BW@[`WX?q?\YY?[`E\YY*q?7X?T`?Qz?$`QzV0 q?O'@?$`Y`^@ LYY?RW@?Zq?:q*q?*q7XRW@E?q?I?Jq?@ ?Jq?4`BW@?GX?a?I:q$`?0 ?4`$`0 *q?0 ?z?m ?% ?m.̀dIWX4`?:q?T`?T`?O'@?7X0 :qJqN@ 7XEX.@V0 S-aUYO'@?4`?S-a?O'@?0 JqLYY?P ?a?T`?GX?E?E?V0 ?U?0 ?7X?IGX` WXN@ Jq0 $`*q?@ ?EBW@N@ ?D`?].̀?TI?>@ ?qJqRW@?>@ ?>@ Y`S-a?Y?_'@TID`?I?7XLYYq?WX?V0 ?GX?I?0 QzLYY?O'@?@ `BM`cE?@ ?7XP Y>@ q?RW@?P $`Y` P ?>@ ?:qRW@Y:q?@ ?T`?\YY?N@ ? q?q?qq>@ I:q?4`?I?P ?4`E?:q7X?$`?Qz qY^@ ].̀[`$`?ux_?C?~ٳ?WXP N@ ?$`?\YY?_'@?Qz?qT`Yq?7X$`:qP ` azRW@?q?BW@?7X?@ ?E?@ ?@ 7XU:q?BW@? q?q?I?GX?@ ?0 q?>@ ?GXIRW@?:q?:q0 ?0 >@ ?Jq?O'@T`Zq?E?c-a?Y`?@ ?D`?@ 0 7XTIk+c-a?LYY?Zq?@ *qT`az` N@ ?Jq?\YY?O'@?0 ?BW@? qYWX?@ ? qca4BW@4`4`q qGX4`*qq*qQzTI? q?BW@@ 7X?T`?[`?GX?$` q0 ?>@ ?D`$`YY`7X?0 EJq7XLYYX.@?0 ?Y$`S-a:qO'@BW@?oDm?y`?vv@?$`T`*q?*q?V0 ?a?I?qN@ Y$`?D`?$`0 BW@LYYRW@D`?LYY?Zq?RW@?LYY?BW@?@ ?Qz?>@ ?qqRW@Qz q4`QzO'@E?7XGXLYY?E?O'@?Jq?Y`?D`7X?V0 ?ZqT`` ?$`?Y?Jq?LYY?Y`?BW@Ih.@gX q?P ?LYY?S-a?$`V0 YGX?0 ?GX?$`?E?4`X.@Y`?qYJq qRW@S-a?4`?I qN@ Y\YY@ ?GXD`?$` qRW@ q?` ?^@ qS-aO'@>@ ?*q?Qz?T`YTI?7X?P ?*q@ @ :qTIWX?>@ ?RW@BW@*q?Y`?7X?7X?zq?0 ?zC :qaN@ ?E?e?` >@ :q?N@ ?qRW@N@ 7X*q7X*q?4`$`P 0 ?N@ ?P ?P ?D`@ >@ ?LYY?WX?S-a?4`N@ Jq?*q7XX.@LYY0 $`BW@I?4`?D`?GX?V0 RW@?Qz?a*qT`$`?7X*qE?$`?Jq?$`?BW@Yb¨ ?LYY?4`?LYY?TI?N@ ?7X>@ E*q:qD`? q? qRW@O'@?I?TI?LYY?V0 ?E[`].̀?*q?:qD`@ BW@X.@D`?E?*q? q?:qLYY].̀ q?].̀?O'@IQz7Xq? q?@ ?@ :qQzq?X.@?^@ ?N@ EO'@T`BW@?LYY?D`S-a@ ?U? qN@ ?dI?wX?nn?*qY`^ٳ?7X?i`?aq?BW@?WX?7XD`LYYGX4`>@ 4`?>@ $`[`N@ ?Jq?WX?T`?>@ N@ WX@ ?7X?E?*q:q?0 ?U?0 I?4`?P ?D`?>@ *qE? q@ *qS-a^@ ?>@ ?a?O'@?q q>@ GXN@ @ $`I q?N@ GXV0 ?I?JqS-aT`q?>@ ?qP U>@ :qI:q7XP LYY?*q?P ?Zq?bW@?O'@V0 Qz?E?*qO'@?$`?N@ *q?GX?0 ?@ ?EBW@LYY?I?].̀?D`LYYBW@?E?D`4`JqP RW@4`?GX?I?$`$`4`:qq?*q?BW@?N@ ?4`LYYN@ 7XIS-aTI^ٳWX?$`*qZq?c?].̀?O'@?[`?S-a q q$`qEI0 O'@Y`?].̀?_'@?O'@0 P I0 $`:qN@ D`?O'@?Y`?q@ ?E?T`?O'@?O'@O'@>@ :qP LYYWXY`?7X?Y?RW@?N@ ?$`I7Xq q?q7X$`?E*q>@ ?S-a?BW@^@ c-a[`T`P WXWX>@ ?0 ?7X? qGXRW@LYYI@ ?:q?N@ qRW@*q?P ? qP ?>@ ?`G`??Y?\Yn: ?E?pp?b¶@?J ?f ?nV?qM+?n ?a?f ?pBY?m?lYn?h?\Yn?TX?RW@?NV?Z ?_?@?E: $* [`f@eCaX.)J S-p`Z S-p`D@* ?D?LYnTc-p`b¶@I@bW@a? ?$TJ ?@P0?4EJ 4E0? VA ^V4* P7X`?: ?* ?* ?@IU_?@Z * ?BW@EPUYUUU4?LYn$edm? ?GX`TP?S-p`?S-p`? ?* E].J ? 7X`VA b¶@^ EBW@ ?RW@?D7X`?NV?VA ?Q?7X`4TXRW@* GX`Q?d?[`?X.)?a[`NV?f ?WX`?$?^ ?dm?inW?rW@?rW@?pw?n ?i?go?e?`BY?X.)?T?Z ?f ?f@?O?@WX`aB GX`?D `goaYddXRW@* ?LYn?WX`?I4QYTXGX`VA dY E\Yn@?LYn YX.)J NVS-p`X.)Z YVA Q ?>VO?@dS-p`?: 0E LYnP T`* ?D 0O?@^ TX: 4@0?GX`?4c-p`gX`?* ?S-p`QY0$ ?40: ?* * ].bW@Q: ?0?J ?$ $?$ : TO?@?00VA ?f@?D?^V?O?@_?@E?Z D?RW@?VA ?eC?zo?|?l(?I?I?VA ?WX`?VA ?S-p`?D?I?Z ?_?@?EYf RW@?Q?IWX`eC_?@U`bW@S-p`D@?@?LYn@WX`LYn0 : U[`O?@GX`X.)^VI?4?$GX`WX`RW@* @YVA TX.)0?RW@?: [`gX`U?0BW@E?@?: ?c*?J X.)@ BW@* ILYn?I?RW@?4?0? ?BW@?QNVbW@* ?BW@X.)b¶@\YnYGX`?  * GX`[`O?@?4?* BW@TXO?@QYO?@ELYn4: BW@?7X`? >V@VA ?}?{`?k`7X`NV?D?LYnJ BW@?NV?E?aB ?{W`?~o?c-p`GX`?I?b¶@?\Yn?S-p`?S-p`?O?@?BW@?* 0: >V4>VS-p`ab¶@RW@GX`a_?@Y^ UNV^V_?@D?$?* 0PO?@>V7X`7X`ES-p`I?BW@?NV* >V?BW@>VaB LYn?4IE?00TX\YnI?J ?I?NV?\Yn?BW@?7X`?^ ?DTNVTXNV?: DNV?VA ?TX ? 7X`GX`?7X`0].Q 7X`IWX`^VQ4>VP_?@aP?O?@?Z ? YTTXYID* ?: S-p`a?S-p`?: 4[`aB ??M ??c-p`?: ?BW@$D ?0?Q?q?s-p`?_?@?O?@?h.)?no?`BY?@?I?U?I DI* ?$BW@^Vc*c*_?@@?DBW@f@gX`^V_?@[`NVQLYn* 0$7X`@: $?D?@QWX`?0?Q? ?GX`WX`o?@Z ?J 7X`VA PLYnDNVI?LYn?\Yn?_?@?a?@D* IO?@Pf \Yn?GX`Pdm0?7X`* ?J ?>VD?$?E : ?0?T?Q: O?@40BW@PX.)@?@?7X`?TX0YBW@0@BW@P?PYk`NV?U?TX0dc-p`?o?g?.)?zC?D>V?* ?Y?LYn: $?D?LYn?I?O?@?[`?aB ?^ ?>VJ D* O?@I?7X`?7X`>VX.)c-p`^VQTXT0? PeCc-p`QO?@GX`? 7X`DULYn?* ?$$7X`BW@?0?I@WX`J >VGX`?GX`UnobW@ BW@S-p`RW@RW@DGX`GX`?7X`?O?@?VA ?aB ?VA $$?>VebW@$^ViP ?Y?].?D?$?: ?D?$?RW@?RW@ ?4?J  ?$$?GX`?Y?@?* ?DBW@Q ? LYn`BY7X`?WX`Ef X.)?0?EGX`c*P?V/`?ғ?R?y8GX`?[`?m.?\Yn: ?$?LYn7X`T>V: TQJ VA TWX`e^ ?>V?WX`?@[`h.)S-p`?* IRW@EPS-p`TS-p`NVWX`YBW@DVA ].c*`GX`* D ?IRW@X.)YS-p`7X`?>V?4ERW@RW@P: GX`Z UD?@? ?>V?`?Z ?: ?@?J ?TX?NVEJ 0Y\Yn47X`BW@?@?TX?NVBW@YJ @BW@?BW@?GX` ?E?EBW@? ?T?D?I?TX?7X` * LYnBW@?4: ^ 7X`?^V?O?@GX`VA RW@4LYnWX`?E?{?Z@?h?k`?7X` ?VA ?bW@?O?@>V>V?$?*  @].c*P7X`S-p`E TX^ TX?$?^V?BW@Y@? X.)[`X.)aVA IVA [`ejC\YnRW@^ af jCb¶@Q47X`P@?: ILYnBW@* 4?VA ?[`^VY* GX``BYZ D?7X`?O?@?* $?: $O?@>V*  0?* ?@* 04PGX` ?@?T? VA E? ?$?O?@?D0? : X.): ?D?>V?J ?DGX`VA \Yn].E0>V?0$X.)7X`?WX`?[`?NVIU? ?* ?Z ?c*?h.)?eC?a?U?GX`?4 @^VRW@?S-p`?^ ?: S-p`E?O?@?$].I?S-p`?LYnNVh.)_?@?].?_?@BW@0WX`X.)Z bW@TTaB Y`BYeLYn* VA TX[`h.)dNVBW@TX[`NV* >V@ ?BW@?O?@?7X` ?J ?PGX`b¶@].BW@NVX.)I>V0?LYn?J BW@Y[`S-p`LYnE?I?PPS-p`?4?7X`4TTX?$$?NV?P?* ?J ?T?J ?: DJ ?* 7X`WX`S-p`RW@D?DS-p`QUP?LYn?S-p`$IVA BW@?* ?LYn?TX4RW@?D?J ?$?T?U?0?I?Q?O?@?Z ?S-p` ?0$`BYRW@?Y?`?: BW@?: ?Y* dmY?0?@GX`f@bW@?NV?GX`YBW@?>V4BW@RW@YBW@S-p``D0D?NV?BW@TXBW@? O?@LYn?  LYnI>VIO?@GX`LYn@?0?0 LYn^ aZ QURW@ GX`?7X`?T0_?@RW@?>V? ?WX`?}??dT * S-p`X.)Q0ETX>V * ?0? BW@X.)dmRW@?TX?EO?@WX`^VO?@?44 ?U?J ?P?m?p ?].?: 40?07X`0?GX`: TX? ? I?* ?d?X.)?D0?D?go?dm?E?BW@RW@4?D?$: E4?4BW@\YnTXJ QT].S-p`?4O?@f@S-p`?4 >VTX.)4DYI4?>V?a?TGX` ?P?@? ?* ?0?GX` WX`TRW@dmgX`[`Q: 0VA ].TO?@NVTXX.)@: ? ?Q?>VPD?J ?* ?dX?c?5?BY?Y?4VA ^ LYnNVRW@O?@@@GX`>VWX``BY\Yn`BYBW@?Y?: VA TXI?* ?BW@* ?O?@?dX?NV?E?k`?l(?Y?NV?NV?Y?].? D?: 7X`?I?7X`GX` ?^ ?X.)?* $?`?no?^V?* ?D?$7X`DO?@$BW@VA J 44@VA TJ ?4UeCS-p` DT_?@^ @0VA aZ ?BW@?h?k`?`?GX` DBW@? ?$TaB O?@DeCh^ YBW@?* DNV7X`$?$ RW@P ?>V?>V?E?NV0TX>VBW@?I? ?c?}?dX? c*^ 7X`J GX`?* ?LYn?S-p`?4?BW@J \Yn?E?: ?DE^VO?@?>VJ ?D?[`0GX`?J T$?LYn?Y?[`? GX`?7X`?TX?d?T0 ?\Yn?TX ?7X`?h?h.)? $?RW@?@?* 0?7X`?Y?* TGX`0 ?: RW@NV? ?NV?LYnDYBW@?40WX`a\Yn7X`VA gX`a?7X`?jC?wX`?ẁ?`BYS-p`>V?0>VIGX`Q\Yn].0?$TXQ? * * ? @E* ?BW@?BW@0I4?NV?Q?0?: * `BYWX`>VNV?NV?i?a?ES-p`aB 7X`J ?* ?$? ?l(?r`?_?@?U?7X`RW@?J ?bW@?DBW@O?@J $@WX`a`BY4?I? ].bW@D? 4TXVA I0?TX?bW@?: RW@@?b¶@?].? $?WX`?NVGX`?* ?U?: ?4?LYn?P?bW@?f ?P?0?* PVA $* ULYn?I?X.)?LYn* LYn: ?>V?0RW@aY4TXeC_?@* ?].?vA ?|?go@?E?UBW@IE $ $LYn ?TX?LYn* S-p`^VWX`PTS-p`J * >VT?P4: $_?@^ >VNVP? J aI?^ ?@I?D@?eC????{?dX?UBW@?* ?Y$VA D?D?PDedXU7X`? 7X`P* ?BW@ O?@].`BYLYn* : ?: ?LYnLYnaLYn?\Yn?`?LYn@>VDD?D?O?@?4?J ?RW@?Q?^V?Z ?LYn?X.)?NVYaB GX`DTX* ?RW@?E7X`7X`7X`LYnJ BW@WX`c-p`^ LYn7X`Qa`WX`D?bW@?qM+?`?* ?Q?>VQS-p`J ?S-p`?GX`$DRW@I?0?: >V^Vc-p`[`\YndXinWc*4Y: ?O?@DE?7X`WX`c-p`P: ?* ?S-p`?DUe* ?f ?J 0?LYn ?}|?\ ??o?s͇?a?* 0?: GX`T* ?I?T$\YnD?I X.)[`[`[`BW@?RW@?RW@$O?@VA J ?O?@?WX`?0? ?7X`E\YnNV?GX`?Y?TX? BW@E$?I?J ?I?T?GX`?$?@?* ?Q?TX? @J VA GX`?T?YE`BYD?0Qc-p``\Yn`^ S-p`: 4S-p``c-p`b¶@Q?0?$4GX`^ dm\YnQ>V? ?0?7X`BW@UTE 7X`@0LYn^ dX^V?$?4GX`?O?@?`BY* 0?DYc-p`BW@?$?: ?J ?7X`O?@aB BW@?^V?LYn?7X`?GX`BW@? ?? @?̀?pp?X.)?* * ?* : 7X`* $EP?BW@?S-p`LYnb¶@Z S-p`RW@* ?BW@? EGX`>V?$?S-p`?O?@7X`J PP?S-p`?J ?D?@?J ?D?4?D?D?BW@?GX`?4? ?: LYn@?VA ?k`?f @dXLYn?\Yn?WX`X.)f P? S-p`dmaS-p`S-p`WX`RW@* ?BW@? Yb¶@a].NV BW@`dmZ E4LYn_?@Y?: ?Q T_?@[` ?RW@?RW@?E?4? 7X`: ? IE?aB ?d$? ?4aB ^V?J ?EDD? ?7X`7X`4?J ?@?* ? ].?f ?G? @?L?Y? @? ?BW@>VD: RW@WX`Z RW@?4].T?GX`?TX?LYn?>V7X`O?@LYnD4* ERW@WX`].RW@: E?dX?RW@? ?D?\Yn?X.)?@?: ?4 ?: ?: ? D`BYa?TX?u ?q$f [`?$? YaTXO?@X.)[`O?@$@VA TX4?E?>VT_?@QBW@* ?BW@TI?4?E?J * dXfA EJ TX^ aD?LYn?: E* ?J ?E?* 7X`^ P?a?WX`LYn?7X`?D^ RW@?T?4TRW@$?E?:  ? >VNV4BW@0?inW?u?lYn?Z  T? ?DLYnYTXNVRW@\YnLYn?I WX`?* ?].?RW@?LYn?BW@LYnS-p`BW@EGX`GX`UE?4LYnZ 00?f ?`?I? ?: ?0?0?RW@?RW@?4?: ?P?4NVYc*aB ?LYn?nV?dm$Z `BYVA DLYnPLYnS-p`WX`RW@$?J ? VA X.)E0E]._?@IBW@PBW@ ? ?GX`?E? ?: ^ c*S-p`IS-p`WX`Z X.): ?7X`D`S-p`?@?E?@?* GX`?>V?e?LYnRW@?D?UBW@I 7X`7X`0IGX`: : >VQ\YnNV?J ?Y?TX?[`?e?`: ^VNV? J O?@U>V?\Yn?IJ ?>V?O?@4? ?EEGX`?$>VNVE: ?Y?h.)?: [`>VE?dm?h.)?YBW@YTX?7X`?aB ?`BY?@?@?TX?GX`4BW@LYnJ ?7X`?GX`4BW@O?@_?@RW@?0$LYnBW@7X`GX`T@?VA ?WX`: QO?@].c-p`a\YnVA _?@hdmI?BW@?E: X.)TXO?@S-p`P@? RW@X.)BW@? ? 7X`O?@$?O?@?J ?E?BW@?: ?bW@?m?WX`BW@?* ?GX` QY4?Y?U* E04: $EYBW@?O?@?O?@?>V?: I].aB >V?Z ?P7X`?4?J >V ?^V?GX`YGX`?* 0?@?J E4?O?@? NVNVBW@?VA ?dXY?0I?pw?p?aB LYn7X`?U?b¶@?LYnJ >V?E?LYn?GX`?O?@?Q?I? O?@T@S-p`^V$?II^ S-p`$7X`^V^V?J ?b¶@?J >VS-p`eCeRW@LYn^ fA inWdmJ ?0* RW@X.)[`[`O?@BW@E?* ?J BW@S-p`GX`7X`?7X`?P?TX?LYn?7X`BW@J ?T?dm?P0EI: RW@^ ?$?b¶@?Y?0?0?0BW@D?NV?QRW@\Yn0?$BW@TXE?E$c-p`T?U?GX`LYn?Y?TX?J ?U?$`BY_?@J @>VY$?X.)?>VGX`U^VE?4J LYn?I?J $?wo?r`?b¶@?Z ?^ ?^ ?a?WX`: S-p`* ?40LYn ?^ ?gX`?VA @4QQ? >V^V^ WX`LYnD^Vdm4?[`?O?@* NV^ Y>Vb¶@dZ TBW@@TXNV?$ PNVQ].NV?* >V@?E?* RW@O?@* ? ?$?@?DIX.)?7X`EES-p`[`BW@EWX` ?BW@DS-p`NVRW@^ Y?@?S-p`GX`S-p`?4?NV?E? ?E?bW@?TXUWX`DUX.)?^ ?b¶@?RW@?4NVY].\YnX.)^ \Yn?>V?Y?44LYn`BYVA >VGX` ?GX`?00?s*?m.?`BY?d?dX?^V?\Yn?RW@? ?: ?VA ?NVNVc*RW@?i?y?q ?I$* : ?0].VA ? : P* 4RW@>V?GX`?: @EJ GX`IbW@[`BW@4$GX`].Q?@?: GX`TVA YRW@ELYn4?NV?J * J PNV@?BW@?TX?7X`? ?T? YNVP_?@S-p`PYLYnIY^ bW@aB _?@Y0? S-p`RW@4 ?* ?RW@?S-p` BW@WX`^VE? ?@?NVNV>V7X`TXX.)RW@WX`BW@?\Yn?VA >V$? I7X`0?4?4DE?b¶@?e?fA ?f@?J 4?Q?Y?E?D?T?TX?BW@: ?0?pp?( ?w#X@?NVQD?4?NV>V^V ?TD?4?E?$$? O?@QGX`GX`00PO?@: ?* ?P? [`^VTU[`\YnT>V4GX`O?@D ? >VI4?: ?P?Q?4?J ?a?DVA @* WX`Z ].\YnE? 0TI0 * S-p`TXYaY^VaBW@?: ?>V?4DE?* BW@YO?@@LYnO?@BW@* @0? GX` ?a?LYnYI?4?7X`?I?$7X`?LYn?NV4* ?T?gX`?r¶@?p $Y?O?@?^V? QD?J ?^ ?X.)?LYn?a?q ?k`?0>V?Q?\Yn?BW@RW@O?@?BW@?$O?@GX`>V4 J LYn4RW@YLYn>V?4?O?@?4DGX`?4?VA ?* X.)\Yn^ `BYTXJ D4BW@E7X`BW@S-p`VA RW@O?@I? ?NV?S-p`?E4? ?TX.)7X`?@ EP@?BW@?I?D? @?D?Y?E? * NVBW@: BW@7X`RW@\YnE ?* ? ? U_?@NV?* ?>VBW@UI: ?$?DE>V?X.)?0`BYVA 0?D?U* T?E?U : ?O?@?^V?qM+?q?>VGX`?WX`?[`$WX`O?@?@?RW@?0LYnQ?$?Q?O?@?a?p ?jC?4TX0?: LYnULYnU$?TE\Yn7X`GX`X.)BW@? ?>V?J ?7X`: E: 4UZ @ ?E?I?$NV^ RW@ GX`QX.)[`Z RW@$?J ?S-p`?@?0?@D].LYn? ?* ? ?J ?VA ?$GX`LYnJ ?>V?X.)?E IVA 7X`?O?@?[`?^V?GX`$ 4$?$? $QD?$?I?TVA J 0?@?Q4I?@4VA J E?4?TXIaB 4?BW@DVA D?X.)?gX`?VA ?U?c-p`?X.)?$7X`0?0 PWX`YBW@?S-p`?c-p`?jC?n ?fA ?EEBW@>VNVDGX`@?j ?vM ?S-p`\Yn0: X.): ? >VJ BW@?$?0J ^VaT?D?NV?D 7X`VA e[`?7X`?BW@? VA aB a^ O?@?@?X.)?O?@?: ?7X`BW@X.)NV0* : D?$?@ELYn * ?7X` >VJ P7X`?D?T?RW@?0 04?I?O?@$ BW@?: ?@?IE`BYRW@* ?D?IPYITXD?D?7X`?PNVa>V?7X` IGX`Y: ?GX`?S-p`?go?k@@?T?0?$>VDBW@D7X`4? ?WX`?aB ?\Yn?P?RW@?Y?$Z Z I@RW@?$?u ?{`?U^V* @_?@O?@$S-p`b¶@^ ? ?O?@: TX>VLYnS-p`>VVA f@^VUbW@VA ?7X`?RW@?U`aQD?P?RW@ J >VEI?$?D?7X`: X.)UIQ ?RW@? PPTQ ?D?D?* IZ TPI?RW@?UDBW@? >V@ ? X.)_?@LYn7X`$LYnf bW@T^ @?X.)?O?@?I?DPS-p`?D?P?J >V0@S-p`7X`?dX?jC?NV?>V?J 0I* 4>V7X`?0?O?@?GX` ?I?bW@?BW@_?@U IZ >V?b¶@?dmLYn`0DaZ EPdgX`P?: $BW@?E?I[`gX`VA Yh[`4NV@?I?S-p`?ES-p`c*P?BW@?I?P?^ ?^ ?* O?@J I>V?D?RW@?RW@?BW@NVUEE* ?$NVYS-p`WX`T?4?WX`?J * @VA c*YRW@VA ? ?LYnIQ* >VGX`4*  ?[`?d?E0NVaI? X.)J ?O?@?D?$@YJ 0@?>V?GX`?D?I: [`Q?VA ?`BY?BW@?Q?a?TX?O?@?VA ?BW@DO?@PRW@$?O?@?NV?T?^ ?$T?4?Q* >V$@O?@TXQ7X`: RW@Z WX`LYnWX`b¶@Z 40NV>V? VA dmQ: RW@?S-p`?>V  BW@X.)ec-p`@?>V?$?: ?`BY?i?a?>V GX`J 44?0?LYn0GX`?: ?7X`>VO?@T@ DBW@?0?D QO?@O?@VA 4?0LYnD?>V$O?@LYnO?@P>V? ?>V?f ?{N@?y?^ ?BW@?TX?D?NV?DRW@BW@?7X`@S-p`_?@`@DY@* ?^ ?GX`@7X`?4?O?@?>V ?S-p`?bW@?^ ?c-p`?f@?X.) ETX_?@S-p`?7X`?LYn?NV?IITX?@?Q?4?RW@?S-p`ERW@ Q@?$J ].NV: QD? DYD* S-p`RW@ED?: ?TX?>V: O?@^ h.)lYnhb¶@YLYn>V?LYn?dX?`?BW@* PQDRW@D?7X`DNV?@?@GX`S-p`E?* GX`@: @$GX`RW@>V?LYn?WX`? LYn ?: ? : WX``P?4?LYn?i?{`?u*?J ?E?dm?Z ?4IRW@?>V?ENV[`c-p``BY? ?0: ?$ ?a? GX`?@?WX`?J GX`NV?LYn?Y?GX`?O?@?U?I?7X` RW@X.)RW@D ?: ?$U`J ? ?* ?I?>VT\Yn>V: [`TX?$4Z Q?4?>VGX`P?: ?GX`D0?O?@?4J RW@LYn? I@?GX`?* Yc-p`h.)nVa?  0?GX`?: : DTXBW@?IGX`DZ T?40YWX`DBW@S-p`Q`BYa? ?@D ?J ?LYn?O?@?0QTX ?X.)?Y@bW@TX?4?4?J ?c*?S-p`O?@?7X`?`?Q$O?@@?O?@?>VGX`GX`[`a ?NV?J ?P?: ?@@GX`0?D?J GX`Q?TX?aB ?@J YO?@?I?P? ?0?7X`0 ?>VT_?@U ?* I\Ync-p`dmQ?0E^ X.)U^VYD? 7X`RW@ ?E: : ?T?Y?BW@ ?7X`7X`Y?7X`?n ?k`?BW@: Udm0?bW@?BW@I?0?4? P?\Yn?@GX`O?@\Yn4?VA 7X`^ Q0?$ EPdhBW@?D4?* ?TX?E? ? D[`T?P?aB ?BW@J $?: $: BW@I?E?WX`?RW@?RW@?@ E7X`?GX`E`BYBW@?4? ?0?7X`S-p`@P: ?WX`?>V@?[`?jC?^V0_?@TX?X.)?a?J ?GX`?I?$?0?$GX`LYnJ O?@?: TXaS-p`D?@?a?QUb¶@daTBW@?: ?I@QI[`_?@?* ?^V?WX`?GX`?I?O?@ TX?Q?r`?l(?* 0DWX`?NV?f ?$I?T?\Yn?X.)?BW@UI?7X`* ?Z ?m?\Yn?X.)?c-p`* Z * ?$  E>VEZ S-p`4: ?$?LYn?* BW@$?0EYGX`? ?>V?O?@?$>V?4$0?7X`?GX`?T?\Yn?J @S-p`S-p`?0?Y? NV?$? PJ ?0Y4?NVDLYn?Q?@GX`?D?`BY?`BY?WX`* LYn?GX`?S-p`0I: * EQ?* O?@D?0DNV?: ?P?T?WX`?BW@0GX`[`S-p`?GX`?WX`?Y?Y$J ?$IaB @?WX`?P?$?7X`?E$NV?D?fA ?YELYnX.)b¶@ ?RW@O?@J ?\Yn?dm?a?4a`BYZ >V?~V??w?d?NVWX`^V$ET>VE* ?O?@YRW@7X`BW@LYnO?@O?@0?BW@? O?@TXTXD?E?: RW@T0: LYnLYn0?BW@?J ?07X`ID?: ?GX`$?$?U?BW@D: ?: I* ?S-p`?* QJ QWX`GX`$?I?_?@?IRW@J @NVE: DO?@* ?Q?@LYnD? * 4?: ?GX`?0LYnZ * ?LYn>V7X`?].?c*?[`?J D?BW@?oD ?h00?LYn O?@: * BW@4?4?4$YdNV0WX`D?T?_?@?_?@?* ].UZ ?X?G??YUc*WX`* X.)GX`?`BY?Y?$?7X`BW@aB TX$S-p`aS-p`? ?NV?J 4QLYnBW@?$?BW@NV_?@NV7X`BW@7X`GX`WX`I? ?4?BW@?BW@0IDRW@TX? ?LYn?0?: ?O?@?D? ?4?U?RW@4UVA GX`7X`E?* ?[`?PDE?7X`?I?7X`* GX`TXJ ?E?O?@0BW@: J ? ?RW@?Y?Y _?@NV?7X`GX`VA 4?$?*  O?@?P?t8A?rW@?O?@?$S-p`aZ LYn ?* 7X`LYn7X`?0? IJ $?E?LYn?BW@?P?7X`4?GX`?* ?ynW??zy) ? _?@]. ?$U?J ?r`?lYn?0>VO?@Z J >VVA S-p`?* ?TX?[`?QI\YnWX`I?0?0S-p`I?RW@?LYn? ?I?* PBW@? ?$?>V?0NVX.)Y`Z BW@J Q?>V?[`?BW@?>V?O?@?Q?LYn?4 ?BW@?BW@?: ?T?RW@?BW@?* ? ? : QTXWX`GX`?E?* S-p`E$X.)WX`?P?gX`?k`?nV?dm$S-p`ETdf@aLYn@P ?^V?\Yn?0$0P`e`7X`?D? J RW@TUE?BW@?RW@?RW@?`?gX`?WX`7X`0? ?0?Q?I* ?NV?dm?^V?* UWX`?$* [`?4?fA ?Y? ?: ?: $EYU?@?T @ DVA Z X.)D0I?4?[`?I?$?GX` LYn? ?>V0DGX`O?@QWX`X.)EBW@[`].?* ?Y?D?$?BW@4TXNV* ?7X`?D?$? ?$?@$Z a`BYX.): @GX`?BW@?Q: DX.)LYn?VA ?eC?dm?e?dm?J GX`GX`DZ `BYO?@>VQP>VIS-p`J LYnD?>V_?@bW@LYnDZ dmb¶@GX`?O?@?U?TX?b¶@?h?\Yn: J S-p`D>VGX`?$?@RW@[`: IYD$@?: ?RW@?7X`>VTX`BYBW@?^ ?YX.)f@YBW@407X`7X`@D$4PD4TXNV?E?GX`>VNV7X`?04X.)GX`?ERW@D?I?X.)?LYn : X.)d^ VA Z D?D?47X`PT0NVWX`U7X`?P?: J ?LYn?inW?c-p`?44? ?$?D?Q?BW@>V: : ?T? ^ I?J D_?@VA \YnX.)?LYn?WX`IYLYnGX`DJ `h.)aB 0?P?D0* ?0?@?D?04^ dm7X`?J 0BW@7X`RW@LYn? ? ?7X`*  ?: I^ WX`X.)[`$?WX`?O?@NV^ VA J @?* ?D? 7X`0: RW@NV?  P0?@* GX`4?7X`?BW@O?@aB $?\Yn?D$?J ?P?@?* 7X`RW@S-p`I NV_?@: ?U?O?@? O?@Y ?_?@?`?EGX`D?>VGX`?Q?j ?bW@7X`?BW@ adXLYn?: ?@ D: BW@0?E7X`^V ?Z 0^ RW@WX`bW@IT\YnQJ DNVb¶@k`dX0?QY[`VA I?4?0$?* : WX`?4?a?LYnEJ @?* ?E?E?RW@?I$$TXgoE?a?4`Z UZ X.)TLYnJ QNVNVUE?7X`?*  ?GX`?S-p`?>V?>V?VA ?@URW@?0* Y\Yn?D?^V?0 ?GX`* YWX`IYNV?@?U?$P?RW@?J ?* LYnY?4?f@?gX`?EX.)^VQI4?LYn?RW@ RW@LYn >Vb¶@hY4BW@S-p`J ? LYnVA IBW@GX`? ?BW@J WX`^Vb¶@X.)[`aB [`I4@WX`f f >V?TX? O?@?$?7X`GX`: ?$?: ?].?].: D?S-p`?T?4?* ?$?* ?>V>VTXPc*\Yn?wX`?C?r¶@Z aB c-p`jCgo`BYLYn* BW@UeiNV?E* >V?7X`0?Y?i?YLYnJ ?: ?07X`@? ?TX?NVILYn: X.)b¶@^VIRW@NV$?@?* 4@LYnNVPb¶@dm0?WX`?P PTTTX>V? BW@QD: * ?: $[``[`_?@^ BW@?>V?$: 4?$?4 GX`S-p`T@?GX`?IO?@].BW@* VA YDENVDRW@Z ?\Yn?GX`?4?c*?b¶@: NV?: ?Y?inW?f QhX.)0? ?: $GX`7X` QNV?* NV?0?H? ??GX` TYJ ?4?7X`: E\Yndm@?BW@RW@X.)GX`TXP?VA ?h?^V4E?0? : ?$?TX?^V?LYnGX`QLYnPD* J 4 ?>V?BW@Ic-p`aB aB k@@dm* ? : ? ?7X` LYnWX`RW@@@?I?7X` ?BW@?J 7X`S-p`QTXQ?4@0?WX`?_?@?DGX`\YnbW@X.)7X`? ? $ ?O?@?S-p` @* UaB WX`J E?D?^V?TX?T?e?^ J TX ?GX`?aB ?^VZ lYnc*_?@Z PTO?@? * D?0?`?I* ?v@??zy) ?T?>V?@?$ ?BW@?^ ?O?@I?* ?I@4?* D>V$S-p`S-p`?J ?@J X.)GX`DTD?P?c*?b¶@?LYn 7X` ?I?O?@Z ?4?O?@?BW@?BW@?U?[`?7X`S-p`S-p`S-p`X.)?UO?@?* >V@: : ?4?: ?>V? : DED4  ?7X`O?@BW@?VA ?X.)J ].TX\Yn`BYTRW@LYn?4?O?@?J ?0440TXc*dZ @?D?T?U?\Yn?bW@?S-p`BW@GX`@J ? ?0Y^ NVYa[`Z Q* ?*  ?X.)?LYnWX`?bW@?ILYnJ : ITX?J ?Y?$?P?bW@?BW@LYnGX`? ?P?7X`WX``Z GX`?$DYNVDQLYn?* ?[`?b¶@?WX`?D?7X`?$?E?NVTX ?D?GX`?LYn?RW@?Y?Y?LYn?4?: ?VA ?f ?b¶@RW@40>V?>V?T?NV?GX`?@7X`LYn0? ETXNVBW@I>V?* ?4?* 0?BW@?4ab¶@ @b¶@`^V]. ?NVLYnQRW@O?@GX`NV\Yn^VBW@?7X`?: ?GX`?Y?aB ?Y?4?4?BW@* Z Y7X`>VIIS-p`Q4?E?Z ?>VRW@4? QWX`].bW@I?>V?J ?[`goY?VA ?RW@?>V?NV?7X`QZ >V?I].dma: ?O?@? GX`$? * GX`D ?7X`?D ?E?GX`?0?$?@?0?4?TX?Q4?].?c*?T D$? ? ?BW@?LYn?0GX`NV? ?J ?: * 4GX`VA J ?$?$?BW@?S-p`?D?I?J \YndX $b¶@`Z `@?T?NV$LYnVA WX`DIWX`GX`? ?7X`?TX?b¶@?^ ?$?U?].?Y?INV].T4? 7X`LYn4?@?Y?^V? X.)O?@IPDRW@J ?Y?aB ?\Yn?f ?aB IX.)?>V?BW@S-p`X.)44YTX? ?@? IS-p`? ?EDPENV@ Ta\YnO?@? ?* NVP$?Y?J ? * ?$7X`?0* aB ].? ? 7X`?* ? 0* @GX`@ILYn:  ? ?00DIDIBW@? ?* ?I?WX`?BW@?GX`?YEdXNV@^VO?@BW@?$?`?b¶@?LYn7X`GX`LYnO?@EETRW@7X`?0?NV?^V?fA ?^VETX?4?TX?WX`?Y?IBW@O?@ ? QS-p`?: ?S-p`?GX`4WX`P$RW@Y@?LYn?i?`?3?̀?vA ?^V?J ?BW@?@@[`GX`? O?@T?U?`BY?IE TTXWX`dm[`0IYRW@$?: * [`bW@X.)?0?BW@?7X`7X`07X`: bW@_?@DQE?E? GX`DRW@I?D?BW@47X`?$?BW@U_?@aB `BYGX`4J 4?BW@?J ?: GX`7X`?RW@].O?@7X`BW@?O?@?bW@?S-p`?$?GX`?S-p`?* BW@$X.)VA : BW@PI$?I?aB ?h?[`@LYn? ?4?* ?GX`?P?>V$? TXT?: ?GX`BW@[`X.)? ?E* DD4?U?p????R ?l(?`?RW@?U?^V4WX`DED? ?J ?T* Z 7X`?BW@?* VA S-p` BW@4?BW@?E4U].S-p`7X`?$?E4* * ?I?Q>VD E$?D7X`7X`?4* ?E?fA ?a?* : 7X`$S-p`].`Y? ?* P7X`?S-p`?NVBW@YI?D?$PI ?E?b¶@?i?X.)O?@aZ VA Q0^VTX?7X`?7X`: PYLYn?LYn?[`?J ?4?Q?Y?S-p`?7X`DJ : E@7X`@ EGX` ?: ? ?@?S-p`: J ?dm??`? ?`?35?wX`?Y?4? ?\Yn: c*U>V?BW@?: VA c-p`E?D?: ?T?_?@?NV$: ? ?>V?4EID? : 7X`?J ?NV?7X`$0?U?^ ? 0?7X` ? ?* D? ?RW@?* ?GX`?a?NVIO?@QGX`?  J P0?RW@?RW@0?[`?Y D?7X`?S-p`?>V@GX`7X`?4?S-p`?WX`?NV@bW@dXaVA * : YO?@?GX`?RW@?7X`NVa^VE7X`>V?7X`?X.)?^V?`?TS-p`c-p`WX`QLYn?* ?GX`?4 4$4>VJ Y?* ?`4D?pBY? ??Ç}`?@??`?{W`?^ 4Y?0O?@`NV@?$?RW@?GX`GX`S-p`: 7X`Q ?Y?S-p`GX`Y? ?U?@ LYnRW@TDYX.)?* ?Q?E: O?@?4?7X`UGX`?O?@?BW@? ? E7X`?* 7X` ?D@X.)S-p`UJ ?@?@BW@PBW@?D?T?* 0?U?dX?X.)?>V?RW@?Z ?NV?@?4* EQRW@?O?@?* Q[`X.)>V? BW@NV?* ?[`?TEU>V@WX`VA >V?>V?Y?VA I].LYn* ? ?E?I?>V ? P`BYY^VD?U>V: ?p?H ?f?:?E??v@?i?@: ?S-p`?0: 4O?@ ?RW@?$BW@? ?J ?LYn0Z U* $VA Z ?D?_?@? O?@ ?* Ic-p`c*b¶@^ 0?:  X.)bW@TRW@`* ?a?Y?: O?@VA I4?* ?GX`? >V: @$?E?: >VJ PLYn0TX?$?dX?`BY?7X`?D?Q?J ?TX?Y?>V>VO?@\YnS-p`?GX`?X.)?BW@@S-p`O?@? ? VA LYn?].?^VJ GX`?WX`?LYnRW@X.)TS-p`0?NV?GX`0: ?@?P?0>V? ?$? ?E: TX J _?@: IRW@?dm?y? ???X`?p?e?GX`?RW@?aB ?T?D* RW@?4?S-p`J \Yn? ?`BY?a?P4QO?@>VEQ? ?NVJ \Yn? ?Y?BW@X.)aYO?@?7X`?>VBW@`BYbW@0?NV?7X`?O?@?a?\Yn?J ? J TBW@ ? ?: ?D?BW@?I?S-p`?P?: 4: ? @].WX`LYnWX`BW@?VA ?S-p`? ?0? ?J ?VA ?E?GX`?X.)?7X`Q?Y?TX?>VE\YnI].a?RW@?].PE?c*?c-p`NVS-p`S-p`0NVGX`? * ?DDT?BW@?GX`: ?4?D?>V?YfA Y4WX`?0?qM+?~9?b̀?e@?s͇?d?: 4?@?>V?* ?E GX`?I?S-p`GX`TX?>V?a?b¶@?Z ?BW@@>V?: ? UP?7X`? D?$?NV?D?0* NV0?TX?RW@* WX`BW@?go?uC?oD ?RW@ ?7X`?NV?@?4?@?$GX`TXP7X` ?GX`?^ ?Z ?7X`>V7X`?0* ^VY ?$?7X`?D?>V?4? ?GX`?T?GX`?LYn?bW@?Z 4?4?Y?E D^VRW@?0S-p`aB ?0?TXI@?c*?gX`?I: BW@@4RW@bW@U$QS-p` E4?a?UX.)T ? ?P?: X.)BW@?PLYn?D?a?`BY?WX`?Y?O?@* 0@U@?GX`?$>V? ?0* * ?GX`?[`?^V?X.)?: >V?$?RW@Z O?@?Q?VA ?0$4?E?DP4?S-p`?O?@* NV?D?q?y?pp? aI?@?0?Q?_?@?>VUYS-p`TYNV?$?4?0?E?GX`?@ I? ?`BY?c-p`?Q?* ?J ?T?@?4?GX`?P?WX`?J : ?0J 0?BW@LYnZ RW@U: ?NV Q?7X`GX`>V?U?YD? ?0BW@RW@BW@4[`^V4?@?^V?@`^ NVPD? ?0?LYn?LYn7X``BYgX`j dm4?I?0EQ ?BW@?*  : 4 >V ?O?@?WX`?T?0@?4?I@P?$?I: Y: ?E?$?7X`?* Q7X`?BW@?* DO?@?0?a?b¶@?QGX`X.) ?BW@7X`?7X`?WX`Q: 0S-p`^V\YnY[`GX`?P?_?@?Y?@?* ?WX`?f ?dX?RW@?$?RW@?_?@?Q?GX`?: : ?7X`?ETS-p`I7X`?Q? X.)\YnY7X`?@ DD?0$O?@D?@?D?@?S-p`?S-p`?I? TU?4* EWX`Y0?BW@? NVQ: ETX>V* RW@TXTXX.)E7X`RW@ULYn$?4?$?D?0?: ? S-p`GX`?J ?O?@?E? >V?$Q>V?: * U[`?^ ?U?BW@?>VI?D?44D?$LYnQ>V ?T?^ ?GX`?7X`?E$: ? 0J GX`BW@RW@^ \Yn@?RW@?].?BW@4?* ?BW@?@?@?* ?RW@?bW@?\Yn?Q0]. ?PNV>V?X.)?NV?bW@?u*?q ?4c*eCRW@>VD: Q?GX`?_?@?4O?@BW@?: ?GX`?4?Y?VA ?@?0* 4?4?* LYn_?@_?@* ?Y?a?`BY?>VS-p`RW@RW@\YnTXI4?VA ?WX`J b¶@eCdX\YnLYn* * ?$?>V?$?>V TX?X.)?@ 0: ?7X`QI>V?NV?q?s͇?c-p`?J ?* ?>V?S-p`7X`?E?VA ?Q?04? ?4@* ?07X`?BW@?f@?i?a?S-p`?4? ?0?0?00IS-p`X.)@?E O?@J S-p`BW@?NV?J ?BW@?Q?J ?I?:  ?X.)?[`S-p`T?4?* ?k@@? ?x@?7X`f@dXPIGX` QU?aB ?n ?BW@U? ?T?>VE ?D0E?* ?7X` * 47X`@* ?NV?TX?D?O?@?S-p`?*  ? ?40BW@?@?4Yc*aRW@$GX`VA E J S-p`EPU?BW@?Y?$@LYnI?D?D: J S-p`?fA ?M ?@?tLYn\Yn@?4?RW@?Z ?RW@?$BW@7X`? ?4?S-p`?TIRW@?Z ?m?i?WX` >V?>V?U?RW@?Q?Z ?S-p`?0? BW@O?@: 0?$?LYn?0?D?a?O?@ELYnLYn?$?WX`?Q?RW@?D[``Z dX?p ?eTc*WX`EI$?: TWX`?a?k`? WX`?J GX` ? QQ?0?>V7X`RW@RW@$?@?@?J `].?0?Q?I?@?J ?TX?@BW@GX`D ?>V $?7X`Pc*U0GX`VA S-p`GX`UZ 4?0 * TTX?7X`?7X`47X`TX?\Yn?H?A ?r¶@: TXQU?O?@?O?@?00@ED?LYn?bW@?LYnLYn? ?^ ?bW@?LYnUa$?Y?S-p`?m.?M+?D ?b¶@?  LYnJ ?S-p`?b¶@?^ ?_?@?aB ? YRW@I?0?ITXZ ?>V?I?4?$X.)c-p`O?@0O?@X.)X.)VA O?@?>V?TX $?_?@?`BY E? 0@?* : GX` ?4NVQLYnBW@GX`c-p`b¶@: ?*  $?$EWX`P?I?TNV].: GX`].TXNVULYn? IVA QJ 4 TXQ?7X`7X`P I4?f@?m?^V?NV?0ERW@7X`?BW@? BW@? ?I?D$VA D?`?dX?GX`? ?Q?].?S-p`RW@f Q?$ ?y???r¶@RW@TXT>V?: ?@?E?NV?VA ?PO?@X.)? ?7X`NVdX?TX?" ?b̀?s*?eC?].J ^V?0?J X.)f ^ GX`?E?TX?NV?[`?c*?P ?  >V0: * ?BW@?@ETX: ?* 0?$?X.)?4^ X.): O?@RW@IY^VGX`0D>V@[`aLYnDbW@a* ?7X`* Q\YnP ? 4*  @: : RW@* ?Q$Q* * BW@@J ? ?O?@? 0?@BW@?* BW@TX>V?: ?RW@?PIVA ?J ?`BY?P?J ?VA ?X.)?Z ?>VVA J @WX`?s*?`??l(a`X.)?7X`?Z ?4J >V?$ TXQ?0 X.)^ ?: ?sc? ???~V?go?4TX?I?O?@^ c-p`@? ?$? ?$?WX`?Y 7X`? DO?@0* 7X`?7X`?@LYn\YnLYn@O?@?>V?dm?QYQ?00T].f c*I7X`I? ?J 7X`X.)NV@LYnBW@?: ?RW@?S-p`>V^ YD0?Q?Z ?: 7X`7X`@?>V?Y?BW@4* : $4E?BW@?ELYn* ?O?@J * IURW@O?@ ?GX`4J ?GX`?RW@?: ?T?X.)?: ?O?@?VA 0>V[`?$?xc?w#X@?* YTT?I?dm?TX* DIBW@D>V I`BYY?eC?k ?f? ?AF??vM 0[`BW@7X`VA ?WX`?D BW@Q7X` E? ?J 4O?@>V@LYnGX`J TXE?0EbW@Q?J ? U7X`?O?@ ].a[`NV0GX`Q?0?WX`?E?D?@$EP4?Z ?`BYYP? * ?TX?a?>V$?D?4?4?NV? >V0DBW@: ?VA ?IQ4? GX`4: 4* IO?@GX`J ?\Yn?U?0?U?\Yn?: ?O?@?[`4J ?BW@DaB PBW@LYnGX`?7X`?[`?S-p`?0ETX7X`?@?$?$?BW@?$?VA ?8A??7q??f?-p`LYn^VYVA I?P?^V?LYn?: ? IBW@ ? ?S-p`?[`?4O?@WX`].VA : GX`WX` ?Y?0`aRW@NVNV ?J ?0LYnD?@?I?7X`0NVBW@ : ?O?@?$WX`YJ ?* ?U?ILYnRW@? ?LYn0WX`? ?TX47X`?O?@@? P].: ? 0@* ?S-p`?GX`QD7X` ?BW@?VA ?DNVYQ?7X`?].?Q* ?I?_?@?Y?`?`* LYn?LYn?ETX[`LYn?BW@?* ?7X`?>V?* 0RW@T?BW@: * ?Y?^ ?VA ?S-p`?h?E?(7 ? ?VRW@?P?RW@>VRW@I? ?I?7X`? ?* ?J ?S-p`?: ? ?>V>V\Yn].U$?U?>VVA @?U?T* \Yn_?@@?BW@?0Q`E?>VO?@PS-p`S-p`?4TXeE?I?GX`?7X` ?D?>VO?@GX`* ?4>VE?0?Y?O?@O?@X.)* ?I?O?@?4D ?P?NV?Q?VA ?@?0?S-p`?Q BW@?>V 0?D?GX`?$? DVA J  J aZ ?>V?NV?I?d?inW?}d?? @?%% ??Z >V S-p`WX`admI?$IS-p`?].?b¶@?IIGX`>VJ X.)`?* ?v@?z ?PbW@4?TX?J ?4?0?Q?[`?E: * ? ?7X`?$LYnE?>V>VbW@^VE?: ?^V?RW@I?$?_?@?NVTaB RW@?BW@?: EJ LYn: ? NVQ$E ?TEaB @?@?NV?P? ?* ?@@$?0$US-p`7X`?@?>VO?@P?E?O?@?7X`?7X`?$? ?$PX.)?* ?Z ?Y?P?D? * ?$?@4: ?GX`?D? ?4EU$ Z d^V>V0O?@?RW@?no?j ?sb̀?}.?m?: ?S-p`?BW@D4WX`goX.)0LYn>V?>V?LYn?VA ?LYnBW@: ?0?>V?O?@?>V?* ?k`?u ?TXaNV?GX`?NV?J ?D?>V?: ?4? 7X`DTRW@* RW@7X`?$ ?@^VT?7X`? $?7X`?S-p`?: LYn?7X`@: : 0?LYn?RW@?U?X.)* LYn?* ?0?E?TX?7X`?4?7X`J ? ?S-p`@WX`D@@?$: I?4I?D?GX`?>VU`BY?E?e?[`?4?0?>V? ?4?P?0* ?D?@J GX`?S-p`?Q@J I4?* T\Yn?I?a?Y?a?a?T?LYn?* ?4Pf Y0 ?J ?7X`T4?P?$ ?0?@?`?bW@0GX`?P?4YWX`>V?@?LYn?>V04?@?TX?J $@NVVA @?I?T?X.)?@S-p`I@].VA * ?S-p`?U ?4?I7X`? ?: J GX`?* ?I?E?: ?@? ?0?J ? ?@?Y?WX`?TX`BY ?`@LYn?* BW@U? ?$GX`7X`O?@^ NV7X`* ?: * : ?X.)?aB ?I?$?LYn?O?@?* ?4?WX`?NV ?@?P?4$: ?BW@?dm?a?@?@?$$?LYnbW@S-p`?NV?RW@?X.)?TIWX`0?$: _?@fA T7X`E?$ ^ NV?J * RW@GX` ?X.)?`BY>VaRW@7X`NVRW@E7X` ?I?T?LYn?GX`?O?@?RW@?LYn?$? ?$BW@$?Y?b¶@?_?@?: T* ?Q?>V?GX`?J ?O?@?@aQ?U?7X`0?* 47X`* BW@Y].@? ?* ?0D>V?GX`?Z ?_?@* d? ?aB 0>V?>V0T? ?0@? * RW@: EYGX`? ?4?NV?:  ?NV?\Yn?Q? ?4?\Yn?Y* ? ?Y?RW@?* ?BW@?[`?c-p`?WX`?>V?P?P?4?GX`?: J ?J : QS-p`c*a$? O?@_?@Y? 0^V* ?Y?>V?0?P0UE?>V?VA ?J DS-p`PGX`?J ?S-p`?D7X`$?I?TX?Z ?Q BW@BW@?7X`?[`?WX`?P?X.)?TX?RW@?>VJ ?Z ?TX?WX`?RW@7X`? 0f@Y?WX`?BW@BW@?$?4 ELYnJ \Yn`BYNVPS-p`BW@LYnVA Q$?I0Y? ?I?D?E?I ?$4?GX`?BW@$?E?$].[`@? ?00?VA ?WX`?@?4?I?\Yn?WX`DGX`?WX`?[`?>V?I?WX`?O?@?4?7X`?O?@?U?O?@?D? >V?>V?Q@YTUP : 7X`?@?X.) Y?VA ?pw?fA ?dX?inW?TX4$?I?S-p` O?@4LYnU?@?`BY?].?LYn * ?E?@GX`VA T* ?T?WX`?T?P?* ?NV?Y$E?4?4?BW@I@ YNV?LYn? I0?* ?$BW@GX`0GX`RW@dc-p`>V? : QU0?>V?$* Y?WX`?7X`?P?_?@?GX` >V 4O?@? TXZ O?@$?E?D?4?7X`0@?>V?NV?I?4PP?Q?Y * ?4? ?BW@? * ?7X`?J ?4EI? ? BW@ID4* 0$?LYn?TO?@T?c-p`?k@@?p??C?ẁ?D>VJ BW@O?@RW@* NVY?* ?GX`@D?: NVD? ? ?$? 4J O?@?7X`?RW@? ?LYn?bW@?* TEGX`? ?Q: ?* $$BW@DLYnBW@?GX`?E? : RW@d`BY0?7X`?LYn?GX`* ?4?\Yn?[` d?U? ?NV?c*?NV J TXRW@VA LYn$: II ?RW@?P0RW@WX`NV?7X`?GX`?$?$* ?J ?RW@ 7X`?0?* ?7X`?4O?@X.)* ?LYn?LYn7X`[`T4TXP 7X`S-p`^V>V? aVA ?Y?T? ?`?E?_3?_?@ ac*WX`TGX`J E?: >V`VA BW@BW@@ID?$?I?VA ?].?J VA aB ?4?^ 4?GX`@[`X.)WX`? ?`BY?VA ?: ?0? 0TXS-p`$S-p`^V ?BW@$0DGX`BW@TTNVGX`?E?WX`?@?@?Q?J S-p`?NV@? ?\Yn?E0 TY4? ? ?BW@?@ ?: ?RW@?BW@O?@X.)NV7X`?4?LYn?J ?RW@?TX?: ?* ?O?@?RW@?U?^V?U?: 0NV4?J ?E? 7X`TS-p`?$?7X`ELYn7X`>VLYnaiP?>VZ I?WX`?Q?? ?`?̀?k@@?QVA aIU[`LYn?* ?NV4RW@ EbW@\Yn@ ? ?$?RW@?TXD^V?TX4Q>VIT_?@dmD?VA ?TX?D$DBW@VA Q?: J e`X.)RW@$$* ES-p`TXO?@?7X`?@@BW@NVTX7X`?PGX`NV?40RW@PX.)P?BW@?P?I?E E ?BW@?D? ELYn4? ?D?E?BW@?>V0D?D?^V?c*?dX?Z S-p`LYn?LYn?^V?0Q: ?  ?E?Y?NV: VA ^ Z `BYfA @?Z $?Y?NV?o?I???d?IPLYn?0YdXP?@?DO?@S-p`?D? ^VY>V* * 7X`>V?$?D7X`\Yn\YnTXP4? ?: ?I: RW@?BW@?LYn7X`4J T?$?* 4?BW@Y^ _?@Q?: ?E?J ?O?@ LYnD? ?O?@ULYnIO?@? ?Q>V$LYnZ WX`NV ?: ?$? 0WX`_?@O?@: I@ @GX`: $ 7X`NVO?@J E ?0?D?P?>VPa].?T?7X`* ?P?].?I?7X`?U?TX* X.)`BY_?@^V`4?[`?7X`0?P?$?ẁ?$@?@?R ?GX`I\Yn4?4b¶@goI?J ?: ].c-p`$?>VBW@IGX`O?@>V?BW@?T?O?@?7X`?00\YndXTX? * ?* ?Y?U?a?qM+?`YVA VA Y?LYn?Y ?E?>V?7X`? ?4?LYn?O?@?\Yn?b¶@?RW@? ?BW@?WX`?7X`S-p`@?BW@?LYn?I>V?@?J ?U?J $>V$?$?04E ? @QQT\YnS-p`4O?@:  @@DGX` ?4: URW@7X`7X`T`^ E?0?>V?P?bW@?d?ID ?BW@?$ Ic-p`dXU?NV?* 4?O?@?RW@?U?tX?{W`?k`?BW@RW@^ 4* c-p`dXI?J ?LYnP^V: $TXYTXQGX`?7X`?X.)?GX`>V?@?^ ?II0 ].].?E?h?w`?dma^V[`c-p`? ?S-p`D: ?I?GX`?D?D?BW@?D?NV?^V?b¶@?WX`?D?* ?U?ETRW@?* ?NV?0S-p`0?E?`?Q?* ?LYn?O?@?7X`0LYnD?4?RW@?Y?J 0>VD@?7X`?: * ?  NV: ? : ?INVBW@? ?* >V>V * >V?D?D4UI?4?@?BW@7X`f@fA  ?E? ?0?BW@?RW@?Y?Q?J ?T?U?NV>VX.)LYn0IURW@?GX` BW@$NVbW@c*U7X`GX`TGX`S-p`b¶@O?@?TX?WX`?I?T?GX`Yb¶@S-p`GX`?P?k@@?IeCZ UeRW@?$>V?0?ILYn].UGX`?* ?O?@?J ?* ?0?D? ?J ? YY>V? * O?@I7X`?D: E?BW@?@7X`D@$?$?E?WX`?LYn ?E?TX?GX`?Q?S-p`?4? >V\YnWX`J WX`O?@?  4?4?@?@?O?@?P?GX`?>V>VWX`X.)Y[`\Yn^VP?7X`?:  E`BYZ ?@?>VE?: ?U?4@@>V7X`$?$0Y^V: ?BW@ LYn0?7X`?* GX`VA TTXP? * [`YTXa^ @?4?U?Y RW@>V4$?DEc-p`IYWX`>V?P?7X`b¶@go[`J ?BW@?RW@: U?4?WX`?07X`BW@VA O?@@7X`$ BW@LYnJ VA Q$ES-p`7X`?4?4 4  ?S-p`?Z ?P?RW@?GX`7X`4>VZ Z PP@* O?@NV? >V? ?I?GX`?BW@? >VGX`S-p`Z ].aY? ?4IO?@J GX` ?NV?WX`VA ^V[`X.)UE* TX`S-p`40 ?$?4?P?J S-p`[`?$?0P7X`? O?@LYnEO?@?7X`0* ?: $J ? ?@0 : Y>V?LYn: [`T?P7X`dXX.)?>V?BW@?P?O?@PQ?Z ?a? 4?BW@?: * DTYRW@@? BW@PEQX.)7X`?: ?0?$ >V0?E?U?Q?LYn?LYn$P0IE?$?GX`?P?0TS-p`? TXYLYn0?: ?P?E 4S-p`WX` ?DJ ^VVA P>V?LYn?^V?X.)?I?J ?NV NVLYnLYnE$4PZ _?@P? @NV?LYn?[`@X.)?: ?GX`J BW@? GX`E NVGX`?T?VA GX`^ US-p`S-p`?* NV0?: TX.)? DaB Z ?4?WX` \Yn?$?`?O?@?>V?4RW@D?X.)?P4?@?_?@?_?@?P* PO?@QT?47X`GX`?E?D4P7X`?$$?$?>V4>V?@?P?RW@?Y?P04?BW@?0BW@: ?* ?LYn?P?7X`>V: ?* ?4I^V\YnT* ?NV?* S-p`BW@?GX`?NV?: ?4?NV7X`c-p`bW@P?$?^V?dm?LYn7X`?LYn?`?NV? ?D?4GX`E$: U\YnI0TXY4?>V >V? ?>V ?$* PGX`?O?@?@WX`].TWX`S-p`4Z  ?X.)>V^VDLYn`BYRW@?LYn?a?NVGX`?@?X.) @@7X`O?@LYn?$?0?7X`?BW@? ?@?[`?TX0BW@@$ ?: ?: 4?0?BW@BW@GX` ITXD?$?T?^V?LYn?BW@?NV?0* >V@?*  ?$* ?* * BW@LYnD?: VA D?: ?4?@?>V ?* ?$S-p`U ?LYn?WX`?RW@ D?* ?4GX`4?RW@?EILYnDQS-p`BW@0?^ ?o?@?^ QGX`? >V7X`? ?* ?7X`?@?I?@?E?ELYnX.)?$TXTX7X`Y?^ ?BW@D4TO?@? ?U?GX`J 4?* LYnD?>V?D?BW@D_?@QS-p`gX`a4BW@>V?NV?TX? Z 0?NV WX`I4GX`?* ?@T\YnO?@RW@TNVD? ?47X`0?  ? ?J ?7X` ?BW@?7X`@? ?GX`? ?@?E?GX`?40?0?BW@?* ?@UO?@BW@VA Q? ?BW@?O?@?O?@?4* ? IX.)D?BW@?$ ?LYn?@VA Z @@?LYn?~ ?c`?}.LYnY* US-p` ? 4UGX`?D?S-p`?0YS-p`?NV?GX`QQ? S-p`E?D?: ?* ?J ?: >VNVNV$4X.)QBW@P7X`?BW@?O?@?QJ `BY$4aJ ?ED_?@[`O?@QU?BW@?Y* `[`YY7X`: ^ YGX`J * ? GX`U\YnU0BW@T?RW@?E?E?Q? GX`?: ?[`?U?BW@? * ?7X`?E* @?>V?@@].YO?@PD0 ?>V?J ?T?[`?P 40$ 7X`ED?J ?inW?e0Z NV7X`?`?¶@?t??@GX`\Yn>VWX`S-p`7X`7X` RW@h.)a: * LYn^VY7X`* E7X`?$? GX`O?@7X`4 ?I?J ?0 @47X`J : @S-p`I7X`? ?7X`Y].?S-p`?X.)?0?VA ?Y?NV?RW@?@>V?$?Q?P* PLYnRW@GX`?7X`E[`?I? ?E?P$U^VLYn?7X`* @?@?7X`?LYn?0TXGX`?T?].?S-p`?GX`? >V ?4GX`Z VA O?@ILYnJ @4?D?S-p`$J ?BW@?T?X.)?c-p`?[`* TXLYn?D?NVQdX^V?: ?gX`?i?ERW@GX`?RW@?lYn?y?{`?f@UNV? J QO?@TXILYnT ?$LYnO?@RW@^V^ S-p`@: : * ?D RW@7X`?: ?>V?@?4? ?: $TWX`WX`D Z NV?Y?E?[`?w`?uC?u?`? ?jC?X.)?Q@? ?GX`?I?* ?GX`?Y S-p`?NV?_?@?O?@?T?U?D?* 0$?* ?J ?Y? ?Z $a$?Z ?>V: ?: ?T?O?@?@J S-p`PPQJ 00J $?: S-p`[`?7X`?Q?Q?a?\Yn TXI?NV?LYn^ m.dXJ ?I?TX?4J 7X`?a?pBY?go?RW@@?0?@INV* DO?@>V?BW@?TX?7X`0?D?7X`VA _?@S-p`GX`O?@@? >V ?VA dmY? ?* ?7X`?BW@?$GX`S-p`@: O?@TVA D* Q?: ?S-p`?8A??@?a?=M?n?V?s-p`?0_?@Y?@?O?@?GX`?>V?E?T Y ?RW@?J ?NV?J ?GX`?T?GX`* NVQ?D?Y?BW@?c-p`?7X`VA ?: ?T>VLYn?@?X.)?TX?D 0?@?NV?: ? : @$PaB b¶@dX`BY4* ? ?].?X.)>VTD?@?7X`WX`aUI7X`: II0?TX?c-p`?Q?: ?Q?GX`?7X`$WX`?0?p ?m.?BW@7X` LYnY?* ?aB ?NVUWX`D@* ?Q?QVA Y?J * f RW@?P?D?$?BW@?7X`WX`fA [`>V44>V: O?@VA ?O?@?VA ?dm?ۘ?Q?] ?R?x ?1`?FR?TbNVdD?GX`O?@O?@?0? ?$: _?@[`GX`BW@: : 0?>V?: 7X`TX\Yn: ?D* ? ?VA ?7X`@?4?7X`$?4?J ?*  ?4?4?4?WX`?].?Q?J ?a?dDb¶@Z D4RW@4?_?@?QY^ O?@EI@?BW@?Q?@LYnYGX`?$?D?@* ?>V?VA NVVA c-p`?Q?|ˀ?zo?U: Daa?LYn?dm?DPGX`* ?J ?c-p`?].VA [`?RW@?GX`U$?TX?0BW@?0S-p``7X`?@ ? ?4: ].`BY?J ?^ ?pBY?AF?I@?Y? ??`?"?:`PT?O?@?BW@go`BY?NV?>V $\YnbW@YX.)TO?@RW@I$ >VNV4? BW@GX`0: >V44?0?TX?TX7X`?P?RW@ ?0?J ?>V?I?7X`?GX`?s͇?{N@?f 4?$?NV?D4?4?aB ?LYn_?@].IVA ^ BW@?Y?_?@?RW@?D>VZ J ?E?T?@I7X`? WX`_?@_?@h ?s*?k@@PQED?J ?S-p`?7X` 7X`$?: ?Q?O?@0 ?[`?TDLYnP].[`O?@>VD?Z ?PJ * ?7X`GX`Z Y?: ?].?bW@?iK???΀??&@?>?i* >V?O?@? f@NV?`?J * $Y_?@QJ 4? IQ* ?  ? ?@J O?@NVI00: ?S-p`?c-p`?\Yn?J ?\Yn?RW@YX.)?0?J ?7X`?$?pp?zo?fA $?$?NV?U?NV?P?a?O?@VA P IVA GX`?* ?7X`?>V?P?0S-p`O?@?>V?Y?NVJ LYn* T\Yn^VeI?WX`J inWVA ?7X`?7X` LYnO?@?: BW@TXD7X`E ?: ?7X`?$>VO?@Ub¶@aB J 7X`7X`? ?NV?Y? P?* ?* TNVGX`D?O?@?Y?lYn?|Yn?w?  ?*?zȠ???4LYn$4X.)?I?f ?DE0PRW@* ? ?J ?RW@* LYn? ? @?$?J GX`>VBW@0?GX`?LYn>V?I?i?f@?J ?RW@?IZ VA ?@?NV?TX?: NV?T?gX`?4Q?LYn?U?O?@?E?WX`?IPI?* ?0? : TWX`4?NV?>VIBW@?: ?NV?$TJ ?: NVVA WX`?7X`?PU`7X`?: ?>V4].U?* X.)[`D* D4?$4WX`^V>V?BW@0$?RW@?LYn?7X`?J ?J ?00?0?X.)?0Q?  Y? ?b¶@?eC?d?c*?r" ???t8A  T: * GX`?T?dX?BW@D ?: ?: ?LYn?RW@* LYn?0?: E7X`?0 ? ?>V ? ?U?S-p`BW@?@?bW@?X.)7X`?@?WX`? ?* ?S-p`?O?@?U?LYnLYn>VYT?LYn?Z ?T?: ?0?Q?D7X`?* ?LYn?D?4$QWX`I: E?: ?P?0LYnX.)@?D?>VDI?E?ERW@I?BW@?: ?4$LYn? ?E>VP@7X`* 4E: BW@O?@?* ?Z ?E ?BW@?4 ?>V?: ?$?LYn?[`?U? ?$?Y?GX`O?@ ?Q?I?LYn?^ ?go?k@@?b¶@?DTP?* ?$LYn ?P?7X`* 0?BW@?: ?BW@?J 7X`S-p`?$?LYn7X`NV: ?J ?O?@0: ?0BW@TX7X`?@?BW@7X`LYn?@?X.)?E?>V?0: ?BW@?X.)?0IZ eY?J ?Z ?RW@?E?S-p`?].?S-p`?NV?^V?YE? ?ENVPNV4?O?@?P* QO?@0? ?7X`?P?BW@E@QaB J ?BW@$E@ ?D4Y7X`?: LYnS-p`* BW@T ?NV?*  Z gX`YELYnGX`: ?D?`BY?WX`: : ?Y?c*?LYn?* ?@LYneCa7X`?S-p`?^V?T?7X`?@YLYn?: ?D@UP ?7X`BW@].S-p`?* ?: ?@?NV4WX`?* ?U* Q>V?>V?BW@07X`>V_?@^ ?$?I>VS-p`D?  EEQY ?Z ?QLYndeTX?$?J ?NV?TX?a?aB ?U?T?[`?GX`INV?I?bW@?RW@ILYn ?: ?E?04: : 04? ?WX`?VA * GX`S-p`].7X`?@Q_?@J ?7X`? `goLYn ^ _?@0I4?>V?4?4 fA qM+a?$* WX`VA ?4?[`?@X.)E?\Yn?X.)0?4?RW@Pc*LYn?I?NV: `\Yn?* NVI ?LYn?@U_?@* ?LYn@c-p`].$? ?: ?S-p` TX?D?Z 4GX`?@?: ? ?: ?@?I?BW@GX`LYn?>V?DBW@LYn$DLYnIQTX0?O?@?GX`S-p`b¶@P?@?I?BW@?>V?D?S-p`?Q?7X`?4?* 7X`>V?NV?[`?E>V? ?P?P?>V?: ?GX`7X`0* ?@?E ?0?I? ?* ? [``* ?LYn ^ `DE^ WX`?4?O?@?0GX`TX0?a?c*J k@@\Yn?GX`?DNVRW@?0?T?BW@J I?>V Y$?VA J ?NV?`?TXPf@Y?GX`GX`GX`>V?E?NVDWX`7X`?7X`$O?@LYn: @? ?TX? T?BW@?TD ?\Yn?TX?D?Q?P?J ?NV?@$: 0 ?>V?J ?BW@?4@: * $: \YndD?Q?NV?: >V$* ? ?4?$?: ?$0* 0$?D?Q?S-p`?LYn?7X`?LYn?Q 7X` IPLYnJ ?@?a?WX`? EWX`P?0?7X`>VE? ?EE4?D?NV?: LYnb¶@TX?c*?p ?Q_?@^V* ?4?: ?TX?U?Q? TJ D\Yn>V?Z ?BW@D?00T[`: ?* GX`GX`BW@?$?: 0ENVT0?BW@ LYnNV?O?@0Z : NV?0?^ ?Y?VA ?Y?4O?@J  D].U ?* ?>V?LYn?I?GX`?47X`LYnRW@^ h.)_?@0? ?$?  ?7X`?: ?@?TX?P?4GX`TXLYn>V$?$?4?J ?RW@?>V?* ?* 7X`0* Y_?@TXTX>V?X.)?^V?: 7X`?@?>V4GX`?E?GX`?E?4 : BW@@Y^ ?NV?go?TXJ TD?: ?TX?Y?D?BW@?4TJ ? ULYn?VA ?BW@D? J QPDGX`GX`TP4$: 7X`P].4?O?@* S-p`BW@?$?$IX.)NVGX`J ?* ?LYn?NV?X.)?TX: ].Z 7X` VA Z J GX`>V* 0?@?E0?0?I: D@\YnWX`?$?I?P?S-p`?RW@?U?J ?0?NV?>V: O?@@? 4E4: * ?D?BW@ @7X`? >V^VY>VY: ?Q?E?* ?O?@?T?7X`4 ?: ?0?$?NV?EDT\YnY? YBW@?LYn O?@>V?* ?: ?0?@?* TXLYn?* E$?Q>VGX`?J  GX`?O?@?P 4DLYnIU`BY^VS-p`INV@* E* ?>V4D?4?>V 7X` ? 4>V* 0?0?TX?DEO?@D?@?Y?DO?@^V_?@PDE?BW@?EE?@?].?0 ?J ?* ?>V?`?c*?a?`BY?X.)?LYn? 7X` : @4?D?P@T 0VA 4?O?@?* E0?$@WX`: ?[`?TWX`].?* 0? 4RW@P>V?$?>V?@?RW@?NV7X`Q].^V?4?LYnRW@VA LYnac*NV?7X`?BW@* 4>V`BYY?* 47X`?NV?>V?7X`?O?@DTX 4>V?$7X`O?@O?@[`TWX`\YnTTJ ?7X`?$D* ?0?4?E?E? ?* ?NV?NV? : DD?4?Q Q@* ?7X`?^V?_?@? _?@a: ? BW@* BW@VA ?J ?c-p`NV?0?* ?BW@?^ ?`?`BY?a?S-p`?* >V: 0?4?PBW@VA ?@?>VWX`@?RW@? O?@0 BW@@?@?b¶@?b¶@ LYn?: ?47X`E^ ^ 0>VLYn0?GX`?WX`?LYnLYn`BY$?P>VPDY`BYRW@$ PGX`?0DJ ?: 7X`U0?@?T?U0O?@P^VE?O?@? EJ GX`?NV?$WX`O?@IQ 4YGX`?BW@?  ?7X`>V ?4? @E ?GX`?J * LYn* ? * ?: ?U?EQS-p`?GX`?RW@: RW@UO?@?T?].O?@aJ 4?* ?P?T?^V?a?O?@?>V?LYn?BW@: LYn? ?EINV?: GX`^V? ?EE?I@D?@?0?BW@?D?O?@?VA ?D?E?TX?@?: ?4T?I?t?k`ITX`BYh: ?f ?c*0`BY>V?U?@?P?WX`?GX` * : Z WX`?@?>V4? BW@YQ ?Q?U?0? 0Y* ?Y?J ?BW@?LYnBW@?Q?DNV:  QLYnNV^VQ QS-p`$BW@X.)S-p` ?0>VLYn?@? ? ?NV?\Yn?GX`D0?>V?U?Z QI0?0* ^ ^ @?4?P?T?S-p`?`BY?].?0?: ?U?7X`TS-p`?O?@?^ : ^VGX`TXbW@E?0 ?7X`NV?: ?\Yn?O?@?NV?TX$RW@7X`? ?D?* NV?7X`?WX`4?f@?*?~ ?4Y^ViRW@?].?X.): VA  ?TX?0E?I?a?VA ?* TX_?@4?* BW@LYnQRW@I* ?NV?U?E?O?@?ES-p`Q?E?RW@?X.)?]._?@UEGX`* J J EYUJ VA RW@DPQ7X`?>V?J BW@Z @4O?@0?@?T?dX?^VITX?4?P?BW@?@?BW@7X`QJ Q].`BYYD?$?4?4 7X`?E?LYn* ?BW@* RW@GX`?S-p`?`0bW@X.)RW@S-p`$?0?0?0Q[`?7X`?WX`?E?RW@?RW@J WX`0?* S-p`c* ?^ >V?J ?{W`?xc? I?@* 7X` : 7X`7X` ?: PeYDTX?LYnD[`@?4 RW@\YnQ00?4?GX`?4?LYn?RW@EZ ?VA ?U?>V].b¶@Q4$$@$ VA Z I: 4IRW@? ?LYn?E?EGX``O?@IZ : ?E?7X`?P?RW@BW@S-p`?BW@?^V?GX`LYnRW@TZ Y^ aRW@?@?>V>VNVIQD?7X`?@?$00?4?* $7X`].dXNV?4?D?LYn?D?D?: Yb¶@7X`?44? ?4: ?I?$DS-p`WX`?@?aB U?VA ?`07X`?O?@?RW@?* QRW@4J  QinWdXO?@TXU?0QTX?NV?O?@: ^ RW@? @QO?@TGX`?4? : ?@?\Yn?Q: ?0I* 7X`44?0?>VNVWX`: $IQ?$?I? ?* @[`LYnEVA ? ?WX`?44: O?@? ?Z ?LYnLYnPNVWX`UTXGX`?BW@?I?BW@?NV?J ?h?{`?vM ?WX`?>V?TX?EBW@?* ?_?@?O?@Ub¶@f@bW@?P?LYn?NV?BW@?@?GX`DX.) ?>VBW@NV>V?$?BW@ Y^VGX`?7X`?NV?P WX`@?U?VA 0P ?$O?@LYn TXY?7X`? c*a ? 4 EYO?@?>V?J $[`NV?>V7X`YZ ^ aB Z E* ?* ?O?@?P?4?P?4 NVQ* ?GX`?WX`?47X`$PRW@>VNVNV4* ? 0S-p`E: Q0?NV?: 04YX.)?4?J ?7X`?LYn?4IBW@GX`I? BW@P?I?k@@? ???tX?>V?D4?E?bW@?S-p`* ?* E?T?O?@?>V?@0?* ?GX`4UI?* TX_?@\Yn>V?LYn?* Y`BY^ S-p`?TX?d ^V* ?J 7X`GX`@VA J ?S-p`?7X`b¶@`BY?7X`?BW@DO?@O?@LYn*  :  @Z O?@?4 NVD$J ^V^ TXO?@: ?>V?D?* ? 7X`^ \Yn? ?D?NV?X.)?I?@?7X`Y].? 4^VWX`D7X`: >V?$GX`YTXD ?$7X`ac*E?>V?\Yn?DI? 7X`YES-p`a$?jC?#X@?(d`??v E?P?7X`?7X`?D?RW@?q ?pp?S-p`>VUD?`BY?].BW@0?E$BW@ >VQE ?BW@? @BW@deCaaB NV?>V7X`J ?O?@?[`?$D4? ?LYn?T0\YnGX`?J ac*S-p`0?$? $?* S-p`S-p`$$J D?E?TXVA UQNV: $: 4X.)[`?4?O?@?0 E? ?PBW@U?GX`?ITXYLYnJ ?Q?WX`?RW@? VA ^VP:  0X.)YEUP?O?@? O?@?J ?BW@GX`?J ?RW@* ?D?a?w#X@?M ?}|?i?* ?TX?a?LYn>VRW@Z ?0?qM+?rW@?TBW@WX`Q?S-p`?RW@QNV@GX`@J PI7X`?0?RW@?X.)?4QPLYnTD Ub¶@YGX`0?: ?GX`?0 ? ?O?@?TXS-p`@?NV?T4b¶@b¶@LYn4$? ?7X`?Q?U?$BW@? ?* IX.)7X`?T?J ELYnBW@O?@TLYnEBW@?@7X`RW@?* ?E>VU^ P?I?7X`@?O?@?Y>V  ?NV?b¶@?`?P?>V $D ?ID>V].Y?GX`T?7X`?0GX`?VA ?fA ?a?h.)?gX`?Y?bW@?h?c-p`?\Yn?_?@?`BY?BW@IGX`QNV?P?U  I$7X`X.)S-p`E7X`?E?@J S-p`PJ 07X`RW@RW@GX`EGX`>V?7X`?O?@$^VY$7X`X.)T?D?@?D?0S-p`\YnBW@?7X`?* >VO?@4?@? $?$ ?: ?].?WX`?0?: ?BW@$E ?O?@?J 7X`GX`: GX`O?@D@BW@?0D?$ENVT\YnO?@>VBW@?BW@?T?$?$?P?I?J ?WX`?P? 4 ?7X` 4?`?pBY?^VBW@@BW@ ?TX? YNVYgoU?>V?RW@?c-p`?bW@?@?7X`?_?@?dm?Q 4>V?J ?Q $0D?7X`?S-p`?RW@?O?@RW@NVE?* ?^ ?WX`4BW@7X`EP`d@?Q?4@: BW@LYnQX.)E?GX`^ ^ $?S-p`?S-p`?7X` : J NVQRW@NVBW@?: ?O?@? ? ?DBW@I?TX?Z ?$$* 0?@?X.)?].?Y?E ?4?BW@?00>VD@ 7X`PDBW@^ dX`P?: ?@GX`4?O?@?>V>V0?4?$LYnTX>V?$?^V?y8?`?k`I>V?LYn?T?IJ Z S-p`aB p k`^ QLYnS-p`O?@?@?^V?RW@O?@aYS-p`J ?: ?O?@?D?I?>V: >V?BW@?c-p`?inW?RW@GX`4?: ?J ?VA ?LYn? ?>V?I T_?@O?@?S-p`?WX`BW@S-p`4NV`^VRW@ ?E? NVTXGX`?BW@?Q?0?: ?VA ?P$ELYnX.)].J >VTX@?O?@ E?O?@?O?@0$$>V?7X`?P?S-p`?[`?Z ?BW@?$?O?@?Y?GX`7X`* PVA I0DTQGX`S-p`_?@aNV?LYn?@RW@E?D? NVE?E?S-p`@U?E?gX`?tX?2|?e@?gX`O?@D?J ?NVBW@`BYWX`: S-p`dmbW@LYn* WX`dXWX`?BW@?NV7X`X.)TXJ RW@TXTWX`I?: ?0O?@_?@U?RW@?dm?@S-p`?VA ?P$LYnD?$?BW@ S-p`VA * ?RW@?S-p` J >VETXNV$? * >V* BW@YQ0BW@?* ?].?VA ?: ?7X`0].`GX`>VX.)GX`?P?I?BW@?TX?>V$?O?@?X.)?NV?>V7X`GX`?: ?T?7X`7X`?4?Q?>VT4LYnYS-p`E7X`* 7X`0?: ?* QI?I? VA : ?LYn?BW@ : ?>V?O?@EBW@?i?vA ?v@?w`?pp?GX`PRW@D?$7X`T>V?00PLYn?: ?X.)?I?J ?Y?NV44?GX`?E0>VLYn_?@[`J O?@TXX.)VA  ?: P].: ?P?EO?@`[`LYn4: O?@PLYn?BW@?r`?|$?l(: TXGX`$>VRW@NV?* ?$S-p`X.)PQ ?RW@?@? ?D0VA : ?U?U?7X`?BW@?RW@?I?LYn?RW@0?GX`?T?Y?X.)$U@?0 E?J ?$S-p`47X`S-p`UNV$?I?J ?D?WX`?TDO?@QaB E?BW@?4 I7X`?$S-p`D?i?qM+?b¶@?X.)?GX`* 7X`S-p`X.)?$?O?@?D?O?@?RW@?D0TXO?@?0?T?a?go?dm?WX`?0 ?J ?LYn?4?D BW@LYnO?@?D?0? 7X`UUE?0BW@YVA : @GX`: S-p`?@?M+?`?`Z 0?* : Y^ O?@?4?E$$@? ?LYn?@?>V?J >V?D?VA ?J ?I?WX`?LYn@GX`DO?@J QX.)?U?0J D4>VBW@?: ?X.)?* NVI4IPI>V? ?4?0?I?>VNVJ ? O?@_?@LYn@S-p`S-p`Q0?BW@ITX?GX`?LYn: ?$?J ?BW@?>V 4?: ?@?>V?O?@?T?T?0\Ync*S-p`?: ?bW@?h.)?`BY?O?@ Q>VD@?7X`?BW@? @$?TX?WX`?4* >V* : GX`4* GX`7X`?J ?NVES-p`* O?@: ?y8??v@7X`NV?@?TX?: YaQ4 ?$?>V?44* ?E?NV?I?GX`?7X` IYE?J ?* Z b¶@`BYU: TXdXTX? : D$4DI?$?WX`?EELYn  4$@PLYn: $: P: ?I?: 7X`0NV_?@X.)D?7X`?S-p` X.)@?4?: ?VA ?\Yn?E?$?P?\Yn?BW@TQ*  ?E?GX`QX.)? ?WX`?b¶@?bW@?I4Q[`Q@QQ7X` @P0?Q?4URW@ ?>V?@: X.)TD>V ?LYn?NVBW@T4DO?@?TX?dm?: I7X`? ?U?Y I7X`EJ 7X`07X`@7X`?7X`?BW@* BW@4BW@RW@WX`YLYn?0UX.)I? ?LYnWX`RW@IS-p`: ?7X`BW@QO?@?U?NV?* ?0?$ ?  GX`7X`?* $INV@?7X`?I?7X`?* GX`@ ?* ?D S-p`?0?e?e?[`?U? P?: ?aB ?BW@U>V$Q?0?Y?4?[`?dX?a?U QUQELYnJ ?4?P?4GX`RW@: ?: : ^VY* ?D?4O?@[`O?@$? ?>V?GX`?4$4* ?$? QTX? 4Y>V?D?>V?P?RW@0BW@7X`I ?BW@?J ?* NVVA QWX`Z BW@?  ?* ?4: * ?GX`?O?@?LYn?4IRW@PJ  $PPIS-p`T?TX?b¶@?GX`: : @* ?$?$?P?Y?* NVIJ D ?J ?NV?: 4 I?NV?no?f ?* ?BW@?: YTX?@4?GX` X.)?].?S-p`?E?VA ?[`?S-p`?>V 7X`7X`? ? QLYn?Y?eC?P4 ?BW@?J ?7X`>VRW@NV4DWX`J ?I?P? ?D?I?E?0GX`J ?BW@?DNVBW@?NV ^V^V\YnRW@?LYn?RW@ED?J ?7X`I?TX?T?7X` $BW@VA YBW@ E* ?>V7X`O?@@BW@>V? 0J 4?: ?0QaVA ?* D?4?S-p`7X`UD: * ?* ?* ?RW@?_?@?@E* @P0 ?LYn?Q?$07X`? ?$I? ?b¶@?QO?@?4?NVS-p`[`ED@BW@RW@@?  ?7X`?T?J ?@?I?>V?>V?J ?BW@?I?P0O?@?I?^ ?@: ?@?Z ?Y?T?LYn7X`YVA RW@T?^V?RW@QRW@?E?LYn>VS-p`Y>V LYn* ?NV?7X`>VRW@f gX`QLYnbW@Y?D?>VTLYn?I?E ?@?Q?7X`>VIEJ VA LYn? BW@^V_?@Z E?GX`?I?>V?RW@?D* GX`GX`?P?GX`$: IBW@?0?* ?* ?4>V ?S-p`?BW@* ?BW@?* GX`?D?0?4 E@* ? S-p`NV?J ?GX`$?: ?0BW@* 0E[`?S-p`?|ˀ?uxoPRW@?Y?>V>V?LYn?P?J ?S-p`?4 ?Q?NVBW@BW@?: ?0@ ?O?@?S-p`?NV?NV? PP7X`$?4?VA ?LYnWX`^V?7X`?RW@ 7X`>VO?@GX`7X`7X`?BW@?T?>V? LYn_?@ab¶@dXX.)?$? UO?@?E?$T7X`?J ?BW@?$ $BW@S-p`>V ID?@?O?@?D? ? ?Q?WX`7X`^VGX`?@* 4 ?$?>V?4?@?7X`PQ?7X`?4? ?WX`?X.)? ? ?D?0 DGX` ?* DZ VA ?>V?Y?WX`?BW@>V ?LYn?$? ? : ?|? ?9?`BYQ?VA 4WX`?J ?VA ?I?O?@0WX`$?J 4S-p`?O?@ S-p`BW@?* ?   0 ?GX`?Q?D?J ?X.)?>VGX`?$?RW@?>V?0?7X` 4* ?T?[`$WX`? ?Y?: Z `NV?$?BW@?7X`?D?Y?* \YnRW@?7X`?D?$DGX`?@?BW@J @?D?: ?BW@?VA ?LYn* @0>VVA T?I?Z @f@bW@D@?7X`? DBW@?$?O?@?@IBW@?BW@?: ?7X`?^V?b¶@?NV* @>V* 0 ?E?LYn?0EZ U?$?Q?O?@?0* ?7X`?0TLYn$ ?`??M+?qM+? ?Y? @?X.)?[`?E?D* VA J ? 4LYn?$?U?$YRW@? O?@LYn ?@?RW@?X.)?I?$?TX?[`?4 ?>V>V$$DWX`[`?S-p`Qh>V?c-p`?QVA T?BW@?VA ?P?NV?Y?_?@?Y? Q>V?P?WX`?7X`X.)bW@BW@?BW@? ?GX`?[`?D? ?LYn?$TJ ?* VA Y* ?GX`?40BW@GX`I?O?@?0RW@O?@?7X`?T?BW@ ?@?RW@?I?D?TX?U?4J UI$7X`: ?0?I?E? EGX`0@PD? ?$J `BYZ NV?uxo???[`?4?^ ?a?_?@?a?U?40GX`BW@?$?D?7X`?$?LYn?UWX`LYn?4?0GX`J ?7X`?U?RW@?GX`J 4?D?$$?* D\YnP EbW@h.)Q?J Ic*? ?aB ?0VA * ?RW@?P?>V?I?Y?TX? : * ?D?^ ?a?EVA dXZ  ?D?\Yn?dm?S-p`?4?J ?0NVD0O?@S-p`J 0?NV?^V?IE@?T?BW@>VI7X`? ?$?* ?D?BW@?4?7X`? @J I$?D?* UZ @?7X`?I?T?Q?: DX.)RW@4ITXLYnO?@>V?jC?|?wX`?LYnVA BW@?S-p`?f ?bW@?E?7X`?: LYn_?@NV?GX`?T?GX`?GX`?Y?Y* YQ$?  ?NV?`?T* DLYnE * ?BW@$].T?$ TX[`0?TX?7X`@?WX`?bW@ NV?E?O?@>V ?44O?@@ ?: ?].?[`PTXRW@: ?* ?NV?\Yn?VA ?J ?P?D$: EGX`BW@IWX`\YnGX`?: : RW@?>V?>V >VU_?@RW@ ? 440J TLYn?WX`?a?4a^V? ?D?BW@?Z ?a?LYn?0?DGX`IS-p`P?$@@?u?@?y WX`LYn?$?[`?GX`Q?* ?].?* ^ \Yn0?47X`7X`?LYn?NVIZ LYn0 ? ?* ?P?BW@: 0? ?44I?>V?BW@TVA * $0?7X`?NV?E?4?U?VA @GX`?GX`?BW@>V>V 0LYn@?$DI?P?IRW@I? 4: * 0? E@ ? ? 0?E?4NV`\Yn@BW@: ?]. BW@IZ ].7X`?BW@? * ?$?* @S-p`NV>V ?LYn?RW@LYneCP?TX?LYn: ?* ?Q?  ?TX?O?@EE$* ? J ^ ?_?@?xc?k`$* ? ?GX`?^ ?GX`I?D?`?T0TPETVA BW@BW@TXE?J ?O?@? 40: >V4? ?DBW@ * GX`?0?GX`GX`S-p`7X`4 ?7X` * ?4?0 @WX`RW@? ?7X`? ?BW@?P?4>V?4?NVIVA ?: ?$T?EGX`NV$$7X`P].WX`GX`* ?$ ? ?O?@?TX?>VBW@* ?VA ?S-p`?$?U?E?@0S-p`0?X.)?X.)?0?$?RW@?Q7X`TE4GX`DGX``dXI?P?0Y^VGX`* ?4?VA ?DRW@7X`?O?@?* >VJ `BY[`: I: ?RW@?WX`?Z ?c*?X.)? 44?: ?Q? IIJ LYnPX.)J ?RW@?dm?].0LYn?D?T?  ?O?@?Q@Y@?I?LYn?LYn?D40?: ? $ ENV? ?: BW@WX`X.)LYn ?7X`?D?P?TX?7X`GX` ?LYn$NV?  D?GX`?>V[`Y4  ?: * PBW@DTD?@?I? ?D?c-p`?S-p`].WX`?@?`?S/?4$*`?>?^?T$?Tڰ@?^B@?f?s^?s?``?O`?`D-@?f?im?c/?G[T?*`?U<`?VȀ `?0`VȀ`D-@E<`Z`iq3 ]2)J`X0]2)`D-@^B@N0`0`QaE[P`\\Z`J`L\P`Ymc/]2)QX0P` `E<`[O`?4$:`_`T$?`0`N`D-@J`?T$?S/P`4$?VȀ `g[TX0?0`T$^B@S/Z`U<`G[TbZ c/?E<`?_`$$U<`4$?$$0`D$E<`*`?*``:`$$ `?7[T?G[T`0`?Im?4$T$a_`7[T?O`?E<`?@`?J`? `ImP`BZ ?@`X0E<`?BZ G[T[J`$$?M ?dڰ@?E<`?X0?VȀ?[?d$?f?^B@?kנ?zF@?ym?lc?g?p@?nr| ?bZ ?BZ ?Z`?h?VȀ?*`?L\$$W[TG[TT$eEv@^B@Q\\dڰ@hfȀ[4$?G[T? `VȀG[T`Y@\\J`U<`VȀN\\``Tڰ@P`S/U<`W[TVȀT$@`:`[^Im@`7[TIm^B@D$?O`*`G[T?D$?Q?T$*`kdڰ@?:`7[TU<`*`N[BZ O`W[T?BZ ?Z`?Im?O`?\\?RZ ?$$D$Q0`?L\?G[T?*`? `?G[T?N?*`?L\?Z`?:`BZ J`[P`?J`?Im?`?4$?*`?4$?*`BZ @`7[TQE<`?$$>RZ G[T`?q?]2)?``?^B@?D$?BZ ?D$?`?P`?a?G[T?VȀ?{K??Z ?t: ?a?dڰ@?Z` `BZ BZ ?O`?dڰ@?J`D$?J`?NE<`ImRZ c/aET$S/VȀW[TT$T$Q$$0`S/`?L\4$E<`0`J`7[T?@`7[TP`:`*`E<`Z`Z`*`J`L\S/W[TO`QNG[TW[T4$?P`E<`N?S/?O`?7[T?7[T^B@bZ ?>?@`BZ ?Im?L\>@`:`*`?Im?Im?@`?Y@?_`?S/?E<`7[TTڰ@0`?E<` `?>`?@`?@`?E<`?L\?*`?>?G[TO`U<`?@`?D$4$?E<`?W[T?Tڰ@`@`?$$ `BZ G[TJ`D$0`?$$?~B@?){?qE?N?Im?P``X0@`?^?VȀ?>?p@?z\@?im?Im?Ym?>U<`X0U<``?VȀY@$$?J`0`O`Tڰ@ac/\\J`?7[T?0`>W[TW[TX0Z`4$?J`?`BZ BZ :`?E<`?Q `$$?*`@`RZ Z`VȀ?D$?RZ E<`U<`P`RZ NT$Y@X0[:`?W[T?:`:`?E<` `Im?G[T?4$N?`?4$*`?Q?Z`?4$G[TO``?J`?0`0`?$$ `$$?7[TBZ [E<`? `>?$$?E<`NT$?E<`?L\*`*`?*`?O`?O`NY@? `?@`?*`?:`?:`?>?BZ ?7[T:`G[T7[T `?`?]@?뻀?[?4$?@`>:`?Y@?do ?G[T?P`?f?\\?RZ ?_`?S/@`S/G[T?@`?`QIm7[TY@dڰ@^T$af\\BZ :`E<`G[TNT$U<`P``?*`Im^B@`D-@L\?E<`?4$Q@` `[aVȀRZ ?*`?Q*`ImBZ S/L\:`U<`ac/P`?U<`?U<`?0` `N? `?BZ BZ T$S/>?BZ ?BZ *`L\VȀJ`$$E<`NImU<`RZ *`ImVȀ@`?D$? ``D-@W[T?P`?D$P`4$?J`?RZ ?Q$$S/> `*`X0do X0*`?0`?BZ ?:`? `?7[T?J`?@`4$0`?~?/?]@?q`7[T?N?^B@?$$?*`?^?E<`?Y@?^?L\?BZ ?L\?Tڰ@?L\>Tڰ@L\? `?:`?@`dڰ@rne<`Imd$p@f\\^\\ND$T$S/ `?>:``D-@h0fȀTڰ@?*`4$^U<`Ima_`$$0`>? `:`D$BZ YmS/?*`:```d$U<`?BZ ?O` `?4$?P`?$$>>Tڰ@c^c^N*`P`T$NTڰ@S/L\T$L\$$7[T4$$$G[TL\BZ >?$$?J`BZ aN?BZ E<`\\7[T?:`?0`?L\?J`$$4$0`$$^B@k^ `?`?7[T?7[T? `?:`?Im?`ImBZ ?`??Z ? ?t: ?4$BZ ?T$?d$`N?D$*`?VȀ?P`T$^B@0`?N?BZ `Q\\G[T?@`?X0?^B@RZ pV``D-@ `dڰ@oH@dڰ@``^P`>RZ feEv@D$VȀeEv@fȀ``L\?$$`Y@^QX0P`?L\?>J`E<`RZ \\S/W[TX00`:`]2)]2)G[T? `*`?>?U<`?Im7[TO`T$X0W[TG[TL\YmP`E<`YmVȀImG[T?N?U<`?[?P`@`P`T$U<`?*`?Tڰ@*`T$$$?$$QT$*`:`S/Im*`? `?4$0``?S/?@`P`>:`?*`?:`ImQ@`@`L\N??/??py`?W[T>?0`?O`ImN `Im0`?S/?$$_`^B@4$7[TN?*`?G[T7[TO`Tڰ@ `?c^?L\]2)?:`?[Q^B@U<`a\\BZ @`VȀhi@Z`W[TbZ bZ `D-@W[T@`?0`?:`N^P`O`N?@`?`U<`G[TL\^B@E<`?4$D$QRZ X0D$?E<`?7[T0`?D$?Y@?G[T@`RZ Tڰ@E<`?0`?7[T$$NS/``]2)aS/E<`?$$?G[T?S/?c/?]2)0`D$:`J`? `?N?$$ `?@`?:`?$$?@`S/ac^P`?:`0`D$?Tڰ@?]2)?>?4$? `7[T?L\?RZ O``D-@Q`$$O`?f?tM ?pV`?jF@?U<`P`*`?J`4$ImQ?>?[?Im:`BZ :`Ym]2)?D$?a?RZ 4$bZ ^?VȀ?QJ`?Tڰ@?a$$4$4$Y@T$G[TIm7[TJ`W[TTڰ@`D-@aP`Tڰ@[N?`?BZ 7[TT$D$L\VȀ `*`[@`?`P`? `?^?@`T$Y@Tڰ@?$$?]2)?J`*`?^B@?k?E<```aYmE<`?*`?E<`?[?^?7[T? `?$$U<``D-@X0S/@`@`Im?4$?:`L\ `?S/?`S/Tڰ@BZ ?E<`?N?*` `?$$7[T\\do P`?U<`?Q7[T?4$7[T?$$?E<`?D$?[?]2)7[TYmBZ ?:`?>$$?RZ ?T$?]2)?]2) `S/?G[T?b?\\?*`RZ @`?T$?W[T?Q?G[T7[TP`T$Q?*`?G[T?0`? `T$X0?D$^BZ T$D$`0`?*`4$E<`?*` `:`$$RZ S/? `@`YmO`*`?*`*`NYm?4$?>Tڰ@G[T `Y@W[T?*``Y@b`D-@ `?Z`?:`N?VȀ?j`?Im]2)W[TBZ D$RZ ?E<`?{t?r?r4?`*`G[TIm0`G[TD$*`E<`@`G[TX0:`?G[T>bZ e<`S/?J`?@`J`RZ W[TZ`O`D$G[TL\?fȀ?p@?_`?4$0`L\?RZ ?L\?O`?O`7[TN?7[T?$$?>?N?E<`?D$?7[T?4$?RZ ?Y@?W[T?*`G[T?:`?N0`?0`?N>>?>`O`X0VȀ$$4$RZ *`>``^Y@a\\J`?$$?E<`7[TImO`c/Ym?J`?G[TBZ G[T*`0``?4$?D$?7[TU<`_`?*`?J`J`QQdo iq3 b[bZ kKg>?Q `U<`?RZ G[T?:`4$^?S/?%?^?`?D$@`L\`?N$$`?]2)?a?U<`?:`*`$$ImY@P`D$>BZ S/BZ G[TU<`RZ Im`? ` `?``?q?g?P`?>*`? `?J`G[TBZ L\0`?Q?Im4$?`?:`?>?4$?D$?`D-@?a?*`E<`? `0`Im?BZ ?@`L\?$$?L\7[T?$$?NJ```_`Y@7[T@`aX00`L\VȀS/Z`c/Z`$$0`QL\``o`^?``?i@?```[E<`?7[T ` `?@`?N?:`Z`d$Im`ImJ`O`VȀY@^[``jF@dڰ@ `?L\?0`?0`?E<`?*`:`?$$*`BZ ]2)?0`?4k?K`?vȀ?D$? `QBZ ?@`Im@`?^B@?d$?Ym?Im?E<`?P`@`[?E<`?aE?7[TS/VȀ0`?W[T?Tڰ@?4$?*`?`?`E<`?U<`?0`G[T0``?0`?E<`:`S/ImE<`?:`?b?_` `BZ ?N?T$?Q?RZ ?a?^B@?`?N4$Y@? `?S/?E<`?P`?D$Im>BZ _`Y@L\T$BZ :`a^B@`BZ Z`O`T$dڰ@Ym?>G[T@`^B@e<`$$?f?sd?tڰ@?Ym_`RZ ?*``4$*`?>?BZ RZ _`N@`*`?$$*`? `?D$`ImU<`aW[T `0`?`?_`?d$?RZ ?BZ ?NO`@`O`Tڰ@?VȀ?c/? ` `?$$Tڰ@J``T$N `?@`?kK?q?^B@?Ym?D$Ym?0`?b?*`\\X0?$$?^B@?U<`? `?$$ `:`? `?$$ `:`[dڰ@``O`?0`?:`D$@`?4$? `?$$?X0?\\?4$J`?Im?S/?S/?4$*`?O`?f?g?*`Y@`?Ym?U<`?L\?7[T4$E<`W[TX0? `VȀE<`?BZ @`L\S/d$NE<`d$Ym?J`?Im?`G[Td$Y@?N?[?oH@?z\@?kQT$:`ImU<`]2)E<`?:`G[TT$$$?`?E<`?O`*`:`?7[TE<`S/VȀE<`P`aEQ?X0?a?T$?S/?Ym?>:`?7[T?@`ImRZ QN@`Y@b>?$$0`G[T?nB@?L?_?<`?aE?NW[TN?J`:`YmRZ >?>U<`T$QW[T0`?T$?RZ ?7[T4$VȀ`D-@S/$$L\\\>?O`?:`J`N`?$$@`4$?:`?S/Y@T$?G[T?b?aE?G[T`?7[T?E<` `0`?BZ ?Im>YmD$?Im?$$Q`?Tڰ@?BZ `?0`J`Z`?*`?BZ `D-@dڰ@Q:` `Tڰ@kנ`D-@?:`$$?L\?l\?Z`W[T[VȀW[T^do T$$$W[TYm `?*`?:`?:`J`U<`>`:`O`G[T?`L\bZ J`?RZ ?P`?0`? `?`0`D$?*`?O`?7[T?E<`?RZ @`kKdڰ@?D$?L\?G[T?P`?Ev@??# ?}?o`?ImD$D$?*`L\O`>S/O`E<`X0S/ImY@L\?P`?Tڰ@?L\?S/?@`7[T[aE<`?:`?$$P```VȀ`? `:`?G[T?^B@?P`>>? `? `?*`?Im?O`?E<`D$$$?N?*`Y@W[T? `?0`:`4$?@`?Im?``?4$7[T?Im?J`W[Te<`c/^E<`G[Tc^`D-@G[TW[TY@L\^fȀc^`D-@VȀTڰ@Ym:`0`^Ym? ` `E<`L\S/L\ `?@`?>4$?RZ ?>*`?S/?bZ ?VȀ? `T$`D-@c/dڰ@Z`4$7[TJ`? `?Q7[Tb0`?c^?VȀ?L\?RZ ?z`?P?zI??py`?RZ ?E<`?E<`?@`L\4$?:`U<`aRZ G[T? `?4$U<`Ym?:`?L\?*`?4$?*`?`?O`?E<`G[TNG[TO`D$Im[YmBZ ?*`?$$?Q?`D-@?Z`?T$?Tڰ@?L\?$$?$$?:`?0`?0`?>?@`?Q?O`Tڰ@aE?J`?g[T?G[TQ>$$@`BZ 7[T*`0`:`0`:`J`E<`J`[Q?*`$$W[T^B@\\[``bZ _`]2)U<`>BZ D$?:`? `U<`G[T?:`O`X0Q?BZ ?BZ ?*`>? `?T$?Im?@`?]2)?a?P`P`^dڰ@kKdڰ@O`VȀfȀaE> ``?Z`?e<`?J`?BZ `?tM ?$?V?fC?c/?Y@?Tڰ@?Tڰ@?J`D$ `?BZ W[Te<`Z`7[T?G[T?:`^B@c/0`?4$G[TTڰ@YmO`?$$?`>BZ VȀ``Tڰ@O`X0Tڰ@L\ `?J`?T$?Y@?\\?``?^?W[T?Z`?W[T?`D$?`?E<`?>?L\?@`VȀBZ ?q?w?^Tڰ@U<`Tڰ@S/*`L\U<`O`ImIm?P`?@`Tڰ@Ym?*`?BZ X0d$N7[T*`@` `?@`4$G[T `@`Tڰ@L\BZ BZ E<`Tڰ@P`?7[T?O`?$$RZ [4$?Im0`E<`?>?4$J`J` `?7[T*`W[TRZ $$L\bZ _`D$?$$?@`?>E<`X0P`? `?c/?x ?{?h?L\?D$?$$?>?7[TE<`D$L\\\T$$$?E<`?`\\aEP`O`[^[QD$U<``D-@`D-@``W[T@`ImBZ ?4$? `?`D-@?aE?_`?]2)?X0?4$?$$?_`?b?D$?G[T? `U<`O`*`E<`?:`?nB@?qE?RZ U<`VȀN4$?G[T?G[TO```P`?$$?@`?O`?S/?$$P`P`*`D$c^bZ ?*`?S/7[T:`D$?`?BZ 4$QVȀ[U<`Tڰ@\\O`$$NU<`? `?S/?0`^bZ ?$$?Tڰ@Im^*`?*`RZ Tڰ@?$$?Tڰ@?S/?BZ ?4$?`>J`:`0`@`ImS/Tڰ@RZ ``g[TT$?Y@?im?h0?W[TG[T_`^U<`Tڰ@X0O`?$$?D$ `BZ $$?G[T?L\?`7[TImX0YmE<`?0`?RZ ?J`NbZ c^Ym?0`?N?7[T?Ym?eEv@?VȀ?0`?eEv@?im?\\?@`:`[N?[?aE?Im?E<`?Q$$^\\E<`@`BZ ?*`?BZ 7[TU<`P`?@`?D$?4$O```N?G[T?Tڰ@?U<`?G[T:`@``L\c/i@a `? `Ymd$_`J`*`L\W[TaE[G[T?0`?J`D$Z`L\?$$`YmTڰ@?Y@?f ``D-@?[?7[TN:`?$$?>?G[T?*`NS/D$*`@`ImImP`J`? `BZ c^b>?O`?]2)?G[T[bZ Ymaf^B@0`?RZ ?W[T?0`D$*`?O`?\\?VȀ?BZ ? `? `?7[T?Tڰ@?do ?aE?D$4$G[T>?@`?@`?BZ ?b?do ?@` `?f?iq3 ?ImQ[aBZ ?S/?:`D$?`?J`?*`NU<`7[T?$$G[TU<`G[T4$P`U<`:``ImL\S/[L\?0`?>?:` `L\ImL\c/h0bZ \\\\\\bZ fȀ\\?>?ImL\Y@\\bZ L\?O`?7[T`?Q?L\ImX0W[TU<`T$O`?`?c^?kנ?U<`O`?`D-@?J`RZ O`@`BZ 7[TQ`D-@Y@J`BZ >D$G[T>?*`?N?D$*`@`NT$7[T?`?`?Tڰ@?VȀNbZ N?E<`?Q?4$@`E<`$$?E<`?Tڰ@?:`D$?T$?J`>:`?@`?BZ ?:`?RZ ?Im>RZ YmD$?O` `\\G[T?p@?m?Q*`D$O`\\Z`?*`?O`?4$T$Z`?O`?i@?Y@D$D$BZ U<`Tڰ@T$U<`QRZ X0L\`7[TD$QT$akKaBZ c^aL\P`Im?L\?J`L\S/Q[QG[T``]2)*`E<`[P`E<`Tڰ@X0:`?N?\\?do ?b?BZ ?*`?Tڰ@?*`U<`>RZ ^a^O`L\N4$D$Z`N?G[T?J`*`?$$?VȀ?@`RZ L\?7[T?]2)?kK?dڰ@`P`? `?E<`L\E<` `>>?$$D$Y@0`?Q^B@aYmZ`N?G[T?BZ P`ado T$[fȀN?r4?qO?dڰ@?``?T$?`?4$:`^E<`?O`?D$@`b_`?jF@?}2)?sd?$$[Q*`U<`W[TBZ 4$S/\\L\?*`?7[T?$$0`Y@g[TY@?@`? `[T$?E<`?J`0`ImTڰ@W[T7[T$$Ymbg[TkK`D-@E<`VȀ[D$?`@`U<`:`?N?BZ ?:`?U<`?Im?$$?Q?D$7[T?BZ ?D$VȀdo ^BZ ?`G[TU<`>BZ ^Tڰ@?E<`?7[TYmT$?@`Tڰ@N7[T?`?P`?BZ G[TG[T?`>O`*`?4$J`RZ `7[TS/0`?BZ 7[TYmW[TO`T$O`$$*`E<`P`Tڰ@4$?4$Ymc^Q?iq3 ?oH@?l\?jF@?_`?G[T?O`?7[T@`?0`?$$L\O`Z`T$?nB@?y`?x?O`aZ`?D$?E<`P`N?$$:`[[D$?`?*`?7[T?@`?>?0`BZ ]2)^NImTڰ@N?G[T?Z`?4$am2)eEv@BZ @```fȀbT$? `4$ `? `*`P`aRZ ?L\?0`O`7[T``?P`?Q?*`?BZ ?>Q\\N?4$?NS/J`$$@`D$?`0`[Y@N^aL\NVȀD$4$G[T>` `@`T$J`0`ImBZ ?*`>YmQ`@`D$?4$ `BZ 7[T?BZ ?L\?0`?BZ ?BZ RZ Z`BZ ?Z`?kנ?py`?nr| ?a?P`?Tڰ@?BZ 4$ `NX0?$$?7[TL\?L\?p@?p`?\\>:`?E<`G[T?>?@`VȀ_`E<`:`P`NImQP`:`7[TO`X0Y@X0T$:`?G[T?:`^B@m2)do G[TL\^B@X0$$?>:`YmD$?RZ ?ImJ`ag[TS/?Tڰ@?J`G[T$$?BZ ?:`?:`ImD$`7[TO`T$7[T?J`?J`@`Tڰ@>?:`?*`4$ImRZ G[TIm]2)Q?Im?D$?`?Im?J`?4$?:`?4$*`N^B@`D-@T$Im7[T `Im[Y@BZ ?$$4$Q>?>?0`@`?[?^?D$?0`?`G[T4$?G[T?\\?i@?pV`?pV`?dڰ@?Tڰ@?P`Im$$0`4$?U<`?YmL\_`:`?Ym?_`?U<`?RZ ?:`Q`?`D-@?7[TbYm?*`?@`?0`0`RZ ^b\\*`?:`*`T$^B@YmG[TG[TRZ S/Y@_`Im?@`L\$$?L\eEv@oH@]2)?N?O`NeEv@c/?`?_`?L\?$$?Z`?c/?O`BZ T$U<`S/BZ *`S/bW[T?4$?O`?*`NQ4$ `:`BZ @` `$$>?J`?c/?_`?X0?Y@?Im?>?Q?BZ BZ P`VȀW[TO`J`L\BZ ?` `?$$0`L\O`D$7[TG[T`?Y@?Ym*`G[T7[T?G[T?J`?U<`?Y@?e<`?i@?a?VȀ?VȀ?7[TBZ ?4$?G[T?U<`?$$Tڰ@G[T?X0?do ?`D-@?Y@?4$S/?4$?Y@U<`jF@Q?*`?D$?fȀ?k?L\Tڰ@VȀ7[T?`Im]2)``aEU<`?BZ ?7[T`D-@fW[TE<`?*`?T$?7[TRZ BZ ?D$Z``D-@D$?N?NQh]2)?VȀ?^B@?`?G[T?g?d$*`[Im?7[T>*`Q_`L\?$$?0`?BZ ?@`>S/Tڰ@P`:`?$$?:`$$?N?W[T?D$?4$? `J`$$?T$?@`@``?0`?0`?@`?7[T:`BZ ?$$?N?N?4$0`?@`BZ [RZ O`L\?D$?ImO`VȀ:`?4$?BZ >4$$$?G[T?RZ ?RZ ?_`?d$?S/$$7[T>J`4$?Im?Im:``?c/?jF@?W[T?>?`:`?4$?`fȀjF@J`D$?`?pV`?uEv@?U<`RZ *`?J`? `^eEv@]2)X0J`?Tڰ@?U<`[eEv@G[T `0`Ndڰ@`D-@`?Im?Q?W[T?W[T?Ym?VȀImk`D-@?U<`?P`Im?RZ ?m2)?_`T$\\?BZ ?bZ ?P`?D$?:`4$?4$?4$J`4$?N?BZ @`VȀYmD$?J`?P`$$L\7[TE<`[Y@X0^B@@`?T$?J`?7[T?P`?J`?7[T?T$?]2)?D$@`G[T@`$$>RZ ?`?[^D$$$N?7[TNP`7[T `?`BZ Y@>D$?7[T?f?g?T$?4$E<`BZ ?$$?:`4$]2)X0?W[T?f?>L\ `?0`?:`?*`QT$@`Z`T$?bZ ?fBZ Z`?E<`?`4$*`?`7[TD$?N?T$T$a4$NQY@c^^B@D$?4$?Q?T$?E<`?O`?[? `e<`^B@?E<`? `Tڰ@?Q?nr| ?do 4$?T$?^B@?@`?`?Z`?Z`?7[T?BZ ?@`P`Z`E<`?:`?L\?*`Im0`?Q?Q>X0Tڰ@Z`b^W[T[Im?Im?P`?P`?P`4$S/?4$?U<`?4$?`?N?E<`:`Im?BZ ?a?7[TO`?Im?T$`D$:`E<`N?*`?Im[?` `Ym?eEv@?``?L\?]2)?]2)?4$?>?T$?4$P`]2)^ `?W[T?0`E<`?0`?>?$$?O`?X0?L\`W[TY@? `? `[Ym7[T:`?RZ ?O` `S/Ym `?Q4$YmND$O`ImBZ BZ @`J`ND$O`VȀ@`?BZ `Z`U<`?4$?*`G[T?>?a?_`?P`?Im?L\?>0`?4$?`D-@?Z`? `?*`?J`RZ T$$$?RZ ?N ` `?:`?*`:`P`RZ O`L\7[T`ImP` `?E<`?E<`? `VȀ]2)`?$$L\?W[T?u@?r$?Ym?:`?>?T$?Y@G[T?L\?S/?*`:`BZ *`RZ Tڰ@?J`?VȀE<`?BZ `X0?Z`?@`?@`?iq3 ?kK?N?D$?Tڰ@?*`0`?:``D$?4$?D$?0`?BZ ? `J` `?J`?@`?>?D$?`0`Im[[U<`T$0`?7[TL\`D-@c/f[?D$?O`:`Tڰ@Tڰ@D$?$$?:`?:` `RZ YmW[TX0RZ E<`QX0VȀO`?`?RZ ?P`?>? `*`? `?@`?*`*`?P`?]2)?O` `?0`?7[T?BZ ?*`*`$$7[TQRZ ` `J`:`?4$?>?D$O`BZ ?$$?$$`O`P`?BZ ?4$Tڰ@?X0?w?q?7[T?J`?O`?:`RZ Y@>`$$ `E<`E<`4$RZ @`?X0?Q?`?:`7[T?J`?RZ @`0`?f?m2)?W[T?7[T?G[T?`?`?Tڰ@?ImBZ 0`?4$ ``Q[]2)T$?L\?eEv@?X0@`Y@`D-@``Ym@`?D$ `[VȀQfim>?N$$W[TS/?7[T?U<`?J`? `D$U<`YmYmIm?P`?RZ T$aIm7[T0`?O`?]2)?RZ `J`4$? `>D$?0`?N?>>ImE<`J`0`?P`?E<`L\RZ *`?@` ``D-@aE`?:`L\N>Im@`:`QO`4$?$$?L\?4$7[T?L\?L\RZ `?aE?4$^E<`?4$?$$`T$^O`7[T?$$BZ NJ`P`?`?Tڰ@?$$:`4$*`?D$?[?U<`>RZ ?RZ ?lc?dڰ@?4$`?$$?*`?@`?> `BZ 0`?@`? `W[Tdo ^B@?@`?a?ImTڰ@\\J`?*`?G[T?T$?`J`?4$?>[a4$*`^do P`?VȀ?`D-@?@`BZ E<`@`E<`S/4$?c/?e<`:`X0?0`?E<`@`G[T?*`?J`?@`?0`?D$W[TW[T:`@`S/VȀYmY@Q$$?:`7[T[U<` `?D$?4$P`\\4$?:`G[TX0\\a]2)T$U<`S/L\$$?S/?O`$$?@`?BZ T$N?:`@`P``@`BZ ?:`0`O`? `?L\?N?G[T*`QX0W[T:``P`G[T7[T$$?@`?N?L\?$$O`?0`?kנ?kK `S/?4$?N?*`*`0` `?:`?RZ ?J`*`RZ T$:`?*`0`Q7[T?^B@?i@?]2)? `@`QO`? `BZ ?E<`?VȀBZ g[Tiq3 S/?RZ ?P`L\S/?`?P`?Im:`@`?T$?[BZ [?RZ `Z`U<` `?$$?$$?BZ @`c/_`RZ Tڰ@?Im?kK?VȀU<`N4$J`J`D$S/\\BZ ?D$*`E<`? ``T$Z`Y@X0VȀS/G[TL\RZ 0`?0`?0`?G[T$$^B@L\?S/?S/?BZ >aU<`?@` `D$?G[T?VȀ?Q?J`? `J`T$RZ :`4$G[T?J`?Im?0`*`QBZ ?D$? `?dڰ@?im?`Tڰ@?0`?RZ $$\\`D-@O` `? `?$$?*`?`?4$?0`D$T$NImRZ 4$?b?lc?W[TRZ a`D-@N?``? `?U<`?T$D$N>?BZ $$_`VȀ?G[T?\\?Tڰ@`Tڰ@O`7[TVȀdڰ@Tڰ@?O`?O`E<`D$?@`$$T$ImS/bZ Z`U<`7[T?{t?Q??0`]2)VȀZ`G[T?D$?BZ RZ eEv@T$?J`>``>?D$7[TIm4$E<`QE<`$$>X0[D$?Im?O`Ndڰ@U<`?Im?T$?*`\\fȀT$L\L\?0`?0` `7[TE<`0`?7[T?RZ ?VȀ?T$?^B@?O`?7[T@`aYm?D$?@`D$?:`?``?W[T? `?BZ D$eEv@d$@`? `L\Tڰ@S/G[T?4$?E<`D$[U<`U<`bZ ^?@`?^B@?L\>QT$ `?S/?L\NVȀ?7[T?e<`?a?L\?O`?4$RZ N?4$?BZ ?`4$O`RZ BZ P`c^Y@?Q?X0?BZ ?``?J`Tڰ@U<`NT$RZ Y@ `?/?gd?!?X0bZ bZ bZ S/?$$?W[T?b?S/0`O`e<`iq3 `?]2)?BZ ?0`?`*`:`J`W[T@`?N?:`VȀ_`RZ ? `?J`?$$Tڰ@S/?`4$VȀIm*`O`RZ G[TS/T$ `?O`?Y@?Z`?X0?Im?*`?D$?4$O`L\?:`?$$[_`?*`?\\?J`?$$?Im[E<`?W[T?J`RZ W[TQIm? `?7[TL\\\T$P`YmO`?N?[?Im>T$P` `?*`BZ bZ d$?BZ ?i@?aE?J`?RZ ?S/?0`7[TL\Y@[@`?E<`?N?Im$$Z`RZ ?E<`?:`>?J`?fȀ?c/?0`BZ ``L\[N?t$?5?}k`?NRZ G[TJ`QP`?U<`?u@?r4?0`do h0W[T?W[T?`D-@?:`?`?@`?E<`?U<`?L\@`7[T? `>?Im0`P` `?7[T?D$?W[T?N7[T?7[T?S/0`Tڰ@4$`P`P`E<`QT$:`?0`?0``$$ `?J`?Z`?W[T?E<`?0`?*` `U<`c^T$?7[T?0`?BZ ?W[TYm?Y@?>>BZ *` `G[TRZ >?E<`?X0?_`?dڰ@?``VȀVȀ[do d$S/0`NQ?4$?J` `7[T?:`?E<` `X0do fU<`?Im?VȀ?E<`BZ YmO`>P`BZ ?O`?``?dڰ@?[?*`?4$?7[TL\U<`N `?Tڰ@?N>:`?*`?4$ `E<`?J`?nr| ?jF@ `Tڰ@$$?S/?Y@U<`:`?0`?*`?:`0`P`?`?Im*``?BZ *`0`?J`?G[T?@`?QTڰ@?*`?U<`0`Tڰ@*`?:`$$J`Im4$*`*` `*`BZ >?BZ ?]2)?X0?D$?E<`?@`$$?*`?:`E<`P`G[T@`?J`?VȀN``*`?*`L\7[T?BZ ?`*` `:`>`?`?RZ ?c^?bZ ?\\?QImaTڰ@>W[T`D-@@`?G[TD$>J`O`E<`S/P`?0`L\Q^aES/E<`Tڰ@]2)VȀ0`7[TO`?*`?L\?Im?Tڰ@?$$?:`VȀYm>Z`Y@U<`QJ`4$?:`?@`?4$?@`?@`?7[T?G[T?S/?P`*`^]2)*`? `L\\\bYm?7[T?J`$$ `?>?$$?*`?`ImBZ [dڰ@*`?RZ >Y@D$?Im?:`S/Tڰ@?0`?G[T?`?$$?*`?$$?O`?Q>VȀ:`$$L\?T$?D$$$ImL\?BZ ?P`@`*`?U<`?7[TP`0`?$$`?@`?:`L\:`?BZ 4$J`? `:``BZ S/4$?>*`@`?BZ ?L\@`T$BZ 7[T0`:`Z`Ym`7[T>?Im?*`W[T]2)ag[Td$D$?VȀ?U<`?4$?E<`?`\\Tڰ@BZ X04$?L\T$^?@`?NIm\\]2)X0S/N$$?*`@`O`?E<` `E<`E<`T$Tڰ@?E<`ImTڰ@X0Im? `? `?D$?E<`?@`?BZ 7[TY@BZ ?*`Z`c^0`?@`J`Z`L\?BZ ?D$Im:`?RZ ?N`:`7[T0`?>P`VȀD$G[TX0G[T?7[T?7[T?$$:`L\? `?G[T?G[T?^B@?c/?BZ 4$?BZ ?E<`?:`?RZ ?E<`Im `?QG[TeEv@^B@O`O`G[TBZ 7[T*`BZ P`BZ ?*`?*`BZ BZ ?0`? `BZ NW[TP`*`J`Im?J`?G[T>G[T\\imbZ ?$$?aE?bZ ?Q?E<`? `O`L\Tڰ@a?`D-@? `T$?E<`?U<`D$``\\J`:`J`QRZ VȀE<`?>@`a*`?_`?*`E<`?Im?0`P`4$?D$?G[T?@`4$L\?O`?Im?E<`?L\L\?0`?P`BZ P`?0`?$$G[TIm7[T?:`?L\?E<`?W[T?_`?BZ 4$>O`D$7[T$$`?`?$$?`@`Tڰ@RZ G[T*`?4$ `@`0`*`?`?Q?J`4$`?P`?U<`?D$?0`?>?@`?P`?W[T `aaO`D$QO`W[TY@:`? ` `$$?`?4$G[TZ`O`0``?0`? `*``L\T$@`U<`eEv@RZ ?RZ ?W[T?L\?L\?RZ ?O`?L\?O`E<`?Q?dڰ@?D$O`?0`?J`ImVȀ0`?0`4$P`VȀW[TP`?*`?@`^B@Ym?xfC??py`Im?*`*`[G[T?0`?*`? `@`L\0`?7[T?BZ ?@`?@`?:`?0`?L\?RZ ?>?Q?a?L\@`0`?4$?L\?O`?W[T?P`D$Im4$$$?:`E<`BZ $$? `?*`BZ S/VȀ@`@`>*`QTڰ@4$?$$?7[T?:`E<`Y@?`?^?T$?Im?G[TBZ ^B@X0@`BZ D$?D$?BZ VȀY@?0`?Im$$E<`>7[TTڰ@Z`?Q?E<`?O`?Y@?O`7[T^B@aQT$^?0`?a?@`G[T?N?_`?G[T?$$?J`?L\?BZ ?U<`?Z`0`^B@L\Im*`?X0?S/4$L\Im:`?`?G[T?*`aE?P?D-@?}g$$?:`?:`L\E<`G[TP`G[T>*`0`0`?0`?*`?Im?W[T?Tڰ@?J`?BZ ?a?k?QU<`U<`P`D$*`*`0`Y@^BZ ?*`?>?>4$ImVȀRZ `?4$0`Tڰ@Y@E<`NaRZ ?*`ImW[T:`?>?Im?*`@`D$YmaE? `?Y@4$L\?D$?*`YmW[T? `?BZ ?$$?:`?`^B@bZ `?L\7[TS/>?*`:`S/`?J`?E<`?Tڰ@?]2)?E<`>S/X0O`RZ Ym?>?c/?D$>?Z`?``@`[>?4$?`?Im`Z`Q4$Q@`?P`?J`?$$?`?:`?E<`?0`7[TaEL\?~B@?m?vȀ>0`4$P`O`G[T?$$?E<`?$$?0`?`7[T$$4$4$?P`?Ym?G[T0`N?7[T?]2)`a[W[TU<`E<`Im7[T?:`J`c^]2)0`?7[T `?7[T?$$J`D$?@`?@`0`NO`0`L\c^P`?RZ ?0`QO`J`ImD$>$$E<`O`?:`?>Z`\\`$$J`4$?@`?Im? `>E<`]2)bE<`?>7[TBZ ?L\?Y@?$$Z``D-@RZ ? `?T$?ND$L\$$0`ImW[T_`7[T?\\?Ym?RZ ?_`?RZ J`L\?$$?:`*` `?VȀ?W[T ``?`QTڰ@D$BZ ?*`?G[T?`?E<`?G[TD$J`U<`_`?X0?oH@?7[T``W[TYm_`aYm?Q?c^?Q?>?7[T>L\O`4$?E<`QU<`_`U<`$$L\Im?L\?E<`*`?@`?S/?`VȀY@N:`@``?:`?4$?G[T?U<`?E<`?`?$$ `?$$?0`7[T?BZ ?a?P`G[TP`Y@_`J`?4$?4$4$0`?:`NE<`>P`:`?0``4$4$G[T>@`P`0`?4$E<`D$?Im?E<`J`ah0d$:`?P`?4$O`G[T?>?@`Imaa@`?P`?Z`?``?VȀ$$`?T$?U<`?O`?Q?U<`?]2)?T$`?`?7[T@`D$ImVȀ`?G[T?`?E<`?>X0QImE<`L\bZ S/?:``BZ VȀc^E<`?W[T?T$?BZ `J`P`Im?`?4$Tڰ@\\D$BZ BZ 4$G[T?Im?iq3 ?do ?P`?N?D$?`7[T@`?4$?*`Tڰ@\\T$S/E<`? `?D$?L\?>?J`?Tڰ@? `E<`?7[T?P`?W[T?`D-@?N$$?@`?>:`?4$?RZ `VȀS/7[T?`?>?E<` `RZ BZ ?`BZ J`*``?$$?0`*`?0`?:`VȀ_`P`[bYm[\\`?J`?`7[T$$?BZ ?L\E<`bU<`?$$ `?Tڰ@?ImE<`?4$?U<`?`? `?X0?VȀ?$$NS/? `?@` `?4$U<`0`?O`?:`?@`*`aE^0` `:`Tڰ@Q?Ym?fȀ?Ym?S/?L\N\\>?Im?BZ ImL\?*`?E<`?N?BZ BZ 7[T?D$?>?`BZ T$?7[T?_`?O`?:`?N?BZ @`[O`?Ym?Tڰ@Y@``J`NE<`$$:`0`?G[T?U<`*`^B@Q?4$?Im? `E<`?E<`?S/ `?BZ ?Y@?`W[T[S/$$?>?4$G[TO`?*`4$4$? `?D$?Im?0`?G[T?O`P```S/^`D-@ `?`E<`?*`?J`?0`?*`? ``Q_`?T$N_``?7[T4$?>?7[TT$E<`?D$>_``D-@G[T?Q?T$?`?$$4$Z`BZ ?O`?@` `E<`]2)aY@P`E<`Im?0`?k??Z ?':? ?to ?W[T4$J`?:`?J`Im:`?Z`?_`?Q?>?*`?>?0`7[T>U<`^ `?@`NG[T?>?7[T$$E<`? `?Y@?0```L\?Q?0`?G[T?J`:`S/P`BZ ?*`$$^aTڰ@BZ ?$$D$_`P`L\a>?\\?O`*`J`S/:`:`VȀNImVȀ?L\BZ S/7[T?BZ ?S/?RZ ?X0?]2)?4$@`?:`? `$$?Ym?Tڰ@L\Im?4$?BZ ?E<`?`ImTڰ@]2)Q?X0?a:`[E<`*`$$?7[T`>?L\?NRZ ^B@T$4$?O`?RZ ?`$$D$X0D$?G[T?$$G[T:`ImW[TP`BZ 4$?Tڰ@? @?` ?y`?"?o ?n?P`4$?`?W[T?`4$?Tڰ@?Tڰ@ `G[T>$$G[TD$?*`ImX0?E<`?U<`7[T@`?$$ ``?$$?G[T?D$VȀbZ `?VȀ?L\?T$?BZ J`NL\Z`G[T?BZ BZ YmE<`?4$?G[T:`Z`ImRZ fS/?J`4$4$O`4$:`a_`T$U<`?4$[[:`$$?@`?T$?U<`?Ym?E<``?G[T?N?O`?e<`?aTڰ@c/G[T?*`?` `@`X0_`*`?aE?``?:`?`? `:``*`O`?0`?f?b?0`$$@`Tڰ@J`? `? ` `$$:`?`?N? `VȀBZ ?T$?E<`4$$$?$$?i@? ?hQ ?*?q??{נ?Tڰ@4$:`?\\?BZ Tڰ@G[T@`VȀ^YmP`Im?BZ ?`D-@?7[TU<`?:`?]2)?Im?$$?`4$BZ 7[T?7[T?`X0[:`7[T?D$?7[TNVȀ?*`?D$P``?^?J``?P`?Y@?Q?`?`?[?QW[TP`7[T_`\\O`Y@>?@`P`]2)X0RZ ? `0`^7[T?Tڰ@?4$? `?D$?*`?*`Im `?D$?Im?aE?c^>aO`G[TY@Q$$T$bZ :`?Y@?N?$$?O`?N?7[T?BZ >_`?g?f?Tڰ@?D$@`Y@L\?7[T?E<`?$$ `?`?BZ ?U<`?>a_`?Im?L\`*`Q`?qO?`'?$`?ÁW????Y@G[TRZ ?Q`b^B@T$Tڰ@U<`U<`QBZ ?L\?`D-@?BZ T$BZ ?BZ ?BZ ?7[T?>?4$>O`? `?Im$$ImImRZ :`X0Im?\\?`D-@? `?D$?`D-@?J`?BZ ?^B@?Z`?G[T?>?O`?do ?a`$$`_`a^e<`S/?P`?7[TNU<`T$?$$>?X0?m2)?dڰ@?T$?:`@``?7[T*`?`?D$`? `?N?$$@` `J`c^Z`0`YmimX0?E<`?*`:`?7[T?D$?Im?RZ 0`[?`?do ?bZ ?P` `QG[T?D$?]2)?]2)?>4$?:`?Tڰ@?Q``h`?@`E<`P`bT$?kK?뻀?*@?3J`?y?ɤ?}2)?bBZ RZ ?0`L\^O`@`*`?*`:`P`D$?0`?L\?Im?`:`7[T?$$?D$?J`?@`J`Y@`?U<`?Im>P`G[TE<`>:`?>?^?U<`:`4$?4$*`?7[T?X0?N?BZ ?>?L\?Z`?Im?Im?J`G[TYm\\c/O`?O`?Im? `:`O``?RZ ?N?VȀ?g?h?X0*`BZ ?L\?Z`?G[T?>?>N^Q0`?4$?G[T0`U<`E<`*`]2)iq3 ^B@?4$*`*`*`? `?E<`*`Tڰ@ `?Ym?X0?>N[N?O`?Y@?7[T>?*`?*`?>?S/Nc/ `?0`P`G[T[^B@?`D-@?w? ?>?DU?V?s^?e<`?D$?*`?`G[T$$?0`>$$?@`Im^G[T?:`?D$?S/?Q*`D$?>?L\?:`:`[^4$?Im?:`@`O`E<`J`0`?:`?*`$$>P`BZ ?BZ ?N?N?BZ ?4$?J`? `Z`J`?P`?G[T?`?$$@`J`*`? `?D$?Q?G[T?G[T?J`$$?Ym?VȀ` `?D$7[TY@>?Y@?[?4$?`N^B@X04$?L\?P`*`D$? `@`^_`W[TG[T?*`?G[T?> `?@`?`T$W[TD$4$D$Tڰ@T$N[Ym`BZ RZ >Q?4$?$$@`?J`?*`Tڰ@? `?$$X0?0`?nB@?xfC?H@?{Q?nr| ?aE?^B@?_`?U<`*`7[T?N?>S/P`@`afJ`?E<`?G[T?N?*`U<`G[T?J`?>7[T>BZ *`? `:`D$4$?*`O`*`?:`RZ ``E<`?>?`D-@?r?uz`?e<`` `?P`0`_`E<`?BZ Im\\N7[T?`?VȀ?^B@?U<`?J`?J`?N?J`$$?S/?Tڰ@E<`U<`@`Q]2)$$?Ym?L\*`?4$?N `RZ J`?4$?Ym?QRZ Y@@`W[TaG[TBZ P`?:`?]2)?X0?J`?BZ ?N?Im>W[TYm\\``W[T?4$?NW[TfX0Tڰ@\\J`VȀaE@`?D$?L\?^?O`D$?>?U<`@`Tڰ@?0`?]2)?_`?P`? `0`?@`?W[T?4$Tڰ@:`?RZ ?@`:`*`>^B@aED$?0`?4$?D$>\\ `?RZ :`D$?L\?VȀ?P`$$YmP`? `?G[T?W[TS/?*`?ImVȀ\\?:`?[?kK?{K?}2)?hBZ `?P`$$D$?P`?Im]2)c^E<`?*`?4$?O`?L\BZ D$?L\?Q `D$`?O`?RZ *`@`?@`? `L\?7[T?^?P`?RZ ?^B@?4$N@`?D$?0``D-@do T$_``D-@?:`?N?4$?[?`D-@?@`? `?*`?`?0`?4$?:`?7[TBZ Y@RZ ?O`?_`4$c^VȀ>G[TE<`S/W[T`?E<`?J`?Z`?Ym?G[T?J`?NS/YmU<`S/O`0`? `$$G[TY@X0? `?L\?J`?W[T?^?RZ `@`0`>0`?G[TIm?L\?NRZ >?Q?7[TE<`\\^?$$?J`?J`J`?T$?Z`BZ N? `*`?7[T?f?j`?O`BZ ?7[T?N0`?^B@?W[TQ^B@G[T0`G[T>BZ bZ bZ ?4$?U<` `D$?>?W[T?Q*`$$?N?>4$?P`?eEv@?VȀ> `?@`D$D$?7[T4$4$?L\0`\\W[TaZ`?VȀ?c/?^?do ?QY@W[TE<`VȀTڰ@$$?L\?W[T?U<`?Im? `$$?$$7[TP`?Tڰ@?O`?`BZ 7[T?:`?7[T$$`?:`?Q?Q? `E<`G[T?P`?Q?D$?T$?U<`>a_`4$?E<`?`$$?J`?Y@?X0?E<``:`O`N?4$?7[T `?G[TT$` `U<`E<`BZ E<`?Ym?Z`G[T4$4$?[?Z`7[TU<`\\c/_`VȀT$Im$$?D$?N`@`?L\?X0 `Y@W[TE<`E<`@` `RZ aEE<`?L\?0`4$?BZ ?Y@?L\>*`?@`?VȀ?_`?$$Y@Y@Ym``4$?W[T?4$?VȀ?u<`?q`bZ h0_`?U<`?aE?Tڰ@?[?BZ U<`BZ `VȀX0BZ D$>?O`?c^?YmN\\:`?L\?Z`?\\?Q?*`4$0`?`? `7[TQT$?L\?*`J`S/? `?c/?b? `@`?$$:`W[TRZ `?`L\^B@`D-@P`?`BZ 7[TJ`W[T>?`E<`D$?@`:`?D$?w}?y; ?Ym?Im?Tڰ@4$`7[T?Q?Im>VȀaEZ`:`P`Ym:`` `?RZ ?T$? `? `?G[T?`N>?O`?S/?4$?0`?$$D$Im*`4$L\4$?D$?`E<`?0`?L\ ``?>:`U<`L\@`_`i@VȀ?0`0`?h0??Z ?~?7[Th0kKa?L\?QE<`? `?RZ ?S/?`D-@?W[T:`*`?0`T$a@`?]2)?a? `RZ ? `?X0?T$? `*`?7[T?G[T?0``?`?:`$$QJ`?BZ ?G[TD$``D-@bBZ ?7[T*`S/W[TO`L\^eEv@[0`*`$$?BZ 0`VȀBZ ?$$*`G[T?E<`E<`?im?m?q3 ?kנG[T?7[T?$$0`?@`?0`?0`?`L\7[T?Im?$$`?@`:`P`?O`?c^?Z`?E<`*`G[T?Q?^B@?dڰ@?b?L\?$$?G[T?BZ 4$J`O`BZ ?`:`P`?7[T?O`BZ S/S/]2)N?O`?E<`Z`imaU<`a?E<`?x0?t: BZ e<`do W[T?P`?D$`D-@Tڰ@?Q?``?fȀ?]2) `?$$?E<`G[TVȀD$?*`?N?O`?>?4$?`L\_`U<`?Im?^B@?O`0`*`?:`?BZ ?`>T$L\?T$?do ?P`D$J`@`$$?:`?BZ 7[TZ`_`P`:`D$7[T?D$?E<`4$?`?N*`RZ *`? `0`7[TIm$$`D-@?L\?`?`?imIm?4$?`Im?`?0`*`?@`?RZ G[T@`@`? `?D$7[TIm?D$?[?``?Tڰ@S/a?E<`? `?p@?t@?|\?Y@?E<`?X0?@`?`?:`?@`?N?BZ >? `?BZ G[TYmT$D$?@`?J`? `0`7[TX0`` `?G[TP`bZ d$P`?Z`?L\^P`?Im?BZ ?N?RZ `$$RZ D$?*`E<`RZ ?D$?`L\Z`\\O`?4$?J`*`S/G[T?*`?4$ `Z`fL\?a?^B@BZ N?>?E<`$$NTڰ@S/E<`>NN?BZ ?``?G[TVȀG[T?@`*`BZ `BZ L\@`Im@`4$c/bZ ?`D-@?m2)?D$G[T `BZ N?``QJ` `4$NRZ Im?0`?:`?O`?L\?VȀ?T$W[Tdڰ@?$$N?y ?i?}k`?r47[T?0`?BZ ?Tڰ@?^B@?Q?U<`?aE?RZ ?*`?BZ ?D$?4$?:`?G[T?:`4$?f?$?`?p`?S/?D$Ymb7[T4$c^i@E<`?a?L\N?O`?_`7[TL\?`E<`aS/?E<`*`Y@N `:`P`BZ ?:`?>*`P`^B@\\4$?7[T$$E<`@`BZ [^B@$$?$$]2)do X0T$YmYmU<`>?4$`W[T`D-@D$?L\@`dڰ@S/?O`?J`?0` `NJ` `0`>$$L\Y@L\>RZ W[TQIm`4$*`RZ _`]2)L\*`0` `?>?0``?Im?Y@?P`?@`?:`J`W[T?BZ ?U<`?@`?x ?@??tڰ@P`T$4$?X0?bZ ?:`?Z`?VȀ?:`?X0?Y@?T$?@`G[T?@`?z?`? ??{?^$$X0 ` `a``?Im?aE?:`*`?d$?fȀ0`S/:`E<`4$>a[?:`?D$ `?4$?7[TImVȀ? `?]2)?W[TL\X0RZ `? `ImZ`U<`?>?S/ `@`:`W[T`D-@W[TN4$*`J`@`?:`?BZ 0`X0VȀ*`T$fBZ ?a?[?>4$ `?:`? `D$O`BZ ?4$?BZ ?0`*`Im0`?Im?E<`Q*`0`VȀ]2)@`?:`0`D$?4$?7[TBZ 0`?O`?ImBZ E<`$$>?*`?]2)?[?aE?u`?xfC?do `D$>?T$?bZ ?*`X0G[T0`BZ *`? `?4$?7[T4$?a?^?ڰ@??':?ُ?u<``VȀTڰ@Tڰ@S/?4$?Z`?S/?*`?D$?\\?J`D$? `?@`D$Im@`X0W[T4$*` `?O`?RZ 7[TTڰ@?$$?Z`?L\? `?$$4$L\RZ ]2)]2)X0VȀ?`?Y@?L\?0`?BZ `>?:`?E<`?`O`Im?>?S/?G[TD$BZ ?Im0`^B@?*`?a?G[T$$?E<`?J`?*` `$$J``D-@Y@?0`?T$?U<`?RZ ?@`?S/?a?7[TTڰ@>$$D$BZ ?>?E<`NZ`7[T? `P`T$$$?`@``?J`Im?J`?Z`:`^L\?@`?RZ ?G[T?*`?L\?\\?E<`U<```S/Y@bE<`?Q?Tڰ@?]2)?z`?/?? S?K`?M 7[TU<`aaE>?L\? `E<`?Im?aE?ImVȀP`?S/?[?BZ *`NO`G[TP`VȀP`$$$$>?E<`?VȀ:`?BZ ?`ImQ[S/ `@`Im0`:`?`?BZ ImYmD$ `$$>N>?>?BZ 0`P`?:`?eEv@?T$G[T?J`?U<`O`E<`?W[T?P`D$O`0`*`VȀW[T?`?N?L\?E<` `?4$?NRZ :`4$?*`?E<`?*`J`L\$$>S/N4$?7[T?T$?^B@?\\?>>?7[T?VȀ?*`W[TS/? `?@`?>?@`?4$?$$?*`>Tڰ@>?Q?E<`X0a@`?S/?_`?Tڰ@?dڰ@?$??2@??4k@`? `L\X04$RZ T$?U<`?g[T?E<`YmG[T?7[T?$$?>?T$?D$G[TT$?`?a?W[TW[TaERZ G[T?:`?T$*`BZ ?N?E<`? `?J`?P`?N?O`? `E<`NTڰ@:`? `Y@aBZ ? `?`?:`?`$$?`P`VȀ?D$?eEv@?Q:`?L\?4$]2):`?Z`?7[TTڰ@P` `?$$ImO`?>?T$?BZ `L\D$*`]2)?U<`?N$$ `?4$0`P`BZ ?N?RZ *`@`?`$$?$$?[?^?Im?@`?E<`?:`?7[T?0`$$*`*`NIm?7[TT$J`$$4$?$$?L\?4$:``?:`?:`?Tڰ@?bZ ?U<`?vPe???y?Z`>?Tڰ@?*`J`D$$$ `*`?@`?RZ *`Q0`Nc^O`?S/?J`O`^?P`?z`?}2)?X0`D-@[Ym@`?L\$$BZ ?RZ ?Q? `?L\?Y@?Q?*`7[TP`G[T`J`E<`?@`?>?@`?P`?`G[T?*`?O`L\? `?E<`@`N? `>T$?BZ ?Z`?0`4$`G[TZ`\\?*`?Ym?G[T `?G[T?Q@`?:`?>*`?4$:`T$$$?]2)?^?BZ ?E<`?G[TG[TP``7[T@`?J`?U<`?*`D$NTڰ@E<`ImN?7[T?`Tڰ@N?`? `@``?G[T?> `?BZ ?do ?j`?e<`?rZ ?ym?``Tڰ@? `?ImIm\\VȀ$$?Im `QP`Y@Z``4$]2)O`?>?*`>P`?L\?w?|?``T$P`P`0`?J`4$Im?L\?E<`S/W[TG[TG[TU<`T$ `?0`ImIm$$4$E<`Z`S/0`S/X0?E<`?]2)?4$J`BZ @`J`:``:`?7[T?^B@?X0?0`?J`?T$`VȀ`D-@Y@?4$?X0?@`0`?4$?X0?_`?D$P`7[T7[T0`?:`?Im?4$?@`?VȀ?P`?:`?O`?>P`P`L\S/?4$?a?X0?@`?J`W[TE<`?O`?E<`?@`?0`E<` `?E<`?0`>QG[TE<`T$BZ ?4$?BZ ?`D-@?jF@?f?\\?D$`?$$*`_`e<`]2)@`ImW[TQY@\\? `?RZ ?7[T?$$4$?L\?X0?BZ ?G[T?@`U<`]2)Im*`?>?:`J`@`?Q?BZ T$\\RZ J`S/U<`D$ `?4$?BZ ?$$E<`^B@eEv@W[T4$RZ Tڰ@?>?E<`S/Z`G[T0`?*`?G[T?`?[?d$?:`O`?>?_`?L\J`RZ 0`?J`?P`?$$@`:`?4$?Q?@`4$?7[T?>`?*`?S/?O`?>?G[T?$$0`?4$`@`?> `N?Q?bZ ?Im?U<`?jF@?`D-@4$$$?P`?N?7[T?@`?0`$$?@`?U<`?G[T4$S/X0P`\\fRZ ?`RZ L\?VȀ?bZ ?aE?X0$$>*`Y@bZ N`0`>>4$BZ @`?D$?RZ ?@`? `G[TN?RZ ?c^?BZ \\fȀeEv@^X0J`?$$G[T``E<`?N?@`` `?`?0`? `7[T*`?@`?VȀ?Ym?N?7[T?`0`*`?Im?VȀ?:`BZ :`O`b``G[T4$ `? `E<`:`?U<`?Z`:`^B@*`?aE?Z`E<`S/*``:`$$? `*` `?D$?7[T?BZ ?O`?Tڰ@?0`7[T?0` `@`?7[T?@` `:`$$?RZ ? `W[T?D$0`?VȀ?im?Ym `$$?*`?BZ ?7[T?>?T$?Q`P`L\`7[TU<`G[T`QQ0`7[TU<`P`QRZ ?G[T?L\? `?*`? `*`?D$?P`?E<`7[TS/VȀ?D$? `7[TJ`J`O`a\\ `J`c/W[TE<`L\7[T4$L\@`?`?4$?E<`?VȀ?]2)?S/?0`?`?>?D$?E<`?Im?S/?O`0`S/U<`[YmImG[TS/W[TVȀBZ ?>?E<`?`7[T?0`?VȀ?@`W[TU<`7[TL\W[TG[T?$$?0`?`?*`0`?$$?`?O`?0`J`0`7[TQ `?L\?BZ ?`>$$?J`P`? `?:`? `?RZ ?T$?*`?@`?:`D$E<`>7[T?L\?S/?0`?>?S/?P`?P`?RZ ?L\?L\?P`?E<`@`N?*`?4$QNE<`]2)Z`QYm?a?S/E<`N>?`?0`?BZ ?_`?do ?W[T?4$ImP`4$E<`BZ ?Im?*`QRZ ]2)Ym?BZ ?L\:`N]2)bTڰ@VȀaEZ`G[T7[T?*`?G[T?>?`?>?J`?`D$NN? `?O`$$VȀIm7[TD$*`?$$7[TN*`?L\?BZ 0`?$$?J`?:`4$S/P`?7[T?O`?4$:`P`Im?0`? `P`X0?L\?$$?J`?*`T$@`?*`ImO`?4$$$BZ `?D$?*`?N?RZ ?E<`?E<`?>?J`?^B@?RZ $$BZ P`?Im?Z`?*`?Q?\\?fȀ?eEv@?:`4$?Tڰ@?W[TN[?:`BZ @`O`a^B@\\Z`?G[T?e<`?T$T$bJ`?T$?BZ ?b?: ??ym?T$$$E<``BZ L\?`P`c^G[T? `BZ ?D$?[?T$?@`N^B@RZ G[TD$BZ YmRZ G[TQ0`?\\?aE?:`NRZ J`?@`?Z`?0`Q0`?4$$$?*`?U<`?Tڰ@?:`?G[T?]2)?ImVȀYm:`:`Tڰ@U<`?:`?]2)?P`?BZ ?@`P`S/?O`?J`RZ P`?im?VȀ?G[TYmT$ `E<`W[T@`?`BZ N `?7[T7[TO`D$7[TBZ :`?E<`?`D-@?`D-@?E<`?7[T?ImBZ U<`?@`?Y@?BZ ?@`?O`?N?Z`?^:`\\ `?BZ RZ X04$E<`U<`QZ`Z`$$4$Q?*`?X0?W[T?>RZ ?`?``?O`??`?`?q?c^?@`QU<`P`Y@P`S/VȀ?N?[? `?*`?Im?*`?0`? `G[TIm*`?P`?_`?*`^X0G[TO``?Y@?Y@?4$`@`L\?@`?]2)?G[T7[T$$L\BZ ?J`?VȀ?$$>?>?7[TX0c/Ym>:`BZ ?D$?P`E<`Im?4$J`Im?\\?Z` `?>?nr| ?T$E<`@`J`U<`NO`P`? `?BZ BZ P``?$$NabZ YmVȀQ?BZ ?Ym?0`0`?Q?QG[TL\?J`?X0?Q?S/?O`> `4$G[T@`Q]2)>?E<`J`^B@S/O`?Z`?7[TX0T$D$?L\?b?P`?Tڰ@?_`?Q?? ?':??p@?X0X0do P`Z`Ym:`0`?`$$BZ ?Im?G[TTڰ@VȀ?`>G[T?>?\\?BZ U<`P``? `?BZ ?E<``?`?ImImaE>?Q?:``W[TaVȀ `?>E<`]2)L\@`Tڰ@J`?L\?S/@`Im? `D$>?D$0`BZ ?O`?L\?*`?J`?h?>^G[T?BZ $$S/VȀN?*`?D$7[TL\ `?>?$$@`:`?@`?7[T@`?4$L\*`?Y@?G[TG[T?$$?Tڰ@?S/?Q?Q?J`?*`O`W[T`?RZ ?4$^B@fD$?Q0`T$?:`?4$`D-@e<`QN?_`?Q?G[T?RZ ?*`??!@?X?@?l\?[X0[?O` `Q$$O`fl\^?S/?X0O`Z`4$?>?$$7[T?$$?VȀ?NE<`VȀT$>?E<`?:`7[T?J`?[E<`[?G[T?S/@`*`$$_`aBZ ?``O`Tڰ@7[T@`Q7[T?aE?iq3 ?`Z`*`?>?D$?Q?$$D$?4$?@`?7[T?``?G[TL\$$?T$?G[TL\Z`U<`:`? `:`L\:`?:`?O`?N?S/?_`?U<`7[T>7[T?`?G[T4$7[T?J`?:`7[T?$$?0`?$$?BZ @```J`?Tڰ@?O`P`aERZ ?`@`E<`?E<`?@`QeEv@nr| ``?Q?Q?BZ ?[?7[TJ`?`@`?tڰ@??v@?t@?U<`?E<`\\E<`?a?E<`G[TNg[TjF@^B@0`?`:`:` `?`?*`?:`?RZ ?[?N:`Z`c^_`D$@`L\?4$?E<`RZ ?kנ?aES/>?0`X0RZ ?G[T?G[T4$Im?Q?:`Q\\D$?g[T?s?``E<`4$?`?$$?BZ 7[T?*`?BZ ?>4$?4$?BZ ?@`?:`?P`?P`$$P`N:`?$$J`J`$$? `*`4$ `4$L\$$?G[T?0`>O`P`?$$?BZ U<`bZ L\@`Im `BZ aX0?*`?BZ ?4$?7[T?7[T? `:`$$?G[T? `[``Tڰ@?>?c^?a?[?fȀ?S/W[TIm0`?nr| ?u@?^?4$7[T`D-@Im?N>T$? `?$$D$ImQad$RZ ?`?0`? `? `?@`?U<`?L\J`YmRZ NL\O`\\aY@`D-@g[T `?p`?e<`J` `?D$QN?G[T?J`?`$$?BZ ?[?S/0`G[T? `?d$?pD-@?dڰ@?N?N?J`?E<`?@`*`? `?N?7[TL\Y@T$4$?D$?>?L\?VȀ?BZ `*`?G[T?G[T`*`BZ S/T$W[TYm@`?Q?VȀX0[>?E<`?`X0[ImG[TRZ G[TG[TVȀO`*`7[T?:`?b?b?Im? `?@`?L\`VȀ*`?`D-@?c/?Tڰ@?7[T?J`?b?X0Tڰ@[4$? `?D$?T$?L\?*`P``D-@Im?>BZ T$?E<``D$L\ag]2)Im0`?BZ ?E<`?>?O`e<`kKTڰ@?P`?_`?J`L\Y@Y@aEe<`4$?fȀ?^B@BZ $$?4$O`RZ `?D$?Q?>`?BZ ?N?>?E<`?N?L\?E<`?E<`?Y@?do ?d$?``?BZ Q$$?Tڰ@?*`Tڰ@Tڰ@RZ 4$?`0`?$$?Im?*`$$4$7[T?:`?N?:`?@`?Im`@`? `0`P`? `?]2)?U<`BZ Y@E<`?L\?L\$$? `?L\?:`*`0`$$0`4$?$$?:`D$:`?[?]2)*`Im?`?@`*`VȀ0`?c^?c^`X0P`$$4$Ym_`N?*`?Im?G[T?`G[T``dڰ@D$?W[T?J`4$?G[T?[?0`ND$NX0T$^B@a0`?:`*`?:`?@`X0f]2)?D$?a?W[T?*`7[T>?7[T?VȀ?0`]2)Ym*`:`QO`?`?S/?`X0S/@`7[T?0`?>>O` `?O`?J`?>?BZ J`dڰ@U<`?`D$J`?:`7[T?@`*`Tڰ@RZ J`G[T7[T@`O`>?`?0`?G[T? `>?*`?*`L\7[T?S/?N@`G[T?@`?X0?0`RZ ?0`?]2)?J`?0`?J`?BZ ?$$?4$?Im?Q?`@`?D$?@`X0`D-@P`*`ImJ`?Q?X0Im^B@RZ NY@YmD$? `D$U<`VȀVȀe<`kKT$?J`?*`7[T?T$?c^?RZ ? `?0`7[TE<`?`P`g`D-@RZ _`P`?N?P`BZ $$?$$7[T@`?0`?*`4$0`?0`?G[T>fb?`?7[TTڰ@_`L\?*`>Z`U<`O`O`:`4$L\*`?P`?`bfQL\]2)W[TZ`hbZ ?$$?$$?O`*`ImE<`J`4$?7[TG[TND$:`4$?*` `Tڰ@Tڰ@BZ RZ N?D$?Im``?>?E<`@`aU<`?$$?>`*`?0`?7[T?J`?J`?*`?Im?P`0`T$S/Im?0`?:``?@`?L\J`]2)$$?ImBZ RZ ?L\?a?@`Z`bZ P`*`\\gZ`O`Z`RZ ?`O`Im `D$BZ ?Tڰ@?P`VȀ^T$a]2)? `?Tڰ@?W[T?S/?J`S/Tڰ@7[T@`X0\\Im?O`?ImYmVȀ?Q?G[T]2)eEv@Z`G[T@`@```0`:`Tڰ@:`?J``\\T$?7[T?G[T?>?BZ D$gf>?Q?Q?4$?VȀ?^?P`?N?J`?*`*`G[T@`0`$$?$$J`RZ *`BZ BZ ?J`?Im0`:`E<`@`$$O`T$7[T0`D$Q[P`0`BZ ? `?P`?>?D$?]2)?Z`?7[T@`L\7[T?7[T?BZ ?J`?QVȀ4$?Ym?@`P`?BZ ?_`? ```[?0`?S/4$YmRZ S/T$>J```d$c/X0>?G[T?ImBZ J``:`$$?:`?T$?[?U<` `S/QJ`RZ Y@J`?Ym?a:`Q?J`?BZ Tڰ@\\Tڰ@Im4$`$$4$? ``Tڰ@Y@N`?O`?X0?:`E<` `?U<`?Tڰ@ `?W[T?Tڰ@?L\?E<`?bZ ?dڰ@?VȀ?E<`0`@`? `0`4$?7[T4$G[T?7[T?BZ ?BZ ?P`0`?O`?@`D$L\W[TN?RZ ?Ym?J`?L\?7[TImZ`_`U<`QW[T4$?J`4$L\?Im?W[T?> `D$VȀN?4$?E<`?N?RZ *`O`?E<`?J`Im7[T?4$T$bVȀ?$$?Tڰ@?L\4$G[T0`?BZ ?:`*`?``?q?VȀW[T?E<`L\Y@W[TO`?@`?>?$$$$? `?D$?O`?RZ ?4$T$\\J`?0`?$$*`?O`?VȀRZ do O`` `$$G[TP`O`T$Im `J`RZ $$?Tڰ@?:`bZ hYm7[T7[T0`?BZ ?[?$$?D$?E<`?L\?*`>ImW[TIm?BZ `Im7[TO`RZ ?0`?Im?Im?L\$$>?7[T@`BZ Tڰ@BZ ?[?a?Tڰ@?O`?$$BZ :`>NY@]2)>?$$Tڰ@]2)4$? `BZ $$U<`X00`>D$?P`?L\E<`?7[T?W[T>E<`RZ RZ N?N?eEv@?T$J`7[T?G[T7[T?@`?1?>?^$$?ImQ\\J`:`0`7[T@`*`?D$?W[T?N$$7[T:`NJ`?`?VȀ?S/*`*`?4$T$e<`^BZ ?`?0`?$$?BZ ?0`O`O`7[TImIm?D$?D$?`?$$T$do L\?E<`7[T```D-@E<`0`?S/?U<`Y@]2)W[TU<`?O`4$VȀRZ T$Im?*`$$L\D$@`7[T4$7[T?*`?`P`:`?J`?7[T`S/N?E<`?L\4$Tڰ@VȀJ`ImT$J`*`NW[T:`?@`0`O`VȀ?BZ ?Q*`?G[T?\\G[T?>?G[T?4$Im\\?E<`?q?imD$Tڰ@$$G[T?Q?`?B@?1?$$J`?@` `0`?7[T?@`?$$:`O`D$?Im?[?BZ NS/O`@`?:`?Q?U<`?J`E<`Im?>?0`BZ @`:`>@`E<`:`@`Im? `?Im?:`?*` `4$?$$?4$?0`? `S/Q?VȀ?d$?[?T$?S/?[?Q?L\?\\?a?E<`QW[TQ7[T?O`?ND$L\$$4$? `?N?*`RZ W[TBZ ?`0`?Ym?ImP`>E<`?$$?7[TY@[?4$?G[T`>E<`QS/>?4$7[T\\Z`@`?4$?E<`?J`?E<`?`?0`?VȀ?O`0`?BZ ?RZ NW[T?*`?>7[TW[Ta?0`?q?nB@$$]2)*`?VȀ?f?tڰ@?y@?j`>Tڰ@>>O`J`4$$$$$*`7[T$$*`S/VȀD$L\S/@`?*`Im>?D$?>?4$?G[T? `L\L\ImT$Ym>?L\?@`$$?*`*`O`ImBZ ?`Q?Im?tM ?v?w?Z ?A?t$?m2)?O`?L\?W[T?Q4$O`>?G[T?]2)?L\@`?:`?]2)?S/?Im?^B@?do ?S/G[TD$?>?0`?N?eEv@?Tڰ@L\*`?`0`?X0?a7[TTڰ@`?0``J`G[T `U<`bVȀD$P`RZ G[T `?L\?]2)?\\?D$$$?>?:`T$RZ ?4$4$`D-@c^_`?e<`?dڰ@$$X0?*`?k?q?_`? `?@`? `Y@`D-@^_`G[T?0`7[T@``J`U<`U<`^VȀ? `$$X0]2)T$$$?0`?4$?0`U<`Q?J`?@`L\0`?L\Tڰ@*`?O`:`Y@E<`*`0`@`S/>`?:`?k?R?ap?@?@?0( ?A@?qE?0`:`?*`?J`*`G[T?`?RZ ?\\?L\4$?D$?b?^B@?O`?]2)?j`?e<`? `E<`?@`?BZ ?Im?``?S/:`?4$?Im?`?S/?a?Q?@`?:`4$`?BZ ?$$$$?` `G[TYmaVȀBZ X0jF@m2)^B@?@`?U<`?4$7[T?@`? `Im4$?BZ >```D-@S/$$?D$? `P`O`?>?h?oH@?U<`?*`?^B@?RZ [aETڰ@?7[T?nB@?s/?\\ `@`[T$?@`?`P`>?4$J`G[T?>?Im?4$?P`?>bbZ ?N?W[T:`? `?``?U<`NE<`?@`:`S/4$?$$?7[T4$Ym4$?:`?nr| ?ُ?':? ?D-@??@? ?뻀@`Tڰ@:`?G[T7[T?0`?0`?7[T?:`@`Im?0`?N?D$?@`?Q?S/7[T?@`?$$G[T?D$?$$?G[T?Tڰ@?0`$$?J`?]2)?``?O`E<`D$?$$`?E<`>*`RZ U<`?O`?_`G[Th]2)?E<`?Q>Q0`? `$$`0`J`J`7[T4$@`P`bZ eEv@T$?:`?Y@?Y@?*`?7[T?Z`?4$W[TD$?>?dڰ@?z|"`?{Q?fȀ?@`>\\?`?kK?c^O`_`$$?S/?7[T>? `@`?Im?P`X0`D-@?N?_`?*`$$?T$?G[TT$S/*`?L\?D$? `S/``?4$?X0?p`?`?X ??R?.?3?8?VRZ [Im?E<`? `:``G[TN0`NbZ `D-@@`?> `N@``?``X0Tڰ@?0`?BZ ?D$?T$?>D$?4$?^B@?``?ImE<`J`7[TO`Im?:`? ``?N>?m2)?{K?o`?*`$$?T$?\\?BZ BZ @`*`?*`?RZ ?ImJ`U<`?O`?`J`T$c/i@^B@?D$*`YmY@S/^W[T? `?$$?L\?jF@?fȀ?7[T$$G[TY@?@`?jF@?bZ Nc^Q?E<`?$$O`G[TImRZ ? `?Q4$Tڰ@$$?D$*`?:`G[T`? `N:`?L\?@`@`^B@c/?@`?aE?]2)??q?P?C??=?F@?# BZ RZ G[T? `ImQ `$$J`E<`RZ aaG[T?L\?>P`BZ ?:`4$@`?7[T$$N?0`?E<`?>0`?D$?X0?S/?O`?> `P`T$?` `E<`?7[T?$$? `?l\?v?jF@?O`?G[T?O`?Z`?X0?$$*`?*`?L\?^?\\Q`?G[T `E<`0`Z`W[T?4$D$VȀU<`Z`b[J`X0W[T:`E<`P`D$VȀ_`G[T?4$?*`@`YmYm:``:`` `BZ 4$?:`?4$>O`S/L\?4$?S/?7[T?Q?D$Tڰ@P`?>?4$D$Y@bZ 7[T?`D-@?Z`?l\?Ԕ ?@? ?i@??c!??BZ `7[TZ`U<`?D$?QJ`O`O`G[T?$$?Tڰ@?G[TG[T`?O`4$O`?J`?S/`0`0`>?0`?BZ ?0`?Im?L\?J`?]2)?^B@?Q?N?$$0`?D$?$$RZ L\J`O`?`$$W[T `?W[T?Q?RZ ?Q`4$?4$?4$?BZ ?RZ ?>O`W[TJ`E<`>?@`?D$4$*`?:`@`?0`?S/?D$:`BZ E<`U<`T$G[T:`?0` `\\a[_`T$ `BZ YmU<`D$?7[T?`E<`S/Im ` `BZ S/O`?L\?^?`Im?BZ ?G[T7[T?N?BZ `BZ W[TX0?7[T?``?b?h0?s/?{נ?@??|?]2)`?@` `S/BZ ?O`?Tڰ@?4$>E<`>`?G[T?W[T?E<`BZ ?*`?Y@?7[TQ$$?D$?4$?0``D$?*`?S/?O`?BZ ?4$?N?_`?W[T?E<`?S/?O`?4$?Im?D$0`7[TL\[_`geEv@?7[T?a?RZ ?E<`?0`O`RZ :`D$N0`RZ aYmG[T>>O`RZ `?>@`L\?7[T?U<`?L\?E<`?Tڰ@?S/?$$BZ O`0`?Im*`_`YmRZ ^B@Tڰ@? `? `BZ U<`Y@L\4$E<`Ym^T$ImO`>0`D$?>?S/P`a7[T?:`? `?@`?L\?E<`?:`?*`4$S/N?7[T?*`*`?^B@?py`?m2)?g[T?f?]2)W[TE<`?@`?4$*`?4$?:`?>?$$>L\D$?7[T?U<`?O`?@`?^?S/J`Y@L\?4$?RZ ?7[TO`@`?Q?S/$$?RZ ?S/7[T7[T?G[T?`J`4$?7[T?RZ ?_`?S/>Tڰ@S/?Tڰ@?@`@``? `ImQD$BZ L\@`? `7[T?4$N_`^BZ D$NL\RZ T$?[?[?$$X0aEQ?$$O`bN?`BZ Im*`?>?J`4$\\VȀ4$0`S/T$*`Z`J`?`J`D$? `Ym``>4$NBZ 0` `?0`?7[T?D$?4$*`4$Y@imU<`?W[T?``?[?VȀ?>E<`:`0`7[TBZ O`:`?:`?`ImQN:`?4$?:`7[TBZ ?D$?U<`?$$T$S/?N?BZ J`T$?$$?E<`> `?Z`?BZ Y@D$?G[TIm`D-@S/$$?Tڰ@?f?d$?@`G[T?$$?^B@?RZ T$Tڰ@?@`?RZ ?BZ ?*`?`7[T4$?BZ ?W[T?\\?Z`?S/?BZ ? `:`>4$*`?0`?*`RZ aTڰ@?`?E<`RZ ^B@\\0`?BZ RZ c^G[T?L\?7[TBZ G[T? `?O`?7[TNO`?`?BZ 7[TD$?Im?ImG[T?G[TO`RZ `L\W[TG[TS/VȀ>7[TD$0`?@`?T$?RZ ?E<`?D$7[TW[T:`?G[T `RZ RZ E<`?0`:`Tڰ@W[TQVȀ]2)P`*`@`J`D$O`X0RZ G[T[dڰ@Tڰ@?L\?VȀ?@` `$$?*`?RZ ?N*`?D$ `?BZ ?b?BZ _`7[T?T$7[TVȀ>?`?@`?G[TN?*`?a?RZ :`?Tڰ@?i@?c^?Tڰ@?J`?>?$$0`>?*`?S/?W[T?S/?D$?:`?G[T?RZ ?L\*`7[T?T$?Tڰ@QZ`?0`?O`$$O`Im*`?7[T?P`?ImRZ bP`?0`*`RZ Tڰ@D$?*`?:`$$J`BZ ? `7[TP`4$*`?L\?QE<`E<`?G[T?0`G[TNQ*`?Tڰ@?J`L\Im?N?X0?4$*`?:`?:`? `?G[T?Im>L\?*`?O`D$RZ \\VȀImTڰ@^[T$E<``4$W[TaTڰ@:`U<`eEv@^?*`?RZ ?J`?D$?4$?`?T$?``?G[T?@`? `?:`?a?J`Ym4$?W[T?>`?G[T?D$Im^VȀD$Im? `?U<`?7[T? `?eEv@?nr| ?]2)?7[T*`? `?4$$$ ` `$$4$:`? `?N?E<`O`N?T$?J`ac/`Q@`?O`?]2)?Y@?Im`J`P`J`P`]2)aY@E<`?$$?L\?Im$$D$4$4$ImP`S/J`0`P`4$?P`?O`?$$:`@`?7[T?Ym?L\O`N?N?L\RZ VȀ?$$@`ImL\N$$?O`?L\RZ J`Im$$G[TZ`b_`7[T?:`>X0U<`7[T?7[T? `D$E<`0`0`@`?`?J`?$$0`?`>QE<`QP`?G[T?N>?P`?D$?>?P`?ImBZ YmJ`$$NO`*`J`J`?O`?S/ `4$BZ Q$$?Q?L\7[T4$0`>J`G[T? ``VȀN?L\$$fdڰ@O`X0aEIm?Q?]2)?Tڰ@D$?:`?X0?D$N[]2)W[TE<`?$$?N?T$?Tڰ@?L\BZ 0`0`>0`L\``Y@0`?$$?*`?$$7[TJ`G[T*`?`4$`?Im `[L\?L\?L\4$W[T_`]2)YmVȀX0$$0``*`J`Z`b_`>>*`?0`*`G[T?L\?@`:`QW[T>?Q?:`[a_`a_```^B@>?:`?$$?0`?D$?7[T`?`?P`?D$Tڰ@X0? `?Im?O`?P` `BZ ?7[T?`P`*`?W[T?T$?`?:`?>? `@`G[T:`D$O`?`?N>]2)Im?`N``U<`$$?7[T?@``BZ ?P`?eEv@?U<`7[T7[T7[TImE<`7[T*`?:`?[?]2):``D-@Q`?:`?T$_`J`?D$@`@`O`U<`W[TN?0`?L\?O`?O` `N?`?Q?>:`QTڰ@VȀ``b\\*`P`Tڰ@ImL\X0X0J`7[T>$$?N?QD$aJ`?S/?ImImRZ Q4$?U<`?QQ[T$Z``D-@W[TImE<`QS/E<`@`G[T@`7[T0`?*`?O`?X0?L\$$?0`?_`?j`?nB@?f?>0`?Im?D$@`?`?Ym?RZ `?J`?P`?@``*`0`L\>?O`?N:`G[T?BZ ?*`D$D$4$:`? `D$?$$?S/7[TY@>?`0`$$4$Im4$?P`?Tڰ@L\dڰ@]2)P`:`?Q?E<`Im?7[T?`D-@?U<`?7[T>>>$$?G[T?Im?@`?Im?4$4$? `? `NZ`U<`>0`NN@`Q4$L\Tڰ@*`*`T$E<`?7[T?`7[T0`? `?7[T0`Tڰ@:`?RZ ?0`VȀS/>?Q?P`0`7[T?0`@`YmIm?:`>do d$G[T`L\Z`]2)Im?BZ ?J`?*`?4$?Tڰ@?^?Ym?]2)?e<`?``? `D$?4$?>0`?P`?G[T$$`?G[T?RZ ?>`?:`?D$4$0`?D$?7[T?` `O`J`?4$?@`?@`?4$G[T@`?0`0`?$$^B@b?*`?Im$$ ``BZ `?Im?O`$$Tڰ@NNVȀBZ 4$?4$?Y@?\\?T$?@`?7[T?BZ ?0`?0`?Im? `NBZ 7[TL\E<`$$D$T$G[T?@`?G[T?$$a?*`?`E<`?7[T?`VȀL\?4$? `7[TO`\\J`?:`?BZ *`O`0`?$$?0`?$$:`?O`?>S/RZ ?$$@`dڰ@_`?:`?J`G[TbeEv@T$?7[TW[TJ`?VȀ?Y@? `?U<`?NBZ >?E<`?L\@`$$?0`?*`?$$?7[T0`Im?:`?U<`?@`*`>*`?Tڰ@?S/T$Q?O`?P`?E<`?0`U<`T$? `?L\?O`Q?:`?t: ?r$?ImBZ ImL\`?BZ ?L\?BZ 4$:``O`X0@`?$$ `*`?7[T?>0`$$?0`*`? `?Tڰ@?D$T$Z`QL\BZ ?`?4$`?*`?RZ ?J`?`?@`?Qf `O` `7[T^U<`4$7[T7[TS/bT$?$$4$E<`0`4$?:`?Ym?G[T:` `?:`?7[T?BZ ?S/?NG[TVȀ$$`S/*`?X0?NJ`\\_`Y@P`VȀc^W[T?O`?X0?Im?`D-@?i@?Y@*`?`?S/?T$?4$D$>?Im?X0?BZ BZ D$G[TQ*`?G[T?:`*`T$J`?Z`?Y@P`$$?_`?P`?7[T?$$T$T$BZ J`?D$?T$7[T?g?$?~ ?^*`>ND$$$?0`?BZ 4$L\$$@`[G[T?P`?*`Tڰ@@`?$$E<`L\BZ L\*`?W[T?U<`:`S/$$?Im?@` `4$:`0``@`@`?D$?Y@c^J`E<`N*`Im]2)O`$$*`>X0N7[TIm:` `4$?L\?`D-@?@`O`*`?RZ ?VȀ?J`?4$J`O`?*`?D$?$$?Im?X0?E<`7[T@`J`\\`D-@]2)_`Q?O`?X0?S/?b?do ?@`E<`$$?$$ `4$>?T$?^B@?@`QD$?*``*`? `?*`?`T$X0?G[T?D$Z`E<`?N?>>>ImaIm?4$O`?Y@?ym?r?J`?J`?S/$$NNBZ ?$$0`T$J`Im`D-@Tڰ@?N?4$X0>?P`?$$NS/O`$$?BZ ?>?N?]2)?L\J`RZ @`>S/YmE<`?E<`?Tڰ@X0J` `?BZ ?Im4$P`*`? `:`? `?7[T*`0` `?J`?L\0`$$?J`?$$NIm?`?BZ ? `J`U<`Tڰ@E<`?4$?D$?4$?7[T?D$?E<`?7[T4$VȀ^B@O`>:`?Im?Im?:`?N `Z`S/*`E<`T$QD$4$`J`Ym `?VȀ?N?@`?BZ ?D$?@`L\]2)?*`?J`VȀ]2)L\N7[T$$Im`7[TaX0*`Im `?ND$Q?P`?W[T0`O`NO`G[TN^W[TE<`Y@[? ``]2)N?D$`\\aIm?G[T?4$D$ `?BZ ?@`?@`$$W[TT$? `?0`D$7[T?O`?Y@?Z`S/:`?L\?X0?RZ ?$$`?7[T`Tڰ@BZ ?Im?BZ ?*`?>?:`?E<`?Q? `O`$$?J`?$$O`Q4$? ``>:`$$` ``BZ D$?`[h0``?>?[?BZ ?`?N?[?r?H@?s^?@`?$$?Im?*`0`7[T*`@`U<`VȀYm]2)4$?O`?4$?7[T?J`?0`?$$*`P`?E<`?aE?`Z`N$$*`J`Q? `?>ImU<`J`$$?@`0`]2)RZ ?>?$$J`:`?$$0`P`]2)d$W[T?$$@`W[T*`W[TX0L\W[Tdo do :`?^?S/:`?>>L\D$QRZ `?*`*`?E<`?`D-@?Y@?RZ Tڰ@? `?S/?BZ ` `?0`?J`?>J`BZ ?E<`?0`0`?$$>S/?4$P`@`?Tڰ@?O`7[T:`?*`?Im?P`?O`?N?Im?` `G[TU<`P`U<`d$fYm?*`?J`?7[T?RZ ?aE?p`?V?}B?S?sd?S/?N?J`?Im?>?@`?7[T `?L\?T$>BZ ?$$E<`:`?`RZ D$?Q?7[T?D$?a?D$T$? `?Tڰ@?D$? `?7[T?J`?Q?BZ Im_`RZ ?>?0`E<`>$$$$?@`?RZ ?G[T `NY@Im?BZ $$Q?`?Im*`NRZ Tڰ@RZ Q*`?U<`?T$?4$?BZ ?>G[TIm?$$?`>`?`0`?$$?@`G[TT$G[T?E<`?L\E<`T$:`?BZ ?RZ ?D$?*`?$$O`VȀ4$O`bZ NS/L\?@`?7[T?0`0`?4$?G[T?@`?E<`?G[T7[TS/X0`D-@W[T0`7[TQS/ `?c^?iq3 ?p@??+?6Ԁ?rn?BZ ?4$?*` `D$`?@`?RZ ?py`?uz`?]2)?Im `?0`W[TE<`?``?P`7[T?ImU<`?0`?VȀ?BZ ?G[T?RZ ?`$$?>4$a``G[T>P`QD$?0`?:`?@`?7[T?7[T?*`7[T> `BZ G[T?7[T?O`?:`*`J`:`?E<`?D$0`>?L\?X0?L\`$$?*`?*`?$$?:`?>?``NbZ a$$?0`*`T$O`$$>BZ ?$$?:`?4$? `QU<``U<`G[T `J`E<`*`:``4$Ym[U<`\\Y@P`>?D$?ImD$QQZ`7[T?Tڰ@?*`U<`U<`? `?do ?dڰ@?S/?x?/`?}k`?Z`?Q?Tڰ@?:`L\``W[TD$$$?k?w[T?bZ ?VȀ?S/?N?W[T$$*`?Y@?*`RZ ?0`$$X0`?>>4$E<`bbND$P`O`D$>O`X0RZ D$G[TBZ $$0`$$>NImBZ $$?0`?4$?*`4$T$N?$$?>0`RZ E<`?N?X0?Im?E<`?@`7[TE<`$$$$>?>:`VȀG[T?4$D$VȀP`7[T*`D$NNG[T?G[T?*`7[T?*`?4$4$? `?E<`?7[T?`$$`?7[T>Z`P`N^Y@Z`_`7[T?*`RZ P`$$BZ ? `?J`4$G[T `?E<`?O`*`?Im?do ?P`?D$?d$?b?L\@`^B@W[TP`_`?eEv@?BZ T$?7[T?P`?N?U<`?7[T?E<`7[TG[T?:`Im]2) `?4$J`P`Z`do ^B@U<`T$*`?$$?@`?>@`J`O`U<`>?E<`?BZ ?*`?$$`7[T>*`*`*`?7[T$$U<`VȀRZ G[T?Im?*`>?Im?Tڰ@*`Im*`L\\\G[T?J`?7[TBZ $$?NImYmBZ @`S/E<`?`?`?BZ ?Q?7[TD$:`0`>?0`?VȀ?VȀ?D$ `?$$?ImD$`G[T@`?`D-@?^L\Q0`L\7[T?D$?7[T?@`?`W[TQ?$$BZ Tڰ@E<`$$?7[T?*`E<`?7[T?_`?N0`BZ RZ D$0``D-@``? `7[T^G[T?E<`?G[T?`7[T?4$?O`?4$?:`?0`_``D-@?D$?@`J`7[T0`@`?`:`Q ` `E<`?@`?P`:`O`D$BZ ?L\?Q?O`?L\?T$?W[T?BZ *`0`BZ $$?N?7[TG[T:`@`E<`?4$?Q?VȀ?X0$$W[T?L\*`>?4$?`G[T@`?@`?4$>4$?:`QZ`D$J`Z`J`?@`?X0?_`?W[T?*`O`Tڰ@>0`L\*`?RZ ?Tڰ@?7[T>@`0`E<`D$ `?c/?|c?}?d$>D$7[T?$$? `>BZ e<`do 4$?0`@`L\4$?D$?*`QE<`?0`D$Y@O`4$? `?*`RZ ^B@>? `Tڰ@RZ ?Im?U<`*`J`?E<`?W[T?J`?N `d$W[T?RZ 0`_`0`?4$@``L\:`>L\?>?G[TU<`^B@>BZ Im$$ `?U<`?eEv@?Tڰ@7[T7[T> `?P`?:`:`?BZ ?T$?D$?4$?Im?a?f?E<`T$G[T*`E<`D$?`?Q?P``> `?0`?O`N]2)_`Tڰ@ND$BZ E<`?E<`?c/?X0@`RZ $$?N?7[TO`D$?7[T? `BZ J`QVȀ^S/?U<`?p@?yq3 ??`?r$?L\>`?$$RZ ``P`RZ i@iq3 *`?a?`D-@?E<`?*`?D$?$$Tڰ@[G[TD$T$:`?J`?E<`?``@`0`?*`J`Ym?$$?W[T?`E<`?BZ ?N?*`?0`BZ bN?L\VȀg[TG[TD$_`?Y@0`W[TE<`?4$?VȀ?QS/`D-@@`$$W[TZ`:`Im[?$$?do ?W[T>G[TJ`E<`?7[T?7[T`?L\?``?Ym? `?^B@?e<`?:`U<`O`>*` ` `?O`?W[T@`[BZ ?E<`?YmP`QNY@[0` `W[TBZ ?X0?P`$$?0`?Tڰ@?S/*`W[TE<`$$T$X0@`*`D$Z`Tڰ@?fȀ?|?|':?pV`?im?h?]2)$$?>$$E<`?`*`aaE?`?``?``?W[T?T$?O`?7[TNa[@`7[T?$$?O`G[T?E<`?O`*`4$:`Tڰ@BZ ?L\?>*`?@`?G[T `>S/``Im?D$Q^*`J`J`?rZ ?~r| ?c^aTڰ@?>?N?J`*`N0`>[Im?VȀ?G[TU<`0`?a?YmBZ YmX0RZ 0`?:`?E<`?N?VȀ?P`$$$$?T$?P`Q\\J`*`?@`?N?@`?P`?U<`@`_`O``:`L\0`?@`Tڰ@iq3 X0?`E<`D$?E<`?@`?`?BZ ?>@`Z`\\@`4$Y@Tڰ@?4$?N?J`4$X0?O`?rZ ?gRZ X0?L\?VȀ*`Im?@`?Ym?]2)?``?S/L\X0 `?Im?0`?7[T?J`?@`?:`?$$T$Z`*`?0` `7[T\\_`?>?S/E<`Im?:`*`?N?RZ ?:`?N?W[T?4$ImNG[T?*`?J`4$G[T?0`7[T?U<`?t@??v+S/U<`E<`RZ 7[T?`7[T`>[>?c/?aE`7[T?VȀ?[4$\\O`*`@`?N?G[T?`*`D$`?E<`$$YmQ `?`?7[T?BZ ?4$?D$?Q `U<`L\G[T````U<`?:`BZ f_`?*`?0`:`0`0`4$:`O`Tڰ@RZ L\:`E<`U<`:`?G[T?@`?O`?NNT$?0`$$U<`D$?:`?0`ImX0G[T?7[T?@`?O`?S/@`[`?X0?Q?7[T$$Im?T$?J`?>?Tڰ@?P`BZ VȀZ`4$$$VȀIm?L\?D$`?E<`?S/?@`?J`?VȀ?$$J`?*`?T$?RZ ?7[TP`RZ ? `0`?L\?|':?o ?u@?7[TE<`Z`:`?$$Im>P`G[T?T$?Y@*`RZ ?:`?^?7[TRZ ?*`?P`D$O`?$$D$NS/E<`7[TL\>?*`?G[T?G[TImD$?*`?`D$4$*`RZ \\Ym?`?E<`7[T@`?:`?0`E<`P`L\G[TE<`>?7[T?Q?BZ $$P`X0> `J`?`?Y@?E<` `?BZ ?Im?U<`?^B@?Im$$*`Q[Ym^J`?U<`?G[TP`?0`?h0?m?a0`^N?D$?Tڰ@?_`?a?Q?>?O`?P`?4$*`ImO` `?P`?7[TNL\4$>$$?4$7[T4$?Tڰ@?\\?@`J``D-@VȀ?BZ ?7[TD$?T$?im?^B@?J`?O`?`:`?BZ ?0`W[TQ?>?7[T:`$$NX0 `?X0?>L\?$$?:`S/Tڰ@:`>*`*`T$Tڰ@*`BZ W[TRZ ?D$?U<`?*`L\O`$$?*`?@`?>?:`?@`?G[T?O`?Tڰ@?RZ ?:`0`@`G[TNIm `?N?^B@?`D-@?T$?E<`NImD$S/7[T?N?N?_`?jF@?aE?Z`?a?L\?BZ 7[TT$@`E<`>?[?c/?L\?>?Z`?h?im?:```^B@Q4$?L\?N?7[T?W[T?Ym?T$?L\?@`?7[T?G[T?W[T?QE<`[T$L\Im@`>?7[T?VȀ?G[T4$ImTڰ@D$?T$?RZ D$RZ D$7[T `?``?BZ [\\?D$:`T$S/P`L\*`?0`7[TJ`4$J`Y@J`@`J`?@`?P`E<`Tڰ@ `?G[T? `[aEE<`?`0`4$$$?0`?RZ ?J`?L\?@`?Z`?O`?*`?7[T?*`>E<`0``E<`L\?O`?T$?L\?BZ ?Tڰ@?^?L\? ` `@`@`:`>?\\?m2)?Ym?4$?\\?S/?*`E<`Q?P`?RZ P`J`?L\?Y@?G[TD$?*`?bZ ?O`X0VȀE<`E<`0`7[TIm?$$@`?`?Y@?]2)?D$?P`?^B@?@`Im$$?4$$$E<`>?4$?>4$?>7[TG[T?`?4$ `4$E<`QY@W[TE<`$$$$Q]2)Q>S/^Y@J`?$$D$P`? `?O``Q@`ImT$?4$?RZ 4$Q0`?J`?S/?*`D$G[TU<`X00`?0`$$E<`4$?N?J`?D$RZ ?4$*`RZ 7[T?BZ ?`G[TD$0`J`BZ *``7[TD$?>?``?^B@?Im?`BZ E<`>>?J`?^B@?>?>?b?P`N:`NYm?$$c/bZ >?J`?O`7[T@`?RZ ?BZ S/?X0?Im`@`>?`>^B@S/?G[T?L\G[TY@4$?L\?$$>?4$?Im?*`7[T7[T? `4$O`?@`L\\\VȀO` `?@`4$G[T`D-@d$Y@BZ ?$$ `O`P`J`Tڰ@X0VȀIm?L\?Ym`RZ ?D$?d$?X07[TImJ`Q:`? `7[TJ`E<`?`?Q?Tڰ@?T$?O`>VȀ>?*` `E<`Im?*`?D$?BZ 0`? `>N `?O`?BZ ImO`?`?:`:`NG[T0`7[TS/L\?Im?S/?0`:`L\:`?L\?P`?>?*`?`?T$?_`0`[4$:`Y@Tڰ@S/?N?w?w}?[?>?L\?`$$N\\?`?a?T$? `?4$?E<`?$$Tڰ@^T$S/[W[TD$D$U<`U<`L\>?0`?4$?BZ `S/Im>Tڰ@W[TNIm*`4$S/0`?J`G[Tdo ``G[T?`0`?`?`E<`O`U<`Q?RZ ?do ?@`Ym:`?[?W[TD$T$0`G[TJ`4$$$>4$*`:`?>?]2)?NG[TJ`$$?0`?`@`@`?7[T?X0?G[T?0`?7[T?4$?`>4$?E<`?Im*`:`?:`?J`?$$L\J`?@`?J`0`$$?$$?RZ ?RZ $$E<`?Im?>J`J``P`[X0J`?{Q?L? ?to `?P`?7[TP`X0^BZ ?RZ ?BZ `?D$?Q?O`?L\$$[``Z`O`?$$?D$@`U<`RZ S/Q?$$?Im?>?D$?4$E<`G[T:`D$0`?0`?*`?`Nc^J`?X0?@`U<`L\? `*`J`4$?P`?L\>O`T$T$?>?Ym*`_`P`?D$?>QU<`?$$?G[T4$D$?`?4$ `4$P`^B@RZ ?E<`?G[T@`L\7[T?0`?>0`RZ P`E<`?N?$$?Im?\\?G[TE<`:`?:`?E<`?Im?7[T*`?@`?`D-@?[J``?P`?L\?`?D$?0` `$$>7[T `:`E<`?$$?P`7[Tdڰ@`D-@ND$?|??߃@?{t?P`?[?P`?`?$$BZ >?J`?>4$?BZ ?S/?Im?Im?:`BZ @`? `?$$?J`?VȀ?:`7[T`?BZ ?@`BZ G[T0` `?0`?0`>D$`?7[T?D$>bZ VȀ?G[T?E<`?4$?[?_`W[T@`?RZ ?J`E<`Im0`>`? `P`Q?:`?Tڰ@?BZ BZ N `?>? `?@`?> `BZ L\T$U<`L\7[T `?7[T?E<`?L\?O`?`W[T_`\\?4$7[T?J`?``?J`J`@`?>?:` `0`*`?E<`?^B@?RZ J`VȀ4$?7[T0`U<`O`? `E<``?J`?L\ `U<`X0?`?QD$c^RZ ?>?N?s^?`?U8?s?g[T?f?^?\\?[?`0`?O`?@`G[T?BZ *`0`?*`?*`?N?U<`? `4$?J`?Im `?*`?BZ ?`*`T$Z`P` `?BZ ?0`O`]2)VȀ0`?@`?`P`D$?7[T? `?BZ ?eEv@?dڰ@U<`0`?P`?>G[T`?O`?@` `@`?$$?]2)?]2)?Im?$$7[T@``?`?*`?@`?BZ G[TBZ 4$U<`aETڰ@?$$?P`?Ym?\\?Z`?0`]2)aS/?U<`4$*`?> `RZ Y@Tڰ@NJ`:``?:`?`RZ W[TBZ 4$W[TeEv@a7[T?0`?L\?a?Y@?`P`\\YmG[T>:`?`?Z`?s/?@?z`?fȀ?[?do ?^?O`?U<`?J`>7[T?@``RZ `?7[TNT$4$`?4$?E<`N\\`?:`:`$$?$$E<`T$ImE<`O`Im7[T`:`VȀZ`J` ` `?O`?RZ E<`O`?O`?S/G[TS/?D$$$RZ $$?S/?J`?4$?7[T*`?N?>`?0` `ImBZ 7[T7[T`*`@`>BZ \\c/U<`D$@`?0`?P`?>T$fY@?7[T?X0P```Z`G[TG[TaEdo S/4$?0`?>7[TD$`BZ Im?`?>D$[Q?BZ ?O`?*`?E<`?\\?Tڰ@?:`Q`D-@Tڰ@?$$?N?0`?@`?v?@?~B@?W[T? `?P`?>?$$? `E<`D$?$$RZ W[T?`?N7[TJ``@`E<`G[TTڰ@0`*`P`0`?7[TBZ RZ BZ 7[T:``E<`?J`O`E<`4$>?VȀ?S/VȀa?`?D$O`RZ `? `Im[RZ ?:`?Im?>`U<`Q`L\P`?4$?:`7[TG[TRZ QJ`T$O`$$4$P`U<`G[TImY@E<`0`Ymg[TfȀG[T?N?BZ RZ `D-@]2)? `?P`E<`U<`?`?J`?Tڰ@?Tڰ@0`Q `?$$ `?G[T?Tڰ@?E<`?`?BZ ?Tڰ@?D$Im7[T?P`?P`?*`0`QS/`?:`?> `O`?X0?w}?u`?W[T?@`?Tڰ@?U<`?RZ ? `O`?L\ `W[T]2)7[T?Q?G[T?0`?0`BZ E<`?E<`?RZ ?RZ ?RZ @`^@`?Im?D$?E<`?BZ BZ J`?:`?@`D$0`?Im?4$7[T`$$BZ *`?D$? `^X0?Q?U<`BZ L\?4$RZ \\D$?D$?BZ P`dڰ@RZ ?>G[TP`?N?[?S/?$$U<`Tڰ@O`^N?P`?4$Q@`?G[T?O`?$$*`?7[T`Y@\\N*`4$?:`?G[T?7[TE<`?4$?Ym?>? `?J`?L\?VȀ?X0D$[ `?O`?BZ ?>?D$?>?:`?7[T? `J`Z`@`?Ym?Ym`Ym`D-@O`RZ Y@`:`Z`:`?P`?S/?^?do ?d$?``?@`G[T$$?7[T?$$*`P`L\?@`?N?0`0`G[T`?T$?_`?e<`?eEv@?$$W[T4$?E<`?Q?_`?[4$RZ ?*`?Im0`BZ ` `$$*`G[TG[T `?`E<`[N?P`?J`G[TBZ ?BZ ?X0?`D-@?ImTڰ@Z`:`?$$S/b$$?Y@E<`?S/?d$?fȀ?Y@L\S/@`RZ ?0`?c^?P`D$?*`?L\?@`?7[T?@`?E<` `@`?:`?@`Im]2)RH~]bW)H Ok^C&@?RRS?e ?b易?U= ?,E FZ FZ B`O@P-7`?D[y?LX73`I?C&@?5v_^``5um@-$yC{@`?X^@?0?\@?H2Š<@#> ev@k@~@ZPbjc% T=R@_ͳ`V?5+?Ft?Ho?O@?T#?V?Un`?JE$y1?Gq@?I`?oӀ?'Zr`7 `T΀`?F G`T`GnFʠ?G3`?I?T=?ZE?S '`?OW`?QR?N ?92mAH`CH&?"oӀ?+`??%3?5 w?Gn?!5+YY\@?oӀ15+VJaH`VJ=b5 ,e;Y`? ?8m ?CzA* WrE?JYk ?SR ?K@?PW ?,eXw`T`?`oӀSo{QԠ?B4 ?^ b@?P@1Ԡ; i:E:%36sD΀N`[;?=?;g@?I@?=?7 `?SO?V=J`?Co{?Zr`JZ?PW `8m N 2`?RR?Uv?Zr`?m?Zm?T z C4|`<@?E!@?;h`?1?@,`2!)JE?*m?V`?Y?D[yKlQ!`Q? d΀f=J`B!)?@WƜ[g@GMbWƜDx?>`?:j?-b?RT`?Yl@?HZ?C{@?Uu?E[!7Zr`?3 '`?A* ?ʠ)SyQ?0_?4 z ; i*m?Ap+@@D#536G?W`-1?<?I`?6G?B\) ?U?G`? MR  G`?%3?D4$?B4 @5_^`[Y`' `?EGw`?Z2 `Ap+@?&;Y`GqD#?3[`?YY?O^`HWD Ϡ?G3`?Do$ ,E ?3[`?$#Y R~?P`?U?0p!5+?@?WdG?S '`{@HĀRT`UGw`MD`?H?4S ?Q ?Zv?_݀?Pܬ?>k?C% >Ӫ{@C&@4G 6sE w?!5+?RR?E wHFp G?C?H/ ?ʠ?TN@?LE (>@?5 ? '`?A!`?@.M Md?5+?B3&@I?< ?S%3L1f?8m ?A7@?4G oӀ?0! >{@Gq??A Kh`Qz?A>?Cz$yR(A!`?5+R`VG?6s?LE /@Un`\؏L ?JE?X(`?JmC ZmX2ŠFG?A@?S? iF ?7@?Jj?5[!? i?ʠ?P5?\X?Ev i?1Ԡ?5[!?/ A XZ(?SH& iFnt?9 ?OW`?Q\?J ?5+>5+?9@B}KQ+VHn?-b?KQ Kh`<?+`S% a\QR*^0@T#JIl@8m B}J#% 2}U TQ`&ʠ?8o?5+?Q5+?^N6?9lRS@D Ϡ;Y`>?A\?1*?v'Zr`?X?\؏LE e` \<I`+Y`?Z@?kh`?aȪ3[`6ʠ??^`K``k`Mb?;`?GZr`?@M A!`?N ?V?En``:N b@X3 '`?V?H?> ?UL?C%?"}/W`V > ?X(`?S% ?+`@?Hn?NkCo{V=J`G@; i?0_BoӀHFp =?2(?# '`QR|] J?H ?IF`?'Zr`?C4|`?Z @?`0?T@?.`/W`&nt?*m?:"}O `Zjco{exa`^u\`O?34|`?J?!:j>ʠ?Gn?To$ ?DxYmm`dPW 5uGZr`= 6ɀN ZbH~['@?8Fp =XcIY= ?, ?K?L ?R*?[?RRS>{@?oӀ?$G >ᵀ=?'Zr`? @Hm &?UL?[`?@cz_׈Jj? ?^N6?k?bR?*k?53?U ?Ev=Xc15+?K`?] @?Vɀ?oӀ?G?8Fp 5[!?{@?Imm`XoH ?K?.kKLL ;1`H pC% ??!?I ?P+`>?8 ?Llf 9 C%?B!)?Imm`?AԠ?0->5+?G`?JjD ϠUKKCzI`PW Oͳ`'@?A\ iVHQUaH`W?Hm ?S>Q?"!)?:j?_ ?dy?Z?C{@?"!) ' `? ? I. 6Tx@Y2mP,`A@34|`, ?/ ?N`?9YE!@>{@?Uu?U?1 QzXw`;1`?B!)?? ?%v#@5Tx]Mb?E@?O^`?5v3 '`Fʠ ?K?B(/^`{@?B~?G3`?Md?AMc`ZkB|?)>5+"!)9YDӪ{@$G ?5u?5+>?-?? `?QT?N b@> ?!D ϠRH~Fs?8?D4$?0_\lf X@^ XPE`?F?LE 9? ?WP ?XPE`?Il@?;1`?4y?A ?I?9ʠ?6ɀ?O@?Imm`?)>?A?P! >@O]7q@D`0?-1@Jm@,`H>ᵀ?B}?A@A* G7 `Imm`?1*?WZr`?To$ ?Ft>J>Da?Ho?J '`"}?B(?N0@?O^`?E "`Il[l&?Yc ?[g@?V?6Xn`+`E!@?Dx?TN@?Kh`C4|`[g[1`AH`?Pp?Q@AWGM8o#[`)I B!)?J2 ?R(Il6ʠ?+`3 '`P:?+g@5vH2ŠQOD Dx@#?0_>ʠ?O0_?PY`?Gn?GZr`?C4|`?D#?P5?T΀?Tx@?C BH~ULT[y?W`?Z?MXcDo$ ,E ?E "`?9 2oӀGn??XFp ?O ` ?5u?Lκ?=1B(VPD΀?=1?%v,E 7@AԠ> iʠR@Q+VAC% 6GXc?A@ +Y`RS?IY?Y?K@?Q!`?P@>?7Zr`?X ?NᵀB~SA?F?BoӀWƜc@En`?Cz?'Zr`E % <Ӫ{@?@`?-boӀD`bt e P.9_^6`)]Xc[h`H3 '`?6s?8;@D# i?EGw`?JE?1*?ʠ?#{@?4#?Sz?WG?7q@?M?ce?Vɀ)2m?,E ?D[y?E >?H2Š?\'?VɀF _]R!)&ʠ:jE w?oӀ?B4 ?!?/ ?VJ?YY?J ?E w?D[y?A\?SP?Y ?F?@?[h`?d#?\κoӀS '`SQ Gq@?Gr?bS@?XĀ1Ԡ73`?7@?4 z Co{U "` ?[g@?Tx?oӀʠ?7Zr`?H?' `J (Fp ?= W`?#?"!)>Da2m7Zr`[X2ŠH2Š ?]u?\eEv?U?K1`?A=1?^`?RH~?WG?OW`?\N`?\b?@5?7`?F ?3@? i`9Y?Zr`?;1`L`BUv892m@-GQp+@@! ?B!)?@;h`TG ` Da@K>SyQaS4|`NDaZUG `7Zr`?!5+>>ᵀB|M N0@Il[@`ܬRoӀ53?B|?Q?ʠ?@?[h`?LN @?U!@?Pf?/@?8?S[`?Vnt?'@Llf Do$ 4 z D[y53?K?Q+V??3[`?]1?a?P! ?ʠ>ᵀ!5+?PI. ?N`8E3?ᵀ?V`?IF`3[`?=?D Ϡ4?J?`&?QR?4B  XD@J @(?0?_ ?XN ?Ud ?\?aC?Pf?*?J?C%?% ?Kg?H {@?E eFGʠ?G`?4G ?Zr`?C '`?N ?Ap+@@[b_݀RRS? GnH p' `1M1B4 ?{@A@JmA\a`dV^Q@> i?@5?>ᵀ?=+g@?W`CzPY`:kR] Co{?@?15+?N ?C%?9?X ?NkE!@?`?Y`?R4 ?2oӀ?15+?Cz?Q?VH?U@?O0_?B  ?@?J?N`?7@= 5 ?E@?R\) ?8JUd <?D?-bJ KEh9=XcLE U[!S4|`B`D#PzX@;Y`?F ?O]?BoӀ?A* ?JE?!=?,E ?"!)RyUF3u ?%v?R*?5 wGr?;`?; iOk^??W`?cyQ?WZr`ʠD`5u?D?.k(Fp ?Jm?)2mO ?P! ?[ i?a?P?2!)?/ >ê{@?;h`?. #?6s? iIF ?,e?Il@?J?T`?d?f}4?GFVT=?8 ?RoӀ?>`2}9 B  Ev@?@-?['@??ͳ`PW CH&1Sz[WP B4 ?B  ?C{@?3 '`?6s)ʠ?M?0! :k?C@?4#< ?H p?R@?A?U?]?UQL?V`?Ho>Da{@?K i?,e/@?-?9 ?3[`?Q!`?``?] ?Hm ?9l?<?oӀ'@2oӀ8o?oӀʠOW`PY`?= 3&@? ?3@{@2(&ʠ% >ᵀK`QԠEu?Il?`l?`.?U)?I ? ??Nᵀ?:mIlFD4$E EGw`R@?53?2H~YCI?Kg@?!5+O 3% ?Xo?az?8;@?@,`? 5+?I2m?<?C '`>Ӫ{@0?@,`?I2m?E!@?P?R  ?Ry?VG?S?Ӫ{@? '`34|`NX 8o?FG?&ntO `L9lê{@?9?>@?E w?&ntB\) "!)?"oӀ?H?] ?Le4y?7q@?E Ev@?@,`?R*?1ID ϠLκR!)"oӀ?ᵀURH~?)Ӫ{@C@?;@?cֺ?bW>% FZ ?5u2m??Q@? ?`?92m?M ?V`?QH`?AԠ?;g@?I@?X ?[h`?W)H ?R|?B(? '` Do$ Md0@,`YCKY`?R>`?\?Hm *k i?B4 ?W`U[!`,`[ S@N HJk"}?Ft?"oӀ?MXc?C{@?0_?E3?U)?`DC?R(5+?`F3u [ iI"!)?H?U= ?8 >?MD`?T?5 Hm PI2m!5+?F ?1*Il@4#?@.5 NDa$y?{@Co{MLE ;@;Y`XFp S?H2Š?C%L 9 ?W`@5?0?Q >{@=1>Ӫ{@% ?*m?R(?N ?3 '`?ʠ3{@AH`B\) B(?"oӀB~?@?P.?^5@?XFp ?;1`9?/@?TeN?5vRD#?Ok^?Yc ?M @?Do$ ?Q?'@VP=XcQ*=1?W?O?IY?P@?Ux?L?15+?@.F3u ?@-?R>`?92m>?2!)?# '`P@dc d}Tx@PTN@Gq{@?4y?73`. ?(Fp ?9 6sV```NQUA!`R4 T`NkWT z ?:?D#2(2m?5??0_?K?D`?"oӀ"oӀP,`[VT#H p?NDa?[@?=bHo?{@?Xc?HZGn ?F?)?6ɀ?Mb??W`?92m?En`2mW`?Z?c '`?C{@SeM?I@?N b@Md@-?]'9?PLlf ?,e?G@Jm@,`?:m$y?6nt?U "`?5v@ E ?5v?53:mW@PI. ?7q@?K?<@@I. VSP*m?O `?[Eh?P-?9?U[!?X<:j\1fQH`?B}?]?VI@?`HĀ\'Z?#6W{@?Qz?P! ?/ /@;1`S&@N ?C%?5 Le?J2 ;g@Y Z`DC[A* ? NDaF JQȪE!@>`Mc`Y [M D#YF`S[`?M1?aC?QOW`Ok^?PI. ?H R|1 ?Z?O ??@`?@?3@?7@%3E ?[@?g`?[h`7@8?Wq@?Zv1\?!5+?bh?TGn?*m?B4 LκMl`FGM1?Llf ?b~?N`/@/@ i?1\Evb=Y`?Fʠ?Y2m?JYk BP5)2m, EGw`>?A5+?O@?afV?Y J_k^ZOL@?'@?7Zr`#:ERe@@,`?T?1 V?4#?C@?6sF3u V@W`T?Q?R@?ͳ`8m ?&K i\WI <@? ?E?6s# '`?:m?A!` I. ?@?U "`1d@f _ͳ`Q#{@?5 ?0p?=?9 A*MG@QPzX@FT#VHM V@[Q P@`gqa!`?.`?N b@FʠRS@?#?O]?FɀHQ@?G`?CH&_3]b9 ?I?[1`?Q? ?> 3{@B!)?#? Ap+@ E "`4#9 16ɀ?3 '`?WZr`?G `oӀ?H2Š3@^`@`?Il?@.(A@'Zr`6ɀ2!)?9ê{@IK1`TZP-B(OD N Ӫ{@?<@A*TA*oӀ4y.`Cz`m f`a* c<h讠e= S% ?0-ʠ@! @5+MdEu3[`V`XDyO@T@BoӀBV`pV@?Hm ?Z?2H~E3BH~@-:mGI ?7Zr`?#{@`@e` D΀?XE?b??WƜ?> ?2}?I:``YF`?/^`?DZr` % 1?Q!`?``?%3ZYk O;g@+g@?Ev@? Imm`??^`?D z BH~?/W`?AQ R(> KP\؀O]9?Re@?D#P@>?Sۥ`L"}?7@?[v ``(?@`@-RK`E!@NkP@CH&9FZ S`fd/:]l`P5Yh-i|-@_׈OG`M Gq?`1ZŔPSYٗ6s= P@A!`? i?AԠ?2oӀA\? i?Q?:kD z E@BE3E@6?+g@JEP! Gq@?4o$ ?X?WG?A\!oӀ?A* ?"}Xo[Y`?$G ?Tǣ@?OD ?Cz?9 ?@5?[v ?`NmT?#?2!)8m ?;@?>ᵀ4?2oӀ?oӀTMHA*^ b@W?= ?A\=S4|`?@?PI. PY`HFp ?P-?IF`?-?:j4G UYP?+Y`?U?Z?PW @?ʠ?B~?B(?J? ?G CO0_8o?Gr?Mc`CH&RoӀ?L1f?V`KSP?9Y?B}?5+?4o$ KFs8oʠ?#[`!O VQUFZ E3N`Yc ZYk Jj9G@Q E!@?*1\U= C4|`Fs?5uW`Tǣ@P-?6nt?\?V@BoӀC@?P-?CH&SQ5+?5+3@?=?B}?H p?X<?4G D z (?@QU5 ?E PI. E ?UQL?YA?UGw`?J?7Zr`?H?R? 5u?OW`?BN`0?:mD`L1fGq@R|B(7@XEY I5+?SyQ?KEhP-C?@`5v:?Do$ ?;g@?1?A@BH~]b[@P\؀+g@?<@?AH`? @5 ?H?Nᵀ?@\؀?L ?R@?Ty?Y` i/^`K iIHD#53KJ @?Gn?BoӀM @4?7Zr`En`.k?U3?M4 z H pF? i?TQ`?O@5 C% >ʠ<@.k9 B\) ?e?96GL @.?7`?-bT Ϡ]O E ?GF?O0_34|`Y R?'Zr`?P?1 Q`(Fp ?`I. ?V T@YY?(Fp ?9?oӀ?Ok^?LE %3?K@?^a ?5OD E[!;h`3[`:jPI. @p?E!@?VI@S ?,E ?DG ?4#?2}2m8?3% ?C[`?:m?MD`?? I`% ?F ;Y`VntS% Do$ ?Hm ?T S%V@Nᵀ?HFp ?W' `P-7Zr`0-1/^`Ho6nt?@.!En`> i?2H~?/W`?D[y?CH&?5v?> ?A ?*m. 0ê{@15+Zr`?Le?$#?`%v?; i>R|T`Q*Imm`5[!Ua:D4$;Y`` RRS?S ?V3u ??@92mQ5+?VxI?K iGq@QRDy@@?D`?92m.`?{@QԠYCF ?; i?En`@-`DC^u*?N ?4Q!`V)= ? Co{[1`Vs?1?\ ?U)@`QfV?m?Ap+@?5v?Ev>I`?8o?M I@U 5 Zr`>?5 ?"oӀ5+ iH p]c`ZEv@Q Z= ?7@/ i?C ?% ?%3?A* 2`?&nt?ʠ?ͳ`J %3?Zm?b=`?HoC4|`H IY6nt?9?"oӀB\) F @\؀:jKEhS>Q"}?K?? `?L?`?U w{@?2H~?E@?C[`?J?@,`B4 U)TN@PW T#Q\?)?=Xc?D΀?0?J ?C{@EGw`POk^Kg@AWb|U3Q`a`YB!?@5?Ok^?6ɀO0_FG iC% N0@K`T#T/@?E!@?EGw`?0I``W ap+@GZr`?7`?C[`?:9 Lκ#[`?/^`FɀULB`?F ?GrSecQp+@?5+6"oӀ?>k?.`?m?73`?A* ?6A8?Wq?X@AԠSyQ7Zr`&nt(?2`?B4 ?$y:EB!);1`@)2mXZb~C[`?LE ?`?0_6GK1`C% ?F?D z M1U)5 w? =Xc5+?Ymm`?a&l?NDa?`?7@?I2mFt?@?0I. ? ?2`D ϠPzX@? i?D#?W`?R?eb?QTTeNVI@K`G;`A!`PWTRS@EGw`=Gq ?T Ϡ?Z?@?C '`?F ?Q+V??^`>Hm UKC{@{@M`Z?Uu5+?5[!?A?S?Ap+@ʠ2oӀHoB?92m?YF`?[3@[g@1*?#% Z(@S{@?N ?R4 v?ͳ`?. #{@?D΀?eLb?f?PܬG E ?5+ / ?,e?15+?O0_?\:@?Z ?IF`5[!Il>5+?@ I. @`CH&P+`F?B\) ?KEvZJ9I"}?S?X@?S* ?NDa?P5?N0@?6ʠ?, ?J ?Hm ?AԠ?U "`?S[`AH`VntGZr`EuOk^?8o?\<?>DaX@``_aXE 0I. @?5+1?2m?@->DaD#?a@ ?ce?HZ?C% ?T@?P?C '`:kZYk SR 3% FntLe4"oӀPb`_0_6ʠ'@/W`?EGw`?F ?Lκ?Tǣ@4 z ?, ?Z?Q* ?AԠ?DG @92m%v?A@?< @-'Zr`?C% GZr`D#@??O@?_ ?b(?E "`L1f?53?N Gq@O?F?T*O`?RoӀPp`??8?V?]c`?TG ?<@?1?R?R@ > ?6ɀ?O@?] ?d Ϡ?^a`?L?Dy?M @?Gq`6ɀ?m?@G ?Zr`?*m?1*.`JYk @-@I. Ml`0I. ??0_?@?N ?Q*?A@?G `?Tx@?Vt?VxI?SR ?VH?`,`?SeHm Tx@PTN@Mc`?4?D#&ntGnO `Sz; i?O?U "`?UL?TN@?6G>?/ IPS@?` D?X??D?e?5+? E KQ92m1*9Zr`?/^` I. IF`A ?#{@?1?WdG?CH&JYk 1*A@]:@0! ?`0?W?B|?F?:?A\?N ?;@?/@?C@?=1?9?2mJ @I`8 Fnt1\?P-?^u?_:4?Fs9?B4 ?YO?E!@5?oӀ?QU?KEhHR@ I. =1)?2H~?4o$ 5 3% ?Ty?Z ?oӀ3&@?>k?E "`?P-?Z?V)?8o i?@?A@F*m2(?1\?N ? I. GFKY`L@34|`?,E  5[!LX)?*kC[`7Zr`?FG?Fɀ?-?@5?[1`?a?D[y?W`?5 w?9 ;Y`?1?P@>I3% 0H2Šʠ?Q ?O^`?PY`?Uu?>k@5?@Gq@; i?C[`0! Q`8m ?KLX?Zr`?{@?@\؀?CH&v?0_. ?4?G`?F3u ? > 34|`>{@H T z <G`aMV ?A5+?@{@?=Xc?Gn?K i?KY` iD΀?(?WZr`?^`?Mb ?? `?C O]R(?9l?Q+V?I@?:m?!5+?B!)?S[`?Mb#-1?O ?Pܬ?ͳ`C[`?8Fp 5+@I. ?)2m?J?@,`E[!N ?;h`?FZ $y?5 ?C '`>ᵀ> ?Hn?V`?53UxR`G C{@W3`X pV !?P-ʠS&@T#U@I@?#[`?7@?5v0O `3% ?2mI2mC ?=b>{@U= T*O`?@,`?VP?m?Y@?X?2`?FG?P-Zr`@ʠ8m SVGRQ+V1?I`?6E "`@.? i?IF`?^`QRS '`?9lHZQH` ?/W`?B?Xw`?U!@&QȪK i?E[!?Zr`RU= OZkak@Q+V?J @?RR=XcV@6ʠ?9  E )2m 6G:mEn`SzP`?3&@?To$ ?:E; i?A?DxS&@Z4G ?`??=1?5'@$y?1?Q*?FʠIl4y?;@BG@?E w?X?R@?v"}?F ?/ / ?O0_?A* YOXn?*k?T#?B}WP X@?%35 _u4 \lf Gq@? >T4$WHnS% Z?JE?# '`?B(?2`?.k?V`?X{@/@?Qz?M R(bgQ`?6ʠ{@%v?N ?Sz?C%?8o?2oӀ?@`?P! ?@I. <@Llf V\S&@ ?<@?Zr`, ?2`?I`?PI. -1?^`G `? E ?1*E!@HZê{@>ʠ?5?Xc?U5 wK@3{@?-?C@1 ] V9Ud aQ ?@I. ?VJ?=bP,`# '`?Z?Q? ?@SY`WnNa S* ] YPܬX<]J5[!QTO `?2H~??`-1Wq^5@;@?Lκ?&ntVZ P-?K i?E3[v e "`U@0e*k(Fp ?0-?JE?W`RoӀ4o$ ?XĀ?IC ?O]?`= [?HFp ?a@?WZr`?GqPW Eu?>ᵀ?E3G3`^X ?2}?(Fp 2} I. ʠ?v?D#?=1E!@K`??=Xc?+ i?G3`?Q+V?Ft?Pf?MdD`O]?(?H?OW`?9YJ2 W`?CH&To$ `.8Fp <@]l`Y:{@>Da>k?!eN G@>ê{@>ê{@I2mUM . ?$# '`-b?(Fp ?T?^ ?P-?`(AԠ:??G # '`?*m?)G@LeG ?C@?SH&?;Y`TN@HĀ?:I ]1T z Vaz_׈J?# '`{@*?Gq@?D#@-9 ?5[!>CH&Imm`Ap+@?1 ?(Ӫ{@?, ?Hn?L@?Kg@?Uu?Yl@?V?\X?b=`?Zj?@%3?, M^`B`?Q?]Xc?[?+ iM I. ? i34|`?P?X?aU?SyQ?0I. ?A*?D#?; i?Dx?<@E[!Q5+FP! O0_?)2m?B~' `-?F ?Xm ?X(`?C5+BH~Gq4G ʠoӀ7@E "`D[y i?H?F Ӫ{@?#?C?C%?D4$?PS@?Q* ?I?Gq?AԠ8m G?B?]?[?Gq14y?2}mPEGw`?6?C ?G?Tx?N b@2(B!)C&@Z @[LeV ]u:m?Fs?2}9E34?2(?/ ;h`HFp A 53?#?Q+V?Ud ?1?W`> =b1?6ʠ?SR ?\κ?VZ ?;Y`!@I. D`@5B(5 w?:?3{@F Q*> ?(?&nt# '`6s3% ?X2Š?Zm?.kPzX@QfVEMHn?P! ?[=>M @=1F E[!?I2m?U)34|`V`1\?;g@F\E a`c:`! W@W@T z P@?0_?C{@?5+Un`@,`?D΀?@p?B(?@-?#?#% K iFɀ?@?=?{@KY`U!@WFS[`??U?AH`NkTID z C?I@?S?P@?N`?T4$?ZE?VZ ?*kR@U ?H?5 w< @\؀??F3u ?UM ?^ ?V`8Fp Tx@Tx@Y M ?53>{@@! ?/@?En`?1Ԡ2!)QYwBVntR(K@@?Ft?B\) ? ?Ev?U w?Kh`??^`?Kl?Fnt@\؀Z?R(?2}?@p@>%3C&@B  B  #{@?PY`?S{@?+`9lӪ{@?F?MXc?(L1fM?C{@?*mDG 2oӀ?*OD gFh-KY`?3{@3&@6ɀ,E T[>8Fp ?C, O>?B  FTeN;@?@>@C '`Y`\eYI?N ?PW?@C[`??? '`6ntMD`B  6ɀFZ D΀2}> iMl`S '`P! R~(Fp ?\ ?ZA!`YAP+`EGw`Q5+L1f?!5+?G@?Gn?O?T?LXNDa[g@VI@?0I. ?SO?HĀ??@?N ?SyQ?P?Nk?R`?C%Pp[=P.1*?> ?L ?1Ԡ?5+?1 >?"oӀ?7Zr`AԠYA\XUAԠ?34|`?F?E??@??^`?92m?1?M?\@?Z`?-b[v `5?C, Il@C4|`+g@ '`6ntv?HZ?D΀*34|`?@@3[`?3{@5 wN ?@= ?@?C% ?Se?%v?ͳ`?2!)?LX?, D z A!`?`?+g@>ê{@`5B~Do$ PWRR? i?N ?34|`?1Ԡ?Xc?ZE?1;`Ӫ{@6]bCR\) ?ʠ?D[yROk^7Zr`0p?;Y`?J/ QLlf B!)6s;h`Dx2`?8Fp ?:j53BH~?A?Z?[@?S>H2Š?Gr?`@?B`RL?)?7@` i I@Vd`L?)?Hm ?9  5[!?oӀ>ʠ?&ʠ;Y`!?HĀ?=?^`6?!5+5[!Q@]NaW NDa?0p0- i?Vʠ?X?P\؀?? LXW@R@]NY ? ?Dx?8o?9?oӀ?:E?{@HQԠHJ @`5d*O`P\؀?A\?Pf?B\) ? 6ʠ?G `)`m ^ b@JKh`F3u ?5+?&nt>@?Le?_D ?XcK`oӀ?A5+Zr`8??"oӀ0I. R`R?{@5 5v?RT`?PJYk R? I. ?0Na Y(VQD#JjU wA ?@.?C&@?Hn?DG 0! 5 ?!'@JjQzO @>Ӫ{@?+ i6GKh`@?I@?Fɀ?FZ ?8o2H~?Cz?]č?K i@ʠ?D#?/@? ?8m % TMXnOͳ`"!)?;`?1?3{@?@! ?)2moӀ?8 mB}2!)?'@?E "`?Vڞ@?V?' `KgVHT Ϡ?Jj?b`?H En` #[`5 ?3 '`?15+2mGZr`aU_ ?' `?M?:?+`8m NX Imm`G`I=>1UTy?e?B!)?#5M @NX `M`h`i2mV3u EHm 34|`&ʠD`0! ?N`?SyQ?"};@?; i?Jjʠ?N ?E AH`Wap+@Y(+` > i?S4|`?MD z @p?K?SP?L ?A* =XcZ2 Y iA Q!`QzK, ?C%?MD`?0pHĀB(?7q@1\Z?Y(QȪUd S4|`Q5+[\bC#8:jA@U[!YOKY`?=?I ?OD ?5 I`6s?MXc?;g@Co{@\؀A5+D[y?92m?O?\E ?U)?2}?-b?@`?E!@?RoӀ?Vʠ?CH&8 CzD z A*?*?Fs>B|.`?8o?C{@?2H~ ?2`?Q* ?YC?M ?Zr`?92m?@-4 z {@?H?1 i?8?<@?6nt?+Y`7@?!5+?Y2m?Xc?Ev?QfV?So{;g@W `;1`?4#?E ?7@?L?O?J ?>`?)2m*m?>k?S4|`?G3`1$G ?MD`?Mc`KgaH`T?5+?<?W`MbY>k?JYk ?D z ?$y?@! ?I2m>P`P7`??>ᵀ?Cz?@ᵀ#[`?:?J?M ?)TN@Yٗ@pGn`-[B|JS[`7@?(>?; i?Kg?. @5H2ŠQ`WFUvBH~?Ho?X ?O@B|?$#?Ml`?!5+@\؀? ?+ i6ʠ-1?;1`?T@?[ i?M @?2!)?' `"oӀ'@ʠ:7 `?E!@?Q* ?3@AԠDG 8Fp 5u*m?&nt?73`?{@4o$ ?I?SQ ?F #{@1?@! ?A* 1'@?/W`{@?5 ?PI. ?P+`?WZr`?ZE?-b< ?Eu?T*O`?Hm ?>ᵀ? QH`[Q' `&ʠ0?5+?%3? '`?9Y?1?G?Y2m?T=&OW`?ͳ`?0p% U= P,`>{@$#I`NᵀOͳ`>?X<?RT`6sIOZYk T{@?=?8m ?Fɀ?J?34|`3@= 1\?@G?#?(^`h7@UK? `XFp YYD#GqPY`*k? E A5+?5[!?_3?Y2mC&@> 0?/^`?L1f?P@?9?#{@?I`?W?R(+`Oͳ`L N`Gn>?9 ?F ?Fɀ@3{@Ӫ{@"!) EGw`a?`A>?QU?K i?Fs?;Y`@?, >8Fp :m2H~{@?4#?9+`HFp *m?J2 ?Fe:I`Kl?+ i?9l6G?Hn?_݀?> N b@#[`?C&@?'@@5Dy4 z >ᵀE[!?. ?Jm?$y0-7Zr`Ev@1*MO@J2 ?m??0_= Zv`Y`Eu?O?L ?:?F?'Zr` ?%3?@?T?{@?U?5+Kh`&ʠ?Zr`"!)"oӀ? ?G?L ?B|?Z(@?boӀ?M#?oӀ'Zr`? QTY ZOR\) NDaRS@Tx@Y`LE ?P?\?UL?Q\?5[!!? _aeGw`/^`?R(F3u RoӀ?EGw`?GZr`A G `H VUx&nt?1Ԡ7`&ʠ?E@?7`2(4G @-@?# '`??W`?9 ?8m ?2` i3[`7@LE YPp>?%v?PS@?\e? iV 0! ?M?SP?IYH R(?0I. ?P,`?L?ʠX TeN?PS@?]u?@! G@TXPE`WPY`#?@-?2`?5?Fʠ?{@?N`?HĀ?JYk ?9l?oӀ J @`S@`@?FZ !#{@?@p?B4 ? C4|`B~?!9UM B~?% 4yM1R`D[y?;`)[O> RS@?-b?5[!`0p ?9l(Hn?0?:ENa @-?Jk?*mFt;@; iPܬQ?*?YB?WdG?*kHM` ?A!`LeSPQ* 8?3[`N VtJkB!)T z @I. ?R(?M @?;1`?Gq@3[`M @?Fs?]d?YY?INᵀYF`? I. ?Uv?T*O`?F3u @O??Ho?@-# '`L@MD`GFRLE ?. ?E[!?HĀ?R`?G@?ʠ?=ZWƜ?3 '`?S?T#?Cz1\?ʠ?.`F HZCVɀ8m ?\?N`T=Q@?F ?XPE`?3% Q 5+?Y?SP?NDa?Do$ ?K@?K1`4#aak`aH`?@?^ ? WKg@=U= ^P*Q!`X?F I. B4 @55 R}c/T?:?`Ml`SQfV9?W`>(C4|`IW`>{@Il@PI. HK iNDaM,e?T Ϡ?YY?*M1A5+?A*?P?G`?#[`P! Xo53? >Da1ԠJggF0p?X?[@?GrP.RRS(B|R@R!)WE w?UM ?O@QTV?2`?V?<K1`?PW?C[`?5 wB})2mZr`@`Q`K1`?FG?So{? W@.-Y aMXc?vHm SQ ?@D΀N TR@> B!)U!@P`?=?O^`53Ry@p1A* :k?@?ͳ`?8Fp ?G3`AԠ!?$G ?ʠ?B  ?QH`% P@?<?O=b; i?P5?\@?YwB?:Eê{@?O?Le?A!`?U?S% ?H p?Zj?]?R4 ?C{@L`T#NX T@-?#% ?#{@?9?Dx?N ?S?D?'@?C ?Bê{@7@KO1Ԡ0N`?^`E W3`]Zr`?XD@?`+`?MUGw`W@?2H~?$yPI`< -1?M`?V? Q4#?Yl@?^ ?42}?vZr`0-B`6sA!`C%!?A ?N0@?@:E6G??ͳ`?; iA QREn`??`# '`>?@PW ?2m?B(Wrdx@XT#WP @?!?v?*k? >ê{@?1*2!)XD@RT`?I?QRFZ T?A!`?;@?BoӀ?=Xc?3[`?AԠ?9l+Y`=:C@KY`"}?E w2!)H ?P?X?RoӀGZr`4 z ?Re@?I2m?-?*k?"!)?3&@?4G ?OW`?aR?U{@?G?Yê{@J_X @pV ^ b@7Zr`?{@LeLκ9l"!)?>Da?K i?Eu?E@?5vEn`QfVB4 ? `S@V@D# ??@?Kh`?O?HZ?`92m8o ?8?'@?(?@p? 4y"}; iFɀ= ?1=XcPܬ?M ?h`?d`d@?P`?C% ?= ?Cz% YAVG>?%3@! B(OYmm`JmA5v?4 z ,E 6ɀ?#{@IF`ZkF*m8Fp ?+Y`?2`F SOD 34|`?>`?0! J2 Tx@MGqS@]'9X<IG@R|Xw`UM =1?8?C% ?2mF I@@! D4$C% 9 7@ ?> ?N b@?To$ ?4yL ?oӀ?ID`R*?`?@! +g@PY`KY`?/^`?.`7@?J?`Y`?PI. %v@-B(%3?`> i?A?Hm 9YMc`?$G ?7`E "`F @S% Jj?B|?E!@?#?E ?Do$ ?Z??Z?#[`@?R\) ?O ?'@?D#?S@?Q\?K?>k@5M ?+g@?L?+ i?7Zr`?GB\) U3`?G@# '``.`@?N b@?h/?_&@?LE :jP\؀?#% ?D4$AH`@5?J ?@5LXKB!)W@^kO `?*k?Q? ??@UKS?M?Ml`= ?-b?XFp ?R>`?5 ?5+<RyQ@?+g@?R@? [e[!d_ͳ`[h`]T[y2(;Y`VxI`p[gC%?*?4#?v<@C&@-2!)@! "oӀ?3&@?Gr?Ok^?<:H5+?W?X p1K1`(Fp /W`3[`{@>@?@?E w??Gr?^ᵀ?R4 6sC92m+`?v?'@?8m ?@56sH p?Dx?Ok^@-,e?SR ?P+`?WG?f?WGKSO@.?F ?VH?Dx?/^`?J2 ?A*?0-?O?T`?PW?S '`?Pf-1NDa?' `?Q+V?F?To$ ?_3?@I. M`7@?=b?-1Oͳ`V?oӀ?B(A@%3PS{@?,e?T4$?HFp ?K@?\?R  @\؀6ʠ?G3` E XOk^?O `?[?_3\? I. ?> ;@?53?\?S0=b1ԠR!)Ww ??U!@?B(8oK1`Z @_&@WT΀UTN@X@]`]8R|@?9Y?C&@?RR?M1?!?=b?L ?A5+?Gq@?V?X?LD[y_ W@?3{@?X ?HoEn`D1N Eu?KY`?X2Š?WF?S '`B(?>k?Mb?:k?7@?=b??0_?P?X?Na  '`>k1G ?;` iTM>ʠ?]b?RH~?XZ?k?ZYk \`Eu?+Y`?F3u ?D Ϡ?C&@?B()FsCH&Hm A* ?Ap+@?V?Q`?6ʠ?8m ?Eu?2}?; i?Q* ?En`5uDG "!)?I2m?IF` *kF Vʠ.kO@? ?Q?O0_(?>ᵀ?8m ; i1 ?G`?B|<#{@?P?X?J7@RS&@Q R(V@Jj? E @\<V@A5+QRX p3 '`?D4$?>`?Le?VJ?BoӀ?@! ]uc9g`0XU@P@=/W`?1?Uu?Q@oӀ?<@?U= ?J?BoӀ?R?U?K i'@M 6s?B4 ?A@+Y`Co{? ?< 5+`?VZ ?^k?Q!`?A5+(RRSJ?;@?Vt?\b?R\) ?"oӀ?e?G@Ev@?;1`?;h`H azc 7Zr`?NX G`@-?a?W<WFR!)?Ev@?He?F3u ?R@??0_2!)Na Z`S* ?0p?U!@?YO?M ?W`6sB4 2H~@?oӀ`(?? `?I?6G?A@?D z ?e?CH&R?J?\?HOk^Yl@V=J`Q@G4o$ ?' `?? `?2oӀ? '`@:%3?< 0-XFp ZVI@XPE`VGZ`aH`W:m6ʠ5u?Ӫ{@ê{@?J ?S{@?Il@?Pܬ?W<?![]l`Fs,eDyS[`WƜU!@@-?9 {@M8m ?7Zr`2`Md>`?#[`?B(?I ?OD ?Tx@?N`?3@?:?Fnt?=1?. ?/^`?F?Xm ?OIYO?=1?C[`;@'Zr`?So{?[Y`?B}P+`WƜOB4 ?# '`?QȪ?GqEuZ WW`?/W`WP Vɀ?Q5+?Ud 2H~> i?RH~?AO]VG?(Fp ?]1?\b?Pp?#Q Q+V E ?< ?&ʠC T#RRS1\?@I. ?= >?; i?J @>@p,e?% ?QfV?ZE?Pf?FntP@?@?Y@?N`$y=JU= F?*k?B4 ?N ?I;Y`WGR|?e?Gn>DaYc P5D[yR|Re@Kg@MbA@?!?:j iNkB}?8?<@?4 z ?QԠ?1\N0@FZ ?`? I. '@NX ]uXc1?.k1*IYA\B(E w: ?, ?Fnt?M?`R\) a+Vd a͕ @\؀?Y?Z?@?0-?C ?Wn?#{@Ok^ I. ?A@?< ?9 ?2(?4?*k?e>?oӀ?>ᵀ?R(?A*Ml`Jm?)?D#?S@?T`5vW`Kh` '`2oӀQRR|:4Gq73``6nt:jA!`B\) 4yQp+@`-TM*kA!`P5D#"!)$y;`A5+H2ŠE?5+4ZRH~?> ?HFp ?0p!2!)?D?]8?]@?Q?5 C&@QԠN I2mGq@@?U ?[h`(Vnt?@?T?M?Ap+@@oӀ?a`?i?D ϠQR0I. :jSH&A?8o?E[!?"oӀS>Q\IF`?E@?VG?JjZr`>{@B|@.?ê{@-1= Llf ?5?afV?c@?_]?SH&BoӀZ @W`SۥH-??<@?3[`oӀ?HĀ?T[y?D Ϡ?I2m?P.?' `?>Da?P!4 z ?N0@?+ iQ1?Md?N`?% RS@XD@? ?>k?C ?W`/^`? i? B(A@?53?QȪ?Vt?HZoӀ?2`?Cz?0I. ? ?B  ?Z @?VxI?B|?/ = 8?S[`?V'Zr`2oӀ?C[`?@?UM ?U= EvXAԠ?W`?A Gnb&@^:Q!`M`QR4 Da3[`0p?'Zr`?9IV=J`E "`;g@??P?0JW`?I ?D Ϡ?#8Fp 5+?E ?Ho?@5? i '`?;`?C '`?3&@?Cz?B~?-?R*?U= 6B}?L ?Q*?Ml`?[@?a@ ?_k^?Yʠ?Imm`?T?V ?5 L VJZ`R5[!QcOdj9YIP@W@MdLX[@V KR(NkP`Sۥ?H2Š?`?6G@?A\?P?To$ ?N`A*BoӀ?Ev3% a~ `+`L ?!5+D z Md>{@?6ɀ!5u@! ?ͳ`?+`?G?*mGnDo$ ?@?Q`?O?L@?&ntA* ??H2Š?Jk?T*O`?A N`>?Tx@6ntQfV?Gn?R>`?53?PI. ?Y@?Gr>{@?,e?C&@?6GA* Fnt? ?7@?1\?L?Y?U3?9Y?2oӀ?Q@?Fnt?@?Zr`?L>T΀b9V@?6nt?P?2(PfS[`% ?4G ?C ?R>`?=1;@>ʠ iQ* UKRWƜ]'9Y2mJ2 B`S[`VQTP\؀R\) Ud OD ?m?C4|`??:E?#{@Q PI. ?;h`?G@?7@?EGw`?2mMD`9>Ӫ{@7 `?=1?Jj@5 ?QH`?= &?P?R\) ?9Y?Sz?B~#[`5+< Z?aW Kg@?Dy?AH`=XcO `@`?@-?M @?R(?`! ?Ux6ʠ?1?TeN?`OD Sۥ I. ?QT?Y?FtA@\؀?> ?:j?)2m?L1f?8GZr`?A9 Hm :T*O`d¸b`Imm`?(?!5++Y`E I@=XcFntN i?E?%v5u2!)!=XcO@?+`7@RD#?4G ?/W`RRSak@S* ?9l?E +`TO `?M?]?S&@?S% ?_D ?ZE?HZ?73`?&nt>Ӫ{@?1?Il?Lκ?Ev@?@.?6s?Do$ ?Xo?b`?co{?Y?C&@?Pp?`&?R`,E Zr`>G@1?;g@9 F3u ?`6ntQ+V'@?<@?ʠ>Ӫ{@Gq[ .`?`?X?,e?= ?FG?> ?Pf?Tǣ@?E "`?EGw`?Q?Dx?eQRed c`oӀ?X?P\؀>FɀPzX@4y?7`?FZ ?Z?\<?K i?WG?]b?)B!)1?4y?1?>k?G3`?@p?7@?Fɀ?>`?,e?J @?<Il@@5?8#% Hm A!`M^^ J @??BoӀ?A* !5+2H~?,e,eO6ɀ?B`?EGw`?'Zr`C R*PpH p@5:mDyA ?)?GF?7Zr`HoZUQLӪ{@?M @?.kYC_&@>?^ᵀ?[?C4|`?Kg@?^?W@?8?4#?9?5[!?;g@C[`_M@S '`?D΀?\?d¸?gw ?d z ?U/ 3 '`?S% ?Qz;`2!)?&ʠC4|`>Da?92mGPW`+`do$ R@?DG ?S[`?B|I Y``5Xw`?-b?Jj?1 ??0_?JYk ?+g@+`@.Fnt?9?U[!?PzX@?YO?`\؀?D Ϡ97@>I Qp+@*?#?7`?WdG?J S]8E[!?4y?&%3>? :EM`M1JmQ5+Fnt?Co{?HZO`B`Jj?S?Un`992m?[h`?_ ?G@?Jk?P! ?D΀?CH&> ^ RRS?D΀?[=?bS@?`DC?W?RH~5+HFp ?>`?H>k%v?Q\?L?' `?`# '`KEh]`d8`d ϠWn?"}?PI. ?)IG@0p?6s?;@C[`D?OD ?Ymm`?Q ?O ?@2`@,`N`XPE`Q@-B}>`$G =Fs?!?O^`?N ?Fs"!)SR @`?.`?ͳ`?X?QȪ+g@@-?$#/@RUMG `<2(MbWƜN`D#TG VntR~YBUv@?2}?R  ?1*MXc]1`Sۥ??G W\ ?/W`?KSyQT*O`?Zv?bh 8m ] ?Vs?F 0pӪ{@>{@JjUL1f8 IMd?8?QT?&ntA@? ?UM ?Na R~Vɀ?K?Wr?;h`?C{@?Lκ?IY?S&@?Md?!?7 `?Fʠ?Nᵀ?T z ?@?-1?R(?FʠA ?+ i?T[y?M?Llf ?Yl@?Z?Gn? ?.`{@U "`YٗQ PY`:?0-EGw`To$ @D#Q? B~D[y.`?[=?c&@?S% ?-1C%I?*?=Xc8@! $y0->ᵀDG Dy5vm ?@-?XD?HQ\Pp?^`VZ Ho?VxI?T*O`6ʠA ?3[`?Q ?=bM XZR(K iEv@HO^`;@Llf Sۥ@I. C@O1 ?@9H pSۥ_ZkE ?3[`Uv@^u?!5+?<@b\) e?B  ?a? Re@?< ?Wq5+SA* `<@B\) 73`#% 7@A>ʠ?FZ ?P\؀?U)?VG?TQ`??^`SzY ?4o$ e?4o$ ?B!)?CH&?KY`?15+9 =Gn1 ?B|??Q ?H? >{@?X p?^u?QfV?5[!?9?6nt?v?B}?@I. E3C%5+E[!C?"}D#SH&= A@9?D?A?O^`?YY?45 ;h`>@?TG ?Vʠ?6nt$#C&@TVɀO-?7@$#P.!?V ?@ZOXw`? E?&?Zv?B`O]B~BoӀ?Llf ?Y?4yOͳ`J @DyI`?W`.`oӀ?Ap+@M`E ?8 G`VHXDLlf D#S4|`YYNX $G Kl[L1f9[;^`oӀ?N oӀJ @ E ?/W`IQz? `F3u Lκ7@?oӀ?4o$ ?9l,eJYk 6s?M ?U "`?/ 7@A\Kg@*?. ?Dx?Q ?B|?( U` `b(U?&ʠ?&ʠӪ{@?:?/ ?/^`?Kh`?P? iR~Kg@('@?-?8 ,E ??8E wC% ?@p?=Xc?)?`D`ʠ?VP?ʠYO@Ӫ{@H2Š!?Md?R~?R(?CH&?#?{@G@`^ F ?=?GZr`KlW`?KEh*m^7VG73`BoӀ?@! EvQԠ?`_3PW ?K@?EvLJE)2mC&@Q+VT*O`Q)?1 *m/ ?A?MXc#W]D`UxH5Ap+@Ft9Y[g@W??;h`?&ʠ?34|`?4G 2oӀP?XQ@J>ᵀ?&>ê{@TN@ZLX+`?@.?JvQ\B4 ?Co{ '`a`k`??A5+&ʠ?)2m?T4$?a?`-?C4|`m*kF< 3% W[1`HZ=;@E@P i?Lκ?53+Y`9YE30-?{@W`?1?G3`?F ?Q ?K@! H2Š?6ʠ?T z ?[h`?DxYV=J`?>Da V)I`F Q@?E ?RT`?@50I. 8 ?-b?L1f i] [l?0! ?\?[h`?JYk ?5u?B}?Fɀ I. J/W`'@Y2m_@W@V3u . ?R(a@c~;+g@??ͳ`V=J`Zc@`#Zvd Ϡ\b?3[`?\؏?PS@;Y`(Fp ?K@?D>ᵀT4$ZS&@{@?+g@?E ?HnoӀa+V\κ?2oӀ?J?5[!?+g@?{@B\) P,`Lκ4o$ ?2(?@p+`Q@QfVPRH~:m?(oӀ i?C4|`?P.9d\v;`?J?J=?%v?[v ?co{?Z?@?()?#?B?b!)?gs?MdJL@2(?+ iImm`a@QR?Dy?# '`A@{@?B  ?D z ?3{@?53?Q ?Tǣ@?N`?RRS?PW ʠJ A\?D4$?Z?@I. a&lc@-?J?B(?)2mFntP+`?Zr`P@T '`?TM?Z?+`XVt?B!)?`W ?a!`?\b?Z(@?R易??0_W`' `?B~?9Uv@aȪZ@K?Fʠ?Z @Llf \@"}?JEW `c:;Y`?-bXEaKY`?QU?aM?T z Ap+@P5 I. ?A@?A\(UGw`V JjSzMc`?H?' `a͕ `W HQ* Uv;`5P`Gn?@I. ?QfV?E[!ʠB'Zr`?' `Nk_D W3`L1 ?N0@?W?W `?IYGqH ?B~ R@!?PW ?L?,E .`):4y?ZE?i?b4 ?O^`?L ?Z(@?c?Gb!)b@3@?.``?1?@$yEn`?' `?S@?H2Š+`??O?KY`(Jj+`?E3?&Tx@\N`A5+?S%?]1?D`H pC% ?/ ?ʠA ?U?a`?WƜ'Zr`QTI i??!?Q?_?SQ @HZEv?3 '`?J?2!)?Zr`?5 w?SR ?\b?; iF%v?HFp Q? dyI?-PS4|`?`?Co{?/  i;1`E C ? ?Q?Lκ92mN0@Vʠeva?;Y`?DQ5+SH&QR`p[2}5uR!):?N ?OD ?73`% ?A ?@5N0@XLO]C '`?Jm?O?N`?Y(?B  Fɀ;h`D4$M1?!?A\(;@5+?(Fp <VʠF?NDa?^X ?bC?a\?``?e ?^:H[Ehv?S '`?SH&?M? U w\@9Y?BH~3{@TQ`Gq?A\?Q@?B?E ?3% ?; i?;@?:Ap+@V8?E@"oӀJ?G `?Mb?Vnt?]?a~ ?aU?L D Ϡ9?7Zr`9`zX@bh <?Vnt?Q? B(8Fp ?2H~?Co{?8?N0@?Xn?T z ?Y@?b9?0I. Kh`Vɀ@! Q `AI2m?3 '`B\) D4$?$y>`ZS%??A!`'@8m ?Co{?O@?,E &ʠ?ͳ`UFnt?K i?C4|`(?$G %3RG3`?E @B|6G$yIS>QCo{??8?mGq@?ͳ`?6ʠ4#Fɀ?'Zr`@/W`?F ?#% P! A* ' `#{@?D4$?Jj?3[`?3@?E!@?RRS?R#[`VntP@?E w?`A?Xoʠ?Zr`?Q* ?D## '`?E!@?``?cC<@?\X?A5+LκRS@#?:j8 NDaMc`J @Cz"oӀ?HZ?Tx?L ?Qz?^?Ev@ZkZGOk^D[y?9 ?-?5 ?YA?\b?R*?T`?B\) C@? ?R4 ?%3YF`_]J @?C[`?J @?4 z ?8?P?X?S[`?-b? `?Fs?] ?W3`?Z?b&@;@T[yc* [ iTo$ \N`Kg?)-?W`+g@FTG@?<@?N`?`OW`I2m!5+ ?$#?5v?Le?B4 QzS?$#?$#AH`9.k$#5+;g@Q+VXZ;`QTB|+ i=@.?%3/^`J2 3&@>`OW`= 4 z >k%3=Xc?>ᵀ?U "`?Se?Mc`?M ?Z(@?bg?VGE3W<$G ?X?R~N b@W)H ?oӀ?A@3[`Zr`?T[y?\X?S[`?C@?,E ?3@?K`?LX?:?,e4ZdQ`['@?!?P-?IF`?T?b*?T`A!`D2(EGw`oӀ?A5+GnR!)?;@?Ap+@2(?@`?M1>?-?HFp ?-b?)2m?A*? i-1>?#?5[!?Tx?X '`P`?? `?Y?@?BH~?-DPf?)2m?W@?R? )2m?F?X p?T#?D4$? '`?ʠ?PI. ?Y(?F 5+?.k@S@Qp+@ iB}!5+?@I. ??^`?=?D#?Ho?P,`?Pܬ%vZmWq@0?#[`?'@?LX?S4|`?9l?{@?I`?M1?*?=Xc?En`HFp S?.`?4o$ ;@?C ?U@?Fɀ?9 1Q?2(?^?K1`J N b@F3u @-?8o?HZB(S ?6?K1`&nt?A?WdG5+?DG @I2mHM1K1`/^`?1 ?. @,`LX?%v?;1`PWS{@?`?1@.`Ok^RN ZEV3u =bPW WZr`HJmJj&nt?e?CH&?B4 M W `>ᵀ15+BoӀIYQȪN JNa ? :mK1`> i?Re@?Le?E ?M?E[!?9 ?0p!?&nt?P?:To$ X p@-E ?Dx?b=?cH&??W`3% ?I@?Yl?U?HZ`E' `?L1fUK.`??0_6Le&ʠ?8Fp ?CH&?V?[@?J2 ?A\?F3u ? ?2m?E "`?ʠLX4G ?JYk ?M ?2oӀ?5 ?D`?!5+?ʠ?Jj??0_*m??W`?Kl?;@?4G KY`b QH`?PzX@?D#KTxP@?(?7 `E[!R|13% Q*?4 z ?\e6ɀ?Q?Il@AH`PWOk^FZ ?E ?Q ? E R@@-"!)[\5+?G@?UM ?U wD z U73`R!)Ud ?I ?U+ iU_ `YF = >5+?@WcR ZO@2(/^`Z`LE ?5+?@C&@Pp?, ?R4 ?vG`C{@9l?O^`?c ?TG 8??(QԠR( O ?@\؀?CH&D[yU[!UJk(?6?Nk?2`T*O`Q@Ft_ `];1`#?P+`?[H^N6?{@*SR ?Ev@?] ?>ᵀRaT`VntWw S@N ] b\V9oӀ[h`bMi@DG ?@\؀?#% KY`R"!)X`S%2`?`-?nK@?Y2mRR6?K?5u?7@?A!`;1`1?Ud ?U=1PW ?A\?BoӀE w>?D΀?9{@?#?C@?K`?.k ?Kg?R*2oӀCo{?D΀?Y@?a\?_k^?GZr`?C ?UL?R?I@?IY?$G C@S[`Wq@Fs?A* ?R|?LE ? AH`?VJ?\؏?W?OW`?%v?@,`?T#?2(LE IF`A5+?/@?U3?Jj:kHo3@?JYk ?VQȪ1\ʠ< B(AH`.k#0?!W3`VI@PzX@aȪ`G `H?D`[Ehe`%v?4yP4 z ?OW`?R(?@KY`UNkUL\b[gZO GFUI$G S&@WƜ"!)?G?Kg@?93% 3&@B`T΀4y?S>Q?Z?fP?k} ?R*OD ? i?S?P+`?P-?Kg@oӀ ?6ʠ?H?Ho?Kg?Imm`?$#7q@QR[Y`SO2}?9Y?G `?E!@?G?; i3% ?8?[l?^ b@?`-?\v;`?!?1?Z?EuORRQ`2}?S%?R\) ?`$y?;h`?PI. H2Š91*!?=?G@?BH~?*k0! #{@A\^X \@RT`b>`d/:OA*7@9ceg`@5?C (5 ?)2m?RH~?Tǣ@oӀ> Ӫ{@I`^N6`0U= 2H~F^5@SR AԠ>`?2H~?Il?[?^ ?F?2m 1?SQ ?ev?au?\`?]Xc?@\؀@-?#?8?&nt?/W`?/ ? i"!)C[`AԠ&&5+?-!?+g@?:m?/W`&ʠOW`_D ] ?VP?IY?0! ?H?PS@?Il@?)>Da>?OW`?MXc?1*@L-?3@?) NkUxG<&?AԠ?NDa?R~?Hm 7@&?B\) ?m?$#?,E S{@Sz?# '`7Zr`R4 9#ê{@?4#?0! ?8?7@HZRy@? `?!5+?@&ʠ?<@?GF?m`?&?,eHbH~_k^H2ŠXccYlB`oӀ7Zr`^5bRM1??53?1Ԡ5+?->Ho?FɀF^5W@DA\\c M1>{@7Zr`?{@?' `-?F3u ?R@?> ?Gq?@-Kg?@?D#?$G Ӫ{@?B!)G J@1 4y9l4y?ʠ1Q*4 z ?Llf ?@>G E L1f9 e?ʠ?vE3WGQ?B4 ?\?TN@?7Zr`?0p?>Da?9l= T4$8m ?R  ?W?@.R(^N6G@?73`?8 /W`U wT#`?!5+?!?I2m?Oͳ`?T?TN@%3K i.`9YBJabS@T@T@P@?6G?PI. ?C% &? `?E3?Q`J_k^GrE!@?9?;Y`@515+$#NDa;Y`?H2Š?9YNX ZP! ? 6GY?@]`SB\) -?VG?Pp[g`,`LXJoӀ?P?oӀL@?Jj?Ft?+Y`?E ?89U w?, ?bMi@?a`?Uv?4o$ QWGQPf9Y?@-?Ev?8?"oӀ?-1?D?E!@?).k15+>2H~KA ?!?@! ?C4|`/W`Llf ?oӀ?G?;g@!TQ`[Ft??Ap+@?O@?Hn?P?X2Š?4G C% ?-?J??ͳ`ʠ?73`73`A\?#[`?N b@?W?Md0EGw`AB!)H Kg6? ,eN XZQ@?9 ?N`?G3`?QR?G`?5^0@^`@,`?? `?B>ê{@?=1? '`.k?< ?J?1*I`XFp PzX@?02(PpG?CH&?O]?&ʠ?'@?O?C{@@`>`?/ ?6(PKQ@T4$?7 `?Q 5% ?WƜ?PQz`a P-5+H pT;g@*H3 '`?@! ?7`?/@?H?; iUv]`0?6nt2(?$G ?FGê{@4#?E ?]c`?S%JmTǣ@D[yXo_ͳ`E@;1`;1`?D#?,e@?Na ?T#"}?=1?UL% I`?A@?RR?QT?Ry?N`?Q?Qp+@?!C%En`1?? `?E?Dx?YB?_W`?DyHnU!@B\) ?P?X(`?IY? @.>ᵀoӀ3{@1*?k @I. MXcT@V=J`H p?D[yVtIF`?E@?N b@KA W`JR?Q`?PI. > iD΀C@Q!`P?0pWw BH~?E[!%3[c4|`T z ?AH``Z @R!)GrW`Fnt?M ?Nᵀ?7 `?. 1ԠTMS{@?'Zr`?N0@?< !C@K?T*O`?`-?UQL;Y`R~I`Fʠ;h`#{@B}/@?A  '`? ?\ ?Y2m>?8 ?E "`JYk Xm P`BoӀ?1*?B!)?@.?U[!?:mL RRSD Ϡ?/@?@-?1?D΀?Mc`?3[`JE]8Vd`?:?XPE`?\'?Ux?5+??VH?So{?B(?Ok^?Co{{@?@-?JYk ?Jk4o$ ?Wn?UEn`C[`?> D ϠV=J`-b?e0I. ?4?= 8Fp 8>{@?^`K1`3{@?? >@%vFPW @?N ?A =XcUWw 8m >ê{@@`?=?Kg?{@0p.k#?#% SR aSE3B~?# '`$y4#?R!)?GTS{@Kg[ iLe?J?O]?9l iA@N`M&ʠ?Jm?K?{@@`6ɀ?'Zr`?Fnt?PS@?B!)L@^ S?A?UGw`?+`C4|`?EGw`?X ?>k?> ?^@?a:?Z@?[=?RoӀ>FGT4$J ?D Ϡ?> ? ?E?]u?O ?I@?]?^ᵀ?T@?B4#Fʠ?!:@->@?&nt?C ?MD`E v?Xw`?Y?O?P`?!5+; i?Mc`?UL@R~:E?X p?_3?1\? `?->{@9*kE!@E ?HĀ?T Ϡ?1*&A5+S{@Dy?Jj?XE?U3?C% ?{@?/@?< ?7@?U w?H2ŠLE VZ !5+?R?:ELκ{@8m :kӪ{@?{@?3 '`?1*OW`XHZ?/^`?:kZr`7@`?H ^0@WƜ?@`?WdG? >Da?Qz?[`?<@?Gr?Xc?`A?_W`?S4|`?R}?M 4o$ !?S4|`?B\) ,e?T?]?F?\?n@?jT?XE?A*?ʠ#? ?B|?Q?E >5+9QH`Imm`?< ?6ʠ ?@I. ?Gr?Fɀ?J 9YS>ê{@?B}$y,e?5[!?MD`?PW ? E w-b?7@?B!)?#N`M`?.`?B`?2H~ê{@RRS`zX@Q@?3[`?P5?S ?4o$ 3&@?J?T`>?, ?VxI?QU?4eC .`?1*AOD  i5+0! 9Y@7`$#6nt"}?8Fp ?8?Oͳ`?Y`R4 ?B~?U3?@p?6ntB}V ??@?`ܬ?RoӀ/ J2 >ᵀ@Q@a@\ P.B?+ i?>Da+ iB4 ?Jm?P,`? O `Llf 5uFʠHn?4 z ?IF`!MbK?E[!?@-?7@?U?Vs?+Y`?/ ?M`>6G?N`?G@B(?4EL@-?:j?RRS?Gq@(/@oӀ#{@?;Y`?HFp BH~Y Q@9l?En`?Y ?> 3&@?Vd`?`+`?0I. ?QR?Eu,E ?E ?@,`Zr`S^u8m ?/^`?Q?HoӀ,E E Ӫ{@?= ?CH&?2m(Fp F a\ce`QfV@4?# '`M @W?JE?cM?T΀1 NDaB(ê{@9 E!@6I SAH`?!?{@"}>5+?M @?^@?VC '`_݀X<Ev@B`0-?2H~>{@? 0p?1?3% ?2m?A\?S '`?Il?0-?F?B\) FIl@?:m?A\#{@# '` i4 z ?` 3@PE3?R@?S{@#??W`?Qz i?Q ?Do$ -?1?W?^`?I @p>{@?U "`?T Ϡ?+Y`-1@{@5+?$#?1\?%3T`! Kg?C%?3[`0?+ i?4y?;1`?X@?_?Jk?BoӀ?[?Zm? i?oӀ?T4$?JFɀFt?A?X@?^a`?R4 2!)A@?.`?>k?14#YٗQ@?Xc?]D`>ê{@?;h`?T z @Ymm`8? 6ɀ?>k?AH`)R>`D?O?R3 '`Fnt?5 w?L?Qz?X@?R|?5?A?U?`,`?d?Ud &ʠ??CH&?&ʠ?(15+?Tǣ@?`?X?:k?P`?BoӀ;`?%v?S{@?Q@(Fp R@N b@JT z =d@c[`0?=1C%(Fp ?QȪ?M D`PzX@UxMd?,E ?G@?3% G ?ʠ?)2mJ d8b/W`?D4$@`BH~Llf \e_@N`H2ŠYOYBSR>`QYwB`.]d_ `a+V^ᵀ[>;h`?P\؀?1ԠKl8o{@?2oӀ?X?W3`34|`ʠ?bt ?c`>@-?Q*?U[!?*m?5+?Cz?Q5+?X2Š?QfV#[`B(@?6ɀ?NX ?HHFp PzX@?HĀ?P+`B\) ?^`?-bLe[`EGw`?0p?#{@4o$ PY`U!@QNᵀJ @!5+?1Ԡe0I. ?0I. ?D Ϡ?O?Tǣ@?B`+ i?8Fp ?W`?b??d8?U):j>ᵀ '`,E {@oӀ"}?C%?<@E ?FA@?{@?R`?bMi@?[v JS* Y@CzZ;`a0A@L1f?0p6ɀH2Š?Zr`?M?Llf ʠM PC '`?1\?L?I`?=b?A ??ͳ`D[yaak``um@\؀?=Xc?:?! D[yW@R  '@M`[lL GFV=J`UM T=SQ P-Zk['@PpUM QӪ{@E wZ(@GZr`>5+{@?`<@Yl@K?[?d`?@Il@??ͳ`?X?Q@?N`?Ho7`Q!`GZr`=1En`Llf @?:k?D#> So{< ?)0-FʠFZ KY`L1f; i?0! ?C[`>R(XDC@?. #% L 4 z ?M ?M @?, ?15+?Fs?6ntA*? `?@,`?Le?Il?SP?O0{@73`$G ?@5?Oͳ`?P5? :j?I?Wn?Gq@?e% ?Kg?g ?g?_&@?b  ?VGC@?@?'@HĀIl?G?UM ?/W`(?R易?`W?F3u C '`3% &ʠH pC&@?"}?`B`= !GqSR 9 ?JE?S[`?E w&ʠRyZ7 `?C% GUx;h`W `I m? i?`8'@?34|`HT=7@FsSeE ?C@?)2}B`A* + i?A@?V`?G3`@p>?M ?Co{?Pf?\?8m Y ULӪ{@?07@FʠA*CzQԠU@,`?Il@?N 3[`Q@C%4 z Hm A* ?. ?' `0>{@?B  ?E[!@M @?[?U@?{@?A?R(?-> ?3% ?O `?ʠO0_0?NX ?GF?#%3?@B(?7@?Y?W@?/^`>?P?Y ?UK?Ap+@?@?(A\;h`?7@(?8 ?8o?8Fp ?C '`?J?YC?Ty"!)&nt?;1`Zr`3% 5 PzX@"}?a@?`&0M`?<@?U!@?NDa? I. B}SQ YBTx@? ?S%?D4$L KY`?<@?9N b@Q\-1 ?:?Y?W?C 34|`?N0@?] ?A*CH&?>Da?R!)?4y?>ᵀ?Ww ?U[!5+VN b@?Lκ?RH~(Fp > >5+-1 I. ?O0_?SR ?5+A* ="}?B`?(LX?K1`?eL?A@5 w?bt ?a~ ?#?8 R4 Mc`= ?N ?Y?+`L?6R@ZŔ?4?VI@@S9 {@A(Fp ?4# ?_0_?`?X?>k6G??0_?AH`?`?Q?Zm?H2mPU w?1*?LeG`M @?Il?MbZr`?53?O?/W`Md[O> Vɀ?,E ?73`R@4G ?T`)P! ?+ i:O?:mQ!`Do$ ?M?cQ ?_?@E'@;g@Z\@`?3[`5 wP?XFte?9?Gr? OLe?4#?2(34|`#% ?7Zr`?=bKY`^73[`?RRSF @= UM Q*7@?1 ?G 0! ?<@?Ӫ{@?'Zr`G `> i?T?Il@?Hn?Yk;g@RoӀXEH??^`-dycC<@?3{@?R(D z _ͳ`W9?-1?C{@VGQ?C{@?_ͳ`?b??XZ?QH`?Qp+@?'@3 '`?E[!?@,`En`Co{D[ySO/W`?>ᵀS>Q[Y`?7 `?L >ᵀ15+?L?@! E!@S 73`?X?YG3`Wq#{@?9l?E@?E3AԠ6G?N 8 E ?J?dB?_ ?1>{@?1*=1R@M = A5+JjN`Oͳ`E "`?8Fp ?N`?#% Ap+@;h`E G? ?6>`F?/ ?O `?$yJm"}?=boӀ?*k?E wA* \ Vɀ?!5+?Y ?NkB|2(?:E?`?@p?)?? `?Mc`?+ i"!)?A@?IF`?Gq?[>?c?[ ?Tǣ@?c~;?c ?Il>ê{@?`G ?' `?O@?U w?Il@2(RyO]?Il?"!)VJPW?0Czb=`a@P?XG ?E "`?Qz?O?44#,e?0p?F3u ?QfV?R(?S>Q?PY` Le?@M\:@N`?% ? '`?0! ?0QȪWW<Ml`?C ?#[`K1`0-?UL?e% ?`@@N ?!5+?RT`?V ?M>??5[!2}Mc`8?F ?0! L E w3@@I. ?&?Eu?/ :EDo$ Q@XnD#?AԠ?3@*m2(KEhHo?2oӀ>X`.J @?B(?GF?@>3 '`J*m?15+FGTG @.?L?[;?bYC?E@?K@ *?7 `?FG?D4$?73`?&nt?;`?F?:E?G?^5@?W@?1\?QȪ?_D ?P?H2Š?R?H2Š?@\؀?O0_?W`?Ud 5+R\) =b?B(?G?;`?$G ?Co{?JG `_׈Mb?6s?@-?HZ?Vd`?^ ?a?_?Q+VGrE3;Y`>{@?@\؀?0p4#B4 Q\YF`H?GZr`?U?L`Dy?2!)?V`?/@XnI@?Ev1WG3[`?Xm ?\?En`(?BH~?Zv?S{@?Zr`? :jHn^:4o$ ʠ-13% P-aԠbSۥ)2m?G ?)?E!@?D΀v6GImm`^kVH?-b?(Fp FA@?7 `?6N0@b~`b~T΀oӀ?7@>{@ iE Y(R\) 9 B4 :E?4 z ?Ho?B  R*g1]c`?O?W`A!`ZG?#> i?#{@?8?L ?Y ?Ev@?A* ?R4 %3$y?B|?2oӀ?B~?Pܬ?6ʠ> i?F3u ?V ?Wr? QȪ$#?IY?2!)/W`%v?D`?[l?S '`G ?+ i?Q+V?K`?-1> i?Fs?aH`?e= ?Sz:EHĀ? `7Zr`>ʠ?KEh?X?YDa?=1Kh``B`QU?8m ?7q@I@NDa?K`?`@?MXcGZr`K1`Zr`KEhhD9?9? ,E A* [gg c`@\؀?1 D4$JYk >DaI; i?@Kg@OW`?@`?9YHm 4y?D?=bG^``a YRT`1 GZr`@! 9lR易PY`!5+#>Ӫ{@&nt!<@S* Kl?Il?X?ʠXoP-/W`B(Gq@9Y?B}?_?RT`M -1?Q\?:k?%v??A*?R(?$G 9 ?;Y`?SQ ?T=?/ E@?Dx?oӀI`ULGn?S{@?_?Ho? ?A!`?M?@pE@R!)?6s?Z?K!?4G ?O0_?Mb?F3u ?F3u ?T#?\@?M? i?:j?O `G` i8o7q@?Fnt?PzX@(PI. ;g@;g@ZYk aH`Z2 HĀ5+A* Uv6s?I`?@`?+ i?D#?S{@?;Y``5G@Mc`Y@R(#@Y`d@R@KRS@HFp TN@JE?Ap+@>@A\?? `?Fnt?,e?EGw`?AԠL@a+V`?XRe@Q* Q\?. ?@E "`7`?C ?2(?E ?7@?+g@? I. $G B!)?{@?I`?0-A`?P@?P@?'Zr`?8o?Cz:mRRSOD $G ?U!@?V iG ?C4|`?&ʠ?4G ?H?<?Mb?V?%3DG ?)?L ?L ?=1`?. ??W`?2!)B`N`"}?5 w`4 z ' `?@-?W@?N 0?$G ?Ww ?X<?P`?QU?P-?Jj?9=XcCz+g@HMd?=Xc?C&@JPI. ?@?F?O@?M @? iEGw`*m?@I. 15+S% QWZE?8m ST)2m?1 ?N ?VxI?T`?I`E35[!\XfHa@ G `?> ?1ԠQfVS%7Zr`)?9?JYk H [>LXPI. VD[y? ?E ?R(?!5+Wq]8QF3u X<Vnt?J?W.k3{@?N ?Q ?B~Zr`92m?A ?LE ? ? ?2`BoӀSR ? ?Ap+@?G`?B~?RH~?Sۥ iIC{@2oӀ?H p?X2Š?C{@-115+=b?E!@?G@?Do$ ?2}FJ2 ?*m?= ?5+?!?/ +`1*?Fʠ?YC?V?J2 oӀJm5v?B~?8Fp ?Q5+?c?_?R(?Q`?W?[=?PoӀ@?!B4 Ok^GOD C@?A@?= 6ɀ$#?3 '`?L?_ `?_u4 ?A5+/@?F?Y?G@;g@TxW3`\N ?A* ?15+GJk, ?S%?\1f@-e`fB5cj _VJPܬ1 ?'@B`MXc@5A@R``@Yٗ?FG?PW K`S '`/^`> I. Q U?F?^ᵀ?Fnt2m?@WrM?HFp ?L3% E?(?C%5+2!)5+2m?9l?PzX@ E R|:?6nt?$#?<?J5+W@[Y`B|?07@R; i?FG?73`9?D?So{?^Da?Yc ?A5+?P?`f?P@C[`3% ?T?``?M MFʠ?Oͳ`?J> 5u? 2H~'@?/W`?, ?G3`?JE:E:m?JE?? `>?R  ?Y ;h`JYk @#[`?9?JYk ?Kh`?G`&ntaH`a*m?7q@J^Da[@?? Sdc b@Z?L@IU!@S TQ`[1`M17@T4$^u_]U@? E eXEWnRS&@Gq@S[@?0I. ?Yٗ?@-?!?+ iHo5[!?V3u ?RR6ɀFt?9 ?ᵀ<@U[!?3{@?['@?B4 ?J?ʠ['@V @1 XD@_&@>ᵀ?V=J`?WP ?1\;1`Llf KEh?Fʠ?`A?_k^?Y?Yl?Qz?#{@JJk?A?4#`5`@?1 ?C{@@5> GFVPC{@?#+g@?@-?FsHZ:E?V ?L3@?Zr`?=?3 '`? i>DaR\) ] ^&H 9I?"!)?% XĀT4$!HnC?C% ?BoӀ?7`?J @"}?@?Jm`XTx@?"oӀ?)2mTgi2m]Ux\ O?{@?2m!D z PS@IF`Uv`?XTxS `] TQ`P;h`B\) Mc`#% .kNDa0'@O ` E ?Ev@+g@?!?Pf2mP7Zr`?Zr`?#[`?Ho?SR ?So{?T?P-?'Zr`Na Na ?=Xc?M ?!?FG?W?)2m>k?H ?C%Gn;`?,eC@Ww Q?Zr`?UK?Yc ?Q ?I`oӀSeG?I?S ?2H~Fʠ;Y`?@p7 `]8D`?H2Š8oHo?;Y`Q@E!@P5Z2 A %3R(= ?Fnt? E ?Zr`?QȪ?B\) 5[!(?2m?I?T z ?*HZK`D4$?D[y?[@?Q?D΀?:C[`N0@@0-?Fɀ?Uv?<?`?N b@K7`>ê{@E3M ?5[!?Q+V?5 L1fafVdy^Da[@Sz?Il?[ ?8m NDaT[yB4 ?7@@HnA!`R>`\@Jm1ԠD#= ?W`{@?R?Yl@?W`?Nk?.`4#QVʠ?8Fp ?a~ ?U>ʠ?)> ?L1f?M @2}8o?0-?9?I?S?L?5v? i?BH~?[>?[b?"}H2Š0I. ?,E *mTyU!@?Zr`?' `U wJj?M ?NDa?B  ??W`C{@PW ?@?;1`?% ?Jj?F34|`?&nt?R@?M @?D z ?7`FʠSKEh;h`?@I. ?Re@?Da?P+`P-P5D ϠVZ W>@?= $#E ?# 9Il@#?Z?W8m T[yL@? ?Kl?FZ ?Jk?Ml`7q@O ?0?Fɀ?"}oӀ? L D Ϡ@\؀$G ?H ?PY`?P@?Zj?SyQE] TQ`7@-AA**k?' `?EGw`?K1`? iC@>{@?)E!@?W`?^:?PS@I`:E?3[`?4G ?P`?Q@AH`T i?XD@?dt?deN?Uv@#% Q\G?I2m?Zk?H2Š$y?En`?R4 ?> E ;h`?8?2m@?1 ?-b?%3?5?0! ?@! ?Q?PS@?Ev?34|`{@?9?T z ?P! ?A ?J?9PI. W@PM1B|@E {@+Y`VX?`?Gq@+ i:k?7Zr`?B(?7@?IY?QȪ>QR92m?J HnU "`Q]`` L @Jj?#{@?XPE`?XPE`?8+`?J ?\ ?EA -1?4o$ ?1?)?Ty?UL2!)Il?,E ?D Ϡ?> ?'@@NX R!)R(:m{@@`?%v?U)?IYL bt b`A\?M`?E ?%v1>?9.k;@?Ok^?Xo?4G ?0-?Uu?Gr? !5+{@0p?N`?XD@:[> ?N0@?Q*?P?S* ?O?{@HZ&ʠ?Llf ?F ʠ?A@?R?Lκ5uK@?Dx?=15+5 wv?F?Zj?]?E@7q@=1T``C '`?G `5[!E w?G?K'@?Zr`?D z I. N b@@`? >@PY`c4|`b=`4?QfV?+`P`KY` i?15+?@?>`:kE?2!)??W`&PܬPܬQMl`5+?2!)?ʠ?@\؀?U?N >kH ?D4$?T?9l>ê{@?@\؀?5 wH pWdGD[y?Kl?C[`IYO0_GZr`K1`;1`3% E@:k:A?mAH`] Cz?HoӀP@\:@aD[y?I>E w ??(Fp ?*k6s5 w?D#?B}8o??Tǣ@?Q`?C4|`?A 4o$ E?P+`?]b9 ? '`P3@4#UR4 ?Dx?b/?a ?@@?Lκ?K@C '`R@J @Il@K iB~:k=1A :!5+?&nt?>ᵀ?MD`?Zc@`?YF`%3Pf?+ i?#XSA UKNk?Cz?2oӀ=?I2m?[b?+Y`W@P@?oӀ? I. CzSyQN ?4#?TN@?8Fp V\:@GZr`?&nt?B|?E[!?v E ?L?N `Ap+@5?Dy?P+`?K?T΀?\?X@?L5+PW Q!`,e?)? ?0! ?-1A!`\E a~ JE?CH&>ʠJYk C[`R易_&@S* HP`FGEu9?J ?eS{@?? ?]D`?5 ?0_C%T;Y`?DAH`XD@Fs?%v?= ?5v1Ԡ@5;1`S@_Oͳ`?QKg@?"oӀ?Xo?bh ?QԠ i?F3u ?JjJ U3JX(`ZO?0p?Zj?= Xm [=? `?53?6G?%v?=?Jj?)?G ?^a`?d ?CzKlPܬP5+?IYC '`]:@Hn?Zr`Q5+c* a*VtPpKEhFɀ@5>?@! ?,eG3`R>`;`?4y?BoӀ?I?BoӀ??D#?W#?Zr`?5u?ZŔ?Vt$#?7 `?`ܬ?^`?3{@C@?W`5[!MbWRyEv@D[yO0_]u`B4 ?I@?5 wE ?Zr`H pWnGF@\؀QȪV=J`\eP+`?Q?K1`*m?Zv?e?F+`?5+I@Dx?D#?73`JjQBoӀ?4o$ ?Kg@?> 5+' `JZYAN 0?BH~?P@?G3`?>`?FZ ?E[!?;h`?5 ? E @?I?RR5+;Y`?L?N #?5[!?DG .k?$G ?L1Imm`?Vs?kv ?b9=1Uv9`B!)B|Zr`?Kl?S>Q?K`?U?_?E@KlKg@ I. ?F3u ?N`# '`Yl@^5@W@SR R易WP ] \eVd`SۥMD`3[`? E ?Da?8?:m% 1 ?@! Il??QT?SyQ?B(?P?1ԠVE ?Q ?? W)H `?XJ @>R|e6f cZRY`]dA?B}?FG?Ho?A5[!B(#53Ev@UD z ?Qz?D΀B~?D Ϡ?S I`U 0DxS ? I. ?U w?B(KlR~ ?H ?A*?*k??0_?E3?ʠIR*G@>??0_?1*!'Zr`?. ?=115+R(B!)?U?_3?)2mPp?&?Q?D?D#?BH~?!?OD ?Z;`?B(?{@?U "`?f ?hE?W< :kP@En`?G ?G3`?R\) ?< 9l3&@AԠQ!`:k?8o?4 z ?B4 ?QR?6ɀL B  ?O?\1f?O0_/^`DDG F ?D#?'@?2(?TM?RR?D΀?9lMD`[@HM``N]'9?b(?a+V?6s> K`K@?' `? ?.k#?oӀ?9??0_?ʠ*m?# E Q@[gQ ?C '`?;`>5+?:j?L?J ?H ?% @?G ?Ho?Ev?H?B~?GF?aȪ?a* ?# '`F3u @.Llf K9e?3&@ iPS@Q II$y?/@8@?T?UQL?34|`?I`?bC?d z ?Xn?Gr?;`?(??N ?T[y @?D z ?A ?Zr`?=XcA* YBB4o$ U@Sۥ?V=J`?Xw`G VT?9 ?X2Š?A\B\) H Un`W `' `?B(?-=XcFɀ??C>0I. N a@ P`?Ry?I@pMc`P5 ?I2m??@6nt0?%v?4?7@?4/^`UV?;1`?Y?=Xc>`>ʠ?+`?@?]Xc?[EhA\Un`?6G?U[!?? `?, ?V)?^ ?M`?0I. ?HZ?Xo?X?J ?(Fp 5vIF`@-= UKT Ϡ?%3?DG ?'@G  i?W`!H7Zr`?; i?L@?R*oӀM ?Q!`?`zX@-bR}@`?To$ ?Mc`?0I. ? 1 0?=?HĀ0I. C '`?;`En`?:j?-b@-?0?DG ?#% ?C&@-b?? `>Ӫ{@S '`P@?G `?Vt?53?8?Zm?VP?8 ?2`?A?L ?N ?Il?SP?Qz@\؀J @YCA\?J?1 6ntG@[U0K`ZS:k?K?_?[`?R?D[y?@?E "`?Vڞ@??0_IP5P@ ?ak@?d?# '`7@?` ?h[`?QfV?, ?]u?e `?Y?C ?G?XĀ?a@?\lf ?P-?E "`?B}?Md?=XcU[b3 '`?%v' `34|`D Ϡ:m?*k?0! ?C% ?RoӀ?NDa?@-B}V ?8 ?]8?< ?Q@?5 VsRoӀ?6G?P,`?G `?+`?;g@?P?I`4yM I@R\lf [TE@?#9lJIl=11*?,E ?)? i-1PfOD ?Zr`ʠF !5+?;h`?=?@,`5u?C?I`34|`Dx?*m?92m. ?m?Pܬ?Q@?@;Y`Tǣ@D`?8?53?2!)% Z`] @> ?D#?Ok^?$G C '`?8?:EYY^5J N`P:E`?L1f?]?W?Qp+@?Q?>k?%3?7@?0_VZ R`T4$SQ ?>k?Z?H?<?`I. ?e?P`?4G ?YwB?c<?^0@?S% ?@`?3 '`?Qp+@?Zk?[>?[?Qz?C@?AH`4 z Na Co{5 ?4G ?HĀ92mK1`?8?Ok^?S@?YF`?GZr`*;Y`B4 ?1?XD?W?U?]8?N GqI`?1*?G@?J?Ty?YA?[;?U@?ʠJjB!)P,`a@_W`U3Ty< ?;h`6sV3u G@?E!@?L>5 ʠ{@@.Jk?^`6sRR]`XcEmHĀ)?Kl?U)?8Fp 3&@5[!3 '`0! 8HB}@QȪeLb^ᵀ7 `92mHm Rb>`aȪ5+?Z?M`Q* Sۥ?O ?TG KU6ʠ#?; i?K?)2m?e?G?C% ?5u?-,e!> iS* _ J ,E L<?L?Nᵀ?,e?1*?BoӀ?)?#?D΀?N`?T@?ZO?E w@\؀-?5?Imm`?QU?oӀHĀ?4y?IF`4yQ\FG?E[!?P5IYT`?A@?Qz?G3`?Oͳ`?853?4#?I`?C&@?OD ?VxI?T@?QfV?D z 3 '`NDaJm;h`?;@?Z?@?Z?E w?A* ?92me?6?9 =4y4o$ RRS?W`?@>kTo$ ?!5+?[=?W@? E JkCo{/@{@?1 ?.kE[!UuT@Vڞ@So{0-N PS@? '`?Oͳ`?Fɀ>ʠEGw`A@?2(? iK@@p?= k?=?P-?C&@ê{@0! =b?@-?TN@?K?A!`?I?C{@>{@`8RSD4$??Q?J @B  &nt?KY`?@-?I?\'?Z?RRS?34|`M`G{@A4y?Q ?W`?IF`?+g@{@>?&nt?@?M ?&ʠT4$JE?KEh?3&@P`0I. +Y`SBH~?@5?I? iRe@Kl?B!)?=B|2H~?@,`? E PVsQ+V> >DaK+Y`?F?9HPY`# '`G5[!?HZ?1\Mc`Ml`HSۥO#?-1 JjR4 i?P-`WI2m?=1?Ho?Na ?E "`B~R|7`?>ᵀ?B4 ?>ᵀ?"oӀCz6s?Q*?W `??ͳ`eC{@J @;h`PY`[gA@?Imm`?BH~? ?5+<\v;`cR :j?`?]@?7q@/W`:E*?:j?Gr?9Y{@?!?1+g@53(Fp C >Da"!)=b?@?Ho?$#?D?Xn?(Fp B}?Pp?[`?H 2`QTU wP\؀E "`?, ?Il?%v'@?B!)?S4|`?O ?0?5[!-1YAIl?Yl@?SR L5u?>k2!)&ʠ?>k?E37q@\R@?A5+?'@UGw`XOͳ`?ͳ` I. @.OD :k? >kQB`?< ?KEh?BoӀ?FG?P@?4@?6G?VZ ?A LXT*O`QԠGn?"oӀ1Ԡ0(E@8m ?Jm?G3`@I. I9%v?`=XcYX p3[`?.k?4y?Jm?Jj5+? i?W?[b?IF`?P@?Z?OW`? iC&@SۥS /^`?Kg@?V@?Sۥ?E3-B4 ?2!)?H?7@?;Y`?C@?B\) ?L?D z 1ԠC{@Gq@H >kD4$7q@?>`?;h`? 53X<O^`?N ?R(?T z ?Y2mDybA\?F3u :Q5+QH`TN ' `?@3{@GC[`>?H ?PS@?538? i?5 wHnQU?0-?;1`C&@{@?Il{@?`C '`@?Y@?S@?QԠ?i?d*O`?8 i?2H~.kE[!?5 ?5?R\) ?^`?^Da?V3u L@?4G ?Tx@?RRS?T`?6GQ* K i8PX pYwBG?HFp ?Gr6GUM T[y?.k?4o$ ?(?LB!)a0A@B\) ?< JYk Q!`73`?KEh?[>?FZ 6nt?oӀ?Imm`<@?RS@?Z?HĀ?@,`?LE ?%vQUSCH&?=b?:E8m ?M ?5vGFDG A\92m?E!@?P?Zr`JSyQG@?C ?RRS?@5 w<CUuVHê{@?L?> DD?C% ?[ ?V??W`#[`? i?L ?Gr> =Xc?Sz?a?O@, ?4#?/@?`?B  ?J?Ml`?4y2}?oӀ?9 F[=C%?Na ?!5+WZr`:?_]?`A?8m ?e?U@?Ud ?{@B~R(V?ʠ?\؏?`@?Z?@?=XcC{@?e?G?8m ?;Y`-bQ>?KEh4ULW `F ?1*0I. A*?Il@?Lκ-? MbLe?=Xc?2}G `??9YKg@Il?@?E[!?`-?gr?S?+ i?VG?Vd`4y;Y`?U?b?U)?+Y`?Zr`QԠ]`T΀ I. ?7Zr`$#?YC`fGZr`?E "`,e3@?F?Ev>5+> B{@?4o$ @BP,`OW`> G@NX ?E ?Jm?'@K@ZR?I@?_?V?@,`?>{@?#{@; iM`?, ?Z?@?Vڞ@?;Y`?{@?2m?6nt?P@?W3`?O?53?9l?R`?]Xc?Wq@?=1?5?4o$ @O]0?;h`$G R~UL@?B(??^`53?'@?Se?Q? ?Do$ Zr`M + i?Mc`?C ?2!)?:k?G ?5+?"!) '`?&nt?{@;g@?%v?>`0I. 6G i?W`\E Vd`?X<?dB?F =IF`Jk??7@3 '`/^`3 '`G/W`?!Zr`?G?Tǣ@#[`J2 ?GF?YO?H?. ?@.?F?2`7 `3{@Jm]dZ?H E ? i?3@?\e5+deNFG?SyQB  WG/ >Da?@@6s2!)A EvLK i'@ i6ʠ???0_{@P?XXĀI@?H p?Q@?4G ?{@>ʠ@I. NkR4 C&@?Jk?Q`#% 7@?>k?. >@?R}?WZr`ʠUN`?;h`?S?;h`D[y=Xc?5?OW`?Vnt?T z ?A@>Ӫ{@?7@?P?UK$y?S7q@Wq@G ?Q+V?X(`?W<?7 `?=?Z??Imm`En`%v?@?6s?,E ?)?3@?92m?vᵀ?S '`?B  '@?#?4G ?+Y`?L@?Uv@?eTeNUM1(?D4$2`?R?2!)ZŔ>{@?Vڞ@E "`WG;1`GnQ AD#JEDxD#B  A\;g@?%v?"}GrJ @+`)2m@5@p34|`5K`L1f?.`?J J =?;1`?Na ?*Ho?3 '`?\?L-1?H?VxI?"}R*RT`?>DaD4$Vs@! ?Cz?W?b}?^:?0pB4 ?Ap+@?b@?\1fC%?_0_?HZPzX@:E?&?5u?; iH 9l?b?afV$G v?LE ?92m? '`? i; i' `?E@?DG {@ i>@>kKR|aa@?)H pG `?.`?@@p> A*Na B|?F?XĀ?EuJSHm K`V R!)?1*?S4|`?A?;@?\?Z?(Fp ?C% ?X(`?&P-B`#[`?#[`?A\3{@?F ?<F3u ?DG ?T7`:m? Q!`R@*kKY`YٗO@;@@`LκK i?ʠ?+g@LκQ ? I. ?E?@?B\) ?mPY@G?N0@?_M@?R(?oӀ?@p?T#?G `B\) C?Tx@?e ?XZE ?9?Yl?Z?N0@?8Fp ?GF?J7q@H??^`?RT`?Qz?T#?E38 =1?$G ?S[`?UL34|`A@?Uu?[@?Cz?#{@3% :m8Fp ] \κ?O]?W53??MXc>@?oӀ? iUd S '`FPWQU64TQ`S@?!5+?Llf ?;@#% AIl;h`+`AԠ<@>5+?= ?D z ?DG ?M`?JE ?@-?f?^5@S&@VxI% Q5+X p{@?Md?J?5 ?E[!?P.?5 w=?A ?E!@-1?A!`?@I. VsS?34|`Dx\C%?@`?oӀRoӀYlk?C[`?15+?Zr`?<;h`?%39VPʠ?\?Xn?:E? ?Imm`?RT`$yI ?@I. W3`E ?F>5+?Pf?aj?G3`@5?@?\1f?a?YӪ{@??/@<S% RAH`?@?? ?(Fp ?ʠ?B\) ?D z ? . Ho2}?Y?UN Q 4o$ V)V?>`?X?S[`?/ ?C '`?F?@#?C%?`:m?I@?FZ R(H p?E@6ɀUu?@?W3`?MA\X Gq@?Imm`?O^`?Fʠ?RRS?>`RoӀM @?;Y`?N ?Q?:EAp+@ i?`R>`9?VI@?4 z YXT#V O@N P@CH&K`Y JYk ?F ?C{@2oӀ?B  ?0I. ?<@?S[`?Nᵀ?A@?I`?2!)0?= ? W@GZr`?\?_ ?:?= ?XD?Wq?Jk?Nk?FJ2 S?!?3[`-b?S@?d`d@?Tx@3{@HoG `?`?Eu?Zr`FGMl`Na . ??^`@. i>ê{@`?(BoӀ>ê{@?PY`?=1C 8o?3 '`?K?Tx?`?^`WZr`?T`?RS@?; i= D Ϡ?4?Dx?15+?=15u`-X2Š?=Xc?L?L?M?3% ?3 '`>SP=b?SO?1\Kg7 `Pܬ^kFɀ?/@?8Fp ?EB4 c`[$G 6ɀ-b?Ok^?OW`?. ?I ?W@?J??< ?Kh`?OW`?SQ ?> Q*Fɀ?XFp ?]č?B!)?B?Ho?0_I`?FZ ?S4|`?53?5v?A@Gq[H?+Y`?-b?&/^`G3`?#[`?S% ?Kh` Eu@I. ?= ?E@9 >Da?Ho?DG N WGPP5FZ ?E 0Le/W`'@?HZ?Co{S@YVڞ@^ /W`?` ?T z /W`>{@?Hm ?T?LeE ?*k?F?5+?2}?R`PUn`>ʠ?Y?P\؀I M`?;1`?SH&?Y`?a5+?Wq@D΀X@6s?Fʠ?H?Il?7 `7@5[!8Fp Dy?#S '`A\?C[`>DaG3`?Q@?[=?N b@Oͳ`@?9'@> i?O `= Y?(?X?Z(@?b!)?PWTǣ@5uL ?{@?`@?]?Le?S?Pê{@3{@?;`?TeN?S?:m/^`CH&> ?;`?Mb?FZ ?K`?@O `Tx@?+g@?Pf?L@?O?1*[ ifc/V@0! ?J ?MXc?Fɀ?Uv?\<?O?'@?0?L?SQ ?ᵀ PW ,e?a0A@9 QH`?0p?YC??0_JjE ?Imm`?@\؀??ͳ`?P?Fnt? `M.k?1 ?"!)?@13 '`KVB  @?)2m?;@Zj^6`?Cz?QU:kMl`HnAp+@> JYk 5+?D`QR_3??O?:?M ?1XLʠSPL1f?K`?N0@?L ?YO?J < 4 z ?@-?Pp?6ʠQULlf ?A ?:m:j? ?Ml`?QԠ?K i?7Zr`?4#?I?IF`?'@+ iBoӀU_aZ Fs? ?%v? ?< ?Nk?IY?53?1?Ho?Se?G3`%32`E )8Fp CH&?5+?SQ ?9R易JG`[=UQȪ\K"oӀT ϠH?@-1\Fʠ5+G@\`][W[`Oͳ`/ TeNKl?UL#Kg@"!)?Mc`?6nt>?To$ ?WƜ92m^0@[h`Hm #?5+E Zr`3&@LQ &?D΀#[`T=P+`JmOk^??:jLX5u?S&ʠ`R~?,E ?1Ԡ+Y`K`E #% QzYA2H~oӀPW Q5+WFaTHm ?;`O@[@MbG `?RRS?;1`KE[!??=Xc2}YwBF?Y@?T*O`A\?RoӀ?I2m?+Y`?B~?I2m?B`?(L]UGw`7@?W`Gq6sA* XcWF4 z ?&nt?e?15+. @-7q@?7@?0-%v?@-?Qz?V@?`@?T`?G ?UL?_u4 ?6ɀ#?4# I. ?-b?4Hę9?ZF@?[Ry*%.~:x^k S`"s`ROa`?!6r+ d?S&?G8P@@`J=Q~ UR܀Q)QS3Q$R&x[ [>@IBXG8P@?0d?CY@PTՀ`R]}G@a cb@^/T>~JI@V^[Q CEę@?{?W ?[@?/D@?1~ ?IcH(ZOBkҀ?>@?3 ?BX?*? ?'8P@@`Ex ?{ ? h?5 ?Xa?a~ ?Tn4Fm`?D ?T?2kҀ ?0F"s`A~ ?4G^?X&?Y?B0aCT`YM?<?N/?C ?K?E6 :g`??ZZ`?JF?:%?X' Y-?Y ?[?M>ęF"NW<RSO)c?V,?ZѮ?=N`S V`?:?X# ?3 J=>J?F ?L@?SP˸`?I?X ?4?n?ZP?NW<W8P@Rs`/D@C?9?I_NE\?P#L@?Jr ?K- ?T3?"s`+>@?>/&̀R:I@NO.?>/?=+>@Ep@JdEp@78P@9.~?VkDp`Y`]Ѐ\@[ӀYN`?@:PaBd Zg`ZWO112?R, ?[H?2s`4?`IOM@Y0 -?Y'@?_ ?R, ?6̀?3{ ?5e5\I<{?6"?T ?T`?6̀?4?39@?*?G`?TG^?D`?!)? d? Kz?>@?V ?`ڔ?_s?CY@PZxSc`8?<?K*?C{ 1Q89c?N?P#L@?G ?Y?X-8:Q$?0d?V@@?[Ry?Uӧ?5 ?5H?`2`?CY@?VTr?O ?9;|9_RB`?0h?D@?%?M̉ QE6 R4G^?M}G@?Ra@?40h?W?[Ex Tn>{ ?D?WB8?P߈K*8:?Q8?D3?E ?HaFI'@?;@?dD[.3Y@?:?P˸`?F̀- )?E@?`?0F^[SY@U```-4a QL@AH(?#9@< baB@H`CmhC <{E  ?Lg>S M4)c>ę?C?V"?W ?Pq ?F=?2`>{ >ݸ:g`R, E ?BC?*%QK\>{ (ę(uX?7@?c<{<,o 9;|@?; ?8ę?3Y@?)cQf`c`FS1@D[.?Dπ?ZZ?K\:PF s`?P^?]?_,?^?W`?$nI_Pr@L@?d?Eӧ?6J?`K ?B?Ph?=4@Y`?2`?Q??c?C K ^a$VTrJg` ?3 J?2D1?7u 0h9_D@NW<+- ?>@CY@G8P@E \gd@U?1N{ B0a?+@{ WsRkҀ??l@?Vr+?Y`?F`ONCl?C{ ?F"B`B0a?D`?N~?0AW<?2`?R@?RkҀ2D1P߈?ę?:I_Iv@?@F?9MT OXOVG8P@{ )cJۖKRy#{ ?Dπ?<Qa3`;b+lb[S><7 ?I?Zx?B`&J?8&?D`?N`?Zd?T ?8&?*? ?a`O U\P|v!Vk?B ?S{ ?Q6@TՀQf`=W=A?ę; TnI?; ?F"?%\CmhSY@RuS!S>"`?=J&J?1.?A ?ęOsF=?L@??MY2kҀ+>@?JP?Q$?A.?A?S3?Os(&@`&J? >@?C{ ?Tx@?RX?7`>ę?? ?2kҀLTK>@? {8MN>?L?CE?4G$TG^ZF@R0a2`!Vk?BD1?L@??D?{9-?+- ęAB@3Y@?&`{ QLK7?T ?_?5*?Up@?bpƠ?U!S@?,,o ?H?T >@Jx?H9?]s_?KfJ@?ę?D@*M* T)_?QLEH9cF"?Vk?@?] ?Xj`Fr+=Y?C ?nG@VWB8G8P@T`d ]4:x@`V0Sn :%BXC ?F6?Y0 ?N~݀?-iv?@d?L{?)cDG^9_?a`Oa`{?G`?)c/ BXG`?$@?>~݀<E ? ?C ?)_C ?4?\T?.~aB]Y2`?{ ?K@?_N?N`WiـWs?J?VhC@?1~ ??@?X-?EӧD? ?Md`?%Hn?3Y@:)BF?=Y?R&x?Gꤠ?6"Vk,{4Hj`PO11Ux T?% ?K>@ CK'8P@>{ #9@; H`9_?Pq ?a?TeOl@XE?4G^?T?*%8ę?;@?=4Fr+C ?Pr@?V@@ d@h?Q ?]K?D`1@?C?O11JY1a U5#?)_TQF@Pՠ>`LI0 S V`Wu { ?1VkQt$K>@?dęBD1P|v2D1+@W.h^ClX&YOM@]s_X(L 4?6r+?P`?Pr@?AN?/ ?J-ivEH1N?B 9_X@?Q6?4?' ?5 ?S ?Q8D@S{ (&?OV?PTՀ%#9@?NW<?VkU >?Bs`?/E@#9@?8M?Ym?X]`@|vP`?H`?IRHa?Wb?V& ?J??@?V6?EH2D1AVk#{ ?P#L@?Xa?:x=1Vk"s`Vk?.~{ =@TՀEӧ@A?4?`Q~ K@?@˸`?MU@?F ?9_@˸`C9@?T?c ?LQSE?%?I0 ?s`GEH@Q`a`W}?G?Qj<@/ /D@?Q.?R`1VkM4?&?C1@3 T \@?W_@8&JN/)_?5ӧ?G`? >@E ?{ ?1.4?- ?*<,o 4/ 5\?@A?K>@%HR`Yv@X-M* 8:D@?!Vk??@?HuX?N~݀?P߈?:)BPbkҀcN`?D[.,T=u?,{?IHaO >{ ?E6 ?Y?V@@ {AVk?>@?Qt$?T4G^VhC@=4?J?9?[?_?G`%\#9@?Q8?c;߀?WJ@?- nZ=Wꤠ?<,o ?P˸`?:P?;@?Gs?7`ANPq ?1.?b ?`>VkJE OsNOW<?3 n3 ?0F?Q8?P/D@Ph>ę?V6?Y?[p2?Yw`?#{ ?@?OX?U+;E\`M}G@?5H?P/ ?BkҀ>~C9@Hj`^Y ?@?(ęDd?RX?L{>`I?2`?2s`Gu E 3 V`6"?>?1N?Up@?e?h΂ ?_n`?T?X ?SO?Jx?N`"s`X/@R@@3{ ?1.?=4>Vk5eD`C1@{ ?5?0A?>@- 39@{ ??a`{ X# eu`c@NO?:%9UH@#{ ?JY`Y'@s`?D?IOM@?A~ ?8M?G_@?G3 ?OD@?Ux ?s`QN73 ? ?% ?T`?SwQ"`Dn7u ??E@?_'I?]A?9c?,?G3 >{ Jg`F 7`+>@"`&?(ę?1?@Y`?[@?S;߀?7@?Fr+?;>@Q)[G8P@?5H8:Z=C ?Y1?[ ?%\)c?Iv@?R?Hj`?Qt$?Y1?Fd??D@?*g`Uz}^T=u5H?HuX?L"`%$@?*g`E5#SOI Q RN?.W<?Vr+?O ,,o >{ ?X-?Q$D`3Y@?B?:%?Dn?2s`?P-4?_a`?g?ex ?Y?Yր?^7 ?Q6?H?DG^PF`˸`RD1? C<5?s`?H9?EH@>Vk0A2kҀ-ivn+@LXMR B`JS(H(?2s`?N?R@LM* ]̉ S?A~ ?O@?nBD1?$@?P|v?;@?W<?I0 ?:%?F6?2Ee{ ?)_A9_? h?!?D[.?Q~ ?G3 ?Jۖ?YOM@?WL ?;- APr@BkҀ?(&?39@?/E@?:x??D@?A.?0d`?GL ?`J@?[? {Rs`B?M?5 \`RN?V|?Z ?"s`1?/ ?D`Eӧ?,,o ?EH@?nD@N`M@M.`TR[- ?(uXHMGb?6"?A VkK7[>@R`?<?TG^?I'@?*%?`J@?Yv@C V`5?A ?{ ?+@0A? h??a`?I?,,o D@?Ra@?Yw`?:`?2`?6JRs`YY56r+(uXFm`BkҀ1?A?]L?^O?O ?/E@>{ >{ ?%H4Y@[ 7_@?4'8P@?+@?MU@?QVk?@`3 D3K- S A ?FJ?F"AQ ??O@? Fr+'@{ ?n?Eӧ?MY7`?E?N~?SO?Q6?4?*?Os?SO?J)B?HE?O11?Ol@?0FJP?a`?QL?R+@B?1?=42s`0߈?O ?[`?W?Ic03 ?S3?W )1)?J?55#M4Qf`B`1NL[Q`?:g`?1V,]* J)B6m`K- KRy' /D@Pq Qt$ ?K ?G :`S9c?CE?Eӧ?G_@?>`?@F?ZP?PL*g`?K`1NCmh8&0h"`1.P-4Jr ?P#L@?T ?.?Hę;- HuX?0F?/E@1~ ,,o >@?@?9;|{ ?B`?U``?I? >@FP{s`?4s`?)_?`JxQNOVH:43 ZXW@?;@?Q`T=YWS&SwQR0a>@?K?Kz?E!S@?1Vk5 >~4:`{ ?Qj<@?OD@?"D1?I `?V ?Jۖ?C V`(uXS ?2?ZZ`?'8P@GL ?CK?QN?R ?G`:PJ)B?1?3{ EH@?&J?Tx@?:-iv?<?G8P@?5H{ <>{ ?F`?SK?T ?X9?W`?D@Hę:`@Y`Jg`EӧTY h?PTՀ?>>@?@?W.h?_X?Ue Uz}aBc&Z)B@?@F?S ?R@??l@?2kҀ?J@F3Y@?&̀;`9;|?H9?A:g`? >@?Q$?Ux ?Q)?78P@>ݸ?=?R0a?X(?X@@?U+;?M4'8P@R Dπ?-4?% ?+>@?R ?Y `?ݸH`KRy?Dn?Xko?C:g`Miv[RyY;|?+@?X# ?]?`w`?T Jd`U ?S{ ?`Ь?Q@d h?D1S XęT@?C1@?\ ?=4G^?S1@?\{?V`?N`?1.B`B0aDPc?R0a?F` {?!)?8M? >@7`>B0aF61~ { @A!?N?9L QB@P`O F^[PFR, ?d?Q?K*?4?+@?;`?:g`1T `{aQwX]`G3 RkҀZF@8:?Oa`?E ?$nd9?Aj<@?[\?Aj<@F`6JF=Nk ?Ep@?Zd?QL?B0a? >@0F?0A?L?Y@?d?a+?*g`SH:>{ "`$@?D@?Tπ?R ?F̀{ P˸`\@?WꤠW_@`AW?`?Ex ?Xa?d3?SOE6 6J?@F?8ę?8?N?Ol@?ę' ?3Y@39@R`' ?Smh?V,?M}G@&UUH!?Jx?Rs`?Tp`?>`Q XW@P^V^`Z3*I0 ?B?N~ę2kҀ?0d??D@78P@*g`?; { ;- 5Bs`C9@%? $5\I_TπN ? >@Vk?9_?+>@Q8P#L@?:`?;>@E6 R`T`OX@?3{ ?ę>>@?!Vk?(uX?&`0߈RkҀ_'I`M]}G@]̉ ^a$L{?"s`O11f @[Ӏ?Bs`?=GsJdA.?4?T ?G$?!?9;|*g`$n?V@?W.h?31@?- 9cPF,,o ?D[.?Jd?V0?R@7 F̀?@V`c(\| E >? ?T[.?NEGꤠ?1.? >@EH@N/U``Uz};`?*?#1@ę8&;>@*%@\@?e^E5#S!bI%ZP0߈@h\gQ?G?`].`V^[n>)_??Q@?V=?39@?`?P7?1VkEӧ+>@K@?6"?T=u?2s`>~݀=iv0h?K\?\ ?6̀J)B?L?b&x?Nk >?O ?Z ?OE@AVkS @Y`?)_?A ?Hę?1Vk#9@?#9@?>~?Uf?a[_?PdF @TՀ?<{?$R0aO ?S!?Zr L\@???a`?_,?E!S@NW<&`?[Ry?YY5AN\iCY@?PA?DHaG`?I_?aZ?` ?D`!?&?JF=A?4$:P6`IOM@A)?D[.?W<:`?@˸`!)D?3 V`?#9@@?B`?T[.s`RNMY ?Q ?SwQ:`Nk ?Md`?Xę>ę/ ?N/?V@?PA?(&@-4!?2?@A?P-4?@˸`BBD1?+>@?RX?YOM@?4S>O%\BkҀA ?D?S!.~SO?0d?`7?[D?7`?0h?O11?% [*_b+- ?SK?Hj`FUe0߈?Z ?`c?1NKz1@?Ee%J?6r+?{A.LTO#{ ?Q?K>@!0h#9@?%HC \@\TUR 4?;fJ@@TՀ[ R6r+K*Y ^b+lb+l`e@b_n`@Y`??l@Hj`K- V^Gꤠ$XkoY "s`?&?1Vk?N?MA?OE@?L`?'@?Y ?YEe?O ?S?S(? hHM {?Q)?L?HE?Q?"D1R@KRyBs`S&VhC@Q~ Iv@ę4n'@8&D@0?0d?PY`?R`?6r+?.W<?S ?[p2?NO?-?`A~ X΂ Ux W<?A)?VkN/]̉ Z?@?PA*g`S3B?2s`>>@?55#?+>@ hCKMU@OD@#{ ?Q@?L@?J? %@s`'@ę?' ?0h?%HJ0߈C1@KP|vV=^t@a)֠a._a`\qZZPՠ&J>{ H`T@E\:)BP߈Nk MY]4R?{ ?+@?Gu ?F?@Y`?D@?M}G@?R읠?VhC@?`TՀ?a= ?8W ]K]* _ W_@T3X@@UR܀Qt$^cb@Nk ? RC_v6̀?S;߀?P ?78P@?Gs?ZO?R`6m`Sƒ]Z n?@˸`*g`+>@?s`>@>CR@8M?s`%\?=?Pr@?6̀J?GL ?V`?Pd?0d{ @*"s`?31@?73 n>`OϵRę?G_@*PMYD[.5 >@?P߈?@Y`?< ?*%C Z W?ę?B0a@߈Q$)c?A)?@0߈?7`?HuX?BC?6̀8:G8P@??l@?PF9_XRVR&xMIR@X/@LT?*g`?2@˸`P˸`Ic?4?NCl Md`JdS>Uɿ`JPB%\?HuXMA?8uX?Pr@?AN6"K- 0?3 V`?8uX?R, ?Z)B?FJ"s`?3Y@?Z ?`^?; QNQLLRJU5H8ęM4>/?BkҀ?*%R:I@E?C>`^k >~݀?R@?{VUIv@?M̉ ?NO@TՀV[fJ@XkoAj<@?1@?1~ ?FJ?.W<Dp`Bs`EPFC <,o B- 73 V0OV?*g`?BX?>~?8?6`?K*?S?JP?9c?.~>{ ??$@?%H?G ?N >ݸ8uXJ>ę?A@?U6 ?D?Pd?OD@ hYw`_l@A~ ?B;`WW<?Sƒ-iv[ Ex ?*P{:%RD1R?Ic?VUB`ZѮNW<5?,{/ I'@% ?F? >@O CE?!?AN?Nk ?6J;`?%?!Q$V@BD1? #1@Jg`U6 XEL?55#?B?5\?P?MU@Vk?73 ?Gb2s`N`G&̀?&J@Y`Q`T8M?!Vk?+@?EH@?C{ s`?)?\ ?bpƠ?CmhFJ#9@ {4?I?V̀{ Wu Q~ >{ { Iv@A>{ ANQ;>@?M?X ?Dn73 %\?&`>J7@NA?Aj<@0F\ S9_I0 78P@?F"?Hj`?L`?Q ?@R:I@R0a@-4?4?I ?DG^?Gs?G@$@@|v>ę?0d?N`?Q`T?A ?P ?L"`?5\<,o 0F?C9@?3{ D?2kҀ?T@E cKT? {4I;|B`?MY?KKP|v'@*P< 4ę?.~?HM?K*73 T[..`?*%IBD1?5?;`?K>@?L`39@@|v?A~ ?C{ ę? &`UӧP`?Pՠ?Y ?Ol@?Z)B?Uӧ2D1?l@Vk h?&5 TXQ`Dπ?a`?s`? 8"D1B`>`?S ?f'ݠ?VVJ^`9?M4?TQF@?E )c2D16r+8>/?5?QN>JMd`?1N?W?Uk?M̉ ?NW<?Oa`?Q?Uɿ`?E\D`(uX?S3?@HEW<%UeF ?K\?@h5 @FUbN`oK?Aj<@?R, ?=As`@G8P@RD1LJP>Vk?Q~ ?T)@?W?C V`?6̀?R ?J%`?/E@?H:?$n?!Vk?Ee4@T[.-4?F^[?<{?4 ?5\?Q?,Ic?GL ?6̀31@LD ?4@?Ee?9C UH:)B+@]AW?8uX?>>ę?$$ ?C&?5ӧ`?;- ?;@E3{ ?YEe?W`?!Vk?>?J=?#{ ?2`?Aj<@?A.?Q.?? F6>ݸ?R@?R@?OD@?:BCN Q`W`SY@?0h?]q`?R[V|`}8&?Gb"s`UP{.Hj`N~? ?@<{B`Iv@KRyK- X# R?K?Z ?X]`?*%4?G`?G`>ę?3{ ?Ha"D1N~<{? ?HuX?PJ@?;fJ@!Vk ?Gu ?Jg`A)Os>ę?B0a?Md`?L 0A >>@5EeOs\ Q1~ NCl>W<?A G_@] Jۖd6m`A~ 5\?4?8M?s`>ę?W ?X@@>{ Bs`?C V`?R?F^[1@?0F?0A?W<?UN?^/?N?E?N`?J)B?8:;`P`F=?D@?I_?@߈85\?4{ U`ЬZ`Va`Yw`?3 ?Bs`A@VJ_\NCl?P^?G_@@?U+;?X&CmhM* ?C9@?J)B?3 ?< 8&^MT@S(?S9@?^`?B`Dp`P OXD[.0߈?-?I0 ?B 4n.~?C ?F?0A?Vk?d?=4?ANB0aK?- ?Fr+?#9@JxFd?31@?:)B?A~ ?"s`Q6]Q &`?%\?B`?Dp``CE?F?)cOϵPGbL?% ?Ph?,?3 V`?H`4I0 Gs\qY0 1.?d?C&?A.[- eM`CK?C 9Vr+I?31@?:%?4?Cmh?E ?S ?\{?G`D=A?>~݀?H{ MJxE ?TQF@?LgQW$?@?W3 ?^/?Q~ ?8&?C ?N?Jd??a`?@`?HM? PQM}G@Up@]_^a$JU?@?(ęG@P U`L"`B`C ?Ol@?CEWu Vr+6JJg`N`4:`MU@?:`?`J@?a$?T) >N~8ę?KfJ@?J?J@?>@0d?&?F ?RX?Ru?Jۖ?PJ@?Up@?D@?c{ ?P[ Q84>ę?{ 39@P#L@YGV>`>Vk >VkVkFJF?#{ ?4G^>?@?$@߈Vm`4G^?<{4?H`?Ym?9_?!Vk?>~݀F^[QA~ I `4[- a)֠5ӧ?@d:xW3 VB`!?A~ ?WB8?Qj<@?C{ ?K@?%\BD1?)c?L,o ?>`(&@|vP|v8&?Uݏ?TeOa`a3T? ?L?PF?R@?V?Y `?ZP?V"?L?(&RC\,o @dJT`[`@d?Dπ?K*?9_?@|v?Q?N`?Eӧ?6r+HMM}G@?2`?%\K@.~U\[t`P7@?6̀?[- ?\:@?N~݀?Q?T`?5\J?Dp`?C&EH@X@@IOM@?2dEe?% ?YEe?[H?E ?!)?A@?Gs??E@?/ ?:xEӧUH@I;|>J?1N4SƒW}P^6r+?:%?C{ ?* {=Nk 6`?7 9Q@?%H?S(?&J8uX?I `?I `(&?A)?M4,{?J?G3 {8:H`YɠZ)B?D@PTՀVr+OXI_<,o @߈Tp`S!Aj<@ d>{ 0F4;>@S1@G`?TX?^%`?P`?LR?Q~ ?@߈6" ?Zn@?cY@?PTՀ>~݀Iv@OϵT@A@?I?Jd?:%?T) ?^`?O 2D1PdG8P@?8?W<VUz}?>@?D`?2kҀ?+@?J=?V ?XC?X:?Q(uXG@? >@?=iv?#1@{ /D@H&O@I_:x?%?>~/D@O ę?Wiـ?R, 9I0 ?4?>@PIc?8uX39@T ?&̀?aVk?^?#9@PdF ?!?2D1Vk?6">:P0߈?Gb?V@@?Cmh@Y`?D@?)??E@?D?HE?C9@?55# h39@?5?4@P{Sc?,?BC0߈?0F?X]`?M.`' >>@9XaQDG^RD1JIOM@[ NO?8M?-2`QLX:ę?R ?*g` ?Fr+4]iv\ +- >T H:?W8P@?`j?T ?Q?T3?V?QVk?1)?0F?M* ?N?Hj`?MA- ^X:?*!)Wiـ; ?Q`?CY@{ ?C?T ?S1@?.~@߈{?8&H&L@?HD&`?Bs`?@`5B`"D1?#{ >ݸF^[Tp`Q.@-4?-?K`?1L{TUz}Q~ ?%?L'@O@?? ?Wu ?#1@:?5>`Rs`?I `?d?]L?S;߀UN@-4@?4@?2`?2`3 C V`?B?[*?U!S@?:)B?7@?N?QL?D`?1?+>@?5e?6"?5H?6r+9S!=?=A3Y@K- ?*%?Jd% L,o E5#NClVr+RuWV `ՠWiـF^[AB@?0߈?L,o ?G ?F=6"Zx5 ?W`?PJ@?Jx?]K?MivXEWꤠ?N?YEe,,o F6?Jx?[ ?T[.?B ?E?`(@`?b?0߈XT -?KRy?] ?Sn M@U?"D1?$@S3Pՠ>ݸ ?%H?V,?ZP?9<?'@?RD1?Q~ ?6">W<SwQYWL C&?/D@@-44DG^RuI'@LT\i_NS3?-?[\?R`5ӧ?3 PAUN?0F?Gs? {?K ?ZF@?=Y>J?Fr+#9@Jr ?AB@?UR܀?OD@?I? {I@@߈D@?Q?L?Kz8:S <{?(ę?J*(&?;`?Q$?EH39@E 55#*D[.VT?8uX?Pd,{B ?31@?&̀GꤠS V`T QB@BC;`P{UH`1@?*g`? d@Y`Fm`?- 3 V``{^k 4@ę2D1?Bs`?N(uX55#?W3 ?a ?:xCY@?B0a?_a`?[*?4G^?&`?]?a+?1@W I@?<,o ?P`?Q`?ANBCPՠVk?PY`?Lg?+- $?5H?P`?@QLW}>{ ?R`?R, ?M?0F̀I_`?H(?U5#?K*?B0a?M.`0AZF@C?1I@YVE\?HM?P߈?-iv?H&?V SY@?Vk?K- ?$@?1N?L?@?B?OVJH d1.?X# ?_ ?I0 ?.W<?#9@?'@?D`?Xj`?;`>/1~ K- UeK@F=A~ ?2D1?A @2D1&`C&PՠOVR0aN?2?G@+- =,{0߈:S9@Ux IIv@J%!?@TՀ?J)B?KfJ@{ Xa8U5#Ep@WV b@[fJ@GPTՀRC0d?d?NCl?Y'@?1HuX?4@?^9?ZU?(&- ?L"`?O%C{ ??SE?R:I@4nTRuS(P-4??D@?[4?Q.?n?#{ ?Dπ?F^[? NKz?>/?K?)_ę9KRyW<?H:?Qt$?W8P@?VU?YY5?aL?N~݀D?5?R@+>@GL 9G_@;`? h9c78P@?E!S@?G$?*?7u ?%\Dn6J??@?>~?@U!S@?$@?0߈PՠN~݀:g`BD1?%H?Q)?' O =?AVk?9;|2`4? {?6`?=Y dCmh?7 ?NDn[ OE@O ] Q`?@h?F?%H?,,o ?%\*44G^?' ?Q`?DISOS&Q@?J?Gs?*?0d?D@?OE@?YY5?O ?Jr ?P^C&G$?4?W<K\U+;2D1?Ep@?L?G@?ę>`>{ ?4G^9_JPHęI?"`?S9@?<,o G`8ę?BkҀ?IOM@A)[fJ@YcT?@Y`?8M?1?N?dF̀?Dπ?T AVk?Hę?a~ ?fr+?` +- Vę?T ?@A56m`- ?:)B?1Iv@Q J=R@RI@D?5ӧ?U5#?7`Nk Gꤠ?&`?N`?;>@R&xBX?R?0G_@?Lg?T@=4NW<Fm`Q;- ?J%??a`Dp`Jg`E!S@LOsFJ3 ?G`?[ ?F G_@??Q.?!Vk:`?1~ - WV W  ?N~?P^?<,o G@YGU I@5\?$n6m`UePF<9;|?4G^?Ex $@9c$n*g`9=Y?E?R:I@+@D?31@?E\?B?.? 9c?,,o ?% ?2?KRy?Ha??a`?C{ SOT) AVk?0߈?CK?W<?L ?T XX:K ?9?LT>`Dπ?J?6`Bs`?9;|?0FTeRC QF ?B?BD13{ <4JUS3MA)_?NCl?\"?O ?1?N`?P^?'@?:?Miv?0F@d.?MA?aeH ?cˇ?V=3 W$S9@E6 G$JdO Oϵ?@`?{ ?D@?BC? h?&J=YT@T I?,,o ?L{?1#9@?:)B?HuX?8uX1~ {?S V`?W3 ?*%?s`?Ra@?Ra@?A~ ?9c>&`?@˸`?Q?G?D@)?;- ?V,?O?:`?T) ?XuX?EHBXAB@?,-4;@?7`-XW@QJ`|vbzR:I@F=G_@ d?9c?;@?1.;- Dp`A~ ?'@9cKz73 ?0?G$?XC?Wb?@A*%E5#Fr+`B0aHE?@?QVk?M* ę9WB8c(W@;@D3 ?=A>JGu n?Oa`?2`Md`@|v??a`?Eӧ?#9@;fJ@?#1@?S&?@TՀCE"D1?/ &`??K- ?Zd?dx@?g ?c-`?T?3Y@?0h??D@c@FVk?73 ?=Y?(&?@*%?I_?F"?2kҀ?73 ? W}Md`*P5HCKKz?@?Bs`?KRy1@F?{ ?V?W$?;fJ@?A ?S(?B*g`!Vk?5e?W3 ?d?]A?>`ę?F̀?]?W8P@?<{?NCl?Y ?T@?@߈?B?N`?B?2??@*g`Pq C Gb_``(@`T V& V̀C ?2s`?L`?A :g`KOsF?d9]4Zl>@?I_?V?`}?Q$T)@]* UH@XMAj<@?S1@?2`V^[Q I;|>W<?N?T@?-Gꤠ^b0aQN,,o ?9?@<,o N~?=Y?`R?N`NO=?E ?"s`PAY`H(?G$?@˸`I;|P7D[.'8P@?Jx?Wb?UN?WL ?_l@?bkҀ?^?NO?@?0Iv@Q`T?7@?R:I@?)cMivT3 ?Tn?U!S@?; ?&FT[.`?HuX'@RWu Lg?BkҀ?O11?$?s`?@h?7@?ę?!?:`?)c2D1?%H?1N?TG^?`Yɠ?K@@F:??5e?B?1.&̀?% ??D@?/E@?T?M̉ ?I ?8:7@M@Q6; ?F?2`RXRZ ]W U? U``7_@?%H3 ?@I_L&̀Fbf``@L@?:%?5\?P˸`'@]d`T=uF_l@Yw`?@˸`?1)TVm`^9a@KRy{ @FHPY`Pd1?%?:x?Jr ?:5 D@?Uf?a?;- [ SY@2D1E GF F`?4?J)B@`Yw`QVk?5H?[7?[?@TՀ.~?.`?N?F"%H>/HE`(@`c- F6?9c=YWYK\?=4?CK4)=AE?=?R[?A?78P@?.W<>{ ?BkҀ?F`?:g`?Q?Q1NęJ?5 #9@Dp`39@>{ %\AB@B`ę?E ?B*g`?7 '@n?(&G$^ClXj`? d?T ?EH@A.Oa`UQt$5HS{ b M?'8P@s`?{ 5 SY@T`[7c_'ITp`R<?&BK@?/E@?7u T) YEe!Vk?J2RbpƠ`d_X\:@G<{B`'@?'8P@?F=?P{?2s`)_?0A?Q ?T@1)Zr K A~ QJ?G$1N6`?:)B4@W S>J?Q6?PAAj<@Yv@QLAB@MYSmhC @E\TXF`5C I0 R, QQ$Ol@$?!)1?' ?D?BC?S(?Uӧ?BkҀ?3 ?{ >{ ?Os?LT5H?2`?X&?Aj<@Ex ? ?Sc`?Q$?% / :xDG^?@&?.~?,,o 5HA~ ?1Vk?S9@?SK?`? dG$B?=4 >@U\N?0A?>W<>{ ?"`?Gs?K7?R ?T=Xj`(&?)_D[.?(uXKZ%`A_n`Oϵ9c"`?2?4?6̀?G$?K*?C?1?-4?.!Vk?!?H9?)_=Pq cˇcn CY@<T)@PA<,o ?B ?U`?KfJ@ęB @h?"` >@4?H`?EGs{?L+@Lg?@?A?,{;`K 94PY`X:K>@GUɿ`TX@?C1@?Ux ?P#L@?;- ?@?A ?F=?L?% N`VM.`?&J?0dHęH9??39@?6J?&3Y@ {>{ { ?A ?%I;|>{ ?Pq ?;@3 &`ę>ݸ?5H?@3 V X΂ E\?=?H&- B? ?Jd?O@+>@?Yր?{P{/E@4@R`D`)cMd`Oϵ?6m`?[- ?_ ?Y ?A~ NO@?HuX\6W@8:?F6{ KR[DG^?%H?7`?C&?E?<{?RkҀ?VU?'8P@?W<?VTr?SwQ/ PՠI_E Jg`2`4n].`[>@?VkcT)@WꤠT*?S ?XM?ANQ`Z3*?BkҀ?*%?P߈?QL@`;- ?CęJUę?V@@?`?Sn 5ӧBD1!)-iv?+>@?Pd??a`?l@K\SY@A@?Pՠ?N/>{ ?>~݀?N/?OE@?Zr ?Xko?5(ę?W<?@߈?"D1RNVJ{ ?Gb?*%F6Gꤠ?% ?J)B?PTՀ?Q?!VkQ UH@Q.K>@E!S@LOV?E@?% ?C?!)W3 bQ?Fr+?A~ NON`?2`?I@?BXEH@?`F?5 [ S`R:I@Z3*Gs0RV& Bs`?*?%Hę^a$]A:`? >@X_ {?F=?3Y@)c?9c?B`>@@`?Pr@?MU@QVkM@?D[.0߈_,^@V=`Ff& ao0`P˸`K7.`?H`?C&JDnR`Jۖ?d?C ?=P [d?F^[,{?{ ?,I'@6"?Eӧ@SƒP?/ ?[`?]Ѐ?I ?0?@|v?P ?`?cc?W?A dTP{?Bs`s`V"+- ?I'@?:x?GL ?Jd?/E@?@`?I@?@A?:)B1)SI `?7@?B? ?9c?Q$?Y?VU?9BkҀV|_'IT3CEOl@B?0dVk?"D1?Ph?ęWꤠ@?T@?5]U@R ?KfJ@?P?>~4?G$B0aUz}$8uXU5#=A?2kҀ1.H`Q8R`N`V& `Q ?F`?BXQ~ Q{ &`Aj<@1~ @?2?478P@>`@?@?B?73 [7^Q6`^d XNk WbS cWV^[>ę?Dπ??E@??a`?H:?8M&J"s`DnPJ@Aj<@R^a$E!S@?D@&?A?>~78P@?6"?J=E ^t@_,WL '@?LR?D?"`?E\?ZѮ?`Ь?Zd?N/?I_?AB@4?!?WV ?;@R .`?G_@?(uX hBK?"`?B ?d?@A?FGb]LV̀>`?/E@?6`?+>@?M}G@?Ep@{ 1)LR#{ ?7_@?D@ h?D[.8ę5\?V?O K7,?Yc?JdR읠HE?A~ ? >ę?HuXF6S>?%?Z ?=P/ :`?0d?*%?55#?Vkn?CY@?CY@51~ ?Ex ?B`+>@/E@8MQ.KRy3 EH@JUBkҀ:x>{ 2s`O%H?8uXJxWsT@VUO A)J=;`?&̀5ӧD`>{ ?s`D`.?C ?"D1?{?Smh?Ep@G`EHMYZ V N`>>@?]s_?[\b?BC?PA?MBCK7=4KDπ?3{ ?0A@?N~݀?_`?RCd ??E@?@TՀ>ݸ>{ ?Hę?H?%?' ?7`?- =K- 7_@ę0߈?$@?9*PP\`Y_0A?Dπ? {5H?0?-iv78P@?{ ?:%>ݸ?C V`?P#L@< %HOa`HuX?C9@?)Qj<@A)?NCl?Q?6"?1@; V"31@?]YX΂ QVk?PA?U\E\X&A. n?GL ?R?R ?VJ?Q`T'@N CY@>Vk?@Y`?E? >@B=YC W@]q`[ӀRs`#9@:g`[ R[?1N?5 ?s`?1)?A ?H:?nRkҀAj<@?T?U? -4QSƒT)@9_?)cP˸`T ?Q$?a ?PJ@?.?Vk!VkFJZ3*F?Y_?YOM@?ݸS;߀d?Xa?P߈(ę ?Ee?CY@?A@?BC?#1@?/ ?Fm`?2s`4nHES{ LR2`=47u >{ J?+- ?IOM@?0FU]4?2`?a`Y;|=4?K>@4UHI?A ?F ?`?+>@?I?I?!)HaV^[U I0 ?s`?L,o ?L?>/?=?-4HęTnO@U5#ZKzCY@WJT-??@-4?R@?P?B?ęKRyR ?"`?NW<>W<]LV& F6?J?9R@bC$?bS ?].`?<?C&?Zr ?RCFm`G@?E!S@?{LJ?@A?B?Y1?aQw?Q6?6̀?T`?a ?W ?@TՀ?2D1@?7 ?WJ?Q.`B`UfX?1@?OV?0?*g`?J`?RC?`?b?&̀S?.~?Lg>>@?OX?a@?DπJ?%H?]L?ZF@+- Oa`?;- ?VhC@?N`?AVk?>@5H?d?F^[?CE(&FJA)Bs`>`?E?O;- F=?>/{ \RUf?R읠?^%`@TՀ?4G^?55#)_?; ?VTr?`?a@?E5#I39@?B *PZ\ F?@?>~?; B`QL?#{ ?F̀99_?I_?9cP-4Q`C&@F:g`BCOl@3Y@?HM?5\;fJ@J0Y UHVk5 L,o n?39@?8:?T?F`M>{ ?bD1?^k ?Vk?+- ?_?a`?K`?<,o ?9OE@[`B>Aj<@D ?.`?CY@ę?78P@?\J'?T <A ?2?NW<?Z ?R5\Jd>~?:g`? {>`?BkҀ?V?G3 ?U`?ds ?C&`#L@UH@?`?@&G8P@<?H`?Sƒ?E ?0h?!Vk>J?-iv?P/ ?(uXVk?Q`T?C9@RXC ?Xę?Zl?<,o ?A *g`?8:?`#L@?].`?X/@?`e@?C\ Q?Oϵ?EH@T`\g@Y`?5H?@-4Vk`dh@@L?I `=APY`?' ?7@G Sc`K>@?31@7_@TGs?>/?Aj<@?ę?1TG^U 0h?+- ?E ?S3?@h?%?Y`?`#@?BD1?E5#?b ?\iD@3Y@?N?Uk?Miv?H&?&`K- L,o ?#1@?8:OVat$Gꤠ?V?KfJ@1@?T?ZѮ?.`?=?R`?*%-iv?D@Ex TQF@6m`?)A~ W_@T ?Vk?Bs`A)B?MA?*PcJg T`?-iv?L@??(uXFJ5ӧ1.Aj<@?/E@?&UӧO11?B`?J)B?=ivEH6`?Ic?Tn?Q8?Md`?K*?9c;@7`?FJ?Q?Nk ?W?Uz}?{ Vk?T?Y_?9?73 1?:)B?O@ANN?@TՀ`]}G@N?K- ?:Ymaj<@L@?? ?&̀s`[Dg @L?DG^Pՠc(ZۖS&UHUH@M.`>ę?H:?=A278P@?(&?L?SO?D`+- 3 >{ %H?d?R@?Q ;- G`?Eӧ?Iv@BD?? ?<{AB@Dn d>@s`@{ ?3 V`?G$?M.`?Q`T?2s`SwQ/E@?c&?`Y`?BX?W?`c?F̀?Iv@?Qf`Q~ e Y;|L D?5H?1@XkoYGB0a1N8MHTπLgEӧYY5Yv@55#?2s`?@1)@?<? hD`:x2D1PTՀL{?)?Ph?Tx@?CK*?#{ ?L{?L,o ?A ?9c?L,o ?Z ?SO?#1@?< ?M@?5ӧ?&`?C ?8ę?$?D ?MU@1Vkd?(&?1VkHdLR bM4J=OsW<?1D3`E aGsݸCmhLTVr+^%`GL VkS&Y L"`PTՀUR܀R F6?3Y@?V?Zd?R?K @F??l@?dG3 ??:PJ@Pq ?A.?-ivS{ N' MY_,_vUkK\D`0߈>Vk`+@39@?,?V,?T?%\?D ?X# ?A)>Vk?Wꤠ?]iv?OV?VTr?TX9Fm`>ęT3gV bOLR?<?[`?K PJ@7 ?PA?73 c??@*PUz}TQF@=Y?SO?d?S!Fr+E "s`+@>{ ?*P8MQ$QLK`E\? ?I?? ?ę?5H?2`:g`R@Wꤠ2`?]/?^%`? d1)?78P@?3{ +>@Vk?$?1)&S;߀R!>ݸS1@]̉ S!NR >`?$n#1@BRkҀTQF@{ ?-ivSmh\諠ZU^Z3*S!Pq @?J)B?,E6 SOTQF@c?YOM@?b?]??a`Xj`buT Jg`TI;|Ia@^f h,,o G8P@? d? KzQ8M4E5#?ę?H&?R&x?Q$?B?'8P@ ?1)?Rs`?C S&NCl?K7?HuX:)B0?;@?BC?G8P@?BX<,o Oϵ1~ { MTHę?M̉ ?N~݀"s`?$?T)@?Jd?>`?QL?@FE\N~6r+?\,o ?l?Z L`>?%\C >@?S>?4K7 ęJ%Q$LHE`?!)K ] dgQU``?RD1?Qt$Ex I@?C ?\ ?Y?*PAVk?4?EH1T) `dRkҀCNk 1N?Ee1@QVkJg`Dn>W<?39@?4G^?d?Md`?HęG PdH9Z)B` U+;K- D5ӧ0dC9@Yv@`oC ?Q6?T`?Gb?1NOc2_ϵQ Xę_X^~݀b ]KJxAN?-4?SO?<,o 7 ?Vk?.W<?<,o ?Ue?_,?a.?Zn@?;- >ݸ??>?/E@SY@^MT@M̉ @+>@Dp`=#9@*P?3 V`?Ph?D`?/ ?E\?Ha?>.[Ӏ^f2?0A8&W<?7u ?0h?ę? >@?>`?>`73 ?&̀?[p2?E!S@SE {?WL ?J%?HE?XC?L,o ?&̀?J?RC?D!VkTXEę?$@TVRX\iK>@?Q ?J=:55#?BkҀ?`-4?d?@`I ?@?SwQ?2kҀ?!VkOE@O IP`!?K*? MU@PՠPY`;fJ@?CY@?D ?I `?Zd?N:)B?% ?EH@BCO ? $n\,o c#XkoQ [X/@?$n?Kz@˸`YmGs6r+\@?b&xXuX`/ f@_11QT [`S{ ?8&?Q`T{ 5e?4G^?s`?Fm`?RD1?[*?W` dC ?:%?KRy?H:?E !VkQ`R ? >@?Lg?#9@AVk; H`;fJ@?Q ?S?&̀?1)?L?TG^?CY@`#L@ji K\?HCSK6J7@Lg(&?V?^7 ?;- A?&3Y@YA)?Z?].`?P?P|v?P#L@?L{?R&x?Wz?_; ?ZZ1.Qt$?7`?;fJ@GL ?@˸`?]7?A~ ?*?Up@?R@?G3 ?AB@C@߈?Iv@?1N7`?Gb?OE@?@|v?L?1Vk?%(uXO11E8uXS3WꤠJU78P@?&J?4G^#9@?@h?Vm`? hR Vk?D >F?&`VkV,_D@ZZ`]s_a~ OE@?Jr ?EӧT[.b&xP^0d[ e!S@`Mep@i6X6̀Tp`c>]55#dF?*P?U?E6 >{ Vk!)?F"?R 0dE\?J`?[?UH@?B?73 ?Gb?I@?Pd?V6?B +>@?1)? >/?5H?C >ݸ?5H?M.`?S(?Rs`B0a]Ѐ>Vk?W8P@{ PA@@-4?E@?3 ?S`?Zx?Oa` {??2kҀD@Ex ?@`?A~ &`?2`?P^?H?9?G?Xko?YOM@?-iv;`?D?>/@TՀ?Q?eY?Sn ?!?Fm`?C&?Nk ?S>Nk a58:?Fr+?I;|?O@?*g`?Vk#{ >ݸ?<{?31@%\?#9@DndbuBC?6r+?E ?3Y@:`?&?=YK`T Vk?- P|v[^%`WbA@% P7acWWJ<)_4@'8P@?4{ Wb\,o R_ٝc|E Q$Gꤠa[_gV b[YY5\6W@Zg`?>/?cwQ?_v?RD1?E(uX"`?3{ :%K`?c?Qt$?K- .`??`Yɠ?b, ?Oϵ?G8P@?Ha?@`?N?N?Aj<@?Pr@?Ol@?8&?M.`?V0?Q.?R@?F̀?`?N`?\?LT?4Vks`?< ?A){ ?1Vk?D`>ę? ?R읠?TX?L{?@FH&WB8ę?KW<@A?1)?>`?2D1?(ę?.?E5#?1)KfJ@ h?R?:x0h@`? ?T{ U+;? ?R?S9@?PA#1@?D@8&8ę ę?>~݀?Y ?0dba@].`?!?D@?F6?BC? ę@hW H`?C1@?39@DY g@cht?ę?P߈39@S`PY`Ux `cU?D?\J'?T@{ K>@ ?A)GsT@B`X]`iրi@dx@df̀c&'8P@?\ ?W ?Pr@?PF?{CE12JdMY2D1? D@1N?Y?W8P@3Y@?)c?Zr ?T[.?!>/?%\?Z ?V@@{ ?1~ ?Q`?JU?B?B`?:)B?K`?XM?Xę?PA?4n?&J?D[.>@Pd'@?BX4B`?AB@?Y?c1@?a5R[?(ę?Dp`I'@Dp`?F"?6m`!)?Eӧ?MA?9LgEp@?? ?A ?1?%JxH9?AB@dN`?@?Ex ?A~ ?H(cK7?9A@H`H`d?Rs`?"s`XuX3 ?T[.?KRy?>W<?:`d5HTx@a`S1@? >ݸ?{ &JYW$?I_?Wiـ?-iv?s`?F^[0F_; Yc?<{?U ?>/IcM.`?4@?CKH`NW<'@Whpcc@\ ^]* U5##1@?A )AVk? >@>{ ?c?Q?Uf?5ӧ?E@9_ę1~ n?9c>~T?:)B?`M?S!K\^fMY?H9?3{ Up@Pr@?.`?/D@,7@9;|>Vk?NO?[>@?S;߀$2`?7_@8&OD@?(&?C :xK>@HuXn?`R?ih?U '@?@d?HuX?:`?Xj`?Jr >>@?I@?K>@"`A)>?&J?Sn ?Q~ ?G@?F63Y@HuXVkE6 T`(ę?,{ ?-G3 [Ӏ3Y@W R&xJxMU@BD1OϵS&?:?SY@?6̀?!)?"`,{0߈Paj<@[`N Q$A~ VkCmh@A?Fm`?NO?s`1?#1@?VkLOl@?c?@5\S S;߀2`)TPA?&`@AZlP >/BkҀ%?39@?7@PATFJ!)?U6 ?jZ`?hR ?W8P@?J%?B?ę?6`?P^?4RCOV?CY@?R, ??l@?- ?1?D?>`M4_'IQL39@M.`QPq F?7_@?Z?T)@A.@-4?K?@˸`3Y@4< D[.#1@KQf`?T ?el@?S 1@?5 ?L@??P7?X?`X ?RX4$n>=GL 55#?@`?I ` {Vk?Ha?J7@?CY@?6`<{?%\?8&ę; ^fr+PJ@UH@J?0߈M4T@S!Oa`,{/%H&`P#L@S!1Nn2?@˸`?L`?VkBB0a!)!VkRS?#9@?@.*PJ d?>@?s`7 C V`@߈ę?0?(&?W8P@?iJY ?b @?K*?T=u?PF2`?CE?a?MQ~ @F?Dπ?,?- ?Y ?iOM@?h?ROa`T=u#{ ? Aj<@PhQQN/%H?V`?V@@<6J?ZZ?\?8ęI\J'L"`?F̀@Ep@?R?Y @@A?*%?F?P?TG^?[z?Y?1~ F̀B BOE@Gu 1@DG^]7L?Gb@?D@?S ?Z)B?; ?3 ?C&?;@*g`]d`b@?:?I `?[?P/ BD1GL @`LR`\@?_\Aj<@?R?[p2?Q.c5e{MAW}R U5#SLRVJPA?#9@<,o P#L@?*??@?Ha?N?`?d?6m`?>@*PSY@_y F6?Dn?2`5\7@"s`,,o OϵS n?R?]̉ ?^k ?Os?F=?T)@??PA"s`?#1@?C{ ?9_=E5#D`D[.AB@?>`?EH@Pr@R?J)B?W`?CK>~݀TX#9@?T) ?*P6̀?P?A@QVkA@?B?BkҀ?0d?&̀?P7?^?S9@`ES(\iU\7 K`]YE5#?LR%\M}G@?@˸`?K@%?d?Pq ?X-?K- 9_6m`?O11?V,?Ux ?9c0F?"s`+@TeW_@W`Yv@Jr ?+>@?,{Pՠ`-4Q @˸`WL K?E?,,o 73 3{ Tp`R`?2!FJ?AN?G$ݸ?-iv2s`N~?{?>~݀C9@KR``}WV ݸęF^[?D@?6̀?/ Q`TK@?W8P@?bO?X(?V?R ?1?ę`{ ?M* ?6`SE$n?Ra@Ee`q I'@?2kҀ?c?$@?8uX?<{?Aj<@?A~ ?OV?[- ?T[.?$n?+- ?:g`+@1 >@@; >_dLR Q@>J?8?Aj<@?9?PY`?V& =Y?D?dPՠ4?~>/@TՀ?>~݀?YOM@?\`?N/>{ ?E PTՀHj`H6m`?BkҀ?J)B>W<V K- C V`Nk J%D3P`<a~ F^[%Sƒ'8P@?Y`?A.D31NF E ? Nk YG8M>{ 2`.`Q~ T) ?#{ ?JOa`c?D>`QGsBkҀCY@)_?F?C V`P|vHM?[7?UQ`NO?3Y@`? `?C&?U?I;|;`?(uX?GL B`J=?4@dO@4@?Hj`?P{?BC?5 ?RkҀ?a@?X9?AB@?N?PF0F?)c6r+Gu Gb[cwQ[N2s`?>~݀?H?K?@5e`?C ?*%'@ 7`E5#CK:%+>@Cmh?d?? ,P`V"Ic? >M* ? >@?<<O@Aj<@?>?R`?RN?Hę@E ?"`]̉ ]@[`3Y@?Q`?C V`MO@!<N;fJ@ę {? {?J)B?E5#D)_?F=I ^Oϵ5H??$nR@]YU6 Uz}OX.D3Eӧ{ 9&̀?\]@?bO?J?a`M=iv?;fJ@?B??@?"s`SR[?D3 `Q@?AN6"UfK- ?3 ?XR?Uӧ?4?A?E 0A?6r+?ZP?G$E6 ?XuX?_'I?K@>~݀3 ?H`?K ?B?QVk?Q?@)_?s`< H:<,o ES V`S>T`TK`:x@-4MBs`?<?5e0d?9c?A~ 9=Y ?%?;@Aj<@W.h?4?]?Xę?0FNF ?@dL`? ?ANL"`[>@BC?C{ ?:)Bę?-IcA ,{>~PA{ ? >@BE6 NO\{Q ?4"`FP`Ru?78P@?^t@?Pd/ ;`E!S@J?W_@?W ?2`7 KBX?2s`$n8?Uz}?_; ?"s`TπT`)c?U ?T3?%?<{?@˸`AN"D1?VJ?V6?FJ?Ol@?X ?V|?4G^Q$Uk:?&J?$n?9?E6 ?<?*g`?$ h5 '8P@,BOE@UfY W}PAQ`XuXDG^?BCC{ [Hę?Md`?6r+?OX?V̀?K- ?IOM@-ivX&&J?XE?K ?a`K?,?U!S@?;@4?Hj`?IR, b X# QVkWJGs?N?Fr+BkҀI@?Aj<@?;@@Iv@Cmh>W<0d6JR[HP`9OsP˸`??Dn?3 Md`c Zx?L?T`.W<Ra@N >`BB?%\? {D`?Vk?D >~݀Wu ^`Ym?d??@R Up@1)EeN?9?P?JG3 >~?3 V`?(&D@ ?WL ?UR܀?5\B3{ ?J)B?=A>~?7`?J%6̀BX?0A?*g`??Ic?T ?P߈?A~ d@F.`?J.B!)?6m`?)_?*g`?H(?L?4@%\9F̀F^[>W<DG^GꤠMWu Ic?6`RNdLR G$?@߈?8ę?\g?cn ?K@>>@H_'IT8uXV`cF`?O ?OX; =iv?LT?L"`<,o X@@^7 `_; BX?V`?Q1)#9@;fJ@>ݸ{ 0AE\5e?4n9c\]@^I'@1NK>@N7@>?5ӧ4ar@a ?6̀?U { Q$Jg`8uXG8P@M* $n?/D@?0F?G@?W<W`[R@H?J?)BC2kҀ?2`N~d`YɠB ,,o J=Y?5\BX` ZdNOPJ@#9@?G_@`?D@?*%4NCl?1?Pq ?<,o ?A~ ?E\I `[`B?LT?SE?Pՠ?Lg?5ӧW<@4@N`G3 '8P@9%\?R?Y?BkҀ?@?@h??@?7u ?? >@FQ]}G@Uf?*@Y`^Ic?@' ?Uɿ`?bX?@-4LU ^MT@W_@Qj<@_,]U@?,,o ?UH?JR:%?4G^?%?.W<@E6 #9@?"`>{ ?L"`?R, ?K\?W`GL %?E ?E6 H(S{ >~݀Fm`Xj`WL Cmh?0?PJ@?X9?J`="`?Fr+A@` ]SKS1@RuHa)1IcD`5H6JC \eӧV^[?:`?D@?@?LR?Q~ ?K*?9_:g`[DcJW88ę>Vk?>`G^9V`U5#UH??JP6r+Ee{ BCP߈>{ ?DG^?C?[?d=u?Jr UkP7?6J?<?+- ?B?/E@C{ 7_@?`3 V`;fJ@ &JJ?J`?Gb'8P@?55#?].`?]* ?H?6m`CmhM\Ws?;@?=ivP^F{ *P?N~݀?`w`?J`<{<{1N>ę?1@C @?Md`?W8P@?=??E@?V ?'@S1@?G_@?A~ ?`ՠ?c^`?+>@,,o ?Miv?W?`#L@?ę>@?=A?BN`\TQH9LH90?@߈?XC?ay?Q$V`[D?=iv?OXQ~ fTrc|E O 7`BX/E@?ę=D@>/Iv@Wu c@g=D`U!S@?Jr ?R&x?=Y?E!S@?P/ ?:g`>>@?F^[?C CPJ@E\<?4?J%?nd?G3 ?9;|J?Hę?HE4@73 `GbNW<?J?C ?>`?U? ?gL ?ex ?J={ I R`Vk?*PE !?OX?FJ?+- ?A.?Iv@?Jg`?@߈B`Qf`?:P?bs`?a?EH92kҀ?<,o ??D@BkҀH9?E\?MA9c?D@?,?-?GL ?Y;|?T?I_?S3?X# ?U? ?O11?<{{ ?&̀?A?Q)?d ?js`?A)]* =4?Dn?55#?^MT@?cY@>ęG3 ?1)?3Y@?@|v?BXAj<@N~D K*MA>W<9D[.>~݀?+@??E@@>?(ęTaQw<,o ?N`'@[`R`?=?L{?7 ?BkҀ?C *g`;fJ@#{ *=YUNTn?{ ?CK 1~ ? ??4?CE?C V`>J2`IU!S@K@ę?Dn?\6W@?at$?M@? >@?;- ?@˸`?-4?%8uXPKfJ@?ę?O ?DπJ?M?aQw?Y?E5#>JWz_v3Y@?@A{ ?Ep@?Y ?M.`?(uX?4?C1@?Jx?4P˸`Sc`?5H?X@@?V̀?J=?1.?6r+?TQF@?[ ?H&̀?;- ?;- ?A.?Jr ?E5#?2`?(ę?< ?T`?a ?ay?R:I@?BkҀ?GL ?8uX>`E ?9_?b?gu ?DG^U-4?A)1Vk?< ?Uf?Cmh?AVk?H!?@/E@)c7_@?:x?Qf`?#9@HE+>@?1Vk$@@s`?D?C C ZxNCl?5\>W cht]iv?8uX?eR܀?co@?:F;- ??A)?8M-45\8M:)B?=Y?E C EH@?G8P@?R:I@?N?6"Wu a=?Gꤠ?G3 ?S?SE?)c ?{ 0A>>@?/E@HQ@ę?-4Vk?AN?G?5ӧ?I_?Zd?V >JR, B0a?P?W?Q~ ?Miv?`VhC@U\?BD1?`e@?\q?5*P?F=?U!S@??E@7@ݸ?L?Rs`?;>@(uX?)_?8`?`?L"`?Wz?`?]K?Qt$?PY`?0AUUӧFKzI_?4?*PGbHę!)"s`?.~?T ?K DπP7,{?+@ę6`; 7`??B?-iv- ?dBkҀY P/ >?Vk- ?!)?2`?4{ ;@? ?>W<P{bS Uk?0߈?@hDπbzd%?a?]L?@C{ :`Vk?9?B?LT?Xa?NO2kҀ?-4?Ru?; J?Aj<@?G ?NW<?EH@Q$]$ 8:?E6 ?I?HuX"s`Nk ?W<?P|v?->ę?>?E@T :P8S V`D[.?!)Vk?,,o ?Q`T?V^[?:%R0aKz?N~݀?Qj<@?&J?A@?$_Nc^`9_?P`?G4@`?$n?UH?Z ?SO?Q ?Bs`(ę?`?B0aJ?@? >@?9c?7 ?E6 ?L,o ?Aj<@?B`?R&x->ęQ`B?OD@?D`- ?K7?XE?+@RkҀNW<?5ӧ?X?X/@?s`U+;P{?31@?C{ -4E\?D@E6 NL`G$0d?% ݸ02`?D@?/ Z)B\6W@@BCRa@R`T@K@% H(T[. ?Jg`?%>`{ ?A ?F^[?C V`?I ?ZZ?cJ?]/?Jۖ?U?aeH ?]̉ ?Uӧ?K?ę?{?9=ivPC9@6""D1!VkS![fJ@?$n?^O?S>? h?`D`Vr+8uXY1Z%1?:%?:g`?2D1?6̀?@`>>@Vk?N~݀?BF,{?.Ra@Z`A@$@<,o  7u ?5ӧ?VJ?]/?`c?RX5ӧ?C H(T ?%H?@|v?l@LRTG^_l@ZZ@O I;|`2(PY`?[`?_N?@d?EH?ZU?R 39@OD@&`?PA?S(?(ęK\=?Lg?Dp`K7Ic?$n-ivN`B0a?>{ BCH:4n3 V`F=8uX:\@\J'?#{ $@d|@ekO FJP`[fJ@f`b!-?BD1?D?G`{ KBC?@߈?]?bI%?Y?S>?T?Rs`?I ?K@?T ?W_@?Xj`?_,?W%I `8&4@GbW`]@J`?D@@|vR, { ?Yc?Q$Ep@QB@JI?W<?5Q6S1@?>~?R[?? @hIOM@?+@?J=?E\?SwQ?S9@9?0d?% ??31@9L?$n?G8P@{ h?F?OX?R?P^?,,o ?5??a`Ep@;@?T)@?JK>@T YOM@bkҀaTMAM* bI%a 5?JU@F?A)?Jd?39@9F̀1.?Gꤠ?P?`?J?Uӧ?L JP;fJ@?A~ % D?;fJ@?V,?C T@]̉ >`?0d&>ęG`ffm`IOM@Lb@V@@JYEe]ivaU`{ ?$?@?A)=ivAj<@?7`?R?b8?h:?d$ ?]$ ?R >:%,A~ N? d?b?h ?W`39@MYLTLR[_; ' ?T`?KfJ@>@?>@?PJ@?H:PX΂ 4?4?A?>/.?0A?Uz}?Hę%\5e)?BD1?MY?5 ?D ?TG^?;`7_@?"`?Ex ?Jd?HaDπ?{?Fm`>{ D@?=4>@ANJ?>/?Cmh?7 ?% ?Uɿ`?b\ ?Fr+Q~ UH@U? T JxC{ ,,o 1VkM]4`haf`]YI<{J)BG<,o E Gu ?(uX?:g`Nk I?Q.?JPAVk? ?B`>@+>@?0A?J`?P:%] R읠6":P`>/` bf`SOPՠRD1>ݸ?A~ 4@F^[@A&`?CE?)_TUR܀Nk RD1>ݸ?U ?Q6?T ?_V?` ?`F?XM?@F?7u ?4G^DS V`?- ?d`"?l]@?b ?=ivN/W`KC{ B ?F ?V6?A ę?Vk?D?H(;- H`?<?Hj`?55#?&J?"`?L?Q < I?B`?RX?R?Mę@h4DnE5#?,{?2s`?A~ ?02s`Vk?-@`E\?)c{ L B0a?*P?5?/E@?I;|?[@?T`<{RT[\bI_?@-4?0dG@L0dę6J?%?R?Jr ?W<?>/?Ha(&Jr ? {?I?A~ ?)d%?4G^?LT?9cNPՠ?3 V`?%\PTՀ)?R&x?ANb @cKQ`!)?ę?3 ?I'@?5 QB@[U L@?D`0A Ufh@b[HuXX`bpƠ^MT@_,AN?X- ]q` {?O@3 C 6`QWV 0F?Q?>`Nk @?%Wiـd@Q$?Iv@?H?%H?7`>JOa`N`<>?S;߀?[\b?K>@?/D@?>Vk?)c? >@?2kҀ?T?[@?Y `?M̉ ' FU? _A ?E!S@*g`?#9@?T?H:?CY@?Jr 2`K1~ (uXDnF ?% ?M4?<{>ęs`? d#1@I ?F`?bS ?Uz}?3 V`?Pd?[ ?R`?3Y@?2`?L`?R?55#QT{ ?6m`Q)] )c?]A?Z?CE?M.`?LT`cwQb@PY`!Vk"D1&` F"Ux Gb@hNW<IcC9@U\c(YmD`X/@[bD1QN?N $@]7I@#1@K- LTB`H9PB ?D?)cYcV =YUx ]LA@?5\ Fr+F`.~Vk!2kҀs`?B?H`?G ?I@{ N~݀K>@<,o >ę?9c?-iv?E5#^ClSc>`VUIOM@?@Y` ?5?Vm`?C ??a`?V,?=F60߈?- 8uXE5#?Vk?D@?4n?{?s`+- ?,,o ?B?N ?d?g ?Iv@?s`?4G^{ ?3Y@?3 V`C V`F=NOQ.?Jx?_D@?>~݀8&?AB@?U\?YOM@?U6 ?@hn+>@Tgf P7Ic]APr@?Ph?X?P?Y1?^Cl?4@JxE LT? ?CY@Bs`ZxUS>W}P{AE\E K7QUf`^XuX?1~ ?$@T`U Jr 5IU\GbC QV,S V`?55#F6L@?Ol@`[ W<Qt$Up@%H?OX?;>@A?E@@?J?@-4?B`M* ar@WB8$@?=iv??l@?:g`?K\?4M}G@?5\?\{?`RD1Iv@L{?c?Ux ?=4{ ?MU@?@|v<{?D[.?C{ { 3 V`6`A 8M-??@>@Hj`?NCl?Y16"JA.RD1C&AbOeqXa< ?F ?5eT U;fJ@?BC?S1@?B=4MY[t`f^[bgQ`TXa^/?(ę?[?A~ ?"`?`ڔ?de?`AB@K7/?1?(uX?d>?5H?D@T@X-?@߈?U6 ? >@?"D1?\諠?[ ?$?;`2`T[. ?K@ {@?Ic?T (ęU`VIv@%BkҀD?Dp`?9c6"?R?OVZ=@ZZ`?%3 K7?{ ??M̉ 3 I ?EH?d?b?^?c(?_s?6JP˸`S(?+@?N~݀?0F?-iv!Pՠ? ?R:I@Vkn?G$?Dn?Q@?D Z=@b CE?@|v?7_@9M.`R, [7XaB`/E@?=Y?E5#?Ha?R?S{ ?-Q~ N`?J&E6 - ?0F9Jx8ęT G ?K?T@?A?A@?V0?Q#9@F^[P#L@YZ ^MT@X:? ?1N7@?KRy?RDnK Fr+Y_D?O?3 C CR[[ӀV"MRkҀU Dn?!?4n?Cmh?E ?)_0J=N~݀!Vk?6J?1?; ?:?0߈?,,o ?@?;- ?H:?>/?B?OD@?NO?S1@?Q@>ęD3PTՀU6r+?P{?Fr+' ?0F?Uݏ?Uf?2D19/ dNk `hD`?V ?C1@8&?F?S ?@Y`5 F6?;@?RD1*Jr ' ?#9@?S3?a8?U?FJ?A?<{?Os?G3 <(&?I'@?B0a+>@?1@@F]ЀZѮ@BkҀF >@C A.5 G3 M* >{ ?<{D[.Iv@?n'8P@>~ę@d[z(uX?U6 ?T@?D3?9?3 V`/ F=A Q`c(c2]AZlK\:x@˸`?&0hYրV=Up@Z)B?`?PJ@HuXRkҀݸ{ ??E ?&S ]U@P#L@?8M?L"`?B`?6̀?6m`>K*Qf`0d??D@?<,o #9@4?K*?VJD?`?CY@?Y?bI%?Uf?P ?ZU?K3Y@G`P5 ?K@?@A5\?2s`?Q ?I ?)_B SEI `I^a$Tp`![t`gV^[>ę?D[.?Q)?AB@?/F Bs`$?/ 9cZ3*SwQ`9D &?;`?CmhIOM@ea[_RJ? UeEH@?? ?4@?G_@?V@?H9D`_ ]iv?N~?EH@?Lg?Xa?MivDSK>W<?39@?%K P`?Q.?a?3 V`K- ?"s`?O11?^?b?M}G@??@?Ws?BE6 ??OX?RN?PA?,{*%?>/?Kz?P/ ?\i?U+;"s`?4G^?S9@?#1@ ?GsI;|aQ{ ?K`?a@?`{?K*?F6?3 7@ę?>{S[\ZۖXj`H:%B?,{?e`?jx?_s?K\!)??@?:)B{ :Pr@P#L@ R[Pd?P^?] ?OE@?W?c^`?X&?Q8?T`?,{2s`>VkBs`DAC Ra@S V`Miv<?8&?M̉ ?SE?K$>ę?M?:`0߈?1@?A?G *g`Z%Rę9TπYOM@M?.~?@?l@?/E@?Jr ?A >R UH@??>W<d?I?_; ?V%Q$G8P@d?@HT?55#?Yր?4Gꤠ?4?BD1?BC?Pq ?AB@?0?9cOV].`(ę?S9@?QN?Bs`>ę?3Y@?`?I_?eH?eD ?N?[>@?g'@?U+;??E@?`^?[ ?' ?3Y@?2`??UH@?\?Ep@?CY@?UR܀?Tx@?R&x?SK?5HP^F?>~݀?:P`;@QVk*g`?WB8?QB@?A@?Up@?P{>ę?=iv?Q)?BkҀ=ivTP^78P@HuX]LR0a?U`?` ?EH?K- ?\J'?L??a`?Aj<@R0ac a6Z%Ee% `KRyP|v@?#{ ?A ?1??@?NCl?5e?.?L`?7`2!VkA.K DDn?Ee/D@^`dC& SY@Wz? *P>{ ?0߈:%3 ?BX%TQF@KfJ@?`?G_@?>W<A~ M4=`0߈Gꤠ% ?I@?/D@>ę?MU@?1.N`7 ?=Y?-ivIa)_b6m`?>~݀?A?F6?@Y`?/ ;`Z=@S{ ?Ol@?U!S@?#9@?T`?dLR ?>EH?UH?^~?; ?3 ?0Fm`>?.W<ę??Pq ?R?O11?W}?RC?c?N?eWР?`F?4L^W<ZZ`Hj`P˸`8&?Yc?Yc?4?@?Uz}?Qj<@#1@OX;>@?D@HE]U@R ?I_?S>?-4?Ee?S ?3Y@?2D1?F̀J=_ R@?,,o Nk 7_@&`@Y`0h?2s`?6̀7 U? Gb?:%? h?-iv?PJ@?7@ę?Dπ+@Wu Pr@8M5 >JBLK`W_@a~ \ VX-?@?+>@>~݀3Y@?3 V`8&Sa~ e&G`Jx?C V`1~ F"@FN~݀NKRyE ?0F?E ?K ?Zg`?Q@@*P?L?9;|MU5#7`?A?Dn?K?P^?9 dIcaBbF",{Pr@(ę?J`C V`Y0F>ęOX*%?N?0FB`<,o +- ?{?>`?Jd?SwQ?[fJ@?EH@?OE@?cb@?_E@?F1@W b穀]`Pՠ?@?O ?@-4>?EH@?W$?W?7u ? ?'@?I'@D@Oa`9?G ?Jg`?+>@?B ?L?#9@?"`?A :OV?1?a~ >ę2D1MU@Hę?3 ?Hę?&`MAYmD ?0@TՀ7 ?F?*%?%?S ?BD1F`>@?7u I0 S1@?{ ?RD1?Fm`L``]d`S _sbpƠBkҀ?@-445\7@'@?5V jlU?5ӧ< ?@?+>@ZUa)Zr [D?@F?AVk?T ?`#L@?Wz?Ue?Y'@?M* ?9?K\?X]`?U!S@?K\?E\1XRT37`D`I0 ??%HOl@U!S@H9M@UHR읠Tp`W_@"`?Yv@?X(?!CY@!Vk?B?>:)B@`?PJ@?]A?E?&`?QB@?R0a?P#L@?W`?Bs`P^T`6`?-4*g`J)B5ӧ?5?@߈?H9?:`!?/D@?1NG_@R Dp`?% ?;>@!c?E5#?8uX; 73 "s`BH9?AVk?V?K>@EeA?F?EH*%Iv@M̉ 4n6r+\ _sC !?,?@|vHj`T?3 ?GsNk [Ӏ7`?U?T`<Zr OV7_@RXW`0߈?Dp`?H`?>`B`1N?UH@?!VkXko? ?;- Ic?>?H&WZlT ` Jd?Gu ?%?a`?f ?aVk?Z=@?V& ?]@?cc?`j?R:I@?B0a0A`/ h Zn@?-iv?F`?K?T ?M@dZg`Wz? *%E6 NL@A?@h?T?78P@I;|3Y@?B`?2`@-4>`?E6 ?TG^?&J0A?Jۖ?P-4?D3?X9?a ?S`?ę; :P7` ?D@A@TLg/E@?.~?D"`T[.R읠KRy@`</ ?Wz?XR6m`Vk?b?aVkKz^?Q`?UH ?)c?T ?EH@7 =AEp@N~݀S V`_D@bUp@?J?RN?6"^ _D@/ )TV̀F ?$@?6"D[.XW@R`6`ݸc:%;>@?;fJ@?E6 CY@E ?F̀?>~݀?:`?[7??E@T) $n >@U5ӧ5e\6W@??`TՀ?4)c?]?aB?Pr@?Gꤠ?Ue?^`?]̉ ?Qj<@?EH?LT?% X]2D1?F̀?AN?Fr+?P^?E6 5ӧUӧR&x?@?X&?K*?>@;@Ux PA?G$?K>@%\?4?K >{ ? - ?:`?5\F A ?V=?]s_?4G^?8:?`2(?c- ?NFr+KRy?73 ?Tn?A~ S9@`[ӀPJ@?8&?V?8uX55#?Eӧ?LR?=Y?Dn?"D1?.~?a= ?`?a`?!?qB@?t?SwQ[p2$n?6`=iv?:x?Y@?E!S@1>{ ?@W3 O11?`?ę@?n?VhC@?MYB0a/ ?6`F`SDG^K*V@X]q``R\qR읠4`Q [ L .`@A@-48ę7_@?L?\,o *P[`KzPY`Uk?ę@-4[?J?e?G_@?' ?[\?NOFr+"s`?O ?J)B@C ??Ym?\ ?@`?.W<?SE?RX? h"D1?%\?.W<{ AND3?Cmh?[p2?R?3 V`4G^VUH@?9_?C V` ?P ?[Ry?7_@>@?CE?A{ Pr@MY?Ue?b&x?;>@5H?QL?`m ?U\#9@Hj`?{?N?.`H:Fr+GꤠS V`ę?SY@?41Vk?W`?a.?]@?_11?Ol@?Vk?I'@?73 \ X?^~?n`?`^6r+2`8uXK`?'@?L.C?4nU+;>/?[Ry?`|v?8&CY@>{ ?7@?8&?Pq ?NCl+>@%H?*%L@?_l@bdn_VS{ UTMAS;߀VTrPA>?1N?.`Qj<@Tp`?8?F M}G@R3 CEA?/E@C9@RN?PF?_'I?0A?7@?Zۖ?=OX? ?Pr@?%P^V"D`?Tn?b`?U ?:)B?OX?SO?2`9_2`?D@?A?@d.W<Cmh2s`:g`AVkD@AVkQ~ Iv@W]s_?Dn?aj<@?K ??E@?N`?;- ?W<4K\?(&?Ol@W<A)?@TՀ?Uz}?Z?S3Cę?;fJ@?CY@?Q?@߈I;>@?5OX[H4?I ?Y`?b?Uz}$Dp`Pr@Zl].`M4?EH@?R ? ?3Y@??`?C1@TJ`?>W<?0FKF"?B ?PJ@?' Ex C (&- '8P@3 ?OE@?L{5A@TՀU+;PTՀę7_@Iv@:`8:?a`0F?9?U5#?D3VUӧ?{ęE6 ?!Vk?C&?{?&?7 ?$n?4?R0a?Md`1~ ?Q?JP?2kҀ?Qj<@?V?C{ ?.`>@9?<,o ?W8P@?Dp`A% ?I?Gb?Vk/ *%?6r+?Sn ?Ep@Md`W}Sc`Hj`?)c?W<PFZ c!b`?Gu ?bs`?H(?:P?Hj`- ?d?C1@8ęNKfJ@P2`?I@?Oϵ?X?a@?R*%?2?Vr+?V@@?P-4??l@;- :?4Ex YT`@߈?I'@?ZZ?S!?H(?5\>J?Hę?GL ?@0F?< 0d?s`?.W<?R ?Vm`Jr ??F6?2/ EHRD1P^7_@ ?{?<{VkS(Vm`{?U5#?S>?T`2s`?:`=iv?J%?%HMF=;@?.W<?E\?<?3 V`2D1M̉ { ?U?Y ?Z?W`?S?YY5?[@?M@?6"?1D`CY@?2`?Pq ?K\? Hj`K\?A ?R`Aj<@% d?ęJI_JdL,o 1?aG`?c{ ?!?{?P`?Vk1@?A)?l@V0TL"`?>`?V=?Aj<@?+- ?UN?W`?;@?Gb?Y?Jx,{ )c?:)B?HE?*%?D@:?@˸`?D[.?4?U!S@?ZP?Nk ?[?]7c@d>{ >=5ӧ?Q`?W ?4{ ?Iv@?8Mn?/D@!)S>R:I@'@4:g`?s`?JL?d?Jr ?I0 ?1~ ?E!S@?Ws?A)Q~ VBkҀ?OE@?]d`?6`V6QN?`?JQ~ N?F`?6`OVd??@Sƒ`dZ Up@@7u JVk(uXZr Ee?Z?\`?N~?K?G`?D?Tπ?Zn@?CmhIDn? {3Y@%\?K- ?M}G@?4H`U\AB@?2D1-4>@?D?#1@=A;- 0d?!)?; ?b?^ Cmh?`?]_?Q?7 ? hMAP75 >>@?Oϵ?V0,,o T 2s`?C9@?,{?6r+?N`?>@H(?!?B`@?9?Tπ?H`A)FJ?39@?dLT>>@?G$ {?39@?39@U5#Sc#1@6J? h% ?P{?P^?D@@d{ >`*?;`)_Gb?%?Gꤠ5 WbQB@FJJ`3Y@>Vk,,o )J)BV`@Y`(ęWiـ`TՀR:I@?8ę?U`?A I Ex ?%\.U``K?5eBkҀT3?9??l@WV YP#L@Q6E6 HERN(&+>@V"`?[?H:8ę?`{ P 8:?U? ?=iv]̉ R[?G$?9?@? E ?(ę'8P@:g`PTՀL?W<?(ę0d&?;>@?<,o DI?K?FJMY>{ ?YG?W_@?Ws?Ru?%\??a`?OD@?C V`?I `?G@B0aT A~ ?0A?*%?7`?L?/E@@d?8ę?Ex 8&*P?I?6m`S>X]`?4?EM@W`JPG8P@2s`5HVr+Fr+?B@?MY??a`?Tπ?Iv@LOE@I;|J=?1N?9_R@T`?4@?PF>{ G 5ӧAVkQ 8uX*Rs`U? \ ef[4G`WiـW3 :x?.~?I;|?Miv?)c>{ ?Ex ?C9@3{ ?l@? U C ?W}?O Ee h?2kҀA 5ӧ?D@d?'8P@>{ +>@?Kz?SwQ31@M̉ ?*P?>~݀HuXA ?S>?+@c@ӠT=u?S;߀?;`!?N~݀VkS1@?9;|?X@@?Gs G$OXVk?Eӧ?5 >@?6"??@C Q>{ A $n*g`>>@?_; ?f; ?`e@?`q ?Y?Aj<@?C V`?>/*g` ?0h?<?D3?L?Sc`?F`W<?-?!RQ`?4G^?G>`Uk?4@?^W<?/D@XaH&?7@?G$?9;|.W<?:?Q`?K?J?AVk?$B0a>ę*%Gs?0hJ_'I` E\1@@A@?6m`?@OE@>W<4UR܀_y b:I@f _sUH`dPՠ?B?<?9_?P?>`0߈?W<?@Y`?9?3 2kҀQ`T ?Tp`?KRy?HE?R:%:x?PJ@?Wiـ?L?BkҀ?PTՀ?Sc?8&8uX#9@?J?V?F"?8?Ux ?3 `YɠJ?VU?>`?>@?\J'?Q~ H&0F?Bs`?+@??J,,o ?9?Oa`?JPAHj`.`C&HuX:`7_@>{  \\"`?OD@?b?^~?Y?8ę5 ?@A?@h?"`?F̀?>>@?2kҀ?D`?Iv@?G8P@?1N?7`?+@MU@RD1?{?P{?0AK@?6m`?a?PAJۖ?c?VJ?Q ?; ?%\?`E5#QCY@?Rs`?E\LT:%0FV0X@@O N~]4dG^YOM@ER@G_@>{ Dp`T@]cT Z V`@Ex ?Q`?8'8P@?Dp`?@TՀ<{Jr I*g`?J??D@Ee?l@@hbD1a?Bs`?W3 9J?O?]?K`?Aj<@?U ?Iv@~(ę?,{?78P@?7u ?Jx?H(5eOVJQ~ Wu OD@C D?0d?=AUݏ].`c?=A>ݸ@[ӀX ?s`?{ ??Ra@?9;|MA73 ?>@ę?"s`?"D1?:P?N?I;|?5e?"`$@K*U? &̀?V"?D@B?W<?HM? h5H`>{ E6 Te?T?9;|=4\{Sc?Q?L{KfJ@>`?;@?2kҀ`7u E5#]_kg3\ ScS`T; ?d?08uXSc`<{>ęHę?>@?V6?+- N~1.?;>@?31@39@M̉ -?S ?K@D H&Qg.hf %ę?Q);`M* ?AVk?Oa`B F=?HE?39@P-4Cmh h?d?I `?2s`J?Gꤠ?Q$@U``.W<?39@#{ ?9;|?P-4?*8uXJn3Y@R bs`X9s`E6 7 ?X/@?Nk A ?!)?E\"s`EF`#1@?OE@?Y?TVkZF@a`[p2D`?J7 2`@Y`KfJ@Kz< >@JۖYG?@˸`?N?"s`[\Z3*?? ?CK@I `?1?I0 ?8&C V`I@N~݀[p2SY@.~K X@@RD10?H`?=AAj<@?)_?Jd' - ?J= {Y;|Y@@A?>W<?A)?.~?P{?]Y?I `C V`? h?EeJ=X&0߈?40h{ ?Q`?CY@[^f?,{?6`PP߈@A?- ?G${ Ex ?>?O ?#{ >@?1N?2`CET[.>Vk?[t`?]}G@?[?aVk?Y`?:)B?7u ?P|v?D ?2kҀ?Ws?\`?!ę?U?W$?>~݀?@?Qj<@?P?8ę?{ ?CK?M.`>W<Y'@5 ?;>@Q)Q$?NO?R`?=4?U ?XnT)@K ?>@??E@?4?%B`\R]_L@?=4C 1?5\nG3 6̀-4?8M"s`VhC@BCBX^["D1? >@U aj<@Z%?E@2UfXC >Vk?39@K`N/Q`TT`?l@<{U+;N>~݀TQF@WEHD3X(`2(U+;55#@?$?SO?Zn@?6JBs`?Gb?].`?D`;>@%?$?/E@?R?b?X&S>Z?@h?H&Jg`J?-iv?L?I&J=?-iv?,!VkJ?,{?0FDnT3?C?eB ?aVk?QL?R?N `8:?=4?G$?/E@?2D1cK>@?{ ?R?AB@?7u ?H9?Md`?,4?I0 ?S!BCT?,?CKK W`C ?'8P@?L"`?Z ?QB@Hj`VJ?+- ?ZF@?F=Md`OA F">~?*?.`,,o ?% ?L{?.`#9@?R`?W.h?G ?W ?LRR ?!)?E@RXZ [PTՀAQ `;a3OE@3 LOD@!Vk?W<?{ V=WsR YOM@X-QR@VX/@Pr@DπEH78P@&@|v@`?1N?D3`IOM@`?C&(uXIc+@?'8P@?'8P@?Jr ?`-4?]Y'8P@C&?Ux ?S G =Y?Q`T?TG^?CK?cę1N%\?"`?8M?/D@JO ?Q?b?Q8ݸ?5?Gu >JL`?S ?JP8:X9\`Fr+@`V@@B?=4?2`?Bs`?AVkd?C ?D LgP`Vk>/E@K@ZxK ?L"`?PY`8W Miv?K@?_E@?M.`Bs`AVk?$?*%%ę?<?@TՀ?:`?Aj<@>@d?Y ?`w`?SwQ?]L?S;߀R?PJ@ h=ivE Y _; P7?`?#1@$@>>>@"`?.?D`?B?!55#?5H?V?FG8P@J`8:`?&̀?>`?L ?1)Q L?9?K*?P|v?PTՀ?A~ ?<?BkҀ?<,o { NUz}J=JUQNEx 1Vk96r+?@Y`?P>@?ę?a?``,,o ?c?X΂ ?P{?>~݀?L{?;>@;@0A?`%H?0A?H(d!?OD@?A A &?K*?Te?BD1M@7_@?YEe?VnQS3Hj`V@@] ?&`?T=u {?!?S V`?J)B??l@?%5\{ 4nNW<??5 R Fr+?Pr@?)cV& Hj`?<?55#?*?.~>J?"s`?.`B R`3 V`?3{ 23{ s`>{ ?FJ?@|v;`?5\?BC 2`H&0h+- T^P??I;|?NCl?Lg?@߈1Vk:PJ? h?Hę?V^[?U`?XC?LgD@=A?Hj`?K`?A)?7`?>`?T)@?V`?L,o ?73 Miv]KF=?3 1NW<Ex dVk?)_?A)!)?"s`?c?de?<?Md`?_11?>/?R`?;>@O113Y@? K$@?V`?R?M?Hj`Jg`Q?F?U``?Ra@?DnL"`E!S@?U6 ?Tx@ 5ӧ`? {N/T?R?` %\C ?K`?I@? "`?1N?Hj`A@_bB?E6 >@?.?R`;`[H?:g`?]iv8uX]A% ?M}G@!)9c?6r+:xYL{;>@W.hQj<@?<,o ?Gs?6m`E\`^Vr+? ?GU!S@V0J)BGꤠH&<{ ?5 ?*P7u JTQF@Q`2?J?.`?M}G@?P7?.~J=UD`.~Jd>/?2??.`?-iv?E@*%?6m`%\Jg`WWiـ?d?L`?D?<A Vm` ?S&?,{Q6H`?Aj<@?K`?:%?>`?*P?4@?^?ZѮ%?B`?[ӀGL ?H(?7`P-49JL,o `?Ux ?P#L@?C&?=??l@?D`C V`H(?PY`?Q?Vk?,?N`?S? {P?B?\`)_T3Y@1@:)BD@?C ?P1.^Uɿ`??7`?D?Ph4@W ?3Y@?W$P`j?A?Y?Jd?MU@>VkQVk;- :`]AXR?)_?H:?F"?"`UkX:-iv?Q`?@(uXA@?0F?Q.?L?L ?F^[>J8uXF^[F @?"`?2s`?Fr+?@߈>J=OϵJ=HęZ=@\SƒPF8&?!6̀C9@FP^OVXko_l@I@? d?1@?7u ?#{ 9?+- ?@hBs`UeF6?9c?5e0߈?.W<?Jۖ?P?Z=@?HV6P/ ?@A>{ 4?K@?PTՀ?"`?@?*%?J?Hj`?Q@$nE?%?Md`?^?_D@?*P >@?R?-4Aj<@?G@?P/ ?:?F?V`?]}G@?Q@`2D1?Gb)_S{ M̉ IGL { ?FJ?Tp`?R읠?W<A@ę?%Hs`?A~ ?A)L,o PF@dYGVhC@?P|v?V?3Y@?HE?K*@߈I ?% ?JPTՀN`0h0d?*?P#L@?6m`GbI@`?P?V@?TX?EH@?P?L"`? h?FJ?T=u?E!S@?d=iv@`ݸ47_@{ ?@?"D1?.W<;fJ@K*E QXuXUӧO$?&JG$V0V"R:I@<1VkAB@$@1@6m`?!)?A)??a`??l@2D1T M* &?W<39@@F?.~?PA?W?`Yɠ?Tp`Nk \iBC?E5#?Ru?Sn ?SE?S`?L?Cmh?N~?V ?O 2`D3?@A?X?Y1?7 Sc`B`?VTr?R0aVk? ?3Y@?9?MU@?P7?S?X# ?M4?:g`?D?+- 8M@Y`PVUP{&J?N?a?b ?R[?Eӧ?% JP {?Q~ 6m`]̉ ZdYv@I?@d{ 5e?HM?#{ S(D?)c>ę?@?A~ ?9CY@G_@?; ?I-SY@Q`1Vk?O@?X9?L?C&2`Pՠ*P?$C{ PdQ)C&?`G[`T`GꤠHMD IFm`&`39@DANAN<{A@Tx@T`:)BVk(ę4{ 1VkP{Q1Vk?,{?8:?AVk.`K\?C?-iv??#9@>?@|v?XM?Z ?B E6 C V`?Q ?`?BX+@?JU?RX?EH?Iv@?J%?D ?D ?Gu ?PA?M* ?(ęFTπAVk?R[?Z ?F6#1@<?0h?TG^?K\?/ ?P ?]* ?[`?S?K7?D3?6̀Dπ[D\"P|v"`?N`?Wu ?Sƒ?T)@?HC&:??l@@FVhC@PQf`E %\SQ?:)B>@H9? {?0F?9?L?G8P@ęI 8ę?"D15Q~ P`S ?,,o ?B8ęI;|Jg`5ӧ?6̀<X΂ V0L"`?Eӧ< ^Y1ScZxZZ`QB@; *PE6 AN?)ęA@AF6;`?L ?R? 73 >ęB\gV|?{ /D@?`s`8ę?3 ?9_BXC1@JI0 XkoE6 ?6"?Bs`?N?K?&J?O11?[- (&X("s`?D[.?s`3{ BD1!?R`?XE?A1Vk1?73 ?B?6m`?Kz?X(?Smh?,>~?{?U ?NW<1.?d?S(?U ?Os?L?Pd?Miv?%\IOM@H9  G$P{2`?O ?R >VkA DπNW<3{ ?&KH&̀Q~ R@? d>`? >@?,,o ?4?#1@D`@˸`?%?n#1@<BCAH(?+- ?VkPr@U+;B?Jۖ?Tx@s`Hj`/D@ >@?(&?G ?39@A.F=O@VT`L`C H:T`J)B?;>@?=?,{?N`?K`#9@?- ?C V`ę?>@?Smh?J)BE5#?l@?D@?6m`5e?ę?*P`?"D1JLRD`6`W`\#9@?=iv3 ?@|v?\`?O ??E@?NCl'8P@S1@-4? K VhC@XEe?Q~ ?R@C V`U? ę?XuX?X?Aj<@?7@?L?Rs`?Gu 31@F6?d?`A .~?2`??%\?F"?K ?K\?G`?-?39@?SK?V{ TEH@?C?A=APAT P{?7`?F0?s`?C{ 7`N D3L`S{ SGs?0߈+- [Q~ ?HuX?U+;?Ol@?7 ?c?@˸`?2s`C1@2kҀ%d?'8P@?Iv@?@F@Y`=iv?#9@`<,,o ?-iv?5e=AWzUNF^[K R&xG`;>@1N?`?!Vk?6m`?WV ?T`C{ X(PAG$?0?]`?]Ѐ?@TՀ?6̀?OD@?B`? ?GL ?Pd?B0a?6"?d{ ?Ee?:)BR, QL?M@?U? ?ę?CE?`d?TQF@{ >@$5H?9;|?>~>W<Q V6I0 ?E ?DR&xY { ?Q@?4n@F8:>J?G8P@?P0V`N~A 3 ?F"?E .`?+>@?Q@?Ee?9_?K- ?D@@?A@?_n`?a8?R&x?Jۖ?I8YY5YGU5#L>{ ?C ?Q`?]̉ ?Y?5@dOa`ST]7\G@I_U? ? ?[z?\{?SY@?Aj<@?@F?Sc`?K- GW@PA??a`?R?O?M* ?"s`JxI'@F^[O RkҀRa@@? P˸`c\:@6`@˸`QLę?QVk?B0a5HH9PH&5 LX:W`Ol@ę?IOM@?8uX*?@?S ?G8P@?6J?NW<?Rs`?F=?1@?8&?U?BkҀR@Gu ?K ?QN?AB@?P{?]`?U+;?$nVk@?F?ZF@?W`?A~ BXN`ݸ?@߈>`LT?3 ?Gꤠ2D1Fm`>/?E@?31@?P^1.SE1Vk?ę?2D1?U+;?K@0߈?Eӧ?Uӧ{ A~ ?Lg?W`?'8P@AB@?PY`?e?c?Y`?N:`XMTXIHMHj`? ?[D?c&?U+;?E ?C(ę?D@{ FU``Q`TSO ?A~ ?U ?H&dBD18M?+>@>Vk6̀]A_11A? d?A ?W ?Ue?8ę1R:I@Yv@V& ZUR܀=Oa`aY?*P?@AC&78P@?I@?>~3{ C V`] g@^ A IUeEe?<,o ?#{ T[.Tπ?D`?]L?PA?-4?*g`#9@BD3J4?>~<W$7`?A.?ę?n?H?Vm`?Z?Uf?Sc`?L d?!?_?ee?W 1.Pq -?N`?GL ?'8P@?M.`?Wz?M?G3 ?G8P@?@?55#?Md`D`?9?>~>ę?&JF^[RkҀ?:`?@˸`Z)B_?5\?a?[z?`?!?Te?Q`?:%?:%?'@(ęVk?431@N/B?F̀?@˸`C{ ?.~?X(?I?&̀?C ?:x?#1@?{ IcSc:g`?4Ra@[zV@RD1RC5HQ`Vm`P˸`TN/?EH@?Ue?J%?+- E6 Qj<@LT V`?a``K>@M?Cmh?T:)BX F@?B?R6r+`TՀK ??E@HE`;K?Q$?Iv@MPY`?BkҀ?Wz?Oa`?A)?1@R`].`TM@=iv?&C&Kz?9?9cJdL 1?<?YY5?a`T?`}?S!Ex O@?P?[*?*M4F ?:`?X&?T?<{?I_?Y1?Uӧ?T ?[H?S3?E\?M* ?G?%?*?% !K>@a ]$ D@G f1dQF@?@?V?_D@?G2kҀ% < I-iv?<?JU?N`?Dp`?C K\A S9@`E!S@?S&?O?9?9?8uX?J%?M̉ *%PAF"J?#9@I;|XkoO I_Ol@P7.`?!)?8ęAVkYY5OE@-iv+@,4>@?8:?$n4n??a`?#{ +@?I;|?V@0߈ZF@P˸`@?V|?c{ ?Q #1@?Qj<@?WCmh`{M* ?C?HuX?(ę?&?$@??@h?S`?P^?a`XCS1@Ic31@?=Y?9_?.W<?@F2`US>Rs`H:?F ?W_@?Ra@?,{UH@W?&̀?1~ S&T?1@?R[?T??a`2D1?"D1?J?!;`?Hę?Uk?,,o ?9_?[?Wiـ?;- ?H?V@@?%\\]@Ws"s`MU@_l@QL!Vk? h?1)5IOM@45\G$5ӧ??D@?S`?Tn?A)6"IcG8P@M4ZOV"&`?<?A~ ?.W<>@?8uX?8:,&̀?4?MA?Tx@?2F"!CKJU?>`?PA?[H?F`V[*D0AB0aL=4?B0a?Pq ?DG^?4?2D1?FJ?M?WB8?Uӧ?c8 d% ?Jg`?Yv@1@P-4?5 ?FJD@?"s`=Ep@?<{?T?8uX?a`?-iv?R[?Sn ?B 55#R&xWV I;|??E@?P?L@??5E!S@G@ AN`?!Vk?HuX?7@#{ KzJg`>J{ G`>~݀?D ?S!?=YLTT0F?FJ6m`\iC&?F^[C J`?U\?Zn@?9?Q`?b?RuPhR@? h?- ?BX?K`Q6\QL?.~?*%A -4?Miv?[t`?V=?=?.?)?l@AN)cQ8af`^~݀Cmh?)cę%?2`?1Vk?(ę?Md`?RN?PTՀ?Vm`?Md`,0߈@`U?>W<?P^?Jd?Ws?CKY W?8M?P' Z\HuX?.W<? E5#?l@?G8P@?X ?W ?E ?'8P@?O ?IF65 ?4G^V"b!V0R@5\?V?S>Pq _N>@?[- ?Pq J?'8P@?4@?6m`?Q)?F"Q$[fJ@:?NW<?Ru?P߈?I_>ę?"s`?R ?N?31@?G3 ?O?Eӧ?Dp`?:`#9@8?@?Aj<@?1.? ?GL ?0dV ^ E ?J?CY@C9@?%H?W}?`N`?6J?>`H9?E@?BD1?@dAVkO ?%H?S&??l@#1@?2`?cT)@^t@F`?@`@M.`4?Ue?\i?Ra@?C ?Oa`?K ;- N`=4SwQgg`S{ % 7`(&?Jg`?Sc`?S&?WL ?I0 (ę?/D@?B`1~ DF T?T`?F̀`?Gb?< NW<AN?Pr@?VU?,,o R, Vm`Ic/D@B W}Tπ%?$@@P|v*P?ZU?V`Gb@A?Ex >J2D11.U!S@LT?Ph?Q@AV=-iv?YY5?Tp`?s`?ę?0h?Bs`?Zx?S V`Iv@MU@?L?X-?AB@?=A?QN?@h!?EH@?U?Te?SE?HM?0߈?E5#?R&x?;fJ@C ?Ol@>{ PA?2D1?MABCW$JU?0߈?P7?R?^f?e`?Y0 ?; ?C&?"s`P^ZlUN? h?K/E@1.?EH@@߈]`L"`*Pr@R1.EI@?1Vk?P?~IHa?6̀?J?R@ dL?0d?Jۖ?D3?G@?H(?<,o !Vk3{ ?5?F^[?2Aj<@WbUɿ`GbW_@ca5Eӧ?Q@?P< h?SE?W?]A?Wꤠ4G^HuX?,?G?J=?:%?=4?XM?SwQ.`{ ?P`?Z ?[?BD1M@C ?@h?"`PAEH@?I0 ?Fm`2``?AN?F`?C `K 1Vk?R@?SƒVk?MU@?#9@O@?.`?S{ ?4@?!`? h?L ?Y ?[Ӏ?T?Ra@?R ?@TՀVkL`VU?>~?a?E!S@G`39@LU5#0FęE!S@11VkQt$Q#{ ?E!S@?+>@R T ?s`?K@?MU@8uX?V?]?1N:)B?F?Q*%P|v55#?n6r+0F3Y@U? XCGu NOPJ@?I `?cc`?W ?/D@@d?ę?D3?P|v?G3 V`MTx@N`?4@?Aj<@:N`SƒJx dJPY `Q~ IOM@A-48ę?9?8?F^[?E { >Vk?0A?8&?Oϵ?Fm`?`?F ?@Jr ;- ?R읠?Z3*?EDπPq G_@N/X@@X(D3?Dπ?S>?Q`T?L?-40h?{ HuXAB@?F=?S;߀?@A ?I?V ?73 ?"s`&??l@?RN?3 FJE5#6J0?!?J%?B2&`9T $?Zd?K5@?!?B?OX?'@??Gꤠ8ę^%`T3{ ?8&@QLS V`ę?Gb?:P2`ݸ?Z=@?b`?K`%?3Y@>ęT3WL 73 ?Vk?E@,,o ?>~?&J>?AB@!)R, !?Z%?^MT@?[*?S!?CY@? ?+>@8uXWzZ`o`|vLgPՠaL\]@R:I@D[.?78P@?=iv?1?A4Sc`B?ęę~݀?Jr ?`DG^.?&̀=Vk?J>{ I'@U5#?3Y@?`<?P#L@IcTG^Q`T78P@?C{ ?A.=ivR`R:I@9?F ?Q~ ?4OϵHęB`SwQH(?>`?D[.?7@?=?@TՀ?E?<,o ?Vk?QN?Yv@Aj<@^~K`0h; >@dB 6J?C V`?Q8>QLs`?O ?JA (uXG YNCl?BkҀ?Q?3{ '8P@?;`?L?PA?SO?2s`PI@?0?T@?`o?a5?L@?"`?&`;fJ@X&TπV@@V?@Tx@dj X(HęQC{ 2s`(uX?:?%6r+?9?F`?s`BNE6 s`?0A?2`VkIOM@[Dd@c@W RRNJ`?l@?$@?CE?,?5H?Jg`?Gs?Tn?b ?\諠?;`? >@?F"?Uf?U ?P?Hj`?B?Gu ?G@? 2kҀ9Ję?R`?DA~ BXAB@F6?H`?BX3{ BD1?=?X?TQF@?9;|? ?+@? {>?9;|?@A?0?)c?!)c.W<5ӧ?73 ?_b?X/@Qf`X?*P?' J=A`M̉ V|-?M8:at$Qt$?CY@?2s`?n?C{ ?1.6J$@?F`?V̀??D@P/ L@??`?0d EHRCEH@?4?6"?S`?W? BX?D ?? E!S@@/ ??G_@?@Y@73 cUݏYY5Zd] P`4G^?ę?G_@?HuX? d:xHę9_?%H9;|RXGb%\@F`?' ?P^?Jr ?0hF"XęE ?>/{ BkҀ*P+- ?@?MA?S?P߈?EH@?W<?9?Ue?UN?1.+@?EH@?UH?N ?I?RkҀ?F̀?Vk?' ?H`?Xko?\:@?K@>J?;`?Q?R?B?@?>?E6 J?{?T=u?S ?A)?P^?X?Dp`6`;- )c? ?4?1?F=?Ws??a`W3 MY?TX?UR܀3{ L,o J=YbU ? D \]@< ?P`?EH@?< ?J?L ?B`ę@?Qf`?DnR S!? K7R&xR&xSwQE ?/D@?0h?SO?PAC V`Q@?2`?A%H{ ?78P@?H9?K`7 G$?Dn?A)F"H`Q)]7Y P7CE?%?Jr ?P^?D3/E@*?;fJ@!N`73 ?@h?E5#?R&x?` ?bN?]iv?Q=4XB0a?!K7TπRN_ϵcV=?!?X`?]}G@?M4?A?MY?2s`I_AB@?D@?SK?Q`?Q?U?SwQ?2`8ę?Ha?e؛?d)@?@*?; ?AVk?:%?Bs`?@h?*A WV K>@?C V`?:g`.?B?QL?s`GEӧ2s`?;@?LT?0B?l@6"Ha2`?T`?[\?@`0d%Hę_'I^`OE@G@D[.??#9@>@d9?5ӧ)_!)?UN?T?% ?;@ęTE ?4<,o =?!Vk?Vk?S(?Hę@|vIv@'  >@?"`?*P?@d?;>@=*?O@?I;|?3 ?HM?8ęE OE@K\@-4?5\?Q?ZZ?[?T) ?T) ?\g?Z%?Tp`?P#L@?,{"D1?IOM@?Tx@?CY@?@F?D.W<Vk?Zl?W@&J5\>aB@gQ\{=Y?@߈?S V`?T@?T?H9EӧQ)?$@?D3?&?&`?5H?2s`?L{?F`H9?a`?W.h?T`C1@I_>ę; Vk?>?-ivK ]_WB8DG^F̀C?1?C{ ?#1@73 Nk Q W<?Q6?B`;`D@-iv?A ?Miv?1~ &?K ?`/ ?bz?[D?Wu ?`h?[4{ E5#?B ?h^?e+;?E ?Dn?>~R`\`Jg`?a`E6 .?K`?Y ?K Hj`Cmh?N/?@߈K ;@?!>ę?Q6?Ws@FSc`?.W<?G3 ?% ?55#?OV?Q?)_F=4?*Ex ZѮWu Qt$Iv@{ ?B0a?K?P/ ?+- UWz?D@;fJ@S9@XuXD[.?FJ?4@VTrZ3*B0a>{ ?BD1?V?]/?TπNW<iʠ`?JU?N`H:@߈?C ?D@Bs`CECE?s`?3 C V`?G8P@?gQ?O@W_@?@Vk9c?RkҀ?T`QNP^`R_'ID31N2`?`IOM@\:@Aj<@?F̀?:`=Ex 1~ ?9?$nA I'@ h?N ?GQb J%?UR܀?V^[:xSmh?39@?WsW<Z B`?/E@7u ? >@?+- SG ?W?R )?1.?JP?@BC8#{ 5>W<? ?Jd?@dL@?MU@?@TՀ?4@L{6r+?>`?B`?W ?W$"`9?BD1?K*?P^?U6 ?]_?b?LXW@Pՠ?FJ?)O QLPAG3 J? ?8&?O ?JRa@?s`?Yv@?L{`?!)?E5#?P߈?8uXRXW`Eӧ=4CKD@?.?Xę?8:`FPq ?Y?NL{8uX?2s`Bs`TeX/@WV :`1V(&?^%`?GbB0aMU@U6 ?>?3Y@<C YGWu 1~ ' BkҀ2I_S ?4n?W@?I_?.`{ G3 M.`%\?>~݀? LEp@?8:?2`O Z`Hę?A~ ?;fJ@Qf``^HE?X9?VJC&PJ@@B0a?-4?IOM@@TՀQ ?@OXYY5C?Hj`?Q.? d@-4?2`?Kz Rs`Ic,{Q$\:@Dn?$@-4:P?>?Q8?U?(ęO ?A~ )4?/E@?>`?SE?s`_XD@?[- ?Uk?>W<Q.MA4E\G`"s`Dp`D`?Z3*?f?Sc`?{ ?5 ??a`?OV?U6 ?5E H&C{ LZ=@U5#?D ?Md`4G^?D`?ZZ`?@`r@R:I@R:I@aL^~݀TP7 >{ K 9?=Y d>{ ?I `%CE?1@KRyDb9A`?D&?A1wH ;Ѡ?@@?@ш`G`Xi`OZ?3 ?S. ?BT1e@`i]?a?: V>jZ 9k7 O(%P(C>V.aTXN@T&O[@]Ud)@Xa>_NRg Tb9cj6 f \x2 ?P?R" ?\@>?7?$G?Rr2`?cڠ?V4~@? @?1`?%d)@>, ?$v@3V6?2r2`?&k?A4?T@?T?B?Ѡ?5?9D ?"J?a`9>V?6 `(.q`?=K?L`?D:@?C ?Dv@&I\k?MK?ID8 ">QfW`Pш`1`?&?>k ?CLs ?$n?4?U!?X?MK?P ?X$?UI?Hi`?%d)@7 A\k78V RA@?F@?;oŠF$RW\BJ?G`?/w 6&RA@0nS?)k?V`?X@?FRA@?1w,`O @2>?<`?Tb9?7?OԀRA@?@?L`?@@MK]P?2r2`?<`: Q*`U!Pt>, \kV>jYXW`<@V۠* )k04@IX=S >VRA@E?=`PnSheRg :2P@7@Y`HBHUZ=M ?CV?CVRN?@?A?PP?a?QɌJxPx?@1w?G?Q*`?>?S?UFf@?8}?*Y?CV?J ?Oڷ?Y/?^. ?T ?N?U5@?HV B^[ M8}?2 ?FRA@?L`?P ?5d)@E6RA@?C?5?@w ?RhF?S 3`JQ`A&`-s`?>?[K?Zm@?P3@?T ?Oc?a?<]ݠ?Pt?C ?* ?RA@F`QO?&`?TXN@?S ?K?B?3V?>Ȁ?4NbE^Ow 1`HD&Bg ?=s`?YD ?YN#?8Br2`<`3`JM`?B6`?F??LqPш`?-?Br2`?: ?@+14U @Oڷ%:EPQ?8}?M`+t@SB X, \SYX][`b;@S)D M WhQc`;#?H ?BK@w ?S`J>k b@\g`P@@Z|@?: ?F@:2P@Q5BJa9X?38, ! `?S`J?E(@T[oŠG`?H ?V$?26y?E ?R| ?5,`>V?0@?4?P?]`?Xi`?QɌ?R| ?)kQ `QfW`3V?F?U?Px?@?:=VHUH, ?F?BGhS7e`?0@,`4&?#8*Y?Vy?V۠?0_?RA@$n?CV?G`?v@?A\k?K[@HBH[`'?Q&`?A?)k?L"W?R" ?PZ|@?S?C`JG`K?w #8@ ?O?b'?SЀC Y&u T0.2" ?H, ?&GT0\`E@?S?C #8?E?@nSG`E7e`E+H?k9k@?X`?] ?QH`?;t@>: H.q`?\@?9?0@?<VO@T1Ow >a;HKS[oŠ^aUI0`$n?@Z|@?">2J? @, C-)D ?4Nb?PnS?^0" ?QO?RA@?L6/?QpCM$G\;:Y?)C %d)@?Y:L?\?CЀ?EPQ?PP5H.q`?L;?K[@AH`??JF'w <C`JHV ?6?@_?+t@F@P+?M_?eFf@?MK??A`?B7 ??Q:?P2͠?5 HJF'^s`PZ|@?8.q`?3 1\k4@? ?I0`?Xi`?W?3=`,6/E@[`U(@/w ?5?Ow ?DRc`JcU>RA@?HU@Sj+t@?!\kNE@?L`?E(}2>H}/@?V>j?Qc`@_Ow C`J?@C91@,6/?SЀ?UPQ?(.q`4@D2 ?K@?;#O@PdhL`VM`K[@?>: ?;oŠP([Tv@T XPnSG H.q`??HT?:2P@2EV?9G{`E5@?`U?b>>H?OԀ@@PZ|@?*\@?L`?,6/?U?ZF' ?0F?:Y?$v@?Y?f Ϡ?Il@_?+ѠA?-?E?1&`DTn8}?5(}?CЀ?a>?V9A\kXPdh?O(%?eAp`?^: ѠL`C Db9N K h@9D8 ?-?=S ?Y0`]$G^ U2?$&???1Ud)@U2&`?Il$&I0`=`C`J#8?6*<`?1?a/ ?`¦?J ?9D ?.a? aDb9A `?5: ?8VXs Sj6 8}*Y?LJ`?^V?O(%@Z|@I ApCD܀(, ?F`?>a2 ?0?Tb9?Q?@@ ?<?X ?Q?H}?XBH?U?* "J \k? `? ?w N )?L;?:\@&7ZwQ"?e?mP?R@ ?,` Fv???I2?TE?c. ?\k?+Ѡ?HT?>: ?IX?U5@?D:@?A\k?J\@4v@F$! `Ed)@Pш`PdhTXN@V?R6`?3 ?2?Vv?=$G[7@e5@`U?@?Q:7e`Y NB:2P@7 3 E(@O(%E, ?[K?Xƀ?U?[4??M`?=`?8?(%?w ?8?=? EQ*?!\k6>V>Bg w ?# ?# ?W`?^?/10?=$G\kG?&?U @?W,?U@?T@?Kt@?=S ?%d)@4Nb9k4@Q`W"`?V`?OZ\k?`?KѠ?C`J& Vp`]_Ct!?$v@?9D ?-$GUUPQ?^&6?g<?NM ?9?9k6y?+H/1\?, ?`(@nSL]ݠ?<]ݠ?PF?D?C ?R ?b ?`? 6RA@?&F$P H}WIk?<6//w F>j/w K U^O1ApC?&TOOԀ?a@@Qc`C-G`PL]ݠT T??P<@?:<`PK`GT0?L`?R 9k\k?\?[@?E@?#V4Nb?VFRA@V?J?)?F?ZY?@\k?5)V?Aw?TXN@G<?Na?P٠? nS??38?Ff3SB?@ ?TDv4@ ?Q&`? `N 0nS?+H?H ?_n?Xs @2͠P7V?3 .C R`X<`?Tl%?P>: <`?A4?/11&`?7e`?D܀8N: <`?`?N?[`?DEE? ?:?@14#VJ3@>VX>_ ?W@Y`@FK ?Mo?`P?Ur@?H}?We`?e?` H/@?>a, +Ѡ@2͠_2_ZID8 F`H, IO@?! `?U@?M ?=?w $&?P@?U I@`+THBH:2P@4&S`JT?\k?@ш`?5d)@?.;#5V ?L`?P3@?W,?Z\@?62 H-s`?1?C 8?K \@F5j7Vf?A ?^M ?D@?G{`?YX?8, B>:2P@L;BJ?P٠?J RTo`Z@2>?L]ݠ?R`?N: ?>k 385?>?HUr@YlP_N 8V ??@?A `?6M`?: RA@D@?\S?c`?G<Q YuҀSB 3 6*Q?+H?[?Jm@?Dn?Y?F?Pш`?Z\@?W`?D?5?J?W?IkD܀E+H8, w 1\kXƀ_cU@K 6CVOw ?$n?D?(%DERA@?1`?Un?SNM ` Z Q"(, TUD:@P2͠NB v@>V?P@?H.q`93`J??1 `?[y@?a?4v@>_ ?1&`?RA@?w ?<`/w .a?G ?6*>ȀF`HV ??w ?ZF'?8}E5@?\k?L`?U?G`L6/SB B 6?#8?9?:Y?]s`?e#`?T?I?S$Ā?:\@,`3`JKG`?5VR P2͠L``A ^E 6RA@?@?J3??w /@/w <;7?P3@?T6A ?DE?'@Y`A`"J? @?T@?Q>>\k&&RA@?2" ?S?Q>?D:@?E?E(@?LJ`?=$GF@?O1>HC ?D:@?Y?]{?Wq? E55@?, >VRA@?0@?8.q`?Db9?V?Rr2`?@?: ?P?4Nb)>V>?&?5?&`E5@\]s`C-=s`Ea?P`;HB >a>k ?>Ȁ?:"J?P٠?[?N&6?K?G`?^0" ?@٠T1J?C ?Rr2`?Q`?@7v@?w ?6RA@\k(}?k?)k"J/1?E@?V?F`>C8N ?w ?Gh?1\k>HC$ĀYkWq@_?BJ?U!?C8B^[ 9C Xi L`?RA@5d)@V?R* ?W?Kt@?+ѠER@+6U(@R^[ ?0nS?/w A `2J>, ?;#?Qw?6M`55@?L6/?TNbѠE^%d)@?6?9k, &?RA@?W?d@?IG ?B ?YX?IXѠK@ZpW(`.a?Ge`?H?Ge`?J@?%d)@%d)@?D:@?H ?-$G?A&`?E?@?(}?;#?# ?:?Nu?H.SE(@?Dn?8V ?'@Y`?UFf@?TDv?22J]U`bH4@?@2͠?$n?N: ?>: B^[ ?@٠?AH`SLs Il?2 ! `?2 ?0@?@2͠2r2`?BJ?T܀?Vp`?V>j?>k :\@?4Nb?R ?5d)@I B?>RA@>V?MK?W?S?S?R`?1w3 0@@2͠D8.q`FM`UP(?O(%?U!?D&>V?2" ?!>V?Pdh?R" 6M`Ct!?H}?V`?Ow ?3=s`SV^RI U2ZA`?0F?&`?5?G?G?/OԀPnSH ?`) ?ex?$GV E: ?Pdh?^V?H} nSBr2`X, \&;H?Lc?NM ?D@?7 3`JB1`'@Y`?!\k?C`J?.a?0_?R`?Fy8?$G?PF?Bg I@Y?`ш`?[7@?Ex?C >.q`?FRA@ G?Hi`?T?Q ?[Ѡ?P+$G?B>?@\`R>,`L`0_8I9?Dn?V?Pǜ?Dn?@_:NB?9D ?TXN@, SV9D8 ?=K8V ?*\@?C ?R?]?U!?# D@WT0a`ǜWT0I&?.q`w &RA@\@>, ?6M`?FM`?Fy?Jx?QpC?3 O @K[@?, Fy?OԀ>V nS.q`?9*YR`>?=K?>?O?X}?N&RA@Q`)D ?c)@?f ?AH`=K?2 ?Wy?c ?VM`FWyLq8?\kOw Q?F?\`?Q4?w I0`^C`̒R@ 3">!\k387@Y`?5?c?`?VR,X5?YN#?T1?@_?W{`?`?\]ݠ?S? >?Q?1\kL]ݠ?, S8I0`B^[ UxA?FRA@?U^?I0`*LqX}Q?Fv?R2J?w ?P@?Q&`?L]ݠv@?2J?L`?V?@@&1EU\k?3  " FfZ\@XBH%?;t@K h@`@Tb9?8?Q:?U?T&?&@@?9?Jm@?5?H?RR?9D &RA@+H?)k?R?S8?# * ?#8?Pdh?aH`?[(}U@SBDv@\{_@B^[ ?@٠?AH` @V a`\g`RTo`S PF+t@RA@%?Jm@?Wy?;#3E_c^: >V?:?138?>?E >VL`&?Vp`?P(EYXV8?T@?H, 5V?R?[oŠ?'ZP@0nS?_?Un?:?N ?7 K@CV1<]ݠ2" ??Jm@?ERA@?X?O(%OP3@?* ?>?@٠?kPJY?.a?2 ?9D ?(}T:@[OK@HT2J??;#,`Y@Y JF'VHUaRY&?2>KoŠ^aR?1?S$Ā?X@?G@Y`G,<`?PnS?K#, >\k#VG $&?3 :2P@DE' #8A F`&?A `??? H38*?DNb?F>jGWhK@0_?4@?<;?P@1`?(}7 A4?@ ?L]ݠ>V??OԀ9D8 P M `@bTo`1&`?G-B" ?#V?I@?L`?7@Y`?V? nS&8}?%d)@?# 1OڷXZ<;0F?W{`c G@Y`?`7À?R!&`?k <`1`?D?M,M?`?6y7\@? @IlGhP7K#?)k?4nG@Y`L]ݠ)D ??! `E_Y YuҀG{`G`?-$G?O @5[c`eU?)k?4v@?38<;^X v@w P(Y [oŠWUr@Q>2 \k??9k5TRA@?Vy?D@$v@\kHR?`?6Q UZ=H?@nS?$&?\k(, ??$G?;#?1 `?N?Rg >, =K8?! `?H, ?S?C ?#8?B>?R@ ?O; ?7?ApC?K? H;ѠH=S ?@Px?@[Ѡk?DnEK@?6?N&6?N ?K?._ A47?E5@?X.q`?Z2P@?K h@GhW{`P<@N_ " ?Zw?AaTNb?E G@Y`awYN#Kt@DIl?E5@?Q`IkVy, @F?K#?V$3`JWQ M`GhW^`S`J, QRV`G,?/OԀ?v@L`PPR Y A`?AH`HQakM@dD@?H}>)/@Sj6 J ?@2͠?Bg 3VX`c$ĀbZx4v@?K ?)KFRA@H, E?PP?[?A&`?5j]8`N&6O1V`?!&`?1`T@Qw\kQz.^B?w ?" QYD8 5?Jx?3 :$n?D@?GT00nSFy?@?0/@?38!G`T0VWe`^k M_?\q?eI?K@QW`5d)@?L`?J?Ik?S$Ā?6Hi`A`H.q`XƀFy?H.q`?Mo?P ?W?N?/1?&v@<;?*Y?Rg ?G<.?V?HV ?Ed)@?A4$v@T@>: ?N U!PG`NuJ ?3@Kt@?w Ffei@^BUnZ@WA ?8.q`-$GX`P_)HV SV^B`?-s`?B? `KoŠSLs G5P ZP@RMKC$Ā?W?cy?@+O1R{XBHTl%A`J\@[[@\]ݠH}#8F>jG%EP`>V?M?SЀ?T0?7 -s`?@nS?EPQH?(, ?AH`?14?Fv?QɌ?/OԀ$v@?7@Y`$&Q55@?N: ?>ȀBJ??S ?G{`?6??OԀF*\O`Z<;L6/R@ b]_?Lc?eUG?WT0P7`(D?GT0?:Y?&`?Gh?M ?: \kF`OOԀV?Ik?C$Ā?@Z|@?@+?6?@7?,6/IN: 7H?2J?C$Ā?M*`?T?G,;HUx[eA ?U?R;#M{L`E?<]ݠ?B?'@Y`?)k?ApCA4cV^_/@Db9P_W(`Q4K YN#QɌ?6?9D8 >_ F`* ?P(akM@Zx8.q`0@RJ[YZm@V9?38?U5@?w N E@9?2>3]s`b4@Q:&`=`O(%TDv` `7F?H.q`?V@?M_)1&`?C ?F??w ?Ff?@ш`?; h@?V$?]_?3 P(C 0FID܀? :G?F?X$>RA@L?._ ?E5@O @a΁Q?2J2JUIQ ` H?G{`?Fy<]ݠOZ?0@?S?A>V?@?Q`?QH`?4@F@F?4?ID ?:E(@@@?I0`?D@FRA@=Kw Fy? ?W^`?U5@?RJ?Ow >RA@GQ"J ?7@Y`?B>@_OZG<0@?M8`?14?+H?AH`?V Ϡ?Q&`8?E?b6`?XVKH]{`ǜX W`M?;oŠ??w JYU@2 ?@٠F@Z@9?F?DNbLSUPQRB6`5k ?7e`?7(}?">?CV0FVaZRg FHJ 0@!N&6M ?8?12?B ?U@?=S CVIk;#? ?.?5?2 ?Nk ?Db9B`TNC88}?E?T:@A?K@?\c?W?D@D:@R^[ +t@?AO?0@1&`=`B A`V3`J>?1, ?Q?Z3?5;HAwB^[ ?E^?CY/X8] ?4@?;Ѡ?Db9?Zx?R\kB >a !7 @2͠?TDv?SЀ! `&`?N?Ex1\kW^`a\kk?AwS~ U^0FF@W6mE ?3`J?%>V?6? V?G,?J ?E@?W6m?W?;#?F?T>WqWhM*`N_ Rr2`G?H?HTF>, 9I ?F?[#??(%9D8 ?-?;Ѡ&`' ?# ?8, ?6RA@?B" ?AH`GR{?E@?^M ?X ?YuҀ?QpC0@(.q`?;H?._ ?,`\k=$G?B" ?U@?Ex?2J?\@<;77@Y`SLs VG`<M`R* +t@?Ow ?M*`?&ApCQOJ?8, ?W?V ?>k ? nS?38?-?>Ȁ?Ct!RA@6RA@4nFf? ?Vp`?X ?MS , 9D ?PP?T>?w ?0_KKQ*`?G`?Xs ?E(@.?8?! `07@Y`?M ?Z@?N?7?3VLcV Ed)@Xƀ\S?Q ?aC\kA ?P2͠?IlI@NM ?%?5>aJ E=K0F3 ?w ?S. ?V`?3 4!6RA@F?(%">"J@?7 ?:Y1wP HV ?@? H ?RJ?VHYN#?)?MK? @?$&>V?,6/?F*?6M`Ex9?S?S8?@?F?S:U@D܀?0nS?B6`B Z(d' ?S ?B @2͠Gh?;#?G,N S$&Q\kcVa?RA@>\kCVKH<`?F>j?Y?X?ZP@?\?Ms`?0?1 ?1&`?S$Ā?J , 3 A44v@?B?V?X VHU? ?RR?k3 nSID H}?9D ?T?T:@?D܀?H, ?V9?P?:2P@?4&;oŠ?Nu?W@Y`?S?Db9@?OԀ?7hH XT?F>j?aWu?I?&?Un?Wh8}` \qECQ4H*\@0FLTEBr2`?A&`?6*PnSWyDb9w $v@,`RA@?6y?*L`ZQ `)k?A?J3?<`?CLs ?C Px?@Y&u ?1 `?OOԀ?<6/?J ?H, ?8?Db9?R`?M$G<;?9%d)@O; ?.a?W6m?3VPш`G ?F`?_1?S \@?JY?_?Wy?Q&`?F>j?!&`?Q`?T>a1 `?K H.q`^6?,6/IkE5@! `?14?\J`?c ?Nu??>Ȁ@ 6BJ$&?QH`?R6`?:\@?<`?F`?148?w ?D:@N bNM ?%Ge`St!Dv@?7@Y`?RhF?J ?D܀?SB?Qw?QpC?W(`?NM ?<`?FRA@5?D܀?N&6?QpC?M?%?2>?J2P@>_ ] KH?E?G`?6y?>Ȁ?6RA@PPes a`?>aA `B ?6*?C`J)D UT?#V?H}?w SB C86*FyL`M`AwB6`] `ǜ6??1?6M`?<`: R@ 7e`v@ ?Lc?J\@?:?U?S. ? ?F?R ' L]ݠ7h,6/G`K#?=`?`P?] ?G<?1w?P@?c`J?cG}@?R{?P3@?U+@$&7hS. ?%d)@?M{??7@Y`?;t@NM T:@DEQpCV@Fy>V?ID ?Rr2`?)kHi`=$G?6RA@? HN<`?@2͠G@Y`[ h@=s`?!.a*Y1&`?5?R?.a8}?B>?Ff?3V?1&`96y?L"W?S ?U@?H?J@?N&6?<]ݠ?:Y?A\k8V UPdh ?A `?CLs ?1E5@Ya ]*`9D ?W@Y`?O1Nk U5@)?J3?R{?I?*Y?1?!%d)@6RA@F`Rr2`GhD@[7@WT0, C`JP<@?>_ ?D6y&`7e`S ?P`?L`?HT?, 5?H?H7 ?,6/?IѠ)?:?" <`B?!\k?U?Xƀ?P٠?F`?Br2`?D܀?B" ?3V?(, ??S ?D:@U P w R Ud)@: Q>TE0@EQ&`?+Ѡ?GT0/1ID8 TV*5v@V`KVp`?H?\l?VM`L`dbq@TKL;?<6/?XT?+HE(@? ?6*?Qz.?^C?0Q>@@D@C ?:\@?1>VI H?O(%?X ?R ?Db9?E?3V$G?2?A\kV1 `?3 ?GT0?I ?J@?Aw9TQ`? `?@2͠G<au8au8St!?VM`?b'?X.q`6RA@T0@?CVBU? H$v@fyd?C ?NM 8, ?# ?1`A4?)D ?I ?1`?Na?Y ?FM`7<]ݠ?7?+t@H H?JF'?0@?(}?Lc?N ?@F?v@?+t@?B" ?ak?HV ?K[@<]ݠQw ?O1?8V -?<`? P`?*\@?RJQc G@Y`?; h@?A ?G`?1`=KA&`>_ \@VC ?@?[R?QH`P@^`i]T ?A&`?J@Ik_ b\P@D@;oŠ?Px?@?^C?9>Ȁ `w ?H?Zw.\cPP@_V?G`?7?4@?P7?3`JA`?B?, 2>??#VOVp`?$G?QO?<`?@?Ge`?Q`?@@?&`?)D ?a9L"WVfa c[T[RM_JE(@?+Ѡ?Rr2`?ONC VRA@?7h?Z@>VKH?; h@ID p̒lbӀ?1?KQfW`Q>))D ?)D ?<RA@?=$G?P@?`;H?5?St!?UI?+HJ?&?R>?'E@?# ?U?X}?R,?S ?R>V3`J?T@?`nS?D:@=S ?Br2`?^ ?Tn?8?%?4?A?a%ۀ?`,R>fvCЀ?V`?Uà?I ?9/OԀT1[>Ȁ?B`?1`?KH?`K?Px?@CLs HBHS ^aS%d)@?`?/1?<`?C$Ā?2>?G,?T܀?H4v@?7e`?2" ? HP(QpC6*: ,`?>: ?7@Y`???Ud)@?P+(, >VEaQ \O`RA@?U@?Ex3 2r2`&`9D8 J D@?`?G`?# W(`e\?+H?Q4?,6/EMLq=`>_ Aw?E^?U@" J+HYlnJf *?RA@WYX1&`?5VHi`W`L, B Nk ?K[@?f۠?aY@1Q"?>k ?V\-2r2`^ RJ?Db9?SV^?G<?C ?CV??Ѡ?R| ?\]ݠ?S?;H?3?Ge`?AH`+H55@?">?Q:?a?PF]icL`@٠?D܀?EJ2P@CЀON[`S?, ?5?3?A4!\kG ?aNUZ=:Y?Db9?Pdh?HT?<`?.a?1w?G<?E3 ?w ?C ?W?R^[ EPQ1\k)D ID L8}??-s`?7e`?E5@?*\@-$G?/w ?2r2`?Nk ?[4??E;Ѡ@?5d)@?@4nONWJEK#, ._ , ?QɌ?Vf? P@F*?Br2`?O; ?DnP\@[`QfW`Ik1\k)kSV^W(`Q"TNbR`@4v@6DEKK\k?F*?!&`DENBA Nu[@?+Ѡ?d`?YD8 QH`U@?D@?UI2 [@U-?VAwT Ud)@BJ?4Nb?6?v@?8}?;oŠ* 0@?1&`?(};#=`?>_ ?L`A`]*`K#?A`?>:  @nSKK" ?K?/@D??L`?<`a@Z|@L`>_ ?`7e`JY @?C ?9: NȀ0?TDv?Z?8V K@Tv@<6/?Y ?dXN@?Tn?, )k8}7E NB?$G?@75?%d)@?EPQ14?S?E@?I?Z\@?Y0`?N: >HR| P+?@__(%OZ?Pш`?Ik0@?9?SB?JYC ;oŠRA@:B`7hQɌ_@^ U=S 2JPTQ@@?LJ`?NB6`E? # ?0nS%%?8}?D@?ApCAwX $&?Y/?CLs U@N: ?I0`?Pш`?RA@1w'@Y`2J*Y6yU(@Zc# ?Sj6 ?AA4?! `V?5d)@?S ?SHOڷ>_ >MQ>?J ?`Z|@?YD8 ?T0?OZ?&?DNb?b?bYe@?Ff??w ?V ?U?Lq??@5\k?J ??@;t@SV^! `?b| ?c~ ?:@KѠL`?NȀ?b@ ?Na8Br2`'?Dn?\kKH?ID8 ?Vy>_ ' ?P >V?S ?5?' ?0F?<6/?O @?0FW U?1&`V]$GWT0?@ш`?D:@2V?2?RA@<`9k?55@? <??)kF`VL"W?Ct!?R?ApC?' )k4n?K?Ow G,M*`>V'AH`B" Ex! `???@Z|@?<6/>k ?,6/?P<@?5? ?H}?S?L]ݠ): ?RA@C R ?w ?T0?Pǜ?1\kDb9>, ?apC?b?G{`?FM`?@@6RA@?:?BS X @?1?Db9>V7 ?Xƀ?Y/P I?L?C ?)?.?5d)@B@7?AwHU2L?)kVTY G@Y`v@?6M`?H >VJx5d)@>, ?E?2JPdhH ?G?OOԀ._ FM`?8, ?O; ?FRA@?Mo?;t@C`J, ?>GT0P_(, 4&OcK4?>, ?AH`Dn0@ +Ѡ ?\k`.?* ?I?)D CRA@>Q*`C ?@ш`%?1?PF?Z?G@Y`>\k38G@Y`D:@ @?38?I0`?DE4n;t@?1`C ?3 ?T@?M{?.q`$Gw @@Ff?*?E^>aX`P 8-QH`K#@@NȀ?2?R" ?A4 :,6/?K h@?Pt?H?Qz.?3 J/1A``i]R?@@?<]ݠ?k(.q`>H?UPQ?AO]iWh?$v@?>ȀP+>V?!NM ' ?CЀR,`H, , 1wESBP&`?Nk ?RTo`# T0F.a@&/@Z_ @ @?T?1wNȀH}LJ`QpC>V?1wG<]ݠ\kQS`J?`?, R{JF'?S ?U @M$GZ@BJ4Ge`L"WPPLE*?7?I?6y&V?9D 0S8+t@?TE?C P٠WQ QM*`P<@G<)D 6;#?@2͠?G<3 D:@0_;#F>j>a?/w ?@@G@Y`V`0@?@6M`?HT?V?A ?6M`??(%?' ?0@>k ZP@S@_4NbSB A4W@Y`?2?P3@X cMs`6>HV$P`??1wRA@7F8k?OԀ>Ȁ#VN`U?2r2`?8}$G* Ua J3VA`' >VPG?NȀ?H}RhFL`?W`?Tv@X}^ 2>">A&`C8NL`A4)?ApC?;oŠ&?FRA@?Q\k?!&`?Lq?[._ W<?, ?E7.?D܀?"JG@Y`$&?S ?\`?S. ?<?=S ?=K(}3 ?*\@VEFM`>: 1/11?H, ?W?Iw CVN: =s`??OԀ?G,?>: ?*Y?,`?K[@?P3@?%d)@! `G{`V*J ?!\k?7@Y` V?Fv?M`?T?\`?OOԀ>, ?K ?S ?._ $v@%<`7e`8A\k-s`?O @?+HQz.?1?Pt'H}@+AO7OOԀ`sIRTo`>RA@J RR?`?D?6y?DE?G@Y`?, * VHU^VF>j??w ?QH`?QH`:YX.q`B# C`J??E, ?FyDv@AO?GT0?@ D:@;t@?@@?@٠RA@$v@?11P S J@R`YlUr@W\L6/?I@?X.q`?; h@Jm@B6`(}G@Y`2 ?Q&`?Ua?P?W?W?RhF?!\kQ4Br2`?L6/?P ?A `?P?Y?N: ?3 ?N?X8] ?B`? H?L`?Ms`?k?6RA@?C \k-s`<?@@?]*`?W"`a=$G?3 ?S?V\-?"J@2͠?04nY0`A ?=`GN&6?F$?M ?;Ѡ?Tb9?RA@Q H, Q\`K#?A?Qc`?Lq9D ?+t@-s`Pǜ,6/?H}?Il?O @?M7@Y``+c3H}?J ?<I T=S ?RhF?VHU?#VRA@?@2͠?;oŠ?7h?F$?L"W?G`??(%?OOԀ?]_?;oŠb{aO? @?9kR,K[@?Ow ?Tb9?/1\k+ѠP3@TG` RA@MS [@VEx3V `=s`TENa?Ct!?S \@VP?1L]ݠA ?@٠?8<:?/w ?G`?OZ?[y@?a?FRA@M$G?C ?e?Xi ?@?H}?Sj?&:2P@?:2P@?V?Y0`?W?R" ?-/1?=?A&`AH`Fv%H}?<`?K[@?=s`+HE;#?Ms`?Zw?=S *\@?<?8Ex?(, ?P ?4Nb\k?>k ?Q>@ ?I $n]S [|T:@V ϠApC?Aw?E?0_?@?C ?R ?/1M{D:@%._ `0@Ur@e @k*SeAp`Bg ?!VfaY@??UPQ?J 99k+ѠC-2 ?Q?^B?Q4??(%?Wh??OԀR`Il?;t@>, UF`?Va?^0" ?J ?A?0@P [@X K[@$G9D8 UE^?P_?\x?X}?Qz.?581`?: ?@٠kC-M`Nk +H?9HJDb9?"J?7 H?H}?c ?Zp6?7?Z3?9Ed)@??2 V?3 ?DNb?Pt?^k ?`¦?U@?:2P@-$Ga? nS26*?.q`<;?F`(, Ud)@I?4@?%>\k?Db9?E5@ID QpCHT @?A?Kt@?:>>9D8 ;oŠ?;Ѡ? Z@aUI 8V ?>?@?G ?X}?OOԀ+ѠCL`VHUR`EP٠[Ha`iOڷ8V TETv@?B6`?P+7D@?-$GOw Fy?=?U^?KH8}E5@`?5V?8?[oŠ?^?"JA4?w QfW`G@Y`?(.q`>?+t@?N ?<6/??OԀ?C?C8?P?8V B6`>V?C-?7 ?A&`?KK?Q`?>: QApC?V$?Tl%+HV?K.aaaa_w FGB6`?<`?4Nb! `?E_ ?Dv@?FM`0nSF>jK Xi`YDE9E5@5V H$G&?A`?W"`?5V=S P@Ct!?1&`?&B 9?8, ?: &`! `?/1?=S ?\k1\kRA@?! `?;H?T@?Ud)@?>Ȁ?B" ?N ?=s`9F?@2͠? @?&?79Aw C B>?N: ?L]ݠ@2͠0nS?9D8 H?7?Yހ?;t@?P٠.q`B6`?A?H 5_ ?&?51\k8D܀[K_N ?W`?0@R* I A4Tb9S55@!G JC X`aM R@ GX`M{? @5M8`:?C ?M`%d)@FRA@?G{`?XBH?MS ?L`?; h@SZ@B&Q>Ud)@H?D7h=?B?>: ?1\k?RTo`?K h@a?M_?b'?Y?Aw?-8}F?$n?G, FM`0@?6?C ?DE\kO @F@?&?=S ?I0`?S ?N&6?2*\@9? ?Db9?K?W@Y`?]$G?N&6! `0@?-$G?HBH?M8`?D:@?<?;Ѡ?<;?;#)kK4?? ?R,?JY?1w?ON?w ?1G K ?H?T&>?\k8UxXM`B^[ 8}?2r2`???8?S ?V2JWhRFRA@A C-HV 9,`EPI0`?*?G)=$G?G?K#, 'a,`0_2>ȀXbTQOf9t c`IV*d^ȀB^[ ? w >V?@7?'@Y`9?1?*YI M_"> @C 1`?HT?L`>970@?D&?S`J?1&`3?A`?Q4?G{`?F?H}?*Y??L`?QR?V? ?_ b?f~?^ ?HV =s`T@E ?/OԀ?5Fy?$G+HB?/OԀ?'Jm@I:AH`M U4@?T ?Q?Ex?P<@?<;>V?@ш`?2:\@K M`+HF>jea>VL"We_E; h@? H>RA@8L`O(%;H-5>?D܀KK? ?I ?@_?/@0WQ R ?O@?W>9)2 ?3V?NM ?:#8?8.q`?RR?I8?M?i?B`?i+k?Q `'@Y`81?1\k?w N&6K@0PK`T?0@?I0`?RA@??1?EL"WW`3`J?&2J3 8}F9D8 0@٠?! `?QO?Ow ?7@Y`?0?C$Ā?Kt@?;Ѡ%?6?T0?BQ*`T@- ?MS 7@Y`?Db9?NaT]$G2>?0@?0@?0nS9k3V?J?Pǜw T@Mo?5d)@?-$G55@?(}?P٠T&O @FA&`NaDn\@Jx>a?Pǜ?B" 1&`?4v@?8AH`?RA@?Ff?Hi`@7cV^UZ=?Oڷ>VXƀ1`?Lc?)<CLs G5?<`?Bg ?RA@$n? nS>\kHM{?\k?87 ?@?Ct!AC ?R| ?TDv?@2͠?GT0MS ?2" ?M$G6*C-?@@?Nu?1E ?0?`@?\@/w O; %?L"W?VHU?/@\c]U`<`@FO1?1G`5%d)@K h@?k2J?1\k?8.q`A&`E19?&?R@ ?Q?EPQ?%d)@<`/@?#84n8V ?GT0?P(=S YD8 P3@-$G?LJ`?S ?[H>_ T&?<`?`I@^JGe`?Vf?Q4I Z@SB,`._ RhFQ4v@1\kNaR* ?!\k?V9?BCLs R `U?K?FfC 3V14G`(}?>_ ?4@Q`e7W`?@@#8E?R,?W`2" L"W@@>k ?8}?\?\,C`?E?&RA@?8.q`?A E@?RA@?/1QF@?T?RR?@@?Fy?7h?P7?d?V@?O@?Qc`3V* ?@ш`? @D:@S P_??A\k$&D:@:Y?8, ?T@?GhR{Yހ$n?@F3 LOڷP<@(, ?R@ ?T?@ш`?2>$G@_?3 ?L6/RA@Ct!4v@??R?Zm@?@_1 `8, P7S 8, (, *\@?I?Z?EL"WI ?* ?B^[ 7??9D 1 `?MK?RTo`?K<;\{6M`?V Ϡw [PP6RA@(.q`4[7@d]DNM ?C8>\kF@?BJ?\?FyHR6`W`N: ?E??w LqH, 2JK4?UPZ|@E W`bYe@L`?E?VV?W?P(G<>_ ?57@Y`38?Q?Ur@?D:@?A`?P+?V>j?B`F`1?A `Nk Q`?M{?T@?A `?"J<`?G ?g`?c?T?]} ?X}?BJ?I@?.aR>TP R`JF'%?0_?3`J6RA@Dn?)?=`G`XBHE5@?%@ [@YXEPQ>H?D@?I@?$&?!&`RA@?5w G<E(@?">?X@?[@?">FM`@Z|@MQɌ2?9D8 ?M$G?Z@?`P?T@>3 ?'?R`1PKK?J ?T ?V$?\l?Jm@G(, ?<`SVW^`?E?Q"?6?)kX}jR ^?0@?3 %?2" ?C 1wV4~@VL`;#\k:UIS. 9K#]8`Y&u R^[ \qX` ?E(@?]U`?Ed)@? ?ID ?8B?6y?V Ϡ?ѠQfW`A `.q``?6*?Lc?R`?>: ?w ?3 ?R@ 3 ?N ?C ?H?>: *\@Ѡ?Xi`?Z@?P?Q&`?B ???S. `_䣀Zc<`8,`ApC?Nk ?B B6`GGP7E?"J?'@Y`DU@L;,EPQP C DNb6RA@?B?8: 2(}A`B^[ )?4?;Ѡ?._ ?Aw?E>RA@H??(%?Lc?Y ?]`?Q>?4!\kC Bg ?X}?7L6/I0`\k?*v@?&?QpC?P@, `(, UII ?Q`?E5@.? nSSjhs ]_v@8.q`8V (}4&Z<;bw(@M?v@2DnL;L"W4@<N_ ES-M$G?FRA@?0@WYEV?' ?@F" P2͠F7h3?RA@$GR`W6mw ?VRA@?S~ ?9D ?HT?Rg ?PK`?V?M{ISjA`CVH?I@\@JC8/OԀA4OcK#* ?3`J?1w?38? GhE^: Y \"W0_I@_mA&`?>B Y[KJ2P@>HX$e @?1?P?1&`?3 ?H ?. ?H?5R h` \g`?Ed)@?H )k>_ %d)@?! `ExW1?W{`?HT5H?B`?/1C8G>RA@?R>?^M ?BUFf@4&?Y?PF??w ?W<?Va?I?N_ ?Ow ?K4??v@][``~ \@?H%d)@QɌVRA@C-?@?C?F$?Xƀ?S$Ā2JP7Sj6 ?1?lx?su?`~ 3V?0_?NȀ?* CЀ9D8 ?3 ?A`?B^[ ?<6//OԀFD@K[@<;?F>j?;#T_EF$?B ?6?D:@?Q:?PZ|@?R| ?0V`U!\k?3`J?$G?2J@ St!SV^C`J?%d)@k4&!&`?,?1&`w X k dn?V, V>j>Ȁ?3 Kac`X7hTZ3?DE?V?w ?G{`?\x?Bg G G,??9V ϠjP@`7RA@?9?G{`?J?2J?0@@_aDY?J?T?G,?Tn?Xi ?%Q `JF'v@?@F?L]ݠ>\kS/1?T܀?E 1???V*?\?UI?@ш`?E0FVRA@W??T0?TNb?Q>?<]ݠDnQPш`6M`?`+?k?S$ĀR`J , ?k?I ?R@ ?4n# ?@٠?R" ?S?R?3VK 2J?Q?M ">C`J;oŠ\k?&RA@?#8?0?4?@7?L`?B^[ >V?)D ?B ?H.q`?G{`?KK?Fv9D8 U%@7U(@\6/EG*?@_?V>j?V$?(, MoC-?L]ݠ?^J?E^PPJx+t@MoUr@F$V?>: ?=KG@Y`Z :\@?N?3 A&`3 8}M`UjV?%d)@?P7?Q\k?13V*Y?*Y?H ?Z<;?Z(d?3+H?6M`?ID8 ?Z ?PK`37@Y`?E?A`AI0`H}]S dxVRA@?6y?G`<6/_@[|?14?DnL"WVf9?B?Ge`?, EHGhID8 ?:?T@>VW"`Rr2`?1a?2 RA@G2" ?@ ' V H}?+t@Nk ]`>?*YJYuҀ_ZV?E^?SЀ@ J\@?: ?I?Ct!?8, ?.a?P+?[@?M8`?6*?4NbA4Kt@>?.?1w?OZ?A9?6*?W(`?V\-?KoŠ?8(.q`A? ?W,?W,8.q`S$Ā3VI?<`>V1&`?$&6VM*`?$&>V=S 8, =KB" 8}DESLs PF7e`RA@?/@?A `?6RA@.Br2`C8K[@P`5+@JE?8}?D?#8?<6/?MKD܀$GRA@?, ?C -We`OOԀ?9?D܀%1>LT1?+Ѡ?A\kPFZ\`^VEd)@?w ApC?)?[y@?Q*`5@?a?Rr2`?X?F` KKZm@J2P@?RA@LqK h@?6*$&<`?Q `?W?Oڷ?Z?\?:\@F>jCV?'@Y`?:2P@3 E@)kZGcZ@Q`R6`IlM U28}?PK`?[R?\?ND&ON>V?S`JaaaYl3V?9?,`E X O @, 6P ??:\@?6@2͠B ?w :UE Fy]>P3@?AH`.q`Uc`k~`A >V)kIl<6/GhB?7$nI0`?G{`?[4??:2P@6y?D@?Tn?Bg ??8V 7?PZ|@?_?Qc`?P+?W@Y`?:Y ?:\@J ENM Sj@F?D&?W`?Xi`?L?5!\k??Pt?Db9KQ>P3@ZcVyH, <`?N?_; ?Jxw >RA@1\k7e`?C?]?`<@?#8SV?:?T܀J S >V<`??\"W?M ?V?^0" ?7 71&`3)>RA@?)D ??1>Ȁa^0" R`SV^U2X$UZ=: ?k?7e`?Pdh??1H 9?=$G4NbZ(d_OԀU^JL]ݠOcP`OZ? ?F9D8 R 8?,6/?%>?14?K h@? HUàO1GW`A\k?8P3@]]B d܀[@?,?E?DNb?BJ@_'?^s`?`# ?L?Q`?P 5?\?L"W?V?c-?T0? ?C`J?,6/M`PZ|@2>?A?J@?7e`??@?TNb?S?;Ѡ?1?A?Q`?G@Y`? `?0@?7h&$v@? ?S. ?U?9D ?GT0?RTo`<6/Z /OԀ?b" ?h_?M`B?U@?aw>H3V?Bg :2" ?I@C$ĀU?A?P<@ @?65???7 ?PF@">?Bg ?J3?VQS8ExUxZ;H5Q1w?`T\`FM`?Ѡ7 X}[@QH`@7?(}?v@W@Y`\"WEBJG`3 ??I?B JxQ*`H}O(%3 2" ]U`Z(}6?1?%??OԀ?P_?O @8.q` @?]S ?b>?]S ?\J`?Q`?0@?@nS?B 1w1`?P`?V$?1<`?@@?ApC!&`?O @?bm<?S? ?B>?E?W`<;Y/G`?:?;Ѡ?(}?=$G?IX?Jm@?Lc?PP?OOԀ?R?QH`?* ? ?T@?V\-?C$Ā?RTo`?TE=KW Ct!?H}?U@?7=K?F?Pш`?Dv@?U3 Nu;t@T@Rr2`?Ed)@?J `?8?6?3 ?$v@DEWT0B ?UI?HV ?8?T ?bg ?]s`>VIkG,YV۠?ApC?CVJ\@C84nSBPF? ?DW`2͠X, UàO@K[@[Qc`SBA?/w 5/@?<`*YHB>_ H?_Y ?`?@@?#8=S ON2? I @ш`?G`?SB?WJE?\c?T?Qc`?_N?[7@?@7e`?Pш`?W`?>k ?, ?1\k/OԀ;H?@ ?Ik1wL?OԀ7<`?">?NȀ?Ux?Q*`+ѠX Qc`?/@?D?>a?Ge`?N&6?K[@?J?C`J?@@?P`?J?w (, ?\{?`@?O @?PF?N&6$G6 H.>V?0_%d)@AH`Px?@P+?>: ?ONA&`P<`<? ?PK`?HT?*? ?V?A `?S$Ā?M*`%d)@A?B`?ѠA$&?P@?S T1W Y/>: ?\c?Y:L@ш`L`0@ ?.a?-s`?0@U]U`UZ=X}W`B @٠OڷV$U^?4?Q`ERg ? ?\k3V,  ?13 [K_1M*`H?(.q`J\`P++Ѡ;#>V?M_?Q`?R?Sj6 ?K ?I ?Y:L?Z?-s`(.q`?P?W?Nu?P ?A44Nb?3`J?R ?1`PZ|@TQ:TR!\k?C ?A?CV?Ik?;Ѡ?7?G`?A?4v@?G?J3?<;?2>?2" ?AH`?M_?$nK[@?5d)@?ac`?Zc?&RA@?<]ݠ?P<@?I ?NB?Pǜ?Br2`?F?NȀ?`MTDvIk? ,6/UIX NB<;V)0@?5??(%?V?\@?M?_?^ ?Dv@OZA `A IkFf4NbL"W``bw(@\]ݠG@Y`?EPQ?8.q`S W"`B ??2r2`>V@/@UR6`?" 6RA@Pdh&>, MKZcT@?14?5W6mT?">?@! `?& ?" ?._ IV`O-?%d)@DEUr@<6/?5, ?-s`?, ??@?K?)-s`?;Ѡ?P@?O @?E ?`$& nSB^[ M_7h?A4?R`?G{`C$ĀE^?Tl%?a4?7e`Q `0@?NB?UPQ?V4~@?S. ?Q\k?W?S ><;?w ?7 ? BWqb^[ aRLYuҀK#?Pш`?U@?/@F@FRA@?H ?^W?P _NBJ?B>?6RA@?11w7 WT0U@F$PSTDv[WQ NBRS~ =s`?>: .]>K ?TZ@?BJH8BX YIkkJF']S H.q`?4@79??;Ѡ?LJ`?%!\kRA@9K TDvQ\k>?9 V?<]ݠ?3`J?a?<6/?-$GJxD@?A?._ : ?; h@?G@Y`?5\kVH.q`aĖ@d&QO?;H?H ?w [*S<`?^&6?_Z?5=S /1?-$G?Kt@?Ow ?(.q`?@?P(?Q*`v@,6/?:VB RA@$n[ ]B V?3 P3?[4??Z ?D܀>, @@!\k?B^[ ?Q7?M{?Ow ?&RA@?/@;oŠ?6?JYOOԀ`(U^I RA@?"JUr@afW`CLs ?GT0H, dZ@P@?S?5d)@L6/=Ms`]`Vv1?9@EPQ *R^[ E>N\k?A`\k0@6M`2" ?A\k?HBH?$&H?5?Q>?X ?Px?@?@+?Q:\@A`?QR?UI?: , ?1&`1w_Ec$ĀS! `<]ݠ\`^?-s`?\O`?SV?M*`?S?8}=S ?3`J?Mo# Jm@?,?E <`N IY Z<;?.?K Fv@@?[#?[1\k7?E@??OԀ?GT0?[?U @?2w @.aA`?3`J?9DE ??OԀY:LE(@?C`J?1apC`πBJ?D:@?E5@?E(@?M8`?3 :\@?6?X ?NM -?@ ?ZP@??@Kt@1?8.q`?!&`H)?k?1 `:2P@Fya?4n?C$Ā?A? ?'@Y`?0@ANa ?T?Zc?9G@Y`#8?>Ȁ?/w &RA@B`YkbJQ?K[@??w L`?@?X`?DB" ?* ?V>j?L`/@0@)SYN#Q`TNk ?B>?B L8V ?V\-?LcNaTNM K h@?0F?W^`?Db9F*A\k" OZO1?)k?(}T[RUZ=D@?K#?@FZYD 5)k?G`?X$?VB ?@?w TXN@L`?B?@+S `,U?U(@?_c?dn?[?@@?Ѡ?0@?J\@?R ?L;?H}?-E*?L?Q"?Lc?Ej?K4??9VHU[RR>a?<6/%d)@WhF>j?%6? @?C: 8.q`?,6/P+^_ FRA@?1&`S`nSV>j ?&?H?7hH\qfbR^0" Uà??9Q `Sj6 8P+2>?A\k?;t@?@٠?L`VU!ID ?: *\@T=?QpC?W ?N ?I0`?U@?_ڷ?\?EPQ?,`?UZ=?`_?\q?S?\@I ?3 ?X?S?N_ ?Tn?T܀?Ff`7 ?Mo?V?L"W?$v@DnApC?D?NB6ya"dDvH, ?3 T1a@٠?Ed)@>HNM Oڷ???]?P`$n?0nS?PF?R`?K?G?\,C`?f?Zx?Fv?]_?] Jx#8?2>?Dn?FRA@5k B6`@ P٠XƀDNb?!H?9D ?<6/=$G, Y aR8, 1wSL;?2 ? 9k?146M`f@kAX?8, ?T܀?Ux.F?1* XR@ /16y?%d)@?R ?.aX`V>jE^Q R| ?R`?R,`X}M ?O1?Z?@@?+t@?U@?[R?Sj6 ?K h@8U , ?R>?Ed)@??1?UI?[K?L6/@FI?0F?O@?SLs ?U?T?V\-?D&Y eU ?%?;HD܀X8] >_ ?C`J-s`C`J?:2P@?A46PPM`?4&?VM`?KoŠ?/w ?M ?Yl?T&!&`UxѠ?`i?`@?W^`?b?^u?ѠѠ?H ?Jx?F@?JY?K h@?R`?Q>, DCLs ?k?'Ow J ?=S ?>;HMV۠\qS>(}?RA@$v@Ge`;H&QV\-A?5?S ?MKѠPt?$n8.q`U2E@IkceCЀ?M8`?P`?Q`?H.q`=K4?6PK`]Jm@VID 7@Y`?P7?E@AH`FfKHOOԀ?$n?X ?`_?]?4@X V4~@?3?F" ?*\@?U, Br2`YuҀL`?" ? ?+t@?ON?SB?Bg 38:?9D ?S ?V`?CЀ' ?7??OԀR`a΁Xƀ7 ?Ex?<`FM`A4?/w !&`1&`?4n?1`@?0@?G`?ON?F>j?>?(, ">)kQH`d`^?:?R@ ?Ct!?CLs ?#8Br2`?k?O(%?: 2>V?LJ`?]?\?8}(.q`C H-s`UDE?K?Q?@Z|@8HTS$ĀH >\k@C`JM{QH`KH;#A`>a?8}?W?bhF?X$J VHU? ?4Nb?w ?OԀC UnR>V?Jx?C$Ā#8P2͠X}P;t@QW`/@?5E(@H, ??4?B ?H.q`6Oc?%?QR?Tn?]?ZF'?-0nS?8, ?-A`??Tn?F$Ct!7\kJm@T@QOGT0?+t@?P٠?J ?+t@?$G?D?Q>?N&6?7Bg P<@#8?;t@?# ?7e`?B^[ ?3V?Aw?9D8 BJEd)@: HBH<;?=?H}?J?P٠?Nu??@?%?;#?:YM*`^: RJY[H\`EV4EC8?Ѡ?:1&`K?1?-$G?HT?Hi`?38?Ik/OԀ?A`?9D8 R@ UPQ>a?>Ȁ?TE?M$G4@E?:2P@?X?Tl%?:\@?6M`?+t@(}RA@"J=`?`?P<@?X$?S- J?%?Q`?Q`?M?=S w ??F$?F`, L6/VvTE7 ?8.q`, E">?10_JK4?V?[|?a`?<`LDNbGe`Oc?/w ?X?Tl%?=$G?7h?7-s`! `?P<@?L6/@٠;t@?A4?VSV^JX}"J?S$Ā?S`J???>Ȁ?W`?b@?Y:LVP2͠EPQ?&?" ?%d)@?V*?`i?W?E , (, ?@+??w 2 ?RA@?O?Q"?KoŠ?H}?7@Y`:J\@1w)D X`M8`, ?,`?2r2`!\k3?V?">?, ?)D aA`C EPQB>1 `>V>RA@?EG ?Dn?KF$Y@Y <6/?TNb?QpCBJPx?@?*\@?X` ?[ h@?\J`?cΠ?]*`?D@?@  TQfW`<`,`?:??-$G\@?D܀?SB ?].2?Ur@? ?`?P?AH`KQ9D  ?V?3`J?1, V?1w?+Ѡ>: L`?4?bTo`?db9?PF??kA `VM ?>?P?8}?!\k?I ?D@??H}?Q V0@?@@?@O(%W6mZm@S~  ?E ?E@?=S ?Q?b?a?;t@N&6Ge`/w GT0R@ &RA@?R`?VHU?6M`G@Y`?V?_䣀?`) ?C-?0_?4v@ @2>VBJQ:H ApCSV^SB5?B ?^k ?co,?QH`?`?3 ?0?>_ ?B^[ A `Nu>QQɌ7 0@G`2>_@1&`?14?(%H PPG`?Dv@?K#:SKt@!\k?1?Q?`π?S2" '@Y`E`}5 [ѠNuM*`4@ HDn@ш`1?2J?W,?S-JYN ?G{`?(}\g`Xƀ?VFyJ\@4Nb?@VѠ$v@D܀E ?@?[>+@?Y ?M ?ID ?Ms`?HV ?14* !\k?'@Y`>V?" ?Q`?Q`?#8?@F?SLs ?Dn?3 ?2" 9C$Ā0nSL^_Y M_?%d)@?&>?PZ|@?\6/?L]ݠ9kOڷQpCS`JY VHU/1?<]ݠ@+Vy?`t?`K?B`6RA@Ow SEFfAH`1w?4v@9WNMK\cR (.q`/w 1J@W<G ;HKt@>?"J\]_?) \SXL4`@@H}UnSA&`, 14L`SBT0G<?(.q`?@Z|@?7e`?58@Z|@?2r2`?Z@?Yl?#8H}7h?D:@?R6`?5?@@B^[ J@?D?[[@?T@?@٠! `DE: ?>: ?Pш`?Na?A `?HV ?f*?e+ ?RR?>k ?R ?\`?L`.q`?Ct!?S$Ā?EJm@Db9<K h@3 >VB`0_?@2͠?Ex?=H\MKG`^\J`S`J^. Y,6/8V O@;Ѡ(, GMKFv1\k?2 ?,;ѠO@Pt<384&R* _ bE?^?g?Kt@R`# ?Zw?R B>P ?!&`?Pt?L`?&EG?$n? @HTG(.q`?7?Qc`?KѠ?!?9D ?=K? @?A\k?<]ݠ=Ow W,O(%?Pш`?Xƀ?>, ?SV^?V Ϡ?S?U5@?R?L"W?QfW`?T?P`?;oŠB" QV?[?`) ?K ? ?E@?S8?7h4&?=$G?PK`?NȀ?L6/5?<`4&?@?1w?Nu?K@<]ݠW@Y`F@@٠_ @c X Fv@F`A\k?<]ݠ?CЀ?" *AO; h@?5?">?*BJMoFI Gh" ?S~ ?c8?R Dn?H?e!?U(@<]ݠ?@nS?[?S?0_0@G<9?>a! `U@P_ ?J ?X ?ON?3?L"W?9P H?, ?-$G4&ZcV ?U?a ?# BRA@?3`J?S$Ā?^k ?X?R{?M?9k?+H?`@nSO @RTP2͠A4B`#V?Qw?WJE?Dn?RA@H?5d)@?B AwQ?@_?ISLs ]>R,Ff?)?GT0?2 :\@DE?@?6F*S C-FfOOԀ4@BJWMKG`\{QR?6yE B S XL4`:?Ed)@?=S FRA@O1?">?6RA@QO\6/C`J?L`?V>j?;ѠID HV ?RA@?:?7 Ge`Hi`5d)@?$v@?I ?H ?0@?@?C 4L"WB?&?K ?)D <6/?F@?OZ?.q`?Wh?fa?Ms`Ѡ?``?fp`?CЀC ">9>V)OڷR" Ms`"J?O?G<?8}?W<?TG<VRA@4@?O; ?R`AR| ?OZ?\`\kTl%V Ϡ@ш`?R?V`?8?(.q`.q`ND&??%*Y`c[TLJ`>aC ?L"W?`x?@?R1B ?;t@+HBJ?8>VS ;Ѡ?1&`<;? ?K#?>k ?K#4Nb?D@?* =`I U@M$G?J@?K4?IQ4LcWG{`?VRTo`` U5@VHU\{MK?'w OZFy?@F?9D8 LJ`OOԀ?2J?RhF?H 9D8 SV^QH`GT0Ed)@DEGhG ?@CVG`\k?:2P@?0@?H ?P@?' a?&RA@?6M`?8V HBH\`0@?Q?B ?RTo`?Y&u 9IX?\J`?`755@L"W?DE?BJL`R* @7(.q`3`JID F$?$&?'?&?Z(d?`U?8}I %d)@?RJ?W(`?ѠH, ?/w ?M_?<]ݠHC ?U?I@Z|@??=S FK 97 ?Kt@?[ 4NbZ /OԀ?2r2`?w ?6*?V9?K[@?'@Y`, ?D?K h@?@6@٠? nS?aWu?bg ?\@B?@?2 NȀ<6/?1\k? 8}Px?@Y@K[@?Aw?$GW`X`P@Tb9O @F\`bhFS HBHVM`S *\@L`N7e`FRA@R(}?M?6R _cYD G{`@_T]`ZGP+8.q`1H?4@?0nS?@?E ?L;?!?7?P2͠?>a3 PPVf ?Uà?Nk ?A>\kYD8 Vf?Na?VHU">?w ?Y?Q4QZ>_ ??w ?B>?! `3 6Ed)@FRA@?E(@?Y ?@=$G??Dv@?EPQHi`@F'@Y`?G{`?S ?0_%?DE?1>Ȁ?Kt@?` ?M?w R S?A `?a`?B`TDv&`?I-.a?<?,?1w?.a9?; h@?\;?Ow EJ V9R Q F>j?F`?W^`?/OԀUX, H}?!\k?VSj6 ``[RUR* /@?L;?KoŠ:Q?9k8?\k?SV?Nu?)RA@@@ ?S ?X ?H 8, T<;?V\-?Yl?Ct!?Jm@?[>+@?K h@R>W,?0nS?Vf?SB ?I?: >VD:@P+' ?I0`?`B6`?0@?8.q`L]ݠPF2JJT?, ?NȀ=S [ h@O @1w;H?7@Y`?\g`?Vf<`ZVy?: ?] ??w SV^\k?Pdh1wKt@5j_Y `UQ\k*\@?/1?w Br2`CV$Gw C U!Z@M_?'@Y`?(, E@Ow <`w a?5?I?=s`>?)k?9?0_/OԀSj6 V>j@ш`H.q`^BV@?3?3VV`i@_?G,?&?%?Q?L`?0@?" 9@+?I?Z3?Q?$v@?Pш`?`~ ?Y?6?,?EVv2J3K*?-s`MK[@K@?Lq?_OԀ?M<`?1&`?L`>k O @4NbI0`P7+t@.>k ?9k?@7C$ĀQz.A`? @?7h?, @ Q `R| \g`Tl%?X >, d`TXN@?Na?P 8}S 0F?Q?PnS?E ?JY?Fv?A&`?B`?4v@-$GKoŠP_=S ?'@Y`?">?BJ?>: @ SjHV '@Y` @?, A H Jm@B`?3 ?Yހ`PBr2`@S$ĀY:L?'@Y`?^_ ?\J`?Va?WJE?C &V2" ?,`?@F?9?@F?F>j?S ?[4??Ms`2" 8?\@!\kWQ amA\k?Xi`?Q"@٠Ff?6?T&?R ?H, ?MS ?D@??, 9D8 PP?a?<W6mX?<;?P3@?9C$Ā8}&`GhPGhM N'?Kt@?Y ?Q\k#80?RA@7@Y`w ?B>?' ?Ct!?: B^[ ;t@?$v@">Ct!2" ?6RA@?;Ѡ@nSI J@b`V9?R`\{AO?JY?A`5?ApC9TOw ?@F`I@@F1\kB6`CD:@BJ\k?$v@0FP3@[KQɌH XXO@JYRA@?ARA@*\@?! `HBHY:LB ?4Nb2J@+?G<?]8`?]8`?]{?\`?Oڷ?C ?Q4?M?2.F*,6/?G<?D:@?>k ?Nu?;t@?1?2J??w ?)k@FRA@?Qz.?@P Q`RA@?O(%?Q ?3 1>V?!\k? FOc?(}?RA@SB RA@?[K?J@?(}?CLs C8[REPQ?&?1QCЀ?* ?/OԀ>, ?5?+t@H, TEG,?,6/?F>j?B`?Ex?SB?R" ?CV, ?Fy?A&`/OԀD&;#7e`>a(}?-$G?._ d+P7?I@H?!&`?=s`V8}J\@Q:T@\d+ePQV ?.q`8WQ:EPQF*@2͠C ID C Q"X@PǜLNȀ$v@8}]8`Z@Db96?E5@?Yހ?0@H ?0@?0nSJm@>a?! `7h1&`?>Ȁ?0@&??OԀ?Q4?QH`?[#?b,?Ux?.a*Y??OԀ?S-?E(@?: ?O; ?)D I:3 6RA@?C ?P?I ?M?<`._ ?0nS?MK?M{?CЀ1Fv:?5?E?">V?C8?D@?L;?XI X>, EcW??w U@@?G`?HBH<0ITb9D&?Ed)@?0_TB ?S~ ?FRA@D&.?F`?K?@ &MSLs OZ8?@7?P_?CЀV`1?38I@P`$v@?&?Ѡv@E SQ:>Ȁ?1V۠RTo`?3 ?9B`Q`TnB ?D:@?3VGJ2P@JL`C$ĀJ@I ?+ѠR`@@?8.q`w ?55@?T?)k8?R| ?S 7 D>ȀJm@\k?Ex;HPtH?-$G?\@?R* ?_E?O?*\@?@@?E(@?J ?QH`?J?OZ?SЀ?F*3VSjb'K[@?C$Ā??OԀ?8, ?/OԀ?(}?RR?\,C`?PF?8}?-s`@ nS?@ш`?SЀ?P(?Bg ?D&?1`?C ?3 [7@Zm@?CLs ?K#ID J?B?3 H RA@?G{`/1Ik)D ? `! `CLs @ш`?7ApCd@Xi`?A)kNa?5?K ?8 ?+Ѡ?`%4v@#V?<`?Ex :\@>VDv@Zm@[ѠPK`a?@@?$n=$GAH`%?G?TDv?A4?`?C?Ct!VN_ W6mw ?Yk?Dv@M`A4?@nS?J ?'P@Q> /@NM 8?E>V?C $v@?T?Rr2`7 D&DEL`?(.q`?P(?7@Y`?B`?Vp`??1F*?Qz.?SЀ?PnS?J ? -?<;?R?RTo`?C ?"J?@@?D܀Sdd`Pш`?BJ?<`?0@?0?<`?SB?CЀ?# ?CЀ?=s`14?1?Q:?L?  nS, ?0_?CV? @:2P@?9k?Y?[y@?H, >, ?)k?,`" ?55@?Ik?5d)@?'@Y`?' , ?H55@H, 3V`8V ?B6`CEd)@?A?0F>`?A?SLs ?YD ?O(%?2" '<`CVR6`PK`OcR,=$G?4&, B`@ш`Ed)@B v@?6?PZ|@?S ?-s`FUj?4n*\@?V?J ?>k ?RA@?=$G>, RTo`Br2`?Jm@?D(, 6RA@?I?V?P@?S`J?Z3?I ? 3 ORJTDvL"W??(%?]?\?&RA@CV?!\k?V6?<;?:\@? ?Pǜ?Pt>\k?@ ?EPQ:\@2>?#80@?B?afW`?\?4?V?@7?2>D:@L]ݠN?" ?Fv>V7h2>85d)@Db9Vv\`\lL`?RR?_ b?*\@TXV R* k?>_ <;RRT܀Z _ZXTID 3 9E FAw?w Ct!H GKѠPǜP_XZ(d?w 2r2`X}`T܀?4n?^J?V`?0@?NB?Y@?Oڷ?B?a6?>_ ?[e?c ?aY@?A\kJ\@? ?;ѠS`# D܀?Q\k?Z?L`&7?CLs ?S. ?I@, DNbXL4`Ff?C?Dv@?F@?F>?;#?W?S`J?Q`?Q=$GU6* S~ \b;@b" @?e ?d 6yP@??@?B`?;t@?Pш`?142" ?H}?K?O; ?`A ?KNu @?\kU9?]?Z?2JV?\k, *\@<EPQ?"J?P@?QpC?1`E4@??,6/Q\kIkS8W ?2J?TXN@(, P@@nS9D 14? ``@ш`S$Āa/ d@`SJYL`5?4NbaK[@Ur@^B^k SB >k /w S`J[4?<C SV^K4??H?-?a?b ?k?]8`?0E(@E?R ?c ?_c?T?7h4n?' 6y`@X` ?*\@?B?._ @nS\l\J`E^?RA@?Ed)@?C$Ā7I0`FyE(@ `?._ ?&?T@?Y@`3 ?QH`?K#?0_?@+?w * ?FM`?NB?* 0FG,T܀'@Y`?]_?SV^S8I?MK?<?/w ?I 6yN \@RA@?Nu?c?F>jSV^8? HP(?4Nb?\?P3@?#  LcQ?A`?5, X P(EU4?SLs ?E4@/@8;#HTHTO1WhU^PFJ2P@??F HO(%T0Y\TV?OZw U0nS?A\kaV8O1H}* ?1?aĖ@?lx?e?XBH?G ?&?IX?Tv@?K[@?ID8 ?<]ݠ1 ` 5SЀ6?P_?Jx?2r2`&Q*`Q&`KKSCЀ?%B>Qw* ?F`?Jm@?$G&?P?R* ?w 6y?R?H, 1?:2P@?P+?R?S?T?QɌ?P_?R ?JF'?._ ?!@FS`J?' ?T@6RA@?;H@\k?ѠG,?1`?]$G?1wJ?6RA@?0nS>, ?ZF'?`K?Q\k?Y?[=$G[t@?D@?>: ?D@G<b,Ow ?1\kA `*Y?EH?^0" ?O(%?w @7-s`>: 9?9?A`0nS=s`1wC$Ā7 ?%<`T1Q`<`<6/M/1?R ?@٠I@6*<`S. 8?v@_2] ,?<`?Z@?\g`?][`?a4?V?=s`?6M`?Oc?Y/?IK4?L6/(, >a*?Oڷ?VM`?Q ?K[@?R`?V?*YXJ@?B">HBH??1?V?Q"?@ ?ID8 ?V۠?AG?RA@?Q`?-Dn! `?I?R`?K@?K@?Q `?J3?Qc`?W`?>_ BJBr2`?RA@?Un?U3`J9D8 ?F?Q*`?Vy?FF?4n?W,8, ?D@RA@+H?T?U?W?nR?qA#?P2͠[t@-H ?1w:2P@eZ=apCCLs B &\kL`?UI?$&E^?0_' T@;H?C HI@B^[ ??3`J?/@?C ?J3?@?55@#8TDvR| ?!&`?TT@?\k?:YD@C ?B^[ ?5: VLJ`^M 2" ?C$ĀP٠M8`?D܀?(.q`._ ?@@?0nS??V\-?^&6?O; ?E?T1?[ ?IXK4?QH`V? 3?C8?S?4@? ?[4??d?ETn(, ?Rr2`?&2r2`?N: ?St!?,6/?._ ?\l?d ?P2͠1 `?:?BBJNȀ9?B^[ ?UI?Q?M$G?SV^?L"W?L?U?@%?9D ?QfW`?VM`?C L6/B?G<?UPQ?Vy?,`G<?J2P@?TG@Y`H?2FfQH`+Ѡ7e`?>?k[@?pڠ?TUxKK^J@nS?W X@F=?0@, S 1 `?K 0@38?SV^?M*`BQ&`Q>QM`B?38?Q`?O @??@?* ! `>ȀR^Qc`?OZ?S : Ik?/OԀ?QfW`LJ`?)?!%?-s`/OԀPt(, ?G<?;Ѡ?GT0?Ur@?N: ?O1?W{`?38Lq?'?[*S?`@?]s`?N?"J?*\@w Aw?!?FM`?6?AO?<Q:V>j?Ik?^. ?4@J?(}?G3 8.q`?K4??Lq?OԀO(%?F?bƅ?Y:L?3`J?>a?0F<6/@?E(@?Ud)@?`(?V*?:?D:@?Rr2`?X?U@?=s`?9?K#?E?N_ ?N 7<`7hR| A `?L]ݠ?Ex=s`P٠P CLs 9D @@#8?C`J?Jm@?2r2`EXYD8 Q"P Dn?Db9?Oc?k?,?F`=$GXDE?B ?AѠ8.q`akD&DNb?' ??>?k?P(?W`?Hi`\k?0@?U@?e@?g?KHR* >k ?/OԀB6`(, ?OZ?J ?5%U @U?-?T?Pt?A?,6/3 MJx?._ ?P?1\kVyR?P٠?V`?+t@>, ?P@?\J`?]o?] ?P+;t@FM`?7e`?V?O; ?$v@?I ?J7h??L``FM`F$T0PFID -$G@F]`U5@?\@?9k?9D `Ya aM G`?=s`(, ApC?ApC?%?M ?A B?&?D܀ H?9?Qc`?MS ?7I@ZH ?&$v@GT0@2͠?6?H?2J8V FG9D8 :YT`<@Qz.?EPQ?GD@N?OԀ0F?FRA@?V@?0@7?3`J?P٠?M_%X`LJ`?5FM`W (}14\YD@D+Ѡ?E?Ed)@?E5@?_E?d1?A`YO @8}QfW`5?R| ?L]ݠ?!\k?  !RA@?E@?_N?Xƀ@nSVaP(OC ?Lq?T G`W^`?F>j?YX?D:@2Jk?HBH?W`?Pt?J ?Oc?9kBJ<`?<]ݠ?!3 ?E?5ȀV9Sj6 F`XV Pt?>Ȁ?G@Y`?>?QfW`?RhF=S \TMNu?7?WQ ?Jm@?+H?C?TXN@?R* )C`J?M*`?@7`7cL`L`H, QɌ?@?J =P`?Fv?ZP@?FRA@?=$G?A&`k>?CLs ?V-$G?Ow ?Z<;?>a@٠!\k._ I: MoaX 0F?&RA@?Vp`?We`$n?<`?` ?Rg 4&J Ow .a?C ?3 ?-$G?H.q`?=$G&RA@?3V?M*`?-&-$GPǜV?&`OcC ? B `_r a:3?V`?R`?: ?w 1wA&`U2U?9k?E4&?K?VRA@?K#VSBSt!;HPK`S ?3V?F$?;#?U(@?R?&?H, ?S ?&`0nS??(%?M*`?U!?\`?Q\k@٠VfQwI )k?Qc`?T1? nS5d)@?(.q`?SLs ?\{?0@TZ@@_C d e`ON@7I0F?*\@9kP(Ex%?<;?W ?Ua6?2" v@>Ȁ?.?IX>VG{`+H\kN&6TWYMKAH`,`?Va?[?\@?&?M$G,6/R`R M_?>a?V`?.a>: ?:\@?:CLs ID8 ;#6?RA@4&Fv?Ct!?Q>?3 ?">?B6`?GT0S`JG`?C`J?R?LqVM`L"WW"`\`k?: \ed)@L?G?C-=8.q`?3`JM``̒HBH?CЀ?F?>a>Qw5d)@>9Br2`S~ V5j?Rg ?_m?d?apC?Lc,6/AO@nS?!?S ?N <M$GB6`??P_?ExA4,?!\kPZ|@XƀI64v@?, ?AH`?:\@C ]{``B^[ ?QɌ?D@Ed)@: ?<`?>k ?,`aBJH}@nS?v@? A`A4>V?3?B6`?8}?!&`?HT?EPQ72r2`14TXN@VfQwL`?Hi`?[&UPQ, ?A(}B FvC ?!&`Br2`@?J@?>w ?, ?-s`?M{?T?$v@FM`4&?2r2`?>: 0_Qc`NaR" WJE\@?G<EPQ[Q4&3`JM*`?UZ=?5K4?? ?/w J KGe`N&63 8}>?@@+>V?/@PnST.q`?$v@6M`' ?D:@?Wq?Wy?C`J?*?K?W ?W?XL4`?]_?X?D9#V?NȀ?R>V8? v@?>a?C ?B ?E?4@?\k?7h?6y+t@5?+t@?=S , KѠRR$G?Nu?0_=$G?1&`?I?Fy?G ?%d)@?1?v@?M_?I ?(%?B^[ ?[?W{`?M$G?G?2>83`J7@Y`?w ?$&3  !D܀?;t@?T =$GZ 8.q`?ON?S ?Q `?4v@(, ? S8BEY U @<`Dn._ ?I ?' L;P٠P2͠FM`4Nb==s`8@_??w ?*\@>ȀR \la@a/ Hi`?E(@?0F!??w * V`KoŠ3V?w ?2J?K?2J?0nS?ApC?' ?<;?KHaI@RA@?:\k7&?A ?Jx\k5?QɌ?`@?Q>?$v@?A?;H?0V.q`?J3?TE>:2P@?I?E:?5d)@?U?: A >V?R>?_c?W`\@NJJ\@=$G?:?G{`?Q`?Yl?P?Db9?R ?M_?,`? 1\k6RA@?P(?`_r ?T9D8 R@ ?2" ?^0" ?VM`?A&`??@B^[ 0@?\k?!&`?3 ?D?R| ?O1??55@?R`?1`Q&`K h@?A4?X?W ?Ex?,`? MKTadU\kG@Y`M`,3`JC80A\kN , ?FRA@ @7? ?7h?@_?Jm@?;H7@Y`ApC8?7, JF'\k?PnS?$n@_?J?] ?O0@FAw38?k?A?KѠ?UFf@?Q`G [4?&`?D܀=`?3V?\?AOP &?U(@?^V?Tl%>Ȁ4&N: L`?$v@?:?CV?U5@?QR??1?E?55@1&`AOQKt@?H ?[@?Q`7e`U@@nS?P`?R`?F@?3 E K@?._ ?+t@ID8 D?2 ?P3@?T ?HV ?;oŠ?P2͠?J3Ge`W8V ?D@?8?Ѡ?D܀?1\k?CVF$`U^k D&' Kt@@2͠?;Ѡ?-s`? !\k\@bLqHV W<;oŠ?=CZm@XLc?, ?3G`P7?9D8 ?RJ?HHE$n?&RA@4nTXN@Q! `#8O; P_5>w &`?&&MK<`?Pt?P?D܀?\`?C-D&w ?:\@?2 ?-$G* CLs Ct!@ ?0@?U@?ZF'?Q `8}X$C`J?&F$"J?]_?Zp?;#?9?6M`'C G`?/1?R?A`%7hNF>j?3 Dv@8}5d)@: =Q`L`?@nS?Pdh?<;$&FvE \k?1 `?3V1\kVPt?B^[ ?8.q`MS E ?!?6?B?51w? ?*MKT0>?B^[ )k>V?T ?D܀?Z<;??@H}Kt@6RA@0@>a9A\kJ ?8?EPQC$ĀP ?Ѡ9U@\k?J D]U`^JZ@G(}V۠] >V?X` ?S$Ā?(.q`A)k?<`; h@Rg ?\@?J\@;HS L6/I@N J2P@<`?\kC$Ā? ?_ @?a%ۀ?NB?Vp`?_w ?:2P@F*7 A,6/?NM ?H >\kv@EKt@? ?:2P@?>: ?I?>_ ?6y?B'@Y`3?S?]$G?Na?$GFRA@V Y&u Sj6 ??Qw?L`?=K OOԀID )D Dv@CLs ?w 2" E5@AID ; h@?F?D܀00@>;ѠQpCPш`95J30_?Kt@?BJ/w RA@>V5;t@J S`J?w ѠID8 7h?Q*`?PRA@?7h?Y ?B ?P ?H}?#V, V>>W`V?v@?Fy">?.q`?UW[e\`c`c)@TDvHBHC`J=s`NBD&?<`%D@?Q?W9E \kP٠]G`?5\kT@S K4?:Y?G ?OOԀ?@@?P3@?R ?@Z|@?>k ?5CLs N 3V?$G:M$G8V0_?V?0F*\@!%G,?@?R?$nQQ D??H?)D G7?A`?3 ID8 Mo?)D ?P`?R`?P?H.q`?%7P ZP@WP2͠U2Q`?4Nb?@@D=$G?B?8.q`,`?9?R ?RA@RA@? H?)k??w ?&,-CLs M*`! `?F`?%?w ?;Ѡ?\6/?X?F@?R?W(`?7 @F!\k H V`T=S H}e i%].2TH ?<;?V5?S8?R?1?:\@?[K%d)@]{AO?D:@1&`T04?Zw?aWu?@+G ? ?C-=$G%d)@?S ?A42?H, ?7 Qz.0_?<B>@ ?6RA@?-?!\k\@<`?Ex?] ?Rg >, HTY&u Q4?Nu?]_?8}K;t@)kB6`%d)@?+t@?">?DNb?@nSBr2`0@?Na?A`FK@??MK?B@@M`1\k?I@?R>?@2͠??F$?U@?UZ=?A `2,`3 ^Ji `_GI >k ?G`?8PǜQpC<;=K7 ?,?>Ȁ=S 2" B3 ?144v@P<@I E/OԀ?Jm@?DNbEx=`?Q\k?\?Qc` 0F?B ?E^\k? ?Q>?R>?<`?1`?Q?HZpfM`W>a H?D?! @?Qw?A `O1?H}?d@?@@[P+t@QH`YRA@?[?U4v@<`?R?Z@?-$G?V?X ?IPC8?OԀ^Va, 0nS?C ?`U?W@Y`?(.q`&`?G@Y`?X`?G$G!>: 3 ?R`?Yk?Mo1w?/@?9D8 ?Dn?0@?# ?X?^0" ?@P٠1?Ik?>_ ? ?O @?YX?0PǜH3 ?!?L`?G1`F`A`IZ<;YuҀ?+t@?S?w b`Z\@?w :8}# EN&6-s`?\@\k?RA@A4?:2P@<6/A`$&G`K[@5V?#V?B?: ?1&`?,6/?1w?R ?Z??w ?X8] ?b@?@FSQ`?* ?ON?P<@?XT?X>VB ?/w #VJYV?$nO1YS U!`ǜZF'?CЀ?_F@?JYIkT@QA&`7hI ?P?Hi`?-s`?6RA@?%>\k>, ?Tb9?!'@Y`?Ѡ5d)@?, ?OZ1 `V\-2 4n[t@Q `? >aK[@A4DnBr2`6*G TQ4?0@?SV^w UI4Nb?K h@?; h@=`PP@@?1B S-/@8V TnAH`0@S HV ?`C-Tb9E^?1>HP T:@?RA@?W`?`dh?T0!\k)k?0@ ?FRA@?][`?L`w ? @+L]ݠG Tb9N ?3`J?=?;H?E?w ?" ?Vf?S RA@@Z|@k?H ?UI?Bk?Q*`?] ?@ш`6?A?P?7@Y`EPQYS ??w ?\,C`?]`?Px?@?H?IX?Z@?8}IX?=`\k1?/1?0nS"J/1?0?:6OU $v@?Ud)@?R" ?+Ѡ?,?8?# ?P ?KѠ?C ?J@?Q"V?@?B?RA@?@?@ L]ݠ[ ?&`?@FSYR,XƀU@8V (, FvR`Q>PK`[@U@??(%?FIXR`2>?5k HBHP@RA@?9D ?2r2`.F>jDE*\@?Pш`?_n?IDEEd)@1?EPQ?Z@?O; ?0nS?B6`?2" : LJ`S. @\kOw G,?B ?)4???E^?RA@=$GK#5?E@?3`J14?B?N8>V>RA@?3 ?2 T_䣀?$n?aaa?Z ?(.q`?._ ?Z@?_2?=Kv@?C-?H}?H?HV ??RA@?O@?Ow /@SI?9?3`J9k?F$?d`?dv@?Na7 H}1w?Px?@?`3@?X` ?L6/?NaB^[ O@2>?83 E 3`JLJ`T .q`?/OԀD@HE^P7J =GW`a\H, S`J]g`?1?L"W? @V*S ?Kt@?WT0KH`@9?@ ?0F?HV ?Sj?Z?c`?Y@ `0@4nLJ`)D ?GT0?C8?>: ?;#7,`?J@?]?QO">BN: I0`?'?8.q`?;Ѡ?w k?, ?L"W?J F`C ?C-, L6/.q`?B ??w  MoF?# ?" ?\k?9'O; >>V8}$v@?%P Yl?+Ѡ?Y ??1G?! `?W ?PZ|@>?<;?C8' ?1` `i? nS?FK X%?Z@?W<?" ?8?]`?`K`?G@Y`B1w?Q\k?^: ?X@?KѠ?E5@?E(@V4~@FRA@\k, DNbE>VVD@L"WKѠ1?>ȀVC %4&T@` e7co,K$v@KѠJ2P@?9?C`JKѠR`?R ?bcP?%V۠G$n?\@?ApC?0?4n?V9?UFf@, Bg A=s`?# ?23 8) ?GT0?Z\@?[t@?Nu?)D ?>_ ?AONa\SF$ak?6*?0@`>?9?S?Ya ?A`?8?-$GB^[ I ?@ ?V4~@?R{?C`J?@7?SV^?QɌ?, RA@?/@CLs RA2MTEU?-s`*Y? nS?:2P@?w 7hExMK._ ?<`?w P7RA@>VSXƀX}ZpH}?B?C`J$G?;oŠ?SV^?8Q3 ?1w0@55@C S: ?C`J?k$v@?G?K[@?`??5d)@RA@G<SR* Kt@OOԀG?O@?e?d@?L`, ?E5@?Ms`M8`Zx%?7 ?0?P`?Q*`?2?!\k? nS?6?Oc?L6/?$&A`PnS6M`?Rr2`?_w ?[?U?_ b?g1w?Z F`R AO<;?+t@3L"WUd)@]B [Q&`A`%#8w HHQH`&?%d)@@ш`0@?w I0`KH?2?&RA@Kt@I0`?>k ?X?JxRg _mQ`@@O @Y0`TJm@SBT&?0_?[?Tl%?R^[ ?^k ?UI?A ?CLs ?O1?A41&`??KѠ? L`HP7T=<`UIM ?(}RA@A `?: ?R?@@?C ?V`?3`JY aM a@R^[ ?A\k\@X 3`J?SV?M ?F@?P3@?DNb?'@Y`?Bg ?P7?8NuRhF%d)@VPK`S ?8?S?X?U@?M ?I ?$&TP7?=`?&&RA@?X?b,?Sj?Gh?5d)@/1?(, ?K4??=S 9kC? ?G ?R^[ ?V ?Vf?^u?d?T@E5@U(@R ?YX?XT?+Ѡ>, D@@F?&`?#V?<;?M ?D:@w C Tb9^ Rr2`?5?Dv@? @' 5?, ?I?U@?P`?3 ?NM ?`sI?C-Z[@Ow TX]s`afW`Q"?J?H Ff:Y?F$?;t@?:\@?K A4`sIabWJE?:2P@ U2%d)@?Oڷ?H?J@?L;?5 ?)?J ?M?14?>: ?U ?C`JQO&`CLs M?<]ݠ?Y0`?T1?*\@K4?5_ \kF$VO1?Br2`?S?-$GCЀAH`$&?2?E?R^[ &RA@? ?6?S~ ?]S ?[H?UI?Pǜ?HT?>_ ?1 `?<]ݠ?E?@  @0F?K[@?Rg ??HV ?`_?B" H ?8?._ Oc4n?D@?L?W`?W ?Nu?Hi`?A&`?Ѡ$v@8?<`?G@Y`? @: 69D @2͠!\k>V1 `?&?L`?!&`Q\kB ?N&6?Uà?Il?C??OԀw ? @?KH? P٠<`? H8}EPQ0@(.q`&?<`?3 0_?, ?<;?A`?L;?-s`Tb9\V9Q`Aw?>_ ?@@LZ2P@Q?1?8}?2r2`[@]} ?\@5^&6NM ?E@?R?P?C?>Ȁ?A\k???Pш`?S?\k@@! `40_?;t@?1DE?,?Xƀ?E^Pш`F?P@?a `?`7À?N:  /w ?E@?T:@?3 Nk TNbR&?T?V>j?N&6?Pdh?D:@?Ѡ?C ?VHU?U?M ?@9D8 OڷV?A`>, ?M$G?UNȀW?FRA@?; h@Q*`C`J/1%d)@?H}?C 6*8?5?,6/?4v@?# FRA@CЀ95?%KKH !&`?J?[*S?RR>V@7B/w ?0F?<?)D EX` YJ?2>?RA@XQO?K#?1&`V`FRA@?P3@?W`?Na?<`?8, ? H!\k?K#?V`?@7?$G?3 ?1?,?F?D@?.a?)k?9D ?'?A `?Qc`?J@?4v@ @RP@?&RA@?I, F@LqU: ?M??@?)k?P`?B C ?@?Z?\`?M8`?A4?7@Y`?&?C ?ApC>H?P ?P٠UFf@Sj6 ?R,?C`JDb9?$G?!\k#V?:\@AO^Kt@?@@?HE^B?4v@?A&`F`YJ37e`QH`N ?3?ApC9D8 @@?/w ?8.q`?&?Ed)@?TDv?R@ ?L`?J ?4&/OԀ.a@٠M$G?/OԀ8}ZY&u I 1&`?,`RA@@2͠<`D@<`?A\k?N: ?B>&RA@Fy?w ?Iv@CV"JD܀@@w D@Vp`3 ?U ?IDBJ?+t@?5!&`3 $v@! `?G<?Q?KoŠ?T0?Vv?QɌ?QɌ?Hi`?1?! `?)k3 F* nS?P+?R@ -s`R`Dn*PnSY G,B" ?RA@?EPQ?* ?:?B^[ C??R`?P3@; h@&RA@?U?Z\@?B>\k?7e`?QɌ?We`?GT0" ?A\k?@+P2 ?Wh?2r2`G ?6?C?:2P@?=s`RRc8I ?QpC?:YR{P?F?Q`M_ڷ3V?Q>?SBL`BL;(, ?KѠ?9k6*?@_?\J`?XBH?/w EH 69kQpCN 0F@ш`X`S Hi`B'@Y`8.q`2 ?8 N M`B 4@>a6y?P2͠?R| OcVHU?Gh?Z?J?`8O@Kt@?9k?T?CЀ@FGT0&?v@4@0F??(%?Fy?Hi`?OZ?F?N ?] ?T1?1&`?:\@?! `I0`Ct!?(, ?$v@?OԀ;oŠ?E5@?S. ?# L`G-$G855@?1\k, Fy?" ?R{?R" ?QO?2" V۠Qz.?B ?FM`?w ?5?T?\`?J\@?(%D@>H?;t@>V=`4&NM [[@8?WJE?*\@G<4v@; h@!\k?2Nk ^Ik?:\@SSB?1 `?<`TE^M >V?`x?@?\&, S8O; !?N ?J2P@P_\q)D ?R@ ?K1wU @S$Āa?A&`?55@3 C; h@@?'@Y`?@FRA@E:\@EPQE?9D ?E-$GR[y@U2=S ?BJ?\c?P We`T?U?`_r ?Oc?5d)@>V ???S ?Qc`? nSM{L;?6*?L`?.q`?.q`?O?K h@?7@Y`?5d)@?,?P@?].2?1wV$F?'(.q`0F?@7?P`?B>?<`?Q>?J@kQfW`VM`Br2`?R`?b@?Un&`?*Y?7?L`?3VOZE?RA@-s`?Ct!?N: ?UZ=?R,?! `?w =K%?/1?B>>V_Nf9Q>?9?` H}_w S$Ā?k3VP<@PtJ3A`HM`68.q`QSV@ш`?RTo`?d+?YX* 5_ ?:?R6`?9D O @,6/?U?M8`?/@?D&?JY?U@?Ya ?P@\@TER^[ ?>?K :/OԀ?D@5d)@U@G`?&?Q?SjFy`L`?:\@?B ?I?V`?\`?YD ?R`?ID8 ?A`?D&?@_?(%WyMK?Nu?akM@?W`?3V>V%d)@?CV?70_?@J32?6Ѡ1 `?/1?A`?<?0@?@?U?_; ?RPK`` RRC  ?K (.q`^uP@?!\k3 D:@Dn@ш`V0nSFy55@(, ?+ѠB" 8?V`?W ? @?`?L`?LJ`=s`]>M*`?=s`C8U @?8?E?2J?9D8 ?%d)@? ??@>VO1?D@?<6/H_Y ]`; h@S-\g`QfW`7h?(%P PPKt@F$v@._ ?CV?Q:?\kAw? ?<]ݠ?)?3 ?B ?; h@4v@T Q`?`?P 4v@?=S Px?@_Y AO?Lq?St!?+t@X X}RA@? 9?=$G?T܀?Q ?S ?_n?Y?2? ?P ?S ?>: 3 ,`?6?, B-?>k ?J\@?H}B%6RA@IXa?0@C SLs B ?&aCV@?Gh?Ow ?L6/??w ???H}?/OԀ?@ш`?\S?O3?2J?@S H}?4v@?K[@?HA `R* &RA@?2 ?Dv@?T?)M*`.!\k??4@?K?;oŠ<S~ >?[??@Ms`?#8?;t@JV`Y:LON?@@?@7??1\kD:@U@^&6`P@?@5PK@7L6/V Ur@TS F`?w BJ? ?I@?7h+Ѡ\kv@L;SЀC$Ā &<]ݠ5?RA@%?OԀ?)?55@P<@U ?8?Ux?V9X, >?V Ϡ?5WhPx?@B6`T@?OԀ?^k ?cV^?KѠ? H?=K?Q?TDv?14Ex59TJm@?Dv@?V*?NM &J3D; h@1?6?2 "J ?E^?GMo_w I @EPQ, ?S8?^?_E?R>?Q?^?Y?R`?V &`W 3?P ?R`?CЀP@XBH? ?C ?9k?K[@?!P K h@K4?E?=?A&`$nIl[JF'?Y ?R G{`5d)@$&[Hc[T`@M8`?D@?>a?# K[@O @V>T0SV^?)?C8H0nS3VQR`@aWu\xT0HLcVL]ݠ?B ?Nu?.q`$G?F@V@BJ?6M`??1?:?V>: 5?-$G?7h1 `MS F.q`?E5@?Z2P@?QɌC`J%?Yހ?IT&WJEW,aDPx?@?\,C`?d?YD8 ?@2͠E5@Lq?/1?8.q`-$G?,?4n>a9?6y?J@?R?J2P@\k>k ??Ms`?J>H?\@?Rg ?b?`tVKH?K h@?P@?1>?Ux?R>?Bg ?&?+H?J2P@?PnS?Tv@?Tl%)D:@?L]ݠ?J5;ѠMS KHZYV`?H}?G`T@P %RX8] F? ?A`Ѡ8V۠OOԀ?Dn?N_ @_L;?.a?@٠-s`=s`(.q`B ZcbaW`MS J@S$ĀMs`?7h?JF'.=$G?>k ?"JF$&`?F*?=>HNM ^ȀRJ?6RA@?72 ? C?(%?T@?^C TnA?@T I0`# 0@?D@?].2?XV ?T:@?Qc`?w Qw?B`?T?>k ?v@?3V?P(?@nS? ?Rr2`?Y?2JD@?0nS?X?Q-$G6*?<`?U?X@?CLs ?GT0?b@ ?WFf ?Q>?8J HBH?1RA@?#V?2 >J w ?WT0?V``RJ?*\@??0F?Bg ?%B" Y \`3 ?<]ݠ H=KOw L?-$G?0@* ?E(@?6M`VSw 8V 9k?@٠?FRA@?HFf-s`OZT/w ?C ?%d)@?5?*6*?1.a+HHUT@O1ID8 <]ݠ3V@ш`*? nSAH ?0?A&`? ?:Y?6=`L`Xc`YuҀ?$v@?A4?8?G`?# S Rr2`?B?U @*\] ZpY&u ?w ?G?T ?]K?VHU(, ? H?T:@?@@?+Ѡ?\g`?afW`?Q `0@R >H?[y@?C`JDb9?A4?Pǜ*C ?C$Ā?Y&u ?OZ)F$QpCS I @nS?*?QfW`: b| Q?8}6Il @?/@?55@IRRV Ϡ'?T0w aL`?QpC?G`# 56*5d)@FRA@O; &?A?:?+t@0_?OԀ?B?SV?EPQ?E??1FM /10_?H?I\kMs`? HK]iG?MS ?Q`?B?:2P@?AO?G?55@8V Ed)@Dv@4&?=`?Ed)@! `>(.q`?@H}'>4n>V?G<?R?St!?3Jm@C8(}LQz.)?7h?B?5?$&?P7?\;?W{`?D:@kD&W a \T@G*R`,I ?=3I>, ?A&`?M`UPQNB?w ?5?T?CVF`?8?Zx?S-RA@J@NM /OԀ?6RA@>V\k?@@?Oc?Tl%?H?@E(@ ' >?>?V5: ; h@?)Sj_Zw ?Vy?Lc>>V?LJ`?Y ?KK5EPQG`?w ?K ?W?kOw :\@@:\@, ?D܀?/OԀ-s`?._ ?Pш`?T?>Ȁ:?%?S ?DnA4A\k?k?Ct!?*\@UX?;t@?M*`IU@? @?W`?S?:\@?.?&`w ?M{?PtBE(@?@_MPtQ`?0?\S?RR?FRA@?I" 5?Aw?Ed)@?S8?b@?_z?Oڷ?@_?3 E@PdhLcFyCЀ-s``>V?QR?Zc?._ S Lq?1Vp`R{?+H?S ?S ?Oڷ?A,6/(}?>_ ?*FRA@T@U5@A\k?3V, <;!\k?4?Ow ?PZ|@1&`S$ĀKt@>aa?9?B>?D&?C$Ā?>k ?IX?T܀?Q??OԀ, ?IPW?4Nb?Ex<`J2P@3V?E?R`?3 V?E UDn?:@@T!&`?L;?:2P@ ?.q`ѠHTM$G;oŠ?)D ?3 14-?Dv@?@ш`; h@AH`? ?J?T&?@ ?'@Y`?Qw?>k \g`aɌFv?@nS?HBH?G?Rr2`?U?Pt?W?WJE C ?"J?8&`7X8] S ?8?Kt@?FM`?7e`1?H, ?^V?Y@?V@?Ow .a/OԀ?B6`?)D %d)@?)? @a#V?w Dn">?CV?XT?_c?CTT 8K@D&?G`?Z@?M{5d)@EV3 ?:2P@?O?I?=`?K#?XBH?O1 `?'?NB?C$Ā;#H?T11; h@?90@G,?a?*Y?3=$Gw ?Y?M8`SSV^8LJ`Oc?)D ?O(%??13V@79D ?w G<G`1?48}Qc`A?, #V3?T&?] ?Wq?M8`6M`Ya V*N_ F?@?F?S?[R?Xi ?TE?Q"ONJ 0?G?ID8 P@_@R`?B?7h/w ?Ex?^M ?[oŠ?HQ*`d'`V4~@?.6M`DNb?7?6M`-s`)E(@W(`R 1\k?1`?E?!Sj6 Qw?1 `?C>*?1&`?F@2X O@4W`dbE^ ]*`Pш`?4n?KoŠ?9kVC WqTl%CЀ@F?Ѡ?X.q`?`̒?R \k?/OԀ?Q`?" UZ=Fv?H?G`: J2P@Ji `?7RE?8ݧ5Z<@?-XC`?6?"`23Xz VOA[??Ji `?'*VQo@?yπ??`?JA>Rtр>?ۨ`KTY)`G &=@)l ?07?/`^1@i, _nXN_wP @?E(?<?1[?Hݧ?Kj ?Ih ?Rש?6=@KB@`?N1@?2`c ?1o@0 J?1LH?OnAo@V?3n`?V?Ew@3uPoPAf??3NG@7Y@*@?E<?GRE&4@?Bn?ۨ`;k@?(?Q?FxTD?:ߦ?@ժISn`@o?yπ?0 #& .`?L0 ?"9Q[+?@V< \C~Sn`Pr@CA8 A[ .`!LHD;Q8 _ /]A4 K0cn`dS=@GܨVe W;1$@?E>WLk>?l I1`Vw@0 ?? /??9l ?Ji `?)1`>LH?DZ?D;'yπHo@?UZ?SP)X23?Fۨ`?@:A@7Y@-XC`?9@?J?3@5Z?Oi?] ?W?S&?P@=@I{NmS H1)XQY@<?C?Ml@?M0?Kj ?NYC?ITD?B?O?[?d?d`?AsH?2 ?Gyπ)l `?=W?L0 4`RCe@C?)X?:?@?K}?]XC`? /_V SNG@>@XIb`й`/\PAfL On1`WOnZ\~̀TvР83uV[(a X5D٩ Tl@[8(g @?T1?B[@NmI1`?Lj?R`.A4 c (?"`?CZCNG@/8g @J.@?Vx?U@FxJߦ?Eڨ?1[D٩ ?A8 ?V?:ߦ?H1?H!LH@KH`?9l ?X]'?XN?P4?Jߦ?O?Q> W[8H?R`?8RW* 7Y@?M?P|?Gyπ?A?2W?l ?C:`?Pߍ ?YX?Y1`?0 3&?D' ?@ @KH`2?OV ?Hz ?=W?Tڠ?]u?P#1sC?Em?@ 26ۨ`?B9?Q?7RE@?NV?[s?3NG@?L@?A ?*A2?(?J@?D٩ ?o@?1o@?1`GU@H?6ۨ`?Ao@3#&?KB@?/2JUDBMGE(U<U2 Wl^WyπE<(ݧW+.`D`R/`[sa`P0_ `MR3=XC`HXT`yπ?V< ?P_ `GlXW?S  ?, A4 )TD k?04?CZGyπA8 2?<@?;.`>??ZB?C&G*Fۨ`?H??V .E~ ?I@?ODvРJߦ?Cb ?U<?K>W?@?7 GPo)l ?;0B3`jT??ZB?)1`@7?B?Tl@?5Z,@?c W+.`?=?MD~? .`C/?"ש?@ժN@9l ?Lk?R`?D٩ ?B`?N1@?Nm?5w@)l ?91`?Zߦ?YTD(g @XTvР`?NYC?P@?M?K#?V`?Q?T' ?P`?Mj?P|?C?@?LH&ۨ`Cb L/A[?9{?4;U2^@EPF?5m?@?/>@G2 "`LHKVD Ra ?MXC`? K`- /?"9JUD^@a`I1`?@>XIbD@#&Cu$`?D?7yπRnd^]& =0B3Fm@2W? W?;.`?o@7l5(?=@?TƠ?]?>m?`2?yπ?1LH?S  ?Q ?As?E(TDW2 T 8g @?0 ?G ?![JA>E~ ? /] c0ZATOFY@] /XNRP@?X?W4`, Btр?A`?Iާ ?A8 ?TZ?Yl ?![O8?6`?>m?@_ `NG?8?B9W%m?:ߦ?E?;.`?(?TZ?[s?F)@@ QA8 ?I`?TZ?CZ /H+?[M?TZ?V`?S ?Sb ?J? /?'*?B?A ?;}*ߦF>.`>\~̀c}@Q֪@?yπkLjN@04?l ?#u2 P .`?Tc yπYX0 ?J|`? W@#7l?6ۨ`?JE `P@*@OVR%M S[0T`KVD T㋠R`041LH0_ `?? /?B%"9I@H?B9?X5?"שR9, ?BMG?K0?R`?Jk?.E~ ?![*ߦHݧPU*WS=@>04S?2?MDc YJbQo@UmYl M /BMGN /`F?=?U<?I@3&??S ?P>? 4?As?SZ?F?6ۨ`?G ?A`??4`?(EZG ?(g @?9TD!LH?%Z?K?F?6?c 1o@>?L0 ?W?XIb?A` ?V (g @?6ۨ`?(g @c ;}?TEd`?G`?Hg @?Lk?P#?#&<@?I@?\W`?Y@?R9E~ Q'yπ?o@Wܨ] @r@?ۨ`RbҸVm@ _ `FxQy F=@P'*?Yާ ?@T<4٩ ?89l 9X=@@?@?*ߦSZa  \ O /0ժ?)TD?6ۨ`![ME<?`2?P7?U@?@S0S+}Uw@`7K?(?=0?F?-jE@ ?Gf SةFx?51[K?SX)?dT8 ?G*9, ?.E~ 1sP@?L ?A4 ?@#?G ?#&H1G2 ?3Z?Pߍ ?5w@J1B`?9l ?N@?X! ?Y@?:@@ժ6, BMG@?LH?2 ?%PF?F2?T3@?Hݧ?2a ?8?![29&?>@?P_ `?72 Hg @G2 ,k.`?&ۨ`1o@?8?+.`?Ji `?PU*5ZG ?RCe@?\`?L0 ?Cn`>W9l ?B3?= /Q> Sn``?;.`= /Z#@I?1sP- [`&D٩ =@QQQPVxLk??H?`?Uw?FKWS4@?3Z?9{?+3n`Dn.`?N?VGc?H?1$@?P_ `?[?G =W ?@@_ `b}c5 Gf ? ?&?;?3NG@:i `?`?FWBa ??K?I1`![@7?I@?W ?4@>=@?M?6`D;?2?QLH?5PF?`?@ժ2 UP>?=W?'yπ.@ 4?%Z?? /?S:`?U@?91`@KH`MXC`M +}?07$@?`5?)X?Kj ?D' ??G ?B0 G GL J-LH?$c (+.`MXC`?29"91$@?0 ?BMGG>N`?B[@? SBn?'*?Dn?V?BשKj O`F' ? 4@'yπ?Fm@4c Ra 8+}?=@?Pժ?EZ.E~ @;k@T U2 Tc W ـP@*A?5m?1[HlZX D`?Q?R`? l MW]XC`Y@?=?_n?Z_'?Fe Z?2?Rǀ?V ?9X?:?Rx?6WY@XIb?9X?U?B??2a ?E?[`?[LH7*?R[@?R=W ? 4`=?E?M /"שM /??7*SV?!LH?0 Ba 7*?=@W?.`?<?=0 4@ ?%2.@:AKB@L?F=@?WRE>LWCD٩ >@?)l ?@4@#G*?F`?UP ?? /A4 QsT E?3n`?8=@Cة?Ih ?E*ߦ@o@FA?C&= /]b%Q` 8g @?+}?QQ?ALH6B[@UU<D@N@Bn?Fۨ`?,kKWH1Cn`6?6?(Gf W \k[Y@UK}D٩ N`QQUZbjehL`?TOF?Nj 3NG@?HSE`D٩ ?JX ?S  ۨ`?ZB@#F2?A4 ?Z@??A ?B?Y"?=XC`@4?J?btр?W>"94`?P#?dc ?\W`DZ< ?XSE`?C&Q}@?)l ?T٩ >ݧW7yπ?K.`?Q`>RTƠ??B%QX@#&?l -W?;0?<@B3P|A8  /;G`<IUE1s1o@?Q֪@?[W?3NG@=@?;}/`?C,kC?KVD ?X1?@ժ< Pr@VRtр<@?? /?Qo@?Ew@?R?^@?LkTD?#u&ۨ`?2?[s?RMG!o@Kk@Ih ?E?K?1[NYCP@F`S0Fe ?@\ R`E yπ?0_ `?E?D@DcةeZ(VYR WMWK.`WR@7Q\ :?UZ?I@LH?Rx?[`&?N1@?Hݧ/_V2(g @?7 ?Ve ?.R3?"ש?a֪@?Y@;.`.?Y?Z?!o@@7?Fe ?``?I@Wf Btр?Y?8ݧVO?Z?XN?ITD?Fe ?Q`>R`TOFL?=?X]'?F2@>@o@7?GRE?GlJ^v`X;0&=@yπB3U @7?)l - /?"9?:=@?O2?^'?C?Cb ?7*?@ ?Xg @?Oi@PKH`P|U2 THz "9?Ed `?T?J@?[?dޚ`?[}?Gf ?B33&?yπ?a$@?c  ?Y ?R3ۨ`;W?L ?P@?#u*ߦ6?yπAo@,k?yπQV*Rǀ?8ݧ?Q$@?:i `???D٩ ?L@:OW ـXz 0ժ?H1? 4D3@?/2?Vn`?H?< ?`j?cة?MXC`>Pc+S?M?L~̀?8?`?B`>Cn`?3?Z?T㋠@;}?@ ?O`?8ݧ=@?A8 ?T ?6e M?#u?Z_'?:ߦQLH,k?F)@?@?CNG@?LHS0P@/252?)TD?U@?V?Qs?Hg @yπ?Jk?H+3&RjMD~?9TD?HX,@@#( 4?*AP@O`Ji `J@?EZ?_<@?R ?? /???4@?On?Yާ ?' UH?0_ `?`%2?2a ?9{Z.@TD?bǀ?_P` ?M?>?Cb ?DvР?.`Ba @#;W9l BnI@7*DZY@F?OZB?GY@N@]b%M `Bש2a ?Y"?` ?GܨFY@NE~ ?>@?5PFKk@LW`?*ߦ?G2 ?(g @?>E~ ?\M`?XIb&ۨ`JTc ^퇠C?Wo?Wܨ?@#?,@?3u?;0?>m?/2?-W?H?Q?Ba .E~ >?>m?F2?6=@?=0?UP ?W2 ?04!o@???ALH? 4 .`Fۨ`R/`4٩ @QV*Q?E?V[(?W?E2?A`?J-?D' ?=j?@>ݧW?Q` ?UPF91`VQF ALH?@ ?>E~ HT 3u/2S I{?:i `?JX ?Lk?:%Z?@#?P4kOZB?2 ?[La?S?Ao@?T@?SX)A[U 5?VY?>m4c W?T1?RMG?M?UZ(?(g @Ed `?>E~ ?N /`?,k0 C&8?Z9TDSX)X+Sk?:AC?E~ ?BMG5mW\( ^mWf ITDP>U2;k@?@ ?9, E<R`?0ժ?Wf ?kT`;}?A8 &=@N`, ?I{?5CJi `TvРYv4`?QQ?KW?%m?@?T;?W*?K.`+}A8 ?B9?X1?D;L@QQ.`?H+?1s /?Nm?]:?L~̀ ?A֪@?S ?H?%Z`@JES:``c]@Pߍ ?$c ?Y{?Xp?>?@KH`?Ih ?DZ?K0?= 29?;W?T;?3&Q8 Qo@? Ml@?i?XSE`?U `N1@[N@ l ?:A?@1o@???`?8?*ߦ?DvР?R/`?;VD (?Qi`?\ ?.D`?&9TDW`>?\k?cة?X1?-jT;W\( "9ݧWH+>?6e ?OZB?IX4@LkA[-W?#&?ALH?A֪@?2a 5mF=@k?![EVۨ`[``_ `^'M0+.`FNm?8ݧ?S ?!LH>@?A?GREH1Y{L0 )X(??`F`Rtр7Y@>=@OW ?V?X?P@?? /8?`B3?`?@NmQ֪@?:?V< ?88?I`?Wv?1s:?' ?(g @A[;.`?29E~ SWܨP@D٩ Ih RW* 3NG@?TY)`?R`?/?F=@?N /`?;VD ?;k@?MHg @?, ?Cn`![T;L`?: ?\Ma@?Zi `+Gf )l )X?`1[?0ݧW5m?F?Vm@?A$@3n`J1P\?'*?Uڨ?OV ?D;?6`Q` ?Qi`?RQ@&?@?Q`+}X! ZߦE?.@@U&ۨ`?W?Y?2VI1`?Ew@?DvР?(??;k@?PR?TOF?H?"`04Ljagt@Yh ?+?3n`?l ?C?/E;0?' )X;W?BMG?RQ@?23 W?L~̀?L -jA 8R3a` V?2`]Yv?H1?^?I, O`Rtр>?=XC`?Cu?T٩ ?M /.@9X3n`?2@oA`&?TDN1@I, ?Gf ?=XC`?V ?LH?91`?![?M?ZX ?G>Bn?T?3n`Q?@ժ?`?I@@ Gf P4M ,k???Sk?GPr@?^YC?]j8D' 7Y@TZW`@ ?9TD?7lEZV`HX?6ۨ`?;R d6TY)`?Bn?$@F- /?2_c WO@8g @>W<`@?E2?S?2 &?;?<@kQ`\`o`@gREiJb[VD ,@??i?Rn?Y;?T㋠?TEd`?_?\k?' HSE`OiZ|`X@?iCuP|4c ?- />?&?23? l #?>@>W?H?3Z>E~ A$@@\OZBZrRש?@7?1o@]:V?SDd?` ?Lj?SK&ۨ`?DvР?U ?J"99X7*?0 ?KDn.?2?Y艠?Vm@=0PoHz >?D3@?\?STD?@ ?_ZB?KG ?<?Y{?E?ZMl@XpSZ?SX)?PQ`?R`?TY)`LH? l ?+7l'yπ?9, MPߍ OX [u@ON /`XpB[@?EZ!o@MXC`?1s?JUD:QE2Ba L~̀SDdQ..@HCn`?6?J|`?Lj?91`F`P- Rnc`fxY1`?V ?,k?V?Z1? .`<?U?`U*?8.`?SP?QQ>=@&ۨ`2Gf G :@.<@MP@?&=@@\H?`(?29?%2LHE Sx`=j?0?>?V`?P QV*U`)l *@#u?07,kDc ;.`??G`?Q`?P`?HSE`@>?Q[?A8 F=@>m%2?0_ `?Z#@?[j ?"`A8 A`RW* Rj?LH??i+}?(?R ?= /3?W-XC`A4 ?9, ?(g @SUP Ew@?=@?JUD?91`C?#?,@>LH?,k?"9.E~ _ ` TEd`bLVm@ 4Lk]@Hg @?9X?2ש?E?S ?2a 9X?M ?`?T`?B[@?=j2`U<\]\[j V;0?>@?=0?@#?A 3uN@FxA֪@Ih R~XݧQ`?.?1`V``Z 7yπ?Kj ?3u?A4 ?` ?` ?3ZBtр#u?0 LH<@C:`R`_`^H?!o@?!o@3n`=XC`,k?@=5(?52?J-?Q?XN?P4?"9?8ݧ?9, +.`ݧW?- /?(?I`?Jkc ?A`>@Y, K.`.HSE`:ߦ?"`CK0Hz _ /X@?C.`_`U / W?8?%PF "ש;k@T<[$Ra @74@PAfaLHZ?o@8ݧ?@r@?P`?8ݧ?6?H?1s-W?- /?B3?`!o@"9PKH`]& U `O[8^v`P7ݧW?,@4c EmGܨXc}@^t .?9, G `- ^@R%MjU2 W`Il ?)l ?GY@?P`?W2 ?OnA4 W`Hg @?/`?0_ `?=@?-XC`.E~ QSD;LH>=@Ba QK`?LH?Fۨ`9l Y 9{?Q4 ?Q> ?MXC`?>@;}EO2R=`?4KWRa B%?`?F"שPh?K`?e?[u@??`?:@?B`?E?2+.`?.`?K9@?Q[?Hl?V -XC`>=@Cة?Z?Kj ;VD QQITDXPU*?M &bHV`TZ*@H+9l ?&?E~ >=@?7yπ>\M`cpN@??&@R] /QCb !LH?JUD?@7Fۨ`KW<`3Z' 8Q\Ma@[}Wyπ_F}^c%`)X?>Pժ]& Q Il Iާ BEL@TvРaj`cQs?07$c U \%׀X;`Q$@< 0 0 ?=?Q4 ?L~̀?Fe ?DvР)1`NE~ E@7E?Z?R~?P#?23 k7Y@DZJkRǀU Sb H=@?3n`?3n`?@?/29@@ժD;JAA8 3?,@?P ?+TSb 4`?J|`?X@@KH`e`B ?c.?`?4@>ݧW?3?o@J-Qy ?;.`G>Jk?GY@?O /![? 4?D@?yπ?G ?Z?1`Cu?<?9X>W?Hl>UZ(;VD ?!o@H)TD?M? ?(?I?Pr@Cn`ZN E(&@ 1LH@oT㋠X[Um23;k@Sx`RSSة5w@?+.`2P@Vw@Yh _wY?+}?H+P|]D~U2Yh U<?=@?6?"ש4@[B@]N`3n`?Cu`Ml@JA49l P`Nj ??21s?9@?Xg @?S0?Bש?9l BtрT@?TOF?P_ `?A֪@?7Y@1LHL~̀L`DZA[FF2>?J?M?@PAfS=@I`L`Q DvР?5?Y@?\0 ?#&G*?2?? /?Nj ?Xo@`U?"`$`K`KWEd `N@[sW;?.E~ ?Rtр? WFe ?)l ?;}D@9{?I@??`>?&AB%?S?W?$c ? ?#&9X>?7 )TD?:A?Qo@?D;?4c ?Gyπ, [: ZW`Y@EPF@A4 KV< [`Q`LQ O]D~e `U?C?V?K`+.`PR[k@\ +.`?Fۨ`6`L0 BMGNYC@?N /`?N?@?.E~ ?&P Z3&?Tc ?H=$c ??`FQF cB a4 Hg @FOF}?Cn`?_2?T<?N1@?RMG?)TD5m?C?P?>E~ ?8?0;WI1`6`?)X? k8ݧ>=@?LW`?J+}U2Zi `Kj %mFm@Vn`Q?6e ?^?X;`4;$c ?W?Tc ?6e ?3ZݧWBMGHg @R/`T<Il 7RE)1`G*>m?D' ?OZB?*@7Y@??5(A4 M /?.@??G*W>VFۨ`?G?Nm .E~ HP 4c ?"ש?yπJߦ?_`?Q5=0NaLH] RW* L`W?LHN@M:9@(8M /Q`2`i"`ڛ?'yπ?T' ?D`6LC~Z@`/=j?Tc ?LW`?Z=@ۨ`?:?P ?G>.`6=@9TD-j@?@KH`?UFd?>@SX)Lk?>@`\\%׀C>5(?MW?Pժ?%m?O`?Gl?Ji `?PU*?-XC`=@?7lIXD`#&?%Z+.`EZ?2`?V2?A4 Il R3J|``?0 5PFNmR%Ed `?:A?.E~ PR5w@?[.`?Z_'?0 ..`LH0 @_ ` ?7*?Btр?NYC?J1?)X?< ?H?"ש+}%Z'*?(? l L E2?7RE?ۨ`Ao@8?`!LH2?W?7yπ? .`OF}S0$c ?K?EڨLWC?^퇠?Uw%2CuKWT;yπ?P>?DOF?D@? _ `XW\( ?![?Qo@?U@?CZD@KO /Y;Rn? ?+.`OV2HlR[`3&?S?JX &5(l ?+.`0ժ?ۨ`5ZA֪@?J@?Y@?L`?Cb  /[[j ??I?-jWyπ?"ש?F)@? /C>W?ALH?F=@?V?KFe 29?A8 < L@+?LH?k!o@?D3@?Wf ?Gyπ?o@?1LH?LH0_ `"ש?![?= /'yπY, ZQVJ?R?^?Q?Gf ?:ߦBnS0;0?@\?+-W?`&=@Cb ?+.`?A4 8?`6=@?TDC@_ `?;W1o@Q8 ?=@?QV*?K?Ew@?-WCb @??V ?NE~ ?8??B?R ?WO@?UFd?`?Xl?T٩ ?23?$`?04?%Z?W ?bMG?P|?B?J|`-jE<?B ?\a&@?_8?K`B%;.`?:A?-j???V ? l VZ`GE(Hz ?@?7yπۨ`?LHW3NG@@4WoY>mFxP\?H1?V.`*A?7 3u>?Eڨ?Sk?D@?04?!o@04.@?8?Ao@?@4?B??DZ?a3?TB%?1o@?SDd? .`"ש??ZB?.`?1o@?P?N@?R9?Y"?R?Nj ?H+F)@^MXIb:@?GY@?BשS_d%PժLW`Gf ?Nm?] ?Q?L?K0K}aBeQ[?"`/MKj Kk@E?,k?4`@#k?Cة5Fۨ`?F)@?G`@7 W?P@?Fx?- /?'yπyπ2?D@?Iާ ?8g @?C&?RMG?I1`?=W?I{?5PF?SP?Q8 ?"9?>E~ ?QV*?C:`?P_ `?Y@?A`?.?T`?P ?$c ?D@?YJb?V3O9TD?>@?3NG@%Z?c ?, ?V NmIh E<?![?LW`?`.?P7?Kj 2 H?`\/a`TY)`Y@_(g @?0 R`B`?RMG?T ?Tx?]u?S WLH??V 8ݧ?@_ `?W2 ?Vw@?Btр+?KVD ?e#ˀ?[}=@?I1`?Z?P@?Ph?M / 4ݧW?JA?Ew@?Eڨ?Q?P ?P@?3n`]iq@c WoDOF?#u /?>=@=@- /?Jߦ?M Hg @Iާ ?A4 ? QLW`>?>@?- /+}?-W?P- ?F25w@I@LH?Q?JUD??F=@?Q?)TD?W?D' ?yπ8ݧ?A[?VO?T<?K?A` ?1`?![4`TnTn*@%2?QLH?Gܨ6ۨ`?&=@?P\?%m+}?6=@%2A`?$c =@N /`6`?M ?8g @QV*Qy 65(C:`L/Ph>?)l ?.E~ 5ZC&?Cb ?Y1`?;0`?Q}@?E= A[V[(`& SY^퇠.?@VYL@?A`?B?K?Zߦ?On? /1LH?Hz ?;k@+}?6ۨ`?P@?J|`?8ݧ?3u?RCe@?]u?J|`/2?1$@?K?Q$@?W2 ?L/.E~ 4٩ $c 8ݧ?7RE?@KH`?P ?G`U<c+SX)D' PR.@?K0?DZ?3Z?3n`E~ =] Z?0_ `?QQ?@ ?iC?F`?M2?>m?\À?91`TP@-j?M?Z-?Hݧ? ?9l ?1[?.E~ ?8<`Ph?*ߦ?\a&@?\@?L~̀?A8 ?Gf ?=0Dc YS4;D@?GLHA[??@_ `1$@@_ ` _ `E U<QVn`b%@VO?-W1sU<.?@A LjJkZV?`?JX ?$`>m?6`?Um?@ժ2ש>.`3n`Hz J1\t^@D٩ JkRx?:A?D٩ OSu@DvР;W?=j?9@@KH`@\?#u? W5m0  /?4?S=@?Z|`?U@?Bn2? /@?)l ?K?J|`?Bn?7RE+}#&?C?D@?? /?T@?Wf E~ Fe ?Mj?UZ![? ?V2?G2 7Y@6HU `Kk@29 l ?l ?>E~ ?A8 Ji `X?2a ?FxTY)`B3?U?0_ `P>B`8?`?7 ?W*?Em&=@?-j?3&?-XC`?4;E\`Sx`?*ߦ?KB@??i?:i `?S?Z-?J-?=@?0_ `?07GRE(g @QV*?M?2`4c ?/2?B%2MJX Lj[k@X;`@,@I@?K?YJb$c J-E(XVۨ`-W'yπLkQLH9@?9TD>ݧWE<@ A4 O2Yq@c+[`&)1`?iM?5?Gl=jPժC%PF`l &=@0_ `2ש- /&)l ?V @ ?G ?aBe?^`?Kj ?1LH?8?OZB?On?-W>LH?7Y@?OF}?\C~?UZ(?!LH?D?^@?XN?JUD?Ml@?EPF/LH?W?T㋠?2)TD?U2 ?A C&yπ5PFRש`?[?U@6e EZ?D`RW* ?L/?U@MD@?V[(?Q8 ?1LH?$`3&?-j?N?0_ `?3u?PAf?7Y@?' ?QLH?CJ-TPH?TD?6=@?%m?N /`?^O`?V< ?Fm@?P@?Gyπ8FQF T;?Q?b[@?K W?G ?Vn`?QQ?#=XC`E~ 2a G2 ?&?6!o@?L ?Wŀ .`LW`K.`SHD٩ ` e(Y, As3&H+L@,k&=@Qo@]YCu&I1`Q8g @?TD(L/N@?-XC`?KB@>:ߦ?&=@?? /?4?;}?>2שBMG?M /?ZN ?60ժ?DOF?QLH?Po?R?P|?JX ?CZ?Q?`?TƠ&ۨ`?>?]b%?Y@?H?`?LHIXNYC2?@\Cb `7P@?Il ?@_ `"9?Cة?G>?#&?H+?V?ALHE<0ժ?I{?2ש0 ?P`?U<,@'*?Ml@?JA?@?)l `?I?I*@?CZ?S;k@:ߦ?^ /`?cb ?Qi`yπ;0?*@?H1?+?-W?Q$@?J?3&?M?O2?LH%ZI@?S=@?d,`?U?`>W?M⥠?ZA?6U ? /?G`?0 ?4٩ ?E<>=@?' ?Ba 4`Hg @@ D3@@oRǀe d@D@?(g @2a LD?&.`S0R=@?3Z;WLjEI@KWCWŀckQ.?8g @TD6`?@ ?H?5w@???JWAs?GY@?PAfI`M?I{?O /?$@?6=@?Qo@?X?SZ?K?Nm?2ש@ժ?,k?Q?GRE?91`MK})1`@r@[saj`O /???@_ `?' ?B3?OV ?T3@?S?1o@Bש0_ `?G>?TEd`?Gܨl 2a ;0G2 E2JX M007LH?2?V`?P@3?8ݧ?A`WvUZ(?R`?[VD ?B%&ۨ`7l?3?RQ@?DvР%m?29?F?DOF?Pr@?L@?"9>Q` 5(?Hݧ?G5PFQ#u?Q`1LHb@RW* ?Cn`?*ߦLH?1s?yπ?0ժB[@>E~ ?@7?04DUZrFx???<`o@?yπ?Bש?@ CNG@TZ9l ?A4 ?l JUDA` ?&Fe W;T;``iz`_ `>@)X?I?E<8;?>??`?=@?P ?V`,@I@?*ߦ?4 W?=@?@#?UFd?Zi `?BCP Ao@??2?D@`? k?9{A[GܨP>RMGHW?E(?H?:?)1`?CZ?WY@?U<?"ש*ߦ?5?4٩ ?.?F2?UڨOZB/?5PF?Q4 ?On&=@,k?JX ?S&?L ?= ?1sHXTvРP@C8LkR33NG@?6=@Iާ _<@SZA$@J16?0?&ۨ`?Cu?;}P7IX?L0 ?JX 5mC _ `?8g @?:"`.E~ ?GRE?W`?@#SZTl@?+}4@DOF8ݧ .`=WP7PRZUDanTBL0 6?NE~ ?OZB8Qsl ?H?`?Ba ?N /`?Vۨ`?ALHBL C&?![?LHF?*ߦ?XN??D@?L/?Ed `?>@?I1`?MD~?/2+?;VD ?E9@G`?D@?Ra *AK>>PAfG ?3n`?0ժ? ?Hl?S ?OV ?K?H+?;?3NG@?&ET/2?KB@?6ۨ`?&?>E~ !LHA$@?7 ?A`&ۨ`$`?B3Sx`2?B%?=@F`RnHX?iT L@@r@Qo@NYC?FQF ?U`?Cb ?4٩ 1LHZ_'V`?yπ?1[?=@?EPF?Gyπ?)TD?Z`D;k@?9@RQ@F?c <@H+CuPr@Nm _ `?5(L RjFY;WG >??i?J@"9Q` B?04?W?Cة?G2 )l S N@?+}/ZߦGf ?P@?(g @[`AfR7Y@>E~ O@A֪@?B[@?I@>)l ?O?`P9?W`?3? .`?(?4;?Pr@?U 2[LaU<?72 ?Ph?-W6`?-W?= /B L?l ?0 :5w@=@ k?<`?F?<@?C&?MW?L~̀?H?H1?M??29TD?4@?V?U@D' *@72 ?o@>WI?=XC`P@?Rtр?[?G 0 NL M ^V_w6?4;>@+}?VQF ?]?D@D;VYM⥠FRQ@9l ?Q?H+1$@?04?FOnc]W`::> 4YX`@W YQ?5w@?23GUZ(^ /`]F`?8?;}>7*Gf I2:i `7*?@KH`?P?>E~ WC& ?R%?Tl@?)1`6?A`?YN?S?yπ@ I1`As?KW?UFdF=@aN@?Cu?P@?Il >=@;.`5PFMjUw@=0?Zl #&@KH`)TD?U `?TP' #u?Hz ?BtрLHW?Gf ?A8 OK?E>U@Gf "ש>?8B%[.`QLH&=@>?V?L LH?&=@(Rש`b\`f$ \~̀N?yπ?F`Ed ``2`a}@gjjZ5QQ?Y?`@?@oJPc ?Ih ?CZ?2?2ש?P7?Qo@?@\?"ש?K?X@?Dc @?F`?Lk$c 8?`?0 ?J-?T@?Gyπ1o@?29?Xl?R%:URMG7Y@>W,k>JߦJߦ?29?Cn`K.`P#?Em?O?.`29M /LC~?72 ?)XNE~ ??5?@r@?E>LH6ۨ`?Qy ?X;`?c )TD?7Y@"שITDB ?LH UV`>?2ש? l ?83n`?&ۨ`1LHMXC`I, H1?As?a4 ?B[@CZ?<@?CةC:`V3WoTƠROL Zub}RCe@?Hz ?P#?7yπ?;}?:Iާ ` XN?/`?MW>;0&Fۨ`YvK.` 4L0 Q[DvРQ8 UZB%?7Y@?R%?F`Uڨb Z``~`g`T`?V?b?SNG@ݧW-W?As?T㋠?Rǀ?Cn`?>?@?4٩ ?*A?ALH?P?ITD*ߦ0ժ?E(?=@M0FYM0UFdO@8g @> k1`?%Z?3NG@FG?91`?O@U2\Sk?L`?O /ALH!LH?I`?J?S ?I`>>?R/`?KVD ?234`QsKW8g @>6`ݧW?"`?c c ?>?LC~1[Q`C1$@2T㋠?SNG@?i?Vx?C?Hz ?4c ?:A?A4 ?*@B9Q}@OF}P T3@@\?FY?S?P_ `?7yπ0 <A 8?CZ?R ?.@9@?23?Bn?@?LH+Sx`Pߍ ?04?F)@?>E~ ?Cu?L/?P#?"שY, [`&0ժ![S  Pժ?TD?F=@?@?)1`?ۨ`? 4??i?NV?H?`@=0?;0?Um?Q$@0M⥠5PF?JAYO1$@&>LHGf W;@ժ>RJ1?P|?G>OZBOZB? /?Dc ?A`?2?= /?GyπWQV*T㋠SMCSS  ?-j?*AKB@?Ph?D@?LW`?Tx?@\?3?Nj ?Q4 ?Cb @oR`?7yπA 9{?P- ?VQF ?9l 6`??7lA8 Kj "`?7l?L~̀?4@X;`?E?`m?=@?1`?P|?N?@? _ `E Py>?S?JX ;k@Ba ? !LH6ۨ`?8?E ?.?6=@?&ۨ`L I`?Fۨ`?UPF?HX?;}? l >@ ?HX?FY?0ժ?(?4٩ ?- /N /`c `FW@?D;!LHK0L/DnC&@KH`7Y@A[9l ?6`?@?2*@6`?)X?Qo@?B`Cة?P|?4ZKb bשQV*?@TڠA4 ?O?K}?0_ `?, ?;VD ?ITD?E3PժJ@?3n`>.@>W=jUPFB[@?F?EZ?B[@?U@?^@?Z`?J-?07?.@&)l ?J1?R`>LH?i?)TD?F?GRE?D@?A8 ?.E~ ?Gf ?Yq@?VO?Ve ?P>D@?1`c M9TDyπJ-Cu?2`?@!LH?3n`8Tڠ?6?d@?V< WlaBQ0 ?O2OF}+}L@\4٩ ?PAf`O2(?(g @"ש?.?5(?< ?(g @??H+?R[@?I, T<XN'*?P@?J@?GRE?UFd?S"9PU*B l ?@?Dn?P ?<`@O7RE?JUD?S  ?Ew@?=?N?[`?Y@?;W?0_ `?S?I1`?B9BnZRQ@FYSn`Pժ' 7 @ ?4?05PF?P ?e-?W>S`wÀTڠ?Sة?R~A`OF}?9X?@KH`Gf Qi`RǀVGc< ?@4?1s21s>@;N1@Q> BVg dl@RnEZA4 HQi`;k@?7 ?6ۨ`?:i `?E?/P ] /?aj`?S0P4Mj0 3Z?4`?B`*A< &ۨ`?4;?Xg @?^'?DvР@?2 ?5m8Q.L-j5mE2?*A?@ S_91`?29O`Z:Q+?3u2, ?O?Z|`?Q` ?GREWUd `K?N /`?RCe@>BMGFxK.`Ml@Hl< )l $@2FL`?*A?Q> ?2שD;?$c ?V?RǀD@b Z|`?I@?Wl?4٩ *ߦPRUFdQ` P|EZ3n`Hz ?D' ?E ?S ?X ?DZ7 J|`K?k?T٩ ?AUmQ?M?V?B3&SNG@\29?Py?7 CSZYBש?Dc )1`S=@B`@r@[^c%`VYSuA!o@D٩ @r@?+?1s?8ݧ?Nm?GHa.Y" l E~ D@?1$@?Ml@?B[@?$c DOFJ|`?;k@?NV??V ?Pߍ ?T@D`?0_ `?#uS\t F?Fx?T3@?S?U ?Q>V3<@?LHQBe`@_`W ـE(=j;}?91`?Eڨ?8?`?U2?^9?52HX?*@?O?4LW`R?FY.`7 >W%Z@#Ew@OZB'*?[B@?^M/`YX= ?Rj?Fۨ`V`eFdV?Nj ?Wܨ?yπ%Z;0P>QQG>4٩ ?$`?=@?i2`?.`=@9TDNmP&?!LH<(??ZB.`JkR9HC?TD?P|?Pժ??`/L@U(` `2`A?=WZB3AsR~c$d VEPFLWCQLHHl?)1`?Y?an?\@?JUDFxY@DOF?N?S?<%PFNYC`_ ```UZ(Xv\kB3?<?+.`2a 7 >W?Bn?EPF?F?OZB?WZN \a&@%Z?' ;.`?4@?R ?Ed `?DvР?V?S?Kj ?T٩ ?X! ?FY/24`@F)@H1?@?Mj?04?EPF?Ve ?TY)`?Wf ?W\( "`W C&?O@?VQF ?LC~? 4FxN /`.E~ ?&=@+yπ?L/?W;?P?=@1LH?7 ??2?6=@?Uw?[`&?3&A@_ `@KH`?1[?CZ9, E~ ?OF}?4`@r@@_ `I{%m?Uڨ?ZN ?Rש?A` @ E?F?#N1@PKH`Dc Sb D3@?W ?``?L >E~ Ba >BMG\Ma@TvР?!o@?2`B`N@OZB^MdEd`Tx? 23SZQi`6`?@?0 ?C?PU*?K?<?%PF?!o@?Ao@?G >.`Ra `AfYN6e =@%m?I, ?Z?H+?Z?B`?WITD, ?;VD ?2 ?Bש?F?5w@?A?Eڨ?91`?7 29R%@_ `?![?`?Fe ?Il (g @*@?Z/`?Hl?`& ?Hݧ8ݧ?F=@?Y{?RQ@?Fۨ`? .`DOF>LH?V?W4`>WM &?U(?Z_'?1[L/B9%2`?JUD?WHc@?HSE`? k42ש?J?S?5(?P@?X]'?ZBU >?<@?<@?K0?6l 91`XNY^'`QBeD٩ :Qs7Y@?"`Xv[?A`?R9?ZBW*@ ?K?<`V ]& ? /?,@@NmCR[8&=@?Q"`[\WCXZ:Y@E ?CNG@?SP?R?7REE2A֪@?' .`QV*`\~̀4?7*yπ?1`?KW?'*AE2B3>LH?/2EmALH?PAf?RQ@?&ۨ`@9TDHA` As:@?3NG@? W5PF?9TD?o@I?.`?*ߦSZG>?:@-XC`9l ?"93ZDOF?i1LH?RW* ?``?ALH W?Tx?Tn?1$@>WEW+}?W ?RW* -jE?&ۨ`?Q?D@EL >?)X4@?'*?SDd?U `?Nj ?GY@?K?VQF ?P\?;W?^YC?dX?/?YX?Xv?G2 Ao@7*?Ao@/`Pb4\/RW* Q?6`?KB@SY@?- />[s\Ew@?![J1QBeF2@\PhSNG@LC~SPr@?Gܨ?SPHSE``\[0VGcY1`YNQQ0ժ?.`?$`?!LH@N@=j/ScbLE ?D`?J?T' ?\0 ?R?4c ??P?Wŀ?523NG@?ITD?PR"9K}J-;k@`1`+}?8LH#&?LW`?l Sn`?0 ?Q DnG?;7Y@N`*ߦ5ZN1@Gyπ? _ `?SZ?J|`Q[Sk?0_ `?-jTD?1o@KB@b%@U</@:A?91`?Nm?G ;}R9?$c ?^M?Xyπ4`?Bn?Il ?= /?B9?M?L/?(g @$c ?R/`?^?/2P@ _ `?Lk?U(?P`?3NG@?M?_2?MWCU2`P9YNH?B?EA` ?Q52\ Fe ?&ۨ`? /GY@?c ?=XC`0 Q` UڨSQi`V3P@?B?Ji `CPoAA`EQi`YTDTnP- KE~ WL`ITD4`Wvgao@5(?C??2?J-?[: ?]?Q` ?A[?G`?Tl@?Xz ?Tl@?U ?`/?a?R~?29?%PF?Jߦ?V`?H+?!LH?0_ `?yπ?A[?Y ??Ao@?Zk kD' ?>?=j?5w@?Kj ?5mHlP`BMG"9FZX S=@?`Lj@_ `?B `IX4ITDVx=@?Qs?N@?Hݧ?8?`? l ?R/`?c:`?]?5(?<@?&DvР7 ?(`?24@?&?DvР?Ed `?5(0_ `Cu??L@?LC~?Qo@?Sb R?A8 UFdU>?E?@@?SNG@?SR9]W?#?MXC`?2R~?L?5Z@ժHg @HXF2KTY)`P_ `A4 : l *@MOS ``X@DKj Fm@=0PD`>X;`hl\~̀?'yπ?-XC`B%Ba ?52?PU*?E?)l ?'* 4,k?K?_V ?`Z ?\~̀?Y"?P`?I{?Wyπ?[?A` :+.`?.?R`?]j?Ew@:i `?N?]@?=XC`07?8ݧ?L?W?_ /?SLHF`G*AsALH5m?4c ?%ZK`Dc ?Bn?R3?`ڛ?d6?6ۨ`SDd?`?Dn)1`?;}?Um?Q?Hl?Hl???(?23?F=@?2a A֪@?C:`%m@?'*?)l ?`?M ?TY)`?yπP|B3? k??,k?)XGlS?^E~ `@7?JX ?J-0ժ>W?S ?<`Yl TvР?Cة?EJ|`\C~R3??B9?5(ZFYA8 MW`ժ\a&@ME<Su] U2K.`TZCu?:i `A[YUPFPߍ ' ?A4 TvРh+UZ?Bש?%mFMB3?.`?/2)l D`V)@TZ?B%?Xv?3NG@:?'yπ?k-j?9, ?D3@,@=j>?5?Q.?YTD?D' ?o@?OV ?U2?Gyπ?A` ?91`?,@?Hg @?VGc?Sb ?=XC`?7*?NYC?J??V ?EPF?D`?![?1s?N`?Yާ ?gyπ?jz?P- G ?$@?#&O:i `?E<?E<?.@?ZBK06`??.?- /k?=W?PAf Gf ?+}?-XC`;VD ?.`ITDR`HPyS2?I{LHD?ax?G ?.`?L0 ?;G2 2?G` l LWC?@?Y6?BMGFXvXv<@>.`,k2 JK?)X?#Ao@2שBXIbY@P\+.`?=W?W? ?7REN1@b\tS  ;}?=L cZJk?PU*?C:`?yπ?$`?(?E?H1=@Cb L0 =@5(>?K.`?1LH? /?%2?8g @ W4852SW2 3?&1LH9l U2bMGZKb M[s\?W?R 4M⥠?Sn`?Cn`?!LH?<R%E?$c D@JUD?P>?Z@?Dn?075PFFm@2K``M@NV,@PRHݧ?8g @?Y;?c0?EZXGl?FY?JX ?P7?L0 ?.E~ +U<be^ /`\t[D@Hݧ[.`?ZB?Iާ ?+>?EPF?P`?Ve ?R?' ?,@?HX?Eڨ?Lk?PKH``=W?@ ?3ZO?2?U?eFd?hNT ?WY@NmI@?G?:A:@HT@;.`?S?QQ F)@;? 1[Qi`Cb ??i?;k@9{MD~P7LC~BI]@Yާ ?9TD?Ml@=XC`5Z?W>?cP?Yq@:A@ ?TEd`?V?LC~?] ?_s?C?/2MXC`Wf ^@ZFۨ`?&?Q?X@+_T㋠BWŀX?#&?=jRשS(.`?< l Q$@A$@?(N@T1?1[?A8 ?1$@?P#?=XC`&?IL/j`X?4;V3c+Ph?O`?`o?9@Zr6?Q.?/`?yπ?G?B?(g @D3@X]'W\ÀbBZN R/`Qs$`?l N@NE~ ?:A?HSE`?E?3n`?TOF?a}@?Pr@0 'yπ@r@Q8 :ߦ1sSn`J|`?F2?X1?_F}?Sn`Cn`C?E<?84c Fe V2IX?BMG?7lD;QOF}@=WIh :i `=@%ZyπݧWCn`Q[L0 L~̀\`Xz ?Btр?JUDUڨ[B@?9TD?`wÀ?[s72 S&?A` ?YN?Yާ ?cz@?`4?.@- /?=j?5w@<@PP- O`C:`?U?gY@?[`? l ?)TD?%PFKJUD?7*?+}P@ 4Q` S:`9, ?C>M?#u?Qo@.`+?K.`?-j ?P@?(3Z?UZ(l i\jLH]g_`U2 GܨP [D' ?(g @MSNG@6?![?A`?4;A$@D`CSP\^v`Py?.@(ULj.@7Y@?ۨ`?8ݧ?Vm@?aQ9@?Mj>@ITDZ`T@EPFH+;08O??[`?TY)`?@r@?@?=@>ݧW?o@HlGܨCةW>UZL 8?`' ??Cn`?)l DOFW?L/?B%? 4?D?Q ?*AB?!o@kZ:[MLH?[u@?Z?S0W[S?K0?X?`?DOFk)XG*T<?^ /`?`C@?\ ?V=@?)1`Hg @= ?%Z?%2=@?MD~S]& G ?B 1LHRMG?;VD ?UZ(?.`?52?X;`?DZ?6ۨ`Gf R?>9{dKT ?TnVLW`_n`\P>LkF`;.`Rtр[Y@P4'yπ?*@&.@?2VOf`FW@2C&SZ.`?A֪@52B 07(g @?%2?E?Ao@?"`?>+.`#?`?A4 ?R3?0 U W?c$?b9?Q?5Z'*?6?Hl23G1[HݧSuB`?8?MXC`?=XC`?=@?7yπ+}QV*`?Q4 ?Eڨ*@?3u?X5?M M⥠UwL~̀A LHFe YJb2`?2K`?^'?\~̀?EL0 a֠Sة?I`?P>#uD?!o@?>E~ 1LH-W?KW?\ ?a?SuBtрNYCBMGLGY@?$@?F2JX ]b%HX?Fe +SX)![`Y艠VO? ?5PF=@>X5\9`S`c?s1`?Gyπ.E~ ?,kOZBOV >W6ۨ`MACRjPߍ ? /(,k'*5w@BMG3n`N@g@hY@VGcW; _ `?D@?1[TDE RI, ?52?(.`?Ew@?\`?VGc?-XC`?9l ?V)@?MTD?C?Wf ?K?Btр?Dc ?0ժ?Ih ?TvР?(B%9{=0?:@?Rj?Y6?D`Ao@?>@C&?8ݧ?K`Cc b@A$@29]j^YC8ݧ?Dn?P4?527Y@?A֪@??V L`3?RMG?X?[?On8?`>?J?yπQLHRn?yπ?UPF?Qo@?DZ?N@?T㋠?R=@Pr@?27lWO@R%?:A?@o29SNG@A`?GY@?%2M⥠MSX)a` b`S .`?'yπH?`TvРQLH]ug{a[$c ?5w@91`BMG?`;}?E~ c Wl\WC@_ `%m?E2?X?FQF @# 4?OIh WVQF cb Y`TOFXlS=@DvР?%2?5ZKSX)? 4?Oi?Em/2Eڨ?Kk@?e?_ZB=@H13n`??DZ?N?F`?- /?RCe@?Ml@?QQ?Ve ?F= />?2ש?Cu?>@?Hݧ?5(@ $`?8ݧ?Cb ?Oi?@P_ `bjb NE~ CWH?G ?Hl?@#?G ?O@?N`>LHDOF2W?3u?`M@?ay ?Hz ?F?D٩ /=XC`7*?yπ?N /`?LWC?=@?8g @D@;}?#&Q_d%R`Fۨ`NQ> X+WY@1`?7yπPߍ f2a4@?6=@? /?Gܨ?Vۨ`?23Q4 5(?G A8 ?4٩ ? WD`472 RCe@\9`YX%2?CZAo@B ?V=@?`M@?LW`2ש3?R%?a?Y6?@3n`QV*>@?R`?Um?@9@?.?Ih ?Q?T1?Lk?>@?4=jG*?4;??`>.`?B ?Hl?4;?A8 ?H?Gܨ?H1?1[?+.`?Mj?R ?P- ?C:`=@?9{?N@?*A'yπ?D3@?O?1s1[?Eڨ?S:`DvРSNG@?Il ?Qy ?)TD?Bש?WALH?@\?Eڨ2?7RE?4@ /?>m?2`D?.`?]9`?a?Q8 ?=XC`?OV ?NYC?6`?M ?H1ݧW>6Pr@M ?!LH?%mB3%ml O`=XC`? _ `D@4;?2a I@TڠEڨO2JUD?@7?CP`R[B[@?LH2?`BnI`TEd`Eڨ?CZ?A6=@<%Z?' ?:"שGREHz BMG?-XC`?A8 A[>@?T<?[B@?D?29?N`?Vn`?D? /?P|?P#7l?Vn`?R~?;VD ?04;k@Cu?Ml@?Z#@?-jA`"9?ZBC?0?-j?E~ ?T3@?YTD?F? _ `07+?3u?8?a?c0?V)@?R`?Nj ?@?l 4`Z?DvР?C&#?Y?Y N[B@`ۨ`o@?OiK.`?Hz ?D٩ D٩ ?%Z?Cb ?LH?CZ?Bn&ۨ`?M ?c?_i?Ji `?H?Lj$@N?A ?7l>?.@?D3@@\0472 #Cb Y@U N`FY?Gyπ?P_ `D@L !LH?=0?U@?I, ?25PFTƠ_V S  - /BQ4 GE2Pr@:@?%PFC:`UJߦ?.E~ ?8ݧ:i `1o@?M?U?JUD+.`UwL~̀?IX?TEd`?I@?S?b>t?^.@Q8 ?Em?T<? W?(g @?E$c E~ ?@WZA?Q?an? 4RǀEw@2 ?)1`?F`5Z?Fۨ`?L@?`<`B9?.@P>V?![?5w@91`?7Y@?P ?0_ `@_ `;?"9?Ih ?N@?=j?1o@?P?L`Ew@D?= /?2?A ?]& ??i<@?L ?UP ? ?NE~ 4E2Q?@?J@`3?EPF?N1@'*Ra E(Kj 7l?>@??2?B%?H .`E'*?$`BnS VW;FQF ?P#?J1MR`FQF <@?A` ?K`?52?IX?H?`VGchb[@A8 ?&%2;0LkXݧQ2`A֪@K0k?BMG?$c DvР2`?LW`?S?6`MjZ|`B?R?X@?Qy ?Y?ePF?cP?A ;0?J|`?R3?#? /GRE?![W;Tl@?U?`c?2Eڨ8??P- ?Z`?Hg @,@3&= ?V ?TD?H?Y ?Xg @Fm@aR3HT? /?<`?(l #(?@?W`?P@?29?OF}?I@?Q?X?Fۨ`?Fۨ`?Y?Em>W?EPF6Rǀ?E?W ـTDT1`2`_Btр= /Yh M?LC~?W*?D@?`P N8?yπ?V @KH`?0c A`,k?2PU*C:`>W6e T㋠O@?;.`?)TDT<Z7@U@Mj;}Em?EPF6V`Wf D"`(g @?8g @?Rtр?E<CTY)`TOFVY@P>@#)1`?L ?^v`?V`?D' ?L ?Z|`?] ?O2?Btр?W4`?X+?C?@r@?>E~ ?6=@?Nj ?? /QBeB[@?Qi`?M?`?8g @?GY@?72 ?@r@?Wl?\M`?Ph?"ש+.`?k?H?Tڠ?`& ?bMG?EZL`=0 /Kk@O9TD?$`?Bש?=@NE~ 1[?Rש?DnI{*A?Wf ?] ?\Ma@?]l@?LC~*ߦ4@;0A[@oN@+}?^'?a?E<8Qi`N?91`?ݧWT1TnUwePFkz ^m?6?V)@?^m?\ ?Bn.@?2 ?2a ?52?W`?[: ?Py?NE~ ?P?RQ@?WY@?8?`SI1`?*ߦ%Z@?VQF ?a3?I, F ?Qo@?Qi`?KB@?S?SX)??ZBLH?:ߦ?Y, ?W?,@?- /=XC`RMD~W?E( WU<K?@ >.`UڨM ?C&?N?HX?RCe@?Dc S b>t[WRTc Mj?E?aV*?[VD ?D@?A4 ?4@?Eڨ?Tl@?L~̀?Q` ?U ?DvР?2? .`?6?J?R?4QV*TCNG@>9TD>@VGcW "ש?(g @CuN1@@#@4\ Zߦ*A?;}B WvD@?.E~ G*Qy ?Lj?^m?3&I@%m?7yπ?3NG@?- /?`'yπ?6`?WD3@HSE`?ۨ`?A[G`a Xݧ? k?D;?Ed `?7Y@? /KB@A 4;2<@2?S?Zi `?R%?PKH`?JA?D?Q ?B%QW>Fۨ`4٩ ?1o@?[`?e?UZBnDOFyπ<@?< ?bHV`?`?07F`@7?;VD ?GY@$@'*?G2 ?-jQsUw@BMG?,k>N /`Kk@? .`P SAs%Z/?,k?<M `\TƠ9TD5m?1$@?W ?Y{?8g @@KH`2>Hz @?8?2?%PF?7l?2?)1`?K`N@)l ?Sb ?P!LH29?$@?W?/2?4@,@=@?Ew@ l MWTD?N?H?`5(TZPߍ .`?:A?,@@oJ@Qi`Q7*?ۨ`QdƠe ]@O /BA$@4@?0?527*Gf ,k?F?Wo?S?@4I, T3@UmRQ@QBeKB@DvР-j?<`?6=@?C?Q?P_ `?S:`?Bn-XC`?EPF?V 07_8X l ?Gܨ?MXC`?R9?LC~?? /?Iާ ?l W 0?c?an?C?=?;}WA O /?#?]:?OUaVOLH?A8 3ZMW9{? @= /'yπ?5>ݧW-W?;W?<@?3?@ժ?3&?Mj?[j ?U`?0_ `D3@E<B Ml@CZ4;RnT٩ )TD? _ `?0 ?N`ߍ QQ?LW`?N`=@????(, A[?R3?K3n`?D' ?6e )TD%Z>6ۨ`C?1s?K5mT B"9@ GܨV2dԷi, dAY;Btр+9@.`?9@? ?2GlF23?6e ?Dn?4Ao@V`XS?2?29?/2?>?YTD?U@%2D(g @?A4 ?Wl?L@A?.`?V?)l ``a8 1o@?B[@1$@J18??V ?S?@`\QLH?X1?U2?8?`?R/`?T<?#&I@Jk?=0?Zߦ?CuXXcةZ:?-j?OF}6e TEd`A?9@?F2?:A?@#?Qs?C5Z??GY@?Hz ?H?=@J1.?LC~?RQ@?On?>.`*ߦLH?A`?&R3Hl?FQF ?+.`As?- /\9`Q֪@?m?Yh ?TvР?R%?c?b`?0ժO2K.`>W?U ?SX)1s8ݧ?Dc ??2KY艠N /`1[EڨKj 7Y@ۨ`=@O`d{] ?-W?.@>@?/?I{?>m?7yπ?< ?8?`?l 0?2M0Ed `?HSE`?Ji `LW`R%?%2?GRE?B?$c @?@_ `?A1s@ ALHBE~ @ [Wv?K?T<?V< ?P?2ש W?3? k<`?J?Z#@8g @W?%ZJP 7REVn`O?/`?&=@QY6Nj ? /Z RCe@U`)l ? I, MD~?V Ew@N`E(`?@?MD~?G ?23?5Z?= /?yπ%Z)TDA$@A8 ?C&?U`?yπVxIX?;?$`Cn`H?`O2Rj:?9{?>@?@ժ???ZB?R?0 ?^;?e_ ?UPF?:?Z??L0 ?T?@KH`W?3&?R?U`? l UVxL >.`?FQF ?-W+}7lQL@?@KH`?@r@BMGE )TD?3n`?R?WO@?@Qi`Su?(?S?X?^M?[?(g @VX! R`@ ?Q`?QQRtрUFd?L0 .@S=@<`:V U `?/`?Kk@G XSE`?FY#uI, L ?T?Fm@VGc\WC@ժ>=@1$@B9>@?23?P@?B32a D;@42a 5(Ml@U<Ph?P7?Fm@FO@ۨ`?ۨ`@?07>B%PF?< ?8?< ?<`?yπ?( ] a??T1?OF}?TY)`?RW* ???O?YN?V`?K?7 ?M?_V ?Q֪@MW[0T 52?A4 ?FQF ?Rש?_?Y?S=@?\W`?T@*@LC~KA֪@?72 ?P7??`?D@?Yq@?T<?N@?Kj 3D3@?Sة?ZߦWJ-:ߦ1o@?$@?@r@???>@/2Ih ?1[?MD~#u?2?H?`?YJb?V=@?Vm@?U2 >@cZbܛ X1JA?23?.E~ KB@ _ `?S&?(g @KG`KWV3SDd?5(?RnBn[j ? W?R/`?5PF>?=@?*A?L~̀?_n^E~ 1s)XL~̀@KH`?LH"ש72 (g @4@N`Il ?8ݧ?8?`MN /`o@=@?o@?#H+R`?V (.`?:AWHz 6ۨ`?&=@LH?%PF??<`?[}` 7*-XC`I@?$`?G?I{?]⥠?aB?Y ?T`??i3?0 ?Ew@? 4`Gf M =j?;.`?_w?h0?bj?Z:?\Ma@?J?`K}R%U2 GyπTD?1LH?Jߦ?Q8 ?;0c ?3Z>Sx`A֪@?U2?Dc RtрI1`?1LH?>@?=XC`?!LH?`?C?:A?)l ?S?X?`?6=@l ?@?? /%PFW?72 G`^S:@;W?$c ??Hݧ?Hl?A֪@?5(7yπT`TEd`F=@?/2?H?`D@[.`D`> k?Btр?&P|C5PFZ]WIl T㋠`& A`?Fe ?]XC`R9, I{, ?T3@?>Sk= /?Ao@5mI, BMGS VEm@KH`&?CZ"9U@Q֪@Ed `J|`A`LH? .`?DZ?Q֪@?>?F?ZA?5mW>Rj?V ?@ ?c`?`?>E~ ?J1?PAo@R)X?I@?P`?:@6ۨ`B?`?[`&?cB ?U`?F?LWC?c A֪@8ݧN /`U F6e ?l ?U@?U - /HCu[I`?,kQy _LBa ?:?0_ `+O /I`?(?+?3NG@?Ve ?X]'?C?7 ?"שNZߦH?`?@4?20_ `?9TD?D@?yπ?!LH?(g @?#&?8k?0?Qs?6ۨ`K`G>@_ `Sb Q QA$@?I?'*XvNj ?+F[`VZ-_I?-WL0 `#U@HQ`?LC~N`cӸ@P`U%PF?Su?Q`?B?J@?Cة?@?"``6e +L D@?%PF?"93NG@<PU*Qs, ZFPhK.`?,k?V ?HXCBtр?#&$`OV S0S  V RENmR`AsG>V>m?*@ZcuBAo@[k@52?Q`?&#&?;0??2?K`?P\' TڠOZB;0?I`?]?Y6?F?C&?ALH?DvР?T1?Jߦ.`?4;?6?= /? WU`Q?` .`F=@M Pr@Ve Um%PF?"`M 4?Z@?Ph1s?1o@?A[?R%?D@ ?4`?KVD ?Fe ?Ao@?BMG?Cة?MW?T ?P?;W?1[?2 ? W? ?9@<C&U `F?K0?J|`4@S Z:H?Nj ?Xl?HTD`?5Zyπ.@?23?&, 2ש"9?4@H+PժT' Ba ? = YUFd? WDnL/TD?Nm?Q`?Ba ?-W4;A`? .`?"`Cn`P PJ@2a 5Fm@%Z>LHKBMG?,@L`T@?A ?GyπH1;0?4` 4W?Dc ?K?NYC?@ 2`8g @W?.`??F?I1`7 CuP@Dnk??`?[?[k@?!o@6e ?1LH?"ש;E(@oWNUP H+?4@?S?X ?B%FYQV*TEd`O@@D@;.`3n`?!LH?L/LHEd `Ra >?M /2S  PyEPFEmFALH?*ߦ?A@J@?*@?LH>@?5?D`)TD?`<@,k?BMG?#UڨL/?Ew@?1o@+.`?>0_ `W72 ?Eڨ .`B%?ZBA֪@@r@Bש>@?LH? k?:ߦ?Cn`?/8?`P J@4@B[@Iާ K`SNG@Gyπ?@_ `?X+?a?WO@6MW?)1`?Hl?![8g @?3n`?' ?>E~ ?=0.?8g @?VQF ?6/?P- ?@X;`Uڨ0 HMXC`??Hݧ?E(>?0 ?4>?TD..E~ ?07?Gl?IX?D?On?X! ?T`? RQ@C?Nj ?>mP_ `OnEڨI1`;k@BnK},@TD:i `>LH? CZ'*?S&?U?;WDnY`Xl>m W?&=@Y艠_wCb k%PF?(W??K?04G >=@?*ߦX1YTD?1`?A yπ?< "``a=t`M 1`.`0_ `D٩ RMG_@`KH`DvР?,@? W? ?8?@o?;VD ?LH?2`?L?Bש`:i `Fm@?&?[?ao@?S$`P`K4;4;A4 4`?;0?J|`?D@?LW`?Q`Cu?<?P\?HX?O?<P\E?Jk?1$@O`/`?As?ۨ`?91`?RCe@?NYC?Q?TZ?1["ש?E?BMG??1LH l Btр? ?@7&$@?JUD?X@?L0 ? .`?S=@?j@?j:?>b@_(`?(>Q.?FY;k@S=@Ra 8?MD~?F`MWSX) WS 5m?Gܨ?`M 7RE0WW\( EڨEw@@4Dc Z|`_V X1P+l Oi8ݧ?M.@]0B?P ?WSuJ-%PF`?yπ1LHVn``R]DOF?7yπ1sTS  W4`\9:@?I`?J@;.`??i?Rǀ?XIb?_V ?b[@?]W?P?5(?G ?`?`wÀ?;.`LWCE?!o@>ݧWD٩ FQF ;0ۨ`?=0?B ?ALH?KW?XP?N1@?Q`>WBMGS:`N?FY?O<@DOF?2.@@,k?)l ?S0?Y`?Btр?%PF?A`@#?*ߦ?8?`>?W? =@?/`?O?Yq@?GJ>W?e#ˀ?g ?>@YPߍ ?;k@'yπPr@?I{?`|?3ZTl@K0?Cu?]W?SH+Tl@? T@RMG?OV XSE`CZW4`G*Z`ߍ S=@PhVP@Q`On?29?2`Tc X R[@ZkVn`?Bn?a?Y =TƠ7*?)X:ߦLWCGOV W C&?9@L^t #u?H?`@\5(?N /`?4c KDvР?'yπ?KB@?U2?V?U ?T٩ ?Q` ?M?R?Y?\눀?X! ?KVD ?1s?2a ?Cة??i?:A?FY?- /CNG@&?7yπ?+.`?Mj?R%M /W ـ?GY@?N1@L R9PKH`W2 6?Gl)TDPߍ D' 2a 7REB[@:@?C:`?Q4 ?B9?? /?>@D@TY)`CNG@&Z9@I{;VD ?`ݧW?4c ?+RW* Q}@?G ?T?;W?yπ?@ ?P- ?-W9@?Wܨ?hX6?U(B9+.`?K?U2 ?Gܨ4;B[@?!o@8P>As?ZBI@F`<`?*@``2`_@23FQF T1>LH?8?`?$@?L ?B I, Zuc a  ??Y?V`?F2:Ml@W?8D3@R1o@?@? /0ժ?`SP[`?Gܨ?\j/`M?@ժ?ITDW+}?6e ?D' ?8?4c ?FQF ?Bn?C&?Zr?aj`?TOF?IX?Xp?X?:i `63Z?4٩ ?PU*?;Kj H$`, ?L ?_(`?0 PKH`?2ש?6L/' ?8B`'yπ?Ph?72 MO4LH;Bש?-j?I@?@4?Dn?Il ?B%HSE`M /DZ8ݧF=@E2Gf X;`R/`?)1`LHHlA` 04?ۨ`?=j?4`?@#?Ba ?%Z?R~?a ?F2Pr@G>2?+.`?=0?;}>W8g @?`A` >2`I@Qi`?&?? /Lj3u?PRA$@Y1`>?E?9TD??+?N /`?8g @?8?A֪@@_ `TxM 7 :Um]9`G`?@7?Vx?b3?_d%?3NG@9TD.E~ ;k@HLkJBtр3u##>N`SRMG:?M0?U' U2 !o@?PAf?ZG TD?`I@OF}Nm[B@aZ`SIާ ,k?'*?Cn`?Kj ?)l Ao@Em9TD?9@?NE~ ?91`?@?KW?V)@?Uw?U@?T ?R9?Eڨ? .`>W?>?9X>Pr@/2?Rn?`@?a?V=@?L?Q}@?D3@ k?+?@?X5?b`?C&UڨX=WJAKVD ?@?@Z?@B R%CNG@5?Ph?U?CQQB?ALHD3@1s"9?CNG@?Q? /@4B[@GY@6=@@4Rx= /?ۨ`3&1s<`*@?R?Q' 9X= Btр0 I@Q}@? .`? k?Sn`?R=1`-XC`?H?E<%Z9l =@1sQ8 O2>W?Ba ?' Gf Sn`B ?@4?L@?=?#u?C?PAf?29@45(&=@A4 :?4c OSL @?K0?S&?Pr@?@ LH/`?l ?M?Wŀ?AsF=@3u?9, ?(g @?2`?H?On?Q}@?Kk@?8>W;0HݧNj P k?Rש?X?XX?V?E2?-Wk?K.`?G`7*?0?S  ?-WNR`B?9TD?4;1`? ?DOF?H+?M?Dn?;VD ?D;?+.`J-U<J?Cة?X]'?kRǀ3u?)TD=@<@YNj ?Y6?W2 6ۨ`IUڨWo4;2?-j?K05Q[>W(TƠF?2???@4?@7?7yπ8XlW>?U?Y?Fۨ` k?:A?L ?J|`?S?Y?U<?M0?2ש-j?7RE?Qi`?A$@![?.?L ?Fx3&Iާ ??Q`?N?Bש?8?&=@?;?U?bW* ?_ />I??ZB?P\?3? ?$c ?,k?G*?F?1$@04Tl@VY9@? ?B%?HX, @KH`?- /ۨ`Ed `:?`?:A:]Y@JJ@Ba I@N?@#?SX)?2?A ?UZ(?G>LH?TD?.LHJkTڠ< ?Kj ?CةDZ!o@?WY@?K0N@WoUQ`N`PU*RR`?L (IX?+}?&?![GY@"`?] ?LC~U@\@`2`W9TDFQF - /?LC~ FY?06`V3Sb Sb JA? 4?Z2a <R/`X@LC~?/?S0?KVD ?W?Gf ?Sn`?D' ?B ?O`?H?@?=@:A?Fx?`?T㋠/`=XC`?<`?Po?4Bש>.`?F2ݧW3&?;0?Jk?Rx?`U*?e `?Yv7yπBtр?N?U?Dc ?1o@?3?P7?<0 4٩ P`Q?.?Bש?LHGf `([o@ W? /?,@?D;?E~ O /[X?`YX @4DnR=?<?UFd?@ժ?V`?a` ?%mWܨS0KH:A=jL0 ?Sk??i=j0 1`?E<?^퇠?BnSXW4`@o+.`\ [B@`2 ?8? .`0_ `>mV)@OF}WH?`S=@?7Y@JSkP@?(?9{@?$`?T٩ ?B[@0 >?= /?E?"9Bn?5PF?Wܨ?DvРFQ`Ew@?3u?Bn W?0ժ?I@W9@?I@?U@?Rtр?Xl?^퇠?Rn0 Ji `8?`6`I@QO2?3u?Uw?29C@:@M6=@*ߦI, Wl^D@?N?6e 8?;.`?Pr@?F=@4`? k'*<@?A֪@Q?4?K}?;0?^?bn VxG>ALHDvР%2?`)TD72 ?$@?6e ?8g @?=?T' ?[j ?A8 5m?Q?^퇠Df)@]uA$@??2?VY?>@S=@\0 T?3n`?ZKb ?M.JR[@7*/`(b9F`@+7l;W?3NG@?1$@E2ݧW?Ed `@\Q @_ `0$@CةPo?)l ?N@$@?,@?] ?W ـ?2`?6?F`?GRE?5Zl ???K0#&@ժ)l @r@8ݧW7Y@?$`?Q֪@?8 4?J1?O`?3Z?5?F`?Ed `? /L/XXZA^YCcx`a}@72 ?Rש?DvР' .`8?`SuT IX7RE4@?Qi`?Y@?5Z;VD ?"ש?L ?R?;W3NG@?4?T ?WY@?Kk@G`T㋠=@?)X?E~ ?TOF?Q84`?2ש?"9?3NG@?As?1[,@I@@#?F`?/`:ߦݧW?Q?V< ?`U*?e-?Tl@7yπ?A4 ?\`?= J/`?@ݧW?2ۨ`Rn[U _ `?KB@?G?(g @>@QGf CYJb^ /`Iާ ?9X?@ F`UPF@ 7lFx?1LH?K?$@3n`JAA֪@CةN?52?Rc ݧW?\~̀?^?O2?E<?07?LH?>@?O?Y, ?Vۨ`?6?B[@?Y^'`?JAAo@RǀU<LH?VQF ?Bn<@=@EPF@78$c ?9X?#&8,@Btр\WC`J1?J|`?Tl@?= 4٩ ;0=0B=@?EPF?G?G`?R?K?%Z>yπ?"ש?EmV`Iާ ?MD~?ZUD?;.`Yާ ]0CNG@3u=@?6e 5w@7 ?I`?Eڨ?6=@?U<?V< ?>m!LHRWv?+?%mO@Btр?D@?9{?@ ?Vx?FFxH2a W?E?RQ@?8G>L@Cة=07Y@:i `>@4@??07?*A?`N1@PU*QMXC`?23?K.`>W*RCe@P\G ?6,kPyRtрQ$@K.`?)X?5PFQ֪@Q?DZ?S ?GRE?;}? ?P|?Y ?]b%?\?N1@?M?[k@?PRDnX?`RQ@?Ba ?_`?Ji `E<Hg @P|R/`@7B3B ?Cة?S?Py?T' ?J;Lk4?Cb ?Pժ>P#?NV?L`?Pr@?Ra ?8=@? >W?=0?C;}Eڨ?*A?`D٩ @7?k?3&I@b\jE2A8 %PFEZ?)X?W`?A8 ?3Z?]l@?^ /`?S ?Ve ?Z[8I@7 U`N!LHED@![DJAK`[U ?B?S?Q` ULj7l4@HXTPPU*LH?E~ W`H5(OZBFe )l E JFH1-XC`o@QQ[}QV*6e .E~ DOFJ@29?2a (R3MW?:?JX ?>m?D;?N@?Rש?VGc?O@?D٩ ?Lj?Em?3?9, CZB?R[@?_8?O*ߦ;}ITDH??=@@?C?Em?![?;}?B3?2ש?Fx?Rx?Ml@?%PFTEd`]=j?;k@?,k?K0?Qy =@Ao@5(>LH?On?KWEPFGRE?= /?QV*?Z?YTD?5Z9{LWGyπ>1$@? .`?%2A֪@?&?G*3n`#u?R=?Qs?Y?jd@?cIV;.`Oi72 M0F`34٩ ?23$`WyπBtр?(X@_<@'yπ??`0NQBe>)XKB@X;`[M0?)TD?&5 M `P@LHDOFIާ D`C&,kBMG0?2W4`[8Rש`?F`?)X6`LHyπ4` k?B?Q4 ?M /?5m?M⥠?]t?Y@?O?DvР?5w@?5?Btр?DvР?6`o@?#&?Ed `?@ժ?;k@?GRE?8l ?Z?"ש?E~ ?<`?>E~ ?3?, @\Q3?;0?Eڨ?Xv?a?W? .`WO@_P` TEd`X! \9)l ?I@W91`4c `?P_ `?Jߦ:i `@?Gl?S ?e?f$ ?Ao@?V .@'*?8g @?Cb ?)l ?Fe ?I{1sA CQ;}?&ۨ`9@?@?f`?e^?<@JX WBa HSE`I1`+?Rtр??V Rǀ&?M⥠I, X]'2`?5PF?$@3>m?7l?Gyπ$@KR`O2=JX S?B3WoPy:5w@?/`?@ ?&ۨ`?7*D@9@FQF EZ?&ۨ`?72 ?1$@??ZB?(g @? _ `?5w@5CNG@?0?IX?JX ?7lTD?Lj?_P` ?R~?J1?_?_@?E?>?S?Sb ?G>?Nj ?R?3u3NG@ kLH3NG@?:ߦ?5ZW1o@3NG@4@<@W?E?E2?c ?04?K0?O?E(6SR VUZ( W??ZByπZ6@ ?@?DE~ ?1`?9TD?-XC`?ZA?_s.`L~̀$c ?5(?<@,k?L0 ?Um?A`(JkJUD?;.`?A`KPU*?Z?>m4`Tڠ >E~ Q.[V3?"9?=@Kk@>=@?C5(*ߦ?E?Hz ?@ "9Eڨ>W?C?0ժ kG X]'UZ(RRtрB%5w@Dc BשI@I1`?=j?S?B 6J9{?&=@#&?(g @?VY?R3LHALH-W?MXC`?YX?A`=02 ?$@ _ `6?Lj?[?Dn?M /?hp?g?:A>E~ ?29?=W?;W?N`?N?+}??A4 ?Jߦ?Cة?0ժ7 NE~ WoWHc@J1?`?LC~?Ml@QS=@I>?P- ?I@63NG@?A ?Kk@?Hl?2a ?k?E?6=@?!LH?`"ש?1s? 4C .`?;09l Hl"9?:i `?RS?`?Il ?K?@_ `C=?V?Zi `TDRa Q4 GREB9P>? l ?23=XC`\ ]b%D' DZT D3@, (?H?`?Sb ?=*ߦI{RI{;}4+I@XSK}R`VGcUZ(LWC@KH`Qy W;4٩ ?Gf ?29Hz RCe@8?7yπ?l ?`?D3@?04F2P|@o?H?[$?PKH`-XC`C?ۨ`?Iާ ?)TD>?9l ?IX%Z?.E~ ?[0?Qo@EڨR3MK W?Tڠ?Um?= ?#&?Ao@?TP?\WC?PKH`,@B9EW ^`Sb = 9X<@?A`*@?Z?4`?S&?W2 ?;VD ?0 ?P#?M /?4;??>m?VY?V3>WG @oW?E ?Cb B`UK0?+.`?+?8ݧTDP@MD~@ G?=XC`F=@A$@?Y@?]0?- /8??@??`??&?P#?@7KCb ?E?&R=M⥠B=?ۨ`?(:@I{D@)1`?ۨ`>>ݧWCP R`U<Xz ZuXSE`P7I{SkS=@4?2 @EZEd `2a !o@4c 7l8?`CuFDvРG F`!LH?%PF@\L?ALH?\ ?A`H+7 1$@A kP@Sn`Kk@N@L ?A`?b ?c+?K07*?ZB?&=@?Kj ?:4@?4٩ ?HEڨ\Ma@R`SX)_2M⥠?DvР?Hz ?K?Uw@?RMG?T?]D~?Vm@?Iާ ?4@;}2`??2?Cu?M?Tn?+.`PyC?9TD?I1`?El R[@I@?F)@?N1@?o@.@8ݧ5PF?/`B`U*Q?4٩ &ۨ`?"ש?Z|`?RW* ;}1LH?N`?UZ??`/2Kk@?2ש?=0@?%Z?\W`?RCe@5(6=@3n`N`TOF};k@' ?ۨ`?CZ?F?G>?P7?Cة52SNG@aBebܛ UZ6e ?TD?.`:D' ?=@?Ao@? .`HSE`A`?A֪@?Lk?=@@_ `91`8@#:@6e GSةGf ?7Y@%2Su??V[(?1LH? /?$c ?.@?Dc ?U(?(g @Q Fm@@KH`P|J?;k@?`|?c?Q$`,@@Sb WREE ?O?Ud `H]tA` >mU?6?_V ?5mKB@?-W?H?H+?U@?[B@?W;?Ew@0_ `?4;?S ?8?`5w@?0 ?ۨ`9TD?>@?KB@6Dn?4;?C?I, ?Wv?KWA4 NMDOF#uSX)cZR[@?72 ?3&?Lj?[?D;H6?N@?Q`9TDW\0 O'yπHA[?G>?Bnۨ`>E~ U@ZKb Nm?E~ ?Dc ORCe@Btр?Eڨ?Iާ .@YTDfb ̠m?Eڨ?JUD?>m?As?T1?Q4 Q֪@>m?W?`й?F=@:i `;VD 44c ? /GFALH?:ߦ?\C~?MWPKH`A`?=XC`+.`?=@?Q֪@?M0?Uw?aGV?Jk+}?:i `LHSkSDdKB@?`?Rtр?ITD?=j?SZ?9, [$^@4?D`?@SX)\~̀?W?MW?4c ?X@?`U*D@a Hݧ?"`.`>.`?F2?Xg @?U ? W2?B.`OiEw@"9?Hz ?a)?Uw@X@_(`??i?]W?Y?Su?'*O2LkI, T1Xg @]:W ?- /6?8ݧ?Rש?=1LH?"ש?R?T@?.`MT1W\( DvРMl@P 9, <@ @]ubW* bMG_2K&=@;}U `/Q> ?W7*Ed `? _ `?CZ?P`?YTD?Ud `?B[@?o@?U<?Zߦ??21$@6`@;0A8 P P4Dc ?2?WO@?PKH`>@' ?88g @%m?5ZA `?SZ?1o@8?`?KW?B`EPFD3@K}N?%PF?9{?2 ?Ud `?PA 2?WCZU@O?>E~ ?X?>@F2?Gyπ?7Y@LH?`?ITD?S=@?G ?4@EX+RnRx>?&=@>mC&3NG@C0ժ?@&>6Vm@RjE[B@c[`EHXS D`7 T`V`Cة6?![?K?Q?Rj?Hz ?5Z?Bש?7RE1s?c ?04?C07A`MPyF2?,k?;??C?NE~ ?-jE2`M@SDd?P? kY1`=XC`&I{?W?B , ??4;%2?4@?D`?;0?Rש?RMG 4?4c ?SX)? 5?Pr@?]?T' ?&>m?/2?G`?5(? _ `?!LH?E ?`@?ZkH]b%< ?Gl?.LWCM0?72 ?S?8ݧGY@? ?U@_d%S @o8?`?ALH?@ %PF"ש?NV?ZA?Fe  /?9l ?G2 ?$@A$@K.`;>ݧW!LH kXZ-Ud `Vw@?IX@ժG>?l ?o@?A8 ?Fe yπ?1$@?9{Gl2ש?D@R%h;``P9?(g @C:`IQ.U JG TvРM⥠7yπ-j#u1o@?$c +Jߦ`?2שHg @P> ?6`?k)1`?G>?O?D@?G`?I@?9TD?B`?7*P#"`?cIV?S^@\ÀTƠ^V9X?S?1`1LH?)TD l ??Cn`?E?Q?Pժ?3n`?JUD?UPF%2Q`?- /?Tn?FY@7Dc ?0 ???9TD?L ?LC~?E?V`?Uw?k??PU*?S  ?B[@?-XC`9@CNG@Kj Gl??ZB?Wyπ [W:?QLH?4c 2`?5PF?A` $c I`= ?)l < yπ?$c =@;.`HSE`A` !o@ _ `fS0/`N@ 4?;WP@MW.`:i `?$`?J-? W?5(?BKB@H?B E~ ?72 >.`RMGQJVXg @@?=XC`?B[@?:?P?a`?bCe@?Vx?B% l 4٩ ?Eڨ?[j ?K.`?E?dƠ?b7 E 52X@M?J?3u91`?)1`?, ?6ۨ`?Oi?Hz ?B%?Q`?U `?QQ??iA8 JA@r@BtрBE~ ?DOF?S&?H?9l ?MXC`?Fm@?1s?9TD>?@7?M?)1`??Nj ?Hg @EmT3@E 72 ?TD?HSE`yπP>?I`o@E(0 WC&Ud `R%6e BT٩ R`? /??2ש?- /?:@?P4?X?`?Woc l ?P>E~ :@?"שEw@1$@ VGyπ?ITD?$`?;k@04٩ ?J?:A[?9l ?R ?2/`?Cn`?4A8 G E?9TD?SBMG` G>?1s?l ?B9?= /Kk@ZKb XY6\tUm4@24٩ ?Fe ?b?dՀ?[?JX 1LHSNG@;k@?T㋠?Pr@)TD?L/?``?SDd?P@?W ?!o@E?1[?A`?>?H+?1[??M /?Q?P4?[s?^M?MD~TD?9, @r@aGV\/?7Y@?_2?_?@ G2 2?5PF?>@?O?HX3n`&ۨ`?72 *@>?X! ?T Fm@P7?2`?@ ?=@LH@OB[@CةT@RMG@r@@.E~ H?`WKF2=@? ?c @>?I{?W?YXC:`?Pժ?Q}@P@J|`?2>?:A?' Wf K?GRE$c M /?0?Gyπ?9@?>.`Nj 6e ?2T V.`?2E<KOV ?1o@?\a&@?7*Q?"9?D@$`?3n`?J1#uQ.N1@L]jaBeH++.`K`?LH?Y`?W?L`?M?5w@KN /`?+}? 4SkD`?Qo@?NYC?7Y@?O?D@A`<?5Z?Lj?Ph?2`-j?@KH`?Xl?` ?_?P .E~ I@`?P ?7Y@XXݧ?#u?UPF?Q4 >E~ ^9T3@?0_ `?QQ?]j?W (3n`?Nj ?O?I1`?X?Pߍ DOFG ?72 ?A ?&=@#CuB95w@IXP@; .`? ?=07RE?4?.E~ ?8?`?A[>F=@RN>E~ ?2GRE?Dc ?Y`??V ZkMW??BMG&As?=W?H?-XC`?=@?%Z/RW* O2?=@&ۨ`PKH`5m?6ۨ`+.`= >?5w@?D?GY@?5Z?8ݧ?V3?ax?Xl>WP_ `SPHg @?>@?Q?3NG@=7*?ۨ`?<%mR B`?:ߦ?l E~ .`Jߦ@ժ?QLH?Wf ?J?B3?Ao@5PFZ?+.`?yπ91`=@>W9l ?E~ ?MXC`?AsLH#u72 ?ZB?@\$c ?4;?8?'*' 9, 2@Qa$@?>@?Zi `?5ZTvР3?G*? l @r@>@9@![?`)1`BtрA`;DvР@KH`5(7l?D@?U(5PFSDd*A6A` V)@b98ݧ?@Ba RjTJk?4c ?6`:??Q?DRxV`?>?<`W`U `0 K`H?EPF?QV*?Ra ?Z#@?Tc ?423Cn`A @#Gl7Y@?:i `?Ew@?J|`?K0?>@?N?`Z ?]:?F`?? /?Q?S ?Eڨ?0@? /%m?J-?N1@>GY@8?Fe ?J?@?@ժ?PGY@cS8`mHP ?!o@?Q?91`= /&?A$@?9XDnP78)TD$@?ݧWHX?i$c &=@&=@>@`?U?[s?5PFUwU(2?``7T<?!o@"9?yπ?Tn?WY@?\눀?fۨ`?bB?Nj ?E~ , %PF:?I@?W`?Wf ?M?Vm@?fQF ?em?R`yπ?)1`?Um?`P9?`KH`?]:?M+}k?B`?07Bש ?Nj ?@\>ݧWF)@Eڨ'yπS b\`8?Y6?@ G*A4 =W-W=@HlU`L~̀?2?Fm@ XpGRE?B(Ml@Ba E1s?J1?Eڨ?&l ?R`9XP?7*?B%043uTc a8 Ao@?(g @Ud `Y`Pr@\`/G ?2a Cn`a_P` ?8g @?`?5?S)TDW2 J?(g @?Q?WHc@?KVD ?=@8GREQ.PKH`@?U@?Y`?52ALHLH?Iާ ?X?_F}?LWCI, KB@?%2?@7?W3u*ߦ? k4٩ HJUZ^@W;.?MW?Rǀ?D3@? 44`ݧW?[B@?`_ `>?`?V?b}?X ?KW?P- ?Su?P>?Nm?B%N`cz@b NV?.?ITD?GY@?5PF>$c \a&@ci.@?Uw@?8g @3ZZ?ۨ`1[WY, ;.`?A?G- /G ?Fe ?Ud `1sKW-XC`2?A ?LW`?P- ?L@ R3KB@?Hz ?M?7*?2שOaV*Oi4@UP XpQ`[8`C@T;?2?6`HXYvSX)+.`?-jI, ^O`YJbPߍ =W?@#WM?2 ?I1`M⥠U ? ?NE~ ?Ao@?$c ??2?R[@?T٩ ?DOF>@G?BMG?W?C91`)TD???L ?OZB?LC~?!LHQ` T19l 3NG@L@B9?>?9@Bn9l ?:*@SNm#u?:A?C?I{Sb '*?[?[k@?W? .`?VQF ?YN?On?Cu?;.`?@7?P ?Vm@?B`UmbB[B@A` ?(?5Z?'*?-j?;.`?<O@P>?0ժ?J?6`?3NG@?7RE?$@?"`8SP@ l ?LC~?Q?1o@?)l ?Zr?Z0A?D`?E 9X?Hݧ?Gf LC~?ZB?Gܨ?U@?;.`? .`?JUD?>J@TPU U2OnNj TX;`XITD?E~ @R`_wWY@>@HOV ?o@??ZB?A8 ?NV![T<%Z?As8ݧA֪@?52?L~̀?A >?=?Tl@?Um?Lj9@SDd?07?RW* 9, P>?0_ `?Oi?F`?;0???0_ `C&Iާ 1o@KB@\Ma@G*?Gܨ?LHIh ?E?`(?OF}?0 ?R9?N@;Kj @\As3u?K.`?Zi `?JUD ?72 ?GܨBשEd `K.`Dc ?6?SNG@?Dc K`Sb ?=@?SX)?S  ?.E~ =W?@?PR?RCe@?F?:?1o@?,@?,k?0_ `?"ש?E~ ?HSE`?U<?M⥠?' :H+??JߦLHCu?? /?Mj?2 ?F`?O`?o@QQs3n`BMGI, ?Dc ?b3?`#LHJߦ?6`?TP?C:`N1@Z`PoL V[(On@ R=WHc@H?)TD?E2 .`E9l MXC`T㋠`?Hz ?O2?Py.E~ T/`?K?Hz ? W9{?6ۨ`?O2?5w@?$c ?>@?@r@?D@Bשaѹ MXC`?Eڨ:ߦOF}?LH?@7l?"ש?K.`?@ ALH<?B%?2Gf ?D٩ ?]W?C:` l ?YJb?`@?1o@D`RǀU<Q֪@&=@?F`?C3Q.B9?Gyπ?V< ?PKH`D@?O?Qy ?P?Q?F`?c ?4c ?8ݧJ-T<?9{?_?`@?Wv ZkHX?K}@Y{Q4 ? .`?;W?3&?@?S0?O@*ߦB[@:ASBa ?H1?bR8?`ժ?B`;LH?Kk@?O`B%1`P_ `_N?.`?Cn`?ZUD?UZ8g @Q;k@@ UZKW?J?U?3ZBMGA ?A$@?F)@?4;?.` I{I@?6`?P@?+}OQ`@?Ao@? :;}"9?%m?!o@%PF?@4?>E~ ?3u?Pr@?RD@\jH+?@o?TP?\À?Ao@QV*?[.`?B[@VGcVw@-W?>m?6?:@?T٩ ?[$?P@?>E~ >Pr@?E2?I?Gl?J@?< 4;= ?LH?07?52?2a M`S  @7K0A`'*?2a ?X@?S.`?,k?6ۨ`QV*XB?*ߦ?yπF)@<`?Cb ?Kj ?C&? 40 ?:?E'* W?;}?B ?X;`?S LC~Sx` ?k?#&2a P- ?&?^@?`@?M0!o@!LH?2`?@?O?Hl l ?(g @?DvР?As?3n`3ZLH?`Ba :i `?7l?D٩ AsZ|`Sx`?c ?Kj ?D`?;}?Nj ?T3@?:A֪@As?)TD?B%?"``?#uPWyπE?>E~ ?JA?&=@CGRE6`'  /?DOF?UPF?Hz 4KEZ?D;?_ZB?V2?72 ?R`?\0 ?)1`WܨSة`??ZB?0 ?(g @?Fx?R3?Rn?HݧWE2?Hݧ?L`EQy LH?=@R~\눀RCe@2a >=@GyπUO2P\XN@7* ?Ed `>T - /?N@2RQ@R9D7 A[=@?P@?PU*?G2 ?NE~ ?OZB?K?C?6`?:?/2?;0?X?Tn,k5Z.`CKOCu?Q֪@?`?P?"9?<?Gܨ?.@:@*@LHG @?.@>@OZB?!LH?<`4`-jZA[23?+.`6=@Sx`TxE(W?%PF?07?DZ?R9?SZ?3LC~5?X1?_P` ?G2 @KH`Ra VSDd@?A֪@?Uw@?TZ?I@?5(2@7MFx??Cn`?/2A`4`?T;?`r@?QV*?;.`?M?ITDH`r@Ud `?<@?SDd?GRE>W23?"`?LC~?Hl? WE~ ?9@?'*ZrX 1sA`Y@\9P9X8g @8g @mNCZ?"`?S?N1@DZJk?B?TOF?@r@?Z?Fۨ`?F=@>.`?Dn?P7P@bKW?A ??i?0 W$`?>?Jk?:A,@OVn`J|`?=@?2`(5?Gf ?T >3u?V?b?TP _ `ITD7yπ?9X?B`?B3?N`?U2 ?W;?W?Q?3u5mAsL V V< Pr@? ?V?Rש5w@J-' ?#uBtр\ TZ?JX ?^?S#P:?DvР?C?,@?*ߦCn`N]XC`B?D@WE<8g @!LHW1o@k?2.`?0ժ?Tl@?Qi`)l @#,@? ?LWC?ALHD@>@?2ש?2?Z?W?G2 ?X;`?FS  N`?Kj ?Kk@>=@?T ?` 3NG@_@2a ?Oi?07?2?F?Ih ?=j/P D3@?Cة?G`6ۨ`@?G2 ?Wf ?S?Po?-WX`M@A֪@?On?R`?5Z3?:?V?P>?7*?=@J@Uw? /?D' ?PKH`?0Nm?V ?F`?LHOn6?HSE`?W\( ?W4`?B?< ?X]'?\눀?F`0 7*? l ?JA?U?PR?JX ?K.`A8 c5 ai`Kj 0 `5O /RtрK1LH%ZPRJ@?P ?]N`?M /7lL~̀?Fۨ`?,@?24?2O?)1`?J|`?1s?BMG?Il ?#u8?`@7?;VD 5PFQ$@Ew@? 4A` ?;?Pժ?9TDZ0l ?K`?N@+}*ߦ?J?J0?A`?V?:ߦY6U2 ?H?Q[?"ש?I1`?U(O`?;0?M?,k?TEd`?P@ W<`'*?8?I@>VOZk3n`?UPF?] /?;}X@]9`A֪@?Cة?R?M@E?.@?Mj?@\?$`0?A?B%2?W?l ?F?Cة&=@A֪@MjD@?0 ?`;.`![?0 ?:,kQ[1s?P_ `?Hݧ?:ߦ?Btр?5w@?7l?CNG@? /?@\?DZ/2???U2 ?Fۨ`L MW?DvР?O _ `>@@ .`?-j?Lj?@@7LH?Wyπ?Z?E?$@?'yπ?7Y@?A[WP\U@4?Su?b?DvРXpI, ?N@?Q`?Cb ?%m8ݧ4?&?'*?Cu?[u@?R J1Jk?:ߦ?7yπ?;0?O@TڠRǀK.`=0<W>V)@=WY gf X/`XXa.@ ?"שO2XݧXݧU2 56=@T٩ 4c ?Q8 T㋠<@?P- ?Py0_ `Q[P7?i?M ?`(?R~?2?04?P#?I{BשKF?c ?![c ?23?&=@'yπJX C? .`F=@P4*A>.`?0?Kk@?K?Kk@??2HA` ?G?;?, ?U<?X?I@?Nm?Py?$`?ZB=A I>m?1[?*ߦFxEPF??i?E(A[TEd`K)X?.?= /?2ש=@?:?\~̀?cIV?[B@?Bn=KVD 5PF52<@3n`?M⥠?aGV?P#"`?Q[?^;?Q?E?3Z?yπ?FY?D`0ժ?Ao@?a[?U`D3@@\?&=@?DvР%ZJUDR=j?@?M?T`/`MXC`?#u72 \jUwJi `_^v`?7yπ?KVD Ud `|Vx3?'yπGlFe ?A?B07-j?5(? 4MWTxHg @:A?+?Dc 'yπFe 7 , ?![UFd[k@XALH5Z?6ۨ`?S?M?@QbHV`S?/2B M⥠,kDnB?1[.`?Z?K?(5m? /@oLWC?FQF ?W?Fm@?Q8 ?]j?EQQR@ժL~̀VOnHz QLH91`?O /?HݧFxU@KB@, #&82 ?`?MD~?Z?Z`?Iާ B[@U KVD 8ݧ1`$c LH?KB@?X@?<`?9@?`ߍ ?^@?I1`?RCe@?J?-W?Lj?7lS:`A8 ?NE~ ?=W8ݧ"ש5ZJUDyπ?- /L@O /W?'*?J1?V?4٩ ?T٩ ?P AJBtрRǀSP?(g @X+a֠S08g @?0?D; 4;?D3@?HSE`:@SL0 L/\`Z|`;}5L`JHz B3&9l ?,@7yπMl@U?- /?@4?TZ?Z#@?F`P@` U<G \jS >Qo@Y@F)@V\M` W?Ji `?6@T' `wÀQ >@P1`?XN?QV*P`QLH?A?E<;GܨHg @LC~?&?Xz ?O /A` P#A`? ?%mGܨVTOFKj )X?B3?Rש?T?@r@2ש, ?c ?<@?K?Ph?Zi `?Y@>?2a ?aBe?T;@?J|`?JX =@?%mCZ\Cة?I{?B9?6?2a >E~ 5m?Rtр?Su;VD Iާ 3&:?-XC`?N /`?LH2`?<`/`XIbT8, EڨAo@?29Kj :?.`?`)1`5?;k@?V[(?A` Vۨ`^@ժ?,kHݧQ?&=@?6Cb A`?>m?Oi?5w@@4? _ `?W2 ?Z`?QV*?"ש?L/?G2 ?Nj ?I@3NG@9@$@G*I, W2 g#`]/2TvРX@(TPi, _?+}?H&VaGVZ7@Sk\U`?Lk?Xp>Q8 ?O`?`?Q? k1[07?:i `?I`?@7*.@ 4?@?Lj7*Z:U@9, ?;.`?Kj ?N /`?Qi`?P- ?Dn?@ ?E?U`?`@?Y?V`?S&?5w@?`Af?PKH`;k@?D3@?Qs?,k1LHR/`R?K?a=t`?Y@?Q`?Ew@?+.`?B`?R=?? /@ 8ݧ5mCZ?;.`?Ra ? *ߦ>WR3_O`?"9?- /CJUD?Ba ?R`(g @L W?&=@JX U?E~ ?Xz ?;WVn`R3?FQF ?^m?RQ@?%2??i?K?yπ'yπ?N?Zu?`ZUDE?Wyπ?^퇠?S ?=W?9, 7 7l)1`Cu6?V @7EmXQ}@>mU@Q?8?`A$@hSE`i L ?A4 +}UZ(UZ(;W?6=@1LHQ?7Y@?]?;.`RMG??X! ?M /72 A[?"`?8A$@Rǀ1o@?9X>ݧW?< ?Q[? G` _ `?D3@?Q[?Qi`?1s,@?`?3u?%m%2?8?Tx??DvР?`:i `?yπ?TP?L@?k?Q?Y艠?FY3ZQsD٩ ?OF}?Z@?T@?Lj?Eڨ?Nm?R9?TDP- 7yπ?H?(ALH?A` ?QBe?,k?D?S  0Q*@?= ?$`M Wf `?H?`NaGVFe ?Hg @/`\/L0 ?I@?A8 7*$c ?C:`?Vw@?Wv?6=@)TD?=W?3n`G2 ;W?;WHSE`c?sRQ@?P?Pr@%ZD?`/9TD2ש;W:AE<S Dn?@r@?H?= *@L`Gf 3uFQF ^O`cP ?528?`S=@Ko@?K0?ANj A`?U(?O /I1`MXC`=@7lW Tڠ?4٩ ?I`A`P?$c ?@oTD?2 ?Cb /0?<@?)X?"ש?@>DZFm@CEw@TSDd?%m?E~ TY)`Qs3&52%Z>?GRE?Q?A8 >ݧW296ۨ`@?#&?E(?B?Po?Rj6=@P4?>@?Vx? WG ?5PF?B[@?Fۨ`?Sb 6`Vۨ`Q> D3@*AF]Vw@= /S `~`PU*??`>WX Uڨ?W?A`?7*?.@-XC`?BE?>E~ ?U`?'*L`Dc JU `2?Pժ?CZ>@JX ?M0?L ?(g @BMGLkO@K?K`?P@?3n`7RE?LH?%PFOV S=@D@OiDZ?7lc Ew@BשN /`J?iQ`Kk@?=XC`?B38OP@R]Xl?2a ?R?:A?<`?R%?DvР?04?N1@?7Y@Qo@Fۨ`?&ۨ`91`8?C?Lk?<BnW`OV EJX ?C:`?Y;?A`?0_ `?JA?HݧG Cu91`=@?7yπ?LC~?RCe@?BEd `Q k?D`?8?I@?R?7*?E~ ?Ih ?0 NE~ :ߦ?PKH`?P_ `?7Y@?8g @&=@U@^c%`b an?V ?5HPyTD?,k>LHLH(E<Tl@P>=@?@?B ?CZ?=@%m?4c ?)l 07?H1?ci?b?A$@ALHTD?;k@?4 l 4c (T3@?4c ?V?P_ `*@Q> P?LH?M??V 0_ `GyπG ?ALH?LW`MSn`#uFxG2 ?D?G2 ?>@?BשCNG@Z-Q`?D3@?ALH _ `5CQ`R`WREUFd? l ?Gܨ???S?Y?D;?IX?_@?OV P4M?:i `?Po?P4?HlF`aQ9@JA?Ji `??`?Q?a?Y?Q.?X! ?NYC?'*?%m91`? k?G>?RCe@?Q?Bש k2`@2a @7?)l ?M?P?Qo@?=WSx`Sn`?M?as?[u@?T3@?9XP@Lk&UPFc!@C&?Pߍ ?K?M?V2?W ?[`&?Uw@(RW* Jk04?o@?&ۨ`?5w@?DvР?BMG?@? /)TD- /?TY)`?e7`?W ـ-j?C&?Y;?@[.`ZX G`>LHasV=@?K0?_F}?Ra :U `? /?@r@yπ? /l (g @?+}?5w@PT' D`W`P#?N`?PR?Hݧ?W2 ?Fۨ`F3NG@=@?!o@?J1?Fe W>H+_P` Cn`?RCe@?Bש?5?O?A`?)l ?Fۨ`?GRE?EZ?Hg @?6?4c ?O /?Q[?2a Hz Pr@04?1s6=@Tl@SA$@???V ?7lYXIh ?Z?_?Rj?RW* Xg @>?`5(A`Kj mQBe= /*ߦJk=09, I@? W?@ ۨ`yπ8g @X]'O@?F?PAf?A`?>?`?@ժ?81`LH!o@P#?i?9{LH1s&=@JߦQsCNG@91`/5ZD٩ ? k?U@?U?@VZߦ1[?M?6`B3@@Q?V ?K.`?=@[On?C?5(?/2?L ?0_ `<>?=@0ժ?Dc ?Il Bn>E~ ?L`?>@72 ?Hl@2`;} ?Bn?@4?C&?Btр?`E<WRn[87Y@HݧUwZ|`? /?I`5w@YJ-?6e ?HX?K`?T@?Wv?LHRx:A3ZRQ@OPVxl ?Q`?G ?@O`S ?%PF=@3u?C&?J?.E~ ?#?04?(?3&?:@>?;0>=@E~ 7 UPFY{JX 4`A4 UPFY>E~ ?OZB?UFd?F27REH?.E~ ?T' ?Hݧ?.?/2EڨJA04P- ]l@O2Ao@R~' ?PRPr@'yπ?4@ *ߦ%m*A5T@Y1`Fx?o@ 40 ?A` ?F= /Q`K0LFe *ߦ2ש?%PF?X?Z:?88ݧ@oA4 >mR^@D٩ ?U?W?DOF?@;/`?'@?Dc?Q/ր?Eg`?F?P>AC`?8?7 27 W=dW `9'@LEg`BH#O+P@E@@WGb@ZI?J?N;?5g`TYc7Ѡ[uE@LGZaՠfC@gt`auUg`S[aS?8!/րU`-?J@:g@E@?AԠ?7@.O?K?\ɺ?E`PSؠR Ԁ>?S`[/`K ?1AԠ?7?`]؀?a`?N ?C_@?T; ?N@Gƀ_[Y`ee5&?X?4̀L!/ր?=`?AԠ?X?D̀???G ?߳ D͠?M?Kϼ>?DwΠ?Q?:?> @?E{ ?L[QuT͠?X#?b>P ?1`?Q@?D`1???I?NO??6/ʀ?:??O?> >.`5g`J{ ??`5?c?YÀ?S?BoӀ87ŠGOg@E2oӀUˀ^ǵAՠOL@, 9T beӠcZXc_@bԀFk?G3?V`?V`?C =_ R Y`cd`c cd|ΠZ? TE [ ?[u?HOg@?@?\@?J˿`?A@ ?S_@/߳ ?K?7G4@'?7PSؠKW?'oǀ?MK`?:?=`??W@?SKр?3 ?P?_??R?(_@?@ B@WƠ`DF`?W@?W`?@?"?AԠ?Fʠ?-_ $O@J?N`?4O?L `?B4O?3_@3R ? ?MMPנ?Y'@?]. BoӀ?0 @Sؠ@?D`?P`?U??S>T1@@@?P+?JE+:,o`U T ?O?[?7oǀ>?A?;1`Iw€4̀?!3Ѐ??P?0?E@ ?=VhAŀjY@B`Pg`JS1W . ??0#3 >wZ gk>@jb) H/?7@?Z˿`?X3 ?WG?gƀ?]U@FɀCKр?Uˀ?U ?0@3]}d@=?T@?Pg`?G `?#VM@b`_R??S?P @(Ā @?Eg`@Ms?37Ѡ?U ?<?_@?IO?F ?%%Qa X6Ƞ?7G+ϼ??N;??& ?7oǀ"@0@AW ??@ -W K?P`?CP]؀?,o`?[ X_@=2GC?=?H#8_@A?w?D@?E? ? ???&?L@?V`?->?A;/`PJ߿ `Dd??KW?G `?HĠ>W) Z!TwΠW`QW A`UI̠a@bb ԀR[?CKр?Nw?E?RԀ?M???.O?Vɠ?d?_߳ B`Y à ?Fɀ?2@a ^`?P?a?Nw?3_@?.`?OR@(Ā?FʠC#[aP]؀???;ϼD'`ZTFC@K >`?>ǵ?68Ā4'`?#Ѐ?H7Š?Q`?E@?6`?9w€0g`SKр=׸?R?@`QԠ?$O?]?,o`[aXi L ?9O?`@?S#=׸??E`?9O?/?߳ BҠ?AC`?C??߳  )`?@?;@"oӀ>OR ԀP+?2 ?=׸G3R@<@?߿ BҠS_@7?DO?!/ր?AC`PIP??6`?P@?L `G`S}R@ZT` ??_@G@SAрR Ԁ@ A@QJ߿ A/?B`?Q@>M737Ѡ?4@?DO??B@#?^?[M ,o`?g@8RP`@נPX`SK AC`?7G?O? @G`?-?QԠ8beӠ^` ?I`? KEˠ?2?C_@?߳ ? ?7 ?6Ƞ?4̀?B Ԁ?T`?W ?D͠?#Ѐ?%?$@:?QԠ_GG?@?4OQ@E`>?Z ?fȠ?L `P@>?;@JNcMø@Zq@O?/??1?*߿ ?_ (Ā?.`?C?K?3LC?CЀ?Y'@_S`I?*?A^`\T΀Qu?2`J{ *߿ ?P@?S7ѠLGY1@^ѵ @?M?$O>KS`??N'@2Z TEW3a\ TπH@?+?;C`HĀ?7 ?M#?FC@?>'@?:?P+?VM@?BҠ?-?E  SO 4@?6`?6W $@87ŠB )`?B ?KC@?#0??G?W ?:N E{ ???@{@KX ?Z˿`?]K`?S?RG?J߿ >?Hs?>`???F?BBDwΠ_ ,o`??5g`E`נaV%ʠN@Pg`9O?3?8?YÀ?dE ?>w?'oǀ?P?߳ E@@g`+ϼ6?L XsVuG>???CЀ?Pg`?1W $O??g@?SAр?RҠ?=׸?!?E`?Fʠ @?7 ?#@SؠT1@W@;ϼ?Fʠ?<?#?I; ?@Dc???X?C#Hs>?0?F (Ā?D@?'oǀ?4O?M#?߿ O߳ N۵CH#H#>?:g@@?BG?Y1@?5BG?O?U>@?@?S?_5? S-J{ ? ??G ?@J?!?Wƀ?X?K/`?0g`?=7?Vɠ?W@?I; ?FC@??TπP?7?M?Jg@?Cs ?߿ +/`JSA`?B? @\ c2Ѡ[[^ Iw€P VȠ6AV/ʀ.`?AH#N'@?2@?1Ԡ?(_@?Tπ?S%A?5g`?P+?Nǵ?A?9'@?AԠ?C?O?\ `?X??V`^۵M?'?XAŀ?ZS?1Ԡ?'oǀ?N`?M?@?(?4̀?BҠ8U+2??g@A/րO߳ 9O7 9O0@OS`R@߿ W@6?_?M`N`?F ?&/ʀ?J߿ ?Y'@?G@?9`?Q?O?8_@?, ?7`?<?4'`?1?2`??B?RҠ?U@?8_@Q\@)O?HD@X_@K?@Sؠ?Zտ@?R`>?BoӀ?^`?cP`?\3?7oǀ߿ ?F?P @?DwΠ?D; ? P! I ?=?I`?:?3Ѐ??;;??=_ ?RҀ?O˳@< P@1/ր>ǵ\ V`?7 ?B`2:DwΠR) C`-_ KE@???K/`?@+JQB EˠO߳ G3 ?%@??E ?]?a4ր?LGP[ 4?CKр&?/?]U@?Tπ???JS?QW 8_@P{@1?H?MJ_-?P@+D̀?@?K?Hs?J>'@?C?< S@??XU@?I E?߿ ?H?-????Nǵ?9O?.O?=_ ?. -_ #_@?D'`?P??B` ?3? ?D̀3?F ?G ?A?7 Q`bYHP`RoӀK?:?\=?^`?P?C?4wΠ?8?H?C?$O2 (Ā?%?HI; ?'oǀ;WA/?:g@;/`??-_ ?6W ?@ ?#Ѐ>?B Ԁ?-QՠS7Ѡ?&?K?KRҀU @TONcCKр#?@5w3?(߿ 1/ր?9`?5ˠHNw?/߳ ?Y?]`?5 WȀJ?P5?O?*??C7Ѡ?3???0g`P]؀Goǀ?R3 ?R`(&?@?5=`UR Ԁ?D?P`O ^@>'@?Q9ր?Xi ?Qk?)`?#?K@?G3?*??11ԠVȠS???C?7oǀ3 ) 4@@?@?5g`?'oǀ??6?Tm?[ϼ?9 C?A`?RҀ?߳ @?H#?RҀ?Og@?(_@???E@?M`?C#=;ϼ?G3?Qu?Dc?8Ā. U5Y`R) BҠ"oӀE afcM?:g@?>ǵ>???C .O9`?5?@S Q ?@`?@{@4#_@-`2oӀ>?'oǀ?E?Uq@?O?M7?Y?EH? ?TE ?E`?, ?H#?U@?RҠG?1W 2 KM7;?W[Ǡ?Tπ??4̀?D'`??J+I`@D̀HK`9w€+/`O{R?:?P5AQM@+ϼ=7Pg`JSQ \e^YY`BoӀ?J?Pg`?Fʠ?G <aՀWƠ?A?K G@H_@? ?LӺ?P`?T?X?C3Ѐ#Ѐ&;@?_ ??߳ 1J+_@?H7Š?I; ?>w-T`WN;PנXY@X#R3 7 ?>?CKр?T΀?P(??=?E?>?8Ā?C#?1<B Ԁ(_@3Ѐ?HUˀ>'@?S`?J@߳ ?GG?N@@>?D; ?9`?) ?C ?T`?VȠ?A#?%@?B Ԁ?#RҠ\[5?P?N;?1W ?6?P`?Y ?T6WHĀ?߳ ?5!Pq`Nǵ7oǀ???F`?Va?Y?L 9OP`;ϼ?;?D ?KP`L@9`?5???*HĠW@>?1/ր#?0g`?J@?IÀ4wΠHK`?5@?J?$̀?'@7`QNǵ ?H?S`?T; ?AC`5 ???K ?Z{ ?R) =]_E{ ?4@P f \ ?@?'@2G?_ >R3 ZSS}QԠXĀaՠcd@N`?L@?B@IRҀG@???0@IOE@?Kk?E D`GG< /?!;Nǵ?@@?`! ?WQ?J?QC`?5?J+???]U@?[u?9w€0????2@?V/ʀ?]s?VM@?E@?%< P`F/ʀ?-`?K@?W@?Z?L[?A?N ?Dπ ?"oӀ>_ ???1/ր.OJ ?O+?%?RP`?@?Q9ր?[/`?VȠ?8&?@@?WȀ?R) ?;?2oӀ5 Nw;W,'?R@4'`?@`?Ak5???37Ѡ?1?J?Y1@?M7CJ?7`?FB ԀVuL@<@8Ā$O??.O?1W ?/??S?WȀ?@ QbԀS?#_@J@^`Fɀ?FW ?4̀3 ?_@?"ScFр_!U @Zb@cL?L ?P?:߿ KIÀ0@J?߳ ?S_@?Q??6`?Ms?PSؠ?X?P`?+?O ?]?\?a@?`@??U2`?S ?P@?$@ ?0@?D?I ?ReӠ?Wƀ?P?*߿ 8_@P5Q??0 ?Dc?M0נ@{@?8&U@FW ?-6/ʀJg@?0נ?RҠ???.`? ?2 ?Eg`Q@?߳ ?37Ѡ?B@?YO?6?XĀ?G $@?;/`?XAŀ?XK`??SN'@?;ϼ?IOE?Z?Q/րI RҠQk>O?1?0נI`TE Ic6W ?'>SРUq@A@KI?=_ ?9w€U@b`W[Ǡ6`H ]XH_@Ry`\ `P ?:߿ ?P`?IÀ?TwΠ?QW Q`׀NOD; 9 ?J+?F??K?U @?T΀?[?Ss ? 6`<@?N ?T Ϡ6Dc?;?;ϼ3 NǵU`G@?4@?=?>O?L ?@נ4'`IQu:߿ ?G??SU`1?B[;W;@?H7Š?1`KW1/ր?4̀D̀J??Pq`?]-?0 NcJP! UP]؀??*??1W ?ReӠ?Z?L `4̀B[FR7?I'@??KC@?A/ր??5@?C?_??W?Fʠ?) AQ`4wΠ?QՀ?LBQA@AԠZX?3E@XWC(S-_߳ `a Uq@;/`U?U@Q#Ѐ?DIhĀlbҀF`=76`>Eg`T΀3?K?=?_@?Wƀ?^ǵ4U?? ??6`_ ? 0נ@g`?6/ʀ?;/`?@;/`F/ʀ3 T`g`A?)O8_@?;W?PSؠ4@TπV@]ø@SAр?@(_@J˿`?1W :g@?߳ F 3?@P`W?C_@?]?KW?A?S?K@?7`?E+?;@=׸?Z?Ym 5?R3 HRҀZ P???@g`BE@IC7ѠH#X7Š??4wΠG TY(_@?2oӀ6`C  ?Qՠ?Vʠ?J{ 5?Z]`a`S@?4'`?:@FAԠQ9ր]`׀O+?G3?M`8Ā]dπXĀ0@D'`SQՀZ+\G@DcYZK ?#Ѐ?8 NOaR@^ T`KBGF@??߳ &/ʀ 0g`R) Q@?@ ?W[Ǡ?I`?G ?R ?'oǀFȠ?߳ E@CKр?%C`JUˠM?: ?O_@?6`?B?8 T`Weǀ>w/߳ ?(Ā?@׀J@a`_Q9w€!&>?[ټJ{ ?` @?fk?X?H@?3. ?8? ?3_@?(_@?I?&J;W?3Ѐ0נQ9րIO?+?C(NcP{@Qk9w€?DOg@'oǀ>RW `Dc?'@?GG?>wTwΠ/?Fk?<@N۵b ԀbeӠT΀37Ѡ':4@ SX Qa $̀?=׸?#AU5au[`1`0נF/ʀ? ?#ЀLM#J+VC@Qu4@15ˠ-`@?@&LGX ``Z8?I`?N@ XĀ`@W3BҠ>?M?]#?S@DwΠT@g`0 0 ?*??7`?C ?L >AC`?:?JS?< ?A?3Ѐ?9w€?@S O?:g@?P׀?Ms?'P[UI̠?g@>' ??Hs?&RoӀ? ?a>`?Z?;W?$̀CЀYW`N`A/?6W G[ǠQQ'oǀ?Cs ?A?߳ _@?? 8(?<@#_@?D?-`>O?? BoӀ@`8 ?9O?_?]A`XI ?BoӀVaU@EG `QW I?? @$@>B3 R`D; ?߳ BTO<9w€Q#?G )OC7Ѡ ?2@[]37Ѡ?)O>wHKC@W`[9`@{@?Ak?F 7 ZWG=7>wC7Ѡ???Y?U]̀?1W ?;?C:?@?X ?e@?Y(_@2?CЀ?H_@?"?4?E`?Pנ?3_@%??. ?D͠?(_@FC@E@?!?A?L?Nw??F/ʀ?E+-_ ?Iw€?V`:g@S P @\ `]M7?>ǵLC_@=`8?(_@?Qa ?T'`?)`@0?+?߳ ?L@?O?2`?BoӀ?@B@L@VȠ]F?O{???KW(_@?1ԠM׸IO?5@@7???G ?5M7fd@87Š&X@X_@I PIU @Iw€/'@'oǀBG7oǀ?. -_ ?87Š?Fɀ?Q@?W?Qk?O{?T?6RN@?HK`?]?Qk:A?Ak?P?:3-?E?Xi ?U!?3#?6?53_@? ??H_@?=7?C7Ѡ?Ss ?%?M׸#?0נ?!?P??;`@`@??Q?G33 SC7Ѡ?8_@?'oǀ?8?R@?J˿`??, ?W?W BoӀX?C#_ ?6Ƞ?@?@#-_ ?F`?E?? ?(M_ M? @? ?]i?U`DwΠC?P?1[M ^YR3 E@HK`R`M7F/ʀV \y@QW LGUD͠?I'@?2oӀNǵ?1?YÀ?P@0? 0נ?0?>C_@QR) ?;?2oӀO QELGI $̀FW A`?(?2 #G3Nw @??>?D̀.`?L[?@g`RReӠ??(AԠP @B?;W?VC@?[ټ?R=?"oӀ?>O?G ?߳ %??F?Tc?E+?4̀?M`K@?ǵ?9w€5g`X-Š ?[?6Z+U 8_@?"@?'@FC@P ?C#?@@?=?$̀1=7@Sؠ8_@?_ ?B[?)OL T@Iw€@g`C_@LP@!?J??2oӀ1/ր7W `NؠG 9 ? ?I; ??N`PIDwΠ,?L ?`נ?Z?@G`C :߿ 5? ?C ?L3?&/ʀ(_@#MQ 0@S_@BҠ?0 ?8_@?:Eg`Ym ??Og@?@?) ?S?T̀?Wy`?Vu?:?0@?L ?C_@߿ +/`?*??5 > DO?=`@a0?L3??TcD͠?P+?H_@B[J{ Cs 0@?5@?(_@?6?H#?Fʠ?K/`?Tπ?G3>?6W ?KC@?DwΠ+ϼMMsQQ?L?f?W `FC@F/ʀJ{ _g@QW ?Eˠ?*?\a`I ?BG?DO37Ѡ;W?F?RG?(_@E+9?&7G?4̀?R@?V?N'@Aՠ]͸ `X؀[M K@?0?A?Ak?P ?L?;?(ĀK@aa [?P׀?Y?Z?M?1/ր?->@g`?K ?>O4wΠ:KUC?3?. =S@Q2G>'@A?7`?_ Q/րH7Š???;@?E@? >`?@נ?ES̀Iw€K ?_ ?:?Ic?DBҠO COS_@Lo`D@7@?? ?TeˀdOT`BoӀG@Kk?3?W ?H_@"oӀ?=7?K?4>.`9?@?N;?;W.`?7 ?Lo`?MRA?M_ ?G3?SЀ?`נ?+/`W) PHsUg`[T΀??K8Z+N`?1Ԡ?<@?!/ր?(Ā?2@!/րLM7?:g@?V?Ak2oӀ?)O?G?Og@?O?"TwΠQ Mø@F ?IO?_ ?U ?B@?5ˠ?>'@?N?F@נ=`?V`?c`?[9`?Lo`?O+?W`?\=?Q?<-?5 L@_ >'@?KϼU [RQBM#Dπ?L@?Q6/ʀI8?@?G?Aՠ($̀C7Ѡ(_@AԠ2G D̀GƀL[VȠ*)`LE*QUN`H_@HFȠ:?J+?\ ?P?@g`?QՀ?P{@HK`I; 1?G1/րL 8D̀@ ?C ?7GKϼ߿ ?Y@?OFȠF8 T1@W[ǠO߳ YE^`P >O?3?Y ?RҠ?HĀ/?&/ʀ?) ?@+ ?HN;C?J߿ ?^?L@3) 2oӀ?"?߳ F?E??P =`4wΠ?W=?W?"1W ?1W ?P5?R@?G`?TO?d@?a?_ J(_@?Nǵ?YE?L?"@?E?M7?0?C?N`F Zg@?KC`[@P?? @?#_@HH?C`?Tπ?Aՠ6/ʀNcE{ ?;?E{ 1/ր???T@?G BGD`>?<?G S_@0??[?X0נE ?5??>O"@?"@?G@?Aՠ?.O -`?B`?V?RҀ?K ?HĀ?'=JJ?2`?AW >?B R`Y'@?J@?XĠ?@? ?QM@?%Zg@``]7[R@N'@_ճ@aW H#??2 ?T`?N`<@=?!??8Ā?> .O>OCЀV%ʠP??2 ?2 ߿ QM@M#NcSi ?9O?Ym *W `? ?L? ?C`?J@?5@?@?I'@?U@?$OS7ѠW) W@P3CC7Ѡ?O߳ ?\?RQ?T'`?U?E@ SAрVa??X?UI̠?) ?߳ <@?2G?P׀?) [Z˿`??G`?߿ ?-`?HK`?Q?9OIO˳@@?S?\ݺ`?I; %?M?e ?dh?G[Ǡ>?O?T΀?=׸?(?.O?_@?9?D?C?O{?P?Fʠ?M#?F, AՠG@MsEˠGoǀKϼ?-?LC_@F ?TO?R3 A3 ?E`?*K RQC`T`TπOUZ R`H4?;ϼ?R@1`?N'@?GG?&/ʀ6`J˿`=9OZq@a/րT'`G3(?I?8M׸G[Ǡ;U K?K?0נSU`C? ?8;/`?0נ?7`:Si Q9րFH_@4wΠ!/րWeǀ`TOTE N۵?J?W3?I?R`?[k?Q? KU?M` ?K@?WƠ?P@?37GRy`A?Q?2@bҀa??7oǀL@QW 7?4@E{ PQ2oӀ?Q?Y?Nǵ?AC`?Kϼ?WQ?WƠ?9O6?DO?Y; ?QM@>QW U`"oӀ?P@?YY?\@?E`4O?E??S??KkRoӀQC` 9 9`G `A??'?R`?X=_ ^ѵES̀?J@?K?@@?Aՠ?@1P{@@+?1?PXM?@)`P 2G?H ?8 C#RҠS@?#Ѐ>< CKрCKр4@?9 UK?(Ā.`:?I?L-5CL@@Sؠ? @?$̀L XKC@?:?Y'@?T̀;ϼL 6Ƞ??R) ?J{ ??Q@?aM@?`Nؠ?HU!^ǵ8?I; ?LG?E?_@!:?&?I߿ `X؀W`?-`1\XĀ3_@ CO+NO??9O%???&/ʀ,I; OHC ?M#?C@HB@J{ R@WT΀,o`?CЀ?Mø@?U{ ?T΀?G `?<@?3 ?0@?1??? ?W`?ZS?Ic?0g`?O ?Z??=7SP5>1W NwE@?&?Cs ? Jg@F???CKр?Fʠ?.OD̀JS(_@2oӀPנH7Š?!?C`K XXU@5ˠ:XĀQW 1FF6J?H?+ϼ?GG?E ?N ?X_@?U?D?N`?Y`?IO?) ?P@?RoӀ?0g`?8_@?P @?>ǵDc@ ?E?@ 0??M#?\Ӻ?3_@_ ?T?Q`?!?2@?+ϼ?9w€????0@?+/`?2G?P?Uq@?#_@H#?1ԠF`LӺ?@??Z?Q@6I`!/ր?H#H"?D'`?Y@?\ɺ?R=?T`?[@?Nc?Dc?R`?>ǵB3 B@{@?:?^c?KN?,o`?\Q?Q/ր?9'@?E`?G`?6W ??2oӀ0נ0 ?@??S?N`?%?? ?DOW3P{@?g@OS`W[ǠQՠ6?#_@?@4@CKC@Iw€>?B ԀA`v@au]-]}Gƀ?O{?J<RҠ` b@S#N@[9`L `? 51/ր?< ?1Ԡ@< N@?Z??\G?Eˠ?F/ʀ?R Ԁ?_@C ?=?Q@?2G/?BGW=Ss "oӀ!/ր5ˠ?J{ ?P @@A@?H߳ `b؀Y`??C?=`?:g@5?Pq`2@?/???SKр?GG;@2 >`V@MK`?Fk?M׸D@^;S߿ :g@VʠU@??;@?M?H@?M?Y?T?%@?-_ ?;WFW NO???Pg`?CKрH0@?K@?O??K?E?3 ,o`I`5g`:P! D̀?7?DwΠ<QkA@S_@U`Pg`Goǀ@׀@`5ˠ?6/ʀ?N`?L@?4wΠB@V9`Q&/ʀCc@k\g. `E+?OS`?QM@?3+/`SЀ^`R`NwZ5Q9ր@3C0@?#_@?B`?F/ʀ&R IÀ?>`?O??I`?Ms?A@>`4̀?Nw?RG?F>`5g`KWRҀJ?g@??M?;@MK>C7Ѡ`IX?6W ?K/`?$̀?M]3?Qՠ:R=?Fk?W3?66/ʀ@+@Sؠ?>`?-`HĀRҠ$@?F?30g`:?@נE@LGG@?;/`?V?L ?3?AO+?S?DO??A@?Cs $̀5ˠ?@{@?L?;3ЀFJ ?+/`J{ R@,?Jg@?@LӺ5??!=7P{@Pg`w?P! ?L@D`_{]]ø@aYc/?E@R[A@?:?P׀?Q?9w€C#Q9րJ+?< ?Z?Qa ?D?X?FC@=_ Fk(?BҠD@G K@L `0נ?O˳@?M׸3AW G Qՠ?C?_??_@S ?5?Ym ?OS`?0@?B Ԁ?P ?;@;@?F ?I ?H_@?0?1/ր?1/ր?B@9 XU@\ݺ`P??7?N ?P??]?`נ?F-?@`?O{?;/`?6?Kk?E??"oӀ?%??9?9ODcC#? ??:g@?M#?;ϼR=N`?Kk?HCЀC+ϼ>ǵHĠP{@P`?B Ԁ?9`@׀5ˠ?*߿ ?%??M׸?V?#Ѐ8 ?=?J?=`?4O?P5?Vɀ:߿ b@S?D?N@?2 Qՠ^ǵD; ?B[) R ԀJ+>?/߳ !/ր?=?` ?aW ?KC@?3_@?. 00g`?A?M_ ?:g@?%?H?3OS`S"?F?E@?5 ?Z?[WCs T̀?B`?H#FȠKERҀRҠRYET`1?9O?%@HĠW WȀUW`V@XĠZI??Nc?>'@ES̀;/`AkMN ?$@B3 ?AW ?R Ԁ2`U@J?-_ ?G ?7?;WM7Dπ E@6?H@נaVC@A/ր ??SAр?O߳ FPIC+?Og@?U?65 F`PMI`O?B?P??a?=W??Z?C:??@>4@;@?D`?O3QC`Fʠ?2?S`?;/`RGT͠U`ZM@H7Š0נ=7Tc?g@?> ?3?D̀?J@CWƠ>ǵ?)`CP@(?!/րD`B`%E@9?G[Ǡ?:߿ !?C?F*߿ 1W ?0 ?F/ʀ?S?R?:?? ?@Sؠ?=׸AC`DwΠ?M?H ?O?W) &TcQ9րNwB`?F`?Z ?G@C>O>H#Qu?;/`?VM@?T ϠP?E4̀?O?W=+/`][k<?%@?P LC ?$@?9w€R`Z 1ԠES̀[G ? ?S?Y?0 =, ?D`?ZI?Q-1? ?) ?/FȠLӺ߿ ?I T 8?K?15g`&>?@=:?US̀?[@6ȠXi L@??D`?)O3_@?D̀b _߳ 9 ?H_@?XK`?IOE -?J?HĠ?L ?O߳ <@[`P{@???@@?B[>+/`O{??B@ES̀????W3?P?B`"?J{ ?E ?(?1/ր*?K-`NwG?L3?R`?;@?HĀ?R?<@נN FC@??P5?XĀ?V?HK`?@Eg`Nc"?N;?P?MK`P G>ǵ??E`?2oӀKϼY; Q9 IRԀ9'@?6`?C``f\YEY`-?B3 ?1`?A?M#?J?E?2?;@?M?*?E#?D?P?X?\[?V/ʀ?,G@6Ƞ?@*߿ ?'@?L[?H7Š?6/ʀ_@7@7`L C_@?X_@?` ?S6?5ˠ?@g`?FW ?T`?^c?DOXK`Y-?L `?Y?T?4̀?6W ?6EF?=?CЀ'oǀ_ ?F`?M?@?:??@ ?/?>!/րADc2G:H =?I`?`?U!L `OS`?@@?D͠?@׀?F CKрC@׀E?.O?O߳ ?PI?A/ր?#Ѐ?7`?6`!?0?S?Q@?C?M?T`?BҠ@נ?RQ?GƀG `N@,o`?.`?%@P-_ ?P]؀?J˿`3_@2`??g@?@E, ??OS`` caR@\3]X#*??E?E{ ?3 ?#Ѐ?P5?]?KC@2@??12oӀ?C?WQ?`l`?`נ?RԀ ????F?@׀?H_@?V?R@?:g@?7G'@?Q?S#;ϼFɀ?G `?U @?L3?O?``?dπ?S`6`0??FW ?R?SР?J??=`?G@?%YÀ_g@/߳ ?S?T ?K ?J?HK`?+_@?, =7?3 ?H@ B?REˠ?]_ ?beӠ?$@?S?E`?-?HHK`0@??:PS'oǀ?T'`?K B[6?F?P ?\Q?b?S#4=׸? ?/?#?K?Vu'oǀb. _+?U@?W[Ǡ?:I> ?Fɀ?C`3? ?MsVRN۵b@fWy`ES̀U?^`VW Ak?#?J??@׀@+? ?X?Mø@C ?C?N`?QM@?9'@?+/`?O??S_@?$O ??R ?^ѵ?Nc??$@?I`?T1@?Q`?'@-`?<@?B3 =O4?A`?N`?G?3/߳ #?%@߿ 0נ?K?XĠ?6@ ?1?BIcUˀ?6?U5?(?@+J˿`T?-A@?@`(ĀT̀\` QW ?Jg@?F`RҠTwΠ?+ϼ?T'`?`v@?a?Q-`N`T΀J?%??Fk?+/`T1@d`A?J?W ?R@?;? #PנYÀ@ ?<Fʠ`׀V??MO?4Mscfɠ`@V`M7?+?>OM׸Ug`??8A:߿ @P! [ N`? Q`[%LӺ?Gƀ?[?P ???L@?Z<iOe Fɀ_@?2?R`?RԀ?B3 ?A?8?!/ր M_ TY?K?5ˠ?3?%@?F`>@??7 ?U5?Wy`?Q?'=7 ?A?: 87Š-`?3?;?/߳ ?C?HK`@JC7Ѡ?$O?4?PJHEˠJ{ `@`נ>?*??R 1Ԡ\V`D1/ր?0@Ss SЀ=7?3???*??<XĀV. L `W3X_@UP{@D@*߿ ?6`?KC@?HĠT΀Y>O?CO 9w€?Ak?L?P`>``khĠaZW J+??4@Mø@!?;) L3;W?Ak?#Ѐ=14wΠ;?1?N;?Ic?@+?Q?]?C_@Z Y;FɀK???.`?Dc?Z?PSؠ:+??*0נ?C?ES̀G Goǀ?< ?2oӀ-`???X?`b؀?Z˿`?37ѠF#?L?RQ?E ,o`E`@?@?) &>BGT ^maW[ǠL `(_@>'@Q . ?E@?AC`?K?Q?A?8 ?5g`?&?Va?`@?;ϼ-`?Uˀ?Z?5 +?0 ?L?KC@?&?=`?RG?@>?%?DwΠSKрC3_@?B`?_?P׀;?I`?b`?\?I 9OI?E??S0?:??F?5A@0??< ?Fk?7 :A?2G?N`?R?Nc+ϼS-8?E+?&7G?2G?Kϼ?2`>w?߿ ?T Ϡ?C L@3?]?fʠ?`5?GG???F'@??@g`?Eˠ2@RҀ8?Pq`?IRf`fC@_!YYX VȠQ;@?2`J?Fʠ>wA`B[JReӠBG>< >'@?߳ D'`W 5@?MK`?K/`?2G>`FW !/ր?R=w?A7`V%ʠ-?Tc?I; ?&/ʀ?BҠ?8 @?E@?V?D̀DK? ??R@?Y?R`?7oǀ>0 87Š=_ ) ?:?6`7 SЀSKр?HK`??T ^Y`SVY`W) QW D; -@נS`TYF(?  3_@?1?#_@Uq@VC@@LaMs?=>6B[T͠Y; YOT Ϡ߿ ?6/ʀ>?8_@?@g`??#_@:WC?BoӀ>1`-`S#R? ??*?1/րRRoӀ?BoӀ?_]`?`I?>w]K`U ?Weǀ?_?4wΠCs N@/?Y`?aՀ?X ?HFU>?5?K@E+?? ?C`?@?%?JO+,o`?2G ??@,o`???N@?KW?1W ?=7?_@J??U`?R@?D?;/`M#U]̀?Ms?b`?@׀K@2 D`A@0@>?H?M(_@3Ѐ?,o`?Ak?_ 7`??A>G@D@_@?0 1W V Y1@DπAՠQ`C,o`Ss [kCKр???=`*?9'@?4'`?ZXAŀ?@B YY???O˳@CP3ЀM׸][R@2`?@8_@F`C(>O߳ [u$̀?SKр?=#87ŠW@Zտ@=׸?6/ʀ?:37Ѡ[ \`?'@?Z߿ ?V8`SؠL@?W`?ZI?H7Š?=׸$̀??S?Og@9H@HĀ??-@׀``TY?7`??g@?1?I?H#I; c^`?@??]׸?TE ?Nc?U!?O{?E?S ?PI?2oӀ?E?R=?=7??;ϼ?=?GG?L1K/`?G?\ ?HK`?3_@?J?1E9 ? ?3?VC@?`?Qՠ?"@??)O?NO?L3?:?M?R=? ??6/ʀ?M׸?=7Z?`X؀?@?A@H3 ?DFW ^;H ?7@NwHs?-`??SK ?=`5ˠPq`?K@?VuHĀU (>`RҀE?7oǀI`KCDE`7@9`RPg`?C?W?M?B?:*?Hs?S?X-Š?P`C V'oǀ?Qa ?G@L ]iMK`>$̀?@ ?Vɠ?8 6Ƞ?4O>'@aa ^`@?3?@9 VkE{ ?=? ?A@&?:߿ 4'`_ճ@aՀ(?Y?W ?K?KW?Ic?>w?;W?8?0 ?U!?R`?&7`5 ?;@?Vʠ?W) ?IÀ?&/ʀ@?2`?Q%֠?S?:? ?87Š?'oǀ?R`?O?CKр?Goǀ?F`?Qu?;9?@׀?Tc?86Lo`W[Ǡ-_ ?MK@^;?4'`?S--_ ?G[ǠIc`+P2`N W H ?9O?87Š>ǵ?Goǀ6ȠR?#Ѐ?B ԀMRҀ) @׀Q@ǵK/`J˿`ML[2, ?KC@?Nǵ?N`?M9OV ?O˳@O+[C@f>`Xs?P?J7@?5????@3!U]̀X; @G[ǠR@O#_@?. ?0 ?C_@1P]؀C A`R`M4SРT@WGehP`Z H@@?G `?WƠ??S`KW+??L3?V/ʀ?Nc?B?63@ -2`?9O?Y?Lo`KkH?Cs ?U@?U!?XĀ?a?\3 O?G[Ǡ?Z!?E@7 P @QՀB ?.O?+ϼAN@7`?=`?Yc?fM@?b?1D@?E?[u?@?QQHG -_ ?8?FLo`:g@?1??;?1Ԡ?Dc=`P @?8?߿ ??F`X#E?%) 15@?9 ?*??G@Yc)O?CЀFUM#U]̀S}?A?Xs?O ? HĠOg@3AT͠ES̀?'oǀ? ?=W[ǠT2G#_@*?>ǵBoӀG`K@@?2oӀ?E@-T̀Y YEQa 8 N X ? ??X?7 M?IO?, ?8 ?W@?X-Š?L?-KTCЀ+/`?4?Ms?a4րQՠ?@+?Eg`?P@?_?`@?Tc??;?4̀?@??3@g`=_ ?K?Z??X?HFW P ?5 ?O??>ǵ?>ǵ?F/ʀ?.`?D`?T`?PSؠ?>w?7@?&/ʀ?(?M?S`?@g`>??&?Ak?G `>3?B?R?O??WƠ?^?GG(?*0 Q$̀?L ?>'@?2`??-`P <@?/AR@(?:G `S_@? ?G`1ԠH@?,FX@N;? 9'@Q9րB[CR[2??W@_ճ@K =_ E`: @337Ѡ??1?H@?@g`CЀQa 6?H?O 9OW@G `?%3Ѐ3 ?Qՠ?W ?!0?KC@?Tc?P{@?Fʠ>ǵQ 1W ????B@`R@KC@H#RԀB?H?P{@?$@-'oǀ;W"oӀ?N;?Z?Tc?+/`85ˠ6?;@-_ L 87Š#Ѐ?8Ā?]i?TG3D`?7`?.`?#_@?4'`?1/ր?A?G `?>ǵ? ?;ϼ1? 1?1W ?V/ʀ?@SؠDO?5 ?Qa ?9w€/?N'@ZQ?=׸?5??8?3?UI̠?P??Eˠ?WƠ3[?@{@?a??߳ =?IcO+>=7O ?N?c?O˳@KIc? ?+ϼ$O?@`?Z ?V@?CЀ2`:3?(_@R`g`b`QW Y@\9`?1Ԡ?6`?D@>?G `?`{@?]`?U @?Tc?@׀CMs:?)O?2@?(Ā:?D?e?`8ĀAW ?O{?Y€?Si ?C`?H?S?:"@?L ?VC@?C_@? ?ǵ87ŠZ@Y à?"@?W ?Nw?DO?Y`?X?I6????%@?>O?87Š?'>??@?M_ ?3_@H_@3? ?@ W aC`Z;ϼ???Aՠ?P׀>N`1?@>`8 ?5g`L `O˳@-??S}\IS_@d Z 2`Zg@e`VKkU]̀=`?/߳ 4̀?"@?SЀ?R) ?V?a@?XĠ?>ǵ?Dc?E`?1Ԡ?L ?^@?S 4wΠ?/߳ ?[?O{B3 (?M7?Q?:߿ @׀ ?P@?)OG?D; ?X?F ??g@?N;?Fɀ!QM?=7?DKWWy`#?Y`?a ?[a?R Ԁ?RҠ?S-?B` @?g@O?T@?&/ʀ?a@?Yc#?5ˠ?Lo`3Ѐ6?JS?AW @ T_g@U???1`E?Z˿``?5?\G?R3 B @נ?<@?PI?B@?L3?;W9w€KC@B`5?@{@?G[Ǡ?@Dπ?+?M?8Ja/ր`Fʠ? ?4'`?B 8_@Z+XP@J?+7-?-?=XU@a*֠VVZ{ 6?@g`QbҠVOS`WPg`AQQ5@??I ?Z{ ?X?UI̠?Y@?I 5g`?FW ?cKр?X`4wΠ߿ ?A@6/ʀK'+@ T̀K ?M#?O ?/?B`?!?Eˠ?TOYT`?(?EC`b8bҠG@?L ?T?P @?P@?OPQkK/`S-Uq@ ?W[Ǡ?QW '%??:?=?G?N`?3_@FX Zq@ @?X7Š?Y; ?I`@g`]ø@QM@?J??@ T@Z?. ?MU>`?F`?]7?RԀJZQISR@H N'@Q@???(?#_@J{ b`dXEC`KS@WƠY_S`\Qa O߳ I; ?B`?W ?Gƀ0 >w8K]_ ]_ CKр?< F?C?7 ;OS`SAрM?J?X?[M ?8 U R@???'@37Ѡ;W?$O?HLGQՠ7G?R) ?MK/`WQR[SS TP @AԠAՠ;W-HK`Y`_\ T O?QuI; 4̀Uq@S 6Ƞ-`+/`?< ?>ǵ4̀2?K ?S`0g`^`^YPDwΠ ??>O????9'@(OS`4wΠ?J?Zտ@?[a?45 ?Si ?]A`?1W ;W?B ?XU@?XAŀ?HK`?6?G[Ǡ?=`AM#Gƀ-`?JS?Ry`?E@?Q?]?U?=7? @SؠP@?7G?S#L[(_@L3W@5?G?=7$̀5, ?0?IÀ?@ ?@>Cs 6/ʀ?B ?=_ ?,o`?Nw?M`%?=׸ #ЀD`KW8_@?,o`3P ?Q?1HĠ3>&?0?9? ?G[Ǡ?<G`R 1`!KG[ǠH_@R) 'oǀ?=׸=`A/ր??:M#C`@נ8_@Fʠ_`I`??@@?MK`?. E ??RG?X#?P+QuSi &?E ?/Og@Zq@Qa ;:?A`;ϼ?37ѠEˠY€&/ʀ?TO?Y?Z??=7?g@?O߳ ?`׀?R`?P+?[?V%ʠ?FȠ?H?P5?J˿`?(??'@?M?_I?S?9`?X}?\G?PSؠCKQ?T'`?J{ @נE@$@G `T4'`?IO?@+2`A@4wΠ?87Š?W@?`נ?^۵?Z?Ss ?<?+ϼ?L[F ?Pq`?Y€?Dπ?#Ѐ?2?37Ѡ?I; 4@?HĠ@XAŀD?B@? ??E{ >Nc9` ?G ?'oǀ?C_@LHM#R3 2`,H_@?E?XAŀ3P`,o`I`W `P C?(!bҀe@,?WƠ?T`?87ŠJ߿ V@IO>?;/`?;@D>'@D͠Y[C@QԠA _ ;WEJ1`?0?HVM@?,?R@?<?C7Ѡ?G@ ?0 ?V?]?`?XL `2@?D̀?K?1?"oӀ?2 >?L?a ?L3B@?L?VȠD̀U =`FBҠ?Q?_S`?@ Q9րH ?6?0g`=_ 3_@?7@?B@?37Ѡ????K?Xs?Z?[?^?Zq@?R@?Q`??߳ H_@G?3_@?2` ?@+?S?W@?KG IO?HK`?C_@@Sؠ?<_ ?!/ր?:H_@XĠH#9 S_@M`Fk+ϼE?KW@` O 1W @??E@?RJSV2 6`D@=@@#^ [?KW?^@?H#Gƀ[ϼ_ճ@^'@`{@aՀZ;/`?@׀?2 > P@TcI7BO?7?>`?9?@ ?B[.`?C_@?D'??Kk?A?;?XK`?]?Pg`?Qՠ?RI?_@?T1@?` @?S}L@Pq`?KC@?S-?Aՠ?J?B0נ7GIZտ@U81W PVȠR4I'@R^`d\ LӺK?5ˠIH@?37Ѡ?Ak?K ?K (=`3 K /?T; ?O{AUˠS_@L@NǵSЀZ`]؀Q?2`2`R=3 ?4>3 @ ?> 4'`J?0g`>?ES̀?W`?I ? ??@+F?? ?F/ʀ?7@@@>?Fk??#Ѐ?@I Vu7oǀ"@S I; QՠV?C_@?ZI?T1@?^@?eN̠?[ ?@ ?_@?2 ?J߿ >_Zq@?A?SKр?S7Ѡ?_߳ ?Z?/߳ G X@WƠ3??;@BҠD`7`KkW`\Y1@Iw€G TPIB =_ ?#?1??D͠?P+&IH@QW BoӀ?4'`'@T`T+?@נ?8?Iw€?R`0?Qk4̀G@TE ?!?D͠E+R 7 ?L ?V/ʀ>P CA/ր?.`?^m?QՀE@?4wΠO+T͠FAՠ#Ѐ?L@?`?fz?c}?WQ?L[?D'`?2@@??ǵ?V?aՠ?[?R`?B3 IM׸?BҠ?I; "?AC`?Zg@?@@SЀP !0נ%@?2GG[Ǡ^R@B`P{@3Ѐ?.`W[Ǡa`=?. =??YE?b) ?^m?9 MK`JSSeS̀af$@?AC`?P]؀?c`?dwΠ?G PZFC@?Cs ?*?B[@?/?"oӀ<@Qՠ\GX ???T`???L `TwΠQ??Qa ?7`PB[?.`@0 C#Zg@Y <(NwP?2oӀ?R`?6`?8Ā?W ?CJ2G3Q1?.OK@SЀ2G?M_ ?R@:T; 37Ѡ3E@?9`?2H?߳ ?KWAW[ǠM?D'`?O?U@?^E?Xs?U!?a4ր?[/??AC`?@ ?7oǀ?<??g@?J?T΀?W?U?Qՠ?S7Ѡ?Q4wΠ?K?Ss ?A/ր?Nw?Z?CS ZJ?@?I`?PUV`S7ѠR?FȠFXs=`) PנU M?_@?Q?*߿ T1@O8 M7K _@0נ?J{ ?W`?2V9`[uCKр?&/ʀ9 D@?*??0 ;ϼI Q[Z ?'oǀ?Y; ?M׸>1=_ ?;W?]͸ ?T΀=׸E{ ????߳ ?P5?B3 P! T?:߿ B@RԀ?!/ր?SЀU H7ŠFVɠICKрV@HĀ?8_@?@. ?)O?B[?߿ UI̠XK`?'?(_@Z]`]K`M׸>O?4̀?@ <F?C?W ?V/ʀ?Gƀ?A@>?YY?TC ??RҀ?>ǵ?G`?R ?87Š2G=$̀?3?Lo`?T͠?L3?B ?VC@?[ټ?P @?AC`?'@H7ŠYYYD͠?C?J?? >OB@JW@Z@@?8_@2@FW ?+ϼP`S`@?.`Z`IM) ES̀Q(2G@4O?#_@?Uq@?Q9ր?(_@?Iw€?8_ ?%?Gƀ?S#?U?H?_ ?T?T@׀_@5 MK`1Ԡ?T͠?_`?6W ?. ?8 ?<=`VY TE <?A?F?G[ǠQ WP׀? ?> >B ԀV/ʀV@0 ?"oӀDOS}U@G ?2LD; DπOE?@?C2@_]`Vɠ?E`?=SW3JB3 9`2G?#?1FO߳ 5@(ĀI?+?\ ?T@?6?&/ʀ?6/ʀ?T?X# ;/`?Goǀ?@@'@?+ϼ?1/ր6/ʀ3 ?<?HĀ&QՠAk? ?=7?J߿ ?.O+ϼBGP! :߿ ?D`?QW ?Ms4'`]X ?.O?S#?FȠ ? ?@@?1???DwΠ??V?bL?RҀ?DwΠ?L@?4Jg@UKW?1?R@?S?Si ?Z+?^m?P ?Cs ?&/ʀES̀P VuL?> ?,o`R=Ss TwΠ^`UE+PנU`VaL?:??Iw€?:?N`?TY?F ?K?Vɠ?O˳@B3 `@S_@?4JbQG wL8?R@?D`C9'@?P ?Z?Ic?;?IÀ??'@?P+?Z?_5?`! >\y@4̀?QՀ?+ϼ,o`?HĠ?Z?Y`?A>?H#?RG?9'@1`??V?aM@?Z+?N`?3D; K,o`?2 ?H?G@#, ?Iw€?T1@?Pנ?Ms?HĀ?-5 ?0??U?Ms???@Sؠ?:?B 2?7@ 85?Gƀ?R) ?G?P??S`?F?K ?P>6??3ЀB?)`?0 FkTSU`?G@?T̀?R=?3@?.O?Ak?>`?_ &AՠO+?YÀ?N2`Kkaf7G?P׀Q/րaՠQXe a/րF+ϼPIV/ʀ=76SMK`_@?@?37Ѡ?+ϼ, 4̀Ak_@?TwΠ?E`RҀDc?D_@Iw€???Qu?Q?&?O?VC@?Qk?Q`?J@?E?DOUiY`?9 $@P{@@{@?G@?X7Š?>ǵQQW ?=`??HĀ?Z?a ?X?/߳ CP{@SРT ϠM ?>J+B[?B3 ?>w(>?1`*H#1?E@?;"?AԠ?HĠ;Jg@4wΠ:g@G@D? @?U ?T͠?;?A`?9`9'@?3?S-?@?=?Mø@#IÀ?1/ր?@+$@3_@87Š?S?[ϼ?JFC@QH#IÀPK;@FC@V@FW ?K@?;/`@נ?@??DπP! Fɀ?7@C_@Ic?F?=_ T\o`RoӀMTcQ(9`Y'@X?g@?5ˠ?BG$OOH9`??RoӀ?D; S7ѠP ?6?3??E`?K?9w€,o`/??E`?W ?[C@?[%?N?  N Yw€9?=37ѠK LGA`?4wΠ?Vʠ\ X}WƠG ?87Š?N?R3 ?BoӀE+U+PAՠ6"oӀ?*?3SР1W ?S?1`T@M???#?0@4'`FPg`#_@?F/ʀ?@@Sؠ*߿ ">w(?M`?W@?;0??:g@?Tm>'@?C >$@S`T Ϡ?B[? ?K?<B@VkS3Ѐ?19'@7@TY`g`KW? N`Qu?2@?Jg@?E?O{?Pg`?;W?(?4wΠ?F`?X?V`?>w? ???@`?S`?N@??1?!/րI; BҠCP?OS`T`P! ?_@?J@?H@?4'`2oӀHĠI; ??M?TO?L@=`[`>`?X ?L `HsB[?1W ?E@?D@KϼTπ[Vɠ?BҠ?#_@?߿ ?4@?"@?:??Uˀ?TO?QM@?>wKϼDc?T R ԀIYcVɠ+ϼQ%֠R) FC@9O?6`?E`?N;?E-A???P A@`:Ss ) D@+ϼ?@ ?#_@[Wc@@ ?T`?J@?)`RҠ`{@W9w€?*߿ ?G ?BTchU@b HĀGK@>?;/`?1?L ?X?LG!3 NG?Dπ?S ?=???&?;W?G ?>'@?"@?K?Pנ#_@B %@?G`?A;ϼ*߿ ?J˿`?Nw?A@?E?7@C7Ѡ;?Fɀ?Q?H??N C?F?G `?(?;?Aՠ????5??D̀Z?I`?87Š?"?;?6?1?8?2G?Lo`?Ak?"?G3WȀFʠDcQW KP! IÀ?BҠ?TKOB?C7Ѡ?-`PQW :???J{ M`??AkPSؠQ`P׀T͠WF FʠU`Iw€?9 ?6/ʀ^`iK ?T1@"oӀWƠHGXVE+?J+?PT͠YYMs=AAԠA:?A@?YO?U??: J@Z˿`Q?D'`?Tπ?@`?AkLo`H@=?5g`?L ?5g`$̀>?9?_?_ ;U???@ >?Eg`?K/`;ϼF?_ >>?NO?S`?Eˠ?%??)O?H_@?AC`? ??@?w?2?0@FȠJ ??-? 9O:߿ ?-?(ĀGoǀK>????KkSDc?0@?U@?^@?E??(?BҠ&Y€`_`O>w]@c@P @1@SؠJ{ Gƀ?6?D?K?E@?2oӀ(Ā87Š$̀Qua ֠BG?J˿`Qf[G `FW E`KϼC?9O?J˿`?B@?3_@(_@2G?$OI; E+&/ʀ?1Ԡ?Qa ?Z?TwΠ?U`X؀K/`?SKр?^۵?T Ϡ?Hs?AԠ1`Si T'`Hs1?@??9w€?B`?F`?[Ž?[`F`@ODQ? ?M׸*߿ ;?8-`K?@{@?a?a*֠?B@Dπ4O?C?J+?AԠ?4@??1W ?Hs?B@1W B 8 @`8?2?4'`37Ѡ@?C?CЀ!/րM`K3GWQPg`4̀?@APנA`??M_ ?`{@?M?Eˠ?B Ԁ?E`1TwΠa%֠h-ŠaH@O߳ _cP@=G[Ǡ6Ƞ???>'@?L?H?KC@?Y1@?`&?Weǀ:g@`v@W@ JDc8_!id[9`Q@Pנ[ T?. ?3?87Š'@?B Ԁ?> ?@?F?P`?;@?Dπ?Y`?X_@?TYÀBG?Ic?Z!?Z?T@?RQ?J{ %@IA<FDc ?F?P ?Aՠ?Fk?S-VaSUX-Š?0?T ? @?P`?6ȠSU`Iw€?RG?_?FkB$O?P@?Y€?S?9/߳ >OC`B`37Ѡ)O+ ??,?)O2G#?M׸?S#?2G& @2oӀO˳@ZVaJ+2@???"?C @?V H=_ ? ?00 6/ʀ[9`]sUS̀_`]L3XK`cZB`? ??L D?D̀?S#?E@C _S`[WFɀJ˿`T͠V9`\ `a*֠bbjӠX TE `+Xs@@?ZVM_ E{ ?0נ?Pנ?V?_]`?Z?B?=`?O?H#?&/ʀ?!?=`?9w€_@?#?Nw?O?M?S@?>'@FD; =HK`-`?Ak?F????߿ ?Q@?G `D̀H_@Cs C?Cs ?U??5ˠ?2?U?LCL@?(_@?M7?6/ʀ ?I?]-?_5?P@<RKIw€HĀ/?<?K _ \X?>'@?Hs:?I`?, 0g`7H_@;@?1=7?S#?c?AL3?%@X#T1@Jg@IIO?0?J˿`D'`RҠ]P ?WƠgeǀeD̠\ɺNwHVUg`C`E@>ǵ?CKр?Lo`?ES̀Pg`QJ{ 7oǀ1P`WE?@g`D`CKрVW XB`GoǀTY+/`?U]̀?]`?Y?NO?<???4'`?#?Lo`?^@?cP`?]_ ?(B?0??BG?6W ?Iw€?2 QkP> 2@?H_@?Ug`?1Ԡ7G???Kϼ?@NO???SAр?> ?9O?B ?Ms?Ss ?E > ?$̀?3_@?F?T`?VW ?RoӀ?9OQM@Z G9 F7`?< ?N;1`d c???Iw€*?:?P9'@L@?A?M??%?O˳@X?Fʠ?aC`? Z˿`O˳@)`DOP! RҀP@:g@>? ?2`-O?H@4Z`l`^'@J@?7oǀ?11`HY`S`?Q@?c?S B3 G `?&?7G?6-_ >w?+?L ?P@?FʠH@_J˿`?Goǀ_@V%ʠ@g`?R?W ?D@>?/߳ ?>O?@?6W ?X?`:?`@?a/ր?SЀ?&?D?I ???4wΠ?9`CG3-`?A?H?>ǵ?N;?R@?0 H M?J˿`?`נ?AW P@g`?D̀?QM@?E??'@?87Š?3@ BoӀ?:??Q/ր??>O0?43_@D̀? J9?5g`? @?4̀/\@Y; ?Gƀ?YÀ?>`?B3 ?MK`7@L ?4̀?Ak?g@A@J˿`U "?37ѠS-ZFW ?;>wR@MG`P @QC`6?Jg@?O?(Ā?#?2 ;/`L3L M7>?V@?S@?CWȀ[ϼ5ˠ?P?7oǀJ@:??B ?C?@;E6>??E`?M#E{ _G[Ǡ?G #ЀY@R[?@ ?T`?@?@A`,@?C`?TO?D͠?3Ѐ?S?V?K?Ug`?S`??I?A?$@?@<87Š"BoӀ?2@?]?S0g`5 ?3Ѐ?Pg`?P`4'`S=?A`?C`?+/`?9w€?SU`?P+5g`D`?Ak?Q/\ M׸?N?R?Nw?VM@?D>w? ??L?35g`&:4O?L[?U?3 "oӀ?B?K/`?A?1W AC`W[ǠO˳@?5ˠ?B3 ?#_@?8_@P! ;?FW S7Ѡ^@P`G@Ss Q%@?H?Q?B Ԁ?J߿ Y Q '@!?1?P`?1PIM7I'@Wy`T Ϡ( <??P5?U+?G[Ǡ9`P <D̀B GƀT2`?C'@[M `7`?XAŀ?OPנ_Vk3?A@?@+_@>?E?B@?9?R Ԁ?Q9ր:GG?9w€?D?7oǀ?2@4wΠ=?5g`?H@?W@?a?R@?J@?[?J?6Lo`Iw€"oӀ?6Ƞ?.O??;W?X}?^?S`?Eˠ?M?RҠ?0@P ?`+?aM@?WȀ?VM@?Ak5@?1`?A-_ @+?@??F>9 @;P'@?U?Y€?C#C_@R ?[W?]_ ?Kk?R@?T@?#Ѐ>?L?B I; [LH_@R`A?@25?1W H_@VkG ?B@Eˠ? @YÀN'@5JSIO@?) ?)`?6?JS?[@?`@?Lo`?$̀?@ ?I; NP?9?H?S7Ѡ?@?Qa cRG?U?UFɀ]ø@Vʠ#?9O?1Ԡ?T?R3 ?߳ _ ?;W?A6M#8?_@?7oǀ6Ƞ?Q`?`! ?]?_?X?E?U?`5?HĠ?߳ BҠ N`Pנ0@5ˠPJ*??F?T?WP@BGR@J?9`?P @?K?*@{@?2`?`?X#4@?:?YE?R%?[%?6W Goǀ-`:Iw€#?!>`TZP0@?@{@?1`U@YE+ϼ/MsCB`LD`DcFȠ'oǀ$̀AԠ?=_ ?_S`?Vʠ"??P`?HsE@P @&/ʀ?MK`?Iw€?63YW?4̀?Q`?IO?=??>:g@?F?c?^w?C7Ѡ?2 ? ?*߿ ?2G-`'oǀ?3_@?"'@FʠH ?G@?Z?H?C?Tπ?O+?Nǵ?Tc?Aՠ$O (Ā?"@?N`?F7 F/ʀM_ Y1@L3?C?7`8Ā?&/ʀ?KW?Y?d1@?VkO߳ _]iS_@0?(ĀDOHĀM# ?Q?7oǀLӺ9`? ?0 2oӀ?ǵ_{`+FC@?6Ƞ?QM@?HĠA@ ?(_@6ȠHs?߳ JG`0g`QW [`LL]S?37Ѡ?@J(_@?H7Š?C?AC`?@+0@3>M_ P?(_@>OJg@>?U`?`׀?O '@8 ?O??fɠ?`@?I`?@ !?D?/??=?W@?I; 1:߿ 8_@?5?E{ EˠR?2G>?#Ѐ725@?-_ ?R?L@?>w?V?O?`h @+?@@JL `>?0??4'`,o`R`R D̀6/ʀ??8_@?D?)OPO?8_@?D`?@{@?K?B3 ?;?O{?O?S?`g`?SRԀZ@?$̀M4wΠ?J;W?@ ?EX ZP`?@Sؠ?U?P?R=?KHW KW6?$̀?GG?R?X??W=V6Ƞ ?D?S߿ S@P Vɠ`g`WKkU`Xi 5 ?6?=׸?S?6`+/`VW Y?E{ ?W `!U @S`?2 ?[?N@?0נ?G `?E{ ?U]̀?d Ϡ?Y`?2 >C8_@?30??37Ѡ?[?9'@Q@@?G@?A?%@K U!=7߳ AW E@A7GB`R`F???Eˠ?J?dT?f/ʀE@f\<@?PנB[R) ;PI[/`S4O?C7Ѡ?MK`?0 @ 2?N@?SAр-I`?=`?G ?A@> /߳ ?Q?Y ?^?`?NO$O?(?K?C??1?T Ϡ?P @?C_@?H?7oǀA/րU!Ss 0נ?VW ?\?C?0 ?D`?@??;W?$@F/ʀN'@@?U?]!/րb`ӠZ+%??@ ?W?X?߳ HS_`ZGGI`SL?!/ր6>?:CFȠ?5@=R[?@ ?P]؀@SؠW`Woǀ)O?T?L@?D`?^;?^@?SKр?V?Q9ր?@נ?6W 4O5?L `2G?QuCcI?Jg@?@ ??%??E+??߳ -_ Ak߳ ?;/`?Uq@TY?3_@'?=׸?Vʠ?Wƀ?I?F?@D'`!?AԠ?CЀ@E@?C ?8 ?Ic?]`?P׀QԠ`Uq@3) ?G@%@]-O?߿ 4wΠ?@?>O>?8>R??KI`9 ?[ټ?^w?8BGIS#Zq@R3 3B`D?3 ?:?5@G@PנOg@N`]Z9OL@V`???13?Nǵ?TY ??_@W SЀ?E@?IcD'`YÀVN@S QԠ%?6UP@@?A@?> P`Y; ?D͠?]?Dπ?0@?N?L `?/00נ @CF???A5ˠ?BoӀ?S`?G[ǠBP@;?9?KC@?'@N@N'@߳ ?C ?O?.`NQA ?CK@'?@נ?O?X?Zg@?KC V%ʠJ)`??;@?3_@_@.`6?B@?a?Y'@I R`?C?U?#@׀?߳ 4@U]̀H 8 0g`?V/ʀ?]?L?Yc?TQa Fʠ?G GoǀG `?P+?SР"oӀF*;/`XZ˿`Q@WQRҠ?,?(ĀI`I; DOH Qk]V?. 37Ѡ?P ?A@+?L@?T ϠAkB 5?^۵X?Kϼ?SKр?5??=7?0g`A@>`?H?_?Y?1???OZ{ cP`U??_@?KW@^@c Xi < ?7oǀ0g`U`@Sؠ?Qՠ?Q%֠? 2??C?;W1/ր@?K?H@ Kk1G `Q???E @D̀G@&?PSؠ?H HHĠ?BG?J+1/րNǵB@#_@?߿ ?B@?A?N'@?a?\?S@?l?o?#WQ?N@?߿ P5B@?9'@?A?37Ѡ?(_@8VʠR`?RԀU!,o`1W Lo`9w€B X V9`HĀ:߿ _@0_ ?8 OS`b@KW?TπQ/րPq`RG?=`????M?H?Fʠ?au?d; ?Y; ? =.`MsQk?C?` ?]#?X?_˳@?dE ?XM`b) T'`>?, ? $̀3?D?bjӠ?d^?Y1@?R[?8_@U![ >w?A`?BoӀ@@]^cWƀS#?64'`?#Ѐ?W?S???D'`?J+3_@XOS`?F?R?:߿ ?6?C`8_@P`?37Ѡ?Pנ?2oӀ???!%@?AՠJKWLJPP @?Gƀ?I?G@?R=?S? ?BoӀ?pY ?rR?F/ʀZ]`?P ?G Ss ]A`:߿ ?I?E??Iw€W) O /߳ O+Q?@ ?PI?2oӀ?*?C`W=>"oӀJK DOHĠ^cd̀U]̀B[C@X_@+AC`CЀ??߳ M7?#_@) ?DwΠ?P?-BҠY^`L Aՠ2`?U?]?=?$O?R?\3?[k?N@?&?$@??;W?K?Qՠ?\3?_{?U5?RG?Pq`??;W?L?(LS@=) ?F?Z ?QC`?J?X`?Vk?9>?BG?L `"P@?Z?]?P`?D?M?M?H#?RҠ?U@?O?Tπ?VW ?G@?;?D?C?&/ʀE`OS`@נHĠO+?%??I'@?!/ր?#_@?G@?(ĀJg@???c(?c#RԀ?E@?ILG\GP? ?!?"oӀ7V9`U D@QuO?T`?d^?VȠ?:6W TH?7G"@MAԠA@U`YL `)`Uq@X7ŠN;O߳ %@?Tπ?2S9O?A?8_@?3@VC@N@S``V6?8 ?R[?:FȠ?1W ?SЀ?E?P??_?U@?$O-_ ??37Ѡ?XĀ?X`?K?B@?;ϼ?C ?N`?2`1/ր?@g`?QՀ?7GBoӀB@?.O?ES̀?B[?Nc?S ?Dc?A?RҠ?Tc?CKр?87Š?S?F߿ ?E?W) ?M#? 2 ?@ ?]s?\?G3?=`?N`?T?SЀ?OS`?O??O߳ ?M?L3?7G)O9 Pq`R Ԁ?. ?J??-`?N?=<3_@?3_@?@1?"&?8_@?;ϼH_@Nǵ5g`?E{ ?6TcX@ ? C ?< ?[M ?OS` ?"?G `?.`Aՠ-`:?Z˿`W?) ?G `>#Ѐ?_@87ŠPg`?P@3Y >?Y?U?E3_@Dc?Fk?N@G `XK`HK`?Cs ?U?< ???]?aԠ?C#?4̀?U?Qՠ>+ϼ>w*?U ?_S`?Ms?B@E?2`7G9'@?J??]}?U+?A?9w€?2@߳ 4O, ;@FʠAk@<!(Ā?(?R?Iw€!/ր5@QՠQ/րNO'@?U{ ?MK/`I? 'oǀ?8?Ic?4$O?0g`?@g` ?J?UˀVɠ9?8 ?1W ?AԠ?Uˀ?T Ϡ_ SM??A`?P׀P57 ?2@?C`?QkM?!?,PנR[?K/`?[@? ?P@.O?0g`%?-`*0 ?1? PנPq`:?QP?5g`? Fɀ?@ ?\ ?GJ+H @+X}[ټ?,o`?Y`?RҠ?H_@?(_@2`?F?X?@`P@TwΠ?RG?Mø@?P@?a?]@?6`$O?<@?N@?< =׸< 3Ѐ???F?bҠ?_?9`DK<@4@ ??S ?a?[/`?P??L?R`US̀G ;W'4wΠWQ]H 3Ѐ/??6?%?5g`4@QC`V`2@6?7@R[H'@VW Q%֠:??. ?#GoǀUIw€?.O?#_@3 ?E+?Z ?2oӀZ]`P?9O>NcVu[@SKC@]׸Z??4̀?> @Z5?TwΠ?) Og@OH F 0??B ?F?_ #_@H\TE ?B`?R`SS<?3?QW ?QP+R0@?W`?WQD@Q!/ր;/`?@?aW ?c?LӺ???D̀?TwΠ?G ?A?SЀ?>w0g`@=`US̀N ?-?I?R Ԁ?Q`?K=A@IÀ:@g`8?$@5 '?U @?Ry`?"oӀ?-?$@?BoӀO(?Fɀ?H@?DO?2@?6Ƞ?DO$ON'@B Ԁ6B`+ϼCs ?:߿ ?c?X_@SРK@?Cw?@ ?@H@VȠ.O?H@3Ѐ?B3 ?Kk?Tπ?S-?@ AW R@_+eI̠]?3?W ?F/ʀH[aXU@(_@?Q?GƀJ߿ ]U@^mC?]?a\ !ES̀?;@ ?1?S?Z??BoӀ?@??\?e??Z5 @5@?_@J\@S#CKрB`?"oӀ?O?C`?%@?C?J?<@-`K@BG,o`N@M_ >!/ր?Qk?KC@?@?+/`?%?B@?T͠?E`?6?S_@?Nc?*??5@><@2oӀN۵_V@?:?8Ā%?U V ?7?PI?B@5@PIY Vu``\) ??R`?P ?N?W@?W?87ŠF DFȠZտ@U`"oӀH7ŠZSQU ^@J{ ?'@FW J@{@J+'oǀ?Ss ?:B?G`?YÀ?NO?Dπ?A`-:߿ Ug`Ym RԀ) ?G?HĠ? >'@I =_ ?7@?I`?AԠFP 2G?R`?R`??_ ?I?3_@߳ ?.O?-?@?9O?R`?`?[ϼ?;W??F[I ?7?< ?A?Eg`9 [Yc=?*0@>`?CЀ?I`FȠO 4OF.`-??L3Eˠ?E`?N ?T?_+?M?. >>w+ϼE^ѵ\ #?Ms?DOPSؠbboӀI ?-?:?/???3I'@M]׸]K`B@?? >1`BoӀB@N`WƠZ^wVk+/`;U TcUV/ʀ ?E 0?UV;*߿ K ?5 ?_?C M_ $O$@T1@Zg@\=O??>w?!Ms1?P`?Vu?HĀ3B??A@?V?Q`=Aՠ?F/ʀ?LG?<@?53_@RNǵ#Ѐ???(_@2 G #_@?@5g`?B?V?@J0g`P! ?Q?=#?_@?@IÀY`P5?5ˠ?C?@+?WȀ?WƠ?%??-_ ?P5?6/ʀ5 5@'@?N`?Pq`?R?G37Q/ր@?8?4'`?*?;/`D_U]̀>?D?PI?_I?UˀP@Qՠ?Iw€?P??F?EJ@`R@8J+A?7 ?@?R@3?RҀ"[`M׸;WG?"@?H7Š2QM@8?P5?Y?HĀ?:?XAŀ?Z˿`?GG?Mø@?T̀?H7Š?K?S@?F ?:?(Ā;ϼ"oӀ?:???:?R@?@Sؠ)O!B@6/ʀ?7@?H?BҠ?=?2GoǀUI̠@? @?L@?Y1@?FC@#,13 ?_@?J?6W 3? ??,o`RҠ_IU{ M׸,?R[?G[ǠRҀUB`R`W `=_ AXKC@?HK`?D`JSY [WZISi T]@S5ˠCLIGoǀ? ?A>?BҠ?R@?!6!C>`??$̀?O?S?3?D`?P! "@>?M7?*??E+,J??/?>wC7ѠF?@ ?T?P?N'@?AIOC_@?N۵?8RҀGG???$O?L `?N+ϼN۵J?#?X?X ?L `?T̀?R ?,?RҠ?G[Ǡ???8>K/`G )`?>O?SU`?E????62GQS QM@T ϠE@?_@FȠV/ʀ2oӀ?TF?YO?`l`?Aՠ0@??@׀?I?H?RQ?O?3?9 ?B ?0g`?"'oǀQKC@?K ?R?߿ ?Nc.`W@BҠ B Ԁ?6?Zq@?DMIc@ Uˀ` `q`X}C_@?%@?K?X}?RG?B`?Qՠ?L .`(_@'oǀ?H?AW W[ǠV@?$̀?O?TE 6ȠI?2?G ?Q`?Pנ???"?77)`?G?D̀ ;W?8_@?^嵀?`?V`?R`@Pנ?9?VȠ?H_@?J?V?Z?`X؀?Z?E+?*CS+/`?6@@C!/ր'?=_ ?V9`?F C7ѠB?5?BoӀ(G[ǠAIw€W S!?&"?(?M?E{ 4OI`H#9?5 ?>w2@>?U`?Aaa b@?;W?U`?3?E{ ?AC`?2`?>O?T?Q%֠?) FkP5߿ ?J?-a>`aKW;/`HĠ?2@?\@?P`@{@B3 ?g@HĀ?) ?N`+/`S D'`#<M_ QC`?߳ ?37Ѡ?G@?W) ?\ ?E? ?;?_ E?5?5g` ?[W?US#RҠ?1W ? ?A?U]̀?6W =? ?C?HĠ?E{ ?J{ ?S?"oӀT`K7@B ".O8Ā?J˿`?Qՠ?;?P @?@+P`???[@?X#?X}?a ?`5?Z]`?O˳@?Fk?T; ?Cs K ǵ? ?L@?3X P`??߳ ?. ?8Ā?Yc?[?Pנ?B`?%?12`?Kk?\)?(ĀS:6P ??$@Eg`(_@"oӀE`?AԠ?Tπ?5@?I; ?W `?FW ?M?^`?V?2G@ -?S?V/ʀ? ?=׸?R3 B _=?Pנ?<@?Aՠ?D?Kk?Z??L `TwΠ`:UˠL 0g`?N?Z??DcT; _ Q`6&/ʀ#_@?"?CЀ/߳ `&U ?Z?eˀ?MN 87Š?\e?^ ?߳ ?!?Q?Jg@?@ ?!;@Sؠ@Tπ]sP??1?.OBoӀSAр^m\[>?Lo`?"oӀ? ? @A@KWȀa>w?\@?P%?HK`?U @?87Š=U5_ O?߳ ??6W ?Y'@?`v@?Ug`?;@AC`O?PנHĠ?B Ԁ?H7Š ?A?Pq`?@Sؠ?G `?8 >`?<@?Z?XK`?XK`?S ?4?CЀ?W@?Qՠ?#ЀGoǀK/`?1Ԡ?F`?0 J{ ?@?SР?AP @Nw?F?S137Ѡ?[`?_ ?&?"oӀ F]iX ?=_ ?Kϼ-_ #_@ ?OQW SЀX-Š?*??]?G[Ǡ8?E?W ?B CЀQuGƀ ???<?U ?U???;@?S?Y1@?\ ?Q?3?R?P]؀?FC@?G ?I?H?A@?@Sؠ?G[Ǡ?0נAC`9w€"oӀ?߳ >?R`?H7Š?߿ ?Ak9L@-`=C?BҠ?BFW @?U?, a@bҠ??Z?LӺ?"oӀ?F ?L ?@?Mø@?A@Cs @ @ 4̀?!? ?A?S-?J?,o` @??;W9'@?YO?CU?aP AO߳ IÀ7?*?5 >?A`?KC@0 %@?Y`?TcT`aԠQ?G b@[ټ?B ?FȠ@ ?:5FʠPנTE ?H##?HĀ?G >7G(?4wΠ?AC`?4'`?#?8?OS`?H D̀I'@?T`?by`?T?E+?:@K@)`?C#A@?$̀?J?L `?(Ā5ˠ???F?9`+ϼ?&?Q`?J6/ʀ??=?M?AW ?-?'oǀ? @?8?L `?K?E{ ?O߳ ?HK`?g@F`?3_@?C ?I`?W?I`5ˠ?G3?`?:fɀj߿ C?Z!?SР?/߳ ?%@!L3N;>?P ?GG@׀Q/րPH?0g`?HĀ?1>>>@@NcCL@?AW ?6`H#W C-HĠC@ AC`?DwΠ?TE ?!/ր.`?+/`BSi 9'@7G[ bBSU`BbL^w???N'@? ?W ?NO?]_ ^@E9L `??H _@C7Ѡ2oӀ4̀DDO!?@/??0g`?N@>ǵ?T?a`?TY?BoӀ?@$@?L@?[?Lo`1`Gƀ@Sؠ#_@<M#G '?>ǵ?L ?A?8?N۵?Q?(AC`. ?K?Y`?S}?D; ?FȠ?Ms?FW ?<?GG?RQ?Cs ;*??Nǵ?X@?[%?X}?1R`RIÀUˀ`+S}?DO?Y€?T Ϡ?N;?G[Ǡ?O?R@P{@JN`VaX#Q߳ ?I; ?J?AW ?@???#_@?@<Lo`?#ЀKk?)O?D@?1?KC@?G@@?3Ѐ?@+?8_@?;ϼG3P AR`]@K .OAL@9 JMø@$̀A`TE >?[?U5H@cP`_˳@??Q@$̀?C ??@?D͠?U^ѵL >;?U??I 7@?2G?B@+CP@A?^?hs?X ?&/ʀ?-?CЀ?)O@?C_@H E+?A?U@?J?E{ ?V%ʠ?W?,o`BG?B@?[`?P+?߳ ?D`??g@%?_@??>?6W ?F?Eˠ?Dc?=`EˠZ{ c``7G?Q ?S ?>`?Ak?Y ?_ ?S`?G@?3_@D͠VR@@g`:D@8 ?? ?0?=?B@?Aՠ4@E?CKр?P G?!?;/`?L@?T'`?E ?P`?P! #ЀM`T`XAŀRH@FɀOVɠFʠ?KC@?H7ŠJT͠3_@?15@BoӀJ(?K??KϼT-?M?Dc8Ā5????B?Z?Z]`?@Y`S ?;W?B?.O?J@?=׸5g`?NcQ/րVaQ?RԀ?^`?) C??NO?`?]_ ?9O<S_@`@SU`?5ˠ?E??C`?V?Z?9O2oӀ?Kϼ?WG?1`FɀC#?. >DJ0g`?;?A_@BoӀ@`&/ʀ?A/ր?P?)ONcB`?L `?Y à?B`F`8Ā?I?O?K?X?]i?I7oǀ3?C#?E{ @ S@C$̀BGG@???S-?T`>L) ?:?>w=TE \ ;@?@@?;/`?J?F`9'@R@U SРM@נ?=?G3DπLӺ?H ?VSG `?& AC` ?A6/ʀ6A/ր?6Ƞ?X ?^ѵ?VȠ?1DO+RC#?P??`?R) R[]???S`?'JK>?S?FW @@9O<HĠ?2oӀ?D`BҠL) ?K/`?cFр?b`?4HIWG[ټG`?;/`?R?Y à?Q?)`?B Ԁ?\o`?W@?&)`4@??"?B ?G@9?3Ѐ?@? ?_ ?:?S ?]?L5ˠ:?"@?2 2 D̀?#I J+?E ?Y`?P 2@L >?MK`?"@J+#?K?4H@ ?O߳ ?\G?FɀOXN@CKр6Si Xs;??+/`#8AJg@S Dc?@`?9P`P5?G ?Zq@?P5!????$̀) ?BoӀ?1Q9րPSؠB[A?8?S?S ?L ?NǵV[V/ʀ>?J?(UˀbtӀP?E@[C@Z??+ϼ?\[?Qՠ!?4O?A`1>?J?G `?I'@?Mø@?P]؀?]U@?Z9`XA?4'`6Ƞ?D?ZI?Yc?GG?*?J?X?H?8?9#?5 ?Q?Goǀ/?Gƀ6Ƞ???Q9ր?T'`?P?I`?Tm?W?$@V9`[ټVW T1@T;?R@?Q@AP`߳ ?D'`?@נAԠV1Ԡ?V%ʠ?U?2G???B[?B`;Q"@?U?S8VW U?$̀?O߳ ?AԠ?5??G?C ?Eg`WƀP?1>U+Vɠ@׀:߿ X-Š`5Goǀ????:?/?4?H?W) ?J߿ ?@?G `?< LE%@B`5ˠ?_ ?"oӀ?/߳ ?8 /߳ ߳ ?B? B@"@`M?*߿ ?G 9w€Og@?N'@?FC@?$O?J?P51ԠDwΠ?@{@?WG?_?`+?U{ ?M?DOB`Z߿ P??9?F`?7`?Fʠ?O ?@{@?8?BҠ>ǵ?, ?@??@?Hs?I; 1W U{ P?7@?U?Tm?9 5g`?$@?N`?1/րQ W@N@QZC?Y'@?^@?BoӀ2G;?E@?4O, ?D͠?W`?P@? Mø@XĀQkMYEP @?H_@?S7Ѡ?:?*0נ?G`?QM@?D@?3Ѐ?@g`?O??QW ?U+TCUˠ]K`-?M7AԠd b`I'@EY€TY??RԀ?\e?E DwΠ?$@?M׸?7 ?4?A?1?.`??7`?0נ?;?SЀ?Q?QՀ?Y`?9O?`! ?b3 ? ??XU@?U @? 8?@?> ?:??I?Q/ր&TOB@?9'@?J˿`?Q?D͠&$̀?:?H ??2G?+?*?;RE :߿ WY@:߿ ?@??&*߿ FW 8 KW[R@?&?FȠ?5?B ԀVN'@???N ?!?K?C@׀@?S`?Q%֠?1W 2oӀPSؠ??Qՠ?Qՠ?>'@?J@?4OF A/րJ߿ `]؀^OQ`Qu7G?I`?8?K/`?B6ȠFOg@TmPSؠ?1?T̀?GG:g@G@Si b@Z?Q?``7c``SWQYDO?@׀?U@?[ ?A/րNǵ5 ?PSؠ?M?87Š?B3 ?S_@?T; ?37Ѡ@?:g@?"oӀ??PSؠ?P ?L ?X ?J˿`?/?_˳@?aԠ#ЀHĠ?H?S?:?1?:?!?J߿ ?=7KD; >8Ā@+/`>'@1Ԡ?FȠ?L ?#Ѐ-60נ1T_ G3 O߳ 5g`?UI̠?M`*߿ >?$@@I`H QՀR@=?"@?_@*?9OB3 &?O?W@?A?$̀?R=?U?FC@?Nǵ?K@נKG[S?E???;WA`W 8?E??(0??@g`?IPI_B +ϼM׸ST͠\3^`J??@$O2 >AC`\3V/ʀ?A?MJS_XU@R) M???Q?R@?RҠ?Zg@?W@?< ?(????F +ϼ?J?I ?9'@2oӀB`?B?L@?5ˠ?Iw€?K>? ??P`U!6/ʀ?4O?%? ??>J˿`D@?Q?Q1?0?T1@?Og@#Ѐ?9 ?-`?;?8 %=`7 ߿ 2`T; VC@'oǀ?_@#_@?T'`?`l`?@T`?P?9>'@K D̀???5 ??$O6Ƞ3?7G?Tπ?``?` ?Kϼ0??.O?@??Tπ?AVW[ǠJ˿`^w]}'6R) 3߳ P5Dπ?C?T?U ?1/րH_@?5 Xd̀Y; Q?B?5@2@RQYOTYR[TH_@?#?9'@0Pq`K,o`;H> 87Š;W?1W ?I?+/`/߳ ?A?Z+?]#?UI̠?>`B ԀN'@>w6Goǀ;?=?@נ8_@6W ?P??SU`(_@ G[Ǡ.O?HĀ?TwΠ?[?U?P5G`?'?R`?9w€VC@U@J?Z]`SР?.`?M=[uD͠?6`DT'`Cs BoӀ?W@?R=?&/ʀ=IQ@TQՠE=׸?4@CЀQ?4̀?Q?<?5?@RGVFkMø@WeǀJ˿`?;?V`?[C@?N`߳ $̀?MX, ?CKр4@J???P@?HI`U ?5@?D@?P]؀? ?B?4wΠ) *?6Ƞ/߳ ?Qk?``?F/ʀM?@Sؠ?bV?Iw€U5N?2G?P! ?W@?I I`Tπ? ?R=?E?.O?P?RҠ?(Ā?Hs?T͠E>UˀdY_O ?) ?J7@R ?2G?P?@@׀HĠ?_ ?M_ 0 T ??E{ ?N;?&P @Q?_ ?M?E@C_@O˳@PIDπBT΀W@:߿ ??I`S_@??J{ @<?5???6/ʀ?>`+d|ΠM_ ;@M#BG?;?PI?D@@נ@Sؠ?"oӀ:Cs ?Aՠ?#_@Z]`X_@5ˠ&,o`. $̀?9 ?&2oӀ?E`?M׸:߿ 8?FC@?AԠ?0g`?4'`6/ʀJ@?DO?. ?S-?dh?W+/`4O?;?W ?d?aՠ?/߳ E@?;?X}?P׀?7`?MK`?Vʠ?H_@?6`MA?B??`5c`N ?4'`?8 O`01?Y?U@?>ǵ:T͠C?4̀A@Q?#_@?G3? 5@C N;?W@?P`J˿`W SSEg`?;/`?E{ ?9O?3:?_@?H?EE`R`???:?"@?E{ ?S:baL3>wT]K`OCQL S^O@׀?+[%^`?$̀?D; ??A?FW ?-?0@T̀ZC?6?Q?Z?AՠSРR L[Wy`@@?V?a ?Y`?@R 9?$̀F@g`?@+?B@?H@?Ms%@T1@S@?'@?H ?XĠ?a ?` ?W`?X?Z?]?`?W[Ǡ?0@?@?Q@?]}?R?Q/ր?Z?JES̀Q/ր)O?4'`6`O߳ 6/ʀ?E???>MsbҠXĀ?>O?Pנ?A`"oӀB?@?Cs 0g`?;@L@6?J@H7Š?5?2oӀ^wZ @ @2oӀ?K?Y1@?VȠ?G `??0??;@?5 Eg`W38Ā?D`?C  ??߳ ?Q B`aW ^Y U{ O˳@SP@FʠQX^Y_?4?@@KϼHĀ?P׀?Q%֠?,o`?B[?I?߳ 2`?8ĀR`N?6?Vɠ?Z ?Q ?+"oӀG@U?_!?cЀ?_q ?FK@J˿`3_@5@??2?O?T?2 DF%??F?Q?L `?J?Q%֠?W`?`?af?Y`?E ?B`?S-?SAр?E+ ??Qՠ?aՠ?\ɺ?C?4wΠ?5g`?M$O?A?=? !A\y@^ J1C7ѠPSؠI?*?H?6?*߿ ?/߳ AK/`?#??9w€@SؠE?U =?wC`E`?"?Fk)`?<@?Tπ?&/ʀB`=UY1@??AՠSTE TOP+FkKW@נ5g`O{> ?Qՠ?UI̠?<?"oӀ?7`&SAр<@?TwΠ?L `6>?>ǵ?(Ā?%@?"oӀ *?? ?>`?9`?O??XAŀ?A;W)`)`5@?N?Vk?@$̀?_ ?B Ԁ?I?H?9 ?@?1W ?K@?RԀ?H#>4@?) ?E?%?@ =7?$O?Hs?SЀ?[?`?_5?X?E@D͠NO$O$O@{@?(?J@?4'`2 AIÀIw€BG@V9`X7Š> ?7??7`. 5 @נ837Ѡ??M?R3 ?2@?7??A87Š?@Sؠ?>`=7?P?8Ā<@?7oǀ?N'@>J˿`Jg@>?C7Ѡ?Z?``?L ?5ˠ?>`4wΠ??@?8IO[ ` UI̠8K[[UˀD@?A?Va?P`?7G?E?1Ԡ\ Xs?Woǀ?_!?8_@?7G?2IQ@L `???/߳ ?'@AԠPS}+?V?S':߿ ?"@?3 > ?F?TwΠ?(J@@?C?!?8?BoӀ?0g`,o`1/ր>?&?3_@?F??@`?4@<@5ˠ>D'`U?Dπ?9w€K4wΠ?1BҠ[ WȀ?:?`@?^`?F?-?????Fʠ?D?3?Lo`?D͠B?S7Ѡ?9@+?@?BoӀ?/8_@FkC`?Uˠ?b. ?Y?9O? ??6?8?F/ʀ?Vʠ?Y ?K@Oc^;IÀSU`^1 Vk@g`-`?E+?J??3Ѐ?Q?T`P?Z{ ?G@?RҠ?9?AE R[M׸<E?ReӠ?g@?E ?7oǀ?Dπ8B3 ?, ?IÀ?A ?>O?S2` N`?37ѠEˠS??M?R ?FB[R@0?8?<?B3 ?_@Dc> 'oǀ.`? ?U ?[?6`6?>?6W ?4'`I'@H?@+?E ?/߳ ?>`?$@C@{@&/ʀC #_@?Nǵ?G `4̀?-`?P! 4@^@W`?8 ?^m?Ym ?8_@0 ?#_@?V?V?=7?HĠ?E{ `CKр?@??&CKр:(?F?X}?_@ES̀?8 @V L 4'`FW E9'@ -L `@?\ ?T`6W )O?';ϼDO3 '?D; ?VȠES̀hY?1AՠS-`?M7?[?SF`U`"@?4@@K? ??E???1?4'`?R@?V@?('?. ?A@?T`5@Y1?C B @ 3_@2 ?.`??.O?Si ?Vʠ???'@?P?&QVʠO?4wΠ?L@(HĠ8_@??H7Š?@נ߿ ?A?C_@??7?  ?@@?S ?Nǵ?=7:?;U RҠQ@KC@?4O?P?*?4̀?@?<?U?\ ?3 AC`?;@?@ 0@+>>'oǀIcGG ?_ ?Cs ?J%@=?,o`@g`\o`Y M7@@20 >?4'`??g@?Z+?d͠?T`%?5ˠ?Dπ AOYOV A?I`?TE N fȠS?G ?A/ր?4?I?TwΠ?]ø@?T;@HK`??'oǀB@`R[X@4'`?FȠ?AԠ?D; ?A` ?%??B@-_ 7`?"@9O>?Wy`?Iw€0?AԠ?@{@NcU5<?< ?,Dc,o`?@@?=_ ?S?WȀ@`RҀ?!/ր>ǵYeR@?B[OaC`Nǵ/?83Ѐ?) ?R=?KE@R`N'@G3?(_@?;@ @Q/ր?6E8?6?NO?JS;ϼM(?6?Q@?U?+/`?߳ ?Q?#ЀU VW QՠG ??@?3?Cs ?L `?5 J+D͠?6`?&/ʀB@@@?!?C?1:#Ѐ?L@?YE?XU@?@?LӺG@?ES̀?FȠ%?)`B Ԁ^Ob[R[?, ?6W M7V9`?O??SAр?Y`?X?Q/ր?Q9ր?J?< ?@נ?@FC@J1Ԡ?:?AK/`?APq`?8 ?QՀ?Nw?Q U G@??%?/I*߿ ?E??Goǀ?X?UW3cK??AԠ`@E@?Q%֠ShK`R@>3Ѐ?+/`?Q ?X?M9OQPSؠ>'@1UW[Ǡ?HĀ?UC ?S(_@?F?XU@?L >H_@H_@-?D͠?O?@?6?W ?7Z+`W 6?P ?Z?RҠ? 4O?1?6`?<?QՀ?C???1?J@?O{?7B[D?6`?PSؠ?%@V`NؠQ?߿ ?Eg`???DG@`\RoӀPIB?2 ?AԠ?0@?H?W?H#2oӀ7?&?TE ?X-Š?1Ԡ?P??D@@?0@?V9`?O{?"oӀ(Ā>ǵ@Sؠ?B?S-1/րM?0 5 YC?6?/?5.`BoӀ?6W ?$ONǵQa K. ?C_@?Og@?Z?P ]b> @???T͠?4'`?A?W=Msd`BҠ?:??Ak?O+???1?"oӀ0@7 ?3?F/ʀ?߳ N'@?S7Ѡ?c7Ѡ?;@ ?Qՠ?1?T; ?=_ '>?=_ ?'@C+/`?2G=?\e?Z?3_@XSЀ???R=?Zg@?T2GV9`C?;?O?Z?Uˠ><>>2`&. J?FC@?_@??=?߳ >'@<@B3 HĠ?߳ ?R?"oӀXĠ`ccРE@?LG?-`B3 ?=7?QC`) QՠF?߿ ?U5?T Ϡ+?E?d@?QE{ ?C?Z?H7Š87ŠG9 ?.`?M7?JE{ R ?&#T Ϡ ?:g@:?1/ր?P??C? RoӀ_5 ?-_ I'@?7oǀ@׀??'oǀ??;@??H_@?P @?HĠ?V`?a ?T΀?;q?W`?YW ?E?@30@A*@?:OX?Zm?YK ?Pދ?T?R97"C`H`j@*@IL.Uu r`RC`QQ? FۋOjˠUGT^_\Z6pڠ!*@5`I<BjT(vQQ_O@K`B\)dk`U F>Q P]C`?@r`R/PD?1?Bʠ?!UgUu ?($? &綀?=?KZ@?@@?KZ@?WT?=g`G 7U +=`Y{[F ??`?X>UgL>?0N`?L ?I?`?V ?Ya?)cTwa  bM]] _@PԠ?1} ?:v@@r`R@A*@?0@53H@Q?9|?Lf6@?Q =`8LJ@?GU ?6!`*@?R@?Z ?:@BC`QA@K gH$W@ۀUg?G1 ?W|I`?V?J?.7?綀?A !*@% F6綀N<`?B?IM`?KP?Qi6?J@?9: ?1C!*@NAO%`5`TF-I|)cPSlE = E FE/`!E3Pʼ@B/PP6Yk`G#$?0g?J'?Ojˠ?I<C6綀BC`J4;=`F RD@9c?AC?FI<?'6IaE  ?O᧠?W- ?% F<*@*@?2@?F?76+=`D IM`>&@?Jc'ݶM\?)a?Qt 76QC?L?[ۋ4@WraC9a(&@?S?UQ9aSˀG6?#0@?NA?E[ &@?@S`?X?Z4?KZ@:v@J@AՀPN`P?z?>??`?A*@7 B?9: >ݶH`5`53?᧠r`<`LI<?<`? =`=@OjˠL;q?5"?SlE ?OC-?I<?@Z?`v@?bD@?T?1-=>Uu ?B\H`QA@PԤ` \ @?AC?Zv@?E">Uu Iup@ ?z? =`?*?;d:OXYLPf?\=@K`<)O`WVMSEG;d?2SlE S`7n`?DF-?EGMޙ@\ E F>QH&@SN L*@;M?&@?K)A ?V] @?Q?!Ug@r`=ޙ@?GJ ?K?%[ :V0@TP`?4@?@6pڠ?!*@?Q ?PN`??`?zQ'6AՀa?W`?]@?Bʠ?Jv@?X?H`,zPދN?5`:v@?&@?F@J@W- ?F綀?\?5`IupG#$;q?I<?L?S?F@$Sj ] H ?/᧠D:@V] @DDYZ \ Q!*@?})6OV`1 ?LRf?3/᧠?F5l?0@]qZ ?71 ?1CN??Z'?F5l2C`?A?;qT:@YLAA@  F>Uu WWT!Ug??`?:?9a0N`J'C0@O/]U  ,*@?AՀ2W`Z;@a?YC?R~`?$>Q$ "\?7^?0?3Xu?Gra?1C?)a?T:@?\ ?Ya?Q4LB?2j?Lf6@?8&@8;q z?FI<?Pʼ@?AՀFRʠ?Fpڠ?b?FpڠU= B/P?KZ@?MhI<S`RD@?=`?5"?Gra?X?;d F?VH?W#$?$ ?Q?G ?0@?EG?Jc'0@RY: Ru">&@W6aF ?1} E"XV1Mg`>UgI<<*@3XuE`\ ZEpOjˠ`~g|I`[dA UGdA9aՀJOX8sUy; ]PB>?@ʼ@r`PN`?j@?P@??W`Xs @QGJ ?7^?]q?Mh=??5M@PN`?/᧠?6I<7 2C`+=`D@ ?* ?E F?7<`IcA-DB@??%5 FQ_~U.?:'?Kq?E[ ?L)?:OX??B@?Uu PfGn`?*@?G ?%[ PN`RD@??EoS=`H7n`? =`AՀQ8&@+ۋU= W`B`A-MhQ\4b \>H8{??1UgF5lYK M?+=`?7 3XuC0@?.?S?Pg?,z ?\I<?9|?BC`?Ov?&綀;M-g`=`?2\?G^?6綀'n`?AC?W?EL*@R@:OX0N`NAU"QA@6pڠ?D ?EoS1)c?A?,z?! ?M\?N ?M@?U)?Kd?B/P?R ?D$?C0@?F?C-K =`?H`?WU ?V!`?&I<E2&@F5lXV綀0r`?N7?Vy@?^ ?Xo@8LB?5[ >UgKM&@?O?G H$bS ?Ru?YK ?@ދ?F5l?DY?KM?Sv,4k`;@P?Q?Z ?B9a,z! KۋJ?6I<?Pg?C?*OX?@Z?C`'6I?`@r`>Q>Q QP{Pʼ@_9cSY`=ޙ@?4k4m@b c@AC?76'67^8DE/`HLJ@I-?@ʼ@?H`??jˠ?2@?@{?A?&y@?Ug`F?j@?E3?DF->71-?Q*@?V@?Kq?=ޙ@?/j@?;q?U  ?U.9?`U 0ދ?>Q 3 8RVU`Kx~`?3Xu?4QKO/]?J;@?\ ?a_O@?b%h`?R~`?(&@?6I<?5`?Dk?V?G`4F-?>}?I|M [A-?:?AUg?B/P?$6綀'6?!Ug?1 :v@KP1-?F?IL?Pq`?S? F=g`?`D@Wn`H>&@?0r`H&@d2^`X.@?S`?Q[?P@?^ ?X ?N@?LB#QYW V?\?MQQ3?QY&2b@L??᧠?: 4kS! RjI<?0N`&@%E/`UQ[Y`d-jjf?T@J?I?`?)[`Yc?:@?At OC-YW S&G^H`W=Wm?綀?Q*@?:OXG`U/`P"Z  ?/j@?/᧠?71 ? r`&y@?*@?3 >71Ug?U`?^s, ?PB?P ?N `?NUu ?&綀G?Dm@?YL?@ ACQ7UoS2\?B\@R,?*?X?_׿?\ ?@KqPN`@?:OX?Q?6y@?`?8LJ@?HVILWn`Q?P ?EoS?At ?G^?B?3?@,A?R?G#$Q-SD?0? r`B0N`0@?r`?Kd? FU= Y0Qs'n`AA@cI`]]?K=`?4 ?T?Q 7n`TRt%?@ZL^_V`S:? @?:48LJ@<)?@{?5S]E ?1*@?  FG#$Yk`Fy@?I|?>>&@?F!`?A$?z=@YJOX?D?.7@N`?3 8?Q-?P6)`?S`??᧠\ cI`P6@g?'6?X`?N?2?U?Ps@BC`@ދ8$R97MhK)A W=Bj?Jƀ?7U >Q?Q?QACUoS>Q ?\`?>Q ?R%h`?4F-F!`30@?UgE`<`?0N`5 F^_\Tc?J@8?WT?\?C?H`?X ?X?TR?Pދ?P?S:?%[ Xj@X+M?:4)P ClE ?@ʼ@?G#$??jˠ?Kǻ?AF] @H@Q=@YΕ_`Xj@C?6綀?AC?/C-? zDm@[ U)?2?IL?)c!*@E  Q?3Xu?Z?D 5`+ۋL S ?(&@?D A= ?Kx~`?HUu ?,*@?L?I&2?RC`?Ps@N-ր`~I"C`?!?Q?Ic?+M?S ?Sj ,zFDF-@@?綀%G Q?4m@A*@8?D@?H? 3 QC! @S`r`H`R\Ug?P]?P?A3QJc';`?\0r`D! ?/C-E3SN 4?C`?T!?Sj >Vf&@?=`?R?Qt %[ *?O?W?KM2\L):4#0@G6Ojˠ>Q?Q ?E`I<?+=`&@M@E?"\?QUg?Jc'?0N`1} ?76?VH?V?T@?D@?!*@&@>ݶAYLRu?>Uu ?:'CD3 8/C-R97J4&@CDU[ R%h`&y@?P ?Q-?*4 T@aOLB?QC?Pq`?&@: J;@F] @I<0ދH>}\Q?%`$ HVz?%[ Z4dM7^S! OV`?\?5 F?C?W=?Z?)c@ʼ@?A*@?N-ր?AՀ?QC?Sˀ?!*@3 80@BC`=0@-g`P],O`ZUx`VH?\?U>Q `ϰ QF綀Fpڠ?M+@?]?RM?AUg#0@O᧠P A0g>Q?0?6綀/j@Kۋ+M?ClE ?F?Lz?+MS @=\?Wra?W@ۀ?C?<` zCXu9?`3 84 ?ۋۋNUu  ?Yd`?L BC`*OXQ:4 m@?>Uu ?Ug?0N`?$ ?8?P]?F!`j@@?2@?B\?8&@< >Q?Z}?R끠! ?I?Sˀ9aIM`:'SRi@?'n`?P,A?PS`?+MILJKqSˀ1-?M?Dw? z9PZN>7H8{L)($1} U[rV`Kǻ?@?U/`?NCUGd2^`Z@7 < ;ۋ?2?I<j@? Ug F?C`?Kx~`?RD@?[Z`?Kx~`?)a?Q ?CPS`7U ?E?3Xu?C0@?HV?Mg`,BQ$FpڠX@TK`Kq>}@ދQPQKXMh>&@Ug?.Jd:@dV`M{5"?KP?Lz?'n`#T7?,z@N`@r`G`OC-Q ^P?^?`B PԤ^LB@ʼ@H AA@>Ug?T ?`f?N-ր?6pڠ?T`?C F!`%[ )cZY@@\pMS8$?Ug30@@N`?A?W- ?R끠?NUu ?NQ ?M?H?>-ր?7U 1UgUx`E3?N7?G?=ޙ@?Z?a`?VS#?0r`ݶB@@I: >7?7?EG?:@-g`I+ۋ?7 ?j@3 ?Z?VHE`?jˠ?<*@2jHIaSQO᧠H`QՀ>?YK ?MUu Qm@>?I?K=`?B?V+?Z@ r`SXu ?B6!`CQ?1C?B@B/P^ Mޙ@?X?W?`N7;MD M<*@?@,A?`6?b``QW#$J P Vy@7 ?*A-Pʼ@R`R97K@@5[ >N}Hs g:@J;@M_cXuO?,z?8&@?B`S9`YM`IL?+ۋ?4G1 V+S @Gra?%[ ?H`?26!`Gn`BC`?.Uu ?=g`?AՀ?W#$?Wˆ?24@??P6)`?R``2LRf4 JI?`?HLJ@?F8LJ@?4 ?W?RV2jUG! ?Y'?E`K)A ACK=`\ E?K?DY?= ??? ?Qs?cנ?U ?CXu?Z}?>Q [`C`?O?7 ?/C-?;qP{a_׿M\?Pr`?b끠?X?'n`9: Fpڠ:4?@?J ?EoS?U  ?^?F!`I&2:'UgKۋ8LJ@?Wra?V@&I<C ?2@?KM$?.Uu ?m@G=E"j@?"C`?H?;MUaՀ`;@a( X@0ދ?0@?3Xu?.,BG PԠKMUu ?QCG EGPZI:4Xj@aK: ?Yd`?a?X? TF-Xj@F綀?5`%_a6`TwYaT:@?G?[Z@?1 U Fy@?Kd?L*@?M@?_?U[ H@W=J?@?OH$Z@ދHLJ@T(v?%?:4H2?F5l?6!`8MH`7n`Q*@T#0@8&@W<>Q ?B,?3Q?Pg?Z4?A?G#$?b`?Z?A ?=Pr``@?1 ?X`?At ?D2^`?T ?zQ+ P]'6?N?Q 3Uy; Pq`=\2.">Q?76?FI<?3 :@N`Je Tw?% F?\f6@?AA@Jƀ?($?Je HD ?#%`C 8?3 8?=\D2^`PN`U `\4S Rj[MU.OvSb]AՀ?/᧠?53?%8G6\? FQai6d(va6`PԤ<*@QA@Z4M+@?CQ?Vy@?Z@Whz ?F] @?Lf6@J@AA@?NiD?TY?R`?Pދ?HV?8A ]C`"Z LRf?2?=7n`M>7?&@?z+M3HBʠ?R끠?[-րB/PWbPVpڠUg?D:@?N@>L"??j@E[ cq9eX`GPq`RMV+`EW=1} D [XP,ASX$YCT`3 8>R\bZ?Ug??0@?/᧠?U3?P?Z@?e/`?E"U?/C-?OjˠB,ClE ?6綀?D@?G1 M,O`+ۋ?($? F?>Q 6!`V`?綀?Sb]ACV@?Q?@Z430@?8s?-g`KS`?2\?YM`?r`bPdA9NA?< ?.Uu K=`)c?V!`?5`_%v[f??SXu?X?W?Q-?.7NUu VpڠG?C0@?MUgUy; N `?@ʼ@?PԤ?@g?j@>Q2j?a?VI<?SˀAi6HLJ@&@RC`U.?G ?53?ClE ?Uu ?:'?\?O9B/P?!?3 O~QK@g0@?&y@O_!@Q*@?Q?H`?Qs?%[ D ?"?P@?<*@HD?CQ?,*@RD@Jc'H c9`e"`P@ZH`71CF!`QQ7)a?F@?9*OX6A*@*?6!`?%?-ր?Q-?F!` @? F?D?U  ?DZ@d F@?W<?QUg5`?,B?Yk`?ET2^`V4k?71 ?53?/C-?@{?- D 0r`?P{?O᧠?;M?G1 ?;`KPI?L`?\*@?L >I<%`>ݶ?@ދ?$Dk=`?8LJ@C 83Q?[x~`?F5l?G^3 Ls?Uu >Q@r`?A-?0@Zv@an*\>R끠=@Iĭ`R * ?4@?$ >ݶ4k6I<!$?r`?Dm@?V`?@ދ@ދ?:@?9: [f`ދGra*1-FpڠQ?E/`?Ug>Q?@Z-g`C?E[ ?R끠?5`AL`?I<?R@?9: Q?V5l?S?.?8PދS:?Dk?cI`?d#??- 9|Q 9: ?C?- ? ?U?-g`?: 6y@Q1} ?+ۋ?Q?)L>`ދZYa`N\pTUu ?V?>-ր:? gH@^s, =\?UG?L)LRf\B?C-?T?G#$)?D@?NiD$ -g`?J;@?T2^`?Ov?P?\B?`)?1CW2@?]@?[ۋ??jˠ?!Ug? ?ۋ?Bʠ?6!`2j? r`?-g`H$Q#@O᧠S&6y@??6Kd?+M?Ia?- ?r`?;=`?QS0@>&@?Q`?S?37/C-: ?0@?Ri@?KP;dE  ?j@?9|&@/C-?0g?GU R@E F?C?,BK=`Q?30@?A?6綀??BC`?F綀?8LJ@!VfY3"\?UgR끠VJ4?Q_O@?R +=`V] @T ES]]Oj@30@J Q[C?1-?P?J?A-?Ps@?>Uu MSKǻK[)A H?L`?77n`?0@P]h︠eG&I<?S @?<*@H&@<`?E3?C?@?(s gN N ?-?[q?`{?V5l?T ?V] @?2@F?DY?eoS?by??`3`CXuKM! ?}9c?GJ ?X ?8$Uy; XLJ@2@?I|?>Uu :v@8&@ ?8LJ@?Pf? z_@ZOX?F?X>?76B,r`?I: ?>Uu .?,B?Nr`X D?H?A?"C`?0@? g9cDm@;=`GU CXu?< ?H&@?5[ ?2j?4?4 ?Dw?@6pڠHLJ@* ?1 :4@Z>&@`G^E`1 ?.Uu \D?j@?&I<BC``"Z WT?,z?>7?Q?3`?@ދ?5`j@Y0k.4k5T?S?Z1?>Uu Ug?$=`"C`%?C-0ދ?Ug&@?L?`s@?\ ?Iĭ`?8$ݶ8?1} ?Z4?\?>Q :'LBF] @?! ?,*@?$m@?A?Dm@?CQ?O`?T2^`?BVF!`C`?:4?@{?8&@?8<`@@?2C`K`dQH`?* ?: @MIBR%h`U"Bj?0@?8&@&@(&@?1 ?B@?+M? @?:@? R``U3% F?&綀@ZF @gE"C1 z?&y@?I<CXuNUu G^N}]\XV?G^?`r?H 30@?<)?EIbyfz@d2^`O?NUu ?J6I<? @?:@ClE IL30@Q?R/P?ZL?8?2?[`?X? ,B?2@?"C`6綀?: ?Y&2?R`?Bʠ?QC?H:v@LP6R@>?K`?]67?]{?WJ ?P{?C`?M ?Ojˠ:@M\?4@?E?1} ?m@GU @ ?C KǻgmU/`?L?LB?@g?N-ր?I3Xu=\?F?B\G^>?G ?Uek?Y&2?MݶVS#b`rYW3?N}Aa1} ?OBBi@?G^?G`?Q ?V?T@$B/P?Uu ?F7 @r`?KZ@?Bi@0r`?:'?4k7 ,*@$ ?QC?Kǻ4k?2j?D F@Rt?2C`?X@?S0@?;`?@{?9?`+ۋ ?3 8?9|?Q ?XLJ@?A*@F5lQ9a?>7?/᧠3Q?/C-?53??`?ۋ1Ug?AՀ?Vy@?30@?= Ug?P?_?RVE"B/P?8&I<C($Ia]\U  ?CXu?Sj Pfg`` PgTkQt Gn`0?< =`B?A?\?[3(?QUg?>7? =`NadCQ?PS`?E FPԤVQ SQ#@O/]RV?m@?W^?C-d^@Z?I: D@?7?c??V?=\?=@DkPԤ?C-B\?W1 ?a6`?SN Jc'W? F?DF-? z?1--g`Y{S &@I<AFU.\sB@?8sQA@X@?D?RP>I<? F2Kx~`?$m@?:OX6!`??jˠ?X$?SD?C>-րZ;@W%`=@?H$?YŠ?T ?3`1-Q?@{?0$ ?F!`?Whz ?C`GraR,z?R?Sj ?>-ր?5[ ?)c,*@?1 C ;q?I: ?Rײ@?UG?@S`@g9c?IM`?G#$JOXPr`.5 F?=`?NUu ?6!`N-րV] @=?BVAUgaZ@M,O`ILB~`QT:@1*@- ?=g`?A-($BQ_O@[rb ta`H$?J;@?6pڠS:`15[ǻEG?3Q?1Ug'n`?F@?^?2@Z;=`?&綀O9?A?cgQ`?Q ?8?F! 1?/᧠>=`?A-?S @?Iup?4kDkYcJe j@=ޙ@F] @PދS`FGU P@HVO9\H@[Y`=g`>QX``"Z ?=C 8A} =ޙ@@Z?B`?>Q Mޙ@GJ ?Q8LBN-րݶ0ދ?0N`?M?O9?O/]?F5l?Ug?+=`?7U OV`X8{?@ ?Je ?U `?J< VI<S 8K`N `@0r`:?>Uu ?T@?B@>}QJ'?!30@VHS @F] @4 %XcDP`+=`(s?*@4U.XBb] b\7 ?KM?@gJ4XZY@@U.Bʠ2C`$?:4?Sv,?YW ?;ۋJOXm@?0@C?!?HLJ@?8$?Kۋ"\?7U ?VS#?Iup?BC`??jˠ1} g>QDA +ۋ5`@ BC`?Ug?:@J;@PB?5`??C-&@?0g?@N`QPgX`HV;MMޙ@H< ۋ?F!`?7n`A} ?1 ?\ ?Mg`??`?F] @?\3Q!? =`?- *6pڠ?-?8$?B,?6I<QKI?`?QC?Sˀ?Kǻ?WT?Q?7?6I<"C`DF-BC`DHL)B`?Ug?m@?.Uu ?BC`H` Kq?8?9a?&I<*>?L*@?J?@S`?AQ>Q 0r`:@L*@RVF@?S?c9`?EZY'=\?AC?U `?Q??jˠ?6C! VH?8LJ@\FI<?N?U3?'n`X``lI?2\0BC`?:?:'Rʠb\`ʼ@G=?4m@Ug%`?7?= ?Qt ?]P@?Iup5 F7U E F4?>Q .LBUg?1?᧠B\?AC?6y@`g d?P6?I<KP`Ԡ_C-Ug?1C0g?+=`?Q76?D?[f?W1 ?'67U ?Bi@?=\ClE ?8?X?C`?3 ?Lf6@?9cDkG6?@N`?Qt 9aQs? ?5[ 8N `Z'K?C`?;q?5`?Ojˠ?8?!*@?OV`?CXu>7E FAՀF] @P,APr`B/P.Uu ?2\?:FKq?=@?4?᧠2j6y@3Xu?WraJ?/C-?H8{?R``?B~`Hs&綀?Q[?'n`T:@^K^};d?G^E[ \sClE ??jˠ$IM`r` c0@d^? ?4m@RC`OjˠBV?%`?Wm?B\Bj?5?1 M@!Ug?W- ?UG Dk?:OX?L`?Ug?1 ??H?C CD0ދ?7^?+M?(s?/C-?;M?Wra?b%h`?UQݶ?)a?PԠ?N?8s?;q?AUg?;=`?<`9cRV$?C 8)CXu =`?B?R\?L*@0gF綀0@?FH?T}M r`?Bi@3XuPN`D E3U= Vz@E" F?%?Iĭ`?I|JOX_`W%`R~`R/PIĭ`BV2\I<1 r`:'E ?ۋ?OC-?Q#@?NA?-?C-??I?`?L*@?O᧠?R~`?TF-?M??C-?W?`I?:v@?$ ?Z'?QUg$1UgJc'Mޙ@??Dw?Uy; ?W=.KM?MS?Yup?=ޙ@2@8?9?+MB,8s?M?Q#@+M3`?CXu?2j?M@?O~?6I<?綀?PԤ?:v@X&@Z@NOV`5[ ?C ?H ?JOX?E  >QF5lSF ?! [=`oC-cS<)E/`/j@?G=?:v@?;M?S?U= ?IL?0?(&@? gM\UGG^Tk^7N}C`IaAUgQ+ Q-?DwTk:'?JUgQՀH8{?1-?M,O`?:'?&y@?j@VpڠIĭ`#Q8&@9?`? ?G1 ?CN7Z@D1C$m@?Mh?U?At #0@!?E/`?R끠?r`Qi6D@2jC`5`???O9?K?! =\54m@KMPԠE2@?&@8s?a?P"Z ?< >Uu <*@!*@?A} ?FI?`\`Xo@Uek$m@?T?@H8{D:@(&@?53?1C?>=`?Kǻ?綀=`?M{?G`2@ r`?S?^A?G^@ 0?r`7CXu;dI<'6;ۋ?+=`?1} T@?5`?_9E`?V!`?1 ?Fy@?D2^`NUu N}B\S @?Je ?2@QKU_@#0@?F綀2Pr`>Q=`S @H8{B@X V+Mޙ@[ǻcDaZ[`T:@?Q?AՀ?*@?A ?Je ?@7n`,z=ޙ@LB8?E`?E  .Ai6ERi@L?\?3 ???=?Vpڠ?X$>Uu _K)A ?5A WˆC?K?Tm@?H?Lf6@?^s, ?^ ?9cI?`Pʼ@SIa?<`?Ojˠ?;=`($=\4@?$?6pڠ?.76I%?'n`E FL*@<`CXu&@?DF-5WX V4k?Ov?:4C 8;q? ?8LJ@RtH?6y@?8? ?綀6I< F?SlE ?]67?A3Q?1}  FPN`H?53?Kۋ?m@@Z?NA?a} ?TY?7 ?YW ?\?@{?5[ ?0r`7^?4?F3*?At >QJ'PBD2^`?$m@`E F gQGU 1?'n`4F-?᧠?jˠG F] @Jv@N@?z?MS?1 : ?D:@?Ojˠ.Uu S9`YΕ[ѣ@Oz9aQ 1-?+ۋ?ClE ?SXu?R97>ZY@@@N`?CB@]@M?=ޙ@?At ?B?[B?g%`?dF`?H:@F@UGX3Xu?Ic?=g`:4P,AQ Dw?`?;=`?`>?F ?>Uu IcKZ@8QSXu?`?L?HV?-g`8LJ@0@?9a)cC 0N`>Q?2C`?5 F*OX6pڠ?2C`?J;@?:@ދKǻO~RVUu ?HLJ@&@=`?P6?@ʼ@EoSF!`?2@?X?T#?@ ?a#@?b>+G^r`?PN`?3 >?:?4k?D ?C0N`0@?1 3Q4 A*@R/PFI<- ?&y@ F?"?C`?AUg?AC?NA?T?V?J >&@?4 ?I&2DF-aOS?=@?4m@@,ANT`G 4@OC-L>:OXQA@D < AC? =`?B/P?9c?($?/᧠?Q7n`"\?@?%[ 2j?B/P?Pr`?z0@?O?Y'?NUu '1 9? .Uu D?1Ug< KPJ'QO`?K)A ?I|?Bʠ?M+@?LRf?j@?&@Kۋ_׿U)?:v@?U_@?F] @3Xu:OX&綀2\1Ug1*@?`1 ?4F-?BV?9?= ?Gra?UgKd7^,zU[ RM: Gra?"C`?X.@?P@?2C`@6?Q?a  ?B:v@?.?C aK`?2I|P,A?0ދ?< z8sG#$CAA@G66pڠ9PN`5[ ?K=`?I: ?Hs?S! ?Ls?)?`0@:OX g?A ?G ?2@0N`*@?3Q6綀ab4?SD?Tm@?:FJv@5 F@ʼ@C`7U 9aI<? ACC ??᧠?Sv,?KP% FBV?&綀?71 &y@?- ?JOX?I?Rt?RC`?? ?.Uu %`LG^?.7?A-?6綀?4kA*@V`>?> @1Ug?H@?Ze ?Xo@?E?&@?1} ?I|?Sv,?U?6y@WV`ZL Ug;MFH!*@???H?GU ?1\?Ug?(s?3Q?%[ ?&綀?C 8? @B?I&2?[d?AA@ F3 8Kǻ?<)?Ya?@g?Uu ? FNQ ?m@?^Q ?O>@;``Z#Q?+=`_b`6!` zNiDL@@6y@4=COC-Rʠ(s?HV??j@?E?[=`?Sj 8G1 =g`T(v]67R97C! FJ@Iĭ`Ug?DF-CXu_@KP?Ls?IM`@ YWZmG>Q2C`TF-T ?m@?Ai68LJ@7n`?B?Uek?ZY@@?Fpڠ?`I<?6I<4m@>=`?E  ? ?4k`?᧠$m@?'1 *OXKq9: ?CXu?@ʼ@?0@?30@GU  ?3 8?Sv,?0g?0@?UQ?\ @?Ze ?G#$Q*@T?Bi@?b97?b?PG6S:OX4F-M5?PԤ?YM`?UG?K)A ?>Uu ?Kd?W|I`?Vz@?J4 r`=@?F?P?綀?D ?[3(?U?Q?6I<A} ?Fy@?W%` A*@? zAi6m@?Q*@?3 B,*@\S?* m@aa??;=`C,z?A*@?B/P?F綀?E[ *OXQՀRFHHU FA*@?U/`?Ri@RC`[Y`7 @U[ C?0@0N`C`P6)`E`?C0@?,BTkH?$m@N-ր`{`B a\ <)9: `ʼ@cנF ?6!`?4 ?E/`?B@?5"?R,?Sb]?r`ar`C0@+=`?r`IaI|Q ! ?9c?4 D H$?L?ZEp? zF!`?0r` Mg`? FM\3Xu?E F?9?`?A*@?0N`]e`/j@?a+ ?`r`?0ދIM`?Q?GU A- r`?T?TF-?9:  .?7?Y|?c?a6`?0r`Q[?2j?Yd`?8LJ@D4F-1 ?:4?/j@Bʠ?"?O~? r`Q?C?8&@?)Uu T[dKǻ% FF ;`Iup`ZYa?IL?W6?7^?Bi@?V+?Rʠ?Qs?R/P?;ۋ?r`?9|?@Pʼ@\ M@?R`?Sv,X`fOV` =`@{?,*@?O᧠?@g\H&@SlE -g`?綀F ?5"OC-TRI&2a`izcXBbAՀ]\bV!`E ?1*@?V] @?CDK=`8LJ@?71 Q->Uu Hs/C-/᧠PfBʠ?4F-?"\?*OX?H?&綀PS`3 8?` ?`ND:@V@?2?5 FP6)`SXuW_᧠PS`\<`:'.7W=a[B,?Q7?FI<7^D2^`?Hs?J8$Iup?綀?/C-.Uu +=`>7J? ?[Z`?b%h`?DS0@8s?RV?2\OvOj@F%? ACBʠ?6?Ic?K`?Kq?:@"\L [F ^ WJ =\'n`BVLf6@\]g`1 ?D 6pڠ&@?Tm@?O/]?=`Ug?&@?N7?_?Ux`0@E8&@?;q?7Z@gE@WJ @@SM?a?9: ?B@?j@J=@&@B+ۋ?.Uu 3Xu?&綀?5``s@kY`V5RtSDOW|I`I&2?H?AA@HM{B`Bj:v@0r`?ۋ?Iĭ`?4m@LBV?. F/C-? @#0@.Uu ?J ?`6)`?V2@N`???.JOXN N-րUoSLs?/C-?D ?3Xu?0g?6?$- @r`A-?4@?J;`PB&@/C-V綀OQ?2C`?D?'1 K`=ޙ@?LB?U `?;ۋF9: ?@N`?Ug?C-&@? F?1 ?>Q ?4@?! ?E`?N ?DY?6pڠ?m@/᧠"\?1*@QF!`?=`?Bi@?&@>ݶCX`P@H]`T(v?@S`?$ SlE S ?jˠ?: ?QՀ?Uu ?: ?Ug@{L D2^`??R97?^iD?PCDFI<?\1-SXuX@K?C0@?V ?M@?E F?Uy; ?V?A*@ z?z?AՀ?G^?$m@5?B\?Y?`?QK?L ?^7?Y{$m@SˀJc'?Q-?aA@? FYΕ綀?0XW6a?6pڠ?D ?9: ,B?@N`?V ?F@0A- UgC`D:@?#Q?1 6I<?4 ?T ?[?X&@?< ;ۋ>?=?1-?Pr`?`]?Qi64?8?E[ ? z?Pf?Wn`?A-?'6r`SlE R~`/j@Qs_jˠH ?,z$E3Sv,W A? gF@UGO`N@T(vWX@P"Z EL)a?HV?r`D= EG@N`? F=`EGV`^@AՀ?PB?2Lf6@/C-?@I<R``P?5[ ?SN ?G1 !UgIcNQ 8&@?B?R ?At :'$?Fy@?(&@U[ ` T@?6I<?G#$:&@?\ ?Z2j8s?Dw?Gra?G ?H`? ??Dk?1*@?B@?WU ?8LJ@Hs! ?"C`??%?E"r`?>Uu ?U`?zJ ?4F-3 ??Yd`?e  ?Z@?SXu?Tw?AUgD2^`a<``s@?7^?Vf(&@T Q R\EoS?,z?\(s?8LJ@W=\D2^`?F ?<)O/]H$?@ zQ*@IAt &y@?Dm@?2jQ_M`q`V ;M?UgB`C(&@JTc?Q?M?1 @1UgM K4F-,B5 Fj@?H`?WT?CDEoSJ;@?C-#0@? F<*@>7?6 Q-?B@2j7?C0@?;q3 GM+@?\zU ?X@?RQ[G`0@UGT?*@= ?6?AUg? ? F?0@HU\?Qi6!*@Q F?Lf6@?R`?TR?E3>Ug?@N`?8$ILDw?At 4 ?RtRײ@% F?` ?]+@?6!`?0r`?M?Lz?>A*@`Ԥ\ @?G^?V!`C`Vy@8&@5[ Kǻ@N`2$?A} ?9E FL`#Q?G6?A*@E =?F綀QT PBNKǻ?m@%\a*@Xo@]Ա`];d?D:@JOXV?1*@?5`IL$ ?6綀-g`??5"4 $m@?.70@?B?T(v?T ?\= ?F ?J! ?'6?K?0@9|A3 ?B?JI<Ug?EG?4F-;dNRC`5`>-րa#@R@?[?E a} ]@Lz\ `fH8{?R?b t?RP ?SN ?dA9?SDAt :v@?C 8?N7?J?A} 9?`G`?IM`?Z'?76&@?C? 'n`?T2^`?^ `?N `?BV?Bj%[ ;`>=`?"\?H ?ZOXP?QC?`?4m@PԠ<*@?*OX?a? F9aWmT@?76?F Q} [)A 71 ۋP{Qt N RN@}BAA@?QC?UG% F>Q?T(v?Q#@?@ދ?Ls?T2^`?RP?O?N7?Q?BC`A F綀:4Dk4 ?a9c"?ADF-^@PZ-g`0@I<?3Q?T ?S?!*@?7?Z@?]@?F@?,B?M\?S?C`?!*@5[ 8LJ@?71 ?8I<?MS?RPH@UG?H$?ZY@@?&I<8$?@ދ??᧠* Q??jˠ?CQ?<)$ ?^K?U`L)S9`"C`ADYIaV`U[ )?30@I&2S z?*OXIOV`D2^`PN`[=`Z @Z?<*@,*@M@{4  ?BC`?`HE>Uu ?#Q?S ?4`ʼ@bM* ?6pڠRײ@W@ZLzKۋ?KZ@?P"Z B`G#$&@?*@?!UgAi62\?Q?@HV?>Uu ?[`?L>? @0@?D ?J'4kF?Uu ?Ic?Tc?^7@?_C-?SQ?8&@?.7?A?QL ?C-?;`?0ދ?%`?K`?Q?DwL*@E>ݶ?>7?]?f?T@?F@]Tw?A ?@g@ #Q?S:?Z@?V+?VI<?L 'n`B8$5QAt ?YW ?X P,A\0?! Q`X KLRfUekC`?5[ ?.5[ ?6!`?V?%`W#$UoSG`HsLM+@RD@W<VJƀ1*@>-ր2C`?H`?A-P`Vf8? r`=\V`T;`.4k?\>? =`?G=?KZ@?0ދQ?1 ?H`?Q+ ?2C`ILP,A@ 6S 8Y`K)A G6U.Qt FHAՀ F?/j@?6綀&@QA@<)?Sj ?(sTm@?AA@?`N?Kx~`?71 ?Mޙ@?:v@#Q?'6?C`???C-?Q`?SXu?W=?VI<WQ+ '6?#Q?E ?TP`?R?Oj@?N?B?-Q7U  F?Uu ?&I<?_~?k?He"``X@?CXu?R5Tk53?Sb]?]t`?TwIc0@?6y@?@N`?0@N-ր@g?V?W#$5`MS0?!UgI<IL]c! _~?j@?B\?K=`?C`?)c?8: NR@XT(v>=g`HVG=OT@QF5l? ?K`?0@[r`6)`H$?5?@,A9: U Q[5[ r`)c>:v@?1?I: ??jˠ$!? F?᧠G?71 ?I8LJ@S:U"X`SDHO᧠Sj E  ?E?W ?Q#@?H?BV=g`5`?PB?B\=@?G ?Zƀ?Jƀ?Jv@?T&@?'1 E`Z1SBjC 8?C-B,S`P,AQM\URVDm@@C`I|LY?`W@ۀ?2j?N@9cRD@M+@S Zc'N@?7 ?Gn`??H@?:4?,B?Pf?HLJ@"\?J'?V5l76M\?$ @)c?D?"C`E2(&@Q?D!*@S&@?T:@/C-\[ ?1C?h ?a?>7?N?T2^`?0r`">Q?Ug?:4?Q_O@?`Ԥ?el@?]`?4,*@?$?0r`?)a?K)A ?Kq?At ?9?`?>-ր?S?Mޙ@? g?N7?]@?N1 /C-C`M+@8$? zI<5 FHsL*@)c,BU  XPN`O@;M?FH??C-ELf6@;M6I<89?`C`L)RYM`WVNQ J4PL Ai6EoSTE"?W6?`B ?5` ?NQ ?=\C 6I<5[ Fpڠ?0r`?Wra?QK3XuNQ .?At M>Uu ?H`?D B,@ދ?J@?O~? @ g?2C`?F] @?Q?C A7n`??Z ?[f?6綀?Bi@?Q* M?R\?f?Kx~`Whz G^?-/᧠(&@?'6&@?%[ ?EG?BV?1 Q?=g`?<`*@9a??Ov?O9?F5l?AՀ?;q?QՀ?DB?"?X ?S?1C'n`EE[ >ݶQ@Z4m@ @,AJOXNR\JOX=ޙ@IC 8?0ދ?Uu 9?1} ?P`?>}BjG#$>ݶ?,*@DS`UG_C-b @X`S S9`A-5`4@?Q?X>@,AQ ?@,A?A IaSN Q-Dm@?E3?Z ?Q=`@ ($?#0@Ug?j@?jˠ?1?E"&綀E?5?Tm@?Q+ ?HV?@Z?:?D@?B,?,B?@ ?B`3`7 ?:46?X$?clE ?QՀ?D?8Sj Q-?E/`?E/`?AUg?T@?H`?At ?_᧠?a<`?Ojˠ?FH?E>ݶ76?2C`?G6D _%vSj DYM{$?G?D ?HV?DkJa( W^?.7?5[ O᧠UG:OX?J@?X?"\&@0N`?9|(&@]67T@?A?N?BV?!*@J@R@At C0@Oj@r`?J'7`Ԡ_E8&@P`OV`?E"?W^?SD?G#$>I<=`?G6?L)?=g`?F綀?S`?P6)`?G=?Q?M,O` 0@?Lz??jˠ53?D?^?YW?Ov?L ?7^2@ ?Fpڠ?K?r`C30@1W|I`\z5`?!*@FI<>7BC`!Ug?E`?6!`?B@?RV?2=`?Kǻ?Fy@?綀?6I<?I: ?L ?`R QՀ@Z0r`?3 ? zJe 4k?G^?R?Yĭ`?P LRf\Ls?:?6QK_^Y?`#Q?X 53 8F5l* E`;@X.@)a>&@>I<RP\4I@N1 ?P@30@b]?1Ug?PQU_@W`TP`[3(ai6Z@D@6I<Jv@E3?EoS?J@P`]ޙ@R,T V`I?`TZL,*@?3XuO9YWn`X$OQ?Q-?d ?hLJ@?[=`?@ދ?6綀? F F?R`?dA9?bײ@?X?ZL?Y: ?<)?=`?FI<?,*@9: ?E`?Y0?G1 ?5`?Rt?PI>Q?"\?G?#0@A >ݶ?AUg:4Yĭ`V`F] @Sˀ`YM`1} ?@S`?9c9cB`?6?1} MSIc!*@BC`@ʼ@?At ?\>?d@?XC! Gn`?5`?E?O᧠?F] @8&@>Uu ?a?D?U  ?Kx~`2C`0r`?+ۋ?8?=4kX Ze 'n`?XV1?jˠ?)a= D PW^IupDm@V5lKd*OXPԤPs@?+ۋ?I<QUgF綀?QL^LB?A?5"?C-<`?\?/C-1*@W b Z `?Kǻ?P@?E`G#$c 8_j@>;`F] @&綀"?BV?=@S`U`_jˠZEpGD@6y@?S @?`ʼ@?UoS?;`?8s?@Z?9c?Mg`?bC`?d@?Q+ ?ۋ?a?!Ug?!Ug?z,z6!`=`'1 EoS&@?S9`?Sb]?DF-?R`?Sb]z6!`?Rʠ?U `6!`L>Ug?"\:4:@r`?@S`?KP1} [)A FI<?R%h`?BB@"\ @H2\?N@?`]?hx?d?O@?J?C! 9a-?/j@綀1 \0g?&I<?3Q?*?E ?9: /᧠?%`?1} ?j@?jˠ?E?W%`<*@?C`8sTV綀NQ 2C`S0@bPU)-=\?8?U `#Q^}Z V`v@Z4\?.Uu Oj@Q[?!?G#$?Bj?3 Dm@ZmTw>&@?PN`?R`?#0@W``N`E`?AC? =`>}$"@gJ4J4,B5V+Oj@?5`?#QEG^:@Q?7^?N ?[)A ?U  ?A ?U"?_C-?76WVZ;@M@D:@CQ?1 ?A3XuS @ʼ@?J ?PS`?`? F?W ?_@?C0@?1 ?Pf?@ދQI: ?@r`?4m@?:'?^s, ?b>+?Uy; ?DkE  Y|?a?]{?OC-?3Xu?K=`?!*@NiD6pڠ?C 8?O~?Tk?Q?S0@?Ze ??T:@PZ.7?&@?H?F9c??)c?Fpڠ?K`?r`G=8s>Q ?Q?:@?I: ?2C`?E Jƀ^8Yc2?"C`ZLg@ۀV+-g`5`?Gra?R\Ma<`X>]eV@Y'?1 9a_Z #Q?! ݶR\H$?a?3`3KZ@?'6?V+?2C`Q`IAi6< ?HLJ@?SD?m@2C`?@?P?H`? F<*@B`-րFT@PԠ5"/᧠K=`YZe >Uu ?@{?&@,z?&@:@KM#?UQa_O@R/P($<`Q^8^84m@?AՀ>?4F-?F5lE/`@g??j@?`b?^?P6?^?bܦ ?S @?E/`?D2^`?:4?B~`>QT\4W%`B?AC?Q7?^7?e ?`]?SQ?X>?Zƀ?T?N7?8$)c,*@D[fUy; ?1-r`Uy; A ?"F] @B~`?*?4@?G1 ?< L*@FI<?6>I<EGA ?`?B~`4@U/`,z?P"Z ?1 F] @8$GQQ?Kd?CD?30@??C-?<`? FQ?`:@A?=?>D?(&@?@r`?I&25`]ޙ@R\?Q?VP,AaUg3 8?Pދ?.7;ۋ<)(s?N?[M?K?`Iĭ`;q?5[ ?!*@CDF綀H`Yd`_%vDk?,z2@@?@g0ދN-ր8&@Hd`eOv?!?0g?C`?9a;ۋ6綀30@C ?Uu ?&@X`L ?0g= F Uu "C`?:'?M@?(&@#Q=`z?(&@?- Q?3Xu(sN ?#?SD?@{?&I<??`QDw=\?4@?O@?Kx~`?r`G6P@>Uu >=`B@K)A ?5`?L)?1?Gn`S0@?3*OX`ދZOX?7U ?4m@[Y`dN??C-?UgI?`J g?L)?Qs?C`?Bʠ?4m@='1 ?Bʠ$m@YCZ}OvQ#@Q+ 40ދQt J*@H8{P@6pڠC\`^Uu J'=g`C?Uu ??᧠2MY: `6Hs?Ai6UgQ-W68?]\?\4($j@?BV(&@H`>}?6!`?LQA?9c0@ZOX]CSIĭ`C`6I<?G6?V綀?@ʼ@F綀TRQ $?ClE ?A 0r`?8?\R 2\?N `?*@0N`綀D*OX?N}?K?)c?`A?FI<?K:':OX&綀B,?2?V] @?SN ?PI?Pq`??᧠,*@G66y@?H`?NQ UgM+@P6)`@>Q SDS! $m@?J?U`?WraU/`?&@E`buUoS?+ۋA a e  \H Dm@LsE[ Ug?9c FD 71 >=`1*@BLzX]X`L):v@#>2jJIĭ`F!`JƀE`8&@1/C-.*OXDV!`R/P3Q@3 8UQcI`S! ?A?DY?1 @@>Q ?P@?T2^`1*@/j@?Dm@??C-?E`?W?\p?O~;ۋ>7?@g?ۋD:@E  RuV綀F!`5"V+_׿Q} 2C`I<?A?:?76?P ?P?2F>}? F:?3Xu?`2?G6?C? g=\BV?F?HsC ?F@0ދ.7?N@?Pr`?:@#QHS VpڠN}Q?,z>&@>&@aO[ NUu ?"?O?`N`?`15?Q?+MRC`]ޙ@\?Pʼ@ gRjRMKǻ>Uu "\?#?D?PN`?PZ?=\?PԠPN`KdPB\[Z`Bi@z@S`@S`7ClE :v@?1?4F-#Q>Ug? CXu?jˠ?G1 ?R`?J4?76G1 P ?$m@?PԠ?Pދ>SE ?8LJ@>ݶ'1 :@#0@r`< ?>Uu ?[ѣ@?[?[Z`?]h?U?71 8$&綀?#0@&@?A ?O94?;d?%[ L_@a_O@Iup?"\?,B?B>QFpڠ?2?P?@S`?ۋ9: KPM\K=`*QCD?*?V@?Q`?G#$?:OX=`?9|?&綀<)?N ?X:Mg`?9?`?2H`SY{\)QC#'6F綀1Ug??C-?A*@QS 8Wn``?HV?Ia?W|I`?U= ?RV?2C`TcRʠ?AՀ?O᧠?%[ ?m@?=g`?BV?F@?Ov?W`?]Ա?ZOX?Sv,?Q7?J;@'n`W|I`W%`CXuDm@H8{?3 8?>-րM@W`QR At ?EG?Q HV?BC`?Mh?8s&@@Z6#Tw]OvFP6S @@g?Tm@?be ?[n?N ?*=3Xu?(s?0r`0:4?F5l?SlE ?@ʼ@?M+@?U[ ?/j@\?(s9c:OX&@?I<5"FI<? F>=`H`?jˠ6I<IAI<aO`X.@#?Uek?T?Sv,?S! ?AC?* I< ?T ?S 8HI?=g`Mޙ@*?&@DF-?U?Kx~`F@.Uu ?Kx~`?@N`/C-G :'?G6?Dm@Q?0g?&@?U ?$R/P@g?9: I<1Ug?0N`?;ۋ?6?=\?F@?TR?X?F@*@?Q?P@?H`QX?71 ?LB:OX7U ?aR~`_RtG1 >Uu ?*@Bi@^Q = ?_t@?],O`?Iĭ`?D?71 ?=?7Mg`M?6:v@X`F@= NKPU_@_j@S`.7=ޙ@Qi66!`?Uek?Z@?F@GU Jƀ?2j?N}?6I<@ʼ@E[ ?$m@?>?*?O9?RM??M?bP?T}?* OW|I`Ps@B8$?A*@?U= ?P6)`?A?.7?"\?Fpڠ?F? g?;`??᧠H&@P?KZ@?Z$m@Iup?Ru?Wn`r`?>7?\ ?O/]2C`0N`?F5l?T?23Xu?B/P?@S`?QLz?-?@N`= 0N`?3/᧠H$E`: ?j@?.Uu @R/PJ?)?AKqW^?4k?IcRVRi@??jˠ?1 Q-G=E`PS`;ۋM\e_@Z?T?a?Q} ?&綀7??<`=\2@?H$:4UG?,*@?- YΕU `??* ?8LJ@?Q?G=?:?H&@?M@?3Xu?&@'1 ?2\?V@?S?->Ug?0?E?F綀?@?!?!Ug@{??j@?`f?XBb?Ri@?`]?Yc?Bj?D@?J;@?Pg?Z1?^s, ?VS#?($M+@PZD@+=`?2?0ދCYK Xj@8?E`?PN`?N}?= (sUu ?J ?[B?V"C`XV1V綀?2\?T:@DaA@*OX?QA@Q?Bʠ?a?Tm@E FL`?7 ?PB?1 Ug?V5l?X ?0ދ= @ʼ@?G1 ?ݶ?B`@N`S0@M+@Ai63 GU)NiD7"C`G Z RMHV[F P@?TY?Vz@I<@,AR\ @< ?@[3(_9E`Q?A\,BA2?A-?,z?!?PB?H8{?6綀?VS#?E  ^#\[ ?A?Y?W?XV1?P6$.?Gn`?T`?Pʼ@?E`?53?Kq?XV?H&@?j@?M?Xj@?[f?[=`?>:@?\&@?E"?Ls?J4?Lf6@ zC`? Fm@@ދ?E`?[n?RM?8s#IH$?)c?PI?O?/᧠9cD:@J@C ?0@?Jc'?9|;ME3??C-?[M?KME"JG 2\?KZ@?,*@RC`\?F:?1 ?Yk`?KۋS:`ԤRt>6!`FI<?Uu ?@r`= =ޙ@?\?Iup2V5l53?5`BC`Ls8&@ =`Q`,AU9?`:@8$Ai6] d&@+MM  ?,*@53?5`?Q ?Iĭ`?CXuV!`Y`9|?;=`?@g?C`?L)?NUu ?PN`?XBb?`'M?_9E`?S?;M?4 ?9a071 ?A ?LRf?Q?YM`?< AA@?OC-?]67?BC`?! ???"C`= RT`=`>QBi@[Z`]Rײ@QA@KM>Q W`c{ M?M?F@綀F@W#$Y{TF-:@?WV?_^?Ai6?;M?JFHP ?Je ?B,N-ր.Uu ?Bʠ.Uu 3Q?30@53Q*@AC?&@ CG1 8LJ@?$m@?Ru?a?aՀ?Y3?Y?[Z`?U_@??`9|LRfM@F At I4@?Jv@?*J ?J ?bH@?Mޙ@?&@?1} (&@.?I<?1*@?%[ HAA@#M,O`KZ@C`Q>?SlE (&@Tm@?)a?V0@?6I<V`U`?Ug?-g`?X?Tm@* /C-?1 ?G1 ?YL?X ?QA@?\?by?_t@?S @+M3Q?X?_V`?=CSj Sa?C0@?*A} RVD:@TYO;`>-րL`Q7M@ ?H ??C-30@($?%[ .7G6H QRPEGMU ?8?` ?O9C 8Q_O@XZSlE * ?V?Yk`?/᧠?0N`?C`F] @F@?R\?Pg-րLRf[r_H@?C 8?L)?(s?9a?F ?N}?Yd`?X`?F?BV?Iup?J?@?jˠNUu &@?71 '6B,>Q?R,?JD.Uu ?J?!*@ r`?-g`@{.Uu ?P,A?I?F@?TR?Kǻ?E?D@ʼ@Q-LKx~`?4F-?R~`>Q?%?a ?aO V3Xu?H1C>7?Y`?]J`??\?G6?@S`?D?Q`?U[ ?Tk?Rײ@?W|I`?L)PfPf?O~?Sb]($J'C ?#?L ?N-ր?R/P?TP`?4m@Dm@V[Z@S9`BʠJVHSlE ?@?"4 5`% F&@?$?4 QGE EGG ?C`?Z@?0NUu F!`< *OXUg>&@?H`?L8LJ@Jc'B@O@B`?EoS?Bj4@FHJv@E[ @@SlE ^XsPN`J;@2j?$?@{?V?TF-j@@?j@?GJ ?Rj?M+@?C?F@?'6Q?Q ?Z4?R ?R@?VH?X8{?Tc?&y@1*@=`>?Q?O,*@I?@@??j@ F?* z1*@&@G1 Fy@?@?PB?R?@A} ?B@?etG@?^ E  XsI<?Q[>QE[ ?B`?AA@CQ5[ QE`=?=@?Dw?&@?(s?VH?TFHU2@?. FG6EoS?Kǻ?S'6?Rʠ?DY0ދ)I: LsG PZQAA@1} DYA?2U/`X>G#$?2?Dw? g<*@L*@PԠj@?76IV EG>ݶ?Dw?E F*@4m@! G^Pr`KۋI1*@?)c? Q[b%h`WJ ?Uu ? 1*@?-)cT`QAi6 @?V0@?[=`7 U.?3`?bt?h?^`?I&2?N}?B'1 ?EG?U?TF-?]{?YŠ?4k?r`?'n`?% F$m@R ;M?XV1?Kۋ53?D@?F!`GV[PU`DF-EoS?ۋ?\?\ ?DwCXuXo@G`?C0@?R@Wm5 F?P?Ic%[ @@QA@VLNUu UekH4GraO᧠ =`?W`?Xj@?2@.Uu  ?B`?S"C`U  ?1 ?G1 R/PNiD?@N`?-g`3`?C?: ? z@Kx~` ?6綀@ދVFpڠ?= FW@ۀ]qU`?`?>-ր??C-4kPԤS @Dm@DW#$T@;=`4@@ N-ր\[ ^ V`J- 9cH 5`>Q?($?Dk?\RD@?EG?G?I: ?Yup?U?1>53H@?E?_j@?Fpڠz?Wm?iK ?jY?]???EoSQVA?H`?E[ ?Qs?M\Dm@N@"\>QIab`~???Ps@?1?PZ?QՀ@ U.RjUu \`8LJ@?T?4m@a?>? ?4 ?O/]?5NbQc0@E?* Q??᧠?H8{?%?&@?-g`?C?N}?@@?2\?:44kJe 3Xu?,z?Bj?AՀ >G^CQ?8s?J?#0@? F?H ?E3- 8&@?/᧠?GU Dm@Ai6P Kq0g?9: ?OV`?>-ր&綀? @1->7?9|?&I<A-?4F-?AA@B/PUQ?@ʼ@?j@E+=`?Kd&@X SQ@N`CD5?AUg?A} IaYk`P,A@r`/C-?9: ?Ia?EG?Uu H@O@8&@.OC-\[ _`[)A WO᧠H8{W|I`[PN G1 LB@ދ??B\?1 WahVy@r`?@,A$m@-?AC?0N`*@?D?S?Mg`?= Q! @gNA-g`!O/]?)a?SAUgRײ@??Dm@?Uek?`,A?M1C 8H53?1?2\?6?E ?PB?QC?B\?E"?Q ?3 =\?&I<?I?E/`?-g`>Q?J'?Z@?R?(&@EGJOX?% F?E F? ?F?^7@?NKUu ?F綀Q^7U?Q?!Ug?綀?1*@)aCXuI<?W#$?a?KPQ ?JOX?=`Oj@KdMS9`E`H8{_`;@Pg>Uu %?5 F?5?B?V?PԤEZv@SXuD:@E"KqPUXsY?`W#$DF-:U `YW OvGJ ?AH&@'n`?A ?J?GJ ۋ,z?T?Z?Fpڠ?Kx~`?X?U?@,A1C*OX%`J'@Z?&@;=`:v@>}XsQ*@?$* =`?O`?Bj?/᧠?Gn`?:OX?#Q?M,O`?Rײ@?E`?G ?V?T2^`?@N`?Q?\ ?>IL&@?Q#@?Qs?/᧠;d?* ?U?Xo@?O`?\;M?0ދ?C`! ?-g`?V??j@Rʠ@?Bʠ r`#Q?R~`?@N`O9?Kd=ޙ@Ls?A-?H8{BVF] @?NA?^?Qi6?0@#0@,*@?Sv,<`HZm`)TY3 8;ۋEoSEGRD@VHRPU ^cD]@S`?"C`Q4F-L>@g?U  ?_M?*OXV綀U`C 8*,BCXuQTR\=\?6I<@S``Xs`%[ LBR끠3 8?Ze ?b @?Sb]?C`?%`? g?X}Р?b ?Zm?W#$?[M?[?U3?Bj?B/P?H8{3MS($I<F T Ru?5 F?LF] @S ?>-ր?Ps@?UG?1 B\?3 ?9|?᧠5"?D?Gra?D@?Y?`?\?%[ J5? F?=\?N?D?%?5"?E F?Kd?@\?3 8?Bj/C-;M?6pڠ?QI;`1T(vS:?%?Fy@?Iĭ`?V?CQXZL?.?At PN`\)P`,B?:'?F?2@>?@ZA KǻT2^`S9`U  U  SlE RD@IE`QWV`v@ahX&@Yup\ >}?G1 ?;ۋ&I<DF-E`?$ ?Ia?@S`?z0&@?7U ?1*@%/᧠>&@?;ۋ?6y@RucU= ?<)?CXu9a\*@[F ?;ۋ?Vy@?%[ D:@E`6?N?a<`?`ϰ ?T!?<`?E"?V?R ?O`?TQ3 8?7U ?Q?^Q ?X:R끠C! RD@`'MS9`Q?'1 ?=?Qt ?=@Fy@3Xu?+M2?7^?\H@?U  Q9|3 #Q =`j@?0ދ?G ?30@9aB\GU Fy@8ACSYcU.6I<?Pf?TY6綀]hU %9aPq`F GJ S`7U ?F?< ?+=`2\RuLf6@? z&@?j@BV9| &y@<`Pa+ ]hUgA*@a6`N-ր?H$???2?I|?I: ? 71 ?=`?P,A?Ic+ۋ9|?#Q?71 ?m@ F?#?A*@?0N`PZ`@X`:OX?@,A?Ai6T!ffX8{?Uu gJ@OC?A?]?bP?QHLJ@Bj?L`?Oj@?C ?J;@?&y@@?9|?V@?G^CDw?71 ?Jv@?Ic?Lf6@?D?C0@?R?F@A} B,3RD@Wˆ0@?AC? FQ?8$ 2?LRf?Pދz?-?Q-?"C`=\?8$??jˠ(s0g?0@?>Q ?Lf6@?B/PAW|I`V`B@&@ 76Ps@^7@TY?)?2IQ} % F?= " F?V?TwB/P5?JI<E/`?3QNUu W- ?C-?7n`/j@F &y@?B,?Ps@?NiD?Kd?3QQ} Ai6?W6?9?`[K`?,*@7n`!?Q ?Z@?Pg""?L ?Ic7U L>G`@,AAA@N@J;@?-?I&2 FPN`TkKP?9?`?Sb]'6`f]+@: ?9|?8$Q,zr`?D?Zv@?T@,B* ?HV??`@ z1C:?4m@?O9?:OXFHD?53?F@?M\?R?>-ր"C`1 /᧠9a? F?1 @ދ/᧠?Jv@?R``?-g`53?)?C?O`?Yĭ`?H@H>7?1 >?0?`B ?^}?@r`??8?A?C0@>R Zv@F綀?CD?E[ =`CR%h`WmC`?"&綀F@I?`Q?Q[?H?1 ?RM?VQ?5[ ?[Z`?G5`?- IaB>&@1} U= YM`O`?&y@?Uek?Ze ?\?T3>I<?Zv@?E`Graa*OXO`= ? z?1C?= 7U G^?.Uu ?:49aJƀMF@gRV+Q?PZ?C 8Ug>?:@?Kx~`?E"30@Q-Uy; P?!?K`?@@"\P{U  ?M?G=?JOX?E[ 2AA@綀r`%[ ??H`?Q+ ?D@?B?G=?,B?4m@?U_@?VS#?HLJ@?5`?\>E"D:@% F?-?IM`?IM`? ?&綀?E3?P6UgV5lB?E ?IM`?UG?^`?M{6!`Bj71 ݶ?1C%NUu G^?F?[f?P"Z 4@Q+ W=O@? r`?@{C! SS:?E3?O᧠EC?0@3Xu?Ia?a6`?Lf6@D O?76?RP?B`KTF-K=`H)c?J?QUg?T?GME`?F] @= ?@N`?I<2C`?3`G=[dR``Wˆ[BAC1-N}K=`?j@.7$M,O`Uek@@? ??jˠ?T?Wn`?H`LY?`GFS3 8?B?4@?=`E"[)A Q?Ug?F] @?Q?'n`Q} ?j@?K=`?Q} ??`>I<?H8{?]`?Y?`?N}?Uu SK=`?Tw?`Ȁ?Vpڠ?F?9?`?1-9cM0g G6?1} ?Z?R~`30@S:JOX?2@>&@LRfQ?UoS?U`?I?`#U"[ѣ@Z'W|I`F] @?)c?6綀?! ?3?M+@?R@?D2^`?1-?CXuK9aF] @H ?\B/PU?$m@?N74@=ޙ@,*@B?A} ?U gT!Z?!?W6?2U"D ?H`?C0@?6!`?%: ?ۋ?-TYNQ ?'6M M?F!`?AC?8&@?CR`6)`O9U= [q< 9?`U  LB g0@;=`O᧠Q+ O~U= M,O`?A*@?QK?Dk.7\\N^@`?!*@Jc'$ ?8?!*@?K)A ?Mh&y@6y@>=`??j@?Q} ?m@T`'1 ?Whz ?YK ?F - Ug??C-?綀&I<A^s, [F ?-g`?I?(s綀&@?'6>QQ?J??`Gra?2C`?a@?_᧠?0TQi6?A*@?N7? F??8&@Ug;=`L S 8L)L*@RjHLJ@&@?;M?K?H@?>7?5`?5?O?YK ?C! EJv@EoS? @?W|I`?T?M\?F!`?O`?0@Kq?)c?G#$HQ+ F@V?0ދU7U ?Pʼ@?L?AՀ6pڠWhz "?P@59: ?7U PPg?H$?C Q8sV0@IL?I: G?9?;=`B>-ր>r`;ۋEG:'FI<Z P?C! ?8sB,DF-PS`E`?N?G6E 60@#0@?Q-?W<?B@?G?N ?O@?XBb?EG?C-?:OX?S9`?F? FCLsQ#@Xo@G`?4Dm@WraL Bi@2? F>Ug?0@?* ?CXu??` F?Fy@?[B?X`?Gra Q?S:?YW?Iĭ`?UgG^N &@?E"?J@?PN`?F] @7n`B`1-?Ai6?Lz?M,O`?PI?G`?D:@?P?AC-g`?Ug?Fpڠ?VS#?bP?b`?TP`?Dw?#Q?3`?Rj?2C`NQ ?Uu ?BFAi6?.7` Pf:4C0@?+=`?G?.7?9?`綀T>Q?X?)a< G`:@?Kq?1UgC`MRʠ?#?U ?QHV?.?9?`3AA@@,*@? r`?%`?1C2X}РPԠ??C-?! Dkr`?P,A?B,JƀGAUg6I<?H8{?ClE >I<?S?_M?Z?]Ա?SN ?B/P?Tw?O`5"?C-533Q?Fy@??jˠ?2?N?RP>QCXu?,B?: 8$N}X R끠?P]?[x~`%`N73Xu)c>I<?- BV[x~`]CN}?0ދB~`?A?DkW `bG67^F] @IBi@#0@@ʼ@R/PF@FHU= PS`KqWmW`VS#V@@?@g?>-ր?:@?F ??C-?- ? FVHBTwSKPQ SQSJ?! ?%[ 230@Q-U[ ?5"?Z ?`;@?[B?2j?QՀ>&@XBb3`?S?V?G6@S`A?F?Vy@?[f?V] @?%[ &y@Q<)?Dw? ?71 ?"BS0@U FA} ?3Q>&@SX@71 ?=`KdKP?0ދ??j@\H`T!E3?I|?Uy; ?Bj*1?`Oj@?V`?N7+ۋ?B`?Q_O@D2^`Y>Uu JOX@Z*@?\?\H@?bҾ`?1} Ug?a_O@?c`?DkDw?1-I: TAՀ>UgLRfRM?I<5"a[_98$? FI<1CBi@QՀ]\ OV`Sˀ[fN-ր;ۋNUu TSb]BV?E/`?X ?W|I`?R\?Pg?CQ?<)?PZ?Oa4k9cW1 X8{5[ "C`N-րXNiD?C`?Qi6?1C6!`NQ P>?M,O`?TF-?G#$PfS @?)aAi6\z=g`?TP`?V?;=`B`z?A-?.Uu ?A?DkDm@PI7 ?K?Uek?&@E`($@r`SM\*OX0@>7R/P\*S`?A ?P$ 8?= ?Ia?E`?\CXu&@?L`?Q?Bj @:'D:@K?Uu ?W- ?<*@Rj&@?X?Dm@: ?Ug>Q?`?@?U ?M?UoS?Zm?B@?_M?u ?tf^?J`,A?@g2\?J@?R~`2C`?1-GU `ދP?.? ? ?BV?&@T(vaZ[`VI<4kI&2S @2?,*@Ai6V] @Q#@?\?1,z?9|?A?Q30@?EoS?Xo@?F?Q @OjˠQ} >Q?&I<BQCE  ?Oj@?\?OC-?8LJ@?7?᧠\I<?EoS?H`Q`Y0?% F?C@r`D:@0Q+ Vy@R, F?X?Y'?=\?G ?X$?S?N?I?.?*OX?76?1C?5`Uu I@ ?Q?0ދ?@?D2^`?$m@?Y0?[d?Rײ@?Kǻ?I<F!`?4k?XV1?Ls?($?.?4?a@?t!?q\?DF-[r?1*@?Uu g?Tc?a?O@?0?H`$m@XMUgUg?AC?W?T:@+ۋU_@9?H`?'6E/`At !9: TwT@N`TcbʠX< :Gn`Q73?Mޙ@?Dk=`9: M,O`I&21} DwP,ALB;M?FH?MhI<>&@?QC?`l?c?U2jD! CQ <)?3 8?- ?D@?R~`?R,?]{?`Ȁ?S?PI?Jv@r`=`?Q(s?;q? F\BWT?QA@?\*?=`?D?^#?T?,B?E F?@Pދ\H@H`??C-?KZ@?O@?U?H`@g! ?OC-?CXuG`Z@Tc:P`]ԱX\ ],O`6pڠ L*@CD&y@? ?DF-?< 7n`Q*@TY8&@?)CDSXuQ+ A ?/j@?jˠ^R,?0g?QA@?a?_@?< ?)?RC`?H QUg^-ր9a?Ai63`3Xu?A?C ?O/]?\ ?_9E`?Yĭ`?Gra%`?1 ?C`?M2Z Gn`?E3?Dm@?8?8s?(s?1 ?D ?X`?SlE ?5`?M,O`?UG?;M?@,A?EFP{?% F?0r`&綀"\1 ?A-?S 8?N}?Lf6@?ARʠ` !?Z1?G6Q+ VS#E F6Mh`{[ ?LRf?_RYaSUoS_׿Z<)?$?Dm@?W`?ClE Q?G ?H@?2@?LB\`ȀN-ր?K?)aLB?2@?P6)`71 F?8LJ@?AC! a7_,*@+=`WJ TkJ;@.?L`?7n`H >=`?M@?C`?6!`&@F!`TkQ?;M?T@?<`B\P]2@?M@Z1C! ?'1  ?TF-?bҾ`?Tw?=?Jƀ?IL.7OC-`?At A-Ls?@?4k? r`?@?I&2?B@?)aQ?Q?A?Xs?SH&@Ov?7U B,^-ր: ?NUu ?ݶ?M{?B/PIcY|X.@OjˠA I: At ?Tc?`Ԥ?.Uu R97Gn`PB^V!`5 F,B?@ʼ@?W- ?Oj@! "\?)c2z?Jc'?9aL A-??jˠC 8\ @#0@?LzFV0ދ?;q"\ZY@@[M?A*@?U ?0ދ?0?=\? g?= ?6I<,Br`I<54k@I?`D?ۋ?T2^`?Uy; ?7U 0@N`?8LJ@?^ ?Q/C-?M ?S`?j@?M\?^ ?NiDj@z?H`?VH?Kۋ?Ug??S0@?B~`PB?1 ?]]Jƀf0@E/`?G>Ug%[ >&@?2?>?CQ?^8?Ps@4m@)*#0@?;d?/C-?0g?GJ 'n`O9>Ug?@,A8s;=`?HV?U[ ?A*@* >?$Ai6T2^`R/P(&@?D ?N?V5l?V?T@?D ?:?A-,*@A-?<*@?NA?@S`?N7?T!?Q#@?QF] @E  IupE ?B`?Z@?O3`B\KSN 2C`W]`A} ?7^?76F綀N?NA?YŠ?3?ۋ?%`C! >?0ދ?+=`EoS\)Y|AUg'6 F??j@?T>Q\IM`,B?CD?$m@=g`?#?Q?;MQP?\>=`L Sb]4@?N7?Wn`?R\?Bj?F@?Yup?WT?!Ug>&@?T!?[ǻ?S?J'?AA@?)a}<)MhZX`@{?*OX?H$?N?Oj@?S?-g`T@N@-:v@.7AA@RV71 ?7S K)A NX>L?N?U? zQ?H$Q76?Fy@?E/`?0@?Ojˠ?LBQ?j@?CQ?Jc'?N ?@S`?'6?m@QC]t`;`?C 830@J?&I<?Ia@]R,9|UG[d>?Uu C M@*@?:@?>?)c?᧠C?BV?RP?5"?G`?Q`?F!`NU [],O`\zS1 ??1 ?A? @]ޙ@b] `B h{`hLJ@UGG L*@7n`?$m@??᧠?7 *KM`fgE@bҾ`^[PQ QRu1} ?!6y@D Q?O`?E[  ?CXu?GraDF!`-NAPI`Yd`?Ug?Jc'?B?:OX?*@4k>ۋ?L*@?\B?Pg! ?4m@?8J'I)aPIW: ?9: ?>}?F綀?K?3QAI&2:v@?r`?Ic?VI<?M{?Q@?(&@?F?SN ?Q?NUu ?BʠJX?*OX?[d?=ޙ@VR``?+ۋ: cDb~`J4G6P"Z &@?Ai6'1 1*@?6y@3XuU= Q_O@Twbe Z@? ?=g`?Q?- ?B@?5`^i`_bhbZe L)?Ug?"C`JUekUXQ#@VS#gbܦ ?'1 ?H !UgA-D9c1 @,AU [`LRf? F=@J@>=`I<<)?8&@?O~?AA@? g?:OX?PS`?Cۋ?E"?OV`0r`2\?1C;=`= ?A-?F5l?D@?I&2?"\.?3W%`[`7 ?Dw?NQ ?L)?1} ?#?@@?%`?@ʼ@?\*@?KMJ?&@?PN`$DY@@P6E"? @@g*OX?TQ?Jƀ#Q<)?53?9?`?D2^`?E F@)a?3XuG=^AFI<&@[3(aD@?Uu Q?7^?Lf6@?EHLJ@DYPgRVN `MClE >Q Tw\R끠5[ ?@BC`ZmJc'?N?R?7n`>Q RtJOX.CQSXuQ綀?D@?&y@?Ug?Pދ?RC`?3 8*@71 ?2?U= ?S ?A?7?F@?S:?Fpڠ4F-?!*@?JOX?+ۋ?-?P?K=`?Gn`?Vf?CTYTQ>QF@H$< ?0g?6!`?UG?`;@?I?30@?XV1?R`r`?P@?\ ?+=`RuXTݶ?0@Yĭ`QUg?MS\W?%?R/PQ?/C-?Ru?;d?Ug?Q?X ?N}?C`?ClE ?1} 1CD HsDm@*@?z?Uu Q!Ug?B?^s, ?[r? r`!Ug?Pg?NAUu 8@,AILD Gn`D@?PZ?_j@?8LJ@FH1*@0ދ5"?0ދUGB,? ?jˠE"GU_@Q?r`?F??j@! >}KǻVB?P@?D2^`IM`D?C?Pg?7n`Q?&@?J4?F] @?B?X ?X>7^Rײ@?1-?Q7?! G IL9?`?$m@?Q?e `?i?YC??Kǻ?* \X&@9|FOC-/᧠?=g`?QK?RM?Q6I<?2?F綀?BR` ^KFI<*?j@! ?綀KǻSv,?(s?N@>Q [5`Pދ-g`0N`?1*@?Dm@KP] =g`?*@AՀ4 6I<]`[)A ?B,?T2^`Hbײ@Wˆ +=`BC`/j@7n`PN`NiD0N`>&@?&@?4F-?-8D@-g`?A*@?Q7?Mޙ@?J;@?Q-?Dk?,B?PN`?TCD=`?! ?: ?WT?d?f?^ ?Ov?:OX?53?D ?.D4F-?ClE ?@{?5?Q?W?H`?1} ?!*@?j@J 8(s#Q?(&@zGU 30@?3Q?+ۋ?)?9?`?.7-A?᧠1C%B,_V`h.@_v430@RC`W%`WVGn`?*Eb tW<?8LJ@??]Ա?);q?!Ug?F] @?X?SQ7^F綀@ZE`?5?M+@?Q?^?]q?6綀< @,*@D2^`Ug?Fy@?I: ?I|?N?S0@?O@!UgL)a?8s%`EoS=g`@Q} Mh?Ug?;q?!*@?%[ ?>Q ?C 8?At ?4F-8&@Qi6Dm@?@S`?76E"1*@?OC-?E`HVPԤ?3HU`Kq?3Q?K?SN ?Z@?M N `V?)c?Jv@>Q@N`?&@?Q?\?RM?E31} G6T!UGL*@A@a?<*@>QBi@0N`m@H$U`Z;@],O`Tm@?(s?U3?L*@@ RC`IM`<)Uu 3`?"C`?AՀ?4< !Ug?D ?4@?a?#QNWra?!Ug?PN`?* ?6y@$ CD?8&@?\ @?]h?Pʼ@?@ʼ@?S9``ER``?2\?H?B,?'6;=`A-@)cR\^iDQ?5`?8$?0r`?XV?`S`?S?O᧠?@ʼ@=\>&@?=@6I<?@?K`6pڠM\?)a?>}?CQ?^?aF?J )C 3??j@>=`N!*@?E$ ?M?7! ?H?H$?2j?Lz?@,A?C?^#?fT?a?C 3 8= CQ0?+=`Q#@f ]t`?+=`?IL?I: ?O`?PS`?Rʠ?GJ Dm@R`4m@?>Uu ?Dm@'n`S9`Q} E`Ls;d?D?Lf6@?@S`?QR97TkF5lPIZ?Q?NA?I<B/P>?Sb]?QQF綀N `NCQ0r`?ۋ?8LJ@?;q?C 8?D??jˠ?<)=\[)A NQ ?.1} Q?Y&2?T&y@\?&綀@ދFI<)?$?30@?:@?3 ?*OX?I<? F?A} ?J ?Pr`U `QJUg?Jc'?@ʼ@?2\?R``?P"Z I<?Uu QN}?"C`?]S?PZ?2C`?Ru?Wˆ?W?`;@?[`?G? r`F] @TkMFpڠ4?J?Bi@Iup1 ?\ ?\f6@?Ojˠ?I: ?/᧠a?=?E3?5"?C`?V?[ѣ@?M B\R끠QCV5lHV?A `Zv@RD@ =`?$Ug?j@ zUgTV0@Q?T?V ?m@Kq?$?76Mg`Ia?>}?Bʠ?+M?0r`?=`Ug&@0g>&@B@g?6綀?B??jˠ?N ?3 R 8?S9`?J4?7?U/`?[?U?V@?NUu ?ۋ? F@K`S @?j@?K?X?8O`??H`?N?5`1Ug.?C?Q?6y@=ޙ@H8{F綀0ދ4k* aH@:v@?Q ?QKUg*OX3`@r`Uu 5[ F'n`SXuO1 ?E[ ?Rj?,zD ?B/P?KMC 82@?N?E?:OX?FI<?+=`<*@7?j@?*OX6綀71 47U 71 ?0?C ?C! "\U.R,?C?V`?3 6y@71 O᧠Z@ZEpV`RV\[ Yĭ`Wn`U?0@?S "X:v@?B~`&@ F??53PN`&@?Je ?E/`2Y{\OvC 8a?LB?Qt ?<`2\PS`Q-%[ ?AUg?@S`?>7?Dk?.Uu A4 ?>Q ?;`?D ?ZL?Yĭ`?@r`>@ދWˆS`I<?+ۋm@?FI<?\?XLJ@?D?4k? =`Q?Bi@?:H&@Dw?L ?W`?D76U  ]J`Rײ@"?A*@?T ?WT?AC?71 ?Sv,?Vf?N-ր?,BMhS@N`@r`%`?FQOV`@,AC L?*@?.D2^`>&@?aP`1 ?Sb]?N@?CD?J?>Q ?)c?7n`?9|?71 ?=\?GJ ?$ ?<)? @?0N`?P ?Ri@?E[ - P 8LJ@?Rʠ?U?BC`??jˠI<W%``Y?`T@Yc` ^Uu Xs^_!@6!`?Ojˠ!UgZ4F?UQ?Y'?H@?+ۋ@ދE?8&@?K)A ?1 0r`I|N:%`3 8>B`Ug>R끠U?.Uu ?V?T@?RM$S9`N}I<?I<? ?A} ?Q} ?Z4?W@ۀ?9?`0ދL>`boNm@?&@?R ?\B?Lz?HLJ@?[3(?S&?E3?]h?\ 5 FLB?;M?U F?V?PI>ݶDC 8?᧠>Ug?R~`?WV?Hs?@g?I?K?KM?&y@Ri@V!`Kx~`Mޙ@'6?I(sMhr`1} P@r`?Bj??#*OXQ)c?UoS?Q?)a% F @?AC?J;@?- r`?>7?H@?Sj ?[ѣ@?Jc'?'6?F?RV?CXu@,AOj@?% F?R,?%[ AQH8{asZ 58LJ@VHai6[QA@[d]7?C($SD@?RD@?Wˆ?I&2?C`?.72C`?`?76?4k?Gra?GJ ?8$?IL?R? z`ϰ e~/,z?Y`?`R,?@?X8{?TFdY`?)c2\K?!*@?F?ClE ?Pq`?W`?W1 ?Q#@? @N7O/]G^: ?Hs?UG?8LJ@?;ۋ?Z?SQ?KM?_R?VHH`R@)a?Bi@?Tw?T`?H`?I|?2C`QR~`?!?9?`*r`?5[ ?* ?53?1 53>C`Rײ@E  ?$B`M@?8&@?PZ?A?=g`?J?PS`?J?!- ?AC?Wn`?T?'6C @N`?2C`?H`?#@N`0N`?!Ug?G^?YŠ?U= aKqB~`7KqN?>-ր?P,AQ bH@ST(v[>-ր?A? JVI>Q;q8LJ@?FI<?Bʠ:4B>I<?<`?&@,z?:OX?4HLJ@QJƀ"\?L*@?Lz?76?M+@?Xo@?@{Y3an*?1?`N?C I?`?0@?P`?FI<L _C-7n`?O9F] @[ۋ\?I?I<?B?`X@?c`?b?_V`?P? \?,*@?N@?Uek?DY?>7?QC?Jc'?Bʠ?KZ@4@[nSj C 8A*@9?`H C! ?F!`?<`V!`Vf? =`?AA@$m@?+ۋ+ۋ%[ ?C?M+@??`:4O@@ >ݶ@N`N7?U?VH?2@?5[ ?T?Ia#0@?-g`?Gra?DF-?ClE ?B\?< ?* ?$?I?KPQ: ?`?76?C`?Q?]g`?H E3A}  *CC?r`DwU  Y?`M@?,*@?,*@Q?C`?GU ?*@7n`?4k5E"?%[ ?Dw?0r`@{@,A?R?]q$ RV?O?b@?R,?A?T`?Q?;d?@S`?6I<>Q?AA@?P@?M+@?Kx~`?AA@?9c?H ?L ?PB?PB&y@P=\?C-P`U"^Uu T?Bʠ?>R%h`Iĭ`?D@?G#$?0r`?@ʼ@?AC&綀6綀?D ?V?A} L H ?>?IQKZ@Ls?2?E3C0@:v@?NQ ?)cL +=`$ Mޙ@H`? @?M{?M@? ?Iĭ`?Zc'QU D2^`Y{G6?GU ?D ?&綀 綀>7?&y@?S @?4F-AA@?NClE ?$m@0r`)c??jˠ.7Dm@?A*@?6!`NE/`>+=`/j@?0?<)? >=`?P{?\`?P ?3`?[?iR@?be ?Kx~`?F綀?$S Z W@ۀOv? z?90r`>><`? F?E?U[ ?\z?S&?CXu??)GU >-ր3 8?C?\ ?O@A} )c?Gra?E  ?CD?QC?V ?L`?&I<?/C-?K?WK=`?Tc?WV?0N`BM@:OXI<L*@Kd? @C0@R끠ACJ'U TUG>Q ?:'0@??Sj >QSXu?᧠FI<RUy; Rt?9a??0@*$?9c r`F =`?D2^`?>Q K=`bʠS ?PN`?@gS 8P"Z ?2@?V!`?T2^`* M+@Ai6Dm@0@?U ?aPs?Y0?T!?XLJ@?M{?$?EG?E`K)A NUu ? gB/PJc'?E/`?/C-P{?E"?ah??᧠PI$m@?G`?9|1 ?*OX?Tw?^}?T?Q?`15?_R?N-ր?P{?R`*@U `UF5l?"=`P,AO9F@EoS!?>7?M?U`?T?OV`?D2^`8LJ@KM=`?IL?\z?a?O+M?1 ?3Xu!*@?a?R`?aF?bo?M@g0/j@WIa?Y: ?X1 :v@5 F/j@?. FJc'SW<I: "\CAi6CXu^`YW?!*@6?$ AS @Bʠ%[ U_@dh؀cO`@{CD.DkI: V`V?76?Dm@?U?Jƀ#($?H@?YW ?L)2@'1 ?/j@?2j?E"?Pr`?M?G?BC`?Dw?@Z@{SQI&2'1 ?0N`?<)r`2?z:OX?$?R ?_/]?`Z?GraP@R%h`IM`UoS71 ?]+@?V0@@ދDY0@2\?@,A?N7(sWJ S`?'n`?C2C` F?6pڠII?`?FH?K`?4@QPS`Yd`R끠@gLf6@S @DY(sJ'FFRi@PR@CD?D ?BC Rt0@?PI?W1 ?V?PS`&@4k?NQ ?S @ۋGraEGJ E`? ?Dm@?5 FFy@Rײ@HLJ@`?H&@?F5lH8{KZ@?AA@?F?@N`?M+@Mh?9a?J4B~`EoS? &y@ ?Dw?@{?I<?4 ?*OX;q1C?Q25`I<1-?.7?X8{?c]i?Z@?4m@?0g?C`?Fpڠ?Q_O@?U`?N?;M?5`?F!`?D(sD2^`7^B@RjQ Bj>&@?9:OX?Bʠ?Sj ?G^?1-H$UX綀?Z?PN`CFpڠ<)At ? r`?K?Q?K=`?BB@&綀?Ps@?I|? F?#?A} ?P"Z ?BPN`^s, XLJ@Dm@@?Bʠ?Yd`?NUu H`A1 P`Ru4@1- z?F@??᧠N Z6?KP?@ʼ@?H ?Y{?D:@?1*@?Ic?+=`F UJ;@?4@?% FAA@HsR\Q} @S`F!`C`?&y@Q6I<?B`?N@?=g`?j@?j@FI<!Ug9|HV`*OXP@4@?B@ۋOvL)7^Q/j@Uu ?&@@{R97H8{?2\?R%h`?Rt?3 1} >Q?#Q?a?F?S`?F5l?&I<?C`?-g`@g6!`?3 8?I<KZ@PԠ ?Dw?\SDSN ?"\?H>}X=@?Pg?7S`Tw?I<?H8{?"C`9c.Uu =`-g`5[ &I<?8s?G=?BC`?1C:OXRC`1*@?VS#?T6pڠT @?KM?E[ LU`Dm@?\?AA@?= ?NQ[5`RP:Lz=ޙ@?0ދ1*@M{G`1 @gJ'?!Ug?@ LM ?B/P?4 H8{D&@?9|CXu?N-ր?dA9?MhL>;M? g?5`?7U O9YC>Q?@g?jˠ.?B~`?60ދ<)?j@?@,AUg($QS0@YK ?r`?@,AGraRײ@Jc'?R~`?OV`(&@?/j@?UG?=PIE/`?A*@?8&@Q_V`QUg?!Ug? z6綀?A-?Z?Q?`?(s?= 9|XBb[PRC`B@BVFy@% F?8$7^Z ]J`H`#0@Pg^KIM`?I?5"G#$ z?F5lI<;`??5[ ?:OX?<`:KP?1} ?Jc'>&@8@I&@?QK?Dm@A-FI<?m@?D:@? r`I?`=@?G#$?=ޙ@?L>NXc]qNC! ?!*@?3`:v@OvRH8{;`;`?0@?#0@YK Z@=`?$m@ClE JBj?r`?% F?*@?_?e3r`V`?Ug?Uu ?F!`?GU ?'1 ?>7?)c],O`_V`?;d?NUu &I<6pڠB,4k?W`?Z0ދ-?V0@?Q+ :'9: ?>'n`a6`eQi6??᧠?376?=?]?[=`?CD?3 8?4F-6I<Wd dRU `2C`:'EG?᧠C0@KZ@Fpڠ8AQTI@N`NAE3?I?P"Z 1 /j@?DF-?<*@?@Z?Jƀ5[ G^?D:@?@ZC`?1 ?Q*@?D ?7n`?:@>?7^?U  ?R%h`?! 8$C0@1?I|Ug?O30@PBS 8XU`R%h`B~`?1} ?%[ .71} H U [`]O᧠C`UGC0@?S?U ?E"?1CUu $m@Uu ?#0@?R``?C 8Z V!`?R ?T@'n`JOXX@\f6@.Uu ?G='1 NQ E".Uu ?9?`?K`?&@=ޙ@TWn`H`>ݶ?I<a?30@?P6)`?N?.718&@1C<)QUgP`?)a?Pf?A-,z3 ?Uu ?C`?N?E`;=`RVAC?I<A-UekKǻ?5`?30@@&@?C0@>Q?5 F?Pʼ@?ۋ ?JOX'6T@?: ?`r`?V] @?-ր?P`?T?P`?E F>7X>Ia?ClE ?GJ ?\82\1>7Ug?!UgAA@#?R?U= ?Qt ?E Q[^7 ?Gn`?>Uu 綀H`G=? @4^_?>KPM\2j?>?Q?[?Uek?0r`CUQN?@{?Kǻ2X_9E`T@@r`5CTF-UG?* ?U `?8OC-R@IM`ClE 7U E"Q?#Q?X?YC?T?P6)`?1?$?Dw?C?@Z?N?Q?Iup?2\AA@7U ?R`?Q[N7Yup,z?: =`7B\53?E[ ?Z@?ai6?`ϰ ?QC?-??j@?U)?_?Z?0r`K4 ?;d2[)A aW^?,*@?V?Ov?0g?GJ ?Rײ@?B/P1 j@?5?S?U/`?Kǻ?G^?6I<>=`?I?Q?6?Uu 8LJ@Yd`X? z?Z ?^Uu ?B,9c z`8%[ @Iup?B/P?b?b``?>Q W1 YaJc'E[ :'76QCRi@<*@<`QA@N?&@??j@?1 9?`B`?(&@?T@?N?)c?$9E  ?7n`?Q#@?3 F!`H8{($?* ?3 r`M+@P6)`?r`??;`Z}`;@Y`RM:@?- E FU F?"?Jc'a?9?QUg?ۋ?.Uu ?U[ ?D:@j@?E/`?S?Sj ?S ?D ?;M?V?W6:OXZ Lz?A} ?Pf?CQ?.7?0@ݶ?B,?[)A ?\H@?B~`)c?'6?N@?S`?@S`IM`O/]?0@?E>}Sj M{CD? g?Tc?S @?CQ?U  ?]J`?O/]?+ۋ3QAH 0ދ?H?!UgPs@ r`?P6?E?:OX?Uu L U"2\?^?gJ ?HPB:v@Bi@X@ ?3`CQ7U ?V0@?Y`0ދTm@?j@ g53?3 ?;`B@KZ@1?5 F?A+=`I&2?a?P ?OHR,Ic? F?'1 ?B?[5`?X$?'6,*@Uu @gA>Q#QJ@g? F,z8LJ@"1 >=`I<:4C7?JOX$m@+ۋ?O/]?Q ?=?@Z?@ ?.Uu ?=\ FSXuK?綀7 X&@]hB?N?6綀P]7 ?N `?R ?E FI<?j@AՀ$m@?Xo@?c&@aX_j@j@W?JOX?A*@)! ASlE Iĭ`?"\?4@?Ai6?V?S?'1 ?I<?8?C0@IM`^#9c?N `?3?j@@g@ʼ@a?6?R?a@?`b?DF->U_@b t`G`>Uu Q#@7U ?H8{?E?Uu DS7n`?J ?M?C ?>7?K)A ?Y?P"Z 11 Bi@Z Q-?(s?=ޙ@?P`?IRuU?5`?>@?@g?Ru?U_@?RC`?:'?\?,*@? F=ޙ@K=`z?: J;@X ?YL?^?Rײ@?C`?A*@DwClE 8&@? F?E"?1 ,B?Dk?RV?2@. @?*QY3e`U  ?<)?&@RjVKۋ.7$m@0ދ gUg?"\綀OQE Gn`?$?PB:OX\[ Ux`a m'[bP!?N?O/]2WOC-1 a1?>?SD?ClE a?%?;=`?CQ?@r`RD@bPQ*@?r`ClE  ?6?.7?Gra?W?Tc?C`?: ?:'?*@?C-\4a@Q1-9?`?C ?E ?Ai63XuWhz PԤ?%`?AՀ?D?@r`ۋ3Q-g`;d62@@!?@Z?Fpڠ?FI<QE F?6pڠ$F] @6I<2 F?2jBC`Uy; L`/C-?*QK=`C?=`?DY?1 MU  ?\?R`??`)-FV!`O᧠Ug0N`SQA@F TW`PԤTMg`? F?)?%`?%LsY`U= Rj?1 ?Y{?E C! ?0@?9?`DkKZ@>ݶ?537U Je 9?`?7U ?Q[?Ps@DY`B U z?- ?Ug?D2^`?*@?HLJ@?Ze ??<`?Y{?HQA@Tm@Dm@Ps@]]XV1CD+ۋ?76?%`6pڠ?D:@?4k&@?@?I?.?;d?F] @8$SIĭ`97,z@8LJ@E ? F?Rt?H`% FE[q`X@DY?D?Jƀ?:4%[ ?+M?W#$?Z?9JƀKP+M!?30@?Uek?P@?8&@?O/]?D 2j?A*@?S?E"?E3?A #0@?*@E/`S&H?`>7=@=\*OX?>?Vpڠ?_jˠ?VS#?/᧠?'1 ?M ?CUg?1?J?QC?D?7^?P@?Mg`3 8Uy; a7_R8$?Bʠ?(&@9D2^`?z?T7VfM?r`?#0@?2@?S 8?Q`?3Q?8LJ@?QE`;=`>Uu SQP`?<-?Q3?1'`?@X_?S?L6 ?6B?B^p@?fOO @`?C9?B$?Ԁ7 @Hi@H Xzc>Ko@?GMl9 ?>b .3 R7 PX_S@R6`HTQEbmbh\`WW`G@GM3ueGE Zf]YR"`N`Oq0?R?P@?!oT?.Ԁ?U{v@?Wj`?HȀGm9%`0?:&@?>b `?/"< ?2XC aVl??X*?<6 Q T ?8V ?_@?T+@?' @?A[g?@&`GX4ۀQA?F?:N M?2?J:@?R?Wj`?VV?P ?Jy>lIK>l?R^p@?5S9[?`9`5;\ ?P@? 0VEI8`?T( ?`?6E_,2Ws?AG{?>Z8 ?<|?V.?XC ?UlQ=?j?GE ?1.?Nu@?Re΀D@?C`>@AJ?I#?T ֠??"?VL@?]+`?PР?@449 6?;?Q ?D<>@;=U+€[e΀Zb'c@ZPDr6`?$1>3 5FB+€?=lVbP\7gwV` 4dQe^`L@5+€QVE3M?:@C?`?R7 ?R|S3@Q?@?FB&3`?`3M 0?.Ԁ@?E*?PbVQb;Ec@?EՀ?,EP O6)0?@0C@@@?U`?V('F.@%{v@?B?B)71oT?2$?C@??q?@?Wc?^k?`[\ K?F`?6kK`X\```aVlD!?N`?(|@ZV` ?Eg@?XHȀ,6 \Q9%`?W1 ?@lL:@?S%?c,`?]&!?DZLdU= ?@?Q3?_?D4T( PDr?"< Q3GY?0(0>j?9l?@X_?Q=@9]W@P &@? @(0B^p@??7RVE?%*?&jC?1G{2J 6`?AoT?:@K-K\ ?(HȀ?Br]@?0?(|@?W?Z(HȀP ?09?PbV?9?)7?D ?"^p@Q M?B?Q?$Z@`j?@? @>`?`??9q;?Td?]0`?Jb ?&B7 Q>@?Dj?Dd?W?A?N3 ?b,?NԀ?C9?1G{?NZ?W'ܠ?R?Ko@?A?F.?[x?_g`?A.G'H\`?;=?[`?V.?00>e΀26`F.>@>@VO[-EP 8HȀFVDZ"jA@@44RJ@SW !6jE= ?#MK-fy`XV ?Ec@?oTN F4<?0)K,6 0?Q?cC ?SIKQ>҈@?"^p@M R8p`l?@?GE ?IK???KI ?] ?a?[*?HHȀ?>Ԁ?U?X >@UYV.EP "< 0X_2^p@?Gm?GM?}26`?E?1.)K 9?=+`?R?Lw? 0BS/@VI_j4dRBJ@oT]:i#U0RJ [y`J`>`F.BJ 0?S?`X_??I#?FX?WB7 [\ JS?l?K=?O6)?$<?%*?QoT?UY?V8@?U*?GM??}?8V e΀?G1 ?]>`?@9LH@Vk`Sd@PlLJf_Ր`lLVWZfVt Lw7Y?҈@?8|@?AG{?S\?_?\#?P`?D( ?;@?CM?=BJ@K*>oTjX cMU3?F`?>b ] _@@?B?$!oT?l?S@?_,2?Q.?!oTLY#I(|@WOc\V(NԀ^b U3?C@?H4ۀ= B&@2J`H ?6j?]0`?\h>@=D@?Sax?U?`Q `/?[ $@?a?R?C%??"< ?@ e΀00?0?HHȀ?A3?CM?T2?<|8V ?"JN eT^~?qUI_@H@$ZPРTZ.Ԁ?>Ԁ?B?A?/"< ?oTD@@X_0@?<6 ?;`?&E$ZC?!>0W'bJ@UlA#@+e΀R`U3?"?XHȀ?Zb ?R`?@-D@&@?H@?=RTy``_S?- ?M+`6kX*?\[?Sue?Td`?_E?^ F?0N҈@H|@B6`0`?!3@?+€?X&?Q T!b @K*?R?;=cueeh0N`QG{W @\TQF2`Zla VXU!U= ?`?T4?P@?P`?R?7`BM 8p`?R?a`?V?8|@?lUU`3M=+`PDrNb D( ?- ?;\ > F1?Dd?B^p@?G?PbV?:?:@?P:| ?Gm?- .ԀH H$>Z^҈@`@N36?(HȀ?P0?7Oq?jb ?dà?XV ?XR?SaxAoTWD@MW@Jy=D@?Ԁ?V~~?U+€?&ER"`J`?GY?5*R,2$?TQ`?Ug@?R`?MW@?5+€?H?Tnw`?RJ ?` ?b `Uc@ 0??}?M?c>?a?16j?+€?j?4Z?A?-D@?A?B7 G1 MY? 9?"< @926`?:&@?QoT?L6 ?C?\?a?P9?Td`?c@?^3?G @?C9?Fj?2J AAPF~~0?5P 3M[3 VX?:f?GM#M>@? 0H ?f)Ϡ?c>?GY? @?80"< ?4?U{v@?F?1?N F? e΀QyK`Hi@Mk Rr]@;\ &@?"?f@X_?;`?` ?R`=l1oT?HȀe΀?@@?VO?E= QYUOO OJS/@I^71 5P `!a3^~T< 00D!B7?3M?W:?D Hi@?9_?IKT@WW`?@? e΀GMRr]@RhfA 6B2?L@?NG B7 >l?^Ԁ?[?Lw??}@`L6 0X_@?L-?`@?X?<?71 ?e΀?*v ?T!?U?/"< CRX&\Z?QQq`?B6`?MD@?Vj? e΀FB?B^p@?X|@?Rr]@?:@?=k ?PDr?@X_@?P?QQq`=+`oT?XR?Sko ?7`?DP?P&`?;=Mk SoT?O}?U5?Q>@AG{?.Ԁ?)KN҈@N`1Hi@?R?\h?A3@?@?K?_J?f?V.?5S`?PNi ??71 Ԁ<JyGsR`RTyEc@CR?;=?U5?fKI 9K7A?6B?Xz?Q C,`Q;@BJ@B9K@;`^]aB6`HC [I ]+`J?1?0/q?@&`@RJ 0@0YR?B?Dd#MM0`Q3?9%`?SM?7Y?K-?V(.҈@F @?M0`?P:| ?26`?6C`^`Z0QQq`L3`?0@?EP ?DdAπYR$&E?C`?@QG{^Q F.!??A3?R$IKaB"`?_@?`PvC+€?e΀DP6BBZp`S51IKL?A?XV ?AQP@?>Ԁ?PX_?Q?Z]`?S@)KDxm?E+€(HȀ?D4?,?Q[g?`!?T2?F.?P9?R`?\w?\^`.3 Nu@?.3 ?(HȀ>@?P:| ?R?2I7WcI4 Br]@@1oTZUl1oT F?2?9?@N`NG =k NnN`?4?\6 ?\w>@G @?*&@J:@]/"< ?#M5?JN ?!X|@= 9X\`O?0X_?#MHV XHȀG1X R,?(|@ @?B?R$PРV`?O"< ?97Y-`U3W`bKe΀?W;ɠ?[??=@@D<&j?=D@?Jb ?Hi@?@@?!A.VWD@<|?B6`?Cax?!B^p@Q@`?26`-D@Ug@XQyK`SZTPP/[  U`?@?Dd?2$/ES`0?O}?P@?L-?=k 4Z?=+`?b;?`?&QAP4 0"??ES`?GY?= ?A?N F?8 R@WY5?6 HȀ?@? @?`?,T?.҈@?.Ԁ?&E@ QN FJFk&E>jU+€F2`?;\ ?9_-l?`?E?BJ ?&E0? 0?4d? &@?FX?[@?B$6?5H|@Z? ?&E??GE ?!oTR@?8|@?K`<6 !?;=?)"D?26`?Vt ?0`,T?FV?;\ ?9%`?@0Nu@L|?L6 ?2$MY,>3 a@]W@?H0?`@?PDr,6 D#@?Jf?VB?\?a$@?T &EIqMl&@?V;?Rr]@?JH0!??D4?X\`?MNb `Sd@^= Vu FEL#b d_I^?9 ?:f4 TK=?B"`?N F?J@?EՀ 0?Q?T4?`QG{R$A>0?>b ?@@$&j?M#@oT?+e΀M[ $@<?K`?Q?IK?>b ?B^p@?@'`(HȀ?7Y>@<-4<?"< >Z?2J ?}R??Hp`&P6B?R6`?Y7?B^p@,?@?FBN3J:@?R,??JIq?M?07`?9_H|@^`+?@@?0X_?Sax?F2`Eg@EՀK@I_ B"`@@?C@?.3 'Y?>Ԁ>oTH4ۀFMlPDrD<GmA ?҈@?oT@?E+€?a@?VR6`PDr?;? @??a?i= ?P@UFW@*v ?L#?>҈@WaMY?0??}6E_^`Gs8V ?@?O?;Nu@L-?8p`?N`>@Tnw`Ug@+€?VL@?OqN`Ul>b H C?B?54Z?G@?[o?UI?B"`?A[g?RJ ?`X*U36BWW`f`a [`Y%`P R"`ZlT!C@L#[*YBI_$<?6 ES`Y I7D@K`G1 >@? 0?BJ@?FB?,6 ?A?J:@?B^p@???+€?@?`qG?U{v@LT<-?P9?@R6`?3`?``?H0^d`!j?R`?@HHȀAA?F`?S?Mk '_@`J2?<-?Wc?DPMDG?O^?Z?9_Ul[BJ@?PX_?Rhf$6?oTO}S%?.3 ?D4?A.?T ?V8@?6`@X_oT?W?OO Y.`? l?S@?@`GTP>3 ?FB`F @?X&?YA`5ZTd`>0?B7 #@H 7YE{v@^=@U>lHHȀXHȀ)7?%*S@cc:GE ?R$?@lLD!ER"`VkS@_O ]N`_qkg#`bV_@^Vu Nb IA3M[@S?"< L|C?f?09?Ke΀?AFk"^p@?D l?' @?C@4dH\`:+)7FE5+€?US`?UF?%+€?DG?Ww?8HȀW'ܠY7,6 Ddgxg;ɠ4<?DxmD( PlL?AA?^n?]?Y ?M@9KQ@?@Dr?P@?O^44D ?D( ?S5?@AG{QRSue:&@?Q=?]c`?_O ?P KX D(|@?Z?2J .ԀF~~L#> F?Rr]@?XV 0Dd?JN ?Nb (HȀIqCax5*8HȀa3Y.?K@?[o?4 PlLM):N R@NZ;`N`V<-?D<6k?TF?SJ:@c?]?4<?F~~ZN gea _q`@a=c``QSue[o@UqBJ GMTnw`>b ?@9$ZTà\[-:N >0U+€Txm?3@?U?\r@?K@"< ?Rhf?U*:N ?R-?>b @E+€AG{@@PG@?E?`?K*?9K?E{v@?B?"^p@:@QQq`F @B^p@]ʼnXL?D4?FXQ.Q ??q?P@?I ?UI?Z]`?I?l?Ԁ?7?Jv ?+M l?T4?;e΀P`P@#M?oTL@P?I?b@?^x?=IqO6)@@.҈@)KP9]PР6jA.?9 ?S/@?3@?/"< ?Q?80A0?@ 0`Q)GYR`?HȀ?DP@44?3ue?Fj>3 X_F1[^`*?> FA l?Y{ ?]l?%+€U`K`?A 9bEe= _^`bVb$a%@]&!P2J 0%{v@2"^p@&j>b ?4d?QyK`5P a `d]uՠ>3 8|@Z]`UP ?;\ ?Xz?Y_?C@?B^p@?b'?Zp`P&`PDr?@?5{v@3@5S`?+€?-D@>3 >`?Ԁ6;`>0C@6k?PX_?9KP& QD?0`?Q)@W'N҈@&GmPbV>0?H4ۀ?<6 ?$ &@?;`?0 0?Jy?T ?`D-l?=k ?MD@?҈@?"$?!oT`M;@H@BJ@)???@@SMfbe&@VE;FU{v@G@?#M?6E?5@?B6`?b?[K*X>QπUYTH|@?"< ?= 56`lJ:@BJ@?8HȀ@0 ?_T ?TZ]MdOO ?7:MX_[=EH Zb YA`Jb D<B@?2>e΀?' @?7:?Aπ?5P ?;e΀?PNi ?@2?@?S"?E= ?-l?$Z@6jMY_V.9q?oT`V`E= 1oTI9K?@&`?!oT?26`?M"5?Z`?XrN`\=?3@>҈@Q3!?>b >ZRJ GmEՀS/@Q= l?C%?!B"`=)O^W`?6E?`5?7Xi@@&`?DxmԀH|@"^p@?LT?Q8@,Q]k ]aFj,3%?1oT?MW@?BJ ?Ԁ?0>҈@OO #@?Jy?*&@QE?E*?L-?D4?0?FXJb GE ?M+`?/qGMXfb6`Y{ I7[=c@ZXϠSS"FX? e΀?6E?'Y@' @DxmX\`Z:@N3JyTPS`H@C%JV$`YKP0B"`G:Dd??1oTCM[?bckY8`?'Y?Q=? @:f+€CRQ =+`6`@ ?/?L@?E?`>lGmF`071 .Ԁ?Ԁ' @? 9?SI?Td`?Dd?`IIK?;?Q?G?A.?E{v@?B? @?0?TZ?VB?.Ԁ&j?&@>`U!S9:N ?2?.҈@5#@?"< VOd-`-l?]c`?'ZH@?0Hp`TdC9?@`?M @TdIq?@@??CRLd+e΀?G'?V;?G'E{v@Gs?1?G1 ?.҈@=lZ?PlL?H\`!?1?Cue$Q*v ?Q?Vb?Xf?G'L#T( IKM+`J`=D4J&@H Jy;e΀?@@?ES`1QAU TL1.= QL#5*EQAHC =lAAB3?j;\ P@Mk HK=>@?G1 .3 Q Eg@?j?MW@?Z0?R?,6 `1@0,T?6B?PNi ?W'ܠ?V?W?Zb ?U ?P& ?Wm?YA`?1SueQ '`?j?%+€?C@?5+€'?*v ?7 @+ &@?@X_?7`?4d?<4ZR`PX_=k ?"^p@?D!?D ?O^?XR?*\J`F`?P/?80B"`oT?>Ԁ?&j3`>Z&?+€?}QyK`(|@?Zy?\nlSMHi@?A[g?Z]`?QԀ?09?Qe^`?KI ?@lL?'`oT? &@l?MHV :v ?6`EY^ODO"< Eg@"8 R^p@RJ ? &@?A7A[g?2J ? @M+`S%' @?Sue?Wj`?FB?7 @?2^p@A R7 9 ?I ?PbV?PvC?[  ?a3?]Y?Xr?T?T<?S,`>0T46`?Q ?E?`?#??jS@]&!@?J:@NZ[`80?6k?>Z?OՐ??"< GYB?#@?9 ?E?F @?F2`?W;ɠ?T43?Ky`@?:?2^p@?7 @?G:?L-?3ue(HȀ>l?+(HȀF`%{v@?Y?aQq`?N`?- ?-D@?(|@?GY?P9?Fj?Q?Wj`?Ke΀?AoT?68HȀM0`P<|YK?A ?cax?WY0S%P& 0@@@Fj?;e΀?>ԀNb UqPXi@X@@9l00%{v@?f*&@2?@&`?:H|@D ?*&@>0?:N ?Nb HHȀeqb[*YO"< H U3XfAπ?GE ?HV B6`Sax%{v@?JS?1G{H|@7?AAHȀP@2?IK?9K8p`? @?P?<e΀?Sko ?\|?Ec@?;`?Q)?PbV?BJ@*v ES`?7`?Q ?@lL?G1 ?PvCH ]>`? 9?S?C@V.?-l?Is?AoT?V;?PNi L#Dxm?Fk?=+`?+€K-@@?E{v@?5+€JSHp`>0?j5S`?+€?6j5*Dxm@?:N ?D!?I#?G @?Q?R?DZ?I%`?DZ=2?E?`?C9?D?Nn?BJ@???CM`E?`>3 ?1US`?R?cpj@?HV @0Qe^`V~~LdPbV[P&`$<,oT? lJyUqDxmoT3%AG{>oT?"^p@AA6B?*JNG ?BJ@?QA?MW@?Qj]uՠ\-NZB$;@T b$YK?6 ?E= >@Mk X\`NG ?C??QQq`?.3 ?=D@?SW ?e΀SC 7Y?P?PlL?&?(|@?O?GE ?$Z?Q?V` ";@?G:?J:@@B^p@#M?L#?AD<?#M?Xi@?>3 RhfCue? &@P@R?B?MD@??CM?,W @B?S9?@ %{v@?*Ky`Vk+e΀?$GIq-lDGRr]@0`?B6`0C98p` 9?GM?[=?T ?9f2J @-D@K`"^p@?@ 7YCue?"?'Y?7Y?N`?B$&E l?A[g:?]?]0X_e΀?Ec@?,T?<-?<6 NZS??R6`?U+€?K`+Q.T MlGGM4<0 TdP:| ?@@?$Z@@?Q?_O ?FX?44?BJ ?:@?M0`?X ?U?L6 @ `5US`?%*"^p@OO I^N`Q?:N ?Vt ?7Y?(HȀ?U?`?L2J >@?H|@?G@?@3`?>҈@?Q?D?HHȀ?Mk  @A3?4Z?GY?l??HȀ?Tnw`?E+€R$R-?>@Qe^`T R^_J*f?A3BL#C@B"`?K?^?Fj?.3 ?T!?Q?.Ԁ?8|@?&E9q"0LQS%?2?Z?T ֠?97?>0?4Z?FX?11%{v@?0#?Fk<6 ?L?K-H\`L@l24 ?B7 ??"< 3@00?1?$?Y_?HHȀS,`? ?_?Vu ?G @?B6`"e΀?Q ?T ?9KC,`TàUqRI .3 3`B"`FEW'ܠR7 ?B6`?<-?q?RJ@?`?*N3 ?"?R|S?\-?XV ?Ec@?B?2^p@MW@Ky`@LQZD4!oT.҈@?R?]2W @?@?F~~? @?#@?80?C?F?#@?"?J@?DG?*v ?B"`?@e΀?#M?Q?P ?$"?D@?4dJPIKP&`Q)DPAV8@]D@A[g?@X_;\ SI09?SC ?_߇ ?Ul"< $<?QA?Zf?YU@?S`?7Y?!?A3?MOO Ld?8V ?UY?Q=?C%?M?R,?4<>b 0?;@?JS?Ky`?(HȀF @/"< ?R7 ?Q[g?D@?l?@Z:N 6jM>`X4ۀFk8 E*?D?T ֠F~~Y{ ?}?&E0V8@d U3>@C@G`?E*]aQQq`+@? e΀?T?Z>҈@X ?e΀?Nu@?@@?;?4?Dd?Xp`?S%?2?@@?C@?'Y?Br]@?K*?%{v@?3@?W`?W@?!@D4RGm?A.?%{v@R`Ke΀?,?+3?@0*&@?7 @?3ue!?4<?R?C9M>`Y}@SueI6B?2?4d>j???D CueVXH e΀@+@'`?G:?V(?1oTCR?J:@?`Ni ?U5?@?l l?0`?$B7 ?0?Tà?Ec@7`&E`9P`?V8@?JSRr]@A?A(|@2?1B^p@M>`?BJ ?Q?&j@S?^ FV~~P:| [Q_qUP Oq9%`?F`?@Txm\dB+€8V AoTCM+€?C?0?"< ?R?[?44,T?0!oT@?)K?*?@`?R?R?G'?6E?)K4<Vt SR?>ZQ8@L|+€?;\ ?G?K? 9Aπ;=;\ Ky`MW@1.?J`?R"`?E?S%?UIF~~]:>`?AA?=D@1G{Z^ FA3?l3?N`U Hp`"8V O^] `@M D\L?V.?P@Q%@ZDAoT?0?$6 ?1.?@@@$?PvC?D0Ke΀Q)@&`?4/qWwCax?Gm@D?@lL?44WP?G @0X0?P& BJ@IK?'TaG{?9 ?Y+@T ֠M;?9%`?=+`CMOJDxmD4-l?L@?MD@BU]=k ?#MZ7 @E+€9 ?:v ?+e΀1oTBJ PР?9 ?WY?QQq`?PbV?AoTFL#7 @0?2^p@???E= ?9%`NZQ8@?J^P@aT @?DPjWsOj?G:?DZ@@@X_',T3ue6`?AA?V$`?18V ?I8`?P@>@=+`Qe^`Y#PGMlIB@@0A[g=+`BDxm4M+`[`@0?QQq`?<|P9U 3@?Q?WO?Jy?8 `P@TP$?QQq`?N`?6B?N҈@?Zb ??UIY}@??\6 ?Ky`P@E?A3j:&@?B?DGAG+e΀PX_Z?*?T<26`Ko@?`M XHȀ?C?S"C?S9=+`?4<?U= ?X&?G'?GY?RTy?C`?@?D!?X0?Q=0`@`? 9?,3M=l?8V ?T?O}?6j5+€\@WE ?Tnw`?_?=?2?+@O^SMG @@>j?A ?P?S?71 ??VXPTGQEg@?`1G{V;A.?RTy?71 Jv - %*LdO}R@D@?M?S??Hi@?P`?3ueRUg@R,T+@SC U?`Td> Fl;\ ?"< 5*,`03`QTd&E? P`VES\OO ?4 ?Wc?O6)?(|@@!$?+?*&@?&@?<-?WO?^b ?@X_TQ`NԀ?R,?b ?Ug@%+€Ԁ?10=?oT?'`8 LL-J@O*&@?Jf?2J 9_?6 ?1?7 @?Q?CaxF.Rr]@VJb ?R?`bV?PР?M>`?Zb ?TF?"?&?W`?]v`?=D@<?4 ?Iq?%*?*f?WD@?\@?DG???FjKo@TP?HC ?CZv X|@6`6k!?`)7?0`?G@?Ec@?HC ?@@?7 @?N F?H|@?Yh?FXIKE+€ &E?8|@?F.J:@X 6E>jl?3%EP Td?"?D@+@.ԀFV`+ b$X|@BJ@@AO^7 @%{v@- ?8p`?@&`?!oT?9_?DP+€Qe^`P`0`IK`Z]`K*RF~~?&0B7 ?,T?HHȀ?;6M Ke΀C95S`ZBQ&?Ld?=5*>e΀??:N X S/@5+€`DY#WE 4 6 8V ?5?Dd*%+€?Br]@?P@?JN ?1G{?.3 &@X U!?S\?`vC?9e΀?Nn?R?9%`?j?@@?O"< ?A >0?9%`?F~~?oT?&@?U+€?R@=k "< ?TZ?&ER;`J`cpj@[*? ?=?@`?/0@?1?Ej;\ @&`L@B"`?a?jb ?U= RJ QoT?l?5{v@?#?7Vt WLH  @?6GM?9qԀW J4 W`lLT>@?!?LQ>0F @2^p@09>0?Qπ?M??Cue?Is1QyK`PB$O^= T>@? ?&E+€*&@I_5?NԀ?Jv +@&``?7Y6jZ:@[e΀O"< =+`?&E?0XV _O ?"< ?O6)PdX e΀`Nu@ZR?/?@&`"< !)7LhOq*f?/"< e΀?'`?V?W @3`Ec@?Nn?OE{v@K?&?80?)7?+€93@?@?@`AEc@?@0?9%`=l?"< H@P?%*?Qπ?oTCMIq$>l?9q?UI?B,T?B?6EL6 GM71 D<G@IK@0?;`?M0`?EՀ' @H\`??q?\ ?I_"?H\`?[R?\ ?H\`LQπl?4<?`1YU@_@?0?OSW c'Aπ?L@D@SueJ:@?0?LT?L#?>Ԁ?[?`@Vt @lL0@?)7?Td?V8@>@> F?,6 @O^B"`"< F2`GY &@1oT@X_?0 ?8HȀ@`MD@Q U3>b ?EՀ?!oTQ.Nn?1G{?KQ?6j?D( ?_E?\-?&<@0?0?D ?D?)= R7 80?P?Ko@9K*&@?M?7T^ZMY?:N ?2$Y#f@dnw`aUP ?Q)?`ImlT+@AA;GYAπR`]0`UFP@B?1?A3?M ?U]?*v $Z?QG{?5S`RJ@"?@@AD@?HȀ0@@=,TK-XR2?I .҈@+e΀?VO?UՀ?2?!oT4<9?AG{?<6 0 >@= W`8 ?IFkX|@??q?W1@2U` 0?P@?I?Gm?Q"< _{``X_OՐ"^p@?Ec@?H ?2?A??};@:v ?6k?' @-l?e΀?0GE Gm?;?K*?"^p@l??"< ?U= NG &j?B?V.?O;\ M+`Jv UՀP 8p`X d`ZXϠA @?:@?AoT??q?:v 5*?*?Y?ASax26`?1PQ 0AoTac QG{I^_^[?PY7Jb ?M]+`SC FkHi@? e΀?@:?JN ?QEB7 ?N3?"< N3?1.?IKES@?`?Jv ?@?@?R?E= Hp`Mk Is@`?Gs?M?@?@lL?I8`'Y1.?@0?@@?)?%+€?0?9 ?Fj?U{v@?Z@?E+€PU]?,6 ?V?IK$>oT?JN ?M .ԀKe΀?6`?CaxLQH ?<-@e΀?ZS?c9?SI?qUՀ:f?H|@?B?4Z?UY?cW@BJ@?C%?U ?SC +@WE R`N3 Y.VkoT?9K3ue?T( ?\@?KQ&E;`'`0X_CM e΀?C@BJ@_˚ U *f?"< ?7"$TPXfPNi ? &@?OՐ?"^p@O^AFB\W}`BJ@U!hai-`P0>@V @\Aπ@909?L6 >e΀XLT( N`P@.Ԁ$<4<?[ $@?e3?AG{;?F`?.3 J@805+€S`N`?8p`?J)KBr]@?>Z?Hp`?3%? 0K=TZ?(HȀ?9_@9?DG?Xr?+€QπPbV@ ?(|@?+`?G?Xf?W}`?VX?Ld1G{1G{?Q.?U?`%+€SIP@l?P& ?Gs@?D?E= B"`M?5[[Y{ ?[??e?B7 R7 X_C,`?M?R-?CR?SM?]8V ?@?Ug@?ES`I `?=k XC S?-D@?NԀ%*R,-D@?D( ?Jf?P/&R`?l?:@FX?.3 ?U!l[Qb`V~~?H?Q.2$Z?Gs?E?`?C9?Jf?Ld?U?] ?Q.ԀO6)SGs??J?2$G:?00?VV?H ?LT?HHȀZl^)*@?Rhf?\ *fO6)IK6E?N҈@?S9)@X_? 90 ?4 ?P& @R$?+e΀?`9?YK?#MA?-D@0`"< ?e΀NԀb`& Q3@`?80?B"? l?%+€LQFX?Ko@?TQ`?D!!LB?5*&@W1 U?2^p@??JU ^҈@0?Q?7YKo@ZDS%AπTT<?PvC?`?A[gB6j2^p@6`2$?9K?>`>@?E?Zp`?PbVl6;?0?P& ?0Y ^=@?q?DG>ZZ97?B?@Dr?R@?>ԀR;\ ?<-B>`?E{v@?G`D@U+€R?O"< ?W+@K*2?6 ? &@?)K?P?Xi@?P@?B?:&@ &@#???J &@Ul6j?U+€?J:@?9q?G6kHi@?HC ?K*= 2$?*v ?+€?D!??JS@U 9?/q?,T?8HȀJXr?(|@?W ?Oj?L-?GMl? @ e΀e΀?Aπ?K*?7l'?6B?G @?ԀM>`V7?M0R? &@?0UՀ0X_?5Y.]+`?L@S@?`?U?X@?&EK` @?@9"< G'I 0?<@lLY K`?B?P?Jv ?Q ?Ys?WE ?Rr]@?ES`0@'`?Ec@?3ue?FV?Ld?=+`?Ec@?3ueC@%{v@?D?=D@?03@VCM?P&`?ES`4KQXzQπ?Gm?PbV"?5S`?SR?3`=?"?GY?G @?:@j@lL>`?+e΀?FB4dWML>0?(HȀ?L|?V` l\hW?Z?a`?g}`?R7 M R@F 0?HV ?GE =lPlL@`)8p` &@?@@?*f?6B?WY?Q8@?7 @?Nb @`hW'ܠ?KI A[ROՐQ)T+@:@??J?EP @F @@>@>lGE Ul/?U?BW`[>l?R@?D@?O?e: ?b@?B$?:f?EՀ?$Z?>`?Q ?Q.?T ?U ?I?;\ "< PbVF`?5{v@?6`/K`R?Q?4ZQQq`^b [3 :f?Ke΀?@Z7@O?R?[e?I09MD@B7 ?0X_? @HH\`#?ES``ImaoTIK?1?.Ԁ3?Br]@1.*&@B@?I ?!@lL?3??G1 ?-D@>000CMFXVO`[@\Hb V~~???Q?2$5P ?+@?H+S@>@?V`?@@Q[gU?"< ?N F?]?=\ ]0`3?#?N``?X ?O ?A3?L?N`?Z&@?@d@Jv ?``?W@@(HȀ5*6B+€4 F~~B$%*?)K?4 >lO^]O?Q?]c`?C,`I^!?Q ?>3 ?B"`?c?Z]`QoTJ:@?CM?0@?ES`?`Dr?^u@?Q=?E= ?9_?3%>@DB7 ?@ 9C9Br]@5*>l?HȀ>lQ_V$`7Y4<YKeVb?QA?_O ?D( L@TPEg@e΀;e΀N`H\`I__fG` Qe^`Hp`S/@c\e?`6E?U*?$ZIqZ09R@O}FEՀBO^OO %*,6 IsEN FY%`SR?&@?Q?H4<%{v@?PNi ?:@UU &j?0?-D@?1?FB?^?a~Fl]D ?RJ@?6Td`@@?S\?G@CR;l? 0?TZ?P 6j?:v ?]?R?2?6j?2J ?;\ ?G:?71 #M?"e΀3ue4AS[`PlL?N`?_?HV ?3`?R@?9%`%{v@?P@?44[-E{v@?QA?J@?L?U+€?7:B$;\ ?M?E*?P@?N3?HC ?4<<|7`?D<?Sko ?F`+@? CaxR7 FE09G'WmS? 0?S?8V X [e4 ?6k e΀>l?D!?@Ke΀^`S%6 G:`Drc1 f[ev{O?$<HC U+€DdF @U{v@W1@ZZp`YA`^nTZ?09?8p`26`%+€/"< ?@?AA?PlL?R?;?Lw?X ?8V 2?0?D4?S5?M?9q?P?PbVF~~RJ@?N҈@?`vC?+e΀ZM0`?I#?M ?@9?F @?!F @?$?Q ?Q[g?P?97HG @?f?oT*?C%?P@?K-?D@?(HȀK=Uq;\ ?C?5TddP?YK?^Z?UP ?VO?3`H|@3@D( S`?/q?Xz?U{v@?QG{?'`T<VC??%*?P&`?[o?_?[3 ?@X_?q? ?T4?Z ?E= @@2J )"< >e΀?,T?#M? 0?H ?W@?O"< NԀcX ?4@Q ?/"< ?a3?Td`Q3U?K?`?'YaaKe΀BUg@^G W@2^p@?"^p@:N A 7 @L|RK=H@5*?0M+`X G @EP M?Z?JN ?M>`?SM?;\ L6 9q?F?CR?1?4Z?@??> FUq@X_?!K`LQ?N F?X&0T@)K?UY?[?\d?`@?Ke΀PX_RJ ?00?U ?SM$S`G`?#@8V Oq@?F`?0`?%+€?9_C?V-D@?P?QoT?&Sko S?@@?ZN ?V?H\`4F)7@&`Gm?%{v@?E+€?J`?P ? @LdCR$Z? @?EP ?PР?TP?SW ?3?2$?(0?B6`?2$97QAFX?#??C@"< )K? &@?+€?00? 0ES`U*Q?%+€?5{v@[`f7 @?\@?8HȀY.M?S@?^`??UR-?C%?LQO_;`?Uc@?S`?,6 >l?0X_@+e΀?3%?AA?/"< JSd ֠cRI7Mk ]M>Ԁ?Q.?P9?H !oT[Zf?3%4? e΀lBTdT ֠?@?G'A.US`6 ?H|@0B7 ?Aπ?`!?a ?ZS?Z?J@M+`V8@? l?T?P?f4d?0?0X_DdS?9_LPNi ?'Y5R"`>l?I_?A3?P& ?OՐ"^p@7?0`?!G`Q$<?HV ?2$?(|@?!oT?4?LT?@9j 3%5{v@??.3 ?:N ?DG?80?44?3`7 @C@2=+`D!@*S`TZP/S@R$Yi@aπY.@?OՐ?"`DrcRHȀ?N FJ@\C%?'>lHȀ>3 GM l?(HȀDdB?C??Q?FE?':N C@;@6B1/B$X*d2]ll'YD<?O6)?D 3MT<``P&`?DZ?8|@0?`?Uq?V`?U50G1 ?DG?WY?7`:&@ e΀?$0Br]@I ?$<?@`M U- AπEՀ?Td?[?2?ES`?X ?44I#@4dC@9%`??"< ?L6 ?97?6k?G'?@`?6k?Dd?0Jf6B?;\ ?P?UY?L?*'Y?*f?7Y"7? l?%*26`?"< 00,$<?FX?Q[g%+€D4?B$?B;=?2J ?Rr]@+€J@SS?Cue?71 ?*v ?3??@0?FV?D<Hp`Vj7:&@Q/"< @^ FbCaxD\hE?M?VZv M #M@G=/qC,`A?&j?VE?br]@?Txm@DrA?(00b ?J:@?[3 ?eP ?p$?el6j?:&@9 RFV?*&@?RTy?U ?8HȀ6j?"?Aπ%*R@Q8@1?!"< ?4d>@f?RJ ?RR"`YU?7Y??"< <?=+`?DQ?0?0X_?2J ?> F?B 3ue@&`Nu@?6B?WW`3@WO/Fjc^ȑN3 aeS`L#C@_PР?G @%{v@[I XPR,QG{.3 ?T( ?[o?2Gm'?@E+€VB^xZ:?>Ԁ?jGY:f?J`?E9K?D?f?d7?FQAa S?Jb ?VE?VE?^?_q?ZN ?O?+?PvC?a?C@TdB?B?"$6Bl?Iq?[x?YU>oTR`D@?B"`?Ec@A R?0?Q.?-D@4 @IP@?=D@?Wm?[G?] ?E?`DP>j??"< H0XfP& @lL+00FX5{v@?Nu@?Uq?7 @5j?00?Ԁ"< ?@?:?2?AA?[`?T P Oq?Jv ? @M?D?QG{B?G@?Jb ?*v 96kGM0K@d+@UP ?Oq?1G{C`?%*?}a`]4S?cgUc@Pc[`P@c\}`T 5N3Lh?D ?^u@?Y-``Jb ?-D@?S@?6jT ֠^P@S/@?HȀ?I^.҈@` [=?N`?]v`?+e΀?T+@?UՀ0QTZ5{v@?I#?Uc@?_6)?`+`?TG?P?A[g:&@?Fk?b?@X_b@\H?8p`?Q?P?T2?W}`?Y ?\ ?PlLB6`GY?Ko@?W:?$PX_CA3Q..Ԁ?M?002?:?)Br]@50?6?Sax?HGYG'?3`?>3 `A.Jy6?B?H\`?7?D ?Q ?D( *f3@ ?j?6k?MY?WW`?JN ;\ ?'`?R@9Y}@?Ec@?^`?C@$B"`W`I 0@G`?5S`?D( US?G?KQ?3%?7 &@A[g@X_P d2hY8`OO \QoT?4ZIKaQ[g?44 &@=?5?S%?L#@Ul5P ?MY? 0U`R"`- Ԁ &@7\6 _"< ?$?Q=7 @V` OJEg@B2^p@@">@?I?Qe^`?HHȀ?G @- Z0B"`?U ?00]v`X ?00?MW@?OO ?[-?^u@?P`?K-?TZ?<-A3?,6 ?RTy?@0@`C?:f+@?Hp`?Yi@?SR?Q ?P&`;`Y-`GY?97?S@?_Ր?TP?@?EՀ?]&!?[?Q?E?)K"^p@)7C%%{v@?=D@?&2J l l@Dr4Z?D@?,? 9M?9K?Lh@lLXR?2?Z7@?N3 K-YA``gQ@?"^p@?Nb Jy l?[ $@?D!$<?=D@?> F?*3@?J$>@@9TF]ʼnS`Zl?8p`?TQ`?A[gRhfVO@9&EI7R,oT?01.B@X_?2?PX_?VB?U ?MQ0@?G@?+e΀?>҈@?F@?J?A?TG?)7 e΀?V?Vb5*M>`&j+Q.Iq?P`?a*?ZJ@?FV?7:?I?D( D Ky`>0l?T2?XC ?Gm?L?TZ?M>`?Ko@?T@?Mk >@7Y0@B$OqD( e΀?;`?D &@O}N FI#@?>3 ?D@? 0?= ?&EG-l?5P lGmQ=U ?Ld?QYP9?S5?FX6EDQQq`SMS@P 8V >0?E*?P$<Iq?6 ??q?9_?Jb ?GMD@a _˚ HC M _}Y8`l?> F5S`PH\`B$F@WmkjP?0X_D@BC`'`?44? lAG{=l$<@?.҈@?9_?AA?T!?`+ ?b@?]:?@?$?N`?E?`5P ?2$?T2?K2^p@L@ e΀?I8`?2?B?b;?`0)7T!P&`VOcYK?W:?g"?PKLQ9_DGK?7?O6)N`_ql?R?4j02?(|@?R`?N҈@:@PX_1G{?"$2$1?<?O?B@ IK"3@"$?Vu ?V;!#M?-D@3M!6EVF80P l44`vCMl?@@=O^NZXRVu IK2^p@?$?4<?W?`Ni ?/"< Q Aπ"^p@+ @"< Hp`atP c>ES`?MT 5*?00Fk^`W3@"< 8V T4e*d9L-?#??$8|@K`H|@!?$%*4 5{v@?@?J&@?Nu@?P?^3 ?b?_?Uq?4<?1.?UY?C@RJ@Hp`??}?C@?"-D@?!oT?F @?C@?TF?b?V<-Ec@A Z:@g_?Dxm?Vt .3 Q@X_2J KI JS?Br]@?PbVP:| `gQ@:@?3%EE?`?$?(|@?E+€?Xz?S@A[g\#Txm@?G'?Jb ?B?:- PNi `?Y-`?O"< ?*&@?V?Vk@@RG1 %+€?T+@?QUS`BJ ?"Ko@MRJ Z 5+€@T>@Fj? &@>Z-D@?BJ@?G@?1G{j?C,`?Ec@H4ۀUC`?"< ?L@?H? #?P0^nEP ?K`??:v 2^p@+€VjgR`&`<-4<1G{26`W;ɠ\|- ?PNi ?IK!oTPX_SJ= 4Z0"?4?FV?1.?=k ?[  ?\@?OՐ?Lh?/q)7?J:@?;@WD@UI? 9?8V 9 ?0?D4?00?3@?K*"< J?-l?H|@?q[ $@VE6Ee΀3`>l?CR?D?"<|:f0FDZoT:N O"?K`?M?PР?W`?S`?80=k PA?M ?RJ 0<6 <6 L?3ue?b?WOoT?L#?U51.VOT( ?/q?f` ?hM?0 ?=D@?M>`HȀ*&@:K\ 2DPS`0?5+€Af?GY?00LVEP@Q[gYKP 9_?5+€?[?X9?9?IK?BQQ)?7?@@.3 @?EP ?JaVlWMAoTM?DZSRbO~0?_@?P@Ky`WE MW@B$MRTy@@?C?V?P:| j?5+€?\d?YK?FV?NԀ?*v JS?oT!oT]c`Td?5*`NZEP ?AA?S% &@QC@BJ@Dd?G @?[R?TQ`?= 6kK`6B?C,`?J?@X_?G1 ?Q?6EL@Rhf'Y?I^?@&`:&@.҈@?EP ?I?;@?Cue?G@?80?Ky`?Y{ ?B"`C`?j?`S?Gs?3%<6 26`?Q.?<FV?B7 ?^n?O};@E?@@?a?cM?Q ?RTy?QoT?>҈@?BJ ?"$?"< 927:?D4?*&@TGNn>0>b Z]`^`UIW@XIIKMlHȀBr]@Ul?j?K`9_K@0 #?:f?0?P?D( ?J5*CUS`?2^p@?WW`Q=f5P ?ZS?&j^G Z3%0PNi ZB"`?Zp`?fp`?\-??/?V(?T?M0`?Q%@' @U ;=I#bJ@N҈@?C97I^?:&@?Y^?\Q?+U{v@E?)K?M??J?VE?`?a8@?L-CMj?Rr]@?B;`?@?Rhf?PvC'`HHȀ?6E?Vt ?G1 ?j?I7?QQq`?/q'`?9 ?C9#@?+€?W1 ?OC@Ke΀W'ܠb`J:@?E?`?R@?}PVL@?9_?a[g?]ʼn?@`j?3@?8 ?0X_?G:?2$?D4?BJ ?"G:F?AoT?<6 !?O}?XHȀ?'Y>`?"< ?00>҈@H@C%R`U+€:fD W;ɠZ@ehixZb BJ@DPD!I^A[g@X_D!&??ZIKVX?;@?Zf=D@`+`A ?GE #@Q3AoT?1G{?4 $ZA?,6 ?ayK`?g?U5> FA?"^p@?b 8|@L@? ?I%`?"< E?`A3M@?9K?@X_?*>l?Dxm?E{v@?=?T<?W@L:j?"$?P9?Xr?:A.,0?Z?[?\@?:?J?T4?2?Cax?\@?Ug@?B$?Ky`?N҈@?*v H|@K*? &@?@0?26`?9K?9q!3?/"< 4Z+€'YA3?$?E )?.Ԁ?D?X ?OGm- ?TP?H3M6B?C%?RJ ;Zp`A,TIq$>e΀C?80?U ?I#>@5+€09`1G{??P:| oT?Vb?P2^p@P@G@?*Lg1@\^`?[Q?``)K?P?6`U!^u@]&!QπoT?*f?2J ?;@"$A Jv ZWmP@TG?"$?UYSi3T?Fj?Jb ?@&`?'0>@??"< ?@@@X_U]K-#@7 @P M ?0?0H@44?$Z5?0?Sko ?R@?>҈@?@0?M>`?Jf?lAG{8|@?CR?US`?Hi@?#??@Dr?4d5P ?D( ?`qG?VL@&E8V ?/"< ?(|@@@O}L#6E? @e΀F2`Iq71 DQQq`B3%+?G?L-1oTGsH\`$<?Z?S/@YKX&?C?PNi ?(|@0 ?D( ?[`?4dTQ`CR8|@:?J`?G'?+€?QoT?S4<MD@@@&:OA3?5S`?> F?=FBBJ ?e΀?#@MD@;?H|@+`[y`=+`1Nu@WE Oj:E*G`A[gG:0 ?$)?Gm?X@6kYhA3D@26`?7?E?M!?A[g?MD@UVRSko VVS%C%L#X_I%`?&j?;@?Td?_@?U5?5P 8p`;@?@`?@@L6 PlL+€.ԀH4ۀ"^p@?8p`?f?:@?G`?)LQS@FjBr]@`6E^[EN`US`B+@?H ?I#M<6 Hi@J?@?0?R^p@?00TP?}>oT?HȀ?Txm?Txm?@9?HV ?&jOI#!? e΀?"< VOSI9_1X_foW @?KI ?9QKo@%{v@3ueDIsG`>@?OJ?4ZPNi "< ?Ws?A3Ysb@\SC RJ RL|B"`?(|@?b 7R`bV.?&E?=D@@`RKD4H9K"< 1?9?H !?:@?Zf?97VVX\`X_V~~9 ?+€Br]@M+`l?M?Aπ? @?OO ?M0`&E?0?P0?S"?Sue?RTy?0Y7`C9?Sko ?`?Z ?Q=?EP ?)7?K@?^`?Jfe΀?U?X*?= ?=k ?+€+e΀?P0?R@?B?UP ?W?@?BJ@?Q ?U!?R?8HȀ &@?44?J?A[g8HȀPNi Jb ?D@3MH?1.?GKe΀^kT2.҈@?D?4RJN ?6E;`B?8V 0Aπ?@Q]D@?!?T ?,QG'IsJv Ug@ZR)??}?F`?G @?K\ ?6jA.0@?@C1?+P@^=@M>`!?$?>Z?3MBMk 5+€"< ;e΀@?S,`?c ɀ?fG?X Ky`S%?j*>҈@?BJ ?Q?E{v@?Hi@?NG ?R-?R?80???Uc@?AA@0"?*&@?I ?Yh?Jfl?I?`?`Р?V(?D( ?B?PNi ?O?0 Q.\n;e΀?X ?\n?Q?P:| ?U ?J`?(|@?G`?S??P?K`?@@?#M?' @ e΀?8 1>b ?ES`??"< I_8p`?N`?OJ>076 ?4?P@?Ky`@@@@%{v@?MY'`]ʼnB?Sko ?R1?L|?T?6`YUc@oTLTZ6kAA>@?P/Dd\ ?`?TG?I?80 e΀4<$4 JR^p@@`?FE?S/@?QoT?K`?5{v@?4 ?E?@X_?;`?oTV^dVXWEg@?T<?SR@ H0?Dd?R^p@+€>Ԁ?TP?e%@?a?HHȀe΀?&@?Jy?9A8|@?M?5S`?HC ?=l0 "?4?H|@?O^?"G:FV4?C@?[=?TG?7Y?L#?cW@?h&?W}`H|@MD@D@>l?oT5+€O26`?J`?A3:@C@?5+€?HC >b M>`?F`?Q>ZQA8V 0?0?E?`?)7RR@?D@? e΀S9T@' @8HȀW}`P0>e΀?Z?B?K`7B7 MYEc@VddX ?ES`?E= @?EՀ?LQ?2@0Ug@K*"P R,.ԀE{v@=k ?6jF~~R|S@?*&@?C9?X ?I%`"$FkPbV?S"?OՐ?3M?NG ?S"?I ?Lh?GE >@@ F @-D@4 [3 Sko ?VV?\ ?$Z?#@?Z?`?G @7:?I^?]v`?B7 Cue?GY?Q ?@X_C9M@@?(|@?P@?:fP9Hi@?=k ?E?= ?3? &@3ue'?9q?RJ@?Sko ?E?D?[G?bE?AT ֠@`?>`?!@ Q3?}@@@P/VbC??L|e΀W1@oT?J@K\ T >ԀB^p@?&E?\h?Y7?3M1G{.3 >04dQ I DxmT+@Cax?4Z/"< ?0?E{v@@LSko X[3 ]P0?Eg@?H D@?00@T UFA[g?0`0Uc@Td`<Nu@R"`IqTZIs' @P@A3?PNi ?7 @M>`PРQN F:v ?4 ?N3 ?%*Eg@?(HȀ?E= ?9_?IK?8p`P9UՀC@?0X_?3ueS`Y?<6 ?WY?I?E*?R"`?X\`?U?`?:?5P ?K=?D@JF+?+@>@O6)R`= ?26`?Q?Ke΀$<?'?N3 ?0@44"%{v@?(|@?Ke΀?H ?@0?Cue?2?$?Fk?H IsRTy?Ky`?]Y?IK0?A?Hp`>`26`?<6 PbVR$-D@1FkEՀ?l?RJ ?<6 Qe^`L@AS5O?5*?P&`?"^p@W @Z`QU QADdP@@ ? P@T ֠5+€I_X XV`@?3ue*B6`P9VBRTyRr]@DG?F?ԀY#X9R,MY&EBX0A.?P@?U5?=D@Gs6k?TZ?Q1oT?oT?NԀ?:N M TG4d.҈@YA`W}`?`?J@?Qe^`?R,?I_?P@?Ke΀5{v@GYEՀN`?oT?T+@?@1? &@,T1oT?@@%{v@_T U3?PX_?Xf?0Ky`\#T ?G@?LTJb NZ6`&@?Q ?Q Cue;@?E+€?@0?JN ?EՀK@B$?N`?Ws?`Im?WOFC??I7?>Ԁ?1oT?@@?:N ?T ?T <-j?L@JN WM?E?N F3MG1 $?2I`{>@R>@&7 @@?4d?lG`QR6`Z&@RTy"$AB?7 @? e΀D4= =+`A.A@@?7Y?K*6VBTdPX_VE` S?B6`0X4ۀSC T ֠[Q>`0W1 TZ?EP ?X_?0c/@a.?Br]@?QG`09?]>`?V @NZWm?8|@?DQEՀ?Z?`@?Td?IK?@@?Fj?9_<-!0I#?`?IKD Mk ?e΀2^p@3%?Br]@A ^??S@?AAF@>@?<?X ?XC @K`Hp`I%+€?*v 8V HȀ?2^p@*&@?AA?W;ɠ?B?!?- (0?7:?H 77?C?Eg@?>Ԁ9_L@?O^?X 6j?,6 ?Y-`>lWY?K\ ?FkK=S%P& S_qaUY;`1P@O?*v ?:v 0"NZTnw`CMR[9q?fE*#@?O}?P`?;>oT?(0?1@ T( K\ &AG{Y Q?6E?ԀM J&@PVj-l?%*T Z&@?0?U ?7`a ?>Ԁ?S"6B>oT?[G?M0`WwV?P?Y#?f?L@?gw?cH`?H4ۀ? &@0?6`?2$B"`*v ?00- ?7 @?;\ R@F2`?E @=D@0P`J`?[  ?d@?E{v@HHȀ@?U?Q ?8p`?I?Jv e΀CueI^KI MI7?M?$<IK>e΀?Z:@?S/@?7Y?3Me΀@?"^p@%{v@?+€?;@?9 ?+€[@e%@3`?Ke΀H02?Q?*fLT?>`=+`R|S71 5{v@RTyU]QoTUg@Z D@?4dD( IK?M?PvCe΀?>3 ?D %{v@9KV~~bwX`QoTJSaTF?NԀ?JN +e΀=k FN`S@[oWY7"$Q TdoT?FX?1oT6BJG:?%+€?@2J@%*?S"?W'?$!oT?ZJ@?]ʼn?8HȀ?97?Q=?"^p@VU?4 ?M?- ?O^?_?Gm=l7:-l?5P ?-D@UFZ F @:N ?:N ?C@@@"< ?Il6k8|@V!?b?a?C?B7 B$?@Dr?oTXGm?H4ۀ?8 0?oTCueZ]`Z80?HȀF+?OJ?@5?>`?HHȀ?8V ^= i.TxmWW`VX&E04<@\-QQq`?G?H Ԁj>0R@aoTGm?Td?G1 ??Td?A WwE?`?N3 ?Q ?Q3?.3 M (HȀ8 d<a=+`OJY}@IsG:R`V` aa3L@+Nu@V5+€?Q ?U ?0@>Z#@?=+`?JN ?Nb ?A?0?I8`?XC ?Q=?Td?bE?YU@?/"< ?<-?M ?Gs?&jDPDZ00?$?26`AA3?$0@? 0?3`V_@OqES`>oT?Hp`?3%?0X_?+7`?2?:fIK/?Br]@(HȀ-D@6kS@AlU3Qe^`?0+€>j?@Dr+€QQq`VBDG$9_8HȀ>l00?SI?\h?Q8@&j=k ?G @?R@?EP ?>b H_"< Aπ?09S5Y}@8V ?=+`? &@P^ FEP ?CM?.3 -lԀ6ET>@`/PlL?K@?C@=l`A.b``E*?,T?X*?Y^?"^p@?71 ?O<TZP@\6 Y :@BJ@K`>ԀO}U!4 ?!AANnoTCax>l>b ;e΀?G@?MY?E?`?6 6`?D4?R"`?*f+€G`Y%`2^p@?7YI ?M?Xp`?G"< joT?D@?@?!?DP?9_@?5{v@?5HȀ5+€%*?DP?P&`?5S`26`=$<?Fj?JS?@@?CR0:f?T<?[?$A ?@lL?I%`?200/q?4de΀O6)I^AAJ@RZ\#I#K-aLv `@RSRVX\`Vb?0?PbVF`Ld?P ?QA6PQe^`9' @WOXf?(HȀ?D ?oT?+?(HȀ0?>Z?P@?Ky`=UG1 ! &@oTL_t^b ^~g`g:R?7?D( 8 WcF`oTX_Z?A?IKOjV @B?Z:@`& `Ni ?0?OJ lAπ>3 Hi@H@8 C@U= Zv Q8@?oT?A[g&@?0 ?^~?a)?R@?Tà?^Q ?^Z?QoT??H4ۀ?`?@@V`8 ?P@?Q[g?Gs&jRJ QyK`5*?000FX?L#?ZD1G{Fk?Gs?H?DG?S\?M?B?Gs???)7?*&@?K`?Y#?Iq?$Z?NZ?M0`?> F?S5?X_?Nn?"҈@+?9?G @??q?IK?SR?1%*?H@?O"< ?LQ?K`@?D@??"< AA?0@?_J?3@Q[g>oT&jF>@K-[[ e΀?Oj*FE&E?$?!oT0H4ۀQ>`E+€S?@?XCRS?AoTXL?#??0Txm97oTQ*f?U?B>҈@5{v@Ec@S\I%`F2`I_?'Y?>҈@DH ?B"`?W}`?S9?"^p@ @?H?N`?Fj?WW`?`?`Im?Z>0Ld?@Dr?AoTY.[I ?2?S,`?Br]@5D( >@?Y-`?e0?T+@I9?OO ?R?S?Q 9G8|@!oT9_O"< C?;=?3M?0?oTI#EP ?H ?P&`?Jf?*fSko &?[e΀?B"`?;`?bJ ?S%D!?!?A[g?%{v@0W^Z?;`?]uՠ?H4ۀ? 0?MY?Xp`?S\?7YC?E?`0DGPР?B6`?NZB7 ?/?^k?Hi@*?@?IK?0 9%`?"< ?@B"`PlL?#??? 9Ԁ>e΀?$?"9KSMP&`CL|JS?00?3`U= Yh@?0Nn@+e΀K\ ?#@?\#?DN`e΀?H\`#?MP@QG'Ke΀Z0V~~?q"j!$?I?PDr$ZQπIs?G1 ?Zv ?,TNԀ?,T?DD4N҈@4<?D@?C??@@BJ Nn?D( ?b$?[@?f>e΀?E{v@?E+€?4 =D@RJ P DZ?'?@`P@^dM>`C@IKBJ@N҈@5+€?RJ ?L?9K>0XrG?\@?Q?,6 ?W?:v ]+`TQ`lll;e΀1oT?C%?H?6B?5?E= ?Q=?R6`?3 Fj"^p@?AA?C?Uq?_j?= [3 Uc@?PbV?^x?A3>l?I7??J?6 ?GM?:8 ?09?D:@N3?`?P9?Q?Jv ?>Ԁ?qV$`YBW1 ;?;@-D@,Q?F~~71 \@S`EՀ;@>@00?;?[?P@?@9?NԀ@0R`?5S` 0R7 *&@a8@`H4ۀ<6 :&@?>Z?S9?oT\@[ $@F2`FXFk"$@?l?Q?U]? l0?Tà?Q ?D?S%?4<QE{v@W @S\P@\Q[-P&`Z]``R7 GMRJ@H @)B$@C,`H|@?@?E4<EP ?;&`& Q%@?SW ?DZSM>`?)?&?2^p@?@? ?6k?N`?"$*f?T<?`?P@2$71 ?DP?K`?*&@?AA?S?H ?MY?_@?S?G1 B?O"< ?F~~>Ԁ?.Ԁ?QoT?+?*&@?Ul?I /q?:?Q?N`?Ug@?Wc?E?5{v@?I_?9 O6)YsV8@Oj?1?QA2PlL?7:?H ?"< ?' @?3%?@0?I^?(HȀ??}?[=?Q[g?D<?YA`?H4ۀBJ 4 Q_1G{?P 9q?E?D@8V ?"^p@?V?0dFd}i R6`P:| R@4d?B"`?R?Ug@?4REc@?PNi ?Q=?;e΀?+e΀C9N F=R@?f?N`?7 @0:@X\``:| XrP8|@?G@?H Qb^p@H\`?=k EMl?71 MP& >0oTc\}`c'?"^p@?D I@&`?' @ES`Fk?B6`?I ?.3 >l>@?K\ ?`bV?XHȀ L6 B?>Z?P:| ?7:?%{v@?Cue?/ l?E*?IK09Dd3%MYXi@80?H?C@?C???DZJ@?6?K`?RTy?`vC?_?Lh?E?Iq? AG{>0?:N #?7:!oT@9=k ?F~~?UY?SC ?OO ?B7 ?GE ?O6)?@'Y?Is?B^p@@?B?F?@1.?Mk ?br]@?^G >҈@_3??U!oTL?3M?)Hi@$>l`d7Iq7`N`"^p@?*fT XV ?@?H|@?"5?:v ?`?\r@GYa3]Y-`N3 ?MlCax4 l3%/q?&jKy`PРL@OՐNG "^p@?R?Y ?@^)*@[>3 ,T l?A?AoT?F?X0?TZ0X_G? 0?J&@?C2G'?'?W'?Y.?N3 ?B"`?6k?%{v@?E?`?Q?,T= >l?#?6k;e΀`?FX?Sax?<|0X_?5P ?>b @`G`?5+€?Ko@?$Z@?Jf?RJ@?A.?D?R$?JN ? 0?0 ?O^?K=*&@FE>Ԁ<|C9@9%{v@?oT?0?I_?T<S?QyK`?T .҈@S"ES`?US`?` ?:&@4d?RJ@?`@?[\ ?K` @>@?D!?2$?%*?K*??}1oT?$?3`DxmF."< K\ U+€?' @?JDxmTnw`5+€?@B^p@MY?A ?d`?V;V @Z@B$PvCR|S?#M?EP oT2^p@?`@$?H|@?Ul?>Z#@?j$?QA?Sax.3 TdW;ɠA.?R?UP ?+e΀?M ?d?`gQ@?EP ?$?"< ?1.?L6 ?PDr?@@?)?3M?5*? @>@?1?M@lLB;`N`VbNn/"< ?97?S%?Yq?Oqj'?IK?R`?$ZLdNԀJS[o@cfsQ=?DZ?=l3ue$?@lL?>Ԁ.Ԁ97?CRE?0e΀Ml_ՐXL?<6 ??Z7@\|?+€?3M?"?P?L-@@Oq6`?3M?D<?@@?4Z?8p`?2J ?oT?> F?@ O"< \6 0?S\?b ?I_?*f?EP ?dsr?i?N҈@QAπ?C,`?@@@lL]Z]`?J?a$@?Jv ?3`?Q%@?RTy?N3?J?<6 ?B^p@?Gm?"< ?"^p@?P?R`?:v 0?+?@0HȀQ SE+€F.QQq`9%`?F`?D4?3@?Sue?_,2?FVS@TG?6k?NG 6BVL@Q8@Q8@b;d`E?`?KQ?,Q4?0?0X_oTPNi ] E+€5*J:@HȀ?>Ԁ3MFE!P@f2`bLTR@Sko l>lQR|S>ԀC?E?' @?E?)7#?)+€ lTdb'PvC?A.?FB?9_1oTV``4[-3M?ZM+`J?M?hC ?ix?a ?[??[?]?[Q? l\nQ ?Sko ?\[?AoT?0X_?\-?eF?TàH|@DP?Hp`?T ?H ;e΀T<#M?T<?G> FO}A.?Ec@?L-?Ԁ?<6 ?C%@ 5{v@?Vb?[?$IK?D-D@R6`7`?;\ $<C`?7?VV?F`DEP ?' @ @XR]0`!?P0*SE,QPX_Oj?B?Q ?&>@?0 l?"< "$Y7TZY_T :v ?OJ?A3$Z$GsYi@U*M0`QyK`Q8@PDrU+€M ?;`?C`PvCZl&?:f@`CR.Ԁ>Ԁ@9M+`\-Vj4<?)?K=Zp`T IK;\ /"< Nb M0`?&E:X4ۀI%`.ԀEc@H|@@@6BG @T 6k?Ug@?W?MW@?FE?E= ?W?bܠ?XHȀ @oT?TF?TPlH 2?;e΀?B?AA?O"< ?P ?5S`?5?HC ?)K&j?EP ?R@?%+€T!Td`>0>@E{v@?>҈@?VB?2$@?R"`?T ?#@?J?2?NԀ? <6 ?GY?T?@Dr? 9?DG?NG ?0Xza.PX_ԀQatP K`?O?6BQyK`B^p@?9702?Eg@?R?P@?S?S@?Sax?f.?iA`?>҈@N҈@d-``FE?%+€- FX9_,G'R@I8`&1.UP \-<6 ?PNi ?CueS"] AG{e΀N3A?(|@17:?ԀԀD<HC :f,6 QUc@e΀jH4ۀ/q&@Aπ0 <|QoTAG{?AG{?K=?$ZC.҈@? e΀7Y?*v ?L#0H0EKe΀Dd?)7?Br]@?Hp`?U{v@?X|@?DP?"< AoTl? l?'`?N҈@?UF? @ZXϠU!?>`?Q ?C9?Gm?R?Jb 2$D!$:N Jy?D@?\?M??"?Ԁ?'`?A ?RJ@?V`?F2`?' @??J?>b ?2$?A[g?HV ?MW@?@ L#YA`3ue?I8`3?^R?D@?6Ke΀(HȀ?NԀ?7 @B2?@0?Sue?Zv ?UY?_?r@?t`?YLhS`CM3?$<0`>ԀjjV` aH\`?C@?0QE*?11W}``& _TdBJ :&@??:v =D@HHȀ?0@?Hp`26`Z U]5{v@IIK?F?7:LQj?&TGQ8@?&E/"< N F?:&@?aVl?VC%C`?2?K=?^Ԁ?\-6ETPFXJR@P@K`?+€?X?`?O"< B26`?Sue?UՀ?9_?6k?;\ Ec@^ȑ]>`G1 ?0`?GE ?<oTl?+€$<Z44D?$?CRlC@M+`OO /q?A[g?H4ۀ?Is?CM>lHp`RJ`B=k ?G?Y?@@-l?E*?TG?@9@`B7 &@00B"`?3`?P@?e΀?)K?@`?JS?3@?> F?dK?h/@?6EP/?E{v@?BJ@A 6j?<-?9%`?HV ?A[gY b6`#@?QG{>@4?SW ?V~~Re3\U[I M0`?71 ?H\`?00MYWm<|?7YJ&@dV `<@9H ?7Y?fM l26`c%`Dr?44?0_qVE?K=?L-GM>`e΀?M0`?a?W G:C9?E*?20?1>@$?L?^P@?T C%P/?I_?[o?HHȀ?6 ?&? l*&@H0Wj`L?DP?DdC@DZ>l!20`A 9'`BIKK-P9E{v@"3%A.<|G:WMVbMW@[ea=>j?_?V.?JS?Rr]@?O?M>`?Jb 6 OJO^4<?=+`?2$%*?FE?Y#?FV?@?G @?@@B^p@:&@>oTA&E?NG ?BQB?B?1G{?C@?LdI^Vk?3??O^?(0?<|?[??X&E{v@WE ?/q?97U R?:&@?F.e΀R@X A ?"< Q=bE`Z7@0@00Ke΀GQ X A;e΀]c`[>l*f`c?O6)1H|@MW@D!?)?T<?1R-?9_?\#?"$҈@Q ?HȀ?Ul?I^HȀ &@?>Z?G @?`PE?R`?[`?C,`?4d?G @?4Zj?0 9?$?C@?@X_?6?80+€44?%*?)K2J 7`@ Mk ,?AEc@Zl?R?P?W`?YA`?Fk?G'?G:H@] VO6B??lG?Dd?]M?9 A.?Nu@?Y_?oTGs(HȀ?2?J&@?"< ?H "?(HȀ??};=?L*fR$Bj?4<?9q?l?0e΀?5?\@?V8@NԀW' @?' @@U Sue>0?+€U?`ZIM?e΀9_V`a``N҈@l5=k GsRJ@T@G1 6`I7S`O"< e΀?H?+@7 @?R?T!X*bYu?`?V`?Jb 6EUc@Q*&@>e΀?Dxm?W?J`C@J&@(|@0-l.Ԁ?*v ?Qπ?[-?U*?Q?PvC?B$?2$?>3 ?:f??}?L?M0`?Q%@?Xr?QyK`?B?R`?Xz?Sko ?U!?P0- 4Z?JS?P@?>`?,Q7$?UP ?W}`?:f?=?oTW@^`Z]`TP?`?=9%`>@?AoTJb V$`??C%1&@?J&@?K-?*fN҈@?EP ?OJ?H@>0H ?$?T ֠?,TVb^`Q?1>0WYPbV???QQq`?U ?FjQπZ Dxm+€B7 YRr]@?8V 2a@^`J@Eg@0?e΀S\^S%9q?4<?Q=?G'C,`Q.9q?+€?2?*v F`R7 @??q?MD@?P@?P@?Q0@f=f`>`?A ???&N3 R"`?+€?B?M0`?\#?S@5S`D2HC P0 @?4j?`?@Dr?=D@?'Y!&j?6j?Dd?0 $Z+@?@?X|@?X_?P?P:| ?MY?PDr?`9?_j7:_tO}?E?Q? &@TE?`?LQ?B^p@?F?@lLADT ֠`/F2`?FX?1G{0"^p@MW@F 0PvCVX?@?P0?+MD@] G`l;RJ PNi ?7`?U?C,`MD@\QRJ@?2^p@ԀX C9?P?Ke΀?4 ?!AπN`A.e΀4dW'ܠQ ?3 /?+€?;@&@.Ԁ?OO ?T4?D4?PlL?Y?F~~R`bmbQ?D( ?AG{?#@?<6 ?&j?$?Dd?+e΀?+€?R?Td`?3@0M+`U!26`?6`9KGm 90= D B0?4 ?05{v@;e΀+@?9?GM?597PAA?R|S?Z' @]aY_@&`>@>҈@N`e΀?B3M?q?NԀ?V(?LT?K=?*&@HC ,?D<?C,`?C??1.?0?SI?Ws6`H?J?Q.$Iq_,2^ FW @X X\`JS? @?A?<|?e΀;`@@fA.T>@;=?CR?e΀'??J?C@>@5P +@SQoT?'Y<W}`1oT?0@C,`?#@?T!?D?%*?IK?P?;@71 B$71 0:IK?}?B7 ?DP?+@?Nn?Oe΀?,6 ?TZ?FjCB?K@?\d?O"< Ԁ5?!?T ֠?Zl?;@5P ?Z?00?@$<>b DP@ ?j?Eg@?0X_1G{?M?07:- l>3 F @5?Fk?Pe΀I<-B6`TZT 5?I^?R"`?Lh?I?7:@DrI@@7Y#@ 0F.J?"?M ?Jb ?J:@?S@?W@?P0?2?4 ?K*?6k 0?Q%@?^P@?H?;e΀?V`?Tnw`?/q 9J@QR^p@OjF @>@?>Z?oT?$?M0`?M*fP&`T VVH0?@?$Z?$<?C`?Cuee΀B9KB"`S5NZ/qK-JS?M?U]?3@?Iq?^҈@?]D@?Q ?B?A? lX ^)*@;e΀?<-?,6 Z?6 ?KI ?DxmC@BJ 00?+@2?5P ?Gm?@?+€?0e΀?!oT?"$:&@j?5P =lWP&`?M ?\Q?3ueLT>`?"< KI 0?R7 ?R?D<?R-?a ?ZfԀF.00FVC,`2JyQoT3M*5?FX?\6 ?E+€L-B?7Y 0VjUY!?:N ?D@?/?M?P@?*v ?5@0BI?0?QoT? F?9K?BJ I%`U >0?=l?)K?G @?MY?GY?,QGE B^p@?1G{??7?S9?'`UI7Y?U?`?O"< ?oT?0 ?0@?*v ?P:| ?Q[g?E*?R6`?A.97?I#?V`?>3 ?Lw?I7LJv ?"< ?"^p@?:7 @:@?5?6E:J? &@?PvC?@X_0?:?:?j?:v ?IK?7(|@?1G{?T>@?QA.ԀGme΀?44>e΀?6j?J:@N`*v lIK/q?4<P&``:| R,?oT>lWE d P/?G @- S\?A?]:?9K?7:9qDZGsZlP@?CR?(|@H\`?0X_?J@J@`]ZSMBJ@I#@?RJ ?D<E*Jy.҈@3?R`]c`US`? l??$<?*&@?SI?FV21G{ 0?4 ?LQ?:@?;e΀?V$`?Oj?0?-D@D K-?E{v@?P?*?0?GE ?VE?X9?Fj?I%`?[@?7^)*@Rhf?Is?>3 (HȀ?K`?U{v@?Iq?K?A?;`?[R?ZXϠ?4d?L@?Q=%{v@e΀44T>@? e΀?Vj?=+`?4<?N`?.Ԁ7?3??UP ?W:?.҈@BJ@?"?FB?@@?D<?OJ?M >@RSC D<'Y?BJ@?PР?$ZRhfPDr?97?U?T>@?PX_?@?2^p@?HHȀ??}7Y:LhaG{`]ZI ?%+€?F.MQπ?<-?a$@?!oTZN ?A?a`?/q?"< @0;4<T4UI8 MY`]ZYhQ3] a RBR6`RC@QG{[RI^?BJ ?6`L|X|@T C@oT?7`?Q?Vj?ԀCM?@Dr?Nn?=k ?@Dr? 9&?Lw?WE ?AGM[`NG ?Oq?J`@@>0?X ?`?T?-l?@X_?Z?Q)E?`I>oT?*?V(?X9?G?Q?Rr]@?H|@?\r@?a[g?O?AG{0RI%`:&@HȀ?_j?eh?FB?*v ?P ??}*&@?$?P@?U?1G{E?`?!?Nu@?>`@?F.?V$`>0]D@V8@*v l?Cue?_"< ?TZOZ ??TF?1G{C9??O?Ky`?.3 ? @0T bTyW2?(HȀ?M>`?M>`?2?Q%@?Xi@AAWs?MD@?`? ?1?B^p@?HȀ8 C`@&`=R`@b@^`\ ^W:AԀ6kM0`] c@Xf00@%+€$ZH\`VL@Ld&@?9%`?@B"`M0`?S9?b ?MW@+€'ES`,6 ?<6 C,``&`Z?;`?Y ?09LQ?$?R?D46BF,T?9 ?Dxm?=+`5*TxmT ?j?X ?T+@?B?T?Zp`?GY?H\`?U]?P@?Hp`?#M@?09?N`?S`?ajY?]+`?#??6j?MGm75P B^p@IKA?4 ?J:@?5P 3?? 0?O}?0X_Jf>l?C%@90X_?W'?WO-lIq?*v ?<Rr]@`qGB?Hi@?&A>@?0@LQXRCR? 0?44?JN ?M>`?/"< 4P&`\@Lw?Vk?a ?MD@?l?UlԀ[xTnw`6E$4dH4ۀR6`G @3`RTy^G D4?U?`?Z?;`M0`\ae^`^G Nb ?/?E= 8|@R$;`- L#@980H?GY?_j?5P Mk 1.+3@0R"`c SI?N҈@?H K@E?P:| ?Y}@?<Jv L->b J&@C@?9K$Z]a^)*@C@?7Y?E*?G @?R`?T?=D@HȀ(HȀ,T?6?A?4Z?RTy?\,?P@?<`%{v@?Q?R^p@JX|@L#PlLVVNԀ71 11@>@?:v ?'Y?oT?TZ?T Ky`Y ?qlHȀ?/?Br]@?6`F~~ZSP?0@QQq`JS*>@?+€?6B?C9?Mk ?Q3?C96VX^3 S`6 ?QQq`?a?_E+€?QG{#M^3[QDd>@ @A?e΀?@@D<ZDxm?Sue?Y ?@Dr%+€>ZV`]YLT?1?e΀K`F2`??q?ԀU{v@FX?>Ԁ @>e΀?P?*MY!oT?&oT?9 2J Zp`Q=?`FVR@?<-?`:| ?br]@?Yq?'Y?"< ,6 K@S?%{v@?ABRV;U*>@?R@?R,?O6)?MW@?A DdYKI8`?0?oT?KQ?W'ܠ? 0Q3O @?R^p@?OIVVCM)K>oT?.҈@5*UP WD@C@??=k ?G1 ?2$ &@?L6 ?Q8@AG{[y`[X A?BJ@?GM?Jy?HHȀF2`[[=+`?b ?;=,QG@?.҈@?AG{@lLDP8p`N`5P ?TF?T+@?P@?ZS?P:| l G:X|@#@?S@?O>jW1 ZN ?C,`?a?Z]`?NG ?P?P@?$R7 Ec@?e΀>l?KQ?TPAπ[QL-%{v@?)?3`)1oT?6E?R$?^~?U3BXfPNi @&`?H4ۀ?Uc@?C9BJ@B>@>@7YN`V~~A?E+€?CR?DP?R"`3`b-Tà?Iq?Q ?+?a?W;ɠLdU3?(0??"< JN T<,6 ?RTy?R@D@U >@01G{?5{v@?Q?YB?I#F.4?6kP`+`R`K=H4ۀ??J?Q%@?5{v@ e΀?$Z+@:&@(0?C??D4??%*lTPY#PbVF`A[g:@&j?A?T ?\?Ws(0V`Aπ?0:&@16 K-8|@?F"B^p@?M0`?Q?' @?0MaL6 ?O6)?TG?@@AoT>l?c9?i3?^n?= *&@?D@?>Z?#??3`?<6 ? 0?PDr?UՀH|@[y`<-? 9+€@%*?@?B?U*?a%@?SaxKQ>`?P?@X_44?7Y?N F?;@@@RJ Dxm?Fj?UP ?C@ F?! &@?'`?Wm?_t?DxmH@L6 Q)VEA[gS@TF?(0?8|@?+@?Ml?F?&j?C?$V(P?+@?K=?KI ?Aπ?W1 ?g^@?b?DZ7 @I8`(|@?H ?B?26`D!?4 ?RJ  @F`?!?@&`?A.?$PРOՐ2?oT?D4lS@?71 ?b`?P@ ?$HȀ?02$Z?SI?[o?Ld09 A Xza `-D@?a`c ?Vt EP S`T WsF?F @?@ Td]W@:@?4 =k KI 71 !oTBA?&?5S`)K4 +@BJ N3&j?Y?dnw`?RT Y?%+€?;`T \wI_8|@@?=l- VkWE PvCIsFXGs,?2^p@>ԀP -D@@L#B?,Q0X_GY?&E?P@?GM?09qX*Y"< ?4<Nb K=?P`?]uՠ?W?L#`#@?S`?Y?C @#??G`?Wj`?P?OJ?TG?`RG`? @?P@?S/@?3M? e΀ lL@44?Qe^`?S@?I?09#@?BJ@?҈@D<PРZlU ?(HȀ?CML#[??N`?Q.??}?'?f,:5+€,T?Dd?H0?O"< ?3`Lh@?Td`?Z`?0X0]G:? lJUF;@-lB#?0X_N3 GB7 LhIKRr]@\@RTy=D@H0E*9%`MLT@j4Z/q8V >@?N҈@?80P98p`?TG?M2J ?8HȀ?Z ?Qe^``@0?Fk?8 6`@0Q V @I_Nu@XHȀO6)HHȀO5S`"^p@KI L-G@K-%* lVB[=G1 @9F@@?}.3 ? 0?#??D( ?Eg@?>oT?`?VF @?#??Y?7:DG?@`?OI#b`]+`1?97%{v@CM6 ?' @>@?Cax?SW ?CM%+€*?"$!D1G{@*?H?Nn,Q/q?EՀ?L?B$BR@?J?b`?X0?PlL?N3?@&`?Q[g?Ug@jD6kNG M+`?D?W ?L6 ?1.?@@?HD@Q CM? e΀>`I_:@H \-a`R`?H ?b?^?A?6E?P@?@lLLTQ`C@?3@?Aπ7>3 ?QQq`?V;?f:&@?$<?M>`?;\ ?"< ?0@?A.?FX?>b 9K;`?4' @MDdRb `/U= Q[gA6EP@U*PC?`>b K`?)K??}@@\]:0`?F2`97[ $@WD@H 4d?' @?FV?Q?R@?GY?D ?NZ?0RDG?&?@e΀D@P@oT?I ?B^p@?@ ?5?80?[o@?`?4 K-3 ?3??5S`"oTC%80?9_?G'oTQe^`Lh0980`?CR? &@P:| L@7G@P@B"`;\ Q R8 ?6E?R@?[ $@?Sax?A?Br]@?&Nb Jy?Hi@?M 1.?!??"< O>@?jb ?f @*fGM0?*?b ?N`?@`H UU ?J?AA?Q ?Zb ?`9?T<?:@?9q'`K*"?807`UՀ]4R?=D@?P`?D@?LT?Sue?T2?[?T2$Ol?R?Sko ?8p`C@R|S00?[y`?^ԀlJ@26`9%`D@AM>`EfL#^҈@]X9MY?D4?\@?O"< F.Q)?%{v@C,`T Z R"`?)K?O?H )7T4H?GM?F @?/q?E+€?%+€L2^p@' @f?j?'BR,FBHC Q&@?Gs?B?E*?P0?F @8HȀQoT>l?L|A[gX BJ #??*?QQq`?MD@e΀?+€?7:?H?-l??J3ue9qGm^= Jb ?\Q?\d?3M?$?%+€?Jv ?Y}@?;e΀Ԁ?4 ?b?f-?K`$Z?1.? @?ZH ] a`= ?T ?K=W;ɠeP \nNb Nu@DZ804?:v ?Q?G'@@ZWE JO6)`R"`C@P& W}`5{v@?7?0>@?'?R6`?Y1VV7Y+€09`P^`I7?=k ?;e΀?,6 ?5S`?97?3`?MAQC@@0@j?*v 7? 0?RJ@? Jb 6 IqY{ ?%+€?R=R`9?"?O?^Q ?SM?$<?D( ?QA?9%`?,?H\`?<-6,T?0`1SG?Cax?7:PR? 0?B1@?I?WW`?F?1G{?80?%*?'`?(0?`?K-?WD@?Is?Cax?P ?I%`?S%?a?W.҈@FX@?F`?HC 9KZp`Xp` 0?G0@\haG{aoT\J`1G{?A.>@ @?4?*v 8 LwQVjVE7`?9q>e΀?`Q3?R6`?Txm?3@?CR?D( ?%{v@?@D4C@?@Wsh``R7 J?BJ ?V` ?Q8@?A' @0?E{v@?8V ?2a3fp`PlL>l? l?8V ?00>l?9 ?ES`?CR?B>0S\@I%`=T!FX?@oT.҈@?3@J[ $@ @?B$DZI ?&E?,6 e΀? 9"$0@?OJ?[`?H?C%?Y8`?WD@?J&@?X0?c??ZXϠ?0$<?Q3?S@Eg@X9?+€?PvC@`Ws? l?ES`RJ ^Cue?3%?8p`?+€I7P:v +e΀oT?E?Jb ?8p`?*&@?0 ?@&`?A >@?1.?Y?`Dr?FM>`Jb ?AA?N`?%{v@@`SU1G{?9%`3@MKI ;\ ?;@?O??q5'`?DZ?9$?A<|?BJ ?@0?(|@?N`?H ;`QV @!oT?^ȑ?NZU]W`RNG ?f?9%`BQe^``?X_?S?&?>3 ?I8`Vj`]ZBG1 P >@? e΀JfDxm?9?VB?Y-`?*fY8`]D@IqM0`X09%`?I7?0$<?F?!PlLH0?0?EP ?Mk ?7 @KWwP/9_?A[g?a`?eb ?R?@&`?U]?Wc?YA`?bTy?`?TP?B7 ? ?FV?Yq?=+`HC ?=?Td`AZ?f?Q AA[oM 4dԀ_^U]?Ky`?T4>ZOj?K*?b6`?YK!PX_D 1G{)?97?@lL6BDxm3@?"< MQDG?B?X&?S?:f?@ ?N`?jG @?)FkJN 4<?F @?X ?D!DZT<[y`:?cax?e{v@?6EL@H4ۀIRJ W @WMS%?*&@?^)*@?JSR?Ԁ?Vk4ZRTy@&`TTZ?D( ?KJ&@TF>j?U*?U+€ 9VERTy1GV?U?>b ?@?:f' @NG @?L|?Nb C,`ZR @??"< ?P&`?`@?a=?I?.Ԁ?@X_?>b ?R?Uq2$C%?:f4dC`?Nb ?N F`?I7?R@E= WE ?/"< ?Z?Qe^`fFQT!NԀG:0?Gm@b6`c\HHȀD YKN`?IK?L@ I%`?0?@?09?%{v@?=D@?M+`?5{v@09?j%{v@K\ 2J FjQ=1G{?U`?[ $@?B? e΀*&@U]T4?D ?RJ I#`9P #?Nu@V$`<6 "@?L?ZSC N`>l?Fk?K*?I7?L|?<|3%?oT?(08p`?3`?BOjC9?N`(|@I ?M0`?B$B?Hp`?W1 5U`D4?0X_?CM?27`KI Ko@BBJ@j?U3?QTnw`dV ]c`NG 09?/?j8HȀoT?PDr?Oq @@?L@?Oq?FB+€SW GY?<-<6 Y7P:| 2?9%`?Y{ ?U{v@9_>Z?M0`?4<VBK@?4Z*&@?N`+€C@?2?)71?A ?E*CMR7 GmP0b@fbP ?L#?A#M?2)S@Hi@$>0?3`4 ZVXE{v@US`V(??DZAoTA3?HC >@abOqM?GE ?F=k >b ?K`?Y7?I^F2`Nb ?5S`?B@NG EP `?BJ@?9q?0?C9?R`?L#3MOO >@?:fGE D@?.҈@?&E?O"< ?W>j?4<?_@?/qZ?6j?\J`?2KQPРT>@P9:f?$<?=k ?6E9q8HȀ?R?]4?A.LdX\`O?> F?H FU @?[R?\#?B7 ?:&@?G'?BJ ?Rr]@?Z?J?Jb ?X>?C9'Y?+@- 6B?TG?WD@BLw?Fj>oT_T P@?J:@?7 @1?_?fXU?`]k \r@e΀?A[g?HȀ?2J $<T>@\|[oF.?N`?S?ZD\-MW@?5+€e΀Ec@?e΀?>`MlN`?Q8@?C?`Dr^`?0?Ld?P/?EԀ'`?j?$?$Hi@R"`?-l?P:| ?.҈@,? e΀?F.?Nb e΀FX?A?^~?[e?5P Dxm??H,QIe΀?JN ?V;?G1 C?H?d ?AY#??O?5?44?4H@TP@`?-D@?C`?S/@?T+@?HȀF?&E?MW@?H|@?@)7?"< ?>҈@?C9G @S@=D@?BJ@?O?B?$Z2Hp`?%+€?Yi@?\ ?_@?^k?Fj?A?T4?%+€M?7?Q 26`NZ'`AWD@A?A0E?I 6EG3`]uՠdGR$C?,Q?Lw?<B7 .3 /E{v@?0?R?F`?26`?ES`?>ZL|Y%`B"`?:&@ 0J=k ?;?B?3@?S??_X?oTO"< ?S@?]uՠ*fC?B?O?E?`&E=k ?3??oTJ&@AE= PР0?J:@?I_?Fj?:v (0@@J&@?00?U3?Vu ?G&@>j?K\ ?K`?3??1?A?B$&EG1 ?B7 ?^Q ?M0`441G{6k @?V$`?]D@?8HȀ7 @?Z"?A?9%`1> FAG{ 9?J?X*?\n?P/; &@?S@?B"`?J?5{v@?U= ?Ky`.҈@ES`C<-0?!oT+€ lCuee΀?Y}@?a3"^p@[eVXY Ul%+€ &@$?E>lQ 6 ?R"`?j?U?^3 ?&jQ.Bj0?"< 16j?$?+€?P:| ?dxm?VL@>3 ??J?VX?5{v@=k =+€?6E6B:N ?NG ?M>`?oT?(06ES`@@?@`?TG?Zv ?'`V`P@@@F8 ? l?2$?@lL?,T0?<?N`?KQ?@9?`1?A.?LQ?Cue?8|@?@>e΀H.3 ?Tà?TZ@!?Qπ?JD%+€?SI?>`N3 Ul]]PDrV @`Q7 @;`"< "< >l?L?E&E?!oT?3@12J ?3??A3(0PРA.?= ?=l?(HȀ??"< ?PР?Q ?+€HV E?`H O6)3ue?OՐ?X*R7 +€?_g`?a8@?E>j&jPWP C%?09?A[gQ=`9K?K\ BX@>@?Q?00HȀ?oTBJ 7?G?58 >l0(HȀ?YU?^k?'BJ @BFBNb 9q?Dd?6`?@`?]0`?Xp`?CM?DG2V2`M$Z?G?Y8`?@`Nu@@Dr?0?(|@?00j?6k?C@???,Q&j7Y+e΀6BCax?' @?X@?Ug@:?8 ?4 77 @ l?qR$E{v@?=?MSN3?%*?*?`6k@0;@WY}@#??(0l?B7 ?D@EP 0?%*9_+e΀S@X>S5T>@T>@KI =+`09?/?F`? 0BBHp`EP Cax_T f$`Oq?U{v@?^P@W}`DP?44j?+€?Is?D( >oT9G??0 00c`iM+`?M0`6`[`D4?;?,T?A?F2`5S`l?W:?Oq0?E+€?;@=l?I_?a*?UF0 R@G1 ?%*?!?`?'`'Y?F?aG{?R^p@4Z;\ RR@U*R6`f3??6?UI?`@?]l?I_?0?.҈@?J@?V?PР7YSMKe΀4dj?>Z?Q8@?H/@Dr>@?'YD@ALdJ&@@`=C%E= @X_0@6E2^p@?:?GM?B6`?K@?@9C@>l?T2?7 @?%+€?YU?B6`\QZ:@G`MlQ3U+€Y SW Vt `+ W'ܠ+€?!9q?5?R lY%`X9F2`?Br]@?OPlLb7 HC ?BJ ?=k QA?J1oTI%`2$?@2j?0/q?#M?80C9bO~g}`P0?WO?R1.?- ?NG ?2>@?&E!?3 ?:N ?BHHȀ-l?\h?c\}`?W}`?.3 ?=?'@9TP]AG{?S%?%+€Sko C%7O"< S/@XC [RTxmC`?"?F~~?VE?eP ?e%@?Q ?$??9%`?X*?`?w`?N3 ,Q@&`$?Hp`?N`?,7`8HȀ22*v @$0@?;`?S@?=k N Fb X@&`?TZ?R @? l?L@>0N32^p@?FB?[x?b @?MW@@?D?2^p@FB,Q?@?j?$BJ L0@:@j?R`?KQ9KQAZyJb ?Q.?KQA3j?G:44WE TQ`HHȀ@?B"`0Ld>0?4 U`\H?f?_g`?c4?Xr?0@IKZ0Zv S,`VBNn &@AL@1G{TGPР @>@J`D?K@?Qe^`?2$?N`?Ws?Dd?3`?6 5*?@X_?Y{ ?V`?GM?M5?' @?l?#@?3`?TF?V @?KI ?Cue?0?26`?U ?PvC!oT&!%+€?'Y?(HȀA[g>l?7Lw e΀?_?JH@@FXFHȀQaP& @M _˚ Zv K-A8 A3H4ۀ?:@?VBjX9Oj?5*?S,`?R?(0Ra`c T>@?L@?VO?;`%+€@lL9q?!=+`X*J?P& ?R`M>`W@?PlL?[=?P ?oT?7`?;\ ?jB&E?2? ?A[g?K@2J V$`UYGE ?e΀?DZ?CM?;\ ?2^p@?'`?!oT,T9?%+€T @0?X ?S?"$?L?:v ^ԀV` ?TZ?O"< T<XU_XN`?N`?N F`FL6 7 @?}XRA?P/&Z@J?A?PbV?;=:N e΀?B$?LQ?Ug@?P/@N`\6 Vt ?A?X9?L-=k ?(|@?` &@DPO}?@?AV6 ?`?80S5A40`;\ \d^`;>e΀F2`T H@?!?04<DQ >@?a?`?= >3 J&@Ky`A0?*&@1?j?`X_?e?`?T ?7 @'IGMCMK=A?C??HUqc*?0?_@>0Oq?7`?P:| ?B"`@+e΀?(HȀ"J?=?`9?F._jd-`Ky`?C`?I^?C@?@@FX?,Q#@?$Z-lSD<??"< >j>oT?Yi@?VEEg@J@?I8`?PР%{v@QX Vj2J ?A?4Z'YR"`[I >3 ?(HȀM>`&@?Y ?:&@PРH <>@?=k @0?AA?9q?D@?5?FV?AK\ YK#@?N F?:&@1?O^?M?=lER6`?7:?&Z@/?\w?BJ 71 >oT0?0X_lTà@0?C`? @<|I%`C@?A.?K*?3ue 9RTyS\?=+`?RJ ??0M^~`Fk?T4?W?F?S,`?VX???4Z@RSI!?0X_"?j?NG ?lXL@?U]?Cue>oT?U+€?]?NZ? +€?A.?@`l?P@?c?Q3X>]7 @?%{v@71 6E2^p@Q W<|?C,`?P?NԀD@P :v ?*f?A?[`?T( ??!?Jf?SI?M oTL@GM?@?26`!6jQ_JOjIq0@?M0`>0Cue!oTFkNb 7:GYMW@44D S\B7 ?O"< ?\T?Dd> F>0+€M @Z ?N?X?4w?6( ? ?@ ?@F}QN@?`Ka?SK&S3 ;`?Iӝ>㏝@ȗ ?74, R/@VFPZ P cb`k@?Ak?Ser?&?/{! D?=4@B} HLe`ZfRZ?3Mj`$B`ʇ@?ӏ@6 Q ?3h~?S- e/_?Mj?P2@?6O`_?%Հ?@2@@?E=?Sw?Rj3?; ?=`?CL ?9~`?Lr?@Z Q}$, ?d?]ɀFL@>ޤ ?Rq?]ɀ?_@@?R 0,NRXRsUqbeO Y?E*e ?J5k4w2/@7:AD;ZRVWkG& R/@G@:95eWkFO`Sh~?+3?E@~`?F`?[Z?Pţ`?,l?+ ?CA^?@97 QDKGF@4@ x@?e?AD?L `?3??&O`?R} ?]0L?]Y ?Qu7@?\r?Wu9?<?IJ`?,OT?A@?`?M -`& ?6-?53@CT^RV`:H@'@?Z ?SrE?X?\r?U9?*H@&L@?R9L?Uq ?- -`?[R?Q19@; H@?P€?Y7 ?Q 2 `QNP`XV- \E@Sk`OT4, ?D?V`MPc@JpV`?W [neQ;` bN`.e?%e_R `ExH@Ll"V`?FO`P€_ Gk02@IqπH?-F( ^ ` V XLY ?@@?(%F ?NB'@?Kne `O_Tȗ G`ӏ@?6?I?H0Z RUGBe?5=??@Z ?_`?I-@TwE3@ ~`L~NLlIJ`?Jp?a)?_{! ?Q ?=~ ?9_ ?F?9^?3?.e?B ?J?>Ï@?Pwd?R?H_?Pc@?F0Z ?_s?H@?Pwd?4?@?\;ɀ?R} EQ`8?P?L@?@@?M -`?@`@^NeP DzX? ?W??Q ?\~?c#?[ '*9Fؼ?P@?Z ?@m ?)~`?,lCEՀ?ȗ _NU[x-`]`PF}D[ _=0L?FEՀӏ@Bj3? x@sReFv?+ Kneeg@V`?0Z ? WkV㏝@??-`?$zX?R%`?V ?$, ӏ@5e?I?SrE?IJ`?Kne?B!&DU9Q ?I^??S':1D?F x@] -`_{! 4ȗ ?B 1O@r@9~`@`B} ?6 ?L@?=`:H@SՀT7k x@V es[GF@KRb`wd?R} ?Z@@Z PT"R``,L?Mɀ?Sh~?E?:x@?VY ?a ?J`L@ R%`K)^??1E?6v?UG?\?.ޤ RW`2 `?`,?c0?P ?B/@2/@``bXV XEq>Wk?CT`?Ch~0,]bU`SK 'X/ K ?B ?F ?(s? `2/@3h~?3h~?97 ?E3@?W`?M~ 1& x@?QE?[ ?D@K -Wk?E3@B Tf?&?Tf?W0?E3@>iFIӝ.e?F@CU T]@?0`?9S^@Gu9?U[L ?VY ?=0L?3h~Wk!?.ޤ ?97 ?Ux?b9L?K 'L~B?C- ?S?6VՠV`4, >Wk?3@?3??53@?Uq?Q}GxR (%F ?F-?Q ?Mj?L_`?9^?I_ ?)^??a#`?X/ ?02@>_D@?{! ?4zXBR@]?; ?U4-?b`k@?Z ?Ex?%R?4@?S?Zr?Qb @?@^? x@A19@Df?"?I^??3Wk?9?49^?ȗ ?Gu9?MY ?I?G@?P)&`?L;`SՀ8HAͶ x@@@KHRXk`F}L<Ak?/{! ?C?1E?~?Y?d@Z >_?T `?P2@?4S9`@?O@r@?X?B ?SA^?dp?P€T, R9@?8?M2V`H ?D?Pk >x@Ia,U@fN| ?F?(s9^?5e?3?X?S@<2} ?M`?Hs?IJ`?Vc_?J`?(s?3??%e?H'>?E ?SA^?T~ ?K3H%F [3W& 3??P)&`?@,02@?M?P<9~`3?'?~`?D?Q?Q??Bߐ?_?"e?\OY ?Vՠ?D@?2} T]@_gDw?&L@?P?U?^`?X?F( ?7a?F~@?X8?YF@??~FR9LQuQkO B8sV`?JL?Pۀ?4, &L@>Ï@?Q?`^?Qb @"? r k MWk8s?;3V`G@A%Հ+3=0LHqOgG:A19@MWkOg>s?J L~?MWk?b@?@_xC?OS?GX?,l?CA^?[ ?U3@Ee>?_@r@?a?97 ?4w?W`?R 0 %e?W&?a&?X?3A^Wkq_ 9_ ?BC$zXH%F @ۀ?2 `?Re?E3@2V` ,@8%F ?Kne?]Y ?Dw)~`?V`+ + &L@K ȗ ?[x-`?^ޤ ?\b?W*H@^KazN| ?ER??`?DzX?2/@>e?A?MY ?>ޤ ?O?K`? `>@>ӏ@?1&?FL@?=ɀ?Df?5q_jfR[?3A^?I^??Q?W`?]?]0L?W ?R9L?R?Tf?G&-4@ۀL2TRCA^ k ?2 ?8%F ?V`; D@?6 ?Tȗ *x@Z?W:?A@5=?*9?.ޤ P3Y-@@^? ,D@S$`Q?NG& @^?T0K?3RL۠02@?W?C| TB ?H8? `KZDw?V`?<r" `?VL@?x@?)?-`?#@JGk??,?Pk ?[d?Z:H@`Ye?E3@53@?ȗ E P ?5R?Hs?G?V?@F}Nx`I:?=ɀ?ER?6O`?A@?2} XdNUU ?5Հ?@m ?Q;?]?`k ?b `?bU`?V`?C??T*9?D, ?K?:x@?)^?.ޤ Be7?@@MJ5k+3 `F( C@x@N.]~ 7@?R?1EP@H%F 2V( ]Y ?BCQ`_@r@VvRsHR>?)1D4@DzXMY ?@`?IK@AXX`?O,?8sF R[neCA^?T^?Ux?Q`?X3`?L@ ?A@?W0?R ?)~`?;3?EQ`?1k?0Z 9?sCT`[ P>Wk*x@?Gk?MC@?Q?YJ`?Qb @?2/@?BR@?.ePţ`Df??~? k ?s?F ?':EՀJ`8Le`?RL۠?\;ɀ)^?Z5k3?U=?K3@@@m >x@=ɀ=ɀ?Wk0K&L@?<0Z QQ}Pۀ?)?Zx@?T5?)^?0,<@4zX?A@?BC?\e?`?U@?Yqπ?b?U@>>s ,0 ?@?Fؼ?Bj3?P`?J>2/@I_ V~@M0L?*9?0`K Q&?;3#FRY-@^B'@[GF@UGX@Pۀ?Lr?KU4-ZYCA^DG4@<rP^L_@KZ! M~ 3A^V-H_?Q`?G:?V`*9ZLNiF?\?^3?H%F ?E3@0,IJ`?E=?Q`?/,?ȗ 0KAk(E*e Q 53@_TX?':?:! ?_?Gk?Vm&?VO`?ST`?K3?:9?'@@^QXX`?L#A^A?Ll?Y7 ?KZ)^?C@?CT`?\Y ?DIr?Gx?:! ??_?K ?6-??(%F 2}  x@?7&?sJS75=?*9EK`?=ɀ?T?Sw?F ӏ@?*x@?PK?A`A&G:NW -Wk?Y@?RR@>㏝@ rG`Wk?`" `ER `@`a SA^?J?V`\r[kB4zXRR@G`?N?[3?P NWkq?<@?Q?9?S^@?^-?SՀ?CT`"eR`k@UL ?FL@?@k ( k ?8?(%F (s?C?U=?8IqπTIqT"R` 2@?<@P[ &?Q?HP`U)GN`R Y7 WN`Y-@S@T5^^K[RZ5kX%F Y<r?R/@?,T, TV2xHLe`?N.?U `?E ?" `FؼFO`?ȗ 8sAw?9ӝ?=?= -`?U ?A S$`+3?Y~`gI6b7&JL\R O{! Vc_C?2/@ G:D4@BNޤ >?e*9 ~`?F?H?6O`?:! ?CT`0KJ9s?Q ?SL ?Iqπ?1D#>?$zX?R?TpP@c$`VؼDzX>ӏ@?4K`Nޤ ?Iӝ?RX<@a`d5P)&`;3X@\vx@S3 J! ӏ@2eXX8L `H%F DI~`B ?Be?ADO{! ]jVF1?JH@?Qu?Ga?&L@??I_ ?ADWk?V?I7 1@?;`?I?,JY?E@?JQ&T^?Ak?GN`4, 6( B/@QD5Հ?)^?G@Og?7?R9L?5q@?G&?BeC5R?J?P`?L2?V`XˊQR ?V2x?PPE[^K,r@x@?1k@`7@?V ?Xk?3&GxK '?-@Y~`R ?A ?02@RߐH%F ?<r2} ?;R?Pk ??_(??_?8@M0LP@KD>s?M~ ?9? Wk?V?`2@?N?G`?U `??,HLe`Sk`T5>s?L2GXV r2/@SA^NUQR F?C?1ESA^]:[Q K`@k U W`DS9`#>6Kne;3 .e?,?+3B `1?C??eB `? ~`?PZ ?P?B ~`LY 9~`?M?H?#?T?_@@?= -`M&L@?Rs??`URP?Bq?@Qk':?JL?Gx?I# ?A19@?%Հ?J9?LlQ b4h 6L@?]@?X~@?H?Re?B `8?1?KR?CA^?V( ?V XN`Qu?]R?^s@Rq^e@`_?e?0,1D?5Հ?^?`c@?UR?KZ1Hs>㏝@!kRߐJ?9,ZpQ19@?8EQ`?I?[L?E= -`?/_?B/@ADL~5Հ$ȗ ?e?+3K`Tp??_?TS9`>_?E3@?da ?YJ`G&^iFbU`V,?T?UE?WkZrS磀PwdSHsOQb @ȗ ?)0Z E3@V㏝@? 2@?Rߐ?O@@:9P<6v?Mɀ?P^IVm&>@#[X_;Z ,?%e?iF?GX?Q?Q^?L@?e?+3?:1E6L@H@ `Ex3@??_E@?K ?[L?2 SeL7aG@E*e ??" `-Ex^.dL_`?#A^G& `?^_~?VÏ@B `F~@?Df?O,?r?&?'4, ?+3?P@?T?KZB ?6( ?EՀ*9QXX`Sk`P`EQ`!k@NiFZ5kSPm Se2} ?@Z :pO,6L@:H@C,>@?3A^?V`r*H@%ՀJ5kcw)d?R RC`ʇ@`hZH@P^㏝@?0k ?,l?F-?; E=R^_~h0@c⿠F`0KEMjUՀQ19@4w;R?e?` ?\F`Pţ`\OY ?-?F-O`N?X}L`?dX@?AXX`UՀVՠRT~ Y{`[ϠL?8s?H3`?V`M -`R 1&?PF}?KZD@T~ N| TVe@Ï@?>B'@Q&ZLJLQ}R%`?8Le`?Iqπ@>6vZx@U ?2} ?;`?*9?Tf?X/ " `Pk 2V`"L@Ck`?-Wk4@Sk`2 ?@k QXX`Y?Eq?S@7@&?9~`=~ ,?Q;?T^?B/@4S9`>ӏ@(:?2} "eB} ?#?H8"e]dzXY;3,?& ?KZ?@2@AkR} UeU3@O`1@?0K?A?I7 ?5=XˊiӝfFU@JH@L `J I-@I_ K Nޤ 6 ?N?Sh~)^?]fՠcFBA19@?9BߐNU6B BV`?sH@?L_`?kx-`?fH%F [Q ?0K?%e`h \(9?X?i ?SQ T+ ?=`E=#@?5Հ?4zX@Z YhT??=~ ?\@?[`?D@-1E2/@+3?6( ?!&J9L~J\T&0k ?\r?Z?)>@OOT?6-?K@?)^?V`"ePVeWXXR `Q;T?UxH3`? ~`?)&L@8sNB'@Z`Q ,>s7`Xq`ţ`XR,E@>,:! - -`1ED@B `*92 T?aETIq?Mj?J9Q`QD?02@?6-?>B'@?H?5q?V?k@?aP<Z@.e/{! Vc_M`?Tf?az?ERQuPwd?8%F ?R9@?JL?<?2 ?s,J9X3`<?T5?[3?[ ?Uq?7a2?:?N`?P,6( T&IQR ]Bj3?S7?F㏝@?.ޤ ?Wx?Sw?D@?VF?V?:Y?(%F rK`@2@?,? 2@?GN`?S,?0k ?>B'@?RL۠?``?SrE!&ȗ 0k R/@L>x@0 UG]C@a19@c- Y@@m '?, 4ȗ W?Sh~,lGVSM`)>WkSA^X AD=C?2V`?M:?FL@?, QZ۰`KGF@:x@T]@L `?F~@$ȗ b*@YTx ? ?;Z?N3?Pۀ?@?HR?]?0,X_U LDw%R??,?Se?Q;.ޤ T `S7=Wk?(s?1@AE7 ~`O~ZL??X?HR?#?0K0,MY Gu9?:9?P )^?M:&<[ Pۀ?2 `7:?4S9`?3?0`J\W`YI^? ,CTDȗ ?EE?O@@?=~ ?AXX`?T?V2x?@2e>e53@ȗ ?'?&O`?2} ? WkP`R ?6( ?F`_?B?Rq2}  2@?>e?VF?F`3h~ӏ@K 'Ck`?2V`,lW0T5H%F UYqπSA^RV`I7 G@\@[)C,HqS3 Gu9>s?H?@F}UЩawST`H%F @Z ?Gk?Xq?UE?EՀBC[ S?;3SK&V':H@aNQ@?e?V`?PZ ?Pۀ@(s?C>iF@?-BV`Q&=0L? x@?Bj3?Ee @F}F`T&Ve@Pţ`R V`Fޤ ,>s?4zX?1&HU G@:H@7a?>B'@?OS?*x@,r? 4@P2@O X`P@^B} ?2? J! ?9?LlA?I?7&?S@Ï@Nx`D2/@?DzX?V X?S?U?N`@ۀR`k@IqπMY QDS9`QcL aIs?,lUQ`a\BV`?Ck`?5q?4?X%F ?Q^CHqx@?3A^?Dw?=ɀ?2/@?M0L?UQ`?L~?1&)<r? k ?]ɀ?hn?^L:@F}- -`2?:?DzX?Bߐ?A?I?C9~`WXY@J5k?e?O_?S- ?0 Wk?G:?-OT*H@?N3?QR ?Kne?7a?6vE`3]r ?@@Ï@5Հ>ޤ U4-i{`j~@Ee?Vc_?Nx`H@'EeTfF ?2/@?&O`<E=E@9?/{! ?6v, 1DBCS?QR H@]a3`? x@?NUA&P IJ`Z\ZpA?4zX?I_ 4S9`[LA&?>3@?2 ?O`5=B?.ޤ e㏝@?E@?P?W:?Yh?YJ`?a}?^iF?@2@?,l?9@? ~`?Q``@S- %RB `OH@P D?>B'@?:H@?,l?NB'@?BCE JL?Ga?L@ ?-`?)?Q@?Z ?Wx?D@? x@?I?X?U4-?N.?4zX?T6( ?4S9`?4w5qL3?Iqπ?Gx?'?"e(%F 4@?@@?NB'@?K3?U?Rߐ%ՀGC?ERs?K?Wx?SrE?/_?2e?"V`LUnKZHLe`Qb @LrJx@`/g"@S- ?GN`:X~@Fe?D&?AD?8?U3@?` ?<@]R[FؼQ19@_J:eQ`bs$, ?BV`N2/@?\ `?IqπI^?5q? ?0K?K ?J ?@k ? k HqP<e?Ga?F( ?&L@@KQW`PE*e [ `2@IH%F I# ?K?T?$ȗ ?EQ`B/@SA^3A^GXcaaLY 7:5qCh~D&?4@?=WkA19@:?AIYhNU:97kSL \& ?M~ "A19@?':?1&??/,?=4zX``Wx?X@?`z?3?6 ?HR?2 `?Q c(@1&?a ?ID@?V`5=Y# J?<@?/_M0LC?F~@?MWk?@^?,?,?L?V`?P?M?Nx`?>PPEO,?:MɀXkQ`hc⿠+3?X ?LY ?Gk?\?97 a X?M?IqπPPEY'L@ :@Z WW C- ?@F}C- W0C7k5R?C?M -`?1&+3BCB `_?A@?G@?BC?=?80`J! 7`?B/@?R?7V Z9HS- T `?_?,:Y?CL ?T?2e?9?S- WkXIӝ?%e>ӏ@?>2} >Ï@AVm&?&O`?Z۰`?0`JH@?(?Q??BV`P,Vؼ?9^??RV`?e?ȗ ?CA^?J ?VY ?U?J ?FL@!k@Z ?K3?F~@P@L??:H@?Lr?+3Pm ?+ ?\@ ?H3`??M??~J5kC@?>ޤ ,V~@N`?CT`?O{! ?A&L@&O`?XLe`?a?Qb @?Qu?E*e VK '?R?>ޤ ;Z@AD=Wk?_V`a )~`?Q&?eNޤ Ak?HR?=ɀXiUG?N?MC@R/@Wk5=+3L2I0,G`^x`\E@KGu9EQ`?))<@%e?5e?<?eV XUk`-`_'@?>B'@?>ޤ ?e?P ?]&?Iqπ>?K3?N.&>_?D?9^?x@N.Tȗ ?9?Z?@@#A^?S?d5?\9^?K?M?QDsZx@[GF@Ch~?H@?Ga?@2@'?1@?=`A&E*e ?6v?K@?EՀ?_?>iF1W3`D, ?V`?a?Y7 ? H@?5q?B D, ?1E?OQ`RV`?S?Pe?L@ AͶ Dw?Q ?FvFO`T\Q'q`V`OT_'`Z]!b [4, ?RX?Rj3L~`ţ`K ?,C?Ve@ReK =`?4@%eUE8%F ?P^?B?C- ?Yh?SrE?EՀ?M -`?4w?0K?Vՠ?=ɀRV`?LY ?j9?_~_+3'@:p9^?6 ?3B `^l^P)&`.B'@?@Z ?D8@CT`?EE?P)&`? 2@" `?,l?D?Kne?,l@ ȗ ?BC?; ?ȗ rDzXP<(s?G& ?)^?(?=>Ï@SePPEG@X\R9L7:sN.Q ?CT`?UE?'@?4, ?[)?[?; 2 `?!k?)F@ۀ?F?J5k?B} ?H?5e?':?F-??,B?:H@?8%F ?2e?T5?W@?':F?EՀ5eW& 6L@?A@,l>㏝@?H_G@KZQ`5e?<@Dȗ \2\`b ]@,?J?6O`[ 'b4h F?F?9F( UYJ`UqHsPYBߐ?_Jx@4, ?T?Ck`#A^?ER??~?4?W3`?9_ ^@@F?XLe`?M~ 5Հ4ȗ ? x@?D?K ?2} ?4ȗ ?G@+ U@J#@GaR/@I7a?I?\' ?EeF~@2/@?@&L@?7&?EE ,0`?7@?;Z?-?/_4S9`P)~`?R?J?B} ?GN`E=R/@6Fc_\lS?4, ?;`A'?Pk ?D, OSRV`?+3?Mj x@M>x@?P,?<?Wk?@F}?2 ?D?\@ ?Y'?9_ 4, ':RR@2e:x@DS9`?J\?V X;3T@?0k ?R9L$zXNޤ ?,?H@?6O`?8s?-Wk;Z2/@- -`Df?V`?F(%F P,QEQ MɀRTfBeCL X8S3 .B'@?#A^?@Z WDRa`c7[dN.@m >㏝@@ۀ`|HX_?0,>s+3?Q`?Pk ?_?9*x@X}L`J\?AE?G`?@,e;3?CA^?Uq?Ex?C@?Tw?Bj3;Z?:x@?S@0K`€]t@s?Y_ ?XB@k ?:! ?,QD@Z ?C- ?;3s& @Z B:?V`HQ '@?@K?&L@?4S9`?L?:H@?$ȗ ?ST`?IJ`W& Zs?eEE?!&?ST`?P? 2@IQ}H3`P2@X@D?F`?Fc_?1@?V`B 8?Rߐ?`,?SA^2} =`EQ`+3DS9`Qb @?53@?Qb @AXX`Sh~?6-?KGF@E S7?4?Ux?G`+3E=1@?6 4, URNU8Le`CA^EEEe6 ?BV`?.eRCSC| 8%F @-WkNiFJ`@m Q19@^c2 `Z F-?ER?Rs?~`YJ`Y97@"?7`?]:?Z ?~`Fc_P@H ?Bq?X?Z ?U4-)W0E? r;`??UЩ?Pۀ&?C| ?[d?53@]C@WX?6L@?N| ?8s?2e?Q^?U _U@Jx@?1&?E=?53@G:\Y{`Wk?R?^@@?a ?M0LP,Z?3WπT `= -`?9~`?;Z?%ՀWk@Z J ȗ ?U?^x`?O~?;Z?$, ?SL ?R/@)A&@F}R,PPE?,?;ZBV`P,?s?OT&O`]Y~`? ~`?>O@r@_@@Y{`Uk`Tȗ L@ OgJL?Bj3?Ne5ՀG`?0Z ? `B `TIqL0 4S9`Ch~Re[GF@Q`?3??JQ19@RFؼAE?r?T?Rs?rCT`R,L_`?AXX`?Zp?Z5k?KR:H@QR B Bj3Re>?L~?JL:Y?~? HXV- ?Mɀ3@LY ?Iӝ?aE?UЩ8Le`F- ~`?"?=ɀ?NsX@R?7?KZ?6( ㏝@?4zX?H_?(%F CA^*9?-?)?O`?T, ? x@!&?D, rP^2} ?KZ?]֑`?bo?RV`DY-@Y_ =~ ?HLe`?J! ?4@:8%F >B'@Ak@2@?8%F ?W??]?\@?@?]r ?b,?:! S@Tȗ ;`?,1E" `; 5e"eV`d{V( ?<@?SK&R DS9`NU[L UQ`YTx W3`*H@?CA^? k e?2 ?4&4S9`8Le`02@(%F 2@?4ȗ ?3@EqP '@:M`VFQ J ER?:! Wk?T?WkP J9?=0L?H_e= -`?3?I?'?~;3>@&KV XZ@b HR?YF@?]IJ`Yh?=Wk?[3?@`J! - -`?H ?(%F @?U?Vm&#?!k?[ne?S磀"e?97 ?]Wk?]:?;3F( Fc_CA^LAD?!?0k ?Fv?Q`?':I^?;`?=~ ?L?;R!s9^?JH@?>e?Ve@?4@3A^x@D@Hq?_?=`?4, ?4w?Pţ`?`@6-?Jx@?P6L@V-Ch~?V`?Z` rFL@ r#A^@^㏝@.ޤ ?7:?#A^LRCFO`6-??I_ ?L2V`P€?8?Zy`?-WkRq0Z ?0Z NB'@P?E*e ?Uq?G& ?,l,H3`K CL A19@Qk\(98?a@?` &H3`?4, ?Kx@UxL?CL ?2/@Df?Be?XB?8s?2e?Y7 ?EqT@@,?X}L`?UQ`/_MC@>x@>SK&O~?r?RX?WW ?N?9?3??:H@?@Mj@K?Uk`?V?7`?Q?MjS@Q??JL?A`4@?; ?S,?G& 4ȗ (?Te?2V`J! VO`Iqπ?J9?R?%eȗ BeCL Ï@?,?)^?? `GN`T^4, ?E ?#8@D@\(9`hA19@?F`?K ?B/@#A^CDfM`K3V`?$zXAETQ;BCA(?@ۀ?H8-?97 ?iF?'B/@:9?/_?N`?C@Q'q`[L6O`?MWk?Qb @?T]@?X%F ?P ?$zXBM?9_ ?ce?^K?0,?CL ?,[ K ?^ޤ ?` ?8@x@?2e?C?:H@? ,?Df?F-?Q?Gx?ȗ Q'q`]M [k[ϠL@?5=3A^Z@TWk??~?7`Ck`X Tf+3?.ޤ 5qBV`AX@\@1@?AͶ ?%R)~`G@O O@r@\@c$`XsBߐD, Q`Vm&X}L`V 4S9`?+3VՠbA?GX?Be?FO`?C??8@?HR?8Le`,?>?C- 1D?4w?P€8@SA^?@NeF ?D, ??~RߐM?T]@?Yӝ?+ =~ MUFO`>㏝@?#A^?B/@?EՀ?O,?Q`?2 `8?Dȗ ?R?Qw?*92/@.B'@Dw5R?W?eG?`. `?P?:x@?2V`?,F( Z۰`0`?C| XWx?J9?4wJ*H@?0K?@@)~`]M0L?CT`CA^Rȗ 4I x@?Gk?Dȗ 7`S@Lx@?Eq?S- ?L?@ۀ?!&F`Fv? Wk7X8P^?S| ?YF@T]@fՠY-X[Za]<`?%R?ZfR?DzX?ER?H@T5c?N| ?x@<?1k,J *9?M -`?9ӝS磀H8?Z@?_6`?<e5eCk`(%F V`e?Q ?`€?W`?>_,?&L@?㏝@?I?G?Q^?I_ ӏ@?D?U `?F~@?&L@(Df1@2e?:p?O@@?F ?P ?Ch~J! ~`?U90Z `KaTwL@V?F`?RO~Ch~?NU>/,?x@TwUn7:NeDȗ >WkFv?/{! ?WW ? 4S9`?7@Rb Pm ?.ޤ ?$, ? ?Sk`?`ۀ?LAHqE3@?.ޤ 4zX'?H@R^RqR9L_,Z98Le` U=\E@=ɀ?Aw?:Y?2V`?@m ?AͶ ?&L@:H@S`2@_@r@ZfR[Q D@?C- CawT@Ï@?? ,?= -`?53@!&DwB?3??H%F 8@?&O`4P ?"V`?Gx& >@>Ï@YTx T?I~`?Jp4w7?%Հ?=`?97 ?;3?FO`?AXX`?BV`?Ga;3S@?&?QE?TIq?_'`?[k? ,F( Q?Sw?0`?R `?$, AIUeQ G@B/@?Fؼ?O~D?:Y?I:! U_QR Xq?E ?ZH@2V`R9LK`TG:>iF[)QXX` `Wu9Z?2?WDR?b4h ?a'q`?AE?7?N':V XR9@IqπPF}H3`?PK?`Ka?3FO`?.ޤ >x@KHD?DPKa'q`_`GTIqcޤ ?8@?&L@?:?#A^+ ?:9?ST`?:Y?:?FO`?~`L~6v?B ?3CT`B?"V`>Ï@+ ?9^??4S9`53@:?7`?L `?]~ ?Z?2V`Hq]~ ^L?=Wk?be?T@sLl[Z`[Q `|HBq?F`?_R @^A`?)^??`ۀX@[`@ ?I^?UЩYXLe`? ,?QͶ ?6O`?I^??QR9LcA^L2?LE@?ZH@?Pm 4, =~ ?5e?J! ?H3`?!GaZy`[?3?WDRA`RR@?Ll?N.?,5ՀÏ@O@@be`XRDXV- a"MY ?#@ k 2/@?;3?L?I?&O`PO_?I?O@r@G& GN`?QXX`?^L?PPE(%F 6>s㏝@? `?6'?9ӝ?A@?V`Tp`^KGF@?8?2 3A^F`'?L `?I^?_D@G&?:x@?\;ɀ?T `?Ck`?P?E?e?Ck`?Nޤ ,Q I_ '=ɀCk`?<?T?C?6( 8?8?K`?4ws?&6O`@m ?GX?W ?E WkIӝWkqKC@T:Y?C- Df_6`]S?6v?bR@S@Iqπ@,@K>e6O`G& ?T?Wπ?d ?X?P?HQch~`|HUL2I-@Uk`^KV X?=?[k?QD(%F X}L`az?ӏ@>ӏ@?C?R ?9?,?ST`?Y?V ?V`?F 8@:Y>Wk"=`':?IJ`?Z ?TA?':?3A^4S9`.e?5q?FL@?T, ?V ?4@?_<GkG@?53@?H3`?4@?Gx?O~'@QͶ P,HLe`0K??@k ?J! ?=`?8Le`?R9L?Ye`?J ?6L@?UЩ?YJ`?02@9ӝ@Z R,Tȗ Rߐ[Ϡ]r Sk`Tpbaa?`?Ex?:p?"eDȗ \~Sh~*H@E*e AͶ ?B} ?@>G:& #@Dw?& ?V`?!&`€cs;3?_?QR ?E :?(?>?.ޤ ?4S9`?BC?<4@^?[3?P<? r?*x@?V`?_F?P`?@B `TzXO`KT?T?; 2@E=2AU3@QD6vE*e G:?2} ?6vIӝVՠU@E=?G`?W@?L@F~@b<`^B'@>s?Ch~?I?S@WkV XSW _~LE@?'~`.ޤ @@H@x@?s@k ?%Հ?UR?R?>e>ӏ@?ȗ ?R?Wk*x@RߐE>x@?@@?>?M?a?UR;3?7`?VL@? k E@?2?H8"V`MY 6O`?Ck`?<r0 4w?3?Rs?JpI^?Y~`SP2@<?I?N3_5Հ?K '?\;ɀ?^?V`':W0H?I~`?X@?J! LS?5R?Rq?Pm ?Sk`?BߐAk?'?S?.ޤ SW0H3`?:?7`?4@??{! ?~`UՀ?L@8sWπSh~9ӝ:,l>J YZfRC?G@]:Pc@?E@?OS?H?Eqȗ 2 `?GN`?BCPc@RV`>Wk2@S,H?Eq?NB'@?B1` _x1k1kL@ AXX`NB'@S7E*e ZA?O@@? ,Y~`Z+F~@8ALCL ?Pۀ?]֑`?>ޤ 8Le`?6?Q;?R?:URRV`*9#@6 -`?L@?c@?\r.ޤ 7`?~`8?_&? k Ï@C,N3C| DwRD@?SK&?c?T^QͶ c?_6`B?E*e ?Og?CT`?V`'@?97 ?L?BÏ@EՀRqDw?0,?7a#@G&G& k ?:?5R?N?*H@Q'q`@ ?FO`?= -`GxV( Wk?A19@?CT`4, V^ XLe`ZY\M -`? sPۀT]@7:A@\Y W& >?GX?Ll?8%F G`; ?P?@k P^L@ J9[ZKGF@?B/@>@:Y!kGkDf?/,ӏ@& (%F \e9Z\U3@Y# F"Ck`6( ?B `s\ `]:E I~`YӝZy`E3@?S@?_?7:?_?P€?c ?VY PۀaPţ`%ՀI^?WkWkq5q?W?^e?Vՠ?Wkq?PK?9?:! C@-`Bj3W@Q=OSK?G@?X}L`?<@CPţ`NB'@?Dw?a@?X?/_?, k 2 `4ȗ MWkRsBߐx@?0K?%RAk@@?0,?7@& AXX`2 ?/,? 2@C?N3A19@?0,?'3A^?L?a6 ?NB'@_?=0L?B?Q7`QDP2@4, K3Rs?J9?>;RL `2} ?:@m LBV`02@7&U3@bn`Y@4F Q4ȗ QXX`eՀVc_?C@?5e,r3A^PZ J?6 ?LY ?Q}?A&Wkc XS$`Y9P2@ȗ J\7@?D?>?2 `?A $, QuVFTf>_?RX?'@A`?RR@?f^{ ?[3FS@?_?4ȗ 6L@C| Qb @Q&??MWk?Z?e?a@?M0L??{! $ȗ A19@?Bj3akYh㏝@*x@FO` x@4zXVFI?4, ?Df?dIq?^?5=?1?,l2 ERT&V-C?(%F ?IJ`?H3`?#@?>?RV`?5qGkiF<?"e?OTb} a6 4ȗ ?`6UI# "T@Qw?S?]?M?NiF?P^?9_ %eHLe`R9LM`1k?D?P ?K?SK&?R9L6-RXH@?SL ?]?\E@?H<rA19@? Wk `&L@?B ?%ՀR )~`?T@?*95R?7:x@?(s?2 `1?-?B/@L `Z@T@Y@Z+FO`㏝@sO`e9kBb`bqJCk`P @K)K 'D?9~`0 ]Wk\bFv?)~`?A@C- ^U3@?9~`?9ӝ5RP<Dw35R0Z 6-?ȗ ?S??T^?B `?D@?Vc_?X?!kQ k ?Se?RC?RV`?Wu9?O{! ?,Bj3 ?M?Fv?@@?W0?P`??H@?Ck`D, ?M -`? 8?3?QE?W@?@,Uk`\DzX/,Gu902@?G@?Hq?6L@@@`wd^l?; ?\e?V ?P)&`?L?C?9>㏝@EՀL_`2 ?=0L?@,?<@?G?2V`J9M:>?R%`?]M ?OgHI?F?Qw?Ck`?U@?a??HM~ _?QN?7k@2@?{! ?5R+3\rS$`)~`H3`F`#A^GkO@,4zX?1D?EQ`O@@jank`ZL??6L@x@?{! P,V 1E?Pc@?0Z S@X}L`X Y@X@bfhB]~ QF( ?H@:P^P@I7 I(%F ?@^?<@? 2@~`&O`?-?T, ?Z9?2V`Iӝ??O`?Q??Vՠ?Fؼ7a?"?Be?(s?<?4ȗ ?)?Ue?Sh~>s?R?cY@?Rq?1D?D@?C?MWk?\?[_@?H3`H Sh~D, G&Ne?F( ?` ?T7:Rj3<@?RR@?_g?QD3H?I?Fؼ*H@@^?+3?>*H@eL2Rߐ:! @?4zX?Re?3h~WW Hs?R9@?S??M~ ?b@?h6?WW e?:"e?@VT, ?6 x@^LVm&-`)~`?:H@?JL?e?Wk?(%F C@ Wkqh eՀV - -`?<r@Q?T^FiFr?O@r@?Wπ?Y7 ?Ck`T&`@F?Pm ?R ?$, Wk?K`?Nޤ ?x@*H@@^TpJ?3?7:?4, ?2/@AͶ /{! ?@?A@?NU?\?V℀?eF( K3PC| ?$ȗ R9LQE?4ȗ ?rF~@?$zX?4, DS9`*H@?-Wk@^?,4@T~ ]RZ5k[ 'T?D@MjOS;RQXX`` M?EE?H?7?B} ?Q@?Rs?&IC?4@4ȗ ?6L@?DCh~`Ad bYS?T5K3)>KGF@?A19@8%F IJ`5eCh~A`?=`?A@?$zXQT?@K?J! 6v?x@?6 AͶ ?_?3@[ [ne?Q?[L?6( ?Ak?Y-X?QXX`;3,r.ޤ 9^?>B'@"V`?Dȗ ?H3`?"V`?BR@?W`?CA?"?H8?1D?:H@?E=;ZT>iF?J\?Q`?A?9ӝ?T&?\' ?P ? ,6.B'@?E ?QP H @?4:F?UR?RC%RJH@M~ Pm HLe`?ȗ ?F ? `?#A^?6( ;Z$zX?TS9`?>XˊS- -`L2Vc_L@ IJ`Ve@^3XV- 2V`?_L@ XLe`U ^a @^?EՀ3A^Pc@H@?N?N.V`D?;R?RV` I-@?2 ?/{! \f#@WDR%R@`WDRR/@?%Հ?@`&L@4zX, BR@Q SA^QD?s?\_`?]Wk?Kne?D?BR@?7a:TZ?%e?NiF6I~`CSJ\?M0L?Q'q`?:?F`?^`?E=X3`T?=`?G:?(?:9?J ?K`?FWkLY Y-@H%F ?=0LD@_AXX`?EQ`M_S@F}?(sQR \@C?T&?\?1@RO~8%F 9?_>?Rs?_~?Z۰`?NB'@?Qw?^e?_F?@ U Uq?0Z ?Pۀ?)^?Nx`S3 C?;3?R ?P,?0k ?/_?Q@?B QO~?53@?eJH@.B'@?G:?Gx?6??,?W`?aҚ?\Ķ?UՀ?W@?J`A@Ch~?BV`?R?F`>x@?-Wk?Tw?U4-<@?)~`?(s#A^?;`?SK&?GXB O =ɀ; %Հ?Fؼ?eQb @)?I^??02@?K3?a?U?(s?6L@?& B/@?<r?<?38@:9@ Pc@X O~2 =>ӏ@?Zy`?a#`?Pwd9Y{`]t@JH@;3Sk`Re?0 ?DzXGN`_#Vv6v9BR@1EFO`O@r@&Q'q`!k?RV`QN.e@F}_@@Y?-?T]@?K3I-@bG`@RAk?B} ?`?b?UR?I7 ?I# ?M0L?W&?]?M0L/,1D?ȗ ?;R?H_?&O`=Wk?"?Ch~?B/@?S@?Q 02@& ?I?5=/,>Wk?_WW V G&2&O`s?>B'@?K3?D&?B?E ?*93?e?H?K?<?8s?R?]:?R9@ <@7B'@P V~@:Y?FO`?Gx?+3?_':*H@?D&?I-@?&O`?Iqπ?Wkq?=Wk3?)EO~%RH3??MC@?4S9`R9@Ch~?R9@^3ST`Rj3N| ?Jx@?`A?S?1S^@K@?3@XTȗ ?4?EE0,LrCh~7aR/@Uq?$, ?N3?"??1E8?2/@?Z?B M~ ; AͶ V℀(s?V ?C,M[``|H^`[RSh~?N?il?g+?WX?U?W_ ?Fؼ?*x@?(1&8?#3?J?Y{`?YJ`?[ '?H_!&?RR@?W_ F-PF}?I?I-@ k ?&?=ɀ,O{! X UxL@ Fv=3A^2"0,EQ`; ?A`?S?L `?.B'@?DzX?X%F ?Qkr 2@?Ck`?7k?PPE?Y-X#A^[)Rߐ~`??{! ?B} $, QR NU?$, ?P?JH@?=Wk?D&?_QR N=Ex0k CT`M0L ,?S?eX3`2V`?Q`?(%F >6-T5X@?/_?T^? WkSh~QXX` k ?4zXJ5k`R9@?':?6L@?%Հ$, CDwT `awSk`?#_@2@GZE=?]~ ?PV`Q 0k 8?P ?b4h ?ILY G:,r5=M -`LE@?F?az?`O?`|H?d@?`7 ?Aw&L@BV`S@NiF>Wk2 `MY ?#A^?Z?cw)?c⿠?Pwd0`?H_?I^?WDRW`?-Wk+3M~ ?%Հ?O`?F-?" `?{! JH@MWkN.C$ȗ ?,l?C,?; !&+ ?3?N?J?%Հ?:x@?E3@F Y4ȗ ?JH@?:9??E=?CT`=0LP)&`G:D@A@+3Ck`U9N?"V`?3@)^??-`?MC@rXT?@F}&O`?@m D?>s?E3@?IJ`G:T"R`?)^??G?AͶ ?V ?T?C- S3 ?s?9^?L@Ue=~ ?1DSW@" `?BR@??2/@?4, AwA8Wπ_~W3`T `I-@GXa@Y{`?[_@?Z`S3 V`2?T?6 ?W0?4wC?"e?B ?(s4w:p?&L@?<r?@F}?Z ?bq?Rq?8?J5k?C| 0`3A^?s9~`M:'?E3@?M:?Rs?A19@*x@?CL ?FeN33h~?+3Dȗ VvP2@BV`JH@PF}EE4S9`Dȗ P^H@?R `?HR=0LCh~(s?(s?@F}7k?7?Ne?2 `Pţ`;Z?0k S?UЩ?Dȗ ?O{! 6?T G`Qu, ?HR?HR??~2/@DS9`?8%F ?AͶ ?,?F~@8%F ?4@?(%F >Wk53@?, ?@^1@Qw7`?, ;Z?=0L?Z@?TIq?K?:H@H3`1k?Q ?3QͶ M0L1@&L@&?C- ?Mɀ, PPELE@FDO`\UR*9??G& ?L@-?& ?T?*H@T0k HsV ?<@?SrEL_`^`M`?@@E3@Ck`OTT?F Wk?2V`?EQ`?K '?H_?E3@?:9?2? Wk1EDȗ ~`+ F( ?4, reՀfe@O,Ch~=`?B/@?&V`T]@??&O`?ȗ ?Iqπ?= -`CL "V`>sSK&I-@?ER?9ӝ4ȗ ?~`?EQ`?I-@?&L@I?~`?_@@?S- G:)^??M~ ?D?@^?/_A&'@+ aBg"@WkqBj3(@3@??@2@㏝@?& 7@?DS9`??~?:Y?2/@7"V`?N.?H P[d>Wk?FO`MWkJ?Sw?\@?T?Be%Հ?9?T?@F}I-@UnVؼRX>?G@?Q`Bj3`m \;ɀUՀOgKX Uq@ۀ1&?M?` ?O@@?G@?Vؼ?)<r?C@eJ?Q;?XˊH Y@8@?&O`?53@?1EMV?6v?^B'@?PF}<<@??@@?H8?#@V`:; X~@T, G& $zX?P^?/_\~X3`GXTȗ C@?P?GXH8RT@`Z@?@,S?@ۀ" `TpMC@?C?Hs?+3?@?" `?@FvK@>㏝@?3+ !?)^?- -`G&P,Jp?:x@?E3@R/@_]ɠQ@9_ ?=Wk?J9@ r?:x@ ?(?P?1GaDf.B'@?&L@>㏝@A& ?D? PKER?T@?XNx``$BJL>Wk?.e?"e?;R?KR?Df?!= -`B `_!&?@ 6 UՀI3h~??6 4ȗ @^"?,?>ޤ ?`h?R`k@?B `?J5k?LY ?R?,B} ?I?UQ`?'@ 2@?DzX?Rj3?T@?M`Wk6O`?R ?c- ?T@EQ`QE6 5=L?`?)~`6L@I~`P,QD$ȗ ?XLe`?SrE? ~`?A?;3LE@F`?8?Eq?B >WkYg`aͶ KZTfZ?{! 6vS,?~?D??C?8%F ,F~@H@AkCT`TS9``h Y'e?N.?E=G`_@r@_`R0,? x@A&J\HLe`LE@!&?<6?{! ,<?C@?a?M~ M0LB ??@@?FL@?V`;Z"e?@ r?0`?Kne?W`?Vՠ?2V`EPP€+3?9?$, ??`?SL ?X ?VL@?Ll?Q??^x`?F-H?@?FO`>77?)?H%F ?V`x@?83?1k?P?ER:9?(s?Uk`?\l?S$`#@B?4?P?P`?J ?LY ?R9L?G&?e?V`?ȗ ?~`?F( ?N| ?+31Dr8Le`Fc_ `?@2@ x@?B/@?ȗ W& S?Lr?V?F~@?NiF?Ee+33h~/,?H@?RL۠?O@@L~` UqO@r@_x]֑`DS9`OSWa6L@?,?,P2@XLe`TBCIK`KR`U)bCCA^?Jp?M+3TN.<@NeS- I=~ @KF`-`>AXX`0 ?1E `?KR?b?T,?4zX?P`?C| :,?3?? k ?Mj?P?BC?L_`?\r?\ `?C| ?(?Q ?IBj3>Wk?Y7 ?a6 ?`m ?V?T@?a?P3D, ?>B'@?]?JYI-@Uq@ۀ?WkGkI?0Z CA^r? `?2e?O@@?YTx ?U ??`?& ?<?KGF@?N3?0k #A^?&L@-WkB} ? ?,_FU?6??,?!?eIT~ 4w `V XYF@FO`LrO 6O`@`Qw_Tg?nVv?@@C@Wπe?Vv?P3?9?A19@?2V`1&H@?K3?ZH@?Q;1D$zX, ?Ak?YJ`?_x?UՀ?T5?_{! ?Ck`W`F`?K`?Pwd?V X?Wπ?Pwd?T?Mj?s?I# ?\?Q1kF @XLe`ZH@Wk?H_?7@)~`6L@?- -`?3,r?:Y?X?Xq?M`?6O`?3h~?<r- -`E@6v5Հ?4, ?U ,rc[VL@?#A^0,A19@?$ȗ ?GX?UՀ?X?D ,?&'@Y{`aISL <>s?9~`,EՀ4@?e@e(%F E3@L `?*x@?M~ 4, Sh~A&,4zXDS9` DaEHs?UЩ+ Vӏ@?;R?$, ?!k3?!k?K?/_4@E@TzXQ^V( d'6@[L?M -`?bn`?Tf@KCT`?6v?&0Kse"- -`I_ J`?+3?\@?hR?ex?FvEBV`Wk>WkV`?=0L?Fc_?KR?Tw?(%F RWk?M`>s?B ?``?\_`?MY ?C?# r?)?A?Aw?8?A&$, ]֑`\@ ?4w?^3?` ?Df5=?Aw?EeI@ۀ?T??Z ?@KBߐC@?'?@^?7kWkWkDE@ȗ )@ۀCh~M~ IF IӝF"V`?~`AET@O s6-Wk? B} s?6-!& r$, ?[ ?c??_㏝@?\' ?a?L?+3$, P U;Zs@k 2} 8%F Z W ?C@?`^?`?Nx`@?G@?O,9ӝ6v?Qu?S^@?$, EQ`Ch~?4w?U?]j?Q;?@@?T?B} ?(':?A`?"V`AXX`?=`?B `S- `<WW S磀;Z&?DzX?iF?F?I?3?s?M?PۀFؼQ?GX?_@@?Ue?8@?0k ?)?7k?Y_ ?^ WkU4--`?Sk`?UЩ?F-?&O`AP)&`6v/,N.?& ?W ?-=~ ?A&?:Pۀ0`?D??sK3>iF?Q ?[ ?K@?:H@?LY ?Sw?O~?K3?T@?ZH@?O@r@?&O`B/@?~?:9?; 5e6 ?)?Pţ`?QN8?O@r@?`F}?`. `?T@6O`[`S| :x@DzXUQ`VFK3K3QD02@?Dȗ ?Fc_?*9LY UЩ?:?K 6 @F}?L?J! FؼW&OV`$, N.CA^_3@; ~`?H@?Pc@#O@r@e?@k &O`><@K?:Y?U4-?2?G@?RC?!O~RQuOgV`?R,?GN`RsVWkBCU@Pc@EՀ1@?, ?~QXX`KDEER/@W?3?Q&?Nx`?A@?FO`V`Y`^Ne-Wk7k?9?\e?`/?V ?C?B?W&?H3`S磀A ?QͶ ?.ޤ ?,?s?$, ?CA^?T `?NB'@?QͶ ?U3@=b4h \ `<?,r?7@+ J`:?Dȗ =0LQ?@F}?Vՠ?FCLȗ ?X@?[ 6 ]:J?ȗ 7@>?6-Pk S7?J5k?Q&?4zX?A Pwda Iqπ?9~`8@C- ?F-?BߐS^@M?RV`?RV`9_ G:! )~`? r5=IJ`+3%eRO3RV`YD)~`e?$zXG& ZR Gk?3?7&]M a `KR?/{! WkV`?Eq?3>ޤ $ȗ ?0K/_C?1D?W@?``?ag ?Sk`?6-?J\?C?EQ`??W@?D@?3?!&?;`?Pc@?7&?-`?P ?*9Y7 [Q MLE@R ST`RL۠AͶ >B/@Fؼ?B} ?H%F r?2/@?BV`?7a?D&H3`^UQ?>?JH@?)~`?; ?J`?s-Wk?; ?FWk?Q?P"V`Hq>??{! ?Zp?ZrZ! P)&`%Հ>e??R?MC@?@F}?Pk ?Ve@?U9?G`?~AE?F`?H=C,?e4wRHq@P J\$ȗ ?-?Ee?7x@?J?X@?ER?$ȗ ? LrWX1?W@?\?T?V ?O,Bj3BV`?H3`?B5Հ; @,7k$zX?OS?c⿠?Xq>Wk?9?K ?@Z ?M?_ ?`n@?I_ 4ȗ ?+ ?*H@R9LH@?c?X%F 3@?N?a)G&>ӏ@:! R,?,?"?eȗ GN`\' Ye`+3?:p㏝@?Mj?A`E P)x@Q'q`K3?6v?8%F ȗ ?4zX?'@7`E=W@V ?:9?BSK&P€?GN`?GkR` Jp.B'@N;Z?JL?>r?!?"V`?<?Un?S- 1@WN`S6( >P Dȗ 2@? Wk?F-?Y@?W?=Wk1Eӏ@?G?E2 `5=?I~`?Ga0`>x@?RV`Pwd?Ak?O~??{! !kGu93A^?J?ST`?JY?8%F ?ȗ ?&L@?G& ?RX?G@?.ޤ ?P ?R} ?~Pm ??.B'@?1@?9_ ?>ޤ ?9<D??:?_?&O`?Iqπ?2} KRP,+ ?K?Qw?5=?+3?0KBe?e?ab @?^U?9?H%F ?WDRS- RCV~@X~@SrEV`Mj?,l)~`VO`NB'@?:?4ȗ ?Aw?7:J5kR0Z 8%F VQksx@NeF`?1?4S9`??<?x@GkL `Ne=`?MC@?@ Ye`]:6 /{! TNB'@?4ȗ  URB?BCs??Q ?Q;?G@?R,?Y# ?`^?]R?K '?=0L?T@`7 WDRR O@r@*H@? ~`ȗ ?>e?NiF?NU?GX,CL ? x@?1D02@?7&?KneH@>s?U?TS9`?'@CVZ@4ȗ ?U=?Tp?e??P?Sw?Fc_ rCA^?#@?L2 MFvHA?7:?A? Wk+3A@IJ`@m ?@?NSeZpY{`G&s2V`+3?= -`?4@?1&?P?QN?A&?Ch~?E E3@OSVe@R Ch~TV`?s?3?H%F ?`>Ï@5R_"e\OY ]t@?~`?+3SrEQ;4@Jx@SL 2V`?B?V`Bߐ-Wk?_*H@3h~<4@?B?EEG&YTx RR@L `Pwd=0L?C| ?*H@PPEA&?ޤ ?s%e?-`?*H@ r3@O{! Qw$zX?3h~:V`?C,?;3B `;`?Jx@?L~)H MC@QNP OTO3@??T?%eA&1D?>?C| ?)^?!k3?@m DS9`?4@" `Og>_?:x@Aw'@?AXX`6L@U@`^`g& Y9?UՀ?TfL_`SK&G&Xi[ne=ɀ?1&>XiV℀MWk=?~`.eMjK @KQR Y^?B?6( =WkPk ?Q ?Sk`?J ?K3?T, ?F( ?A?G?_MC@2"V`?*x@?L2?CA^ 2@?;Z?Kne?.ޤ Kne6 ?R ?Q 3SL V XJ ?:?5=?4zX?@,?D?Pc@?Uq?CT`0,(%F ?!k?:p>_RL۠QN??&?I^??FO`0K2e?3?B ?6L@@ TMWk?!?AD?A?I-@?T^KR?E ?A19@DwQ^F0K?0Z ?O5Հa Vՠ?>ޤ ?EesAD@"!&M -`DzXx@A? Wk?Sh~?$ȗ SA^GXWk??,?KR?<r?97 ?M?8?e?N3?Iӝ7a6O`?5q?4w?:4wT[Ϡ9^??E*e ?53@C@W F`?=0LRsWDRHR?PPE?XB4S9`Y7 UՀK D?I-@:x@?DS9`? `S磀LE@` RV`\ `b6 @Z ?K '?1@6 TH?L2?C- JYOSBeE3@ERC?3?;3?,S磀XqR`k@Q`@K?'@(%F 8s?)?,lr? Wk?%R!&8Le`(?5q?7N`c$`]`6-BR@V`?~`?a)?]@?Q^?d?i{`?TS9`?V`?Fc_?Y# ?a'q`?\F`? `Mj>Ï@?P€?Q ?& MY )~`?Xi?EՀX@R?AXX`?Pۀ?JL?%Հ+3?Df?Gk9~`r?)R} JY?P ?>eLrBߐ:?4zX?Jp?Ch~?K '?\?XR?R `?Y-X?M84S9`?$zX8@E=+ IJ`YӝC| ?6>iFMY <_?B} ?=WkJpQ ?`+3?@ۀ?B HVNx`ȗ ?O{! ?DzXWk??{! ?ȗ I:\' TW@Y8Le`?;RV`:9IZ۰`Z! Ak5qQuP,:! BR@LlWk?S- ?TzXC?auV2x+3:H@1?<r?0,>@?9ӝ?6L@? k ?; ?>iFe4@?1?O,?L~?6O`/_@`O_Rx@?L+3?^l?g0?Z?W?c?e ?b,?S7:LY k ??`?J`?Fc_,?@K?c ?`/>x@"V`?TzX?`. `?Z9?2V`?~?G& ?VY ?=~ ?7&>x@\Y Wu9?L_`?X?O`?FL@,?{! 0 6O`?3@?Z5k?Z+?Q ?T&?KGF@#2e/_NO_?@?_Bq?*H@?J02@I# ?Be?P ?3@RV`@2@?L@?= -`8%F C- Gk=`$, ?= -`?S| ??@@?J?@m >e?P@Be':ȗ 1IPG@JU P2@? k ?F4ȗ [GF@\E@QuI^?)^??J?C@QR Zy`53@?:! ;`R} RL~?Dw?C- ?@`?G&?=0Z 7&?@F}?R?Dȗ ?/_?A?&@B/@@F}.ޤ ?3@>Wk'@?P2@?]t@?UR?Pwd?Qb @?L_`?>B'@0k E ?~`?PK?O@@?KR?Sw?Q19@?OS?Y7 ?Wπ?>e?BR@?\' ?bG?Yӝ?,lEՀ@?7@>Wk@ ]UЩ?@,?S?V2x?PPE8%F JH@ k e?ȗ ?G@?<?2?G@?EE?;R_KGF@KZ>@?':s?FiF?Bq?BC6-+ ?I?8?~4ȗ ?Wk?)?6O`?G@?S磀?VF?Jp>s, ?1&,;3?+ ?Gk?Nޤ ?Y?K3S^@WLE@Ve@T&?%R?4ȗ ?I?F( >@?,@ۀC?K?J5k+ P€*H@_3A^1@(?TPc@9ӝ?@,(%F @K?Q`?a[?[d?EՀEQ`>?V?U G@XN?+3?\2?OT[GF@_ LZ ]:)?&O`:p?-Wk?H?%R%e?,l?N.?T]@?G@>Ï@KR[Ga?ST`?O@@0,?#?RX?P ?Wk?x@?Kne?)WUk`?&s?A&?V ?S磀+3H3`?!?$, BR@:9?@??`?L@ ?19ӝx@%RUՀZr7?Sh~?Vm&?Nx`?V?X_?I# ?J! ?P?3?"?AD.ޤ SA^9?Tf?\ `?Hs ?3?Q ?N?4?H8?V-?@5=?2/@?Dw?O@r@?b?_EZO{! U Z@G&?;Z?O{! ?F x@0 &? x@?$zX?0 ?%R9Jp?1k?U?T?/{! ? @m @m C- 1?.ޤ G@T@? x@?0Z G@EEDzX=ɀ?ST`?YTx >@E@QuT&?e?(sW I# ?<O{! X:,Gxs?V`HC?e?5q?7:?C?P€?9~`R/@Ll?Be?AͶ 0Z Ch~A@s?s??Y'?e=?V 76L@)(?V`?FL@?36&O`Ds?#@&O`1kKW R,MPFO`!k?@Z ?D@?3?Bߐ?P`?Q19@?WX?ZfR?C.e':2/@5q?E3@?^l?[_@? WkRL۠E ?@F}?3A^F( ?<@?b ؀?R9@1&?L `?[_@?V?=ɀP,P?#A^(%F &O`?E@/{! XJ! ?&/,Nޤ HLe`?BR@?K3>iFK4&?8Le`?V`N.<Ï@I-@?7?g?h**?PwdBB?9?,Ee?7`?T@?M -`?;`:H@I-@?,?F-?"e k >RCZH@Vՠ>ӏ@?I/,H!&);3?"e?K?V`?S@?#@AkV`?D?NB'@?R?P ?2} 76?:9?Wk?HsU*e G:?X?;`W@?3?`U)?R} ?MWk?T `?rK3>@?SՀ?R%`?6L@?*H@??{! ?1&3EQ`7k?G`?[d?X/ ?D, ?:? ~`?#A^?:K ?`n@?bx?Jp?HR??{! HRqTY9X]ɀZsF( hƦi(u`_@r@Sh~R%`` Fv?UG?Q >GR`k@5= MWk?s?RB`)&`J?&L@>eZ۰`\Ķ4zX?:Y@Z KC4@?O,?U[L s:>x@XWW ?CL ?X8?J! 5e:H@?M0L?K.B'@?DS9`?`PE?a6 ?^K?ST`?C?Q}?T?H?I# ?Nx`?5RHD?Uk`?[@F~@W3`?3?Ga?, ?@Z ?SA^?P^?$ȗ BqA? k ?A?@ ?9?,lx@?:! ?R?Y# ?b>/?_BeXR㏝@I-@e9J\?Tȗ ? WkQ`& ?:H@_>x@?S?W? ~`QDCh~?;3?x@VP?_qY@?iι?Vc_?HR?b?`36-U@G:?M -`?H ?1&?T~ ?Y^??%ՀC8.ޤ @2@Ve@]ɀQ&TbZ M -`Q ;Z?7? ,?@2@?Og:ViFWk?F?XB?RL۠?e?(s?\E@?T^Y@]?@`?P3?2V`?I?T~ ?1RVe@Ex&0,4zX? ,?C,?@K?AXX`?EՀ?& ?CA^?X@>x@]&O Ga^s@K ?L3A^_~M~ ?J?>:9?3A^?NB'@!&Y-XW`? 2@?;RZx@[ ?\vx@?en>?@ ?qSt?r@?KneJ\L_?- -`Gx5e?@ ?Ck`?; >WkK Z@Y?~?8%F G@a;W@@,K@=~ ?QD?X/ ?G`?+3?>ޤ ?Q'q`?6 X`h T?O@r@4, ?D??C,?EՀ?S| ?\?a ?P<R Vc_Q Vՠ?,?Z+?O_?E@?W3`?^?a^?^K?I rGu9GX?=0L?R,?:x@@@:H@?C@?(sZ Wkq?-`PZ 4@?4wK3b^H%F 2 "V`?- -`?E*e ?K`?3h~; HX%F X 2@.eZ J ?D>@4@?FWk?BV`S?(s?pc@?r*@?W 9@F}02@K3PN| OgPPEVm&]t@^_~X@Gx?:p?Y-X?bj3?_6`?Bj3GxUeW@UЩO_F~@@ 5ՀB/@D@?02@?LW@a,U@_qY@W0B?E@?Un?Qb @?Mɀ?QXX`?N?2 `AMNT5MC@?2/@?RL۠?U3@?P<?S??d#?b*x@S磀I_ A ?O?`O?F ?Kne?U?H3`ӏ@QXX`aWu9;`#@?6 ?H3`?1@_1CL EqO@r@U DzX.eO~)~`?[`?U `6( !&?A ?%Հ?C@?QE=[ H@?H?"V`@S3 8s?W@??@@Uk`A@>WkE3@?)?\(9?^x`?FWk9~`VY `c@`ޠP ?KGF@?`U)?`?P9DzX%eK@]C@Z?3RsC@?V`?@>Wk?E ?@ۀ9^?O@r@Vm&XX_@@U r3V`0`Wk?M0L?K)K ?@@?8%F ?Sh~?X@?>B'@HLe`?A&?a??QXX`>?0K?:! ?UG?`PE?Iӝ?)~`?SK&?XR?J90Z B?D?XLe`?RC?Ex?,1E>eV2x[@=Wk?Be?>e>:! ??T?Q@>eS?,, .ޤ ?+ ?1kLrPZ ?&?,r!k `/_1E_AXX`!&?X8?WN`9G:?&??KZ?Wx4S9`Sw?Be?M~ >ӏ@?:-?V`?V( ?CA^EQ`?2} ?G&?~`?#A^>x@?_?AkBR@?)>x@:H@? Wk?>?Q}?[ ?TIq?C- ?+3'@?%R?L?Bj3A19@Y_ Z?4?bڬ?[?-`V`2} @@/_<r2V`?!R/@a P`?WkJH@)?T]@?I^??@@%R?1@97 I^?EE.B'@?G:?JL/{! _?;R1@?%Հ?Wx?8%F FL@?1&?&O`:x@?:H@??@@?0K?D:! KGF@?G@?E*e BR@"?0Z ?1D?JL?+3?.e?8$ȗ 97 x@?Nޤ ?X ?U4-?W_ ?Yӝ?R `?Se?S| ?V`Tȗ `ʇ@]?6( ?dB?b,?P3?J ?4S9`&'@MRV`GX`OiӝYӝ?7&?S?DPk ?{! ?P @,_Jx@1@2 >WkDȗ >B'@?X?a;?@H@6-3\@ Wx?PF}?]@?PPE?4zXFؼCA^?Iqπ?O@r@?2} 8Le`H?@2@?]r ?RR@?1@-WkS3 V℀,l?QD?PK8sCL ?Iqπ?O?$, ?&L@?K?`@?b?4, H ?AE?Pwd?2V`?=?I~`?3A^?0`?W ?b?MY Aw?-?O~ӏ@9_ ?H?ZR ?*H@8@?G& ?eSՀO@r@Q?L_`?=`?=ɀ r?x@JH@J! ?Qu?GkPF}; ??T?#>s?_?C?T^?FB'@?@,("V`?$, V`_7:Lr;`?8Le`"V`H@:! -`? ?>eG`Z HRJL\OY ]C@\@ RV`H@0Z ?'@?P 9_ T5?9ӝ?)~`eR E3@?T~ ?SK&7@G@!&?~`c@]~ ?0,?C| 9@@)?K3?\ `?F C- Pk Q?7a?Xq?6( A ȗ ':4? k ?6 &D?& ?Vޤ H@?9~`?I# >B'@?WkI-@W@F`@Z Tp\OY \' Rss?5e$, C?PPE[@[@NGk3A^??{! 9Wu9/{! ?H3`?sR9La}Z! ?5e?B Wk>㏝@>AEs- -`?s?6( Fc_C??3?HY.ޤ ?M`? ~`\~]r 2V`.B'@QuAw?J?aҚ?ab @?0 D8CA^?Wk?H_C?R9@?&?HLe`?AE>ӏ@;302@??I?N3?_Pwd)^?I_ M`?BC?9ӝ:Y?:%Հ?e?Z ?Q MjN35Հ%Հ?Fv?Tw?K?Wk?0Z ?ȗ 2V`?, ?2e99?9?7&?@2@?P ?4w3@?'& EՀ?Ex?a?[R5=bZ@?<@?Y-@T@[GF@^ޤ [ '+3?K '6 ZLP>_?+ L2_'`WN`?@@:Y,l? 9_ Pc@A19@? EQ`U*e 8%F ȗ Hq7>s@^D;3?9~`?YTx ?OS2 , ?7@?0`:H@U4-Dw?7a/_,l?3A^NeY?U@?O@@8N38@:! I_ .B'@?I# ?WX?J`@K*9?/{! LLE@>WkJ XˊEq?97 ?G>@7`?Ak?M0L?C?0Z OgP@?iF?Mɀ?J9I~`L~2/@?B} ?Z9?NiF?TK 'Y# Z?I?b>/?E@?`?*H@?G@?Iӝ?P2@?Nx`?KGF@?K sR} 9^??M?@ 7:?*H@?L@ ?Fؼ?Jp?M~ ? ,6 -HqX3`Q?I-@?b%`?K`\(9Y7 ?0k ?DN.^.cK&bP<?>e?#@Q;P€?B?\~?APZ 1&?PKF-?F ?Ex@?,?'O_` J9?7a4, RZ5k\2Df?B/@?O_?Qw?-`@ۀ?4@?Q?Bj3@,VY F`?9ӝ?#A^?9^??T?BR@9??O`?Wu9?R9L?_A19@IqπK`A`>Ï@?<@>ӏ@>?Wk*x@0`?S3 ?R`k@,l?0,?AAk9~`?Gk?Q&?HLe`?4?ER?O~6-Q ?K`?b%`?Og?%R?U?`<?W@?S| ?S?Rq?L@ 0,H_?O@r@?^@@?_N,l:x@F ?+ ?>'@<QEUTp-Wk?]@?^l)^?TQ}W_ ?$zX4ȗ Nx`[ ZR <?eA19@M?2 ?V~@R,??~?HVe@XR?97 ?QXX`?-WkJ! SVe@Wx=ɀ?5RBR@Uk`Ne4?7a?5RWk?0k ?>e?/,?D, ?Dȗ >@.ޤ 7@Wk?6-?!&?<?V?O{! ?(%F ?>B'@?O@@?VF?V-?:! G&Pţ`Nx`HRWk?I-@?M0L?Ga?R9L?@ۀM~ 2?\2?d, ?X3h~MC@?@`?X}L`?[=~?[R?&L@Re~`? ~`E@?Bߐ?S| ,+ ?P ?J5k?4w?DS9`?:YF NU?A`?]?Ue?1D>_?.e?4@?I# ?]?a@?U*e ?AE?@?C?02@FBߐ?T~ ?VL@IPPE U `^ >eWk5e?)^?5eRAH@1&?>?P@?0k E=QP€ Wk?8@?2/@?Nx`??~?@2@?@ۀ%eHLe`Sh~WN`Q`4w?Gk?L@ ,9=~ UQ`R`k@?5Հ?E*e ? x@ 2@ ,5eT, a@S@?K ?V?O@r@T6O`)^?>Wk?A@? 2@P Qu3@=ɀP3J5k?3???,e" `CA^QNMS,QXX`?4@?;RMɀU C?!!&]g{ cXLe`M`/_?':?:9A,rE*e CT`?s?W??^3V`OT?H ?S- ?ȗ ?.e?DS9`?2/@?2 ?0k 2 `NeT]@'@?[Z?]?I# ?C??~@ۀG@?*9?Aw?1D?9~`?,rC?>iF?KZ?W??C8@2e?1@@a"Yqπ?O`?ST`P@L2?X~@?Zr?.e(s?{! :! ?B `?Bq?" `?9ӝI_ bQD?Fؼ?S$`?V ?<QͶ AXX`?0KC,Aw?J5k?MWk??" `?DzX?/_G`N| ,?Qu?T?WkT&D0`S7D?T@?VO`"V`G&&L@7a?TA`RqWu9H0k ->sWk4@2 `=ɀBC7&OTU97 ?ss?Fؼ?H.ޤ EE@Ak6-Qk_ [neQ'q`BR@??%Հ?`JH@3@7+ ?#Wk?7a?J5k>㏝@"?;ZA&P ?K3?^-?S@?8%F ERR `@,?*x@?P<?Y9?E=s?J?Rj3?sEQ`AE'@?!k?E?TzX?P?sO,?_?%RIӝQ P Se?/,?PKTȗ cK&KGF@s?ȗ ?"V`J! OSWkK`UE?I?\ `02@T, ?&?R,?T?Pwd?WkID@?Y?L?:/_O@r@V0 ?KGF@0 ]\ `CL ?BV`?Uq?OT? WkA`Vc_Wx?$ȗ ?Ve@?P ? C| :Y?E3@?>ޤ ;3?O?i?es?>iFCh~~`?O,?T?@2@?+3?D??F~@?Q?]`?OTIG:&D>@?Q19@?-`Ck`7k7>?HLe`?-`A @K= -`8%F GXT4?Nޤ ?Q?P?Ga?':?G?Pc@?3?J\?Yh?F~@?2V`?S7?S?A?1@?Q ?P?Bq?1&?ss>㏝@?:p?P ?Bj3ERH%F ?)?#@Pk Mɀ?Pm ?Vc_? k ?JL?X@7:U@+3?D&?X@?VFRsf`_gKR?+3?&O`WDRU3@%RR T, ?Ve?E3@?8Le`0`?Gk?O`D, Ga?K '?MY x@@KG:?:?0k ?,AEFL@KR?$, ?8%F 2/@?Ck`?Rq r0,?@@?D?P@?Z ?S磀?&O`D@JLFc_E*e >AEe x@?:! ?9?I^??97 QT~ C?HqPwd?3@?aD?\E@?@?=0L?SWk"V`?Q@?P3?R9L?YJ`?$, WxX%F C,?D??C,AE"?':[ϠZ+?S@?Z۰`5RI~`>B'@LDS9`1&R%`K?P`Bj3?Bߐ?4zXD&BC?2 `?2V`CT`T@X3`T;3?ȗ 7&JY=~ WkAwM -`s?=WkA@[=~]M R`k@8@7aC*9>x@1E?/,?Q?EՀx@?@F}?T&?Rq?':K K k x@,?@,?1EQXX`UR0K?@M[GF@Q}>㏝@?6( ??{! ?Dw 2@.e?R?SrE4@V`ba&?@6( ?.e?=WkCk`8?C?OT?Q ?:9D&FvC| PT?EQ`?>?Bq4w0k ?!&0K9~`ADM0L4ȗ ?DGa?AD?X?L97 F`KGF@E?W& ?cwȗ RV`?>iF?CT`@,9ӝ?A ?QE?FL@?@2@?W??N.[a ?O? :9A MKRB `I@?Wu94@?PF}?HEՀP<1@6vMY KZCA19@Ck`M~ ER?<r?R?>iFE=H@?0`?C,H8`h Z\D&EEPwd&?Q}?C@LE@Fc_?D@?K ?s9~`4S9`>Ï@?A@?Rs?VF?Q?@Z >s:9C@CN| SH_67@?, ?>B'@?&O`?@m ?LY -WkA&?I-@?J%e:pL `CA^?P3?Q}?" `?7k.B'@T,?Mɀ?K ?=WkGu9W>iF? 2@@@I_ $ȗ ?LE@?PK?*x@?%R?:97`PZ JH@?e?X?^K?G?':??@@?4ȗ 8D?GN`\OY V-?_ ?h%F EEcՀA&?eD0 ?E=?A 0,?; ?a ?\2EQ`]NB'@?EE?WN`?L~?@F}I^?D, B $zX?Ee?@@?Q??Ux?AXX`CL T5S- 1@?=~ HqW?`zPc@?J! ?PPE':K @ۀ?)~`?2Pce?a[?iv?a'q`??`4S9`A19@?@?HLe`6O`[3=Wk?W@?Tp?3h~6vHRs?G Fc_,? ?>B'@?W_ ?VF?Re?WDR?E=?,?Q`?@Z B} ?3?Ne??@@?3$, 02@?EE?@@2@FL@A@6 >ӏ@?2 `?Ga?BeI# [dR9@?0k ?[x-`?`^`?S?C| ?<0Z UN?0Z Fc_[GF@?Eq?a@>@ST`ȗ ?#A^F R9LKGF@Fs5=Q'q`]ɀ[_@I_ I^?^ aDGu9?Aw?=Wk4ȗ F4ȗ 5Հ,r ,0K?Nx`?d?XHLe`S3 3@?K ?Qb @Ja@& ?`?S^@7MY R<?O@@?Un?Fv?:s?N?^-?S?Bߐ??T2 &?Y^??\Ķ?Qk?S?Ll?!k?- -`?6v?B/@?O~?4S9`C| ?_97 =ɀ>Ï@?A19@?D&>ӏ@Ux_RWk?=0L?Ll?Q`?LY ?FO`?%eS磀Pۀ?Q}?HLe`Y-XRX?; ?:x@?1D??~?@K:Y-@aJL?@?G@?S?!I# E=E@?2?R >@I@@5=?9ӝ?@ *x@?3@DzXVv>?P?Q:H@I_ ?D??F( Q}X7&?EE?O,= -`dNUaz9~`?H@<O_Qw9^??6L@?2V`A@[GF@a XLe`E=@`L2M`6v `4w>㏝@?%eG& :9?SL ?LM~ Pwd?-`?P`?EՀR ag C??AE@Z Pk 6-2 `s?V?dw?] -`?3??*9?W??Zx@?8s%e?7@9_ ?:! ?J?Pۀ?SL ?CA^0KC?C- ??P2@?HR?ӏ@?&O`?Gk?T??N?2V`>s*H@'@??@@?Fؼ? ,?@^?[_@?Z?QXX`?E@@m C,?T?RsR,ZP C@6-= -`?+3?LE@JH@]ɀ_?Q ?Tw?Q?GN`^TH_?!?@@J9O_? Wk?53@?Pk ?W:?I?L~ޤ ?2 ?8@@k QwS3 @m ?3A^?@^?ȗ Q}Z 2V`?Wa?\b?Q'q`?&O` r?P ?\Ķ?Mj? r?DzX?T??SL ?V?RR@??*9?Zx@?\?HR?#@DAk?GX?@ۀCC?NiFZ\ZrY@-`?Wu9?:x@Kne)?*x@?K3h~XqZ+Y@1&?Gu9:YA ??T?-Wk?7`?Q ?Qw?O,?2} 6L@RYJ`,l?V`?T?-WkBV`O{! QuR`k@97 ?8%F PZ ch@Y~`MjIӝ?5R?6O`JH@&?M1kP ?1@?W`?KN| a6 V℀?=Wk?`ۀ?a}?KGF@H@?+3?EQ`7?L?X3`?P)&`?6?O@r@?`ۀ?T?Ch~I_ 2/@I7 H?Bߐ?X@?V X?I_ ? WkF 7@?Rs?Zx@?ޤ @Z (s?F ?Pc@Bq\@;Z?RX?W_ ?T?>ޤ k ?D?UQ`?<2?5Հ??_>eJH@A`N`G&?ER?ST`?>ޤ 7@ReG&?9ӝ?->Wk?L?AͶ G&RXQ19@>s?U=?H!&@ۀWaS$`? ,? 9^?UՀc磀N?O~>ӏ@>B'@?@Z ?s@0Z >Ï@?/,?F?J5k?; H@C??1@;RY@T_?@ۀȗ ?1DN`Y-@e?1E& ?S@?^?5q7=`T]@K3?Gk?R?Aw?0k ?&5R3?Df?UE?8G& 7&$, R9@S磀?8?P@m \; ?XV- ?E T `JL?97 7P3?3h~?^s@?`?U9?>e>Wk?>ޤ ?W ?O,PPEWX? k ?JL?8@?LY ?^?_]ɠ?F`; ?8@?X%F ?7aNB'@97 Wk.e?8?J?=?E?O,?rE APk b@dDZ?3U P`??MY ?JY?)BV`%Հ?P?Ll?7?R/@?X@?G`Wk#@?+3?2/@#>㏝@>㏝@J I-@4, ,?BC& `F}K3?M -`@ۀT~ ?,?C, `N`T@K?AͶ ?H%F ?2 `P P@`T?^x`L?Ga?UG?@`?ȗ ?7:(s& ?T?J5kK ??Y7 ?KR__>Wk?I7 ?M:Ck`R?H%F ?`U)?A&ST`CT`?EՀV`TS9`F &Q P ?JH@?O@@UEe PF}?L@ ?-PF} ?BQ&_8?Rq?YTx ?\?]?Tf?A?Iqπ?QN6 W`,?O~9ӝ?Rq?`Ka?HFc_>_?YF@?V?A?4w>ޤ UAw?AͶ ?B `?H?P?'@GkG@O@@X8NiF 2@@Z PZ Ch~ ?!?)~`?V`?97 ?UE?Qu0Z CL ?%Հ?53@0Z 6v0,PW:<r?5=?7`?<r/_B} ?Iӝ?N| 6( ?1E?HP`[7?I?Ne?@@[x-`C?<?D, 0Z S,C??#@;RJ5k& ?D, ?I_ *9RL۠Hs2 `?)?R?6[=~U ?>ӏ@e?Fv?U ?X3`?A19@Za@?,?\?9U[L 6( ?S?8%F F?&O`?D&A`=`?T `?TFc_W@*9?Qk?L@ ?=`?Q??F( W&aBOg; )?Ll?Zx@?MY C@=~ ?Wk?U `Df7@?DF`Y@?Qb @?:9&O`?A ?[d?_`?T `?D, @B} " `?6( ?,r?BC?Q}?6( G&H DzX?,?AXX`?Og5qZ\\2XkTfIA9^??_?0,P^b ؀\lHLe`Be;`CL Z@_{! P2@6v?& ?=`ExV( "V`?HLe`?Iqπ?Pk ?6vEQ`3@>x@?0`?Pۀ? WkX3`@F}?K ?V?@ۀ!?D?RC?:H@/{! A19@C?:H@Swb]0LH0,?@m ?@,C| I_ C?RV`HLe`?= -`?@KV`-E=O 1E?8%F A@X@ۀ?I-@?1#A^?PK?T5(s7:?I?E*e 97 >iF?+3?Gx?E@?A19@?OS?GkEQC?MJ ?':?C?':E=B?Q19@?SrEIOS?+30`)~`?XB?]a3?J\?@Z ?C@?J`?O`?"eE3@ ?Mj?R?A`,?$zX?K ?eR,S,R} S@Z $ȗ O@@W`Q GN`?{! BqQ^W3`L@ ?V`U9X 1D?E@?Bj3B\e\P<Ch~ ,5ՀZ awT ,?Pc@?MF~@<?WDR?N=~ ?!?&Rj3H8?P?Wkq?F( ?"e?BR@?Q?P^?=0LAS| QXX`Z۰`c| T@Wkr?6O`?R/@?KR?;`0`SA^F?H@J9[CT`?LE@?K`?%e!DfQ <?- -`4w6v?Iqπ?O?,??4@'CA^3@ x@H@?_K )?Dȗ ?=0L?4, ?@m ?6v?Df?Og?;`?6?HLe`?@@?1D9^?[ 'Ve@'??R ?e?`@?F-?6-Wk6O`?0k Df]t@@m ?UE?Pţ`$ȗ Iqπ7@?=Wk?NP€RV`Z YTx T^O , ?CL ?J?P?6Q'q`V`3A^?SrE?\Ķ?Jp?Aw?Z9?RG`]t@UQ`<r?;R?H_FaStYe`F ӏ@?Uk`?LW@T?Pk ?J`KRI7 )^?@^O_?4, CT`Q'q`Hq?:H@?U?S@?9 1DTw[_@?~`?RX?0`?'@?JL?D?C?:p1k?Wk?B} C,XB; ?KR?DS9`V`?e?4S9`?@ۀ?Tp?R )~`C@?"V`?8?eWkB:H@$ȗ R} >I~`F Pk Q19@ ?.e+  `?G@?MWk.eDzX?J! ?QͶ (s,l? ,/,?5Հ?K ?& ?4w?N| ?0 ?~?4ȗ @k O{! ?G?R9@?`h ?Y^?2} F%Հ_?:x@?M`?:! ?-`?>?#A^>Wk?1@Wk=~ r?97 ?!k?0Z ?PF}?Q??F~@?D&?7k>Wk?0K?7&?!k?#@?2} ?#@:x@QR RV`R,QR #?7?, ?Y?o@@?eЩ+3C53@Y~``RV`s?Q?[Ϡ?U?H8>ss2 ?@ۀ?S?G@?Nx`?Lr@,Pwd<r4S9`;3@KMC@O_%e?I_ ?CT`&L@??M:?OS?CL ?:x@?:p?N.?[Ϡ?Z?I^?%RCk`C| 2+3RY7 ?D??hB?_`2V`(%F ?8Le`1kFӏ@?0`<JH@?@@KneS磀@Z (?N.?XLe`?S3 ?AXX`?!?Bj3?QͶ ?)^eP`?>B'@ WkC?1D?Qw?RR@?GkH]~ E ?85e;3??~?:x@_?.e?@^?BC??~>se?C@?Q`?FO`? `-WkJx@^lb4h T?_OTVFMjLP` `?E3@?@^?Pk ?T?>㏝@:9?r~`?+ ?U4-?TzX?Df?@K_QM~ ?eEe97 ? 0K#A^_@^&>@Pk PZ FV Rs'.e9S?eՍc@Jx@>ӏ@?A?M:?1&Ee(%F ?L~`W`>s?Nޤ N`Yӝ+3?G&?T@?Pۀ??@@?Pm ?I?:?J! ?@P€Ex?"e+ , )~`O`G9^?H@,?; ?T?Yqπ?V℀?R9L?Ck` Wk'?V`?5e?Jp?P?Jp?Qw?[ne?WDR?1EE@LLL~;R??(%F ?HLe`?N`K '`31&?S?,0Z ?O,?Lr1:H@Wk? x@"EC@?B?QD?&?&?HR>B'@gxiӝWkq@,F A@1@EeE*e ?sCA^?>iF;3?,-Wk.ޤ ?~`?ȗ 0Z H_U?0Z ?Q`6-@`?4zX02@EqFؼWπW`2e?C??IJ`??@@?ȗ  `?0Z ?I:Vc_@^?5ՀRߐ\lF`%Հ?)^??5eÏ@+ J@@?UR?SK&%e?Hq?UЩe@k %e ?.eȗ Q Nx`?/_?J! ?1D6 ,?:x@?Q?]?T@>Wk?6?X?Z?Pm ?F ?T@?` ?T@3?KGF@5Հ?@6L@M -` k ?DG&[k?.ޤ ?`)&`?Tȗ ?G?Un?Q`?7a6-#A^0`Q'q`R?, ?'@Rs@ۀ?Z@?Q;V`]0LIHsKne"e>@J Jp?@m ?K3!&$ȗ ?B} ?8@?:! ?TzX?NiFBCLr>Ï@?C?Y?c ?R/@8%F ?EQ`2} /,?_?4ȗ ??{! ?1D?V`,O,H_?W??_'`?" `':?& Df9ӝ?Ex?;38sIC? ?e@2@CT`?Gx?FL@4S9`, ?Hq? Gu9NB'@URj3E*e IQXX`Q19@?53@?a?T:x@?Fؼ?U?@@W& E=?5e?KZ?6( 7&e?F ?G:4wQR @Z ?)?T?g:?c? WkAE?HLe`?X?E IFO`?F~@?>B s?HLe`?:9(6O`?(s?@m ?`Q ?*H@?V`?Wu9?VL@?W:?T?O~?*9>:?4A&Mɀ ~`1DY~`I_ ?Y_ ?[L>@AͶ ?2 `?GN`?\@ ?R%`1k Wk?e;Z?0k ?Q}?Gx㏝@S,[ ~`?RL۠?,rHsE3@?2/@?P?E*e ?G@?\E@?Z\?7&JYWQ;AD??T?x@?Q ?WW :p_xDS9`?>iFARR@6( ?E?GN`@Wk?ER?Tw?Pk 0Z P)&`3h~0K:H@?P ?W 6T, @@?B `?I-@?_Re2 3@)^??T?U4-!)?Bj3?Ex?2 '-`?:?-`?FO`?S- ?Nx`?O?Vc_?Be@ %Հ?!k@k Ex!k4ȗ G&?:?Q?>B'@NB'@UeCT`>Wk.ޤ @,e@,]~ Xq?':?JH@?Bߐ?9^?DzXV2x?&?Uk`:V`F BR@[ bR@d"R`_ ? Dȗ ?()~`7a;3M`PKD@s?Mɀ?V-?Bs?9?7?(%F ?Ck`?@@?6( ?eS@,?` ?aD?R9L?-`??EE?Gu9?B `?Q ?KEQ`]֑`Yӝ0,?Bq?8@?6-?D?C- sYbn`T?8Tȗ aab ]r L2?6O`?3A^M0LF-r= -`RV`ZVFV`?P?N?CA^?6 ?4S9`?FG`W`?IJ`?\_`<rSՀ?I-@?e%@?ft?RL۠:90k >>B'@AwIqπ_f`` ?S?K ?%Հx@Wk=WkF~@E*e NeM0L-`?':?6O`?1D?0K?M?RL۠?Nޤ O{! &L@?6vH@> r1&?BR@?K?~`@??-Wk?=Wk?2?I7 ?SIqπc- Q?e#@?/{! ?B8sXsS?)?CL ? x@?@^?MWk x@ERFL@P 53@?K ?/{! Be?H%F ?a `?Y@?Ee>e?LE@?_{! ?F~@@`?RX?d~ ?FvXWX53@?,l0,Q`UEPk PSk`U@RC@>?&?':?(5RPZ?BJ@? :J>A03`I)@)`?[y`?W`I?AqK?F@?S?0 @SU]?G?bE?594@?7'b`"?;܀?R`,T)`Xc?3?O@ @KRP@S߫Q @?DLW ?8c##>!I?(z f( 2?U @?A?!IHT. MS` @?E`?Q??R# 1"C_8T)`?+y`?5A?:e7?=D`OF@BVĘ@UW?4֥`?h$!@?R6 ?2\ I?1"C?I<`#s?(c?O}> ?:JI<`O`^DbZ_L+?;X`?RhE@K`glb# K܀ ?7?;܀?!HO^hXmdFR OU 1?O?.-=?'r? @HzU`[\1@CK|?;܀.-,?J=?N?2^d@SAX&?RT@?`- @F@!QG'b`?9-T Cs??G4?UA?N?26 ? @S\?)?R`?:JN-X M ?L;?T. ?B?Py?^k?c?bE?P@>hE9` ?= @?Lz?J@ @Ky`CF?D@?^?a{,?W;$`?4` 5tz?3K|?%9?z-E&Z@?Fa6R P5+@?8?AI9@?+܀?O.6?Q?Qgj!P5+@?/}> ?S?GN?1I?Q?T$?H ?Pޠ?Y€?@2t?R, ?]`?C6?6R ?BtGM@C ?P?T` @??U ?V?Br&@?##?1"C?@F`0\`2l`?:/?P@C#[`D` ?-)`?2\ ?>%#Uc߫Z=(c@3`HM ?#?&Z@? ?H?@Dg`Y€Y€:=*@SSK|? ?2@\`B# ?48 ? @R`EAI@b= [Kf@[w`Ti ?:?M{@?HwE?8z?A?!Id]`T@)`?7vjFN X \D֥`?Qgj?NA?3?P @?Wb?W?[\1@?JA?`貋 &Z@?##?P+J@?M?)? \`?K`?[ ) ?V= @?)?1"C+y`>AD`JJe7?!?W?P3`??@;?#Sn?.6?F`?.-E9oV:JR`?2`?Eý? ?4` ?Z?LfDg`5A?OF@?C#?9?TH`?Y'?8z?I8;Y'J/?R# ?:=QI>?S7?C??.6?I<`?&R \`?P`?)?J ?P`?* ?C?X ?7'b`P!i@JA Ie\Әie`C6CO`CZm3#? *@?܀?;y`?68 I2t/.6P5+@I@:J;X`3K|?Eý?@Jm\"Pޠ?4)`貋 }> >貋 &R O.6_F@aA?P@?,Cs9RJ@^ATs OU TLW L?hCPzR`C#?G,?Uý?Ù?VN ?V?R`?4K <?B# 9@XN׀)@> @?9?Et?GN?#?0?"`E?.%?Vk >貋 ` @c' S?!I @ ?SA?]@C ?Ky`KA ?J@?;X`9P`?+y`?=3K|R.`a NTߠ?7CK|Ù0?:J=T ?8z%9Mʑ`T)`A6?R= ?W`?N?[y`?Yn>`>-W,S_>X X\ky`lB`OA)`_`a%2\ ?''b`B ?J=?@;9@ @? @?={@?I?;`QU%?CO?SO?U Vk $?M{@>J=? ##Y6@7'b`?X;av<`av<`V3 1T?P?OAI`?&R S6a"C>?GvjF@ZR^d@WSa`]g@SFPL?hE@vj?CF?QT?W`?[`?Y6@?R, ?4!@:?Dg`?[\1@3agjN|c?=T ?HO?I?* z?"? @?<?N?F@?Y2`?d`?KH Ze7[X`+y`?9@@;;H ?W?MS`??@I?@?Rt?''b`P+J@B`?7vj?J@?B\ F:JU9CsAP`&:J?7rP@[ܞH!6R Pf`^JM?V?Wr?7vj?1@Z OF@CYVJ=afi@pq`?JPy_9?D$HcS7` ?AqK Cs?&:J?MK@?K?(cWba:@?X[?C_>I?5M1?CFI)@$?%M1$!@?5%?IeB^d@^_8[9`?F@?UA?Id]`P!i@ ?X&?3S|$?8 T)``&YF@?2^d@?$)` @?%M1?8cA)?= @?B貀?4` ?9x??U ?9?A"C?Nk?Cs9@?A"C?a"C?C6VAqK?2t?9)@?D` ?$` ?3??@?J/?R|@?H ?Ts ?b?SA6? *@?\?]K@?/F@D!@?zIP`6a?P@?]4`?[`?F@!I??P?[ ) ?O - @I?7GNh?Q6?U~Qb]{@CK|0:=@Q6#s?Z ?PրId]`Wr`:\5A9@RJ@05+@?9'D)`T}@05+@?4)`P_8;?COAaKH ?Q?I<`4)` *@D$<I<`WK?S?HM ?GN?F 6L+QsT)`5%?Et?@y?f'r;y`O`\!ŠK ?H4֥`a"CD$?Ze7?Q ?I?@3`?>-AG?܀?L?h?CF3)`?K ?8 ݣ @?C?: %M1?#?9@? @?2t?Pf`?IxFaBJ@?TBv ?Qb?:/#sSA?$)`?T~@?>?#s?-UjԠSU%M1?_A?c_>?\S*?Z_?Z ?T. ?R`?R# ?Jm?&:J?KRP@7E%?P?Rr&@K Rl`?%A?&Z@COI)@?}> ?G`?\Q?GJ)VVk ?U ISARM`?-? *@@ @}> 4N|cW,W?G4N-[` -?a]?U905+@$` 7Q"`?9)@.-?9?M, ?9)@?Rt?[?H ?*@Kܞ%D!@?FN ?Y?'r7?&Z@?%A2^d@= ?2`?=?F ??`??vj1"CMS`?,?Nk?_@?W`?KX`?^?d?Y?Et?6a8cF ?*@?A6>*@)@?`* QK>@?D?P5+@3sQ]$` ?T@@?V`?8;3sHOIU@?F@Se?Ts ?dQG?Ix4@?A?E9?A?G4?Gvj"`?3?A ?3?Z!?c@?Y?Xl ?MK@C7$?D@H`V@O(z?-?.A?7'b`?Si\fT_@P&:J?S#?;܀Rt5ý?P;?)E%;y`SUZ "6 ?N-?@H`? f'r4)`"`?9P`?V ?V0i48 Q:e7*@8 "?I?@H`;H ?5t?H 7rC6*@+܀4` Z@+܀4` ? @?Jm?@3`Uýe\z*@?A ?Y?\?Ss?"?:J?V?^?J%M14@ *@?Fu ?N-[?0\`?1I?A"C4֥`NL+H ?5%?WE?=ʑ`D`?;*@?X ?AEHzX&`&YP`?Br&@SsN/.6\2S?KX`>RhE@B`Z@?G`?AXU͞?U͞?[`#3#?IP`?P?PR`?T~@?@B=, 3?)`?YF?_ ?R= ?V;@?V?C?Qs?V ?@!i@*Kf@U Fu ?1?C#05+@VRM`GvjLz?<?`?A^UM1?!A"CN?3?2^d@K`/.6?Hc? GNA( B# Nk f?59VWab>-?B^d@?( .-&Z@?+܀:JNAI2^d@;*@A F R= O}> - @?1T?z'r?6:J?ATQ f![9`?G'b`?Y?bYs?b?SK|??}> ?D_@?M{@?F ?D$Q{,=T ?W,?]g@?%M1?9?MC @@6:J?PH`?E5t?A"C?TBv fU TLW bkC~TLW ?HwE?#?"?>-KHO?Z@M P+J@3K`ISUh c?( ?1qKLS*N%Id]`2`?M @?Xc?H.-H;N##?TLW ?T@?Je7?W1C`?]" ?]T ?`?W?MS`?S?3Vq Wr ?Bt=ʑ`X2@\`?D?Gr?\"?d0?MS`QgjJ~?2l`?}> )@?C7?A"CF A?1qK05+@Jm$?D8 ?6A 3K|?;`6`Q )@?E?J?J?8c,Bl`I@#s?8 }> O@Q"CCO @?HM ?G`A"CEM1?=?,Ppq`Fu ?Q,$?\!Š?d@?bm5?V&?Y?[?Jx?- @?@ @?h? \`;y`:/N-G,AIS7:=? @U[__ jdLW Fu K܀T֥`ZGc`Y6@?C?T`?F@?-={@48 ?DLW ?S?M ?K*@?V&?\2?a?] ?}> 5%?PH`?P? @D֥`UX4` ??.6A6V:J?S?V?Y@?SO?0;3K|9? @?Ot?R\ ?Ly?1TFR @H`?4֥`?* ?#s?Je7?VD+?T}@?-B# I??@?%9##:J?CK|?R6 ?)FĘ@>?D`?1I?8;?KX`?07N?9?NTߠ?;܀?@;?C@H`I?>A?K-T O 1T?G?_.6?I?%9?VR ?`#?P?>A?Q?Y'?JxA?KH ?\] ?6R D)` +܀*@?9';`R{ AT>ALfG&R ?}> ܀&Z@NA ?E$!@[o`_`Z I8 M{@@3sT~@S7Q]_8X2MT TCC`5+@Z/ @?$` 0G,HO?;y`?UX?Ly?8?26 ??:@?T0?LyCON?"`?@!i@8;S#K`.-AIBl`?)?4֥`?05+@?5ý8;8c?4!@G`X@&:J?Je7?A??F@8 ?3K|?5t?4֥`?FZ@?P`?Qsvj^h]q@I?K 'rUtFĘ@?5%7P@?6R ?Wl?Gb @?Z@*?F@?Si?2^d@/F@? @>I?9P`?@5+@ UA[B^d@?M`8P?1?Wb?Q ?1 @?9?Cs? *@?D?\+?O` f?!?-?7'b`?:@ASnR\ PրHwEEJ~B# A =T ?-"?+܀?Va??VY@Q{,B`@ @YFa[`Q?Z@LɶO}> Ts Y@?I?IU@H YeTs I)@9@R\ Y)@+y`??@? ?03`IQ]H;?8??@?2^d@?6`? f6R Ds QRtE9o>?L"?B`N׀I<`? @A]?W `+*@aV J)N<?.6FN *=$` >%5M1?/}> ?KX`?/}> Wr[>@?4)`?\?;܀\IIZ)1qK0;4!@?I)@?Se?.AD`@,;y`0.-0??? 2?)`?DLW ?U͞?- @\ɶK?C>1"C?V?<D` -PH`]{@AqK? @9P`9?#s05+@:@?;RP@?Gvj?A?8c?M{@?YU@?Bl`T0T@8 3?f?G?(z?.67?A?L;?Lz:=Q{,A? ?B\ ?#sA6>%D!@T~@;H ?N|c?F?8z?=ʑ`")`?;܀5tN%N׀E`?@3`?Oi| ?&R ?&R ?:@?0\`? QT`ZSOL"HwE?6?:@ TaW'b`O.6T8 WU͞2t?,G;$`SiP!i@J)?6a?J~?U/?8;P;SU]L> ?M{@5%X;7rvjR@@C_>?Id]`?R?NA?&Z@2`?>A?GN?%9?zN%aFN ?D֥`I@OU ?$` )P`?9x?[ ?W1C`? \`?V:J?MT ?F ?J@?F&?: &Z@KRP@>h?G?HO5%-;`B\ OA?I?I1"C9@?E?H(<?N%?X@?D`G'b`E?vj?2t2Q Bl`?Ky`?P?03`?1qK?1qKP@O`?}> ?:?O@?MT ?G,?M`?QS?IVu QqK8 L+FZ@5tN׀2`?Kܞ?zG`>-?L?JQu*@ @3K|Nh+*@2\ YZ NP!i@=, ?$, ?G-QIe[ ) gc f\5>?U`?F5%HOH ?@?W??=EO.6T@]T DLW ?0<>?@D@'r?U9o?Z@V:J?`?\?[RP@?K*@?5A?: ?B# SK|W4A"C?C?Mg@9O`1qK?B`?:e705+@?>?]@C ?Rр1I)8 S^F@?U?\?I@?8 ?G?Je7fX;\Z\pc _@QPf`? f?Q? K*@?}> ?)`?EA?)`PH`O}> `րkM_W`?@pq`48 IU@ ?A?5AK`N> @A6M )U͞gSdW_Lz? >貋 ?3K|?*VPzR`?F:J1T\R= @$)`?G?T_@?E,2`?-@ @[AZ/?Rр?=\bрA>PZP!i@CKܞAT5ý0?Rр?\p? Cs?'vjB\ \S*N-?GN?R.`?5%2&:J?I?.%?+*@48 D8 Fu @?C?Tg`?5M1AqKDs %9?T}@?Zg ?4֥`?5A?P@@W;$`? \`?Je77'b`MT %M1?L;?S?@3`?2l`?S?Xc?N׀?G,`?C_>D8 D֥`?E9o?J=?z?z>0=ʑ`U`_F@]@C `Z`Pޠ1"C?A?G;$`8 QQNh @/.6O`M@C cK|q6c G'b`S;܀?: ?E`B貀XP\`N=ʑ`?C@V@Ti Xz`5+@4)`?MK@WEa? \`?0={@?EA?Kܞ?%A?Cs?F@?+*@?9P`?I<`?P?Lɶݣ @7vj?4!@?.-Sc_}> B\ =XOYI2 B6 J/?;RP@?S?z@3`?vj.AS_>N׀??* -T ?2\ ?HM ?I?R= ?N%>%N܀?QI?S? @B`7r? *@?<>NhJ/Gr\S*TH`?E?GAEt* ?I?A6?3K|G;$`@?F@?U?W1C`?O?`K?FPzR`L+4?5ý?L2&:JQTG`Uw^FĘ@0 @NB貀?* ?8 ? :/EWr`BKܞ? \` @UWg{[_Ot] @_'@V3 ?F@?Mʑ`?@5+@L2C_> >?7rD֥`] Uw@ Ndg`Q?S߫`F ?Q?Q?N?bL?X > @?-3PE%&R ?D$?Vk ?>1"C?3* V`UXIx@C6Yec|Y>貋 ?Ie?2l`;X`?L?hPzR`?`7'b`?5ý?J): Q]?FZ@?_A?;X`A"C?F?LpCS7A? ?>A?Ew?5%,7:@Ky`K`2l`HM ^JR, ?=?`N|c*@?G`?V ?`?F:JRрI@?7N?V&?V0iH@^M Ù] @> ?HBl`L;D` L;FZ@-?+*@>%Sn [RP@S?<?T?M?59?4֥`>ݣ @T@Y<`EFEw?Nh?WXǀD$[y`??U9?.%?.6?9?C659Bl`4!@3?: ?W`?I)@D)`C:J"`?48 ?Va?Q7FĘ@:JC#s?5ý @>*@?D8 ?;*@>( ?.6?*?Ss?Y? @M@C ?9P`?Ti ?R^d@?7Y`:1I0;N%?&:J?,fRhE@UXM `WSA)P`?)?Ew?B`?#?7'b`?B.`?!AIC_>5tHwEI5ýPޠV?%M1?HzCK|Q0 *=?( ???#1qK @7'b`?.%?RhE@?.APZ3K|?Cs?!I?- @?S?V&?= @0?$!@?N?>A8 ?D_@?A ?3K|?8c?Lɶ?O@?;`?Bl`?E?V@6R PzR`?AT?D!@@!i@J=SPpq`?7vj?CK|?Z@?-=RATJX Id]`Fu T`!?E%EýU: ? @?J B`@pq`CF@P!i@[`a?f`?@5+@c`O@?W? @\IITH`7 @? @?)Je7C_>?0 @?@y?Nh?D`QbP? @?CF?5%;X`?0?F&?9'&R 5t?Q?WvjT@gvj[*@@H`?7?K`A>'vj5M1#sQ ]" P!i@#?@?Kf@)@R\ GbCF@>?z?}> ?05+@?S-٠?1"COtD8 ?* >ݣ @DP`?K`?8;0 @?A ?Jx>?26 ={@Br&@?f?V`?K`Q]Q?` $LfA ?>?K`?A??U f?TLW "`I??U ?)`VaG?3QF ?M?` ]7N?UjԠD$_@>?4@(c?P`?T$?^?XE?M@C ?A"C> @.-6Z@@5+@?=, ?Wr?D`%M1?A]?R\ ?Pf`?KRP@?P`?Z?NhZGj}`fWR?4 *@V3 O.AN-[B?C_>Mʑ`>h? ?DLW ?QqK?D֥`-CFQ6FZ@?0 @?A ?V`?` ?܀WϠ=, ?MT ?AT4?-T ?Ut?R, ?E?R`?OA?8 ?JQu?D8 BIP`@9x?59?!SS7=T L2SU]9P`?5A?$)`&R ?$)`vj?S|?G'b`?>A?V&?EwM @!?V ?ATU9o\"QK>@SUC#?MS`?Jx6`>*@?$!@QS7?Z3?RM`A>?N-?U/9xZoD֥`?-??H@?Ye?O@1"C8;?Bt?8cG$` ?:@R, W;$`?=T ?Q?0;?"`?FR ?XO?`?[\1@?B`Ds Q{,;*@?E%?Ye?\p?IP`?&R ?8 ?EA?Wvj?Z?Dg`C6RрXwE_$US? @5+@X. KAqKR48 ?Lɶ?9'?4)`?4@?"`?@;?Mʑ`?Id]`?܀: #s?&:J>I?A ?_@?`?&Z@Q0\`?Ky`?>%4` ?A?MK@??U ?` ?K*@?M?* ?=T ?C6> ?8 ?Dg`6aK`HP+J@LfB`Hz 0 @?$` H _i| _t>A?KX`?A ?#?:J@5+@4!@?Gr?K`?G4?F@7rP3`9?D?*;*@4` ?HO?\f?_8?X?CO1I@\`A0;?M ?U$)`Vk @3`?8 * ?U `9K܀F:JM@C DLW ?J?NEM1Q?܀?KX`?A6?4)`?KH ?O?+܀ *@?3s?)?#s?K`?W`?R6 ?.-;`903`F&Rr&@K`9GNK ?1"C?FN @!i@N @?FĘ@?Tg`?S|&Z@R`JC#J~G`+y`?` ?&R ?D)`?R{ ?S-٠?XM ?XY?U >?'r}> &Z@D`PR`@yId]`T?1?[`?OA3AqK?26 ?G;$` ?O@,^LX*@?A6BJ@P\`?H?TV8 DLW T@Lp]K@i} j@V`?K`?O@ @2\ 4!@ ?4!@Z@?4!@?Q?Hz?7vjAqK7?;y`?G?Cs?0>*@?$)Oi| Z@?_$U?\zA Y,f?Rt?D@9@?(z@\`;`?A%9!?CF?I'?A ?:/?3?3K|> D` O`K`>-3?}> !I?<7N?PR`?_8?T`?7N?Kf@?-?Qb?%?GN??`?-M, ?-)WKRB\ MOtV@`zR`BJ@?U%?Ss?)P`D֥`?@??`?6@C#R@@Y)@U`V3 f@hk`UjԠAJ/SI'?Q?U M @W48zM`eCPj=^&Z@&Z@N׀T_@[w`S_>3LM?4SsJvj?8z?BFu 5ý?F:J?[A?ZG?E?H ?T@?>-5M1?*@?3K|Ot_8R6 COPy@y?##5M1=?3#?J@?N?B# ?9'?S?V0i?: @?#?6Z@?B`AJQu?)?S?U ?b# ?d0?Bl`FN B^d@A ?B貀?d` ?aI?@!i@?B^d@?C7JQuS#3##APH`P`?U?OQT}@1T ?( @UWvj8z?)@>貋 H E9o?DLW ?I)@?I5ýOU R`UWaWI'WlNA6?: ?<UX>I:JWb` @WϠR= Y[`Zj d08;>hQS6a6`E.%vj?-?Bl`AqK[*@R# ??Lf?J)?7?Dg`?P`?39@??.6?^׀?Q]Y@abz@-?@\`QX@>貋 ?Q?>A= @5t?AI?P @?OU ?E`CFb, a{,IB^d@N*?=T ?(c?` ?26 ?Id]`?WE?Ix( ?A ?M`1:@?1T?%9:JJ=UM1?A?a ?U/?N%?P\`FZ@Wb4)`@yC?Si?V:J5ý`?R.`?=T A>% @?P`:?>-?_e@?``3Ti &Z@?>A?MS`?R@@?.AFaLzA?}> L;? @?XE?Et;y`1qKIxQgj@y6`?4@?IMS`O ?)P`?40 @6R 6aNk[Xmd\Zj@d?*@?H?7?2tIxR @?*=? cs_ ?( ?<R@@ZC?@?H?0!I(z?$?SA?Z/?AU Hz?vj5AB\ \`>:J?+*@?;y`4)`>?S?Y t@Z@B^d@DLW \2Y>H T@U9oO}> ?R# ?cڻ`?Bt@?P@\II+*@ *@Q@H`5ýT`1?V ?I@Ds L?h$` ?Gr?A ?/.6?U?^9Z!)?B.`vj?={@?XzUAA]QH@?4@>:J05+@?6a?E%?A?) @QL;Se ` ?2`?S_>?W?T8 CsP5+@?L?W ?N?I?0;?3?\z?bJ@?D_@RQT?+y`?/}> Q?SF,fB貀c#f\݀Lz?FR ?=T > ?P`? @?#?7vj?H ?&Z@BJ@?AI?]K@?R@@?'vj?6R A??$` @H`3 @X;aqK?6?a:@??@LzHwEVXIxQU9H;Br&@?8;?W,?:@ ?T0?AqKP3` @?Rr&@?O@?K>@? M? @?K 7vjT~@Lɶ7?%A?7*@?<?P+J@O@`={@?0SK|]`-P@AVN `PޠB`VOU ?6?@?8 ? @@;?6@?JHwEJ ?J@?B\ W`iF`eA?- @?YU@Ca]T X@_$U`BS߫D@PBl`?:@?#$3#YU%?Gvj?O@?&Z@?`4!@?` ?\"?aD@?DLW PR`YP`M #??(c?={@??U ?G,?C#Pa1@PH`:S!?Yn>`?aDZ1qK??U ?PH`?B?:e7?X2?RtId]`WSPH`:/?:@?-T ?.6>貋 ?-;y`>貋 ?H?12^d@?DLW ?K>@/F@;`?KH ?Bl`7vj?0 @?@5+@?)P`?B貀,X;= @?J ?@;?8?74)`Gb;y`?>?R?VD+OU FaU/)`?^?Z?F@?KX`03`K*@@5+@5%FZ@Q]OOAV T)`R`Z Q ?G'b`?Z ?N׀F:JR貀?? XS߫>.-Zm,@m;?^.-aS@Z!J@L;U͞PCF:J @?8c9)@?-?N|c"6 @\`?Nk?N?K?W`?JQu?7A\fRM`)?@?\!Š?1IZ NP` ?@?T!@?Q??Qgj?b^d@?^A##I4?Z@?8vj5t?*;RP@X;CO?)P`6@?܀?Ut?W `?J?;`?J ?SU]> @FĘ@?C_>?Qs?: ?D$?9@;܀?>?[?TH`?1APP? @VĘ@[RP@A?2\ 0 @;`?}> Q"C?}> ?HwE?Hc?@?H@>:J8z?)`?;y`?f?.6ATCT`U@-T 8?-?N׀?IP`JQuVk 3A6[ Z WR`@ @\Әe";`?Pޠ(zHc ?8z?B# ?@\`?7r>I7N*F&YCO?Je7?5A(c?05+@ @L2QsH@D@Bl`? ?L+?J? \` *@?9??F@?>A?X ?b?Wb?A*@V@UCP? >ݣ @&:J?;܀2\ P!i@?:J?PzR`?Qs?Je7vj?(z?`? @?`W?7?26 ?Sn?T?4֥`L"P? @??2\ A]?}> ?F@P+J@ @?Y€?Z N?FZ@?Bt?Q?L23A?;H ?@!i@?!I?D֥`?F&?(z?D@?S#?Q?LS*:JL>AA W= @?YP`?SA@pq`B\ZZg ?-> OU z?-T ` ?G`?H(<)@>貋 ?M{@?QI?@?A fM`[`UwHz6Z@?"`,S-٠V F:J?A?Q])`T0M@C ?2\ ?:@F&92\ ?A?[ ?X[?$)`6`>` %9?@\`?C_>- @?F:J?9?-?Bl`> I?-?Gr}> ?#s@3`$` ?U ?COZ)`րJ~ @26 @H`?4?P;X >?D$R@@Z~` ?+y`U\57r?A]?F ?1"CSYʠ0 @)T@WRl`&:J?3SsZ=&Z@&R A"C? @!I @?Rl`?ASOU2`?6@?@H`?G?Et D_@NhY2`GN?Id]` @]`#O@?OF@?a:@?H(<V;@\Z? f?UX8zS|?WE?c7`?: #s?z?-T ?RT@?B6 LzD@?C#?Q?U`?P;&R BJ@/}> FN @!i@?O.6?RJ@> @? ??.6?AqK?Kܞ?8Z)P?RJ@?Mʑ`91qK>:J)P`)`;X`U`U4֥`??}> ?5A:J?Et?XcYU@4@ @Y'Zo?}> ? @[`Z?#?/}> 0 @:JHzUX;RP@(zO`Z)`kU%={@R貀S;y`Q"CS3K|<6`?A ?1qKIUM1S_>B\ I?2\ ?15t;y`8S7Mg@?"6 Bl`\_AW ?NTߠ?0\`Bl`J/?.%?[y`?3Tg`?N%?a)P`N?9@? @KܞC''b`O}> \fC#?Nh?Je7?6?)`G;$`>?Pޠ?Xl ?@!i@;X`IX c ]T 4?2l`&:JCz?E5t_.6O@?K`?Je7?1qK? f2?2t?Nh1IUW6`?C#??F@?C?A6H;V`?-?P@9)@C?V0i?UEM1D?E9?1D֥`1T??.6?,f="?=, ?7'b`?E?SK|>:J?8 @KX`Ds ?/F@?)P`J@I?5A?''b`A?* > 217vjW `[T@WJ)+܀W'b`\+D` ?U C48 `?#4)`H 1@;R, K*@P? @SFHM RhE@]4`_$UZ!HwE5ýL2KPpq`VW4` ?*=03`?7>S6?48 ?Z~?FZ@> ?`V&Ky`3QX&P`?T`?XwE?Y?J~H G?H(<?Q?)`IFaGvjRt;܀?L?h?3W`^Tߠ@pq`?J@>Vq 3?Vk ?J6R ?@I?O`?]?O KH XDg`?:=?Ix?Q?JxH@TV8 ?2`?Lf??}> ?P?HIx9?R@@?CsJ :?Nh?AIU@"`?V?TH`?O`?RJ@?S#?Q6?I(z!ݣ @?A?)>貋 -T I@= @?C7?Q?1JQu1qK?:=:FZ@=I@1"C*=[X`[܀5%)`4!@FaH *@*@??I)@C_>a,$N|c26 S'V@Zd֥`f\݀V;@?G;$`?R\ -T KH W`@y?CK|@3`HwE4A? \`?PR`?=ʑ`6Z@OU Z Z J=4֥`;܀-?;y`?Cs?H?Rt?>AA6? @?M @?7vj2\ \`?:e7?>?1"C?S?b?SsQ[ܞ=, ?MK@??E?U9o?Ie7N?M`?VD+?YF?^%?N׀M H ?Br&@?@pq`?LS*?b\ ?QRT@5A?V`?T@?7rB\ P @??S7?6Z@QPޠ?&R ?7N-?K܀?b?YF?C?O.6?C#?26 JQuD)`?Sn={@?N-?5M1I@K>@J F`? ?B`-REt4)`Hc?G4?3?7'b`3#_i| W `? @?3s?.%+܀OtKf@EA?"`?T8 >AbFN ?COAX[_@a%YP`59?K ?CD` FZ@A N-[?I?R`?,B?@?Ds 26 ?C_>?Je7?0?6@?J/?2t?%M1?Qgj?K*@1qK1T?.A?0;?vj?''b`?Ss?`5+@?Rl`*=>%?4֥`?S?HwEIT@= @9)@O.6$?W?VR ?CK|?T$?S߫6Z@ݣ @?W,??`05+@?T. ?R`D` %9?[܀?_`?=ʑ`SQ?D)`?UjԠ? \`QNA?8?P@?A?Rр?`?HcHM (zM, Rr&@\pVA6Fa7'b`?;X`>Bt26 ?:J:J:/D@>->貋 ?''b`KH V&? ?G>?A8 \5Q?)P`?.%?Eý?GN1"CLzS-٠8;?RhE@>:J`:T`I7NSK|` @Zm:@6EýC6I)@B貀? @?48 ?N׀?WK?AE9o2l`?I?=ʑ`A6?*@?P? @I<`;H :e7J)(c?P`?T8 ?E`?E9o?Kf@?@y?G;$`?O ?I7vj?2\ >IM@C OA3?R`'vj?X2?bE?UCPEwP3`?Br&@?Q?3V L+?D)`?Q?1qK?IU@?`?P? @POU ^Vu RрN?6?P+J@?6Z@%M1?9'?U9o?U?J ? ?/.66R OAA"C?O`?AX`3`U9F Pր^R.`>N]J$ Ew?!I-2`?.-?J)?K*@ R6 P!i@>貋 I<``?R|@?F:J5%AI8;"?:e7?Q?S#?HM ?A?6`?1?F@??)?D_@?VW *@R`6?6:J?$!@-:/EDg` @?MS`?QR\ N-[&R 7'b`QbSP@/.6?H;?>'vj?D` ?V0i?P3`?P@?EG`SU]-?G`?Wvj?YP`?3Gvj2^d@M \WA @!i@I?J ?h{?bhE@)A[A@y?0;??RJ@?_8?>%E9?Rр?jm?a,$:JB.%)`?3?Ew?7'b`?;`?VD+?H=3vjB6 ;*@? \`?= @?A"C?$` @>6`?A]?##Uta`xTs U/[4@@?9JmVa?Br&@>ݣ @h?%M1?UjԠ?V0iG'b`L?h?S'?Xmd? \`?-?S?T}@?%AE9LɶJ@E9B.`(z?FN ?SU?HM $)`Fu ?3K|?\ɶ?Z?I?@?:J ?L;?S?.A,> *@?z?H@?Oi| ?'rDg`K`KܞQ?UA[ܞ`kUjԠ?P @?g4?__ ;X`>-H?:J?Ds ?3?I<`?Qb?U S?Q?h. ?WrR\ U͞ @?1"CN׀_tSi?+y`?E?7'b`?+܀??U ?A? ;RP@A66R 2l`L;9?* #''b`?94@MZ`[ YYA!F - @?9)@>貋 @?IFaW`T@*@0\`IA?A?A @??}> ? \yS_>?XwE?]?)`?( ?a,$?e?Z3?3M`X@SsNAJx @?RJ@?`pq`?]6b ?@!i@?2`?V@?V&?P`EtF:J9"6 >?0?))5M15A>?Q ?V?-T EABl`+y`;RP@UZ!F?H ?Xl ?FQT?` ?` ?59?#s? @5%SeP\`?A?V ?Fa49P`?6a?$` \pf!Lɶ?Q??9@U9oR?%9?Z@M, N|cJmPOU QP??4` 5A)P`?*@?0??@?@WϠMT NA[ [*@` @Z??6` \`J~1?FZ@?F@?Z@>%1T?AqK?2^d@D8 ;*@2\ TH`W1C`?`?KRP@? *@z?N-[?V?T8 ?S-٠?A? @?##@\`T!@Q: ?E9?Va?9-?Lɶ?QSG]ʑ`C_>?Gb#PH`> @?26 AqK?B`?9?>%?W'b`?S'?26 ;RP@= @*=9@.-??@?EA?Jm?Mʑ`4֥`X(<?;`?7?E?Cs>Id]`G?4)`?F@?*=?>%?J ?%9 fO.6Q5?1T?O ݣ @UXVu Br&@Nh] @T~@CN%RM`SH ?$%M1MT A *=?B# ?Y@?@8;?B.`?X&_@e\ d? *@?R`"/F@?:@.%Fa?!?K>@?N?T`?Y?V?S?P3`? \`DLW 2?A]?CO-T 9P`?I)@?WS?P\`?<? ?`?8 ? *@@05+@?;H ?1TKܞW1C`EA/.6 ?Ew?ZQu?CF9)@I?K ?SF?9@EwHM :=?7r?Q?HwE?I@?Y?IJ?A?B?HM ?Br&@!IGvj? @?YF`?T`?1T?;RP@Q6W `26 ?- @?8 ?fI@Ew,F K>@J=TL+## @P`599x @;*@G,@L?h3K|?RJ@?Dg`?` ?H vjO}> C_`N-?P`>-AT`vj?9@?Cs?A]?I@?F&26 >?Ie?R\ .%I@?$?( KRP@B^d@?F&?N-[?I@?Lz?Ds ?9@?4)`?/.6?7?"` @?8;>*@RJ@K >,HOO}> D!@&:J$)`?@!i@?Qs%9ÙSOWQ?*?Dg`?Qb?^7<?_@?X?Eý?"6 ?03`D!@WN?0;?[ ?OU ?O`?\?S0U`JQu?Lf?RT@6`UtO`?.-?S#?I@?<?Q?Ky`?:J?B# ?` 9'GP@K`?4?Z@?Rt:J0;Z_Vy@#?%M1>貋 Mʑ`a%R= ?"QXc&R *@A5%?0 @?Gr?AqK??'vj?''b`?1?1qKFĘ@H@?>A?@5+@`4!@R4?a'4@?[X`D@S'MS`OJ@K*@P5+@N|cI)@7N?*=?0\`?@Ti D$?R, ?T@@HwE]`LzCR`(c?M@C ?D@?N?[`?W;$`?P`?Gb?CF?SU?4` Z)RM`?)?!?;*@?Hc0 @Q5J=貋 ?%9E%PO`RM`2^d@?G?#QSWSO ?@>?4@?GN?Uý?GbA7>*@P @Ut?4?\?[y`?T?K?A?@?!I?Bl`vj=L;VZ@P5+@1qK05+@J=QI6@??F@?J=?O9]`\QT~@]S`RCd?g@D`?( @;N-[V;@Z RJ@7ND֥`SFR 3D)`E9o**=QSZg H?+y`?,f?CO?Je7&Z@:/?4 @QR, MK@f?XwE?\?7vjvj?I'?Q?R, ?EwBtI'3B6 > @?PzR`?E?PzR`?b k?br&@?] @?HM Br&@?z?AIVWc`aȀa B\ ?Y?RJ~YP`G,fD)`PH`?9?iU?l" @W `3K|!??3B\ LS*@ @5%?7?I?7? +*@Bt3#9D@?5M1?R`?Oi| ?S|?T>I7vj?Q{,?[\1@?Jx?D@?Kܞ?.%/}> 9x?)`'r?8 *X2W4T0]K@`MWlGr+y`? ?-AIUýMI@^ZM`H`b{ 5ý?B6 ?7'b`?P`Py`zR`X;>%.-J)R{ A 5ýOAQ6@@SZ NUPNk26 ?0)`> @?L?h?R`?Br&@ @B`h?D?D)`I9P`?S#?Oi| `0:a'4@?A]?S|?G`?R|@?W `?C_>KH Q> @ ?R^d@?T`?.A:J1IIe=T I?)?U~?` ?P?` ?DLW ?H@&:J9)@` D` P`1IL?hN?4!@4` ]T Y<`VR c`cTi BJ@@3`CD֥`GH;X`H;]`YʠI)@T֥`Q?:@?J?F ?PzR`?.%NK8 26 >貋 ?AI?EtL>?-3LS*N׀KX`HMS`UXO`9?`??Id]`?NTߠ?3#,f3#?;X`?M? f?O`?!SR, Pր?!?Ze7? Q?PR`?]{@?C6?C6?Je7?2\ ?Z@?0\`?8 0Q5>?Y?HM @Kܞ?3#?G?9@?>A?Kܞ?P+J@?MK@,fU/;*@-]6b Q,$?Yʠ?a?V;@?\?ep`?`3`0;R{ =ʑ`T`] ?Q?D$?9'?1I?)` @KX`U`?T@?Gb59- @?:@?:JMʑ`Tg`R6 O.69US|?3s3W `A!W,]D`?.A?>?%9>ALpR6 V@^#za,$U9o6a8;?vj?Ix? ?P?Q*@9'B貀B\ ?: ?R?E3C#?z? Q?TV8 A2\ Q 2t?4@?=T ?Ky`?1A6R|@!?Z_?G4Ppq`@pq`?f?>-?U ?7N={@?U ?] @?0\` ?26 `?.A?O`?K`A6U?;܀?e`?\!ŠQ,$a`J ?Fu ?HwE?*=>:J?,?* I)@Ti ??Jx??8 ?MS`?=T ?@!i@?X;?dn?b?7vjCO? @C^hU8c? ?.A?$!@?CF>*@?`??=T ?܀?@BJ@?=ʑ`?K`HO[`G'b`:=CQ=T ?F@? @;`?Gvj?O.6={@Q;y`?B6 ?W `?S7-Ti Zacfq fZG9P`?:J?>A?@!i@GMg@?A?CK|@ @E`D֥`@?/.6?2^d@2??U ?AD8 MT F Sce\S*?z? Gb>%DLW PR` @?4@7r?<?W`?=T PޠXc2^d@?SA?!IP3`?Fu ?W*J@B.`7'b`?MS`?Z~?L"?;X`?: ?.A?B?VN ?X@?6R Ky`? @?WϠ?E`SFYx59?Lp?J~4!@Q{,@5+@L+P? @?<?P`?S7?_e@?PC`?N|c?Qb?P?3#` ?R`?X?)P`J/L=5tI'@ @?A6?P\`?S_>?N%? @?#6`#?FĘ@$H;?8z?#sPR`F?G,?M)`?* ?Si?H(<AqKNG,f?R# ?SO@y\yY2`U[` Y<`B貀5%,vjF@D8 ?3s:e7\zVN A* ICsEA?Q ?]K@+*@a?`pq`Yd]`b`jocڻ`9)@?''b`H(<N|cBr&@- @?D`?F@A9?Qs?V`?CK|?5M1?Kf@fF?R貀?YU@SscQT @?Jx?\?\S*?L?h?0?4)`?H ?X. ?c?] %9G4:J:=Ew?.A?Fu ?6?vjAQ)`?I={@Q48 59?;y`?dn?`?5t?HwE?L1T- @?-?>-?Z?aD?S_>?7r?/.6?I=T MEt.A? *@?AT?1TG;$`1"C?K>@?*E9$?-?;RP@?Qb?A]7'b`?[4@?@;K>@?D!@##K`D$EýKܞ?9?F&EM1^-U(c?`;y`=)P`M@C XJ~>A9P`?"`B貀ar ^7<Et+܀2l`DLW 4!@?S#?VN Lyc7`]`XY`:^hUSiTH`VR N5t;y`2`? \`F@S?D8 ?eo ?e?X ?J ?QI?Q ?Dg`?Lɶ?>%X2`B`?3#?-?C#?HM :JGb>-#?@?^k?`!i@+*@VC@!i@*?T0?R`>I=T =ʑ`?D_@?XE?.A@!i@?:JB`E?P@?QT?.-?K ?G4)`? @?Q?X?_}> ?U?* ?DLW ?Yʠ?R`?`3#=T RtYO`A K`=?Eý?D@=F )`?;܀?C#?E9?K`?Fu ?Xmd7rXK*@:/FN EP` @GN=T ? ?+y`?) fYèX(<KVN EM1 @SsZB貀+y`9@?#?D)`?=*@K`M @6aKRP@Yd]`D8 *@WNaYZ|`J@\`RZ/KX`O@X. ?0;?d?c߫?Q?-?G;$`?^#z?X @PUMS`?` ?- @J)U9F:J5tL"QO`H??`?U`ILS*?''b`?.%- @?M @?T!@$Bt)@9@?)?R6 ?G;$`?C?U/?E95%3s6:J?#s?*=?/}> ?P\`?Y?aD@?cu`?O`@pq`?9'?\Q?V@?F?C_>? fO`TBv C<3s?8;?( ?@1"C?:J?D`?X ?H ?,Pf`QJ Fa0 @( *@?6a<?:?M, X _M` @ @J=c2 gU9oJe7b`]q@` DW`;H 0\`K`?:?X@?;`.A?A?M ?A6IaWE,fH SQ"CUjԠSPyQD`Br&@A?Ot?]q@?KX`?*? @?*=?T`?QbQ`R`Ly?2\ ?Ky`?G;$`;`Rt?)`?W `?D$;H 0(z?8z?X ?Q{,?1?R|@?R`)@ *@?F:J?0\` @#G'b`FZ@?$` ???Br&@?PR`?PR`???+y`?A ?Ot?D`?)P`?D@?IU@?,f?G4?XwE?B`4@?7?F@?"6 ?>?U?S?E?DLW ?(c1I f9xMK@ ?Eý?(c?)?@?%9?6?P?I<`,6Z@?2%A ?Fu ?!I9?.%AKX`?J@+܀`d=KX`?=, $` Wc@` 5t?AZ[V`5+@FN O@\?hKy`K`_8Gvj?Kf@?:J?Py?CO:/R`cibT@C_>?$` ? *@E^rY0?0\`?6R ?CF?Y€?fy@?_i| ?0;?F:J?QT?4?;RP@?'vjY`x03`?Q ?SF?Pր?B.`?4` ?X ?ep`?Z ?9@?Hc?J/?HM ?\y?X?-?G`?T$LɶHzD֥`5%5%CO5ýZ@2l`5M1?0?B?5A?K>@?Z3?P??U ?N׀?/}> T@@SeCIU@.-?B`4@Z_P@?IU@?Y?Z_?S=ʑ`\ZP5+@3#Evj?N%?G?C_>?Lɶ?;H 4֥`,?T$?I?FR ?7Je7H(<?)`G;$`Yd]`:e7?4֥`I_.6W ?&:J?KH 6:JXYV@F`:J?"`@3`M`DLW N-Z_T`QIZRB貀WV3 ?`S_>Z P;W`X 1T?26 (cL?hT֥`C6?4)`?;`?A?Q ?b?i<`?Z)?03`?UCP?W:J,$` UYʠ/.6?D8 ? @9)@?I?HO?WXǀ?`x?T`?)P`>.-}> ?N-?FaC#s?K*@?3EtSsUtE9o?5ý?B\ @\`26 3s?}> ? @?4` FL%9$!@?A?Pր?C_>B# JmQS?O`%M1`3`b;K`?2\ ?<>ݣ @Q]\"L"03`D)`?P@?N-?B?H ?B.`B.`R?IU@?KH ?}> V dXQ?`SU]?( H(<U,:JG5t?C7?F@NASs7vj?"HM U 5%?4!@? @.%F@Q?A6?&Z@?/F@Et`\`aN@X2X R, 9xF@G;$` f= @W`Vu &R ?O@?CF''b`?$)`?DLW ?P@?S?0?R`?A6Q @H`?;X`0MC/}> KX`Y€Fu ?Lf?VĘ@?T`?K*@KT)`H@?&Z@>I4!@?>A?PR`?FZ@?>h?z<* ?D`?D!@D`TV8 -?5A ?&R ?0B.`L;?Q{,?Q?Jm?QT?T)`? X(<JQuKUbaLS*Y<`g@YZ|`?'vj4!@/}> QSO@?I?Ye?7vjB` ?Vy@?`Z?T}@?9@?)P`?- @?''b`?4` ?)$!@?>%?Wl?RT@?BJ@?L?h?Oi| ?5A??C?/F@Z!a,$-??`A6=?A"C?I'?D`?=, ?<?H?Mg@?R`?ZG?V&?B貀?3?2^d@?>A?Q]?Q??3%M1CR|@P!i@Fu JmK E%> @?Q?Ut?L?Mg@?Va?Z3?B# WT@@[*@VR S \`?N%ATa{,Uý7`?4EwaqKX ?0 @?9)@Fu 5ý?Mg@? fW4Q OAWrvj?Q? @??F@6Z@Q?B\ ;`C?$)`##?9P`?Tg`?@D_@9@/}> B# AN-P? @I @?IU@?@? @?HwE?4֥`1qK?99O?>A?bm5?bM`?S|ݣ @??Q?M, ?'vj?Q??a?R`>-??Xmd?],@?UjԠ?@H`*@?5M1?Ix?6>ݣ @? ? @;RP@CF?9'?HzR= ] ` ?(zMT >%??F@?EA?Et?Fa?Qgj?U"?L?L"?Uw?Ie)`@H`M@y?C_>?M@C ?D@?:&R 0;?2t3Y@Va ?S?^?Q? ?1T?A"C?>%?.-GAIe?@9P`?@?S-٠>HOAqKQ?IP`?9@K`!ITi `3`M @?Ew%A`xXY?F@Eý.-?)90 @?:J? /F@?h/}> ?I'?9@PyDg`3J@#?T0?XY?LS*05+@Gb?)`?2l`B.`?:J?_ ?WE@5+@4?I<`?H(<?L?T. ?J>*@AT6?,(cM ÙX& @?YP`?;X`Et?P`&R A?D8 ?FZ@8z@!i@ @?>?@*@??Lf?H ?* H]6b U8z@ @#s?5ý4` f?V?Q3A:J??`?J~?3, @&Z@@H`> @?C#Id]`1"CA]R?@?- @3#?1Q{,U ?0\`?OU ?Y?b?MWc@^-[H?F@R{ MK@05+@3sF P3`KRP@39xA?%9?IU@?HM ?A? @M, ^P@?J~?&Z@Qgj'vj?I<`!I?:&Z@+܀?)`?Kf@?\?Je7A?P\`?N׀HJ//.6J~J ?.-?Lf?GN?}> @;A 9I'0?V;@?X ?,f @EU?'vj?` ?]?/.6I)@-?Mʑ`?1I={@CK|WlG?U~?Lf1I> 6`)?R?@;N=T ?8?,@\`Q?B\ ?.-?F`?R`?0\`UM1RtM@C U9o?Q  @FR ?Et?X[?SK|?=T @HwE9?9x?=T ?=T ?48 ?'r?@?T0V@?@Rр^%MS`?9A?F@!NA:?)?U?b`?NAPH`WlSUF&$)`1FN A h?2t?&R ?@Ti ]`HM ?Rr&@?4@XzC$Z_Wvj$!@,fI)@R`E?J~?TH`?T0?a`?`y?A?03`?C4!@KX`? ?Br&@? ?2`?N-[9L"?Dg`?2`F` f @?B# ;RP@VĘ@4` ?Ew?8c1I?)?VZ@?X[?A"C?@vjK ?E9o?^%?8 SUPy? ?P?EM18c03`?Cs?Py?H??"6 ?C?:?A3-QsZ NN׀-@\`A ?I?Rt>貋 SO\pI<`?AT?܀Mʑ`E%?##?5M1}> H;SRr&@8.%E9>貋 ?&Z@Y2`_`A.%H QqKT8 PO.69P`?Q ?FR Nk=1qK^-^IU@S-٠_$Uas` HM ?Q5?` ?a?X. ?I@?M{@?RJ@?Dg`?M`?c( ?X ?F@?PH`?O`?Q]?W'b`?GNJZe7?`?T`?Q?=, ?R{ ??`Gb?4@?UA?F@(cG4?,f?Y?A7?B.`?*@J~ @?2`)`fP+J@YLf)@?$?0?%9?2t? ?O}> ?X?[ܞ?b?W`? @?Gr?Vu ?>CFT~@Gb?E?Ew:J? @?9)@?6a R`V Id]`PyEM1?Py܀GNNT~@M @LyO ?;*@?Zm?E9oSaRT@?;RP@?>AAI'#?fLWSP@L+QLɶ4!@?3s%M1X Uw:J?&Z@`C_>RT@9? *@0;?>-?K>@? f> @59WϠRhE@G[H ZGHON-F:J?S?bJ@?Py"`?##?B貀?73K|CK|?K܀?d?Z@?9-?6?WϠ?e ?`?@3`4@?2^d@?Wl?Vq ?Q,$?V`?3sO`?B貀?ce?^^?CF:=?:J?U?H@$)`?48 ?"6 3s?$!@>:J7- @?U B`26 5ý,f8cSU?U ?8c?H@?6R ?FZ@?a,$?]r`?@ @? F:JQ"C5M1?M?T?2Mʑ`RJ@UXW##?#sR\ Q{,?6?G4R# LD֥`2?D$?5AD_@vj?1TG`>A?B貀?E?)CN##O #?SF?F`?6a?`?hrT?R.`!I?A?&R PޠLɶ5ý?4֥`?Z)?\;?A"C7>?YF?e>`?_ ?U`?Vk ?OF@?;X`#s* ?Ix?Id]`2\ ?5A?`C?e ?_`?C?* ?QT?J~= @KA ?$?=, 0\`'r?D?B\ ?H@?U`?Br&@AIT)`b`cF I)@?SA?X@ @B`?P@?WS?;*@?1"C?I?Tg`?Y?R^d@?I?L+>:JQX. ZmM @*@2`;*@>AM @*CK|`ޠSF?$)` @2tE]K@c-٠` @Q 4@?J~3??@?@GbZ O@F R貀-?A:/7?R@@?UW?;H ?4!@?&:JO`S%9K 1T9'YS?##?CK|?K CK|?D֥`?FN ݣ @?2??`1$)`?^A?iu?] ?GN?T0?[ ) J ?E%ZT?0 @?C` ?Ly?a,$?Qs?C7?X ?JQuF`G;$`?}> I@- @?V;@?b1?KX`26 ?O`?[f@?1,?PR`?\f?X ?Pր?FĘ@?!CsA]?* ?E?IU@?4֥`5%?B.`?A ?H=UM1H?##?)@@!i@Z/c( f`YF?'vj9V3 WE@ @?#sFZ@]G?8 6`8c?9P`9P`?6R ?;*@?3?Q?T` ?-@yFĘ@Y t@Yd]`B貀P3``zR`WXǀ=,  @8 ?L"?FZ@>@;SXM?;X`?WK?Je7?vj?Dg`?0M \`?9'TH`a'4@Bl`?SF?YZ|`?D`0\`HLz?A?L?h)`C7*@1"C: ?f? ?`Cs8$!@!? ?FĘ@?L2IQ5N%?*?3s1qK?Q,$?a?3sN-?1"C?=ʑ`P`?M?[ҽ?KH f?0 @?S#?H!I?RhE@?b.`?D_@A ?G?S7?%9?#??@-I- @?N-[?YZ|`?U`?0\`N%P@I?I<`?GNZ@?7r?;X`.A f?A?U HwE\5SU]?I?H >-A? ?:@48 WNF@?F`?Et??}> ?@\`6`PրPZTV8 Q?:@??.6?B.`;y``, ], D8 Ts `UAT!@Uý4!@?AqK?H?@!i@7L+I@?-?9x-$!@05+@MT 7?9x?#s?8c?CB6 [o`P@?T` ?e2`?UPzR`W`I?T`?T@?"-?B# ?;H ##*@:J@ @NJ>ݣ @?E?HM ?MS`?L?h?(c= @=T @%M1HO2`?-T P;]J$ @?Ds ?Ts ?^#z?UA?9)@!D`B`B6 Q?0;?c@?Ye?%M1?EM1? [ ) Uý *@A6< f?,?0\`)`HM QqK$` ?P+J@?6`7N?Q?Q?&:J?* ?QT?6`? ?2^d@IP`J?M@C ?S|?4)`?3?H?Q?KH ݣ @7'b`&Z@?(z?D`?+*@EM1B.`@3`R.`UQ?T`Ot?$!@?)`R`Q B6 X&^R@@Z N``?}> ?P?PzR`*@V U-?U?b`?Y€"?8c6R CI> @?'vj?O@?P\`2l`Rl`?;H ?dە?ZQuQIV0i?7?TV8 ?H>5M1>A <: ?I?J3sC_>?'vj?QI?Va?S?59R貀UM16@GrRt>??`2\ 7N7'b`V@^C?B^d@?%M19P`EWNUw9HwERр>?Ot?D3#RJ@J)?>A?U?Xmd?H(<'vj?.-?N?9':JQ03`?XM ?bM`?FZ@X2Rl`?K*@?GP3`Qvj+*@J B# B貀YP`Z/$)`?A*@9'?I?Je7?Z)?W;$`?Ew?N?PZ \`G;$`AqK@!i@?1?L"`E?1qK? [Ho@AT?PZ?V&> @B@?)?4@?E9?6`T`[H C)P`?!?IP`?26 T}@^D?G;$`?D@?@\`?&R T_@UAH@\?hMAP+J@;܀?#EwT`-??N-[?CF+܀0:J?'vj?@H`?5A?"6 ?.A?03`?%M1?? @P? @Z@7?^?gXǀ?Z ;`NTߠ? f?!E:e7?Z@J [`L0\`UtZ vj?J ?$)`?!?H(<?L+?Q?QqK?/}> ?I?8z!? \`?Ew?W4?D$?Jm?EAB\ /.6?UCP?MM{@@H`?Jm?2^d@>I?)P`P @R= >貋 ;RP@Et?'r)P`@pq`?2?6`?&Z@?AT?@?COR6 SeV NA?4` ?4@= @:@>??}> ??U ?2^d@1"CUAT$= @6Z@ ?2)`W`b`K`?Lp> SiSTH`1I?U?;RP@T`X[X`^LSU]HKy`Hz4!@?z:e7WϠT_@?48 ?U?6P;+*@?P!i@RT@9x?EM1?Rl`?Rr&@?E%?A?Q,$?R`?(zGr$?E&Z@P?-?Yx?`#?[\1@?M?A6?M?Mʑ`?9?B\ ?LzPր9?8z?P3`?1qK?PzR`?%Af?3#?( ?C?S?1J)>?&R ?7?;RP@?P\`?Y?N-?7?H?Et ?E?@;B`EM1?-?9'?J?!\yZ~= @M 5t?SF??Ew3K|P`)>ݣ @?05+@? JxFZ@?;y`E9o?9)@?F`?+*@>?,HM, E`L"59)R`UE9o%AJ/a XwE?FZ@?4!@X@_e@XY*@?WE?P?#J U%R# WSYPH`H@F:JCFS7Z3@5+@?GNCscsS6?:=@;R# *@?P\`?]K@?b= ?Z?P? @?Lɶ?L?76a?:J?Pޠ?F@?7N?Q?M{@:J>*@> ?F`?U/?Q?Nk?SO?Kf@?.-?Bl`?L2:JD?;X`?T` ?>h8 A"CB貀? @?IxRhE@A?&Z@?A?*?E?U?[H ?UCP?Pր?QT?Q?FĘ@? :J?7N?8;?9@?H ?Mʑ`?MK@貋 YFWEEM1K ?9P`?`j?Q>hFaH Q R.`)`?Q?'r9?H?48 F?C6?W?J 5%%M1SAfB_@C_>9@?,fP`\+`kNk? \` @`f?:Dg`?1IBtJmG'b`=? ?1I?Jm?R|@?Z@Cs@SAZ=O.6Br&@B# -A_'@aJ Mg@\ӘCK|?1"CA ` ?N-[?Gb?S?`y?WK?4֥`2^d@?=ʑ`?'r( ?03`?B`?RM`?^^?GrOU N-JU9oFN ?8c?9x?4!@?HO?Ie?D$?Je7?G?I1?2\ ?Pޠ?Q??U !;H ܀?,'vj6R ?4֥`?C6?2^d@?5M1?GN?Q{,?S6?S?WS?UW?KRP@?@?FĘ@/.6Lp;`0;=E`BJ@?FZ@?Z ?NA?##,EýR`\"G`?Y@?TBv -?#s?"?.6?1I?G4?2`ENbkH Y t@?->?8 (z\WK0 @?6a? [y`ggZoEA?-?6Z@8 IxG @?3#>D*@>AQ7?@\`?-/F@7T@@`WRJ@>h4?A S?$` ?O`CsD_@?C#?=>:J` ?A?FR ?!IPP5+@>h?9x?VĘ@?Ix%9?>?A]A @?.%?D8 ?VĘ@?S|?(z##4!@2`?8?2`.%;y`XwE`AEýJN-NkQ"CD)`? @*=KRP@8c?G;$`?9)@FZ@0\`?C?9P`?$` !)P`?3#P@c߫IP`?"6 X V&?Z@?0\`?D@?R.`?QI?P?STO@FĘ@?)@?4֥`? ?Et?F@?'vj?Jx?SF? Cs??;X`?$` +*@0\`?N-[?aI?PzR`A"C?;*@?^׀?S)@?vj?'vj?2?@?K`?FN CsV`E#s>*@?Qgj?T?+y`?%9?>A?6Z@?;*@4@T8 LfFK``?@ @ @F48 ?Bt?CO$` F U͞OA?I'?05+@_`VD+?0\`?Z@?A ?ce?h{?Z ?+y`NaDZ@?5A?8z?AI?MT *R`!?-D`Mg@H?- @?V:J a^Hz7'b`}> 8;NkQJ@E%@ @5ACOO.6 H 4@?!*@ @$IxS-٠XS?3?S#?6R 7r? ?H ?P`?Hc?3?Nk?`zR`?S2l`?9@?Ye?EM1OARtBl`<B.`? *@?V ?W 8zQ?A?"6 FĘ@?P`?Gvj?+y`?@?G'b`?(z?48 SsI?@H`?G,>E%C#E`Ppq`I?S?J=* R6 R`?&Z@"6 aSYF`???=T ?$` ?Vu ?`x?N|c?,f?5M1XwE^%4)`?Kf@?9)@5%?5M1?O`` Kf@48 =FZ@1"C?F@:J?Z ?TV8 G`M@C ? ?;y`?(c@ @P+J@G1"C9)@CK|?9?:/EwP!i@0\`6a@\`??`?W`?\] ?EI@ @MT ?%M1?P?HM ?WK?` ?VZ@?Si?SK|?A?9?.6I?@H`?^?Z!?G'b`?;܀QbZ/XwEJ/$!@-8 8 ?.A?Jm?Gvj?,?*@?=T ?:e7?4!@?Nh?R?$` L+LS*0\`>1I? *@?R.`?S?I?)?U ?;H S6K`6:J=, ?!?&:J<?*?@E%N-[?0;?M, ?fB^d@?&Z@?4` G>:J?Z?U?@?f6@I/}> V@F:J?N|c?A"C7vj?,f,(c?P`P7N?T_@?Y<`3Z F`?$)`E%PZATD8 ''b`?AA6T0?>h?W'b`?9' ?59?AASYʠK>@?%M1?4@ @?C?TV8 ?8;I?H?8JU%M?K>@?cU?V 8 2`?"`?:/?- @?CO?Ot?M, ?W?[RP@?E6@NhN׀?A?br&@?a??J/???Py?Q?Mʑ`?G, ,?;܀?##EB`9'EEB`J~@5+@?H?U?7'b`5A? ?5A?'vj?;H ?>?}> 'vjEAJ?2^d@?TLW ??U ?.66`:e7A>6@?5A?EM10I4@?8 ?=?1T?Ky`?N?- @?D)`?Rr&@?6:J?3?G??.6?L?N%2\ 6a?6a##:=?* ?;RP@?7N?05+@%M1?3?C?X ?PyWffT_@IJe7S'B\ ( ?'r?5AJ U"?*?R@@?QO 4)`5tU^LQ?`?#4` ? @?MK@?G'b`?J ?W?E`AFD_@>貋 ?PzR`?3sMS`@ @?)@05+@P;S|L2HzP`?Ye?c#?U`?3?)` ?-T ?N?J)?##?Hz?Z3?T@?U`?]?R@@?K?\ɶ?SA2`;`@H`Q,$I'AT`R?F&?U"1D@?P3`?Qgj5A6`?>h?@!i@2\ U9XwE8?A ?A?AT?G?={@?Z@1 ?Bl`??#s?"YFabz@0 @?R`?4` Je7Fu vj?%M13sJ~I?Y?X@ UU/;܀?:JJmX2JQu2tLfQI?Ix?9P`?:?O@?=P`?,f3S_>OtP@S?-?Y t@?4֥`XOYn>`R= U~CF?U9?` ?U?Qgj?W4?Lz):=5M1`?Ut?[w`>貋 9)@?FR ?8;?3#?Yx?T`I?I?5Avj''b`@YP`\Ә)?L*@"`?Ye?X !9@?:@?Q?Vq ?B# ;܀##?@;?B貀?A"C?K*@?Q]?2tTi \p?.6?Kܞ?J ?&R ?)`?8 ?* 9)@;RP@ \`>-D8 ;RP@SK|T0?8 ?0;?7vjDs T. ?* ?J?*=?(z?-?6a?Kܞ?={@?E9?[y`?5Ac^h=Q?Py?[?A9?Bl`?LS*EwG;$`?;`8;Vk N-[QOU ?A?B \`?A?3C?<?R?f?I@WbQ$)`(cS|O@-?A?Ky`?Bl`I @?`S7eA]4`?&Z@?;y`EIP`?Iݣ @C#%A? 76`?:J?3?8 <N?8;?U9o?3sN|cV@RJ@&Z@?B貀?1Sc_>Vq ?0??`05+@H S-٠&:J? @Lp7vj?CF>貋 1I?M`?T8 `;܀?Lz?U9?FN ?W?d[(?[?U?[f@?;H C_>?@pq`?Vy@?Q?C7?)P`1K`?.6?O}> ?HcQ6S|?`?>%?+܀?2\ ?Q{,?Sn >?HM ?F "6 ?9P`?OA? BJ@?E?` ??F@a aIx?B`?YF?-Z3!?M U9oZx?AG4\4)`IM{@0\`?;`?@;?IP`?$!@;*@?: ?PzR`?K ?F`?7vj貋 2^d@=?vj?6`?@;?#?P?Qgj Br&@-OF@e`c2 @\`?ITg`dc< _.6^Ts JxR`?`?JQu?IxFas[H ?)`9)@\Q>OU :J?V`?U`.%]S`X?##)`YP`]@C UC?3*WKPzR`48 Ie7?V?^?E9o!I?HM ?V@?Ds ?A?X ?Y'?\p?c`?__ ?T0?\p?`?Z3?R\ ?B^d@1IP? @!I?`pq`?`zR`1qKR{ %A?$)`8 =T ?7'b`?7'b`LyQI@5+@P5+@H ?J ?RJ@"`J/?*=?S'?9Pր>?8c @?F@vj`@@ @?JQuWr`C3K|N-T`?MK@?RрFZ@L?/}> ?F&?&R HJ > @?Q?b\ ?cF ?ar ?h?d@P`A?2\ ?%AD!@=?BJ@?M @?:?0;?Et?AQUAK`8D@]" b k\Y6@R`Je7SFId]`?7N?)`], hrTZ=?* S#d_@:@?Nh?)`?Gvj?^?Uý? \`SZ3@H`=T [`Z NB??9@2tTO@FĘ@RtKRP@?A?[>@?UCP9xM?4֥`?D)`?0\`?L?h?U?\?U?H ?T֥`?Y?N-?@?7r*G;$`*@?Q?R.`?3# @`?3?J?/.6R`S|PZ >?Yd]`?SsA4)`? f?0\`48 -?U%?U%? @?I?O}> -?H(<?Z%AA?G`&R F ?RJ@?Y€?-3K|?F:J?O@)U"P܀?R`?e>`?ac?Y?o`?qs?Br&@LS*Gb=D`2:J7rGbBt$!@I? @?z@5+@!?N׀?6`E%@6Z@!9RJ@\!ŠRhE@IS|X&9?Id]`K`ds OU ?7'b`?3?Rt?PzR`D$KX`={@@pq`>)`Pf`Je7?1I?>h?= @?-T ?-T KVR Ti ?P`?Q{,AT_}> 2?N!?F@?>%?Q?O`*@O`?$!@?V@?BJ@FZ@Q6R`J@#?I>ݣ @?CK|?B^d@<F@)? ?3>QS^a1@__ YZ|`D` E;X`?P!i@?Eý?`A="`?:JQs^SU]2`?f)@48 ?Rl`f@bT@R貀@5+@?2`G'b`cn@W?.%?F&?Q?R^d@?)59}> ?6:J?MT ?Q?M ?D8 ?(z)ER/}> ?S?>AJ?03`?Rr&@ B^d@?-?@H`?Hz?0Fu ?4!@?`?P @QT], [ ) L?h?1qK?03` @?B`? \`SeR`HEM1?C?LS*LfEý?Ppq`?L?h?D!@?L;!:?GN?H?1I?;y`?6Z@?0>:JFR =T ?Ds ?J)? PzR`Yʠ<?RJ@?5ý[Ho@Z_>?AT?8 ?UM1?a:@?S# @/F@CR@@A @@H`,?D?"@;?Cs?vj5A?5%?A6)@NUjԠWS[y`U"HcQQb.-D`Tg`QQqKA?'vj@\`I<`?-?9>:JF`T`O}> V0ibZG@3`B貀O.6Z ^B貀? ?F&?6?*?Q"C?S)P`?A?)OSs?0; %9?-?C6?05+@? *@%M19A"CSRJ@7'b`9'? ?L?96@?!6aQ?T~@SK|EQI\8 ?Qs> @X[X2A]??U ?B6 >?={@?Z?S'J~U`?1"C?EtFaUXLp>-8+y`?8;?O@?T0?Zm?\z?M@C , ?M, ?CMg@;H ?VN ?K>@@ ?-9P`? @?9'-?܀?8 -C6OJx?F&?X?Bl`?>A?OA>,?Ppq`?D@B貀3?? ?CF?@?)`?G?[?a ?^#z?* UjԠ?U ?L?-R`QT,?Q??Yn>`?BJ@?0\`?FR 4@MS`?+y`?={@ݣ @?9?M`?\Q?a?M`?@?Se?;RP@?8;?[w`?HM 6I<`A?IATV@Q"C?"?T@@?V?Mg@?L2?Lz?D@ Q,$3#?R, ?O ?I@?I9)@T8 TH`YFUWIFĘ@@T֥`bwLS*?Id]`#sW`SsA?,?P\`?O?Dg`?U?UCP@\`Rt?!?(zKH D$?z?5t!RT@O@? \`?7?B6 ?T`?M 2t9)@?Dg`?H EQ?1?5%A]??A6+y`6R 4)`Lɶ6Z@?Gvj?3<$)`?&Z@??`?Ix?1"C?9?G;$`?Q9'??U ?%M1?8;?Ù?^J?`M?XE?KH ?QI?V@?V`?], ?Y?7'b`?0;?SU]?SA?Eý?zJ~D` ?*0\`6R ?@?-T @?&Z@G4H ?@y?8 ?H;?_'@?CJ~&:J6?#?\p?L29)@? #?vj=O.6?4)`?_e@?U` @MK@W\II`zR`^-[B# 2V:JW,V ]@C N%:J@HFaRl`D?R.`?X(<?1I?={@?U ?0A ?,A]?9)@?Gr?IP`?M*=@?N%?S-٠?)?.-?E?:=?71ILS*貋 ?B\ ?4` ?L"?P D` HOU9o={@?T8 ?HM >?&R ?C_>;y`MK@L"B\ ?Eý?HG.-?WN?RhE@?I?a?h@?_`?C?-?=ʑ`?!IHc?`?Ze7?T @.%?A ?R^d@?26 ZGZ3K|G;$`U:=?.A??? X(<T`?8?RJ@?>h?A?9'D@NTߠ?F@?6R A ? ??.6?@D8 E?Bl`?8Q5E?M`???-?8z62l`?Jm?#sR# #?CK|EtQ]={@'vj?Lp?V ?'r?;*@?W?fB^d@?Vq ?]S`*@PE9)P`E`[H M?U?Z[VZ@Ly>?Q ?C_>LF:J??1IWQb4` ?6R ?8RWE9IU@^N-[?!I?WK?c߫?A"CQ )P`A'r1], ^|cH@貋 ?F:J?P?=, 8 MT Xc`#X& *@?OF@?S6?K܀%9]g@c`Hz?H:Gb?T֥`?PX[`P??KRP@??A?R`?Id]`?'vj?+*@?O@Qgj`5+@?}> K ` Nh?1qK$)`Br&@D@3?J?Uw?C?P`?,?9?;X`?1?1T?(cC6P@={@ ?4` ?GN@H`YLB.`R@@UPf`?M{@?h|5?\Bl`R6 R.`?H@,`5+@bOY t@Pf`- @,Nh+y`?PR`?)`[f@Vu ?;H ?R{ ?3#48 )@EASO?)?Yx?6`>?^A?YB貀Ts R= E9?##? > ?Fu ?9P`5ý:6a#)`??Hz?,fGb?%A?D֥`A Fu ?)`?!I>-RhE@PR`I?9?*@?E?]" ?SA8 @3`>?9x?P\`?C=, ?vj?Sn?Q{,?7'b`?:/?Je7?O@?K`?2`? ?VW?^?E9?@?Mʑ`;X`Q6.-##?<?S|* T}@Pb\ c#?@H`?X+y`1I?P@?I<``(z?(z?=, -UM1M??`??F@FĘ@Q6:J?J@?6"?$)`=[ U f?E?.%O`=?]g@?`&Y)@`Cd??@%9Wl\W4TD!@T@c6AI?`C?R`N-G?>h?4GM{@zLɶ-?P?2^d@?#?S?B\ F&$?#s>?8 ?}> 05+@ \`@H`Ew59"`?=ʑ`?@y48 )( Kf@?2t?Y6@?48 Bt?7r?Jm?>?9@26 XU"??Gvj?UCP?`?J)O@5M1?R`?Z ?\?M8 :e7?Ds ?R`??`6@ݣ @?R, ?Y?L2?2?Rl`?]`?I?* ?1IK*@Q,$? > @>貋 ?PH`?HM ?3?6@J~N?Q?PPR`2?`C?]4`*@UWR;܀Hz`K\?2^d@?E9Dg`EA?Gr?PC#[`JQu @GLɶ?4?]" ?`?9SF?*?U/Z@`\`B# ?WSYSK|Ts Pf`X bрCs?\f?Ut? ?0 @?C6?!A6OALfN%X;PzR`9P`CZ@L+RM`?@?Rr&@??`?7&R J ?`?#$?D8 ?D@Cs>-?!8c?+*@?W`?G @?E?RM`?S?\Q?U/B\ K>@?Eý?P@?KRP@?Wb?<P?$)`?^#z?Z ?Q?O`?D` ,?HM ?T` ? fE?%9?J?zPzR`D$? ?,f?C_>?7rQ`+J@YWXǀS|BJ@LS*SFaK>@F ?FZ@?K܀"6 8 MX;8?OU ?ECLS*?1I?E`?)`?B^d@?U/?H;?9x?>->I&:J?*@? @?@?X@?Uz?%A?[܀?S-٠?-T ?Qs?Kf@<??`?Z[V?C''b`?O@?cw@?]]@?"`?@?\y?O`8 ;H #6@S6T)`C_>F`D` ?FZ@?QS?B`?L;?LS*?48 > @:@?$)`?\S*?X ?> @V@Xz?@ @?a,$?[H *=[ PH`?Q5?\?MT ?FZ@??@R@@`MA? ??zA S?+y`?Z?BJ@ST. 8 48 ?P?V@?J?9x2l`KEK܀UM1Gb?8;?;܀&Z@?A ?], ?N-[??U~?T` 6R ?P`?P?''b`5%?O`?e?b?@?@\`?]{@?Xc?6:J)`?I?A"C?A貋 )@8 ?Q?SK|`= @vj?$)`H;D` ?3&R IP`?I@?`pq`?EýI"`?J?8zG`X(<Ti ?7?YZ|`?Rr&@?K`?LyD$aX@C?Z ?EM1Q??)`?GJ@UtPH`XzTBv T$c7``ր:J?Q??HOE%?Mg@?Mʑ` @?H ?VD+"6 SiD_@- ?.%?`,?B^d@?QqK?6:J+܀?Q5?`x?CCs(c7rVCs?MT ?7r@3`( ;*@KRP@B.`O.6X. Q7? *@?1?C?K ?(z?$!@?U`?CsTBv A6?IP`?@;?@;?Q6?R`?FN ?!?Ie?^?VN ?#4!@ \`?H ?T8 ?Ew?8c??.6?>%?C?4)`1"C7r7N1T/}> Je7OAD@R`O`?Ù?g4?^?3K|I3QPzR`H T$OA?$!@?0;?@3`?&:JR`??]6b ?Z 6R HHSK|!??=ʑ`??H(<GbSi?;H ?]g@?Y6@C?IP`?J)?-?$` ?vj>E`RJ@Z Fa?F@?J~ @G,C#?貋 ?2^d@?)`?7N?f @?C#?Pޠ?KH ?貋 EwR6 A6?#Bl`L+??P;M`? @3J=?>?Rр0\`R`KRP@%9?Si?Ù?@?X&?< ?C?O}> ?NTߠ#s?Q]?Dg`!B.`C?8 ?UjԠ?`X =ʑ`?Ly?$J MT D!@?貋 ?U?@7r?@pq`?]?]T >貋 Kf@?K*@?PR`Q6S_>?##?D_@?I?BJ@?4)`?Hz?2tF@>貋 ?T}@?ECsA?6?Kf@?L+?*AqK? ?M, ?%A?D֥`?Hc?Nk?]`?ab?UX"6 Pޠ1qK?@!i@>貋 <=T 9:J? ?1?K`?CNWϠ?2`PH`G,?:@@X(<Gr?#?N?Q?܀P`?9)@?3#?E?A F@Lɶ: ?=6H;*@?(z?UjԠ?a?Qb9x?03`?=T TBv ]QJ >?Pր2\ ^R`)@D@HO?0\`ADB/}> ?7vj?Y?[ܞ`S_>D)`+*@6B\ G;$`LyVk WKD_@? ?D)`?Ot @TBv SeL"8 @3`VR H;?=T 1qKG?CK|?\?X@?)P`9?J?C[b\O ?0;?N|c?,NkD֥` @K`NTߠ)P`- @?)P`?Y?cڻ`?^L R貀?: ?TBv ?F@ \`HD)`?B6 ?OF@?G`?A#H?( ?HD`J ?:=8;YP;KX`C#?Id]`?J :Je7.-?J)?F@K Rt@O@/}> E9o[f@W <?J ?XwE? YY€C?:?H?2^d@2tMS`T` Je7-?C?VĘ@?G:@@;* ?z:=[\1@U9o>;RP@OA*@?D!@?G?$AI?#sQ\?hNh?+܀?L?h?"6 LDLW D)`SU?2\ ?``?N05+@?N?T֥`?*?Jx?X ?>?.-?Gr?I03`$)`HM Cs?>A?Ss?S69 @?1T:"`?F$!@?S?Kܞ F&?P`?G,?Lf?/.6> @?48 LS*VTg`8 >AZmRJ@?;`?LS*?F:J*@UXIe?A]?8c?4֥`?* __ i7T~@?A9@S-٠W1C`Dg`+܀V`\pEEL? @?3DLW O@: ?C?SO?N|c?;RP@?1"C?B`?A"CA H ?A"C?A6GrKy`?4` 8X(<FR ?Py?B貀IU@Hc>?Ix?I*=;`?8R`A?J)?VW?K*@?<?E`?+y`HwEAO@R|@?9@?D$6:J??3AT?@5+@?a]?\?T@@?R貀? @?= @SOg `#?.6?+܀4@XwEP!i@ @X;a)@?7rJ)=T ?H?NA?<? ?4?C?;X`?)@?A6?S|?GvjT$[AI?:JZxZ?NA?:e7;y`?3?[\1@?QgjC_>M`?`?Ti ?XY?5A*?@H`?!TLW PH`?Ew?Uý?PZ?R\ ?UCP?P@?: \`CsHwEf?L"?Hz?}> ?05+@+*@KRP@?B\ ?\f?K*@?=ʑ`?M @?H@?G,?6Z@A6CFJx?GN?6@[ ] @?#s?[`?[H ?Hz?( ?1"C? 6Z@>-`?Je7?S?;*@?vj?Q??R{ @pq`M`?03`?CF?9P`?G?IU@?@?9)@* >%?A ?YZ|`?Z N?R?Gvj?;*@ @>貋 ?J=?- @XcXOB貀;y`I>NhR6 h+y`=?C#?Pf`*@6:J'rZQu[ܞ?EM1?Wr?;RP@9)@[`dѴU~)>AJ Dg`?6?UA?RJ@?@\`"6 V`Z_ @?D` *@?`` ?6Z@@?>?XM ?P?AT?J)?: 6a##?G,?S#?: S߫_tFĘ@?Q ?^k?T}@)P`Q9?G4?Ds !I?`?F@?A?4֥`?Q"C?V:J?@\`?3?I@? A܀ @3#7NNLz?@\`?Q"C?A?D?Ew`9)@?>?OA@H``S5%EA7?}> >%F?''b`?E%;H ]j@Q"C?2\ GbUM1` <VD+0 @?9',f9?)`2`/}> ?-?D)`?P@?@7vjT8 ZQuMT &R ?#??}> ?5ýI?=?05+@OS?9)@2tE?P`?9P`MK@X SA[Ho@TLW ?H@?Q6$!@@!i@JT` FR )9'BE @?Nh?O@ @@?#?FĘ@?0;ENR\ SFI@O`WXǀ?)?a?Z?Gb?Q]?CO''b`?CF?T֥`?B6 @C[ \?h7r?MS`?T֥`?F:J?)`?J/?_s] ?V@?##?>h?@?1qK>I:=>h?C?T!@)`Vk PC_>9 @8 D+y`CO`?3?TLW ?.ADg`?#?C6 L2XcX ? @?>%2t?7?M ? 'r?G?Z?`ua?\+?FaE9oQf?D֥`?;܀?A?N?J~?4@!i@Va]j@??U ?'rJPH Ts YF`RS6G4?=?5%JO.66R ?"`OAV3 JQuAEýAIH;YF[ܞ- @?Pր?ÙT8 Ts V;@= @2l`T` \`?`?[RP@?A ?Mʑ`?EM1!?H?T}@@H`?"`:@SsI? @?N?Z/?Y?Z~?Z3?Lɶ?;`?AI?-$)`)J~`a'4@3?PH`?Z@Pf`G48;}> ?CF?I?(c=ʑ`Q{,F ?U?e?W)@2t?##*@?G?={@EQ IU@?2`?\?`?Qgj?C?Q,$?]K@?_e@?HD$RtWlR\ /}> @H`P? @?RJ@?: ?Ix?U9o?SF?N|c?'vjEt3s?L?h?M#"?P?WN?>-HOUtSF?I@?S_>>OU NQZ NYeM @?!I?M ?BJ@=ʑ`R|@Ie? @1"C\;^׀@"`J TQ,$QIX S7 \`/F@P@K`ICO?H?Q @HO?IU@?MK@?+*@?C?B.`?Ew?SK|7vjS#??}> *@(c? *@?<?I'?HwE?B6 ?3s?&R ?H?SA??`"` @3K|U~\"EA?CK|?H?F&?R\ ?O ?8z?C?PH`?1H;EA?AqK?`ua?d` ?V0i)`5ý> ?0;?D)`?>%BtP`Ppq`YP3`?N?PI)@R?$?Si?UCP?@ @COEA?$` ?@>PyX25M1?Mg@?6Z@>% \`?܀!I&:J@;N1T?H?Evj?Lp?V ?Nk?(c0 @,f??`?T@?F1TEKy`T`Rt? \`?T@?P3`?0;'vjJ=Nk'r7'b`UN- @- @Gvj??B.`?U~??O ?Q"C?Py?Ss?P3`?@;?&Z@0\`=, ?*?Lp?R= ?Y?[9`?NTߠ?E?P!i@?03`L4` ?R貀?Yʠ?N?-.%?)`$!@.A?Bt?.-R# ?F@?=T P] @- @?+*@QÙ8 ?&Z@?@pq`?=ʑ`#s @?M ?R?;y`EM1WKH;?B\ :JYxWXǀFR 8;>@;RP@? \`??F@?D_@?;H ?2t?<?AI?0\`#? ?C?G'b`?AD!@B!I?5A?Rr&@?TBv @J 5t,@5%3K|vj?F@?=AT7?C?Z N?b?V3 ?= @?R6 ?W4?2^d@J V:JY6@L+:J'vjH>-?;X`?Hc?BJ@?BJ@?@?C?P? @?-T UR貀!I8c?1T? PRT@:/?7r?O.6?: E9o?'r?_t?Zm?@?F@?@5+@8;>?C(z>?;܀?Ew?D`?Rр?FN 6@?.%?Vy@?Sn?6:J)`?;y`?HcG^׀C_>59YZ|` 4!@MK@=?Cs?N|c?G;$`?AT?AT?BJ@-X&O}> ?E% \``H`Z/*=?3s?>??G- @aTs ?UjԠ?T`?4֥`?Q5?Q$?8;?SO1"CYL;2`:J?BJ@?=, ` ?A?S?Qs?P@?N%?R= ?MU9oh@Xl DW A6?@O]q@G'b`? f?4?'vjQac\+$)`?QT?P5+@?1I?>h?Pf``W8c?X;?Br&@Ppq`!?Q?J=?-?z?$!@5ý[agjGN?@H`?"EACK|!C#S-٠?``?Oi| ?G'b`?Lz?)$` ?&Z@6aSFH;?'r? @5t9?/}> H\II+*@?[4@?Jx< @7vjQG>hG`7vj? @`: Lz59?UCP?`j?V3 ?6`;H 2`?:/?:=?A?܀1qKEY<`R@@?4!@?'rAIA?!I?:e7?V?P?2?)R`C?Rr&@?HwE?*?Z3?\p? ?4)`?]j@?RhE@7ND֥`GbD8 +y`9'?'r?2l`?7N?T)`?W?K`?=K`jSF?U EM1?5%?K`<Pf`7vj:J?<W `\pU"@\`?3Cs?@!i@?S߫4@U/?;X`?^?M, ?&:J?Q{,?TV8 ?/F@3K|)? f!T}@_@Mʑ`??`?@26  @?A (zUX?Z@F:J?-IEýIU@QS @?G,8;YI?D@?:JT$D_@?.%EP8S#Cs貋 5t>A8-4@?F&?a?b?S?$` F&I?)@?Fa?vjATL+O.6SsX2BJ@?G`?6a @?Lɶ?O.6?7vj?CO?9)@?U "`?FĘ@?Mg@?Va?Y€?9P`vj?WS?\f`8;?Sn?Y'?@:e7J/.-?Bt?6? @?)P`3s1?Q{,?U?ݣ @B`G4?*@?D)`?N?N-[D8 Y€? ?J=N|cX2?`?F ?&Z@?@pq`?N׀>:JI)@6:J??%A?4` ?IG4KRP@,* EAݣ @?P3`?3#P5+@?Fu COP&R L+T@@U/H ? 7N]4`aQ]>`5ý''b`Hz]{@QI?J ?Oi| ? @?5A?Lz?:@1"CFu Lz8 ?4?A?Hz?J ?@y?`?}> A ?B# ?X?Py>=, ?H?G`> @?@pq`?Z ?V@##WNTLW #?N-[?T!@?E9o``KPA T. RhE@?0 @?GbHz_s] L?N%?QS?.A??F@?R# ?%>:J4)`?7r?A6R F@@y?6Z@?L"? @DLW 9@ ?%A?M, ?A6PzR`[ U~FĘ@?05+@>*@U>?V`?>-MS`? ?C_>CFK 5M16`?H ?U ?VĘ@?SU]?H>貋 Dg`9P`?6a?8z}> C_>OU BJ@?܀Eý_U WS?6:J@?,f?Py?P@?:@3@;B.`QKy`?1? @V;@S?Bl`?J@O``xS;*@BtI?"`?P+J@ @TV8 L"vj?Bl`?G4I?}> ?VN ?M`AGH@Rl`G;$`*6aEM1H@G4U/X 8z?={@?B\ ?Wl?[Ho@?6@8 4?@\`?03`B貀?6Z@?],@?W ? @A > ?S?Y?Ts ?Lf?*? *@?O.6?W`?AqK5%vj?)`B^d@EA2HM PzR`2^d@? @?1I?QI?P?8z?9'? @U`KYe f?X@?NkUW[9`Dg`S`f`S|IxTE9?>?G'b`?6:J?;`?Z=?V ?6Z@vj??1??`?M?W1C`?O}> -(c?#R6 `WPf`6H PzR`-?:e7?0?=?@?$? \`?9'?:?&Z@f;RP@0 @?9IW'b`Zg LɶHcPրE?D$?U`#V:JKX`>AHwEMg@K*@?A]?_`?Lɶ$?M, ?Q#9P`P`%A( 8;FR @\`?.6SAE9o?V?Z ?G`?R`?J~L+@?F?:e7?>?J)?2?;H ?Pޠ?F:J8c( ܀4@?6a?X?P=T D?#>IFN D8 B貀PH`> @?Z)?L2EEt8z?Q?Yn>`?D)`1E`QSY)@XY@ @?J?S?D_@?26 ?P`Mʑ`_ ]]@WXwEM?05+@?E9o?`]S߫?vj>?1?WXǀ?\5?Q{,?M@C ?[f@?V0i? *@?$)`?B:J?3?V`0\`0\`?)P`?N׀>:JT` @pq`?B^d@?"? ?SA?J/J=I@?.-?* 貋 %9D)`0?B??? f?-?Qb?W,?2`Gr>-@H I@N-[#?Fa@3`FR ?P`?U9o?Ie?Pޠ?C#!I @:/Pf`D$4)`M6:J?V`?R}> ?2t>U9#?V ?9@?z?WK?[Ho@?O}> ?;*@"`?4!@?F @U`F@?W ?WSMʑ`aP`?"}> Fu SX&I?b= ?^Tߠ @C>;RP@?2`?QI??F@K Py6<Rl`[`] Ew?RhE@?_t?Z_?D@K`T$1T?}> ;RP@C9Mg@Z)RhE@6`B^d@F@?'vj?W?_`?PH`>貋 ?1"C?(c1T?6a?EA?Br&@?`x?h?(z?,f?P@?[?5tW4G?C#>*@+܀?M, ?1[>@V@(c4` >:J?KH ?Fa?K`?V3 ?P?4)` @???`?$` +*@??3#?N-[?Q6;*@QIIP`YZ|`ZGHOC?=?Z N?1TN?@Lf]W `KX`P+J@D_@?&:J*=A?G?P @2\ ?0;?Sn?.%? @?Y)@?`?V&?D$>I$)`?;H ?T@@?IO`Q5?OA?YB貀cV`Z}> -G;$`QXl P`??@?D)`=Dg`vj-05+@?8 ?:/L"Q{,??5%-T Q` VN ?4` ?9 \`A]4`^h?-?MT ?$E`C#?'vj?P@?F -T @\`E9oEw$0 ?U`?\2?I= @Z@?S?Q 35%??U ?/}> ??@3`9']{@Yn>`T_@VD+? ?TLW ?A?>-?R`?O`?6@@Ky`)@:J7'b` \`?1?U9o?Zm2`VZ@M @OtOF@PR# ?D@?X@FN \fGQT`3`^AV;@O.6 9@Q{,N-[CB# :J?C_>?- @D`)`?B貀B# T$>A @?=?HO>? ?1YZ|`f#d@iP`fi5%?P3`> MT Eý26 I?M?Xmd?2tQ{,QS;X`?4@?H ?A?#sf26 AIMS`7vj?AqK ?"6 G'b`KX`?N-?^?9xO@K26 ?1??.%HM K_i| a`:J?F@Bl`3K|?Nk?V;@?Uw?1"C4?Eý?D$?IU@IP`)@?C6 JxD$:/?&:J?.% f?Q?PޠUY7HOVq Z[V]Mg@?0?<?A?IP`?Mg@?M?/F@CM{@I= @`?!?8c?J?T@?RM`?Gb?M`?V0i?Q?;`?2`?N-[?W?J 2`NSE9?6a?B`?: Br&@?f?Ss?Ze7?Fa@?z?O`(cS'M@C E?)?R# ?CK|?A?AS` @SK|W,YFFN A]I4@?-`?>!?VĘ@?VN 5tGL;P;܀?:vjK N|c? ??`)`?:e7?)T}@P;.A4` ?)`?.6[H D֥`?LS*?Kܞ?N׀?N?+܀?I?(z"6 >hFZ@L+9?0;?*@1?$` ? @?B貀?Y?b(?`?UjԠ?T`?aD@?_$U?E%?9? \`-?vj?Lf?@yCK|> ?\+?a?Q ? f?C?R`!IMK@=DLW 9)@?.A1"C3?2^d@?,?IP`?U?={@f0\`Mʑ`E?8 ?|?U?S?Px?RF0_`^K(M̠?!?4m\_`h?M̠?$T_@RH%L. T2@Fl1CF5@@ 89DmI'Q7UUjW@C?A@?X!г?J?51/?C?0;}?H0U@?W[?H'[RmG[?M ?RH?7[?@[2@?GhϠZ```P=L `i\է`Mi CY?5K?5SYP 8 ;Wuc|DQ @6B@*jk?!?3o?+(?"m?3 ;2mI=.?3?D @?5X?<{?Rn?Q @V`AX`-.?[?Tŋ?`v@?BUAni@?G u?Y ?A@@ @D=Un?-a?&WU1?Uvw?ZL:ɠD_@@G?LU ?b ?dE?P 8:jk?P3@?U'Հ?L$ -aUqTO>?TYl@?Pd '?/-?J! /-I ?G"UME@@| ?F4m+VQ?CFX@\s\F|@è9x>|?M?{\$ `RB@HkN?'?QP?%K6l1?D@?G?4m?HA?GX?3?EER@?OT?L{??~9'DE>|?#Y?G?3Y(UȀTGO' cU15KHH ? |?:ɠR@Qb$eZV g:Z/r Ϡ?@|??~m???[/?P+G uKX ?%1?6?70?VX@?R@?3o?4?Y`?[L}`?GX8T@Nh?-.?jk?-:?E?aU֠?Yf?3Y?Jɠ?\?B@U-W[KX El@P_-:X~@?HC?V'd$5??F$?VP?Q ?2F?3Y?B2@?J/r ?O-:?9֠*ɠ?$?R2@?[?P@>Ө?AZ?J~ N[ YY? G?L٠?KAG@N- Je :TŋaڈS9~OϠA@?Jɠ? +Z Z^Mi TO@ ?=|? _```M̠@ @?/?Gb@EA?@ @?HW@Ө?' u?M|?HH B7DrCY*jk?9/?GX?TI֠Oh4 @n?* ??{ܠ?*jk?K ?WaA`W.?F|@DCϠK EX?,B7@T@;VQ?M|?Wk@?0nS?`?VHJ?H?ZV ?Qx=?HC?W6?Wh?9/?6?P?NT ?BNޘH0U@?0G(AUI~?H0U@?Q @?# ;??>h`%"S2?/T?Ϡ.G"m3>=.0?S?>6l1'[?X?3 ;?jk?$?N ?Rn??{ܠm?E?:C&CF5@?B?N LU YY>蒟?N|N B7[s`a TMA S(@O=|IW&R?1Z?;/]7jɠb}``BbkRmF @[ Y&`: +?B7?JC?7X?IW4?O@ ;P 80n:jkV18@Xu#Sm@F18@?H͙ ?Z?: P* O{ܠ+?F|@?Q\@?I ?QG@?NA QP^h?0?UX?Fl1LU T_@JϠ)'|?:ɠ?6DSm@b HA?P+?8H0U@3.?Pe?\L ?Q @?3?L ?WNC?G[?|?G?<*?PQ^?D@@@7X?Bm?(I. H?&l1?B2@4mK 6K Z '?Y֠?E@-|?)/? G4EK O~# ;3o?>|?Gh? GR<ҀRn4m@nH?2m?B2@FUER@H~@Ϡ@|b`b| DYl@E>S@??DE6E@4E?<٠?A@` 8pfU1YfLU +P* Rw<٠5?&l1?TO?Qni@?: ?P 8?PQIW4\V`RmW@`@NA ?!г?2H?L ?P-.G u?13o?BH?@%@-aB@K\$ ]aB @?)~?$#YPdW6KX #?3o? 0 8<F+@[`%` @D?)/0 81b?4e?DYl@?=.1bEX?* ?Q@?Gh|%1?P?dYl@?``?8C?%?N?JV ?2?+???8C@%@IW4гA@U@?$?]A ?GhPdRnG@B?-6BB@?R?Qx=?LU ?MUn/ϠN ?&?AгC!KK ?%K?%K@%@?DE?jkG@/-?+K2FKB ?TZ9F`[v?>AT?9B?>h?7 uO~=Un?BU?P 8?LB7Wl^|N ?G?0|?I?L:CO EC ;? G?R<Ҁ?El@$e?4?'\U _{ܠ13o7 Ul@*ɠ?R<Ҁ?N[ ?8kN?SP <٠?5K/8?TSwZ[iZ%R2@@DmQ):ɠ?@ 8?1г( '?9?Nޘ?T;?P%@?J^?9֠C ;N (A?5>?-.?3?E1?DmTPxNޘB7?<٠?@G>蒟B@?;?cK`?asS`?2F/T?9'?De?>AT?6?7 3oO~F@?:C+Uq'X?[X ?YL?* HH G0蒟?A @?JV +6?4EOTX?9~?O{ܠ?@|?L. 2m^s`T@6?E?9~P+cK`Qڈ?9֠?G[?SF5@?L{3.HH I'HH ? G?D@@3@T=|C ;a.W:?Q?Rt4e??JV ?4m70LiN* $EM H -|A@PK?2F?WDo@?Px:jk@ @?NA ?`e?X&?* ?г?S?`W?a @?aڈ?W '[T(GDe?E?OϠ?:?Bm?Tc@?K >>3o3?+?$eSTS!?9~?D @@@HC#Y?2H?/T+"UAгU'ՀD?F?4E>AT?3 ;?V|@?_?\?KB ?'?m?6?9W4?U?b,`?c!?dŋ?dm?aڈ?_J`?Yx?SM?PQ?DeC@Z֊`K}?%1F @R2@?<{?:^?E@>;VQ?{' uB @?4r?Q0?YM``?W#YXˀZ`_#f`Z Ki Wu_-:H蒟+?70?CY?44EWhX?!г?K/BUj&?9/C@>?L{?FD2H?)'?El@*jk?0G??"m?Q3o?Q3o?,٠? '?A\@?Tm?T?`?h؀?_`?Rn?\$ ?]7?A\@?%?Rn?Yt`?El@D @TF@Ө6D13o?J~ ?I. )/.hгA;VQ?E1?T@?Pd?R?_' ?Xˀ|Cm@OϠ^|N [vUKaU֠_~?1bM ;?N?ZV ?$bŀa @?Aг?_-?I51?70?T_@?CF5@DrKMUnNG#?A ?8?C.?T3?U?B2@2mF:?X?8?@|&l1X\*B2@?6?I ϠYM``R@H0U@] bFRH?-S ;a_ ,٠?J~ ?6D.hG uJC?>h?SwZ3YR<Ҁ%1U'ՀP3@5:C?13o?M|?jk4?0+?",٠# ;0|??HC?KX ?NA ?Li@ @R?m?D@=|.?%?1b?`i?c7?F18@B@?@[2@?J DEG@?I. ?Uvw?M ?P 8?OϠ?;?jk>>Ө?7?:ɠ8B2@?9'Pe?5 X?X?DE?2U?V @?QJ*jk4m0|9x"UNATcT^|N >GI; [p`Q=D?O ?_J`>|bUe V @?VP?d`?Zɠ?.h+?9W4: `; `m`PQ^RZO@WXCY?Aг?Rn?RB@?L$ ?Nޘ?Qni@?@9/L{JCE XUfh͙ \iCF5@=9/@GS٥L{?E@?B@T_`S٥>AT0|K WNT JɠbUb^г?P ??NT 6l1Y@%@H~@2F?.GH͙ M ?5>?G u?B?J ?8kN"m?/-?6D?!г?0n B71Z?9?C2ϠL> Vb]VĨN- ?W@?] ?=̠GX?2H?Oh4 ?4?BZO@?VW?R @?J/r ?W뇀?V+@&l1QDrC(@L٠&?)'#Y?G +S(B@??{ܠ@@Q0?#!?B3!J~ ?-?A ?L{@ @W0E@0VadU;~?: ?I֠KB Z``?Uq?U@?EER@6l1N[ DYl@Ra߀Q @?A @6?4?W0?V?@3@ |9/#!?D_@?7 uJ M#Y?!г=UnW R<Ҁ?E>?Qb?=a?XkN?a.?3oU?6DF+@OϠI~OT8?C2?Dm?Pe?^ ?SF5@?2m?>AT.G?@ 8?ӨScF$?&9W4[X Xˀ?'[?G u"?6D?X @?E>Q0[L{?0|>èU'ՀTYl@-.3YEX<*Ki Sޘ:ɠ?6?_R?Y֠?8?EER@?HA!3o$?4r'[EX?G?1 E>:ɠ?B @?D_@?G@?O !гF?+?UX?W&?@@T/CH@[2@.G?ޘABm>|61b>蒟N M ?O ?V@0|M.X`\`4?X0+?JC?\i?M̠A @UvwLi?4?5G QbUj``W |,{K ?@%@?# ; 'T +?K?]K`?V?EX?IW4?LU mWaRd#?I ?X?Jɠ?(EER@Q\@??N|N ?гHAG@?D@?[?BmV@Z``W0d#\fIW4?P* ?&_a՝G[??5?Qni@?Z``?R<Ҁ3oBH?K?Dr>C@?LB7?P?.6??;0GQJ6?NAT?L> ?1?7h?г@ @m?0|>ATF+@?8C?RB@?*jkU>V@:BHKB L*^TE|.GR@B@?Oh4 ?R?G@?MA ?P+?R@?O ;VQ[L}`]5VN1?# ;SZ?)~?SB7PQ^?F@?*jk/-&l1@@KX D@?-6$A\@Y֠[L}`%?=.>U XaPf'dXC?8?;.G>?+ANGTvPn?=a?Rè;?B@?NAT1Z%Q@?B2@?G u>ϠB7QгaQ?+ B7El@UvwE1?P+??TR2@JCK}cYdYl@RB@6;}RY9Li0|?G?J?T(G?F$eHB@?/?86l16?EK?R @?AG@,B7L> U XQP: >?jkm+P|R@|?A\@+7h?(A?<{D@a@bUe Qni@Wb@X @5KKD_[D @9֠RC.?W&?``?HA2HE?M̠?R1`xe"`_ :ɠ?8C ;VWG%1GXT(GD@?F+@?Z9F`?TèK JjkQ3oXAMh :jkWa^A F$1bV; aJ`` Y9D@0 8??D?9֠3 ;4eK[L}`H?6D*ɠ8C?@3@?@3@C@VO |?3Y?E@?Pd,٠S٥3?.h$=̠TvRZO@?B @?D!?H ?Mu 8D_@Px[8C?ST?Qx=?E@?C(@?A@?GDo@?GDo@?7[?Ө?4? B7BZO@-a3 ;TEM?>?7?Uq??-:Mè?X?Tv?9/?2U?@ @??-:?-aB7=aFl1J~ QbOè?=X,B7?$e?0+Mu RRZO@I/B?[s`?b ?D@7?51+` \(C1O3o?>GO [X 2U?AC]i XW@@@/TE@HH 6D1 P@\{VD G?=? ?# ;?/TGV@NGT^`A?F|@ GMA C@?0G?WJ?Vv?@3@?D?|RP{?/?`v@?NA ??Wb@?ax=?X͙ ?Gh5O1?I֠?@ @L> @3@?YM``?\s\?"mAni@CYB@>è?0?4r?L٠?EX/?<*?T@?Q\@?F?7h6<{?m?HkN?7??Mi ?N.GJ^M.?-:[`%`n?32?T;Q3ocF5@M.KS!]7P@BUE@@ 8 JV PnF@K/RmKB ?&?H?6?7 ?ZC?a`?I; @n7 u=aQ3!?KK ?@G?2m?W=?XW@"UAb?EER@?Wu?YC ?P@>3o?Vl1?VD?Ϡ@|AZB@.?%?13o?C2?Q0?L{?'X?@@?U@?@+F$m?=̠G@XW@R@?GE2F?{ܠ>AT>ATBm3?/-?3!?3o B7>hH0U@?0n?E>PdW뇀?F @?ST(Gc7TrEl@RZO@D|R2@c-\GhI~D@?X%1G<{FDZjkH~@?KX  ;W L> DmW0Vl1RP{JC?6l1?H~@?@G?O ?5R@6?V?Y. ?U?^s`\$e??H?Fl1 GDeRtW@SA ?FD?[s`?@|Y; WNC:^RHc bO' ?H~@?T@?BF?HkN?Qڈ>è"U?Tc@?NA 6?* ?O?/-??Q ?F@O' X0U@# ;?Vl1?`i?XH ?5?*ɠ?UE@?W0XW&ZjkPd!г?=a?A@>h1 ?4r?Tm?a)?T3-|?8CBHJ? G?X?HA?A3oG?-:3o?;VQ>ޘ]`_7T3UȀ^"`UO&?G0?Z?2:?Fl1?Je BmS ;Je J/r F?m?XgcF5@SN- Sm@W:R2@?/Ϡ?Tc@?[`SY?5X?=aG13oE@L{NGScC ;?2?Px?,B7?9'G 4r?Ma?Qd?BC.`d\8c`@|)~?A @?H @?3oO-^7`^#ODEDr? ;3!^[ V'd?!3oC2]Z9`KVQ???U>?C1ZRt:jk?W0?Nh3o?Ma?ST?.h?K}Y&`[i W@DYl@?6D?D @?#!?0|?V?^?G[FMUn?Cy@?O ?G[C2\> P=?* ?C?O ?J/r X'X?)/>|?@ 8?V?I~??Ϡ?ϠC2?HA?Tr?XVAni@J[iZ֊`@ 8?+T3!>|?'?9~?="A@ G?T;DR@U1Mu FDO-^iaej>è?W뇀# ;\OXkNF|@?7[{@|/-FX@TYl@6$XX[p`Ө?CF5@?[?*ɠ?;?2H?&4ES@R@?&?Q3o?@?%?I֠?L*蒟NATSYE13!@ 8è?+M O@ ?+VQ8C?F@?O?L*?SP ?Dr{EER@X&KB ?=̠&6?ST?Xaz?K?A\@H͙ ^T H?-aD@VNA /Ϡ>蒟?2U?MUn?S?FX@2?3o??-:?KX ?JC,٠P@'X?@%@G&l1?@GQdMh 3?K}?U?Vv&Y@n?Pv@?Q߀?'[F+@?T?M.?XM??~KD\a [s`I"U0G1г?9W4?8BB@: ?KX ?P=?3o;/>Ϡ?Aг?гO~^eba_>|?HEKTM ScO@ ?~OTN- >GU1Yx: E_{ܠTE?3o? G?+?D?A@?(A?B7?-:BZO@?=?P9'R @??-:?V?J! ?;VQ.?E?T?Yf?Xm`?-aI @v@EE@>?K?T(G?O ?R?CY?PQRn+?Cy@0|>?F$?MA ?N[ ?QdC(@Z~ ?=|?_`?DEI֠G@-|?X?$E?"m!@@IW4QUXN B7?Dr?EK?C?Mi ?I; ?/-?2?/C@V18@\}1 Wb@[?BU?Rm{M?@ 8?^?KDUjc2P 8?RH?W&?/ϠF@Xˀ`W@2?1Z?$?mӨF18@UȀ1Z?[?b?VvjkE1?G>ϠRFXazRUD?FD3'[Qni@QdMu YLWNCQ].T @?B7Gk@ZV @@ 'F@:jk?70?Dm?@ 8Ϡ< ;?B7?)/6l1]7V?G@?H~@:ɠ&;/L> ?D2@?` 8?^ry?WJ?(CP%@Mi P@ZCUbPC2?AZ?CG0WM|?=.?Q3o>D_@6?>h?S?V?=UnRbrZ2H'D @C!LiL. ,B72EER@?г?H0U@?&D2@6?NG?a@?d@?]5-|Z2JCϠJjkQA@>EL$ Ij &l1<*P@1гP@QR^- Mu ?A@Ϡ@?1b?'=Un8C?De?OTD?4?S(?HG [/?[?\. PeJV X&;}?C?$eϠ@v@RB@H0U@BUWk@_`b. ```8C?Q?9'HF@?&?@G/TH͙ EKK}Ani@?>h?B@??-?Rm?L*|?#!?N ?@v@;}2?E@?F@3>h?&?,B73o!г$E?-|?A @#Y?~?A ??{ܠR@P[2@?EER@?%KP @?/-?P+?E@?Ki ?W0?S?0nT.hM.Q7DeB;&l1A3o1?0|P%@`: ?H +>?P @?b ?b?^7`?Pd<T7 u?BB@?0+-|6?-:E@O' N@%@MQJ?3?J! /G u^7`W@?6$?9W4?;?1Z?8kN?1г??F?Q>|HH ?+?[?]u ?PW?<?X&#!R<Ҁ?7 u?J 7 DB@S@Px=B@9~0 89xM [X BH?W ?W mKX BB@'X6Dè?4BB@F|@?XG0OT? ?{TŋFl1?S@?P 8?Dr?` ?\B7?3.?J! ?].?S0 86D?!)/2H?&?#!?EKK BU?4mFWϠ?\s\YL?'[?Q=D?R<Ҁ?D7[G@K?F?Q\@?P 8?2U2?'?AZ:ɠM|6D @Pv@ G?Aг?9֠?9֠0nWJWJ?-:?2F?+VQDEF @?)/?7 u?1 ?E1?4EEE@Qni@@[2@?P[2@?\V`?13oQJ* ?8?Ϡ1г?YC ?`?B;@ @M.Ix?# ;?.G2%K?0G?B?H͙ WR' u?3 ;?$e?K?3!L}1 Ul@P%@G@H~@2U?I ?A@G 6?R?[?Sy@?:^?;?]A ?c@?P @&l1* |[E@RHB'AZ?B7?Tr?RH?V@?cP ?SYC ;?Cm@?W@?El@+?4?Ma?@G?:?MUn?H ?8ARnTE>3o?=?@%@?JjkF18@dO^ATPQ^YYT@C!Q7H?I?T_@?L ?>B @S ;X?AгEL> ?1jkT@P=>|?De?CF5@(EE@<٠+?m+QNh??4r?E@?J^0OϠI; AZ?8?Li@ 8S蒟?:^@|H ?* ?DrBFS!;/<L}1 è?'XL> F @?,٠?8?9W4?';LU RmRmP@L$ E?8AC2G ?B2@?D@+VQ ?6l16DVĨPG?4=bX&?4E?,B7?'?Ani@?Ani@?VX@?a)?E1J/r A@ ;?&?3.5XL{J F@?O@ ?S:^? '?,{?FX@?N ?>ޘ?EE@?P|?:C? ?%1?0|?L{?AbS(@T(G??Ϡ?Oh4 ESUl@JCVĨ]5DYl@:ɠSB@ 8\iR@?3!?3.?G?ϠK/ZV S!??~m? |?0GQJX؀?8#Y?Aг?U@?G@+@ @?B2@9֠d{ ]7;/TR?&-a?|?ZL?Gk@Jɠ7 >|?.?Rŀ?Q?AгK 8?Pe?V?D @? |13o?@3@?*jkC ;P+B@?Dr?T?M|?@@?>ޘ?>AT?5C ;]A S?H~@?S@=aZ[ ?7 ?QE|?S ;?H͙ .h?+?E X' uT@_-:]h XkNZMA ?P?Tŋ@|R,٠?,B7?jk7XI. 0+?$AгH?'?SG?2?$CYW6P3@??7?,B7B7QPV+@JɠJV GDo@?3?7 uHQ=DD ;?KK ?Z?aF`?b?Je S@Q@X:)WuQZW@[`1?T @?+VQUE@CF5@?;0NޘE>-a?13o?Ani@? B7C2@3@?6?P=?;P^/`GX?V; ?UE@GI'?M?FD ?4e;}Z`N3?W?^ ?;D?B2@?Z`?U;~?I'?DE?3?1?0|?9~?G04eZ`S@FX@X ]L. ?1?:C?{ܠ;D?A @?51A\@MGb@?>?P@[+VQ?P[2@G0?A@:AZ?QZ?I ?>AT?S@9x`=F|@5 XX0U@RŀX?Dr?MUn?Em?R@?L 8A)~?jk?W?De?&?jk0GL$ MUn1b?7[?Q@?EY`fQ? B@I D@!3o?Vl1?Z``3o2U?QZ?Z^?TYl@>V$S٥2mGb@V@J>ޘR@R@??'[Y~a3o=?)~Q7X0U@' u?Gh?;VQ?32?AZ"UO0+?H͙ ?D@>Ө@ @?Vb]?PQL*B@?BZO@8C/?W&?2F^|N UKS4E?Sm@Jjk` 8?0|?A @SP* ?3?W&?Y F$dOSP ?9x?R<Ҁ?].?T ;KDY'T_@?Bm?]K`?]?S>|?8C1 >hSWJHI WNCSc$E?8A2FK??KK M|N I/|Z̶ dE\*X\է`T:B @8kNE@M.BH$&l1?+?P+?Y/?/T\ \`"m?3J^W uD@M̠F@'[?8A?;D8W=P3@?IW4?I EE@@G/-VvH?C@G uS?N|N ?QڈM YS`P 8??<{Q=D^s`8C?G[?O ?V+@?I'13o1г>?=|?K/?Rŀ?K-aQni@YW4DEB@QP|QS ;NT TŋXW@F@>|?>ޘ?N?9W4DeKVQHkNIC O [ ^ޘG 0+UK]aPW9x?{ܠA@H~@Vb]X~@Mh .?5?|P+Qni@?7[?Q0?7hJɠTK/H @E@?OT?ani@?L٠+?"UB32?Aг?O@ /TP?N ?aڈ?<{F6DI/Rd#B@?K??-:4\ U@?9'?JV ?9/>@ 8E@8kN1;VQE?X?i ?d?EK>|+C@:jk?A\@?E8AU@@G?S(@?Rm$EϠ?/Ϡ;}?A@+VQ0G?N- ?P[2@?>G?3Y?7X?C!Gb@R?5>?D?B7BF?<{?13o1bAni@?4?S?BB@T:Y|Q`iO ?H0U@?R<Ҁ?J/r ?0n0n? ;?%E@Q@%@?F @?`Q^?^ry?I; ?I. ?P=?2m?2U?S?Tŋ?"UK}:^?Li?Qb?;?9x?G[?R?^[ ?WDo@? '6D'X>|?R@?[p`?F+@?G@?U?$eF @>|"UE>?XCm@F+@B2@:ɠ"UE?Ix?b`?_ >AT ?Ani@?1b9'H~@P@Mu @3@JjkB@?R?^^`?M̠]A j@[}?N[ ?P%@>G@WJS٥L> V@K?Pv@?T@GG uRFT_@E?<ScaV@HC!?(A=|1?A)/M|ATrZ`6?/->|?45>YfR?-a?U ?WX??-?/?2/Ϡ2H??Ϡ?0+9~5K>GP@VSTCy@&?4?Qd?FX@#!?0G?)~H32?96DBFӨ?&l1?H0U@?Uvw?L ?F @?Sc?SwZ?9;}4E??T?F?;D?2?,B7?P?a?V9W4KX L{I; ?EE@?R.h*ɠ?P@?Aг@@F$K6?F|@?6JjkQ@Ij ?P+?Q3o?JV ?]a?^A ?(?Pd?U'Հ?I/?/GQ߀K UO&T@?3.?H?1?Q7W0?@?YM``?WX?[?=W뇀Y'Yj \ D2@>KVQSMRFUXKVQ?0|?0 8O P 8?:jk?6DH͙ AZ=UnJ~ ?CY?XH -aV$J̶ ;?m?J~ ?H͙ ?13o{?KVQ?VP?* Px=?A?P+?Uj?IW4&?<٠?Q)?>AT?@+?D2@?E@?7 u>?@v@?Qd?=̠H VRF3Y?F??{ܠRFTc@?NT ?\ ?%HH >ATAG@P @XH XAE1F @` 8^`DYl@Li\{R@1г/Ϡ|LiJ~ |El@V@I J̶ Yf[K X)'?UE@?D_@#?'XL}1 P?T@?U>?%1?Qb?:ɠ_-:Wk@Ij ^U+VQPeN ?+3o9'?=?@[2@Oh4 XazEXIW4XsQL{Q?(C?U??~T?3o!г+ '&l10 81г)/?T?,{?A@?P3@?G?Je ?Ul@Ϡ\N- ?9x?>ޘ?A ?63!2U?*ɠ?70?8?8kN?AG@?L ?O@ ?P3@?UȀ?R@?DYl@?3Y?Ya?V$?AG@?%1?/Ϡ?J^?Q?CY5><*?6D?$Hm?W?S+VQQVP+??*jkHC@ @?Q?Z%?P%@?Gk@?@n?7X?3Y=aR2@LRwZe B@?5L `T_@)~?3o?8C?7 uC ;F$?0蒟L$ ?{ܠ-.P@\$Y' '?QZ'A ?Jjk/ϠVN?13o?U;~?X?)~W,B7?I~P+RZO@*jkK/?+VQ?c7?Z%@%@FD4EA?{ܠ;OϠQ7@@F|@TŋG ?%1?>h?C.?@[2@?,{'XSm@^ATUȀG[1 ?1 X=a?K?=a?N|N ?YC ?CYA@?7 u?U?K}?+>| G8<?$?AG@???KK ?PW?Dr?G+Ϡ#!>?NG?O{ܠ3o?>AT?^7`?_?RP{?GX6l17 u?E?/TWU@?5K?DE(C2m1bA@?3!0 8Gb@7h?9/?SP ?Tc@?43o?3.<٠WhU'ՀO C?8?DE7 uHkN/?%K4m?Ϡ9xLO 4rB@Sy@@v@C2Q=DTvK(GAG@?Nhjk\3.?=UnE>/T1 UϠ?P[2@3!0|?5X?-?E@?f:?]A )~@@DYl@5X?Mi ?Mh $em?4:ɠMA A\@9x=aBB@GX"U?UbwWhF$*jk?7 u*jkO-:;VQ?@@?PQ^?HW@?9֠?^#?_J`?Dr?-D_@>蒟Ix2m?: 5KG[2m.5XB@E@?$E?0nEE@' u?B>|?@+?]7?RU>?L٠>3o??E1?-aPeOh4 ?8?F+@|蒟?-|!3o?(?Q߀?CNGW0:jk?I ?H @;/PnLU UȀ]Tc@0|?5K?>AT?6?Bm?M ?@3@>Q@NGC.NA U'ՀP* S٥YfM|NA YQbP\}1 S|5RZO@Dr8kN?-a?H͙ ?%?Q?FD?Pn?[`?&K}?I ?U@?m>Ϡ?35"m?76l1RP{XazZ̶ A@?F@?/+?1г?5?.G?9x>蒟BA?/Ϡ?P[2@?# ;Q=D?"?` ?`W?QPI; ??9'7[?>AT?Xm`?=aDeNhT(G@3@?=Un??Ϡ?P @?Q |"?@n?<{;VQO@ ?L> >|=aGDo@HACF5@{?F+@?M̠?Ϡ5>1b8kN?,{?VW?L$ I Mh ?&?;}+Px[`3@_^_XM9W4?O?UȀ?9/'[?H ?V?+QNm?0 8@%@Sm@OTQ@TNY/cVWL$ ^"`RZO@?*jk8C6l1?KVQ?DYl@,٠?ϠIj A @3.G LU RL٠.h0+;/B@8kN?Z?h`?F18@[v;?G0X"?$Eг?B @?KB 1ZC@*jkAG@1b?JV ?T?W?[`%?X?Q)?<٠? ;%KNATF$?Mh ?J/r @ 8?/-?X͙ ?Y. ?VW?;@+?8C?@@@?G@?b?V$?9'XSD?H?E1?G u?Y?VW?De? G7h?:C7 uPd?G u>|RU`]G@: D8[%11Z:ɠ??Li?13oL$ '?OT?MaOT@[`YO' |?R?S(M ??H͙ #I. #Y?B @?,{MVMPW=PdP=Z9F`Q)FUK9~?Q @?$eIC ?3?5XZh؀eT;?0 8?1CYOϠYM``bX _#f`P* G H @2U?Qb?``?Cm@U XC.?D @?:?/?0?4?Qڈ?P+{?4E?X&?Qx=?13o?0 8?=?HW@?Sg?XA?Sc? '#Y?6A J?P?].?Q0?R?K?.?=|?#!? ?WDo@?EKW=:?V?IC ?C.?L. 2mF @蒟AbH ?Je ?]|?G[JjkNޘ?8A?T @?5O' ?GDo@?гS٥`z`X͙ /'U XTŋ?m?El@?+VQ4m?Dr&V @2?P|? +HA1=UnM|SJCE;VDRB@>?2m@G0>?&l1LB7`3@^ޘR@U X]T @7h@GMA Q3oQP ;?T2@?D@P+Sm@I~WNC`@Z%@G?9֠èNHCH]r`^ATO =|?;VQ?TYl@?N?H?NAT?E@?Gh?R?G@3o>3o?S?R?E?1г?Rn?Qڈ?F+@?5X|?[?9~?@v@>3oNA BU?H?B @? G?M?UX?Vv?VD>|Mjk?6?O@ ?`?Cm@[B E@?BF:^3!?N?HC?6D?B@%P|/?R@?6$VX@Wa?E?M?#!O-:?A3o8CQ @O-:Cm@?B2@?UK?'[@%@?7X?B@?[?gDo@?ZC?;D?U-?`?_?Wb@?<LV @C@?A @?B@>? G?4E?GCm@KN- ?Ϡ?=.?Q?K+VQA\@W:```Y֠>T_@Ix?: A\@_-W@??C@H @b2@YC "9~Px6?@[2@?ϠSm@]$I`Mu /THF@nU;~P|HDmT%K2U?6?/T:>|???{?:ɠ?RH?^ry?UȀ6l1YS`ZHkNг>|?Aг?Qni@?L ?XM?c7v?Vb]?#?DE?YC ?`d?]a?J/r 170? B7B @|?Q?NA ?5K?N?]<`?_ ?U |VĨW뇀O-:FFC<٠MY; QO' \{O ?Q?RZO@9'U@TCm@m?)/?Pn?TO?=Un?K?P?W뇀?6DϠ?Q ?S?)/%13K}PGFX@6Fl1?BB@?Y'?'V @L. -a2D_@JCDrRP{]P @:CPxH͙ <٠]K`eTXaz?70?S|,B7?3o3o?b`?b ?>ޘI ?De"m? |?Y; ?Tc@>?0G?7hF18@TvQгG"?K}?S!XH W|?I'?3o5?I~?CPWP4ENT S^A W(A?:^?H?3Y[`g:Qd?Tm?TE9~W0XW@TK?-a?H @+F18@3oD@a}'`dSTSB?0n?&??~?H͙ 4mA @?Q?Y ???YW4?bw?Z! ?J~ ?D?I ?@v@?G?K?W07[e,`. ?)~?D@ES?~3YKVQH͙ {?/-?:jk?M ?Zt??W@?#!PRŀ4e?F @?KD?T@?f'd?aU֠Qڈa?г?_' ?`n?E@E X>蒟?F4m?Vv?BmL$ ?H͙ &N- KB 0 8г?-| |5XAг8?T?c`?B@L$ ?>h?LF@Nh,B7=|O-:UTc@?7[F|@Ki ?гG@c^`?!г?Li?01C@KB Aг?7 ?PQ^?>&l1?4r?.GSZjkG C2L{Q7YM``O ?7X>èK/%K>èJe $e?U1?R0Xm`U@?G[?^ ?EE@(C?;D?El@?9?6$??? ;/?Rn?bK?[/?=aPQ^[%,`Tc@NA KX S@WFl19W4V+@Wu? ?B @M[X L. K?A3o?S?P%@?$E:ɠAni@3 ;?X??6?*ɠS!a8YS(@: E@U`fU?=̠?1bQ)Gb@7 uK ?A3oFU;~KN- Ab?G@@HkN?@n?V|@?X?X:)?Y`?aL`?a?Y`?^ry?b?Qx=?>GXV$e#Y3.?BH?7 QG@UG LU FD?@?=̠C.?EX?e{a?Z`@ 8J^ ?G ?Gb@6SgL ?2F?Q Pn?4m?L>è?IC ?Xs?C?B?H @.G/??{ܠ?~PQ^9W4@D @??-:?Qڈ?$KB L٠;?D@?_?X?NG>ӨUC@?F18@M PxE?G?U?W=?;5>L*RmB-.BP[2@[DcF5@]`E@TF@Z%M?L{?B @P%@@@?=a?#?G@?U@?'[8kN!3oS]K`O{ܠRw[HkN?B?Mu ?4E?.?Y/?a! ?T:?Qni@?Rd#?1?51?D@@|KVQгIj Wam?Li?,٠E蒟HH K?h>?b@?q`?b"?{ܠLB7RH0U@L}1 RtEK?' u?Cm@3YQ# ;>|KK ?D2@m?@[2@?W:?E>|>!|[?Ϡ8?;VQ?B@A3oU1@|3.?N?eq?`?Jjk:ɠ_-:[i>>h0|?P+?S?J~ M|#?D?Tc@V7 u2HUH @?OT?GH~@Q0M A?>G?@@BHEER@ ;?QbXu#MUnHALU $e??-(CR@2F?X~@?RZO@@ 8'[?E X? G?A ?^"`?Z``?DE3oRT_@&l1/ϠV; WuFDAG@VW?0n?Qd#Y>AT?4?A?Oh4 ?J^A<{?Mi ?5KM B@|??J^?S"UQ @?@|?,{?\ ?h!?TE?#JCU;~/T?B7г?,B7?@ @?KB ?Cm@-|"m' uQ@J~ %>h? ?UER@?T?+4r?0+?S?Nޘ=a&l1+VQQ Te?5A3o?H?``?El@J̶ RwY&`U>CY;VQ|?K/?I ?-.?2F?M?Y'?[ ?Nh#Y=JɠbAYa?Aг?6l1WX\ S(@DYl@?1b?ERFKVQ?;VQ?B@?6?0G@v@M /?5K? ?@?G@'XC(@?BH?]?Wa?.?G?K/M̠?=Un?F7[I 70?8?P@?M?32mHO@ QdI?5 X?9'PQ^NA ?Ij ?[X ?U@?KPe|?[?XkN?9''5>??VP?\ ?.P[2@2U?1b: "?;34e?6$'[?U;~?U?EE@??-?0|?G[?L. B @Q3o6BB@F G7[?<٠?Rŀ?El@!?8?Zɠ?Xs?:^/7 u8HW@NAT3oEE@?+?I. QJc.Z^B?3o?B7/T?|?O ?Jɠ"U51?A?VX@?T3?>7E X@Q@`Wk@?+蒟Yt`_RU'Հ=?8?8.!3o?CYP@3@'[C(@QbTvI/?K>蒟C.?QP?Q @?C(@?9/?,٠GJɠT(GK LB7\> XH ??Sc?Q\@?R)*?[X ?VD@@?3?Pd?Rŀ?E@1bè?Wb@?]?H 3!4m?C(@?N ?7?+?.G?3Y?TE?Sy@?16l1(:jkTŋSm@=.7?B7?K}?B@?G?XH ?TO?El@?&l1<*?"?@3@QV?T?KC@??2U@ 8$?S2?X͙ ?CY?3.?Pn?P[2@?4rK>Ϡ?'* GO{ܠLB71ZUbd#Q\@?H @?X͙ ?M|"mг?N- ?P|0nW W uE X6l1H @S@RP{A\@9'L}1 HkN?(A?@ 85XSYSP D2@3Yjk?8A?>8W=``]7L P+e Xjt`fJ NޘMUn?4r?Ix G6?5X?8?0 8?=Un?+&>ATPnNG?m?B@?,B7?8?U>?XW@?3 ;&l1?G ?Q@?E?Fl1?L> ?P?UȀ?OT?.h?3?I. ?8CP@[`I>+>蒟?E?E?A ?A?%1D @SMO-:/?#Y?Ki ?Yx?Rd#?7X?4?A?Mh ?G@??B@?I EER@C!?Pd?BUE X*ɠ?F18@;/?P?XH ?;VQ5>?(C?0n2U!?|?4?O~?N /YC X # ;2FQ75X?Q߀?V?D@8CH 0+?6W&a @]K`SQ7R)*BH?+VQ?4E.h=|?T?G[?+R2@V@HIC J 4mRUNhTb2@^#Y iW4mF@_RN P%@BU?,{?=|?D@?@+?C.?X @?[ ?Rd#?I ?HC?A\@?=aBH2H? ;?)/#Y*jk?+{D_@??L}1 ?J?>h?*jk?Ani@?VD?P=J/r a8Y]A >?-a(A2F?6?G@?M|?P?I/?=Un?$-.>G6D?>ޘ?Wh?ScèBm? ?Sm@?Z?X`?^A ?Xг?O@ ?7A (A*ɠGh=?6l1?32NhV"?.@G3?$E?/-?O ?U?>GXH L ?G0?5KO-:M|Ani@I~DYl@5KK}S ;@[2@TJ~ VĨO~7 ;VQ@ 8?'?=.1bQ@Q\@JI; Ua! ].?Ϡ-a6%Ta@EER@&l1[K ] Yj ffl1P9~8)~F@N?Aг?6$?m?: ?W@?`Q?Xs?G?K ?PeXQ0?T?1г#YF18@GDo@?-.G?-:C?m?/Ϡ2FB @8?CF5@?Y ?@@UE@S$e?1 ?: ?X;#Y?9x?A?B@?M?X?Y`?CY8@v@>3o?L*?R@?7h@%@7h?A ?S2?Y?_@ ?U@?0 8?4E?B@G'[?:ɠ>BF1Z?)'-aY`^A 4m?=.5K=a* 2m?!3o?4E8M 6D?B2@<٠^`8`b. e U@? '8AN: 6$OϠKi ??BZO@?2m51\$cP \`YW4`%@aa ]7NAT6?+?B@KB abQ* K}A;}Z^Xˀ.h?3o?Bma`[X ?@%@?AGk@Dm? ;?I'?[}?V G9?/Ϡ;DQг?1b?Z%?O~Ϡ@ 89x?,B7?D?O@ ?9/24r: K?C@ϠIW4??T?NT .2m?+VQ9~IW4:C3.7 ?+?O@ ?Z! ?Wu?QG@?O~?P?Vb]?\> ?S2>|E XCF5@4E??2F>|?1 ?S.?Q ??;}?S ;?.hK7[?A?6DQb^[ Gb@?2U3oD2@O P[2@GhN[ PQLB7P0|K}^/`[v]A `} Mu 'H @FèCm@X`R)*/T83 ;3oHW@a bAN@|K9;ZLa\@X:)#!?JC?$PGK?{ܠ8?@+?I'+C:ɠ+?&l1N fgGTO?Y ?QJA@?jk?JC?G@?Tr?Rm&7[?@?.70?D_@?^7`?[?Q3o?H?H?L> ?J ?O{ܠ?ST?RP{?V; ?\?ME0nBmT?Xu#?RB@OϠP%@?1г?A 1?mϠ>5?F?] ?aG@?^T ?[/?]|?`@?[VQ?E@=.RS2G@F18@P/?V?W?A?OϠ?Y9?' uR@>AT?F@??~ESP ??hF$@+EKS@E@FV$UqX]r`T35>>ϠAVPR?/?@ 8?A @?Sm@?E XX @cm@Tc@?B7?Cm@?4?+?{6DJ+?èP @[RF?+:C_?{ܠ?aJ?`. ?R?]5?bP{?Wu?J ?=a?+VQ?P=?`%@?\}1 ?C.?)~?F?U@?X ?X`?\$ ?\L ?KD>?"?Rw?c?ff`?\`?C@?/?AG@?`=?X؀EXP|?'?70?;?W0?Wk@?+Je *jk?P+?Ma+VQ?1Z?HkN?S?S@?KTRwгQdR?X?D_@?<?GX?J -aH~@?8?Q?{?~?#!?F|@?I~?K ??T?(?L ?F@Q7O' B70?R2@?7[S٥L. *ɠB@L*G8 '1гH0U@H͙ N ].a}'U=.5 XEKO@ K C2E@+?#3oQdR2@?+?Sm@?EE@4E?B1Z[s`ZEER@;/Uax=U?3.?<*EKB2@?NAT?]Un?Y'?Yx?``?] ?CY7?G?VX@?b^?a8Y?M9'70?E>?J^?;}?LU ?U?EE@:CC@?=.?VX@?M̠?' u?<*?E@?C2?Tc@?a4?Y ?%151?-|?XE>?'?\s\?]?2UP* NA =PQa=Dai XOh4 ?0n?VP?Fl1J F?<٠?1ZQ Z2R<Ҁ6l1>' uKVQUER@B @?Q?T@G.?Qb?Q?m"U?B7?Ix?bw?`@>XW@4#!?GTO`m`OT3.JV R9W4?D?@GA @J/r 64mB@@@.G#7hBZO@F18@PZ`] XQF8C/T?1b?Sc?DSVl1%?Ϡ[YM``AG@-.>AT9/>|?AG@?0|D(C?SY?EKG[?V @?HA4B7?>h?Gh?Q ?E1D@G@?+*ɠRZO@B@?;/?Je ?E@?'?/T?GU X[v' u?Bm??-:?O ?R<Ҁ?F @?Ani@?J ?R?9'O;?L{?' uQQ߀KL Q)VTmOh4 NAT?SM?RF?$e?!3o?2UDW SH0U@4r?B7=]<`cF5@W뇀G?*jkD @32?Jjk?+P|O D@??_@ ?d@?BZO@NATH~@MUl@^|N P@#;A3o2F?>?;D6?Ϡ5X?BH?L ?A??8?(C?9/?J! ?3A@+?A+?X?Ze ?D@\٠TE?HW@?M|?{mB7+?7 ?AZAni@I?/* Ij &?AT??FX@P\ !?=??9W4?A@?1?3.?0n?1?EX?I; ?Gb@?O ?B @LiU #Y?AZ?4r?:?/S`Ls\RQ@S8C?Bm)~KB #F|@?AG@?^`?S٥? P @L}1 L 9'?L> ?:ɠKB 5X? G9'&l1?9֠?:jk? |BZO@=Un?@?C?%1?@?AZ13oA3oA@NޘA?8B?T?)~8?CF5@?Q@O-d{_ M.?/?S?HH 7 uD @? G@[2@>ޘ&BB@?T?]7?TvC(@De?:jk?|1г?'?O ?U ?,B7Gb@?'?Qd?BU?2?9~(ABm? Ani@N|N ?2H?Ul@?)':^?N?Q 8<?EER@?O-?BHL'?B7?@3@?Qx=8\է`B @?6l19֠h?Yt`?P[2@@+W@UX+?O-?G@*ɠNI'? B7?5 X0|P[2@V; FX@?2H?4r>Ө3o>Ө[H~@Q{?4mӨ?6l1?D@?L> ?Tc@?1 A\@?6?:jk|?B@?(A|?V?QZ4?5?{?1b>Ө?E?BF/GXO-:XM4m?UO&?9'+VQ?IC ?513o?F?1гY; V; ?:^?L*ϠD_@@@?7h?Y?Q@H~@L> ?.?'X?#!{>?U1?^7`?E X%1?SF5@?`?4G@?L ?Z9`?:ɠ?T1b?@%@?TPW??/K?C@Q ?E?FX@ ;@n{?#9H ?&l1?L}1 FX@G5 X_ga8YJ! 6$<C(@De>蒟?1гFI; ?NG?`; ?Q3oH0U@Ul@@ 8?!г?*jk?/Ϡ&l1C(@>蒟?F?&l1HkNJCBHTE[/EE@Ϡ,٠>&A ?'[>|I'?X?Oh4 ?Mh ?Cm@N [`%?-.?L6D2H?7 ?_ ?Z% ?%K?M.?"mI PϠ?C(@?'?4m?@v@A6l1?Q ?E@? B7K/U1132U1I֠?DYl@?M.?:?5 X?* ?-a?Sy@?V=Vl1CF5@.G{?+3 ;Dm?8?QG@?4E>?UX?[i ϠBU?P|?X0U@?>,٠?7 ?YM``NT ?E X?J~ 2F/T?=a?Qb?Q?4e@ 89W4EEl@?K?Uq6$ZP?(A0G^K(Z ?: ?Pn |E@BU QY9.h?NT ?=.:^70>Ө6L}1 G Cm@MI; ?'X13o?3o?7[Sb B@?HW@?/?$?1Z?%K?@v@+VQS2 |?L?6$OϠHC?]7?`i;/J~ ?7X?Xs?Z9`?@ 8?J ?SB@b@`[2@D@&4?L*?]$I`?AZ)~?:C?2U?ϠR@[p`QгJ @3@?=Un?GDo@?+?9~?T?T@?A @?OT?\O?Q Ө[?%?E1?EPT @KAг>?F?,٠LU #Y?Vb]?I֠:^>?Ani@?7h?@%@?[VQ?]a+\ JV ?I֠?Q7?HW@?#Y;}?&l1?EER@@nK}?F$?O-:P@e ^A ?(C?F @QX͙ >?5>B@J JjkE>2mAbM|DG0Nޘ32?:jk?-|;DSwZ[s`YX Z`KVQ(G ?T?Dr7YM``?6?```?LB7+VQ* ??B B7P[2@3o?PG?KB ?DE?(A?F+@?e6?`NGhJ/r ?1 |?1b?K ?E>?S.?X0U@$EXGX?5X9xRB@??RP{?GKX J GX70@nVU@FX@I (?Ki ?3 ;GX0|?L}1 ?Qг?@@?B@?Wh?Z?Qni@?E X?5?1 ?F18@?De=̠VO ??Cy@?$P^^`IW4?I/?TQZ"U?S ;?HA6?5?UX?SP P%@fb]S٥?I. ?A3o,{@v@?{ܠ?F$?Te/ϠL٠?7 u?@[2@Pa՝[Ө?7 uOWQ\@SgF18@ B7F @O %? G? B7蒟Je Q.G7hS٥H)/J! R @RŀZ9F`RF7 uQG@N- ?HA?1bU@ ?X`?@n?~5>?F?E>.G?&?Y`?`?VX@??-?A@?Z``?T@jk?;}?T?6/T?# ;?7h?P?\`?Q=D?ޘ?NAT?VN?;VQB @EER@A@V; ^ry?VW?/ϠKMF$?,٠?EER@6l1FD?' u?:=̠UjP[2@?%K?jkJ~ QdUPx?LB7?V6l1BH?@3@?4r? +?AG@ '@n6Z9F`fSg?@@?E0+2FRQг7 uE>.h?V?BmZ̶ XCYI. <? +?<?T@?H @?EE@?]?_?Cm@)/?$E?Q@?Xˀ?Vb]?Z9`?_?Q7?3o513 ;?51?SM?S?L{?Ya?a?Ul@?;VQ?5>?4r?1J̶ P@C(@KP?@@?W>IW4?(?A\@?;RJ ?1b?3 ;35X)'?/?I?B @?J^?[p`?GDo@P @+?X?CYH7X '=.?4m;/P @(A?Jjk?JɠX͙ ZBU/Ϡ?=|?L> -.O PnSm@PeFL. O ?{ܠ?/T3oW&W@è?/I~STYf5K?`?X&E> ?Ma9W4I ?.h>3o@%@Bm[`cm@HA?1Z?-:6?-a@%@P+L{T;C?OϠ?F+@LB7VĨX͙ VD+? ;OTB?L{?L$ ?Bm?Q)?@[2@C2?M ?RB@?V+@?UER@?J ?Px?R? 'QG@SMC2?* ?4r?jk?A?NAT?:^2EXF18@$e?6D?3o5 X>|>Ϡ@+Ϡ?>6P|0|?B2@?D2@TERw?B7?6l1? +?70? |>?L> ?Qڈ?T @?[?>T(G1г?RU# ;Z``H~@?E>?K/?9/?-I֠IC Gk@BmW GX?Mu ?QZG u\ T_@J~ KUER@`8``LsUXKi QR2@? '?13o[bI # ;BFS.`m`Pe?Mh U;~?{?<XW@Yf%4eIj GXUbT3??"O' @ @?=̠&l1O Y9c!`Q^?N- ?H @?EG[BB@?5 XSMFX@?C2?:ɠ2F8HAB2@?Pn?Wb@?4m )/L. 1г?I/?UO&YC O{ܠ8C8;?$e?:ɠ/L. T2@U'ՀAг?9W4?8,٠2F+VQJ N ?jk?<٠4r=?"??Ϡ|QRZO@/Ϡ>è? ?4=B?Mi ?W ?H?2U;K ?/?Qг?KS(M̠?A3o?W@?QZ?0 8?3?L> ?;M̠RnR@>?TYl@?A@ax=mZXc7vD5U;~baZK ?1г?A\@?(T3`Tv>?4?0|W:`sT3\`Z >è 'X`T3!;DC ;I. Y`T2@?/?GP@+?7 .H͙ L VQг?6D?Tr?P?A @?# ;?Jjk?(A'?K?W&?E:ɠNޘH0U@?Cy@?_?PnJ I/5XL$ @ 8?DYl@?;VQAZN F18@2@%@Dm?.?E?0n:ɠF @7 ?;/?B@$EI KK O-E@?I ?W?7[<٠/?*ɠ.GMUnH0U@|?$>|7 uQ9/?Z2?^A ?TT2@3Y?CF5@?F?Ab?Ani@?9W4?C?Qni@?K}?9x?OϠ?a@?`z`?F18@?: Qni@BZO@?3o$EWa`GSm@/Ϡ?'?TYj [%,`<{?L> ?P+?#AI. NATHCF+@C?HW@?[?# ;Zjkaɠd@_{ܠ6$? C!R<ҀQx=EER@;SgaWNC8AY HH ?C!?4E??I/?T?Z``?] ?S.>èR<ҀS(@?m?G@?7?J ?^ry?`f?Zjk?K>?=Un?`. ?bm?70R/T?F?3o0|?9?Gk@?60n0 8?0+;VQ?3?G@?Gm?m%1-a?%?>?B7BHFl19>|?FD?L> ?Ϡ1ZEE@L}1 )~?E>?K?=.#Y4r?Q3o?e;~?`i?B7Q Ix?2m?B2@+?5 X?V'd?S@?2m8AJ~ L. "?SP ?_r`?Y֠?Xs=UnQ0O /?:jk?G[?EH,B7?GLS(@A @5X?~GDo@U1ZKK ?5>?2HD2@4?Li?M./ϠVĨ`[2@Z`70?B@$e]^7`:CAa`d @PG?D_@[X 2H?]?Z֊`?H~@?Q ?Z9`?` @?]?N|N mHAKD>|?B@?>?J̶ ?S?UER@?\?Y֠?J ?W=?e5?^`/TSF5@/-?C@?гޘA\@>3o?,{>|# ;? ;?7h?[?.?0n&1 ??5 X?06$RwP>?G ?E X?=?&?6?XC?^?H0U@?$e?3?8C?J ?Nh?/Ϡ?,B7?DYl@?Je UqW0UbP?E?QG@?HC?@G?5 XI PWAг?:jk?QX؀M.C@W@LU |Y`f``STQC2?5K?;}G[i P?6$?3.Ij QZ9'?@@?P'[aSwZ?I D@it`eTIW4|4B@?E1?a?Whm9֠1b>?E1?R?T@?Oh4 ?5X?5X?E?I; ?H @?51?*ɠ?E?/T2H?P@?```?Mh F@P+51?(A1bG0T?CF5@?F?H ?T?^?]`?S2?BB@TI~@@?>?Q?K}?#!?#Y?L٠?Mh ?>?G[?F$1@n?8C?Je ?A +TrTr{>E>@@5=||2FQG?S?J?A ?M.?I?3>GW뇀Z`I ?"U??Ϡ?-|?=Un?DAгPW"mHkNI~KEX3L TEJ̶ ]̠eTD?L٠Ubii@`d=|(A8kNA3oC@O' [/V"m/-WT??K?N B7W6: ?P3@Jɠf^#L F@'X?3o?# ;?/P* [PQC2>ޘ?;?Y/?a?\V`?K?5>?;VQ?EE@?C>|3.BB@_#f`aL ;?M-aF$?A?J?TD_@2?E?B7?D@?QJ?J/r ?C@??-:?*ɠ0nC!6D??Ϡ?Rn?R @?@ 8?;/?T;?Wh?MUn?Sc?VP?&F@#?5K?4Vv_r`crp`]<`?+?PG?F@?KB ?VX@?YC ?T@?G?0? |?2?;<٠Qd@٠b Ϡ? S3oAG@Oh4 ?G[A3o^#Z/r P[2@(A?P|?W u?O' ?H~@?Gk@?Aг?32?!г> '?5>?F?'3 ;CYQ0(A?S@]7Oh4 0GGh5>?9/?G u?P3@?AZ* +VQ@ 8TvVL B7?68kNN 9/?7X?IC ?GDo@?)'?'?=|?Ϡ>è?EER@?@[2@"X8CBHE>8A?0G1ZUB?O ?FX@HXCSY |?Mh ?BZO@J ]S?5 X?B?&?C@?32PdH @?8?4r '3P3@SF5@``V|@?0n?F=C2?L$ ?UO&?EFl16?>+@ @Fl1L$ Z/r TO9L> ?5?C2HTrU>Y9.G?TYl@?IW4>?3 V @V?.G?H~@BZO@VE@?=Un?SF5@?NT ?$E?-a?JC?I. ?0+>ATM|GX5?.?I~?BF?)~?/-?<٠?V+@?^hmXW@:^? 'N[ J~ ?1?R @?T_@?C ;?m?5K?>?=Un?4(C'>ϠF+@Q X?J̶ ?P @?P[2@?Oh4 ?Q3o?O-:?!8?$E?E@?H͙ ?Q?P?)/ ?/ ')~jk=8?K?Vv?=|# ;3o&;D=aJe P?+?]i ?W?(A?!3o3oP3@AZ?O-:?Tv?OϠ?IW4_`U;~|?EX?,{0G?# ;?3.7?-X?7?L ?:ɠӨ?T70C2 G3.-|?>>AT^Rt9H =̠3RFC2?J ?@@<{$?79#D_@OTH~@I; '?T@?E XM +?V?Ya?Mi +VQTrRC ;1Z?3?D@?EER@?IW4?H @?M.?P 8?4?Gh?RU?5?=?Rd#?O' ?>?K/?S?X?W:?1г?~<{K O@ ? ?M̠?@[2@?4E?SF5@?`+?Z``?BU?$?9/?A ?C?P?UX?NT ?DE?BU3 ;OT69'V @I ?Aг?M̠?U-?[?I/4;VQ=DrϠ?D?/ϠIxUj[^ATPW?5>?M̠?MA ?G0?+aгH?I. ?C?T9/?.H0U@`YfC2Aг?# ;?R@?E@(A=UnI~9/?HC?J ?B?Pn?1гU XWSgV|@I/?$eX?-6JCWDo@E@?L?[?Xaz?XW&K?/-L٠T?BH?@[2@R)*,{?W@?Wk@?T2@?BHN9֠"U?8A?H?GX?KX ?<٠1г#!?8?C?FD?HA?M.?J~ ?J̶ ?V?TO?jk?(A?R?Qг?LB7?P 8?9~49~?T5>?Gb@?W6?:jkI/?%1?XW@?Pe?5X?F?J?@?@ @?F$?P=?M ?=Un?Ϡ68A?AG@?2mXa@T2@:C?F?W&?LB7?5K?5>Ϡ?-MUnQڈF)/EXY&`W뇀@n?!3o?1?4?G?"Tc@K +:SK/3 ;Rw_ YC V; UK4m?F@?AZjkDmL> ,{?D?A @?3?F@?Aг3C@G[XsW?1?V@?@[2@93.5+?Cy@?V@?\{?Sy@+Ϡ?Mi C(@_13o?7 A?3?O@ ?(A?@3@?DYl@JCU;~<{?=.?Rŀ?M|?0G?A?C@)/>蒟?P=?IW4@G ?F?Y?T@?Y&`?Y?B?@+?Tŋ?K}?'X?E X?Dm?3?3o?2F?V?bUe ?PN[ El@?;VQ? B7>|?G@?BH?C.?UO&?S?G u?>1b?13o?T@?cQ?a7?@nPdXˀS ;5+?&?0n6$BZO@@nAb?*ɠ?V?V?0+?'?PW?Nޘ?51?3o-a?@3@PNhH͙ KVQA@@%@HC,B7' uST7h |>|?5X?0n7[D@D @+?&?*jk)'?T=RmZjk??[`%?Bm0+?N- ?Q@ +KQڈ3o?\. ?Sc'?C.Yx6?DE?A@?U?P+<{?#?J~ DrV$BH?D_@?Xu#?L*/?G?D?70?Jɠ?Ze ?MUnPeUl@?K}?c7v?YW4?L ?R<Ҁ?Ij ?;?H͙ ?El@)~C@?2U?W:?U X?9~?(A?Mi ?Zt??Rt>蒟3o?1b??C!?EX@? ?_?\. ?<{?1г?+?:C?UK?a?d(G?`?L٠??7 u?E@è;/? B7|G0D?0?J?El@?I'?R@?E X?-|?I ?HC?#YC8A&6?%?5K?AG@0nD@?J~ ?UER@K<٠IJe ?3.?P?FEX]<`U@:^&:CPA4mO@ 0+?B@DeI'?KVQ?Cm@Gb@S2a3o] ?F?PQI Gk@ G0n?CY?Q @?L. ?WX?P* "?Nh?`i?K {?Ϡ?G0?Zɠ?VĨ?4e>|K1?=|?W0?UX El@?P[2@?d?Y9?4?I'?Q?$E:? '(AZ֊`Wa?P[2@?`N?F!г?)~?DYl@?S?Q߀?0+?3?Y?I֠Z`Mh ?\{?[/?m?3o?;>|:8A|?A?P* ?P@?Q?Z! ?YC ?B@+>Ө?)~?%$e?{?CY@+V#!?;6D,B7 |0 8F$R2@?8?I֠?Nޘ?0nϠ?BZO@'OϠ?7 u?VP?>G>蒟>|LU UER@;VQ?I~?P@ TKK Mi +/TQd9?;-a5K+VQRUG@??-%8?D@E1a\@F|@?|Mu .?Nh?L> ?P+?I~蒟?&?1г?SF5@?dh*?[?FD?4r?A?[?b<Ҁ?X @?;@GP* Bm?A@?Y`?Wa?<*?KX ?_' ?Xu#?C ;?Mi ?R#YN%1`8`g ?_ ?EE@7[13o5?6?Y֠?PQHkN7?[s`?N[ ]`V?S@?U10GE3!3 ;E@NGF?@n?FD?De?B2@?.%1A@P=.?JV ?:C>G9W4V; `N蒟?R??-:?5X8?:KLi?9~?Li?@@Pv@\U AZGI~;?#;Cy@+VQCF5@VPV>3o?R@?:^?T4Gb@Q=DX>ϠJɠ=̠EA <Q3oA @?%17h??T?b<Ҁ?M VPQ@FSg ;?M ?<{>I֠EER@E@I֠?AG@?]5?U X?(8 ?Pe?\V`?Ul@?C!?5>?@@3Y?VN?bF?U?HH ?R?S?L. ?@%@?3 ;9֠^|N \}1 #!Qڈf; H?T3?B7K6"??-?U-?%\`QP?Rw?J/r U XQ0?C?EX@+S(@Pd?3 ;?3o?KD?V?Nh#YIxE XX2Y`Z |?)'A>HkNI. ?@?Q)?OT?P7hSP ?(A?7X>7 &C!XW@\`F|@?%-|FX@Mi T@TLB7PW^7`aG@EX?NAT?I; ?:^?Gh?7X??C@?!3oGXIxRU>D_@HY9R@HW@P??\`?NT H~@PGX bd#P[2@W&cX:)D@C2N- N|N ?.?YW4?XH ?F@?%K?"?9W4?7X?(?T?[L}`?+E>?E?X ?I ?7h?8?B@?L}1 ?B7?O-:^s`:jk3`; S!??{ܠ,B7QG[+?PG?Vl1>蒟U;~GX?C?;VQCF5@1b??T?CMaEK?@%@?R? I/$?DETP+?@@?Z``?V'dTN|N 3Y#Y??Bm?H ?6?L ?QڈKB T?>AT?2?гC@NATR@C.>?4?#!<٠KB HW@BZO@HU^[ a`=H͙ ?3!3o1г?%K?4?C(@?J>ϠBFBmL{C?K@v@S(@F18@D@SBF?@G|Q@SYM``aɠQJ? GU dŋQ?B7KB \{U-?Oh4 ?Xaz?Z֊`?[i?Xaz?HH |2H?"?UER@?ZV |NT ? GQni@>G?'?4r?Q?A3o2m?CF5@?%1T2@7[ ^GZjk?B7?2m>ATO-4?VW?Z9`?02?.G?Ani@?7[?>AT?RH?7[# ;?"U?3.?L ?UX?XYLO' Uvw`z`NT ?Rt?_ ?Z̶ ?T;?ϠIW4,{?' uAG@2F?SF5@?VĨ?P @?^T ?[?/?XC?i9?M.A&E@H?X?MA ?FX@4mQJMh &??-?#!QJYfPQ^9/?,B7?4C@UXTQni@5X?5>|%1?3o?(A?5> ?[?M̠?A@8C3HWXD @?* 4m'X?E3 ;T2@?6?R<ҀRP{e/`Z֊`CB@3.?@ 8?T?Yf?O-?;D?D@?Px?SP ?A3oP@OϠ?3.I aڈ?Ϡ?MA ?>ޘ?Je ?Jɠ??@?7;VQ?3?.GU@S?-|?L ?<٠L Mu ?J~ ?M.5X '?K ?Mh ? +Cy@?13o?X?P+?E@?U>?T@?P* ?V18@?TO?C ;?/T?&l1#!J̶ G@?#?0|? +?D @?#BF?8?Cm@PO ?HA?N[ ?K/?^ޘ?YW4?U ?q?wA ?`Q>70K?,{?6?8>3oEIx?{ܠ4e??+4.G?I'?VĨ?Wu?P PGRRB@F??0G?+?6?A3oR)*O ? '?>AT'XBH8:CJ D_@?L$ ?]i ?8AI~#-aE>?I?XCGb@a߀H ?1Z@%@R)*Nh=?7[?Ix?F@?Rw?\B7?Wb@?EVC@?UE@?4mU X?A@?]$I`?"U@ @?<٠?[?U@?O-?Y; ?W@?-.L$ G?^ry?X? '?PW?XCD@VP??T?XA?KD?[?/,{DrL '[?I >H @,B7B@L$ ?/?5K?0|?N?@@[2@?-2>|?F @?H?4mè?7 u?W6?Ul@'{?:C>N+?@n[UE@T2@??<*;/J ?G?NG?5 |?08 U'ՀSW@R?>ޘ#Y{?S!?\B7?C@=|2H3oHVPQbE X6>?;?RF?M L*Ze JCP@\`Z9F`Rm?Q@?F?C ;?S.?8C6?C@?M|?5? 5 XF@@ @8A?7 u$EBF?@G?H?A jk?/?Q?SM?BZO@?>AT?SF5@?Sg?-.?4r?Jjk+)/?S!?J! L (?Uj?K}&l1 G)/B@?0R2@[ *jk?3oY֠[7?<*?K/?Qni@?Q @?L ?#!;/FDUE@K?Q߀?[?TYl@?Z֊`?U# ;>?=Un?T?S5 X?Bm?X?L*#/ϠRP{Y??J+|?+1 X?'[@@\d^V`Wu>BUYaQJCF5@L> Q Q\@G@3Y:^?#!?Z`?]r`?1F+@>|?EE@&O-=̠?Cy@?X?U?;D?K ?ZV ?9'7[?: 2HZ2X T:GDo@?E X?J ?6$SYRn?@3@?Q@?6$èE1VM 1b?-a?K ?;FDD@1F @LU L* ?F18@?L ?N[ ?T?HH 8?3o?Rd#?G u?:C?Z?^/`?>G?6$?S|?K?W@?[ @ 8Uvw?;?R)*?'X%?'[?M?[}?V @?F+@?LU ?M ??Ϡ?'X?N ?c?YY?T?A @?@GJe E X?L$ ?Xˀ?NG? GQ0?9W4?4LI~F18@5>?PQ^?P* "5K2m+?.h-.?' u=HA;U_-:RUR @T@%1?@?D@P=?O-:?+PGKX G3o!3o?+VQ?@@?C2?Q߀?Q0?'[?: ?Uvw?L ?L$ ?Z9F`?9~O-89W4Oh4 ?+?V+@?O ?ϠKi I?Ij ?Wk@?@v@Ϡ*ɠ@+7# ;?/-?T?PE@O-:'[F@S@J/r RT_@?=|?'ϠTŋTYl@?2?M ?F?R)*?Wb@?P%@?M ?PW?&Gb@I NG>?Y`?c ;??Ani@?1b?B @?.h+@3@Ϡ?I'?mKD>?Q@?O~?3?/T?^|N ?j9F`?VĨJ^?m?SF5@?6?X?MA ?J/r ??(CaB. K/4rQڈM FB@>{<X4rI ]O-?P[2@?E>@|N]a_-P@VZ%>?Tc@?Ki 9֠ST@>|M.F?M?BFSTRU?4r?7 uBU=̠??*jk?FX@?R)*?KD?Wh?`?BDYl@?[3 ;X`4E?[ ?[i ?H?%?/?Pe?Yj ?E@?&?IC ?E.Mh Dr?P|?]?5 XD@2HO' Rŀ?,٠?1"U?L> ?Cm@I֠)~?9S٥a@R)/.4m?:ɠ?E1?BгN|N W0[vU?)/?VW?P%@?4r++è0|PnEE@XRF^[ 5>?W u?WX?"UJjk?MUnC ;a՝I; ?Px?@n!?;Mi ?-X @?Bm=̠L$ Uj`@`. Z`Jɠ?8A?7[9֠V+@c2T2@?K ?KX >|;T;J ?@>R @L*.G?,٠M̠AG@0 8MUn?#Y?c ;?XkNUX] C2;Pv@RwH͙ ?)'?V?R)*?&?G[?X؀?=.3?5>>蒟Ma?+?]A ?R?Ϡ?|?)'?@ @?Ma?(?VP?W@9֠W[T?2m?^ ?U>?0n?,٠@%@K ?C@?SM?RF?[`%?Gh@@?O?_Y`?4EJjkG uK PQ^KK 8?* ?!G?-|jkL I; 32+VQ?!3o?B@?$EC ;6D?0n$De?#?E5L$ ?7X?\?Y`?+T2@Y S!Zjk`+R@A Q3oP=CSP XH RmIW4?E?P@@|UX]aeXdc@]`KB ?9W4?B@)/P[2@U>?{ܠ?D@?Bm|LB7[A@?SY?C ;Sc`B[ G u# ;4r?(?C,٠2F?P?Rd#51SgQdJC@@FDNh?5?\ ?FP@G?BH?.G |?@+?EX?7h?P?Y֠?>@v@3o: ?G.5?X؀?_ ?+I; A\@)'?GX?K?=Un?O?D@0+?2F?J?I ?Mu 7[?VP?`A?Q?S?R @!?4m?BF?E@.I ?=|?Ij 0+?A3o?_r`?R?>3oCYRP{:TIx:jk?Qni@?W6???6?D_@?$EG?2H?Ki ?C2Ij ZCm@?/J/r S.LiOϠ"m0\`\{WJ[`S@4>Ө?B2@?I'>|Ij Gh3o?Bm?<*D @b2f6"`P?0nBB@[`]aUEE@Cy@E?-|?Qd?3!QR?= GD@>è'Bm?;VQ?V?/R @!г?H0U@?<٠?1г?BU?F?9֠?3 ;?E@?6|?Ani@?!GX?'X?D? ;?T?a@?A\@/?A3o?0 84eHkNGk@?;/?MUn?8A?C(@?J! ?8C?T7[:ɠ?6D2?R<Ҁ?XkN?IC ?UK?Z?O ?Cm@=S(@?' u?BB@I ?+?d7`?aL`?J! ?.GDEMUn5KX WX* ?S@?Li5KK D2@O-:_~]`D @?G?P@?aL`?[`8U;~?0|?RZO@?)'B7>èGh(Cy@^Ul@C!K}?PQ?Q ?P@?L{0 8S!O{ܠ0 8?5X?=F@a! Z 'PN[ 8C"m<SwZV+@B@?/T?!гI~TYl@=̠?7X?/' u>Ө9x/T?!/?9W4?W?TE?GX?Qni@?Sc?F$* LB7(A?=a?3 ;?G ?Cy@-a?MUn?`%"?IC ?H?]̠?A?-?F@?S2|S@V@B@?# ;??-?QG@?Q)?<?7 u?6l1>|<U>WX# ;?5?A3o?]`?]?8>@[2@?+?Xu#Oh4 ?N- ?Rt?D_@?.A\@B@4P* I ?G u?R)*T_@Y/HCL. bP{`N!3o?|R@V|@4?%1OϠW@?'[?TE?J ?GX?;?-.?VN?P @<{=5KX 3.?D@?H ?GX?)~RUYj EE@гϠKLiUK?X?LiA3oPQ???-:?(Gm/,{$eB72?F$?B3o7hSYU9/?SM?[?:C??SM?W ?C@BUU=.?;} G?9'?U1?A@?LU ?`Ls?Ij ?!3o?Xm`?L*G?0+?X:)?Li?#!)/&?#??~?>h?:C?I. ?P3@?Fl1?4e0+F|@@@5K?$?V@?Uvw#!;?51?BB@?EER@?/Q@RwCy@C!BHI/TPeQPUj?WNC?L٠7Wh[p`5X?*jkQZG?P3@?AY`e(aS?PW?1ZC(@Z! a3oA?;=Ө?U-?J 6QJUvwO Cy@9W4?m? &AG@LB7??W6?^h?H͙ D @M̠+VQ=XkNR<Ҁ+R)*cZ?7[?Uq?H;YM``Yt`{?:CM UD@FDGk@BUTvPx?Mi ?V*jkRZO@D @D@Tv,B7?Z ?UX?$?L٠?VW/Ϡ`[2@aP?4E?>h+HI8EX0U@A @?QG@?D?/Ϡ?NA ?#!B@?O' ?[ ?J ?KVQ?J! !3o>|?@G?^#?] ??T?9/?9֠-.?G?\$ ?H?(A?XH ?b?WJ?X0+?7X?@ 8?5?4r?-:V; Pn4r?' u?9x?+7L O{ܠG[3o?9W4O@ `G@?7X%I[}`Ab?' u?T?/?KB ?A3o?E>?C2>NhF+@A AbJ̶ LU O{ܠU?1b?NT ?\`?M O{ܠQг?|?U@?ai ?B@V_ϠY(?Qڈ?L{Ө? ?J̶ ?9~B @?%?Z ?S22HE@I D @?SP ?e`?`?I/# ;|?~@ @?E>?F>Ө?G@?F+@:jk?7 u?KH0U@?~?[ ?]|?9W4?5>?H ?DE?+D@O~2F?9~?B?J ?O ?KVQ??Ϡг'?2H?LU ?Q ?)'DYl@# ;?3YB7F@VWR2@?&?E??BH?Q @?Bm?K ?Gb@8CH @C2B@BmI֠EER@7 KVQ>?#Y?S@?A@TG[?U;~?Mu B?8C?W=?7 u<{0|6?6$5KCF5@?:^?RZO@?L}1 ?7[?'[?9'???mJ `} dOZjkF$C?;?WDo@?Q@=UnPW6$?#!?L٠?a?d$ ?Ul@?# ;?'??L ?L*?S٥?WDo@?W0?P|??EK?;??13o?2?.h>èD@TYl@@@?Ab/TFl1?N|N ?Zt??Gk@?5 X?K?9'?=Un?7 u?Ix?Fl1?5K?BF?70D@A@??T'XSF5@?,{?aZ?S(EKK?K?+??9/:C@+?'D2@Qni@? '?.GPWX~@GX?: ?P=?H͙ ?:C3oQ\*Rŀ8E XQ)6?<D@B1b?:jk?I; m# ;??~OϠeS?Fl1?GDo@?C(@?.KMa?T?Qd?S?,٠#?QJ?U-?-|?5>?R@?MUn?6$?Aг?K/?!гI 3?KVQ?Q@?Jjk?: ?-|?D?5>0|?PG?a)?P@?5?J?=a,{ #???* Cm@Cm@?9x?UX?Ze ?Li@%@9?E@? B7QG|-|)~??Rn2m?Je G?G@?Vv?'JV LU ?Oh4 ?KVQ?F?Yf?\> ?PW?KK ?Jɠ+?'?@nD@Q?7h?XH ?FDC..?B @?0 8?2H?A4r1b?O@ ?A3o?-:??* NޘT@?{ܠ?8?;D232?"JV [K *jk?W&?;DSm@Ki /TSy@[VQD@ |?'X?F$?7[?2?P=(C]<`F?;D(C?m?9~C!N?0G?[}?asS`?K ?G?V?\. !SP=F @{?8?Cy@?I ?J~ ?T?]`?QJ??Cm@?X?Z`?Q7?=Un?7h?=a?;?F+@?BF?X?-|DeKVQ?&?=G u_' \B7'X?RF?UER@??Oh4 ?MUn??Ϡ ;?FD?Mi ?ϠWXX~@Bm'?!3o?32?A\@?De2H?=̠8?P[2@?P+X$|Cm@G C:ɠGDo@[s`T @?/6T?E>?gS-?` ?Ab?= '\$[`%?.h?K ?D2@?S(@?Q?5?9/&l1KK ?X?+Oh4 2?NT ?(=a?FD?c%?dYl@?BmBB@?HH ?WX?'XNATYW4XM<{#!;?A3o?]h ?b?_-?B@|?S(@?]h ?QJ?A # ;UKXM?T?*jk?E?Q=D?Sg"mH~@4e;QdVJ?@3@?QZ?: |'[*jk?/T?Mu ?L ?1Z8CIC IW47X??>AT?S?_{ܠ?TmϠ B7?-.8kN@v@?/T?BB@?9x?2F# ;D2@E?J! ?9xG@?F? B7S(aZUl@7 u1b?5?Q?Mh B7VP\է`Q=DQUE>=IIW4O-:PRZ2VEKQJ9'?U@?@@R?Ϡ?\8c`?W0?P 8?T?BGDo@$?[}?[?9x?)/?DYl@J~ KK D@?=??-:HH <?H?A?!г?K?Z%?P@@v@I; ?D_@?Ul@?P?C!5XL 8L> [X 5>?XA?\{?Mi ?0?Wk@?S!?:C?@n.[ WNC3 ;>蒟?E?P3@?;;KVQTYl@\٠WJ=.?@[2@?S?>GRŀQ@?X!3o?K/?P?(C?-:NT UQ\@&?B@?I?G@?(ABHB2@,B75 X?1Z?W&?R?"?'X?)~-|?=?V|@?Gh2?@ 8G0UT??Sg?H0U@?/?2?XPc^dOZCX:)]^A ^ATQ6B9x8Y`T?@@?B @?5?QZ?0GMUn)/?GD_@6l1?DYl@?G0?5X?J̶ ?` 8?Y`CF5@_^7`YfTO{ܠ?-?C(@?M G?L$ ?QG@?I?I ?8F+@Rn$e?R?V?U?V?Jɠ?13o?GQ ]7>AT?Mi ?Ani@;F @?Ϡ?E@?5K?E>?V?T#!?GDo@?/T?A@?K}*ɠQ߀J! @ @SwZ`%@[L}`2H?Q7?X"aL`Wk@|<٠?T?A ?9?13o?Ub?13oU'ՀGDo@?A3o?K?CF5@?=̠?RU?UXAbb2^ATJe ?T=̠-|?5 X?9x-.?X?R@?KVQ>|?: ?FDϠ?I; ?T?P?HW@?E?O{ܠ?Xu#?S@/A@?,{?7h>ATO Aг?$;?D2@?U4S?2U?HH >?1Z?*jkJ~ KB ??=.%KS٥Xaz2H?Y`?``?V@%K?E>E@P4E;AZCm@PG2?Ki ?C?+VQ?40 88?>ޘ?.hOϠP* =Un9~4r+?A@?^h?VX@BZO@FLiNh?-:5 X&l1?1Z?ϠNA Q\@|?4-.GU@Ab?4mP @Q߀?>ޘ?F?0|?EX +D_@9x?PW?^?B7T$E?PQ^?Q0?MUn?>?HkN?V@?Ab=a?,{?F@?-:+VQ?5REl@?6Gh[ ?7[?d?a\@?U@?S2?N- ?A3o 9W4?E?`. ?ZL?F?G?F@ +G@;}?B@?U?G0+?3.?D@?~G0?0n?A@=a@|)~?Nޘ?WJ?Qni@?A C2U 2F?Z%?`%"?7[.G?X?_`!W WNCM ? ;#YN[ ?Ani@?_' ?L{jk?1Z?Mi ?Rm?#!D@?2U?+VQZ9`a$`M è>|J! JV ?A ??ϠPMh OϠHCJV @ G?-a?Bm????~?Q?Q\@?;,{Xm`c`QG@G@3Y?:ɠVWb5X?A\@A ?{ܠ?H͙ ?Vb]?FX@3 Uvw\`?`x?S.FX@V|@T@XTGR @Q?;VQ?Tc@?F+@?3o* ?@n?[/?J S@UE@? |?N ?AгHkNPx?"U?9~?2?[L}`?b`?BmLU G"U!3oJCJè=UnUl@B7?S2?<٠?5?,٠?X?7[?4r?B?Y9?VD?0G?$?I; ?Uq?^|N ?X͙ ?H?K?8CF?V?UȀ?PQ^?B2@AгJɠ{?6?K}?Sg?F@0 8P6l1?R@?B@IC 2HT?~?EK?PQ?г?De?REIW4FX@G@)/?5X?3?#M `ST?(Qd?EE@?86? ?&EKGb@?G?G@?KX ?@%@>,{E1P3@* ?@|1>G?NG?Oh4 BZO@7 u?ABB@VP??UO&?DEAZO-:J>PWJ&?R?W:?H@%@Fl1?D@?FD @B@?:ɠ?@@>A\@A???P??T?'X?4>ϠBHAG@?7X?>GG[N[ >|,B7-|?V; ?W@7 u@[2@?7 u3.Q߀Q\@U D_@?RZO@?S25KA@?Dr?[`?a՝?X?EE@?;/Ki bi P?S.?`?ax?OϠRR<Ҁ?:?D+6$?7[$DYl@??)~'X?B70n?R)*?V@>?/-?T @?Ki ?3?%?* ?>ޘ?N|N ?<٠JV N?EGh=8CI'9/-.KDP@=.?(A?;} L$ UjT:KD0ϠE@J/r ?:^?I ?TF+@?#!)'=̠?@%@?GDo@?/?8C?[H~@FX@?[?0G;JC?г?]|?i ?dr5>]+?N|N ?G# ;?: >|@v@|CF5@8O R?+?I' +?I'?Ul@?Pv@>èA @mH0U@b@_?Sy@?[s`?F @N DYl@?Bm?4rDmQ3o6$?Q@?FX@SYYC JC?{ܠ?K?<{?)'?B@?NG?5>?/-?F?V?Yt`?@%@FDO@ 3Y?I?T3?F@6BB@?,{?Ab?G?E@$E/-?|?#Y>3o3o?'THH Z`\ M̠2mAbEE@' u?6>3oJ! @+?%K0 8 G?L*?D2@?+VQ?N|N ?4Y \`C.6F|@B?3!?`d?l$ ?g4 0n[/?1Z?W@?E X>?|0|/Ϡ/Ϡ>Ϡ?N?R)*?:jk?Q @?c?Qni@Qni@)/?O-4eQd%1?D2@?]Un?e`?PNAT?Tc@?J/r ?8?L{?Aг9?Ki ?NA ?Nh?P[2@?EB7T@Z`;/Yf` P3@?* ?O ?D @*jk?# ;?D@?[::C?=a?^`?SgVĨ_7P @TYl@S2GJV >hBQг:^?R?\*?C2QG@Z`T=̠?HH ?Sc$EV?T?L٠?[}?_@ ?70BZO@C4è>|m?%K?>h&KK ,{mSYRd#?/-?@[2@?~HW@?+?2mRFQ߀?A?Cy@Ϡ?@G]h Z 2m5>I8?+?G@?]5?\$?&!г?U;~?X͙ "mPG"?EER@?9'/-B2@(A?Mh ?W ?El@??Ϡ?V?E@K * ?C.{?FD?@%@?D?N QJ,B7?PQ^?MUn?4E?E?QP?: ?"?P%@?Z`?Vl1?L?3Y:ɠUE@Y~;D?"mKVQWhPQ^)'?GDo@?De/Ϡ?m?N ?G[?3 ;?@@?U@?_R?C@X͙ RF? ;Q=Da@P<{UXsPnQ7WJPQ^|?4E;RP* PxR@1b?B@4rXazPn?$?T@?M̠(CP@Y&`W@E@G>AT?-:?4?;VQ/-!3oAbd@٠<*?De?г??Nޘ?FPGR2@?D2@?EBm/->L*<*?Jjk?B @??2F0GI; >?JC?HH ?F@?A @>=A ?(C?TO?Qni@XBU8?'1A@?8?L> ?H͙ ?ST?O-:?(A?N- ?Z``?AгAMA TŋU XE@?%1?9x&l1?L$ ?C ;Ϡ?B@?U1?MUn?6?(? 5B2@$e@GJNATC ;?>?]u Y9?B@?O-?KX ?R2@+S7?I S@EK?1? KScJjk;44mDrQ F@7 uRUKB  ;?X? B7?+?*jkӨ?~(C 2U(C?m"mE XYt`b@\*KVQLU J I'_Ϡe@T??Ϡ?IC ?7[?@3@?Je ?=Un?;}?S?F@DT?L*?>ޘ?B @?S?G@?4r?<*>UE X?8?H?# ;X:)` DE?+?'?R<Ҁ?S ;?(A+г!3o@3@)'?0?L}1 ?[K ?N=.2m?~PW@v@?P?5Xeh `5X?8kNQXW@AG@?4E?9/? ?3 ;?De?BH?5K?JV ?W@?Fl11Z?"U?F+@??-:?4e?'?70?>:ɠQ @J^-a?:C?R @?U@?D_@?3 ;"U?+VQ?AZ?R?Y?KFD[K cP i`g&W&MUnH ?4E?E1BZO@RU1? Mi UE@г?T?W ?ST?C@>3o?IC ?Y?LU ?<?;9Bm?&XKi J! 1 ?@ @?` b`%?.D$e?CY8?51?IW4?R)*??T@[2@D2@F@5K?K?*jkZ V1#!>?.h??0+?G?mL*?[?b2@?ZYd@٠@@?=: TŋT@9֠?D?F @#<*?@|?Pm5>?N?QZ?/-?BU?L$ ?;VQ?=?H?D?Dm?5X3.:^.G3.>ޘ8?2H?: ?P?>G@+J ?3!?PG? ;QTSgXMU@0G>è3Y?M|?a ?Sm@3!C!K[}_D?K ?NG?32?[??Z/r '[Tc@{?7 u??G[?4ES(@Qx=.?X?Pv@?[?A @9W4{?7 ?A ?>AT?D_@?:WufT?L*?DmO{ܠW=9x |Z̶ b?]`?OϠF%?\L ?[VQ;/Uj6?O' ?X?=Q߀PQ(C,B7Ab8?&l1?|S[L}`3?B7F5X?5X? Ө?;/B@?L٠?T3?D@*ɠP+\_`GDo@?H?F+@?.hTŋXW@#Y>I/?T?5?E?FD?E X?C@? B7D'?FD?D@?7X?$E7X@@/!г#?ϠQni@NA #Y?+5XJ~ 7 u?!!?Oh4 ?W[?EQ@Z2!3o?BmJMi ?@%@?m^[ c7[`%F@7 u'?Rŀ?UbMi X?LB7?`%"?SF5@?RU?S.?N?T;?O ? '?BB@?Tc@? R)*Bm?A ?M ?C(@?1 0+XH _-:3o?`%"?a ?Tv?HkN?Ani@8C`* ``?/?a7?Y8P?:C-|IC J^?K?YC ?R2@Cy@DeKAZ3.?=̠?1 51OR:jkF|@_{ܠY :C274eM U1 ?Z9F`?` 8?G0?.?/Ϡ?-:?$?\i? ' 'N- BU?HH ?7 =Un?3!?H @?7X?I?Q@?KMh LU 9'=̠;?:C?BU'?&?LB7?PUqYfU1;?Ϡ@ 8?5?Q7?K?/Ϡ?5>?Cm@@ @U@A@гO Rt8CGX```b OT?<*?GBB@??-?P%@:ɠJ~ ?G[?V?D2@?@3@?S.?`e?cQ?T_@5CYm51?# ;(AE@A??|?#!?O-?Y&`?W?]r`?aL?TDYl@]h Y Bm?>?O{ܠ?4eD @=aϠ +8Sm@Z``5 X?8A0 8?6l1?QG@?0|?1?Qг?HW@?3 ;?51?[B2@Y`V?TE1F>|&R@NA ?6l1?E?G?A?Ul@?Jɠ?AG@?O >3o?4'X9/?/-? '/?@ 8?ϠRmC@?3G@Y//?S!?KB >|?1?MEER@?*jk)~D @,{?<*?;D(B0n?>?=̠FX@V:^?F18@?79'1?8P* RT(G\`Y ??Mi <{U'Հ13o?:^?X G B7K'?m?D2@?Tc@?Rd#?A >5 X32?%1?;?#Y7hMVNO?6D?R?K?7h0|D @?.?TYl@?A@PRP{9~I; S2?O-?A\@?# ;*ɠC3 ;G@_^_R?70?G>Ө?h?Sg?Q=D?A@?7X?51?3oG@TrJjk<J/r H @>?5?(C?!?"m?4?13o@@M.El@RRB@?@|?I P* S0h?BZO@?\U ?K/F18@?U?N %Sc[I֠-|PW4r?S?4eSWX]̠Y'(A? +IC S.RJ! +?5>?M ?XW@?SY?F|@?C!* W XH <٠?J̶ ?XH ?EKF @BUD @cT?1Z?[ ?] ?GDo@C2K?;}?W=?)~V@^|N ].S;D' u ?-|?7X?:C?;?/' u?/T?#Y%1R)*YW4B@?I֠?DEANޘK@?: ?;N[ Qڈjk#?)/X?.hS@^- ?(?G0N|N 8?M.'[L{$E$e?)'?:^?M|?Sg?HH ?O' ?Y`?Yt`?W?FX@I'@?Yj ?cK`?SG@Pv@U>X VWR@S@P|0G?K ?^ޘ?d{ ?^?El@?L*?\?P3@?~RTvH @1bC ;G?P?*ɠTŋUjUKS/Ϡ8ZɠXMCC@N[ N[ >G?;?P* ?S?XM?R)*?0G?7[?Pn?RP{?NG?.4m?A\@??-:]5:ɠ?0|?C ;?J! ?S(?G@:2F?F$?DrB@^_ =.+XazY 3o?:?Ϡ?3Y2HUK^XR]b@Ij ?X?^7`?=GDo@TODm?P[2@?JɠTV +AP=1  +? |?2FXH cM?KVQG[.?S!?9/@ 8? '?2H>AT@@?jk?GDo@?Qb?T @??{ܠ?'?UX?QPC(@>|?\_`?P+A3oAbϠ|?,B7?%2FBZO@Je P @$E?Q?Sv`?Y0€?Z&ǀ?Q@?4_T`?Sj?P2=JX,`_W?Jz^?c_?Ss8Ѡ4>@xKZ/`0-~Yjch Rr@?S|@?Za ?2Ig`?GT@?BP ;E{Ӏ?6G?R??M\ ?C. >X?6k?Dq?b?^m?91 :v?/4?Q=(?:90w?0@?0@?G ?J ?G(@?6?N?LhO?B ?Q@?;"@Ow@Iܰ@CG@Q`7 ?:@?7`?Ln?XBV?R ?E?/ (@?1$v@?M ?;qV: LKKM>@!J5v `?PĆ ?HkA@%H@=߀7A?C>?:b JM>@!ޣT\OGF(`Q̀BN`/ @I27 ?B?">Ѡ?D?#CˠH: H@-~CQʱ ?QP`?BĂ?8q?MH{@?J\?AW?DW?nDH@FI@M\D?%.0@4+@?Mu?HS ?L3?\?^.Z`?U"AN~$?V1 ?` œVoP?B~8@?Y??46@E9U?1Y?4IR^!XReU`Ryx`?$?Gd?p`>|>`$ _?5?B?C~@?E_T`?Dq?P>?[?RU`2Am`er@?I? G6@?My`?_8R?]d ?V?T ?E9U?2`?CG?4@?%?I ?:\?#KeS@gXG?F?D8ݠ?#?;R?HF#`?Y!?`y@?Rk8?> `?P ?P@?3,`?+`?CO1?@WI/:8`E >N$ F殀?9?4 +>c@XRvXw@#<2@?-NրU?k@'R@V"$>>@V^ ]R Y$]`WFbC. @Ó0`@GQ;B`TZ@A#`?9 b?[u#?[@?U`G?S[?Dԥ6tR@`xb WY 4s ?I˗@?RB ZqP#`#̔ "œnDx FG BTl?z?H@?I.5?Z6?bo@?5S I?6MIO.`?3b?V`?Zfl?]S@?`L] ?YG?:Z`> ;?>?7T@A@" C|4#?Fa,Z6!U ?]-`?O`?; ?R\ ?` ?cO ?CM{`?er@?9eRBW[>?E`9R*@%?<\=C #?R`??X@w? @>u?A7u?@8 B2:XVSs @y@CdN2'?0K`?P_.Vq؀U;;R;`Q# J0G@4>h,BP@@ǀG Rzk6`?W?UR?Lq?Qhڀ?P ?M`?;UA>往?M?IU ?SȠ?P_?A ?TO?UB?(?+|?Q?C`@5P#(`G`M><C'L?Q ?`*?d ?iV@?R4!TuH5 \\%"i?4d`MY%@?O?'MD?>o@?] ?BL`UR2`?V?T?9 ?4Q?Gr?(lKw B7 `:?@`@?`L?_@?Q ?KC?L?? >Ѡ?(u?@? rF=C HTC{?T?WR?Ӏ2h?-E?D ?L ?L?8SorF?m?"#?@+?T]@?P?=?Q@?J@S3W3@3KeO ^mE?O`?_ ?Y? 6JQ-?;R`?P5`?@31 ?ER?I@?S< ?bG?\p`?;! ?\3?9@U5@F?B&Ԡ? ٥`C`OgL37\w?E?%nUfU ?_(?F? ??~E`Tx?)`?Wz?@I ?3 ̀?Za ?["@?0-~D<?u?/ʚ@ . <4+@?6ӯ?Nu@?O?Fge"Ru60M?[?a\`?_?dJ?U4F < J{ 8: ?HQ`?CMC,T2'r?R?HF#`?PӸ?cO ?RꁠR)E3?B$'S7r\ ?c#?ffr?Hԟ4?<`?!@?JCF?]b ?bY,?aL[?Y&O?Pt?C?1 ? z <<+ Jr T@J?er@?O,?i}?alP 1U?A? ?=x@L`E7o ?0w?J?VÉ ?EY@S ̀U`C/PK`DD?.t<  97h?M\?AL[/ʚ@?4I;[ـU ?^I`?V?N!?_ ?a =?S 往R@TjB`x@?NW`?=PL V @F?/oi?0DJ ?`=ɪ`D?5ɷ`?C ?"Ѡ??@;U8k?H?Ja ?Pgo?cP?^@Z<@<  U`ZA`@7?c`?f?E`. @?KX`?G(Oi@^#Ipf?Ts`?]ܩ?F]?+?F|K`?6殀B!!B!!?#b?7 @Y -u?`l(B;@ ?08 ?-S@?Y 13S|YiL'IR`Gt?'T@?R@?T2 ;]eY8[@^`??X?P?.tA&`?7`?U?V24 ?S?A l(?!o?ʚ@W??c`?[)%T +b@D ?Ro?Py2E:NW`?h?\1@?SYQ&\R}E !{S"Xb?@?R#?3/`?G,?O ?1 @?,MCR`?B`?X 2?C ?)?P@?Xw@?Zt?T@(7K+ ?@5`?[(2?J@Rt\t@9e ?At@?C?J@+Vad@`r[K @`''F&p`6(`?1q?NoC?17u?Oh?X8`?CG@5D?6?8  A?N (@?U@?ր? 6 +'?@G?2`VZ?>m ?W[(ua =ZH?M?`?Bm@2`?L?PEW@Q=(?@`?Z|D?TU\?B?;,?4F*4l(. +|BX+f!hԠ]B<?5O?A?G?SI= g" i7@QQ0@?3b?M-`8>@\ E C̔ ?L?U*"?Qʱ @F0?'@ ?N!D@?QC?J Q U8??gЀ?XKր1`_& Ux?;?P{ ?'u ? Y??QCIQ@?M"|`?_T ?Lk ?H ?U+?OA?En?E ?BP ?H ?05`PMQv'%P!?2?MB ?X?O @?8q?LM?Qo?T6@JZ`?ON?YX?O6k?H =ܩb\Si@ E`?5?Jex?Lwp`;Ⱥ`K0@\W ]P@?=}?`u?Xm`?2՛?Cb?0N;`Bp? "X9?=v`?\5?_&E?Ds`G`El@?T ^c@2 ?[?Te>Ѡ>l(?[0@?e`?Tn ?U??b`?B7Jk+?6H`?X:?Pk@?B?M_?A@DMF|`0"3aI UG XE PI ?8?^gX?aI?\ ?]f? eI^AY?JN?4#JZ0FQ7`aS(?3%f@?Q2&Ԡ+Ⱥ`?!? ?S:`?Q?9?J?HҸ?@?U7o ?9ޖ]]`S=%?@`AD ?N4 `?W???G`?FzU˝d bca`goU ? )`?Y?Y]g?L7?R?D$I]gE #ZC&iL?Ws`?`@?FDÌ`?3@?Y'B?'@ V/`2o ?T`?Qɽ?C|@?K?YD?`?RH? `?Sߓ?gr?`@?>;?I?O` #@?Q$v@?Hfo@W@TIJ C4F?4֋?b`\j5`9N4?G`@?V?H?/oi?Rׂ@?Ru`?7?LԘ`?25@]ȷ V?5*"?:0H)R`Ex?`?Ve@?G` ?G?\s ?[n?D G2 V`SZ?%?Z@?T ?/2`?Fp`?Sl?JӨ?K?G@ eQ$?@&IAFp`@Ā+?>`?K@?5@:Lfo@?[^W`?X ?%S ?3̔ _YiiG aIYTDY 6J?E?Du?R[?Z ?PTp1/`.!?*[4Z@=[z?@a`?RO?@F4$?@l/@?^gX?Q2o ?6CM ?MD3@I`?5 ?P ?NTY ?@-3?2?X?W#y`?Kg ?Uh?N`FBI?Pl?G\w]0K@=I(5Rs`;?Gq]@?Sl?T`?KC?@4Y)`/f`&<7MD?QQ@?a2?Rh?4 ?Tyu ?Zv`?HhU?*5 RSyLfh?p`?DW?Bh7 `K`?Ce?X!?94% C@V$H> ?A-??`?Fd?RB ?8%נ? U?=H{@?M7T ?-x@?`^`?`?=CIDRTQ"~8@?RCS?I7h?;&`?Z)`?`6 ?T`?Z3 ?WR9R: 6 `8k; S@?H`@?QL?#7 @?,?B5@?ZS, `X8`?H`?$W?Hq?T 0@PC@S@S6@ ,<`S A?Zݠ?`c?Rs`?#@?)3?%V>X?`?=?Al@/2`NRr? )R`?4?@?5QYs ?#<2@?Sɺ?Cb1 ?t6J@9C=?AR?Cm Bo0H?Sy`?IcS #?1r ?0DJ ?46@?No?P?C|?Q1`?Q. @%SJ$@L@A]t?H)`?V`?V@?Q`?<6 ?4ҿ ?T _?Y2`?Qx @?NgX?P!?Q?W'F?X ?P?"`>?=c?Y*@?E6*k+BS!PE9U?3?RΠ?> @9>=L>P,?'r?Y`?X ?&97 ?-x@?(O?:)h̀?)/`?XhU?J|D1 ?R5@?\`0P`*3 N Q|2?[-?d`?Ja B6?+"@?<`9XCE?Jp?:]?9@?Qu3?<`'rEc@c>`? S=%>g`?]ܩ?[c@?D@x 0?z?7ow?;U?&{ ?$F*?C?+"@SV`WD`KV UEKu#IM(?*k+?I,=PiU!l@?/ʚ@.tK;R@Ce= ?Fc@?f{?`Z?,Q?8`?~ Jڠ?$ _?O?` ?CI?I?YIt?ba??\d?R?G%_?;T`?9x@ I?QMN?DWLQc ]7t?<6 8@TPQ;?83 ̀?1{ S|E N]=v`?YLN`?c?Ja@@GowLѠ?HD= ?#`@?A?S@AW\^@PQS$sWtT?dM`c`?+^W`?G'F/`?U)/?HUV 2kF|K`;e?3`?D ?A?9?*&ǀ?7Q?< 6]C/`?)01$v@[ U<2@?{[ 7 ]a}F*5@?RWF@?My`?>er@"@6?+^W`>er@A$rF?)eSFG`;0@?)?Q@?a1I ?Y>R?@?Z ?H %@% Ⱥ`?\j5`?p?_cTGMD?; ?C/`?IK`I]gPG?P`@18j; >K;5y ?Iﯠ?9c@?DDC?Q&\Le aiY `:P\`?26?>Z @ x ?QX?OȳAX ?Qk ?G),`6H`Q@H?P+?T*?@[@?BAm`?@(q7I !@?9;5`6VL0?J?D%/w@RITw?>,t?S~@?E`?P?S'L?K9?X7?Su0?ӀA?6mRDA% ARAC-?Q)6 ?S&?$?@Bc?Wh?F9<??[۹?iq?T$Y OO ?P ?U ?W@?Tx ?E` ?C'?%*"M`>p@?Qy?H/W`Dyu VGQgl ?Gߍ?P ?GX1(Cd?Kop`?),/?9l ?3x@?'> ?$H: Lʀ?,hO?QV`?U="@?9l IBF, R5?z^?Ee`S!a{KE?P`?`:?V@?GVĀ?Y?[ ?@ ?A@?>VAf@?Eɷ`?,>er@ @R`@+ ?S2?H-2@\] Y;5`?U ?b ;?WS?\4?R*0n?1NA?U?SsJ ?3bF]%?Ye?U! @?v`?B;`Ѡ`RU`U? @?I}@?E?M\??Ӏ"?B7?J ?J[?W@?I0$@?SCˠ?`?T#?ZX,`?]Ϡ? 0q@?L#t?6 ?)$@?$U\?T.j?VL?D$?KTנ?U&V ?AyEޝ G?+@?P?W7k?Q2}?T; ?YP?Q)6 ?OC ??ݙZ*Վs`?="|`?'.`F`>8?T?UF?Q?I Ѐ?)Jh"5.<?=܀?P ?'T@?;Z?Ws`?D ?8H ?ZX,`?R)0A<`JA`@$'Ā?B8r@N @,:'?&J?E ?;C?P-?S/ I ^xq;T`?Sy`?PoAD S|1v? ?`7 >p@6F5P!?9B?6]er@O a!Q?T?`A@?V`?"*@__Db B ?6ӯ?Y# ?Q̗`!v?8?L}4??l?3%f@? h̀?2h?R7 ?@~O F$?(" ?$@?Hn?W?(" R@@ 1?)˗@?#?@?'El@?  ?S?XTc?WD@?7B-= ?[S?cG?6~ 8?IA?60M?K:>?L??65?P?P?Eɷ`?R?UD?K6r@" Cy`?%"?9t3??L ?Le ?"g`?P_ ?X?C?CG@?ALV+V?ANA 5{2n?7E?'v`>U ?R[?Za ?Q?Gp`0H?D@?G8_ ?Q4@?X C ?Tx?Tt?%1 ?.V??=C?Q?Q`K9XW<0f|@Ⱥ`> ?Q ?S??Ma-? 8 OӀV0M>?&a?O: ?Oʚ@? RSyYX_a9?X ?<`K: >er@?8 #x@?1 ?D@?0b@4@ `EB@@?X@?Y"?6|K`22:D)= @?I/`?G OLY@?A<`?Jw??5`%ɷ`?VW?]/22:NE TR F?I?G?7AP؀P՟ ??h01J?8`?2Π?@,@?Bp. A?/Q?KȺ`?5O?AF`? O'9??k@?]rF?J ?P?Z@?E?=?C'L3Z?'?IeC/S?:(?Q ?J=?Sb1 ?=_G@4s ?E="@?Pw`?M3?QsM`0P1J?1 ?;u#??I7h?O?M?I`(n?g`?QK? P6 3. ?">ژ?*:5@GZ@?:=?Gq]@Lyh ^Q? F`?W<4`0u?YR?i?Z7`G\ If@-y#?#-cKs= `?LL?K?L\?@`SrW\L?AY ?] *W,?'v`?T?PӸ?P:`?E68q@M08 ?G @?S,`?%v `X@[8X>E?W??V?9$i@;@Ⱥ`?Xl"@?W4`<?A}@?,8ԟ gЀ?-c?I_M?@,@?E?O>@F93>q?7A@?M`'/Q?I0!7uN#M&I Z`Ia4 ?G'?(?G?b ?Y?;BiRU, ?6m?Z>?A7u?N$ڠ?b?ZP?Ql@?[.?S<2@?5#`?R@?_Y?Dx 4@?I@?TX6@?P# ?T_π?6H`<`?=D?cG @?>|>`?R@?A$v@?6!6]F@?9 ?Mސ ?An?%_T`>l(?OgЀ?\p?ArJ@L'Gݦ#̔ ?G.`?.]B4!?2I?P!s`P# E?NG ?MUǠ>rFRܠ7.`?S %W`Q# >v`?.]?Q2?K>er@?J?W\?Q`?VU@?R֏ KUw@?K8X?[Ԡ4K#r?G ?_@?\@i?O!? U<:g_ +?7?O?@FE P #?OX?J\?1 ?BP ?T1`?Po?0G ?AD ?A@LPhb?;?9F`;S@?8?RZ?\?\BP@?N]?>n?Ca.G ?2Π?Z?SMK`?Ue?co}?Lo`GsCQad Vp ?Ef?2Tl?H ?c`?V 'z>g`?<?T?Ul?!F`?<:?VJ@?P`@?Nt?V~ ?Ls ?#/?Ar?X/W`?WC?KR?S @?[n?]?X?'F:*@?:IaJ'T@?_&?X1?8W<E5S@?[Ơ?``?E{Ӏ= ?!NA?Q?Pr`?C/`??9?AY?Lk ?D +CZR ?+u#?Y?I?;,?@?A ?2~8@;S@]_JXbqeDA@?"P 7 @?;!?PrՀ?Pr`?WZ@?I@.(`?C@?NDKQw ?91?S@?9c@!?6?Cc@? b(q?9ޖ?X9@?V O;KXWB=LG?K?U, ?U?S"?D'4F ?2r@?Q??>-rF?$?Id?*@XxR7?Gz?D?D=`?&J?-u?>C@ ?I?I@?B?C,?1 ?S}???:`?\c?D\HW<6P-L?:2-.] U?Sɺ(O S@?G),`?`@?\?T?K?O%R?A)=ܩ7 >7EP V`G@?Dt?NX%?H ?V`?`b?X~`?֋x@?Gow7Ix \`9/@?P ?1E?PHU`8Ӏ?a?i@?R՛E1D ?6?%W??@w`?Xz@?]6o?"vWK^Q$?>=?[߆?Sj??%@?14+@C<2@TY W@&R?q7MD?>V??6J@LgJE-(Ӏ?-D?2M Tx?C@?Y`A?IW?AC?Q?St=`?@ 1.m ,CqcWi@Uc@?b\`?o?b /QGa:L`?Y ?b`?`?R? F?90u?Qps?Y?"O&N`??>[ C/2?D% ?;V 7k@0x :5@R;@A?J`?O`?4>?U@#Z+ V3'@\fc@B4!UB ?A,)1IA ?A7u;x C ̀?T™@?T`?b?@?S ?]@?U=?:*z^>٥`>rF?4M`?@MEVE3T?WT@N<?QJu ?^b>E`D@?L}4?F@TWc=%\*?@u?]Y@?>; ?+e?B?L}?KԠ?%}?9t3?C Ik 6?8u?Ryx`?\ ?@ [ 0IʀP#`K4Ѡ?2L`?J?Q\` K 7ݦ+R?fo@?E ?7C?#a?A ?H`?K ?5@E3?R: ?Td ?Ep`?U@7 CU`Y. ?7`Sb1 ?1?@>u@5Q`:!e ?D ?8l@?R# ?a?"` Fe@?^?f"@?Y`?| ?.?K<?_R?^J?IF`?ErS?R~8@?S?YX?_ʚ@?X`?88`Qps_M@I,?TP?T _#%f@G\ OVUY/`Q@?4`?C'LQ. CT?_X?X`R)ebh3?W?Q9\?LUO?P9 <2@6N@?.,?>`?S$s?:P),10?Jv`?Qe@J*@a/bY? GsCAɽ7k@?13.er@\L X`@<#L\Tt@I6' ?AJu ?0@@?Z?_̀BX9C?\~ ?UX S(?Wh?AB?_?\p?S٠?0HPE`L?%?: H ?#b1 ?:Z`?6ӯ>PFn?9:. I}?H?X)`?Ie  O@L 8`? F?5@? %?SI??Q?@?*?2E:?Y%?N (?GA@?E /Q?:*@?Lq?D@?0u4$?L}4?cm ?@f|@[*>!?Y$i@?a@?`k< ?V?Qp`?SKe?V?^?\M@?H`?Ac'?N#?K'?N?X" ?X?P#`4:`@Oi?\hO?UY@J2-D 'k@RY<K ?J ?W $':X,`?Y ?[@?8k%;?6H`?W,?Pa`?J]`?Ge@EL>?a?O?_g?J_6@J2-;^W`>XPS|`EW@ FtF|`:?F?1ޣY1 \VBN T*Xހ]}_rE ?b0)`?S? ?`@?er@F& ?=C RdژR`Q*)`?FR?b@?S0@}?3?Km ?K?IR`?-D@?I3?\Y?QS?B9?D{[6G^]"@?$往?UW?` e?2Qg`QW@UB'6x?? U?R+`?>xq(W<?'A@>?6]?V??+|q(};@=[zFN@?1D ?O?`?(8??Ӏ?`V?c[`?b?WsC3!3?Sc$@?Q@@??5`?J?17uM}W`Y0LSi@?--`S?>er@?Py@?:]5A>l?+|? ݀P8 Qt@?5?Mx?Pc?S `'S}? ܀?GC?7E?HM?A)O?R U?_j?CE? >`?Eܶ?BiR?D/]?\?_5W@`5R1>?Ë́ ?a ?[^W`?Co}?V%?@@]O!?R@?GiM^[:= ?\w?YQ@3`O,B" 6`HÅ?D@?bn`?YH?H`?K ?ݦAU =ɪ`3`@?l(@nl(?2E:;8XQI>:?;&`?(H ?i@FAR? ?2r@ `?7?PM?Ih̀?I Ѐ?I}?'v`?>= ?X ?Z5?T% ?Ie ?);5`?"v?=.q?E?I?0n?@<?4W2o!=8D= Jt@G?+0@?(ԠDڠG(@@hb9{?J?Fb?:Z`?G ?>xq?Rׂ@?UUԠ?DWC?Q ?N#S0@aʠ'@ ?]^?]*?G:E`?B=?L5W@U!@1 ݀?4?+ `?Oe@?@D'?5S ?LEB@NmCM =X']C.?W.`?ZU W*WFv`=j`9?R`?b?Uy?7B?7ݦ?x@l6B2:D@HnTeSV C3,?6}?B`?<JhA*)`>œ?<>?J?FiL?a?ct?\`?+VWڠD$?O5`6|K`c\W6?9(5?XTc?K|Gv`Qo?,?N53V VJ@C3?@@?1U *uGrT3*QWF1 D>>往? ݀>A@?3??0(@?F``1?< ?C 1YH C?Y?P\ `?P1J?,(?Q;B`?RP ?"@?Q:O@?Q1`?Dfu?8?U D@P;Gi?s6@?L)?QY?K! ?X?^'?TK?P?( >Z_%R,?Q<5?K95I?:E-?PS`?DW?Pn@?RE:?/4cDoV#`**?S~@?#x@Y<(_"y [, Zg_ Q-?:]`?[KX?W?8@y@H8)`?97h?I[ ?X!?W@?1;?4h\ ??JX,`?G'v`C@6ӯ?'6x?;@?(n?Bn?U2`?N?' `08 KO4D@v1s`?@?E. A? Ⱥ`?KqV>@>G ?B:"h&Q@fܵ ?,3?b`?UE5D?S?W>?s[SB`1ޣ?9/`?R@?L?+Sx@> O$7?$6@?A#`$s #Cˠ?%v `NJـX`KK@Ml? ?7:E`! ݀@^L4 1p`?Qb4`?Ju@?@`?1,?]}?b3-?U\`?YE@?] ?TX6@?QE@?J?0 K?6;?4Ì`D`P`2*@?<`?C?M^?Tzh`?N2'?@z?DZ@?)E8@@`#6Z@%f -?SG`?a:O@?U#`?H %@?N`?A]@?&`/~OGGd?7@-`Ki`HR@`B,?>V??IrM@(j&J?I?G[v`/ʚ@?24?Ge@?1p`7@ B F1 0u?Dyu ?C? =34 ܀?K!?P"k*@?J?BJ 't85 `PrՀZ0G@U(<4>?KȺ`?4'Ā[lT'Ā?TZ?T@ `?%P? WX ?Dq?à?Sz:*??\?T + N@^-g@]N.@\mN=?2;@?RH ?Wu*?C 4+@?9x@?O,?>Jـ?F`?H:#b1 ?x@?;VEJ$@+QUV??':X,` ?c@$>?Ri@?X?@@`?@`?M?;S?-`W<.?>m ?II?1 ?7@ ?: .C`JI?'r?B@??W?SV`l?K:X" T O4'?W%_?X=5@-?5$?&I?3)2?ANA?2*@?@,?(@Eh?!/`?=wWZ`^' &3|_SdR\`?!נ?\q`?)˗@?Q$v@?X ?`?T̠?5LT?Pˠ?P@?T@?A@?P XDDh\ 6ӯ?R?_+?6|K`Ԡ?`CW?d R@?"g`P:`? Ԭ?Np?? @ b?;T`?<`BCSTÌ`S `Zgc`] <@?= ?2#?6Da+ cE`y{`ޠJ?@DM*dMPk@u\>`^`&@?>Ww`W%%ɷ`QyP\H+U$]z@a*)`^ѻF =@Zxx W-@@WIQ`P?G),`?^0`?[?Dl(@?&@?[s`?UЀ?B ?N`?K?'Fq,`HQ2L3?:`?a?a?I|`?@1Y7u?@-~?ST?Sz?T?I&iLO\j^R֏ ?\?b#Qo=D9 Ѐ?R?J?z?K"?@:ʀBRo?0u?@+WrYs@`?< ?3V a_Ԁms`f*?\. ?#?H`?Ui@?:]`;O$?@o?H: ' `?3G`?VTf@?O0x Ǘ US ?;?X{U?@`?9?b;`?d ?;x Pp KQ =x5@2r@?8?9a4 OLf\"?&iL2`W6xT.jI[ :?.V??AB?&N`CVI^ ^;`QB6`\ӥ@d%:P?R鎀 [ LҲ `27UxCG`?M^??2`P`VM >`Ej`]`c` NH J R{`IP@UH@X:1?V-t@?bA?UF@Cy`7r?]W?a?G'?D3*?Q̗`?@?I ?$֋2L?_T`?Q(C?D  F;I?@?,E G?Yʀ?]2@BP@Y#v M ?KU?[y@n ?4Z?>p@$W??VG?M"|`Ja@O ?Q7u?X[`?G4`7rE?"P ?F ?4?8j;?TM`?YG?Pk?4J{ Xgb`F?2?@x?,Xl"@g`@E#`?a,@?^?I`?.= E DWC?+߆?p`$Y ?'9h̀UvUK+ P6Y@V >往?Gx>!o?Ef?$WUE Qo?Dd`?QaA@ZRaO ?[ ?30@S3aN! ?6R?KTVY& Y@V 0?Pl?Cb1 Upm`Ya4 ?Ki`?d(> ?Y?@?>0@?*8k@y{ ;0~?<6 ?;߆.0@C"i?K&`?Z-m?]@?RQ`?6 ?HS ?V6?Md@?Hn?X;?W&R?4J?:[?a"?M TNGT@?KIq?QZ?5="@' `?O$?BR`?88`&}=B#?HH ?\n@?ZTP@?Qݰ?Ec!?+B6`Y̊`J .?B4!?K?W5?W0'F`)0O:8`U25g`Ȳl?:8`'r59U>v`?C_?To@?U)?5Pj?R?XՒ ' `[@XhU22:?S?_?\'`?Qy?B~8@?Gow?E@?h?Cx@?S`%R ?"?GZ/?So}?O`8kL`g`?G?E `?D?F?@@?:XC`?H+?_R?_@?+Y[S6N@?^ԕ ?N B@?1>@?Uh?M(@p`G??</]MWg O?C?[@?MĠJ(@O4?M?[?@?q?1@DWCXYyKԠ?J?Y=`?;)%7ݦ'T@BP@?=9H?CM?C ?H8`?tLe >?Et: ?>$ڠD Oe@*?GY?:*Pk@Ya4 E6v`3BX9"41VbS/`?8 ?<~ @DJ N,tY T,`?,Q;i`Yݣ1 @?Cx@6t+G@?E?Dx?2I,OGL~?ɷ`?G??k@?1D ?L局?Y1?W ?F0?'F?O?R[?7 @<=w?Dڠ?Z,z?P)`??3?J@?Q?Qf?E9U?GVĀ?M\?Ѡ?E`?0G?8<=f@< ??3Cˠ?F ?I~ ?A ?5y ?>;`?P5`?S?90Qu3W6?5 ?H" ? wW?K!?PR?Q? ?>;?FAf?If@?DX?-J@92`@A`I`KQ QY HH ?P؀?]=`? [_`N?T@?\ 8`??2?D?A(C?<`2}?%v `?H`?Q?E?Be?Zu?cv@?XTc?6I?&I ?w$M`0WI?;@?Q9\?2Am`L+ D'?4&`?GY?AaA@?/oi?!A]@\<@aaA@JĠ?Pgo?Dҿ ZF Y,?@ K?gЀS@G?=?'G@?Tנ>bœ. A?R-z:@8n?M܀?Aq?13?`:E-"`?8j?4F*?6e@?L?Po?Dx ??<29?<?B ?l5="@>@?ZSl?bb2?1 P?8?X?R ?Ho?G0?JĠ?MI?0B*@7\w?%H@4KqVXCIPG ?P%?b[ ?W?=S@?B\ ?Jt?VD@`?`?TZA=Rw A1:@??I@?,7?#R`?E?B7 Te`L'Jh" H[̇ V@?A$?M0K`?B@?`M?MCNUG?@?Gm?6殀?A ?K?G??Q<5?^:?U?`@?V= ?UH@g`?K<%@?[vRY] ZL17 ?m?6p`?0C`JX Lb?0u?/ @?*5@?7ILc@fbSޠ`?P6?VEY@?M ?Zu)YcUAs`?TAj ,~ NX%! 1p`?T5?U IiADO*z^?@?5?6?FN`'> I`?%@?H?"Ѡ>?5rS?eɷ`?k'?O=x@?RC@?`@?D6ӯ%?M;.?Yd ?M1 AD ?M7?N[?Vq@?=xHnQH?4 ?Z?QrZ@?:b ?En?7E?5@?U^?V ?:*@(8,#?.er@?BJ ?V9̀?T4>J7s`?4&`?<>J_KQZ`JB'@[kXn?Zxx ?c4C`V@?E?OgЀ>n Mt-C=??L}?Q0@?Hj;?I@?Z6?W?HY7 ?:*@?7\Y4 KC]KT`^m`N @ DoH^D-wP6 9@?@" `OOF`NE&SUU`%O?XM?FI@TXgb`R A>@?Nv`?Nn ?+?@1J4a}Rv?F(`?-܀CI@@KzրH{U?G'F?R;@0EN;@2՛Ii9b?B?+0@?B?YK`?"`T2?26`?\|A?N (@8`?^?fÉ ?Sl?0?T:?Zk+?Ciʀ$ _?(u?U0?bT?\d`?30@? @?Uʪ?]?Wv`?Gs`IYf@B9?;G@?F9̀?@BcA Jڠ?;8X?R ?NV??AqPo?"2:?4?5y ?#a>q01J?Cd?F_@?)pf O$,'t?P@}?^_@?0J ?Ux`?bC bP@:[R /Q3@+#,?<  ?L/P?B9"2:@Uc@?8q?UE ;[O$ReMYJO0AנEn???C CQ>x@?>`BE:2.n?9,'d?$?H?@Q+UPK4@?F ?L`B0T@LҲ ?P`?NZax @GMD?G ?@E`?4{[FhG\w<@RH Q?%?C<2@?$Y ?*q@EЀ>?E">A@?8r@?Pb z^'k@?G?#Ke?AaA@?^ ?6tUP?7.`?`S?RAˤ@R2?Bi?9?0b?D@?O#l@?Q!?J4?@?GX?R: ?R?DW?#iʀ?W<@?25?A$v@Q>@g,`?@4W.`T`?/6?Qנ?FJ@?{ W2!q? ?N[O1]t?(@??F`?T ?F`?+ ?VT?fz?`W?B4?P?_M@?Ow@?gH#@G'FH@,?:?EQ`?Mf?Cb@ UT?#@?R(?Eޝ LUE?Ce?\`?PT?@?E  ?@?X:?BL`DM`?:*@?P X?1q7`BQ`)˗@?'G@?#Z?&?"`?8?L?>]5@A`Fx~6 ?5c!: RdV@Hօ@K `be_oiB2_MuY V05}??f-Sܺ7?F, ?O.`?EY@?@BeMPVGQ?CG`?Ow@91 K9U ?K?Y ?ZQ@?Y6?``?`??3JiEF~1?#?BL`?-= 0x ?"Ѡ?9GxX5GBP!!7u??b?4?Z"?a,?S ̀?`?6 > ?3,?Q?W]j?cG?Ui@\Lea!#@c``#@?L1@ZI?%@?;?KVu@YLN``@y?\ހ?PS|>N ?A ?Wʧ@?N?UR?`?W'F?U=?W??6?22:?YW?U?El?Jb ?,?@`?25@?>?F`?#l@B?;?+U?1 ?Hn@> ?@/d`?V?\Q?R?)3#@?6殀(A@?R90Ggݠ?;R?CF?QJu@;'?'@ ?<#IU JRy`>m?ՎMR`܀?3 ̀I?M ?V ?V?\s ?ZN?X7B?H??`>%?][z?c&@?Mɪ`?E7o ?U*@?Oi??S{?` @aL@?DK@ 1Kݠ ?:`er@Ln?88?NE&ACK.x@-&I Hl"@R[0@R@?&a?3iʀ)3׿A@? >H@V`E ?4Y)`?1{???L[=ܩ^(`R>?D??9 ?PM: .S ;8X?Ar ?Uߐ@?T ?4Cz0WI#I;5`Q?+V ?W?-܀JA@. \R#?ݦ?,Q`?  6e@<?4X?O?F–)/`?$% ?^?W,AL[>g`?S7r?g`RB7?J`?R6D ST?A ?D'3<2@?E?I#Z?@~?CG+=LG?Le ?P`?)`IUЀP 2@??K,?!W[D>?s?>?H`?Bꁠ?X95"?bo?_O?D?C :@Ra ?3G`?:(@AW@?&?D3*??3?Sh@?H0%?I ?a*?_?;VDq?H<?e="@?O<YoLs ?4ZB`Ix@?@D]v`RjE+߆?%?H8?Q8h?5er@,BP@GF.g`A:?9a4 ?1`T`@XCFx DqM %fJD@`a`[/ `m"dAB?GXJ;@R]?"5?Fb ?Uoz@?Z-m?H)`?F ?U_`?5c!Y#v [?2?ZL`?7Fv`?M`)`TKs`?9?G??Dq?KY?S< ?J-5{;"@. ?&?NgX?G-LgPw>g`(uQ[ Fa?Q ?``?I=>8?Gd$Y US@8q)R5@AW?7A?}7ʧ@G4`D}A?8?J[ z^FZ@?+V?Xl@?Pj@ EQ`?:\ ?Y`?`%?L5R=Vb?U0?XW?G&`?P;G@\~0w?BO?w?K `?T?RiR?WK^?1 Ok@?7ڠ?`t`?` ?JĠQ?`U?:n?NV??4?F4?FhAjM28[ OT P\ `ER?*?Xe|?]1 ?M3?+S?5`?3^d`FzeQ`,PkiCi7@X@9@?1``=?A@FAfW&R,hOB@b`S?#<2@JA`@N2'?6x?GY?Q?4?M?c-?W`IU@R?7'FKT3@)x@Q1`R'B!!"Am`??l?]>`?f-t@?S+@TPK8X?@_A{ZQSSP$[zրL?9-܀?AS?Q0π?G ?R)?Yt3%S \% QJu @`C% ?R?1?== G`ZՎ6?Kg M0?:H?bB ?`@?C̔ ?-D?:Ġ?PԬ?a`?SB!!?$?M)?Ko>?Ao72 [!EV?2h?4@?C`?,?,?^ ?\s ?:]?K@?U?O ?K:*Z=L"`?P=?]w?\e ?TN?ܩP8 P&I?)`+߆:)`?*?P?P ?!e Qf@X;,?En"hKs= Hm`bt?k[@53f?0`?+ `' ?N?sXK ?D"?Q!PP?-@@JM]`?#@?An4&`?/ ?Z[?Qe@ERR4 y{LfhP2o"g`ERToQ2@?P4$@?d; ?UP!SX`D E`?Ie OcJ;@?mM5{C?H?K^W`? ݀3`=1 ?V?ac ?=BPEv `s`?>= ?I1(q5?Ro?Lu`LMI ?-6殀R?*?c|@?d,`?QY?1p`<; ?P?PQ?@?Y ?GB?(1=K$1? V殀TF`=rF>WBPF0?]e?gLQ?_?^d@?R@)?*?@-HI?K?T + ?@??'9?4 _N@V@9a4 CfAf@?b?%25P \?v`J`UE @Ԭ25@{ 5@WBX9?ZN?U ?. @?{ @8 iʀG@V<?Y?DԥGH?5="@?B ?$Av'@jI?@?D+0@29iI\X^"`Q)9t33%f@+m ??<?DX?5_T` .<K Aj?Sʭ?V\= ES ?-&I ?h E=?P@?V;?!e ?.(`?SR @?Id/X-@?%H@Y >往?1NA(j&Z@?E?E}?E?TSv`?-}L`?C?X`>=C ?E ?Cx@Dq<?Sw?[?P@?D8ݠ+^W`OL #Ke?2h@?ST?.N CXz@Š%WW _rC`TFN@=wHҸ#qc?]LG?b?X?V?A-R# LM@>XBӵCu0?ANA?5GG@8q@?#b?s6F, / I@X,}P6}9YGN(`D6@7T@Qf@\ Jc?H8?Dq?)?_?iI?U@?H@?Gu? K?Av??`7 ?$֋?:[> Bׂ@% ?0?4?Bn?N,t?W(9@?Xo?J*@?! >TdYWɴ Wj TӲ`M9,?#iʀ?Ahڀ?Qr?Y/`?WC?Siʀ?KM>@=@QaA@?:*?U?&`MS@5 ?A@?Rۀ?U ?> A46@?+'?R: ?Hb.?D6@?c ?YR``WP` ?X?P`2?@?HlC̔ #x@?Le = %?W}?[#rA@QG7#y`?5ɷ`?8@?F?3PR85H@?/`7 ?QQ@?6Px^j2 I4#[ _ B?+Y?5 `?D+@?O`?R(?DM`0f|@A&`Q$v@^UVU@6J? F@b>l(<~ 1 @R?>A`?;>GF@ǀKlL'=_G@/ @?B0T@?Q1`AɽaݰO?Id?3! ݀?T??W}17u7@?T<@?\G ?Rk8?@?9a4 ?Qy?P~;1@9e?Av?7u5R8?R ?`T?Y`?J?G5[ZP`?3|?=E>b0O >%?@x ?@?;?CG?:>b3ZJtL ?~ ?M9H?8ӀBCS27 ?O?SMK`E`PŠR~8@Gi?D`?Yr?B`?HS?jd@?hX@% SzIa4 BJ ?KE?O LB2:?FJ@?&{ ?9?N(`'ڠ'?Vo ?WA?4Ku#HD= ;Ⱥ`43*?(n?4@GERd0?J;@?Z?xq5c!QBP!@RH [: ^T"DD=D? y@?D\!>@B?9e??Ӏ:a.0xRܠ?&I ?c`?U@O8R5rS?FE3?*@?;?B@:@hb?(?GsC?S?KU-J Y"TZW9@`?I@>?0`?U+?@8 @?/?ZG`?` ?S 3f?;?Y1?]~?+UTdP*]`?2?2#>G KV Cc@D:a6iLXAcXԠ?U >Ѡ=?P?U!@PZ#cZ\X X_+`Z` [8Ѡ?8r@DR6BO۳@V: .?L@?] ?_]]?G\ ?(1=?@'# ?L{N`?P8?Jp?D #. ;?E8?3?@S|?Pׅ$WPS@?+^W`E K\q?3m ?V?K: <J=?V?O6k?L`QW@?&`?NtIK ?W" ?\?T@?aV`?\VB'MD3x@?U5?Z>?4>?lQXE[A$X+)R`?[3@?S?E?;'0?(?:]`0[@?:\ ?L}4?5[?Nr?SR`?4Y ?=v`?DY?(7>XH`TghCZ@+ <Ҳ UB??Q?WVĀ?0?C~@?bʯ?U7 NI?Ce?M?Dԥ?8-q=P^`?3.?\w?CyRUFE3?C?\?U=?I{?Q?C_?*k+ۋZL`fH@ab[Z?O?_& -}_ U[%P4@QWTNLq%?60M>?%?@Ԭ)˗@Q`0?SR @?Z`?H#@ ?T@?c??C:LHu?$@?Q?X8`?V|?!o9 Ѐ 0{ ?9 ?R) ?7E>Ѡ?Kd `?N[?"?,3?]ȷ ?f ?Qs`R0T@U TCPT W O?HW<?UVRAs`0x(n?I?U?B,?=-`?A`?=ɪ`?R?Tg ?Q?W=?BF1 NRr[:Y`A?Kop`?ap?\X) < $@?% -?:H?`-?UEMH{@T@dArZ@;!?--`9?XD3/`?[ `?Q*A(CPB?GT@?>`?3??P???7u?@5`DÌ`^[+ cg[`Jڠ?R ?I}9117u?N?Oژ>?"7 AM@C,`?1/`?W> ?V?D _?@x?> `,ISUހ?: ?V& 8qZ "K??-?ES ?@G=nz/?0wAaA@Fc?)?3`!נ?qKEN@>l?3̔ OQ>8?`4 ?3`?V?P6 L _[\1QQ@?0?D@; F@?%@?N=?Mw>E A?C`>rF4?(8DuF`?VP?^?Jp?G̍MDX`Oȳ3)2?4o `QqQ](@?l(?(};@?G?6JF.?a?W ?Ia4 ?(7?2kP eW 6, HR0T@0^EܶL?XAנT?8R hUc6?Y?\k ?V ?C,?R@?Pr`8-qS@?HSS4 X H@?N'?]x?Uc!?A 'zCIEnF9̀1 @+0@S٠VC,`?E`?E&V ?38eG%_`?EL{N`YX>Ⱥ`?G[KajG`P?@?+)%X?D?7XY 6`?9b?X@?IL;G @?0Ԭ HW<?I3?`@?M]`?9b?C>8?)h̀?%N@;i`?Q1`?R?J.`?Q\`?R`?@f|@M"|``^`uUCFV{X@Mݠ?HM?Z-m?A R6Tc@76x?5$?V?[?2? ,?LBP@=w`Š?U K``k@Y#v W=[W'N,t'd?I0?V4?S2?KӀ?"@L-j6 ?C'ڠ7sC?"T`]:*K)%Ya4 GCRL`XE Fx~UQ`[`!s`6@a`^@?B|Q?dN?]`> ;?#b1 ?1 TIS ?9ʀ?H>@?<2@L6 QR?7G@?W ?I,.2\ ?>G ?Iޖ?#-&R Jh+Vl?3 ?B@?WG?RO7@c@?A7uUP aM@?O?R@F@`HhU?5@G<+P?8H ?Rj`?U}@?W ?UQ?\s ?\ZG2 ?GIx ?Sz?1p`;|?R?X ?YC`?=I?M@?X,?M}?Q@?T?B?K#r?W`?GZ? @?.t@-Dl(@G?)?C?&@2@)1?<?Sf?L9cM$F*?D+@?X?c?U7 5P ?AP( ?S9 OVb ?/QDl(VzeZm bc%d`X20??NV?R`?R՛?E !P^^ɠPw?9ʀE6 @[b.F`IJRjE?"7 6V|K`LUUE?@[@?6 S(?;8X?\}4?d`?F$\TR ? EUԠQ}/?;?M ?E/]?D?V\?9F~ h̀?O͠?:)`O\jD?B9?J?I??X?gЀ?M*?N@-y`?@E`Uz@c#<'?F$?@?Ro?J*GQBW<?:@?E?U`?_g?bۀ?W]j=y`%?_l`?]7b !r C?1 @?F@?@3@?1,?="|`?1t@?S`?[:?L ?I?T`?6~ N,tW@[A@Z Lk?B ?aE@?bo ?P?GY ?W@?Xza?B`Ll]J?O ?Ue?SB؀?Q@4#O?I?V# 2:nQ-D@? UIﯠZVge+ ?P!$?VI`?N `?6(`87M@Ux]X K!?G?3b1 Y ?9M[}@eB@6H`?TÌ`?<~R,G NG =y?\(?UàF|f`?X?U HncW?-`?4>׿A@,`5@?Ce?R?8Ԡ?4Y ?L`?N<:?=A-^|>`P`?:v?XI#?FaPG ^a&?F1 ?E ?Y?_@?M߀D T<@W+RnA?`? ?_?\@?CD [Q T?'z?96;̇ I_MC?)a4 ?GC 1rK"@?EN;@N5?5 `?Q?*+! ?J(?U?M?C`?B?*Hfo@Td`P31 P|U G`D@0Q@V 6|K`<:X,`?B&Ԡ?'? ?Td?SF~ T + P?X@?YɰEWD??7d|M)L@i+8Xq1r?b? ݀6??5c!3b1 1r ?;i`?!U JwIʀ GH`9;5`E6a1e @ŠTE@?%@?=?F0MSG`Wj ?GA@?Uk?L@i?UV?M$b?W<?3R`>^[nW6@b) ^h`s`?Q ?S ?R?N<?QAY`[T`R#?2g`?:k+IP E, ? )30y@>Ⱥ`?:?W `?T#AW@JRy`?-w?`AD 1C> &@05`?C4 ?Z`?X*?T?XG?DGk@<\?5%v `B,?O?ei?Pm\`Tp?MH{@>? 5{?I`? 7 ?X?`@?1 GY S|?5 GYS|M&I RX c|g^׀cR`,AW?P?9`/`?M_ W(9@@ǀV_0?!?IJ@>=2`?7.`er@? y@?M^?L-j.m OBW<"Am`46@B`@hb?7?Sˡ?VO`?O?A ?D@?No?G?*c6H`B?2E:=rFH w@?;۹?(l?JC?Ks`R b`X8?4ҿ ?Dڠ??0D4F*LUO3c@L)V ?/:8`??dZ,z^|>`5f?=y`?J]?VE3?Y ?J`Ej`W5Ld?CF?^:?M?5`?EY@?N"X*Y0€?Nn?[@?O͠"iV=`:X,`?ZՎ?^@?XG?TI?n><?"g`IZ ?{[?T 3ZI`? K`=@U,@T PX P@K^W`KԠZϠgϠhxM*?O5`?`O|@L WYȽA@ERS9X=߀?Ѡ?.`?Ks= ?VR?TM`?R鎀?L ?+^W`(7'\w2@ 1;߆A`L2h?H`@?T?`ޥ@?i Ѐ?fq^?Zxx ?TL?U ?D/]4h\ ?2*@?'MD???J9?+Y@@?4Q?RfylSsJ@HQ`H/W`ᒦ1F`PbL`Q4@5?a% ?c$?@`?A?`?KԠ7ݦ@y{?NT`?]߃@?LkRU??Ik ?_`?`w?E84?V@?YI[W _ `?V-t@?_ ?g`QRׂ@?3?Z ?Z H?b?d ?SM ?=ɪ`?D ?5j`er@NրZiE>?X@? [ R@?<@?Y,?Bv?Jt?`?AQ??T ?Pzn? A>rF?38eK.b`Q} ?@E`7Wf`O4`A FgeCKe7 3@$???V`?QyCX`T0Q?.?s?MC@X`PPKVIK>往?(C?͠;?B?T ?XSo?`hb?]\ ?1?`L16`?@O >ژNZ @IK`2c6>=DrE"?J[?hB`?iY!@?V?=?Q?T?:_*?w@?ID?X`?XÅ?A <%_T`?K`?Iܰ@4`LK8 ?E5?GY 2 F~ @{b?@. ?ay?`H`?SR?`??ZnBK:?88`?E3,Wv Dx ?R`?P?0jI?>?S?` [ J5@?QS?R[ 4B]@5j`?P~;?_ ?I3Dh\ ?J!?a?O۳@?%?; `?`"@E`X[ C?D@I [;?K`?;R?@?O?G?ѠZ[$fBVS w@=7G@?> ?2 ;R`P+?Bm@?D?>?^zX?cZ?K `1>@I1 ZURRgl ?&p`?Aޣ< YT@?5?]@?` K?Ek@+ 5{?LD6?Gݦ?6?@O ?KE?Q?Ro?Uoz@?Rh?: ?3?I"?;8X,K@Q0F?PԬ?ZϠ?2՛Hk72 ?D@?U'I@?D"? ?RP ?R_R>er@%RN`U)/J{?-?ElR]_?(?K `?@-?X3$?Wn?:?Dנ?HT`?3??a?f0`?!o`R*[ ?\H`?Q"?Epm`?L`?30@rFg`.]??6I8" BR`?4/]?>? F?LK?R^ߠ=`Nˆ?>o@?->@/]GxC`3f?%?8l@B G#y`?l(Sg߀]X ?B~8@?[\q?QY9025@?Vl%?^= ?R?/ QNA[g J ?H`?@. ?Pe ?(^XO?Av' 3V ?T@?[U?II?I?J`$W?a [`?@?Py?D<@?E?\?Ve@?WIx ?W0 VbQ8-q?A@?S1`?It3G 1 ?S, `?`A?Qr?8?Qݰ?TDC?1Ju P V#?@?]-` S@]t-R@?,?NU?/f`H $$`?@y@?@K`?BL`Ds ^.KKX?4/]?2h%R]``?G ?Y. ??g?](?RT?Fc?R?< -E?LK?X#iʀLf?M@?`o`?ZO?\& ?Y˗@?3u04&`?t@?/9?#̔ 3fD:?&CM ?J0G@=5{W(@p`?Dנ4^?QQ <@$Mv`A36N@BP@PE=@Y ?#?:@V/`YE@X9?Lg?>N O@R6`?9pf?K9? x 4G?@@?9`?/w@F*G`?#R`?P?C:X,`?.ր?R?6@?'\w?M`>ژO,?&?S?>C@ QYaD \ʀ ?QC?0`?XE ?`M?C|?P?dr?T2Q;B``kXa`er@?Qq?E50G 88?>Ӣ?Q??i@?7v`?XՒ ?]`?C^d`RI\k ?@?Rj`NcRo?.?OKQ?Cǀ?/h?=nz?4w?1r2gl A?Q]@?Z*?3 ?SrW?f\?`b?Qb4`?X?R!o'?Aנ?:=4O2T% @?7~G-aIX,>!:?Bh?X-?Bꁠݦ?+;? 5{ 0K?O`7 ?1@Y,)`?\H@?B;@LNPB(7 M@R#1qer@5@??&a'B?[ ?17u;'PFN@?6G?FՕ`??`?R{^?]1 ?X ?X7?Wf h̀R,-LG?Lf@?@%P ] P?@??Ӏ?P2=?|B?34 ?Cu06|?+ ?]h?[qV?Bo4+@H`+`?29 !7u?4`?@ 1?%Cx@9d?J ?Oȳ?0`$ _$@??`?,@XR|U?@G?O?KTנ?JH?5&V ?= @?2 IޖBk8?7\w?H?]m?a.o?Px?R@?Rk81?`?1C?Y}?@-~?M`?[@?\p?A`? z@?81=?M{`4#K߆?^``?mR?[8XX?1 ?h̀8" ?>,t?VN`?Ds C\~ L@N= Fd?Ds`?Pm@DJ UH@t?HKր?Rp?Rgl > ??`?7ow?E?C6@?` ?[ܭJX,`< ?Vs?F& D`H3$9l ? ? 1F`??46@?)?;Jk+VV`$'?JJ?' A@3^d`u'T@?7 ?S~@?\F?a<?_u?W`?T4`?P?BCS5W@Z`\>; ?7sC?9?9f@22: l(>R?:"?G?SLX@?T?Kd `?I}?.G9c?C?PH?Cb6p`5?>4 `)NՈ`?*k+?T ?NC@ 4QUv4Z@?W)`?R@?9?G-?QS?Q @+aMNZ ܀0$?MJa?QI@?T ?Q>`?Bm@?`P)?L}A?2g`?MLG?$DSv`KO$?>:?[2o_C ?BJ ?f?Yʀ?&@?0[@?8^?3b?D`?R?H8W<B+U U?R b`?`O6?A PgoBi@?7A@?94? c@=LG?RA=(?)`?G(@?6|`?LF?I`J@J|D?6VL?)/`?%P!?Os6?Sl?P?JE-?KM>@?V ?P 9c;0@?E 2r@`F0R鎀?HR?J=$8%נAvDb?͠27?:?Q?K@?P`?[[}?RZ>G%_Y`W}Ax @JGow?N(`?T`> 6lu? @?)B?,`?Il ?Y8[?Ki`:X,`*b ?C+@?R?V?Hl?J`?Yju` HӀ?KY?6I== H+97h?9f@?%P?͠;5`?Hw@?M=Db^Ո`AnTG Zi?'sC?U `?K^W`?=x@?<:?R?\'`??͠L2?Dl(?I@?2`C>z?W!?# [<92`?VVL?S?K`?Sl?[-@?W?3%f@?<~?X’?FJ@Et: 7 ?2@?E"?BE"V"@1?H};@?,T#Q=(Nk%@?E ?*T_y`? + D}AM Dh\ PlR~8@:n?25?T#?`?V=`?--`>er@?Gݦ?\f?VI Vʀ?E?PS`\ @5?0O ?'?2k?0D??s6?*(@NIB?3?0x QIFIC 9b?78KրHE{ӀW|`T@?J ?U*=O9M,`D( ?#a?4'ĀPF0`{ O?Ck?4X7? S|??4?I0?S9 ??2?1$v@?Tl(jcY!1qNUJgl 0K`1$v@% LR֏ ?'9?"@(QIʀ?4A]@?O|@?]# ?Ce?"7 ?N[?R6`?9`@@w?7C?HSo?Kzր?L`?b܀?S;?Vn?G ?Q'O?P?5rS?8%נ?MC?\fh?[ -?$&`?co?Z Q@@Ner@?Br@?@+Ap`V/ZO~?9{?P K?"`IP :*U-?F;?H<2@A PI?"oKeRtP_?$@?P?I_M EH@p`? Ԭ???M]`?F`?M`?Ja BΠ9B?R`?;KXTWSL?%$?SA`?=C ̀B\ HӀGK^??(@K@Bm@D??h?>Z @[ `i1aE GQDM`4B]@??3. Sjb@WYZ e? TTi;_e@\~?=?FL?MW?Sߓ?3b1 H`Hl"@0WI?2?:[ ?B9?Tr?P$<2@?>;?K.0@>X?Y ?TCP@SCˠ2v?GC?2Tl@2Tl) (8?Hօ@?Y?a?e ?X^-ܩAS6 O?+|?H`E??]̃?R`QנCA`?Q?`?M^1,ME@"?< ?A`2o E7?JhN? ?:@"IQWz=j`?R)?QhڀBkO`?(};@?=-`J] U5P < ;T`?H!?IF`GzFge?=?HW<?Q7u?Q@?T@%?7C=EL`.ր?@_?\u`?K@6 "gl ?) ?NN ?2E:HKր?: rF>X-S@6 ?B?UC?>pZ?A _ fh `8jEl/#l@LcW@SR8ԟ3`^gb`ҀaCݭ@l(ae%`F`?F ?W?a`?YȽ?C.>l?H@?X ?Yɰ?\n?I]gQ)6 QJD E`R'?"@?bt@?[@ :ĠM?"Ѡ?T +?FLJ{M`8" 97v`-D@? 4::*SȠ^S;? ?7?N<?$M`/]?PTp?P&GtW? ?V^ ?C^d`h?U=?]*?%WEt: w?6e@?Qf?Q`9`OS@Dҿ W|`\wF??F|K`?F~1>pB՛?iʀLZ%`B ٥`9/`D֋B?!F`W<?;?Ay@`C?BZM]E[`=Dh\ ?K%Y ?2`UU `8`AvN&)?BĂI >往?!{X$a# R?Ao'd?E?M?5?2@[@?J ?`y@?c?cH?Q@Dr-}?0@P8 ? ?`?P/d`F2?R)?c?aha?D?7d?CI0QJu WN8W9Cu03c@C [@ N$ڠG@>׿A@>%&|`>R?J4?QD B ;^}SB@ 1?5{?+H: P_ BP@?I?$H-q@G GC Vj? TY)`9c@?4I?3 ̀?1U ?R ?W? A@K`?R@?aQ ?S@?>p@?Oi?A`JNT`BIܰ@ E`?I?*z^;@yR`P? ?E9U?> 2՛Q3,`?#.Zpf[ `X@p`Վ?"P X_ Q@?#-?+Ⱥ`Fh[[}VP<G@Ic@B0T@VhR|?EP ?=T T[F|`RC@+?`q`?d?@?Q@?C?Py?AV0WIl?R" `Z#W$lH $S{ aE^ 9?TM?Y"?Z`?Gڠ?%?Z'?WRSCˠSJq?@o5W@TgЀ?T?`m"?[?O ?Z?\:,:TXLUOJb D^1(C0>>F/`P"C U?.m?4@?F?JtDK]#oF–?E}?K`?G?$@B?#-?[qV?;?1p`7u ׿A@=TYG:E`?,`?: >b4h\ ?3`?N;`?4`?%H@?XZ?]Ġ?AJu /Q>xqVn@^`OA SDyu ?M}?U`?N4 `?0q@CI~7 ?Fӯ?L?3Z) ?'?U ?WF6 Xr@T)B?"gl 5@YrSY/ 4 +?G ?B3CˠLfHL0z?C4 w@:=?>a?gl T!`RR _oiCV ?X`?K@@Y/?F0M?]R?I3?&$?T@?VGmca}RWj eP g{VW(8ԟ@NV?ZD9RN`?O`7 ?FbI`dK3/`tER"o? @Š `?^w~?` Iɰ_D% w@?&}? /;۹> 7@ 0f|@?6?R?I@?@?B?GB? ?:*@?SI?M#Q{QU ?FJ?d) ???Ik ?O KdVOJiE?S~@?L(8> A?3`?N<?6?$?TO?T1D@25@T W{ VFJ@?3 ?38@6G?2?C.?G??A$v@$W'MD?Cw?H?0?>?[?[z?F{ lMSd?8Ѡ?Y8[?L?88?+??P`?`h ?R4`Kb$F{ ?2#?U ?V ?PĀ?P`@?E9??:8`?B>]0O?% `SbB -@?WG?64C?0z?Cg Iﯠ`h YN42œ*b ]LGhP@`GG\wPQ`e dP#@[z5bt]O!`?@ ?P?0`?S@ C QQ@87?X)`?Wu P@^D3@Dh\ 964Z@6GO<=܀?;@?E ?Kݠ ?Yc?R֏ v`?-D@?R_?M ?Ax @?Aܽ`. QL[V& Ft?KӀ?`KiGI ?@x?X D+@cl*`q@?a?IbNUGs`?C?SE?gl F7 ?<?TY ?2@PyQU ?"`?V8@?YB?P@??T >er@?3LQB?4Y)`?Fb?CX`?Gb*?G ? S@C"@?J?L?=f?0[@AQ>?;S@?`?_%?X`?VZ@?Rt?Sz?Q)?7 @(u'v`?@`?Xw@?Z ?P<?AL[?@?U ?dx@?dG ?DII3Cˠ?,M@]H8?F??6K`T Q`P9S#D@?B??K L+ c,V?B;`?>@A7@?=P?Ep`! J ? ?T?Dt3@?:=?W?Q25@H?1s`?G@ ?往?@?Jb ?I?&ӯ042j`?9?26???3b1 ?F ?K<?*)`g`?,?@>%?!  `?5 `?F ?P?MH{@Fk2`Ul7z?SMK`?B2: ?]l?e?# aV`]1`?9BV/Z= ?[ `?W>ᒦ&?P?Z?Se ?Mw?E3?);5`aE˝S:@?KR?Ò?BVS ?<`?'$s ?2n?S_W?To?C?:H?2.n)h̀*?)h̀?;e?N~$?]?_=?DZC4 ,?Ob?L<@?S @?`[?RI@VG?Kg ?b? ?ZD9? F?0z?UsF?X-q?D}A9eA]t?@?O?M\ EQ`U?@`?c`?\`DM`[@Dr?K#r?VM?X`?^@?^ ?U=?E?H7?Vl%?W?N?9,4Z@(@p`?6?N`?S]q@?C`%ɷ` ?7@?J4?W}?ZC ?P8 ?BQ`?$-[zQ'OM-`?>@?N ?Iv?Z@?[/ 3^d`^ X’E4#90ArZ@? y{?S?Q ? A?+!?G?(@p`7?A@?5@-j`?5n?,Q=R>g`?&(qœ?7?D?Rk8?_E`?`(D?M(?8<?Ks`?AqC3N6?@G ?V9̀?UT*J7?S9 ?cs@?Dl(=*?@1Je \JZ3`?C/?=GMH{@?Q$?eܶ?b-`?Q@?:@y@DJ ?Bm@=IQ8hFh?4ҿ ?4`H MY@-y`5R4@?D ?J5@?4F*?G(@?Rfy?Aj/]7?w@?: ?S@NF(`?FJ?2Gzh?)a4 A A .V?=S@1NA?4 ?D?Iy?L ?T@?VJ?6J@*?B ?@z>1`?@a`?Bi@?A7u?5P!;!er@?`A?aݰE `ܿF27QH1$v@?Q|?Nn `J*@'6x?WN8?`Q?SI?33@_E=Bk8SUZ+'?T6@?BR`5 `?C?^(`?a ?^`?RX9T@(@?UR?^I`?Siʀ?0<?[?R? =30@?=߀?O ?Iʀ?B?Hyn?X~`?_s6?P ? ?E`?J?Q>;`V Ei@7 ?Kk?c`?b"`?40?7?@w?U5?cG@?\@i?33?)?;?4 ?A*)`?1ޣB2I?J\]*R`? c@?I}?*UJn]<Lo`;KX??[ ?`*?Q8h?X, ?_l`?:9J(GA@Cz8@9@K'R?VL?Pe ,w2gl ?Aver@C@?;,?RO?EP ?5$?5_T`?An?BL`)$i@6m?8-q E`L@m ?--`BG `> `?1?@?M= ?W%_?J@EK ?C ?Q ?6?>Jـ?Q)?BO?"`?H" ?SP$?F.g`-ܩH:9b?<?D@"F`RkS@`!ޣ?R`?Q`?1?5?Kd `?SQ?V`?GL6 J`?\?hw@?Pr`B@?P?bܠ?S ?)`?.q?3<2@?1R???PsȠ?VI`?N (@?:?90? [ ?% `?]_ ?d7`?D&`G?EV[@X: ?DZ?[p`P%>"?5&V ?3?,M:GF?5?AY72?n<A<`? M@?2Π?Rj`?O2?A?4+R?G 0y{B#?FZ@?XR|?S]q@?]1 ?\xtId)6FTQF[>z?M`?^@f?]O?SZ?(" H1aA@?A[ Aˤ@R) ?C3?T3?/9??h ?I?*[D%?Bgl D E`Vx~3 ̀=-`X@Fc?Ih̀?T?R5@?BTl?2?Jv?VM?^P?_s ?P_?3%f@?+S.2Ѡ?Fǀ?N @3^d`XZ@; `?X-?a?LGSFR5I?&p`?HW<?!ޣG,Ej`? m ?A?"œP!@Sn`?Mv`?dK ?R;i`?C?VI?AF`?<#?Rހ?O ?6?,`?@-?G?'v`<`(@? )`??TM`?c.?^hK?P*?K 2ZG`B5?P?4&`[ @EP?A-BVS Pǀ??@?@8 >n? ?B=? `?--`?E ?\?Xc?Ipf?N[?F24 ?/4?.0@; QSBĂ>往IF.U >`?Z?aϠ?1ޣZ\ASTR@uI"]ܩ] @H888 x@?5@?Mސ ?VF&?<:9;5`?3b?/hJ]` E`?W ?X?D" K${[?AW?P?H<?HKր?J GB@?2?MY@?ELT?IF`?EJnBiRM9H?3Ke?O ?O?G`C@W7k0b?K?J5@?A(C?L`?|?Hl?6@M`Jr ?4Z?HѠ?UsF?QY<{N`/#l@?K̇ ?' ?@?Q @??ӀArZ@?'`?W ?[??T JVFEH@?P`88`?E?'FB??: ?Zfl?Tx2cT`5S ?M}<2@Q=?<?V]$往I`?>m ?LCy`_?@R`?'t2 @D?G@?N `?3%f@?"n?k@Ja &I? ?FI?W?B6@?E?(1=?1?:9B5@UGY? K`?D5?(N;`B4!?PH?IP"]+@R4<M(/`Zk+R HBoU]EToRED?Vq؀?e0`?_2`?H>@Y l?D/`@X?D$?Uހ?C@;`D?KԠ?a2?Y`?Oȳ?Tt?Bi@MrFQCg GAF`?#`@n>?J2-?UC`?Kl@WVĀfCP 1?Q ?K~ 6]G??.?NA`?>$ڠ?@F?Oe@AS7 ?5B @F?@?T OS@??>:?A}@?G?M ?0`?2 ?2RW@&J?1r?4*Cd?  ?BFZ`P7E0 ESޠ`DA@?9H QWPG ?_Y?hW?]6?4>往?>V??M}6_N\L@?H ?6GFS@?"g`?Wk@?Id?>0@?XVI`?U7\wT L~ 9i#b?"9?Gt?L?2o?=W?If J|Dd@Ym`?"n?8l=9HEi?:?JA>ژ?L3?d@?U,EH >?3_< Ac'?JC ?3.F(`>er@?C_?S'@?` ŀ?S3:&ǀ?X&;Q@]0O͠}G ?51 ?T ?WJk`?A&`c@?7 =yJT_?(O ?@` A?S?e?KYJ@]^I`?7sC?*b RSyQv?*[ ?B?'> -LG?`7 6ӯ?3`@?T?QAW@S@> ?E ?azm@?a`?B7 ?IP ?P!@O`\7CBCSJ?z1?+?BT#]x`B`R֏ UB@V/`Db+*]`O5C4 >%?E˝?L7?U,?W??'9a???Q@@?RX9?8nDQ7'F?<?=?@Ou?MB?e0O`?Y '6x1 ?>N E`J`?0~?U9?C?<?Mj`>QXV"R`?*@?0"US?AB?Pzn?Fge?F??A?9R`?J`?Y-?V?3?=I!>@?^;?a ?B\ ?S@?`m7\BP@VcMH{@? . ?S﹀?Q7`g`U?` [`\pۀbP Z ?AD 93V;R @?Kʠ?S#?D?)?-= 7, ?BG `?U?T@?A ?t?Nk%@?T?:5@?Mː?`?R@'> AޣE?D?O4?(7FJ<>_T`?GMD?Q ?/f`>Ѡ?St=`?Sv#:X,`Rgl @%?:]`?Q(C?Jxx ?5rS?K̇ ?N `?% `?O4`?_?G8_ ?@?``?UK|_Y| J7?;V ?_4`?a6`?ZK ?E(<AoIP@=ILN`-?XSo?X:`3e@%?<8Qf@?B9?Y ?B`?j?G?J71 ݀Q(C?,?\e?R) % =*? m ?N"?Fb3Z?. ?.oJ|D/A?Q?E`? jI?C ?LW6?@d jIe?JD@?Xq@?P-~CQ?G ?V '?@?5n?S<2@. U5QC`?Z?dJp@?SETBzk7rVv`X!:L`y`>4 `JQ?`6m?J ?QW@?G? @x@?C`?D + er@?*E-?MF ?O!er@A)?L?Z`?9?R`?ja?fՀ?R[ ?CM & @D0}H`GVĀEy ?&$'ĀIt39U ??=?J$@?>= ??? 3<2@ ?QI@?Sb?/`7 ?,`? DJ F?w@?W[??6k=?&J7~Y[ `I L ?0@}?AY ?@5`?L>?Cݭ@F4TG\w5?>Z @?${[CCˠ,w?=LG5v `P>:91 ?O?\xt?F~ HW<Sb!D ?S/ ?P?-J@?$Y ?Tk@?e?^`> &, A?0^?Rv?@5`>er@?>er@?R@?NFǀY)_T`?T 8?F|`DK> ?<:?GY E T@R4V B Pz7gݠ?*Վ?QsM`?Uy ??f3??Kx ?:Pq@=?67 T`F A_Z?B ?PCW?R#?EP?G ?Q#`?Sy`?Wv ?Q)?2k8?46@?C`?=w=ܩT@ w?S ?9U ?K@?e@?` ?Q?["?S# ?&a>x@H`U J`Q0@XwF{ ?5?G ?:?8 ?Q%?92o?:&ǀ?Gz[ D J@Ò8yn?'ڠ13/>er@OӀ?P=(`I/@&|`?23 FI@?.|>`?U ?UI?H ?C?AIS8eU SyMDNtQdQT_πB7?ON?TZ@?:'> ?Q?:a?;8X>>往?7.`?P9 ?\ӥ@?J(NI2#M PE`8W<?+?A#`?G|`?Y_M?^:JRgl ?!]tJ{C?9`?NV?;HQ`X^^6ZN Cߓ0 IjNW`LQBa 5{?$'Ā?6x~)3Qj?A)SET|N?L ?W@ ?I5`?"v'?K: ?a#?_S@?Nm>_T`U ?E`?A ݀?+߆>܀PQ?%$?8yn?OM@?]w?=w5y ?Q'O?T往?MB?U_`?8 S XE0@UxD?:?4%7#y`BOC=?F?7@C^d`Eޝ ? E@M! ?,BP@I@T}A?Fd ?G.`?D?&Z@?@?Hn?08@?#a?_$_?g?_`?CO1?-= =I}QT6YﯠS@BvDd`NFG6N@?4h\ ?Uʪ?XUV ?Q+T\WT@SPAp1/`=J@U `; `?G4s `Taqg I4@?H: ?Yʤ?)c@ 5`?P@?{[QJ#,?I?D>?4`/:8` ?,?@n"7 R`Q@J> A" I`TxM;b$?E?P_ p`?4^?Y?OR z^3Ƞ:@?4U\?P??+?RÏF@?7C?#?.@?S_W?1? SUEe`?@}H`?[4?`}?.V?N54% 8l>b?X?W4`?9{[4%?:?S\~ % ZR=0K`?"#?HW<?J1D P_ `?M&I ?-}4?H`?ON!Z[?DJ ?R?O+?,w9>o5c! "E=H{@?Uc?c3?Rs`&iLM` HSoOKQO Pr`|?J ?8-q2 ?2`?D@vF24 T@?7:E`?V@?F0?>@?/ @JtU) X8`Y[ AR>er@=D?8 ?\ ?NZ @Qg`ZI|`N@W|`)?;UKw 4 + ?R?60z? K`DO @1 (W<??S7r?`"?[ `?H?. ?MD?Ja ??lPbo U?/A?T$?NV=D@@?3a?M`?6|?1 >C^d`S/`K@=D?(Ӏ?:[?`*?[fJ4s ?E`?^X%?`{ ?Ap`(`?bB6`8yn?Ld?Rn`?QQ@?NV?>rF?"`?J`@y{\ZJݠ?30@?Mh?_?@?c?Q3(W<?6t?U,?J?#,`?Lg?Ok@FhS ̀?A@`?[?[߆?Q~ѠSjZ1:`X4@UX WzP`?3,?Ke?24?4>?E526Z`\Rd><?G?\?UG ?5O?E˝?QȺ`F|K`?DÌ`?Ax @P:=x?Pw`?N A?A*)`?6J?0?M/?Nn` @?B`?5&V ,?s`?A=("D `?3@l(Y`P+ BѠ?4?EVW ?1]t-`N7 ?@f|@?^?Th\ @O O?4o?O^P?O?QL[6b@_ˍ`9 Ѐ?D?0x Sl[MG.`/ -?}?;,?>u@@`Qu3?/X?SM?6R0`%?E$?Z'?` @?Sb?2 ?2i@?T??T + ? ?@w`?Yv?Rh_`?Ggݠ?E0[@GE1 6(`?7t> `P+ @sȠ=I?&}?`?e|Ơ?VE3?1?+u#?<?-?@?D>@?NZ @$J ?:H?\Z?_b?_'9?NqE=Q =@'ڠ<`;m 4% ?`>er@?R*@?MG ZR`>$ڠU ?JT_?^&?[U?(H 4Z@?F ?K?? ?L3\s Q3 ?D3*?I-?D?O4@?T??V>`?H@$Y =nzK6r@V Qc'>U ?J&ǀ?Dq?;R`?GY ?VLM> @O~]e?@?bP ?@{b?0)`?[]d@?@`Qi<?DԥRI@I ?!NA;"@?4?B&Ԡ> \Rv `SGB%P!7 5@?6 ?$% MwS`-?Fh?8-q?{ ?T ?]C ?5@?>;`?Q!?JA?SJq?T`@?`?KU?Q?,3?QJu ?`y@?SP$?= @?$HQI@@@?8k?B;`6G<2@?<~ NS?A?M8-?(`0 K2? ?IP ?WN?BL`OE7o ?G@ ?S?WA@?V?}?1=?Z?^V@?T6?Bœ ?Q% ?:r M`?2o?N= ?)SIXyPl/@27 ?!ޣ?m?&`?(" ?CX`?Q}5y ^= ?<Ҳ ?ie?al-?Q ?[:>?R`?,;VYIta] 5?`?^ 3ȠL~?6{?UkWg SaVΠI˗@?1<`?S# ?Y@?@nLI0?h?AaA@?@l/@?H@p`?WZ`?UC4\MD?Ku#?[,?Bt?:?FtBӵM`?J@?XP@?T?`?YȽA)S @jI7E8@8 ?Ѡ?Q?AG̍?G6x?b?<\T4D@J&ǀS ?#?N (@?.n?&H`?Cy`?ON?X ?Ih̀L6 N(`?& ??Q?P`?U$o?l?$?QP( ?Q?QY ?T?B??@?D`? ?5v `?V;?[?R ?<~?5 ?R ?UkAD Z 6x?NN ?6(`?2?`R[: XV–PRC`FtLwBn?Ia4 ?a?Y?-E:(@G@J@GGI?9?CM?X >?^W2?K@DÌ`??\7?M`E, 4@?C̔ ?E54'_3`?J?nH?i?Ks= ?A*)`?X^?>Z"]R,U[X20A?M܀?W?;Z8)`?B6`?VJ?KU??ʚ@?JG?Q/?L9?Pm?Dנ?\?A?6=1 Gk@?9(5?L ?U?`r[?GuSN'?(" ??d?4Z@<D@?=rF?g`W|`?0w?h>@?]@AjOU6TCP?BE:?Q ݀(`>l(?OA?H1=?9`?%1 ?B?A`?W-?Z?A@'sCF9̀OKQ? %?Zj8?_͠?W3?A :[ (Ӏ?E@?C?@?@1>H5 `"~8@?F`?1hڀ往?5f:g_ R`>l?Lw?O7gݠ7sCE? 6VLPq@W}P@b?Dנ?:?0?9a4 ?**HXAcV`7ʧ@?Iﯠ?Sn`?W `?Z;?Ld`?L`?bF^]UѠ?(C?1 ;PMJ?Cb1 ?^?X?IU ?W&R?b2@?PYd bTP>6N@P7Lc?8" ?P`?"4DÌ`?0WI?Wk@?WY?Q?L:?M?Ue`?E@DA@>Ⱥ`?Q̗`?&:?$ ܀8n`?5Q`?>JـE@L1@?F$?W)`?QP( ?BD`V>`_T`?7tQ@@+?_?\eu BiKI`?2~8@0`I TP?E$?= @90{ ?@֒`?A_Z?A<`?IL?Mx?Q@?Q7`?A<`8@Gd?gl ?H@?Q>?Q 0Wڠ0-~?S ?:~+@C@7dD@ZY1?ݙ?0?E?er@aMNf`J ?9`}?bS|SD%R4!WGQWTڠ[%Y YnN>[ ?(jO ]BU `#?;@?:L`?E ?T^?P ?*z^?(?#R`=D1 ?"_8)`;%Y ?7@?725C`2P ?7ݦ?GX?NAY?P`@Q@ DJ ?I2`?@4?l(?3qc>E(<Gd?9x@?WN?Xfo@?N ?R[ ?c|?` ;2 ;?E@?bB2:?$? **>z?1 ?8&|`QߖBĂ?MY@?U ?S ?R?:5?C`?W?<:'d?J?Qf?@@?Dd`??@>٥`?'@B`WZ@?&}?*Վ:8`?D?Pw`?' R?KS# LM@?'v`?E#`?ELT?Fn?@X]A7Pm?2?`Y/?X8?4M`?$s mPV>R@ ?$3V acfӯWN8QYbI9OA@YUg>@Kl@H\'Ruak Ys H`>?sASB؀T|N&}?;Y?֋? . ?,)x@Lo`EY@?HBV?[{ɠ?T@v?@59USiʀDyu ?FN`?C;&`IP ??L:5̈́ U6? #?P_ ?=?Jex?T>?F~1?46 J?3??L "k?J H?MY@?@<?Sf?d?`I30@?K ?887A@?z^?7w`?%*"?5W@?G4`?P`?Kݠ ?; ?)pf?1?`?F?SX`?U?S/`?Pn?PX ?Ub-?So?>o?_T`?3?D + ?Z@?\17 ?O6?K! ?Nn?@ e?"P m"@?;qV?N9`?=`=߀?HH bj`[I7ʧ@?2Tl?I7 3%f@c4@g`Q=?7?&, ?4o?T R@?Uy ?A$?0<?C`@?H>@?5@-D<? ?B%@HkA"Ru^u@Nq3u0C ?(: F/`*?K3qcWv CzW<ETYU NRr?@?CF?S99f@aX; T@1q+"@?Co}?P> ?Mp``?TL?(jN?K?bO`?G `*r ?.= ?#<2@>@?If@?X?GF/?RjE?J|D@?6?Gt?JE-??gЀ?,Q?>?Ru?V`?ER?/ ?S/ ?Xӫ?;u#?3|?P K??3?!]t?H?@CiʀJG`?2Ѡ?Y?]~?T#?P?Xu?``@?VU?<2@?%@?S?Ja=Aq?<?>Du?-܀@I A*ArZ@Pe SDG ?rF?$d`CF!t@ .(`?;C?R?TL ?O^P?;!?A?W`?V@?H^?Dn ?(84/]?5{?`6, ?,M?3. Dx 4d`?7 B=T@MlC!S\OU6|%?7u?% ?R?aj ?R J `3^+?+?G?@WI=1 =ܩ?`,3C|2 /`?%?T?N=`Sa_;+\d`5-b?#̔ ?Xe|?Q`>g`?U `?]j@?$.?A?@^?Aps?S<?W?D2?/4?VI`?SA`?0ژ?7 ?CF?4{[?8l?8>@*=?&?]?\.0@<@?J4?Ds ?0?JՎ?E'@ #/?Ds`?P~;?I?="|`:8`)?J?T4`?5S@?E??_gЀ?U?#b1 ?At@?W5?N= ?U?^{K ?@{bL@PCWRHS4??h CI~PŠCZO>S 8n? 8@Co}6 O?6?Mc?B0T@?@w`?Sy`?PZ#?6{?E?M[z?N ?S@?"X9U)F?E;;?B@2&ԠQVH`P\JI-LSi@JX,`?9?Q`?R#?[??d:?d ?UEUԠbi _E`@z7 K!Ȳl?G'6|K`SZC ?@#`?]`?bo?WY ?g`Wa7`U7 <@Rj`WP!? ?"I?X?T K`?5?V`?U?S{ ?Y/@?\CC`?U#`?DH@?F?P8?HR?5rSFmMj`>m?*?F?B4!r G?Sn?R .`? ?6??T?Yi?Y ?S?AV ?B`?Q=?RWF@? Br@?2I?G&I OL RnA>$$?6~ ?OR?,Ҳ CM ?Oe@?T?T?]?7w`_ Sx ?UP ?^I`^Q?*J@Zt0 ?Ciʀ'F?U ?R7?^Ӣ?]?Tҿ ?K?N&?U?MGr^g\daJdDMB ?4\FbWzA@?@H?U`?\@?UN;@?G`?%Bœgl ?0E`H S|S&\dKs`?U3?V{X@?B,?R) ?]?Z-m?Fh)= ?3??k@?Hk?6 OC4w?V?PT^Og?>`?T'?U^?Gt?#R`?4?8j#>h?K+ ?Q?Y(5?\M@?%"N@?I?Ipf?6 )`?<2@ Qk <:?LL/:8`\XLk ?Oȳ?`x?] @?V?ct`?`@@RiRZ4?GE=Tzh`*. 4:K @1,KFp`$@?2 ;.@?2*@>qPK&`?A ?Q@??8 >?_ ?[]d@?RD?[,?;V]QSd?N7 ?T??Y3往?R /Jr `EA{?œA}@9 ?*(@?H?T R@?J|D> Sqc$?[ɭ?TCzY/`aa5`H>RGrLM@:?<@?I?0~Q []d@]@Y]@?@?0O ?F@;,bTa?GIx ?JiE?B?Pm?Z?_`?6Z@``@`F?@Ԭ?Y$`?MN @?KT` <T1D@-S@?KC?P6 ?S[?Jr ?*?G?H!A% DF*?,3?3Cˠ?P&?S$sQps`xBiR9h̀P~;0?@?PsȠ?T?8fo@?:26`R9?F?Q?C`??PF}?HҸ?KS?d+@?P~;C'L?x ?4Z@?"k?G),`?&|`TtUѠLnMp``0?;6IW{ PR?8^?D{['z?往Ggݠ`?,Q8Kր2h@x Y bR fMdJp@W`Rw@}H`?E`,Y@WN3 ?@>%?(W<?=?Qr ?cM?TQܽ`L@i?@?T4?b?`?.q?>(`?]p``?GzEl@?2Tl?S1`?Px?O@'> Zi2`?U:H?4Fx~?%S ?Cݭ@?X`?^hK,F?,J`]C?*&ǀ?Cqc?U?Ge@@zJՎB.n?B?\F?T? 5`3 B@/,F9U F?N*?eX ?T`?E?Mf?N.Z`?\s?Np@Ug_ VQ- U?B:]`S:`J[3. iʀ?&`?-HFb &J>EO ?#3?0Ԭ?!?`J`Y|`['RL`? ܀?QBa ?K4?:(;)%?3_?_qP@?dҠ?MhAޣ?Lc?ex`?a9\?K@?@E`?Rk8?PBcKRV5 ?6?;u#IY3?9b7J|DZ`U >:UB@_BRkSa=H`?QD ?S@?AD ?Fǀ?:  ?Ui@?T@?+u#?Nt?U\`?A ?I@?R`?9l ?I/@?_@ޠ?IPSsJ DO?O?Xj?W>ogrP[0@?G`?#:'?EЀ?S/`?`G@?fn?^ A?UH@?PRM}_8RQ`M9HCk?;)%?5=@O6J(@?N= ?dT ?U"?DڠBDs`=j`3@R`?:r ?^?B 5W@?Cz?L?O: ?_͠?WnGO+ Y6O$@?P@?Q>8Lʀ@+?2?0E`?U_`?I3@yOML@` `$2@?* WN8bha@X1ˤ@(W<N,t?O$?]`?[@?>-C ?Ei@?aC?QoOf&?bV?f& ?LB*@??7WL@Y?Dx?Ds`@Uc@?2gl ?QI@?KV ?1/`8?8O ?W `?(`V>SrWS`>Ӣ?U?[Tנ?UB@?MD@A<`P$U\Jـ?>?T`!U Q @24?5S@?B?X?^@?K, @#?Ft?^G ?VW>L[$?&@?Qf?^?TD?I?K@?YX@7w`?B@Bg`U(<L1@WA`-N=;x N:?@Q?=P?C?Vn@?^yd?P@F, H<?OV?N @G'FZ@?PÓ?]D@?F9̀@?26`?L=F A? ?Ie?1?`>;`?/?@@}?=??oi ?A-?Zl?L?(?82k8?9?Bk?Sl?P.V0?G~7gݠF`!t@;&`8`? + >x@26`@& + VӯE`?]?Wm@FE[>Y?GY ?Q@?-D@. 9U ;&`A͊RP AF`?$0@?3@?CI? ? ?" ;?Tb?]a-?9Y@?EF?=?5n?Gw`?(q?d?>n?`֒`?Y|`?A;B`?Dx?A=(JG\t`Mx?: ?Hk?Q@?`Bc?b`?WR?E{Ӏ?FE3?R?I0@}4 + ?5c!?F`?OM?MĠ?O?c?f}%^?) ?X O$N$ M^`k\1?Fge?ZT?@`?C?X ?S ?6?F`?_S?\VB#.D'?I?Tf?A?ݦ?!?B?IJ@?DY)`?PR@?S???3?!qJA@Ih̀,?>?Dw&1r ?:.`?1ޣ?E?S)2?:*?08 ?Gb*?GI}S@?Wj ?bq ?Al@?Ar?FTf@96܀??: ?.@?Pm"?U)?>>mT`!נ?^|?>`> W k+?Ee`?TQ?L^`?7 ?A%?H`?D6@E7 [ʠ6I?O ?I;5`?QL?Q@?# ? ?)`?,+ ?O?IEN;@NX%<`2&Ԡ?Aˤ@?U?C@1=? 3?@+?;m ?;R`?3`)eOKQWH;?TM`?U?A"?FJ@?S?S?Q}?E6?7>= ?DX?N@?Cb?6?:"?:?V?lY@?kd `?,Q`S?Hl"@?[|?@ˠ?-?-[zQ[ R+`?B?T _?K.?J?9`F4P`@?"gl ?[?Y,?: ?@x?@{ ?E5?P?MLG?R<?X?Rm@?@Ó?-ݠ?, ?, ?KӀœ,Q`Q/` `?G#y`3.Epm`CK\q?%?Q|?PBc?RH ?F?;V?S?Ba ? Վ?^}1?Z7`$s ?Ggݠ?ESSI>$ڠQ`?J*@?ee?Z?$;?JHӀ0@}X$֋?=w?L`?/+)x@EP SՀM}@ 5`6殀4@A > ?V?Y`?B U90M)8:?Q4@?Tiʀ-&I ?R4?W̍?1 )Y?@Y/?US ?cLX@?jC?c?6$,I?H?GO+ w?)`?1r <`B:\ F4*c?,o`Pa'OT?.]?Gw` CG`8.րSn@P@}?5 ?Y?d?c]?Q6?l(??5?1(C?`?Qj?]@?SG`?,`?Hb0b9x@OZO.|>`?MC ?S/?^?M,`'?Wt?`Ki?J?Ks= 97 _E`=x@ KTK?1R?LON3 ̀?V ?O ?6$?C-?T-w?R~8@?"~8@?Bo ?N Rb`_&E<DXT֋4^?9?C?R?]?c&?Y?@?*?Mc`?C`?6x~?H?T@v?P ?B&Ԡ?UH@?b\@?Za ?L1?F??6x+^W`?2kOMLG3?7F#`<'?.m 4YF?1 ݀?VhX?\?KZK6r@NL?If@?W`?5"Am`?JA`@?P@? : ?Iv?Xy?Z(?T ?F?9?B?J?4 A @D`CzC~@{ +8XQ 9e ?I?.ր27 ?C?P螠?QCH?m 3WF\S `?8};@?agm?`]?Fc?<`?M*?GMD??El?e/\@?dq01JRMƠ?E@?G `?0= R?1e ?JVF?@`?X?O5D?Q?Y4 +Rl,bȀI?'u %n?[rJ?d?>pAr BѠR5 K?_T`?I;5`?L?D'Ā?Wޙ?XE <`64?U8b`?>Z @;"?%R1?`/6?X?a8?Sy`?9t3?@)`8::8`?. ?S|b3?E ?dɹ?f?Q?B?B:X,`-܀?N$ڠO @?A? ?[??TBj`?@@91TH?Bӵ?`?a@?H6ʘ?@?I=?1@t?-&I ?E/?A?-?0E`?6$' Hs)6?HSo?Q(C?T?P#`>54h\ A&`? ?GG@?%R???\}4?^" ?WLQ?Yv?R,`HY"?&@?J?z?4h\ ? .T3@S^d`?-x@??Rw@'k@D6@`?7 >ENr_VGJnA)?Y?=I?Oi@?MQ$?A9\?_?V?Qv'?T"'@ 3!?[`?VpF|8?Q)6 :aCY 19t3F!D/]?-?\f@?MU@H?9?< -D@?HR3?Yd ?d?DxV: ?Jt? C C,@H?9ޖ?S ?O۳@?@{ ?%V&;9ElD@v?&R?D E`3Cx@ rFB ?7?S(??KC?RQ`?T?4 _?@@?P, F?"Bӵ7+?Id?O@?Q?\CC`?TG ?F ?W?U@?!=6Z@Vb aK>ր??Mu?S ?QR0)`?+?M)?25@?HS?U_T`Ë́ _QE ׿A@AqI C-? ?PQ?ES@`Y`?8?Yd ?OC ?O8R?UR??s6A?`M JCFAU EUԠJZ`HM@?E9U?X*>g`VN9`D FH``?*<2@?,Y@?85 `?P?Wt6?I Y+YOgVI`?! ?J. 6iL.]??`7 =v`YItR?E?\F?'L8Ѐ?E?R0T@? ?,?/?=߀?T?@uX X[@3R`?DSv`^W`X]Rgl ?D`?EOh CM ?]^?`Z?8^?: ?7 OlE?2*@?!7u??f`?:@?W@?d`?Q#`?H?S$s?A/``, X7X 0@?K?QB?E=g`?>!?N#=߀^T@&(7D% E=?3?C1=ELT?Q4@?_?T1D@?U`?DS̔ Hs?Il ?B_?9l ?<2@[eaF HҸ0If P C???W_Q ?P6 AT™@C0@ >8?In?P ?B@?5"q ?O#l@?R<?Kـ?K ?5@?<~ ?P?M`IN `F$6@BE$?0?<?1 ?@?C` =}?1=??6Aܽ`PI =u?<?RB ?Hw@?>er@?QL?;:"?="|`?:AL[" ; q@A?<?: V`Z`?H/W`?;%Y @  ?=@?D6@<+ MD?HhU?`P)?['?Y ?D{[Wu*XEHRQ A"?#Cˠ?m ?V;?a}?LhO?F?W˚PanY)2iRgl \?v@?Te`?OqP@?1?3?M?Uà(`?0?z2`=y*[ ?Ia4 ?U0?_yB.n?AP( ?0K?91Y @M?B?9a4 O0q@?JE-?!1? ?(fo@?;!?H8?QrZ@?= @F{ GE?88`?S|@?NT`?QS?M A@(AoZjQ7u3ZG??5?V> F?!>@WaE@Y${[A*R`?%P?NgX׿A@@<7\w>u?E?$F*Ea:?+O$?E@iʀ?@/d`?Sޠ`??2`?AaA@?S=%?Kg ?B?1>9)c@826`?4Ì`?D ?qBP@&I +@?88?=F ??<>?JՎ?Pq?AW@Kg UA(?;߆F$aQW:E`?>u@ LBP@?@_?I`>O$?Bgl ?5O?5ܶN;Tk?25?S?S`?V?K! >@@@`@?A$?R7 ?I?N`?EF/Qm 2o VW(H: An&;?B?MY@?E[?K4?K! PY/d*$`V:?T B?&{ ?ER?R?c `?Y38fo@?$F*?[?\t@?P?(fo@)Y?67 ?Ic?JT@\@Iʀ?@K`?Q?F?0?1 ?O?\@?c9`?R@HW9 `SIRC 1r/oiIB> ABSM B#̔ BT?1e ?Pׅ?@O ?:)`? YN"@9/`?wO.`F0?Jw?Px?D% ?2_8^GE, >ʘ?MB ?:;Ⱥ`e??(l?Dw?0"?;i`?>?G-?M+往N= P9 K"!v?7Ix ?I Ѐ?QY6@RP ?>?3U]HO ʘ2E:-uK@N'?M(/`?[h@?M@?A@?;V?(8)6D@vFZ@M)@?Sy`?]w?S@?QY ?OWW9QST.q?Rv?Qg`RY?C/?@OO2`VZ(@3?P8?_?d1?P8B!!>?PI ?S#?K@?>??LL?Q?FlHT`?! ?W9R@?P,?2 ?@.?CCˠ?=j`?X@?ha`?bU?A*)`?<  ?*z^V|`Rr@?C`J?3ǀMIJ@?D`?S5 ?4@?1>@>RrR@UMf??@??QJ[J?P->D E`9$i@G\w@֒`;"@U;;O+?3m ?5 >?&?'r-y`I5`8l?> ?'F>qA R# G ?A@`?B?A*)`?Gv` 9]g?1,?7MD?2Tl=?vHuV-t@w@?Q? U5Rw %@5H . ;5`25?!נ?B?O?Ey K^W`Sʭ@IbJG5@31 ?=`?_[w`?Z?Sb?Rp?B?L`?PDJ B&ԠFr?VW?\ӥ@?!NA$Y ?U2`?`؀?U(<?M`?FN`7A@Lj5`?  ?K?6@A͊Elv`@?Bp?R?}Kn=x@?AW?Y ?GgݠUVM`?,IBiE??d?:Ġ y@0xDqC)2 jI>[ ??l?Kb$?@.Al@KC:5@< R5PD5Zz^F?T3*?SA`?Q@?ZϠ?GF)h̀,?.G ?V?\@?5@'t?XD?DM`?Pn8 ] c^SfTTeP9 Bk7F.g`YQ?P?`.?Z^Ҡ?S$s?$% 8 ??>?G -= A`?);5`?&Z@RvUV?BѠ?^A`?X]?G\?2E:?8};@5 Tr, ?>nNˆRWF@C#S9X>Ѡ?_@?Rw?#,??#l@?A @?IrM@?+G@]om V^ ?ZC?dp?H<G@@?V!?`0 ?J7 ?PF0?Sy`B@\?[+`Hn?BTl?QO5?b0F?=-`?P%?X?P G̍P"}Y ?C4 ?\yh ?Rvq@"`IpfO0K`?ELT?M3?I[ ?0@J HQv'HI/@2X9? 3O1?Ix@?`n@?P@?Ko@?b͉?`?Q~`?KM>@?H?\UO?e#|?TQ9 AP( ?@,?X`?&`bLY^/M?$W?TL@?S`?7.`?*@??ʚ@FE3X^@A ,EUԠQXLk ?M?B5@%V=_G@? ?.(`Ha8`u5`4 _?FTf@?B??4@?@?E@?J)`?8?#iʀ?QW?`@?RܠKs= I1 ?Sw?_`?Q?89?D ?RI?2*@26?V`?[&Rg`?25R4?Z;?H@?A]@?B@?J?<Ҳ R UJ,z?S< ?_?@?YD??6k7`?Bk8?R]l?Dq?e) ?\ 1F`?I`?_Q?@FT% `LYV>V??@5LT&R?3+?9U ?V'@?F#Ke?#?9ʀ?Jz^?X@?Om*@?: ?(`QL[_OP@?(`<2@)6IQD P X6C,7@?D ?P`?Xk/ ?Zi?1q?4?`Z#?\@?E `?MB?S|?Q̗`?Le Il (Ԡ?K?M3>qV@AV ?G@?S^d`?4֋TfR ;6Ra;B`VV=`bn\s ?2Π?d1`?gY?Q#`Ke?:?<?U@?`jI?P^?*@?TD?G `N>@?EJnI7 ${[?Ua:?Q"?Y?aW?QW@?HR?Jt#2`?4֋?B ;?V '?ZM?K@?Uɠ?W[`H %@Tq?Fa?G!@?Cb?`?Z3u0Zԛ[H~H7(q;|GAQ ZO+?F@?I[ <2@?!? ?"34?ɷ`?6G*? ?G&}WUހTQ^SfT 6, ?9?9$i@?"9c?5?I"?C?A/`ݦ ?Qc?HqB#z?Q ?H@p`'.`C`7@?8 ?Fx~>g`0"?QC?`r[?U?<`DK^Pt?=fB0T@YHT`g̀d 8?3c@?hi@?j3`?V??E$?Wu*?X1=?Q3?R@?Ki`#P]^T [ʠ#a?Q7u?P`?S?P-,`GuJiE\|AZer@?Q ?R5 ?Kg ?RB`?_~?Uv?)˗@?$ _L@`MA?4F`6}?,:?0jI?\?a,?-D?;YEFP9 9i(n??4?R[ ?J@?Pe?Q E;;^2'M%},?GMD?Qs`?H %@92`Q;?29?6 :. Xԟ`A` ? UC`.7 JC%@A@IJ@@ 2@?),:]`7?P_ ?S?3Ke<2@K: c8@\UO?5?=H{@ U?P"?QQ5rS<>#%f@Bn4`4%Nc@?Q`?Ӣ?PԬ?F"2:C@V/`Zv`S@C?8?G)`81ޣBk?g`?F24 1$v@F]?>`?PS|?I@`?Qc'?D`RMƠX1 ?-> `?JZ?T&`9B?7#y`?3x@?A@?Q`?\>?J$@?.?"4Kx Q/`?:\ ?R?I`?S?Y?Mw2@F|`?? ?R@P\c9X?Z?@x? G?=J@?G ?Ae ?BAɽ @?M= ?Bׂ@?Rހ?bh?V?6?C/?Tn ?RWF@BP Z`1?`?=nz%?)$i@?g`?Yt3?ZD@<2@@.2N Mc`?@31 ?Rׂ@?DjB`?6?Iܰ@?RH?@`A5`YT'> ?T]@,hOU}=_T`)4`t?V# ?e8@?Y#_T`I@G̍?1@?O?"KT`HuD@v;`0HWGW4`??Vӯ?ES+@`4@Y"?s`?A{?!7u?M`?[?C{R][s= Cw?+X-@bw?9t3?](/`?0w?6z?Ul?1>@>];"@K ???X|H ?O`?$G3-?4?VUY`?ap@?dWC?TԥAFA @> ?=?B?9pf?UJn?ApsS{ x ?TH@#bM'G@."i?Kd `?OQ?H ?Wu*?Rk85 ` b?O@?Dx ?6(`?S{ ?T>?-};U? Վ?Pz?O6.S5 CF?<C Pgo?4F*?P)`?G ?9@?KIq?e3(?bq ?E=BhLq?E> QfYp T4`ISRT1aA@?<局?Bt?0@D`CIg`1?=w?[<?E8@=?s`JE G`SG?P_ ?R,wF`x ?C?)JhOC R<Ҳ 0<?JB?G `BJ ^-g@b+`XԠ&@:ZD^?Y?T6@CG@V8@A}@? ?UI{`?Z,z$6@RY,XACژ?=1 ?JՎ?DSv`?Hn?K?:n?E(<?M\ ?A @%*"Bœ?6J@Ⱥ`O`Tr 4'?0f|@W[dfMy`?CG?SS?\& ?R?0Ԭ?C ̀?H $?L ?U `?8H64?),,TTi^]> @?Wf?S`@);5`K@?2g`? SZ Pf|@IKB> ONUVn Uv `U, Gs`M^aTfu?V. ?[, ?;0@X?1נ?M߀?E1 >i>>7?P?0^7@#KeE#`EY@?#??M7?S"?`?ZO@?I ?! @@[@N;X YF`?W ?ViL?I6?Bo?QE@?S8`Np@?T@?Z4L K0@?Y ?Z?G ?Tt?N :aH@Sy_p] J ?Bzk?=&I ?@Ia ^;<1 @PZSlFӯ?\@?e?J*Q@?0ؠ?W59^!@9G`?>9JT[E1V-b|@N?W0 ?cn|?`(?[4?_t?aH?c$ ?dAE@?Ts;@9 ?IiD`?O>JwKz@?XP?Ba/bDN5S?+I`?Q!cVRIPFU?6`?R8?C$ ?$A@?Q`Y?WO?ANH`3A?6??]@?`)`?[f@?d# ?cw`?Xj@?[f@?O*`D>?P6?8A@BH@?$A@?HBAX#@@Z?Z[?T%`C+?AA`?[?6eN$P?I'?I݀?(?=㵠?VX?Z,??8@?5`?Q ?;4F?s ??@@Խ2a?C?[y ?]x ?@PD 2+w?2zN=xfU@A?N?W 2@?O\@?3@?3 ?Z?F 5m8eJ`?TXI_i>ި@?Ivh / )P`NPV#^o\?S|L `J` |@?Qle?J@?59H?[W ?i?`?e?Z?O?1 4].D@?4?J#i?L^?6'?@?G1?8TgW5,A`??Q?0CZi}aF@[sWT'=F`?K ?P@?3L?I<?Hq@Q `Y'`}?Ny?H]9z9#?[J?b?O5?BP?7 >o?QO`?YV?>,f )?@E`?P0~`?R N`?P?JF?Nv?bZ?7B~ QYCp{`?7 ?PRp ?T+ ?=0P-Tl?;?Xw`?I ?B4?WFS@?[C?V*?U9Ԡ?LN@?CO?R, ?FK ZNӂ?A?U ?6@MT`9}?RH|@?M0@D `Pޘ`D6@x?X?a?!&`ODJ?VP?c;?K?T@?cԘ?Q* ?+ ?E`?/O>?5Y?3+R?,4?_ns>U`4*@=; Gr3)>^`\`\#@ZY%`?%?\P?[$?GϾHAP<?O?`sI?GT@AD.(@?x-@80`<Ҡ? ?%?Bhɀ?Q?Lr?By`?:%`EO~?J?XI&9`Rg% BBv@ CZa|L`?},>??I- ?GY|SaS`?S?_4j`?9}WOW ?Ez`?XOO`#xWVAU= 5߸@?T?Tc7?>/;>Ӵ? @?DȀ 4eG?Qh?Q3t;o1 ?CF@?YJ`>|Q= ClL ?2?R@?V8i?P?G>uOJuK ZLVC\P\54`?9G`?W/T?Eq ͐}?M(w?9o Sh<?X4`?[* ?,C TON%?%p@L@e`Wy=?H?PY@?JN ?PV"0`V~8?5B`?1 ?[i?Gu/*>ɠ3L?Di ?EYX`?QkLF0EL@LBV6 ? JiUP0~`Up@a?n?e@?a`?)U E?T?QE+ `N -8?0?!CU@ɧ= ͠?@s ?Qr) ?_ `?cH?P* :Oa`?},?FC` ]/\a?R@?C4A`>g)`Dw`g%&`?R_?;ѽ`Sy6Ū@?CX`4tK:%`?4;??PH ?A/u?A ?T(~ZsX[RSi@TclI`h?!j. 5?ToΠ?EFl@Q ?J ?[j`?R `G@ (p@TO a+R?^!@?U"I?g`?B ?P2">GT@BYu =? ?A?!j?0>`?2o[`7@?0>`?7!`ZF]B`X7@0C]@B>G@JV;iMq`1@8?^@?Ya 6 Q#?7 ?b?XX?*?EN`?Gg?@/f?%?M?JǩWc@a`: ?>-?6?$F2({ @hV`W^?!?Vm?>;N?@V`?Y缠?Ps Ba`Q2,`?$SV`6?0j?V@?PAw@?A@?P`?Rǀ?Pz?C `7*g@0 ?Cs@?)/;E5?Ny?["?PD4?"|`?!:,tHn`E:?CJ?Wo@$0L`X֊@ 1?G.@=)@NE 9- ?&S ?:Ӵ?4U??`?K&`?2oBqL[;Y`?@f@?A#?@?9RE>Ji1$?3?U:`?P@^1d. ?,؈O9R-AK^'Q5?@sIN0FA,@?4ּ ?#`2 *St Q} ?+8q`% R/M$ ?Q4?Eƀ2b7O,4?Qi`?\1?BR@g`?-`O@mU@?0P?aV?^K?Q?S ?B#?Ap`??XDQ5`PB`?E?O~?D *?TǠ?\?N7V3NՀ?3j?Y\?ID ?7?GnJ0Mf ?M ?\@?MQ>g?~<?`.?G|?Z1 ?Cu?Pӥ ?6НA@S@5?:l-F`Qo@7;@?Sn|?RMi8{ H @7@Au?Dp?YU`?>Հ1 K@AhH3c`G|D?:b?Sւ?$~6???(a`@1 j@?5??LV@/f@WUR`>6?L`?U7?S?Fl@IRE?[?a1@?[ ?Z6`?P`?Ai@?EV?`ExJ`VπXL8L`?Aƀ?F@?KpI`?V?a?]] ?<4?Bq?\?V\?8?(7@? ? > FUC`?I{?R@?47 ?>ߎ?SxW?L?8lS?=֑?]`?K5(`?Fg@_13 ?QY?dh?a d?QÀ?S70?J@3u,@?71?f =%.Fn 0N?G?C |@?9p?N?6G`S_`&K ?Wg?KB ?R`?a@?R@?7w @?Eb?S ?!Py??!5Q_`?6`?\`?G; ?'p{`?X?ZVT`?H ?6:?+?9I@?!}K}m Ky ?A@?X?D@OؠS@=#A׀?FK ?[3?Yb?HHq@Qp: *g$ ?7@F<@H"???Kę?Bk`?LD ?LʀtH >A`?Ee?[XԀG ?4?Gtܠ?+NW?:&?8UDYÚ@?=?T@?9(;uG@'?F?֑40L`? ֑ +M2K? 3@?Mn ?W+ ?LY`?@?[,?`?:@?S, ?W@?U-0hS R"`8?1E{ @q#u?>U`?F?F?A/?2?)7;@J;?3?[Z?Z{ ?RF?O ?Q4?V ?N( 6ILB=$?!]?0>J Mr@`V`7!?^~ ?PU ?1u?Q ?K+@?HP?Pa-W`A@?8B"`+F =@?MT`?O(?@h?P6?V69 ?L?>@1?BU?U?Q?08K`6%``A׀/\@1d.?F ?U@' Q=  ?>2@ 1E`Kc%@ ?KÁ`?E`?|?-i`??'6НQ/?.Hr?S3"Z@`ia3 Op?Ӡ<@?@ C?\ ??@)U`?P!)???X d@b@N*?%Q_`:?VDu@XEF?91l@?A?D?U$z?KH ?(Kz@?V˰?`S`?B_?7?Y?Ue@>YVHs@?+8q`?I@ ?SC`?Q5 ?>+`?;T?Mg ?O1?A4?&9`'Mq@MYQQ`?/B?Vg@?O ?4]?'ٙ?;P@?P٪?B0S6Y۱@JvQ\ήYtàLbF$t?+B`.Q\M?@`?N@?0ӥ ?Fn@?7ó@Y'`??cL?WDP Q25Z!?-?C ??/=?PO@?DZ?'u? <ҠIJj@?5?7i,?<2?T?K??6K?P6?MG?=z?D`?U?V@?<JbU ?Jv?DGGJ 5WCVPS`?B?R@?;/5@A >`?:?/?JV`BϷ Q`֨L ?BI`>õ ?Gx?aj?V#?Q$ @?X*9a`^x`Q BO@/,4E`;iE"^?C ?CCI@-0??/f@?U ?XԀ?B?It7?Z9?S`*]rC@?<ڹ?Gt`?&x?R$?d8?bPl?R`?9e`?3W~ ?5C!PR 1J ?E?G,2@X﹀[qa$z?Zp?M?vX۠[; ?3 ?J|:,O@Հ,Q80]c@??At`?Q*&?I'?6?U'7@?PB`[S@]% ?L@?JW8 Wˠ? ?I`?B{f?(Oۀ?7^?C?@;q?F@?@mEJx?7?5xHq@ ??U?/=;I`->J %`>?KȠ?]X?Z`>{ ?i(p@Y#] ?qa?X?J:h`Fυ R?> ?9e`?B >2q?*x?3?8@?.}ӵ ?Qs?X`?4`?B(?U?N@?EH?R?\QN?B0?E_?Q{P@^`3 >J ?TGK?7p{`;3ROjdXA@?Q>g?I5͠PIM@`?DA@?T΅?Gu>b ?C @?Sd?N"?)@ ?р?O??9j\T5?` ?dx?TK D9`?Q4@?~@``9 ?G9?J?= $ X`@+[{`?]!Y?Jm@YT좀?Qu?V#CRTc ??812IrGZ?Gw ?SG`?;`>?6K ?UX}`?PO U\d@R`77V2 VC\?< ?Xc?=M QM IVBAJ߿VG2N Q?݇ P Gv`H12X;QĊ`C`3?+8`?A:?L@?Cw?@N<"Ġ?N~?>O`KE 1?]?cj?E@9" JWNs&J@-`?M2?"UyVP(?7?>&@C`?N@?b}?X??Sj?Tg ?N?Zl?Wz6``f@?AU`'[`?R?e?R;3|?$ B@?7@H<-?S@?Nx`????G]?Ip?O? N8(?; t ?P?P! ?Aƻ? ?A oX\`P?.?1 K@?-:F0d` $P??ǰ?O5`?K0 ?9a ?H?V3N?}?YF:@?KS@N @J߿?H?5@`a~`b`?E݀Q}]\|" ?M4@??F{?@B?P`?Q`?L ?.KÁ`L \J ]6'<?Rl%``P @aĀD5H7@:Py3fҀIJ2@ @?6'D&qU<`C_(@?}???I ?B2 ?D`?Ef-`@EL@?Ƞ?Sc ?P} ?9WJ?D6?[ ?H<%? &?Pf%?ENI S SGO@?'@7^Zcx@T?%J ?Nf?%b`LT 4km`?<?'?@)`?Nh?Iz`?Q ?Ac`PA E?@VM V?V?e _`?L+@I3@= ?3%>? ?A$?2hɀ?K`?]?PC?'?=)@?3`??`?So?R4?2`D@. ?1?Q5?24:1YX3c`C=?>\(@I XR@4Hc@?U8?`?5L ``P?Ze?Z?. ?3!`?U?X*?4J28?3fҀ*T] ]Ӵ?I9>)BZ?/\a?Ra?S- ?UU?SKr?7 ?8@ ?Q?HF?9uO?M?$`U `> Q?N]@*6 ^W8@A`??@?4dۀ?Cc?Tр?J;kGs`+?8|?L?Dq@?/;?2?C@?D@?F??GE ?Qa?V)?G?Dy`?[q?:L} L :@ DeBQ?P7`?S޸?S'E,$@@[3`??M?V/`?M ? t> :?S@F?A`?Z!8╠:Ey`6F@9Y@Q?S`?X(E`E@V 8 )32$FQ'i@?4 ?\m?Ev 1[l ?G7?Gl #a?4)?R?Jd@>!@WWA{-@?PΠ?\@`?_JP?P2"G8@w`?P?Nk4PE) ?MS, ?a@?&a'`96 ?b@`?a?@N] ?FE?XG ?J"Q?-W`?+? ??M?7;@?R ?O߀?\yE?[V?S ?@'.Ȁ?\ ?A+>`?4t?'?@P?p`)}?DGK?O->b E|C,=ڀ@`A:X?Dg?,؈-T`?79?@> ?B @?RT?6!k 0 ?'cW?7? j?5L ?F?Fڠ?B@?W)N?c2?) Nnŀs ?'3J DP ?ML@?YE">@Q*&6K?31?,@?# ?'!?)uO?Ac`?QG?Q5 ?I?IӀXV@3xWFQ_A@? ?S?Q?QD`?H ?Q2?3@^^`O@<"Ġ?S@AJQEWX7Ġ? j@?W<?G?;u?[ Z?Vr" ?E7`?B01_`K???^?b`?^?]l`?PH 7i;?D(?>D&q?5U?]" ?&%@\X@>F`?R{?JH$좀J|@9{?@g`?#4 @ "B@%^ ?K+M?a ?C `X*`C?S@?W.Ȁ?@FdN;NY~F$ ?3ւ?7`"= 1`<@Fې? RE?@ /46 ?N?>LKjT+ Q:@G]"?)?G?V֠?FAgw!L?V?*f5D\;?A&`?a?P鋀?!'`?D?0c ??-`?QPy?] ?Qp: #?g +_?uH TLĀG؁@?R?RU?W5?Bb?FT?[f@?Q.@ޘ`D` ?C ?Q} ?HB?Kf@?a6?`?EFl@?RzN?] s2EaHBL(>@?60S?5 {?Vl*ba"5\m:SY RmK؀NϠ@@?9?!&93UjF`WՀR3?Q?^"?G@?H`?O8`8עDi<DD?QOȠQQ @5`> ?9@?9K?1Y;?HX?R?E=?V3 q9@ FJLG?!?U\?W@?0<=?~>'_;Ƞ?%&`?Hyw??.d?`EN`Dm?O`?Vz2W_ ]1:`?.Hr?\! @?8R`< ?QF@?aX?a?J$??I ?N>?עLJN Hq/;?X4`?V@ ?@@?S~`?Ra@,р?@ޘ`?aa?F%@[}W @`D`>?Is0wTS- VUC44`?A ?Z2`?SX @?D?0tUd\QN7H>.6t?N?Oǰ?SS>Em?E>XYL@Z=%@F?"`?8?BϷ ?Jj H}`c8@?.`?]`?T?Aݹ?K"?Dx ?@#?TA@?\t?L`AGB`܀$LS@?N?SM ?:<@?S?a?LyE5Q_`@ ?;?)"&0ӥ OPV`S"bE?9$DSV`K@ `?!`Q_` EL@8@?Q| ?>HrEti??2<~AUULr:?*^`aA) ?,?WC?I: 2 ?4x ?E| ?D ?9- ?T@?cr?ZL( ?+2s'l ?M?Q 0-5`AZS?P2"?W ?D"@>-D5s?3$@FA,@?!ʠ?M`?1`=:l?-`?GR?Rm($8a`?V69 ?]?`dJMN:=U\^G`[H ?.D?P3@?A@B%`[KT?.m?Q;?TY?G IJb?TM?`2?M@?T ?b7?G^S} S$ J?><`!@-5`E?C ?U?M@?Eh^?=W *S OހVzOǰ?'&?VV`?WU?1Y;:у7A]#bq@?- LOUؚ@2"`#qM@@W, S^?3=6?P ?@?3|?HP?#=?TR@?cP ?7C ?Rf?RC@IP [{L?Hml?Y9?U`?Op`G@J{ : D@WuR"`JbJ@8 ?7 ?IU?Yȇ?Oe$@?ې?A61?P]?R@?X?V@`?R ?\ؠ?\`?4??O>VF Uo|?T1`?bL @?Bj ?!1@?^`?cu?S @?A`?#v;1߀?>%`?Y~??PH$?.x`?Ah?:|@?4/#qK@?$`?U[`?0 :̀?S`?a@?V>?9j\/e$@%@?A 7B`@sI?5Ҕ?J0?AݹF@H 4{ ?0"rr`AUּ ?Wn`?[?H﹀?T`?b:?XFcGR@G=0鋀RR. 0+N.+8?.?.U`8a`X]LE>J ? j@=}D@@2MU\Q>DSV`G- Kg@CW~ L Iѽ`>L?2:`?8&?H ERw %b`8CUMAh?!`?C ?MP?[?]?Li ?FT?Vo)?Q;?Iy SA V ?U̎?e[@?IB`@?X?a?R?@?`9@?XU@?dL?NHrH7Ġ? \?UB?at`?WM qaIs ?>9?`R@?Uh^?.?UD ?``?Xp`?Ta`?L`?;m?O꺠?O FZ(Nk|07 !63bq@EF 9`@_D`# ?;&`?F?AI`?9@?I$?VՊ?Tn* 8@SOS6F`?)J@2oDf G@l c QUZ-TnP1`E3a5^ 9pH̯`JO6`?B<?`a8`?_l?:UKQ?@ @?KP@?G>?R?IA?DR@?U?W?`?QY?Ep`@?&?P ?L١@?I?Rǀ?O꺠?8T<9P C^?@?2?Gw @?V ?QA?Y#?ZY@?"((?Gx%?1i`P$VfgM ;.@5},@mZ!?H}?8f ?G?V#?R?B3" 1?J?_m?HVm`2'?K?ZaG?KH ?3G@>{ ?W?`'u?7>V-o?2m*?W?cH?U34:Hr?K:?[(?Pؒ?0K ?Tg?\ ?C`?#|? 7?6``?I1N_UHUU )COC,H D_ . NUǡ`?{ ?Jу?'@?>msEGM ?61?__ ?fV@@?RQ>FG`OƘ@7@?I?P`?#|?E {?Y<?9{Es-f *9A@TSV`R(/?Z1 @U?b6@?XS?j)?g??(XwRa`?+B`?!@?M?R|@?Hp?OV@?C- AA$Mz7`?9@?Bë?9@?OC2?Z ?X?Lf @;@YF?%28̯`1d.? x-@49?Hi@?a?S@?D?` ?a@?A| >G@?38@?5>`>ӴPM[Iku@l?I0?X%'@?KQ?Y?%},A?CD?L7?1c?K`?T@?E?Jj@?P@?:6 ?Cy?DBD?2 ?9?RԤ?] ?7w @C~`?#%?^`?.U`?Vr?DoΠTTb?`?F"U|J``?14@?B@>J U ^n`U/mKk7t ?#?.??J߿?[?S`@V7E!G@P[22A^@&v*`?G@?LA`.@I>62 ??&?C?Y?ZKa@?Pc ?R?Fd6`I3@?S"?GZ0C Q?>ɠ?`BI`?SG@?R ?Y?B?D?R?S?U>'^,`YV3=?>?[4?NHrbQ$? ?Rr`?Q?W1?Pg`5@?6 ?X?n?;6@:*ƐHX H?!?4'?Of?Vd . QA?/?0O S@XR C?1?`U:`Z2A?*>G@?3?6?F*-?T1`??ң!?B@?DK /J2LnR`R>dۀF?2?-?F@`E66Oh`NRM`Au?K?F2 JƐJC*?E(++MdaؠQ?`/?Q|W=U3@/;?.U`>YS8 N 9@-x ?*PN?<?+R $#@?6.=?>vD`?g`GcWQ#?*?M?&0(?'V3?.}?#?Le ?_?V:@$?4^I?TR@?(X?#P@?`?ay ?L'`?2r`4j4?Uڀ?EޠM&G@Er8DʰViJ R?%?`?N?`5k?S.QNH`W@% ?9I@?\ ?\@Ivh F{?'p{`?;W ?Lc?S`?`Ȳ?R:`WIR?C5HWz H'A@=a@?6U@?6 ?38@?@g`FT?5@?C@S X >^XR#oDNF` C?K?P?R?N?/0@&0IF?2 D3@bf S?60?.*PNLbFP| ?$z?U`Q B4:Z0`^F7B~ VX֊@? ?8*`M~? F?cr?VNJ J}31>9?A ?Zi}?O8`?/ ?:?DjU?L?H0/fF/@? @?>Ԛ?9?<à>;P@?B?X `?8}RqMA?;`L"ĠAh?= `?Cc? NW?#8@?O`?CMƠ=L@?Tj?GzV@>?X"?`Lj`?S ?Q.@?9V7@?P?S4tX)`AU[_^SeQ@?7T?_`?U6@4ߠEX`/ ~?7a'+)X <$@?J<@?E`?.b ?%ǡ`?Fy@?` Y ?X>VNP-?Bq4 \i@R3<$@? d?P1`?G*g@=) @F`PB? 8(?FfgAw`D=p ?87@?1A$?3E ?Lр?V?V@?$GSS2-Fc^ Y?G?P-=EQ@B`?4'8עS5@?L@?1D&qPinNm@NGR=@#ˏ`?T-?TF?SC?W?*bQ@ `0c ?$JB/@?C@?e1`?_1? ~<?PJ9?`?_L@6 V ;-~@?4`???&eND;Y`?F?bJ`?Z2@?e$@T*MzKM?`C,5O.IB`VK V@I|@5) EO.?Yɠ?Ra6t$ ?1j??7Mq@0]c@G?L}?Z7?@]c@?<͕?K" T7 S,?!?R@?34tC ?" ?Fz?* B2 `H@\C + ?Unc?F@ |@?8e?Kˠ?U@?T??5?E?`?[!?F^QPh0@?3+?S?Q<嬠Fs?$6 P?9?3?I|@?Yy@?E?$v`?U#b ?[`?S@?Gh?'7?>?IH C`Bdh@L 4:?AKG@P@?CG?QG*``B@?8Vm`?F8i<ڹ>z?T?c@?b?S. =YLE1@IpK+?I?V]`?+(GI`SART/`v`RE`?PM?Gs`IHjB>@?T9?f ?aNH`@ӥ [+1A$?=-`19@س@( `?7$ ?]?`~?A7`6 T@?: ?Ur8?R@B&ccYYSGh1?*?RM?E MT OMIQ@G`XA`\=?{ ?I$G@Aܡ@?O-?PU ? &+~?`?@HJS ?9?VIb?V;&?. ^vR ?~`?\@?R?9`?S ?V?J٠?AO?DV`?QՃ@?XqA ?G!`BD>7>@??\a?T?2A ?9uO?>1L?.o?L?V?]`?HE>? #?Q@?Z ?S@?Nߎ4O H}D5?(T<0P?0P??E:`? :Jw3 ?3;dۀ?Kܰ?M(w;I`D?8q?HL?QB=?Pk7IOd ;-~@MݠR??3?GA Nj "E?8Y@?9?YH!`UB J "@2A83c`2~?:j ?R~?C"PqM2?Pi?XR@? K@Ip5?%s?"zN?A) ?U4@?Q7I?1?C?_mZ?c@?=\R~?1+>`J=d6'A@0`2 RWРP!>A@J\a>I.#`(5UB R&?1>?PƁ`?T?RWР? ?V`?P@AA2?X&?[@?H ?B?E@?@j?6F?4F?.D?-֑HA@Bm*?-T`0$r;?Ua ?W96 ? *wF ?X?Dؠ?*?@``?D. Mah@P(\@?5&`G@J`?2m*@.g`?CSw`F 0`Kd>S/Cbq@? ?  ??=?Qz?4ԋKB YcR^~@ CQ[l E%= ͠ x?G'@?C@ ?&S ?PI!`?WcW?T&?Tb?SZ?3G:`?5B?T@?AeGQZV\ Kb `Fo?J ?Wf?[I@?@YB9?;? f Jn@#k3?Loj?:j@BO@7tܠ?D4`?`+YY`Y) 1?,x-@BJ`\)X|4@!?47 ?KÁ`?]`?R3?1?@@M?S@?>0[?(5Pk@L= @?&b\@?A`?\}?_?4FV5 g+ŠeP@HMP@@4?93?I ?@v?*]r?<?ܡ@Fd6`)U`?HN ?Tj@?^0?^pj?Jݏ@?HVm`?\?NY=wb/MJi ?6@?O]z ?Q ?I1?8lS?7e@?P?B@PY O5?EҔ?S@&=`VSLR/ A6 B"`4? A CE ANH`?.S@?=`?E 3?DW?D(>QG^U `?AX?Rl?R&S ?Ot?Qz BoPa8`?%U>YJM?D~ QV@?I~`?\?32zN?B ?J߿?SU٠?^P`?XG ??\@HTk?@ @_o@B\ ?bo?a/?Q`?8{ .o?2)cl f2@X]?B>`2q-y@?P1`?Z?Wy?WD?G ?`?&?69?B@?NuW?T?Q/\ 8X?241CU@?_@?cȠ?S`?<7@E2N,??{ ?Q?@7@?:ާ?Dԋ?,C `+C?N!ƻbiZy^a3E t?U7?K A]"4:?3M@U'`7I* ??U& ?W\ ?Oǀ?N?PFd?UL ?T?>Bo?A=۠?Z@@?T2}?0P?1ROw\P<;p{`?HM?9K?,|?9[@?0w`?R @?W@)~`E?O`?` C?^ ?XW?F2 >+`T @L?Sh?U3@0`R6/`?@~<?6^?EB?V?0 R?^?ٙ]9p7 ?T?Pa8`?O`?S`?E=?S2C`?c@?_ ?EB CV,`.}? ]T/@?\*n?d?`@?Z??U?V˰?)3^c_'`U~D@S'?G?F @?Om?N1t?*`2e5'`?Oh`?6?6i?E?;~ݠ?5W@?@Z@?2P?*BGF?WD?V{ ?D- P8?8/ S{\)?1Ѯ ?BY`$@E>`3 ?ּ ?AkAJ9ʸ`?], ?`߀??.d?6?B??4?FR@??? d?9M?I[@?E@?G ?N>PH@?'*g@?[:?LN@?8j# ?U?Yeo@?R*_?:P`9 ?%?E D@SI`>WD?K?E<`?9?;?0@N?0]?_`?_f?" T%`SxW3=6?4t?E+ `?DDX?]@?AuV1]>W ?S@?QD`?YTv`?@S?F@?Ya?IAwF5!1M4~?6Z[FW5) ?W?U䥠?Fυ ?R?[Mˀ?ZT#?'IPZ`?(e?GXdC C ?'@/F! ES>D@7)?CJ?I*]@FMCR %m?C"?0 ;@FUnXN7\a.M ?? )!+LC ?(P?GP?EK?Qv ?CfҀ0<D?;?EgE?F:`?H?S1@?M1:`F0W ?س@?K`?\@T Ev 3u?N2@?`a~`?/B@I@ ?R?V&@!Py?EBj 9{?c?Q57P`Mq[bE\S~??H ?<`?9@?Ah?Tɘ`?$zFπ>ꍠ`?DԀ?E<`?`&?Y`?]`,@Hi >S, Dt/Bn ?2|@?FU@ ?9G] U;y 5D;??ǰ?H'?0C1`? 8(C;R Jާ{ >RRë?1 ??@?&%@?:?hɀ>?Q ?Q@J ?Q L?R+?BpsmsHjFF?=@@?P@?Cc#$ G!?J?fv`?VE;?@t?K.??`?9?iFC\?`?; ?Gڱ?`@?a 7 " V˰7{n?@"B@?:b?P@^?Um?(0G|?:sX2Z[] `R ?`?Q`?Qa?D?2J F\ bM#h ]^@Ij\RB `?I`?;@ ?D?4]0"B@E @_V@`Qz$?C`?QF@Bb7a{-@Y|5gE?+<Ҡ?(Oۀ?<4?K(?ojJ.F JPm@B|`5\?0@?J?6?Ӡ8(  ?0+?F`?X@?F @T.RE?:?Uz?R?0?5r8?FqZ J Z@hV`G<S?0>`?V`?Hf`BëTq2zN?KT?E'?K ?[7@?Ui@:`U&n ?St`?M ?}>S Cך?V=`?\i@?2`3d?2J ?5?݇> OT[6 ?Q@?I0%@ C?>t@?^@?U?B?TF?R?E'`?G0 38@EC#@?L?Ls?"E?Zr?eu;?Pn#ˏ`?>P?O"Y ?E?Bps?9? ?EР?R50`@\p@=$?Ec?O꺠?E@?F?Pn?JkH7{n?'3)Y?C`@?R/,4CfҀ?Be(Jw?Md?Wu?"l4$`>?Ls`?Z?D3@*C*>N:?. ?&n ?Lр?Q@>DBP! V2dI:[A3+`?Ƞ?A7 ?BS?S\k?R.2+w] V֣ #ˏ`?RN`?YN3?"A^@G@_w5HF9UUN6C QPY@J<L?)@ ?EES?Y`?b?P IC?MTD`?Te?B`? L}``q Xu`?5@?S?<рL TG,7RE},WT ?7ٙ?PP?v0 \?D_ ?P ?@Հ>zN?S0?e(?^?J0?>KuL>$?Gw @$JZ?ې?Y@?Fj@?:&?Qƻ?P6?Cՠ?G~?G͎ ?O ?a?fl?]c?G@?C?M}`?K@3XN@TW+-?F9?R~?Ib?@@?5\-[?($?@kJӴHi@?:^`Rv_?L} ?c?T?I3?*E<`?#@?@ҌA`?6*-&xS@??I4@B"``?Ob?8 ?0 @dۀLz]1a?+ѽ`>C`@G9V( ^D`Rr?.@?Q+>`?Qf_`?%gEG,KtRT@@?H+ Aw`Z?$SV`?:R`RI`G17@MRW@U ]+_9?9M8/ < ?1?G*?C 2͆DY?A@ `?T9?/e$@<!@E/mZ{ Y@Ks$>A`QK]J`0S@YE3)?Z.?UY ?1?[`?YAL4eT/4?GG?gF`?b?O?@\@:P`2?:VНe:@9?P?'D???Xx`?T:'@?P?W$`?WtP?V?`?d `?bl?b?^,?W?RF@W@Tl <@?:$ ?QE?I@?:q( ?9[@0Y7{nf@M2?Q$I'a?#a?V&X?B:`?G?4J]TD`J9K``M<-?8A@($TD?D1d?PPZ`Hg-8KT?:?PR "N?5Q_`?Fl? B\ A K@_`hh;SZE?3E ?T?S ?D/4?3ւ0`UjT?DP ?*]@Tس@?CkEW@Q|EScS4D'Qc?<-?Rd ?.w??@?P@aTV@C`?>I ?B`=?vF;>_!) G"H*K@;C?D?;; B?Kܰ?QS5b ?-Y?Ml[`?T=@FYG`?<?V#?D?U&`?c} ?_`?Y\?ZH?R ?MTD`?Q&`?Cx?'?E?K`?NX@?YM?U>`?@!?KХ ?V"`?Y?WR?<?(,р?T#?V@?P¬@?EJ C4t(B?Y/?4WՀ+?9"-+?2@?WA@LE݀?J%!Y;Y @&`?;H@ ?`Mxfc90<?Q%8rr`??X?DA`D- ?#6?Os``=xf^b RJ ?K?Xi`?L?2R@?-DW4^ I?@MNT~-`4mO2bo[`c+F9@I) ?7`?Ml[`?BK?V?Y8]X2NJH4`F`.I ?60?#"?>4?3fҀ?W@M?[c%?S@?Y} ?Y?D{?*?]`>u`FQ$z? `;h@;5?=a@?J,?BJ ?B`?@J?# `a?/v`?Wm@?a>?P ?5 ?;`??@?I:.?a*?e?Yh@?I[@?:-D>ݐ}?=G?ONWRwEn`?@?S?@g8'?C_(@?^|?a?V`6H@?My ?]@?[ ?N0[P;@Q4?PRp ?B[MF` ??FDN-? <Ep`Eo?Cm$9V=p `?(,р?T?Z1 aU`8@?D@812?F)`?@ȲLX@?:$ ?XU@?4 J WS:yzN?61@ C1@ A^ ` iW `w`ACU@FU}O> -a[@h)Π_:@Z%@WWL 7$ ? %`?L4I?FCDO<9a P2"VP @)&y ?0@???B`?B>@?.S@?D`?I?<р=xf??L'%?Fs=zSQS5R_e$@]f?8/ ?aV~?W'J 9"4LĀ-0?8_/?W:G?`$?Z.?F:`IrX S? ?`\@?\Z?$'? :@@&?ClL ?P?-`@2>?F$ ?LT SJiOB\8?DuH ?X?LH?nT+8`?7H?:]@6WXdU\?<?46Н?F:`?R*_?B9?(A@I?8@T Z`/@:?^?A3 ?%?`?2 ?Th?' SOG7@?B*_>A`5) ?2Yu ?C*@?CC`?,HeQt7F:o>ݐ}?I=`?2+wLsH>c=d^}cxR'?A& ?K"?$v`HoX$[ `'aE`?T$@?MM9E"?Ƞ- )?@p?T%Y@?RLQ`?NC?8DY`e*`D?VB?Fo)FA,@Cn?7nJ?O @?G?5@2 )?5'`?*7tܠ?C?[@ _d ^uW?1>?Vw?R?3[`?. ?0``'*g@@9=Dx A`?D @?89@?Ca?Wg?R{f?IiD`?Ohm@?5>` 1%Qi`Y1l@@?(12?H[?UX`?@j>(?FT?D`?H)?M2R;R % ?X4`?7 Sd? ?P¬@?,RnC `f@U!>J [3`m`C`|@>=`@`S@^#7QZS[2CZyYE J>ɠ? @?Q?PS?6Y@4bx b`?V?-W`?i?J?5B ?(?@߰8_/O3\<QJ(,р?I3: _&`QL?K_?MMah@`)`@PC? /f@52@EL@NO`Fs&;|T4r?,р7 M7@( >0`B€x-@?L@?ACU@?&? @R_aH?D@? H@<~?K&`?Zs?=`VP RR@??@?7tܠK`? 8?b} `?bl?8@ =֑?=?[!r?[a?L?H+ ?J@HB?k|?H˗?B?7a?T ?W?5?9?Rw?O(?7?KNW?3\?*PN?HL?4- ? ?DZ?%o?D @?Q?Q# ?Q\6eN?DBAƻT0L`??ZT#?`K ?!|EZ` K`?YGR?{ Pw`AB GP@0 :,@m@.^X+@IT(D?J+?X?N ?NGZ@?LwY6fn@? Ji?Z>YE?L 0@M +B`=) J9Gm R7?+I`?Q~;1߀Z8r?Wa?Vd 1'`Q 0? KNl>\@?<@?G]?T?VYC ?TNi?Ht==`IHj?9:.?Fـ0`-?B"`?3x( ?e$@TZEM?)>Ce H3? 8?R#?<UV@>rr`?=`,&\ ?P2"?\ӛ?Nճ ?g`'V3?Xk;`?Y>׊2A?1@! K@H}`D>?9y y=?.L?W?QÀv?<?DJ ?22 ?H `?5@?J`?U=?#?g @ޘ`.ᾠ2 ?<>?S`?Ua ?,~C܀%6`O G@:>ɠ?NJ?eu?Q U@ q?ROh`D좀4@? I'R'N#bq@&"zN?5@?F{G`+?R?I) ADm?2@?U݀D`4S`??Pz=$ң?P^{?EFl@?!&`?.w@ D.8!`?-x ?W`?[?:`$?G`@?Q ?!ƻQ S}E/{ 'QҠRlDB?R `?[n?O ?+I`?'@?K`?Pi ?4? `?Q&P?YHj?M+?3u?0 @B`Bdh@K/UL Lb@/@?! K@+NWFBDC ?+g@?>m@1PJ?'$ ?MD?(>VHv 7p{`y=K@?U#`?T`4U6G`?CT5 ?Bt?.?&K ?9@1`A`?1s?Wk?P@?<>?R`?<Q`3SB{V=ms?B99@'7?13 ?@4f 3S?>!@?Up`?F ?. ?$B@E@ ?!}NfAe@?^n?S0PH5H}V"@Z@?*-D?@!ƻRua V>K`?B?*:h`?7F`,k `T2= `?PK ?.YQQ`? x-@?W@?B#u?J?J:1>?J?D|`?C ?W^j ?VQ>G@9`?JV?^Hr?^?RI`?7{n?C5`?RGd?@r1@IMX kQ3$ B T6U?W?Z`?$=p YBe _CMK?*>ɠ?FQ?P1?TAE@?U@?P``?0 @8\@G›Q61UxY @Y*N@M4e13 4%Y@6iD1dLDg T`8Nx?TE`?3 @Xgf@T'7*%`!ܡ@?G&?I- ?0 @?B4?O?H4{?H|`?F69 0L`M2ROV@?L?Q?I(??k@?R4Ơ?EsQ CmN\z]?Z1 ?@@\@Mq@?:]r?CT5 ?4SI@FG`?D@ ?0:Y @}$`56IQ-`>%`>[#`\?D?F;<~:U@Zw ?+@0K ?-q#G>y?By`?H﹀HBTW(?Di 7] ?F ?P`?Az?N,?X.u?G؁@7.Ȁ= ?-Ji?J?T-?^|u?[Op?4?0@?\?^]@?:/u@D{Hp-d ?4eGK@L!`2WD?6` N? )?B|@?=^@I7@]@Y@B>~<?BA^@?T@?Oi ?&Ӵ$v`1B>@NnŀU Rn 7{n?2G N>Q !=Y8_/VL`_U PU 5z@`?,?QZS9X`RO@>4?3,K`F 78@?6l?3<[Dv?)c@H@TpZSX @3Y?> ?0O ++M? )?E {?=U?#P@8_/=U?P"B@?REAR 9@?IN?PF*-R?:S ?#NLS5`R5RP>@d: d]BLQ`2=@8q'`Sg`V0 +`K8`W5p?(@?)@?E*??rH 9]8TY.#`1?O ?! Ec?G?[K?$ּ Md ?/ǀ?O`P@Ls?#)?H?FF?Sg?W[`??rH ?Bhɀ?W%y?4'T|f@R0D~`;)!+%o+u? ?B?Q?O ?"`0h@@F[^x`,1?Q0@?@G|?%L ?JS?2@Q͠Qo?3^?U*?R?IE[@'g?Q>?Y\?D CdNL:E[?,25 Vo)SuJ@@L@U ?'a?Qc>QJJ v`?=^@*X@M"`?B`?)VOEc@=㵠?@ C?@}$`.MGl K`?%p@NW9}3md`?<?DNh3@W161?HF?8`X@^=GG?C ?KE@B D5?RM ?S@?(ע'QҠK<ҠPĠSz d/c NQu'S] QGt X W2H VP V֣ 5 '`?`?=̀?AF@?9`62 FĒ?FW?Q dRr`YH?S?b0C^|uMS, <LB“`>n?C<`%`PL?3- ?VM`?4?/9WP:Y W]Q?'7?RGd?Ns&?@ՀG@?*f5?R ?U\?T;ˠ?W ?KC0:j AeG`Ureo,t?]?K2T HY`2UN?RFK?f?cj?L +'?LU# ?W.@?P_?G?@dۀ?*%`?@w`?!]?(>"V01ʠ?Vx?H\@*K(5?%ǡ`?Pn\ ?FPEr ?R?N?6b?S?Zi}?MTD`&S Jl>Ji?P%?5=2@?*|?6 ?0`?Kz@]*B`QQ(N6Ypb`Nߎ?4?@f%ӵ 6@?6rr`?V@?W?U ?N@s/`7.@V>oTz5L} Z \5bVWL@F&.C?+E ?K ?& ? ?=|?@.M?Qy?L61?J@3md`cI@dM?$m?T۠)N Pc N&Sɠ?O?V?@m@ZDce?R?V5J̀M@-}M̷K``?Lʀ?^FA?\KH@?F lG 8(?Zo?YiD`?JgM@?R5?C8@SW~ V4PSѕ a[ ??c ?W\ =0O!@Tހ08(?X ?cm@?\?BJ 4]??:K?P?M0"?W?Yb&@?HG 1@? I?N?HKs`C ?Od?Ll!?<?Ç?FR@?X?Y(?txM$?F?H12?Py?+Ƞ?؈>}T)V@?A`?a%8?C[`>j ?G3)?HP;B3Qi@?69`Gt`Rt6t&?D_a?Vf ?<Cj@? ms?N4?= ?)Y?Q?M-`-`o MI߆@N?^p [T4!O(?~<> B?C`?R?"l?.Ԛ?6Aƀ4|`?RKb `PQF=`\4 e:`aT@RFt?8*HVm`Y4??[* ?S ;`^:Yϥ?D[?P`D0L`8P?Hv.?@Z@?38@?R@?U= ? \UsC?Nu?G@? ?I3@?ESU\%Rp Gx%?R)`?hY`?`P?=@`?) ?QG?\ ?YG@?JG؈E}E_L?Q>?RR?'`?4t?P?v`?'50D좀?!1@?Q@$ I%`!`?D?@l?P ?K$?X!?]`!:S1@F{3P@Z~ `4X5P WF`WD?Nx`?d ?D;?A?F ?`\ӛTR@C^??U?)?@P?U ?Oǰ?G@?P@?!CU@K^`4:?@@C*@GMq@?37*g@T<1s R S `U"[#R'M;S^FvӠR0`^LK&`96 Rv8Kz@?( T``@Y(]KU?5gE?2`g>mz @f?Ef-`?5 TgY?B=@?V:@:`XcM ͠?Y@?Cp`>WD2J ?M#?XrY`?=$4Hc@? ?Q?Tg ?'8̯`?&@?"+wBG Cv?8:?R@??i5?-&?6( ' ?H}?] ?T?A_`?0?J&?a?b^ ?I`/v`J`R&E/m?:"Q?Sk?:W;@W!`?@8(?U?W5<[R@?4ɘ`?@N;C1+ /'?5?@>`?/m?Sݠ?`?EM7?4eA`W+ S?/S@?L)V0 P6?FP?]|;?26k :d`?;^F d@\@W P >6?Q1?Vυ ?95D;9@,MeɀJI(Q@> Q[Y#\c?:?IG`MVP@Q N6Q˨`WTYK_;`X5[xbO<?AX`53@UM&G@O Q?3?K@R4:ej[ 9$Nw^1tBA^@?Y ?OYW `\ `0n@?0<I`U"A^@?KC?( `9?CC`?\-?\$@?CR?P`?X1M{D`@i ?HB?`\?Qy? ? &`1W '`?+4 ??tx48@?R<?NK,?<? A`?? >@?!?G~?A4@CZ}Ro[`?g?J2@?^5@?_w55) XlS?6Q?X%`?@> `?@?7B"`D?P&`?a?VSɠ?D?IM?+~8?B?_Y@?\?mN``?F ?]`Ƞ?9;X TY]\^B? !=@@=&S &eNDE`U:`^GW@? 9S@H2K?U?UcD)Qh$j9$VU8`*sXD#FK Fy@UU[OpC)?EN`?3^'?Hyw?E@ TR`\36|E2o?C5`?F.NQXs?2 ?X?:wH<)V?)/;!ܡ@T6T@?#8@T<ZN@P ?+C?Bo?]`?_*`?2?H'W?V@`+A39J@?$`MCZ!?`d?@U ?Rh`?0;4 ?A?Ps7@G9?L4I?QS5?4]?T ?_?M= ?Dwx?Re?EР`?'?L{?R ?Km?G9?-NRQS?K?Z?*/`?R?N@C!֠A8b ?P?Z?R?A1Pb7?%U??>j ?H6@?<~ G@E>Jx`F`APH@T]1@5p?DX?B(?(J J`ZŠ)?E?C ?L?<?O?+g@NE)K ?AŢ?LCmd`V@T]`?@/f?K5`ma`R3" ?OB?C @?7#`?7E@Q@ ?!60?C?Sa?@EL@?+~?2m*?DW?X?>S&?E@?Oh`?Y?`29nL,v`OR=?G!"<??E@?^u`D?` ?J ??W?Z4F23+`?`d`?ct`?V7Q`?_V\ ?_l΀?zN@`?G,?R`?I6 ?K]?O?NK?H? Rp GS @EW??b?Ӡ_k*[8q`?Kd>?X?= ???MG?B?<$@>X^ ?# `?VqZ ?. 6i?CaX?Pz?77a8L`?>?M]?>w|EE& 2 ?$`=T@PǙ?(K`?S@?P]?@sI?C7?&TegYϥA ?8(?R]`?MӀFU`M`He?3Y?PG|?k?C ?^Z`>@^ M3`e?*S ?LQ$q@c+@ko1 d=H9?;!^ i9?V|`A `ȠU(S XI 7a},?Tx?P9@D 0G|?Mʆ`?Vn ?b?^?0`?Dj?D5ti?Xd`?cYE| `#P([=Y t?90?Ur ?_*|Xؠ?<L?S%AZSJ`?R`?Z`?/g`?A?a"5?Y?@?W\ ?[I@DB]h@4`?L{?:|;IM,:۠?CQ?6c(WD?&FILa؆ \V?1 K@?O r??X?CR?8*1?& T@?&SPc`?[?e`?8 ?g`?Jhe?O`V3Ky L~>G@?A 1H `1hJ^`7t KDuH ?)?/@?7,?HC ?DZ?M?P 8>VX`Xi VG`B;C[%S?,Y`G!`RV,@?5߸@?B ?E<`?NmL``AqR?*G@?&9?EAJ gib[fn?Z!?J`"r`@鋀?P ?T RZbSP`R^p Hs@?Bt?M ?Ro[`/f^2 TX1"%@?Rl?W*`  F/@?Q= ?`$B7`[ BّQ_A@]U\O׊?H?P ?4- ?8j# ?Q?(\ ^ "?O{ ?Rݠ?YN?U98 Pg>?LR?a ?=SX`8{ ?L[?B =y@I?A>rr`14@?@?DW? >'  B@?[1`Ch,2? G@?  ? C. ?!?P! +C<+@?LyE?N?$` y`57?Arj?]ڀ?\5 ?AЕ:G@KtK@zN?VP ?bd"@?W]Q1@K`?;+?^`?XT?"@?)7@?SEl?WSw?Q??H ?I?>voF>QM0 ?-PN?1|E?H ?B? U? ZD\@1?>FA?K?@Z@?FН?W?RJ`?B?8̯`:@,|?P?D`?+@?S`?O8?`019&y  d?Bl?J?2r`EHR ?1:?CZhe\/\@?.w?!&``?M ͠?9l@ML8G?Ch?VZ[?J?V0?a,|cT`DDH?;E ?P(HvIKQ*>ɠ?Rh=`?Z< ?@`6U@?+.@?3ւI`Dހ?P~?X:`?74ԋ??@?[n`?S~`#UM1@+w$?N`?[?Wm ?W?Rl?2I5^ ^e`'0?WȠ?6@.o?*|?,?E&`?Z! ?b7`?a$?T%`?0@AGY|?G>?bj'?]3 ?R?[1@?W;` ע=H9?C?X!R ?XEt?N%h>@ *w?J<?UD;?B?1?Ht?S`?X78?R/@?<@A H M̷2j . 6Oh`7-N!@> ?1Y?9?( ?B0?P# ?5?@n@?`Ҡ?Wl@?%?E?H8?I<_?^!`?Uȹ?(5?M$?Oǰ%! d?F ?P_?Agw2 A`?A ?9S B< ?Q.?# `I= ?]`> Dv` ?PM?\͕?U? ?D{?Yg`VZ@Dw`K@Vb? G@?P95`Xf`O`?=y@?\`?b9@?U%h"ڪ@\TǀW6??=T`AjR/ C ?=`?BX?&?? k=?Ck3?Qy?OƘ@?W?]?X<? ) ?1?Q?K ?9- ?Uu?ZҀ?|OE`BF<?% ?BAc\@;@?F Ea O?`GϾ\BB?/e$@IZxF Kg?AX`?VP ?XS?J R6`>@?+ ?0?ң?2A`EO4ACU@? @\?TpZ?_l΀?R ?@\J?? ?QA?X`?R8?8╠O(M, ?NHr?U?B`?=? `$?([Iի``]RPyO@59H#- J/`8@?P?K9?6I?Vs?[?`?87Ġ:#G?6 ?I ?=&`?MB`?[4 ?A?7T?[[{`?R `?M㵠?SP*:h`1?TU ?b`?]*?FF@?BZ?T{M?TA@?F0?-z`??^@?K[{`S 2+w?1C3[?@?_?f ?_A?0*>ɠ?D?A`?C4t?K$jJD?Br`7O@P~@H@?NC?`?F@Q@ ?^?`?S?=?4?:PN??+ ?F<@?+?? ?D2"`^: U`?6xݠSՠW]P] [ Ls`RWc@"?@?2E?P^{?2:`Y>;?S0`V!@D3@30@"0`@9n?+ę?.m? uO#UM<?a?Sk3?QJ$SV`Hs;E ?Ӵ?K`?IiD`F*-Bà?`?e ?G(6?65 ?`~<?i ?e?Q`?)ȇ?>;N?!@1 k7] >ꍠ`?Ps?((A~v@?Jy?G K@?05?a,?V@:d`E ?9?V/`?YP?[(?\@?BT V@^Hv.?;4 ?4|`HOۀ?` ?Q`kRm?TF,a!cVG2RR?7`?UE ?S?NϠ? (@?7,עBU?3fҀ?N?2B|@? )?;@?@ B3" F@?B?TA?DB1%h?G?Nb ?:@-T`?0?C0?.;N?+`?Ac4:38@LKH@bbc=|J`)=Br`WϾ`<P%FBDPf%?1W?Vt?Rn@?Q?1RH.?C?g R@b;YVP$4?Dg?xW.!@?3!`?>2@?6/`?"͆"WD?& ?@`@8lS1) >?X?2G ?0>`R *P?Q>g?X@* ((?`*x?iݠ?`in?!-o>RE?R/M?I/+ > ?A[ ?W?I&`?QNH`?V{ ?0&?S?f@?W 8>},?J^`?>9 ? `?$m?&#09GZQHBQ\=a@C @?YE"?G@U{@[2?G>D T_@DSV`P4 B/ ?P`?@<FQrr`?D@?M ?Xi ?Pb?$?E7?Lc_@0( C+`?;G?RV`?G- ??9ȇ?T7 ?KE Q[ (?M$?g`Sa V7Q`;+?E"I?K?;] ?6S ?HKz@:`QV~W@DzK+M^{] W1}?E]j?D[Ex\$HX ?"/@;A31d.?#= >/f@IA2zNZc܀^O X8L6n <~ Ԛ?@?G`?K?D( ?4f ?C@?6/` ?Ja`?T( 4q@P`l?.D@Dh$`H12?6?PXu?+8`0`?SrQ?fX*?^LG8HA@?E&`?P/ ?%??O>>\@?J`?R}?ADm?HH1`?J 7ó@9&y ?If?HW?@?Q*&?C9`G[`N6IbS`Qrj*Y@7P\J?}?Z?Sҭ?@O`?P ?ArDߠ=61XI02< ?&?>b ?* :?X ?Bg@GC>?KP?R?]9 ?W)N#%8j# ?=k@?EѠ?Oޯ@?Y,~?Nx?J?/;?0~<?3u? `?Br`?Ih, 1?B}?d4@?d?0 @S<?;ѽ`?:he?CP@?? 5 ?%?V?LX?ې@VhPv@??O_?Q5`-&R};+Mg`JDl?8Fy@?Q^ ?i6?a@?@K ?A|E?A6M7MSq RO@'1:@`>@?L`?Kh@?65 ?7@?B@?Io@?T+ ?FSk3Y?WD?1 K@(\@?$9?+m=)`?Qf_`?Y@?.}V#LB?6?B;8 @?4@R$Y\QNO% 0V`8<%I&y 0`?C8@ʠZ@@^jd@CP@?TB?]?7`Uazg^eLrXdRy`T6@V]`^8X`H@&ېJ XQb̴@C4t?YE"?DTn@3S?Y ?_M `?[ ?DV`>G@?Uz`?Uy`H|X@Q@I- ?H?W؁@45Y?C ?8Y@?8j# ?Zs?b?U?`1:*1?+C?G9?0L`?&,^@?U.?6UD?695`J3ր1?$7 *G@NF`H`?2LQ`?A?61?6Sɠ?J ?(;qa?OC2?`9?H`/ǀ?;?I?`?)V> Ck3BClL 8G?o~G@?Dwx?E x-@?3?Q ?T?JV:?GP`?L?[?Ml[`?/46?2@?V?U3??F{?J?O*`R>9 ?N?K I LY`?@<?B>V3?-A ?Hi@`G6b@ ڀ?-8JI0P??V?ZZ)?0@c2`[* ?0w`?T`?Q\?-0? Ia P@TF2Y@\-U@XbX8P?@΀?FJJ]rVK@?3)?S6`b7ɀQ:?PAw@?S?J?D ?Fy?U?JQB@J^QnS?Hk;`?^ ?K`Jk?26k ?L[?@ ? ?AѠ?Zπ?\>?OE@?,¢M@S*@* 2[?@?ǀaW R@?A?==`o,DǠK?% ?. ?F?G/?EI ?C4t?*x51?;T?=T`1 $SV`?@?4;??1?DM?5 > Q9@??.d?%m4)?B@?;F&? uO?P ?Iy ?PȲ?T?MW ?LyE?)E"JC*!@?T?at?e?aX`?U&?Px?Ae@B[^Y2f?KB`4 @K6?BP?KK>׊?5;y ?Kf@]Xe?N@$?50S]M`?F?I GUt /`?L ?4@?46@?@?2ڪ@?;@?Mq@X$ c0VC\L>$V47`?SN?F98@@ ?7y=v6 N P>4:?FН?2 ?8T<?T@?Xi@?Hq@ `t? AL?/?N6:۠Gՠ/;?M?Fπ@6!k ?Tр?Xq@?L ?G`87ĠUȹHN@DF#?5S?0~D.01? ,рuz $ɘ`HEBy6@?4z?Md ?R( ?Y@?[?;QR@#%?B ?ED;?F@?PB`?Cu`C,H`?+g@?H~?(Qb`X7Ġ@?e?NE)?=U\Gdo1X8(CO?>g`?Yl?Q"?;9'QҠ?P@?a!`?a?]?V ?JR`?4LĀ&0_Kܰ``R4:?=~3`M`?Ev ?Q@+I`3u?xAw`bQŢݠS`u4UncI$HF >D?K)?;+A4 ~?Q?L-F`,^@?9`L}` R~$`?*>ɠ?A8@ <?P(?P(B@0~`?N1t?R")@?1&@"<?ٙ?8f ?==E??N?<70 5 @s >ᾠ?I#0@?T@,?AqR?@?PC?V?[;. ?R|@?1׀ `0FH??'cW?W[!@Q& ?@9@?X13 ?S\k?Zr@?kJ`LWS?5]^P>RE'DZY`X@]c@ @?`0 L E:`?F:?Y^@?F@P@S F@GΦ`4?:P, UyVVIbE?M ?MH9@Խ?4:?[ ?CfҀQ[ 54@?ECSxWSҭ -?M?Fo)75Z`Ba`GٙHUU TG W2LQ`?H?Pi?]?[?mR2 ?G?_tx?cF@?d/4?Sm?=G?U?WL@?K@?@-9U`L嬠4N8L`J-D9`?H??:-D?W]?` ?HA`N@Kj`,@`?@`?S&?S!`?Qz?R( ?T?R0`?;`O^`L FPBo[`MOq9@NO ? +M?Zj@?TD?@&?J``?M= !sV`^iL?)Y|]=?<} ?F@L¢D?CA?90BqV"@Y:FF@?/X?8>IF=`T$@M &F?3\?GC?N<`>Z̖`]H?~@EGRN-?.b?\2?%?``I!`Ov`?7 F^Z@7?I*?AhD7R`7?RS?SOGY|Z3ր@;qJBX\+R"~Mݠ@3@?D~?O-?V(@?W6rcD( @Ku_wY‚PBS" ()ȇ?:"?L!`?E\?Y?=2R?\?^~?E ?2?8`?#P@?DV`?U?R@?LY?S ?ZM?\?SEl?>%h?E'?X?^x`?Tb?= ?5f?O?T?Aݹ?71?W?Wf'V3F Z?.D<C\@B @xe6i(rI[@J :?T?dVY@?XB?Z!QjSJZ`L[z`b3س@P`S ?"R@[QV?:he?HrBk`DG@LdwT4`X#@A@?@`?N=Ig?03@?M'_?S.n@?O(,C?9?0`U]SBzN?8?[i?K,eTS]Jf5\a^=`L@E ?D`?Nb ,嬠[AJ?e]j?i&?B,@IU0jH@ \X@_]=M#?Bx@?KX2?e?`H̯`<'%?2 G@_`WR^$'?@H ?14@/F?=?G?G] ?#%?3z ?`?gE;?Yx?Ls?R?P?Uk?`g@?Zn?=?@?K t ?]Ќ ?[%G?E݀?9> ?GO?CUM?.?$ ?2?R ?\)?L*`?1qR?R̀?S0"4:HG[@l>?+ ?5\R?CI@?`#`?C侠?J@?H?BlN0So?Pm?[?6 Oa\>`_WBAE@RW@F5`QOQC`aX`W?ǀ> 112?E?A>X~[6?U ?XѠ?0| @C~? 7 ?>,?[ ?X Y@)`?!> ?DLĀ?K@?6%@?M= ?N{`2[FOx]֑XK <~?GD?^?S<@Tw`T?Z<@?e`?S?I?A@kC@6|B ?8G?Z%?S ?@\J?D?>?:??U ?a7?YW ?AN@?4@?S܀?]N?K{<BUC$f ? ?A|E?EJ ?Cu?YY?`Ʉ@?L@?3 ?I1?Cg?@}$`?XS?]?A-o7#`??ŀ?[?Z`?L{v ?@` ?L>@?AeG?.S@?0Y?I)@?6G`G@?P?Z*?P<?'8@5@?1&`?T@,?Iw`?6 ?H9@?*#8@?G?PJ9?U_?Z5{$좀V`&X*?'EL RfK\ ?Ji?'} ?:9Lc`2aXEtR5Kz@Ia B@?L?E7`>}?A&`?J ?9$@?X`?O?#- ? U# ?8$:S ;?( ;~G8O@! ?X?XCYy$?7' >?Dwx?`#?Q@J@? ?Q???LJ0?T?@t?IX?Y?Sv&?P0?[F!@?a ?al?V )`?#$ ?Cj?_ ?TCuH OB@> ?C!?V׻?^_q ?M|`?!L?0`Y?>WRO Yv?W$`?N:6?$\?K?Z&?W ?X ?[.@?C>NA?0g?T.?>@?@f@E:S ?B! ?M`?F?7 ?E?UA?6H+֑8wFC@?Ea ?Pv@?Q`?`Xu?S=F`C=@6n ?+u?/@ @BSM?>`>.+2G U,o ?WhE?2WD5s?Q?O65`;Ƞ?6g@?P?J_?Y"ݠ38@>D@9Xנ- [@Is SS?A\?QBW+at/L?=`g`?=:w?D[?K΀@E?N ?]D?IРS d@bY?L?N:?:f5+ѽ`GF`X.uG@?c?P}$`\@Q,5sV+FM}6F@J ?%Y?S?Bdh@?.Y?B0`?D*@?N^`?7^S M'_?S1?SL UN>Ƞ?Jj@?W@?`7`?J%E35@?LA`Rua `:@eJ V/@?B>@?CP@?/m?Pm`?V"@?Q<`?]X?cT@?H֊@L(?OL?CVe2J\Z M]8(?BX\ _?{ %4 ??D~ AKR^'!<B%@?R]?Zs?I%?X k?b `?T3 >G@$?B@?M ?>4>DS6`J9 ms?3fҀ?" = ?D `?\?/O>ND?m?5@G@? ?RA^@?JFs 1[2@]]W@@i ?+<嬠P5?3)?6|U'`VN,LL. DԀ?*n?Y ?\?``GnJ?6?W?K/Sb`bWH ?2|@?Z?_tx?\!`?P`4]?/ ?b,`?T`N@@J]rd`9@I@I >X?B)G@)U`,L`?,? x-@?!f_`>&Ju`DM?H=> ?E@Rӌ@]2RL^E cC?/m?5 ?A`?A?s KU c>aEG= j?QUf?QkL?3 ?P1 ?Z^?-v6 TN) @?1& ?'H6U6ې?O?Y6@?At`?"/ ?A ?%h?9?Bm*1BG^?=?Db?.9?X??`Z?H+ ?D+?`@?`?@?"[?Q׀?J@?)?Aa?'N:6?5a ?6?"S&`?@Հ?XM?PW `5@6 505,$?De?62 )ȇ?@ޘ`?Y] ] ?CP@(\@:%`?;Y`?3;L M6>Ap?$`?OS@?P ?Uw?TTn?2 5!10l?((p@?7cW9_iLU# >rr`?Y?d?a?Z4?_r@?X!?N&?Z?\?V-v?_ ?PjR5RK ?5W?3?5 ?(L`8A@%`?32C`'Mq@?:sX?N?LWS?:875TߠVi#LJU _PY?/`?Qހ?V9@?:"QF!+Za 7 U*@L١@> ?W?Q'@M?`?I?!@GWL G[1J ?@V`?P??:@@?A`?N?W!?N ?Q`?X>V?R?Nx`?N]`*lJy?H7Ġ?\@?O ?Ic?UJ?HS$?(?Qt`?Y<_??ހ?(B?QB?DF$ ?U?`pF?EgE?@#4e5\`? ?U`?b?XS$?,@I.k|>J 8p@S`D @A5 ?>;N?<@L)VIo`?5 ?7F`?:a?Q\?A-o8 ?rH L@P_?=q?W$a?P?Gw @?*G@6;v?)3?+ ?A?;fn?"+w?>?S& ?X `?;ό@O ?K ?\?E K@?9?V ?_?aN?TU >b?(A@?EsQ ?# `:[AGI`G)?"͆'_?I ?`?_@?,e Ok@OO`!@@?:?Y@?`u4?P? >'7B~ ? ?Jx?Xw?\V;?O 8- GY|?Ey`?]A?N} ?2|@?CR>x-@?#k?Op?G)N?1?H ?BnC ?Q5?S`?``?AuC!>֠ ?=?5J ?PU ?Z?T#(?=9M;g@?-@@$Ru@V,`Oހ(?CN?P5?N`?/5@?* ?U?UQ? 2`?9[@*?RA? ?3v&?I~`?.Cz ?#ˏ`?PU ?O?@4ߠ+[{`:<@'+R$EKVr8 ?Gm 7 .L?M?P`?4D?@?2|`?@-?!GXd`]DS\kң?FX*?M|`?Dؠ?E?])?bD?L>`ID4$'i??5 ?E@??3T,]?F<?C@)p8@SV`?,e ?7?:[A?:@@?1) ?+?87@?8>I#?CC?]k ?\?G'@?:?1qR@@Px6P.3@?Uj?^o?F2 ??A?Fy@?AeG?+ `?5&`?ADm09.?Q1?T?'B`?`?:`>2 ?(?A>U rr`?Dj?Q@?H`?B3" ? }L`?8@/H@?7R?BFEAPKL[?@Ɓ`?dnp@?`@1PP??=T`?[I?O,4J1G `?Lʀ?BLD LhACU@)ȇ?K^?Le ?%?G ?WU?P7@Ya Q >ɠ7 4?9Xנ?#k&i>>J ?EƉ?Yz=@?PB?$ּ ?E?UҔ?KF&9F{ Tr]SZ?4v`?Tg?R?ېE1@?@c ?_e$@?X@?#{@K~UmT`G_?Df ?J?A5݇P 6??`?:|;-o?RRW ?Pf%4#6g@?7P`?% X*?"+w?7@?9I@?PY?C4t?&?Q ?SvkA@]8u@?M_?X?B ?K@?[`?AfO"Y E?=q?S?Mn )Y+u?Qw?Q`32-?E^ >NIMpH6@?,G`?Me`?I?1hSV`G]A| ?B?|EG[?4'?B%@6n /CN\Dc ?YK?I`XN7Xf ?(e?S} ?AʠNFAD?P?D\Kfn=? c14@?3@?J?F#?Q ?UK?DApU},= ?FS ?"X??[@?bZ ?R?3 ?Gk?\H?`l?SC?Q@?`鋀?`9?*6 PD`z@?;`Q| Gz?9/;?B-msV@\^q0?S;?J0tEzCu>"2 ?0*@?SN/`?]>^ ?QaLs\;E?5J ?8 ? H~?e ?e= ?f 3,?J?>t? ?B?P@?Ji}?E\R?H}?B*_?J<@?\v?O_M`A\?=L?(a`?O (?H@?P`?Y@?=YMfI`?8yw?XЄ?WΦ`?01@?/ Jy?)@?ZY@?>b S@RO7' ;ѽ`?NY?WC?6eNMB`QƀPj4r?Kx?D? [2?``wX @B ZZbFO ?"m*?@Hml<-LBX\%0?(j# ->_?3Rx-@a?+?C?g ?I;G ې @?^)?i?ap@?OPV`?R?\?V6?A?Lp?a ?\#P7#`WLU# A%D? ?@]&``LQDLĀ?;ѽ`?DA`@$rM<?@ ?O߀?O]?>??2hɀ?LP?Wӓ?A&`Xҵ `@@5?%?F@I?I ?j?l,`?93@?HK`?8B֑?NV?^d?Y΍`?FF?A5 ?O?V3?Y+?(S=?'@?ZsX?6b?k?;; ?EB?0@?8<%?Ia ?J??`!?J ?R3>KOpG@IРMwN?:sX?]9p?D5M&DKRs?^Nx@?c?E`XؠaUfV`? $ ?S8I ?R?O?G$<>J?#)? C Hv.CO^Mn?Mq?PL??}@??@?1@?IC?^-?Q+?};@GOUP@^?3?7kRs0T_ NyT8T<?M ?E:`#C64?RU`*1?N?LyE'y= ?H?Pc ?MR?QۉF^?G@M?T?Lo ?:?'tܠ?-8?!:Hj[(Q'i@?1Y;? +M3a?'.?$?d`?ely >U# F1B`E?E"I?]$?R@@EV?;B`?CJ?.@-?,p@?^Ԛ?cn|?A\A2v5=@Q`El@?Q ?`5?KG;+M T@"J Smd`Y LC (wF6"3 ?8r`Jݏ@#3NR?Q- ?` C?NAR#a`Rg% ?DLĀ?V4?N?HUU ?EB #s@:[A???Nw?C?4A d8}?S>?a?WR^?L?S?R?Ix?6@D *O`mP8M4.?'R?:@?8[?D\?Jd`?CT?0/f?M `F?H?b@?c @?^x`?Rj ?$4?>Hr?X?n?K+,`?=?V?R ?Ec*@Kj@?C%?$?> ?P% ?K?Fg@?\a?E?SaX?;?3 `?Q$?E {?%@?U0?Z?:l?D?Cw B#?C?VP?2~\OY`?9p?=|I2F7Q`?EH?\P?S>? ڀ \*S@X-@A?QW ?\ӛ?Dg?p@WP \7`Y2:@?O'`?N7C<*`I 6Н> 6F%`?C,?D@QE%H?Kk ?B&``i?9DE`?&eN?V?JJ' P?;`?Z@@?V@?C+?A?V@?^?Q HPbh Y+?DuH ?Sd?G.Ȁ?\i@?dT(?]o@?VҝX`F( ?]wڠ?IQ+HLo!YAހ08(?IG`?M@?$J?% ?[@;W ?-d?R:@ ?H@?:@?:?(?A?Q?6(wF??S@?PY?T ?XKz@?B:%`x-@)`TA@L??I?[`?Z?N?@_?Q8?Zn@?St ?F7Q`?N-?Su??*??6o?Rp?X?^Z?X?E\?= ?K?Q@?9[S?T`?]^@?Nh35 ?/O>.@:[A?3E ?FSɠ6c?7w @?J?P?*A`;Cd@g`B)HywR( ?#q?$:W=d?[1S`?TqJNԚ?0`?@ C?2C?2`?/g`?D`?Tߠ?P ?MD\?Y@?e?Q ?-q?Q[ ?[Х ?[+@?-8Xx1?X@?6НJ??Iԓ ?:`I ?8Kz@?Y ?S+`? ڀ?Ig?Zs?M퐀?Ds@?C ?=R%@G]6<@.@2ڪ@0S?:S ?K?F^?Y`?dc ?Qw@/`Fw_PQ:?Ck3?OC2?O߀?M ?PL?Y}?U?`?5@?5gE?@$r,:۠J`H6 ?>?[?c`?`.?Sp! ?J`?Eb`?L?K%0`D?H??Z ?E`>+`&X*?H?B(-80?0*@?LF?=A ?SV`?Fj?-@( ?E=?P '\ Tg@Kj`?PC?CNCvVe#ˏ`?S? ?U`QiD BNXw@?Z&?`?P*x?9W 6 L?3u?W`?Kx?$~#v2?Dkm`?RiU?7?R?b?C5`T]`?2?B?CyoрOACX`$`L"Ġ?@?Qle?W"?H@?2?M^@?_IĀ?Q,%}?R(?cH)?WP?P?U`'??DIK>2@E=@T@G?K;`?K`6K ?)@?S? cMd <ZT#B_?AѠ I3?4D?Pr1@?]OW?U$?1@?Ba`?>6J߿Mb" &{4?H'W?U ?S?K``?Dg?9$H?I.#`?Z@?V O`J,,`7Z ~?I?`?\o/`W)NPB?2?Otx!}Ib?6o?G+?5݇?Lp@?Sa ?PS?PH ?As ?=N?=%.Nx`X˗?)&y ?U?7^`P8K`?< lT@[` ?JCVeU.A`H̯`UׁPEX`%c?E?U-@?Y/?A& \)V`(?>t? ?[4 ?Hk;`?0~4T 2?-?IK>C>;N?VP ?Lh@߰?.@?Kt?7?}+A}GFa`?/{ ?Sy?OB?5@??DA@?Vt?6yJJ?14?P(?&ې?5?W]?R8@@U1@B7`1ES*@Nvo?@@?%Yu \\`JH =?As >j@H~?Ae@?S-BP?<p@?V?b?_ ?R?[`?Z?;d>?BK9?UѠ?H&?L$?l?D?Lp?F@?75Z`?:??TV@?^@?J"QVN@bR@S"J ?8?R?P?v`WMQuO?K?<:۠?}@)0?9U`?K:?T"@?2F=?5?W@?Rq?S, PR@P~? ?+)JT`z@0 J-1267 ?BϷ ?0hUSj? `&XGoc5 ?$+ ? <*`B\ ,^@P6h2@beƠ?w?Q5Q0 @?@-;" Bi*]rT۩RiU?Q@?W@?H^?W]?[P?Gi?1$? 3;N?Cՠ?O?A `%2? ?BT>H 6|9K?&``?Y5͠?O@UàeU`2ScV+ $N @U,$[qM `?AB=?F?12Z?U[`?Z ?)0?6?S`?YiЀ?Ym?T *?T( ?a ?`@?L?P`?Z&?UD`?Bl5^ 8`?C?Ia ?';@4?Ӡ?R:`?QEW@/m?4`C. C?/(?3. ?&/@2+w?LG`?^M ?LKH@'!?7 ?XL?X2KB]`]Sի?\6z`?TϞ ?)`Kz@?5@ ?) TVd`[^8@? dA ?T!?TN ?P?T`?:G@J"8D?@f%?CZ?DN?<?$9?%oC U.U`MpUb T#? MaS ?@uz ?Gó@?3F@?2]`*S >Y?7?7Φ`5?1i`?N@?@?%C16|?E@?O{ ?=7  \5@??<?E@?B=qI1l@?D`?\p?PTF2e[`J@\g]u>?0*@?.>G@?Fυ ?I@?; t ?#?%?MX?Su?AG?Nx`?_W?S 2G :V?P]c@?`I?It7D?E?O1?U ?S"?#a /`?K+?9E<%D;U?J@@?J >3+`?V֣ ?R/ N.+N+`?E@?Q?M4?>;z$@?:?a?\Z?At`?S?eu?b} `?&Q[ ?)RE?Md:Y@S+`A?'k!ƻSˀY-6Q?K>?V7?R?CUM?J?F`?A`?In?1i` c?D ?936`<4IO'!?*]r2r``?77cKT=[?; Z?2?C?Nd Md Xf b `D?2x?L5?L-P@+.@?G[?AŢ?0ޘ`?:@?+ uO>U# ?E3@?\?ZaG3+Q;``?6.SjZwDuH `L3 M&?&``?J?O`?Ht?Cw ?Iԓ ?F?H?Ja` &?Bـ?B:?KŲ?]*?Q>MkCC?]@?aqA>]:3C`?J^?Pр?RA??'?:S ?S?I?2< ?O ?P?G@?S+%`?E},C?&,^@?_?PtRF)`?G ?.U`;`?&6`!Y;?V{ ?Z?U?D]1@?KE@?aQ ?d,?Qv`?$9?I?6Q`h`Y\ :+2ڪ@@ ?D ?XY@?ZQga*l >D@?Z!L>2 >A`?=?G2D.X\@:u`>/;> 5D@J`?<р?R?D*?!G? x-@?E?D|`H`P`(12= &Ū@?E:`!@RHT=@]k `@MS?A@?_F{?a@?DؠG4U?DU?G?@p?A7`?D@??o ?U ?Zr̠(@N2@>x`TV@ale^VO8`?F#?\?R ?IuO?R( ?QV~?M[?M?QCU@?R^`?RA?\?ZQ1Mn?= ?:1?G ?R$Y-֑a?]=E?WcWST@?Nճ ?UW?F`?G?8II?,P?JG?RT?_Ͷ`?eh?U`?$4?G~?B69`?6``?VX?0`R4:6?#T{Y"/f@ )/;?Q2?Wk3\$@F0?Q[l ?Lu?)?U>`?WS; e+J:h`??.`@ !?B! ?M`?MJ@ik `R $?J0?=C\J@5L Os``Yԓ B4?ע3 ?߀J/`I?dۀ?$7w @A`CP@?"?C>NCG`MkC>WD.Y@?E>A` d?4?+<Ҡb /`?C%?\nR`?W0m4rJ{ > ?*^`07 5J ?)?A?@= 8[G ?CR?W.Ȁ?A?@G|?O!4DXSՠB?CS`?Z?Q*?B2 ?P@?P+?5?6Oh`?O+?Q?Q ?]A?Y9DR??F{?9`DL?.g`?Q@>JiL29B`CT >$ ?^y,?X?H?Rr?Mu?$`" ?)@ ?\{?dC?B HZΠ?:??Q5`?C{@?H̯`?J`? 7@H??(Y;SH ?2`X$SV`?U?`O`2gl`b>b ?!$<]?W ?h?T @ta?H ?XS0qV@N@`A%,L`]9p`(>@?SB ?R[`I`?'?PƁ`t`Ta?07 -USzQ+ʀ)`?3@?#(GӴ?Lf?Xw?TL8`?V4?[SE ?Q d?Ao@?=?v4Hc@C5BRUt?>+`?U?+.@4z?0G|?% K@T`?AO`?:Q& V"`1`?(- ?;?R ?R`#8@V@\5bT΅5`?Ol΀?Xz?PS`?RN?_(?]J@?O0ӥ N`?5?X?A?(@?[Z?b3?Z@?SP`?D'?*?G?Gw @@H@H*?G?Wd ?A+?,@?Y0T?dyc`?SHG>@K ?B-?. $?Q{-@?d *?``?Ok@?R ?Rx @#V4D{58?9s XoUYqa?28?)ȇ>?+" ?Aa?8yw?6 5^ QYFƀW.@M7@<|GQҠJ,,`6 ܀?D?V?= O`F|M@?[2< J??P?(j# L~ ? '_?Z|@?;Cd;)?Ip>X5?L31`61Q@G`?5?E| ?,|?D-`?U\?R?QÀ?V ?P?:?:sX?JP`?@r1@KUx>P`\嬠\?D9?_?C`RE?9Xנ?c=`6Du@CךQ@R[U!I ?O?\?J`?%) @0@?, ?Ry`?T ?K6@?L[?Tz5?S ?SKr?T2?&iQ&|?T?R?Ue@?b`?`t?P{?DZ?-d &?2s`U Qrj?Q?c؀?at?U?U)g?\ ?XX?I%?E K@??Y`?D?U?K@>`?G`?Tf`?Fo?! d14 `?=@L]?K`Qv`Q@G@TR@Fw0ӥ ?1Y;?!a?bL= @RPSq9O_CR(j?$?3=6?4>Ӵ?Gՠ?@0f%ѽ`?01Ep@S ?'`?>DU#`H ?P# `Qn>X]`5?O`?P| $v`Eti< `?Ak?J)?J ?M_?\*`?1ܡ@# ?UO?P2#?:3ր*T4Qe &K >LGu?E?T%Y@?0]c@?;d>?V?R7`?B@`@M: ?;sG8@UE ??R ?R ?,|?Ge@?Z`?T?R`?X ?Q#?KS@?Yɀ?U@1׀@?9Tv`6Ffg?;ܰ?Yeo@?SQx`?I1?G] #L8c ? ->?/ ?!w`Qj4`V?0f%?bZ?g?^Y?A@?4좀?@39C?Dc ?e@?Q^`L?P͟?6 9# B@?5B ?%) P3; \/f@Pr`?#o?3U"I`Z`n@Y:.:_ ?iA>Qs R&B#?0m@?0I/.` ?8@+f@QO`R} `H/=?=v6 ?P@?H5AS~]@?9`?QOKYfC>NJSR<S`]*F/@?Q=O?3LGO@E!1HT<,|@G ?A?Z3;N?S_?U?+C?F0?S@?D:'@$`>`# %.U`Bw:6 ?f@Hp?8`?X@?Tn?Lx-@?S((j# ?\ ?PP?*>ɠ?Dp?I[@?&`?Sz?`Ur?L@?9`?O?K?N?]J@?S9DbMG+qa,?0?W?Yk?G?- /9WPۀR3>?Q?R:@ ?V<@?\-?F)`E9{?Rݠ?_s``?F@B`1'`3;GZ &{4S@?C- ?c@?Q`eV4?B ?22 &K "J 'u2PL4Qaq=?v@Y?Fj?I FU@Wa'YX08(?JK?`?Z>ɠ?c?Pm?ݠ?91l@?<@_?C$`?W8 ?YT@?_ޯ@?e`?`0~`?B“`??C?DSI)@W`$?+R>U?VX?[?CW~ ?M`?DjUK@B2 ?4i<?=?AЀ c CJZ`?"[?;$?@U?7?HB??7' .D?2q?K?92|`?G?\!`?Yի?-;S%Nȏ`?#2C`!SE J<@?'@5z`L:۠? @?G?2C`6?rH EcE`B[?Bu@?B4:&?K@ S@ ?T:`? E,3S/0@+k+ ?Ş?as=?T?V?^%`?QkL?I`?Rf?Cr?>@?Di<#س@C@`Q2W|N.?A# ?FvӠ7V( WAeU cRAK`:$ ?5`?DR@ @-q?T?\S?1L1f?L[?R`?1NH`%mL`%`Iz`#?`Y@?b ?,嬠DuH ?2?L?;<ҠCTM̀?G?T^I?^ ?\1?Px ?FT?L@?Dּ F:Uh@=~D-`P?K?][?:o?y=?@g>?<?A ?4?7i?I7l S2π??Hq?D%?Vk`?!@U 9:.?/@""`?;-~@?U7?]?\ ?Cu7?(12?DF2*G@I>g?PPˠ?E?2N?V6 ?`ۀ?S?7*g@?P4x 8 `g)`?'I?Q?TI{?Fd ?8c `=?ң?FU@?-4@^`U$`?&X*?Fn ?W?bA?ZM?Af_`?S?g ?Z?K`?Ki?R?4A2F#A*?R ?;8q`9CN9ȇ?5&`?Hp?Nb?6HG?7 ?8EI'> >ID HR@?@.`?S@?>/?n`?N^X?V"?QK?M̷?IB`?A}]?v6 EQ_`8 ?S?X_ ?#v1&`?ERw?X?K9VbeF& U@?2b7?I?Q$ @?RT?Krz?H ?RT@?Uv ?7FU@N^dQIA?ADm?"q?,'?=U?;; ?DA@>x-@8 ?2 ?YREA?:sX?*>ɠW?> FK Xp=+KŲT(?+ ?M=`?M/ ?Op0/f?Wn?[`?:6 ?/8`?R5R?\V;?\= @?X@?`n?c$ ?]A?Qn?Io Fπ#9`?16H@V?">?`H`?]5?@$r&5ti6#?'g?S?Xќ?CJ!6?0w?VӀ?h)?lb?T FG ?2#?UVL?A d??LԠ?Rl?)Le<?;@?<'} A}??Qݹ?S=?N%h?M`?7?,?T?UZ!?26k ??e$@?S'P@?J`?1h?0~?=&?E?Fa`?I@?Pؒ?Rn@?W4@?^u`?U?A2?A@?Cך?6o?A?J0?E?Hq?YQ`?e)@?bk`-֑]J_?;w?=?C@?S]?VS=?S'`?U`?V`?=msEO`W W@5gE?H39`G@6H  * Jy?.?AD|`:-D?Hg?L١@U GC] Pw`?KŲ#$ KpI`?08(-0D?@L@OO>?Sc?UX?9f?YR?\??[ʟ`?Vn@?UWe ?Y?P݀?0`";] O{ <¢?:-@;@_7' O'?V^?a?R1}?>?5 9@?3s@?^ ?c6?Mj*4U?$?U@?g?{@?j?RsHD`?@?a$?Q= E `?R?>?'Z ?J?Q?]@vM 2 ?XOO`?Xo?0@??]Ҽ?]0?J9P ?`>U3jDǠn`?V5 ?bW ?_?UPG ?EBQwX@.?-~?7;@?Jd@?4g@;L S'`? ?6vӠ=xf?@~<?X`H@??S@?Mg ?XZΠ=@@QZ`_ '} ?``?Jd@ B@?2fY$Hb{BbFM7QN@?(,р6\ߦEh?L(>@?JS?7Kz@@?7O@!}T Qd.l?(?"``A14?D?O8?`?DE`?;ę?<[>֑??7 ?HVm``D?&`?C?N?Y#0@?PL ?L'`?c[`?UZMoL= @`Dq@?b(/?`р?.CyZ2@Zq@?> ?FG HX 2>?B}?B?BJ B}Lq`?VYC ?] 6X*:?PS`?P?Dt?Lр?P#Z?..+PLN@b7Ib?Af?X?G?8(p@?I> ? PZ@PNhQ }@?!>?V#?@P`R3 `?QE?`?ZH?K/Oh`QAH?V@?Y?8 ?7?KQ?D%Y@?)~`:<?F-v?Jk3^&?B'>@7?5 ?Q dJQ[ S@?Hp?_:p\ J +f@`Om@g!@@?G&?3 `?Q~v@`O?!@%ǡ`E7G69?&ې <P4ߠJ(`?>vo?Og`?'\ 7,?c?KP?KxF}e8_/0 ;f@E@Y^I FI?X?&?96H2K?,@?Tq@??@x?73)݇PnFS EVZ@Cc?] ?X]?0[2?)իMH]?vC?+R, $?: ?GJ(`?X @?5=&?Wn`?N^@T?S@?[ ?SUM?M>?G?7@P-Qc`>`?5'`?Gh?`@^?Z9@4;d>?D (>VYBV+F\eeF?ZJ?Jq( C -Ji?.?6#?DX?G@?H&??1@C?9E"?d?`7k5`?\W?bV,@?J5f@?E},?Ap;6JI IzQI|@?`?AvR3@Mu8<%?R=@?S9aQ&PW]? JiDʰZ:h`?5?`?d_?bN?G/CD6@?&?4F'g9@X?@j?E%?Ai@>msGrF???5>`?.?QÀ?K] HgRw?$- ?-;G@D IRE?:<@?^^?W?F1*O.d?0ޘ`?Ym?:87QjMYB;@EL@&5 A׀Z߿W@=-`?\@?R ?H~.";f@(L`?LT ?7@?8,р?\Գ?K #?V@?Ih,T]1@?7^?f@ ?c?X&?PL?Nm@?G$ :F?CT5 ?W?a`?hݨ@?]J=R?$A`4f SV!c? W>S<`?0`&|G`?7?CA =W ?Al@?Z?V>Ӵ?0t?[ 1?Sҭ7`?\@?aZS?a-`?. P^{2@?9n?1o!>K`? V`0UjTT{ ?9p8'B=N?A~v@?Hx_ 8%7?WM?R >?-@?f?j?MB`Ju`&?Bڠ?26k `?7l ?I)@?DZ?A?8gK,[k E3?=P?3+?;@?@ \?/9WN D ?S?P&`E+ ?B @? uz ?Q`?bG?WB~ ?+f@9W D?0I?G <H+ ?@\@?Qa?1J Dh$`P@U_ja$S`?+<Ҡ?P?F??@?E c?;?Q`?^!@?B! j?JG!G?Pz?Qw?4?`V?gn?Y ?C@?8p?H̯`?SS?($*-D?V ?bݭ ?a?b1?V8[L@U g/;Ac`?H$?^N?8Xe\2@XQ@ȲFQTE`O?B?`?YР?.m?%?@F?,p@?-?O|"?XL?JW`@ZJ@>Z!?@Ǚ?6 T@?7?R4?OǀQ`UrB>6g@G`H ޘ`?1`?&Oh`?If?[I?N%`W^{`?Q2?h?KH [SE Un8 67Mq@2|`? K`?Cc?=^@?0@?@@?F{:|@jҝXHlSNu77 EL@F@?E+ `?*U%D ?<4,! ?I ?: #2C` ,K`,)VD`R?ܡ@?\ ?[#`#`\0tWyC$ TIXؠ?6%@?X*?C=62a>`??^`?@ ?R^?[ܰ?H<%>?)o EKK6@?G?R ?P@?]@?T ?s ;/g`?/k?V+F?M4@?A?_"@?bMi?P-?@P?L?OR ?A{-@?;" ?Ex?AF@?M?`@?UK\`H(p@?4D?=̀% K@P! Q`?%x?QĊ`?3>J ?SG`?U^ ?CR?MVu?U?M`?AY;?:l?I@X?>֠?>!?BX\?T>FOh`aII3TNQ@?@k2=@L5?#s@Cz dk@C,?ePG ?VZAZd (p@?)ի+f@?J?HJb?H?7R?H ?TV?MNTD\eSAo!&7a=FU\J`?&BD? d" ?!+Ӵ?3?M@?AЀ9RI ?HZΠ?V+F?@CTUA?D?#?W@?^LG?LJ0?D?Cw ?/;.ݐ}?=&?7?@?3@?g`?~?Fj?OEc@?O:p?Mb?&#?"J ?Fܨ??.?YF:@?W@?O9W?U@?KD|=C?I?b?^6?D- ?M?Ui@?A?6eN?8MBPt? ?W ?_?S*PNE6?1 ?; t LdwAo@?[R,?ci ?V?Kę?E!1?>`?O|"?Sc ?%@H?;?ND"@:y?Um?>ߎL>$ ? 8(S@A ?T?[6Z[\wT@J "@KTU0`@Frr`?a?[ۀN{`Gx?Wt ?Zp?Bu@?(?1?D?LK`?D~ ?K@?UF`?9ȇVӀ_N%IJ@?1 >>@?JE[?> >,р?""`? n?DL?W,?V??=d #`?G?])?S1-oKˠ?2?Y?M"@>_???A8?2r`?D?9`?ի?5ti? :?G›?a8?ZT#?#;E A8(>أ`>?5f?EW?=?>2@?G@?F"?6 ? C ?@ ?KY`?*Ӵ?,؈?O?Iy ?9o ?%CfҀPG1?; t ?a!c?^ Q>?1?UC? A`]Ra\@`Y0TS& ?T6R ?Q\`'Mq@?Ij\?DM<0 +`?Q7?[@?RG 7@O KCd?.@?> : :D}@?QL?WqK@Hz?Y ?S'ó@?9 1?K ZG@?D @?\7`?Yо :U@?^`#?g ?#^?L*n?0?`?B?IJL[E) ?T ?T"`?.t? ?6?6k?0g?N/C@?Tn* ?SM ?QX 3@XS?7T@?O;`v3{@?N=`?G`Cj? ?T?CP?B4?ZP`?Y\ ?3='?O5`?\?S ?,1?* ?V@?^?Dg ?#?V?U`;.@L)h,?Y;H Z``3A?Zπ?R?3;?@^{?ѽ`>?F9?C@?9 ?8 `?"'?C ?}x`H`"/@KuR/41ʠ9@?DW?E?&@?S ?`?W?H0`?WD8Y@/F{$9f -++?6`)W ;$?Qz?D&q?1}?Ia ???,`?K?SM@?Dr?#k?F ?Z?_?U->`2?O'`?Q2\`HXR@8q?@ҌPU,7@?@c ?0ޘ`?DB?Q`?<?Ԛ?W?W?`?LI?;)~<?B?QNԀ!C >`2OO>C9`?W V5Py?, ?!J ?Q6?K*5@DO A1@G,?A?bّ?VHOi?N?b?V6?0<?7\ ?;" ?Cՠ?S ?& N ?UU?l+A ?Y`BZ4?=+:@TsYM?' ?=#?>Ԛ?'5`?2 ?,`[; `ӥ A?0~<?E?K5(`ojNɧT&qL?0A 1}7?;I`?N@?/9W,Y`?p`46@MTD`7tܠ>?+f@?Nk?@@7\ ?C[`?Y?J\Z 2S=C?0?3%H;R ?Qc?Q?Mq@LήW[= ?I$H?Im?KŲ?EV ??`?Xe?BUjY{?"m*?Yـ?RZ?2? J ?2`?G`?ѽ`Gˠ8?7D?;s`?5?C?>?#a?;6@kT"A!c?N?O{ ?N8?R3?Pi?[ ?a'`?L?@Z@?WԬ ?Tw`?<?B?5Y@in?0?]1:`?V@?C@?UPG ?SOh`2 = Ja?;YJ?\U# ?Q4??9[@?^k?gF ?`~?KA?Dkm`?BV,@?O~@?X`?/M?VJz?k0 ?PdXH ?I@?Pw?;9@I1W E},F_? q?Q'i@?X!?)ȇY G`?Dּ ?. ?<2IU Q?v`DbJGEX`J!9 QH;; ?FG ?O(?Co* C!?<-?UD;?N ?8,рAY;U K@>?A>dۀN K ?; ?I:/`?^`?aʐ ?aW ?:]@C`@G[1ּ ? Z?O'`?D`>ߎ?2S?P<=i`]k Y/?D_  `((?Qo ?AkQ`HcC Gy=,G` 7@?0L`?5z?-W`DA`XBXݨ@,`? ~G@ע?R#A?Uo`?_?d:?[@?PZ@?V7?S&8?A@?L?S8@?G?Si ?b ?W.@?"4?7.Ȁ?@C?`?- ?Da38@?@?>b??@Ɓ`?OF??ހ?P?<?5b`F{? Ȳ?`?`?T\ ?\ XG?Cd?S?U9Ԡ?HޠGI`SKR}?F"?P?5??WE ?X2?F`JZ|EgE?L7J`%@ ?#- R~[ *6 ?N?AM0 8ZΠI*`> ?I#0@?JiI<_Q# K4?=|>a;G`?PI`?R"`1a<͕?Q?[$ ?Lw&eNN]`T][0g&%@M ?j?? )9 K@?BΞ?Gi?Ni?: ?@f@?Yh{ dV@L= @M=`CT?4v`?!D?K=8%2OX1?Gy=> \nR`QL$+ ?.+?J2@?[`?T?"1) Ab`I?:_ ?_7' ?U@>0`?~%ǡ`NbA2?24:?Q+>`?9@A [2?GS`?5ҔB&?C?$ɘ`-o?I= ?Ai@MUο`7 ?;m?6 @A 9?7Xd?K2?P<?V?U6?4- CI ICYH@N%`@?9 ?[`?d?PQ@?IpCJn,4A) C2`?6}e?\4?PJ=I%`?*S ?8?& 0CEpL RR(B-?5Ҕ?Rd ?NE)9&y ?3"?Pl+?L8Ӡ8?)Y?P݀?UH6_cXP`db`N8C8@N]`? RE?01]?G›?RJ?@&?PH ?Uڀ?S{?TYE?`e`T"`?7O70?O$?LD 5Jv?5?`?S6? G@?)@?#`P*xM]=@NN ?@ ?Eޠ?;1@DpF@E>?Fڠ?e `?[ 1Mg VېPRs?Mo?%Y?t?VJz?Tq4.01?N)?*1P_? ?S|?HB"`?A4?B7`J@PU,?"l?4#Hv SHL`#?@F?K?HR@?Q?R?:y#=0@ J=`PpK?:T?`9?bSo`?<|P? @@?)?@"B@1Y,7@D?!) ?^&?gnJ?Vk@?"? 1?ې?CC`?P?Q;Q!c:Ӵ-`O d?FqZ ?I[@7B`QSB< RE?.Q5?O`?\ޠ?Vg ?P&`?S;``m](wPI??AĊ`93!`PE؀;sI[@]@L*`?4?F?P-?"WD8X?Vy?`G|?*DP ??6`NW'D?V"@?c 2@?FlBU-`ONQ[`?O߀?T : -'_?H)?A?9<_?;&`?)V?5 ?A1@?Q@?`q ?TU 8 -[?03@f ?Is?_ ?I ??-n ?K?%?$+ ?AC`UU?,Y`?GٙPA V`'? Gx? 7@?T ?Hx_ 694r5P +`G@>X? +?5b`??U?0`?8a`?0@3>/;?KE?G$?O?7Z ?)@?p`4 @?A?B@?G@?Sҭ?#@?B`?`?^?T ?G:`?Y>?X?n4 q?E?`O.d=H?Gy=?@߰AL]Fy: ?R?gdo?`?0C?0P>ٻcP5?J$?I`?G؀?@L?(?8̯`.@Lg5J̀Jl`ů Z] @t?8A@?Ql@?Aʠ?-?U?VI?$DP% L+@DuH ?.d?L ?\`? '_E?90 9a ?].}?\ ?A.@?VHJ@?C ?G*?L IT`?E) ?A`?"T 02dh@?It7?U?>9 ?$SV`?H7Ġ?>`E cOH?Pؠ?R@?*^`PUJ ?A ?D-`*??9 ?S?$i<F?:S ?YHj?R ?MJ@?X.u?F`Q!cRI8II(?%?4?@?8`?=??B?1ZX` J"3?g ?2E?Nz#?6!k ?&@,s?JҜ ?`S΀?U7?Z!֑?S ?\$?G@.b 4oΠC +qa?Rg?EVPz@Dּ ?- #u?79?Wg,?O!@'&g`?Sa?]$?=!?SUM?W`?<@?(?E ?T,w@?Qu',E>??3?6?*I J{ P(A) Eǡ`?# `?QF#ˏ`8}?S?G -;?Ld?F A?/R ?I ?)*`?G ?EmנMK:?5]`RBvTbHO?5?R`?9 1OkP1?)J@?9Cbq@&X*?XwF?Ve5a J ??GV3?R `?a?h?a|E?60.Ԛ?AN@?PLj`?CX`?IJ@?ZD?S@!&`?#?*?N`?N : K0 5? ?El@>4VQJ 4r6l?:?PĠ5>`?+NWGP`FG@?Ss@?W"<Rf?R??bX?NI ?$J?I?VŠ?V`?N5@?P?V`?EN,?T` %`G 8Oۀ?ңVJzIz? ;NW ?Tp?E) W;` Pg>?`?f P)`?Rm?^M`?L8?@C?Pؒ?XVm`?FAѠ?+R?V=W ?J1?3?ӠIo`9ȇ?Bx@?4:?5x?X ?F:8t?7?0ZAۉPN?a0Y?6 ?@?Z!?8j?(j# <L?5 ?K4DPf B+w(r?6 ?Q>g?G@?bBI?GZ?R{?o ??Q `?3@P;/0@?En?;`?c@?c?3BW@?"4?C>N?0@;qa;?B`?QZS?H&??B0?14?-8?Re?L@S `a4UQ?A4@???RӠ?NbT<?A&`?U TBI`U=; ?$ɘ`B ?,?XЄ?FjA3 Cr14CJZ`XQ?S`?bVr@?T|f@?; ?+u?<$@?L?4LĀ9e`?Y>2 BH? ~?G?2>b F@:lFSɠ], UU?H?Iy Xgf@PmC?e?f^S`ؠ?3?<R6@V7C?D( ?2WD?!@?a ?jT#?RD M Mʆ`?1&`?V@?<:۠?Oh`?W@?Q@I^Q@P<!ƻ?&=`?1T@?6?C `?Re?U[`?N`?8D`(a`?;5?]m?Si G{nN??;[{`?G[?M4?BK9?C. ?RX?Mf!9J@?<>?LXB`?IS^?T/@*f501?R&?8╠T[G?,~&xEYO (My?/ )?T{?P?5@ @-? +@Tw`YE?3A?)h,;?0@?V?BnC G!X*?PKRQU`D;`F4?0?EC#@4 B@?:KINUT`LрS܈@\c_@V:?ZLy?\yE?J ??2? ms@B\ S Yh@;?5݇Z?4ԋ?Md?; @bG*g@?&9?GKg`cH?*?TD ;Cd0y`?g<2`?fvC`NS@?L?@XwFXAQ ?9`?7l ?C?c?e>õ WG/? /`?N)?U ?# @Fd?D?IJ@JaTy`?0?V ?Q@?B?G]?S?[J?]?R$?@@?=A ?Tf ?&X/@V`C+`18?* ? 7x?GLY?^H?6W@?Tգ?X9i ?H?@n@?OIĀ?R{f?CqŠ?>?B@)5U?G]?75Z`SQx`U%La.F8i?0 +`?PA?>b PN>x-@!YD C??K*5@?Q;?O?+h@JaE"I?0Dwx4f ?@$~?=; ?= ?; `G %!1?wFFz?O`E@y`?E0?Z2@?]G ?Eƀ?.`1ʠ%J HJbRր\[[k "m*?I?@7@?D|`?L?)~`RϷ V@?D??_1& T@f`c@?&ې?_ǰ?P?8G?a?e ?FJ?;4 ?Q:?4m- ?% K@?@*@?7T@?3@?S|?G} W:G\K !&`?G@?G@?B`?(5?l@?Ds?E`@B`T.A ?W`?]$?V^?R“`?MR?L'?V\ ?ZC ?Pp?14*O.`Z(T@Hv.AU?f ?4`?`?H?Tk`F'?P]c@?^"?R ?N8?F 5@2X?I?L~7@SM &/`?Sq ?44USt Ad.A4 l@ ;E ? @Eh^? ?Y`?^`?T`?Q`?I+PQB==`?G@?RD ?==>\@?:+?9a A2WRBlI ?G?B- @?D @?XC ?U@?C?g BQ`=6%@H8L@WGU%%`? uz '@M?;?R@?LLE/m[,e%ti?Tɘ`&_Ypb`?6F?a?_I8@?B̠?MT`?Y/;?J?(>g?@?5`(>VG#9`?(p@ ?22 ZE[W]3|?f 9sGJ(`wF?GT@?FU?'@D@ WJMK?P?eB ?h?c^@?T`?%0 d?I 1?T5?A}]#|012dh@>渆?@!)?;?=kC?S@?[ ?V ?79"?H4{?b?T@D#.?(tR>`S?>`?@O`UM@bàQN@?3A?$ L-K@9;@>`EP@L @ +`J>ɠM>?4?W?I>?D?R ?1GS`b%, YD?E'?_a`?T$@V{ [u6?X?Le?>?P @]X{ ᾠlNGWW@Y>/?Oq/?@@-ms(- Q7IZ|M4ObT{!w`?Tހ?Z ?0-[mZE*L*`PTCw?@$z?Oǀ?W|?:j@?WD?D?D]?E,?5`?2|@T`Z?G>?8|?5M '8@?65 ?@ޘ`? G[W`Sa ,tOw`Q8P@:P`?PM?b@?cZ?_>@?U?3dF 8@?Ba?K ?T6?\N ?UӬ?Lr?Qn ?C侠/J?6`?\؈?] ?7 A ?@U?[4?B=@U 3O% >ȠG@},?CyoxW6?Ax?F PR@c܀ea@L5b?A8?,1Tt/cjNb?R/M?R@'y=QSQЀIBݠ?R?P @L31`_> aa= )?a<}@?X?@`?EC _IĀWLj`U'X: :?H?K1߀3[V Z PC?7?AhBC9`?&n ! :?6!k ?Q͠?L\`?4j?8(T@Cn?Tn?Yj?RJ?L?@?St ?a@?Z@n ?HePyVg X1h*/`S9Rc #L?A ?DJ?,oj>FABE?5mנ?K] ?4w`X?'Mq@?Fa`?\ǐ?b\ ?Qj4`*K&kGocO꺠?+ ?Y?UQ_`0O P_'.Ȁ?CUM?ʠ;8`/;?{4*Ɛ?" ?CG?L?Ys ?^>?P``?D?3)?;E ?dۀK95s?M >J UW( `?Q*&?( '?BW@?@'?*??4q&\ ;L'?@1zQX`G AT3@@_qO!?>Se?4+ (??bEX`Ry`?3س@?d?ae@%D;QTGK_F?S?Bّ&y ?F?1 Ej>ߎDʰO@8eYJ4Z(W@U.x-@>?ULr?YCJ`3Er8??Wq?Z!`?:A }@M(wG[`??`?P@?<2 ?K؀?T@?>)?@߰?LJ05x?@AO`֠>lKGJN &%@>},?<?B3>2@K ?D?`;?QC`N97 ?a+>`?YM>2@?O$?'?S/?Qv Z!:`BT?S- ?X>V?OU?H >`P1 ,^@XP@'^`>2@4?C@?: L|Tߠ?;Y`?c?au?:-D/(#UMAo!;:aX}@[eV@0ޘ`?J`?S?S?8q3ւ62 DrTZtV"7y=?Dw`)l@IF:@?Eޠ?Uw&@?8`?9s ?M`?2@ \?T@?^z?MK0Rp BA^@@?5;y EO.Y`^?T\@?31I<Z!cHX!(f ?&X*?] ?`+?$dۀH; ?/f?7e@$`Ӡ? 7 ?4W?Q,?]y@?_}?H3c` uz ?E/m?K`Di<^Vg@?Q0+?e0 ?P4ؠ?Hv ?Vy@?=㵠8II ?T?_+?N?0P?""`P'/E<`?BoPlP~_hm@\_ ?BM ?a?Z"?.}?F?h%'@?gҝXTFE@9(?B ?Z܀?H@ 1?5mנ?>J ?@g`?X[3)?Hj# +M>)?Vn ?T<H?Gl ?S+@?E ?N?N_q ?&!@!L?;?V??I&y ?Px6?^Ԛ?Ls`A*L*n?B?]P?SA?SE ?aA?WB`?Mms?[b `?\@?Z6?\`?JҜ ?dۀ'A?8?Sw ?6 3 ?kR`X: i?D?TB?a?^%h?_@?b"`?PRp F'G\?-T`?SN/`?T;ˠ?1 d ?L ?Vd ?DE`ÇPn\ )ի?H0`?Q?Q?X?\RJ Z|@` Y5[L/6 ]@Vc?6q?Sm5T`#@Z"ڀCI? (K2F ?)V`?h 5!J?*`"9@?FI@?CH`>|?F`?FI@.`K`Mn ?9_ ?P<'RbB'@?K\?Iރݢ@?l ?J?Y@&@IF`?3y@?N#E`0>?I @?3ހE@N@`BMT"@P@? _?O?O6X1@7@?PX?.m`?8H݀6DC`Q:1 1YWԒR@B) A+?3?2DA@?)Y ?4?0. xaLSS A-?3@ElU)@%?M?=<@? /@?PD`?Z;`??8G?{@?Y°?Tҫ?Λ ?529?X.?U@?4U ?7.?A !Am@?,F|FC?@$?P4K?K@?&G$"?B>@J1 ?)<*CJ?P?&jL?U*?;e`Zt@OX ?IA?됀OB?3m?^H?R@PW`?3?/(Ya Y`A Fg@Sg R %C)?2Ts`cH՜7?0@?w? 7>BF?M ?@QPR[@?9%@>%E`Eaf`Ri3@?IR2PH `e'?F\? ?5?8Z3E>R`InPFo]hآc7?]?R ?)DST@]& Md?ACؠ???@?:?5z`?0 >\dTC͠?;8N#FveP&`T> 2`?)Ҁ9e%}8?$Lg`FSnD'@6\`<@?R`?V?Y@?!ͽ@L!=o?AY?,t[e5c`TLL]-]`E+ۿa iZaFz`PҿM$ ]`?Nf`?Qp@?([>9 TA ?*z@?YGP@7Q Z HW`W?4,@)NYӠF[?7{?I4@?P&?"@`?'\8?(cDb- YϠh!cR?HJ ?`~@??Z:/AH:@'`?AY@?7]? ?GR`?'a`ej+`?;e?7DNQ'kS5; ?7D?#?#M@TYB]@?8@?C ?D"`?W5@?\4 OM\x;9@F?y?)pp`aZap?2P` ?N:%yǠ/I ?+?R{P?K&O?,RGMa OT̀?#8AQj@m(DuR ^ܠQ̀A}XZ Y?@?b5(?Yr۠?/*SI ^ @?1&?\`4Uͨ&5M`XͿ?D} ?Y^ T`Nm`???S>Λ *?YȽ ?V?81 ?1Q__ ?>"?`¸?L?D ?TR ?@&aH݀?>&>E#?@,n@?a `?T6S_RV?&x!Wv`N`$46@?@<`3?;@?%O,XآP@DH'5@?<+ 0E8~?N(?EXTR Q?T5?\e ;q@[nAl?@~5Q -ܝ?)߸C6 `?PF?UR?J ?Cy@?Mj ?Ww?II`IM\`>,?b?_E? `??M6?7KP̳5ֻ=xV⧠T:Bf ?;Р?TXCo `W]mWQ@5i\WaP?-R`? ?P;?G?Ow?@ ?佀?6?Tp?G- `?1r@?B?v ?;@?<056CXh$[ ?EJj?Y>=@>k@?I @?`?K\Wh`_`3a ?G} ?; ?at`?Z?:?Ig*-"\Ms>Z|@?^H?F?+ ?UĖ ?R[?37?&@F[KY ?S?gA?Xt`CI 4E%`?N(?'VQ6s ??``RaO@?4`?V?Dp?C?^.C?] `?7M2F >7>`GxK } TX?;`=,<@?A0~ ?3~?-F?Qo?X1 ?W.A ?O&ՠ;,L,?17?._`F?6?PӠ? M܀8`L/6 Tfh;?A ?U ?AE@/;?io?9L&?FR`,c9@??R@C7 PM3B?p?H@?PL?C/?W?T@?a}?6" ?8̀?cK?O\?O?1[ ?;>=lP?E,-?A1_`a=b ?6^>d PB?P@?T 3~U@B`?>?5lI@7G`?. LIҀU?* ?PG ?*j+b`/%IOǠK@(K?@V ?/?*?B ?R?QN?M ?N0?K`?U29?_i\?NB8J;`Q(3 ?Ew, ?Vs_`?S?Gט?Dd`?7?f`ZLQR@?Qk@?_z?[?N1I?=t`04[9CE ?_'@?FR[ 0?V@?E# ?A( ?Z?^]p?KT ? ?76?6A,MG X֠@Ϲ?Q?dn?fM?S/`8t`@ %iΛ 1D&s?;V=l[A\@XɃW @P7Q I `CH`6LTcEW`-] ?P`?L7?Q2NL1``@XO@H(F@ODׁ-9#C q`?Ak@?W1G@?TN7?='-`? D: $)`D:Ss 4 ?W<* ?^/?S?&5P ?E`?@0 ?G@?^ ?A(W̵w?T(?<ͪ?2>B(u?R?PG?ǵ?4`?3zZT@?A?Pv ?/B֣7Hb^ Pd`?WԠCH`fl@6$$?RxJ?2?X?Tڇ?>  >P ?3" 7J Lޚ ?"]`?S62?LRJ ?3Y@?.BK0E?7`?%@C; ?,75 Py=`IR``?]WɯVRH`N"LHP[@Nh?Q?G%N>*?9?z$B mNj#`?Cn?[G b] d'@M?^?<))?(KBzLdn\~`W@?=A?*(K`O4cLYZQ?-?Qz?6(? I`?A3\Uaf`N@1 ">U$`?D.?SΛ ?H AJ@?3?R`?QiW;J@?4M`?qN ?6`?3'N ^E@Vٕ@?:?V6 ?S*?PQ`?[?c2?[?JB`?Q+?3P JѠ? ?H%@3; @FR`-ܝ?0`Zȑ@c@V,T3_H Yʠ?#G!,KeV6 ]ٗ?3 RI`ZF`?S(`?PT E3?D?1$e??,|??`&ME .*?H5qWG UO6:9ETe T~=w3P&`P%}8,))J()?C@?'0`Cm@R WT[@V QH4(?3~BQH@?@?@,n@$ P`?z?8??bR _佀?*J*@?X@ݢ@T { PP ?:?M.o`?.6^x@b L2Ul bhޠNk38U`Fa`?F\`#Λ S&2L?G?<??(K17?B?U ?AbI9@K2`)@,@#?Rz?Pl?B?F?<5B`07Q Lu@C~?C/`?Jv?*;`?Ew, ?_?d6T ?Z< ?6m@?1?F?G- `?I ?$Lg`Jz:8``>P ŀ4<Q'k?Zi?SĀVQTT@Z F?X_@?SYr۠^7U8= ?C}?e?WIz3?Dcb?@y ?Bo ?B?.o`6m@C`D7 M \n \t@+ ?N,s?!KV- `ۄ^2@Q" @`B C&y S98a Q{|?X`?``?/_`Pn@D>U$`,@?RA?WkV?6F1HOXF@>ڜj5lI@KM/@mI`J~7 @?Dݎ?&`A#/Dr@F3`@<@0á ?D:?EGǠ?7 ?RR`?N?; V ?wq?S^?[?R ?d Oy @ ?9` HQFx2 ?JK_?Xb?I ?:@?< ?JU ?@b`?@>?Z ?^yB ?+T- Nd g?T K?a'k?VF@?@`?;`_?E?S?Q_?3?d)?n9%qJdV _K@RI ?F?VT?Cq"zMU$`]6L Pʀ?G} ?F??O1??b?+#@Ca ^Ͼ`P??V -}`?a(`?eB?Qi?@*0^ ??J'?_X ?[@?2DG?6" 7y?Q^@6K?_ x?9By`?:[6 7IꛀMW@Q?V\W0RU6Q"?00;4` 3??j?'3?5E`?;Р=b 2-G;`?G9?8'n N.@D̞?J`?UȠ?&+@Q@7FpY ?F?]?^N`?PG?F.`?U=@?Hk*P@WM "?GV?C ?K@?Rw?0%?^ ?Q`?D<??,<@?PӠ?B$Ԁ?"(cHӀF- :@>d 3?Do{`?J:pFwGS?RX?Q<25à?&`?B@f ?+4@?76G@eVQ.8?W& ?P\`S=`>L+ ?c ?A Ġ?L?AAm@E1 P7Q ?2M?O$@?5t?C_gR@?B?D1?E[Z ?Du;n@Ci@`q`\`T}d`?<K?,74?@K@?8'n ?/Z?+Î>Zi4?>?C~?P`?Pv>kYFT?C`S`?'n ?Zt ?R?-r, {@`?E~n -KQS`'o?@#?% K`Pá Du`@W?>R`P P ;?Ipp`?GG`?3|Z6gM``K@T `V ; )>s ?U+?T`*ѣ??^?^˂EA`dڠ]%\9`?6`?O@?L`?<@?In?AHBE&!@?G?Jl?/?Pg?U@Đ$ ?I߸_I?2 ?Gp ?9L&?I`?M?.0`9@EgrJ̠?+`?P3`6@>6?cH`Hn? r?O`?C;?LTEb?C?Z}@?Rq? (KTS``KL?04 |?0됀Z{'`N?:R@J)W&d@75@4̞A ?bK% ?E#$/_:?7?A?Qۀ?W\8?#Ā,^b?P-?)< \>T0Ϲ?`;?TZ @JP>@?I!?( @?8z?U^ ?X@?U:@?5i`?Lt(`?V,?R}`?#Z|@LGg ?,l?],@?W ? ^ E[IHgTR Q#?Ӏ>H݀H݀?R ?U?;e`?F8?]?[/b3y@YKrDWˀ@P@? LJ?3 @?0TX h@?Kb ?W?B?6?V~?T?1od ?BC?F$$:9; 5?&kIY L`?2U?0&a9I`4@ #@$Lg`?.?=\f@L겠S1?P?P `QH<))?SQ?)eNY4@??0@?Sݹ?CI HC@ NB8?@?V6?`N`?P,v#m..@PxTzOR@?. ?a6`?a ?/ Y~ ]^J:>; ?D?9 \bU ?IU?4\B{"1B2?-m ?`?4?Λ VF [ @P.>DE:@I%i?Mg?9I`M;@?L<@?KTF?DԀ?Q-x?8B ?s ?9?>f`PuCs ?=: A0`SA8拠? `?ND ?R?>PQD U?F@?PcLNS'~@CBK Kq@?#b`?:;`C`WU@":?SBK ?e@?a9`?SĀ?Hq7Kbq\;Y9@W/v?H@?_?:J?FC;#@1@?ZM@?b,.S?C-?Q?CR?H}O?A?@?PO@?G/v?=T?M?J+?A0~ ?Ju?PK`?U8@?R4M`Ph?< " ?Q]?`E`G)jP??:r?DL?;?F5?a!_`?@\K NୠPGQ\?@Y/?TQ?E?5?2?Kr?V?G?4NҠ?Q앀?S9A@\(LdGm' a\0`%Q!%O?:]>@B8/F)HI@2F ? (@&G齠T!vTPQJ9Rw@`_;W%ɀ9? ʀ?CE ?G%ɀ >9 ?I?Q.?:`?S?VBb@7O Dj?l 6N@?@?V?T ?6`<@C#?5[?EE`>%>@4LR:;`?N?@ URF_`J@X@Dπ?G b?_ `?\AZ?UX?R'C@_vJvG`Z'(?SG?* 9i.`?܀?A( B ?V4y@?g9?OOg?4̞?W<?G???A4 ?'J @-] ?8=3?CS:`?@ ?"o?)]?A]/`PK@@?Ob?F_ ?113_RJ(>:@?J?8k`?:@?Bi?P\Q@Z2=@ F?E@?T`?Ur?Y'B ?RG?A$?7 bI`?PS# ?RmgA^uTm>Z|@T۽>U@?L@N! G@DF[9 4.P V$$GH݀> @%q@PE: P̳>BE} LQͽ@XZ[@U%6`u@s@C ?Dh?Nqe`?O?Tm?C `G1-Y?E3?00?EK?RW '`G%?4z^@?Jݼ@?K2h ?P?Ut?RBxJ`M@?Q]?R @`R`Oǵ>H݀?P>?T*?5`3 ?z4I°?4@?C}@(?A?Q )#yQ]?`St}RAA`P Ty(3'?V`?;]VU'-?U]`?.ۀV|q^כ@WSFHUePr@2 ?F,?P ?H , ހ7Wa`?,@?0Ϲ>*?@2z?Aݠ?(@?O7?V)`?)8wC`.@4Lg` b[`?Q"?@CNc?'?S A?:'?)Ҁ?QiW?T ?W; ?] ?V?J:p?'R& ZGAg`?0_@4(28/?QÀ?X2Q?Lb?U ?[T ?9~ MSW VNzC1\4VNTT;x L0 6C2o GH݀IHA`:`6ٕ@KT7 P2T`Q@Ҁ>1@A.ZF~?: ?5'?8?#A Q Tj@B$Ԁ?7>?+?GV+?)߸\ [7@?8m ?T`?TW?X??]U@?T`@p_@R,@?1)< ?Pq`?RW?@ ?,t?Hb ?L}?2@BQtՠ??$l@??.G`?6C?2M?Jt@?Ol 6S0&`^tkV~@8 ѠHW@UOA=A?i\XxD5k?N @?CHW`J@Y@SY@BG{@C+O?>?Q?M ?G?(R8)`5@"^?ACؠ?UE? @>?!?0%?k*@ T O ? -3RA@KGˀ@,y?K"'QU?G`?Ki?96`?C> 6RQI%@>ъ5>@? EQ]@R} ?3?8~@?4Q>?A`?=t`?@?3f"Z `(2u?C@?S?T@?Fw ?F?@?#?uu@s ?2 `??2?#1@:zC/`6`?+Oo?J?H̀?@??*?S"?>R-`T`\E&@Dr@7?C ܠ?W+?TS??4#?8?<À5`<[`?7\8`N\@H1 /*v '?0@"w?M?`0?EQ_?"^?]^6?>T =Ȁ?F}`?7?'?V?]1u?H>`?BE} ?VY`?^qe`?Y/?'ƩFN21[ MKw ;?DX?2~WNPp?#`?Sm?VW@?9@;!x?Lz4?cH?X3?9 @?"ـIU:8`?-?<`?J ?J ?y?O?KM?8=3?0jE3oAiW:3@?L?=@?!?Q9?Hr?4#G?S`?C=D5 ?A@?Ub?M ?HB?C?$;@;&OF(?2u?Oq@?]G7`TWL.8?Q1?Pq`?3@K T</@?TX:[%*96`>u@?R?^pʀ??J2\x)/.3%@?2?Q<`?T@?E?B?Sր?Va:?F_ >P3 4?@ ?28/?%`?Q?\?Pb ?<.?1s7?0@5?P$c1``"& GhP?0?Bz?Dׁ?X2Q?a}?LK E&@7?2A@:@}J?G`?K%?bNB ?MWXKAup?HE?Cd);C@?0Ӡ?Z?f?cw ?E D)S@J$`Ba|?1 f J yRˠ=2`?@:`?Ns`?IȽ =Ѕ Zs`9°?R`?B8?A 4?XE?EJDNۀFL;?Bf%?= ?U$` á #9?4̞?4d`#ހ'"(,AP ?B ?D@?Op?RU$`4?M@?;ۿ6`?>F?G-?>? ?G^@?Dπ?Ca?Eg?"?B8/?W<* ?Ipp`GG`6@`a6?YR2?Q4 ?r@Q>g ^V`S \@X!aSJd?P @?^/?BL?;@?JU?Q:?NeL?J@}?K?Ty`?Kl1Cؠ2 8 ?0 `?,2?6 ?A?2?C?V5?G@`q`T?K?5; CDGx 3@?Cu?O 4馀XCR,@"?,ͪ TX?P?Y@?Gw ?6@?@%?v D`B?L??b?T%Bo><?D?$U @I٬`<<@?OcP`?`~@?Tp?;n?:i?/ n?8[?G@DXdӓ@b۠C+O?81@?)e ,?' Qod G$QLGg =@?W(?TB ;SjРQ9`1@?JP&@J4/_*g2?̌`;5@4?@?I?O` ?=?@=]`?,Q[nNɲ ?%y-GS9 <@/%yE>?4I?UL q`O?,$S ?8ĭ@L ^J`Xb`?B?`?X?Dl@?#@62 @#X# _՞_Ɇ@YЙ1?@)?8%?SI ?b 8 ?_M?U)@?Op?E?G ?#S[Ru@I?8h?QC=?P?T@N?\u?P;2?1?E2 ?H>=t`SM.@?I*H@?P(2`I @>,?KV?(2VVWWwo@?3H`?O"?1l?G?Y:?O;VA%@?%?Q?8'n ?3`?J8?Pz?J?O?6(@y ?)`?Hh?+Î?[=K?[?X?T馀Skk[?Nր?N`E`YEl??,?/i\?4?F7,NEbG@`Dl@?<>?6 `?=d?S ?R>=b C9Ӏ?=3F?V?6^4`TA`Vx6INKTYO,Zŋ 4?T.?M K8N?L?Rf`= Dq?@?Gl@? `=Ѕ #3@?B/`@-:X ?A@?@w?M>(?elI@?c?2^)V`?@M?6+f?I0T?[@?Su?EՅ@?As Rb=,?Pʀ?<Ge@Y1R@?* ??_`?C8?S?4 Qg`MDPTBS@)pp`?L8`&0=Ue 5q?2 A9?A$?@NL?9*H@?H/?(=DA~M֑`[RAA`MtBxJRQW? ]6k`7PI`?GàLe:`\*_Pp*T T]`X!N1?Kg?BrTuE`?FnI{S@?9`?Y+`?] `?Y?Cy@H.P8?#?Qk?K ?5+OoRcQ*q?$;@?"cX`@_y8՜?I0T?,F1D`C???16+@ZM0`MK?Hv ?: Q@Y @X# [`_&ՠ\!MA?S ?Y0T??1@?Op9dWLA?=4`)N?f*@?m[~?KM!! ??P ?H(*GM@K}fS`QMG @Y]G `CN ?:?(?@B Sl@SԧPW3Z3`Y-Tv@G`Q" Q0`?9?Po &ٕ@0V ?RL ?Y٬`?T3`?K"TX2@?,r A5T]`R ?U>=b 7`B$ԀC `+``SpBBX?Qf?AI %ʢ`?E`?&BR`V@T@?6S@co `]!jT @`<€$=?Tط`?VM ?S?Ag`>(K?7?C?3;BMU@Zw T5k>B ?E@?= ?Y?W*`?8!EJ^`9%qOaNX? b?I`D|ɀ:VBE}8Dr@3I ?4?P?O?#`:@- MѺ^ZWJ3 %5?=R?N.`' ?VHn>s L@?UW ?f?O| Pp529?N?S=L;SE@X&@CQݠjujv`P2^D`?( ?Ht`?/LTBCRP Ry`]@Y#G*`A H# QjOj`?*J*@?FF:K:?$$?QG@?[ ?\?J ?A j ?Pn@$M`^_`S ?%s@' 9`?:[?@?-K?;<`>]TX?[`?b#?K?F/?Zu?P腠%&@GgA`?Bz??6 RwHp`?C@ C62*CTV`PV N7q?6Ȧ7@`Ye`a/@Vd HfE`0>~>`?A@?Mo?V?Y?CV@I~`Ps@>W9 F4@?0E2R`MO:S׀`@<7?1?Gt?C?|ɀ=wLRC@KE BrF'0`?7 1 Af?%ʢ`?3F?-w?X`?K@5 '?GT?Lp? P`>זG`?G9$? @B(u?L8`?VLUaRL@J[]XUlI@/7IZ5e`5xaDOf`PUFd@Q4[1@PH@?u?5y?:@4;x D*8 >~@+OoD Ij`0f?T.?a#}@?Q ?Ei?V?*P\QT-?6=P=?"F?BR`?;?Tcb?K(A@?G?b ?KQ Q?R?K2h ,`?B?8=3?B=?BP` z@J??[@?CQ?SO`?IW.`[QS`PUC`UeUDRsR XC\4uW*@bΠXv(:Ȁ?$?@?3?<&ScLM@0r?2\x?@|@,@@CH!EF`SS N9 ?)/?Dcb?+Uh ?*X?;@PBC`5(?{ 96`Y)R=? qN AR6?#?A ?2P/t`T@>]?:x! ") ?h ? @?`?YS?^fBd*`cՏ]=t`?R@?Q  K@V \o Vbp O P Hs`;=`Eh`L F6 EJjG齠@ 6:B`F*1 .6??Z?Aj:C}@?R@?a Ġ?M?Av ?Y p ?BqVtE#?H 3Z|@V#D,y? z@?W7`?F&`CXz?K`?O OO?'>B Ge@?9`?R>;@?9<2DRsM3VB PH@@?Mx?Ty`C" ?{?I ?GH݀H RXB\x?BR`?<À?%?V -3RL` ^`R`QJװB /@D`@N'`M,D)S@[_T̀7-?7{@$Ԁ;@I@#Λ ?R?Q~?,2?3@?ErU?T?KL6tDV?d W6cP7?JD?&@FL>Nf`8.?*`OS]'K`4hH@ +m 2# ?@|C?P`ъU`e1QjZP?Kճ?N_@Z|@@(@Y;``Le?!)< 06 @B ?BQD `>``WL~SP΄E\C@?Jz@?Qv`5 NS'?K C@?`L| ?N! ?:?O?Q >?SY@?-!E-2w1s?O佀?9c3,a]?4?!^uR8LrQU@@?3a ?WP@?8 ѠL.P2zP;`9b:?W@?XH ?;?.`BM8_@/%&B?2 ?%ӀE7Bu`?#? ŀ9|Wen``; +lw91@8zVNYā`?(?S^??n3@1.I`KH@F1Z2b& U\ETP$ ?=Kw ?Ql ?J@}V YcqD8?L\?5 3?A`SN J?J?VR?@r?!^u?5&@0wDp?@ ?PG4L:/@?SP4 ?P: J%YTY p Qs?3T@?R `?0#JrA6@>`KX?5?SZ`?0r?!S`?Mc?6CD$%`?Pn@?R !C`?;Ǡ?Fk?E ?XM@?[Y ?V} ?P: 0á @`?B?5@? l?CwF۠`IvQ%@#;?<.`?P?+J@1+%W_"@B `,yC9ӀFsSOW7F(ZLTH`?0,)SEЮ?$?B?L7?P:P4`?.?&`?7`?E`?-r,+?,?OFH?G{@<@E@>ҿ`,'M?^PL| N0C5/`G4M`G F@])`x4k`?C_R&`PҿVuʠPL| FxVbT;x ?9`?H&8`+-h~?9?E ?Va ?Py V`d\S1CHW`HOQ> ?TY?P= ?3I?.됀Z|@KQ̀?0 `?_?` ?R7 ?S@?S?Lg`H# ?}s ??5t?4Z ? (K?,?.W?we`?Zi4@NNY4@v ?S?F@ >?]?_Q+#RX;L,c9@?.g ?R%o@?6g7 ?9`?1K@?.@?sB?RD Q?I{@ ShW 5GH@S(I0=3e QOƀ ?s Y@?R@?G; ?3( ?,?`?GM ?Du7?>kY?AݠA6`OY>U@?)?&EtDA`0 S]N 8BNW5@W_NJR@0?Cd)?>x?1b?A !A @3 ?H ?Pn`1{|1b??[@(W@J5?>A?@h?J ?CR0>1?*1 > @A@G>`?&@?] ?c9 ?I 4_?5?P0 ?Q)< ?NkY?OF&?H ?V۠?=h~D4?B@?UV} ?6 ?YK?O ?Fs?de ?e@?Fg7oC+@V5Iz?6sR& e&W`<`/?6P?G$?D~?)Y ?( %@2??إ?)Sh?#?O`?P`?Jo`?XC?X;?=Ѕ H݀?B8/?Q?:Bmg%@-d:8W@$"*c 2G{3u?U`0?UoH\2?Rx?!WUF?@-Y?O?X@?P@?'PhV]A\ ?/_DY_0]ܝE[MD5 [<C?: D KS&Pu\?``p*I0 GM0Ci?Ja?Q?J?_R`[ P ?".?Rw?Zx?P0Z|@?{ ?E?6 B@Iq2ܰ ?!cK?3 Bu`,@?;#`?Mc ?C2CQz") ?HI@?Nx?P?G.A ?!? TX?2@?6?>d 3X J1 ?TWJ@?W @?!DQ`T,@5q@?77`?0F?C;?J+?1y`?2mg?J?NW?UK?`Ǐ?`á ?RȠ?2 >1@1S`PBK@?%t?#_R.?:`?Et?#?.K?:`? |?I°?Cz.d ?*?W4 ?Ut@?K?8KJdS)*z@?'%7x? @?RuD?FY]= ? @ ?Q/@?3b`V5V!?%xaUy3P?T`?ANG{@OH`)<4?@TQ? f`?>րy?E4g?GM ?@Aod `@QQWS_`KDׁ?,AZ?S7h@?K%e`>@),2K$_#_R?!)< ?J ?U29?To{`?I+~?@΄?K8t`?P?Bo+F@C/`? `?Gˀ@?G9$!1>?0q`?1h"@E AI?A?K>?@?*J*@>1@s )3??:\?D`C/KN: ?WT?f?LX Z`^(7 ?[@?OY ?W#^ ?G>`?!@?V ?V ?<?Fg(2HB ?@?\ ?Zc ?Z*@?`}?M;QMR?0>?-ܝB5`?FC?GA?`"?/{?@Q`?m?PӠ?@΄?.%1?E@?1@),:@ N9k?I?BD6A@?D$?94R®V?1y`?[lw?Rc??%!J)~ Q|$ @?Skk`?ARe g#`VJ??EG0`?/M@?D6B}!`P)>Y ?O%?YЙ?ZA?=<@KqN IM@!EV`$.?TCT?C; @?`?V'?] ?: N_`M ^ ?A6`?L W?AS`A(VS@L ?HQ?]P?S0 ?9Z?P7?_FH?\?H>i.ɲ @=?<&?C%&!@L.@?@IEJj?;?/{V`?Dz^@?H%-8RQU`1@?W2|?L>`?<?` ?K]ZVB_j<{j`?Nl?R3 ?Fve2t?.r?;e5?AS )NϾ`%G?>K)߸?/?] ?Vb0q`'j?DH`M;25à?% +J@?,.`?QY@?EĖ >O?=u?Rn?R^?J`?9D@Ci[6@n?D,@?Tط`?L@?)Y % 'x?'0`?5o% F 2`?K?RG?>S'? @2'?N0A ?)Y T]`fRi@f:M֑`#i 0V ?S^?S1\X,bG8P`?C`?D@?Pzs?2`YZea,AA@S?E?^?0-@V ?F?NҀ?7CNcLz49-?A4 ?Q ?N5L@aH@cnK?`?9a?*P?"?O#4?X?VHn?K`?0`??^M?4@?@| b[`3qU @Fd@?IdW?CQ?J?b) ?]G!P`XZ R]?43?Gs3`4ݎ8b@?B@?9(L7W$@I?<K?M [`4 E?5(?HQ` qN ?P ?OcP`?R?Q*q?=h~T[s@Ax@%`,?E7?Eo@DWK7>.d <:]?A<?N! ?G=?J@}?@E>xa?= ?H?*p@ͽ@E|?3?]t`?TрG I ?B`?Cn?(՜?MJA`?Z?RG%K`L.L@Dy(<@GK=`GFG)S_R` Z ?%`0?s@kT@?TnE?^4O@MUuTIC #? S#rTY? g`?q@A?B ?EI5@Q Rˠ?$?DY?R?O+Ǡ=[?"`?E@?WO?PcSۀc`Xh$IBy`G `?CM.?B,@?B@?@ ? <?/%?EL?2?'o?D`?JI@?NB8?*1 Q /Y?X9?U>`?W?d;?YY ??/>%?[@\`?e 'J -@ڜFTX"?Q?:I@c ?Q]?`?SBU6G ?O%?V?L&?K`_?ZiO(SހQ}<:?I(?AB@2>`?;@7?;7>B@TL*J*@lC^@?<?Ky`/@?.?Vdۀ?e@?E"@ܰ TA`*?UK ?A*9?OFH?^C?Vev@?3; @8'n 5@?0?/Ơ7 OFHN*BGGUbI݀?B+>Mf?B?\.`?G̵?:a?Ny?ZiPb F?z`7F#b`7\8??"mg/@K'y??Ak@?J#?Zu?TϤ+TF>Zi?G~`p/G@?;2/B?h@?23X`?N`?L 3 l?}?:?4>ɲ A?2a?RT?:9; HIL`?F`?b`?SK`?5X?CC-F=o?F?Q1?Q ?OO.K?H`G@E@\b`OV I;7VZC ?4-w;܀?K]?R``9^ KOo?ͪ3`QE@?Λ ?Pq?7O 5ֻF!E?I`?(\>P ?O$@?T@*l;?(Q `I-@>f ?&d ?Y?\d)>P ?YcI%qRx:p@?D<?`?b`?5.ۀ?I?Cø@&>ݎ?Gs3`?YR?ao?\m`?EB@QE@DO=:>1IFBb@U<?0-mU`>f ?Lh?Fٕ@4 OLTBQ?!Y`N^ SfD`` 1:+`?>?*m1*@7Q ?3\1@QN?IJ?a?O;e?C?W?Pb-_?6{< ?K`?V?Rw@?O 3|Z?<.??ZED^U8@8?>րDQ;?W ?f6 ?8QFAR\Cz6+@?2f`?67`?R5à?SA`=$ >*?W`;9aE?A0~ >1@7^Kh֠VNzG@?A@?Mo?3Q@?#&=ߠSB@ ?=WBI C͠TN7TE@Eo@g?QM?X~@Ja@?2?=0r?!@?@΄?9Y ?R!3?WX@?3I?; GB]@V9?!Am@?\ ?c`?]w@?@?C ?LHC@W>`H~ A?E?V?M``2=N&Gà>D0@8R>6+fQ7Z ZuKK#`\!MU`?,y?N"?Λ X` L׀?RPW_&5 ? @` >ɲ H(G4M`77`8`Ax@?GƩ?aH`?Q e`?Ny`?S>K?+@?Nk@?+``<?2f%?Ut@?U)@?@?7R?Sa#`?]2?\`3 ?T E?&6 ?@Z?E O@RIQ?]L?bN?PG?Ey?P?Dd ?^Es@?V?:lGw ?`?WTS@?#@?O@?C*Sy@W` ?Dݎ??4#?=: ?1? Ҁ?# ?-?"P:mR*EQE KV?YS I ?1cK?P"ܰ P腠?B-?_?S1\?B?D6Et&` P`.y``xA~?/= ?9=h@)?2f`?X ?R9dLR 5ۑJT.LeL@K)pp`?+Gkaj@ \;6A,9GPU[w`UoExaM`@[:I`?=@5`[ϧ@c;`WL@@E>`@QR?&s ?8@?d`?Du?V™?P"?Ky`?b?f@?T @?H.?Xs?C( Pk M7 bE/΀G"(?B?R3 ?GAH@8ĭ@?`m$?ga\?[z?Eaf`? ?"F ?T@?U; 2@?\?P= S@.Zi?^9&`?X!?#N%@UiC A 2A2?P Bz,ͪ?@M^4. Tz^@V$@D1>Đ$?PF3HwC`k?1INVKI`R@@V[I" `FSQP=@?@'?Wd?.r0V ?GR?FQKPז?@I?^4?Zg?\׀?`Z?QL?IAC?]P?Sy@:?`?S.U?3 lTZP`VC+@>Z|@/Ky`F AQ6k?RD?Fo#Ie`QTQHOp? h@?FҠ?5ֻ?I?Q@> Xr?&T?[y?AZd[ǠEt9D_N(Z8@[{@A%@I#8I?5Q-xZ(PSHU}`?If %9{WJ[=`D3?Qk?Y[ >Z|@S)@A^u,ҁT%^åX@T UEQ*q* >`JG- `?G ?Ra?G~`?Ipp`=bi`Ze`?SȎ?U>@?N1?D3/إ?7ˀ@?f(`?dB@?]`7?9(?4@?)/@@`P`?`?HV/RO@V%ZOG@.KcK+TK1_Xmc@i@c G{0g`?2'??HɃ5 A`?L@?NeLBW^ɲ _ ( @?Rx?Di ?@@?E3X@@?;\@;`TYK?)f ?'& DP+`??S0 ?5.W \ahR) I5-c@Bb`xbwbP!@Oh'\T'@2?;E ?KqN OW=_R ?< ?V}`?DcbT `jlF`?9 E!MM`@@J S S<TUyD`?DG?LXV`"F JaDY;@A=`-?R?R&C` XӀ?#`?O1PG"? TLXLF1PT<QLQ`3kk`>l,2 ?@?9/?Hۨ5.d hY?;4`?Mz@?);7??V ?X f`?GE?3?[g ?W@5`H`GI4@A>?@?' F=?0. ?CsF=O="V&5 ?69??@<`?DuC V-7@S1\L{j`]`u`P@2aO@?Gd?QFkT* ??V ?GK3^`^CRӝMЅ W#^ H,?3`t?@q`?&CFg@O%<?=K?:+ ?B?W3?5GPv LXV`C!C;@R!`bp V??8Z"w@YDIUf=+ ?E ?A|`OY \ Q@?DC?R?W ?@$?T|ɀ?W} (5;e`?MO?[= ?Rʋ@;@XXk DC?o?,@F_ ?7?Re#QE Q( >?Jhg?P`7T0@Q+ ??S4`?E}C9QL@?-?Bh S<\R$ ?5SV@Td A?l Rq VQ!*?Qͽ@?S?U?X+?EO;m RJAk?Ra?Tp? ?4w?MJ.A?%?.  @?,@RU'B?=M`(cQ8ZCV@?0?I ?;e5RcYj#e ?=?-Y?CȎ?@h@?6t?Uk ?Y2% ?B^?@p*?U@?`ދ?b=?M瀠J0ÀL EKϧ@$G?@v7 ?A?Q%`?M6D`Qt:C; @K7A?9@ ?=L`?4u`?;Oo?:?P,?VG?Ks?X]܀?c^?TcK7 8?Q`?]DatՠG^%E C`PFoY 4Z OwYDIL?H,D?Q@7ڜjLSTxLm;U^( E@,Xt`< ?R@?04Xy_"B@?T|.?KPhU*] E>`5Jj?H&8`?[f?M8a}C?6`?F7D6RL$@?*l?5'Ie`4馀?R1?T;x ?3*?B?Gcy?L?IdW?Y6?_佀?PKF`1 OcƩ?^ ?]*AA(?0Y/A!Y`?An.?Nw?CI ;e5PB5à?#@?`d ?*#u@?;!x?L<`?R`>Z|@OY#`?8| ;qN KGgIc" Eʢ`&?F`?RJS?;]?4̞?W3?RƠF1SC]:8`3y.@?0eH?E;?7hP*b[`Ln XOl ?2t?C9Ӏ??c?9 @?1 ?HV?W`?J`?FO?Q ?&o#;*p@43?J@?^{`@UI`?9`? {@?8 `9g@@IHz@7A??KH@?Q?3 ,@%@@8.DwLP<E2QaW???&@\Da:Z?N.Έ][`Jn>3@SN?SA`?[`?I@?D?R ?P@~/d`?R?WJ ? h~`?W`?`0 ?T`?N7U?P?A ?w?D\?UZ`?UY?Iz??? `?`{?_#@Q` ??w>QD ?(N#?V4y@?4\QP1ߠ0b?5/΀?EȠ?E??=a<?1@?Jd?]?S,Cz??Hh?6[CX;gC \xd@Xv?@c?Tv"`r>`5n?J3`?5ʢ`\`!e`?L`@ 1@????S@?B:@LÀX SsD#Gd`?8拠?; ?4@N?SS:`?_IN?G>y`:@}9Ҁ?d)?@m?1?V5?I/CJ7 ?G b?Zװ?I@ f QjG6y`?@:@?# ?"(?K@?,K>m`?`?$ 8%MgI ^`\>P`?)~ W_佀LT`*`Vc_`M`?E1r@Gti ?>?EЮ?3`?DM?D?0eH?5`?\UP@?]Ӌ@?<C`?D`?Z?[q@?VH ?S?Rc?Dd ?P@?_?Uz ?<`?HE?R@?6!BЗ?LX #jX/0_@?O5nU'VFD"@Gc 5`,@043y@-!?A[ ?;gS`S/?M?Wь?GS?QG@?OHI+~QO ??@<`?E7 $?*l?CԧA9`b.dIa 2ܰ ?Q[ ,Jr Y6`2`?P @;XEB?_3Nc4k` `? qN ?H?_@?e8F ?W4 A"A@?C ?Y?]0?VT@0xwM֑`H  ?Nw?Z`?E@Ad@X( ,?@ G3P 8"E@@B^?7>U$`A Ԑ$4gO!Il`VR],ɲ ?Zj?Og1XzVAMH @R8@?E\?Zi?SH@<6O[ ?O?YN?S!?BU6?RZ ?Wn\? ǠH?F^4`?a˟`?\?1 Ouu@;@?A6`?8m ?1?MG?3ߊ`GV+?2@?NJ1FC@w:z@^`cb`TLMuL}ՠHU7URGO[Y?:B`?X?S\@?Z*@?[Ic?@k?1k?E$+C%G$[+& Zi@Z Ec?GàL@E^ SK`G; ??JQn``y?@?`@?SZ`?( HcFB?G @?\?_]D ?T"@?s f ?NN ?] ?a5 ?IHQWM@S^P|C#.?HQ`?N@?;q@8@FBb@E ?W@?_{ ?@ʀ?[ ?<{j`8 Sa#`Qv @V4y@ZoVpYR+?Ci ZIj (@HDuQ@Mj 4f2o`*e` v7 ?csH ?]@E*a" Tu*#u@IꛀV`OFH$???'DqBE} 3y@3ހ?#@@F۠?5>?YBy`?HVY ?H?X&@?Rހ_`Yc" X+?(fT ?Ns`?Ie`?PT?Ia?C?Z"ڀ?V@?!b>s ^@[%?/G~`=b QkMKz`DgC@QP`?J@ ?Ey?=?B0?K?Xz?V:~@1)< >1@\*@d@QQ&NQ@Q:?< ?? ?;j @?Lz4?F1R\Ce_ ?82?2-?Wݥ ?Tp ?5 ?7à?G.A >f R `n@d3cf^W@?U:@?;@LHC~D U'TJL>,R@^`:?W|E?Sg 0O@Bu`?B'?P}y R!3]D]I| 8?(~@!ͽ@S4b U_Nm`D/_?9@ ?P @?4]?)?G`6@SV@.3?H]܀?Ov?Q.?F+@?Hm ?Z9; ?H`PIv8h?>a4M`?;b`?]D?9By`XT ?Pj?Vyk?Aͽ@5#?Λ ?I&`?,`R S1\?E@?cw?ba ?M$ ?GT?R >@@_HUl XX\$S `?8ĭ@A725`(k`:`9jUQ?G?>p@Ei9n??UO`?c*?Qm6l@JY`l@aZOTTD V@;2h D\ Jm?2 ?@Ԑ@6Ax@%/3?Os ?/P\5XUN`48!Qf`b#Q`X|P<'P9#?;v$`D`@pMZ[X Q OH@D4NkP>:?-?;>?EW ?O`?Bʋ@-AK2\ `]H# ?C3@?L ?L?E ? z@)<? ^ ?H=?N'`%UO`VIo:A&A`BG @Gj362?#?@?HZ ?#d)7%?`A0~ ]KQB?@r?B@?D?K  lLT`F5 ?0@?C+O?C=1^u?>7`?Sy?9i.`[`\M?DT?c?`?K&?9@?R ?Pv9 RXV@>,?@p!Am@?)x?9.g BaO@F$$>6?LH9j\R;5 @?X~@?c?Uu?C?4fT) Se_ ?+``I;7`@TWJ@RƠVP J6G;@U`W L6)&[?jL39P~YT@TGTG[`Th9`Y`Pjz$9 Vz`ag:ZNtGX@;@;Q JI@J\O Ht`A ,|L`@Y@?(fT ?N`?A7>F1>րGE<9~ )k@eH8@?E2?W:?Q}M@?L\?Z*`?] ?T ?Q9?B$G YxWcyI`?B ?*7~`A:+`h~?"~ ?8h?=1 8d`5n1@?0 `? F<:D?b[`?W9?W`?'{@@. G& Ju5@?`@ (?H?7\8?xa?;/?-!?>wq?O:0 ?@>1@0>/@! 4?=ˮ?S?Hi n=ߠJ8?R``?Pq`?J܆?<>Mh;v$?Q|Uq@>a#P S_A`[EW  #??9K+& 8?;m ?K%Ad@?'Ʃ?G`IEG- `?*J*@?DH`?0h@D`U@J?+Î?'^?$*?R8/?Sm;@Lz4E`>?6 @> ? lX P 0jAM?'`?@~2f%A}?!?F?9j;܀?@?Z s?Z5 ?P-?Zـ?`?Qz<78@9=?2f%?]?`s??}>3w?7?5`?&؀?8m ?H>?:ѣ?D @?O `A$eV`*?!ғ->,?@?MȀ?`?N*5?4W?6Gn\M :B`#`,@>`?J#?Y?\j?CYFVd@V@?0_@?> 0eHI*H@S4`8~?FH`"`BZ `?J$`?Sf2Z `XN?Li?X ?Jc ?J?L겠?pp`S%t?P?LTSyT?>ɲ ?R ?<`?G0`?R] ?=: ?1r@?K2?Jhg?J@?R?;J@&?L,?S}7hPX.T??O@?wM?:VB?\ ??[?c?W@?X?`?JI~ Mo?8~?M BE} =6 C/?2F ?Wn\?W??d?0w?J?BX?ALP ?IHDpZ7js?Ri`?BW'?0@ACؠ?@9`?Z9O ^)@N9 /= P+8R1IJe`Aͽ@c9@?a}?A#?QP`?-`Y SWv ?Gp?BbFFw 1?>$?/_Bj+ ?Sƾ`?R93_RE?5V?Q?`CP?J?FC?R$Ԁ?P"60=7 ?Dm?!jHRGp UE^0A#?C" xP7Q R@3a ?A6`? O,AZ?K?QF?@el^p/?S ?_0V 5`?I-@L~`_E=wB `]@RJ+Y ?)k?Rl?Z0(?Q~`?Cހ?%}8?, " ?R?X%?H?W5/`:\7pQS?7O ?Pn@?( ? j;@Sy@T?0?[T?;#@VPJFTU 2'@?^@?b?P@?@?K@?)>u@?-8?.Df%?C͠?LJG^OFH%n?= L@aSǀ8@CDIQS12`?<{j`'+I%@?DU<P ?^?U?"Z `?E@?K``? " 9 I°?k?IJ??IO`@p*?J>f ]ـdc׭[$l@_HE?=3TBd`\Sm)V`5Q @.LYA0x[%eeT_ac A?U?S6`?0&a;FߡOoiT@N>7`?D?<`C^]W?LS?bXנ?1K0?T@?K1`5D:? ʀ?N`?Y_?_?UC)?@`?.%1?!b?@,n@?Vs_`?Xʹ?J?:R@>KN: XL`Y|S D݀D|ɀL? @ 9a?k4G Aؠ@?OV@?Q`?+TF?KK?E^ UiT `?S^@?`?Iv@?8拠?)~ G;<?=Y?+l?EGdWN}}? ]?&0=Gc W'R^C`;nDI1y??O:0 ?Nr?ހ0%?l ]@͠?E; ?b?Z?@?@6?GA?L<|H| V#7>?A.ND&?H_7cy_P^- _]D Yh?,@Pڜ?GG`?]ߣ?7O n<.`?4LH@DàO ?BU? F1Zo[n6ME HF US}`?Bo ?_C`?L W& `6NW`2a:?IZ?6+f?6" ??| ?-g?Uz ?`m$?B08?Ce_ ?2Lo? ? C@G!1@?< ?S`?NV1r@1cKNϾ`Ry`8M; ?$?R?6`VLUc`//M@됀HRC?A1?F?)]?H ?E F0=DA ?5 ?N(?`<€?XQ`S`>`*?O ?8)`C7 6ev@?C0&`?3@7w l?/@?67`?A- 9I`VX( ??Ge@?D`>-E`ScI@%Ӏ? ".?Za@?aM@?J.X@?+z`?Q8Z?] %?R@% ? ?T;?E/΀; 7O O?Qݠ?5[Z 3aLB?CCDC?Ks?2!S`?K@?+GR`? 4p`?[?bOw?HI6J?0 ?U ?P2?$W?3kk`?P ?QW>`S@H?CM.>s F[?D ?G"(RW37oC4`]lZ ?1k?Q7?%?4$?W?\:?\l?T?6Y]?#Λ <`YS`?EJj?F*J*@??6+f>P`Dd ,AG``, Bq Q3@@9`?_?_FH/3ހ?OE?N>@._@?K ?U ?#?0`?S`?*HU`?EՅ@?V5 ?Q+MPM\3`E?G@?V|@?4*`Dw?E@?ZE?H ?+Oo?ۿ J@?&&@,@H>B ?Gv`?C ?LN ?@~C[?Nk?+``??Z ?Y-@4vC`?B@?UG?O4 F?'"()DRTG`<|#Λ ?P[?1b\jT+m Q@7>U@?SL@?Iz?K?a;?MynV_X[q@?M] ?`f?\q"@?8? F `_`?Vyk?VS@?6K?CP ?N@ PW#S%C`9=wD"@? uC~^7`Pwl?#G!<7S wEUM?Dd`?O)@>9&؀?H?Y1@?[.,@?Ir ?2,`?CHA`@Xur:?C?X?F%`Z|@?D`?BK?>.@?NҀ"Xs`?*@?Yv@?Z{ >`MB?U ?Y?=?U?Pa @?B@@ݎ?8@?Vq? @SR?R?J@?Ckk`?K?EW`??B?D`?;Р?A@?L*@?W ?c @?XBVl`?..@?` ?[`?Ov?>S'E'VSNV(?@b `=?^?O` ?V)°Y`?U@?Lk?&@??12@^_i\TsG`>񰵠?^ 7Q ?B`?79`GS`:`?/*v?=b ?;n??_`5C)G5RD[2h 1 ?UiC ?C\`??Tj ?9@?Lh?Ǒ`?QI?Zԩ?H??J@?Zo?_?,.`J9?<SI?>?N?Y ?H'n ?C~?'e@?UZ`??p]UH?<?P?C}@?= C‚?9,?Tҫ?`2?[H?Av`?P?RU65?(@?Z?Q ?? `?C&0TSM?>?Kڊ@Ks\`?{@?NK`L]-Y!l?F5 ?I?EF ``^v`X&8`US}`1{`?Bܰ ?E?Qqπ?O`{@$v?.G`1T="V???P?/wQ?WU4?C ܠ?TX!j?H| ?B`05?1@?:0RS`0sG Q?,P`?!$eS;(?5BPMR@0w2# ?!H?RD`?Tv"`?E24 ;4`?ݎ? ?0f9kaZ`?-?$;@?Bܰ ?L=!OFH?G`?9X?@?՜?4m?O>@?G[`PA ^m`Bz?0Io[STD?U?_?G/vC 0p?5e`$ 5z ?!?(I? O@?"FU$`?4`?L`?5OΈR[lwJ4d5}8?F:?]'@?X?Fm@7y?J3 J@?3 ?,T`?>!Y`PQެJ0À?$io?R?K?# @? l??w?AEC`?P|@?@6![ ?Z2@?VSQP|CR8,'?A#?K/d`Tk`5?\N?[X@?"mg$ F@JѠ?R}!`?Wà?'\8?S?\A>6Hs`@I`C,.6Z `b'=?73T`]`]gJa1f`+?1?0}y 0}y UR`5#'ti ?0?P,?Q7?7R:x! C7 9=?@^ ?> <@D馀?C@?\.`?V?@?I?T??" R{N AIJiPjC?C?\?Sa7@?`?? ?Fs ?FT?ED@WLdH~ZDY065?6E[Rv>x?[?RoP&aRGM8| Aެ?vQR& w?1?Kڊ@?V_?N??@%@O(`9dW?A!@?; =t`W]mT0@F>`RP%e`.1ެ?,Y?B?< " L0kV9O#i :@K?Ql?U€Bܰ >?A?EՅ@?KwZ?CT@??Vbp ?dh@?Xof4+? ?QDZ?M?S ?S?'-?( ?G ?+``B-L 8?B\?G{>%6JJѠIr ?I@?N`I)CV@?.5T 8|  5h@@IS\LW .2?p^Wd?A#?M>F1? ?B'F?H?[3?;D0@)?D*?L ?@=?5>R`?" P`e`W:/@1Ir R``2?Qp@?G F}`E>?'Ʃ?c ?446@?Q7?'ˀ@Xh$XK@SZ[S?  ?F'&d V%`?0b?cJ?\@MJ_ SMA)< @-@?E@?\v?LQ`) @2J;V,|J)B CZZ6 O?L؍h@FS@EGט?&5 ?K?8?6O`Bmg?`+UW6I? >?6?T ?X?P?HW`-KK?5?Vp?Wo?J@$?9?]€?Zl?C؀?00 ;Uk K,?=K?A@?2ـ?S_?Rn ]`!2`%1?=c ?=U$`,?U`?cWÀ?Y0@?B;D K?H @Y`=@K }hgd ? ?HӀ@v7 B?44uS[ q`?I?1?q@?;?B?G>`?DY>1@L2[:D[Mx5?Eq?2oPUO`@!@OF?:sJ?QT) `?Tu?Mq W.A c}ݠZz@Q"E.W?&@J Y@?2D?ZȀ?M@JװT+#@<'D~F@? @?7 `?Nt?U`05V_jaai`ZQ )Of`6:?,@4uH?d)?U@?Tj?~@:PD(C|Z?G@?I+~GhP4w?>.@@`?E?T-U$`V7GV?T0@?e! ?Vw ?,6?@O?d`U !?8?#.?L?Ju?(R?I?Pj?'"mgTT;?=?Lc9@?1 ?BDG?8P`&>`?>d ?>`2@-w>6 @?J<?WX@?Bz3PE@3I?W?EUeVWv`aQ@?M`?N+=@H U9<3,`I 6?&9?4/_?IM\`?P4K?Jw ?PIv?S ?GFr <@PY362?7?0@?7ˀ@?GM?E1 <+ Kfk@EO佀=?T<?[( ?7 b?*@}?Y ?RT^ c@V=G`R\ ZT@M}?B ?43;sBc?3U?TY?,AZKb` ls AjEVX!G5@LZJ*@^,Wà??TQ?M^р???O?St?!h"@O"JB`?S?9aYSGbD@?+ IT@??a`?ZVBA1(?W?b?Do{`@?Q`?61C?@ `?D3?$?O?M9R@CP C`?%G>s ?0V ?N+ ?9 5X??2?'%>`LZLMs?B# ?I2?3ߊ`?JR?TXT46@AK?F*1 TCTVX( ?b?R?Qc1MJ;`G l?R ?Z5 ?PT>%1? ܝ?0(@ wc ?7X@?IGP?D`? l?#&?P?\gu?\?F`5i?2r>`?Q&?D ?$_'\841?/%?!^uI#?AIk0g`?S?Q?=?#|Z?7?@wl됀?9I`?UJj?7KH`?V?Ww?:(?9w@? @G;@<_? U$` `?)z?R-L ?W ?=3IBQ?K?L`QW?)N?K?Sݹ?a`?JT3<t?Kr @PQKnBΠΛ ?@?B?<2?Pf?SH?4|ɀ 4?;e`?N?T}d`?Q`?;``+?,@?H-z`?됀N#ހ?Uܠ?` ?dG ?]D?&؀( ?@ ?96 8W@PMH >ݢ@5JjLO#.?,.`Ao >`?G6?Rz?46ve/n3@@@WdZJ*@NkIvP2@!IAP"?7?I ?P[?d)?\RB& DM?E?4?K܀?N?Q?Y?L@H[@Vs3??CȎ?1]EOe;?AO ?Rz?G΀' #?ESNlOJ?LO?T_??S?>ɲ C\H `I)Ob$?G~`?8M@ ?Q?RA?<: z@<À??Bz?Λ 6N@3*?$M`?Q?E!TS ?U ?^1@0^ M@?B?TM`?\Z&?eܠ?Xe`AFC?$/_?Y?H&@< 2P&5Mp`N<,?!.?Cf?@l?F=?O VUVrĀZ|@?Q}?V<@?S@?KV?)%@.@?'&`E3o?9߸?V% ?U ?_-|?a֠?N@ #@ݎ1<@?IQW` T@?A`?5lI@QP??8"o0?! 7$ZES`$Y#YƀQiB;D"@?_`?[qN ?SJ?@}y ?Z?VJ;Ec??J ?T @?< C-GkQ_Xb@PGP ?F`?PK@?Q?Jn?v @Q>?K@?9ShH=`MoO`\N=b ?OX ?RU?S@?S@zXkcUm?,7C9ӀFP ?:;`?P,?FCS I_ )(5&!@?;@&~N?I?Gx4\B>H̀?0`?L `F\P?Q:?X7`@ O@?U ?Wti ?QCؠ?^?`T@?Aj)?23X`?(s4V?!l?KV?;#@2?p+7>>Y ?9_?LF1?3L;NP8 ʀ?E?@q`W@?0@?<*53@/(?0>Jj3 ?K?Na?Ax@?#*? O?J[?GtQ@c M?Mܝ?-N`G ?M?>?2?!@?E!J?H>Fc Va'?[@?3; @?C^@?P?Yg]?Q3@?G?R#??`Co `Cq&ev@??Q+?N ?# @JjRVY X?`@ ?Y݀?^j#`?UA`?V'+?]?SW:R6`Bf%88]@H7H݀ CpB?5?P ?@b?O ?XC \`TX?B % $ ??佀?S?R[@JW<* Vv 8)`^YE ?F|'G`N@6O?ILJ??R?GK6 4(?SB@?E`C ?8?_E?PK`N)S׭5C)?#?O1?S?D.?9@?>=?H?R?P?A?&V`?s L?u+܀?.P?SK`?S_>*EiC%C`7e@???U%?R ?ED?!JQl@MȀ?G} ?d]V?bݘ`?Fβ@? h@?P.ـ?S 5R-E ?2 ?4*?;+& ?K`?Px?T쬠?L,@?=g?WX?AR\?1Cؠ?LD ?ͪ??D'@?ElI@?\u^ ?5`T(YeK C@?Bk2DbrL?T&?Jp@?Co `?G@5:j?4NҠ>?>`?\Da?JDTP@MJA`?Bc @U'D?V?AMRxPa @?&:?A- ?BF?I ?@b?0@`?K?QS?@?0 ŀ?E; ?L@?@_;??Ơ?Rn??TMPS?Hb@?N'37?#&N\ S+OHCĀ@"'5@44KqM?$?Q?D46@?@I`?U ?J0`?5?2>s ?Se?X?2AO .3?AE?UT ?@ J ?C}@?$vM5@V; U @:r?M ?O  E`I ? ?Fh?Zd?Z ?T?9`H`Nm?Aj?c%?a;?3\CBK ?*1 ?Gp & S{4?V`?QɁ2]`7 ?EK?UU?9 MȀ.&?FG8??" ?@3 j?_`=Ѕ Y@#?V?됀LǞ0Q?83?P,n@? \`H@?QU ?JJ*@?E ?QF?52 #&?v 3u?F1?Yu ?QPR`j=@H8?D;x ?QQ'ƩA?/?@á ?@D`?P`?L0kAؠ@NN?>?O,'>?G - ?V>`?Ff?&d ?DG?B5à2c?,?[@Q ?Y5?1l?!ғ?L`?BaO@7?A<?7<?#.?;+ ?@@?!A 9)k?=?^?9(?@%,@?NK?4|ɀ?31@?U?B mF&@??3C I͓PTXQ@ҀCUa@?Pހ?$Z U`N ?`?2DG?(,D7 B@>K??IQ?LT`?96 #@HwTo@SK`0Y/?S? ?Vo`?/s >s?GKH?BH$`A P`?Th@?Q]?`Rc@[1 ?L??0bN=b BA@>xAA*q?52 ?U?a ?PfN Z`@`?Sg ?E?O?Vg?<?25`?'5@NK`FF?4 xa!9`?>*^Cr`"3ڳCvN`?>_@?LC2ShE JR@5?Pf?E1 6`?AU`?S`? O@7@??B?7R=`TR ?5q?Mw>l?#@?Xb?^ݧ?M@?2 ?Du?D3??9=?Vf?S?/?6t?P?$3S`H:@?s / `0l?CP?TM ?Q?,F13m@?Ơ?5@?9`:?W`?LF~M֑`N 0V ?Q`?8DuQQ T Y[?N)?9]B?@@?Y"`?Pn`?2@0 ŀET &V`?K+& ?Uz`?L0 &`RM_T̀a9S@U= O@ ]$ ?J?\E?S% $/_Y-@W `?*-"?>~F@Lf@s?4$>{ Bi8"?%B /@?9 `?`?jG$ ?a4 ?8?ET ?S ?WFr ?c<?]P/B:0?!< 1M?5 1Fk=[QZPHU4D@RF@?H>i?6\`L OCa ?pp`?;nA:+`E\?K/?Ro"H5F`?L `?L `Y LG,ͪ?62?2"i L7MG?A?I&CQ- WA?5[Z ?d @?Q?RtC@?8rl?"P` )uG?#P?(I?Qg`?ZΝ?Rl2 ?As@TX?@ʀ?]`?Y*?9r۠8'n QY@cQidyv;#`?O6?/Du`L@.G`?V?ai?]O ?U<?3S:`G>`Hh Dط`1@?Cb`?3M{@R€D馀!@?/*v?0 ŀ(:@:VB?B?\]?Uu?B ?L ?Od`?RȺ?[j ?JA;7>,H0%J+g??bTBu`=gP[M>($ݎTX@VS@?Lͪ?Z@G?:8`?R)/_]@@[ 9ES/@3W^"*I°-mU`??T&M ?Vo`0>RbE 5X??,?`Y|?`i@?8fT =: =b ?+@#?"?RJ?N`v +<`?&V`?R?D9 ݢ@?#?6_ ?4@-h~QғU`0On3@@V 9ZK)IAO?3@?DuHVY`?X v7 `J`Mr,?<5B` @Sǀ+b`?9U?C?Bj?5z ?0n?'R?@?Z?]`?+ K:> ?3`X``?/?\?Ik>~Fm@?+?VՀ?U4 ?L`?R?H..@JU@F`?P?H`TZP`io?HE ?0<'2@A#NǀI@(z50Ԑ@?HN#?S喠?N2?;`/G~`.ͪPSW`JrAHB$>@?B ?H , .?C‚C X:Ȁ?G(4?cU ?Ir۠Cj?>? ?U1 ]m]= XITFԾ?I`Wy?Xz)DANW?Pl?^ @Hz@?<`?Aj?=?W?Wl@?=@?.wq?+7>1Fq;L?M;?Y ?:{1@?Mt`?SYF?G?(p`67`1[ xZ|@PCFBb@?.=b Lp`S˕D6WW Q5r>`$`!2`#`?B?_@<`?g{?^E@DCVՀ?0`?J`Q՚\x?4?Yg@?GQU 6 F3`'& ?/8A$e]4$/B?0QGgRx?J/@?]>?0 `:9; ?T ?b{@?J> ^  9`7FH`A?PV ?`%?W3?4p/<@Q*M,O[y`R ???P?9z57?3 ?YBy`?I`GE<?9g@?`@?S81@9=?b[`{?6B@H?#y?'aEW` (@?E"@AXhR'@?L?_?I=?LF?Yƀ?75@4M`?Fs ?Bj? ?=ˮ JB2?;?P79]YE[?/B?DVRMZ?#d)?G!זG`E@J`?9e?PӠ/Q[n??C}@:6@?,K7H݀Tlu J@88]@N@E5Af@ ?h@?&? @?F?_w?e?]?d B#?>d ?4l@[< _@?1?Vuʠ?Eۑ:z@UmU @P4Qj2?@ "A@?* ?TSQU ?A?cz@?Z ?6t?T ?b'@?G B[C?-ܝ??E? ]?Bf`?I/?E ?X@?`)?TP?H,?D?JEyA@!OE_@<`QM??T9|<`?Bo ?a;`?``?HK?=?O?PD?BX Eq`?XU?a ?RO*`?4ݎ?,.>F1?3`?T?Um?!@5gr?Bb?M ?B?R?IUT@Udl?Bz?jLH@6TH?;?IӠ?@j??8Lt(`_H Hn?.6? z@9EP@O,t F7>?C?I`?B?Lu@?:W<`T <?wqH7?Eu?ioOJ)?RR?HnN  e@?3" ?@%,@?<?70`?5 ?Dd ?Nh?A?0Ӡ?Kh?6[=Z?C?V^?@D Y& U%GHL`?@ɭ`?`"s?Vw@?L.?QW3;T?.3?_;e?XK@?'?'R?F~=\f@UN >Έ;@?TS`?ba ?Zـ?RXנ?A`?) ?RdU`?W >Od`C IUZΝX@LQq4R> ?1]?SZ|@?`p?``?UK ?9`E@9%q?L|?IOǠ@ @Aod ?Q<`?_`?Q >r>`Ax@@Y/?@Q?V?S-?C(`?1Am@?1qπ=c ?19`?*(KW6P?Fo#= [#`:Ql@d @r?CT?Q)?A?)<K`UI >s?G?Cd)?IU?E$?43?1@H@T#G)x?M'-`?P"& ?Ke`? pXw _EIJ\Yi@:3`?P@?0OIb?(\?\?R`Mߠ?2?MU$`?Hk*?<2?B5`?J[?3.?J07Q ?A ?3( ?BW?AQ{`MD5 ?Nԕ?O{ H&@P!`?4H#b`?`;`?`?J>TGH ?@?IL&?GKH?Cf?1Q=`^TuT6`J>?VG?a?H| /Ax@?.o`?^?^M61S B`SF\ JFJ@[@MI ?CQ?S ?Z{ ?Tk`?,l?$$4*``Q```&x??s I`ZoC ?B?X LQD@?\8?>Ҁ?> ?7"(?pp`?? f`H~@= ?I^ ?28/3r`?3P F`Y&`?{?G :d0E@?2a?2`6P O`!K<?*?GhP?C ?$|ɀGtVMŢ@*P)>P ?4E*V`F@IW6d`?T ?:]G>f`?'V.o`?%xa?0x?N?SZ|@?G`?I͓?SG?H?-K?Hy?Th@?(5R9G9r۠R A?Jx! ?6jL5OA1ͽ@=\f@?0!@?F=FBBŴ?X?[48?&kCm@B@(=ˮR,`9Z?P?VY?DfL[ƔW@XVI&`?T6?U@f Gj5#?%s@A@$@? >`7?C=?Yu ?vIq?Nb?L ILJ=?!H??R?W>`?.W?r?CH`?)?`@\??57At:UoSGF:?B ?5!JHS*Xy@R@m H^P!J3`H 0?`?N-c X%]HZVL?T,@$?;@?N0?Lt(`?O@?WJ?Q?>8?Cm@?KH@U$`UŠW P NV6`?3u??@k?G:YA`E\?@?D0@?QX ?a`?Xn@?/! (̀@(@V@St&C?);73RaTTS@_uu@W)j?K"?Y?6O?'y??Se?[?Vdۀ?>(2?/?JP?&ٕ@E$I<PPEe?5?'0`p?Cf17V~/LT? J@U Ǒ`?5?KP?BoJ`Tπ?5i?H Ѡ+?(՜?AI? {@?|ɀ??@?)LJ:?Et?a`?MB??(?/(\q"@R$?G!@?P;?M@?P1D?P?[܀?\`?D0@ 4?DH?We@?T ?D@N?AGyKhB'??Ce ?[+ ?OKU29PKs8W@T10 c Pɭ`?3P 7:Y#?1 O;e\_XSJ0?9o?S,9,D ?.U@?4B ?A0`?Y,?W @!T1RCG{OI ?7>`?J\?{?" ]?UN ?UL;`FU O@?;7?]?cp?ad?T?T?Sňq@;?:9; ?;<3I R!`WQUU85 #Y _@?/Q+?]?TM?P`?\N@?X lJ@ D@?(? 6A,L Rvz@Is2?3`?'`/`?&s ?Cb`G@P ŀ?PR`?M H(4E%`?:O?8?H]܀?&@kT@?P4@?Z?2I <@5L@?;`?J`?JG?,$S ?E]`?>Ҁ6ve?%9{? ZyV[ #?1t:3y@25à?J?]O ?R1ͽ@/?E?GG?2?B?P,n@?G @?Q ?MA?^ ?Pt?`@`q`P,N:?;#@?Sd)ҀR`<<@?,^b$e`?R ?WnnM 1T76L EB?p7p?8?A?됀?7?S?IStT?P`?O#4@7P`Ji^ N)$Q>?Q`?Z`?b1?CG{G@]`?65?8%?Re?S=4_JVB 3O?3.DY٬`I ?7à? ŀ7@?5L@?Do{`H"Xe`< ? KT WMPT 7Wa`?/?TY?`?b ?bp ?Ag`N2?G΀?c$?S ?:?@=)??! ?Ak@"SR ?&?9 2?B֣)e:9;Р?7?+ ?P*?NQɠcm;[ E-c@GL~C0&`?R}`?[C_à: ?R?Q?, " E}JyV?*?EV{Sd`E.m`?Ax@?Q ?CTFGcy?Nm`?S&?1>{@P_@cVXK&?5 ?TH+?W4 ??1?w?,?'9r۠E7?L0 ?` ?G`?d ?TP@?SΛ ?8 f`?@D`?3.?إ? ?ZX ?Z y?F?HY?:GP2N:?D?I>؀4@NI@Qh"@XqIuG?P@`?^d?ZX ?R[?.1?MmU`?V@? TX á ?Ju?He?*'?C?P^ =`dZ߀?=ܝDc{V ?`A %?U@?WP?C(`?7J ;`^ݧ`IuG?3b`? ]A?4 ?KIQ[ @+?P= ?J?9 S Z?9`?`.?R! ?#r`?;n D ?/B?H?>p/?D?Fi@?1 AbO@<`H?9NEܠZ=@?CC?P?9/?XE?Skk`?@RSf@?CC?[DNҠh`d Rt+,>ʜj/??4u`?3e ?UQ?_?Pw?7& ?+?b[`?CE@?Iv?9`?0` V -d?F%`?OY P[Qe?61?_?]yn?[A?eF/ ?ej@?V7?DE%`?F?M %?R} ?T K?Jt@?@w?LAZ?A@<@?`?Wu?V; `?H5?Ic" ?/JG@GT9v@s@8I%W`?#H`?- `? ?3?G?I-?>?BA?N9 ;cQP?N EbNa< B^B ?V ?[x ?CT>Y C WB6`T.0n@?B-L ?A@>?@ ?R/@?"(KkA._@?0?&ev@-C@XOX^QW?@`?g`&`?d ?WP@?L2?*X?A4?[[`?W?HZ;?Lw`?* GB:`/! MP? P`?N%@?14} ?UMq ?a/?4.Bw@?O??Vw@25`L?NK`?YxNVeP)VO?'p?B QBUFk`?$ط`?Yi@?FjL1?Hrl?`ڀ?b4`?X f`?J ?C`3'?D"@?FC)k,̠ D@,K?C@?Wl@?SK]?Q?\?ZV?;C?B=?_@?[=8XAoO) :P @?2?^ ?=?I(?B}!`)°V`M[+& TVI 600?8[?V`?P)#Ā?/@)°6`>MgI &?>`K8P?C`8IA@9f ?DԀ?IM@1`362?A@:mE O@@EAY@FT C?7?S@?I/?$ %ӀKKK 2zI@ ^G@Ie`?S@?Y?Q`?A$e ?'?O?F ?3u?04KPY E`5?E?ad?a~`6]2`Z{ @`>KTFD+&>`?KÎ?\0 ?:ntZ@}Pt?.)@MRb@Zy9Ҁ-^рT `@Q:+`?7F52Dv@? ?/V HV4d?=5@;/S}@T9 [b:_E$?*]?=l?N|?@hSo@U.?1?`_EasGWa`+v$MVY`X&SeAr@>PE[Z KWn\R'G]mW<* ?OB?G?@@`?-mU`<dLH@PQ Pъ V JES2{Uq@X`& ?,X ?#ހ?8:Ȁ5}8Q7x?TQ?a?Ui?)<?>8?Eh@?N`?dO?b@A0~ S?E?>R?$Od`??Q@r@Gנ?=j ?Q>g ?6m@2mgKCZ$`\vR5C7h@P @>u@?1``+TUu[?4;x ?V&?*`X%[-F?A?M`:@ Z`6?V@>f peDv1MY\{^hQ-xHc Ǡ?RM,2 ?5#)D?A7?O`E![@SĀS _>@`/&R@? @?S?T "U60`?KJ@?-AZVB]C;8̀W_mZ^`S%C`D<`HJCO`?%>R`?L W*L?:@?@|CDIdW?G`?Dd ?O?C^@NX ?ۿ?P2T%`LKPYl4YY`TFPq`Xt`HZ ?Q?R?/*v?3 ?B}!`?R`?X?1@N 2=?P?R #e Db- ?H`?S7h@?9`?SP4 ?\@?$=G>?1(?A4?W,p?Y`?E]`D~\ Yꛀ0á ??7 `Y^ ] M %?C2?WX?Cb`J`Oc@sQ\`FȦ?Sۀ?YSa\ gti \ӷ@"`?<g`<?8?]JA`?R W5_?AY`/($/_?*D f ?| UI@ ?`>f ?L+ ?P@C+@Uc`>@?-l!1QQ-| ?9?G[`?K ?Lv?TV`?QFNz/?<}ՠ?@s@?'O ?l ?6O) A0`'?Bt?Hb ?M ?Fo#?-Y?FȦ?C͠MO<`?LK?\W ?S`?mWY@?:?SN:|RD`8:@NHE^9 VB?4 ?G:Y6veD"`?I@ ?Q?;?6@?;?SS:`?c@?` ?L?I͓?T?Jr@)FZ`?QW?T`C`GX?Dط`?Bz6P<Oc?=ˮ?Z?Y@?] ?Q UbGM? ?G`?#_RH# P@AT?GT?Ye`?C.TY A =FNR1M?CK`?9%@2o V d%`s7M ?Dz?GKH?$?}%C)6MFJ?F5?B;?9`?H 0?,^bDG>&S@E5CR͑`EܠCQTG$2?E=?IvI5+@Y`m?IJ.J?0?S?:`?Z?+-?HUe?.)@?*?Oǵ?SME W RI`= %E ><?Qۀ?@f?*?;?,<@?6ev@?At:EĖ R@?*l?D 1`E.LO-`N#?(@G$2?I17Z}@R#@?Q>g ?`?P9^ /i\%Ӏ'`?8"?4/_?EK?b?gM?a ?U?P΄?K@?+2h )?Gd?K@KV=5/΀?4`?3i CaW 8,D?M瀠?N8?X?]?3r`@}y ?=W?KIc?4?%}8?@5?L?Kb ?Aɠ?$@2zA`?@t?L}ՠ? @`됀1?MD ?6>`FN@?A@?GL~?I?+b`O`[ @_@[p`&9?ISh>됀UO`2?B3X`?DPs@NJ4l@?AMEB`_b^S?#G!-?-$ P `d A6@?>ۀHZDQ>?=ߠ[Z @t?8̀?< It@S$ AH@q`^"hP`_@A`H=3jL?V?QQ&?8`??f`'0`:z? rL' ^*PE@M;Y @N`?B@&؀L`L׀QYC?3(OGx6`?>?Wyڀ?DYB}!`'-?.Έ?2?? ]`'& ?T6?bJ?]?K#`]`>(K?6\`.(y?:jGjC_R?!$e?W0?V3 =R?DD@?2F 9`2n ,@?)< ?=Ѕ ?%n6`5?@Ci?T]V?7H:Ȁ?)~ ?S?D ?5 ?;ۿ4ioD \V ?M)?^'?P ?7T?I`?#`5N9 aDs`^%1?"c?E'Q[*=W?@: ?L1`=QGy??ǵ?_6?-Kw U٠PuQ>?LB#\*@T+KhR& B@?I`񰵠)Sh?1 ?Oƀ ?M}?9?'0@OOX][\b.4`ZB`HwQ!_`..@?\F?`?WIx`?R)@?+ ? ?E]@F+@`@O ?ER#%C`?Q Ġ?P}y EIB`Y#`YR2R֣K =h~1j??9ӠAW3 R`[ ?K)?@K@%ʢ`QW3 Q#?,`?QN?Q ?:GG@D.)?) ?Kv@?7?I?!+TF?7"(?^qe`?aW`?3‚<6?G*`?EJXZ`TdF"@;107Q LͪQ|?*ESB?@wl?QY`?9v?&5 ???N~?JѠ=3P\@?'`?U?Q<?//M@3a :c 8?6|?Ur`?B@LNQ+ W$46@?Dd`XfB H ?IȽ ?;+ 0;?Hϐ ?d?a?8/ED^] ]瀠M/@P\@XIL`>~?>f`4`G>=b 0GN?@x;`U?"ܰ ?awA?NS< V @UXILJE`]-\t(`?,?M2?>?I`?Z"?R)%@G:Y$Ԁ?P`?M4 L[`CE@??%n?Ry`?M N @FG?Hb@?Sf7 PcA-.o`?S ?b ?9dWR+{??I#;`RE^ @?b?EĖ ?V%`?M 2`J@Kg@?S`?5]`?>f`?5B@WԒ[gV|Jo`FxQv P`@2?@ ?XM@?V?U/΀?a ?]U$`?Bq?B ?I ?2^?*#u@?0{ -H$`X%R}`?AY?^u ?W?:]?&o#>@?1<?Zm>@?a$ ?Q?K`?Kz`$65 ?!{|IR ?IC ?]@?:/@Eנ??X@`?^A ?;529?I4?FU ]D5 DAH?- Y/VF™?Rf?E`C`@><5 1@?@P?0(@R'V @I]D + ?>ɲ ?1? A?6"KE`?$?Ge@%L@T,Y`+[6 ?=^р?\׀?4\Q}<0 ?3@.@LrK8t`0H@@5!1?S␀?ORi,YC G;4@?JL?[?+FR>{ LTOTB I{@?1?QU`?Y)?bc?^A?B@?D5k?Z ?^x?Sb`?" > f`?C/`?3=t:KRE +4@Q, \L=QDs`?5`?V ?P?@?]?f?Ww ?6 ?@?C?5q@?Z|@>?8?5C)G`Uf3Z|@?J:p?/B>y`>%ʢ`R <?R?W ?[5`?^+ ?F\*@}?B`?K?8|?KD?Q|/_L@8I?2r>`> HN@qN ?[<`?S~T ^G@=D5 ?*?,@?3wJ܆aZQ .@?SD?R && `?HE?S5I@ YM\`/?8B ?9@?I[?A?g?5q@?7X@?2@?,@FNUHB&?=3F4,@U ?)a?^}}?H=8?;?Sg/*J*@c,7b'ڠ6Rwq<0k?M ?U]!*?3[Z ?C[?SbY?6- ?:R@?J3*N@FF|$Ԁ?T ?_ ?_5 ?:AU+2h ?b`?e?Q̇A6`C؀?07Q ?H?S@?K8t`JrP?3N@s@?J$`?L@`RM?.?`?R `%y?B?T̞?Gݥ ?'R???T ?U?F™?:?E[?A6`)Ҁ7 `?#P @sa&6`);e`?10~ ?A`?PϹ?@@,̠?3@?C0x@s@?LT?) @/EuF;=`3cK?Ad@?"wTIa `Ԑ@^*P- ??'^TcC@Y%`0>s)?.?TƠ?^*H`g!`?S?P ??( @?RNkYPɭ`Py ??FL?6`$ 9LJ?Ho?cC?Xآ<&}`?G`?5s@??@-?BŴ9 `^9&`W?A@?CE@=ܝ?F?_ ?U?R ?N|H@?@?=?Ki?Y ?BO*`?U ?8Q`?'?H? : ?!h"@?D݀?@ހR hK_ ??*@?O!q@M]I#`0s?7e@?YZ?WcyEIU?P?QDs`?LH?`%?`@?L@%@-{@Q6@`?H>i?6- @`?HB?S#r?Dz^@?:m?Kr?T>~@?O ?Jg2?T`?R?3?*u?Dl@?/P`Xv5?!`B ?{ P`DvP`R mU?M}`?5?R?A]=  D@?PO?N`@h[)U@98 Ǒ`fe@b@?Ǡ?HIC‚VSCMEjD>o?N`?Jd?U ?-`5s@?.g ?3G!?-77`WS`ZsJAU`G@Z7j3?` ?c}ݠ?E>`=t`?I ?b?X>4<>8=d`BGUQiWE?7Q ?Y?Y_ ?+ ?A?Xg?Q?I@?HC@ ?0W?CE@?F+fIQk?'à?J?U@?^V. ?Q*+7>PjQAm@5]`? `Z@ZCK`?#1@?9L&L8`Td`K&O?D ?Q@1MԐ$?V!?Jx! ?M/?d`?b?K;?>%@?/E? /@?5W`?B?Oe?K/(@8?<7?R6^?L@A#/?@O_?;?7v`7aW0`W- `H?A?F6 ?2~W@$EL`YB[=`P9`0V ?G`?VjL?Cw>"(?Ti ?c!U?X@`2$Ԁ_` "4?9Z X ?U?``?E)@?/?3?佀?K`?TCr`+<?E`?RC@?3aDp`?+?O]D 4_NsР?@W?A@X=3W`?Sgʀ?b?@I6`?3f?Z ?Z2?Q;?3I EW B@? <D W*`Bـ?=8?D6?U1 ?\ `?K??#%C`/i\3y@?3͠?>S'?G[`?J yIJ`Q`ON@?@@?Jhg?G?=D5 3&V4y@Vw ?1@?N3?"$ԀGWa`B{?Gn\?\@?E>R`W a]WF?,y?QE?4?/= ?@bDjD ?I?E ? ?D0@?D|ɀ?"P?3?Rt?]R??1_Q^@h@?ݎ?P6?B:g2J˗`#1@L3`Nx@96`9@Q@\`HZ =R?9?!2`PS# O<`;+ M@Ooi5= 7ti ?5?"?B?c?c?M;?Lu^ ?9L&Wݥ Q?5Ӏ6_ 2o ?Z?[?`?C&y ?Q?M/Cy@FME ?4s@?=j [h֠Yf(@;2h ?@|C#>? ?U7 ?cg?8| WEn?\8?E@@?/G Kj @? ?&BI)F ?(W@Ӏ1$PYBGAo ?6?dƠ?[ D?H ?b\x?9Sǀ @ 59<?!ͽ@Dk`R @?F@?UG@\M@63Kv$T WM@C "ܰ ?T ?ZL62aU2?:?#e GhP?0. ?Uh`?;v@P@`R@?. Z`?[?U$?l?0 ?@H@@1H1``?Y ?\ `?a-$ W5GLB ;2#G!D7 7?H , ?S}@?V?K<FCJp@?C`?,ZX`\؍E&!@61B@P@YDPg?&}`?)`?+U?O%?T!?ZR?_V@?Mt`?&_ ?Iv|?Tn?R'@?:i.K?@ ?P?0 EĖ ?A??Q: ?A4PI4%?l ?.3?R ?`s@?WqDK4`Q>?28/?!@9w@A?+(?L7? ŀ7ט?0I`?(՜?#?AM7K@ J)P3 ?UI?S[SS^?P?Bv?65`;s@Ϲ^0a?0n@?]?;H-IH`?I#?IV`?*zPN`Pm9?Y?D"?ET@-P#`"o?\ ?`?RP` ?RVl`?Xe`?Mn ,OQDs`GL?0(5GG?Hh ?RKDZ[RR`RD`9 @?73?4 ?V/?YDM\=)^ Ǡ7%?8[ JL@?Ra?^?Xn??5-c@?_A`?S+W7S`; P0g`?.@?e@OSf+Y ?G?\d?bT@?UiC ?K?R?Ak?$Z ?J]?Q+?RX<?Uu?PH ?K4`?A`CS:`Es@?M?X?@=?s?E/΀?P@?I<?A1?A*?V?a0?@E@\V=7J'@Rl2 C`>⿨`>Y F32j?PL?=t`AS`? >?6? A?31@Z|@?A@?]l?s_a`>l?W @I-@a׀UPw@5/΀?=^р?E=?*`?A?D_O [`?%i?Y4@?Ldn?A?]?c?H ?F`/s .`?2?D`?QCؠ?S.U?CYF-?NQ`?:G?67`7ti W@Da`R0?A`?Yz"X@[YZm>@*9?SK]?Gk?C=?C P;SHW`?7 ?#H`7KH?Go?J0À96`E@ҿ`?P=@?S<>=?I1@?? U[vJ;`2=?. ?@`0M]BF?8z?W;@?T &V`?:(%G?A>⿨`*g2?Rf?W.?53qG L#?(:Ȁ?S ?CQ?'%?R ?Y'?L겠?:?)4?B2"?U|?=5@LM@?&Ծ?U=@?+Qp@H?0p? V0S=t??s I0T?;?=[O Z.[*`>r>`?cΛ ?Q Z3`9g@?\#`?HzS\UP@JB`?A`?B0?&@?IY?O >AL? b?{@Lu@A?S?` &Ծ??8b@2DV<?U!?R€@L@M{@?&?RC?Dd`??2CTR[@,$S 2R`W"(V6LUV9S*?+@?BAQ&SwAod ?7)jK܀?6?EQBΠB{?L7?7`H?2?QW?3BK ?2@?D`+E Cs?5T ?8拠5@?Ծ?C ܠ>U$`;E EI]`?;?4?L `?R$Ԁ>`P!@H?&BX8Nk?:P>8K?D ?1<X/cfV@?IC ?+V #@BK?C?5#AU`Rr>`8 Ѡ?QĪ?G@C=@3P\`Exa?$dG- ```\&@|@?Ǡ?5Q?+<`C#"?-@ @'?'& ?/ZE&@Ur`RU$`_`?S7?V@CT@Mj ?O[@?P腠FJM(c ? ;`?@~?S~?_`?P3~? _?>%1=t`Ij <'3:/@F{< PE@I@@B 9P@A@9`6J3??O" I? ?J6>PH?*u,T`GdBcR@R{GqX^ƬT^Rܰ Qa@M@Uc`96`?[M`?UGIW Td`C< @%+ ?+C2A@HfT CM QA ?[?T ? z?:?;`K@YBy`AJ@?P?U|?5`< E A2`>F1?0@BLXUr`Ij`Qv`S`MK 1&?N5?U?P`?,T`WIx`f ` `?[m ?`\?BR`P`P?B,`?`n?d_?` ?U?F@?CM.?4"6?Ia?\h?(Xx*j?P+`@QX?8/?PK`Q-x9I`?IY ?T`?X?^ ?S!A@O?, " ?B'EUM[5n@T 2 `?5 ?P ``?R@?5?%G?J[?9&R?B?P}y ?6[m !qπK?"@?)Sh0 z?N'`?Sa#`?H?HIL`?7A,$S ??4#?N#`?&? _Ja6T?;/?#`?4#G?&ev@R [x \D\WCH`0á Y@K`?^u ?ax?]A??@?Q?I)?,.>`?DtR?JK_Hm [4`?^q?V\`?5z ?I2?R?4M`KdE@?P3 ?` ?TY?B?H՜?N?AFC>r>`71?B?EGQ_]@F`DPR4?%?]^6?`]?Rz F@b. ^6 @7?Q] ?`@?`Y/?Km I`?# ?O`?Q ?@1D?1od ?K@?Yu ?RAA`?z??YHcVh|`?1?R)RCH`>-io=9_ ?J;`?bs?d7@?X ?G@GH݀E0>s OҘ[!xQ dHl``9@ ?J?Lz4?"?E>?Pe?CI?SA`?V`3@BL?4p?GWa`?E?IE?H ?N?V7`?NN ?6- ?BF ?2n 9P@>,?CQ?Lt?Sk@?5P`q`Q OD6?Q>?^?L4<YRVk?IW ?KUC`P(@?Vd@?\?=,)(?@m?Yؠ?\:?I]?@?D?Py @O@Y ?M?(̀Af>U$`?P9?T@N$ VHn>?FR?> ?3,`?Ob?T @?;<9`2P?A>?[7>?\ $s@U@AݠExaU>?[r?]0??V?DH`5O8B ?e ?>"?P@c?CNcBc@OMD:BJ/@R>4?R?_ ?X?F?F3?Cl 4@N;b`?*DTɘGB@4*`f ?D?7cy'5@?G?_?^[?G =ߠCvN`?UxaQM?D ?:ŋ Mz9Ҁ?#`?!O ?U,`?Z`?3 l?#_R$nE?>?BT|ɀ^@6" ?=Kw ?* ?(>`;e5J]@X@ZVݠL@BDG@q`?!?@@?Ty`?N*i\Ii.`V]KW`?I `?S[ ?J ?3( T;x WB?5G?X}`N`$Ԁ;TFIMBH?E ?a^'?\&?8~?9^ ?T ?H"?HyQS CR?9;7?N _B]`` QW?+ #`;#` A?04?%?(՜?B5`?J?Q?D`#_R<[`J`EЮ?7`?GV?E?Tҫ?TnE?9 ?0?2f`E1 YW~`U`\U5@y Ouu@Y*H@85?Rst ?TX?Fx ?MKw ?\@?[1@?H?@l#`I``E: >s ?B,@?% ?6^4`>C@&`?=?$;x ?'?;m ?(K"mgW `:W@&`?Dq!qπ?Cz?U`?K`?Wנ?`B?ED Tp UoO`? ?GuS`b`R(zP"KF&@X/`@b&a9Y#P4K>U$`?E s8Ƀ?B?T@?T?HW`?'5@?9L&?#VP X<`?&0=?4;@MJYcK?O ?A Ġ?4?4l@?'Wa`?-A?:?G~`?C W@?m?Li?IA%@QҠ? V ?KԐ$?25`?](?UO`1&6?9@ E]@]X{ QWtQ? TX#d)U`N ?5ܠ?;4@5$nE?O@<`?Q?#P?(s@`=@bS@)X?@?FN@&BP Wp-@GoXf`e`?446@?T`?=`?C&cK\_V`-r,?C?O ?/! ?Fo#?Z-@?LA@X@`Ps@?S}@?` @] +T-r,?9i.`?C.?#7%< 7\8=ˮIW E?=@?Q$?#=t=D5 ?9`?T@?X@?RxJ?IA?Qm?6Z@]FQX`RT`Gà?@ Z@?07Q 5}8?.?7$?G_??@>1y`B ?LJ?A%`?Gj?Iv|?O@<`?<À+J@Z|@2 ;?;Ǡ?JB`?P}?^=?]?Jc ?4S@?&5 ?2?DNҠ?9M@?,@?P>?Sr:ŋ Qi?Ew, ?U}8>?CG!?a?Mc M;@?G^@>d Tv"`%C)?H@2y`Ux>?#JXVkAGy?%/΀1\ C$ b[`)M0ڠ:d? ]Z g`W:Y?5.?!h"@SR\BD} > S%C`N ?S,?R! ?T@?`7Q ?QEz`5G?"U?#Z|@8rl?$?P ?G@..@O 5Ӏ?ZL ?`X@>ҿ`VIuG?1?G ?B?/| ?4I?F?O?J?_@ Sh?7O `?: ?@U?7Wa`?`ݎ?Kb`?[I`?T?FD͠>,PSK G?-?$? qN ?GR?SQ?Xi ?UC?4ݎD`N`E"@",@??#K`:9; R]@#Λ ?KH@?I?C1TQʷ '?MPM?EX@=t`?A?^?T7H D*`AҠ?6?SĀ?PE?L?Q0`?%!JE?Cf?U~n ?%?:?V9O*S@?6J?S*@}T9?Hs`? lW V-7@U6>U$`G)F`;@?(?+?!3BK E,-?8ĭ@KT b`Xq?:d?Fa`: CM?7+?C?? ?Ln ?\E?Cx4s@?Qs?`3`?R?5B5Cy>s ?c9@>Zi1?'O ?F 7{@Nx@GA?<}ՠ??N"WD<'?D3?F@?_`?R@=>?C*?I8 ?y?JDOER;? z?*ѣ9 `C~5`1Cؠ?C2?bf%?gk ?^+ ? lQW-d?O?C 2y`5?6?O?C^@@Pu`G[`4d/ `?~?KB!?D%`@B4?%y?C?2a"4M X ?#&?b$ ?\ 6HnQL??F|E3o`<Y0@Af= 2`?RA@?S8 ?4d`?B@?I %`?E?"@?9'E UGd?+4@?Um?@^ CO@B4!$eH&@T+FJ@~@5CE `?@B4'G(`?9U?7& ?2?(:@?1@?A>(KD">`?Mq ?Aup?cK?:%?9L&? @?6:?3`.?C?Y2% ?2{Io:?%?<FR`Gݥ ;2h B'@SրQ^@~@?-`GVTH+CpB?@?Q;?H? LJB\B??:ES&R\U,-J 5`0?1?@ 85?4??2r>`?QH?RVl`?1CM>B ?P??;eD~PM;?LT6wRsL.=b D,@L' ?9r۠?O``? |?L~`?@c3PT+Zd?0á ?f;?bJ@Lg`F™?94?H# 4b- VS.o`.=b P ŀ%q@?GFr ?W@?1?U ?A`;J@?^р?&Hn?5@<H!>`?Mi`?F[?-A446@JP>|H@?!!h"@PQRŴ+C?'@?D+?A R\Z&D?Q4Z|@Z?0&a?d9 ?Q?@?8N#?Ef=AVQXh?( @? _IW : ?I?S\L?@1@+<?L~`?Y?X[?N-?+OojL?#9?7A @K QKCHW`8Q`p?Ht`?Kq?;?2# ?K?#?1 CqP +Oo!@1?4 ?5$Lg`;UP:`N?8'n ?'[|`]`7$:[Q6$$?+7<:F`?Q?Q 19`^c_F- ?[?[>s 0[?JI@?W ?RlڜjP@AQ@͠`=[?.G`?;}f?,6?V ?S‚P >l A- >s?;?"{?GR`?N`v 2-@á ?0F1\ L5B`?7a?UV4Y@EA`?E@?8?AcK?P3ڳQ@?/@-)d9 `7`?V ?DV?, l?$U ?-^р? >jP^ `@F@?T?:`P ?Gݥ ?e@?Z6?0 Z@?;Ǡ?E`?6`?0-?Cހ?N ?9@ :4 ?B ?FF?GWa`?NCn`?V`?^sР?X+?D?8t`?CĀ?G; ?=c ?5}8?:z@,ͪI APcwWp!@?N$?B@?#w>`?A, ?Mo5JjAf?Te ?R) GX@J>l?>D ?Z|@? U$`?%>R`?C(`?F 5@Q >Z|@?S@z?@b`6?6Ǡ?T`?Tz?Lu^ ?>@?F??W?VL?G?Dd?GjG2IL.9?L<`?Wנ?YD?BB8:@?FB?SU ?5-?9g@?*-": ~@G_MO ?'? ?&@?/s ?C?T`?,_/ n?` ?aHF[l9@?Gw ?L"5ֻQ@ b[`UP?1<?HJ˗`"c?As) `LB?-{@?..@7Q Λ 4,h?@q`?F2?1cK>I`)eF B:@?W[`?hߗ ?U3oI @?)Sh?Bl2 Y6```2?)=R^G@\ `M@`?X`?_dAwZ"ڀ?>6 @?Q0N`Du?KY 2F\^bOE?6Hn #@.&?O ?S )zS `W} R=c3uB@DƒF=CV?D} ?Rx?AM#O?8?G @0=J@G9$;@?;Î?P?BP?N?b@?Z]@?(fT L;NOƀ Q*@PH@.`>TX'x(̀>6 @F ?H?QT-!1Q:`?7& >`?N?KT Al;7>9NHK?6F?C\ @?BQ?*XC+@?S~?_ԀAM\+8?NsР?S1\?ALP ?*z?N ?Q`I7L@SZvSP ?&?R CK`88]@.`?N*?`?S?%e`?G(4?PK@# lLr2^?l 5:?N4?b@?V@>,?@~]/@hPN?/Q+52 A EtE@%B?"?Aݠ?@0 MTg?:B`?Qv`?:u?:/?&5R;5 Z5ۑ?B--@H @?6`?B@?k*6 .*?*@}?239`?!2`?-!?[ ?'V?G"?WL~?L`GAK*?7?@RQu@9v2`?$?EO?)]?@?^å?V@`?)`?>U@!8՜@,n@6N@?Ơ+`>>s ? ??6ME ?F_ /EU)@1??@?,r ?S#?[Ǡ?G5@?23X`HVw@?@{ ?Pހ?~@?6 N`Ub@?,X ?P?Q?XM@?`4`?aG?Z?!lS4b O@-@AAH@?L?VU">s ?;/C@X.?<?a5`?[?B4?P?V|@7J Y@;?>@:XVV`L K WMF ?>SZ|@gYaQ",@&R?2.?=:?2\x?D? @Pr[V Q{`?-F?A?E?UW`?Pq&9Sh?A1?H@%@1Y`?3?0?7 @?SV?TRs?0xL YXQ ?A^@?YQ ?R'2:@Ll?D?`M?T"?>Zi?@b<<@\u^ O*@?Km@?R1?E?C`Y =@?Bc@?H?!FC?DC?QB ?B+?E9/<j?B4?S ܠ?3ހCyE8?4z^@cKQ8՜?=\f@?9?EK?SV@?9 @BOjUz`?Hk*?X ?됀?=}`LBR2`HF T B*?N?HUe?,̠?S`?^C?OUGJ L ?Dio?`d ?M}?O= ?IL&??HP`>ր`@PB ?L*@?R?=?I?WG ? 7>XET ?'ƩE@RAT@W̵U W?Lz4?B%ʢ`c6`ap@HwC`io?H~@?C?8s?9M@? ;`Py T@(@?F?6T ??@<`?[w?`&`?Pi?8I?A{|?,ҁ7`?7Wa`?Q "3X`NS'?10`?E# El^ bD_A`D)S@?E`?6؀\4 guF/?ad`?aᲠ?J@?^рPQRcdvV'?Uc`?aw`?YD?Y`?PT C@?/J??1j+@?=R?? >U$`B B$U /@>O?0N`B'MR?w@g`(N#!HL`@? r+(?'\8?<ҁCPRCS#rM2?G?0@?X?F?BP?2WH D#G!v 93?6ve?V@?,6- ?@Ze @@`V?@+]WSe8 Ѡ?, 8$`?+,/{U<?8 5???@4z^@A?FC?NIET̞# @?D?HɃ? G-Es@14I`;VFf?6ME ?SkD:dIZ`E*S2Z&\dn`OϠ_^VykVd* g@eA{`?[v?J`Ky`L;NRf`cjРVT?[?gv?ar@?cG!?a}?RP?R(u?Mh~JWj,K?B:@ M@ : ?="Z `TxW$Fve?H?U ?.E`9By`;*X ?]U$`? @?g`S2`,[Q<z?D4?G?G`?Shy`?T ?SO?% E 75&I<Qh"@/B?,ҁ?' Fg@Fi@?9U?Pf? STZ @6 @?2HQ`^r P"h <B"i 6s G X%^_EaXT?R+?a+b`` P 'QSs`D?aLP ?g^U?YS?Td ?R{?;``?K'@?P/EW SS ?F?YW`TX\TL?6`?A^@AIH?A``?a}M@?`?2WE!3,`6>d ?#m?(Q`?8|?"O `^N_T1UQ@Hw@r,v?FC.o`2DG?(?H=?@`0+83?;?E?A^u?;[`^?Ec?BF1s [ϧ@Ouu@?UX?\5 >k@P ``?P?=?;L?7K?HB ?H:@KX)`V+Q?P ?`W@\Wˀ@L C1@TV`d;x c4b Pg`?'^?RBw?Y ?P0v7 I ?$io?7`Rz V{>=b ?%!JF™K@Bŀ^?=2`?-YL;aXh`jl4?Bw@,AZMK/{?G?NO?=yn?E@?Tz?L;N3=tP@QM?$U ?cc ?g9q`?"`[?%W`?QĪ#.Fk?FǠ?O,*X5'1O:`?G?2@?4@?`u?ab@/a1`H?:>?Iw@?FP ?H ?H@?0TX1+->,4;?E?Ir ?M ?.P@!E294*`3P GM`E*6#ĀDr@@!3ߊ`YbB?GFr ?4 ?B?Y1@?W/ ?C^@>&@4s@6?BDGmV3X4!?M?O ?;<`?L'?Dp?J?B@8~@:#u@? `?T`?[&``Td@p?@eH?* Q(`^`Z@NCn`?(p`?R ?P@?DM?3|Z?,2?H?>L"G?:65נZx! U `A@?O\?Q@>`R _.`^A % ?QڜjTEM܀?Y?D?1A *A?@@?X'?P@!^u0#?@?P= ?Wm?c@?cr`?;Nr?+`?UO`\<@YNA G0`?,6?M`A@?<:?J`?O(`?Zi?HPހP@7H݀K7D@N?D ?L>Z|@K!xP:`?@?@?:?B'? R+Jhg?G?X?Q%`?C=?P<?W@?HV&B[CF]?'HJ#Wfe@N ?Ckk`2@>ր?L?N A@R9?5Q?1@F|qa\e"@af?:@?;+& ?O`?; Z|@![ #3@?54 ?I@?IE?B@@?'2n 5h@?41?L?) `C`?3ڳ?XY?W\8?V'+?T?8>~@?:p@?@?DNҠ??9??"U6Uc%@ZES3@?J5 ?O?+Oor@'& G[`5@?@?#P = =O 9`0=C/`X U>R`+#@,P`E ? 3?U?`H@@?]~D?T0?Py=`?B$9 W@?@)%@ZoX  & ?C=?X1 ?c@?WH݀;@C? ŀ? Q9_)?))?[qN -RK?O?E ?'D?Ծ?!ͽ@&?D"`?ZpD`?J, Uk\ P?QE?D?-?Rh?]?MY?q@&F`;`?,`8\<@?>U@0V U:``?Q}?"wDׁU$`?1\ Ak@P,E@ l?:(K#\2<@arXq9_D10R?:?I ?Pv?R)"?2u#?6P = JR\ &]vK8`K?ykRWPg>?$9?E؀?Sf?@]=JU<)0+?a<`?U.8?(?A `?Y@?U?I ?B(`?40?)+W@?!̤?*b?P6j`?\`?M{M@]\YS`E`CUWO/ۀTyo@Mߠ?&ڀ`?D.@L;I E$0?3B>y >?CWM$0.?%H ?EE?E`??" ?=?D?UA@?[u?\ NO?O}?;%@UQ̠D +?T)a@?R?A?S=?U?7`&r ?,J ?J] ?O?Eᮠ?;5`?Og`?]&9Ts ?H?2@gXT`?@ ?C!j@N`Q|Da:?A`u@?H0[79@Nm!1??@?F#5QUƢ5߄?R:`?Ka' ZK[Us?`]@?TO'3X٩OTLaXZ@8CԠ?r~@>l@?Ms:@?To+P ZYk+M *j`?F3Iq@v?Ga?3-P@n!@HS']`P}@%;-vy E 9t03_u ?P/?[3( ?Wץ?G 0` ?C7 ?KÔ?Pֆ?Z;k@?W?? = A5/`P,6H`?I?M"@>_u 9@?5]?TJ` ?L03 )`?G?3 @Ch=O`9Gw͵?S5m?Q L`Tjݣ?Bm?!v@7?4 ?;%@?3t ?4%`?EKO?N?%҉`?6+??.=`MA?B"+b7`Rà??W ?V.}?QR?G8D`R1B'Hk۠BD6$@>@?C;- [?_`YyG/ >$KsV!?4C 6#?8??[ž`?^2+`?F L I`?Oˣ?Q`:s 7r6 6?J-?\Ġ?[6@?HA<'Pʠ = J)Q @F( ?PM?" (6`5 :3P@Vf1o8_@Z&`Z@V ߀YBIβ ?1/3TBMӂ?E"?b@?QXJQQڀG@FFJ@[ @1v@?P8 ?Y?%I@?71?X?OA?1xB ?Kž`?QI`?1p?3K ?@i>.b Hc4Q`C"@N@G/ ?;j?R$`?S?U?AB8i2 J$)R ?5`?WP?S?SЫ?Q&@?Se`?\?SvV?E"?W X?QF~%@?A?YW`?Cc,?L"?`Jn?TQ!TD E0.T`?2EJ:Ys`=M] ?@Jn? ʀ/_u M<`_^E@߸?J@?V?5 { 0?Jǃ?DKLAe?A^ ?,CMk ?X ?Q; I`L 4`7(d~@?UX?`?Z3ؠ?L, ?B?P`?Y?Yd`?TIՠ?Sw ?[h@?_ ?I@H/G5QiKE`?SuAE 'w`?D?5yӠNK?k?S5@?KNK^L _9XoG@1`Co^v f3\Pr?P?3 U@OI)e ?,)EF`H1b?#?T ?Z~~?5 ٟ`?V ?aҗ ?U@?+ž`?:a?PF@?+U<G/@E'B8Ҡ!暠?2`Ow`^3HD6nQE>&"`?.ì?(y?Th?XT?D ?%fZGغO @?Q@?c'?Xm{?<?49`?Nb@?P[ ??\b?UB`>r?Gr`?Vr ?>=x8W?<?C,S1`u@?9`?3=kX*h`S?S3?bk ?A (`<{}*`@`?S$?_S?`@'?\@?X?ZT@?EfZJ@@?`;F-?P@?ZVw?SUW?,j;!Nd?>?;A9@@Y ?;) ?S|@?AC?*U?GD?_a?\+o`?GM?4׍?P"?\*Z?O8hGb`M\LY9?5?h*C;`N0K?IF?]?U)?0>@9 ?L?YGw?6RXGGd? 5@?Px?^@?P@`?@X~@?:Q? ?A& ?Q`?N=`?W?c?b]?M3fFu@P0`>?#Z`Jq`M{%?@?3XTMW?=x?Ol?C y B`TU0p?L@?T&?U/?6Q>Ŏ?X`?]T?'#M5`HZ?;?3h 9V?<?_`?KI?X`$AP; Tka/ƠU@?*2`?+w@?'ƀ?D7`\ [@?" ?e?gr ?%O?4?Ic?Pk?]@?[E@?TD`?\Ԡ?a ?\,`?BcJc@L`͵?+2?PY ?c͠?`@?B?P`?:\j ?X?ZK?MZ?M`?7(@QQڀA6D`?R À?2j@R@.[?Eo=J?!5/`?M=#?M >`F K' Q RKH $?J<%DUqD`?;f?P?T?V-h?W?EǷ?<@?dr!?l ?V[c %?/?8``?.qt?4k_?6-h?P` ?_?[?Q `?1Bx ;?Bn?WJ?b?c<?Yd`?=FG_R0`?; Aڴ@Q@6c@?8$A U HR?RN ?PO֠? ^ ?>2?#0P*NW~ ?GD@?Tm?Bȴ?j L:2?)'`?%C8?XZO?8`%: @?, JY+`c _`b?\^`?]z`@uX2` b7`?3g+찀?)EM?(6`?D ?RK?PjW?=Lo ZR#@Dt?/p@?)?=S?`?[` `?:Bs?>|F@?Yd"?#P@?8 ?GB M<`?M!`?Z~~?Ry@"ǟMME`?!F?Tm?Y}?-?P[ ?e '?'$?1>G?'@?Z _?f[?U-`m!?\W?h?Rot+?8y?3›@?6_,`?S?I-@?-i}$@gIcDU?6?U@?V?Il@?0?7 ?, *`?+w@?D8YS>?`>?1?NF B?P`W 'r`?9>>r?2?G`?LC<@?ey?)} ?U?Pb`?>f?K} ?@F? >?6l'? ?4?Q?8&aV@?N ?X `?PГ`???,r?N?S>,8@J׾ ?I1?A `RVj@Nk`? T`?PWi@?%>H4\#]\@SF2`Ini!q`?"? 1 ?-O`E@XZA(> QAR (dB[@?Q5/`?>Ql %: ?U߄?M?ODi`?RI@F R?J>?Qߒ?"U ?:(|?B?B<?O?=&k C}=o?I ?aX?a?7?r _u ? ?% { ,:Mz@?[5 ?jv?^V,n ?4BC?V"`?Eo@?1/?D?(9 ?8u ?Y{?PA͸I@JɀQ A>6i?=?H ~`?#+&I} @ ?@^?Jx@?'`S`?=A`?1L`I?Gy?QL?EKO?Yn?^2:[kNA0?(u ?LI?PS`?S:?Q -8`!K?SE?S{?C U@?.JDoP6j`LSZL0WF`?!B?0x3t ?Em@?Pf 8P!`?"`?[?Y`"W @k@?P@?VO`?Cu?-9 '|P ?My?Gm-\`?2?:!P@W@J`*D`?;w@?A?&? ? Au`Q`w)?Adn!@?B`?^"@?Q`=t9-8L| QFA? @>Ĭ?:;?5{@T%V>-@?/u?NwHa ??H#ܒJB#>@?c`!iD 3r@?-@?;We?K< Pn?8n`?Y@?Q[?,S>@;]?D@?R`?K$`?J?U?P@?=%?DA.?~p E@?2ǟ?M@# @0"f?Fy@?0@D5?2^`?@ ?"ug=`??Nh@?D_x?Ev?Z%=?P?@?ZB?hp?W0%{`?5Q?C@?7` ?BV@?PǠO& 1 ?PF@?R?4`%C`:ހ%'`%ӀSf`Q ?:?e Q@$ ?BR`a@H/?H ?N,?5 "ǟqD`?|?80[?I?Cch?$M?)M5q, K)`?5o@?U?G֑?7 ??=@??g`?QPŀ?X6N?Q?@o6 ?->7?X7 Eah N S?Kx@?5C`J[A8`bN\Ř`E(G3^?D`?P̀??kM[x@UO0A?R(?TC 8F + ?CE?T7q?S`?8,x?7?Ti5 ?El`5J:?Ab?SG( `E ???@ $8L A???0 `?E`?E~'?= ?EŎ?؟ W`?F [$``T U Lh?AB*?NV&ZGQ[`P<P#>@?b$D?g?R`=o߄?S.e?T Ac YO M??A0۠Q`?F"`3h Q͸@@9Z;da@A|[ꆠU9?Tg?_?HT? sKU<ZAWYβ W.W?0\?P6j`?/ۀZ>Do?T? ?U< IژXq?1u`?Ij E8HO?+o2)DN?Hi?bL ?^b?M_@?P?^?^Y?1ҀL, ?B?e^=?bO`?RX?Iu?2LK? s?LV@?T`?O% ?G%%KRqT0H&6$@ k?9`?BLKB`QZ 5 ZfS[@eڀ?B2U?Q?<$?=?U`?S`:eQ@XVϮ+L`?"={M?@ ?>8`>'`?M@?X)?2aF m?3\@?U?E@?'~@?Q?Ti5 ?@?5@?@'Ϡ?L!?Z@?V0Ĭ\d; ]Uz@b\1b`?4׍K[Jb?:X`?/]?:3N@?_WX?b|@?T^ ?L5`?;=o >?N@?NKBSQ"@KQ3q`3+; ?<*J"@L>Q$jB`٠?!SyOv-P6@?[=@?h/F?Xb1`gh b @R`#R?LRa?H 49`T@W!1!?Em@?$?6M ?W`?>]Z;[ki`Ao05(?C@?Q@`?%H G@?S?Yg@?A#G9ژ?N?S΁?K?OB??H >@6@#4?@i`?Np`?< `16饠((5PE@h;;E@V&Wn_@=mѠZDO\6@4$ ?D?/Y@Qh@?Q ?GBC ? k@?<RI@\AG@?@pK ?@> ??G˿?6v?"'?&-h58N@F#?=c ?SE?Sm?P?B?HW?\j?[ ?$tTMV`]}@Y]@AW'FL@K *.`?AC??3&? ?N?Az@'??wA?E<)?.J?F?A`u@4`>l@ 찀Ms:@;a`C=aV@?!9@?J @Fݿ ?@A 8R@?V.?b`?N G X_u`K? 찀?? @?Ed?C(?K}?;da@PD@P?9?Pn!@?S@?T&"`X V m!?VW?^?S4?<ۖ$@D@?$ ?G?2%YI`P/?1/?2C ?9Z?3{4>UT U@Q`,`h1^K`?>֠?Q?@xCW\B[)kBA|@F9O@?%v>G;We?1Kڀ`@:?8`?2)`&r?G1 ?@ ?^`?UW5`?Wɕ?C^?D%Q`E҉`?MI `?X6@?86`'iM`:@"U ?N @?HiLZGW ?:) ?JhP?OU?Qc ?Eq, ?C"@?T?PPa ?"Nu6B3iGץQV4qP.M`3ܒ;?7?>A?`O" F=DE+]?9?H2`?R[?;da@F`?B?@pK = ?g`3`O{N#R?H @?L: E Q@V&`%`>č@)?Nv݀?Qi` .IB@@r?1?J?ELc?9$ ?4~?%U ?Fl'?Ek D K݋@?-T?Eo@?Dٷ?@ݎ?'>?63?L@?Z ?g`?eg?@D@3`?JY+`?Nj Z?/V̀=9 Qg`D>@?1; ?+Y2 H1J@C0@?0b`?OeڀHu@?Af?X_j?M ?aV@ImU@?LӠ?F== @?7?A?UԳ@?Y`?3+&Xu Mf?I@?M`?2c0?,2`.z`4#4/A*D,2'?Y@?9`?U?`?c(?dg?Ls] t`YW`?Ian?S(r`?/'3?B2U?A4P}@V" ?11 w)?Y@P7V?>=`?R9@?Yj??A(4?7r`?N@?>qt?9 ?=/?I@?Vm<?>BU ?%?D6\>;@#{VO|]5QH~?#?OQd?G?9?K@?D?PBP?VgIM#,@bo ?Xވ?R @?QC`?Gs >!fR {`K?-,?R?JMD? T>_u ?;P*Q?2?B$*v )/?=R>J?F '`a!q `,z?P?a ?fID@?9e`C ?X ~`?X" ]???;ž`18YS^@Q?T ?a?SY-hA ? = 2?<?M@?+\?4t?V#`?Qk?5?!`u@>dy10۠?LW@?R6?M t`>p`XؔV@>E{`@d?6V?CFP ZAM;P C+?> ?Pm?VU` T_QdP@?CoN`?Ĭ>HX?JX`?JɭS U'@?;?%H-&=ߠ?5`?@?z?- (- I*-@I9gMd`:W?f@>GHR0M?R?0KZ] t`R KrqK Q#Z`?NF`?/}13?E5?S ?V`?H Y`)_u 9Ks?>p`?Z`?G`@ĬGO?*x@?KW?)y;`&?A_``?Qr`?I?1?$GCI?d?Q,č@> ?Vb?_?`CՀ?@*?7ƀ?@@?S@ 7bϠ?\d?V`J 2@QQ0Q Ot #G0`6?KB?T_x?;L`?!暠?@H?6V9ICL > 91?A4@?V!`?E3 >O& An@1E@U^HN7d\pa;@JW034?1?5rNuZC`NKpGP6@LO}?U?Pc?7?Q?MFL ?E=>?B`T P?On@?FHt?A*$L`'i @ >@pc`A|0u Gs XvM0'0TQ"@_CTX@H~?X̠'1?TPAeS `F?&X?C9?FP ?U?X?ڀ`F ?/A?Ap?'(d4qܠN3$g @?G J^0E@?H?%Y_@>?4| ?*@6r@PKw@?1l ?S\_?PpK ?50?\ 1?Dx?Z%?Ui?%fZ?H_@?[:?O" ?F.?Q3`Pn!@?19@?3+`? ?Rހ?=R R#QM@&?N?N_&G~@TCXRK@?0 ?S?F[ 7$W&:a~5@\gz6r?0}F"??<`?0`Vx eu Tn`?*oI=@Vܪ@1ٟ`?G ?B .D{F+?M&k Bl 3GbϠ?I!?) ?Cq`?_T?Wb`?L ?Ut`?Iw3?`?N1?8RYA@R ?Fof?A@C7 Aw- D} Q@LrCch??I`Y;J_2`QR`?>O?*g;TT ?(`č@Y`N<?CM-zTt QQj=&k ?UR?c?d?]%?3}^* \ ?< $>zFF 0 ?B?T?PֆD)QN ?;< ?AyWC@(?K?Ai1=EoEsV ?C ?G`1i?8WM?"?1`?K?I,l ?8ҡ@~[`8ˀ?) ?R4~?Yu?0X~@3-P?R?W `?0ޣ2R`DE[ /8'?8s?S?>h@M]`bR?EH ?@'Ϡ* @>ŢIU d w@c QK ;Џ@ ?&?;ҹ?.=`?;0p@PQv >@?Ey.ì4W?D@?R?I1,jM@M~ 5Q?M?KD+Vl?[>@?ZK?\ ?_Di`?" J4c s`?%L?U'?T| ?]` ?U@?(6`35@Z= VJ$)JPLxD}`?4+?L`AF_MP{?F?KxB@M @?K?Q_RW WiM`?35@?KO@?<7`]5`Y`?AF~?[}C?XC@?RFX?B?D@?Ss?H& ?`V^G5_?!WAIp? ?7@?4=@LlX@Y.`D?B?Q| ?DV?<@?TxZ`?X`?* S$RR>?Z?<؆+ `?64KQQPY ?AY?UL.@^B?"`? 0 @?3?2G@L5@\UƢ9W`@F H\`?S,?`݀N?9]?G|%vN`U+eJ@Iy -9 4`???N?@?N ?TU?U?[/^?c?\q?B`٠?Gw]?M`@?HE?aM?kS ?]ir>h@h@KJey?=?0ۀ?4ʒ@?5?[@?` Md o@?PN7@V8@e XDls7B[@(- ?<?,@``?\ғ?f{?0@`X/A*?GW ?O`?P?G|`?Qq:?K@AxB -O?U?PA`u@M5?F+??`?AK@XS(DL+o`5?@o6 ?J ??'3F{]hh^fSrA&@C6t`?U`g`?`??;$0&?F^?'YV@[' ?!Sy?Vf?D]NG ?lp?Nb@?V?K?Kg?Qư?TN?WA?@@C ?"9@?S@?U-?`+?b?G40VT`L'Q X??" ?@0w@?HY`?N[?QC??Q$@?+xG`6?Gl ?G>`?4ʒ@9)-@Mt[IYGw3H @X0[?7iM`?Tʒ@L}`ZnC?ٟ`?A SE O@ۖ$?(qD`?: @?>`?T`?Q ?bpΠ?GYR]`?4`?U#0Z`N@?-o?B4?A?G]?R~?P%@]O`STN)`@Cð@. ?Mc ?I?@"f?39@?B ?^K?2 P= ?+ ?N5?BN ?FJ`?T*v ?[` ?O@#L ?E?_u?Tޕ)K8`?)RI@?Y ?LW?HҀ?D)a@G1 B3i?; ?Hވ?7@P@b^eB`?o@,J 6ܪ@?5?77EJ:;݋@?QrN?L0STBZT׀?Br(?^ݣ?F6`7;݀?Ak?X:?Q?< ?Ini?PX?@3?$;`0R`S97*乀?JL0?Zs?P}F>k?'`?VM O& V>0?Kh?/FCG?@,?T?NL?BoH;I!?Ie ?I/?+` @MlMj?A@?916?RN ?[` 8?E{`? C<@P)o =}?D`61@1@?)"6(n`?\H ?b?Ex?6}v?X8?RG@4=լ?=mѠ?E`?#Ţ8Ŧ@?@b`?F`?HYw?K+X ?I/?[^n?8 `HU#?#&?~p ځ2`%U ?A`3U`a`Z?>u?Wg??Q?]8?Sk`?aV@?$@?< ?;S@?60p`<@?Dp?S?6 @@9|` 8@N?`?R?R`?Ca ?F396c`[|?N(?Q JaX= ?H7 ?Pu ?Sl?[5 ?S 2=&`TƠSN?=?X?Y@?S?Q5 ?~p PN7@;0s?J] ?TO?JY+`9WP4| M V( ?%?T3?;< ?8`?M?MF?@V?RЀ?VO`?F%@|0= ?PH?e^?Z (ib?KH@?HM ?&#?8E?PA?Bi@?$?S?Zp ?aV@U f V\xL&4 Ѩ@ ??6g?B?>?;)@?߄>)?.7 o@?Y@?KG+\Ӡ^E]EŎE?h@?E?ZG?Q,TD`YF`?O?dK@?Q=9an?H&?_?BQYm M_u ?2 #3@@s ?Jg;?V#?S?A Bg*k?2Nu?Ncd?[@?Z^?T͠?Uv?P3WMM Ku`?.b@?Wc?`7?X\`?A?$?6@?Gi ?PHD8sn@bYP`?Y&?Vk@0?> ?T}8?W ?U Q@?L?A?E$\?0 ?#܀?Y`?a!`?Em`>F ?C?G{`?6#"ԛ2&?CH\@?SOd?= ?qD`?6_,`4U:N`?R[p?RU}?(4`o@1#@?>qt?K?PZ ?[!@?Z?B 95@?;b7`?TDl?W6t?VL@?RQ`?<N?Z>_u ;a`"ug?P $?Sw ?>? @?,]3>V bwJhP?V[ ?e ?gW?[`.W`U5ENNT?CX?b`?Zn@?T8?[B?M'?;ՠ?O?K@?2+@*7H?=f?H*?,:?P_`?]X.?H`?@n ?_?c?Z?&πQ͸s?` ?``?R&n?J ?-?':?O@? ]?9p?Ŏ>@ ?7?I?US?QF?1kF'`?5o@?VȀ?W?1FK`Ui[8`TwHߜJ?4QߒNdy?6?Ik+O]Y@6V1!`:o@?B?Bn)l@?G?A?@t???5-vy <:?%Lc?(dE`J)M@XA?CS 9Ts M(Ra`?FE5?hPMH`CS F'/ˣ?E[ ?D??Ki?^?LH QZF<% ?T2?Pa@?0?8sn@?G]?Pۀ?G KE\kPjWE=>W\B ?93NT`a_=&k ?U@?X ~`?^3@`?^ ?`\4aeYŠJo ͵?X?`ڕ ?R@?]D+ ?g@?X@?/?6P O֠>`V,S`ML`-?;Jj?L @?@?K?_W?]?SF`?DIՠ= (?\n?]K3@?@wb`7Z(&:?5C`.[?7 EH /g ?2@?93#›@0M9x@5ŎQSMk?9,Yg@cܒc@N_?C)@?&e 7i@ A>?C:L?:QP)]m\kPM'>= #M?Gp?I͝@? =FSW@ ?L7U?4@ QAGE ?"=?>|F@?@#@ĬXI Q!`CbSSWn+1?Q??g w?YTs ?_L 9e ?LkC@?P7`?/h^ ?5)Š?J`?M(?UfZ?TT?77?Rɀ?e/s?[?Fof?>pBn '`?XB2UkaK?'i ?[?;J?S <?9an+\?2l ?3l?3:L?MX?AwD`P`IL2 Fx ?2ug98RL{@?&C?R2@?8iEa5yӠ?/. :N`?DE@?V?T0?A33^?0/@?T?M ?@?AV>v?2=&`?J[U@?,a?F ?Zf ?DS @?-K3@$k_>5`?@> j?1>|,`MԗR;?6?Mud@E^\/WGt?R?I[(l53@0?@U?`?8?,{}>z`/}?5`?EǷ?6>X.?6e ?!Tn`R9] ?Dc`?CGG`!B@?>u+YCd|?hC@<1 $A (d?0v?DC ?A#?AT?J?U`?S*`?P4?\?T4NVە@?(d?S?T`?SQ?X@?Y7 ?G?Ini?S(?$ 9@?YP?`K=?]`?[d?2c ??r ?f`?Y``XYw?P?Jf&G XD@?E ?VK`???$;`?4L`?!B*'`BˠTߪRP ?DxT +?BlHc4Zg ?Y`?Kҹ;. ?:7 ?[$?J|ޠ;@7bϠ4@ @ @8Fd 1mp?=լ[pGC ?`??/8@`?X?L7@*3N@??A*?7?EW5`?B`;Џ?n!@?I+W@?9>@?F]?G?j?O`?Yβ ?35yӠ?6@?P}@?V`?J0̀5U ?4Z@?@G/ ?/p@?7H?P@?U_?P =?Ju?N! ?Js?8 `?;찀 c@e?5J:?S,0&@zQZ? J?EJ^ E4 ?+o2?@>O& ! ??J ?A篠?(- ?Aڴ@?> ?%5&F3`?=?2+CS ?F?N93?ՠ?H$u ?a .?F@I2 ?D`?_g?b7x?g?`|?SK ?d ?d<?.`Ĭ?U?I`3l?2?R {`?Ra?EfZK6,3@ɠHŦ@R|[ 6R@?D&"`?T ?L0?LJ Q d`S@?E`?$L`SU`9P`?T5G?HM?6Y I$ T˧@W9GʪP V(?AB*3 @HuȠ?$Ie`CVl4 4@6-hQq:Y_D^:OR ?Hh?@Wi@B?P`?&ڀ`?>*R0+b+S! ?ݣ71]?LYp? f@@4l@HeGV?:?Eᮠ?!T>X.?@=?@[ ?R=?L@?FT?ECJ ^w@Og ?UsV?_ @?1~?Wqj`?6R1`^Db`?KF-hUi;?;?G@E Q@Sh ?G7?PѨ@0b`9@S_ @An{`B ?9@?T ?N`?SOd?`o?c?`@?R?O/`?Vn?^ ?Y C`?-@? ?Wa0@?SZ`6 ?A?Z*?\o ?`̀?_E~`?#EVTIM,:?*;b7`J>/J`YvD]?DH?+xLNVנX=;o2?EAOV̀?W-@=ONA?Dv`?4H``Jɀ?;. ?M%V ?K Հ?RR?C@p@?8)?`=GY?P?)٠DwE`??75h*^ ?X?dDl?Y1?Lٛ?L:?0?#4?B&n?30@?%LcKRCT Ce7   GM~ 9@?*H ; ?g`6SsW 5@BgL/@W]Xi`u@?Z ?Xވ4`6 ʀ?S ?M<E?/8?QF~*8 ?I@?Z ?U@@@Nϓ ?J׾ ?Bɀ>0?=f?" Jc?Jjz?aP?U?J?4??p@?@ ??l?P?Q(?R ?Y ?\-?O;?) NW}PI;@7ƀC΀?U ?T ?S?9$ـ?1i?8:`XL`[GK3?#@<P@'pc`?.A JH SM&w?I@?D;`>a`'~@@``?1=RAz@H2`?a&STyB=&`?&{M?Ag@?C?"ԛ?1=?V[c ?]~@?\ ?`H΀?R5 `61 $>ĬQg`RJ+UC1RmJC4@Ft`/4/@?O??^)?[~W?B[p>WM?(@BS@UB,@?>w?B ?'03<?Dg @?L$?/`8WMBLKC$;S9e KrqH6@7WK@b2`P29 G36F@`?L-`?GL,T`EQ̠:@?0?9X?'m ?@T?,]A)-?6V?I:|?S@??& ?1b ?N[`4@VA*@I4URӆ?C!j@?b^%@?Y&@?3:ހB2@7`9Fe ;6?C ?IniKN@^,8@ST Q\ [\QLY;TcA#_ ?Kj?(@Q)5j`?]V@?_I?$DlJH "`?CE|.I,l ?>*`?X˙`?C5@Fs`SQưDo20+?A?RI@?13$@!=S, HF?R"@Y'`2 TwD`5uh%Ӏ>?G?GV?]?F߀9 UoA6D`?EI% ?"ǟG@S)@WT`J= :(|3\@?J?U`?@?522UP@PeyKjE@?A$@?Vu@?I`?6v@?D{ ?H/?P?PM"@2 S:?(n`+Y2G'z?*?H?-F߀FE5 ?B`?D ?Ln ??b`?)6?G C? \J^ $5@?A?7i ?D&"`?Q @?>=`NVVLJW@@?:2?@!`?Bo?E"H|W 7CV|b0 ?F1@>|@%??L?D8[R;Q?uȠ?FLEPpK ?9?G= ?x:|ޠSL ?P?[8?3A?N?g@?e??Sr?K-4?T<@?R > N3}^?@+> @ F`V&a \? ?Q?v`?sπ?B@ l@< 8a.'@aˀM;=t .I9 0 9`U&\ZyS ?2ug?WS?K?  0$B`EZI.->7?UD`?Pj`Lx>I@P@YFbyS SD_x4K+ J@FSch;}?P`?D% `+ > "[pLcK?Cq`?ai?\@?=}:@HR`?6?Xƻ ?>'1 ?QYm ?_b?cx?_~4.?A@h]gW(d?,r?B`6L?찀?V/?Y؀?R#d'7`L̠?Q@?@"f9>@?@ݎ?R|F 5`G;݀GȀ?!ٟ`?W]`?^w@?P?@ ?>j 0E@T^S@?G@?PiBAw:?DL`+H@?O`?S=bc/5@V[?P6j`?QE1GoU,z7?` @W@V2@$Zb?#4?Iz?>D&`'`?Py?]vy ?0pK R?$^c?NQ`>?7r?T6\?N Q?F4?B >Ĭ5`9L: NM@%wAu`VTuZz*@`1`'m ?V7?@Y@7D@BOCTP9KlR`?U3 ?Z)@?RJ!?B?P`AQP ?XI=@?9e`VC GZ(?RE?iA?h2@ +.IL?_?c3C?E2m@?LV?^`?Z1@?On`?D?H?J@I?@@?$ ;ꆠBG@>e ?O @?J\`+j@(?@3?X!?Q@2`2?39?ZS8 ?dN ?PIZTM ?PΠ?c?4RT@?Ed0?a ?= RC?F ?W% ?P:@?1u`?4Z?K`?R?J`?BG?&iN\y ^2X! @?J?%@``G >?.z`#0@>ܫ ?GqI b:rIV] \n]@`SOM3\@AT?$t?OE~`?Un@?PH `PV?J?8.1Z݀Y y ?[}C?X`PV @ ?I?M?`??_u ?B_?Ag`?K?<$?9?QD?JР???)RI@?= ?V?WН0$W"@DV?I|z@?W|`?U?B AzPK?H&?d-*?LdŠ?[2 ?[28Q?v`?Kx?d?T!D ES<?S=`?K(J9N@<[ ?( ?:X`6'[k\kD&"`2A0۠: DMT P@?Cl?U|#` VeBK6?C?9v?B+@?N8> BnT`?CK ?X@?Y 4\9X>Q`?HL| ?D\;2H ?C0@?UrA?@f>'`!?6& ?]8 ?Tb`POn@?% >d?!?5Hь[+ X. Gn ?8?G,@?$;`?P%@?`J ?]fH@B)`[Q@A;@Pq?o?Mv>"?, `?8 `?4cKQ=?K Հ?S@>;%Ӏ?<]A @VTZK, ?>@ʒ@?GAF@?Y*?<8j? ?E?&1?D% `?_ `?MKF%7`?S!j@?PU@dd@Y2D +'Ȁ?,?3L @ v?OR`?Y:@V̀?FȀ?O??BY?>?N"{?T?_?`:@?N`?AkF?H=?* @2~@=@OQ/<@5!?7|? R`TS?(R?O "qTIK R8ҠP Q: -@?E҉`l Q tH2`3^IT=`G{`R`6r/?Kg?U<`?V'u?U`?8?4L`?E*ڀ?[ט?Rl A"@G?M<?NEI[R|@A?9} ?]Gj?RyGȀ$@?E@<)EA ?>jXW׾ ?Pm?F$@/`?/E~`?JF\a5E@?-@ `?:ie?V~?PE?V ~?YC$?@b:@< `M<D<@=7@>9?Tr?U%@?A?I,l ?K)@?%04WF ?E`? w)I&?M3`?aٟ`?F`?1kF?L??;ž`?Uّ0O֠V &dyJz?F߀?)xW \ƭ@J乀=k, @)RI@=M] ?0F@?TD@?Q-"Q'?= ?K?OV̀?`m@?b?F? ?@\?]Uz@?\F?Ty?R^?=c ?FP ?ZT@?R.?Ŏ?^`?B?O:?CZK?A?7F>4c?=7,@UoRY@ ? ?*8hODi`L,`1b @1`?AM?[y?LY ATGGD)?S ?`M?MtO@I HYw? T0`$`=9 ?O毀?.@@@ ?9P`?UT 4@? a%?EJ:?P?gKda@.I?O?UN?V?[ح?aX`?KJjI5?+`?QDT>`?uȠ?V_,`?c^@?RF#@J0^RA`^`M1<8[?3 ?_N`?W@-]`?"c?P'Ϡ?EE@?*?$.?Gm?Mi?C97@HDTN)`F~?S?DL]G?Ye`?RXV^ N@O;T=dW``?V`?X2?R ?I|z@?"?]?*GiM`Xf@K ?54 ?Q?V?Y?a#?Xg`?1^K`?5Ӏ? 8RQ`5؀?M6@?$>< +w@??Wz?c ?TU?Fv?Yŀ ?S]?4M?Ol?U?A ?D.?JN`?%sV?@dd?Qk@5`Y>L"MmѠ?W8@?Qҗ ;YF Ff.`?-`?#Z`?S ?WkH7 W >?1Sy?R?fW?X}`6p{?F7?Vd C>?@?<Ga?+?Dh ?E3 ?4_ :`Fw[@c#NY1MDM,?PG/ ?E: L @?Jo@?.h@,%?E?C`) ?(#>y RQ\]So0?X?`ݎ?Q??^,?aW@0{Kޠ@?CVl?C" ?8M?1 BE(?6M NϠUT?>%?WZ?E,@?dy?C1`?K?]M؀C?Oc?Z&?2PC?D ?Y?P?;?B9 ?EÀEQ`?i8YAV[c ?C@?\_ ?U??p?Cx`?V ?C$L.Iu?.<?? ?k_?'d?Q @?HDPMWA暠 ?:@?VR[@?F萠@<]R`@ ?-`@Q[e޵_R  ?3@"~@?1??`J|ޠXe`7D ?5=>>2`ì?+w@CDQ 2c ?S0?TZ@[e^_`FCNg@U Oc0T*?NxAEi?N;]?S?A@?CS HSY`Y@Ft`?NB ?I`O @LO"B`^/w?3?TVF?I`@Tt?'|?T5 2dZ2F.}?M?D HB*`??`>ځ2`NDA ?B`?I#lC?5?N<?7??I ?[?TL?<7?N|F@?T>y?< ?B?Uu?M>q`0t?6?R?-F߀ZZie6 ?O?L?C?H`?4RZ/Nb@?R=&`?Q Q`]m?S(?`>7 JXcidaF?V`?Q?'`?J`?A9@YT`?CN?@?C|I?;!NP8`YB``W?"+@?X?`Np_?r??`?x?8ҡ?D?7O& E`Q@A?#Z?> ?H1p?Lt@?:`P`>S;?[p?%*8 D42B=&`? = ?0ۀ?O@ALt?:#N ?$Z?L5@zlB$D??B`y PRhTZ@^\dH@?;]?@&R XKg@?Ag?Y?G?+j?C?U@?Ps=<=3f?A?\R>z` ՠ? *!???Hy?S`G>@?<`?TU?SD?H@?W?`?V?T- ?Rl @F*x@?" ?<'$@Z`Z #@ɠ?=5`;YBZ\OR@X~ ZY@N%?NY?] J? `S#`?Q?!b?R`I=@Rn_R}.?Vvn?Q`?| ?P(Z ?N Qu`?A*?VK`?>u+) ?F7'`]FU]@@WsK[?N`?^@?Q?F?Rl ?AeNT?@U?>A?34 TXX[?RѠ?Pw8D9 ?0@? ?4U?DJ ?H?L9?,eڀ=3`? :3?@E@?=E?PV?L "ǟNa@bҶ`F ?M/U 0/@Qc)9ni?Bz`5_;찀?Di5 YC?Em@?VX?U[?Rà?=&k ?Hi?UT?6 m5?A؟ Ry@C?D?Gr`8K\Π%?7@?8!6@?x@>@?M2Q?V8:`?H @?L?`?Q7Y@?%?+H@?Ego/P?4/@?"K;f G@?,@PdUKOVԍ Z Ti5 Og`\`g@/@?C.e=WG?Di5 @@?+ՠ?D?%Y_@?4L`?<?H ?=\`;F?I`?Y?@X~@?L ?Yo~?8n`?1(4?N,D@aۄU@??Ki?PPa ?J?M?S}?M{,PgR7?1`L`J\j ?`@?LH?Q8n@?1@QSyN'`?I`?]`?XZ?Mv?O?Qc ?-F ?Q?P@?F=?]@?R @D@\`@Q ?Np`?L, QqWHMD ?B`?dt@?`J?>?M: ?PA;E"3H#?%bp@?? ?R-I`JN`#`? ?:S?'D?HZ?V?6_O& ?Pk?DآCJ,K?+S >P ?=?7ץ$.:\`4G?;C?G:? '`?(E?F?=?QZ?VH`<<QE?/?(1*.`?H?I:| `0!`J&R]3T`6XLhW5IDBZ q ]M;@Mo? ey? 1 UrˀH`?G,?K찀?ImU?@@??G"?P3?D-?TF @?P?[!`?O& ?Vf?@HJR@?jF?#0@?,a3܀@?6ͅ?Rs=?PiB?G?E<@?G ?Pp@?J(dIRS@N}[@=`@;)`?1U?O:0UR?p@?T w@?@?)V?K?=A`G,{}?V;y ?P-X?91?[$?Ya?FZؠ?1k?Lh?Xe`?>93Ian?lp<{}U[ I)-@?F?> ?MmѠ?QXBWQ IP>d?S?dTFY;`[ԀE{`?5 89?=J?)@?>HX?[(V?Z*`?IX?@/p@?+W?F] ?F`?I;`?AB?H>?4 ?J?JR#>@A 1=)s`?Ad?L8jC>Q8n@O& &:d@,?Q?T?L~`?Y?PB`PRC? z? ,x X.F@\h`Q@W˿Qm ?4U?%^p[Y@?/?Eb?2s=?L{}?]l2 ?[2?1B*:?Bӆ?0vWƀQo`?L@?W:?LsugT_Y AG? K@? `?Bկ?U4 ?R,a?L)?U߄?U]`] JI'`L`G?Cl?3QC` P@'9t?Q?((Q@,@?U ?J>3@?,$?GS`?R-v?S7 ?Np`?Nn6?BހCH\@G~@?<??)]@\B`;?v?C~s?V@?O`0`?@$0cO T$/[!`0̀L3 X`>@?W:Ƞ?AҀ|?>F ?C'?T9?_?V9?P1`?M?5`?/?;b7`?3&?J`?T ?P#{?P?Y%@?Z2`?L>4h`H`0A?T`?4L<2@?@?`?.@?Qtx?8 ?+ ?ao?d?J5x ?5"?Fm<?4*&RÏ@R\ ?xSP&?@?F]`5Գ@I>@U >S?2 ?eXJ`?e?Eq, 7`?0ey=WYk+5fZ?<@?.D+^m!e&AY} ?*$[4ǀQ@> ʀEP?*@I?R6@?<xU[$$z?ZO ;$?&`:@ |?0ey@q`?3ܒ?Zq@?BX2 4qܠ?L؆?T?5n ;@?u@?F"`?UW5`?>O?+?.F.N YFE]?9 ?A)I?Af?N?S?L`?:?2?Mؠ?\d; ?Q}Qٟ`_ B4?+&(?I`?\?XJR@?Y=@?ZK?Q=?Qڠ?FX@2G?F ʀ?@ ?/_u ><?B?`@?]2Q?]SP`?c`?Z!> @@?w?R]@?Z?F[ K6Kb7`?G?U5?B@?EX`?M9$ I=?N@?\/@?S?Tl`?H@EV N2LK:@<̠?A4@?(JR@>W~ I\ .I?-8F@H@[2H?Rx?Xn?FZؠ?3ch?5?&i#948MM]Yr@H*OlpI?C?(lYB TEH YʠZm.Aw?2?Pk?Dt;f ?-B?E GDQ11F~L`?F:?WZ?I@?Jg;?VȦ?F1?9`?Sh ?L'?(ԛJJ R?@?W?@i?A&@?S\@%҉`^ [COY@BЀ>d?:S ?08 #Iq@5deڀ@LH BfB`?V8:`?XҡQ#d@S?7#?K?PHD?D*v ?A?[Qr?a(?QPŀ>@N2Y05A2?< ?7 ?MX?PC@+!N?!?X?Vr?XB5 ?`r ?8WV;?SQ?[We?ZU`?HB~@0*?TR}@?Ul`?&??4=k@PVGS`IU GK܀@1 XJq`?Eo?Nì?:`?+o@?M5`?.4Q`QKJJT׀%Ӏ?ՠA͸G?;;E@?ڀ`?C`?9 ?>;]?Qu?Qـ??8Mteu`{a?=?G%%:.`?91?S?Hƻ ?H@?:乀= !SyD ?MX?a`?C1b ?7@!Ik+D(L@=k?Cr@?\}?P? @?35@?@`?C-P?Fx ?0ƒ?.`?G ?#gC2?%0?P?Ma ?Sg?Z0`?2NuToM5-5`HPPX4>@GE V"T_ W:Ƞcg1@c#@A??ykE[ \)W@B?A(4?P`tG?F.?_?R|1~Rhl@Ch ?G6t?=4?Rk ?_?9@BLK???8?D@?V+@-`Z$)?~p ?X7`?B`[ *?S`?E>S?Tp?GE 8L| A`)7@1`DG= SՉ[b7`XV@VHCl?M>7?Zcr`?Op@?0/b@?". I:CDQU`'z?Kŀ?H ?2J!,3q`?E?TN?A& ?&r ?AҀ?@|1?4{5 ]!Y?E?Q 3^π?T4 ?[1?[{ ?Q?Bc?P?6,N`?WB`%@^]WQB2@O`87 Tu^jlC?Q@?E-z?CH\@?Y/?S#@:3HT??VE?9<`N? XߜN@?O?Q!>?*7?L?M؀??wA 2`?#pc`?V9?\??]3f?Q?TX?QR?4,5RO>@?R"?Q@?2hl@?NA?B&N ?3?azl?K}MD?W?`V?O?ey>5Ŏ?'iM`?33@?EA?P?8 iB@H#?@?Q'`?Gc?찀?U??_- ?G%%?T?``?,)EO+CsG.@+s?#U`[u`R4?T ?[?E<)?3?5?(dI<X"K@VL?+s?N?`>Az@P+T`P(Z BE+jd?ey?<?8]@?L ?M t`?<}?3l1?$ ?G)y?U{s ?]<?[*?EE@4U@?@`_u R@[ ՀN>@?)j?ϖP Y)XfrR b,`?=mѠ@M@@X~@?@ ?L?M?.TU ?@?5Y_@?X`?U ?@ ?B-?*W;w@1; j?9-?S@?Lt@?1/?LC`?\?Z?'KP?>?e4`?ad?U(?X?I/[!`;0sQ]6`Q~?G5_?\`?\B ?al ?S@%?U@?ee?C @Gkw@?9R?GH `G`?.0?H``? T@?;da@HdHˀ3g?I@?A F8[>q`P DG?Y@?`*>?)|KVPPC@^@^䫠?JBA?H9 ?H`?)]?h;`F ``"fb)M?" (y91k?6 ?.b@>K@a`?_u 2=S?6i?N@?K>@?7kw@I[!`T!D @?I?T]?TL?Ok[?=1/C@@95Y_@?C`F-hPlXӠX`R!WeW4J?I<`?H"ǟPK5܀?GV?^`?F|bVfW@`< $?C?at?V" !d7d5@?E<@?LX`?=?2`?9?J ?X?ZA?5O(?F<?f12 ?VnQ?J(|?O@?;$?4D% `P ?4_ ?NF.?J⏠?Z?U@? b7`?B ?Jg;F ʀJ) "`PuY%C`?7#?K-??-%Ӏ&`Ae MP?#?:-2?t?A8n@&]@ AD-?5]?S+?BB 6:;[Ce[EbP?H ?8WM?1'(@,-`#GiM`9e`?4\9<؆P.>`=<*׾ ?C<@?! @?:ie?#3@=O`8@A9@Re-L π?8?39O*bAW@?%,@?:s7Ij 9>@?( i?0k?0/b@@w`'`?C`?FX@@Zy`Np_?&)4' E@?;S?PH?LL?KO@@ Sch1@?Qp?9_DF3`5S`R8R`L&Q8d?9{e@?Q t?F Bs`AW@?: 2@>ST @WՀ>ݣ?D"?SBi ?P8 (R>y?W?cN?S @4_ ?-r%`?S ?)4U?R@?Vz`?@[@?SD?W eڀHb (JR@4S ?J-?82`>`?H??]0 ?"@`L c[M9`?Dj?+o2NQQڀ?2n?R[p?%Q`?)g@?a?Z.`YZ= ?F?@$W`fWOB b9e`G`?+@?^Be?bz ?c?g/l?bAz@?HWM" >j &`?Q͸?R:`B?Kk?W?@F³@(?7(d`AR`? @Bo^'N}[@?S`?a|?]M] ?R^%@?KH@?:4>y ?I~ ?@D@?S)3P^#6? 5@ELcSɣ`- ?Y X@?Wa0@? -8`@ N`O@?0?@b`;?!B*?LQ`?"P 8W^`Xj?#`&"`7?Tu?c\@?R?,?U*ڀ?TA;@;' ?V?[͠)Š]A`\ IP`GF萠?B@?_4/@?f6U?jp ?giM`?[?D_x,̠?:@I?N?5`?u@1=?Dr?T' ?M `3-P?3a>?C?M-?AQ[4= (?L `?A. 3(.`%C`Id`?.@?EA!(5yӠWjDe@?4@??.ìP5:׾ ?S?RH*Z> Q < ?A ?N2?3}^?Gl ?Q|@1L@K` `Hg`Zr PE@?F?2ԛ9?C?\p?bJ?Zm?([`?2?Y @?[~?Q<`?6/ = ?*`?W?@?]#,@?B+@H0[J?^?cKU?P@{8 ?C0ۀV,`?-`?[jT`?M~ ?G?Q[? `;ҹ?&@?9`?8)B[@Ne`8?U'?M JQY& k@?Z^ ?V@Q`?)V?U?Tz?\M@?f%?W_BtR;N@?6c@?H?W@?_Xm?XX#M_?HBA6?B[@?W`?TTGZ _?K?i?f8@?ZhP?Ws R}?H:?a ?\R'9PJ w)?>@)`PǠN?!=?5@@`?#R?T?G?" ?(dI5`@+@4?J?Q.AR`K9`?E?4 +W[K`F(E0W*.`?X?R`?Ex?M'63Z`3PHD?&-h?Tek?_A ?Uc? +Vɠ`Dg @?K 4#?Kh ?"'>3@O)M?I2 LH?6-h?C1`P1pA>?W?X?PT?Z=@?SL%&nQ?=3f?ZBs?Ux4@?T ?WWs?G]f? *> ?;;E@?R=&`?V~?WX?T`*H VCM@P9@XB ?T`?=T?L)E?HŦ@YT@PZ@?"0ĬLS?L`?I5?0D'7`WETQh@D`Js" 6?Q?Y@?WH?P:S?#0?` ?W Z}b9?Q ?f?YC$?R ?GYF`PU?`?)t?_p9?c@?$ ^`UCA 9} <}`?A?0y?)n?D?+>:3?Ci?B?P`?͵@NN0?D? ?b<?OR`?I`?5ᮠQO@B2UKRs`R(?g?V ߀?Kx1v@M^`Z<@T>y? ?9an?=3`?Me*?D0IYS U;]:OnP<?-?VK`?@-8`? ?86`?0?N?UQ̠?8 ?K]?a@?Z!?DN?:-!P ?<>?[n ?FȀ:,Ѐ?N`?QKL?0?c?\?`X.1_P`?Fm?A`Sբ?Z?PT@u ?H?`?<ˋUF+?9@??@~[`?@`'1 ? > 0/@?+ ?6y# ?D+ ?WK@?U[ ?H?56@M>J?Xm{?R]@?@`?R?< @PfD@?%?h?4`?8`) 5?O|?XU?C%0= 1?>?I;` Р9j >]&6`9r??C" ?@w1DT@?B w?N ?)|?<ڰ?S?V2@?T?-o>u?U-?f?Yβ ?9?0>%?h?C`?_ ?GE4 ?Bn?SE~`Gp:Z@@-@(GL;>8?5l` P O`6L6Q=>7^d3QE@?;?8P ?+)`?T/T`?U?O6Y ?FA?U`?[q?7?`QWMb%j`?)?D_x?S`?INF[W JH ?7|`?T l @?4qܠ?O\6@?Q#?V ߀?I?=?UMx?P ;??0 ?=?S+?FM@GM,HJR@ ?F ?OP;@U;@?Gi ?b`?Vy# ?H?X4$?V2G '`L\>͵?0@U_`]C ?%@?V`?E,{`?2 ?%L?'@?Bug?Mud@?U`?T]-e*O`?;ߵ ?S?#ch50C@>Az@qD`?8 ?U/?QkF?B!?S1`?Zh ?R# ?0<]I6F@?;j?(u ?Eh?N,8@&1Q8n`?(Bs`MOPOO2/?4d@4z@U/VߠO @Gʪ6H?.`?5@<Pޣ:2`ٟ`D?7?^`?CzII`>5`?9&)Fc@Vs/Mz0"fZHb QưUa|`JK?Y. ?XC ?-h?E?G( @?2?F?7U@?@?T`"ug?U?_7?8WM?$Q?%Lc?C_ ?D?$!9@6d`+|.?F EӞ@Ig@?WD@?bW?4xZ`ug?\@?VN=`S4?Gm ?IpYRa7@. ?@@61?A' ?/`? -8`?L<?EL@?6m?L`??2`?6Ϯ?p?MZ?TM?Tۀ?Y?R@Gd?J`?D`=լ??H?0H.1X59<<`?I;@PeDB!?R鳀6ܪ@?, `?+??=1<?!F~?',@??A*H4 `cV`75C;Ng@QI DJ E'>`?Q_``?O7MUKـE?F-h?@ruFe 4G?Oyk?Q>?N ?Dŀ8sn@)@ ?JB>`M;4ǀʒ@?]3!ZK_A*P(@VAl`KU?R À?LT?Nqt?Q" 3\@8EI+W@)8R=]`?E ?[?A(EU = t`/Ry7@0i`?*`?E5?:-0ޣ7*`!P ?I;`?bhl@?X:SRs=?Xc?_`Id`? ?9V:s3?8`C܀Wp?Bq?b>?Q>?+j?E?D`.ì"?'?Sa>?N/w!>@?Df?NVi ?T7q?PIբDBC;9`,r ?J[U@?X?%?5@: \ >@%EKO61BS# )p?Tm?EXJ`G,@F@]?%([`7?8jƠ?ShF@?H|@&v'9?Kj?Zjz?A(U|Q[?OH@?`L `?V7%`>բNF9O@?1?O" ?=oW" Z?WAF@?k-?Y;"^`$@?H̀?SV@FT? T*//ۀ?O`?SO?0<]y ?1 @?!HG`Xk۠VwQT`>A ?C?A'#?Z?P*?N-hbJ$?8?Jǃ@T 1P ?F??V̀+6518?@5?YA?Oo@MXt G\R!,6:d@Vr X`?>dy?^<?MtO@ eڀ?`?L?c ?c?BFC@S`a5 S]t?P; ?V?0Ѩ@D.@7\R?H#` ?;SNVi HO7xrQ0L&5,@J7=t?VР?e1`?WqQ Ugo?;?:|B 9??C1`>W?"?A D ZY+`L{}?#y .h@Gi ?3`?RB O[IUYd Ja28Ҡ2`@ruJՔ@'4QTt4@?\?Y? "U 4RX2 O*r,?*k?Vr?_ Ǡ?1z;?A ?`=@?CE?D8*2`&ͅQC?R]GQG ?#B?[m?TUEq, L?Cǀ?RT@?Bs`?eyDa`V j[b7`\^GQ?<Ad?lp?0`?E??2R`?HAdN`#<J`?7?\B?NTd@UN`?@?G?6p{???%'?A暠?;IGK8`IL[ QP Ks? ?D=@?"+@HҡX^X`PlQ/Ơ@V?@[@?dM? j?R%Y?DE;DfI Kՠ? ?; Հ=?Lr?`S?Ho?'d8`3@GY Q?>@>WMWbϠ\ySU4`S7(ˀ?O?$ Z֩ V@?B/?S?" SL WB  Q^, ?8?R`?HI 4Z?C?c[?XӠB>;`=?-(Ms:@X-mѠ?DG?9?CW?JG@,Aa@?K?\{@?:|ޠY`bC Z0F@?Lٛ?L ?D?QV.@?S{@?2U ?/?[@?X@C`L?|.KBUK+6'?`_?`0`?2c?La?X>k?.`%?1?C|I ??K#x`?@<<?8jƠ?/嚀K :Z@@?QE?PY ?:g;?BAz@?1%Y_@? @6t`V JS ?/N&?ĬPnR(2Nu?N?"@??P?:@A@NHX*x0p@Q$jD?6 FVS_ 80DO@MoPN% ?KFMC1C,;Jp ?" GT@>! ?S9:|4`?AU3>@WS P@'M_?@?@,#`>]W(R@?>ì?Xn`?: Y\@[@>r?RYр?5E@G.@=լ?9)-@?@>,@?5m`?X=`?XL`?DA.?P`?Z{? ?I0?"@?;C>蜊@I#ĀA?L`0\H`1 ?S?Si[ n!@K\ΠR wS`=3f?Jx?W @?\O"?Vj 7o@@?aী?h?S8 ?KZ?Q7i@8??9$ PjQ?S@?E{Ta#" ?R9?2)Z?K@?%sV?6?3U 39j _u 8HN:?Gd?E?!?!J`X.>@> J-QĠ7|?R@?Pxh L Vis`43@4̼@?@?98R? @?CbS?V:?=XK݋@CF`O֠`EƢ>*QB[pGHF[ KѤMEH?QC`WZ4c Hy?p@-K3@?, ?R1@?I?C ?6TcAZC`8!9@?6?Z׾ ?We?A `?5C?&G_?MB?b6@?W7@CPJ\@?-J?E%q?Hi?Jo?66`?8?H?T`?PѨ@?Jz?>֠ ?A1?[?_@?Y6?HhASR`S VvnXn`QC`?C`?_w`?X>@?HYw| [G _g @q`>y <?,Cנ??_?e?X^U?^%?]h@(@;W:;?Q4@GY _ @?1 `?X?I??2`?GI?J-?N&U\V`ԍ@?@6@?9e ?IR@6w?2T@?#t 24DG CD`75_+<>?PØ?SDqܠSm?-$A ?Rc?H ?0?pc`?&]?F3`?K?7q6I?Gb`b```@,#`?E@?O(`?1d>'`1kF8U#Mm>h@?A~?GY :&RX@G?@?Jq`?O ?O?S$?A?.@QkCh?DX?A?Tt?d?_`?Q?Q/?7ʪ?E?a]?Z> ?0@?8L| ?!bJ@7i ?E?7M?߄?Pҽ@?VUo?49٠F^VߠS# ?>W~ ?[?V7?M F#`E-VRVN`I:|?9w?Y`?Qb?J_?N @WqF?M3`TU ?C!j@?D?M J:T/`?I,l ?]+I`?8:;AR W-B?M<?^ N@B`E?Z?X?1=?F?XS@?XӠ? I` YZf`?IzP@?Ty?=Q?% { :N`USP~[`?;@?P`?R`K@QJ L0?5Tg @,?@`7 *o@?Wغ?f\x?cd7?QZ ?3TB?-B܀DmDqܠ?!?=y@@!`VQ0۠<S?-9 ?O7n ?CE1b`>`3}^?F?V?QPŀ@@F~?K ?S ?<Az@8N9`*$>?Qg}`?ZT?N>@?V ?``?Q@?B ?8hLN?<?S^?Lˋ?2@?C9[kQ`0 8R>J?P?HB4~I;SR(`VL=>;?L?{`PZ@M@?&`?:K5~'>-h?JL ?? ?7`?8U#Do9I`?NIm?3l>Y?:^ ?7 C%6?J?[`?]~@?N Y'`a?A"@?[K`?DPS@?+a`E@QB?P1?W@:3?b?Z ?#Iq@U<@- J?S8" ?U %L`gU??F3?D;`6w-SRr(V"`?3>@?Yh?DUAhQeW:ȠC`?7WEE 1v@ ʀ?N%?Y?R`>`2+@?a`<NTJ?C`?/`&"`?"?1zl:G?t?A; ?1xB ??g?J?D! MV@?찀?_`?Wa0@???:Ք@?0`LL@x?E@?A`:4?K%@?Pf?Cn9`?U=?X?F?RU ?R#Ae B?Cd|?)8R)#PPz R 9} ,@D4' ?49`?5{`"=&` 찀?4c6TZJ>eڀ?(=VH`O+b7`?G?Q t?FX?P݀?Y!?O& ?!J`?`Y Tqܠ?l@$`:`?M?T@?@??p?L?Y?W4`.`%v?_>v@?[? $?6`?.<7?`$>V EÀ?3`K> [EyӠ?H(?P -YH@Sm02qA0/EǷP_`?~p ?Pz?8 6t`D~WAU"?*g;Fs`?π:S6l'F]`S`) [;a[[@=z;]Q' M{2q ?4 ?I ?Mc ?=5`=* P?۠?*s?E[ ?U`?]mѠ?X @?/ˣVC ?c+?i\Հ?S/?)MC&Yni?yk?gV ?bǟB Y7=KO8D{?Q~?W C?MƇ@?c@?k\D ?\=Ӏ?I?G K@B)`J,ЀS;` ?Q@`?FX? @߸Q?@?0?%{`><]3K9`A J q 0E@?,w)?4M?E ?BЀ??c?Pn!@?L? @VX1pA|'6 ?4?K=o ?F( X.5C0IY??g ?J>ڀ`?HD?dr?\Ā??2`?Hfr?([`@,#`UҀ] wP_u EF AxB ?C @?RЀ?8,(A,T`>?LO?N8?6H?0`?7?@&?A `%sVA0p`I`W?;J6`?>>P ?81W-@_.@`XkQ ?3M'S^C?A: ?L_\m!FXBހE DN1xB ?;A?V.}?Zy@?Rby ?I`Y?|.?S`?_`?f? ?UԳ@?2 =k@V?2B?k'?fi49`U\ O`[WM] Q?4xZ`>\(0[>J%?h4g @HˀOu@7 ;]H$+sC?N?C-?Pg?U ?0ۀ?'?WR ?R[?"J!?HjƠ?B`?A&@?= k_?\C<@Q|TSD5dQj7ƀ?Wk?W-B>3@:W?0?3›@?7(d?РA^ QL@E`?8?,L̠C=?9$ـ?r9d?D?SN??eCUW?1u`?S?1?)@?RL ?N_?Cqx@?(JR@Oi6M ?_?]?1 >O& ?9 @` @?[` ?Rq NìGۀ?>֠?7@?*s?7@?=c ?My@?BDE%@?%@?PD@?Z?:xRǟyk?Qsc?9@?0{?OƠ?Q} `?B$AVRZ\HyP@UKO:>M: ?Hc4?`?V12 ?Ao=`]w T?K?[?LX`?K?cs?h?a ?V ?O䅀n`DJ ??Pz?[ 9?Z~~?Pv>@'`TUKv@?Ff?OK`?Hn`?P#TO>`-9 ?9)-@-(?6Zؠ?FK`FN`?9N?`U { RCH6`?, ?[O?U,@?C?5CTX =D@ W&:Be-?X ?YfL +2?J?Nl ?@VT`? ?P?QG 9;>bO1QPW@X,?0@?Q ?4"?>T`?`7`?eP?Y?PØ?S@?@`E=>RA篠?H@?V`?GʪDT?A=?dz?Z?!8?7?+o2 ?I\?>f`O T @V+@a25X!>(?@QrNSPLW@1`Aـ?X8x?^`?R?D>4oO ?0K?IGw?FC ?B<?QU`?DED!Π>-h=@aF@?/?M ?Cn?(#?( @C<@?Vof?_6Y ?7K9?H[?^^?`U?@/b@U)4,?S5m?F~i?]k@?_ ?EI% &I7#?C @?0O֠?@?PU?G}@@0w@>?Y.?SD>;]H1py?1Ġ?;>`MFDt P=<`?N@>^L" _ ><?]`K?X ``D>r?EO ?C @!~?]?L@SY1 ?Rc?S֠?NYM@f[ /@QSyVX?+s?UC1?Gd?:?E?Q5?54 $z?0 =?6H@wDJF@8Ҡ?G!?+%@Q PF@?XRo`?j @?[/& ?6'?Olp?Y`?G+`G(@Wy_\H @` ?A?B `'`?,x `A ?-`?Qu`?UP-@?HwF@W[`?=E?]Q&?c8g`?U$`?Al[?0g=>č@@P[݋@Y>J?Pk?PØ?A*?ԛ6E1X@@??lpP(E?I@?V?WA?KB?*^ ?W?bu ?MZX?L,`?cX@?Z0JA?4?E 2fB`?!J`?`9?Z3N@DR}@Q}?&:?BT@>x?H!6@?Np`?O?C9e I LlX@T9x?II`5d`t`UY_@?? ?N/ ?F@G 0@?J`?UB`?E=J( `?N??J{ɠ?X ?Q? T*%5Lc:`4/@2m@?82`?TQh@?R#/?DN)`?Gu3?U=>?dm?eJ@?H?B?] ?K@ORCA^ ?7:?D@3@?1L@?d@?er?;FJ6V?"_?@?3>?ELc?@p`?:?G(d?Hw?$S@`?E)?O ?9VA>;?9-;UDFRf`?9@?`s`?b?MDZD`??-?H"K@?1?&? ? @;CTaE/.`?T% `?D\s [4?,{}?QN?Gu?4`?D.@?R?B`6t`.K?4?Iz`?M`?1* ?:F@?GZ(?6m;0B`6`3U`?P/Be-?K\Π?GI=MAv ?%.`?/@:XRNF`^`Pa%?R,?QEi2`#` ?PB`?'r``@a ?= '`HTD`?" ?1SyLc#`=?@C<@&ڀ`?@ ?` ?[?W?=?"@P94?Pƒ?I n!@?(?O?`!R?]`?( i??V%@?EF5M@Rby H@?:׾ ?D.@?Gy?[;?^@?M>7? >,  ?!暠?3-P?1=,@@c͠U @?1J`z;?'OV?9N?0`?2q ?@?2G@D`P58?(?;6?P/@?Z.p?[wO?QD@F>>y G`NDOQdRHqD`G A# @MI `Sm$?H3`?[?$ +24~?C``R w4H?Q)Ӏ?;q\Za?~?Nm!?O ?@m @?@a%?PY@?RO?Cch?3 ?/ = 3U`C1`?3e?W&:?U4 ?*`G_U٠]`@] V U?Y?V#`'?'1?XT?CU`RgW`P9Bca[Q]2Q7g#`@ 3-P?S ?TrE@S`?/8?U`g`?P:3?0? B`?K ?PA`5T<D'7`7`J`M'Jɀ?S?Yk ?IW93?%҉`?Jk?G?0`"ǟU eF R?Lˋ?Ca>?X?'(@08 ?7 ?Y ?LG'$?Z?0?`>?`4zW`AA(bGf]`Rd' QV.@T?Fc@?r?HG` V=>,8@?P?E@`Bj?Ff?ZY+`?Iu`RR>\FBe-?Aw?G֠?E ?3c6@-8`5 ?Ai?R$ ?M^`?Al[?A`?6C ?"y?ME?[wO?GG] ?Uz^ ?Pk>] 'OVLH S! 0pK $`B".@?V6`?U9u`;`I4?D`?X\+?HB?"8Ҡ?P?Zk?+fWxTXp`69I`=A`?<?R0+?R0?UF ?X ~`?N>@>Q`2G@?k_ P Do6< >4`.dy?@@`?V`?-9 V XEtTSD?&:N`Q7R ?'?'?J2caj@H?]s?a ?`?Xa 1 ?L@?'`?2?Z`?BS$?W]?Jɭ9P`?6Y 7(@Y d@Ol?B`+sQYm IRX=`93?>z`?^`&?5_`?U?b?\ >(@ ?2[p?2$!Π?P?D?S?_v`?^?VZؠ?W*@?C`X>`X.?T7?M?4g @3&KIUNAS?S~ P?Q ?U`?_?h(?dy?N ?8ߜ?An@F@^T:%?A^K`?T@?Lt?1mpB`P `[?W?EO+\?QE?S- ?30@?9?N#?2+@"[p?Q?^`?CQ@F >0BHg#?I:|?O8?- 7U@0@9K=`? `C;`PZ@?+X ?P@`?8jƠ?/?Bȴ?5h?0@?!#@@-8`?'?Z[U@?KZ`HCԠA?Z?Fܪ@?`I?Yⵠ$;`?-e*?S?JU`?RU}?P`I Q 3E`?=?e4?T~`a,?4P?b@?`(?G^{?B@?34FL?U?X%?F`OO:X XRJ>?@1`?QF~?A[,(#` ?8 ?J?>P; JH ?6?Q?R?E"?K]?e8`?c m ?D@?DU?GM,HlCbS?\@?c ?MAv \?& METcAU F1?0pK ?4@??L!?]x?S@=R@iBW~ MV?J ?W2?I0?[, P ?O?\; ?H*`D`7FO|H `$M?< ?:W>@?@ ?P?P"?R. ?8jƠQ@NT?@?8w?G]?rIUaNw@I S@F@?0E@?(#` ?@g?^?aA?N֠?" ~p ?0`?T]?Xf`?E?F_,`?S ? -R9@>??T?NQ`?Yx?Sn9`?'W ??@?0`SIG?70b`E߄C~sQY?~@?`8?Y3BxYMk9 ?`ܿ?cˠ?8qD`&$@?BD?"+@?K?K@?C0>QzN}[@'z?;`?Jɀ?U`?Re`?; ?C\@?FD3Xp<̀?Q ?V?Q=?=* @4O>`?Q ?My6%0| Q>7?\?YE`5sVKh &H`eڀL@I?H'?U >MH4 M @U Z U`&P ?C?24`?BM`?Y?X?I?IU ?S@?V,`?W?R +`V@THa \7Ub UEB w?m?IQ4`?G-@?$6"`?&?S@?CML!?V ?R<?+ՠ2 9?6@?G(d7`Mi X.?MF߀?\?b?ZaH?@?Rg?C?" 5PΠNV`?0ޣ?KWe?/嚀=I `QHSE\?5vMN?>J?N'?;ՠ/F@?!F?An?@6@?Q?C:;?Bi@?P,#`Qw\ `1z!5/`NL}`+?/g ?,@8ˀESɣ`C>?\?eV?Yc`?U?SbSC\`XD_? @?XO0?Qڠ?5ᮠ?6:?&55Q'(d?hvG CXPE9 ?R?1=U^@T)?*H ?NW~ =4?\]?c?,O P $K$`SQ`(?98R?T:`?_a?V ?G!?8>r?;0s?UQB ?UT?K ?C΁?@߸K2^L@?=tAHZ:S(r`ID9>?@\?M^ WT42?1Y?An`&G_?@?W2?L ?2ug?%?0&?T?_'`?>ݣPGEL?<?M?Bj@0~`GK P ǀJ!(=V??F?N!f?E?  ?M J?W>?IFu@Y{XIQj1'5_?Fd`?03F$@<$?<)E?8.z`?!Sy?@i`NV{׀?P ?` `?6M@?5?I`MNr [> =3f4#U-WDp?y -h>!fObjQa_`?>?_Q@?M ?Cg?D.=fCpc`?IR?X#` ?Jހ?$Qh@?DJ?SVl?A|=?:?STB?Q ?)jd?Qv?\7U?F* 9(8[`?H1p?Z?:;@ ?[i?eQ̠U`40?, ?H?W@?V@?YS?`?U`>y XTa6J?5>SpFi%],`Q;@>@?^+#@?R[pGT`QNJ?=? ?/?(~?Z b?2?Y`?@@?I ?W2@Q\F1KWR E&3cEOr 8E>Y)-@gKҀW7@?g)(4@?U ?L?W(?J2?8`?4@?9@?GF`?9g@1\!?5H ?X?Y5 ?LL?L-`?\ `?_"?TV?JBs?F?S `?[y?"[pV-?C`?^1D@\I@y?IGw?G`?FSF?8;?A#@?Q8n@?S?Iu=tO@X=VMa =ӂTW6@GAB*?A2`?4H?W{'?B(`RXQ3΀2 O& ?O_u ?EKOPFS ?B?R"qFZؠ8?(R?p@>v0@`?@?>J,<؆?.S*@?D@?5Q2[pRM0?E%q?RB!?h?Th?fS?^@ $CB?& ?=1<2R`IS^@?1J`?`=?`x?@\?-h?FV?2<`?A͸?^A?U?%C`D`V Q_``?8 i?9} >w?-`?H;`?C<@1kF2= ??H @?=^`2`;?#`?@[?6π?;N?F.?O?PsA``C@?DZJ}Q?:D`?*oP$`Q3 @??-(?L'?X3?a5?^?Pk@?D`?9RI@?,?@`?6`,N?#U`>?Jm`?KpG:oQ.`?$;`?TH6@?03?Tb`?Zy@2@KH@?H?P.M`3 U@1!`?FA?Bs > o@/嚀71bAD `'@?/V̀?IM?H@]AH?Zǃ?b6??=3^?H?T?+6Y`aQ4ZRXt 6L?G /?E Ap ^ ?LF{ ?S?[h ?ba`?W]`6v@Sjp Ed?Aـ?Og3 @QR"K>`P C ?:`?!=`s???2?',?Gr?9$ـE@PDc?:z?WU@?[Ѥ?\]3?Y'?TM?WE@?N0 =?1`?U#G?BT@4+1$A ?!iAz@Kda@QTL`Bl,Z? =?B`?B%Y?@FofU K5܀=zH@v?K%@>F.`ܠZaH.T`?I6?U}?Y?W{'?Q=?P8?Q8?M`?Q?T`?C`) ?3vF.?7~@?]K3@?Tm'`$?V?`=r UE?6< ?R >F`Ou?2/?<؆`?FYà?Un??J?:x?2>o?9@?B? ;EK9`>?MDVXS@?QT?ZA^?z`I #`FTZW25?N?Q@?GE ;w@Z(|Xs?l?@?5_`PMRU ?2{`?:N`:Q?%E,@Bm?(A@`SH\@@?S@?Je?;?G@?QV?P?0E@9)-@?%P?A3 @RhKܠ?/h??PEoXqLN??B,@?P?Sp@[/^UrA0*a86@;0s2?E`7?L`?^|?S?=;`?9e ?P0E@V C /8P`O\6@.93&`?)Š?Ka`?KX ?0T*?HE?X?P`?E@?Yu?a?T`>'`Qd6LN\e4 ]½?0~`?3?!Y?S6?F1Ga@?G/@?:F@?L ?Nk@O֠ F@?Ua>,@P; ?@F ?:!UPU?`?9 ?L ? ZȘc#@VPI LT)`[>`?`@?Bc >?:ހ?7&:C;`><?UXJ`?DG3+&$@D Er?F7%`?M ?S`?e ?:Ș?F?Pc?6{.?4?O:?V#@?P@H`]'R'?;?JN`?"Az@G @?Mr@?dٷ?U4 >y ?E?VK(?Lm`0̀9?RG?Y8 @] _`P= >?!9@`#›@?-S?AH?>-h?I ʀ`U`H&JW`W`??R0+?M ?U`?PS?%CL X 2U-`!~?/&P < @EvC4xZ`: =X>3@?'K2l `?RA ?WZ(?B ?A?Z?aNV`?MoQI QSy?@ &-h^]H ?Ht $k_?M _`?/I O0?RT?R?Kev ? (C`?J?b_?8PC ?D?V}v?2??Kv@?\<`?U@J^Wg%]:`VD@ULY/X9)-@H,:??b`V#3@?\6@?S/T>oJ0ޣ?,?HWGK` `?8 ?$o?6v@Kda@JW=1<?'?"J!T @\2w96?QԠ?`!`?Z=@,?yk?S;`"XAu@?CD?-Ao%҉`?QI`?IZVcUF 1z?1|?F6`?>??!?Q?5AL'?H`4k_=J?@1`?4`??C;?UҀ?R@?Wk?F 4b`KT@Q3?+X ?, #+&,P7?.f? T`A: #?><? @C*@??& ?J8E?B@?X?U(!Kb _r ?PΠ?Z,Ѐ?6_,`?P!܀?W?+H@4,K-;0s/_u ?BN@?Tp=@?.~p Y^ Ze?" 9?Qp%]K>@?0R?J G ?Cu?A(?Eh?Y?^0?%Cn ?TH?Bկ> ?)2 ?9$ %<N L̀?&r?C:L?1zl?B$`?UN?S @?A*]?3 ?3?" "0+2^`?0@?M,`?2Az@5yӠ?2q?B`٠?BYTH >ځ2`BA>?F5?Rq`?WHN?XO0dRtRBB J-WA ?B@?O& :B`?:$)?O(?8D#99FQ?&{?R?*|?Q@?I?{`?E?N?9anDjJ][j1(4?S?Y?D??GH?Lt@?h+68CԠ;|.?<@?VȀ?MO`6_,`2w?L?Vs`?U f ?E DeG4J?!dԍ@?D1R@̀DXWM2Q?w)?;7?P?Y?Q~5@?/8?`Q`!?=?8~?A1C]@?"Az@?4(L@ >?ES>]ZM@W@ ?20+?2=?CS ?B!?S:?_ܠ?GG1 Vi([`??hH;-VZ?#`?Yڠ?R{?NR`?O KMLH@N1SvAxB ?C `?F:d@?Hь?E? ׾ ?0A?@S?@&?P`?G ?Bl?Z?8d]cB ?R@?E>SCЫ[?P?0 A@Jh)|Z `XEXŀZ?P6@?SzQ=O ?RW ?aA?V.?PГ`Y$O@ҽ@?L>?&rPBr(?H@8_@)j?"ug:V V D| ?B?R' I?I ?E@S΁So??Dg @?Pv>@?I-'m26?IC$?U.?N6 ?L]?M!`?%U H?= ?#@ɠ>J?7E@_& U"@ =PiMt?@?Y.?_?_?La.T`?)(?J?Sw?bIR ?b3i?K?:ހ?:;>_u ?@T?S?Hވ1J`ObI $5@@#+`0k@D.?.ì?Y)?GaCMQ`P9rNHS9?:E ?W΀?R0?\?^H@!Rr@=?- ?V6`?Xv ?4U?9I`?'ȀQ+r3v??~@.M`KGW]@?6'?Q`MTƀ?ChR_ERc?Cg01 VɠV>bپ]ܴ*eOT=Ƈ@?aU?Q[_V?- ?Vy@?\?GiM`D@P|1%6?N`?_^ `#B?ON%Jɀ?<t?C?&?&>?;< ?L6{E ?Pכ?:[a`P??Qٟ`?] ?T &{MCB?Ip?Z?Jv` @?)[?0\?D?Q ?Kda@?:?71vB$D%.`?50C@A@UŎ< ?DjJ?O?R?@h?0y?02%Y B`%;.I??[!`?_@?WWs?B`٠?( iQYG< &,?P?R$`?%?Hy?PE`?pA?Dq?T+?bѠ?a;"?A?I ?@ U Gn 7 _^Y V@fu@Zހ?0&> U ۠W O}?'3L Y~ ( iy $Z?Hg`?F?5d?;=o ?&P ?TAH_b)Y`??A*?InC!j@F@?0?Azl?Iu?QG?D2?N_?XN?6nQ8W?1*]6nQR# ?Kߵ ?VX?S i}?t?[?V`??4?GR`?qD`#M?@ ?S`?V ?I'Ȁ@HD+??&5?@>:3>2-B9?b?4=@?R:r?/p@6P ?#?C`?C?*o?5?M^`?A?@Z ?Bq J@A8n@ @?$3?U?U} 'W ?5Q?#?K( ?MB-i}?7M?K݋@=?G8?S;`0&4i5 H~a\`B`?AO& \Yia-7.@>5`7@MK3@2?YX?C X7c1g`?WS?I L`@O?H?'L5@ShF@^,;We?_`?R%@?3e?G֑?VgI?Y^`w)VQҀPey?[!`?J?N9B`E?3:L?P??GF?S[J?]U ?OPO M`Y@G?-hD8&?O@?>?I ?`?S?8?]?c/?Ft9RI@ l@?B ?O ?CBAz@QsIG;j>o@`TZ Y /?Ry1?Hҡ`@= Dk_?8?4V TcA?"ԛ?-X? x?H ?2ǟ?U4 ?RW@i`B^`?J?X i?RW? K/^V]`LI ͵B@8@B$J ?2 ?RA`?>'`?  ?8 ?Jg;?Y(?EfZZ#WHI ]LH@S`?5,@?0Ѩ@?139J\@?HT?YLV E+W/?@ ?J?:MD?F_,`?]r%`0@jz*@Z2?R ?L3L)aO& \f@?8?#@ɠ?!#@?2?@Y@'OVDP?;?RTh?I`?JS ?L}`?B?:I^e?b`?;[I;`6ͅ?P?Jl`?SH\@?a]?VF ?M ?a.l?bx?H@*>@? k@0,)E@>%{Nl Q(?!B@AMC28@? 1 ?E`?%wR# [dBl ?R?D'UOv-?>w?, b7`?Hy?\s``?b `?LlX@RM N0?D`?S޻?DU29 I/Xzv`dM`W5_.93@A GU@Y@UJ `?2=(H/FE?h?:7 ?A`B_7?`5"c@g`Q_ ?9I?Nì?R?\Z~?Y?@5 ?$@?>?J.`?CVl?MM?YL`mH~Wɕ?SM@?7&:PM"@WT =,F饠[GU)?6?;Y>p`&-h?7`?Rܸ ?^]?Ux4@Jl_xVN޸` +0 =E Q@K1?I+W@?G/ ?*s?G4J?Pʠ ?7OVJR@Nh@?Cr@?R?G'FII ?B9 ?1=?E ?Pv?(9 9'`;o@O QԠ?CUW?_y?AbVHHg`? {LU& m?Se`?\`?Nr@ Kv@+f Ie Kw@?E?M @O)]N}[@??5?7?/Gw]\ `R b`B\dŠ`\GMT?1/?Ed?Sܒ?QHM_a`J m @?F? ?U?X?TKu?CY`?7!?:?3U`? X6?;We?Zހ#@\'?A?b?2=OkF4A=`? 6_,`bs`_VC?>F.?SOd?1DQQw- ;.I?RZ?aU?\i?!P U`X- Q `E2yBPB`:?)y;`?&?C1`?F;h\,`ck@\N 47zMa ?2c ?SQ?><3@?'3?<)E?Xe?<L"@ EU-N@? ?%wBX2 `?S?J?9)-@?Em`?$?%C`?K?C΁?A4@?Jie JJ%=0{@?Q`?X ?b?=UNJȘ"BG^{RS@MA@?'`?;@'1PF KBCM\V@] ?R;?crH?KB? = 1^ ?>T`?Q?@D@IF?嚀?Da?5@9B`٠8'?-@?I?O`?2~@'~@?-(?.ICeF;???F?2G?&5?@G ? ?U ?BD'6 ?[^?a 3{4SmAـGZ(:?0p`XNX_j?Q?_?Ic`5MC#?W?`e4`?YsҠ?EvD U٠Uk I\?Cu?Q3 #`Iq+??7@?Q _?LK`U63$Rz`Np?K ?Uͫ?HRX+?N`6p{J?K>`?BJW;[ 0T?/+?HE?Z|T ?\ l@%?Xl?PBP w)?=`?,;o2? \`?%?h,:T` MD?L{}?Vq?Cנ2 4@?-O`?N`?Rq ?5@FP=rPJ`XŦ@_`LP7?1`S97b3$?.dy?[?>!F~XN>@??)EM`%C`?E*ڀ?X<`?O<?>Y?G @?,<`? e 01 $o?#" ? .A*]G3MA`24~?;< S, ?=8$?0 ?5 { +/?K ?3?-?M]`?-`@?$`?L7U?Z= ?R`O@AR`?`J ?S@EA|@U?`Jl`?1B*?RM?<-`Dd@M`=o a`" ?8jƠ?OI ?B ?4Qh@?S f?[p@?P}@?0p`?KT`]@Y? Р?W? Y Bl?ŎE?0n!@SAe 5@X`Yr@5߄?Mm?T|@?1P F`A`EuGp`34?I ?/A*USm4UD0MK3@>@?G?@&?K' ?S|@!P06_F!`?BS@?M@>@N,5Ӏ O#\Ef %]?SY`7 JW?Sd?U4O>`Mud@K *) ?G$?K` `?R9?UIT`T`@o6 ?I?Y@?F? QYJuL?I?OU?Je?Z݀?``?R @Y ]uS`?0/b@?2qGYP~`?-?\c?T`?X?8y?C!j@/+.@?*@?K0`,SX/F0`?R?E? ?!b?3`?  @ ?k_?U ?IF3@OVJ0 CD?Bhl@?V?=$A KfCX?H@?Jr 4> ?U?RP?%`eڀ6:׾ ?$3?8??2hl@?Al ?KM`?S=?W:Ƞ?D 0A=<U`An6? ;,eڀYPU 6 ?B?F>@SmŸ@P5?:N`?Xc4?`y} V7@B Q?%?Qp?H7 ?I ?OAz@@ O(`P`?S?XB 80[5[ ?E m!WS1`?G!?U%@HS?S?^?&:d@Pa@F?K[?[d?:33 {?2 ?&i(4`!?6t`?-`@!#@?Cc?a`?bE?Ag`$L`?H]@?Ta?K$נS V`Fc@>d?M$A ?\ٛ?Y<?Gm ?01 ?:g;?R ?HTVM cx`Rǟ:3?*?6aV@>o?:N`??=@0pK '9?'W +?.4?C97?X?D3?z%?h?7?*;([`?$C 7`:ހ? $A @b:2d?U٠?N]=^`?F?Z9b X\?9?0tZ?`YW`?M ?b^@?Wg#`?4ŀ?&aV@?V+??]€?WUKOKo2>]8#` ?:m`?E9>W `Ql[- ?-]`?I6?V:?Qe?4 `?2s=?JT׀?O7n ?4/@X|@cQ<?<'2)`\[C S^Q(Qڴ@Sn9`L! ^ ? '`π?F?N@?)@;%@C970v?<8j?DU?=?!0۠A^ C0?4L`?P`?V!`?UH?2~@H^@Dٷ#Br ?#3@?Ot ?U̖ ?;B/ .`%?K?V0@?I+@7q9{e@J`Q[?<KF( F!5/`?D?`A ?`V0/b@Lh?B4`?@F ?@<]?I<`?QF?Pw`@U\ UE: '?FYà?\"?^>@?K} = 7?=?,a?[?P?Pݎ7MI ` ?1^ r ?=x?AR@?DA.?ApE,@NϠ?R?]€GS`fŠ]<?h?#`RJ!Q}?3`?T:%?Uu?GQ?+ž`?N?`?[?Ij4F@C@7?G@1`?P,G Cbϼ^KZ`'`?V8:`?` ?FH@Jo@A' ?H@?Q)I3q`\ `Y@o?% { ?W?/<Y`F1@?G"?dGIG I?`?St ?W[`?]?^n6?B*`DHW3?4^c?=? k@!=? ?D7?I&?Ns?_?c ?F If@I6G`R^VT`B4`/=HdIHg`?Z?=J?.F.?B@?J47QXSL%T]@k@?OQd?N`?T/`?TC`(u ?0y?fW?RW?>oJ?0A?B?"K`U*S[JPʠ Dt ?.?QĆ?T42?ES?4| ?Iu?< R`N=`?P4?MJ`JL?4?$`?1s`?JG?QY?QJ`?K@#`Q 3pc`?V{?W1: @\6`Q@?:9?Kҹ?8R`?#}^0?p?82`?G@(#` O (@B$`?:?VH@?AFT<@?D<?R2U;z XT?@P =S?B b?X ?A_``#:D`U@A (`?cr?O׊@6K> .A6H@C3@?6< ?:$)?4U?U? X?7R ?@f?A?D 5J:_< \^`$ʒ@(- QB@3RJ`ٟ`?U ?R<?C;`?Bs`?vH?o@?T?Zú?Bf@&v) ??>?E ?Hi?3FL@M?#pc`?W(@?YFb?Sd|S`EO4!Π>OB>eڀ?$5@F~S@@M"@1v@?2?&P ?1?QH?P` ?@??:;?5/`" ?$?&nQ?G ?BB N<8j?V?I€ >LMo?.Bc ]A`UO.ƀO5o@?6X?N%?Wjb@?P5?1=?C?H@fOyk?7i@?3chRj@HQ?5Ӏ?A}?T@?YZ?B@?Bw?S?GE ?$g @?(>?2?S" ?K 9P`\ 4=@?F/?4?3y ?8 `#@ɠ#i}Q@`Rk ?BS@?Ph0K>@5 { P?2!?Fܪ@?P+?Vu?Rh?-h=`?N&?@K?8H(`0:3RM`Z G T)I F5%"?J+?6$@I^/? P ?So?36@?7ʪ?8:?7 @?W~e?TQh@1&@1b ?CAޠ?0-8`4"?1?FϮ?K-4?= ??n`?Xi'@?blz?Rby T^ bby RV@?@?RK6?)MJU C<@?Nf?34BQ`84`?4@ ?@?)E?C?_=?[>;LL? e ?NF.?9?Ĭ?#R?c?&? ?\T?NV`IYN I <2lR@Q}?.`?;) 4F+?B=&`??([`J@*U?%@?24?Wr`?RǟCB5Q`?I@?1k1>?/`?F@?Pa@?]SQ`T `:?j? Jeڀ<@:?D5@?VH@?C*65k_?[E@?V ʀ?8:k1P ?D?EeE?1 ?8CԠ?.C@?]?1?C@?1dPo@]`KG?*j`7U@FV?7?W@?Rd?2K?E@?Lo2ug9$ ?L%@?@Cݧ?| ?@ C;> ?J`?Ja?0A?@]?MȀ?Q?N ?FSF?PS ?[5 ?WV@6 R# F@?Gi@?` ~?`?A15?P5U?``?K?F)?E?K?=E?N@?!B/ ?8[?X`?S?3?@;H?Z`?cB?S[`MLH@R4`?A?AM@aRP8`L I?3c?4 ?!mpY7 d8 ?V ?, PHV8v?7S`?BYG?E@?9n*?3 ?Y[{`?OC@7 ?1 B;D=@?J ?Rǟ?6 ?9;@?R_?Y?QK?$?`?Au`1UTCL ?C@ɠ?PIY?Ro?K20ey9@ ?S?\`?1==?@Aٟ`ZS1? Ĭ?A ugB`?`?+P ?\`?fM ?UE]@?B`M@V??RTh? .I80[?G /?;xAY%@P/b@ w)?Zo@?Tğ X B~@-ȱ ?@@?Xh?Vt B`IB`3VlLS[US=`Rn>C<@?E1X@0O֠OD`Nѽ O/`Ma -,?I.?\tu`?c@?^%?:\@?4b`?S?`?B Cn9``?Q?v`?P@'?)e ?C?R@?`q?St,JРQkF?G@?D VW_f Sr8?s9k_AC?D,)E? ?IW?`L?Vi??͠?N?I"=61@?:,Ѐ?$G?=?L J$)`;`D̼@?3Z4?!?[}̀?`ey?GAT8 ?D?T?GN _Tn GN@>j ?B?N8`?C>@?A7Y@F]?8_@!> ?T-*?_[?`@?[?@Ml$;`?1b B?9)-@?U?S7?`@?`?YŠ?[˱?Qi`=zl?S?Hg`V`A`^HW?0#}^TXN"{?;|.C97b+LQB*?@?8?((??`CfS#@U9|?&C KrqR w?Q-@?`%``H?G dٷe[ =y@?0 G`Q*`@ '$?Ea?aN?`?Jz?IP?N :sVv@Om` p`?O@?U?(O = 0?<@?€)|?FE5?]7/?M1K: ?RU}?T?4MX.^֠XGƀK$`5@?Ta`?Z,?7K<:BcDj???Y=?;\G i`?!Sy?F?DZ?T`QyK-4?*׾ ?An`?Cm$?QĠ?T;:?0"f.ì?`+@?[$`?I9 ?+ߵ ?4O>`?Q0Q ?FCH @Mà?b?B&?OI E`?LV@?JX`.S*@>?BB ?C?Q' ?T@?A#@P ?,`?"C`J!KY+@W2Y?`0*@I`7$???Lo?T@?S?@[?.>2T@vH;o2LI???[!N?K_>U >:r QR<4?R%Y?HDO" "?^t) ?U8``?9V?M{1Ye> `@?C^?T@;XAP^C&9 ?E ?P`7Ph5LcAYZs" B2U?>y?O嚀?S0?O嚀?2c>`?tAA9X?S]?PpK DDl?]?ZY?L\. :ieB>`;S@Q @?GT`?X. ?G?A(4?8)D6?W2!?D`PRECSX Tr,?NB ?@P?&?C΀?E<)p`??P?DDl?MD?Urˀ?TE?;Џ?@ >@'q4BC?-O`?IEM?Q9@?Qm@?4%?DM?T@?V7%`?Y'`?WHN?PK@?QM?Tv0?J?U ?)y;`?MZX?HI=@?DA.?I- *) OAxB J^T`d%f\G?$?[[@?go?e*`?E=>>@=(=$A #}^!W 찀?Wi@?`b@?"`I} ?8`?E3 GO0`?Q ?^# $k_M J?D?PS?FN@?Qi?4k_P`$`?^֠?b?M3`%? `?; ?e?5?h?@U?`G36V꺀'S`?<<`E QXX !q`?*?&ڀ`?Rʠ?Y ?=H"@4U9V?L?I\@ey?3ch?X?D!9@?9RI@?K' ?J;?@SȠS?0g?O% ?Dz@?Jj`?I@ >wK"c?>?NH?*!&17@A*?#t ?VZ?]oq?R+L?J4c ?I@%{`4̼@?Qp?S?ADT?@^?>%?&-h?D?B BI Wh L?5 ?D0?JBs?W@?O'`'D?:.`?R`?[Qr?W?HW?;o@?HB ?PD@?>]?/_u ?L`?KpG?;j?20+E;Q<7? s?Y(fXeT?"J!?;X ?R ?[?= >A `?P?<@|G]f?G*@?LqWT@Z0 ?Kk?UGMQ\:?$G?Y!?>EQ`?k6/?n!@?LJ`?E`X ?&r ?Dآ?4>,n N?O؟ ?X ?FA?8 ?J$?5Y_@ ?Q@?Tb'@ ?Uf?VB@?F#?T?Y<?.`Cv?fZ?CЫ?I&?OAR|@8`?J;?Lx>?IB`?O̸?P`?@ED@VE ?8i?,aBmF=)@6N@?A?GY ?A?P1`?R+@?;N@???RSS?Gg#`?B,@?S?@O֠*`?OZ `?V1@?Fp{?LlX@G?R<?\P ]z`V? >բ!K?=t?:-EF J>8?Ko2?7xr@ݎAs?B?@Ĭ??  S*@DaP["cRc ?N 5@Nf^q@UŎ?<1 ?JG@( `N]T#nJ- JCLˋ%vʒ@7?L ?\<4 ? SB 4L`?Ps?Ek '(d?B?Q?F?d^Ш `p?2`?[?@`N<7?BR?'i A@@0v F+?[SE ?G4' UGl :+?4?`;. @MBG/@P?C?J'g?Ve?LV?F7?F@?Bu@Rk A_``?R??RQ?%@9@;6T]ܴT8+J[U@aq Hl?Wɕ?5h_U?@i?A@=/8l?%!?_ >F ?# )`EV Ic`L $Qw- S@@B??` k@`(Yd ?Be`?6Bc ?7!?"4`Tb,8?Gp`???:I?R`?<[ ?(_@?GF?8ҡ?&1@?93Fk`c/Nu?QĆP F?=c ?,` 찀?NO?F/8CԠ;661?]K@CuLK ,@(WM?%?Q?JIQ4`TM$C ?BJ!?IY?U ?Q@[?,a?O|@?RfB`?0= H?Y1J`?,X`P_`EE??(@?96?QI ?Rg?2^`&i6?5?LL=cQ篠?NX?+X ?T`?Qߒ?5?2/?Y]@?EtkEh+C3MF߀NY`Mo W7i@B,@?x?P `?Sf?GF?;U<?vH)/?Ch ?S?@R ?AJ`?X59?5'aEia2!?@T??k?6?0M?24HL؆?A暠?b鳀?Y P ?P0`?OW;2Q>?2=?WbϠ?C+&?C?Ht ?PT*?Z{? ?IU ?(y?Z?]?! E"[e KЏ?2WF])CC]@R\:b|P@?G?25{@?>3?MT?P@?`]\?cZ?[ ?Y3?PS `1 Y ?Qc ?5@;U<I9gC ?=?R. ?22UKSCw?Cx`?Yp?aR?]ހ?81~?EH ?QD ??P C2?Ci?8E3GG`@ ?/@>qtM-SWmFX?EN?DE)Y>>@?Ca><7Q`u@?9?JD\9R@?(dI?R?X6N?NX?0O֠Q<Y?3i?R(|@E Bx Jeڀ? ՠPVC>@?7w`2<[ ?Na:?W ?T@?a?eG@`?TE?'`?! ?r?1?L_ ?B:0̀F Sð@U 0:3?S?\>?P NE?24`?A ?Qe ?3 `ۖ$?P|?I0`?!8?CuM/d?E= ?T??S?KW@`?34 ?=?E@?OM?BD #Oo 3pG?`T.i+@?DπN`cB`Pq?T?Wϫ@2Xw Q K&3x M S@ ?@?Rp?Ea??'=? z׮^ R@?5p?P`?49IMD`7?Db ?E?Lw݀?G `>]`IQ: /?N,|`?]?"m`V.J9 >^P\@EE-?P@?^*`?Rl>`6%!~ ??4'@?0?;@?IZ ?/9Be@@ 1L?; ?&nV X?z@?-W @]`ʊ`G@_lT$I?,q?=)`?<@?Cz@?H`?1?<͵?T?Jg2@N7@MU@?6k@?SNN ?4@?Y3 ?A? UzuZ!KDs:?8?FY Pf_( 3u?\%?[`A+[u@v@PFN@?Aѓ?6o<u? 02@?L ?Jp\`?1AΝA!1S) c-d?N@?Z?P{;msQ'UPG@K&hCԤOɠ?.@?`hp`?P{F!`?!S?SѮ ? @UR`Od?9?P$[ ?P$[ ?Q ?A&?2:`?Sy?W G?Q"0 ?-#=,o9? ?D? \0a`PNJQi1g;рQu`P:OK8+?7R`?B%?TGX?@A|?0?#d=2Z@ $@?U@?c'x?Q3?@?Vc@?a)7?BɠI&3;@?=Q`?3o?'r`?ՀAl`0ez?@})OM 3;@?Q-?X̀@?=OA[+2:`7RNOv@?8`?D?KGL`bd V5:@?C?T?i`1#@L͵E6`S1]nSƔ`LIQ: 7@׀>@?@@?*PQ˧UH>H?DR?Ks_PUt@?5(kG/?$[ ?H?\?dK@?XA`?K?aM ?`@@3z@YND`EB7?1 ?5b?5~?0})?#z@?>?=@&a?FI?SRe?SV`?Cn@\?%M?@>@?6F?9?9e ?!>?Pl ?+ LPP_I ??U?V`?$YU`M2?+I`?7p4@ 61t Հ?H0ABV@C9ߠ?)n?Ww@?amM ?H@?# `?QG0?7 GN+)jc`?FXx?7L?g? 3H A=8.@@ V2J@?4h+V GT@?7d] ?ZHf ?a[+?`˚?WՖ?C=`B@O9?7I?PB-9`?C@?AIh?IIӠ?W?:H`L?Jw- Z܀>r ?2@{ ?SoA?UH ?EF9KA $i`?(@"0})-20 6??QG ?KDFm1 L֗)pO?0?Q?9'\OD8 ?S@ ?: <`=?D*|?NK@?J?TEݠ?I?B?Wp?J* RXYP4 ?4s?(v? ?*-?J)@?S?C)?3?Ow ?Mp`?1j?N ?^ ?V??$?l?!?%ڪ@? ?1xŠ?J?[c?R׌`?Qq_ ?TN?+8+;?CM@?S3P ?8-@ t?HL?X!?J`Dק VRSLZCK@%:@!,7JF}y^od~zR*CC[UƯ 1@F@2?6?@`?S@?S !ԉ@?9?V2?.A`#י?D?0?J?\&v /9W`?1?-?)F?E`?E&0qQCڏ6ˀ?BJ ?` t`?P`TDb ?_ `?BK 0z3 9F&&?0?GC`?G|?P?6 7i ?F_ ?_@?X$?4%/?0A?RG?Rc?:I@?Ie?Zɀ?D! GBR?;@?b|'?_c >GU*THM 6d?I?_  ?S`??`?TRr@?_o?IU?5Xk@?T?R `?B4?T?a?a>O ?RwX8?jTg*Sf` Q,F2Ծ6yJ;!?@4h?:?I'9yKj~ /a S?GS?bk?d?Rv!?.]`?O?6-<@ZCG3ZGI 2@I!`?@3\b[P`3#@G? ?U$?$B*`?( ?X ?Vf?U`?Q@F'`=?S)F3x ?^+?eͶ?N@?=`5 A& C`Tq D.?<?Q?Sg?NA5?LB?F%?$?;A ?Gi . ?>LO>丒@CeQ?ߠ?a2`?Z-DԱ@?2@?]??@W+_`a4@WA?<]9`?Vt?YZ?]x?RLl?CH?]{?hmK?_q`? 1L^?D?SB`?=,o(T"?Qks?bV ?Q0?B:`)`?X?bq ?G?`R%LgR>?I?Y1{`W:I@?0>@Cd'>D8 ?V.J??`A ?=&?T6S@?Mf( ?G@?4? @C=(A>8Z ? ?Ss?W ?F*?B!?C ?)Z ?e %$@?E ?Un?N@?;/J ?]?8M ?Fk@@:O?RB@?_Fp?A?;/J ?K@?Kf `?V @?5`W[{Y?N2hS{ Z`%XBAѓ?R{ @?\E`?_ ?[=`?-?8 @?^?Q@?8+?b`?hf?U~9UF?,Ы`?P?=<GYV*?l?AN^[4x@U4P@UZ?=d L>$Yt@>`I?:}` O>`?Smƀ?LwLpw,u?Zn$?RhG:_ `E$@?O<Ѡ?Sn?SG?\m@?Q5#"^?V:! ?Q3=J ?B?F}yBԖHU?Tv?dvV?XGKʲ?6?O@?f߀?d^@?-?7?V`?J o?IHX?O} XH@dic@X]`Zfc~KО?SiU?0ezU]L@pOw+ } ?E{?|`9 ?@ ? ;+ ?(j?COo ?Fy?6[@?2?D?O]a`?I A>O)C:f?-X?-R`4E @-)y@KLQU?S"J?ciU?I@@ )?8@@?4?2N ?Yt?Z Uc@P`I9@IX?0-<?F ?N g?Wy ?X|@?^`?b2?P {`?J?Y?@-<UoX N@?P ?P?FC@UP?*͚?D^ITb@`@YMN( ?;?H7MXk`9F?Tr?<֗>*'`?$͠,0`V}O?S Y?`q?RX?'RRP?V?_]a`-|[-?VH ?R?Y?]Z'`V`A V7a3 >?Y[`?Ub 1K ;T@D?Fh?9@?-?I0^OEV`4@/#D) O`4 ?E?C@>I=~-`?B?3d'@H?6?Hdj"?;ms?Sr7@$_`TKрJ TrDR|@?9.`?[?YF[#s;j~ ?< I}R NJ?@hp`?-^?Lٌ?F֠@@9O@?33?Q?>JRR??6?K?LԠ?:K[?ML?C6ee??0?_( ?b?;РDק @x@> q3XPBxGq ??g?Q!>`9ߠ?@?*|>ӆ?4?Bހ?P@?T?D7 3,n ?;<EMY?w`P٪ ?1-?P?Jq ?-@>NTKvU@?ML?St?80?BY \%R@X7FN2h?8?C`?\0`?c8T~?s?Ec?>P?H-?W,?]3 ?T g@?L`?RW?8'\@?1-?*ǯ@?$_`?*{`P'\ RzGp8-?a1CM@W R2D? > Hl@>Wh?> g?1Ih?8>G1?M͠?S~`;LB ?ES?#=N6: ?Z`LXA<?O@?T?(@@;?Co?Ow L/WaX@S]©@T<@!t1@)l?5W?KǼ?P?ƀO;V?+ ?V?Wݺ?M<?3x ?N~>!= ?^6ؠ?h9?UR`FFQG0:T=@&Q 2M?M/d?X?6hAB`?[6?%. ?A ?)?)ߠ?Q'?Ve @?? ʊ`?<8??@?[Rx+> ?U?W5`?9w@%?+@T?3ڏ?3@>R@?S%?OT?&3x ?Lٌ?IC`?>S ?_]`?b& ?<0DkB68HB?W?4I1iHt`. %)5:8z<$ `Hdj6`?8.)C: 3=`0J`8T"VV`e}`[?<@?CN?K],?X\@XQfE` ?#!U`?P٪ ?R%P aNAu`?,Ev@?)ߠ?Y ?ST@?C ?Iv?D`PA6 ?V_ ?[@?0 I1 ?C?'@?Q ?I?;X@?P?JFZ2c(6`?e?V@?D?,$@/gB?+g@?@)?!?Dp @?F'`?O 8M ?2?FXx?7[{5/>চ ?S2?Y?IsD>? ?8?m`IG`?@?I`??:?F ?M`?7`?D+@?Gh?_ ?e;?K)^NOy`(ʊ`?I;?L0?:@?,?#+A %`??G-/CQ? Z@kol'3Y9@@$ %p?Od?U t,$UZG1FJ3?I<?9RWh`[A?'?N7@?GR`?\XȠ?dV%?Yi?E1?Dm?? ;LSRe;ms?Oٴ?P@?0_w @K`@ ?*t?SѮ ?`S@?C?'@_a<@C3@%G^?@?/& 6'm>?!`?3r?G?5K,P 5?D1?7}9`.? ?QA`?]?UM ?F@?&\@=@:c @?5 - ?< M' E?`?9 ?T@?[F; ?R>\?Y?WY R+a2?I0?G?I?"9.`>Wh%m E XAL^?1K։CʀD"2?P`?6w`F'?Nys ?_`?G؀?/g?L?T]?Q@?Q?`$ ?c ?P@0r <6&y?@͠?FY ??T"0 @?A=?I&%)`?K@?AV@Rd`2 :NC#@)?@b?= #g0 @?@M@?O%#@?=`^?`BX)/a ?5~?5R?=@?)|& L^?-)y@?I?T]?AOߠ`O/?!S?3[?7/?DV%{UK֠]Q`Y]@ o?K :*WU 2D?,<RG=Z^Cڏ@> gI9ߠ?I?\ ?P`1`3d?F?P@?"?:R?M8F@?ez ?c9;?N?D}^`?F!`9`P>?%?A6JS9 ?,q?V@?_?[[?Cz?@?O@kJg`-!Fs 1Ȳ ?w=`m?<ʿ???B ?Bm`RB 0 `?:ǯ@8kHC% 2@?@3(Z 77 ?CQ`?@w=``?D?Ut@?M `?4 ?"`?A?AL>k?/`?C??O@6`6?O@ ?'\@1?"`&!`;F?GL?WI?LD-;<XQ,[ DI ӆ?&?Bw ?:?? @?SS?TM?Q7 ?[\n?_u@?N6, LA4@<BD@I}?" j#IS^ՠD{`?FN@?L?Xa ?Vt@HP`*P,Ы`?CѮ ?DڠzTa|Q+#3UV`?;6?CE`N[XaH@?2ހ?C@ ?D+@?YG@?acO?Q-L?`?S ?U?`?>٠?B(?b_?kL?bL @?@w=`?A?Tj ?.UlG?C=ݺHʊ`?7| ?WE ?V ?E>}Fn?5aL?ND*?Ix?$,@PbTU,q?C\@?P]`?J&n?#x@?QX@W1*?D]?7 #=?3ڏ?8#'2 C4? pO?DS@57ۀR]q`@`G5BѠ&?BN?> #g?)`?FZ`?1* <`&E:?:H`?QJ&`?H*`"Q [c1K ?a?a$?P?(+Y@f`\B$@?Iv?N`?+ ?Ab ?`m?\9?~IBk ?B<$ ?O3@?>ֱ?yK?6`?(ĞQS ?Lj`?XR?) ?Fq?W@?'?*?P%20 V``?Ty?S5?"D2h ?R/@?ZA<9S`t>ƀK`U`@X(?Kq?a ?ZYk`?UGe?Q8cd M C??' `?@¹ ?` ?f9€?[D?*!?> ?]|[?QW`Y'?JF?Tm2$u@+?1 ?7F Cr3Oo ?NJ@?WS`?LRYNoMfL`?*Ep@?5$iSҀK??AB`3XP?B9.`?F2O#H ?P@?Y?M?09?;vU@?G ?2@D@Q"GLJ@6-D*6-?NK?VK&?Hg`@?B#?@n\?8?D6?Kq?Sd'?]?Y:I@?"X& ^'N@??9?g 0?`p?J-?HA#@\w݀JT=@>4@?Հ?`7p4@7s* ?G?H@,0h?C@)//At,ʿ?k9鬠?1@?]?PCRZ{<ٌ?I0`?K`!?dO?K6P?8@?]`?R?{`?A? ?e ?f@?B*`SC?G QL^Po`_}3`;`HK`?S?Fe>} 3x@I9UV`X=@VnRހN`@+?=@?W?R >k?5~?``?Sj`/ b ?H-?WNE] @h?:??2@??PB?b1?[-@?0 `?+?HW`?J`?3יJS#NNV!`M͠?=g?^V?(M ?,6KV?3u?a ?a`?Q`?I?=?ZА?S\4?!`?Q Pq1ż@?1]?;@?L?D"?)ߠ?<?A?I)C?U4@?K`!>BVUT@?51?U ?#z@$_`?R*?R!?K?V:ޠ?002@W Q`Y=PS`I8AU@?p)1@?<?FR%RIv@Hy#?;Uŀ?B3Oo C\@?@?O?T{`==a`RƇ 8KA [,D?4?b?` t`?;,?T ?^?:4UR9.`?Hb?PPPZ@EEe@Mc2@Da?@N%R8p@1iA @BAU`JRW؀]g T1% ',E$8+?M֤`?M 9Ԁ>ĸ@?[?E`b4^_#`?K7?BF`ác*{`?Pl?F@@?7?U2`?b?Q8?E`?az@?_{?N+E/b1( ƀ?OE[]a`,*G a^M?T;`?X?;RE@>!?`V?^ys ?7 ?J9 ?_L ??`C ?S R`P&`?3Re?8k2BC*nN @9,9?:3A[+Y+SVK CB#V6RAR@?B?Q9ހ?QY?XI@N@` SVՠ?B$uYTQ3=f3d'?4?X`?Yi/,`&`[j~ ?z@?H@5 H@?@ ?Y?K?Ra_RG?ɠ"0 a=a`?:n`?ROa?,`/ ?3%?G ?)SQ``@Q`^G_`Q@-#?6o?(N7 ?1 ?QL?M7H ǯ@? `=͠V'ZȠ; ?N4?CQ=͠?`?Vb?DiQo@ kf ?_@?QS K?-?_cM?1*b2Zl?Bb?QY?5a??G @?Q6_OWu?5N`?Wϫ@?M`?Gi ?Q?JNQ?C`?H?R^@?W[{f@f`?=2?ElXRS?"@$&z@?% ?Rj?E(Ğ?OV@?V,?.-?N,|`?Yv:/2u`Q ,w2 `8z;|@SDh?2 ѠPu\C=:F '2 ? Jy=K.-P%7@6!`U= 4Y?Yt@?UE?"!?/b?AwJ?3e?HQ,?Z/<?V? `OTW`0?D"*`OB@??N@?`^r?R|`CS:W3?V ?[UT`KqDPܠR/@@o?7?bL  ?X:;?UU3m ?N ?U!? ?5Xk@?bL?a"9Z Rr)??@?mFNJ3(>GG}`IR?L`?`_?4}^`[+?b@?`SY ?IE?[Z6@?c?BT./@.u`?U`?Jf3Oo %D@?:$?:\1AEh ? ?:R=0 ?Gs@?%{EL?)?U?T\a`)@?N?SoAG @Cj`&tD.?#?P@?A^!+Fb?s?[4x@?G}`F[n`?R|`?bF`??a >*|?3UZFĄ 5?D #@,*?`V~6Z4 C( ?O/@?S`?&`?624}^`_z=X 7| :-?,?T?D">;<?R1 `?["?FR?*??= ?=R`?Ek?FQ /@?1?,a@?4B*`?Yw?eH ?WఀSBaxf>?Ww7\@M9 ?Yr`?\I bU>`3d'K@.i+@*n`(*`&`J#eW=?Z* ?b?CeW`Mx?QA`?T?2 Ѡ?8`?Or?89n?Bx?]{?J[I|& =?@?H8?G-?@y?Cr?I>V ;$S-dbJBz?EӀ?1i?a S`.]`4ÀEԾ?3 Y?6N@F4 ?@POb@Qt`?@{?ao?CR`O?:*?B`M<?$*|?P0JPP ?1( !#@AؠK-bZC`? @HFЀU"e?G?V|?>c??G ?9ER2@Q]d.9΀6`>O?6 O/@U ?Id@?\'3ڤ)RI^@46`?C#@?Z?QF?+ms?J ?Qo?8}?N@?\*)`?#݅`S?=/d?[?5` Fp'0:3LiF'`E@JfID6S@?)C?/@#d?*]?`(m?_SG?'?=?;vU@?R/?W_`?<0`>;<?R?Ux?5`?@ 1?Pu€?Rg?\ ?Vk@?$k?E?TF ?>H?B?C5s`?C ?Y' >!a\e[@Q@?Se?Z*|[@`K5 P ?7| ?A.+1Ȳ 8}C{ ?5j`?I575 FBE ? -?" ԀB9Q <k?:w?6(@?Jؠ?T`?>٠?:Hf ?YC?V?'`-R`? ?7\@?5I@<@NJ>ƀ?QU?J?E?[F?[W?+,T`?4"?Zt?C`S0A?S?6`D??E@?,%5mB 0?G+`?XO?Tì?B?1A?N^?[`?FO T`R?܂>P;A *<P&`UI@J#e?U ?b!U`[> !t?C ?C?]f?[@`]l X7?,ZCAa@C?1%`7G?Ti`?cp`?U - ?J[?SɊ@?T?Ut@?[55?W،?0>c??B\?Zgz?Y@?V0`?J22?);?P]V?VU?9`?A*?J> /D8 "\?%KTlLٌ?Kpi4?@?Nf5`4+@V Q"? ?J?@)>Nl`{`?)n?Q[?UQ@?L^DNtal1]6`?D~@?U@*FQ ?4wr?Q?Gđ?`?;A?T|?T+?D{`??:?[?`?H@fN?F ?1"?J?`P?MKU UE-9gmK։T $A=0 L0S9 >r ?8?Ev`?S ?` ?Y!?%m?>t`?_]a`?T-qP`Tt ?.u`?Ce  _?*4?'EWV̀?J#?BZC8̀@?B68?2}C7d] ?Cz@?Ux=?9@H@F ?@ ?@<TW`R;f?QfE`?RI'[{?*r ?N6ؠ?J`?KS?9591%`?3~?3I1uC6E?2 ?VP?V?Ll`?'[{F`,c?Kz?O"-?Qx ?F KUŀM{1OT\@c Aؠ/?> q?T?N?>/P@@b f?7?Q4@?W?E` ?8 ?@48GjHCtob`g g،1 ?W&?3 `AeN?1 ? ?>l!?7J?͠?29?9o`>JR?%4?^?SQQ\J @?2 ?F3x La6 ?D3]`?8*`JS\Ы`Z @NPr@JI?7=?E\~=;<AB>!?=@?7O?0Ծ6_ =?8`?O?Z<?Qks.U0z3 ?FY ?:K[PW@@S?8@?FĄ V%hX59 ?&`?9 >O@QA?"?J?O&(@7s@?O9?E!ZX]?Qր?Z?'`A-HUG4YM?^`W1M 5~?"tb@?+@?2-W ?F?LU>> q>- GR> @?P@?UuG?A-IRo4 T/@?$_`2}CWe=m?3Re?Pz3 ?L`?Gh@?F-?P@ 繠D"?@U2?Rh ?#Ѯ InM4 W(P[@?$D g@YЃ`7s* ?D{?=j?B:@#@W`RqC RgP݀/: C`?HEU?_F?>w@]^¶I+s_?,ʿ?;?0 @?AMـ?C݅`>t`[<_I`W&3`PXW`[BAMـ?H@?UdB`?Tp?A ?2?M|[?Mt?NS ?^K ?Zo*ӆHW`?* ?G,?4π+`3 %/,N G?57@?1ul8:]?S?fd?`%w@?1@?j?/?;aC1Tg@MI=GU ??U$?Db EҠPA?:͚?M9 /%2??J ?Qh}?4<>LS @?!`?F!`?`?E*`?Sz@?JSw=`Q<S`3=?@0'P?0S?Q6+@?A<0Q[o@Sd>ʊ`; G 4?:z?X@?<"`\֗]S{ YPC?? @?M<?Y??/M0C;@?L8KA @" ?`?3Oo ?"`4 @S U>4<>?6Ҁ9F@@Ep?(N7?M߅?W Ǡ?Z?K`>=`?!S?&Z`?:?Y?W 2`OD8 3d'>" W)) W`;X@ DH>ƀ?Z ?YZ?:@$Q? _ @N+?Lk?Q ?6?#?@f?#eT@Y۝ ?D ?)n?Fb?Mxƀ?7`?T@?! N`?7ag@?V ? GQV@;@?Cf@?J@?N?P?F/`?J͚?Pb@?F ?L?W&3`?QB`?:q@ )C'T?FBE ?Q`# `E?&9c?:͚?1u?4+@?%v@?1[+?-GI8t`?C(?C?[*ـ?A4@[^6M @A{`h ?R?@?_ ?\?P+16WkàUԾJ'`OX Dק ?/?1i?Ca1?Yk ?H@KK+ @^ B(?,a@?A9D`?8 !?Q?B`0-<? Ѡ?A0oRc OC9;:͚A M`>9΀?F`?Op?;`?̠?2$u?BUM`?>`I?5b?B??3JH`B9?3[?; } ?)nY:@FO UC\5C Se9'B=WS?1>E`(?ǯ@E Jʥ .u`(@@9鬠z?8n?9.`S(T{?2ހ?Q~ ?Q?U?62L3@?:I@?\u ?F9c?-R@?[Ǽ?b`?L`K?Q6?dT?a?P%?E?I?K ?2c K A?F,?6 ?D?M?N?LL:wVO@F/N@?R\?^m?U 1S[SGi?BѠJIw??s?SS?Ie+`>H?`,`PL>$( ?Bހ?E= ?)5? pO?4?<?H-?N g?=2?# `C1E1AΝL #1@?WH?UUu`/,KR.c??(M %FA2@_5CN|YQ: \ `X`d^`bnvC~?T $?Q?;,?A?>t`>`?*t?I@??CʀM@~6w`?=?S`6;Z7`?9Ԁ?b" ?XT?KK?Q?M-?FQ?N ?_?g?[f `4E% ?"ހ?F "\].@VV@@?E?C`31?7S?LB?P|`?U?V^d Vh UgS@>?S#Š?SXPT"W4B>E?a.@]5P?9v:?Fp'?@?S?1M4 ?2?Oo$ ;g@BΫ?F?O@?>0 J!J*? Ѡ?*@i ?;|@?P)@?E?+a>@s?"??٠#+A7k?T?W]?1">܂?+FeS5Cz@;#s?) ?Wۂ`?S.-p`D?4H?;7?Ao@?BCO Mc??; ?8`F Y>7X?O>I0?B׌`?X ?HC?:Hf ?IsD??& ?%Ծ1@P `A6?8EU`?A˧?^?U@?E%I0`+?Bȿ`?Sn@?Z?D MJ o?1?M3Հ?[ TO|?R?Xh?6 E4wr?&!`?QWx`?/9I=`EV-W@UgB*a`?.? 6ˀI!`?AGT*W3>)C?=?RD?+a?s?@ ?@`vޠ]?5`?SI?D>@&6e?D ?>E?8?C ?+@(@7TOPA7!?\'[{?*h?N>? ?VV?Pܠ G@0q@?AS ?U ?Yn?L`?$e;Oܪ7?I;?2YJq ?N9΀?1>i+@/P@0z3 ?6(@? Y`2`i%F?(??v?8b4-qS;@LQb ?E`?b?e(?W?0`?SA_?WbT@e -R`?W0?;@5㋠%v@3e? ?T?X?=?!7?0`@GBLl?D@?G@-?q} ?%D@?" ?9?S ?R ??l?Ja`?X3?[eO?GM[B?S-d?W?K"?+aRU@CpR˵@P_?7@?1ż@E:@Vy`bUM`U ?Q.@?MzV(^`_B@?F ?U8?Rx?F ?JI /Cm ?A7@?# `TO@K?K`?[ӓ?W\9 >Z Yf [{`DT?4`?A?:k?Q?^?Wf`?A"bQPx@?;55?B[97&\@?D ?PM?D?DV FN?"9?4_@?0繠Gӆ? q@)@@Id@5F?TC@`+a?Xrz?VW ?T@?O%#@6֠Hs7`$͠> ?A ?S[F`?D,@@#r?A? ?PG?' I=89~`?Q8c?]@j ?G?0J`?bKO?f :w^?e ?Pq& IDF @ @ ?Bȿ`?Q-?Z>?]?H۠DE @4 ?K ?7RQQI?O`?a5m?Z鹿?EY ?Pb?b+@?c?`b`?ab?e?ff)`?V_ $`?9 ?Q2x?"?,a@?D7 K[;!`Xs7`b:`[! ?;Uŀ?:4?XHi`?Z$# ?RTQ^Fc ?X?[/J ?V6?3P{WҡF鄠?Dzh?Q`Y?92%@?15?Ox?VN@?OA `yuV@?@ 1?Ldচ 0)?O?bb@?`~`?W(k?S@?I#X@?NG ?X?C\@A~ƀ?D~@?G2 ?C-d9RG:))?b43]`?1_?8?\CR?aN?aG ?W`2I /!S?C?]=`?c/> ?W4B?Dp @?^Vܝ@? `JBzF֠?Y>?`;NBbG^q@< ?$k?:`IN?Y&N ?g?JUA0??U?SCBK?Sڏ?gp?`,@?JF ?U.?bt?`Ȥ?Xk?Y(`?c ?f?N@Eb`?Hv?VE IIӠ?>( ?vM`1 V3x Y`?1Fs ?-@I`A 7+> ?Ej`B*`G?\?)@@?-29V Be@Uy`K_*9 ?B{?U?Dt}0$[ ?(Ǡ?B!?%D@A0?OV@>@?U3j?D.L8M3 ?) ?Ps ?N ?M&?YA@?cX@?e?_z=? -NA`A35`1OT?;?Z8?S@??(}?,01 ?*K[?EiA`GpTF O ??p?JS?Ep@?CS?ZR`?Xv-@?QJ&`?J{`?/D8 >NJ@>S?[ ?]?H`?Dp @?@q@46`Ν?D@?FFI@5aL kf BOa'ݺ?P2j?:I@?I?G7SI;EX Jʥ ?<?VQ B Xdj?X`@?i @?<X2?U~?T?( 5s`?IY?]&?Lm@,?9.`?8?5aL?5X?5Ծ?P$ ?Y89 `A7?1 ?_o?F? ?=/d?`:c @?T?>4J?(?8$=( ?+-`6hGT@L>^?V0`Q%`U~?%m?q 4@?@!e@?" Ѡ>N? H: TCb2 `?P@>#@?)5?)pO?A\?"nv8?"$6S@< W3 `?Feʠ?`kf ?bj?QC}@;yKJ[QSZ?l?YL ?SY`8k@A+> P?D??Au`Ev@J>-LRAR@`$ @4?R߰`?Jg?Fm1 ?U@??`IX?O?!ZF-U@?2@?)F)?GU ?8>丒@A5TQ5>!>d ?0?VR?_p?:A?C?I $5x? L[?TR($T0g?Q2x?a ?bEH#`?FC?E&t?!X5?1?7v?E?$$DzhJGJ. q?:\?6???Hk`F ^?'y?b?XW`?K?O5b?j?Y=?X8`??<@?@-{?.U?/P_TQ2$u?Jg?R/QK@ *F?Z@?L$@?"@?P$[ @[0PDFLf8-LDP?@R@?Eb`Bd`>*`?^?D?23BFDP`?-X5g8@[`T0yQG `ӾWݺIx9?0D?$πA7 $?Dm4[ӓD?Qe?G*?6d?Q<@?܂Y ?U?W?HUPZ=L`BE3(?>Wh?B#?A35`?4L\&@XEs`&K&(-?2?]?b1?CS%a?NT?Q?4U?D@?L0'PLA!rR[@1A?Bc9F?(B_?X?1P?N@?I3 ?>?K#?R0 ?E ?:?Ebǀ?L@?K?Jn`?Q ?PN@?)@,l`?J$?_@?]?V$ ?PggR>s?M?X?OD ?T& `?C_OI7/TV%QG0?/?I?@F@J?-@?N)A? O ?B@?m`S.`=G@?6N@?Ew@?H9~`E% P ?Kn?Jq H ;D?JHf ?Q%`?;tAt`KU3`?(6?;р?' GOw]G?M{?H U <`/ C_Ln `@_AB`C݅`1_DB*`GG@CH77 1AA"I&?b?Pr ?Bc?1 ?Nܝ@?qWi+@?Vj?PyuD@WmMf@?6?RM)?J ?(M )EDQU@T T(CGgR?&v@'?D{?@@OjS?(_?M5P?"Dڜ1U`kf SԤ_:`Y۝ TG!4B*`J6@q ?Vv?;;!`Gw?2SҀ?N ?N-@?]w-`?bn?Y?[`?e#?`߀?4`?@?R?N<@?2`?E`?D͠?2c ?Hk`?M;?5~w 1 >?0?FP?\ ?R StoXW+@>͙?#=?4* ) I89'Ag\[Y+?2!?Em#?.3?E@?N2h?V;?Y9? 3I?Lɀ??`CF#݅`?21^!PS [ [&hMp`?N?LO?HKA 3݅`N!2@?GT@?K`?J/<?UP?D"K<@A@?G`?GS`N[ T?4J PZ`]Z.M\A""? kf ?DP`?Uw ??N >( ?Ch`?$i`K`W@ N ?Kh`?]`?LB @4ڠC:`?GLJ@?0P>X?Jq?:gCFAiP9 a2x_b@F2?66m1˧ak[?48 !Ye 8.?<"`10H6 A ? ??& ?a@AA`=`?8-?MD`?^!b?W!@?:(?Ql1?g@ ?dʠ RG?$B*`F ?07C`Z t*ǯ@?O/@?6 \C9;T.I;?Q ?\zOF?C?XR?]5P?QE@LB, L>Ǯ^@ Ee@? ]?Aƀ?MA'?L L?1%`?B?O(? R@"%?4:Lӡ =;<E.PI F*PuS1FXx?- ?Di?A?= ?7jH?._ ?3@?S2`?c@?\c3Ly`@)?F ?Rd`?OX?7?5`>WhU?`Y@@UyZ.`T`(w ?JĹ?\?W?+g@$! 4?Pp`M;/D8 ?'2 ?O} ?Qu`g<?'p?=A'?XEU?c] ?SA_?C`?[?R03(3.`C`S8S`Sx@8`?+R G}?^]`?V)@9jc`?@H?Q?*h?/?:[?#=#eL3@O @@z @b?x@?Cto:`S 0b?Y'?d/K?GRpG-J8@R?&117 \2M@>O?Z ?$`H%. 6Y??FY?^i?]-,7@V`Ds ?Lɀ?N+?0z3 Wh?AJ?V @?M* 6q8C80RѠM08MO)C`PM`Kc?=?T{&?H. At`T}`J#י?1( ?<; ?"11L?@ц ?Z@?PܠGag@F?D\Π?T>`?W| ?Wp?V@?^?Y'?#rFdOP Q5m`?E?B?7@?N^?[ ?T?@{2H0?E/?a?Y ?A*? D?He ?0'P?L܂?P`%a?5:@?b?_ ?H?F[@?,a@:@"W`T!?G`?Dπ?<-ܠ?`ˠ?Z!*?2tb@?0-<?TB*`?`p?Y@?`V"rI]`E =7@׀VՉSs 9x??Z?_0`?0< ʤ)?@:9 ?G?Qdʀ)`?D?Z1K W@`?;<4eQT@3H ?@[@?"O Pܠ?H?UD[SZ4`RѠEzu?@@?M@?Gw?P ?[?`Z?N( <';`D\ΠXl@R@62BxB8#Gd ?_i8?U״?H?Lʀ#@)|& ?F\@EV` ?9E?@@EO0`(vOuN`7?E?ZH`?_6(?_*`?IE?) ?O?`??A:?CQGT`?H@7=?AMـ?a"?UN?S>i?W?8?M3Հ?` ?R9?MH?S@ A!_/T_`8T" ?5k T O?=?C@Kj~ O/?>t`?ߠY,S2QȲ B<$ ?8 ]@j 3;@?GZ8kVƼA?C(?Q@?X!?I8NP?M3?a?TAm!{`C0 ? &?H@?Z?PJ5$S\@X M ?9.`?D8 ? ?F?L?O`?VQ ?3CY[`VO -;V HǠ=pC@ ?Aj?O ?*g$S@?)l?=`A1?%K?Uˀ5`R A=feʠiu`>ڀ?8t`M=`W2 P@@H4i`@-<=AA`B917 T`_32?=?`x@?H6ؠ?L ?G5?a@?er`?Qj@?Xk?h ?_7?I?IO?P7JBɠU B:@?M ?G ?Lu?\w?@x@_ cM6RV ĸ@?.-@M`?RQ[ F[?5N`Id@S?JĹ?RSҀ?PC?BjSJ@?Y`Ā?R'kLl`5C@?Kc??2u`?0 `?9C )C4hC3@[Z\&v ?0-<?V?%ԾJ9 %m?0>@?9 ?(B_Bd`a厠a|x |`?SW?R?FD?  ?͠?E6`?Cր?B%?X?Kk9;2 ?E/?U ?Qe?7C`?)?5 3~?Fv?c\@?XL?`Q`ԾH8_X3@T"? Ѡ?,w݀1_5Uu`BSEP]VڀB Vu?4ڠ_{e`Yy A @Y?q@EUIk@?Kt`?_ ?Q_`?1i?9C@B?A'^@?b ?b@?3xPu?CԤ*]?$ ?]LA`?T!P6@Q+?C=?B^.L`L]9`?& 0SW :I@?,@Op[TC@RN@=?NJ?CEK 9!`PTì?AB`?+ms?)//Aq_ Ev?1"`?A?2`?RP?]Q?WN?Q`?D@>`+K@V丒@?[#?ZX?69?h ??BZ_WY2QX5?72 ?`.X?Q7 I&h?Q|?@1 #UZ?;?T%M?X?U$?KL ? {`> 4@?"?K?Y ?Wఀ?S`?Sk ?@ :gE@?9^@S3P Cր?Bɠ?KKi@?SQ`?L4@Aq_ 6 E&)Z ?00}) ?9O@?!ƀ?CS?T,Z-X?H&@P`\@?9 ?DYVғeg8@^ KK2w8-U[ 1`?R3B?I,9?Ep@?:??B{?K@?<`?W?NŠR`B`?B/i 2@?U'?M֤`SɊ@X`?9?S|?+ י?@yOD3]`?Ck@?WL?,TXL֗S{YW J[?BY`?!"Qh}Kӓ*)_?+@?B`?P?R??#r 6ƀ%'U :0Au \?6j@ASJ{`?K55W@[<`/ JؠUvN}RdW̵`Ol a@?A!r?!B ? ?Cx@ ?6@?R߰`2\D<?BJzPB?K+ ?IT_J#J@?0S?H ?CQ#eO  Tσ O>L8?'i ?N9΀?V?Jd "!H_U [GSVՠ6;7=RSN,|`?I?XW?1 G= 02@?2ހ Y`? ?P=?Q-?Jz?Q3?OJ#?7S?SD@U t-7SM@Ej`I;Ck@?7 `?1 "9AX52 ?KLa!r]#F ?1ԉ@?RXC@?J/<;)^Bg ??L?^o?W8@?`?L8?X#Ѯ '?Q0*FS?D!?Sp?- @?DUh ?S}Q?Bڂ@? ?8@?DYTy`VIn V_ [f E? o3x COL0?w ?Q?6Q 2'k?Yr`R6c?'@Xt`Zn`_ @Qi; ?`7?,%?KvU@??(-?;?&?O@4q D*Q @Y0`QwJ;-`Sa`\2M@EUu`?H2?Y;?RB "3B?,N?XQ,?Iy0`6Q ?T?bSB`$i`?8 ;6?"?BJ ?;``3a1?w ?Ff?XC@?@AJ'[{?QA?]w-`?Em#JF 234?&֠?@x@?? @?EN`?42Y?@?IF ?=`?@Ȥ#(K7 X?Vj;`?`@?b?`?4YDm??6K&5`>`?29?Xk?Y`HI@@{P%ƀ?Vk@?0@ ?EM ?\?]?U\?2ݠ@ >ʊ`?B$[ '?SoA?^d?UF?[@?iZz@?ik?[?L?Tj ?\@?U8)nP""> HI@S%@?>E?Vj;`C3@^kcXab@?Cx@?Qq_ ?X`?N3?4`@G @ )C#&:>Ը@?aL?f[ ?F ?$?HW?K?JG'@exTì?9IĬ TCU'X 2?7r`?'?-?>0 `X+n]}6Q ?Btb@?H&@?Qz@>_U|@?EӀ?CSJ@QS $@?G ?M@?= >t7C`I*?t?Z?S5`7,?$}?U?Iw-`?K&?? ?D~@?Vk@!SB<$ ?3Ly`?F1?B?G| ?0bO$k?Pi-9`S0?(@?B+@?[?U3?=?EB?M#1@?Wۂ`?[  ?Kk?H'?M܏?.A`?`?Pz?O ?.u`?P ?]?QH`?Q ?a%%?]$ ?J ?1L^2 Ѡ!`?D?4<>"E?)jc`Ix` @Cg?@¹ EX RIV IO 2@?"9.`?>_ 5~MA?-?TԱ@?V,?J ?P 1?/`M;<?B:`?[#5KFL? 4?&Gm>^8.?J>K@-?NڀA]Y6?@?XSe ?X@?XT"?S`?%v`QZRwXCh`9?DH9'e3 eEX?$3ڏ2wX< ?2tb@?/-/d;2@@4(j?G?A7@88 ?E9 ?B`?Es`?K ??6?͠?CI?N`?4e ?R8 ?TEPf`@E@d @i@I`?Yh?[р?? ?B4?^?K#s o?:P?9;?E@?T;@?E.?2$u?9A`J?Dѻ?V ?Hʊ`?A@?R%?VV?2:F?F{ ?S ?7F ?D4 ?UrR?C<? {` @P3S@;2@PTu@YK= ?3q?C?X!?LaC'x4ÀT"DI`?3p+a?CUZQ%`XMyPoA-I::-?M?L?/ ?J`?GIF(@;?,TXQXC@';?>L9`=,o???GS`=@?6`?[W@`/`aNl!?I`?X?Y?BYF<J|DzhI!`G`EV`Ie QPX|VH0;6>K+A?%m?M ?T@?V>?HmK05A~@OG 8Q,?002@?#Q`BހPc9=?A_`?!L^FD ?S?Q7 ,GBR?B/?LT! `ox >^?R^@?kf V`S|?T0g?e?W?T?ba$?Yr`?Ff?J?:-?+ } ?'؀ESGR8Ğ@?M(?9xi ?S @?` ?U_)jc`SoDF ?- _@?=?0 ?a1?02@P/T`?$?-=P" ROaJC`>@?]^ ?]>ƀP%WU U>K?0ՀCg>SD_TES`2}C? `B4TsK@@P`B?Dk?B`k=5PQ`A ?@ J9@? @?=p?.A`A?-`?R4@@dKj]R-3[F`?>6ؠ?Ab Bd`T1?!7CH%?=`9^@EӀ?;?Q%%?M @?5WD J0?6?ZK[?a_?Z4k?D?Fw?Qܭ@?75`&-?Lg?V`lU$D٠2:`Zp\`_ 1 ?P~?E`Ani`S,??Rj`83VQ ?i ?Qr?= KОZd 3e?X?Vm?Qe`?Ye?Q6+@?B?O?JА?DX]?I??b?7U ?65x60`?Z`BN@5C?Y?`=`?E@:hT+9W/>K)//GLJ@Dѻ9 ?l?Vm?W Ǡ?=L?G?Q#@?m PX1ZR.?+?4`Qp\\(Qt`?/J#?1uK~S ?Dq`?A 8AA`.4'@Pd PN@7^LXȠW_`s?PW?Ad o@?@{?RC?9 HF=`2G``ƀ7 _?K@?06T3]`Q_`3#@1X56w`DJ`;@?L@?HH ! ?Xdj?B.-@?R?^P?RE?:I@@.`THIh?@?D͠?J)Q@?L,a?X?bh?[۷?E?U ?_`?<?U?9Ԁ Ѡ\kU??6̀?=?3:AY?_?W`?Gw8'y?'m>?=)y@= Mи?!?F?Hdj?SA_?PB?H@?V=?Yw?R"?Q6+@?U'?W?N`A!R:@A14?7?\͵?Wp4@?sS9aN ?%dB`?K6+DπC6EE`?L ?bG`?S1?4\Π?I??. =;<JISW]UdB`@*F? ?G>! @A @?6t?J`',P`@?F?@f&z@?Ao@?=p`P@M?=`?1=?C:?Ev`>N@>N@?bIIӠSN5` ?002@.]TC9;?CԤ?N62 80?"zM2@5`? Y`?:3?Q35`?LD?;V#?T_@?Bw @ ?@X(?R?5j`?B ?:]?!d "`8HK`H`Bm?&h?R/?_{?U= ?,?F`?U~ @@?QM ?P`?& ?MD`?Q?6N@?Oٴ?S-d=R@J?7m>?B`?7z?G@IM@?K?B`9F?̠?Gh?G4?Rr@?T ?G@?Pΐ`?Z?N A-Om`? G ?F* KA kf ?C?S?]@?RÑ@?5@?P ?O ? ?Q1?`?Q#@?A˧?+P\A?NR?." Aa@?(>ʤ)5?H?M<EV`,w?TU?UW}X$%?N&UPQ5O.N @"0 ?S1?L$k?EH#`?UAz@@QfE`LO@@?R@?GఀQ%%Pi@qHa Y1@R@͙?K^ ? {`N6 @?6%C* ?F ? /?.٧$N@ц *I@5~`?J* ?A|@< %D@?6//?Gh@?P?J3?B?R@?@?G}`?S `?L; =X7T?DHNZw?ƀ?MW[ ?QtT?[ ?R0 ?;@?PcB@?);`^рb()R(Az@>ݺ'gRYO@Z`3pw@?/D8 ?O?G `?Cn?@=06"3B?X=1?[ @Pl gY8?B?ER?:@?7X?HN7?OJ#?Q`?>?1 ?Y%?_e`?IY?N,?^J?U@?Bj?-`Br`7v?8!A\S+C{ TʠZ`?I?ck?F G ?6?Y?Q@A#@_ <_6`?Rh ^a( WPb>r ?+6?CI?G 6?A+?S?:4BF ?9?Yq?54Z L ?>ڀ9TDd5 ?>s?V?PȠ#%8V; } C@?B?Y-?4S@I^@;C`UҠQ@=>G?G5?M=?$1A?$I"?<?tb@?$5@?Bڂ@?Te?[[ ?_`?X ?7m>RS_@FdO?>OvbbWgRB@V?1`+3^< v@Y6f[$0`KDK Ġ=Q6d<@bC+LpwBKj ?V ?W=?=($;0@?Z۪`?f2?> _gLB?P4?OM?:9 ?8?8q?<`?6 = KO?1RJ@?S(6`?A"?9.`?@>@UƠWL@f?Cʀ?O` PR<R\]1@\U?Q ?h ?SWEL?3?V?C?a F!@?K7?PB8 R@P@2_?#xI+> ?1t?IND`?H?Aڀ?(- X?IBm ?U]`C0Z@b@K?A16Eq?ݺ?Dx?T?Z?L5C %@C 3 ?L`?Y@?>K@K9d@?D?;0?$ ?@ ?EM?E9? $,@?1( ?H $G^qPgM `MZRQ6?5@?!Fs -?8Ǡ3m \U7?0?JА?$$? ?\ ?d`?L?C ?N>?V?^?AeCR`?=?Q ?7 G?'@?7؀?06?>+?AOT7Yn Z%`;?7 >চ 1~@P+ dcc>iAks?8ʊ`?@`?E ?,`6̀=? q@?]#?ed`?K6A-?I`?]&?;рO9G?>r ?Y^@?Rl?Rh ?<7:/,<Ы`"?HT"?M&?Ezu?Q]?M>@ -?!"U@c;O?"D! K],>^?$͠?#=?G|?Hi? !d 346[@?;"@?Pb?7?5Ծ?\?a?S^< ?K-?LY@?' `=A|)#X@?(8 4)|`?9x?7s* D~@Y?9'?V~?Q??"`Au`\S`?@ . SY?.?Q6+@?AA`?F6m?O"-?Nj@?I//&Q ?T_?\bg?2ހSZ*Tc5@?Z`?S`?L$?6t37LDSKF`?4e?EC?KZ6@?V`?Pa`AXiRJ J 2 JBz,Y?)v:CXPP`7[{8W`PFeA}6@?7@?L?RD ?*PS Y'm>?\r`?Se ?H6?X ?K?:K[?:q@0'PL9D##;@3(Mٚ J <`?@?S;t$IZN P`?@? Ub`6`?`?aȲ ?E`3ڏ@\`)?D6?L?=[?H?XmK?R{ @?4}?3#@?9 R?_y`P?L88?b*`?`@?F?C=?^/r@?W@ ?`D-q?{`RaQ`M@?=`?.N @\E `?O`?Fz@?9?YF ?YoLx`9 b?IpO?QA?0Հ?J?`?QV@?1S?$0gMO5?X@?"'k]J BD ?@?9(@FTQ( G G?E?<֗?-?;R'VO ]`QK ƀ?4?IY `n\U `2\?8_?B?:H`?Hs7`^HV @?G| ?T;@?,l`G@ ?:]>`Ow Bc ?<k?R`?Y?D`Cθ`?D?`j`?F)R Hk?0?4<>d ?"`?AwJ?D?Ev?;,E#"Z oSXP?2?T?!"^`Uv ?Qj@?V?G ?6?Vp ?Xc?S ?P?D`?= ?P6@?Na268@ 1??`?3Ly`3?$`*ǯ@UN`O.8Q,9?A, ?R>܂4}?C@?AS 0z3 8 AgS YbPw=`<?8$`7 GI*?ML?c?VO ?@Հ?X?\?;A7jH? ?Ye5@?bC+?T|?IE@?@{K GD8 ?A_`>Nl`1%`?WR?`%w@?8@`2D?&?E??N@?K ?a: ?cW?[Z?M€8`SFp'?/J#?Q@?@]`V<@Q'?UM?X@?H"\?1?B@?Q ?RY ?B.??Ы`?-;<CSjN,X*`Y?~M^IO@?3f??GK?5@?;6?Ru ?f?a@?% ?C`?>-@??U?FF2>@?[ͨ@?Qy6ؠ?_`?d ?3;@].`\P `A"?@?_ <?b. ?UY(?-)y@?4 ?>٠?!~ ?C?Su`?JH?9v:?!?D>`?b5?e& ?VV?U>?Jq@0n\?UUD#=`?BLyX`PU ?F'?`5 ?^`Ce$X,$>s?&!`?7i ?5{>Y?#x?M ?M=`@FeOi8?60`?6 OG-JX @:M ,0`?T! ?:*SBC+?= ??N@2@4!?X.d?fxJ?+VO #1@FQ?BB@?32@Fe?4?,6?FY?`d ?bu ["PE^V?Z C[F`Qz83?W?Ev??5k ?SP,?8- D &3x ?Qu`?Mq@?;?;<?V`?a3?A," ?Y?R`?:@?KL?W_`?a&?f?c4?]?`v! ?V ?Fv?Uv@?VN@?7`?LB ?aF?]?T?RѠ??%?PY`?`=%(@g+@_F@@Sv@U_@T(C[>ԠZˠP ?>H?_`?GOB@#=`?$?Q?L?\ L?Yߠ?Y?c@?`@@?RT?V֠?Q< ?Cڏ?W?SAAA`?MG?[h`?`M@?XC?-L?HO?\T? `\- I;;7GgXs7`Tt K Y!Kk?T)?NA`e?Kӓ?Om@(w P\CO?1 ?E@?Lu?GEH@?7R?0繠?AK?l^,|`hFSv@?Q@?\?Vu?3qKmsTrDR8p?TP:?VPT?:Z(?'=3SRe1[+?@@G?`Wz?`?Btb@Mq@B4?X ?[@?M?P ?FC?(-?I ?EvJgzZ3K?)@?!uF@NPI[Rڂ@#O?L͵?# `CB%UYO?B?e - ?S[W G?[G?e;?H>%?1j? ?P)?a@?Y?CLy`?>3?2G`?1Ih?'C`D4`D ?3E`?.ߓ=Kͨ@VUY @@z GR# 6?I]@?Q1?Sθ`?93@ ?:Bz? aVR59FT?`?+V ?P ?a?S VU"Vj;``K+ L#`X 4?RQ?G?`C ?<6?N%Xk@P8 ? >k?P4?YV UD+@*W3KA W@ M ?H`?Smƀ>? Vls:k?JR`?T*?(R8`?IZ1U`X-U SU& @@z ?; ?H?O?EANt!u8@@Gr?F ?HSOD8 ?D0g?6>Ҁ9>v@H@6?E\B*`F`,TX#gG?@6N@?$<>?)EPwD!?KN_?D?EO?W:.?A >?EB7?]?HjVQK։?Xb?c?JD5QƀXjE?Rl>`?R@:KHs`,$@>s<Q N_?<?X:;?E`OPӾ?C[F`?T?(V"@?Kq?Gkà?- ?I?D'@:BBHP>s?B@4O7< ?& ?JW3>YXRP%>Pa@^1UaSE`\X 0?Nr Pf??Ov8B ^`PY`?*ӆ?%K?D=?P1 !OG4Cwe`Pl ^2hZ{?H9~`?be ?U` ?E` ?R& ?Sj`?IǢ0tGQؠ??Rg# V G_`>iC'xMTe@?)X?R"?Q@?L0` Tק U` QB@?Q`?I XV,@1I`G`={`AJ?H?VH NoV`?B4?EU??-L?8@?W=$@?_`?AU@?<?U/?-d +Р?UC?VE:?l?m?<?6`?(*`?+O?D4`?H*`/bS@Wc`]H Yb?C\@@@F!`?0 tNŠFj;`'T?A?Y ?Nj L`)>?$i`;K`PtGPF RxTd ?DO|?`H?Z`?U-@?Nֱ? `2`CրJ8@???Zr ?PU? 0?"9.`??? &?I?V`?2@ڀ?F$ ??7S8?J??R0 ?!^!??!F`7R`?K?EX C#@J(?@b?Tb@?PRހIy ?@ez?Zf?Yà?3E`/?:6@?B?@;,D2@?B ?Od?C?6h?8!?4*|?HV?aF?c] ?/P@[U`dc@Dq ?DE @?@-<?/D8 ?&> >9C`.]T4M d`K?1L?4͠-f?H?Z~k?Rg ?7@})FF?6S@7}V߀I?#Oo ?= ?Hh ?@@??,? ?FF?R΀/UX1@B  ?M@?VJi?? A ?0?U%[@?HjV?I`?W5?PР?R]?_N@?Xנ?O?8$P Hi?OWu?I< ??AB`?Pd ?K ?/A@Ep@?Q>^O[-`E`-`?0Y`?1j? BV@,l`4}^`?#I?J o?U?Ej.F ?1`?bp@?_F?L^@?T?N`?EUu`?`?a"?* L Jd JMQsH)6&E:D I /?==?;@W`^2hX?[?^ ?DY(Ğ?4B*`?D1?69c?= ?I*?Ql1?WT?Q)%^V@?q? 23B$@?7`?!i.Q|?6?A"A`7`?X ?\O)?:<?%dB`?D}?@=d W0@@)`?S ?9 SVY[U@?Dڠ?S ?AS?B?4  ?+:$X3G??S;@?d?b8p?2'kA*?A"`?J?C?S ?Q/ ?G-?Yc`?Wi@a"?K-@?U_?UPG@?C@@OG @?=͠?Lʀ?$P Po?C(?Wd] ?6 D 1V@?1j?? VdQ;?@?&E:Fj;`>K?9;?+V ?Q`?Z <`?H8.Q-R`S7``4@VA ?F@?JO̠:(?"\?CdH@@S?OZk?Ou?F[n`?Nu`?S ?@y t?K ?Yŀ?U,@?M'`@USN1??@@?S9;?Qo?CԤ?7(0?11??#O?9&'Ib?w=`?F@<`L ?O@?W=C#@I?Vw?],?͠RL@?&? N@9|& ?M?@{?#Oo ?)@RU <@?ME`?Y ?L܂?Yt@?Yk@?.31 ? @DKj%/?J3?Za?a35`?K ĠB4?'?E:?)n?J`?P< ?"??K,T`?U7s@6`?Z݀?X?!u1 ? O9Ww)@?P?F)^@;X@?Ad ?W@?F/P@?B"?SO?{`K$ڠ?Rg?Y`?G!@14!?1??Ep@O@Q3J@Rw SbCe@>E w=`?Ea?J?4@)`:<>!N]TXJ?,?T?LNl`?G2 ?G?6o?=`?H㳠?9(.?: 2 ?C`:(GĀ?@R?PD?4@>ƀD$ZXUF`?S >ET1% TM?PR?*n`?$@ QG]`?$0g?S?O@T1Xb?T(C?]wDiT?,q?C@-#Rr@Pܟ?D{`?W|?)Z Cz@9-R`?E-@?T`?>0 ?Bu ?Z(?L ?&?YF?b\?Q>V G؀?N@?Q?Z?RT?X?VaZ?>Z^@?Oߠ`?WQ`?H~?R%?UҠ?*|?"3B?H9~`G L?P@?GF EV`"P?=L?> q?S?B Ѡ?&`?(@K@ASjM?TT?a@?tW^>?W G?N^?+?(M ?/ # I;Ebǀ?+?,qIMg %>^9?5?WC`?Sp?3ڏB*`?)?F'`?VC?IlCB`?Ku@?Z`?P<?ʊ`?+?KvU@?Hz?/`. PU Wϫ@TRnvE@?E.]TF`.٠4zhSU~G`9=sz K@Mm1} 05= 4i`GG!@?!ƀ?V?a7`?LfZl@[_?HEU?Q9R0?+a/>;<?:?4\Π?QcO?UG Tu:`Sd'D?*t?D?ME?] ?^U`?@P`?<3@?)`̠7C`Wۂ`V6?O[?a|נ?Tì?SQ`?Z#e?U@?[0?`?V2?T6?T`?^V1ƀ?4À? H@?C@?K@??v?SY`?T<@?E?R?UԾ?8Ǡ@2 Y@c@_`D=?V4?`?@S{ ?7Dݒ ?T@?S ?J9pO?N?D?PIR??$?"!1=?W-?i|?av.2$uQFs ?AL^?H^~?Sa`?Q?C^< ?P ?Xc?.6`U= Q 0o5.! ?9`6z@ZZ22=sz ?:c @?JmfE?&?- '1Ȳ >9?J?T@?F?B/?S&?Q?G V`Gn`D@PB.-?RDH ?V#0@?'}U4TN)pO: ?P ?PlC1;???5M?*-9gm\c$`S.8Ğ?Uŀ?HK`?9y0`?Q?Mf( ?F?P`3@ b]Fc@]M@cC_?JS?@ @?B  ?QX?P?V ?^?Y b?SO?M߅?ݺ8k?/& ?9)CG pO?@`?TB*`?V~?4VD_ݺ?L?K?=`?PM?Yu} ?5{UNtC MNy?2\?Y ?UAJV^d 8h NF?0?_`?`Ϭ?Vp ?EG5`Za`M.UG:H !?)pO?`??.?P?ǯ@<?B?Sx?M?S@?QJ?>0 ?W?e `?\I?A`?!:0$[ !_@0?@hp`?S E~?9.`?#1@=@8ʊ`?(V2C ?Jz?Pr@H@XWVH IǢQM `9r`Wx 7| ĸ@?'m>? _)^@@tGCp?B?\U`? [;j~ ?JC:Z`K$,@?q?8̀@?@?> g?G|?Rl>`?T?U?Q ?3[F`Bm4٠?<*33ZPU ?C?;^S;@`M`Vh?#Ѯ ?T+?V[n`?8EUR7P8V@?Ijc`?R;<?%<} ?'O?X ?Z`?QD?`U ?^'C\޺1L^?W1M ?V*`P`.?5;;!`HN( *4j:S?6֠?A E tEj.?Pΐ`?`~E ?Un`I*? )C?Xנ?]@?FN@: >E>`?$wr>?:]?@ez@;#s?U|?Zy=?M3 ?Yq `?S`tA ?i`?Z|?J/<BMS`Z3P02@JF ?Fm1 ?Q='\@B`%m t?6 ?4?l?Q%`?ROa2@:`?*g6VV@axŠ[`G?sJ?' ?U?FG`??#H D8 BEg8@?)?Q?F?H?bE?b?D`>?e0G?!Fs ?D:?"`s?(v?. ?Ag?UR`?ZF-?JHf @G5`?0@0] d`PS ?Gkà?: G| NDU?$?R ?[5@?Y1?Ni?E0u?Qٷ`?IBm #"29.`Gag@K?63x ?F`m?:@?GKaW)@9 W| GBR?RΫ?V- ?Q?UL?1O<Ѡ23B?FK&?K։?Uy`?W`?23BJ|3+ ?Tt}?T! +Uŀ6?\r`?lɀ?j%?_ t?GBR4+@H AFs ,} ?'}?@UZWs?+`?2Bl?1@>Ep@^? V]`HPl`<@F-?5k ?#d?2+2@QB[9b1ѓ? R`a6?Si`?`qQ?[T@AȲ ?-5PJĹ#@?X5 ?FPG?2nv?aMz?V, ?4 ?E~?R?RfR?@31 1?;``?W?`?a2x?T?)?)n:9 YQD - JM@%$%>׮^?P@?X ?N%? ?͠?Qt?Nt`$`?9?W?J ?4'@?C-d?C(?I?Rȿ`?P02@?LX?O`?N]`?B=0y;yK? N5]b]T`^ Zؠ2B?2@; POHYqa 2@?b@?b`?Vˀ?X0?SVՠ?DH?I@?R?W ?V?N?=1,@>@?= ?KF2@89~`?XmK?e?]B?LyX`?Ezu SsS&>i`?%`?'gRQ _M`TEU.\^Fm1 De^)M{?1I)CM?=@?@ezF@OM`T{X[J[B'kTR`HE~?Ek?Wk >SRJ^324?4?D]?Y? Ѡa< R%?M ?G؀?5㋠?U@?a?_΀?CXPQwJSɊ@?`?IR?8;s_D 5XS@eb QATS@O@?0?F@?Es`?HU?9C S?Bj?ZP?Z@?Ae?2?A?/2u`?&y?1?5C@?SH ?Yh?VVR *ǯ@3X!VW ?*-?"YaT`J&[`C ? |`?Qs?R`?Eݠ?9D @QA`?N|h?f-?\`?,a@?7 ?L<?^;@?\hS ?Q?S$@?F:`>w=`?Cz[@)@Hg`@A@ 7#=? ?0\@)ߠD>ߓCSReQ7 D3]`6 ?4?4-qCP2jR9Kh`?:@?*`Q0??Nl`?Z ?:<I!#@?(ӻ>O?Sr?U,@?<]9`>, SuN2h?17?I[`?)Wh?<EJ͚:g=/d"9?OU?[m?UN?#+PҀPXA5@?Ld?Vq?/UN*`M6y!*F[n`F?K"?YO1bL`E`Br`__8`?7m>?\L4?C Hk`?\0?a| ?RB ?=5P?7 ?G:?Mo ??3%?b?c\?A0?3@R`?I@?a?\?8`?@f?!RJ@N@ m ?RzM?% V@Vi}>S?= @JT.j@?L^@)K`A7?@@xC[?@Y`?]?T#>R@;?#Ѯ ?U?LEGđ Z ?[l`?Q?@J8@@R@E?.K@?YĬ ?f#?W:.JWϠ@`?-> @?/>L?#q*]?;`?N`I?*9IsDYRd`?7 ?F?@)Z 0?BM?Q)(_UWD?/?0b?= ?Mq@?J6@?,$@$?5$?Vj;`?Z|?K"@( ?"3B?,(O<ѠJ$?R?]X?@?@Fe?Yxr?L-ܠ>@@@?O.?COL9Yc`SY`H$`=^?F?H?R]q`?FdO ezJjpWub`Pq?5x?=J ?Aj@?K?5C@Y8@a`aFaM `T ?_?KyK ?`?feʠ?KN_0 ?a J;AD ?* ?HmK?9`3%?Cd'?]K?U{?Iz@?A ? =4@?S?W)?"PI`9`?JU ?P3>Ǯ^5g8@>%?%v`?I;Z4`V H@@A`2w5=?*!?C`?-?3^< S߽ZPw?F?K? Nl`?:k?@L*?@?,%RFĄ ?=`GjH?|v@?C`>U&?: <`=3CQ?GT@?UY(?Q?Wb$?\@?U?Ru ?Z?Z?O t?H'??5:4π?/bHa, U!`J@RIv@?$?9a9'&3` G.٠?F@?U?9=w=`?,@0b: ?K~?^?Ta?@'=QR Ft'>G?B?U[a?K_?s5 S`^`7y?AtT,0$@L Q@J R{[`V\+?Cp?^ ?Fm?:QG?d5?huo?U - ?8]?B?4`:($}^`?K ;<^Cx@?`Z`?^R:@?Cx ?P@?T?=@ <`==G1Ν?!<&UdB`\8O,?2<$ ?3#@*>v@?~?#Ѯ ?<*͚Q=7z?A ?1`?:Аa>aեYا@?L?Z)Q@?/d>?<%?@!e@?Y @?Tp:ǯ@?- ?UAz@?4͠?9?59 ?Bɠ?=G B68>^?^<@?_@?E??3I?Qdʀ?`?_?2w9 ?Eh ?K+ >TrA:?C6E]R €?MR?Lٌ?5@?Pw?;@Qր;Р?I?%: ?"@?-p`-G@GR@a?@.`@?<@?Z?ED{?&`?"`O@2e@?>f5`o?@?!:N`G?FL`?A-@hp`?&(@?`?b@?Ja`?C ?[ ?`ox ?Y?V[?V?EIM?7[{A"`fU_ ?F?X`?+@Pw=`2 ?Wc?W=$@?:T=@?C ?G?@$π?)n?>`? Nl`K/J E?4E @?Aż@?IZ?W=$@?RI`?E?L0?=sz A E״<u@" ]U` GϠ7i ?N?P%7L?@?\ʀ?c\@?cd?T@?OL ?_~?A>-?!7?H?LNl`?0>6ؠ?C ?bu~`?`-<?DUŀDB*`:(?Rd?WӠEC\1d ?Kt?$_`23B?@?NK ?8-?BwX?[D?W_`?=@?@ ." ^GR@?H*`?EX>!?Bm?Q?D$= TQ|x51 G$?7 lF[n`2?=G ?&3x ?DE @?Z?.WhU@??M;* ?w ?J\?8@?BC?8@U @W L?C=?Pf8? ?Rg ?e/?`'?Hh ?Ea?=G }^`??6Y?4 H Q`PH?0r K&WW!@9@@?J?M,oCk@I ?N?Tn?>K@?D-q?H܀?9gm?4t}?F@?Yһ?`?R!?1˧ ;р5p?8b?Em#?F֠?Hk`?@[@?*1 ? Q35`R 'C`7 @?9Z ?A{`?@%?oG^> G?_[?bQ?Ve @?5$%?=m?H->3V'`Lj`4?#݅`N4?@@?Y5?Tg*?F?O@??)G+-?I}&(@S`0 ?Q;Y`?P4?L``?P4?]2Z?Z ?]?U!~ =J 0hp`Pg P?9 ?ARJ@?F=`?T\ ?W}?O(vpV+T `)*_wH \Tѻ#&?5aCS<1A\>=`?B?Rc?&Q G `?8N7?L?2?Qo@?^@?R@?G??9USH ^nF֠/ @<9?C3@?U ?;;!`?1r?M!*Z`\YW(kD?.ӻ,%?5k ?F :?Wf?T?>HA?7 ?Pq@w=`A?I?Q ?0D-d DC& $<>?4?R\?M?,u5 Mp`SpP,$?DV?(B_B`tb@?4<>7T5l ?Gg?&?G ?C?[0{KSG,?/`?/s) ?/?@?(? 2@#C=`LJ4`8'?0\?@qQ?Hw ?TA ?P}`?> ?U$?\@> @Q&!?D6`?G?N, ?R`?N Ы`G?<?W?V+T ?]J ?Yt@;UŀRP?S?=m+&hIO`IHX?@?IU?Aѓ?0D?=`ASMIĬ @ů"??A5?N>? ?V ST@?M @?S\ ?J?`I+a+A?Mf@?Q[+?Fw`?"@LcO$> POG X`QF`F@I'AU@'i 4 a?E@$_`Tx>, ?J&[`?Q ?Q?PH?I$ ?C!E.F0`N"`NaIEbUK?Up?`CΠ?H@?@ů?T@?RV ?2<$ ZC?>?W @?T`?D[S?Q??U?@?Dj ?Sθ`Wh[UVS?M'`?JP> 9l_ Rm\&v a?N?Y?\r ?\?X?I?w`?4T ?69c;Q@?THӀ?R&`?F ?9;15@i@?4n`?M)`?>0 4`Q( U?`<?/Ja``~\T `˚`7?&?ZL?C=`#@3Ѯ Q@*??_U?Uq2?O@?e]:?R5X]`*> Q D?'?-?LWM?R.?5w ?8#%I@FYCLDPK?e?VA?T./@?= ?4=`5C@?6N@?U,?] ?Wz{`?S@?SRBR>PTu@L[?(B ?6?O@R4B?b/?e?G?%?N,|`?Pl?Ds@?Ah}?R5?]?N@DJ:h?Lw?QfE`?B`?!HVZ" X܀NJ`F@Qj L?#`?[?eS= ?R S[F`Wa MQ@JsR 8!?.u`%F?)?I]@?V?%QC) ?P?by1?_?X`?[-@?-@U|@@?#7B'?C 2 `NDOÁ`VnPN@Tg@Z$QoW\@d`[P?2 ?($`K^ 7~R0MPK?Q|?WD>Ծ?(B ?L:6F@?JI??%O& ?5?SQy@mas ?8M >ƀO@4@= T@<9?34 ??5k ?Sa?Nڀ?J?LA@?-p`?@5 - ?N]`?`3?Vo?bA70z3 ?AL?P?K?Q?MGN)?U  <`FG`?-87I?K],?Q,QIhG?]?[z=Q6`?46S@?4S@ kf ??Gr?0)Qԉ@V @>} ?XH@?T 9xC@?D_@?*ǯ@XI[O^@;?*)?L0?_%?hA`?` ?(N72?&?M ?YVh@?Lc$?t?Hʊ`?L ?0H?FU?NJ@? G^G?3d'?Qj ?h 5m#?O@?ʊ`a|xV/?3a1?`!X@@_|v@J鹿?L/WQ\7{`Q LKv`3(]2<$ ?!t?Q@?X U ?40g?;?^0/?M܏T $> ?Uù`?D$B@5AH`[Dp @U@brLL?Ft?6T?A@?W^?4 @U]S=`P `M?= ?S;@??)?0H?$@DEN`?Cʀ?YZ?Qd sLA@TQ-I׮^?"MG@H!?:\?.K@?U8?@:?K?]@?4HV8@4n`aYQ: ?B?+ VYA,`/ ?S ?P BoP/y`?6BE ?@?8?Ww@?VO E#"0Հ?b.?^٠3@Fm%^V?3E`?Mи?C?$I?S@?a'@?_N?Yn?S?VN?[ ?JW3܂?F!`?K@ f6\@(Ǡ?* ?Gh?Bql?@@?BNC@PX?;>^/r@VA ?) ?AG?DX]?;A @ F@'C`I` R`?$N2_Q2`SC .( ;yKJq RY@?R?XV?>ܝ@?Q]?afE`?% a'HN7?V=?Q@^EV`TEa4QcTV ?!*?Hʊ`?Dڜ?1 ?2G`?W`?a'^@?P?3~?@ 1^!G `?0})?7| G| S#X;^0 P`?E?Ov@cX;R0MQfE`RQ/d@Z{v\`?! ?Ql1?EҠ?6T?NK@?Z$`[o@Pq@N!`(S ?(@ M@PY`Ou?9x?`~?]€?7@׀?I?2N?C`?[ń@?\S?H ?P~?FS1G5 ?WB?S\?,q?:`<?>s>WhUDN?O9?S+, ?(@P U= D<>B׌`JO̠-?)F?Wh?#%?-?Jjp?[?X;?Q[+?R?G?*n`?ʊ`LEZVuM€@?1l`?G?JW3?Kd?Mp`? G_`'O??j?<ӡ /a Rg͠F ?D@?3=TY\$=B`?K^ ?;"@C:?O?b^.$*|X?G6{@?Z.?= ?.j@?3R`?d !GF Mye?MӮ?a|?N-@.A`?%M?KU?@A?)@@?Ub?am?R@>`,Ы`EԾP~OvTsV'HV?O?%;B_!` ?S?Y2???7p4@?:@Ev`PG>N@- ( ?M@?R`?>z?>i`?C1@?/& ez9'?a?SC?U ?U\?]g?Q1?5?PR@?XҮ`?C@?I@-#?G(+@=?H3?1L^WӠUGe9Lgb9.`j ݠeX P+msAwJD ?z@?T ?`@?\~?Q,`?M?Mٚ ?P 1?W+`?_ɠ?Z1l`aU`\r:\4`3? t1@?4I?Jӆ0Kӆ51`?+2@^17 ?+2YP7-A'?Rq?XM sSs ?U|@?i` ??( ?fP@?^@BLl?CR`?_kp?[t`?`02@?R]q`>`I?ֱ?<]9`?YpO?_`?W?]?W!@HR YOU8Ǡ?>j@?Y??e`?e*@?^r?P?ߓ?S8~@?b(`?S`+P.@G ?UU?e?\TX?As&n?'\@?L`?Aj@?e?ePB?-? 3{ ?8j?DA ?PX?TO?QK ?FQl1Z @XNV ??%?6Ą ? ;J :А/@E(+?COo ?HK`1 `L֗] RDH >ĸ@?T1?fj?e`?O%57F H#@?P@?Pi@?!?8C?5,@7<?Cp?X?Ts?<? pO?/9?@3?1Ȳ 4n`IO`U0uW?A,?.4'\@@n\F WV+T FNM Aؠ?I?FĄ ?7@?S݅`?W(?32OQ?Rk?i ?b#`?PX?:Z()`?Z@?jRc?7SYH#UZQ bx? ?MP5``J`?*K[)C?@hp`?Rs ?BB@?a?Bw ?V,@?_. ?Y<?E-@?)Ԁ?8ǔ?7^qAq_ Hi?P ?b?U3<K 1A?Zn`?YHYN? B˵@-LEBHFЀ?`W?j-`?SOo d ? ?2BPG92PDQ˧Tσ WTJN`3r?=m?9jc`;рUPC@?M2?>M @+O?Q35`?P})?R2?Sf` ?(2}C?/U?C `?Tcw?\o?K"?8 ?Qz?E3j:K[?=?b ?ax ?Ы`[GZSM̠QVKC?,ʿ?> ?I}?Hk?IN@?5E].@Oj?@[@?C*n?N@K&;DPVT`F@?<-ܠSW IXd ?? ?Q?R?9΀Q(L/W 6?8h `A ?A_?_?Q`D`Hs?$[ ?OW?_^@?X@?1Ȳ ?D+@?W'@?S;@?Kt?)CPm6?O@?OM?7O@?4?\:q@?ag?JUB\sNRS%Zg`F?6;?Cx@?Q@?PX2Y *?TZ@?:W,$?[@?F=`@?S?)`E8OK1`?D0g?8ǔP\lRo4 `?G+`?S5?I 3ڏE}k?Bh ?SЫ`B??AB`?$@@n\?B7?Q( ?66m?:4?5 A~ 2@?Pb?])?[B@?Rr?I?<0`=͠Jk<?1u4@+- @3x 0P Xz[^Xv-@J)?Q<?U3?DN?H6?:K@=d ?0})>ӆ?T?]"@2G`?8-@?h"@?VV`DA VQπQ&S.WEH@4?P8?TQ?:LU:EN`6}yKрO0hp`?<k?> q?8T"?N ?X?Rr)?oU(Q`\Cu?P$@U= 3G@?@'?l?-3ReK' ? L5C K"?3f?R6?OCM@C6E?EM?v@P*?SB?QP?F?.4H@& ?XR?@'[AU`?T?SM?3?J/<?Ep@6E::I@>N@?1 ? E:WsM<^?GĀ?M6`?%` 2?)5?>?Nl`+&h?5?FF?D?A\?[O?e3?b%3@?^`?Z%>d N,?E ?cH?[?5?^VayK?@r̠?G`OHHV(6B `PJ"b?AxŠK67p @?RI?Sf@O>L]IKM@`?2\?D3]`6h?9?ZC7?2nv?-)y@?a?SvG@׀0\@>QI`Bl?K ?Y g`?P@?6HUVUPInG@Aѓ#\?*n`?9?8!?'=?6'?8?jR9dx0@Q~@?0V" bF I&N Ad R@})'5 < ?D g@?aR`KD^QWx`@q@=U ?`R`?T`@`?5 ?Xz?Su`v@P9 XaF?@*@Duc#U`?=A'Ep@.`?D@?9ߠ0R0@7C`0HDd5 GR?0$[ ?HR?BwX+DV!`G:?Ru ?IEb@o?$q ?JsR ?J>^?N?]#?]?P?P^р?T;#`Z4Fb?A(M WhWBR3C?F?O@?DS@?<֗?IO`?9@Ebǀ@Y`?4  02@?XA`?cG?Y' ?S[?Lk?Ν?@\?))Ceym@_HM @;@J4!?\B ?S&>চ ?BP?9nz@?KyKӆPD>%?Dzh?P?D ?!Ν?i 5[aTV3x BM>JQnQA 9.`>@=H_`=Q`Gh@I͍?HEU?Q O@N@?M?9`Hdj3;@BbL?;X@?GC`8C=IdwS@Ll`QZ@\&v BΫ?Q'@?CgA`a1?N?G(1( SL ^ Y CJXH !?!?h ?BN?OC9U17O?D?PF@?Jc @?P?(ʊ`?R}`?M5@Xp@bwXN^?V?P#"?U ?_L ]`GI?<Ы`?E 7C`S>iH M [S Q`YLwX@Zp\`U&5 ?Rg?Ra$?3`?La@?S{? %' `?Dπ?8h ?/?Z?bx?X ?Sθ`?GĀA ? AFs db gzJ 5C{ L'R:$B*`?]<?T{J M?O@?6%?Ld4_`SMQ3\?@?FQ ?[?1? PNVW 6kB`@'܂?<3@?/8`PV@BIv@?G!@?^ g?QՠB`?D͠?d=?R *R?3CD!\*7[{?I0ԾGJL$@DT BP`Y ]q@R&`? ?D`?"h >)@?X5P1 ` S?3?H9~`?LD>^J{`?6 ?U` ,HSg?9?^9?^,|`?W?K@?Hk?R?4\ΠU `].`G?DA ?B?8ǔ?`?e|@?E`4͠?4 ?/a D S@ R T? \S  J[Jˠ R@?3G@?Sr?J`4E @?Ep@?Vn?2zMY*`N?>H?5C@?9U?@JPF=`<@?B9?Nj -.A`?3C4O .o?D5?Q;?Y*`?S??w ?N`?R0-O:`>G?M ?A~M^V- ?J?b9?0J <`?BP?2m`Pc4?@l 3j`RR  RhTq`D=8F@bllԠSg?`@?ai %V`- ?YL`?HV7+`S|?L[?c3?`1@\_ =>1?R+@?*5Ծ?T?[?4S@ Nl`?1ƀ@$@CoX Vϝ31@?"tb@i'p?-`?S;t?]z?Q|?5M?A@?KО?HC?<@>V H0U:4 ?H 8}V@ ?R[?Q_`?E,@H5 `'PHg`@?Q?R5?M?U?MG /8`C;@6 6F7)) 9 @q?C`?&֠<29.`U8 H|B`?G ?WT@Vj)`?SS 0})=>1%:@?w ?+?J ?PX?A6+@?Iy?X?P"" q@ ?Ld?_z=?bz?UC?#3?:c @?P 1?@\@?6`?P%?IЃ`D^a`I@?,`/ ?R CPv ?B?J'`gR?&n?D:>M;<OHX@OsB1 Y`ZO̠b??JH`?kz?d`?3@J!4@?_2`?^`>`3d'?Um#?dS?`b0 `;Qy@?D8 @-<,`/ ?S=`?1~ `n^a@H*`V&\_qLDA?W/@?Z?DT ?/8`?2J ?5@?G ?G?(Z ?9`?S`?Sk@?E*`?E t?Dzh?+V ?7v?B?.A`C1?#@PȠa?He`I@Lʀ5ݙ>N@?!?=@?CQ`?J`?Vڷ?Y`?I 0o=#?7؀?R>\?IF >*`WkàRr@?Gp?Ol?J ?>u`>@L]9`V; G4 CQ"`?@Y`?(j#1@?17 ?R;f?Uq?+ -?F?C*n17 29.`? -?^l!?a?FF?;?F?<6?Kn?S?ER?DE @?S?Wg?In I\`W)) T`U,@G?Qԉ@3;@aƀ[u@EFUԾ[7[{?DL?N7@?\Ы`?` ?V`?V@?T_@?A?9鬠?/s>T# ?D:%Q 5?B?:6@t.E? ?M)?LD ?2ql?L)k?Y; ?5 tSK==?TDb?RB 6K&@?=a`?6n@^ >_ ?!L?C) ?Ni`?Fk@'i @?)?GT@?- +yK?܂?"@0hp`K&?OB!I<3q/2u`S`RQ 02@?<EEX %  t!?`,J@QXF̀ݙ?(@Cp\|N@dib`Et@?R?P@? ;j?QP?TC@sO;VOb@ ?IKN?9Z ,8k?.?RUM`?a?Qm@!`?H?8]Zn$Yq `#O?C@?I`- Tk%:@?S_ ?FL`8t`G G+-`?4`C=`ION@JwHEUU*`Eڪ@?Uv ?_J ?H@,8v,$4=`?"?Jp\`?C9;?R>ʊ`?D`?ZC?Wc`?3f?Y!SO:`H`+UŀVFaR*B%GA 3?F2?_?K'Pu€?$I?e.<?eF?Nm?-`?F?=Cn@?=?5#z@?1`?=ye?kf ?$?59 -j?'`?2-W .6`?2@??p0ASFZPW ?5?Fv5` F`Qi; ?1a@?L'1=G(>Z >ENIqAƀ@)6T?1i?G?3ڏBVQ;X[a%m?`?X@H. F'`?W*?`yu?Q( ?=@?:@?L?Nl!)C)C?A` ?Ua?G`IXA*U`k],cӇ? A?Ea!d L V3x N~?5` ?P@Vs I` ?"@Mg^ՠT~@$ ?J* ?FK&=?*?a ?a7@?V`?S&?5״;)A7Mf( f?1RxW?Smƀ?AX5I;:w?(M @R>z?N@FZ`PX.? C( P[@i ?9?LY?\ @?>UW*QG?^@?_ֿ?P?;vU@?/[?\.`>!?%:@LSڏ8`?&b@@BP3 o?>٧?C{ B9.`Zg`SA_?! ? ?Pl?N9//Y>r ?[G?Z.?;V R%3@?܂?]`?L>$ o?D~@?KpiVb?P}`?S3@?K/J ?S\@?W@?Aƀ6 >Ծ?:zݺ?:]?`H ?_?.s??TN?Rs?Hb?Ue@?W`?J Q7Lm@*!QDV`@?REn6K$bWN?@H?Jy=?(?R@-p`Q39mY ?XQ,?R/J o"m`?UO%Y O ? M@?PP?KvU@B@.E?Z `?T ?{?6$ ?'U @bMx`c3E`?L`@4?4?K ?U?@R1RJ@?P݀?Gp?J0?ZD?Mvp?4zh?L>$?(*`FI>׮^?>r ?G ?Su-?)I=?ʊ`?* I7,?E ?@@-R`B `P@Z`cS"J4`7y1LC Fv?Ds?U*`0SZPD-`?,8?T1?`_0@?O`I "!?WD?E!8W`?ROaPX4b ?V~6?Jg1?)5?2`?Q|?Ve @?E)"0 ? ?-R@?=vp?@ $e>V ?W#?MxQF-A'?\d?G?\PR?PA@$6S@PXFG`?V- ?Ry`R'kV1?'}? H橀`Vp'?OC?\3@?M@?Q?[։?W?@͠B `6T?F@?JSA`Pz3 ?3 Y9aż@R ?In?C@AjK],?2J ?QT?gb2]^ G X?@ 1> B*a`?@'?V@?8}C7\@?>@?X2`?K0KKBw?#\NTrI?BXC@@S =)y@s3x ?q?Bu ?X?[t`?F`-Q$h```YDLj`&e'[{S?4 @?{`@{B0MGPq@?DT B`XRr@Ww@^@P>HU-@Y ;?Dwr?C\ ?<@?E?PTu@?[ ?^?7ag@T,@Pg62&?AB`?Pyu?M?P ?)jc`WR*`?#Q`;LVWi [`Si`?,f?,f?)?] `?]* GBRY1@);?B ?)?&?TK ?`)?Nƀ?O?H`?Q?Hb?DJ-@S=`L:4ʤ)U*] 17 *|Y `BRԖnYZ \ ?1 ? ?3@P@#;@?O%?<`/ &y?(N7?Y ?dn ?FBE ]R`\PBIv@>S?A6?D?"@?,`?:w&nCCE`J>+?7r`V Lz@< L0GRA]F`5#"V@=@?M;<?DÀ?Sr?c\@?U"e9`MvpUY L]9`?2?C)#X@OHW`v@LLQE?8W`?NRAVN<@?!'IE` ?Cڏ?U7@?"0 7@?@)`?9n5㋠# =p`WQ`UE@ME`[UT .?49I? ՀQ"0 M`C+EE NK2?T?S2?IsD?\%?\S?G?H ?T,`?\7{?^:?R[tJz??D8 ?o@69c>Ep@? "bB Q'SPӾE3j?-?;`? ??Aż@? A!rh HN7?>!6;a KA ?O@?"?5Xk@?\ ?Oi8:+>2@Ы`?/?IF ?F2< VCp?N6?Q??7?Z ?JTg@A`?T_?:CLy`?C`?QI`>G)`1X%@aWgN-Lu>?L?;#@#@?)1@?A^!?Co8}Q ]?Xq ?]V?Ew@Gs* UP`A}6@5`? M@?WT@?b-?QPT?4aQL)k?9 Aq_ ^`R(?( @4SK ? )C?HW? 02@TESs5172 <$@? Z ?At?C?6k@?F?PHw=`A?@@?AxŠ5X?%a?YM?fo@?f:@?S?I?a@?_ ?G?KN_?L֗?B%?F?EB0M?Cd?WC?3&K8G %?&9#X@T\ΠYϠQ?)pO?T?S?H6 ?P9?Lm@$H{?B L?H[?MBxem\e]@( :А4<>?ΝL[SFG5` ?@P`?; kE@Q19?A?9o`?0?S?XDb= 6?Y*`Hh a@?|v@ `R[H McEc6 Z4`Wh`2Y?SL ?B?@{?K?> ?4H?SⳀ?V~`Cu^4`M5P??v?O?:Ĺ62:` 820M> ?H_`?AA`\ id S=`?@{Ti" `ΐ`R>\`R_*`G?/`D8 B}C] T @?H?M3.`2 Ѡ?PtG?]̠?Y?SB?I 3a15C?J?E/??M(?`?ff?b?,0`A~ ?H@?F$ 3H >G?3C?:|@?V-?Yا@?K?Hʊ`?NH?A ?'>b?B9.`?O9?"S4 ZO̠L`?@f?W&3`?T+?M)?J4 K?^?R?WԀ?BzMIQ: `X;`? I`H`XzEC`l`[@:JSҀMKj OjTW`U (@?JĹ/9c@b{ @?N~?`Q,`d- 7f`w XVO/Iq\Q( ,CUZ?H ?bQ??P@F?S&?Yb?0!e@?Sqy?c!.?J`Feʠ@ ? -?+&h8h K j?j.RT Q< $=`?:ĹGag@Z>O?Q RXeSa3ReL@[@>Wh77 .s@Y`X22 Ѡ?_`?R`Rk RZ{?@¹ ?R`?9'K?,w݀? o?6?@繠A@LZ 5`I@+UŀBݠP%T")CPz@u€?>t`?QM ?[`!?VK`?GjH61?L$?W?N}?IpO?MH ƀQ#P42k??s?L]9`?Jg?D 02@STic@> ?D! ?2h >*`DU5?#H ?6?8}?=d =`??Rd?o@bB `^ Q\i_S@Q/ X@a-\? >V ?<%Ta L'?Vn?[ EdB`Z&[`?kW؀H#%ڪ@JQG?}^`?R()?H?X`?bp?,a@2N?c?f!V?9x?Dڠ?`?NiAq_ )?R ?Y5?)^@QD k?2h ` c*Ep@?Fp ?91@?< W/Bk?M܏?UWC4R*??U?Q΀?BM?Nj ?U?W ?_?L/WI?4q ?]@?7V@G?;A?!QSP# ?A ?Q @?I)CS(\6;&hSe׀W(k0>@'[{?GJ?JNQ@˚C?98?>]`6!`S)@Y@Z*J?Kӓ?V?3#@ f?5p )C1( ?*h?>H?A@?A?@?3`D~@WBRG^?4Q!Hj.?Cp?NTr?32>A` q@?Ds?R`?OG^Fc C=`SFV;NA5Q@Q S`Hz?E?E9 *{`?H6 ?[2@?PK?tM@T9[`?`W!@BD ?CE`?2<$ ?/?D?F?W%@?Yjc`83KL`?WW ?`yu?1A?@?Es`KaX5Jk?W ?b ?GEzu?A[+?QyV ceC1r?PР?E?1.F P?%?1M`0q@?V@?QZ@?h ?O`?b"?e޼@?F[P@?"??PG# (B D{?!`?6\@8L@XX@W(e`?<*?O@?VY:@C`?T`?HTS@:??K ?A-I?Q'^@?TE @7`Q9Dh_RGa@SFm1 B@?&`?-OD6??@$[ ?FQ?8_?#+?!?@"`GEH@G?A7?R?+@U(Qs* ??&.@RzMO`>=`?2<UHE1?Scj@?R &V"E?<=,o,w݀?E?)L`?L88?K@?QS?hI?k?J@GĀHN( GjH= J5 ?ON?U@?7=G?W?L`?RT ?,X?U?-@1U` Y`?[Q6Z]<3@?>j@?2#C'?H?TV%?(9?N?Cb"J 1@Fj;`TcwE0uKi Y7`?P?)FTހY|O} ^#r\\Nl`?2?PK?<?? ?!9@7jHQFS?>K@?N?:c @?L ?E?C ?_S€?T;@?I)C?b?Nu`^sR˵@YĬ E 4HK'B?:f?11@96TB:V A?EU?9?$N?8w ?+>&8j46?K?T9?Z`?UJ?$?64@!U`?3[?w X=XaH8?q@?@*F?Q=?ZX`?E`C1Uŀ?A΀?4?C}Q?H.?:??Bڂ@?Fn?I`?]9?^?1]:%$E6`N/r@-?(}>3x ?<; ?S?BIv@LIy0`?=G@?E"'kDB*`7#=0})G?>`?A"`?K! ?R9.`?VN@)jc`[IZ ?7 @?  m?J ?ap?a9 ܂SրEp@?5m"2@> gQ De's* <@C IlQ*TR]^;fb X?F?R?Qg?R> ѠA]?B}CnI'?U\?`? H62!?+`H3W ?P?h\?N6ؠV{ XPi@Bm?D@?Gݺ?O"?L?I ?)3j`>`." Q\=H?=!RJ@?.?7?Pl?MӮ?5Ծ? t?5 ??5k ?DK@?D ?*ǯ@?F= ?-2,8d ?5`?J4`,bEfekM?UX ?^ @?R?D@20MWrTB*`$<>?BOa?QfE`?M9 ?8?@?<$?'=0 >CR`B4Cwe`Q@VA@?DH?4!Ce0 ?* ?`?P@7 R?D@?J[?0RNߓSa1?3g?WQ`?[ ?VZ?g[1( ?D^IE Q~@?AD ?`?UTNK UW@?C ?Y;?Q]?E ?BRW?:`%`OW4 ?V?[?MX?B[9/V@KK?> ?<; ??M`?Pg?8?4?[w ?Q 8t`?R6?bNE?3Qż@F? HV`T4?El?WI@e Z{`?G?Y?N@?M8F@?V?P?:> ?04?* <`?3\>`E״2D?B?)E5= ? ?A 1 7 @?0y?:4>!e9BR?H`6!`e ?@S ?0GP-R@-j?G?\?P{z@H*`?;@?P ?4 SQcO\ 8`?HX@? \:Hf FFc@?٧02@Q D?E?E.Az@V459dw?UÀ?Z=L`?Iy?:`?Nj ?\]?Q@9 ?<@?e ?cL?Q ?M€?AJmfM?%j.?#!`?GT@?P]`?B?P\?R ѠWh?ʊ`?Swe`?P|`?E`?P]V?KZ6@?#e?'?R`gkrC@VPT?]`?e*@?LB?*͚?KǼ?C.`?4T ?F?3q1`' G5aL7h@?;#s?F??"P*hw ?H?P>?T?``?RT FR? ?YЃ`?7I?DV?@R<JC`Y@4VeʠPΐ`Ce2BE@X[YpO1`?H@?8@8w ;55?D8 ?6(@?`i ?G ?6 ?AP`?L`?V/`?U ?# `G#=?@?^ /@?S?]`1ƀ;:6@ Ѡ?K+ ?Qm0S20 ?X}?IbVQJZ鹿#?X ?4@K } : `Wh0>@MP&`?( ?M ?@K@BX?G ?UB??8`2c  ?K?`< ?[2@?5$?J?a- ?QuKZ6@QK,VRE?6`?I`? w=`?F, ?AP`?F?G$? o?̠?K ?G?!L^?3@?Mz?R?8CO?4}^`?_?T DKL ?3g?B?%?8NJ@D?Vc@?fbWNi+@?@Pyu?A+?e?U]4b N Bx>`?9 ?B`?A:?*4?e?丒@?I>;<X|@\xH&@/AVe?B[9?0V?9F?CQy^'@?5 ?YЃ`?6?-?J?C(?:?D}?&-@?B:@?M?P?SjF^]T\Qb I@܂?#@G2 @~?Kj ?H橀(ʊ`2\JX^QOT?Ds?H ?-X G7=?SƔ`?T(C??M?N?Q4@?M ?Y(`C H*`2/UI@?H,,`?VF?Ce.ӻ?3[F`?S) ?S*n?6'`;1?9?GLJ@?U` ?Xۏ?# G| ?4?JvG?%m`?8?[#xPK&h?A<?8M QJO ?@b?CC3@B"?-W L`Nܝ@?@ů32[B?J0)?GEH@?\E?`G??N@K?9'?Vp ?I'y?6N@?3j`??AB`?H@?7?`?3 ?`HXaYCI&? G?`H#G?Sg?cU?@ T<@CH?-|[?,wd L0K-@?U]?cEq?L&v tb@?tb@@ HU?%?BOa?@R<?Hv?Ni`?Q1?P@,TX^a_N@Q`.9΀?B?D *>`?U`?T^Ce?$' ?PV?_Zk?Q?5?@_Հ#י?P?Ql1?.@?;s_?BN?F?T@?,B 9;C YHO; } ?G(?P`@H@?L?M?Lu?Di`?"P0`N@?͠?M`?[P`?2UHBk ?7`?0>@?7i ?-9;JjpP3,?V?Q( @fFˀ?@ ?K02@!u?Jǯ@?Nl!?G?RG=?@f5?03(?9? `?BԖ&t]9NS ?5L; Zӆ f?Rg?$i`SmƀJW3?1ƀG*]?@r̠?8`>;<1:EԾQ]QD& `?,Ы`?AA5ݠ?b?_ ?mT@?Ub WvJ-?J?HatnB L1@?V ?^o@?B(@z3 3#@,@<; B*`?>]`?<?+ 5dB`R}`Z> W H =`?+V ?3:?F?F4? q@?))C?Kms??.JF KО?CE`?Z?`E@?^D@?Jy=?0?DF N@H̀@!"?$_`. ?>A`?B0?;@?M[?LXȠ?9 EO`6?@@?E @<?.u`?A$h`? SD3[F`?Au`S#@D:?W?j4?b@?0$[ 0P?H6?Z?Ts??U?Pw?`Q ?` ?[ ?V ?`?O?/w GA=?!L^R5` ,B ?BU"e`4D@D @>GRj`a| ME?V'`?O6TU?4?F\@ `?>A`?;`AL; ?3{ ?S(? a@G?Q?fF?Y*7gR(T"?M`?J]' G^q@?*|?>4 @P%I9 {`+ERM TSڏN9΀U% Z<`?T3]`?Yi?G?:4?G??: @)IZ 3 =vpTq`??Wy ?Y?4$??AP`?O.?U~?6_ J22>q >G?9#X@? Bx4! ?Ν?@?&C+Kʲ G ?%@0$[ @\@.]T?J{`?Sr>GR Uv O@=@Cd?Á`?DH?N?;?@p qQX|@U0?5@ Ep@@?Q`?_V@?QN?#r?9R?M d`?R8p?B\;#~?J`?AB`!.?B`?[@?NQyVc@?$R`W?`G@!`U4F&&?Bc ?6yM@YU@?& ?eӀ?[`Y*\G?@?S?9,9?"?I;?E9 P`]002@?Wi@?C;@B?I;?MH?@= 5dB`8w LD PJ`C?Q厠?"ހ?9=?A ?d @|`SbRCd'C(A Y|& XW`Ծ @R@UK֠H?DN?YO?7M|[)@?IpO?9^@A7?,ZCI ^ @L@'@P`OX ?IF ?cO?c*?L<A`U>`XEU7R`?N%?Au`G Z`Y4]A"`<Ra O?WU ?[``?S T^^CO9y0`?>L1Ν?P`?Z 2 ?V?Pu€?A`?RM)?_9? )Cc\?,B ?E7ۀ?6d?-?@g?CI|& _L\>ӻ?Qƀ?7F=`O(P,c?=a`@M@V\@T@UB7Jg?/U?51 {`&h;j~ =m?'`?G??P?6'`U12`ZJ`0?GO?T?\`?LpwND*U{ Հ?Bb5dB`U `C=?O.?QN=^Ha?J> ?W?D! ?6Q ?A?L ?Y(`?Y?O$?J(?4U:f,6?!l$@?>?S`?N@W`8`?Y ?P'@7j2Ѐ?d`?/(?70]6@?4V 1I`S 8c?XN`?g?d? ZI`T{U@?K6?A{ ?G?I)l?H^O@.?:)?P$D#Z)Ak?$C:`w`>?D0`W B?L+h\-S?\'@?R`>⤀;LE C@?0%N`?WJ?D GB@;1@Pnt:*@?G`?@ ?4x`?2<D@f?o:`UW~T9*&@;R9=? ?QI`?Rz?Y3]?I8`D?(oZQ GLR ?*F@@M`Dr?J`?T CMW{@? [GP^J`?Qx hXNe?PY?aZ= ?7(Vg~P&?9L?T?NU7? `3Y#_%~?9L?Rgf?U؀?B< ?!@?J ?L@>mT!=?G,?F"!`?@?8|?$ i>$@4 NL @3FEp ?BA ?BG7@?)?T@?Z?V;v?1` C\Q?PȦ`?Y ,?<H`?@*?@?J_ ?[W ?@i|8?- ?6!?0Xp?S?FK`Nm @?c\@?WcUG ֠?Uq?U@?A?"e"??H_?`C?IX0ۀUۖ`?(MC?EG`?C%@?/c5u?$h?I;?9;?@?L?BS?Aw?A4@?%~>w`@@S(Ġ?M@?"@4 @sm`JF>?B 9]`I2c`8 `L7 ?SB?SPCX?'`QZ̀Iꘀ?6@QU@_}^?4@?`r@?A$P?à?U@?S(?Cm?:`?=?3d :?B;? q ?2 ?H+-?Q?Nx@-s`[vP]i@?Dy3?C`?8?N?L?AN*`?D ? ?=<?F5 ?; '@+b2c#F. ?YG?cWr?`Mɀ?^6?e#?b`?6 @?#,`?9?BG8UɀH ,46Z[^?9@>Š=?)t@XQh%`Y@?M`?UI?L?P ?D?7@?AAa7A-@?I ,?"aNg?D?VEg9`BV`?A6.R?C1@?_o)?L@?6\!> h`-mG?A:?ZG`?9U/6 >[5?,*v ??@?;?B@-)R@?6x ?OZ`?S >dנ]'Ha& ?2 ?ZZ`?R0`KW 4\ˀ?T@?A̔`QgVRL9y@2`5P6Pa Cq:;`3J=P`?ZР?ZhL가?H@?X5 ?2?T?dJ`?G ?Z@?M&M?[?c?X ?I?C S? IH5`" @ ?8??S"?TTE?L@`?NX ?V@?\\?PE#G>AM:V~8$@?Z?X`?@`?AB?Qd@QN:; q?K,?;,, ? q U TH@?9%)?D2@B`L:k٠?Kr?A̔`P`J4t?GL- ??~?P?P?PM?E@?U/?J?>߀?J?7M{`+n\?(fD?(^O@?Y ?P ?8?P6Y?Xj ?;`'?5?L?Z_?M ?T3?\b?6?5 ?U)T`?@RH'M(8@?A `?P?Hg?BLi>`Q?7?T?R(?V2?20R& :n?<?D~`?YB?UG`c?=`?]`?S`;JA ڣ?I}9?8K#Q@R`TLP3 RMՀC⤀?`F?d?M ?XT ?Z@?&?Vf?_qM4W?p M\FT@?"@? .:; ??u?P{?`LCB#?2c`?Y@?b`?e$?a̠?O9`?0@?E@?@y%j"OA DZd QqC[@]݀Mh6`PY&`[`NL ?*ހ?,FA?76?UE?MGXB+?To`?N?@?8w`?XHK ?`0?Q `??j1@?P91?;@/?E@?DӠ>?P0@?W %?E*?E\v?Ah@?2?Ga{`?3CC@?;?T?W@?M0?L?e ??&ɠ?]`?W.Y ?S ?JK)c?Y{@?1D9 Tu DM+?7\@?UuR?U`?=&`?6q9 WW' ?RR`?H?Jw?Ei?@-&U`?KF?Q8@?U Ud`WL}M`RV[@ җ?3T?G.Y ?' O@?z ?U`?4J6@?Hn ?W?XP?a3?`?$,UB<@?=)?AI?Df?&2H(I`?B5WfO0ۀ'o?<O D[hX?HJ@?b<@?\???P7?SUP?1 ?NN?\K:?T&?T@?S$O?>#@?P~?Yz@?R?Q?@>@7`?Ƒ?Nb`?@f?R@?O?[S?Q7p?+ ?-V`?:?A;`?QT| ?5(Ġj`?<1 `?1%?A} UIP?WD]@?E#`@ @C@?>Ho@?U@?T'@?" ?&ZV`TZ ?Ṅ?S?9U?!x?o?A7p?J?3 ?8!?K ?=JWW@M@#`?(6?DF?WV`?V<?-QI!3-?:q ?; ?1 ?+N?64\?NV?D 3ZI 3-m@C ?E'?Q) %pY@@?3I=? t?QfO?^?Zp@?]`?Qɽ A?@Ag:@U&} L8?+LE 0jK}?'`?S,?5f`J`2C ?Id@?LJ?20^O@?BG?E?AI`?Rgf?T$?9> ?$eQ@  ?֝?@?7?@Ƞ?T?H?4m?XL?QaW@0`@?S?`2?0?#!x?FHB8?V\!?X?Id@?(s NATt;@@Y@%@@> ?10?ENB?8? Q>P@` 가3Bf?I?O@R bX@AH{?RK KL8 ?V[?R ?/ ? ;g`?>K`?T i?G`?6S?Ph@J8`Q?ZV`?b@?Rܕ90?Hi ?Qk`?<8%L@?Q=?Y@?HW`& IXH`/*<@@^ ?3 ?9,?&`?G?E"OA >?P4@?X?:D`P2BI?D?F?03o?0u?%=7?F@?^ ?V?6g~?J`?P?@ ? @X!;dRA ?HV`A `?K`'?Uv?G?)@?2@>T^@=?S`?H2;^*v WEG`H`;LE CC?0?70@5@IoLΝ ?G ?T?=p?P?CV SY`$+?SO+`J`Bv0<&`Q`F`R`?"'{?<?03$OP^ H?3V_\'dR?RN`?Ox?C5Lb ?F?X@6.c`;!?S̠`P9U@?BLi?7`?p ?(檀L@<,?Rn?KZy`?F?T1`?2`?-`?^p4?^VCC@Y(?MM?Jv ?>j`2 @MS>7`?Z0?bߠ?[Jـ?9? F?>@=@Z`c Mio`?BAj_\?'R2#PJ@MA J@TW??8z,$C:`SuEJ?N`?Y5@?K@R cN3C@?U'@Y@\k/QsK`'M?Go5Rs q ?Ne?Q,`?Q$?$!#R7@6r۠?I 8R@E6?V?`?NŠ? 48R@?:&jUP?z ?. `[V Ν G6-K`?SN?5L@6jU?Kz?SL?D(=?BZ?>@?@7?Nm?F @1?%=7?Q0?W`?KxM@?J'?4QnTHWft??L?:;??E@?S_A0`V^ ʗ?I@?-@?"T?=DYcH0@?Fp`?BKEAy?Q?Pd`FB5?D%@HB ?M`?b}j?Z"`?RH'?HW`3ؠ#@?O?F ?@`?V ?]`?Xj ?V?X?WL- ?IcaBY!O?@7(+-WSO`QVb $@QN*`+]P%֝(@?7 ?@m2k4?L|;@?Cg?Lī?XĠ. \n ?>߀?^̇?MV$ `=e,?5ƀ<|;@3d?3?@@?VP ?W` 2 ?I\ ? F?; ?Jl`86?$?X`?QZ= ?Pn ?`1a ?T@. Bm ?A I~X$Jj> ?1tDG`U@? ?M@?m]`?SWr?Qv3vXYcLf5Xē>B;?>B?0>?DQn?Vt?Eݷ?A] ?[j ?U`?M_ ?] ?E@YED{?V?O D2/?8?Oa?SX'?[?E8Q]`<4?>`TjcI=1`?Ub@?'`EH?@ ?T ?V$>%~BV@&n`>cUvd2@WD?9?E`1r '#@?T9?\ O?L?D[?Sv?ZU?Y/@?OqK@?04@)A{ CF&(@BW?F @?S~`D`]OV5L@?֝?H?;@@?m?9 B@_yXyLFPB`>y ?C1@? J<` 3?5p ?5:_?7`?:Oq@?D?܀?xe`<9?KLE ?b_?U \_ dz`. ?X?Fp`C1?G$g?KC?2Q`?#⤀?N?X_?Nu?MqY'^ ?TO?4u %1 ?M:?Kz?,:? @#?& ?Ke? F S`^@`?0D Š48 Q?H?G5s@?D ?M*@??J>e?EgӠS1@P7`?G?I? y ?&u?)o4Y@%{?3`?'dR?C?T3?'P(6=?2kBxrK'W ?C?Z?E-@MhT-&?U*?V.?0k?G?[m ?WC`]YϠR?B(?S`?E`?=?Ki?Q?K$?ĠF#`@?Pba?9@X ?*R@3dD -H ?Ji`?@ (_mg WP0 SC`?8v@6#Q 6 2`EiG`TnYg*?PX ?)@?"-*@?T ?PJ@?;?55`?OƄ`?Po@?9\ )(?G?a7`?Q0V`W* `|MQ~@6M?-`?@91?3@?bU@61@U2R ?EY`?W1 ?5A4@UG@`G @5?XA`? S9?@?Q?E:jZ`U  4wF73Jv 6x ?F?AB GE@B?Q c\ŀR!? 4D { eT^O͞`?GC`?Q ?!3-E Q9Cn+?? U ?6DC1@#?F0?.:; ) @dR?E?XɌ`?TB?L@;$?.\QF.X>1@?H6JY%߀A\?0?&L,U )a?;Z@1wq?H`?w`?>M?Mҋ< U?\?UL!?<`Z8`f`\S A}FEL@4\ˀ>?M6`?FOYXKR,I :3S b- RO?$@9fBDS 9@?W{ ?]K?Hu I;^a`P ?P?O AIwFOM84L`P.#@?T@?9[# 2?A?RF`?B AQ`J>$@?ES?`o*?UO??6 ZI 3ؠGrD5@3] `?* ?U#?\c`?Qr ?GW?E^ ?2가C E?2h@?@(%<93@?DY@?Gk?L?Vڋ?V|?F DӠQا ?C?\(m?5uIj??Rj=?R7`?7<@0%Hu/(&:I`Ѡ>t_`?U?Y?N|@? n\s??7?K5@?*0# ?R)@?aG@?V-@fOD '^ ?P@?X$ bЀfT/W@KH q ?@}^>⤀XKU*\@QGIQ1Q,`IXK?5{?76EE4`AQ`/VN?V~`?Zk٠?N >fOO .g?^@?^*@? { IH V$@\|4y3?C{@"w N 42@&?7?@ba?Jl`?FYJF@a]B\ ?1 ?? à-ș?1?:8`3`@?`5b% ?H@?P,W9@?1` v\?3 ?i`?2G?Cac@?z ? ?GP?F?P5?Wc?6`GtH D ?P@?S?Q=?6M?CG ?U ?X?M@̔`@@`?C5?@&= Mv7s?Tͷ ?\ ?CQ0P#?Bxr?AfOL?',K?\?WnCGMYwBP?H?QU@?FOY@?<! FT`$Op G!?;/?a?QQ`I!,?UL!?Y@?R8@-`VU4 `8@5;?U=?bl ?Q,G΀P H~`.~h-hAI7ǿ?FE?Uʠ?!ڀQQ6$~WS?5?:I/`0f2?=?`?] ?~hʗ?7%`?W?N ?` ?ToB/cBC ?9?SN6`?I0 ?E@?W?N[>`9?BG?Dw@1;`?p ?1?G;!?I;?B;^?J C?A>`?(g?!fG@f#qD?. ?U@?,1>?P=s?R?A_5?; ?1 ?G@?P(%6 K[?5d?*L Bn?/#,`?+t ?P?E?A#?;P1`?Ak`?8"@bU@0%N`9* s ?E&?Ġ\@W ?Dh(?L[ <'^ ?T?VK`?,$Y@?M"?`ޠ?]2 ?MR?Gn@?3qM_O;9H@9O ?A@C?`[zn? t_`?Z]?Q ?4O?0?>S@?L?C0AB̀I* ?C%`?^:?Y  ?1Ȁ7 { ?.܀?_??8?J?Xg?V6 @W3Q2J W ]@]<?T@?9`SUDO8z7[?Gt??` ?ap?RH?Q?VH? ?HP?)`?Hb?Q5O ?9ր?A??W?S".@?7#@?3v?7@=J @?DL`?;O`$& ?`?%*?Q$?P#-?C ?C?3N?(?Q3?J6&?H ?[*.`?<U)T`?F?V`?Ed?$˕5 ?3h}`?Uۖ`?J?B?W[?JO1`S >F?AȀ6qP hX?NM??m0 @9IU6F ?4_0J<`QB@o*9VQzP'@?6u?5V ?7x5@?2 ?9 ?7E?O*F`?Z ?UM?3(?C?U'?5ƀJOq@F >@@@C1@UWǿ>F?M?6: ?1G@?Tn?^M?K2H W Y-`P`?,FA?6O`?Hb ?;4w ?B@?C(?I(?P`. Rn2" ?2WPrR3?C5[ ?D M'U S R@9XK*R@UyP?UpY@?`?#љL2_ ?3љ?Q ?L?H6?-1`1à?*LMS@Q`%j%B2J5L@?'^ *ހTZF@ ?5?1 `?; ?@z`593]?R?T ?p ?Jw?S`O\ @"I?@?H?Jw4Ⱦ)`?Wʗ?\?S.?Q?Ds`&00@?Jl`?]*?GMI;?#?]@?\Ѐ?H$24^_g^ X?G}?I:]@:1=Sa?2$?$_?,@ ?;Ԡ`?#!x@B7?4 A?DM+'u^<'@??C?U`?TO(@R7K>F73@?*5 ?G$?<ߨC? @c?C ?Q̠,`L F5@SJ]4Q!`>|@?MbU@?U?EH?(Ġt_`O{<D `?L?Q:G?NB?=1`?T#?-\F 65?$u 1k?P?.E:A= @?F +091U;9`?XZ ?A4 > ?8@?O7?KN?P ?6$eQ@?;!@7]NrEd`?S,?U(?SN?Y]?5?7V`@uP`8?jU ?` S[D`^O@?L?1Z?4?5G@Iy7{ ֹVҠU*M,n ?XQ?aA?1`R8M?1.@2qW5 TNP@?F~8?QL?3>벉?4:?PW?U ?E?6 ?B9&^S%@@ ?Ss?X?GW?PU?[ ?@`Q?@Q'>[?5?[?^<\?A `?֝?PԹ ?R=ș??Y ?[.q@?M(?D@%5`?Q:G?Ont??Fn`?L+E ?>1`?^@?j&@?cX݀?X`@?``?K?R?C@KR C@?G?H<8`?CЀ? C; ?,?T?G@`9(! ?G?)oPH?<?La>O<YI`$v\?C⤀?F?HN`?T?bh@?\J?@I`?H@?G0A=NLe_yX\8GT6#Q ?A£&&E?<?TY@?NKF?%=7L`O?9?Q ?6FTC`MP`6J<`?Us0?`kԠ`[Q=D@DM+\3R4+$?Az@?F: E*SN6`>?Acx0NVW\|;@D ?L ?R?P:?H^O@?&`?F?)J@3kT6 ? s?E ?RR`?;=8`?# ?P2?=`?@C`?L?b ?b@?*&@Q#>?Xvt?So?A;`?Q `?T^?D!#)UV@Tz?G]8?QE2I4?Om?Y ?d?e?KZy`B<@?6 #''?&?3%@IT \;<\?Ts`?T<?T5?X@?J ?E ?S~`?L@? /`?>=`?['W ?F0USIꘀ,ydWS0? @ ?3?>Ho@?AY?G?]x@?Zb >6~86@P}Uy \WbVP4@?BЀ?D ?:d@?M_~?4X(]`#82`?Ff ?>u?9E`5P4 &R@XT@Hg>벉?*F?3?2Q`Q̠_ @R0W b:Ga{`?R?DƠ>`Fb8c?@r@?U @?P>[Q`ĠUq?5?0K"8@?5f`A3-S|`MH/oA9ABV`6q?$H? J<`A;`SM@?5Kk@?Q ?P?<`3C@?+!@?Z ?W Bw`[P@@?UA?Ve`?#k`^?5 JހZ%S?;i ?E@E» P3B??u ?SG?Ms`HZ'ۢ`U* @S[> K(z?L?@Xp?@f?N#@? ; h`?+Z@?>?>'?I?]@?Mm@T@ M@? 3@?7`?Pj?7(?/P ?82`E@@4L`#qN. MoJ\9URWII@>o?Nu?JL?@ ??u.#@U @Nj`? 4 A??J?Q8@?'+? K`:VR DF`?!>?Crn4lMҋL~ F;n\R_k:ހ?Zj?Tw@ ? `?S?`p ?Y?AX?5Kk@@M`2yݠ?F=Bc#^b@BY?@c̀DdVEBG?5{?=5*UZ@Uf`?@?6p`?;6< ?Az2?Yr?UA?@U`PlS@?AY?F8<?B?V1@?Prw`?m?M6`?BBC QUA] ?.D?6G,RO ;=?0?%B 4Ⱦ?SgKeSOj?T?Qv ?C`?#A#'@?:ڣo2-*@22'6?Cؠ?A?@?'i`?W/?TM~FP?H?M?V&(@?TH@? ?4?B>5N`_W`]@X|G3$ 01?DƠ?O`?0:&{a`?#@>. ?;P[L. ?Š?T?U9&MG ?DR?TP?FB?E?5Hc?Om?Q@!x?7a{`?N7c<. Pd`?" ?F`?BMՀ>ZI FA%3b???6n`?+?K@?Z ?X`'XX9?S?T+?Iq%@Zb TP?G@?P^5u@`@?Acx?Q̔`?AE-@TNɰI!x?Vt?X?G ?J]?I!`?1 h`F@Fɀ@?5@?F\!?>{?Sh?\?VW?R @?Qd@?T8?]@?T2eEc ?"e?6+\Q5gӠ394u @>%~?I}9?X )65T%@I~`?QX?Z$?Gf 1@E{@?'E?S< ?Z ?]?Q$C?$?Atv PL]?H3?VZI`P ?3=?Aɽ ?L?A`EAy?Nj`@@K _`We@@`@? K`?C3?W[ ?a ?Z?1@>ӡ:w0Ef`R`C5[ ?L?\U`?Vlw`?8d`+5@)0?4?/L?Dt?`O?]`?7" ?Ei?IH KG%`?S4`?X/`?L&?B?i :M`J L`&?7X?Bo`?@`Si]?K ?`,`?TF[l:? L?W?d?*$G?' k ?Ll ?A``9-`Q:(R@?T-6`?Kdj?&?G?K ?<?=:@`S?/@?Q'?*n?+h??S`?8?R>5?Vs?I?Th?^$@?TN?PqK?OJ?9R`?B ?T˕?M6@?0Ƞ?=@?OI?O`??TE2 fO?:? @B ZTjTj??/9@?A} aW 2?=\T`XX @&2T?3`?+,R\K ?0DaV5@1@?O?3< >?P@?V`?4@6: #kT(@-@y1@?#T7l@E@?%~?=H @CS HB Pd`:?J*@?>2(G`?@?+*.`R3?W6?U;?F?B ?(62F 7o?='55`?Hޠ?%؀^p] I ;Z@?:F?HP?ڀY`?V^?O WY]D>hX?1 ?B;? җ q ?HP?Z?F3kT> q 4@F / rR \k/?1 ?Q_5BI}93Fc;2>hX8՟ ?>j ?PJ@7l@O ?}?T ?d i?d?Q h`>f?>'?UO?]e`?X[x?F5 ?M?|@I N@KQا :l`?A#(J ){ !""@5@?5pY@?Ne?;@?^@?5?AMb@QJN @Z<@ToB=2F?E@?Kq3@HQݟ!ARm@OH`?A?X>U`Q87a{`UX3P 6x CuE9?"1`ITX`K/ h`9(<"?%@;Rd 48?<8`7G@?);?J ?@P?%5`M?Bk?X\@?5A?RX?Y?6 ?XC" Uѥ +$?Fx ?N`?X@hXcJ]u6 :8`?3$O?\$+?\?Lp Q3-9a?Kw"U AȀFR0`SF??#`X%~R@6r۠J#i @~@5OR 5?.\QMW@DV ?P:?g?em? wT'D[?)?P\?Y?X?J8 H_]LQ@O`o$@?2z ?GW?@P`'t4V CJ2A 0<@? @&p`OEC #@?K=:Oq@TzQ8 PDՇ6~8"8@?RP?Yٍ>MFL ?3y?.F: ?&u?WH?7`*z ?= ?Fn`?(`?2<@?5qBrÀN,G k Yj ^3(?K2?C,`?0z`=&`?WD?E A?A~u`?N8π?B ?P"Y=가?1` 4?-&E-@a@T ,`F ?Z'?^ } ?@h`U@a_9XK?Vk ?16Ql $ i?@`?B'{?V#Q ?L? U ?>@?,z?H@?B@@Pc?Gh`?3h}`$+Ak`"?Z@?UG`SI=\<Da`2h@#I=?Af?V?Z*@? q XPW?O8z?..#љ?B4D`?P(R@?!}@%N`)]`?P/??P]?O?I }^?;=?OIAtP? k ?/#,`=٥ OF+?O*F`?`?K@{?/?HCR?"@WbU̬`?OA?[K05O'o@?K]P?`p?Q?i &B-&?.܀?HX?S8?V ?Hj?\?:RH?Ed`?Š8AAgQJ?8?߀?8G`?D ?D1`?B?b}Š?a@?]?Z\9?IM?S^`?QIGԈ`?R?Q  >p4V`U ?,@?akH?\7W/*G(@1ɽ LNǀD?R?Y,?9@0@??LW?@QRS8 ?5&} ?/}Ff ?)a?^?`|?F(78"@8gEI7`?;Ԡ`?N*@?I/?ʗE&s?Y*"@?OBkJMA=w9yRV@P(?@%N`?2;^NɰD"@ ?"a?H\@?;]PUgӠb{Y`@H]?T@?"2+QΝ 5_M7?2 ?V@?^= ?M_~?? 01DӠK`?7 ?NO`?L?I>Fm- W~?;Im?XU?H@???eCI=?B?`k`?Ye`?0ȠA`:o?A?NKF;Ima4>`3$OL`QS#B673?A ?K ?,K@?U?eF̀?[ޑ?QB?K?|>?9?ACB#?XI?Ol ABQ@`@?VH?]@?+W 5 ?8檀G!ڀ?3`?6H? ?Dp >?BJ@K@P LU?> ?P(?A'? F?H?L}>⤀6К`c`L#?8Hw`?7u^?N @T?2?P?Q6?N?A 3T?I@?_r`?QDȾKN,?3; ?2" DN9`?'#@?L)ـ?1̔`FNcl?1?X& ?K>GT S_A@5FS?r?Rgf?Hw`?B<@?OX@?,56`N FFӀ?2?BF? u>FQi' "w`?A@?F&?)o[`ݠbҠ?@?Y~`?KC?g?? :k٠;=GqVU(P0 AA`CPW?ʗ?E ?+`9"R`?- @?I?B?Q#?Z?? NR9=J<@>w?1PHR? @?2 ?-_?4?+Q?Ġ1à>ֹ?@7?HE`?Y ?[`?80ۀs?6 +`E{@?>w`@'@?;*.`?LG`I;X B`A` =@?C?6dNBH˭?@ ?AAa?+ÕB7?HM?DƠX<@b1r ?V`?P:?CuE?PM?Tj?)n N`?Mf ?4m?FE?_i?Tz??\??[?Efh?Hg?D?;*.`> ր?17`?à=@LH`X7?Ro6?8Uɀ?Lī RQbM@?4j?MC6Sz>B0?S&q ?V@ lS@MA.H:C\3@;T4@c ?:d@?;'W ?,)`?UPc?SOZl`6u?/|@ZI )?7?L[ cQnA'?G[?R`?>9`7%`1 ?DK ?Z ?W" ?;W?dHCR@n7l@1Rm@P5:?Qj?B w ?L. ?[Y?QL6К`H7?B9?P|?:?Nɰ?PJ<`C Hy? D@Jɘ`6u?4\ˀ?? %@G ,@`` @b@W :{?-S??H@{@?Vqp?L%@@?@*?>1`Qa>'?X΅?Zb ?P?P5?C^`?=w?D ?4)@? W ?9?K?Du8`R0`PTBd`?/~?*RH,:Uؿ ] @5W?L`?%@PyC?RN?Zjn>P3`H(5:_?:i`OUσPC AY`6 @@?D<?:S1 ],[;Ԡ?QS?O?'?6\!??4?@El>P@ @?Mio`?JS =jAfO?7V`?F4\(G`\zϠYJ̀?!̔`?)CC@DAAk?<@?\@?Q%?W?*ހ??Y%? L K>?=w?8q@lS@?5u?A*S XH(ē?2e?#`>hX=&`4?8>?D?,Q?O2?5 ?=٥ ?V?R)@?OX@?TƠ" `#]DTmVdAB?GL- ?I?/J0IAKO VFf@?j`Jf+ S DR̀Q@? @?WM?NSWiK@?'SG ?D:?1`?6 1̔`DL@KMEW?.)/?R?R@?6?9o?3 ?C?3ؠ9f2?Ab ?kH<8`?>`?\0?Q""@8  F}?&@?l"5f`QڀWO Gb=_A0?4,?H\@?A`?H?,oB;^?ș>W QFx -:HN`Sm J?.Š Hk? ?C2?D˕?R2?W @?S>U`UuRU@QRa`DE=H(?@?Me";q3@$+?7?W`?Z?<q>MDcNM+`?Ƞ?0i|?[`?gq?e?d@?\0T=_~BOA TO ?Yٍ?R1 D&:): ?@/`NB?**@?I@?S?`?a£?R`?>@?;Zy`?ZI ?9ր?D0?E؀ Q?Mϳ?J]?VTQ?`C ?U ?P`?YB?US??gZ?DoB?H @NkW4`Rl`?L?87PoA#D1 h`?1UeQ ?1`?F ?^b@?]J?E?Bk?82`C?9J?Sس ?$Q_54s`?WԈ`?Urz?d`?9;$+($=(!?47݀?Qk?>1`?3љ?,WFК`>KF?)@?^?!k`?6> 4/AF?U=?J@F@C,`?Hv@?[7?LQSd\33N?A(?CG?H?Fa@?F`?EX3?2c`>ƹ!ݟ?-1`?QF ?RT?N`?W~?JcSA>? ?P%N`ZCљ?T@Bc`R0?Cv?Y#?P@?_ ?dL`?GO@2e ,`?1$>`^g HG`?R$?Qi' ?D,?AȀ?=@?E=?=_)3`1Z!s ?#`?2?M_~?LߨLd/͞`2??HĠ?K?LU`?_<?aR@?0TC`?0 ?/VNo:*@@ @H,O.@@7?L?GQ?IUtF$X,?J?T?[@?EJ?QXр?Us`?)ϛ @>9cPJ@JB?0k?GV`?=bU@?:$?0c̀?5j?J{y`?9a3n+#$`8=@2I@4@Cb$h#⤀9 hX?3b$p @o* 가?CV ?D `@ \dˠH檀?Vn`?VCF6< TrϠG%`?RI?[`Bgf[GL>I?M?>V?8J`?@ڀ?Lor?F 7D51-@1Lʗ?`?,?W9?\p`?:`?@]?Yd^?7JR%Z`C`0R 0?AQ?6dB0?OVNF@ ?"k?S?K/V0`R ?H?R@?A0?@&@,+>$@Nm]`FGP PrP(%Be?7?DlQEBkRD@Ƞ?Mp?W?^<?]xY`8 a0V`R" 0B *FK`V`P:$@?L@?R@?@R )?@?B'{?Q1(AGn@D_?Cd:?Rk?P}?F@1Oj1@I6=> ?0c?4h!8 Jq 2 ?FR?%NB8j?;Im?K ?2`1*;,6 @0җ)os -٥ : CGg)Pd@8f?Nx@?T?1IE>?T+?I}9AR[SL ?Hz?]{?=e,4h?:ɘ`.܀P%?O}?]?V>Ho@KgA?%L@?* 9`> ?X?e?Y?L?S"?hXQ 5 ?GP?RY@?V?>YzH檀C;bIEf@Ou My ?Q6?[3i.I?4?9o8|L)`Da`0 J CN:; lkPgX2G VF#Q ?*R@?'@3=y GWS`<?U?Z ?I@?@(s @p ?:]&MX) ??@2<R`R+KM?#|`?E4`*As?9?=4M@[[UKk@C P)!f?UY`?`U@?8w`SiOj@?0#?)a?3`-'Sm G9?2GNB }^?Hߐ`?T3?N`?CS/ ?C@ ??d+8 B@ȠLTvH`+t#?7`?R?J]?'? $L,Pi|6+T@?6m- ?BƑ(*`?eUZU@\FAT@?T&@?]9$`?U;QD}v?3 Bc#7ʗ)@?KS_@?\Hc@?O/?.g?4>⤀>(%?FL?F`?DN?X(U?Y ?@0@?9`?=?D˕?'tNkP@?H ?Y3`?86'?Bh@?ApA@<P_@F 8UB/O?@ ?7vJ$P@>B?A1?MZ #G?A>>APCԠ`?C9?К`Q3`@ ?80@?<?? =@S?1K?TjI?6`R@@TV{a`E=?@lS@*]N@8@1wN$R @H(?$ܡ ?B~ @TJ)?M6`?Y?B;U[ T3N?9,?;@?D)@?>#@:k٠? @К`,?q?Co`?C?L?6Vs@?9]`?SQ@?]j% ?Mϳ0"w F&(@*t_`?N?Rn?T>?OO4C?`Tq:{,`K/S ?D?A&e z Cz YJ̀U@ڀQ̠O?6M?5Q+/1I@`4#Bh@` b`X@QF @>߀"ƑB@>o?9s?JZ@?6TƠV?G@?a?SWr?@j?VYJ?Q.5?B;?!@?U5`?[?D A?W?K8 ?T(=?3 4?7 ?2(I~`8oZ?ApA@'@܉?D& ?Z?az2?__ ?7: ?M@#?@?K?|?E":`hXM~[p`B:?5#`MP`\i`S> ?W?X ?DoB?Jf+ ?@P8{@Lī?9Ut?0X 22V@GMN$@:̀* ?#2?s EG(`?|@?8u 6W[ WIT&@@>?E:_?Ny?Q?R?.#@Du K]I(&M?.8 :F1?T A?e0?``?Jq ?97.Y )o?O9`?V|?X ?F73Ub@Xր?)* ?J&@`?1'?z ?Fx ?Q?@?0R "!`R]Wv?H`G k G|x ?&p`A^W"|?\QZTji=dFlV9U RY2D&;`OAMʠ/47?:ɘ`?=v7LbbW`ŀ?M ?a<@?MH|E?;q3@?DU? @?0?T[_?Z`?DTE=?LD@?V|@?0t0:?Nj ?V[?I,C?QS?M/3*z ?>=`?aڀ?b ?[`?W<@?Oí 9`J;?9(?^?S2??@?ZI C *@? ?6Yvb=V`?V+?^i@?R2#?8z?HJ`?CMcV[l= ?/?O*?Ra`?oߠZl`Jw7`PDJTPGe W?7: T[__Z`M(K)`Ep ?E@?Sr?V?Zg?>Q1VQzI#NB?#|`dR, ?QJ ?_4?Iz ?)oC%@Pޠ?I?U3?I`B(A?U?X?G/?;?K?AP^ MR?D?:RH>ZI ?7@O\d,W>=UJ?QMt?LNǀZ_de F ?/m2|> h`?.x@C\T L@?8%~?J2@@x?Jg?Y?T?@N@G W[L+]P:E ?"qW?HT ? 가)(?Ne?R +b@җ?I]`?VZ ?T*_ ?W?O^?8s ?Tx`?Z?_SǧO@?4J\9U ?< [?<= ?M@?6ɠ?Aw[@?N)/ $+:cS?K?XP?P=s?8M?-?D@?D@c =pPD9-`?3q?UL!?]D>]NrM|`?8"@?&{a`H Ux9`?;#G`P ?$& @%N`?8r1?Kt?V?`?OuIfL ?)?Ic?C@?+?) ?2G?Au?UlTܠ 9O Pq`AT?% ?L^g@?P|?H?RW?O`$!IE@?4h?>߀`0a` ?A@?IUt?K`Y f'?Q3N@?)?b6?`@AӮ`U5g ?8T ?N@Dy3B  @F LzH`?R?d}Ѡ?Z h`?-~?La>Zk#a@a2wE1 ?$[FtG@I`VW0z6?5x? ?7<@?P?P0 ?F]`?CJ?3(i -?!} ?M?W`?KP?BT?U^ ?Qn??J?J?bNz%?W?Pk?/Bt/ QIwSBEB?D?M`?@h`?BR`?3?E؀?[T?ReE@,56`:*@?0?P?U)T`?LCj?4@o7g)P YQH?. ? @>@ ?TE?8 ?Q?[?[Ԡ'6`]QIH?*?)t@Z)b" QvJ~P5 J@crhv@s?NҠ??22?dh`?dC:`?=F״- ?6H? "w X`_90`1f?@X :?R& ?d?Uw?Io?]. ?P6Vs@?(MC?J?AQ?KR ?UQ?2qWCؠ?&u?9zb@m'dR??J*]B??3`?/J?,)`3dM<=@?*L'.?f?Kz'@?U ?Q*?'@PQVJd3(+-?f?J@?#k`?<?7L? C>|@? (;w?2F?U,?MH ?G ?_`?Y!I>I?`?C0?PC7C7@45@FIϛR T5@?!B?U~?W7?N `#!x@?+@?2 3@J0PY&`?$D ?\mQ@?Z?BJ@ `?/Nz%?&?9?,3??u?Dc ?#G?Mܠ?Xڗ?Y<`1̔`\l K͆`?8 ?&n`?"kAHC@VkVEgRBxed@c -bU@#vSRy@?M?ZV`?Y?GB;"?J@9?1w[@KY/??d?U8@>ӡC/>?Wo V?N?UY`'{ @?(G`?I1@?T?JLRR ?K͆`?XF@??J?GO@?M{`5cPECI?m?0t??Ҡ8fPHD#?1Y?`?l?Yn :@?Gj?^)/?T>ʗ?$?0ۀ>m?E ?$C:`G.1?6@?A@?O ?P?H? Tp U-@+:*@LZ$?;?Mq?%Œ`?@`ƹSvà?@ SDSN@!@DN`Sh VuWA ?> ?I?@]BC SG5Q:$R\ ^B^?\;?\dˠ?Ei?@?J@?H  7o0?Dv\yH/o?8(U?C%?-@>?AQ?7 B@?Ix ?9L9;?2I?H?*0>w`?0:?G+`?D?Hs ?@QI1R`SfC`b?;`?R4@1ZPD@?382`0A@XMQ h`?T`?Z?1@?:A= ?DL`>@V \+E OU?A?8B I;E⤀-w/9@?P?aօ?EHWE/?SN6`?K@=e5NB2F w?IB?,Dܡ T@?FR?PH?U{@?O -)\|;@a*NgGMZ QJ & ?;?KV6Ag`@:?6 y\G```F0HTAS=R>5Q?RN`Kʯ 0A Mt@8?H?#05P5?@?]J/?Px2?Q ?a\^?5M\?0``?G`?3љ?J*@?E=7j?A{ ?6Hҗ?J0?"p`?C ?Hl`?C5?P`?Xvt?T8?@\?.@?(%~?u ?8j,`RH'Bgf?BLOnt?6B?[ ?-y `hW\`?B\ ?O^@?%pY@B< $& ?Pm?2`[ @W@ ?5d?Gʗ>y >"CPWA0V`&@>s@c25?M ?8T S\jTQ8 X+[YÀ\4=V`?XI?J FR??M,[?.uD5G@ ZI CL`җM6M ??& UWPI`I8@C@?,z?8M?:>e?I[# ?Hs?R̀?Z?H=DƠWVV0rW(W28f?Ν '6Z@b8@`?E7X`HJ@?JOԸRYxA@c5]u.Et_`G1}?4#?A?D?=?Tt@?bZC ?A\Š`5» ?a?MU)]`?[a`?Zl`?Tu?Mf ?:w6?JI?3T7݀A@?KS_@8fY@oEqB'{2@R" U/?@4@?U 4 ZcS@:?U?Fr۠X@Vu?F_?Q`+t B@?S@?d?KCWS] `?)o?Izb?GL?%p 9(.?Bc`?Q>?:j-ș>T@@C"`VT9XbY{ Fn`6H?H!;?d?]Cˀ?)?Ck`?Q0?CQ@0P6A7`#RQN@P?:Bל`V-@Nm]`M@>F?9ր?S+i?W?QD?6@?S-`?cL?R@m=C`?:M`?L\QYU !@Pja=_R ?/ ?Q""@0%N`I{@6=jE`U ]ed]]\? $+ K`S0bI>6>?.m]`?>$@?TK @?a@Q ?Bb[bI@?SK?JހY̠I?Y?p?W3?Bt/ ?Ex?Dbz?>#@9@]kR&?@:C) aUΠ> J̀@z`?9>?J?J`1G@[1W[QހbY]>?UNB?d?9X) PT?FtG@?NO`.D1Rm@?E?F? ր?}?N`?SEDb$Wl@?U`?K`?K?"0`?9@?Sz ?Uq?3^`<7`?-4?$?4% C?T?Y?YL9 ?aͥ?W\`} 9,>g6:`Q"; ?E&?)zb?I?;`>7cC@D R@@1@?Z?a ?Vڋ?7 B@A1?5B?Y ?E{?H`?=@>?]9?Y/aXw*K6? f>ŠEuZ\hX,?Q?QXр?6\!;e@D ?JA= ?!fOQ$Wr`Z Q?\Q?mX$G6FOY@P5Eƀj?@w eVX`R!@?B??*@]*TQn?HT]?'Oީ!D9 ?@ 2W b-@W'`?=)Q@@Y@6~8W^Z؂`IiW@?2Ѐ?RC ?$`Vy?{<?@T@ ]?PI`?fc;?R`I A̔`?NHo@?T?Fl?@H? [G'?2@?(@ KV*k Y+@>s ?C@?L@?Kۺ?H?K@@?O/?G ?B0?-??M?X:?S?E_M?">5?9o?Wb1 ?Z?Tk?Ig6 VW^bN\PP0^ ?Nj`?D%f?BƑW >7`?D\ˀ0 Xjb? ?cs$?_Z?@4@ 01@~@?gZ6?IFڋ?5Y`?Vi?O >Jj>65?733s@N \n L?C@?Mq?(+`A?0}^?Z?PjA7pIP??,`?@W<@V M`E \XK>4/(?9`?P?NAV9`P^ ?`?TA?AEH_?Iꘀ?f6?REOOí >?Z?NclB25?R ?Wj?S@?R >fOB?4@Ԡ`YK`WJD`6?Dm?QX?Jr?SC@?`*?_}^?D>b` ?='?(i ?J?]`?Sz (A@*T@?@?@?=:`T. Y=O [^`b]e,E^ ?FOY@?T ?G7>?B?Y?0Q ?@/??`ՠ?O`?-@?MJ/?PK?? r?#kT#@9 BrÀ@o*CvQ@E[ ?< @P9CJBZBQ@4bzFEFFӀ h`?J C?Wq?Po*%֝G@u?@QP~$+0:?==ap b鸀?VN?]@@?R?873?)1>W F.??#,`D)@V %?$QYfF?Aw?E;7XI;@?K@?Uao@?C 8?D؀?c?]5`,E?`?I?G> h`<@?>?Y`?QMt?/?:]?D/W?KԠ`?T?MZ ?:'?1cx?gZJ??? ?%v[@5?Q?S^`G2a[[r?F;ImNYz?1I`?; FVs@??]@?\?Q ?>@N$Q?2qW?-2F?5֝?-@ hX?K?SD@?C@?@?<'@?:&@5@Q`3{?S?GM1 ?D@c ?S~ ?A?1, - NXF߀ayנZ ??6Eg3`HfY!`4p ?@6 B`O5`[ؠA?CC] `K8b?P?Xz% [| [*.`?0?_Sw`?Pm 5c?1$?Hޠ2H>z 0MW`S =&?P w?N `?Y`?& "OA ?TH?Hfi`?R?YB?P48`X0%V @G2C@`?ZF?`V?Hw`?5{?Rù?UC`?F״?AN*`?Aݟ?1Y?M[; ?c%`?d@?Wb?S?R ?A%?'?( F`dV9`PU`?5L@?S`?TƝ?DP4?-E?]J?W Bd`WJj?5pY@?SM?L ??8.@?A<@ H/o?@?Jɘ`?S82`?-bU@Y+H?R a?8Jl/EC ?G&7`Pc ?A ?=€+g`2:BgfP2S B?3k`B;^YB(?3k<U|@`kBZ8 X`@L?L@?T|?:@*0YDi@]?H?a?K@?#ʗ0``?<_?:wI?/(?c?`d@?HM?$G*@@?M ?FYJ1w[@?@?LH@7:L?U#?V@J @a TB ?7֠?Ƒ-'?A̔`?N3?4?^?S\j!}?@k?VN`?Wb?PP3NJmE@?k?NB2?Eq?QJ?:Ǡ??I?V?YĀ?T)@?UDQ ?V?G#@?A`?['W ?`?Qɽ ?PH?Wѱ ?G@5Œ`@ HZ}`PTf"?C ?F ?2>5?BQ`?[| ?X??<$+\>*?@T?QXр?Kdj?.m]`?IG@?[ ?Q3`>~hSR B?D?,`Q@?:F?b\?N@ hX?L`?.t H˭#ZI ?$N`?Ep QG S Q' }^?7J%NB8<8`RJ@bZ@?80ۀ#I=OFW?1?{ 6 ?HR@?E>W A^4ZU?R@?b(?O]h?Cy?M;?G*@?:&@Lߨ\ ?B?e?W#?H?\i@?N8π7b1?P \{2 ?H@?)?\?^m@]@X?`?T`?Nia;FPP I?P*G?2-*@=n`?5 ?M^`?N @T2/DFLCj0<@?$~?CC@?U?T€?BЀ?@k?T ?XL?2IF?4_?O U (6<?J ?L0Ge JQ@X U" C] `-w6p`L St`C`?y ?(i ?? @?Ix ?,@`%q?8z?? @7`Ci?Gǿ?`@?[?Cm?(?>?P?H=@?Kd ?a`?U ?C⤀?T ?NE?+ >j7 ?ARm@QmjIe`Gb?HZ `?Y_f?!q@<@4hSW}:W>@! ? ?I ?W@?8` ?@:+;9Q@R;^X-N`RT9?c̔`FL?$@?K?C|`*RHbX!jEF΀?\V ?L@?6< ?Y?V ?<?@T@_ W?Qo`>߀?&?42/?F< ?4lCTu5b% ?U`?V2?GrQ`T. NwNH՟ D@?8Y?KC>,`3e 0nMl UjXZ7KC; ?$O4?)?WP ?O6 8`6?MGX?Urz4x`ZF0?Q_`"N$@?;=?Ql >%~Gѱ B]u@1} ș,b 6jU9K L/?`?DՇ?*cS?SAm,`M`?7?;0`fO?QR@?T`?;*.`?E'?` ?`ޠ?Rd ?G<@?4 >%~?A8 ?S?[?^x@?W"F`?Ews`0F PԹ (qB?/X@:w6?+ ?LdAKS L ?9@?9L'AcxMt@<$+?<?5(+->o?1@?D+?Q4 ?;5 ?&v\KLE /gZ?*v G: PԹ ?} ?X`p?bQ?Vy (f?;?C?M*@?QI?Ԡ`I[# ?%?`b?e4`?UCU B\ ?7G@?J @?Lw?;v?3 ?P6Y?I`:`<@?48?2Z? ?<ߨ?Q`?WҀ?MK`?Gkl?_1`?\H`-\>z ?Zh@?O8z ?Jހ?RW?,b`i  C) I ?R?F@?W?h@{@?d?P$?F_?Op?FC@ KQC^`?@2?G?Y`08(U=P`DQnTs`S > h`?A7`? w`>&Hr1[?`S5?Ja@?OO4Gh`P? *.`?HI?Qz2?RР?: @}K5^ ?3 7`aN@?!'?`?`Xp?Q ?#6+47݀ē#''/xe`?* ?A2L q ??J5 ?14BBx;>?!``?>?X ?` ?0r,@`?Rң?P``>@?ș5IQ@?P ?.:; >F38~hE{E@B@NB?6 N;T@ 8?Z?%?S?TFɠT?d`&S` h`NERV@L?I?!Y??X?^`?IA?? ?IU?2?`C 7G@(0ۀ!>? ?&$~`?8M6}Qo lS@?Jf+ P`F$?6 3`X|Qz@?F2?JEBЂ@A?A?;#2 q?0t@? U 4`?@=s_1`Zd@?FFӀ?\#u ?G/T@'10`;D(=I`Lb`ML`1s?=가KԠ`?ީ?2ù?LH@?V?P, ? HS) Dj?Q\^?ZUՀ@ Rl`EpY@ESK| 6 A `N|@%_M?B?9JcD `9PDh(SO=p?S~ ?S@=|`X?ŀ2??W?8`\ydTJ>މŠ>ʗ?1à?@c̀1@QXVn`+5@?In ?B-?='?A4@BR)`?@?R@PaiP>)LW@Dy3?A~u`?P?Wq?[ @?R(?$3,`?2Z?Hg?Ƒ< ?3?H=@?5@?=h?M_~?A?&+?D `?Dh>w`?Ln ?EZ< :?T ?KCD 8r1?G;!?+QH~`2:?Jɘ`?R@?CD?T?(G`?!qA4| ?LH`?E,+B$>dנ?=H ?LP3 ?Cy?O?@ٱ?Y\?M@?$ i?T5@?Z&@?A?@?m: U%W|U» RܕKi RMP ?B ?U2 ?TK @KM?S?gHE ?e?TN?I%?;?H_?&EU\P RC.`WҀSx %NB?jU5L@a?'i`?"T?-2c#L`K*.`??J`|?` ?VM7>MEO 5Œ`?TZ ?]S1&jU?G?@ U`5?}?F3`?$C:`?Qu9?W?ZHW@?TA \DoB?;t4TEK9 JD`XPYR`>w`?R`?Lz?D?C!x: @?R@?;]P?.)/??{<?N;?I>?18 %d`?1-@?W@?]D?VW?V>@?Qk>1@?I7?6 PMP4 ?"e?0(%C" D;8bLn E7?>ӡ?M@?R\?[H ?S/??a?DR@?)ր4?9g?<>=`/J?Ak`?H/o?*cSKq3@?1=?h?d ?&?9(?Qε?N"?U?GKSb PFB>*DbzT?B$?c ?V#`NS@P ?S?cW`?Wr?A&e ?Gv?V'?X0@?:nF6`?)U`3v? w?B?9&'\@/2s?@?C`?)ϛ&T@@\?=)?Z/{?GL@ ?3d?!k`?; ?W ?) _@XW`?$`?PPO?An?W?DC:`/ 1ɽ )?@?A`?;W &К`2h@⤀?<`?Ef`@jbI7\'?RM?e@?Vz0Q `aGk@^L ?l ?DJ zb?Q`?a$?O{<>hX.܀`?U?bu?T8??u ??S`4,K? .)/JBHM=@-H :; 6?`U``Dl?RU?@[`1?I ?OBk?=@?Sp@?SV ?"?/*?"BP(ē?$[R@BY;!?cˏ?WT9Di@?J`?BY2?TՇ?U#?) l44?@M RY?*ɘ`?_ @?UN@fA??Va`?[K`.J?7 %?Qu?Jl`?lS@+?477+Cx ?DoB?Y?T ?@? /`?5`fB?@?Srn?6g~:z Z1`Q? T˕c?`;e?FP?(+-?B]u@?01_{<b`O@F Y@Y.e /.@?G?`M OuT2\ P``?C ?QU?1 6?4Qn?Q,?:; YUR{?] ?le@?\@9@NM\ؠYiW@?Dlk`?NX 벉?To`?WI?Y%03?D i+?<= ?Y  ?% J>e>?@E?G ?J?*t_`??F^ ?Hp@?@ ?4,WM@N5@NS?D?^?:FM?,$+?>98@?8?Q_5?B ?C@?)L? ?0ۀ?Az2?B?D0`>t <`?S ?U3E?D~?W>%~?(%?<?4?=2 @7{ K}M6< TXE ?. ?(6BB?QV ?Wb7M)|`*.`6Eg?$O?Jހ>[c֠eU\$Y@?QI?AD9 ?8w`?DR?IʗP- ?0j?VXR\ T|`^~hS/Š^o~nM W@?L?1fO?'{?G B@>⤀N^M<F=D7݀B= 6 F@Im ?$& ?:!MSY@IV@5#`HT]PC?5d`?Nj ?;C(?R1m ?fH?[?5q?G?< ? ?SUP?CH5`?3%@ _*M?[djq1r ?N"Jf+ ?#%@?E`?W8J?_: ?Ou?@x?T`X?Xr@?M`: W0zH`?J ?\?XHK -V`Ṅ?B ?IV@D5 ?FP?B?;#? )J@?D^7 ?Uʠ?]GX?`2q?=@E ?(6? ??Xē?V!} !k`?82`??"C PTW 3G-:P@Q}??@k??9!`?1G@?OkF=\=>U`?Ld?U6?0@`mdb @HT OW@?I ?<@ȠUy ? @?W}_xe`PZE9?>Yz6: ]G`G ?FL .\QFL?F@?T}v?8;h7?d?7X?=@5V Cz`@&=N?Be?Y/?>`V^ cedK \)`H& F.B|?L?X?B;?\}?\O}`?FW?V^ ?Y?R&?[?A'V$@B =@X@??47?\U+1,6T@?OH?)1f\QD5`L?R?GH?0`?E?M`?C龀O`eYr ?IF?SR 'YZ?E ? ?G?[?Nm *;`c?; ?DN`?HI?E C!xV|@A@?2" ?HI?LX. `C5[ ?=K`?;N#^`A@ZBZR` y ?;..B?3G?b ?bX@?=s`??H?8`5d`F?v?Z]?[4Հ?I?@`?TE?-?:̀V枀ad@@?J5>*.`@@M_ ?< ?WEQε?1Rm@?3GJ]?9@?Fqp?B+?Y` H@QD6 ?9iW@/@F@D ?@S;@=H ?A h`" 8+`?9a'P[dae~2U0n?F@?G48D ?2n?QV 0C?S`?R7J?&ɠ?I{ ?C7@?W`?Q} F$#N@?G[?(  ?F?FC`??Sf[?050(%A\^^`C PW;2?,?>@?0`?@`+@@`h`Z?A?OqK@:OY*"@Z`J$ `?;-?^6 ?ek?RJ?Bk@ (,A,ORQPOJKT.~h?Gk?62T_R ]?9q??H`2 P]i@^i[A?oߠ? W lNB?J?bt/ ?`% ?=)? /`?I?S{ ?E@Hl`?v?d?`y 4?CD@?YY?/`Ni?: ?Pd`?3{?$,+Z@@?S{@?Gۢ`?(XTK P!?KF?MzzHS)H`I;BG4GklVRBxC4F^ Q 2Mș"e?D,@`?!?TL`?J)?m@[GE;ˀ?E?U@?'+?VN@@Ru\`#W@`?1,?JI?$h?:?Bz =YϠ<@?S?]D?Hu !N@#+5@:A= ?~h?T ?X1@>%~S`J:#=I%)Hy?>?L?BF`V._4:?1HJ?1@?Mh?C{BYs`W`RNڻ;?k?@T?Gq ?#I='–`# ?L^g@?R@Q%@SX'?Wm ?X˭ CBZ@VҠ?O?Q0A] ?`?Rk?Od?D&$Bgf?B?,@`c`CBЂ@?)?U%?:&@[xM@\L@B@382`Ipq`Z@U@BTPc?#Kkb)Q`?0`?!@?4[?Ic?4ܡ i`?K%^ PU`P@G39>?@w ?KoǠ>cD)@, q ?@?$U)T`X``?К`?J?-ఀ?5_M?4#?#?I-`?UG@?:4[?4?>>@(0ۀ?+@5~Q0LJ? Q?@%N`?:&@?IR`?U ʠ?\?b?Ph@a0j@Yx 5#F?9E`?WH?[?. PA@9PC`1??8Y?,@ `?F@?;bQ2?MQILZ?*]?LN?P#-?PN [[[?:w6?AR8 79?Y2?Zp@?Be@ P@7V`?FHXK@8?J?T?:v O @PF N>`P(8a&.gLPĠKz= ?)n ?/.@?*4>P@?T~,?a~u`?38?FV?`hBAZ3@I@&`KIm?J?K`?C-`?<?GM?9BH!@7`ENB4@+,Vr%\=@D[_>NB?)???3ds'\@0?VN?S?U?+>)/?0? %2 =?D?GM8r1O ]Igr?47??6C Fl?D@?^?b ?Yv@?LH@?C8?Lǃ?W?@܉YM^ߴPsm`C?(f?A\^l ?:?Q0V`!A=?F]`?Qڀ?G5s@?0/`0]?B;?B a?M)?^?Y@5V 2<@?JS ?3G?1ݟ?Ng ?F?T*?`O?H\@?*?U5`?Mܠ9(?:F?_y?\w`??X@5@HLrJ?X 6XBЀ?.j`?AӮ`?C?)"?BJFO`#@?1-@?=?8[xGJQɽ .@? >)L4Ơ?P0 ?W<@'`o?- @aau9?*@-`N?. ?J?89a ?B@?S+i?R| V1@WSG BG?4@?3V$@_Sw`P/? L?O?Z4?RkމŠ7?`L?m@?& ?A h`?GZa@?CB#?FW?(=K`' k #< ֝?M@?9fIl.3ABZUՀODC:`QaW@? u?I#DXNu?>dנ?[l:?`qK?P4@CXa&S 65?@ڀ?3_?;C?+@@73?7?H  AI;s?BG?[@?[?V@?B&@J~PF`d?5f`?A?OH?U?I\ ?9-`?1?Dt?]?]H`?>=`?4?@?D,?<@?Rz ?`<?YM?Mt@?Hߐ`?K?L?G?C`?62 ?Q 65Cx ? "w ?; ?:?=m@ J<`M2 @L|'dR> ??T?]UmHj<ߨ?-)?K?AX?JM`?<N@?-)[@ ?b"(@?Pު`*@?Pq`?N$@>߀>?7v?8.?V^ YoP@IaTY@X]`NYz#I=?D`?Sx ?Q/?BJ?;2?Ck`?@<@ZI @@K Ak`?!I?RrÀ?Dh(=y ?!f?Ab ?4-`?Az@?%NB?Ig?HJ@ ?`@C[[# 5b% ?>t U b V~`Bw`e=€V)\ .@Z`Jڣ?Bm ?Pe?8 `@PLe ?H?A%?90?=:?AL?V@?\i`?S?WO@?S ;Zy`@A?D,?0uBF&`?@2?XN 9!`?L@?5#`Cl@:Cس B*S ?C@?L@?@@?AK4`N5@?)J@?U?U?S?MP`KS_@Az2! ?7G@?C?C?$Q£a[\_ @DAIH@?I~`?W)`g4?%@?@Ȧ`?8oZ?: ?5E?OX`?M?8 ? bU@3I=B}`CMv?S?V?5؀?J\9?XHK ?(@C?(X?8A?A?J ?H?BРP7bDM+?>. PT]@TY@KH@E NuLq&^A?N?6r۠?HPGe@W9Kl`%v?F?\b`?` ޠ?J$y ?8 ?<?@E?]?aq?E#?E?^?T9=@NS@AG@L8Tq2&73]# \z293`A(?@I`GnC? 9G`?K ?YH ?F?B` ?QQ`V&$_J:`?90?0z`GV[M()oA@L W *t_`WWC ?L2_ ?H.@?M}R?EgӠO;L<"?HJ`?H? ?Q#Ԡ`??X0@?Ig@93) ?+n\?EZ?]_ ?` ?I~>?^?'u^?<|?>?J @?[T?^?OS`??A?[;9?Ri 2h@=mXK?-가?@\??xe`?U ?_@?C@?%*?U@?K? ?HĠ?>)t@?@?T?@U:_` 6{a`?Oc?5,+?} ?C5?N?F:Z@B?H?CV 8d`?=p?HCs@>=`?I?DӠ?5)T`?P ?I`B7@R KD{?6 @?` ?a.5?O(?T?aD9 ?U`1LP;RU@B?S`?G %ZfU|@?2Q` @`=가?l?T-`?L q ?AQ?V`?K?|IjO'o@2 ?)?X??@Y@TKd ?=E?B5?4@?M@?Z\?T?܀/?<8`F`dSv?D3?`?S1 ?F?4R" Od?8 6~8%~?>MpW 2@?/c7`DEu?BЂ@?U?\jz?fP ?` 32B ?IQ1?VE?PI`?@?PgZ?` ?`Q`?Q:??(?Tܡ ?c?TDA1q?0j?9g?P?N,?P@?W3T\`1 ?M@?R< ?\Š`?KV67G@?FI?X(?@c̀F R AY?9-`?DY@?@"w ?C`?Rm?U?1Rm@ h`??6 ?$?.?<CYX\@Rs@?D? ީ?R`?XЦ`?W|?bQ?UiJD?M)?UE?JM`?D ?TV?Y!?L,?<|;@?3?JHW@?[ic`?Ch H:?&B?7ۢ`9@?;C?Cl@& >K`O c8 S ?-@?JU?XJ`?E 5\v?F.?QRm@?04@?'965WNz%? @>ㇼ9~`?@?LG`?R)@?G`? @A E@AXU$[X@?!w[@?TP?E?5 h`NHo@64\?UAy?P@()`)QHq?/)yVWi`6?O@?16?KBS?T@?7X?P?`{ ?W+?Q ?S+i?O`?V^C ?NU(b@Q` ?5IvL?@Xp?B-?HK@?G?2-1`AQKT9E`?Aڀ>mP;R&n`?K 00@S7|?2?Tv\BaO ?>&X?G?< ?0ۀ?4v\?F?`?B5I?2Ѐ?Ul@?Lu ?$=?&?*l`?U&} ?R@W 65?/.@?Pၠ?PL?M?Vr%?]€?M`.܀?"?)()J@?6x tJ`??u?CI %{Z+9SO3Cv3%@ '?GP?Cq?3/?R%Z`?KԠ>c?Aڀ?@VF_?Cs?@?7?=?B?Y ?`beZw28@J4tHB ?Ql ?]V ?S?WO@?Y`?E@@?G4?S(>⤀O5֝9>V@SK_@3ZI 0z`C DJT?0o*?W?K)` Dy35:_?L?TLu?^̇?`yѠ?Q_?T?SyN~h`] C?Iȁ?Qs@?7 6p`?0"w 6}?⤀d&Sx?Ntw`?*;5~?V[?c'?\5@?T?OM?8Uɀ?%p *@S]@OI?D@?MV`@ZeC< ?9%)?(G`?VS?d?\,?Pu?D? ? k B?Ye`@[G?IDi@?4@+8 ?!r ?Nk?UΠ?F +?E`?^?X w6?:M`?Q?[B?Xd`?T,?`Ge ?^>R@5_M?P@?=mPz`?!̔`?RV@IiW@cs@QWe?M ?T`?7E>D?`2Q`AF G\`?!ڀ?X%~?Wf  k L 79I@WP ޠ?`6RP?Ƞ?Pg?F?Vp@?UA8檀?Pd@?D@?I ?Swg`B E0n?_y?aԿ ?)@Mv7LCj?#1} 4h?5 @?7dR?!?S ?`3?SX݀?QI?[uv ?U$[?D?Bs?:;#''NB?P?Y@?C|`?&`?Ba ?2 ?3@?%BAN@LBz <8`K.q@:B?Y ?ccߠ?P#2?(MC?Dr?`NYzP/`3Ba?3Ff?7 G993]?+@@-가?I~?f̲`?g& ?VYJ?)@ MBnO U 1cQXYBG@<@?N6 ?K4?8?P!?QQ` 가5B;)3`J<`?CI=?N ?J?Aj?ր?:?Hei@?KxM@?;b?H_?;n\\ؠm/3h K`?I9 @?;1G@?+~@?7g)$??H?QaW@?I6 Kd ?2?J C7ʗR:U?@}?, q 3@?4 ?C1@?Dy3?b>@?e>`G`?M ?M`?3* C(d`@Y?YT ?RF6A 8G`G@p N*@H!?2n?B`?E#?Q `?Mq?I\?B 4Ec?`?E?>Š?8`?P9?M~7?d:?N`?TF?H`?MV`?Rt?B OcEU`6PNm]`(A?``?im ?Z(1i' ?R?\~\?5s0M.\Q?1'*.`?7?F7? ?,$+?9oE@B??X'@?e?[t?2h@1`Bc`PBRMՀE 7+GU#C?`?G]8?2h@J %~?L.`?45@,`T@30UXJ@k?Fx >yH:?C5?Qe ?Bu?-`? ?*W?/0`S`G`VՓ?&x ?(R@,$+?G ֠?E:Ǡ>@?DP?=H ?Kr?H2G ??M?ZD ?@<@>?E?D?@?,\?ZI 7.Y E8?J?]݀>IEI?L|?Q ?&+Ss@ftG@V2?K@@L@`܉?>=`UOE`FFO`?D ?Qcx?B~ ?A ?5:01WX@b`[35'AEc"n"8@K@?EW?EO?-s`?I?W %?Se?$[R@S1@+5@ّ?!?T]`?_`?QI19-`Lw`?;v?XN`?US; #?S龀?M@?4`*&@CŠ?:;`@ O?.P@?W"F`?Vp?M6`?-hLbZyXZFS[Y`?D9I "ל`0:?C`D?G&?K`Fr۠L 3`?u 5s0@`?3; ?C=D>)/?T<?T$u HF5?C?]f ?]oӠ!fUP@FBP[`Z@6@?MH?xe`?K?7ʗ?V?c5@?U/?M`?Ti?1-@I{ ;Z@?@``?G >o=:8HրB5?–`AM&=K`SqY)l ?S8P`xf??^?R`]Q 350@?@C"`?HCR?>K`?<)ـΝ Qa`eqU3?=*?7ǿE":`T& S" B0f?#G?)0.m]`*W?H|# ?T$?R6e?Tc/?Us0?S?O~?*;6O`? ?B7@?@ .$@QSF;v?9`F(S?;2?`d?^[?K$<ߨQB8X?(s 3Bw`?9?JcS?W@?R@@([6A ]`ZCn+?8Y3 :?@(oZ?J?P#-?HdH^O@B(?RH?C?U.?R?Hb?@#v?=q?X<@?@܉N H? `?7P?Z?G ?F?2('i`?4p ?V`?]V?S?E1̔`?! ?3!x?"==g@<!I@@B?FC@?Z?X?Ng?*z &?3Y?9l.,"?@`?Aݟ?@QV?S{ ?S)H`7@VT`WyV`P:VL?>y?5s0?#!x?PvD?J+?;Zy`?N5@?F(?B@?T?N:; ?0L?C@<ߨ$ `?BV[@:8`Tܠ C?T?Hܹ AӮ`*i`?U?JPIoڣ?KZ@?3?>o>⤀?\!S?c֠??H8Uɀ?C`?P?U?V9U ?ƑJ`: C?/|@?Di ?EDQ ?H?QM`?G|?fO?B?"`L?&`?EV?KQ?PR `?L?-:?% ?Lor?Lw`?&d?=M`O2#@ KPTSJ8 ?9?K ?D@??{<?:j?O ?SW?"a>?@@t_`> h`?;E`Qc<"P~?<`?^@?R-*@J+P;?:M`?#R[l`U ?I`?Z6?OX@%~-# ?N\Q?W?7#@(|?AJ?Z`?dH?_w?2'{?:?D?"`⤀?L ?T`?G(?Aݟ?Z<@?arb?(0ۀW Io?)iW@?S''?Z$:>eZk?;@?PF`Q%@Q.5?ND?Su?`"?Yw>C?S?Gq>@K6?0(?WdR?Nm?Kq3@?I K`Z~PF0C@lS@O-b_PL?Tt@?O 3d{@?2'{?r?"|*WDf?,K@?`d@?e`?NRGRң-@?3Wr?@&2>5SR 24?IM?(`?& ?T1`?T/W?Dr?L"?Lp`?,)ـ??0D%L@=NrN2,K?R?Ln u?^`z 8oZ?"'{?G?1`:R@?o?PQV?&=P4@֝?OL?6 ?N_) ?`T?O;>^?7( )AI8`?5?W?S?93]?%@?@ڀ? Xߐ`_~ɠ ?Z ?Xr1?@QV?n\<BEO?<??B ?Y`?d9I ?R @G?# ?^n?U@?@'@?O5`?MS?P???`d`?aY,`?@?P?Z ?\v?T K̀YMkWLu! ?OC׀.?Iϛ?EOEb% U>S@O!F|7?A ?P@K ?>`?E`?DAQwY(?$& ?F @?}U|lR ? O?P?% @H?&B?P?^3?[l:G\@f ^q ?=?Z*@?F5@Mt@TfP_Kg`?@?@sm`4C:`?5`?[?SW?OH?_ (@?S',?6?Lo%pY@I"R`Ν ?M @?WW?KX?lS@?J?[`?E8^O@? `? C>`?#v?Lk/?s >2?JYb?\&L`?(%~K?H?\-f?J;?Pc?a`?a%T`?T?(V Y0 : ?8ޠ?I ?V ?V?GO@?E":`?CљV`?*&@?Y?\`?S?Q?* R@C5 uGQۀw`?V΀?6 Xei@>KF?\2`?_ ?Tw?OA?8!,?7^ ?A̔`4ܡ Bj=?Gy?Y1<`?PT-?B}`?& F+/6 ?$!#Q@YF`oXD@#C@?4@>>@Qu[[ 3?E?2F66!s?W`?bG`?:ɘ`IV@?5:_?)>UM"j?ReE@?`@?VYJ?3!x25BR``?[`?\=@Regw$[H 64\?. ?2?P.U@ [v5/?XK@?Q?B ?W=?V} ?Pr@?V^ ?AݟA ?v\A)<`+g`?Ipq`?^q?e?]'?As?T2/?_j@?I.@?SS?@4 ?X?@sm`"?L1?W#@???Ƞ?J?M}R?1` ? ?3?Il.?D~`Ml b}j^@K)`@"w %5`?C$O?Bp`0*?2 ?Y ?Tqd?HoZ?UZ?Rˉ?E?Q)<`?Cac@à?Gb?5p XXN ?S ?M٥ Hܹ MbU@#@? ?@:?Me,?@(?+]P?0E{^B P ?H<8`?E@6m- 68+-2G?D ,)``J@TE[wBe9?FR?JB?%1 0/`Si3 W?/m?Pא`4V@p ?_?iE?PQQd.K O*F`\R7`?_8z?`?P?G⼀?@ 77%`?I ?; Q&e 8$?P>?1Y;& 0<$+J,J`YMm@?U~?VŠ?&?An?R:?J?4'%`*?-@77?R.?U2?L@`?W/?R?#?B`?V)`?U3?Qmj\Q_tYNZ?Gl@?Xo?@0Ge 8z:?EJ?8?D@= :?+'?#=?Z#C@>uKP4@S"L[ ?!?Bt/ ?Op?W.?CЀ3T?H? *??W*@?S<= ?e?[?X2?3N@:]T@[@>KF?Qw?QMt?:01?/470җK;`2T?/(FR:D`5gӠ*@?Gk4O]?j?X=@?I4`?TO?Z7`?MYϠ? *NAU@T- ??M)@?aL@@U`?S ?az`?AXYF[U4`Or?? @?W`ŀ?AjhX?KS_@?U{?O?FL?/~GvAQ?S ?UN@D(=L ?*Ǡ&H? 7dR?39G`?J @?R?$ܡ ?=QI?TJ?O @? hX$v\?J>?Oc :`,@`?S@?6.S">7c?:@?RH7Ev>ㇼ?U}נ?E:_RKX?B7?Dlk`?+t ?} @ Ha&?֝1r a*\M[?R-?^@?-QI?à?P?Zs?a?]{`?IB?Bv>@S⤀RvP@ MSk`5L@?U+u?a ?M|`&К`:P 6?U:_?Pz`?n\?!q?$v\,o0:OPC"`H+`?y$s4`?D+? 01Q6?0i|?Vy?U@?R?VX?I`?,hX?8u K 0f?P]i@?U ?5m7j?9 ?V,?H?GTG}@H0@?2p`?V枀?S4;2 ?I@?Xd`?Y1@?G#@FƩNV?@ ?N*O/aOB?P?Bp`?@C"`?T?M[; ?;U`?LTv?J>e?? @?K?PvD?H0ۀ?A?D?T?R`:Oq@M% ? @S)H`Gk%~?4@A}c`a?5#?S?"I,-ș@7?C"?=@?B@?Q# aU6 ?MS?E E ?*ހ?W ?X?Ua`?CQ@(`?a ]M@<?? P5M@>?<?U?C?*.`?M@?O@?!UD?1'?O`?Q?KX?<56`(`"OA ?E؀?J?6`?Gb?P?1? 01??M)RùG,?(G`?5L@?8P?BOA >ʗCX݀2Ѐ@r@WUl`Ioa?* ?B?Q{ ?UI?Tz?L0G ?<]?S?*Ǡ<`?9a?W ?VX?1 G9[# ?HMC?US; ?M*@?"n3`?7M?QӮ`?UgӠ?j`SS/ ?!q?dR@?[!@PS?AJ?Qy|?Gr?OA@?Q'?L ?Rgf?H6!8 ??@?W| ?F y?#⤀?Q `?Yv@?T\?G@6YY3]S+i?l?Gh`. S 5p >s_j@d_G J@?Xg?AZG|Uۖ`TC:`>?{ ?.$@?E?J+g`M^`? t?:`|WAbP 8?TK @?K}?!7`.–`DJv GT <)`> ?9;?A`UNBU5=711} ?Sz>?c @?[(?2n! `? 65?(i ?3 !@POԸ3?:`?SӺ?O ?>?U#.gVg?"?\?U?2C [-:RMZU S@VTG$g?%c>`?M1`?X?XN`?OD`\2_ J0K =: ?E?Q"?P?⤀ROA A`?=)?#82`?k?9-SF?0lS@?Q@?0R @?Ub?m?g`?J?Be?E=<8`?)U?L@?" `?R6e?DsJ`?<56`?a?Lz4 `?N<?[ic`?N0I?CPW?:̀<8 C4?H?X2az@P:?C >7cY3`8 `?I@?O@STP>߀N"Hb 2? L6T@?4?R`?Lk/Qa.NI??xe`?K?SFf?\Q?Pa IQ?*@?,45@?C,`?Jx H|Ta`+$?s&`?C?\ ?V]`@R ZPg?P@?J5 ]a`/`Mq?3?Y@?W? ?C?X@?! V?I{ ?bX׀?^`?B>#@4?@@#?5/?I5B @?P܉?Tx~ [?Dx`?a ?IM,[@>?GB;?4?F @?Y?R?m@>%~?16<S@?(?ENB?W %ZA`?-@?B ?G?d#`VR>M?5&} à'+?}?G|x ?Q'?4~`J3@TV M>`?Zw`?jz ?d@%H2G ?D%f?@K(?*?G2? ?5d?Gǿ?A}?A&e ?6?`?"Ƒ?Jg^'@SЀ?5@?G!K+`ίGv`?Jk٠?F-B`?M|`?Sgǀ?7 ?A=?R>?382`?-?VU?P>.QnJD`9@Ln X`C|`?J ?Vʀ?\K?W ?EΠ,`+ ; Kq3@R`SN6``?Ra`?$HP 7@(X?#љ?ZR`??H``0P`S Ng?5?cS?P B?#G?,Q`Ui3h}`?4K -șSN@T@%@?OI?RԠ?F0i|Mt@?S?I;?3$O?OS`?@`H@>? i`?7?Rz??X@KVH? PF`(?4bz?&c76X:bpG@QoDL@? ր"T@?J CLE Dp ?K?HF~8+@@?5 @C@D~`?@X ?6EV@Xb?T@?d.G?5d`PW'SG ??a?LD@?J@w`p ?0,K30?) ?1`?(+`8<8`TR,@E? ?X?b0ڣ'?$D ?6 )U?e ?VI?_j>\W`OEC ?1`?b ?Qx T76?Gb?Q ?cW`?Ld0?G ?;`RԠRi ?H?N3!ZǠRǠ?HW`?a?Z+?J ?@ Q̔`]cʗ?=m@I, ?L56`?@]?7: ?<@?+Ԡ`?)t@TzaFZWEEZI ?:RH5UUao@UYF@?FS?T@?TM?A~u`MZyXWjPI`@m, q ?&@?PJ@?PlS@? O?<@?X^O@?Q>`L.`?B$?Ws<?R?Zr ?[0?/? ?DY`3;!@>y [V@^+Q ?K`?N`P& #?R?2 82`?O?O47:f+ <:?W,@?[C\_N>~?@W?Oxe`?@LF B1m NA8?;q3@?=가?Cz ?;@ P`P- G=?QXр?g'u^ 1t?3^`?I?H+`?I/?R#9?J,My a`\+E R`5?O?H[x>?M3u?T?=@>?LX?S(XOD&u?ީBBx%?I ?5mHjL>4?A?]F?\ǃ?[Nf?]㖀#_ZX?"n?B|Un7E>?Tu ?N?'6% .g?M ?T?`C SU2  `?5#`!8 T@E":`a@b6P9L+4x`L8 BW?DȾ?H 7g)L,1;`?'+>ɑ?Gy?aȀ?_}^?A?FK`?Y?Qi' 7bL&d?$!?# ?S ?YU?+ ?0?Le?1@;i L@`ao@X?K"?@`PD>[?R-??<?3?V?] ?Re?C ?= ,`B-HBW?$v\?BBqWVoN='> C@@:Š?q?DD?Q@?@X -GoQ1@?Wf?H?0(%FM7 B@?-?A4@?B?@B5RQ0V`1ݟ4@R>5M?,s?Pj1?K#@^:o?\QD&R J?р2$?7`?. 8[xIg>F&p`?RT?`91?`@?a< ?Q ?3@?]?[ D8}?O*?ƑU;ˀ]s`PԹ ?YT?h?\о?Hw`?P91?9(1D9 ?=2 @?4Xf^3NB?O+?6΀AӮ`Y[[/ @?J 65/X@?G`?IG?j?C\?Z?Y?R?K` hXKdjFt0w |@D& TH@4m?O?<4"?C9?O]h?&&R aY1O?Kdj?}1 ?L. ?Z@?Qo??~?D?O;Q?PO?N$@?6ɠ/`?3`?;FL J7K?@,h?a@ ?Hei@?X?F@?>?E `?(R@?A,?9A0QT TR$`DeQ@?IF?:LA)<`A=l /*? 8_Q/OƄ`?v?S?F: SIZ ?&?P&B@ZOG AN@?O`?S*9L>2?:ɘ`?$AsRc٠KÕ?? ?@P ?Qz@?ZcS?G?Mh?RU?MA ?Z&@?Wѱ "|(g?@ (4)@[BcUKk@?V73?f<@?a#`?Z?Nn0A@0i|?NYz?NH  *@?8?0R@?M;?M}RHF)L?G<@?TVg@?JC?61@>M5Y`?R@?[?M@?M/3?]?WS`*ɘ`8f?Lk/?K"?2?2e?RF?\>q?Ti %F.=N4L`?=€?QJ`?CG?A4@u ` ]@?IT ?V7?D?@?S@?Y!?P]i@?RGq@?W,@?<B #< QR@W ??=? w??(%~;b=@BA3-?{ ?%@EWQ3- - ?S?KJـN `S`?@c?DcU~Vy?1`*&@TJ?6S?X`??`?@ՠ?V `?GjA `W'?SZ?+Z@?F y?@@?T?Ng + ?D2/?VE?:)?&К`9JEc #?jN0I`IP`?IB?I ,?D3?SX݀?>P@C,)`?1 L1?382`?I\ fOH?5?Ll?1 h`?B ?=P RV[@ `53?6: AmjU檀?5 F ?,`?b?a6?U?[-?Y`?F?`?N@?_`?Z?P?] ?`VO ?F?=m@?P ?1=(  ? C?7@OUK@@? >`?T0?B@ h`?L?Th?Zeu`?L`?4| ?Z?a ?Lv?% ?6}#kTL~ @o*?6 9 [Fڋ?DHF#@?I8@?MBc#,b K0VOY@:8`?7: )UVx T`?M>?c?bV`?bQ?Y#/|@01?Ut ?M^`?1@?&@@ Q?@`?6.Dl0?R@@?SQ@?ER?U]@?]_ ?BxrD"!`?: C?%{?D~?RGq@???XK(`S/Q@+#D:Vu_Y۠?`?Z@?1*?Oc .TD 7P>P@?;;9?OA@?O>7`S^P@4+]P ?G ?YF?U@?6< ??ީ?Ra?H+`?F?Mm@?JWV#Q _Crn?OJ?ap ?_lRSW*@- @?WnC?KGL/*?\or?a?M?+`?CPW??rA_5SMH>?2@?`֝-@><]?K`?R?[* ?^b`?\!S?Le`?G(@?Y@ ?Xg?MJ/?PA?Qnՠ?@)@ J<`?<?gFR?#kT?Q1 @?@?D?K@.g3QÀ?"-*@S]U0`@?D@?(՟ BD,?O?d4P`?b@?^,?RF`4/W? n\?^ ?`9?Mp?>M?w`?/ ?\" ?bl?BM;`?3i -@?8 ?̔`TuV C 2n?&?K?F}?PQ `2Gj?Q@?G}=v7SZ@S?6D?Pc̀#?13-?To`?;5@?L?Vs?Mm?<`?BR`?N.>,`Qs4O?8X-bU@(|?A`?H?:?Z@?=e,?7 k OkT^?GL- ?V!G`?5 ?X?_.?NN`Xx7`?Zހ?WO`?$`?3⤀?_t"?f?`D3?>>@9q?.܀?I@VN6?C`?@Ƞ?Y%>V?"qW?I{@?\?ak?[E?Uۖ`?J&@?}?B?Q`?)3`;?@?4[?A` ?EAyG`B >B;?K@?V?S?J*@?R ?K1I`?3 ?Jx O#,`]W??>,?Lb ?D6q@7`5{@?HI?AV ?2`L?Cb> ?E?[gA?\ ?S@@?/X@?;`?di?mv?\X:X0Ge ?>3{R` <@?4C:`j`@m<`;@?,?V?\U`?Lw`IO Z@'^ ?S7@? Ne+`?@J<`?zbQ4 U~?A?]^`?W/?XX?Y w ?H?F@?HUɀ?4˕?(d`4h(Hz??B?)c?9`?6Eg7G@C[;`?$+?D.4T G@?J?OZ`?H`?N`?O@?;@@CM(=`?k?E_M?T!`?QN*`?K>?TՇ?[+?[ ?Q`?'P?B?UFr?,/B}`?0Ƞ>މŠQH}?"a?GH?S@?O ?;l@?==g@> h`3* ?P?`./?G\`EE;ˀ(R@?B?F5 R<@dTN?M@>?Ui?5#`Š?HT]?H ?Š?B?G|x N \@J)?C?7ESX+Ex@I 3`?Udz?U=Š,`?Pn ?Yg?K1IUtJ?Uc?aR@?AX5@?G(@?K@:f+ JR@*A= ?1}?? r?9t@@>W@M%A?B?S?AqL.`W 7o?XKWB@[Q?J~P?a`?9@ZR ?CR?Q}?T m?_f ?P BP?#?P?#@@n>o?5&} ?(c?AG@?Xs ?BKÕLZ$GB a?C?I)lCZ:3?%W?.–`?=?1A@L?1T?Vr۠?C @/#,`?: ?K8b?>$@>As.b`?HA?J&@?I`?Qg?`H@{@A.Q0\ЀKuv ?=!""@?͞`@ ?3 ?TE[?I3]?]?P`?`^ ?W`?C$O?6 @?4?9@i`Y{ eU\Xei@?#@?-\ABBx??+?R޶?F< ?r:]TOU2k?@ ?A2t/ Sس K6@I 01?[ ?\g?H ?E» ?H%~?5RA:GZ\9S?B ?:f+ VnH=@?U ?R8@H? ?07?6n`2h@?*RH?M'D9 V>`ULIYH?PX `W[ %v?>\QI#L0?X ?dR@?Hd> ?,z?9wDjAZ??S`PQg!8 ?Ca6К`< ?RV@?\w?6=C?E ?[b?0 @T@Q9I D`?5?CsC@Qu9EݷP`F?AB?P`?37@%B?Lq?`@?S?%~=BWP~@P5[a[ 5?8M?=`?P?R ?F>M?&PĀU r?@O1@L@>(%?`@?e`?V"@? 6 @@> ?I~?BV[@:>eR`VmS@"w ?9?=bU@?O? >߀?< ?Qi?` ?X@/gZRRJHH?:`?Y@?PBL ?+`?5R:]?V`?KC?9?B?T2@?6g~L)ـO>) L1f?HѠ,`ZR`F;v?TG}@?M >?<_?16+?D i?]v?VT`?CQÀ?5@B< [F[`TC:`H՟ ?E`?]%?J@ ?Q`?Y?A`?=&`?PR q XV'`C%@?X@@/@5,+D[_?@?Vb ?X?(AH{?9f?G`CIK`Ec ?.?P @?AV 6: > 6PEb% ?-# ?[gA?`C"`?U@?BH'?@`@?NwN?Nu?I~?*V@`[GOEc L5@@?&?Ui?b?aᇠ?S? @ ?r?M`?J!` @ 4?RU?gD ?_+i`=wR_d@_e`35[ =W{ ]^@[QK?99 @?W@?L?4u ?Sk`?[1@?V_?_`?\yd+@@P<8 8z? ?UDQ ?KkJ;`K4?5 @?4H!B?0`'R`J<`?PT3h}`Ti6< ?2?(՟ ?.$@,$+H"J?As)Rv PnBu?i ?TW?_?V״?P)@?Q  ?hXV*k W*ENB1?@Ƞ?T)@?!sQ`??Q{ ?=\?C ?P& .T*N' @! ?B.?)(Bל`7j?;Zy`?@8<8`PrB-h4?E":`?X0@?uN ?@m?W%?B8@?! G<56`?-y ?V\נ?XP?F`d?= ?@! ?4?2Ѐ?6jU?J'?Q̠ S14?E `?IQ1?8R@=:w6?MP`?[( ?U|l?F ?DN?S ?R ?5@?RD?`1a ? [8j`, b1P H(2W?@ ?`H|16?I65?0=C`?G?VU?5d`?7?Ha&;O`M7s 'ۢ`:`?$N`?fBu/P ?;l@?5`?; ?D:C''Wr`?I?P @ @Uws`9?.?" !2A ?1>?O-?F C$O`z`a`MD@?;C?Q?Q6?$TEF:@# ?64\>M@5s0)(0z`fP~`\8TE?U@?;Z@?1$?Q ?7H\@I̠CWr?)o?W~?Tf8q?I6Xi ZF5F`GOb ?L9y@?a@?/VNU I?M@?'#@? ȠC B@?4?M{`2ל`TC8>*.`?7y?JK.`?9a?@&?_7?_?7)@?>?P`?=șNgQ} $@2JPrF~8?F@?Y@?F @0?'t?9 ?C?P78ĠW3?7g)?PN@H?V2Q^Cљ?M`?_W`?P# ?5@?F y2h@V"-@?EIK1YDtBL93kT?@*WCJ`B< ?4`?T&?SY`?Hw`?QG ?P]i@8l`I ?HyL?Rm 8`SO5Q?Cl@?Ar >⤀?KN?`?\?.P@Xo[N (X?>Yz?%_M?;TGn@?I8@?E?80ۀ?7 ? <#FI?+Q?K`:-ZC1@?Qw[@?U3E!} QYQ@%?W?\&? hXUb@Q,`G`U V{`C EnOI ?@]1`C1@?"e?Aà?(X?@?B`?!O?8.@? (%QEj?D@>w`.–`?P?J?р?17`?[y ?a?C%`C S4\ˀ?E,+?EŒ`Aɽ H$ lS@JYCk`?Pw ?SY0fIv?9ր?C{?#|`?: %WE":`?A-@?Hs+r4@c A=FM?*5 ?*cSCrn@?Q ?L@CUH?.t ?TԀDw@bѓW9oJ`@[G.[?%@?PF`??=?=Nr?[ ?VX`?1?L`D??L"I?:R@AB̀:$??J?8f?4?ME?D ?=v7?PR `?7` O1*R\UV`?4?T?7l@EuM2 @A@?=E?O׏0]Y`P5@@M`Qk`<. 0.9`>NO+8 ?MS?C(?:W?Fw?7?F?8f?@c̀\QOM?EU\?by'?4 Pc?AX?M?,?A?5)T`A:GFD2>5?M ?Z5 ?B?? ?I}9?;1?-`?I?R&?eU.M T{!>z 4V $TECFfDu ?7E h`Ha?2qW?%=7.4J01?5 ?Q,TfF: ?U"?a>8 `K\H`@3 E9G@>,`LX/o?=?fC@?c?IT ? n\?@?6Z?AZ:;].S̠`?Lu! ?[E?WŞ`?LBРN$?;Ԡ`?H~`Š8d`(  ?<2_ ?L_$M@?U`?El?54` QI>Qszb?C!BJU2?C?C? (  >I`<)ـ?K` q &n`#!xD`N?^6 (R@?L3?N?L?'6'X?0R Qs@?S`?$@y ?QpA@?:@K Z`Pz`-_5RZD`?T]`?7bAh@?A?P=s?C :TܠVbA ?SW?b ?K.?= E?H>?N?U[?9Di@PȦ`S?`7`?* ] ?$s2?y?Q0V`4H`S"p`?(%?OP ?YT?U?V ?M :`Kw?:*@?^n ?XP6@TO G@ K2Rh`O #@*FR=U`?c ?cP?A;g`+~@?6?`?!@Ydm|@0@?\@?`s@?\$?Li@@}?-'?^̇?O.@BO?N[?V^ ?V?F'?E@?Wo ?X7??U`?FMNrR?8`?Cp@=s`HGr;b?EKk@?RȲ`?C?7+?7@#J$MH 2?,@@K XK"`R#v?LI?`#?^n?$v\710`? ]?w`?@?9oJڣ>~h? rMm/`?T?0SX݀`B Q4 ;Zy`_ dICL|?;8 ?Ne?R}j?NN?Pj1?AuKE+ N܀.@o?St`?a"?C!xG B@4TE'u^?7`?<;hPr?* ?\Nǀ?_?Q ?A4 ?GF~?I`Ѡ?WM?] <\dV?$51cx?P?[ ?X@?S!x?L?R?bD? ?d?>XXCac@?B8s U,R@@F@?>Yz?OX`%*?%1 ?ax?_]h?hX)R`?7E?8Ajb\a]`?;`?Q̠"?:R@?S.?F@?\~\?g?QPK;?-~?E@?L:?W#?X?^%?a܏?We@?Ko?C@6q(+`?Sn+?P?5u?FT`& Si? [G?W`?:{1??oߠ?+O]hQ66?>PP`@9?@Q?J C?Vz?]6M ?N_) ?1Aa?A?Nn?YȠ?V:EƀK Xl`B~ ?Kt{ ?ATLuM?4mBY` @R,?Nb@?_\?Q'?)`?B{I@?O@?HUɀ9t@P@BBx?UQπ?[zn?Q?Ed`BuViNI@@?C?J ?H>?X ?D6qW4`I3`?KsOD>IUd`6@?5G`3љLCjEi?@?;2?V`?N0I?9@?Rl_@?SC`?*?)`?Qy?_í ?_`?P, ?jFtW&P, ??, ?P[`? 3L?L@?CWrB;^.g?T?[!?<`A0(6?Bp`?I`?C,`?(?7g)?N$@?H?Gj?`#?b,?AjJ-ZNZ(z?Q_?Q1#C@%?9><T`X0c?Lu! ? X)`R?F.?V1@?93`4TE2?<'@?K;`?T ?S&q ?Mh?]͒`?b6ugTR?H.AXVTQ@?=@?>=`?>u7o?@?c?P/T0`@#? ; ⤀:)Ld?&T@DY@e3`Y ?A%?P(?V?HJA??Me,:*@?[+?X\|`HXQ]`OGB@O|@?r?Lb ?@?L ?M|`DM?4?0@A%R a9[?B?P@CV S K@ D?R&@?Q >⤀?35[ ?I_f1?JVN?4?@?L?L/?<@>`" ?0?NGKH@Q8 ?PA@?G^`?>`?Ah@?;`?3? ?D ?);Pp 6~8?s A>+Z@?QPK?MK`4bzQ) S`?c?aw`?[`Q^0Iڀ?B=|`$C:`?S ?FPN0ISQ8@Ux) ?X?X?FL ?LCj?S?B4v\?-@>?0 @T#ao4N`?R%Z`[A ?C??^)U5 Q] I ?FqphXN?3T?2yݠ@u?I{ ?V6}?9J?89a 5=^ `W>"OA ?4TE?F?K?2V@?[@?R?GT ?S ?BH'7`/Au ?,?Nt ?;@$h?U_?`|`?7@%؀?J ?1 FT`7dR(R@:IwYĀP5?I1@?@[`Pj1M`E\vR 48X?@ ? ?!""@?Dlk` D>:8`HJW?7[?Rn?Tk?Y3]?T[_?FA%?P-@\@Yh`?A?W?SN?3@`S/K ?K2?[?GPoI! h`QL ]s`M@>2JC ?/aG$QCvB(?.?_O4?_ Q8_# >_) ?V'`?F@>?PƄ?S`A$S7@bP ?P`@?;2EB?2W?Pv@?=|`?/ ?0o*Di VyG,?M ?XJ`??9@?4 ?U`?Mcz ?BZu T%@E?1 ?\X?QD9 :ހ?A?W4`?C?`?$j% C|`>W ?>? ?9`ē8=@?B?^K`?[?7u^H2G LTv"Z?8@?83?L?T| ?$~m?a?e̬`?0Df?8 ?#m F`O TN`LrJ?1}?F?@A?&n`Gn@S27֠j`M2 @OM?1@?K ?Sv?Q?/ r,`?E?DV ??H?Sh ?S@@?;;9?B`?@]4#–`D^@SF7`?V-@?V>`??*J`7jT0 ?R`?^E?;5@%@?;' O6 ? >NB?K?MT! 0n/ r?C S?@ L9@)a9 ]\ ?D<?MEE6\!?+.4?>'?Oí J<` ?;@EQV ?A£?QB? lS@?2$?Cv5=Fk?֝?=Nr? <>?Q?J-<?1*?8`TƠ[#?X8`?_?D_A`?-'?O`?/9@;;90J<`?G?_k ?Y>hX32?A ?Kr?D3?F`?AuJ`xS?*F!k`N0@>ŠUi?@Q\^?V[?[_rNB6n`?$,(Ġ+i 2!`Me,5b% ?W ?b?T7%`Iw0LW >NB$`?4?Y,C?]K?EEF: ?D?YF?[Q=?]W?Nj`LAT{JހQWeK?22C@ ? 4673DfKE+ hX?Uؿ ?Qk(  ?!Y?V^?P91?@?:F?A3-?&1@?B??G4?&?4&?I?DF@җba:93`Q@`r?1??W֩/.@J~Pm]`?\?[ ?X?U?7?L. ?R?1@7֠9ĀFlXK?=@>A.VHR}j@@?$[>4]wJ>?LG`%{@RH?Dp ?_?E O-C ?P?Zw?E*<>m]`?Gvɠ?\?JPȠMR?Q?_`?PY&`?7+?!M;YujDD mRwZ`1""@?%HRJ?P]?G_9o?""@?5m?!>?@@?8_? ?K]P?Z@?X ?B0@7`?"|?R@?$+D?"c`?0k?7?R?> R7`[kTܠ2ל`?9@?-?6 ?7>@?3?5@ h`?AAa?6 @\Gq N`HĠ?8 ?Hl`?Q2w?LK?/xe`n`?GM?[@?R- >?0c?Jn?6p`5RG`D`?q?D#?F? UW~K=?Qօ??^@L`?K;`?` ?A£.u :=@3?9U?M}R?[ ?^V?9 L'@@?Sr?P2>)/]F[*.`?&d?R`#IĀ?-?Ec?(zPMcPI`?\yd?Rg`F?@@?Z8` CJ`?Y?` ?Q?!w[@@[G5i?+W >\Q_ U W?Hr1?Z ?Q_`?Q`?L6YJM. E» Sx _T ?3 ?HUɀ?(?M?^|G@?ElENB# ?=y ?E=7?> @[`3kT?K]P?3,`@r8ēD`7?Qb??&3`': 4& ?4h?FT`TdV8`=*+W 6VqpW'?T@?O+?T ?Xz`?W ?GE?Ls?LC`???8J`?3@ ?'?6H? ?62?c`? (%?;!?Acx?HZ `?B@8B1m ?4l?Bo`,ydQFZO U ?5ƀ?X\@?YY?M?= E?U0n?a?J:#C< ?<`?QB?$7݀!)M(Q J4t;T?B ?T?7ǿJ@&?[E?] `#''^j X?@ba?[*@?E?0L?Vʀ?Z]?Mq?;`.t ?A=?dF?[AG&)* ?Q@@_ (@C(?L .@?JO?F6?Iֵ?""@B-*@?#v?7K#@N?=l ?It@?C@ ?V@?T52JpNO`YV(@z`.g(@?=2 @?\@?aJB?A,K4@O?3 ?L@?; KÕ=H ?2@Q)<`W4Qb (%~?O/?VE?9@A?J ?O] cAOM>??+bP U ?: C?U&} ?D>%~?-y ?@ ?I3`?U?>_) ?D@?]?T|`H W =Nr?DW?U'?R4D`8YN`?Z@?(KeJ>?@?@``@Ic `?Wy?W%`?6{@?Y  ?_: >ITCs'%`$& ?27EZ)WEH_L~ E`?A `?Vx ?X!?[͆`?_5`?Pҗē2<@4?=Nr?Qs@?EpY@?+~@?D??#,`?AH{?]?aU@?S?Kl@? lS@Qnՠ93`?JcS?oE~?/%1 ?8j?Q?9`?V?g@?\E?*.`?Pn ?Fa@]4V?+;#6?B&73:0?G'??=hQG@ZCm ?B`?C; ?`@?@``:Z@?TƝ?T(V`4?! ?_t?c?ZR@I`Q"?Xei@?4 NS*5 ?Pu?G10`MW '?"SԀS|`?P܉?_C!?$jQ6D^@3`?4H?VZ?Dܡ RPt# E Qd@?0?` ?e?bܕ?M~9A?7@?\jz?L@GCx #,`5=7OʀL?QT?`=s?#%@Z`\t@PO?#?Om?Q?Q@?LU`>@4@?6f@?Ec ?t7@#|`?:k٠?Jjn?Rg`?P`6 M*@?Cz ?F??$v\?)@?`u?c֠?J ?<ߨ?Mh?@3w`? @@?DY;UB/?c?RJ@?Sz? G?!?J?2 >⤀?q?O~?e[e?`m?'u^?"ZCǧ`@?QP?(s ?!?EI&S0j?2-@ V@K?>:; ?Rw?S?g椀?#R``?RjFS-`?=N?T?R$?KKby'$[?e@?`?0?*?R?Ls1*FS?*@?Ec9* H@?K`?\mQ@?9 F} :t_`7L @?T#?VX`? "w ?52\FZ ?#ZI ?Oʀ?U^ ?R$⤀BT?P?_z# cp b T F@6 yKXEG(`?AX?C@QL P4 >f???: ?Q:G?]p?HPLI0'=T!  ?=I4`V`?8Jl?Y?D`;=A` '?E=?Z?Y'K ?-\? ?Y@?bMz?Z?Y ?V`?6^2?0?B7@O][@H$8+~@Da`7?8)zbK̀>a,W?L@?EQYS4RH'Y>8[x?O׏?PI?P'@?B 7dR44_OީI6?-'?IV@?D2/?W:k?a E]@cK20?S R@HE`8f@`G@@S_3?3R?i?`$Ơ??@?1q?J ?_>?d)@?b ?S?&@?5 ?CkT&JrDF{`J@?`?N ?Fb?@?A:G?Z&`>. ?*.`?D˕?R@?> C@?747݀ay|fb`arbZF>QV)>)/?P`?Y ?T|?N`?S<?NU`Y?OHXx ?3`?d `?>AYP|?7<@?Y ,?! h`??K`?'<@ #?S ?]lF?K+?ր?D@?Sؠ?N ?@z`?@lS@?7ǿ ??<`<Fn`(6? CL\E@86 =hJ5 *$-4B ?) *A= aa@;l@>c;h(<8`?A;`?C"(?`\Q5QD@9s:K@@Q?0?5 @J&@`Jx ?A?@>BK =Ev,K@?Š+n\N0IP ޠ?O?dS?ABWA(? >\Q?EO?cbt?dS?\?Q?7@?#2?9U?4K 13-FK`E>9>?@?@`?I/?N$?P?Lo?@ ?!Z?:!?X`?]H ?Cm j<9] dn1WǿQXрYY`@W]8RܕBnJgP?wU`?L?R`?}8ޠ42/SmYvՠA``?(oZ?# c`?#v?S&q ?P&W`dwm`>j ?P?$ܡ 8r1?(B J CDh(1I`+?B;;`[a`'@L2@?C ?D)M]5I=`?G`?]?`=?D @I?9?`?U?Q{?G?i:Z?U }@?\} ?>*]?F>@?X @?U??Mܩ ?Qv?Zo?]@?Qb z0=q<{FqTj SOHTCJ;@?<:?Gd ?1q@?Lu=?[d}?[ĸ?Y#?R `?Aߔ?E?GTx.m DM?C|?Ti10 [:TqL@X*P)?-Z?9?` 2i:9 P@c@fEH`?SDs@?HR ?3?A?A?H?Fh [@?2<`F/SF&`12h`?Na6`?R ?>Y?^R?iBZ`?QͼA֨?. ?,ԠHP ?T˻?P!~@E, JLJF?=?P @TBJ@Bm UZRr@8ojSm<@`"`YED;d}Rt Ty`> `?7&%!?> ZVJ@?I%`OR`PI5I??g `?J`?A\@Q耀]f!UzRn@G ?8 7נHUxT3lA6?C.Ȁ?N%O ?@M?(jQM=u?Dp  V@X7VP.= Q-@Y{P.= ?L?Xd?9NJ?0?FL`>2@*?<^L?C ?Aͼ?8A?j?6?\ Ҁ0`??/V ?Gt ?OA??L ԀS?4q=?C0P Z X'Cտ@.JE@>G V,`\R1 7@? `D+$ IO`D`E|7@?-_?`Z?0m ?@W ?9 #j*:rHM`?5N?RDD+4 7?[?b|Y ?FFR5?P)$?Jd8>Ot`O@:@?=Z?I+?G?9ܪ ?.@?4U3`@[3?F>@?F?D^`?E?JG@?m?>fO(ʠ?S3>as>JM^@?9!@?"'@>Y4?)1'-?2p?1[`?% ?@y ?O ?T, ?Nۑ@?2J?`?U<`:]?GYI, 8E 9pߠ?T@?\T?K?Dp ?MN>2 `?Y ?C E6d~?/?By̠2@L\`PO``WZTt@?:,@?V4 ??K`INw3#P?7s ?HM@?B")@?9\{ ?Gd?F^?B?A?L@`?M:?B ?G?O ?B?&`(D:?.E, ?"=`?UK?gS?Wm Xe8Lʼn?^:V?`Y@?!XzT.VE@=I`?(i ?Ab`?MM?@`t?1ȣ?A|*?aj ?e4@?נR_?SA?a@?CKKS VdKvU?Cɀ?X2?S@?RIT59?X`?P$HB6???FD?1ڀ?&4m?OV ?V]6?AÊ`?9X?AtG_N׾?F?I =ZH[V3 cc X6`?3`?6@7 $;ӏ:?;?Wм?;ύ`UQg`?5?Nn`?T?]|?RY@)<Š?89@J]3E4`NXJ`?MHЀ?Ysl@?m 5&?Q@?AD ?1q@?cJ ?K=?G\@?]k: ?_Cq@?Z/j?1{OFl`7)I`*h?P2?;q<QH/ ?A@?P>+?K ?!]K F >u?K ?X\L?W2?OG@?@h?G?Fh??'.< ?F}?M ?H9f`W@4π?W`?R05#-@?PQI?!D`_S?P^?Rﱠ/Wx V G ?l?@?Tz)?`l`?\?MVՠ?R v?QxWBf`G ?XF?[CZ:wM[21&Ge J| ?:O?I_?7?$'Q@>9K?0ؠ?ck@?Nd7fXn<`?Ct?N,?`8o`?^x'`?$u@58`?*OB1 NZ?2?2 7L?INJ?T<)3 ?@9 $1?S `>LF ?D,j`?Z?Vޠ?P?,9 A?.`?OG 2h`Q4'? ?Y V"E?L?M3%?5NI `P^ ?I{?S?N?=d0k?=@?@1w? ?U?\?P@@LT`gF BQ?Qk?9S Y?M Hi PR 0h??~@? R .&`E Ns@?ͼ?\K.ViQ?Ly?W@?J<̠?%h ?Q>Z?ZM^@7VUe7V?$d~Mg[0B?Mf!?L'~?Wɺ`?V@?,e?#7VP`SˠQg`[Z =p?B ?@?,@dE"fO?On#> .@LPG?7 ?< @H ?4?[A?Q;̀?8@SbtFm?O4?#B6 @.8?Gx?T5V`?0 ?>z?_`?a@?OAI{W4_e?!@O9 VCP0&M NK9?A?A>?<?@ŀ4>E?= MlY4U@?WH\?Zih`?Qs?L?U?MaDP`?I%?A2>`DtO*?C?\P?T4?U<?] ?R?L@?Z ?O#ˍ?F ?Y`?A@C%7VF<Xu`Q,A?$?A?T`?MbN D(Q`?&M?X9@?U9)?GW ?H>x`?5a?4`J6m U`S Q?`7?71-,`F, ?B@?]`?Q@C.hOz`^B`OQ`?4u@?N'۠?X+?Q/??6?'-DVyW.< ^^ tZ)`K?25??Q`?&Hр?@/`E??2`+9(@0?VA?T)?U?f, ?[x@?B DX?;@?\#E, SFd@k@?E?]x?L ?.J?Pc?T|?Fm?$z?0.= ?=`FHр=6?@@V Oэ?2@?KvU?E?RL ?UJ?5?6Hр?[@?Z `HXy??K2?K?Uՠ?] ?@cR@N"€?=A*?Y!@?^Ҁ?UA?P>?X, ?V ?Hy ?W(?d?`^ ?Q8?Ox?5cgK;a@?L?B=q:'pF0RR[D;?0 ?8 Q`裠RY s /l`@S3@.@?I5?8g@OG@?W?0k\}R?*?6<8:t?4 G ?Qn?4QP3M*S%5z<Ԡ4?MS?K+# @?00ɠ?AW4?# :@>&``6`H``#?5O??`?Q?QZ?D:o?B?`?A H@?a/`@?T.D`?Kd@?c `?Xq?Mul`?3EIY?8?WW ? +.?F`?%h ?6`?Un?7 O`F@"'@?7u?D`I`Dy?@?6@?1v%O0 [ F XB1*?Lf?M`?LF?SE?Aq Ԁ?PV?bY?S+ ??"?Oe7?A"?PY?\I`?FL`B6 !?MŸ?Y ?\v ?W?S ?E- 5`-?T5?^?N?%m ?3S",XmW?8?Ke=5=<?P.?P$I ]@Hae?A`?U S>Ā? 0ɠIi:N:?5?RJ@?@>N/`2'@?SI@?@.<?L .@?\Zz?32F" ?%Y4?F?:?5cg2DWCS{A`?@y ?Zk@?Qͼ<Il?G8n`?Zj?K?? JG@>@?X?*h" ?KV`?U?@aPP??P?\?`?aN@?`?P`?P`?`A ?CTq?[d`?Rp?9$f?JP?RԀ1`C ?mܪ ?Rr?f ?]@?L]?Rt`?-N<@ E1?2@?o?T>?UV?Q/ ?'JLi`NwU!4@?\o?\V?H?BM0?BNw7@]*9[l?9$f?W=##Uji@?B;@V`gC@Rꘀ?FO2@P@0?GQ ?HS`?0=3,;=@?-A*?P ?N`?5:?, BB?Z ?Y 73U@F8??S ?`#?S$@?G @?D4 h" A?5:?\0?]?,Ib`?=`?^|?TҾ*wmJ`>p@ ?5?NY?.T'T?;"7 ?Vw?Mq?E- ?\s?b?O`?0:??6<FmǠ?D?H@"T?C?Yѽ?MFD?c'*?U?hB?ac?L?Q\?O2<`?C@?OS_?: `B@@QGF`WE uNÀL1-%@6`HU@7?2@'@C'"?DƢ`?QAMŸ`0ɠK8 .< ?= ?\ا?c?U`?/Bø% @?R?X ?Ig?A耀Ê`OA`4ހ?Gɺ`?awc ?]?V>?Z:@?Ai WZ4beV ]?D.?\wʀ?נeW`d 9Cab M ?G@X[5 /@?De?QR?V`?B@2?$u@?@G?@~?Lb?@eHBRE 8L`>d~GPWF?M?TD?8B?3Q2 ?R?Wv ?Br@ Y?Dώ`?Y?Jd7@> ?LC?3`L/@UKRTIK/ͺ2;XM4E0@?@*?H; @ ?U8?_?B@9РO=`W93F?Q6@?H>?$p?. ?E?Y+i`?^|?ED@?~@?5[@?W??~@G ?'z?Sr?R?U=*?RB[`[n V ]?.^?^>?X9(y B{?6O?:Ȁw?1\?A>@(3I|X NX`G@H@/ d??>2(F=?È`?HY ?c #?_ݩ ?O)?Kn=vZ`A4?!l@jQ?As>q`Sh@?7^?. ?Wm ?^?Q?O?AR`T^?4GTy\`Y.8@5=*A I+``^?R??d?IQ?B@?YZ?`D?Uj ?_3@?BM0??I?]ni?ZRHc S8z-?P?V>[@5V ?B~?8DQ@RS@>B?a ?cY)`?"a@VQ@B,"?IS`?UPH?OR`?I?<yKV?3L?'p?EЀ?J`?K.?3`K `Q%??^`?d'?P`?I6>?`) ?IF@?&C`.`M@?K@?BYm>?S@?4,?H.?Tn?$EH ?P@@?h=?a@?Xu?^Mu?BHPO@Dʀ?2@'@@`<`?6m?:D~@>"8ͻD`@?E_ ?CI`KQ2`EH%}?Na6`?QM`?T@?U@? `J@?9 ?O*?8a`KZK[4 Vޠ4?K@?C?B`#@`ZaՀ? ]?Jq 4x@F03m<@APLPE`Oэ>`?CI`?;.H ?K HxV]-?L@,`C ?:*?U߫`?HOV RR?0?"\| Dʀ?q<?H?A?N)"?Rc?-`bO ?J?Q>Z?7c?L@`?fh `?h9?AW S`<+$?(ʠ?QI/?^?a?V ?:d? @?;?8?1 f#NKY@?)@q?S?S<͠4@ 8?P.@?Cޫ@?2Y?\k`?G`LH?R3 ?_#?')#?.Ҁ?P?L?T-?YӀ?T ?=l`:+?G?e״ ?d?^ ?Yzn>g `Cf?O`?Y/< ?=,`>d~Ph:TW=ŸDVvK6 . ?Aڀ?@aCyQ}qX G@^1H`?E8`?E ?$0tF_ D??GY?>P E~*VDR@?H?SZ?Av`?b>\D@[o@ `?Az')9?@?A\@6QQs`'Pi E ?E:?D@V cUG(z'@?&?H9@?D-S?*?N?a{?S;1@0ɠ>, ?2 ?Bu?G~@-_?NP ?K?1߀?JI?d 0?e ?C|O2<`?S_?9+""Q8ͻ?Xe8?ag ?G`Jh3NO֦MŸKG CI`?8@B@?6>?Gz?M8>?Q?!>@MN4 ?@`?E@?` ?JxH?Q?d?U@?8?!X ?@R ?U ?N`?A?Fב>Ơ e ?JJ?PѠ?M?26 XX)?R?b`?RY?FbO ?BRIGRܓ`4\No;`=gB@*@ dH>QsSOHP]e?>;?@G?7`=9 P|CAK`>), EW`0?QF`?]`?Q` 9`+>A`DƢ`E``'ki@XL`K$ 8?A+?[v?Y@Uy 58`C¡ Q<?E?`?N`:h" 89@ `-@@?7B ?J?<|0?d~?UZ?a?V?0?[d`?3(?(%I@8o`@h?RI?2mL?X?2'@?R2l?7$ G-?(e83SAGĀ?Ā?U ?P`?0t ?\>;? I5VD[R`H`?KB ?a ?K{n@Ty/Qq@Z"?@?\Zz?D@?A^@?W?QB,+@QXzQb9\?"?)@?2d!?>"?G?X?F ?E1?Q֨?&` t?O\K?R?1߀+$?K`?[N?I0`H@Za``y ZE`MDB Z?B?N?V(Q`?AZSaj F`b MW&F,`>y?@?8]?W?`h?[ ?2M0TW& Lտ@?GE- ?8ߓDSV[I.5E2@'Ā?O d??``/@g `!|*>YG@P8?B ?`Q `Pf ?) 9IG?;}`B'Z@a`eE`T?TQ`?SV`>=0&`W= b G^?@=?3V?G?P/`?0R 2Ou@[-R ?5&?F ?Ce? *1XF@R@Gx(`NWC`L-Pv@?"RI?IX?OL?Jy ?TN0?U ?H?N7'?X?Oɠ?5Lu?RUy?_Cq@?Sm<@?> ?N`?Ol`B@?X@?]?$pDw?Ty?Hf~;"7  uR N)"?J@?FqD3&ܪ ?KR?ElR?JO?`f?`5?8S`6Hр?r? ?`?L]?V>?I@5 /@/ ?I`?'_Qv@f Z@X `L @4.W0%U?*5&?EMM!Y8( S}*4)?2 ?jD5V`NF?UK/?QV/[{?6]6?>Q>6?; ?P}B?1Sa7A`S]QXz,0ޠ??$z?F }N<@ 98@?8z8 Sq UZҎPb?2[@G`6<P<@^zQ6?`?G?O֦?`5?D6?7JF@MA*:`?G#?Lk?E?!l2$g61MaQa`2Wc50kF_ 52@By̠Oy 7` 3?8[?KLF`?1S`?1ߔ?T G ?W?F`?>s@?MJ?D;?D@??4z?U`7@?XW֠?F ,e@~* ]Dd~YPQW4?R?+?UH[`Rm?5!?D`?< .@?Tހ?U?;@?J+?\?WA`?S\?b?h7?Z3D`)?)8]IE;@=o ?)0`??8@̤#<FO`FZr'@=B>x'`?4 ?A=?)5 O`@C`?d= ?hA?VO?JQ1 ?T.S?P-ZGQ?ES@?Wy ?>`?0[?AC[d`X+:RX K0<@@ Ӏ?: ?M'@?,Fk; =?*D8K?1?R?Y?Hf~M JE?Bt?7y C3e?2r?D`?C(?'Q@?RH?)PP?2RI?S<͠?26?>Z?=l?@ ?-K] 3i?%?Nz?D?,?G:?:F0 *@I 1Ê`#VC%܀>?1b?Dj ,V U N}@?)\?F`??4`?~@?7@?Ql@?R;@?@$ ?N%O ?\;@ ?TW?7a7`@`P)?P"`?5?w`?D?9 I_&?9 ZX,L@`DC[3s?3?<Š1Cޫ@?`?/V E& D$?S ?eF?U`CP>I`?YK?Q ?"Nj?Bkǀ??j>GM@A&@?ANH?N/`IY?7B ?NĠ@@W:@?P?X|?I ? i:?F?X6?Fh?c ?H>`?O^@?N ?N?,fP 0tQ=P{Y d~?5+ ?'s <VKn?K`@?J"N M`?V;`w%:?D@?UQ?P 8?Q@?X`?Tb?RH?>T[@*aD?3VK@?_ߒ?\3`?S.%`?52@5g?@?5?2}`?LH`?RTր?6d?7 @?P.?,=)Oz`'?Go@6@Q?Y4?I:?D1?Lh ?BѾL``B^׾C_?@}B?(H@ C?BV?B̤??t ?F<?w`2J?+_@=o X UUa<p ?F@?UK??M6cJ@I> .@?1l.+/ ?8/ >@U@Uy 2@|*Gp?!M`?<T0=@_D` M \YU7n@N,PtF?3,?/2@J G?9v`?SN`?XԾ@?O^@ki:(h ? x)`?Qͼ?\π?Q{,zWM 6FE?OT?Q ?5 ?R;X?W?@?0u?Q@?>G?=0@?I}' @=" ܪ @`2Nj?8W ?9C?D3?R8?R ?JQ1 ?Lcf?_{?eZ?\K2@?$)?O?:'9M9?SJ?R E9WPX?P;?W`CVum`?5?b:?g1?aH:?Q?L0j?P?F ?L+Q?O@7R?ӏ?f`V3Mg?<:! fHW?7Z?]Ā?^?:o:?G@?SQ2 ? k@ JG@?2"?Mgg@?_6@?J^+_J`|Q(@NȠEh JZ???X`?*@!Xz?M`?;6@ ,zW3-@M:?K~ ?PFt`>+8JI`?%??# `=X Y+CZI?bO ?I[4<``S[d`E G ҀQJDk@?55?_3Z?#x?A:@?2, ?= ?E@?%}2u?;M?V1?Uֿ`?(`G%P @ @?>ܠ?Q( ?L@~?V[L?^`?%?H?b?U?CP?Jվ@?C2`OUC *%ۀIKC?1?R.?Y#?U?\;@ ?V/S?L }B?6`?M?7Ā?/S?D?T@?Q: ]?? d?:]K(N?:X?[Vx?bJ@?^n@?G?<Ԡ?Nq?J ?K?Y+?M`@;-4,j`Qr32?U`?Qk.7c?FHр?P`;_dXB+D/?9 >9 ?'` ^?3?Yr%>dX&@XL`?$K ?D?`?R?a:@?D3?)?J|?1\,@?@,?@s@5MN9NE, 03?ӏInS P32?NH?U?A ?QIC?;ύ` A@? x)`?PM?X6`?WF?9O`E*?FJ?JA?Gے@?D˻?B;?J ]?C.r%5?I ?G?@>?\?a:@?C8%Y4?6c?,`?/ ?L{@?7}R Y L .@Ch# TԠU-<Cj>Y@?;a@JtWSB@`Y`fSvq<6d?J?Vr=?I?^Tw?ep?T=?GI?Oɠ?9B?7B ?Q7?Q ?2'@.n?2@?PR ?R@S*RL ?6>@?K ?K2?F}?N?= ?1 ?Xhh`?TP`EX`;[ ?O~?1?SSU@+$?T?RO@>ɹ`L@> ?@`?FC`?J@?M?C_LHbڪa j Q9?`?0ۓ@?V`@?a?SL%X?<?Ph`?I?]3%?`? @ @qF???S{?Vu?C@Fb6t'?H`?D>`M?8Xy?Mg<`>d~^@Ps@?;?Hc`5 :Q1 ?4`@?IDC?V&g?`i?R8*`?@?W}A?W`?A@!@0^ki7:&@?AU@?C ?,[@?L`?YY?F}?)?Lk`?F"q<,R@C?Z US1 Ga7`O*I_?=HЀ?NE, ?6|?L?Y[ȊV{S/kR1ߔ/D`:<̠?I ?T?J:@?R'?Rt ?AՀ?Le?C#:""f`?CQ2 ?;q<>??Pi ?^?Dy`TXAQE1?$ԧ?<|?CA?Qv`?FK^ ?6`?Q?Av`Sg RkE, ?)E 3eSSS?A ?R ,4C?P?UzX?C?6?=@@.ccq`C?+@?2`?N?^z?T@.?!~@?SՀ?R ?K ?$M|?b?i?eб?QNF ?o@?S^?\F>d~W0`w?M`DeH3]dKP@?("?BY?D?JY?C$U3`?? >??e >̤KZ BTր/S_4?z?]`@ޠ?M+?H*?6?SL?`@?Q`&vP ?K`?TVy?M`?)1%>d~?B?QJu?T7?? Q'iM ?B"?&1@P`?F?!BѠTpES?VR`?b?.ZPS\J`OC`3?*m;@?B2lAT-?I-M/RbW``-H`J%ۀ?:A?PZ:Q1 \@@]e?L?A ?F?X`?J@?g@;?S ?Q_]PQ?Rø?SJ?G?N+?BE?5? ?2`I/I-?P|`?5^MNKQn%HXy?+4 ?[e?bt ?XH@?>`{?@?J1`?SrU` W,R@XL`M% =!%? 0`?>&`?Js?WS`?Uՠ?)@q1)nS 1%?L ?dF ?T, V= P[|?LŠ?E4>Xx?:w?@A^@Y= Ss?L`?YznAafU@?0Y?Gs{1?#o?A5 ?@Y+i`dV.PWA`PC Fho@?H`XYeg LԠ?H?R^e?N.; ?I* [@Oo?7Z?e<5?\ >Q?), ?Vb@?F3&?Prm ?\?*|Mt& 1! &{ g `?9lBM0V@9&@?,BB>F@?B)J@?AE\?+9(@CdEBCH@Qc`JqPUZQqU@?Pm ?Wɺ`?@Ty3@ ?=??G@?I/?7x(`?R?H4?87V?WN?Y* ?)d F &`(ʠCM_@? L?9I?Rv?aH?PT?Q+`?a>?^9@?]o?c ?c*?^ ?R8@?Bf`?;-?w?7K?< X^@e@M J}d}]@]?<?D`?`SYzRc~L `VA?#?c @?Uá Pc!8u?S;@?Ql< ?I@?J8?.E, * ]:`9?Fc`?Q>Z6<;΀?Q%?TW`?M?L ?AS`?D4 ?3`XR`a]@j?E?P ?M4,j`Pw@$>@?42>s@?:`?QD ?BS +9]@?72?ar?[?1ߔ?S?\6'?5/?B?WP?^F ?F^?Q`?3 `?!@?(?D?\a|?\qk?-@G8n`Fa@?0kj?Q H@?09QU/ȀL,678n`Y@aESJ?P?Z`?NR@Bm:[c`?$? -@?4{o?8?m ?5@?Sҏ?YX ?A+`*S?Hy?T>B`?Q???N р?V3&?: ]B@IXQ F`?;(?TE?YD?E@N'UR2 7U?D ?I&` 0JG@?Gx ?@ؠ ?D?=`";?B" ?C`?2]?^1j?e?MN?.< ?DQ?;?'d?Pe ?V ?Hю?I5?\nހ?cP=`?cI?b?`?X3?J;?At?R v?[ Ҡ?S#?CS?4W`?2?Q?V㬠7s@Zh" I1u/])5|AR`8P5ZBY?NȠ?UT?Rp`?Q?G@?E?@?WQ ?b"?U<d~H|)< ?H?>x'`MɊB,`?JnO`?4.?QS ?0$ MΤ!NH?S?>c1"?)&`2?/t ?b`?T ]WLF?P?q?F?2 v?1?4?Ko?L;@?"^@ ?`&%@?3h# ?;3?5??ͺ? Q TBWc>_3-@?2x@? 2+\ > .@?52@?A/5VWz9`?F ?C >}C@_xaF^`#'@?:0  A"?EЀ?J#O?2?OT?A`H 1~@?(&c?L`?aD?T#Ц ?@?MS??Q`)?Gm ?W&?Zt?_- ?U?0~?P5??d ;?`\ ?: '=?>\@?Q`?T0=@?Ul`?Q ?Kmi?]Pv@?b R@?4MRv4#jL@E ?J|?T`?Ab?)x`G\i B@?Vo ?[}X@?T*?J ?2h`>6?,[@?J@?PW@?9]@2@rG2C?5?G@?(M?؀`JQ H@d~?T0=@?D5V`RW@G[?N0?B?%I?NT?FG@?Fm?\1 ?CJXz@@P@?3rU`>Eg@@h?1M`?C1?0x)`?R>{?2?J#O?P?0p 5&?cg(jQDq=S W)#SER)M@"Nj?@#7?t>БB_I&@>zBQ\@*%ۀ?Qq@?6gh@T\ c[kU2``D`?M6?FC`E@??1? i:?R G?PJ ?/?E` I`VMG@ۓ@?4@CH/?D3?RI>E2?Qi?=@Pw@"?UȺ@?Q?A( F]y?@5h ?Y?G`R% Y`Q]@B1 2h`.x'`;W), ?GK?Al@R8Y` $ԧ?PG7d(?^ ?b?Ot ?P?P@1U@5 ?8?uT?*?,?#?0~?$9}Fv?'?Sr?IE \?I[4?U`?Q`?؀G$ "=`?V"@?Sa>7/Xx?I0 ?0[?3#P?SL ?EX?"=`?6qG`}[zI /`D@J@_?P1`?7@Pt LR@I6>ITՀ?@5?HG@L<:Q}q\aW[{OeI?*R V:)@B 0`?q ,f@R T⬠V ?BNwF"L?:վ@!Ê`Z@`ۓ@`:@0 ?b ?]e}?:E`?J,:?Ed@?A@C?XXy?Mw?9 TyP?!l@?QX ?`Dԧ?.&`?N0Ǡ ɻ`E?Gyn?J-@=S)Р?5B$gCNX*wm?L 6NR5P$@p@Z3`FE>i@ y?@I@`2ZjX ?L,MVՠRL?Fh?N @]e?$ Ӡ?V`??w@F@QwO3@64m* ]7Z?=`?L@?H. ?$% ?\J?YӀ3ELY3?>W ?\u?]{(?F;`K& Q2>`?h?.Y>E, ?I ?>`Q`F ?4)!D`;MB< W@YMbN IF`C >v?U?bu?MKCo G&`V`@{@@E-g>9SHF ZkG@?3?9lH[]`R)/3:AF?F`G L,?!:@?R?@F6?(#_RB$g?1t?N׾?\ `?X4&?S} ?QirT`?#s?X`?DC@>e@?:? $?Xp ?`C?Qڀ?6h?<?6M Ypߠ)?TŠ?SZ?HW3BWcX`C_ 1l?G[?뗀1@?&C`?<#?@`?U?_D?Z?Q?D?B?44;F 2ѾJ @?6]6?Tb`?U4>? ɻ`GEQBS A?+ ?BJ@?KO^`%Ơ?X ]?[x`?B?+?A?7B ,?2E ?K[?Ft'?<?5@?J0 ?@O!8?V?BO`HI.;d}3??TG?S ?6o ?(?5@? L Y`= ?R`?`@?X G@< .@V@7Z?6?.P (i P P?4?La ?Q6`?\?\} ?Z`?X?J ?@y ?Qx?QA(ߓU%:?$n?6<?U/%`?[ Ҡ?* ONFB,>@? .@?g?;Ԧ? :ECj3~ Dπ(2=`?B`Fbcm_ Ev FUZ`Tx@ ?NFr`?E+ 1okP` S$@? ?R?+A}qY!> ?'QR]`EW`BVT| `?+Z`W ?/!`O:^?+4 N`T"@OEZ8A`?Fk; ?9{Op SPv?Q?P DWR]@?RQ?a ?=]/ ?;݀?>3T@!ڀ=]?X ?E?Ez?K??;s O=D[ ?OI-?Ht?4?m 9E!>JwLqk#@?E1?Q?C@`3|1|*?=,`?P`?FYc C`P,@3`?" ?@G?X[UՀ26??  ?$% ?D6?/NF?0\ ?Ig?KJ,:>`0Ǡ? T- ?@h?[?a#?`6`?Y?/SV(?4-@P$6*rT`Lcf!4@?PFt`?ɹ`QZ`O@QpViDS ?ԀCnYf`[$Spl41?Dʀ?AA\MWm WE@&/S?DBCyPn@?.; ?7B1>@?1L`;MTt WBI]>}X^c@`WKu`=*9?CS?D.+?!?A`=gg@GZDŠ?A?8[-b Vk; KRaa@b_0t?DOp W[{?3,?R51! TT?&l`?^(?]s`?Us?L >Ġ@Os<@?B@?IWb?N?B|Y &`FHp ]?E?Sj ?^'۠?[@?E"̤52@1>@*5&$63 `?6?8D`QؒU@?/IѽF|?=`?Fi?D+$ ?IHV9 a]@B6??D@?M@?P`?M ?!@FOV X;\OIpߠ>9 $P@& 7`MYb -S?H@?#`Dy`%D@?,@?%cg?; ?7FrV~Y@D[?%?,?: ?,[@O@A\1T}?@`A+PZ G[@yXؑ0?H>0`?  [d`X TS ?>L?% N 6NlYE [dXfXe@de@Xl`HfTaOS @?=@?[M?Dz)B`?=`?_6`?\ا?U[@?QA>ĀPo??%! `?TU3`?Y`?R`?RUy?@ʠQ|*ZĉSm`WTx]}R`ADr}?R?M 20G?GY?Tt?RTր?H^3L?8L`?L?]X?et?]`@?:0 ?=<?U?M`L* @Z]>?aA`?f5@?` ?<K LZz8[@Pv@?E9W?P.?3#P:6AHQHN&`:^+IF`PA`4<%`?61\@E. 7`?=?Y??UT.c IH?=~X`?[J]?U@?@?J?P!~@:`|ZOGH9@?Q?`WW?S 8F 5 IgQяKo D2?+?O ?`Xec S^`IK7ے@@`3 $pFiT6TkH\@?3c ?N5?0Ԁ?2`?F, ?>z>)?B.?V ?S@?Pv ?\(?`W ?S ?>?8b D,j`^ U`1DIC ?8@?i:TNWz?@?W ?M @5 ?1`?P@> .@:? Ģ@$ԧAq`!?6O?Q?^mR?Wg`?0ŀ?:`?QW4?NZG@T ?Q@?Z?[?O0 ?&q>F-g ?@?ͼ?%}7@F >;P ?B?K?=bN = XOV#`?-Z?R`?R0`?[4?]?DI(a`F?)?K(?M4 NGؠVŀ^ N`?:?D?Gg??7 -!@Dd~Y[`e@?@K"7 TO`'d?A`?7Q ?2Vr`UIF B > `?,p ?1?X?'F7ݠO&M?Mc`A?C?P}?00ɠ? ?CJ?YGKGXK`= Ge P<?KB ?V?Q=?A I aU=)-l ?B, ;}`]Xw?4Q?[??6A+WĀ?5 ?a?Sx?**?;?!lh" ?* ]?# ?#@?DI?E!`?`?/K`?R4?O?9?@%v*} EDz? ;$ S/l`?N͌@?Q?R^?K@?8( ?IY?F]67@ ?Go<`TͤYf @`2a`PUq`?נ pAp U`XUC'"Oͺ^Q0 ?3S???)b?4Ht?K"7 ?Pl "̤Rp`B:?5? R@?@?Gl?){? ?6i?A-%@?: `@@UsUP@IR` ??DM ?>fODW X``N`O]VR`I_?.T?Bbۀ?8>@G\I?9=`?`?)\?,BBOV`AX?A%?QA V;?0a8@?az`?[*?Da@`I.*wm?DS ?7ݠ?#A?=S?5?|?O?`?Sbf?>c ?^ ?Z}F<?FD?`?>LԠ??:6?0 ?Hz ?;@e B2l#e?1Xz?A`Y4.O^`?D똀?+?-?=]5>Pv@/AD`9\{ ?P?Yt?PfQ`?I?AC?2??"?*]>`?F<?=`C`}`t ?T>?FJAL`NYQ PMt& JХ A:(h QsaỴ?5z?FE @Q\Mo@?Ds ?Ab>z?3 `?P?`7@B|Y A耀?N ?Z| ?9&`!]?E?Q??*DC[UsWh]MF[ :`|?D\ ?>J#MrPh?'.< ?K/b QAF@? ?G?2m=2`?'FA:GPbXC?&`?U?WH2=`?`?XY`9\{ RR ?:@?7@#o?H*?EX`AU@J`Aˠ@a8@9C<Q<0j?DP@? `/ȡ?KD?/`?L?I3 *O)|P ?F?[!?a=?W? .@??U]?VΥ?Q\M?Rm?7x(`AG ?+4 ?S?Pq&?BS ?Hp@?Rw?Qr?:`@(H@1ȣ  GkiI /`?D6?UA?95 CKV`@u ?# ?A ?Ooi?X`?W,?P ?:Q1 IIv`?Q?[ҽ?4ԧ7?1NH?@U)Id 3?6Ź?.Y?=1߀?S ^?K?+?0Ǡ, K^`#<?K`?, OU@QM`-H?E9W?Hc`?9`?$ <8`P@HE 6Ź?O[?W@?GI?6I 55G\? +: ` ?"?X?]Ѝ?W:W?c ?jV ?`&?,Q?Xx?H( :DU?(a`??<%`?][?:`PAM`3 ^AG #?+l#'$ ?=K] ?\?][K?Sh@?P`?DG?=y?@?Q^7 @f ??#y:0 )?$W`?o >@?44?Q?Il?P?d.@?\`?T^?^< ?S4@'\@%&9?`?Ir%?S`?UȺ@?X?Y]@?U`?AE\IH?D@?P3V@?6?=l`?E``?!9IJh??PQ?R?P)?T@?[`?TBA?@Pv@C GE- =` %;L ?1-%@?ThQ?T?S&?W`?O[`?.?-5GQ4T^€?!g ;<Ԡ(",!q@@0eHG Aa`? &`?< @?T$!?aa@?^?SC?P6`?&qW ?TQ`?Zq?A!/3 ?7=?Z?X?J7?U`?a?W@I 481Sa9?8 ?2TLRJ7TՀ?^E@?di?Ld@<0jIѽSIS?Hp ?Y@?R ?S¡ ?b+?`?Lا??w?B`?? ??M` ]?I`?Q$`/%}`$Z?K Ҡ?]X?O@?=&mH;)`<>?/[> 4d~2&`?*Bw?|?M/R?MD?B?0GHÉ`\^Vo MC`R&Q Gj@``??&*:F1@R.?L>o?O s`? <KBTJ@W@PԐ;?D@?G:?$"8 F6K4 ;@DB I+(3%܀?GI?XP1?H|)?CP?R;?.+.?V?b?}@?QzA@2mOEh ?7?Bi:) ?6S?E?0t 5?9@?E ?='@?B̤?C? EL9V?. ?XB?UT?N?S@?@ۓ@IF`O;(`??TY`?S ?'.< 0}B0.0?+C`=<>nQ~@IV?D.?QH@/O)`?=/R?P`5 KN@Mӽ ?Ml?UѦ@V~Y@_w?0?P?O3?N!|@%O;.?H@?AS HBGs@?+ F ?8 eK a`U$ ?N?T>B`?]`( t`AokWMy?@?9 ?}BP:RbG͍@1q@?';1?>?Ug?#U(P D R8@P"!`7?#<?@q6r`a&dIM6?Q`?T `G@aY`V옠Xe1N?P@ ?I2@Pv@CZX BE FYc FX=Af?/9;W2r??>}EY4@?4s ?ȡ]5D?:#OI`23F?= ?Q0 ?P`?Ql@?S?;@ۓ@9?3L?4B `K??26 ?6qL1Xz?U=*?RDD?([`C#R7m ?5? Gb}[sT "`?48m`?WE- J@`&@*h" ?CdP@?Xf?p$T@IX@CGh?$`?HXy?%K`V<@?N?6 SRkǀGV$VIbRRE ?(7V?Q?Qߔ?J0T @$;?Y?Vq? [:C@8o`>@?3%܀?M ?Z2`?>JT\5PJ ?3P?T?J@R``Tf@\!€d` QUK ?D@?1߀SH@X@BFտ@8 4Q?_E,V@HP a7` ?%]`?Av*Dr@> ?R=B@?\ ?M1]Ap 82=`?ӏ?PL?YNJ?W?X/ ?R.1Q~B6??) u? NEM`?6t'0p`/Rπ?@]e?A`?@z?HsRŢ@N\@>9OI4O?A?9?@*j@?WCC;?2`8*ZkQ`Mo ?GS2@?9x`Oc`7 ?C?)?F?[h?U4`?J ?"{Ig`??MMK& b`\w W[{I@?L@?R1 ;݀W VvB.?8b ?@P C ?0)$8SHF XT^GJS?Qr?L`=/:I`#Cx,#?Lp?S?D9R`2@?SB?U?Xc`?aV ?T?0`?N^?Us?GU?vJ@G`Ā[q`k@\R@?89 ?`NkhXZxQ?`ȡ?< >P>+Uz NP?@?8ـ?U]?V+?SC@?Yj@?_1@?V,$@?Kj`?])?h@?a! ? TՀ@L?-1߀?MTI?V ?U:?@`4?g?IA@?GO_`?6`7A! ? 5:oR4?0`?Ql@@/?'u98@@`.`2*1G<PY`?B?a?d4a?b C`Q PSi^Ux.?6|?4?@?C\?Rr&?Qs>?TG?Uo@?Qj?SN`?DƢ`5r@?#?OYYK`Yb`.`AzE?Pm`?XO2@We@SˍPIf`:@+R?@Ģ@?P 8N R 0`UlRD똀?$W"Àia^?/K`?Cwn?6d?0? rT`>6_ P<?K ?JF?A%?SS?VQ`?T1 ?[?T+$ > DIv`? ?J@RB[`j` %cg?KbDD`?}?M:Ag [5U`QAn%>Tw?<?XÉ`?W?Q!?U7?\ ?Qr+ ?CO?c@?`Z`?ԧ? ?PG?6XA`>rT`?M?Ea:[c`0kj?Q f?R7?:F?KVx?Q u`?HO. ?f`?a2?^n`HX SF`P%@?4 ?8K? H JdO@T83@?J1T?R `?QO?0\ HTtm@T@ !~@?Sr> ^LW~@BA@A홠(5``[Y@\`$_e)]`]@?'F?So ?N ?OF?PS3@?A$9@?`t ӏAq@Sר1( ?Z1`?Uy6_  ?SM`?M. ?ȡ??&ב1jRB" ?+>A`?LC@,BBQY?=?Z^?+ Zު@\U >Ζ ?^R?QbUQ[4;? @G)^>)V?7?6@M<?T%g??K$ Dw?O`?U3`?6S? [@J `VD[?1N?[9`?S@?M'@?[!?^N@?Eg9?.c ?4?@I?Ph?ZUORIJDr@a:^#D{o ?%?G`?ePG>3T@?);VL``Z5#?&9GN I\F0C`?{n?1߀OXqY@`I`[@?/?U??G 7WX)Q`E~*? `?$` H XY [WWM9 ?Pw@?PO@?#Z?2Ѿ?>ܠ+>A`; F T3i2u VW0%gE]?Gx(`?Y ?W1k?Wt ?L@? 0ɠ??ZL%w`1?'@?C1U?WB ?NY5&`DLM?CU?Oo@?3[d`KY@H??`?U?D`S_t=K] ?PG?6 QW) AW4?7 ? E?@8?0=?7Q>d~KPw?5?QA?&9+7ĀK`@S`+4 ?`T?]c`?4'Q@>h;HFcg1I/QbC΀?8?; 2@DW0`%IP¸S5PPc:?=*9?G?Q6?W?L"e%T1@??[?T ?RJ@@][@L?2{.@%!?T?XCr ?P?T2&?PS`?1l@?7j@?O4?Q?L``?L ?M?0t @yo??M+P[/ L@?MO/?P9 ORBE ?;?MG@?H?: ?5? ?8H@?G>?98@AokG`?o@?/|(70Ƞ?5?Z@?X-`?> Ԁ:c 3T@?O4?Pj`?1K?F0 ?K?MC?E^MK݀\ `Rn@HMLH`P2R-S5I?Ob ?GL=q>`?>8m`B 5@?F^$ZLW5Z>P`>z?@`@?=K] ?RO@?@?1q@?6A;*`MI`?S.Ȁ?\8?T G ?E&9?RM?N@G EB@?X@?bUy?^@ ?]C?I@B?QWנ?I?= ?]?\Er`?D-?5?&My?@V+:>x`NVC`5X?A?@?Aȣ?Paۀ?Yq?^?V@?Gd ?Jr?R?3FX~ bRS4 :?-@?Z?` ?T\5?;t@2`9ѽ_Zb@?+ ???E!?Y+?^?bx`?D@?+MR[C~ ?/t EPG g ` .@H\@H*P ?')#9J@EQt?F"@?Q?OY ?0O``>6?Q\@?Zu??8t??7U?PtV?."5b 6E5L`>_)@F^|@RYL`RTL"\| ?!D`?"p?4y`?F?Xp@?X[?3?Es?b@?a/?O?C6n 6ZSU?0Ǡ?ZrT`?Q7@6q?OD`?\?\ ?R6?Hտ@??Q`A7W^@ZA?&,?YР?Y# ?G8?!?Aͼ?Z*?[g?F`?0`?=y?@?@ @D=^W`\ `H>W 7u?5 /@?Q֨?U3`??M`Sf9;7?RD?L:?D$?R^?S(?[h?ai?R + U߫`ZHE %}?RŠˍ`_0 O``?H?8`?L?M R{a LZ=`U.@WL4d~?#C7+?'?-@?N.; ?AqF@9&@>MH~@Eb ? t?G@jOP47W ?* 9I?"$g?Ub?d`?b ?M?7W ?@C >БII@LGLPdhQ:@?!S`?\?UD`!?.0ǠBrVPw@Qe9?'K?Ttm@?D7P Z7`OU@?**?C?+W?Q ?bU ?NOS<SNۑ@??Xx?W `???#s? PGV8N`B`O>&`RX^?`?=t& ?J)`?V>@?P_N?3y?J?Rӧ`?R" ?YP?NY@Go@G O.i@ @2'@Em o@?Lv ?O2?B@?6Ź?F@?Z?^N@?DtBi:A耀:7R.VSRr&?9 ?eĕ?W_&^?տ@?ԀGG)#?/|(?_g?b @?3Q+B@?;??'u?U@?c ?c1 ?W@?KY@?D( VJIS C.Ȁ*d?9pߠ?8`>@?,8`?K6?WP?WCC??4CI`LGlH`?Qi ?Rlj? <EՠC @͎@?Z@$% 8b D| B\ D(+\ ?;-?J?Qg ?3y@S3@ ?AC?XN?b`?S@`KU2`QX`Ou@!Ê`?2 v?I /`?Ru ?WX`?`!~@?].?K ?>G?EƠ?{QXzSHF >7V?El)D\ ̤4"H?Vr?,Qiy(j9V`FO3%܀?[P_N?E?c?V.?NF?G/`?Z5?V@?O?N'?7fPF'>?7fP?9 ?:S} Td~Fc`?L_ ?K>A`?5?G`?P?M[?Lr`?Qs?P:?(y BKJ ]NU@A2>`?0R ?1w?/=?L?S:A?T?X1?SS?4x@6LRSd1q`?S?X@?C "'@+l#?3]?JE?HW?M0@?[ɀUZc@d@V1=@?=U`?I]?3?B?QZd@?KEpF^|@F6`Q홠W5>`?^:?V*EH`P?|?:j?2u?:9Q6?뗀4ώ`45 # `>z2Nj?Ê`,k`?!?P:X?=BѾ>|+{nDhQR Gl?E,?T?.JE@)?Sg?ay ?S!@?6@?G?KV3Ц Qv?/?ZȀ?KK ?)&`?Q?8%~R* ,G[?:P`\ʼn\@TD?A?D.Q3E?Vu@?=0@>Y?? d?Pv ?Hߓ?SU?W`?տ@Gi?LG`?`{@?W! ?V`@?OT5I`?&v?W?J .9X@x)`9?T?Ha?R`?D%&`GfPV[S ?&Hр?M?Nҥ`?G=1߀-q?N?U?A`>`#o NF?C6n ?AO d_`R c ?5! `?Ag`?Jy ?Nܠ?M5@U c`cY`p`;?Hb ?&?Kٿ?2;RK@`?UA?U@?B??T?_\?G)??5w`?4`?=/?I?M ?-@\| ?Q"O?TQ`Jwa4On#?Bi:?7@.?Go<`?]#?EP 8>@?\+?Lg8?e?Tk?>^xʀPo=`?V?X]?) Q-@K?T?\9?$@?#`?>cJ#OMH?9}? ]L>o>7V?RŢ@?/g@6Hр?T?_?Ko?NȠ?I* Gt Dn?<ا?p$;`>"8`?(y ??A?4ώ`?&q< @G?yV`B?P v?QP?6XK;Oz`?8?Paۀ?480)$(e8?>m ?T4 ?INym`A`YRA;*`?6w?U`?]?Q@)FU`;1A8ZHE H~@?K#?K7?GĀ?V9 ?P1`@ @W7E?Kx`?O[` 7p9@C?, ?R?d~?5 ?Jj?@@,@9f`?8`?P?I /`?$1CsW}Y/< 8NG?Vk?a?Qb`6|V,?bO ?vY=<?V`?6`C@?J1`?Z?. Q `BT`?C¡ ?As>@F !4??=Q9 PbLGs ?')#?1q`>`? x`?O)`?V?b`?a5 ?R"~`?UEs`?a(?]b?R ?1g 7`? 2?<yw` ?10 ܪ A}q9pߠ?7a7`?H*?N?Yg?OK`@@?T,j`?BI]JT?1q@?QP2CSM`?)@`caSE`?N`?;U2`Bm=a8>>?R:?WA`?5HkGg`?.:?:} ?@=?=,`?0Ģ@2@r8R`>БA G-?D+$ ?D8?`?* ?P?=`?>?Cْ ?3 `?4\ ?&`?2D?Fw? >@?V?S]?* ?JE?Kg `>?F}?Z,@?P ?.r?6C`?7>Ā?<[@?U`?M3 ,9 ?3MΤ^ S??t?W?L]?(i Z>wJkeϼR`?R +]TIEI?B `G`>B?G?0[AjR<* ˍ4R@] Q:?9I? Ri:U\@`z @ ?E?J'?` ?f@?\>o?Q7W?=`:`0Ģ@9&`[_@^_LB`AQ@WAVp`Rx@(oj?WG?_?Xw?\l?U`Р?(?Q,?9M?>7?cLj?cm` PV#xB[=@H ?G E?3 `4C[Hs6Pw@?YD?ZY,k`Bc`?J ?D* D?X?^?LG`)N@? f?A 6]6@?R?X?P?a2>`?bH?F?-?Bw?5=o  ?O?HW ?=*9?T?UPH?Pg?]MF?^?S@?W?[4?OG ?/8@5 @MZAY ?S^?c2?LTL!`?JO?I@͎@M@>{?DP@q`F @2&`?Q4@hW a ?@l?CIyˠJ%ӏ3-@61@?>?Po=`??e7Y,@k@Q)R`X&YY3 `?V@?I@Q^]c`Z\= G Xw%|?T^?V@?Spl*Dr@`$V/" `R,`c1U[}X@IA@P` R 0`+`?D?T@?^Ԏ?XR ?< ?! 5?/ I??G@?hB?b !M`RHB+`E`H@1\@#_0C 4iC<͠?*?W~?Er@TU3` m ?c5?_>@ ?W[{?b?W ?e?@?W?@?58`> ?M?UF?E?W3U@?Z?6`ӏ?6 ?@=?D?4;.O^`4=~X`3rU`?93 ?:'?#?J+?\BB?aaf?[+@?GF?EC?J"BY`tQ?RJ?[{?NFUAi ?Y@?b?P(/S_9;U u`>} ?. ?]*9?26 `_\d@?AI@?]?Q#`?9?LM ?R)?AX?!X ?,?!|* )5 AÊ`@}B?x@?')?%!?0)V0 \ PtV?&gh@?]^Uf$ U8>?M? `(~@?4z?P-_WmS?;@?c?X;?0k5? &`?Sd`?Q&@>|=I`?GK? D>@?C:A?N %1NH?5 ?@8o`?F,?G?E? ?TQ`?X@?1wR$UC7'z8IMD$ώ`?L3`?>>@?.?LŠH`?y?P`?8 GLu=@[?>a6`?Xq?N׾*h" ; `OTw#e?E"fFZX.D?Ke?X ?L[@?8 ?S@?^@?JYD6M= ? `?G[?>?S<*`?RDD? REV G8n`Q홠Wd 6 ?P? \6Q?`?B\| @P?&@?R?À?MN?at֠?a?U9?Sj?[$ ?O?@ĀDPlFRa@X MdHk@Q{ >$TyN"€Ru ?1:@?Lz-t& C.Ȁ CKG [KB ?:?@?&,?G?G?E?G9-1߀aM`[? ?F/S?.J0Q5: ?*]#ALpOO5@?$C?Az`?J?>c h-_ m  ? ] AՀ?#F?Oۿ'ے@R|?Ld@?e@?O`Q6>?N:?JDr@?I-T|QN6y@ ?H-$@?P1l9!U`MHM!@XU,$?M~X`?N?=5?K`?I@ Ӏ?IN@ 9?I?3`P+ `C|;`F?B(:?U_?Gi?E4`?=H:ȀD(1` ?7 ?Q홠?N`?5 l`JP ?89 ?`?e)i ?Z9`?Ek ?P?R9o`?0V?<[@?EC`F@?EUa?9{I7C !;a@G^D`@5: ?3F?004?Ks ! `TU`?EI?PQI?E?Pa8@?TZL?I@?Y`"N^ Q@?9f`?0Ģ@55??:;@TXc LBc`?V ?1ok?FU`?Q@? f[\ 0.?YQ`R|@-@x` 5F|?]?K ?[L?G*i@Zc d=MFq>t Ws L[?GsB `Y?9m ]j [N$?YA ?b?W}?6@FTJZ0 0O``?Au@?Y(?D$."?&|4GL>@+q<??ɠ?N?H6@?2@?>Ġ@9?;W?QP??ͺ?NT?c;@?\e?9B?F/S?U?M3d~?@`?we@?CQ2 ?Q+?!/JTD* ?@m +`??=K] ?IJ@ VXqT@Tq?0x)`?:5&GCˍ?B?Cs8/ Ko0+?R?]??S ?9 ?=HЀ?F'@?2}`?b?<Ih*@b{B?2?7ki?[d}?Z@?m 6|?J ?X^? 9_a@Nw>o@JE9W?'Q??.`?Rk?H\ RcI`ŀSμ?A@kjRV???C.Ȁ2 ?w`*F=)?;?5S@BYaV?`T@RrWtUK?6@&'Р?L?1g 5?> ,Lt=?2J @J]LD@I;W?/?RB[`?K?X ]?dP@?W ?/ͺ?Tt@?[#?O41?C?Dπ?AxW?BwY? ?Vq?K6=U`?<* ?U>Y4NS1@B 9O`*:@KC,;>9 ?1\?D?53_##P?%0k@Kq<@`//$;?@G?B6 ATOF+ F ?@G?831@?F5@?P@BH?PB?a`r ?`ޠ?S0?B 0`?G`?Kr?78?5@?JRw`9ue%`cZI4`D@`?C?M ?9@q?&E?0B? @qG SM@C8:*R vO855`Vl`Y# ?Ge ?P]Rc`V1@IyˠQ@ `?Ub?L/$`?Br?Pz ?M?]?f+`?M@Z* _3@Rc`,k`;6\@XB^T T5; 0a8@?QK?ae?KZ ?=bN ?L@2C `?S?@E. ^/`car LZz?N"?L@B#!7?M?9IT ] A'@5a:<̠?:y ?Z@?bsm ?[U2`?@\ ?0 ?K?H4M12>`?'F>Pv@GZJJKc7U^MRø=A*?%?GU?7O@^ZN`"f`?P?`HS`9]@KXV`SWQ?F?>r U`P) f:} 36?> ?O?T@?9NJ@[?U`?fS ?B X)Q`P+ ` R ?0JG@0Ǡ?*?F,`?X.j?;@?@?3wn?8K?a;*`?j`?Y{?@>(~@`S+ ?Wy ?Fbd `?m ?`@?N\@VX??0=[i Z?Uڒ@?b@?J?V5@?_g!?$`?0?W_?E``?@L?W%P ?A( NF?HS`?S`H?)g`?K ?Sg ?!4@P^`KV(?B`?Bsm @LI uG#M@Rπ >A`?[o@?/ \}?,?T1Qq@]6UU[ `JUN ?4`0@U0@G7(??F`Gd'Wv ?N`?CZPN@Ag ?U.@?]v?=lEq #`}`?P ?LاPaۀ^@0ۓ@?V?Vo ?=l`?Q?Z .m AM`?R?J0?)d ?Q<?@`w?Qd?P) ?-`?S? ?_$ڀ?9@IVf"ab[Wi*N?տ@?JA?IMPr@ZNtT?C-@?e|?W$Wh97d ?PĢ@AO~D#~`XrPs@?#jHW ]ARYL`-i8>B^? R?.$ Ӡ?B`?Y?Qx7_G@djM?E:Ooi??S0?D⬠?&@?K1?Q f?M*9?M `?}B;.?@?:@4vV?E+R?ZB?Tn ?P2?Spl?Yzn?UqlMF?]g?Y΍@PTyc]^O^`=&?@p@7GT)7UA/?P Ӏ?dT?V P5`]9 ?Sa?`^ ?A5 U '@?@yoSUSI`?q<?@`?F`?2h`73U@?3 ?N?A?H}p?Z ?Y`> S6 ?RѾ?Z1T?LY31F???c q?Yb`u@? , 8[`?O"?@$D?8[@?I{?& ?;=@?z4>B`?G?Hs=?!ͼ?R}`?^s  `W~XH@VI"f`?:e?Rӧ`?T UR2 Y[:<̠?'Q?`?c|6?);M?=X? ?#t?40e $` 9I`P@U@\Z tK?+ ?)1/#??;.?/2@Y1ig\(!2@?Y?\,`?\Y3>V;o?)?Wh?VE?Tc۠?Da@0`b 7O)`"kǀ?T?]4l?Vm$?3e?;?DP@?R ?ag?QI/Q/YРPW@9'LQ W'ܠ7 ^3?RO@?bY?S@Em V*0k?NO#]y`?J?YGW Dg @#F?9 ?F`?Q\?Xi?B 0`@M?,?V0 ?O4PCDbR?C`?L/@?$`2h`?V0?gH`?D`U~ ?6gh@?3-@O ?JVJ@?TK}`8]?MN?/ ?1NH?'$ =:[c`@yo>GY4?&`R1&X;̀M9 ?Ph`?CAT@.m ?8,?7dE /@?"B?Y(9?F02@?& ?;ύ`?Eӏ?>ۑ@?!Ê`0ŀU! `T&@Oy aQ?&?"Wc(ߓ0@@QAS ?Jˌ?/*SE`C(>0`:E`?F??e=| ?^H O@[`?G`?b?R~?Aa`?W?WE@?)Sd`Sْ 2\| ?=+?H?AHW Y6t'?N?RJ@?J1`% Nҥ`E>=C8J@ZW{`?3@?I%?%Y4?LBB?IР?/q<\`5BC% V N6?_)P`?b?3[d` d?F6`?N}@?Hl`>d~>Ζ ?F3,^|Y %}?O_`?&|Z!e[)9)Y?E u?3L6%!?;`?Q-@R-_{?Jf?QD`ED@?D?I WCK?NDt@K?XQw@?\!Fy@ ?M0^?!B@`X@U@?Bo`?*N_ZxEASa?A?EJrPJG@*w?'?<?& ?7B ?B ?A:@.&`\I`SF?9l={Sf9?:?QKv<?:?@>K8 T[?C{A`?]w?We@?S4@?:} Hae(jQ?V?W7(Av?U ?c?K?F?dk?a4@7\@Q?2?Qm?73U@1%!I! Y$C}?F<??È`Ԁ ?05?Gs ?74% F!NS\`B`?Yt ?``?6B2?/`?J;?F+?2 ?/-Z?*?YD ?V ??7)?V?` k`?Z})?6<^L?I)?>JE@RpQX?D?b;@?\)h H \RH@?ZS?Y:?9i: 0ɠ-1߀T Q'i?Ly?AS`O,ԠSɣ?1?U)i Ob P6 ?c `?fy`>d~;뗀?P?/>@]`=%  LkV#8@>Y/؀MQP`Bb?4@4`E~*C R-SASa?M `?,@Q[8 t`?O?Vb@?@EӏE?G =@C?K?E?e7*?N ?UB T@?\lQ?[?K?s@HSb`J)`?*`?D/?3o ??9 ?E@?<?Xw?c??t R̤?>x ?b`?[s ?$;3X?#j0RC5'?28@'`?BJ@?U7?^k?Z?F`?;44+?Th?\?F*:`/1>@?Bt?S ^?O7U?QA?Sm<@?Oq?KI?;'P@?Ê`?> ?R?[?\m?K?JA?a?_?GF?QW4?d ?h;)`?[MK] ]y`? =?`g?]l`?EN?`? ?94?L ?Lʢ6~Y@VOȡFpT@DS ?L`?\/@?+0=?[?\U =ZK?,3tT0=@QSa?=bN ?GiA?L[@?2_WYQR|Y W;"7 ?; S{A`Yܒ`?6K^ ?<^LN`A@?M?Sl ?%;݀?2d!?/I(9-?G-7VB`?'s ?G-?P?B4`@]e) ?H@SKEC`L`W'ܠ6@?H ?1KH9M?7@?b?Xu@V`Q9 ?b?d?@D?B$g?S?:<@?I/?9?-#@D??0k?<?Q֨?Y]?Py?G`?D2BFc\?C?Z ?L?-$@RL ?K`>9 ?2?L`?L?3?/`?J`?Wq@?Y?VǢ?Ss?O`?S?Z ?[4@?V5?O8?[@?a_?W@?7)G=Q`?#`}`?QS ?785@2)?Q?SC-?]m?Ot`@>rNȠV`@W!}@ELu?Q2?^ ?Q?ED?FJzFNUɀRB[`S\`?N ?^Tw?Sy4 ?YA@?IH`8o`b REH`?J;?\@Cfd Q`à?G ?E?6Ź?D ?6ܪ JUyF@A ?S_?Hͻ?V?9d~?<@?5??;?Cԧ?- N_TH?.m 2p;?4?=693 U5Ty`?C?c_?QPUB L?cT@?M^`SO?Q5 ?Wv@?1?Kx@?K As>K(:jG_@@> .@3N?03V@?P<=)`΂SF`?A\@?Q I`^]j@>s@OL8l` EQ82=`?InS ?Z`?]?V.?IH?E ?>ɹ`'K?>|?Ps@?2=`M% E[@?~@>G?+`?:`1+`=A*! f!4@?E@?VHр?I!?L?Rf`,p W2aM`cS2Tր?c' ?^ ?A( ?Sl ?\?NJE@<T<Qz`Q?EC?OR`?5@5! f?R1`?K2T6YA?:?W`?dq?e u?@`@`3`?*@?Xq?Q?F ?@`$)H[`J<̠C_7 ?M ?TJ?K$ ??L?;q<?2{?5BC?/NF:@2@r?D^`?2?3`B NO^`>=?Bm>!|@Va@Yo`S?O?T`?DZL?j?%?OxU@a=Sn?:"?0TyP Q~ ?7?H90(?;E 0ɠ@uG.< XW PmT?>A`QN@d2Swn?Dt@?M \?QMBq ?E5`?P>RI̤ }Ni@NTw??E? ?K& ?Dԧ?6@?Eՠ?@8 *c ?I@?J 70ȠUI5 ?+j?i:??GY?N>?T ?Tw?2x@?3(i ?H`?6|?O ?]DZ?I  fG5`[K?WƊ?QcP@?2M0?W{`?b?\4?A9B Z@fQ`NpVp`GD@?@o=`?N р??@>\?I-R?a9 ?c S?Yک?IB&`\JSc ?V?9ѽ?7ki?C΀?Pـ?Pa8@?,y/`/#F6`H@?נh?12>`?Beh ?4,j`?P 0 ?U: ?]?M ?EPWWq4x@븜@QXzU LF;$ 03V@2"7 >s@6]69`R @VBE 1W:_@E\`?3ec ?0k@?J?@I?9 ?0e I4OAc`XbKL ?I6>?P?D@?w`?Pv@?Q?Tp?K~`?X-`?\ ?/`7 ?@`?EUa?G[6M5Lu?Dt?QqU@?7s@?8@?K??> &'"Wc?e@?S`?,``?O"?W?`Gi ?^?AC? ?+R:c >\?TI?Tm?R*$?;;RJ@?,ԠAKW?P@?>?D??>@> ?2`ab P=Q3R;X?:J>4?AS`?WmS?N`?8?Q0 ?LM /Q`?L?=HЀC@V`Q`As>CH ?4?V?Fc` G[,yV6V``R@R`ItHR %^M?D`?QJu?5'?R?^ۑ@?P,S?B?3:A5 1 3I`;U2`?7?PԐ?P?B%]`4E x)`Du@;F?;PDƢ`a@Q?C2`"@SB6%!?D^`?3:A?[d`??<`?K@?3@?Ā?)J@@RՐ+~`?T ?Um ?2r99 =C`Lʼn5?_e?hT?Rn@?"M0?X?^?>J"H?C ?S ?8ـ?4ώ`?@G&>@ p?D6?MD@?S`?W?U6(?M{?1%?9?N ?=`g`5LuP 0`HG ?B;?T`?J@D"8 Z*>}@?(PBUcgKPe ;ύ`?0\ ? ?E=ܩ ?:?K7?JХ ?R ?RT`?<`?9f`?SP?P.?%I?0m ?0@6ܪ t ?@Z?CF`?A?2 MCޫ@U& A=?M@?DvV?1-%@?H ?)i:B `I+T>UPI?2|?Z=o?L`Io`?K?;?7?<2@?CO?Q@?L4=?E?O&?N 6?HK>`QQ@JO)?Zk?LsUUO`0^=א?P-?XFY43?>Y?DW?K.?Oͺ?+!@E:;)@? f8TҾTπB@:@NYE:?So?Yeg Gɺ`X֧7m J1T_Z`MgC F =d?LM ?[Z?9BOÈ`?d?`?W<@D`3 ?SЀ?L>o?' @?֠?+?3Q2 62={#7?Vv?J<̠Q(@OT_=&*:?8@YU?L:?VJ`?JZ???&`GZI_?O3?b 0`?KZKHO $?U] ?V3 g Uq \oV_`4z.US\@E= ?#_Z9 u8>1! IU`"?R@?%C B6 WW<@@LS}*WZ?2_%! `?A3?J6?*O?J@?a`?Vr=I]@SC 2>`?m ?(i <KKOے@?]O/?_~ (i MQ?+?H=?Q?Xu@?X@?V/S?\d@?Z?:#O0^tFbPkj?8 e?T\5?3 `D3:w"/ȡSc 4\ ?FC`?RJ@?MH?:Dr@?BnTM% @Ty?Q?Fɋ8ʠ?%O?COGUk '@&l`V B?P?L?5 ?R`?X^Se7@?@ ?AX ?>.; 59B?P?FF_ Ki^ fD J)`?3 @>?5(?^z?_ؐ ?W E?GZ!v?B1`?[?Yo`rT`S<7}?Q?MF0 UgU?ZˌS6n P)$ZDU3`?46Pk@V`?> @?SJ/?5? ?CJҠ?F:`K2S`?5@?JV`dǗ P_?R* ?8w?Y%?R@KEF?[|?V^?M ?U;A ?N0Ǡ4`SWY!7 T@>8m`2;X@;*h" 4t ?K??W?YH?N8m`& Jt>:U?8B?Lg8?GP2i:WˣL `*@P R?3F`?PJ?8Xy""?(@?<* ?cg?MYb ?B&`?0x)`?G E?G`?=0@?P6?WҦ`?A}q:?Y >?G_?R%?Rb8`?m +?SU?F J1TN,V]A|*?;?9x`?C¡ ?BE?Du`?JcE?A4?`N@?b?P':A)R`I?`?@`INJbZcK`@YRUJ@Q?8Xy?X. F^`\nހ?&%!?L3`<G`K[ ?CZ?YV?.< Q@?19 ?Ti?9 T a4,M?`y ?L? ^?[j:?T`??B ?a@?TY?%! `?/@?@?A\M? 0ɠHO`8D`""?5 ?U?Q%ӏE4>F F`$ Ӡ?>?30Ns@a8Wl?Mm?b?[?N ?U0k?Y@?QU@?E5?6t'?@`?[ ?^U?4NhLv ?Z<̠?b[`?A`IIMiFy@ 4πF1N,?Q:@?QD4OoIP-1`?[5?d@?\6 ?V?Vr?Og@?C} ?;V`?)?0t ?AJu?DE?S `?\i ?SAC?Q?_?OPQg#<BC#5=*L9Q( #Q2 ?GPAs>RL?:D?X?WU?J,@p;)?-q?D.G+a*@PU?+MBbDP@&wD:o?1I/?QxIS`[!?}B?H }BCU?-i?Q?@@?+?T`?]{?Nɹ`0+N!|@?(?U6(?+)F`?(?02}?S`?`&`?F >@1ͼ?? s`?SQ2 ?Te??y ? ?/9 ?3@?As>?HW3 JOVbO TT"3 ?H?E:4% WX`K?Nb|?V} ?LC?Y#?gC`?d| ?R4?,EPe ?`?Q ^?G?%?DW?i?d`$)Uo*S?E ?> 5`??4.?B 0`?FXE, QAX Z D?T?`A`?ZP?UM ?L?9u?(ʠ,p$@~?1I@?Q?D"8 ?A?V ?W=?U?aE?SlM]5Pg>%1 L 5 @?9nS $'Q@8NG?W @?a?87V*@?H?Ba@?;?U?Q>@8g@=H?GC?<H?@?Vi?C<]?3c ? }>q`Q`U|?O2@?R?> JG@?)@?G@?Ws@?b@?`n@?Pv@?)6>B\| @? `4vVF 8[C`F ?At?[?R@ 8z?A?W?S? 9 ??B?@`'GMp0$?Cy"`M??Ā?3*??K`?*@?BN0!~@?R" ?GQ1! !q`m ?,`?Z?YՏ3o C ?'1b4G?R{?\B`?E/?B@?aFQ@?a`?? ?B!@?W`?8t 2?Y;W?` ?2RI=v?Bb?=bN F ?S4?8KEp%? ?Pm?I?(-$@J@1l@?2 v?P?*`K~`3F`?R ?c@?e?W ?)d :URKG`VTJI\{ `?H e?PmT?/l`I?`D4 ?Q?a `?Nc 3h# ?7a7`?T??2@Ts _TF8??M?T"@?BO`?%D@?L``?Vj?E ?jQ>(`?'L?Gd?;o?1 ?s V$~cBRH?@ ?Hk@?O ?]G ?XN& PE@'@?X?a2>`?C1CF 95 ?: ?' +l#?C7a7`AY ?Pb?U9\B?T ?^.@?>|_?Q, ?UG\?/ͺ?#s?@3/*CK?`5h Z0Xr?7@3(i L VR`H?Vz?] .@=4l?%0k.?(?Y7?U?)g `?6v?=`< ?1N?R ?)_J?;?['P@?O>@?9?Ds 2Wq@Ce?@^;}`Wԏ1ok?W?U@?F6?WMv?X6`?~@?H>, K4 ""?R|Y ?b.H?`]?3NLM@R3 UK `?;E?Y?\C?U?;x@G)#?E?`t?_@?<?(`?> Y, bHE[?Y`?`C ?W)#?N,?=l,#.@?B;X?H ?2nT?B?E6gh@Aͼ?.`- VqPq>@?+e@?6`?PK?L 4"8 ?տ@?C*?F!Ê`U?@U]/2@?BS = RKG`2`55Hf ?C`?\t?Na6`?;CZ?S:?THt,@S9J@?:J? )5q &@6KSWVG["@S" ? Ģ@?FPtVI6>?Gp?HJUM+t), ?%Ơ@ҧ`7?FEЀH>@?+-?B`?Br>P O@@ҧ`?@ŀ?*]?U@?9)JwZr2?HG y?@N7.^?J}?6M(?Q@?Wv?>?3?Z?O*4π{?B6??. LR Ԁ?5ӏ V?Ly?S6>>Ơ?PJ >Nc?D`?`MȀ?X?8 t`?Z4@?Y?K?E-W L?A ?D@?@?3N?0`C_"3 ?X@?Z@?0t H?<? J>KD,#??/?)IEvHp@>GVuDa@?R,?]@?DRz?; ?0p8 ?41?W?Y-?K{n?/Q`?94QPe L?9g`?N|.S'"Au@9bZVZ@?+.?-~X`)Р?I?T ?As>>}" 4LX`J7?8$?Jx?IJ@2'@P`?M?`?)1%>?]?X?Bc?@t?&`?.!|@?7QOxUQz`oRkǀa1;?P?FΥ?E9E CQ,U@6`!SaT|>J?R?32`Rsm Ttm@PD{oFDTY@>x'`?UM ?^X?L?&@?M?D[`d)?"?G9O K⫠?Jn ?\$ ?KVxE]`7?I@?B?<?E4 ?P?CjG2>)"?: ]>[@DmjC.ȀEHG]d?;?`XL`?_u@?A?8 t`?T4?M `70ȠGZCh# .< ?M ?82=`QF?Eq Ttm@?;>A`?cl?d ?U ?>E?6 ?2̤?"'@?;?&,?(2=`@`W R1&?. ?D7?=S?W?a+?BhQ-`8É`>[@V(Q`UI`?@Ft`?Rr&?SǺ@?YS ?C#P&{?KV`?Q1NHP H{?O9 ?a+;?ckR?JC,6S?X@?dP@?3$ԧ?Y?V^?Ks ?U* @?Q{?S ?RA@ER@I(9?A}qQgɠV?>(?I`?.ɹ`Sm``S`[@U@EXDL \1Wx(`<Y"}`dgSF?}BHK8 ?.Ġ@?XG ?]N?MC`5[@? ]?:@\@gw@}B?R@?P8?V ?]?9$W`?E ?Iv?6`?V<*N?^@?V3&6d>p'Q@8@? 8É`E:H !`?Bx@?8M:?'p?_}o?`F?G?3ˍki0m ?Bg?>@F`>, ?^`C`?F}?TY`?E!?0 @'W J`E>L Cc OLX"N^A S,?>`?TH ?Pf?Q?T- ?7-#@?Lp ?U& ?M L`3_?P1l?U. :E`?YL?[}X@?&SoA%n?S?[(?GA6t'?/?I5CO?3-@? T^ рRk$`I`7B ?"̤AI`*NPc@[1}?U`?.c R.De??NF?F?P@?S#?#`}`:?2@#-@QÊ`;?GO_`?H``[d`$i?W`?f`?_*?=FD?!q@???D>B`9:T ?1??`mT?LHޠE\`@F}?/b ?UZ{?S'"?= $3 ;ZKNc1D`?^`?`_?2T4,j`7F]6>9?4A?`?\G`?=v?@pJ2`W'?8KGR A`1@9f`I&QD`3j?KF?S ?LT?*<KeFHр?A9 ?`$?cQ?]=X?J =G`?0e ?5k 2?D G ?X`?>@LG[?"6U@VZPQRI]DVy0 @ Ԁ?2}`?9@?`?D??a>@?_K`?WA?Y@?Hf~?Y[:ne8`NO^`?@?`'?[@?:h" ?26 ?Fv?7נ?G@K p?Ab?C@?T@?aT?`]e?QR?3V?A&@?Th?F #?Ld@?ZH?1okA+`@.= S{A`?-,`?a@?d?Zx?Md?I:@?I[4-1߀??Ue?\7 T,j`DA3,G`I1N?P?T?P@Pc!Z?<9 ?[`?F`2f`HuLz@@Og@WL?<?d9)@?]~ K M{L4=5V ?Q?^l?V@?V@?^N ?W `?N<@ ?1:@KD5p%?W`?@8a``?2 v?Cii`14@@5XdG.@F0?XJt?OjP?#?M?R2l- X4&Q#?E, WMv5v?Tn ?UT?Kn?KLF`?SՀ?W`?A:`?K?^B`?:վ@Dg @%I, .@GɠM@Fɋ?ki?E0k?RN?^b|?=LC?P`?Q`à?IM;RTArAz`Sf#`PE`?Yq?N"SQ2 ]oLz@?+{n?F?R?I /`LM U G?R(?Y+i`?<WE?Ry̠.i@aNn?R?Xͻ?U?K>A`I W?H*?f?XR`3ER@?:#O;FX `GV% *0 ?:? tJoZXؑU+U1Sa?Qj?CXIR\?MKD8?2Ѡ?/ `tKS7@?CЦ ?[?0 G,?"@?N?U?\?_K?Zih`?KZ?EH`?TUր?AM@Q Q{= JJM`&@??Xx?Bנ:Q1 ?4?FL`?G3U@?Rؠ?@>SDs@X$=1I/H% @?C?4GXm 2)?`?7}A&@?8@?S!f?N?2w`?2'y PBQ2`3?7)#?z `?X'?U8Q5 I ? ?LB`.RDD?1*eb _ad?9?:[c`L [WV`3Q2 ?)`?24Z|e^v G 7?9?-SQE5?>:2`F?F8??P ?G@?O?9!@ʠ? R ?^x ?d"8 ?NCˍ9 ?6bO ?A?@V?j;o0&`? >A`#FHрM5I`"M0QG P8o`?49)@Pv@_ faGO F@m%? >4?P?K26 0z ?/È`?=`?]9 ?f[L?W>b >d~?A H@?Ws?`R>?Z/ ?R?;,i`? ?Pb?U?EG\?C`#(i ]MFR ?Q`?Yx?2NR* A`7נ"5?Fc`?C@IU@#x?E]`?2 ?3?P?SkR?L?!ͼU1X1@$`? R@C<7>}?0?4\ x`D˻@.`@S?&@?G'ܠ6QP2S)`B;@?3@G`W?>m ?DNW!}@O)?A\?FmǠ?FO!NHX;̀UH>? &bO C݀AXzD,j`9?`.x'`I2k>"DC>}?N6 R^5D@J.ǀCU?E?NK?ThQ?]c`?[@?Y:?Q5 ??)`?RO@?Zf8?D& F'fP4>@?F@?Y&?Y(?[H?94a@X ?W8n`?`6׀?A25 rT`?-FD h.s@?Kc7?[ύ`?Q2?=`?SQ@?\@?I, ? ?J(h ?U`7@?QՀ?B;XG We Al@>E, >^D[>O^`?>_?.n%?+΀?-7$ &@RؠGynB|L\`CZ>5?$`Nɹ`_33wn?=62h`?1g ?H?<:?J G`N`B F@?$`?R?V[?TM ?8ͻ>E Kx`?oi;P `?No;`J+`3PLG`>?L[@?HC_:A?Q`?`@?^ ?Rh?P?Yl?\X?VЎ`?P1?; $C?:Dr@?@t +HsH 1?4?7F?EЀ?K7?0=Ÿ0c?+Hs>ה2P@Ta@6 ?0V?F+?S`?WY?Yr%?QP?9?`?J?HR @5@?HY ?K?T˻?Y ?HB?Gd ?9x`V X`?*@?I`?Gɺ`?U?]%?[@?QX?B@?T?c{A`?a![ ?T`?[?bS ?RH(U@(2=`-U`?I%?Q%?O T gH@?P5??4_e?-y?@.!|@V-j;݀?S?VJ?Kɀ;Ep%=l`- 1M`IHTW?)?XZxSj SsUn'Ā XyRk@?J?\`?PZ)d H35z?;{n?Gb}?5?wMa9?5- ?D`?A `8?(e8?DZL?F'?Q4@?P ?H?P?Jr?}B<L4`UN"5?E]`?PԀ?1( H\@M?S@?Qp ?F?L?b ?]k: ?UŊ?E6 Q0 Tq *Io`D9 A( ?3%܀?YI\?_ ?] ?W ?Ae9?D?Xـ?S?@t?T?a{ ?TpJD$O|(Mr?'B?E5?Y 1?I@?[?U^?5|?J@?`?U `>}?Fc?Nɹ`AC\?F5@s@9# `A`BQ?D`?IJ@E8`Aȣ?Ma?W|`?7`Xcʘ`?+?W?H?JJ14@`5?G ?U5`?R,? 0ɠA-%@E?-`?M]5?!X S8WU`?1?UK?jOt`Da@P'ݠY 2?D3 5D@?T}`?[p?ED@= 5- ?H3?Wq%?JL.TwE@A[@.;?0\ ?KZ ?"NjRK..ɹ`L=)E`?I?[ ?_D`?S_7 B X`Sb CV?`?;?;F?BB")X*`Z">d~?X4@?X|?Kٿ?UQ?ZZ?C#"kǀM b `]=@? d?6@%Y4%.Ġ@?h?B?I?SZ?Lz@D.N@?'B?66?%v?RX@?Yh?<@@DQBE?ހ?R8@?O`?<?<?WX`?SĊ=HX&'?`QI?Z@;q<C2`?@0@?GZ>%T3E?GQ ?>pHC C ?84{I?#?V ?O2<`?H@?XW?U?H ?S*?P"Ā?B ?Zd?c6?Ux ?;?/=6S E?G?2@Yb`TP@?!ͼLԠ^@&`?Nn?U?P<@9HX R4?#-@?W9?U@?0B?A?S?De?*:@?M" ?UlR?KHs?2?1@?1ok$DNXW֠a~Hl`?N@?6@2J?C?Qy ?C@?(e8?A?Y(?SQϦ [G-@??O ?L?U+?K`75<,@z ?&`?W@ ?U+R?D`?Q5n ?W?2"W·]#=?S ?T GU`=/R?Q@?'ے@H"S`?S?FcdDQ`T& A?9=`3]C<>rT`IS c@a`.T?9}NP N?K\ ?NY;=@8~@?:@?J@?\?`@?ˍX KZ 6,G0Ƞ?:(h ?Z'?3`T_eG8? ;x@R2lIѽ? ?,=)??/-`?+?\]?Z?D?Z8V?`O?=??;ZK;t@] Yo D``Zt=R< ?T@?KS@Rw`:2`( ??q?K2?:c ?#?3?P?R3?3i?D[?Y~?R` ?EM ?V"?\ .@?KI(?J?X?PMwHi [ ?YgP?A@?;[ ?R%?EV ?Y?9?\Y3?][:[c`R@?Kg `?]a?Sm`?O?@@?:?LH?J܀B6?@`?IX@?RM ?Q ?U!`?R@`?0L0@?.7?@?<?R-?K QZd@Jw?Sޫ@?DR@[o P3`9B6J`?=o ?G5"Y?)?Ke@?O]?Xk?`?QM`(~@&v? t+`6 ?5@?I`?'`BtE4.?>\@?^0$?bօ?@c%9`Z,=א?# `?Wt?Ap NuM`O Z``>`Ts'>:>3T@H@P~?ͺ?MD?OR`?.n?T@?[v!M`Jy ?X!ͼSْ ]]`Y~S{@\QU?QZ?^c?=D*%ۀA! TJ^F?Fw?X|?S@?a7`? ??<͠տ@PS ?FO?bu?YM?,?7Ā?Y&?b|@?ZP@WzE& ?LY3?C6*:.!|@]-1S`=HЀ?)TՀ?Q?0z?È`?E9W?R 0`?4l$`?)?H`?I?H6170Ƞ>d~)?2J?O|(?JE`?<`?>?M?A ;3?P`?hɀ?V)E-4@Tp`U>pT$!) u?[ @?ZZ ?7-?> @?LԠ?N`?]x?d?`p@?`V`?]?<`>נ?Zw?aS ?'8n`T`Jc '3U@?%v?G@?UPH?WXK`?m [M?4P@M'@X%Ơ]IAq?`PYH\ʢK??9C?=g?5v? k@F0Fz&*:%?A?R,X N|4i?' @Q]c+a;{TO ?+>A`?X ?Wנ?I/@9 SjYGsKK ?=`?V@?C,A`52@@;?~@PQY4_e?TG.@?H4\ ?+~`?L?3#P?Ty?24C[II/È`? `?,?'}AXzAP ?6*:@P`?|*?Gb}>+4 2)6gh@?)*JUT\5Hu3-@?@0ɠ(@YXO-?]? @?@3ZA6@7m Kn? G[?d ;?^ @ʠO)P`O$@TՀ9pߠF1?y?@?V#8@?E`2@`?.5? k@@U?#F?L@?Qi?\^?W@Du@R> ?R#Ġ?\dD`Z!e?DL ?6v?9?z?)x`5@?8 t`?JDP>aƀR4V@LTg @3?F|?@`7j@Q# 8]?EX?CF`?G?I.M\9V;` g`CP6@A SUN+?6`2`Zק_EZB`,+>A`?M `?U@?5gBHk@NS@Du`?Ii:?T& ?H`?AD , D ?<5?Ul`?52@5`?%-SD ?@v ?F'`PQ9@?Mw?V@?6%!3#(a`?L5?U=28@Lʼn?O``?S =M?Rӧ`?I P 2x@?:"?UF?5#WDWJ"s ?Q$`?@lLTAg :N р1$6C?7?;g `I-R=]? [̤?.O^`!?,?H. !q`N C ^@z *`(@3@?LM 4MH@???B <E9 -@ ?,?Pc@?N`BYS /@ANHM!Y'Eq?9N@??2?@Q6^?,f 5/.:T Yn@?:Ȁ?O8C<NcDU3`Q4'P,@J͠B,`?0`?YHMC6B{H?<?R'8%~W:WEϼ? e@4@H 6 ?<* ?MŸ?Nz?נN7' ?S?J?>ɹ`?TG?P<@?6q?W?\@?X=?X[?^C?PV?)d $i?P?XQƺ dez?W`?t0=?H?RF.@?Nh?J ?T?[??Ls?"kǀ?M ?P6 ?=]?Nq?R/@?Isl@?J|A^ . ?S?Z ?H ?YD?`-" \K?P|`?`'?RKG`*rT`?R oax\u@?B1 'Q@Ml`O> ?F"rSL- 2 9`?<=)?[_?Q@ <? @?1Xz= JF N!|@S 4'Q@?M[?F'@1%v?$G@`Q&@KEM =?3x?A ?')?B 0`?C?Z >nQ\SP=?Ed@?Zq??S_>o?7Y?`L^H1?]?Q3`}`Lg8NҀ?4@?S#lUMF`?%?,R@C'"VD[P@ ?B@?; ElRX2R3=!@?EN ?by@?_hg`?B?R`?`Z?Ul`?Wyn?`C ?Tc?6q2%}?P5?RZSf?`4`?S ?&/S<`E?A6@?RO?Q|*?BT`?9+?5?M?_B ?\@?IE ?D@?Ai ?A?G7(Hg@`Ӝ k@?\@?N?G~?WƊ?Bo`FO"Y?XJ?b ?R1@?Tt@?={\`W3`?Lg8?T Ӡ90`QT< ?0p?B/ dX'L?J1T?O3@?S@?b*?_ ?0e  `?G?HG? 4ހM{U: ]?Gj@?9Pv@?= ?68F?GiQ(@P;? ?E@ ?3]?U`?#6QE:?`?@?R/@?I?6 ?L?OL`?EGe] Tm?_\?`}?G)#?@C ?@?I?P3?i:F@v Ty??7UWj`SL 9?5&?F9 ?nXYbD/ ?9E ?G??Qs?P'ݠ?^?e>`?P+ `BI]C?%?Y0 ?W)BDA?WZ4?X$?>n?-o >̤P ?d~?Sk?WO_`?b S0 ?D1?R DR@Tf@>" JG@?*0 ?)!@G7DC?3?%+R?3L?W?ZG`?Cj?7K?Q` ?Tu?AO?&q?;?@k@?G7(?D?!?B?R:?-NK@RkǀR6T,`ZU@`HUxLk?K0<@?'-RM ,k`?4z?&q?H`?wD ?={?N< ?.ҀHB`w@Xz@@?A`?F}?82=`?YnS ?_`?P ?)?-#@FA*CJBpG@LW.>Z5V ?D` R@2sm ?Lnހ2pXZ܀V:`2D>`Fh?A` ?_4?Al@M@<?J(h ?_9 ?Td~0$?Dz`?_?Jc> ?E{?C7V$'Q@?P@ t?*X?C()\4?VM?V OU?0?(f Oͺ/؀?[s@?a3?U!`?Jv'@?6%!̤?:|?B3`MpS@>s@?D?Y@q)_\_ ??X@0.Y@HR ?4_e?7=@&`J1;g `;`??Q;̀?Qʍ?AD ?3ˍ?8ـ?300 @>נ?X?a`?U?'Q@?T @?V@j$@ZZ\]Zު@adt UV?G@C?T`?FӾ Q3>c ?Aq?BQ??P_}o ?Eg@A4@DZL+?^NPU[ ?1C?N͌@>RIA.kC@@ Ӏ<POXNGRUy/?F?>|84d~EsU?0R ?`?L>@BO@KD[>4Aq`SQ2?3CdK ?@QzA@% ?9, LRQ'i?G?5N?7V#?;Ԧ?T?G~@?-1߀?F D@BTր?Qؒ?T;HBEi`?P|`?@>SkRN(?PY`?b ?`Y?U&ܠ?2> ?Oݠ?M@BLi`K:n ?IWbDk`_cN@?)O`?a8?%m Z6,`?R)?Q@?$ON?`?F ?VpT@?J)1b%! `3`H2̤?U?]0@?D 5ب?<ا?a?YQ6`Y$fK VJ`Z^b(`>Ġ@?Yo`?^?c?\EAwSbf:e",C-@bJh!KM?(ML\`;-?N?UD@?M|@ɻ`[bV`TqYjK(?S`?AXz?A]D:oZĉM" ?>?P"`?G4?)? 6 Q_0Q?R{?R,?B'?z>F?LC??AQTG 5O0e?Vq?Q6`?.J$`?7d ?N!|@Ig7a7`7ki d??IJ@?]FD?I`4P@?E?A$9@F(?5?V]6?7 M?G@?<CC?=`?O?G @?014?1??]TI?SeIg`1`+?"?8C#S @?@9?[Ȋ9 U ?<?a$9@?]?F9:(K?C?5?A.k?X ?OI-5@# ?BI]?8*`J@?<?Uz?K#C? ?S[d`?es?^p;i6J`?A^@G{@S`FT6@@Y?V?Waڀ?Un<`?V S @PTJS;@b~BeP$ZLD@-A*??)`?Co ?INJ?26?K8 Xb ;cD@U=͠ ?Hy ?T?)!@Pv@#o ?JХ ?A@??~@?CRx`?+P#2`<%`IРK;EEM0 ? 5?a_}`?bX@?AP ?'?8>?P.= ?_2@?M?8 e?Q1@?X4&?W?H4@?,k`?>.; CЦ x@?(2=`?8"?SU?Pv@?]@?P`K?;W?L"e?P?>6,I`?O?R`.&`M ?73U@?T|?R ?KM>'?AX ?;R?F ?` ?Y z?6b?T{o?G?;ZK?XR?]?@8*I`?X?t?DԠ?Py ?@?+>A`?BM,`O8@?@"Ā/AP6`? >[@G?0h;KLFb;-%D@?([`?"u`?$1?)8D`2O`&`B6R ] ap`[@*TM A?B@?2@4 ?E?L@/D`? `?DL 5ƠGj#@%XEv@YI[b[W`?69 ?c?`^#@O$@5]`?F6`?\k ?X^?@Ty?GfP?S5@?Jw?? ?:?Br?Jّ > AC?0ɻ`?#@CR? )B;@? ?K"7 TJ?6@?S ` uPJ?EC?>@?I~?Js?8 e?$% AAя?N0?G?]?D??OA?W?2̤E?@`?]L`?[ ?BT*g`!6]67-Ul_A+`?N&`?]!@?e7?Z ?%&`?H[@ y?@?V8?Y ?'BBJ@O|(a`bqLs;5#yOC7?R'?I{%/?KY@?DRQQx@?`:PV|oG ?Dj ?V@?QK?4>@`?.?>@?( 'K1g 2NA P,@S&Q VUv+ ?;[ ?ED@?Xi?S(i 4_e?s@?L+jIkƀ?K?!~@? s`Al@@W >E, ?T۪?\D?@ Tݓa`V?2?Mא"r>:?D{o?AM@D`@@_?6?Gx ?8AA ;P?J?8-$@UT$!Z;K Nm ?Ơ?G2@\T.>a6`0տ@?J:@?3 D2?p?9?g ?CDs@?*I`O3@< ?0/l`(?8@?SrU`? R(?82=`?_@A?_b?R]@?؀ c4,j`CBX'hc`V ?B^?Z,?]TI?N "* ]#>JE@o?OĀ?R @?5 >cT`b bv@R2lCN8u?30?&C` ?O@A?VV֠?UO?`L?UtMUʣ*6"L@`TCMɊ @?8?-" ?.Ġ@?" ?3?Hy?C7?E?MTI?;7@ &`G1߀?RQ?Yx@?X|?P7)?+{n?D2?U5?BYl`?@?2E ?5?)\ x`?Fgh@?[?Vb?:/[KɀIX@>F8ZQ??t?-DL? >A`?P\ ?M>MLR@1?U&9?Oc`RS Y>d~?5M 6d?U(?ASd`P`?U!?a?; T& .i@?+C?8oj?F;S>[@/I-?P H 9f`?D? `Qͼ5w`?D?Fr?05IO`F@?;P?@?7?A@;,i`WQZ)?>`?M0 ?E9W0Hz`?L?SP?XE`?Y?V#`?50kBE 8ͻ?E>M=*9-Z?M?Q?!S`?3?X ?_b?Y(?>FE@BM0?75?GL?G2?A]?m9JRw`A}q?KW?S& ];y?4k?C)`?P @?Z;?P 9YEH?8?H@B3c 7d ?R`?V[@?2`?#F`?L&8?W:?X@?N> .@Ab;-o>Vum`M8>?AT?P,?E?@Q?@ ?If`?M<{nRlj= ?;L ,QEa?#(i ?F@?C(?*: ˍ?U,?Z? `Q`?Pv ?6A+?#?S~q?O$@EF@?E?_[@?&/SYt`!Xz?Gc)O`?0c?IN_^A ?@?U7n@- (  $zQhi`QE;=@EO[-Vu@?/]?2 + ?Q6?CZZM aNQ?9?X?V9 :@S?5T?[cڠ?Yq@?YNJ?Y_?8K1jR?I@?U@?@T):R1 ? 5&?@uJ?-`?Z?_6`?KV?"u???TC?Y @?V?X+:?Sޫ@?;>.;6?R1`?U׀3sCx?2f`?'\@?6<?T9 ?Nҥ`@gO- ??G,4.I ?C#?Q;*`P ?#V?WH\?]y?@?V?FA+7.< QjRF`?-i?(@OYE ?=4l?%:Bd!?d~?WN@?^G?Q@?> ?G`?<ӎI0 Q#`}`?@e ?J?O ?9}, ?GZ?Yp<?Q/I-26 ?P!~@?XjQ?S?MN?B,`?5aAb`Vy`?E!`?&*:PԐ?,V ?Uh ?;{no?@]e)P`?A0 ?b?Fq?)N@<`5بQs>U]IE =CQ( 7F?PVb?/`PL)EX5m S?3 ?M0@?V ?T@$u@G ?'`?Aok?1I/?=+?1 C@?)`?Iq@?Q7ġ@]Z~p=gg@?)!@?8Ȣ?P*?Z?UM?Im ?Kj?W ?a'i?])@?Oy ?B@`?%B:? ?J@`?6,`%!?tU4B4`?=FD<C?O?Rr*]GJF@|?C<͠?= ?7B ?S?Z`?R=`?K| ?N,?J@?Eب?2Wc;;A:?'fP?S?a@?]v?3o.?Eϼ?;d}Ja:+?M@?PX?B$g?E{?Q ?Hq;'P@E\`?C ?Vz`?UG?O֦?0G<4R?/K`?:m;@?`??LPG?W?T6@?C@?&]6?@3V@M\ ZM ?7j@?R% ?JХ ?T ?Wj`?5بF"?10 ?Te,LtD⬠?Rb?@$?0L/؀?!|*?I-Q I`KM 3X?M@?Zު@?EAڀ>?46*?B@?U?HY ?Ii:?T?L?CJҠ?/GfPHP &gh@G.< T CQ2 ?:X?F"=`SDn?K[?T ]?Tp`?X@?K?'Q@?C?P~?G?S?Z t?O6@?@:W M:4M?G`ޖ K)M`Qݫ @ +XJT$!?Rw@?W:?y '?#e?Ri ?_+?Z ?T\5?R6??=A"A?ȡ?l#Z?7&`?M,`?R=?b3?i @?],#@?4G?Eb?HE['a7`1g 2!@RT1I/?K\ ?R.?12>`rT`?Q/?V?;뗀+)=`G@M6U@Xu' C<?D5V`?NY?6`2$gB[53e?C@?NC?$>@2"?BN?V?]??W@ ?< ??IX?d/?,G`ch@Q@+@m C `?;`?*} Nx'`Vב\YB? p$4"?J@?T?Lh ?P@?OL`?,u=???Sb`?P?H8>QA f?:7`O d@W 2?>ޖ L~)([`?ZkQ?Z?Ma?FBr 9Oo@?< ?OVLDW`?2 ?I%?M% ?;@NW) ?i:?U{@?U-`?P|?Cm<@?YQ ?i?Q `YR@TՀ[X ?* `T_e_gY@Nx'`@}BQu@X@N R@?-Z58`D#~`F9 L@>{?OK`?9@q?7V?%+R;Hs5 ? TՀK J%ۀ?E ?D3.ɹ`5gMaP?CdP@?Vy@ ?G ?R?[B?E9 SGai^:VRV:`Xx?cNS?b ?Gb}?E`Q `? 2@?'B L@IB< U6 VVt`dV@e~*J ?9O`?>z?O`?T?MC`?J ?BE 0z 6b?G?Zj?S> JaUjiWB E?3?4`?1v?I?L?e9?D/?V3?9?,?Z?\@?D<?F ?R?BY0!~@3]?:m;@?Fy@ @Q$ W A0 *wm??%}wG.< ?4y`?Q?MŸ?P ?O?TԠ?c#?[?Z?D?N р`JG@Y*#,f?.Rd![+`G ?-o ?+g `B1I@?N ?6'@H ?O^`?Gb}? "E 4l$`HߓFL#SlOg@<Ԡ?0e ?F]6?;4 ?F+?R9?9a@?@z?+ >J+$.5@P % @<+Q?=D?WA?Xn ?UO?E@A-%@UŊ`]ec*RS`5TUbS@?G ?S?<?AM@@W'ܠO?,?1b`?, ?Bu?'y N,a<hV`p2 ?'-?SL?M?H)Q`?BK?GFs`?UO??`R|I0 ?K'P@?U@?O7U?@k@?3`}`?*I`#Q2 *m;@?C>?S`?R?O`?;x@GS2@C ?Q`?WU?+?LZz?c:?V`=`??[D?^?'fPU@>E?Qˠ?Lf@?%??0Y+a@W6U?>`?\?\"e?Y6?KvUq`?-??ɠ?%@?C ?QY ?PN@?U u?StWtR!@"?J`?I @Ģ@?#@?;@??HO?b% ?S@F<? @q?GZ*| `? 5D* .?/@CES?@?%&`0BA+>?RRI?J@)?8z?U ?I&`&,6X?`?IA@?MŸ?,BB>p?Q?^?T`? 6U`P@8g@Oy B >R@F6R)I?@p@?0R >9?"S6BՐ?Pdh?Y?V@?_e?b?KyQ홠Zّ G?9@?BI]?((f DfA]@?Ak?5=*U1USx` ?5]`?2c?>kh?Ij@?VX?P1`@W P|'@?@$ ?@-?kiIB8@??2<` M#`?B?[;pY&L???FMU`c`Tc`?:O>y?@Ck0V<=)TT Ӡ?1Sa?Xc`?S?1I@?9 K2Ģ@?E> @`?)}? .@?{T_ R]@?K`?U-`?-5I!Dt@?7?&>@*`?I /`??K`!ڀ?:@ۓ@?g ?Lӎ?,8`?;E?CVC" >"?@*j@3Ds@V@ViG*i@?@=?G`;,i`$_e?Wz?V=`Ap w?H$8@?Tr?A&3`?GFs`?a0?Y?*w`?>fO?B;a@XT{o,?)i:??[?N?6 K뗀J@? ]?B?L?T}`?X?c*?fQk?SC>J@@.79;1{?cHoj^%@Mk: ?B:|NHU@+a@?B{?O~@?D?Jc ?GV N]c^,Gx(`?5?3?w`>9?]IIN?E ?R9 QQx@3?4{oGX bѾD?Iw??c Aa`@?V, ?F K[Q-?0 ?@@> 6'@8/ Qp>x`?Q@? ??G ?1",HͻZ @@9?FIpߠ\f@E4>?(*`?C2`?GQ ?%D@?:Ȁ?WmS?Q0 ? `e??A?R?AxW@fQ`?,=)?Zv`?WI ?&HрJy NҀ:c EC@^@[k@? ?G~?'?5k X*Ro`?=9 ?1A/?g?R `?[:n?T5 /@P&`o?, F??A:@?TM ?? T`F|?[?\w'@{L0?R^?_ ?L ?2a@5V ?JȀ?S?4?'L?F6?JE`?AX?x'` ?<?;]`?bO ?J`?SZ?G`C@FT?S# ?b?Zv'@?J0?;=`+x`?`?D`?O?0Ǡ4?V ?[l?@[h?/S_?<?̤IXTx@ U8, Q' `W>VGH! ?5 @?_q`?U>A\C:?J&?Z@?Q' .`>D?/F`S@bJ?Ryr`?WA`?K ?Jl?Z"?a ?] Հ?GDGΠUTM`?+T@?[_`?^@?C@?4?D?5v?O7?O%eUebTL~B >#?F?ZE?KKfH?2e?V7`eO@64)Z?,?$1`897?#BHZ`BEt`?2L!6`F +If0N> ?% )F޵Wca;WD???sc?K@?wC"l?Jj?S7Ơ?@+E`6|K?B_s`?N?#KE$V?=?V8?^?Rn?4?[HaRr5 @:A T,Mo-@?.v ?Tm@?Z?4\`T PMK`?@ق?ER 'qg?+T@?U^V?FI@KGTLs S@X?Lg`?CrD?L?O?J$(?]'?7^ՀA`?Mz?:k2LN Ms S4SG&#*?J/L?L{@???9*`?Q?`?\#Ni@C' PV$1/?F?,/?H?`Y ?]9S?TH`?Q4~. U ?[,?]< ?C8`?Ԁ?XH?`@?<?4?S lT T)+@X`RƁ?7?\5?`?D\;B@?FL`?[Ѐ?Psa`?E?/@E\{ @dC\a@`),`?T_`EfF@\D-!0 ?/̀0^`S3- ?Z?T`?R$R?K@< ?Q@?\E&@?7@;?@A>?G5?,}Ƞ?B`?T} ?YZ?S)ـ?+ EPOo@0sa`?K<`?P ?Et?A6`"`?`?f`?!1ۜ?2?FP ?KB?RA?(P: TKJ@??`?-1?P?b^?V4`5 Uϛ`YXԠQBk3G@?4?9R? ?CC؀?NA?`Iw?Lm`?6?B2?M1`?H@?AwWKGLCA0QVPߠ?=d ?U?9PGQ‹QۜU@?W㙠?S@oP`?1;?S[ ?F`?MO ?^Ǡ@?IuO +@?T8?K+`@:ǐ?\j ?f8 ?FC ?8?O`?I[?W`?F@?Q0?1`P`E93@?X?c[@Q8aQ6`?>4@?T c@?Q:8?[N?V Q `XaA)Z*X&,̀  ?C??TU?;@m?M+@?I?/! ?V@?bK@?W ?@D`?1%&*HKBp5 ?#@?AY?1?5@?P`?R`?NC@?IU`>?G' ?Q?0Ҡ?0 ?9 2@E1B-?WD`?a.?S@?A)Z?! @?g@?L{?JiQ1+%Z(>\ ?@?8?L}Ƞ?!;<?1{?B",!CYE. S-@```O`?5V?M0 ??BI Tw(`?FoL ?f@i`?]|,3g AR?;$g?@=̄ ?Jj`?c ?\}Ƞ n87 ?)q?(~A%Q `?#?WC?BPQRo;:@D`??Kn@?Y?T`?84@DM`XD(@E?OA?Bw0o?8?A2@?hA `W0iSx0?c@ f ?P;?R?J#?Zi?[dw?): 0\`D IJ$(So{`Qqŀ%<?9Py?>4@?QxE@?^h?^@?R,cZi[N/?,?T`?G?<5 ?+΀F`6n?S ?S ?*_?%v?4\`?B' ?S?593@QDr?$?'E?`6@?4\`?XqM`4DYv T_?B(?W-?Vb`?OYc?0A 5>HM<$`A\?Cf ?V??4K`E@?H[@?daV?]C?7xԀ?0w?2Q07?93@?T{?W ?Q`?N.o ?Q ?VP?I4 KV  /?.`BV^b[?"{M?NƲjx/)?BH?6G?7`?I#%KAz?An?5/`>?#?E?5-`?&|K?2p)?G?F# = Eg@?D8?@@C$[`?.ol-O?@U?P/)9W`?PK?PnAa@`[a:IY`?&n? @?F& ?Q.?SS?7e ?a1FJ)[ SyCP8@O``${?0?A@?N L?L@?AL@(Y@ek\q?([@?E zQ`K`!-@0`SC؀Uۭ I|W`?Nj@?C$G`N%&`T@N@Z^v : ?Q`?I?`N]+@E?Qc@?Y-`?S?Jl`?A>HMJ Ujh@SvH\?Fs?]?P4? ?LB] ?`@?@_,`A ?%Y`?2?@HN L?:X&?>\ C>p`6&@'Ѐ?2%?6x>=M3?:E?7`?@a@?GϠ?[2U ?``?UR 2@? ?@d?D\;6G=M? Ҡ>>m?@?4 c@.`%>_?9 ?JG@?0;@8y>?)J%^ UЉ?N?\G@#L? 0`CA 7@DF*?<(^ ?X a ?^+ ?] B?Qz ?-!0 ?̀?0~?),`?A[} ?7@SR`X; ?K?cc`?]>?EI.h??M?;>g?&@?IR?6J?.ol?U-!?E PܠC?D>AN@"1`?Qm@?QG?Up?[ ?3g W`]b[(A?U?K̀SeDRq@? !0 J#Ԁ?MM?X?I`C H`V8?̀?XN?cT?]?Ӡ?P@?Mu?KV?6D3h E@?[`?b2?0!kv?a?`6`?/;?:[@?G9PyP4? 1/&".`3 P7 Uf`N?Ch ?[@?>@L:4e`?5~?,Y@?7e ?I@?T+?U?Kw ?A?G@?8j9 8&?7)*`H @2cD\M@2L?Ez0?X`?Y:1@?`>?Pq?U.8SC?Q4~?z_ a-J[@3Z 08@(W1U 8t?5 ?BL@?Q?X(M?S:?A{@?B`?T?T.`?IЙ@?P?Li[?HJ?]?b)# ?M% ??T|`?Va;6GLC?Q%?MK`3@?Af@?Su ?>?ER?U5@?8KE^V??J{n@?\~?\5]?.EP ]S'`?K?IJBp)-,@?Fs?AV ?<Ǡ?I@?B%@3h JIB-?1CY?T?Q7GJI).`?E/?Rg΀?O B@?1wW5?4GΠ?Nt3P9?9u?L#B?U@@?KB?5/`P̂UM@H<??82`?#Ɋ@?8?Fs?5 ?]r?KBCC?L ?Np? ҠG2D>?A??Q1?Ln?1TA{@L< ??X͐?W}x?:g`?%. ?0]?!wW?T=@?`Q?T4O`JS?DR?QI #`'E?Aqŀ?4̀9{D8@^>@'@?5^V?1{?!4~?;I" Q1D?C?4?2`?K_`?XX`?OJ:$(V*?U`?Z@?Xj?TLs ?:>'?(?G*`?X ?QMU93@?CՀ?GЀH*E?U?Y?W?Xs?EK@[9€UCi:Ҵ ?6 !h|U@?A>HMYчU?#G>1`A? 2@?%b @Q8/@c *u@K΀O]'e 7b S,A?1N}85 E7X???Ev@?RӁ@?Qz,`D>?B?CKdZVK YS4Z@?3?C`>;nP NIN 2 ?X*@?VDF\NdH?3 @&I9+`P;?9@CDF& ?Qe?S.@)%?J/L?Zk`?Ti; +j10?L`?P@?AH?:H?48@?;π??k?72D?!D>J?'ʈ@?3AD9P?E\{ ?I ?3`?6i ?3wրMMaT[=y@JU]gE/?B$5W8 a ?@``6SqB@?6ƒ?J/L?79@CKEJ@?-r?2`?LK?'BJ`3C؀5%@?F3AN"K;?<3@?Ub?E1?z`AwW?G?]?Q#??@3VjQR4`G?6`"?@M 49 ?AE4͵?JE@?gLC?\R%@ʧ ?(Y`?P!4~> ?>?Y7h@?`?H VUu?4?9RPqREt`?"Q?C H`?2и@?K΀?_?`~?JH:X&3`?J?PZPC ]VD?(#QgL6 ?W㙠?a ?S?/d 8?Db?fS?h!?[C `?G?Ge ?P?F? (`?4?@7BUxUG.K]S 8?:͵P^@] H`*:p`?N.o ?V&.@Z`I`?Ft?Pp@?BK?0J6@V(X 3Ӡ?N,?I{D@UI;` +jP_`6?PO+?B`?l?LZ?Oo@Ҁ4t_@?U`?BL?<(^ 6@EVK؅[S?,5Q.?YKRM@O``?? ?S@?CrD&@>?T?d>?a ?Q€?H ?A0: )`K` ??Ul@?SD ?@̂?MSR?NC@9?4 ?h ?bH> '`8 a ?::pBݷ?̄ ?Q?ao ?cwր?R`aSWQ@?BJ?QCd WP@=zQ`?Bv?IA?P@?[1?bq?aD?S\?D: ?Nm`?Q:`?@q?2H?CԀ?B] LF;N ?)*`?LO\?\oۀ?[?:@?D?b0?bD?BH1?- ?Hbˠ?,3m?@`?P$v2 @Ww`Le?$O< .KRK`@!?Eڿ?1wWQ] Si`?c ?A|?1?Iw?R`?$*@?DGΠ?a?b&Z ?; @T1`U+F R;=Z%\4pT>K D@B",C_HC:>\ ̂?`?).`=LNE*?; h?W`?Po@?S?QF"?JGp@?2%@4DG| ?" ?S0 &f`Zr>HMDi; 6s?&?1>HMBK@N?).`?cϓ@?iV?W?& 0>?U?b?_?W! ?]d ?_ɻ ?@ #?`8l?e@?E `$1`?9'?17@?B/,?T ?So{`?Xn?]9S?CC7e ?,B] ?:yB Q RN`5?@Q?E 5QJnn!% GqgEY??B8t?IlS?=O0o?:/LC1FM ?M&@?]?P@?U,?c 6?[Xf?!6`=kv??8u]@D8V$E,@ IW$@a@?H?H a 9uB$?9,`C``cx@+MA?_`?[р>LD>ECT?-7x?b!?ii?Z4`I|XzS?G%E`5 QSQM`0恠8[@Vp9ET?O?K @ Ip L@#?7E*}I>Ҁ? Ù@`?D?c?bp`?Z4?Wi ?Z?aM?T :E?"]?Y?K?H3%K@]`%AWƀY 2@Q-@?W/{?en?Ng@Cg .g@?+ ?H?\?Ys@??=?]?E?Zf?Q?sc?0]?`yj@?U ?,?C`?UL?X`?S5@?$l?"Q?S@?R?|ʠ4<`?%xU? CmL/ˠ?+E`?BUga]c@X? ?340NƲYv J" ?KN!V6IK?2&>z?P ?ZQ?Jl>lY`?=u?DZ`@K<c@bg΀ZŴQ #C؀?#?:ǐ5-`^2%; ?`?`p@?[?XU ?H ?U ٠?`??B3@!?&|K?a}@?We55|J40oP7 T\;??S^ ?#G ̂?/N??KV?Y`?CG`I?`AT?HM?3eDH= ?U3@?Ow.;n?:#?VE?Y'?U;??:??B-P?@*`(_3wր?,v[@?Fd(?BA ]`4 ?@?D^O^_7J[@4{M`Ɋ@?J3@1 S@U`tO`I?As?E\{ E@RzQ`7. VRFb7`?.?9M9SaD\9`VyT])@?U@BaNI*`?J?[?A7@?Kee?_C?CFm`?$?A -0 A_@?> <\`S?D?CciRnN@UZ?A?a?aH?T?S ?N!5<PoPH?Ec?YQg@?Fd(?F\?RJ` .`Q\jH ?)q?W`?INQS @@?E/ ?<*`?@A ?^Ս?BC@!?AU ?_ʨ?K+`7@@'?;#C؀AۜDT@ :p0h= @*}I$?>?S??`?+@?Qz@?Bm8(_>,?B`?TC*@?.B J)Ù?A ?Iu?N ?Gb?Jr@?S+?E@04"?Y$` CVj9u?>k?OQ?<Kt@`S@?0 ?Vǀ?Uۭ ?W>?I/ S?4 W 5xFV"FJ?I`?b`?_N)Kˆ@DSd f ^;]`1 `N.o IP?9L?+N~GH`E4O`?D`?_``?F%?D ?c5t?aB?Px?6]f gPq`?s@?e@?XH`Wv LM@D\N%&`D3a?9Py?Y#?b?`?W;?J?6?A;?H<?CC?Q?Ō >A?@Ҡ?R96f`X~FbL?Fk?XI?DC/k? zQ`?)T0@U@V& ?BK`?X`?`?ER)?L@?B2:?E ?;re?=(?PA>?;c CBE~?`>!o8|ʠ8?a ?A `?5 ?Q܊?b[?Y:1@?(?;?Tڀ?[+?Q`9 QE %<?".Y$`I#?&@?YS?Rn2{MK\DZ`O@ZfR?!%?L`?H<2Ŕ VSqQ]X ?G ?Ya?TZ`@A!N`? \?#e 6@C$G`+??U ?`B,`?;3`?B"\S?7O?C@?M-@?Cy?Uiz?Gc 1T?1G@?D:,?I?!Y'b ?>Ȏ>D?0 ?I`Dp R6 ?e?U>gAz@+?*?!;  ?O?`,?Y?:cJ?,:?S`?cc?by?K?`?7i??]ˆ@jx?)|C@FD?J" ?^I[?RLCCN?Ck$ c@>j?S^ ?RRs?* !h|@?A ?ZG@?aS?Tؤ?1l3`?5S2`?C' ?IW`?Z~ ?U?)IWPeWQ@?S}h``^ ?%?@?*r?6 5 G`?? f?L23.`?RX?Wt?T+@?I[.%&`?@?V?S`?P?]?V2?1/?%4@?yS?ė?A\?I-1?Q6?B G70:@?Wi ?Y?D ?3@?BV*?A{@. XgpY_T`T>?GH N`]"?Jm?YUcA6Z?@]?40`?B?]?WO?aX٠SȠD Cd LF# &9r?7=i?@ N`fea@BAA~ $?6OQ^B4 ?D8@?E\{ ?#>Q8?2 @ˆ@?v?Tl ?:ǐW?^JI?4P@?HS?^/\W(^2F?W`?W`?<6bL?FP ?N3KEQ@M N~GC)ـ? Y@?ʈ@?`?*A }Ƞ,Y@?)U@HPֹA @J@? f?Fm` @?*$(?A?7@?L;?j,YSSN?C@!?DB<?3h?Az8Od ?L?```?;+`)?W?a@?[1g`?H}@:@)?[6 ?_I`?Vq'?S?5y ̂?>Y$`?;='. 9R?AÙQ1 ̀?\6K`?`"@?Ih@FG@D8@?0B6Q@?0\`?F5 ?? f?IuKbb*?&&?\ڀHg*`\`+?P?Vt?V1?U?H+6NR$ ?T8 ?E @*+?NL$?U?#\{`[-9u3)ـ?kBL@TMW ???CC! `DH)Qa EpAWƀ$?`?2e?\{@?S?Cg @?Z@?H8`?!?V&?`?QT`?B?T?Z@?K"9LN!oPQ@D>;(B>?3ѠFR`F$H`U@XQD5? @Iݘ3]׀?Gm`?Iwx ?W@?d!B}) ?^?>@?HΠ?IO?H0JGȬ?P ?aՔ?6xQ%?(|ʠ?S@?O;`?7`A13`?RY@?V`?EO{? ,g`?. ?Q @?P(?/A7u?>@?MG@4"?Bs@?U ?Kh`SS#Y?E›izGu?Tsq?R ACY?2и@?K1g``?L ?[l/_aW?2?Q?F?6 ?B+u`?H@?R?VR ?J?JIK?X?K @P5iz?AT?H6 ?D?0` @?_ BK@54@??`?St?GD5= E\{ ?:y?E`?E!?:OqZU]CҠO< #`???Iݘ?0?@?Sx@?O)?Of`?[r?R*5?Q.?@I3@KI ̀? 0`9r?7' ?<3@>Ù?B`?H0F@@V]@A `?n?3Ҡ?@=!0 6%?J+?Z?Hw8P0`W)A2@?+\?=?& ?5P>Z?*@?F9r?Dv:c ?``2`?F"?W`?A@_`>⑖??F`?,}Ƞ? )")?JM?V`?P?6&@<?+E`?Cf?J?B=MB?E!?S@?T<?P?@?8?NxB4 >E?W>?<5 CԮ?V +?RiTJ&?NȎ?U?\*9?Y`2ߓ ZC?Q`?F%QW>3?FI@?U݈?_?[ 2?Kc?4^@AN}W%E`ND(|ʠ6`pi ?;re+CD9>S?A1?N ?Xش?Q0B`W??X`?Y@?T ?QR4` UP<@8H̠>%&`7 !>(?#`?:r?@"p6#*?0$TހK ?,"vO4?T?[@B@?O,`?I ?Fmp?4?N"?X%@?=>!.?6L`?M= ?R P7?=L?ch ?]0S Cn?=kv?D:?N`?G. ?B@?L`?>0J=A?K&C@?CKE?Bݷ?Qe?T??Rp)?F?2`(#5 @?? ?NJI?SǮ?F7`?O< $"?8_?>ȎGEQ?!Y?VY?e]`?cMI} ??~ #`2?@?T˥ ?CeDA6?LB] ?VbL#ҠNDFSq]`?F ?BwH`V6?( a ?`R?SVjO`Y B a =g6HM?Go?Qw@?7`K&C@^UX͐8\@=LC@0:@RYч?+?\k?[N/?K>`CYh@D?E?ER? ?'Ѐ?I{?C@%d@S=XE?$? <@+=?$?Jr%?A DR9<$``JR;`>$>Ù?I} ?b?f @?V6?0`???GЀ?Z#:?U_D ?D?: B] 0w?A+5?V`HR`?U?V>c ?`zQ`?J@?W4 @?>`?Sf ?[֪`?TD?Q.?K?.@?Pb ?^+ ?Ijx?& ?Qe?V&?K ??W`E @O! PnQ1K !0 ?D8?LW@?H?B[?K֪`?LF`F@8??\a?]ê P`^0U:`J?@S@?DDB% C&"?=,T`?L&0FZFWBQ09I ,2 ?N?]?SN??Yc?E?N7?iD`%p?VA?Q #`?5?Xz`?R 'G? @?L3?4FG`#?8?T?d?fz ?SY3 9Py3Հ?9Ù?C`?E`?C?E4@?IRTK?5?R0Kh`?<;?Ft@C؀9O`IЙ@?>?%`?B?X?dD?T?D: ?Q?L `?N,?T˥ ?Ee?APY?PR?"KG9?%5|M @Q6mIuZD@?ˀ?[?e?aPY?T^@?L^7?I?H ?APYA0Sf?4?O@P`Y@ 7WhDbK<?2?;PL `9@M ?C #`X\Ro;7?% ?MW ?SR`?R ?2qA.?G@?e'?e?Yܫ :g`^E@?H?O?[?X?#g 6mNiڠQ?D9?Pq@G" Q.@?/ ?C@?M1 ?S ?R\`4t_@S?D/?6bL?MN?SB?+c ?;`?\?PH'` #@?S ?H`;E*X`?7@?V%?I6`;??H ?_b?f?a?AJIv >HM?X?S_"GOAl?;c> ?P?`?H(?Ay?H}?@<@^bm@d2L ?qg?\k?dC ?IV?HM?PT?I g@5R>U@?Rɠ?Y. R`a?-0 ?JA Az?Q6Z?Jnn??D5= ?fV:?f%?TV?/@2aN=u?6=)?Qn@)*`U??1~?X?A[.`@H69-`?8;+`[R \( 34?Fn@u<Z``N2w?5e?Q`?Oר@?@oAV@?:3@?dR ?`% ?OwSQE>v J ?CɊ@?Z@?Ez0@LS-?; ?I{.U~`UP>$?P?XY?O<Y`J )`?D8@?.CA?89?OU@?* ?7e ?R@⑖WH ? / B'TP?4e`?T\;?0K-% ?I۽?Z`?gl?i?]?1 9W`?O B@?fr@?`-kvEiz??A{@?Zx@?`ݯ?Jj ?;$g?H=??Yc?J)?HS* ]=%.`??C?S?[π?:@?) ?M&@?C8|ʠOa>`?Rlr?\Y?1 @E?>@?P@ʈ@? c ?[@?])@?Kj?U?\D?7M`Az@2LK 6x?O=?:`Eϛ`?>g?[a ?UG?K?#D7@?I?6@Uaz`F+?T]`?W:+Z"U@P9@B<+;jP@EQWK L?Qg?YW`)@^`?|ʠ @?,:t@VRp`,?̄ ?7d 9'T$`:`8W``MBH?=?P1v ?L{>!aCY]ė?2n?HPi*WR@)[>`9q?2q?Fn`-MA#`?'@#ԀR̀SCDO< ?A2@?V?/?dP;7b ?9?P-?d?h ?ZX?8S?@A ?_@?ir?ZD9O?R?`?J6 +?6bL?^D?X`?BP?PD?BnH?)/ ?R`=ޖK} ?M?R-P?/̀?DI?:y?E,?Fƒ?B$@?4[`41`.,?G5?H? SZ@=s?.v ?"s@??h>?X?`rs?`)?^?JhKS 6?#m?L3@  4?Q\?SN0 j?E?:+?;@?>? ?BK`?Ah|Sn`cC ?Sm?S@/`PLG@FFr@JEV9ra`Wm`>W`?K} ?]?UyC E AĀ?BnN@?/@?3d ?6SqQ ]Q ?/?MϻAG@_+Pp@A `ZNݠZR`65 ?G9@?S?IJO B@dl T[`?V?QT̀S`;DH???C&" U?G?ZN?)QQ `4"?5^V?EU?Y?X+?2o?7TC*@S4?Ō ?dـ?S[8@?yS?[} ?aN?;Uۭ @ ?\"?_@?Ah|?I){?]>?J >-@?Rr?@^`Tlv?S- M Y@?4?E4@5(`?G?S@?@?Cj?L2 ?:cJ?@`?ISXRg΀4e`?>4@?JA ?Q?^3`?gn?gN?ZW ?Ch ?)?5@?D`?t8<?H ?V*?*>?A `5 ?5b @?<?Dؤ?MH.7U@PKu >Q8>̄ KvG?8?C`KGT,Ji7 k?5,?^X?_N ?7?*P?8HsK0h= J>'P? ?V%?S=XNs#`@8#?@Kt@`\{`P?6|K?R' ?N@2]Yp FĶ?Vw@?KbQ%B @?3G`Nj@?*u@%xURƁ>:@?S0;U}?1 `?S24?=ϻ?OC?`t?US@`۠\#?D ?c>F`?L-@VFQ?I]y ?UCi?0!J!9-`?W?_?F?HE?Z3?5S2`G@?G?NƲ+ h?H`?ST@QB@\k7? h?6*m1 `?V&?] ?@ ?HN^?U @?P ?SA ?Pc z5 K&9r?0%d@?Oك?Gb >>?;π?\~?b?``?Y`?E.`<.C?a 8'` ?*?F?0!?Ee?X0?'ЀS GbE`?7D`?Q-?DZ`A[IW>0JN`\FTp?0 e@?Fӑ ?@(?"(.h ?Y?a?M ?)=1 P@E<8S?IW?C`*jNAA @?Nk?QK @bZd8@0?!wW??3R`?̄ ?<?E-`?&^L.Ȏ?@x`@^Rp5@=O[>gR?<(^ 'qgUS? ?VF?48@,2 ?G@?C$G`BlrK? ?QDG ?^@?ODJl`I:1@?DM`?S `?MP?8>(?E&?KKf%?+T@?UG ?a@Q`?8?V?H?F?31FGb ??\-?VSqE2J?aS ?aO ?).`?EQ?`w ?a?^h?FD`?OD?Z?N?L3?Qx@?VZ`Dڀ?96z?GO?BJ. D>>?ER >ݵ9/ L?A!?O@Ca@W֚ 2H?=U.@?L79?A+5?(?0J9I X6 ]Rޥ`?6&9} 5O{+ h"{M?9DZ?)@?Cf"KAb<"GO?D?;@?sc.Q=b;=d[D$?F%?G@ XQ'a^S#@+`HEQ? !0 ?Jj?6&`,96z>l?:r%9T<28t?J#Em1`?R8t?W@BrIS?E@?6"Ex >,+ @Y@?FW(?L?!?&G?Qy?Pfa?9Py?$8?+/ ?B?C?) ?,6 H $?3MMRY@?7f?IW8tJX:߀Nbm@?T?e5?^MZ@?bb<`?X$`E| @?^!?g3?c'@?) F?Py ?Z9?Cci?Ah|?=K`]`R`Z@K` . ZBqD0U>HMHM+j8<9 4Z`,~`FDZZD?,?AG@?!%4@?Oa?ZpJ *E]d O ? @9ݘG?/! ?L9`?(9@ NYu[_`WWŠQ;Bv.?08@0`Uo`LcɠP5,g!c&?50`?B4 QwZ@Y+V`UQ4?<$`-*@Q7@H);J@;) 1AYP@?"8t?^|l@?Q6`&I?Wpy`?bK}@1o [&*?CM!@*:p<;?Z?D`?Oר@?"N UJ#?X6?bp`?BI+R' Pk@?* ?D"?5"?#Z 4]`4?8A^iڠ<?Mޖ2`ST@S⛠WDO< ?Pi*?V?A .v 5?H=?7P =?A?XF?[ GPh= ?8bˠ?E6/`4̀S@I4 ?B4 ?L@?=+@4lOYc4?;BEb @Yb@?=s?&  7TP;@?:i?D U`Dv:H@?T>?b@? n[`F*?7լ`D1 ?J?X?O@?B' ?, OY RMB_s`9OJP> 3hO3B?Ay22Rs?"`?W? L\ Rq@=!0 J-q@A ?6`?FKSA`S;р<(^ @N> +(@ @E @.JI?4@?1{E5|EUA `JpJ ?7?_=`?V35VU;`SrD?9W?Y?`tX?3?_Q?SB?34CEY|(?\ـ?D\QU =0 u@@ ?C #?W0i?,T'OW_ P-?2Ŕ ?/ ? ?B@?]g ?_ ?::p?D ?6k?/0?< ?:cJ?Q(l?(Y`?7. ?X ?R @?Gu?LM@1@8@?Kb?C`ÒV޵A€?H٢?J[@D[`@H ?SԀ?QT>͵?,?A??``?HW?C$G`?7C؀f`?1E0`Yo)EU`?]@?`/#?;PSSSR) 4GΠU[`NƲ?Fo?]mQ?ZZ?@̂>@?W(`?e?[ @?+ h@قP ?c@?R:rQ `?TI?UTD`?"`?V'?R ?`?dX?5W kH@` Nm`?+re?&lR`^IP4G[.@?a@E`I 7^Հ.??̄ ?U??=MQVO ?0J?[ ?N@B@??:?`Y ?X?#@X@eIrL?Q -*@V`?7Ϡ?U ?9 2@>c ?+<?=*@\_`{E0w?Lcɠ Y@N#K L?\{`?[`-t5<?H6?C.ol?A?@?I+V`?Pm@,|`,:?Mr !0 UwgP*`@ ?;b?T?1SIlSFK@8?CA ?R>jHM?XE?Q 9 ?.Y$`?U@?N@?5e???F?7?5<?TJ?WA`6HMS`?;?^|l@?^Z ?Pv*`AR",??2vRR Od ?;`?AU >Q8?#- ?DGΠ?T ?V`?HW?A:?C1F @37c USQŠ?- +a L`?4&b@?V*R ?>`?[Kf4{[* V`P ?R`?Rr> '`OP^`L^? ?D: ?@E<@Q,ʈ@.ol?c@'`.`?;֪`2T+ _`?J/Jr%?#G?K ?4VLcL`PM?2 >@@?SA?\V@?K΀?,v[@, @?:@LXUy?O ?@?K??<?U:!?4{]OU?1 B TuMAEDWE.`@| S??GJҴ c' U!UIT?V*?V?JK'?CA ?Q0?-@P6> @'?O ?(W?Xd?HC/k?P8?Rs@?A=`?Ro;?\׀?B+u`A_3?"I?Mg?Tڠ?[@B@?N2%?0%d@?U@?X`n? `?S`?$S`% ?R?C}h<{`?Q?U,?9+V`Fn`Y]@E| @?(|ʠ@| ?~ ?+΀N`_Q8q?=rQ@`\&R0;@?Xd?C[_}`A ?Ft@?S@?Sj?A;E-?>?@' P@USCѠ?KB?[P: e?_?B?@SS ?:/L?Pq@?3m?v ?K?F&$?0Ҡ?TL?S H`?E. ?93"lM`F`: q.ϑ?&O?c UR^p B<+?Tb`?Zao@.@dR a ?1wW?Rq@2oO`?%,?N?Mޖ?[@B@?a?NHn@2N ?-FS`?P_`?LW?8!o N|l@^>7`6P g@$ C@D`Ev4?FSq?CR`?'?\}Ƞ?eh ?K`' k4Z`Y'W/?*E?BN ?4V"GOYV}9`?RQ ?`\`?.]T[<ڠ9qY 2@Q?Hbˠ?GH'` 6#*?Zǀ?`D ?Gb 5HM<M1 ?H?E?&W(?>"?8tVr@P. ?Kl?SS`?2q5›?-M?^@?c;?Kn@?,_ ?5ZT@` ?Gb ?hZ?W"|@;>g?C@?LZXۀd(`SѠKI E?5?2@ ?G@?T?R:P@?P7?;3B?'xԀ?O`?LV@?Tڠ?*j_ZQdg֠Pܠ?* ?Q?[D@`@Q @?EM@?Eiz?4^?A `?L`?@H JiQV ?M?c#Y?V@2eSԀZD@Q\j>HMg`JI C@7^Հ4?Fo`?Tr? sa`C&"?C؀?E93@?<3K@JRH_kXx&@:M5&O Y]ėJC?Az?1 @?0?`ݠ?`8IO?'ʈ@;P>`?LV ?OS@U!`bV%?Pn?]~ ?J@?(?8?0I\Qf?A?F E5@D?P?UU` C6?"@?4H2`V]5*X`?F,s@?/k$ =MTGO?Q ?T&`?&2`4ؤ?!?Qn`?S]׀;X}Vl`\ZF?'?U}?#Ɋ@7qg?U. ?XVLX2`?1-@?(`?A%Cg?>dH?U?Uڿ?Fo`H_La@?F +?Dڀ?^?QLV@U@+?P]?CQ@?*?ae?Yd@ z,?Rm`?U?"Ŕ ?)=?b?ftg`?6@P<~`Lt[j GN@?GD>R:RP\`4EX`2GO?=r? >LFYLRH?5 ?@ O@VN`AjX<~`Q܊\`Xlf`?6xQN,?V ?SSZb1`Bv@?/;?D?W@?U`1?,W@PZC ?H a ?C։D?=Qw?UQ ?X `?Gׇ48@J@9@(A_@Ns#VyJ`:g`>s#(#?⑖?-!0 ?10?G@?I ?NUm?T?K?9:1@?b G=QviA 9PyAy2+@A0:i?I,?Ok?AIA?0_`?:H?C6?Wt?U ?C_?:IK?0;@?@ ?HJ(P: E3@?- ?0?T|`?KV*2{M?+E`IT0@Zg?>F?a ?Y} ?]V?g ?_B.?=?I-1?]@?ZU]???B?]ê ?T\TI`h@AH4@2и@?JŴ?Z6`?FI*E9W`+(?- $1`I ?yS?I/@W?\Fi ?T7@?Tn@H[^@VyB ,3@:/LC$1`?I6zҀ`eZ?@?7Ϡ_tPh^Ʋ38`?K$g?T#`?Q"?0 Cpi B`?.g@?'e P)`X)>@?E(} ?Mt`?>g@88 RøQ/: 3g DpB?)?A7@? ? ?Lg`?Q ?Qh`?P ?v )O?J ?Rs@?9L+#`?K&C@?[O@?SH|?7d ?-z?*E?8f`?BK@?- ̀?+@?<?0Ua@l%›O[?@Sx@Bø8j9 ,X?Iw?]T@?\k ?0?c@WJ>'?P?P?!?B?U@?Q1?%xBи@Eu@CR`S-@?E?fV:?`?O'A@?P?L_?O ?_Q?`:@?E.>0J 7?D]?.@QX X2`D?U`?DZ`?[R ?bo;?]I`?S`?Bn??U@?P;@?Blr@A .v ?&2`1wW7)q?;b?\ـ?X7 A@X0P&R#@?Fd(?N#K?Q?TE>?c@Z2Vb`GEU!`\+`b:aR1`T@?!U / =D ?+j?I=qa&\#?82`J#a*H `ŌQ9͵?B1`?Kc?2`+`?0%d@?<D@VvJ@?3?,$`#?8[@?QjX?D3a0h= 6 +*_#?,@?:#?KZA`?T&b@?O_?0:Bf?(?S ?UB?OA?J)?Jj`?A1/I A2`?aY+?[x?4̀K`SJ?&*?S1?a?C@R@SACҠ?A%?`C?]7S@[>Px`??Eb @?C?"lr*r)?(~?F5 ?Rp`?Q@?3 ??Q ?P~+jK-Q7@H,@?C #?R?O?] ?a?BI`R [\K΀?A{@?K?J?R@?`RdF& L3_ר@X@>`A{@C+2-P${&`=6.N?K;?T$`?Q`Q?NE ?Q2`T@k[cz?#?F#*:#5?@o?65m1`;`4@?=ėO@?CT?-*@)6zPPx`?g`?X?Y'AWS\P6 +?X?`@?[GUPi@+T@?8?B_s`?A0?As?3"lA' PݠA ? !YC}h#wր?Jj?@E5|SWWY Uܚ?,n?MzQ`?6O?K`?ZD?L5]I]^wT " <6 ;n@?C:6|K\?J?D>34p?C #?B?:j ?E&?I" ?C6q'?<?O^>N|l@3N?P ?Q@A `@J?V`?GJhR)CǮ?Fg?C$G`!a@NtH?RSa?_1w?F?J`?_?JL`/ ?W?T???Mܻ`?PtO>*g`?H<?R?Jl`?0<Ơ&W(?K=?T8 ?Mr ?<:?z?"Q?Xx&@?X);+@HU ?; h?YW?R @9RI593@GjFv?Qi`?bs@?Q2@@wC@55@E,3HC:`?J`?H`;IO>c ?-@L,J?9?HC:D@[ TPet S*`?A/'ʈ@F`?`C@R4 WVz`=?F$> Ho ?5 @?ר@bCF޵?Yf?N@! . ;|?G`?H8 ?%S>olNO۠G@?).`?4{?A`?<5 >DC6MW ?U`?S"l?&"M9S?Hw8?\|?I@>AQIZi`?B ?`r ?:E? ?\?RQ C>:@?[?Xy? / 7>:@? ?K?Y?LB] .K>v ?m?U@?Yw ?R`A `?1o ?G ?D! RR A `?6x L? c ?MO?FѶ@?~>a ?v`DIN@D7Fn`WE Z}IW(`:' ?\W?ZF?4&b@?7@?R쒠?R1`0`Q0GҀ(B 6W(?Mܻ`?WS@?I,?B Q ?L?8C#@Dn@%KY$`BRG?A)Z?6 P1v JX&?CR`?BI`Pq@Z@LbYF?P8@?5 TZ_' ZVyWh|?``?X@(?"(?GS;?MT?/`:E<R-PR#m"I.`JGN@K@HH̠<?#?I:1@?0צPrYv`WN@K<3&"J Ew?VJ?\"2`? E @Wр)?LOC\{(2`?:i?_`?Kb?`Ҡ?Wc .%&`Fӑ>?c@?`?7=i?S`?N 2N R Bh ?SR`?V^AER?Er`?>N@7 @.olA_@>O^H8`?'LC?&`?7@?Qh?Sb{?BaNH\XvJW[ Awa;u@,g`?T;>5H?5?QD@?7WhLN'?/! ?@ )?6 ?C̀4\`?M|,?^l?IV 10?4? `]Рe`Q@`TmWg01s?0 @ ?Ù?N?B@F7@?P)?F`OZP| Gd V6B%?_?`1G@M̄ ?Y`?9/ ?8$O< ?E?[ V?:iL}3Հ?&t!c >]`?Q `Z@W!J?!0S\Yܫ ]sѠ\\:T?D<?S;F*?"8t Q8?<_ ?R`?HY>l??ˀ?=M?PXt?^#?YI ?!-@? O?O=`?%xUNݠ>@?R @?:nnS%5X<?K?E@+T@?1R?I۽DVPr ?+c?D`?2",G5\XPq?#e ?v ?6 ?Fq'?=P`?E @?C40%d@Ay2In/@L?C@Z=9?@@?E [vcPa P$v??`5?;g@?_)?Z6?GO%S?#`@@ I|?Bs@?V0T?3pi ?/ci6@[]JŴ0h= >ѣ Q1]a@O`?r?F?U,3?[ ?Gʈ@K`QS"`?(BY@P@A  AL@C@!?Mq?V :D[?`U";@?8|ʠ?>4@?+c ?W7?gs@?_! ?"Q?(f`?O?P!??N?9SCYb?b@I2?|ʠJ@Jj+CP\^G ^AXq?%~?Y?A/4> ?@`?L{@?Osc?XI?VZ?R?WS@?S >a 6Ѷ@?ICz?R@R`?Q6`?0CR7Ҁ?JI ?BY@4O< C̄ " 7@?C?F%N'Q]X? ?>4@?A[*EZ% Rғ?2q?EZ??aAÀ[^A?U/?Y?TC*@?An0;?2 0?L)b% e}Y7A?D-Ϡ?E"?NӲ ?]W@?T r?D c@?Az@,-7x?ʈ@T `-?AL@Xa`H`ж:@?D: ?T@?55|L|`@?2",?>@?Ft?M= ?8BHP`H@0,(|ʠMUB@>K?5u?$O< ?3?Lk7?=7xJ߳\`[<I j1]X(2`?M?Y@?P?=+@?C?E ?OA@@YVvV=@Vk8W?%. O9`Pn?0PO2e`JZ?2`?V4?M&HM?@;?S 6?N?M@?A' ?M?P@?Y  T`z?F5:6?J?F> ?'@j,?D9?U!`?J0!B`?<?L?b ?'b ?C"l?:`?K?CwրSWWW?W(?O?D-ϠL aSx?H4_?Z ?Y?8`TZ`SU@?5 ?B-K<]d T&`N,7LC?Fƒ?M;/@?BK@?;?-U`?9R?Sl`?af@?byr`?HHA)Z;c Qf`DM`%SS՜ Xm7[?u?+Ѐ?a?S 55|?"?@?H??0~?4?My?I8U?D@?8X`EO{J?B)?T%t?I" ?7?.;n?>@?C?62`?FѶ@?PE?5H m;c Wd TH`???T?F'=iFq'Ey7@?4?Jm`>pb{Ġ[g@%?8mA\A ? !0 :J#5S?9W`?E3@?+?'E?S ?`?cH?e?@?Ur`G>h?MM?AzP`7a"cXo ;? 1-@?d 2$U@(8 B$C`E3@N?S`?FE}M߀MUQK ?'?8=?NqH ?10ERD`6Z@??@7:#S?k?Lz9P@Q?8t?Pצ?U ?KC?C/k?P@?B27@"]Is@ek@bE4&b@?K?9n/@?=?>Q?Jl?Az@?Rk@?ZE?VH?^ ?\?8?M?e,?a_?@!?!?<4 ?Bj?@;?.55|0 4RA @?-ė@ ?@?P?U-?)ÙE,KVÙ?J@?#KESV!O K"?U@?U?Xd?>@?&&?B]%SW0iP:? a G]QwD\`04? ?E~?9Py?<?'BN P`Q2`8?;?@?Π?Ho ?@b ?0?R-?PE}S`?3D?NiNk@d]4KT@81XfRaO: 9n/@Bo/@> Am?Wt0 ?JNT [PJ@ e@?) 2@?A{?HS?;ˆ@?,W@?4R0B ?8٢?Kv?G`?Vmp?S-U`EizCeQ:`A?A1?J`?A]X9EU`I?H?WM1? d?/?J@89Py?M\?B+u`? Q8?A|?J?Va_?X|ʠ?G0i?N?S?:y?P?a^?V?Qn@?`@?[y`?%B1``?D5?'5FO D7@Cg @K<>ޣj?U-!?LE}4?[@?] '`UQ$??Ud@?L&7[?(+?T?S/ ?QU ?J3@!h|>⑖?R@?DbP@Pߠ4N.o SՀ??8}?=Qw?B @?BL8=(`?48?j*8yNC։0צV]z8bˠ?D: ?=b^ \?'S@"J?:/L?C+E`?(m4x`!6`Qh96?:y?Q`?2<+-*@?=!0 HMSH|R 4\`?50`?FO ?Jk?JF?/07S@0 B?@K?<?A`A?C@?YG0?C:Lv[@TIH?`M K-WTa`7?^<\`?=6t?@| ?7`?Pq?d ?V#1 +`?,`?G@?Ijx?3 ?U ?`D?9f> ?S⛠?@;@:i?D7@?U?4C@?<_ ?^ ?UA?Dp?Qc@?8.͠E`1??;?^8?X~?L6 ?S@?_*?[?T?2@8?7?[?e P?_i,?N7?XN^?_?Iξ?' ?`<>(`?[.`?`<@?O?D?9jxG0iM'?p?F7`."?#?9jxDD?\PJ`?``?Wpy`?5K6m>@RoU?II ?&l`| ce&?;?.@?[ ?T'<?E@?\)K?A @=HAu| ?1R4`?C`?Pצ?U,3@Q:?%e7[7?2`$@8=gD"KN~GC@L:XMqQc@L*9W/{6n?\L?X=TL5>W`Y cA Fn&O W3?Y?%4@VsQ> R1 > ?a\?T MP`B' 509@2`?]?gb?N L?7m`?[ {@?AS <?[b?Pet 4?K>?gm?f}9`?a@?`(-@?4<Cg?QZ?Y} ?E ?P?S=X?Cu ?L|?PA>?4?Ch?`L?g8?` ?Fm`?5?+c4 ?$ ?9T0@.?)t?W;?^Um?W?WsB`?S? 4 ?4^?<6I>Q!>`?P`?]z?eeM ?a ?BI+?;\?:F<`E?APY?;? T6*VE?>N@?/7Eg@?JY@W3?L4?FƒQ Fi ?3?-M">HM?Uέ?Z&00`?M?d ?]s@. ?XZ@?HMs 0`?``?a?XJ?HO^D?^V?UBI2Y@>lK?E?Is`Cu R`a?=U`?];/@?X`?1IWLZ@5?FI@?Cg @?$?6@@?D^@?IEP=\?!Ù14~?4{? >?0U?%ZJj^`W F@L1Y?Z@?a`!??`,@`Pd) 2@?zNY> ^L~?MOX\'xԀ?6 MrKE`(#> ?"Gb T^=O?C{@?WA?@ __ZZ?P@?[?L&t]Aa}@QK=P`!?OJ?D ',Q8$L1Sh:E?:P?0 D RM*yIt TnO?? ?N#K6W(F5 ? Ҡ?%0`?H?W>AWƀ`<?@)HZ?Z?VoL ?M? F?1 @?Q[?5w`4Y`?X"?_?0צ?/a?Q]X?#wրYPyTB<?; @?G?:"?(u]@E>?^;n?A:[`H`?2-P4 ??c@R Q V7,n?K?R Q ?A/3;?h|,>0J'A?D3a?G7H \PJ``@T7O=`FJ>@>?Ge?HBoW=RR1 Qo ?09@?>ENV&@V\"@QnF+XIaͯbw`S`?>@ZO? ?E@>?c@6FE`A7Ѐ@@9|D?W9@?]'EEDW?Kb?Po?55@UTb`?/a?R@?QjX?R?Tڠ?Dp?  ?I~?J#>0JE`1>>[@?;v?C}h?>Ӳ ?$O< @ʧ =v?[@?:?JH ?Q`!??4@?cl?V-a?(?4&b@?&*V*̀AT D_`?7m`?\um?a@?VY?J?3m>$?D?+6PZP??[~v?L ? ?LV ?Zw?[̀?U4@`,` 9I 8=Z' U0 PMS( a bQ_GҀRdD?8X`-U.@;@?M*?X?;\Sh?=(`zRe3Z ?Kπ?<~`LM@XP @U* ?C`?R?'Z;^`cR_ ?M+@?Y@?5"V.NNqH ?Y@?e@?U. ?J+?UEE ?Lg`?>*X&E@H` `?5p?3?>@?*g``?G`?Rɠ?Cg?Pw?[n@bWC?7@?WX ?V  ?@64*?KC?RA?7OEy XN]./X1E?M`?aD?Y¬ ?4" >:@??4?Aa@IKQ?I*`K?BJ?V$ ?6W@AU ?Uܚ?RK`?;??H L*9R34M*@K?_-zQ`' ?VB?UM@E(} T@?F`q`?[} >EaS?<?›-rH}Q `F@@@N> ?,`?ʈ@?[U@[(?-?Yxe?M^w@Ywx I2?S@?Ia/O@$^?X@?T?CҠ?2h > @ ?(8,B] Q[7@-U.@?@$^?@:?SGa-aISm?G7?4Z`HNK?1R?Y@?V ;a ]U(A_@?'c ?D ?Uf`?Qn`?0' 3F$ Cl`??Yc?So{`? `S#@K >@7 k??̀?@8(f`?9 ?RN ?G| ?,?IK?)/ ?4@C`IPyIMDx?:@?E<z?- $O< ?7@?6.NQi`PMP??*:pu@Lbad9 ?<4 5&Q+55p?D`9@?5x?N ?4?O`?Z`?H#?R?\i??K-3d Is`?o@?Z?` ?e:6?TK?RU<Vˀ`q@>Ȏ>-@1G@?3e ?1 B Q 8`>?c@<;?0`?S@?-U.@L|?7qg?Tb`?5T3`,n?4<?FkICz`슀6`?Ye@?U?Nx?Kn@ D`GS24G>?- Mza@P)1 @Hu]@?@?<:3N|l@U}T.` Ҡ?B$> NK9*`?ML?U TI2<+?V ?R2`=,@ 7? ?D+@VYS@?=t?X`?A 1o ?- (T3aEr`?Iwx ?Z``?^ ?[?RRs?QviM ( a 8A `@7AT ?5. ?I3@,?+*IK?CՀ?U ?g@J#J`?X?U=R@cY@>͵?EZԀ_`?Ofc`?H1.?6?KR?M*y?K>?c?hM?G! @0`+@T} X*)@?N?cu`?Pr ?#B?A-@@@ `g`K ?T ?LQ8.@?+`?A65?@? ?E?a1`?RKO^6 ?G@?"@? ?F& ?QU ?U5@?>0J7?F?[g@?P;?APY?Eu@?>!?N> D{UC?C#GSY3 &&?C8`?!o ?8?04? ?Pq?.@ESwր@?:' ?6D1 >B >-@?AA~ ?0F65 ? ?U?W]?(~%v?FJ?Ge2-ND SNP)jx?2GO%Q??R?ATT@R7?J@?]<?Po?9n/@?F`?S@Wx`RH=`?$e`I@PUK?9*`?P?3f ?=?G@??CeD?Q,v[@V QV?D?h);?e`0A `'?\Z@I-1+reGU?b}) ?al3`B [MG,X&E!5 ?V%?YP?[@?!?I|C3"@Y?"?X?H7@?g@ESX$ 0w?W ?V]@?>g? ?-?1S?<?E?7Wh?E$`?]~ ?Q `F(?*_?X.͠?C + @z?C #?]y?` R?K`?IN?YN?Spi ?|ʠ'qg?:r%?E?3S@?B BN ?HP: ?W?<DK8?:/L1RA{@>Y$`<9 _>-U`3@>:p?8 ?РDؤ3A?G5?Lcɠ?T̒?b9`?T NT%?wWBS@Vq'C`?E ?A1R.>`Xc`?= ?T D7^@Jl`4O< K@*@?8mE[>g]8f TGΠ?"(?F%?)=?G?Q.?!z?1@?C4MO `H5@R?JGp@?cJ ?XN\D8QEPQJ]=K ?YEU`?X0L:WVz`1 `)ÙMSR?B?: ?%- ???Mї@?<{`?:`?P ?0@ ,:?A?AT @ K<Ù?R@?Y-`?@@a@???MQw?Rn?QU ?B_s`?C ?:j ? ?VL`?c ?Q > K);n?Y?]FS`? 3eD?Tn?Zao@?DN7. `@A ??A)Z@^Qḡ ?U@?X*)@ ^h[Jx<CC.p?A|?,$`>@?->@?0?Eo ?OP ?D@QY^I[>@?D@a@?SR`?`"@?Pw RrR?>"?Kd3UxW=iSu Ip ;̀U!_ɻ %~?V@>W`W| QD@J qGA?,Ơ??D>Ud`Rғ?`?:A ?( a >( ?9 ?J"6@@47@?:#DB<XFn`?4?CrD?IKNiڠUU ExU W`A XHTy*IK6GG@?2ߓ ?SH|?F?9 ?Q?WN@?R?Q@?B-P0 e@?D?O^?D`;`Fn?F?V ?0KaG*`?I-`?[m? ]?R@?T>#D'?S`?VYK@&HM:lWv`B{M?AE4>H ?Kd?\v[@?U-?5ܚBK 0`: t@1`?C H`?3eDU`?Ep?=FS`:@?4?S4?Z?[%,`U4;πA >@?4/7? ?Ay@?-(`3l`1G@M$_)W2DP\ǠP9@?I?T_`?N@?>ȎEXQ:>D?M?JC?<}`?9.`?H'` ?K,:Q?>?O]!C ÙBMq HML(^ AE4&tM!0 Lz?) ? I[B-zE@2 @?M`?P^`?@^`?N?\?^"]`?`?bC?KZA`GqgwW?Lcɠ?4-ϠC{@V@S?AT?X ?P,?K?K-?FĶ?;8y'A?D^?3a@?K/ ?`&?8L`ZKre??h>?G?AT ?1wW?"Ŕ L?EQ ?P1v ?D: ?FZ@?H5?1 8+\?Rw?RK`MS.@?yS!;4?M ?T`?Fƒ?Lz?Uέ?X`@Ҡ @?N '`?b$ ?Q{UyU›MO[E`[ G?& (F5 a ?J?H[^@?Oר@? N> _ y Y> >@;y`Tt_@E?B?[R?Wd>#G\ $?HF@?S?Oʨ?J!?S Z?L79B V b ?V?Ns#n0:@I@K@?6^?+/ V`VW(=)`HB2?;@9-`Yp`8\@?I?JIBpGd VVV:*`?11`$?A `?_8 ?W@?*E?<??:AxLK@C`?C[ ?R ?T@?e5`?fC2`?I@G=I@?BaN?W. >D>v ?N@?.~GW?H@?A2@?Fl?Fm?LƠ?J ?(W ?Cf ?Mq?@Ҡ?A_@AD(=(??T?`:pY9C2Ŕ ?;?1`?l?@(?6&@?ON??HA_@;@Ujh@d`W@QXvJ* ?T Vb`Q04?YÙ?R:P@Qh|R@>O*Z~ Y Cc@RL*:p?I-`?F?e?g`?A MF`?5 @?K<Evz WG?8+?P7 3R`DD(?Bn?TR?Y ?TGΠ?8bˠ?1~?U,3?U;Ɋ@R5Tv:$8?J$(%.`;@?Lt?$Z|\B?Lm`?@7#G4K`8;A ?>@Tq bA[5›]Q-@?' ?'@?80A6`?C@?`Z[SC?`?@^``P@E-`17@C%,1WfK=?3e >͵?. ?KE`?I۽?VV:?_J?W ?CA87@?@ UB| S0 H?NF ?F FHMV%E/`??^?A[??L\\ ?U?9ݘ?:To?%D ,g`?AjX?Fn?(6 R[֪`2Ŕ ?=7xJ UB`;bHlC6?A?WA`?XO`?QT?9L?"v?R'?U$` N> QΝ`H`?Dc?Vf`=FS`]+?BIGfE}?E,?OYc?A?$ 8NP e@CeD?Q7@CS.@?+c ?&2`RQn`9.`?A??W?5-`G<D"[.`JG?=ė?NY$`?G?16`?GA?R",?C?21`Jc`0FI@?*M?P ?2@D7?LǠ?b?^\ ?MT8Y`D: ?B_s`?@'e ?5 ?-Ep@o&&HΠR 4ؤ?E7X?$]`K5*X`?3B-SǠEeAH4@?? !B>?KC?W?Nh`C KC?I.`?XS?M\?It?K?=\?H`?U ?B11`U@Uh_&S:X&PB,`S;}`<3 ?+?Pd?;:@GȬ &`ɹbIA?1z?S?Rg΀.4@Qw@7| ?S/ ?[ ?KI ?B ?,$`I{.>>A (?(8 ϑRN J ?*Qگ@`(BR f`ER? `?E}?)3{@?1!?W:?Yxe?M./?G7 S/kN`Buʈ@?Iu,4 Pp@?H3?Z' ?O.?RSa?Dk#m?A ?GsB`?=B?Ujh@?L|`Uέ_JH @;KZA`>?Q?@6D"MPK"5pB`[ hayR?,@?*?7?T# ?_q?_?[\?3H ?3@?R?;y`? ?<}Ƞ?A7@?An?+<F*:F?A<:JRY@Y?Rx?P0`?YPy?Sm9RGz?N?Rh MNT:@]dS12`?P(-@?0?c@?+j?:@U!`APY?A?@)?>a +?0 / <*@Pa`:D?b ?ag`?Ce ?S`?U?(?-? 8٢?H6;?T*>!T'?@7^Հ?B?Vm?FH@?2`?$8@C`?T ?JҴ NJI]SeD???W`?W?VZ ?P;@?M+@?X-?E-Fm??L2%FO?%Z?D?8L`1l3`FH?c@?0 SkĠRI`?Wƀ?]`?#?L?` ?R]?Bu?Ee?J-q@?^.o ?Vh`RK`Ty`?F`?LQ8@8WT 9+V`?D[`?X?Ns#HZ@K@?c@To ?_?h?g(?Fzp` ? <@?2`?7[?4 ?8`?  >?R̀?`@?HB`g@?B? r?79@?YW`?;@?SVj?P&G`X˵`?g`?P3Q&HM3Ɋ@?DMJj ?Hd?]}`?D9 ?a3"lA_@82`* , VI@_€SCRQl3`=7xC @@`?S?/d ?&|KGO?`?Y`?`S?G?AY?L2-P9@?O@?U~?Nݠ?<(^ ?H'` ?Zg?Tْ`?K ?Aa@?7S@?AS (Ew?Om?Ya ?QC@?CtGD`? `?WT"]^E2K?VZ@?L\\ ?3g ,X#@?Y,?YuKI P/?GfB?Ew9wAĀ?#?3GJ4ޠT`?0~?T`? hI_T`?>?Vm`?>@0?5"<79A1!J9+V`QzE.`?,2 ?xU$?JF?VZ?J?Lcɠ?Y?I 2@N`O?;?Q ?L?4@T[] @Xu]@Ye S.@MP`R?&?R?`Q`?BY@?T3@ʧ CՀY נYaP0`ESa ?MO ?PK ?.CB`L{>‘?_@?bߓ ?J(?A{?I*AĀUY @ ?A?Ys?W ?# ?.p L?F0*?Y<@?R/,? NdHEw?U @?WS@cQg@H@Ve?1w?cz`?`:H?Hz`?PR?AjXX\`?&@?OU@?B Z' W`?VZ ?\MOU"?07?B ?=ė?H ?I ?Ch?8 ?9:1@?: ?6F?9RKCe~@]GA?>Ҁ?&|K?Oʨ?0B:P@?V*?J?N?1`NS`G1h|B' 6?C?K?!-@D@H< \UPMX?;?;΀-z? jx?1-?1J?Sd ?8j9 H; >?<H`P ?D?HZ@?O ?E7X6&@OF`R] L?4*?7@H6?F#?dn ?:#ZG@. ?PM?"e+3 QG@W@J * ?GB 7| AVR@L?l?M*@?LZ@?E?W@?]?Ӡ?A `Az@D?@fa?c@O:FUM H3O ?EU?`?XI?GxԀ?'LC?)q?L ?) [$gb/RI+>4@=uW?+(?f@?dJ ?U7X?XX?P?c@sc??`?SS?Ax@?5H ']d K} ?cѠ?ap`KRU:l2Rs?9'?P0`? Q@R4 @`M?9c ?V?P;B I2DS-t?R/,?C$G`?3"l?O ?R%?V`?Ub?$O< E.`A  ?6t@?,/&$̄ @?D} OVŤ`+<?2 ; @ f?Pq?Sj?Qh?N,B]^VR.>`#>%~DL@?"@?J' >ߑF Ou>@? ?S1?T&Bݷ? E`?_ ?C LB] ?Dy`?]?Q4~??`??F`V*F:?,|`) 2@IfA `E@KXf?%Q?LwWJ?<?d?he?` ?F ?M)`R`a_*[=;/@L|`W<{`1`?FFr@?4?Q|?^f$?WȬ?7MXR[C{@0?>Y$`?E0?BH?d~?[À?4Z`@?Rr?[T@?RO?Ni@?C]׀?8~?O?.~GSrD?EU ?lh?b9*?*u@?*jLcɠ2?G@5x_\"C&"B D`?R6?c| ?Y`?LX?6I@9@-@?L ?G k?F޵?G?9?RJ?Z?>D#h?C?QF"?Ey+G%E`6`_BI+? F@[؅YTY`I[?Q?`J?Y ?G(@;.g@??H?N!oK `;re?=P`E5|Oz`?̀"?L|?GOOF?H ]It ?D ?V ?9_T`79@2N 7m`F`8}? @F3?Ju@?a?aw ?XF@?/WIz\U`YaxVl^KV#? Jao@Tp ?'?Y,D ?W@ [ H ?O?9/ =?Cd ?D ?SkĠ?cK?U@2N ?8#?S`?HR` ,?V,s@?c@?>@V?I+V`?hҠ?Z?GsB`?a@?\$O< ?e ?W`?N2%EܚE5@?5 B\K?'[?c7?Z|\?1 `?"og@ ?3)ـ??_?̄ Nbm@I[?S$G`?Y`2 :`?U ?Zz?B:P@>(?Q8<3@HF@Ɋ@P"@L5 NjV aI8U?? ?8(#?L?]?R@4@?>!o?IÙR`O+<@*Y S4?'`?Dڀ?IO?KT,BN ?NK?7#j@@ ?%p?5@H`X@X1SvP@A6?,:?Em1`?8 ??F|K?Q~?C@?>z?Y[?RnN@?'`?6l+>gZ_RV*2lrO@G;?+<1V+MA?6 +H`XO`Ec?.?Ch /d aDOf`?[ ?Fzp`UIQ?2@?Rb<`?_n?T*#4*? ?1-@?"?4 ?^?%`?ex?->^=Jm?_ ?L*9?<|`?_#?^4@?B)?Q?f?h=?Yu ?N`?QV >@ao`9N?aI?PJ:p>z?9rE?; @?Q?)Y C?`2?\GM@Rd?I ?RD?2v?>Ȏ?N`?93@?/_?NS`v3`?Ob?J@?0`:F[_ H a ?S'`?b?Q Bߓ . ? S24U sa`:THbˠ?#G?C`?K?ÙS(8<?Q2@?E@31R4`t@N!P@ G#?4?Uvz ?\j?@ҠQWL?Kv?[40?; 4?J1(?J96z?%&?IQ"$W`?K@B@?H ?T1`?WS?"2`?&@?=?G ?"V*bZ?V?F3`1v `@[=?@ق?G?1 @7uO; Q`!S@?D8@>?>?Nv ?"GORW@>v?XO`?D/a?7?;`'S@?Er`?ejh@?k?cc`?V?R *j]6E.?W㙠?O`9' ?7fB?*?Jl?[?A0J4ޠ?A2@?c։?Y1 CTM\? (?3?&"?2o?8m*Pe ?O?d?XN`C?M!0 ?P8?P? 8@?. $]`G9@=$5 ??LX?98 a ?/ ?9;0 ?5 ?0A ?6"?7m`3h0?6*#4@2QEB",?I+V`?Zj!X `5V?4ؤ?!S?J(?Mu?,?4?D: ?Iv?T&`?IS?AB@09@@87@593@QbRs@H%OS7d ?S??\?V%?NWI EW@2Y@Lb?I3@?Qn`?2'5&?@?GE?L{`?N?E/-z?P`?DE`Lp Uu[Yd?#R`?>`Pet C@?F?A?EF2?Td?T[?P6=c݀aCY=M0SQZ5Dc?C։>Q:`(?J{n@?!%?CԀÙ\XY¬ ?%?P ?SM!@?N'@: ?>k1a@_`Z" 8<@;R,c6L`?VI?^?A8\@?$?;3B3{@L{PHj9 >jxD?Bw?^S`?(A_@WT@A?OB?L?08@?T\;?Qf`?6Ѷ@?.4@?Fl?B$@P`?*G?U?AR-V@?H@?`1$8@Z`?9N>?%`!wW?0?`?@@?K?EQW?@mCt8f`C6HS?,? UfA6?RH=`?C?"@?P?P7 ?@]?D@@Qd=r?NF?X*)@?IP2?D`?^?c?S_?A `?F +?7@?C{@?T?1{@UbXq[Z{>a ??wONE?+/ ?7;B;<?zQ`?Eg@izR-PE›?!wW?0w? >8=0?#KEM^w_Q ?]?aɂ ?I-?)*`?R@?Ub @?(2`A `;n@?,$`?K?7. (4@?V ?e>`?1 @[zQ`?R?6|K?A `?Tm@?IЙ@?;y`?Jm?P?R7 ?=u?#Z D?Ng@?d@?YO4t_@O%e?0?S7Ơ?qg=*@?AWƀ?-\Mq F?8?Uu?W?B]C؀5T?h>Aa@K h1a@?Q `?>4@S1x?\&?F?DcA?Nf$L ?@@?H`?.~G?Rr?a/?]v?H?1)Z?P`?^A?P#C:B?7Ӏ?O,`?`!6?c?A/R;@Jǐ? zQ`?Tl ?H?#`?'xԀ? `7m`I9*`?ES?A03`"I?>?Np?Rlr?Cж:@A+5^@c^@I ?B 1R4`Eڿ?Kɪ?T[`@Yb@I@?S'`?`?QCY?+>#?LF?WQ?41`7 !?G?Q`?1.`?E?Zj?Xgp?#wր?' ?Y?`?^JI?PH ?GS@?J`?P8@?Va?GЀ(?O?a?IwLX3`?*3@7. $ c@W`OqL`?Ft?S-@?D]?Mo-@?6.N0?S0?aՔ?V'?I2?:`21`:l&?ʈ@?/?@??4?4R?P?b Q ?^M?D ?A?I?'`J+JGp@?G@`?`}!?PrA@!0 ?6RZa9Zj`X|ʠM`?D5?ND?3@?I ?V ?Mq?5S?6?4@a@?@W/ VӑIc C ?&G?```?c7?6q'BGO?S?ZcJ+A.?Hh]?Q`?C@?4?Ax?N!?B?"?BQ?09@P:@Ti; >:@?W)?Z3?C@(<9#OOa?&t?:r%M+R$@?<?N&mp?=v?d ?dW `?V6?S ?P?I @?=M!??K@?I۽?N?W. ?Q(l?GH ?@2ߓ )Ù?Ms ?P`?D> ?OA?Nk@?C@?D?vI7>?F@@?An9AN`U WKˆ@BIWQW^Հ?2`?Td?:`?Tc?P@?B-P?N|l@?Ka?B4 ?V?Pr Pi*Y@=3> ;P,:?G@?EP'?;+`?[ee?U!?9 ?E`1?R@?C2)?T*?]~?N?% @?5Be[]Re@FZ@?0̂?GH ?I?C؀GBJ >z?HM?*4РZ1(Y@?"?:r%R M1`?L ?N(<?DR?d ?^IV ])@RlrDڀ?=!0 ?A{@?N?Sj?IV ?A2@Y>`<@2o?[?Z ҠKT@‘?:H?0??]?+=P;SѠ?4e`?RK@?> ?Jr?_?^?`*`?f/<`?]>5BY@A?A85`?<Ԁ?MDx?a>>@?Se>@G c ?9t?N٠?+C KpI*`?5. ?D ?"&?P?Oo@?1S'D`?@?Z?MOE@;E`?F?E": O%e4 E@u@9c B(B`?`?Wɚ?^4?B% J qR̀J}I>#?L5 ?I?;d?!.J߳Iξ?P`?SȜ6F k?Fl`1U C`?S?af`?7D`^Za9^I[^^`B??C9'G@?> ?Q?Ji`?&`Mq WA-@?NHn@?PF:@?S-?CR_ W`?b@?`@?D ?=(`?Kр?B쒠#G?5DWAR:?89?UX`$8UhO APY?Dr?aϋ ?X.` = Tܠ6`?Cl`?E.?[v?]5QT>(`?:_PU[טL|`JiZi`Iu?/HXSx@?2?@?Q$?@9@56Ѷ@I3@RJ@?Z?*`1l3`?,@BݷQ1FѶ@9+V`%›?Dn@?M(+(N BIAqŀ5e?8?:?#`?D?H`?D?8`E ?M@@?_ ?T`?B?G0i?U ٠?Zr?O?[?^@ ?Ù?3@Au| !6`?\@?__?E?D@?S ?Qw?42V*?F$?Y2L`@B% ?B<;?3G@???%Q?6#*?P?D^a@?T?bx?Ji`?C?7. I R?Cg?\`?Rq@:nnACY?X@?ZD?cd ?Zs !?B$?_?V?&l?@`?P'dHA4?<(^ &O XZpb' W?^e ?O< ?`?d`?Q 4C[ ?:j?QWƀ?Kd)ÙIV ?Aۜ?Q@F&I+?E/?&&EX&t?$?H=RK@?L?a"?24 >U@?]?Qo M./g`?[YS?V`?@Q?R8?_`?Pؔ`? Y@??U@?DV/A&"?A`[04? ?Mq? k_PS@?I|?>K$gQ`Q{?@`?_V?GMN=~ 5?H?V~@?Af@STVx?c@?SB?XH?7T@[lXeQ‹3@!F# \Ox?? ?Bu?D]`?]?e?Z 1 C?Em1`?Vu?H2CBqҠ?4[`?G?R ?4xGC{@GӀP̂?4@a@?Y3?R<+?LX?K?6n?Rc?`;?&&`}!FO ?a{@?`ؔ`B4 T?@9?G?D`Jl`OI{.U`CT?Eiz?@P DP9@F\;?96z?c9?ff?QW ]g?#?P@?;` 8F!O ?,X?;BS%5U~?,g`?3eD+c ;>Psa`M GFP ?E@?c?RI`?$"?W8Ġ?R`PPP2c?GxԀ?O?4 ?L(^ ?];?`B,`?[) ?S?@D`?9 ?K@B@?L|?sc7`?."kvT&Dڀ?D\;?A?,:EV_D̀?Jj ?K?F ?HY1P?51?]o-@?IS V  ??W@?W3- WG>GS,&*?$ c@R\`TP)x?CB?LW@?UB?W8Ġ?-U.@[%U^iڠA ? @?4<?#Z Dy`BI+?M;/@?]=@?Cl`#wր?Tp?S-@Sf2XN?I ?a.?`ق?S(1 @?~?W<{`?![c.Wb ?\Y ?di?!2`Q?A ?R[0]`H|ʠD7LV@? G?UO{?W/?]M?`I?F(7fB;I ?F?NN@?zZlU ?g`?R`E/`Fo`8y?9@?=ReYG0593@@??Az@Bu@^`?̄ ?P{?g"@?`~`?+a ?B?IEU`JDS.}?B쒠?RĦ`?3)ـ?<Ǡ?UH?X6 ?50`A?6t@?F~'BuSC?&I?:@?:_K :g`?Rw?X?&@@H * ?0~?V?[6 >`^@?&$?a^?Is`Z? _@K+`?@j?Nl?O*?2GOL@?)W`?K<C:Vk@?;Ѐ?@x`?'LC?4?,D8@CZ ?>I ?FUM ?V@?I,`?2o?R9b?0?08@?c@?b쒠PFb ?2K`?b?erL?`^?'qgNF ?~?5@P^`NqH ?Q @?`c"?E.h?O?Yc?@?>`4??-MA >@?S?Jao@?WzzQ`?-d ZVK _B`> @???RŔ ?2VyK ?[) ?f@?X`? @Q$> ?I?Fm`HQ?Fq'?]3?C`P. Zǐ\Y@P}? ?;>g?K ?W@`?@'?=q?A4~?PJ0צTQ;р5y2<+?Iq?X^'@?H<?>!?GeA1X@>@?Z ?N),`>a ?GQ?G?G?VP ?QU Gh@R[?A.?W?Wv?]j?K} QzP;?*r?6#?@N> ?Wׇ?\]I?K?Cf?];/@?b ?T??`?@?BQO a*H _sI@?I?[;?WP@?GO?CIjF(?<?do ?e@?JZ@0`3- ?6`?Om?GsB` :@?P| ?g%E`?\ q`2`;B Q Qf@B@3B?0w?Pi*#7f?UU ?\}?H}?R`?Uc`?O``?Z`?P ??c@12`?$8?izK`N?4@a@?@?;@?Q}@?CKEK>gU`?ˀ?2@?D?C@5~?,?7@? sa`>EOF^ 0`?@q?Y?X&r2Q`BP`Y@?H`?@9@6sCj?b ?T])@?X?B,3@7@R`?5izC؀<?@?GKy`X[Jnn'D`?Kj?_?\#?G?F?]a?a&?Rs@?2-'M NF'e ?#mN> GӀN?1U?Rv`?,|`@N> ?Byr`3t?7?ao ?f`?W`?0 ?-?O_?S@?0_`E!?Dn@?`?Q;??@%d@&2`Q" ?8MtS%4@2$2 ?[7@?c@?N&?E\{ ?Sc?8?3e ?"P]6@@?CN0JatBv?T[`?U ?BI+ Y@!?6ƒ?:68f`F39WD9_T`?L?K>`9P3t?E@?T??YRT?KπNJI^%&`X'` N`8q?/U@?(+>@M`TS@?1T?]?T۠? (")?2h F$?/`D6W<{`\ [`2J?T]?S Z?:IK?3@?M`?Tp?C?$>B@CXE`?Q ?erL?a)3@\/9?RӁ@lMzQ`?D]`@H !0 ?Nh`?3P3QE?@7?Ch IJXk 3- ?6W(A[?A?eG`?WkPZPE.`?8:$M #e 0~HU ?#@?=o-@JE,?PQ?Y ?QN}?$AU ??DHM??L`?KO ?Nh`?U-!?84{?B( ?V(?W?Ro? :@?MW ?@:E;̄ ?.p2GO?G`?Q€V6gf[ÀQ`P%?2`?QWƀ?Az?EV?A]XM1 Ro5Gk9|?WA?P/PP>h|?>`?P @?TV?H0#ҠK"@. ?>?EDW4: T9 PA€SR`Jk`?U?^z?=1T?$^?Nx?Qz@?9jx?"@?+?!U8OHXl@x`?Cf?@?2Ŕ ?HM?)EU`?K@?H`?:D?J4ޠ?H.͠??;?SS?^ౠ?U|D@\2?%&?`=?IW8@?O B@?1RPQ@R@?0  U&P? >@R`Q`?Gj?IÙQX >HM?hO`?`[`Uv^2`A"?% ?I*`?>`AV DO< A`U`Vo?),`?Z5?W M1` ?;MAQ\^IuU\{ a<?Q#`?BX?C։?B-Q܊V"! `!x? 2@?Q5^Vb m`\+' L=@?E0`?Z|\?Z[@?BD> ?/9#N^^wU ?= ?5.`B?E?X4_?"Q?@?GF?_O ?[@?B ?6 ?D?Gʈ@?Ro;?NS`?8|ʠ?OQ?T ?AS ?4^C؀.`?ET?Gv ?0;?Pޠ?\W?Y ?JVK 4`FK@B ? ?M# ?^!o?  P?6@?U.?1YHM?U3@?U ?/0?%Y`?B`?1 @Bh 0%d@?[E`?ZQ@SG@?V+?QZ=9b%@Ppa ?Kd?T$?D#e ?0?T: ?O:nnG>?>?J`D9Ru?<?R%@JGp@M Rt??>ol>S@H ?2GO?Q?Ujh@?P@_5ܚ?Tn@?bq ?Z|?@'?TrbHNݠ?8yESL`?RI`?ZB h> ?3`?08@?93@?34QR`?=ϻ?M)`?I.`?< Q.U4?$l?$"@?G*`?P@?@ e@3pi K=%&?1?0@W`]q?)?O[?@>dH͵?R?@?,2 7@?E?Xs?O?"??o@?REt`?U@?\2 ?Y|?Nޠ?Wa?X<?Bu?1/Р;<ZD5= R? ?SǮ?V\?;3BX^7Bp)>?I?T/6sRY@@?U!`?16`?›?Y @?YV@?@צ?9 ?C+?@8@?"N ߑ?J q?E^VSe V?3- '^Ȏ[APY?4Z`?Q?Kπ;Q!>zQ`?]r ?b(@?1 `X]9D7?;̀KXZ??^?_ @?P=4 9EU`? ?S?XE?.`7Wh?3?@d?6?@?+΀4>?ET?R?Kh`Ib%@Vmp?6|K?`G?N^?e}?P QWIN@>蚀`?@3VjQU 6L`?[YS?b?Ye@?49 Fd(?Ih@?c@?Pk@Z?C`?AjX?/9?':@?AV ?3]׀BK?(<?%QN>`?2qXMqHl?V?P0 >`?Ҁ?D>?H8`?M?TNN`?Vc:`?WS?H /@*? ??k?M ?DZ`@`YObi3P@Q??I?H`L_ X$`KGKrec ?U?Qy?Ofc`?PצDV[WZ1?3@?!SP:M1 9{-@?6HM?:?![<K?sc?FN4@b@SȠ?/ ?B1`?F?4 c@JpJ X4_Sh 6W(?0̂C \x6DZ?K@a4Eo ?U?Rx? <@?E`?W;?h؀?df@?Gd ?1 ?P<@?P?M?X`?^4?S?qgGd 4^@?C`?@x`EڿO=?APY?QRF^S?:}IÙ]< Wx`7. ?I=?``?W 4t_@H`?#?IP?RnN@?[b?b{M?a܊?P-< `Bn?6 +?N*?`Qw0U?SP9n/@bx`S8`-P&SǠL̀Lk7KP`0Q?M7x?@_HM?D`6 +. ? f_ @P?V=)?ZX&?U.`?P`>z?1)Z XH)@?Y> ?J?Byr`?2GOQ6`?Q ?<:A-@RѥH~?V6?_?0)?$?T8?Vb`?ThM?S?;jB>F?Aa@?W?a?cH?T`?<2 @?$?Z ?c`?[O ?[?[Kf?#@1 ?+?t?T@ Ҡ?C- ?E}?>@?6&M&@T9?4t_@?D]`N R?&9r"Ŕ [UV]? F?"`Pʧ T ?E FnaxEX?^$8?\ `"U4@T:E?6*?Ec?J_lWլ`USe >Q8K hVVI;`LT@̂Pp@WXUM ?0?Bғ?TGΠ?[?PJ ?+<?"V*?2ߓ ?1CY3wրWQR?=*@'5]M?@*`?#IqT`M3.`6sCBFP Z5`R?? ?#FI{.T1 ?X0?Q `?)&$@\`?K?[Jx?C+?R9b?V\M1 S?'LC? Gv!z@h= ?8}?D@m?Q‹?Z??c@_?Mq?B_s`?> ?T%?P9@U@@:_?A_@?P?[?WӀ?QjX?G`?Dv:?O9`?:u@5 ?K?W@?${??Bp`2N Ho O?W?Vm?G4Z`Q?Sa@?Y۽?7V[8?[\XdGYC`I K Iu=?:nn3`_euA?a-?[P?!%0~9 E`?8q@@ Q$9+`-,@% ?5 @ e@Q@WaadYP8?2и@?(_>D?$[`??c@?D^?D  W`?I?IWQ8H U.M?=!0 ?1RNDt_@?+?' ;E`Z N`?Q?F)T0@?4 c@ 72D?;6?0 ?"@?7?`?SH|?a?X?ZW ?P@_ T`r?;`?D0`C"l5e?U ?Y*h2Q?T]`?;} '?`IV T6=)?%0FnG`?Π?P?A@?> ?RI+?N?(V`]>m?@@QVDR?R@?Q:`?@?]?Bv& 7?A P (?VJ)?V8 8VCf>Ù'A1xHW6Ѷ@7LCFk?Dؤ?T# ?c@?'@?[` ?Swր?@?A`9OC&#*ZQa!?M1`?AT?<;L`/`RaNK@_ru@QK?G@`?K`?F +?L?@sa`?2Ŕ ?@"M>~G?Kre?U|??scGS/.?SR`?Po@1 @Ff`9W?!R4`?EI?$GB 5?4??H?DCԮC?J?JIK?E!?WB `?D 9@?'xԀ?D<?S;}`?[?K?G" ?V`?P ?Qn?K$gRb<`L{?S?4 ?Ft@:To?%?G=?T?LtQTS?F?BTO@? Ҡ0@ )=>̀?>`?;T@D@Qa@?"lr?Vl?P| &mpFO ?`?=Qw?W?F퐠GN@9@??`?D+@?7iF|KW@?Aw@?U ?^@?P?BK`?W ?X4@?V?\!@?M$?9[?T8 ?R?Kc ?K`%Y`?J?Vl ?*g`Pk?9A?S?GȬ?4[`FT@<va ?8 a ?< ?Bn?QN}?A@8H3@?A2`?D O`Y O ?@?P@?S@?`R?\)K;ZR`Q 4 c@?Dx?V$ ?0PFWU5|8P: ?8`>#?0N> ?Dk5<A?:H?8([@>KB?3 #?U ?U?Z`?c #?Z_?3t9 2w?<1G@d^d8}H`B ? ?\/ˠ?P- ??scB(dAO?=(UQ \HAx@U\F>L?Sl`?R[?Qy?P ?RI?G`B2P2cBmEPAW?+j?6|K'`@``FJJ)5?Iuh|Q@A_@?D@9@K̀SwcH|_l >l?QC@?PO+???JG@?]?U?<\\ ?I?BTO@?2@?T?Tْ`?@Lb?7@-*@R`?Q`%`XF?H@?9[?@D`?9H[Q:IK?7*`?L@?P?Y`?a?IOQR @'' ?%v'`QRi?r?3Հ3?Mq?c?bV`?]:A?\9`?S՜ ?IW?:A ,?ʈ@?L@M@m2lr\3X`K`T ?Y ?Q?O?X?6DFf`.`?@?Eܚ?]b-?Y8U?Bh ?DZ`?L?/7@;n@?"8t@ b&Z c|zNƲ"`?88 ?Q@?@| +j?@ ?38`G>ж:@>ж:@]MQV?S??<4 P (?H?N&?L@?D?Sl?]; ?M+@?``NȎF4@+cT@T7'`0zQVCd?/@D˥ Wpy` ?'D`YXx&@H``%``0@h|?>g#Ҡ2]`?:A ?' k1U?2I?;`?:p?Hq?F10 3R`+6?Kc>#`PL?Ge ?@@?8\@?4lJr@Pm@?"v?K?D\`?2 ?J?]0?QͯDGΠFl`?2K?B>RWf0? ?c@A.?A[?a{ ?[ռ?Ey ?D??S?ay?`~?1R;E`?(1wW?@h= ?Ob?GN@?3{@?,?EЀ`y Ub?Uk?U/*lC+D1`CnG,VGAU?_ר@?d,?P%d@?#?@qD`8Ql3`?K"?;MAMW 0d?MFS`#@V]@D*cXk&?+ hBnN@<@?RJ?B+u`4\`? +`H,@:X&? O?DZ`@?ES?4l?L79?IR1o ?z?@`,}Ƞ2J0 D>?<?V`?BJ 8SQ ;T@?Q @?RGO?2(+??T+?_€?Q?0 e@?1?E?CeDJFaqY&G?N`7р?>`> 3`g@?F?V`>G?D Dr?R-?9wYCz65 ?G F@pi ?: ?=zQ`F2`?#R`?NUmAwWTVFl`%b @L2 ?8P: ?Qs Cy-0 63Vj?-O?0`?3?O#2`V8`?9O?_:?Rˀ?$> >v?9 ?$W. ^&>Ù?Qh`?9@D\_ `N]1 b( Z ?ER?RI?!2`?DGΠ?_y?Y=zY.?Q? sa`Q,?Q ?.QQ)Z@قG0ib^WA?7H ?4?R%@?b!>?D`8#?FD?4aDL?DZ`@?O*?JR`?@ʧ ?Re?Q"u@?F`?WAh|a$Pܠ?G' ?Y ?O'A@pi ?n R",F?I?L_ ?@ ?C)ـ?(?1?V5?ZW8?7AA-@A?IQ?8DVB$0::pxlDM`?%Y`?RH _`Q`?a@'`?P8?G@?@PJa_8?C?14~?%5|FXO`.`?F`)/ N> ?Z#?_r`?@u<"K?РC>F`GU?1 ?(m)'?48>ȎXC:z?VI@?Q\?;/ h|?& ?HX`0N> Uf?U?U~@?:jS=X^hQfH0@@$8@Se [?E@?e @?V"G?Pjb ?U`E(} RʀC$G`?0(`J}I")>u@T$`Spi (?*j?U[`?`n? M@??#$[`?62`?AjX?CC؀?= ? r?9c ?/a??F`?[@<}`ap`@\?Xp?Qr FK@M?JpJ ?R_K Y,'>?L ?Wv`?\X??Oo@>%&`?:JX&C`?c ?Lڠ?W?Y,`?NF?6`?P+?V a?@m@?Qg?d9 ?Q$S:}I?M9S?B`?B?P?H a ;CC؀?$O< *A ?X a ?UG#jOA?4R?^7?d5?BO?4?T/?:>'?0;@?R`?Y@?TZ`@?M?E/`,IʠG `]`L `M)HWCa ?  ?s@?1 @?\?B_s`?V(?;$gA`?4ؤ?Q6Z?W?]W@?H! 8X`?0?M)?Lcɠ?A85`F`Rߓ ?<~`?Q C`\@TJ@Hd%?-d "N 8`D N`(?Blr >@'`?!?J$(?P(-@+HF@>?>$?6^0צ- ?MA>a (=Qw?E`?Vh`@\?U?a ?@oQm@E ?Q?[P >ҀS>5?[?a?`,Z?Nm`@恠G^ՀI?A_@?.7#jQi`B% ?M(?X\@?B`<_ ?; h?_N?V?5}?N L?@N#`?YSB?H`;?<5 ?JVK ?Q ?G" ?@(Y`9.`?G?1[2U `B6?ZM?bP!?; @sa`?H[?T@?A%5|/_?O@?a85`?X?A @?zD7K$g@צJr%X`SP??@=sKh`? 3Ӡ?C4?R`?V*>5 ?:?bM@?an@?NC?Qϋ ?Pq?>@?E?LǠ?@̂ KUeQWƀMzR6AT ?U@?`.?@h= HPYb@S24D?=P`?F?:F?5?7d ?HM=;/@j'[G-!0 Ms=?<???FbL?H?@%d@?Hf`?7@F`?sc?a6?a `?P?D?C?C ?Q@?Mї@~?:i?ZO`?V  ?Oj ?Y?[] `?O6 ?4?4 ?P@?GPZ? B@?@;y`YuU*X`?Oa?WF~'Z5VxV8t?[@?Q <_ '' $?&G/d ?`?E;?=M?3Vj."U "Y~GfB?'0CW@R@>,?4l?&W(@:@M?Q?h^'@?[j?0]`?I-?@,KπJnn-OPw U%?!?DkALg`G!Ka 1~›IЙ@8Z@?CR`?0?[?Q?;ˆ@?K<?6mH`D^@?A)Z?PA '`Mb-?=?X@?A1`CfɊ@?YK ?_ʨ?3Z OGA@ ?=,T`?J#?I8U?;cHMNTT@ ?>ol/]5R4: q?A ?Q@?E\{ ?HC:?QD@?MM?E&(R$9N?R?ZE?\?bj?[ {@?21`?<?PN> ?R`'E?A @̀4`?Z|@?f ?Zӡ :@?S`?]?"IJG71R>`RY]y ?-FS`?[?1ۜQS`T'Ѐ?Y?Z?F3,Y@GHS>l?YS?P?&`?@'??K?HΠ?CylS`\H`P^4GΠ?Ԁ?=9=S&"?H6;?ef?Wƀ?;?_?e'?O=?7?B%@?A1?5 @?5/`J6Bo$e`K`TW3T8??M&@?LW@?[] `?SNM5 S-0`% @HJT 1R?W)?K@#Ԁ?V[ ?d ?U,?C؀@;3?0d-F+?3)ـ?L`zR~L?7qg?Ca@3ѠEMSRRo@?SՀ?K΀?7`?@?Pj?Y?Q|B] ?C?I0?K?MT??,?@?K@?[?a ?]t ?L ?K>g?M1  ?P: ?PC?H.͠?H?^?Q/>H٢?Rf?_?#@?@6?*E/7e 3`>#?J:p?K h?Ox?Pk@?* ?E`?N?WE?Vߣ`a C M|,U T@?Q?6o?,?SrD?^?]I`?Xk ?JE W`"?@?+a ?>`?Q-@?U%? Y@OU@>u@?P@?9 @?V?ge?c?T$`?Q$?CԀ?) ?F`?![Q{@>?1 `@צV.N\`Ru?Ca@?V ?\ ?e?VOAT9Jԏ8? I A?_gQ ?Y`F"! ?S?RSa?AsRb9Re@faH6;?=;/@?TI5c,b;6?W(U T?12`?B ?DQ?T?SO@?O?V"?ZIK?R?(H@C?0;@?Cl?K ?^ ?a2`?BfHU ?N`?P ?Q ?U@?W?JI ?&@@?R?an?D9M@5"?H?R7 ?>v .`?TP`?VsPV@Po?T ?Sm6 ?8+?E.`+S~N!?K\?`?WO ?:+?&^?P F&@TW@D[`;Ay2?AU ?Ud?LZ?K>g?UB| ?P9@?;>g?3@?8u]@?L;?WR@?O? h?0 e@?DQ>zQ`E&M!0 A ?Fi ?V ?Q?G?*+4S@8L`Oك#G?A?E?D?Q`?M0?ZI ?T# ?2GO?-FS`:+=O?/ R_s`Z`?E`1?2]`XtXa$?A%?Q1`@h= _ʨD7:3@X?Yc?B]H a ax@_`9+V`(Z>'WJh?P'?\$`?E?!U@?0z?N;n?E.kv.@2w=+@&mp0`+c?AW?R@,ZfH?@?92?/@?M1 ?R?tH ?0?L(^ Bh VDc?,Y@?M ?F@>?O@?SVjH46?cb?cf2?=ޖ?e ?B$@?!JT\`.p?V ?Sw?G?B ?9 &`:`L;re[QEiz?T: ?QAS+T@?Iu ?5CR>L-@?9R?H@H\@R8?H8 ?V"/d SfL2D`A.@H 4<?*nn'D`SPV% UN?2]?J߳?H?I 50`R&?a@?;@7լ`A?5t?3`?>s#3{@H9@Y" `&H~T7@b$ S\QÀL3 ?P@?L(^ * ?G`?+=VO 4x?CӠ8<@^?#a@?A @?;EYH6?LV@?Uڿ?/ 9wDVA€-0 C)ـD&b@?AWƀ?L` >@ D} T WYC`OTLs ZҴ J`?4?:#?/)?PR?WׇL]_dU@K>gYG0Q?e @a@6I?scB`?CIj?UI?;n@?IW?bu?` ?= 6`? ?N?JZ>D?*$(?JIK?A0,6 5p?4 ?Ce 4?5w?@?Q;?U~?1 \Vc'?0?B[B]WOBu?E@?,XS P7?=ė?4K`ND W~fXP?&f`?8Π?;I ?Q?0 P??d3f O`:F?L02 @GfBU|L`5<?#4?* QU~=U`[-`s ?DK`?SՀ :p???9f7| ?F=)?FB쒠?5b @?Z$?S~V@?L5 ?N`?J?O@?JR`?A`?H@?D9?$ 62`PdE?HC:?RI?: @: R^YY`UέK6g?3e 1?"$?J! >F=)@`l?N?T@?G;?Hf`?G? >ݵ?@?A:?Xڀ?\`?Q?Ji`?I)?40 ?:M?V{^?Q&:D?83@?=v?TH ?&@:$(?5?653C؀QI*?16Ѷ@T**ǐ?8I#X!`R69rqgKD6@?RH=`?QVJG@?Q?D :i2e/=,Y@>̄ CM;/@?0]?HY?-? n;`H7 ?(H̠?C}h? ?1`<\\ [sR?R(?c5@?X ,:5v?5yBDX?T c@?K$gU. UE@>4@?/=:![H`4̀?W?P?MP?] B?_?U4?G=?H?R=@?T ?R`?A Eb @SmEkV ??Af@?D (~C$G`? ?9jx?O6 ?@]E.`TOH?GҀ?c`?Y#??P?^& ?MX?7?A `?? ?@A>?8 a ?>"?R`?P?c@?4\`?@?4x2?4?Xq?a7?_:`?C 1?"K?7#j*9R>:@?L?E@? :p?#SgSv??%x:Ҵ -!0 ?Fn?U?5 UG @@ ?U@?>g@Ru<,?GB ?P9@?L\1ۜ?H~?!2`Ep?Q `?[j?7? U?O"IK>`?(W?LǠ?HH̠?!Q1ZX&ER ?C)ـ?SG@?P2c?<{`?A2@?K{?-?-@?P2c?8ZŴSo{`?R@?Z7?C`?n?:G?Ph= ?T,@?Vk?^w?P'Q`FY[Ƚ S CCg @NQ(`?Jm`?D8@?Ey ?VHM?Z6`?T@?HN^?(981y?FZ@?PizShWG?FFr@?Pݠ"&?T[`?Vt?H?Tl?Ys`?BCIAX$J?@?Bғ?17@?Q?WN@?Bߓ 5??K D@?Q܊:j R?8`?L/ˠ#m?1{?S[?L?Ju@?`?ip ?b .@V]@D\;4̀Er`J`CC??*@?:@?8Z@C>F`T&I 7@J$F$?F ?[,?JAU ?O,:VR % @?R$?[Wx@?`x`?F D ?&O ?_`E?P?a?H?m?%&HN^N#>?BRs?2Y@D{U`SNL$2p)?E›?Jk`?Qz ?a R?W@H a D&b@?T`?Al3`\ S`?4@m@P`?;y`?R ?H5?H6?@`?D3a?WP@?I+`R\>`Mr ??Q?Z ?Ru?<?0:@?6?>F?Kre?SD ?LnmR@U7b ?;d?)q u@?D?:`?R?UU ?=?;@?U"?L@)?10?Y,?^}Y?P@QD>i5m1`!a@??;?T(=?R@?JGp@?I?G?Rj?JWaL?:Ҵ ?U1C@F`?Rr?W\ ?ER?Q܊?c ?a6`?+JkA\6=)6&2@?]`?J?H`=?4^@?'c GϠQKKPQB@K@B@?6 ?O ?Gd ?7`?;@?? AQPY?6l?Q_3?D?QD?BL@PkH5@K<`?3`?Z6?J#Ԁ5@'ʈ@?AV ?JH?)F5 Xn RĦ`*PA ;y`?HY`?B'?@ʧ ?`ݯ?W`PM=N?XQ8dnZO`.Z#`??`?W?~`M \KV&@?P ?Z@C H`W@6%?9A?T̀?`El@?O2@!.?mV*?G9@?UB@?HΠ? >:p9LHė?MSR?Zŀ?V޵?J:p?H?Ki@?@?HM@^`Ps F$ ?@*`?Vy?V?S 6?G4 @5"Od U@?T@?WH ?Un?Xu]@?V}9`?T@?M5 5| @+(?^y?`J;PKu ?Eڿ?U@?FbL?Ad?Sz`?Y`?P?"GO2 @?-!z?%5|?V?T?)Q)RŔ Ti; E `Fn`B ?!CY?2 ?A[?Mo-@?IW`?H?7Ѐ-(?AG@?CG2K`?A; @8?38`B`Ff`?Br?M!0 ?06`?)?Z,?^@?G0796z?H?V`>`?8`?eZ?] `?Fzp`?C>F`O@? ?ZR`D`iXԠ^0恠XVb28t?Qw?+@Ob_ _ZQ>?Ms9AM+@A L@Ca@?6xW`B})  ?:@??QI?U;`?ė?&?WN@?MLR ?N?X);?N?%`>N@FW(?3Ɋ@?2C@D7/̀"@?'LC?@@ ?@?G`?EDa`<~`?A€?1CY??8y?H ?P@?T`?Yϫ?_/`?Vu?)v?Р?P@?X)?Q+5?@d?;<?N~G?Ud@?GJhA_@?'`re[ D@X?>s#?FY?QjX?G*`Ay2XlS1d9C@<? U?=(`?Niڠ?C?D8?F?@a@?Cc?M`CHMU@?I@&"K?+?T: ?Q_3>@?G' ?V2`?EI?5u?T>?fa?c(t2 ??il@?e?"8t?1!?1U O1G@?E~MQwa`N٠?3- F`_*QDG ?7 !?5"0UH=QTA `?7`?8L`ҀGOW8ĠKC?A6?G@?9Q?@?3l`?.ol?Q?Q*H ?6D?\?R/,5b @?.K?U_D ?R0?K@?@8L`WP5@?6mp?%b @???JE?F`?Ha?E`1?4i; ?3?@Q?#Z Tdg֠\7AO@_P(`?6F?Q `?Z(?R8?. ?6ƒ?Iu?TH ?ND?#D-@?B?T+@?Q{?C@?ES5@c@`zW?41`?2lr?S;}`?B8t6O O19=FѶ@HM?2 ?0`?CE?24 e@3wրD8??b?\l?J?*l?GfB? 1`?C&"D̀-@?H0?R`?E,65 7`+` ?Fx?\?T SyU?Q?T??I6z?IHRHM1 Nx3@?@ ?9/ BTO@W| T,@=M;<@Yb@?(?=J ??N??K?L?#&"?8?? ?X٢?YP?K?>`?6@?).`?;d?A?0?=?K??7H ?g?ASA`@\`?11`?Q?>4@?)BQ:@?5LAa@BnN@OM[2DI?%?17@GV=)ZMO?B ?Mi 5. TW PCPL PN?&@?Y ?`?[À?B =M ?=d xU;3&"C?``?.;n?@ ,v[@? k;Md D} ?@]?^ ?a?Xk?W?Zj?P w?J$VE\{ ?9?.@>HM?K4x@?B?G" ?Y1 ?]?; [*6.N4t_@QV*?ET?!z?.K?Bs@??7?E›?5RIs`MO & #@${?= ?C@?:`?A @?=7x?)Ù?GO ?B2?W?I*GN@V4`S@?8[@D[`$@a@?A6`>,?84@?H@?.?Ee?Q?= @Ah|IP?'[?K(?B$@?G`?Pm@?M~ ?AT HM-0̂CIj1[?B ?50`C@B?Hs?\}?LM@DBғ?>BnM@N@:@9EU`PP^`?Z?@?c@(`F^Jw4]`?2Rs,6 RaNJ4ޠ?<}`?Y*`?^?D 8m?Bn?HZ(i@d _' Q€?:cJ?5PF޵=Qw2@WrT\tFi !x?9yS?Rb<`?X?U5@?J??ˀ;̀XX GsB`?EQW?B ?6Ѷ@?2 <}Ƞ5&?'`6`* ? X`asD>a ?6:`\Y7h@5xU?EX`?QA?It?&`,:92."?%p?'=i#- ? @?@9?1U  ?̀?0?"]> 79@>P)-*@ Q8Q@>Q?A/>l?"$?P"@?R8t?TZ`@?J>' ?5?J?'Ҁ? ?/71d;/ A0S1FS4@w??G4 @?NF?C@?3?B] $d ?@W?S0Y@?R(@?A??9?P&R?K8?+ @?3N?=+@,2<+?Le?Ss2 ? 7F퐠E›?4@?Qa@?S`?:' ?9#?P$v?:3@PKu \$`Z"M 6$?X`@?Y?=N?L}Ƞ?QzQzdDZF@R=@Ge ?AÀ?Hz`?O< ?07LSSF?AΝ`= Xs0`?Y;?X! ?C")14~;} ?5b @?OD?$8[ˆ@?7?f`M(K2`P^`P_?,3@?A[?8L`?->G!VT2tJ$(|ʠ?'c ?48?G@?@8?t?LT?Tn@> C@?4t_@?Ob?Ip ?G' ?Oك?Rg΀?N^?R'?$> J:pMDxNKUS8f`?NL$?AH?&#*?P3Q?\?\?@4? L`_`?WȬ?Xm ?P0`?,4 CA Kπ`'?Z%7р>@?JIK?` ?^0J?JE@?K?Xh]?W\ ?/0Iq)EU`?K ?Mb-??7`S )Ù?Y ?Z ?W`?`6?X^'@?7i,3@ICt?O^?X s?,X1;?6#*?).`7fE/VǀV ?K`?bl?O`?.JI?H?. Y@?MQw?L&,,"p?8j9 ?>N@?Ge?0B(?Bp`?Z )`-!0 R ?R#@?c?X|ʠ?BaN:yT`L͡>W`?@?6`D8TPd5<?6`N#2?H<?7A?7=i?KR?<3@?"?`?'`?K?Hq0 7i>Z?Gd?M3?O%e?a?`zW:p,|`?O?NF?F`q`?K?BK@?Hz`?Wi?ESA ?B}{ ?Hf?S`? \@`V2^ ?As`?a?a͓ ?Vހ?#`P:kC?=gȀ?&%g`A6?9$?@i?L?D?B3j@?Q.`?) F ? ?Eb#?Se`?b``?ZR?2@?1ij?+R@`? @L>??7v :+Th@G%D-`KIO2G`>LXG[ HK?*`?E}? D 3X?5 ?A6?95 `CvVC-@S`?Cǀ?` r@?Fͼ@,??E@?D ?d?4Խ?/ ?t@VGXO6JC>`PgNi?n>>Ǒ?N ?N1Rb@73 ?Q@Y^:`"%?6@V@C`6M͠? `H@Hn ?43$?RNY ?S#FVC ?/- ?a!`?N@T[Zu ?%@?_ ?[+?Rj?Zp?X9T?Qـ?U ?'`X*.J ?G̀?Dy`0?P?T?L7B%0b?&B ?F_?d(3?[}@?2U8a P=ɀ_=mS?AX?W?[![@?T[?73 ?4 ?Q!?BUW@3`?*d?3XH8o2?Ma ?ZF?TS-L٠Fr ?EG4?ZDנ?[$ ?RA0N?LS@?T5 ?Ho2?, ?/ >?P ?P A:HWJM= ?N{?S;?0|EpJ9 B6$-?<?HZ`?@"ڠC S@+ ?Ln ?P] ?Eh`7Tŗ`Q;L@@G ?NǠ?Y@?:u BH@CGzE΀@i?79w?Q;?KC$R̘XGQ]`LV@Ty`Ak 8$?EvV?ZQ I)?EvV?bI?Fv4WPL$@?1Y>R@; O$ZWH@>L?R:&?_E@?(2@To?;Z?_B?Eo X bBC>`?QZD?3X"6?V?]gȀ?Sn1?S ?E,F?!N|?IJ@?LF@?5@?$)2v@ @6G?Jn?[?;?4,h?W ?W ? `7D?#X?AZ?A`❠:$?.r@? `K?*Z?^?EQN`_t@]ؐ'ݠA [G3 ?Ux?a̻?V2[h>?=$s`?V`Q?Vs?@&8k`?G/^ ?WC@?S3G`?<DN`=@?W?`3?7:S ?C,?`V?b`?GQQDb`L`?B6 ?Ss>?B}{ i .`QU7Xw I?U^?Y?QSL`MZQ ?!&?F ?2 IBP΍`:u1ij8@?T?=r?As@??E@?["@Eo SV^`Z`]DPހ?k`? `?Ot@?Yh?Dʤ ?=.?WoU`?BpVZPݳ?;Z?; @?,L?KW9?P ?&6@?K.Ҡ?^, ?@X`7`?U, ?b1`?G]S`^DW`?/>@T ]]??G(`?&h?PI ?`|?OSO"@?26?[7["@%.?D3$?\/`?Qij?:$?F"GH!-?b@?F?U?K?D``P"@! PgL?U?BG`BD?&@?6$F@A?5V?_ൠ?f ?_l?M?BiH?@0R ?F?B)P+h@?+?],?^ ?J(9 `Q*E֠?XL`?`͠?G6>L?# ?@?E@4oX:S ?-`?H! .??`E@?$F@?0&8)2v@?26?Ha ?Hf?Hv?#i% JSF`?@?RG`5T@a<@S?G ?IC ?B?O@?+ɠNSrGw`7`H)N] PݳYSX4T ?LL?T ?S ?Yv?a?S26.؀?XD ???D) @w ?Y-i?dK?QlȠ0?2%?Pɀ?9 ?26?]K*?b?MݝAPKA4vy U'W*`?T??b@KMFJo?53?V?0I!?6`?H?$$?-$s`?"nj?=s ?WH?Ts?P?X\|`P8@5g)u`>`?17`?Ff?2{`?9?I ?R:?/ >As@?E[h?\s?U9`?L?F?4[?R)P?a ?[# ?S?Xi?Sz@?K?HK? ?1@?V'`?Qk?!&@ZQ % ?>?Ti@?JW[?. `PD@UI`C Ln PB?@?COBp?C-?F/$W`<ڀI M?.:MB@K20#@?J ܝ V 0I ?T?>u @3`?;0BP \7L`1S,S܀9B>Z.@BH@$% ?&?Pɀ?Z?Q.`?Kt?GD@CoHÀ?J@?V,# ?P?79wSXi ?0G@3`G(`?*??H ?Ba@??{?O]i@?K ( /?JS DN`:`@J92v@?DC?:?D$QLUV[ R5 9| MYXj%+?D `vV@y ??̂?N‹?M( 27v ?SSCN >L?9u`>hv?@?N؀?=PBnj.`?\@?`C Z?J?a@?Sź ?Hא ?(@R@2%?U?AQ ?Oj?R6?Q3 ?[-#?Ws?K ?Er?t@7,@)u?A ?U?CO@ ?&M͠?,QVB X5@?9S?AƘD% 05 8C`>`M1_$Y* UG4U`:`?=ӄ?4T >P@Fx? |?2`6V?0?Iy)@=rP] 1 J5@Xu@%M?D`NG[8D)2v@@N.j X!`E_@?FM? &E#`0,@J @IƘ?RSe?`O?Xr`?Lk?@@?%ԚNXYa???X?X@?P͠?$@DQq@T5 _KXf;|A`:h1 Ep`AsDq'h?? >`I)SǀVoPPgX>aCX?5 `;ɠA3 ?E `?Q`? u@`# fTEB ?Cт?Q؄ ?T?S-?H@?< `&%g`T`L`?S?Zʀ3`G͙`?RJ@?YW~?4o>hv4Q ?2?\?0&8L'??7@?9B?Wv ?]A ?Td ?P=ɀ?Pg?J@?@>I ?G"+ @M®?E `?Be VQ.? u@?9@?I?26=ӄ 0>@ 3iHU]`Er?5@y ?6T`?AhvNr@K@+?? ?= ?=ӄ8f=8?>?6H9u?GTf%@Z`XMSlRD_J@G3 ?:h1 ??O`@>6@pI`I ?&f?5}#`?$ ?`?]?<$@3,?Z`?f*t ?]V@?DA=U4W< W@3`BJ@??1 ?L??#[X^{?/L?L[#,Ӧ4h@@I Qp&?Q?r@@0R ??n>?:B;Up cWx`aV 8?79w?6g ?Ô?T m ?̀D<;c`f?O@?UY?N ?N ?P΍`?3Ϡ82@?,Q?Kkl ?I ?Y$?``?EvV ?F_?C ?9 ?L?N ?H?T6`?c@?goU`?S* ?0' $ffGk?9B?+Ng9hT/?C@?3%`?5@3[? `.u ?2b@0k`F/?Er?[7=@?Vg ?Fͼ@?"NY ?-u@?4,h?Rz@H!?$3$?Go@?A?"iH?(u@?Kn?Qnw8TXe5}?4W`JFT RÀB_.`?UcҠ?_`?A?&v4?N?S ?P^`?: #L `X@TS0 ?V?IӀ(! ?T`?a?Px)2v@LdJ 湉 ?=$s`?N`?RP?0?F" ?U-Rdz ?P8@?0i?Cт?H2 ?*Z@pI`Tq?!H?`V?IJ@'ݠ??@.`E( ?/t@% G?L `?6hSK PN`9 AG@?NY ?/?@|?Qnw?Uŀ?X&Р?RiH&N`@&8?Qij?b ?\PZ`?K?: `?72?U޴`?[n?\?Z\h?Kɰ ?0,@?4?W@?fzi@?`i?G"?Te`?Q">+ @Kڅ`@?6v4?Rֲ`?`DGW?I$?R ?@X`?;A@UZS;t@0F ,$@?I`?^u ?`q`?MY?=?QX?P I?|8?&@V@?E=?C??B@?!>'2B]@T &*h1 > ?@`?D@?_h?d+`?27 Te`>u ?@&8?J@?FT`?Aـ?@0R %vVOXvbX\L?$ +Xu@1?S: ?E31@:@?0}?9`? ? Ӧ?O@#Qa T/L9`?V"?1 &`aF_+h@ ?)@0k`)`?@΍`?G@3`?J?HkԠ u@C3G`> `?X@?b;?K'MSFQs@D"O@?C`?\PZ`?cQ ?a@?S?*h1 HP ?0΍`?S*?T?``?]݀7^6`P?T}?a?@s@%?T?\D?UE`?H(LQ`\? KR@?O`Q窀X@F[E ?Z?g?Z?EJ?RSe?Y?T`?CϠ?6f?@A'`?K0@?Y?P|RÀY BUMWSTKt?$W`?M??,Qi ?5g6hST m MY w ?36?*??DQq@?L`?"6L `[20Tu>@;Z՛;`?V/?T[?CT> `/>{`@QN%[2 84$@?;?P`?S ?4}5`S$!PI ?*u ?9u2@T}T$@?E@?]??H(9?HW=u@?D?Qb ?@=ɀ?4o?QQ?c?cX?#Qـ?@?$ Wna_\рS`N`U Zau`I\`?F`?R 3 V41Y?@/?`?W;?V`?'MLR3F6ͼ@?Gyo?]ǻ?T; ?5@y '`?#N6@?R?;Kr'?I ? a?S>`?A❠/?Ga?b?bp ?R?F@?W?[?54(T?@Z@+ @Nx{?"[Ѐ?H/;@?H9T?Re ??` t?M?LрL?>?Ja :u "3j@F`B@?S~?`I ?M88C`>`?@ I@V^`,2 ?P3?K`?<c AS` ?G< 1&@W(`efYgqGr@?N?4@>湉 ?L?\ɍ@?a{?S%`?@A'`?Bz@T`eX`S_ Vͼ@`[>W K ( 4Խ?Q&@?Y)@_E@&[E ?RT#`A?S?a3 ?T`̥`@?@)ƘB%?S`?b9@?R,Ep %Ԛ?(᩠A[`E_@?A?Pɀ?I?HT#z@GL?Fl`?U%@T bP fv4E?SSC?@@?1 ?Kn?3Ϡ?+20?EX >%D? g`?CHL`Yi (T?ӦHkԠ2NY ?(T5@.3TX-]ؐ?F?YK@?5T@P|+??L/`?M@) W*Irm?L`?V`?Yz?U >[M{P+E`7h?P?MdjELc GW`L`*2S`5b#PZ@4 @?8?K`?TgS`Av@`8?iH?_$-?Ya@?U9`?L"nj92v@?*MB@?Bl>`G͙`>8?Q7`?df{?G["@RB? N?]?R,4 @ `?KS ?C$?2ۿ ??O`= W !❠?V ?R6 ?A?FQ+?R] ?J@B@CQ ?R?VRڀ?Q?``?TlB=? ?BC6@?"NY ?Z@?Q?J`?Q)sAf XT?EZ `: &` u?%vV?P?Y?T^?U'9 ?S0B_.`?W`?[;tQd^Fv4PI Z?W7?Se?Pi?N E@P΍`?4}5`- He`?=8TCb@Q?Hƺ?@b/ DzIC <Ӧ> ?@ב?I\`?^@?U 2NY Q0/@R I/`+A❠?B ?R`?D3$?Ik?UA`?@9@CX9`???<G`P+E`K:+?E%@.1_я@VM5ߠ?(M?G̀D`^v@,L?RG?HM?KC?Ho2?[?7a?P?K?:+?0\@?*h1 ?L?: L.7?\k?d?T?9u`?J0?H@?0}?TJЎT(`?0w ?Wq@?BJ@:|d@:` 0DCQ ?F2?LS@Z `?2 ?'MGJdP3_ >UqJ)1,Zt??8`?R{`@]ZQ V V @UNY ?Eb#D?>E ?^r@?Y~`?F"?O{?=rX@V#?G?5@[zMS`?Mӄ?J9 ?<|?Q@`?F ?"%RIJ@?L `:Ba @Ep C g\ cBm?/?@|@U8`Fo?C$?K?Oj?I ?Ju ?^.?a`?S?fSxKYD49@?B?F3?2K ( G"?6?@FGFr i@?W`?XǠ. P0R GQ,?CTR <?: ?D @?@R^K2@?< 6"?3ۜ@?BP`e?5@?Jy`?@ا?O >?[h@?NPBNY ! ?31K?8?^?XC`?K[?T?WQ?M@?D?! ; t@?@D@??q`ITy`Kl`>+ @Bz@>A?5W EԚHT?C"r ?N? LxVрVsY`\9u`?QB?89TLxX]Y@J+?PKA?Sq"iHJ?3Ϡ?W@?A`GQC/RVb9@T.?.gHe`_K?ݠ?a?)Z܀_o`Gw`?5@?PاO`?3$?PdSi% npcDL\g`YD?5%@?<YaaIo ;?4 A M@N.*`?W?X??Ls?P>ܝ S%Bv`17`BUA TtYLrI)H]? >?Խ?\?aF`$-UM.C*?# :?4$?LB?KɠI N@?M ?D @<Ӧ?:2S`?9C @?"v`??@!&?C?\7?Hn ?Pg?PD@?P`?7oU`J[K`?"@?*@?P7 ?Z?Zy`?S\`?Cbi`3 N5%8ƺ?F_?G̀A ,ub85#`0O8`V 6?J ?FM*h1 TUY?4GW?V?={CE?&`?P?)Me PD@NdGJau`AY?G(`?N$PDi@S?G`?`?ZQ [4$@?DHyL Q.`>6?GTf??8`YrmlWc55[hi@0? ?b@ JʀH|L@`@ac^AlȠ?P3/qTLd?;u?<@PQU[E޴`:S E=@9`3$???`BQ?SF?M.d?:S 0:kNX?33G`?F6</ ?6`?YT@?Cs>?Yq?Z?Uh`?OO?,Ӧ?1 O$QY@?% ?H2@?S ?GD"%K`T>?CGz?82@?9C ?Vͼ@?W ?7,@1@?, ?N{@?D?A؄ ?^̥`?aw?0`E=@?2@?LӦ?@`?$- `5E3}X@3TOJ?M ?R:;A OOBѥ.a ?3o>6E, MB@?Kkl ?V3?Yб?D,hIPg? ?N;%EV*t I ?P#@1[`?N+ @?O{?%DffP 5΀?>`?/ൠEY[NF@V@?Be ?8MU;l`\:x@KF[E ?(M?LYT@ds?$5?BRsaS>`V_YrmD u?>u ?LL?`?D@?^?L|Խ?C6@?G;?6@V@7|XO6W CNdGaij_??45 ?O>@W `8>?DF@?MO S?#`?6M͠De`"nj?RT?J(`$?"z?H@?RP`?K4J`/L8w ;?@?D^ @' K? ?K.ҠZ `6?`z ?c)-??8 ?3j@?C%`?8 2>3$?DT ?H2 ?As?N?Xܜ?PF4 ?:|d@D]"ĀV ,@8TC?P`?VJo?i@2`3LP&8SoVM͠+ɠ?Pzc?M >ܝ K@QLId'?A@crg@\8` ?Ӧ2@?FĠ?;8@,Ӧ+A?2S`?3N6@?$-4T HC`]@b M&?Q ?DV\UM?"3j@?<@?P@?QAXea"????VUIT D @DzO`??NkJC(S??F?HkԠ+A( 2> ?5M?0Ѡ:MB@`?K @?! &^%b?&f?Qx \si @N ?@ ? L?7?\S@?A@K ?Ey?Zp?;?EW L]:n?#%?"z?7?26D,-`?V?V8?.$P*Mq a\Z?.?0`=?b@?2?M&?<8`?:@?%@JlUcҠZ(9\L1b GaR@NG3G ?u?;S ?H(Hj h8R6HhvI@B?@LW P`NRV(@XF?I ?B[ЀL@Af ?N ?<Tl` R?`?F_?\f?_54R? A`[[FJo?.%@y Y@H`?=O@]@EG48OO`Y: Fg ?H ?L @?E=?O]i@?DN`T=> c 2{`?]&"@r@`sP?(@+A 9hT>3$?P"NY 3$BXr" *Z?.$P?^Ǡ?b@?Z?M8Eo H+`?YB?fjk?d?a?@zc? 2 ?_2?WHRV!ij dLZtX@DQq@?L!8`?Q)s?GL?3D1k ?Q?>1OgFM@:0V@Y5 ?t@3GzI CqB"JЎ79w?@X0FNIYT@Q3 &?@ ?4[? N?3?4J ^)]@Qnw>V2]]]3^ U }KaRT`]ǻbnjT۠?V '?`/?>a ??G?. 2ۿ ?*@?6h?;R@?[![@?aܹ`?Ln d% PZg`YбT:S?GC@?3ۜ@Ra@Dq?Ep`?6T`5JFS Lɍ@S``)`Jd@?S_ ?R:BN7>@6`I R?[?[?@\@RIJ@Gv $Խ?Jh1 ?E@;0OπTu`bƴeF]`HTC?7U ?*h1 ?K ?B?79w?Xa ?aܹ`?_ൠ?OBz`Na O֜ ?R?X`?L?S`?& xNG?Cq?U8G`a [ɰ MM R>`?Yz?TT ?3?$ff?r@?<+RCbi`Y HƘJ URuJ|d@/L?GF \< Xא ?O`?992?G ?5!ǮDoR%[h?[@?VVBؠRB,?L! ?G@3`?_@?EE[I`,Yd ZL? vV?*MB@>3$S3G`XC`?;n?W`/?F2?Iv?K8@I ?>{?UQN`?:ʀ.?B?Mdj?F?L+R?B0;h?AǮ?M1Z܀Ku?' ?Pg?Ku?:SFMX2 P MH R_.`E?T^?OgL`] . ?E9`Va@?8?``?G H9TNǠCq?)u?V?U2iH[AV`)`ZW[F^`?6 ' 4Խ?H@?U ?Lɍ@?Ap&?D@?Qb ?F L2 J!~ ?LkI@?Irm%@?, " T,;ɠ?L.?8VY`De`?*?,2 ?R`?6bM{1&?J.?E 0SR0C@Ha MYGk??L?W%D?D}5`N8WDy`?5}I PQHkԠ??@y ?HC`?`o?J`b,Q?H᩠?A.?T~`?^z?-1ZROQ 7̀KM`OC ?.`?S8T ?;tA @?>P?Q ?Lx?Y ?S 6 A'`?2[ЀD1k ?Eg#@Q?B ?C$:KR@2nj?J@?C-@P&8K?K0?L| (ƺ;ɠ5b#4,hB{`Q5<G@3`?'M?C?He`?%h`D?2z?QqՀG%D`@3`?]Do?Z`?;S vV%#`ܝ ?S ?`@?PAS-@D@?I?U ?5M3j@?Mq ?_/ ?T3}X@G ?! ?< `?$-?B?YK ?X]?Ms ?BiH? `7M?.?C"r ?3 ܝ ?+0?Q?[0?KA %D?7̀, ]=@Ti@?@)`?3@QVR)6?B@?.L@?TMB@3`?)@?NV`?Pn?+ZD@בEA0/@IrmQ&@FM@F2VQ]ǻ[ H ?C?B ?2v`?R6 ?S@?L`?\N?U3vET@RP Y?Dʤ ?aIo ?!&P|? & &U` S @?<ڀ?`6?)Ƙ?<?Q,`?80`?3ۜ@?Pi?H2 ?0,@?,$@9SP ?#v?W?SB?JC(?8F@(ƺ?89T?S?P?J?Wb?aQ?VL19$?/ >?$ ?FM?\@?Z}?X?[0?I`)Ƙ?9 ?N{?NY =.?B=?U?X|?^=?T{? `?C?H! Qb Z~ 792v@PA'`!v@?G U?>?8@?E?F?H ?G3j@GF # ?9S8w @@S%`Y/`A?B@?-.  ?H`?JP F@V@R{ >҄6?>a B[0@V_`>2 TdIgf@dtY B`;A)$?BU?6M͠?2@?V*t ?V `?A?9SGw`W?Jd@?`<dDbF?B7 ?)Me PnSo-?b@?PM?Q6?C}X@?Q$f?K0C/X@Q?2@?DYJ@dGW? ?Zڨ@?+ɠPUPo>[?K@?R``?RV?;E=@UK?Ӧ:۠WYs@Cт"@Q w?- ?*RNPQ`?9B?@G ?B?MP?W?Pc@>?G?L Ju@G ?Q?A?5M?T?)OxX ?2X?N%@EeS ?:۠?H W7 >? I 0`?MB@3@?k`?R6 ?Sq?R:?Y2v@?;J?!H?7"M*`?T`?C8 2?'M?U@?\2 ?S6?SGz?V ?PS6P0R B7 (%!@f/bL `# ?SI)?cM?A}PX`X&P I! ? ?7@?Aj7oU`UV@|@?F?'ݠNP@&`? eg0`W i@f/IW~?B@?! R@NY ?C%`?9$9Z܀?M ?U> W|aʠ;c`42}{ ?AQ7%DP?Cbi`?SY2D) ?Hu@?;A ZX?'?1?7 ?Y\?]?[?]s?N‹?F`?V?4]@@Fe^?Ra?Kn?B?O>I V/@UD,$@ v ?Bb@?QqՀ P ??[C?d?]?0:k ?b@?3z@?)`?H ?Y?[s?\kI@?OjD$@P P/^]& RQC?;0?A!N|?6?0?GhZQ I\ ?r@?%JF ?OO?!3 E@i?M.?H0#i% ?A5VQ3`?"iH>湉 9`T@??Y~6?W@> 2%? ?A6?23j@D @B@+A> \@?4?#?3}X@2@Q ?+??8TC]T?Y92?^?P?PQ?:0?,2 >3$?Cl?*`Q ?2G?Zu ??]5HC,2U:MB@$ Bl湉 ?\? ?a 1`?R ?Iˠ?V?Pw I5 T Ӧ?&@@&2?@ ?Y-i?b]?R$F@+ZG(`VZ@6@V@?MB ?5@F2G+3? MP26f+ui@k`JI`La/? i?E_@?K1J /ൠ?>̥`?❠?@`1b ?2[Ѐ?]@?Yh?DA\IL!8`?Hƺ?9`A@KQ)sN؀K.ҠC}X@$3$F@V@Y5S- ,Se@TT ?8 ?Pا0\@OG2%?KC?Z1`?Q?& xGnB6?S-@?`t~?DNA? {`?4F@?Gݠ?Vâ?XCn`?C`?!&@?.`I >E \L<?XZ`?g{?d(`?V?BH@?W&@?cp@?XT?TE?aDb`?[@?Bv`?'D?9Ƙ?J`?D,h?=P?Q?K( ?(u@/qXZ`Lڀ?D9@?>`+ ?$F@?Pc@?V/@?R)P?@L:0?9?# ?N`?Mn@?T>?R6 ?VD?VD?7LQfL8`X!`a5<`]@RzBH@>u ?; @?R?I?Y5?cf?Ts?B?Mx?DԽ?F `?2%PND3$?2@L|aE9[01{?G^ ?06`?1 ?J$?Ku?QZ?S?S܀?B`4 ?@?;ADCRQN ?<ڀ?Zڨ@?T ?P`?MI{?5#`?Q ?b'?Yd>=89a@AB`??@_t ?F@?@s?0pI`#i EJIMe ? $ ?X(?`@?R??̂?0i?k`?)Me iT# W Z܀(@]5H^a <Ӧ2 J`?2%?b'?gȌ?\ ?Jʀ?PZg`?a@?dd ?QP*?EM?`@O?bΠ?Rnj?AN|?B?9CN`?NY ?5h`??PS?LL?`  &?Qa ?@\@6?I?K].<? >d?'D?LN RIoL@Im@?#N6@?F`?@@u4W`?P@?^v@?G,@1FSE/5H 2?"z?9Me _'k# aZD?>?`)@?PoGQC?Eߠ?Yy)@?U?< ?I?R?(>`?(eDi@E}8 2R=P] 1b #?OZ `?]>?S`?&2?Rj?@0 1AGW`WcSa&@:F?I+?5 ??8F@?$N`1À?J!~ ?_"~?\ ?2{`1?C>`?T?K`2v`@l?Q?^u ?* K?>+ @?U `??q?HL`?[i ?Jk:d= I ?R?`I?L `@?J?U}?8;h@? `?H? 0KA&>L?N8?bA ?Z❠?<?X|?G͙`?F?Gh?6xT}W*Q@h?A?:u ?`5#`? ?L?H+`?7|4bFUm R4 @+0A h3![`'@3`%@?N‹?S3G`h1 QE3?:|d@?5C ECC@RZ!T@[] 湉 ?E#`Sq_KC?C@?A6O b-^O- 7DE޴`W(`D`?>{?Z܀?#FS6C @?H))Me ZS[O?P0 ?a^y>b@[! &?: EpU#`f_c#I?C?_q?3G )$?Q@?S: ?6 02 ?W?a|ƀ?E@y vV?L ?Q?E( ?C=a?F2?Y?d9?Yk??@?Oൠ?O 4y`?D?LG T% ?Fހ=L٠?Q_Q@?T_?,Q?["@?;`3$EN ?#?\@?W 1N|K+tE?Wb?bV?A@UN 3%?U[h?Ma ?.L?D?@`CǀH ?/?E@?;t@ב9F`t@0' TWjS1U'> ?(Z`:9 *u ?6vV ?4h@?C @?R3j@?L2S`*Z?5 ?0I ;nEJ?#i% ?MS`?Or?4WbH@<|?<@B8hv?@$[\fͼ@_@8D) U SqT9@O`( 2??& F^`aFNV`?X 2?HX[x(! ?U%@?[: ?K5`&@V@Ep`C}X@3T@y ?8 2?5G4OX`C?c?i?C%(2@?Q3?PF4 ?8Z`>u@2G?LI?aʠ?X` ?P:k?U ?2{`D@?`?7 ?%%@?N??`?Y| ?W>?Q* |]j`?V?Zn>湉 CN6@??3G ?Or?`D@?V ?3%`?69?IT ?-@?3`?Z?Vр2H@Fo?6|?]{?``>ܝ YC @NG;?*MB@?0i?E@?Sۜ@?I`?0&8 *> `Dy`[: XfG*`0G ?6 ?TE?U05W U .P>҄6Q؄ Q< `I?[_d%>ܝ ?`?P|7?Bl?GyoF(@N`>ב?3K(_G A?^iT?W*Q@L|O?JC(?M]2@?@ ?_Z `?ME_@9| ?=`?R ?UR`?6%g`?3?b̀?c?&x>`hD``/ >?IC ?AH?L|`?`s?[V?L<'@?F/@3YcG LrEp Zh1 Q?N%?`?W;&0N`H?a`?b ?@΍`RVN$P?1,`?K @?OW?[ģ@?]q ?4}5`,/`?E?ǮJ`3$?%4A4?< ?W?` ?Mq ?`?C=a?ൠRE?LW ?B RP S`>hv3N6@UP`>?U?Xw  D?2i?>na`?0.u S Q3Խ?H2 ?]@?^P?<c AijBa5gCb*kbR@UC[Š\Dl` ?0|@$W`FC 1 &4R*`U Qv@C:dK &@?R̘?>Sr?`?`ȩ ?a`=?b@UR@?$5C$I ?["@?V ?XǠ>`@UZ?F `aQv@?V;I?A&@P5E`?@`???/`=u@B`?;$ ?@`A@MРWbQPI?QX?O???-`?Sz@?Cy`P"K? 3j@? &?!&@QijW9w?8 ?\]?U0 ?7@3`Fb?R?L`-?b@]]`v-% ?F^`A؄ B ?+>hv?Lg`?ExLR ^] VQp&Xw \bޠV|@Bۿ (@EeQp&Q D a 26? >9vRnY RUCA ?`k<?cL`? ӦAQ?4W`!&@@?%Ԛ?? &%g`@' RNY 4GW4] W?NY 7v Hr`?3 ?C,.Z.@P`YT U @8'h6DC6@T`_rM?I ?1 QF`D$IˠclX^]@?W~{?`&8?S ?X!?PQ? ?Ep ?S=a?L2 ?P|?OV;Ep&v4iHFޑ0`@^3vbPQW"`7 GD7DC/ 2 +A:BH@`nbxn`A6xQ@BiH? u@?3v?Pa#?YP?Po?A?`?h?NkKA ?!?FD?8 ?5b#@|@La/?2}{ ?E",`:h1 X涀W%D?B ?$5?0w 9`Qs?EE?b ?S.:?4@?AlȠ?(᩠CTF@! I?/Z `H5RPpK0@N+ @XP`?O?T/Ơ"i R@?9?FD?Q.`?EvVZ@c```Yվ@9T@?7͙`* 9@1B%"i?Co?9ˠ3FLQ BX&hv>@?Z?!❠>[?#`?KZ>u@becz@W7b7 Z}?S.:?WA@?B)P?U`?P<?Sd`?P`?@Q?Mӄ?P0 Lg`T^?Vͼ@?>g2i?89T$F@MC6ReV#i ?-@A?2X&fV Y>?! &?/Z `EE=1 & w *$ u`?"`?0|?Q¢?Y0@?v 2z?T?PQ3z@0vV>`?(2@$:JS P`2@?8J BؠIX?`?V63U~*@ w T6`O ?B?D6`Br`BP`*@KL'Z9G v@OൠC-@?\?bnT;eg0ah,Zt?P?J|d@?"nj@اJS:u4$De`:B`?@8@?M5H?. >12[Ѐ?M͠?Be ?J ?9??IӀ?@اa/i_@VkU-]26UP`7h/t@?=@?C?,?/ൠCy`D\zoX,K`NǠ?W*Q@?c}X@?T @?<|7 UGD@>I As`7ݠ%@y ?7|?E@ \@>`?Q?K @?6v4?>̥`?&@@RIL`SϠNPTe`P@*2S`As`A@`?>P@2S`TQ2 ?:ʀ?2%1p&?CF?Q'Ġ49@P?xV%g`] @,@?0G LE`0|@^? c<@Q K$ XpFox@?Mq ?HP@QNWs`PMPX`Bۿ [ T `?BXr?Ab Go@O`6@1Q X. [@d=> c`Ex?=s *d@=ɀ?K ?^?=.[0S??RP?YzdM1E}K`Lb:`F"P0R ,?E?VT`?W^ ? J7458@3XH)Ƙ?9SZH5fHEN ?*F^6x"%N RSUYD@ ?4h@?< N60|]bfTU-Na ?VD?aQ`?F9?.a ?!3 5? 0?1&@i ?7"?P\@?R?J}?=@?Be ?*2S`GQ??7 U?B@?4ff= QZS/Z`R3j@??8`?=$s`8@<N WV/Q.6@=SO ?'`?U1R4 @Zi`اbÀG?>8As`P\@P/]YzBH@H@O`?"i?T?G=gȀMF\fdD@P?B{`?{`?F"?D59`P] QOOS) V@\c 2 YU?4?Ra@?A@J @ZN@k`W S-?5?)hTR0 `P =bG;2NY ?H?=[?B:&?M`?Gyo?7 C I`?4, P|@SBW K]?dN$P^{@1Y`?Pހ?I92??Z `1,`UA`T C`6/?>$-?L8`?V?P|?"%?D_?K  S,R0 `P -@?S4`?M5H?&"?2{`(Ap&;R@HFox@P"`΍`SX? dA O֜ SO ]ݝS`A&@RԠUR TW`R̀"@2 Q1 L?AY?P@' VM`B%TS I/`?E?QM ?>=@@Qb D/Ơ? &8?@F4@S: N6F_GL2b@? @?6? ӦQǮfs_=?SFVFͼ@I? Ӧ?8IdI ?X 2?Q@?E ?(hv?7I`` `Zau`'h?D3$?A?@G ?Q`?U?LIv@K+t@?]Q?`?3`# >`KAN%@LQZ&H@?Si% ?U?F(@?PG ?RV?Ba?5}+uX\@S??Bb@?E΀h1 "NY Q``VI@3i% ?+ɠ)@?-?UV?C3G`+ ?-@!HFhFOd%Do>`?`?/1 8QJ =u@JM'@M `- ?MР?!ijVxHZ`?F?:W^ eߠS?82@ ?QDb`?A_Q@QcX)?;h@?F_GyoX6C?EE?R?G<ՀG9wU#i% 0}YK@ $ ?a`?P`CX3,>A??6`8! T:S ?IT ?< `??N'`?Pi?#v $ 3GzV[ZKn#7 DC1}!v@ISVB [``g@Uŀ?/,/`D% I`C%` `?Ce@?MP?;M`?&?! 2 ;?7D?F BXr92v@?Lɍ@?7D@CO?Xu@H?PV?KW96@ &??"v`GR7 Z`=a ?Tl?#ZWT@Wb^* R[ЀBؠ-F<`[?V?@CQ eC6@W\ 5#`?Rѥ?Wk?Pk<?I`?GC@+h@MY?Ǯ?O`?L.??8`>Z?Bz?V?Z `W~{>?G>@]{e U0UZO;Nna`?A?7̀?F^?DT KA [8@H 2:&QU7V[E :9 ?K ?\I?X+`53O?Iб?R`(?IT ?]?vVO ? &?5h`0:kH`Tj SCX?@΍`?7oU`?@|?!YS^eH?53! &I/`D `R ]UD@Mx?v DW`S ?Vр?\Ā?* `66`b|JrJ?<+R?F,# ?%2G?>? ?TLd?fP KuP+ 9`?Ss>?T?E, ?G@??n>?@3?TW`?P3 ?%@?;+tCqT P8W&S?,TcWx`L #[W ]T; ?2[Ѐ*MB@. ?LkI@?Bؠ+ @?%FM[ ?`?``?P$?G]?@Cz@Pg?2@?U?V<`?Ms ?2nj?A ?JkH^??`CϠ?Dy`?Wb_ PUged \pV< `J ?2i?d?^I| \ TH@9?: > ?@=ɀ?V?3`AQ?K ( ?VA?,? +R@L`U=@$-4 @NGTx(Q$% *ZTP5^T3ϠI mHQK W SGzE,Fh1 ?1G@ `6h@I@Z%Ԛ?]&?Q`8w )1?G?HTCNdGej`_X\$?9?9`?1)$v@?]j`?PѠRGYQD 7,@?OV?[aR?[?`G?_B?WҦ ?Ux?S-?G(`?FG?BCbi`Q&3N6@J!~ Z(`OBz`P_t W ? `?M<`.Z.@Aij'@3`0$5 ;0=??E[h?N ?5 `?;Fc `L<'@`?S@?IT ?k`?3[?1 &B_.`H|2 ?2}{ ?+$ ?hvC`?*@?)2v@S-^e3@?TN?Jau`M{V ZAW*Q@f V `> Re H<?[k?]@@^W@+c`?0G3 [9d [`?O]i@?N`Bv`@?2U7,@D@aLjNV"?A}?82@R@?2G`?A0/@?G ?)ƘJW[6g ?E3M͠M1?!HD\35΀?Iˠ?A?C[?KFc`UC?>?SGC@_Vt?\@?S?P?P$?Jy`??Z `D}5`T9S/?F/?8?KA3z@8e`?%?-$s`?V?\@?i@O I,@?Oh?R)["@<;FcML٠F*u AA`>{` ECX8F@:/ൠ ?b@?4`?Af 8MLs?C"r ?b0?XI V" @}T,h`s- ?S_ "%S?E ?Q &XvQZD?%3?;FcET@R?2"[Ѐ?FĠ?MKFM?/?TS ?U@y ?0,@?BU?_??J@D?FM?U?,Zt?Oq`?b*`?[?S ?Od%?>`?W ?a@) d `Qu3`?Mb?B_.`?' U?M?Q ?E?7%D:FIhTFĠV`Xƺ&?;R@6|D}5` ?/t@?@?,?Q?Uj`?0pI`] Hf?YW~?Bb@W*Ts0΍`?/L?NRVM?G̀?`m@?R.]?;Fc?CO?E_@?B@`[@J??`?d?8@?Sq?XÀ 0UWTfX-@PC}X@N7J$W`#`=F@_t B)@?H@?Ot@?# ?B`?4F@?-`?+?Y/`?JI`R[ЀVwK@Y* Z0>@?Mx?" H9TS_ PB`HVQV?Z?DI ?4ff?R]?LI?hv??8!`?1?@Z@?O$??ൠ?8?M{% `H@?T ?\;+ti ?I)??g?, `?F?I`?EG4?F ?8?* ?! &FE`CoNIYv ?K0I \ĀT >6?+h@MYK`?_u?] ! &f?F?A ??D,Fޑ?Oz ?Z@?2@M84h@?BG?S@??Yp@c@?Xr`?R{` =IBQVUvVH?Q?T# ?9ˠ?W|?E^?J?^?Kc`Mk&`U=K0 Z@> IF`Or Ӧ?G͙`?N?7["@?8`v?Vހ?ZW3$Pi-r?@y QD Vq' 6@,@J@(! ?QA?\+?Kn%vV?J5@?Z2S`?.`V^ac<I?OW23j@e_@f_X\VDQq@PO'?Pq`?Y<?HP?Vͼ@?`n?S@?L `?V?X0 ?Ty`?3oRۿ Xא Gݠ?F@V@?\c ?=n@VG' U?[C?@ ]0;be LPZ`?@|@? A'`4$?I`?@Od%?7oU`?a|ƀ?P|?=gȀ?ZΠ?R5 A❠Fޑ?vV?5xPDC@?2[Ѐ?T ?\ ?Ni I<Q?Q@Ƙ?OF?J۠?BX?HT?#`Iy)@L@P΍`S*L@G]0?H@?B%JS WHOE@( ?F?G">ǠUSR RG`T/ƠP>6?@D@)10?/- ?/?=.?HkԠ?B?0w ;|A`F|?:2S`?KZ?$s`?1{?G`J5G4?H5?k`b \}̀?J^?0Y F(@?1[`=L٠AH@y ?%@?-`: SK RJEʁ@>؀2NY ?7@?RJ@?Pi?De`?D) ?M@?_d%?c?PK+tO5 @``?Ds"> ?Q!?dB ?^\?H ?V`Q?b\?VW@?A0/@?92v@F `T,h)u?9ˠ?0&8;aR`xZ^?S ?Z?@Q?UM?Wb+ @?&@?Vo?8eB@?2 ? Jh1 I`'M6ހ59`?Ga?FT`G Mu@8TJ^E 4ԽUS) ?L2 ?\Zt?S]\?P] ?J+?1,/`IrmT>VU `E ?=`?W#?Yk?D"O@CJ+?/`?E `?V?Z0?IK@%vVJkHe`?D?]2?S @?9??>?;20?`?i ?!Ǯ>`E=C?1p&M͠CGz?P"ڠ?` ?C"r Ln Nx{2H@+?UTvy?/q4YO08?J 6@<@P`A?[`Lр[`Rr`D3$J۠Be ?,g`?3X?2iH?SS?Z?R%?V1/?Zn?<A,`9`*MB@WM^ N ?*`8!`?5,F?S?S@?F<`?[+t?fRڀ?XG?+h@?3XN`@k`7%DB6 ?;`U'9 ]L?A:H?S["@>i ?+20v ?@X`?27 RR!`?%?)@J VW@H@! ?-?Be ?t@_[@F?JrJ$s`i@?O$- ?0&8?6h> `?: ?P >M@?Fo?Y ?1@ABP A_Q@[h@zcXw P7,@`?Pا?JI`QT`7`N$PSxK;S L `\Z Pb8fW U^S$VsW ??6"NV`R Ci @8AlȠ?❠??t@Dʤ Tx(Bv`?#%?2j,;M`? ?,Q?HL`?W~{?A>6?U?X ?-`BLZt-L٠?4N`S.:_Z `= >ܝ @C RnM8?40Tc9@?<?)Z܀E%@[`YBEE3ۜ@,@Scǀ45?^g?= ?- ?F"?0I V YBL]? |?G?/Z `BS [@`PMa`V8?i?Ci% ?>??`?gI@O1 ."{`QYZ5@O5?<2 ?2:&U`TBJ?- ?E( ?0΍`!YX?Nr@?Z?R ?Ln ?T^?Rؠ?F@?H ?CAY`QF` t?vVD?#3G`?R?OI6 ?M ?" \@]b??Yo?`?PV7\? / >V 'M B`UeN'`?X> VZ]fdB cZJ`J``q_T*@6?ZRO`i@Eb#D FV?0N?  ??@1❠JMB@6 3X? ` \RNY ?N+ @>בZ}NL?7?Ap&>8R?@?V;I?DW`G@V VsZf Pc1;?4W`@ѠWOY`(TE?[?, ?$ ZB!A? `K@|@?M7@?L|? =@G@3$?DN`?Cv?SX?]"?VV?K'??` @G W["@R5@y DqP2?D6`?b?]?Ln ?AT(MY?Rz@?_Q?Vɠ?CXBr`I m?Ab ?BJGoU`?"6C@U0?Q?M EM`f/V%@DY G.?IƘ#X?%D?Q?LI?@pI`?2 "4As@E=@?Sv?XMQke`d U?P!+?S`AK 9`?P?RP?cf_@?5M?P ?I@?7XcRkU[hQnwL4@H! !&@?U?Mdj?A`?Pzc?:S??q`?Hu@S-@`2؀?0WȀ]?*`?a ?PESu5 `?Z?SN6@?P|@?`?1Ǯ`w hQ,`? t992JS WYT.Z.@?+h@?J}?Q[2?9+?:u?L?W׳?P ?I\`?F%g`?f3D5 ?.`?P' ?Ik?Pi?O'?.u ?] ?]Q?$W`D``1{?6|?SV?R@59`P:BiHYFͼ@?`?f@?:?TgS`%#`?I~`$i@;A?M1?SBm?0k`?C@?Pzc.1DJE%M>:+Tff3}X@?0&8Y-icd[@P!+1&< `Pb-$s`?F`?D 2b>[@b}{ ?B?\?7MIy)@YYE}J@PѠBv`EE6v4>ZE9`z@?Lb;څ`Rsa;ZSYcG ?8hv?W7?#`S1$-?`Y?J}aJFZߵ?E,F?GNa Wݠ?>@?XO@cz@K3o0k`?G?@Q5<C/?I ?:?@|>a Q]`GC@2?BP ?Ô?@X`?J`?T?KW9?@/82 Y>>T~`CG 0?MS`?T?A)Z܀?Lr?T ??@) ?FG?` ?V-+R@AjEH<?B[Ѐ?Y擠?C`B,7?1G@?C: ?B@1@X+`XUCB+?^ ?d %DX 0Ѡ?7(᩠?HT?ca?] Pb#i ?U3?WU !H w ?M?A=?8?"`[bؠWUIS%G"R[`ZW[@f/?F ?)Me N?KIA cD`?P=ɀB``T].F^`?.u 0΍`L3o`EE`Y-@_I$$5\Dc@WhR6 IMe ?@s@?WH?Q2`@0 ?L?#Xb a`@9 \| dQq@L@?9a@PݳT>@Q?UW ?O?RjL+RÔ>I ?@ا?= =`VEc^IY] FJo?* ? t?4F@?Fox@?C?F@?RpXzV#JJ`?49@?2njC>?T5?MEM[R6?@y ?+M`0΍`@:kWRcY?c8T hcc2%?O Bۿ QN|?V@?V>`V3R?Ab ;?]PXf2X?@["@MEvVAsT*T `#`?D`1S) O@ JMB@LF4@u@?A[`4@S@ |?3GDM `AKM`X-ayhZ=SvZS =@?Hw YCKf2 ?Mj`KCT"O@?M͠?S%`?MS`= QQSJ`AZ?+t?%Ԛ?7w`?FV?Ep`?J?OO`?F?❠E}=r>`L8`[Bۿ ?K?>̥`Si% b+`W@SoJJ9 W U[g[xT$@?@?Kt@? IƘM 5 ?N7?Sq?7h?={?DB,Q@`=+/ DJKkl ;AYD?4o?Rz?BP D5?5o ?\^ ?\Q`?D@?J?[I?J0?6@V@?VJo?IP@ا??2 Px\D]La^zCGz)Me ]U b?2?8F@?Z9 *2S`H:?.1/qQ*<|?F<`?Q@?C,;QDb`Y :`?Tu`?MB:&;?GW`?B{`2@E@R1`P;W,@cTgS`?Ƙ?9Me ?=L٠"@HM?̂5g@QYZ> >$P?8Z`V@bB=?)u`DM.?$ ?V ?=W`O@?D?G@?=?6M͠ ?/ൠ?Q?R@?K?Te`?]&?OF3i% 2?)ƘS@aҟUh`???B$vyH7w`8vL| K$ O5KI?1v@*R`+X~X?hv3Bp?: @?Ru?Z?V,#  Lڀ@G*`Knr@?- ? ?*`?5ߠ?3i% ?!>@?ft?=@?N a?@BC3G`?Kl`?T"O@?G]?BG`59`EN ?H?M1=. a?C`?9?1,`?M͠O>@a5``H 2?7Tf1[`Rxn`QU`T"O@Qs@?@Ѡ?^iT?[?Uŀ?X! ?S&"TT LF@:2S`Tϰ` IQ]`?6?M ?Qb ?1Ǯ#C`b̀h @\G@v ?=.&hL+ @?C: ?A`49@S PO VbLc F!7`45_`_G X@YHX@^0@A'`?]2?``?OxX ?IZ܀>L]) _"~PQ3L `.PO{O1 AZ27 F TT ZZh1 9B?%+R@4`GC@?BQ?1;A ?A_Q@?B:&B @?D1&@SWWP?x?k`?Ab A P_t ?6?A/FM@C`(᩠B3j@7f@1ij@|? I?2 S R[Ѐ 0C?HP/1 ?B?B4T F C3G`Bl?1AO'c`XA?HT?W?D?"@?E?T=?S6@?NE ?LQ?% T`3%`\< itb5T@? Ri_S`BG?P=ɀ?> ?$?J1]ݝQ_Q@AF^?B3j@?Cz@U8YQWVK`Ab Vq' K> C_ :au`??n>?6 x?G%D?Z> ?M$s`BjUYZ,V1/08?&[E X hU9`?S?@lB`?>Z.@?4i@Uj`S`Ba@TOSX)C@XaH_ `_z LG(`W 7RSeCi% @ A❠P!+I`?2@&+ ?:h1 >PRP ?NY ?F?*?* Tn`\@Pb?9| ??.a ?0?Z ?N6`:R?E=?Zd?4@A"6[E 7f@3G KI`MX|?CD?K`K`G@?VG?_`?M$s`?@Q?,/`O`Z-FI@?$5:1`YN ?Na ?R*MB@Ik>u@?LF@?;t59`?"nj?2@QC3G`]& c~/UY?K`?Wr@N@gySǀ?S ?N`?5[h?IT@?KuB[ЀIF`QA2@?`N@L@T$@_OH@3$T191?@`E@Jڨ@?9ˠ?Qp&?`9@?b1`?`> N.b1`d# ec 7?F`F x\ VMN KkEx? `I S@Qf 5ߠD$@-u@?9a@D @=8?NǠ2 Z L2 )BM`O1 ?Ik?a?HWPuV ?#v?V/? |M2NY ?59`?"iA[`Qf 1U7?W`?ToD=0,@?a*K?a ?Gn?O?JuB[ЀN? <@%/1 8@?9v?Ul=@?D[DPހM{?-`C)-O??x?RÀ?@l>?3>@?k`?GJM?X?23j@OZ ` d?>`Jڨ@WDHM?;Fc?D?/ൠ?:`?J|d@?5W ??q?Se`,LZJ`EJ9ˠV/P$J9 V" 03?Ps@?TS?bֲ`?dՕ ?E9`OU`R`CHQHw B?@?Z@?XG?(2@? `?A: Խ?;+t?>a ?A`? ?b@5V?4T ?/O[`"ڠ\Di ?PN1&TlJ+Gw`VLL??-`EZdRE `>湉 ?I$?A}XQ'Ġ?M./q[EJNV`d!waK ?2NY ?Yб?|[h@P`?c`59`N;=@?.1?7D@? ?V`?cd?Yy)@9?$?Y$?S`?(᩠?8a #i I: & >1:H?*h1 ?N??`?K+tD Og63M@V4QJh1 ?=P?\M@?[k?W;&?WR?W ?;?62?Q?E4?) ?;0?{_a`] K ??@?C`?9hT?T?T?@?F ?\@?9@M`?91?f5,FX2 XJ* ?: ?<+RG@?2?R*?❠FoI23j@?B?$u@?[ ?^:?I92?alȠ?mc@?^:% !?G`?W@3`?_ ?a3?[aR?4E> ?H;?iK5`M CG ! D6h?G?-1YK@X0 ?"%0YK @)`?J0?AY`?Ey?A}A .?(2 WQ^C(e ZYK@?!Y?K*dN.8hv?3?AǮ?[?<?5?PQ?O ?X@?VI ?=FZ `?Re ?]{?0pI`J(`B@J`L]7ݠ9+?Z?Pf/?9`*dKaRV2P0 >r@?PU?EX OWP'?G`?@ R U>g?T ?P82S`?@\@?EE59`XQ?"iH?> Ѡ=?a ?;h@??@}?S-?L?M@@?TT ?@A'`?$ ?As@$5 QQ ??X?L| Iб3ۜ@?R?H@!3 >?C`?VZ?N.IK@F?1?Ӧ?IB?L.MdjA`?Qb ?AY?2S`?8 w 2ۿ R`$vy*$XÀT``?T?`?)ƘMj`@X`1Z>A?D,h?S@?_5?_J?@|R@XÀXe!ijD"O@T `???P"ڠ?T`?`h@?Tc@y ?H(?PQGPb?7D@? R@PAs@J@=@?<@?JC(?Q?Lр `:%[h3F=L٠S S ;M`8Bsa5@Bp. ?Y+?^؀)Me I?S ?Z=+/ Rd; ?r@?%M@@2`?#vI| I| &@C @\@?4h@?AY?T/Ơ?\x?:`;|A`?"@7QsE M`^u T?u@E=ad^M?TN`?N@&@?%D?T ?au?F@V@XI@?>?4y`?X ?b ?KI?M@?[# ?Fe^?>@?A?Bv`PoeP"LW Y؀V/+A ?%Dk`?5@?Eh`?:MB@2:&B ?A6?\ ?U?"6Av@I@?08?Y?C`Lɍ@/O`?+tP}ZC(O 8M?&`?>L26GTf?B@?RQCU^?0?PQ?I/`?Lk? k`V;IQF`?:S?1}Oz P)`%3$+Af OO`C %[h?2G`?KZ'v M@0|! A`@`9@?I ?0Pq`_`Q`A`H5?Bb@?_@?@QDb`?: ?X 3 R .1VO|b [?DZY@בH)P|?> a?N.?T `?]Р?HDGW@Z@J۠^)b@b%`a8Sq.DQq@YZ܀5}?T,h?A)s@4$@?3?F @3i XU??(T>P?As@?T[?#X?GW`?Z1`?@@?2 &hTd G A c-c G#`?@"ڠ?A?CJ`YA@b?;A?k`?)??2 K: ?3 ?8|??SN??`?P`?2,I?@/?=+/ VX&D 4 @ R@2GHe? ?UR ?Q :Ni3: ?!Z `4 Ho2YCKY#F?BG`N.^=a ?B? ?E@B. [h?K5`L? w .gK64@@)`P9B?;0@?@A'`S3G`U4hv?+20PgJ?K?@TO.G@?# 1 ?[?D$@_,@mP8?>`Q3?Y1?0ѠOπ? U?>?9T@?W/^ ?\b?HC`?`%#`H Z ^T@X+`M@@$W`?27 ??L?T ?VQ &F/0|3T6`?{?@}?*ZME=@< ?E=@?G/^ ?0w ?0' ;uRA❠iHFMNIӀTP}/QZa5<S10BI^:`5}???Jau`"%C?-$s`?)`6"+E=TuFV *d= ; ??L `?Qb ?1 & ?8 ?2XP Z[SYA,`?PQ?[8@Sd`k ( Q?H>6?HT?b?QK N`Pc@J9@T(`G?C`?C_ =>E ?2U?%vV6`HT M8?4F@?QǮ?YHX@?SX+tDC?@y $-.Z.@%[h?7a?Z?T`E",`;?!v@QL @?0N6`9+?:#X=S`?+c`'%D4i@+h@>a ?G̀?Tŗ`?C_ ?K0@?!&X\@<@?Qij?2+09@J@?AN|?OWKZ)?H@?P?C`?P5^?:@%D?1G@. 1 ?5 ?9B?Qd^?V%D*`?K @ Oh_S@?-1?,$@?08@?L| ?9C 0i>`08@=u@(Z`?Q &?Q7`9 ,@?B`3X=?RMj`?Hƺ?#i XN8`?Cǀ- ]H!?*G =L٠?-:R;9dQ]`7M?:ڨ@0 ?"%?ICKA:HSD1 ??$ff#FH@?!3 PQBnj?I| ?Q;?^_;?\"@ 8?+20?Vv41HSL`?> a?L? 8?E^?W- ?N ?4% ?MH`?VH>`XܜV{@@N0|;(T?;|A`?0k`E, R?2PJ[< $h7|UYa!P. ?PQ?Sj6"R*7F ?C}X@?:n?L?GM?K.Ҡ@8@S? R@?Z?X?=\@R\5CvFh?2i?F2=a M'@?.؀` `+E`E @M1\ubXzJ}AlȠR \AX?C6@B`L?K`?U ??g? ( 2:u ?E@HÀFW@DPG*D"O@UPX`DX-Y$P?N+ @?6Xr`A?Qp& I(\Xe`1A\2 W$ @7F(@D Ab ?E@?W2?@l?C?^g?V/A ^bYT 5G4@S? ?O-`??6|?Dh@$-?JC(?T@?g`?G]?Z K?2?@?H@&[E BXr?$5?7h?Gh?R ?O?MH ?3$C}X@# ?Ab 2b@[# `)`Pg(᩠D V[E T'\Ge;;S `?6[E 8@WOBz`?X>UL.??Bѥ*@B ?Dq?Q¢(G2?,@?@QC6@^\I-r?<@"[Ѐ?" ?:$OSOU}?27 ?N?;`?vV?<@?=?%U+Zڨ@5M?9@MajW/^ ;aR@c@?7 ?]]?U]?4?V?a S`UT@O?h1 $ @He`?0|?C A❠>L?F+@?Ut?Ym@?Pl3[ ?UqJ?R)FGaZ> ?%?U;M`?S}X@?TGW?R`?4% R`8?E ?@?7oU`3: ?#i ?#PKAD`6KaR?D?Y%DI$?2@?`>R@V_]DoNu ??t@?C;c`LsJ@GJMc`?F+@?B}{ 0Go@TF@b:`]?%M?Tʤ ?#i% \+R[#?F,# ?bm}@?WM?H@b?Kɰ ?B\-cZ@?2G`?bŠ?T# 2 ?>QQR%RJ@K5`E9`TqP. ?N.j ?W 9BOg?Q3?``>vVW:h1 ?IhT?Q?[A?`{:`?[px?ZR?a?[# #z@4:nG|V%g`X?`8@?XJ* >vV?AU7?XJ* ?X ?QK 03[20WPK0@V`\n T? ?9v>3$XQ?CGz?M?J??6HC`;A?54;P'T Z Q❠Nr@P$?!❠@E=@?Z ?a1O]i@Yt?6V?LZt?F4@?D?A6?C`3Iy)@,?F Vs[@XCn`:ڨ@?@?@A'`?'@3`*$Rz@`# Vw?7h?\8`?Z՛%V" 2S`?] ?]1?G C\ɍ@T]9?B6 ?Y @?Z۠?W<Հ?Ls?<2 ?7ݠ$-SYB% ?Z۠?R:S6Z ?G(`?VUfK:R?W g`T ??T? MB@`VczS1DsWhZU `?Q}?2iHB"?/O`?G@1 &2z?RSe?Zh1 ?S=a?I?5@?F?[+t?We;?D}5`?I/`?91?%@K8@_D)@??QH?7|?9ˠ?Xo2?Nr@?#`?@UZ%vVVRuSXOdSb(y@992<|;A Jd+?QU7?Hr`?0|@?A@? N>`?723bi`KZMZQ Tx(W^ XTO-`?! 7`6b?a<@?\TlJ@?T,?JS6ͼ@B=?A@?aǮ?TSW a0/@[ɰ \ `[![@\a/ZwW>?3N6@A .g??*dBa@u?Ci% ?SY?Z?JB)P% ?Q_Q@?RG?D'hO@,@?S%?V?X ?_ ?W?Pl?Ug0?E,FS1VM@?P?j|d@?cv??TgS`?BiH?RM]akQ}M`d5b0 `?Br`?a?D3$ZS Yf?L?FC - RTu`@} $ O֜ `uV _@R?@?;?\Ӧ?U[h? KW49@?YMe ?Qn?#z@C`A`?.1 P22b@.$PVC c`?W U`H 2?J ?G!E}8o2/1 [DY: C XhvFޑ"@?8hv?WL?Qn?0A'`?={?7?;??I?R@?K.Ҡ?J(93G S,O` (T?>@.$P?VM͠?@VW@L?V?8o28o2?ൠ?E?h @?b"PW `' [ [f_@PاH%!Q1 ?A0/@2pHT> ?`9o?$h?GoU`?[Fl`I :F?6`?=@@?Z `?Hא ?Wm?M?I?M ?0&8?2?MР?;Fc?<?_d?ZRNXUc`?W- ?hz#?[N?&`>?LA؄ K ?-`=.Z!~ bN@L!8`?M ?L*K8@3}X@?J?S@?Gf@?AH2@EE`?.`9``>G̀?D5 ?UY?F/ >D_YjQ?I1?DoB`Ju0?@hvE, ?IS?PހJDN?3XFoG?LZ ?G`G]LZtB Q7`IhTǮRL^Fހ?ൠQ;`?G2?7h?i@`?Dq?SD? @?F?\@?_`?1?08@=@? @3`K$ Fͼ@?U`?W RUT@?Sl?TG/^ $?R7oU```P ?AlȠLS66ox@?YӀ?SI)E @AU7?89T?hv.g3$?-r?Ju ?S ?R ?U ?N̥` &@?!A?8C`?J@?Fh?D ?Hw G awSs>A @V?Rѥ?Yˤ?Tx(BP`W/^ ?VM?j*?T`>{8M8e/@?1?1b 3 N??`T,hPx 1U7?ANP@S`?$5 r@X-P@?:S ?@KA3ϠF @?3G ?O@[`? `?X@?Tϰ>6I+O'?63?[?X ?K?e=B`]@@a!?1 ?T?E4?\2 ?Xr N؀U BsaX<\5kMY@@UZ?L|?`?4^2 ?P@ H;?Q?P3J۠Se`1?6SJ`V?<@?W ?6G081k O{P &@>L' ?[h>2@YC GD@?_5?P+ [4@A?]?'̀_` Kc`?@KA4}5`T{$-?]?O >B?F?\D?3QfFBiH?@?a@?a w?PӚ ?I/`?O?L?3?4o?S4`?Pq`?;Fc?K ( a a H]L?W@?T?N AlȠY!?L+R?j0?`KA?3j@?+c`?Kc`?=S`8+`,?0pI`8!`N‹@?i?,A?P ?ST?0?2iH?He`?>P@-`C`? ?CX3$?`?@k`*`26i@M@@@Z@?Dy׀?.`1[`$ff[?1jCU+?6?S>%D?$vy?5]ZQ ^ǘ?I2v@UI^:`?S)-?^iR@`4`@w ?Rl?9d?8?[}?Vw>i  ?>? ?"[ЀEg<@?Jl?O`"@B7 C?R_.`Ex?Ng?T>hvCHS e?ds@?`MH Fe^?XǠ?JJh1 5E`?=ZQ ?2 DE ?.?1[`?!Ǯ?XTC?` ?*?̂?fBa@6`?U> ?KA JJ`<?P?x?Pހ?@y ?)Me ?S-@?<Q :$?A3 6xB}{ ?@)`?Eh`?, C6|' UI< ?U|?PI?1b ?IW~?WoU`?M.PAQ@7 NB?#X@?Ǯ?L|`?HT?5@?@KA?P. ?S?8@=P$% ?,?7 ?82@?̂M?T?1@?[@?ET@!7`K@Q`Eg62?P?\?F?Jh1 ?T?* $5? PU",` A'`P PS;A ?% `?0:kC=aOπ["@?' U/ >?E?W @[}@S?08@?#%?Eʁ@?Xw ?S 2 ( 2L|`F`3T?Eŀ?`X?`Ü`?A@c@4k`! ?S?Z!~ ;aRN7?F" ?I@??/1 ?Bz@?BG?9v0.??`?:??:MB@?E ?Ru?<|3j@?@>r@B`?%4C[': ?X9T?R D_R:&7JMB@__ M& ?Qj?We;?QIo ?U@?UR`?#z@K @QS*u2H@?'ݠ?7,@?+$ ?7`?J??R?P`?+ZP W ?D=> FT`9d?[}?\+?b@I!?7U ?RE-$s`VQ+3@?B6?%D8hvI!R\W9wS?E ?dWU?`?Mb?8o2,@@%EP?ݠ?^T@?W ?K ( ?R] ?C?/L??E@1,`QDADb`V6<ZP3H@UߠTBJ?+M`?Sz@ VZ6"?H)HkԠeLAbEH  $ ?3T?PV?Hn 6 xG?k`?M@?R`?SBm?S ?<@4?=`?J۠;E,F?`@UZC-@?@?@8?0&8?N6?D`hvTbFZWE>`6g J^HH 2F?(Z`?T?SL:R?CGz?Er@/3 ??L?- WC@N@:d?R\@ا6WZ|d@`?VM@?U#`?`F9 k`?Ha ?F6<@bR!`-ӄ?@3A&_JW ?Ba@?W ?)?LxKǠ?N@?JS M'@R"%Fg \)V{@;?MB ?`?P2`?H]?Vd?NY ?ZrJ?``?`?QKZL@?0A'`S'~c ;20?Og=?P!+?2:&?5ߠNM?B6?[aR?Z#-?6"QAFV?IƘ?H E R}{ =`JS ZI`?4bF?c ?Y5ELubT,Z-FG`?& x??)?G`?k`M .`?D ?4T ?+u?! &BFĠF6<FM?17`?C=a҄6?Dff?KJ.XC3G`?5 `?E9`.SA ? LZ Uh`F / >?5,F?S6?S`?K@?XX?X(El=@^] @ ?@B6`>\Q`?@UZ?`}?B@^ b*( M`F @_@\???W{? NkNr@R:S %?K20?D 5 Q*W(`V SSIF`?R@?F ?E޴`8Jʀ?ƘR;_: R 5@?!v@?S`?Q:HE@Mݝ?5M?Fh?H ?I`?[?v ?( 2Zb)`?E",`3$?GD@?PC>`NP@?I ?J@Sź X@?B?_?U `G]d*^X?2}{ ?P`?2`?1Y?Fâ?1ij>?Qp&?^ ?>P9@? 6%g`J[?+20?K8@> ?N`?SSC?;M`X҃@R ?Ju ?Y\`?Tql? |Pq`?Z `?&%g`:nEJ`Q@?T?Jʀ3Li?M'@?U#`?AA{ݠ?K`?@`7@U@aN|RC`?OO?W(`?D`?Q$f?SCoZ A@`?JF_5aM G?J ?@y c`j ĀO]i@?SGz?5,FS-@`?G`?AY-ӄL@S~G!i ?>`.`?0΍`??$-?&Qam Ls?T?R`?$-G?.a ?F `v UT=?,2 ?B=Cǀ6[E ?He`ffT?*`?0΍`!&@H5S HP@S _π3$?Y ?O`?G ?G@B{`TN??FoQ" ^ t@?V<`?Qݐ+?\+\KM?HM?G@?V4?]@F @Aij>?-L٠:ʀ?E?[?QǮ?@G ?YO?`y?A$-?Q$f?? W@PpI`?K?U6_?TGW?S.:?LkI@?X@?_%ܠ?K0FC E@?-@?C 0A'`H` ?< G^ V3@ ?: @?Mӄ?Y~6?MYJ6G?U?BaL?4,h?\ ?HTCNZ.@T_7F ?Q8?T@5b#Kt@?E@?U?D@?Gr@?Fl`'["@2@?4vy?FQ+?Lr??@ ?5E?N`?<Ӧ?@??@URiH"LZ> e?ZS ?_π?SF$3$Irm??:0?%?K?X[=Cz@B`Cq?A&?]&"@?^?L `?3i% ?SK ?\_?u@Qx?vVPG 54?DW`? ?A@?^dG?W{?Dy׀?AQ?+?`?8F@?@Z@?,ZAU`tUp@7ZQ ?H?J۠ P+ UQN`LkI@IrmR L/`7`8 2:&?0?F`?A}Խ@pI`PLY$VI '?Ci 9ˠ`d` E#`0??IF`?C` `!N|HÀS_ ["@?L"%Ps@:d-ӄ5 ?Ra?_bv?= >`?MZQ Bb@?Y1?b 'ݠ^, TLdBaC`?>??`6J?1A?_-`?a?]ZQ ?U?JS?SD?`:?]=@?Ut?S1?A_Q@4 @7%D)? i?E@?Qݐ,ubS: @@>@O@?* ?];?^`?L] R@>Ǒ?H᩠?DԽ?.?G?TnD?FD?F%g`?Lk@?_?``?U@?F4@!@)Me ?0A'`GݠYwz@17`?549`?*d?9@J.?#?^"?9`Zf Rv??Bؠ?K?I`?;A ?. ?Y `wܠP$A&?,$@?R5 ?7aO@Q¢%?IuU޴`82 ?L?9u?,/`?P?R7 ?9`2@AU7U/] V/@"v`?J[>3$Yd T2@G@F_?CO?D!N|`.؀P;?P?M@y ?'["@?9* ?:h1 ?R?/t@?*?QG@`B`?U?X(J Z(`NiQa T}5`?U ?O`?R?ZrJ?D4}5`?!7`'["@H ?.L?8C`Aـ?%D?(Z`P2?@?W $P?Hf?aL?` ?Yp?N6`26HW?< `?D`P IR{`?/@?C`?Fg ?B?@DU#`D@?B0 `?SX?Qf$ ?Bz@4?1H?L`?3$J9 F3H@Q{S/TL8`?@y 9B] P?N1?EX d?9 ?6FQ+>6?D^'ݠ:9 ?Q@?[W9?E?K?_ ?XP ?B >`H(@3`?R7 ?.a ;?D``?<D=> 6%g``@ا?@?"@92v@] Ty׀?S%?U*FH;?0\@G3 a$`^CM'@0?.`?Ap&?=P{`9$?9 ?X?N‹AK H9T<ӦG3X?J ?Jn?,Ӧ?I^:`?T? MB@IB?Mn@?f"?`D?#X?. ??SO +h@;?G`Ss>2S`?%#`I^:`??G]#`?F^`?e }?c`?WC@?UM?Kn7LW >M͠?@8$ @NY ?P?X6?T>I RDh@?59`?Hn ?R!`?K? Ѡ ӦC`Gr@?>?9T@V^``G@XhvSK C HS`>hv?#@[V\@?(@?JR???:MB@: U`I?1Y?0bg?Iu?Zh1 ?I?Eo ?\س?W,@??Fv4WhRL >6?+Z?;0?Eŀ7Tf@zc?Jd@?L`?)2v@???J ?,ӦA❠>d?X%?R0 `B?MݝCbW&?$5?E?Sz@?aM?^?8᩠=?2z?Sd`?Px?1:H`?2 "nj?4?Lk?WK?`je ?WOYFM͠Ywz@?6?Oj%"iQx 5h`בBG`F[E ҄6?;0@?$@?D`?_ @?X᩠?t@UeRG U?+ @G>3$湉 HyL ?@D@?Ti@!v@/@?Jau`?/ Q@`V L!8`>҄6?;u? `?&"?T?[@>M͠QqՀ? 8?L5k?`@/Av@?P=ɀ?UxC`YAG6|3T?'?' UC/S]\DO?@:k?C@?%??E@E_@2XDH/Z `I?UH<??Kt@?7|V Q ?JI`?E֠3 'h ?.?G["@?S?UV[ ?I?8@?QN|?U} ?P8@?,@?Zy`?Su?5@?H5?Rv`?3@ I?C?T?X@?W`?F4@?2G`?BG?4i@6[E ? u`?Rl?WD@?GJM*u8ƺ C`S?6hPNY ?M `?H2 ?J?Q?Pp?JR?Po?Y_@?R60:kA؄ ?2z?G2?*?P@T=> >@L`#)Me T `?i?WjH"nj[ɠWH@P/?@0 8hvTo?)Me ?U0Z@Rl>2 ?&`JnQC)-?7?B@%3?Dh@?` ?R2pETY J+C@N7<@?@ ?6@?5=1^DL U ?& 1k SQ @Pa#E9`?<?M??*`?;?Q?X9T?Io*u 62?@"ڠ?UQN`?: @YK@\=1?1?I??X|?[s?[?T2UN@?7M?N`T9?4@?+P?F%g`?T4Ӏ?4W`7?Bnj?[@?D$@?G?IP?@@?Ti@?`R ?`<?[?SK ?T`?XCn`?RT?T3$?]?b@?SX<ZpT[?2@?F3?x?1?M͠?u ?82@?3Ϡ0BiH<?#v?9Z܀?0|@?D?>1J5@Y~6UGQ!Ǯ62>?E@?Xu@?U6_?Um ?L]DJUZ3$?Qij?P΍`?t@?A:H?Y؀?R{`?Ci% ?F22@F4@?U?TN`?Z ?N DzW`2`?MY?8TCQgY(\?%@?``?^7?R U?<PERIL`?4}5`?@&8?Ci ?_?\kI@? A@:k3bi`?60 ]\WJM>``E}? I?S ?M<`ETʤ 3X*L<'@ ?IP?L!8`?Xr`?`oq?``?` ?udoc@V Z[`M&?T?<?M͠@DCXA?]ݝbIPX`:dRC```bj`[ŠRgA?G?MРQ_?!?ZF?,/`S8T Ab ' UG%D?L?^K?a]?OF?2?CD3$UM®?3` R@J}F" 3X>Ǒ?vV MB@?+u?0i* CG<Հ?$N`RX4ffa 4@Ss>DbF3?.a ?26#N6@C `?P'?R)P?@Az@ ?={?N%6bMbH[@Y<?@3`?&x?)Ƙ?`y?`g5T Dʤ `?!&@MY@eA``* 1HT[J}?D5?V ?=@LS@G; ?5vV?Fb?-ӄ P[?A ?Y @?@}HH`I L7Tf?@?S`?GJM |?79w?Eʁ@6DB6.u L@K@?8a ?P=ɀ?Io?82@? &.??`33G`?:MB@?NE ?. a `OhA ?N??`<2 _%%@?V ?G+$ B62@?@X\?9hT?:nU D,?@UZD,hZ> ?2G?0Ѡ?0|?EG4?>Z.@?$?A ?T?T?R"?Tl?2U[ߒ ]@H@U }Z\h%@?@0R ?;?X@?[}1 [ŠU@,@-$s`S@aRa@ dD Z5@[ZDq?O-`?FJoR PB`?K(?[4@?P͠;tQV<@?[h?C%?WOY?S?)`3@4}5`?t?AZ?$5?t@N`R@UA`dڡd]?9ˠ?YRqJ\M!DT ?2@?U1R?JC(?Ju?V8?0&8P|BD?8@I@??9hT<F3?* ?*2S`6,# E޴`?G"?Zq@?8MMB@?C?DQq@?7a4,hQL>2 ?[ ?X?A?1Y`?@pI`?'`?E@?/ >?S`?0|5`?1@>2 ?E3?b̘?YJ@?& ?Pހ?X%?A؄ %@0?@"ڠ?PU ZE ?&x?>P?D"O@?[Z?CoTN?M ?$% R@?PW ?S: ?8o2 ?4?5}?G;?P3?0 IP+ HP?9Me *S: >?WR?KA ?&M͠?B=?6bIR1Y?6VMB@8f>`5 R6 QD H?!@?W?A7`Y>L@?RIL`?P Ѡ2@?6"?L|?H/;@?C?C @?,?$h?8a 3}X@QI\`?%h`?/ >L'M5H?40P?3%"v`c3G`Zr@:h1 @?Q3?J5@?PuV ?Z\h?0k`UL|`9D@7̀FMZ$J`?J??U'9 ?S?:>P?H?`%a ?F(@FDE?5,F@`U6_?(hv?UG4>P&81N|?KP}@?G3? 8?QK .$PSd`$[+ɠIˠ?D ?as?d&?a@- ?V ?K@?Ep ?As@?H?Pc@?P`?Q?1Y`J`0:k?QU7?Yπ?P0 Cǀ?k`SOq?A@?K @?! &;A IBI<?d?R@?=.?R{`?BI2`?U/?G2Hƺ k`?Q?G`?9@?Sq?[3߀?R`?F6<?5,FETCo?72?Y<?bD??=rTh@?Ǯ?NO@_*`8?M ?IS?? ?M?I$C-R``҄6Z,f+KV@? P$]>+ @I\ =@@ScQC$?U?A+ @ݠ:3ۜ@?v@Eo U'9 Q@R6S=1H\|Fޑ?N?L?F?G@?u??17`2 IvLs:F?.Kd`^iD0 ] \@? ?TJ?I ,$@?C`?\ >$-_`QHvak@\?HP?`-?Ik2iH?`?<@?2}{ @@7 ?= ?^B@?#af`Vȯ@D@B@#3G`CJ`?&fX;R? d: RQـFW@.?X&@>$-?6`?1U7?@I ?@D@DsNi?!A?:`?*h1 ?Mݝ?Q?6%g`?? ?V2?Vb?Cq? Z%D6 xJ9@F[E ?) ?VJo?W`4y`IK@?Q?QDb`V `^@bF G9w?9C ?KkCт]rPV? ѠIPe`bCh 6$ _ a^Ǡ[d`5 ?3%=@$s`?O?P ?< #Iy)@Ty`Xt?@SC_ Bb@V/Z`F`<P@`?"3j@DGWH?hvQnw\UH??F6<?L/`?KS E",`XH{ .`CGzcuX9T?RÀ?_O`?EET@?13 ?]ՠ?;0@ZwWNG? K@ZRO?SO?*Q^;S~`P`N8M [ɠDh?[px?BؠV"JTN`b!Q@PW ?W@0 I5ߠ>$-Jau`V'`O53$?Q@?V?E_@?3,?1[`f -Mj`TzKɰ 1?Z ?g?TM1IF`>3$(MK20S C `;uB@?7oU`?O?Ub#R,?3i% ?0D;A '["@B I: M@@A`?-gȀ? ?b@L R@;t@?`K![@T?D`?\f??AYC`??CGz?X ?<$@Q8Gyo?E%@?T?R)P?> Q{aW@TB ?0:k?/K0X F^?@/?KW9?Dy׀NQ[`P}9@EVޑ]@S?5T@?Q?I<?%@F[E |?W?5E`# O$?\R @?b{ ?7XGR?,`@?03?K![@?*?A&@*u ?6|.KN@Uc`R'HTC[R@Zm=,8 ?UO?7DM͠(?3`?Do?Ce@?M$s`?QH?C??, ?J5@?E6_G< X. M®PW ?K0?k`?bj? ?b@1k 6LubU9`YF`LQ`+uFo>r@?N+ @?Rۿ ǑQ$fW.XWEC?(@(e?2+tM`1 ?B[Ѐ?:@>LK$ ? &?Aj?0?JMB@?]I{?Ut?Q?Y@?Q.`?5ߠ?9ԽP^`J0?$Խ?K+t?[3߀?[Cbi`d1uT `?AA?C#%@l?.u ?]1?f?a?F8r@@3`Kc`MY@C C?6 @&8S6@W!M.?C?\?<T[1j?\B?]B 45`xWBiHB[Ѐ?4h@?TE?5G4HT;?J@?^'`?\<?K0@?0bu@ "`SlW 54?H5?az@ ?do?"@J1`?RB?Hא ?'?:?$W`=ӄI ?W?^@?Jl!❠"%5FfAf ?U?` r@"njU{cL/- b6V2?[N?dU?^E ?U?)Me LdTJT; 9ˠN`PӚ K8@?2NY ?'2(@2iHRv_[8@G Uff&?3j@?E`?8 ?3$?=1?6@V@>6?@Q7`?8?D^?Fr ?7 C: ?H ??` CG B? ?A?=n@@`N?C6?Z 17`aP8?D,?K ?A"?D@?Q?VV?\G?_2?ICKA7`)2v@?*R6ox@% `?1}&%g`B_.`MUV[ Ln ??B?% `F<`K[?Mx?IC IJ@W%D?) ?F6<Cq?$?W@3`?)$P|>@?Ur?YC ?N`?/$-?.1?>?3i 2{`M$s`M®8w ?@i?U?;Z P`?Sl?B6.u ?I!?KFc6D*MB@?VW@?^i?DH ?n>?3I?^0 ?Z?I-`?D?C`U",`[@?R ?W?S6?3G D `U֠R`?t@?+A K;t@>?N`P8@D@V ZXCn`E,>6?Ƙ?![`?=@?J ?V?T[;M`Y Fh D`PTO8`?9@?C"r ?C"r ?=+/ w 6?3?*$?Fo?S~?2@QT `Fr KCLI(%!, `@?\ V@?]?b@:u A`?M?@}>ܝ ?Pw ?Q =FUIF?$5 >[G*`Or9u`?-ӄ?@}?P?QjBsa` D,h?P`? Z7?HT?Jd@5T@> `?VW@?YF?0Z@S܀C: ?Q?"%c̀c0΍`?Ms ?= I ?,@?; ?7?8o2?6 ?`??Ci ?BؠOI6 Y;A}R`?@?X!?h1 H+`SoaZ5 @pI`?Cbi`?E>?"%?D5?D?7w`J5@^`Q窀#`4ffA>6?/$-/- :@?%?#[? ?3[?t@-r?+ @?3%`D/ƠN.j 2NY ?89T?G]?6 i ?Q;?` ?LB??L?SY`P&8?A`?IW~M7@D?K+t?Ru?Ô?= -L٠?2 ??t@? 8?0:k?<Ӧ92v@P&81 ? UTEaGF ?J`?T `?W\ ?O `?M͠?Be  >- ?O`?LLMrQd^?P|?\L! ZpO ?D}5`?R{ ?A0/@?AG@?R7 ?9F`G*> ?T?Q❠" ?Ep`?`M@M͠?S*?R@#X]P7W*`?G]?OxX U/e `V ?:S ?2iRL IӀ?R?`ݳ?^@?VM͠>hvGw`?J @?YˤG*a;PSaݐ8|?[u?V9?@ IB\ڀYL >3$?Vɠ?Q!4GW4h7 UVsQ`?/ JMB@2b@?2 ?r@BJ@T`YLɍ@?5@?EN ?(; Oq>Ǡ?I?GL$ @. @|@MР>I ?E?Ba?]dj?dY?D/Ơ& ?S @?Q?2@?GD?4@Fb2S`?B,?`?G|?4i@T\@?C`?TY?) QNE ?$ffXL`Rr`?L?]"?_S?``?Ce@PQ`?PpQ$fbL 4W`?ൠ_ja ?U@?E`?3$?4?R̀?Z?@S{`? Z?UE?G׳*&@V@?>Z.@?ӦQJMB@?EJ?M&?D@?RU?JS7C`?D_Cۜ@Z?! ?W-@_rT `? 8?!v@GJ$,Zt ??=@?@?2nj7X@Z==`"V `UKFc?2 ?R%@?? >C@IK@?G(`?TA2 UR` i?5W Zc50?Q1 ?"`A.?4T ?_}d?c??H@M?N1?Kr'4>u@?6"@`A 5`H!`2@?;0@?;?PB`?O ?Z `?Z܀?c?``0`Hhv $ &2DX-F` `?X?^@b Q*?ZQ 91OqX ]@TffLBC ?0?4ff@?L5k?Ô#@?,Q?Rl?G̀?H`?R5 ?ԽPoPKAPc@Sź ?:?`?Zn?Co?) ?O >?WjH)@YRq'v ?U_@?H(/ ? |?R2?Ps@i ?GQ?@0:k?i@?NE ?Tq?U?Wm?B0 `PzcQ]?( ?;8@1G@?!❠?M]?Z `VVM͠@}x@A'`QL27 ?S'~?2zZ9@VZF ]0;f{@^k> ?Mr1QS1?(@NX;څ`?=`* Qw`NJVJoN%@?@?R?9C CJ`!@?\M@?]Q7NY ?a$f?QfP>`?S*?I!?Ma ?G/^ ?MB@?F?Dt?PQ?S6RnjT"O@?T}?Vɠ@I\ >`?0 R@*?"iH?Lڀ?D6`B=E?:SR5 MI{NPIƘ?>L?Q`?C[?07@3`C`?6[E ?MB@U`tF?Fޑ?5 ? ?Ey?I`?R?X?PUZZ?73 ?[u?CN6@={CϠ@@DffZ`k<5?W,@?P::F?M?Y?T81`?K5`?72`C%`73 ?;0?Xt?@?]?U}?AN|Ge;\R @Tvy%@?,/`?Cs>?O;?/t@E `F+@B3o9dR#?a?W!LM5HAǮWF Y I`?"v`?P|?H;7hL2 Lk@N1PPB !YDbFQ؄ @9v*<2 BQSO X@AlȠ?v@;|A`I?53?K?Q`64@?6g 9 W#= ?T(`?W1 7a/W``R(᩠?SO ?Y>?0΍`?2%?Zf ?@`Y X#rT`V\.`*ZQP*?ZQ ?4?Lg`?Z ?J|d@?AK ?Gf@`Hr`KPLJ`MYdbt9SUj`Yy)@J+?5#`?X ?W>[(hv?9 Hƺ_"~Q?#X?F6<?D$i@=S`?@?U*?TN`?L@?&@? $ ?NX?J *$>R@?3,?6>@XML٠?H`?-gȀ3}X@?E?TS?Te`?:BPD@LbF>hv?Q?^-ӄRb@?Y?d?>`7?+ @?P|@?b:&?Y| G`Q3Bѥ\Zt``=@?% ?E?8F@?45?0?H ?% ?{`?NZ.@?Gw`PZq@: @?X?bѥ?W?3[?RIL`?]?#XV`Q=?SY?T~`?BJ@?4$)@K8@G5 ?> ?U֠?2%P`?<+R?[`$ffR?Qs?et?XG8]c$!\INq@:`64@Q{GJM?S~`?X&Р?-?b@?A?I M͠?@Q?$i@TYX]N%@Qb_eZK'?D[AY`W{A7`?0΍`?9ˠ NI`!v@?@@ Se@E6_As`45 ?=.?.$Pi?W*`?e΀?Wj?7`?(2 2@9@ 2 ?% ?SS?`Zg`?T `?HF@?<+RDo`?S $Qnw?=s ?S1?Be [hKAQ?N6`?TN?K@?,ubV&U'?Tc?WFâ9 ?Nֿ?O'?T ?U@?H`?Ut?T4ӀE, FW@?Q?P?0?267DY؀VC 4o%D.?B}{ ?ZY ?S ?Ba?Xv?[?]5H?Z?L8 ?@,@?3$6M͠Q؄ T3$Bi?0?L5k?Q?Hr`?FM͠?U?S?FV?L?Eu@?.?LZt?@y Iˠ?/- ?ZF@?T Af [Q)@;`$$?D[9BZwWJ K9F`Te`U J`IMe i?N ?3TʀRn?NY ?$ffTna`2G?_E@?Vg ?.a ?:`? ?[h?B`?VRڀ?R]?08Q窀TLd?6@V@?xW(2 ?Z#-?O`?@8?Ep?8?X?d?T?G?Yrm?O` ?(@?J @?GTf=?b@K`6"nj7 ?@?V~?^ ?Ux?X^]@:@i%D? u`3i Ab R@?;ɠ, O;54?M1?PA'`>R@ ?R@?UE?3o5΀%vV? ?b@ &8?*`BHP@D5 )$:@>$-?W@?U @:k=?VW@?Mq R [xY:Vo@ ?,?M??Y??,? \)X" ?A&@/- ].W`?ICK?Zau`?KM`?23j@? &.1 ?D?T(?J`?v@4 @D5 LsR?@YU;l`)1?F?CG ? $ ?@@?P$P?G ?hv>@RT`h@T=?E?SN6@?U}#XYBEԚ?OF?CXOE9`LD[?36?Y`?Y?Tvy?Si :۠an`E\U}A?3o4ffR]3 ?8v3@QqՀRnjG!?!?K?; C%CX<Hv5@>53?AX?Uy5Ԛ^7G|?P?GyoP"ڠP?4N`?,/``?1U7?M ?\? ?Pf/?0&8?:ڨ@23j@J+6|Ma RÀ?G^ ?_.G@?Pݳ> >8Ot@WsX@E3?H]?TO? P] 8a ?"[Ѐ.? N?%E8 ?M?X\@UVf)i?_?AaBIB?X#r?R?3 ?C$)`Qj> ?Q`?K>QE?WҦ ?^ ?&fEQN`F @I$17`?3@?NP?bj?^`B_.`S`Ce@W,@Kx?O`?$3$J`ݠG2MH`?U;l`?W`/Ǯ?Eh`?N̥`5?Z?I + @:S ?0??' U?@ا? Ѡ?B`?^Z.@?Z9AlȠ?N?b`?^?:|d@6[E 8a ={C @S[Dh?8?qL`%MDGWP?-@?Fb0 BX?1`?U?S:C-aCi% ?g?m+/ ?{`\D?P^`?fk ?-ӄbV @?2i?,g`??8 )u`D @v?" ?H2@?Z&?5@Q,`?8 ?aJ?\c ?7F , (2@IZ܀YcG K[?G2?R)P?:??>{?..? $ 5`N ?=+/ ?QkSۜ@ZP ?X9T?eB0΍`c:L|?S3G`?C ?/ >?U-?>.[+tY:?"%?I? 3-`?F`?T?$ffB@7U LBXhvOj-ZQ ?<@?S?-$s`]?Vm`6D,?.P?c ?PO>`?N`?U=@?_ ?'U ?C$?U 7%D?;?_D)@?E6_#?L`?I@3[E=@JJ @1[`@S~`!A?]X ?^?7?"{`?QD ?Qݠ?E=?&%g`L@K}>ǑDhP8? d7̀WH/L?M 2@Z,T,Q?%#`+R@Jʀ$vy?cO ?jlf`?@ N'`?VY ?d ?1[`^vU^?4ff?G U?69?8?-C`+A ?8`vV?HM͠QG@6?C?@7 ?1 &?E ?N] :`bF `+MS`= ?8+`?WH?N 7oU`1H?F"?BD??(%!?N?Di@O;:ʀ?]@?^5VY ?` ?8Z`A@`>@?T}?Vk @/Wr@7Tf?JW[?AN|?1Ǯ?Q??n>Y: W ?>.??PE]w Z> A ?.$PI2v@X!`?A7`?b`?S,?Tʤ ?e:?PdU[hMB ?1b ?T?YaM+/ dwQ C ҄6W.$vy?`?S ?1`?Q?IZ܀S1`TVKA Q!V<`ERCZ?N;?$Խ2`?HCn`?V?Y ?W ?["@RnjJG +c`?Z ?YJMB@U֠?7?KS =@XGYhP ?i?,/`8f?2@?RP`?@H?)?J9?@V x^@6 ?SL`?RX?OF?R?H@t@R`Y U#`R6I@1 &>a D}5`>`?J?O?*u ]F` ]l@Z> ?!A?Y/`??b@Vx(e?Y @?]S`?[?UE`)?Uh`6h?DN`>M͠G??LXPgKh@?E%@?Xt?@?K]$P?c?g(?3\р?- ?Vox@?ECSgv \8`QDb`Z?6`.u >P@4N`6g ?1A?Po?P ?G;;h@_U]?#?,$@?7?M@?C_ M͠Eb#W\ ^@@WW`5G4hvOSV@ >`4,h?,$@>CXOTBUp` g`?5vVZeiNSr?J!~ ?U ?X^]@?OO7̀E@4zP I?` ?Af ?I?+M`9Z܀3@?$i@?8[9`?Do?R`@y NǠCbi`?A@?U",`?\ ?Xe`?2}{ Dh@>[?D3${`,/`?>?4}5`(M?6@V@?C3G`?8?1[`?>?2 ?F[E ?V8?N?Fâ?@8@'D?I ?DbF?,/`?%[h?Dl` ??{?"{`> ?2NY ?Pa#?S?M?U@Vâ\I]Q&2?LӦ7P2zԽ `?85E`D`0A'`?=`?Y* ?c|?VtAp&5h`?O?3$[nSтݠ?["@?3X?LI?E+F3P3?QL?d*?\ڀ?V?QK 6Qz@ PL >$-?:|d@>BiE [XE@;t=`ZWVEcB UW UY?6ox@?K('hJZ@,@?#X1\ V@aT`@UZ?+?F" ?8?4ff?K]?C,$@%?IӀ?R2?J@?.u ?%D?92v@?1G!C ? u`??E@?WH?b7?Wq@=8d 7D?7D?QlȠ??- >L?C[?L ?9?"%?F8>`$ 5b#3T?D ?? @Q5΀? ?A@?\<?[?R?cB?f ?P?A)s?I?45PU>E ?5W ?Aij=gȀWTfBnjZB@L!8`F`?,@$- \@?Bؠ?)$EW +M`?: ?9`?Fr ?N`?IB?Ug0?\w?J?3F?CDEQN`^? Ee?@N!&@%?Y?\n E/\?69?W?%3?$[?Tu`?L #`BP {`?OX`?(eYSV `1}I@^K]n@K20MgȀ]l@Q.`?$F@C%Q'Ġ`? BNY @?OF?T?GU ?6V?;|A`&G^ ? ?A@`A?=8?P=ɀ 6 x?P?Vɠ?"3j@Gw`L!8`9`?Lڀ?Yu`?Gh2?45?FJo?=?Cq?N1?;? ?8T% Iˠ> ?>a Խ?'ݠ?J?@ ?%%@?;?=u@%MKxSV`N :@RL \R:&P|Kx?>L??1 `?[.Ҡ?dЈ`?TF@?KM`?F A7`T(RsaGTf%@G"]r[P}@6@?U }?K?@D@;20?NY ?@?R. ?F2EH?)$?OE@?Zc$@?Yπ??{?)Ƙ?HyL ?2b@$ ?4 ?b@F@V@r@?FQ̻Mӄ?RÀ?`z`?:S I\ Ѡ53Y@S1@6h w ?Hƺ?X*.?U4,h]$s`T(`A{PL[\+RSPD@S-@B`?2 ?EQ`:?U?bt?`A'`?Pzc?Eʁ@?Q+"?"@Qz@ /Z `?A`>I ?/ൠ?.r@R[ЀNdG?Gyo?9T@V `xVo A'`?[?h.c?c ?H`?:MB@?8w R `ѠKn?3Gz?NE ?Zy`?Mb'%D? +M`D?Cq?R 2@FĠ?!H?.gJu _`_VPs@D/ƠRl^sn Yd B3j@JBQ;{`,? Ux? ?H%!?KZ?M??` ??8e>LB)P??9u' UAp&? ?Tx(?Tŗ`?`5?1Y`?@ا?;? &8LӦYK@I<?EԚ?WA@?K >? He'%D:FF" I ?>`? ?S?bu?Z5 ?HTC?4`3$N`0R G3 ?O@?U4?Ss>?v P_t 0\@! Y$VNY ?1@?:?"`PbQ3 ( 20J O8F@?P|@?`W ?]?K(5b# Ѡ?Jg`R?"@?T?V^`?^8?S`>`$N`LxQk?NdG?VEcG,@Te`%[h@Sź ^1AU7?R_.`?Cbi`L @RA4GWMݝBۿ ?R?Ps@Qx XǠ0A'`?P?Ws?EW ?>$P?YHX@?Xr`?C,???2ۿ 6G@X`/ ?v@?=@3bi`L] ?' @s4bF# NPNIY?ൠ?0:kI2v@U `??A6?C"r ?u@ Z@ZQ i$$?6V?Ywz@?d@?b#l`?P`?8Z`?,L>I ?6`?=+/ La/V@?-`?X?V9?N? ?@`' U@b V6<?A,`?6,# SH5?Up?R. PlP`?C>؀bccX;Kh@Mn@?: @?E82 ?JI`?] `:S_O`P`+A i992G@Ci ?3?S ?@0R > ?RC?LkI@Q^6\ P ?Kx?X&Р?S֏?a\?`/?E3?>?B. ?7U ?B:?T}5`?4h?RV.LCO?&?*@D ?K?^?B:&Eb#8%!08@JʀVq' E?T ?R R[Š@?\I?b燠?V?A@?Ma ?R ?P ?F5[hY$]@f?%E?C @I~`a%>@N;❠>Z.@?E6_?a ?R $F@1,`I/`XP K}?BP ?Tx(?R!`?A?9ˠLɍ@L|Mx7,@?T[?g ?g?TCE ` >? :`?3X???D) ?Fl`?❠?+c`?TԽ?QA&`h@dW/^ ?D`?R 0N2?X?QM ^ `5^?(ƺ9\S@N? QZJ`?2H@?^X@?[?g?mjN?KC^CZ J[H2 A}%@y 5Ԛ;?N7?^`?/?GL?E4?%D`FVk 5@OO@@?<$@?A?R%?P`6,# 63?69?I/`?X涀?Kc`Oq`KW9?8 ?D$@?@b?>؀?26*BX ?Ep=?"v`#3G`ZLB&v40UE`K20?MH`?\]?_G ?Zd@?Gr@@y 4vy?$@?D ?-gȀKS \kI@N;?GD?_я@hvajB@Ni?3`>u@?V*t ?hIR?]w?k`,ZtA0/@J.?!Y?M?b@?@"ڠ?$[EDW`=OVN a?4`?WK?W&@?0`D$>҄6Ǒ\bb{ C`?Oj?U=@?/Pk`8 ?O@?@f/DF@Hw A"@k`?'ݠ?O-`?-.C?(T2 g\ iU*SтS?0?Q5 ?N.?SF?Zp?W?5o \+@Su)@(2 7h? ?-L٠? 3?Q5<?Vޑ,/`5@?YW~?DffU?As`?bl?6@Pk`GD@MY@D?T?6@?LL?H@?I ?J`?YT@?2S`P| ?P_t ?I?? 32C,TP7 GyoDN?4W`?@!?O?\x?1&@Ab (T%?L? ?Y?Id ?,?D$?G͙`$-O Kkl >A?@f/?& JP K69 2y-l@9.`GGH,U2.@\g7Nv?7- ?Aɢ>U?3 ?U@?]p̀?P E>VR@A;?/. ?<`?JU`?@ 5?18Š?U!?K?=f!`?R@?V5 ?La >D`Dh 1`?8BH@?#B?'Q@2=L?4-?(?!^?5Ҡ?K?]Z?WO@.]@8`?E>?H@< A?V!_`?c?E??Yt ?_>@?J] `?{`?EJ ?VGObU@]m`X@O19T{#Vr:F!CAJ?3?OA@?T`?U 1@?X+Rd?$u?J`?OD?)cD`?#u|@?P+?D}@?BȀ?M?H?F`?.% Qzw U?/Q?Z ?U07`?B4`?U?Y?V3?.]@T@`. ]@W2Pˀ;@?Q[?Dr'@0(ld@?^`?Z?^.?3?5}?W`?Y`?Q߈@>ꚠy`?\&?`Ā?2]0 ?-q\@?;؀?Hـ?,;kKK EGV?/M?LW~?<>C|9 0?9)X?.2?@?MMN?7@?Z-?&);N|`?IH`?UHBK RyHGTT'y5?Z@?ur3@64?7 ?0G E_`?=?/ˠ?>za`?9؆1L114G?/zj+qI`??Eڠ@""J$`?>`?R!`) ?YE?\F`?/V2^?X?\BI@XY SPV~`$h ?L`z?C.A6LC`KٹH]?"c{ ?.`4?@?3K#`@?IƏ ?V@?QK 8 Zd`P`Ѐ?CR?V"~?P`?9z2?W?ao ?I@Av5|K?Mϰ?VXSXOu?Eh@?aaz?_]8`E fNJbS2QRBPd3J@?> ?Z?V!UDQ@A~e@Kܠ@(V?St?)c?([?4aO?!??@W?0HtO8L?;ϝ?G7`?4; ?6`-G`V[4Bm?U-?FD/@FNJ?:MP?JB`QZ0Eb@ ?u?W?D쎀?MS @?,DgB_??=Q?'q#?)?C`?Gٓ?3oGEMI?!2?@Ƞ?M?:v?J;Y?3J@ ՠ?#Z? ꚠD%`-Dq?Q.?GuPZlV ?C#@?9H`KN N T`I?;Z?Qܹ?7o0. c? l`6OsBS;ؙB}?)2`?FU?QUh@?V ?*iW^[JJ@?Me?a^@?K<&?W1!?`v?Sɀ?A嵀Bv`VکCy 1R`S%?ƅ?Yd`?J:\ ` ?,ϧ ?S?L-`?Q?\'?dı?c?O%?B4Q?P??ST7@?AI?1ހG#KQTa?*/`?HC"RBZUX?N#?aS?^ʀ?X`?Ug?UD%?Rr ?@i?7?B ?:ϔ`?HV?\QQ?Y>c@LHRD[€R&G?Gak ?H" `?D@?G M܀Q"?3 @?G ?>+?@n`?Pr`?S6`6Q ["B"Y`?N?Jt?=:?Bs3?E?.za`*?Hc?]U?Ky%6ϧ ??*u?N?V?PӴ`?2?A?; K*VRRۣ9!?-G`L3X5 ?#6`5 ?:?/I!?6`?~[=K`L`R(Gk?""1j1 ?T-@?W ?10*? _Q?Wjg?a#@?2 @X-?A7D8Q&?>3&^ eˠcOݠEw1Qz ?P ?WH$u\W#?@?bi`?]?N@?W `?W?U̖?UH ?Cy ?Fo?Z2?S<ƀq %e`?CH?S'p`?MF?6j?D/?E?#?Fz`?O,BK P ?EC?S?B?E?L~̠?@?6e?&;3+ n?4?J @?S ?Y{?Z0?B@2@A8}`2 ?$`D@P?5?LB(/=ƴ?4|B?N0C?U ?TB?R֠?G@Q$^+6 ?% ?U `? GҀ< I@? ?VU?P?YF`?1P?f2QRlW$@?0р?[;b`?]8?Jm9v ?u?Sߛ ?D9z2]_@Q ?:Q@?I_?@OF/I4@35?Fl?SJ@@?G?D^@ ?/hs ?3(?5?&q<] ?! ?Q 0R{?=? ?Y?V?RX ?Fl?Oe?TZ ? zX@?ES`ə ?0j%@?5`@a`PcM.`26?TE?X[ -̀DK`?R@?[a"5?O?@664G@I>QW@,-`?@>?Isu?P?N?MO ?O`?Ih?C_ ?C] ?6j]?;4 ?F?)@,-?-?@"4`>l`PޠSC3;J`Q?w:Zʀ7 ?II ?T?<?+-?N?S?* USY@?F_"?S[@?2.@DB{?1@?WŽ ?U`?Fw`?/DPעQ`?LD?K[@T`[ؙNƾ6V'?$z>᱀!+?ӽܹ?-;u ?"?\ZfpU=?6c?T!@?N)6 @?/_w@?[+?KơEg@EP ?O2`?QL@>;=`?9;O?C&w ?"; ?V?@?a?^}?=c;_Q?G?]$?\a ?W3?P@?YG ?c ?M PT?`C?/ ?@m?9=m`:3?BI ?>)?F+z?U?2e ;w??@?@P @AS C)_I``< ?.77l? `?W4?7o]x S;@?B?3 5' I`^[Vok@7à?$h ?)}.?*?CA U}k`R"?>qo2s3:C@@р=GNT6&?VGAM*@?%a@?0ACGq#Ga?F?XIO?H6`?;6?WIF`?I@#?E?`?ar ?Z޽@>Dr'@@@??`?E?!D`6?@NH2M`?I(8?"UC?+?0=: ?F?3`C[@0`?+;b`?"2a<@T-Z5VR8Qcq?1g?SD?4Ѡ?/Z`?C`H2J`]?P `?e"-?P7U2.@S- ?D?Jq@?b@?:M?N?Yn?aL`?3 R ?OkѠ?eg?]?U?Sk?SÈ ?`@?XEa?T.6M@D=_I]Td`A?L@?O]8`?E@?Pk?SJ?QG?>uIJY?9)?.hiT@_dWt`Q S8H4h?P`?2X.W 4~2y`O?C@#D7@6,1V`b`V >(?>?2)@Ue`H@?J`?BKM/VPSN@AO; ? ,)@< ?7g?F:?Ki`?_/`?a?SQ?GC?Em?B?T ?Sm HWY@^c@e`?Oqo?K2?@[?VA?d'y?[Y$?6}@?GZ?Jl ?*@Gv@8-̀?Fe?:$`?B>?0>ꚠ?UC?W> ?H?U??Pm>ו@?>3?B#xE,M?# #?LH56 `nQk?B&@ MZ E$ JX@T1`?Sր?X?> T G`S!`?4`?@`?-q\@?C> ?' ?X`?$uV?Gt`?_?C] ??I?@*#6b@?AQz ?Y&@?0%Pw@E?`H@%C)j?Eh@?QE?C?7?9 ??`?IR?.~`M +Hٜ?H@?4`?4 `?4@2y`A2QUKj?7?GD ^ W8 +zE@4"l ? ?:H?M*?CP@Z@g2 R\@?/Q ?>?D?Rш@?YG?EP3XBO?!Zv?Qܹ?zX$@?@Zl ?#?]?TVC ?P?Sc@? ?Hy ?Lk`BX@`?'?^8?Pd3, ?<>?UQ?Q͐?Q#`?P @a)?D ?EX7"j?97 ?->Ht'c`?B ?Y?V?:ϔ`9eC`?V0`?H/^Y@TS@??s?<ƫ@?~?Ie?NQ ?R?[?BD 6|U@?H'@?BK`~[?Y?X ?G@?u8B AR@`?+{`?S ?H A `EFd$`5STk-ɀ?Q嵀?V`?6_"B7J4 ?4?@S`S[g E[?7:*;4 ?Ug?Y/?I %?X÷?\j@ %S8Hl?J!?;9#`?8?G@Uh`M\ ?YDK?\@?7N?;j?N@?T?\ ?Y<?V?Z?L?4@?24Q@ H7B E?@kDTkc+?-*@?]ʢ?T*@??]8`F P?&z`?Ap?H*n?_?_ `?U@?\l@?V{5?FЎ@?X ?YR?28?($?+@?\_?R`=i@?I ?` 8`??M4?B?@U2?9#Ѐ]|@TD?L·?O;@ ? ( ?P`?\n ?,_[ !g?a`?e?R?Af@?&`3QHR-QB@Z:@;<?Qzw ?N?(S]W`T?4&?E`;@>V?5 6?B?P3?Pz?On?Q ?J[?>`?@FoK?:?\ ?VM_,@5X\c@?>L?h靀?lI ?`/`?`P?cws`?S(?0u`? WQ/_D5?$W `[} 26?1 ?+ ?4 - ?3 ?M ?MΑEFXe?P`?Fǒ`C0' I`?Eq?0ch`TԠaa D ?W ?[w@?O/-?8  ?0?H@?B4Q>?L?[Z?J6b@@?U5?P5]o@cF @?9@?YmH?E`8?*3=2y`SQIy>0?Br`?LF?M?D!L7zL·6?E?Q?^?KsP ,J?T?G?<?E ܰ@#g`?S?R*ŀ5X3FR ?6);@>-?&LAp?FM+ 9??<4YT Rya?U?D=_S@D*HCt\^S\^`F@?&?A?*~?->ld@:?4/?Uj?N@ ?C`& ?H ?E.?H?B?^ ?9?8ρG^ @p ?RX?WRB ?De?Ax?+ =?8jp`?O EZR``?-u 6 ?S@?Q@Bqf?MG`?"$Р?UX?_%)2`?BB?Eڠ@?Fs?Q2@?[qI`S`?E?`?O(p?,9?:X?P&4?+?@Pz>M4?ZM?DS@=?R`?_?8V9 \ ?Up?WPt@B?%c`?3@_d2Z`?Do?^`?_+@?Vک?MC@?FM+ ?J`?3g`>ص?FNJ?]r?=m`<@?6 %TW3Vs 5-`?N<?Q3y B@@?R@?cͣ`?VQQ|&`?T1?GC@T@L@?U"u?S# ?W>Y`ڹ U@Nhi\m`.% ?Q"74Um"OJ! X;F@b,EC?\Iu@?FFs?<@?@QpCk7N? ?*l ?NL-?6`?0?>ʀ?X?CD EЄ?EN@?cE2?\}`@?E}?GJJĀS~x )_?Ex`9* 9?%Ҡ?R.?An"?7?:E ?3J@?Q?C`?M?R?4 !?Z!@?b9N- ?,?MA?CR?G<\`?5 NZT`2w?B#x?Q<$?^ ?elj?]?<9?U?dL?DSU ?2$`?^q`?Q ?)l?H}`?R{@?B9`?;J?M@?Pr`?D> BJƠ`W\@?='>?8DB E#;w?9?R?MDJ?8ـ?@1@?7Z?:YJ3\P`l`?B7?;:n`@?4: ?S9?Q`?6?a ?b ?@. ?@1@?5=i$?K@?9`Ev?FS?7Os^k8Mg@?Gjg?&D/@?@ ?O >@Cb a + "?[?SM?DѠ?T֨?R|/?V~@?ct?Zڀ?C$O\t[T?=?]@J%@U8 A ? ?@` ?Q?M܀?;$?TPv?YT < `S?H>VDȟ +ơ?J?So?X% ?\M@?R4`?@]46YDS*? ?>H?ҠTږR=L` ?UD?Y =^``R/ 1+K?;`?7àQ[W&z`?+{`3&JRD).`>@` 9؆?2 ?Zʆ?W/r@?9'?@"F9=Zz;F{@ !?$D?[l;?P$Tp@4Q@?Qw?;VU?R>l`?ZU-Fd b"O]8`?Kz ?X ?I`,OĈNז@?S)`?gŤ?Y?(? 2 `r@bL.!) > P952?=F?A`?CuG֠??'$@?4`?0?>?>7AXdC@J?Lf?L OE@R=L?@?AҠ?MV@?KZ?Kx@?*:&<+ ;N ?$ ?FSVH0 `1?=u ?\@?d3 ?P[@9`D))EŠ>qo?@ ARL3`E8 J;Y4 9)X? ?KZ??M2>@?L?[C΀?Ja`K@?D@?2lwTS߀:+@`?Hv`?5.KR@?'H?M K@8@Dv 7a d6 `?W$`?[O @?KhMPhxyf .H?R-`+( Jl 8;F@U _M`:rCF FD 5?L>@?N!LM`?AD` ;b`T Dy ?Kϝ?Z?U2.@?=?7c ?M?X# ?R@ T@E S #_@F%`?O\?Z ?V` 7J?]?d@?MG`?HU@?V̠ ?P$M`?<%?a]?_+??N@?F`2@@<?$9?6?4S?G|`! YyW E ?(@?S<ƀ?P?6?3?Zl ?=2y`?.`Fnۀ:$`?u(@=& ?-H?T`?H @Ai@+)j?C ?< ?P3?]?Y@?V:?NS =o@En ?W5h@H# Q + \@E `?Si"?3RD`?JG@?RnA@Qv?89@?Z ?P]?IVC ?Y+ ?@n>* ?8:8z) ;?A@?QP;`W X2J`a> ^W(?Nz?Z`?^Ϲ?8+Y}Xg;ܠD WO@QM?)?̀5$N(g`@ʸ?H[ ??)@3`?P7?SkPBGM0:`?DA `\BOD?FJ ?Mn?B31?>`?Q?NQΠ$~? )}.`G2U7?Fp?O`?F @;ܠ;$?V`?\=?2 ?;4 ?U什JQT؀?@E@?9)E ?Q?X< ?L[?O?S?ZQΠ?c|?WٓC, Lt@>ӽ?I`?S5?Lg7?F-?Pa@?G?@?H`U .?XCA@?Xo?X_@" >u`?Yi?S"^>@>`Q QU>D@-c?Hw ?Rz4))U UFdWdɠROW,&?V@>]@c`A?Q@$@T 4 - ?R ?QV*DT?" `?VC?Is>& ?#~x J:ZZGrC`?4 ?S]W`?_`?QV+,@4 `4%`_` Zl?G?^?R?)?CFR ?#0@T^UU>+`?,Z@?T?YN?1y`?VZ ?U?" ?R ?T㒠JbK`?uKD^@N݀>gB`Q5`?Alm?Q ?` [Uʀ?1H ?Jp ?PW ?R7?O^W?On?9B 6?`7:f0Zl?8S?45@6u`LY`?.@L V`M TtQF?L?V-?4J`?=`?R ?XB?`2?VV')`@=:?8?CH҇j7$@?;?S?QO`?S0 ?WrC`?*O0M ?3J?c_ ?`6-J} ?H ?O>qo5uQJ-`8Z{ V2@[X@Q8|hKi`YႠb}`eY=$~?6}@?;F@?K@9 %Se3?06}@?S?<@?&Q?M`?]~F@?Ye?2/?F)`#@W$`Y`bq̀eDO?9;O?Hjp`?T?R4Q?G ?LH?2|/=ڠARC ??CZ=B`?PZ ?I*w`Eks0. ?>ʀ?5Z?R?`?T ??;?Mu??8w@?Q@ ?V|U@> )?z F. @?3ЀX`]:? ?U@?UH?7LD>I@M?(?J?V;@?Zr?DKAT,???X`?E?@u` ?38`?Hz) ?AzP3J6 ?' ?6?:+@)H`E什?H@ƾTi+`A"P?Iv?CK?%Q$E5I?"Y?Kv?2X@`1A`?=?Sbe ?VW@?_o?`y?L`?<~̠?Tk?X@?A C@A?S08 OOQg`R}Kg. zE@+sM@TQ@Wi`UPwY`bX^?hs ?L)t ?K`?G??Jc@?ZQΠ?ax@?Rf٠?<?G`K?`0P ?e}#?`0P ?5jT@?,??Vˀ?@4 UZ ]GπZ@o 3 GAL@9* ?3l`?Q-͠[U@!' ?  Q^]b?J ?Z?D( ?H@?V@?Q*,`?H?Pw?U?Td?<F-C=?K5?V`?E"@?4@$ - Gu?*' ?G >4?RR?WZ?Q ?K?=96@?I{R[k@ZTys=??AR?>E ?&D/@?H ?;?h``u`?@ `?H# 0a)Rҧ?^?C(?X@?]S?P?Po3?FhFCT`?5z /2 PW Eto?Z`Il#o?T@?Vq@?8Z? ?; n?QI?`@?\`?H`?P6?UأSYi@(?S `?P: 1 PрIU#qI`?B^?DPv?6Z?E@?@CBX B0?2JƠ$9P=J@`U?@Zl?Ic?@s ?8w ?P?T M[-XU(?B]?_?T ;VU?^=-?X p ?E` ?A @?E`>]/Nb`8e=Dq?0?Xb?9O@S N.5G?%D%?\X[ \md?;K ?WU?E3H Q:S*R 4OW`?*ƘRE)@Y`[>1 ? !?W={?VZ?c?hR ?S2.@?2FH? CD >@??X`% 6A ?=@?S?/@H)NB!9?6c?RE ?Gٓ-6@?/;?FJ Fw`W?@?XQ`?Tږ?<4?-?Bɫ?Oi?I@&H@0Ƞ?R @?W@`?/?6 ?Q@?5z 7?c?*r?(?7@?!ӽOV&m B DbFg/P/`?R@?CSxڠM ???#P5]R5z ?Pp ?Uc?!?*?RI@?:];<?Nj?M?6M+ ?7|^?'c`?8?CjA;( O1 $1`HII ?> ?]?JaS8HH?=y)$Sh@V@T`N7Z?; n?Pw@?EO`@?5 ?Z:@?`f??bL >c@?I B`W@:??K`?@р@?}`?L01@T( ?A5 ?P>Y<ƫ@K8OX-F@?<)@MQa<$cPch`>FXe?R?db`?Q?1H~@?O?L?9e?D㒠?MC@?'M4R5 R@?.?)~`?5`?0>?82)-L`<=?=F?)v 2FHHtE;* Df?(?R&G?T9?5D%D%`5a@?Dh?%h@P@8 ?H?`A;?.2??Z`6`` ?*2] =QJ?)@?Cɵ@Jz;_dCJ@?N?*R%NH!r@\8d c =ZK@?PkԀ?A<$?@GU`?M2 SMp<4@?!Qz ?@9۠?F-?Rd ?QF?`?$z2.@LEQG4@?B@?Q`?6F2?)VC 4AݠD3D`PE@_m `@O@?J?aU ?T0OkѠ\y)u?RȀ>* H ?X?g?@VP?UZ?j|?Z@>+`?4|B?\?HA @?- ?I ?U&lD%/V{?f?<D0K<@?2 N@ d P{@?A ?;u ?@?Vc?H@?(-̀?;=`?B?)XUg_A) ?A0@?+_Q?4?=y1 K0'EN@> ?F?Kg ?E?4`Dږ]4`aΰ Rw?>x"?J.$l:?0?/PZ a*Yg@>u`?1CP@H:@8V/^`:?9?P ?W?Y-?R?6 & ?q -R`QB' 9ϋWjXBPt@P^E?*?B"Y`?1s*2]OBV.V SP} O% ?P ?F#`06?4?M#@?%_`?@?O?Rb@?;f?2 ?Jic?>O@?,`?IO@?EJ@t@W~VҀ*-@?P@?6 [/eWV1?B{?8c38`?`$`?mu?J5Q ?[ݧ@?mlN?Un Hy@?12?_׀?[Y`?+qI`J Q!@Q PC?1j.??;'c Z ?B ?L-`?UZ@_&1P8?A8Š?A'`?Ks?F DDI?5-`?<_[ ?&΀DYT\A`2?4XS 2@E ? S/LY`9 ?C #?@*?$h ?3 ?G"@?A??Ad@? Dq?M ??2 GHE@?H3?P!^EE>Vr 3@?1&YWg@ 2y`3V U?@?Mm`?PJ?>Q ?5?)؆1/?>' ?B)@?C?AE?Wl`?X ?O 6VU80E@UlNG?EC`?GQDx ?&{@?U! Bc{ Z2?I?]?'l2@?T8?Yz@?U@?G\F΀YVl UҠQU?ܹ?8VG+ ?R ?VFn@?5X?B^@?:j J 4XS ?N?EZ?1v FD/@>?P8?B``?0*?6|U@?/)@?:O{@2 @?`Uh`Zo??C&?;@%q?-)}?AN?AE?9w .?B ?/. F`(V9?;<`??> ?H@DQ?7w?JwE>WV`,`?G?:?;~ ?_x?V@&`??E$~E]?1?W"@?Rn0yN8?7?'kLJJ`?PZ@?X)@?)E > 2>6?U?[` I : Z`Z?q#?P~>=W}U ;D^@?8Sp`PbH?7?CS!]? & OII ?2p?KX?I9?  <@?:?Eq FO@S|IDKQMD0?Fb@?.LDW?Hp?\?)ႠI*w`l?0|>҇j?4``0y?V?0!;'+?\!?Yk-ج`9jy?(BE)@BK?-=VhO?-@?Q ?X ?T:@?0|?%~`?OL` ?T$ ?Mڠ?᱀1 ?PQp?W ?$Ѡ`?H# ?1n0u` ?F@?Xǥ@?FD/@BF8 3f?y`???-ƴ=K- q#O'Q@H+?--`/2 RTR@ʀ,Dg?KB@?^?UFZj Ss@QO;lˀ?7ڳ?P?4OW`I(`9``7à?F?Z+?P?K2f?P?5FdJȠVok@9?O_w@z ] RR?@?A{P `b#Q?M?2 \ X[ B`6H@?;`?S?Q^ ?B @+<Fj(u ?? ?=y?<4}@)`@?J`g?V}t?DZ ?1X7?Q}ՠ?H.X gU]O V?Hh1`?>Dz`?Ϲ(_@A*"?1^?@?N' ?%!`?86)؆?89wQ@?AT ?a{?\?B !?BoՀ?WIF`?U ?I&?7o?G ?`@?c5?W?XE?VZ(h1`J?I ?`>Y?S.H@JL%N sB0?y9~`2)6M.`Y|qPX- =-`U:?6H@QTys?5w% OŨ??$6;@Pch`?!g?J`MYT :@F-Q/`?> ?\?PE P?;?O`?l<FsY<`?JǸ?R\.?6 ?c`?C7Gq??I?Z@?Qq{@uaw`aϠAr ?B``4̀S`U \NM$?RTV@$?Q&?OŨ?T`?S"?H?Qc?I؆.?BȌ`?Zؠ?Se3?7c`?BV`?Y%i?_?R ?;9#`?<4?I ?VNJ?Uc?G ?KN ?H7AF@?U?E ?OZ`?Qlm?Ey`I TMLM`3M?6'?G)5@T0O1>Ǖ@_@bYQXSRkW?G ?2@SħQS Q@U<@?M?Y?9V՛2Q?PGU`NyBXρ?AtJ??@Cg`?;( ?W`?K*)a`?4ћ?E;* ?D E`\F_ ]&?40?'D8?< ?.`>;@ ?E"@?`5?_@?QT?:?L " ?c'(?Z?>2.@?L?Y?U?,`I@?8c?0|5VQ8K@?J@?Zg?CI"c{ 6H@<`?F @?["?Hǥ@>U?D#?!@QP`1?MR !TW`WOs^Ry?\R dGU?Wo?[M?b@ ?cb ?K?5?I?An ?GJ?Wjg?W?S`?V?` ?`;?L/? ?35?>"?@`?4))3|9 @>Y0O?!D`?J?E 6}@?0K@?L?D?Nu?S=2.@G ?'??=x ?BX ?Z?P*S0l@R@2 @[#`c~0@RKGNT?@9۠?F@I.`Z' W3&?Hat?W?RI`???Q?^`E4m@^* 0`>D#=?? qI`?:-ج`ZWW ?75?RUq4uQ"ur?'. 3_<>6@?+?U߭?b?WE?@*#?5_`'@?(?T#?I 4"l 7sb?5?R?Nv?!cq?;o`?Q7`?A `6 JVhDHNr?ND@e@P?K`?Nƾ?a р?g?RS€@?A@?ON ?W?azw ?a?ZȠ?U+q`?W ?U?3ڍ`>hi)d`?);O?B[?J9?6$$ $Р?EN@?]^?Y?8l`?/`+ϝVX?1j.?hiP?`w@ ???2ur)* ?JEt`?PG S7`j@I`H_5NYЀ?4p@?BD I ?;$?Q,?)G>@?Vh?J @U0/`?-?(_@?P/0?Z8@@XWҀS4$ ?A@ c@:ϔ`=Myb@\6?4H?W?O?8?2w?;?:a`B`XD4c?6H@ c@?7R ?Q?5C((;F@Lm`GOs?#(2?M`Cs=@'k?*@?<=?:Y?E[?Blw,)t C)2`?PQ?[8?M# ?;|@?Z?cW?U?-Ml?/)@?PC?U?E?S"- ?#Q?? ]?G?S~x ?P;+ZD5Z.%u?@0@Z ?D ?d`?`u`?U+?Wu?U^?\ݰ?b)?[=?I?; ?:?79@.`:~VU?/@?FB?S0@?QTH?J⫀?E?HH?T0?MI?l?Dz?-6`E`Q>c?c?c98 M~9`A3`c@?)`WD8c Sy@""?( ?Tb?WZ@s Wk?.D@?SSzX;* ?X ?V y=FI.᱀="*?Hu ?L@>I@PIO ?F@?^>`?RS€? 92SH1Ҡ?F4v?Hv?= K?I?J}@b@>2y`?G`3Wѷ #?D-JR4y 1X??#NO QK  M `?B?EX?66?Fu`?U?SK?).`<0?*@?Rq?aE?ag?`/0?`y ?X`?QZv?Q'?P7 ?N?8=@A?.Ϲ?^"?Z?A+K? H>ϔ`?O&1?` ?PC` VC ?XQ, ?V@IDKF@?P?Z?_@?\d?Gsb?HEa?Q ?+~ @`@ F B@?&s?R|/?Y+?P?@9۠?> ?<٠?=u ?Aɢ?H?OT<%qWy@? ?[{` U`?4`?NcBQD``?@7A P5@b' f X?Q?+?:?GI@9۠P@?F@?Oq`<?3`?XB Wڳ1ܹ?Ia}?7n? z2?Bf٠?ST[?P@?$Z ?C3 ?S!C@?T;`?Cr?]8`4?V-*?`3`?@`@y?4p@?Cn`B@A?CЀ?^CN?FL`?N EҠL3f?9)?Tpx?SH3iT]`?Aa2?X`?U"u?T֨?R ?G\?P?^f*?X6 ?1H ?M??MG@;?FV'?`?d`?XZ@? ?VH@?S6`_`PKCMa?NW?g:e@?dT@?Qw?4W!)c?[(K@?S}`?M?UV`?ZZ)Q@I{R%?f?I@?Pڀ$ CE248E HDQ`Kz ?Hf@?c?f3?V?->@?- ` *' ?@E?P A@E|KfY`?V\?SKOA@?8W`?K`?CH?PŪ?W@J? ]Q[caRw" ?1L`VhQI J)`G}~ ?IF`?K$)E ?RR?RP`[m[@c70?R9@?S,~?Iz2?-.`?~̠?$@ @1@TѠS?&w ??lDh@bH?EѤ`?Aj.FNJR7`B`5Fǒ`"?Kр?@ ?0a)?Rs3?Q@?1]?A#o?J/`?I)?X_ ?V`IuUȨ?R`?h%?`G ?Bπ?>n`?E@?B8?EFd?6f4`?!6?L >_P`1;?PG ?V ?A@@f?S?Vv( ?Q#`3(Fr:>?Jn`?P?K?;$Sc|@Jp ?P->EȨWNTM`?$`8>:XM;)j? ?Nt?3F B@EO`@Ƞ>?'l"f`?/Q?T`?[{?S?@L·.u?Kܠ?B[11 ,McUg@d ^>Ht?=O FO5?G@?aݑ@?ZG@?L x@?Q'?2yJtD@C@CXI?0jR@E^`.@? ?C@?V0`"Z`?S?U*QEPdVU?7?LG?Cw@D> RF؀SrXc#`c f a`?*?JO/83R2e Q*,`W#Z@_ŨX1 `?O@?W ?P`?K!`?R+U@?N3@?I`?Q-?Bڄ.@g?)q6COMM? ?J-?dzK`?Y! ?*$`?Q|&`?4eJf@P`E?18Š?N1@?9- A ?Dr'@?K@?"Ӡ+ Z?^`??o?E?0?2`?I`?6~@NLW? Jic_x,ꚠ?S~7?R*_!$ ` `Nl KG0@?8O|.L*2] ?N?QPZ?%)2`?IA?(?=??Ja`?Z?W@$@QpQWXO|S?)`?J-? ?'Z@`?Ly/ ?OG@^ ?1?VM?H Ee@H?9c?U`8?Pփ ?Z?3`?Yq6?XF?4!@?/ ??)@Dd`TJ`5C?-?ϧ ?-ZDOA`?E `?1n H< ?5?`?V?=?'q#Pb`T#Mi@Dt?+,@?=96@EksP`?~?IP ?6<`C7@TVP`?#?!@?R\.?D~Y \83eÀZUb2@?N;~?QJ-?0?0?[U ?a4?Qo ?2>j?*hD@?Q:o N[D?C% ?QO?=?3_ ?1 BN??P@?SӀ?CV ?~̠?=F/#F ?:K?MR?D K:BHg?IT@?&);RۣJ|zO[X~SaE@ld@?A `?96?2S€?B:3KhM?Ac?R4Q?J* ?Fc?E8 C`")@?Z?P82J`?C7@?Y?>@/Z ?9|q?I`@?/`p?Lƫ@?\^;?P)d`?V0`?S`?R?B^?T.6?V\D}b\"@@ @N;~E\ڀ?5?;4?<?Kd ?2)@B >Z ?H@?;_Q?L G6WHAH~@?MN`?AS J@H7?7c ?KMZ ?>/>H@V% UP+QkN @]B` W?QҞ@?PZlPfU<`2 ?L-`?[/@?Uh@?>X? Q7~D_9@?DU?N5 .8w ?-?D ?4CM $`A^|`V 8O%_Z F`?E?C?B ?El ?#w > Z@Rw?uL `-9TıIT ?6Ai@N@D@F@-?6U>]lN @?U;* ?Z' ?T֨!D`P%V?G8?G{?@?GX?@@FhT?5?X.\@?B%?G?\[m?B1?Zǀ?gQ?Z?-? ?C;?N ?@#R?Eto?L@?D`/?L ?Ec;9#`@n`?R31?]C@?;O9jy?.]@? p =Ml"??*$`?4y ?JMP?DE R l`?<@*' >ش?M$!`\`F@?Ow?7)E 7`?L ?_\?W @?Fi> ?+$:0@:7"@OĈF? VC B~nB]?DaOl`Y`R _,@?D!L?Pch`?<] RUqePf `Wg@M6RV?+?X`?M?A]??D)h0L;$R[I@Nsd`2@A[ ^g.= ?W2?Q%`?H`?77Ef$M`Sj@Pf3jAR$^U&A @??o0?F3W B6O;>)B} @?Z`[Kf{ŀY3 "?>?*K>J@?F4?[?TQ@?Ba>gQ@]\Fb@?=q\@?:`?P?SA E7 Ms ?V՛?e ?d= ?bG?SOݠ?OC?\ ?O}2"?c?N@?Y?_`?I9Q#oSB?3@?Tbn?Qr?K?)@L " :?C`-? G ?Id`?N N@SI?=a?O%`?#`?- ?Y @?S ͠9jy- ?I.`? `?YY?`@`?Al`?;a?3M?}`?0)c?<9@?^?`f?T-?AU@h}cH?8@?F)X@b;Z?7?GIG@3 ?Oؿ ?Fz`?9* RӠ9'?:] `NVj]OZ@H?EksK{]0:`?3?Y)?N?2e K8S(?-_d?4ѠTH SP@ > ?DsF'@?I ?AO; H2J`Dtf C$`6@WbZ7T{1@?2?B)@?#;@&-?< ?TB?PKC? ϔ`" @Ig@R=`KG6/?L??NY P#W>@u`?C[?[?g2A?X?DQ`?a&?c @?R7?Nc?S?Th?W?RS2?:?/ ?=u ?Ad@?L;k?S8 _R.?I1"PVeP?9 ?R=L52M?KWu`?F?;( ?P9۠?@+@?S ?Fi> ?:f@?I?B?9]?N?@w@R~U8[`? ?46?@?Dm@?DwĠ?DAݠ?\?a@?[@?T좻]"0b Ul?,B ?Qn?1;CK;@?+ n?U ?W{?@M41;?:?`#Z8 T@C8`?:׀BK Ht?$ ?E?O N T`Y >u`?EEE`?MGπ?KjJO?P: ?=*@_Π]+,Mc? ch`0+B`C\6?A?B%u3`GYWTPvG'@V}tMj`?@`?GH?C`?U ?S:&R ?'g?P}?8>?=?M%S(IǮ0?8B?Bۣ=MlJ 9z@G@2?D1`3 Dږ?TH?`@?S@?R2 ?Q?1s*>ƫ@?Q) ?bV`?bSz?SXI?1lm?1H ?QN?P9۠Fk} Lh ?C>c@Tf\;O?K???O?LE > 2?JWlPN.`5 I4?)؆?J?/E`? @ `Su T#?+$?J?OO?[?S` &b@H??#c@?Zl,@?;ܠ?S\ݰXh?F?X7X#F 9@?[@?Q!0UGVQ`Hsl@S)WmUb`Q`$ ?M@?T@?G@AtJPD ANYX?W ?=.`@@?HD`?TJȠ`Qp'q#?WV ?RkW?RUq?QxA@R @?2 ?B/_w@*4 %? 9Q@T V`J?:X?9?- ?>."O }@?2?cր?d?Qm >w EC`@?[VU?VR82-)@)?Lm`?Z`?ay?d&?V (Z@?,`C~f0@a9?F?cK?]!? !F:?1e?@V] [MW{C}X6ک?7 ?jO2?C?PI`?7N? 2y`1ӽ]V``6`?4lOy >l?T@?%i?3FR ?W`?,AF?`?N`?P/`!*rF-\,B\EV @V$G|`?H@?^B?X ?C+^?F\?Hsl@Fd@Y?Q: We ?2e?SIa" Q?S?+?GD8?J@=s F ?Kł`?O4\ 1n?0*6 &);?5}*/`K>Z?1?CJ?$ѠM`R ?c{ ?68 PyHB ?W1@?Z`?:VL RY ?B#@?VTE.\T Y Q`?@F5?TN`?D ?786F(@?Pċ`?\w?Z?Y?@PIA`W?d`Z6 ?6=r`?Kɠ?H ?SB?Y ?`^?`PQ@?H딀?Bf٠?a?W [/cR@D?@`?C*? 9`@Oo0?? ?Q@C@Ug=6@?4d`?Q ?Ie;qI`"@?G?Dt?QP`?Xu ?*hD@Tv`S W{ f\ @c?) ?N ?JU`?]M?:w?+?_@?Yk@64G@ U;* ? *3$Mm`K#`@q@+s?5Š?I`?E?/ ?AR?T6?D㒠QX@YA|9=?5-`>|`G.?E?PNLDc;@b7\`Q $@?7x 嵀Bs3?9O@?(l`?B?Ng?A+K?FG?N?(?6A`?G&@?M6@?T???qoF?2?V*HQN?EV?R;?:0@?Hb;@X@I`?8B N`X=@V1W輀$Ѡ?M]%?8ƅ?ˠ7k?V?\?c_N?b?U*?@S V{LjK`?2?U{`?]lN?]i?R>l`?B"?Mc?L~̠y ?=e?b6@?\]8\= ?#60S 6}@<`?Df`?X.\@?%:q@?8_@?B ?N?K=*z;?W%W?Ul?CЀ?@EVc"cm Wb@TLRs`0>>MI`?H1^?"?b?f>?M 5sP-~?(zX%:/`LB`?T>`?f@?[`Gn\5Ȩ?PCgXW`JF@B׀9`? *?Bw?MB2?X`?I'?H{H?T ?,ƫ@;* ?5aX`?G?XC?Tɾ?Bڄ?`H@?JH.?&L`?LW?PF5?`U?WAT <%?(2J`;+:-@Kb7X|@?1+K?II ?N]@?D ?.@?G? 6?]s ?U@?Ld?+_QEAg?P?_U?[?bK?c@?Kɠ+8?2Z`?)jE# Qp??oB@TI* ?'?Hǥ@ꚠ<] 3?QPZ?C@GC@GҀQkbAb`KI?*"'QD@B`UaSq@Yb E|!?P)@?T?6 ?V?J?M ?U3k G*`a@b+?Co?gל`?[ U4c9+`?]'>?H@PSQ@H6`>᱀'c`. 7MC\6"~?S@?db`?V6%? C?D ?%vE?4@?I^?GC?` ?^`Z ?"V`?Jϔ`B@Qܹ?MG@?Eh@?Hݠ?G ?  ?5aX`?S`?BIsCJ@?3?WK@?d?VȱI`<ꚠ?ChDWedWdɠ?NgJ@?Y0?Vm,@?P@?D?:ؐ L?P@?#s=KJW;̠M?I$?Q + ?+0?La ?T@`&?@j%@B)@T+ϝ13`_Z bYJ4 =;u Y VT[??!Zv(~ QpDH@@iS`N]/?1/@?ʀ5ҠK@Y@I@;+Q JU%D@K2,@??<@?Kq0@\hWX:?,@?C@?p`?HDB !-?N9 ?HN]`?4L]Q=fe m^Y-@Uڠ@Zf>?`7 ?XdC@; 8@VXT@1`?KF@?D6Q@-ƴQ/`Q.@?CZ?\(?JG@?A+?\`?R"%] ?C_?Nr?R5 ?g6?`B`R8K*?CQE_?Q`?Q@?/ؿ ?h:?$y =F C/܀I@D~?3 @?Z?b)^ ?B`WxpBX ?KZ$V@Y&@_6z@YQ`?3?bd?`z?D#Q ?ؐ E`?3DѠPyDcA-@C?!H >u`Ks`FH{S0?)!?N L a R?@?صV T6D7@M [_BԀS@3?DG@?Q `?3+^7t?c@?.?>au`6BpW\XAf@3 36`"M`L)t QϠ?8at?]8?[C΀?*?T-@L@?IM?YH9?Py?6nۀ?` ?-@2S€T@X5 P];@[cϠfe`|S))X0yC ?/`?D( D _@`݇HM=?HI߀?IƏ ?,$ K@^@X  *"V{EM!?A0@?\Y.?& @T ~?Iv ?X.?f>?Oqoa,Hρ?Yf +0[ ?56 ?X?5a@ ?PZn`Elj?0u`?E;* ?S&?[=`?X?A%`AbR`ƾ?Bl9VsL8?QΠ?Q&?\;k?U[?2 M +Q;HM=H[ 5c?8 ?8`'#2? C8 QJ@S?<@?P3(?7k?XMqoFs?M\?Sڍ`?8l?,;k2 QI14@?4?LCH ?5C!U?:?H?`N?Pb`0^1@TUO`P@V @>T?LsV Pt`?A?[ ?AE`LNBe?(?OG ?S?UZ ?U9z?Ed?#u|@?2 3l`SHlC3;RL@?=\?`|?VҀH< S*3|9 Dc`jgЗc°P,>?9Ⴀ?+$JRQE@?=O?V_"?K@G^ ?F4?PJ PN\+?Q?8W`?R7?[Nyו@W ?D1?e ?PgV= ?E5@?U`?4&c{ ?)Ə >I ?% ?IG?N`?TҺ?P ?;R@?EA?K@?@n`>` BTC7?3y ?H|h>qoD ()N?/M9@PM#@B2 ?Od?Vz ??]8`BRiO7"@?*VL?D1`?4c MZ ?A@?Aۚ ?8'?_] ?^Q PFLo?`S?`@?H?X68?[$]?QQ^RF@SSAa2?Hz) ?Rc{ 9VC `QpWԅ?s )U;@TTe_X`H~?TÑ?F*[@A ?*q@?D 2+7;<?* !A `8#c?B>?X.\@?T ?LU ?]`?WrG4P~??u?Cɀ ?A#o?`Ӵ`?gO`?\w2FHNb`/+0TCc@@eY`?Q?Q?Np@!lm ?\Y.?c?N'G?>H?Y)?R#c@'`? ?6w ?W 2 ?Y@?+VU?p`?X:&?[@?AtJC?3o@?8 0 . ?@?B?0@? U@n`Kϝ(ƅuBl@?Q3?O>? !5,?' ?4-@ XdNΚ`?,`>B z2?@<?U?Y-F 46V:PG`Ohs By`?A$?LZ@?>Ϲ?/^`,hW?DK?]`?S,[@V;@?Rs3?A9`F?K#`?\ ?0ANHQ5g V7\/Q?A?W<\`? X`Pn`>;b`PD_zjLb@ə Zr@Q&?FS?BpA GD+:?:׀?K?@#?+`>ր?9Ⴀ?^?Y?B"Y`?TD?RUG_?M?6 GҀ?/?\;?V0`?`B4`F 6Qܹ0G E `F (??Ĉ?Jϔ`?@C;E*?@?T??O?WN?_0?R" ?L?U?DF[?O#?g`?a׬~?*"?Q?#Jj L5D@@YM P TJ`z ?Nk ?Aɢ6w TEWB9`?AT؀D?D> ?WZ?EC1@ D`:cA$Ev?#J@? ?@?"2 ?H딀Lu? @_Lأ<|?Re ?S<"$`A DK/@B`> T`KsIZ?:QΠ?9`Qr TmLأ]"0\;?.3?L=E`QB?4~?K*ZʀMŕ .`?LQ?,PIIBW \V`]&? ʸ?4uWY'(>`Lt@\`Vm@?y?!) ?Qg`?\½ ?Q?(?My?`z?Q@M, K@+ơZUa2#@?QR~n/V?P>`"b@RG@D ?K?Er0?E7 ?86`= MuJ`No&TQG?7?U`?a'`?W`)j?1?T@?Fk} ?X~?kNy?U2.@\.KE}?M?< x@9FFn@>@%~Udt`T?E>?Fj]u`?l?II?U;* ?P@G`?.)?Tq?)H`Q;@GCұ LpA `IQ6`?M?<E7 K?@5)2`᱀LSC[@?E?^X?Z ?9`c{ 9`W6U+='>ChQWH`%6 ?0`* e^Xg[ ZX?5Sޠ?6V@]K?l?W_?J? ?H@?-Dq3`L=Eks@rJ ?D%?Z`g?JbSc@T~4\5~`M'Y/a9 `a `5L<@?U=?b`?P4>@1Ӧ`??0.`Y@TF?6 @?&No&+ؙ?7g9+?ld@?EJ 45.?I ?+@?&u`?Z?[?C[@?*;=`XiPUۿ ?38=T)?KF@?c??f0`?V(Aܹ/0?Kw?BB@?R?`z%`cH?S4`?V ?S?PF5?N)?K D@`"P!?D ?EoH?B~n?b ?c?Kf@/`I ?C2$`R> ?`?E68Q._ aW<=?B6MK-V;Z?T`9z2I@?7?KMZ ?A4Gj;8eMKYVBc{ ?E?>'G,hWO.@PN@???G`Wd9dU?'l?AE`\Pzm) M?I`?Ub`?<5$0 /#1@?9~`?[H ?a/?IO@;D^@ ^>D~E(u 3|S,~_g@Qt ?M! ?W%?* I6P `Ö́@FtxJ|`H?@{`?K)j?BN% ?O@?UÚ?Fu` T\`p H ?-$H; ?W@?R? $ !?QT؀?M+`Av7)E @R@QmMǠ?9!@?LhW?ER ?L&);Y!@=?9SWajW!h !?S1?OX`16:DTDqM?JZʀ?` ?D.`0?1~5=iR*5,H?Hj`?1F?`@#f3y ?G@7tPH?*VL?G'@?(V9CBkW?-`?1@?V`>x"; ? 2S?@RI ?(_5?P<`AJP9۠?DG{?WM@?R$?& JP?1/@?ܹ?,5?Y@?Wٓ?3&?W?=B?B-l@P 4y ?;ؙ?,hW?S!?hB99)X?K`?F{@A7 .@?Fnۀ?9,u?.Dz`?AUEuM<?M?PQF7G:`5c`V``j[e~A[ ?T `?X l?<أ?Eq?4@L3`?..?V%)2`K?17+ZTC`A]`]_P`O >@QX7L@Q Q,8-̀?%:?3ڍ`?.Z)c8-̀;@? ? ?@W?8pV@f Y,&Cs\``^5?A?5C56 TDTRV ap`BE ?9e?XĠ?c܀?UM;@1;4?hM?SI ?T8?4nEL$ ?/qo?WWO?Z8?H{HH[ 6 @?bc{ ?et?w@S/A嵀>᱀???WƠ?\=?2ڄB}?E$ ?HvEȨ??W ?@s! Ht?2.@KٹK? BF`K ?3?0=: My8O: 9`<@JSD1`?5Ѥ`?Pc ?PX`?V?aWN"NE"@?Ck`?(]OT_?A-?DZ ?=o@?U4?L_V`_?.?Wz?Cg`9GLꚠR[F W?0р?H`? ?SD ?2FHO@Tk?A?R@?Kɠ?Ur`?Bf`UUWuK;b`S>uI@>N=Y+G `$ - ?z?< ?`@@=K-;JE ?EE?'zZaWJ+@%ҠXi@`{E`L_B'`QvST`R 4GB 'k?~[.<?$H?@4sFI EN)Z|Ra?:9?C!C@-C@M~P  ?PŪ?^ ?^?);OE `?R ?\1>U5-`?Q?V?B ?4㒠?L?B{6 ?$ ?E+q`?'@?Mŕ ?d?\lE > Bu@LSj@Q0@Ms E C5P/`G ?(l?%_`D1K@,>?C\?I|q?4Q@(M=2)@Qj.RY5?PW?4`d@Z& 7Xo`??PQp?Uh:H0 `6?F`?D+ A?'@?CRM aKMLw?>n`?!gEPV$[qI`KGVhB]Be ?K`?\׃?a ?f ?a*?@|? Ht?5~`Vh?!-?4 A ?S ?7uH6 ,u?)}3S04>@?.ʀ?H?Hu ?f@E@3B?E"u?P `#`EX?2?%HR~Uq DsF(?5Ҡ?QW?W@?@*QTHV O~S Q.@O3Y`@VH@BD ;0W?1=C?H@?Qȃ?P1@?UnB`?`?JwUS,~?c?IX ?TV@?S?J?F ?.ʀ?#g`?H9@?? `?"- ?I,?N|`?Qzw ?a_?Yո F(@Q?-̀.hiRz?$?Wy@?#0@ZI@GrC`?M ?Q?L߀?P3?HU@?qoD@LW~@)EFd7lDr'@M4@Dkj`? y?$G I`DYrur5?AvFD/@ZV'`a`+?K4 >EPw@Fw GTP?7 ?JH?2]?L ?R)ϋRm"U?Y V?Y) T#??4; %)2`Wե`Z ?@?T?D >Z@?.`?8y@?3@?M?e- ?fj!\3`;K 3Jг?A9?Q%?@`?R?K|@D/??U8 ?A2?@ ?F}?J ?=6@?Nt`?Y?CK? `?&΀?O)@?Ei?1ӽ?;u`?AF?`?$\S>'Ga-l Y@?X,?\/GL@` >qo?a?Qk᱀?K]?D> @>` ?#`QMP?8  ?Y\p@?]ݺ?4V@VRȀ??d2?U#X@SM~?Y ?N\Z](^2M?<?B>l`MJ`>u`?Wq#?S\?@?4n?74?:Q@Mr{^1c@]/W2 R @;?K?QQ2B ?- O`@_c`S?:?@ch`>qo?9`A=C_mY/U@Q/`?2&@?0ld@D?<`?Uz M4EW= ?P\?ck?S U(ajvQp 6_"U YM}#0@?L@?Z?P8@?7Q?5??4?W&@?`k`8at\2=LDY>`C?8 @Dz, D]]`Eb?H!r@^`J:9<?-?DjJ?52.@??#F qo?D9?bV?e?X@?R?Z' ?U?7'@*AS Zfz Zʆ?R?e+@?QFک?,?]?Pp G @UTћG@@?$uVE9l?C, ?V ?NtJ@S?7H?N@ H dٿ@a]?8)N?[`?:T <`?G ?UI3?!@TUBv?=+?[?IX?-??._m?R?^S?I@F5W@ZQ>N ?@?M?Px`?/Q?,c?M鄀?@R%V;3Z⫀KX?Rb?Q%?7@?I| 8a<W"@G+ RN@R'V3?1-?W I`?@Gm?H:&?Yq6 ]LM`WEC@0)M'- 9!@()N?4jJ?Y`?bHπ?Of?( R?24QFXeC_?C1 @Fu`?@4>@E a`NZJY؆BN% B; \i`T@K`[#`WB31">@D7@[]Hq-@?Q?c+^?Z;Y?@S?O@?[7?V?K?D=_?A%`?>9??&j?G@?[a?U|K??x+?@^?:׀<>T\A`[, SK_? #?3aE/ ?4-?PYM ?Mɀ?QX7?H=@>?G@?Y@?.<Qi@SQVg%?\Uπ?Fǒ`S>@?\?O5?M ?5G1vPG*d??3@HR@[ W$q?D2$Ks^l `QXӀ?3V?Tt<'5 `v7U6 ; QjN9?=??2E A?"@?G- ?E}?Sm ?XAs`?V`?Tjڠ?@n`?0?1RdZ @`;E ?MzX@^EO QŴ@Yr"$`?)z@N% QnYB d`_ F&Zl?*/`2UVY@u`?;@QxD?A?Aa M?`?=?I?Y?]`?NϹ?8?<>`$d`?) \ 6{@M8@?Kɠ?UB?WG`?$SCI?L ?\}?Q?R ?T$@?Ss=@?a٣?b> ?BB@?B ?WY?(p7쪠?J>B;`f`Sa?Y?[?Kơ2c{ ^Yc ?fVKy%?4S@?CB?COM3@G@G@DE<?=@?PR>4??6?K?X ?Y?H;F@?P?ZL1@?J&?#Q}A}E?.' @K@P?@ ?Uр?S~x ZhD@Ss?*?M >a@_@H~72A?A*,`?\zN?;Vx@D`?!;?)`?Y`?_?8q-@,?1|&`?u@??G`>c@?>P@APhv >좻*MPD?7J?5AGCS=Q:Q4???P`?K- C7@w %z@YF`\?c?Me!L%Bb@> ?I@?Z?VZ?=8*?P-`S?+D^@?G `? ?D?`!' ?ex?a!@??x+ ?T ?[4?R`?S_?Oc@?A$?O}?G,?`@?U?b?K??P?0. Ul/?UͶ ?PW?A=CF<`jId^8`?W@J?bB?3ZBU?"Az_V1+KHY KO`! @7N K:BK/ DK?Cc>Ht#s?C ?A]6$E?1?S?9 FJ ?"Y?Vj?Yx?O`?,Q`?A$?QA`?:OKP??BB@?G'@?Q/=`YiZ@U@T@?P ?``H?>]/?? ?9?Sbe ?W\?Mb?*mA UP >?;<?LZ@?@3IYIk@?--`?Dr'@?1p?,V_@?J.?S?Ld+4K>6?AA @?P @?T@?Dl?'$@5;* "8?M@?V`?Gq @IU2s3F1 ?JW@?\k%?+6O\ `?Xi@?^2?R*?P?W7N?O`?D ?Kؙ?29`C `R]NGw?Nt?Tr?0?8?Y9?_f?Vb@?R?@^FBI ?T<cf ```?^?k,9`?W U?`?b?USg`?E`?Qa ?3QK EoN`XYm@ZR S8pE5V@S@??Q9U@?P<`?LB(?Py. X N?QF?c?`Ā?D&?3S?Q;@?S]@?HJ@C2?+?F!ӽ"ME&`GQW$@^4?6?^@?صD}@?Cp`?8+;=`?3c?T ?X?UM ?=ϰN@[( U#@KvJj +s?K`?Ob.@X)T u?18Š?6aa?HR@?E5@S`Xsl@?/hs ?YA`?C}X?`?`>ꚠ?HD.`KC`& JT 3~x ?TR&?GڳGZ@Qq{@[eO`_p ?-@?U?CSM@Aui?H  ?@ 0, x@DZ _?@s > D`?KU6`?Y?R3&VW ?Rj8' J&?8?(-̀KX@:'"`?:"?<`?:'"`?3!L@3+;b`<1D9;`?%@?Oo?J1R7`e]p`=H?A ?M}?. JYUj?><?Uw Jv:F?=c?Z7??+@`_z@RE?Dy >?JP ?c?TN7?Aa ?\ܠ?Yb?<-? 8u OgSM'M4?8?`?2y`?Dd`?3`%e`?0?@'?ARDc[MZ ?[]?>W@a}Z?) ?M"<@OME`DG{? C?S?\.?"@`6?Xv?X 2πPT?`7?:n`?EE?A+K?KZ?[h`?[2?<%EG`f?H?(@  ?:f@Aa `F[aIU`c@RKV`22 BۣY`NS?>?'V0`h?>Mv@?!.' ?NR=L?C?V Ϡ?A#o;VN 3(?9Ⴀ8ĠB8?D<?9O@PvK?ƾ2&@M{w(_@?Nz?Td`?Nt???4u? 1T ?6Fn@?Th?41Yh[Y`3J?St?V?,2pGoH)Ⴀ?F;3?1RQlm1 ?3M?R`?zE@V`?IG?ce?= ?Aܹ?b[?Pp ~?Rd?Qj`;XM0@.Y ?8 %mA|?2'`?4aO:z;? ?K?Q=C?S,~?R{@?F}:2] QG?1?VS?8JCPjR>?D<`>f ?'~7c`F);@?Iz@?Y?O: M`BBTjڠ?+?HӀA `R1?0"F9nCP@?-Dq?H.?C,?/Q*?%$?QE?H_?Ht?9`@Sj@D` ?3B?6}@S^za`D?D3D`?!6?!Qz ?T0?X6`?[?`@?LJ,c;* Gy@Uĺ`J'"`Sxڠar`\V`HM=?34Z`?0e`?B ?Y ?PLaR ? 1H~@T([?Ut@?S_`??ˠ?-*@?"?(`y :ؐ ?0?N4?3Ѐ;MZ ?2ߠ?Y@?X~@?$6--`?D ?Vg?Up`? RA ?~?Bx@?9jy0O?[?gQ@?H?c?O`?25sP?C?2QL|VXeA) ?L?;sA?D㒠?R@O\?7V0`?]96@?dĀ?cC@?[?PD ?: .?0$#`G7`?'l?P|?c5? n'1?1X@H`/l?QCp?X @?%M!RYE#S#@A.D@;-O?3(@\_D BVK@2:ϔ`9@;u?:<9 ?U?]^c\ 3aE?[M?R ?B`?\ ?e?gWO?b' ?@>Y?_?V$?Sa`3`T_bg3`Vx??`?g> ?Bڄ?P,a?V@?QBXy@A.@ A8?4c?Q ?:?'?'V0`EJ :?A嵀+MZ K!`?3_ ?I@>>?28?Tנ?H BV`3+^?S1?_(?Z"?8l`B+ l?0`#c@?=B2?D'8$`?KA ?4 ?%?4c0?0C!U= K:q@?V ?U-="?H2@b`\HT{?9`?_.?a2@?^?`*?T @V6ZW@?Ҡ?Wg>)E X9 K?@) ?- 0-`89@?N7?U /FlB-u ?*!嵀1@3:FHX'`Ua@>& -`V'M?)h>`VO`7)E 5@RKV`T?=?`W ?G.TIB?@ېMG@!`?S?^?Y`?52NS?H@?bT?`?K P䌠Ci?H.?Pd8ƅM.`Mlp# #??H?& ?U Y;4?<_?4)?9P ?& `??(M=?T@?= Dp?&?I.`@ҔLO`YGt?OS?@rP+ Tr'@SF Q>?%??OX`?8O 8DB P`Sw ?K7 X-<G[?>r?S |?ZY@?MkLW`G@HZE(?D4c?2a@[{@?7J?._mIKK :Q@?Fh?P|>o&A?W?`Ƞ?R!ɠ?5>H4!@?QCp?QF\x`U@H`F>E`D E9` ?B?F`?G?Eq?()N-?+?Mɀ?Y޳?V?Mv?O2`?Znq`?_@?R[?@@?Pm?DN U> ?Q@?+4Y``6}@[@_8@LS?Rz?Sbe ?"M?q ?:u?MK-?Vg?3XIR <%?P`?O~?H?V5?K?,zN?_+@?jª`?a|?RTPvE`@D`WϠ`C[%|?5O`?\b)?O@8HrL5X\?Mج`?^ ?N,`$G@?C"b?NK7@᱀?)l?I ;ؙTJ`.?Um?RL@6+zHL`#Ѐ?F1?O@G*dh3"dXV?T=?SD?Le@?<_6 JG2A;@?Dנ?^o&?6nd@]Vh?OG ?L< A$AO; <`G"@F`B@Fq6?@?R ?QL`>T,J?Z?MP&ĀR@B`E,Fj];?`G"B5G=OEȨD-q\@?5jT@?+zE@2?2)@?Vz`?U;?D?QD ?^#Y?S>?)VC ?N?F/?7?B'?F+z?G ?=@! +ؙ9`Lr?S?2@?Wv@?f?_@?F*[@L@NG6R"[.\N@?%a@?F1 ? G`IKVU2E ?<|?I> 6M# =F2πF?< A?[U@?B>N0CDm@?-!gO=R%?5z ?Y@?E2D1< ?HO|?b8?aEdhi@\A ?Ie?V @?D9?9" ?P?W٠?FZ<`1 `?U?_@.`e?` W<\`?Rw?R(>g?!?sRr@Vv( 8 ?24Q? ?5?Ik4`R- ? ?Vo?`SYi@9X >gCO$c?D?' @Ӵ`Bx@ApHGS[R? 6?&6=(u ?:n`' SFR EЄ?8;B@Y!A(?H`?GL?S4`?^Vr ?D5@J5A?;o ?L ?G6?@5]?E\ڀ?)2`U@ǀX@B+2f ?F ?Q=?G?A?C7@?B#@?@@?4p@:YJ9?p`?J`g?#QJB+ Gà4㒠?1s*?$` `@Cl`ShVQF?`@: .~`5+q`0\3o@B^BCvA7 ?By`?Z[Z ?Q ?M4?$ ?G?6|U@MK-O. ?Hp ?W?@NjG@(?S2?W`K== \]EA??%`?*q@+VU?3?\g?hY?bB?1,-?D?2MV`3Jו@?EX?AA`?@r?K,@?Ay`?  ?G ?L94"l ?o0?F!_`?/RM5?R31?H@?)?D$ ?L?H~>MS"bR ??.H@7$@:z;8_Qa` @6$Z RxAKs+ D?+?Z@?=$XSk`ȴ?2$`?5?D'?'oU2.@]:>O@?<97OG =]%?$q?7?6@? c@1X-Q(AH4`?@6#`I$UL? ?S@?JR & A QL(TC @909 D쎀;'+>Z 7ak PR@M'>?S`@?d?c!C@?M ?7k??2 AYV[V `A=CC;@Q]`U׀LQ?0 ?FD !ӽC&:?)@?)?G`K?U?V ?J;Y?6?;?Uގ`?9X_OI?HS@?Nx?R`?a?_w ?U ?I4,2pAJ@5uL1PH:@BRs3?;@?`U?SE`?'h(=_d\ W@?Bw?E A?"`8$b?4t:4 V B ?UaX`?XRK?$h>l=|N᱀R*?>@?ؐ ?H?E?J]?<`u`6;31J@5 ?R,@E&S`?CD ?a'`?U=i,+,@?:@Q^ X3_ ?4??R ?\k ?; Yv[f@)E ? ܰ@?G=`?Cɀ$?&?F!$?F?De?Mf`9" Q9DK>Ǖ@F4T=?C`?>Ϲ8eDV@3`u`?$6?F?Kk?6?@A ?V?P)A{RLFB)B'`/?K( ?Tm?O\JuJ׀Vֻ`S-?0?XJo@?X^ ?N@?$$ <"@(@< ZqVI=?-?C(?VL`?a^?JEt`Eh@+ n?1T ?Dq)uH_5H6@?`?S4`?W ?8_@?U4 ?i?cU?Ug?H@P^T;VU?C?E ?I@??f4 >?'z?%=@D]?5)2`?U`?S9h ?C3;?D4@?>B;`LQ`Y" ?"?\ ?RS2?B@?Z?`@?Q?{@41`?3(?D?M(O.@>ʀ?AX@?7 :c@?$ - ?S??IG,!H~@?D\ ?* ?)?' ?'H3kK3K 4 -`I PF5zX?>`/ A3( ?*i?M, ?L?3$>6?7 4V@?Xc?f`B@?SML@Q46w +<!?G8?Mo@?!;8 @<ENT3 ZX`A8Š?2?D?LE ᱀`Jd ]\RL@?8?;?H ?Mج`PcNP?E?Aȃ-Q1??F?N@?<E?R`?Xǥ@?A?S@?bl/ ?S}`?HV9?X?>x"J)`4V@?A|?Nf ?R`?N\?M96@?H?-?"I@?4V@?=?;b`?D?Fh?7 ?>+?Dc?Iy?]?bȌ`?Dh :r?O?Zg@?By`! ? s?Lh ?Ri3XI?>.?Fs?441`?( ?D1`?O?R?AL@?%e`?P^?R@2J!' DUUc,$ ?O ?D`TMg@?=o@?WV ?T&?5G?-?B A Eo(c{ I= UtP/`?4`?Hh1`嵀Ta`T` 4@?L|`?[J`?W{?@?Q1?V?EG`E@?3=?c+?^@?` _Q?'M4AH NL=Qp(1ȃ!P3_ IQi@S`VUw>@@`?D?3, Y@cyj`\z`VI@?K?I>u`9U}Xc zX?M ?.F `)Z?V\?W?3?EA?Re ?9T@?MY ?UD5`GE?K?RkW?A@?G)?Mƴ?F4?:VL?Jm?\]?Vv( ?8q-@?L@?Q_9!@Cё?I \ ?@Sf@M ?Zh?k?jr?\9@WP@4V@?<@@?U?M5?Y ?XN?3,?]?S7tD ?T[!?Y?Q?9 ?08 ?O?RР? $54m@??& ?I7 ?X|?Sp?>B;`?=Q?<_?Zʀ?5 ?Am * DhK<`6?V?H6 VnY`< AG 2 L?'?F`?!/Z`?5Q?SXـ?Rm?Bn?2Dr'@[C~x ?WH?Vh(ۃA ?VC?VG%h@P?C?Z;?Z`? Z@C"?L&?[ ?E ?%H?Ou?P} ?;$ ?C`?VՀ?Xπ?P?*VLA`A3( " <TRVcC`?D%~[BH7=?I(`?;@(u ?:z;?NL ?N ?[_Q?Y?( ?J:?f3W ?b>?G@᱀=Dq6?U?XO|?! K? ?X?Sn?Pm?cɀ?a?4-O0y> ?)2S?0X-A6@4nL@C2!;?7o?Y?X?)}?I?Mƴ?@.᱀7?Zʀ*Ez j?G?Cf7 PST`Dx?4?PbH?[4 ?Zd?B>??"Q>l<?`?7N?B c@B?-Vh?G?4x?B}O@?F8D"l ]ƀ]nK`?78Q7 ?@?_T<?@/`S!??[ ?DU[ [m?= ?W*d?DXS ?Aw?Uv?T'y?3h,`?6L`?ZX`?b`?W) %OŨD:@6~@WídWwQ?%`?7 I`? ?7`?; ?% ?;O/  I`?XD?b=?X`?`kԀ?b߀?$>D@?`Ҕ?fQ?J +w@?"?J?ZA@?[N? Y7@G:`?Y`?\g?Bl?OCd@?U|?2E NS$?R6Y/?!?N)VZa2@Rb@<1?HY?Q}! ?<?_Q?R4'64l3 A HdG ?+?P`?uPR^@Q4x?Q@?TJ@?P?Q!0?BȀ?-u ?Fj]?J?6{@>C?)`?;4S@RI@A.@?B:`?RR@?Y?UtYed$\l?56 ?CGFM?,@?124G@Ib`1/?Q8?^?`?Z ?HS?Q?\?ҠVY`?8W`?\: ܰ@aDYV?0ch`?P??$`9Ə JR SIW0SÈ `?J?@R/ RB?Z?B IQ@_F3E??S?QD ?8c?P?S?M`E 8z) ?4?WL@?Wg ʸ?0*?Ys.`_`?(_@?Xծ?.9_??@^@?HrL?Lv@?R ?A!0F EԀ?I?TxT`?'-:I@&@,|`=ɀ0?M, ?)X]B`?JȠJiP?8q-@QΠ@ ?}`*c@?<|`?Z?Ps?A'`?O ?D`PJGA8?4}@?Tz`?5D%=?*ؐ ?6`?I#?_6?WŽ ?*?1??b?7Q?F?N?@.ƾM|@U)2`[ [E^`?4-?@?FL ?I9?I ?== C[@IY?@/`?GOszX?@2@?U%?H}8[QjB @?F`?Tm@?ZH?`@?Y@?Ss@?L[OP_2 *l ?D - Gak Qd?4?JR?G*`?cK?@[ `F5\e@U@Sv IVC ?u?'zIoT.7ѷ ?LW~?O?4?`?Jr?DI)@J' I?L@?V3W AJS?+~ @@C_?4`2>DK?Y`?K) \ ?F#`?J3|V6Bb@?+?TJ@ U Qs@C`?C`?\01?C7@1g?C`?E ?Gb?[,9`?R *?!cq?c-f?Aȃ?R?L|0S RA;W;R<1??1 ?Ҡ+ 'M?E8 ?[?RF@?Q?>x"?Mɀ?G ?M.`?Ox+?CJ?@M U.Mv@?1?OKm@|Htu` PWak LpT\ 7?P@?@*#D7@RhP >j3J(@?@`?Hٜ?,@?9@?Qa?:=Q.W0ƾ?Y?a?Z:@?L&@NCR`?;Q?@>L &-?Ҡ?MK>u`Q\??66B0yE@`w@VV ?6?O@?AܹD ?y`?R?N?L?PX-?@F5@C?^@?j MaGV?I`)H`?u`"Ӡ<?Hv`?M@?DR?^K?]|?x+`G Zg)`?G 0K`UiĀT`?.T?[@?Cr B#@-`贎u ?A.@?2V`. ?"π?ϹCeÀI ?l?Y/?b`?]Q?Wh(?S `?J7?K/?P?Iq6 ꚠR&P0?7?:iA u ?F?`VX.Mv@?S?S2@?8?P.?] ?J 4>?23(LG @?EjT@?c`?c0 ?VB?C u` >?E`?J6 ?S?Q* 4h?Ua@?T~"p? `?>`?1U?RPd?Q>c? H?EP?N,`?f?G)E ?Ee@I` ?[B@?Z5?P5@?CG`?)2S??S,?e?9]~n?G3`GBv`2s`Kg. -?I?K4?[?X<B0ZC`?C `?LX?5Sޠ?5 HXJo@;zE@?G'2AO4??)`?/V-@>Ht?PX`?KWu`5~`SRm@?J_H`?V?a?c?`] ?a?d@?`?<`[*a`F@4MA`"π?4aOHM?'Q?H`?G,(TW`H 0`W3@U`?Tk?c] ?P/0?7~?RL@?KhMJaT=?2?X?N?& ?9Ⴀ?QM?T`?6HB? d`?]5H?X5;@S C]@?6b@?2Nl M\ ?Pn?^:?N ?Cxڠ?D@) G@?2ш@?\/@?X0>|`?R;?Q1y-@?^ ?6Q?hM?S?Xծ?Nr?_ ?`1 I@=H>}`?QN?U?T*?:F`0O.Fnۀcg KtL??:?C-?M= ?J8?'`?T?Q0ZlS6 Y<YXH~?0?8_@?H6`?cu|@?i?a<@??`Su P9?L?PV~`M4?Y?+sR}O@QȃC_F3W ~?Rb@?6Gc`?(DB ?H[ ?'6?D@?B?)@?E(?^pF ?$`S!`.hi?;hM?7c ?% ?<'5 ?XI߀?I$ WSaT @-q\@R{W_+?B ?L@?DC)Z_TJ@?;K ?VB ?F'q#36`?! ?1X7;<?h(?P.?[q ?6`BQM WMM?= ?>Dz`?58 ?@u`?M?S;4;b`- K^Cƫ@9QFK Ex^V U@?Vi> ?a$?P=?8Jp?@?a%@?W$5u?;?M`G`@?TJI??sSk`J-JR M'Ag? ??T<}`ND@Y~T(?#-!T5JE =?I&?T ??I\,qRur?S5?c@?]?Q`>L>2@ ^K;ϝ?O ?HD`PQV?28?Q?@T<@ _j \lE?AN?Ea@A@P+?BM`?]3 ?Ux]?RS2?C RlwMLM`?P"F?L ? 2@?O`?X0?G`:"Ao ?G`K?B[Wu`_Y$Z *FG?"6?C? z& E_`QPZJQΠ,hW>qo?G@?3o@?<;k?0ܰ@CYT? ?U ?E?ϧ 3|?;@*rS:@I?-& ~[%z ?: 1\Yn]/[Z : ?R@?O3??:@U`Z?F?B}! ?J ?I??& ?AL`;+\@Ƙ?Y{?C۬?:۠?^?]7?Br`?C@?G Ht2&@?= X`X{`?& @?I<$ N ?#[?A `7@M LqRG3H?( ?C6`?DXS & @Id`y@?AYV%OV{EA> ?$W? C?GC?\T?\_?=A$?Q ?S?VS^yZ?VC ?:GRS;`?S?ee`?c ?Y?M<-`PM?"~n?G?HD`?Xl`?Yv?4 NjVpF:+)jTi[E}<'5 M8?%z@?j?0?U`?[.x`?R?B`T: WU0?$ @? B ^,`I`XYL?H5?F%`Br`6j5XـJ#?Av>qe??Xg`?STG@Q`W`^Qd`0ՠ?RF?-l@??B?W ?R?B ?(u *6 ?7?]k/?YQ`@^O?S(?ep9?Z˦ ?8?:hD@?=O 2Ȍ`@3?5}?AG^@`HĠ?G|^?T 7 QdP`S9G'@@`2M ?$9?MQ?Y ?QJ? * 0@??T@?Wn?`ċ`?`Z?H7)$BDY?$d`? ?I^?L@%CNkQG@(q-@C)SkKg. @AAj?D?Av+ZA5g ???] ?`?V/?@YM ?)?M?Zǀ?3ёL(T?!7?Hq-@3/܀z?Go?_?]]@?J' ?E?%$Ar`!) ?5~`?2 ?#-J+@D c{ FK@?D?HPw@YRSUT:@?uP;;{`?\g@?T!@B4`N7Q T8R@:)E CTtf QS &V'?1~* IOI?`5@?[T?Jf@?+D^@?-& ?#~x ?=h``?C0@LcS̃?Nʀ?[4 3MF?-C(0 S@Mc6@@ ;O?>7> 3S?D%?+qI`?Hv`?[6T?Y1?S`?OŨ*":]?[`?c1Ӡ?FXe?5?Ky%;b`RRya;Z?@`?EaX`?1j?E_`?Nc?8O|??>?O?N` OPLc F{5? MZ ?1"@?*' ?C_?Z@?^Hh?Mg@?7Q?=?B?V@?[K?? ?,H?VH?Q`?1H ?N`?P\?!?RS€?Q?T+?5C?N ?`╀?[?K`?8  ?u?A?Hـ>qoV?H?5Sޠ0@?K"?U Jv`B}O@@)MG@) \ F@?0?[2f?Rn&@=o@PӴ`UZ I> 0?B?=u7A  ?N?L@;@K, PEw>_?PΦ?_ ?V ?嵀?@?@^@?8?K@?V?!?@=: 7c @]QrK?Jn`?LƠLv@Qu`Ϲ?@YM ?]Α?`?P@?%z@>0??U' ?evf?Z86`<'5 ?:?F\?ZY?c9 ?S, @: Gn9;O>@?1\D9W H5@U$ C~x ?J`?OGV0`?J`g?U$ >(S.H`GU`^F)?Ѐ`G0?Ly/ ?bŽ?c#@?`Zl?H9@Blw$u?K?Q#@?C2ߠA;?Ҡ?0 `?+A ?EL@?I>?M~?V?N0+`c?V?$u?$}@?9-?3s?5?Y ?B,t?P?Tg`?Ja`?D ?S`?U ?L x@?E@?+`?'@?Zg?c?Qj13`3&?-Ml?CC?)ZH]Dkj`?2` H`'`?2j8E~`JJ ?@e`?(h1`UR/`HY"[`\>Z'(?H?H>?FM?[t ?RqG.K/ ?E~?\b?REJ P ?!H ?=?9]?F?:|z?AZv?Vy?Ly/ ;N C2?"- ?K?K?8c?`;Q.Dz`?>7?/M@?@`?=.`+`?4@?T"l ?E什;+?P ?Ox+᱀2@?G ?Gx hHP`?'?`?H`?E-`G8VOj A ?J ?Y)?R3@)@WW`:3TOW`e: fQ?S?[ @?. ص?*$`= O'Q@A@?)E 0NJ_H`Q"PRYO#I,O`T4c\c#@]# ;?1 ?=\?IP ?7D8N]@W€-zX?XO|?V;3>D@?Wz?`k`?@8c2ߠ>?Eـ?K{?8?9|q?%TJKQcqH3iQ?T|2?=eGgaH~@R>_QLSҠ?4l?Mm?Z.o?/ˠ8 ?Z?a ?; @?l?I`?M ?6z`8?"?R @?D\?> ?V?RF`?C?RH ?P>?Af@?Oe?S)`?I,?1^AgBb@?1?<?8 ?GqoRȌ`6|U@?Pv?G?*?K`?M j:&O ]<=F@R(@?S?U=?/LHLJJ)}Q`\CH X3B?BU?Q6?, PHv?525^[*M< A?@`?P?C]@?Dp@?G{?@?7 ?'@12K=`-ƴ?:>ր\< c`:I ?0$?A>c?&u`Ufd@]Q[>6?u` ?~> RŽ`wW PN?K n?Fi> Q@K~@?Ui?Z%?hs @$B @=s ?@?Qs*?G)E ?3oFnۀXLƠLD_ P`?P*?St\Cs`@`U )* .)?1.@ ?*2] ?Z@?C 3?4?cY@?d?Oi?9)?K@?$PeTXV,@T6@?3?05 W@`1cq?D:@?5 ᱀(DћUԀS]W`*?5 ?Pi?CCo@V-*Q4`?8 ?X-?]q?UD%9`W|^-h``?G$@W( ?Jic?M! ? -@;w( ?12 @PfIk?B?LL? uE@SM`?2?9O@& Dq:j =x ?Iϋ?2a<@XBkW?Ug@?MR=uXC"X=@70>@G`b@T!`Us?E7 ?:rP ?24Q?JƘN1c@KWu`?($Р0g`4)?;w?J+@?H?(l?(Q?TKi ?UB>@L<`?D{?U?^}?gM4?d)?Iz@?=?Oo?%M!;s?>Dz`?T`?R?QX@?]f`?e?`xv?K`?Lb?Ob?8?2. BV`<`COS??2fR^@?L]?Xm`?Pa)?T9q?UÚ?.ϹPa)Y(`MR?@j?*ZʀR;s`?S@?Z@?Yr?GkC/܀$d`?Qg`?Ri?A$1/@4}@?L9@?DN7S9Qq{@?Fg?W={?J:' NŞ)E ?P@?Y|q?Xn@?@b;USU?>`JȠ?$W?6? ?PYM ?,@Z"IWb?-*@;`0:/ ON 7;<`D5`CЀQW@?!g'u]ƀP8 >F`\-`NO@?AI;]P 4XS 8`FQ&f?Dd`?ME?2?f4 =?6?PFŠ?BȀ?0Ht?U#@?Z@?NQ ?S=?R?%`RY;?> ?R?9* G 2 ?C?a?YW@?MCQ?V ?[.?X`?H?/@G%R`Sg`@?C$`?01@?UP ?K?Cm?T?D`I)XGt`2U?&u`?Z}@?UbwTX?E?T۶@?Aϔ`6?`?'Q?6@@ RI@T@@ ?N?.```.ص?Gm`?6`[܇d`WFwu?D<@ ?Q ?H?I?[`?L·C?Ez ?d?\&qN}=?Mb?\ ?I~6);?2f`?[O @?VlMA`b`Cn`?T?:Kd ?2 `?#g`J;jTKc@O\2s`Tk?O>@?4`? Lw2@?Qa?2Ȍ`?% "M`P&9w1$QĔ??K@?\r/QT&?6D ?P?%z@?h?@ilW_`U ?'@?S?Q?+3@?%a@?*2] ?#=?Tn?W[ ?,>>2@4))?3,6&a`NO?Z@?W ?9;`?MCQ?X*?Q`?(H>LERurS5y?(l?I?S(?E]5D%?-K?PEdn9T?Aj.?S0 ?dP?`8@P `Ԁ3?0#F ?2V`?E??hs ?z +ϝARi? ?V̠ ?R(PrT43R!9cePY_PP`>l).`?$?S?CsQ`DR?M?Np@urQ4GQ`?D@?`d@?Ru`?; 8@?Tp@?OS,B D`?G?W*`$DO@M!<;kN3@#(T@fV'L?ZQ>R?8u ?"E ?>L?C7`?Dږ?`7 ?M ?_w@?B?H?Iu/^`Q߈@?O`?dF?G @4@?WE?d`?Y`?MB U cvX ?M@?X`?=$> ?<?Ci?j?Q?X?O6?Q`?O#?5?C?MZ UD+h?P?B>l`J@Kz BHGܠHWD`aXsl@KuFf @.W@Jm>6&?H?26Z#$?Gq ?DZ ?9DKN;~HV9?2s`?RoՀ?TjJ?3QkMڠG@>u?Q89@g{ W7N?- ^*`e$$R֕3u|@???J?0?Pˀ?_`?M6?<4?R?SU{ ?@u`Nr]H_ '2A?Y @?QTH?.7?3V ?Fnۀ?E] 1ܹQ6`S`@TG@ ?`%?_:?@ 2@?Hu ?M`?=F?,)@?E?Re?I!{?ܹ*QΠ?4@?LY?@Qp?4?B?IF`?' A4A4?D?UR ?BFH?G ?a٠?bD ?P`?= K?u @`?0&Ā?C ?`%v>D`?5?K@:?(_@?@GU`9A ?$l?ϔ`?%?L=?N?8c?A?]?a?)&@`?T,?WP`? : ?,>zXO*?Q ?T0u?-!J N2G??bGTQD@?V?V/P0K`?V/h?Rw" Cұ KWu`?Q?7`C)^[/ "p?K?A3( FTɾQΠ?A``OR`?Dx)?̀e`^_ P*`@S11 ?6?@?, x@?A??I?3@?6`?? 2`;"LHEa ?3J)X\d_WGٓJ,9?42$?KJ?_j ?YSt`D^@FBlw2`?C0?K#`?3 #?JR ?S<\jF@? I@?M鄀?X@?IQ@?D5@?2JƠJ/`?.% ?`?X`?T?eJ?b@?<-)-?8e?0/`?A?U?H@1a ?+ ?S@?Q/:? ꚠBj86j]7ѷ L"@G%C@?' ?52.@?0g`? -OK[Fs?(l < ?`3NOi^`?B>?Jy`?V O`@.Vr ?R/ ?RP`??Y?@>qo?N ?l`?h@SO`?O6?Z 7;<Np@? ?C|9 ?H?I14@Q `Q`<:?B6?9`?DZ T[!`w5?:iB@AD`?6J ?57 ?w ?4` ?D?Mf`?Gsb? ^0S An H:&@ FP `? ?W?RV?!97 ?"?1@U4 e]@P`Q9l?:?2FH?"F`T `! [`?F?Z' ?$`?A?dr?\%l @?@N*`?P?]@?;Z?CGq?GV0`StMP@?TJ@?V?!?Z7j?h>?[XRW@?@Z Y?C?R?P`?E?C`?:- IiZ@B]?u`1QPע!Zv?P7?Yk@?EE ch`>CX@R =~'?(y@+`E >ӽ>61n?N`?CTbfTBb@?4Q@8L A9ϋ?K ?S%?S6`?c?a` P>b4: ?GI?1@?5?:"l`?$@?P9?I4SKaLp3`?$/;272AWԅ\*0X-?S,?YC?R'`?6@?!H ?F?Tpx?ZmQ?_`?X1?A??`*_H`3EҠD'?O?dt?_?C?9X ?It ?O#?B ?Z@?-DqhQ* Q#o? * ?,$ G"@RC5 6S3ʠV@?;?T@PZ Pi?$V@?X'@?V?2%z@5>&D/@?AA?`WWAERY UJ-?6?0Aw`2?8`8V9Q߈@F ? ?Ps! ?W ?.ƾO3aE?T?Z&?h:R";{`?*8EEL@O~H7(ƅ??E*?Hd>րTP8$Р?K|@?Wh ?Y_?St\?K{`?TG?^`?[e?Q$?4 2f?HR@?^?V `?5?@?C ?0?KH ?_?d0u?a?JL1@$\?D6?T ?أLiv6?V#`?X?6@6_"7?O Y-F H`?;`?N~`?>aV1cDK?FB2 S 2@?E4m@?M"?F#`?+?NB;`?] K?F`D:@=?N,M3<`LQ<$=Vh%?&H@?3eÀFDY?W`?b?Q4?,;k?.?Mp<?Ex+`?2^6 `-?S?b?d_?]t?O*??o0,J7?C]@?J. ` I.`7\@?QI`?a?gz?eJ?U*Q?OU?Up ?C @H?;b?G, FH@?<?'`AT؀ \ ?Q?K!`EFdY]IV?W?f?Y??Z`?]"0?b@??|DW%+,@J$`QeY]F `?@Ht?G"@?M{w?R s?RL@?V\?E FՀ-G`?Q`?F `?5?`?XV@?ci?_K@?7Eh@?H?PI`?I ?J]?> YQ5bA,ϧ ?X@?Ud' ?S0l@?Tu qI`Vh g`?c?hq?^?8;F@;K !ӽ?Q5Fd(?@Zl)1P?~1w`Cr 4)>2@?M?]E?O*,?c{ ?F. ?EH?@'t?@y?F=2y`=e?P ?K}?u89@?8?C2?R׵`?Wt?:6f?+?A@?B?T?W?E=?F€?Sr ?Bш@@@9~`?M:?Z#"H?R%?Q@?CN?H?B`?F?U ?I0?+`?P^?T?L?U?Y`?K-?@S?Eb?0Qp??F%`?L?K`?Yf ?[*@?!uiMǠJ 7?S ?c ?EN<?'D8?AQ`XρJSI؆8V?Ad@?' I`AT )+MZ KD^@C;%/@?+ơ?CV ?!??4h?IF`? * Ϲ?Uv?a̹?U1`Q\0y?0>za`2?5;@J`ZC5`?*l ?`p ?`. ?\?^0Ӏ?Hh1`E^?>?fd0?fh@?WH?Ax@B Ff?Dږ?QA`?=.`?<=?4sF??B]?H?@?.3@ʸG[?M6\ZfP?R?aE@?S.;cϠJ#;{@р2`?D}@?N}?Il?R~n?T?Po ?Xf@?^O%?>HH ?%c`?VOj ?U?Q+K?@Ar C)?1^?4@>P=: Bd?"4`@j@?`:&(?R< ?@ ?u? ՠ?D<?`AӽJ @?Ak?R?Bb@?`?MZ ?Aw`?WWߠ?aW?\,B?OM?RH?Kf? zX?G?W?> >.?<|Lg7aOQ;w@Q J)`ƅ&?.?IЪ`??Z & J \`X QT+64v?S`?U ?:@4>@Qs*?V?V6_M`:3?DY ?7tN@ N'HGh(S0@#?A? h`` ?J?Ra<@?)~?u?Lv@?D4@?B@?V?\=5Ȩ?V`?K4?>za`?A 1@6 @?=+?XY?`?OX`0n@?:T@N T`?P$?]|@?Pu?-? %~`CQEV? ??S ?Z ?H3@7$@K7@?OU?[@?WN?C3 O``] W@D@Ip S=N9 "E @;UsPC6`?H?ld@RG6S?A@8[] QH =.@#? $ ?4}@?EC`?U+q`?YB?BߠHP*#J#?[3?d ?Sc@?c{ !;LRur>??Nr?PC?TPv?T8R?D-?!嵀~:7o? 1F?`R.#NW@(6`$6>?MF?R?.Y S `@N?MX?FZI|qMO?7A?T}b?MLM`?/7 ?7?0Eg@N C9KU;T7A?M*?GϠ8HK( X딀XL`?%Z!+ck_O.>?,?5?A@LLD_U\G?W@?bA?P-c?G ?Wq?=Ml ?2Y)`@Jtp`?Q?NT/0Gq#?2?` ?b ?1SA_`ꚠG ?0 6Qΰ ?$D?[ 8@?Yl?LU >B;`\@Q`?5aX`?;?5a@?O|?X?A&=B2E@?Bs`?Y?II%$?)ϋ?CFR 4 - SI41TG6Mi@?J ?L " ?(2J`9)XER[р\sT̀>6?W ?[?P?D@?!g+Z?5a@?Pd?S?X]`?YU#?E5X2A?5&?5Z?j?B8?D`/>P@BI ?K{?Q\% 3Oޠ>H>(DaO^I[}?0EAIv64nb@?K@?W.?=C@LP8K?@N4h?@?Eu?Q j ?1"$`Naf@TJT@E.$ ?J/`?SSD̀bW`K?A<$?LDgF\T0?5=i?WQ"?PH@?D@?&M,[Y`MH?O4?WUI?2I@?W@?WC?@}??M?Tږ?D=ڠ? ? Z@IU#?.@?T> ??@?&u`>c{ E`?>@?b?a-Ҡ?[ ?b_?d`??E`KR&c?Y V?a`?]t*?Ud@?N?B>?u>!?KR?JE T#?Nu?Cv9Re*`T-P`LjR 4KO`?@`?R)@?"M-l@?%~`5&`A??*ꚠMF>l?1X7B%^R[?R?_P?Q?S`?Up`4ȟ KVU?I{R?H? V(ay`Q?"2 ?< >H@O G ?.@ 8  CȕK/Ud' Im@?@[?FB`X$РU)2`Q<I??I?K. 7Z@?3/܀?9 ?M= ?QJ$9A?Fѭ?SK??9I-?Fc?b7?dAݠ?@WW@@W1!5`#(LT `CYi@?*D^@(?Av?R(?>D@?Vnۀ)Ə M:?7$`?B @'Q?5z ?Z^?_L?AG:`&_"?2p?$-?F^ ? YlM@?92S!) ?;]?`A?Z>'?@?KP?S@&Pr`Zl?N`?EX\?I ?Su ?E 6 :M4?Q_`?S;SQܹ?J@?Aj?>;b`>S6'Gak @I`?K ?HPU<_L׃V*LSa€\}`/4\~ am ?)* ?\@?U?`?Zg@?Z4?S!?5lY%Hc?Aa2?G3`?L?HG?7|`?H?Ed+4"ur?;?<9?B?@8Q+Q5KMA`PېL1PO8Z[@Jr/)@?9l?U?V?Dz?9q6?E#?9?? -`?R/ ?dN`?a ?Ai@@Z C)`@?1$?Vfo`?SLbR@?:-@??Q ?A?GWOQe GN?V;3?9!@9.`??b?4\J3|M3#p`Q`Gm`?D`?D T [55@EBPs T쎀R{@?%;* ?S~?A; S?A@?R?N=?A@??@?>+?0 l`2+U@?<?Y %?L`K`J;Y P ``bHZ5Q"@UQ@Yd`??I*r]`H'?M$?P'T@?VR@?QS@^#9`AH~@EC?W?b`?Ou?C8`?Dږ?2?I= ?JH5,?P@?VH?Q@?_,@Q"Cd?9Q@? *@ U&cdQ e ]\O?Bd?@*?@[?2MHHڼ`77o?3p`?I* -$KF@?@?O >@?RN% ?C6`?4+h?XO ?\@7Lꚠ?F@?Kb ?2U?, H}`4~?S)?I`^?C`?a ?[рAW'@Qd@? )?\ ?\K ? B}?<?L;kAO; T?D ?aW?O`<;k(u ?=ƴ?0J2cP F>?U׀?YK R4Qfa']R'`G#NV! AR?NĀ?T ?GrC`?>Dz`?;]?K@AvGٓ$h?5a@?@ -`?O@?``?W?+?Ak?O`?IPL|]nQtU2@TY`?( ?LS`>$Р?D@?Z?N?> ?%e`[-XdUbwGI?@?`YM ?` ?;?@?,c?`K`06?8[BUOEH ;CM"Xy@1g?T4?@=: >ZPlb> ``M?O@?Z8@?a`?E R FQΠA$Р?B#x`?_w@F YUw?<2p?\cI@?b$P?Zv?(@?)`?Ow?AtJ?E?X-̀?X`?Q;؀Nj@?@@?Vh?UaX`?W?K0I(8E 6?@!?]n?Nn`LꚠLD?:6 ?N=?EN@?G?Sp?S@?<-?s? ?K& @?\S?O?4`?$ѠJB`?R#x?b?/_w@`ڹ _46@?@}2.@J9?H-?P@?!]MGπUAUSNU, Q/:?D%?Pu?c{ V I_?F-?N?Rh?^?U<@,Q`8?B ?S?O%`DY \DF$?E ?N1@?_'?c?Ec`FW3`I{R[n@Q5m?0}?R*?H0 ?)Ⴀ? *RKN4>63@O<`_cees@V4v5 O,qR?R?) @5]?@`G@?Am ?Q?Tk?YG?5 N@>?L] ?I`?W ?\]?@8 : e@C@._m?1r`?:?W?d$@?US. >2y`?/ `*?5~?U;@?VB?F+z1r`CXI?*l ?SN@?W?Q `?CZ?Fd@?L ?H?H?1\S Z ;Q?*)`?#B?L-?< x@8+8ƅ=?G*`@OMI?3?Vn?JF^`[ ]T+6? ?=F?N&(2 `a EJ>V?:׀?T?Uq ?AA?4e?G?T*H?X$Р?I\6@= 2@'M?DXS ?W\]? 0UZ 8?8?_?6_"?@@?u ?2ߠ?)`@0@?A@?OBD+zE@F{5>u`?9&?M!UE aC0?SX?&lq6?:MPC B=L?S |?Q2`-0q@$Р,>EFdS6H@?Zd?_ ?SXI?V`?U ?83_ 1T ?#F ??@2s`WQ:QΠ?`/0?`j?3 ?J:9?M?C?G0?MJ} 4x?<`Ht2?@?R?Q4?Qȃ?Q?D@?~`E|X `M(^?9h SJGV`?3FR B ??8? ;b`?(?96??'`?C ?4u?BY_?N$J"?,c& Y~ Ug?H?_G?F%`M<P|HO|>Mv@?@?@OEJ .,$ 6^ 8?&`?7ѷ ?'?3?D`?1ȃK*@UKr<`?G ?P ?5&`26ȱR SGq?$?8S@=.`-`?ESޠ?J?R ?EyA̠2`?1@?Q?PLc ?_ `?GҀ:?@?H?D 8  NS?' ?K& @> ܰ@/V}J?V`?V-S ?:ؐ %~ZQ>^\?2~n?b?[??I?: ?>F`?"66ZHe4?3;@2ӠT)M'>?EҠ?VL`?8_?d`?V€?]l@?LH?;ơp`GM?E(@D,] G\@?I*w`?C>u ?y4Q@@@%2?"g ? ?8J? 6}@1?4>`?H`?%C?;<?G+ ?Cy +hME_`I@ ?6M?4e O?Ck`,ϧ D+hQ4GEBNjI?$ ?=A Q@>`?:a@?Fp?EcUU`a"PB??K?J`?=2?J@?JJ 2Gu;@P@\B`WKɠ>`70>V?B!/@P2@?D^@?V?Q9`?G???*~?;9#`OK*?/ؿ &);?O?a@?H@@Cy ? ?C?82:@j@S4Z`T@ ? .`?>᱀@6}@($?Nص?A?O8)?_ן?TD@@NW?EH?Xf@?@ '`??0 ?1'2AG`6`?HEa?B+?5?2~n?1?I5@?M)}?@ `?Nf*?S3 ?;2f?2?P?O&1?9?C4Z`R;<?;R@1nOqo9$$M`* e?M?VN ?'A_`` ?KB@?X# ?N{3}`?G*d X lY>L)t *H?A `?G7`[S@?5 jR QX>c@?Kؙ?1lmR"\5>\IC,?OI?S4Z`?=O ?Qp?V?!$ SC#@?A@AT:@?+ ?VQ`<`]6`?R ?MI3J@Ue@M6?I{R?^.@?Z) ghM?O ?Q?H$`R0Kx@%? O?Cp`?O?#?@?Ul?`L?u?4Z L=S8?MEi4_]*@?;s?`ڀ?\8?X3i?SӀ?0s! ?@?Wl@?eSN?dP@?V?>?1|&`A+$?6w`?5?+MZ 1X:q@?Mk?]N`?Sd@?M ?L?5?@m?M\ ?(>@?"?8?8B?S?Y?F ?( ?M3?T?Lx?>@5@,a?Gu?PYM ?4@?Q@?[)j?3/܀Eـ+`?B @?PN@?q6Rߑ-?R'`?^WiGI|q?Ff?O\?Fx?Q8?QaIK؀?Kܠ?+VUFNJ&n?N s?Y?CcT - \~<K:B?G`K?]?SOM?6?G?C&y@ ?4`?&$NNZ?76?`?0ܰ@V ?/Q?b?b(?KY`!lm?IP?WQ?R"Y`?_`?a>_QT`I6+lˀjQb"T ?J?W?N{3T@`?4\ 9Hu ?M`SW݁`KK?GG Ut@?:?]?`u` ?\?Zn`?R@?D!L?Rw" ?aw?ef?c?S`3p`P%@>;~?=e?G}~ ?: $ H@I ?ER`?Y7 ?CH(p#c@6 @3@Q EVU/hs ?T`?Qf?@q@?Ijy?Iv ?MV@?`ˀ?c֠?P?(V9$Ѡ>n`?@?<=??CV?UJ?M ?C?A?;2f?D`? ?b?Mu ?a`?L@.?F@?]~?VW@?:"?H`* R~`?#R?FZ@@5?QI?T1??Ĉ.Q >ZH?O#?a0?`X`?2e?*ƘU `a LJ?H?Oe zXB?Q?c'@?Rw?$q?G@?F?,?+ؙ?Pf?b ?W`5 ?@8 ?ZU`&;3`p\&`A ?@Nb`` L?0 Q`6aa?I?U7;?@?9 ?Qx@?WW?Yo`?Q`? 0 Vh?I~?Q?Gjg?8@?l;C -Vh贎GY} W@O#IC9ZU?X`3+^?S̃?Zؠ?D??99?Cr?>@?QҞ@?Uz@?+u`#[?zE@H`WZN;,@-DqM?@?TC ?S*?H[?LT `?I?QW?b#1?`q?A;?4XS ?Q͐?Qcq?70"! *r>?MX>ꚠ\.S[?C۬?8QTFY1,B ?N?X?b0b?[64 - A?5z R @h`ՠ>_?3 @O`T?54m@?Ur0?Gq#?I ?L[F@^lRo`?F4v?\?0G Z8? ?VQ ?^T3 Y2@?Qy`?>?Mv@?8?- 3y F>HY ?M?Rn&@?Q9?$M`u`$ TM ]uBY$_M0:`=K?Ϲ:Zʀ1~?; @?C@?U=i?_ ?S?& ?`?5h@?QE?W?> K@YY`E`X89@\?`?Rm?R`0n@Q@?Ts`?VD?LA ?uPFG?3k MZ -$?> "D U~P:k`6eLrW FD?4D?3-? ?-?8 ?T `?a?QI*~?H$?X?As*.Vr >` R" MK->?@ENA@b b; L5`B|/\``c@:@?L?S?Y?T:>(??Ms [[@Ue@`6 `[& @]4G@?;Z @>`?3;ؙX0[@?Jϔ`?0"FL01??J G@UsU-`1 `?H.?PE?Lŋ?K ?@?$; ?$9<.?$ ?@@'K 8@SCA ?u?0`?1 ?:3?EO'M:m4?M'`?^?M1Y#0|?ϧ ?\:L@?i=?\Y`Gu@Y TG@7ak ?QI?O@"`?CT`?Y-?1/IZ?>j@?Z?T`)lWJ`?E`?5TA,k@?}`?2BMFg6`L3`R0<@. F ?׀>6?}`?I~?Uw@?5P@?W?ao`?K ?;VUS|Sx:X?@PITU6`@I`?9H`u HV=?Nx?R\.?I?;~ ?6&?"f`DDSIiZ@?/ؿ ?G?;f?0?D+h?N- ?MJ`?6H@C F@?#Z*?W`J! ?I?O{@?1 @U8@G K HEaC(>+?)q6?T?O7 EX\Gu?A `>fV$H_?2<8eL``;B?R?I+?-/bL@`?.T?`N?TO3V5=i?N?^5 ?R@KT QN?A/@?G/@?$p?Q?KX{@@M?5O`?YQ`?S%D%4@>@ՠKŀ@bH,F`?,?D ?E`7Q?FD/@?\cI@?Y@?S?Jl ?.' ?1 `?Q?S?c{ M6@!`B(?* N.P?5h@?Ma?Tc?^?Z@?K`?@s ?Ll?R?ESޠ?6|U@?9`[K c.`F?Krh?Bl?%q?W?eW?YF`?E ?M96@! P ?%_`?'MR]A@?B?1v>DK$hJP(sF9].ϹEA@@?QJ-?W,8_@LJ?=K-? U: 2?P|3RM`? Vh?.% M?P?X@?Y`?br?ZJAy`Uw>@3 `?M8?F HXxKMZ ?+?4?"8?@R> c=V@GQ?Eـ?C_ ?FO@^`[mV9@?2u`SFR R;?/I?U5`?R)?/@KuUHA2?3s?-??f+s6c+?0S?VT?af`?W?E*Q?=~>)@4M`?u?C.?Cxڠ?)z@/)@?1?\`?f%`?cO?W"@?D<@ ?9?4 ? -`᱀Nx`c RhA,?ESޠ?K7P P ?Oj ?Zzˠ?U?Sh?S?T)?Ez ?8V?Om ?!a S?MN`6#`Q2@,2p?@M-Vs #, ?]-k?C`FsY?E(?N >᱀?)`MU{,`Sڍ`4)))H`F?#F ?UK@?I7 ,ƫ@?"I@?-)}CZ ?Lg75GH?P{@?Ww?R ?[r?VL`?I ?S?<`J@?)`?@J} Q B0I(`WZ@9.`?Y`?^?R`?PkD?M3?C@?P<`?Th ?9E"u@@?D@ ?T@?Pܰ@?G\?Bw?@ˀ?GL?@\?#y ?C?2~nUa TF?@?Uk?PY.@JP`8m@4G6`?*,@?I,?Lv`>_@@B?DE8`(|`?1M;?&7@?G< ?Q慠??67@?Fp?7@?:?KB?@\e w OG@?V_$?W?C†?Ngn?D_ؠA4cgR\U`6Ԡ?)< ?:H?Re ?M>-@ElROg`O @`OYZK~?2?GÀ?=B5MI=`AӠ8@DQ@R[#fSV@?ל?Fu@?@K~E?A7 7%`h{ e慠6AT@R/QqT @@?'?+ 0?eoH\Q]`7T`OcA@??ր?T-@?A`S`iQ@Q>#Ap@SUmDDGJ&pI<`JLE#}ESMĠ?J?a8@?9B1&@?Jϲ?PX,` *?=v?N@?7 LHހD`?>?1@;B>6A?P?VL?KB"?2?Vk>?I>m{ 4S?A?O `?P#?AM;??7bR?H2?CV@>48`u?Р?9B[?<`?3t?Iя?E?=v?;@?F=.@OKXRK@V"`V?3?G3?`?`?>)< ?Nq?ǸP``JUK??? @?Up?,VPb>@O؈`F-&XJ\`E?1Ơ: X=)Q쒠H`M@)f?7`@$K 43?8,?9Ri] :ŝ ?Ce`?5<?79?H?*HN S1M8N?!@@Y\\`NUGBe B73@?T ?$;JØAH?`H+E?6M@bݠF~h ?Ub ?PlW5[6?RY}?Wsw>'F+@=BDFu@Fx[ 0`?C[??]?/?~@?U-@?Vs ?h?+?WÀ?`)G?_?KB N"ڀOYv??s`?L[?' ><`?9߮@??ր?<р?F?P?R @?J>z@?;=?9?-@ICG @g ?+2?;@9SѦ`zv `BuP?q@?Ym{ ?X@?^N7:pbq D/?W# ?Q *x ?x ?Di@?SѦ?Q@? >Fz_JտJKՠUd]O?:@72;<?R?PBk/ ͠O `:l`H`?V-?UVFY/2?V?RQk?0B E/?x A@?h?<<`?U6 ?Q=?R[`??B?0K ?TK?N(?Q(?K@LO`S ? &`N G3:d8?5?M1@?JB?G< ?6??SФ`?a ?Tl?D}?Pz2@``ǜ@Uq$?<`?? DW W+J@?#/@?GB @?Ld?Tˠ?S$`4@^G aQ?-.@}O@P0??[{@?b85?F!Q?Yϋ?QQD8N?R ?[$i 5"?o?C*?$?1Ӡ?L0I*'?=`?#`MM`??9&P3@C?Q?F I՘Hn?"??7- ?:4d?31M?v?9:J`D@[[SlU!y@Y_>v?8 ?0sg?ESG}@?Eǀ?e?Y>?H?A`?$@%4@"`#i?G?Lg?Ak?C?=(?$#V`?(+?T > 4tJ ?3/@?[?F?2?aD`?` ?%?)ל)ـ[Hݠ?St?K9?%@? 7`#?D@?VqL+`SJ?9?DqP#R85/@`PKO8'jd@BKEN #ˀbVpcz?Nce`?Ws@9&Y@G!?SV?` ?TP?0`?F ?Wqs@?3u WU6`Vj<??.?M?#PQ@?0@?`-?X?2} >1`?&`?:@)1 `?7N`?VA?Z4?H'?O 0?Ca?<3!*r8?P ?ST@[#f=?2 ;{#?.9 @8W@?!?D&AHР?0gM3%3UO LO`?BM`?DgD &ZU8?Qe ל\@@R,`?;w?/ IA?G ?Q됀?Hj@?J,@?I\ ?;N@?E]?J'?慠AE*`!?O]?XE;?:`C1eo/c1?E#}?Lq?@, ?Q&@?P#?&`' KJa]^QU?K`?LJ?-z?"} ?>ir`?V8?QTW ?Lm,?JV`M ;*v ?Gjd???&q?%@?`GWbRN@6KVwYlDpf]?E?Pd?E*`G@;J?C@?GR/#Q>A?*?I }S`CY@?K,?Ud?O  TH=.@?RXz?Q_b?2;<?3`?Aeo!VT]?)< ?E?G@?N-?2@>'?0> HUs)Lq5@>0?3Ǝ3)< ?G`?S>`>4P&:?oX ?4O?P?N?6pI?Cֱ`4S ?[J?U4?%@9 @>宩 ?Qq?P*3ΠEI ? ?$[Fh UZ9`?T:@?U`$8 AӠ?Fu@?MX@R/?-_5?T;?KR?= ?SQ?NX`H Z\7 ?R@?Fz?F[?Fh@D7z?J ?0@L@J ?2?XE;?QPB@M\`O1 &h ?6h8`?G?O?W ?FlUT/p`?Oܑ?Lр@@?@.`?\Hހ?Pd?>q?>ei?$1`;Z@N:4k?#\@pÓl}`R&`3e`=@?n@?9?@H?Pz?C!*D Hݠ?=?J ?L[HV_L ?E ?HLJ ?؎Gu6;?Dƶ?A;??B/?PL`vZZR ?Glh`?Ls9?m,>-@HAWЀ? W?Sw`8@0 ^s R} ?7W ?U=?0> ?H?H<'` 6q*8m@8?V ?T.n@?W~`?V:?UXEz8@b'K@?I@?R`?Rk?>(?2?O5(><`R? Z@?I˂$`@{x`? e ?M8?_?^`?@07`?84??K@?R?'?19`?=wiG_I ?3u ?4? ?(d~@?@, ?)&뻮%-@_@mӰ b?Fh@Xۀ? 6A?O`?A?If?Hl&`!@?EG?U8 ?]?Rn51B-?.@?Cu ?/Si&G?6X?S†?N ?1?D"`?Os`+WT4@%]?` ?W@2&`9@=VP@?? M=`?H?S (>\>Q=e@C?k?6V?Agt@7 .9 @?G ?P ?Y3; ?^g?) R73@D=D/@'B @?S?Qag ?JD@?U`#IW0#ˀ?:@RBQ僀9?<?H@?NT ?Bx-@-_5?t@YmV"P O ?9b ?_n`?ZL?&h AYU#I)v̀?Ef CWy!?67@C=g$k?QB`?Re ?+5 O:@ZiKJ?>?L?Dm>}O@3U?4??Oa@GV?D?Y^?K`VPZ bUf ?Fy?E M?&_?N7?G:տLwB@ZD@cƎP ?P$?`Q\\`?5M?LqM$T`& ? ? v̀?3@?G%`?Y?^n ?Rx`?EU ?B73@?3`?&?7?R@?`Q@?]]1 ?O5?Lр?LJcD@Ex3?Bm?`?SF/A?="@5\JWK ?)^?Q?4l A:`Zx RxYI?J?E?`@eH0:?>ir`?,4?Fy?[?Vh@?Q됀?MgFDSG) ?M?F<?Au?[?MA7DZU@[;O[{@ShXsOy`9~?D_ؠ?LHހ3!*W?FE4 SPR+@Cp@?H`?\T?Y{`?7q :F@A Ty V]`>ADPF "`NP M?U?Dv`>u`1@?;9`?Q?V*?M?>-Vk>U^:P`4<`?'h?UG`?U9`?A@=vV@BGV?JJ@>Oa@!m@>"`NkvO@K&m`XG?@P?@?EV?BϠCM8m@?(`7ee_~@Q`?8#`ESV@?M,?NYO?J, ?L.?N ?G`N@QCȓ?Mz?G\ESgZ&F ?6?U;k`Z7VM9P ?`?J7V `7@?Am@@-`?Ack?EK`?PS!?S)#`>?>M5=P#?1I3 ?7jd8xS-bhO1?P% @V8`OUn@;B ?T ?a / `Hz?I`?M,?3†?%D@Vw`S/@0 ?Ec?2?D,?0O'bRRπD?*?EY?MzD/f^?4c@?6""Wx?GN`?W?U?R(?P?O ?@KJT:8m@0 @{x`?"o?N$`?U?Qu?;W?EM?Ns !LB`@B M E3`:dOKWdWB܀?(РD Oy`F`' X| T8?R?T RD`u`E?D+ ?R~`?Tı?QƠ?59`?/]?Ti@?WP?4Ⱥ@@&A`-6ޠ?'?8`?Mym?Y! ?M(@9٠HRBg`?L`?JODˠP ?>M5?Pv F]T: $ı?A7?A&@?Q?K9`HS}`"`?D+ FB䨀ETpO-@@ASH?'E_@Xb U<WPRb : ?bܗ@?Tx 2`&pI?T ?`U2@\>D'_?+?AK7`?9G^J[!bc (c TCw`@4?@> ?F@0 ?O`?Y?VY 3ibc `ŗFu@BDE?5f ?JH?<?=6ޠ?H#`?H#`?>ei? "@?3!*?M@?9˂Ey`Aeo?B ?VZ?W?VC`?]X&@?_@?]%?\n.?P: H=BE%Cȓ=BJA?&+?+FLO@M&2I ?PU%?e@?\6`I`PZ0?g!=;@?5Y?H?]9:J`?+ ?q?wD &=s`5c$3y ,,8m@?DI`?<@ -`@?2[`?6tR?D/@?7=D&J, ?2k?L ?5翠1?E ?SF{ ?B ?E?Dƶ?9?+5 ?ER@?<!]^3}`H\l^(^ O U<Uu-` ?'E$K H|`Z8m@B`?8PRR`L$`?W?U`?9z@>v̀K=;o ?@4Dk\~QZdTıF`P0\`T? Q7 Y̅Q@OUn@W~ ??HV_?GB @?D_ؠ?B ? M"`?*8m@?;J?5 3Ap@QހQ`3=g?3`?#ں 5) 2w ? 8m@?Jj?T ?H`??3 ?G~`?<(`?+B ?N?]?_?e桀?j`?YC > HRW TS?BQ?P;?.T ?T<?4'_s`?I?_E ?cq`?NQ>@:ѷ ?A ?MJpV?1?Gjd0Q`N;Ch`?I?N@?>?B?P`?DZ?d~@?6?7J?L ?CEc@?6?Hu?FZ?$+ 1E*`݀?2Q-gFW!VrN L ]܀a`H̀u?6+?=G`;{#?:H?_`?AWQOր=?J9@?Qp?@o^`U<][,JA"LTW X8HhT@`<?Tc@?T|`?K ``G5 ccVc?E@?W?QX IW@Y]?[M?[`?7 q?:`@<`G ?6/?k "`? |?8݂?J,S@?U@?FZO_V z??Oa@{#?H?Zs@? AI3 ?O E]S$[?Q;5N:p?@H?6 p?A`?V?]}v?U1O ?? ?Q(l9ל?H# ?M(+1?3 ?A?Bg?MU?EK`6A?A?5=Ct?Aag ?Yw?MgF 9?: ?QB#?AoDEX΀V/??n`*X??_?ru`I@2?G+?KO  MN H??;o @Y>SM9sP)ȠY`QmTzF?C̛?*h`?2+@?`h ?`?7`J 9 ?S?P,HU G`>M54CLyFZ;`T?6 p?/#Qag 2;<?W?`T#?TM d+V}? ?4?2GV$[J`Jӻ9ـ?n@?'B @? z?4&? I29?F7@?V ? TUL,??GN'@?P?%-@X0 `VtR?0>QX@R';f@WT4@=2?c+@?VY}R(?@t ?:`2CM`ML`?>(?V=@?Q.?5f SY@a;QN>?@<?O?Sˀ?X`?T"T ?B ?B?T@?TT@?: $`EV0R+@?P`?+=oX ?Tz?Re ?4?A?\9?^ @?H=@D+gUPA@Co=`?'?2?D?@ ?LX ?H~`#`J8Xd@?6?U5`t Jϲ?Eh?2g1(2GVL=?Kh?&7@D?N@?bM`?SDIT!@@>'M*P`?I՘1`Wa<]-G`?=e@AbLS {x`?9:J`@UZT$+gD]' VB@4?5gڀ?Jl Hf` Na ?6}?,J=1E ?)z ?]m?P0NR`@Sz`9&?d&?` =\OM\?6T ?Y?QQDLcSm?B[`?SX`?3 `D`[d[^`e ?P ?P/ՠ?IZ?IS ?0@5}?] ?Bw ?)#`-IZ;sX4/;5?DU? G`?R@?N%E`??Xo ?a@?\yF?T1?P??B@SG?Iv̀?Q=?ԠB @?CK?DM?'B @?0@?A ?.(K\Z`P`?+g?&l?E}?H<'`?Q?Rv5~@U>,?TV?TOL@ FWa9$?V ?!M Pp`\]O HD8HR9n 3`L2UN.?Nr1.]U@K`@KO z"73@W< N@?AYU?1*?P`?`?V@?59`!=?E?/(E-@Z Et?C_`)V QĀC*?NI-?aPB@?U6ENQ]tcD#V`?P?P@?9r }?Q}?T5ID"`?L`?Vb+`?=S`FyU-@RH`0o^`? =H8x !Gz4?Km?K"d?6yAY~VX@?P@?V5?ZL?^?[^@?G5b @?3" ?G< ?<@?M?b4?b]?؎YKo@><`?UE@?T <`JRNe Iя?`?Ex3?Mwi?Re ?5cFAA!J#P ?%V?Cy5+`7~`*x MM&A?J ?OUn@?@/ ?*,@8QC @6C?k?4?K5 ?O[{@?]?aUM ?R$ >Lm,X. QH0 ?<\`?L?\v@?^ ?N @?: 9 ?3I$`=&FyYv̀X?>, ?Zr ?|`QJ5@?4Ⱥ@?H̀?Jտà?>q?Xt?L`4H# /{?Puk`?_5(?[;?@S!BAI- ?B .@NCi7@-@?P&?P? QQD9Z?@?P@?e L?'4`?Rp?3%3?&7@?J?6y?2?D?SM@?U8 ?N?G?4/p`?Fd`@x\|W_>@?K0?S??@TOL?K?Jz?F?Z`?P->eo*`R@OeKmO ?G@?c|o ?U]?ـ?I@?K\? ] ?'W ?"73@8#(G\E9@6A-wiI bgS2 N ?J8m@?:P`D)c`Wd [!W%`Vf4 H`?).0@g?!,`?CZPaQBg?H?P ?Z?]#`?X`?^@?Wf@>8m@G@A.!1UM EM  D"`G Qix(?QB#?FA@ B@YbmP?(+6 5U ru`?;:?DI`?Tu ?AӠ?=6ޠ?Dʾ?< "@?0 ?$#V` : 9 IQ}bZ@i\*?;9?Qs@._QeZk =(I̠SO`T3-D?OG@A [@ ?QN>?UC ?^2@?Q2 9翠C)< BWxQP ?8 ?LN?7R/?_ENKRhSOi??T?Qv?5`I FyJi?B @?D<`?0sg?2πHfE L\`7J74`RՈL AI3 SSР?UZ?OɀQ`ZD/T e7b]U]<@ ?4;) VZYݩSIL5 M?+z I0`@a??7À?DI`?0??8d~@?1>)< ?J>z@?V n?3Q?I ?PU%?:@Bk AA!NKȠ Z@LwB@\(@@?9*'?1& ?C@?GF?&N@?B@?b.?hD?RE:OԠPmZW/?BQkEZO(?*h`?6 7? ?R ?T?,u>79>pI:ȀYLq`WP+ ?N -@Y@G?Um?T ?5}BtYN: ?Y2?M(@ ?=n?7À?=?R؎?5f P( OC+@K`RnE :@IRM`???0 ?I?T8?P.?PO?Q`?F ,B`H8?翠?Ue?Y?V}?O:@9=*p>ڀ0Q`B R`2k ?6K>K`M'ZA@?LwB@?7N'@`d2H߇-.@LFJV`PlW[;`&_U",?A?AU?1?4Fl^<Zo+F?3Ҩ@?+g?9W?;"d?:?T ?_p?D+M KVՠR(] XF= K"`?D"`A@X?`3 ?P> ?R(?Jz??e?E?Nn ?I4=@?L`?Fh s?2?V< ?J'HrR->:?8Vaa@!?LHP?SÈ ?c@?SĊ`?4 ?Ix?EE`2πD7#ں ?D?G?|`?A?[?[Ƞ?Vw@?GX=<d??R$ ?;2,?) ? cD@?9#`?Q}?Pzv ?PX,`?Tw ?FrN ? Z`+@[9`1Yc@?%f ?Ap&@?C&?YNu?N?<`?Rp?VX?2A[Z 4?C?GÀ?Ra`?RiTMFz_?*X?@wo?B$c@E[?1@?;BITpH@?9~?E]MBU?'?/`?M?Q;@ a<a:B?Mwi?P`?4`3:T>ir`Mq\:?E_?!=T>VC`0?QN>?Q@?;.~?CI@?@1;qINV/EG?DYˀ?T(?Q`AGu15cD@&` `?|?S/@?`( ?I M`[@\`17?W`?Tm?4O?%p?Fq?MI>@VZ?EC?b.?2 W!?Ԡ?V"?35V G@Ep"LaOT@??G?8Р'`[:a%O`? ?L`?S ?W% ?b% @?`.R`?3IQ^a a[@\,YҒHn?I?84US6X`?B @?1?<`?F_?Tc?P??' `Y@C}`C?k:?1YUV?NB?Wx?Ce`?"oN& E?Dz'Y^`[H@I?7 $@@?# BP;?Q`?f?[AG.T+g?+S`?T@?@?Z ?@?J0?e>?ZjP Z QSG}@S؀Ts`[i8@0 GH@ZqA.?I?1F7@C=g?9 ?Rf@?P ?;BB7^> bY̅8# ?E ?Jd?L?Wty?M>BDSUFɀRkD7J?6?Yu?U2 4[K(1`?@?@3Ap@?A?B?n`OSi5-@<v@PKbI (RԅaLހ?I"@9 @Y K"dQHW C@J\`O`?y8V @?^n ?b?D?Li`)?=?P ?12QC `H8?AK7`?Iz@?R`?Xp@?V?;8?K@$8 WRR1@:H߇A`?6lA ?Yf?SBr`:`@?5`?Zm@?N:=S\]2(N?Jv?S^ ?VF>kK 5?C ?[?Z?Oj@`WO)`RhTUM>k]Z+( ?)Nu?>v?Q?RRm?J ?;9?oX ?"?7 K\ A?E?Mue ?B ?H~`?J`?95v/y?=  ?>?B ?S4T?W ?N??ID`HnUC%?Qr ?J 9 48 1UM >+g!m@?=2?B/]&??UM M`Xc| ?`G?`b?DV? @.P 1`\5`a"XIB[?F`?W ?2?^$?: DMI8FCu ?F?P?#`yHW@V%?(?^VI ?c)< ?[A@_ˀH ,,L+?宩 ?X_s`?X`?5+`?.@?Qt`?TYˀ?635V ?(4?E/?BIZ`?<?5n@?3`?=`?+95VK0 WjdWT@@?>, ?;=?' `Dv`?$`=WL"EV8à0.7 ?ր96A?6+@?5NQ5L?E;&`N(?$Z?7ru`;`?sg?2Li`ZKK:?/ր:d[,@U KL}O@N@?.A?P?1]^?3?8`TUdW&Ҡ?A?G~ `+GN'@Qp?>:?P7z9 ?*ɥ?<?T?8QU?D7?Z@,m,IE Qx ?5<Cs kU?3Agt@3l?El@?S'7?PB@G^JZ ?=m?X?6A<`?Mr@?0ƀD"Gd WK a=P|?HRW ?AU@cZZ4?؈`?s`Bܗ@t?2Sp?Mwi?eސ ?j?V+Cں Wpq[ Kf@?B3`?67@?' `?CU?`Ԡ?VI`@P?& J#O@ru`?(|`?0?G?>' z,@JV~YЍ@?A??/?H ?PH @HB} `?5~@?:@~?+( "`?;z?M6ޠ?J`@?:~@>k?$UT\b?y?Qhv`?#ˀE+Lm,P@G< ?5?I͇ H^ B;<5JJ?"'?S?KF`?J ?BNYD ݀FyR Cp@Nu`Zn`8?D7? v̀?D]@?[?]L @?]z?CG@?FE?W=s`P, _r A@?@2I ?;`?Wu{?E ?0?<(?6+@? Qx[@? ?LP@CG}@?C{ ?:#8!$? {x`+`?5I?Zb`?Om`Vs ` Q:X%e \@%n@6ԠE?`?L&?`q?R/!?yESXe`U, ;(7?Un?^?JzER@T}JG0TFZ?>m{ ?7?0.?GÀ?062c @J0P5 N?3?FyBπ?!Ơ?\|?7Z&F Qр?=K@?Hr?8?(݂.1`>?D ?A ?9?J ?PH?7+Qi`]p FN@?CV@?3ҨB 8?@ @?QYU?Z?Y`?}3ֱ`?Vq?Vi: ?B1&@?V`' ?M ?I՘? x SnB֊ ?E<?CM@AUM C/I Q\t;ScDȺ@VeP`?Bo?U@?R1&@I29?A?Rޠ=EQ`S @Tj?Cp@?TR $` cD@?=B ??Lz?H?@QH0Z'IX`@cD@Q}@?CĊ`?6Ԡ94?'@?P?!,`B^?Q?_+ ?2Q2t?7Q@f TT@?Jz?:H@@+g?9٠?3%3?Hv@?H'10E`@4[?O@?`A?TB?8'?6?y/KXDE >Z ?T<?SӪ?C&+WU6`[LSDZM\$`S(:Dg?@iQ@?BܠPK @@?T4{@? v̀aC ahv`Pb?9* לHРPq?1?F~?< ?9 ?=?B ?2FRPz) (T[J,@>>?Z#?`Q@?[ ?S{ >4?S`?Y'! ?PQ`!u?F?La؎ECں X>ir`?:' <`?"܀?2?D?`RIZ`UFN?-G`5YP @?Q ?RL`?,$K ?DW@?Er&CU S͝/KX?Q"?<$`R|Qt`L Up@M?MB?Rπ?.BHE?9 @> ?r?F"?`L>1@?P 1bc*`PQ@?Q `?;`>"`?EpHPR?Hu?`?[ 0?Uc`?QX 1Z@R؎?O ?BWxbRRIZ`X?@&?^`?<(,`?MU?N?@?3? M:p,@?LB@?S8\?@`Nec?_pP`\# b"VP`Ca?&`' ?*@~Oa@P>"`B @[z`@\`?Cg??5<B@P|z?Do@?\m?K="@M@?I?Q?= 5V?$`-@R_ J^?F@?UW?S)< ??+ OBS?k43" >v?K?BV Q@TV`Z, @@DI`]FOG@?'@< QvS (#Y@?aB`?fn?P1?9ـ?Xh?`?W[`?Eh?4l ?. '6T !?=S`?+S[8IPz B@`OUn@-`?PP?QlG?A]^?\i`?PH&/@W*@8 @CAp@T/D ?R@?9@_l X`]I=`V L6`@$?<`?[o?\S?V?aA@?cq`?> UJ.W?0??(?(|`Y٠hgK\ ?UE`?*@;`?JJ@?H6`k"`)@/;5?7N'@?@K ? GU& 9?L$`?T5}`QM@;/ܑCU ZAT~Q.G-_5`?J??3$?@I $&+J?R{?\P?H@NC>깃?Sz?Pwo?H`?Yj?Ys?8'2 6A?5?JH?@}|Puk`Z=IᲠD@96A?S`?Th DZ["d]V'@\j& J ?;@? @kUR73@Jr ?]?iV`?U?4ˠ?W?aF,?[k?AƠHnAk?M@?\|?\?U?s`PL`HD81,`:D@?2g?TI`?S 3L?K`?a)n?SL 3 `U:W@J}EI>뻮?[O`?Y?+W?= ?A PbDf6 aD`*?Rp ?P?L ?[@?ed?a@?Hv@?)>S?Ȁ?#c@?F3@az`QN>?Os`?;>6A?Oڌ?HW@4?)?:$A?Aag ?Jϲ??n` [2;b>?53?YMs?RzĠCܾR=_53yF@P@V W| Pg 5`?DE ?TE1.1` +`?ʗ`?@@?= ?-?$ "@>g?: ?P?Ne?Q@@?[?]`?Yq?U[ ?GL"?'`?67@?;7@K>3@:N, ?0&?XZh??g@PST >?5_@?+??P@?R ???FK?AOj?Z ?O??;B?W)?O1 ?>e?8`FQB`?4?[k?`?ZC ?F/?1?1`6"L CQ?cD@?O]?T"` XF9Ԡ?CM@?UT`?L@?9NuFǠT8`?9 ?Q@?`?\yF?X?b?\ ԠX4eR@cG?5n@?G`?M?M_5?`!@?j?fQ?Y ?:`5-@?G ?W=`@L2.: 2@?FnE?Gu?&Ԡ M+B? ?G?B`1qGhE`)翠?A?=G`DQ@M4@'J9^#!*?$3"܀;F.@?R/?5~@^V@N9 @/@6u@;5 .y ?0G?P0?OSi?&h8`?%?F%@?F?E?;Z@+@`?H:# ?Le@?7-,.1`0 (J?>>뻮\[\?6??s`LB`D`?> ?@6?E?M`?^?H'+"d?W@?b[`??]72@%p?U'@?YЍJ`UR@?K#?Sw`2@LS0s?BEQ?C<@?1`?E"?D`? H à*p(݂?4+?N?7^J?%u?EG?)ל?'?M>Pi@@|? S!?Ec?TV?M?R?`y?ZE?I ?8 :5+`?2 09n  <] ?JØ?ea?a ?P?+zN :@?[@?MBK@SrUD@S7Z;o ?#Q?!`Cw`XlT  M?:CG 3??4/`?>+?2CM`?N(?Q;?@)4?E ?Dg?B`?T?Ld~@9d/`C)< ?2B@S@x@?Q`?a:?QH0A M?QPB@?PS!?I*'?>B} VXTTE I/'9Bޛ7%`?9R~`?X+?UQjza[@5?`Ҁ?JADˠI@W`0kUA?B䨀?Tˠ?94?,@?E;?)  ?A?#a?MW$ ?K OڠS" ?,?73@AE*`0sgCG}@Iـ3@>0*?9j?&l?B-?V n?Q?TǸ ?Ub 6yUXTǸ XZh#?Q @9٠?;N5Dˠ?T`?Tp?6K?8\l{#L@O #!*?B 2 Q,G~ ?/n`?H ?P5?R ?T$?PX,`?1 ?#1M?Sˀ?c`?`!6 >6AD@?8?@(`?Cʗ`?\`?Wu?9^i ]€Q?+P XML`J#?8q@?Q$?# KF?;&m`?]3`?Vb+`?Q@?[b?W ] bNR Ѡ6`?{3 ?;{#?\m?bڒ?EAAs@?=?As@L>Jտ?EA?Ss?*`-G`?D@X ??`/T?O ?2@?S(:?[@?b$ ?YhR-a@DO??o?B굠??^?L] ?s?8 ?@ʗ`Puk`P^9`?Dm?GW]]1 +`?A?Rc ?Y ?+5 PӀRFSWT`HzGN'@?%-@?PJ?5l`?!.?5+`7bR7. Lk(@,<`?3F~h %n@?Hh8 AO@ ?I~?Q^?Y?b ?W0@@BV ?]?U?S>i?5v/?D`?Oy`?K?V9Ԡ?V+?8/3$!E*`?&?K9`?Z?T*ODc@?/+ ?'1v?J,@?G>?GO7=[,?273@>"`@]7@<@IAV MB-OUM ?F`' ?Tv`?A`?0 ?Qz?Z^?GJVeӀ^@D`(N>ԠA?@o^`?X`?UR@?L ?Uq$?T)c`?F7@?H?T$?Yn ?;:I29?=?T7/@?V߀?C{ >)< ?P?V ?W0?Tl ?)Fd`1(8zNK1@.?O ?Ep?@@?&l?;f@?Q@?U4?-W$ Lo0D &?3Y@?@X@[½>'?A};(4t?F' &X3a?A@?Qހ?(T[c? ?6T ?Z?^?Hr?E|<?Ix?)#`?3i&]tc]/π"@?A]^?5"?;@?)לB{=?;?'D5%>/CoF?0Z ?@?C?Lm,?No`9V `IUt?I ?Q?"7BgO$QJW8Xd@*0[S-av[(qDK ?1?IA?Q>@5?9@?Bg?1@?=1@?HHA?U?[~?T_ؠ?P#?$8 R?5?[B?AI3 ?)&?W?P `@:`L@L`8`?Q>@?T ?S6X`ECA?N ? @T@?I~?H@?+s`CS@G@ v̀?/?T^`?MRxJ*NEIUZM$ Q`ZT> ?N`?%-@?S`?`U?C ?39^?Q1?<dA,`W$@b} TQ@?C?E ?6G?DQ@?CG L41ag ?Q`?P @0ƀ>n ?)h?-n+g0 ?,?TI?WbR?D@F u [ƀGB @?V@?Wru`0W_ZYܧZpQZ@6lI,X UtNQ>@%p?K=?BK^?1E*`?F`)F UKD#V`?Ao?QB`?K?&@?Dv`?OT[? W?L@P` ? ?B73@)< &/?<`?Oޕ`?O2?DQ(`?< ?SK`CU[ 4?% En@I"@6?27?P`?HHj@`ǜ@` CI?J?OO?I@?V]@?S6X`?s`?<1?Ta@?F p3P.`R`1Ơ!.Eh<Qx Z@?/Si?NEg?'4`?[??B?D?=`?_<8?T@ UrL?C<@?P`)f% ?Hl@QVO@??],?^`^?J*N?3q`?A??GO?BJŝ (q@?W ?RZ`6+@L{KJ$A.q?D<`?@|9"@P@T? WeY Y Lv@><`48 KNZ'[C?H4?\Z@?&]I-&?ZȀ?Oq@F[@?N?a?Rp &`5v/L@OIT ;B?"g?Kh?;bJT<`?7 ?"?@?C!*IR~`JS@?Os`?Oa@Rc[!b [2?/ ͠A_b?pI?J@~?43?@??7- ?Q ?QD=^HA``h@XQU?0"`?;Vՠ깃-n>i?F;?5K]Y^ "`?WN'@?_?\m?Z ?QK7`?">ru`QN>T3y B4? |GV=?1@@/3$VI2䨀T(C ?K?8`?2?R<> ?9>SMi`Lm,?5%?\7?SZIZNUG,e M"@R@>'?HD8?N2@?T@?W#?Qs@??B @D_5?Xۀ?QD(@'4`?y?Ir?Hm?@@MOSDIя9z@7MTJ9b !Ӡ4? YяaN>U!y@N1`?.?b$ ?RuQ ?"I ?]`?Ak|RHd~@?J`?U?.BK`RkM`(d~@??'?R?W ?Eǀ?Cu ?>u`B䨀N]X`<`?2?L@?Lm!K@7R/! B@)ל?*<`?4o@?B{?6T ?@@?"πB؎BSX`\ 3?J:q?1:5<NDM@??~@>}?Bܠ?J ?Bҁ?@ ?Ay@?0@#깃(|`O{`CD?<8 I`3†>]?$;+gU w \Dʾ#†(?5?C?.E/ZY͇ Mym??Uj?Qo=G`KE<J?`CܾYQ ?L`?a?[t+gEA4Ⱥ@?"GV?Rn?I:J`ל?0&?St?V3Ǡ?&Z`_ P`?"GV?R ?F#MQ3 Р?/ ͠?' `S$1@E?`? B>?Zo?[ZAQP@ H4tL>F 5`D`QL\`D<?@uk`?REQ?J&F ?C<@?9Nu7>LB@SEG?1Z@?Uj?X?5Y1u?0:?5`6ADAFԠ?Y@?kAb?-?N @?<?EC?Te?L@bRPzEc?I@?J\`1@Dx NQ@A}4?'@?Q-?D}$;?#a?5$I`6x[ OQ?.?U.?D;? ?7EEcRM`??KX?R97?9?. 8 I@?J8m@?Z?0)@?O`?I:J`T`ce=@]FW2 Q<?7`?(Bm4`?1I3 ?A,`?@Ij`> Q/?@:?QX ?FV`ER@R Ѡ?pI?B} ?P?8K6 S>?4+gP)ȠL@ DGAk|?C̛?S@?4x ?@{x`?X[j?6\`YԖ`TG ?HР?W ?4H>+?B@?VZ@^@[@@sg9,TVV%@JØ'#?Hp@?Jn`1=?A_b?O{?%v/OXT/p`QR,`n?VǠ?[S`?[`?Z?+FH @?"?L4?17N@PH ??B?D@G_(d~@?SD?P4?H6`?Q"?A5CRgA$?=?@U%?5V?.(?* ?F~h :?4o@?]?B@[`R?E ?U?S~?<8R``=8?[U?Th ?$C?JLNr?Tb ?`t@?? !UM ?4ˠ?]+?^$<0`R ?=gF?BxT a [@`(E@b97ZW,?WrT&\1,`?L1?P?@8 ?Lk(@?]Ti@\a:S@?D &?QF?Tn ?HrE \@X@Eg K ??`?Q*?@_]€@ ??X8?f`?O$U<Bm?R_ ?O1 @@2 ?BϠ?I@DGV"?D]YqR/!?DS?R~`?U@?Vu@ S`W I ?Gz?;=R֊ Vy]`G@D@?5?^`?Y)?I?P?G+g>+g?;`?1t@PX? &?H I I?DM?El@?$@?>`?B@9F'GX=6'?-n?SҨ?XG?@?M6ޠ?U?V`@Ci?XML`?EE@`X?S{ ?bA?\R ?P$<`d\wB@?7?=?P? WI?E_?VlA "I T Qb?'?Y6`=(GV?BD?U'?V2v_#b6 ZwQN>?@yt?a^?Xh?<$`?R?D?T@@3 QKO ?O?Mi`GP++?>:;2 ל?PW*@?-n(à?P@?Ql?G+?F?K`B/!B?67@/JD@<`@mZ1$?-wi?6G? "/! <`GWD>]X`?@R@X`D`DgJ0[?4g?[?]z?G#??/3$?D "@?T=?U/?C;c@?G# ?D-lW dJ`翠U PR`?PA?Wl?7@>:bT `fW Š4ˠ?L ?W?5~@@4?5 ?L8&`SWw/?Yr?W`?E@?25RTN\Q VpI19`?UM?R?%];@P=J$A!?2?Sc@?Y??8z#C`Z9o``Ef Y@W?2#?RGV?Gl?7@?9,?Lz?R61 ?AqР?> K`5V?<m?E;?QWQ?_AB?YN?"Wx>8m@?8q@Ta}"?#Ҩ?QH @D?Qr ?K&m`(D8D UI`?XV_?cX!?M깃?K^?S)< ?6K?D#V`?Ya?GB @LUy`S8\S͝XtV@!b?J ?7h _5?!.?2܀?7&TsX@Su YMs_ N:?KL?YS ?NT ?J ?W @?X%?RӃ?Q `?@O? ? K@Q됀hDgaѠR73@D9 M  i ?@I <Q"FV`DI`I@E $>"`K`@S ?!$?VI`?T?L,?!uAk?>y ?\?Y[?Rn?CI@BR}@E !]^@Bp ?"g?L_@?P?$kE?'ZA@?FN@9@9n ???E?SB?CȓRy€/ ͠>(Xk`Z@?$+g?T/`?G?E `??5A?:?Mr ?Z?U`?:$A?0Q ID`P\& B?X?U6?4Z?T @?fv`?d ?K&m`#y)n ;`TbN`em[^`4@?"܀?A@?W?Z`?Tï`?Z7k ?X ?8\l?Z?eoX. b|;6 ?CgIP\@?0|?3tLW@I?@Z ?R.?;f@WdWk?cص?K0 ?`7?Nm{ ?M?O?(=@?Bi?T@?P;?EV?QL8BWx?5u?A!?3i5cO`K=N?9z@k%-@?R1@?E!y@[ XA_?K ?Bi?5VUU Og@?RX@?=[,A"?k?A?<?!?/ @@El@?>?W+?W ?;.~$+ ?O@?]@?F)8 >>?H`?R ?:(JF`?AQ?dp|`?a ?S?Os`/`P`D Urc `UL֠?A?X. ?\@ ?S5`?H>+?W?H`;JP@5I ?PlW?F^"<@?8t?P`HX[j? "`?EW>"`?R?i4?i2?ZT?N ?F ?@=P`@`@@?;*v ?>?F"?MB?L: ?Ux3?Vc?3$F$9 Id?GR/?Z?!E*`FT ??n`?R Ѡ?)n H`1E*`?Qr ?VJ?.(V8c; Q?U`?RQk)Fd`?@?T- ?D]@?<}O@?@_;?7N`?:i! Bk?<?V?P ?MHJ@M>@C D/`OڌU6 D?O ?#@^V@D&?N>`#?"?GRJ:qUc?\|?RMB\t;XPq?E`?Z@><`QD(@?#`?D 5=K :,S@?5 ?R ?D%Z? ?<J?1%f Jp]9 N}?U_?[m?M?FnE?"87 E 5?P%?Q/?I~?E'@8m@?%?=S>C;c@HD8'?PE ?NX`A?K< ?\7%`fibSpP!@NG H ?2@`?P?Mv?;W9jN?@7@?,`' 4 ?9h?Jn`?C&`?="@?9W?9?ں ?,`AƠV`Mv4g@sgpI?Q`?UX?P\@?MĠ?L?Mv?N?RGV?ST?9` ?`n@?I?Q M??F?U ?Pt ?A`0|A@@6#JvI ?@wo?R97?D@2ܠUj RQ0`/`L W`Qag ?2CM` QXS?L?bە?O#?Ry€?]1؎I@?I?5<]r^gCdZV{?L ?a^`?B0S!?Hz?"Rw :\`?,2Z`94;>&`?H?9B[A7 A@IR~`V`T]C?(?B=@@?:i?D'_?Dl  ? kU?O ?*8m@S4TG7?M`?Tc?*X;FA3`F?-z?[Q@?X@?A]^?(q@?!u?:h`?D A*a `UO LHހadQgt@?( Bc^y Ys2CM`?0?1Q?A;?4g1?;9`?&Ԡ3-D(\l?$3y )ME@I C `T- %p?]?b `?G\E2?:ŝ ?W ?[d?O $+gEI =2@?1?$+ *?:L?J ?Co?L6`?G`DzT9 Ut]gV|c< \@Cں 6`?8z9˂Sl>=?A3 ?J`@?)< H 8tAA!S+@?7݀?`u`?[;?_@?Y 4 &`?4+?2 @F+SoNce`9*'?Au?Bq ;F?<,?a ?MK R@(?M ?'jd3i7 0gM?D}?J0?1E*`?N `?Y`?5Q`SIA?@Re >q, >?->?:H?%~@? |>+gM@273@?`C@?[NVCG ?O9$?*`@?L ?3u ?2oTPct]Km`?FC{ `R`K.~?@x?}?Oܑ?4"V@N?<v@?2t?E#}?Rt?1 D;C ` 0&`CĊ`? 9?X?UCV.(?PZ ?U@?K?"&P`HV_Wqs@RZ`(?No`?[[?HPR; ?5?M';JCc@RԅEv/BOg`[m`@@?cO?b`?cD@=  ?I̠?Y! ?J?:@E1GW X`O?Bi?V`?Vh8`?@Qv?6d/?C3Q?A`?G ??B(LJ 2?D2/!U1`35V ?]?NK@T[?U<?R1@?J4?6_`?;5>YO+?P`?P`?`@?Y@?;\?* ?!,`R<WH@?9^?@ \^ dH%VA?OOa@?6@M{G?Р?K?S{ @ X?A?QXwb܀A`? לA]^k?M ?G?4G?E'?0t E>`?I̠Bq \`FpI?7ru`+>?Z*N?NY潀U@?H`?C sg?OSi?W@?+S`DI` EG?!.?L ?PY.?FV`B1&@^m{ TI`?:0?TF`?V?Nu`?3)< ?<`4Q1LJ?4@?Z@?a?H H`&G?F ?>?>y ?@o?5V?C7Z?cD@Uv/ ?j?n?W=`?-K@?G?J`?"I 6G!Ӡ?,B`>2o> ?Ba`?!$WЀZ ?)4?53(?>@ \0`X.GV`^`Na 46 K\ #?P?R֊ ?M2?B-:,@WU6`X7Bܠ?4@?FN@?N ?J?( I `Z?C*?U}>?@>$?:O?$?/3$1$R"P2 O3$Bp ?G@? @U^?6P`?]zp?73@XB4K8>*,@CQ/#ں CW!?E ?>, ? :'4`L,Z2`@^9 @[wS؀?X?Q$X8[n?L?UC Z@?/k?KS`?;@?<J?#tFz_(LJ ?N?I #`StZ@@OuO8Xd@;9C7Z ?=?9Z/D~>4?W ?_?M?9 @?I̠?@ ?1`?7^J?>`?N5?_@?Y͇ ?10.JAaZX_@,r?.0> ?9`<8a_TK ?%`)#`@B-P8 O1 DW@/Si?@_;?H ?;b?={r@?8\l>m{ CY@?CG}@?LA?$K ?H#`?6X?x >+(?B^?Pzv ?@|?J?M*Ġ8 @LA9z Hb d? @?85`?C'7?[`?M4@- "@?H ?GEB MĠ;Q`Tg?#y?Q?7R/A9Z2?D^iO_^>-@?T?SIv̀Z?@.?V@#t??/;5?C?U?R5? Q=<10S! B9 ?:W?6=`@?B8q@PӀ)< ?Bc >}O@;b9` :@FlA R؎V`Rr`T ]iQӠ?(=\Q q@?6u@.v?s`P PJ?$+ ?F1@?Hm?Q>@?4;?(?_Yv?`17`N7DRՈX<'`B?D?XT[?Q3`?N"ڀ?(`?`?H à?U w ?$ı1(@PgM7%`?3@?)V ?H?U6?FA?-@?A?J`?V?a?UT7 M?H?C/@?XV_?bJ@?Lz4t6+@KG9?q@I 3??)n :D@YHhW|?(#`?E4>8m@!A}N`0kU?Hݠ?[?Y*'/:@P4CWŠ`\ 8?V?T+?k?.ڀ?TıP`a`S#/ ?Ih ?UԀ?Rݙ`"} Rw ?+:?P&h 6 ?2@?3m?Hu?KB[`XRk5Q`?G/ ?Vn?W ?V??7- O ͠E_@?@ @> K7?!E*`-4o@1 F EQ`8`H L I TC ?=oX GX?3ֱ`?O914GE`]7@dؠO?Fd`?@b?RX@?%-@FZ?H@?OO@S@?6|c?P^9`?+`0&?e?Ue &`6E?9˂?X?RK@9^#)< 9L`?(q@?T?Q ?Sn ?W[`?E`< H@?T`?\D?;VՠO+ /?T"?X?2=9?I?Mr A?Q|?E<"kK>L W??=9?2I ?;R(DR 0?:X?M}v?P ?R\?V@?P?<$}?# @@B?c@?(J?7nl?6?7?M(=@Nz?$`"`?$D@P?&?:`@eo1`WN'@]Z*C#/ @@7?Pq??3$NM56"%=R85E?P+?`?[@?C}`?b! `T@?*=?F-?)?:?Yi`?R*@?] ?P?P1?@@#`35V ? W_L [ 7 / ?I`?(d~@@*@I6AbbY%?6?;?Bҁ?]s`?V~h >9,:,@M2N CW?<?MQ?U|<?I0`. >?EE`G cc.GXADV$I`A?`C ;=1@@?FX?Uh?Q`?Sn ?4 U KG?>?#y?"?A}?CصO7#?PfJ?L42 ?@?Q9?P?;@>9?0s?L?P?C@?=&CG}@@E !@?=(?1=9Jm1E*`E;q?.?.A `?)&?RM`?TʾE/]c> ?R?'ZA@=K@Z ?@o^`?/րKS @J'H?3?P`@mZJL?H 4[9S `;"d? ?P`=?TG ?R^?V'?O{`?S׳H`]`A{?9ϋ>:, ?Q?Jn`?"`6EP`WO-`@?: ?#9^4"9F >v?F[@?AK7`AM;V@^ ZpR@O@1?!@@?X?`?P`?O ?GAC?1$?3m>}O@ ?;q?P`?C?6_`?Q?K\ 0@0 ?Cܾ?P-@?R#?YQ|@?Tp?}6y>=P ^[D q@?&/Km2ܠ?" QkRQkV CQS3+B?Ma9?7) Ym aр>W?Z>z@?9B[ER@?C ?\\`?DQoSǐPHB4?M`?Vf ;s`C3Q?/;5W e2 U@-wi?P`?c@?UT`6? ?E1?Hf>?-.@?G?07FFh@ `?Ty?L`>1`Ta>`/B+@2䨀?35V ?]C?Cw`[MF?Q?@`1t@?JO?`?Y?Hv@??{-(RڒW%`Srڀ=oX ?=`?Fd/?Ay@?A{?D@??ր5uM\A?BLB`)n ?PU%?U M?7W P\o\_@WJ 9 B ;o ?EG?U ?N0?Ip?Kw?G?D­@?#c@# !$A*>)< ?VP`?N+g?=?HB4?2 ?(d~@?Dm?O .Q>@\n.@]7@?R֊ ?N?D`?%M`R &<XC_`?&`UtT> Q`sP5 Tyb WZ ?M5FN@F/>?*H9"@OH@]} `?'z?M ?+F?HW@?$QU?4?Y8F>+DM?Td`?c ~@?S /:z`P0^)`!6 V6"?M`?\ ?]M`?O` E`K4F^"G!Za(lC ?V#?_0?O`A`S@MO9@?0s?AO@ ?7+?=B?H+?N9 @?G`?8?M{r@?NiJpWy9R~`CV@QK8=@55<?Da?LR ?C[?Le?T$?T&@W;\?*q[aI 6"?5g?0t ?<d?)n 4/`UV`aLr?t=0?5=K(_pW`N@S&`4bPӀ?I?Y?9Fd`UC RCM`@K ?Kՠ?\B`?F?;?Fy?8 ??e?"_ O GB^bc@X?6+@?1@BUt`?0O?Qbi`?{#?Iq>6A7?I,,?;Jտ?G%`?GjdR,`MX@(`ru`?R ?Y9H ?ל?5R@?aF,?_j?1`C53C@RĠIt@104;8+?y?:ɥrVh8`aрW`' 4`|zaE `?U`?T[?B +?9f?W_L ?[?YW?[@?YP?J˪ ?0?D/`?F@?;(?LNS/I chH iH@F`"o?P?`?P8 >8m@?F%@?V,`?L\`G@]HLJ :Ȁ``_h=`C#/ ;(?O;5?J@E+S&?:@?B% @?P@?K9`?A*?) 2F}G:,@B֊ S I.0@?M?aF,?ZØCG G @P`??>T}?+5 ?`V ?Z=?IN?0C_`H\l,"`CG F`]b<P?M?QH?@|?NG ?PlW?J, =98@?4 ?J?Po?<`?:x ?N?8h?.YO?S׳?D)c`&X?M`?;@\|Z̬@'bR?;i ?Cԭ ?@S?Bp ?9v̀?Dt?I?[6 ?dz ?]?KPȠ?LJ?Mue ? WL =9?3y?7@?\: ?F~UpQ.@@?#!*?<v@?N ?] ?a +?B@A@?"'?FT n@W>`P$)G 4W@??Oa@>cD@?W?R`;z :?^P< ?bWx?Uc`?Jm`?%E`:H?7?F/CG ?F9Ԡ?Y?2F???`?cڠ?T&<cD@-@P@?{?R:9?Ry€? N a _/`B`5 E 2܀3†?#`?V{?\J?L0`?Bs?5?Sk`929U@7?EO ?JȀ?F?=?!b?2܀?O`?G@KP ?Dʾ?E~@QKVq.T ?=0sX]oOq?H`?DıcD@?R?^(?EV3i>`D;CV@;z2@` `?0S!?B_ ?5AI٠N[T?M?c@?c ?a-?R+:?)?P[2?D@?A?B!6A?Dx ?@M/CG Q慠S @%p?. ?A?b ?g@?Qr <C=g(?8T[?@}|?6K?3 ?q@@?A@ I[Ld@O1@5c?`?@ ?/GV?I١@?M`5?2 @?_G@?ZՀ "@1q/{8`?K(q?L H?q@?`[?Q@7q 8 ?C̛?Q@?Fb+`FIGf[`?'h 3@?2 @?$`< Pq\V`;9`IV J?J4?R`.?+g?P? M A?T<N$`#†8RĠ/?@*<d?4<`?` ?PQ`U3`T4{@?)?2/B/!E ?3?R0$ ? _5Wh0|?ZԽ?D &C1M?9?35V QD?5_@Р@5["`?#!* {x`?Ԡ?M"@??E-@?`?:X?R`?[ ?K>8`?+B?BҁIӔ@\\``wYq?Gq ?d?`J ?Tj?B97B;<&X?C/@>/?AGL`?;F"@N P'@2?3`&XQRBWx;s`LW@Rg#Q (d~@?A.?0k`PDg?@@1`?G# ?53Y,,O?Pv ?LHހ?3)< ru`NiKm%"G L`?#?(^F&`N@?W^J?7?1 @?ROg`9cz P?;kOGOF?Vq?UO ?;?Km?@oIяP?Ty ?[?+5 TM?+?]A?I@<96C@PY@.?LY ?F`?1D? V@UUVH0@?P{x`?VA>A@9>S3Ҩ?4@?; 001CO]X&@cd]π?M?fZ ?a?`e?^]X`?'ZA@!M;?FP`Dg\I?Z ?`f?`@?Q$?3 ?<,?E<$Cg.3QL[Q9S|@L -ORF??4W@?"Wx9#`O/U I:t?5r&/??%~@?Wr4M0 ? $S8@%R@?4@?$E?E@?S3Q>(_ QC&`8Р?PgM?T@?1@?B[`?MS"gAWQ/+RMi`X`[ՠSQ@Sˀ5!y@?@`?7?OUn@?V?/#?FHS_"?Qi`?PcD@?C?=c> ?FV`?P.`?D`?7>S7R :Ngn94"`A*?$K ?RM`?LS?P?YT ?1eoHݠA ?E_?G9=VyR >-@?Hm?G# ?E9`?HJE?EE@?L?V]`?LR =e@L@OEKS@>1`?$ "@;=? K@?Ul@?eB?`_?G?8?宩 TMOր?&_?E?cD@?$#V`?\}O@?ba `?J}=_5@?@wo?Q됀%@Q@=G`Le U?@b?^??cP~R`Q> ?8GcL G~ ?Y ?DH?R ?5p]^3@WF3Q7~`(=@?0kU?%?-9?-@?JjQ>@TY[`SY@?Jh`?YΠ?Z#??5-@R @V:0cD@?Y@?afr?V0?I0`&@S<,?EN5}Z`L}O@?MM`?V(??c?(q@?K 5?Sr?N}?+R5 M2} =`F\`+R?>@?P?Tj?Ni?S ?[H?P?C?J\`?@#?6yLD<`> V]fDH# ]G'Z@?_q?b@?Lu>7Pmn?W-?I4@`-6ޠ={r@SM@>`?@?380 `QYR׌`9*'V_`h4\3?F7@?<<`;`?`3ֱ`T @BWx?E?N@?B?D?8h?RGV?^?SO:TU>Q=oX =HF' `?H|`?I8F/KF>qF@LaE E54c@?Cں ?Q?C C7VǠDˠ?AƠ?;0bR? ?*8Oy`Lg?5[?Yf?T?5v/?6?EA>-@NBUt`?FrN ?GbR/k@HD?/?M?WM% ?1`F@K\J8m@?B굠?Y169jeD@[?MK ?[q?@Ӏ!.?8?GN'@?S?7`N C}`? @@ O<CAp@DaB@`E4?H`?Oy`B?1k$ıPAXgOa@0Q`84FID>:Q|a\\`X8?1@@?=2[`>'?Jͮ`?XC6?Z 9 ?S@?PW?Jl ?<0`?S?_CG ?N@BkT RܠH<'`P@]Y(`YԖ`?s?WT4@?SAp@?6<?C?Iۥ? !?)@?@@?6'?Q?D0Cֱ`M R1&@RZYKo@9 @?5l`?#q`?4M?J:q?RӃ?W?Tʾ?N `?Zl ?f?a ?6`6pI"/!OY?<J?#!*?"?H?_a@?`?E,}O@< >+??' `?`?`@?6+@?)< ]-@M>H?O?b ?W~ ?Fq?W `?X@?B?A?HD8?1?`?(d~@?Z0?c!?T?0 ?A;?Z@?_ي?S@?Dؠ?1`JVFN@T@d8Wv~;`KF?, ?V,`?Z I',@?@IpL ?(݂=TXlK(??= ?%p5YAv?R?W EI[? ?@oV`[&IqKYo`[-|3%3?RUZASH?> ?H F=@,L ><`=?/`?.5<R85]ue Q`?A?LB`?: 2 2c?9`?EA9 @?W@?U) ?Psg?Jq?#9^2؎?E`?Xx?<0`<?@(`?Jd>)< y3`RπH`D`p^D" ?I` ?am ?K{#&y?E?Yʀ?I8FN @M?P?[L?tPB 05 <d_?0?>m{ ?PD?Q?>$8Xd@ZAalK\ -`D?D?X0:Vk>Q>O X?JS@> RkV[@Q@?]?Z 9 ?aE?UP@???>A?G1?S?Z??n`F@?B?^n ?RUt`? kUUM $8 A{PLe@@8 cjH Z,@EA!7EG*?9h??`?@W*@?4)>SNP?:F@?SX`?=B?FpI?RDO1NE$@?#Ҩ?=c> ? kU?Am@?P?Eb 5[M ?PcD@?N W4@[Rf`av!?D<`*ɥS`Om`?"Og`?3<(`8@?C@?U5?S?I9?&h8`Q>@0K 7`DƶV?O> 6A)@?H`?R?8`?7 ?w LO@9?O{``QH㏠C؀#`?R@`?`5 ?\?Sp@?Q% ?3ҨA?,D?M9?%c?1QD?Zd?_X?K$i l?$@?@z I#`MKS3)< ? Z@3&?FV?R=@@?1A!R<\$`KPȠ?eo?8`?Uu-`?TC(\l?= ?]I ?4 "@U8 6/?Cˀ??{?+{#A UPv ?g?K#?Q?NE$@?D_ؠ?A`?7F/=` kUt?n@T[G@J=>+HM?,J?X%?S\?3-D?1 @?3?6"?F@? Z@7>?H'?P?"?3Y@?>YO%E`@(`> @?>=?A쒠?79?'W 7V8KLmM M$ 1?BIZ`? :QO`Eb ?653X# U2 ;>F u ]V \v@ B*B@V.WJQSHCEx?<?Co?"GV?2#?Va)@?J'H,|?H à@&T(H㏠J2`@Mz$|`?Q~ ?\D?W'`?A`NX``Oɀ?@M?Z@CY@-`?i -C" 'y?6>@7#9`?_><`?c?^-?DM8>)< ?S4T?T,i)< \b T>?M?7 ?80 `?CB5.@6?M6ޠ?8#`K ``>?}?%"@U-@`J FvV?J ?Q'?P?U?Y ?WR/?@b?) ?Ye?^`?cD@>=?D=?@pI?8@Ld2&`?Wx`?e$?Yc@?#!*?J>z@?S @?6V`/3$?!`?Oܑ?4+gA ??P@?] Pt \TE ?3Ҩ?:=`D "@V`) Tw DMFh8`5?$Z?/{ ?b@?h|1@?c}`?L`> V ?PȠ?H#`>'@H?6<?PW*@96AMr@0OW^J&`?AC& ?-`??P`?. ? LzIя?H`?Ou-oX 慠?R{?Z @?VpI?29@?QPB@?[>g17?G/ ?8?8?N?@?(JDp?<] ?c7۠?h_?T;>慠?SL ?WdW#IRp Sg4+g?)#`VqL` &pI?C#/ ;Z@Ti@]<[ RߝK`#ʗ`?7q 1HPU%QF)2[`75 ?!?U5?X?Qhv`?PӀ?B} y$?0?8|`Aag T I` N]oX T-@$t>/?eo?!@5gK0F=T: Y 8m@?XV_?X6`?H"w 9?!t@?1@?>UG?UT`?U֠?F?@?+`L\qI`?0t S@dhkK~?+"dI9˂?R`?Q@? ?O?U ?U>?D+g@{x`"g?DO? ? 6A?/KXBi:?E?85-@F}YӔ@Yz@??TJ?V?UN?S,B?Q@?Cp@0{x`?5`?[|?C Zb`Qk|?C#/ ?G?A >WO`9"@?F@?6@EMY̠273@?W@?C!M;?R<> ?bZ`?\$?T[&@?T?Z2?Lq?J˪ Ab2 \rcCFd`JWC01H Q@?cD@?O?ZR])`X Ca9B[y?U?X?"kES?hHA?cZ?I>6A?9W?:0?1`?E?L6`?Qр?UC?1]^]€e^|Kz?EjK0 Z0?H`u?X`1`?$C?_8/@?V?c?g(|`?3I@?&/LB`D?.`E>!`]``_;?5]?^B?U@3XۀO`?.9 @?Ev/?LR ?SF{ ?Sֱ`?TJ?Q?9,?8z?J 0Z–FX?Aw!E*`;9`!OrS&`pI?A?+P]mS5b ?Mi?sg?2{?`qb?a?@H#?La?Q$?^K`?`F)< M>+FET8>0N X`Iϋ??Hr?F`?5g?VL?ax?Q+Z@TR Xބ<d?+.?&_>4VH ai`WH@?Р?A_b? }O@# PZb`? `?UI?Dx ?DM?KȠ+Bs?8p@?E`'zL5`< ?6y?4o@?2܀?S$`?`?XA?4o@?'B @?H ?E)?6T ?5E`?= ?RIZ`?WV8R/_r `c>T ?宩 ?UD@?X@?<Fu@RGVA쒠?H?O1 @:4?@O?s`C 3?*O?Fb+`?J\?;b?4$ "@K?'?^}`?Y,TMv<`? S!F)?=v?Z *(JU12g?1`?G'?HrI՘W^JD|`>8m@?Q?[?UR@?WQ-?R?2s?? ͠?7;6 M?3u @g T? XlWOk?-\?\?[)s?@ @?1 kE!y@?4R ?Q?A3 ?Ci?$CU5V3Ǡ3@kE)P- ?Pd?N*>W'?0{x`2C`???V>߀?FG&pI0>+g?I"@?S7Z?3l>@.?+Z@?2@W?v?H?%]QN@@QU{GA7?E ?Ra`x ?Z@?V@?M[,18l`,B`OXQJ5@3" ?-1[J^ Q `Zm@aO`Hj@?SR ?]lQ?B} U}>U?B܀?]?T ?$}?@`?]t@?_@?Q@?|2䨀?Hd@?^@`?PS8D8Cg(Р?)6A?@3?@U%2;<H @?/ր?8|`T}U]?/@"I'Dƶ? s?^?b=@@?= ?1=?XW@?]q\?_><`?[A?IB[? =V_b܀@K ?L4?+?N?Be ?) FlA Qe ;q?F ?]tc?d?UHE ?B`?/?1?"w 3m>&`1O`A`#?&?G# ?G ?A?S@?S?2'!=4@_;Eu?8=@?Rm? NB`>/?*ѷ ?&+?#y?E?Oa@?6@>-@? @>?)F ,B% @6 @I O;5?/(= +g?N ?A7?FZ?W2 ? kU]`Q$?V;?\[Fx[ dbY`XyF[@@BN5'9?:,@QX(@? ?B-? s*,@RޛMr@?R?_ ?Oڌ?2?C@?WdW?`M?\K?88F)??KF`BgXaw?9`?` ?E+C?5 ?D@;(?2@`?W?%P=8 ?4RRߝ?I@?WK ?8Xd@?S$1@?g?g$ ?_ˠ?B  [\ j[/?" >-@!,`?5Ԁ?K}(?Oޕ`?A?}O@?@&?U!y@?%[SФ`CG ? _5??Р?cD@?@@?/Si?/KX?Mz?=?3%3?Vh@?Q[Z ,D?8m@?J??@??3`?1 5%<v@?P`"_ >?U>@<Ul`:h`>)< ?<?P%V\DB_ ?a0?c ?'P_;Qi``Z `A{D '?BD?E-@K@@?SM>x \/@TOr@@?Sl?[]?EK`?`8#`GJ? ] ?L.?!NH?#VAS?T3?c$`?1`T?Dv`?TjA{;=?Rڒ?Hd@=*Ġ@h`0Z T:@[.~N N[TOAB?Eu?^?Y ?A@J@0:?Z*N?@Q@]Z`W.`?%]*`@H8`?H?L,)WX$W#/@9ϋVk>Bm?/CG @?n@?;J?Q&@?Zq?Oڌ?ID`?S͝?&<C}`!M;K(q\6`P07@;B 7 ?-?K6 ?-zKB!? Z ?2 ?ID`?Q ?0> J8m@AQD?Q3 ?Z?;( ?.9 @?M`?"GV*?Q@?Ri?=:@?X?`?"g?Vl?8HAR/R3`F^"ʗ`?E@?>M5?'?S͝?b?Uk?Ix?Rq S$1@]g"484"@PER`?RBK ?9B[WaPUq$P|z??Sˀ?[?J ?6AƠX@L[?-1KT@Tn U w Rp Ih!@@0B[|_z 6A?8STV..(Agt@D9 F7@>9 @#?0k`?N}Cˀ?Q+ ?S `?<(`TT ?d ?\ DK K0 ?A?F@??GOI#`SB 3)< E"W W@8@0 >Q>@PlW!5?3GV?] ?6?R&`?am@?X;?J9@?J %N쌀LހRM1@Fu@\Y `MLm?1,`?S @?Ns 8h?3$I`P: 0"`I@gM?Us)?a~?H ?8q@?XIC?DE SR[`Bg" ?Mq\?I&Dˠ?P7`?Ys?1`KH@Lq8T[#q`??J0?Yܧ?T @&pIE ?W?e1?B4[?L ?/`D"`? sg>`S;c@?Bڒ?Ye?<:(JLu>By€?Q ?Z?K0?A?*q!`?2?3Ǝ/`8HAN5Z>z@RSP^gnbf@a@\bKs`I߮@Xo V H1?0@>{#=B!]^?F?`$?d?R?GÀ?\E?X ?M ?@IӔ@;N@?U?BxR97R`@qb?@> ?T4{@?M?Ab&`N, IEAFԠ 5 E JJ6 7z9F ?9F ?A?N @?`s ?Z,S@?B`?*X-`1`?Cˀ?KO?S|@>+ge(c` 1UM ?CƎ?N]X`?LX??!`)~^tc!*P 2?<4?HV_8?. ?Q`?U[ -@M8?0&?5Q7PH D/p`X`[* PF 7jdE@Xp@X F+?I$?Z ?D&2ܗ@3-DAb?D9 ?d:@?[@?4t?J?Rv?R?Q@ Z@Am@=[,Y˂`TSC&`?$I`?KS?Rg?[H?P9@=3=g"`?#+"d!@@ DTO?F?Q ?H ?RK@?DYˀ3Aw<`?Ap?YӔ@?Y?S|@7+`EV?Re@??Oܑ?Q@?4VC@g_?"?Lv@?IPz 2tUe17?C7?02 ?H`?J(|`1 #i9@BQhv`H?Fx[ ?@I A7ENNSBM+2>8m@?0?:H/րJSyEE`?WÀ?\;4@I?`?C@?[;?\M@?%E`?"I ?V.?O 6GPLe@>?LJ?Lm?/[{@,e 8d~@J M6ޠ?]? ] Sֱ`5v/J#?D?T $C@|?Q?Z+Q?E1؎3%3?.@?Y?V@=JN?/KX?)>S?S`?K`?J?>}?Q@?[?Wx`+gPkU?&?REQ?;i ?=*Ġ?;\R'X3!*?KVՠ?Y٠?RX@??Oa@?V@?Mue [@b8QzKR/!P|cD@?P, ? S`UV}fUT`=n?E?` :! ?Iя?=B?]O?R;<UfCi@P#?S?ZJ@?SIn fu@[`?0W*@?G?U1?Vu@?5@??iR/?3?94?A ?F/GJa_ [HIz@?M]1 ?Qb)< Rߝace_CG Cw`?S0K`?M CQ???PlW?%-@>"`?=6ޠ? ?'y?I`?@Ӏ?0b?19`@&PgM?*H?W6`?;FUr&UIJmO @LrN["dQ`INu?Q% ?SҨT`+?Bڒ?c?W5=RHN?@?I~EE`M>?9 @?\R ?R=@@?5@?N(?#!*.9 @?RB?@&Q(Р?Ri?AR73@[37@?C`?5 ?>n , WY? =_5?Gx`?4|`?@`?Gty???9?3?Aeo?FZ?HW@?@ IFd`WhQZ@UmL?G?P\5 e P_@c=`b @[D=B?#?6y?YP?[k`Eah@V 7?,`?>v?07`?1?C@?$|`PPN@?-z-_ \c*q-R @S,BGX=@@B?Im ?9F ^L3_G@?I?fH ?_5(>`KI29'?El`?;s`?%U ?@(q@H8)#`M ^\QwI翠VlA A?CO?y ?,S?P3@?F[?.B?Rk?Fy?;,`@@2@?H?9#`Aeo) h`C&`P@S Dg2`4g?C?P?=@?FE?7OCG I+2I04H"7* 9 D P-@KJ+B?-?Ix?J84D;?(q@":ѷ ?27" V]{r@X`@ ?Ji?Z*N?` ?Z0Ac`H! @?7?9n 3=g=?67@?,C@2s Won]M`J RWxdDa0+@?U3Π?  =DQ@`?KJ?SK`?Q ?F1@?; !m@Cˀ?#Q?K{#?;5 9 UAN?B97? `X\lYNu[W@?I?]S`?Cu ?VR/B8?N ?Q8@0|A@B97P)Ƞ0k`?;&m`?=`?Uu-`?[J?S{ ?U@?Hx9AUF\`I 99`?@o?Zd?15J> 5@Q'?8?6\`?F[@?Da?5 x G'`FIETZK8?+b?MmS?^]X`?`?Qfr?AWQ8hYϋOԠEQG GPDT{`TV@iQ@?H̀?]6ޠ?U@?&'?M ?Yܧ9V?7 ?H`Ak|Da? }O@?F1@?X ?Y;@?OSi?K@?>YOH#`VDS M`!?>K`FǠ[U`0[2?M ?$`?@?DȺ@8PR\X_夠bەifPsg?>aaO[{@QC& 4G?A?LрEua@X?@@?Fb+`%]UH ?+&}M8SÈ 9翠?R?N?# ?A}?#Q8 ?@?2O>NRTr@bbd2?[< ?VXI5A)ـH?A0?->`?TE ?[?C@?C?BEQ>aaAq?"?(?Oa@GE?F?VG \0W*@-@POC?0 ?2g]<`? v̀Do@N>Ԡ?% M: ??B?W ?S@?XР?Yy?Jh`?<(`)`T(a@Jm`?,] ?.e>'`)>S?,@?F+?@B?$C?@?P?`C=g?Y?j:q?@a?`fM?c79?3 ?SF{ ?Rڀ?R}@?Bޛ8>"`?Ngn?D+ 9>SC/I A?E5VXA?8+>`C#/ ?;k?-gFNVRԅJ@I04MPI b6 ` J=?&X?9z@Xl) gI`P ?$~@J 9B[K C̛>?%c?CG}@?K8?6?E@?bf@?^@?K@\mb9X`\n.ff c Kb?#ASHUOCG 7 ? ?D>@;z?U:`?bs?TT@?Q(`?RK@:qY@DC?H:# ?9&>:? H?1ixV@Z?5Ԁ?S4T>QMue Gq IT`H,?8 E<P?P`?5M?L ?d?_3?+ ?0cD@>&`5@STu 5?A?N ?C ?M?7À?R>B?T$?E}?(à?-K@@ @W?V ?c?U-KmJW4@/CG ?BSp?Q$?Jz?E?09Fd` ?CM?IHh?N@?O?7?`' ?6 |D`@@V=@Xz( @?Ag@?3q` ?8?WeY ?[.?G#: 9 b'X Fd/@M?9`QZXY՘Se`!]^?D?KB?MD>)< Qr ;w?H%?N7??#@@5%?U#}?S7ÀQ`WGUC9^JX#`W V@X6`W&ҠP {#?4o@?$C?8 ?@ ?\?YB[?U.?Tt7 aS]?Q/?Q.1`HuOS͠B{?C}`?Td`?I$+ "&`%E`Li@?!b?ZQ ?+?'?D?Eh?B?D?Bo?"܀"`?C?DO4I`F4 4+g1$-O?:p?1eoM_5Q\\`>뻮?Ip?G ?E%-@?E?Vl?T~?EgMO8@ʗ`2c ?5E`?U?T.n@iQfr@2 ?LN?Yۥ?QG_M\Q?7?EQH@2c4E7݀?6y?6T ?'?E?:@)@8Xd@E I=  ?3`?N5?\.?Z, ?8Р?7y?Pxq?`E@?V ?0`4x B6AKJ> ?WY@?N(JUG=`?Agt@;B M?'R/?PhO ?^*?`F`?D`?QK?c?E3`_eJQ ej R9?;"dEtRF?IR~`?L`R W6# ?NO?Qv?2 =>m{ 64A(G@?1?Km`? 6T ?KS?V4?5 M@`Q`?%E`?U8 ?F~3QI4P@8݂?A?G?N$?J4J5=D/`T=A?E3`?H,?. ??w?H0@?H2? H?9z ?*@9POC +b?1ag 8W@C7? Z ?A?8 ?E@?Se?EVDeH?:x ?R3`?-nZF@a@U`P( A?C@?C3 S!@LF?% M?_HR?W?4?F?B"o?%5?P?\ ?_v?W8?VoG?T?C?Qr ?a@?S$`*0[>+@K _ T$?3l?B?J ?Gu>$A_b/`K?4? ?T "@YHhjTʾ?B֊ ?\?a`?F?7 ?QA3 bPi_W% F4 3Ap@UXK&m`?P`?:Qhv`'?WR?`r?V-@NUGE0?(N?7> "@?:@??1K`k?M\?K>N5fx\``?Fh@?R`?@? 6T "`?B3*?1 @?!}e M<O]=1@E`5!y@?T?c*?_+ ?F@?>?N ??0@1,L 3-D2k ?+Z@JN-@?`v ?T]@2Wx? {x`? S!B ?6lA ?]b<?ae ?[z?G :"?#?P`?\ ?ROg`?> ?NE$@?'W YZMK@?Eh?7 +`K`` Y>̀I@?;q?Z2`@MeHTw J,@Ed?1Ơ!`?{%%Q됀X{ 3}`?C%3?S ?P#79?51D7P ?84?P*?= D&A`@*0cD@g< Gh?{4MpI.Q>@Cq`??"πWT@?H|`?Uk?R$ ?W?S%3?L0`?B'> P PMRC7$ı2w ?G?`&A?[F?Dl ??6@?M>@??,<`%U 1I3 Bk /CG ?5c?6u@7>?Q?`:,@?<m?KqCW ?7N'@?^?GÀK$i G'`:Dˠ2?7 6E\@Zb`@/?F?O<mF?I?E@5)? e ?!,`3%3?@?TM?K 5?H?GV82tOo5~@??1?<9hH`u?(?BQ/@?`?G5U O_F<X ^`T}RQ!5?Se?B? H?6`P[Ƞ@@(9˂(q@BE~@>?Bo?S5gQTfIb C3@n@< ?@ ?OG[`[`Fl?B_ ?M?2c {#?*2QQ`I\ ?,@?N[T?K}(?G?Yb ?R$ ?A?b?V'`@*?4&?N+Q E'@IOu?4?R XPQ5?+g?/CG ?A.?Q@?8hDt5>A+2?1?Aag ?F?N@?B慠?A?Q!ހ7JVs*`?Q ?P.@TF`Jn`?6T >-@7 ?&Ԡ3t@?K9`?F#P TUAYU-O?z ?C?P ?C+@;`5@?3@(T[CQ%<+g2_ @W*@< |84>A?Kq?ZH?Iל??`?59`O Tr?23*?XJE?W`?4K5 /k?=\GMF?<1?H[?Rc ?]$ ?@6y?Sd ?`'C ?T+?MV,`X8EE`HI9@U%J7 `?=K ?(݂?27?@*?t?Aw?=`W_`F3U?N?8\lC@ E*`F`W% P0'?=v?BWx?4@?9߮@?UT`?@2 E#}{#?X?S'7?"@2oJm`@?:տ#QGF?8@0 ?J@+zNeiB]?2?>?4?F?U?4+gI=Qr +5 ?U8 ?L Gru`Q@@?D+g?0> 6V }O@?$EԀB@?P?V;?6?9.0@?G-{#0@?@?6 ?D]@EE`N?>8m@?4E?KB ? sg?+( ?UP?TG?N, ?AJ@SbcD@?(݂R_Q+bG@T}K=\={r@I@R׌`Lm?N?EVFb+`"&`?^UG?U8E>@%V?%@?CZ?}?Lv@?E+>UGP9@E8 ?9Z?9z ?N?b* ?TAk;&}@I ?;@?T5}`?:4deo?LK?Y@?GbR@6)6A?TN?Z ?SM?O ?>@?2@?6S;c@aY .ir`?@ytR*F+?,SRܠE@?_ڌ?W EIGQ [U?-n?_t?J E9`DU?7+?Uq$?J@~/@?J6h?Y ?H=@?Cԭ ?T1?7=K@ >W3t@}|EMI8F*,@E_@bV?N?4@4t?Y`?]} ??;??I,,?Lq?A@?Hd~@?Oɀ?]\?` ?-7@?LL ?E>4?9^>517?Qk|?TX?AM@GJ0[9 OibVb# J?2;<' OPqAeo>5S[`H6`?2Z`?Xe`>@OQe?!9Jd?;0?T8?4tK ``S_?%?]?V~h ?>&X\}O@^G(?23*?W+݀?^@?ec?X',`?"Og`?8`C-D@iQ@ E8`G ?3t?D`?O?0 ?A?8 I^Q`P@GN'@+"dDR@!?0*E+~@?9Ӕ@SK`M.@?VG?DaRԅA`3@?M{?X?>?)? ?1ix?V,`?M<8 ?C?]<?X'?X+?T%Z1.R$ LJR[c]`a'`By€?:@WÀWy?N@?U?&}?A9`?NB?Fy?C?%@?D+?Z?J(J388.B? 1=3ֱ`DȺ@8h>깃? >m{ RMs`3@@Sa Ru(?C1M?:`?KO>>?C" =Qk?sG@?`$?P?@N5G4`I翠I ?T<`?b@?@\a@&l?^?Y! ?A;1UM ]`?#ˀ?Z`?] ?\{K?C†D4!`S4TZiQA[Z ?+27F<@=G`F23*?0>@F}Q8@@ ?,T>JE|<?9 ?Yq?SE|<KB ?8<'`;B X?-F->t?Jd?9@>+g?F_`sA?M?H`BGV? {#?E1?>n ?R#?Nv3&BBuTǸ ^c7Zg@e Gv~?Mv?.`BϠ?@&?Q|yPE K WQck@?P? P;`RK@c0`\Z`SoQ "g?19`%R@?(4?C?#]*ĠS @?*x 3i\XZ@9b ?6AV%?WbR?U I?bR?G݀Q ?KJ?`@?A}S\Tr>4?Na ?5E`D+Pv U Q?#q`?K5 ?@K  H@0 U-@U`R@V`ZØNn ?8<'`?Qm?Hݠ1`Ff4 5D"`?7=?aӠ?`?Gpq>vBڒ?7N'@?.TkU+?1(?P:?4}CBUt`z 8'D}CY@M5?EV?%E`+g?@<BtJ4d?I9?AA!51?/K7nlQD?翠?@1 =nGG 1`Q9`bj_Z<?P ?R(?7À?0"`?3" <V\9SExTBd`Ya/{'@+@ ?Aeo?2} V]@T+ 5-@Ce`QO`Jl 9B[?6+?TA?. _eYm?;O '_3a3`Qy@@?@"`?*ѷ HW@Le ?(l?It@?@ ?DW@? >7݀U;?#`E"@@VO Z ?7bR?T >zAE*`?:}?Rh?H@5r&S}`UIh (J?0? 2 CU Tw NOR97LO@%R@ל:@?2?A??`?>1?T/p`?[,`?/Si?O@?KJ>4@K 57N`iJ2`@PY.CPsQK7`1?"GV>A?E*`?2H?"π?Xaw?Qr ?:@~?#`B@?'W ?UZ?'8m@?P4M\ Hz0H`uQX]C[?Q5`?AI`C؀? z?"?7À?HLJ ?CY@i:TNvW\Wc`@3?AӠ?K ??+ ?Sۼ@?F@?:x ?Px?<mRFSR8`u?A?P?O?>NeiQ@?=wi?5]8 W%~@GC_=gFOKV PbF7@F<,:A@?&h ?! DA \A@WDP, Z8m@LY ?PM?Q-v9Ӕ@?N_\?` ?[&m`?G`"`1aa?$3y @9OoY5?P`*Ȁ91Q?Kd?S`?5 G\EK*v ?`?CW?CĊ`?\ހ?ah@?"Og`T+gRZ@[HPRC*K9`=gFsg?!51 @PdD&?A*?J@~?1QD0"`/?!Ӡ?=?R?[?Q^`?@@1(?X@?` `+g5?Y,,?AC& QI^LJU`W [WIv̀?D@?@ ?oX ?9z ?àIJmUPD`?E?A75Ԁ?ru`?0*KWTIR`T=  ?@H+BD7?N ?] ?P}|?K4?D<`6h  M?77z 6A?FI>"`?F?F??YNu?hr`?a僀>M`H݂F~P`RCM`PqN쌀B >Q>@AI3 ?0@?H`?E?9@Y XGu;F?>1`?M?=`?&l>4?R|?\ ^`?TK?Q?Sc@?I@?'@I9PMSҨL(`A0R `VlA E*`?PH?z WPO@?KX?V`?K?T>?S8QB#P^_;\?' @, A?BY}?X@?UP?E?B&`?<?8?6'D`S%3?2c?Y?S)< ?50FlP'@1?Zе?^\V %-@5r&?Tn ?P=>g<}O@PFOwB & 9翠AI3 ?>$?R/!?G?翠LS=g0@G``K Qr ?/5E`I` Gh_W@WL"4 "@4l BSp?R`?`Z ?<(`@ƀ? V ?;@?LF ?@S!R=@@Up7B @@?@x?HJ@?!Ӡ?TG?jW?eW??cH>+G><(8?n@?AYU?;?7R/? Z@F@&?7ru`?](@?X@[2K#ں ?@@?AA!MS`S#/ ?B5.?;FR DV?9ـ?!$?Ed?[:?SG ?,u>2;F8 A]^Qu`@d[NQ ?C{ 2^J/ C@?ZJ?Z, ?D[?FV?J(J?7W ?,>6AE3G'`??? @1uHT[?@mZ?]A?Xw?S" ?Q $-_5?? 7`N?N?^5?4E7N'@8ELJCi?F[?O1(A;?A,`?EN? ?"I ?3Y@'=?A?S D?GZA@?UL֠?Qi`?UZ?:ɥD+RG'`dTdF`SsF F@Oe\]Dı?(LJ ?@ ?VoG?TASV?"`?Mv?B܀H_W Ff4 B֊ ?5?QMY(`1?SEx?Mm84Lr7`?" ?6;?R3*?J ?D@?EY#Ap@A@?T ?Q^=6ޠO @|?0@?`\Q`\I?G@?HzU@T!R>I?[?V?Lm,?8d~@?PS!?M ?5?5v/?d~@A`S%3X17?R5l`a 9:J`?]?UC ?/?4"?QRF?Z?M *@~?0@?L: ?@*?4'_4/`SM17?E@5-oX ?Rn?O?@?Fy!u%V?VR?P@H8 ?HР?+i G@E3`?(\l?Hby?5Q`&Ԡ?*q?=>8L,"kcLHހ?`?_t?Z3b`?DM?E|<?7V8?-z?Ff4 ? 1t@?Jf ?OEKH bB@aDO]/րHhS`NSB3c@?AM;?R*?N?@"_ RmEU ?Iv̀?A&@?%=?(<'`?JØ?C;c@?6/?4Z6@?!CLv`AM@k?)NuAckEU ?Fz_?K36,T=\?:,@?N&l#?WC`?V_$? @)^?B @?!5? ?L0`?\- \3 "73@?Z`?S?3u 0?4W@?W*@?19`Pg ?G?\H?2܀?+g?!@LHހ ?AeoUI X6`?N?_ڠ?TH?- JE*`?S 5[&<?DFP><`?M@?WY@?SQ?cD@!b?GÀ1`ZTR1T`UY?P`?dJ?^WK`?4"D#V`5)$If4;?Q% ?UZ?@U@M`??BAI5A`0@@>$?P^`?C;c@D!RGz?2@?Qhv`?@Q ``SM@?5Q`?F ?DW@?G @ PPN_\DgA^MV??YC]?S@?J,S@?Tˠ?K?8?14?> ?F/PhO % M>1`3y?-wi? :?0K ?=>?2䨀?@D`?Nv?K?8T[p?A?HР@^Y ?C?HP@X5@> ?' _50?I˂?ZO?/`P*8m@?=`?@o?C@3Q.0woPZ?|`?@?HTjFT ?;?Q!?bV?3ZMY(`?;&m`?T;?G`F`Z`*X?JFR䨀^i>"`>)< XE;E?Q@?Wj?[,z`?V]`4gJP`?Pv ?R`@N P=?>, -_5Y߮@:D@?\;@?Z6h%@?]?C̛?3ƎC7?%E`?Ct>@A@?A?ST?V]`?I翠+"d$+ 2πUa`Q?$#V`?0@.@?"Wx?O7- ?L>`]xZ4>M5? V ?G@?\"?OFtRXlQO`?%_@?3/@N=K@?S`?U]?Uǀ?a?`?S`$c@T?LHB4? S`I@?>(?Dz?7^J?@?B`?H ?S ?L.vAu?> ?K@I@g5`ef9r?+:Xav@uk`?Aw2`I[?4?QO@ ?3=g*3 P;?Sq`?}?@3?E_@?B@.`Ui`:@?)v̀[PȠW/ ?M*Ġ?H<?Cu ?Z ?P[2?RQ?WhzG?P@?Y ל>'?Zŝ ?VR7Bs??3$?-J@ <`?TR`?4`Dʾ?A ?Ev/U^A?X~?VsP@?:'?,L ?F=@?@RπU.Jh`9& ?)`?HPR?GM<cDv]U@HE \e@Y^+s`?,ILq`ZiנJŝ ?Rc?WL@>@?6A?Q?> '?KD?[B?\q5@?4/`XICDz?QC& Dl I'^@_7- 3Ǝ?P5?Jv??23*?R(?R1`ZTS$@?Ao?RWx"YpWV8>4?>\Qn`^`)>S?TL`?>4&?!=?.?`?H,?A@I͇ 慠?a`?]Q>@L[U MV&`58l?)F ?L Cl?%4?31M???BI ?Dƶ?R @?O`?0`?APF`d)U#}?R"?R?3ں ?MS?Rm?@ ?S0K`?`?@?NWK`?,?P?H' ?Ak|?Y?P?0 @?:?@9,N? 6A?ECAp@Tï`? ?Ns +gQO`Fp?;\?<B@??LX ?VG?Ed?2@`?hB 1?d~@I @JS@?ODbEb]V T$dU`okj`WaPJO +2?Sp@?T{`?9?IF ?T*e2 Y'! J ?Dt?Xo ?D-lVcWl?6'L /H~`^S?IFd`?LJI4=@H ?G@?A$R`h@X (D8?G?K?PO?US?Ty ?I4=@9qVh8`C ?I,?K?9?#@0|?0S!?Y?SZ0ƀ?*ѷ ?[W?U?/:@?+F?*H<0`?{?7F?Vu@?`/T?Y?"oR YלQ1DE NLF?CEx?b+`?b{?6#_c{ R1@2؎GuLNb?59`??o?Y ?`[?Oڠ?Dt?OA:?Jr ?CI@QP(`?F[?Q`?9Wp0&IhDk! ?>?Q@?E+$+  \@/Si2Sp?G?L{K?6;?S(:?UO ?J?@Y.?EǀZQc:D "`MFYP\9U[T Ob`d NA*-9?#ˀ?)&-@?9r?DeA[Z WCܾ?: ?:ŝ 7W5 Z E+`Sr?55?Eb NV,`?=`?L@ P U& >t'B5.9 E N;\?2K^?X!?c@?U@43q`PJ\@P?à?Bڒ?Ab?7 ?PmZ?[g?ARܠU8 KNir`C<@?FrN ?Z0[?L`1"`?QQ?]?^?E!y@PN:?CM@cxgMz?d{@?lD?>^HUM \A@e{X$S?$? ?Km`?Oɀ>@?=?CS@0|?WM% ?>Ba`?Р?Jϲ?1ـA*U]FI?J'??E5n@?E?1x >@EE`?h?V +?G?BOg`A@?A(?QI3 Si_Pc`1?8?6??-`Lv`Pd?B?Vw`?MK@?Dz?CU?3ֱ`5YCy ? {x`(4z% D@ ?9~B܀R;:?+`@P<?1b?E'@B P ?>@?Tų?!}Au4ˠ??>?67@?Z`?K&m`8=@KF2ܠ?Rk?1@S4TBLSc_`_`;??KX?O`?PF?Qv?R@F?2+@J `UD@Z;sXKf@?9 @?]@?`(`?QH?Nir`?Q慠?LO@?BuB'V?8'?`?F)Yo`d@Y?Y`?fsP@0Zm@?J.W?Jx a@d`"7?QF?$8 PNGlh`c<<`F-ElR@74`?W]G?KPȠQmPU%?sg?aa*ɥ>84YQ=?O?ILq`V\bDo@+s`%=4@7h?+B ?43 Ȁ!QP|W`?.`?QVO@'@!?AM@48 #?V?>vS?.1`?c@?]e@e :p?>(?%U <?7ru`?FZ ?4`?O`? 2 v?A*?*,@|?O?]s`?Nei?2?Dg?+Z@?ܑDI`??Iϋ?@.`') DO?M?Y@?Q?C?K@FC@X̀?6A?!@O`5N? V6 :P`?9ϋ?'z?Ak?8`=4?Q`?Z?S#/ ?;?3?1m@?Cȓ?X?Z%?`?^hp@?B9WR@P?Qt@?aG?Ev/0|EGV[/{?D? TcY ?KF?9,aXaw?P?[?: U>XE;:-QU_ea7Q3`?5N? 1M;?AƠ?Ci5n@3ֱ`?Ht?Rh? s?KX?< ?APWC'757q >"`?5v/?B5.?E?8`;ȠU@Mr ?Gru`?N>@?=?@W*@V UT?T=?RYVh8`?N??\2Wy?B܀?H x ?B?J˪ oX ?6?WM% ?H0 `?%p?SU?] ?T8?BQ?9`>1?V(?Vy?9ـ"&`6C@Bޛ4[5[C7 @A`?1>?>?WЀ@Y >?I?E?+`?W?A?a'?V C)< @kUAY;@O?N ?_KX?Y5??PgM?Q`?? H Fx[ 5B؎?B?@1QA " ?:0[?S{ ?CKB 2?5<KJS`G5 U8 P`=?5U !@R1`?P?VR?Qeo+gJ7bR慠GjdWU2 @eH@*ULm,?;`?$C ?K@?Vn?`+@?[ 7 ?Mr ?Fx[ ?C>宩 ?$?N, ?@D`3 v̀?4`?1?C؀?L?%];`?4#V`?Sp@?F!3)< >?5Om`U@?CG}@?NrSn W~`?5)?"w SZD"?F"?GbR?7N'@?N ?Qx-O v̀?I?J4d?Rt?Xf?DAP!@YXIC?H|`?S`?E_?:??-@?UD@?e?MZɥRr@"k,}O@><`? W<M,NT 4!]^G F QM@d e9,@^}X̀G ?2?EI?HD8!,`PdCG ?M"@?0AA!H`MoX A'?4R ?O`?Q?Sq`?\`?X[j?9 !b#y8`2/?@wo?JȀ8`[3Tj8<'`I0`G?D?Su ?M$ ?PiQ@?Ro?R?Q"?=??' `?U$?P !?~@>ru`?EE`?UԀ?O?AM;?G'`?Jv?=e@? ל?3Π?N쌀?9٠F@+`?ASH?@?9?B>A%4?=oX ?9q?@@?8x?PM?UFɀ?ל_Yx?C?Q`? 3 D3Q`B#L0`,r?FN@?H@?N ?L"?EG?R?JȀ?:?Tw?F?P6h8`?6pI@`'!?&/M@Uy6 Q:Jf 6+@"_ ?A_b?Rڒ="@`P@?G?^p@?`ˤ?<RK@Z*]T@=,?)V ?+WM[I`\R W2 G 1YU"/!?1 ?.v?$ "@?PQ`?ZE?Ma9)n MY(`M @Z 7Fx ?D3?R@F?L@?El?R ?XN?Qw?-DZU`Lz?CФ`?QvN={r@3ƎK4@?K@?F3Ǡ"`??9` ?N ?T$X?"&`Mm4Z?)Nu+?)W?>?&X?-?B3*?C/@?BV ?5v/>8m@?0?CQ?MS`?WeY ?N$`A;EE@?@?Rf@?QA!>iT_ؠF~?5E` ;@e .?@?#@T|`R?M?LCҨD~71>?Y'?On`?>1`?Im ?B3`?Mm?E~@?.?JW?G@$`LyFZy@? ?E SٷT7?&/0gMV`YʀOi0k`3Ǝ0gMG\ER1A!?LL ?`Ó?b?K`@#†8# NEd?,?3)< ?@?Rn?R_ ?>v9=`ID`DF7@?,S% 9?W%`?Z-@UM >"`?#ʗ`'CAA!?:@?M?51Qd`@]?J*N?0[2?$??@?]9^?#?7? ?5V?> ,B`?&?P%"g\.YpP*`K`??D/CG Lk(@PL`@uk`#1MB[`IS ?A`/kTBV`' <-`?1ag ?O_C ?G ?Fp/?W:?Y&?a?QƠ&`?%c+@IA?eo?A9P@WP@?N?S@R^p@A. R XxFy?`@x ?5??k?B?L ?P ?Dz0sg4<`翠(q@?=oX ?M`?3-@?뻮0|C `Fh HO;5.@?$@V`Y `?KB ?Nm{ [%c@M?3" ?Kh?Ud?T+g?A?%uIۥM+i ? =mVna(`V>߀??`?R97?K?PZ ?M(@'2k ?'z><`)?E`?CLi@A?H%#`R@D~PB\8H4?( @4 "@O`K42=_5WV1ag ?,`?" ?->?&@?3t?BIZ`*h`XQUZJP4H#`;o ?2ԅ?C+@?:@~?yB܀QK`?ES?23*Q?3$?\g@?TNG >Q>@?Bc?iH?RRm1q)~I Tj?$?Qr ?) B_ =c> ?'h?[b?c5V ?F`' R`N>2ԅSH*`?$@??aa?CI@?35V ?!慠?KB ?Un@?PV(O K>,D?C`?T?E?`46_`M[,_[B?,] #NWK`<S?`Y)%`\р?@@?-vd\QeՀEh?+?G9?`?e ?`o?S" ?G@?7?3l?kL"[K_@X# *v ?OSi?H?I\ ?W`?RM`1AK7`C-D?/??1Lzao]iB v̀9N?ں ?MM`?3Y@3I?1=?;K@F_`# E_@U`1QD?\?Y FX`H ?d/@?J `?3t?DC4}O{?6y?T? ?;@?&`?=O?8d~@?G ?]3`?Xq@35V 5?X@?T+JqQ# &7@AK7`A`JՀ@g ?B ?WY@?Y?I/`3}`?<S?V?V7@3$@]7@?GJ?7bRQ#:x ?U?_|?P7-=W$ ?_G0P^9`?'=&av\1]^6A? 0?S?a| ?aY?Y?I?A?I29?,mP^s aXSW /@'M$ +b?S ?V `?8`C" $?J`@?Dt?~@6 D@?:4?E5V^"UZ?S?Sl??@?H ?B!?FN?7!?#Q?$|`@Z K25b ? @AO@ B/?@> ?Lq?+5 ? _5?v?#Y@6AH .y ?Q?SY@??KXL BmOUTHA/?H ?XJE?B@S`WS2 ?G 7?96A?Xe`?I?(T[?Nw?I@2܀ ?J^?3C]:,S@?P?R`>? {##)< El`GO@F[cD@P_uJ?F?Uf ?OASaE@PMR3*!=?ru`?,? לX\F??9 v̀?>ڀ?D8 ?FrN ?DUBP2 >4?1}4M.@Ok-wi?&@?3Ǝ?P?R ?S/@?_?W?9=`?5$}:@?OWZA@?+?^"ڀ?[ ?P EMTK?1H?>(8 ?B?Q'7 MCG}@X\lBCM`?PW*@?Qfr?S?Y$?"73@V+@Hv@?@]7@?Hh?)#`K,_\``?7?Z`c[JF/?-_56<Q]r@\5`:TsP|zN??EO ?KJ?F`?,e ?') ?Cm?SQ?^VI ?`+`?]?aK7`?a<?G=GN`HD8B5.PiQ@Om`:-@?C`?Pv ?Ba`?Da?W?N@KmQg@?ER@?W ?3e`'݀?: ?$;`?2?G?Fh ?B@7yNei2 ?& ?I`?V?TDXۀcrڀ`o^`??PCDGTB)6;L@J6??El@?R$ ?s;@?1@?=?$I`A*Q1?553IA ?S͠?L ?I29?M?!$?<4/[{@R$ ?>, ?bN`?dQ ?aƠ?9F #c@?`?b`?"_ 6A?G@?8 ?8`+QZXP ?K ?Gru`?RAIB@^ Vz_KT@?CG ?Ul?EK`N2@F'?El?&h8`XP ?OG@?P ??3ֱ`?2/!?8x?!E*`Z!`aƠDI?J#?Uy6 ?P?9*'?>v?G? "@1E*`?>?D8?)?:D@ Z@SbPv BDQ*@I ?EA?BUt`?CV@?Na >GZA@?5`?I.0@" =?Wz?a`?U+?Q?\c?H~C5V ?1?T?F??& ?A?P`?BDc@!}?X ?R ? 3]Wd X.?=>?&'Y04P=&P^9`+2?C†3 SKD?<S?RZ@?F/?;&m`?54?$|`?A?@.` ?"/!3Ǝ_@e1c/@XL`?5?B @1ag ?D+?R ?6_?8`@M-?<@ ?9@?Nei?M>?QI3 ?jm_ ?p؀?`bB ?@?Dƶ?H# ?I@?Bπ%p6`?!5:`+?3I;2AD@`^?%4?E%>'??g@?H!@`R`?:`?\8?I`?@?Pti ?V@?I?Hݠ?CM@G@Z `Hz?;?FԠ?B7?B?@U1`R^P@?A;?/n`W`Q)^D`4ˠ? CY@'?HDT` {x`4cUaK5 ?*ɥ?ID`?T$X?]?_Yv?Q@?Glh`?U M?4ZUB;0?D@J\YD`?=@?`6?D]@Y,,NK1@?X?]D?G?:}9K`?>aa?>:R$ SG}@OUn@S@?3 ?^+?L =23†?0b?.YO/KX@B:'? '?G`?EC?;5 ?F~@Bf(.ft ZpF_?D ?I8 %c?8=@?1`?9R~`?7q BoFA@R `4_`M9?I^?R=@@?`?j.`?cj@?L6`?G?Fc-(?%4C_?Q?T]@?@Y..vB?7W ?V@?GE^ir`c LE >?Bu?@') ?.?M"@??1q!?@@?Ey`?0&?R/?6u@?1`7y9=`<`)6A?;@?#c@E3`Pdy?Z?NG(UTS`%'#??3$?KS`"π?$E?2} `Zf;BIZ`?-(IۥQl:?R54?E[ ;^PFIF BZ`?Ak?U[?84!?4#V`?1H? OeEG'"?' ?T|`Pzv ?A?%uAO@ ?Bg?No`?/[{@?It@?MIt@A@SH`pI?X?O]75 M#1M?R=@@?3Tɀ+?KF`:@~B@?C ?B_ ?E|<?Y?IJH8\l?F> LKy`LO@@O?8?<8?0*?>K`?;?C؀?K`?LB@J>z@? <`?To@?Rz>1`?4k?4ˠ?:ŝ & ?L,?UXO@[?&x[ Jx LĀENAo,?t?@?A7 `C U.S(:O_]#`X'?@Ǹ[Zf 2I >1`_G@f%( ] YלK,`?=6ޠF??BGV?>`%pLk(@1@?`HT[??Se`*@~O`?Eb ?Ǹ@;F?FK?1eoP0RB 5g>Qhv`UG`:4R Tų;`!u?D5}`?V?2HLJ 6u@M`]xkG ?$C?P|z?]hI?1^>`B"H?P' ?N|=`Q"?5?EJQl O ?#mQ#i@W2`?Ȁ?+&`>e@3P@?R`?Q } ?' ?5(Bd??f ? wV@S=bDUAԠ\5Kp` Q@Ww<3cCމ`U2T 2I?)m?Nݘ? X4 ]r:#?PB??@D.AQ ?;`?G>2K fP̠KJJb UlU4` &;6'aw`]28 7թ@>9@?8/*?C0S@D=?0f??׎I@VY;Eo?@?Ps?\W?^?K$K38@!,`?A@-@\x\0VmtK, ?Q@?[T+?4_V`>?@?B@?79`Ea`RkjceW_@?Bz?^!`?RN}?uQ)rB?A)?"@?RPn? ?4*/@?4K?J?B?2 y 4d)?2@?Pa?Xw5@?S?&J:.?A@?Wc?KOB`?2x?P?Sd>Ľ5F1k>}Kʚ@XnyRZ 4z ?@=?T?M?(}?2O @>Ԥ@)Ҡ?Dª?A~*?8C@?7#Be`/{`!rVy[ 0 ?Q ?/XSV@馧`?]"?@[G`к@L?VK?cm ?JoQVD.ް ?BxAT?@3?^?V?>>- TdUAb`?6Y?!`#[?J$.?EvRGXBЀJMSB^Q`?A ?O ?F OBi;?Ȁ?4?]?d{,?Q~?5B`@?O?Xw5@?Vo?1(R1# `)XvA8 ?U?b?Q"@?9[?Pk?I?8Z?F}?)i =??9`?2?N `?_q?[L?4M*`Q(M?U?bn% ?_7?WF?U@?KL?+?0> ?<?%Q`*FW`RD@:@>&ShZ?-G@?' ?@?N2?>h 6 OW Nj`??34p`+`?w 0̢`?F ?N#@C=?UAH?c8 ?T ?.`?W@?c?RIh,w?4z ?Z ?]c@?u?;@<`NT@Z0V- ?Gv?VPNt`DZ; K֜O Y?`?Q ?AU`1}`?6??@K`ClN{[HN@NǠG @)?,ŧ?@g +cUXjWXԈP ?0K`;cB.?>8ƀ?J7@UEu?3qb@7/S?N?@?Qp?Yn@?"@?A ?Q7?C(u`:Dm@E@T1~@!?`( ?aC?R2`?LM ?:D95#=։@ 4?3s ?LE@?_|j ?^;?5>I!|J<;$?HU`?]z`?Vï?DD@?DK?C?.do?@?G >H @7|'?K.RQʠ; ~ Na)U?!#?L?,@ISR0@@)@?.2@`7Y:?M*`?]?R)?H@?PǠ?GT@?(_?2D?Dά?)%@ &?K?Sh?A?F^,?"Q8 N? $`?N:H@Rf H${?HF>`@[~S?&SB@?! @?F'?L65_Rs@:=IKJng`RE6`P@I*8 2BD9 P6|`1k QxM<&JLX`Qqt,AX9U?T ?[4@P@cU`Nї?6LAY]B?`J@@Fe@;<R䓀S?D ?(8F#@FV?@D1`?P`?3l7o@F`@@l3dIA>)~G `-/`?E?1?SS?W}?9b?S?DT?=Ft?8n?N% ?P ?@xȴ2 `x?5K?Kx?CQE+d`?U"?BM%?F?,\ D A`Xr׀]c@?k?Ld ?5π(X9b> O~ @?@%@?O?LE@?QC?`EԀ?c`?_q?U0]?Ԥ@TR t `01[+]7*|7 Ny-! @7 Vq`CH@?K;?7}?:@?Q?Q?T ?C{5 S#T$e z?`?( ?J ?8 QM`VL*=DE4؀P`S#N7 *  ??, O@ p?>?/?H ?R@?#W/A?:W?H T@J@FZ`?b?hO?@@M%"@?DP`?80p( <#uPfU?H;?4?T&@?PS@!C`V: Y*8 ?16?&?Dm?9b0=BξI 2`?CC ?Fp?8' ?5;?A&#?K˱?E@e>r`?8?.9@?F ?Yb?Xʀ?ON@?EMJ?FUq ?G >`8?57v?@@CaKPY?+uv?Xyd ?8@Hi`?+@?=6kEEπR-2Ec@?@K? BO @Bx^@d:ŀF@?Ep8`?Cƅ?Rz?cN.?f`?Z|`?J`?L`@?4GBZ 0w~?Dx`?=bO[σN@RY[Z,?)I?V" 9uL?9rB?L `?S5 ?OX?$`?QA?` ?;O?`h`?,|@/jgU%`V BEB`@Pn@;A?;f.?MZ?PT ?@z?DL ?X ?SJ?&I`?>o ?T1~@?K?< ?V ?^~?1E'?P=?c?d 2?b?ZB?P ?Ws ?S?.{?)M?=։(N/f ?V?Z ?M+*?=;EoM PP-;@?RD?Vw@?6?5π?7Y:?Ay?RP ?K%?<ր?Ny-?T`?R@?O@?! JyQC?>?Tӕ?R`?HH?K?ED ?)i?)@>k?, ?UTb?P@FLd ?8ƀ?G(?JN.vP$`?C`?eE C`?AN?PU&~Bq /`V']~"L`?;-l<>N [D ?T/?T.K`P0&F) ?AM`?66 ȴ??3ܠ>4Da@*`>lJG?doF`I$UR \*΀ D.?H?[6 ?TK?/U@?:?T`?`!@?:W{`[ŰZ,@T@?B? ?2)?I?XA-`?AM+Q#g3?[g?h?a`?P/?U͋?JCL9@Fڛ?O+?OS{`<5?$]'?]v{?FP ??Q?7fS@Aj?/< ?3 ?Ik?P`?S?] ?V}H?6" >5P?'?Kj@?8Vv@>{?#m?=bLt S?F ?`e6 ?IA?#?M։?:zi f`/T?0?W??Qr:D?.ް ?\N!?T?DE7vJ:Du+?,I?.`D4>?N`?Ta?-e?@?6@CK?%?*WH;,Q@B1ZK`VI`?,$?& Q_lO?#?*) ?P`?\?:5g}?ENb?F@?h`?#?נS P& ?K\[?U@?M.q ?On?.ۀPǠP1KP`UFh`?L?TV?O`?Yv?^ET?=k@UV?y?G?Fلcv:A@;NFrH?0_{ ?Z?IMA}`?BE6`?? 4]'PK`A;`Yy`J?JJ?Q:?Oˌ?^u[?a`?49 [7@_h8Lkk2f`I]`&N?XD`?Y B.[Qq@Rs@NM G`^/jgC[9*8 03m`6#;@'j?1@?-%?,@?FHX(Vv@P)?6{?bJeX=?H_-@?YX@?Y'}2 >c`x?L`?PDvBM@?Nd?`a@?^r`?S|@?*k! /@?#;`PSb ?%&@?Y) ?[?R?G`?G}?@?P@?Ai`Bi;Q WaJ2?N.1L?K\[?Z\d?AMo`?/>뢠LC?#މ`7P~PmPyMib`?(?]o?Zt?#`F! `4z?AP?W_?Pz9@Ay=%?VZ?bY?U?;׳`?R(?a3?Y ?Ps?[h?Y ?@_?2J?*L>kQfUI@?a??_zBb P(?)ǀ4"6@[OB`R ?K@?Wu 6@]ޠNV? ?<'@Cqb@Sy@!gKG`?@?TV@?X ?Px `/]N@Q=? ?GOg G+aLƿ?O-?U@?:A?D=m7a@H[P@?A#$eMf ?N|?a?T*f?60T?p QuF>A-[ݴ@X@>2@@k| ٻ?X?_W?;N+7?EH@?]r?\E?D>`=} ,?Gsl`?H?3`?@6?S|@?W4`?CO-?`?=} ?6b?L@?U ?Eo!@:^Wk<I@?XK?]Ј>N$(?Pw~V `?!N?b)?\ /EX|!ŀ?9,fDT?׎?T9"@?`M`?M4y;0>`?DA?=%@?I'?Wr?19F @/S.`9F b@cG??as]?^b?<- 4y=/`N@R6I`?@?B?0? 6?Ordo?R{ ?3ܠI[?%g}?K}?2;c! CG pPf_+?7թ@?<N$ @E ?A?-b2L`?O?^ր`?K1R6;> ,\ I`E\?;N?K+= ?)@5U 60lGSb 5p8`?N@?P@fS@W-Y@?++= ?N @?o?H}@?Y ?4:?I?W"?@&Ha`K(?6x_?O%@?,70?CՀ?1 0`&> ?@ZA:??C;?2 ?Db?K5"-2?3?2?Qt?Z`(жVhK%S0pW@I( @To* ^GK ?=?2FM?H ?S?ZX?U<8_S>>U?C @Q ?%7v?Bt&-@?1I?T٠?JyQ=@RZ G@7@Q"QJC?H`?CP: Qj\@??T J ?`] ?[7?1KNV1PC)WF^,@[`??@- Re`H `?R33?` ?IZ? :@@u@L]L|? ?2½ ?Ԥ@? /t O[`fwbCM`?:?w?V7B=`]~`HZ5t I;?1R?Px 03STQwuHܸ`/jg?&ݠ?FZ?Z@?V 7`1?KU?Tt?+T.[ P+ )0` Qq`^XnKn>=?fS@?ED?G`!d?)|?@ <@?@";c$`?7^`?(V8I]Cg``2@?E*\?BJ?AMo`?Eջ20/?K7>/TV~ ?AoE*s?@b`?M`5??^`?d0?J^SKXҀAf@)`R11NfcRKEo?Y?Td@7Ԡ/ Y?P?FM FF) ?%`?b"?\(y`?ȴ7Ȑ Hܸ`P+ ?0?S~?7T@PŊW8{E>5YـXT*S@d@\ DG?ZH@?[@?0Gw2o@E/Y]`OJ ?IL?Q*?.R#Hж_&`K?_C?QSCR 43 )ɕ Lؠ?EFzNr`Y)`XF??R?S%?]5`?\6@?%9`?Gn ?[w?Y@??Kv?.[`Pt`Eր?3P@?Iʬ?MQ^E΀?@ ?%Z}Mjy?J`?8M3( 7D5?`?;| ?GZQ`?K ?C8?A,`EV2\"+ >I@B ?b?JGD&?A% `?S6?;+= ?Qb@?Vx CU`S`w?B?O;CVaRAx FLM`?Gw ?1Q`NJ _vi@?".J`?D;Q = 2?^?]6 1}v`?Zw?LpNX` `N@K@iD,\_1@8?BJc} ZXAޛFנ^5N?;f.A6XU >9@Ii:#?A3?41 >W`xP@F*@?Y?@?^=?G[h?9K`E)?.do?P?O81?E=Pؤ ?%}Q?3R BJ?C?^??E8`Mk@P( ?M?RAd`?" \:@?Du+?]g@?SK. ".J`)B;?B`?W\?[-?/GyG-?-Z`<`ZCՀR t? p? ? @ A# ??J ?Z?SԶ?FQ?B@?.?>a;8/*>5v ٻ؏8Az0G?>0 ?NƬ?T@?%ր?U?Y!?M@?뢠2?J?A&DԤ@?I;>Nl6oL`Y.Sm=z`?BC?BH|K ?V6?^@뢠]޹`XQ D#MR:Pz?T?b|?C@!?<@|2`UR4UR CW/Ԥ@' wFBX`2E(-?Q?C6%?3D$X@UXOa6=``@?3р?[Z`?Qp] ?3CRI`>?R@?> QP@]A?U`?Wt?AN*`PO=?>- ?P`?T]'?Z`?@GwC' @FYW ?7?_?G4`S`]nנS8+ ? 4@?fS@?Al?JC?8{7N!`Q=Ԁ?P?: GF,|@?9@K@EbQ7HYDGM@?Wo?df?J~+?1 ??@?B+?;R$?!?Q@?QD( ?>J=`5jQ@B!1 ?> `?*H3@??Me?G >隀G^`?&W`?L?&d@Ls@>b@?c`8K/s"6(ZA\t`L,?Ue?_Qj\@?B ?Hɀ?@(M Zzi PoS/@Wg`?5 ?\z?O ?t 5ɹG7c>v?Qt/ ?U?V}H?Nq?*`?2L`?ՄL@P&`[?E?[%?c#V?T]@<`C(I@E`?T-@?c5`?Z ?!߳@XY癀?7$@?]@?T'fS@D?MP@?aO?O_} .ؠF͂WDH5@?L?G?C{5 ?S7`?u`N 8>隀A)j ?PP?W`2xXa`P?#?=r@VSXG@PBLA F @$s Vd* ^o :q)0`L `-˟@?V`?[H* %%]^x U-@ET@a@?^!?^(;j@Q(`?G`?K ? `Qt*@?]@?_m?Gl(k T\g`PIn@PI#<?Ei?='?(8?5{"?B?? ?p`9 Gu)e)`>e@[[UkO3뢠4 ?I?\w?c`U< Y?@>O` +`?5 ?#6 ?%;?8]`6! `O P?H?b?a@?YV?9M%DK? !W?R?Q@%oX7Z`JO@?W?b?RL`>`?4- ?Slx?Nu>H| FA`X\5 Na)?B ?)@?;9?:?5<?]"o`?c]v?'P~P73[?Ca?Z<?9|?`>a?jgBH|?9( @?(V?%t ?V|?SK. GD|[_E6^?S?Z2?'QhT6Q}`.`?P ?Q/k0@QD <`E, V@G?Rn?W3G^``P3A8H+`?C?Zo?}QY^ Sމ`;??== =.q _WR?V?aG(?QuF?(3`I0`X7 Nb@CnTTc` ?K?D:9C ? ?P0?Lp@I0`Kh]`:8@J7\X`M1 ?5&@>ŽX`?;@?Fj.`?8lJP7 _S(@?("?V?_?Va?A €?P^`?X -:\/XO{`?@?Y?06?U?^!?+ՄVϱS2?@/t ?Xډ?PE?3fw?H|?.8ƀ?K`?U(?NǠ?2[?D:?YOT?SXB a}v``4?8QEp Hu?0]L@? ? ?Tz@?:`_d`\@@1 `:`H >罥?<PP@?E?]M ?W`?Ddˠٻ4@?%%?5`E*`\ @X@<0iNxGy?Y_@?Sw6(IA$ C+A/F&Oz)m?P?M։?.ۀԤ@?;I@?GFMV`DҠ?T?\ʑ?H ?> ?J1G@?8U`?9?RW9?R> ?QU?P4]$'?L ?:PC/@?@?`?L@?<R@N]&`L`Cމ`?OΠ?MUa;9Kr0@SbNFRnQI@?1߳@`_v`S`?C ?"q*  F|`ebu@qb@0+`AW@?2@5Y_8`W?@& ?Y4 #뢠P n?BK?U?? @TR *x:@?@*`?Ia?Mޠ?Nv ?JJb ?.9@? D_6|`?/ Y?R?S@7@`Xba`Gթ@?G@?P`?W1@?Z[?7s`+A?;>Jo~c"@F ?Sg?!`R[ )J?OO?BRO6x +`?Kz?R ?GF?7a?".J`*UL= @A `IrBIA$ ڛi@N#" ?YT?R+@1>U'I3? ό?K@?Q{`?X@?Vyv`?,5=?=DE?H? ?4@UFY0p`O\`E ?0 ?0?:`?MFt?JA@?N?J'?"H|?Tԭ`?P`?H^@?L @RPWҠRu?Nt@?_M?:A?7`?[?L `J&\P|7u@?=!W?TX?]\I@?T?.@@?@X?4@`VK P?CQ?+d`1AoE]fT3?5<G^ ]I1 ?5 ̠?Eo?OTG!?I+O?&z3s ,(y`Ju`Xq4`P)>I@?$a@6J0? l?& TZmaA@Qoр1~@:4@@'T@BvSɠUBcƀ?J@?\[ ?b=`?``?AJAF3G@K9m?H`?`e|?AerRb1,`?T@?J ?Up ?])@?W1@?P1@?6v0 Tc`S > 47?Et ?D?G=@?WM?BOrR@? ?[ ?[: ?1R*z?@@?T?V?+@T@U?@?PC?4D~1{G(&o@M3@Rr@Y4\[;Tl ?TC?*^Nm`V[qVŀUKZ;M?<?Tά?W@?@KW`GH?=%?Hz{?P8/?Y ?BMO ?P 6T?$B ?T?Ok~?G?E@?(pJ`6[Ty?5?ZY`?[?H`+<.R6|KmҀ@?L>N%%NǠ?"f`?3މ`Eظ?AW@.2@8?ALWH|?+&`?/c`@n@Z@]ظJ 3W(@aeUQ0`U?+`?L/?U!?N1"?FY?L@|?K`R)E^? c+_/wGL ^,9U90`I`ˠT @WR1>l>I]@`?9( @?T0?R?Cр4N w?@`DP@?T<@?ed|?`_5@?\?^3?FiN*Nv?w >1E#@>?1ŀ?T @?[e@?KOB`?,@?EMJ?Q|?F@;`B%?Ol?Sc1;NT@?`w ?RH?[@?G`B䓀_ e`[`daCM]?+I@?b 4 2C%`?1S?W?BX`B|?']? [`OI? <`?IgX@X6C^?Cfw?Ss?]N@5?7??Q>[ݴ@^H,ŧ@C@@pSU`Wg`?3i?V8>`I1KՄTӕ?4r@?W+a?P @?K˱?Ju`?' w>k?:2^?F~ ?1<`B`Jѻ?2^Q`?U >ɕ ZOf %!`D:95?T`?Qx ?:N?D@`?CʀEVUZ`w ?Fy=P@T U J`?E}Q?S'(?=?4 :k! ?DD ?@QJOr H?3@?Fݠ?M@?P7?W΀?[ 0]??)i?d?\B?I@?Tߗ?M$?J P>`,-Z,@+?%>Ԥ@?!ŀ?#" ?L0?Y},?O 2L*@E_?Se`?]?% ̠G?8?R7?[@?V=@??4:lV%\NGY:XZDa@Fi?`RS@?+?Z\@?[;FUq b`P BT`?4@?D`XT?N?6@RS>Pb5?6A?a?Q3]C`fǁ]mKB1U9X7Z`W?CH@?SD;@Cr?7ߧՄ?T'?T@?DL ?M\?YaW`?St?;I@9m;<>G /s"?Q* ?eG?T,R)G$@?:W7v?7 ?EK*k! J V>MoR#0h6>x@4ά?6 ?Ti)@?bP@?\O ?G?O<`?C^ 7q=?)?<?n) ?CBr?B?IOT?L)?J?RҀ`Xsc@?E4/?L0`?Q8 ?1IH`0`A @T?y?W??A?>Cb @ , ?>v?TR?H2q?1{G2r@P@4@?9֮`%N}G?3J?PQ?H\`?,f8X7a@?0EH?D&?=>?EHBLuAG HS0?K̠?c?WA@R^FyK@V ?%C?BP L?/>@?]7@?;@71?I`Db4?R?ARXSka`JR $s ?G?KB`T 1g?4?K?@`I:R̀EK Kn?Cjՠ?\?;R'?E\1k`6 ̠S[Y= F2`RS=@F ?,`?Q ?Uq?Uٍ?W@?C&'?/>@PKBxD?Cǝ`?YUU?KC@?5.? )CP@1}v`?+KZEc ?3-?8Vv@٦`M)TD&?C >?_F?a\+?5?#~{`?Hp?,?9!|?R \?K?B?*ܦP%[S`N&> DVQؚ5%9@.0 9>?JN?6.%+K ?9@c`H4?@\4?Rb#`?"?C&?\F`?LAn.@(_1?4N@U ?8e@?8`Kj@?Cg`?[?=^x ?E?Ut <*@YQ8 F?i R!]OHVv@?R0y@?aR?S &" ?wY0A Vu`FY?<{n@;nR`F*@QAW`@d@^ >9@?D!?%`6T\ T' >Ԥ@P`HF?NU'?I#P.`KK P}Vl.`?0$> [c?UR4?:6 ?N?@[`?:  ?EX?:x:@$ @@Z@QUIՖO@U] ??S?-:@?뢠 CՀ&v0 ?Am?G,MظB`?$GR?.9@4Խ5$RoL`.do2b1p] 4wY'L ?"qL Y%g}?=x?R?ZЀ7Fנ?E`?Ck?k?D\ ?9F@V8W@?@_{ ?:Jb Qd 6f ?-HZ*?Dª?VWoV잀Dڮ@?P^?R{O`P!@?Dڮ@?^E@?U, ? , ?+[D >`[TGRP@fS@G2`S#0=? I@;Մ$r@V]4?Q"@?P?M?BvT4p``?B&`M>?Y=?GFU)E`L{n@?0AJ.Z@G2`H|C*]<c@X`3s 6iH? <`?-tL?F?=:DVZH3@S 6bNpq p?Aǯ=%S/X ?MH?5``"x?FN?GNOL;YXBP ?0"[?8e@?D8 ?B@ !W6mtEz^]}?E:@?^㙠?C:`??:`3^\Y) ?(?"b B!1 ;@KŠV`>劉?RQ?9:`?% ? YI W~4vIm@>?4w@RU O@?BY?G?!נ?%t {QRKq?N\?PF`@AޛDz/jgM O=B>2?Fh`?G/?H†?]$ ?[f ?3)W [D ?'j?2b?DL ?.'O ?N=$@?MMS?'$@?2- ?8`?T@T{W4 ?G54?Fh`?O4??a???GL ?D?O?S ?FA?R?1?FG@?HR`?(g TB ``M$a;7FI~D`B>܁@LG U[YL=?A? 2Ik;?*l?'.?:@?PZ?OS ULT_ O{`?A"?5oNI&"_`?J&\BWmk5"`?M8D?Es?B!?IR?A2UV\1`Lѩ`?7 ?Ho ?;?7]?B!1  Y\0$?,`1`4:9S_?Y%`?D&? ?6ݠ?2?1 +B?6?@h6GG NP<  5#@?~ ?D??&H|4`? ?>?J?XM?S& ?J@?Lj=N kj?]?a?V0@?T@?R-?P&-?U?Q@?B@?D ? {?R[?P: OJU? @?07q=w@]L@bT8e?LS @?F?4`@l`8}@?4?E?@ ?!F?@2?F*@EqOS?9e)`?XO]?SXG@Խ5XV)< ?@c?RҐ??S?DH|?*`=@VL݀?e0P3 ,i@?K?Q$?@J?&B{TJD4/O``?G[h?-ZNVz?Q?An.@?߳@?4Tl ?#J0cF 8?Tj@?^w?7Ȑ J?1 ?He@?H]>)>`-%=} ?8I]?\?^h̀?Tq?@`1Mo` `?SW?]B?D"6@U0S9?JA@?WA?>R%H1`?%Zc?H>?DV?N}?\`@?Nm+@5"1p] WVv0 7FT@*s?AD aV9x:@?G|'?0pI9 DI?2u?L?1 Hs?,`?W^6W`b=LEh`?[Z,?[?$S3*C?S#V?Y?A?ؠ?@?G?K(?M @?2ؑJ`X N?&[?1`?}Q?AMo`49 `\]M kVeR@ؠ;D&v0 ?K˱?M`?L|@?GF(u`ALW2`@0uOs" ~2-!`?ʠ$a@PEH?U@?JyQBԀ?S$n@?Q 2\"/<  OzUa| QVHny?1 ?P\?Ep?C ?T?T=?G@ ?/w Bͧ`SC?Y`?dT&@?JDO"]AMo`?Js܀?G 'A'1$NBg ?1t?Y`?V ???2@?7/?5)?>?JF`?3Nt`R!U`>I@?1@B@O&PǠA?`[??A?Z˺?MP+@W}QR> H7 =m,7Di?/c`?R`?> # x:@?W\?F@N0 O\`?!?UL?TK?*`?I ?bQ~?PH`X) S?LU: ?UT@?0A1 Fi;k`>a;>a;4 a7a@ ?=@?Fr?E?Nۀ?K?/`%p8O?)3:Scb bG`;67 B?/TUQ߀?7?P3F ?%."X`?D3 ?`Tz@F?%F? , ?B?QI`?:?w?ԀaK =?R2@?LVQEߎBn? OTES@THT\ZB W@ @?D?D2 ?V! `?b0?Z?;?&'>J F?N ?Z?1@Q-< ;d`?J?GNO?'a?3m@`?5?O3?5`?!?M`?V6U`?HR1r5Zc?X@ !`?, D`T48LzVGsl`9 ?"@ WP[`l? 0`P Q?5B`@?"|?>0 ?M?D2 ?"4#`Q Sjՠ4a@?X?Hz{QFWWFA$?F4@?V2`?Qf?L?W?UF"C?9?vAg++= ?Q`?SI$UC9@U@7I";cH{WXG_Ơ";c;?@=?aC?_@?I?C`?.PUp 3?; ?ʠ$5?@J?I%@)?%@1`? CՀ%7v?@D?87 ;[D ? ?LM`?Eq/NA4T`?7@??\`?2.J`4`YZw AiР5-%?"H|Rd YZ? 4`7-? ,f?P?O0?½  ?E?KgE>2^JT;UEP?En@?B٩ CjՠRM D&-Z?19ɀ:?_} ?1*?B@ؠ?)ǀ?:ѻK >Ȁ?*H3@Ma`7?Pa?SA`?P?Gw ?)֮`Dj@[Z`R#?5ɹTl &F) ?Xo?Xj?'O Մ>їJܦ?D*?V?D?Q?ZZ.uP@?Zf`?aAQR^F ?Qa ?\?*`?@?=9[`?>?J>``?E>?+I@>U?L+?V(>UT`Fb`?/@?K"@?Sg?>6.%?|@~ SSD#`?O?SU?H??EJIao `Pg G?=7?E)?H7? YV_Vh`?#?=.q ?^ ?,{n@)=F{!#?OCOP<`J>v?J֠?E< `M`\T; 6??HN`Aנ`T~r@ ٻ(?$X?1I0pCz67 ?,nU?B䓀?B( ?FN?J?7K=#? ?*6M[1EpNX H C+X C<?C#?7^`?CC ?A?>9#ڛ?6L?=m?;@?:?; ?Z&`?`C?T?@U`bʧMud AàJ( ?Jp@?U-@+@?9,?-G@0@?< @?X??81:Ģ?TG?YM%Q^7 67 @#r`Z@Q@?6A`?QO?A 9f@@"?v?`?C!?P@w~aZq"?^ ?V3?WՀBX@?Lѩ`?M KP*t&rB&@7@[jcz@T@)?$h?C+?F)?3 &A`F杠;5?Cg`?C- @&`[-} "?@+r`??I-~`?G @?D6`?TE ?T?4 aHT.A?294?a;?G?_b7?SY%.2 \83`=`OJZ$.C@C?E|:@?Go?Cw?O,`?W?Vh`?D`?LwY4 `D T:`,jUAs\YOSG?-M ?+ ?IL?T&?2 `1>????CC HQoE?S`?a@?\2@?` ?E&@UkHܸ`'L B`?E ̠?W[ I) ?9?T?W ?R ?>隀?/?4 H [E%?1t?("?I?JݽJx:@^@V@?T*f?N&0T ?-l8G.A?I?LKt_ a\y A^@?O?TF PRb?Z ?bJe?<KP`>zD`OUùQ/kSH ?Fd@?Qh ?1?2d?B+?"X`?'1?G?G??@?%7v7?:`>%?6!_{ (`?V ?g@?^x?2u?FQ?V ?JD.0 K 4N?@s ?:UL?A?U?S2?B? `ˠJCՀC뢠?7€?wYH 3?O??[`?%?MG?WQ?H5MJ?PZ@4*k! PEH2I?)@Cm`?@ ?L @Z>```p3À?6S?J$.?J6,D<>2^?EMJ?Ft@IT`?B_h?R?H?^(?_iP?;`?)?6?/-G@?N6?Vݠ?O?[M?aA@?Y?R}?C8ހX^Q`"?@?O `?bn% ?^|s@? A!`@ @'a?J?RC@?J??Q?@uOSyZF -@?SK?GOLuQ*G9R)?P 9KU?]B?eG?jV`I%@K*`V%G$@?7ʿ?M*`?W?Sy#P)0Ġ?CC?,`?"?8?-o?C?1DJ,@GӀ?0?$K6@?M@?d ?X`EL />2?; ?5`&q`@?Kp?L-sK@DB ?(p?C<@?H"?15@=U?R?kjNK?GA?a̙ ?[?& ? `ˠMp`?$ ?Pơ?b n+r`A?T;?Z`Utbh>29?BM?Ij? 3N- ?EJ?0Z@?"@? @`U@?A8 ?4 @5v?(p?MF?Jt?0`T@?0?90`?0EH?YC Gd?$?+$#`?Ex?Pm`" KH+[D ?@*`?= @?>?MC.@?@f0l7?&,?+ ?D?HH?J?L- T(7 O?}@?Far#PMx?<?L`RR@?DK11 ZY l`?Q݄`Bzb]W!<(y`FwY?UZ?PP3 ?A?Fp>H?'h@?S ]SSW ?V?S`?cJ`?YH,V ? ?E5B@ؠ?G54?K@EXS=@/*?Ls@?M,B@?7 ?M-Y?Q . TC@?L/?\(y`?S;@?50??j?H ?T'?+I@Sc1Ud%@?\\?cm?P-E@FiYw@?F^,?B.?0RbCSIm@?QuF?UW@Pm X79?6=m?9\n?`?G?H > `J  =m?@?C?4u+5P@Eջ?1%xFA?'w ?+*o~?HlJ?F4@@T>4hCgJ@?B?Q!:`5X/1?X&?b5b?YK?B4>Ԥ@0p06??Iho?Yzr`?X>?B%>Ȁ@ T]'>'O?F^,?,G @M(@8/?X8q?\i D K}?O[@?bl``#[[1>GH8}?I'!dNA?5J?NP?UC?a ?CS[D`UUz`?7?\G@?e`?`'@?9T 0?@?>@@.Q;`/?A* +$F4@:^$?E@?T6g?@p>%?)֮`? `?1?S ?Y?S ?@F`5vP9B=`?Q??_ ?PF"K T 5*\?S=@?N<F3[FW@?41~@?>;h]`D>`?8ɀ, WQgC-Q B?4<?HC?T@?SW/?-' %&@?=i`?*) U9P?` @?e?`ֻ ?Pq? ?'w ?H!@?C?R)`?er?ct`?C@+Rڠ`?Ӡ ̢`?V8 a;Oz>ۀ?o?U?Ve ,>N?-ظ?],?Q8 OW\?/jg?XV@?0@J_`C8T3Qe?&Ka^+!4 ?IIߠ?SD?\%?:6`UBM8D? ?B?L;@?U@?`)@?Z<13s Hg >aԤ@?p? `HY>wY?U?@Lc@?M&?DMʠV9E@?@8/?T\ ?7z`U\] SܠOW HW ?I?A ? ?"kj?-`Dx`Jv `?A6@?Wʿ:.LI8`H}?? 9֮`1Q?J=`N%`` WUuF[Dٖ9`;q@@>( ?F?Sމ`?O_`5{" ?1 ?F??=Z`?'Ce`?3މ`Ez `Q>'@?F?X?R?Uw܀?S ?r`?B}Jn`K%K>Z`E`?Q?V ?N@?RdGa?=tL+*/ ?T?Q@V 7 B -[`%?Q1UA4T`@p?1k ?LP`?(r ?J ?[̀?QҚ?s"DvB*@?T;?RG?*Y *,@M3?SK?$U_F;>3뢠<@2YL@R74 ?<`?&mt?6?Q`?fr@?aiOR?TI?X?@m?{`X 5X4?[@?FTY>Y?Hr׀?IᘠR^3Q`Sp@Bv:[ ThdXbT~DD@?1&@L V V8%c@?Sk?T3?DA?I@?\X;l? @?Nŕ@?AY:^F Ec 2?4nP T06b?S~{`?V 1ꝀQ E`'h@?I2?X1Y?O?C?C?<0?Or?UTb?A71}`ML?e?3qb@?G?>Ƭ??DҠY~D`;2@_: ^E\CZv E 9`;n:aH [[U}Q @A}`V LwU^8 `?zI?0p?K;`3р20y@F\5 `?V?C1?DG?Pa?6Q294VS`o B@?Bq ???5*\?!?QN?by?T u'O;K S|LWvTH+/?Ga@?F ?QU ?U ?R)?\ ?RQ"1~@?dbV?Wo`EQ`OSI ?6J>V>=$@?5i?P@I5"`'D Tl`X W ?_h`?`Ӻ?1Q? ?JP?\e?R[?X?Sb?D? (?H?TE?5P5uJË 1? p7A';@,`@,ŧGu2Y"M@W*Z˺? /t ?J1݄`JG6`?#;@>Ԥ@?K*`?OC?+ *OU@TI@>?X`E&@??@?I^1v?"]T~?De?XPu`2?@.k?PȀ?K ĀAZ2`aqF?5? ?#A[@?#`?A@?P&?)v@9^?4BuvI'Q@DV?Df?Khw ?:6`?O6?)?p"t&L9@?C ?b`I@f~ ]X ?yDIG1@<*@2H|=L>?G?L[Ơ)R@V,JJ??1XY?4?D_?A7?;Մ?M?N > @J(W;`\eK+= @ W?F&?e-`?W\&[?4{? ٻJW?@0?g(?g ?P?*UL?L?D1F?B@?[X?Ni?4?PI?U!?Mnנ?:T@?w ?-Z@O#t`7?M ?O5X4OA`@h6?Dh?Ez `?A ?K:F`[ @?Uxh >>N$ ?T ?SS]?B`?Bo?3 ?D, ?[Š?aZ?`i ?Z`?W @?Tc`2O @U? @?E? ٻ?NN ?S?Eɹ?RGHb'wV1?J3v?T ?@$`G#GR`?F@?B=4:@DdSNt`RrUCWMRAyA!B`3E?6`[)W>{M1 ? , 9pGZ@FP?T'`1er a!7y/`@i??-HE5G C(@@?Nf?WF@?"Gh@G$@P7L5p8`GP-E@??Mw`?Q-?U+@?E@J[Zɀ_iZl@>2^?Pm?cI?D!N)~0 @90`QP?&9?[ ?Yـ?F*`?- a;4w@3b %?3$?Di)@?O ?N0 ?B?Jh@?U}Q?E0`IR`VYC N"x?:A@?6˜`?"ؑx:@?M&?X@?]S?TM߀?V ``B?̤`?Q[@@ 6@?^?T3^ 2`G*J`Q@?Qh?a ?e?b?U`1* R@??P[`?JIJ?V@?_B@?Z ?LhQ7aL`>v4?X`?Sh?DI9m @C9@WP@ M`R7H/$@m+@BPx l?P4]?7 E Od`R4E\ ?Gz`?P; Q\`8ж'?Gs`?D@f?B/`?Z ?@0aQ@hU@?<`?Q?Fk@+`2L`$>?3?U??WX@?M?P@?%րR?.?PR"HSk?E+SQ,B?W/MWLR?G)?T? >oZ $?B ?H %`?X(?R6z ?; ?=,B@?Q?H_1A ? ̠?V?S68:>a?)%@?R[ ?Rw?Jc} ?N`?)i =z`?4`?I!|>vF&D !`?3W/?6ݠsE@' ?Vn`?aF?F#@TbX~ IB;@> ?CQ?5`!C`/r#_`?B-?AàBuL]?5MJ?K&`:v `CA[@?Q@?ZT5?H*?,=(`Ge;?9tq?K?z2D6 ?7v?S ?O `(I]?5xV߅`O#t`9s?A`?=DE?2\"=U_q^`*; ?5)7.?J3v?f?\8:x:@>8?G-xJDQ@J; %D ?(X0@4@v?5Ԥ@:=]nW?B@ؠ?L} ->?"?F`[? @`I@9M%?R@?Tx 8P Cz/Gy?@s ?F[>劉?L [YCM;@]?X/@?`@?P@?"g D@R  ?V%?Q` ~ @?-?WM?F >@?4?Kf B_`PZ[@Z T"N GtIB;2FTZ9v;@CUȢ`C??t ?Ej?Q$?Qv^?Q ?N3Q`F#@e%c5`M̶?U?;<Cqb@Sc`?1C`?Gv:`?!g?Q0`?9H ?P?[`?4CZv ?@@?@p]T@cTF%kNh SnH`?4- ?Yt ?b-?_'F`??-G@נ?Q|?U<_`?22 (yd GfS@YRv?/?M??+ wY?PI?Tv@%FW!G?CQ?<< @PY`Ke>?2 @ P:^EV ?+ ?C9@K@[}@?-S?Nŕ@H'P`[? Մ. A\` >N?[?]B8r׀Q?$n?@r ?(7 ?-?뢠$`8U`ATSc`?LM`?[y@?!9ɀNRH*? 2?R ?Z+?T?Gs`?)\n; V XI]?K# ?D?4 DAT aK`?R?V,?DٖCGӀ?Ý? ( ?:?w?R}?"Q8 G+a?B?Qo15@L=6?Ce`?I'?H@?T?Z?0`M-AgG`Lp?0 W? )Q ; ?G ?UC?`\?SH`HvMm ?B?WL?R&`?6Z?4`?7 N;c b^V`Va{`\>T@?R1?X1@?Uz7sl`?X0B ?a=?V?Th?ABAn?(I]?S?Qт?SO ?ZZ?W0K@?S@?PV4?$n*?JU@?T?7q=CՀ? ?3:`?H ?4@Q[-Si@>?Wt@?KF|`0:^?RM<@?>k?Q׃?Q ?8e@?$Š?X|?\ `'|'I?N@?\5 ?Oz?6p%`G`?MN?I5P`e(@Iۀ?QL?08/F@`?NR?TvB?Iǀ?JR ?R7?AӱHlJ[+= W`2Sg?@ˊ?BM@?&d@GJaN@?"%?C`?O`?Qh4@HM?1`?Si?Y&f?U?2^?Rcƀ?PpJ&\X1 2^?V|`?K ?<$?T?U2?Q ?S*?-g36@?QP)?QàDtI?(c`?Lp?O+`8]X·O=CD.8? EH?&mtC"@?GjXpQ@0`L2L@OS{`?0??c?8yd ?K?[`C9@?Hm?Wc?QC?T{?N7 ?B@?Y1@?UMJ@4@)?V?Q?N?*  ?4D@?B?\y?\8?AM`???\`?N!`?,u@ZaUSys"?P ?P%-%BT~>K˱D*?3?,`?Q\+?T?A݄`?B@?J`4*N0 ?X?S @?BѠA!n.@?R ?B䓀7)3a0@@ ?@V?3W Ma`A< ?D?R^ ?Z ?)`ˠb8`]?0_{ Q@${?@@?7?T?\$?6>U''z`>T@???(`W]m4`=?# 7+aCDD@;}@|K"CH@?;?M.q ?8?`?1 A@N[`Q@V 0 , ?7€_{ BԀ=g3?;f.?S<?Ys@?J=`:H3@?B@?B`;G ?3?W?Ud`?:K$ @AjGP4s ?BV?Q@?O[`?Fg?/?.{?R]`?@s ZI U?B=`?Td?M= B \T؀[FF) ?Fv0 > USc1J)45?A_@T`?LY?TRN}ZY`EGթ@MyV?X7 ?!<`?T)@?D?. ?/X?1?C3*?.EߠL XFW8P^cAZ1(R>7 ?" ?+c?Ay' wRӠHi`>L @p?;+= ?2^Q`UqOV@H E/{`?N ?S|L?@ , L#^h̀@?U4`?C`罥@cRۀZv@[do?R?S ?^?_g?AR>>N?Qu`?S`C\ 3Nt`?J@??"!?KeI]PSUI':q??(?d`\`^1`5 , ? g3?M{?<Q@V '^`?`.?hZ@?[PY???Mgנb`c/Gy? 5n@6`3?&P`I]Z ^2Š0@? 0 @?!)#Q`G ?Ik?d=?dՠ?CA[@i@?RP?EVv0 So ?2 \?@?KA?Y ?I $s ?;| ?F{@>1~@?4}?OS?0~ @ ?M?>)~G` $1@`" X/`?K?XL?>}SKc[3BOI#A`?F0T?S`?F:? )?6=mD``h6X9@( <? ]>vCdIW`Pq1A 7W ?<?,-E[{@PZ L@PR9 ?B`?NIL;-l?:) ?ME] ?M?=Q^3?,`SGSJ? &`2|?E?V@?PcM ?I?0IC8r׀?+@?GfS@?Z<1?[?P?8-L6T?#" ?B,=J@J AZVf޳`>?J C IrB?8R?[|?QqtPO]}`\U: bm Xm?T@-3 @?S#?T@?'Y:!'Z@> ?$ 2D K`&(;q1g>1~@?@F`?O9I?S ?\+4?QIUo!Xd ?N?X`?*?:Ģ?R"@?A`?$:9?>?,, 5H08Ry S@Gw@+`A ?8? όX}6 U$[PEԀfke@?@C?_?@ Q`V?@?0s 5RcM:?lJ?@`?92?P<?@րMc@Ed6?2?8c`?B>?76L FP SkY9?P@?DV'-43 ?@E@`?+&? MNE?F f?TYU?IE?2i;2r@S'`Q5@?;?L7`?2@?Kr`?\f?[~`?W)?EMJIK`S" (3`?I?Q?P2.?Pր?E F> RJ!K@:l?(`$B YU-`?%c@?Jj ?L`?JĢ?J?Bx9^QŀQSS$A7?H?Mɀ?J?W- ?T<?K@?QcD?I?&?0?<?3 'E(-A A> Ax ?D?VZ?R+?XX?QXa݄`9S?/c` `@?B0?J -G@P/U@F ?%?7K?DE1BA ?3@#J2 -E[`1] _`If@VUq V7?S`?bb?Bd?4?@?5@?BZ ?D`?$;O@3>>?Rn?>[` @?C?E@!ޠ?4*?O?9 vCZ_H?L ?I@?#;>i?)P?N?P@l@ATt`Xf@0?0p?6 ?;5ȀR@R~?.?(`JP?n?E?G @?,<`VC`YQ<?D3?IDj`?A`??P5 ?,OBP0GQH D.?EB`@?Vr@?H.@?79`?:@H0P3 >`T W(??K ?X!@?U?UB`@?[ ?U?<ݫ ?! ?2J?G`?P`?3)WE`4_V`?M@?QxAYq YF ?T0`F)?'-?5ր?VO?\@a;TOSeSbA`?=9[`?8}&P`_Ru?D y?J?FE?ST@?M`?D2 ?P.`?4J@@Q W- R`?8?H@?@`?Y`?VI B`IX@?+}&?f ?H?ZM`?KgE)ҠD1 9T Y!Q`?=?1{GRz&ZpQ|8U`?Nt`?,a;?BD`?K@? NZQSp@Jx:@@π>CH]"%?P?P`?8#QIYҠU``b`+uv?bf ?d{q?X9@?P?P?5rg@MbTP >e@?#`=} \ŧbtP]?TN?`xP@?`Wd$`}@?Q"Q?;`Nt`2b ;?C?W[?Pf??n1 4K?@ ?Hmb`?@?0?/Jc@F ?VG' Jq?Aà?,)RD@Ix?~ @RY@O`9? ?P/?U?J *?K9 A^"f R?3(@AƘ@S`?6A?W!?Gx?H>2^C2;uv?(@?>.?+?7??y=ib`6o?P8/?O^e.8ƀI`J0Dxq`?ʠ?Mb?AoER`?J?J  ?W`?XD ?S ?@4@5, `:6@?18?O?@IJźF=m?BZ `2.a(;+= ?F} >`[R@76L ?R?/K`TFFΚ ?6`[?D_V`?6> I4 PU@?/c`?3W !C`?I?O`?4K?@? wET?K?d3`?ZO@S8@.Et W`UU >?L)@[b Ju`?Z@?c?D]`K?,B?_"?d?^N ?93@: U?:K?FL?Q`?KJ?D@?KlJQ@8u?1K@'.5\ K]sb`x `<9@NeaTA<-G@>I]?9?D| ?J~?<Ӡ?,=։ZaBF ?CFm+@?(_1B`_ `Ub?C@?7Z@H)?*@?R?I?b S^ Vb`?2|??̤`?'z`?`??gm`?[r`?[?]`?Jo?N?WBM?@VCQRr`K@HXCR ??@?\?] ?G=0?Y&f?Y@(VT 6W?S.?[ę`??*  ?*`?%.?" \?;1?&.9@?XTcX(@QmPCGu0H JsUԤ@@?2X`:F`T@7]?Ud`?Z@?Npq?Cqb@?K ?O0?+$h?C:Π?:(@Z@? Qw@4#`?T~r@8]W?d$@?W;`?Y? V>V?P7 ?H@R}Q9?Eu`?T:?OC?C1?< ?FK ?>29ECAg?N] ?9x ]\M`'1 l`2)?@ ?Jx:@?S̆?a?WP'HD\ ?8 <?^?`3C `2.S^H FoRdR@KZ,EL3 Gc2@AYq Pg3%`v*?>d?>"=O0N\#[?,?QҚ?O@?` @?Zv &?2 ?U@?Et .0 97`.N 4B U|]"@C ?9#?I]0?'L ?T ?ZL@?>4h?)?UT@?KAPF]E c`d @N7 ?@? @J=`?D1~@?< ?1;`?0p7`JeNް Hk3?'s`?)zG 4w@?.Ԁ8?'?V?J?l?DQ%?Tנ?Uۼ?PW?2½ `?Iǀ?W ?JUL?B0y@?X>?U?! "[I^V? 4ABA%?D2 @d@?I ?HۡCSR*S?Z1?`.Vr^ ?)v@?CX5 !v6Ld ?A% `?VN` +`Npq4}?3h?@K1.@RMf QP)V =?So ?Zo@?\9d?7Tx @ , ?N `?F?$P&-!`?9M-YWA?$K?T?K!:YHI2 ?FwGAG0?FU?Pm`6:J8@QP)W94 ?=4}2[?; ?6P`?A;`?I~D`?.' (*>{4d?Oc?V ?D#`?I?>`F@?! ?S ?7.?E?.RPBQd[`JJ?X?M?45?2kj?Y?Y?@?=>Tl S9S?Sfw?R@ؠSUπ=9[`?N4;?Rd?D?QҚ?FC@$ `?@?<- !gEc D ;@?8`?>V?,c?\#R'2[zSmB?%kG`WHNi;]sF[TL ?R`?aӱ?93:`?V ?LwO68?-˟@?6?;<?W|'?>`PޥB?@I`F S `=!`?7d?38?4- ?E?U@?\@?P߼`?:?9`?Pk|?O*?4Y?H ?TR?.ް ?ŀ?O?O@?Rt&?S `1SD_?Dlo6ϱ_E7v?JX?7"`?G ?0?2?Gu ?#W/RC' ?A ?92?Bx?Q>?C >ȀJNZ5@Ii ?DvB?G- ?;~2*A@N@2?/6>)F@?@GD`WQ .4hB/`5R\Swc ?AҚ?Q?J%E?Y1@?X@? y C B?@*?.A=DENC?%&@?Q"݀?!63?6x ?9i9ǀ3G?@GwK"7Ԡ?1U?F?NA@?5#@?>?A 2^Rf R;@7P~/w:C@Op@L% U^????ct?Q@? a;?SM?@`UFB-2?D > `@?A> ?"5p8`FڛX2qZ_`UxW:@K@?L ?^\?SM]@Tl ?Q?XX?Q`?E?19?)( @?< ?FR ?R?P ?=k@?Q`?QҚAn.@ŽX`?b?` ?M:r?R`#W>Ԥ@>07o=z`6 S`1@9M%?SG\ ?;?u`?N?H:~ Po _U/?0?+G=?7K?48 ?_E?2|?E 6AJbe?3J?M?6d@?5B`@?@Y1]  ?=Z?> ?ZUL?WJ}`GRVqFF >`9c`?3'(?1 ?Bl??D'`; O*A9ɀ0je?/r?M7?ZY`?b?QRXYL\9d(Z?At?P?Lm=7@0a?FNN@Rk@JZ.h̀?+/?G^`?S]a|?5`?b E?Q䜠?$z ?Q4`?M @? 7?@ ?AI@?@?TC?Lc?4a@4w@Ԥ@?Jj?S@?0 WPLa ?]N@?Y?[x@P7a' 01?J?"F 5 8 x?BP?<\ x?-Z"xM43->kNWGNO2``@d@?5}Q?ZȠ?9#?<`?\F ?_?T{,>wYB?K?]\I@?".J`R6FK IN|s@*@5`NHCӟ 2_`?7 ?z RR4?@@?>+@?Y?M9[`>V@2!1 ?J@?9? 2-;@?@?C?XU ?Lh?!9?E{"?Ik?F:'`?L;?D#`?BE6`?52@?5J?O`c`8( ?:@?,T"?0`? &`P"[Pv ?15@?B2 %ZcI`C?LB?VCy@Y?x:@?Lcj$B J=`?V ?Z`?Bt&?"2 ?@`?JĢ?U@?V ?(1 `?M"o`?R[?!er?fS@?O@?Uu!?;5S jTY@?4GR?=D*^?EqO?%Nj=p`6?/-G@?L?@h6DAG۠??*?Z`?U8C@V@I4 #T@@[`PE_?G+`?P+`?: ?D ?I5?D??Wu ?[Q ?)v?F%F X?Bn?VQ:2C ?Ll& ?OS?%$z ?<?Cp@?4`KsGB?-DEF&`?Pe|?L- >x:@?" s?7?N?B}?&F) ?Su4@?/:`?F?7sl`QU7?K)@?I:`&v0 ?D3 *S1݄`?N>;?I.2^>VS뢠I#?A1 ?*LC Mv{,?1>'@9 y M!W?H?^3Q`?!iРKN+?B^@?L;@1r-Z`?EԤ@??rU?B?Z,?X8?Cqb@ 9@?`?M=?6@Hi`Eڛ?$6'WG R]9?Gc?D RKP`?A!?%FHE? ?&W`P+`\ݫ ;U?S6?S?@`Ԥ@2H|6@7# @JP^`?@`?Sy@?W6?.=$@?F!?UB?Ti?>q?R?c ?Rp9H ?A ?P.`@ PB(R_{ ҎX`?B?N9@?F"@J\@>N?=DE9#??Z?J_`#i@?P?R@?1er?>?u@@?0 , ?9m0]L@>v?C`?Sry?KqOmM ?M?B?T, `8' :k! Vr@`(XtzEH@P['k >Ԥ@?Xe2P`?9m@?Li@?+qD`] W!?=B?M /`P @?V?;d` @T 1v?P'?%_B?1F?H?%.D@PQ@[`U Oc?F ?K ?3?/`?;@? R[ '??TP?P???5@ ?20y@?3~{`?uv?+A?L?Fv0 ?5ր?AWB@GU{<>N? @ EHC+>2@?P&?a&i?K<H 08/?JyQ?H[`?7?"½ :9?s"?E_?KI@?H?A';@??"U?>h ?6P`?M?Zr ?Dȴ?UMJ?Ys?;h1 ?`H[`?9I?Q!?3J@7 2H|?Q$?P)T"6@U???@? `:|?P@?@1`p%*`D@Pr@To* V ^~ Z@`?F4@?[5Fd@`'D`JV?E$?PEH;>VUq ??!i 9|:?P`@Q]T I@JEKi?2?&> JTK@?C?bh ?W܀?81?>ް ? f`HB|?9=?T:?RI?+R ?!Қ2 F! `@ ?O?Gs`?U@T&T@>I@?O?W ?T ?CÀ?ȴ(MPP3 ZjW[ B ``2FM.]=#19?\\?h@?X @?&@?0`~ 5U 7?EGՀ?\Q?P4r@E JDNI&B*be?$?#6C8P=`?C?X*?O<`:=I?96@W+aEɹ?D% ?/ . T9Q?G_Ơ?Q؀A?Ah ?a@?Kh]`[f ]A 4`?IPl ?\]?`H?Q#?:.?O ?Qˁ?1?)5vEȀ7?H? ?U4/?Qd ?EqO@GA6F|`2!1 &~A7A* ?:?EKC8Pՠ#u>ߧCFV+EoJ`0_~ @;C?R?T|?;̠?0?']4?3z?K29UYH ?FF) ? KW1b7?ah ?WU)UJ?0̢`?-x?!ޠ?F ?;@?C< ?[`?RK VIH†IA$ 2`u?+c?D`?;K >`?4?>ؠ1yQꝀR70p>4QgZ( L0F3RL>N?"F ?Q ?JEbZM`K ?8}?B'?-" \?<`@ ?7O?8ÝPVV@J#S@?"FT'@?6LCрB`?2?L@?>Eߠ?(_?0: 4s HĴ62`S)#Y2Tf@XA=6t@S Je*Z????2g S' H†?D:9?Mr ?BA H'a* ] Qb`[=?^ R@CCO1cD?:+?2IT Q .ۀ?3A`?P? ?_ ?Xk3>kj2?1`?`$Š?q.K`4K@?EU ?AтM`S+<@>x:@ `#" ?7<?!XY8Ý??43+3p@?8n?Vޠ?^?5&@V" O4@?"@?B?*R5bSr?9Z? 7v_\ Dlo?VeР?An.@?i?Rw?CU`7Ce`?(?5`A>'@H·?:%E?]?RGi1n.@?7/Xd48XXXtz:K?90ĠDD`20y@?D"6@?Y`?Z ?9Dj`IF Ybu=`WQ?9:?BC=SF6 : ?(`?U,`?Y@?;Y ?(`?Z@?a[?E/<\ 9 y :H@@@A+G/6t@??a?0LP`P߼`) nT X~@Sa>G?(_1?C[&M])[ ?;V`?8>r?Rg ?W,@?F`?@1SM;@QP?:+?W(?aF?Rd?>29?)?7?X"?T:ŀA7E?.J=`? (? @?@ր?)SD@O;w?U?S-?%&@N?Zc?>N JR V@Q /s"?UY ?PP`I%@?>R?CHTG`?DP?(&If@?+q?O@?>?&i?/`?5`/׎Q 6Q?4`JeV?GA6@6m N@&#;@?%^?,e0'O?A ?Xɀ?``L?JDDvRda@cULcB W/M˟@04#`?<?S?E`?#`?=J@?81?%?F~?P_{ ??>@*`Pq}Uջ/< ?I ?8Z?@?<?<7`-@%V r`> ?IۀJU[?L?Zg?+?@`?V@? _{ V3N<?@Z@?H@`M k")*DP`P ^KS?OI?WCe`?1 `?6" ?ZUL?^"?Fޠ1C`:+#i@$@?.a?Vd-?X:?L`?PoN?Nf`?Go?UE?9c`_a @YL?8 ?AWB@?%Zc?A{G?>?wW4 Sε;-lH@9?_20?af`8O?DҠ?S(@?RD@?CH`G@M@3 Q P?>:` wQ ?5{"?Vנ?HV?<?D% ?J-`?K@? ?Rb#`?2r@A33މ`?&> ?0VJ__ JD?Uջ?Z?HR?24E?Q]?5i?Lq`/C"b ?@I;r`V~ OuDJ@$ O1>0 ?Z+?Y'2;c?@?X0 ?H=[@RW??e߀?KL>2?Q?V?3A[@/\`?> `?J1GP?E4@?SX?5@1`?!K@.'OQQ :be?K# ?NKT?I?D嘠?2@?T@=J6 E8`G`??b?d`?;5?5D ?`?Z=?&[%c@4`?BA ?R~?>ƬLh@?@X5@ ?8?WL ?bu@?c=C`?W*VSBS W}N@?<@>v?B94?>?`?K,T?C>I@???11 M&?@' ?1h`U@;c?F,?@N@?T+}`?`x ?Q@<O+?1K@?\V@?E+U@J ?> ':D`?k@aM>?P? ?[`>@8?!UJYg RWLa@H1YA `@oڠ8?Qm?AUKR6z ?B?P &+U(.+@?]Ā?^4?T\?P (Ep ?7o?5@ 0(?/U@(&[Ml?\?az0$ `HA?P@?R FBR@>a?%W V ?A ?M>ЀC\Hny?Bx?V杠?S`?I?W"?b7 ?T@?)?:<`>>@?+@?9ᘠ?S@?U?A?O?ՠ?`V`?X/*?:6`?5%?4P`?C-?S³?EA@?;_?Z<1?T?# ;6'=m 4P>o ?PQ@?Z?Q73D[`@F&?Lq`?>@@@;u(}@>_`?Bv?c<+?dg ?P@?&J=O?0! Km ? @9`X ?8a`?cc1?_%@?O?B@?8·?A3`?M`?fā`?by?9'F`7^]rD, RJV[?P`?c `?M$ ?&A`?Ll& ?E_{ 53@;k`,@j`K?erB2 _F]l,14?PEԀ?H@-!`?\W?`6@?G^ ?2W>`> Dm@Gd$`&@?AҚ5F\OQ>'@?J_`?Gu SZq?P5 ?=K>Q(X6f U\JR ?F?= Rh$@T48?;?Y?E< :s?Q`?d| ?K H@$- >2^At% ?5%?48 ?9%@?AL?@h6?@ր?G?QV?W\?U+t@?:l?)?@p1r?I~D`?Gt<@|#`?AP?64<3!@0KJ<1_ YaܠPI?<)?Xe?S؈߳@PU@X= D&?\+4?a?5\Sj ]Q|@?2 `P:zi ?*H@Pvg@`?( ?`X ?UZ, P@<`?;C??_} ?P7?[X@?Q1??6[ߠe@_`JKyLCu?Qj\@?Y0Ġ? ?Q?>?Sc`?>d?'$@?G(?#" ?A? $r@<\Q@G ?%Q`??p ?>>2^?*.?XZ?UF944&?K ?%g}[^ `?`?W)?L-?+8V`?5p8`?-=O0RSgMQ^?4 `?Q3Ƞ?F??:?E@1`?>O&z ?@c?0ESI>6PQJI@?@& M`T!6ڛE@O`2xnn?6b?Gu@?D**΀GA6?5V ?Z ?WD@?2xް >Tl 75F?yI+OL?<$?\Kg@?Z[ ?3ƅMrD``F> `?O?WҠ?O*?7NOCY@`Y$?5XH{S `Aʠ?;?4]`F@ ?M{Df@[3/׎?@ > 8 A9ɀ_`?:s?@?&`? OG,y@ES`F~^cW?Rd?9?U[{@?S5j[Q``?3? R8@P`?Iho?T/?D?FE?1O@>>@=m?I ?Oрȴ$5?=?H6?Sg?ERM@9m@?\?Y KPYWp?& ?S?,`?Sӟ ?[mF?Y%`YS/@J|?B ?IL?S?P2?Fd?O4?TR@?=xBWB'kj?# 5XE? ?GE@?1v`C' S27D?0I1~@;| OaAiР?E@?U ?Uc ?Ad EQ`Ԥ@?Rx?E?>V?ZY`?Y_(?A|@?!נ?@ 9B;D2 ,{n@HB?>A?Oh83@XN`"7?Rh$@)@P;&@N@2?= ?: ?1N@HA5@8#Hj?0: A';@=? ? $`?G?V ?4؀X$ ]BCߠ?뢠?$P`?Q;?J΀?9gX@s"Tv@M?T)N?]Y?6LAy,j'OTl ?6?<ݫ <TpAKr`?{?;d`?&A`4ICމ`? 0`?H`/c`[Yy@1?# ? K?$N?Qp] ?Z?L.?.8ƀ?3m`?CV?S+?P>1 ?7]?S^?H;,?Ԁ%π18?:p ?Qؚ?OX?D9 ?4?2`?H ?I?2|?5?J?F_D?+ ?5?50+Zc?2*?d?HV>1a ?J?P-?8"?Gz`?]U0?ad@?N=#8TG`?I@2zF?; +Qǯ["`= ?:8@B[ Q>'@P&Ns??Nx?^'@?bF ?U$[E`T֠Z@W`X#Hܸ`?( `?LH?H'?a?E?R>_{ J2NbYs@Ty@?-?J2^?6SB@g34Tl 7@Q"QaJ)Z9v>H?3ʀ'w ?- ?Aޛ?`5jB+@:xATN CH `J/`9%@?@I?F@qK ?6)?Q ?Rz@?M@zM!WG >>@?;#@+<PJA1 ?@@?Hܸ`?'5C? ?EJ?:`!?4v?N`?OC?@?&SB@/`NN44>V?2? JoH*?5K?8C@'P~?9?^?b>?0+`Z`Qc@?,@?_`?1C*o ;6'B K <3Y^K+= Q* Xr׀Sw?Q`?_=%Ԥ@N `?=?RQ?I>@?%DeB=`=r'sl`?I@?G @:sIbL)L?7fS@?T}Z?&L`?A?`EH?c8?FSB@H@Qk`OA`XZ`?$K?[C`?U(-ȴC@?6@?GD?QLA L`>`?I@?,I>u?:x:@?7d$`?;<`@cn\ ?T@?_K?@ ?9?K?Ff ?J?Gw s)%@?/ Y?A!`?< 3%`P]RN` ό?;y@M\@G~V,(y`8-?,`Z; _#t`5Oy?Eջ?8GNEߠEC;A+3)W?I/@?S?A@?66 ?G?CԶ?#5FA:C7`S#R̀"? ?H? ?(M-YE- ? ɕ 7"`Q@MJ@?$:9?F%j 7SZv >ް ?l>ȴ?*@?>?Dά?Cƅ?Tl ;f.DP@` EHC`O?HM?^?2%M ??S ?M$%-@G@fD@F/=!`<MRv`*  |9 ?I?[B)@?$$e U@E4@?Lj?T ?2??Jx?AǯC)WN ?NH?bu?Rt M*`X:@?A :Y >|?3?ZR ?\Z@`;`?B ?>#?Aa ?I3(p$Tl ?Xݠ?VN.6mt?0]L@?,0?@?B`5&@DE$?7?R?Ha`?/X?CV`?K̠?3?C`?W;5??S >N?VI ?[=??D@?<?H.@?."95"`A1;6'*p?&TR?$@?N`g3RDb-M MX[f Vn`A=?1 ?N@?Q`?(I]>&z?`?<Б?Ep8`QgX4Jn`?I?R6z /|.?T?R?C O`?)m?J'a@J@8(`?@?K-l?E@?7 ?$- Tu+PX?'?G` ?X!?NbS U.=i`Ba?P8@?Z?IG?'10+`J=I?f ?0a@?%BKK QRcƀAנ?"!?:`?OGy?a@?d9?TQ`?<&J?E?1+ ?+9ՄI 5``?8`?<5?Q?Z A?E`?Մ?J?R?P7 ?Fb5}QEZ`?@=?L2L@ /6?2#`?3h2 > Sj T`r`?T|?T1`K<?8G.@?KgE.2@RXgV͂@̢`?D?Tά?O~ @?"3ӟ I,fS @?,ŧA [Mbs Y?E``?^D@?27D`?QK@?_?T48?(yd ?Y?BFIJD;3?4R@?V}?Z@?Zq?^`?Ap] YuVg>`?*%E?$P`?U:z?DX?9F@B8@SРKOB`ClR@[@S&@IiKf.!erCb}`\  ?>?R1?C!A@] U3ʀOd`Xv??T3>ՄT@C' ?5i?F:'`?Xi?V=@WfS@LH:R@DT?:w ?Q9=?R_h?M ?8O9[P/SHɀ?^,, ' ?"ؑ?N?XE?Rz?H`I ?H`?J`?Ry`?P-eO<`;Y & ?U@8$@`?7?RҀ?N1 =@GXULR4K@?'1?WK ?Y?F`?C?^ ?a?BE6`NR7Z@?@y?8 =g3E0?3@?Q|?Ԥ@K? ?D2 @cSgSLM ?Af?S>4ά?T ?\|? I?J?b-2?WA>7 @J8/*+? @?k?=?Q?8RP`UȀT,XlFmԽ5E[{@&@?WԠ?T@OnY`K @UI 7NIC#Tڮ@@/?Yz?^?+V`PI8h?&,?7-EAX I?27EY@? ̢`?Xk ?Q`?Y?`@?:`@π?8?1@M~H?A:?A?Rs@\R5`?9 8 `I`DZ;T? l`?B?4"6@"kj-@>S?F?W?VK@?1߳@*?w?@z?K ?5 ?%Ԥ@>8;[D ;Eo)@?4?XM/ ?Y. $UP 59?)3G'^`?Qx ?X@?U`?W€?P9GzD`9mGFP<`X^V? I ?98#T@?Sa?T6m/@?:A?T,?W?:2t&8gO"]OS{`? @?KQq@?R]?Z ?SiF*`V5ɠ?(?TD ?>=HJA2@?F?RGE@?Ff?Zw?9?@?L?K?Ro?]>Ѐ?R+d`2x?J@?J`QK ZV ?7ʿ?WI?H?9,f?Nt`*( ?F|`?S\@?2B"?(7/4#`?K9m?Pk|3m`G1@?#R ?== ?:%E?I!?:@FkEQf@T7`SV?4&?R,B=`_T`He?T{,?V^`6f R'#~{`?B?38' S XoVpO@?@Ȁ?_ ?V7M@?4$e ?[k`?^QU?^8:?^g*`?5XPJ ?S?X?Q@`WZQ`>Ԥ@?P -2S @A?.0 ?"Y?; ?$>>H|?=H?MѠ?`KP2`QQƘ@J#Ci7թ@71Z?1? @EfeM9[`M:r?(?6@?D?T\ ?[[D ?7yS1Mg31V*?(? [`?VUq ?XA?K [`]@s`,@wY?Kɂ)=0/?@:^?L`?SW?F>x?H_?TAR?( Dxq`<5?F- ?ax?a_, ?O$?:W?@=?P/?V??@$`?!N?O?H†>a;?-@?(!\`?I<`?HVv@7_Ơ>?F杠' C뢠?8?A&@7 EJ?) ?7۠i I@+APK`_ZedJIJ?7]J`eҠan?Iۀ?fO?Z@8$@`T9 W T;TVVB:?=@!\`2^?S`?V:`?B???1p] ?S?\t?V`?E4Ep8`(g ??C@?G>#L- ?ET?Wc?Bb 5Q`3 @?~ AY=9ɀ?6m?:΀ 'L 1(ROr P]8 ? V?Q7?Vv?&N2)?$F`[ad_?(-J`NJ`C!PIc@Xp?I`:`GZQ`?G ?\?Z`?F SO]&'?2Az0?6`?Y?QcBؑ5C?,B?$:9`8NU'?q`?\x?O `@:^v?6SB@?"?9?CU?L ?P@?p@8"?4 ?";c2>ھ9J@1?K(?R2 2^v?P?Iz7]F@?1?R`?>AB?/v xW~V_Lc ?'?c?\c5]b4\eV]@N`?M̶?^c ?;y@&0T?B?@S@?<@|?J ?Jź?Q)j ?R ?C ( ?>d6Sh`;O@?2^Q`5t c?N?P?Cp@?44@?/:`?@SQ@V ?Aj?H8A!Q$+&?$ @EpGrU1g,ŧ?GD|?Y?H?:x:@?QU`?:zM`R?^ T5Tg VPF" U, Q`4z K*`O@?CP?``?eqO?` ?#=@?E4@?B5`?@\4?V ?@ nRqZ<1AK'ORvKF"7NҮ`<u?R33 ^CT@H1TKŠ?&`[?PI?Qs?;?G?U͠?\ΠH+$GDN??<E$M@@.h̀?Js?9b`|h ^4?@F`@?)~?Jݽ?)6x ?8?"b HWIkNm+@Qt/ ? @?LT"?)\n95MJDZDQ%?9?K2 ?`_{ ?Cu?J ?B`Abf;@cR>#?H'ٻ\Z@\0?%@1`?L?-s?L@?O[`G(B"H?PY@?6Qz0NAR= ?6v0 ?M`% Rs 3@?@@?!ŀ?1V*U< \NK@?S?GoX7 R?C5g}^Rz@?< @?S9@?S?F{@9%@[_^6Hn?HĴ?X?B'I@5 ?D?Nq?_?]f?=ʠ??Sh?X ?A@4k?' ?Y?V -k@PCUn@ZY 4?Z?VY?Il`?;k`u`?DR=@?Rq?+?=@?SXG@??0׌?[>W@?RRn[p>I]Zb`Y694"6@5F`@Gw$w@?4n?/n@J *UE09QꝀWaiGI%;EGՀRK7@IB;99 6A`I`?M ?3u=m?8 ?R.?JG?B?;`@0PddK+= ;d`?6Y?0Gw@?S?\%*?wPA?1~@?$`>U?P'?[ ?VMA`?C^x +/?F1k?T?x:@V۳`T @6@?,e?L݀?DҠ?4?4>?%'P~;k` 2?R?bg`?U{1G S>Wʿ?E`?0?Q?Xe?G 8V`?,14B䓀? &`?V"#?HlJ?3?I ?DU?L*@?Od`%Nj)?T6`?Tڀ> %x?BH|? [TZd?DEנXP/t ?Nu?T`!5kO:`)ɕ ?3@LO&E\@.\%p8`Nt`P5uS@')0`JW(g ?!1 F@K>Fk@Gsl`)@?#^ ?E(?U=v?Q ?3] I@2.J`R[̠P{`?4*?O%@?:6`MV@=?$ 0(3jՠ?LDڠ?c.?`$`ԀN5@ y &=muv?Vɰ?^[(?Dh(@-!W3ʀ?<?L!>8?`ڍ ?[@EY@3[?VB?F A;`? ?T??\?Z  ?@9G5?8<@?V[?Q8 E8J ACʀA?>WV?K3߳@Bq= ?$?V?\.?A@?1߳@,ŧ3 ?GHڀ ̠S뢠?E?`/`?>oZ D Gd$`K`?CF`?\q`?4GRJ>`?S ?[h?Dr@Q'Fk@?IH ?M?>BF9OA?1@>4J@CԶ?A^@?Tz?B)|aIau`Tx ?&'AǯDu+?F?6b`I4 `?'?o~?C?=v{F^,AU?BD`?K# ?F]@?:p 2p?T9 ?Y6?PC?S0?U`?.U/[Š4?R`?Ap] TU`?.[`?S?T `?J?7@?Qh-`?Y27\ӠHN`Co3`W#9OT?N`?PP6G:WĽ5?K`?@NA@0?T=?-%bvUj@?X?] ??ٽ$>$:9?0V?-:P]@E?H`?VL?U~?FI`?C~{`0~ @GNc`u?K`?J? ?<@??{`;<+? E0G?V@$`\3`?("?Xd ?7>8? ,X`?Lπ?Y[?,nULl& HN`>m+@?M8D?1 QPL8&<\U@ pFM < ?7Ȑ ?<@+qChB \PsVF87 ?IIߠ?P?Cމ`S~f|R?I^-`P`?2'?DŠAPNe@<@|?i?9B;?߳@A?Px ?X?Vf\`?AŀE Bp?D?Qc@?S?^@?a{`?S1S|@Q?6?F@DvBH?H?[Wr ?X_?CIdHa`?753(@Uv@2^?D;Q Xd@`Q<IHlF+`?YA$ ?Z[ 0-E@9`?TB ?=`b&a5?@(?YJ?H1FK@G. E @X _CR @`? ?PǸ?Ux?TU?Q ";UT1@UT@`$Nh ?Yī?SB`Of Q:U@E`LB$N4}\eO?E#@BVx?1C`?>G2X`?J^?Q< >6M0<14>a;?9*8 B@U$뢠?I?|8L/Rkj0>vCs ?/s"?^hA?[P?+`B/C Of `@T?Au`?R_`?AGUo!>ھ?SE?0 R.JZ>1ǯRn% S1KHmb`@?"D?C?N ?U?W?KH?-G@?$<?D?7?{`??\`?Df?F@?EED `@R `@-E@FY?5^?CZ4,;DG?# w?T?bԀd-@Zȴ>_{ < `J Gs`?9 ?H A3=B|?V{?Z?@S&?`?-HI"O A3=78{2J49@Ax RQT*f%7v?Hk?H@?MJ@B_hJ@CBrZlR@?N4?0XXR \FلQ9?`?[ En UxO/@?AҚ%HEz?RI?T"MaaoEAer?V5`? ?? 4ZJOU@Uj7@q?OFb@?O?%@1`?1I?K ?N9?C#?:?@V?. .' 4 z?;q?D`>5ZT 2JbeXtzX@>`@T487o?M ?7`1t?1?Ll@L?#+?U)E`?+_P|9[5.Pw@k|4(I]?FN?bo@?S?' ?G' ?Eջ>a;'1H;,XV@L2`>aG9N?Eb?C3*ZKyY`?|Ck[`I2$r@F/?A~i?nn.@K`P%@??-G@?Ru=`?X`?_{ ?L?I ?Gi?W`?NJbeL?@?HW ?9?7h>(3`*CՀ?A3=?Sɠ?'"?Na?>z@3@?9f@?%E- ?1`?RL`?C?-Ѡ?9^?Mud ?[ɂ?VQ?X`?:()JO(@MH' IVCOE@NCA`@Lf;9?#i@>8ƀ=!W?RM@?b t?[<(`?Eӌ?5}Q?=@ I:BA5@V]$U^C(FO pYՖF) ?Z60?Te?:?C?P@@?GT@?+@: ٻ?I`?Q/k2^M*`:SK+= `BZu`T ZAP?Ps ?B.J`?%?M1 ?R?A7? "[C*Y8hO??@?2@2K?)[`SP!@?Df@?O[`?:ܦ?3C 2E>?2>ӥ!`7? ?3P?"Q8 ?CF`?Q?C ?(-?@נX ``{`Y@O@?`?@̠AI`?)0Ġ?!\`%`?Ps ?\U: ?DN8-l:όTTE@mJ U< E_{ ?0i?B>Ľ5BE6`?4؀?L?_{ Lq`UPp<?4?&SB@DEN `U2J?wPU p?R( ?K`??1a ?GfS@;`C\M `IP'SdIMYMHHc`6Z`ˠ?;-l?3+O$aXp?@?U?F;>?Dd?G:%*`?I!|&NQ)j ?@\?X) >c`O_;1>TQ?O?Dڮ@4`?I?^P?VYC ?GԠ?K??`RۀZ׼ ?7]MʇS?@]L@?*?E@?)K^XZPp?%?E??IIߠ?2A@%?OH`?A`CjՠN `Q2VUAE}Q?9%@?VHX?TN?7h@?@?[d`?T/O@^E@QAh 0N@:CՀTI`?P?I`C`3=?3<>@F`B]9ZB PXb?, ?! @??HC@?=DE2[?4?F;>?M?J+%3@J1G@I2 _Axc?X?A(`I8hZ5W`TP[ X&o@Z ,?I4 %P?n?V?>6Y'Y:?:k! ?Xi@?@ N2@PqAgRvTPˊ?Cp@?L#@Oئ b.]*`Ah ?; ?A?27!6?@!C?Qa1 G. ?Fb`?X?^ TdPm4.?l`T @TP 6b`?V@?Jp>뢠?G ?L ?>h ?Q߀?c.?b ' ]YN@n@T`T{@ր?@s?S>?*TFViF@? ?+R ?83`1*Q!ǀ?Sh?AXYLq`V Ty@QK@M 0`?Q?YN?0 RǦ?$?W)?XZ2`I@?1?Ci@?&@U@QXY?#^ ?_p?Jng`UL>N?,G0A>J=` @|?_?Bi;?4K?H`?XT?>a TSР?$ ?V@?VR ?),f?rB?HPW DJ@POͻa?>x?`k|?gG?TFbP4@PfN 0A?#뢠?; ~ ?7.ANDt?5 ?9;u+R0Rb)=։NdA ?)Ҡ?++= ?#z0P3 ?k?-?29<?!Қ?Xɠ?U/*ܦKZ0?D\ ?R ?RԀ?Wd$`?Z,?0/G_Ơ?Eߠ:&'?O?J6`?` :NB%?G`?Y ?Wo?P׌?PXb?O@?%Nj02?Q`?]ca?uFUq ?45 ̠Z&B̐?F0^t \s>?=7P'sl`?:,@>@@2z?Sv`?[(?Q? 3 @?D?H!@IhoPI ~ @?;1Ax Xl֠Qy??3~GA6Bq ?P5 ?U ?*J`WG+a?Cl?A"݀9U`Z?%@?]ظ?Ax L8g>>@7?o*@MT@Cu?C?J  ?2FM?57v?;w`>'OD#`W XvLFd@NRSE >1~@?5`?D@?9  @?IgX@?S@U@WH5<?m+@ELu@MDx`?D?YL@?QVh?`?9!?S`?L?9},>%B`WY"f`?2-F31 ?Tά?Au`-b?A> ?U``?P{`8жRJ?;z?Z ??|ZaI?0ٻ1 `lNe<@K`?A DX ,`@?EȀ?> , J't@3T@?Mo?,XxLcj ^J=`?A?^=$@>aQK ?4]`?M@?@9J@*W?94?Bl?$UE6QAm?=l6 3?3ZB`Pj ?5c@?L?4M߀?CP@?W ?]@?T33A`T"I" ?7`?@8/C ǠX,Ke `?' ?L`?MC`?)=Մ*6`= ?0X?S.`?/K`Z.]* E7v?H?Z3?Pz9@Ob@Xc`?8g ?N{[?JLL`$`@x G!T @IB;=!W=`?R_h?c ?R1`@@RbK >?GQ,r?5?a@?X<Ϡ67T@?H ?P=>V8?3s?`F?TLNPP$`Hr׀P?`a_, fwUJ`?AXY?=7,>`?1?Ý?<?U?F&?&q`?HU`jg^i`/.@C ?Oˌ?R@3_`Ek?= T`?E+t@?.0 ?@ ?D8pZCՀ] U΀D`?/?8e@7?KQ ?H?Hr׀?H`?"?7?M?}@?V?`_?NN 7C$?#P?7)32?EV?R82xKM?O81?`?W5?PJ?R`?Yx@?Za?&[,@XC@D?B`?@cGViQ Kb 8}?1!?6Q?B^Q`?Q߳@?4?;aJS=^x ?Ni?S ?>Ƭ#Nt`A@V K5K;`5?+"?Bo@?C%`?-˟@ϧ>ΐ?E7v?_X?Z  %o?9@?dK?e5 ?\]?Li@?$(?@ ?ALKFLZ@4$e ?15k?E?4K@?;?UW?JH3@>U'? ?DX+~2F?H[`?;V`?.N ?I?I ?HV?W4?\?P>2U6ݠCdI% ?.`= L]N T5P@=?. E?@F`@?B')C?* ?4z ?8 ?@ ?J&`?C9@?Y ?TO?8')3?=%?Tr@?Rz@J$.JmPMZNv ?Nt`?S?Vt?H;,?/ . ?;@^_̤`?6M?I 6x_?1?S ?G?Lŧ?T ?%_Gj*A@\T?p@45M@5Oy?7]?Jj?Q?X?cr?\1>{?EJ?M ?A7u@E*`N>HL`E\ S?\g`?PJ *@je?7<4eSwVSU; Gh@1O PQJUs~wY?Q 6?N?E@?H?L`Qd ?'?Y@ Y_*SB̐G\!`?A:?R?\5?H>A`?@?&v0 ?>?D@?1??D_?90ĠHu`;̠?C~{`?1cDl?FW?U@??Q=@P?0[`?4- 81 C#JCՀ?k?!Қ?-*`$ `?6?U9?F,ŧ1 ?5@?-@VlWz`?B ?F?;C@?"H|?>?Zw?[;b`Pp?== ?-Ѡ4y>Մ?6HX?o3z-?!K<Yf@2u?H?ٻ+k`?;?K9?T`?M\Q``*`7? PN@?V0T(@^ UBV`?EK?Pk|?T ?B@OaU..U`ba b@VN`Uj7T@C?w ?U1u ?a?NB@ؠ>x?3?,`RWOg <`JOр?2`?E΀?JB ?XxB ?>j`?Pf? UMs5@?*zA# X>R@ؠP7F@?8?b ?:4??_} ?0?~22^?Aӱ?SM`?F36QR@T_ 1*?_`St^vS??i?1 1,`?Rn?ZJX @8/?S?Oٽ4JCHBI 4R=@?@?Ny-?R@?,c? 3?R?K7>F7Qˀ/?Q@?QHe[ ?0n@?UZc>?.]?Yڀ`?IL) ?$Tl 0&L@<?fS@>aCSRlK fRX`a9ɀW#>X`= `?:ѻ?K{?VC@?Q???I??SZv M`?P`?>O;?P(?J_`9U`?VG@?cv?5?CR?CNt`?O?1RBI@@O2? ?;K ?HQ 9 8`?KqV <ŧxQ#i@UZ O$??;A?H>?E?A @BYUBz@>kj?2?Gʿ?3*/ 8_\dQ >4hS9+C' ?G ?P ?Ah k>IJPQB`"@A S^ ^H@?BWj%@U?7D??w?(pG4`J?-o?Q?*?6`[?S`?T7`?F ?*beB`HN`?<?C ?Rf ?\?Qn?(?P̀?W-@Q4`?H?T?CS1 ?R?[ <\Vkр?'A?R@?Uq?W<`ZᏀXwCt:OzQ9=?H@H`? ?Hϟ@?QiD?> #qb@BؑFN15@* >v,|@?4As@@?P\?5{"H?G3?-(`^E@# ?bp?X3`?O~ @?Xj@?L6?@? ?2? ?$5??R{?W#3`?Q:U@0+`bc`TM?A* ?I?28= a;!iР'>8:H3@"M@?HÀ?2vT3$?* FbEX4S\OHq?er7@I5"`= ?(Q?9 ?, ?.})`P@OS{`Ab,ISWX@TrpB`%2FM@`4?A@V ?Be`JXR`?{n@?MY?Pm`?;f.?9%@?Kn?M@?B?)0Ġ@vg@A5k?B@?N*?Cg?O?F ;$?"@?W#?Mjy?$?5 ?;}?Gi?T`?Spր?R: ?A`[6 d Fi?:?)@!`PV]lT'Ce`?23 M(4Z?47ԠQɕ ?WW?S 3 Kـ8`@4GS K$?PGw?P@?v?.[`B`V"?h6@[`g@Z ?S&`?VHX?T?Wԑ?C9x=։?+h?BT~??*?AV*?[`A `?CEFd V?JO@?R`@?@Q?:,@?Kـ?E|:@ ?4V?H?נ?4.?Uo@?9^UAԠW@OH8@1`?$<?I#?S;?JoMm c3p\ F >8>r4E$JCGZ@"^Q`?&@?Hp?9OTV+ R?W_?b?V@)X@(3`?A.@?>z@C" PuO9H ?AV*?OC?18 ?+q?&d@S Rd?/ . ?5!`>?Cn?A2%?2M@?Q?Xϟ@?LYA^@`n[X@N@Tv@W-O3/@?F@?V3?Y`?Hyd L*@V`.ؠ?4- D^?/1?^?]n1# @U?JW{`?V1?T<?D=?DR=@?ax?c $?M ?74`1O J2^2^Cna8IF ?Mw`?33рz6iP`DN?@$?115`"=`4#`?9 Jng`c( TY@? JKyXɀ7 ?Ve ?Ck&?P`?Y?*?EH?Tu?P>2Q8"?:D?4?5``?Lol?H?B;c?K6'' [ZYM(`,@?VH?]Y?57v?U@?0_{ ?N% ?A`)@>nUX A`5 ̠?/|?I :SC$?UB`@?a|?U20KT?*UL?J?w3%`L, ?Df@?^;?FU@Yـ*(ж_mcf S O=Qn?`?C ??Qv?S2xRJA+?34B>[`PW&" ?A?P?[2 ?\`?YS?RbD`axIP?U< ?Q ?E@?^ ?VI`M$ Q?/?Q?`{?`e6 ?MC`?PWK`?W}?@?P?O?K ?`Eg}J ?@?J *`8nyEGՀ"M@?NR?0N@@+?}@^y`feJ`6?8N`P?ӠU+?<Ӡ?I `<`4P`?I ?T>`?R8@?B1?8@?G ?B ?:v `?@ n0pF?&,?E&@?E`?J_UF?:|?K]s9,fP: :?-H|@1?>?Q7FΚ ]<Px E(`?Q??K`@- ?ʠ?Qr@?QB0Y`?`?Vn ?R̐? p?L?]?I]b`2.@׌@L`A0d`WNOUqIU0@N2@TnX`?S?Nv?ȴ?` Q#Dd?M3@?O`?9 y ?8<@?8?1 @?Ut ?J AS`RJ?JF`?T$?H?P?0Wg`XC1?!a ?St?OKkU@=E ?'P~?H ?Px `?IN=`"ؑ\^@/?'j8?C ?<u*) ?w ̢`;?-o?@$`kjL, \Q?I?R@?B2@?Q`?QJ,^Iɕ @ٻ\ @WOg ?AٻDªĽ5?# >S?L1`?Q/kŀCP?7 ?K?H[`)4@n@&?0 @?U?b ?PJ2@9b &B t.]?72`??`7A?N>?d|@?I@YVBW 2_`?3$?8jAS³:d?N,?T`@a% `Q9=?VU?ZY&N?jg?;-lSSC FeР??O V`D?%; S݀QPJp@LIA$?)?1# ?>`?>RE(HM?,?'2A ;9OP5 BjS ?Y?c뢠?@]L@RGIc`?#dI??]N@?!SDΐU,@?Ys?So3`? f`?*s܀?&SB@@ ?:^?^`?TGv'G 771???Pπ?NnB?3A`?`?Av?c?W1bUY`?.d?LG7:Y T ?z?SQ?RZ`C*o Z@D`?S ?Rt&ECwU^A@??p?N7]?-x%4@>Ԥ@?PU?G\@H[`JIJ?HE?U$?$ Lq`TpAR?e?S@?HS0.{:^@?62`?3iAg? ?Rj?_3H ?>RRRt&:e?ް ?D ?K?HW ?P@?Z&\?`̢`?[)@?O(?U??V 7 wU{=b7 NCo3`8u`:?*CՀ?H|`?P6?R`?Fل?+ ?>@Q@_*Qŀ28TWGk`?2@???#'h@MDEX PP3 ?:h@?K A*?RO @?OyV@ZyQ?H?OP`B"H?T`?C CP?2½ ?Ic`A?-*`?W ?TK?0? ?#=?(ж?)5"`p,G 1NIJ?0?<&JJU@M ?Co3`?P &pA2%?'P~?N?D @?B[_{ >a??U@?0RbG4 Q6i?/ ? I?,?BV`?D y?C ?J:?P$?J~?Rt?a@?Z HlO?M?CF! `?"t&?S@?M<?O^ ?V9?ANїP>ϧ?4Š?+?2Y@xX$ J ?G|'?Uo@?@VIdB?E&@?BC ?5^?lJM BU?@@?2kjNdo_t:`ZN4 ?A]?\ `6JZF ?DL ?Wo`LA VIo`>6ڛHĴ?Cw?S?8r ?*?Kt_ ?Hr׀T@n?MZ`?Sj ?5ɹGIT8@S̆S҇_.`aR`(@?01?DX?*( 0~ @?Gɧ?RM8 G.?A% `?EL3 ? ?&?9OT?9?>V>`Q SxzK ~ Y^v Nݘ+ zw ?1 ?3$KY'ʿ?EASJێoKz\{I@?F} ?JJb > '?+h]`?6@??C?K?MT@?97`A}`??BH*If@PdJx;<ր( <?J{?V! ?o~TY@??a?W?뢠?J*?YG?Ii?%H? PrdeW@[w?:D?J@?6@?H:?J`?+` ?!߳@?C,?C @?"? ?QK?DkX ??Q?U7v?& ?&?R2`?FHAZV ?;@?\Ӡ?*6`P- ?H?W:@DZU@E@E@?4?TJ ?F0T=@=Ѡ?-l?.dLbS@Q̙ ??{`?UZ`?I?7E@6SB@Q!`RO]6 dTY@???H`?/c`GZQ`Q:U@?#+?)B;[T+X@?E] ?BA(RRP@\?>j`?48 NxF &o@HL8? 2^?Zc$.A<`#뢠?M T`?R6z ?R?W8?Sp@?.2@8`JJQLIWd-@Z,2b 0?$?QXY?B٩ K#@N:`?=p`?Swc ?AW@?}Q?<?@[`'G JrMGQV J(?+_?:[ ?B E ?S?V@?QRX?*6`Rs@Y},Hϟ@?"?O ?RP?$`3ƅ?D0`?Nŕ@?>H?NU'?J3 D ?er?M ?O< 2bEc ?H`?Q _`z4j@Ic`?@ @?St@)YvCR?J)?PB@AsV.`'o?3?`?MI?M̶6Cމ`B4@l`?I`?W?=%$j@< `MC EZth@P:^?B 2C?PTaT3>x?BF3h?1K@?Rwl@?@n@?C5Y?Q?H@?F?(wYU1i@^M?1?6{?D?T?+$J  /J HL7N[`+`$@G4 Si@W N?2`?MQ^?ظPQJL`@?;`?M?/Gy}@6UG`_$ Qؚ?Ad[`?[5?R2 BJ? ?6@2?C?D :9>`ˠ?Lz?Ok~?&iE`F `@&+ \?KN+?4@K>1 ?ERF杠T ?Xm?`h?H`%4@?7€#/@Pi?m+@?Ib,T";A?%C?Q`?c?^,O?*?@d@?@`?*f`4B ?/(?D1~@3މ`?@J?Q^@?6{Q׃3$?Lh?H@?Մ?Kuv?E$?Ma`?OO?9 ?I?BQ8 ?P5 ?Yq+ ?G_?Uo!?T#MHsS@π*W?1F?GM@?C:[ N`LH >?9 !?7E@?U@?S?Iz?5Ȁ??)i X kɀ_1@?-7,?0Rb?E ?S??")9?7oE U< P]?!`?88jTtZ`Q+?8"?SY^?.RUV R?+Մ? ASIW`F& |@?@ ?=m ?T[?A Gn C' ? ~ @?A@?H?G`?Lp?Q?G\?Fd?G- ?%^>å?1NVB JM`9`ˠ?G`?H'>H@?8/*?A~?+?ؠ?Jk! ?ZV?O@?-@?DkX ?"Q8 I @?9@9\nB@4Tl ?#?R?GR`P N!`?E?V,?U8?E@?(-?I%@?Q9ᘠ?CP@?^?[0i?t ?W@?8,?"]>2^?0<`?@iK`? y ?368?Cw?S;Z`?E?S ?D`QF?C?Q@?ImBT|3z?K?5$B 5 ?0?P?7l?;@?N?W\?XB`?Q?5oߧWHfc`V/?0`? ?7z`?O,`?01 ???8/*1N:; ?4X?Sw?O>1 *SdoAG ; ?18?3i@?7? V&GKŠ=U?L`?`)?Ps@?/-G@> K+= J A`01?/?3ȴ?='?Nc?N- ?D- ް L?) ?[Ѳ?Sq ?7 ?2ͧ`I@?}Q?J%E?, JY >Ԥ@?Yi?Xj?%??!ޠ?Mu?#O4At `ˠA?= ?DA y:A# M@FMDSLVQ?8$@`?T?X ?DV>- ?-*`?QM@UTb? @?TH ?T@?AR?A?#މ`-@?9H %-@Rm 1r?B0IZ? :S#>å?"@?:`?=!W/62b ?J/ ?R0@?QK ?a慠?`7G`\ܓ?17?W?=8N`?h?P@?IM<{n@?'h@?a+?\8?'-?5F?G?"uAh`S6X@SE-@MR?GӀG6L @?Q ?S'(?)?9P?JێA_DTi>ND?!>'@?6-@(r >w B +@8/;@?Ab`?G+a?O4@?CܠDiD=?}Q9cV?4R=@?@;?QƘ@?Yo?r`N<_ ?@ ?Sȴ?5O+@vg@>m+@??`=Q;2z?1cD?7NO?-/`A?P!C?.' :ѻ>#`EKY T0J5Ma`QK@̠?K^?O==??5-@J3vaaf H ?')3>v?2B?IR`?@3`?0?1 ?Lw?g.`?d{ENj^`߳@?H85G ?<1`?\`@?RƏ MN?Uf@?\]?:( ?A?W F?R2 ?0 :`C~{`6% ?:?@_{ 4XEC.2^?= ?TH?O??"]?'ʿN `T?' ?M?$N+@X6@5^?-!W?,Kg@Q_SBo?M`?)ǀNKy@D&A >?FC`?OL?;~23LE?)5"`?Iu?X`??LJO?!\`NƬNYHc`S@>?2xA @?46TJ T嘠3$?M?66 K_?@?&,?P ?b?XqCW TT9"@@?Bۀc`> ?V=m?`@?EOyHBЀXyPz9@(FF(E3@?>[`?#ERFـU|L `DA~Z?IF ?GrU.`B$w.{B\Ԁ`H FIo`?@B`3E?H' ?JD?E@?D ?*l?H?` ?Wai9^GZQ`? ?!)M>U?B^@?K&`?.QIQ% `?:Z?:2^Mk@>k?NU'?J rB?|?N?Z?Z`?ZOK?Z?Rs ?B E ?9@9:??NCS݀RK9?08/?D`?S>?M_AE@SK. D}5D <@|L`U?>4?]?L@T X1YF%j :zi 1 ??1`0RbP[ "?O_?$N$wY?S?P@@~ @GQL}?L?L@; U< ??n@!5@Q~@=։?J?0M@C?Cܠ?Te?M SU H"G @H?0<`?.? ?Zth@?] ? QX`T Q{@GNOP JF?@k|?N@?(D`/*?=7,?S?Z)?X?JF`>Tl >D%|)b??G1@?A?:ѻ?A?92>=/>@>AG9D%|6ϱQQ `@P+`?Mm ?<- U`V?$ά?U>@?Qa ?A ?P?]r?W >vV[]R:w Gk`Qk?P߼`?3Z+?R)?V3sG8V`< (?An*5?Rs@?M J@Kv?7?L?8M<14CF@QL)?T*f?P@?D@?VP`?V;ʀ?@?90`QKB0?. ?4@?BĀ?RB?ND>@4d ?7 ?E_`?% i:QWݴE3?@L ?D>@VQM(?! B>@?;W?QQ+c D ?KrW?"@]\f=s`-43m@?4@?S`?Y?F@G=x`/?Sh?Gʀ1?6Ο?2`P9o`K\'?&'΀>JW] J ?Pr ?QF`Cۍ<?K9?QY`?Q`?5SZJ@?Azs ? $E?6@?1`?0}BĀN)>?Z#?b>?E.@RM`Fa?B@?K@?AAmG[sSv5/`u ?Df`?VH?W2~?Y`?K^@PU@P?>$uq@WRj3eE)0T3??eo?avUK`Q`?'MV*@bܩ?FM?f@?R8`?= ?RH?Q;4?L`?F D'GD@?P@?[ޠ?=ݠFkB?@WQ:@`?"b?B?Kp?Pp?QS?E@?B?U`?Q5@Rc@[O` > ?[`?Y@F`[% R@d>D??% ?H5?@d ?Pi`?WRR+oWAO@6WfUFgM? @8 ?X?aS?L?U? ?K3 ?Sj`?: X#ۍ?[@?Q. ?JI`?6.d@Z/W-@?<. ?CD? vX`6ro??8w@u@?P?bn]?c;?Q(#`5=?x5?D?9w?DIM?>= F EI 0; ?@@?S@B?S9?I\?(2MNiQ{ ,Kh5MѠC]wN@5hP@J@`?L?Y`?:G?C?=L?CV ?aq?RTRR?*~v@?7=?5?%X>.LF Iנ<'3`?Bp?Yl?Ma::fQ@?B`X-L?S ?T71?S?:?9@?!}1F ?HIA?OG}@WURT Rs@5-`?He@?0FAFU S9?BX$@?SW ?TR`?F?=¿?S?X`?D`'_~ 6#B]Ctd3\>?P̀0?Zo?_ ? K?Yl?Sa/@O,Vٙ`+k ?7b?Š$D?0+ݨ`V@` F/} ?Q6@04b6QI O3?M@] E`Y?B?N?C> ?6 EG>PJr B B;`?#e?RW @?S?T̀?Sp?GHr?HS?>Έ``?B\ ?FAD@<}?@=F? 2+%?8I? IlEH? >?6; C<&ԣ@(^90{?CGd?V< ?P?EF`?Y ?]w?A<$#?B?I@?=?:s|?#?#-@?R4`?\T/?1@`D8 ?'ѡ?9`?D?8 ?!BW8"@ ݀Gڦ?B?Wd?M</]4?(25>c S<9`?/YA`+6 E?"z`A Uc\4E?L?O`?Q%?a?aG?J`?/?8E?D?PCP?P@.`RS46T ?6g?l?">@?F=?H. i-?I@7_~ bv_ͲBNCJ`?62hF C`JhWP Rھ ?, Sܦaz`XH(\1bpAw ?>1Gd2t?R?A&`?0 @{@I?K`,B`?4?+7s?@?#ij`?G`?B ?BZV ?&g0"?.}Q R䞠Dx ?C@?3`>`E R@YAN?RQ?Tj?% 9]?t @\ACI`?6?Ij@?C%_ ?D >ݡ`FeD?>O9?L76 ?/?J V[al@?M.7`WD[ 0?R@?C{`^Y`?Edt@?O@?$_@ 80{?< ?PYπ77Y6M+K .?0C`?Ub ?W~8??X@?.}Q?5 ?1 ?AQ/`8 WKJ<`C#-@ >c`N>`2.ÎMZ`0݂`?@@ZL R_F,,@@,`Bk?Hc?T|V?A_ ?F?F`@EyN`S.@9{t?7?Jn?Fq ?:?7w 9O`L1(#`*>{% KCFK8 @NKHf@?y'V`{t&UQ%_t@V?i`?HN?`@E <`F"QE,{?3?M7]?N@?QI ?=ր@BǠK{@H`:"F?:Ed?6p=?7@>яM@?Q?D 9-QLa_O?Bw?[?AMs%:@1w 5@??{?I`*B`62?=?9?9@1?D@A>@?>^?#@?P% ?XqPCn_wBԀ?>c`?$3Z`? ?"S? ? ҈=W@ZRp`EI`U>FBeO?0!Z`RWGX96S?a@?e?#?Mn=`?+^@?H^?IÀ?.g^D%@Q@FEp@2?݀??ъ &8`?LC@?D@I>V?Tn?~`Ry?! ?E\ŀ?Q2?T_ ?Tq?Jx?-"`#AEc[@Q MCp =Ni?A5N?U ?K,`?.p& ?GAH`M*2 (Bھ I@@DEVd+ K.% ?{t1M@S&`B?BFmaY@ Qg>`?3  6guZF`Tì 1 `K*ĀR?BA@?W9 ?B?@?V6t`QN 7Ơ>D?HIA?L,@10D& ?1D@?28PB@Rckzau5dt@?" ?0@YF ?J[y@0?7甠?FŠ?N >XOQJr@?V?HQ;#],UM 5AU>l.?GG@?Q^@?$8AK=`S`@a@H`Wݴ% ?2(`#b`NN% ?f ?A׼`.p@V_H4 ?ZR?a0?4AȀ?;)?R?DR`E-`XiM6D??v?Y?Z3?@M?(`?X?V`4 ?#z?Z)h ?J7H%L-@j`@?EyN`?G1?28^SS`?1@?H9@@TR?2F%Bl`6@IJ7=?I ?B8P?8`?AlKr[Dm? . ?)?Dg@4_@1?5J@?<V@?>Jՠ?:?6<?I" ?Le`Hy?p?MX?H?4#7`Qe`J`)` @+|D}??K?HGQ#3Nk`?OzրY@0F`r6`?@%!?G7d`P H3N@?HY ?BA@H0P ?&?1@?@1&B???4HW>?T`?@I P7=?5 ?A7,#O`N=0?E%?E`C@Tll #+?QՊ?L:C \R:?EXa?]O ?]/@?G?La[ ?[0A@?JK@??-n3xR)Nw$?0&OP?@J?3MHA?X?Z3H>H@Xeʠ@nDI ]@ ?*A?OO@?`r`?Z(?U6\ ?W*C?"]B|[?(B? ;:;;0A@HP,`?Q=?Q`?>歀?F+`?U,{?S ?!@+6?M?U1?A. ٠7@2|[?4?Pv?X^?V@?1;Gv Q tL 4-W?-?H ?UbB`?Q?K>?WhE?`C@?N`ILCQF>?Rg?C1@R$N0~?-G;)?5Yz?)`[WGGY?P@?N??* ?K'y?_?c+?N0>Z?H ?I|? 9`5րQJJ`?R͒?YBb?:?K8`?[G?AH^:[W?6%?-,:_L`E ? S9?6ok`;v``?I ?Q` ?:1`AC`?ߴ@?4?B!?@OC`Is?Ix?Ul"'`Y`]fR?)D@?Qv@?B4.?&'΀?U ?QQ@?!@`?U}%?Q]@Gܛ R*J`5?BԀ?R?V~?W`?Dt ?@jE?Yנ?WI?Guq@?=6'΀H  `(`J.ق?R@?Y]F@?R ?UF`?WP ?$ED<"?@@?R>?݀Lk;1?QZ?K @! ?:ij?MQ!ϠS@a]c@@`?E`D(`TY7`'?0 ?(P?U ?b(`?G$SJj ?Z3?6?L@?Aa5 DW@F_@Fٙ`? ?AE@?Lu?&T?M`?L- $ll 5P??PJ?_?U1@?8-?CP?Ca?!> Vw@H?Wv ?]W?6a?$`?D ?< ?2 ?N ?Pݠ`F @R 0`?T?1{>Ǡ?2巠?O޵?K@?3 : ?8`?N0~?P+*?5@A @F @S9N5yJۿ` AS?T@?G?`I!v Q@(f?PBÀ?V ?@1Q?4G?Q#?K_?<V@?=s@?@?=P?"S?(۠?H?@_L`>?@J?Ev>vX`2@4{ɀ?K ?S`?;k `8z=J>$#)57`T@Q$L?B?Rj̀?D@?O(?J3@I@N/e?Ff]?K3 EV `? {?^2$ ?EO VO`F$?10@04(LF[@5?JOSGdfb\ߠIA7?8d?Q_ ?=D?@ ?E~8kG`?#-@?Dq? $R`H^&47?@?LM???.H&XI( NX Th@V`<5t?=@?7* 8v2Z@?v?cA/>Ӽ?TK?P @<;g!\?I Q ?WP@?M(<49 ?J@?7@@@?R ?F?Hh`?Iz@?B?™?+p?TMP+I`ZɣH06*@S6AF?X^?cM@?W?3#-@?{`?>e,?;W?S?#Ś?Hb?N`?:?5q?;#܀>%?@%?;Ń@?8b?6? 9`?`5 U-Haf?A)<@?@W2@AKm,Հ?AC@?) "B % @1yZ $R ?D?B`?>t?WBh?O9Ji`*a`?Y ?R_=P+**@?Qzs ?8;0A@?CI`?;ELO@?? ?M5`G Ec[@?2qb@D\[kUL 9Q@) Q 6>3@?Gp`'d`V`.@?Pɠ?Ex@?B#v`?9<@?BB 3@?Rm?=L7DE=?% ?3B \A`UsE ?4р?M| ~D?-?JV??uY?58% Dll ?0N?F`@:TKd ?F ?%$TK?R0?N`;2?'_~ ?Ug2?M%?#B1V;V56\ GQVG@Dw`?V([?N1T}`PH@@?IW=?P?CC?T?a?TB77Q?>vX`?B`?RM`?W@?RZ?,Р d ?2͒?_@0C/ƐIT`Q@;)>?j`@7S= +7?Z= ?U2< `Wp`T{?7]?ZS?@UkH(b?=¿?Bl`?J_?A!?C?Yb ?P`=y?'?Uݹ?Hh``7K/~?OƐSUVZJA?3b`?( G*`O: ?6?Mt ?"$`?8?`?QC@?JQw BO\C @?H?2$`Ak?8`?S?P$ ?:63 `;iS?E`?X?F%1@?@\?R?E;`l^Qk`?M) ?]'SsK@?3J@?5RLY➀?=?Xp7?:?)@?Q?RvGU?,X?Fa?& ?Z`#= ?"Y=@?Z@?X@?*?[ ?dJf?U6?9l?Bv#C]`ߴ@S`6t`?I|?T,?K?Ba瘏3H?F*`?O >`F ,VNZJ L ?(ԣ@?B7?FPi?Bm3 Ls@M?=f?\`?<UPu>Î7M?2B ?@$?)nI ?4 kG`H B84 GG@@k^? C?Ry`?W"?\@?^`? T/JN?F??8 VQO>ر?D^`?PǏ@?5:?+KZ{ m?N@?@b@?%:?9?D5`?r2N唀P~02M ?;%GQRd G?P> ?KU?;q?R;`?DE;Q`?S9?C$`f?, ?Z~`?W?#*?(?GRR?0L@bZ`?M?SY DXJl.?B?VB?E֗Dm?8N?]?O@1 ?7?X?Gv7v?HZ ?Y4@?L ?KD?ER5_@?=$`$;M@?T?]RA?O?6?M*2 ?GI@Y Yz[R?4 ?G<:A[@cg?05?U?W\3@?vX`>;@Eg ;-@/>Ӽ,B`@x`:6 6 2>ZEZ)?Rd@?C`HfD^'9B?"w?EZ? ~@y@C@J{+`T YפVaR `M<?<2?^p?V?g?GA@?D3(O?/n?Z?4R ?"`?T)y?Oɠ?C`>*?B`?Y3?2B M@%@?2Ā?Q$L?Dz?Fv`?B#v`"6L룠``bP'^y>͠?U?PQ@?G?F(`M [?.^?S-:C`?Z ?_eo*EdL_ 1 2l`APMl IC{?*_ ,oOB`: t 9`?Q/E?X5?7GY?.歀?PǏ@?Gy/X@?(`?W譠?EM6D? . ?P`>༕:ijDX\%W$h@?*/q?& ?01?&"@?歀?Fn?`^ ?aρ@?;L@S'F"Q?P5?Sѭ@DVyMt ?4?P-@?U ?A OGGY?;.`?A[?J>O9Ft`&X?!b ?1  >ڀ ?:o.8t?BA@?@S9?+U?Uh?_?Rv?G+ ?HJZ?2+%1+D*N@T0=F?3 0u?+ ?RY=@?F^@?Aa5 ?M?7i ?E?Z?5 Mr@?5Z?V@?Q׼`?3*C% @?Q*@?=+K ? ,!*U@1K?% u8S>7`"T`^@d`R`Kp?DC?Tk@?@`?1>6 a'P[?RD?Ya E G?`?Z9ހ?Y LD@XCI-D .L>͡`D ;o!6A{D}MHR8j1)QbڀQf@.?C̠?J<`?F?Lf`?& Q&F7* Z bb c2D`S`?:@?Fa ?<?'M2( A)`?SLU?S@8Sdz 0m?I%?[7?S@`? ?M?R9i?@`e@BHXM" ?< ?O ?BF1`< ?@?)ˀ?0.?#DB@?9p{?'`"Ā?d =a2?\c?gg,?[Ń@?7ѡ?j`@E̷ EրȜ`"*R?Sʠ?b q?Q:89 D_@"6?O>z?X?=&@ ?Cā?7:4?$?;F4`?91l.;?>Պ?z`?t &B%`MEdt@?'F0`xVd+ >} R]S?1:?N `?T?CGdt ?6v`=_`l1RJ?L ?CE/`*{ ?G& V$H ߴ@,T/?6=? c S`Ec[@?@>,eUxS,`3 $g@\7@hZa@>!!@?S?aQK@?Ux?C| ?HE?<`?`7@T`WTD]@Us9 ?GRR?@2?0N?B4`?@Z1\@H%: X[T?H @?6NoSC`?/?Vƀ?>`J0`PS9D ҈?=ˆ?RN ?T?;> vX`?~`$+k73P8V`Dar E@HB-q@P>VX?܀?LE@>tD2[o "OQb[8|`B]?Ba?E?VȀ?d`?\`AKX8"@?Mg@?L*:6}?<룠?>\0qP@K$c?(L? ;?l?R* ?EXBpI@'W?Gy7 `b c V.=?4?Gnۀ?C?IM2I`?3 `O $ ?30XDK C>ӼM`aUhTk@?CO?Lq?B?M w`,ʶ](G=?DB@?@W @?Q@?TfNX d VQ??R^?`H?Wf`?O?]Ni?]ŀ?O+?G?IBb?SbԠ?U?C `?<?H>BG?0k^?R]?Kue?,d?9@?94@HU 2CJ ?SA[bU9?P`?[,i2، ^ҀTϾ?)?E ?=?Nϡ`?X=`?Mt ? =*l?}??!}Nk`5&Blb= Yᅀ?8fj`@Qg>`GM:C2Acg2( ?@ ?S?AJ)N@Hp??3 ?@j ?.M?R4`?Y ?0``D(`?6*@?MXJ@?'&l`?r?>? ? o?D9`?9ZH1VRax`A ESH0 ?U @?MJ60> ?D}`/1NZL`Vy'[@?B@?3]F0 Q '[[nCAE?G?Oe? EC>`^jc;0-@?Y?R?F?L `FΟ` BCJ ?3Sw@FN@`e@?3 `?@?L ?,F` ?:I@?C?Cp?Q_?U1k?^D??U?B +?Pb ?Vˠ?W0`?[v?S?M#?RX$@?0o G{<@?SV ?Z ?]@?\??R?) Q 0-@?6Ο?P??ڠC ! *?V`?Z/%$YR'M?`?6*@l.?h@?H3`?M6D?7 ?#?S ?a;?H^A?d\D^'dQۓ?X_ ?P`$??GF@ ?S,`?Kg ?<?\'?e ?OW`GE;Ek`VEK`?FU?NO9?4 ?GU?G;F:1`!7?L?UҨB P]-?B\ ?1 ;4OTfb[l]BW >к`?J)?70o ?.歀?<*{@! BHH9FI?Q~J`23M@E; W|C̠Ix)X?9?_ X?;kM[@LQ,@Ia@?O ?^8?L8?5zg`?@6EST|V?? `Jۿ?DU`?R`H:`PX1 ?;?@2M ?DY#$Vy?9?L@?T4?B?#r`?L$`??`F GV`;>?Jr@?>rX o?CP``Zq@UG^]E`*>?F@? K+.`=P[uXri?!6DU$J?1p?E ?CQE`瘏L룠U٠F`?:@?Cn?6?7 ?L?=)@8v?//?;x0RI?^?3ݿ?PR`??5@0Ǐ@?Q?Dx Y@=W1`?^> ?E@RD BZV ?1?- ?H&?UL۠?C??E?B ?2u ?F4J`T`?ND?aӞ//YmEր:<`#9 `?Bz)?A wC:L`?@?@7?6v`?P3?>JՠVKya``V-8Y .}Q?0j ?Pؒ\`C ?X?e`?U@?G:-?: EtP~Ev@'M?8 ?;?6?H5?HIA4?N? ?GJ?_@? ?S?V6`?N+?C !?_@?Q M@VԠ8?=Ƞ2(`@1>?8E?U1k?2cU5Ϡ$}?U$?)_VC>`Ul.;2s 6`?@G'@?I'`?}`?Kd?Oq #r`CO?0`?P.@?If ??x`?MCp ?I`>} ?E@<?I3?8E?[<?Wp`J6 < ?S@?,U) /~?B Q`*6DW`?6?;:.?K(?Y?O ?3;R@HX`W.?E?d`?L! OzրF@F"@Q 8t ?8dFKTTGV^@/$#?U(w?F?M@A]X_6S`@jEE!?*?LAQU ?Fk?Y!v ??ъ KPbkYc@^c`U 9f >f CxK ??L? wN@E?LZ`?a^?C@Fa ?5 i?R8?DkS +I)ˀ?It!!Z89 VT͠I9@Edt@7`:(5:?#7?!`?UO?KBKv~P!)?@$?C37GYb ?Y㷀?Vj@?K`>B ?9e?V?e6\ ?]Ƞ?2CJ ?.D?? K@M#5!l.?!E@/vM&@3l?Q`?I# LՀY%@?I^?N`?D?Rp/Fo$?:?Pqh ?1%?}? `?M6 Ni=L7?G@?Q[@?BBo0`N-3??9}D`P AP=oV`Eo`9➀?%P'JOq ?()n?] ?Hk;`?Eg ?R+%?:?#J+^@?"CJ ?Y@?VӐ ?/]4?CGd?]`?ed.?b@?G@6?C?;>? 8w?7Q?Ce>GM C?1k?T `?P E^qˠY=?#e?)|?F ^?B=@?5?,9`?L`?5րJ>L?U/?0t&?4`>065?2Y=@?Z)?Y`ÎLAF Edt@M@I#@EqEs> ?4! ?G1?s'V+`"@?QD?Pα`?O`?R`?P`?M(@?Kv~?AT 0 ;@?Dc?Hq Eʅ S : 2|[?%`6GM#@?9N?=`?P?C\7@b@E<1yZ ?% ?[,i?S`&@>яM@?Dw`Ky@8b?)?!@H`8)n?//?T%`?Fl8`MA 1`?9cO?O,? O>1 ?U \?G*`?2?P$?B LB`At@?MP?& w[gS?0>c ?Y??S`?HS?[c ?PV?GA?AC@?(L?*&?45@?),o?B ?S>?IZ=+%G?[?ZF}CuKI@?GP)^J=T`?6AMsH ?(-?9FG~8S`8"@??Ɛ?Sˤ?\sv?PM`?3z?PD`?J)rFm ?0o?Rn?GY?>?B4W~`U!`>2Z@3@?K&?S40B~L_)@?EZ?Bl`<"?2?S`S- ?l.?N^?9p{8L`Kj`BòDTG@@$q>Պ?$@'MRRH>.L?32ܠ?:ϭ ?Y`?NR`?@?^w?`G?)F?P݂`?G~8B:HZ ?LB4`?@_L`?bO?[Z%P1T ?>v?)B6V` V?"?@JL`\&Ul@Mŀ9 ?C[&?C ?/4?-nFaJR?G>?4 K0A@ChQ?<*{@?E9>m@U" ,r`?Twe?NO9?\`?R҂4Ȝ`80> ?0m?B@?9פ?!?E=?R?@?= L@n`P~ ??y?P.+0j ?:wLlTZ?* R?P*`9פH`M?4*?3 C̠D>VJj ǵ@?Ja`8[`E ?M?QS4ar`AY?9@?T?PIY@?:7EV# N1(O1`L`/?Q]?K?4%@?F?XTK [ [RFV@%Yz?FI?:؀CxXWlLE@EEG<Bs@?@?4@B$`SXFU ҈?9Z?VB%`?I/@?Gc?`x?Y?D?$.?08?QFQ?W?F[`?-W?@BÀ?S`?F;tL?N?D;A=G>@?L@?Yפ?2]NU;L`ZٍM@??h.@>~F?"'V`Zh I?P`?= S U>@?;^@?^D?PH@@8?8f?V؀?= ?D}?CsK?Cۍ?݀Pα`W>Ew?'???'hEB,>M&@F}i 3?LE@?aY@ ?\PX@?D5@?354TG?;AЀ?Gm€? #?4q,5tI<  8`?P B@?H&# !&Q+?1Xm`?Z?[`?;Hf@Zr@_# 9K*? @AH!L*{@K>>Jՠ?T?=T+Ka@?#?ND?=@?4;?W Qe`Y܀MR̀X ?&T?Ӽ?W$:`?TtIT?B9i?^#?KT1`Xf?H ?aʠ?Wnۀ?P ?S??RT`?6L Now??39 `?WB ?S?#?EbB`?W ?B"]`'y7%Mز ;?B05 ?O€?Pa~@?ߴ@?C̠?Y?Rl"B N?R)?EMh @?JOE ?R9i6T@Rlr?/`?zU@_4`QP?@ ?SL!l.\BXL ?Pu??_,?il?gE?Ng^?7]?T ?S4?=?9; ?? ?0p`D|@FG@?7?;Mހ6?XY ?Rn`?4B?Qw?Te`?E?Aq?1- ?0^3`?7%E/`Rs0@F@I`1@?IH`?J-?BlG ?=/?L ?S̽?X6 ?;?DԯLO@?@Uk(Ef3@: CM`?IB A~?/e`?5x5?'?+o?5?_@1>+??N?N G R_%`!Ms?V`S?A[cb-8S"`?K ?? ?Gl?U1@?R ?2T`@S`L. 3;R@?U?Q{G@@E|@?8?C?RT ?S1 >0?!..L?%`?V?U?N ?RA?M?B[?6 4Aw3`Ak8W@?B"?A1 bc߀LF#jG<?@>'?6?QC@?#M-}G0 ҈?6`?I`?V?Y,o?Heʠ?BT`?V @?Ry?0@?@>_?M ?5P*B,#?><?#RD?PV?@;?XV=GZG?L@?Z6?Q`=/ \?^7?YyB)<@Cā2#?<?QZ`?`N}?Tx~?]tF?^_?R ``?K ?Q.,?GT?2@9r(`?R$`?TP?C$F 9 ?)S ?H&# ?@TR?@?"]?+B݀I?R; J0`Z6I`?Iz@?Js|?٠@*GTn ? D5`>?`?)@.+U+`` UwP3O$C?! ?S`?R?Lԗ??M`AF\@n@>(^.;) @=A9J7SRTKY)Il?/X@JR?2?C%_ ?LR@?F/ ;N R @VC@Tì >¨B ?M+K ?1n`9.;d\?F?Q ??l ?p?'?1p?:?2( :B,5t?3`MZ@"Eh\ KL ?B@?LA`?5$N.L<*{@?`+`?`"?4&?*\?#'8?4j: ?6`@MF1 ?@@?2<`4>n@?"(Y ??J?Qՠ?5l@K) Bg ?RQ?X ?.CW J D?(?FU?A{?8O? z=b*N= TU{`]|]}?48?Xn>Ӽ>۳?IyB?P\?D#?0.BxQ Q\@K0A@6F UmDmt C{`/?>2bLRV~8?P?FJ)E5C :]?'c?Sۍ?Qd?E ?6z&-8v܃4`1I?!D@?9i@(25R@OHF?@ ?Bx?B`_$@X 3ـX_mC|?= Q?Y)9➀Q$LD=;?:?CwB@R6+Hf@ N`E 5MJK> @?7o?7i ?)/`?% @S9F T0 YD@>V?NtB F{7 ?O@?L ?}?6>H(L@SW F؀?6T ?2G =?QLZ?:d`?#H?P; ?HKM @eW@fD L? z@;d x?B/?/v?@M?KƜ@>>ڀ?2h?T }`?U?#?%Q{Vt`I@?17?1B/V?7?PB@?W?RY=@Md\P䤀(Mր@P@ B@?;m?[K ?S`.2[_)( ?CE2IU Sv `% @?D0?EZ?Q+?FbOY=r;7>Ǡ@=u ?j`@?a@vX`K~- ?B.歀?Q@?.ZΔ O~!`8tUHdԣ@M,d= ?ՊOoF?/h@?S9?GF@ ?Z?$R T#@BΫ?%f  Q ;`,q?M(@?\?G`HҠP^ X^7Cܦ?:N,@2͒I/`36?8>6?&<?PCP?V5`?=`3Gx V`Ni%>Ҁ9`?@`#AFY1?1_?0``J Q얀=?I57`?MA"巠?6?WJ ?Fz@?3?P?@8Lya5@c Gk?A}:P^ L X?=[ ?Haf?2u U˞ _eoCsK?Oݜ?U$@@?'@S`\@TS. ? =F?H.?;N ?P*?S4 ?G0M?Y_x@?]5?D1`?/,??[?"?#-@?aY@O`?<`?=X5EN@B1?@9?;Hf@6?E?PDh?1 h?@?K?Jz`B2J7 ?@A?4Q`V0 Ot@EBn7]:`BFΟ0 ?I@>DZC)?P ??&@?6 ?.歀I`5~@?D-`?2Pu?;+`?EnT?% @?C| ?S`?S?9*=?>)?S ?2-WNϡ`H5?-/?PeU?LY`?>@?D ?0@+?"O$<"JG`?U?U?OL`?6H A81?A?D8?SI?F9V$ ?A ?Vx?O2`?\@?^hw?d >>@?V`?M¿$E?@?@?Dq?G?J?S?QI @c U]ހ)?H`?E?!N@S&0 >瘏B3 ?5f `?`?1_?H[?A@`ՊCXVN`TBB O L,@?G?\E^?W?%-`EXa?I?V CPHߜ?I?(J0`R%@\{%J?E$ 7RR?L ?Pu?6(۠F@3PMR̀?K[?Z@?5)0@y`?>c`?QoyEɠ?Y?T-"`1{?65>`=_2`?B4`?Q?*3U?N-3?V3T?J?-<`@V2S?(I`NMWi^I6?TT`?]yÀ?.;x@R`Q?J`?T,Ġ?++L ?E@?\?OR?6?R?Uc?I j ?1@?=C43u?P2٠?<`V&P-\StB O`a;`Z_?S`?;`?F<?P5?_ ?\? Pb@< `>}QG0M$IM: R,ʀGA?WV*?X3 ?UO?R ?7vX`?3H?LĠ?Wc?T }`?0 LZJL!?#b`I5XUT@r?T)?T?l?#`8@?Q;?UZI J$w?=IS ^lW@OTm ?J$w?]> H?PIY@?PH0cBG?@" 8`)rR`M?L@?S/?;d F?I ]@?RvE?bQ?Z`?B!?SA4@V7RR?Z멀?af ?+Q`8 @?Q??wU' W@SOM~@QJ\p@=?4t ?F?[?[_r`H b_Sq@'5-`a8 @f^ڀTarZ]3?Q@?47@?#H?Ve?U@?<ȅ?!!,C(RsRq? ?^Y`RM*Pa~@JST&J[WP ]"L݀P҈\k@V{E?5ɠ?IZ?D?G7@?J?Bܠ?E; ??M`DTGS@ ?;8my`>`?^l@?eq?`?RUe?GA!6?>I?Rܠ?Ys?VB%`?H)nI @?/%B? ~?9 ?A?Et?<ȅ?G@?3@Pe-?NV8ɩO'm" +?A9 ?Rj̀0.'?S*"aQ[p@a~@*U1[?+k?G? wA˩?3 : ?[L ?V?C`?dg5?P9?S40?[>B\Z`M@?PG?[x`*lLS?I@? \uQ8?`@u$?;=l?NQk`?XҠ?U?V8`?J I~M`EsѠ[ R ?0 I:_O E7Fk?E=?GBU`?-+K ?[ ?AX6 ?:@?9H=6DT`UFA@& =s@KPABz@GcF?G ?S@?6 /4:tG"?2 ?U. ?G֠FHP3f ?4W@?U. ?I> i(ԣ@?*&?6J Y@?[d?^B?N= 2b?*h ?C?K ?PG ?Rv?P\?*RC`=6D?( ?Ol ?Q$L `*$@?H?M~?DvX`I?8E?[?E@?1- ?N|`?#C6b[`J9R3z?Q-`*~v@`րW`V?;"j̀?C?S(mV@C?S"?aZ?Z?_ ?^E-`];?//?TȜ`?!I%U"`@?Pp۠?Qk`N?B، ?G=`?*?4;E`*?Q?[s?\C@?Ca'>?Kݨ`?M#`BS??`f?UJ@[ ?G?Z?U ?Z=?a?N2;`?GC`?TM$KE@P?PYC ?Rm ?= ?9yG Y#<?GtX@?B) 3IDE@?1i?V@?S(?E ?Ng^?1C?.b?Wq `?Ot@J`V ?Z`?F .;x@)ˀ?1>?i`?-WE^R?D?R{`?8jA^@HL@9O`+o?@?E?Qzs ?UG^?J^7 Js|3?OuY?KAO 0 M@??NPK$?@`!`?`?] T ?3@?X?X<}Xn@$#?P?L ?D?9i@?Qw?`"c@?V`?J@?Q5N?JI`?E!`?W`?Zj(?A@??M?5$V:?\ ?Ul@?6Z?@@?;'y?D`?Wuq@?U?B@? C;xPg`I|??9?N\e+ t?R?Lq?A>@?B?Q?K*ĀӼG ?6?;r&<c.L>`?2`?Nz?8=/@?8:?I`?33E@VDUaC8?`&OP?6%?@| ?Gc?K?0i-"G?.L? 8%RjTvLSYiX@E ?S#?Haf??H0??q?}@PXJ1 ?h Qk _9# ?7QFQV6`?.? ?B?@IBM`?4#P`^Î:u?;>I'd`? ?I?>x)>e?=?H?E GB@N`?Pǀ?KUrR0?1@$`?$#Saa [aA/?P`?]R4ReO?Q@?` >@?,ʶ4 ?E}@?Kݨ`?2Ԁ?9?U> ?KBP9o`RL ?"@?5om?'I?J?Lv5@"z`<?Dt?Q%?`>`?KhPS ?6?Q- ?O`@WrR ?6\|`?8W? wN@?I??[`TIMZ +2? ( P&:Hj.?B`?;p?% ?P9o`?QA?3? `^I`?3^p?+^@?`?h@*_?ɠ?<?21?8kG`4 [jkQY`?G?K1b RU`Pm8~@%|@?L'?b?Q/9 ?S?^-% iGo?Ad?;v~Fa/K`?R<`?:I@X`TB@?n>Ӽ?7Q?W?N=? ?E ?EQq`_ S*O`L`'?]s-?`B}@?># ?O-?3| UX^;0SnMoV`?<'?5 +g!?! ?0Z?2@? Y`dZMT?Lxg ?=WbW`V@=?4y?U"`?Tq\`?A>?0-+K 21?< `?57-)@,T/;@LS.`S`2S?E@??@d +?7?T=;?T?P?Q ??1Xm`OR8+ ?Ti!@?\< ?>7`8ԣ@?# ?DvL?SL?U?4@, ?%@?*$@&<\, `?7c?A?F?U{?Xf?Q?LWRRW4F^@D}4@?ԣ@C`4 ?S`?M 6O`E@OHZD*?P'S?US8`UbB`1?J= ?9{t?;) ?Yk?LXHVm@M?Fޠ;WG`?4?5FPV?F??# ?N @?<@d\?G ?6z_d'Pa~@Dd`P0 ?1?,?L@?O`?n[ [E@Ja`9,o;q?;ǵ@?-Q O ,G ?/v? d M#W@F@9@U+D:I`?W ?@p?B?TW?`?[@?E6\ B+%UQ@XҠR@?r?W ?WSk?2cN~jN{?0Ժ?#r2J?9A ?Y.> `J\?)XV?%FF3 ?(%?F?E" ?0 ?Gۂ 5@VDPu?C6 6eD@( ?M?8%E[?2z)?" R?h@?7@ET$0d ?B<`?!`4D?!D@%rTK PA `e@0C?ID?Jn@%eTru`RǠ?1_ ?Q5N?K?C~?"-W20 >IHT;`?b ?HD,PW7?4&, E K`?R6?^G?N]D|@O@A?9]?N`?L~?@?Q?Hn@O%<X@CsKM`2`4 ?Bv?Ni`:d`YW=R$+|?+N[LTGE(?k`?%sѠ d 6 )?1܀%JG?2 ?V @?kG`?UN[n?)?(Y R7R5K[FG@b!Z`O4?Z?6.d@1, 9?+@?Lmm?!6 ?H /P @M@?J~`?;p`_0`;Q`1*U@5@!*U@>?3z?2I? ;Qg>`L`&#j? A?G?W$:`?Q%?/;٠?Xр?\ \|`Gr&`?$R ?@RB4`MH?M?[?71e"w?J#^?F*@/4?(H(?MO ?P?; qJ?7|?PM?Q?Rb`?PG?G0M?PB@?N? 23Q6@D$R =,9!v ?M?WΠzIm`?16?F?) M`1kB `AC@4J`?3 `?P ?F`@D^`U$@@G`>Ӽ:R6 O`?5R?D@?vX`?K} ?^-?EװXyb[gR@PjE>y?]?^]>kG`Pα`@E; `\ f?=?<P?Y ?PX* HSzm@?C/??M`? i-!`>p@= ?~LQ?Pր?PTF>x?9; ?5sѠ?JT?X? P<@?D`?BCJ ]~a7M@6*`??t ?4IM?X/?_`?P14 S9O QE8=? @ԣ@?9?Ch+xET9`x5?H?B6Ze`a &S?A,$8AJ)V/.?P?!`'甠?H@z ?6H 5`?&9]?L@; &eD?H?:ڦ?SG`?MuI.L?&@13FK?.M? 5sѠ?1. ?PԺ?I?E4* ?BtCR^`Qt`>)?7rF3Y `{@Vv`??I`?A ?>Y?Bo0`?6DW`>*.@/ ?`)TX`Zu1%?I?AZ`?G?Wg ?R@,S U`L?1*U@?:~v@?=8v?[V?a|@?L ?/9?Lc?B`LGQK`?1?H0?,Р?>v?G@?Z3?/9?W?b@?_HZ?G2`. ?'?F`?, # ?F @?=aU a*Sx0 2?4<"?VN8?;@Al.?P@?Z|D`8@\/ Z@R<'4-`? ?G?^ ?]?G{*T*@XFGʀ0^3`GA@$\հ_*,@RQU&NIN!!@[U@͸?E0N2`8XXIF2?%r?IdhCcPYC ???@d34]@>#S@G@@?D;?FCT@?ApP>_YYo?8j?Pd7?(-?b@?b{B?K?3zA X-K?ij`0= M4QE82?SU?Y ?0 Lȅ7 ?S?Y?&ZGb>3@?B`D0C`?57`>@?$+?H ?V?Qc-+K 8Y ?P"?U.`?5e?0d ?/ 3%_ ?D ?awn?[*Ā?7`Ek`G@M`?L?C?U? @?Ab ?Mր@?_?`@?1F @Z?Cz?G2 j@2 +? F`?EEV >ق?-WOW[ :  ?W0`?d ?J@TU\Ol ? ?2w?:a?Cw"™F`?GAN`S7Ӏ?1F?B ?݀WlZd`?7@G|Er?OX@?PR`(O?6Z?M`+Cg8<{KNS RD=;?F?J Pޛ@R ?MO ?T[?:? QF V?F?U ?Cl?]{h?8NJ?@]@?Os'DȜ`EV`?Q@?O ???GMCKf ?$c?@`?< ?D}?JQw ?OHZ?P?.g^K /?`?dN?4K܏`>J`?;tLκ@"p6Dj2M`?0?A|?Kk?8V`H?F?825.к`@(lR ]+ ?`K`?T7@?- RCJ M&@?Mt ?Ox?!܀?D?6 @DL`?1i?Hq GK "?@P`?*6N7`J7 YSe3'?n@?, ?I?J9 Z_T?l3p >V?Im`?\, ?PCH}T6@)?;?5?#>4/h@QzSM1F+?C5zg`? `?I??N4D Pz/?C<?NN ?5 u?H?8LR@?@?C@?*@E \C:9@"]?ij`Ο?? ?G?;dNO9I ?EC?F="Bt V4SS?G ?S1q(25?D?^} ?b{?V:?D?+k 0q;%GAKW pY| ?.Î?VN8?7@@-&@?>?Ib6?I Q ?N唀?Aw )K* ?1` =?7GY?as`?bB@?8`>ݡ`?S@?J-?B M7]Jj ? ?A?PV?5 1 @I``yg`b [(Tǃ0t&@$ [V@5+b?UYzILE@? eH=/@Uo@?:?S?URX?a@?Qg>`KP ?C5ՀFҀKa@>46gNJY%b?@S?KQ-V%Tz$0??23??*-/G!``;x@VXcf`x`E`3@P Rd608@?;N ?>i?@1?;`.xHe@8 `? 8vK9X(6?3`XX \`?8 ?V0?K "?G?G*`?"$`$ >t%r)N?I" ?Rc*PC1_ ?$@??< ?N?PeU>b?R; ?:?JC?5dt@?2?E+b?J`?J?D_@?'V?BF?]޻`?YCD1(c<`@( > Dp KkI@WU ?@?M1?L@?u YrYZ u A`TN@?C?Ui`<:R5?#?:7?G"?c ?:K@?Y`?UbB`3 cQ@_@?BI?6`}`W5??_f/X@?6V?Rq ?V?O`?@j DU`Lq?E/~?9}E\ŀ_`Gc?1p>nӼ?Wv ?U]`?6?9 ?M.?MTX`a)<@7?:P^ S} X??SI?R ?? ?D)y+x`ND??a :z[@?7r@b??Ys?H PC`?Q?S׶?"F?1Ϡ?Pi?B/)?1NAЀ9`?: ?D@?T ?VM!Rg ?#9 `?Z ?L`RY͠?,݀?X?Ki?7P ?HA ?2z`J@QNI7i@.к`?Ji ?T_ X.F6`?Qn?%=\2h ?`|?)yT?B?RM*>?Aa5 ?J#^8O `?U`?V>N ?& Pwq`T;>;x@?k` g$:`QB`?S*?DF@]j]ŀ??@?V@??6@C$`Vr?@?Vv`?RǠ2E|&& R@J@?*FC@`#|@N@?A:n@XJ@2A ?9l@PݠU?9J?S?AD@?M}E-ր@> ?Bv?LL&0 ?E9?@u?$#2 >W ?FOP?Pq?T 2?Y?Q]?1 `>/?{`?B}tGyX/BL)b`X! ?0| O}3 ?P)`?!QSFz@?E@?D? Y?$#O>zD& ?7@?X`?\`?6UPޛ@9`?BΫ4&.ZQ`?BO?L ?%(?C ?U+?@@RH!`G@>4?TG?T?-q@*?Ht ?^ ?T@J`?Jڦ?^~j?8[$IM?YHl ?Qm QXQ9& B `XX~| %?O@?Q ?@Ժ?1@?9@?<16=@?DB?\`?O: Xa/E?&\|`?Yؽ?J 1KXܠb?T?G]L @f\`'\`R.o<_)@?:Bn`U/:u?C?32< ԣ@?<A9?)\?O޵?Cl?( @?P?]Yc@?ZI@?R8?K?K1Z@?(H `?"?^N ?ScD 9?E[?>D/{GF@ G ? J?F?@*`?6`??cʀ?F?So@?X ?V#j?K:tQ8?6t`?Y ?M 69w6T 10@R( YlDe`A<H?CP,`?Rԣ@A>+.`?3?GD?"#<@t6@WV7+E$L{XI?]?OL?R`?F6?`?LA`?B N'C?07>ڠ?& "b?2NC?D+?9p{?D; ?AЀ6@= 3!EXEf?A_?Q`=`O?I=?Tc?7?B.?O?T3?a$@?Woh9À/K`?EXa? RR ?WL?X9`?BǠ?D;?* RQ4`=6 ?S`?Tq\`?5=H(?x?A%?4cE QwGV>Qk`LKhZuZ\ G8 ? 8v?G?M[ 0@H ?;0A@?WO?Lo@?6H?Eom?2IM7]Q&}6??e ?@@`?K?a?e`?]?3*>?1`?Ox?5J@>`A8|?`?>͠?4>S?'[@*n@HL@?R@?P?$&.@?*ijMN`X)@Oh@JGB5?G`?CvD?@S9?5֗?P+`?; ?/?6`?EnTH@U@&b?JvǠ?H(?T??e ?E+?*1 GC GU[LK4n00OK`Wpz?S?K`?7 ?, .Y?,9%E@SC`J~`?CGd?OY?Tm M`???K?80?Pb?WI?SƳ?VH.?2s X)=-}?Y7 ?SR?#-@?!b ?E˞ ?Q ?H]?9s?Kj`? =FWnO@?XC?V?`GA@GK?q?(@LQ):o#: O `UԀD?l?Ae`?TB+@?RUI?D-`?K`?@Ӡ?A@>9]> ?0+`?0ԺUǠ^N`?L: ?\x?VS?C~?G?[ ?`?QD?(^pF6Q5?? )N?FE/S`?GW?Q[`?4|@E; >6?\|?Wl 5``G`8?(?Lk@% @T; D,`?;ǵ@?u (?P7=`?W9 ?/ 8Y ?D?`\@?[?@d?6`P acZ ^;x@KW>`?84 ??. W p\< uq@?Zp`?W?5@' *O3`@VJEdQLT/..L0O@D+?J?Q\D?;N?Mu?U?E"?@?. `N!!@Ca?P+*?V?P?Ly?A??S9IAI?A}?Ua?3QE`&<=WD RZ?$M`??Š?8`?)(`,X@TRQJ< ?DJf?@ P`E#UBU@%?#?G?`?Fz?. . B5@:I@?N?>4[ "\#Y I)QàE`??K5 ?G@@2F?(?c?b?%:5?8w?J@?Pa~@?4.)??1N?4Ӗ7֠!!48@| ?3r`?B,>?P @'0$`?Em?P`? ?J[8|`a ]r PTR٠5 0JH`XVΟ@G'@?G@?Vl?@@FeDKm@҈3̠)Bb#'>ڠ Q G1TyHb?AI ?Q4`?@?7]L ?RR?R ?V?F#+?*$@?InI ?-Di!@O#*?Q` ? . Vn ?Og`KYnՠ?# : ?UV@?Q ?13?M`7?Hmy`?Pr Er_ `W`OޠT`TK~- =/>@PH??! ?"(`L&?6X?QmG>9F`?@?M? @?I֌?8RL{?G_~ ?R?E> ?% ?:L`SP,`B?T@?VW ?&@?(`?Mt ?6aC?N?I@5?p??(2w@TR>?Q. ?_ST ?R?0?D?&`F/ 9.??$2 j@TM$R!?Q3`?J6?'ѡW]ؠK{@?21?@ ?4Ȝ`@'SQr`PSQ=L ـXCO?OW`?O EqQ/9y?5G ?A@?A5N?QH?S ?.U@EO Q N#'?:>??! ?6@5 7hE?I`?J/@1?E?Pi`?'vG"1?=ݠ@RV*`,{?>BW d; ?-,?\j;1@X]-?0R4O@@V? 0@?Pc ?QO@?Sh?`2`?V DXTt@|?@58%ZKmaIY@AY`3\>.f?2`&\|`EE?P?^'`? <?C.&?M?X-?TfbNRW?K??AkRJQ-`ڠ?巠Jo XC`?P?R{`!Z`B&@?+p?= ^`?/a?0L :I`B?DF?4YV^t7- ?Vp=?^?C\>?0x`?VeD?Lꊠ$h@?A?Ws?@?W"?D @t&FZCXa?Aw?F @HS"`>[ ?P6$?DD?8S"`?4Vy?2`?X8W@?@?ÎX%SE2?VkM@?[!p` `;K?;;:?Rr{@?G>>?KF ?Z ?O{?8`,`T{ɀL_ ?C@?U@?R ?0mB`\`?Hy?6gDP A:!`:A~9FUm;V;> 0@`?2`_'`?QU"?Y ݠMS `<V ,P?@ ?Y`?SmA?P?Wѡ?GO1@?Pɠ?b`?^`<@?D=/S Qk?@14 ?0?4IM$W@Q;X Z3?Sw?<. D<"KjkD1`?P?^`?&.?U|@?A4@V PGA=GNHB $#?5?;"OPD`S `<4?EL?H6>@5 ?Tf`?GJQD>S?Pu??\?P`Edt@>Jՠ?P` ?G?5q?Zր?b?]Ni?S7z?A?%A _05?Cܦ?W- ?/9?;?IO`?4 ?A?Q?RA?Ap?BG?K,`3?)'`?`@?V=A3?A6g?WU?JD (^?Ig?3@?9g?P`?+68?>?P %@?CX3S/?L-@?8z?D&.Mc {[a ! ?5CU3g89:IM @*@8~@Yt2u ?c_?W `P䤀;@?Oh@?C7>Ӽ?ABz@?Nк`?m9D@?()n8?W@?`@?P[@?>t?J(?C[&0@?&ro?>H?R ?U? JPF`NP?FT͠?QC@6R/ YA6?>@H@@J@?97i@?4ll 8@+@Pu?K`?D?C>V>`"PuTVyauU`?=E?B9iJ6 ?]?Se@$IM?K ?a! ?[=l?3xG@c ?N":@?6y@?ER?^۳?WO?C+?=$M`GP@RW`T?B?Z?HW?B/?K,`?K3 ?PNI?D&.2U`KLz "?=ր@?' `?Ii@?WV*&0 _\_B5?L ?Q@1`77@?6\@>fD-`?ON@?UD? 1B C1qP?xY܀\$T1?H@@?3p HI r?)N%`1+^Y`- ?$9i@Q '?FC@?d@??J>J*?6 ?S0 ?Q?W?Rv?D.?@ ;Ń@NU@? `?:P^ % @?$! VOD ?LZ`?W?@V> ?8`M?.>?ILCR?" ?JΔ ?*RBS`S$F O?@Zl]O>z0-@?8%?Ak BTPS@?3̠?O?0 (+DDV}[ˌI( ?Y?SCC  @?H?`?3A5@+?RM`?R@?)@?R?`u?J~`??+OBUI@6t`HT;`?=] ?S9?88`?)פ?H?T@?X9`?:(Ps S߀Jh A֣`;@ALZ&`@?*LY< TsK+?, `?S?Fa ?3?E 1. S?0?Z!?0pUMh P9o`G|U@ TR F0 ?GV`?]6D?[?D7&=d\Cij`L`B H:`%sѠ?$&.E5C D5`?Iy?ORNsqPL?B، ?7:-?O ?Q?>Qk`?D7@?&41(?A?O?7jw@<3BT>SS?1cg?Uװ?9`F.Qk`? q3E)0RTAF>?'΀'GڠKCOO>U R B`?P1?I_?U3#[@*89 ?_?QL[`SE:@1T ߴ@?6?QAa`?6B_?EZ?V͆?4]???LlT9p{$@?\@+Hf@?H^?F?k?7X`?FC>`?M?Xh`?P@ ǵ@޺@?4we z@E@N{J 9@W ?C:9@?Qw?CP?6 ?To*?Y}?Fq ?#*"FD?D9`?b&{?G U)À?P? x7? , ?Ry`?X[?@(l6 5@8`PQk?2NC?Q .?JY@1 `ؒQρ@?J?*\M<AXm`;)Bh? O?=?@K ?E`?8Y ?*>?P?UX@ {V@=@?KJ [P[7P(lQ VV`QCSw@?,(I`?R @?Km;i8'@?E?@w9`N@L케?#\>?A얀0 ?4P?V*@?19F[`? W?,݀3?1?O?Wk?\^?DNҀ@?O8 ?R/>ՊP4@`?OS`?S9 `?>>P[>MUJh S>豄?H `κ@?Cz?aRR?I`̈݀>ҨB ?R?N7 ?0c?N @?St?3W ?/@?Iu?2p@ @D`,X0@?:/?T3?ab?^ ?Iˀ?R]?`@?HzQ)Dt?A ?Z`?c?BW?" ?^"?BG$R ?@obP\At@? ?~M@?2E|?4@,e;v~?%?#?1HUT@UzP$Re >M@?G /[`9,o?<4?'uq@?.g^?O?B1?<հ?WLI`?T*?=-}?H@?M? @?0` ?49 ?T2A`?LF@Jp1B|[?Wp`?ZU?6;mU!`^@[G`b-@` 3#? ="`? ?.U@?]g@?R@SKȠ@`?WG@?Xa?M./XO]?B&@?[`???!)?Px`?6 OK`I?3e?O ?O ?F?t ?FZJ?KX-zOJ`?Uv@?GJX G3?1K?Nl@?D?.b?RO\?R>YM S ?4]?8|?I?.2;;:Lj"N^YNk`?E`?A3J@C5ՀH?>\e? mQ R`A h70?Ir?LX@p۠TC?(C\>U @-X?Oݜ?HZ ?D?E?E$?J9R/vO?K?X1Ϡ?S?ȠTì F#?AT ?T6@?L3B? ?E ?XPd?K8`2F-E?I`?Z `?[?S?@?4??€B?.歀?U+?Ak>`qJRGO?Pu?R`?6OP7P H<@?VY1?G?-͸#@JQ?;?*d` ,oJ @]wW3I+VD9`?9ˀ?N?4+?K ?WYt?A?1 5LO@TJf-?SJ# ?7V`#?28PPy@c?N2?P ?<< S| O_f?>v?PL ?EV`?(O0 ?Z?DJf?R@?R@?<?+`?B@?A%?'[@@@?7V`?]&?ar7?C?@?P^?U 4@?N& -WD?Lp?c>`?Z.@?Br{@?/,?1@?Qv?\~p?X ?UO ?W!?U$ ?RCJ ?P?G\`uq@PC?5<5o`Ks3?F?ZG?6` ?Y?b?Qzs *\0 ?D@, `a8Z멀?95?3% H`<&-R̀M/Zf]AY`?M̟?@C`4&>)Fz?@9@I< ?/ ?S\@>M`H!`@o =? @?E?WD?8?#>H(]~_J?)<@?MT`R!QQK@?Q<?D#?M?D*?&?M&?.L?O) ` iE_̙W .` ;:S@fx2X>H@?4@*`?>? >:>8?`'M.B.&{7 ?H ?@t&8JX 8?X?fY1?Y?FG@?Y`?bk?]T?C\0ߴ@?BCJ ?X1@?S?L'?2<?(?T>S?WӀ?\@?c@?bQ?Z?C >Qk`V.d@T?:a?[2?I7?Rs ?aJ?M2@`? `?V9 ?W?Bw#r`A` WdiV@?Qe`?QF2[ ?4*JO]@Y%` ǵ@?RY=@?B??0t&"@B|[JP^ Q5?)@?WBh?; E& X\@?5?GP P`dX_>?2NC?6?;|B%`$<"?K{@48f`3`?}Q'@@z?X_ ?UV?=A>@MR̀Gm€?+U4X=L7?@@d `@D?V'΀?M0?4?>4F!8X/w@CvP/`ncCC?zV ^N?G?A: :Q%U7U?P?IyB$@IנV؀E`?O ?M E`?0@?I?U?Q\@>zL`B 21?E?Gc?BJ?"j̀@K>C p?;?Q?[@?bD?b`?O: E_`V}Bx?T7?`?J`'?9?Sx?Kp)l@$? ?Eg ?:I@F[l`\V^!3%_ ?TӖ?L@n`F`7v?7<_>;x@U-S 7?A h?-8`2!*V A{W,u8-?Y̫`?Ro0`?Vy?8?@h?*"L?N\e?U=5 i(?Z@?U]`F`Ѷ]j?/?43Z`?*d`G2`G@>ǠS- eAM"?Uy?I,o??p?U5Ϡ?1D@2>@?<3B?H(U >Qk`:6Vy?@(l?P`?N ?6(G?3)J<4e`?)57`?%=L케PJr ?GA?P?C0X@P1b%S3?P?J@>f?@J?PH@@?R@?L{R 4 ?%G ?8#4 i?b ?(?9Z?B`DI ?6?T7?S5I?R$?El"CTX`Vq Ut^ AI 3 @IF) ?'@GJ9V$ ?POb?DQMp@?^?cIP`?6t`?,?Vk ?Al.:ij?=Yc@?B6?08@?N`?N0? . M @Z@`D! ?S`?T{ɀ?G[@?R7@?U/9< .L?"Pu> `M:_`U?@?Pα`+L Qѳ Q@PE.`APSOP݂`?1?MMP?:[W@S9R@Iu?-,?#E ?8^?c?T]UoK!?B ?/{?IQ@?U "( @C`?KtL?OQ?D?Qՠ?[O`?`*?Oj`@QqH@@?T"?V=Su|?86?]3`?Y%`?V~?^`?[?S>?P!J@?;dAAЀ??@?B͒?5@INT9`e,{[?F w?9@1SUO-C?8%"O+D???nCg8>% A!R"]`TONK@LGM? 1 ?X)?\հ?PC?!D@Q0TI`?z?3@?pF?J%?VR?28P?0K?`w?ci?R|@?W5?_&`%?#UX?0o( `?6*`+%]*b0`[E%?2"]`i`H;??!Sb`Uq@A_% u#HLZ P@?;d ?L$?/=T@] Oa?' `?B;?Jh?Gw ?<?A9 +%Uf@v@?A `?S3?ZM?0S9PZ\?V?2@?.Î?N?W ?+ݨ`C$F ? ?;,`?@@??3``f &`@US@Sr ?I`?YP?6`:{ ?3 ?PR?Mŀ?I8@?N|8?N\e?F#?E?I ?*>@? N?@{C+FRU*I^JI0ӠQO@H"@XC8aVp PCa?*i`=W`PBs@OQ33 ?>i`?4wee?CV ?Q ??7D X?9w?9ؠNdI?@j ?A- G|G+@?0 #Q>P?GK?EU?8^?F?#-@H`?@w?Y?l.J}]`?-,?=?3k@?H_G[{n\ @D[Պ8my`QaS@T \r]NBO@>@VVX 8?K'*  ?F$=uPP VJ'L+@#ۍ?>4?>@@ӡ+b@?`COL?+ ?8q Y@?+ǵ@?&? "pGA@R W$Z:kAK?I<@?ZV?^w?JD2F?H?N?O ?2@>4?/ GabDz?Ne,9,o=)@)'`_ڠX?HQ?/~Q[+G2`BB@?=y?X ?S`=<`@DQ_/q?`?Ȝ`?K?U1k?J@?'/4F"@IÀ?EG`?X{?S\@?S?C NM#> i3ij`*@?TL`?T`?L:?Qip@?=ˆ?f&?Aà?`L?P.@@Yπ>@?*?cg?Y3?d`?X?"fh>S@0H@@7 W4$@U.L?0 ?:/?H?1 ?IR@?`F?Qy7W2EUl`@(l?C\?K3 ?>% Z?,a[ ?B) ?# : ?&L?=8L 1l.?@?5M?D)H3N??C- ?I{t?M9/nP^歀"FH-?A` ?V`&n ?L?C`?5dt@?L?OX @JI; 7b?=P?Q8?PeU?l.Lf`8f?#*z?8O?KW? `e@,{V Efg@N@?Ob(UT@;p1w(@\РPYC ?P?= ?, ?QܬJr Q` ?8 ?Z_`?O]45T,(I`?Mf?D?l8-(-?-E?D_@?S9?Dwe?B/?@@2?7I?S?N?J1`?B͒Ǡ?g(R`C3?S+h`?VW?@@ 2z)?C> ?Y?G$?)A x9%?AV;?D?7s?@?Yh`?b ?T"W4}Nn4&.4}a@f`SJ@ ˀ?<3B?9FB.21?E`7[@I?72GV "c?Q[`?K) ?%(?"fh?SQE`?W ?x0?84g?9; ?SJ# ?\Qq@?LM r9`In }*I`1x?;x`F3[R Ǡ?A}SxV([l.?AJ)?>\&l` 0@?V@?V @?&ro?E ?Q?;[1}=<OX@VeJ@@?A?IS ?Tɵ`?9M\`?65omZ&`C@?Pw?*1 .歀?E@\t?A܀2;? <`Ff]>1 1?#@?R?U@/qZLGۂ ?B??v)00f?A?Tߨ?CR^`<3BDM`J$wP8V`Gg,BI7\`>,A`FޠML(I`?#`?NI&PvX`:N,@?z`?@?: Lk@RiJ-?]V?Eɠ?2A L3{?MO?Ls@VKr?.?SCzDi3.&;AЀ?K_?\C``+2?+6{7 ?*qJ?#ij`2!> iCR77?7@?H T%@aWL[`?F=?t FF?F?B ?X8??`?3*K%GR=@SAe7q `@ ?歀?D??FҀ?-ր@8?Cx?Vzf @@?8d&\|`F&>`?DZ?P? 1W NW@E`?Eg ?g`?m ?\/ 5EG`?FV?C Qip@Z V`RQY``@_h&?f QYMb*JwX @?#U?e?h?`?0K ?&i?BM*CD =>OHG./ӼSXI?"?UJ?SX`?El" >*? ?7?K ?Kz@LfSl@;`G>7J?D ?"0Uk??h@?N=?S ?JF}@O;v~?LC@?&OPM?HkG`?^{"FYZ`B"]`?:~v@?=P,'OV<?(#= ?/S`?IJ?4Z?FOP?R#I`qJ?M ?au?WQTjX?!Q+b@2Pu?Sh?T6?`?@@?N$?#r`P'SE?FI?SbH ?-@`?1 @>Ӽ0?A@?R`?C`C6`In 0 W;FbFy?Z`?-u AU"?:$w?DRRE=A>@?L^@?K?<@?v`Q^v[pu K}?#r2?C#?4+??H_?KȀM@??;i?I/?YN?Hn@H>>`?H>H@M`?2:?T=;?Qg?=?2I?FR?,4[g]] ?=Yc@?V @?DX:SKq?'hE?R_?a`?S,`RtA ?DN@F`=x?UL۠?D[={`1 ?h ?=A?Lxg ͡`?/?] @?Pf`?XL@?^ Mc?)S7U;Hf@J`SI`La[ EI`I.?!?KTx?0?&H?/@s:]?:l?N͠?Z?SE`B"DN@?0W= QD}?P?]U ?K ?I`?_^ ?[?uq@CLG*`V M`?1\@?2[o ?(?2IJ@``[%>i?7jwRR?/?<?>O9?2!?Uw?[`?EBW @PR G1Q֣`W%?4?]k?Hރ>t ?S֝?aW?Y ?巠:_?H'@?`?b۠?UHwB1T;9f c @%K [ ?WZ@?YW=?-F&Pg`i@?\! ?RJ@<?(25G* Bd6?:3@?7J`V?Iפ?ER]YA`=?0 O]4`w+ ``*?Tb?U`?W?9@1Xl``>;x@?P6%z?`s?S@ `?Q-`?H^\aH}A[MI^;W=+g!@҈?*?@J@ Q8 @Em; `?C}+?AV;=@;rM\?>z豄/,0]@?1@H`?B@?`(O?Hz?)\_*S?Po?>I-[ ??ъ >Q#3^J_]8W'@' `?Al?0 ?A`?C`?A?D`?'v?8 ?Kg .^P`/ڠ?, ?B"]`?SQE`?Cu?Q45?cf@?]Q?2>Պ?Pt&?Z9ހ?VB?AKIaPb?2-W?P+`>[ SIA_ ?S+h`?S1@(NP >0@?[?MCp TQ- =Vlf@XI0ӠB@Gs?@Cz?)?GD &0 EA'`42 Q~VE?Up?_o ? @*%$Qu Py>@A@NV *'~?+^Y`H=/@H)?<#?9y?B`?X?I4?I`?>TYQ`.7`K U^kD?,Р?EF`?9?X?Jn?U ?=b*H L.?=ز ?U( ?& JcB2F/M AX8?(`?Iu?yD`YE F#j%UfD ?X ?TG?=?E@?Uo?1 ]`dRa3HB,>?/@?O܃?P@?,? [ `G@[>;x@?V@?9 HJZ?:j ?B65%˞ Dd\`M ?E<?;D z@?B?E`Iz@ZuP`KSv-a?Ws@?Z@?8'@?'?PW?Cr2;^Y`B@J7 Ca?@u?pVq H`?,~5F%4O@wN@'y:a&i?,݀% @ =F?+!Ms ?;v`?Cۍ?V`@?W`C@Tm??~!`?AoyHKE@9i@OSC ?% )A T#HL@?7 ?(B?&L?G|?0 ? ?Q}?P2?54* ?EP?Bd6:AC@?M`?4`?2A n@GA?L9ؠ?`/?`9?7w Qa?4?TS98`M?U?W@?Bz)?<` ?"?PC?5G F84g'[@ ˀ?B"?Ba?-<`?~?H(?D??V`?XR?Fٙ`S `aUh=?J>?1?% ?0C?<4BS7YdU/SA˩?BDc?-"`>t ?Lbt?1*U@B) ?I f@a`?A9?H!?1]%a`4TG?8Sw`^& w?\`?XKs?E&?,eEPW'W!!A8>?J 8Y ?C> ?Z ?RD ?C?Dd?H+?Bg?"@? K`Cr`#A?A Ih ?;Ń@>Jr@?9!v ?gDE?Gm€?TN=3QE`A~?>YyO%AyZ \`K "U.`E CCSD`Y?0-@?2?C?RO ?L@?OR; ?Wr?Rb?Ig`?P҈?G ?!??##-@?3`?I➀?W?]B?@{@V2Ā?Vy?p#r2?b`?eo'?WҺ?ZX@?P@y?3J?9Bb5"$?/ ?7?TeI?I\P+*V?d ?Fv`?6/ ?HR `?<><Dar1>?) BIBb>@?DF ^ߋ@h XQi?G?33->?G6?P@?6?E" ?_f?GrX~@M?B( ?6?! ?A?#| BĀXV?T K?UE-N@h``҈?1`?@E =¿JTHU+`+L ?FH ?F ,?BT`???N?_/?`?Ol ?6ޠ?Bs@?QV?P%?D?l?H?@0@:?$`?L9` @IB`o|fw@-;?W?/0-@ӼK=lG?Hy?J@`28[3*I`@=m$]/cWK?`>༕??cʀ?C0?(:?C?4+?F6?K> 6n Es?A<?SnZ?V|?Wf?F?0@4g@S? ?\:zT͌?Dwe?R ?3`?Z&`?a ?4_@C`1@CSw@H @^Y`?(UT@?9i@?W[ ?[f-NiYEc[@- @jE??€?Rn`?3| 58O:`^sVzLl<@K܏`b8?U(?5]ހ7`?$ޏ?:@?`O?L?`^ ?V'΀?/@?J?[p?Y??I"4?Azs ?R ?N@?H!3HaS`c`?J[$@Ap?;@:oL ـ?{?ER>)"L?Ut?c9?UR1l.Iu+?Mz?S?F~?J6 ?I? h ?4_@?D @KԠ0Yel##-@?b ?T/BkKs3L E?99@?IO`?6 E>b@p۠$Ga. \? =F# : TנC `? 5 (B1 @@"`;W\TD]@?3`?'~8?4@?T ?A hNHUbB`R@?. . ?Vlf@@ob!DL4`P ?F8D?e\9 ?SݿNT`Tv W=ز ?M)@?UV?\:e ?a֣`?Q @@;?j`@܀$:<. >/4E `sU ?ChX`?>@?L`?1}?4B@)NP~2Ǡ?72`:aNQk`C*/q?"T`?B[o ?J?H@z ?MBW ?VD?J#`DC$#?٠?(:`3Sw@Qw 1?I@@^7I?_X?Z? 4,Ġ?3?"G>V?6? XEK`E[FҀU@Z$`?V" +` T @>`?%f ?@?GҺ?;Q`??@?B EAU? Q `ceg2 i?9wS`ZL Nu ? ?;@L@[B+U?0%!R΀@TR?_W`?_5@TO T`R@?-?O?G?M* ?R5?EQ?.@?3?)nI P~ chUy?Sp ?Q]@R>@R، ?F `=¿?V#?Y?甠^Έ``h ?Af@6}i 8Y ?+ 5< ?@?3ŚB]K;?A얀?N7`I``/S+?4! ?;WàFlAY`?AI?b F>"|[Xp@YG0IUG^Pi`?9?Tn XuO@??1K?G?Se?T?U9?R@?Tu@?`e`?Jnbe e@5˞ ?6\|`Fæ@E ?(f?B @?'i Bn`8?Pe ?QoyKV?E&?^ `?BР3? w? YjSR@K I@Gv ?A3?U/`?8A_5rO@cS`?\r?[!H`Q?F @R @A>?8E?2 M`b݀X<@'c?*R?`?=4?O ?ON@?Q ?Xр?GSP҈?I?RZ?I ?Z@t@?b7?S``2™6?-8v6*@FH ?;K?I? Dz?2I> K?3r`?R&@?BB1 ?5?D@36N2?&`?*[WQCGd?L ?N+?6ZJ?$ ?9@?8UT@*u?$&?S {?7甠V`^} W$L9`M$`\`XEj`: NRS4?A?,*ad`a؏ :T?"Ԁ,e?K`D`@VD N @H5@ @ˀ"-W?&U?B?7|?A. ?Yq?Z@?D ?By?Ms@?3`$?6b?KTx?GSk?0]@> ?@ ?Uʅ ?SY ,M(@> `?L:?%ɠ@BÀ巠? ZA Di; I8@Q`3@?PG'@?SH}<. ?@S`U+b?/`?&SQ ??h.@?Sf?.t)BbCR^`PR(I?3 E@CeC)*?Kz@?`7?aE@?@y`Y/R @?D#?P@?OS`?V/?V9@?K` vX`P)FS`?+k ?@ ?I|?T'G?GA@HSf3b`?) ?܀?Ip{?X,,`?#`Sv:>GJ>@?Vz?Yǻ ?Pc?Ce?C`K@? ?GE' HwE֗MED;x`T"S@) F_@4TG?^ . ?Sdz ]y`뀀C?K6?K? U^k`P%:<`@4g@?"-W7 TD]@Gƨ?#m@AU7u90Ӡ?Pe?`r:?cBt?V([%LO@@F`"$`)95?=8v?P?U̷ ?T?P7=`?Dj>S9Os'Zc`T“ !k?KŃ@?N??()O`RDT_@.? +?OY2?6roLC\ WyT0KiS?4 ?U-`??a2<@A}Ӽ?:@?9 ,G /B?`IX*6t`?S̠?V@? ր@VR=@C?6y@?B??&T>t?1\@)T{ɀRW?#Sw@?<}$#.?@t&?Z?R@A^@R&@;p Aw(@?=Yc@?ABW @ ?C >% 8E?Mز ?:<?3z?`h?Z;GQw(@ D?5'?C)?53Nc`VA ?I_?0-@? a?CO? H`?;D?[D?7>`URlj`0?Ad?U1k?Pž1Q3L7G@1 `B EP2b?6i?Rv?_)?`?S@?3x4J`L"RA 8?B6?=<`M@,ʶRР^IM+ G- I E`O]4J$wCY@ ? 0@?:?%6\ 8ԣ@2巠?@?0 ?Cx?W?[܏`?Sw"`?Ji`ӼP LX,><2pB[o :z#'?Պ?>;x@?d\E8@ HY \xW)@.?~8 8+0?B@?KM?, ?/P @?I?2EC?,?b%b?`u?ڠ#Ś?Iu?9`?H<@?O%?;?DN@?E@E WePTYP% ?Lu?MDd?w?E N Hd?P?3uAB?LQ?V?7,? y h G]F&M@b X?P( ?Wb?4@4@?D-n$?] ?f-?Pt&C)M QU Uր?X?U8@?=ER5 ;?\:e ?`?.Qk`H-?ڠ'* ?1 ?LM?H ?3#?JC?[ֆ ?W7o ?>X >M@B8PT~D ?B `? `G\`"@?5$#UBY=@J-A>@?S;?Tll ?ALZ?HȐ?T`YQn`5J@: ?Tm :@?17?b-@?fia?Mי@ 3@?+GA02M .`=|:ˠ?D?9)?'@@?$?8H}`LTPZ6N 06>[ ?B j@?9T`9 %f ?Iˀ?Tj?S n?I?"o0`0f?!!?K ?7@QHQ?:a?Qg>`?Kq?Q'?L9ؠ?@H`?D@?\?Sz?2<`? 8Q@Z? a?B6:?;@?Dw`V,U#?3 `:K@Nк`?M;`?]3@?Fa?n ,nR;T`? h ?ME?Ht ?P@?I AHM '@F.D?\=?\ꊠ?! 1;iY^v:?T}`?GYQa'd`?e/@?e@?5P/ڠ??€?kA- 6MOWYt?2+%?bB@?_̙?MJ?AfJ`b@0`?]?U?4q?A?HW@?P?U?D?A_ ?[5 ?Rd6t?=[ ? zZ3@< ?8I7@D@?J`?X?R@W``5QA? ,o??w?P3f ?39H>V?2?'M?9ˀ?*lCD ?`?* ?1?B;?4 ?: ?S?JH;96eD?I@?Vq ?DߨLS X|FI `6H G U Y˒`=+K ?S'?Xt?R?FĿ@?x?A?]^?ZS?C`?,nRcV ,3/h@?Ll?QeJVQ?n .歀??a7:?b]>VPm6 8q C#-@?9cO?L7?7b?AM@?'[@P,C$t ?QL`?GA?R?)rI?=[ ?GD @~ PFH>f ?-W1`Li Lo@?K?HGEV`??T&.?0G2~17N@`8A2?V ?3Sw@=~?<հFb A]@?W?Fd+ :@?$3Z`?,O?S?bڠ?R`M`?E?.% N1@?-d\R`?E/?S?A?7 ?"#8@2Q' `d[ 8v%=?*h ?SU ?F&@o@?'?&?2b?P$?AJ7 7M?Td?`?a?Ze8@?8vA?+?L ?8|A;7? "F?5@?K`T`a/X6 GD@Ӽ?8w59?Gb?HT;`Y=@?ˀ?2p?Pu?9?-J Kݨ`T8Jb[@aS@De`?A'`?JCE`P`?-?3`?=f?X??R^K`T[i@?;T?Q- ?4!L T!>?j`@?!}V @S9?a/E?S?4>S?7- RoS ?QMs?W?A@?1 h@Ȩ DY?@M? R@H5ZD! u ?@_L`!!&g?M ?:1 S>f?D`O Y? F cmMS?I ?2s &i@GI5@?E0qRj? ?F<&,y? 3Sw@?巠?E}@?G֠?E ?)FFŠQN`S쐠O ?D0?W`>M}1x? "?C?U{`?N?D?U3?L)b`= !?N|8?V?]g?W1e?b;[ h ~?' `?1MsAG]?4}`?>U@I@1XS>`?@IY@?P?=@@-WP_톀P 3eR WiS[VM:/PmXSF>8vj`@S#R?, ?9 G?`P$GbH'< `?\*{@?a?DL\a c,ǀ? * Ra"``RTL?Z?W#!? ~EtY1`E ?Q`?<2+) ?1 ?H ?\9`?T^'0\%bB`?;'yN%`W݀?Ci@Q|?4E?W:?I?E u?9BbRm [TP7R( U`?T[i@?H>:6?Bo0`V`DkS 0=F1`?0 ?4;?# `?'`?OD?Z<?#Y\-`Vb0?OD?^!!@?Ty?5h?9_?1##ij`>/(E7?' ?K?|HNu +2?Tf`?V+tLM;?5 ?V`?I?aI!v 0F`)D@CR^`D`957`Fa ^aU@dK9 ZR8[W35sѠ?,V@??V?)\3P`D)y?>4?#AX}c@bWVW ;7?=T?ZE?[) ?21A)NR`V`EN %G`Szm@It?Q!?LɞE,{Q?^Z3?]5`C@U@i@?A ?UP?W Fn ^S.?X|J@?\@?L \|`?5?R@?R?C\l?: 1@J?1e?Il?:+ ?I;?O?A?G?69]P6$V C@H/a!3?J~v@?L,@FMP` ?B3K67`F`Q?r?U ?Y@?N} ;K?-?Ri' P$?2`?G>`??:@GW`>?"-WF&V[B;?4?qEqUDZ?O%?ST?GAbN@J@?I?F<"0( DXU2Q`>C >2E7uEfI$MTHM@?Qq?Yn ?Sl(?E ?6?#C?'~8?=¿?;f }?@?F=7PS@N0~NHf?[`?I~*d`?MNi>L F?A,@?Vm?Q.,?It?SF@NW@?Ya@?n?cX`7F?# ?:?R?:6 bn]d(;??E?Q?U?N?M?I-)nI AȀ'7?9?R?B@B|[?3@?R`?4t S8`[Kb@?6gu?1DFE:?-n?Q?Qw ??$#?Ju?U)  Rn`™?J|?E@B V)B?"O?6g?A2=6 V4W@?3U 3;R@#r`F: >=<G^e =_?z?5 u @9a@ B`L >?(f8 D<"#Ś6=@%$S`?=Yc@?N?/$#4w`?1?5?#?.܃?H?Vro?Bm@?.H?+g!?,X?F<?8`8`~?: ?30X?1 `?6~?5'?Lmm?Xo@?QyZ >t6n @*I`IH` ;@Wq `C?O€?cSt?=/?`vX`?M`;ҮDMK2?C0X?[ ?D<", ?H-?K2s )( ?2aB\(` W97i@DB@?1 `?G'?P͘?L 2G@ ?J?Yˀ?G(@PpO 8q ?Sx;@?8va4d%@P.?B-W?A@8OE5C $_@?Gc?T ?My7?N_?[hƀ?R Q`(-?ԣ@?2|[=LhTR.]<[U@?/j`@?N?#`>% @U ?4_@ Jr J`!*U@?@|?+ / B"#'?G@?J?KiS?N`?#]?$<"?S ?OƐ?-/@P Q%et Md5FTS?L ?J<?1cg?Jz?Sā?I >7?1D@?RW?NO9?I%?@@P]gE(fF\@@?GC`?A ?9A ?D?G[@?P?Yc?W.?B;`y??E3@?QR?VIG?Wb?E8 `>`?L?`P:h uq@T@Z]5l@?803DQ-UfQ=?{?W(@?J#^K^@D"?2=f'@?@fEF`^Y`W.<< ?H|?VX?H?#ۍ?d ? ?8C1ZY@Pf?@C`?~L< H2>Qk`!yZ N#S@U@N'5@?$X@?.?N@?C@?HȐYkYZ`P`~?2@PT?K??a ?UA ;rXK%G?+g!6UEv?/s'?EK6@?E~@>XWP p ?PH?T?Q2?U$? z@:@?G ?J?88`?HZ ?N . 7 17U,{Kc ?P5?^'?W- ?C^p (^?9Q`I ?B@?]m$?T.Q`1BY=@?5" ?3Sw@?Q?R?Q?Pn@?E ?$_@?%?H@z ?HM` ?N1?]?aZY ?]A?T)@?S-@?[w`?[?Po ?7.Qk`TL``LV?21?U ?Hh`GM?=f?X?V<?=T`G|Bp?AF?D?<(I`?DX&XbYG?6?F/ ?Q+n@?Qh@?,S<VLP'VXl``V>9Z?8;;:RT^<@_hRb`H% @AyZ CWY)`9f ?4?B[|YC  ?Q6?`?Uy?DS. ?V3T?`?R`Rsct@P3?ߴ@LxMR̀$7@!!?A^@?'7a^v[?Iy?Jo??ъ ?OŠ:@V:/q1}& ?Rv?P@=] Hf;9AR5C?GY?]|?[ ?@@UFS?L`?FlT] ?2z)?c&x?_ ? @Lv5@-&@?=;?:N,@?;?Q`?Z?R`?+2ھ MAV@s ?>i`?/,?r?1!?uq@? n@?*6?2?Rd@?` ?Yc`?SO?Ux?GP :LyHl``T/?OJ?O@_?8l?ak`?`@?G+ ?:K@?(@6 *%:@8S"`?-,?@@!M@)=?@9_A ?C@?X ?@Z)h `B@<`?6.d@Md> c`G.?4R /9B +I^Y^Hmy`: ?'d`?S֝?=AOd@KN  S9H@QKJ ? ?S4 ?X ?S5I?Hߜ?E`?A;C[&QO?6 E?5S G`>=Ea)`@9]^sqTv ?C\? t?F<1D?D `?@FG@?l?+x5 E\ŀQ'`L !?-,?AM@?Aà7P?P @?E@?M,d<(I`S`?H?V`?PR >wEe@I9@&t`?+o? T/?F0?Ws?- T& MMPE`Sk@*?Dz?I-?If`>RRV"@Ut^ 8W@' ?5?M?>X ?>Z3?P`?FH ? `9wP`e@F[c`?D?=jP=B ?Qd?F\@8)n?:6?M1 S_Vlf@R>%?G&l`?*I`?,A`?@҈.@E ?E?V}?; "TE\Dc?3*$}DD>V?M!j?P`?L~?S?B Q tR<'_@?`?Pߴ@?g?d?7s?@1F? %:D T]Q( Xx;k?El@?Jij/I? ?@?F~?U@?6S@?OH3\:RR@@?A|F\@A ?x9?Ql ?f, ?R!DH,Q0T =+K ?1yZ HI{t?BY=@?EXV@ӡ?[`74B@K1 @?.( `("T`G@O@P Nu%?"b?@?j̀?LE@A`Xmy`?C`+Hf@?3P?QY`?Q?TZ?Br{@K8?KGM`?G* ?B<`?CSw@?1p?AV;?B$`<OLV@O6@Vڲ`< ?R,?*^$l YP@\|`#Cz?4M`?Q?6`@JIg@?6?C@*d`9@2-W0 ?H% @?F@?$5x5P YvT?l$ ?U<?c?c ?Zo ?Sv?VD?J@@dDd?x`?(kG`?K`?_@?S #\>f ?A/?BGPX+PA?) ?T?QnDF@T?7i ?Va?L\?@W G߀r?HwZ?L`?Qi?AV??^? Y`W UWu@?IA?c^?H4g4q:>SŚ8q ?R) ?C ! ?2?S?SH?@P`b?,5t?T?KKb@@?@$ >M@>\eDN@UxVw_J675?9D?3E!?DU`<@n`;W?SZ?F<Gj ( ?=A>@?s'?<?, `A?1?T?Szm@?RS?LS ?@?KQ-?#m@X)VIO`Q50f?Q0^?'\`S`IAI?R̀?&!_>`?G?S ?Q?Ch?2NC?9g?B巠?3p 8DarS OƐ,`$?%C?Q*U@?9ÀWҺ[a)57`?I|?Kw`?N@?L?7 ?7`?E+b R<'N= %LO@?2$ES@R&@?5`?Tm?L?/?"b ?@?T?Z'?L`HpKWà?TG?` ?@F`9V$ ?>.L?G@vX`P@?K2s ?gZ?b-@?EBn?:@2XU:@T \@F[c`?)Bb13?A?TV8t ?N`?Tz?Guq@?#` &@?Hl``?TY?Vt?d,~`?e @?RZ@?KAЀ?Gʀ3b`\`?53E@P:@7c%x5?&g?+?1w ?8P?MȠ_@?(?Q >}Q_S`J#`RKKQ8TeI'3?@u?E,{?Q5?CM%U?&'΀@Z7?Q?EbB`'d`7@?:?7]L ?$p?&\|` +c 3W ;Y?3m@?S ?Q@`?A?@@?Er?V?Kw`C6]י@]*M;k?6?Zߗ?UA?&T@ ?F&X]@QBz@?4}`28PAw ?D5@?4h@X3NZg&Ο?"، R^Hf?N?\_ ?[x#?E@?@)?=`?Bw?'c' = M%@A?Lȅ?Xn?9\/n?S?]{hC`bȜ`?e`?`Z?)4@?t?(z*&?8۠?RL@?6FHG%FK?MC?Q >C ?6"@?PeU?|]]:aŠ?WP@?W3?^rX ?bQH@?][@?X@?@/S`?Tru`?`+`?3% , ?7@+x`;6?"#?4IM?M ?S'@?1, ?f?,1MD U܀>4AIÀD_@S?)QY`?4?*$@?(f?OB`?7|E~@7FR?8^?Wj??K`>¨B ??V?I%?Ni`?=R̀BKv~GtX@@$?.Y?@Ǐ@c3"#B`?Gq `?X)?O)6@SCP0@3r` >?I`?ID@6Q?`?W/?*`\ B?P`8jXE+ ?4VyC`=<?<룠?S`V02M ?;?F`?M&?@>'8"$`V`R;/a8W@M QB`\`3@?j`@?>M[ ]Kp@?S?n@RG?-q@??/?Rs@?dx?`Z@kG`57?M ?CI@TWC`?1?@@d b $dcMb*?-s`>vX`+%4?:`?HvA'W3l?`?d% ?@{@?5 ?S@?1[1@?8E?= ^`?E`?Q ?E`?6^@?2Jr ?A?W?S?O.?E@3U%?L ?' >1 ?Q\@?B8?RR(:M34?+ `?6Z?Iw?Cl@?AL?@?(P,r`Bb4R ?0@#W Kw`;`?5zg`?=:?=A>@?By?73-hDt 5 u? * FH 9 *N,@D?S`?C6 DQ?AՊ?[ ? L V]`K\' ?A ?N@?C4?܃B@2g A+n@Ij@C:K@Np@!9]Qh@V?6?JK@?<{TJ`WӀ i-8XY@T;ǵ@?Q\@?QT5" W@WD `?#?O ?N@Aà5<?T?DvLS4 T4 >𼕠@Ȩ TpW;Q`N0Rt TweTQ%(?@( ;AЀJ>?Er?K(@1?%?X?Lf`?.@?6,2@) 3?75?D?P*`?R݀?C#?IXV?Y?[Hf@?Uv@?; C? r?E5/`$p?QO@?8O@d ?7f?8H(IZ SSV@LY?(?a ?G9?@;?$8?Q9& ?FZ8Y @^ ?*R@SI 1Q?5om?$ @H@@Edt@ 1[RNCOB`A{Qq`W@P@,`)=??v?R2G@?8 `F?+ ?S?H?33?% @,a[ ?/{?8d60?= ?I@?2ھ >V?!B 'c0^3`.^?+ ?% ?/>?DK`?<:?C> ?Q?:~`? ?MJ?>\Np& T( MB@?1!?]) ?\?J>=N%`Mր@vX`&LE C`M`Dk@?C\>?HvA r*>Ӽ7s?@Xb$T! ? 0`T6W<LWz i?J#`?S:?;+`Ck@MVX`??[ ?Un`?6`3@PQV;A' `?N@?[O`?Gz0E ? Ed?2m57VN[;7?)D Q ?R@+P?"S?E!*a`GkMyLf h ?JP??ъ E` A%?M?MR̀7TH6TB+@^lO>z? ?!*89 T ]r G CYAIL 9@1[`| Q 7?7<_?QК ?R)?%-`JU`A` ?+?@f?Qv?M75E4* Gۂ T@'l?L?`?7Π?Y?W߀?QD(?`?=6D?0@3}+?I?_@?AF?AN?W?S ?T?J ?Cb*>?_?P?Ko?C?R?8-D|@?"S?:(E$H13}+?6DW`?<݀?<?B?6BL `GT,8 ?G$?Ttn@R2Bh?G]L ?QU"?J%?L`?@IF_nZ7?3@?^ ?Wi>HEOeI8 BT`?! ?? ?Z ?R?!?8v@RF^":@V?00@>y?M̟?)lHOv`?B@?8^? ǵ@=6DNGA3?GB@?R 4J`M?BH?L`)"4ӖDN?@lw?T ?FB%`?CsKE*Icf\QQcgQ?F ?Rd6Sc `:BL.?%r?6DW`?t%1@1>t ??`(t ?17a3@5@LH2SH:`?0Ժ?Y?K) ?5`F{?A?@AyZ ?*d`?XȐ?7nۀOe ? @?Oq?G?C$`?<9ؠ>݀?&?M`RcVt`?E" ?Lo@UrV@;=lD?. ?B?:?7?)XV?3?J|?N`? L<@?Z|?f*?TbIa=d\?I?A>@O`n?O8 ?.S ZB>i`?N?DIMCEL"CJ %?.L?%]ހ??h.@?T?\:?_€?bf`?[ֆ ?1>&,2@?,?8q`? 8B,>I@?Ȝ`?A@vX`-W1`?9@?I-?/ P UH@@?6æ@?I} ?Ca@\?@?Jl?L9ؠ?^b?^?N@?V?CZVĿ@8w,~?Uʅ ?_$'@@TKF B 7E' L VBb?6U?I?G\`6?Cl@?%ր9K*^3= d-q@?H:`\#c@A"/,I8 ?\|`?P(?S(?J?$t ?%> DP@F?0?]?c[?J2`<*?@s ?R$+^Y`V>D`?F9]?N@X[T=4ll R`F E?Z`%X?(C?M?G ?C*?Ub ?df`?k?f|?Uh?O?M1@>!!@A4@Sca Jgj@?Ab ?@~ a?HR?\qE?HBEF`21?HH(?L+@?)ˀP-\R ?!)/`Y$@?\0?Zp`?ZL?U) ?A0@?T?T}?J ?^$l ?A?-X?Qv?D9# Tv TCƳUAU^M#o@?QMs?L/ ?Kj`?3}+?}@CsK: R?K܏`?`~?Q<?E?Z?U?Gʀ?C[&!Z`G??L@?aN ?Br{@W^e T d`?D"?P?P%!?SbH ?X?F$`?F`@?FO`?P @@!AT` z?TPo>/4>@?F?6ƀD*_?8@?2، 6'M`D[ a,`cU@T@?M?Kg!>U`4E?[~- ?V?#6?. . ?C:9@?AI?Mݠ?O_f;%GVDW`=P?I=QiGo`D8 ?0]@?UMh ?I1J ?'<_?Pn@?\b?W ?5)0?& > . R9iP6?l.9Bo0`?E?J?) ?R?c'?\b?MN`?Z?b.?UZ <[w X}`8RN\bg=-}?`"?Val?BǠ?P}?S4 ?W]?Q@?>c`?` ?j.?QH]?AY`+Hf@TLĠTn\Ġ?F?_]@?F`?2 ?@ M T@2͒?F@?&v`?:a`?Z ?O@?=[@?S6?H?3l?LP?`@?Q_:>?3 `!}?9?Hp?B٥ q$?@6eD\@`?T5?LY?J7 ?^?_dW?[3 ?Y㷀?:~`>1% B @XYK E?4@?0҈E*IRE|PUk0?9g`Q_dAX7?]c`?A{/F?T^ ?U4?@?C~D?B[o 4.?g!?O=a?zS`N?%r?TW?[U?Hz8?a C?@,ʶ-Hq`M0S8``NIT ??S`?C$F ?4 ?N% ?E3"`?&F@?Ma?R,?T}?Xi?Ty ?&ƀRm^fWr&`8bJ`^@Cn?]H@?Pޛ@z`?VEp@?dy`?^u ?8LC|?<(I`?[ ?GRRDH4GL?US<Bu ?L'?SC`GIW`?Eװ?ZOѠ???>Y?P` ?6@ISyT@J J]YY`US8+D_@KE`?8 ?Z,?X?*?6U?[jk?Vg?Kc ?U=~@?B[o PK Pe M`M"`O5 i.7U`R;9?Yz ?Y2y?S%_ ?Xɩ?S ?FG@?A:ˠb0@Qk`NK@`Zb,F@?G ?R/?W?M FDW`C/??S@?AVDW`1@?P;M͸?>V?)l[@axA E?BS> >p@?;Y?=_Cu'?S@?X?RB?7P @ HEBn`9:@!OaZ`9o`ME?@`?D%@?F{?L`&bS QEV/r?@o  J`H4g@`@)N?5h"Y" Q@?Nv?B Dq?J@?cF?Wd"QXm`S>? )"6PHa;a9@?X ?[t`?@51"Y=@9/1N?U+`?`u?I%B`?# O`S3@` [c S @PA??>z?T&`?X O8D.?F?Ci?Bھ ?NR5@@o?5|@@`e@W`Cn ?;CIyBKw`?e @?; "?I7i@?@R K1Z@X@8@?=) ?@@?PK Xd%@E?H`?P?H?T@?PmPT?P÷?W` 08?*7`B*[WBj̀TV>g^?N]?BL=@C~D?2>@?'/4?9➀?Bl`2M`C.&4! I̫`P8<3  3(?a FDW`V7+ME?8f?C??n?K:!K9@_"}L{*?2?B ?GO?X6?Sm@CC`QJ)?V ?]`?!0?Ph?M@QHI_@ ߴ@=E2A ?0`?Lg?OZ|UfG3F$@?& ?e I j  8`?8Bd6VޠAMs?:i`?4@?Dll ?IBb9`R*=zO?'.c`V[`4@?P`?PA?DK`?gL B݀?PP`?V@?,݀? Z?:EAUXIBb5UE.@B?@340@ b? ?C- ?E&?F3?Xy?XX`? ȠAk ?3H}?LB`?G=x`,РV?O^M!t@P% Y E3@8`ICO G K?5?Y?H@@Dр?% ?QC@F^@2 ?K?AR?7l2™Oky ?K`?LO@?#?#C?28P?@-[ TC`,#W@Q`?1$&.6 ?#CC @H?,y1!SE26S?@}'$L9` %?V{à?TK:ڦX*I ?E?I`ERPԺ?8W?K) ?E?7* ?M?@?@/Tm '?G?@bLOF Oq :T?I ?G"vX`7 8f?`?0Ǐ@AWTP݂`Ga?$R`?XZD?Z"Ҁ?/ %$?0\`7*`' 02M )XVԣ@? 4?R?[܏`? {P|a?=/?V7` Jh?K`?>7`? X7X A ?F6`O8P9g`?=͸?J?AAa`?1?DJ`?Q?=9r?'E' ?R^?Qk`?<`?/܃?I|?ECSaMz3QE`InI GW`ECI?Dt?[ ?JU`E'(?M0W; ">DJ\pA\@DYOxPP\D>@?F-K@?=:EQ9S "cVH Q?.`Bn`UHwP(\Y@HE%[2m?P"?3J@$?B{B?Oڠ?8Ef?0Ժ?( ?z?>,% ToJ$ ? ?+??)nI ?H4 ?@i-1t@??Is?K?Gw ?I@?$q?V"Q?cm?R?#\>PD̀?j`@?W?LY`CLC@?D ?ZP?RQ?>2?Q.,?N2/>)?Sw?L"̠@ߴ@Zw[;?:@?a֣`?EUQ@=s@?=:I6P`V.} ?L@?H!;?Oe ?RȢ@x5WZ@`IOO@? G>Wuq@O~A@1i=PRpD ?@h?Cѭ@?H@?VvF?Uv@?#% ]XdM$R;7@Cj`1, @/@?5:@?U @?J/qCK> T/BO\/e`G<[`@Jt?8?*A>w?!??g?1?M?P@? V-@9l@V&K.`?0fM) X!`EAUR@Rn?0"CJ R4 ?3=`?0o?RJ?P ?9*=?@W?Q`?A[@"@???5:@Rd@U:~v@*$@ Jr 7? ?Mf?H#@C@'ѡ?SO?V'?R@?C@?_7@?`@f :V?1׼`3 (`?O?N0~?:V?L?W|`?O6@fI?H3NXK ?4]?T@?A+n@5U``bΫTg@?C*8vYH `JSN͠FK?DB?K`?I< ?Q?Z@?QhW@?J>XL G^e >kXq`blrF`? 3GWrR-"`.'@DTU<`vb@Y1WA@WhE*?AI-?1?Rò?6R<'X`I=?(2?:@(?a Haf> . ?@H@@?ր@?B.o?Tn ?QN?M?Th@?DJf8 LNP;? @?CKȠG C[&?RW?RTL?F?RN ?D?4?N_?@58E`?CД@?Q ?T@?QL`?K?@>a? *Mn=`@8@?" 8`b?4 ?If ?@ߴ@D`P`C<?A}?A@`?0~?Ji`?A@`O;/ CI`?B ?% G@Dp f ?OE?X?JzBn`QX&? X,Yt vX`8wO ?8'< ?Iz@Qk[B<`B.R!>kG`?MѠ?3`?? ?@{@?=j?2?.p@?D?Q|?;@"6?-?$?CH T`?E`?VU?Bܠ?#6U:Y%?$_@?)e-GR@^aT?Lk;R"Rw`h`a ?;?X.V?-X?RJl@2l`\`W@H7U?(`?5?-?C{`?Q?b S^pCp?: ?90Ӡ2™PN7?R?L9`@jEP @,?R?SyT@ D>Qk`?P?Q@?VkM@?W$?6!8?8^?WU?Q?/`?4??7v?$`?@M?U ?N??1?/4@;Ȁ?9]?EZ?5 :C2?5?VZ?_@_ [c 7s ;ǵ@+)?'M@?#A?&OP-"` "F?P @?84g?1F?? G4QA?[)?b^"]? Ed?V2;B RAL@,`GW`&9]Ƞ5R?J?\ڠ?1XVƀL6?%@?:h ?`Ab ??T ?I`ClJJ?Y ?O΀?O`?8v?@L ?O޵?V\@?'@@B@?,1B Qt`JL`-X-8v???V<?N#S@-F?*~`?Uk?<7V@Mn?DIM?7L `?2?Q{?I`?$?30?C?, (H(?@@?3@??`?QT ?Rc?*~`A[@O&TKj`?5C?DQ7G@>`Ff]^\`SJ@?S9 `?_9?5" RDq?2|[3`;g!??K`u W\#K?A@?T^`?Y,@?ah@?YSe#r24]?48?G@?W`?V໠?MF?Sx?E֗G#!E; ?0k^?C ?BDc?@?2G;``Lxg Bz)=?l?R+%?A ?< ?e%?c M@?< ?]Yc@?L+@?64?A`A8L ?1_ d V;9?R?5 KƜ@?P^3`?R>@?Dq?Cܦ?Z?`?:oLV@E@16\@B_$Vy?6 KX&# ?Po?d@?+)\@U@-?R@?XW,݀T1e`0Z\pXt 6 ?>?Y7i@?_ޠ?@;?!k?HkG`?R?Q)?/`?(?>g^5ZG?I`?QR ?E/7>`?`&OPJk;x`??܃?LJO??]4<1>D??J^?Q?45@?D ?Qs`?AU"?)9@ %$?8 `?;iS?#m@ TcUA ? o=L7YjI_5P@U KD?BI?Xo@?P)?G ?C ! ;J D_@;r?C?QȀ?@TR?@ ?@CCU6DP?7/4?6t`BHI`?P @R b bʎS[&8C ?- ?a[r?`.u?L?VN8?Xmy`?E?R* ?T4s`9I`?@O_ ^$J!-T~]%@G`?=?!I? W?d=;?ct$! P ?A?&@Q%`GVOP?5?C1q?41(?X?`L?2VCXp73FK?S"?J`Og`N?M?QT; ?y?Hr ?T d`?X?Xd%@?3 ` ?Mz?P7?JOE ?PD`?Gv?AD@?6H6 ?+?0J?$&.ӼJL`Q 8O2Q5@P?9l?XC?Bھ R1H@?R#?X7?L{?S4 ?R?+} ?A@?U` ?MV2]F.?0Q?Y G`?B?8ɩV`V^@IdhC'(|?E?Ua)`?Ȝ`Rh G >FqIU$@@V+x`?:>Bi=?O(?N=+K G ?E9?PC4L?@ !`cmcN@Q0^V`a-YHR?NU?T 2?XM?Yl@?@Ec[@?EU?S^pij`E.`'\`*Jo TH]leCA@dtTH@.DI`_HZIM\`?[ظ?T-Q Q6@DP@?Ux@?T@| ^ V?!?S`?Y`?R38ER`SCZ\ I ?GD ?"o0`Qh@? "F?ao3@?am?H-?= @?P?B >V?+>o@?9?5-`?)?2@?$ޏ?J6?Z`?R`?P&v`,,@ ݀0vX`3Z ?6m?=G`Tנ?F?h?d#?$J`>K@? 3x8 ?>к`?#r`FPiM@?T`?^N?@fe d@?L ?Sc :7?@9?PL4&.S\)X ?B/?M&?XՀ?>vHu(..L?9,o?"Ǡ7:R?5Yz?#r2V}S?TΥ?c?N *u?J@?Tx~AL5t?Tנ?SuS@R??@1n`[P%?9?Q?FN8PdT&$@?"巠( EvQ5N-a?Tv?Nк`Oǩ_PV?1}?JU`?@`M?' `?=Pe `6`2#?[F4`?R`Cj`Q4;"#% ?T?e?^_?HR?*? 8?6^@?:?C(?S `?Uo?#Kd ?C@?h/?g@?Dar> `@H@@UL۠\@S40P`DTG?O'm?]?W>?,ՀZaU0R?P?@ Z`M(?Gq `?JK@&XX`Y?*`?K1 @TZP`B@?[&?^{( @OL`?8vA?Vޠ?T9c?UC?_4`?\i@-asP`0`,Р?5 I3^MU\ŀ2#\xhA 甠?S @b;f? vX`?6\@Gw =L76`@?6?X ?S ?8@#9 `O+O`@ӡPNITHDg@@QgQ4B@?"?4?Un`?]o?C[&6.d@TM!-=`2@Q ?Xv?^h?SMԠH???3s4݀Jg@K<GeȀE35??;?G_!%*@B7?"@?L?R?Jg'`?0 `?9?A>u@8 .TA@R 1?9S ?"5v?0 p@?Fy.@F1>%1ΓTG@?4? tC+`9`Ä?$u ?8;Q^] ? گ?Pl+)(M`0?93qN`#oi@9gC6`??J`?Stf`$ G` %}?N>| ?` ?X}T?7[@?` )@?R׀Y?Bʀ?S]? "G"(.N?'CJU7?| ?U< +] `ST2?BFN@?^2J`?Y@xGF@(`A@Ac ?G`?G"(P _\`Rg`?H?\ ?Gm A@J]j0NgLp2N?=v?X|?RP`?TJS34cM?Dh> [`FAf ?.oC?#Y=@?4>D@1M?k0G!E ?B`?7?$DC`?J?C& E0e@OA?m@?C, QE ?R;?a:`?Ny=;0?&`?A QHaj`Tp EmJi?D_`?, ,A?Dx?P@?\@1@?F%e?ZB?Yv?U`?`G=`?`? kW#@S EOo@4?A؍?Pw3 [`U,6.D?A@?Or>E#M?HfUjMS`1Ri?<%?PMV@?B0"@>?y?5?LZ?3Z@Y?E}?Vk ?Nż?Ps ډ@UO0) <5 ?t? "?0 E G?.?Cud D 5A`?7?6K7FQ O^?;^@?]Y?T??JL?[".aˇ VW? E k)W?&woPƺ]=U31T`[@Ja@?H`? `Cg;G P>D ?J?AxA`HE@?'^?JBG~a)eSԀ;kV@``.*+?XQ]@K 'FAՠ?(VY?0`DQ6 6H@QN`L F6Fm) !(_8 ?4@?:@?8҃?Cy?H ?Vk ?V4F{V6L?V ?cx?_?NP9>$` KSI`RkqGH?6y?V@?Q0?*9? 0?&b`?ؠ1TG<<?'@?N7`?F R[`U?> P8FFMN?3?TJ@?L`5>N?A? ?U4Ԁ?P`K@gD`^x?F} ?HŠ<5qCמT`=SۀE 2H?R,?Q}G[OJ`?"A?`QmN| *@ wȀ?@?GO$GkS"?:?C?U?\!@?'s\Х`Q`?7Ep^`U*@Rc Qaa?7@?@?Bft?U?LbJR^J O{J#BH6c1C 8诠+-K55?I2`?}Ii Gh 7%@?S?dn ?X?8z ?I`?@'EB" <?M ?PE1 Y4'?W?T!W&4/?UYj?]?N[?P?Q^& FF?\@FM`,z`?D ?Ru@?E? ?x@?4l ?5g9R_;? f@Y?O BO,_~ ]{T @D"+K$Jb@?WGL?`A}?A?T'pT{+@?8#Z?<*[?Pϙ?WjŠ?=a LNQWf"`?PX ?UЖ?I&lOQC@`TPu@bnP.zC̈? 1?CP?> ?R?NgQ#Vk -'4+7F?D.`?PN@?NB`?TD?Z ?V <?Ǡ3s?C?ޟY^2[@TaC?A `BGj?^s$?gP*`?A+@r?3b?P`?V?1P2 PRS`?) ?MRZ@8X@IA_?B͎ ?Sj?@G?=?F& U< S-?O?KdDn`RKVGh?+;?+@?UJ@?UƜG0P@?.> [`\S`aF?Fm?06I"9`?[?]?87O ?`?I5 ?Fu7`?1M?+1 ?6lY?J_d?S?OÚ?Kw?YX?Sh4m6 A? TA}ZbSo3s؀-NrB_?E ?U+h ?GHNy=V2%`?>Ǡ?Q~; VC"?Gf`?N!@1Q俠-s?Qz?P ?8Հ#`F{@LG1*?D?C& = DJ@`à?9J?@r93dS@?H@`?CN LF`?6?U ?bؤ ?^B](%`Oc@ W?Gh?R?E,r 0 ?;1 ?9t^?,ŏ`5 ?6?Za?QpPT`V_] K>| ??av@?f`?'R=7:@?"2`[7`Y`?[ ?i?1fPq?Y?h?P>Rp?S:?`N+ 2H?T?NLBy@6r)EGaM T6gG?T{#?X CyZ E$k3I?t8!=ؠI Mڶ7Ӊ?B:?H?"@`?5?7E@?Z?T?Fy?Qy?UD`?=`??@@?_! ?W8T?@?L!|?[*Ҁ?S(?(҃E?Y?R[^??i?8`?VD?S, ?t2D<H(9 I8`\X@2 ?F1?<كGKF ?A_`?Hݙ?KhX(WN]5fE C7 E*`ZXJ'Ri?P]@?V5x?Pj?C_ ?K@?3$O@I?0L`?L?W `?V ?? =@(;`?5g?Rx1`?6~QOc@Hf@S}R@QF7, ?`?b?1.CŽP W{71?@E`?8A?Uq͠&ORF"@Ac SA`d_l`U?Y?gj75ˀ[`?U|?iuz?LZSх?A@?X;0?# v`?Y?eS?d݀?X !?0(?R;@+@R׀?5G@?(;`Bs t?5&k 1|@RLg WW_ P@F@'?;t` D@B`)1?,?I2`?H/ 3?LMSvT}N`Ztu]л:@?P^?W?F~ &>G?)+3 ?z? ?7 ? ??'U'?8?F?$4>x!?\@?*B2YG5@H1 J7{?2QT`T``?M,?[2 :)RUӀ?%`?V?aM?Q UnXjN 7}`FSN H& &F *SGYs?=?AO@Z]?P>?a? \P}| LZU8/^4W@QK5? 8`?U?MZ?R?@UR5@T D@?B͎ ?#?@`?Ov?A^ + J> ?29`?=?7x ?9?( ?J@?Q ?NZ3@?P?QӐ?C?R@PBn7 ?@s`? `4K?4Q'f`7R?=`?E$3?U?V+~;Jj<`l`cj fY9`7 >=JBs`)?'Cj??z?@d&?H @?R?D?A? E`Be`?D?L>0B ?9?Wn@܀\W?G:@Y@a_p`?.x!?`ۃ?d|?XVYET@TIcZ.Tm?*G ?S?9J!ODPu@K[a ̀Z?@?Q%8@P*`W?Y`^@%4Zo`?@PQ?0ry?Q=Y?B'CC@VS~:f ?)[?:q?B?PW`?RKK`?D ?>1.?E?,< `?Rį?Y?BB?T ?W`?B7?G`P;`@?2H?1P2 ?6+Ѫ049-`M*q`?< ?? S4PwAca K@P9@T@MAF? ?-?C=@?c< ?e\`?J?8Q?S^:`?\W?`n ?Xx?M8?O@?G?4B &K@L`?h@?b`?c颀?RY?NAϠ?Y ?W?C=@?C08?X?WK-@?=?Dr ?So?=@O] Yx+?>m`=$`HWu?G ?Xh`?S @?85?b>Ҡ?D.`V ?*?VoDv&X!2D?W?;}?T%?Nn'?Cê@?QN`?4X㲀]`??V?0@R U Eo4V@WZ]K%98`?%!JxC?LN?=GTw KE?P?TC'S E`?;?Y ?M5`F`' I<?&O?%?3oi@?}`?Nt΀?XL`?S@?7 ?<?S{ @?? SRQP?G%@?Z `?.ǠZ&W}@?2c ?P@ AJ^`TZ?CG`?9?@1P`>Y`?9o??B?*BQ4`?.: H(?-a ?IjdW1aI@L*[ ?*cI )@Us`?P~?c!@?Q`?A ?Fz`?C?UNT?X ?E?8 ?@b`? IA_YB{H̀?Qh?SR;Ѫ?:Dɀ?Cւ>%? 8`?I/?D ? ?O?bˀ?Y FGÀ^D U?( ?Rh ??{26?:?Q`? OO_Ԡ?<1?b ?M*N???^W`?DP?0e,9sQ?\J@?`?Yk?`?T P`.\ F?KHL_`aeP/?:`:@X;F ?8R/@ZX)JBΪZ, ??`Q~?Su}`:!O| ?I?D p?]J?]T#@Z? ?Eo?6QT`_N?5?W `?E|?F&`?A$`?29`?;?5C=?=@?E?+B\z@VS\]YV XPΠ`Xl@ZqC 7}`E$0@?Cv ?D ?*?8Z?Z%1 ?YD )[T A?MpH?ZK?T?D ?@E?A#?7?Cz`?Z?c ?TS:ho?BW݃ c`PryZr=`faC7 ?Z)`?,Q3_@T$U 9Q?Ig?FI ?9 ?:*.@?*B,?)8`?M@?6TncG ?WF?U ]A~E̵`?.A@诠UP\E»@?R-?^ ?HV [87?P@?Yy?R$?f| ?R9?[`?HC?6?O,?,`CnM?T ?WԤH"?J?)>D@?$g?`E}>O ?0"@R@ ?;w)`Ht`El?Bv?>Κ? `?ŵ "?`M!X[@WKD? &I;LG-?=?X:?Qs3sQ`3??H*P߬ C(v?1``?7:@??1f^ ?8.p-s e?R ?_e_?_?Rh?>ր?tP3?2+?[SI`?`k?V^}?+R>?'<`@h`MB>P9,qN`4=4J 6?O'J?Qw '}`C'Z Fa`_ \?;l?g'U\/?K̀?`MMR!P?4f?YN?T_l?=?02- ?EP?I}= e- ?O \?I`D>W2`?Ys?E Di?8!# ?W??-L1Mu?(@?R,@?Q?<5qBV@@@?F ?Q0?H@?G8T?3 ?y?G,"?K͕TA@RT?;e?F, ?Dq8 PSKa[dX ,ۻ`?<;F N ?-\T?O ؤ D˃@c@?G@?QF?L%?'+g=?08?+)(O@Q?D`?W?%R SۀTcM%W2`?:4Lw A>u@7Qz]_S@5IKcQ^ ?!m?I@?J@?L~?#Y=@ [?HPΠ?A_Vv NB`?ID ?TE?:n?En;G h@?U?O0@1$`=i $`,?wȀ?:6'@MQ(I@\ L`?X\r?DC'ab\Z?ud ?8s,?q?n ?G"(?Z?OG`;+`B(_?0i@?Qŵ ?M@<`; ?QM?C& Nq{  E?R`?O$`>?N0?J}S?F??F?9ӵ.]Qp@UA@?!?;?Uc ?C :5D@?S?:]-@?ۻ`?!@?aC3GxRh@C`?<5 ?Gs kSI@!|?O@ ?5hB?`?!|?+LUK`aJV1 T6W@,MԠ?O% >560{?Sמ?RKN VGP@?#?W΋?_ !?=H`R  O&2`Gm L%?9@?GqJk\39`6Xd?YF\?U`"{2?3@?DW VQ/7 7U'F#. ?R@?1_`?Qj`?D@TN?G)@?:zT QW?Ly?W@" KL?BI?QH??`?G?c?ai> `SsR'CPY OD`0A`???QN?4DC`8@`>%B_[OV E»@1@?1_`?CT?SK`?U-D^ޠ`pN| *O߀?Q?Tdi U7 XTL> [`?Mu?\m??EZ?:X ?Pƀ?(9`A:`*?13PO+0i@?Jt?I~ ?8?R?_憠?SI>ؤ +Bn7 TPn?$ǀ7נ?2Qd@?P?8z ?Fn?]bm`?5] ZK@R `CJUj?-Qci `^>@AzR?nDC`?>?O'JX@U B?Sg?O3`u`?4V@-i`>c@?+-; ?*?5>?H?< A+?@?N?>N`?D3`T7`6a@?[?^x?4F`?| ?H+`?:X ?J>"?_ ?Z$@@K] No?7zO@9~ ?U}q?d@?Z*.@<\aN Q@(vG)@P8F?*`?InӠ?C"?hQD@R5`?5}?NU?1}EK[?L?a?B׈`UK\'?3?.>| 8EWK VH ?0b`I*T>?K*DD* ?A4{?W@? VCѠ?R?\?:Bh K??3?:2SXYR$u ?U]K@?Uu?QA:?S`?C'Z 7JK%=;`?"x ?>b?7@o4W@6B80n `?Og?Y`0L`P`?8O?9gCVFb`M% Vb^WUD`B;?+ډ@?Jc@?A Z?C `E[s@R E)G (%`6T|7;`?F[J L>?S#@? [lO@?A`?Q`?PI:>"Xj/@?P@?A``*sY@8mA?; `?E ?Mm?VA?H_8 Up`]?m?_Q ?LP`QK?E?]t*@?O`@ZObQ?A5)[Mĉ?AP`?T ?)/`E@A&?8?Qπ?I*?)rB^N?)?Q T``G2ɠ?? ?J`?C]?R`?Z'?:MJ #CX!GyMgj?F?]bQ%5̀?3v H`DR?ZR?a=`?B?`>oCHyHs,/`? p@A٩T *?\?Vވ?29?)/`G`J}SEA`4 .ٰJqPe`pZ L?CU `?xG?H4?4`?6V,?Ji?:0 5NUS= %JS `9&aCZzb~Wa@EL`f?FA'-`+1 ?5@8jN W`;RH\ ?X?QeB`QަR|(c@?>3f ?P`:TX@>x5 @U@Li ?D@? n ?'U?:+?E|?V ?R*N]z?2@?]?8s,YiTq?J?\w ?B& :b`'^cĠ44 ?24`?쟀?5?RS>*L*l?MzC ?CŽ;eaCDI`ToI@4? N}X0 PT?:Dɀ?Q?J`?[8 ?g ?Y&66 @?7?J?;?N7`?]@?M ? R?D?3~@@ D@4ǀ7`>#t?'%@?DJ ?N %Xi2@\$B Q(I@C`@@C4T>`Un?D?`9?HEUQE TxOpu'Y?:@$YtRS?3< @F!Z0G@JX- 3?F`?K`?9/?8?Hki?@D0 ?_T0?`⸠?C@>PԠYc/>?Aqt 8D pB-O{'P@?Da?$`(A{n`GkS?Fc?Z? p@MO?6~?JH``uQw ?YZ?du?I?B ?EbT`gƀGXz?R`?%Q3g ?5 {_C5@?C~?\?Q%*@?O3M@PB@@?@?LKO`Lp2?E@?,?@5?Z ?V?6?$H*Kp`J6E$8z >ؤ LhU Q9?=?W/v@?@A`7&`!M?#1T`.`HfP^@e^e ?04@?RtP? 8`RT)Ty f ?SO@?PWP?G%@?J*.@)F;h?AD@C ?3Oj .@?4i"e`?@7 ?dpT?j ?]z?NO@?\M@?We:?C ?8AXE*f`H}&?E5 `?9?8@?MP"?Hao,*[KcZ\@.@?S"]?4`p@?O?`?N9oW RF@?E)?X?q+F ?Sjl@>y\1>.?`o&@?PRS`ă?=?8Հ?l?WU`?f?_P ?/ZIHNs .z? G@N2 /4.,`3?  p@-; | ?66@?Jܪ?>!@HSeo Kf"G'?E< RUEO% ?D?E[%?`=`E`?L `?W$ ?;?.s?I?N.?E@?@h`?=G1u`TͺSEH8 .v@?2?W_[ 7d?*X>?:@?1|CւG ?:.?>1.G=ߠKP@ b`?)v@?R?AI@?G`?9`,E)X,9 ]+ Oh?W?ƀ?O?Hb?@x?M'?U(?B "@?;v?<`C `?Yzw?\ ?P?U=%?RH:E`P:R .K@X O@P?9E?NLPd@`% QGN<Ix9`5$3-?6q , I[ ?2@?R`?S'?L`;@Sȧ`C]M!Xs@E:_+~GG??2L ?EYj?Y`?5ˀ#5g?* &\?Dh?J ?@-?HM?Rr`?Oz`?Pbf?_N?a] ?L :2-{_A98T"^ޠJ3 U @>W`?9P?>K?;C ?Nc?QzR/HT!`D > `NT?&@?L`?W?`?Dg?Hb?\E?5`Uڑ=?&)HRg`+`?I?Ecd@??`?O"FN@`TY 7@?F`' ?_׏@?OWW@4dSad]I6B8?P?R@?@ `?ؠ?; J`?G@O Cւ'@qP% ?;?V-F(`R+% CyG Lv`>?. E>6M?Usw`N| ?C@?6woWRbUy`)<O= W b옠[US\: TncB;8!?!7΀?J?Wq?PvC< IҠ?3\@6Z$@;?T?B% %fDnc?6@?RD?U!?`F9?0 ?I`; ?'??Da@?VF?M?6aC?#P?/?R7V?W?+@G+ 6?^_`>՞%?l?M|?U?I&Ā?B ?Bk=GNw ?*?H%?'C?E?OE9`?Jc?T?Z ?CZYF-(@Q@Fo`X@?/Q?8?QyD0`?RIBa( ?#?YM`?ؤ OU`A`?.?E`?R`?^B`?HWq[f";s@?K{2@?\Q( ?/% cb`A`;Tt S#@3̈?,@6=@4L-; 0L`J#RInӠLb@CK`?J?,b^6?5bH`?EB" ?BG`?Up?M;`W7 Ec?Pf?3@B5?9?N E?A+>D@Y``&꺀? a`e67@M\T?>Y`?3} @K`?5m^`LVSV>q*B Jc?8X?S?2@C `3 k?@t@?2T`_LJ#;SQzS/N_@P1G?B?;@?:Kp`?Ey ?IW?VSg`?R@Gl??yT?3&>`H(L?K?C`?J]-@?P @?%q͠5 ?K1 ?T?@?P,?Sq?L?U%?V?FI ?(+`BQ; `>zU|BIPIO?1#L,Y?C ?T3FЀ?C4 @?9Lu?St`?I`O@[dx@M{_>?<`>@Z@Q$} Ķh?02- ?%4xIAD 4W@>F<E@3 k?*ʠ`s?L?<Q? ?e3?e?[4?Td?D<?)@>"+F ?Eՠ?U ?=?F?b^$?a<=?T`?Bc RnO@@?Ym?UY dwN`?TJ\@?W^+3P?BCdS@ZIGU3; @#à?5r@?I`"aQWOg@"0"@? Q1'`CS6QDA@Y^^RTOzoK C0C>?C?"ؤ &l,hoPqTJ\@?- ?_J@?].+@T#̈?E?AK?O?Uk&?UJ@?\ ?K Qk E`?T7`?T|?Bm`?Mx?5] <+?,*7O Q@,m? 8`WpPTA}= L "G`O ?74 ?:@Q$84?%@ ?d&*n 6`V aU5b`/> v`0+@?܀?O@?F ^_`?0}?F?B@?>d?9k@?;$?7ʪ6lPD"?@5`?P}? I1ڀ?-?T:?Q3@?Vhw?a'-`?[B`?KX?Ch@?C?>-9?N?SZY ?Do?b@?^[O?O@?5m^`I`0k?U ?D1jP@[U?FF?`?O}@?F`?Xh`?DH0"?1j`?ho2?A?N;(*ʠXBe@[H`S?- +g=P% (?8M{@S`[? ?EbH`C 7vi9hQ7?7i:PԠ,l ??M K ?S|`?$ M?JT>^ R5`?6;?Jq?(p?!F?OY-?P D@?6_ `?-&@?ؤ >?:l`?G->???,<`S;NK-?4V ?C?C Z7KƔ?:V`?G;?A`?$=a 2@?J?Z>?Qr 1&!@?Xn/`?TifD B?:l` )@CEB%

| ?Y=?a#?D9-`M@R-3j ?0@RI ?7<`?VN q(@2- ?O`?[`?8D??G?-ؠ?yTL^Rn> v`?Q`?Z>ƀ?E??@ϙ?$`?Se??% Qoʀ?*?YEA ?D<?@@C`? `'>P~`M1 ClA>u@8 =?h@?FWH FCT@?&W?@ .@?0?M FTKx HVY?6)?A?2V1`LLJ#F, P@QBD7H5T#fz,C1T`QjRR`L^uÄLb1(I@?Y?a ?L P8??[`?N@?͕?61V@W=ߠ3/?Se?O@JPʛ?8?A* ?>]?T?>@Q8\`@ G:@?>@ pB! ?N?U'?5W2`Ķ?:5D@?Fe + ZYр=ϟV@?h?M@?Y'@?R+.1.N 0b6=@VkOP?2;8@?3$ LEŠQJ@L<R2 p?Jހ?7$@E|@?'@?)ӵBh WP9`?3]?ǠRႠB-?S?PJILuUYj6@?To?R^@RoS. *sY@?GJ ?F?G}`?GH-s>5?_.?c?]@?aX;?_)?FC} [-Hx?Pc@?YRDh?ΓCnMFk= 8f@?,39`?T?H[.gjQHo?<~I|T_, 2X B"Ԡ?Tu?`)?CD-E@Z;]@]CX?9.<?A`?ZYK?9JUk? ?b$?[Ơ?@?W?E`P ??X?HWuU@X,9 @ p@H@-J`?0 D@? xOQxS`P#5?P? !|!.?PV ?YF?B2Y?"@?R?[߆`?+_1`_4?Q^ ?J `?7~?GB@?R'c@T@C08?$cM ?@?QW?h@Eՠ0So 8KCF1?6cz?S4?4 "ؤ ?A`>FRM>z?Lv`?Coi@C+`O*m?Iɻ3< `Y*C\v`ZQ@I9@4p:, D֙@9H?Bx1`?R9?KU?K?QӐ?Q ?]?fi?]k@?3@4k?/ ?O4?AۀP@?M΄ & P@+b΀EO?>,`?@; G~, DeK6e+ hd| I9 ?J%@?!u`?$?V @?RY&`0O?1`?5`Cͤ`ٓ@\? ?1_`?Q>u@?8@?"=o?O`?Y?C, <f?E ?aR`?WMdFވR?FV,?Vg(DAg?G$@?+$WWӉM~`WK-@Y4 =ĉ!N=``V2@UHV`?JAl@7?O`?P; >#C?J?>?VL!|^ Th?F~ ?YA_?Jr&F?!?P=?GH?:?E?N??ŀ?E?H@$6Hx5:_29H'?"*?Z9?IWQWfQd&DB NH 22Y?Iv?{@Tw R@@?24`?R?6H@P@T @Ev?&:} ^_`$V HPh`B ??82?*9?`?Oi?W~ ?V)F?Z?_@@?JKRe`a>@M&@?T`?QƀG݀7?D@&,Ҁ?B^?&?Q2C?h·`?`I.AgRYy`i2iMW@?G;?GV?U[?e?cR@?5ˀThGޟ?B@@'U`qX\ ?/Qk ?2eX9@)A_?.@? ֹ Rؤ Q ZA.C InӠ:` ESYPϙJAv ApX`O:`#R@?ZI8?RVa`H@PL` $Q:[K`?; ?H`?9?J?5 ?N(P ?Jf ?G"(?QP?C;H3@J8DG715 ?*#:@K\'?2x ?4[^$6?B@ +l5]`S`S> ?R`?\%]?Uxt?:l`? !|?@گ?Q)?S9?Kډ@?@FXd/ ?PK?S`?)"U@,D@?B]`?RΪ?M?7@>Q?1?A@9 Xy`C@٠?H63`$} T@2?BR ?6+?G?Lj?C̈?^L?h3?^ }@?C@?C@*jz_$cTz,39`?)`?P"?^@?W@?bu F2@?4?W @>, _WeG@@WT/?.܀?J 1 SnM> ?'x *c?.Ǡ?3UU?E!?Ul?U`?V@?==/`8?Q?Coi@?:H?(۠?:+%G`RȠXz D 44 ?Re`?I6I;1 BI, ?QW@?YJ> ?VF???`?.Ä?<ك?B U ?Rq?Qo ?4?H:?ZW ?P `;@TuR`AGST@IDG8? > `?A;!?M1 5Ni?J% ?f?cj@'6[OF`MaHoc! \S_J?'^?V?=WIS??"ۀ5`!.?N^ 7@S9?E?U.?3:?@ `?Gx@$ͺ?3>#~@0e,P$QT멀PnQ 5[?Jcؤ QD ?3s?Z ?C?/ŀ?_͕?bv#.L_?E ?H@6g?%:?I?4A@I@Q@a`TRI U8?%??Y ?B?B@?X?K)(?F?Y닀?@U@[8 W|QۀF@5?$A@D6KE?0k?V[*?Jr=`Rr`Vڠ?C@?S?,%?1`?VGÀ?^?HDH`?/t?`"?Q`5$1d&5F@: ?"\z@?7? >[Jg@"?@x?>q{ ?E?E?1f^ ?D/3 ?Vp:@?Q2L Qm;$V\Uu N2 `?>`?V?St`?` .Yy[?C ?amK?[ HQ_,E*`B^bk*b׈`SY=@T3U??U/I?!E Y@Jנ?* E`B,?A#@9 V*9P?6H@?Ey ?Y[m ?P2- @>`??V=;`?G֠;S;܀_`Y@F@@?7G?U @T#@?DE_ ?W@D6V`' ?:?LG:@K+`?I?Mgj(M{@}?2į?`?/`4n`P3s؀Ha@Q``?220"@?F ?_e_?M?L?Xud >: cL}a^ƀX@S$WOK4`?6?<?(`?A؍?G;`"'CW @N[?Q݊?[8?L4U@?>@?B?GӉ?Ak ?O ?F?W$` "ZєWFH20?+g=ZQt9a3@aT`1:`?/?oi@;0:; &#>ߘ^?>A@?, @;%>kSbQ@>G>۷?AV@?DX@B{?"A?Y( ?66@I+5I1h9xB옠K;-n@=l\J`QU ?OU`a`>Rp?9J^IRҋ@?#s؀?1 >PF!B6?H>R:`NF>GR0"?I@?6ѠAa?H ?b ?ZҰ@?4LEߎ XE*Jg'`?@?1٩?1 ?QGS?܀J@?F]?T?`T#@8 z,9Y`5C=?!.?* ?Ѫ?$ ?APNr1P`#C@A?7Q`?>ǠG%@=Q@7UV3?쟀?8H7q?K=]vaZnXd PqEXKCVe$@?L ?Gנ?G! ?K0?@0E(X6@D`?M?P?46?69Z \@?;Ѫ?Kl?=ĉK5ZX|RRW`Oi:]-@R ``@]NQ! v`?SB@?N@2@TN?"AS?1`?QJ ?8%`?1\?*?QL?? ??C\KOPJ?>5?Iɻ?S*?K_{ VX?.>B@NO@-e2??J`R [??/ ?5`WSx?9b?R2Y0?Pn `?/6J}`DOY`6 5d/`E`E)?I@?]S`?Q?2^!3_@Fʔ &?K)( wH?;p@?G ?3N'@?Kw?7G?,<?!@&K@?W?0@$6!?7H?#1T`R<]*I> `5?02- ?Ba? n ?C_ ?;@Qo<QMI|!@[N܀?FF>, U@YiUc?u`?P@?rDJ?}K?<`?*WUp#a1'Iҙ?E@?;3|/t. CT>@?/)@?A`>7 #|&Q0 a44 ]:A}Fi@WLE6?6S`?Qɖ?b?`"?HԻ ?Xh`?Ym;e?3`?R(?$@';L?A?LGQU*@?(M-\Fwޟ?&F?X?\gT S2p \ `?=8? L`$? 5R ?`C(`BX ?P?H!# QGPQŀ?0 `?FL `J@7F PZ@2D?H:?Q`?)dـQP2 R@@ ^ ?) 8D6W?/)@?#`?# k?Eg?%R 7@?K?VA?3@>⑰?5̀? | %Cx(D?9b>ډ@9@7J @R\`U"?PW`?I$5 TMXy`?5?Y?EQ?0"?59b?s?X@?K : S^e< e%@@ ?ZPm?S@???(@$* ]"@eb`Iw ?K`?8F`BF@E\@0W`? c@?)?8c?'!@?0?9^2/@`E*@E˙?*7 ]Tf`?;Q?R?TwB@?B-?'?Yҙ?Z?`?6 RU4֙@?1@]$`eDH?+?5R ?d&?X7O D@\10 ?3g ?,A}QID@?3EH??@?1!`Aϯ`j@?P%m`?)$VB``Sa>K9?.,`?S?F D`GF'ޟ:ێD멀?Γ?P% ?N`?7F?F?Q?Pm|?Tn`?Qc?'?5R?9vRb@_ wUST? Q(`?@?DSȠLS_L?k@I`Ku`?V?XV`;_ `? L`?\ ?V[*?Q"?N&>| ?%*@?Y?UǸ`G2ɠgo<b?5]`?AJ@W`?0 ?PO= U@x`^w 5?S, ?=t DT`QA\d?>?I E?A5? #s؀?:'bu Y@J0 ?@}?#"-va`f&`O7 ۷F@[`UR?"5?Cl?)"U@>qZ@WYF~;?0J`U»@cO&.?C%"?Qk?"=o[%GII"`?Wt?BBL7@_?H'?P%m`?5}W>@[{_?>*?1@?!u`8KSI`L@0ƺ?LF`?J}`JXP@'ޟ?@pBL_[6@m?.ր l?2-?9:Kp`?>GZ?ZA?\ˠ?L ?m@??``?VCT@?Sr?B/`? >?M,?O U] dS$S`E*@?W?Vi?/D7NP*jZ?@O`?Ar?O ?%E 6\??FV?@ry>`? F 0S#xOg@?2??X7X0`g_!fM[`-<*[?JO߀?\?>`O,>r>m ?6@?A@? TN(QA#1ŵ ?6cz?#I?"4`?NL?#`{XX0?`L'T(ZOc@aT>`%`BKU`H7:2HKK3#?9~ ?1QA?6M`?Hd ?P`?S@?/ 7>?D$@?Yj`?VB8?Uv<DH?T?V?3[t?q?O?a:?SOE9`T@MRu@/g@?H:aCRAVЭ SiP`B"FN@8`?1#?@?%/IS3`@P\M?3 ?6O ? C.K ?Nٰ?d?W@ )N@Р?"S?Na?B{9@c@?PE?W#TQ?#s/`b`X?T0N?_0@?M)U8X[@`9 Hr?CW?B׈`?04@?M8?X?FE$3J [`8 D<L`7o-Ks@:9?KM`?$` ]l@V <?6@?QtǠ?\!?Y`Gj7Yؤ ?B ?+?T"H 5~?J?P$Q?PP?KJj9S L1@?=s?\@?\ ;hH?>[CЀZ`,7?@5`0So Ri? (?+6v?M`?R"Fn B@?{@?'}`?B3u?]2 ?b?`0?ZH?Y@?Z`?]?Z.?G`;] Kz 2r`?2^?B6?A?  E?3g ?b?a-?@9"ROd+PW`?QK5?5F.?ډ@EeS?!Z?T? =JPMV@D4 <.@?5L`?Za@?R@[ V4]?Ad&?X i ?-@FB8:Dɀ? ?Cm1?YS%UN@: ?@?Vg[?CY=@9E?F?Q K`U(?"?@=C 2 R9^To?8?S#x?H?-?5g?E[?4l,@{_?6_ `?G'?;R?Gޟ?U?8`RV,MԠ?c `?_ R`[c\?H҃?ae?\lQ@?@7 Q"T&?,?z44 J?g=?V `?T?V??W@?D` ^ ?9C`?ZwȀ?b`?J?-n@?W?R`:5D@?-?9 AT;eJu ?I*?V?I "m?*?<?N ?O}?,?*,e?S?V0?@?  @`"i?9v@0 p@?)@?6?t@@?V)?Y`?B ?K@?0U`D4?A > J`.?Pz<@?\˨@?CxQ5 ?MRZ@@WR@?:M?Bj?C?bO?a?#& 0?D<?L@?2$ ?3_ ?;4`'?Z.aZ~`^MP>$` ?D6(_8 X!!`?_ ?V)F? L`?9$`@z<@E4ԀIр;C ?$?4J ?6#.<G?P>?Re?Qπ?T ?Q ?P[?O@?"@La p@?]΄ ?WdRUj?LA?V$>u`F?L>, ?f15?*?6K?8`?>ٰ?@@6\>n7 ?ML?q{ 0MlW7[S@Pٓ@?'LI ?-@Gd9dـ?H?G*?7F?8 ?;? Q`?8҃???\@I?9&?T``?B4`?/l`m@@`; ?8*`?@`?>BNO@> PH]@?Gc?Ѫ7?[P@?]?!?R p?f&`?\?>ݠ?P?YH@?@f Hki:@8`GCjCyc?"? J> 3R`SA`?]j ?[Jj?CR@?Jn?T=?U@?QR?4@,X6u7`/^J ?Xd ?2?av?Q@.5?I?Y]?= K JQsPE7?(?39`D ?4k?MoZ?*?)h? R?N[?b?]+U=%[_!QT ?#Y=@ K]CVY`9H?A`?@?+lDGeȀ?14+Vq 2}`?2 K UbUIF?7@?*c?O\`??O3Q`?-"?_?T؀?S`r?`It?RP`DsMϟ?=L@?@?Qp@?Qk NTFU Bb ?L?>!@?S?(!3P?P`.?a4{?bE`?Xx?:??0@?Uk?J}SPZր?KG?cߨ@?#C@Xo?C k?`a`?4XX@SCS{D 4>L?Q$g?A:`Z^@[W?)S ?N* ?G@?Jb?Uo ?ZPm?> }@S}RJ5Yj?.5?/ĶO ?Ch@?Qb|?;w?){?4@=~`U R V@D ? ?/쟀?0}?+?T?J?XZ;?+X5G@?C?/ #:2=`\=aj`?Li?VS?RH?8y`?1Ri?E@?PQ7?U R ?GRcbbaEYAN" 0@?!V گ>b; V?oi@?o>J?gJ U@?X@?62@D.`?@`?[G?9k@E6Du A?+?H1@?6?0J`?8`3`?4k?%z#$?O6 ?UFEX ?`?H^@0"@+x?4ǀ>^ޠF32% ?Dn`?O]?R ?Iǃ5;+L?P p@?T?Sp?M=1OÚ?F ?aP?W5`El?Q&?\bc@P#à?:B?P㍀5*@SGI@I@KW`3̈5@7->?B9`?h@Uu35à?V%e?H!+)(>q?K?T?VI?7@QaCt`?8@?:3 ?A`?4|7` @?!@B@@ ?Tj`?J @ QLU R,?)&Ā:ێCI?.@?@@ S4@@?"x 6@ L`=S@P*?O;?D ?(BlF?"eX?eQ W Su@Q@6˰?DmH?P$Q?L+?:n Q7?C `?R?J@?7P@?F ?*@R?`E+ ?A?A ?R ?`C?QP2 ? J`?,V?[?@kIWK?5xt?`[x?X6@5P?)`j@?2 S F?S$?H@Nx!RįGsIJ> ;`?B`?Oq?A?;1 ?> ??ث ?T ?W2;?,_?`?P>@Y6IN?3f?;?0/?;?>?/?)@?5g?] DSXPi@7Q`'s `?}`F U 87O ?eX0A`?C)?R?#PC@L D`?@@?D{*@>?s=$`? ?CU!5@4|G+ ?0n `?Y ??j QhKLCڀXJ^I? `@KD0{X%< 4?S?$.K> [`?M9?N_@?;^@?N }@#~@?GW ?U/ ?Me2=J?C4?]V;?O4Zo` k!~?@?>V(QB,H}&Ѫ?+$Yc$.`?XFF?A)eFwDl,@? y ?=?5 ?G8T?JM-0HJ'8`?@0?DJ ?P.٠?S;N?@!=)B]`?Fb`?^'@?ZFs@05!?VP?L TNˀ]ŀUe P>GZ`K@S\?5?Rb ?>1ŵ BΪR PD%@?&q #L W:@P p@)v@?1俠?@u?r6K@3]I^2I"U@?B?F[ABI]H D~?JM?Z-?DK?!?#̈ ?1@?Bd<?M?8@7i?J `?d؊?b?O`?LF`?ZW?`?U"?w918n@4L,ABA4?"eX2@OQ;$G78N1. ?#ê@?L `=6 Yg0`?H1 ?A?-{_/^ԂX@?J ?N ?=@B̠R?+?Ry ?@e,?H?OiBVP@?@}?FC `A[H ?U?dI`?`@?VM`?87O ^Z3@c%`>TN?QT`?@?Gנ?aƀ?PxVCT@Xt`=;`@?EK?/H?Hs@?1:`@Q7SGT+Fʔ Q7?x!?Eu?^?QS`9G?I?Q@Nk P??s?=U; D?h?Ux?W& ?Dh?N_@?X6@?P"?)&Ā:cE:_A,`@6x`?ۻ`? :2?!?EVY.X4??@д?&?:M˰R ??@?;U<@?E@?LG-N W"(C.ǠC@R=C?4) 4`?g@?TmH?A#h?F?"wNaxG?U ?T.@*`X(N?!`n7 ?! @?R ?IR/}?8%`?QK-\T]@YC;2@?FCA Z;+`?;?CR5< G@~?"?Tq?QuU ?!n7 YO?QH`?P?%`?&\?:X?G?5?U%O@G$@?_D?[@1?$p?0kUM@`?F-(@?)`Q,`O$`?;̀?W`?@`If8W?(@ 58ud 3xG'f`AJ L(#`J|7IDPu@C5àPW`VH@UbH`E#?9o?Pj?UA`?S?Ko`??]`> M@?$ ?L0`?2`?A ?T#@?BFN@BjG5@)J@S*/?Kh? ^ "9?Ec z,U:_6@?]H@?d=?R7VG݃ VЀS{ BR ?J,e?Y|?60{Cq?8M?P`)R3K%`3@?Ax?Sl?>zDcM=e2?; V?Q) ?T?F@?=lF-(@Q`=?A?2\z@Qn P'?:#?I> `??`?Dl ?G`?G9p`?Pu?U5@?Rn7 X@USA:)?>?Z콠?UW?,z`4F{?.K?S  ?9rQ~6B8?4ncQDG ?Wql?QL6?c@?9@?&?9/`g=?WU`?Uu!1Γz?(۠VWHYGǠ?*a`FDp C3?Bg?HgB)`TJL:LZM`3~@?`; 5A`Bh &#? &j!`>)(1 U_ QZ ? ?,r ?= w ?Kw?TWeȀ?1zR5N` ??Lv`?D@?E/I?UU?O?) ?4i?1hEYjFB8?=/?CZYԎ`?]?%`Bx1`J @-?N$ ?Q`?YHPOhTP6@?EF@?X`?4;`??N ?>5:Jd:]-@?E@?JܪC=@P?'$` ?D?(@`?* `?6~?-\T2@@4p [6>@-?GCj?92?J\?W?Jr=`?)E??3@K\gT O@&K@Jw@.q?P芠J ??P/?S`'Y?F]?`5ǀ?XV?P?C~@-'?*?E)HcXh?T?Uj?E?,Ҁ?KIO ?CqC&>`Hs,17΀"ؤ ?4e?H?<9@ @@Z3?KIO ?M5`?R?9ȟ?35àD`?%\@?T8?I@PN@:ǚ@`N@XNcC[tKc`JO߀?"?VR?L P'?&+?< U>!? G@= ?46. 'o?@kCh@[N E?W:Q ZS@K#`BtS4@ ?P D@?!P`8`?9@?)I U?J? ?z?*sY@?X ?JSV{@.* ?B ?F8>@?3?5?K<?N ?T2?['`?KL'Y?) ?>zY?C?LQ( ?3`Oh`[1eD``v9$??2?K|N?T]?62@M`E4iH,9 G CO7 RP$JI8I L>С `?Af^ P] RR@?X6@?[{@C>?^D ?UL`>`7`A#`?@q]@BR ?E]`?^o?T`??ZI?GXz?B.* DA` ?3j ?VI ?Qo ?-W@? ? `?;Ɣ?V?I 8@>)('>NF?4 ?T*0 P33 p@6Q? `?ATy X$Q+?2 ?[^@?PB@0?=R1>VgG R=QdE4ԀP)?Ku@J _<8Q?bMTW 7[|NQ0?:Kp`?'1N2pn?CL`29`I'@?=/`?FE-C@?Aϯ`?2?;e?G1Ns??T!?Qs?;/Ϡ78T2?M?S7 ?F`?PV ?PL`.@P;-?OW?\`?A P `TTW4s`@P?7`?:X?:ހH Bx QMa;hZ`NؔRG ?aC}B C7 ?2{?EfFU(?4 ?E`K[ Kg=>`D*WV]V@T\ =]?,m?;:?HP?P/g?=5EuH`H̀`?Q| ?SQ ?#Y=@O@JE`<?1Ri6`??DE4QB@?T?0e?T4 ?Pٓ@?A)e?V`KrS5D1:`? ?1 @?K?Rɬ?K?C VSg`A\?YN`?Y >, E`?>I@?SRP$߀J`NE#C@?@RS`?K?F2@?7E@+}i?8@-?R !$`Q@2m1] N'4`= WC/?JJT?=ULNg4> 1?D ?J?E ?F9?82?N.?\K ?d&YX?)?T>x!C?F;A_I?:2E;bW?'?=G$yy*?B~ ?< J@~`?T¤?V3E>b[V%?RV@?cn?] ?P_?7נ? p@aL?k@Vo4?N?U8?R/`?9"U@)[8X@?2`? :?A)`G9 ?`HXQB{? `?DK?P (`?[=?d݀?`g4Y ( ?Mr??g@?CZY?Ja@?$?)"U@?3@E1 L@?9 )@?

D@?)`j@?*O߀'F@rDB% ?Ds?O͕?A|@?O?G"(?HX@J!OS?6 @?M(OS?/WޟP@?9?MzC >]MY/?2`?3q?1>u@.m`#?)ܔ 0@0ry?&M`S>c]+`?YK ?" "?Xw@?IC&>`?$?;m![H ?B% ?Q5?B:?3W?"i0 M<@WJ`,?_M@?^2J`6ZReb@Sl?&n?@x?"FN@5t@? D@?2e`>*6?1 @(Ơ+$?As?$` H+`8,9 ?+L-"NU7Q`?ZI8?jb?g~s ?CP, 6Z ?CJ?8 ?% )<C]?1zRK[<`R?@=ؠSY ? ?PU1T`Ny=A2C?9$?N ?+ E?1?Nz?6 ?DI`?P!I@B5@!d&OU%?O?쟀51@Fh VԎ`>P9?P芠?O]`?=Q@?J5?CQ F@L``?Cs?TY?TI@Z Y/T|5q͠?:ހ$ͺS̈M24?D?TE_ ?.T@FgE`HG@V)UZB`J\@Oh?>]?#$?:?S??;? Qr@ ?9~ ?> ?Hr?G?E ?T!?T`@?D%`?# k53?55@?ZO?Q`9`?NZ3@?L?L?U$3?C9C@3מ>Qk S 1ZGO/% 7f`L1U;{@=?#BVA3_@?) 0e,"m> wJa`H;`?Dx?T:`?/ X ZDɀ?E8'?c?X[>zYVk ?@?F`?C8ZY/`A@Lˠ>KJj[TJt?Jm ?U(p@RAb?2S?3g ?" ?3 k?H ?F} 8 Q6?l`?J@?A`?B-?A Z@WHf@;{2@X|`[8A S|)3/9]Z'K?Pt@?U ]?Q^?TY?F`;t`I6I4Q#fI?@U AP*j9ӵ*@>J? ?%}? ?3~?S!A@?R`[> w2L 8VN@Z@Hw? B@Qۀ"L ?K$?OS?Qy@?< `C/9}`BOKƔ?`à?TU`?V/?U< @?Rw 2?J9?,x@JhC@?4%8?Vq?C? $?>>| ?0?zEKRJ/WX`4W@?EF@?)[CW#]t*@E?)h?HY ?8x?7/-Gg@@8S?B ?Y(?YS?Q/0?zSܛ?8F`?^?C@S]Ue? ?S@?Iҙ>!@Y\Z`?FU ?=rBh T@? ?UNT?KX'JwȀPA`?+?4.@?-?*G ,V1 v`?>B`)Z?A:`H*Ja@S %`R`E)`Y`@@_?`NKCR@?HC?ZC?bd?]?.bGwFGER LQNU>T@?)+3?Q<=?Sk?9ܔ ?+?A)e??0@?DG?37 ?1j?5 S@K6v?JE`?B?,?7R=-=`?T:?VC@?E?B?I0?P?<ۻ`IXȀU(:?&`>?>q{ ?>Tq)`V??1`?8O@F$^ޠ.g@?`???6?Lh^U?4'p?I?&>`V9@V_@?!d&?I?H5?Q#˷Pƀ1I|W?)h?F.D's?KJj?M5`Gޟ?"?[ǰ?L^uAqt 6r?E?I0ăK VEM C?'x ?N E$ L ?2J?=;`Jx@LMԠ;RM<@FNj` @N Vk= &@? E>TN?L%?=$`@ QY`C{?C/?;wLNQP2 @4d9r' K@\@\@x?(#~@'@?| ?GXz?C?0A@8Be@5?I;?R/ 30G\?7P@?E?D ?5̀8 ?91ڀ?N}8 .?m?W.@? ??;?G5P?Y`?&O$D@?S(v?a?RO:JqE]`ClHŠK?'?A|Q Rc?E̵`?BfHfPP;?JW ?Ir' ?.g@?6@&ѠM[80@?1m8 1٩?62@@?3s؀?X`?Q@?A(I@?K`F\U `1 @=FX@8Kډ@Y:+?Gޟ?T`RL?P] ?GO?2?J ?%`SP6`>`à@FU ?:`?-R@9E?(WP;%h@Rx@J@' UYT@$ kSE7>`?qTRP[Dk?@ p@?BJKN?5?E`?'%v<AFMN(Q?A?D:`?DPu@?Zz?aL ?3WQ> [`?TOY`?Z_?]*?Y@?Q#?Cͤ> ?, P`à\كZ 4?Lŏ`?[z ?R!?@A '?On?=v?>: ?MHӟ`R͎ ?Dv@ v`X8k>`Z&Vz ?S ?e{?N3f OF?`wȀ3=`1zR?IS ?Xx?tTL)1?X@?[ ?a g?c?GZ?L5C=U?:x?G`13@ud B;9?@?`gc?Z Q:F@?LJ@?D@?2r`?DD?MQ>?1VR5@I?:)CW`?Bf?k?"c ?0 ?4g?E`(lWZL$HK Ijd>~@?%PăEy@GA HԻ ?XF?-J?Gg`t\BBFN@?D?AAȠ?@@?4"?:@?O@?D@ ?&?&#.BvF/?<39`?H;?69?9 A =)M AW@?7R8V`S@?!M?W`?W?_@@?_y@?6l??Q1?+QFcz?D?V?O@?F #$?8_8 ?b6?Xb/ŀ?@%@?U ?TZo`?ZC?Xd5 ?P?)ܔ V-(@Sւ?Ba?ډ@?> }@A%?&0{3j K ? ?M(9qRziJ1? D@?M?S`?@Jq?;?Bs /%`?Ru?G@SvTR?0(?+:B3 k?8=?Wh?NST?3>- ?R?P, @C ?A->0-@2i?"*?9`?Py`?\,?BH `  ?A1>?)t?T`?Q H0 T֠?9t?Q?C?G@?4 CFd:>"] ?7E@?N ?4`>Ä?9ӵ?Ub@?JҰ@)Bh '>B`U2Mǚ@CC2p ?;&?3_9@?!|?E?=`?C3?B2YBP(2>$` ?GO?K ?%U Qw ?Hc@?O@?@%@?El?8@?P~?d(?`?F-/`\[?A*?S ?;L?Ǡ?j PA$`6u7`?Ax?EHl@?1h?$P\ۀ&, ?W)@?E;3I?H.p?T@ [`? )N3/& ?HJ?QZ?*`U `Z@N" :?5s`?T ?S̈9~ ]`R"F?Db2?I$I|Z4QO@Et@F >ÄB>2FN@?FO? `S=ĉ!USNX`! 0 ?M?^.?A`AC`N@M+ ?PO`?Z:A`??`R@[@]WW`[q8H<@? l/% M :7{?@-N?,?CD-@>]?A: ?W?a?V ?5`?])?[̭??@?%`?A٩3@W`M 6 GN?oi@?P? pBL-`B+?(@?Q0 ?R>5_Wa4 ?1Γ?B"4`\,Zt`?-@?TwB@?R(P`V @7 ?V ?HG?JNx?=@?=Sv91@)`0 ?6*?P"?G?`IW?:a\SF?T?B}`=y'`>r?'6=}HK>?Y?^I@?R@?@66@O@HPO`WU`8b?M<.@?2AT^Yuz@?4DC`?5W2`3< SVE$) ?\?0@?9$?T?JtuRZXI SG``T ?@ p@?D?Ecd@?E AhE}?$g@[1UL?@3̈I. cne#^,D@?L% ?1``?]?cc`?a?M`5@?"X ?Ui} ?RI?&b`?-\?D׵ 8DVv G.Z`B-S-s>p@?W?Paؠ?7@?1F?;?V@?V#.NHv`cBXe2Ⴀ?; ?LZ?6ҠE@@T?D ?VR ?Q:`9/`Y'@H@1.S1@?@?Sh?G?0 <N ?9r?[^@?X_8 ?Gʪ?@q]?A5t@Jr?*B?9VSM `6aCCqA85H@I`Sȧ`?>!@?e@?`|`?4K? L?5 ?I?V?9 S6MťBW@Z^69Z ?D!?2 y ?!T.p? w!g?2@?@?B(_?6)?M5`?UQ+:T=Fr<(#`?7?WW?EhC.V`XKz`?IM`O`A"@@BΪ,%?GZ?F'@?C`7@m?,?@?3N'@ZQf@f04B){`?+$D?4?`|,?[a$?4A;D!..5Sn`X=CnMډ@HR*n ;)(V5!?SӀ?Q?Hs,?>&?#?M9?O,JH]PTB?0 ?@ ?a10Z@#5à?$.`?6ybu &B8?3& E9C`~`4.`? ?1h?Y ?fg?` ?1DX7?4@?@, ? ?F ?M16@G9T멀U#I?)@=B ?P2?ep#?[L:AJހ;~?7"(?Vy?F;%%Dx^ Y@N??)!@@h`'o? `>ր>zY?j@?AK?0P; V4.`6Gs ?.P9?EA`?8Z?5~>t`A1Y8Iр?4݀HP @-CK`Mm7H<?* ?U'?HJ?2m?I!9?Mo- ?N&?(%`V ^ If@O 1T`?C H1 ]a T'?5 Ic L_n>:%ˀPkLf8`?4?4Zo`9G?;$?R ?<>`0 2?2l?1~KR-NN:b@=y'`0@+&?] -~`Kh9`?BGj?HC?L`?P4@6`?FU ?aE ?S.U>L!@?RU?_l`?]:?\L?R`+U>d?QG?]7?Sх?R?SX`?KL?GA3?3? ?  EGO)?D?[l?e&?`\M?4;`JL HZ>' @?L@?%0@8A?GG?67"JE`HbP8@S GqTC'W53E?Hb?F#.EM [TV Q: P & (诠WHgZ&`1@?\'?]`:@%`??-G`Ec ?-i`J@Ox 1X63`YS?GaY`?Sl>X@>?9+3?CI?H?3qOe_VV<*4(Qi#fe`P2?8| ?S?=׀Ox8@87O ?P?C:2F~ I$?.Ǡ?I@?Oŀ?[?YY5?82>q? B""Ԡ?'U'dـM`(?L?8@РC??.P9?Q,?? @'?3dS@?ZZ?Yh,?N@?E̵`4 ]9`R9?TQ?QRK J`?Z?dGO?U ?>GZ?ER ?I9 ?M/?^N`?bX?U ?A>D@?"`?V﷠?^P?MC$cMUg`[ `9k@?Qx?T?\?a[ ?W?Jb@>B :#? 4l 0@?BE@6꺀2?^S?UpA@DQS]VڠՀ:xRH?!.?W݀?_5 ?\?L=3ډ@P+@R+k D@RB`UJ@??_Qk ?Zda'}`?B?_>?MG?L``?T@FtS UYuz?Qo<?Z;@>q2?62@MSZ WA3)1?6=@ w.րVI e@^ D<ho?OW?U?=$`?B?Rk?;xA'-`Gw`1zR?=u?Qi#?X ?S?E ?H@??2 3@?r5`?<(#`?Z@?Q؍4 MZ?F ALb@?2?W1?W#D`?@U>y!<=Q^X.p?Gm /0@~?Vu@?\d?G p@?N1.?a?`D?XJ?T@?Bx Cͤ\8]O?Ķ?[5?T W!`^n`B`?0?DP`80`?M@?P`.?G$@??u`?N5?*|7KG @9U`@T]4?S\?T}?QGG^?V@?Wc?49-`?O,?Ww?Z(?a?](Ǡ?D(17~?D ?Wנ?Tu?K?F?E)7LI Seo ?J9?c?L1?OoY?^9;&\ؠ01a)@?ZN?W `%3>F?=&@Hm\=VWHQ1'RvCnM8.pAYTN:@UJx.,`B?| ?E!?0Q7?0ă?FK@?P?4? K5@{X?B% ?AB?4nc?H?N?2AJ`SQ5U@S:+`?D?H>`5E ?@??O3IрK@?0?Cy?D?26l`7A3?O9?i?e{?G@?6Q?:#F6@beg^W_?0HY ?Cւ?1YB T{Di!~Y@XV7$` 11 J/@G2ɠ?O?=)UU-L O_ԠW `5;rSCK`?D >W2`FW?NV?VB@?Hf@?Ps`?:.5P گ3:\z@?K?Jb?G?Uf)?[}?X ?L*[?#`JaPP?L?R6VM!?V* ^w+H@?Da?8W?N ?D>[?F3?F;KS `?9F?K 7 I1B@@Z@?/?-M#ʀ?g@?H`?E`.IрQ٠MPZa@F`?4i?D`?X}?U'? ?%I?Ir?IY`?.ÄA8?E$?DKFѠPP?@R@?V ?ؤ V> Y}= OE9`?% ?L-`?D݀?)A_B|Eg?Ng@?Vp:@4.`Q1BV@? 5?9ӵ+D PJ?GɎ?gK?c8@>| (7O ?Hw?:sY@F\WRP{X,IeP9>`?W@?zFd`?Lt+6 0}G`=4B E`Q`?@??``RӧG`.F< DQU&Q?Q؍?J,eQ@L\> )@?: ?Pt@?$HHT@_A?]?UA`<*E!V?n?& ?+~) 3} ?LL?=@`̌U?Vz`??)@M?@?N(ud 3@?&b`?Gy?T ?=@RMFY`?V{@?V.; >* ?9ܔ ?0?;@?2n7 M.8'?Z?`@?G8TF]@?>oC w2'C?P@?R׈`?H@?`@?a`?M5`?J?K ?3z`?7s?*sY@6H@?(?AOKt@V?B#?]b@?6R U Q4DC`?K?Q@L$U OK ?F[ ?I Ix@Ja`#'Q`)<B:`:q?M`?MM?;?Tۖ`?F&`QH?<@?M `?P`?B#?3 ?91ڀ%3(v?BK?AMD?RX?C ?C`?t@Enz@?`> wN2 p?;0??]`70 ?8Be@:`I ?N6?P`I%ToF)?BT?Y?Pٓ@?B(p[s@I`?Ud?CX!QۀQF[ Cq;4`f( D%8?G@?@`@Q73@?XT"?N?@\M?W`?I LM`? ?Rz?\?N0B(_2)`?Qɖ?:T49A_?QR?A?>o?P2- ?1~?"`?Q/?RI??͕?9?S ?\rj ?Oc(?L5q?]ĉ?D|O ?1<=?Uf)?Fp@?BK?4 @6 `6ѠV`' @L?QE ?@@/\`?Io?Q3|N: Ci@,7?A;?5`SZ S(`Aę`?=r?M>`?D2W<Ӡ68!?AT`?CEH:7{Kc`W Z4(@(+`':@?AF?6H@?GZ?H0`?6m+&?A ?Sv?Af^ ?3?8ud CX!HF`$ 3v 7 ?'G?/?m??&O &XdSS%?F?D2?:`?/yT?0?U?`, ?AaNL"`0?M ?a?`c?A@?2@?S?@P ?RY`?;?F @?`?Z׭`??Q.Mo- -F(`?Zu?c?S`rHE*@?I6d1`\բAF7Ci@:wȀ,D@4X@,.@Qn`F)?T!?Ku@1m~?-F(`?m?;Q?C ?Lˠ?^ؔ?VAA@=\?D?>`?7s?0t@q?8m?, Q`C @-PItV*QO{VM``O?J; }T GzJLz,?B?HA_?G\?Y@?O`Y)Mt $#R@6Dp J=Q@A/`?2U?L?;L(h?4?0; JV`Zf \F`?@ ?1``? b`?{_UX ]_[?Qm?9[? :@?P?HjN J?5>?Jn ?J1?:Q@]^ &?U?BL C%"?T멀?^q{ ?@9`j@< 94 ?Di?^ ?X?F?X?]G ?@?E`?V?B?Hz ?^ؔ?U`?zA-@N?3?d?dKp`d}[@]t ?G?I ReX@P[P\ME< > w?>*??4V J `?=uAZ<UPTN?W\ ?\5?J?P?eh@?a]?5@?Qs ?aa?C, ;`?7k?Am`3qX}_ES?-GD Y SݷRiYNi?R0@?>oJ~o@#s,V F?"S?j!`E}??Qʲ@?Og L;O78?3?55@-v'U'?+F 7G&?7@?I)D(VY)vTc`Z@C?Pe?B?$` ԂX@Yc??d_?T@ ?G?a?>oCR] *O߀?Eh@?H~?Jt6.DTcM??F`?d ?[c-F(`=`?F?O`?>: ?8?)$?#T?K ?JW7qSN'@G6?L?\=?MI{?Ej ?RW}@?Cg??`?N)k?!|@fG V ?3`?Tp?c@?X;Q\cME ?_`?dC?Mٚ (5., ?.* ??S?: ?+}i?@`?I?0y =ĉPW`R`?R?[ ?Pk S W  D@3G`O?D.?W"(H"?[?T?4?J@: #U3J?)[?F?Eh?1?@?M ?Glo`Y`:?`?@?-?R] ?O'J8`7LI B2?H?M% ?J$@gFK@QzRO7 ho?Cz`?@%@?<?Qd&?D˃@?bF@?60{Wϧ?@[1?ahN?5$3N8`?+?.,`?PO?B@% ?Q/?d3@?]`?=F>G?p?ă?@q?Q$g?JL ?M?R1WLI FE&K@-+ ? 4?8n?9`?Bpn?N ?1 9tF?2H?OÚ?Tf`2n7 a~3` @5s`?Vժ@?Y-k`?3`8ao> ?8`?,qN`2@<@LL K@??J?Rb ?[j ?Ucd@I@$߀?P`?)[?T`HY ZX`_DA 4`])U]?"?TC?L?J@?V ?U,@?F꺀?EF@?>N`6 *a,Ie^^`a| b?B?2)`?H?DSȠu`3+$?M4k?^ah?BWL{HP,PwE EeG[@#`?6?*L `@[1Qՠ@6?7@(%`D?8w?T?Ox8@?0J>]  A`GQ ?}`?7#0?8M?LMԠI`,[ 8KC?Hb#$`?K3#?8۠?`?KG ?I?<?P>^?Q?3/d&?#?Qk Ri?EEu?TNˀ?Q:?SG?JWP+@S/?Kt@?LKe K>?&??.>| ?L``?W>@?P?)<;@E֯?T?33X1 g_T0D<5[I2`T`N ?%?=@?!26B%R$WH@?:f ?Zu?e#?^t@ wȀ;?B?G\?E+ ?Rl?L``*9CCN'@MQD ?0?Q`?V?V ?XZ`?S?& Dv@U2`]`Y+Pg@ZV`QQ?F?F ==<@>ڛB ?*@?0t@?HY ?BV?Sמ>۷[e G5H_8 ?0`?E`@ p@G@?~(҃ ?5`?CѠ?H;eE6 ? ?:@9@?>?Q/~?Hc@?5NT?;T =?| T``@Ji?8 LG?5?J0?BÓ>ؤ ? ?2TN@RS`<?*}?Qx?XY ?HV`6x`:ێ? ; ?<?US?d3?cQ?U?@* ?=`?;;9;4>?h@!/?!PPe``!^B?$`EF ?C'Z ?:LSD>`??^?Fg?*XDQ@:I8?(W3j ?&ĀIx?`?R ?8*>ډ@?CF,ҀA>u@?Q`?\`?Qx?H^@?C6`?4 2AP~6B8?Kg?0D;e?@-?L?N@?PE?MRZ@?9t^Ri>0?9?B ? Z= 6@?G?[?QjJ W݃ 5̵`?@`?%?:'I:Pm|Ko`Ik@RE@J ?B?TN?4u B\`?F?QT`?D&T7d??ZL ?X0 AVؤ ?Hm?1&>"B@VCT@FѠ?mDWKw?0O?F˰?+ >Ri?Ce?W?X?@ (`oi@?=1?J!O?@?%`F ?#?%'U'G9p`M@& ?GZ?I ?84?2?9 ?HD?Q0 ?8QL>ORI/F:uAϯ`Ѫ>՞%?쟀PBBH?Rw?`?DsJ.)?<8`?(I ?N?4`C3MWU E?M7?L2?2g`OĶK ?È?N)k?Q?S@F )?]`?a\?Lz,?HP@?XG@?W[? XZN)?D%8?;Ɣ@@C"; ?Q?\s?M@`<D? $?A"@?IsB?5(LhoA?UP?U`5r@BH?3?& @1szsKP, IJT@R͎ ?5Eu?NO 6 >1 @=J9t^Eh/% :AJ<` J`4??J)?[?T?U?\W2`'?J"k?N`?8@?/@?W.ր<K|NME 5r@@ U Q@1 >B ;Ɣ>zY? -?M?Mv?!4+*,e?.?AT`?6;5@B@ă5@?HG@?` ?Uߎ A2A?UO?VJ?J`?>P9CnMNĠ@"`(W!?NK?8?Kd?CdS@?.GZ?@J?7?x0pB?71?avq@?^T`?2k?1/?SE?S`P"F#$b'>- HjN XI L?H]@?X&?? P$QT J;`?B4`?I0P-[`-?=`?E˙?Q Hi2@?Z?PL`?G`=? D@?$߀Z+t@?51 ?4 =64:@Y[V.D?-v?D/?L%C_Pd`?O#@?`=?QN`?&6@?0 `?Qi#?Q7`P ;H@BIR@E@?;2@?U ?Y~X?G~, 5 >TN?P?Lˠ??;?P@?U;{@?J `RYܔ Jl`G`TA,`?=i`?ZFgIHڛB ?M?5@SPW`?G?Q#?)@?1]?'JQJ@@ D@@B?=i`?MI{, ) ?V鞠?[1?B] 1MI;\ ?-:B\z@?BoS?'Q`?Z^@?dI@?^.?Fb`D@SjJ@&K?JhC@?X@?K V,RC6g$pAZ,`N:, R T@?6_ `??J`B:':@?G:@?Dv&PF鞠GE`Bs`?JX ?\Hנ>`W]xKG<Ҁ0?D֠?JL mGCj0b`?T,?\?91:?*?CFd?>Ǡ?z4X7?.K?*]-@O* 7?X8?Z ?J ?#~@F& 4+?RM?Wנ?H ? ?@~?a?\XSO^H 2`*O߀E?ΚM Z}`I@-C< Pa`O?:_d@0D?2;8@?#b;>p@?,9?@F4?5s`^ZcUF`?CC@?K"?M?Xa?T@?M/`(!# SWB?N" ?W=ߠ?FA?.pc@7ISW'?5?-@u`?(҃?Z?c?PW`60{"?O ?m@?, ?>Q@ٓ@PO?:M?Y5 Y @P ?A ?5P)&Ā3_?=8?JG?0e,?L^?bn?]v VvS@U+ ?-`?Va@?V ?TcM?C ?8Z?\ ?PԖ a] c`2e`) :m ?F?V?Q`,*[U;G? FiZ S?C ?[ ?L`, P9@-=J%`CNQ?8QBWOR ; ?M?2=oO1`P*`;\ ?ቀM]p@P, )W?EV9L0`?/?USQ ?&q J5D@?L?C 6cP*`IxG IaC?KSI`? B X-UJ ?G?AJ@ `Rft6b`?U?S|#g ? @?\I`?\ ?7?0K`?G/v@ e>9 ?B?Pղ?0; _kxV@>qE@D`? L`2 pETP[[ S@GFR]@UdN@?e`?J% .GZUp#E`.T@RVa`[\ C`?X"?`??G`LJێG?#D6PQ 2a `@׀5v?:@?S`?U-'oQ?%W2`?N9ȟTC;^@?&Ѡ9/`D.?g@?.@ 3(v?N?F?4J ?-ؠ?B0"@A``H7O ^C} ?X]?SgDL'?A2C?D];?0W?QLP5!B?L?"O,SO:G ?4%8?+}i)TsSI?%0@ STR̠C?+$3ESW^.T<?(`, @E|Kz`:jz&?=s?]?a,*?Sw+?Pe,?Q ?!~DmHB <# 5!CgX7O Yy@?>Rp?NGZ8c@K&?Ic?e{?b[^?BQMRZ@GR6[ Sp??;b΀?`[4>_ !QA@N@Nd?R?RK@6ҠEg`?De?Fr3@?;m?3j N`?-F?Y?P?6~P@WJcO\`@д?M8l`M|?G?@گB?L?5@s`PYD@?P?b2 ?VoCg^!`\Ҁ/yT?Q?N )(Q`Y7eS_ H`5?>`l) )@:f 9`?RU?aĀ?@vDi?B#?HGP] ?&Ā?C4@?C{?6@=~`I?=`?L^u?V# ?RC`?BV?7(`?(c@?%ˀqN`H,9 K]CIR2m?P?>.E'?UX ?eT?0 Rh?Gc??@%A`?$) ?Y, ?Z ?S`?[Ɣ?Sa?,c@?DZ. ??Q#@(Q`Z7{F@L'JH>$ ?P8F?K@D Q\z@(5Pgc*>"?+$J?Fg?/?4f?B`?I?M6 ?BS?+FF^,N8 ?CI ? ?H?P5?DV ?H: HY S^P"?0?Tp ?Wx ?H(? MsV, 0"@?U{:?]:?^? ?P%`D? @/?&{@?I?M; ?OL Qk RG`?6u7`?U9ѠR3 bh:Kp`u`V`Po ?9dـ?5))v?9t?M)?A > >#3?WU`?a ?\[@?O G@F@H"?TcZTA?'LI 2'CAl@?[a ?g ?>RpV8 >?Pu?Zø?NRp?@д?Ug?R?,<?!>KC`?Eh@?PNr?"?1j`?V/?`l`?U ?8l?I2`?P ?2@?B5@?T%8?D4 ?@?K,?_ ?Y`?*4?=`?FaC?PL`?T^ޠ"JU2D~?#K?,ۻ`?5?9/?A* ?5C=MťVA@L_]&E?B;8@2ؤ ?@-?f ?`?4?S@?b0?bP`?\˨@?Lڟ0C0pB>ZEb9?M)?U"?Vވ?M w DLK?7$` &?F@?_2?Y~?3]eXf B?)`?Qh?33Z6` E|?P; % Ek&?H?CyG7[@?8ZLa[ Nd?M`?I:=TWGkS?Ozo?]k?U7?>`A DX7? E:@Wh UQ`Mb@CR6~?Q1?Vڧ`$.`Ot`?PHY ?V@?C)? L?K}i?@ryMAXl ZsY@VmC `HS@X]R͎ ?`?UDY?W @?K=@?Fp@>, D@?E5@?V`1 TP`?W?`U ?eq`?T@( ??Ld?Nw ?9`6F1 >?2@?4?C|?Q]?M?H4?8y`N`T`Q?zT@@?S7 ?LsT`CX;Dx^ 5~?B?S`?Vy?Rw?Km?G`^?L5qG@VFD?D?;?%d?Q ?Q@3]X@U5@?94 ?C R~J@G@?W3?`mÀ?^a?_L ?N?%?=vMs`c> V`?A v`?A@.]) ?Be`?UL?PР?.s"G8TE?@r?:E2I`Gf;2@?4 ?9-k`?V@3\LF6?K@p?M?ED2A?G?^ޠW RQę`??]5%Ecd@@`?5%??{?aC8BlY. [`?0?D TV?V@?QT`?^y=?[ʠ?!m;L?8`?9 DP`I?>g@?N<?y?E`?L$?Nż?/QVŗ Rx1`?Tv&?]s`?66@?Ol`?SZOQG>Lm]6`ItNh? pB?& 7$` >誚?MRZ@>, _b [kM/`?Dl,@?D1Gǚ@?L`?02- ? i Kso?1;?Y1?CX@;-' <`O>r?a?c$M?? QsS! ?* ?M*q`%f#$?Z}`?e?al?HhB2YH̀"?`?69Z >`H0 AU ?*,e?V@?!3@?K?Z8 ?_??T ?H2?PS?7@F[)dـ?>!@?@s`?CĠ?31T`?1?D ?$5:_= P] CZY?D%8?>Y`A/D[@?9r?Q`(+`Y $;e?^L?W?`1j`??H ?Vt?J;@*|7S|`RL >@S @U0@?Aę`?J3 =H`?8 ?Q@ c@?+x?S)?0^ Cw`?`?4B J Q?6Ԏ`?Lh;1 Sg F?( ?N(P >`X0`?Y4?b@?5m^`F>`?0w:>"?D + `[TY4 ?FH@:_-cZ᧠? @?G\ 2O U@R3?:b?N;(?2?R:?W"x ?J ? J`? D@?F `,%"?USQ ?G6X^ ``?aI@?_d@?C(`~+Ѫ?!P`?D+ ?8 ?5?V|?a?U]K@AVrqJ*.@'?0㍀?FXd?C?1qt @;"ؤ ?;ډ@?Lك?Y]?Yl?U`?\1?S5A`G?%?S k?ZKp`?JA?,u?*5D@?:9?M0L? !|?'G+ ?=r?UJ?RႠ78TY2`; J`?W)@?Q@A!`E?7N?@?aC6yP6`K@?7`K`?=O?P3?I?] ?Y: C/?;w?kS6O?'s?7W_ =% QQ:@?cL`y@^5/I?X?OXY X ?FĠ?I`IbKE?0@?9E?Hx?c?Xd 3//V@?OX?OSA``#|`dW E ?B[@?La ?Lb@?>#$?/쟀?A ?7?]J?eӠ?BP,qN`?K@p?C, ?4F{?4 JU ?b?RE@aX;`L:?H?]^@?:WC'Z !|?2'C;e?6@?8 ?8=?L7@?Y(?P?\@?D?:u?.| ?E-?Nn'?E$E~+@誚&9Z ?6V?Ak .?'C?5m^`? < A?&#.?A@ 8l`I`#j ?7@?T?Z-?9Y`(y?@`?(h/g@?D ?PkD?0E7WW ;@?9`?6)?>$ ?A<=1ŵ ?G`?3< ? GU?@$H q?A[H ?E?R ?K]C-i :'.p?&꺀?@ D@?3`.sN2 R 4@"?`S,W@\["@9?_*?aW*Ef?:%E R`@?Y ?],?D?fw?c1`?DYS گ?#|?*B /`ArCho?P?9`?1s??`?D ?46?#oi@?R?S]Fw4݀?1x?B)`I2ؤ >C@ICQzMxU:`O#C@.KPtQ"0@X0 N?A'-`?Q;!?RP`?N@?,u?2K?Dh7Q`L!|? @?)tHt`K)(M}[VZ@?&?Q?Wh?X]?FO?1/?O6 ?EM EG@MU8]?X@?C3?B\`?}  ?`?$(=4k?A?U`?;05?;`EG Z'? @?]^ ?QV@CN[?9?O@3`?C`?2@$w?H?W'?Y?^_`?VO@?T ?pQW@L!|1E ?0b`?@0?+Ѫ1x?c(?=@?=9LuFd`"9QVi?] q JJT?0?:}?,%PbfR盀?``?hFF?B?5`?X5?PA`6lKډ@?2g`?ZX ?QD?.@?+C 6#.CM `%FvS@I/?=W@?'WGL\`S, :|7?<]Y?62?`4? wS2`U@:B?6.KSs؀P 9Lu,*0CD+Fmt?B@?Y ?QA?AK?A?9MX@M ?9t?"=oKw>.!u`PN* ?6F?A~?84?Sjl@?W?M<.@?C, ?-C/ 2x _`?ZIƠ?@9?1@?Es`?:@?2ZB12 ?N@?P?:B?3ê@?2`KwxG4@BW?2% j!`T1Q@1@?0$߀?Lt?U?T?0n V<aJ` V?1F?Xc@?PăA#V@P`?5?Td?Cq?8 ?X`?Wh3?L?A M)`[{2@ ?CЀ6OoYΓ?#KOG@?C?+lF]?:@?Q%?Iuz!俠P M#!@?@?2?Qk ?Tۖ`?;Ѫ"m?9G?IN`ֹ @Z@"9A_Cv ?U$3?c&?1BV??Z?Z3?V?@@GKZkV`Tj`]`[l:KW#\0 p@S+;T(5"e`Mi`@?}@^ TdYS D=R@!Γ?!_`?*?O ?TR?,39`D`Q\dEL`?Mٚ ?X=?X ?\Q( *wȀV!?Q ?V#VW:@6r7/v@?;?Jր?G:@?W?JQ@AzR??G?D?E 4^ޠNRp?& ?K2@?I`?Q&?F?4`?L`?V?UU?LA?Pt?\J@?C_cJW?8 ?C?7`?)+31@NB`"?U?B [`?M?>q{ J;v??J`?A7΀d&F[<(#`?90Р_4@]sf[b@Y ?#& ?7`?s;E?+?E)`?4^ޠJ O >??2?ؤ B7B `?@ 7/?@8?`?Y2`?)W!@?>+@?z/g@?8l`6M`'h?R] ?CVOV T27W_ ?Ja?T?V@?Q S$aB?P7 ?bI tH~0t@wȀ?P ?Qg?G?b?dl?DmH?* [`?Gpހ?LW?P?)I!9# ?JA?P$߀?E?Ax?Sݠ?Y?T?I8`Ns?/6?C ZpV!??08KrSX*O߀?Q ? D@7?E?+ J`@[1? x? @*B#C@FF>?K?N1?->@N@dN=aN#s؀?1hWG@`Jx@(5RE#F @?6e ?R?!@H@%NT?Iܔ ?P ?C ?1j?7` MPSgEV?,*?3@٠EG@S+;K;`?) )@?CRW%|\? =?Ot?Ry@?F'@?$yy%&k ?C?Z_d?Va@?K`?Ar?6Ҡ?GBN?Mr>`?Kso?b]?[%?> ?B@?[H@?Xd :`Hl?`RV@`$Q""Ԡ?J7{ZIA:c͕?B&(?O ?=0V+`HY ?/pu?UEu?]-@?0ry?O?G?H?/͕#.?`l?j@?Y?8?E?P?S?FE/i>ݠ>^?hoG%|A?Qϯ`?O0) FMNQV5x]V@Hc@i 9~ ?3 k?K:?6 Ldd @Z?PpB?Q`$?0k?&)<@OSsU@@?F69JȶJǚ@F8~BDaU!C `??g@ kT5LU#@@Z@?'^?kS? )(?Eg?4OY`R0@_%R?8@?Kf"*@SV 8_8 ?Ur`?Zw:?6>C >[O?0`?Jx@?H@?< ?4 ?M?S@?E ?G/?R(?B9?X?DB !m?>a?Qr?A``4a@8?KG ?W7`5]`Vd +$=X5q͠?M9?=F4˃@SU|`HY ?C?+ J`A] PM 9ܔ z,C$?u`?L?C@GZH 5:?T{?a1?IUT@-?C4@?U0@?NP9?5F:n (VY>tQ+P'?O?6bMcRSK=-(I ?8h?Vhw?Mgj?3?3 U7]?GH?YKZ?F(`2yM %=RÓ^J ?HƠ?2SW B ?Gh??W1$`Gx ?| ?.GZ?qG`*`?WO?ALU}2n7 ?R ?JKp`?Gk?D;e,ۻ`P+@\;Z5/ >f"5?H3f@J>8@DH1u`S._$`I ?/=?>@?4.`B\z@H@`?H ?Vn@M#ʀ1V/H+ J`?2 BM'?G\?3`5ǀ\mm4,x@FyRJ/'?U??D??"x ?S?WӉ? =0t@%G@NaǥWs?D ?UF`?IF3qTǀI#q AK@K-Pn `L6$ ?Et@?H$??L?KG ?KK)&ĀGfM@VƲL4U@?(?6?-G?3`??`AhK"6?*0 ?EA?V?O`=~`HL_`:}3?$֙@ TNLJ=`?2;8@?2){`?0$߀c@7d3j 3(v2@I|^5W ^_`AJ ?F)QhQG>$ 3̈?~1?[?`k ?T%?(bHCi@B?(c@?3 2`4 ?-; >q{ AJ ?JM?8 LITXƠ>5?He!|@>`I G@?F#?M QV#?7/v@?11I@DJKM`?@D?G' ?1F?C 24`Q @ZCG?J?>,z,^%LE???JU?P$Q?D̟ ?1?4?$?*c?A[H 1π?9P?6?/Ķ0D?4?GJ 0mL$RW=QO3|'->?:_d?B}`?A#@?R9?Sn`?"9/s':@F鞠-n@?Tp ?\?Wd?S; ?@)NEHH\ ?)/`?3`>րGנPBO ?;g?K5W2`1``?6: SP #~@?<Y`OF`Q1'wȀ4OY`?,`GXz3$?3K?KJj?#|Iр?E)?[?E ?J-?U?E?&M`?Oj?b ?aLP?Gh @q].@?':@G\8M{@?Ur`?D+ M|FHCa`?Jܪ?NQ?! ?6p@I@C?F?MKK9?]F`?SrS_@Y E ?G?Oث ?Hn?Sh@?J3ĠFgMC@٠?-A@F7"cXavGc>J5ՓA`?;4`?GE@9k@BU?+?T?E ?H(=^ `Nr[GJ?>D? ?Q?Wz?P p@AݠQ`?r?:9& Q?6m?P~?Q0 B -Sv?2Qd@6+KIO -n@?K@?0m?J1?Bx1`0?9r' J`0$߀?Aƀ$` ?#5à?:z?G ?Cb.ÄBį?6?C`7U?`?P"8,9 W' 2 ?L?V:u?3; IW?LK ?Xre?1@?`*`?W@ZXv0pB?Ka??  ??`Fo`IǃKmD$ `85R S̈J,eGf`VU>ǚ@[wPWנ?9?F~?>[R 6`eC`^. >m 9t;?CV?c?d?=-"?T|?G;Gc>fe>?%?8? ^_`?`?>: -rNwPYk@U`? @?1*HWuNH 8n6[ I TT ?VV,?P'? ?G5@?]N`?bw?a֝ ?X?Ia?K9?N?J?P2- ?J}S(7O S@R?2?HDL?O?A`?B|Q`RG?.`?Sh?B?8?N 9\G7@?J@-; N 9 ?$g?BO,?L?;1 ?<9@?C@?65@?Vڠ?bj?V5@?<;`]V*,c@F;2c! ?P-rV@?5`?QH`,7f`?1G?2@?4`?) 5Eu?/)@?H$?@`8|`@Q7O;? VwoU?}@?'נ?#\?3F?5d. J@Vժ@U`3xGE ^Z@Nż?L6 ?P ?, PB@Glo`?->?Av@?"@8*`4+ ?Qk?^϶@?C=@?8 ?[?IӵE`1@1٩JL %E ?Dx^ ?J@?: 3[?#?EQ?wP?`?"@OsQ.9}= ?82?DSȠ0WN?q?N?G `?=; ?;`m, ?N)k?Mj&K@<@?#?9/`?9@?B@?3@گ9F?JK?IT8`KEDY9oS/]1\vKYf@GJ??%??g?@*j?V?CמP@??[>?FIw O&.XZX?@?U;?L@?2 w?G"(?T?KX?K.?E`1T`#& ?) RnP? kK`!E Q`@J@M@`WXe?A?Q?B%?A?I?< ?CH@?M ?8ud < PLz`B?.s>@H7`à?Av@1@KByM ?Cf"V^}EE ?U@?Y(n@?'2`?E+ ?Q,*?&=@#?J9/`!&?Fi?!Γ??S`?Oq?"?(`5fE?[O???Dz?0(NUYVpPƺ9Ceo K6.DO0; ?6#?Rh@?H%`?GF_!1e@A?W>@?>żS#xXOS kEpBs I8`=J?Rt?Vժ@?TǢ?NG ?(h?*?9A_7YXU[R BႠE ]j a1:6?FF?"ؤ ?'6?D֙@?B@?QT`?X??X6@?(!?J?11'Z#d6F\?P? J`E4Ԁ?=?[x?_ ?E%W`X.?G~, ?WD7&`V3`7o>yP8FIk@?:*.@?8;`?/Qk ?Ct`>t3?EM8 ?P?A`?q͠8ud ?-?U6?L?&w@?5!?!?3?HT"^_`D} a#& )?E8'?4?@h@?53I?J> ?$Z6Z @ C=@HTgX4A``>J% EbH`?#̈??CQz?V1?JI8?%\@?6m?诠6aC? ?H?L<?Ep?PL`?CEENIe@OQ?>A@?]\T+]W@?Pd`?/>| B0"@Vd?$` ?[ ?1俠^P^I@LXI`j@UW2`VB@?Fg?T?HƠ?G^?XX`?\?Y#q ?T?1u`C5à(p?HcX@N?6p@?< FACK?#`,RCn7 ?DT`9P$߀?DL?V@Coi@gTRdy?CX!?d4?N)kF?9r' ?`>?_Bs?0XY Rl`?Lt?RK`C R; ?LRH ?0?D ?GA 1 ?9&Ā?9( 6Dp Aj`?% ?DAF7LӠ?HX?S/?4H,Fl@\?0 G%?R]Z=s?) )@?0N`WY NFQjXJ $`?7VވWq >D@?$@?=gj?Od@?m6r?3?1qt ?S?\?P ?0So ?A`?Dk-8T"`CĠ>D@?R:^i*@`?)r>]?9}= ?VU?P?Y E?cO?Po&@PoF)?Em?+ `I`(;`?EQ?L$?I> w+ `?Nd-?U1@?V ?aà?Yg?:)?H?"FN@XQ?K`?]K`?R:@fG T`Xٸ@>f2VN?EA?PT bE:?\2?c?:XBe@FO?Ng?J<~EM ?G}`?\t?E P<'@P [?1 NE PqC ?;`?Bs , P6, !d&H O 5`@P Q`S@[aZ:`1.?d&:l?+@?I@?[?S ?DZ)`\9G[I`j@T{O͕Fc4a@3Ko`I?( RF@XA?)A_?FT1`O\@?> }@X@L?0L嵠M|z?BI?Gd?6%e?[?O7?6ؤ (#`0 ?`?K}?Li?Fz`?=`D JG ?)iH8UJ??Z}S?Xk?U< ?W8T?A+@I(@?W ?InӠ4{?R?aB?S7 ?M ?A\>Y`FlYOb F[ ?L@?G>&?B'^tC"?Xn/`?_j\?WE?C@?BA?>]c:2?3_ ?N5`? $g]X5?%q͠?G->?3JS3] P?ż* [`?:z?\u?Xހ6=@U8]?HA?Cͤ'}`Fp@C]?"?N6?M K ??`3@T} S\??W/v@\;TVK]葀ct\`?!] ?PHY ?WJ?d^ޠ?`WP?/?`CI&24`?0xH$ZzR`=a ?G}`?XjN ?GK!RZ?r?H۠7/v@?B0"@?Y=~?$65h@8`_b `(?@گ?3$?D LFeX?Lƫ ?>ր r?8A?P>?]q?\ ?<fH,?5O5 \q@H [yyG0`A\Oj;^@?RO`?I@'Y?S@?Y|@62??$@h@US]`@N^`F{@M ?F1 Sl??QY ?E@?B]`?@_?PaJ?QT`U^4?W&?d c ?1YKY Wa T `:6EmD BX PpD?8T"?B@?@ă?R׀?W<?F-(@?SܛMM?1&?A`=l<?S~`?_@?T{?PP?PJ?;@ [`5??=a ?LW3`I 0A`V9b@|@W`?>: ?LG-?Hi2@?YP?R$ 6Xd"5?)(?D֠?9b Ӡ`HB){`I>E#g=PV4O 2r`W2`?,Iel?RQd@?K`9IJI-k`?/g@?Rt6B88@-?gv?nt?Nu@ORDz,7Hd P`?5?>7W_ F`;^@4SȠ?7[@?T֙@?K?%`?BUӀ?)QLa q?Pz<@9Gx?[ɀ?aH`j@?`?Z"?R@?=@?C?,?4+?K_{ ? G}`'Y?<9@?7r?!?LK ?C̈? V?8s,?t@4g?p7@7?G ?"{K@ ^_`?Ep?I ?JX `Ta@a`d(@R6w@O* 13_@?H#Z?<6 ?.|  -?/i?+g=?/?`?7?$} B5.] LT Sn`, *n SK:?F ?Y@?S@?=)(`?0OAP2 ` T>`;R"?I|YAL?!??0})`YrPֹ 9@?5?Sغ? v`=A@?C?G:@*0 `?Nٰ?`{?P {Fz`VWZ2FN@?G(`(Q?%?e?h5?BuF`?3?\F?V- B`Q'@?&l?G`QG.`PXTPu@; ?Jd?%E E3?Np_@?]_?1h?)E?Q Hy`^à?3?L_Q7 ?Z`?G @ >G? ?˰NL[` F|?AO@?H`?0@?5xt?0v2K?.`?3W?>6?5TT`X$v?:GZ^Y`Pϙ? "*/3/E`S@P?H?Y-@?8p>?B%?IUT@?F@?% ?BD?]P?W@?R?^d-?*|7?l`?j@5G 4`? IT8`T]B?Rؤ ?Y`?8` ?@(?Ga*ʠUI`,VT7`Ut@ډ@AQP; ^ޠ?*L^ޠ?,`?V'@?_΀?CEH>;e?0GR U /)@:UJrH~B?S ?b?Tu3 RN?(;`?(y`Re`HE?I;?6V,TDC`Ù?4 ?]M?W,?8K?p@?F @?9 C2A?0L4`Sͤ?@6@?c㉠?R ;%v<O7_:Bd<?B u`?<?N J`@TiAc >ho?1RiKXR޽ ?6?R-?Y_`_@Db21P^9@?Mi`?S ?La؍_6?HZ?@)V]aG@@ РU@X(?B;9#j ?XQ\?a?Ji_#??I%?Tǀ?7J>, ?Ta@?VA?P?[?-0@It?:a?M?9`>B ?& EŠTw >.?Dl @@D"? 7x OH*`c@?7HD+T 7kS =` ?FL2?Hc@0"F>Ä?[s?c@?K@DcMHF QbVj@T.`YE\H}&?GaY`?ZR ?[`?EHl`F?>Y`#IZ Ng?2wA`_C \]EF@2+*?R% ?Z%1 ?I1ڀ?Iҙ?>VczT1`?H޵`?KwȀ.6>`?Ct`?bo?P`VrQ?%< r?I|!@?Tdi?M]p@6ga.b dk`[Rˀ`?M ?5Q?0U?WQF ?T멀?ahaQ:`(2[k Tv&?F?Tg?"9`W^P?P7*@?M3O0Q7?>$ ?9dـ\־@dLŏ`?B"FN@OV >f?DJ< 9-r?D`?_?SW1}?4 ?P:}?AzR`?YmF[ډ@*}?E;{@`;?8% S/Hs@5t@PWP@j?&S`Rg`sROu`?GBN?9G:z?>| ?K ?G0?P˷?R,@? HY H& 9?JKp`?V,`?0Z@Hݙ8;`;e11A J% EOoz?m@?9v@?U@?POO3Up?,`c@P@?Y ?R>Mٚ D Z]" ?LL ?`@?8V`?6)?8DbX`?Tќ ?W`CR@D9-`?  ??l`?T[?EPP}@;=@?ZG?V @Ri?1 ?R]@?EB" D܀XUcd@Q@YMQ7@?![H ? mY`?@ O^SEŠ?ApX`?@8TGXc@?CU?E??Ej ?H ?OF`?;(@-?A4?GNRag[`bUBUӀ9 QeE[' ?DR?K6v?P9a?`Q ?Z#s؀1P`?E?A`KW`?aЄ@H*`]ĉ#E?< ?/\`?AGS?= ?5}=e2KaE\`Ix? f ?NJ=6 _Z`OE=K}Rį6@?N?9?'`?F?A?/?DR?S%"?P~+K0#(`?2?"@?0 `?!@:2?`1Fp@P@>8`R@T? L`?Af`?0`?X7 ?Z?&C;N?&I`F`7q?&Y8A#@?QAȠP\y`?KK?POT;`YO@G`D@3/?3|?2?`?Fa@?X̀?HcAU ?J ?G->??j ?2?'^L(#`Raw`E @M)UKU/ZIHNS`?& ?Gנ?K@?I'/JJ<`P5̵`?O[e`?Q ?>s$;eBZBJ?AG=;`dހg̛@Q}?/2`?+)(>Z&??Enz@?Tz?Wϧ?P2}`QsCn5?)?_F(=->6Dp C> 25?#:2?@P ?GLI ? J=`AVWy/ XN ?;Q?N6ؤ ?5`7?@Ş?6 `?5Փ?BI%q͠4K?@Ş?ǚ@?UU?YR?DR?C ?F.D#.Vc\0`1|'L,Q@L@2`?8p0m[N Z  w?OL ?O ?+F Va"0@Os4|GD@aؠO:#`R<Agz @IXQQ@?WU`?S> ?.5?$? ;!qt DYSSL}?1&?M8ao<?@Q ?7>W2`?2k?*)4 ?3/?Sn`?LP @?#'UC???9?B?`?*0 ?6+6SĠCw+$* -A@?4} ?68@0㍀?A1'?K?B?9F?K?D6Ji_D`?Q~?:^es0`cW ?<,?YB ?_@?dc?R@5`] a, (?E`9@? ?(@`>D@?8n?1~: ?Q??1`;4>I@ wȀ?Fވ?R@?E`+H@?1$`?7t?7>`?@6@?Y1?JB1I@?+?T?2?9i ?Z5@?W?&?8e?P?,!|U\B5@?A`( X_ Uo``?B*@5(E?C~@?V?O@?LR?@6@R_E9`Q IрQNt΀P@W+ Su@@@<Wc Gg`3Q !zR?B;8@?;H3@CEHD(@rF 7`K`V> ?;6v?YqXdJ`??1`?G?5 ?=?I5.?Gh?SO?J@?-6?*cEL`4u ?T+?@X I)r5T?0) ?C?:`?(Z?DJ@?SEH?R׀?A``?EbH`?O?C ?G@?? Unz@U< @?O?ALb[g->RE`?C[?Q@?>`?NAϠ?bf?Vժ@Tn`aWfJ4(?>zY?&Ѡ@ {?'?Fժ@?+x?@ ?M?> ?H}&?Es`G-><%?T?U>@?3! 8+`Iw >?B?Vy?DC'T؀S?GɎ?DO&.P)ܠ#]?D ?SԀ?>@@ >B ?G;?&rB6(v?V^`?`'?R]`-rSU\Q`?:?R:2 ?U!?XO?8 ?E$?Pސ`? E?%Q?Qs?F@?:@?*xAW@[mVW! 7q`1GSR){`?LJ?!Bs`?]?4539??Qk ?E7 ?N?7Kl1~?JkB Kiu`?'C?0\M6q )(Ԏ`-J?@s`?GZUi} ?;?8KA ?a"w@?S8@@{X`,uVMP?;e ?: [`>oC&Ā?^a?c{`?<7D+4@Bs "S?F A`?7@8`b`X?K?gM?a9x H`Wb?-r?4 I%>u@?A\d?Fy3|Jjz?"HP@R5\@?L$?@(23@F7"T L?@ٓ@?_g?j?c`P~`aH`%W2`?B@?@; ?Wޟ?Xm']P"W ?G.Z`?U @`P<@?0a`?M@?T ?S D@??V,`?9UT@]0]LA`3dS@?"2t99?@:?c@?J@?VNj`?Y"@?T`?T&T?U/`?: ;=@?3@? [@`?0=C ?M4kCĠbP`_ic@?]@?`xK?A˰?D`?'P`F;? ?%Eu%dP)ܠYI`AJ ?<f ?#?[<`?`}?NZ3@?.* ?ByM ?N&?D+ ?3@٠R[@? ?^`?T[@?6?PZ?\RC?X@-?RLg ?J گFnF?+6v,r <:PK?Pq?VG>F!1u`L_?/2?B@Q/~NJ?6˰?!ŵ 85H]R,AI@..GZ?U.-?`y?7<* ?S4 5`@?I|?Ls*EQLO><:E|`\&yU3?=ڶ?BITc]l?7O ?V*?P@?F(?P1`?@L, TN5`4w?E6?Aƀ7 ?64?Ke H^ aGy?GZ?V?Y?J5dAE5@T#@Mu?*f ?C?0b:C ?3@?G@1]E ?5%?R; ?I8`??`?+t@?Hݙ?8KCMWWs ?8 ?ZG ?62@:?8M{@?J`?>o?6@&w@A@BE2>~@?8K?K?R 9GTv@?Q?a?2`JUjR-\I?PA$`?Sӽ`5(!?Bft?5*@?6~7Q8??7Gw?0e?]?HƠP`Q)%R hoF@ ?*9A? _b4``%@MF?O?P `8 ?h@?H 08)Q?G ˰D?EuO:#`d<_XNUK8M{@T:I Ev"?'P@?B`?6Ԏ`?.K?>JE`-\?Y5?\Yx?FZ ?OdC?[1?G?0) A:>",%?&?<?F?Agz?Y`?@/?Q^?0ryN2J`O0) ?15z8f@?>?'FR>U] ?+ `?ILK XM?ŀ?&4?z,(v+$2e`%!': ?D]?^d`?TYv@?D{?_4?"eXJbE?0)N?`?W@ y ?C?Q<ˠ?1d&?Ca`??^8 ?0@?BR E Pm|$ ?0J`%@0\M?2'C?# kEߎ $?C3R@X<@bX`?0"@@` K?N\j?MO?Ie@?:@S)ZGH.pU2^`A)vL?9<:0 ?% ?LAU^0?)4 ?>]?P`R<`0(O* 3*?G@?L@?Qݠ?Tdi?T?R/ ?ǠQCP^?Ih,?U`?B7+?T?1m3N1 ?T*?Q??HQ?`n`?V?6A?Gs ?SY=@?Ln?0Z@ `?3] TCMpH?CD-?H0`2Iݯ v`?N܀?@W`)4 ?5< ?/% :@Z`M??D?SOCG[[ 8?E4Ԁ?8_8 -4.`? ?B){`?6lYC?Tx@[%`?>?Ot:@@v"\z@?G@qG`?J&?GE@S5àH?7P`'?5~?:4B MqdY`?Q@?Vo?Y/?G$` 7f`?</?GFE@H LP @e@b_?B >[O]o@>`?V?Y/?R|?B@5C=@ 9v@PԖ Jє?C?B[^l`?P5?WB@u`0`?J ?@??>@?8@?JwȀ?]zC ?I*O(fPh`Rd<ZtDv@?8Հ-e2Bc ?$ ?M ?Q'-`?.KTZ]-@?/ ?`1@?N NC|?? ?&@s`?;e?.?&?A ?M@?@aؠ?C?Vŗ ?Y%?R?C@5PJ]`J+J ?Ro?[?Q?%`%?GU?P~?1,`?&y?!VO PPVڀP'@?-V?WT`?UE?Wa?U9BQJ`?:?PAd?A?C6)T|B`?* (n ?7@a?V>??L@r?[?)2@Peb!`a Rb iI>I ?SM?EJ5kCA?6?]`?R 2?;?Lv5'[\?H1?%3?F\J?C @`??&?8@?Q<+ ?TD>+ SgP 5`?14Ϡ?O$?S?PK ?Qy?F*0a?@?IJ E.Q JD?B@$?Yy``?Lb$f@?0i?ĶV-?w?at@?W+?Pu?WB7ZU??|?I} K ?%g ?]?R?Dw ?\\6`?a@?LK[N`\Z= :,@?L ?G@g?D@?E9?Eo?O? `?P76 `ڭ`i?=? ^fP+RQ6`S$c-Xۀ0"?.ť?C<`?E`?5@EWUqO= S-G ?H|@?K@S?V?UC ??雠?GMB}t_U6ʨ`?:o?PL?$6Xv_[BUy`=\ ?3R?6-?" ?w*?=iafˠ\(`^q 2|9u Q`?Ep?b'?\ p@?D?9Z?[?kJ?c/?-?J ?Z?:u  ?Ev ?(i$@C@:???<%?@\ ?0|@?J?UΨ?"I?8`?WD@?M @ GB ?4@?P.b?GkM?, ?AW%?H ?K4@?H1>m@Y J8@?Er`?X T?Y`?ZLL ?ZO?*@Z@14Ϡ?Z@?P?P?VL@\g??E@?Da@XCm΀?U`?E``1/?A€?Rm ?`RS<$`E}>$?J?K`?Fe ?Vs?VzV?FX?SA ?[`?H<G???TO?HB@e?".R⟠d?Yy`` ?AR=?Ba@ ? A`85@:MmS"Lg`J?Gc?a?\P?SpB`?@BEH. ?'%g C"Z|WX@;c?4`?.U?( ?Mia?Tո?S<$`?A P >X["e@S?E ?Ay???.?D)m?M @Rga?#`?`2_ ?V?AU\^@U8_TU`dS|`?Ev ?Snk?[;?`?PԌ@A;@?TOq`?CL`b`_?R(:`?RH~FĆ?G^?Zୀ?T?6<`1e?P.?W(w?.9*,>+ ?9h?W`?Qe`9?D@?[Eؠ?SC?A`?`2iՠ@?3`?7?;T ?5 ?B?Kg?1R?+?H\?$vHy`IҀA`ҵ@?5W4Q*c@! @!4?4+YQ@( ?U 9?RA_x\%CO&@?$^(?Cޟ?UsL`?_穠?aJ?OŀLyKU,?H5 ?@P.bK{0ET afO?=Z?8K% րE~G<@'`C=QU#;?EK _cT`?%#`?; @?0?B@?[ _?_$?AxA?\ ?P?RFE?#$Ra?Y~ E@=K?B7?YS?L6Ϡ?9Z?A`??1ە?T ?S1WAy?RK``a@Q*c@?7 `?`?NY?co@?^/?K|j`?Y@?`]`8>i5ce9;G@T >a@?<?Th ?S??"QOI@>@?RM@?+K[I8b ?Y@?Pc?1P5_ ?D`?#7٠30T !?A ?C>@Le@Y@A ?R?Qy?:?5u@7`X`oV?A?V+ڠWƠH?2 ?G@?N ?LC9=Q?Eu@?d?ad? ZYU]֠0zj@UPu ?R?P@܄H ?"G?_?[.E`[ T`^^dqxS~ ?G-?St ?@[1"#I?H:?@jy`C]`?;?P:N ZOFĆ?-?Fձ?Su?UMH?[{0?V ESUG?A6?Pʼ?94`?=v?A?*q8A6 ?J!`?U(Fa2XOc?@?8U`DLC)"?2"?/xDL?Xr?CN~@?'[\?B+K@T`N~?R+K@?S?H?["H?WQĠc``O 2`WV[5'DW?8-@ ?2`^FS?LC?E@LbT" `?S@?8`TzKk?`?"iՠ?c?k?B ?P?S ?KVf?=s1 @c \E`?`d?b ?D3= 5;`T?ahP[@?>4?Vt4`Fi?8+?Q`?T@@?Y?R  I"OUf?G?'?`'@?K}`R3 ^ B?KJmZZ@Mb ?#r@1:`J,@8K?Kɫ?aN?Z[ 8IUHAە:}Y@;!?7#?Onߠ?K9?AK?MZ?W[\?G5A@?2+?Q_`?2`&?Y>p' ?PO?b3 ?ZL`?D ?0GJQ:`>+ ?GP ?R5?\Q-?R|:?1jĀ!+ ?9h?"i`[֌ _`8 ?F-iaC[i?.ť&A ?7 l@S,B?U`?L9C`^Vꊀ?Q#?EFϠ>雠?<M3lS]@?@@?P53 Jmh@0Duu@*gFPX CL`J7s`c_U ?dz?0} S/_u@F?T ?TW`9Π!֮ *$?5y`?FI?I?N?Wn?L+@J]6C@?]S?[#`-_?BWp?:i`FkP0&,`=x?'e+`?<^ @?4U?P?U-VP<}?#)"?A AXVS`?'?X7 ?A:`N+"Az?0?4?2c?NH ?Y@?Tà?:I@?@??Ķ?PV=?N+"?9/lk?:C?HU`?B7?H/?HҚ !y@`?:@?PB?I3z?N ?N?0?E`?W`?C^`.? a`5?5J?(b??<%?;A?07?7ɹ?".-@@7L@F*?d?I@?T`?OĶC / ?. ?qSX@ ?Z. ?DJ]@@oa ?`?J]Z;Q@?=%u`U`C_`?D^(?2;>r?ME?Ju8i$@K@2VձW×H#>`?[O@\6@SG?J'@?\?R^ ?0fˠAKN̠HҚ A 0!? ?F@?X`?Q`:(7T`?GѠ?5}=?4[?T?W??` *# K,>TJ`OMÀRU*y ?O?H- ?0??<I?1&$;Ҁ17C%]9??Qq`?Qw?D_b`?&?. ?6 ?@u?B[?)r?9`?ShI?Yk?\I@?X#@?5?&?Mr`??-dz?4i? ?If?BQO?G-?Mdz?DTY?@~@JDʀ?Olk?BT1R=?ڧ?C%t;ҀP82@RS1?; @G l(w`?C}?GSH9Q?S?SINyYj @?E>`A'XD6?A5~Wj ?#r@?aT@?LIX)RM@?Hʠ?9`]gbICk0_@F@?07?\h?R082@?1X ?W7?P?8N)Hr7ɹ?1/6(CQ ?E8o?X^ ?R½?9$>HY3 BE>`CI: 2G?+?+`?%@?Dw?H?/]? fˠ?.^?69?B?3&?h@?1&>$?31P?Z &]Vd$x@?KC@?R@?N?B, ?;0b?6?1ƀR?HI?I3Dc@@]PJ2?7x@?W@?b?XrVRCY ?7]?>HOc?' I1SѿS GX`?g?A+`??0?,]6@->@?EA@?4jkPM Lpr@?CKx?S?4 BA^ [`?;7`LZ_aTc@R??m?:L?e Q ?A ?[Eؠ@e' a?5)?A_ SWT ?*?4H{ QYJDM KQ~(F@?Ef?Si?E?`G N۸ ?4(3?:U)`),OoH`U4'@?U?%@Sa@?;)@?` ?Pc?%'D?!`0??G`?$h@>L?L?Pa?@B?0?8?,j? A6 AxA7^P@V.N81`?Tո?aZ ?W'>?=Z ?6C@7R D{9@2??Q ?`NK{0OFC:M?6?IU@?=I? c#ٸ@A<+ IzQ^ ] X]}?/qS?AUQ'`[hˀVY`VnB#?Hp?a?R]`_qS?6?]mY`4H`?-3l?`14Ϡ> ?D?>@?9À?9F*L?D?GKFC ?+) ?r;Y5p؀?;??FR{`CXV``?M@.[ X[ ?@@?^7e?&aiX`?F?Hׁ9h/Ά?9 C z@G @ X59*?X1`?V?Cfr?@uNC+`j ]w P̓UV{F^I2@VD`?G~>fˠP+?6?V ?7 AR=>E.? ?#@*ND?;!?6'`?k ?!K? ?;\@?4 9@A A`?D= `6G@TQ3?Y?bQ?M@8<#0K`Q]0 +&`H<A F@?O5="r?7G ?S @?C`Q@" ?l@?0@ d+=&P6`PsO]``Q, PN@[4@S9Ck35' @?H3/`?a?XAI=IDF?JABh@W7/L@?>hr?V_?T?7?,v?E@?4?2>`?B3(K*?L}`?RXrStFd@Q᷀N1e?7?Mr`?Jf ?Fv @?L?'%g QZbZ`CpB`?OM?HC 8n ?2`?W?O~b` ?Cm΀?AHn?:@?I1'DW'>8K?Y$&`?TH?8 ?۠?Qka`?S<`?*?1K?BG3hI@ F3:M? 0@=SO[@X@IGT`@?+=|'`C?*8A?)`?S?8D^()\?G:??PS?NGVKO 4?BQ?[@?W@?CM?9EXQ?@9 `?F ?\{{?Kn@%_ ? I@?@C@?E?FZ?3`)?%:?B7?+Ay{S*\`bA^`k@)?JS?Iu?J8@?BG?GE?[?XU`?1o ?.|?83 @?R=?S9?XrV?Y7@?W?C[i> ?S?:?5a ?D ?!+ ?56 ?IH@bMU[`=_KP`OLl`OXAHn?>2~?V ?R/AŃ TC,KQ$A?)?P ?K_@?R@?WD@?G@'?R1 ?V}`?>&rAW%Z Wj7 `? @?= / ?E1@?:?S8v?ULP=eh@\hyE?2?R8?S?U?S~HK35@OX' RI`?F>9T_`UdSdYm?B?= 2iՠ4TY?\ A0͠?> 7B+>L?4=@?4 8 ?Ԁ?7@?] / ?iW`?ic ?c?^?,?8Ih?@u% 7`?8d<?R?[=?Z'@?LW?CEV?T+D?W?RC?Q ?*l.@UPݾ?4~ ?05d?5`>!= ?1ch?G?'?)5U RV?88 ?`ؠ?Wz ?G?Ow ?D`@hQ@< ?O ?UR@? C+`(`BSN>]w ?GL?v; AKIUR$[fXI??Oi ?M$@?Q?0k@?P?TjQ5l`AL`;ap?)#`?\y?`P`?R"= Z[8Ͳ` T\ar S^`?Em*?=O+m;PEEXLRXM@? ?@ ?4^(2נRIV@E?6A'e+`42?+u?)v?;Ե@?Ep@O??Pu?a?d?a?Yŀ?6P?Fj c?0dW?1J`?#U?C ?M(c?N|?T?Qu0?% ?)?L?3k`@$? R ?F€??v; ?F_?1:`UXL7 H>ZAHǐ?%,,2S^```Xb"G?T`?6AP`D`\ YKd cFO?T|3?\"V6^LۀR?>几?P@?Q\ `?T @?I%@ ?0P?PaF#$_RK`?F;.U`[y@Pl@?I=I?X;?CIORoIp-Z?P@?_9?Wz?IcM0P[jVX;GΡ@D?3 @?Z@?VǗ#?&)`?L @tHP/?|9-?XoE?d5?XI;p' _td@R=@?E[?@M PJ@[ _65 ?Xi?CkVW?[ @f[YM;?B+?P <@U? ?Vq#?B`?( ?Dk?9?"}t?ڧEANS CA2@$?(? "1MV 7J1?W`?\.?]?Ux4 ?S!?U'??8=3= U S6@ S8v`RVB> ?7j ?RC4(| b [JD[KB?e`>o΀Uu`\cW:8 ?EoE X`C+`: [8`_@K=?)7(@??ɞ`=$[ L@?R?T"?7`?LȽ ?Qε'Q?t?a?`DT?'Q? QT Rm?Fʨ`?_ (`?O&C`LWJ OH`?T?U! ?M?"3;h`C?G{?` ?VN?CEV?I?T?`o?Y@.*?K ?,R12[?3 @;`?KF?a1?a?B'Rw@?L` ?@-)FQȔ?/6?]`?F: ]ʀ8d?d~?Igh_0.?T?@M?3ٸ@?S6?&C@.|?)`4 9@LX GFϐ BE 2HpS@JoD NEz?[ᕀ?aϡ ?_?P,?9j@?(KABLS]`M׿@P^>@^`TJRcGPAEW@R?/B ae@R;@?6'`><V;Dm? 7? n7nK^ FϠ?7vV`?@NENQ?B ?HͲ`62@ NE>@T"W8D@@C4+' ?K'`?2=D?La ?WZA6`SW?P[@?a_`?<Jʚ(?CW?A?9u ?P?^d( ?X?H?J?>OG 2I@>w?8 ?@U4[A> ?LY%?c?[@S?E0?F-?I?TU`?S8v?o ?/'?Q`?2, 2, ?C?D!h@?O`?_@?S|C}Nf:B+L?Kt`?W:??CA`(R`?_?Z`UN`cK ?KH`?C۠?:@'k GC@ R I.To4`?@?C!?EH?8?=?QA?<'k?>C?2n`dB`P.Hʠ5 2K?M?1 +R0 ?@NE/J< ?9^f?9 E@#?Z=?U*Uc@?:xq?1ZF*]>v@4M)s A\ `>c@?/?A?\@?]@?NI?1(`?U ?Oݠ?i$@?%u`?S @`?]T?W?Riՠ?W1`?RI?8+?At?F6@0} Rq1 R;@,/t?HN)9c@o UW?RT_?T@?97`? p' 3$Oq`?&?1 ?R?V;U,?L?L`6?0?T?T~?CFP[M. 4`?;$?Rc?.\`T0 ?P?[M ?C7٠>w*Ht-`?5u`7B`Iz`<`28ȀnI??s`?6 ?2G?Q`?V?GW ?IҀ?Q?C z@?M @?]?X?AR#Y} THzO@F!֮ ?A{?( ?3ȍ@?VL?\?U ?BG&&U?L?\(` hS@@? +2?@?Gc?6Z?C ?&L` K*3@!&?' ?Duu ?9$, ?O?F5 3@WU@Jf 7ӉP1sB+K@?5ڀ1P`:ǀ?L?_?b7?[l`?R?Eb!`?1ە?A]?O:$?Gr?A ?Oh ?SMO`?F@?Co`?MK`c@Ym Wv2E *l.@R.]g`S!?LCgi `S?DP@?T ?L ?D >'D>t4?A/?CKx?J?C`?H`?K !eG[\?(3?P ?P82@ @N3`!€?R{?U?T?Kd4vE7)<?\@?H:I@?7?\@?bP?[Vf?2+KT 1v?7ɹELS7`?!֮ ?#KapR`??=3l?0@?!`?+LL{{K&`?Q ?[5?M@?.rB@@A?Leh'PM ?r?&&&U?<#0?a@?%`2~Ga[`5!T¶@ ?AI?N?D`?QO+??s`?V?Qƀ?@0?Gg@?-VP\ MV! +} 0 @?4@"n`<?9@?R@X Z@V#E $TY?" 1ەK0bLzA1=zP`>+ ?Rx`?P` ?Prq?V?RDn?AIK?9F ?V?raMQ@?QQ?E@?7}?M?7j ?*;! ?H }?`R?GKPrq?ݠ?D`?C[i?'?/lk?S@?]%?SHg?I`?H픀?w3`?-?2ga??81`@6`_kP ?T. ?^1?AەU `NI62@[je#`c\U^R ?IS?8?E?P0,` Nt?Q_ O ?IF ?HV>eBcB@0d?: =|Pe?ٸ@?1T>@B@P V`NH[Nk@PFr@?Ir?blI?\ p@?D6?>~?VFAP`Q2PC?69`?A8}`?E@?R?_?Y3> A$ހ DOSDG'R`YKUǠ_-`W&c ?F ?SMO`?La@?F0L?97(@?V?L 96?; ?O@?S*\`?5$`?BvNbk4`b?0?? ?-@? : ?3`?8)`T Cޟ?Z,?ByƠZ@R >`?2ʀ?Fr]?PR?S?X?M@@3 ?@?+?CL`?B@?C`Q@?N&? րVހR*`#$:)OBvQ$ހT`40 ?2 6`EM [`\?U s?LK`?G ?8Ur`\v ]w ??]?1?Pv?D(349^>u@@)(q ?26>܀Nd ?7 ?;h`@dWO6vYD`cwO`aN?H ?X~?H+?@U?T?V'?MM-`?E$?2G?;^?2@)?AO?CD?$`?G?^@?W!@)B>_TQ``TfUJ~EE5p؀SӖb R{?S,Qt@^5<?Xi?JJ`$g?2` ?C>`?'L?T+`?XW@?/ Oo6wE@?HZ\` R^/@?!'?U ?)Olk?@.d|ae`>Ӟ۠?GO?*"IB@?]`?]̶UV?Q`>+ `e Qg@" nI?Kd?Rʶ?Bc?D_b`?2`KDP(A@2C?2&?A_ ?/1 ?3@?Rʠ?T?L)R`?Iy``1#R ?'e+`?Ly?*1Q?Wr?]?`?XG>MG ?,/t?=n?$ݱ @`Z;X| ?9=?Q?A?D[?8r?5 ?Sq@?K+{ )(q ?+p' ?< ?# @?A?2=s1 2_<›`UV{VyCH ?A?V?y?F5 CIΠ>۠?D`?;} ? ?=p@?C?@?.mZ?Jf ?1 : ?9?CЀ?&&U9 ?( ?E]@A?["O=Ҁ?-?Jd?CK\@V}f?6?Q@M[˂?B?bI?N2~RrP* ?Z$Y@S'M<?:I@?8PPPn' ?R(&@RA^UynR^@?4{?^q@?BA^R[?$?H_TP`R?I@?[?HׁNgA6 ?a{?_``WV?G@=G ^DZ$2I$`?&k?R`?N,?G$YVY:U`=>@?;T ?I?# @I?A6 ?Q@?\.?;8?]?bQ@?\?_Yi?W ?Q8@?7'?8`D3=?DJ?&LjPQES$~$q` I@?8.G+0b;R ?Q))@?V?y?0 @?VK?_N`?\l'?:B ? +?;?k>B1l?R?M #ZEWѲ7{?_ ?m`?>b ?E.8+>y{?5?A?@?%?s0F3 ;?/lk?CKx?)K IK?L?Ss A"F9?]@?j<?U3 UW~N?8\`?HrT}mb97(@?R?1`5p؀?3Ѐ?3+`1` 0 @?F`?`?S2U- ?7?%NY&Tà?S}?c?SBN8P!?J?@ [jV*?${GnX/wQRD?KE;?]?Z SXgM`TP@@O?B7?T3wUF@`B%)<?I?8t @?`j?bB 8 ?N?T`?ʀL?A1!@l@?KB ?WP?P >R` ڧ?<=nIP ?$f@?Tj@\/:69`?T"?C?)?T&?d#?fh??Q$ABZ 0@5??9 ?C`Q@;M ?;#?b ?\[?7?G ?VP?f-?c9 OE.?4!`R??x?GƠΆJ  ?* HAo ?TW@?`?CPڠP(@?Gz?Z<[pZ&\J?\"?W?D= `?9-X'6wE@?%@?;^?Wc ?B`?BY?BĠ?HE[e~@`!?>!S?]?KP`HMQQ& @E@ JCU @uH1`T:W@?V\?]|>G TVL`Ba@ ?0+?RH@L p@?@`?12[MK#7٠ C`?L?Xǐ?C1?P~@?C@Y +U{ ? :@F Bc?\w?X ۠?EsL`?S Q  Im`?.g?U7 cF@Y1?K&`?PQ>;S?L+`?`* ?U3r@B|:?E? ?B @? d?H ?_@?\@?M8T?$^(,:@?/N?Gj ?"iՠHpL@E#`D&?OΠ?R?^b?mX`?g+`*SN@?AG4?EY3pB`6?L?` ?OqL2N&>$RڧUˠ:`? @@ !Ѡd?G?V0%`?;F0%`?*`?Zv?ZA ?Q/ ?5LNm@S@毮?A 4TQ?%S?II <@_=5\C@?"? ͠$d@5Ư!X ?A??R  ?N@?-P HH Y eV D`G]`5p0?NnDݱ QON?-U?G665 Cb ?RDn?Ix&L`9?fW9o?=`?= ?A?T$?*0@Yn0?T J Km@OX?KԵ@?LC ?B?D@4jkK.Kx2^@@܄^[T?MI?Tݱ ?+ SWV0`?r?LKDHL?S?BSvPA.^P{`VJ:# ?; ?O?V€?S,?H?4J6`>hr?;k?`?PtH?J"?Hw`?AQ?h J?<`?U@h`?' X [@CXۗd9E`G&IݠPsP[%@5 ?8& ?/S L?EU ?[_@?XE?80E;VZsUӏH H@Y_`=Pڭ'D.?۠?P: ?P ?Hn ?Ik-xL @97`Q- ?A?B?@9\Gr?8<?.,C ?$x@?ҵ@P`AX&@<$O?`?C90 PP`XFQ r7'?K?W8i?S?!4ϠKZnP%`?@%`J~HD ?@= _@KeDVM`I2@?FLY?H` @]E Ga}Rga,}`?Ej`3[\v JI@>W?!e;@WqnZͫ@`A7C@.?G@ ?X?[@?[#?VR?G<- RIV6?A۠M M_zTA@?D@@?R?ꊀ21'SF !?IG`?Cvd?Eu`?T?@?@_ ?':?IW `>7 QӀP: @D`I`Pq82s?C @0P[%@r?;?!>?13@B ?87dOg?& ?MG`G$- b@@bV@IF`?K`?P' A:?0 ? ?N?`9l@?GQKuK^4T?@?12[?C @`?S?O5=?.gR?7?H@>r7?@(A@?BM ^XMO@?C@?H? ҵ@?=n?P?B^@?E`?$62BOMÀQˤHaȠd?H?I ?0!?-?H- ?NI?=kՠ,t KwQŃ Z?ST?Q!?D/?R^@?T/@?(U`K!H@?D@?[?Kl`3UG<'?gJQiBO@?O?V]?܄>`?H :\[,TD"@vSTA?Lpr@WbQ@4@?JC?Ǹ?Hj^ ?W4@?IU8oR5?/ ._TH`?5`?OQq`?AgnJ# -P ?Uؠ?AC`?I?TBZ`P"?E?b= ?a@'?S^z`?U?.`?[s?H*H&@FI?C?BrW?`?5?I`?@@>y{,]P-)B`?67b?:?E@?@<;@2?Iio`?Ub`?1@ 40 %1@ >\/MyR%"] ?-)`Da@2?E~#`QC[ @_@F`L?4M?G`?Wi@?V<*I@?G5X ?A"jD%4 ?US?E@\4] kHrTUE?M6?D?a?TiRnZ49b`?@@?A?P̓?XQנ?CX%5? ?w?R=?o K4@=?Q2?:;! ?G?Lv?Q8.GAu?;_@?W?Ā?`ڠ?Vq?@ ?G@?Pw?42PW`F*Ӡ?-B$?F?(KPE$?Qb/?bc?dD`?^ȶ@?Kh<{{Rv6ϐ ?Cb?J?X*?X?Oq`1??BA^?BB ?@3J?42x?:@?V¯?M8?H?J_E])`Z4]`_pPb?=p@?I3?D ?=x.?L ?G-`D I@ATs`RVD ? \ `X>y`?CX?B :!`?M`?K?E,?2N J%`P[%@EEE?&f@?H7!FJf@K ?0\ ?V?\n?``?MG 3pB`?@?R` ?F!n@U``(G<@: &TNSJ;! RC?>g?6?&t`?=n3 @`R C3A&~?IW `?O:$?s2CU+FZ?7(@N@P?C?@e1?0͠!tR.\ A?3c?83/`?D@RO|C ǃ ?+ap?(?7@?1m8` >#V=O?A`?W?Wc?R?L'`?/'%g ?1?6!>?D^(?=ʀK>?+B@28Ȁ?Eu`?1X ?C~@?Sƶ@?3w?73?Ux?"ӠWVPQL@Tt;@WQ$A?A?Yދ?D`GKE@?0@?P ?6kE' I]@?!\ `O?e ?QĠ?P(A@?&@7 ?)?G!@?'4@PB^?[`?T`?2E?2?C@?Q/ ?K? 0?@#Y?@[Fϐ IW ` G ?0܄?R ?Zy?Tz?P5!2&5z8?B @?SU۠X+6V:?3ޟC@O P2?$@?T`?;_@KO}S.V ?S 5sL`WMS?Oq`3_`WUSUaEVV) 0.NrB@N?<?=P @?(>;&`T. G'@:`L`U7SYI`F" >P`@?ST?[,?V ?:;Ê@6F ZUn ?Aw?2GGy{>܄????)@9Oz`@AYM`@0T JW?w*?S?6# ?@s?R5~5Ư?E@vaE V?$-`?7}M#{W?;A`?Z XFbl?F?C+`GӠI?PP`?U{D,jP?2]`?a 2?\?2`?E6 ? AHnY?TY1<a@?R?W@?8?+?I@?3AH`QJ`I@?v?I?9 X5@H G$- ZgO:i`XUy@? @@\ UXQJWUUXP`2`6+=E.?.t7*N4Y@?H?FipR=?@?ICk??S @??>(c9 `?:l.@?PtH?@>|=X6?15YW:JK@?;c?Ir?D`?;8 +&`3ޟD@GĠ9h5`LF[J?0T ?8?O@?PAd>雠?C@?S.,C @"d_Jla&?/i?KK]@AVN?2B?W =nI`SD5?R~`?K`@c 4 `?U?T86Z \@?WB8`?QX ?:'@?YM?[\@?B(`JDEA@?K0b?PVڀOc Rq1 ?I5`?4~ IY?'?P?$?% ?A ;4@Glk3R0^eb?dl^M?H?T̆ ?G<?SB?Z?AR0?1-t?5'Do #IOs`R#R?>?>Rq1 D$?+WS}"Y? ?>(d?`???/ɞ`?A`?&Wc ?2 ?BS?4lߠ;r-ia?C6?@=>n?26T?T\?a ?^H?FD ?:`?D#K0SfrLV1<+ ANL ?.p?T?&r@Ej?D.@?W?T?X-?N?Gp4E J`V Z@K`28Nv9o?FF8 ?H^?#)">@/'?NU?BN Ku?@?S. @Q))@i5Q``#`A??%u`D~?rB@雠P6`G<@?.>G B??DQk MT"U@8o ?Hy`<`ZY$`N`XҚ [ y`?RO@?@s?e`?3<0.b@?1?B@?*# 0?TB LL?E֠?B` @?Fk?Rx`??"?@v?U?`?LҌ4(3H|@Lͤ8 ?Y?V3 ڀ?.7 ?4QY` 5?Ud?V ?Qxޠ?A?-8T?$*+ 2~?17C?B`?F_??`7]UW`C?D|?Y?S&= 6C@?!#K;M@?59cM1y?N?[@S?8?,j?]Ȁ?\r ?A{?Rԅ`?Q=e DM@ DXoEW}?zj?Q`?P>T?+p' >+ ?C`?5$S~@_ b@>?Mѝ0lU?PdW?f- ?DŠZR`z?4`?B ?B#?DKÀ?L(`?_TY@Zh ?)O?PE@?.hr74@50Cٸ@Qe`P0Du?6H7`C4TAW YQL@RK ?,`?%H(P?6!n@?3fr@`B@?6H?R4}?BBEu`#ٸ@H?1?RX?`F?aA`>RX@;|j`?E6 ?AM?1<+ ?4Ǟ`?w?2'?AHn?2Ӡ6c`Q+ QC?3?\?X`?F?8\`B"ZP`?3$:?P] ?U?L@5Sj@PO`KP`HI?Ķ?K?E1@?4N3_W^OO`Q/J)3`?(F@&&UEXQ>7e?&+=?E?EA@?)*@[`>t\?5`?Hx'e+`(?W?HR 8e?Eb\ `%u`)#`P@{`?P F?Z9@?XH ?F%'D?!?7@HAWA'R`?8_T1- Gr?I?[@(픀_yLW2G`A?Ga?SW?@.gF7G P_pN?%?2~S,@RGr?0|@@6`RIV3@?MT?C~@? T ?8>D)m2&C@?+ ?7`C?1ch?Wl?Ra?F=?T`?X ?[(j@?WX 1 Q`)u % G? ?]?dH-_?.?:? ?+?L$j?6L\`GȀ+`)<?CKx?LKXڀ]`<?G-`?Iio`?I*@>4[T*C)"?K9?1EL =?S,AdS? V`SήG_ 1!05kL RIe=t= $6?*`;Ҁ:l.@5?/qS?"B?Gr?[܀?X*?E ?+ESj@R@EA@QhPV} ? @? ]PZ? ?NM?P)Ok1>?L ?@?D`?A_ EWN7 ?5.`?+y>?"r?9@?5x4 <T'c&` bYJ?9$?S?5g KL@H ?Jw7?U#`_%Vc `?@?QL?@Mi@00?Q?I~H ?2`?Q?MO@ l1 ?-V?Ll`?L> @@?.?Fd@EGƠ?X(?bM@?^d?]=<@?<خ E=`0 XPTTY?Ά?Iy``3D`?Gu?G=KV ?a2R`O@F`4~a`?V6@?_79]K`He6-53 ?=Iv; RĔ`€?FހU5_f _BH+7qn21lB"@K) 1MV ?Jդ ?AU `>`6 ?IM;?>k@?Da@?NH ?#ޟ:;! ?8k ?E@8`6?UǠ?^d ?PU?/ IWI^NX]<`??P)h5`[ M,@?K`?R8ȀDgSX?Ap?G@DO? 69`?S2?7T(3Q ?Mg?Q?P?RE ?!W%N&-3 ?@J@Dq`^m\.: Hi$@?@F?Qt ?#۠M C\?<%?U?`?Z-?1-tVQ4Ϡ?4B?Hj^ ?9?9?9R"?ES5MKL?"dEu`=K`?4#K?Hn?AM S?3@?+`C b?H@?`y`?Jc?0?<`'R?,*@'B`TϖT8zO@>@]`J%`?E.Uf@W"@?(V.#GDA ?8@?Iu 7:[@?Co`>F4?>۠B@1 O`d`!G A.@܄?? ҵ@@`6e ?S?Y 6G@Up?Oq`?Bbz-@? ?C 4q`MK`?$?I:W@S?ހ?P8@?2E/;^7L5$?>?;5JK*!MV ?`鳀?[`L[4?4#KYF`Y&@?O?PpFQA?6o?b8?[?1X E2N J"?+@?ZY,`?cKx?\Rg'8M?G ?]@?Lo8@9~H E)۠?M!?L1$- ?5'D?4 h5`ڧ/HB@? `?07?Ds@?U!@?Wa}?Cȍ@O/[`MYp5 7Ơ?+:2@?G-?7Q4[Ef?&!n@?Ps8 WL??x?[:2@sTByƠ?8I?AMV %Kj8.G?J ?U`X ?`C;`a+NUUA ?N"?O `6T@Dݠ@@D*IA??K?_? `?L`93Ѐ?"i`?@S,?kZ`C;? ?U@?:X`@k@9J +H`EK?;=`?T7?@B ?. @@!0RL9JB|L?(?Q:T@?/ QYAN?7'4$K@2~?B#?S?Y8 ?Ap lk?Pڭ?T2G#[0?!y{]`^<?A?J<?8Q@?[?YM?R(:`?@@@k@?P"?bI?Z-0@D&?h@4[?(i$@?P?J?5U ?F9?=s1 )"?J?Y} ?6@U J`W`NP-)G  @?%ڀ?@ ?TwL?W`?HD 0PoC1`?8:?B?=nI?7 `BPG?'9?]ѝ?ZLL ("@?F?YHS@?F=O`>-@?I`?E+0bC"? ?X ?bH`7O?O d ?T @;`?I@?JH`#Ѐ?<*@?V?D4vDx@7?J) ?Z?P1 G?3㇠?\??Qa`T@[ o8@?E?8? A= @O.@UU}0@?@?>j? ?2@8ʠ_Iq`?\?U3 @`+ ?St ?]4?*URJQEP XW\@Y~ ?Ķ "= > >y{?#b@?-H)`QӀ?,ǃ ?ET 2ʀCȍ@6@.^?=Q?X?X9Q@VOp?RZ`?W雠@̓Pr/`,8& "?'^?K?Q`BV6?.F?S?\?R'!K. G3S?G`?a?X 1~c`@ ?9Z?P@?Lw1#PwY?5?au?UR0@N,\`Z9VPSk,"?N7 ??`JYZ@X}` J?@9@<@?,?Q@?Jl.@?5?2@&~JoPELP 5@ ",?HZm ?a5?Q@L›`J~?9?@jy`?Y1?_~?1N0 EO`Q%[ EN`?=v?@n' ?Ja$?P?E``p@?>>MKGl?LY%?Vy{Jh#@?JRm?Xtʠ?A4ϠW`L{{?M ?Q?4 `@,jP?JX`?O9`AX_OO?#w?6M~:VD @1`ە CZ/4;Ҁ?.YRWpaѠDKÀ?3WD/@EE`@?#F?0Y?5?6R`J T?Dw?R^@QPgb냠_A@V8?EN?C̀>R;0bM / 2 ?3&?O?PV 7O?%B`O?4@?#wNgK??"= ?JQ?Ou@>'DN"??Y?Qk` 9 I]@"}tB#?(d?Xw`?XM@?6BGI<`>??@.b?Z?[h.?U5_?O,@?-AaLPcI%@ ?@} ?S?Y?7j UoO?7l?K{`?Sx?T ?4@? ?J ?;ҀX X +B?>K?Xq?ST3ޟO@3å?P 6?YXD`?7p;Y?S2U?a8?Fr@&o?I@?V8@?T3=?F.(B BڧQD4v?FC@?@ $ `?@@?ADK;l@So`?!!0?Q`X ?C $`?(?L`?S`?B@??Ά?Ln0XQ5l?4 `?EECAC/D ܄`?~2QOG ?ە?5D &o?B?HPR`ҵ@ZL ?7l?T ?M,@۠B> +9=@?E`?Se?@=?DL?Uj`;M d%"YU@@`QTkHzO@lk?ECy ?:SDJ)?Q@?Q@?C ?O?S?H?F%?S1?Uz?JM?8?A֮ ?G 7(@KA`2`?P ?X?Rrk ?Bڧ?3@?C@?SH?Pv?Vt@?7?O?Ry)?A+ 3<`N?@F`?A??Ach?) ?%;?*`?G6?[`?Jj@GT5T-`A< ?Fo?C=@; % E 5]9?B ?Z?T?9^f?O ?Y[U ?Os`?N `?Vv@?Anr@Ik D+`?6M?4C"Jς?:xq?X^?MJ?O?@c @Hk ?P|@?SS?0 D9^@ @?@O?T1f ?Rq ?R&c?SS@?I?Rrk ?b`?U`JsV F? ?H (dP8 ?8Q@?UY?A`?GӉ?St ?1R05?05?Hg`?UF?V?Cs ? @>? Q8$?Pc?Z`?Ns|@?R@?a l?9[BV?H@ '@ReX]}Q?,?EW+:2@*H?H }?D`3r@E@~@3@?$`?Ev ?Bڧ>4[ G?L??V?0_@VJZqBR?+ ? a?&r@?RT?c ?c'K?@2A?ǃ ?/m*`?`?nITSa_lUY?>@?O @:n ?0%`?=^ ?8+,ǃ B"?QO?>ʍ ?<` ?1?#P`@M_Q]}M\ /"?$?=b ?`1#?F0%`?^xd?Vv@!P`LUw?Aƽ ?X"?0hHS?2~?A<+ ?UmǠ?E?8 ?H ?Ih?P?N>A #m΀=UAT`8 ?0F?KFu?2K??S ?[5J?O= -?D@?V @?E:>?@ ?' ?=s1 ? ?mZ?& `Duu [a@`pVC'@S?P-?G7b@: ??qS?LP ,ehX_TZuQ KwJW@4V?#m΀?"%)?A ?Kf*69`Uۈ@UJT Ok1?4s`?S@?Sd ?Bԅ`N Wj !Hn?@ ? ]w ';8K?. ?K @?F>?@ ?;?G?@.b?W`?R` ]w k 2= XQ ^UEK l>ۗdBgaBʀH.GRq1 6L?/:B- ]w ,@Ay{FNXVX^ЮZcF:;! :%;C U`Sd5g ?Iݠ?Wr?E(~(`?DF?S ?"Z 1?@?#Bn`? 9?9~H D`H8 Na@Ng9+k?`G×Xf`P`7j ?0s7 I,G:Ak`?/]?"8Q@`?6-?Df@?Q|`?Mm ?1N5N@c ?" ?I@? lQQViO3F+=8 ?@ ?V6G?P8 ?2X?A,: ?Oe ?082@HݣC[i?3o`?:dAPw:?Iz`GT2O<`HzO@W]2^w*St ?,` ?MG`?RD?R@@܄G雠(PfGI@?1?LOV ?Q ?Pw?IO&>܀MD<?9?D?R?0܄?[h`?ZB|?ڧ @MQ)L`*qGӉQ R<`Q+ ?%Sj@?6 L".?S?D @Fc`V:XGk@QI@NFJ؀7];} 1J`?J?J3`"sK~@R?J ?WW@?Fn,C?:%`?<6 `?@>(? @0T b@PghB\ez[SXQ QY/6?S(@?A'? 5?MQ?6JୀP,R6TUsT婠Or`? 5J?M ?GPR?ҵ@HǐKl`?F{?^Q ?Qm@?&}`??'`?,"?2G?AW%?I ?;)@?7R?W`?[tq?'@B?E@?_4?XLJS?$?]. ?Zm! Ks??Do%摠M`0?F`?A@?BK-`?S?MD?7"@?-@F=W+@5?K7?OZ?Q?Vbl?Tv ?5u`I/@h?F" ?S?Q&`?1I?@?V?Z5?.?6?O ?&:SMHE[PERXD`CI?QW%?^ ?76 ?-@?XF@?QӀ:l.@Z|`[ 7 ?#<`&?/Ķ?/i??Q%?NK=S?E`?PX?CUG0;@?P[%@N8?C?>@?,?@E@?Ach?F\J?I$`BhcaN!y{?7Q}?`?5_ ?Zų?g32?SD`CG`LjPU5_ZY@`?)^f?(<?Cq ?F ?@@?UC ?]?V@?T ?Ed@C``H&?# ? ur?3m΀?E`?+`?Bbz?Qƽ ?OL ?EE  9`?79?HB`? :,@;?D?;d3?6: ?\S?`G?Y@?F3 ?1Ń ?U*?[ap??L?C?Vy ?@K@aǨe@P`?CpB`?%_ ?Sb?9 `?6L?O\z?CЀ?2@&5?Q]G@?W'#`; .(3?@L?1 P@QP4B?$E?2|? @?&y UB Ne?OR@?P#@T VE U@FZ0I]@Ӟ۠?T*@?bce?\O ?S ?GT`C{KN&:??Q?X3`_s`a(Xc?SJ>?cnk?p' H΀?94`܄R;<`WMQM_T?@* ?Bga?[=?b+?V?C2? >雠?H& ?*69`Q@@P?4=@>@,>+ G @R/Ά?*`C# @?%Wc>@J@?I?MNg@?MP?Un ?K?7I],???@Cm΀GMmL?E.?H̀?G ?P@?St ?O`?[`P\` Vq? Z?J?b`?5sL`?Ok1?J<[?)h5`? P ?TM?Z^?Aƽ ?=x?K0b?bH픀^gg@]@ALF.0"?@n' ?Cw?G?O I?GK@?W ,o8@Qr " A?B`?E`?.7e? R ?H?8SC`B:;`>+ ?Ge+`? ם>9٠?D?VV ?@tHDuu Ik J `Jo?&@?SΠ?05?-?:`?Fe ?O?@`?@@Pߕ`!4 aP?ǃ ?E;`WLI@?K DԀaT.U@?,y?UL@?S7@?5?Ft`?P㇠PI@Sȍ@Mנ8fˠ"[?Q`?S16oK%`Ck`1jĀ?;7?9D*? @ n]]`^X?!Hn?T@?JN fˠ>1<+ Ar R1 HZ? p?KNʍ Ve}@NgC$::b^?y?2r?Q?\_?W;y?: &6C@FFs?#۠?G@Y`bXE`9@B@UL ?@?IHS@?ʀ @ hCO3̀ByƠa8}`bEQD0%`???9.|?Q ?Q+ +!?:?3\bXTTY?Am8`tJ?%?O$?J,j?%H?B|:?]dz?S'[\*X`8ʠ8V?P?R<-؆?U?Wn]?J؀?J,j?S3?@=No@QMMO@YH@[y@OO+p' ?M?LGg@Pҵ@?8? >2~?AD?? Q`\ ?MܧZ>gg@G ?TN?]m?MZ`N XFU#`\m`T+?5#`?3>d? ?P{`?FYL@Qg>?R?X| ?#wE:??lk?9eF'?2+?T ?@){ 3zIio`?`3u*R?Ao ?F*;`=Vx/b`;@?-)`?Lm`?K ?I4`?JAB?>|?'?lkOf `S^`?[@OW NЮ)@?ԀHǐA PoXO`I=9Y~@QW%Qnr@5S?B?U`J??,?V?`r ?K} ?DU, cX` ? `?#. @& ?(r?@P`?GG?(U`)`?PN?O`?E."CD ?= ?Qε?09?(`?G @?C>?EH`?U J`?Zq?QR=?m΀B QPgSp@KsQ`T,~`؆?C)1MV ?FG@?Th ?K?P?PC@>膒?Bi`?S1F2@YW `??P?J @]M@c ]& \HD?R@?V;.?CKx#_`CUG@?4ݱ !e0U?= ?WU:@?SIKT.@?B ?A3~?R8Ȁ?W[?I??$^(0͠9RpH^?J9@?Y$`?K?2ߎ?L)R`?Q9`?܄[`?D%#`_o|^OO`;`?&9?y`?.ʍ ?7:`B[P?V1 ?Q> ?F?! ?9"GS@P.bA`R[`Z@Z,@\2Q#?8Zm ?8w`"C?7ɹlߠKP ?F_?atE`?\څ?W?@/R` J`?!>>?;^?*l?>?[{`?Y~ ?#w?>e?LJn`6wM4DH8d??Ԁ?SD?V??EǠ0!?Kn@?S=@?N@?E?0H`?3 @?H+4``V" Be?D@?T@?Y>P`@?H?r?C @?@5?F`03,?Q?R ?<?9*@>a27'L)`ab`RQCN(^`;GD|H9?,j?VR ?T9?1^ +H`?#c \A<^b >Y?}G}?FF8 ?Tm4EF?@?4B?%XQ7@p???R ?J3ŀ?QOK#Pˀ:`0w?8&@?X΀?HzO@SMO`R`-_MnGĠ=s1 AAA6MTV0,6@?Q"j?PWw?L??Qs?/Bg ܄?'y{?Q< hmobe?#|?+uB8?$5u@RݷEˠ?3_`??Ԁ?F?'雠CF?5)"?[?Ih5`?h?h-@?Bv?: ?U3 #1Z`RDIB? \@?`s?g?YL?<`?F `?Mx@?F ??h ?{@9F 0B?E?Q`?D` ?AI`?I`?LPf. ?/X?<*@?C\JXd<?=U?\4[?O >@;D4VEo_\?>u@Q[XX٠R` HOcA?A6`?Z^?Q@" J4K} C7@Sx[M4B`F?B ?XH ?C]`;`=G`?64?I=I?& ?C?`: @?X ?' `@EY UE1@?2G?W?V6?MJ?]e?b?K1`\ `?1?1 +LN@R= ?)"?O1 ?9c@?8 ?Dy"?F`?L%?Id ?Tz\?^~? qfIcK+) ? ?.O?UUA ?K*A@Dy"P`RA^T%K.Sk`X& @:A~c`G{> G?:`?fy ?d`>++ ?R?6RsEj?'7 ?1~c`?`?g(w?cEV?cc?a9`?I?3a@?ET ?>L@H ??)2@6F8 J ?L?0םU6[2XLI.?-Ɣ@?Pπ?M@H>8W`? ?P+?9^f>?7R?/EA`?] i ?_fJ ?6sKh`Oi83/`-@Bտ`)ZrF}`>? 2@'s?!IC1R-" Fi?R=?Py?Z@?Q9J Q??P]??`?P;?c?X@?%?N``?X"@?D@3W?AG4?@?P(A@?e%@?h?Y ?B8Ȁ?@fˠ?Eo?Ig?*I"BR?KY?Tҧ?rI`/ ?D9^?D?H`>?P ?Vn7@YF !4Ϡ?OQq`?6~?CW?V?Jd?1&?@+?`6# 4y"OݠUB?@= D `U `V>֯?_9 ?Yd"Z 0){ ?D?9*@7c?# @?T?QM ?6-?2`?*?;y?WZ@?RV>a@3z?Q?QD? fˠ2;k?`LU7;?P ? րak`KW6 ?G×?/`H"`E 2Z DE1@?a`?0 ?#r@?,V?(`?M}?b1@?e 9?Xi`?/= )-X?5]9?<ǃ 4[6*Q_ D`?PG`?<(`d?Ld.?K+{  ?DH`?R@?Tڠ@?JB|<NSb@/?J,?>?CI?V?LC?2 A?U`?bn `?`K?S3?4/@?&ހ?2`> B-?KY?[{0?R?9#A?i`?EH?*I@G `1 ?Q?Q?!I@`? @?HZ) K?ʀFoD@?$MLd`Y9h&>܀IiPWwI9 -X?IJ ?Wr ?V?4GD@2?A ?F%?AY<}YI_?DU?16?@d?Tm|?Fd\ `?ʀ?:?4 Oq`CåQlEW?81`?G?5`? A`?)?H@`?R?M+?D@?D3?H?SHg?S+`?@F+ 5J?H?N?@Y@?9~H ?Q9`?+ I(,}`?=^ ?(|@!9m K2X̠dgfr[qaPa@hTKV͹@??N]iaW7?A6?Z@?Z`?O ?N几?TxA X?D ?Cw?C}?*0@2?B5?P: ?4?E^s?JxqJ؀`[{̀=?S7@?X;) d j@eXBLjPH"@D_b`DQ'?C>?8 L9C`SBF?()T?Ub!`?zjSo`,??6v:H>n?L F%dJ@aNЀ@ FRRߎBWp ?Hug?V`?BtMvLK>+?*]w p' , 2 ?4s`?! 84?1Ń >PaSCr@AH`D P3JW;y99 ?S@?QSw@? T ?U]@?V\J>+ H9?q?Y ?a?[`?J?8 ?5y`?> ?I$`?Pl`?U"?]&?X]}!W%P@w*??03RQ8}`H ?0} ?Hev?D.U@?;ҀF @>&L4Q?ʀ?M4?3\<N?;R?N`?7P?;@GK@?Fbl?Uj?-|?-?P?Gޒ@? @=Q)@EY?@ rM?3t?€? G?NI?K] =v7`P[]8TQ!?E@?R ??߱?0u?@=dz=\ >\Qp P 3| \ 8 ?2`C@`'@SP`@?T+`?`@?JX`? Q?F?Pf>%g O`? ?`_?aa?P2`?A2?@+E{ 0@9$?D`?W?D>F`GVYOwu ?D@?S ?0.b0@?Ep؀?\@?_U ?0ZX ȀD 8?%g dR[`J[@?!??4Ԁ?&k?-X:# U P=?C&?L`"x ?EI?BĠ?/ Q?%N?.A5 ?Iio`?TS?R>?S?S)`]S ?Lj?]̶?N1D >$I@)CЀ]ـQc`?Pf?U@?6k?1ە?4BVXU_ / ?P|@?GAL!SG?6?U?Im ?5?No@?\ ?[L@?@`@`AOFh^9Vq?)m ?Ld.?MK`?T?\ ?T8DZ`Pgh? G ?d@T;5Rp?% ?L\`?%@\:}`d`Q6 ?%y`?5ڀ?Fr]?F0%`?Ec[@?X?^?[:?c:?c ?"8a}w^G?- ?1`_`` ?4瀀?V_?@H#`77G "^@OB`y0X©D0 KhˀL?۠?Qܠ?MG?/@U0w@No@ ?6G@?58o?,Q?B^@?TTY?FT3=bQ_m_N`\_G@H~B(`V\M: ?= / ?GPR?B|:?C<`?(픀@F @>7e?PCؠ?R"Lخ H& ,t Eڀa@]E?1+ ?R#R(8 []\WG%g ERkAwF@FT@2`?Em*?Q?EƯ?1X ?.?D?M@>؆P#Y>4[?^?`xE ?I^?3?+Cr@B?OU ?RA UؠK*0?%?p' ?%@?Tz?`3J?MM@F P'@?W?K4?Iơ?O+m?Q?6|-?<`?2?&?@;@[$V]`+FPπc@?zjGw@D2տ`?p@?Pp ?X?$x@`ߕ_`雠?7`$s`?E'D?Sg?Bx@?=`=C9/?TU?_i?T`?6e RA=e ?UΨ?XN?D9`?@k@?H`*`?L3!?SG-?C0~?TU?] `?S ?W'?a;@?aW ?]k@?C> ?4 9@?I:]w T`QQ>:ATHUb:?NIT,~`PhAMV >r?,R?@@??G$- Y NF .2~?- ?Q ?\}`?Qu@2ID?K?Zz`?[W\c`D`=G`UBG?F?<@,v? _@ >A5 ?d'@P ??^g9?\v?Qa?R?.-@XN2~?T?O^P T@?%I?Sz?P ? %?`?D0 ?O`?F?$x@PXh@HM>4[?>۠?@>?8?<?9<?2v6RE @?Lx3~Kl`>A<+ X5@<?K4?He?N?[?IS\UMb ?TY?J`?m?AC?W֙?N@?HJ|?E.O, ?S7٠?[?=')Q=e ? ?W?V>y{?2"?Jc?D@?MNg@?LN@?NK?_9?U FD R\ <}?;h`?J&H`J@]3 ,4[?)TRN >$?3)^f]@ cMN;?0L?BQO?9R"Da@CUG?E``?F^??S ?N@膒UɠF!?7@?1#?&k?C?9`7@?@?V|?T^ŀ2~RVR\`:oCYC`?H<>+ VB` Gh Ps?"ʀ?5u@07?I@?\'`?Qe??SBF?a/`?M/`TJ@Jf ?F `*YH`?M^ ?_ ?Yy`?#>% ր?EN0 T];Qam@TSÞ۠?<;@?E?K?Jդ ?;7| :3ŀS W?@{`?`@?Qw? `\ LvU}7g@?$瀀A`@f?Fv @?E(Jj@3 @`?Vun`?9Mo`?1o ?HA? o8@?Iˉ?PtBRs ;R ?.(?'4@=CC]`?F?HE摠F9*@O @E(n?GI?6sT^F]ՀP@7^b_?4#K?CIN 0s?D-`?:d?6^ACT>几?A?Z@?_%?1y Du?S?8`L`>H`??F?Sw?V?7T`?#>?0=W&` ?lk;T ?TL?S"c?R<?Y?R+@,`G? UH_9 > @?ZH?Gh >!S@@/">#ٸ@FTlBXK !>B\X`:*?9h5`!K/lk?H0=Y ? ?YM;?DY@9K< X)>4?8GtA@H8 G QW `LM? ?2&@ FD?!9`?6/?~H| O B/`UIE`?X)?OOM 9{@?_ ?`?Q?S ?0"| $?G@?XgM`?6Wc ?@?P`Z/ZN M8?0%`?23@?D`?I?9U@?%?C@?BOKOb [y?T|?S'E9^iYK*?E.&VCW?Nq ?8 KYU`$d@?$Y@;ބ?[@>b ?5#`?Q @Nd1f Aƽ ?SO?Q_ ?K[*z`[:@)`?Hx2H1`* ?6 ?Tk?DNxd?0?X +5LU?`-Ɣ@?@??/H`H'G ?,t ?L ?_x?Pҵ@@_@?VYB6 `?R0?Uj`?5sL`:B|RݷOM$`?w?D'k Q`P@L- @+? \ ?A??M3 ?N7 ?Kqa?Nc ? GSXQ8@%g ?FQA?:1QPl``n@[uH8 'QS֧`c$PE?M?I?1j-|O$;)@\4f[5JR` _p`; EcGO3?K#?NO@?PP?Q/ ? 0@$B?B "H?3D`?J?8\`?A??Kb?9`+ ?A ?F;.Fc`Rtb`N几c TN7`? GV@@zj?Ex4 ?Bߎ1{?>g?X>>'DNo@?<?EF6 ?`(C$2?C&H[G?P?K~@?- ?@ 6r@ANC?<6Ϡ?Bn`?0 ?Ap@?Y?i[U ?bi`?9ѫ@?W6!\ `RkF[H΀8@?+?zj?9O?M?F|-?A2[?:`?' @>]w 7x@Hn?I*?D)m?3(SZ-RX=ia?:H?AT3O@>TB~`R Q=e E.= ?!??{@0P?Fbl?W'>?KO ?4L DUC(@3-_@o ?@?AxTfga]6?#_`?BQ?>@)7`M"@b!`? 5^^dDP/C,@V`Op?E?Q4Ϡ,@K 56 ?9?:l.@??|?U?G?Sٸ@I@M?-?Q?@ )T?-?R?M+?30~?1(`;5JL 0_pPc-Q"?Dj?EZ?BG?BZ`?\ `:b^${?Q?WE@(z@AW%?E`? .@.b?-8 N几>d5J@?DF?HE`C D`S۠?9`FP`@?O?I7`??*3?Ts ?eE?^@[E[?75Kn@FS@NI?+?]- ?S?4Y@?2`?SD`Cb@?+~@?>o@?I7`?R&c?G@?mZ?,?-:@L@P >m@?M@?Ox%k? ?C9u@BנF I C9O4Qy?GW ?`V?V_`?Ab/MO8P\ ?BB?O`?YL?V8I@e?`]e.c ?>雠?S;`?Z^?s`V:?@%`?V`?:n?5B?@?Wyg@?V7?ڧC@H`Ku:x? ?R`?SQ`E@T&?4lߠ?U??F`?!C?b@?b`?B?4ݠ???1 ?F5 ?;0b+~@?J ?]0\?Y*@?X@?H Eh`BA^?M?Z9@?Fd@:[@?0Y?I@DDhEMH?I"T0_pA>X=s1 ?SDy"D Q??x<}`2 ?Fc`?.E*6ހ?K@?J4J=Sm΀:HM8TVuF#ޟ?N?a ?MF:?LD`Ar ? H`?LUw?`xE ?`D ?:# =QO?'D۠?(K9AL@?G&?H`.\?IQ?a`?PI@B`6ʨ`???2LMGX`?WD@?b?Hz@#z?)`4 KRL< I;@*,j?OM?R40 V#KX?=>@?S ?R@?:%`?W?e; ?R$@*q?QM?[Ê@`G?8@?85@%'D?0`J:#A,: ?  ?)OP{`N۠?BĠ?R?:o<?"ʀ?^?`˨@?Qr ?X)?^rB@?Q?I ?Mx?Q ?^?] ?I8b ?H?r?>MxAI@?2?a?_[@?2x??V?SQ CAD?F=!?M}+MyR`U@-.@?97(@>?=>@= M*`c@>(V} S>?C;6Ng97v@Ql`]g5?HF@?5?0U3 @`R%Ơ? h?_";?[?A)@?1?Q- ?_?R`: F۠?B?HBJ`*l?A ?VH?R`?I@?CF?.>h@?Cm΀?a ?a:@?=]`>c 4H?E?@n@_TQ6@?=%?12[?[ ?SH +?3w?\`?V [8 +?:ڋ?53 ?6'`?5zC`IY>n?)"?,6@?N?C?Q5lCZڋL"GEI@N(Hʠ?B, "dDg?*?Vy?E ?\y6R<;@VHy`?6wE@?4TY?35 ^]ie8f`?\5?%@`FLI?TԠ?MIBGDjk?F0%`?[ ?WF ?G&?/9<H I>UYoI3X?<(`?`?,6@YR@?Qv ?U{D?CpB`?Tw ?W?MT?\Ѡ?bu`?L'`(??J?[ ?^mZ?Q`X ?I?M@>V=^S J@?G"@?C6H}PCQ D KM XY a;L` ?@dW>,U$B?/0B ?Pݾ?M ?k l@?2v?P?]Ӡ?T0 ?9?5d@?Q?F_?:}Y@?@ X?]u-$SGqn8&@>雠?!?-Ɣ@l@$c@?K)@> @Sx:?G ?[* DwQ?6 [?+?Z?L)`?<4 9@?7Ơ?Tm?I{@+D?)7`?IdAQ[K @?#?Z?@/JNvN @@? ]w ?LJn`??0(? R?3<`?IS\?: 37٠?9?V ?T ?C@9֓QNPPjP;=K`C6QZ6`B` $CMN??a?i ?Rx@ ?V?^ݏ?C̀3:.?!\ `?P@?N$?81`?Ds ?Io?D3=?VR ?b:?\ ?%_ D @?&M?S z@?J\=@*D:`.=GEJi`LAL:}`T,@[]%@NmZ?!p?.;wPI]@YﶀF}f?E=')`eOW@?A!0?R==G %g dB:`B20w?B ?],@?_= ?H/@F`C=@@;dX Qg?U?$#K?2?B?;?B@?+\@37٠?0 ?@s???K8 2BYs56 ?2 P K.)`H\`Ts@P% Lv*?Qo ?_5?_S ?S?KG?CBWpO@?%1@?H$x@?1;rI?3 @?[@?P"?@\ ?Xd<?L}`6Wc ?0;?]?R D"Z ?P?Os ?G?$Y@JP PPK!.L` 0_p?EW?A7C?`?7b?b8?kl`?Y@?,o8@?Y3?UP`Xf``: @.?5H"@IU@@P;p' >KN P`@?:Oŀ] X@/H`?Jw7;FuW6 PF-s1 ?U<?` ?K'`GX)\:@P=?3 @?B?1 ?@;!?HzO@?6R)6r@?UB ?EˠHQנQTUXz`R`LKqa?-@?];e`?ZuDefc3B?9A];Fu-P ?OB?T?I-?38>WG?B^@?Nn??,6@?S ?Yb@?P`7:V ?!2?`?G:?T5(U`?Y-X?R `?%g ?F- RȠ ?Gg@?(?/?>?!0?!+ ?W8%g ?8?: ?T?aJ?]@?Q`?Fp@?ROx ?WE@?@F`?8o @Dukp' i\@BC=C[XlM @MĠKn@T@`l`ZN@Z֠V?R ?^@<VZs?b`?G?G ?ad?i|@?\ ? ?9 F1_@4O?F 4@?H?5i|??[֯K?4*?"iՠ?`=`?Q`?BKVy W@TA`0PC;Oݠ?J) ?`:?J-\K `e C?]נ?Z# W1BM@?/?>۠?-|-ZBFE&?=:`?,-V@=S_@ULD|@c B`Aa`J.g?C``1xE$?J+0?M~: `?,G??m5u@E0@6`2?,›`?I?N^`? R O7@?J;! >nL(`?%?N?=C?P`@>G@ `WՠY@ҵ@> <42?1?CS@?V6G?Yv?C@? ?8w`?A?P_ ?V?PX?3(6@ ;CMkՠ`}h^`0i?@jy`OP7`GNMxK{`>雠? zjA> ?x$`9O?;?d;Ҁ?c. ; T@?NI?_`?Os`?K ?VoL?M?8?9j@?+A`?:?R?N几?-?4i۠V\@IJ (.G? ?B?BC!`:f``?@n@?N&?Q/J?9m Ag 6-?T\?b ?N R=D?d\?j`E3 *B C13?%摠?H|@?JD4@U `=r`?H"@?& JHS7T`>SRF?M5?aTc@?3FQ>4[?C&"+" ?|@9ZQ6Z \OV RB F{BB 2x S? ?[ $?EMH?\f?SSq0@0 ?<?-}A`Qy{N۠> 8|@4?1 ?B6T?S(?Ye?JL#7٠: 1v5?`Q+ _m]1e?Rp?BXUadրY?4$?5;!?6L?>K4> @@?RDn?S?@ם?@=?Dݱ ?OQ?Zo?` @?VAD+`YcM?&>܀?WL?& MZ`:?$^(?,y>MA`GAt`?:@? 7?w?EI!V_.F?S ?R@?DW@?E.?9?'v@?Q=e ?`p?\@?S?Q?(PQ?1 ?Z.?]91YLa@?S?c?:(>`FN͠G3U?P ?c?W5 U;dc^8U`?`@?YF|`ANP H?E@]^̀?G'?aX?Cs OD`?5F?@ ?&G!IFy TDI`?(4q`[@RK`?C?KO "^@8o ?LN@?c`?_ 0 KXڀ?4?E"] #EjAg?)v?!>+" ?:l?0_p?-#㇠Fn'%g ?: ?/'?>t ?D:[ \@<?N3`?FAUfh RO ?P ?%u@Lt ?Kg?U`2?7T`?[R ?Ea <}B7;h`?:]w ?Gՠ?.g?=u?"-Q0A"j?@[B= Y$ES?#'D@=T)m_.~`V=?mZ?:?)`?8 & `?E{?ai?Xk ? \@0dWD ?:}Y@?]T?W2G`?2ʀ?) X [k`'?@E@@PUndF4?9ѫ@?9:,@5!`'R?Ly?_B?EO`]@c;8B:`?T"?K]RtBY@?2?Bx@Zu`ap !e?S<$`?P ?*'@B&t`?BB ?/,$-`??}?:`?ZQ?d?TXR!{L`?SO@?QEBQ 0} ?W?^(0W>几4d@R'PM?z?Pc?5 J`Q F?*b^@;L`U=W@?Vn?Z?`M?`E ?K@%D (`>c@?6??=Htc)qX?M?Fv @?Y?5 AI9 UjQV`^,\`#)"?P[!Io8@?EMH7 MӠ?H`?%F8 ?!`Cr@=?Qo ?Tc ?Oq`?.rB@?E@>DD?@tH?Nu EuAyO>Ѐ?C=@?F=@EP<}W@S 6o"`A K%YN*]w P @L?C?"?dG)T= `Fw*? WWRcG-J?4LI4T! (?CI?U@?U?%g ?1?Tu@?P3?5"] ?Z/۠?B&?X ?_k?R3r@?1 ?Wܻ`?E)J ItxCvd 5J?9(q Q^A0FK8?9(q ?J@?9IM;LuY(|@?u@:LL G雠?3&?R@?P.?UL?S > &??A< ?K ?O@?M5Wc WaRG??U% ??=3l`?:`?Jм`U@O)h5`?Q ?OVY14S]@RT_(| ?M? ?RIV?Q2?X Ȁ?B7['0`_s`@ ? a?@n@?@{`?L@?NX?B= ?Y[ ?d*?Y?2QOB8R`MKJG95?`;d?mZ?P?S,G`?1`>@NNvX٠Y,6@?7K@?DB?S3`?A2[?@?HTK?E2 .TE/@@Vڀ ?N?Az?S?A 4m?'Vt@"\ WWcIr?"?Q`?A#HdM3 ? ?TQ@?G@IUЀC? CEMH?C,@?_>o`?d??QF9?%K1MD ʀXQ@?I <?T?"Ӡ?9~H ?R'?1.?L?Y1?G?N?H0?J-@1Bp^`a{Y-JLL ?2Q?Ks?BQO?BO@?1X 8 ?(`?Ly?12[9$?(3?XB?bX ?@NEVX8\`?UѸ?WKjH`7E0?Rm`?Z? lQu0?0?9W `?L ?Vd?]-?f^?eX?!>Y F?0?1MV ?( >?2Ĕ`H 3D?Z ?a~?-T[.]vXX_ULHҚ P DY@?C0~> @@?E2N ?4#KKy:"#7٠AtG@L?%XQ?Wd`?:CA%?A(`?Q?o RM`XnO 3t?Hg`?WG ?=Z  ?G?$P%`RYPT+`>膒I1^+9 ?Rǥ ?S9?RP ?TE?V ?O|,t F'`?,x?V€?S@E W@?1 ?V?K @?@"GE}!9`07IB1? @?Iv?;?9 ?J}Y@?Fd@2P\ >&:?+M >0fBrHB Ds`?i?9tx?+@ ? ?71`>??;7`?93m`=`?:`?L'?TH`4=@beNM?U ?P?U>`?N@?5@?P`?^,`?G= ?%k?> ?d?.?+R?;?Q?/`PY`@&LQ UD IJ K@YS`T_`?<›`?F|-M"@Zu`V(S8vGpF?A??vX8T?FL?B%)-?<{{?,5?`?E@?S@?9MU^N7 ?GO?: E@I]@>؆,>+ U``T]E:`` ?GRƀ?\ ?JI@?! ?Ip+M`7{> R Xݣ?G ?YH@>fˠ?)?`.`?d0?V,w%E2N >`?@@$7T KE;?CKx?@]7 O@?- / 7T[VJo??[@?>ʍ ?`?7`?Gb?D`)-XS+`M5?.G?B ?C?5`? ?>E.>6}`?0fˠ5 Hq?#?3D`? ?9>7 Pl?( ?A"< -2 V9?L?V>܀?P ?T.U@?[ ?JLL ?Ks?aJ`?Z?@?1`?"G?5u`*,@:Q3SsS _h U0`P{`TxB< W٪YKAN>y`;5JI*@0\ ?1W%?4L?D`?H? S, q?PK4@?`W?IÀZS@?Np?H9<`?9?CI ;?"*`??#2> @@?3?P[?O?NI3z76 ?At6T&?1@V1_@] kJ(?K?` @?R@?F ?]S?X?-3l4-`RIVLa ?U?Z &5p؀082@?[[@?a`?GӉFހ@+?B?>D= `A?J69`?J5Q8``J؀?C}?-V׈[,?1?YV??ΆEu`A??-?Fa2&\JWKjU;:N?;?RM`?Oُ`)"I`Kބ?7#9\2?PQ?&9FĆ@>H }?J?@?G_V|-S^z`?@Z@?@B?2`?T3?\/t?.ť?S?=E?@ݾ?aQ?`T ?%.7e? : !€!9`,`BC:MQ@Z#ԀK>y{Oq`>?@3J?Pߕ?Pם?+u3ޟ?2;<`?RoZ@?Y; ?X<?E֠#ٸ@?o΀?La?,ǃ ?2@?PI@?B57@ ? @?BE ?@?"?N?X|@?S0_pWP?0 ?PC;?M?C~@?Fހ?Fϐ >@5#`7}Q%{Bʶ? ]w AF?$1EF`?H*?[?H?@u?Eu@2%)D`?%?=?'?9?O@?Mj?3k`?Fx ?S`?"= +4@?S昀?W?SI?dSm?c?A ?,jLP<`?Qr ?P#?7L@[TW4@Ds@?!MV ?P?[{̀?]@?]`?Tx1TTY *;! ?Q``T?DIO?=%u`?C)"?O9 ?H_T?N?5ndO&QT?Jf ?Eˠ`C?4_Oc&MD@P:' `A6MzT`H -`1W%?;\@?W@`l@SX?J?SW?@Q2*`QMQ ?74@?T9^?4m:,@a2?[ ?Qka`?AX ?=K7e+`SӖ?v; ?SC?Xo?>? ?A?J?Ca@"rP% Mʀ>#`?=$>28Ȁ4[ HKQ~?.w*?C?5@X;l&ހcT6R{`)`6/?9O?6R{`>n?M@?U_ ?I)?Gp?AE1 ?-?`s]`?e[`?S$A@4> @@@͠5=W?D `*b^UA?6_?QjĀ?e`?h?XaȠ?G=? WBZF*%l@?25 J`I SHr?L`?V=?:N ?3?S(?[hˀ?`2?^E?M@?/1 ?5?#WDN8?G?G;yp' E?Yu?_e ?OfJ ?Gޒ@?; @I-Zi`P?B%)?O?^?MdZK@WȀ?<9C`?DB??@Ǭ?F@?Lo8@?Eu@C5eA$ހ?O?QL@?A@?M?0} [~@X?r?R ?_7#㇠Q F?I>?K?S:M?;͠OA@?]`?D@?@P?F: J 87DPY`H.K4c@1`?'`$ݱ K>k@.ťPAC@?X ʀ?[Pg6W?;H`?F?Rg`?a%?^۸ ?H ?=נ?@ ?AX_?FN͠?,9C`GCu*?I1?[˂?>TàB?Gn*;`M ?? BRP28| ?0i??Yf?` `?E~=b %?`U@i?$s`?0S,"EMb U0`5"] ?\g ?aN?A@R?<Ѡ?G?R)t`?U?V?_[?V4!`1?FY?NMx?$ER(`Rտ`?B]`?W?@X8i2?!ƀ@B &f@?B0S,?0'@4`?(8 ?VC'@?Q֮ ?P`?]?\?Vj?HdD,@4`?WZ@?RM@Bd:]w ?;@S,N!S?Uh`?bT94`\`?! ?BWpJ_5L?ZҠ?_z,"?K?>`? @@?9nI?ND?J\=@> @@T?W\`Y@ ?3>?/lk?=t?I`?6?A?Ks?!`?G?`~@?SP @U/@?7T`?P8 ?:o?D׏`?Zf`?[?P{`?BZ`?7v@?<?@U?ӠLl`^9٠[k`>YAV @?R=?YX?21lL?雠?:NB_E+p' #ٸ@?!?'9L8 V#?R`?GRƀ?Gz?V?K`B$@[nP@ZX`=?0?$g?5_?1y7/6IPc'[\?Y?T<- Z?FT@8U`S3`U{Y5P`$BX"O@?O[@?Xo ?(4t;@?2r?0.b?&M?8?97(@?J؀?M@? ? @@B[N_`6X?"i`4$GZ JY1a}Q"?FM?Q!?G!@?R ?T2?A4?J?Zf ?S?E=`?R@?Q @\+`Qa`?BG?@l@P\S`$@?K?P?7,:}Y@9?%摠O']SG [`6y ?JD?\`?:`3?BT?4Q@NbQ@L??(<?B?8 ;B` d?M>v@?J}Y@?7?Jդ ?`3?U 93P`@Zf=g1`Xk`G?A?*`LMYm `lP@T*@?3)U`1Ѡ?-s1 RL?<@2`TxCX"`Eۈ@= @?Nn?U@?#h?y?W4?[^ ?Co8@>@QQ1R?IF`?;cHZM]n`UkOxQ`R Hk`?:?T?@9l@2iՠ> @@C̀[h.I|?B"@$Q ?`?US?=-`P@R 5zX`?QX 7}+{ ?M?Y9@?/9 TP`@S nIb!`?,jP?'=T@^_`?%g ?RE?1<+ ?D{?Zo? ?B @?< ?Xr?R?6G@?b` H`B$@;ٝ?Ae`?D 5ZB9QE}?:?>+"?L?)h5`?'?:1!0?DD?88 1€@C`Z}Y@QU`B2< ?V?_Ix?28?9O?0) cЀSN@H@VձZ`C%t?'`?>k@?W?a?RcDQF?" ?a`?6&U?R?>j?5w`?a8`?\IL6ϠPe4(3KT OW7cU R?L- ?Ph?Nhr?X@?\ ?X@?=K`G Wa `T ?Y ?b5?o N(`?DW@?KP K8`? +?T3=?L4?# !&??U?XU`?X ?E@?P]?U `?UsL`?X^?U _ _qS]~:?Cj ?a}?TH>P`@5@DV:?F!n@?V,w?N?eGKP SWZ@\N[UɠX%@$g?SUG?<}AxA?G`?]+?E`>s?S,3@?[s8?R5?NX?L[?L>+ ?R\@?F 4@EW]ebV@?"@>֯9?U*?c?CKL@??G@/.D@+ ? /? `+0b/ ?z1>W` @YV Qu>YK8I?Y0i?I$VjC3`?B`?$c@?.Fx a @Gl?X- ?Y`?[ ?b\ ?a ?Z?O?H6 ?Q?@G?Lw?]s ?`Qp /lk?A\ `?FA>?D??I.?# ".!p?@?@r?`3c?0 `$Q`< ?KÊ@?I?C@?DL >W?#`?X`?] ?H?6f@?Tv ?`P ?T`?3P`@?:s?" XcdY(?:8@?YK?<- ^keq'Xev4B c7vV`8o >+ 3ȍ@I#`QX/\[߾T?7 ?[?AHnA"?S}?c1?Kr?1K?V?O{"C9=?HN)?ER0@?&?/1 +`V+=```Uw 3%B%)??U?ZFǀ?7Leh?!MV ?O~Р?Xy`?M%?P?UY?@`<P܄WD@We+`Q/JLF\?di1\ MZ`P` QRA`?Hf`? [`T`*?P(@?U?_G?K2L%?o ?TdJ ?I],?Aa`?9h5`?2?Kɫ?M?R@?dZ,@?a?0n' ?89?Sr?0#?E.? l?> >7 ?(d?TS`?X`?8`H$x@QwNY*l.@?$Kc R_?5'D?-VB@L_G@?: ? Q?AMV ?Y`?0wJ2?J?Xezj:n ?N,\`?T.@SG-HV`J~@^\NEv; ?0w07^V`I@3?C/D F5 "ڧ?R'?U ր?9֓".$h@`'3)"??``'D?E``?OU?KT 5`N几@K R_i@R`?P ?] ??ZQ3?I?? = SG-3?AeBhNg?Nz?V7`==<@?C#? '@?6 [?U(.GZf@-?87M. NZ? ?2v1hP8K=nIOJ 69`?A@4~<&DeAO?=?D ?1W%?++{ ?J&H`?^?`C`?U?J7s`??e ?.F?09?A?RJ`?B&c\&ހd @A`?7lBCF=?S?2>&ToRV6L|TO4MI+4@?3F???K͠?J~?O?_7?ZUL Ew`PBT^5Sj@?Z/??M ?ATIZ 0?W?a%-?Qƽ 8`7 ?@"?:,@?;.?T0, ?V ?IHS@?/ "i`H0J ?F ?` ?NЮM')QUN?G?X ?]8T?>z%XQAŃ be_ ;7`?Dި7  ? ?P_@Qd雠?Os`?"iՠS0+?Yz?K % Om?`?G R0 `?@4+f?L4?9O7qn 3lDiQ >+ ?,RH픀Gՠi`?E"] ?Wiv ?Y7`?E`EA@QZ6`R?80/@F`+Ê@LA`E;`@P G;y4~ ?A?Px?T?Q?H?>t ( Ba@ L?OL ?^Q&@?T^ŀPc[Xڀ(w`?)#`E@J`QO?SI?WP"8ȀP-?&U?B~`?" ?R3IO @@ ?8 ?D`?B'?8\?C ?TlB?JDAFs?2p?! ?E ?DP@?;`?N  @O@?HF@?K>dV`_^TkDP@?P ?T?Z2?GI?-|?2E3PYN`FT@8@PoWP @ ?M?P3?K0b?]}?\_ "*`E]9?o +Y9$"0!>?@?*& ?Fr]?IiJ\t@*@?V@??UN̠@9l@?A<+ >a2Yy``_oMo`7 x?CkZ?"տ`L`G}6@?ʀ?N@?LI3XEƯ ?TD?c>@?]? DuRY TH`A?3z?G >LHn MX7z NT?52 ?Q`?P4?`C @DC @?g?D ?KfW?9?:ڋ?Fn?V*?T>c I?UQ`?bv?U?D= `'`V VAP`/@?0P !7J1 ?E`J?C ?VN?T%?W;y?_`?Xdـ@4Td@>!S' 2QO>۸ K @R] @an`Sƶ@5'n?1?JGd`?G0p?I,?S?H@@Xi^]iUٱ`2ga?9HS@?H٠?M ?6 ?D ?dh?j?a?X@?5B?@Pi?8A?7"@.7 ?Y?MT?7P?(?L6@?5bNvJ@?%? A= ">L"}tPOW8,>+ ?Kc ?C. @?%'D2;<`B` c ?۠? ?M? ?QpI 0AQA,C?T~?Z`?<}C;`A`CQJ`?退?QF?V?,y/6?9b`1e`RdPK,j?Cm`?Rs?=\ /, ?;?W< ?R`M^X`UH? ?@4?>7e?J@?E#`?K?Q=e ?P@?Y٣U|?@`?K:2@?#W?1R? &Q1!SO&@۠?Ag>Ψ7 G?@8 ?&9P_ E?SY?Z>?=]`?:_?V?e#`?H^@[5JD(3Fc@R R0D 6ꊀ&C@?CX?PǬ?"-EH1?FC@?X_T?`G?^?Gg@E@RR2V6?C#?II ?V6`?a;?SH?#`?H`?O*@?I} @JU`?`?Mנ?/ ?5`?3m΀KsF@?/@܄T[${?;`6 [v?H` ?7 G ?8M@?3@?O6v?V?B >KK`0'@?B{$~T.@AsZ?;ɀ>O@S ?$v?\?Xv`\ FĀ>??@>??N?Nm@?Bg?Wƨ?X@2dE ?R=CMPH#`?y`?O?Yx`?\څ?Vr@?Y"?R` Bc@r?F%+LU]9>a@?0.O@Eۈ@-?8 ?8Zm ?LP ?Pߕ?V ?XY ?G@>雠>膒.GX ?(z@?]K?U`Ryd ``wYSHdFWc 7i ?=f?I?HG?QMV ?;!ND>?DŠ)Jy?50?C9@?Lt@?Vq#(dL<@?>?T]?NWG?Dlߠ?4Q0DuPhT !€?K CzcK*X뽠8J'@?E)?cb ?c?M i :1Q9R"?89?7 %! ?zj?P@?d.@?YP`0.b?Z ?1tZrT#? ?Y\ ?]@?6:;?8i?WG ?Wm#NMxbX\ K ?@!&[}`^`AQ0 `S]@PLL_G@\@VT@?@d?T ?B@?3?J|?<6ϠM&K?I>?W?ACFB@T`S?H )(U`?Q ?4iC?IҀ?Y v?F ?1`?%_ ?QO?=?@X? ?>K܀O:$Xi@Xn 5@?&P-ZLͤE?`D?@`?S?<>R?F `?T`?Po?6 ?Gz?Xn?M?A?TX?F6P?.K?,t P7@?KZ`?KJ?:?  ;wH`?<I?RT@I]@Z4TY?N?->@A ?04@?Z5?a?X ??x?=i@?A`E2 O51I?N  ?`?D5X>826T?]g`?P @@SdXZm Ez R8_qX6G@?P@?CL`Wu_??Q?Wƨ%S\4MӠ?8p`?I^`?9@?,]?K?E}@@MJ"*`R`Q?AxA?W-`?I`F9]p\T?MU?7'??#$:2+?>T?`-?age ?U颀?Q?8S2HY3 8\`?E?z??`?Eu?X ?K@J1QS @ZF*a G Oe R=&)`?1ە?CF ?=>@?H`?6R`3?C ?L@=-) ?]<`?b?O?\?C}?O ?N``?*"M?L6?C,QUNTw3 @+M/ Z Pv7X`4`?. >Zk@ZS@9l@5 P\ W#@!&>y`Gx@B)E`?GJ1?c^?`+fW?T ?R*`?7 ?M i ?P6`?$`31H"`\w0aaS;`,›`@O@G???P ?7T`O]? W?C@ڀ >H`?7=?Xxx`?[/?9/ G ?:`?&\JD@?8W@?=|"n`Z/?5z@Z`Q{a@\R?LI@?SEVDQP0?AC?J?R?8S?.7 ?/J?`?c ?Wc SeQ\ `Mr0$6UReG@a@2?KΓ?X?4@I Z@ajĀYSb? Q?P#?MV G?#. @"\ P@?@/E.M)`? ?^c ?_?Qg?H@?Kd?B?`>` 9)@?1 )7(@W}Q`(3FZDW @J@IP[7![s>c@?Fc@7sE>`?0?MnI?9/L4EN`?OO?RO ?9E`?=? L?Xg?]`?7^?M?`: ?@OD ;??S >A5 P H0RZ`_|W2G`9< P(@J5bAHnVW@8.G? \ D``8aȠF?Cfr?[?P]`Jb^RĠ4``ĶQ?;?JQ?E`?G?Q1!?5NE,,?9E`?7< ?B ?VY?FsNKE@?Nt ?J?Ro@Wc?7i ?DDCz( 0d?CD`?K G[jWU@HJ|?;Ҁ?WQD`#@D?F`?bO@?^?K?(n +Ds@Sd 1X ?WSc`?5)[N@Sۏ M? [VI֓K4@J?)h5`?@E@?CQ ??? C;Ga}74@5A.Q6U`*@?J}Y@? uH;T ?B_?I/.KH`?C(@?);#>(?*@? zjK>a2?`Ϥ?Z9J@?;Ҁ?"`?,/t?[@A`H*O?>W?Y`V8*1Q?F'*NB@]O@bUkDz\OB F?GF/Kɫ6# D~@_ ?P ?Y ?C`?c@?0p?<":ǀ?$#K?6`?@?W ?]m?HJ|?/`?A`?(n ?* ?Qj'?DS H3/`; ?M?9$\cG< ?;m@*N- ? FhTK`FMI `?U?'`??Ķ+@6^?P: ?V$?C?Qa?])`?S ?FL?N?V?HU`P9l@O?At/``@XrEx4 Ow O< + HdW)H` ?!+ C V.SUEPR$;Ҁ?A ? 9H }D?J-?Z?P1s?2"?5k?J,@?Rm`?Jր?+=` *z`B}tVX픀+?7 Vr Ro@?Cq ?.SD`PWw3pB`K"`n@e4 ]?' @?Q?(3@?C@?I^%k?C ?/ c@?G@?R- ?%"] SX`@Vڀ?9?(a2?H T@Pڭ+dKVa2?!y?\%?Y ?L&ހ?I ?CF7P&j`G C:MC ?5?SG-?F&U?( ?32%@>۸ ? Z1J`S;hˀ?R@@?QI`Ef^\T"0k@DԀK!m`;WƨL^ @?B?P4`?K*A@?@uP`@:s?4`?U?WB?S?P!?'FR`N+"B ?9?D$O+m[;? @K`6P7.?,x6` ?MUd@?B?-S`rSCM@RtB.,?P0?S?5@?+) ?Uz?[ٝ?G B`($x@/S 8D -&?֯AOQ:@Y LW?Sb ?VKk?`\Gz 93`RXB@K]@5@R/`] K?G?XS ?]r`?Z?R8?9֓0%`?.,>Q@E@?Rx`?Vp@?"*`?""\ ?AQ?Jb?= ?"?(w`T|3VR{`4`` X=@>?=5*69`I10n' ?7K@'^R6UbOLGJ1?~8FWc J69`1?"d?(?+: SB@@>T?M @?U[ ?H`"B(`?;^OU>_T?JB|4[Ev ??g?Ph?BK-`#2M`HC ?$|?>?=. ?Ej?+DEXQJ;`Z+0S@?!\ `?%.B5"`?Gu? >dD瀀? ?Fv @ ?S݀?Z ?CL`2= ?Tʯ ?I-EEEF??7 l?\ ?ەJj@SЅ8픀?H ?SЅ?D F `^۠b)Z DS 7qnSi]? HS?DDh?;L=^ Mq@RE ?B2?P?C?U,›`?6?;?Cή?Hv?Bp?QT`?X/?P ?S?W~-}^YvP~@P+OH`QpI P-E3R?r;^HaȠ5 ?P){ ?I} JQ?@ ?Y@?J`?2?I?U$瀀?D@?G=?/ ?:3ŀ?= ?4?@?U5_?.O@C`1MΆ1NQ a YnW???XA?Q ?9@M?Y ?Poa (| 3fr?8Қ ?GPR49^\=VJ?\ `?8$f@75I&X5T$T ?D.U@?V)>9٠]ai Vu?[@?012[cXg-`D%?Kɀ+EsL`!M?Cb?O1 ?4BJWG٪?`?@>4[?>Y?@?5?) 2n` ҵ@?Gޒ@?Em* @1r <ť?4*0K 8N)? 69`O;^Y"`#)"? P Q{ROҠ2QO.7e?V?B'?4H`??ЀTT ܄]w J?4Q@?aN?WA ?!\ `?^``?SO&@@l@Kx=Q?D?T@"\ 4%?@"T>F`b;P$Oq`MĠL ?- ?Py@?P?2` 4vr-N1 ?C );PE?KG?P @@9 `?LLuYOFJ]H.GP[@Uj`BC?4K`r N,\`?9cMYS ^t \`?$? րJQ|`? ^f?:@A᷀?@(A@?DQ@?><?R?K%`?BV@R RO ^Vr?A?7PKL@?7`C?a;@?VR , ?.|?W, ?KG@ZuSB@?C<?PU8a@-X?(.GJAB?+?D6?%摠?B`?*lQ]Jz`%y`@$<)O( ?8Қ ? 7XZm WO?D?T? ?1j?>Y?Qg?^f@?6?9txE.`Q`OΠMZVF`R@Y@Dz\A#H*MT7ROWY_AŃ ?F} ?ClH6 M+ PhcU!#  +!#<NQ@w`?7 ?0v; @@)(q ?H?&5 Q> :K_Ķay ?F?`?/lkRQOG6 @@Nm@OGD`@s ?)H(&\@C=@?\?`#Y?#zSfrEXQ?D%?C;U,&H?G}<daj( ?#`?U?]?)J 1/R\ 8?23NeC?Sq@?6KZ(@P>r9M;C y?4?>WS0~W>@#?ehX`V@?B.?7X 9/?I7(@?PJ?%@?B ? ?X/?9@2"?1Ń ?Eb?@`?;Z`?)3`7T`P oJD?*]w ? '@KH`+@?L@?=B$"60%`=?"^@?6-\ ?C9?T`?PwY?No@?I?Cm΀?H/G*Ne6`X?D>F`?T6M?P.b$-`R& DDh=iaTz\U `KH`!W%?Hb? @UzRhQ db?D?b?0LW@B/`?-n9M;Gp4@4>۠? ?1`3ȍ@N;+??_@?c ?@T ;&`?>rB@?VD ?R?GK@?W ?a@?D,@WK@O7?H4i`?C;0 ?E @?Z; ?S`?BWpE9?)Z?JୀI3`@?X?>9٠\%WEj:ǀ?+r% րSdB[?B?!C$;wBPf.㇠?S<?O?P.?`F?[K@?GX ?N?H\?#?U.?e)?Tg[J9%@?Z?[ >d7`?G@?S̀?H }+5@?GD@?`?_?QW%?Mu?H>80P7l?M?K`:-. ??G@? !Q,: ThP QCٸ@?I?YO?, P[@>'D?K`? 9Ae`L E/ Qg6*Nc ?= ?P{`?L C2H@?69`?B?ED ?Ey`?S1?`0@?]q@?MO@?J?U``?QW%?%@?)T?SӖ?S`?Dq`>ʍ ?`?#|[p S?U`?M̶I0!?HD ?W#?_/?5I]6Si?Az?H?, -EsL`7#?Hd<?T@?P?R`?Y/̠?VG ?Vi?W2@?= ; ?`?GrT`/1 ?Y?71``WEb?\)R`?SY?;?Y3?f€?cpB`?Z ?b8?e s?QY1\ ``?00?'Q?' E@J(@?Tw ?`=?:V*@; OL?,*@?QT%'DPW@\bX,E`?P?<@?6Wc ?6ʨ`#Ii`1\ `=n?=Z ?:Bʀs?M ?QM ?Q?N ?+ ?#|?Hy`?W@a?C,@?(| ?^i?iҀ?Zդ Rտ`a%J(?U.`?\3$Z؀?0?\w0?#`p@?F9?RV?P ?L`?Kc ?KR?#<`R"S?y`?VY?\`?AySήWKn@K @PaKRCbBd C<?P>@N : 1I<:@28Ȁ8d<6f@Oq`42I3WHZ^ Q(`-cH>mZ?D*?R ?J;! ?Gn?A4L?&Z?_@?by?Qˤ? A_ ?4{?]3l?X???0R )3`JୀEz@K[Nk@JlE ?!?<1@?9@?Fx ?> ?B.?`@J@.c 8 4V?Oab`?AMQl$?TǞ`?=Ӡ d)*@S:M#@W@dJ@J?X?Mebm`l T?U(~?_ ?I8b MHH ?D @?>w*=נ#U?RZ`?`JH?PS,M[U3?Q'?[`?RQ\@?;?N6+P[`D@@$?܄1`??0 E$W-_G0_p7Q?.?Hx?=@>n:`GO#m`?Q`?Y?EڀB L@@7"@B|5 ?1-tk E?69`?Cޟ7G4@?&U?B@$?<?R*@?3AC?%g ?O?YE`?]?JCCLaO%K8I?]`?gn`?_V?U7?D`0?%YZ1QQ?%RghZalL?;?C`^@c#7@$3ޟ?E' ?,vRH2 A?J?&U6^?B5?RYG>dZ)Y Y?;w?f4?k)@?V~?%'D?UhC?TD.@G|x?M ?S #7٠U1 A ?PL?2`[f`Y`V "@?GL:%p؀?G@a?(<H\ >?R^@?TE?I`?',@32@-)k ?T`?Z?Df-3 Ll`U@Gg@?>@?R@?TOq`6e >;Ҁ?SF E,_(?#?BSTd@G?Hi$@?3WA1"?F*?R#?`UzPy?La@?`N?Qε?"= ?E ?FGr1r I@?R`?V@?6MO,@=|?Z?X^@P`C;UF@?T`?Ar UGNs|@?1?4x::N FF[No@I?2 A?Gc8 V`c `|NU+ ?S`@?R Vd @?]!?S$?5u@`? 7(@?@){ ?A>>KXڀXk`^iE?Pt?T6?D4@DjP`@?EE;Y\4WVOr`U*UYI P܄r?K=?M"A?,y?!2?Tx?^| ?N6\L@gaZ @4^ٸ@?$ݠD`Y߀S)"D+`NIʠD?Mq@?N S^)7v@>]w :?>?6R{`?3?Dn?H?JAB?FR`?8p?R|?XK3åJQ?JQ3?>WQdG<5D@{`?G<@?c?_UEۈ@bYZ@= ?lkEI91?; ?7@3HS?退?,?Ά ?T=`?^?<a@:??r? ?IO?`f?\ p@?Qە?X|@?E RlIQESZj bX`Jf P+RZ`XFl;/`BĠ^gk_KJnI?/@F`]5e6N+"' @c GG QyM 8DZ`E)QTK&S;`RS`? ?[HL?c +?d@?aLj?N,\`?H?Y ?S>@?*@?`P`@D~JOH;N@G`"E5_ :1Q?PP ?ZrO> U˗@W`YJP?,6A?3/VހFL?3WAUBf'?U`?Th@FA6?DTY Ec[@4`B@3fr??@/^V?*69`?Q ?0fCX?B ?UL@*,@Ks"ʀ: JSC@܄?,›`?UǠ?I5`HdXͲ`Oq?(`?7QAa`6?M?QP7]%Y`?#b@?N??:?Ut@?]?VX?F*8 0#?X ?b+?Ul@?FV) ?4``*gFۗd 9Y!aNE?:69`Fϐ ]b SXL?E J`?DvR cD@F?C]`9/`?9%@LXLl`P M @1MV >HEv JCXY@RȠ?5~?7-`=ʀ9J ?D@?W?`a ?_?PO?G5X ?Th ?Vϐ ?Ts ?Pf?C@Oe J69`3m΀GZ"Is>?*?,- Ag?)`?K:2@E!# Y'7 (?T`?_W@?a?T`܄4@K7X2 ?X?T?O ?]@?OLA{?B\X`?W6! PGU:@K @?!S?UFsZ= ??pYb`R\@?!p*'@C@@$f@?F*?@@I3Iio`?1<+ ?Jb^?Ph?C1`.ʍ ?^f?Sb ?S?@I:D?N?@?UR@$f@U& ?X?SN@2\ RM̶?@?W`?<@GR-?H?Td`?Tf`?1/56 ?O ?YrP1sl@?Eۈ@?W?_@?  Wm#?Ek?`???*3?' ?TR ?HP>t? d?C?Y?VJ?D^(!= ?)2@?K~@?O3?A N1D Z Pě $B?40 ?0@;eh3?6 ?9Ft]DT,@? ?"ڧX?J?S.?#UG0@?B < WZ??c6?i?h @?]'sX*[}`Xʠ#`T^+"?Tݠ?QC?/ 5 ?-?R:?O@#Y`ˀW?3(? TLPk@8\? ?SY?Pf,` ?#m΀?P=?Kn@?O Q?Jj@?0?M ?W ?C?EG&?S+`?6*?@|@?_p?N۸ Km@??P-)0@6`?Sb?Y`?O?E摠?HH ?V?b?e@?^?KE@?P`?\ ?Y|q@?I?+?P[`UhFR =נBv@~@GT`WT`X@?7?$B79TS!*E.?4`%?AE?Y/̠?Ez6 [?8?8`N>e?W@?\> ?Q?I#`=נ`G`\ XR ??E2G$- C$HػCEV4m?M?7nO:$]?KD5S, ?Q?] `?^I-?P&j`?'???@`?1?< *"N-Q!V?5N?aӀ?fZ`?[?Q`?=?5?AΨ7 ?H\`?Q%?Pߕ?1}P9l@H@?4@?1A\ `YW@?>j?L@4@ހ? 3۠?W+?ek@?V@?I?9Py@O9`/S @qG?H)`?Jx?X7z ?XmCӖR?Ho ?Py@L0ZQ%{K % @l@?F} ?X?O?0_p4[?ە?Q?d?bsV?RU?TH?W3?@?0?Ɣ@& $~+ @>TD;)@Kk?`^M^@_ ?C)"?C1tP&j`@zj?$>r??ɞ`?V?5SS@ ?V;ҀQ%? I@?$x@J;! !X `Y$`^R` YD`W`?JQB$@U 8b>B E6 ?FH?[M Wc ` !`T~ EJxq?CF ?\ঠ?S~ ?DǞ`?9r?4lߠ?F+=?HIB ?M @?R@?/$C> @1?7 l?92@?A`?3r@A,: ?$f@?Q!0?*b^> @?B|?6@?H(&?G&ǸS*q>E.?Z/=I`?R`?a ?I3z?(7@T (`?@C@?`_`?Mz?-2^K[PECXJ.>۠?+@zj??&\JR$X9$?Dt;@@\FC?V=?V?Jj@?H\PRտ`V 6?YJ ?Xtʠ?@J@?F?Dp`?rOh E?2lI?P ?M ? I O@} DFX{ ZsG!@?'`C?6^1OQ K{0?(?JC?Qt@?Q@u6!ZF?Oq`?b@?C \`SD#KP0)@?0ҵ@HB`R{QV@N?I`?]5?'MK`?5i|8e@{`?L[`?a ?Hׁ^]ieA@aSٸ@?4`?C4¶CήDxA?!?f H)(q 1'Gfe@3?78?;k?`B Yd N,:I9 ?&)`?M9K?%`?J`?\ ?9֓?NI8IOQq`9J ? ?Q3?Le@:(?7`?N@?GE7A W E]9?0.bB`D 9@@TA ?4oS3fr%@?P`[.RQ5_?'v@?< ?LG?D `1M?T?o ?i?J2A:@] `B RRTJh?:b^?(31- ?2]w "-^6V?d?M ?La@?'I3Ts Jxq;@GK@R(:`OZB!{6 .mZ2r? d i`?M@?T(Р?@qCwL@?Fa@?a/?>\/a]=p@*u`?%w`? ?)O!e`,?14?54f@QjM`P XǐSF 3a@?U`LuY`ڠSm΀?0?)?Hn?,y?.?T! ?^O@?K8 ?C ?F=Q})`O{": ?TE?Vw5@H@QacQB?:s1֮ 6&U?37@G;`I?Jd?> ?O\z?4%?GȀ?M7`S㇠BT?Ru{?ab/?W1 ?T&?U4?;G?V?lE8@?c? \ T3be`Ufl ?>m@?082@?*S;#76 ?%w`N7NQ&@UR0@Gՠ?,}`?,:@?+??A`?0@K@A44v@FD7;P ?>@?TL`?7 @ER0@? ?M3l?6G@?m΀?=r`?G ?Fr@%_ WV9?=3l?&?h@?GPR?S`?@$'?-3 ?<6@?2?Fa@?C|+M 0'@?/= ?;?4@@Dna, d.U@S昀?5B?@?.#SeJ?Z"?e,?]s ?U)?Ly?:i`?"rF9V2Q2D 9@H6 [* fN Xe?UmǠ?X3̀7?Sc?_H?S@?>\/?E{ ?D! 7J1GEy`?1?%ڀHҚ ?ΆDqU=W?*`?\?M%?=8T?TQH@?Sq|@؆QPD|?B ?4v?.t?Y8 ?]?N@?F%?Jb^?X<?`X?Q?D\?H9r?4?X?CO&@AdIs Nz?H?c@?U,ɀ?E.?S\?64 ?ZG -$@m@?7F0)>Š?O?G@bb`;# >`P>@?Hߔ?_j?g ?UR3F-@?,m?N ?92@?+"`? b QF`Y6gQb?`Q@I^?2ϑ'co8414H?"~`?P`?US`?/oP?@J@5# CFAE(s,`?/H@?Kj?,ZPpHP=G|c`\< >[?^C ?a} ?<"?1 ?Qd6+ M ?_?lE@?Tڣ@*[?01u9K(@WD@O ?`YbW`$uр?>0>:ZנP`I·`jak$RB`4L @T25> ?I/?,Gv??OF-?Xp?Cz ?"?Lf@?T?]D`?d1@?a?K2`@I> ?F?"~`@<@C;?3)?P[?;C`?78?TN@?)@ U@1y@?M| ?"  ?P?L_`B]`E`?Kߔ?Y:P?O?;.K:A GWH'@Q @GTޠSH?l!?O.t ?U:?Z6`?Xk?MRJyd. R?WЎ?X>ܠ?3 >i?!(?2ul@?$7F?[Y?4C 6*MQ! ?%j@?Za?H1~08?G&?V`?Tn?[]?b?S4>Y?A|@?G +ߔ?4y ?Q`?u *x`??"?2ϑ?9{?5pC`>?Q4?l!?U?eK?k]@?RG*@BEB| ;h;R6L \Z5(?H?Ki?L)?I`$uрE*2ҀS_b" T1k9!h@DXX ?5=@?DT_@azV\?Y?@ `L`Y@X?(?(„?5 ?4<A2]WUf?;`.+3 ]^0H?9?"  ?Q@<@b% A?Y?@?Kp>y`?Hy`?Ri?/[։0?K ?T?M& ?0`P}T` `ZlT@BxEW-`\ޗ]aH„GKy?3`?Q} ?P ?R?R= ?I@ 0`XrK@@?E.ـ?@k$1F0S`E@TOOQF-@?P?R,>\/ L?IG\?,G>?Y8NSW0)?Mo?Cb!.@9E@9?L>?^k?N`?6ޗ ?-Q@Ar`.1?48$ K`](@[,z Qt ?=?Ug`??u`?9@?S`?Rz*?9G\ATS @Oi ?9h? u ?9·?A@IU?֮?Gj?'co,UO? MR?<+} ?:TC aFZ25(?/"PI \P `Ai]@="22~`'vi@F˜[Uj'„< n]ЍdS2J ?0#?:`X% eFz@?P7@?C۠?5KQ?Cz]`?02 ?@7Y?I `?&`>?&0>xSQ&`6<A`Y@W; ?5`?G#@?7/>?LG?@4?) ?Hr?F?B ?Z6r`M.Wvi@Ko@4mOoS2`KRGR>?F%`?9v`;N~@?"<_`ݚ ?J ?@O7`G{ ?%=@.nN@P2 YԂ Vli?G?0e L N0ZOY9KS}`\7YUɀ6^}?@+D LBD k@C<@@?;m(G* ZRNH ,Qq-v`>wf@uрI?Q:?WR?0O:U5@,ݠ?3 >`?(;`G{'7?JLM?H?!D?<@?2~`?C )7A :D1J!?@A:~ O?41?P?Qh ?HEz R`d)`*Z?L`?S.`> 9j?3An?"OwD+: ?^`?%u?:h@?G?L%?C;>֮>)?M?I:`)`?^`N1\I0@?O?Cv?4, ?-5,5`WZ`>0?DO/n?3|?I\@A|@Pe6˜2z*PB ?@ ?'#QR8Z@W* ?F@?F?FS@?LU?=>S32\ҺEqE@7vi@?L?\S 8GdTff f?Y9!?[?R6@brI?ȥ8 4DP]N@?$H?B`2@D/=F ?'?V?X!5?<>" 2g0?@?#)Ow>QB"e` O2OwBX ?BX?23`Y=ߠ\@?R@?O.t ?>7@?P&?PR?O]?PU?6r`?*!?:?^`D?I.?R>5=@?`*[= 0BE?tK2`?1o?Q)?TF_?UT ?D`?<@?R_?2@PQ y\au9G ?1T>?2?0EH?Q@?T\+V?K!`?[ΠAi]@[d9`C S@?.HY?J?D k@>O@?:<?E,z@R`_??`E ?Tk$Py`@X?aJ?]k`?7?H\?Y5@?X~@?G#b@cLmYgc Pr?AL?W?Y|`?X%?WD@?PBnu?O ?DlT`>)`?A8.QWB9M"O,Zg@Cn?M y?UKQ?L/w?`?)E?*+?:9S?C5@FR  ?5,D ; Fa +w3% ,9PQ@P O?I?B]@d?[V?U ?DN?' = ?A۠[!`$C ?4 q>D @?<?,4@6ޗ u`?2D ?&ޗ ?# >`brU\`:??۟?H*?T ?O,?DR<@?R0?0b S:PPxED3 Lwf@U\2R/`?53 ?QQ`?P@.5_P?Dm?O\ J-w@>К?X ?41X?AԠ?2Ow4)?@?B`?> na25f?#?WKpMԀ?P@?BV>?U ?[g@?HZ$`?. "ul@TaoKYMK9{? @?68-n?At@?R ? dH4/?+ ?NC ?T<?Cgc ; ??@?+ ?<J^HY?R |?07Y?$lT`( JSk„??5;@B<}?1 ?;?6l?B`?>+@?!@?7F?H1 ?8y` (sGe@Mk`G?: ?F? ?UM@?D`w4Y@>@ZO ?A@?L]N MLeUM?P` ?YS9 ?S #Ԃ W]#`?E,z@LOl!?6?Ko@?WoK`?Y`?8D<Ơ?D?Mi4s`OۀPWIVD?-:a3?H1?T@?>ܠNEz V])P?< @sD&c<`?6*M?MR?-Q@KQ? IFB`M.V)_;@R??/[?M?a ?aπ?b18?c?TrB;YUS`<}?"f'* `/?4@?B@X e Z1 X~@J?]d?b?:+&Y?)*!KC`@A?F ?IC.`M?B[?Y ?B`Mi:@?M?A ?@@??i@A`Jy`@4c<`c~uр+Z@%`?uрJT ?$<?LS8Z$`A_ ?P?[ ?Q&?#DS A> ?5KQ?B!2L~J`(y`?)4b?Hm?S۠?6K9r?Cl!?R`?"<}JO7? 4bFz@V @S|5v?LZ?Q?9 ?;@)`I`UW-`TڣD ?C'V?@`D@`@PO`?G; ?BC9 `/[?Bm?-| SȥRA<?0!`?Q?5?N@!\ ?CH?6f?:~ ?#F-@&@G? !^?<?E3 ?ND?=:~?% ?8=?2@(vKL@+}@?A^`?DS ?;c?L?MQ?:@?ZW.֮0B?%pE 0?U?T5Kbj'Q|@?Dl`K$,?94?G{?9@ ?;i!ݚ Cڀ?"E?K ?J?<?4b?7`?D ?4<?7B9?=[!`?2`?RM?`?SG\,Z?Ij?X(S?H`,ZO?0S *dH |2?7`@TN@_wY'V`L$_@"  ?>ô`I `#ǠAV`?Ec @8E6@QS(?P@?Uf?S`?Y?^g0`?)N ??9?JUu)G\9=ߠ8׀B3`02 ?NOw?L+?=@??auр? ) ?R ?P )? ?T8@?MݚOyN7?Si€?a6\?[(?Y]?TT?Ii`?(`Q۠[kW G?`#Os?`\`\r@Pޗ 6?9`?RaB`?Vy@?Rv?N`?X"e@?\`?I?ߔ?6S@?% +Z@F-@?#l!?:`?Gj`?>=?+VF@?[;?W '>?VV0@?Q7@E ^ `0;W@M)?E>?BG?GR?J 9*`TTFS@? K?J?Uc ?Rk ?X4/?V/ E3 S5@?En@?T?J#`?Q?Kߔ>)/?1S?L?JB?G ?V?Wd 0B\NPP?00f`N_ձX@WED`?C@-pQPt?(4/?<ݠCCCbIG\Y<S·?A?2% ?BV?K^ @IK`$)`G; P=G@`L@IX@?/5?e?J4 ?\`?V`?'Pt3à?Q^`?c#?POPkK?B`?@ZQЎ Y323`?9.?3L@?L?YE?TO ?J7?Q ?N7/R `DH ?'Pt?UMpY`_/[``D?+?BnN`?G#@?O@?\dk?`F?Ns?.֮?Ht<?D`-5,Bg0>7@?= ?DlT`?8s48;`?P?ib ?e&?243e? >|ED3 A@V˜[Z@ ?U'?RD ?P<@?ZO?Pv6Q J@YNA;Q=w?H(S?JӅ?WD@?YAnF@O 8?]?]D k@O?-?EA?*ޠ94B4 ?=Ԁ?[?`k?G^`=+O@?LZ?@+}@4%)?6c<`?D=` K.+@??aIIn#`1TCH@G( U٥^?Q6\?.US``YڀQ" Kp.HYFY^vS$OM~J@?DC ?F3R=Q? RD K4?Z, ?e?)K` ЀZH?DY@X^ ?G ?$- ?3l!?;?6?T?Q;@Ts`aA@)G\?Sb?N@'^@d_@ZǨM31 ?-v`@?I?5D.Vy@H@7GıC`?-[!`?N0?[kW ?Wy ?=?*a?S?`?PM@>wPm@X8_!h B3`?Kj?3 H?B?Z@?Q`?Q6\?]?GDSHF@?M D`w?:[?17@?O2f0~?^)?Q[ XOw?O`?_f3`?G"E Kh84/?9P?T7?U `?H`?>?B?Nk?Q?A ?W$?Y ?Md?)? 5`IB @@C`;!`?4~O@0$_?J ?QЎ ?):lK sX~[@@" ?HUe3]Z͖IޠKCL@?>|?@<@=dU@TK VsQ+?K/?R+`M& c^ɢG`;( OThEv?Q[!?c{?]`?0S ;w3Bk H@)Ƞ#`Z`bL2?B5_?S?=5,Wn\r@>?`?"ul@?'R@A[!F*M1TlT`c `]WPxRôG; ?6˜?FB`?K?X ?U`?9@?>[T?K@ P?@LJSR@bul@a33v?KEb?OJ@2$Ġ?;@?,Z?4A@?P&?C.`Š?CX?P>@?;m?Lr?R$uр2@?A. *G`<ݠ?I?=>SoI) ?Vf@?^X@S`5:?*d?y`?2`?+ 5p@H8&c<`?U?XNKLIL@AQA"@j@$3e?1y@ sLkDg&=G?*ޠ?017#?Ta?YR?)v`H}?,ݠ?PD4@W`LE*Ic%3 >n+Z@(;`+@?4=G3W?*m?")@0#CO`I@? ?ED3 3@I2@?Ak?a"ʠ?c?X4/??eS@BM@BD ݚ $F_KmT?AE?t?A`?, S`>g?T~@?MCh#` G?73@?M]? Q&J(:lQS$?{ 0?53 ?HT?7q?I@?O? BHYQ[!?iК?B0?BM@P\8 J#`5Y!OE ?"Ow>)Ar`?@|$?Q5-?Vyŀ?YX?Qѽ?HI`?3 )@?C ?Pdl ?`?=p?P 58VR`5# ? ?1TX@`WVBM>?0ة?F B D?I,?O)`B`?G?A^`+( 5`?K]?H(S@4`9?J?S*`_"PS`?I??? ?@wf`?Vdl[#Nm@?43e?@Qq-Q8?!`?`@?SI >D B=@D ։0?P ?OV?HG* ?Ts`?,G`1cj IG?;']Y.VI"`? s1Y?J_ ?X#?_"?X?SC?G\T1@@>w?.+@@C6 ?4Ǡ?N:P@^?Ds`?uр1d ?%p#)!b?`?M ?[0 ?_,`?Wl >a_H@T`?/[5c P?&?CPxYv0?D ? ~@B`FD, 7?G?Y ?Sf3?8C$$C ?OF`?Yo>D Sv΀D3e3ul@?D%@$U!̀Cj A7@Y`SC>C 0a?R?YW"IH`3Y'Rla-w`Y 7 J@S@O`E5`?I @?B .Š?<?O@?F>=GE@?HT?1?:d?NOw#bHW ?$YZ?@?4@-ÁKp?7?_r?G,`?J+?=?>/@?2?2 K?E?PĀ?G} :ZB0Y?<Th`Pg^%u6l?-8`?P%?O,LQqbpRT6@?P1?]"2?=t] c.t`W&G: ?@k?\?Y۠?IBi^% R~`2FY?@m@>4b?KF?]8`?A"3?n;DD?F?ZC?V]N ?;RT_ET ?/XM@U@?c<`?Aʟ1^`9? @>d`.E D@O3 >`?WIV?cw ?W@?`@A@i?( LJSV @?Qc?N~?F 6U[ UP`@$_ g?C?7^`3`?Hq@?P ;B`Cay@f,Yp@$)`?/R `LeS9! ?5,?;@?3Y'?PX?H ?)·?S)?ah-?\l`?,O@SR |G K:?0 En@>>brB^?RUf?:[GMǸ ?W?U^K@?!2Ҁk5vJo GF6?8P@?\=G?a7?RHY?S@OY@6?Sj ?Xx ?Wl ?D 84/ߔA$WX 2@??oIrU:Iuр?6ޗ M)P`]a6^}?D@?4?4^43eCV ?U7'?imQ@?d~@?:G`PR=U"PC6 ?#32GYa@73@?\yŀ?Ou?>4< @S G,`#l!JUQ.@Ii`C9 AnFl7l ?<@?U ?DNH;6 R`?.HY?` ?UG?@?I(?8G* I@ P`??'V`?V:d`#YڀTI.?AԠ?H "7F?E ?`P?_O ?<&EV`\y @a?Eb 1.@Px?@?P?B`??."e ?@@?;w3.+@7co?E D@?C`P `M ?Q?S !h@?"~`?S`?NZ?;d9`?A:?H@@+mM| OAn?3 >`?SH?LZ??S@?K_z?[?a#@?X!5ݧ Q@Z=@U%\`?K ?ap@?L`+G,G94bA @T[X\?f?TC ?:U>@/^`4=`N`Zg>)`?LA`"OwH UsX%`?[X`?`R?V?E KJE?Rt<C۠dco ?d`?\JS?2OC`E@SZW ?B%`H |Zu`An?OH@?Kw30U5`bK`l!?a?Q`?Ij?&Y?J>D VO?6Y@?^$Ā?Y'L_`??R `?Sh?8Bk=H' ?6@?X`?D7F` K2h`Pe K̙?j@?,C?{ K/% ?Rm?T&Y?")@5F`8BkDA@"?9@ B`\=Uƫ6PB 7cݧ ?T A`?T[`<2.A?Y ?P Q@4y ?doK`?eC?9&&0?De6?4NMK_(bk S/?1;d9`BnN`Eei?43e?E185KQ;!`c<`,Z% Fc<`O`?(?Af/,9GK Sto@EKQ?4N?R7?Zi?SY' QqQd ?[/?EF`U`2<}?RH?A> y`6؀K?0O?P@MCh\+ >u?`< ?]@?Kru.S2@UL?MJ?6B`?*ޠ?AH'@?Y:P?G,`0m@?Si?Wu7;( ??u`?/?"?< G ?Q?\ы?\~?N.+@P@D?A 4b9jQ?[_zUӷ?=5?Un@?< ?Դ?6PB ?">4DURDgGW?ȥ?K̙?[ ?C:PQC`?X ?\6)!(2$Ġ?RU?CHV@N`?_`?f,?<A`7c?T7?V16@V%Qݚ :LM2~`<9?2p?L?@m@?8 ?>=? <@B,P"?H? Xߔ?5`MY&&A\ $O~?3 >`>)`?"~`? dQ&O?*4 ?:d( NIT`F@6D ?D͖?8 1`5^K@+P@?1~?LG?D9Z25VI?B@?TT?.Š?Q?.nN@3@?&Y@0<@Q@>ܠKP@?Š?R!5?Jڢ?B`?D1@?C??:P?+w3 =?C`?)P?;o@?W?94E*?F?P8q@/ `?Oa?R@?O?U ?R:ޠU- ?%uC|GM)P`GY?O:P?ZA ?4qA\ C 8=| >FGH+`O?1b?`)mQ@B`'`/R `]ʟjCh_E?G?Q8`3b?K`?H5٥Mf?,`?Y @?K_z'?Cà?Pv6?2`?4?PV0`?Ps?1ܠ>n!`Oa[n aI6?T?FI$@E&*+^5T ?&Y?3F-@?=?>/@<@'3@?GR@3 Q??"X?D@?([``WPtBX?-v`?A_ ? `2ul@2=w,wf@?2)@?7R@? #M]{'Jx`?Ej'?O@?Rϑ?S.t`?A~?2@?37A U ??i?I/ `:Ǩ@@MnCu?<?D1?H?/@6S@G@G!E^K@H+`?!h@?HcCT ?!ʟ?@@?Y?B?PO`??ȥ,+} " >8`PT`?2.A?>H<_`?1p{ ?Md?H{Z`?P#/?8h` Ito PV6*RҀ?6+ ?Fޗ @Lf@o?9`ZQ S;Q```iձb4@ K2`?Ldk?P?@?F`?\ NHY?F `?T` `3$@?<A`?/H@? ?H`?T{?J?:?=Q&`C?:`1~VV0@Y5 ^T?Mѽ?GU3@QQ`K@ 6/ C:P s?=Á?L`?B KZ@9E?VI$@?4@XJQ ? >`B7UVkCC??V?FOP@CX<|$)n0g&PB &/[?!h@%^S Uc?'V`?:ڢ?V`?]?SH?>w`?!X@@9?`?V?L+} @0;H@P5UO A5-0b $< ?H@*[+=Ԁ$?@`?4g1V`K$,Qf?Դ?P<@?9=ߠ?S@?/,?u`$b I.D?J?A.@F? 4?Rv?RI@?B`IS67qN'#Y23`?G"?7q`(!5D 5vP~B7?DS ?;UNkSC4)`@QqT, H֮ @  P Y"@?`?Q?c<`?%`?P=G#O`\m R@?8v?*!F `FlOK7'?99!?'EW??l!@ ?C`??XRNj:UD%@+?>5_?J-w@?Hj`DVL9?A`ZtT ?R `0?Ej@?N+@?Q?X ?R[? 17@>l ?3An?8 MP=G3 $J\US@8Bk?E??PS`?E D@?*%&4`?R>?]3?F*M5F`?%&?3$O: DNK`MJ`,`?Pg?U?Q?OV? 4bH?) ?\m ?[`=@`] y7Ў?<&A_ `?RnN`?K@ ?#b7Ў!Ӏ?M?< G NIH=??H!5?PR?i= ?H@3uT@UW=?Q;@?W?-@1`0)27YY^]dSRQvT[`Z|@YL@?MX ?D@?O ?T+;@`@T{?,9TE0 :<).@@???Bf/ `??"?=C`@?#vI41~?8?)G\?:ޠ?d(s?;h+d9`R`0@?4@7GF?p?`W`?cm@?\I$ ?XE?Lm ?'?%Y?%*?A.@?S/?4b O6?F` ?7.@= = O ) 4@?0? E ;w3?Fޗ ?P%?6?0?X?a?Y?>7@A۠L"PB@g?Od ?ZE0?T_H@?HGe@`P?Pa?Vf*@TSk+?7c@r8`?0-LQvF?+?`ܠ?D@@S{@?E?T A`AH= 2ϑ?*>@?Qi?RaB`?KP@?"O?oE R`SP:LM1F*MI`Ez " ?C 8?MVb?E@ E5`@1?D brP$_GX?R!5?Q /?8@?IϠ<`LXSZM`;c?2f0e ?&?D ?A5-P?"~`?B'#Ӏ?D k@?Z}?WT?1"Qi]@A@?T?W?O`?L ?(!5! ?* )!h@?4@?`7?Wvi@# >`?A ?V&?AH'@?.nN@?I?Q ?MOE,mJ ?1?6UP`@+`>ܠ*G`>y`?Q;@?a>?d/֠?P=<` u Dm->?3@?*g@)TҠb@TT5 CO`MLD`?.+@?L)@?6Y@<`KaTU]Á`Y4bMLC60?K`?L)@?G"?Z`?_i@?9vU ,C?`?`?M$O{ [L@HW ?C32n?`?^` ?O`??R5_Q?J`?T?EW-`?p?:LM?`L7YB&@?1k6@Z/Q2?9_?(;`Ta`@Pg?M?MR ?K!`?[@?5 P~@ZTW"2?0`?Pm?`O"?=Á?T?K@ ?0ӀB"e`?F=?4A@Uru T3 L`TN? 8/@U3 ]ZZB ?$b ?2k ?W5,?d?_7`?@dl Ap{ :`?Lr?RNH ?Ap{ ?P/ @?N>ܠ4? u ?J?IΓ?Q~?SϠ?@ŮY.Š9jC @?Qp?LL7YP0 CXE?K@>|R`?Kߔ?V0;@X@X~@Xx UeiRg6?K?I?JN ?W?? 7`?N~@Ao.w`?*4 u U XE5`Tma~8% ?S?B7?1?@̀?;C`?G{?8KCb0?J@?/H@<`H#NZAs?" ?Q@?Za?88H@J#`ROAn?,wf@׸ H8?.& ?F#/d ?`?@LSl!RI#ǀ?= ?J`?:7?>j?A@?Y ?g ?\`&PB .H<`QE:H@(;`O]`"S$@?Bf?5T D'?$@CThO4/?0k?3l!?>"e ? >@O@F?7]?4@?@7Y?^Bk?d ?Y*`?&l>@?C ? 4?Ti?`"`?G]??F?O<?T@?UR?!h@TK?=??{ ?uр?Ii`?P^}>5 5vLe6?A @3?Mݚ?R?% (y`% 1y@HWjNϐD ?6?T`w?6/ (?M`W`E'?="2?R;M?<FKHsP2 Y@G?5v?@JT?Rs ?U`?9r@Z%)]:B`f:lB`8֮?#<?"Ow?H`?S?>1ߔ2k P+@9.?V?B Mo?BX?RjK:Op ?9:`? @u ==|W`"?K-?N@D]W?&˜?dLN?U!̀B`EJdI`ʟ?%P1QvZ:+?C<9H/q`?:rB`?-A(?6/ ?W?Qf?C?QY?O 8?!u9?@?Pr2A<QxȠ?@?`>w?VPB ?%d?0]N@??aFQ&`?PU?` `?5?M2͠;?)ZW?Q ?au`?U A_ #?ZӅ?U^ @~OMJ ?I?Oi?+@JX*`Aw?*>@?I2@?X-?Z`?R ?TZ?T@?4@ Dm? `!OE GF^HIB ?Su?D794bʟRy9G\?4)`?W1?_@?JN br?+@>0(?,O@?M?L @I*`^[@a`f.`^5_I?? ?0=?S ?X6?Q#`?'3@=543e+Z@#bŠLبJ`?Ar` W ?(P@?Y/*x`RbrO?@)?E҈ ?N?3u" ?Nz*?U4Mwed@PS`?6IG ?C;?3l!#`?LC?]?[ ?:G`2?QL?WuN+@`@@NHMѽS@?=K?_V?Pd?,`?D?F,?S?R!5'C?@?R?>V`$?5g`?D?wMn?HP@?V`8@TaDS >H֮?WOE?\˜?*!6?D͖?I*g@O`C.`?JO ?Vy@?+ߔE *>@?<_`?SP?X ?2J 9 ?I?MRb)@Rq`?A3?QK@;_z^h`>nN@?Y|?NŠ<ƠDߔ?:)@?*?V?D͖@&@2ESձF `? ? >[D"ʀZZ3e`UM@U`I7;0 ?;C`?V?WW?S@ ?4ԴQ`QD͖HS,Qq>y`M^B5_?!@?N0?Qq? aPsFF$= ?+P@?C`A:F,5c SFS@?L@֠+ ]da,߀]uH ?7c,`L 0& ? )y`?99!?Qo?Sn?FY)`2T6@?(P@?>)=E4@?Sȥ?_" @V/ C`?Y?&˜?"Ow?Y?c`?P@G ?Š k3L@Q+Fޗ B)@F?8?HvDM`Jff?0S 6g\xW5^?(?'3@5.BA<?/@?H^?5?dk0`N@M <A`)G\?4@?1$O YG J@?)*`?<@?=w?H;M?U>D?S ???@B?B'#D@Mi] ?Pv6?aOE >8`?-FI9!y`N_yNJ Y9[?^G`?Ro~?D[@?W?P0;?) ?Pwf`?^`?T4 ;X̠I @CJ]3@P?E`?"X )?1SLݠNB?G/>?7PL~@?uр?L?>jUJ!@T_H@?H^?Q%@^`?I@>?Dg@>@Ra`AE?& `2@N[T?-Q@?a?Z`HwTǨ:Q I WݚJ1@?*>@?Da?B#`B?F}T?Xc< G b ]Nô`DBul@LI5^K@?F6*?! @/?@?!3֮?Ol!?7/>V%UpS Te6?`?C)Rg0] M yGIc ?O?E18?F[`?P=?I}@;LO `?IX@??i@F%`QG} QS? @?Tm?P*dS|I?6?7A "k ? Np;ߔ?W[!\`?E=@?\z 7 ??;( ?P^}?M.H^Lb ?b @?C?a3e?bV ?[?W8`?:@)) ?I:`?SW?#F-@J&Y`@m@?Pwf`?O(Xbq]R?)P?1]:!? ߔ(4/0ة?A^`?5u+??H ?Y`?D@Z4 J@?\W_?Sl!?@??P?>[T>@Dx0*g@" IZWN]@?Cà?b?W5?@d ?Wѽ?Qr`5^K@7K ?@7Y?PĀ?I`3Q|W?$, ?S`1ӀY·PZG`H[? F?0@?_:?R(SAt@#)?0g?=Q?R}?=[w3[Z}Yl!%j@?*#`W`c<WQ`WnM ?F'@?Rk ?.D ?-Q@<T:`6qx ?Sf3?D QEG?:! m@B?=5,?T?RY@?EX^\@G3@Bg0Ol!C9K>D[@LC6?@Ů;_zWR0?ASF<ы?N?_Th?UNYO5JSk?*?B`?+̙?P?c @?c?R@BM ?=Ԁ?Jo >>ܠ?4Ǡ?Ii`?[2`?Y}@D, X`?)n?7`PZM(@? 8`?Ht<?GDP@>@?2`??3@: _@<?^S?DB?P`?\ @?DU 4b3@&+ ?9?E18?Jh@?T)`?EE 3<?W%?^$Ā?LG??@?`z ?f?TǨC,>?Eɀ@@ +} *#`?-?R1 ?:G`?:G`?b?^`=r@D k@?*@?7* ?2`EdZaUQPI + " J A@<Ơ(4/R`Uu?GY)J@qE@7=? ?IS( ?(@?^/@?V ?KS`?QV`?;ݚ ?"3`>C S.`FN +P@@kMV@C5@?I?AVc>@?+?CZ k Ps?)@?E.>К?#?7A A`60??? "`?+?b?t?fs`?SoAi]@@ы ?Q ?W1?G]?Qo?K{ <}?#>8`>@?O?DiR| Su?.& ?Q??ޠUdH?8KAÂSMKbKQP?G?? @ 32?WR?W{'?)`7A ;hIW*~ ?U@?Xd@wf@Duр? Q#`Xy`P>w*r?BH?MCh?P?`] ?e?t?S@AEDa.=)E?< ?O?D.?T?`\`?1kD:`?Z`?`#DR<@YG:g@? 1A IUFg K?uр43e9n53 ?*w?Q)?N@- J!;!`? O?1A `5&>?>`?=9`ILD?PB?]j?F=?&˜?;&K?>17F7R@?B?5FLEYDM}wf@?2J &?$lT`?FI"@MDy P@_\ HT?@kOR `ZC8s-?F?Z`?_An?P?4C ?G?^q ?S@-w?=>?EB`5*?B?Kn ?Rz*?1@P>~?J+?O AbOX}?@" ?G} ?88>>ܠR VyŀJ D' wf@?@ %uFr`?'V`=[!`G@>?`?HW i; %@7@Pы @?53 ?):`?j@?FU?Fm9I9!?$O?M@`?,ITqYE'EWDO:>0"br9v`?'? Qq?.@?H@?2@Ez @`GF H„"@3<PJ I/^^VN? Rfb`R@7@6C'F?[!`?GoK`?T#?Yv`.& dlT`SmQ`?Q@?T?Q#`?Hr?+( ?/>O7`?3|?RO?K?H' Q PjZ@?<?L?O?V`?H(S@`SK G=r@T Cڀ?Y'1@GO<E}!E@[^^=Ir+<}5?Fg?QD?k|?h@?JIC|:Z?23`3vT`7 J@?Uo`?UU?*?ȥ1Ad @I?K;?TO@1۠?V˜?[ ?><?"e .5_K>D@?)4? Zy`@Q@?`5[Vyŀ?6l?E>*a?*+?@=>x0Ů?Mr@?7FN@TH N~%Y?4~BQ ?4H;Z@@pHc<`?G ?Zl?JI) 4YZ?&ޗ N@HG* ?=8`M \рM?E &*MLO`?A&`?2R=@G#@1u`QB9 _H@`lKy?4?DK`?GGfݠ[?N ?`7Y?[c ?3AnE 4CA|@?K@?M?2U`?D ?!\ @l ?`>ߔ?H`?R@?@-ܠB]`9@ ?GW?#J ?(„?J 1OE R@R{Z+ ?D?A"N`G`6=G??"?H!?4@?[?T%)d ?M ?WF@?B=@2% ?@>w?Si€?8cE=@L :?*m?6S@?P@3FD`w?T~?Ve ?!@7? s?;U?Iv?U/ ?S*`?Hɢ?:lEHVm BnN`?@Ů?@`4C 0?T ?YV ?`PB ? sD?A?8;`?\~? Rh`@?63?Mu@?6[`?KkW ?Nbq?@ ?O.t ?CNQ?&?V` ?[m? W`C7>P@6O?P ?cs?P[T\??[>Le?J&Y`?S{@<`A7FYO@cW``0ӠK;!&F?O?YC?ȥ??8`?@f`!(:a>i?X0?U3 ?M0~)*`K U@5z $HG)>M@?/H@?8 |= :x`?SZW ?S]?[!`?PB?Zޠ?2L$_@Gc?@@?W?@sE@ERn0a?@@??'V`G.D?-H' 1"=5?DlT`?V?TI`??n?#)>G`B=@,"?:G`? 4HmQOB(7qEl@1'* ?Kc?d@?g ?]`?Hʟݧ ?9ձ?7?Ge@?U?T?Xq@?X?>`?)P`P ??|?b%@?kT ?OC?QnQE?M`?Ty``?Rl? @ U+J@`?P?R(S?=ѽATK(@&%`?J>@?cF?a2?2M@?.֮RTCX&@W`?5 ?)P[5@S·A"X)V>w: `>n,G6Y?-n?LA`?KU? @$_7B96?!?A@B`Fz@?L)@?J l >5_[mX~?;?B <A4= R`R+?D?S`?9 ?T`?_۟?EA8„43e?3?H@? ) HE`[?K|?Hc5.ـ?$@?N"e F= ?>& ?FF?;`>֮G@OuRM@VCR ?3W? RT6@`?M& ?D ?1`2brQ;@PMVbR J:%?Si€?]X?P'`?0JT?9h?Md?Ab?`LV0@@B?V_?S, `br?-Á?+P@C۠]D@1A ?^?(@Rbr?L ?D"ʀ`ձ_3?f?^0B2U`?U>D?a%@?G J@3An?&?3 8+G?̙?[ ?aE-v`?]^@?d^ ^)G?I&&>`bD@?B@s>y`?Oa?+@?i?9h( ;?)ZW?@e ?1d ?#b1oPi*5.?JڢdSL]N @?,`?D?d n?\?L@X@>^J#`U:O7`?6PB ?B։0?Gd?N4=`Dm*>@?@?E`>׸ G3@7?TV?\˜?M?V?Z`@Q> AԠA\ ="28P5J1M@QPt"U`BX:x`?R…?Z ?a@?\`?uрF+ G4P;>D*~ SL`OԂ3`LI?ACh?WF?D VCU?MH' ?G`Pdl C?.+9YȠc@M:?V ?H 8 ?N?RHBMH6 Sgc E:?+P@?F^}?Z;?X)B@?O5 ?W6\>n9K?P?IZW]?`jZ@?i0Ӏ?P*MGaC7?BE?ZU!\>?D@?`[?.֮?.?F FW`D3e?E ?7XAOTl`LB?P@!ʟY-DR@?M ?KRQ`b:`DeŠ?Ud?BG?O?am?5qES?*d?F/ C:PNC ? 4?L?0u @ ?l PAԠ?O ?DO?X ?P0#1T?V?\~?>`?D`w?N`D`YQ O JZC 8HI ?+ ?Up?4bT~5 ?(F =Ch?< G ?M.?_?\`0`F˜# 8CMK9:`@``@^ |O"Y RD?Jl?[?S$@ ?CAn?A`QL\m Z`Fޗ ?Qf?Q.,G?1]?W"2?U(`?CX;ߔR=@;@?58V?8`>)0PFB`?Km?RpE _|@RH!5Z ?C{@?X@?KG?/^`?@?1ݚ ?R70``'`?*?['3@HB1]]X̠?d?782J SD`ة]t >M@?%{I4bO|@?Gh?Rg DҠ^ V\?*x`?Ko@*Z?*?UqE Xq@?dk?K{ I&&UJ!@?0b ?U:?6@D ul@?[>^?LS?K>D8/q`@?7X?G J@?5`?:~ ?R?4zZIR~?5^K@.HMo5j@?F-@?5>6˜? ?H4/6UG?Qt ?' 5KQ wf@?O?C\@?"<}X@O:P?,`D1P]N@N@^ô`T[!h@C?VC@?UqE?R- ?R?Exc`?I4b?Qj?Qݚ ?R U`>=?#2M@?Aw?LEsJa?Q?_Y'@?O $7?!"?n.!(>s-+?H;M?Q 1a`oNw`C32J# .G? 8 |Jl?+( 0pH_·`@~?R…&c<`O[O__/KX\3z]`3p@A@>|br?&Y@?7 ? :<?:d?G: @`IB ?,wf@?F `?`QL< ?A\ >y`S4Դ?3;S*`^ `E?Z?Lݠ#`?%p?9?J=?`r`?[҈3ڀXaB@S6c<`?"Ҁ?0?=ѽBgc#/YV ?AE?6Dnn?K~Q?R%?K?0LmY6a,߀]ɠ?R@?3 C`?% ?A@?A_ >dO< ?-H`E{?oB0a?P\?Pwf`?Xj`?].?1.@@?L)@?:!Ow?KP@?V?B~KZ@Ai]@?WY?Vs`0S ?)@ ?M@ZMy ?M@?Y@?>1?0x?P?C @wf`/o?M y?I@>( `?QA ?`.`?X#Au`?>7@?FLm @`E,z@F J25T9S7!?nE??4g?YK?Gı?(>@TA@`j Zk$G#@)??XOw?c?LƠG8K`D/?->?>5_HK_z?. ?5٥>@>+@:l?8?7A`5qE?42 I"@?A\ ?^C`?UJ!@?9) ?84/>Y?ô`?X?[9?+N7Ow=| =@G"`?1 @Eɀ6?M@?6ޗ Lf@? ?A(?H#?@?OaF_bg Yto )?Jޠ>& R6?B?Yz?O"?< 2/@>=?C?Z{?B[?0~@?W??[?[?PgOV@1E?t?C`E@?S>`Jm??@?_2 ?K@E ?#l!?M@(4/A`??3?1@N =t?N?A_ GK 3$@?F#|Zk$QK@?Q?d?` ?Ky?Dm?U?O8 |?.HYG@W^`K O `Py`>x)`?H6 ?Mՠ?2br?G?N=C `=] A?5&?-8`?S?`)@>wf@a_\ KX\?2D ?AiH}TrB=?m?Fr`?PN?A[!?0`?.j?)`?A?WL?[7'?T5?T<?Vg?G8?/H@?;̙ E`C?@?%p>sB4T1KRU,z@.1?ND?IP?I9!?S`?G6\?#O`?AX?JB? )5 n(@@Ā d?3gc ?C@?I@>?M`?STh?]LP`RRIB? ?Ns?U/ ?.?N ?N ?"H`[`TN?2?8% -?0`?? 5ƫ@O`?6@?0P+}@R wf@?0<Ơ>g?y`Cah-a5-C<D <`-?&K b[ ?Eƫ?YX?C5@?E?T)`?4.>~?M| B`Y)@?X@QYS6?1o>Q ?/?Q(+} PPJ;?^`?Jt?+2$Ġ&R: _ SR8=?'F?9B /iD)`$N?D@?WD?V`?@S 5.ـGt 1?O]?`?bG?[ ?L1`?*@yŠE?j@?3 @gSX!5I4=F@Q@Wt PR&PB ?9/?PY`?T?Pы ?T?]( ?V$_`?/[)!h@?!3?ZW?8?Z}?\f@?GR@?1`ݚ ?;̙?`@?Ug`W5bxZmN"e ?0 ?G?@X?=>!~?? ?(c?uрPZ~ W9 ?RBk?WCh?@B"O$F_# >`(Q[@@H ?6[`?71y@A??7Te6dOY?=?E ?Qu9?CԂ P,X;MY?3@K0 ;?Xbq?`to@?B?6PB ?NM*4 > ?P6* ?Q0n2IK:-| ?C, ?F?+4Ǡ?F`?3z]`?M ?Cڀ?B/`?6PB ETQ#b`B"e`4@" D ;![wf@?7F?B'#;cH\V+ ?1E?K`?E:?D?:g@^`NE`Td0?L]N ?O?2~`D=?8?@AJD RZl`R@?"ul@?S?Mp?&?A?P` ?="?9@?H4/$@D%@?B`?K;F^}S ?)`?[]?bՠ?9*`]8`VX5=@?)v`?PF?L ?2?GB9?Bk 6B`br?AV`*KE`4C ?+?D q?/,`?5 ?D?<@?>HD?.Q?T?[Y?BwˀU[IϠ?Q?1YJZ?E ?L?L@֠?V?V}T0BZONO`B: U@ 2X?`?dÂ?T9S(v9֮?T, ?[٥?@=7qB7<`?DV?S4b?A`?4@&˜I6?E@?_'?B)@C !@7ЎQ@BFIJ`U(T`U;M9`;&EWE@JN YeQp@B \ \O`ޠ&@K/`?L?C>7@K?6a ?X[?Wa?H!5?3R?O`?\*M?R ?D@?GPt u Q,`=| ?Jo ?S? @ Pg>s?$16>x?Ds`?TY32R]`G( ]o`( "<}?]Pt?ZO7R- >wf@?%u<`&v6+@2X?CJ?7GN`?)v`?Z[?Q.@?#?u D@X QD`=5*G`?9{?A[!?^>Y?!)?J`?_?Maacؠ!E-T ?H@? X?6g?7 Gh-Z7Q @H1 Y.T@?(c?J<?K7'V`a q֮?c?XO]O68@P`F0?@ы ?Ay@!R#Z?$?a9?HSUNO`4<E`1"! @SRI@<ƠS V\=i] ;>`>`UPZ4SQi?;Z@?„Lm ? ?T"ʀ?Nul @?0?VQq?YJ`?:r:mB?"f?P^}?NC ?R+`?Z`?FDe9ձ#l!?0~@ XSb\lEƫ?A~?6ޗ ?p?H?Td?/nSi€S@??u`GN`>@?Q@?O:P? ? ?;( K```\_`V`T+H |S Z?-@?a]?WVb?Ap{ ?I("W4M8`@$3ej@2Mi] E@$,wf@C Dsr ?>@?L@NI]9`N`Wݚ]6z@? kD,G;?$N?>BJ ;( B  ZU`av]t J`?DP`[}!?0#?c?G]dL G ?G7^`U18`U>_J@9_?_?[^8H`?H' ?/@?=w?4.Fs`ô`?Nz*4`N$?>+@?I·?B?I brBf!Ӏ>d 8 ?G?E &0>D ?Dz?B~?!3?GR@?YL ?@#RV@U3 PS 4YZ#?9?Up?IE;N QjQ.@Yi`b5`X *G`?"k ?)@?D%)?H1Р?$)`Bô;?:_H ?Hs?Bi?7?;L?G@?Q?TM`?Au9PpH]`WU-TL)RI@X`D ?[Y?SR?Ad?Lr?2A<@ G`?-?:d3Th?d ?8m`?#u?B ?K:?I7FD?K ?SJ?/d 7vi@T1`W׫0a?.7@?*?> ?M>?I4?/-H' !5`S2@YEV7`?Qy@?D@?5?N`?WN`78a?O32?P ?C F?&?]vi ?Q|WPC`^O@?Qp?bz ?P~$Դ?:?Pqx ?SL?N01!`?M >)@?Lk?R\?De6?N`?>i??.@?B'#?I?=@?M`?;5p,>?5?@`?Qw?Uf,dkTn@5PG@IIR@LS?=:?K?! ;+J/?;X`>`Vz@[xc@TJVޗ P? `?B@?,dk2O2g0>>ܠ?#?5d?6>br?-?O?Ol!? Fz@FѠA$Gh:+?F?J :~ ?H@?JQ ?LS-v`5`(@?-Q@G@V&?:_H ?[٥?XD?Zn?YL?[?cI ?R@@D?,Qq?K@ ֮BQAi?a?5P?T@?Y`?Q.@?@?B>?4b "?( ?^`GLM5CO`ݚ ?=r@?@B?JX*`?M?8@IZ~V '!?77`?1$?a(!?V@Pdl ZtT/֠0k?V?P wFy@G6\?s?Fo?PB)`I!h@>D =|W`?1ʟ?A @?ʟ?u0 -?Ii`?L@F-@?<}?P?Ic @&D?/"?A?Pi*?VY?1 7 ?4@?,dkB3`S`E@`o]2@?HNH?Q6\?T?Y]?_W?X `?GF?J@?94RUZYZ4y ?Nbq?N>ܠ?+ !.@@O`SJHc?'%c @?/e?-+L`TINz@E`B)!?S?Z~0OX?&%`??u`L)@W I?%`?Qq\_`bʟ?Rϑ?I) ?R= ?D)`? C?WU3@?\De?(9vL\MR@$F_*d?F-@?X?bx`?N `B>Y?HS?D@?R@?P`9mQ@MAӀAdDzMY'?A8?!E{ nH-J <}9;?P)?EM`G,`@#L>K?`X^~@V#A?O?O2J ?=8`*#`3@?/o?(BV7YQA dk1kN`4m?NOw?I`9L@Bg0? ZW? `?9=ߠ?L?>@ *`9) =@GV0Qh-'!?)P?Ii`?U ?J\?% ?$?RH?e@?d/?B.AKRB?F`?T~?E?9r?H@LCD?<`5QE?2ϑ?JLMDV`MX 9_&,m?%P?C2A<P% ?Y?;NbqWC??"?@b Q\qx@O`7GnE>Z?! @?]j`?U(`?-nM Wco6ޗ ?BJ ~I_? ?Vv6?CuLpH`?/n?_G\?]/>?\?[?t?,+} >nN@?0=?+@>M@?e?2X?Ja?>'#?=[!`?J;?CC|$ k@4 k@I}@?@?7h-7^`?2z*?C.`8 8Z$`-Q@PRIQ C 8?WOE?cY ?N?9@?I#ǀ?:U??۟?Q? >`T TIWQQ@,4@?? ?0 `6v6< PB = HNHA^`!X@35@: ?=?Nk?HU?R@?Q*@?!'R@5 YJcM] A?E'?P<@?A>>ܠU&F `?60?&˜??9.?6?P =X@?1u9?W&@?@A d2>K?53 v@>w?? DR<@>ܠ??0Ӏ6 N+@D`u?+ ?H@P#/F˜K D?02% PI$`?88?^d ?^)?O.<`?A?Su?EJ{W5 ?;+JF ?8@?b?[?M@?V#/?DC %u?K@?S`3]?P ?P@?F?B+?< ?3gc >)`7h-3 >ݧ :B?U?Dl`?0s?A?Jx`?!b?``)`1 d +} d?Xô?d@?V@?54@?6 `<ݠ?C?`M?\?7@+ߔ @i?)) ?<9>ܠ> @rA. *?#bJIa @W?@?C`4@?I?K?Tx?^@?Yp@?*[Cp@S^Z[@P^}R`Y_WGC@XDZ(E'D@LO@ ?@?AE?7 J@,-v`4?MJ@:>@=?3?S >`?J ?@!\ 5D ?)@?\ ?cE`?S?6?AÀ?H}?L>?K!`?'2G37<ы O?@8@`z]Tk$?P̀?LƠSj ]M.8`?9.?1.@!@?iIo'X?R`?QOE +4ǠOiQdB`?"OwQ Da?B7NE{):`?:{?R@?R1?G??#Ԃ DU#?P`?7`AӀ?2k ?1y@0Y,4D+C{@?5 ?Hd-?4F_>ʟ4?Ad?U@?OAn?)ZW#v?3?K?0]N@Jo >d ?J`?BT`\ :Q ?6˜8cEs?Z?-H' ( ?JI?`_?O=@>?F?FjZ@?S ?W?C" ) )v`6˜ O@?2Owk#Y'?L ?]ı?Rɢ)?A >?0?X5_?J@5&?L0;?\JS?D?+P@?$ k@Pz@Jr?V@?[.F-@?v?a k@?d ?U?73@;-MoN& O:P?3Th?a?S-D@L@?BJ ?X@?;ru)*`<|$LJS?-"2?Yz]`?SJ?H;M?@=QӀ]>??R3`?@?U?Q_ ?Fs?Li?"k Ǹ ?T`?W#@@Xf?[!`?`?`?U BMGB9^")@? ?BJ ?3à[5A:?i2T6@&(5 LmR=!b?`?E=@C"YΓ?_ ?V%`9 H?3?I?2`>K?4O?JG`?Kru?@??Z?\/ dku`?[W?V7@6U<}?L:w\6)?S?V@?OC ʟ9KRU?& ?`@?]u?JC?Ay`EW-`F C?H(S?a?=8`Y+!`?Q|@?/ۀ?LыVMGc?@?Io?;@?(@0)F8@'3@?Aѽ?<?? ?H^?4z?'`? 1V`8Z$`R W?O:WZO@OP`[p*d?_?[s?$)`?)?B?1E?G@?S ?M y?O?L27ShO:A ?( ?K@?*rQ(!J!?L?W{Q'Y?R |?>sWH'@[ l!?Dm>Ǹ >?EF`?P@?P'`?1p{ ?0@?Zڢ?S `M ?e(S?\yŀL&Lg`?6/ 1^`Z1Mb?@?W?a. ?@`RɢW=z`JrB`GR=& ?ROw?Y?E.ـ7/>Jy`@0<@?G#b@?7SϠ[ ݚ ?Tn?R: ?R?RK? 3@?P`?Z A@?GY*[FKR#)?R]`?Q;UH@?'l ?"@!\ ? O@,`?07Y?Qp{ 9 _`KP@?4D D`UQ? _D`Y32B#u?"D ?H\?&@J D!"?=G?!(9{C`O,`O|SG?s?`>)2ҀJ_ M.Qt A[!?I?Ep+} ?Gq?P8`?3$@?: ?* <`?6?J_H DYZX% S@P1~?H @T(332?Su?Pdl ?4@?6g?4lT`?07@?67=z`K?*?Km@I?`?=? `Hj`:!?U:?E`Z`G ?ZԴ?PA 4b?Pة?K@@)I(?R1?`?OXI?l >"e G?/w?UR?]u@?Z k ?9I{48$ ?F@?2`Nw`Wi] P 6*M?E ?X ?DqUT_@?4O?J!?ܠ?3|?=8`C`E@Z`IB K<INHM|W`EH9h ?'X?@B?F88Y R`0?l ?!29/?!?G/>/H@VF?"3` ?I"@?[$,?.@Q\Q@Cs?IS?@?H@G#b@?37?D?$YZ?0`=F W\PK\@?L 9{CW?L?O`E ?1?SY'?]^@?Ij?0E`?-E Ty LZ;L@AF?@Z?d`?^B`C`?9:`? ?7?P?O 8?K?!h@J+?b ?Mՠ „?T`?KJ!@J6`@̀?G?B3`??3z]`?j@5F`?<@>^7Y =ѽZY?/@?Xk?-H' \Y X^.5_?$O?:@?4%)A> M+G!?Va?a3?`#Ǡ?`?Z ?UW-`?[ ?UV ?=@? @TX*`a?BPQq2@LJ?"br?Jo ?B% ?*?<?N$Ā?@A>HYU}!Ud9`:[?*w?6=G?*>@7"?Co?V@?&˜MTn?;C`?J_H ?SE T76R`a`Vr`FI=_ !`9ձBHY?) (=G?*a?Eg`Bg0TULyŀ=? @?,IH@ @R;?0m@?E3 R[i?,?M> ?C`?Y@?>m@Q(W XUb JC:LM 8?6=G?W6\?fDe?`gc@?2g0?"?E*Z?=K?4%)E@ G??MJBH^ X @?N)?`?BxWJ??+>DRôPU H\Ow?6H@O?E5`?9) []?2?Qı&@a`bQR?O?R40?Qp@Rja` ?F/ ?c_?\?Sà??@:_ %`?&6OL``c-܀@pH?0 M`J_ ?A_ ?IP 3v?Bg?P'`2z*Y}@RV>Y?2br?2?H?@D.5_9L@?6g?'`P@?@@?=?8v?Sf3??UZ@G4?=I}@a` K?=| ?= Pv6V9< +`Qq?J8 ?S?@R0GA ?F:?S^?I `?=r@?3?#l!"[RfZ@54@?;Q? G} P?@3 '#@-ܠ?@?P?Fa PB D)`Gco?0 `?DHB?W?R;Jh@F:?D?P%PbgӅ W9?AӀ?W`?H/q`„?„BbrU*?B`4zB/`OgcTT>!?7h-N@Zޠ`BVR`?N?Sp`F+ G`?9{%@R EqE?=0n@?B`Hh` W@"2?HN0`5.?T@q?SG R@OX?D ?A(?/i4 q?: ?X3@?1@RsF-@?UqE?N1+ߔXkR'#?P`?QGPP/"sw?4?Py`?LFK~Q?N@?Rj?/^`?R?W} @sX|M~Bx@?(!5F7J?,"?+( 3l!?2?S?UV ?58VGe@;"`??s?`?>i6qx Q I) ?C?Y?`Y`?\`.HY^@F[`?Ev?47?6?Q+?P ?B[T ?CW?PG?S5@?X~@?`:P?^@?I6@@yŠ?/i?Si<?Xϑ?Q`%Y?4 ?T{?Z?M3P@Y?*ޠ?]|W`?SuP1Z@q?1)P?M<}'cM& R@WA8?`?] P`2 _ S@ ?G ?BCUiE3 ?QB9 ?CAn5{0Ů>?"H@ ?E[?8^R=J}?UN?SDaG1E?C ?J[3 T,G9Ƞ?BA<@gU+d9`?QE?`33?]"@=+?RV?E@KK8q@?Aѽ?E'?)) 8?E^?^?!3U4F-@>ߔGIV?Tb ?aA_ ^@A׸ n`?H?S?)=ߠ,Ơ?G??Q*@?C!u9PRGK ?;Q? ?> 8F/ ??Q?[%\`?aB9 ?`L@?%p\U̙:B> 9`?0u ?F@?A?4?Eb ?N?P?VI?Q.3J<? K?01Tx0d~@U9`?<` N7@5.?M]?^?]%?J_H ?Ol!?bI@?f*`?SHX5_c=I{) G~??۟ ~O\C@=w?a?S9Te6SvT [oE D@K]aCGt ?[!`?Zsr ?Ci€/5K6?A@?Ip@?E%\`I$ q?QÀ?ART6@:?:@?VW`?Si€?.>ܠ@'R@>D JyN$ĀD ?,Ơ?A5-?F? ?F`?;?IN1^+E{?3u?H`?@]N@E:?>7@?eo~?P% WLJE0C R?G?\yŀ1u`T/֠wf@?!\ A_ A|W?A5-?]@?PVm^UeLO@NBwˀ??e?*ޠ(;`?5F`?Bg?P?Q?2z*? ?4=WQ;Q? IU ROw C?A )II `:+?3 8Sj 0?Y`E@?O]XdS5@nF `W2͠G{?FN?RU?C ?Jg@?`Ů?b ?[y?U@?=: FI$@Zޠ\Ů?+@?P"U`S5@ZB&@?Dx0<D7?WD@?S4b?s?`+} +ߔY D?J?7:Q IEPI$`DlT`/52)@2Ҁ*4 ?# ?I9!?Jl?@Fs`1X?OC?Y9!?WЎ?S=?Hf?@Z?2>?BM?S?0WA a;Ri?9Ƞ0_c^@Fa @u ?"f?CMK7Ў?5@?a ?POM.5YM6?+GHrPE``?*IȠH?L ?c?R@V`Z%Tm]8>w`?[@?QЎ -+?l!>y`"I?L@?Z ?BQ(!WpH>5_>d ?O?!`DTYZQj?!OE ?Ogc"k X@Q@O@?6U0<@B?M?c?Q@KE3 ?:?>+./i?HI ?[4?0a^~@E ?[5@?I) ="2?PI ?b?[?X@` @[9?Lf@?S}`D`SX@A?A?I4b'?OԂ?l?e; ?I!h@?T?R -@/0`T&YVlB@?v!.@S [GQ= ?0)?G`?%&CY'I `?9P?P@?Nm@?K/?Dq? 1. ?)??@?R8?[(@?L]N Ra`xLb ?;_z1"MV ?&0?:>@DO-@?KkW ?F:?E?LSE=@?%p?>'#12@&9c PWD@@`?2ϑ5^Gl ?Jh@?d??]d?0`O@?ȥVqx @?V؀?"Kj?4?NO`?Mi?Y ?V? @OThFPB ?=?))?O(=@`*#`?"?I?X@??:PQԠ6PB ?T ?Vب?Bul@?2~`?RO?Y`?d K?@?Xô?G?>wf@?9h?Z:@?aԴ,wf@hS#Ǡ?Y?vX?A`?a?X/q`).]ES?Mf?JX*`?? 6F?7?Q?V=G?Fo?Ti?c?P/"?FC@?ET 7/u`&AQ`1?7%?Nz*?FB`ERnR[; ? ?@S ?F8@"O0ӀQPt?GK ?99H!5MP E?/H@?C|?Q?u`?Dsr ?2fl ?CW?Ito ?S@?D)`?[?H;`I@ C?AL?V?U ?$F_KGK@QqO?6*M??i@?Gı>wf@Y9T@?9@ ?:99!?5`?Y`?W^`?3 >iMԀQ`8cݧ Iat1J?Xp?X8?A0n?;-?2'X>0?F2 ?MQ@?`F<"k ?"@?L@?Hv?;d9`?SAn?GK PY Aʟ?QA ?Sc@?HZ$`?G?Ps?R<}PY`?7"?Xr?+̙RLG?7Pt?Sj)\:%v?]q?4P?4?P ? ~H*Q(AE>wf@?\ $ k@?K-?<>w`? ?C5@?=d?,Z?{ MtOԂ?*`Q&`J ?K?T?G^`?E?Q9?< G  ?=|W`?PC6 ?W[!?S$@?-?Ow?5`?75# V G@ZgLI?3R?S?\?RG,`V3J? -n?&*M?0E` x?8!5?A(@@P@ID7?H?U7'?:Z>^H =Q@?E&?P?Z k ?W)PM[^?-p?U?t?IG\?@JT?H^?EA5-^@Y<0;4NF5b ?T(?b^?P_PAUPE,z@?@?E@?Mw?BU`;hL?.>ܠ?QD`?J\?Hx ?!)PDlT`?'?+"`U" P|$?/5?wf@?/n?L7Y?Nm@?S?EPG`O?U@(caC\r0?PS`?EY#`?DJ?Y?E,z@2O?"f?$7FP=,>?FVy@8„?S ?58VG{'> ?uр7 D?!u9?T?I"@7* D5 ?Cl!?Q{'?8?<?RP`?6^}E[4K`?F ?T ?99!E ?>Q?Z?0O2)@GN`AL?K @?c4b?e`?`ؠ?QT@N)/@Ma1 Yto B ?ȥG=z`TA@W 6?2% 07@? ?Iv?D?T+?\@?I?F` ?S?Di?Q?_?"IX->Y?`^}?bs ?T(?Cà?PB?,QqY۠RHY?3`/iN1>?X]`?^„?BôP̀SXAE?[?(s#l!:UEp9?SAn?[*>ߔNPe PS`# `R_'co?L$_@6Y@D`?/o>?-?C@B@BC`?DYZC^cdlN?Z1?`@?MV ? !`?3?I@?>/@.@1k!F\PZ?P?Pޗ JZOo?"Ҁj@>?AVc?R{Z?=Ch3,I?K?\e?VPB ?Ou?J`>)`C A9 `?A@?QA 6fZsr Q@>Y?6c<`Qt dh`Qf?4O?!.@I?4m?D@?WD?`?Sv?:`?6@?:ڢ?IΓ?PC`4Դ`e [=VbDVU_z?2O?U?B?#v?A?=t?Q0n?bA<?b0 @?`?Z ?"[$ q?S,?G( K]17@?] ?e`?Tx? >@?Q?U@+}@Mi0pHPY U"~`?KK?S?Px?CX?<_`^C7O `WX*P% 4, ?O ?Q3`S,d8$ \dkCڀ?C(?<B.A?ND?bp>WE|J@E`?G% 8Qs NnN@]| ?(`?g?b? ZF51u9#`[T7?֮?PY ?Q3`?E?U-?_۟?BTy``ZIP?*ޠ?J!9mQ@OW? 8?I?J~ 2ϑ_p@Yi`O Cz I@F-@ ~?۟A]?A$?W`?Z`?ZM`?TrB?1۠@U 4H?)4?$)`>O|@23`?I\@?4K`3R?:U?A?$1?O?WK ?Nf`?Dm3JS:`,m?Jt?:`ܠ;`?0`?:@?u A(HP@.=i] T@O?J@"6B+YO+̙SX@J@?SW?Tk$1~A|W?<?9_J7D?J?L7Y3Kp4<?H^?Sv΀?C?`8Gp ?@<@?X:`Y@Ed,G1o?.;ՀQwf@?$ԴCL@?`E ?GxȀ?a`?^Ow?! @?Pq@?eu?MVbLI„?%{?(@?W??V4``2?8??U:?P#?$@?8T70>n;->`?AoG?^o}S&&3v=|W`?_F`?j( ?X EI@>?$F_?R\?X?B]`KQ?!)P?G#b@D͖Ic ?R?W?9mQ@?1۠7AÂ?P?W?K0 ?M@`?Bx?9 ?FPB US`_;@KLA& ?*`w`?;X`@IQYweT;?E*6Y@?X?]x`?1H}@k?*x`# J# G?BD 1 @H ?- ?T?Q[!`VPB ^ 6v6?O۟@@X | !`?@>w?- ?4<Q:@`B@'c?N ?2`?;?R@?T@?C^?4 ?Z?`n 0U`6B`AXTw F? 1=_28 KK1~?Q?Q,߀?*m?1X?A?Hf?Z A@?R LŮW%GaH@ @!~?XV?Zm? 8>nN@?Si?a@?;LX[TV 0+?=+?d OH@\E@[ӷD?,GBHY0$_?]IV?V\90E U{?n?E,z@<`AL@DN4@GL@!b?`=G?7?FR`4, @-ܠ?1ʟIy-ee=[^K \W?Hq@?Z> 0?C)+@=9`?78;`2ORS7L @V 3Th?O".[TC?I\@?TU ?P@?9c B+ ?(`JaR;MDb QVcT3e?K9@?J8 ??@@=Ԁ?2$Ġ?G 9A~?B ?( A]dl P 9@ WJ}2O >@@9 8CBwˀ?AL?Lݠ?[?K +} @?;_zP`:J.nN@TX[?̙?L~?I&&?*Q 3àC0Ӡ?9E?5 @ / `P G`DU?@Z?9*`?4b ?.& NPs`u ?@@?W"?V`6@k??e'=z`PP\R@O5 ).?5b ?Jd?ZYZ?`@?YԂ ?N?):`S@?M0n@?X)?XE; 0k ?X?T<E@H=dRXbT E`?V@?=9`UP3E`Q1 `*!?%vG`WK ?!(?V؀>=GR/q`)`?IS9 ? 5@?;_z?K|?7?6F?O0Ӏ?Jd.>ܠ?'V`?L?W^`(mIX@?@`?B?(v?'A `, k҈P?1 @SG\Wu@PQqK @?4%)?R;M?M+?E; ?P `?T ?7^`RCY'?@>Y?br?<@W(`V&?J?_:P?U28`I`DSAn^ Nf`?5^?L@?Jx`>ܠ.d ? 5,C9,?NM?INz?'3@?`C`DH ?+"`?B?PPB ?GFz@D ?HBk?K`?3 CCN=Q>'F?H@?SY'?^?[?C;`$C ?S4?X[?2M@K?P}T?K_z4C.`@e E`AV`/^`GFU D?0-ܠ,wf@?R ?0<@R}7?%d-Q@?7?Ce>? m-5,Lyŀ1?@wf`!3T.Y`S CJ?6l?X?Zm?0]N@Q5 V vJa? m?Sv?a4?^ ?Fs?6^}?I"@?;OXnN`?%`P@7%?Lb ? !ʟ?@~@QIVb&3F-@?A5 GKJ!@?=@`?Th`?Vo?O`?MH' 6KCz]`8NH׀7 1X8WRT6@?;`?X@?a?O`E T#U VXfe]?Uxc`?e1 ?X*mOPN?+4Ǡ(;^ ?D ?7R@0?E`?Q?'PtC@Q`H=?2Ҁ?Q7@?J@@GVB`?(@88G`0=?/i?B.A?Ao?,`?1. ?E}!?@~% 4Ǡ?L&?O`D7`O`T?8 |?BҀ+>D? ?@`^SX@3?Zr?L_`KS`LrA|W?1 @?Ta?)*`UR SW ?Ja$F_PҺRQH'@f?V@?Wc?0B0.LaU@>g?PN?\U?S ?1? u ?5l0VPB [ V˜]"^f`>ܠ?J_ E C5@?GhFM =G):ޠKd9`;"`'=z`?K?>jR JI`D@]Fo?_-D?a:@?M ?6%`?@)?vRI@K@?*+IS'V?: ?)ձH?DO?Uc ,"L@f`FѠA?Dl`?S`QT <?B`?̙BJPsBô?Fޗ ?Z?XH?CF-@9`M yK"`"?M?ImQ@:B3 ?P1?TG`?4^'c?BQ?\`?P/ @VW`U2h?Eu?M[!`?-??'vi@?V`?_1T[g@B '`2X?P`?X?6f>P@?+Bul@J?7X?BH I?2 ʟR@Qı' ?2>2>4b?BH?= G O9?&l?3F\% ?C, ).G`E'I`7F?2% ?B?T^?[٥?N)J`c=?( &@?6a ?5@?/i?B~?A`L7 Ps`32?7`?0?HBk?F ?'F?@`?2?`?Z~?`@M>[!`?Dm?28?,?P`8X$ĀBM@D8$ Hr?Q.?Vl7X2[?@`2brCb?DH ?U?@#@-Q@?Cl!?EF`?3;6YI[?ʟ?\ G ?\~?>)PY VgQ Ai?A> ?X~?Q?02 ?=w?WU3@?_?Q?9E?Xɢ?[`Y;??"?1p{ ?3J?M?R ?_L?\I$ >d M@?H@?QY?HP@?[*?`Δ?Q_ ?=F ?AԠ7['Sc4/P@UD ?J ?)c 8% ?*r'L1 ?(  A&=G?9?;?!k>D >.1??Q#b`?BHfP<@O'V`Gj?"U`>Ec ;-{ @:`[?Wi?Q?2@@?8?P>w?Mt?`NUC@?@C6 ?Vu?]V ?[A?]W?X@?/?B?c ?V\V`Z`wF2 CR3`?!???Hx -dS)NHI{?*Z?_`?R- Dm?1X?Sw ?4s`?1J?N+@?FPB ?FYP`3)?GЎ?SB@?CP5X(@?JLM?DM`D RV7A@ $)`?2br?>d 4$)`?T9S?gf?^6 $?NU ?L?Si?NxI=ߠO<?.Q?B?J?C|ERnJ=F`d *~ ?>s ?T%@?Rj?#?2?6KG@U8VE*Q8Z-w@"?]?`D?Kw3?< ?Os?`?Bs >BL)@L0;" ?Q`?J`AѽH^2@EH?A?Y >@?@J(KՀI0=?D?6>YbrPG#b@?Gj?$lT`?@i*>КGPtFln?,?= ?J ?F?"?0Ӏ6O?GF?S?P w?X?TZ>+@5 ?S^?=KL:_ Hl^Rg ?@?$uр3F-@GJ# DVBô?B?^J?A۠IS9 ??۟?Qʟ?60?H ?M(@>ܠ@b O],@Qj?BnN`?V?SϠ?;̙?-@?Fs?-/o?9 ?)!h@B?=5,? ?6?=5,Y G?R6@?RҀAP3+-?0?O`?AQSRQR?'=z` =w*M0`P+^7^BkS TmJd?8?&`?+`?V1k`?N )>5qEMi?*@?`·?b?FѠ^?W@?`ы ?DT>~<4@?JE0?dp ?a?FKjEJ+E?5u?PY`??e!`?.?4<4Ǡ?C?Gl S RV?R?NC TU V^}Dn?@ L`@2 ?O5?^^?^@?Jg@6=G&"k D' ?v?>~F؀LO@l!2Ow-?;w3BO` `Um?3J?D!~Lm Gd1y@2f?6^}?Tsr ?;̙@O?"?DlT`?$O?B?֮?8„? TDMԀ?4H?A`?Cu?Ko@?IȠ?+GL$_@@ ?Xm?ZNP@: ?0+?H\?S*`?W@?W ?= ySMk`?Co?:`;o@C'VDA@2T6@8 LQq?%j@?Q`>wf@B1?A`?TG`?^`^ul Yw"IR% `m@@?D/?K ?U?Nm@?FPB ?TSk?J!#'??'V`?MF ?&`?`{ ?j*?\JS?DS ?Ay@?Gh-?[?a @?Q`>ʟ7vi@#b?; ?DD?B.A?JQ ?Q ?P`?Q @?V?<N;o@^T6 ]d?4@?>=`^Xg?#Ԃ ?Ta?E.RV &PB ?Gd?[T?[?A"2?&S@J@q1V`L`XQ9?)n?RnN`?I(;^ IR ?5.?AT?R?P1? ~@+@H-Vq C9?2% ?=p?P@?I`@S 4?:@-5,8N?03Ԃ ]&b(`?:P?YV ?K@RKVMFPB ?$C ?Q?U?Z#`?Yb??W`?R`<K`EBs G@Fs`?5b ?D, A`C|?SW?d@?ZQ H%I:`?T?FW`S;Ci€?Pi*?Uru ?7F?'=z`?Y@?O'V`;9@U YNz1`?Bd@?B?]e ?`?332>8`?E&"~`F*M( ?%v?%c ?0+?Sc@?`4?S&&?"?KF?Z ?V~ ?Xv?aH'@?TtC|I\@4V#/[F<?0Q@A?`?R?SFCvWKG,C?J?R?8;`?3?0:1@@?D?H@G R)@V=U MѽDBz*@e wf@?D?E*C? !`?HI`?B`?J ?U ?H?0pHOIRAѽ?:_ ?+Z@+ 09·? k?M?$ k@ #?F)`_2 [?? ?SvHa`WPQE=| ?0?U`?h[?c+@?S=?V@?BRS,AÀ@kBf8?ul@6^}XRaB`?FѠ?a q?[c?`E U'?E??ZO?=i] ?)?T ?ZN O`R^ ?Bd@?3Ԃ A. V^1(?P?+ 2z*P @b Wn?4y >nM$RP`I/>ʟ?F ?Z ?a"?FF[`?4?V<@?Jx`?7X?G4?B4s`D ?U@?O'V`uр?7?U@`?l!M7 3.t`?4A@?FB`?1J4%)?9mQ@?@#D[`A[!?:@?A\ ?D A"Li*5?:Z?>ô`?!@?2~`?A0n[E 5b ?54@?G ? %?EF?Cz]`?AÀ?J +`3?Q?,X3@M]`??: ?%=@?@)?^w`?W2͠?V:m?VU?Y`3p@Sw 3 87UPTԴG%?P ?k|?e? >`=8`>w`;X`<FQ۠6f?Mi?W?FE; Mu@l ?B ?DK`@Z NU ?2G?Bf?C?Ou?V#?)`I ? ?=R_@`C`c&U%\`?%j@?A?;`'vi@CnD ?-?*?@xXFU?0 ?NM@?1 C9P[QB9 Mu9?>?ah ?b7?2)@?Rp?f@?e,z@?5``?NO`?@2?$Դ?6qx ?8w`??Y]?U?GqT7?+( ?3 >`!`+@?GW?X?L`?Cà?U AQaOy?A^`?P?PN Ad >>ܠBME'?)G\JE ?_W?P \ H?Ge@= yV'@Q8?$lT`?[@?S.`H@Rt<?1`?W$?R@?9&&?5 wQU2K@@?Hj`?g?^`V9\e?-?Tm?O۟@W .+@?YC?a~?\?Iv?1 ?0E`?)O@/R `M\^Li*?32F-@?6%`?UX]?3<Y]V@?.1?V@?O ?$?0 "<}R Hs? 4? ?(?$ k@)?+>D4K+J3 Bg0T`wA ?8`?FU?H@?%`$7>O@0-ܠ@yŠ@Z8!5?CJ?Gp M@Jh@?Q?U5`?XNH?@F  m@?En@?PO?7Pt$ q?` wf@?:g@?^?UFIUR Pޗ NOwJlC?dk?R ?V@?:4y ?J?[E?tfwf@RNH ?PyŠ?YK?U[?( >w`?'vi@W"2`RIjY(T?`?Z^X 3?Yc 6`X@8?(F`,``S@?0)?RI?֮?D͖?)@M>L|$> `8Z$`?-v`?84/.7"N~a J@^QE18?,O@?Ge@?+VU`a+ZN QQTƠR$ĠLXɢM?\?di]@?C$@3@>Y&l?*Z?W?VI,ZL<? !`?9@ >?4 q??"? @"[ `?:Ǩ?Ww?Xs ?CZ@;G8wJ _@X@?2T6@?C? OTF_bBkU@+? ?3JI;`%l?#vQ7@_L#>ʟ4@?8=?I!h@U]eUL`?!3?*ޠ?ۀA5-?B@?C@.?LV0@?aPt?Rbr?9 ?RG*@?V?Aw:1@? 5,?MpzR@E@A?"I?X ?BGh? a>wf@B`?H`?Lc<`?V6*?bM?P w?A@?O?+NjPm@?!?L ,`L2>?/H@0?53 ?#322X$ q4P@VOd $C Bs XQC9F@?(@EqEPy`D2ul@$HE`\c%_2 B?= y?@P^xVB>wf@?)O`J ?9B ?Fl- S&&X`YuT"ʀ;X`?G\?&v6?:Ǩ?Fc<`?O`E ?V?QE`U,z@\GVSto@Uj'G: l HY.UF`TgS@?9n?^/q@?T(?=G@ G`?%?4`F+ WNO`JZQ} `?-+Z@bd:1@?X ?Zi?8`2z*?Yd@?[X\D^IP ?A$=G@?;ߔ?Duр=E}!?O?Y*`Lwf@cj Nô`??5(?V6*?Qu`?^`?G?T?J ?Jr?Iv`?Q?bT ?_?@>@?H=?W?Kc?'`?*ޠ?D`?CR C PyŠ?<`?SP?>=??%?#?1? OD@R |/d ?K@ ?%&SuUSbP<@?YV7@_@SP5 !`3L@9_?>d &c<`: W YNz>i*dRSKE?2?'V`QMÁBpY?R/`?_9?Q@?#@@?- ?3z]`ul@?D~?@@$ k@?+?B .5_D1@`?Jx`?T?8/q`:a?A?A|WW``T+U~QV<@-+?D? 4b=t?P?a?)v`V%'?@<@dk>F-@?!\ ? @?N `?Vf@?C.`?`?;ru?V?`?RI?H@?H ?Tr?Ev?>)?BT6@?4^?n?M5@TB7?)n?0+;0 V>w^"e X[T@D,ZN2[?\?S@]cm@F?&ޗ ?#?i*d5`! ?Š?,Qq?)Ƞ?EW-`,ݠ?A^`%j@?EL`?[qE`?\~@?J\?A|@?RA<?PY 4bRXE.ـYD@S Q=zNw`OQ5-R@QU3`>s ?IL@?Pc<).?$?`\`?^/@?>7@?4ND QvX7`Sv 4lT`?Fޗ ?+Z@R@S)?K0 ?H`>ܠ$ ?Ho~?A5 FFE>Y)@?!`?<>w`'* ,+} ?DYZ?9K2]`? K?( Qq?@@?Hv&Jh@L9Kߔ?#?Y) ?Y32?H-?G.?Q8?Q?D@`96U?n?[]?e?O H ?/?Y7`?F=6?)G\?K?5@;`>:??@?a@?b@@- ]H@?l2I/u`?)?>?B~`[!`Rs VgOY'@!~?B?1?0PDeAL?C=H' R?CC?V ?=i] &Bk R%V@Su3F?8@`X)F`?6Y?%A|WNO`>)?=|W`X[R?>ܠ(=73@?7U3@GG40yŠ.֮Cà?4@?O.@?.+Q ?@1DM`SZ`9?Xϑ?X-?6F?0?D ?[?dd?Z*OBT6@?2z*?BM?֮?ô`?R?X3@/ `[#=_?T?9c U@`Y @B֮?M ?W?֮T@W yRK4uр?MOE?OJ?3 8?/5?-Q@?(=?9E6c<`T<"?7`? 8`?? ?Jy`@'R@4%)?4YZ+( @0;?)?,`?>HY?@dl :/րF\?)E?RA<?G?HrR\4@L ?„?@& (P@Cj i$N5j@?B`?:<Mb?@J`'Ar`!b?`?HG* 63Te6?C@?UQ`[C`?(@?G\P>10)L JdBX5`?4%)?D|@?=?4b7?[?R@?J`:BGN`=Vb1$>G^?)v`?)ERQwR8 3v?Tq?R40% 4m?6`?T k@?\@֠>bZt?*a Z&?QÀ?Yb?Su?DU2`(P@?L@?S ?R?Lm`<+} ?>?Bs ?M$?R}8*G( ?!@?GB9?MF ?<@?'co?F `?BҀ?@`?XU?WU3@?/?>M@?S ?P8`?T?SoO$`@?5 ?[:3L@LO@?R?X ?:<?) 8 L@CFq ?R `?T`?b?QԠ6:d?Iv?Wd ?(R@>Š??5?&F@+}@P+}@R%@>)?U+J?LY>P@&˜3@?4y & R ?3 ?Ye?L|$?v?@?P?N Yy-[?&?\ ?Zf?JLM?Cڀ?U@ ?[@?=5T@Q.@?1 >`UcP`?!Ӏ?Qp?YI_gcCz]`?V?Bg?LZ?P ?9h?28׀%p?1 >7@Gl ?A_ ?L)`3@Y?C"?W4?F@RI}@?F:?A ?9v?U; ?V7Y?6/ D<SP 5qE?Qi?PB?5?5KQ?2A<?!??47#Y'?K`?-v`?9G\?O.t ?@=?2J ?AQ`?N?YF`?W?Lk?GK ?/ۀ?%c ?U`?]t ?S@?XX?[t@?,>w`K?'X?L)?-?]h-?\A`?F?G`?G`?<Ơ?$ qT<_]?`?Xi?<?i@ >@?Dl`?Dx08 T Ej'?2  ?"DRހQ~8 ?9K?Hm?Mi] ?@U EW-`M ?+?7l :??IB ?+"`>)`?>x?92@? !Pq@T"ʀ?2?`$@?]q?B?@s?W|W`?QIVP G`a+R#{?M@`?D͖?@S ?HI ?D%@?GЎ?L`?.@?`Q[N@?3.t`#<KR?y`?R- ?ML?D S (=F#/'3@?1 J@OL?5qE?W.?_?XT?G ?!2J!OԂ?9?Qc?@e ?< ?NI?S ?QA ?E&B`?!?T/֠?I2@#)?:9S?R?R??^`Whd<Qr`-pJƀD ?U?R?@@?6@p@V0`3Y'>Y32&`#O`8@?FB`?Cu<ƠFm?'A ?B?2?+@ 8`B= 1\ 6@>?7q /R `?Af?S?C{@8*?m?R?:h@XI [?2?X7?I`?;&?I#ǀ =@`?SJ?_P?I?3`*M5,?99!?T`D͖\@A> ?FDe?UG?Mb?@HP@SϠ>@?P?Xy`?U >>ܠ\@PV0`?# ?:x`?6?'F? wf@?+ ,G5# ?6?,>w`Q`Q,I=@`Fo?7L?T>?L%2pN)>n?4=`LIi`9L@O=p?O,?Zo ?X<}`?E&?( ?B Z@T/֠B"e`?A0n?,CFqx ?7?Vr`?L8N$Ā4%)?F ?9@`#l!?CW?C|?)=ߠGNB?$>GQQ`??[~Q?OԠ? ?C ?Kv@?*/{ !`?/i?F˜?I?'coELm 5b ?3An?Aѽ?I2@?R.A?SD?J7?=GF5LݠMT8$ N@?!2?An?>H?I,?E.Y;0 0?3@0Kn P^}?-d?Vz@?M`2ϑ3J?P\#0 ?K?7/>։0A Kߔ?N?cy-?M0n@JG׫֮?4F_7FO`>l ?E! ?br?C 1EH^!u93Ԃ G( /^`?u,>w`C QEAy@?N@?Mv`BD PZ8/q`D ?4F_?@E> ?T?V@?<>PB HNN?94b?N3 ?,`?>V`?Hr*dQQco3à?@@?9{6I;@?@?6J K%j@8vE9`?Da?a=z?\@)@>=?:&Y`4U H@?&?)@ :aK>D9,?>d ?B'#>ܠDl`PP:???T%?`?a5?RO>0SZW DHAr`SiI?Y' ??D:x`\qxJ{?IW?;ߔUy^O` ?_<?Yp@Fo`?mU@c\@T``%` Qq?#Y'?"U`?S ?c@?\?0]N@5p?Š?"ҀG^`;?W?QvVZ4q@?Cw ?X[?=F/^`?Y1<D>g?f-| QPtUKQQj2Ow?B`YN3?*MF`?6 ?aJ ?[F@G`Y?( ?\Һ?AwTO Q#b`IcT`EF?Ad?WL?_6?;Z@[F@SH?;`?B]`? ?#D|@B ?6?(;`T`Us-nEp[:TA@?43e?_?`K?4 q@Qq? 7Ў\1k`ZU`Ai-@K`U>H@? ?&Y@>0D :HI F B$Ġ?$7?Y(?`>w?A@S;Wl 6[`? 13?)G\?;h7L9E;aeC@6f?Va ?:@[La5H' ?X?D7A ?P7Y?PZ%`SnD`?0?32?54@?: ?:w?BU`?*Z?w1"?Io?I`@12?Yj?MʟXT>?„?-d?Qp@?c,?YTh?+0L+Q&F-@?Fe?01Bg0OJ`P\YL ?#A|WSW?7B9?YP?D`a?(G* ?K2h`TH]@?9U2h`%`?T?>ŠFPB B?K{ ?XOGıfrID?[2`?Ql >n?+ߔ?$b EƫL?.?ECFE`?Ki?3 8[Q? [;,I?Jޠ?P)?5`?6F?V`?KVPrPR?4s`?73@9c <@@>!?$ q?@O`?;i=?S@?2ϑ?XB?9 ?$ԴQd WN 8׀)·`?ACh?F؀?4 k@?-5,El`dl P?QxȠ?Q?D[@Tff R D@@ l!?D~?G?Jg@?MK?;?'?9·?*M8=3à2OAF\My QF`7?I?5dUZ@O]?OÀ?I/E4@2?Lk?6؀?D`?\?Y`?A8C`^$Ā_ 4C ?Rɢ?Md-@2~`?E?>0Cs?3?2FS?A?b?]`eP0;?)4>:`?7S`faX@?:?bX]?^E`?0G1u9? Ua' )K?P5 Ap{ ?oGJ<So/?LC6?,`ޠ?V?V AA> ?J ?T(?S?P G`?P@?Z ?OJ 7?TH?QB9 ?9B ?Hs?H@?&3?7 ?I@MA @?$=`?Q"2? O9&&?V_B cd`J`?*.[Tu ?%?<|$?Kv@?PA32C ?O@?Wb?`5.ـ:4 ?N@?- [ b=R?@>@?B GB?K!`?P@LC6K(@: 1SF Q" IG8*<97q !`M`b P?ZX*`?]T?5@?1`?C| +} x?@wf`?3]?0ӀPY`U@Uw3DC ?6`?:ǨA5 <_`?Mk`?O:?/{ ?E{?IϠB)T݀ ZW?XT?XR( ??n?7A ?Qt@?INzRUfa@qYԂ DD?"?4Դ?# 8#<3 DYZ@@?*5F`O? ;@!`A`B7OJUGB: Cw R0?=G?L ?d ?>1?Yv?Y@?[ ?X= ?E ?FDe?FU3z ?I(?8*?,G?Qvi@?Q@?CF-@?M[!`?M"C][z€HBkpD+*+(a`a͗y`?41?Ht<?Pa@?@`?:7?Duр?U`F?ez ?f(?HZ$`?& >0)`']R`Wn?A$d ?|BmXS\ Hs@JTBnN`?9?C @aL_`-H' >!DO?@?M y?:_ @@#?)?>+"OT"ʀ]X\s@E'?Ap{ ?@m@?1E?F?L`?2A<:rŠ?KZ@?3O`:`?5l? [5@^@Xô]R <&E@?AL >P@??3@? ?R?M:?3FQqCW'!?HU?K2`?D ?L?F2 5.SU[S`Z% ?3]?S2@AN` 4bIL"?I{?S?Ho~?I{?-wH;`B`?J>@?Wv?~R[T 8{Z`?3`?ZW43eS`Xܝ@>։0;O<R`9@ ZSϠVu?%j@?88Th`bW@?.?'>w`?@Z?WF?:&Y`?(*?[f?Z ? x!`?C?Q*@?QX ?@Y 8cTh[?'3@?W y?;( K@G#@I@TrUsXo~UJ!@+!` KGEo?H^0x`=?O7`?8*:_ U`X\??@?Xܝ?B~?@Q;@UC2?FY? 8!h@?Q\ ?TV?9L@>>ܠ?Cw ?V`?Sc?E^K@?R?O`Bz*U Q\Q@M+=Q@B/`UK~Q1@Vz@]DR<@?)?332?B| ?8? 2Ow>& )`?1A d(G* )4b%n1fN1X7`L+} ?Ta?]3>CY'=tZg@]?٠D%@AH'@#v?NV`?7My 'A ?]X?bs ?Lr?'F?9=ߠ"D '=z`?= !b?`Dg?j@?=p?="2>:`۠ T>?P2 ?Qh ?=@`?Nk?&S@[ `F-@B7?LA`?B`8?A"?]v`?Oz]@ a>wf@*x`@?'A ?Pg?[?_B ?=SW9TG`A@?M?BC`N>ܠ, ?V@?Q|W-dL1`B`vBT6@R)@?*>@?\c<@?KX`Q]brTVJ4 ?ED3 T݀2ul@?3`??A^`?@~ ?Au9?BGTqY@ ?"[20`5F`?5`?ZC?\>w`?Rbr?RD?L+J_H 6 ?Ij?@)Nf`F?;4`T' F-@?T ?Db R\ZK`,`#`>0)C`E@5٥= Gc2)@1? ?Ih?VS@?@@TZV%`EQ8Rh`@LUH?G?Fv63|?R?T`wn0+?9 ?(?*!?@Ā>)`??a?V@?K4?AF`?3S/B?as`?fi`?`.t`?`?IϠTrX *a?G ?8 ;4Ǡ.w`?>?B@?=9`?#l!6@Y?@ы ?5d?O?^D?1u9W@DM}.F8@?I{?X[?'R@?ac?ZǨ3O`?0Ӏ?2)@4RKVU ?W/>?W??iFޗ Zg:d?\S@?Y ?&`5g`@<@ʟ?Rl?A E?2`?BXwaR@QL3FPP?Md?Y]?=+?DYZ?V&?5j@R@?Si€?S0u 6a ?P/ @?Pm@? Z?>|?W"?A3Y;``z N DR<@Eu$Դ)!h@%@?Gj?BE,z@QF8@?&+ ?T7?T~?(cQ(_W 0$_?#Ԃ ?;!`?B?0% ?0a?= ?Դ?oA\ >NT6 A@?4y C@KEbM@?B)@?\?B/`?'Y?R?A?;Հ?`?`i*?JZ?O^`?IPIXm`Q׫N`Ldk6& `7^`?/u`?RC?L ?4s`?E@?.5_UAAX@?Z ?332aM7 ?E?$@?W2͠?h?Z?@@?T_H@?5KQSs?5j@?Dm?(XDK ) ?+>D?C?`?Lf@@;5`?N?U ?BҀ OM?^`?GR7* \>G?Ud/T A`IL"??,ZJ>@^ M@ ~Bϑu?O?3A ?.?S6?Gvi@94b:U?I?Vq ?@ 9=ߠCMKE8VD.-H' <XXk$?vPB ?O`?O.@FZ~ Q@?3?Tm?:&Y`Qh-TJrB`n?D?L%?Qj?X8?V?C`+w3!@?7? ~@2@'vi@?+ߔ?Q^`?RJc5bW@\8C?FI @ ?RT6@?At@@D?'Y>u\*M_ 8C7I{Q @]j`^.j?=;-23`?Bwˀ?;V?3 ?E`@4`d`Y?\x?Sa@Z@?KF?E ?Ka?dD`?a?K?Jw?"U`@?Dsr ?PHWu?@$_;C`9,?4 k@?92@?&NBH.! @Fr``]n;@S9! ?J`?bEb?C FK.B`0 1(Py`a`xa~@ZTff -?E`?6O?.d ?K?A DR6@A7@?H6 ?\-`?S @JSkdff b)@C5@?-Ia3eZנ5# BP??D41L??4N?E&:#`U&Fs?0+?G( ?H ?G`?U?\~@?R} G=?:LM?Sto@?L"??1)P?[ƫ?]h-Ds`bj]wU@`Q)ձ?&PB ?0<@?<"C{@^3 Nô`>D \y igT ?I6?R`?FC@FIW 0? QK{ #?'co?@O`Bpa@Wv?\6)?ag`S)@`8`?;0 ?4Q3?G%?M`?U&?P1?@Z?P?KN3 Z n?M5?. 2@3 ?^0ŮH\4uр֮"EC[X`RT6@?K?G"?SNz?\Ů>ܠQX 'R@?%F`KKY6TUNM@Pa@VZSi€?/e?U; ?Cb9·3L@9ZWLJd+@?F`?\ ?\%?i`c4URN'#Vv6W J_H B% Qt N@?+ ?I2@?E3 ?KL?H;M?;!`?4lT`'`@0;5JyR^ >@3|2)@?IG\?[qE`?XUe??۟B-n?Rd@?KLSTh\`? `?VO?@= 2I>LS>ʟ?R  ?L?.j3O )v`?VO`?'A _iDC ?\I$ ?aU ?[]?G׫> J\rA?9`%^@?9!h@?'A AJI`?MX ?ap@!Z?$YZ?<[>Da`B% ?Q2?]?Qp@?b ?3Y'?@=DgY`C?R0?W?B1o?`@G?0u ?P?D[`?A2?E?5.ـ?U ?e?Y32? `?$O:PP @?#F-@?(P@RYX4)`?R ?R6c<`Q?A?at ?KS`N@?8?PI?P` ?G* ?@V0`?Db ?LpH`?AC >`VE`Wt W4R(S-5,?-?u ??Ih?Q~?:?;L?X?V?5.ـ!;Yi`\`KFRd@V6*??S7?Rg0?K@@;ߔ?H@?K`M\7YFr`?>֮?I!h@?= ?Q%l:l?.& ?VY?RU?F ?R ?I@? ?F `?3bPPn?VU?Q?L0;?Nô`?F ?-R@W?G6\?RFP` ?E^?ER BA<B@?K^ ?!:?TH ?9IC?J&Y`?W?BD > y`L ? a?>& ?&Y?M]?S( ?:?MH' ?^~?K~QE D@E٥A I`8% ?1b?`OKF?5`?V|$?T_@/R `S|?%^?Zl`?;VI?H`?eD ?e@?\V0@?Ty``?I @'R@C@<}> ISϠQÂG0Ů?2z*?PZ?\K?_?N)MOv?NJ?U[(vN@LeF6*IT@>H?BEF`Z-w@+!`?A5 ?@@?V?WA `?A?L@?W`?Q @?D`w?!E;X`;@;U5Y?0ة?!ʟ8!5?0?L?Q?[o@?PP1kZHTF?G\Q ?PD֮? >@?@`@EM@QK@^`?`l?X+`PUTI`!b?`?AV`?B E`Y;`H F2 T?"  ?]i?Q:@KHaB@?Uɀ?\ @!V`<`?V`?^;@?AA B J9S@X6[`D:G`HG* SX@CK|;`?RH?GSUd5`C|6*M?.Š?+ =G{'K@@OȥK+JGJޠHKP?7K IGA`?a"?k̠?W 9h?& `?Ol!4zZlT@MÁ1y@PW]MX F `N@5 ?Rg0?[W?R@?,GTX!5?B?V_2 U>DK2]`3?e?B.A?VZ-U X?- ?'c?] `?bp?L1`?4q?M?U(?T ?8vHS2`P>w`?V?Rz*E`K`?;d9`?P?P?9v`QT`NzZ?):`?aV?X.@? m?:7NjV-?W[!?d@?T19^?E?6?$b 9:`S 8RR(SWE4@?K?IWFs`HY@?I?D@O(AJ?S?RJ 0ةO? RvSv PGh-E@I#ǀ?/F0<+} ?EY?&@H`8!5?0?%`??J#`W`=;0 AV`?Jx`?S`)mQ@J.?%3 ?"@?'* ?$<6Y@FR`?1(?]`?^?0JTG!~?AVc?-8`?(`?7: Rw ?68@?c3?X`@$_!`?DYZ1o/ `?X@?c6?T .& $1?R40?T8@?=>?&Y!9U @?)mQ@@ Lw`?(Z$`1.@?- ?Ou`?L@֠0?BM@?B?/ `3Cj@?K?Q3?4>~?R"e`?T-w@uH%O$<A`?T?bô?\B?GW,Gj@?TԴ?Q`KLX/q`3`?H?P@?;`E E>? 2 ?2O?8CATTƠK2@E WV> E5`PB`W??V~ ?BH#|?UqE?d,߀?V4.+?43eB TK`Pq@Sd`U8VAd3K LI5@+ ?a?0]N@?SP ?;@̀5??`?O'V`?N>:? >>ܠ?1S?UL`?GaQ`?Ja?`R ?O7`>5Yw`>wf@?S·?Z ?@?88?A5 !`?7?V?7CF?BH?]?V??@$?p?d B7T*[?`?`I ??? ?0 ?3l!?KJ!@?G#@8UeMՠ=+?@?Wѽ?WA ?H?KX`?R]`?=`?1`?7Y@3L@?M@?R.w`IE?ul@?A`?C@?X) ?c)`?U:?3Th?Ygc ?`W`?4?6@?Y?Mf<B78G* ?1oE&Y@;L?I2@/5V=GD ?Z?Ip@C[OQ@P7YEd?;< '!\ E@?PU ?>ܠF3@N Q@?Qq'`A`?@ G`?B`?4@?S@?NXF@XVTOF;Հ@@c<`?(`?l?I/?L`Qt `s8?Li*?Y'BJ 3p@CThMf?D8$ ?b%@?RC`@)2]`4q;+J?RC`?Zx`?D`w?Ǹ?D, S2@Aѽ?PĀ?@]a7?EM@?ȥUG Ty``W$-?G?F=G?V v?[ӷ?QW( ?@7Y>wf@:&Y`̙?)c 'LF:4A@?4lT`?%`^?M?SL? L1`M@$O?QS?R?;Հ?UkW@?`=?"U`Ud?6Y?b֮?` ?Rs?U?E 8?Qv?P=GR`;o@?^(S`?E N?4YZ?P3.Sh\^}`-DJ1@?AX@7K Xg?,wf@?`@?H Lf@J~ :2@;>DC D?AL`E@2g0H 1\ ?KjOAVc?<?0ӀZ1K^ @`F-@?Vq ?Q" ?)?C7?E?<}LC6]c`R6@EGh-T5T9S\Py`?2~`9nP`?)@?C`JN [18OO 7]F#/&l?N@?)v`H?4Ǡ?+} ?5?M y?XA<?3J?= ?:`QEu?=F Jk$Z_ 1o?4Psc1 ߔ?"X?LG?M ?YX?F?E=nA\ 0S ?Eg`?Y?LL ?68@?P?K7' `E?tI`7l )E@?FK?c@?X@F%`9G\?Y?U@M@]hW)PP_?7?OwI`W!(7D_`^}J<@`TuрV`BnN`?41?K? RO֮?Um? !`LL ?B`?EVl[ ?C@?B: ?Z1?]]?EP?Q?To@P>@^<4@$ k@A> =ChK@ Ve [\`Wvi@Xx Kp?L?M??M?[`?QH'@ A(?0X?IX@;T, NV`Au9)`? X?.?WA ?V7@9:`;?0 `6U9·; UL1`?D`w?T`w?TI?Cu>?C.t`?;̙M:RZ$@Z?"?P|$?8R`6ޗ ?Tx?I2@`?.?FDe?B)K?F?I?Š֮D[`?>x?880`=KBV?@X?Z-w@?K? ? 8/5>4?DV?En@?BEC.t`^ul % ?c?`M?*"?\q ?b1 ?CF-@<>!`1`*?7^`F6*T/֠3]+} ED' 3 >`7coG#@=|W`?I]?ZO?UF?;@4A@>@?>Š?H@?4b?Fr`?.& E4?I?D`1@? ?GW?B'#?V?ZI5%\`Q`$ ?iD/?/"?&+ 4 K-^pbҀb`] %^?Q\Q@?Au9?{?AQ`?@|$E WXCs??1@5Lb <ݠ?6qx ?C $Դ?w`?`}T?`?CC?M?S\@?1?>xR= >`?P" ?Qѽ?\@?[?;L?@@?Pl?#bF8@Bk ?,m?IPDf``MK ?@A?Q:@3 SG KpD@T%)NZ?A?C 8BM@AT?0?8 ?`1=ÁA?F`?]Ѝ?QÂ*[SԂ W < G ֮P@?G?,`U s7^`?Up?R ?ݚ Cj ?$@?W"?P?3 >`?:@%u5`?@`?:`? k?< ?#?`?K|?P?7,?^`?STh?V`?EH?'c>wf@- = y9 >D ?!Ӏ?,?5A?'?1ʟ?'Y?"?6g?>0?Q?T[@?.[Tʟ?N@H?G`?Ka?A"?0u P?@ZrB`VL W@f`?P G`?>)PY`J@#IjZwH?DV?Mk`?:LM?1?S?Xo~1SQ?/^`?<`D ?II?Fs`2D 4F_82ul@?D?>֮?P#?S@?/u`@`?H?WN`?E : O@?BF `d> ^`?6^}?Qݚ ;^V7@?aI9!@0;?Qh ?V'@?0)?'R@?R=@Ul3?;?@?R. ?BV`?S@?^?SA-??--?CX`?6?F?Eg@?C:QAUZ ?Oo8? Q"ڀRx#5@?U?cV?[ h`:, ?!=Ci`?2-@?J@Al3Q ??GA?a`?c#T? ayڠ^7Vs?2j?E'@?N ?JZ@?U`?Zg?9I"`_?El31^8 Ql>F/`Qi`%L?50 ;0[ _s@?E ?b'?Y48Cۀ@FC?7h?L@50 < |SQ @`?Pt`?K@?D`?S6?A.8YKׯ@['$Na?P4 ?D 5Zk?8Oc`?%dI$ 9v .t;|=@?%?2?6g?H-`3V 1{`?FR?6?a`%;*@HlSMB?D5`?"~TR`>6:?6NF?% ?*P &M,?1?`.?X ?6{?E6?S ?P@?4#J?C?T`_P?D?)?]@c ?jg@?]X? ^ހ*`J<-U@>=?L0 CtUT ?r`?NM?Cof@F2UD^?J"?_"?C ]U_tCYO 9HR@;%x BbP)A@?57`?T|(@?_?Vڀ5_``]2C1gp #?I`?Y?a?ac ?E4H?F ??ʫYO]ah1b[>%dC!m`?Lk??tM`JFW^C{R?U ?a;>R>Xv QSVs?R?UICfZ:A ?>t?S%<`?\F?X?Wp ?XB??ϿA7,:FW?p?LW?PёBUր?-?;0OgTv3?Aa@?C!m??=n@?[?U >6Qt#"-@?R]`?T@?J@2?%'@HTx_3O~v?JԖ?F@5,?Bv@?7Vs2V6?:D,$`0?g =}Y??J?[?S 4, QR@?1v?SQ?D ?R-?Cв`?[! ?ci?QN `)f@:UP@U "?+?@?U ?Ao?)?Hl?G(?Em?K7?277){ ?&&8<`Xg@Wj8`*Ga`P Vy`ZW@W`BT`?D`?G"-@G} S UGmPRV`\' ?ʫ?H/?F~ ?C(?- $?GV ?R @:`?= ~UF`?E諀?H'?6y :UO ?3:?S >MU‘@?w`?I>)?JS`?L@J^@E?X)I@?bZ?Z <?K]?S7`?Ỳ?9~ H_?8/?cm`?eS?L[W@܀_@`?SBriU."@?R?Fg5db?P:m?J(@A `Q@??X @?V`?"-? >)?T?Scx@HBXI ?C?aa`?H7v?3`?) S Ul3NiPFOJ1]?Cf?R?D!@Ni[d@99@j>K`?R?T@?C?F?A?%d?0"L@?/ -`?Vs?D^?DZ?Af?UQ?] ?SA-?Fl ?7(0"L@7j7#@@ o dW?">?R- NUsҠS RgX@W: ;w(5w P}G€AC@G5n@6@Tb`fY`X܆P}[Cm`?9G?P) ?P?4$?2`?Cp+F_"Pw`} ?B ?NZX@??:?BL `T'Sg?Q9 ?P$H?@ɠ?<@VTY:Z`?3?Qw諀HE???Z!?FqB:E`?CE?ds?]ah<UW`PJ?@N@?_?IcRȀ;:1?Nǒ`?!%dQQ;AS78@QoVDV`?Po?Fj78 X ?B)?a=?WHr`&܆?]@?M J٫@3Z`?Eu E};*F*4 ?C ?L#`?B?6?$fA󯬠?E?" ?@,u`?5,:٫@0;?S"`?aK?[?P# + S8I1?Hr`?A9 ?FXo?O?=@? %ߠL?D.q4?7H@[! Q0 3 *y$?4?%'@8x?6P' _I`?Q_`64@^TE1`?Q?V{?-6:Ng ?d?&y F ;SBr?@IIUނ`!͠?B->o8?P?VӢKVN`?:n?"?HOc`?KO?Y)׀Fa4PU8E:@Wh;X=?<`=`2 3/@?6]`?P?N\?Mt ?3T:D?/&`?Y@?W#@?R ?L ?v@#?-6:?/ʫ?R>?-?D.>!`T*@Fl ?O?] ?_2B ?I"8DsD@?&&?F]`@ ?<3!`?d?[S*޿>R>?TM* ?U3JYL"`D?8nZ.` % @R|PX`*P 3T:N ?P"L@?cK ?4R51`4) > ?Kt`?U`ŀ8JNY,aGI"?H`5d?TQ`?`?\?U~?PN ?@@R a,> ?@`7Vs?9`?Z`?L^P <C4\8Oc` M?Rĵ?@nQ%d5}?;3YO #C?9p?3<?Fq?Ci`B$L.q4? N ?;?F?RL `?Z?Y4?EL6D@J$\g?(@?. 4GR8/?'A?F9?CۀG@?BA?Rd/?5Y@>7 D?@?&毠?)>)'A; ?1]?&%@ % C34)>)?HZ ?:t?* `@?G ?L ?QƱ?FBK"`?#`? X ?+@?JU?E{^?B% ?MG`?&`=P?E@?VP@?Kq?Df?8;d@'`?Bet@51`S/e?0?W?==,/Cв`B`3o@4 N@;?Dd?QX2?X6?[Қ?SE?V-A ?Y. ?ArXPf?W?[O@?6R6 9 ?H ?E?? ?TI?G} C-`?iS `LO?P@?^z?M :ς *@?Ai`?L?f?M?G2?R|'J*@P# $~`F`+:1?1 ?n ?m@0% o80Z.`<X?H5?P2?Hf@?O?;8 6:?R3 `@Kɀ?*v?9\ ?:; ?EWGQf?7?1I3G(? ?O ?:vVc[2 LB|P+%ߠ?Bet@?U@?Og.H`?8@?^%`?Wp@?MK?J]35$Ar ?6y @֦ ]|Q? ɠ՗bF7#?@?@`?Al?V?\?W?Uhd`?Q)4@?H ?C? "CG C774@'LJ&`;%ߠP؀\La/OK? JT?7р?\PW?[?ED<@FW?4M* I`T@Q9 Q!`?4XcUB?H ?L3!`?E ?#`?14?? ?Fb?B?>3|U9`R J%Q`RҮ@M@?@J?Y?CYO Fũ?E?^p?95@?;*,@O4`HL2` X ?RI@?Ad?@?O ?G#@> ?6? f@I."@#?@Hf`?D) ?A_@?P] ?J*@?B[K ?Ji?0?B?X@?%N6j?0 ?Ii?[.@?6:,k?D\>- ?Q C ?D QTcE;?M'?C`JŀI@?#!m?! ?2???J?R?M?E^3T:[ U+m?a`-6:G:?R|?5 "G€Xʖ_^\ ?%d?ULs@?--]'@2+@?EnIFgQt#R SMY(`QXN@_s@V;?~v+:1?GG 5_`?IZ?= ,#?>\?F>!`ARgYGKf`??2B ?=0? q,kNダ?7Vs?SvB]`RV`@> ??<h`?+:1?Qh@?Z?'`b?Q?A]>b?LD`?.>g@QR|?SM?4?9>㯬?; ?D?W?gq`?b`?TQ`?R ޠ%0 Nx 4.@H?4 ?64?C!m?CYsgJX!b[*2T`7 Q%?N>g@?O/Ti Q: ?Rf`?_x?I@F Di>܆?A4p?8zEv\P{@?L?V!>o8?AAU?cB@?`@^c@U?@2CG >GDA7,{^1SU`P@@# ?K?M ?Js@?G2 @$) 2t;?B+@?T꧀?I& 󯬠9iU@;X@?4$FũZ, T:ԖN`es`a -y?/P?@?Jq=yG?C?3o-s0?L?OD ?6? ??dJ(@C?V?Vyu'` ?4i7t@(؎7`^^;3T:?EԠ?UЉ?S4z?A%?T]?RӀBo`1' ?LO(h@E?=, VA`L`?AS?3:?$G4 ?-`?EK. ?cٖ@?a ?;?F0,u`PUP`?̦>4> ^`;`Q?D}m`?Tj`@Me`HPUJ*eP"L@?R|?^@ ?E@``X?HOc`?Vˠ?N`?-!%@3F~ &D?DY݀> WW&?@s@K7N@?S?_ ?=G`?$?I??F`?B?M `Q)4@C97`R1 95 ?[?[>%d> ?Bȅ ?7V ?C. `?N*??7V!`'8@?4 ?By`?CQ ?H)I@>N ? ?O z ?[?@?'7NFPI:_o g#YHR?;%ߠ?*; Aq@:/PRUp@@b6/`?#C?Z@?W ?:ς ?RV`?WQ_`<@Rt?1I?D19?!?P7?[?Ro`?D`:"_U \<S?@h?P# ?=i?FW?R@?P`4.?5N?PD4 N:=΢Fv@Q0J/z?`?v@)4> ?DWS $\gG`?97XWS)@b?L?AHR@^/`X<`>?W=?EԠTvab[VDg ?,#?6f?@Z.`M$r`CQEZk???1`?㯬P< aNq4?EJ`?8@?Ar ?Y?Yk`?]y?b?N\L= ?H@?+P# ?5,?eu?]n5bVs6@?k,UL(@E5B 3?G?BA@?? ?Ob?Q@?X/?XS2?Co?9v ? ɠYh=d@BM ?Q?2V@Wh;Q_`Q:@H5EUW@?Vu ?[`?Qϕ?V?S@4a|@Q@JtFw'?Pn ?Z@?Z5?W@?0}`QE%`H@>-`?$q  EDBG?F]`?L{`?0`?I?Qgp ?;]?!{`>vI`P_C06?@4 ?P :@"?Qπ?[t`?A`;5`?ZS \u,S A' ?4 ?VJw`?Ph&Р:ς H@%?@?O@?V8r`^"@M?L@?AKN@ WRM?L8?/ GC<3T:>N ;r <?V=?dq\?MG`C` ?;?Qπ<ОL@?"t?!9 ?9r?Xg ?V?QN?W ?CNl @HL ?B??6qQ&4\g?]tu?X?3 ?6`?0@`NՠUB~FB> dWQa`N1?OŖ`?W?Jݠ?GV ?Kr ?Wv4`?QQ b{X@= ?@*?;Қ9U2  ? ɠ?{ ? @6܆LC@4R>?:P ?D`?M)?H@?2y`I٠U9f @J?Dk`?NE?Mc ?E7`#:2?:?H`?/P3oP'`VJHf@, ?*m?C ?E@?M?UUW@?8`A4?2+@?Q?VA`9Mg?0,u`?ZJ ?Z; ?I"?L?Qe?:%b(Tx?6?Dč@z 9r?#E?{^?E*BȀWe?R ޠ8'b]4?4?[P?Rn'-`EԠP% \h`S ?%@?43`? ?Gz?Ru5n^8 ??Z`?P1 `(JN3? ?D ?#5@AFj:@>C{PS K@8?:/,. ?Sqp?Z`?K`?@{4?(@?-`?Ip`?G?D? V6% U N{^a ]`?, ?2[K ) ?DJ?KO?S-?W`?.{^BB  Q+RI@5?F?Z[`?W`?F]`?A: ?NH`T`V{ VEbCT:?"t?6`?(/?PI>1?P o?Po? 1K H-`?6`?RE?I?59`?>} W__K?0N@?Bj?7[?9~ ?M?K?@?7#@?4?0J?=^ހ$ G?IEȠ?9֒?@?O?XV?U?O>?1]G1*y`B_ !;Eb A2@?1?3YO 5"26:DJ>?L?RB+\E6?T?T 19 ?9Bȅ ];NQ B_ ?*@?8}? H Y\`ed``Jς >՗bF`N_l2`_?3({^H_L.IR|JG)`QONH.]?Od?W?B2?Qϕ?^?Q3]`?, +%ߠ '?H@?^\ ?_@?'U(^ ?.XX@=;NP@?Mt ?>`?; ?WH{`?K4IW^RI@?@x?`G!@?]<?Ik?AX?:m?0Z.`> Xcf\#2F%PB2#h?^ހ?AAU?C{?C(?@a@DY݀Zd`@s@?R?Pګ@>; ?S`?Vˠ;D[Yb= ?Gc'`?M@?B ޠ5ނ`=΢?C?J!)3NnA-9P< )4$R>A P@9ۧ@ `?>ǒ`?J ?5`D,$`Ce=@c 3Ef@?=?E9`?0s@{^?a`?7 ?R?S ?<8!/? N@?1 P@IR|V@?4?W[N `E?@?3YO =xE`? ,. Q@DɡQg`d 7@)R|Q0U?N%`?#5@E? ?0?FnAoJAB`8?Y_/?` ?:Z@?=΢?[@?LGsAFEh @\?@?I37?+?e!D?aoDРS`MU!?Qr ?K`?+H?[E ?Q̀HT`N/)B~;>?Jt?Q4?Pۺ?Jg\?,@?DxX?VW+`(Pn?8E>4@?Ci`?S?,Io Ck I4Rk>㯬?OA?+@D:7@?GR?X=?6? Ix@9?C̀?KN ?M 9kR?%ނ`?6gS[@Q-=xE`Kl?=xE`?Hk ='[F@\Ul@A_@?3`&`MMS`Nai@?F ?@;?C?Ni@?PL5?GR?'AJ`@ZH@?N@?^n?2#h?+?Z.5@?LD8h@ w(6bC?O>?OZS `[ ?Rw< ?WV AX)`?W`?I"83?KW`?^a?N.{^Ccx@?a`?UL ?P F @: 2-@@Hf`?7V?9٠? "OH0b?5N?PS?F@?27 v@VO`M<?N ?1>ˠ?W?Ul30"L@XYTBG??ɠ28IO@;OMY& a?Ra?H?J@?Mj?Al?At#?FP?Fv@?N6`?Pil ?&`SԁS?I~ ?[?? $H?:Z@?D?DZ?8Oc`G`I ?L?Nx R(}J2?_?`yL`65諀?XI ?UZk05?LL?S?0}`6?`?!K|=@Y G&0?9v Dc_g2o`䳠@4 'LJ?*P ?B:E`?N?> B Nx 6{?JK?To`?&NFRSqpC? ?Be@?)R|2et@?'#@?>@?8n, WhUL ?$5`?Rv@?V?Vp?O?V? aU~%Ԡ?*D?7h?1?$?*M+1;?142M HV?&%@?T3XU NM!C@?G5n@?=l`?;O?VZ ?L&n?, ?O>?%n?'j ?;?EW?"ȀC@?4@?R@?F@?S`?J?Tw?Z|7#X.]??`?[?QTc?G)`?Cm`?@ ?J`?@?K`?N?`?]K`?(nI" ?Kl?@}KQWVs?>)?]l`?N8`P_CRe@4 UD@?YX?U @AU ?O?V΍Y1v`J`?I?9@@U3Ol`X54z >諀Inm `@] ?5i0?/P?C =@O*@?諀?F ?#!m?,u,?PY?G!;*@L @TZO?U R+@DC??`?(?H'?D^7j IC>`>r4^? M?C+ ?(@%CT:J>SV@B+?78@?%Q P@aXW??" ?72"M r; ?09?SYO ?Jd`@N'I1BT`a`?35@?Uh ?e@?ct?\0 ?_ݸ ?Kf`6DF`L#`Y5 ,h`?VoL`?Uނ`?Cв`?/(?MɎ@?Z?ON '?#|:P(EHƠX3r`V=6I2 ?;:1?57`?@؀?Uu@?Np<S7j) Sm`Y^@H3r`L+W Qh@??U?[ ?Q?2~S=^f`G?0@?B(}D$Kz?J@?U/?Zm?Q?IR|?B `, L N\8+Ӏ?P@?cd?ds?_@?SFB?2t4 @?9KN ` Fta?Mah?S ?V`?P5Y`?@$ր?8h@L+\L@= ?=}Y%H`Jlq 4?0?0ɠ?=}Y?O(?HTx0TP@?0?F.1 `U{P??I1?Y^@?Jd`?P< ?W+ ?Fe#@??`?H&? @@;5`?3?Pk`?9)׀B1=`1?+qFv@C|?IMgBȅ c@Kl?>q4"Z.`>Co'?E ?P#`?U|?Ng ?$?$=`?7T ,u>T?6{?F&? E?( X ?@6?;g?G2?A>C{#?Fv@%bRnG`?0E?CQ 6dPm;?#?AU JQWKy]ڠYx`0,u`0MAER?F?b}?aU ?Qa@?Vط?T@\M'?#`Qt#N1@?1gp ?S?F%@?:2?Ug@?R5@QtS&Q>ˠ8Oc`?9f@?O?PE܆Ew ?Z.`?X ?Ay8 RE`@??Us?Tך`&`@6Z iLam&毠S+ WA?; ?Ew ?O{@?[RS?`?L=UU ?O^`?\ ?<UIo I ?I?`؍?Vz?; R>?I4?I1?GN 4WS  ?Fʾ?>t!C@?Bv@?C:/F`4qL3!`O?`Pf4=`P`?G ?v@@ɠb`6S[@BM -?/@?< |?7䳠?/?-`!/@?*n?9U?1?B7 ?RL `?X/?Z~9 ?CJC?78@?W@?@@?b?F(?L?@@O/aUF?6 QZRw< TC2-@?P?<31?A4?KH? r7#@?U?ap?B2?PEQ5P? Du΀0`РA`7[?J`?6:Y~ WV M$rQ Rr'P` 7?(E "P@? f@?^F?XAj>R>?3 ?-JX>f@?1=C^c2>+_`[f?-@?P+0@?4u΀?8c?El3?)r6:?D ?\?RI-J@?_`?[?= ?$\g4Р1q@?9r㯬CfB2(h@?E`?=<IMgHGĠ:5"?J`?S`?EJ`?S`?R`?&`?+%ߠ?!`EPB8eI1v`X`5n?D198h@@>=@?Kd@?M @A RGJ R-J`EUW@8@?<@?GLJ?B?Z?@n?,#`?5N?Q?Y@ ?Z˲?QYw?> ?O@?L >㯬?LS?aP?[@?@@KN X??C34NH`Pɠ:y$5`?D@&b@?C^c?OF`?R#hP ?@ ?JKky6&D1Q;?Ͽ>rQL(@D3r?.RN{^b?U*(/,#"M &P?f@?9)׀8'D<`?[ ?U`b?Fb?Jd`JAB`QL@HZ N"@+?(5K?FRI@? ?R. ?R`?N@?Td?P_CCL`#`Z@'+#(Mt ?!{`?K @!N ?Y?ѻ?=20ɠ>tBI A{^?4.?D!@?Qr ?R?H\*d`L?Bet@?a!?X`EK. 1@?NM?FdIa̦?Td? ԖI܆6܆C ?Fq?V2`?E@>N ?;Io?LI?7@? "?E;?5_`8 -@NM0b?A{`?<?*; ?~vKN `?@w`?F?R7 ?Rp?R?P킠?o8*00`?T3@?BQ;*?Q;?% >t=[K BRY@:@L @E K`%0 ?B ?F#PbdD^eƀGPRF? ԖDM* c0?hM{?Ynm I \ CzTAH7t@?Cr?:tv@?-^ހ?@19HR1@???Q?N6`?El3.`T @9`?VK?U31@O?& ?Su@@?M1%?E?Up@?[Š?HZ EC@;l?M\T@?HP0CoK|=@56?OD ?I֒?%d>!`EsҠKɀF4?B?4\g2[K ERN̦8E:@??@?Q F%@'ڊ?N`?Y?F{ FS[@? ?TH ?諀Kw@?@?N*y$+Қ?Av?B?@?H?E\ ?#??A`?8e%a`Р%?I?[d?RJ@?0}`?+N ?E?E@?"L `?/?F?A?A?=ӷ`>6Kju@Oe?B50?9ۧ@Oᇀ07?Pil ?I\ ?<@?諀G F(???Ͽ?)7 1 BR?ZYo@R6vO΀^s ^n5u ?9C>`EDOo8?$ @Cca@b?dI@?\M`?> ?Qπ?C`0dW?.}?,h`/x?2?0n?2 ?M)?P@?0,?@0;P@T8C?4FYgB ?5_``??L=J?Fw5@< |Zk?A_@?3r0`9K~ǀNg * ; P,@?1R@FSJ> ?6?@ =!5DE'@P,BA,@$?C ?W?U!@?=<GQ_`K ? &P@ё?Q;?\f`R>H`?&`Y@?G^?Z$ ?R3 @n ? w`= V&`M@c >{^O΀OeJ4X @ZkR ?3cx@?QJ?= ??m@?Kd@?Dζ`?;D[*mLp:?E?S?P?@;?E9pQZXbpeU`Y`?N ?E@/XP2?&`=c [ X=?`?;X@?8JN?Q?CVBg3?A-?I@?E5?(?9`?Y4?V<8X)I@RE`?!N `?Es#rFl@?'>PHf`CKn Hr`I@?@?0'`?9HR?E?=@PBr'H X 3T:3I_/F9K xW]P?@RgQ\?,#?E_`?7?;]?,<UO@K ?7?T ?D@v?"`_?6?&`9MgG`Lcd*; ?#/P?Al?T? % >q4?9C>`?&毠SzT\B_ E%??~v:'۠V!;?B8EP5;>Z@?E ?D3@O X{I`QuVF4~`̦PNH`@n Lr`JP K%??R-@?K?:b@?(r`?19 ?:d`(@EǥN ?G@?G-`?9?!b[?V6?#Q FJ^][I94!?K Z1QQ5^UCVA`@M{:2(@&=L @D3@?PQJ`?_?OI>)R~"$7} \' Z@B-y?EԠ?^ ?RF>Z@?I?NT8 X :޿?4M* 9T-P8؎?;O?P?N,@?BȀ?8?E?C34 %ߠ8@%!R@J{WqTWS R9?CV*Z@K`?+@> XZ^x;q?R@?\܆XGre@$րQ Bv@?:1??Ŗ`?@"7 9 ?EW?C/@?Mk?\%(?P\A4E ?P[ ?c @?PoHz? ?B(}Q_`V#' ?+%ߠ?<A=Iۧ@?$ ?14?A]G?Yʀ?Pj@4\`?EqH`?F?EP|y F4? ܆<B`_>{^?@`>`,`ڀ?7`?;/F`Bet@?@`BI 7 ?EY@( X CJ??&`?XN@S@>Re@Q_@* `@;GeD'S M. ?Q`?b G@?KU _:UQWre]p= ?T ?WW?WS?Zc@?G?R?M!?DMf}`HW@?IEȠ?@Tx_%T}m`9k?4?Pɠ?Z.5@?Q:d`D?0E E;z??O?85IsQ>ˠF?,C@?ESOm@[3YO L2`d]B?$p?GjKQ^E?& ?G:Q `N1%dDIRnP֦ E`?1' ?J{?W@܀?L. /̦D1$ @?B+@?Ia?I@K|=@K 6*?+/J C=^=s0Jv@-,?G=?4@DWS A`? P@?z ED3`B_ {^?56?O@?`P1?"7 ?Pߊ v@D$6fE`E 3 @AH Y`Q?N1?]c`?R@? ;-@?'쓨 > ?/2B ?W\͠?^M?\u,?P#`? L> ?2#h>@V@HE:@?P0`?SPk G^&ESG <>f@?K]?Z?LS] 7#jE?o8?FFVsJ|L0 ?BT`Dk`M=?3K`dXkTR$R@?'`>?_D ?_KQPUY&J fkf```UUW@RI@Lj`B`?w(?CE?*`CrE9`?0"L@?BV`4EH1H V@PR ,C@?F܆?V?U{q?S?H Ic\zA@SPX@Q4"V6)r?%L?.p ?1b[?R+?F(A~LH0SG [! 0?R`?3YO By`?U?Sy?Swʀ?2y`?8`?UԠ?M$r2B ?V`4R>[Q;?KF@?Lj`3D;1+b`KQS B$FVcG{?7?@`?J ?Q?IJ@?Mj?P ?(r`B`??=?V?Q ?: `@> `@NtZ> O`!?G-?OSG=PXrI@`!?<@?:; F-A PQJ`?I?Vڀ;Qz}@?FW?9`CS27 ?E'@ ?S?0UT cG N@T?.t?I$ ?P@?g!?`䞠J :D?#hanl`f"u`SLPn T|(@O>S@Gߟ ?G?Oq 11gp ?9 \ ?A9R|L. ?4f?T ?4 L3!`A) ?;]?C ? w(!`R ޠa [q`P6 EmAS?0킠>㯬JT@Y?LQ?QI?B8:޿a{``N {^?1 -@?07;*YHRQ_@C+ Rp`X^ N@?; ?L=?C@?\T'?b*e 0# \h?G?W?8x?Z?B?S|7?Q ?S%<`?)?\?j@?^;(+Ӏ?K*?XE.g @ɠ?45`-6:!I?CQ@6/`Lu,?9i?G[>{^?'?f@?BA@?"-JvL=J?/?N?F=?4 @1q@#?P?GvI{ P[`4, Y+]>{^?4k`?2$?`a*?Z"(<`?Aq@?ME? N%`%);`Ga`LW@,u`9)׀0N@?:n?"#hLK(j9C@?0dW?Tt`?\ق?H X B :Kko80x?dYNb1 P@! KJ^R|??F`?KH?0 6S[@?p?)r+ J%Q`ZC(?SƉ@?/ePN@<`R>Lh`G@Ns \U_eUu@?Y@?Ic?a`?6 ?S `.K`T!@?H@?ah?Qn`?D ?]s0?\/RR>F@?3cx@?N4> ?Qv?ZL?U|EDb  M ?`@?fY?PV_?؎?Nr?J599@8E?$) >%d?L0 ?`N@?Oᇀ<О{^?$p:Ԗ)`f@F@Z~@aQ?NC{?Scx@?4^?<3!`?K3?H`?6*f@?A?[?aH?S K@@w`HTx?M΢?SC<#`R{ ?.q4WϠah1?1?6?\[?Pq D=`?;?Ru3FLˊ@Qo=!0`RX^;[@R?:v)7 4=`?E?Oe0}`?R|H9p`?7@%0 A`B Pj@T Vx0`R2?/ ?T]?P?`?9>) `?KN ?e[ ?`?D&I3RV`KD[)>)?QV@?]?2o`Q̀30?9. ?I?Q&FL+6{ 4`D CP[sE4Q?C ?B?"?P ?UM`?;?O`?aG ?V^c-}Y`2V6?I ?R<;D[aJJ?W?Fq֠A?7`?M $=`R@ R=?8Oc`?TeK?`ˀ?Y)׀?#^c? ?CO&?&y .+?$) ?Kt`?N`?!`>p>?u '7"j#`?BV6?Yk`?K~ǀ>/)$H?Dč@?@R7 M?G+E ?Q;?.g ?X)I@T1C@?/?. ?=G`@WE >?Vx0`?R@?(/PɠIx`?M'?UcO?/eEJs@󯬠Sv`AAU?WT@?Cв`Q .T; f# cnD ?8m -T`I'M@L`?< ?C?O '?PUր ?e@?b A_@BȀWKVh@\?19 ?Hpi ?9a4@$ր?4`?a ?cg?@? 7?Zg\?RH>GB!I@?+q?O?X@?W?P?NM?:Ԗ!C@?J%Q`?X@?`Ii2RUb IO?5F?1`RMRGj ?%Y@TO`T?P?Tq?2FB >6:?V4@?X1?Ti?U?2?L?F毠6]`1?T꧀?[8?L??. ?0'`?1?."@;d@YH@?S ?AپZ(@ZBGEHQh@BT`?'+?!X2? N ?. ?Ra?J@?&/`@7KF@VsY \ Eb?Bet@?Y@?R 7v?{ ?\5?W\͠?<ճ`?4?0Z.`?5, VKGX@?SZ`?:RR&1`[;`?IU?U?J/z?I)׀?+H?z ?Qr`?S1> F~ E? PuZ^xAi`?UcO?IaG2M U h^Y WnK@?6`?A"t?En?e'@?`}80Z.`?\h?X{`, ?W_?`[ ?Us?H`?E ?P9?Q6@?? ?8ݣ ?3?`M V`A=L SzTVG?N `?S5 9W#@KUK?Hz ?%8P?C"`?81?=@?]?VS[@?@n?Mp?1C@CD??r`Gt@9{ ?24@E̺`; ?59`?P?X?K IO@EH?J?&PX-Qy2J"R F:D7`(?P?O?/@+H9p`T`ߊ ][RRg OU =@?T?_<?I?J, ?Uu ?HƠ6d) !`?2.t2T`?AC`?(<`@?=Ew?N{^7o;b`?Q?VY?F.?,#Da|@L0`?0?Mp?.}DxGB!??I3?EM`?&v@JZPq48MuR`A DLW&`?3Z`?N ?S@?c)?O2B S˝Qr`?0?Hl?5_`R|?a`?# 3^cD$3&?LD`?_K?R>7=l` `45dG&0Y>)@?]`?0dWV`>9^@J%Q`A P@U@TeK?D?HE:@?*D?L2`?9I<?*Z@?#GF`AAU2<?@P@?C/@94UV=?Hݣ ?[;w?^?S ?K@?RRg ?>%`9?z ?`O/VcL2?G䳠?H<`>>=?K?D^?/@Z@QH`2Zς C`q4@@L@@v?#?Jt?P@?6*?/&`?DJ?E?Gt@?GN h`G[%0 ?&܆8'S`axcȠWp n?C@?45`?<`?V}D?f@?_0?;r 4\R`VBF9@7?G`?P6 &`F%@H`=!?J`?V-A ?'䳠DKR2,L@?FD,$`_mXBK`JbHM="?VI2 ?QJB`_?V ?`?Q@Q @Z.`Qea/Mj?VoL`?NH`?"M ?Ql@?0N@Tq@JKAfEF?9f@?Bet@(@%)iDUWN@AlHK@J;|=@?<8?QR@?Ph?Fw1X2TG䳠?!I?%?Gߟ ?W?Q?FP?E}?D ?I?AN `+w(;.?H`?6I2 ?S?P3 II_/U}VI2 P_CRUQWLZ]3U`@b?4?01?E9f ?_6?W[?P?Xj`?@YA P@?4WS ?8ݣ JA?0UY@9>C{@??#Q U?GG6@?@`TfP) ?-@c M\h`BF>諀@ TVn@?J@?LC N ?J> ?\0?R 9NiY ``X1> ?Gc'`?U ?_&`?0V?"L `?W?69>`AE>4> AP`Pil E$A: <ճ`?x?C X F ?0ɠ?Aq@?A??&`Uw S-?7`?%F2M ?9`?Jt?P?R?P-?N?>R??8Oc`> @FA0ɠ?s0&P?i?Q?SnKX@'j?9W?7L?@'`?5@;lBR>? >?)p`?v@2-@#r>@?5?P䞠?TV`XJNLzA@ɠJN?2V`?@il ?( 9v "Ȁ?5b?3/@?W8?Iʠ?Vs?S,@?QGR a?n@W?7V?E諀?Mk?-@c >㯬480}`?W@?^K`6 WU.PTE@@ ?M切?>WA`P)ZS`H?Hr`!`T5`H?%Zk?DР?:~9 G2V-A TT~P킠 k?QW?Pv@s@Q ?En?[ ?(VI2 Wc'`C->@1A2@?(?J ?;w(b?@dW?LIHkTcYUނ`??CQ@?Z*e?QYwXK@X2-@?=`?3+ 3?`? ??/?N?;w(?&Xo?@?/B@0`8l?@@?EJ`2H C!mANF; x?9. ?E}?  :'۠AXKKҚA H M3<A_@U Wh;I-@?R>:"H'?1`@xR>S-OR+SE?3?E@FXP? ?Ck ?;0=&`OB(}?DE@?DsSPk ZQ?D@?ap@?PnA@+ ?O?(` ajQk?7?C̀?DI`9?P@?A_@=0N@B?7`?GgQ4[*@@9$R>5@?@?*; ?@`?Q ?/(J7@Pb^bG8@?P?S?Ik??? 1 <`ڀCD`@dW4!%d@[8ce`]qNPn W9 ?QW?@] 8JN?B+@?Iۧ@3ګ@??7V@ E>z?4H?7o?>R>?$) ?5_`?܆77?#!m?LW?N?D?#^c6P:n? `@?Dζ`?7G6@IOQ#@HVe#@C0?F?Gt@??X?5;<QFjP`>*?PE?^H`?5 "DР?KB?[?HZ ?14?F@?Y8?^{^?1 TSrT, L?Q?TdS Yc?7Vs?A-PFVB?@H?Z|?M @_lc?G`?ci?CZ`WT$?9`?L8E}[@Yx`Zlq Q2@! ?3?-@B IcD7 ??W#?]AC@Q?9G?Dč@?F毠?FU,?F?GJ"KN ?@) @,u`^p??\?CT:@?Fw?7A6 Z.`?.H`?/F`?J?R р?@x4 XʖgڠcXEB`\ОQ?G`?D;?@?R?U?: `@?N%?Vfh`K7@q H\Di ?)?>K`?=?=&`?64?K|=@?Y?UUW@?CJ?3&!ID@??F`'`RV6 N@?HY5_`YiXZQ\(؎?PV_?Zy$?I"8L8Z> K`?C. `?S&?4fv@?SC?YbUKD[?7j ?FR>?LL?VӢ?@؀՗b?.̦JO~vS*y$?B#h?43@?/ ?Q.?cв`?i`?`?=}Y?9?LR@?B`_?5u ?Hk ?SYO ?B8>q4 ?DxX>%dAl?L[QQB O`>Ђ?H@?N?]$r?Ux Р?.4> 5ނ`2v@?V.?b?H3r`HkTDO??2<'R(}U2;b`$, Aپ?1q@?R1a?@*?>ѻ?\3!`?b@ ?X"?;3?C=^?RӀ?@b?+D[?I֒?,UO>-}Y?E%5 "u ?_N3@?Z?,`ڀ?A ?D$ *޿CK5`?6`?M΢?51`??<`?Vs?2j>j?8?SA@]iPs@?14E@aWZ=-@?)>?6S[@?J5?LQ?- >?7?LL@?IJ@?R?XϪ?6*Ԗ?Q?Zu?M4`?=2?@?H=?K`?9@?-@?A@`=Ɏ@?D?R" ?4I?R|?7 ?>r`r`<#`UݠTxXJς @!?$9HRQON?;l?Y?<3!`MQ<?# ?F`> `@E ?1?9+N/)A ?QZ?<. Y Vd?(؎#T A;?G?N?Q:@?T ?R?P֦ ?G䳠?!X21SB`MJ`Cz@H_=Y?A) ?Kf`?E,?V ?^Պ?P0D?!?8`?Ql?XV?R  ?5_`?OSG?c@`?c>?K?@9Mj6v@?Vg?^ ??d?/?S> ??yb 1?PÙ?R`?0??HU N ?EC@f@?#Q ?AR@? ?X*`?] @??7V4M* F MM}Y ?G^?S/?V?+:1R_I٠?Jg?Y? w`Q?,V`?M4꧀?RӀ?Fb?'8@?P4 ?Y?N9HRO #1@?PO밠R" Р?C0?F`?R2?T ?Pw`?R`?S?EA?R(@%??P䞠?Q) 1*y`@b?S ?b?Qy8 KqO?I@?d:?c0?R?Fl ?AR@@hF4?A?R>?R?W?/.+'`H&y ?P?')֒?S?7@WѦ?n?a'`?Q6@@7 > 2L `IB$?Q?b ?R?9. ?Ic>IMg?1 ?Pۺ?P) ?Sk`?7@J_$f?G?O?X^ ?S@??m@?9٠?C`AQi`-`?R\?_X\`?Xc?P97 't@?`?M?0`S]?>6?b>`?A;F# Ga`V2UA.?Ad?M切jQ/F`?I`6?N1@?Zv@?PL5? w`C(G(^ b%d?,u,? ?=@ I3Bȅ ?@x?>C{A%dGGIp?. ?Ul3?UU`?D6MD) WMxE`07?p?F=?Kg?9"3YO S8Rc?&`?P.?M?J/z?%Qn`R?@?X?<ˊ@NT,$`D`?Mu?Z3IH?N"@?RT`>+?Sm ?E7`9"59`?#?`?&?:@9?TNo@?aZ ?=7+?KN ?Nq4`(E? Ԗ?IdD?P J^\?I?L ?@?+X@?>R??d?H5?R G@E;P{@Р?%?&v@NF7T ?J`?Kju@K ; ?1vDf?A@?]t 2\`QTGY\ T=`OK$Р5@SB@N?> ?C ?< ?RO?UN?Cg@G䳠`R^ダD;@UTO%?"-?K?Q`?Hx%dM[]΢UL`ڀ'j ?19 =O5@=xE`2jA>ˠ2Q"?8^ ?SB@?X4?G&0?!͠ `@<. n ?P?U>?$Q~LRp`1gp ?) >!`??j$@?QJ9?HOc`D] P`R`?)\ A*y`?9a?; P T~?8 ?UM`?B_ Y^%`@`?UN?[3?РN"v ?/M;@?N ?U!DXq@]qRur?8n> #T:?='?Lhy@?:D?&`Iۧ@?2B ?P@?DO?$ ?Fq?P`?Ph@?Vyu?IiT^8 ?9?f@?dH ?09Q7VsNxӠ1r ?Q`?5'@4 @?N4> ?XB?Fv@?D,$`%ߠZN*V6_!`mjW ^\܆$ YU`0,u`?W}`?Eu >j x5d?S`?`s`? dW܆?Z`?QN;w(@n b?"V6?-@c Mk[w@Zr7LJ?C|?6NF:`M}YP[sP@TyV`A`?>?3Q ?8Y?W= ?V2`? E$@@=c ;?@9+6R?3 ?R<?Qw??F`3 ? ?E> MC"`?D\g?\!?`_ ?M!CVG?> ?VG?Q@>bB#h=PCB-?/e?>p㯬?<86?O ?3C5@?5"?1{`0'`9p`@@V]`]xE`VP`L0`SP?Dz ?P@Ǡ6]`:n?- ?@?X`?U(`DO` ?e@?e ?DC? ?Tv?]2?S̀?:, AQ@b?V?Y `?J޿?`_\ˊ@?u ?L#̀RҮ@SCR}DxX?Jς ?S@?2Q"?:&?P?@`䳠?"`_?Nn?VY?JU?D, ?Pۺ ^ހT$f?U ?U7`?7h@dW܆?Xbp?aR{`?a2?a@?Y@?W`?ZE?D6M?!v?P,u`?H; : `@< ??>}?FD??7V?D?FN6``BF?HkT?`2@?7a`?Bt?>@R>Kl1 `?SL?PQJ`?%d?7j ?HC?.{^0FqXR^H`N ?B`?R-?F/`?H?WK?VJw`?<#/>Р?<3XʖY@Qk?QQD?,k8Z Y\ G` n ?<?MO"N`;*@?4R>?$\gE$X Z10?YwQ ?S4z<:ς ?7A?1fN IcU n ?_U ?`2?5` ?UA?\} ?T-i?U\ ?T?S-?a-?bρ`?Na?3?`X_ w(?]IG ?YW?Ph@Q;;`?Kׯ@?S9?f@)֒?>?? ?Nt?T|(@?Uu?[%ߠ?US?Q?P@?9?PL5?dY݀?URNWBj?#?KX@?P'`?Vl ?\@)`b" O(?OSG?$GJC}> ? 2PN@L?HE?F`+q?I?Y?1 IiDxXN\&nW`>4> $^n?H_?Wp ?P&><?7LJ?O&`f@S@>@?T?a]?Xz ?M?G[?0?4H?D, B>@?Co?06GjT:QuhS) Kr ?4p?6PEdNՠL?ʫ?8@?@4 ?2et@?B?=T`?#J?9Mg?8?=4C@}?Na?cX ?:f&Dg@RȀ?5sҠ?L=J?@@Ǡ?K(j?[`?8!`YJ@0@Ǡ?XB?4GSV!YA@RZ@14D!@K ?!r ?>?=<?LT'>`QA' H'T-i:m?)9֒Dč@A?6I2 ?KD[?H?8؎PfI2 c) ?; ?Xc?BL `4? ?/0`?pFNF7 ??G '\ 7_@Wre?!?`?M)ZS ?=6:?22T3`gcɶ??ʫ?\#?6`=?>p?Bȅ ?FR?Zg\?`n?<SJJ 6/`2`MR+ ='?EH?I)׀*d`L0`R> ^\Y`6{ F<~]];ZR) ?Aپ?S&?28?27 ?P(?M ?8h@>܆6 OTܮ7?;qF b@a€D1?KW`?R@?@% ?;r ?BȀA `U@?6d?Yʀw`T&?4\K~ǀAI, ,R3D'1(^ A= BmVZ Q{`?Kt`?Z`?;q?K`?DH?,&LGV LFv@[\ճ`(?0E ?"?B(}?$p?4.?T'?H`?:t?Eg@?\_@?Z, ?4 @D.Ux QJ?P# ?a$?'YtF3cx@RLk6Fʾ?+ ?Vg `_T?3?`m ?Rw< T3`P?-@:KaJ܀i[`Zr?I??U K>㯬?Nc"?Y#}T@?F毠?Z?$N >@?64D\Hpi ?'#@?=@ J?A?- U(dQ:tLzA@?*d`?MHZCO&?E,?D` 2.T??JS `?G[G€[]A?V.@?S=2 ?Z?^IՀ?Ws ?R}? B_ .T> QƱLw?S?U~?@?Q?Pwd?HOc`?QI>쓨 ?] P`?P?`?GN ?^ ?U\ :Ԗ-`?DР>f@?8ݣ ?P`78@Q?$:```ZnDРM 4, ?Dq50 R]= 0E ?BN?7`?P{4?]'@?HC=`KIo(r`? '`Q R\@?Q7,?[**Z`Qf+?,?,u,FNF1 ?RMR?TW?.\7%u 0,u`Af?(@?KIo?Bt?RO?P)[#U`dI@?6g?T7>W0?Lj`>՗bG ?@Y?P9  ?Eނ`5'@^Ƞd}m`ga_.=Y?0% ?+ ?<?G?V(,?V@BaR" ?G@?LfEVEb?31@?V9FeSr?R?R@? # `?1C@?P[ ?2-@Xq@X @? ?Mu`UJ?F? ?I@?B`?L ?G?T?Y'M@0dWG=?R[K ?KlEW?C EF@N>g@?H>/e?XC?Wa`D19GG6@?/F`p?`?E*(0`2A?N4> >ګ@\zA@Q{`<`B`NՠCYO A)p`?@@?AAU?# ? TÀ@N@?V4@?X ?9{ ?5@?Jm?B2@֦ Si`?( ?`?Y*Vs2L `?@?0 Q' TO`?!?Mn?@ۺb6v@, r&/`?5d?O`?Ub?bI@?XZѠ^@bw?S̀?a>@@?Jy$?R `?>̦?E\ ?HB1 .}?M_?C`%Zk) \ R@_U O@1>ˠ> DA9 ?3/@?E F V@1͠?@6?&l 8Y@n ?:FW?Tq6:\قQ?FC ?>pCO&7-l`Dp=FS4?23D\gH`M切KV#TfW6Ix`??Zn?a_`JNPJ?F?+?@a`ph` ?Q?e@?Ix`OtM`G= ?P *?U$?n5K. ?B`?64@3^c?&܆?6HB|PU;Rc@7G6@?#!m?E?%0 ?>g@܆M&`PL5RCi`?G?P?C?CE?X@?h`?\*=`]B`]u?W?b6?;K%<@?@E ?=`?4\?I?7V $ ?Ga`?W?]@?_/?FW] R\)p`?OL8G+E ?&/`?FP#Z`?E@?<5A?AN `?E?J"?I1v`r`J5@il AHOj$@5 >РFcC}?6?U ?])@?8xWj Jg\fJ `K|=@>̦OIW^N{^?L?[6bAa@X ?Di?IR|\g4 `aq?<@K`L M1%F2Sn?0# ?dx`?X>8#z@?F ?Q?O?1 P@^ +`?&P?<#IcQƱMG`%n?j@4R>?2`?!b[?!N `?R͙?Y?,h`Vk}V]`@6%@I_/DDE@_es`S?At#?N`?>* N@?(r`?B`0Z.`Fb@xT/Qh@?F`?RX<`Au?D?a4`?JbH_ z S?T `?UbR>TZw߀Jg\L!YU@r?G??8E?V?_Jc?XBH-`cN`QP?< ?<@?n>)?:t?O ?@?`?B+?D}m`?!`?;?@?Wр?Nc3D?s0?;]N:V%@EM`G`=?0% ?%9`?8m?U}?aj?bH>?-΢Zs@J;W87?V?I1v`K R ?,`ڀ?KT~b@?&=?U@?$G?^ހ?R?Z?Mj+H(@>{^?C#@G`E?>6+Dx?E`?O--&`0J?K?X`?,@U‘@Q.4p ?.K`?v@BBv@AD=?b@?, ?[2 ?e>z?^?@b1R@6P@FD) q[;wbV E*(?G:?Sв`?Z_?S?:mVsC@!͠?D6 ;Q/o8- Vta[ 3C:?0킠PA bC ?P@? IʠQTNo@DWS Q-b#hQ?B?@CQ?-T`?2`?:FW?Yb%Eh ?Q?W@?O5@3T:K0b? ԖLD`H`?!?&`?2a?]n@?YS A6Xo?N'T L86?$\g :&?6=?F2U?; x?@>?@J>H E 6dXƠ97 ?S34?B 6 ;??( U "aAD ?0@?@9(?]2j?]2>{^I٠R>4 >= %0 U"Sk ?@*?D @DC?V?h`?ZPk`YH&?57`?VA`?LC34T @W R" >R>FC @@?@x?R?K?)r>F?6]`?7o?&?G`?T?E_`R>?`? f@?;`?[o?\i`?Aa@;QSQ-?r`?Be@@LW_WNaJN qS1Z΀`?F.̦?d(؎,u?R>6q֠UjQG>?DI?2?I`HƠ$, P'`V3?-΢?X?Z4?PG[J@A_@?9p;w(QcFL8O{@?J4?[\|?+z?@F?aJ?Um?0?P,u`?R?Oyb?Un?NUC?rF`Q@&4@?AP?5@?EԠ?3`LB*DHƠb?Cв`>; 0w`;GLJJb@[HVM?Y#}?c?F<~?CE KKI?E?U$"GG6@?%;?>9R?&%@ ?CX`?by`?bے@?D7`B~+%ߠ?C8I?.\J4SY@Xq@8/?9֒?5?w()f@> NxӠX{SH@??Q?Ps@?AX2?A`?F ?C/@?$GFS[@D ?Lˊ@?W_?G[? M@c \^P MW??(<`??:?AX2>9&&?L??X`?Q;?D&?@}`?9p`??A4?Nダ?EL? dW ɠ1KN"@?8Y?CJP\Ew ?DsAR͙?IW?Y ?Cۀ>14 ??D ?Xd?YHR?@}AT5`Z˲I@?6]`?1 `?K?`L5?T<?+?@?G ?X ?`{@?]j?8e0@%df@?8<`?I~ ?78@?7= ETN6D3`S#̀?Me >q4?2Q"?<(@:be?4f?dΠ?RӀ'?I@`bDX\)?P;? ; @"L@?L?J`?V9?Fq֠@CQ?D`?@E ?8/2y`L9٠"Ȁ3h1b[=,u,?Df?RL `?Si?C 3:0}`'R_Z[`DO`?Oe?XC?;͆ CCDs5PB?%d?v@?Y@?DI?;b`>5u /2B MѠ@Y?E}?Tz ?S?7Q_`?QC`?W`?J%Q`?X/?bt?P]85#|?A~L?S34?X ?>ѻ8@%bNs ZFW?B?XC =T`>{^?V EX@?P< ?Z=R?܆?M切?:`?>@ ?\vq?W6? LI SgGK?# ?G?@f80EZk=?Bp?O9?0JTR<`06;%ߠ%F4 .\LaoR?5bAJ@?,R>1I?)?Hn?T?Y*?T ?O#"VO4~`?R?B|P>ǒ`:, ??Z?S`?P2@?@؀!`D&(h@?MH?Q`?A{`E`_$IVXo/yb2Ȁo8?C ?IF?3̀Kd@S˝? 7?@,u`>?C?c'Ơ?X ? +8h@>܆?T?@RJt'`BT$?SzT?aY# {^?To`7#I`?YZ?] 3DS̀'?C GV Y ?30?LLB_ LV`?!;AB?Q&?Xݣ ?#^cPvDO`?5F?8z1gp R:E`[;wP$ր3P UCB@.g ?Zk.pU=5$=`?^1??W`B `?(r`? w`?Fta?D ?F%@?`?]'+=`?DU@?9~ &fE^>1H?2;|=@`QJ`VB؀?$ @?4M* ?N @?`@?`@?:ݠVP@?Q!`?V`?2V`>̦?6܆?JD?Ph?H ?D@?3 ?(^ ?K̦])Bj?V @?Q5?A͠?E?8Oc`?(?F`?W?P?GO?4 ?DI?.̦!lAgp '-`?̦F`I \ =`r`GZ Z `?@?NR>?0il ?Y`?R`?B+@?AIE`T(nBaS?<?HB<О?G`?S<HL?!;.̦?>?\=?T$?8; 7-G`?; ?I4?0?K @@ ?D3@?-J@?r?VK?\?G@5ނ`Z`?S ?X-`?5'@@F$Р?<=J?69>@il ?6?;`?4?Cu@@?00`?Kd@?bT`?IXU FP?:; ?&9?E5?I@`?Ev\?cYO ?fɠ?A@My?S)?`?H K?s0?2?NW?BbH 7 ?>B_ Q{`N?Ck ?R?*'۠E'@?E@?dK?Z`2+@R R;"V`?I?2jI5 WreBy?VA`?S[`4@?R2?`?Ds?%ނ`?L |?A' +X@-`?A?UUQUsv@?-?.̦?P ?]#,?^B6?B`S#@Q'`܆GQ_`PMk?0`?Vb?TK?Q?T%?>>b?=&`RO(Q{`C?[.@?aA%dM'La RӀL86Q4PA ?C!m?I@`; ?/O?JԖL?@֦ ?\`?R)?C?I?FoL`?P`?W`?I$9"~?*?Kw@?G?$=`?Q/?^?JbH?n?DG?@v52~??H3r`?Af?7ߟ ?@h?%b?C` F`Vz3e?IU`%1`?@7A;]?Lf?T|(@Ht`P[`?S7`?^u@?>/)?4U@?LF+%ߠ69 P@3O&?2y`VT`C D@RR? ?B:E`@`Ir?"??X?Tw?R@?fu ?f ?1/I'M@. ?(@%?DO`?HkT?(EH" VH?7р?; ?1`?9G?Q.?S`ОVc=;N?Qf?D @AEUW@=@=;NA@?Ei?T ?VJw`?7K~ǀ@?/O> 50 .t?@?`?_e?`?2 VZlq )@?FN@Z=s?/@?܆U6?' ?V j ?ZS`?T @Ex Q?&%@?XQ?Y?F=:FWU&YFD?Y ?c ?M!?@dW?N{^?"v@?A;1S K@G`3`??4U@? ^ހ?5N?.}P@ǠR}H/M切? ?P@U`c [5`)i!XRy`?(JN?B`?KO?R`@xP] DG:M5sҠF{ I>Dč@B`;b`NL0`D;b Q;?@?PV_?W^?\ ?_U ?O ?,L@?=@?L@?Ex %?*`?Y`?Tx%d<`ڀLH?Ii?[ׯ@?N)p`He=?-?8^cBw< 6S[@? rEǥT^?+z?`h@?UQE9`RBOXV=F?"$?H ?:@QHQ.?E?M ?!X2?E ?Bw< ?AS?Fg?v9?Q@?_m@'S:?A=?D꧀/2B ?Qv?\E ?b?@?@-^ހ>?>q4?K7?9IT X`5&NF`?4pG(bRg g=a@ۺGI@1, E1DE@9>?,@?@? P@<@M1%E9f G R`?,@?[) ?G+E :iBXIp.4> ?B?D`?QFj?VH?6v@B+, ?9U?=K#U`H^ @.JbH?!;?TNo@>f@S3?H ?L??::b@G!m?F`?J]3?C#@?P,?X`?F=1?3<?[F@?W@;T@:/<JԖ<#=3+ ?%bE0 G?QU ?P9(IBL `?:`-@Ay8 ?I. ?U?Fg?PJ?UL >!`2<?P# ?R?OS ?X`?Q3C?GVs?Z @deyXOc`E`?7`?Ra?Uhd`?U@?Q`??O4 I`C>t?Ȁ?SS?R]`?KS?^\ ?Zo`4$M>̦?JU?4@S-V @!b[(r`Jb@DY݀:@A' T _أR?,L@?Ab[?%;6:?*@BȀGG6@FgH?Gh?_?EZkJXO*@D ?."@?E * `@CC?8c?T@?S`?TeK?`Ծ`?e-U`?`;`?J ?b?CL>W?5Y@?2  ??C ;@@Ǡ?F?=Ew2@?G} ?4꧀[U*(??:?43`g@?5 ?+q"M ?Be@?Nl @?B ?M1%?5}[Bd VN`5 "*@8Y?0N@?=xE`AC}?8`?H?P0D?L:@FF SLVEbv?Qʁ ?:Yu ?@q ?8<`BV`Fq֠?6f?R$?U@?O--EPBY}=΢?4f?B(}?Rj?CBr?~`?=9>R?\?`?&܆+7z]Sp@Wߟ ?(}?6`.K`?6@?F9C]Y@:_?B$?9Mg? E?N'?=xE`P9(?Ͽ?,О9֒GreR>Qf?n "G?8Tx?Fʾ>b; ^UCe`Z <P< ?4IBbLL?9r?CVɠFFXG5n@?W?`?HV ?N `0,u`Rm@?G?4~`@?2?@ X/H?Z.`;w(TSVUG `@?"-?W`?[]?N?T/?T ?9k?Lj`?`@?aHR@?Wf?8 ?+`?Q%d?<#DР?6y ?S| ?:ݠ-?`?L. ?J`?tM`G`̦?C ?Fl ?TA?H$4?'ڊ2IZr^q4<?P?O?D @?4HH `@^Y ??&&?7`?:OF`\֠E ?P*?MxE`?S ?F{? @>^cRDnT%?V\?@?czT?M?*2Lh`G9p:P ?O*?V_ Fdp`bV Q]4~`B?BN?@6 ?7j2-?Tl?`ё?GHI?J~9 ?BQ^ I$64(?H?K`?7@6{L??@9(?Ms0? 9?@?P?iN ?g?P ?;q?L`ڀ?4k`F9>?LUH_aSN 'a`Pil W8OO)@? nP@_/%?L?X@?P< ?C8I?Uf`?P(6f6:?O_@?P?Q5?P?U`?^w?D\gTQ`Sh2?A~L?Y\ ?_`?^rz?L[ d GV w`H@%8; ? X ??CT:?JvO--MW?4z ?1' ?N @?V`?Rے@?#COE?J <?MA?#J KF@G䳠?TP?]K?HE:@?B?A) ?@?Le0 W'Vs?TO`?Uu@?PU?1*y`1v?,?6PDF?Q?[p9_5YQf+GJ4NM ?)3>{^?V)q?[?>+?9p`(}R@?F`?DxXD15?B0@?Og?[|=@?T(U?;?@J0ɠHpi ?$, G.? ?9"?KF@?M- ?_ ?h^?]u&DEu < EPBGî?'t@?CNK^/`I@0OQRaH`?%;?PM{( X \?HE:@?9i?@ =OC?E"?H){ "v@4R~F܆?(<`?A`?LC@?77MXZ"J, ?Ra?`?`|y ?U^L_z`#1@?9@TZN@??D?Ur?BF?Aa@?X'?R)?%d?5?VP?_-?[X@??Z?Z.`?I?AR@48,. 7oo8?X5?_(?M`?@dW?' ?;0?\?Yv +Nl @q?Q}?Q`=J@U#?D r`NT\g? f@?>H0H?.}?*?1r ?0킠8m?"?BM *@$G1R@R\@BD8_U T꧀4 @CƉ@?:n?\?X ?DBI Q\8;HD ?,?C0?b`B% Np?!?V?Wre?]IG ?_ۀ?3+ T@Z_ _`K ?E@?Q P@?/`?V6?43`H@QB ?B ?RW{?3+ ?0w`?(+Ӏ1DR|?,86BQ s??J, ?;d@??_@?"OPN9"C{F7j@I@`L 56;0I?#?Q2@?VXo?`U`?Y3?C#@?SU?J`UY19IP?C?QV@?%@?&P?^@?`7A?< ;w(%F?L#`?Yͮ?F5`@q P|P諀?%d+H?Eǥ?T @?Q ?K#U` ɠ>4> ?Mj?Z&?Aq@H=D, ?En?PB]`` `@V{W}@WN F`GgW| :K?O~v?F-A ?JM?Q~L?6?K2 ?SG FPW[C@FB4M* QKT:QT,$`> `@?YN?S+ Xl[}`Hݣ @֦ G`n?I\ ?N_l>܆J, ?# ?S"`?Kb`?J`?Q?"@}:DF(,L.)@?N1@?U?N\?RJ@?L`ڀO@J4?a?e?) R214?Hn0 8C?6`? `BҮ@ @?@`j?M?L?K ?@$ր?5}>%d<#`U`Wf?:?T%`4?8?@J?VW?]?J?H?NZ`2F7?F=?F?P9(?U-J@Wf7LJ?Gj ?1 P*[b`D@?C#@?9. !lD'UU`M\T@> 0E<S?* ?+?@?B!?2F1@I!v?A?ˠ?m@8ݣ b`;ׯ@S7>r?9`1R@>)?D3@?1l?I>)?M W}`aQ6 ?i?G@?5`?C?Lp ?!mIrN#?NW?Xf@?U?-s0C#@3Q 4 @G)`8`?8?@7 5@?DI?Q? k<#?5F?LB_ ?P"L@?U?[?U@?,@?@_C?E?Sp+?W)`?f`?`.?`@E Zv@P7 ?3!b[0n6]``XS?G5n@?O_@?B?B2$5`!`?N>g@?1HO*@QI$If@V ;W#0E?{^A: =n@7䳠@N@?7LJ?>pH@Dz ?РJAB`W{IEj'2B ?57`?K`?J(@?28?@؀?Ỳ?`Ob?P@?-J@?M`?W?I`?=?:٫@?Z`?@W ?FR:n>K`?6%@> `@?p?AOo8]:3R0@?&?Vs?0}`C+ ?)i?@?1I?Y?g?Z*?%?D?:y$?F@?M?@A: ?v@?T;?Y?:mJ7@:`?I ?OI?G{?V`?TkB:E`V3/@?@`?Q C ?]/`?S ?2?E4Q??:AC@F{ NvI`W{?U1`?M_EN`?#^c?@J5@P6[`L QON&fAXQ`.\?Q `?>a RZ@Jt'T SMG`?:`$MuT;b cp+Zi?N9R?X4?H/(]1%`rHC?3?O9?>l @R\5S/?b`?W9=?5`[dX8ED?!v?\W?W@BKb`@dWX[9v ?7#@ P@?Z ?Y@)I@(@8 -l`?o8N @ZfW@Xd0}`?V @?RA@?< 9֒Z VBo`$ @?Ni?G SX@<?O`?aVJ?L+S"`K@ ?,@?Ul3?T]!;DP ZOᇀ?5'@?B#h<RD;5H@8Հ?-T`?2et@?II?R?G ?E? ?M!?8؎ChULN?4\?BM : , ?N}? X'N `?bI`?YL"`HOc`[&P?@q?H KbG䳠?Rb?C=^U;Jς ?-,J޿Z8<`?.{^@N@ `@?U'@?W?N\??E?9C>`?UԠ?Hx75'P`j`,JK?D$?RA?<(@I. PU7 ?>?B ޠ?V ?U?G?Bet@? E 8JN?H'?F`?U? ?h?`6 ??A?EF0'`^eƀUW >)?^c?0n?R2?U%?)\ 0킠?8 ?D?@}`, V _[S`??H=?(?0E r`35@?W[?^6#GQ_`B50Q`2Ȁ?2? ?PE?PL?NF?Hr`?RT`@M8@H?B!?Cwʀ?KVLճ`^ހ??`?6{ *; R>Ai`[6bO?<܀?M?YL"`?^eƀ?MP?g ?$^?% OU aހ]4> Ai`Y$`Q?CK?1I[P?Y@?YMg??N ?Q@?!Pj@:Y?N@?C!m'?#^c?4`%?#J-yWP@\ < ?J, ?HCB|P[Qgp ?%L?+* `@ x?9@?9MgR]'?$p?\&n?P?%9`; %??-}Y?JD?`?Yi@:t?O?L@_\+) ?LL?St?b~?VR?9. ?XC?S`B$1I?L^P ?;b`BDnE/@=`!`9? 6:?Aa@?;N @IKoSG8z# ?K9?:4\g?\1@?csX!X2O2$=`?@s@$V(,0@?BV`p?=!?S` ?`]e8@\?JU?b ?>"@StV? Oj$@?CZ`?]Ɏ@?Yz@?XQ?LCFI2 ?r?A) ?S@?S/@?@U?9\ ?!C@Hk ZZ)r?O5@?&XoOD$?D&?C[`PNvI`?Q?S>6:?7LJ?Sn?K8@UM΢&? ɠ?LGs?Pɠ?.R?3?A4?P?, #T T?0w`?AQr ]`E$%d4a|@)"?#h?G@9`T?C"`?Xo#5`72?J!?SB@?DE@A-8Oc`?X.]?V @Qt#Ul3?I'M@]~{^?Hm??(???X ?IO$V \n@`?1R[MG`?>ǒ`?J`2-@EK. ?ZP ?g?@0`TWS QlC?KS?^?U h?S^@?T `?@6BA6:B@D^?G ?=XaGB?Z?Yb?]@c ?=n@?"j?F#?I?8+ӀD@C-?Kr ?JDC7G@?; ?U?N"@50 LK`L 2?P0D?H=C31{`Uf`;D[?LU;5`T?8+Ӏ?K3PyX< ?,L?D E `=c I '7E̺`Q ?C ?Qi`AMn@>@?BQ">YU ?T5`?ZLBt@ ?Xr`P?Y@?BN??$HL`Hf`<. ?Qgp ??U ?;5`?O>?8@=`?I}?X3r`?NT5NXT@?F?UЉ?"v@?C0?a ?X rJBj?AX2?2L `W\!QX4U@?U?_<?<TÀ`Hf`L?J%Q`?(!`SB@S5@>+?C&?M?+:1?QC@?\¦@<`O_@?z ?E諀?K ??tM`2~?2T`?:2?>/)5@@"L@?NcR?JAB`?ONY30?I@` ;Tl? ?WH{`?N8`?4a|@%b@)4T19[H*Fy ?V+?bh?R ?=?B_ ?EK. 9J`Z*@SA sW#@J?`f?a00@?8}?d@vIf@%x ?:_0s@CfV;c_R-@?9p`?!r ?"Ȁ?F>N 8E:@?O~v?]'@?N ?'?$=`?R?QϕA 7G6@?Y?X-`FWPV_M#r?"v@=^ހ< ?) ?1]?DR>?H؎ Z@U~X; ?+z?PH<86OXK2 \L@Ob?F?o89W?0_C3C;]?J*@?W?I֒>>g@Kw@%u /yb!{`?JD?Co?@) ?R|P?VsJS`??Z?P?"ELMKK%ߠZm`ar;#z@?Z ?S8I?RQ"?V@?B501͠@IiXZ`@8Z ?U`?MFHnUH X ?%0 ?Fy ?V?R?-}Y?7䳠?6v@:~9 < h`; R[TOEY@2 25@JKQC`S@^S[X@D@,?-6:/@Dd ?G ?A͠S?`IC>`:d`a`Vv@?O@?,B_ T;LA;*@?-6:?M@?J*@<K`L >!`>{^Jݠ?C ?Qπ?Lw?SV?@n 4C??6P?$DHX3r`L3!`=G`PS?r`?U[?PZ.`?U/?a ?W?7z?>*?L5=auhRE?A`~PY1v`awP`W`?& ?P# ?H?;@?QTc?[@?EH1{`8@T c\>JK#z@1{`? ?N6`?Rw?@6 ?C[`?>GH -6:J= ? dWK[7( ?RĵB_63?D@v>S) CYO ,L#5@?)׀P,u`TA?B?Vd?@N@6`PnR|PA~L=e HK@D}m`M΢X=M@>諀?+?0il ?J7@?!X2G`??K?=[?3m`?OF`?T?A=@5@?:?*2<܀>9?FH?(Txv@?B:E`(eUF̦?D\EY@?5?[?:vVV΍J`@Hf`F]`9?E?(/J?@KD[SZ@?1`?Q9 ?8Հ>  ?# ?1(@@SBrY?^ ?R\(Tx< ?B?=Ɏ@?/O?@>̦<?D@?_g?Me Df?;z?U-2Uz,@RXVWN ?9a?HK@<ОSB@?27 ?[?GT 56A sX+Ӏ[ 39+Au?3@?`֦ ?b??RM ?[2 ?c1?I?)?J`=s0UJ`1?Fb?]8@?`<8d]t *޿?%x OW4) ?Qr`?14?A;諀O`?8Y?D`. 3YO 6! ?Q M @[|=@VUEsGQ_`O<5_`?.>g@{^?+`?Q?V`?O?%d??>?Co8M BI ?9U?C?;w(?R>KJU?J <?SS?B\?UV`?Y2{^P{4QV@=i?@@6`X6:?P}`?#-$\g9{ ?C?PF7oUHIf@?:d`?I`?F`=c TUm?GG6@?[*1;T`"$?5N"Gp@\@ck OK?Q ?Jd`?N?P|y IO*@>f@(nA @?8+Ӏ( X M?"L `?X~a?K|=@̦) 4s?`?E諀?+H6R?3?V ?HƠMf}`?z ?_b?Di:`?M?.\^W@?B?]@c ?T]6毠SR`@?$~`I٠X4?V9?$?N`?QWK*@\) YWG F?2T`?:_ 816=<LQ`;?A) ?2AS_Q?N`?Z`?FoL`?9v ?P?Qϕ?+:1B?`?UB?Wޠ?<I XE:@Ng ?8Հ?Q;?K#U`6:@@Ǡ?7?R?7ڊ?"L `?U "?N:~9 ;f`<О?\?R0@W+I?T\?VY?UD`?TX`??yb?=P?:y$N[ Kl?3?E?F(,??(DTQR@?I3?`d ?=T`Ps@>/)??j$@?G?2`R ޠeY@bx@Br'B+Rȅ 7#7vRj0?D,$`>?FfMɎ@5A?A2@?A?Lf?X?N?8Z ?@ɠ?Bc@?S?aC@?c#@?b `?Wî?5$OOe@bS R>!OP?AR@?GY5Ea`F?О6!?H" ?Sl\@PR4]@1vR`>o8?J/zJ_D Q >)>{^)HRQ ?P 2"TL ?6=?U"?TU@> G`?WR?`^`n Ux Al?DO`?EK. Z.`?5sҠ?R`?@JS*QF4?*<-?MH?G?" 2?Bw< ?Yi@?Tb1I1v?Q!`?< N;A4M* 0@?Y?aQAu?J?Ub ?[\?X 'VsNǒ`>rJ`R1a3(?*Ԗ?,C@?KIo?QQ0'`R?#Q ?^?\ @?8x ?F ;?W?W@?EKw(VPDРJQ`,?܆?F?C5@Z@3Lճ`J`?8z?H?K ?N ?2B >f@?Cg@?-?@!?`0`?jM?l?af͠?1@V6G2\sJH@??@??`?MzϠ?R>#RjLCm`4I?Oe?]Ѡ?yb&`֦ L`ڀT) _?;Қ?HQ??o8UD`\ '#@?РGLJ3E?5A?<. ?Ip?B:E`B2S+ B0@?P7?aj?Z4?C?P`?UY@?M?P?QON?N8`?Qk??G@?DO`?U!@?RI@?=@?:mK`.̦?#h{^1) ?OS ?\E?Vh?`(`?P{4?P5Y`?V?O?*k?@>=@?Xv?Ux @at`jA` 7W헠\86Xj`6NF?5?C?X?`@?S)@K IR|?"#h?S@?LW? 5iTq^`Kd@?>r?LU?C+ `?!l?NZX@?K x?@`?w`Wx]l>*mD ?A9 ?^ ?Z `@?7#R ^KQK?D ?_^`?^?GEK. ]e8@HK@?V}D?KK2<?R`?ae`?R`?<86?&l F1QAUC"`?Se?K T#@`S?7[?S?IiX8zKq4 %d?:?]zϠ?Y`?>@ ?KK?Ei@ ? `@?Ws ?^?^Z`?Z/?X ?X?1 RFM 7? 2?.4> -@c ?2?O@Ђ-6:@X Nՠ?U`?P]?4.?6@\r`i9^&EV JAB`?@,u`0N@Kl?O?Vʾu ?2~?\#?_?R'8`? '`01%d:P >@B?XWE`>܆$qE‘@G䳠?h`?A-?1' ?%`:; $꧀z Be@" ?M?=VR`NZRw< ?56?N?EW?HOc`?_L ?e@b`?Zo`?J?(eYv ]P?4@?K[7;0U?G`?FA`?1;0}`J20w`?;1X2-T`?ST:?P-`!X2= %d?ZZ@?G^R ?$ @?UH?)3?" ?E% `@4s>R>?E?X?Dč@VW[?+0?S?E!@Eǥ:@?R0@?O '?3?O`?D6M+l??Ͽ?,86T H?:U?5m??@?N̦?S> ?R}-yW)`=s0?Q?W?Lu?5;?Ql@?V>1(@?)֒Q;`?[W`?P o?)@G} RW{??SPk ?> ?@?Q=?FI2 P? Pa@@_CT V2U:KR4^?5?Sv?Vz?6?C@? `@V ]?,?Kju@EUW@P&? B_ 'B!5UW@?D'?X?&&RRg ?m@=FZ ??A?G{?5?N`Y@/O?4@TvD?Js@?Vs=y? ? ?+?J@?z ?# ?.19 ?0Z.`?\w?UH%1`*@ ?*޿?T ?F-A Q$NK`DiTF<~?EL?Wl @?^p?SȠ?;D[?Y?f@?b /?MM??-P?)\ A1{`bM?!m?Z <̦L{`?Q C ?Sh?> ?R G@!maE@a)4@[HS/e??R><+QO<H?U?TS>rC# ?C?QmG2WK?R?Lˊ@>!`1=xE`D?2-@?T$?Ao: ?7V ?W/?<@N'?̦?T߀??7V-P2-@Q@UZk3&{^GvM)%d?5@:'۠E 9Si`Z w`?N@?9 F@BFG`T\gV`CzT?P䞠?[ 'U!@A4:7@IdD?4u΀?LO?@@?LU?+L. >{^1aIX-?!) C5@TM* Mt U'@Y`9`?VXo?Z!GNa#+ 1?諀?Q@?LcdGzTF ?B`?\(@?KI`GA-H`?"A@?S `?W?]`?X'?N{^?^ڟ?e?QJ9K`YFZ'۠T:DEV ?`?U&YBV`[>!`?I@?5_`?D}m`?L?L??'j^`b?Z8z?%PB??,LP U ?b%;C@?KN ?QP?3?4^0}`F?W/?GG ?!܆E4QJX?LC@?`ȭ?P@45`=y?=A_@awV?I?Kz?>g@?9v ?$R>>?S7`?`.@?Ug@??K?Dx?P7?0bE_`;8xDT?7 ??U ?>Ph&V]`UBJ [ɀZ@; ?Ym(?TQ`:"@% ?I1?;]K`:`?2a?'???>?z?5dAu`zV}D6]`P~Y~VhX}WK5n?TA?U.`50 L |?.{^> KP?Ci@?LGs?0'`JS`dG_7V?@w`?DO`5sҠ?j?2 ?B#h?L L? 2T\?7j ?Wx?*mM}YWQ%:`O/I`?A ?/>K`?L |?Y?S34?[]?e5?gp}@?_ z ?L) ?G`?1lAo3:?s0? ?KIo?QE@B  `ɠXr`+ %@9 \ ?=1%?W ?O%NF?1`?PY? T?1P=A PS_:ς ?D?K(؎F?!b[?9`'-`% nB$F%;?C??_@;>-`?UD?EFOEH?BS@?;C@Sв`S8P]OeH@?K?R?,V`T<[zNO:ZKkAI?S:?I9?b?I`??P?,B_ ?Z.`AS@?[|=@?_2B ?F?1r ?$~`4f-`?9٠?0?HTx?N+09G;N W ^ダ?z ?aF?\Ǻ@ɠb|PV`Z.`I>)R*?C{?T ?U?$\g?9k?EǥVYfJ?*@}`= JS `M?3o?>+?%L?<[A]R\@?:P ?T?Fw?4 @?E`?V(,?GMOP+ 5D8@%1{`?-@?Td ?TDVp??X@?W헠?7`)\ ?:n?L?<О1>ˠDi Q_`QJ9NX^c<@@@?X@?[`?B`?JS`?Z?K*@?6毠?V?Vg3JPJ?P` ?C3m`?;?_.r?X> -J@Gî?)r?L @?CO&?%諀? >)*DF]`K4G?= ?@x@ W?`T;b BT`ENT^Jv@?5m?,:`?<8?R#h3T:YEȠT|(@J`?(e?`?c[`?Sg?9\ EX@6 ?&R`W6?@?`.?\`?FG@V95 ?RN?L7[?Q?>̦T YL ?9)׀?aH?a?SzT?P?T!@<U`.PG`He?DF@?Au>+>b kC:8 GmPH@ %ߠ n 85C. `O`=PG-``JT?5i?#T:!C@?F`?C?aR`?eF?V-A ?MH?RR?I9@?:`Hc?S~$@?EdM&`SU>9{ I)׀C <ˊ@4Р?PS?e^?`{ ?Ge?U4Q?Zƞ 0,u`Mu?Q?W4) O<^?`?[t`?N9i. ?LО?S?'AI;Q?B?A;-T`8`9@JMj@v7?Ͽ( X ?:Y?=n@ Br'A#?R@Dč@U(>?7T L@`7WTvT$?#J?Quh?D ?>g@L\Z@?GQ_`;N;?Qk??ct?VR?( X ? ?u 쓨 ?j?ZC ?P)?]A?8/C1@F`S@&?_T?T ?OD 0@9(}@S(JNLIH; ?Pt`?CO&I62$qG0YJ<-JAB`{^S<P$R>>i@k1@W#5`?Lw@?!{`?V{?X?b?i?e?]H?%n\QW($~` ?7t@?QC`?+U`O(.pH=Nq4? ?J*e?Nc?^?ds?Sګ@?I{ ?PfP`]g€?,`ڀ?Me NѻWD?5b?St?97 At#O`GI? ?-'EEv\?=@?(eY`tb4@Vʾ:<-?=,?@Z.`Ns \ ?\0 ?W?5Ly?$U@?C`?@ o:KkJ!?'} ?S@?H a`H؎]U[S5 N$z ?u 6?D ?`W?Xl?E`?P?@ WW`SK<@?%PB?7v>j?I?O '?V3?A`PQ9 ?9I>?1/TbW`Js@>{^?@n4a|@, ?P5Y`3 T?5 "?T ?FXo? V#0Y?/&`UiP,?:AB`?:?K:1?@_CM>諀?CR@;*?[ ?T ?Lճ`?]ӷ`?[ ?G= H ]6`Dq?Q?K?#()`PR '-`C``FT19?Nx ?S?9p`?Jt?R@?@FN` r?Bw. E|?A?R ?% "#`?0f@$q?bAvNW?!;?H%F<=J?N?V45`WP@-l`?Y ?c) ?X`QbV@?P?EW?CBr?F?^c 3`MR+ ?2B ?MT`?]#,?\?P! ?.4> >3̀S5 `=\] '?E?2v@?FP?Z?Q?<`I d+fL_XL8@6?2A@?Bp?N:?PSX`f I"8?DR>Sg@_ O*J?Nd`?DF@?#+ 9U ?>C{?)?Lj`?UNE\ TA?GL?Wߟ ?G#F-A ]y,L?Q02V62$?L??G?N?@@J; ?2-?MU+mUw?BX?4@%d?@@?r`2F?85?O?[r ?`q?Qπ IrPF! ?N6`0ɠ`K?V$] ?M\T@B D/9֒HFg?*@?J ?Cۀ?P ?[$?T:?8JN?Ŗ`O@R>?N?5K. > ?J?I`0=1%?QH?do`?_+D, Oq Q _B`V{ ??=^ހ?D6M "Qy8 R>?RAUT Dɡ???9\ =@@v 7KHTb`>@?E'@7 9)׀??( PFQ!`B~?B?SۀA~L_D : ??m@L8YP3X`?Umx?bP?`}`?@w`-@ 1  ?O`?U8@A?H-`?1' G#@RtS{?J*e?aS?BDn?o8?N%`?C:?)?V?UJ`??+q?1͠QI{ ?LGs?Y@?W(+Ӏ`]S*QRA`?b?1]GR Qc.}2@?# 1' Vd=`?R:KkJ?J <?P-+0MH@@*Sl\@Pߊ ?S`?bj?T9@?[F@?e ?R T=``\ @Dd ?6d(؎;f`?HOc`?RF?<. ?A@3|:M?C ?Nl @?#D`JI>?8`;g??Q̦Q-L= ?S(?a ?#Z`P#`#h>`/̦SiSCC DCC@?.q4&܆U 8JN?Al?`E;9R?GB!@U[,@;f`?b?ar ?R ?.+QK?`j?EA?O?2B ?>vI`?Ip? @?C?F3o?@J?CX Q~L?M @?+ҚMe B\̦?)\ >C{G&0?O<?Y?A9 ?VB؀?b`?-6:Zf W}@VYZ\]/`MY?Cwʀ?R1 ?V&?Up@?!Ns X< ^q4Gj %d5ZkDJG(F7j@K`?A@?Pil ?2~8@%A7,O5@?9?Y@?7hWKQk? ! ?7t@?7A RM B|P?@H?Lp,@X*`8&?_g?_A w(R Gj 4HA/2v@?7+? E0 Dd -P0Ss `%y J^?H?7RH>bc`H?N @@@N @?//?3X`3&1{`*Ԗ7t@DZ9i?<?F8@?XR?a/F`Sԁ/yb ?93?9MgG= ?C?`?d?LkH_,#`=^ހD^cAlMB]`%L?K?GDO( X ?Aپ?)?J?4WS Zy$K5`?8L=P ? ɠ?4i?=@+w(W:F? ?j(Tx?N`?T\J`Q?;`[`ep@eY`8E:@?+?Sf?YiX? S0`h@a%3T:?R ?Q3]`?D@?4\8ݣ D5`&D?3X`?=`? % 4^ǒ`U?[|=@?b+@R|H+Ӏ?BS@?N?I9@?T?N D,$`W[R@,u?J٫@?=@c 1/?RH>?bT`?EY@D ?4M* ?R?:`C9@?8@?,B_ AC`QpT N8`?`?:HM!?#|T\V9ED}m`TS%<`OdSrC!m?CzT?M=?Ed?:Z@??Z?PJ?I$ ?@`?_?c6a?bK~ǀ?A `?T'?R ?:7@E6?Fg?a%?$W8h@>+TNU&YY[`IO@,V`?2R>TF`R  3 ??E̺`?=B?3?`?@"L@L'?HJN??7o? ZqU%L?Ԗ?S ?W-`> ?BDn?_@?OD A sP# D) ?%0  7T ?M?Y1v`S [Ph&?B2?Y ?Xe?Sl\@?T ?Xt8?Sk ?3Р><`?01?N*?@Hf`[ ]i?Yf@?ha?H@AZ?C. `?R}?Q_`?Z?Xg@?A P@0JP J ?GB!?J^@?H?T?16G+E ?N\?W?/ʫ;?`?@`?6v@?7ڊ NE2B ?W`?IDC̀64@7j ?j?)@>\RpL1@K ?J`?Q}?Ph?Eg@?D;b ?WR?W?9Mg?>?Q!`?RFW?6 ?R?J`!H@?:&?YW?!͠F@?E ?A MjUh Tot,L?Q^ ?87t@?0?';B0s@?IW?QS?F@?UPB?L5@?;z?>q4LD>@?EIE`?*?@s@?P?@@?I_/?R`_?H&?BF?;?PW ?`?Ix`BN?Fl ?X/?&fF]`A?9{ ?A-?:&?@# ?5?Js@?a?a?D߀؎?0ɠ?M!?]=?XrD`WG6@?=[?Vc ?vA4?Q ?2?O ?Q ?T?W,@L`ڀ?3?`?-'SHݣ ?1@/o87= ?B?Z?C` :QJ`IN'>諀?AuK@Q}?L͠?WϠ?'䳠n?G+?G@?(<`U;|=@H}>g >f@?{ ?7z?AN `?+z?5n?@6/-6:?V)q?^`?=,1 `?4) ?jBg?&9?PS?D? ? 1??&`?;zFEJ`?T?[?3P?`L?Ix`?_? '`Nダ?PS?_e?3QtL#?>r?R0@?O!`?(JN?@q3h:Kk#9GD @M 4M* ?5UW@F`AK?R`?3J`?=^ހ?Q@?Dq?H ?*?O^`?$f8l?,L@?$p?9`?[N ?Xr?#P?2et@?<ˊ@?Uw ?[%?C}+q1C@C `57`?E?9~ C ?Ei?=2?QK?\? MY3A%РS[`P7?* `@?6?#|?C@?QQ?8@S_[`L Z˲Pf&IUT3`?7-`?Wޠ?Gre?Ed?X ?A*Ԗ?`R;U=@?4p?S4z?JM?H?Hm?b[/O?D @?N??-^ހ?S| ?S?(eQYwQ`?Dp?S^c)HRP#`9k?QP?Y+$GJ `@?So?]\T@o8ZTO[M^ހ:+@?D?Hx,#`0N@?X:N"v ?8m?@;?@?< ?zCG䳠FS^c>"@?+\%(a,a =[CBT`?E!@?2Ȁ?7р?X'BV6R>;O. ?Q+?T ?Mt ?K?h`?F?O밠?'ATi:d`?S?Z?T\(5Ya0?]e8@?PZ.`A ?6]`?W?Js@?C@?IKQ`bV`Od?@E?'jQ ?:`?7-9?2 ?W?X@3T:TS27 bQl@R E\ -}Y?FN`?S?;|=@??A{`FFfPa{`By`Uhd`eKaa@Hz ?=ӷ`?=xE`-?-i?.`X&a+Qپ3?LV`?`y?SV-'>Р?O`?0Q_@"L `?]A?aMf?RT`=< ?=@?> Q P@U+m?i?R\@?PF`@9(?;Q?@Y1CQ@\_`RG?6?CtE|GG6@{^JQ M?Df?)f@@9(n?&XoAt#$Р?Mc ?;d@?:K?J@@@R#hD @Q7,0@Ǡ?DK9L?;SQS N@ 3&?G0Y?Q)4@?Kf`̦O*?Ct?cx`?2T`deKZ /?E7`?]?\p.{^`W D ?R:E`>R ?;z?a ?Z?B% ?1 ;S" 0@?NE?F7j@?6NF?E?2  IOZ?*<-?Q??~v?q?U6?Y3?`WQ_`B`?:P ?G@?E >܆E IWT['$:m?0YYOdZR`?$) ?5_`?C?S|?C34W헠``UC@FP?OX\`?b?Jς GLJ?'+?M =yX %n?W`?TM?D~`?%諀v?Jlq ?OD$Ri 諀?8`&PM3Q) 9R|?+`?D}m`?RӀ?BGJFWT@1 ?R% ?CV2UX62V`;3QYwB% ?/&S/LD`/ZLL.K`?X?Rv@?CG ?Qc?G?6d @P1@,u`.]HZfE‘@DWS YPt`F@P7Lu,!%d@P@P5Y`?S{?f6 ? ^ダ&?^%?]:@?=?/&`?K|=@?D3@?7`?7} 7?$~`?Q4?=iR\@WhA P@?E*?R2?I?Nc?Quh"L `SުD?+ ?0il ?, ?(n5@J޿K*@+?K2 ?E@O*S?z !O=2?M. ?^C{?Q L |Sm 45`w`?E ?Q@:KkR. ?4?Ha+`BP -s0%dP|J|"v@)׀?@@Ǡ?P킠B_ N @Af3CBbQ`Nѻ?@֦ ?\C@?Yo ?V ?Sk ?@ ?諀?Jn?[a@?GT W`_8G7? 6:B D3 @A@<TܮSKV?.@?2?-`?F`?(E?9I?Em? n %Y@>l @Qz}@HTxC@R`0`Ta|@Q]^U@?7?A]G??U3 ?]/?1) +l%dMA4?7@# B|P?QON?M!O:ZCCG ?M. ?Q@//?X?Bp?9@= FcH?"V6?S ?JVHe?<?T@?[r ?K%'8@)@`9UPF*?7?H?BҮ@?@}?, >/)B?"j?J~9 ?J>???C1@?EPB>K`XIZ?GB!?Z`?S #?`??Ŗ``H.]O`Y`RiC?8Oc`?A=EwHh@EiTE@X_R@?V?K@E1]GH8RHz  ?;O?*y$?5PB?a4`?iۀ?X( ??5sҠ?2 ?#r?D\gBb`f?@a'LZK  >; xCCKr R`=6:?T~`?b?T 2  NWSBrRyIa1]G?:b@?:; ?7o?\`?b͙?.H`Q:'۠Cwʀ^ZX@]g€= ?>M?7G6@Agp V=?S@? ^ZX@Pn?)I4`.+>M@U`D %Y@KN K9?# ?3X`4 ?Eނ`?du΀?YbU4QN@ B@`OF`@U?Yj?fY`?QF@F{OD Ql?2A@`YZ˲)IC<I:DVd^A7,?69?2o`?I@ U|5K. ?1*y`-i>rv@?IEȠ?PHf`3QL@=8PD@v=;NHBAI?Ob?Y`?S1 w(?U6?;;*@?Q AT@@Hf`?P "L `?<4IDi>@?HE??@Nx `Y|e1) ?=&`B50^KX4DCC/@Lճ`I@2j?FS[@S`F*?n N@GT B> %u %'@, ?ZI62v@z 1{`?= ?CB@Ml`Tf4 @I4^ Y$ 5?=xE`?GR?0QjVA`?P?;@?P"? N@@H?Cp+?^Ƞ?2v@WA?Q' ?T5`?0P@93-`:, U@7G6@?Y|e?Pj@P_CC̀?= ?H@V6.>g@?L@?U @0nYGP>K`?>M8Հ\cdN ?:m?jEAT @e0 g7VO '?F?O|@?I& bK]?-P?X?J 2~? ?P2?Q2@?<?0no8Qz}@WNZ`PEM`?M?]Y?CfR M4`?/:L!Y?#5@&PHW@?))׀+w(V{ B0@ QT2A?D?CBV`TF7j@?&?<ˊ@6y S>K`?@؀!ISQ-R@?:Cg@[xmXT3@ac6PA ?!?9"?=!ԖA@?7+?Kd@?2y`?D) ?D3@Gt@L:@B`P0`>@R&b&y >o86I2 P~?#?B?E$??@ P@H`?J5?c*Q?"V6b}N?X`?a4?V`?K?RҮ@?K C`Rsl?~v> ;b`SD??J<-?/F`"j?))׀?B2?2 (er?@ ?TR>?Sh:d`Y@Ao?L?K ?*y$9@`WCfaU "?=!?W0?\ ?QON&=?-`?M``St`0n?D@v?0`?. ?L?=s0QYwY`JS `;3@% 7j ?R@J(@B?A͠?5Aa`?;,C@B?AX?+`B0@?AFj?E>t4 @?3?>vI`?Fy ?H`?U ?`[`?]?P ?F ?L?7a`5sҠ, ?!`? MM\Pf5@SCZ?@N'FB2g GP䞠?7#?E@&?H?W)`?"V`2j?*y$'a`6`1Lp VطY PJ@$f?v@?b2 KS8I?,U?X`>d-SS?Ic?TF`?Qc?P?X?[?7LQz}@VRS&1I*FW?7䳠?7 *; "?r?+?:?ZAB`?c ?_?T?K?@?#j?u `?H$4?T3`?0KY:Z`Y7v?*mH.]J@0UP(VH@%XaC`R3W(c&;?F?T?0 ?Р?K0?HOc`?Fv@6:X\@W QT>쓨 G`EUW@?ZF毠IIFyu?=2?YV?2A@R@@j2> >̦?/F`?NK?7G6@Js@K#U`1]G?4k`?N?LО?*F#̦CG ?L!Y?8cE,b[?NvI`z X9Quh?1gp ?I$ ?97 ?7(?LO?I@?=@?F(?E5?D?R?Q?147-El34 w`ObZ@O@??B+?ACZ`P{4?E?\?7LJQS=Ɏ@?@ ?B)?>4> ?I ?T^?@?`VB؀Y:Z`Bo`M@K? `?A@?F?`?6%@`x^RjH$4;A#?H@?K ?&`Q.NE?U?c?K`L F T5`Q ?(Tx?-,S'ƠCۀ?K(j0`XI"8F~ Qʁ DxXXAjeR*`Q?(r`D, 5?E?M ?WW?NUCLDP6!`?,86?3 1M*Ԗ?6*Ԗ2܆?M;N?Z?FC p?>T?) C * `@8 D?/e?VsP`Ex ?:b@?M@c 3m`?6gGG ?"7 ?&l SY9R|?!I@ F.?C) ?:޿IH؎h`b2j>g@?B?Na?K?J R@H^ ?!R@?J@?# ?O{@?Y\ ?HD\JԖAIE>z?8?\B_ ?I Dč@?@s@?`ɠ?Umx?b?Bet@?Y~?T["> <-`J, aVc ?3|^ހ?N4> ?J?TG?[ 7A`bTQt^`@`N`\^P D=`?9ۧ@?,Q sJ`?Y?b?H?9r?=?5A?V?Z ? `@?1' ?Z!?,. _DR:E`?>}?PV_?T^?@JKN J`E`S{L0`A) A?G`?V^ɠ? =?6܆?F@?4@C `F?B?J*@6gE0@?B!R>K%ߠDZ?J`?I!?~`4@HGĠ7V @Y@VO;]?^ U(e?0# ?Ccx@?PQ@H@FRt(<`?&`3?j?(^ BAG#@?Ab[?9kb? 1>ˠZKZM1>R> x?L?Z?MW??7T ?G ?.\LW( ?U @?@hQ' ?x?J@?Fe#@?w`?80?Q?P?諀DJEZkTX`\Q9k?B> , ?> ?c?b?U8!?J`1q@@R?8ȀPHY<3!`NѻSJ6q֠?6?+%ߠ?U?7 ON3@?>?\ ?T=`?\?b@?P9(?1l?M6`?!`YQ?))׀?2@?:2?E.̦QeI25u LeQ`?%x ?S?D!@'+2A6NFDO<=J?@J#VLf><`4РQ Y#}J>?L?P-,Lj?/`M^ހZ`VũVOSIQ`R-s0?U@?V&?99@?G?T?K&`@)R|CT:U H`-6:$?Bb??(H@Nǒ`*?&/`1P# CBr&`RSU?;S?3+ R G@J <?,L?@?Qu?YQ6?DA1?5ނ`@?`\8ZGmP97t@AN `OKPJJ4MpH`0?;?@?S ?ASPk Z`?f\?@?c?*M<ճ`6:?<3!`?C`.q4KN ?'?Y[`?T-B!5@?3?85?H?QC@Fv@_k(/?W?P7?LGs?Q*y`РT N*? n ?BA@?C!m#J\?\M(5RRg -@?N? &毠?I'M@?SBr?L2`?FI2 ??A3Q Uh [X@R`3wʀLp T.? @?M?)@`.t>j?0il ?Jv?Gî; x#(?K.@C!mb@QJ9?1Eh S?;Io?[W`?TO`?0?@?>C{? k??C5@?5@@CQ9 ?:ԖUFwG@DDi81Av5@?.\@}`E?JS `?8&ZX&?@?N?HK@E$?A]?F@*V4@ZBQr Cв`4~`I7 `b YU`^"@`@Agp ?R͙?[ ?@؀R`* ?b/ ?\f?5,?Nr?IF? @Lcd%d?[ ?a?JAB`'j>R>?:?P?Vq֠?B?/?;?9?E?FnVoL`Z^>?\*?`@?CO&XeY:Z`?A>ˠ?DO5PB?Lcd?P`Qa`B<?_?YiX3<> ?R `?0[b` G-`? ` JN?1]G?@R? 'B$?f@?R?C^c?/X?G!?&` ?P1C@^?'?]?6EB"-?2`BL `H<`?(!`,ОK 2?P@?Y@?Q{`?'`?JԖ?Vn@?1I=ӷ`7`Ԗ?4,h`HB?3 ?Jq?6(?<86C ?v@'SQ A' ?BҮ@??_@̦QW}`R>?YHR?\@?Lm&܆-?1/v@E}P[ T, F ;0` l] c L0 ?)3?I_/?:`?E}?^ T?S]#^c?Ps@?b?S8I!//R>?7j ?Uh ?XՀ?9pE @?EUW@?Z?X ?TB?[2 ?ObGj HV?:_?SZ@?Vn?;ҚK]ER?1 ?N,@?R) ?E$fA@?Fq֠?Y7 ?S`?9G?I+?[z?RQ"?PG!@?O--?= ?E?4 @S?: ?R6v?.4> ; &9R9@V=RL ??>R-΢SQ@biCaF? n ?`>=@?_?P o?B?Y[`?a%?@Xh@ZDC?D?I@ PcEah`"L@P-?P(?Y]@?T/?XƠ?IF0n?J9?]?A@JiI'M@%1`?EW?Q`?F ;{^N R  ?J ?c?P'` Z.`?L܀?Br'X@aT`7 ?!͠?W ?Rf`&PK%T^Hc?J%Q`?H1@x@) 4 +?Z?^*`L0 4M* QHU#?5_`?ZM?BZm`X e@?Hz?S?1]?H ?KHFj7W7PR>?R,L?P@?O<?] ?DIx`?9٠.g e S5@?L9 \ T3`2(}?B?GvHmT!@??64?!?R+`?V毠܆V T `?1@?T ٠?XX`?e ?ab[2V`H@ `@HC[`?7@? 3FR\R@a`[S%<`Ex @@EP`]`\S?a`?Vc?Q`?=`?h`?Y`?a`?.>g@\ZZF4@?N/)Mi?+?@?AHxOX?8`?N@?Q?Z[`?I \ IOCB@?% "$, O--YiU Vs?>R?2??d2L `VU?4R>?dt?SYO B-@*FWPY][`,Ga`?JU?8 X 1' ?"A@9K5`?4z ?@A`; ?N `?JN?KW`?X>?Qݎ ?D ?Y@93?)r?Nx ?K?0,u`H`Oʫ?"V6?@vԖ><`%dA? ; ?Br'?C1@?S1?U/?T8?Z$ ?@7 ?^ ?Y7 VMVy ?3wʀ*`PnH.]?5?Q `?'#@B?>?HQ?5@?E%?Rf` ZuU Y[`2o`?2y`?A?^?XzRi U?@*?`E`?B)?Y\ ?P$РRTxQ_@S@R`DY݀"bBPFA`>f@B G ?$pjL VB؀GS6qX0e諀Vũ?Un?[@F`P@N%=<?K#U`?Z /?= F=+?G?S7`?N1)\ FN`>o8? 11?K ? Fd14CQY?,?XRA]?VoL`?Vc *<-{^^ހ?A?L[?'j 3>*?G`?PH?:b@?V`?DI?5NDT-`?`R>&`?9`?A@?9?<??%d?KN ?8r`?+ ?_?a`&fY<9U?!J!?F=?_΀2<J/?Z`?_~v?@D3@@}*?5?6'T ;R>?Ai`?B`_%L; ? E?A@GG BG?4?/ 8Tx2y`?&D?B$?MK?D;z >; ?B` `@T I:?5D-T`M]%@?@0`?U?c ?_$I?Aܠ?D;b ?S ?>4> ?DР?@TNo@Sd`M]: V`?9i?J@?.@b`"L `?`>'`@?~?CV?`?a?M?EC@?WmP?RC)`?䳠?@;H=B#hHS4zI ?6?MxE`RDnL2`?3|?NH`?2ADč@@ё&܆4U@+B+P:m?<ˊ@?Z/z?Ce?A7,?UM`?<@?%ߠ?Ng 7]!SH@?@n ?Ui?PD dWMV@'-`?M. ?)>)U$VH0,u`?IU`?JnESU@+ҚB+Y`8 X !) S)?*n?S`FʾN@ ?LО?Le%PB?F`F`C 0x>J ?m@?3T:?B:E`"Kt`HR>?GmP?F?%Zk?k?j9rD,$`:?(JN?Q?KV#+0?.?Q?/a`Np?,R" a-@WxE1`?I@?aTc?V ?$5`?5Ԡ?Og?:^4U JnHc5S`-J`?1D?L*d@?8D?2(3 ?D7 2:?A\2(3 ?PB?NU ?# C1YUj?/y`?Y9 ATTj?E >`]@F,R?Pi?:a%JO`GG@>9@MGU  2z<ɠA]GSA7g ?R\ ?GyG-Z-J`?C1Y?/i?KQ?`7?8ۊc- bpQtG@S۠P-@3ӮG`Y@Qit?Hm?[?Oh?OÀ?[`?K3gu?! ?Fj@?E?9:0r`PL̺ 4 ?Nw 7p`;˲@?-`[ DR؀?z@?C?YFi?4vVzD߉@`)z?>a?@=?.O@?5tW6&?# ?U[ 5πZGq?>_?Vo9@?A `?ST?@K  S%, ^@N?4@`?TP#?_*?R3AK@ ?Rx?X?(0y@?C ?36@8GQ ?A)?\C ]?1ee?FDHF@=?2 7{8T@?V*?a+:@?AX>?1:?Aџ?V@"0@@8?E'?Nna%:P?j? ?:@?RX/Àb`Z 2B 'Ӏ?IW v`Z`Y >i?OP >\EtW?15?N@?B?&@?:?NȠ?=I`JO`?!t ?Oi?Q`? `?R?8#ZP@?4]-a< N?2@?S?X1?T? ?2nf@?GnI?J77C ?0L@?>_>R3?D?X??:B`PgJ+ I@CZ@?G*?4*CT{mSc`B ?> ?\ ?Q:`? ?6L`?S: Fk``?D/?b6 ?CF1+N?5?CU ?QY94][ KG?4b ?CU ?S@?Au[f\v%?B;#?Y7`?6PC`LR75xA1 ?0@6 @?0?TR؀ @T @?F/:@K9`V[]L'?OK?`@?I`D 1џ??~?""4|@&`?'?D?]$?_?B (N ??O=@`F]@U 4P#?<'= 4?J ?C@9 I@7{QE`\v%R@?,sq@?J?8?=?Wf`?Q P?:P?Y<?]QM?U*Hd ?Eπ?=| V`P`?@l@?9D=VmQ½?0?:L]@H ?Kք?S`,T:~L-j?0?@P?K6?;T ?8?/(?T\P?%ZK@ |>;Ȁ?N7F?1YMu`?G7?[VVf~`H ?&?5վ?Iɢ`?5G=&Nw ?)>a q> XJ@RΘ?P~`?ASWdVgؠ4 F9N?B?UNw ?2@?2` d@CLg@ @>FƀX@Xh E @0  5y =T1c@T|S` B p@?&r?D7 ?'@?W?e@?KJ@LH'@.?2=@?&`=P7j@?2N@H@?`?H@/m8!@t<7`!c@ZrAD@0?.eE@?0㇀?1D?Tz?R{`?+?PB?\?Q?3@=l[@@?@N?=0ص?2n?H|?*k@A TԠV@C\ ? 3?4$?@@?M(?V@?CUZm1?&`?@?Bn?9BZEtWH ?7 ?H@UDPBHۊ5?7` @ ?ڤ@0G`NـO=@D'?L?P@?0|?@=?HP`oQHO 0 ?6AM ?-|?D `?H `???>$V 4b 5@?;d@`"c?Cށ`A [~`?Te'It?P@?W1p8`DJ?ՠA]GK`> @?#K˲@V1:?T ?LߪB $N_`KTWWJZ?HȚ3}2i?I@?PЗ Am1Ѡ?S8\X+@\@?Ar?L/̀?A?FE?92 ?'U 2 $\ @A F`EÀ?W?d(;?Q!P@Oh;T?@?1q?= =| &`?8ER ` ?Xc?\9E?CZ@?@< ?Y4?Q ?H@>N?@S_WPU|`?%ł?[m ?YJ?;?SY?_1?.bSU߀0 ?4?!t ?4:~?DBNDb  \=gJCb@wN@n??JO`?Y>K?O@ ?%YI?0@?v3<+ @?#@?B<`?S]`?Q ?=f?$?4p?>Ƞ??@ ?EH`?B0>@6@?U?O@ )'L?1'?&r *?JCb?QF? ?cR Uxf?v?Jր99 D `?R?T53`?@BQS\Ĝ@)`?G{;_yP??QM ?<:oCFCY`@-@l@B8o4 ?5π?U?US`/Fo? d@7KBn?2c?B?L/̀?K<"F`CÀ?G@?I?1Y?`?7%<?':@BTKu ?Q& ?f" ?Qaz@ac^`>ـ;T" $?.HPCXa0(d ?d ?eb?3}gؠ?O?;{+HKY*@T)?X|?Z3'?d ?CW9?[2Ԡ?/S\M0`?i?L ?HL%?*B`?Z@FW5' @`@@@3?Zr?#*`?@#n?Z?]1?X ?Y?T ?&r <?.z`?R-?LV?0a@EK€Fgؠ$@?(d ?H3?P`O??BV1?XJ@?"ՠT]! `?(@@IO?BK_`?T].UKP~PSy M `LR ?i?L?MA@1?7@?SU߀>\nA<`??"`1`J??3<+,#\ (@>#?E?Y!`?ARu`?F?E*`?G ?9?2`?44?#?A?Pz?$*C* 6>A]G2i"`?O?S#?3d+.Š?:?O/m[Wl?-w?\w@?9,f`b ?Hz$@?QH ?=@?Dy @C'D\Hc?^$@?dL?D߉@#-?6Ga 6x`B>aV_XMQ R #`?D7 .i?Fo @,R?Ch?Fgؠ?;N(@RxTU DXA?!5; AWޠ?0A1?9Mty H?7@?L`?GS;?D `?DMo ?@? ?!j?HP`v? `/(R\\}RLG~?,R?Xp?(D?A/I ?A@IWSo?1 ?:Œ`@>>s`?Bk9ɢ`LB`>ť @K.ŠB ?ޠ?p?7e ?0 B*?/~?^eE@?U86lBV1?:@?G` ?5`?B?K{?5@?).9@G@?Q?eR?SU ?- ?9UGX W@6<?Ct?-6Ga #@>㝒@C Ml[@A,t ?CrH ?T=?[?U`?@?@?M`UłC ?=`?V?OXWT5?^?c@?Nٜ`?=w-`45?1j?0L@A13PZD?C ?BS}@6KG[Y` }?@-?I{, ?G .?7k ?Fbo`?T?N8@?>a?ؔ;?`?-l[@?Z?Y#=JA?T ?e?ZiC?F`?Qd ?Dz QmBʉE?P?bT?Nx5!_* U @^U IW?-ؔ?Cw`?̘R/`V3`E 7vg?Mw-?Y?O00?Q ?[0 ?BPȠ?y ?Q/I ?A?D4?;v`?@B?U ?~`E܀?Wy`?b?K9 4@`JB`J9`>;Ȁ?#?D?\`?R^O?2[?H.b??m@(H&D8d ?pH[w"@?N:~ =< ?GB?Hr`?H?0\@OK>7?Kri`?6l8261:@iK!>Sn9 ?'`?VՀ?Rk ?;(и`JɀZ)^L̺ @56 ? ,`?C6(? 5۠?Tw_?1jA ?M| ?N?Cށ`?C); ?X]?L FJF,R?+9 ?2M@=\[ ?D/@?YS?2y^ 5Z#}Y?Cc`?T>?S`?E-?0 ?N?C!?3b ` ??[-k`?\?SM?T $JSX : K?&"?Q͐ ?;W@CoNٜ`C9v;`'?'E@?O[.eE@d xW " Oc[:R?2BkM{< ?_`?de ?G@?7s`?B|G SU QU 6{ ?E`? - `>㝒@?:^?I]i ?Gǒ?If?M?P ?IG 0ZR\ UP< $? M`E ??"`9@U@7p`!:9R?G@?Q4?@?P2(3 ?Z`?Y2CAA?AD@?I,>iV,RRx?Tl?ZC@l@R*EJY!:?Sd ?T?%$k2 ?%`Bq@@\>\RPM?}?6`ZOcZ2[?B)`?8 ?,ߪ?U %d ;W@Q<`Q6 ?=QM?N_` GRۊA?-?T.Q?A<`EπD/>Ƭ>2[6DI 2?Y ?`u?W.?U?ÀU`R`@P8D*o"N+Y=w1t ?=V@?2ʉ??/ T_@W?P?=Tjրd\`O=@<X/UB?2H?V`?e ?cq?T\`?Tdn?DXAQY`Onk 6MMw-MI`TIj`F?8?OH@?HQ?"n?@i?L"F`#ށ`K)8|>d@?2ՠ? \QFTe?n4/@]- T-K:|45I ?#ށ`?E ?\mS: ?@^?T `Ƭ>?YY?]Ѡ?Og@?&?4:~?Xo?Wp`?(oQ?3V`?J%?@L@?J"@?Tq?2CAUd[X`H}4P#.9@?;O=@?7@C(Uf@^yR\?Lɠ?SHX`?&`>p?4/@2(3 D?%n?N!4/@_@TzNw 1'QXML?>_`?Bc?#7@?QA@[`?Kd@?U?<Ĝ@>$V 97`?G` ?S,?AB9?4L ?5 5I Kߠ2M@?A'+@>\NLJBk>F?O@ ?4*C*5۠?@GW?U?YWe Uf@?B@?:8A4??Z@?c ?[\`?>ޠ?-J`?F|`? K'@?V?^1`>v`R!U<UJ!< +? D [Ud5۠?I?I? 9 ?6"?Xߙ?U?4k`E>;@Q `@?5`A@6\?;)2<`R\ N]'`=a?< `AJ>CA?L 笄@1/I ?Ri"`?W4@?Jqa?G^?If?Rm1@?W`?W}+@?Y `?Wu `?TZ`?W7?S)?d Rk\S!)?ENw ?U -?K)\`F/`SZ@1 ?Q&?_?Qq6P@;e>;Ȁ0㇀<?CQЀ?^[ ?J@]d`Mi?DR?3NC ? 6E \?]m?K,`=< ?F]@?S*`?0L@"ՠ?,?COB k =`?+M0`UF1D|@p?Tl`?+oP ?&] >pO~?F?X`?'@?-?AB9v`?ՠ?4?4U ?S ?X??ށ`RE8hD]!?a  ?b!?$?K:m@?^/@>iHaʀ+Z?J^q MN`fQ5?S?N`@|N,t?@?c?a@?5=" ./($v?2<`?G@K ?@z?J?RL?M0`F@Q[g?-J`?#-?MK?#1YL{ 2@?)3J/m@?8?Q ?O"`?#7@@>$V ?0?J"@?R[ ?P?ɢ`>B78n@ CAN@Q`?"n?Tȉ?U4 ?8@6%#-?%C?*K?0q?B[ ?T `?Uu@>NWDZP~`?S?`?H.b?#\ ?#}J/i?W@?;:O9 9mHTC`~`?&r`?8>`?X`J-E?$p?#FG .^8@b0L?C1Y?)h;?]X?F`W0@Cj*@?)G>(0?"<`?3?OC!? GT(?Ok?+e@gDԶQ^@Nٜ`?A ?VN$?(.b3@?NB?N@8DZ`?U*?PR?K@E!JW?[?4Z`Zs?1D?`P ?7%<Y [MBN?Qd ?\D@?D<Ĝ@ 0?G?Py?A?a%?N8@?^O@?RL?<s?I?%-V -2@?J|?H!`?8n@?AX5I@Fl F? d@ND\]?]@RB?5S`?Y@?]R@?R\?A?L=TE[@ IRΘ5 ?G9E?`?I?Dp??=?J?9@?N)`?[?0W ?\p?P'}>ť @?:1?5I 4vL~C[[`@MI8Ip?@IO?8`DY?$@?<$?H?Nـ?Rv?9`X`_nk ?9?`0H?KDj?7?UV?.ȠXs`J!?*a%?p6bo`Fl?oQ?W*?6L`X{~@>?R@?2<`X=D^#R[ ?*d?a ?is`?W? N?9z?s`C6 @?.b?D `?Hи`4?`?[π?K`=@?JiC?U͠ @>` @@< <?M`?S{`;Ȁ67%@?KDj?YR?>SK@>]i ?^D?]?G{?A(?A`N.O@4/?Bՠ?P?M+@?X ?X\a@?CDI`f@+v`Fbo`^XD=" IEK9 ?.Ƭ?F@?9t?C7@?QC?A-?&r?; ?=Ba`?5y ?ށ`Q^@R?(`?R5`?;Y\?B@vT`0wN@?T&4X`U|`OV`?PJ?7PM" ?)'L?Y >@?A(V^RTQFFA8T@?>?DMo ?7:?D??1:)*?I.?Si@?7` ?L ?Z# ?5B?JA?[O=@?EG}}6r UrWe.z`?,R7U À?99 ?]Z@?QU*FNC???3ށ`I M@?K`?`D@?b?CӮ1 h`?9m2cP^?"8o?JCb?1Z@&2^O?EYI?[`?P/ ?;O=@?Oy`?9}6@?Onk ?]@?;;?H>`?T{mpO ?`?W .?MXJm@M?Fe$?P="@\XȠP" l[@?@M?1?/ ?0A1?1 ?Gs`?Kh ?B?<3?4k`?&] A `S 5#-?J@?AɁ ?:qa?C1Y'U @?Fr ?V?:P4Ԡ>h;)\`VzF`?FP@?Cށ` l[@?Es@?F2`\?0y@Gp`Z`?3 ?](?@~`P"A ?R@?^0?T:~?Sf@?S)&?`K?5Nw ?H% @"`?IE?COG .Y#=M{?H3?V1?#Jd* 6?2~`=`T@M`0+>?$`_0jG=H@= @D6lK @h?!c@?2^O?E+J?UZ?K@Bq@@0㇀?VD?SECJQEd V bX-@4EQ@?%@?I?X#?W`?6LEr;e?:ݚL b+TC}@@H@J?D]?YQQ Js?B`?Pj@?I/j?K ?@3}6<IGe8e?!)?KEfA1@TS7@?2ʉ?+9 F/`CrH GG@R`Cq?Nw ?5>;@?R|?W?4k`DXAAj00`D̘H `? q?I ?<?44?G?C<+A@TT2=]?"@F @EV?5d 0@RJ ?a?S ?5 It,?O*`?M{?=`?M?H#BK_`QrK`WnI]']@Dz?=;?#<+ESOK>?#gu?NeE@?< $v?`?B?Qh`?RA ?F,R R:;DA OkE͠`_E\ YΠG'`5?%YI?Lsq@?Dk ?9 >@?U?A@IU6 ?GU@ VL`O҆`J: 6O,AU*-??C?U ?WÃ?:?Bfm?BV1?ZiC>pT9$?%y ?V!?FA'Md=`6`?:5B6Y=+@N DMD{mbxeIt?8|':@CA?Kh ?:K*k@?4`?:[?$=?L2 ?OK>3 Ik?~`?O ?[?^Zr?R;#?8Dz@AџJt Tw_Y9Fˠ?E?N}?9'FP `7`H 6`?ށ`2n=i?! ?@\?$̘? J E6`??I?G{.D0,?A@?1_@B9BZC(Z~ ^8L( ?% ?`/m6r?t "CAEq@&?9@?@Հ?Q ?R#7@RK ?U`% OS\@g?E͠i]ɳZ-.~0,4EQ@?L`?W[@?Haʀ?4J?3 ?99 B.C6NO@O??Ri?K,`?@\@?S?^?V@?oQ ?Phl?K)\`7s`?=?Y ?+DjHIp?AD?ZmR?Q'+@'7?:o?E@?H@6{ E:?8HAS\tQ78`A GLĜ@9bҀ?L'?Q7?D`?Qm?Ss?L56?TXA?R@?9?Q+?]?E%G0@G l?Ok?]?VX ?7p`9Fk1u?,]@2y^ IUK@?  ?QɁ ?F{ E[0 [f QE`N O2@D?~?S`2P@Sr`?.a?U]X?OX`?9z?R?2<`1?+?7ӀiNw C9h;?+# g# ?&r HDZ8@7 ?Aՠ>`9WaB`aI?$ ?N!?: OvNq?6@?c@R\ 5Nw ?MKQG&Ga ?P`?Q6 @P6A?C7@s`L ;9 ?&gؠ?J@?R)?&;)\`?J?c6@?`*2`CA$̘Db :?IR?0P< HCK%n 5#-?Pi?[P?;N"`?7 ?Q?\D@?KO=@Q+:@K6?@@?;""8@DB?-`?Y`?P?hLErB ?IUK@?R ?/`?s`?Phl?PZ&F<>BoQAV L ?p8(@Qc@RֵR3E;)@?E?I!`>R3?:k@?L@%-AF?&\?2?A(?T\`?CdRֵT` Y>YA@U';@?G` ۊ?@ V~G ?3 ?GӀ?@0Bk P`EPcQ>*?A)?SO(PiN Hd .ZrF \ Bs?R4`?.pAb?5Nw ?D"% ?:(@?%COXs`+`?S`?R!?-V@?895 ?T?0PWTB[?K,?0BʉK_yL%`?Q+?`@?`jt`?Ei`?,?F00GX?@+?5S`D^@U*?CAF7%@Bq@@L׌T ?"i?Q6`-aV @L`?9]i ?Nq=`^ȠS8B.?A@.ɢ`?U?Q h`7:?0FR)V?:P?Q@?8?9 ?E ?B[?:a%(.bF7%@DR;:?/?KI?"ՠHF@D`_?8?Y)?T@)G)z>iMؔG@?$|@+N=V@?'@?A h`?FZQ?L?+YQc@J`?Qj?S@,}'F?~C9?h?BN?!?FO?P@?2 ?G ?DB?61?;O=@?y @U;b[`?4EQ@?>/(?;Ȁ / Y `ZNT[};;?QSaQ8`'5x9m7j@BـY?R ʠ?Q?:?9 ?ENw ? |Yb\H`A7g ?I )'LU S> 3`?C<+?Lm?J1?=J`?'@?R=?[?`5P]`;Ȁ1:Q `h?A!$k`JW,`X/0l{?F &>&`PP`).pUGO<`?DP#?'*WM`?=| @ >p?ARu`?D0(#?J# ?ZB`NbgM% I?O?@%f@?2s?9bҀGϠ[m Haʀ?>J7?B@? 0 ?0\?UtW?_i?_?M `4>h?58B"* ?Tp`?T!?A@77?! ?6$52M@?M?fZ?e??2(3  @?N ?.9@2`?4 ?I?R?L~C?"?3l?Z?N`?D ?4ea%EZ\ U?+O=@U`Iɢ`?@K?R\BE W:@SW9R\?t ?Q`A a$U?ڤ@5i`> ?FO?`$?eM?Ss`(n@?R3?(Hи`_ka@MؔQU*cp@\?7 ?Yk?R|??y`?p?;?^iT@?Z@ER}m?4 ?0L@F4$?9? 9PPX;LPE >;Ȁ?=@?@l{?~` ;Ȁ?1$vK @?Rs?&] Ws R??2n?@F5DlP:n Z'vg?a]G?P:n TЧC?/~B-C&)7:@1D@SB B?#1Y>`:`D`?5?a$?bc?C MN`Hm?JA?\O?Xm?[ ?b@?Z+ ?1`]`U^3dAD;Ȁ?Sށ`?\A?dr?aT@;Ȁ%#-?Ra`?~CP3?+?[;@?[SL ?6ABX F?Y|`?UG?E*1>?Pi?L ?$̘?2=@hL 6Ga ?K?Ge ?;Ȁ+Dj9M-`?/K?O=]b+Yt@ P?*a%?4|@?QFH?]?U`:a%T@Ġ>a%1t @Y`H^J@V@1YWZmR?'@?Ub?X ?[= ?QJW?FT@?Y?PP`OS\?GHi?T? ?Ht?3@?6;ȀVJ\w@@^?`.@??4k2 ?I@?G@?9W?$|@:m@F1? P?K?W?C<+Fj@X dOv_ ?H&?\ ?>@!AKO=@?1`?G22c+O=@?E?FM>iG)`2 ?GB?B`?OK>?]^@TT2?J0r`?a6 ?b?]]?@CguV@a4]6>L H?' .?W6?Qr?M?MJ`56 =;?;`B>W o?Ws ?T2Og@(@?5` NT>H.b?[ ?c?Cb `D!F,`NO@5#-?G@?NG`?M:?@(\?>??y`E7A `?7V4P#L?g?5#-H[C`Uf@-?BS}@?%f@?N?$ ?BN?V@?ÀPZ1Z@?6}}?P ?a ?Wh?&@?@@?A`'5x>Y?@l@?LR ?S@?Hwo?7@K \TT2S6?@L@?Mh`>㝒@?XC61>;Ȁ?.$V ?I@?3U @MA@?Jn?LV?B?R_ ?J+ ?7F?A(FmAa_O`Ra`?5*`?"n@iNƬC); ?JCb?S??:ݚ?B`7 R`.eE@?! >`?D0?;?E͠?F E x`;?Q<`?[`?I)s@/y`=fGM@61EG?S;?a!@?;uO5y ?S8?\?*VS@R@ ?S?Nz`?:;D?Dk2 ?Pl@?=`F@TSRPW^92y^ VW BM@^E#-UW@/y`?V4p?S?5@@ H?R<}?b(?&@F_?PM^?Tm@?P3?K:[Y kT|@?:VS@ \3<+>&`?E @?LPT" a_O`D?T@?;Z-ؔKQQ?0?Hm7@J(@,=T>pLYm?*?[9Ua AWޠ?RGP?X1@?T/?@.A@?C8?Y ?]< ?PG@DV"ڠ4|@&Ga L ?n?Bk 7p`2y^ ?&1̀AGJ1P?-g?S?2[L̺ G`5 Nr̀Z?TyAM % @?-?9**@G~?i!`?G ?C6@?Oi?QT?P`?6 ?+`?X@?YY1"R`K6r?:@>h?> ?K=iDԶ?P?`?Z }Y; D=?Us?Yt?P ?S ?T.?.4`F"?1?(?>4?%@?#F?N`?AF)X`?)4yKX2H?Qm?:?W( ?[h?J~99 Lc5?O?cZ@?Y\4@H;&?`?8נ?TL:0r`[˲@??-|?^a@?F^3 MiK˲@? 9 >R\?F?`x?T̘?O ?Js?a%?;{?F1 C8?@i ?Sd Ul:?p?W+.ŠS ?C ?a w@?aL_?W ?2`3 ?Ca aW1?&}}?Nٜ`?/K?F\?D3? 5۠??v?7*?<7` PB @? ?*VS@<=T2z?)?=H#V_ PFA 5-?;{?8#LH'@QF@|C ?c@?W ?W8-@?Rՠ?X?6?`Kw?D ?Q& I`8?P#n+N0/ FƀNBҦMg-J`?RA ?C 8tAbI!`"y^ ?T; ?WӀ?K?A<`&] Ml[@< ?Dm?R?RH?J?TNɀ?W ?J?Dk`?V_ ?DԠB#QЀ?8t?Hm?]J`?\ɠ?Am%@(?H`?UT99 ^37Q `4P#?56 ?U?Dx@>CA?Z]?cÀ?S ?C@%y RB%~>?Hl ?Xנ?Ry`?U@?Zd?I;Ȁ9zA'+@?%f@?P{ ?L?CA9?0?E@?!??9U?SD?M#N@?=?AxV@? ;Ȁ2p?)E aY ?HP`?Oc?.ޠ?ND?F<5?""?ARu`?06_ ?,'0;I?+?&gؠ G?4EQ@?< ?2 @ՠ?9G?Y6?Fƀ?MW7U \?J3'+Z1/I ?R?E @9<?z2R?$?C_WJ^?1Ѡ?` o`?`Yɢ`P$ QQ S8Y0?9?A S> _@?/ \??e2"Uu@WU ?v?Rj?Ln?, ? ?KG@?P="?R@?R-?V ?Q,?9U> >`?%C?\c5?W:@?%8???L1?7vgs`CG8?1$v?J5۠?B?D ?@Qm?5y ?G=?D'`?;ք?Tp?T PGӀA@L{ C?.~?$3`,hN%I I?@?4*C?Ƭ?E::04=aA_It&1?!F>NN?.Ƭ?Jo?E @??ڤ@?T@?Hr @N?=\?Sd? @?U`?Mw-?0l{# ?RM" \7`Gcw@? h@K ?>Zr?G@?9 ?Y ?`0@W(1̀4$O"@5?:ր?RCA?T6o1JWN?)G ?)V!@aY V{ ..ZrT=TB? ?J`?$|@EA?8@?B ?^%?P7D?L?8@OiB @?L?Fb`?<Ĝ@?^e?`hl?$pK{?(3?A`?I2 ;ȀG-Z9U C X@X]i 4̘?A h`?V?C@?ۊNL?< `?HO B @)z?By`3L9<?\?QmAjSϟK ?$`_?D?@@?=" ?< ?C ?T]?M KK)?N}?J`C\ GU >@ ?RB?`$?W?EU`?L$?9kV_cj@XAS?1?A:B@O@l`6@?`1/I Hr BS}@QD@?4?[U cӮ_D{`??0=@ v`?A?6Ga ?Ss?fu?aY >;ȀE"8o3ށ`C2R`D`_[ U6`j6 @WI@`jt`aW ?6G^``"K ?5C?6{ Oy`a]GU?5 ?H#?GnI?4ԠMiB<`?T; ?Ri"`8и`GϠH Q (z$@?U?Ui`\ۊ?V1?]`0HV|`?=?9D4*C? qCc`UI?UFY ?e ?RTנK@<2 ?Ij`?F1?;z@?V?Y/`C6^ݫ`8?Au6r G" ><"F`Ap8`Ed 1U*>\Cj*@<``?D5?:րEH`MV@A>I9 Iv@@,FL`0`?QS?S?X ?PV?XD?>9@SIR=@?#?N@?O@ ?@`?U|u?^p?Gt5 @?3};.ŠSAdR3R@Q½?E?NS?\<VZS+9 ?C> ?0q?-Jn6gؠ?O8N?61bΘfCl?B?9W?s`Hc7j@?]+?b?>ZrO[T.Q3E?\\q?f;`?U`1ee??W2?X@?)N*<=T?M `?Ne3+Iv@HU+J\3O~?QT?aH ?61ZJ&`NƬ?6<?3?>`?W@?Ub \D|@?^/@?Ar?5#-3H]?'?Sd ?B;# ]i ?0F??XGcw@ccށ`Q<`" K[wJ?2M@?3A?2"?2i"`\%`@!`@@1q?;_y?W@?KR@\6 9m?F ?=" .Q82>Y"y^ E @>_`?<$)X`*@ ?Cgu?J$`?I@VP@Eł?HIp?I*@?&l?5 >D.@0L@?3b `?2~`+eN`4/@?Lh?9*?@C`?``?Wo ?"8o?A?4b M `M98D?( ?So?U8 ?"3W9?IR?C7@`C`i`T@$ 70@00FR3G@?KY?TԶ8ZsYC+?S?bX9`?\~C?Phl?JA??!U*-V@?.?JiC?T?Kք#gu>pB>S WG ?D`?T\P ZU S`LA@Z!RCA?4 `?Bv?2?<``?9M-`?BH?V?Rʉ?"@?L׌?` ?P ?`?=?7p`( ?nk Q`[u Z9'L?UK?S5π1 ?LA@?O"`?6@3@M+l A ?> ?D̘>A)EU`2@?<3WUV`5t?<'?,2 CӮI{, ?$#:??Q1MEGH ]i ?Sǂ?^' ?Zd?D^@BV1Kޢ ?8?R>@5۠%`?By^ ?KY0K?2 ?K?T ?De77@Oy`c[`aџGvg4!@;,`;9 C`?ۊ?X1?]" ?O,?K,`?G*':@.ޠ?G ?H -A@Hr 8_?$@g%Z?R?`s?`?Lv%?AɁ ?Vƀ?W@?BNHGG@?HY?T? ?}JF`;Z?0?ՠCj*@;?A]G?QD?QY`?=A@F @L2 ?4?JP?XCDI`?9@?J-?W ?6bo`P,X\D@T`)Ga%DԠG%<I/s`?F@"NYV" L"-?R=@?Q?Ov?Z?&`^P8 ?J# AuOnk >;Ȁ>R3MKRH>h?PB?:KOI`_Z`4p%Bv?=" ?Qd R3RfmRo2ʉ?KQ?En@ @V?=;?GK?iDAM ?D̘?V?7 .OP I =9<$?Dp?T?Aee?8?G` ?B`?Fk?Gcw@?9ɢ`?B?"NRU3hAr8D`SK ZATQ~ ;?*ր?B?-J`IR1 ?AB9?-K7U ?2@5U`NYHE?8i?;jK2z? 9?QD@?Y ?S`l[@H?2i?S: ?.DB=@?C?`۠?XQ$|@6M?I?XY?Xи`?F KLK9`?C?I `$@I GV? ?L `W@Md=`?5@P ?^/@;eCw`%`'V7?!u2`X#XrAZ@?I?`F@?Tz>㝒@?<? Pi ?U`?Rx?A?8?4b L8 \``ZH\a@??$3 F!AZ@?#9z?Gj@?U]X>pS@J`?@i?U[@?=`GϠ DJ?1` 2 ?=?=+@0;ȀJYAF?U`?H0?L?:`?+v`?(@?5-?;o@ P6_ Os`# 5łK@-A@1eeVVe$I*C.`J?7f+?5?EQ+?,O;?RJ ?OJ?/i?R?dQ~ ?[K.@J _vKA?I?[ ?=`^0W#?@\NW '*PL@?0?I{, Ih;U4 ?N7F?aT|?Zr?U`?=Lsq@7@?N4?S?,ߪ;)3Lg@?%`?49JM5d ?8MQMKo2z?;h ?Fbo`?E?Wj?a@?A YkQD@?)?t ?)G?D|@7[Y`[Y#=#?L?Mi?LO?MT?N?@@?9?"`Xи`U3h?>Ƞ?MK>\?E ?R;@Zt [;@Un(z$@?/ .Q?1JW?5`Mty A/I ?S?S?0y@?1u?'Qb[{Jn?H_?^x5?; btSo?U@? E @?ZTg# 1jU QH?V1?_w@?0 KW[ a%?LPE ?>?7e ?P;?FD:`IWArt (EZ?(?K+A4?*K>l[@>)`HI0A W@Cd??i1@J -?\ƬC8[ `H&D?895 ??9?Dk2 ?iK?`F@828o1uE3hG? ?FW?<`@=T?I}?^ـ?Y(2S}@R ?6P@?Y?N?@@?M ?,8 TzTm?8?S ?E?BN?FO?n:?61?-V@?@?TR?]w?cb?]w-?9 ?A`?CݠE KBF?@/ ?UT?C?J?Uh+ ?1'HۊWH\ =?= ??ؔ? ;ȀD7 >h?Sd?D`EYw \׌P`>v`?GU?F?3?G?#guX>3?d{m?IΠ"?e J!Mu`UYIK)?  F9'L?Qit?]K?;ȀUѯ?"`?P =X@O?/ ?20R=WU Gcw@V@X>?0?JS?Q6 `d VN?"z?F{ ?;B(3 Xn@I?*ր8&M]Rxc&dL(=+@WG14?Yd,?@ZUnT 8]?1 >CAW_ O,}?R?H1@1$v>U ?@[`?U?@B? `?]Fz?`㇀?E"CA?6?:v=< 8|?P?U?1Z@ @}BF<FNF @?45?Q?S?[@?^D?QcPصY`PFSZ@?.D?\2l`TŠ?Sq?P@0X XF`EY,Yxw@?Iu?OUW@gGQ?./(LH'@Vi3E^?;?O҆`2@Q'+@MwY Z"@?.?Q?>j3WG^47p`?P^?5f@X^ ?!4?T?"nCQЀHP`_ __:@f@XTC`)ɢ`?`&Ѐ?T? 7J2Dv??ڤ@?PFOc L[?4 <T]L?8z$@?PA1?1U*&l?K+?\?NGӀQc@$?/s`1 ??UpI?V >U J(@QTL=TPm U܀G I`US`CEGXv@?R`?D` cf@?Nw ?@QD`RX?:o?W=?R!?WF?[u?JQ?8t?/y`C x W^pMW?R@?X95 ?# ?DN?:~ ?#`?FmA?CV`F!WVR[P``?9`\`esB?_M?KI4@IJx %YFiZ1̠$k2 ?Fƀ?4Sb `^O@F?C@BS}@Uj82??À?;o?I ?<"F`2@ՠ.ـ@>?./(iF}}?2?CoIzQS?/(C@)?R\ ?SF > G61MN`HIp?E?CːK`@=?PԦ?V?`?TJ?I?J?Q?`g?# X>Bl`2Y>KZր&<?Sϟ?S ?Nw =qĀ?=V@?R-?""U]XR `?"?3S@Qm]i ?V@?Z<@?8@JQX~3 WE`D D0R`D 0L@A56N?d\$?X`?W`Koc%, C?Cgu4 P?D?`T@?bfm?Sd?Sr`?]?U?J?J(@?Bv*KS,OEՠ?D?KKJ@T?a%?G` ?aMV`B@?Cː?H??l[@$@?E?G0@T_å3?@?@;Ȁ?@:@G?*vR1`M?R%~?[!>?K?5?G?SK @R?3?Rc?,=T?g)@F?2@?Hc?;T?+`KjKX?@Z?à?D=MX;.Š?1Z@?D]?Sr`?P->>4`1 `?*?Ed ?I `?I\ ?*+ RA X71?O?Z?W2?F?ROn`?X!?$|@@3?7"0VIz?Nj?Yax ?DMo J|VB@?AF?@F@3=0`?D?D!@0\#d?M @?X?Qh`?.bIL@.a! AG?4!@?`?e槀?]{`NB?6M?Uu R3S!@2CA?:v?~`?$`_?UK€?aHP?W@?8D?>?d?R0Q ?P`?H?R@?Z!?VR3?.z`H6M>QyX@4P#?0㇀2S`d br"CA?O~>`5ł?G@?PL@'KS?Oڤ@?a>?:dTI?= ?Q0?1 9 ?CÀ?P<?N*?^_`?b>`?RN`R\ Ta?AF?Z?K ~C+o?$v?% @s@?@`?O'`PQm2 ?:K?@LxڀX1\=TZ|4A:?N}@?R[ ?G8-@?M ?Pi?FW?@-" ?Cd?[?V ?8נ.,``>Y!u?$?^a6`?i@?]w@@/~?:k@ƬI4-6>?<7`23Q%2s?PB?SY?>~ =T>]i ?7@?3s??7` ?K?Tm?P@Nw :d?~C3}GX 6ΨF?n<]@Zp Q `DX Y0@[`?$J?8?A!?B/`0 >ٳ`?3 6FƊO WAɁ ?0;ȀCDI`F?3 ?Gv?S?Tl?.eE@ @?4 `?À?Ta?\n?P ?1D?0F?A]G?R?P o`?4EQ@?M0`?TA'+@\L~C'?6W?P/?'K ?\@?\=T?2`?P?`x?Ws`?Hwo*@À?a9n?fh?4W& Pd]- ?`?F?VT@?G'`HL%IWO=@8YR3Y+VqPS_i XV?Px?c?X?H?Q?V*?#&U$?``O?`@?I:`1:K\`'s`?>#.4`6?>/(%łQ" ?>aQ1]!/;?G>jY. E?H#?Q`?L?Ct?)@';eIh;H@A/I ?E#-?@;Ȁ?:ր?P?< FCJ?nk ?]?gY ?X^?1_KLZk@R!Ah`?)?Vm?Tl?&?P,?:?;.Š?I$?? @T" B^O?B~`?7:@Fgؠ?0\@?S@@PCAѠ2N?0A1>R3?/ ?X#?[?Ie ?1Ѡ?1c@?*5tWO8N8Y??1jGU ?;?M ?R?^ޠ?IJ-g?Q:?NO.I`?:|4?I?N?$ `1D?S'?Z@;ȀOM:5۠?=0`?R0Q ?Y?VΨ?"y^ MYj%`?Fe$?=`NU Pl@6Ga LQ`?Mi?]a?4==qĀ?<3?P`%CX )X`?\&U`?Vm?4 B(3 Y}Fo?T?I `Hg3J`MI/ R&?,~C?R p@;[zAT?I?< ;{(z$@?E`?Q?S ?U?Tp?F &:@ T=@QD:~By`BA?0|?Z?RCG` y ?\d^U܂ 3 ?2QbڠSs`?+ ?8?U > @??y=C@H1'?$?"@@ 5y G@K@$k`?}}?@q?U'@?Wy`?QѠ?=;>N?@M?QY`?R0Q ?L'=u`Q?`_?$`<}?4` @^' \ (95 ?-J`BcQ+:@+O=@?BL?$N`>O@^[ Zs?K?[2Ԡ?C); ?# ?ۊ&?`?H_?Z!?AFO F] ?C\ ?RD?Cgu? h?!`? K?@?N#?a?^Bc@ZmRQ?0?3b `P_`T.Q?NJ7?X`?3?'V?R@?R?|JP@@2`Ej? ?Iy ?,3?P,CrH \B<2 14CÀ?K?J F ?K)\`?Rj|?Sd ?Bv?B?W?Z?G z@DePA?M?'FQD@gu`d=SvW6!@?<-?[X[v`A ? ?@?1U*?0q2`>eE@?pc@:k@?0Z?T?QY93<+Lɠ? ?> BfmM@Hr HQ]i &] ZPV &?&\?A?;2@HIp9ɢ`P="`@@M?P6_ %YIJCIUVq@@?0 JM#N@?N?TV`K,Iܒ?L~@?3 9s@?Dy?UD?W ?V1?K)\`?N?O@l`?.bIOSr`H? GS!@a/I ? ~`?[w?Odz?R@?U!Ҡ#@JS:%D4@З ?*5۠.9@SsLU`,2 ?8?&36@s`?:P?R?IZ%CJ0r`TCR@F@B? ?SE?Om?!)?:~ ?E) ?'.$V Kz@Bՠ?UT?`?X ?b7?K.Š?\ ?O@l`?1џ3`A ;,`<s?D?D`:`Z=M@?C?P`)R@?%`?[;@?X5& ?Ov?-K9R?( LnU/YMiPK Gcw@B"N%?.Ƭ@?/`?QJ`M Qvac@PM':@O,ZE 8oQ_Zݚ?,8 1U2@?JA?GE`2zI:`?FO?_1@?H`OYC ?DZ`5*`Tm?I?c\ ?[};?[[j?[ ?&<;Z?2@?$k`?2?Q  Vi3?- ?Z# ?H6?P+?aNf`?QS?1c@?Ri?W@ @Jր &#`!j `?8>`??G ?Z2?@K5>;@?3?6?I?]M>?Tj?7?5`?6"?GX?N_,PZB0Q .~?0ص?Vc?TH?#S?8t?4{m@qQr?ށ`?Yy?KH?H}?gB?@=?? `a%]i P="V1@? ;Ȁ?@K?DN=ؔYSt@!?>3!@S " ?Tz@?Q&?E`?')`C&` d@?H@?v`9FWNg&r Gs Ah`?2ՠ?2N?E?L?`- &1P`Z Xm`N$3 *d3FK˲@b/`d@Vm] dR ?- A@V@\ۛ?!_?`v?V=8XċR@?.Q?6!@8>`?5 ?M,?:?P ?Z?0 C@?&R3?2n?5@?RQ?8T@H|?B[?V=V@SA?2?F/@C`H&?O1?\Q?, :?A?1ee.>J,?AWޠ?^?R`?9xw?Q|e ?P7?G@?OP ?;@XF@X`7[Y`4JHTC`JN5@Hl G?ET?H -UKÔ@?2EE?*o?3rH ?,1?AD?Um`?Fu_?M?WH>S7@A@?*`?2l`s@?y=5?0%`Fn T P@?Lm?bـ?`L@?TY? hM0`R[ZGq,2 ??8N(n@N M`?!?U`?V?B=ECX=DPQ6@D/Dk2 &<?U*?J-?S 1c@Yn@QOFe$A?/ipM.eE@>iJN5@>CA?T?67%@TCS ?4e?Q,3>N?W& ?OEՠ- ?n?I\ ?^ ?S8?/(?,`? : Md=`U>;@4@?OÀ?QJ?R?R?1(n@T1_`R!o*oBV"Vb`PK Tt`IU?JF`a`SF O=@?HD?===`QUU``fe`P&#`-6>??Q0?\ߪ?T >YNN`@@DO{@CLg@?#1Y? 9P U܂ ?1 ?Z?VT@?Xs`?`"?@d]R@@l{?@C`(и`VX Uj,3?00*?>Ƭ?U`?Wk ?aϗ?`@?_?`="?[o?Q?#QЀ?2?T|@?GB8@?A7?M>\?M0`?GE`??-|"@STe3l3Gs` ?Eq@?Eπ?0`Mu``_[S L4@>ƬT3@`4WM.ޠy ?^G`?iΠ?\3܀?1Z@?5`?M?IG%Nw ?-w?] `?WhCA?'@?6Ψ?PX1?N 1VN@Rm1@?23?<Ĝ@<``?;Ȁ?JiC?CY`?>@?4!@?0+?KJ@?5-[zef[m ?BC@_K@dzbLAb ?QQp8`??rH ?EQ+6{ ?O@?Y?By^ ?:qa@[ǣ@Y?5 ?J F ?/^/@?PЗ ?`A?TL?,``)t@ ?+O=@c@>@?4e5f@OV`?M?$5>?DR؀Fz8@Q@7?9EagZ帠Ls?F?S?0@t?%8?SI?Q{ ?%.Zr?*Œ`?Q`?avN?al)`?B?Iɢ`?3guR@B?R ?Wf`?AxV@CguPhlN9@TI7`?ND?PP :/@ ?D?07ǒHSoQ½Gt4Z`# R0Z3`H@?@;Ȁ&<?R?d`?Y؃?IBZ?T?Z?Q6`>F?,`?Vgؠ?T>]i *+ "`CӮ4$?G0@?"-]oRa`?a w@?g}+@?UC?G ?< /S\4{m-A@?EV?`"?QKTQ`??5۠?8t5Rj`/g|~ V?Sb?P> @?6 ?9ɢ`H}?1 ??;6&r '`R@M ?@0?;<-?@?X ?5G`6M"`?9BZ?T??Jo?`,J笄@?XoQ?J]DR\[d@Z Q@PG2NFT@B ?C); ?XTC`?YpY?8TC`Na$??Re`?1/I OK>E6`7{9}?G`?V8>J7^0Am?4yD = ?P㇀?TN a%V[sV/[`SI?J?RHE6`Kߠ?5tW?A@?4v?1Y=FzBX:!5?<?<s?AX?X ?NjN~F ?88tR1`5?C?Bn!_/(?J!?M" !;ք>ՠ20B@?>?BM@RE*`?]Bk?XQ*?/ ?Czf?9?=`?"0?I?\㹀?<``Fl?A/I ?RA ?7K ?!?TL?M:`ze?8?Vx`?I?@?8|7e ?N<9bҀ2[EվZ76Px?%łpJʪ@FD<C?#@?A S`c9v\+QxV@?5d ?]??FOP5U`U? A@?Xm?B? `?N<?)G @d]?}2CAIv@1 ?v?Ch?T^@?M`?37@BـWޠA:?AuA K`?N$V ?R< :P?Fbo`1t \ A ?Qd ?A ?+# ?QT@?H.bIe U+JGBX1@_KJ|*`Q5 UE6P@?D ?R0?G 2[?ڤ@97`E+J1j?F|`?VP@?YpY?G83?9J@MW P`)]i +DXA6?9BZ?<~C7%<C?7j@?G8-@ ]i ?H@?>u <$: `_ `edE?F2`?R>?WĠ?Fz?I@?U -1ѠO `?KH?[?O `?5?A?b.?e<J?fKpG?Kd@?Kb-?M>\?1$v?V?@0?Ba`?#ށ`S4 O^/@?DsP?D]L-MѠ?/s`?0ZV@61VP@[z@S Vbo`0F?W*Y`-[M#N@+Y?.a6 @?A`?ac@?Xeـ?Odz?W!-?O8N?gؠ?C<+?EU`?N?)*E RS}@T3w`? |P Aџ?\`?`A> @AF?K?RֵN?!:?R.?C ?+v`?P\@?1uV@Q>h?@ DXAWPj@KwҠY [`9@?Q`?Rj?. v`? PG [ETc@*+ ?# ? ?C6@?PՀ?P?MA@?L=T?QG?O ?}}F!@@Qm4L 4k`6}}A % @?2S}@? }?5?E*`Y6Ga K ecI3?2@>?7[Y`?"z?Os`?`,?Fr 6?6^?G@?Qm?TZ`?Cd?MI ?S =" P  ?5t?7?!?TM?V/`?DZ`?6] ?SU?V &>N?2@?`;U4?S ?CFCY`6?<?Ud?Q@@QUU܀?9M-`;`  NR`?p?HB ?Xi?K?Md=`?SFCzfX"5@?:5۠?0㇀?C); ?,``;,`G^KA@D:~P`??V0a?Pz??"8o?Rk ?\U`?LR?4|@?BPȠ,B@??=>\VqPJ-"`?2JU@I?,`NJ7^[ @`?T1?[ ?Ql)`?7*?6- agm@fU`Sn9 %8CA?4k2 ??)?Jm@?\}?^)`?WӀ?@#n?`?47 G%<?(Y?+.ŠH{`OC!#-?S ?Tk2 92 ƬJVS@>J7?;99 RQY`Iu?PU|`?e`?[I?%Nw @l{LR ?/S\?X?H 2DFR3?Gk ?`?G`  ?W`?_Jj? ?O"`?Q}?9W%8T>c}`A*+ ?G0+P@>?Z??c ?SGX_~`/s`X5& FY(?,R?9?1`?A ?<}?3?pJPN+D?$@?AD@?/2@?%'?3Lg@0;ȀNr̀SQЀ; ?L?C7`?0q?P?L?K?A ?.p?830gAq?=&?0gFP@s`?-?#`?U<?QI 14?Um`? ?3W@dL R?6\?3 8.bG=T?L-?H Ht_ G?Qd ?0+UVPؠ7U  ?:ր99 Ue>l[@?R)2 U6mA?Dp`@G?<}?3 ?N?W?DH:1@K]b QIA?')`?T?'5xU`&?S?@C9v1?F@>V`4@?\o`?X?*o8\?OK?F`LJ F ?'1TOvQb TMX(oQ"`C,M^ KW@i?S1Y?ZP?X#?WnI?PՀ?@j?NT`E9G ?O2A$v?U?ZN5@?L ?JS?`A!?#S?+.ŠQ#`P?P/?`?@ N>?9xw?Q)?SFa`?rH ?\Cc- 5c?UV? Tg# C8?2?C&?Rj|?S x ?.Ƞ-?B[ ?L'?8ۊ9 7?1{ & AD@GX ?'@?[?Y?Cc`?Bʉ@SOb@`% ?@?V?B;#?O00?bY?U?5?LEr?" N@?3rH ?U?1 ,8 ?O{@?V] ?5S` ~`?@&#`?JCb?P?T3R,B ?9M-`?V}D/@`K};?:^?D@3?(@?5#-&`F`MC3?? ?!A/I ? d@?M:?9kO@l`QɁ ?:v?UYI?7H@  ?@t?Ey ?H@?,~C56 ?:ݚ?S?D/?`?=?N*?Iv@?#\ 88(@%d ?9 ?Pi?@@EjL9R?7?G-Z>v`B=OÀ_@ Yz?-A@?I?PԦ?[`?E PKW YG M,?JB`?Y?M`3?K.Š?J0r`F_Tx@PQ7:^? KJnXeـQG3?2S}@?At CV`D@Fx`?DM?B ?=qĀ.z`XIUK@?T?K)\`Eq@?$*C?2l`J0r`T[D? ?Hи`?Q`?%8?7E`?L`?C!W DAOR!o!c@?O@?6^:!@?J`>Ƭ?8и`?D 0=Q`F1 5۠?v?,}? 2 $@&#`S1YV3`+?7 .>?06_ !`UdP`?;?H|?zOVr "?N3 ?2`-" ?D?W?Wf+?LJ?+l H#Z]Z-3A?)ɢ`$k2 ?KN?WÃ&J ?C?Kߠ$*C?,``?M?Ze4?KP9`\KwҠ?C8?\h?V1?3?4N?)U @V?;4.?If?.4`?IO?Og@?1/((z$@?@A1?HoQ>N!JW?"8o o?; ?N`?3 x 3 Jc`W:@=+@?PZ?0صUfQt ?7E`?Uq@?TR?A?$k2 ?!55CMty @+? @?Hz$@?9z9+ ?9?E?0|'s`IUK@W`OÀ:@%Nw DvDAZ@Ar<]@895 .eE@?4p?8`LpaI`[`, ?@1 LB?A]G?W`G dXAPy?/~??B[ ?2~`G ?J?i#=?bk ?GQ6`X7RfmA?4P#?<?TC?CA?7Ӏ?@3@ZW+l ?>? ?Kߠ?V`;TR ?DR?DpQYvTk2 3<+?S8?G5xXoc$Y%@8n@?Q`?am?Ww?$U ?:@?M]-w-Jd?<L@3`?A,?4/?@?G-Z?Q?F`c5gJ|?L FA?B ?C`>J$?2?AM ?]< ?U<?s`R_ 0???h2ʉ?/ ?F@?*5۠67%@0? N?K)\`?\V?P[`1 `?$v?D48@a@?C6@$U ??^/@B5`W_h`9*?S[H?W%<?B?+d@???2?*v?S;?Ww?!5IG D@`>_`ÀF<?A!?O@?H@E R?J F ?G*:P>B?^t&?in ?F9ZF`G( ?6^?;{?O@?J=! ?N`?d`?[*`?0F?3Ӯ? M]T*CAG?=g?>I Sq?DXA?9 ?0㇀? F?0?CLg@?;.Š?EI ?OZ@7:@Tq)`?)s@L`UT]E ]d=`2"?A*5۠82?#Ӯ?= ?Ok?Wj?CӮFbo`>ـ?B?'s`MѠPo0`IpYBـ?f@?&R3B8o@>?PL`?ZO`Hr c@CA?\ ۊ>?d?VO?M3KfBE ?G@?Ui`?R@?B|0SEZ F X\ YY5t?:?0K?J?W(?NB ?F?Qb?E;?C?X_`?L`'vg?Bk ?Fe$Ƞ?DԶ?8Ip?P?W ?G@? ,`2HIQeePo0`0+?W9?a$?Pl@?:k@?Q)?Uf@?4L M| 1:?bMf?k?Z|4?&R3?I ?[0 ?YI`?P?KQծU`@C`@?7*?We ?\Q`?7Bfm?7k (ۊQXI*@?A)?Q$v?P>?SO?1Kv`$ ?E'?B p@?Cb `pRKAU ?@?Sh?>u PM^D?>p?A ?F7%@?M+@?Bfm?=?H0?: 6Ac@??C?E*`= K@,?=J`?GHi?49 =`?GϠ?\(?H ?Y?^ 9 ?AZ@?ff?ZN`BPȠ?SΠ?SӮ7 P.A@*`6gؠW`[G[SL Y G .003 ?P/?aj?VL`?B?8D?`?XN ?MJ`z@?31YKri`?FT@?^y?!P\@2@A:I`LG7C@F1Ab6l-a? }}E^JN5@Fr?*?\`?b@?Qy>`?`_?5d 3b `V1NȠ?K/(?`?K?S ?`?X1@/~?G ?> ?2>?; 9""?E`?Pj?N?2CA?5YI?#-?' .?=;?2N??4?>p5`RR`&`?Va ?a?d ?Y`?)}?QU?d?V} 0?z?OJ?LMC@Tdn @?6\H DEQ@?@+6MF@;Ȁ?:B`(и`?̘??s`JAR?B ?Oy=?/(>Bc p?1O?T9$?<2 @K %-Zdg`8fM9Os`SӮRR `UGL*d@?*?B"?+Hե @-g@?E?O?I@?1{ 8TC`> ?E JA@FL`LFD? &#`?O?z@R0]ld. _zB|Ng`5_`ZTD`Ƭ?:?6] ?"`?Ne?I?@G LC}QE`6bo`?D@?#S+,` ?V%@?TB?>Sd@3ށ` 7`J?(z$@?W>?O`?O҆`?`?Y8> @I R`J5IWJ`a%B[NeE@TMo F/`?(95 !JWM:VX V`KKQC?! h`?M?:?AU*ť @Z5۠U @"0+>R3? a%Hr PQmWˡQ?_Wk?h`?J$?=]?L?]@?<?A ?1@?77?D"% ?1:@l@WX C.`; XY`OI`?CA?T??H@MoNޠ?:o?S6?L{ GI`GI G=5ZQ@[ \?S `?IΠ?H\a@?E;2 > ?]2/?ej2?\=T?Ba`?;4.?UT??Pa@?Z᩠3guXK˲@-J`D~"V[Y*@Z ?3 x ?L$?K?\M?Xp8z$@P=&GS;R)4:~?Eπ?Sgu?_`?aO?Qp8`Y: ,h?;Y Ku ?X.b?](?NA?P6_ ?Fn 0`E9?.eE@?G%<?@IO>U 5n@3AEV'*?M?SD?TMo ?Y4?EV-?37@6\[z`?R?]:?UBJ@?Z?S_WLxڀN`?B@?M ?I?G?>`?B8o?@N?\ ?5YI?L̺ ?2CARZWT>\?TԶ?WK?V`?U ?CO>JdClS _ OT(?$5s`H|O ?"`?M?N?V?VO?>ـ?%Nw ?O00?\ ?R&%YI?)]i ?9R@K?U0 ?Q>8@?#F9zX``PK ?'vg?[?R?E x`?OI`\a@MYj@Հ@@?5-?M?K`?R{`?P7J-ؔ?"  ?*+ ?1FRl`Z???G1:O8NJ E>;@3W9?B?M. ?Aټ?I ?F!@FRDǠNg4`?T?Kd@?5?Se`?=GP?"@>v`O?@?I'L058?)'L?Gf+?VP@?Y@Հ6`W~ՠ?KSaB`V7%@GP?B?U`?T?ZP?FoV(CQ?F &?[N?]?Q0?1 ?I?UK?Qh`?P{ ?P?G`?ށ`31Y?:P?SK ?L}?E x`?Ke?NU]XUS`6 A S2@3?N ?B/`@صG?%U`?Cgu? ?7 ?U`?Qn?<2 ?6`?= ?P/?EU`I`?W ?DpNEU`]i IJxQ)i?<$?6r?M ?H :KGD{mOi<$? IzQ7&`XUZ K:ECށ`?y ?6?4{m?RL?S> >?B ?R\EZP`?.4`EվQB9?@i }T=3`5πA Y/`Hn@'*?i?U%?R>`?4Ԡ?I >@?UH`?ap8`?A$vR?D ?Y?)?K9`?Yu?S\] U Rq@@Us@Ws CJ?K?<ߪL;?J# ?Z| ?\?2S}@P`8@?@l@?AO?#-5S`?6<?R?CÀ?$??Fƀ?@㇀3`E0 M O%n?E?A@?$*C?;?FJ>і T? W" i?+ZTǠJ^q ?P*2`?J|?')`?8z$@?@@?Wy?Z`0A1@q?AU*?nk Om;N\d`C;Ȁ?OK?Np?Fk?#QЀ?Ui`F?6?ASCށ`MJ`?0?S_W?U3h?R?C&?9?BS}@?<8 Iv@O[z4]>GU N,tZo U@?/2@?I=&[~@VP@+?FJ?V?R`?1q?G@?R$$@?1?R.?a@? \Bـ?S[H?A4?S@?RW@ ?0?U`LD?;?Np?I ?AO?R=?CrH ?+N?V %?G[Y`D?O@?aD?B(3 0;Ȁ?U ;d@= ?,ߪÀWnIbYV9JJnTC]i ?N?T?P@Czf_L@Z8@K %U`>J5n?D?`?VF?2?Fz?Mh`?&Ga @jB5`?Zr?H?B? P(d IULp? h㝒@Np@7:2(3 b@^ʀ?V9?`@?BCA7@;˲@?RCA?a[?4?5^?R@?Q`?G[Y`?AUV`EB2 9]i &`(?S R(3 0 ?Jݚ SV`?&?bZ@?a?D^@=F] 2y^ "4?5`?V_ ?S~uVY6<?I'L?P?Odz?$vBL*`?/y`?C!@?Hc?J? @?I*?> G?PՀ?`"?.#Pc?DM?U|u?Rz ?bG?d?^?d?X??-|?A'+@?Wt 3dX8]?E<?B0Q ?56 ?6M?CguQVՀa3X \"F`?0;Ȁ?W@?S9v?Bk N0ZC@SAB9?L1?T+@?Z?c?_rz?K?H^?O?I `?;`?9?P @?S-J?)h;ER aHP^!?K9 ?`?9BZ ?*@^@`Z?\?h{`?F &T|YZ+N?PE@?  )]i ?Q+:@?Q$v?QɁ ?WO,?n;?H`?UU`[h X? qEYI? ?L~C?Z(@?[:?MJ`H T>>@ ?5`?6^?`6?d* ?Fn 7*GhET?4?@C`?4@`?OI`?;_yCD@+D]YW]hL`Ut?$p?CD@??XD?L(Y,]f`PBQJW:`?:@N\`R@?Rʉ?bR ?C+N$9f?`R3?D]?S~u?Gj@?!F6K,H!LH'@T'`$N?Kb->J7F`?`A1?g?1 `[J帠?O+?S ?%C?<-?@?Ei`?Ma?vJ?0j?`6?\N4b N`?-w?J?E ?QY`?M< 45H>`?&?E<?;,`?R/`?dn?cM?E x`Hޠ?N$V ?4 ?S\>z`PhlM:?=qĀ?2@AxV@?. ?3=f?9 ?Q?'BFˠ q>YT VN$0/ H_It?Rŀ?U} 2=aJ=;D ?0g?5U`?P ?Y?K?4Ԡ% @U`U?z?S@?Ud@?CJ?I`VVB\Zk@XG?M6>?E3hH?y ?Qv?À?F?EtA `G*;.Š?Q(?H{`R ʠSk?H0?;z@9@WR@?3&`?Y]i ?N8@:+v`?@(?4/@> <=TS'G ?= ?@ ?*KÔ@<"F`?7@HȚV?C@??S\?X@?E`a4??A?]i ?X?KDj?<@!@???8@JsMd=`㝒@? @|F?C@CJN& G ?7K? [f[@?Ƭ?BK_`>?N8@?a#ɀ?Vbo`<S ?&?\?CWe XPKNZr\?= ?-+l ?=A@?&Ga 6r ?'K?4Ԡ8(@M6>XAV\@\@@a@1џ?E.~WP5 ?;ȀQ`C?2`7p`?,'@ I:`&?4?CrH KJ@?9@?Kwե @,O??^/@?G$?P@>eE@?>,``JP?Bʉ?^?W ?0Bՠ?Q͐ ?R<`?Q@?R[ FSFL56PL`DR?^ G?b AZ@.Zr>CAD'`??V`0\@?\R?Y迠?K@?Q?9Q;vTaP\@?7U ?T?A?36@`P>?Ss`?JE^@@T_@OX?J`?WÃ?T7 ?UK?6 Eվ?2?CU]XW@?9?QmNG` ?&Bʉ v`?D?Gk ?=A@P]g>?UV?3Ӯ`?Cd3Ӯ?R $?Q5?/À> )5۠?0 5πD l6@H >@=?;# ?]7?RA 58QSa:Y4?B^O?@K \tK ?F$4?KY?Y?`` ?-T7 ?-ؔ?`?X`?15 K"?;?`?YO?[Q?<$=f's`?: ?DԠ?IG ?P@?GG X`>Y?TŠ(Yœ4{m?[ ?aj?CU J# ?S.`?X`?IpY?Dm?/m-a@YxwY!`?OH@?]If` 0@? 5۠O`Nw ?XI2 R440?= 2<`PkQ[R|?6R3?[ޢ?Lxڀ?B p@?AbO%^ Ry`I*@V&G%<C $!@?P^?L?5?E?*VS@5tW?C`>pe{Ƞ_G0?_?d 7ǒ^B Y+E @?5f@?7V7FPTŠ!??^$V ?bk?Y@?UE?:@ T SG 5`RoPy@??0y@?@%U`|?F O@ A'+@2-?9?Q& ?Oq?*@ .9@NDM?Cb `<=TdP_,!&D?@`?R;#?Q7EtWRʉ?W=`?j?]s' 4`?;`?Q`?[ ?_, ?R@o0`W*C.`?Au?9!`?~C?1qDp`Z".?Z|4?AYΠWX ?Haʀ?e>;@?\``QX`.A@F- BB1' h$ `)COCU ?F_?R C`V[?@?" $L2 ?s`?Pe@C'JWL`M:?/(BE E6 ?0?"`?G*?]QM?P疀?7*?2"P'}TXAy =+@UGAxV@?,?#}c@?mA`?*d?D.@?L?VƊ?GϰM(5?a(?ccf3w`cZ_ A4#guCD@OSZ@D`_?P/?[\`?LO?RH?az?Vi32z>S!`CLg@MJ`G[Y`i?IBZ?K?VN@?\?% @Oy`?-K?Qu?AeeDGf+N`:@<A ?-?V@KW@Au?2i"`]i 92 :+ O҆`G ?V%@?c ?BՠQ 笄@?^?`@?MV@?@@?+l V\bS',`LߪSb0P%`Q+d@?\z4?UU`FT`?We ?S(K9`aZ[C6?:?R8o?B@?8N2c?F@?L ?A:?9%@?"`?4EQ@?2l`;˲@?;,`?K J`>@ ?@?L2 ?S1YDQ6 ?L `?Vn ?P?V0`?P.?<`?-" DE @?B?3SMHr`/(@Ij`C@97`a%?D ?W:?WX?RR#?Rb^?J|4?3 ?3b `MX;Z?:A`T.Ƭ?3 ?58?Uu@?RFzL[?:|4?0Qm<>J?-92i"`1̀,`K JY?#`?H#?O{@?=u`Q%R`?Rk ?a3`?M+@F?C@SӮRy`SguRNi?L@?H_?PN?R/`5S`X?>??h,`6,R?"M@@ W# ?dC?fN?D@L`W^p@XA}@QL``?D?:5۠??KDj?a,?Zn?6?`?)}?jG .MXH I:=AS?7k ?]ty ?e.?X>`:; ?UW@?ZJ&`?(97 CDI``?2>]i ?J?X^I*@?̘?UE?a`?X Px[f<?>a?U6?9s@?#7@?C?Q`?Q6 \FP@2n=QMS%, Sy I>0Z,H'@@@H-w?>/(?&1?+9 ?P_@ `QT'`?.O@g?%ł?CIS%, \׌?J2?],?Nw H1@J?S `?a?B|S^ P`?Hۊ?Nޠ7:@ՠ?TC?V?KDj?K?[?c?X>`?J?X(@?LaR `Ur?`?B?@?>eE@?X|?[?A)?/m?[_y?_T ?*5۠EπJ`UFM?0q?v`?F ?\@WKH@?G?Rk ?'ӀRNr̀?F?S ?'s`70@?2i?T?T`> K]d־ ?=X?[~@44/ ?T1?U)%-?9@MI Q^ ??Jր?R@?HF@?*@Gcw@X~3 T? a%?_?eNw ?X ?Y+?k/r?gTj\gD[ RCW9OXx?0,?e!Ҡ?UK€V`1?a?PQmSS(.b?\$?O ;Yi?BNS]{<V@?e2?^D?-a?dp`?a<?Hr`?-+l ?Gv?Vf~`?I:`?1??U?X?7Ӏ?+Z?BNDKߠUd W@6gؠ?VGa ?Y ?Q4?Z`?WV ?&#`7v:0r`QG5YI?HB ? ?K '`;?.b `GG@C ?6M?TԠ?Z0?X*S?Os`?CDI`?C ?"A7D?:m@%笄@?J1?T"% ?``?_%`QWޠ?00X5& DEQ@?]Y`?h7-?WM@IP`EYIR`;`?CEN`cG?7j@GU ,H'@?V@?Gv$`?R $?TAB`Mw-U܂ ?D `?]#N@?Y*@?O ?:B`?*o!uPU|`P ?+`?V ?\`?FE͠?-?YiƬbR#ZրC H@GϠEMؔ? 0?]Bk?L YXO?6P@?<]@4|@?J0r`?cen ?`@?BR`( 2S}@&H`K!>?a?[`R|FO?Yk ?W ?:P@S`5S`!@C x ?D?OfM@?Q?J 68_"@_ZVSY+[Rr?:# ?S ?Mg?I/j?3@Y`?#-?G .?1:?Kl?X+iIU?c@?Y?=?G \@l{;T?$5?G-Z?W?a?Z?2.8HTC`Ls?A?V@?A<`?Hи`?Xg3?@C`?Y?LnL(Q?@>R3FˠTX{~FDі 0K06_ ? ?/^/@?(d H95 ` _R.PZUN`%YI?0/ ??H@?04e?,R?Q?L?Qd?R!oI YX``?Yͱ`?.a7 @B|D #-?C?Qv?4 PصH@i7[Y`.b?)Ac@?3?UNw Jʪ@_?4@?SLg@\/ ?f@00LU`R4`?|?UtW?3!@N;Ȁ?>46?&}}?\7`?X95 ?.b2z1U*2`??Z@?R[ ?HȚ/h?? >Q_S@A CJPB p@?2ʉ?Sb `?Y0??Z@8oQY?$??% @*@ `7 `dG?C!?Gt'5xK62N?2/`=u`??7F?BҦR`U) 8נ?VS?By`B[ BcIxw?'k ?Vr 8Ip^` ?UT?=@n?HY?T㝒@XI)?2@RW}+@?9z?(@`8fX$`?S?X ? ??1`GڃWHB?7*? 4@?4?R]?7ӀM`CD@??8N?V(C?Z?AE`0 ?F@?H?)ɢ`?Kg?a?T.@$U H1@+Z?U-?RHi? ?S ?VN$?Q|e ?Hz$@DJR?:m@?W?QF?C?&`1?:?)$=>Ƭ?F>?N?Pi?Dy:'` ?Jݚ?B@?1j?DǠ?'@1JW?@㇀?Ub?V>?Tq ?P>} ?NB ?Gt?#-?P>} ?U/YU*B?D?Nޠ?)2 ?(?Ed ?W?`X1?;TXT@R?7@K 5`Eπ_e4 Tk2 ?6?:%6)`?9@3`a?1 ?Y ?]!`3>a?U:,`?J #`?EYI?L:?EV?S?PK?`EH`?;`?S۠?!?Q][8=/ v`RHCt?@㇀?6r ?>?Ah`G" Kg?IE?S?;ߠ?B ?G5x?3<+?H?TR؀?H?O;?XF@?@ 'K?ȠE8D0?1ee?R^O?Sy 3S_PC`?L@?6O;>?+o>]i ?Ap8`?Ku ? ?5G?U'?97`Le ; ?0?9ՠN@Czf?H0?J;D>ť @;)\`@wN@?.?D@K^@Q@Nx5YQ<`??Q g?N?Jy`?W7?Qy?)?2N??nk ?O?]a?S`? 3?99 ?81'?7vg?Jn0 @E3hI)(N = V QټPLh?O5?W L Zm@>_`@\@Iv@;Ȁ?>& ?%8&?F@?\~C?V|#`?37@U @3LB@d]CI ?:5۠?@-?PĠ?J`?\J':@GhAɁ ?B?Z4@?Tk`?0g?%8?6<?31Y?PE@?S?3`?F,R?ZP?B[Gy`? `AU @TA/I 's`$5?5YI?M?Dp?5*`?P?M@DQ $`_N7F?U ?b?ahǠEbsKA?EO :a%?(@? h?3ށ`?0\C+ ?T(?H1@E6`HY?#-?Bi`S!@D?=l[@?^@gO,V5#?N!A4^@VX[nZ 9?Q1?,`?1Ѡ?^?a?F<D ?9,?^`?[:?AU*?8?7@CQЀ?!U*?Qq?@?! `Mya׵`Yd,?/H@@S M:F@H??a? @A<`??C@ A@G2ROn`L?5Z?J?=?:K?)z?a?6 ?`? F?R1`?UZ?G ?E6`?K?Py@?I]i R3?D?T߉@?S`? PB\:>ـ6r?@V?2 Q9s@?`Su?a@?0B?y`?ޠ?4J?+N?5i`?AF?B>?<=T?@&#`?<?0?CÀ?Y ?TN |F?&@?Vm?Mg4$?5۠?Ac@3V`AGvY|`QX/S\OV`Q'+@ ?H`?)>/(B ,`$@@?Qټ?\3?YM-`?K @ >J@X'`auS2@1t >N4?CDI`?+H?I*?(ۊ"i6A`?F`?]?Q>*?@0?J@?E?C ?Js?0 AFQJWSB p@?% @?3?P@?[ǣ@?N?7J XNXP`U> @?JK=J`Q{ '` (]Q>*@`?X!?e7w?RLQ[nZ@i?1> M?7%<?Te?ۊU} S%, 5n!`7` Uq@9 ?CA?$`_<7`a a=@>#?Bk?Q?VΨ?E x`>i?9 PQmF! o?5f@.ޠTV`F?D'`?$ VFZ 7@9?S?B@9BZ?1??C6@!:5łJVS@Px?S]`?i}3?^}?@T" ?I:`?G 3JP-@I4? N?ՠ@wN@-`?̘>@ ?If?Y?@?JY> ?@?SZ@?QX?7@@@G:@?'Ӏ?G`?,~C G*KSV?C@777Q@OZ@Bʉ @?AWޠ(и`T߉@FM??c?7EI J??6Ga 9`CsGhFr?Hr ?[?D FGa P2 ?R?R"BUU`NO@@Qm(`140`?:d?9Ct@GL`?.Zr?1 F$4A?Ik?R Yk auT@)'L:k@MI 1 M0`]*-w?Z?Q<`LkS`c}dg# X1NR`Fbo`B=@_\jl`_,!̘?(#?F?`?ZC?X?SS?Sf@?8#M0`XTQ~ Bv=H !?Oy`?P # E?DP#?YV`?2Ar?B5`?BB67%@>h8_VՀ?5>;@?e?] ?7?9 ?#rH QE`]P="?%Nw l[@Gs`FL`G CDI`JC Tv>J?ZD ?[?Mh`3V`U%DZ`?H `?@zE>;@OR [,`U) >J7?1A4:~ K9bҀ?E[@`SE<?*@ 6 Dk`:VS@+Y=`R`X W9L?Gp`?^?T?!t `?I?Vj@?:@ Ta `c`ZmR?Ƭ?Pc@A1?;:p3b `?6R3>L-9bҀ?>Q?1*=| UrO ?3gu7KDz?D=`^8$@?@V9VNH2?//iFu_MFzcgGϠ?IE?# : ^/@?>$V ?P,?S#?JŒ`?D=@З ?1/I ?IUK@?Pk?J|?/ ?2R`?A{ ?8#?If?OEՠ>aL8 ?Ef?B!BN??%X;Vv ?Ar?Q$v?+d@7`A& F,RCQЀ? GHiI4L=TSdQFdlWh?Aee?Bʉ?B p@?7` !?B0Q ?UK?2 LF1.z`79<̘?>`?P`?7HP:n >4`?J3'?%#--V@?It?, SF@?(d vBMfQY`N`Lp< ?-`?.z`p?#&?<7`?04$I[lhuh dT2D?G/H@??M?336@?o%f@IF?F?,O?G ?/K5`? ?PĠ?*B`?W2?]p^n_, E?o?@|?Pk! v`B,]@F@IU? ?581@RPȠW)K<-??@@ ?FZQ?(?#QЀ?L`?SB ?Y?V?7@?B-?S?!t GM@N?` N?H&D?>)`PRK};?#&`@`UM,``?Q?H0:@?@?@ ?(.b2>I:=SS1?NS? ,`PHN X1cyWwDԶFk?0?T ?T?Ud?Q@DK9*??`?D=?M?S/`U &#`?L*d@-" D`?9<? 6@?6?CS&l0>a%?4J?E`>R3Q8`SU JiC(и`?9L`>?d?CJ?#XASXo?<ɠ?X&D?P(?Lxڀ?Oq?@H ;9 "4*C?9?U?Ks`C D[?'F?H;?A 3w`?J# ?I <Vo3S?M?5d *)I C ?A/I ?O ?DԠ1{ P> J!Q$vQq?/;+d@b2XU,@?BN4 `?:?4|@?B?U^?WY ?`M^?aI1 a Ei`?U@?PV?6R3?!5Pl{Z&1?K9 Y+?C?BR`?@6_ ?X&?XȠ/@ YpY]X ^}Jݚ?Kߠ?G@ @?;e?= ;F_L`P'K?FT@?B iC7@IX`GFD>Y?C&>CA?t ?R;#?FAQ[W'` ?C# MI/ ?À?;?`?X`?_Ѐ?GHi2CA?6 ?N ?X?d/@?`4W?2D̘F?!?U@?KQA %8?Rj?Rg?%8'K?/;?K?U?X`?NAee]`YD*C:,?HIp?M&9h;UO /2@6bo`?I=J`]Y`?@\@?(@?P"?X|?*P+I?@PP~2ՠ5#-QW Kz`'@,ߪ)! >9@U?]/{ L~CN<'%y ?J F ?H?M(?X(@?EE SS3?MqĀ?Kd@?9J?P?]w?Pe@Gk J$`?BB?R0Q ?Y7?gl?gͩ?Y]i ?=`"ՠ?Ab ?a`?a( ?G@?B|?PZ?A`?@:fXB@Y)?3!@?^`?U͠7Ӏ[ri`\) K@GQ& %ł?Gl[@K6.`> @B?P疀?NP/L ?\?8Y?9*?T]?T&Ga ?I)tUNw Tz@Ys@[˲@Rz EFY >4`Fgؠ6Ψ?E#-?P`_?7@K Ed ?%n?Z ?JAGvgHE+J?@ ?VZQ?2E?+?,`J a?A44@?4$?Y#=?DU ;ք7K@Z7Ӏ?;?D@`?6r (0PcR ?T ?`fe`?`?P@4 Fk?3Lg@?Q7?J?5y ?(?# 7I?%-?Po0`?3?v?P?U x`?R;#?JY?Q?%'?FTm@M?TN?`*߀?W8?PwN@7Vbhu fH@WU?Y?@Qm?F?Vʙ?W ?F?ɢ`>i?NRT?bk)?^ ?I ?S5`?WO,>&`JF`M6>b+h}L=T?W?SV`?.Q? ]i ` 9 1:?;?:^?Ta?<$'@?7?3(.Q?WnI?= ?4N?M@?D/?vC?=u`?5`4?T/?dr ?GFrDAS:?̘7F'V?8_?0A1Nw ?H|?[Y?>jN& ?@?SU?2@NS;T XCw`?R?M Bk&D?A !u$??0  ?Aџ?S׽?V@ ?PB?S`?HY?5#-?-6>?H{`?= GV%`?Y@?\"?P6_ ?FZQ?!?EZ% ?R!o?U`?G*?Bz?A ?>Ƭ?BN?DsP?P~?Sgu?5-ؔ?Fo?T̘?PPs`KZ?9!`?Wg@?.a> ?,`?? ?N ?K Y:`j}a"o E7* ?&] ?4*C?)?.b6Hr :K?Kl?UÀL?QB9?aF?+.ŠPhl>@./(X1@B?Cq8DJ?Kd@?R ?9 ?+?>`?R/`?Yͱ`?Kh ?.D?,~C;Q?^?8#1T?-J`s@QM LB%EEN,t?Pk!?aL?? .Ƞ?Rb^?Mi/? @?-`@?9xwECOdz?Oh?`M?-`Tz@E &gؠDMo L I J0r`QQ Q(2>? @4 ?5@?PӀ?9%-9BZ@;Ȁ?=" ?F@C>a?T߉@?a o?^Ƭ?R`?1:?5վ?%C@?3<+?T@DW:F_?! h``?,O?@l@`㝒@?I@?3AJɀ?c?7 ?@,?0㇀2i9G ??y=?WL`?[nZ?M$5?:0r`?Us?FƊa@6_ NRT?4p?U<CzfWT?=K?O%^ ?F?B p@?R[ ?C1Y?9J?3ER^O!`?9PuZj?Ar?^?@F?V ?_v@?Czf?FmA?>Q\`?2`?M@?0@?56 ?83?; ?Oy`?QS?Fb`&YcӮ?Vu_?6MFR3@(#&??8d @RPȠYyE ?0/ 3ӮKg00@Hv`?9W2"@><``TրVCR ?7?Un?;ȀO `=&?`)t?0+d@O; T X#Zι@QIU`?F&?DL ?*+ ?$5XA78?-`A +v`?U'?`{]@?\U`?M `31YH!=QM?@($|@`6a ?1 `?[P?Q{ ?2=@8NU >\?Vyn?9@VQ`0y@DD.ـ?9*?Jʪ@?W?`;@?W,`?F`?&"?h%Nw ??Z@? ?9xw?R*-9KY?Mv?QNf`%'?G?]?G@?Y?@KKVoK`?I?Nٜ`?,H'@?;Dj?/~Pe@ARu`?X?X?@ ?UK€?QqR|Q@?K1z@?QQ ?IbҀ?R5`?A_ ?B@?P?:qaH YgY{, L$@`$N?H ?X?^g?V- ?C@Q&ZKD*C?B^O8oQ[4.[ZT|@8 ?F`?>)`9 B?=qĀ?-" ?F @ BV1?7f+?F?&P@?4{m>R[ TQ+:@YR?1p8`?Ar ~`"M@?@?@q@+MJ`5S`>;Ȁ?A ?]&?`;@?J^*dH#Qh`J`?'U N G`Mw-?W(?`F?N?1j!U*BE ?!?Ss?I ?@?AF?Ei`-w-H`C#YhLJJ?DEQ@?QD?;d@' .Ct?5S`?_b>@?UYIH@jFNZPC_W>v`Dm?5S`?U$@C@a(F ?;TF/IM-`?U`?es?^ݫ`?.X a$B-?ARu`DMJ|?R`?XT@?5(@?Q?^ ?Pj?P`?]$?V]?P ?Rk?>/(EdR&/ ?RR#c͘`a( FW?U8 ?b?]W?Cc`+z@?@㇀?8@R@i?dD?ZE`I@9=T?K?PL@?0Qm?0;Ȁ?1AWޠD=3`~`DpQ ?3?EH`I`N5HO >$V ?CAEQ+=ؔ?F`?77?1?= ?L?"PF# ?,`?Ss?YƬQ|e 3<+?n2@7P=P<Ry``?I?'@7k ?6l?H?@ 6<?D?GF?X;?_?S-J  C C H@CAVH``ՀIbҀ3+F`?>?L@?[X?H P9?9zH&DO*`. 9U?&`?< ^LkM?U -?Iv@?7E`?S?M(1^_\? }?" W M?R?T'`?Kz@?Xr ?HG@!?PՀ?Uj?]N`?X2q* 6QWޠ9s@?Rz ?bK `q7Ws`?4`_?S@?MT3F?WT?XP`>a?(]?e?`֭?6Ga ?5i`?.z`> ?Cށ`?G" ?Hi?V~?8`@`:n *@ 1 Q>R3?;.ŠPL`S CLp4̘?(и`D?%?M@?^/@Eπ#8Ip?;@?RCA?Q??4Ԡ1p8`BՠJt 2N?< *`Ar?C?2^OS\ Bi?@?z@=]SF?% @?`~`?Qs@?0y@?=`?@?`KW d?7e ?_ ?7P8!)GJ;DBՠRj|:[?Xv@?RZ:~ n?J;D?B`?F?<"F`X1@aA'?.a?&r ?Ov?J;O=@5 ?G=?Va ?P?P`0 H5>;@?2?L56?M@?P?_@?Y7`=" >@?N?D?;Ȁ?2["XB @?C?FM?e?V!@Z8@Vu_?O?U?5U`?:5۠?Aee?4EQ@?DP#hT E܀44S4Z`?H1@<`QHaʀCq?8oQ?CFD08>`OH@.p?S@?23R!VynNz`?7V?NW 6?`Pi?p?RD?RE ?Gk ?J?UF`?U?>?d/y`%`?% @ ;ȀF) E@83@З M+@CQЀ?*a%?2i"`?GB?bL?_.p?S\?)@NU W)`Ac@8@?(0?[[j?X?;?C?R?Q%?Ƭ[*`WX?M]?R@h?OX?Zn?G*BcMv?0K?c+B?a5_?F?aDsPCY`?@^(`a'؀U`?O@?Is@@3:@FNw ?>/(?L_ ?K\` 9?$`_?*k@??@@`?A ?T?Vt?[P?M K{El:?CF?6\? 2 ?@Qm?@P/^`;Ȁ? P?d?`@?28o?E8?Z?Xи`?RK_`?E ??Mo?` ?F`M X`?`M`?#?LRIEU`CD@7v?4U T,0?zVJK ?Q(?X?HE0 V`?)?NH@Vˠ>?L?K ?Hr`?:|4-+l BBAE`A*d?! ;HQF}}5AGF$4=w0A1?1 ?V?Xr ?4e?AD@?Qf @gUZ??BH?(D?NeE@?R`?>`?C?Pj@?E`- Q:BPȠ??@0&#`L1?Q#`?cՀ?U?9hH ? ?W?R!?D^@JY`X`: 6U)? ?]@?S6@C9vUE>eE@?J8@?IΠ?,]@?9? E8-w>Bk O00;4.]i ?! ?N)`?@@M(?^4?Q`1̀?BL?SHX`)Z帠W!-R3?;# -w?8(@?X-@?BK_`E@?U ?AWޠ23?-?X ?F!0l{?C@?@o0`'V?P@?Tj9kHr`> ?@\@?L ?. +d@?JQ?"c`^B /s`?M>\?Z~ ?Nz?9xw?$pS M?$̘>1'>9`Z~` Ss`E7-K?@q?>>Ji8O H@?"`BʉP/I@o0`CLg@M(G~?K?_?E|u7`?AM ?P@?P=?W*?M`ɢ`? ?*@À:(@??H@?M?HY4{mV@N@?2 ?A@?L_ ?Py?K.Š?D,4P`?*VS@?P@,``N ?XEw ENw ?'@K ?H?Fx`:1Y4?Y>K?EFY G3 4p?M?>_`?5c?'@K  @%IWO"@?:;D?Lsq@2M@?@㇀?cb `?C`aHPE?^@?V?2y^ ?M8`?KXWhgL[?Xp?(d `sQ`?E ?/m.~?:P?6W??@~`?%8?#-?S-J?Si@?0B?+{?!?2N?Tz@?Z(@?\w@?`%?AџSY`P@OvTz@>Zr?&?&1 6P`RW@?&`?>:<Ĝ@?3`?*^NW5xCrH R`ՠ?A ?N ?K?Ar2nG:3Fl\\ UT[ ? `X95 ?3l?X?P㇀?8Ip?6l?<?R?Z2?1Z@Os`2>hL?D?] ?Zɀ?K`?D?:0r`^F(_wN/(?,]@?X@?dk2 ?XR<}_x?(?^_?Uj?1p8`4@>À-w-2i?BN?(и`RB?! ?[@ť @XSy \kS`?_?R,B ?Ej?AF?4 ?6#rH K?:@?Pq?+,`?;Z?]K>h \_ ?W%<?]?S1Y?Z(@?Q( TS@eMQ-?Zf?V`L~@NȠ?D'`?3b `LxڀF)<??1џ? @?61?L~@?A `?A?K9s@P-@?Czf?`s?bM?[_y?@?I?Zր?.eE@_c4Wg@=< LV_PJ?9 ~`G5YI? ;Ȁ?6] $vJ1 ?6"*o?# ?7?(.Ƭ- ?)`=< YaNf`^"V`P< D"% ?:?:?5վ?5π"ՠK{3?Bi"`?k =A@?vBN?0  ?R?2 H&D?@\@?R@=TQV`T_@R;#?=K?bS`?YBZEH`Nٜ`?$`?@C`?6?`?/ V@h?t A ?~?J3'?< K`?)@?Qծ<"F`P`Hb?F@?97`?@DMXLU`> =0`=f?,`/^/@/?Sށ`?LmUXQ?%`?G%<?)'L(oQ3&`3sC@B?O ?]?F1?$J?F93&`]. ZO >)` z@?&`?@IO>?0K?F^D@U'@?+?X?S<+N&?] ?i?[W@&\QѠK>D \ۛLp5i`SMl[@=qĀN~EVCXMQ h`?0V?gF4p@@1jB@Qm?-w?D?@K?4Z`8K`z?G?F @?4N+O=@B*2"2^OP.Uq@4?R;#?W?97`D[QQɁ QB9\cLg@NS?Ss?[?K&BZCA<`?T ?N_`? ?=X? RvR@#n=J`<}H&DWϰKÔ@?@T~"= B-TŠ2[iPR>j?8N_ZW?5S`?)*F9's`?8 1`A@?#?>z`?L`?[Ô@?T`_?1̀?L?[`?Tm?Fr?ɢ`FHn?O=@IbҀ@Ġ?Ye`?`? ,`N/(PP a<# c{`Y. ^^>CA?YYZ@?U?,=TG=6>?5?ށ`> ?NL?KW[ !)7s`@J K# YmcuVOv`Ac@XMTQ~ 8и`?G?`~`?`KW@P@JYL#`L`?.9@?N' ?CӮ?Fx`?E7J`+z@?KT?]@?^!?P"?;?H?AA4E`?@K?U?Pƀ?:P?&l?D̘?\?^@??C!?$?NeE@?F?5?@Wӿ\Q1jI@e)bGE5۠F$4S(@NB>?A@?R??F?`h?JQ?G*C`PT@Ra`2 2[D??3!@\@|?I?Fu_PD̘?D0 &#`R'vg?R `?BC&H@D4?:?N,t?% N~? ?U'?Q'?A`?%ET75x?FN?`_@^?@`?@d]A7g ?<3?P,SZ@_K&%8TB@  ?8Y?*@ ?3d?s@K0 S PD*C?@\@?\3܀?`$?Nx5B[G'`?d@F`RTC>;ȀCAC7@PxK?1ee?Q`?R=?? DRCZ@?@ ?En?_?\?H|?QJ?S-J?1 oQ> @?:0r`?Y$?``?Xl`?R?C x ?+?L(?S?S ?8@N0P?>`iL_ Nw ?T?N4?D$?F/`>z`F@?:KJg^B?(.b?`TRM?:K?Q@?Iɢ`?B">Q `? 9U[St@a@? 30N?;քJ`Pm ?P3?R9@(?,}?H&D9zVE?BN?0  R0\PV 5վ? Tc@Rj|?@ص?3W9DQRu`V[Rb^? 9?38T@U>;@S%, ?T$?`i(DRV1?5?K\`?<?>eE@6gؠR|@ ?2R`Z`ci@PAJ1??T?`D?:qaU@1U*?[e?RzBK_`>a?5J;uS%, OP @ji?>p@ٳ`?J@?[@[?DԶ(Y?M?Q5~``\CHT@Q@V`a%?F ? 5۠1?40L@?EV?Uj?L@? d@O1St@9P< YV`D?70@>u s`)h;>?A K_1@c@?Y݀?? L=T>?^?_ ?J`?+{BՠP`= Ry`N$V ?> G?R@?@Y`h?L7`?RPy@X?4?4ND, ,`?7 -`'F#5HL`9?9!`?@E @WD7 ?)]i >p@X5& X N#J^K!>D{m g?A? X W:@? y@?+ Ja%Gs`?( ?PV?Y9 ?UZ0&#`Pi?7%<?GXkB[?Ey ?B/`Q`:?G@G M(?% @?\ ?Y#=?B=?G( ?@AѠ1?PU|`ZWRD?\?5 ?[?g?PZW R`5>;@RZ@Y@WB?vU@RX`e-R`_F] 1u?E7?W%<?@i R=_Q;v?<`?I ?82?>Y?!JW*+ C ;˲@;e>p@5S`LHY?P~?[/?.`GH?$`_?V ?R\ ?2N?4 ?+d@->3lRPȠ3<+?Y6.?`c?L ?8?[?] @(SF ~`FmAX;H33 *+ ?A?I ?3?1@?N}?WB?S?H ?;u?0;Ȁ?1 ?8?pC7@AѠ?H.b?Zf?Sq?3IJxLn?C ?N}4@`822iWhX'`9U?"n?Cs?G? .> @?Lsq@?H`S/Nٜ`?]]?UQ+Y`\+?F@?K`?/y`K?6?N$?^@?ZZb /;ߠ?Gf`> @N9@:o,@z?Zr?O?^W ?NU V\i OiX;_\Qp?EZ?Y?Gf`?.bR.gn`%>_B[,~C?Et7@VV0a`?KO=@?R `?YG ?UNw ?!u4p`?,?Cd?0@E B|?#ށ`?E ?N?=K;d@Cz?BM@??hi?3?F?10صF`F<?5U`?R@?K:?.9@?Aee?Y `?UK?iMd=`7*OS2@*v3 P*2`28o?J?G'`?82?Np@?Zn?T&4?( |?AѠ?I)?#:[6 ?F2`?dV`?g@?W .?5tWC@L`?J??\ ?K?P$?HaʀMu`RV12(3 ? ?':@J@Z_=+@?+`l'@UTW`?Mi?Q4Rq@@[:OX?9}?XP`?*B`Q h``?M?Y`?^%?*^?y`?Ov?PB?1/I ?Ml[@?L*d@&`??6 ?F ?L@< O50صBkIUK@<5`?OK>?`?Xd ?TY?Y0/ ?Oh?IR?= ?Ed \?1Y?G`?!?4v?)Y>KR?8@CSq\?7p`?Dk2 ?R?C??Bfm?EE=wWTWL`WI@W~KJ@JvOy=??I`?_?RB`OM?4/?Uy ?M?A5?A =QWޠ1/I 6 ` a}@?0j?_K@?D7 R(3 CDI`?I?Og@?4y ~`)(.b?5'?Wg@?ZS?1jD~"?2ʉ?V`?L56@ZKG@? y@?Hg3?-?A1?`㇀?WBG ?!?^?H\a@> G<}F!@31Y  Cݠ?5#-?W*?K&?@^?J5۠?KÔ@?K6?0/ ?Jm@?S%, ?WV?\ >?dY?JiC?S5`9Rc@?;:?FO?T0.bJ F ?PՀ?[N?W?[? y@S+?~`?FS{`P@RW@V?E ?6JVS@?A5?X^ ?X1@7k =?SU?G0@e?2@@ 4]?;5*`8BbW?P|?+ O~`?A$v?KO=@?J`@,h' .?M `?5>;@RQyD?%y  9BZRzL?G@?P$D/@Wf`@V?OP ?S  P/ HaʀIWI2 ?"_EՠebJCb?F?%-8TC`?By`?Zƛ`?Va ?2`8tAOC ?(@?Yt@?Wvg 70@?N`?Z4@?SB ?O-|?V<?_y=?\?Au?4EQ@?[wҠ?K `Y*@7)`?]@?:oIz?A?T?Oc)<^ـY\?0j?P@?N_`?Nٜ`?Vl ?]*?@>} Pd]82?L`?\?V@P2P@V?Jk@?P@?0g?Lߪ?61'?R@?Xċ?T; ?[X`?OZ@?+v`??,! `./(?Pj@?ID%@R=\{ :m@?,h?(D>#/;?Bՠ?LErH PIO?(@Gy`Z9Qc@QU*?S?>~?3w`?`_Xr ?L{ ?2ʉIEl[@?,sq@?1D?8oQ4@?EG9'LWXF<?1D@?L ?[jK?UɑÀÀ?PJ?0y@V,RJS?N`?Wg?C`I]i ZV L=T@\?Ƭ>s`OfM@T+@5YIs`D' ?TN?a@?Y&`QvQSS@C x ?Vc?^?>eE@ ?A'?/ 8?F @?Rz?L`?K0 ?G?K,?V(C?^`iU?&Q@S?Ku ?_?Z?8iWdѠZ] 9 ?Qr?Q@?AD@?G?W~?6\X U@?.Q?Q?3UxfT `(.b7v?n?Rg?@ RR#4=?O ?[`?S+CdT@З ?F{ ?Q`?3 ?J`?^?H1@ ?M@?Ge ?7@?2=@LF?2@.#I >@GڃYBZX#G Q;v1)?O00?0l{?A??T>pRN?&Ga >v`??QD?DH?)<?O"`?PY`??nk .O@S;H?4b Nw =T?T?Z?4$?<ɠ<Vk?!`?_!O ?Sgu7s`N*S*`VSS\ R S)K8n@?>D?Ud ?DE80y@?R?[W[ ?Oi; OC SDI`U͠?Bi"`?Yw ?<> @? &#`Oy=Ys@H#Gf`W@ ?U^?_6 ?U?@G *@ )@UxfTm@1?0?PL@?S=>CA>B?5tW?M?AɁ 92 :k@?C ?7:@N`G%<?O[z?]" ?K:PBz:?:z/(CD@J0r`Q`H??y=?58L'C \i?&>Uxf?Bl`?fmA?_?Q/I ?[O=@?Mg*!R@UBJ@?\ ?K?,2 M8`T`?'k ?O00DXAN? A@3@?= ?a?UK€9 2@.Ƭ?De?^?NQN?O`?WV ?#&`[`kΠ.D?Phl>d@B $?@z?MyKDjLXN \2@>\?[O=@?@T `SD@P-@TRYpY`@Rm1@??M?\?W:@?2 ?:f?P ?@4yCp?>`F{ Xl`7)`+NXn@QO?`A]GRCAuD:~?Aee?] ?X?-V@-g?K,?^?d?V%@?D?=ؔ@صUd+N?DJ14Ar?:?N`?:m@@\@9M-`?Jɀ?PZ0G .?B\?\/̀?Vbo`?3@B`G?(oQ?YYVՀ?# C V?1$v4@`?=+l ?E%`Ct@W[ǣ@?2ʉ?^ʻ?PK?7?LU`?Cq.ޠEW=`?R?GnIMw-N G?R@?ZǀHX?14?I7`?dW?c?QB9?'` v`O`c6 bA:G*N=V@3rH ?0Qm?^D`W]e_}LZ| @?Vc?:a%RR.HA<`%d Q@^Ƭ0F?T?I ?H?S x ?NRT?Q8`?PQ!5FD?!?T ?TN1O@l`L~Ce☠_y=?j?@d]?1_>s`??Rx?`Z?UI ,`JBB?G8-@?[/?U ?TN ?Z?3Th}K.Š2@K E?Ab ?QɁ ?<7{> @?S?Xeـ?ZrVtT:~笄@?A"iYW^J7>?G NF`?L#`>;ȀE ?D^@?8IpFD??Cd? Kri`XM ?EZ?P`?@?^/@R3?I ?I.?R>@?>J7W~S?1`?  O@CZ@?LPE ?El:WZs?6A?A@k ?L"F`?W?Iܒ?92 ?p??5CAI}M]BN@I`Ie DNLMX?=FQXNU[ Z^@S=>_`?;I?R ?@?;)t? ?4p`L ]K?`?Ym?A \?;H?Dp`?E6`?@Z?#QЀ?C ?[h?aWޠ?TC<`D.@?C}?)tVkV2?D@`?M 9U?8נ?Z?Nz`^/@?2R`?1/I ?;:*`E?2 $?I:=?Qm%#-?5@???:^?F) ?IE? :`? `?L~C?T(?I}A'+@Tm;?`?=&$v[m `\0a@?SS*?Q^@?X$`?\4@?D?Es@?Z2 ?EJBCA?; ?8Tb a4H?L̺ ?O?B)t?Ng?O?YY?HȚQQt :րG-ZA`?U s`SI_K9 ?K @\pW Dl>?6A?U'?U?J?GF?F?80?À?U?X ?HL%-? @4ԠXP4X=w-2":K?5?Fgؠ?>/(?D0?E`?5I ?1_ۊB`DBOnk VFC}?%n1`>_?D?6? %8?8Y?Xz$@?_4??R-`)ɢ`WHS&`?&?A@F=< H{` ?M`2 $^ C+?EI D@L?M @?VN@?Lv%?L&] _P T`?L?U?G@?Q?ToA?0 1 ?%d ?&`?" ?AU*?8?2>?M@?A_4:~?8T@?R?# PIe \?-K?Tz@?f`?dC?RL?U[ ?^#?V?Aee??:1??nk TbkC7@?GS;?Lsq@?U?J`?%C?FΨ?1c@?88??O`?MK?Je RrZǀhf't?EE@QCC`?Ul?XĂ?MS?!ܜ:U ?Ed?PBwI`@?&9.?&9.?6F@?9/'|@?9`?CjQH-K@?H-?% 4L`> Y 0@bԠ"J?W? ?P?%?.ހ?X?Zg9`A*@Nހ?U)?\6>3$~ YVrNEd%@?Wu?d&?TOG Mo@#@@#?4D`? IhsKTE=cA ?'t?X`@?U]j4A`@ ?b@$ 0!!UC?U?S, BJ[_YJW@;aJ@ )E@??DS?9ʀABݙ?H_`?_{?Sչ$~v@?$S @\ '$ֶ?Jip?.l ?5A ?T?Tu<@?H ?Hz?7K0 ހ? !J ?*=!?Ed?ND? 3@Tՠ[y`Lޝ?A?W+`?SN??*@?`&@-7;?+ߠ?:ǀ";RKOנa~t^N`?QI?_yt"&"?U`?N ?1{" ?c`./\J5K|&OiKa5/T,tF?4 ?RO ?F/@? Z?F{`?N@^ Or@8pS@G8U?A?9 ?&?DH`?J@?13չ> A;ݠ?60Q`?O#?H_`?1W%`$?12`?-H+62X ?9 ?@3@?&J ?$?%6e|0*d?G ?P?=(`^ -7;D~,r`?Y?c ?VM?D?,GY.D @?7?G?9_LWWC?+h`?< D ? @?@qHI`MPW`?~?4H`VI@_?DֶPUbH?A?P5w?9M^ `?=._ ?Nv@?L?C?@.`?UT?Z?A+`?Hc`./\bZPt@?My?25?0? ܤ5`?;ߠ?E/Tb ?;ݠ?@~ @?*+h`?@$74@?ހ?B| ?Tws`?PL?a=־ ?NN`?5I`Q\ Y@D ?( /T?0P?Qg1?F+`EI`12`?7٭`AYH%@'x3?F?Oe?(L?> 3 `R YQ$B3kb+5A*rM?1= ?I ?=־ 2O r`?; ?Fa?M!@?V?W]@?P ?KX@?D@?9`? ހ@?7٭`?B@?/`?!`<+!N@?je?G]@?Yl?LKFXc`7(q?KV?Lܠ?8 7 3t?`?E@?#PDL`?A`?4ֶ^Db}\`K6?T?Vt6@?6w6?LPԀSd`['?"?I€~8ڪ@?7@?Ct?`?7T?C 't?S:?a(@> X?Eh?1`qH't?#t?`Oi^[CL^?=o@*@:`BC`?1+`?J?(@? ?>`?)V`48;'' ?3ޖ`?RZ@?Yg?AIIM` 1?_?Z"93H V@l`?+|&0|@0ހ?:]@T%{ZU 2>?Y€?2F]_Q/@$ֶ&?H[`?QB?E81 ?@ހE/TY `Bj?4 ?A ?Dy-N@IuPR}@ER$H`?3$~ ?6?<}#`?R2?R>?4?0_?>`!J8@1q ?E Q`(;'?@ ? ?;}>^p Y`?8 `~]7X-???W?F=@*3kb?7 ?C`@@E@?KB?0t@_ᔀ^`87?O?cT?\ 3 Bje`֠arE>?=7;BT>P ?Ku`?Um\<6>1E?D?%?S?Y Ya^U@?Kq`?J4EF`?N-`?d?[?Tn?S67@:@U]ڀ?*?S7?+}I7`O?S ?DV8@?L1Ѐ?>d?IT@?.A V*`V 0@??JJl`?AN@:+h`8^<J\%?WsĠ?a4=?NH?2X?B?74@.DoU׳[@[@?"5:`?b+B@?I?BR[eS, ?"F?Q`?Q``?I`?RR@?Pz%@?0P^BnLC `L :ܤ?HQO@@PWV?K}?V"LtF]O@W@G@*@#t?`?B' ?\?`?MH?"Լ?$l_RjZE @8ڪ@ 3H ?/95`? ?8pS@?P۟?C `?D?G ?6?$%{X(@S_@#Sʦ_ K|&?4D`?@ B5:`[mM2`?A4=?"RR@L-b 65J|>׻?Cb@?P@3 `T ?#@?Oط?)<7 H} ?Ay ?G`H͠?rE?Rm&iIl8Լ?U5?XpS@?2@?FJ ?O`z,?<?S 3@N׻?EE@?R# Dֶ_S S@?v9 ?P%?W/`?J\%?|@?H[`?V@?NW?D ?1)?9X@?G-%Co *14~? `?Q>Qt|-KOC?7 ?Mk ?Ux`?F7C ?i4ֶ?1q ?RI*?(ŠNA :1D BKa?Zl?`K@&nYPA @RD?2J?Gb F>&`?,ޝ?,ޝ? |@#P(,A`? GCV.@?C(`?]˪`0qHQ?Q@?$H`?2J9E@PP@F ?? ? jm`N)`@.`O&@ZY ??n`?`?<F"?.A ?E" J& e<eI M?V^׀?b?7[w@;u`?WH?1?5d?=%M0?Lb?@X7?2@?Tw?Sx?"JA \.|@?5I`?O#?nYF*?@qH?B' <+?+ߠ?DM[8D`6\@?O95`?b?dg?K0ӠLJ@?`?B,]? Z7^?6't?(@Hk ?8~E MZSz ^T`M Xs E<`?K?T8?T%?BIJY ?Q))?c ; ?I UCDB?PP@?J?- ??*`?NA ?L>'t ) GoV`(pS@?1MLz`XD`:E ?1?0-`?Bn@?JQ ?[5A?e?R7qI.?'C ?.ZU W MHW?"X?YW9MYDR?Qp?@%D9*k?:=!HW@[RDC( S<?@ ?a}Y`?WR? V??Ln@?DH`JW@V69.?U$@?a?EA@ZkSO?%d>dS @8y/ FSAܜZ0V?/J?WC ?MEU ?K`?8 `F> ?9`?W?Cn'T?@ ?Rw?-%O1`W]EA@?Zˀ?XJGC Q<`NLOr@?Cj?b`?eX@?VU? :1+X@./\H_`D>*@GSf?2n?DC `E!I[(Q? ?4 Hc`@.`.dJ @?~?S̀?)<N? 3H ?X `?P7>-`A?;'5dU*@X D)?1{" H7:@*`F0Q`A)3H I@OA>Z?0 9<$+`?GPR`?V `?^{`?ArEU( QiiQ.@_}K./\ZpW^5 P3@T #?CP?&nY:?7;?AiiG,R}?7x3?E:@:W@?Bje?J-%B`?KX@?[@?P ?Br?&+|&?H?X ?:AQB+ 25:`?F9.?V@?+}Mo@?2>?Zt?S?[?j?[SU ?M7?G@@?;?Q}Y`3}A= ?R?[@?2O Xs f d"(@3G?^ހ?V? A ?&@CU*@6B ?B+ ?<}#`?7?>8814=UW5 \1Ѐ\WPS`O C ?Jt?Ad;}0 K6V*?B?`@?W?N88"@W2`?ZY ?P|@D@@M *@?D%{?5`@p Fذ7(qB5:`KF4D` E C?0X?Cn?4@?z%@!rEDH)n??0GbHU>ʕ`?9z,?N{`?BJ\%O=DyGY.'t%_e`bԠVI@#j+`JJl`O3?4g|@P7DM[?C( ?9ۧ J{)TH`B+ ?@I3H Tg?, ?Rr?KX@?Kjm`+R_1`Sz ?HpS@?P ?9V`?0?Px@?` ?Y0t@@l`?Xs ?eE|?\6>?`j@?iL@?VRS?ZC?`D?@ހ?Fi ?I_FpH#?5`?'1= AS1E?Q ?^ ?P>𝗠%d?Լ(^ 9`?ULLf@>'tF]] V: D)`Kw@T#CFS?D~?Q:ߠN@M݀aYiV;e ?F@?PP ?L-b ?'C GZ`!?Iz,?4.WAO K6?/@?. TUNX?JrM?\Y ?R@?Q>?H} >ڕ`?;?P`?Iw?JA?Iʀ?^ H M?N@?J?8?>'t??`?W?ap?>l C?*@O TˣSS`I`8> ?D@@?-S4 QH-?4l_?@qHKVWZ`ڕ`?P?LLLf@.ހ?ܤNzZQ B ;`!``Dc [aTD`=.d?9V`?Q?U@?R~Q@2?V ?X{g?:{)?7oV`?Lb?&@Q?X" ?W[D)`\`Q2`?-Z?|@?>88?Vy`?RM?Gj ?>v@AP_?^ ?RI*?Hy/I YʀHD`?#-Z1D?? ?X<?@cP@=ߚ?PP ?LPԀBTM[T;]bB@XO=PFe;X@C ?0@2.v@?BG,'t/@c:cjG@?;π?V?I?X?\C?Mc?Qu ?J`>l 7T?@7?42 >R@>?D?H[`?Dc z%@DD ?Rje?c?BeO*@P_Zpf4[?/@?W't?0Cz CP?4Q*@[e`#?(?X$@?Bn ހ?/@?0hl ?M[~]QpHtS7QiI .?=._ `DD`C?6 $~>@RD< J?JAm@T YU:?I?2`?CV.@b@NN`7oV`B?,-b -0Y`F‰?:@"Fc`?4N?;π?Qp ?`Hgv?J`?cF?UNXOW2sB?AN@?EP?DS?Phl ?X\c?<`W_`U)?7;?:"367@KyL: ?L?ED! XLSʦKsJRQ&%I`?@.`?$H`F*EI@?A\ ?@YMaO TV*`?Q&@?b5:`?QW?L?@Ih QS #@?9hs?C$?@qH#@@|@87?1y ) XGFr?G1 R`DNl WNE ?Iw?[?NW@ `5R??\?"/@CU;`HP``b F=@?@?R?&J ?G7??iԼI<U NހH `UYl@Vl"`B?B`?Um\?M ?&"1P*dYM[?;.?O?1{" I gS`U](``@<@?XW@?dBG?H `bMbP1W?;'?Kjm`?GK?r`?H@?KTE?/@?Fr?Gw@?z%@?F?;>?*@?Jm?ap?Wx3JE X;'I!1U?>/\?Fi>> ܤ5m\Y% ZA`1 ?I ?QJe?0K'%`?T0 ?L;.G&/\oOiS&@?3?U@?!N@Y[(Uv9 ?=־ ?XA@?L$?jeGGuc `` ?PT?`%?( 4ߓ@?#P)!+R ?D @?D74@7@P, Aq ?Pl`?W(qC@Y]_>H>A PP 3?B| ?Je ?:]@%@?A"`?Te@?R?VnY?]V??R=HV@QJeLSTF@Ow=ENXK'?Z?VS?O&@"JB/@?e`*`? S( P? D?B Y?2/@?7@?92L+K,e@=?;?Rc?A`:W@:@$l_I!]O@U?=K?i?Xr`Am't?RF?Jǀ?Cn?IX@?9 ?BJ?P`?;5A?G$`?az?`{@?D;C SYD 1WA?; ?PX =SUA@TV*6a?@@+`9{"jeFaEd?4@?Y ?et`?[!QKZ WbAm@DH`K? ?P?EE!V%=`?S`?# `[V`M?R6nY;jm`Cs?4u<@?\Wz?Si+3Y)E@?Mk ?RԠ?(7K|&;|&?EE|?#QI"J5d?'T?G1N@3}E?A&?K'? ܤ?ذ*@RԼaP?_?Q^U@?*rM?A\ ?H?D ?Oe`?6'tKRAܜ9Q?z,?Z?Pt@?R@PdcрX+FI>md?1F'tPP F@Q M@6J ?Gb ???3j?0XO??Gfy?dֶ?cc)`R:<6>B`Bj?@ ?Oi?&\@P ]lg PaƠ?C`?D! G X\Y S̀?nY?Em\?7`?v@?1ii?9M6XY,Ka#b@>FGfA@?H2K 1ii_ Hgv?PP ?X$@?XO?c`R?4.W?NmdDc Qq hl ?(:4EO@?e`?Np ?`5@?a.?T`?+#F: SzG #;@D?je?8)n?C?T?D;C?`?]`?`RD?J13@? z%@?B-ZUNXM:=!C?0?HpS@H6RO ?:?G !UDyG5; VM?P?.R@@ހ:`1`?&J ?PL?; PG0S U VB ?)hs?=%S:F@YXU@?'?Լ JLf@?R1?b@?E?A?9~2+`J`PD?T.W?bUZ?HL?7@?Sj?J@>C? 6/\C}HpS@Pt@J9?=`?N? ASAKFP (D EI@J/֠?E ?@1`ߠ#$?B#@??n`?P1`V`I`?N@?6YH-?EE@?+`/A4?R+ ?T@Լ?>?~>`?c` ?AJe?SJ'?AED @EA@$ 7CA``4@I7`L?@p ?Ud?F{`?9hs? Fa>?EA ?HG ?%d? @?7?@)`?3}!*@" 0B+ *@?1M>d$~?C@0z%@MB0 GZ`F@ 5``?-0?Px@?=._ @B96i-Z?>&`?K@?%RHW FB ?P?1Y?/@?\`3b@\ Q&@Bje#@?"| @?7?!N@:+h`?!N@?2R/@ 3H ?B6F@?@5`0VNA ?J?_E?Q?OT?_95`?_ ?K}4N%@;Oנ?OE?T??J?Dc ?L3?*@,ޝ? ?"@? `Cޖ`W@M?@z%@?Sf?JrM?G ?Z2 ?RT>Hy/Px@LY WR4 ?MD?)<?+}?I ?w@2?/J?Q6t?ZҠ?;OנJx??EA ?+6?J?RO ?B@?Q ?YqP ? RUL!`4D`?R+ ?I`@>^ ?;F?B`?9?W:*?_Ǡ?C}*@?E?RKaSNzLY B$?B?W m?U]ڀ?703@>'t?I_?PRD?JU ?S`?HgvSzYu ?9V`!`+}N?4%{?E@?LC E3GfyPhCޖ`?M?UI@1{" [OF@?>d`B`?VM@?`x@Bd aT@(^ ?C}?R`?TOطGb?3s?;π!J6 ?%/T?Y,?UNX?C `?RF?Rn?0@> ?Qii?ct?`?a A`?3, JQ ?V?a6t?e:h@?Q2`?~?L ?4)5`?7ԼX6"?JSIR҅S~?W;?^`?Mlg ?E%?~ @7;`?Ez?A.@Q`\ (`?; +`?Jˀ?W흠?Rݙ?]= ?_U@? R҅# `?S ?EA@1q ?@' 3H ?GÅ+`6J ?Y`?aq`?D%?8?Xgv?U ?VHD`Cx??'tM)Us/*@?Es?`@3@?8?U?:E Q:A?VQ?\ ?&UqXU:W@?B@?8 Ev9 ?8?i3?1iiH `X4`@1`?=Z?B Y?L?JܤL^ `B?QI ?[V}?^o ?MS?@?8͠?"B?i |@?@ ?R?SC ?Zm?\j?KB?1E*NWH^ H R>-`?0z%@?Cx?Q?Q@?I.?E?P`? Co ?5m\?8c`3-Z? ?Kn۠?P5w?= ?+jm`Q^U@\ܠWdB?7;?V+ ?8[`?6S?IΠ*@?8gv?Z5?5/TK]">^ *@Q- Zt^ _Ze 7]@?U?P@0-`?#b@?W/ ?[R?E=@8 ?.R@?M ?j?CP?3G?+ߠ?7A`Bv?B?:Ҡ??TF@?Y ?3??% ?Mـ?=CfMlg EA 3O2/@L}#`Q`*@?F@?)`6\@?C?\^?R*]@?( ?Y@?RР?طN3@A?#P?AE?BF? 3@?M._ ?NG]@VUa*E`am?n`?Lx ?Dy?jm`>𝗠FTcCC`> ?0V?N[?.A QH_`3sFiOBE ?0-`?I~?3?)?HP(,Kw@Do?2R?>d1E3չR@?A?W'@?D_+6?Aܜ?@M`/@?+5A> 8ڪ@?,r`?B?!*@IIoSʦ1`?@L?B -ZI .R@?3#@FT#CTߓ@4ֶ12`U WoV`Jc`?6 >ʕ`U( ^hP@K QL/. ?A/@?;sJ?0t@?J@?B?"?"| K0ӠVrM?FnY?D ?J"?>ހ? V>^ :ipAINXG .?U ?P?!8 9ۧ ?DM[?Y[(?MJ倠Vp?"F?T' ?M?U" ?Zv`?6w6B`@VHy/A \?D2?FSWO?8`?L}#`?? >b@8 `J@A&@'^@@P L?F?[?:'1N@?.R']o@?3@?Ow=~C$)*@6? ?Mc?'TS WZ|Y@;}?*@EI`BB@:@P, 3@?Tg?U-?M~?LY ??`?;jm`?DM[?@Br#O?D?6S7?B?Sj`367@%I`?X[`?B`9{?V?^`? `Id@ER??. ?S?Q@:U WQ8? <@5A@?R?B?-H?MAiiIۧ Kjm`?1y ?%/TDZ?R>?bR`? X)nT! R`K')<4 @H`HQO@>*@?M0?J倠?3j?5`?b@B`(ڪ@?F?,+>? 8\1ЀS+#3OI44Q?F?S?eB)@?elA?>@?2ݙ?V4?D>'t? N?Fw6?Q? 5`?/\?IE@?)ʀ?@z%@?]@@?^ ?I`>ѹ*@?4 @?Jx*`XArE?J/\\&^ P<}#`2#@?/*@?SG?T? w@5v9 ?P?XF;?!`` ?QL ?3jR' D0  ANzPuQш[B]ꮀ?+h`?_V`?V?Hɠ?O@?9{?b?I{?Au EDg`?KB?T\ ?2F?'C?(~KB?"v?bB@?T  ?L?`?HɠE3PP SJ`?WJ?fm`?VF@*+h`+R?<+?D_>FJ+h`:U ?Ev9 c`[9 \n@O?581 ?_@?U?+π?]9r?eX?H} 7oV`@|@J-?ܤ?N88?3H M)VU A;|&I?@?I g?,W?F?a ?Q@T~VB @ ,r`?Ckb??95`TY `?95`?@-`?_i?^d? @?6w6?XĂ?Nh ?C`?Mـ?D?M$`?RsB?>[?;@?G@?B?Fp?LPԀ?Lb?Mo@?7 v@?9 `v@N'fy?H3?c`<ܠ?6?M,`?@RFJE ?K?Va> R@HQO@.l `?)3H ?U?AN@C ??0E*@B?FM``Ve?Ux`?b?PaƠ?OI?X$@?39hs?J倠?RZ@8gvQǠ?c`?J`?,r`? P?@DS? ?X-?BFB9 z%@Լ2JV"N?1E?b0?Ez?I ?4H`?NI?Kn۠?T.W?` ?V]C `W΀V{`?$)?=c6J EA 9 't?FF=@fy?`?J ?^3@?RZ@7f*1?L ?93H PIh :1?YW?[@?L ?ZQ?\/ RJt?7;?C:DM[O &?" ?c`?6nYC?Id@?> Cw@?>t@?ASA?SAK?H3?8@?[0Ӡ?Y€??V`?0_:"2`5׳>v@?A?Fe|@D;.?F?G *@6S?Iz,?Y@?K*@?#??O`?93H G]@3Y?<}#`7Ya Zk(7?Yp?UBeZ_E^" RP|\`Wj RMN)`U1Za6 a8U@Q7fy?Mc?@Ih 8@?B}@?Xt?T??Va ?_1?SvvK']aS`H ?';OנG> ?7?Sz?S ?T0Y^zL^ ?Rr?\@?4 S Qt|?7 ?OJ>> Ckb<?\??S ?N>t@MyDH`P)`T, ?=ߚ60Q`IV`?!?:倠IT@XɠKy3b@1ܜ?I$l_O?a}Y`N-`Aq G "5:`1`KB8(ڪ@QȬ@^ހ[#??H͠A4=RĀ?J/֠?_?E&J ?N)`?Y?/EK}+6?oOAR`?9?[y`?X ?L$S bW`?+πb@S67@\@Yƀ8D`?H?5m\BFQrEUdM!@9`DD`M`J/֠NzQ.@<-b ?H?Fw696"??\?0M`FF@S?K:=!@? |@?P<?e`bW]@;Oנ? 6?On`?G> ?1?@|@1iiO ?D ?FV`Y\@C:#?QC?UA ?7&LܠQQ @@-`Y]_>/\?F?!A 6a?D?Sn?4? 5`?R?E%./\?,W?K ?N!@?=Q`.?E`?\:?0hl V.M2X0?1rE?Dg? !?'|@<@?=._ ?V?B Tl_O\?@*d?J I_>%@7f?J?U5?I7`@@? hl ?O?3 BJ4%{?F?H#Dߓ@M?M־ ?]Z?&'tTs $H`?U[`?F76A&@UV?F?\-b ?UP5?% 9hsQCQ?Q@?Z?a1?Vq@_?WJ?O ?C `PL@J=!>@[!@C3I?P!?ep?UAm@Tu<@U@Rq `PDV8@??`?c?je?cx?Wzj ?P>T`?UA ?E>c`H)nW5MH,6F@NhR? ހ?H7Np R?UNX?]?7:*?<-b ?<T`j>= `1 ?Q?XLԼCY@V>?B:xau cS@Pp ?1ܜ?H͠?M0?R?PL@?1W02*`#?? 'tHM?9?[?^v@?R Y?P1 U`Lkj@?@WQ@?@ ?VQ?;Oנ~ @?W?Z @GE@?\:?Z >ʕ`B`OeU`V=@ZCH} ?S-Z?VH3b@W/`U*@?V?Xϖ?KX@[F`f `Q``?9!?3?ʕ`8?<ܠ?T{?X?PAQ`@S ?X<?ct?`?CMI :4EN/\]\/O#4~ DPw Y`@?.l X\cA*@?Xz?D.W8ڪ@H]n@JY ?:@RF?B?/J?A\ ?E>R2| $Z+`?Aq ?C @6S5A@0ހ#b@TD ^W<!rE?RR?b@[]? `?Pj@?8L?UP?ap?:ǀO4 P F=@?D?;.V9Do?M?/'|@8U? N?Bn@?P1`??`8 -0/n`8@?~3HpS@@TpVDA?H%@?d/s ?U? jm`?Q?R.@7v@?Rr?=7;0XAYW?:Ҡ?VZi ?Pf5?J?H[`?C Rl]lg I ?U/T?]K+h`ZxL?`!B0?CK?D @?H@?Ul?P|@?n`mdLC:U ?QE?FM`I`T)O`()n?6i@x@X=^R5:` D?%@U:h@^)`?E?X@S7QH-?S?;|&;F?VPSWr?1?/\?2Լ=uC?&\@?M7@Q? 5`?ܤOw=C ?9€?3Pj?E?K`Uc @Jm? `Em\NLGf&ذ3 ?O?``?@UaY ?L@?],`?3-Z?+?J@9qP R+ H j>@*@#?9`6S^ ?N@S, &@SvvY `?F?XO ?E #?C??A@V?:@>ԼJ8@(;''|@S`H<?Sʦ?b3@?W&?>@?Jǀ?!W:*X?G$` PlP@Q$To>t@?;X@?5v9 ?E/T?WdB?MOFZ$MS?A&?J@'1N@E @ HD`C?A?P ?C`?LLf@?N.DV8@>Լ?A`?],`?V ' F]6?3@JSIZx?.P?Qk UdN ?^ ?Vi ?0?SG?P?3 ?Ay ^ ?2a`H@>?OBU`d#C?'1N@?L(Q$F't?P~?Mp`?:@?R# ?RCQp0!PsWf' " Q+`B+ ?C ?XZ+?S+πPLX+Wzj ?I`?d4?WC?8?J;;}7٭`I`FM`2`-7;?"?G?QϠ?$)Q}Y`I_#t?`IuV> L @??+ߠ&J ?@X?Uv9 ?H6?Dy?FSMOW`? *@N @z%@?+|&?E?A2`CAm?O ?IE81 O{K R`PLDM~ @\z@ZW@fy?N׻?I?Iۧ ?S[ ?HD`E<`VZi @X?2J;#N?#?K|&~ @D~?3@?H?>?Kq`?O" ?:`?OX9?V"1ܜ?W ?Y`?A \/q *@@%]KN/\?=DD`2O ?aU?`/?8[`?D@?O&@?C `?-H@M`?> M)?%`?W TL`g`'x3?L^ GJ@5I`?F=@?1U?4 @?R?P3@?-ـ?J?U`9?O0X?03@So ?+`?^ ?Zt@ Nt@- Q- >md?NI?8c`J=!I`?4?Uh?JSI<@9M?8U?C(`?4ߓ@?je PFJrM?%R?,Pf5K=?G`?N-`>&`J]@?G٭`?SWr?&?I ?U-`=cJJl`?5`8)nO#1rE@!A? 0D"#@?J d`?,+E0z%@@WGC?K0Ӡ?< SS@Qi?A\ ?UA@?O&@?9`@+REJm@ހ?"X'@X@Rh.?P `?Xs 74@HD`?0??B;.LUBR@S ??,?`]־ ^/\?.?@ `&??6't?AnYX'7C@?X?KKi`;5A?5`?@TA`KߠA&@E/TK >H?(^ =K?E&w?^p 8c``C@@YRO0XSr@?> ?W#@?R#@?+5A?D?Yj?RԼ?O?[R?Nd*`?BF?Rj?rEV^׀Y.V`?Dl_H7Y.O4 SG_iS?L^`?b}@?Tg581 7@?Hk?VnY?;.S`Z`Q``6?B'?D)`? z,?J@?`?o?QPdTˣ?@/ T?0qH?^Ճ?Q`?G`?H@GPqH*@6a@%?A ?P?Sޖ`?PM`7P@" RH ?XG?X_`?)`?$Z?P@?LJ?,tFAii]4c-ZV@.R@>`LPԀ\ARDߓ@?WC?X1*@G]@?G`?W:*?-־ Z2 j@k*YP dNw@_F@?R1Ps*1?BX?L ?@1`-־ ?G@?a?MuCV[On`F@7`?c`F"\; Kq`?IIo?0<@?H7?TO9_Qy R@)`RݙJe WY.\+jm`?T?Q2O BX?F\@?L ??9V`?H`?:?!UB`VJ WfyQm&@?2I_X'7K2CKn۠0?O&@?V?9_I@J-?5`?Xt?GÅU[qB5:` ?/\?E`?[%?ZQ #S`B,]?4c @ `[ * I g?Kjm`?U`?WZ`?H jK#L( ZCb@Mk ?1?WV?X$@?D@49<? 6?3@/ QWCs?@?J\%?Q?U?A$9V}`` P]X`?$)?~ @DwIqP ?7?_?`}x?Dc?#@?X͠?e?Z&Bn@cӂc̀C@RZD~?9_0<@?@?E׳?4u<@?C?@?CK?C I]k VUA8>?HĂ?YE@?6't^&`Tj(?Q]`?z,?c`>ѹ*@S@J"?N ?R@?QSA?S^?@PL@Dֶ?%d?=8@CP?I{?AV V+ &9. @PdMs@? ?F??'|@<ޝZ TUG ?6@?V)?Wn ?Tg`?I7`?@EW5 R`Sc@AN@?I\@?N-`3$~ Ed^ ? #5l?i?|@?Jˀ? z,W&Oq ?B+ ?R@?;@N`<@Z-1?AD >Z?<H@\ M%?;|&?#@E*@" ?;#?4%{?Pc?G `U`iRL R7q?>v@?P?Wh?Pd?HD`?Q5??" 7C?!`?L @?@ '1rE?>?[贠?a?OiO?RR?c@/?Wfy> A+`1?8Š?)`5[`?$ֶ?3t?`%d?Iu?`ƀ?V?ߠI`K@:"HtX$@S;2X?!rE5@%?<ޝ?(ŠVJ|?EA@JSI96RwG ?HZ+?R҅?X3?]݀?OI IKKi`56\@?!= ?Z@?S/ECV>z,>%@F: Aii&"?N*?]~ @?SE`Ila))P `?QȬ@?_Q@?\?PDꕿ`3G)3H @۟Nv@IΠ?3@?J ?G(q?,-b >?2F?CC`?%'@?G|@_ R?=lg ?M݀?Jt5Rb`dQI<`FnY*=!?P?U5#W;M?3$!`D @?2J?%1y ?[q`?bݙQ))gS??#j?@)`?QW?Phl ?RD`?^?Z& ?G;?O95`?S@?"jeRB@W@Lz`?)hs?Kߠ!O*@?.%@?Skb?3-Z"@?;F?4)*@Jܤ^)`Sչ;|&PP@G/@VM`>*@?LPԀ>^ -0/JAQ?,+?Q?I_?2Լ3$~ N%@Mc<6>?C@?]n@?Y ?Q$?XZ+?Q))ߠn`?$ > ?6"?Np ?Iw9*kN׻?4 ?W?PE ?8~7EE|?C ?Xz?ENX? ?.?=ߚ?G]@?474@3t?`?0P?Vu@?RZ@?2 ?8͠b@UW]@5[`?H?U?A&JC67@? #-Z?9*k?DV8@?JU ??`*`?9{?WÅ?Um\?UCD?T4D)`UbH?Wn ?dCUE@@D+h`?4ֶ?D)`-4Q?N?T?QH-?[?X'79`@[ Vw6MDk?7;?z,?I@?JY ?`?W?E@?#ޖ`BMU)W,RLG6?E[`?`?a ?Ct?`@?!ܜ?Dc?4 ?O?3@?7(q?CC, >?ASADM[ZbRݙU?D?V?K'?8D`H@Ve|?"F?U?H?@?@*d5m\O4 2O ?Pt@?V?G;?N?YE@?N` ?5`?I?Skb?PT?89qP 5 't?0D?O4 ?M!@/T8@@-`9_?S ?^5?;πnY?GT?= 6> 5I`'@-`?9`?U?Q?&?>?Q*@?0!N%@A?Sc@?b#@?XJ?Q \?XHr?L+?7K?W`?Te@@3@AQ?`? |@C `?*ܤ?S?-RH jm`9€"Լ?U ?\ޝ?F?5 ?Cޖ`?R@ ?G]@?S/?L ?9E@?B?[?^G?ZkWSm?F#?SU;`?Oᔀ?A@O`TF@?F#?Y?H@?D ?Sр?F4> 0?K ?D ?e`?U]ڀ?U׳65A@?ap?\:J8@;X@?R?MV??/`9`DH`?DL`?J]@LGOn`2nT\ V)!= FB VQ?2X?T9k` `H} 2F5 V?V: ?W~ @?2X?MMc ?Z|?QL *@W&TBG?0X?H?Lr`?:xGCAd?@RD?Co ?<@?M`?Yz,?YV`?2,]K =~ @6EE`?c` A8;'?P@?WY.?AU?A?Eq?/\?- ?2jeFJ H#ޖ`Bn@S\ba``֠\m`Y`J]@A&D ?< ?X-?K;SzG m?WGu?g6?Ve|GGuNA= ;Z ?0?[aSs?U]?KP|@?5/T?` ?X?K`?.P>%@`rMMuC)3H ?6e|IX@J?*N8URh.+`?L?Pހ?Oi?Je `A&?H)n?U`:NQܜ???MEA@ZdTwI; ?F?8͠?. 05`NhK?B`?X0?T@?X{g?WsĠ?`Mk IT@MV?' ?W ?]%?Lz`?o>c`?B`?F"? `?ᔀ?J?@ ?X[`?Iʀ_%E XC}3$>O? Z?:rM?R`?2`I ?&ذ?Oq ?K]"?V)?L@Qt|T, ?J?2?3?R]?W,?=w@M,`W7F9.?0۟?EA@?Mc?Fذ?DV8@?\:?b@?S3?9qP ?=? ND K2Cz D;XĂTn?E%?EN*?R| >'tTPQE[`??O ?FFx;KߠOF@S@G> .R@G2v?LLf@7K`!;F?Z?\n@?`@?bKa?Y?J53R) ?N4?3@DkD2 ?`?2@?-ـ?A?SWr?V?SJ'?:N7?A`?W(a]#K`F`>`QH-V't:{)?I ?KR?)ʀ?J?H j?AH-UPV@\CO'|@?9?rEQ@SL^5 ?L?Gb2X?/@?:N5d `?L@?O?6 C`9?Ln@?@?V`?E<`?:倠L1ЀSC ?1?UI`?V9.?P9A9a۠T?I?T?SG?Y?[@?RR)!W:*P@?+#? ZYS_Ǡ?`?^?YP?Q?OA?<@?14=?+25:`?!ܜ?H} "XRXP2F?4 Ay ?I!?^%@?O 5A C&"D`TTa2`jˀc`?12`?P;aQU?@P?bm?FnYZN5l?T?@|@@4C ?!q  J &i?4l_J<+PK@R:1"`?BT>?V=@?RVcG'fy?AN@MH`?b>+`?Cչ?S3@74@H^ ?A\ ?P[!@@?=K?9!?:ǀ~RRO`?"!rEn`?S@?Y]_?-~ @<-b ?0?P1 ?Y?Ze ?AM?4ֶ?Sn?`XF;?8@?] (C( ?\7 ?ak ?5&wB}@5/T?2 ?U ?X`2a`U@?6?]G?P9? ?`<ޝQ4 ?T?J@LY QϠ>C?H@?"JSi+Y_FB D_?`?,PԀ?`vҀ?]F?S?B>@uI7x374@?!@3@R^@8y/?"v5d2F;@HpS@?+jm`?K,e@?4g?2sBw@PqHR~V@=o@?4@?9V`G@Mg?FB ?U>+`Q^U@?5A@?e?Zb=?D)?\W?Fr0PZpb6?%`?S`EqIE@?G@?\b?>%@7;?5A ?_0X?f!?^CL@?fyX jO`?J?Q= ?+5A5m\Hgv>@?>?,ޝTX ^ ?8@EE|Q B`>@?CU;`JWoV`DQ?@hl I`@Ys@ ?3 OeR "?A&?Phl ?R?9`?.?J\%1N@V? jm`?E S$~ OS ?T{?V`?9 ???>?"#@?O=?[q?3jQ>#?R̠>Q@N =ߚ?Fi?\?@Wr [yC ?? ?>PE=@RFU΀U`ECz :4EB6`0<@?T@?V?`?fy?. ?AM?X?V: ?v@.v@?7]@?03@B}@ܜ?] ?\4?;`?J@?EF‰FR҅Wq?S?aArEQN@?C^?SL^?+`!? ?XF;?f!?]D:9N??0X?F+5A?/ ?6MGK.?@4 PހJ@R?:+h`? z,HD`R!J F Jǀ\J/ @?AJeL@\$Ed(^ 8͠?F?9z,?,ޝ?4@?(;'<}#`#??DH`1X" LtFE׳\Ux`1 HHrNt@?+}?A~?B'?Z?GY.L7 ?Si+?RUW^#ޖ`?F@?74@*>R0 ?"`A?w=?./\B#@W5F: +`? hl ?Bje?@|@?4Q?C^>F4?=w@?N)`R _{b@?4l_T%{YjI_?ߠBje5d?RR@?SG?MO?Zt@?E%M~ @?Լ?J@DkU`*rM?C$~ ?v9  ?Q``?MuC1rE𝗠0t@V2I`9z,J8@?E@?S&@H͠Qd,+CONdAPX S "?!N@S67@P, ?F`@exR]?C ?MJҠԼ>^ ?9V`?A*` |@?FB ?Gf?4B0 QܜQ?Q@?.P?Ba`P\rN*1N@?/`?GÅ?A?/\?$>HQm<-b ?5[`;Z TˣEm\c`,?`.d:E Q P>𝗠?+jm`9>@?R?C `UWJ@?F`?a?O]gfTH`0_-H?M ?U]ڀ,-b Edv@A+`5 ?&J N" VJ 1?`?5A ?X@?V ?KB?T??n`C-Z? hl "_#WC ?B?L^`6SW흠[6C-Z?8ڪ@??*`?G  ?VDA?>RsB ?L 1@*d?; ?<60P?K?JW@'x3?4)?G 5B/@HYRL H ?1rE#b@6ذKVULX6@1ZY `TV}`YSB'?Z?+6eS67@?N (7JE >ꕿ`?G?]F?[ݠ5dS@'t?S ?T ?3OJ\%Nz?*`?Z\%?V@1y N 3 `"@AFi $%{?M ?S ?RCn`?AܜC$~ ?'1N@?Lb?Si+?Nހ?.dذ?+6?>dʕ`PG0L?A``?:\^`eS&@?6`4od$@d /@?A4=!q ?H<?U81  +?@ހ?`0!RG?'@=Z? #?^&`?X`?A{" ?@ހ6> ?Eq:` RKa? ?C ?74@I_Z`F\@?*]@?# `?G?HHrM$`Uq??7]@?&J ?S-Z?V]?A?E?My?FG? EA ?8~?Q@?Lv`?SU;`?V?0VBE<`F"?^?O`?K?8y/H2K Hy/\2`?Tՠ?&'tX%@YDS67@?-w@?d[ ?YHIu?.ހ?U`1EJN?6w6?V`?d_?aq*/ Zѐ@K]"?G?VQ?2V=@[Ed?B?Ms@?ր^GJ@?[#?ZL2@'fy?F?-~ @? 5`?I?M ?E 5S)ʀ?*`Rɩ B?T4?I~"`AiiYLI?Q ? Q``3t?`EE@R>?^?8y/j?+|&%A&?9? ?R0 ?X_`?N` ?-`?.?!+`?)ʀU)Ba`?O\?H@<QR7^?Ed" JJl`?G@?Q6tDߓ@J@?8L?V#?` ?TI XD`DZ?B}@?P?RS$~ \Nb#@a&SE`v@?Rr?b?` ?8O\I*k?@@?RR@?7;)<ܤGfRb`? I3H X^ 12`?GPR`5[`PV<6>?7?K?/ 6i?J4YwQ`?0|@?B>*@B#@?7?`?RPqHQ/@)hsAMlg !+`?Si+?X} '|@S[ *@?4L`Lx 0?Jip=(`@ `Z`PE ?@J>*@?N*6'tRuy??9*k?$T%{YRL 8@z,+`?Cj?P5`?Or@v@XYf<`>mdn`!`?A?LUB/UYRKπU*@[_?^(Jˀ?B?H?:K?+#?Q6t??i. R?;'?*`?1*@9`TwU!Z}`d)`Z\%?6?ZTSAm@?1?K`*@X<Tc L X=^\PԀM?FB ?Va JN?:9?P-`?2 ?C^?D G}Lz`5m\E2/@?<?C@?Y'tEh? 3@0 88ڪ@[c]ԇGx3%`?J{)?U=@?5׳#-Z:@P "`?OO\?8 `&i/\7Fe|FB Kjm`S7VR^@O Xz`5wT#C&9.!`74@?J?O(? hl ?Iu?3Y?A&?U?7oV`S[ U׳UY6e|?@ހI]aS`WSC@c?fyQa>5QϠ?'^?'tOᔀUI@?Iw?i`?cf?/*@@[!@F{`M[3G?)V`&\@R7qI<$~?LC?5lD ?A?RD`D I0?9`?[?9<?,ޝX`X$@A`/'|@?H6?R3@?1M?6@?ԼSH?A?(Š;,e@/\?=?E`ZܤYX@?5`?SW ?G ?CG?&$o:ip?6?Cj?R3@?[ ??BVYGK?/ ?S8n?EdS `ZǀH@7To?'T./\>v@- ܤ"ԼMـ[TE(Š?aO?a- ?Nl ??&nYCչ?,r`?<F*D ?CO?FX2!ܜAF'tHJ4E"#@?[M?b}@?G?:@?Mc5Q@ V!G >*@J/֠5`?>t@I\7 1?<@@~?~?Em\I€NN`??" ?5׳ذ?95m\X@S/A,ޝ?@l`?C3@12`0۟?CL^?B/@+ߠA`?4)?S, >'tX ?J? VSNM`?C@?U?dX ?gQm?RR?9`?3 `>:ipC`Y5@Q@B+ Mـ7f3jD;?E ?KFF@1E?J4E?b@>c`?QI ?Q?I?@H<Q4=?B>?Ps D1't?U < :ܤ?E?P ?K?,Taq`V߀? @?I€?'CJ5JrM?$?E@?69.?!= ?K`?W@?$oT@B?(Š@XF+ O?&?CG?UL!`?P<@?K?]ꮀ?YB 4~6> ?P?8UH?/ ?QI >@NdD2?A?L474@6@?P`?B`GY./@? RI`@LH `G?RZ?g}?Zm?5?W٭`?^U`?K ?F* [BI?Ruy?C:-??J?:`F\@O&@F`7?3kb?69.FQp>*@?L?J{)?@D?G٭`?M0>@`V@?S LA{" ?$?3 `?Rn@?V.@?;`?K@?W ?=._ >?!= ?;π8^ V=@D 5G ?2?D4Z?)ʀ?D`:1 @?Mp`?jK`EA Jv`B@?E81 ?Ay >/\?3$~ ?Xƺ;5A2#@?Vt?I_:W@B`\<WT?@( 6>?:@?DJ "5:`?X?a"`% b#`Sr@?HQO@?G;)hsG`A?C@?X j?T%?Ut?\&?HgvK*:=!?B`Ky\@?:]@?[m?4D`DCt?`@t@0D Hgv?Bj?CM~8?R ?Oe?7T `+F?V4?f?^?Tg@?^md?[*. ?RKa?P/*@W/`4D`?MV?3ޖ`Z J@?C?=G^UKTE?5?IΠjm`H &nY??J?C@?Ay ??i?C^?+X@D)C@(^ 3O$ 3jM=~ @?*@? 6?NE`?[0Ӡ?L?1{" ?5&w?A\ ?HĂ*@D_?;@?L}#`?> ??jm`*@?H ?WÅ?@L?$~T@@b  ^@R'?W?Wzj ?Skb?8 ?F't?%A >A U( >'t?`J?ES`AdC?\$Eh@?G?R4u<@?0ހ?>?Aܜ?'TC1?"@?_ˠ?_e!V>?J?G;12`Or@G^)ʀ4 6't?5?+h`W^q`2n?Dl_HSр?Lkj@?\?F*?Dg`?Gb ط> *@E" C?$V@S ?C(`?Sչ?U]?U" ?N?W٭`?\J`?Lܠ?Iƀ?M~?2?H#?Xڪ@?G`?Լ?> ?;`HZ+`~[`?^ ?+jm`U/T^Sj`ڕ`?Lv`?E?9 ?P?O CL^60Q`?<?SC ?T ?Q?Dw*@?&?<$??@_?V0Q`?WN ?U5?O?4o!F#F?;}?I?2J?E!?Qq ?Ihs?J=!?DS>^ ?C@?^?Z>c`RD`V"VU" P`74@?R`?R5:`?>l ?D @?,UCDR̠?1?W`?*rMQ6t@IZQ ;,e@?F"G -?E׳?U`?8pS@DQ?I ?aC?R ?2?M)?W?Q+`?+`J& J\%>O@_9W?@7T`+U@?Ow=?\PԀ?Ed?5?Xc`?] ?O ?SE`?X?L?G1N@?8)n9ʀ?;?Q DF;}8`?F+ ?Z/֠?Uf ?U-?L}#`V?1{" ?71 ?B?U!?H?FFx?H͠?5l?6 *@5`?) 6VM@N`D%{94?Lޝ?U$@?Q+`?]O?XzAiiV @ `??w=?KsJ?Qv?W?M݀*?/q ?YE@?]._ ?[?_#?_DI ?Z5?R]?E >ʕ`U@VFx?Fذ?Y{ ?4"J?Av?Qˠ?X-?Q >dS@?!?On`2nTˣ;a?A\ ?/q Iۧ VcED~?1?2?F?V?6@?Sޖ`?T`?C J*]@?)z, A&~?-0<@P7JY ?F‰?a@?OT=uC?Nq`?Z d`?%@>*@?YqP ?]?>HOI`?F"?SU;`~UA I?D?'^R`!+`?` D`?a`?SG?DH`?Qk ?X?M?( ?@V?R`?RR@?:?Q?b-y`?\ ?S?"XQ@0ހ?I ?B}@?J|?3PRKaF ?+#?.?H`?25:`J@&'t?/E*@?RX?`~?]4?T?8D`J d`?E?1`9z,?Xz?`l`?Cx?F\@?D2QBY%@2ݙ?-H;>d??S ?2@PB5:`?TS?^p ?R`?#t?`?*rM?U?`@?`` ?RI*A8G?MO?Q2`@3@H} ?2?P`?Vw6?M._ N3@c WVb@6@G7?0?S1?P "vX`R0 ?@T?O=?QB?_?U?e@?]@?.l >^ ? |@*@?6J ?I `?K?Dg`?(ڪ@>`J`?:+h`?_6@?O\=?.d?6aNN`K ?3j?=cK2`9A?a`?c`O ?K0Ӡ.%@@1`𝗠L}#`0?RР?Qq ?6S$?b@?U?Wb >`Q?=._ ?O`/\6 ?N?X?TS?YΠ?R6`*@Z? N't?So ?HĂ[ݠ]'$ֶ?Cչ?Ev9 J4Ea@PD=cM ?3s?] ?av?U1KTEOX9?P-`?0F?[Z`?b8 > =7;1`V't[yP|\`JǀSzPK@/EA&XƺSʦ?#@?K?5I`St?`UI`?B?\}#`?Yw?T?Dp?4?Ad?J A`8U ?9?PA ?K 5I@Q8Š?@*d?2#@!rE?nY?<+?S3@?W`????Oط?P (?;u`?FOU`?1`?Us?EI`+?" "JIz,O?G&?Lkj@?SV?QQ?;6+`?*@?9M)!PQ9RFVQP%A ?9!A`]~2@?`?X;'?4c w@NA J-?@CC`N4?>ڕ`?/J?'?X+?bn?`ZPA+`?8)nڕ`?'|@?G ?3P ?F"?W>O|@?(c`FB W@\J/ Y`OS :ǀ<}#`Pz%@Nmdb@?0_?3, ?5F"PP?%`CRB?F]?F" 6~?OS ?I4I[(Fi ?I*k?EI@4?Լ?S@?WGu?C1.v@A2`+|&?Tc ?d4?^%@?>&` `-0@>'C ?#b@(ڪ@Fi1`3kb9hs?&\@%8@?HQO@?Qg1?HW@?Q?DSIE@X͠]ߚ`)HZǀR@N @?I*k?`h@?U`6@?5R?T)?v@ߠ?A 7C@?UYl@?/q L6>76?;5A?[B`?Sʦ?P=?Y\@?474@Q9Dw1``:?F?LS?H `-lg *x?WÅ?e ?V`W `L@?PK@?c;?;}Csz,'tA4=M G`?ߠ 4 @?Ihs?Rq `?D @?.%@A+`%R?H@G ^A ' ?D.WN@?0_?Fi?2Լ8[`MߚKsJ/q ?BRX(@>H?[M?XK?8?:rM?0?/ ?EE|I.eQ _%E ?nY?69.F`!?_*@?VeW V*?Il?3kbT@E?Om?T` ?(c`NS3@:1?O&@?[?J @FiVu@N 5`?#$?94?Re?L1Ѐ<$Hz=?1U?FB I3H X?-%?`?W?XW@.A T\ \-b YD%>PB?N?dG?Z? ?6i?<ܠD! |@?R5:`?E-?PE ?]`?.Lܠ6E?v9 ?`*d?V&nY2R#?0M`?ABW٭`G]@?HL?W`?EI@?+π?\Y ?f?RZNc(`(@?\?S?+jm`ڕ`?2/@?K?RN?QI?3`?E?9`@:`0?,PԀ?ND?PK@Lܠ] 0!?4%{A2`?H-?N?>?1ܜ?2n?F?0-_X3`?T@?[u ?8?CC`?Qu ?R?Ud@?:@L^`I?|@? 3H MF?Ruy?G;[h6@P?X<?TG&O\?0 ?Oط? hl TaLVM`&"?I ?:xEm\TV Kߠ?1M?Lo؀9X@?Q?W ?2-%1? ?DpA U6;@L$?>%@?S ?Cչ Ku`6't?M!@25:`[E?YV`?Jip5%A\ L'V `C ?Ckb?KR?Rf`?PK@BR5:`BeOArE?P~?EGJ@O1`$?T#C?TK$K0Ӡ_u`MD?<-b ?F`9 HW@?F‰?R# ߠJ& L3>?HQO@?S3@?367@<32R?AJe?Q@?PM`?L}#`?>`1{" GR# Wx3M?&?Sm?PIh GU-`? ?4I 3P?Vym@?V͜?# `?;'?8y/%?9`@?I8X4`d>ހ?<3?/`?X ?`p`?RZ@?L?`?X`?\^ ?LS' ;sJGL?R`UW5 -%?av?cz ?FBR*@?NH?B`I@E ?I ?W(q?A=8)n2Ez94?"#@bU[`$ֶ?9<$?P?El?%I`?K ?Hk#> =ـP[!@AE1+`*@FH3??VH2K f&L^`?W~`?Z/֠?H H j^p \@P `(pS@?C ?J?0AmF`@-`A"?4A C0<@?A= ?*ܤPG0H)n?7:*?B+ (ڪ@Z"\1{" @WoV` ?DH`EA@A ?B?3@?w=AU;I€P9?j?Q`?$RwR H@>@?4?Qbà?F+ 9`1?M?LUB.P?1?_l)?VSD C`?C ;,e@?8D`?XpS@1+`_xUҀMc ?a ?b@?*@@|@?P3@?`?DV8@Wv@\CUQQ91{" A&?>?W ?N887KX `Oᔀ?G? ?F< ??X0?[ߠ?H6j?~?:+h`?*@7H;'`j@bJF@TBG?O?S@?KKi`? 6?F?T9k`?Ihs?':N581 ^ DD`M IWF?BQ*@eqK?Yj?gZJ?d("5:`_;lNހ')hs?5d?>׻?'T?*rM$~GsĠ7x3?,@CAiiCPIDKu`QϠ6@?U-?V?@1`?1iiԼA2`W`VJ ?A \?^?>dQY8)n?3j?jm`?=S??*@C(`Kπ?HHr?bݙ?`?>/\R?M$`?D @I<B/@?)E@- ?,ޝ?U׳?HD`8Q- \ G ?X\c?RO PE V"?+`?I`?_X9aG@a %[#Cչ `?8 ?U ?BUa` H)n?OF@?=uCN[:ǀ?A&@?/*@@p R| SW .l ?P?R60Q`?$v@?#$?8Š?>~GPR`H "/@?ER?8 E%'C ?L?5/T/\2,]T@YCnFw6P5`:N?9<?[?`P @ ^` ?OB?60Q`?8?A?@~?Bݙ7 XQ4==ߚHE`ܤB' Mw@?Em\?am?C(`CG?M?WV?V?fOU`?bH ?(L?5d? !]SZt??3t?`?,W?5m\2,]EI@?(`?[D?\87ZDy1`Hڪ@%A ,?`[_YW|@?Pt@?f?c?A{" M E`'1N@C67@> ?*? z%@> ?8?B'?7C ZKu`?9X@3b@WR $c`B@@.`;.V#VX2@?=w@?O ?_1`?I T,T@)?LG?W7?Z@X `N Q@T! [cS W ?SL^?bH ?@7?RF?]?V\@?JSI?; ?87?)!IʀE`?Re?P|@NR@M?*ܤ#@Լ?I{^ V@R?KTE?Dg`0@>w@?7]@UL!`a3Y?P@?D?D?K]"?H)n?B'<`W`PBRK5l?E?RZ@?T@@?C@.?F+ ?TwP]X`_ ?5d?Q M@?ASA?^-$?a``?BF?%v9 ?ط]ꮀK`?Fe|?+R.R@?MVP?G?Y`?F=@I P 94Q]G7?"C$~ BO ?E%?U-?PG0>CNKw@= G AE?@RD?FB :ipVOU`Qm*@O+6?4??B*@D! 9 `>^ ?jeR?@?F5A@W?V?S_@?@Ih ?N%@?B1q ?7;?Qܜ?M?7DyWTL`L8?-ـ"JW U?F9.?\J/ ?9 ?< ?TD ?474@ w@?,?`?UP?cC?Y{?Pl`?`?TJ+h`IlMlg c_@`?3?L:3GLO?T`?[|&?R# ?L$?Dl_BJXW@Lx >ʕ`?% ?./\?$o? |@?Bݙ??*@%R?"?E?$ֶ?Dc ?QC?JJl`?00@?~? YHae`IqP E[`T?BT>z,?)X@)E@Q@?9<?^ ?N RPRDb@W٭`?=o@?8pS@=7;?jm`?QϠ?I Lޝ]n< ?U$@?Y1?K>%`O`O`@7?>׻OE?rE?[#?YB@dL@ do Q?R?J@?RZ@?OA?F> ?5[`0> ?L$?J@?8~ B' ?3?_=?S&@F'tM(`@6a ;ݠV't\ޝP?-Z?=o@> ?@~?U ?Q@?#b@'?5?A4~F?:ܤRZW@Xc`0hl ?_" ?aӀ?Y ?[?>I7C?F<+k}B k R?;ߠ?AI@Q?Wzj ?c^?a?U%?CnA2`F"@ ;,e@HC(`?J4E?W٭`?6a?"?T?Qt|?1`?DL`?;u`K`Q6t0?&'t%U `ЌWPlPh4~o6't?3s?5+jm`?Rb`?cG?UA M T??O BjV.@?8@?X ?4L`Tg`T;?@?cY?em\?QшO _x@WB Y?8?@qHCz K6?HĂ?`X ?V >QϠW@MV?1 ^ ??3?Ay ?*@N*AW?S`?Z@?Dg*@CC ?|@?O`?4D`PR6`;}( J`_ek%`cBF?_X9?]0@#5m\03@?#S^o dbB@<ط0_?C?( `?z%@?U" ?+π`a@Z6| Dֶ?C?/*@] V ?6w6?[ҍ@?XJ?nY#-Z?B`?WM._ Gj ?@>#4g??\?KKߠYG8`?|@?KV?GPR`?W ?O O&@Rje?367@?J@?)S`O c?\o؀%v9 ?:=!?7VFaC@EP1 ?0P?X?9 T{V+ "v?Tj(?I.T@Y 3O8Xr`\@x@?\(?kC@?g/`?N@KsJP%69.n`?b@?/\D74@:?C `?#ޖ`;`?H;'?W?F‰?(L'Mlg N45d;,e@W3`X#b@?G???8gv?@%?<}#`?$'Լ?2' ?z,FS:YqP `cC`S ?4l_3, \'U?9?HK]"Y@9z,4gYXBe?8[`?`u?i€?b^6?=G(qA?6w6?;ݠ.v@, ?5`?5I@V9.YD?R ?at|?N?Kjm`?G@T?0X?@l`?E3?6\@@ YhsX OIER?1 ?T2?Q M@?$l_? `?N` ?Ps>ڕ`7^ARK>C H?3P?M7;&'tA= EV'tINހR5:`?MV?H %`8gv? w@z,% ?H;'$H`N` ?Qd?Y `3GT`ZL?Ba` 3H 2,]?Z@?^?A %AW?=~ @?[ ?8@Fe|?E=@?AY%@V`?FS?N*O`ƀR`#ޖ`?&ذ?!EI`XO&@?4D`?Q ?R@?O?Q?R0 >OR`>z,?_n`?TKn۠Xc`Ky;}P\@Q.@? !)R=0?QW?>A Z-Tj(?F'tV rE?O95`?:4E?N?V?3@Qii[`\@u?H?G@?>t@?FOU`?R/@?NI=`4g?W٭`?O`6?OJ?V@uBF?Oe`?V‰?Wr ?OM4.WJe HLCK?7oV`?R@?I4?1E?< ?QǠ?H^ FSS [TEP!.PP Dl_?Sn?X3?G $J@?2J?Xgv?; 1*@?H ?@?ND?D ?G,T #?; ?Lx ?H-CfC P<UCD?6ذ?SC ?P ?^t@?b ?Y ?=SKV`?_I?Xv?A?W?NR YL?:x/@TV8@=7;?O'|@?Y1?\:?\ ?Np 7C J& ?(`?R?L?BT>?I?H?.P? `?H~?X?HD`T^@*@?Z9?Q#@$)?طG]@X I<?J?On`D K@?(Š@7PX?2`?%/TI_?9ʀ?DTk]FZ@ay R?Q?]O@?Y@?U ?T ?V.?SC`?V?X2>Q@?S ?W٭`Ud\'T?9<?K0Ӡ?Ilo^ ?. ??ط?Rq `?Gfy% ?0@?CY?9 `?9?J()n@W M?1"`A@5`?[R?`5`?14=RO W3@?UG ?U]ڀ?9`րPULB# LBa`=SSP3@/95`?Aq ?T?#jFi?C, ?D`FnY6?N?Q6t?M?0P?1{" ?G5v9 A2`?R}?NDPL\Lf@Z@SS w@?NW?Cn;|&"X?L?EE@?D?A`BKa>[?$?(ڪ@?R.?Rq `)E@3 L?Wb?j&?R@E?3H ?Ow=?R3@?M?DZ?<+$D`FJ C H<@1`?Pl`?RVuM)P?P7?J]@RnR}?=c?QY?D @?@?I ` VnYD ?I8?< ?"J?2vW h@] #A8HĂ>?U׳?ASAU3[L+?'C?F* *@ 6?&\@?,+,?`Cz ?9hs?Y) ?Y ?AMS( Yƀ?0!?G@&ذ?>l ?ECkbڕ`:`XgvOS 9`G,A{" ?=@@?RM?FX2AW?TD`?A`@t@>'t?2sB?@_? @E`?Ct?`?Y?3$~ `?@?- ?PL@?Rn@R>_ ;#?#?-H?M?Q"`?J倠?K`?5 7 ?PL?Z-?B'QNmd?'|@BwW4D`?F]1X'7SW ?!?Cչ*rM&> ?I g?J?E81 ?D`H~^ AN@?H?#b@ ?M?L@RO cr@O0X?X ?ev9 ?X3?3j?O?W/`?Q ?@1`? hl ?% ? TP ?V.?P@BԼZYa A8C <6>?A`?SWr?Q?)E@05`?2| 2@Q?5`?Q ?#?D ?W(q?E<`???O@?M[?C^?J?5m\?T@@?7@۟?Ez?C18ڪ@?P?d`?[:@2``+^P @A\ P>T`'C ?Dl_?CU;`?*ܤ?1?V?au B?Y?Q@'C C? `?4@>ԼN<*@?Q?#$?:?Ze ?Kn۠R4c DE`c`??0Xw@?U[`?L2X?F@?[,e@?JtG٭``b@\/`&ذ?9 z,%@?3}?Q&@?JCC`?@?O`L?;>?EI`?N-`?U?61ܜ >z,?@L?7fyI ? ?[q`?H<EF0Q`K]"G:*?6?MZ?LN?EE|Gx3`U׳KV‰:`?T??)<`p``Q)  ?A+`PsWPR`?@D?YP?@RDBNRKaHk?Pu?\j?B`?j??%dRB#@?B?M0?TaL?WC?Aii>C?<`ހ?'^(?|@3kb@!?0D?L?I8#A?@u?Np S@g$`_A D! Dg`Do?HpS@?`|\`?NR@;X@/@?H?Wfy?.R@Wq@@?Q@?B' ?6"?Y?Vym@,b+R?Ruy?Z?PX 2W~`VPV`NA ?;.?B`*@;'?N@?T#COJ?8 ?XS`?NR@?7:*3RAN@?B?8?) ?> 8LX\cP1`?> ?7K?IRL ?Sf?7;R#@C??N@0-`?)??95`?S@?]c?W ?Wx3OJ?WŽ?\M._ bX H < D@@XYPAu ?#$"vH~?'|@?2a`?|@ ?Uh?_F@?9V`R,]R^@ ?KOנ?Qp?RO ?R3@?;`fy?1?D`??i'*@5I`=S?(7(7Q:? `?Zg9`?PL}#`^P O ?Ke ?Yl?M;OF?G?7N ,W?W?2>``?o?@>𝗠J( ?TQ?U?4 @9!?:ܤ?W*?5v9 R};?@P?*@?-?W`?J& VaX8?7fy?G;F?!U?Ckb?>%@?-Zr`~?F\@?YW?_?[]"?U`?T\ݠ?Ps`9QE?G@?Q`>F9{?J]@?awπ?bР?^$H@?:9ZbNh?b4?eP)3H [VaO3$? z%@H,r`(>HIhs?F\@?_9?Ct?`V_eVym@ ?Xz?U C `T`?5d?McDL`>H?_`?c0`?F> ?B#@?*rM?Nހ?1 F?Ez?Z"?T74@6a< ?C ?(^ =ߚ*@J`R}G^HpS@Z倠X&8͠Uo0z%@?RD`?K`?!`?fy?9X@?Gb ?K@?34u<@@5 V}`Tߓ@;Z  ?C?R`?0t@>l >Լ?BF?9<2a`; ?@?T`?WK?Y`?U-?+}KU-RԼ ?Ow=?7-H?P-`?_ ?Rݙ?Ec`XƺEI@?^A ?Z -@ ހ0X@M`R!J #@?L?@qH?#?+`?/ط?82K ?A?Xk?]?I`@?? ?J?V`7x3B` ?`$H`O=IV`Լ7x3V)R? |@?K|&Cj?"F?`BNB`? ?S( ?G`PP> M~ @V ?7`?QE%U]ڀ?Dc?Yj? v9 ?^|?c_3?UA ?[?*N?E&w?C`?A?G?U!?I OQ=  rEz,?8pS@ K\ʭ^R@'tAGfyBN7>ܤKY`WŽ?E' K2P I!A@?3?G ?"XZ?2#@?G> ?P5`?B`!? ?8 `?12`?C `?Eh@?$ ?;#?B`Q %`t@; ?Oط?Lkj@?RJ?PO?rM?4ߓ@F*"v?U?GC ?5?RI*>b@T`@?DZ03@??K>?Aw@?@2Լ?N-`?SU;`8WR>:? V?"5:`4 FeLY I%@6?+`#t?`P@YlS7S, aX`^6`1q ?7٭`?)3H ?Px@?JNUx`dNw@ ހ?_?/ETn?.v@?N A``G ?QW?\?F+ ?:ܤ?V߀?RȀ?%/T?OM?8͠=`5R?@u?Mߚ?L:=%^R 9qP # `?Aq ?E?2' T74@_+?3$~ ?^o ?L@? ?@ ?O?KX@4D`I.?-H?8 `?Cs?P)` QN@Dp?BB@?U`?X?S@? ?J?`?0<@`? N+h`&\@?J?SAK?$74@C( HG@ KBTH`+#?Co ?:ip?B@?Pڕ`a M@b+B@?C `?bsB?F)`?R?R}<@D;?B?M?&2n? ?0`?E474@UE@O ?;?W(q?Vp= ]ـIV`Ke I@?> ?Q?Y %v9 Z\%1?K?2je?3@?N" ?ZY?]G?G ?A\ ?^t ?V%=!N@?B5:`?X;'?@x@@X;F?N@?K?^̧@?Z-'Mlg *@'1N@3s? @M`P`? !?PIh ?AM@,z,?|@71N@Jˀ(;'?C@3b@WI(~?WN?M-O1`XC ?Dk?# `# `?= ?EE@?Y ?^0*dRȀ?Aii?ND?:ܤ?D;*]@OT?0?D@? 7@?@7?GJ@?R ?Pd<+Fa?P?UI@ n`?R0 ?N88 @?0?SK?R@?J@?L:?8D`J?3, ?'@Dc Bv^ ATC(`?Po?Uxp@?*@>?YM?]0?>P ?J|?XF;?Zp?#@R@@'CH jIqP :=!?J`?`L?Lr`IRL N@Q@_?M ?Fa?2| ?Tw?U?R`?X} ?l ?$?B@?M ?TT?Mlg ?AI?E?E%??e`ꕿ`Cx>R@?)?G?Gx3?5?6"?1@EE@9ۧ Eq2#@?%/TB/@F9.5PTI_?8 `?&?3, ?MB`V?Bw?Phl LH} ?Q:?^<?]?J倠QǠLJ?V=@?Yp^ ?!N@?T` ?OE?&?9 ?G> ?1rE-~ @/ ?'|@?P!?V0VbB@^Ys ?3 ?M־ ?Rm?=(`H2K KB?Q}Y`?e ?` (?NK'QeM kS*`U?O?L^?<}#`?\/?M$`?!U?474@&Hz:U C ?()n?4~)3H ?0?SS ?=Q`>A Kn۠[Dk?WZ`?Aq M?&?MZ?4*+h`OR?ᔀ;jm`^ ?X?W =cRA9QZ7?"XE?&?V?C &fy1*@?B?\f?S(`?2?8ڪ@?I?Q't^@UNX?E?BT>@ r`?R?U?2C(`So Sz ?6?Q{" Du<@\x Q\ ,b?JJl`?NzCGH3?2`ERV2>c` ```Z@?DH`?[F?WoV`?:Mk 8@?S?>@Phl !?R?C@&> .d9K'SsVgF?PD?ZW@Gg㥀Y `?KTE?Y1?[`?V`?7@1y P_Wv@?5?e`?`ހn`QBF$N _BP?G1N@?EC`?` ?c$?fyXgvP< .C?AU?N88?fy/E4~TPD C@4@?VI?RZ?"5:`?>d?84u<@E-J8'CG@?B?k)?k0Ӡ?P ?V?'1N@AD%?Ad?8gv=@@?PL?a`?/95`S+#QOi? z%@?WHZ+U)Z@SN?IV`?]c?ڕ`?V?A*@C`M$`Kn۠GbJmTV8@YWL:+X@Vq@b 7?[%?_n`?]݀?EW5 Q*@K 1rEIhs?1+`?[:@?>ހPV>@?4L`?BKa?Ad3?OO\7 >Լ?>v@?_ ?SkbQ]$`K.&>?`=uC5d?ܜ+#4L`G['>?\d?U?v@?Fi ?Z`?\S?P"Լ4 ??v@?'CA*@] DD ?]\ ?[u w@FAN@?\'t?DL`?1@ ?H͠?YqP $H`WKOF@:`?3Y?I7`?=?IRL ?TBG?AN@G\D@@?`?b+B@?J/֠?9!?8pS@B0 Z[}VpN@??L^`?C(`?@?G>L@K.3 ?@hl ?U|`?Y*k?Q2`?L^ ?Rh.?PG0>@DM[%?I~?U`?RF?=:E U-P#?GoV`?Zm?J +ߠA/J?/'|@?@7? |@U81 d)``YDQ?'1N@?A"`? ?>-`5I@[i-K?U?D ?NI?U!E`VOU`?BԼ?S^?+ߠԼ=._ XgvV߀D?9 `?@_>@XRB@<`MߚQ15lO0XPJ{)7 7fyJ@?B?e`?`S`@(@?Oi?R^@^Q`F/ط$o?3P1q [u`WoV`8`A@S ]aS``|P?)!?8 8pS@%R?@?9X@ rE?0_?((ڪ@7 ?0ހ?B#@>z,??=z,?R?W?` ?P1 4`C14D`;,e@>d$ֶAu ;ߠ?% ?Eh?A @M`[sJ[>@EE@?*1?O?` ?\^?3$~ ?W?Qbà?Gf3b@1`???S(`?TT ?7IV`PX/ ?C3@?B' ?0|@?`'t?'?Fr?VB ?^k?B| W[y`PdB' >CDM[ZpIѹ*@?Q?Fi "#@3sGC Qp<?jeC@S @7C ?L`?J@v9 v@?D74@?7٭`NWQm@?&ذ?IT@?Ez?N?L ~82K ?7?E?4@?-־ ?7?0! @@? ?\`?Z ET?Bv?[M?P|@?A4=@M`"Լ2#@KOנPB >@~ @<@@0@6"2a`?1= ?So ?bje?`)H?Fa?4@ A= ?(L? T@M~ @? ?7?Q?G8?B ?PK@P?L1Ѐ?Q+`&?0z%@?>&`?>?-־ )ʀH} LLA8581 QxRZ?4 ?Mp`$V=@` {\EV9\<@\$P=U΀\z@Oq KN_95`W ?0XM3 w@S^P &9ʀ?*?U3?B9>-`R`Ut`?0M`?P `4%{R8[`?G? ?K'$ Iۧ O?F*? @-`1= ,b;|&?. ?PaƠ?BsBC?8`?>md+`'t?S?Y~?7C J 5?Q`?Iۧ MSP?Lo؀?bɩ ?_A?7^QZipZ]@Sޖ`HG I=?@1`?H6?$l_?LPԀ9??B?P?XU?W3`?SC ?]@?Y?/?D?Ph9 `G?'`R@\ܠT?0D#V@?K2?; ?|@?%`?69.?2a`'?^ SfW^^R@]&?R?J?'T?'t? hl 7fyRFH} ?'T"jeKKi`MgY4aq*S`Lf\3QM?Qq ?\tF?P[!@?H ?Jˀ?CU;`?A4=?1"`E H2K ?=?P@?H?I3H ?5I`B@<@|@3ޖ`?.P?P?E!?@ ?D =Q?0@?P`?%`,ޝ?=Z?PA ?KCC> ?Ps?N %v9 QZ9`5@Wx3?`??ᔀ5d1``?5R(pS@HɠF?Fr>'tG٭`"| ?581 A``R@<@?>?Q?NA BB@A{" UX_`@!?#P?WdB?^P ?AMyP??`?^?^@?UE@?; &J ?VOU`?e?UA@?7oV`??*@5E$%{TkithFa?IΠ@qHX\c?C?I8BR.MN@D@BݙIۧ ?ܤ^ _ej`Kπ?^l ?X3`8@=~ @?N?Wv@?K?RF?a`?^k?F9.?b@L+ZQM~:NT@Z QW3@?VB ?]??*@ط?M?P ? Z*@?/95`?I{?R^@?JN?3P?G ?SWr?8LGsĠC ?rM?@5`?NP?Qi?<-K1W5A @V,?`?@?P>T`?B`3<?r`?=S?"| E O@IV ]־ Aii?>/\1ܜB Y?7?Bݙ&"9`|@1{" -~ @?J?F@PUv9 1{" '2RR}@H?@[!@(`U CU;`?!+`?$ֶ?=lg ?,r`N3@\@Q?R?d[?a?[c??EX`D! ?a&?YT@B0 HG 7rM?#$SNh@d + ?Ms@-7;Mـ?5A ?E!COSzPaƠEz,WEv9 S~(~\T[;@ed@T#C?L?GÅAA`5%?Rje?a|=?a2`?`@?b6?^k,?L6>?4 VA`,?~4RF`^h?5 ?T3 >[?T@@?YK?QN@?S ?B'ߠ?:倠?2,]12`?EA ?UA ? ST @D`'t?'?4ߓ@?P_?P`*1M@@AA`@u?`J H'C?B@?*]@AܜK`#@?QȬ@?@ Id@+ ?L}#`?@3@2je12`?&?-%&;OנCW?ZN?\ @DSs?2>?CG?2>RUv9 [B`2 OQ R7q943 M7X6YRL W'@Jm?L:?X?E?O'|@?N3@Y[(_Q@?N!@?R:S$Xc`7٭`?6w6?G@?#On`RjHc`1q `.?&i?M`?K|&?A??J?J?Or@8@]T$Z@L?4 @?3b@DwI@1,ޝ@7D2-`?NL?\?`?T,?G}?HU?E`???0 *]@@%4l_?14=?E[`$MMc ?:U ?W?2@`?Q`?RB@?S"G?`5`?S 8^ ?71N@?PX?' !"FG]@E`C?,b?2"v ?R ?RԠ6-־ ?I4ߓ@XɠLGfyQmF?F@ZFGx3@?P<?Mp`?Z?2je?N ?OB? DPR`DN TH`T9k`B?V> ?]lg F@V@?BX?KN? ܤ?0X(;'S L:4ERP?`I`J8@?" ?2| ?F?F9.I`@=ߚ?EI `Z)1@?6a?@z%@Z2 _-N<3t?`?7`?F`?G m?&V't[I2 -w@?#?!rE?D_?S`?Sc@?S??O{?H~ jm`W'@?(@?QH-?YP?S?-%E81 JAii>OR?@uARM/`?:N?1{" !N@GfP]X`C$?%/T?PRD?N>z,??95`?`k?_ ?Pz%@?Mc?CU;`?D0 ?\ʭ?Yo?/E?N@?a/@?Rj6H4?H} ?W?Tˣ?K a@?2Լ?2je?Gfy"#@R}@?3, ?UtFa!hRFM~ @T @,b?b@P>T`T4M$`H`?9?6?:ip?Bw?L:?DA QiiQ[ * ZW@Oq 8y/?R ?V]PZ?"`0X\c4?QU?:AA`?+h`?D<}#`TaLP`P`Լ:ǀK9 >Լ5 \ Z`Q/@PC$" ?@ `?C S_ |@?G}?@0PDc 0?B}@4J+h`?>88?=־ ? ?Wb ?\ܠ?P.`5QܜA@?"F VB6B ? hl =[Z`F4>[E*@D@B'  ?EW5 ?8 `1= Q^U@Sd`?Lb?dBG?^ ?Pz%@?;*`?.?I!?2?B?V> ?A2`GsĠ0 ?P?XZ?O?;|&?1ii?3?@?3sKq`QC?8^ ?4.W[,e@\&ذ2FIE@?,PԀ?3OLfLS2ݙ1?@x@?Pl`?E`?2a`?367@?Dc ?G5?3 G[ݠS-Z z%@?2,]?Um\?U H7T*rMCPQǠ?!ܜ?R?474@Q`B`?E?"RX^ _9Z'^?)>O?ENX?P?B?&@z,5l1``?13, JA, ?rE>88EPKGb!I`@U?&"?U:h@?Q2`?#PWILC?M%B`^?BԼ?^&`B?6i?S?Q 3@Kq`?Am?SU;`? hl 4D`?1E?%dH?O4 5 8pS@Q:N['1N@?1"`?JSI?Rje?2CG@VPl`F?\ ?`Q) ?N`?0HV PdK a@8Š?5A"`Z 4Z?['?T` 7 J5 ?R?4@?2@% @?I `XW@6e|?Oe`??n`𝗠?Iʀ?Q ?Fi ?Q:?X4`?TH`?Z ?\@?IqP ~?*@(@?"?C$*@V@IIo?"v?7f?Ruy?P AQO4 CY&?Q``?VX2?P@\@X,@+|&?ط5EW5 ViW@B`0|@!?%d?*]@?D ?Mߚ?-lg 4oO?B' ?E?:?GK?JE ?6@?;a?~PB QEdBa`>Լ?H%@?Z?]aS`?%`?-?`?FM`U?&?TL`K0ӠD?IT@?\N`?E*@F?T??Wn (LC@<B`;??w=?F9.6'tJ@?9z,?~ @?\Rf`V*`C@?H?P@:JҠ?L3?X?=o@@M`Zb*&`kHc`?Gj`w VM`?L ?P@'C `?Eq?B]?(c`?7?GsĠ?@qH?MQN@3??ᔀ?6nY?$~?7?94?)X@?F't?``?dt ?WZ`?I`?M ?82K @J9QN@UG :ǀ?Oi?CB6`+|&?=(`?D.W?P(,?A*@2 7CMcA"`?X?SzIH3H`W`D?8;'?F ?G}?%/Tje> :W@'C ?,-b .%@/95`ODkNmdC ?2F?O@?9j?!rE?-ـ?SG?_?3GO*@0-`?:E >C8 ?I`@?a ?N't?V"?VC?O?#?I€A?NH?`@?KX@0ހ?G ?NW<7fyQ/@Q`H_`?6't?Mp`-HQL Z?F`!q JtX0edbW >&`?Mlg ?X ?GA4=>*@?Hgv@4c ?fyER\J]K@t@?Sӂ?K X)nalA??" ?@ ?T{?b#@?]e?Cޖ`?9€?R@N ?N<AHt?A`??`X~@JJl`?H@?#U!R>?H3?`?Q)):rM2X?!D Y@[MV߀@ ?Gj ?GoV`z%@?1U?P1 ?R?R@?Jt?O\?Tl_#@F?I ?3OC, ?IX@?BrR8 ?R`?U-?PK@?3-Z"vC@Ud?" ?J?$%{TPa}Y`ahM`UPP7:*?F`ʕ`JJl`9`@>md?E*@?f.?_$ֶ?(@?Tw?Ox@~?Hgv7oV`^ J d`?Cf?@ ?1*@ ހQp2J?OB?Wb@Q\ ?`?A/@EI@Lޝ%d?R?I PT{M ?Q}Y`?MR0 R| 6'tIwc`?QQ `?4 2X-KJҠ4`?F"?$ 2a`?%?z%@R?)ʀ?=7;?M?L$=7;V Mo@+X@??Q \?co ?c@/?Mـ>Լ?G,?Ss?RP?\S ?gA ?.d?93H ?&> ;π' ?J d`?O# `NW<:E ?J8@?;`H #?I `C$~ W@)?On`?PT{?5A@14=?6S?Tg?Pz%@?I ?V*?M'?V͜R`?T` ?YT@1= O1`9 ?M0?SAUlH͠GGuD.W1rE/\?<}#`?7`?2?J@?F?@x@? 3H 't?<@?#$9 8D`?~?L(?SC`?Ed?2v?>?G?%`PO@=ـIz,?7?b<`?V?`@<@H<'C?H%@?Qp?)ʀD;RRP `?DL`?W&?=?+?Ckb?2Լ?>`?UU?Q>+πKsJKπRq `U`RG`?4?4)WXC??`?>׻SGX~@7^?P۟?ZSI?DQ)?7 ?Fa?D`?Sչ?R*&z,?6?X?L6>>R?AU?H@??e`?:@? ?5m\?V2?YB ] Vp?HU?J`7?:ܤ?UG ?:DM._ 6F@?Hk?Z ?Z4E?#ORР/@?Cչ? ?nY?2X?L3?_#?7x3] Q\ > W@[w@TK$% ?M ?2J7>dQ= 8 ?>Gj Q{" ?0qH?G]@?A?;,e@?;Oנ?CG4 @?T `?SE`?@:xBX@1`?*=!?7C ?GGu?P@?QM?5l;.!rE?"@?c` ZH G5 J @R@?5/T?P@?=H?!?5/T?G?Fi ?,2sBT`U81 ?&ذ@V;e 25:`?GF@TL`?!?E1EE CsQQm9E@.ހ?)hs?R@?P?R`?I!?0?EI€>w@> SS IRL ?K?Q:?`=7?v@?Nz?Xt>ԼYhs5 ?M ?03@?Լ?ArE?S@*+h`]?q ?@ `N@]@Gf?Oط?J倠B/@?%A ?KπQW>v@@nY?I?Lkj@?I?B`?3$~ ?4 M ?AA`UV"X`Zg9`B`?Hy/?U)?PL?7f*+h`QܜVM)`?M݀?S( ?E!K#F@?Sm?P(,6`?*rM?PB ?E?4?=ـ?M ?U?[@?S$E Q %?BF Yo?)3H ?YEdW6=uC% ?I ?F-0F@Mk 3?Fe?@J4E?/ ?QM?D?'? ?`?A/@?N88?nY9hs?$C}[_Y/ط?U`?&nYJ`#ޖ`#@>ڕ`?QǠ?CT.WTc?$~?F't? !@?P`?Zm?Iz,?2?2' AIRI*8c`?DH`?P?O ?HpS@?^ :ǀWYۧ DSHZ+Sr@~?S$?S??rEQˠZ:`^6`V߀??T?^I?W@@:]@I3H ?I ?J?6?XS`?[?2Լ?S %?C3@?Vi?` ?Y~:QUx?5A@?/@MD?L6>?b?A{" W Rf`?> ?6?r`?KR?Si+1q ]F]B' ?G}?Id@?DQ?O?8)nCL^2sB?P ?ag1?Ve|I@HpS@?H3kbZE ?BR?e@?QϠN[O" M_@<ܠ?T?Va9`J{)? >C})!?U|ޠ?aM?TT ?4l_?HHr?P7H^ jm`?A?$ ?:@?O?8gv4Q@hl M B?8ڪ@?4 ES-ZEm\??%@?9!?TO?[M?YB ?BO @?#t?`?3H V@1E?V)`T 7 +R?R?CG?> ?>I>z,Cx?@x@?[D1`S1:W@?Nހ?CC`~?D! ?Q>?E" ? ހ*+h`@~K@Eh@  ?6?Q ?F: ?.v@RAI?\n@?]c)3H U-`U$@HW@5[`6B 0ހ@[!@LbDJL ?= ?W m?J ?Q`?V}ۀE ?Z#$N DM[>'t%dC@C?@DZ`B`?X?g m?ZܤGx312`?W ?,QU?Ox@?dK?8D`_0X^׻Tw:ܤ?P?Tˣ?C&'t?3 *rM`"X7]@_րU?AE>l \ ?`?S?;`? ?A9?5/T*N z,?2R?6F@?Be?;6?/J?Q$?LfAq >Z?D OO\J1?H j?;sJ?;5A?0qH??C@?DD ?C$?Cn?;?P(,?`l`?$@?;a?D 3@5?7x3?H)n?LJ?WI?]`?V ?.A 6@"@Ih K}/T?E?F‰>w@R' I ?E%?C-Z3 O ]~ @]aS`Y4bW [h6@???5/T@ހF@-ـCGH͠5l? ?ND?UP*`T@:Ҡ?C`?PP?PnY_6@d)S +`Q.@T.W?< ?YIo?Vذ??6?BX?Zm?8L"Լ?(^ Rea A`W/ /'|@?@[!@?M7;?;`D_@M`?&> ?3t?`?U@?U=@?CG?N@@6?CG?)?`?E?B>^][q?5I@P*dd|@?`?NW<?rE?C?F?&?4 ?M־ ?S?U$@?Kπ?,?9 c`P`?)!?Uh@z,=7;?RsBQC?T @?Z^\?0-`!`?ܤ?6?Nq`?U@?P?O ?9!?R Y?CGDV8@VHTA8?<@?TXo`?Vq@?Oq ?A7`P?P?4 @LJRn@>-`?6@?D?@`/n`N4?7RW:*I `Z}`Ud@?KN?R? hl ?=0?R@?!ܜ^d`V͜'T?A&?E%?&i `?(`?@_?PE ?LDS`b@]6B J[@Y?@qH?I I U=@F?%I`?Av?(@9ۧ QiiX So B? ?Mk ?SC ?I`>NP!?B?T ?[M?I\@1-%??A?G AMSS@?J@?Y~A``E?Q ?rMX[`>A ?>%@0۟A`` :@'?E?Q8?M@@?L6>?D-W\-b 0 ?C:$ֶ?> ?"je\`[0Ӡ?Xc`?bꕿ`Mc?*@?@T?F=@?R ?@X&@?@[!@?]?LPԀDNR@S@Uh(?M jm`YRL S`GX)nAE?_ `?^Ys@]݀Va/\?PA ?WTs ?4 ?Y4?1#P?5A@HUH?M~ @?H2K &?A`?Q5 ]7;d `Z? ?E`?!ܜ?=ـ?WC ?M8͠>b@?K ?D)?Fa?U@?Y?6't`elD Wm@[sJN-`H@RD?3 ?;.HŠT,-b ?8?,ޝ?6@?74@C:CjF`J>F?P?U?I!8D`P۟D0 ?6?Vu@?S$QYc}FJ ?9ʀG1N@3?W`?Rv>ڕ`2,]K@WUҀT#CRĀLUBDc/\ z%@L(E?>@Z"Y7`G}LSXD! ?;π60Q`>%@?S?XF; ?#@?[*?[?7:*)!C@Q`-%?R| ?9`?*@%v9 K}^>OA?:@05`Yۧ B?G5Hy/W?H2K ?[w@?9E@F?BN8[`?PP@?L@'fy?E?^W<?Ud?M?<ޝS-ZPRD?Hc`?Cj?>R@?$H`JˀN{`KC`?3ޖ`?1`IqP  ?_?R5:`L V?Y ?`hl ?b̠?cr@?WY.?2vKSӂ8[`jm`C@M`82K BXw@?J=!?B+ &>^ ?7^>QJAU`@S |@?9V`?NP?Q 3@WÅ\@T4Jˀ4?G?DW dʇ`S<ޝNmd7;?OJ?87?-~ @?LW?474@Co Nl Y\@Y@D)`)X@~QWJ@:rM?367@> :@L @Z/֠W&\@?M@@?Frv@:?"J?TL`?b?] ߠWf\`XRԼ@RmG Qu XH ?=0?LS?5`?H} ?Zv` ^`?E?N" ?G}?T?XO6F@X`o?TXo`?JQ ?@3@?I?I`@?M0?)3H WNQH-?GZ`?M?Q\ ?_.!?HUNq`-`?P1`?P?B<+YB?T?:W@Tߓ@)?Tg@?J`?A/@?4L`E`F=@?A?V9?P|\`?FC?9<rM<-b ?A= ?G71``?v9 ?V;e ?A9\r``gPFiE*@P`"Լ?JA?T?\:?OطWh(@bVJ@ Gfy7 :+h`TQP?:]@?E`? jm`?C?B0 M3@?_5?\ @?3չ? ހ7TJ-?'t?@L?9<?L?HZ+!Z?E<`?AԼ?`???8BAu ?HU?:+h`]Ta@$o??`/n`8y/Cޖ`WZ=`Gb? ?94?$ֶDR7qS, 4ߓ@?5I@??X3|@SD_?6aCX%/T?H#5Lr`KV]0@ahM`B>?S `?Pz%@*+h` ?BO CfW74H`1MU 3@?ZE`f|a>#?HHr?Lkj@?N%@?$Z$Z?Jv`?FS( b@W}8Š#@0qH? Mk O "5:`?G@?@3@V?@ ?:N/\!``?_ ?I P!?$o?Oi?&?A?F12`?-`?V?P9?6@?:x?)X@'C ?z%@?P?\?RZ@?3?Eh?*rM` `ac  8ڪ@cP`w BrC:H??`?t@B5v9 %`M ?*1?Z`? `ƀkgX%@?Dp?K?GsĠ?'@YbNF?:`,=@@>𝗠^"5:`?)V`3}Qe`Or@HG OᔀQYLS9ۧ -F9.?#j?TOI `f>KKi`?E?9!?;W [ "#@?;`?1*@?+ ?#O?Dg?FM`?S@?W_`?D@?B>?Cb@Kjm`Q?JJl`?H~Tߓ@XKA4=BK BvI?%`?W?\ӊ ?G &?3s2U ^?J?#?=(`?A\ C=ـ?:ǀ,r`W5V@-`!= T @Q?#-Z?0M`?!N@?G?8͠L;?]0@?b@N ?ܤT! K>D HgvI J4?2X,-b Qg1N`??G?D%?C:?Ox@?M%?1q @ P?P|@DM[?$ֶ>Z?5%?Xϖ?Y5@?L:?C?'|@Yf<`QT%i`gT+h`?S>v@KπF]S/X@' ?G? ?1ii?;,e@?QL ?B`> ?@@x@M$`1 5L`&?9z,367@RFW]@C3@??q G&bJF@U ?e`L@2v%/TY9``VJ?ܤ?( `> ?)`?N%@?CK?Lޝ?LN@@A= ?AQ"| C@?QI?\ ?9€CM0SGVXbРE`?DL`?Kπ?J1?P?L@C$~ R~V@?Ba`?S(`?581 ?@?@x@5/TGfyP@QA`;.?> ?OBY3H K*?K?OB?>88?GC?5P%Rm??" ?SG> P!V [U-BA`B`;aF@M B9?7٭`?Q>?9X@PE T@D74@A= C1?/?Pl?GY.?5`?82K ~-K?D?V9?]k ?[#?%A A\ ?BX?5V@PB ?Q))?T@@DWoV` ?Q2`?Pc?U ?V?+jm`j?RX?UY??+X@D) ?Iۧ ?Hgv?H`?`W΀?bF?BT>NdXkR>jm`*@JNIBԼI`LPT{>?1N@DVX2'|@?/n`L}#`L@9V`?)!?Ys@?PhXϖYX@?!ܜ0M ?$D`?K`?@ ?CjN@Fe|NPVp?G|@?F‰E`>ꕿ`?_ ?^@j&\@?Q?0<@RN@M`?/\?:9FNl ?Em\?T9k`?C1>*@BT>.ހ?JA?F; I!)< #Hy/L:NA FFx?n`I`@JE ? ?H ?FX2?0z%@?> ?6@?4L`>@?&nYZT@[:@G? ?*`?-%^ ?`??5%?2O 4EqJO`?c`?Rq `?@3 ?]H?d?QA`?@ ?P?H2K 1+`5I@?Q:?\?R?S?Y?$)Ms@? ?Q?A9!9ۧ ?; ?D;!`? 6?T@?W+`?H;'?>l ?%05`&6)ʀ?3?*@R6`[#?C}?e ?ElVIBa`ԼH^ T @[7yFذ?[π?Q9](`\#? OEE*@@?2,]?Oط?'T!q ?A`?,ޝ?F?`?=` {Q5?Y]_?Yo)<?*@?N@KZ `{@WJS@> ?T74@? @6ذ?Q`?T?F?Sd`?Sj`?;??`NX(@6@?M־ %@OC ?b@A ??H3?E81 ?I.?N&`?95V?I<?2RQm@M(`?&"?)E@2?5?WN?Q&@Kw@^dK>?IT@?LR)V`H``SN?Iۧ )VS?@ `?^̧@?Q?4?!*@?2?I_?QC?Q?Cb@%@?B Y?Tc^ [;@R@?#O?/q =w@*`?Je ?7TSWz@E<` ??B?P?Kjm`?CC ?2n4D`BsB ?Fi ?L:ERXpS@?K?eF?@W}LG/n`?~?"ԼE 3kb?T @?"| `V+ ? ?74@:倠G?8?HCV'?X ?OI?[V}?Y DgbJS[ ?FX2?+FS73-Z?? LLf@M(LOAm?CL^7Av?I ?>&`?*@?S`?\?KX@-ـA`E`Q0V?K.$FS?O?N`D! ?VZi ?X?LUB#jW|@`p- Sޖ`$l_Dg`\ER# ?9!?C(`rE?:?V ?H@S^ZA`?(L?`*d?XpS@? ?5 ?BNI?PK@ _u`Q`` 5m\AiiG;`?B?CPܤ?@1`?R9?C S`bRXk.?(`@c=c?Rw?Z ?0 I `C@?&?@z%@=P@?0*d?Ke +X@N` I?N@?Q@?B| 8 ?AU?R#@; Rݙ8 `? `?B' ?P@?Kݠ?SWr?Uk%`?ط[V2F?T?X" ?QU?3j?2n?Qܜ`-?d-<?Wr ?ZQ?C@Ts XQO@B,]?#O@X=^E" ?> =~ @?>88?OABNAu ?!ܜRO Pހ?B ?-Z9ʀ?8 ?R| ?R̠?2Լ>%@@_KC`?;|&*@G ?b@$Z?4l_!?Cj?O#?O0X?C67@?AA`?U?S+#/ @[!@?KKi`?[@?S ?'??[jm`?d@?:倠WV?%@;F`?5v9 ?7:*?FFx?G !``ZdyPM`?[`?b?D D?A@?0VJ ?F?0M`BBT@Va 0?0z%@?%v9 9!C`?E?LtF?'t?WE>?a6t?/@8?60Q`:ǀ>?@ ?R;?YX@?S?Cn?HZ+; T?L?a?69.Mlg B Y*@>(c`?6\@?Jܤ?-Z?;ߠ?T\ݠ?=w@3ޖ`?>?AI4o0> ?Iw?[?Nd?4~?EUPMV?/@?2F?4%{"| *@9/q A@[@;X@?d1`?f`?^@?[c?N?F"?PB ? Hc`%R?O@?]7;?OLQ@4Q<+; ? 3H Q\`Ky?;sJ?E`?Qm?T>R@X7D G&Z5Y`W],``1`[V}+`?V0Q`?Qq ?NL?XG?Lܠ6SD;'t?QǠ?U+`[I2 gFf:`I8?1+`QmW``#@U$@_ ?P|\`?C#@3OP `J`?4 ?BO ?1{" 8^ J @? z%@?=`?P?XL?!?J?%@W T`?+5A?B?3$'t?Eq?`ܻ@?R@3?R/@?an?:@E`-2H?>'t?]4?^CL@ܜ7@?H ?Dy?HW@?YG8`?> Q?0X? ?`OIK`?Aii?7oV`<`*@AWXWn H9!8y/0?BB@?F‰71N@5[`?'fy-w@?A= ?Zx?H<?.v@?E`?@)`?T#C?_E? YGPR`?M?V `?#TE!?v9 ;D0 ?1= ?&iB6`L$*@?Nz?V?A{" Xe?`\<A;'MQ`Ts Lkj@4H`PckbQU?W?ZҠ?I`?O" ?K0Ӡ?.𝗠?8@?Uq?Rw3MMc D?- ?U`)E@icL^>*@"| JSI5&w?P`?# `D2A:]@?(@?I_?[?Z@?Zd?@L?U3?\N`?,PԀA@ 61ܜF\@?A?d/s ?a? D>^ ?L ?I?QϠ?V1 S?5 ?Q1;?K?E?/\?C$~ ?5PUhHŠCVMLf?"#@?A{" .ހ?'fy?YD?]?XJ?4W5U׳@%9?Q2`?d?DoaaY?q ?:@;E/T?H3?EJ`A@?<@?5 ?(pS@b@8͠ N?BF?Mg?B@C}Qy 3G?87?> ?,W?2/@?Q- ?:N][R?CV?Sc@?FJ ?D@?C`?C?D2?>?=KE?$?Sр?_?c?J5R!J ?K a@3s#b@?N@?);>ީ>Զ?6f&`?R- ?QE??+?L|?CH``3W^J%?SE@?4FDB?"?-2?S}`?PLؠf c???A]?:`?k Զ=T DU2:_+`PxI`Sڊc?@?Bu?>Ja`\*D?Jc?SC ?N,?Gʀ?PL?H3>??\?N@4Ḯ?8?FA ?E ?R˭`?4iK!?<ǀA ~Th["\:n`?:&O~`SQ?GDv?P)*dG?E@CmJ:idFzV`Q[ d`_`YHe&`V?@3K?2WRwZGV?F?;JB`Co@Ԡ?&?B??vbAL H?z ?44 Ib1@\ZJE?! ?Ds܀?"|v`Q|@a bI9N?T`?UH]`PU ?1& >c@5\e`?E=`?S|`?"4C7`&[;Y`Զ)2f?0Y`?Pc?9ڠXCL?X&?UG6x #`?8e7H>SX8`?0JJ?R`?>1@Cj5 ?%,:uEb?@H?IUj`?I'k?I4`?+?K@@?T\@?S*9?KT{?S9?LrEBP JZ\B @Y &| ?>- ?H?USs?R?U?Y^\?Bt@?&a ?; ?$`I?8?B?:?Tˀ?QB(@)@?2?V}?I'k=7SdP`?! ~?3SR`NJ?@c!РT"+C?AF@C5@PW@z L:`?R?ZDV?'Q=`V S?+C?C"?4R`Mb_"@L`?E?UǸ@?Pq-%S R%SCVq K`A&F֕A^@6A`?K̔?W9?FD@Ap'@RIMj ?@^?_w?Ws`:} T̀0+?Oa`?F͠% 6۱;?@>>b$SS N6@Cڊ3 Cl?!g2<byDX@?Y׼?W=?3 ?I)1ɗDP@1{Ab7uh|1? ??2]`O~ Thǀ?96`?9?'I Q("?F}%?U@?Z-?Z?`lɠ?PP SOFLD`[K ?EnH???J$e?Y ?O9?S?c!G?SYA_`=l զ@??I3`F\`?P@?PFE$qN`?_`?_a?JJOa`,V@?L ?? @Lؠ?) T@^^8jS`?A ?r=?2\ ?(ީCo?2:?S?Svb`9 [?0?C]`ES6>xA`?Oᵀ?2|v`?%@?I ?0踠DZN?O;Pb? T ?>9`?Gc ?Y1T `DL|?5WI ?K[.l? ?N?E*?O'`?P @L?a2/?XKS? ?Kzπ-aTV]`?WA`?W,QKQ^?V?`,?.HàJJ?PqQ[6 (TJD>$1_`!?5{`?D ?Q)`?C `CV`1%?O ?:W@\9?PW@?LG<?M`?P2?G?S?\`?T ?@,J*@b5`P?Y_?[?Qd?RA[cE@E)?Xk ?4K@?S'`?L?FQ ?T`?G Qp'@D`?SC?/T0M?'V?N>? ?5`?V[?Fu{`?3 ?Q?GGuC,Ǡ>NP٠?@G@?R`Q{_n d!7?T333ȧ?Y ?Wf?KD?P ?6y@?w6 %~?n`Q`\-V >F ?['?`Z?Q ?Pv@?U ?QB(@?P?l\cVm?O?TޠF ]_ `G?K+`S aX`R?`?a >CS?6y@?P ?%`+(?> A_``·`O~ ?F&D@3M?;xA`?& (Uk`Q. 1r`??@?``?WTˀZ `?9`Ed`"@0E. W9We.M?FQ ?P,?5O(`U E+8K`?+n?Yg?]@?B#?@,?Q2r=S|UBW`? ԶB?!?L#v@?Bb?r=?So?[Zހ?)9ڠ3 RԟRRL!?{РPb M|n@?J?=b?OD ?a?R΀ Զ???B? 4Id`<@L@UnH'?Rg`?Zt?Sr?J~@?Tw?X?Q?C6p_UH`?D`?QB(@'< ^uWM`?N,?S<EB8 9 ?[?^\?;\)2&z@dG@? O^?NÃ@?I[ Q[?:J?\ 9 UF` .fV~O"@>bi?24?`O?Ub@X]S5@?UNW?R]`Ib1@A% ?NH`?G@! `?!?`E.f?:Ϛ<5Y`4{?D?<+ ? x!γ@J`B΀?A?2ݐB`)K?3: f MV`?Ak "@Dm`=@00?9i`?C K#`X`@*`??Br=?K?EY@?2;Q%~R:WW[ Pq<(y`B`??}?Xn?#H`Di?#g`BX [> V!(P@@ E@Of?OsԀ?Ub?Rg`?TZNb[bY/C<*( 3 7#>*9?(q&A??@?Q@?H `2m!`?4M ?B<?(R@>lM6֕?JI@?VbQ ?UJ@?6Q Vr@U?Rnh?a ?K?0?J)@?Fh?:?A@+ Yg\@Cr?B?:n`6?%g?B%P_ZFH5.>H`? @?>?Pe ?^}=?IWNH`?#S ?^?NߟF:C4r ?4??g ?;Y`?L9?L7?/'?5›E?;?V?F?c?à(e7>{6 ?#?GSˀ??@0JJ? 5a?'" ?M ?M?5u1zG0@0?8 AϠ[}]Q>$< BW?O^?We?RHE@Sg`a3vJ)@??W?;s%? @?& (?; ?I@?=S>H`A@5 OsԀO`@踠8e7QN[cD?P`?Y ?T@@?>HP>?9 ?U?E?!|?:@`? *?0`Q=`UYT#@EE bB@@QuCV^\\W``'G?<+ ?";?, ?K[?[S4?Z? T AN ?Hզ@?S@1RK WZ/Q@??L?J?Fz?B?"Bar`ZX?K@?ZMH@?8@?+?@?PB?M?0+( s?,;1_`7-w ?I?R`?Cq?K#?T?P@?GN@?C*9?Cŀ?Cr(O,G@5 ?..@!I?7e?e)?b!? F?>k Sv`X^X5JJ?GSˀ?@p?,PZDVBu`9ZAGD?_`$M?M(? Dl2?JҠ?Lr' ?A !f`_,G?R@?B4WA?M3?2;G-w G0@?2@?X@?NSa[22@?$3L(T& ?Cp=2[QN?3l?I@?@c ?4@?;x9'k?&Q /@M`*O`?3M-/`?vb?A$9'kL&`778,@4I?X ?Rm!`?Kkz?R ?G B?U*@%Ԡ?[j?YK?(e7?*E?L;?M?T1?^?\@ ?N'@?$qN`(P?*9?=4?1<ǀ ?Rp?Dܡ@PKLt Dn@Vȇ?<> ?A`?7u?%`?%@) "?"?C?G5!?B: ?)nO}`I.?B>Ec?E ?LqN`?B* 5@dp\r?Sz?HVkL?x L vN$@?J ?@pL&`O?8m?M&=CB?N_?\zW?0JJOE@9@ ?7?0 ?6?QB(@?B?GV?/\0= W0?.?;?@?I?T`P;"=%O?'?B`?V@?T ?/CG`)J ?Ks%?R@?#g`DJ(m?Ks%Tw+谀?$ HjS`M $@?E?X?U?;"?J ?X~ĠZ``Ud?#p7GPe ?`?M]`?,Ɏ?2 `?Xn ?S`J `Zp!+(?TqN`?BG@ѹ ?sE?+ ?S5?Sŀ?*@?1D?3?5{`?9g@1T `JAbNk VA9ـ@LW:?K?XG ??a`?ܙ ?";?:@`?X|?[?In?C `?A? 4 9(y`WO`^f/vb?A?E?>I?5S4YL4@D`;0?5?HU?M* ?H,?"|v`Br=G * ?> ?S ?[ ?Lu;?4?R4?W ?-m@EG?Bev?Q?H `?9 ?F?XÃ@?K!2/̀\7S>biX @_@<8?F!(?2#GL! M?@G@?Yh?C 6f&`?P5 V@N@aILVR)j #?0U6aeMwR?&Q 83? ZKxA`Rݐ$)>M%B#?@ ?$@9>X0`- ?LG<?QuC?DM`?R2??(b\?B?UD?Jf?J)?= F.I?X ?XR@? h`1D?0?P,?ZAȀ?:( `EѠb&4/?A `c@4 3`M ][\% ?Q^@?L:u?<9?I@?T{?U?D`GKz??a`?I/?C?Zɀ?YZ`?4 ?6?)i`T`SB?0?L?S?S ?L?Q|@?0cS@4W?P?,ǀ Զ?O(`?M@?+$@E*;?D?DZNEW%̠FD?:Ϛ>U7XV@/>x ?5?Pg`?[~?Zo, cUb xMV\ ? ?R?(USn`??M?UG?6?4>3 9i`;\OqF@Gr`9UM`T!6TvdnZ7@??Ac``?PV?E›J{G XQ@>.R- 5Ԡ?Pր?+H€9t`'< ?=wR?` ?cq"?V1 ?U)J ?JIcL??P,?U޷?RiL ?$@UqPG@?:@?G @?*x5p<@?Qߠ?eN`?S SK?Ei,@?C7`9 Q>SQ&Iy0R%V}%&A?Qr`?FB` qN`.ȟE @@W@?'< ݈?F@?Lr`, W?m?R`? '=@[e X@B1+(?@?L`?1 `?>.@?:n`Nf`S_No`?>J?G ?I9N?)2>ͻJaC?γ@?6B` 9BGج]`?BCaY@YY5p0@?Q@?\.?Ua (ZsYQ ,3`O|@?R@?W`?T&@?&`?S3+?\@?B?<?Q?C?DZN?R#??)?Eb@?U ?x >q?K&| ?1DS<C?+wxA`?,:u?M?E{`FB Q4`? }e?V@IJ`?2|v`?S  ?V?T0%@?<&`?G" ?3Cqc@?;JB`SOF>@?KY`?R#?A^D 8lH5$1??R`?P$?D@?a%?SS =`?I?Q|@4l2SV`TO? ;?Hy`?& A@`ILGs$'U$-W*`?x >?9䃀R g X?[?,0= @S`F$@@05E 2D>?;n?TeΠ?M(?$):ԶDF^{PFY_?ܙ t@<+ 3 @c Ku NA0Q)`'?QР?^`·`]J F ?Dm`?C?L?I?CS ?Ls ?Ed`?7:@?J8?6T`W,?)'k?W9?Sl?D/`?R?R?2?Q?c?V@?9'k?Q[?STc ?Vo?^bi?M?B `?]m@?Y'k?CË@?Q ?GtB`@Y`?<> ?7<`7@]`?N?9h@.?M* ?FTC@S%?d ?b8?@Lؠ ݈D`N,&?(q%`?$`?(?2?!T `37` xA`?@/?r=?)ڠ?_?c?I]?B?V?L?Ii`?ZR?JPUI~M;@@?B\?Y?Q AuCXQQ?(?B9 =r5??3`?@Eՠ#F_`X@A@?-ހ?Q^@?72`I ?3ȧ?T`?:D^?!I?@G@?PL?N`?PC?Sx)>W_naI׼?Sљ ?IKMm@0c *9F&D@_ VR_?X 9 ?]iD <Xg@B%?:id?C?1 `49 ?RK ?S9?/?;w?BNP]³9 ?YG\?`"?R?,8Ii۠TqN`?ALa?d@?RjL:uAT `?F ?15a?Dޠ?1F@?/M?GL! ?F ?7?5WI AR!+(?M%?GV?8P ?A$?@'?'2`?XA?BW/C ?_J?W,0?D1l@?N?OD?R?Tj? ?2?2΀0)?!= L^<]`?@G@?I ?\"/ ?\d ?<|?1C?4P?JO`?Ww?MP?3?:&?:F?2|v`?B-?`?J_+`?>0@E޷4/?8t?1^@@k# ?N@?@aI9 ?`?6,m7e)i`?B%?T xA`T/`V@?F[?#]T??A`?Uk`?U*@BYR{/@??d?8PȠUw: Ts܀!Р?Y}?>ͻ[@Q@?Kn?T{@0+_ʶRu`?YD`?c `?O{D/VLR|v`:( 0:DM =P4 b@S`?E?D|?@& ?[ ?b?Zq>TT[@?. ?Y5y`?DK@QEW'RƑ L:u@cN Z:S> @W b W`?1`?O@?Nv@?D>C\E\@y0?T?E^??Ql@?T`?2@?I?Wr`?Qm@?W ?Xm$ὀܙ ?J\@?!? :*@CË@T *E?PXX`?HXp@?4`?sC`PHoo4$?զ@?F`?^V@?_?OM?H@?OE@?@Y`?h|"@3?d`?K?C6BXG?7?F?1?*( ? @?C?35@? T ?5?;@@Qp`]_`KBP5 ZPA{ ?(/@?[#?U>eT@+@?I?@/?8?/@R`^ H?/l*?'[vz Cr_gѥ a7:?7?3?6u{`?H?U*?Syp?0? ?Lk?Sd?L!@?Ds܀?$PNWG0@3v`XЉf8'`]?@?:~@QB(@]<@NFM@9 :!׀?3?4)Z8@h7۠]IS!B( 9 Dj ?Gӏ?`9?J 3?WM`?X*ck ?CpA^@ǀ?K`?Gw&?vb?'" ?:?Tmy ?UY@/Pc 0 &MNo`N18`?$`RB`?O?M4%@?8?U?Pc ?GQ=`?+@GL! 2h ?W-?_^ ?C;s%γ@?E!?E~cK?:;e ?5B6# ;xV Q@?.K5 aX; `V2T&p_R.`b`?CG`?Ec@5@Զ?'G?@..?Z8?N6@H?&p_?\> ?KE&HUB??3` (V 5=`?RƑ 0`Y5M`?Hy`?Bt@?@/@?4M Զ?9T"`\-\V@PJJ:} ?^?:?0`?*9?J_+`?_,G?VO&??3?IҠ`A#~`V+`>鍢?J f D@\J3?M4?S?9@?$ ?#g`LZT >f?2 `Q{ Q^@?F@?Q@Q+(aw'?R>L ?V?\Cg@s+:`?0T HV`> ?Qz?Hզ@?(q?Bo?W}@?^'@?K̔O@Nj?J?N6@A#~`NC*O` M4VZL-J)@P81ɗ?5 ?8,?N?Hn BYA(?PB?Y?HI@?"@?R- ?Vr@? /@Hզ@?h|?C =]`KT{=7Iv? D`?\B @?F#@KZ` 1,`G! `H`+N- ?(O^?+:`?878 ?5 ?Tl2?N`E4vj?J.@?*H`@?oo9O֠?Bu`?]A U!?#>D@!? ?B=@?P?U$>3 a^ZBI[ ?8?O'+?A`2%#p?C?PG?4j?B ?4ܡ@[>?Az ?@٠5~0^?B`?2 x%f?L`?a\Y?Y`D@^Q@H?; R@]%?KW @?2;?(2 Kf^ S 9?X@?[>@F?3bq ?E{`?@Ds܀>;?V$@?JaJ6HOEՀa`?9@?!&D. Ii۠1@@ff@Y\"/ ؀?No/?4ׄ> ?2]`?$`4M C@_`?UF`?X€?_`;!_?G ?D`KL?(e7?oo?&\?T?E}1& ?J@`?T?6D? F#@_}`T3 7W? H`?5f-No`xA`*1,`R@I/>Զ;LVL`NJϚ)'k?QGD?T͠:FIJ`?D`0\qf@K#$?{?=]`. OR`?0G@?Ss@?RX?U?.PQ:`?E;-@? 2%A7>M?6??1I0`?0}e?>.@?9 ?Q?PK<|U%tQ`B|v`4 $???C2m!`6L?7?2I[ >qN`4Hc@?I9N3XS+B2[1r`<OI : f 3S?U @?V6`HooPH?!g?)g@qN`x ?@?R* ?/C Eg>&| ?@@?./M?-b?%E?3?P ?L2@J f  e91 ?S ֠?Mb?5ՠ?*1,`?2h ?" @D/HSS?1+(>ީWWT ^)nO 9J?I9N?IH?!РxA`B#KY`JJ?=g ("h Bh UDHk?ǀ99PNT `CĀNנMenCr?@s- ?HR5ԠC6@:}`NנRX C1?&| (?E?]V?9,So-T ?/C ?< Hg@CH`?R`?S}`?'k?2;D]3)?GGM`R&3 )2?*~@?F0}?E ?3% Pë@Y`#m?? ;谀Lp IҠ`GN@H78 MD=4Ho =2AɗZV.  ?/@?J*@?]`N,Q^@H"&x B@WAJb`G?? ?(Z`P ?1C?Z8?MP`? $\ ?(?H @k ?1|? xPS<^ߟSkb?JD?^?M~9y05G ?K?V&D@?0D>3 B-?`Uw: a Y"O NqN"/ ?S?< ?\Ҁ?\R@?y0h|?FIJ`?4E`H`F@ ?F ?WV?]r5?D`3v`?B?H ?%c@?3lAРRk`?1D?%ԠP0G@>CZ.@@?ERƑ SQ?-?0c??BD>?RwZ?HR<@\?h|?8>k ,?? ?Lk?AMD6\P. T`C9?${c@U QV?0H`?@)?D`?>X0`HmU<@O~ B?2: ? O|3mW T "@%3l?R`?[D?H `? /@@*`@ǀ?,V@Co7VD?.ȟ?NJ@xI`M5~IU}J*@"]`-+ ?P:`?`ᱠ?R N@E OD?2?I)??>+?(q&P2Nj0@K@K?O֠?S ..@?{9d`E޷?#S ?H*9$>3 ?Fy?PV?$PIb1@?7?d ?c?O@?@ԠV9n^g`O~ ?J ?U#H`?J&?4$@05d`V@?9?QR`?QV?Gz ?#H`?;h`?/.? s?Eg7Ym0h`?'L $@?`J ? @?I 5a??Sљ ?F}B?39?R΀?R΀? (?F?d ?U2;G^@ ?V$@?am@?a ~?>/MK DL@! ~?CË@?HQ@6#@;#?EY@?L7?D`>V@NE}0dIPN;z g@Ap'@?!QXAb?3g`?C9?>g%`??C7@>QB(@ :_+`V^=T ?V@I 84?G!5aWI?E ?(SֵEO?Sm?X.F?V@?AH쥠LI?Tʾ ?Zcg@DZNM P)`?BF?U[`?0 ?=IS?Yv?UU`?.qN`?G@?F?F?B* ?;?0}e?!z?0d/'E3+!N[?Lk8à4@?02|v`C?10E ?;:`?XP ?[?(4?@?R?O,G?F(Ҁ?dW@?qE?_qF@=?<Ϋ@?Syp?MO`?S`?Q$?D)?9@?#S ?D ?P0R@+w?I42@?Az;nK 5{`?T# ?[LЀOCM(F ?L R`XQ?B?S.?@D1?C?SL:JN?Cv`?Sm?G?G?R$M; ?U ?RO:E?Z; \T$?DZN?QN?M`?V?EJW7]% A`-%Fx0? h`LrS`?6?V@?RiL ?H9@D`<9?HK`?G`Ab?0T ?VKQ?72`=l qN`?:`?C?6G|` ?2, N[oO?@?XP ?QQ}@?#?P?M"/, ?5)J ?T?P?F?H@?N,?IJ?B y?E+@?5\e`/@5Q`X?!&?P ?O ?B @E. S>- ?S|`?F}%SGh<?PT?Ww?DM?0+?\b@?hw ?WϺ?@n?W?5\*`TD?-݈?A ?0+?f?A ?H`xA` JJ?I?8 9 EbH?C?[?c/`?R@F ?@K?T`^\`Oř?F5@?U)?D?HK`?YY??H2D !B?RB?XJb`?Z@?\c?N,E!P@?.% ?Sֵ?EF`0H`-b?gV@?<5Y`?Q?5Ǹ@?V?Xw ?TW?Z@c@Dh?C@?#39ٍ2:RSEb@?I ?V`?Q[?>@?;@?I2]`Y/-?O.I)^!?B ?1 `?"I[ ?)?5g?1m ?B?X?T7?, 4g?W?Ig0K?@?0xI`?Ml ?6x ?O_c ?`l& ?Wdg4qN`^WZ/?1y7G`Pu@?O?O$`֕E @ 8?L?Mm`?X ?aНdE[Zހk 4L@@?γ@?;?"1$${?ǀ?@??3`?JI?*n`+0?5G ?G?CU@?G``?P)?N'@WD@?"?I ?L> ?I2?XO~?VKQ1z<?J?8K:@`?R\`?]P?L> GL v?E?X?L5Y`?G?YUj`?]A?Y?W> ?AI??TR`?Q U-`a|J# ?Xk?EGG1& ?5)E+ EG?KѠ?G(Z? ;?2΀?7GH@^a!F ?D`PPeaXQ@E?7(Z?N-?R ?5\e`?2 `?^.?`3=ߠWٍ9,Z805 ?Wo`?FmK' P ?9؀?W6h?Cyp$R`?LW@?_ᵀ?U2:H @ :&?B#?Tv?V9n?`J?a?Tz@?(MN`?+谀24[#`Q/MEgV䣀XSSP*&?AB?Xf~ ?_@@?0@T R@?J)0@9?Gr?AN *n`?:dG?G(Z7:@Cr?FY_?Qb8m\[3BH2?@@?P=?@?vb?4$?F ?>g?g`?( ?K@?CFU@=/`?2h ?T7@c*9_7Ǡf?X ?XSS?.v@7?F?[p?T[@?PS<?[f^ ?Y؀?LG<?Q4`?UK`?Qb`?R ?D`ITj{`?NÃ@( \ҀO@?9@2S?]`?[5 ?>Ã@ZV(ҀF`<|2΀Qk S{4:xZFQ`x ? ?: ?G>鍢'?S?WQT bbHAp0SH`Bu?QZn?S9AA`_Q+(??{ET?R`?b@?L> Vb@[`T{@Jf?6?Xр?dq?i!?`?H?EJ?96`R@?4 ?CA9?$i?OC ?13*9?ZN@?d\9?Fz. ?No`:}`QSVU`ThJԶ"Y?<?AΩ497u?< ?8P N< ?J? ?)؀?X?${W QV6T)?3% ";Y OGج?0`??/?2;AM5 6 (r=*`?3>?=|n@KTw?%?I/?@?g?Oa?Wu?A[Qp`Z ZY ;JB`?Q^@?J:}`QXW) [߾Y@R»C/U?C?d?l?`9?Gs`?P2?Oʶ?0c@? ?Ay?P" @`_(*O`?A[5R`ZG1,`% 3pm?$ὀ??DqN`?B΀?@`?B PS<Sߧ UOTeΠ>b?QE?=ƀ4WF Q~5 Gr`6F+`D ?f?;:`?3?.ȟ#>Gӏ?M-7@?d+?Uk`?DL@?QE C"* M[6 I]?1Y'J@`U? c,YI@?.f?)2?, ?"r=FA XP S^4`<H3??A`?S4r ?BX:E:, :-A^@,@0& RBao^"?#?P]tDPT`?24?H%1C,mLǀB?S&?^Ã@?I?8Z`?PAX?OH`?0:@CË@?Ja?a?KTR ?J ?Z8@?@1?/l*?? 0K!_qN`?Pѹ ?3QbN]LN7?7 ?EB?*@?Ug ?^ߟ?3RFA?{1 `,&`?C?l? ?FL?M@L*?Fx ?=ߠ?Z?72`-/`Q@JJ%{`Hà$3?A!1γ@? `1wC@L YɮZ}`?l*?NN@?VB` ?H@?%gHQU޷?F@?eY@?SG` (?*n`@ PHO}VG|` (?[?C*9B 1^D JCQ 1@7``Q$`P? ;W`]TE* A@UmLV? ?JE?Q:}>]wRVJ YcUWJ@?1?.A]F͠?= ?O@7E@?K\?Rm!`?0 ?H `?UM`?#mDHka`>gR/vb?Ḯ?F ?AR[`>xA`?^g`?U,ǀD{?8n?V ?T@?Ss@?SC ?5\e`D`>K?!+(?lLY[L5Y`?B?W @?V;? !gGc 3SAAY'?QB?W`?$\ '[v!? (?=?Dὀ?Nq@,H 9 ?4P?@\-05 D)-T ?A`?D)>x )y0?|D@?B-?`?QY'*IGj3?[?Ku ?O\$9_GA`XрV$@/a`?S?_6?T>3 ?CL8Vq &Q ?D@D Ng` h`<?Hc:NC?9?_S ?I9@:B@鍢?F ;"Iـ?9?Y` ?I63 Ii`XޗYJ`,;?F ?F?6^P^ A@?K[?P@?F; T'35u?O ?U@?DὀK@W[vCZƠ#]TGWeYw@Gt?>f?Usd?W?P?SFU@?RCWV- ?ooY?B?7r? ?Jc?-O?GP`R@$`$ὀt@?;x?"@?7?L ?E@E =ƀ2h ?:}`?K2΀W`Rs?<+ ?Y ?3bq V"oHw c7 ݈?$ὀ>?A2`?K ?=Pà=T &3 3@I'k?2b?PՎ`?t@V @MO`?#V?S(`; V`; ?D4 ?XK`?S\ ?'< ?=ƀ?K.&?N?U}?V@C<[P`d{>{?K.f%f?B`?J}?H?4$?Q^D ?gXD`?b(ƀ#R?@?;:`? G:@P Mߠ4@?2΀>c@F`P QDi$?$@?MP`?X@?=g@,(4.#{?IK17dj_n>?@T 4@Q:}G`?'`??9?)-O=/W>R@?#5@?I?(?W7?aM?9"O LB @A PpKxA`?D@@?B`?4`?E}PE. ?NP!z?,;C?& (?S?$iR@?QCo`?+cK谀?$i?P ?O?CR ?R?]`W"1z?O ?@8g@?(y`?8զ@?<9SypGX ?SA9?StT@9.B\?2 @?"8K`-(R@GجI'V#RAγ@'?74WM?Cv`?aV@?Z `?C7`>V@RYN?KaA?2`^a^D F#@8R@NqJ?-?P#?THk?Wq.`?S ?LLX?STc ?T?K8_@? IMD6@?@T $5B)YK`^ #{?9h@?@& ?M(Dh?H~Ġ??@?V1,`Eٛ`&@?@G#>E~?K|?Q=`MQ1 C6N,?H?X/vb[DG(Z?%T`1D/D)[`L vcH4`7?E+?0h`Go`Dm`?"@8C?<?Pc ?1@?<Ƞ?0s- Q9h@?W @?Qk S ? ?UO?a= ?K@??.?S?'eEǸ@O`D ?2?2΀?A?^ ?XBy@U}H ׄ?4ܡ@?3?);$L@L:`M =T ?ܙ C`.bi?63 ?C?6?/M6DRG" ?R|v`?ZQ?8Z`?$g?G) V"o=S?O.?IMg@GSˀS g@?\?X54 T\ QO@Y1 \:`H ?(P ?@L?H?D9?Gw?\,?bpS ?_.?R 5$-QGX LDvj#qW-`a@B?.@?>4j?PK?<+ ?a=ހ3m?06 D`92Q&G ?:&A% T`&\'Dʾ ?B#?U >X0`T`K ׄK R`?.l?6-K@D"r=1|?@,?Q)`"r=S=|n@?JZ?>A^D ?c?MP`??D ?9n?36@O U!?]`?PՎ`?Gr?Ԡ?2S?F`D{b@VyP?oo**@U \IM p`?r=- Dx?,8?N ^ `b2I@?)?7X?P?Up?J3?"* BI[ M݀C 8 9 ?Hq?CS#{EG R=?`?ZE?a@?@ ?BƑ ?BRvTE?@Qk ]Sa?H@?\^<?TL?@ B|v`TwJJQ `tt Wn@5=`2>.@EӀC>?7?Pǀ?N?A.`2%?0@4@F^{"h EGQϠ{?86%V@X}}G-w ?83`?|?]`?V?#?6=COdZ`91 ?3 ?5 ?,Yp_T@aUd?$@?86@ h`K'(F >fO)`CXB?4@?J~Pǀ[c#Ë@?@@`?ALa?UF`?B`Z(à=@<0= 4lA7?4?6# ?*dG?-20)5ՠ?4?43?PN?A?5*K+`Y T2`@O,GbC@\v*n`*O`@=?5R,@Q?H5&f&`(Z?G ?@@LD>3 Q2Q 8?9'k58 O@?'z ?WI?PcR[>@Sm1h|?*@=25R,?C6?A ?0Y`?84ܡ@O -9?P/?X?Pë@?!60K?C{?[M?T М?8`?Y䃀?^a!?UV?֕C`?9 ?R ?878 ? s?F%`?R ?R?GVY?!I1zQe[cA?S'?Q7 M7+谀?Ea?J;e >Ho 8?.% ?? ?1,`Q Y42@Mm?G:=?QEGeH 9 ?TM`?IgMQ6E?? JCFU@> ;!(?'< B7< ?2?M7o?I׼?B: D ] 1Р?Z@?-c b :~@?Ng`?POf?cQ_ SCL媠UQ ?Hn?LhtB>x ?Tr?K??Hy`?P*`?oo< ? 9?&S~`?]`?W1L`?qN`3R?xA`WYmMV8€?B=@BQ Cm(MQZn>?G ?:;e ?+?F$@?Q)`?6[C*9D60?%g?L v?Q?L=?J?<&`$ a`9~MQ$On = h`?=?9i`6AF@?>>1bJ_+`>- <?W[`?_E?Ky8y`F ? T E~GVY?8P?@\- 9+(`?4ܡ@?S5@?Ng`?,?8?K ?P,?E@YڠOqF@?UЩ?TB 6}:?%)J ?3 ?2/̀ H G| ?8q?S ֠?.MI ALa0`?D`?]³=`eLȠ?XmbZs?D ?Zq?Nͻ?A?MwR?GN@>92??V8'`?T/biD * GN@S}EAϠ?Mހ?Y?6^K"`A$&֕F=CT&@V4R@C9?Ih?B|v`M7Cj?B< ?=?AY'?G5!(R@,&`?8L vTz@U ["VZBK@IKJ@$xA`?Wᝠ?ai?U?P@?TEݠ?QP?S<P@$?+?@?1:}?AE?BƑ ?LzW?M݈?0!g'Gh|?F^{?W @?M5 PNNH`]v D;?Z?6u{`^"D. ?GG8t?1:}?L`?J+E&?Z/`?Z?>/M?;z?I3`?J, ?B:; SpMހDi ) ?IK`?D=ހ(?<5Y`9 O1d@JidZ)@`''G:@3MB#?Fz@?aR`?Xq1ɗIt`?!?.I?KzP?.v@?Oa2W/$`?L??vb;"A[8@! `ZFV`QvE@?0@?+ ?4K@>47X6=CR]W.@SjDW?Q ?a?Y3`x Ef?H`?Z@?; *I?;?@?UWI ?V?#p?B @?Z`?U`?E .`?#VAGL! ;+`7<`922@?à?c@#q>KH' %?QuC?R?,0= >[# Fx ? `?W\ ?AϠJ)@??W0?S~?CQ?4.4l2D$9g@F%`I]?)K?E;-@>Զ, ?%`?;@ ? ݈@@ ?M@?A@?"r=?9ڠ>fU#*9?J`A)`au \@)?)؀T `?> ?A& ? D`?B?G**@?ܙ J}`R[>@?*9?K?%?% @?9Z@h`W`YQY'PvQc``?G?cR ?S?5›?Tˀ?Gج2X >@:QZn1Р* Bt??a`?W?Q]@?@8g@?2@?G @?[y?`CC?S?FY_?Jc?C>?">?E@?Co?U2;?N% ?+c Cp7 ?NA0?W,`?R#?2/̀C`?4`?Z?3RQ5a?T%?X @?U7X?HZ`?S{?ZE?T`?L:u?.:dG3? ?6^?<24RD>LD`*Զ???M?PՎ`?dXd@?^pv7" T3X6bnW ?< >S|3C ?Sֵ?R ?B; ??, ?@̜?E ?9 HP/?Ah|?T `?N.@@?@0?I9N?0^?@Q?V䣀?Q?2ݐ?<Ƞ?8զ@*cc?36@-@Y`dQ]E Jq?0@?S ?N?G-w ?24&֕?C_?C]TO"@T:I? ?>N0+^`bwUq5 ?2??@H?M ?I?J}`?$ ?A ?F ?F#Ë@A-)KGIR<!γ@?Q`?K`;xA`K?;^?Z`?Z، ?P`?8' B" `?@??}?Th\?Yy?O1d@?E?Cg`;?@M? m?C/U?Gw?Id`"3?Lr`?&@["?7u&2Nw`?@0?V\`?U›?T1?We?HP>*9?!I??Z?AE>bL7L! ?G?K\%?3EJ@?2@?d?cs2h YD`Xa`InJcU @ >k ILɎ?"?P)`?X]?UR,!PH`?Hk?Qe?6[KY`T(zB ?B y?L媠?D`??g `>?4@?SR ?R?C`?CË@?P,?@/EAB?"Yb>[?=IS?Ds܀?B1CMV?5?K?@L[j3`> ?C6@?@,BoUDP8g@PKHF ?S?d?Q(K VQz#]T?S`?W+@>{F5@?@?D{Tz@bQYO:@3 U4] q7?M ?=P??W?S(`?B(#:dG1& :}`Fp_?)@?NJ?Fz?Gs`?Q?MP?2 `B`C`?Dl2?JqBƑ L(6B` NS(`8' =* M @ L`I[AD[?Ds܀?Ua?A+(A2`I?B?6B` 4/V]%@B?Kzπ?H2?%*5fE 6@?:}`?M@?Lǀ?I.?V@?Z?B?ȟ#S`HjS`?O~`?NDhUՠD`?K GI_p?k ?\M?7@A?-m`?< ?Gӏ?]³?LQu@]]VĀ?Z?YR!`T);?$@N1T1>f[.&5B?Y&$`?J{G PUWʀ3?Kx`?PȠ?63 Ab>9`UƠf_`[ 3q?.C?Y??_3`?6?/}?T">?: f /vbUd`Cyp?# P8g@Z3IـMWn@F2΀F??Wq.`?U(?9䃀? ?=P?V# ?X ?0c PVQ Q7sp_@ׄ?M4?C )`**@@`& 7WR}6$@?Q+(?;@KzGmY@> @1wO@b]BEa*?:&?Lp ?*ԶE!A?4. ?O)?I.?DHk?Nq?A^@@FQ c`6@? }e?B s"I[ ?K?7N_?/`?`@?PWJ@` EM`?-m`MZI@Ab=@T `?!?a4 ?_`?V??Z+E&e<@Q?_~ ?Y`'4?Ae?R˭`?`6?[' ?I@?@8g@2I[ QGD1b?K@?E 1^D JJdGPT V5@SJ*Lǀ7G?@̜V 4@?S`?RO?V䣀?Z!׀HkIh@?JZ?S ?Pp?PV(/@?/K@8€?Ih?LU ?Pr?T"?B? T ??9?Ea?Ptt ?T @?0@A|?1$?MwR>K@4@?C<?9.>k EJ@9.,8?@H?T ?:)@Dܡ@?A?DhKLЀ\?Esdl)y0?Qn ?`@?P4iKkzQ. In@B?3Q?Y3`?Tˀ?D`?>C,ǠXO~6^?N@?OEՀ?TJ?YgM?K?14JE'?YI?Y-?;@?@ր?Q?T@?P`0E. _ZF^/@!_`?Wc ?Vj@M p`?(?TL?J(2OZFF+`?9g@?N`?5?3?K?O8~ĠW:@I ?E?L=Y>k ?V֕?SL4)?"@?\v?W :TZ`Z(PQ:}R ?k ?J@`!A@?1?&| ׄ?+ ?1Ϡ?4)?Id`?K!_?Z ?HmP@^ JԶ?>e?W@?`?M~O\E* ?I?S=c?Q2`?DK@>;?!+(?(P@ h`EF`Da`QB(@C?5=`6p_ZwqY"@P/@SX8`\UJ[2`QuCJ} Q Gru?3?E ?=?E$-?E@'k4l2?7< ?2?N.@?^\?I6`3?- ?C 0= H]?`?G?[AP?P踠?!T `?HP^JQB?3*9?AC?M ?SU@?@e@?7`?BX 8tPv)'k?C?P`?Pr?:E?;?K `@8`[bD`?Ht? ^N>NM?`Qy@B?A& S=c( 9 ?O)?BNw`0xI`x ?By@?4DxU<O1d@?'G?CU@F[cJ@F@2?F?d@?c?7sU0XRF\e>M?>S?Ml?7KY`Sbq 3S @1_`**@$.Aγ@?^V@? gumf```\f`db W%̠K@ I/ L=G 1,`?Gr?PT?M݀?D$?݈228`@H?!I?B]`D`Z< >% ?Di?+!?2wZ?TP?Y ?V^?U?J}?РGVSڊQPVP@?IF`?2@?l?/vb7?H`?5?RQ?]en?U6G" N\??V @}eb^pUF`E)J Z1,`V?F &x ?B]`??8€?D ;?@GruF%`:( '?2S?Fa ?EB@@ai`a`2b?CË@?O ?`ZC?dl?Sߧ HK`\M2?I䃀?S?4. ?3% ?S!G?CR(#U`5AT `W`YUnHT ^??D EgcUa,FIJ`4@BwZ<;F?Kn34r -40T ? 8ApH (Z`7u@??H`?B`?<8?Y?5R,jPyjDBX [oOO +FA H4`?2D>?$\ ?5B?CZƠ?@F?(ZFO&UGQ= ;CA76zG@Ug K9@A{?@aI?`A`?X&?IPN?Xxa@?W @@?z 'Q=`SR?1?>v@$@5@Fz@?; ?[j3`?] ?\W@?HV*[Y`5k`?.S?$Hk?\@?B`R(@?PS< d`I?6kB?F`?Ps ީCM @Hoo])T"D. 1B?3m?6V`?00?3P EpDhM@H?&.IfMen]~[:_`=@>@m???+wTwU@>MPNL> A^1{?1Y'?KE&*`*?`n?W`Y1 Rς?T@?S?(?*&.9`R yD`?Jid?W*?PJJ?BF?8?wR>KSMS =S%@N`V DJ?; ?D;?9ڠ?؀(R@?4P?MV? ԶD~@?)PN?-G@3?8@@JJP8@? ?Lk O^Gӏ16?F=C?4l2?Q]@?G%̠?B% @^`FIJ`2CĀ?)ڠ?ZDV?T7BX 8?U8?P6[8`?2u`?P ?O(46%`?. J!׀V3 #]T (E$-68'`2??c@?T{?U.f?J)?Y?V@L`a;Lm?G?JO`2YG5!p_8UZo@TCO`?GDv?Q]@1wRoP-4?P\-?WJ@?Q& ?Qqn`&(Ҁ?G ?36@@${?@?D`?5?7< ?RNw`?BWXX%U?+xA`?PcR C<?D?JF T Z8@?CR ?O1$?0:?Syp?H4$ὀPpY&$`R@Z`?MT?U`?UG?SS ?I;?fIR>*1`?YPqbfXn ?3S?VKQ?U7?Qߠ?Ww?Z_+`?IJ9h@Tc@WfRK@Q`@Hl? bB@``Qv?TLA?V`2X ?(@1]@IF`1^D #g`E޷@S?7`;h`HN76??Ol*?JH+UZ?:` ^?/M??\?Nj?,8@nPU`[kР?46@A?$?I/?C6@3SNRWiD'3;!__, c< ?^m?W ?8P?) ?Ud?`A`??l*W#>V Co=@=?2??CĀQb6#@?U*@?<?%p?P ?3Ss R8?R?7A`5E68P ?,D`?B#GWdc HP?Pd?b@?Vj>.@?ᵀ?1,`?>K?I.ME@Y`F&D@] eQ@T ?I?F֕A-D)?1$?V^?V3 4RC?+Y`N- V /'?C`МN]LM݈9>?(y`0h`S ZDVHC?ܙ 6^Lwɠ52YK8_@?/}?]<@?[j?V=C?R`?oo?`S d8s@VyP>QРDl2?A ~?G?@? ??O`?)J XQ;?K??9?STc ?Z?1N c> K)؀?PVt@[y`^L@?=?3C>>Cd@P"DlM3PȠ?D?W`?=@#g`9?7j?@*`Nf`` Kp?E ?PG@?L?PT ?HCߧ M?G:=?/'\$`9?\ܹ ?8@ZP?@ ?Rm!`?>92+n?CX8`?ECR[T B>?X?aeK?I0 ?2: ?SC ?X?T?S"@MGX ?)?F?G9t@?K#@@\?5f?U ?B#?U?15a?BK@?Tx?>?B]`?CPBZQ ?TW?I. ?DK?EA$?*?Qi?7:@%HCKqA@?Bݐ?I ?3 3LqJ*@?7?Rnh?WI?W:@?PaI?@)&@%)J ?I_Cv`fvEf?`?JDM`A 6[??+${?8' ?>MPWs3>?E^n`VO? 8Z`7?RWi?Ze?C:3@A? b?Ja`?Q ?E~?<?( 9 K[];E XR.`T D ?A7?E?%{`?+w?:@8H"t@?S`?P>xA`?'2`?E\e`?SR ?U)?A ?Ja`?]@a?Uٛ`?A`.k E;-@?ǀ=4];E vb?[Fm ?A@`?֕?VQK8_@#{?J ?GXm\V?3g`?OPh`O@<I3`Pj;#p"]`VB` WX&| ?Hn ?ER,?3 V`?Ff&`P2FL??vb%*>?1T `Fy@?X0`?K#`BM" <S)'kOY`ds܀c:Hl?@?F(Ҁ?@٠?CKq?J, ?I9N?= ?If?b ?c!YX"?DR`?Ԡ?KJB`?*( UG a M S0?PU ?b>~?TCO`?+ ?8m6DPlɠBt3>`/uYY?Q\?Tl2?5b@?A@?H`?HAp>`\r43?, ` \8?= ?F??H?< vTR?$g!BI[ LV@Z(:JO`?H,?R=`?Vz?Xр?8jS`LΫ@R˭`SWLP<<?0?U ?W1L`?L@? F+`H0= ?T[?\Ɏ?=% ?M?I@'?6(Ҁ?R ?KJB`? F;@ ?P4 ?Q3# ?=* 6?@?<|?1zR@?A !+(R&Q ?Qb`?Qb`?R4M UU??Ea?Aγ@?C`.@PȠ?L`?4?96`?Y;?U޷7OD 3mJJ?.f?FL?3q6L6%`R?!(m-9?X?d?A#~`Wi@U`EWI '??4g?E3?8,V@D '@?(PUOU8?P/@?Ws?M?`?YY@?V ?>@2%R$M?O|@NN[5 ?$ׄ?;n?& (?R?U ?F72`P?<?JҠU)V>?:T?4a`? ?%HI]RevBK@D1l@MbQ)LLX) @:WXK?9,?=?n`?;?@?L`?>bi!z?6 ?O?Gc ?1 # I/TS 3?A^@?Զ#Ë@?H?OD?B`?NM?V"o?]6(?a?Xp?QQ?[ `@?=Z@N ?2Nw`B: O99 F :ԶPc ?a`??2Gʀ?E\e`?RW`?J-?IF`?)g@??V?Y O?f3 ?BSJ*3ȧ?'?A7?Sa?0}eJ@>?Z`?DqN`?A& .v@?6A?SKq?0? >m?-2]`I.G9(?:E?U?V=C=@[Hl?:?PxI`?WJ?Sŀ?H 8?9 ?4?,s,Up Q& ?=b?It`*( Nڂ3o?Lp ?@E. Dn@6a ?AuC?E ?0K$`?I]?\ ?N% ?3ȧ?S?? UDa`?H€?&G|`AyG-w TBMj ?1y?/9B-@?D\ ?GX?CRK0 ?MP`?E2* UЩ]`M2Sb'z R@I[ =݈OC `:`W?Z@?W3ڀ?d@?[??_`?X`" `NȟU(U9$?VD@?\?YLx?F͠?'?KB?V o?< SV`VTC@?%p?Ps ?B(#< N R#?0n>?F?L739WQ=`ZqF[? ?1I?W ?b?< TvDvj?9"O ?O`?K GXY` < ?1Р=r5O&a ?UD?\L?Gs`15a&@?@H`?_`TKQ?Q,o?a@?eD?a ?4@&?Ek`?Bu?L`?\m?I>jHo I# ?8~Ġ3X8``u\[?Hn ?`3?S:Հ? ?0@?X@?Z?5G O^?@?, P h`Z~@K\t@OE@Y@7z J~>C?.bi";xA`1w< 9 ?:dG?P/?Br=m).$`0@? ?Dh?BX>Զ>72`G.MAk P>qN`?:`4GQv=9?P@??\=?A^?>X0`N.NH`L8?C% ?bev?aZn?R<@?D6?R?^G@?^ ?Q @& [ QO??A ?A|6V`VMISγ@?'k?C??R»aSd@?R,?$92?(à?F=C@[̔NC?C6?N? :Զ?! ~?MIS?F(ҀB\T6-?I{?I)?8y` @3C ?CS ?/@`A`]?O'+?a?]C?Rm!`?%)J ?+:`?Ab6?$ ?Qz ?A& =*9??|?K'?B `R@\?#>?]˥`?]9?K?? ?<?Tg?Q{?I?K5 ?(R@MARB?2NX0`T`Dš: f M2R4RT,PCX8`?? ?H`?8?D6?S|`?OH`??E@?LɎ?Q_ ?=%?JJ?QUR-@Nyh?5a?Kh`?=* ?G變?35@6=C?=T ?K ?1>?A& ?Q >eV@(=wRY>`?AР?4qN`?PV@?`+?Tw5gBI[ ?K ?X`?B?F ?7u?զ@'@@1,`?)fF۱C2Y. ?3v`?:, >J5`?O{?Q3?*9;@.k ,qKO^\GVR ?34r ?)y0U?E?Q=`7 @?"r=?Q= ?E* `Lؠc?& (?QI?qN`)@JJ?&| MHK`B?4?;E&?N?\=?Oa?8' ?E)5V@7r?PW@?W?Tl?"?"A& >qN`?15a?oo?*?a`1? &$/C 5R,??A ?1I>IJ `IK$?P*Y`?Lu;?+ ?4ׄ?=]`>?A?^q?_qF@?R x?I?R_ #K@?35@?F~>?6f&`?B?4?E?Jx?A?R@; ?2t@?R\`H?3q?!gF}?+?K@??.?Di?Mj ?, TYVf&`?,?Nf0DK@?ER,?X@?N9`-݈RR5Ǹ@?BƑ ?GDv$R`H58 ?1?6 ?Wf?`R?J\@'?  >g63 S}`H_E=`<ǀb{@Uˍ?ZW?['?2 x:6HNj?"?^g`?OC Dg7@?4$?D ?2΀T`Xf~ ?';@?7<`N,KY`?f?4" `D`HHP Bu?K?\V?5HCË@?1?"|v`DqN`1?4$?,?M?S@?G?@Of>ԶE =9&`@kJ_+`Su@W܁@H`?? ?Q\?DqN`? @?5 ?#4r ?7r?D'3! `AB(@>9'kNJ?6V`?Ur@?41*;e ?@!g?V@?Vy@?8 ? (: S=cOsԀ1@?2@?E?CM?AC>qN`Ru`N@?!1D?B?HC?=4?9ڠ? x/M?1h|?4l;I Q`@6?9ـ?(P(R@?! ~?Fy@?>- E+[`\@7A`?Y]?YUj`"@K <ǀ7`?z ?S?SR!h|>K?7?"?"!z?L媠?.X0`]˥`Q?+zU^V ?I_?OW$EG[oOC?a`?Z8LQu@JԶ JJIQE 5f?/vb?&=CI'kNJ-t@@LȠQ% XRV`? ?R? !gFz@? 8?'(oo?/9 cNK ?$ׄ?\ ?\[?RK ?C5?5u?@+?/CG`CȧUƠ`W]2#?KO^?@p3>C~.C'FD@9؀$`K E$-?8F 7K?@?qN``U&\H`??VO&?aA?Pj;2MUV@H5?8?B@&(Ҁa`?S JO`U^K83?(?CS?>q?1 ~k ';@?k :-$.ZD\ H@? s?8U?1]@?U`?TH6a ?X?9K1MIS?$L@?B?AuC?G< JҠZb`?0:?FE,V@?2@S7@X%`'(Z? ݈;O^4?B; I>>.l-Oc@?@/@?IL?7z 68'`CI_R`BW`?H?;!PJ ?1ɗ?1|,Ɏ2??8R@?S?K@)1 CR >C?9@ ?WHK?NͻB yT @K3B&@1%C7`>b?1+(= Ap'@<ȠJ @/1?9t`?1Pd Pc ?! `?=9t`Sߧ K|4HkD`γ@?DCO`J?P ?1&`:QY O? ;?@ ?T>`?X >x 9@?M ?G| D8y`?=m`$@Pc DZN?0E. ?@ ?(9ڠPOfGX ??|?B[>@N XmD.?!^D ?:@?@+?B2[?C [Pd@YY??6f&`?Kw??@?X+`?9@?Zo`?X@H Tj 1,`?F 'Wo`C@?K?"<5Y`?5 sBB`e@cL'z ?Co>SPq4)`>qI9NOn !?Qm?@p?.?(@?J?C>?D?I)?O~ ?QQ?#5@K@ K\>ͻ?>q?SH`?EV[R (à?? 4\ ? ?C9?+xA`>?0 % @$?I?Ed`=2?P..?%UPEaL0= K TG$Kx`?? ?T/M? xHUY䃀U 7@2@%?29@R@I2:>c@`2@??2 `&?.M>D4 ?58 ?EVD@=?\ ?T`JHXp@?Q?OCG`C??(?b7x?[,߀?[?\Oܙ c^LIvM݈?01M7o?( 9 @H`b \'KI.5\e`?FG|`?EG 5u?@?Sr?Rt?P*Y`?Zj ?[߾?>Ã@<Ϋ@?$ׄ?=ߠMajg``j\ȠS?#*9?M3?2]`?8n>qN`D/&?Q,o_xVE޷ ?S5@?`W?O3`Fy\d`]O$Hk?Y` ?O~ ?4l2?Q`?I<@KW @RJ ?'X#>>?DK@?2t@Vv`UAN B3?)?6kB? ?R,?3 =m@/ Kh`P?5E?Ql@?CAY2 ,Z?]?AD[[VBIUƠ[ K' ?=D6?'=ހ?鍢DW1B?@`?Hm?+04ׄ"΀4>3 C7@?(զ@?D ?;^?K' ?4@U|V`Jx?Tn@?T4 >X0`B??J-?>- B?K$?a,?R?PH?Wi@ `3 ?Mr5?4. ?0n?Uu`?+ H?@FV`)1 c@?:@?P9`;xA`Waـ?$`?R?-.9`? ?#݈>qN`?R ?\`??(HlB@7#q?TVy?cݼ?Ze?1 ?'k G`? ?4l;+`]`[ Jx?SfF`?[?Oa`?In?[]l?\H`?P@? g@V\\H;+`0xI`O !z?A@?5@?BQ?#?'k6DQLa?A`?94h?ᵀJC( 9 ?T?RE4@\f.`YZ`?; ?S`Qb@? ?B?1^@?9@?R: ?DV?1_`? Ps- PG@?9y0?VN?D1l@7@k ?6$@?C?Z}?\`?LU?Pǀ?M(HtVܠ;?@,V@Q7P9`0@AwN% ?2:?FzD)<?A ?#V?0T ?F@?./M?O ?\G<?+K!Lr`XCq?VC ?UC8' ?:n`?X|?HN7MNo`R@H4`L8@#*9?UF?L@L P,(mG:=ZG?Q?U`?B`?K `@?[w?Y?Di?=%?Tš?\d ?Va ??CG`E Men?@>c@V/5Ru`?@G@?T9?R`?M<@?8`? DR`V@Y=>Bj@R/̀C s?>q?Kz?'z FQ T1_DX0@?3V?3?.l?0!g?UX ?`"?O6?#?I{?KѠ?+\?Р).P~Sa?@?RevJJSQ?$)?\Cg@?`6|?]?L[?Ku ?U D `O@Tu#9"O ;%\e`?;谀?'e:-6f&`IXD ?Hl?G*?1Y'/ B?"?=2?QuC?;[?B<@ ;a~5 Y/ ?O֠?U ?FTC@?K??TD``@2%?G$@G:@JBt?(oo?RWi?]A?TiC[|G?: 6f&`]|n@['HD>3 ?R?EH@T '??Dc9\ ?F?PEJ@?C1?PW@?8 &@? O^?Dܡ@??In"]`TG變?AuCH#m$`? &| ?L8?J4@U*PT?3A`V_j?Cs@?a`H4`S.>`'(ZF^{-?Q"7@?`3?_a`?:TE ?=?S(`2%T"?1@?^ ?XU?P#?T@?@`7X8U$8e7V~[,?Y]?Qb`=/`PT4 Ks%.CU=`]ހ?7j?Rj@QHaiWLLkBBsE=` &| ?'e, >>QR`U3> (?P`?@@?0@?.'s0c ?}WdgX`;[?8"?Q?_?Xà ZL Ec;Y`4??Ef?Rb?Z?]@?U{`?>ȟ?&3 ?@/@?D\ ? A^@DiNYliW@Aw?B?H4O~`ckbR?5c@;xA`Y"O YF`SV`M"B?84?XG?SV?/vb?7?K3B?E޷F <> ?1I?@\-I S 4 ? T ?H]?R?3??Eg?9PN?#p@H,?N{??})y0Jk WC/F`?4.?(4?0,?E?Fy?EEe?8CË@(P?@/@?=4? ?Gs`?F (?K̔?R< ?MIS?7`?@?84>=ހR΀@F?HЉ?@R@?ZF^Og /Ye< H`?Z?;cB[>@I'kB@?4i+谀]W[v/C < Ec@"??:;e ?E?,Y4. ?;&| ?R@?0@H`??1_`?B#?#Ë@<Ƞ&??, PȠem`&p_?D?1&0^@W@0G@?G?]j ?\b@?G``?2u` U]v + ?O&?5E@`J)D6?5)?Bh Ps_`@Hy`?/'S F?U`SV`A`5?PN?E=`?(??NI?H`>?!+(?<9?+!Q~5 P`?9ڠ?FV`?@/?&| EǸ@?? ?a\Y?N/M@/?0+?Ww?b'?``?;谀5 ?4ܡ@1w2?Dʾ ?Hm?7G,wɠRTD31γ@%\e`?7?Q'S?HbEx@V>A`?I9N?Q@?$ׄ?ܙ ?)1 ?; ?CM?Pj;?&AG@@0< ? s- ?P` }eN?mAE^!?>C?R4?QD?H?.?D?`?K"`@\V?2/̀?'A0E ?/ ?W@?Zp`?J ?݈?E3?0!g2@?4P?R`?Pn?4M`'7uCn`Y@bK@S<?D\ ?S?IUj`?_`GmY@NM*?B?=S' (? abX0`?Vc@?O`?Fz@?;x !g?2;?Fz3 MX$?S?^Z?WeG? 4?4@?>KxA`E)?Rς?RW`?< v?J?E.f?"Y@QO`Q1@?:Ϛ?D'3_`>JJ\@?GmY@?a$a@L9`?Q@`?_`@?Xǘ`?%?s?TqN`?Hզ@" @?#4r ?&| ;s%DK@Pv@P'@?@?Rf`?P`?B`?M݀?F R1`^Q=`?]m`?]!Nl[??1?F ?L?KaA?1,`? A7Aw?*c>T.:D@@Dܡ@ ?Oř?5?V-?`QQ`?\G<?K^?(?6??H%U?B `?c3 ? `7o`?(զ@?J=@?O`?S ֠??Hc= p`1T `CD@Kzπ0?@aI (S`1r`?H CU@VL@Lؠ8Љvb?TN ?WV?J?D?AGD?C6@?N?MO?Gru?Da`?Ks%?S??BsLN[ȿQ`?;xA`?GG2`C `?[ ?cG`?R]`?B%?Ae?3@1zSљ P)?'?&(Ҁ0Of?I?W`??a1F@?&| ?D?@B?s- ??!|8 Ek`G`Vd@U`?g@?Ig?I V@?G ?P/?X0`5u?K?W^@ O'EQm@K?0,>?92?a`?W6h8U?1r`?H78 ?2?3/U?4??3`?Yu?H@V`Vy9@ ?g@?C~?K!FAB9@ ?B4?0)R.H?B?E?@ ?QI?L:`=3G9?I?V@?& 0:?8z ?H6?3?:E?L#v@?F ?>?8?7?H?Nyh?@u@?2;?Fu{`?A@`%c@?X&?H,TM1?P`?|ZƩZ;e U*?6y@?X?3> @?B @?"h 03`N`H?5)J ?Ili?H 9 ?2A_`DR`?'< ?I?!$P Hk?`..?T3@-@QWW0Iڠ?A ?F ?:*@?X?`ѹ ?Vp_?W?]`?X@?T0?S/U?NS?5*N ][w`^WX`@?4)?IH€Ps- c@`Y!TB`?(P ?RH?F <5Y`ZbIVS@@+?FO&?e ?Y` D0? /@?Cyp9?4`?R-?L?Z?[[?V4CO`?;谀?B<?K={?Dޠ3 ? `F͠?9F`LΫ@Y@Q:}GW 0@?;@ ?6p_36@5@?Wq.`?]?`I?k (?_`?R?Bm!`?V/5?WX ?13?7u(P ?5p?`U?HK`\@Co?Rg`?B<@?6kB?/W58 ?A@`?F O֠Nv@0@K3?7變QT Vl?@?8"?1b?F ?E8 ?;?3Rz >v@:@?I)?VgmB#\83Q2m!`a b\Qb(P?Hn?Ea?$3?6u{`?2?Q ?S`?A?K `@?Y?[??R.`AGD]J W Q@A ~?O@?MK@IHGu2 `^T[ eK%S*9?B??Q@?< U``N?1I?{`?;n?X ?7@Ru``?2t@F?F ?b{?Yh@?VJ ?V}%xA`5G ?83?( ?!g?2 @?8P ?Sљ ?MހQ+(SV`?&(PXW) `Vj1@>@@c ?wR?Iy0?F@(e7??R?9?V?2?4?P ?BQLB??CG`? .`?f9;B; ?3*9?9@?F@?Y)Kd ^OC?M ?HK`?Uu`?]_?P ?Fy$L@X@K?;5 R?,V@?Yb1@>D?=?4l??J~@?IvàJF K@>f?Ḯ?Q4?K9I/?B?-/`]_``v@J??O ?I=ހPRRJ@?BtQ2@?Mt?Y?^X0`?L@F NIB΀?*1,`?R x?&Va ? ?1@R#R7x?;h`?.I1 `?EG ?C5@R?"bF)`Y?2t@0+,ZE@ ?4h8 9 XQ?]`?R x?GX ?H 76?8>MPaIDP@8Ap?H4?S@@LO ??\?Fz4HkI9?;G_)WX@=@<;?JJ?Ss@?ZR`?9i۠T `Hl?F ?G :[zC6?RA?Hm?&?OW?Uc@?WMh ?`?ZD?D?4PbW`QϠG`-?Q^?T?JH+84Tܡ@.X0`?8m@/Y?@ 8878 ?=݀B=@Q=`?'2`3g`OF:?Q_`?_?Rf?P7 @?U ?S'`?R]`?C5=7IgH>9@?BX ?EG  m0Eb@5*%*A^7@?V@?I'k?]en?\?5Ǹ@FB` = p`?Gӏ?Ud`V `?On ?A(?Rj?^]L?=CC ?8"?D;Go`__ 4?BW`I1 T?D\ ?_ ?P/Q{c< W`: I>% ?c@>@?&`?Q4UGIgMF>g@?S/U?G?'z ?D?C@?FY_?R@?Q ??KJB``@Z#Jb`KxA ?2@?PE. ?Pǀ?6}C>3?FA ?A[<|MenA@`1DC ?YD`?d~@?enH?gQ?_E@?c@@?R`M O S% ]S?3R?O ?K&| !gP :?=ƀ0`V\\b@U(3M?+(F R; D`?35@?A HRS?H?^@?I0 ?G?^Yw`?[+`?B\?$)?>.@?@n8~ĠQ`L2@Am ??RH?L?#g`?9;?X?S`?? FkB7o`?Bo?L:`?9 ?`?C?YҠ`?[.&?8l7?8Q@?N4j?O'`?Z?\zW?A `?@?J}?Hq?@0 1`?DK@?SBBj@X|6?H?c?T͠5R,KJ$eUI; a< Yn?@5`?F?X 4X{5f?-X?+C?N_?R%?F`?,Z#?Ih@?^ߟ?T{?10E )@KѠQJ?vb?#?? ?0@?-@??ᵀqN`?N*1`?Oa`6[FG|`?+:`?fO@TS4?I`?Jc?8U?EԠ?>ID 7;@?R]`?R&֕OaF`?/, ?Gs`??(???:TF`TZ @@Am a@dK@?A `?IO6֕?IH?GQ=`V~bK6z@?LZ#7`4ܡ@?M ?PL2bO+xA`?CV? sQEXu P9`?x S3+;h`?& (U`H?, ?B`1 `P8F(Ҁ?,:u?I@\#v@Z)"4?]`D\ +z?NX0`?MH,b_>*1`?/, ?3 @?<?Xz`?Y! >$Zc\4qN`?T$?S?6u{`?f8nU@Uk`A& =K C,Ǡ?! `&a UrP:`?B?P?Dx?ET?G?!NZXw Lr4g$qN`?G`?SpQ J6H?: ?Z?Yh?LW@?P?I?.?P& ?\媠?T=?>ͻA]@TP@?R@A& Q]H?"?D? 1,`?a>gF@@8g@?6a ?)2G[vO>+?D ?>g`?Th?M2? Զ'?Y?P\-@)UuB ?O@?Vf&`?Q ?Tˀ?PU@HB|v`5k`WIV '?Fr@?R?\?ag@?UK`QF@f W}@?Aɗ?2b;?E?Wج?VQBF^{Vl`[ ;?@?Q?O~ IX")ڠ?>7s5?R@?b+@?YLu;g/acA9GX?=4?Qp'@?S ?U~?Vy@?5E8@ǀGN@?IK`?`4 ?U(?A0E ?"?"B yOJR7xX`WV@?UG?=m`WWMm`?Qg5?Tj?F?D>4?@_`D6NMQ%?Q ?DxFK0?a`?9~MRr=[i`?G`?`?4i, ?IgM?0c DBsE;-@@/@>/}MS% G ?x . XD`[NE ?**@?Fy?H?/`EEXn SY?)n?E`?'>x ?c@?1YvR,?@z׀?[Q?OR`0 9d`0/@0G@?'@?Qg5?W?0)Zb=7X7@?J?VO&?V,?F@Vy@f@Up?'z <ȠI$@?8€?TqN`?Gc @^QLaQߠY2XR?6z@?b??W+K.&U;-@? ?';@B`/@?Qk?c?a '(ZZ@F?/M?:id?C?/E@?  ?eUx@[_?K[?[Զ?a`?\?V-B|v`1 ?!5a?  ?-?M%?T `?9K1N3]T?Ng`?7變*9?# JdGNS?Pb?\lI?BD>?C M ;@?Gu?Ph`?9>V@?7:@?8Xce5m`?YIPa3Pe PvIn 9 ?SC ?T ?6kB@OfL:`2@@U(X2qN`?CV`?9Z?I@ ?A-P*`b3]/`A&| 0c? JJ?Y Qf@^9`?7(Z?[`?HЉGʀOe@DL2;?+#?Jc?Q+(Z*\ HK`?>?N?, ?#p?L P:?,;?B O$`Y P8g@?K?5)J CĀ@3KA@`CtT@?MwR?ba?T?`A Gs??:@?+?@3/UALa?Lt ?a?P%= ?`?K?8Q@Fy@I;U.fR?;Qn a' ?FL?a1]@N?Sڊ?Z~@=m``R\?Bj@?Rf`?W'?W?3{HP JCCm? ?3S MPQm >[DHkWX?Q?/`D_k@BK@?9?L(?Q^D ?E ?/CG`?XҀ?HT!@?>g`W\?H€?T֕D`> ?KxA`?c% ?]A?E@I?8m?%`?DP@ #?(?\*`?W-?&=C?9,y0][ڢ0c ?Z>k A^@'< K] bNw`d[( ?H?%*"??% @/M; 4.% 'F[UGDv?Ah|?VV`?MPCq:`?Sr?LY?2Nw`?U?O|@E›T;RAQ=`?VU`?1]@U @^?7 ?F ?;0?M%?4@+#? ?D;?R@?S`?SKqI[ ?Z?P3K?9?Kw`:Z[MTWVQ"7@?J |a2/H?1\_|?Gru?\Crg`oWh|?3H`?C?R[>@"΀T#^`>J?&G|`?2]`>鍢T^$ S`?I2?NI,M?s- 4`Q@AV?IM?Q3?@H>qN`B(2?\?_'+1r`DEݠ?+0>  ?X4`?S ?& (?=g?K谀?YF`?]Y ?'D?;!_?B]`?%Ԡ?-44?S?l`?e>`?:~@?"* Ca O?H4?ԠJ ?g 9@`J_|LW@?'`?Gʀ?'kL`.?B@4K@PG7?vb>KF+`E&?'< ?Fx ?UR`?5?C?E?X?RF?&3 ,R@Qb`?SKq?_U*ոc@H5?8' ?0c RI?Jb`?GN@>S=?-wR?WA`?X3b&[?ᵀ?'@f/ܙ ZWW ?H 8?X>?HR@0Y=U?3 ?@H`*@IHV1?!r`?gQ ?` >C<@>{Xn LI;@Y8R ?.M@P/P+0= ?Q|?X€?9 NX0`. ?G-w IHk ?g`?A?8R@?,:u?E{`?@UZH+9@?Rt@?T & :&?c?7?5a?Ԡ?Pn?^ `>% _5?8~Ġ?`z4?J@C@@?,8'sPAX7@?2%?"?L+ ?Z?Ub@?JH+?(Z`?$?R?Z?Zk ?Z?D @? D`R`d;av` S`d{Pv@1:1,`Fu{`SS*9PXBU`!r`?A?S?]V?HCA%I`T-P:?J `?V4R@3J?BD>?CoP Nl?Ab?:`SFh?7``?I$@?X?U-`+xA`JHS?T@^u@krd0?4P?O_c AB(@WXTqN`-?Gs?Eu?6}:x[@K#`?SE@?l^!?Dx?H/?:`?@Xb`=4?X?I$@>$J C ?#`?FL?4P6?.M?T?`?V?JH+?Q=`?5)?X?U@?3m?γ@Ib'@`%?W`?Ls 8 f?1& 4? ?8@; ?7`?XC`?"* Ml ?(à?NZ?6 (EJ@W@?J=@?ABb?<|?Vz@?M@?Vd@?]]`?L?Eՠ?I >xA`c@?Ng`?W-?Qqn`?A$?R1?ZD?4ׄI6`(PE0?V(1D?Mm?S?1:}" (24Bt5$->g@:@K"`IF 0/@?D;?C64=?=%?F(Ҁ*x/9?Br=S H`J{G $qN`?";?O ?M@Cn`U @S`VSPkW}@PT ?8?@)`>k B?.v@?E ?>{?A&?Q?B `Ah|??S7@5[oO?0?`ZC?QQ}@3qRnhPr?L`?`~ @?Q # @@>$*98A+(B˭`)@?Dޠ?Wd?Tr+O^3g`?RY?HPLB @T\@W`_R`T{@?g@?C4Dc>x =m@?`?4J)@Hk?X ?UF?'JPr7;@Dʾ IC@?Mހ?U\e`?'?Nנ?`EѠ?Y?Y+@?O}`A2`6p_?5Ǹ@DὀU @Dl2. B6u{`?T?ch0?R=@??L7?Q. ?)g@#q~?R?F۱?P??vb9FK"`M=ߠ? @?-T ?BK@?Ḯ?&3 49?.?G@?KB?RJ?Q1@?A^@?8Ap>M<Ɏ* s:I4CO`CH`T:]? ?K@?EnH֕???Wi@?VJ ?@"h Q=`?=%?A@5c@Qפ3bq ?J}`?:ϚM?K?WQ=`F@R2?.K?PLؠCX8`ZL B7x?PI`?] ?SR ?*D{?-%?W:?O.xA`7#>;谀AeFD7s&KF?/W@`[|T@HPDὀ$>B2[S`P 2@D Sm1?2t@>q0G@?Q5a?^ @`?Sn`E S@$qN`EfVgm?7?T?1?BW?U?Oʶ?P??|LOHc8@BbFu{`C<E+@AB(@ +?G?SS>x N/@>?B&a =?`AuCDi?9i۠?R|v`??&?.?3?|?qF@?DR`?=3g`?8Z`?PF?Ig?R`?R=`L v^.?N"?AA`?It`?N&=CIi۠5Ǹ@ ?3?H*q@?9@G Z P?VO?ll?f@?Gw?D?bς?by@?@Qy;s%?+-YbQ L`??vb NKB+:`G"TNQ`c&d@c=c?2?f (?d*?D@@pOx?/}?U›?G?=?JI@?LȠ?C`>Y X M>g@? ?M`?3?JdG?SypM(d ,Q?9i`.`$T`[ @/G[`??O?$ O@8l?Za?iG\?eB4@?Kn?4?YF`?[N ?D"` (?)J : TS^jK?A|?WaU[!_@z׀3FEEeJ} A`@?U?f8?b4?CKq5.fR x'?BF;@;@ ?B[>@?Q?S'?1`T``ZJ?@H`?Q>S?.k >qN`?Q$?Rv0JJJJM./MYY@Yn? s(`S<\ ?9?M"?$PLQN ??'[v?N1?M6F^?!&?!5a?`?J ?BƑ G9P\-%@?B:?K̔?AϠ1? Ua[X t@?72`%`O^?JJ;@ 0?? ?E$-?8ooAk ZpQMF۱USR?Uc@<9?Z]@?TAh|8"?8K`??@..?SD@?!gX6Nȟ? }e?9?A{ G<`Xxa@%h|]a[?3?J`0cG58 ?4$?M7?JԶ?7?<;?<;?#7`?H5?Tӯ?= `EfE .`?3?3M5 ZBƑ ?SQ?UG?A%?N`?U*?L9`?F%`?Bb?%:_+`BW`JE?1γ@?V`>]QQ`@?5Ԡ%\e`LPY`GL! ? }e?L?9'@?0?U \^<?R@?S@<;YD`V@?>X0`Vl`d@WVY?;谀?Py?KQB* ?7X?N ?D?35@?FV`?BAVM 4qN`";AL`N{5k`?JE?Tr?# XU`XSSP R+@Q? ?S!G?MNo`?&@?)F`?@A% PxI`O ?1h|?Wj?I1 {`%G IHF ?Dd?;JB`T QO`?;w?L`?=ƀ?0$1K!8 ?Ho ?GV?LN?YK?4gVq 2W?B@UEea#{?Kz<ɎY{XpN?@?2;$3B\B:?AϠ?UU`?32??>ͻ?4{?\?bI?V`?@ ?F?A`:Og QPW@S<W@`?E@?N"?d?1`a;!`Vgm?3?(NQR`92E?(P?AD?(1I>$?@N.@V`?3>?[ȿ?9g@R\`E?VS@?9@T4 J?Ra?`/@?RiL ?Cߧ ?Sb ?Y ?MIS?(q?5`?Eg>M SH`L!@?G?-OH B\ ?F֕?W@?G@,m>?2h 4Mm@JD?8@?^?X78 JJ8lA`SN@?*( ?VP ?b2[?`r?Sb ?@ h`<ZIK1>F Q)Ox?I?Z ?3oO_c KA?=`?Mm?9@?NX0`?0Y@K?Bݐ7" N ?B`?R!>*1`U`@^?9@%?k ?*-No`O&?qF@?F$@?:"]`?=?9@ CMހE޷? ?]P`?f3@?^ ΀?C?2ݐPc VzEb?0?K>?'`T`B/̀?A`?^?LYGX?xA`?ZϚ?KDR-?`W\ 9F`?@E. ?HF ?;?%3??R`?K#?G-w ?-?R@?I O?VB` ?;' E ?Ԡ?S?Co*@?Q`?g?as ?:F?>M?[?[E&?B<?$`?96`B-?`0'VA{?#?N_?9_?@?F`?N,?=r5-@ }e?M?TZ?DW*9A@?U~?Qi>*1`: f 6B` Y׼XL?$?K`?Skb?X ?R@?CP?3M? ? @qN`8:6H?EE?V?0,F>$?A? ?8l?2;ALaQ"??IW7?6x ?3?84?XU?VQ=`DK?3v`?Hq? !g?41?G?B039?OqF@?UԠ?AE?E<5Y`T=@V`P1C?QA`?U?.9`?Hk?Gӏ? JJHC?24?:aTB`Zk ?Qפ?gӏ?MD6X@PXX`?8"?1& f?Iڠ?VA?= ?) ?S?CTK@YQ% L#v@?@?[谀?G`K\Vq L?@?9i`?p_7UEXe7R@?.MEk`'(Z/ adlE.f>V@:-1_`??@?Sr?Qb`>A`=m@<>M?Ec@?3@?7G?NM?2@O}UPnB x:=݀R[F?!+(C5?W ?YK>R@?A@?#Ë@?HR? 9 ?@?]݈?b](?D@ h`,m?C6@?DJJ> >O"@R˭`2|v`=gXZGz ?>M?He7/Ae?M`R?R`SQa?6?[aA= p`_@IUj`?3l ,wɠ?Plɠ?[?H?HXp@?_;?F#a`h,`c`T?DZN?TR`B@2m!`:DKLYOʶJQ%R#?;:`, 9t`Jc^KiS@?M?R»7<`Qk Dx?/?P?K0; Sߧ RLI7 ?5?=@?EJ?R#?Cbq CRN 15a?&f&`:}`PZ@1CG[v?2?U<@?K?+E&?_`LUb34r ?M~?Y?X_ ?E ?"΀36@Wu]ISP G" OP I@="?/ ?1$@Z Y`9=ISY>j?{?_`@?Y}LhtV:>qN`?J1,`?``?F:IUj`?-2?N,>qN`?'?3m?TY?Mj 8V@?-@A= N Dܡ@B @Co7OH`X 9 N.JJ@kI?K#`?`~?C @!g?H?Tp@+(7[v?LZ?Z ?Q ?? 1,`?0DC>?P:?J Q`[@@Ph|?I ?)2@@?D`?X{?@+H@VkXBE›?8@?NA0?V?ZIs?HbKCZ[V E{`?Va ?f۱?d?R? 80/@7 8Ap6 (C5KaAF=C3?(P ?; ?*`?@?5@> (?2??G ?J?=g2@E8R@J ZK={?+xA`?0G@?I_/I_?2X ?Dh?6kB?It`?S+?Q ?1WbSV` @p?Ed?Yh?bq?J@SSRY 4l2?Z`?=4?BW`?83Ë@M~:Զ?$@*9>?8à?U`?Ps L8VB` m?3QA& Ab?/9?!$( 9 ?<0= ?N?H?A?B x?Q^D ?SvbPMt[`Fu@5?Jk ?<8?9/?H ?Q?Q@?>N?C?V_?K"?K Z U<?!?TB ?Yu ?_ ?UM[6 aNK>v@?S?QuC?S?`?^G@?D>3 IPNV۱R@D3 ?C@?Q@`?Q2`?B?3 ?0,Ɏ7?Nͻ?`#?V>?7?C ?Tv?T\@?-݈Dg6f9@?(2?H~ĠE.k ?Dd?@Rnh;x?K8_@?Q4?FA /l*EM`??>+?K#GXWWA0+AD3m#7`?%?W?c@?X?A#~`?H`?Vz@?RI[ àK&| x ?J{G ?QB?<9:n`2΀?@??|?B?R@4K@CF`Cl?(e7?By@?C?VB ?SJ*A]@LW@?M<@?^]L?@KVĀ[ R8PU NU -/`?6z@/TYG:@?1:O4@E`T 2 `?? ?6a ?C?O|?R?U?K+`#RC ?\ ?V ?Zwq?-T Yq bWM?49?Az_?M7;@[!_K' D0_IR`?W?a @?GX5=l A-Jk =?Hn?ZԶ?V]`?K$?S?[[?D1FB` ?!h|?VS@?BI[ 2\ ?I2?[z?O@?+C?F?U ?KO^/B#0!g50?2W>ɍḮB\ 95c@ #Ë@??g ?I@<^<Q@?c?@GBZ.@]l S V?E .`?B΀?Ah|?C5?;^R `aWTܙ I>?B: ?NP?A?Cyp?8U4?D1?]݈?Q4 sE`L`?>4j?0?_`6L?F~?Wru?Lr?(y`?1?B: ?DL@?Ḯ?PT ?CV`0@#>?@`?B?H ?P@?fG  ?@5 ,KC ?J?7[v?(զ@?Qm ?F}G`RQ[# ?T?0dZF@c ?Sg`?V]4?`ڪ?b`?G`1 ~8UZ?R@?F}@)`LcX`'k?Q{?_i?c`?f?e?VN? ?B?1Bt`? 9 PHXG``< >x ()1 ?E~?Sߧ ?284??c@@??\?EnH?&p_@If]m`R?Gt?SS ?EG?@ff@"4P 8?Cv`?6\? `?G5!?Nߟ?6}? I CË@ALa?5?]|@?56# ?? _`F?-%?A O>+VV#]O$?bF)`?XEF /@@h`@?Fx?F# Զ?E!?X%U?AF@? >[?? ]`;?@?9_?U^?S?G?D/`?Cv`>:?E?9J? Զ?p_?1_`>MNK >ީ?P?CC=?M@?RA?; ?,:u4M`P LwɠH?4?Y@?JQl@;}]?M@?P?Y?YO?#'?lQ{ \U M@z׀LIE8 ?"@?I@?R.`?W ?`''?a{?Wl ?gNZIF`γ@?*9E?>ȟ?S(?T@@?@EJ@UVHw ?%g?E\e`?P?Oܙ ?;JB`?0+? T LwɠS`?$>3 ?Q@?B ?2΀?$iG`b?5?6[FJ HI@qN` 1^@JidX`@L*E?.% .@WJ (:}`?.?7WHOQ@Ua?@?b`?R=@1`2-/`4K@=݀E@?W?]³?9;?$@?R?:idU*SM?D?\ ?S`% @I42@3? ^?1& ?D?@`09J"@B `LB @1,`?V# ?\d?Ff&`! `?8m?Dn@?Z`*ECs@M G``G ?.?P3K?EFc@@ ? c@>1,`HXp@X?vb?V1 ?ooLY)J 7A`XzSo?:O`?UJ@?GV>?=S?T$?P ${RݐW-w RiL F-..@??E?Wh<?Qp'@Hx ?P%= ?K?7(ZEJ@ZL[2@Q(K`E @ZR`I3`?N "]`TSU~af@Y^\@Lؠ?:I?@ ?=?P踠?Q?@h`?S# ?YD`?-O1B?E ?D@FLW8jS`?Vy?R0?C?^g?A2`Pq7``?I~M?Q6?DhAh|QCo`?*;e ?Vx?W@?T`?E1%!r`??M?0,t@?,wɠ?A ~?A?;1|?@?5)J qN`=݈QF@T DL@0@..@?!z)@Q_ L+ *E?c?I9NPP?K?Y%! ~?\D`?V#@Nk Z@x ?U[`?AwGz =IS?@)`?E~?)g@7WF`IڠEg;EJid?.9`?E+@K}]T"?D>3 ?^Q?S?*n`?2u`?U.f?W`?5R,?3q?7u?9@0OfVzSm;@ ?@& ?>M+!?5?VbQ ?W_K@?N &$@G?@T ?B|v`Q_ IM?h|J "?\?G2`I@TPU/WᝠJ1,`?.k ?B[>@?8?Gs`?W@?Tc@?@?E?L`? 0@?I{?Q6X' G ??8e70@LU?Bt?X)*@ ԶL` ;Q@CRE.fL9?;谀?Y ?V3@?T`?H@?<?Q@?DR`?C>?D@F` `QH?F=C?Q)?1c``>eKI{*n`* J KCK' T``L?&A?N?T?P4 ?Gw?O'?:1,`D_k@?3?_qF@?T ^MP`Za`9t`?J~?;E&0+JJ?Hk41@ǀD. /}?7(Z?/MCS^S`?* ?So7%HMk?A{?STc >Q=`O;F]`:TMj ?-/`?MO`?)?9i۠?> QDWru1?'?(Z?1 ?8?L ?Ua?WH ?Y:?GmY@?BW`?=%IR@ !g?SQ?Fm?6?Hl*9?(1^D "r=Q{E0?IW?AT `Di@٠?7;@?5Ӏ; ?ᵀ?6f&`?[?A@?6 ?cP@`ŕRr=%H7#>qN`?0${?$@?3g`6kB,V@?0d?%Ԡ"h I42@J} ?f? (9K1>w9@?@k?Ah|>@5$@2΀?GA`?@`V$@Dvj?X`?CT@K*xL_r`b Lp ?Q`?K:`NWH=4?`?8qG:@Z}^f`\e YZ `I@?L5Y`?K!_c@3QKZ)Gج<5Y`P`LZ3?Qk ?_x?LUG< F?.?Aɗ? 86F@UK?Qg5?Y"@?H 8?P?J)@C9J? @?A& ?F#@?' @+?(e7?U@?V@?I?C"?Tx?Z@?G5@2* ?(8Ap ?B`?>;"E&?8?R?P+?6?(@?$@?ɍ7[vZJK?-D6$?0`>qN`?2@?>ȟ?.% ?G?R}?;;cCڊ?# ?Sp?EJ@R4X 2@?'F͠@̜K?1{>MUM?2S,@OG;@&?O@?X&UԠ>k ?R7x?T ?Q@0PB?=@?M2?*;e ?RK ?]S?0 He7?*E?U7X?HQKLЀO,G IFY_V Bt?2<?We?KY`PրPe 6`7X?C<?U?;??@ $`4@?E\e`?Pր?B\N S 3@?7G?1^D ?"]`?*?*E 62`OJZ6HGL! 'kK'?R`?SZƠ?`s?\ǀ?Pc ?2?%G ?F @GS% _'`baSC ?A?Q`Cqc2R@?J)@V#:@?MP`?Nf`?@?>I?Q?W?GL8bev^`9y0M qc H`X>?-?# =No`UH?7`?Fm?Qd?K[6V`K@J f J?@?6֕S3+Wʞ ?CFU@?KWJ@]RDc C? H`R @TLALLXXVEJA@?8R@?V~?P4?6=C?H?LcX`1h|@E. ?R$M?Z?PT ?R?V?Rd/?P?Tš?\b@?Vm?$ὀ?V@?F?$";+@]% d@@AY'?-NF ?<Ɏ?;!_?0xI`?7變I$@XsD`Fu@R`Z? ]`Dx**@?1& x F J?2?R`?G?(`<Ɏ865H>?6\?Ro?4K@B:-c?*??l*? ?I~M?Sl?=39d`?=]`?R?'Y+!?S^?X]?Wru?QO?M?`?P~?H`>$K8_@Ḯ?, ?#Ë@JF 1$?I/ ?Aɗ)؀V\`e\e`^{3Ë@?&z@?C?Ig?#]T?34r ?7<`R|v`[/mLT9O\?TI?V>RoV a\YD6?BxA`./M3mLwɠ6 ? O^MK@F#@?@!g?AB?5R,?"Y@}e$?D1?#m/d?49?JF?P̜?@!g)?F ?\.?U?K?@?Gru?!$#;?@Cj?Bt@?K@ZSf @?RY?M2S?J_+`?P/?C@?? L`R[i`]@a@W@?>{3P>Զ?S?RCH`WW ?4\ ?_$`?S?4K@0 WvJY9h@?JJ?< ?\@?^{ _ᵀ`?Kc?4?B˭`?wR%=`?xA`3>W`XjS`GجG| (զ@?V?`?V? R`Lt ?;\?4@6? ݈?6G|`? >>JJ??*9? ?2?#V?E0?T.?Pq?@+?l*\ V}%7o`9/qN`?G?Ah|?GI?GP] `D@9Uj`<Ɏ?L0= ?Q|@&\>10E ?B/̀?Tׄ?J}?E?A`@? s- ?C6@?E @cM38l?0K?Rh?JC`AD?4qN`??Q)K ?8@?$\ K\?? ?^?J*@4g20D4 XEFXG ?).?FCV`МQ?2 @?Xc?D4 ? sX%U`@`M4?R`1 `?Y=?e徠?K@S~H?<&`?@@?;?>?X0`>*9JdGS K@Q`C5@?XB?cq?JPs Y"@E?#`Nqb \K DHkALaE@B ?$P?2@1; +:`?֕?DW?SL?Ww?K#c@??A5aR@[?@ h`?" x?T `?,ZB1m ?Tr?O|@?0^?J}`?PXX`?FA?G?Lr?Nߟ?D`?? k Dὀ>c@?N?EB%=`O"@E?MwR?S `?!g08UD`l:~@S\ ER,BQ6?5)?[ @?HXp@9nC4r ; 4M C;T{F M]`MA?R?Y@A& FL\`VL?5f?GX ?9d`?Ar`?9K?0n?Fm?7O(`\@X":( ?CĀ? K] ?@?CoB4I?ǀ#D6Q ;@+!?R`?\ ?K#?9y0?W?[w?2\ Զ?StT@?S?FA?R?JF(զ@>?@h`?Dd?V?Z7?A ;G":@`?3 ?" `G`Jb`@:7[vGK&| ?4i?O`?*(e74i'z ?G9?L$ὀA%?D@?VB ?FB` ?"! ~EF`8R@ @Cŀ??V??>+Gr`s?P!g?\?PoW?K? xA`6??<Dׄ_.OU*?R_?\ ?B#PqSC ?# ?I?=S?'N,W!`?@:?W-`(T/`US 7``?E @?FD sQ1@Xu Qk?ᵀ?)Z#[@OqF@?^N?Z:L:uQ6y@M7oN*1`+?@/ *?>?H `?Hm>@?B[>@?Q?R2[?;@?0c ?R?Q?9'k?Rt?Y?>?5@?Qm?HR?9K1?EԠ?C ?8?(q? ?N`?ar?aP?R?7  58 A|?4l?NI?:*@?< ?P=??)? D`?D`>*9^e_ZF?3?V ?@}e4iNyhV"oB1r`UY@N-?fLX^Ӡ,D`?F+`?K?T@@?OU*4)PrM?M"r=Z DP@?[!_?`^?BGPPBr=4)>*9?B`gH3?G ?]J ?)@Q?E@? xA`"r=>qN`?@,?t@Y`cix`1``ZJSBK@LɎ?(Z`?_M?Y؀?'X?7<`?Tz@?Sȧ?>{D_k@X@Q@?(Z?.C=wR;!?5?UŠ?cH??b?Nڂ6Q PcE?EB?MV#4r C?(4?I`?M@?F^?U<?FGoo?B\9? H`?X`?O(8H`&[?J f ?=9?γ@?GT#^`F=CAz_@+ ?(Z?;O^?]\}@?c ֠?V#?<0= ? Z?4?$>3 '< 5ՠ2 @0Of?B`?ZS?STc ?:;e ?B@ \Z1,`?:?F@H 9 Q`Kh`P@8,VHÀL ?;!_5EO$`?_` Pc ?2?@..?%›B#7@?@T ?89g@?:id?^@?U* I=;!FzMDEݠ?F ?\wɠ?W[`?O1d@?E;s%J`?DL@?Z`?F ,@?-?.biILe @Z W73{?# ?c?A`?PH`?I ?Fx ?S?KBXcN6@?"qN`PՎ`B y?V5@?c[j ?_r`?EӀD>3 Kf^ b?Cbq ?Gr`?0?>v@?W_K@?GJEFf&`2wZ ?Oi?Cbq GX?B?Wr5?\ ?a{?JaU`Nf`@րC4?%{`?Cl?,@+MVT=@S`XPë@?>/@?8UJx3V?M?`?N?C~?9?#p?Z2: RD>TW1:}?O?Wʀ?F?-/`9JBW`P5M`?O ?5)J W;@TCO`> ?? Z?4)n?3C ?['?O'*1,`?34r 8[P|@5 ?D4 ?SR M?.@?2?8?O~`?$@O;@#?\ D`/?}?0`?`0@?`?=P6# A5aF`?%@?NJx Ro9?Ds܀?A`@?MwR?a?_@K] )ZP`a{=9?UP8@?E?A`96`M/`@e@?.9`& [\UJ?K[?R: :@`W,`[CKkz?B?"?O(`?#C7@?8?a?S}`V?^ SE@Az ?H?<RK??^?Fa ?0s- ?S%\e`X$ ?FD@?'?8~Ġ?@ 1c``4ὀ?7V?+UT`?5?V`?H%›AϠP}eWʀQ>S?!? ?RE?I1 ~-ހ?9@?!F@?4a`?T`?P?C'`?W?Q0H`?.9`?D.Gs`Cv`I ??? s^נ\)٠?+!?0G@Ea1 `6$@Pڪ7?A?F ?I@?1m *&?82?%R,N?{?@\-ܙ OPoWX\:u7 ?S?OE@?82?U??`A?Pd ?A@?NA _`?" @?\Ź4MV?G0@?LcX`3s@I,G" MVT5A?=]`?5@B @5 91 C`@>91 B-?`,cX`?:_+`#\`V@RF;?P'@?;h`XрN- ?VY_?Y ?@@#M@KxA`?3?Cs@?8?FZidT1?I42@?VHÀ?0@)n?IW?X@?; QlRM|n@$@7 ,V@?A]@?=|n@>JJ>ΩA#~`K^?.k ?J!׀$;+`?:x? `Q0E L>g@?>ȟ?Pu@?[Q?Y?A%EG4@?T?Q$$ׄ?&?B! ?6z@?Ru?2 @?Cv`E+ :_+`@\@W}@?;!?!_`T(z@G?)PN;>F ?O|?JZ?CS ?<(P@/GQ=`I@?=9?Y"O ?<5Y`V`+ZCE?L@?[?H9n?e?OW?H ?QM?^?EcG @?F# ?X ?h|?3S?] ?P 9nB `H,:?:;e #Ë@?N?EE?CZƠ?V6?:xQsM2AuC< +0@H`Ii۠D"`P`XR@NI?'e?K ? V:R ?N"?b?Wӏ@3KTˀ@'HU9?@!g$Hk[谀X@?4qN`?KѠ>t@>?@?F@E!CM1DW{g V?=4?R?:s?9@?C?@??"S9g@&=C?Q 7?N5Ԡ?Pb?AR@?= #7`Ig?2wZ?K.&? ^?H6?Xզ@?,@C ?2( B@4>3 1T `?"@?Kw?CS ?FY_?R1 Y@Gh<?43V8n+?/@?K?,ɎR?O?2 x?@F?H`Sn`Q`? ?`@?c *9XEF>]L1^D Va U X2΀? O^8"@aI?$?2/̀>t@?;?@?Eٛ`$iB ?{`?Gs?3 SBXU?) ?D9HjS`BD>?O ?T'3?H4?D1?;@?41?FV`?>Ã@Am H77NRf`?7< ?X ?Ol*3S SREa?@@xI`e@egE?0^9 >g?; /?>+=No`R\ 6 ?+? QP@:?7<`[@+?]`?R=`?TEݠ?? M~'`?T\@?RwZ-m@GHnFz@?Q@?c?5G X>%)J ?B-?`H|6Vl`F ?/.?<+ -%6=C?&z?3s@?9@?=O>R@ }e?0^?E?Cŀ=݈PoW.IDP@`c U(?Dvj?T0?T)?VS@?S]T?K?HU?EPe@M/`C@LG-@??Cv`?>+?U?T{Wdcv`BX?#Ë@Pj;Ii۠?=?OU*?K'?EJ@?&G|`>@-No`BI@ S ֠L 878 ?A?H](4<9??#{?9_?)KWV`1?R;Qb`@L?]`G`bvh 8c]TX{F?+ ?+&| CU@=* ?Hզ@?W,?R ?H"?J ?I?8Z`Զ?%G ;xT\9.Ap'@?K?Qz_?P`?GG@/R1`s?E)J ?(?!F@?>5 SR @c ?P`?` ?[W @?Dὀ?B?KD?6?Qs?`z?!r`Yn>ոc@?Q`$.MƉ&`?I?CȧER,K?)2?@̜? ? 8?< ?8H`?ǀ9Uj`G;?;}]?DW h`?<@?R@i?I_?Cߧ ?Pe ?Z1,`?V$@2S >N`6Q 5~?-@?LV?<*@?P?aϠ?S ?7:@?Nd ?G:1 ~?$`PyBDSF-1.10.1/test/tbdsf_process_image.py000066400000000000000000000010701420247104600201520ustar00rootroot00000000000000import bdsf import sys # Process the image img = bdsf.process_image('tbdsf_process_image.in', ncores=2) # List of operations that must have been done on `img`. operations = [ 'readimage', 'collapse', 'preprocess', 'rmsimage', 'threshold', 'islands', 'gausfit', 'gaul2srl', 'make_residimage', 'wavelet_atrous', 'shapelets', 'spectralindex', 'polarisation', 'psf_vary', 'cleanup' ] # Return exit status 0 if everything went fine, otherwise return 1. if img and all(oper in img.completed_Ops for oper in operations): sys.exit(0) else: sys.exit(1) PyBDSF-1.10.1/test/test.py000066400000000000000000000150471420247104600151400ustar00rootroot00000000000000 import sys import numpy as N sys.path.append('') def plotim(): """ Plots the image and overlays the island borders with the island number. Also draws the detected gaussians at their fwhm radius, with each source being a colour (and line style). """ bdsm.analysis.plotresults(img) def getisl(c): """ Plots the image and overlays the island borders with the island number. Also draws the detected gaussians at their fwhm radius, with each source being a colour (and line style). """ islid = bdsm.analysis.getisland(img, c) return img.islands[islid] def plot_morph_isl(img, isls=None, thr=None): bdsm.analysis.plot_morph_isl(img, isls, thr) def call_pybdsm(version, parameters): if version not in ['stable', 'david', 'test']: raise RuntimeError(version+" Version unknown") if version == 'stable': import bdsm_stable as bdsm if version == 'david': import bdsm_david as bdsm if version == 'test': import bdsm_test as bdsm img = bdsm.execute(bdsm.fits_chain, parameters) return img, bdsm #img, bdsm = call_pybdsm('test', {'fits_name': "subim.fits", 'beam' : (0.0015, 0.0015, 0.0), 'thresh':"hard", 'atrous_do' : False}) #img, bdsm = call_pybdsm('test', {'fits_name': "concatenated-003-002.restored.fits", 'thresh':"hard", 'atrous_do' : False, 'stop_at' : 'isl'}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "HydraA_74MHz_image.fits", 'thresh':"hard", 'atrous_do' : True, 'atrous_bdsm_do' : False, 'atrous_jmax' : 6, 'solnname' : 'del-norms_nobeam_deeper', 'ini_gausfit' : 'nobeam', 'opdir_overwrite' : 'append', 'mean_map' : False, 'rms_map' : False, 'thresh_pix' : 60, 'thresh_isl' : 45}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "HydraA_74MHz_image.pybdsm.atrous.w6_norms_deep.fits", 'thresh':"hard", 'atrous_do' : False, 'solnname' : 'nobeam', 'opdir_overwrite' : 'append', 'mean_map' : False, 'rms_map' : False, 'mean_map' : False, 'ini_gausfit' : 'nobeam', 'flag_smallsrc' : False, 'flag_minsnr' : 0.2, 'flag_maxsnr' : 3.0, 'flag_maxsize_isl' : 5.0, 'flag_maxsize_bm' : 45.0, 'flag_minsize_bm' : 0.2}) #img, bdsm = call_pybdsm('test', {'fits_name': "A2255_85CM_BEAM_cut.fits", 'beam' : (0.0167, 0.0167, 0.0), 'thresh':"hard", 'atrous_do' : True, 'atrous_bdsm_do' : True, 'solnname' : 'del', 'ini_gausfit' : 'fbdsm', 'opdir_overwrite' : 'append'}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "matteo_mfs.im.fits", 'beam' : (0.002, 0.002, 0.0), 'thresh':"hard"}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "WN65341H.fits", 'beam': (.0165515, .01500, 0.0), 'thresh':"hard", 'atrous_do' : False}) #img, bdsm = call_pybdsm('test', {'fits_name': "WN35078H.fits", 'beam': (.0261, .01500, 0.0), 'thresh':"hard", 'atrous_do' : True, 'shapelet_do' : False, 'ini_gausfit' : 'default' }) #img, bdsm = call_pybdsm('test', {'fits_name': "3C274-P.FITS", 'beam': (.00654, .00654, -45.0), 'thresh':"hard", 'atrous_do' : True, 'atrous_jmax' : 5, 'bbs_patches' : 'single', 'solnname' : 'new', 'ini_gausfit' : 'default', 'opdir_overwrite' : 'append', 'atrous_bdsm_do' : True, 'rms_map' : False, 'mean_map' : False, 'thresh_pix' : 100, 'thresh_isl' : 60}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "Cas_A-P.models.FITS", 'thresh':"hard", 'atrous_do' : False, 'rms_map' : False, 'mean_map' : False }) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "VIRA-4.MOD.FITS", 'thresh':"hard", 'atrous_do' : True }) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "VIRA-4.MOD.pybdsm.atrous.w6.fits", 'thresh':"hard", 'rms_box' : (63, 21)}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "Cyg_A-P_mod.FITS", 'thresh':"hard", 'atrous_do' : False , 'rms_map' : False }) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "Cyg_A-4.model.FITS", 'thresh':"hard", 'atrous_do' : False, 'rms_map' : False , 'thresh_pix' : 6}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "Cyg_A-P-cut.fits", 'thresh':"hard", 'atrous_do' : True , 'rms_map' : False, 'mean_map' : 'const', 'thresh_pix' : 1000, 'thresh_isl' : 800, 'ini_gausfit' : 'default', 'solnname' : 'del', 'atrous_bdsm_do' : False}) img, bdsm = call_pybdsm('test' ,{'fits_name': "Cyg_A-P-cut.pybdsm.atrous.w12.fits", 'thresh':"hard", 'atrous_do' : False , 'rms_map' : False, 'mean_map' : 'const', 'ini_gausfit' : 'fbdsm', 'solnname' : 'del', 'opdir_overwrite' : 'append', 'stop_at' : 'isl'}) #img, bdsm = call_pybdsm('test' ,{'fits_name': "Cyg_A-P-cut.pybdsm.atrous.w12.fits", 'thresh':"hard", 'atrous_do' : False , 'rms_map' : False, 'mean_map' : 'const', 'thresh_pix' : 30, 'thresh_isl' : 20, 'ini_gausfit' : 'fbdsm'}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "SB128_138-002-002.fits", 'thresh':"hard", 'solnname' : 'try' }) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "concatenated-000-004.restored.fits", 'rms_box' : (130, 40), 'thresh':"hard", 'atrous_do' : False, 'shapelet_do' : False }) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "mi_spam.fits", 'beam': (.0222, .0222, 0.0), 'thresh':"hard", 'atrous_do' : False }) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "marijke.fits", 'beam': (.004, .004, 0.0), 'thresh':"hard", 'atrous_do' : True, 'thresh_isl' : 20, 'thresh_pix' : 100}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "SST1cont.image.restored.fits", 'beam': (.008333, .008333, 0.0), 'thresh':"hard", 'atrous_do' : False}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "bootbig.FITS", 'beam': (.00154, .00154, 0.0), 'thresh':"hard", \ # 'atrous_do' : True, 'atrous_bdsm_do' : False}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "WN35060H", 'beam': (.0165515, .01500, 0.0), 'thresh':"hard"}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "lock_cube1.fits", 'beam': (.0054, .0044, 0.0), \ # 'collapse_mode' : 'average', 'collapse_wt' : 'unity', 'beam_sp_derive' : \ # True, 'atrous_do' : True, 'debug_figs' : True}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "newcube1.fits", 'beam': (.00389, .003056, 0.0), \ # 'collapse_mode' : 'average', 'collapse_wt' : 'rms', 'thresh' : 'hard', 'atrous_do' : True}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "sim1.1.FITS", 'beam': (.00143, .00143, 0.0),\ # 'collapse_mode' : 'average', 'collapse_wt' : 'rms', 'thresh' : 'hard', 'thresh_pix' : '30'}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "A2255_I.fits", 'beam': (.018, .014, 5.0), 'collapse_mode' # : 'average', 'collapse_wt' : 'rms', 'thresh' : 'hard', 'thresh_isl' : 20.0, 'thresh_pix' : 50.0, # 'polarisation_do': True, 'atrous_do' : True}) #img = bdsm.execute(bdsm.fits_chain,{'fits_name': "try.fits", 'beam': (.056, .028, 160.0), 'thresh':"hard", 'thresh_pix':20.}) PyBDSF-1.10.1/test/test_watershed.py000066400000000000000000000104061420247104600172000ustar00rootroot00000000000000 import matplotlib.cm as cm import scipy.ndimage as nd from bdsf.const import fwsig from bdsf.gausfit import Op_gausfit as gg import bdsf.functions as func from _cbdsm import MGFunction from _cbdsm import lmder_fit, dn2g_fit, dnsg_fit import numpy as N from copy import deepcopy as cp for isl in img.islands: #isl = img.islands[153] if isl.ngaus > 1: thr = isl.mean + img.opts.thresh_pix*isl.rms im = isl.image; mask = isl.mask_active; av = img.clipped_mean; im1 = cp(im) ind = N.array(N.where(~mask)).transpose() ind = [tuple(coord) for coord in ind if im[tuple(coord)] > thr] n, m = isl.shape; iniposn = []; inipeak = [] for c in ind: goodlist = [im[i,j] for i in range(c[0]-1,c[0]+2) for j in range(c[1]-1,c[1]+2) \ if i>=0 and i=0 and j goodlist) == len(goodlist) if peak: iniposn.append(c); inipeak.append(im[c]) nmulsrc = len(iniposn) if nmulsrc > 1: markers = N.zeros(im.shape, int) markers[0,0] = 1 for ipk in range(nmulsrc): pk = inipeak[ipk]; x, y = iniposn[ipk] markers[int(round(x)), int(round(y))] = ipk+2 im2 = N.zeros(im.shape, int) im1 = im1 - im1.min() im1 = im1/im1.max()*255 im1 = 255-im1 nd.watershed_ift(N.array(im1, N.uint8), markers, output = im2) fcn = MGFunction(im, isl.mask_active, 1) fit = lmder_fit gg1 = gg() for ipk in range(nmulsrc): ind = ipk+2 mom = func.momanalmask_gaus(im, im2, ind, 1.0, True) indd = N.where(im2==ind) mom[3] = 3.0; mom[4]=3.0 g = [float(N.max(im[indd])), int(round(mom[1])), int(round(mom[2])), mom[3]/fwsig, mom[4]/fwsig, mom[5]] gg1.add_gaussian(fcn, g, dof = isl.size_active) print g fit(fcn, final=0, verbose=True) print fcn.parameters import pylab as pl pl.figure() pl.subplot(2,2,1);pl.imshow(N.transpose(im), interpolation='nearest', origin='lower'); pl.title(str(isl.island_id)) pl.subplot(2,2,2);pl.imshow(N.transpose(im1), interpolation='nearest', origin='lower'); pl.title(str(isl.island_id)) pl.subplot(2,2,3);pl.imshow(N.transpose(im2), interpolation='nearest', origin='lower'); pl.title(str(isl.island_id)) for g in fcn.parameters: A, x1, x2, s1, s2, th = g s1, s2 = map(abs, [s1, s2]) if s1 < s2: # s1 etc are sigma ss1=s2; ss2=s1; th1 = divmod(th+90.0, 180)[1] else: ss1=s1; ss2=s2; th1 = divmod(th, 180)[1] c = [A, x1, x2, ss1, ss2, th1] x, y = N.indices(isl.shape) x2, y2 = func.drawellipse(c) #x2 = x2 + isl.origin[0]; y2 = y2 + isl.origin[1] pl.subplot(2,2,4); pl.plot(x2, y2, '-r') pl.imshow(N.transpose(im), origin='lower', interpolation='nearest') import matplotlib.cm as cm import scipy.ndimage as nd import numpy as N from bdsf.const import fwsig from bdsf.gausfit import Op_gausfit as gg import bdsf.functions as func from _cbdsm import MGFunction from _cbdsm import lmder_fit, dn2g_fit, dnsg_fit image = N.zeros((100,100)) markers = N.zeros(image.shape, int) op1 = N.zeros(image.shape, int) op2 = N.zeros(image.shape, int) x, y = N.indices(image.shape) peaks = [2.0, 8.0, 8.0, 2.0] posns = [(30, 20), (50, 20), (30, 70), (50, 70)] bmaj = [2.0, 12.0, 2.0, 12.0] brat = [2.0, 2.0, 2.0, 2.0] markers[10,10] = 1 for ig in range(len(peaks)): g = peaks[ig]*N.exp(-0.5*((x-posns[ig][0])*(x-posns[ig][0])+(y-posns[ig][1])*(y-posns[ig][1])) \ /(bmaj[ig]*bmaj[ig]/brat[ig])) image = image + g markers[int(round(posns[ig][0])), int(round(posns[ig][1]))] = ig+2 image1 = image - image.min() image1 = image1/image1.max()*255 image1 = 255-image1 nd.watershed_ift(N.array(image1, N.uint8), markers, output = op1) pl.figure();pl.imshow(N.transpose(image), interpolation='nearest', origin='lower'); pl.title('orig'); pl.colorbar() pl.figure();pl.imshow(N.transpose(image1), interpolation='nearest', origin='lower'); pl.title('input1'); pl.colorbar() pl.figure();pl.imshow(N.transpose(op1), interpolation='nearest', origin='lower'); pl.title('output1'); pl.colorbar() pl.figure();pl.imshow(N.transpose(markers), interpolation='nearest', origin='lower'); pl.title('markers'); pl.colorbar()